1 import NetworkMessage from '@/messages/network'
2 import * as MsgTypes from './messages/types'
3 import * as EventNames from '@/messages/event'
4 import IdGenerator from '@/utils/IdGenerator'
7 * This is just a helper to manage resolving fake-async
8 * requests using browser messaging.
10 class DanglingResolver {
11 constructor(_id, _resolve, _reject) {
13 this.resolve = _resolve
18 let stream = new WeakMap()
19 let resolvers = new WeakMap()
20 let currentVersion = new WeakMap()
21 let requiredVersion = new WeakMap()
24 * Messages do not come back on the same thread.
25 * To accomplish a future promise structure this method
26 * catches all incoming messages and dispenses
27 * them to the open promises. */
28 const _subscribe = () => {
29 stream.listenWith(msg => {
30 if (!msg || !msg.hasOwnProperty('type')) return false
32 for (let i = 0; i < resolvers.length; i++) {
33 if (resolvers[i].id === msg.resolver) {
34 if (msg.type === 'error') resolvers[i].reject(msg.payload)
35 else resolvers[i].resolve(msg.payload)
36 resolvers.splice(i, 1)
43 * Turns message sending between the application
44 * and the content script into async promises
48 const _send = (_type, _payload) => {
49 return new Promise((resolve, reject) => {
50 let id = IdGenerator.numeric(24)
51 let message = new NetworkMessage(_type, _payload, id)
52 resolvers.push(new DanglingResolver(id, resolve, reject))
53 stream.send(message, EventNames.BYTOM)
58 export default class Bytomdapp {
59 constructor(_stream, _options) {
60 // currentVersion = parseFloat(_options.version)
63 this.default_account = _options.defaultAccount
64 this.net = _options.net
65 this.chain = _options.chain
71 return _send(MsgTypes.ENABLE)
72 .then(async default_account =>{
73 this.default_account = default_account;
74 return default_account;
78 send_transaction(params) {
79 return _send(MsgTypes.TRANSFER, params)
82 sign_transaction(params) {
83 return _send(MsgTypes.SIGNTRANSACTION, params)
86 send_advanced_transaction(params) {
87 return _send(MsgTypes.ADVTRANSFER, params)
90 sign_message(params) {
91 return _send(MsgTypes.SIGNMESSAGE, params)