@0xsequence/provider 0.0.0-20230417133433 → 0.0.0-20230505164841
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/0xsequence-provider.cjs.dev.js +146 -167
- package/dist/0xsequence-provider.cjs.prod.js +146 -167
- package/dist/0xsequence-provider.esm.js +74 -98
- package/dist/declarations/src/transports/wallet-request-handler.d.ts +4 -4
- package/dist/declarations/src/types.d.ts +2 -0
- package/package.json +10 -10
- package/src/provider.ts +4 -4
- package/src/transports/wallet-request-handler.ts +62 -12
- package/src/types.ts +3 -0
- package/src/wallet.ts +7 -2
|
@@ -6,8 +6,8 @@ var eventemitter2 = require('eventemitter2');
|
|
|
6
6
|
var utils = require('@0xsequence/utils');
|
|
7
7
|
var ethers = require('ethers');
|
|
8
8
|
var core = require('@0xsequence/core');
|
|
9
|
-
var network = require('@0xsequence/network');
|
|
10
9
|
var auth = require('@0xsequence/auth');
|
|
10
|
+
var network = require('@0xsequence/network');
|
|
11
11
|
var wallet = require('@0xsequence/wallet');
|
|
12
12
|
|
|
13
13
|
function _extends() {
|
|
@@ -28,14 +28,12 @@ function _extends() {
|
|
|
28
28
|
// ProviderMessageCallback is used to respond to ProviderMessage requests. The error
|
|
29
29
|
// argument is for exceptions during the execution, and response is the response payload
|
|
30
30
|
// which may contain the result or an error payload from the wallet.
|
|
31
|
-
|
|
32
31
|
class WindowSessionParams extends URLSearchParams {
|
|
33
32
|
static new(init) {
|
|
34
33
|
return new URLSearchParams(init);
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
|
-
|
|
38
|
-
(function (EventType) {
|
|
36
|
+
let EventType = /*#__PURE__*/function (EventType) {
|
|
39
37
|
EventType["OPEN"] = "open";
|
|
40
38
|
EventType["CLOSE"] = "close";
|
|
41
39
|
EventType["MESSAGE"] = "message";
|
|
@@ -47,19 +45,27 @@ exports.EventType = void 0;
|
|
|
47
45
|
EventType["WALLET_CONTEXT"] = "walletContext";
|
|
48
46
|
EventType["INIT"] = "init";
|
|
49
47
|
EventType["DEBUG"] = "_debug";
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
return EventType;
|
|
49
|
+
}({});
|
|
50
|
+
let OpenState = /*#__PURE__*/function (OpenState) {
|
|
53
51
|
OpenState[OpenState["CLOSED"] = 0] = "CLOSED";
|
|
54
52
|
OpenState[OpenState["OPENING"] = 1] = "OPENING";
|
|
55
53
|
OpenState[OpenState["OPENED"] = 2] = "OPENED";
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
return OpenState;
|
|
55
|
+
}({});
|
|
56
|
+
let InitState = /*#__PURE__*/function (InitState) {
|
|
59
57
|
InitState[InitState["NIL"] = 0] = "NIL";
|
|
60
58
|
InitState[InitState["SENT_NONCE"] = 1] = "SENT_NONCE";
|
|
61
59
|
InitState[InitState["OK"] = 2] = "OK";
|
|
62
|
-
|
|
60
|
+
return InitState;
|
|
61
|
+
}({});
|
|
62
|
+
|
|
63
|
+
/** Options to further customize the wallet experience. */
|
|
64
|
+
|
|
65
|
+
/** light and dark are the main themes, to use other themes in wallet settings,
|
|
66
|
+
* you can use the camel case version of the name in the wallet settings.
|
|
67
|
+
* For example: "Blue Dark" on wallet UI can be passed as "blueDark" */
|
|
68
|
+
|
|
63
69
|
class ProviderError extends Error {
|
|
64
70
|
constructor(message) {
|
|
65
71
|
super(message);
|
|
@@ -79,21 +85,12 @@ class BaseProviderTransport {
|
|
|
79
85
|
var _this = this;
|
|
80
86
|
this.pendingMessageRequests = [];
|
|
81
87
|
this.responseCallbacks = new Map();
|
|
82
|
-
this.state = void 0;
|
|
83
88
|
this.confirmationOnly = false;
|
|
84
89
|
this.events = new eventemitter2.EventEmitter2();
|
|
85
|
-
this.openPayload = void 0;
|
|
86
|
-
this.connectPayload = void 0;
|
|
87
|
-
this.accountsChangedPayload = void 0;
|
|
88
|
-
this.networksPayload = void 0;
|
|
89
|
-
this.walletContextPayload = void 0;
|
|
90
|
-
this._sessionId = void 0;
|
|
91
|
-
this._init = void 0;
|
|
92
|
-
this._registered = void 0;
|
|
93
90
|
this.sendAsync = async function (request, callback, chainId) {
|
|
94
91
|
// here, we receive the message from the dapp provider call
|
|
95
92
|
|
|
96
|
-
if (_this.state ===
|
|
93
|
+
if (_this.state === OpenState.CLOSED) {
|
|
97
94
|
// flag the wallet to auto-close once user submits input. ie.
|
|
98
95
|
// prompting to sign a message or transaction
|
|
99
96
|
_this.confirmationOnly = true;
|
|
@@ -118,7 +115,7 @@ class BaseProviderTransport {
|
|
|
118
115
|
|
|
119
116
|
const response = await _this.sendMessageRequest({
|
|
120
117
|
idx: nextMessageIdx(),
|
|
121
|
-
type:
|
|
118
|
+
type: EventType.MESSAGE,
|
|
122
119
|
data: request,
|
|
123
120
|
chainId: chainId
|
|
124
121
|
});
|
|
@@ -127,6 +124,7 @@ class BaseProviderTransport {
|
|
|
127
124
|
callback(err);
|
|
128
125
|
}
|
|
129
126
|
};
|
|
127
|
+
// sendMessageRequest sends a ProviderMessageRequest over the wire to the wallet
|
|
130
128
|
this.sendMessageRequest = async function (message) {
|
|
131
129
|
return new Promise((resolve, reject) => {
|
|
132
130
|
if ((!message.idx || message.idx <= 0) && message.type !== 'init') {
|
|
@@ -162,7 +160,7 @@ class BaseProviderTransport {
|
|
|
162
160
|
clearTimeout(timeout);
|
|
163
161
|
// only emit close if the timeout wins the race
|
|
164
162
|
if (!opened) {
|
|
165
|
-
_this.state =
|
|
163
|
+
_this.state = OpenState.CLOSED;
|
|
166
164
|
_this.events.emit('close', {
|
|
167
165
|
code: 1005,
|
|
168
166
|
message: 'opening wallet timed out'
|
|
@@ -207,9 +205,9 @@ class BaseProviderTransport {
|
|
|
207
205
|
});
|
|
208
206
|
return Promise.race([connect, closeWallet]);
|
|
209
207
|
};
|
|
210
|
-
this.state =
|
|
208
|
+
this.state = OpenState.CLOSED;
|
|
211
209
|
this._registered = false;
|
|
212
|
-
this._init =
|
|
210
|
+
this._init = InitState.NIL;
|
|
213
211
|
}
|
|
214
212
|
get registered() {
|
|
215
213
|
return this._registered;
|
|
@@ -227,7 +225,7 @@ class BaseProviderTransport {
|
|
|
227
225
|
throw new Error('abstract method');
|
|
228
226
|
}
|
|
229
227
|
isOpened() {
|
|
230
|
-
return this.registered && this.state ===
|
|
228
|
+
return this.registered && this.state === OpenState.OPENED;
|
|
231
229
|
}
|
|
232
230
|
isConnected() {
|
|
233
231
|
var _this$openPayload2;
|
|
@@ -240,7 +238,7 @@ class BaseProviderTransport {
|
|
|
240
238
|
var _this2 = this;
|
|
241
239
|
// init incoming for initial handshake with transport.
|
|
242
240
|
// always respond to INIT messages, e.g. on popup window reload
|
|
243
|
-
if (message.type ===
|
|
241
|
+
if (message.type === EventType.INIT) {
|
|
244
242
|
utils.logger.debug('MessageProvider, received INIT message', message);
|
|
245
243
|
const {
|
|
246
244
|
nonce
|
|
@@ -249,17 +247,17 @@ class BaseProviderTransport {
|
|
|
249
247
|
utils.logger.error('invalid init nonce');
|
|
250
248
|
return;
|
|
251
249
|
}
|
|
252
|
-
this._init =
|
|
250
|
+
this._init = InitState.OK;
|
|
253
251
|
this.sendMessage({
|
|
254
252
|
idx: -1,
|
|
255
|
-
type:
|
|
253
|
+
type: EventType.INIT,
|
|
256
254
|
data: {
|
|
257
255
|
sessionId: this._sessionId,
|
|
258
256
|
nonce: nonce
|
|
259
257
|
}
|
|
260
258
|
});
|
|
261
259
|
}
|
|
262
|
-
if (this._init !==
|
|
260
|
+
if (this._init !== InitState.OK) {
|
|
263
261
|
// if provider is not init'd, then we drop any received messages. the only
|
|
264
262
|
// message we will process is of event type 'init', as our acknowledgement
|
|
265
263
|
return;
|
|
@@ -276,7 +274,7 @@ class BaseProviderTransport {
|
|
|
276
274
|
// OPEN response
|
|
277
275
|
//
|
|
278
276
|
// Flip opened flag, and flush the pending queue
|
|
279
|
-
if (message.type ===
|
|
277
|
+
if (message.type === EventType.OPEN && !this.isOpened()) {
|
|
280
278
|
var _message$data, _message$data2;
|
|
281
279
|
if (this._sessionId && this._sessionId !== ((_message$data = message.data) == null ? void 0 : _message$data.sessionId)) {
|
|
282
280
|
utils.logger.debug('open event received from wallet, but does not match sessionId', this._sessionId);
|
|
@@ -293,7 +291,7 @@ class BaseProviderTransport {
|
|
|
293
291
|
}
|
|
294
292
|
|
|
295
293
|
// success!
|
|
296
|
-
this.state =
|
|
294
|
+
this.state = OpenState.OPENED;
|
|
297
295
|
this.openPayload = message.data;
|
|
298
296
|
this.events.emit('open', this.openPayload);
|
|
299
297
|
|
|
@@ -308,7 +306,7 @@ class BaseProviderTransport {
|
|
|
308
306
|
}
|
|
309
307
|
|
|
310
308
|
// MESSAGE resposne
|
|
311
|
-
if (message.type ===
|
|
309
|
+
if (message.type === EventType.MESSAGE) {
|
|
312
310
|
// Require user confirmation, bring up wallet to prompt for input then close
|
|
313
311
|
// TODO: perhaps apply technique like in multicall to queue messages within
|
|
314
312
|
// a period of time, then close the window if responseCallbacks is empty, this is better.
|
|
@@ -336,7 +334,7 @@ class BaseProviderTransport {
|
|
|
336
334
|
}
|
|
337
335
|
|
|
338
336
|
// ACCOUNTS_CHANGED -- when a user logs in or out
|
|
339
|
-
if (message.type ===
|
|
337
|
+
if (message.type === EventType.ACCOUNTS_CHANGED) {
|
|
340
338
|
this.accountsChangedPayload = {
|
|
341
339
|
accounts: []
|
|
342
340
|
};
|
|
@@ -353,49 +351,46 @@ class BaseProviderTransport {
|
|
|
353
351
|
}
|
|
354
352
|
|
|
355
353
|
// CHAIN_CHANGED -- when a user changes their default chain
|
|
356
|
-
if (message.type ===
|
|
354
|
+
if (message.type === EventType.CHAIN_CHANGED) {
|
|
357
355
|
this.events.emit('chainChanged', message.data);
|
|
358
356
|
return;
|
|
359
357
|
}
|
|
360
358
|
|
|
361
359
|
// NOTIFY NETWORKS -- when a user connects or logs in
|
|
362
|
-
if (message.type ===
|
|
360
|
+
if (message.type === EventType.NETWORKS) {
|
|
363
361
|
this.networksPayload = message.data;
|
|
364
362
|
this.events.emit('networks', this.networksPayload);
|
|
365
363
|
return;
|
|
366
364
|
}
|
|
367
365
|
|
|
368
366
|
// NOTIFY WALLET_CONTEXT -- when a user connects or logs in
|
|
369
|
-
if (message.type ===
|
|
367
|
+
if (message.type === EventType.WALLET_CONTEXT) {
|
|
370
368
|
this.walletContextPayload = message.data;
|
|
371
369
|
this.events.emit('walletContext', this.walletContextPayload);
|
|
372
370
|
return;
|
|
373
371
|
}
|
|
374
372
|
|
|
375
373
|
// NOTIFY CLOSE -- when wallet instructs to close
|
|
376
|
-
if (message.type ===
|
|
377
|
-
if (this.state !==
|
|
374
|
+
if (message.type === EventType.CLOSE) {
|
|
375
|
+
if (this.state !== OpenState.CLOSED) {
|
|
378
376
|
this.close(message.data);
|
|
379
377
|
}
|
|
380
378
|
}
|
|
381
379
|
|
|
382
380
|
// NOTIFY CONNECT -- when wallet instructs we've connected
|
|
383
|
-
if (message.type ===
|
|
381
|
+
if (message.type === EventType.CONNECT) {
|
|
384
382
|
this.connectPayload = message.data;
|
|
385
383
|
this.events.emit('connect', this.connectPayload);
|
|
386
384
|
}
|
|
387
385
|
|
|
388
386
|
// NOTIFY DISCONNECT -- when wallet instructs to disconnect
|
|
389
|
-
if (message.type ===
|
|
387
|
+
if (message.type === EventType.DISCONNECT) {
|
|
390
388
|
if (this.isConnected()) {
|
|
391
389
|
this.events.emit('disconnect', message.data);
|
|
392
390
|
this.close();
|
|
393
391
|
}
|
|
394
392
|
}
|
|
395
393
|
}
|
|
396
|
-
|
|
397
|
-
// sendMessageRequest sends a ProviderMessageRequest over the wire to the wallet
|
|
398
|
-
|
|
399
394
|
sendMessage(message) {
|
|
400
395
|
throw new Error('abstract method');
|
|
401
396
|
}
|
|
@@ -409,8 +404,8 @@ class BaseProviderTransport {
|
|
|
409
404
|
return this.events.emit(event, ...args);
|
|
410
405
|
}
|
|
411
406
|
close(error) {
|
|
412
|
-
if (this.state ===
|
|
413
|
-
this.state =
|
|
407
|
+
if (this.state === OpenState.CLOSED) return;
|
|
408
|
+
this.state = OpenState.CLOSED;
|
|
414
409
|
this.confirmationOnly = false;
|
|
415
410
|
this._sessionId = undefined;
|
|
416
411
|
utils.logger.info('closing wallet and flushing!');
|
|
@@ -637,11 +632,9 @@ class LocalStorage {
|
|
|
637
632
|
}
|
|
638
633
|
|
|
639
634
|
// window.localstorage helper
|
|
640
|
-
LocalStorage._instance = void 0;
|
|
641
635
|
class LocalStore {
|
|
642
636
|
constructor(key, def) {
|
|
643
637
|
this.def = def;
|
|
644
|
-
this.key = void 0;
|
|
645
638
|
this.key = key;
|
|
646
639
|
}
|
|
647
640
|
async get() {
|
|
@@ -669,16 +662,8 @@ class BaseWalletTransport {
|
|
|
669
662
|
// appOrigin identifies the dapp's origin which opened the app. A transport
|
|
670
663
|
// will auto-detect and set this value if it can. This is determined
|
|
671
664
|
// as the parent app/window which opened the wallet.
|
|
672
|
-
|
|
673
665
|
constructor(walletRequestHandler) {
|
|
674
666
|
var _this = this;
|
|
675
|
-
this.walletRequestHandler = void 0;
|
|
676
|
-
this._sessionId = void 0;
|
|
677
|
-
this._registered = void 0;
|
|
678
|
-
this._init = void 0;
|
|
679
|
-
this._initNonce = void 0;
|
|
680
|
-
this._initCallback = void 0;
|
|
681
|
-
this.appOrigin = void 0;
|
|
682
667
|
this.sendAsync = async function (request, callback, chainId) {
|
|
683
668
|
throw new Error('abstract method');
|
|
684
669
|
};
|
|
@@ -687,8 +672,8 @@ class BaseWalletTransport {
|
|
|
687
672
|
|
|
688
673
|
// ensure initial handshake is complete before accepting
|
|
689
674
|
// other kinds of messages.
|
|
690
|
-
if (_this._init !==
|
|
691
|
-
if (request.type ===
|
|
675
|
+
if (_this._init !== InitState.OK) {
|
|
676
|
+
if (request.type === EventType.INIT) {
|
|
692
677
|
if (_this.isValidInitAck(message)) {
|
|
693
678
|
// successful init
|
|
694
679
|
if (_this._initCallback) _this._initCallback();
|
|
@@ -708,9 +693,9 @@ class BaseWalletTransport {
|
|
|
708
693
|
|
|
709
694
|
// handle request
|
|
710
695
|
switch (request.type) {
|
|
711
|
-
case
|
|
696
|
+
case EventType.OPEN:
|
|
712
697
|
{
|
|
713
|
-
if (_this._init !==
|
|
698
|
+
if (_this._init !== InitState.OK) return;
|
|
714
699
|
const session = {
|
|
715
700
|
sessionId: request.data.sessionId,
|
|
716
701
|
intent: request.data.intent,
|
|
@@ -719,13 +704,13 @@ class BaseWalletTransport {
|
|
|
719
704
|
await _this.open(session);
|
|
720
705
|
return;
|
|
721
706
|
}
|
|
722
|
-
case
|
|
707
|
+
case EventType.CLOSE:
|
|
723
708
|
{
|
|
724
|
-
if (_this._init !==
|
|
709
|
+
if (_this._init !== InitState.OK) return;
|
|
725
710
|
// noop. just here to capture the message so event emitters may be notified
|
|
726
711
|
return;
|
|
727
712
|
}
|
|
728
|
-
case
|
|
713
|
+
case EventType.MESSAGE:
|
|
729
714
|
{
|
|
730
715
|
const response = await _this.walletRequestHandler.sendMessageRequest(request);
|
|
731
716
|
_this.sendMessage(response);
|
|
@@ -738,6 +723,7 @@ class BaseWalletTransport {
|
|
|
738
723
|
}
|
|
739
724
|
}
|
|
740
725
|
};
|
|
726
|
+
// sendMessageRequest sends a ProviderMessageRequest to the wallet post-message transport
|
|
741
727
|
this.sendMessageRequest = async function (message) {
|
|
742
728
|
return _this.walletRequestHandler.sendMessageRequest(message);
|
|
743
729
|
};
|
|
@@ -897,7 +883,7 @@ class BaseWalletTransport {
|
|
|
897
883
|
}
|
|
898
884
|
};
|
|
899
885
|
this.walletRequestHandler = walletRequestHandler;
|
|
900
|
-
this._init =
|
|
886
|
+
this._init = InitState.NIL;
|
|
901
887
|
this.walletRequestHandler.on('connect', connectDetails => {
|
|
902
888
|
if (!this.registered) return;
|
|
903
889
|
// means user has logged in and wallet is connected to the app
|
|
@@ -951,7 +937,7 @@ class BaseWalletTransport {
|
|
|
951
937
|
} = openInfo;
|
|
952
938
|
this.sendMessage({
|
|
953
939
|
idx: -1,
|
|
954
|
-
type:
|
|
940
|
+
type: EventType.OPEN,
|
|
955
941
|
data: {
|
|
956
942
|
chainId,
|
|
957
943
|
sessionId,
|
|
@@ -963,7 +949,7 @@ class BaseWalletTransport {
|
|
|
963
949
|
notifyClose(error) {
|
|
964
950
|
this.sendMessage({
|
|
965
951
|
idx: -1,
|
|
966
|
-
type:
|
|
952
|
+
type: EventType.CLOSE,
|
|
967
953
|
data: error ? {
|
|
968
954
|
error
|
|
969
955
|
} : null
|
|
@@ -972,14 +958,14 @@ class BaseWalletTransport {
|
|
|
972
958
|
notifyConnect(connectDetails) {
|
|
973
959
|
this.sendMessage({
|
|
974
960
|
idx: -1,
|
|
975
|
-
type:
|
|
961
|
+
type: EventType.CONNECT,
|
|
976
962
|
data: connectDetails
|
|
977
963
|
});
|
|
978
964
|
}
|
|
979
965
|
notifyDisconnect(error) {
|
|
980
966
|
this.sendMessage({
|
|
981
967
|
idx: -1,
|
|
982
|
-
type:
|
|
968
|
+
type: EventType.DISCONNECT,
|
|
983
969
|
data: error ? {
|
|
984
970
|
error
|
|
985
971
|
} : null
|
|
@@ -988,7 +974,7 @@ class BaseWalletTransport {
|
|
|
988
974
|
notifyAccountsChanged(accounts, origin) {
|
|
989
975
|
this.sendMessage({
|
|
990
976
|
idx: -1,
|
|
991
|
-
type:
|
|
977
|
+
type: EventType.ACCOUNTS_CHANGED,
|
|
992
978
|
data: accounts,
|
|
993
979
|
origin: origin
|
|
994
980
|
});
|
|
@@ -996,31 +982,31 @@ class BaseWalletTransport {
|
|
|
996
982
|
notifyChainChanged(chainIdHex) {
|
|
997
983
|
this.sendMessage({
|
|
998
984
|
idx: -1,
|
|
999
|
-
type:
|
|
985
|
+
type: EventType.CHAIN_CHANGED,
|
|
1000
986
|
data: chainIdHex
|
|
1001
987
|
});
|
|
1002
988
|
}
|
|
1003
989
|
notifyNetworks(networks) {
|
|
1004
990
|
this.sendMessage({
|
|
1005
991
|
idx: -1,
|
|
1006
|
-
type:
|
|
992
|
+
type: EventType.NETWORKS,
|
|
1007
993
|
data: networks
|
|
1008
994
|
});
|
|
1009
995
|
}
|
|
1010
996
|
notifyWalletContext(walletContext) {
|
|
1011
997
|
this.sendMessage({
|
|
1012
998
|
idx: -1,
|
|
1013
|
-
type:
|
|
999
|
+
type: EventType.WALLET_CONTEXT,
|
|
1014
1000
|
data: walletContext
|
|
1015
1001
|
});
|
|
1016
1002
|
}
|
|
1017
1003
|
isValidInitAck(message) {
|
|
1018
|
-
if (this._init ===
|
|
1004
|
+
if (this._init === InitState.OK) {
|
|
1019
1005
|
// we're already in init state, we shouldn't handle this message
|
|
1020
1006
|
utils.logger.warn("isValidInitAck, already in init'd state, so inquiry is invalid.");
|
|
1021
1007
|
return false;
|
|
1022
1008
|
}
|
|
1023
|
-
if (message.type !==
|
|
1009
|
+
if (message.type !== EventType.INIT) {
|
|
1024
1010
|
utils.logger.warn('isValidInitAck, invalid message type, expecting init');
|
|
1025
1011
|
return false;
|
|
1026
1012
|
}
|
|
@@ -1044,11 +1030,11 @@ class BaseWalletTransport {
|
|
|
1044
1030
|
return new Promise((resolve, reject) => {
|
|
1045
1031
|
// avoid re-init`ing, or if there is a transport which doesn't require
|
|
1046
1032
|
// it, then it may set this._init to OK in its constructor.
|
|
1047
|
-
if (this._init ===
|
|
1033
|
+
if (this._init === InitState.OK) {
|
|
1048
1034
|
resolve();
|
|
1049
1035
|
return;
|
|
1050
1036
|
}
|
|
1051
|
-
if (this._init !==
|
|
1037
|
+
if (this._init !== InitState.NIL || this._initCallback) {
|
|
1052
1038
|
reject('transport init is in progress');
|
|
1053
1039
|
return;
|
|
1054
1040
|
}
|
|
@@ -1069,7 +1055,7 @@ class BaseWalletTransport {
|
|
|
1069
1055
|
if (error) {
|
|
1070
1056
|
reject(error);
|
|
1071
1057
|
} else {
|
|
1072
|
-
this._init =
|
|
1058
|
+
this._init = InitState.OK;
|
|
1073
1059
|
resolve();
|
|
1074
1060
|
}
|
|
1075
1061
|
};
|
|
@@ -1079,12 +1065,12 @@ class BaseWalletTransport {
|
|
|
1079
1065
|
this._initNonce = `${performance.now()}`;
|
|
1080
1066
|
this.sendMessage({
|
|
1081
1067
|
idx: -1,
|
|
1082
|
-
type:
|
|
1068
|
+
type: EventType.INIT,
|
|
1083
1069
|
data: {
|
|
1084
1070
|
nonce: this._initNonce
|
|
1085
1071
|
}
|
|
1086
1072
|
});
|
|
1087
|
-
this._init =
|
|
1073
|
+
this._init = InitState.SENT_NONCE;
|
|
1088
1074
|
|
|
1089
1075
|
// NOTE: the promise will resolve in the _initCallback method
|
|
1090
1076
|
// which will be called from either handleMessage or the initTimeout
|
|
@@ -1094,8 +1080,6 @@ class BaseWalletTransport {
|
|
|
1094
1080
|
|
|
1095
1081
|
class ProxyMessageChannel {
|
|
1096
1082
|
constructor() {
|
|
1097
|
-
this.app = void 0;
|
|
1098
|
-
this.wallet = void 0;
|
|
1099
1083
|
const port1 = new ProxyMessageChannelPort();
|
|
1100
1084
|
const port2 = new ProxyMessageChannelPort();
|
|
1101
1085
|
port1.conn = port2;
|
|
@@ -1106,11 +1090,12 @@ class ProxyMessageChannel {
|
|
|
1106
1090
|
}
|
|
1107
1091
|
class ProxyMessageChannelPort {
|
|
1108
1092
|
constructor() {
|
|
1109
|
-
this.conn = void 0;
|
|
1110
1093
|
this.events = new eventemitter2.EventEmitter2();
|
|
1094
|
+
// handle messages which hit this port
|
|
1111
1095
|
this.handleMessage = message => {
|
|
1112
1096
|
throw new Error('ProxyMessageChannelPort is not registered');
|
|
1113
1097
|
};
|
|
1098
|
+
// send messages to the connected port
|
|
1114
1099
|
this.sendMessage = message => {
|
|
1115
1100
|
this.conn.handleMessage(message);
|
|
1116
1101
|
|
|
@@ -1140,7 +1125,6 @@ class ProxyMessageChannelPort {
|
|
|
1140
1125
|
class ProxyMessageProvider extends BaseProviderTransport {
|
|
1141
1126
|
constructor(port) {
|
|
1142
1127
|
super();
|
|
1143
|
-
this.port = void 0;
|
|
1144
1128
|
this.register = () => {
|
|
1145
1129
|
this.port.handleMessage = message => {
|
|
1146
1130
|
this.handleMessage(message);
|
|
@@ -1167,13 +1151,13 @@ class ProxyMessageProvider extends BaseProviderTransport {
|
|
|
1167
1151
|
this.port.handleMessage = undefined;
|
|
1168
1152
|
};
|
|
1169
1153
|
this.openWallet = (path, intent, networkId) => {
|
|
1170
|
-
if (this.state ===
|
|
1171
|
-
this.state =
|
|
1154
|
+
if (this.state === OpenState.CLOSED) {
|
|
1155
|
+
this.state = OpenState.OPENING;
|
|
1172
1156
|
const sessionId = `${performance.now()}`;
|
|
1173
1157
|
this._sessionId = sessionId;
|
|
1174
1158
|
this.sendMessage({
|
|
1175
1159
|
idx: -1,
|
|
1176
|
-
type:
|
|
1160
|
+
type: EventType.OPEN,
|
|
1177
1161
|
data: {
|
|
1178
1162
|
path,
|
|
1179
1163
|
intent,
|
|
@@ -1183,7 +1167,7 @@ class ProxyMessageProvider extends BaseProviderTransport {
|
|
|
1183
1167
|
});
|
|
1184
1168
|
}
|
|
1185
1169
|
};
|
|
1186
|
-
this.state =
|
|
1170
|
+
this.state = OpenState.CLOSED;
|
|
1187
1171
|
this.port = port;
|
|
1188
1172
|
if (!port) {
|
|
1189
1173
|
throw new Error('port argument cannot be empty');
|
|
@@ -1191,12 +1175,12 @@ class ProxyMessageProvider extends BaseProviderTransport {
|
|
|
1191
1175
|
|
|
1192
1176
|
// disable init handshake for proxy-transport, we set it to OK, to
|
|
1193
1177
|
// consider it in completed state.
|
|
1194
|
-
this._init =
|
|
1178
|
+
this._init = InitState.OK;
|
|
1195
1179
|
}
|
|
1196
1180
|
closeWallet() {
|
|
1197
1181
|
this.sendMessage({
|
|
1198
1182
|
idx: -1,
|
|
1199
|
-
type:
|
|
1183
|
+
type: EventType.CLOSE,
|
|
1200
1184
|
data: null
|
|
1201
1185
|
});
|
|
1202
1186
|
this.close();
|
|
@@ -1212,9 +1196,8 @@ class ProxyMessageProvider extends BaseProviderTransport {
|
|
|
1212
1196
|
class ProxyMessageHandler extends BaseWalletTransport {
|
|
1213
1197
|
constructor(walletRequestHandler, port) {
|
|
1214
1198
|
super(walletRequestHandler);
|
|
1215
|
-
this.port = void 0;
|
|
1216
1199
|
this.port = port;
|
|
1217
|
-
this._init =
|
|
1200
|
+
this._init = InitState.OK;
|
|
1218
1201
|
}
|
|
1219
1202
|
register() {
|
|
1220
1203
|
this.port.handleMessage = message => {
|
|
@@ -1248,8 +1231,6 @@ class ProxyMessageHandler extends BaseWalletTransport {
|
|
|
1248
1231
|
class MuxMessageProvider {
|
|
1249
1232
|
constructor(...messageProviders) {
|
|
1250
1233
|
var _this = this;
|
|
1251
|
-
this.messageProviders = void 0;
|
|
1252
|
-
this.provider = void 0;
|
|
1253
1234
|
this.register = () => {
|
|
1254
1235
|
if (this.messageProviders.length === 1) {
|
|
1255
1236
|
this.provider = this.messageProviders[0];
|
|
@@ -1388,8 +1369,6 @@ let registeredWindowMessageProvider;
|
|
|
1388
1369
|
class WindowMessageProvider extends BaseProviderTransport {
|
|
1389
1370
|
constructor(walletAppURL) {
|
|
1390
1371
|
super();
|
|
1391
|
-
this.walletURL = void 0;
|
|
1392
|
-
this.walletWindow = void 0;
|
|
1393
1372
|
this.register = () => {
|
|
1394
1373
|
if (registeredWindowMessageProvider) {
|
|
1395
1374
|
// overriding the registered message provider
|
|
@@ -1450,7 +1429,7 @@ class WindowMessageProvider extends BaseProviderTransport {
|
|
|
1450
1429
|
}
|
|
1451
1430
|
|
|
1452
1431
|
// Set session, intent and network id on walletURL
|
|
1453
|
-
this._init =
|
|
1432
|
+
this._init = InitState.NIL;
|
|
1454
1433
|
this._sessionId = `${performance.now()}`;
|
|
1455
1434
|
windowSessionParams.set('sid', this._sessionId);
|
|
1456
1435
|
if (intent) {
|
|
@@ -1514,6 +1493,7 @@ class WindowMessageProvider extends BaseProviderTransport {
|
|
|
1514
1493
|
// return
|
|
1515
1494
|
// }
|
|
1516
1495
|
};
|
|
1496
|
+
// onmessage, receives ProviderMessageResponse from the wallet post-message transport
|
|
1517
1497
|
this.onWindowEvent = event => {
|
|
1518
1498
|
// Security check, ensure message is coming from wallet origin url
|
|
1519
1499
|
if (event.origin !== this.walletURL.origin) {
|
|
@@ -1541,9 +1521,6 @@ class WindowMessageProvider extends BaseProviderTransport {
|
|
|
1541
1521
|
this.close();
|
|
1542
1522
|
(_this$walletWindow = this.walletWindow) == null ? void 0 : _this$walletWindow.close();
|
|
1543
1523
|
}
|
|
1544
|
-
|
|
1545
|
-
// onmessage, receives ProviderMessageResponse from the wallet post-message transport
|
|
1546
|
-
|
|
1547
1524
|
sendMessage(message) {
|
|
1548
1525
|
if (!this.walletWindow) {
|
|
1549
1526
|
utils.logger.warn('WindowMessageProvider: sendMessage failed as walletWindow is unavailable');
|
|
@@ -1559,8 +1536,9 @@ class WindowMessageHandler extends BaseWalletTransport {
|
|
|
1559
1536
|
var _this;
|
|
1560
1537
|
super(walletRequestHandler);
|
|
1561
1538
|
_this = this;
|
|
1562
|
-
this.parentWindow = void 0;
|
|
1563
1539
|
this._isPopup = false;
|
|
1540
|
+
// onmessage is called when (the wallet) receives request messages from the dapp
|
|
1541
|
+
// over the window post-messaging transport
|
|
1564
1542
|
this.onWindowEvent = async function (event) {
|
|
1565
1543
|
if (!event.origin || event.origin === '') {
|
|
1566
1544
|
// skip same-origin or when event.origin is empty/undefined
|
|
@@ -1582,10 +1560,10 @@ class WindowMessageHandler extends BaseWalletTransport {
|
|
|
1582
1560
|
utils.logger.debug('RECEIVED MESSAGE', request);
|
|
1583
1561
|
|
|
1584
1562
|
// Record event origin for valid init ack
|
|
1585
|
-
if (_this._init !==
|
|
1563
|
+
if (_this._init !== InitState.OK && _this.isValidInitAck(request)) {
|
|
1586
1564
|
_this.appOrigin = event.origin;
|
|
1587
1565
|
}
|
|
1588
|
-
if (_this._init ===
|
|
1566
|
+
if (_this._init === InitState.OK && (!_this.appOrigin || _this.appOrigin.length < 8)) {
|
|
1589
1567
|
// impossible state
|
|
1590
1568
|
utils.logger.error('impossible state, init.OK and appOrigin required');
|
|
1591
1569
|
return;
|
|
@@ -1602,7 +1580,7 @@ class WindowMessageHandler extends BaseWalletTransport {
|
|
|
1602
1580
|
intent: utils.base64DecodeObject(params.get('intent'))
|
|
1603
1581
|
};
|
|
1604
1582
|
};
|
|
1605
|
-
this._init =
|
|
1583
|
+
this._init = InitState.NIL;
|
|
1606
1584
|
}
|
|
1607
1585
|
async register(windowHref) {
|
|
1608
1586
|
const isPopup = parent.window.opener !== null;
|
|
@@ -1662,10 +1640,6 @@ class WindowMessageHandler extends BaseWalletTransport {
|
|
|
1662
1640
|
window.removeEventListener('message', this.onWindowEvent);
|
|
1663
1641
|
this._registered = false;
|
|
1664
1642
|
}
|
|
1665
|
-
|
|
1666
|
-
// onmessage is called when (the wallet) receives request messages from the dapp
|
|
1667
|
-
// over the window post-messaging transport
|
|
1668
|
-
|
|
1669
1643
|
// postMessage sends message to the dapp window
|
|
1670
1644
|
sendMessage(message) {
|
|
1671
1645
|
// prepare payload
|
|
@@ -1673,7 +1647,7 @@ class WindowMessageHandler extends BaseWalletTransport {
|
|
|
1673
1647
|
|
|
1674
1648
|
// post-message to app.
|
|
1675
1649
|
// only for init requests, we send to '*' origin
|
|
1676
|
-
if (message.type ===
|
|
1650
|
+
if (message.type === EventType.INIT) {
|
|
1677
1651
|
this.postMessage(payload, true);
|
|
1678
1652
|
} else {
|
|
1679
1653
|
this.postMessage(payload);
|
|
@@ -1683,7 +1657,7 @@ class WindowMessageHandler extends BaseWalletTransport {
|
|
|
1683
1657
|
return this._isPopup;
|
|
1684
1658
|
}
|
|
1685
1659
|
postMessage(message, init = false) {
|
|
1686
|
-
if (init !== true && this._init !==
|
|
1660
|
+
if (init !== true && this._init !== InitState.OK) {
|
|
1687
1661
|
utils.logger.error('impossible state, should not be calling postMessage until inited');
|
|
1688
1662
|
return;
|
|
1689
1663
|
}
|
|
@@ -1717,21 +1691,13 @@ function fromExtended(transaction) {
|
|
|
1717
1691
|
|
|
1718
1692
|
const SIGNER_READY_TIMEOUT = 10000;
|
|
1719
1693
|
class WalletRequestHandler {
|
|
1720
|
-
// signer interface of the wallet. A null value means there is no signer (ie. user not signed in). An undefined
|
|
1721
|
-
// value means the signer state is unknown, usually meaning the wallet app is booting up and initializing. Of course
|
|
1722
|
-
// a Signer value is the actually interface to a signed-in account
|
|
1723
|
-
|
|
1724
1694
|
constructor(_account, prompter, auxDataProvider, networks, _defaultNetworkId) {
|
|
1725
1695
|
var _this = this;
|
|
1726
|
-
|
|
1696
|
+
// signer interface of the wallet. A null value means there is no signer (ie. user not signed in). An undefined
|
|
1697
|
+
// value means the signer state is unknown, usually meaning the wallet app is booting up and initializing. Of course
|
|
1698
|
+
// a Signer value is the actually interface to a signed-in account
|
|
1727
1699
|
this.signerReadyCallbacks = [];
|
|
1728
|
-
this.prompter = void 0;
|
|
1729
|
-
this.auxDataProvider = void 0;
|
|
1730
|
-
this.networks = void 0;
|
|
1731
|
-
this._openIntent = void 0;
|
|
1732
|
-
this._connectOptions = void 0;
|
|
1733
1700
|
this.events = new eventemitter2.EventEmitter2();
|
|
1734
|
-
this.defaultNetworkId = void 0;
|
|
1735
1701
|
this.promptConnect = async function (options) {
|
|
1736
1702
|
if (!options && !_this._connectOptions) {
|
|
1737
1703
|
// this is an unexpected state and should not happen
|
|
@@ -1752,6 +1718,7 @@ class WalletRequestHandler {
|
|
|
1752
1718
|
}
|
|
1753
1719
|
return promptConnectDetails;
|
|
1754
1720
|
};
|
|
1721
|
+
// sendAsync implements the JsonRpcHandler interface for sending JsonRpcRequests to the wallet
|
|
1755
1722
|
this.sendAsync = async function (request, callback, chainId) {
|
|
1756
1723
|
const response = {
|
|
1757
1724
|
jsonrpc: '2.0',
|
|
@@ -2043,7 +2010,14 @@ class WalletRequestHandler {
|
|
|
2043
2010
|
case 'sequence_getWalletConfig':
|
|
2044
2011
|
{
|
|
2045
2012
|
const [_chainId2] = request.params;
|
|
2046
|
-
|
|
2013
|
+
if (_chainId2) {
|
|
2014
|
+
response.result = [(await account.status(_chainId2)).onChain.config];
|
|
2015
|
+
} else {
|
|
2016
|
+
response.result = await Promise.all(account.networks.map(async function (network) {
|
|
2017
|
+
const status = await account.status(network.chainId);
|
|
2018
|
+
return status.onChain.config;
|
|
2019
|
+
}));
|
|
2020
|
+
}
|
|
2047
2021
|
break;
|
|
2048
2022
|
}
|
|
2049
2023
|
|
|
@@ -2052,7 +2026,14 @@ class WalletRequestHandler {
|
|
|
2052
2026
|
{
|
|
2053
2027
|
const [_chainId3] = request.params;
|
|
2054
2028
|
// TODO: Add getWalletState to the Signer interface
|
|
2055
|
-
|
|
2029
|
+
if (_chainId3) {
|
|
2030
|
+
response.result = [getLegacyWalletState(_chainId3, await account.status(_chainId3))];
|
|
2031
|
+
} else {
|
|
2032
|
+
response.result = await Promise.all(account.networks.map(async function (network) {
|
|
2033
|
+
const status = await account.status(network.chainId);
|
|
2034
|
+
return getLegacyWalletState(network.chainId, status);
|
|
2035
|
+
}));
|
|
2036
|
+
}
|
|
2056
2037
|
break;
|
|
2057
2038
|
}
|
|
2058
2039
|
|
|
@@ -2306,9 +2287,6 @@ class WalletRequestHandler {
|
|
|
2306
2287
|
}, message.chainId);
|
|
2307
2288
|
});
|
|
2308
2289
|
}
|
|
2309
|
-
|
|
2310
|
-
// sendAsync implements the JsonRpcHandler interface for sending JsonRpcRequests to the wallet
|
|
2311
|
-
|
|
2312
2290
|
on(event, fn) {
|
|
2313
2291
|
this.events.on(event, fn);
|
|
2314
2292
|
}
|
|
@@ -2434,6 +2412,19 @@ class WalletRequestHandler {
|
|
|
2434
2412
|
return false;
|
|
2435
2413
|
}
|
|
2436
2414
|
}
|
|
2415
|
+
function getLegacyWalletState(chainId, status) {
|
|
2416
|
+
return {
|
|
2417
|
+
context: status.original.context,
|
|
2418
|
+
config: status.onChain.config,
|
|
2419
|
+
address: core.commons.context.addressOf(status.original.context, status.original.imageHash),
|
|
2420
|
+
chainId,
|
|
2421
|
+
deployed: status.onChain.deployed,
|
|
2422
|
+
imageHash: status.imageHash,
|
|
2423
|
+
lastImageHash: status.onChain.imageHash,
|
|
2424
|
+
published: true,
|
|
2425
|
+
status
|
|
2426
|
+
};
|
|
2427
|
+
}
|
|
2437
2428
|
const permittedJsonRpcMethods = ['net_version', 'eth_chainId', 'eth_getBalance', 'eth_getTransactionCount', 'eth_blockNumber', 'eth_getBlockByNumber', 'eth_getBlockByHash', 'eth_getTransactionByHash', 'eth_getCode', 'eth_estimateGas', 'eth_gasPrice', 'sequence_getWalletContext', 'sequence_getNetworks', 'sequence_setDefaultNetwork'];
|
|
2438
2429
|
|
|
2439
2430
|
const CHANNEL_ID = 'sequence-extension-message-handler';
|
|
@@ -2441,8 +2432,7 @@ class ExtensionMessageHandler extends BaseWalletTransport {
|
|
|
2441
2432
|
constructor(walletRequestHandler, runtime) {
|
|
2442
2433
|
super(walletRequestHandler);
|
|
2443
2434
|
this.runtime = runtime;
|
|
2444
|
-
this.
|
|
2445
|
-
this._init = exports.InitState.OK;
|
|
2435
|
+
this._init = InitState.OK;
|
|
2446
2436
|
}
|
|
2447
2437
|
register() {
|
|
2448
2438
|
this._registered = true;
|
|
@@ -2464,7 +2454,7 @@ class ExtensionMessageProvider extends BaseProviderTransport {
|
|
|
2464
2454
|
};
|
|
2465
2455
|
runtime.onConnect.addListener(port => {
|
|
2466
2456
|
if (port.name === CHANNEL_ID) {
|
|
2467
|
-
this._init =
|
|
2457
|
+
this._init = InitState.OK;
|
|
2468
2458
|
port.onMessage.addListener(message => {
|
|
2469
2459
|
this.handleMessage(message);
|
|
2470
2460
|
});
|
|
@@ -2491,7 +2481,6 @@ class BaseInjectedTransport extends eventemitter2.EventEmitter2 {
|
|
|
2491
2481
|
var _this;
|
|
2492
2482
|
super();
|
|
2493
2483
|
_this = this;
|
|
2494
|
-
this.stream = stream;
|
|
2495
2484
|
this.responseCallbacks = new Map();
|
|
2496
2485
|
this._messageIdx = 0;
|
|
2497
2486
|
this.nextMessageIdx = () => ++this._messageIdx;
|
|
@@ -2506,9 +2495,9 @@ class BaseInjectedTransport extends eventemitter2.EventEmitter2 {
|
|
|
2506
2495
|
this.responseCallbacks.delete(requestIdx);
|
|
2507
2496
|
}
|
|
2508
2497
|
switch (message.type) {
|
|
2509
|
-
case
|
|
2498
|
+
case EventType.MESSAGE:
|
|
2510
2499
|
if (responseCallback) {
|
|
2511
|
-
this.emit(
|
|
2500
|
+
this.emit(EventType.MESSAGE, message);
|
|
2512
2501
|
responseCallback(message.data.error, message);
|
|
2513
2502
|
} else {
|
|
2514
2503
|
// NOTE: this would occur if 'idx' isn't set, which should never happen
|
|
@@ -2517,9 +2506,9 @@ class BaseInjectedTransport extends eventemitter2.EventEmitter2 {
|
|
|
2517
2506
|
throw new Error('impossible state');
|
|
2518
2507
|
}
|
|
2519
2508
|
break;
|
|
2520
|
-
case
|
|
2521
|
-
case
|
|
2522
|
-
case
|
|
2509
|
+
case EventType.DISCONNECT:
|
|
2510
|
+
case EventType.ACCOUNTS_CHANGED:
|
|
2511
|
+
case EventType.CHAIN_CHANGED:
|
|
2523
2512
|
this.emit(message.type, message.data);
|
|
2524
2513
|
break;
|
|
2525
2514
|
default:
|
|
@@ -2552,6 +2541,7 @@ class BaseInjectedTransport extends eventemitter2.EventEmitter2 {
|
|
|
2552
2541
|
_this.sendMessage(message);
|
|
2553
2542
|
});
|
|
2554
2543
|
};
|
|
2544
|
+
this.stream = stream;
|
|
2555
2545
|
this.stream.on('data', this.handleMessage);
|
|
2556
2546
|
}
|
|
2557
2547
|
sendMessage(message) {
|
|
@@ -2596,7 +2586,6 @@ let registeredUnrealMessageProvider;
|
|
|
2596
2586
|
class UnrealMessageProvider extends BaseProviderTransport {
|
|
2597
2587
|
constructor(walletAppURL) {
|
|
2598
2588
|
super();
|
|
2599
|
-
this.walletURL = void 0;
|
|
2600
2589
|
this.register = () => {
|
|
2601
2590
|
var _window$ue;
|
|
2602
2591
|
overrideLogs('dapp');
|
|
@@ -2645,7 +2634,7 @@ class UnrealMessageProvider extends BaseProviderTransport {
|
|
|
2645
2634
|
}
|
|
2646
2635
|
|
|
2647
2636
|
// Set session, intent and network id on walletURL
|
|
2648
|
-
this._init =
|
|
2637
|
+
this._init = InitState.NIL;
|
|
2649
2638
|
this._sessionId = `${performance.now()}`;
|
|
2650
2639
|
windowSessionParams.set('sid', this._sessionId);
|
|
2651
2640
|
if (intent) {
|
|
@@ -2660,6 +2649,7 @@ class UnrealMessageProvider extends BaseProviderTransport {
|
|
|
2660
2649
|
console.log('opening wallet to', walletURL.href);
|
|
2661
2650
|
window.open(walletURL.href);
|
|
2662
2651
|
};
|
|
2652
|
+
// onmessage, receives ProviderMessageResponse from the wallet unreal transport
|
|
2663
2653
|
this.onUnrealCallback = message => {
|
|
2664
2654
|
if (!message) {
|
|
2665
2655
|
throw new Error('ProviderMessage object is empty');
|
|
@@ -2673,9 +2663,6 @@ class UnrealMessageProvider extends BaseProviderTransport {
|
|
|
2673
2663
|
closeWallet() {
|
|
2674
2664
|
this.close();
|
|
2675
2665
|
}
|
|
2676
|
-
|
|
2677
|
-
// onmessage, receives ProviderMessageResponse from the wallet unreal transport
|
|
2678
|
-
|
|
2679
2666
|
// all lowercase is an annoying limitation of Unreal CEF BindUObject
|
|
2680
2667
|
sendMessage(message) {
|
|
2681
2668
|
var _window$ue3, _window$ue3$sequencew;
|
|
@@ -2693,6 +2680,8 @@ class UnrealMessageProvider extends BaseProviderTransport {
|
|
|
2693
2680
|
class UnrealMessageHandler extends BaseWalletTransport {
|
|
2694
2681
|
constructor(walletRequestHandler) {
|
|
2695
2682
|
super(walletRequestHandler);
|
|
2683
|
+
// onmessage is called when (the wallet) receives request messages from the dapp
|
|
2684
|
+
// over the unreal json-messaging transport
|
|
2696
2685
|
this.onMessageFromUnreal = request => {
|
|
2697
2686
|
// Wallet always expects json-rpc request messages from a dapp
|
|
2698
2687
|
|
|
@@ -2709,7 +2698,7 @@ class UnrealMessageHandler extends BaseWalletTransport {
|
|
|
2709
2698
|
intent: utils.base64DecodeObject(params.get('intent'))
|
|
2710
2699
|
};
|
|
2711
2700
|
};
|
|
2712
|
-
this._init =
|
|
2701
|
+
this._init = InitState.NIL;
|
|
2713
2702
|
}
|
|
2714
2703
|
async register(windowHref) {
|
|
2715
2704
|
var _window$ue;
|
|
@@ -2768,14 +2757,10 @@ class UnrealMessageHandler extends BaseWalletTransport {
|
|
|
2768
2757
|
}
|
|
2769
2758
|
this._registered = false;
|
|
2770
2759
|
}
|
|
2771
|
-
|
|
2772
|
-
// onmessage is called when (the wallet) receives request messages from the dapp
|
|
2773
|
-
// over the unreal json-messaging transport
|
|
2774
|
-
|
|
2775
2760
|
// sendMessage sends message to the dapp window
|
|
2776
2761
|
sendMessage(message) {
|
|
2777
2762
|
var _window$ue3, _window$ue3$sequencew;
|
|
2778
|
-
if (message.type !==
|
|
2763
|
+
if (message.type !== EventType.INIT && this._init !== InitState.OK) {
|
|
2779
2764
|
utils.logger.error('impossible state, should not be calling postMessage until inited');
|
|
2780
2765
|
return;
|
|
2781
2766
|
}
|
|
@@ -2791,13 +2776,13 @@ class Web3Provider extends ethers.providers.Web3Provider {
|
|
|
2791
2776
|
static isSequenceProvider(cand) {
|
|
2792
2777
|
return isSequenceProvider(cand);
|
|
2793
2778
|
}
|
|
2779
|
+
|
|
2780
|
+
// defaultChainId is the default chainId to use with requests, but may be
|
|
2781
|
+
// overridden by passing chainId argument to a specific request
|
|
2794
2782
|
constructor(provider, defaultChainId) {
|
|
2795
2783
|
const sender = new network.JsonRpcSender(provider, network.maybeChainId(defaultChainId));
|
|
2796
2784
|
provider = sender;
|
|
2797
2785
|
super(provider, 'any');
|
|
2798
|
-
this._sender = void 0;
|
|
2799
|
-
this._isSequenceProvider = void 0;
|
|
2800
|
-
this._defaultChainId = void 0;
|
|
2801
2786
|
this._sender = sender;
|
|
2802
2787
|
this._isSequenceProvider = true;
|
|
2803
2788
|
this._defaultChainId = network.maybeChainId(defaultChainId);
|
|
@@ -2847,12 +2832,6 @@ class LocalWeb3Provider extends Web3Provider {
|
|
|
2847
2832
|
class Web3Signer extends wallet.Signer {
|
|
2848
2833
|
constructor(provider, defaultChainId) {
|
|
2849
2834
|
super();
|
|
2850
|
-
this.provider = void 0;
|
|
2851
|
-
this.defaultChainId = void 0;
|
|
2852
|
-
this._address = void 0;
|
|
2853
|
-
this._index = void 0;
|
|
2854
|
-
this._context = void 0;
|
|
2855
|
-
this._networks = void 0;
|
|
2856
2835
|
this._providers = {};
|
|
2857
2836
|
this.provider = provider;
|
|
2858
2837
|
this.defaultChainId = defaultChainId;
|
|
@@ -2863,7 +2842,6 @@ class Web3Signer extends wallet.Signer {
|
|
|
2863
2842
|
//
|
|
2864
2843
|
// ethers AbstractSigner methods
|
|
2865
2844
|
//
|
|
2866
|
-
|
|
2867
2845
|
async getAddress() {
|
|
2868
2846
|
if (this._address) return this._address;
|
|
2869
2847
|
const accounts = await this.provider.send('eth_accounts', []);
|
|
@@ -2928,12 +2906,12 @@ class Web3Signer extends wallet.Signer {
|
|
|
2928
2906
|
async getWalletConfig(chainId) {
|
|
2929
2907
|
const reqChainId = network.maybeChainId(chainId) || this.defaultChainId;
|
|
2930
2908
|
if (!reqChainId) throw new Error('chainId is required');
|
|
2931
|
-
return await this.provider.send('sequence_getWalletConfig', [reqChainId], reqChainId);
|
|
2909
|
+
return (await this.provider.send('sequence_getWalletConfig', [reqChainId], reqChainId))[0];
|
|
2932
2910
|
}
|
|
2933
2911
|
async getWalletState(chainId) {
|
|
2934
2912
|
const reqChainId = network.maybeChainId(chainId) || this.defaultChainId;
|
|
2935
2913
|
if (!reqChainId) throw new Error('chainId is required');
|
|
2936
|
-
return await this.provider.send('sequence_getWalletState', [reqChainId], reqChainId);
|
|
2914
|
+
return (await this.provider.send('sequence_getWalletState', [reqChainId], reqChainId))[0].status;
|
|
2937
2915
|
}
|
|
2938
2916
|
async getNetworks() {
|
|
2939
2917
|
if (!this._networks) this._networks = await this.provider.getNetworks();
|
|
@@ -3203,7 +3181,6 @@ class UncheckedJsonRpcSigner extends Web3Signer {
|
|
|
3203
3181
|
|
|
3204
3182
|
class WalletUtils {
|
|
3205
3183
|
constructor(walletProvider) {
|
|
3206
|
-
this.wallet = void 0;
|
|
3207
3184
|
this.wallet = walletProvider;
|
|
3208
3185
|
}
|
|
3209
3186
|
|
|
@@ -3318,13 +3295,6 @@ const SESSION_LOCALSTORE_KEY = '@sequence.session';
|
|
|
3318
3295
|
class Wallet {
|
|
3319
3296
|
constructor(_network, config) {
|
|
3320
3297
|
var _this = this;
|
|
3321
|
-
this.utils = void 0;
|
|
3322
|
-
this.config = void 0;
|
|
3323
|
-
this.session = void 0;
|
|
3324
|
-
this.connectedSites = void 0;
|
|
3325
|
-
this.transport = void 0;
|
|
3326
|
-
this.networks = void 0;
|
|
3327
|
-
this.providers = void 0;
|
|
3328
3298
|
this.init = () => {
|
|
3329
3299
|
var _this$config$transpor, _this$config$transpor2, _this$config$transpor3, _this$config$transpor4, _this$config$transpor5, _this$config$transpor6, _this$config$transpor7, _this$config$transpor8, _findSupportedNetwork;
|
|
3330
3300
|
if (this.transport.provider) {
|
|
@@ -3498,8 +3468,13 @@ class Wallet {
|
|
|
3498
3468
|
};
|
|
3499
3469
|
}
|
|
3500
3470
|
if (options) {
|
|
3501
|
-
if (options.authorize
|
|
3502
|
-
|
|
3471
|
+
if (options.authorize) {
|
|
3472
|
+
if (!options.app) {
|
|
3473
|
+
throw new Error(`connecting with 'authorize' option also requires 'app' to be set`);
|
|
3474
|
+
}
|
|
3475
|
+
if (options.authorizeVersion === undefined) {
|
|
3476
|
+
options.authorizeVersion = 2;
|
|
3477
|
+
}
|
|
3503
3478
|
}
|
|
3504
3479
|
}
|
|
3505
3480
|
await _this.openWallet(undefined, {
|
|
@@ -3558,6 +3533,7 @@ class Wallet {
|
|
|
3558
3533
|
}
|
|
3559
3534
|
return _this.networks;
|
|
3560
3535
|
};
|
|
3536
|
+
// getChainId returns the default chain id
|
|
3561
3537
|
this.getChainId = async function () {
|
|
3562
3538
|
if (!_this.networks || _this.networks.length < 1) {
|
|
3563
3539
|
throw new Error('networks have not been set by session. connect first.');
|
|
@@ -3860,12 +3836,15 @@ exports.BaseWalletTransport = BaseWalletTransport;
|
|
|
3860
3836
|
exports.CHANNEL_ID = CHANNEL_ID;
|
|
3861
3837
|
exports.DefaultProviderConfig = DefaultProviderConfig;
|
|
3862
3838
|
exports.ErrSignedInRequired = ErrSignedInRequired;
|
|
3839
|
+
exports.EventType = EventType;
|
|
3863
3840
|
exports.ExtensionMessageHandler = ExtensionMessageHandler;
|
|
3864
3841
|
exports.ExtensionMessageProvider = ExtensionMessageProvider;
|
|
3842
|
+
exports.InitState = InitState;
|
|
3865
3843
|
exports.LocalStorage = LocalStorage;
|
|
3866
3844
|
exports.LocalStore = LocalStore;
|
|
3867
3845
|
exports.LocalWeb3Provider = LocalWeb3Provider;
|
|
3868
3846
|
exports.MuxMessageProvider = MuxMessageProvider;
|
|
3847
|
+
exports.OpenState = OpenState;
|
|
3869
3848
|
exports.PROVIDER_OPEN_TIMEOUT = PROVIDER_OPEN_TIMEOUT;
|
|
3870
3849
|
exports.ProviderError = ProviderError;
|
|
3871
3850
|
exports.ProxyMessageChannel = ProxyMessageChannel;
|