OSDN Git Service

add the interaction functionality between the chrome-extension and Dapp.
[bytom/Byone.git] / src / background.js
1 import { LocalStream } from 'extension-streams'
2 import InternalMessage from '@/messages/internal'
3 import * as MsgTypes from './messages/types'
4
5 import accountAction from "@/models/account";
6 import bytom from "@/models/bytom";
7
8 export default class Background {
9   constructor() {
10     this.setupInternalMessaging()
11     this.setupBytom()
12   }
13
14   setupBytom(){
15     const network = localStorage.bytomNet||'mainnet'
16     bytom.setupNet(network)
17
18     window.addEventListener('storage', storageEventHandler, false);
19     function storageEventHandler(evt){
20       if(evt.key === 'bytomNet'){
21         bytom.setupNet( evt.newValue )
22       }
23     }
24   }
25
26   setupInternalMessaging() {
27     LocalStream.watch((request, sendResponse) => {
28       console.log(request)
29       const message = InternalMessage.fromJson(request)
30       this.dispatchMessage(sendResponse, message)
31     })
32   }
33
34   dispatchMessage(sendResponse, message) {
35     switch (message.type) {
36       case MsgTypes.TRANSFER:
37         this.transfer(sendResponse, message.payload)
38         break
39       case MsgTypes.ADVTRANSFER:
40         this.advancedTransfer(sendResponse, message.payload)
41         break
42       case MsgTypes.SEND:
43         this.send(sendResponse, message.payload)
44         break
45     }
46   }
47
48   transfer(sendResponse, payload) {
49     var promptURL = chrome.extension.getURL('pages/prompt.html')
50     var queryString = new URLSearchParams(payload).toString()
51     console.log(promptURL, queryString)
52     chrome.windows.create(
53       {
54         url: `${promptURL}#transfer?${queryString}`,
55         type: 'popup',
56         width: 350,
57         height: 623,
58         top: 0,
59         left: 0
60       },
61       () => {
62         sendResponse(true)
63       }
64     )
65   }
66
67   advancedTransfer(sendResponse, payload) {
68     var promptURL = chrome.extension.getURL('pages/prompt.html')
69     var queryString = 'object='+JSON.stringify(payload)
70     console.log(promptURL, queryString)
71     chrome.windows.create(
72       {
73         url: `${promptURL}#advancedTransfer?${queryString}`,
74         type: 'popup',
75         width: 350,
76         height: 623,
77         top: 0,
78         left: 0
79       },
80       (window) => {
81         chrome.runtime.onMessage.addListener(function(request, sender) {
82           if(sender.tab.windowId === window.id){
83             switch (request.method){
84               case 'advanced-transfer':
85                 sendResponse(request);
86                 break
87             }
88           }
89         });
90       }
91     )
92   }
93
94   send(sendResponse, payload) {
95     const action = payload.action
96     const body = payload.body
97     if(action){
98       let promise
99       switch (action){
100         case 'listAllAccount':
101           promise = accountAction.list()
102           break
103         case 'currentAccount':
104           let account = JSON.parse(localStorage.currentAccount)
105           sendResponse(account)
106           break
107         case 'balance':
108           const id = body.id
109           const guid = body.guid
110           promise = accountAction.balance(guid, id)
111           break
112       }
113       if(promise){
114         promise.then(resp =>
115         {
116           sendResponse(resp)
117         })
118       }
119     }
120   }
121 }
122
123 new Background()