@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.
@@ -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
- exports.EventType = void 0;
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
- })(exports.EventType || (exports.EventType = {}));
51
- exports.OpenState = void 0;
52
- (function (OpenState) {
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
- })(exports.OpenState || (exports.OpenState = {}));
57
- exports.InitState = void 0;
58
- (function (InitState) {
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
- })(exports.InitState || (exports.InitState = {}));
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 === exports.OpenState.CLOSED) {
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: exports.EventType.MESSAGE,
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 = exports.OpenState.CLOSED;
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 = exports.OpenState.CLOSED;
208
+ this.state = OpenState.CLOSED;
211
209
  this._registered = false;
212
- this._init = exports.InitState.NIL;
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 === exports.OpenState.OPENED;
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 === exports.EventType.INIT) {
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 = exports.InitState.OK;
250
+ this._init = InitState.OK;
253
251
  this.sendMessage({
254
252
  idx: -1,
255
- type: exports.EventType.INIT,
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 !== exports.InitState.OK) {
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 === exports.EventType.OPEN && !this.isOpened()) {
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 = exports.OpenState.OPENED;
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 === exports.EventType.MESSAGE) {
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 === exports.EventType.ACCOUNTS_CHANGED) {
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 === exports.EventType.CHAIN_CHANGED) {
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 === exports.EventType.NETWORKS) {
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 === exports.EventType.WALLET_CONTEXT) {
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 === exports.EventType.CLOSE) {
377
- if (this.state !== exports.OpenState.CLOSED) {
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 === exports.EventType.CONNECT) {
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 === exports.EventType.DISCONNECT) {
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 === exports.OpenState.CLOSED) return;
413
- this.state = exports.OpenState.CLOSED;
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 !== exports.InitState.OK) {
691
- if (request.type === exports.EventType.INIT) {
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 exports.EventType.OPEN:
696
+ case EventType.OPEN:
712
697
  {
713
- if (_this._init !== exports.InitState.OK) return;
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 exports.EventType.CLOSE:
707
+ case EventType.CLOSE:
723
708
  {
724
- if (_this._init !== exports.InitState.OK) return;
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 exports.EventType.MESSAGE:
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 = exports.InitState.NIL;
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: exports.EventType.OPEN,
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: exports.EventType.CLOSE,
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: exports.EventType.CONNECT,
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: exports.EventType.DISCONNECT,
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: exports.EventType.ACCOUNTS_CHANGED,
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: exports.EventType.CHAIN_CHANGED,
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: exports.EventType.NETWORKS,
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: exports.EventType.WALLET_CONTEXT,
999
+ type: EventType.WALLET_CONTEXT,
1014
1000
  data: walletContext
1015
1001
  });
1016
1002
  }
1017
1003
  isValidInitAck(message) {
1018
- if (this._init === exports.InitState.OK) {
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 !== exports.EventType.INIT) {
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 === exports.InitState.OK) {
1033
+ if (this._init === InitState.OK) {
1048
1034
  resolve();
1049
1035
  return;
1050
1036
  }
1051
- if (this._init !== exports.InitState.NIL || this._initCallback) {
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 = exports.InitState.OK;
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: exports.EventType.INIT,
1068
+ type: EventType.INIT,
1083
1069
  data: {
1084
1070
  nonce: this._initNonce
1085
1071
  }
1086
1072
  });
1087
- this._init = exports.InitState.SENT_NONCE;
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 === exports.OpenState.CLOSED) {
1171
- this.state = exports.OpenState.OPENING;
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: exports.EventType.OPEN,
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 = exports.OpenState.CLOSED;
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 = exports.InitState.OK;
1178
+ this._init = InitState.OK;
1195
1179
  }
1196
1180
  closeWallet() {
1197
1181
  this.sendMessage({
1198
1182
  idx: -1,
1199
- type: exports.EventType.CLOSE,
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 = exports.InitState.OK;
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 = exports.InitState.NIL;
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 !== exports.InitState.OK && _this.isValidInitAck(request)) {
1563
+ if (_this._init !== InitState.OK && _this.isValidInitAck(request)) {
1586
1564
  _this.appOrigin = event.origin;
1587
1565
  }
1588
- if (_this._init === exports.InitState.OK && (!_this.appOrigin || _this.appOrigin.length < 8)) {
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 = exports.InitState.NIL;
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 === exports.EventType.INIT) {
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 !== exports.InitState.OK) {
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
- this.account = void 0;
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
- response.result = await account.status(_chainId2).then(s => s.config);
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
- response.result = await account.status(_chainId3);
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.port = void 0;
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 = exports.InitState.OK;
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 exports.EventType.MESSAGE:
2498
+ case EventType.MESSAGE:
2510
2499
  if (responseCallback) {
2511
- this.emit(exports.EventType.MESSAGE, message);
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 exports.EventType.DISCONNECT:
2521
- case exports.EventType.ACCOUNTS_CHANGED:
2522
- case exports.EventType.CHAIN_CHANGED:
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 = exports.InitState.NIL;
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 = exports.InitState.NIL;
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 !== exports.EventType.INIT && this._init !== exports.InitState.OK) {
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 && (!options.app || options.app === '')) {
3502
- throw new Error(`connecting with 'authorize' option also requires 'app' to be set`);
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;