@0xsequence/provider 0.40.2 → 0.40.5

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.
@@ -589,19 +589,19 @@ class WalletRequestHandler {
589
589
  let sig = ''; // Message must be prefixed with "\x19Ethereum Signed Message:\n"
590
590
  // as defined by EIP-191
591
591
 
592
- message = prefixEIP191Message(message); // TODO:
592
+ const prefixedMessage = prefixEIP191Message(message); // TODO:
593
593
  // if (process.env.TEST_MODE === 'true' && this.prompter === null) {
594
594
 
595
595
  if (_this.prompter === null) {
596
596
  // prompter is null, so we'll sign from here
597
- sig = await signer.signMessage(ethers.utils.arrayify(message), chainId);
597
+ sig = await signer.signMessage(prefixedMessage, chainId);
598
598
  } else {
599
599
  const promptResultForDeployment = await _this.handleConfirmWalletDeployPrompt(_this.prompter, signer, chainId);
600
600
 
601
601
  if (promptResultForDeployment) {
602
602
  sig = await _this.prompter.promptSignMessage({
603
603
  chainId: chainId,
604
- message
604
+ message: prefixedMessage
605
605
  }, _this.connectOptions);
606
606
  }
607
607
  }
@@ -3141,6 +3141,257 @@ class BaseInjectedTransport extends EventEmitter2 {
3141
3141
 
3142
3142
  }
3143
3143
 
3144
+ /**
3145
+ * This will redirect console logs from Sequence.js & the wallet to the Unreal console, for debugging purposes.
3146
+ */
3147
+ function overrideLogs(side) {
3148
+ var _window$ue;
3149
+
3150
+ if ((_window$ue = window.ue) != null && _window$ue.sequencewallettransport && !window.logsOverriddenForUnreal) {
3151
+ var _window$ue2;
3152
+
3153
+ const t = (_window$ue2 = window.ue) == null ? void 0 : _window$ue2.sequencewallettransport;
3154
+
3155
+ console.log = (...args) => {
3156
+ t.logfromjs(`${side}: ${stringify(args)}`);
3157
+ };
3158
+
3159
+ console.warn = (...args) => {
3160
+ t.warnfromjs(`${side}: ${stringify(args)}`);
3161
+ };
3162
+
3163
+ console.error = (...args) => {
3164
+ t.errorfromjs(`${side}: ${stringify(args)}`);
3165
+ };
3166
+
3167
+ window.logsOverriddenForUnreal = true;
3168
+ }
3169
+ }
3170
+
3171
+ function stringify(things) {
3172
+ return things.map(a => typeof a === 'object' ? a instanceof Error ? a.message : JSON.stringify(a) : String(a)).join(' ');
3173
+ }
3174
+
3175
+ let registeredUnrealMessageProvider; // all lowercase is an annoying limitation of Unreal CEF BindUObject
3176
+
3177
+ /**
3178
+ * Initialized on dApp side
3179
+ */
3180
+ class UnrealMessageProvider extends BaseProviderTransport {
3181
+ constructor(walletAppURL) {
3182
+ super();
3183
+ this.walletURL = void 0;
3184
+
3185
+ this.register = () => {
3186
+ var _window$ue;
3187
+
3188
+ overrideLogs('dapp');
3189
+
3190
+ if (registeredUnrealMessageProvider) {
3191
+ // overriding the registered message provider
3192
+ registeredUnrealMessageProvider.unregister();
3193
+ registeredUnrealMessageProvider = this;
3194
+ } // listen for incoming messages from wallet
3195
+
3196
+
3197
+ if ((_window$ue = window.ue) != null && _window$ue.sequencewallettransport) {
3198
+ window.ue.sequencewallettransport.onmessagefromwallet = this.onUnrealCallback;
3199
+ }
3200
+
3201
+ registeredUnrealMessageProvider = this;
3202
+ this._registered = true;
3203
+ console.log('registering transport!');
3204
+ };
3205
+
3206
+ this.unregister = () => {
3207
+ var _window$ue2, _window$ue2$sequencew;
3208
+
3209
+ this._registered = false;
3210
+ this.closeWallet(); // disable message listener
3211
+
3212
+ if (registeredUnrealMessageProvider === this) {
3213
+ registeredUnrealMessageProvider = undefined;
3214
+ }
3215
+
3216
+ if (((_window$ue2 = window.ue) == null ? void 0 : (_window$ue2$sequencew = _window$ue2.sequencewallettransport) == null ? void 0 : _window$ue2$sequencew.onmessagefromwallet) === this.onUnrealCallback) {
3217
+ delete window.ue.sequencewallettransport.onmessagefromwallet;
3218
+ } // clear event listeners
3219
+
3220
+
3221
+ this.events.removeAllListeners();
3222
+ };
3223
+
3224
+ this.openWallet = (path, intent, networkId) => {
3225
+ if (this.isOpened()) {
3226
+ // TODO focus wallet
3227
+ console.log('wallet already open!');
3228
+ return;
3229
+ }
3230
+
3231
+ console.log('opening wallet!'); // Instantiate new walletURL for this call
3232
+
3233
+ const walletURL = new URL(this.walletURL.href);
3234
+ const windowSessionParams = new WindowSessionParams();
3235
+
3236
+ if (path) {
3237
+ walletURL.pathname = path.toLowerCase();
3238
+ } // Set session, intent and network id on walletURL
3239
+
3240
+
3241
+ this._init = InitState.NIL;
3242
+ this._sessionId = `${performance.now()}`;
3243
+ windowSessionParams.set('sid', this._sessionId);
3244
+
3245
+ if (intent) {
3246
+ // encode intent as base64 url-encoded param
3247
+ windowSessionParams.set('intent', base64EncodeObject(intent));
3248
+ }
3249
+
3250
+ if (networkId) {
3251
+ windowSessionParams.set('net', `${networkId}`);
3252
+ } // serialize params
3253
+
3254
+
3255
+ walletURL.search = windowSessionParams.toString();
3256
+ console.log('opening wallet to', walletURL.href);
3257
+ window.open(walletURL.href);
3258
+ };
3259
+
3260
+ this.onUnrealCallback = message => {
3261
+ if (!message) {
3262
+ throw new Error('ProviderMessage object is empty');
3263
+ } // handle message with base message provider
3264
+
3265
+
3266
+ this.handleMessage(message);
3267
+ };
3268
+
3269
+ this.walletURL = new URL(walletAppURL);
3270
+ }
3271
+
3272
+ closeWallet() {
3273
+ this.close();
3274
+ } // onmessage, receives ProviderMessageResponse from the wallet unreal transport
3275
+
3276
+
3277
+ // all lowercase is an annoying limitation of Unreal CEF BindUObject
3278
+ sendMessage(message) {
3279
+ var _window$ue3, _window$ue3$sequencew;
3280
+
3281
+ const postedMessage = typeof message !== 'string' ? JSON.stringify(message) : message;
3282
+ console.log('Sending message to wallet:', postedMessage);
3283
+ (_window$ue3 = window.ue) == null ? void 0 : (_window$ue3$sequencew = _window$ue3.sequencewallettransport) == null ? void 0 : _window$ue3$sequencew.sendmessagetowallet(postedMessage);
3284
+ }
3285
+
3286
+ }
3287
+
3288
+ /**
3289
+ * Initialized on Wallet side
3290
+ */
3291
+ class UnrealMessageHandler extends BaseWalletTransport {
3292
+ constructor(walletRequestHandler) {
3293
+ super(walletRequestHandler);
3294
+
3295
+ this.onMessageFromUnreal = request => {
3296
+ // Wallet always expects json-rpc request messages from a dapp
3297
+ logger.debug('RECEIVED MESSAGE', request); // Handle message via the base transport
3298
+
3299
+ this.handleMessage(request);
3300
+ };
3301
+
3302
+ this.getUnrealTransportSession = windowParams => {
3303
+ const params = new WindowSessionParams(windowParams);
3304
+ return {
3305
+ sessionId: params.get('sid'),
3306
+ networkId: params.get('net'),
3307
+ intent: base64DecodeObject(params.get('intent'))
3308
+ };
3309
+ };
3310
+
3311
+ this._init = InitState.NIL;
3312
+ }
3313
+
3314
+ async register(windowHref) {
3315
+ var _window$ue;
3316
+
3317
+ if (((_window$ue = window.ue) == null ? void 0 : _window$ue.sequencewallettransport) === undefined) {
3318
+ return;
3319
+ }
3320
+
3321
+ overrideLogs('wallet'); // record open details (sessionId + default network) from the window url
3322
+
3323
+ const {
3324
+ search: rawParams
3325
+ } = new URL(windowHref || window.location.href);
3326
+ let session = this.getUnrealTransportSession(rawParams); // provider should always include sid when opening a new window
3327
+
3328
+ const isNewWindowSession = !!session.sessionId; // attempt to restore previous session in the case of a redirect or window reload
3329
+
3330
+ if (!isNewWindowSession) {
3331
+ session = await this.getCachedTransportSession();
3332
+ }
3333
+
3334
+ if (!session) {
3335
+ logger.error('unreal session is undefined');
3336
+ return;
3337
+ } // listen for window-transport requests
3338
+
3339
+
3340
+ window.ue.sequencewallettransport.onmessagefromsequencejs = this.onMessageFromUnreal;
3341
+ this._registered = true; // send open event to the app which opened us
3342
+
3343
+ this.open(session).then(opened => {
3344
+ if (!opened) {
3345
+ var _session;
3346
+
3347
+ const err = `failed to open to network ${(_session = session) == null ? void 0 : _session.networkId}`;
3348
+ logger.error(err);
3349
+ this.notifyClose({
3350
+ message: err
3351
+ });
3352
+ window.close();
3353
+ }
3354
+ }).catch(e => {
3355
+ var _session2;
3356
+
3357
+ const err = `failed to open to network ${(_session2 = session) == null ? void 0 : _session2.networkId}, due to: ${e}`;
3358
+ logger.error(err);
3359
+ this.notifyClose({
3360
+ message: err
3361
+ });
3362
+ window.close();
3363
+ });
3364
+ }
3365
+
3366
+ unregister() {
3367
+ var _window$ue2, _window$ue2$sequencew;
3368
+
3369
+ if (((_window$ue2 = window.ue) == null ? void 0 : (_window$ue2$sequencew = _window$ue2.sequencewallettransport) == null ? void 0 : _window$ue2$sequencew.onmessagefromsequencejs) === this.onMessageFromUnreal) {
3370
+ delete window.ue.sequencewallettransport.onmessagefromsequencejs;
3371
+ }
3372
+
3373
+ this._registered = false;
3374
+ } // onmessage is called when (the wallet) receives request messages from the dapp
3375
+ // over the unreal json-messaging transport
3376
+
3377
+
3378
+ // sendMessage sends message to the dapp window
3379
+ sendMessage(message) {
3380
+ var _window$ue3, _window$ue3$sequencew;
3381
+
3382
+ if (message.type !== EventType.INIT && this._init !== InitState.OK) {
3383
+ logger.error('impossible state, should not be calling postMessage until inited');
3384
+ return;
3385
+ } // prepare payload
3386
+
3387
+
3388
+ const payload = JSON.stringify(message); // post-message to app.
3389
+
3390
+ (_window$ue3 = window.ue) == null ? void 0 : (_window$ue3$sequencew = _window$ue3.sequencewallettransport) == null ? void 0 : _window$ue3$sequencew.sendmessagetosequencejs(payload);
3391
+ }
3392
+
3393
+ }
3394
+
3144
3395
  class WalletUtils {
3145
3396
  constructor(walletProvider) {
3146
3397
  var _this = this;
@@ -3246,7 +3497,7 @@ class Wallet {
3246
3497
  this.providers = void 0;
3247
3498
 
3248
3499
  this.init = () => {
3249
- var _this$config$transpor, _this$config$transpor2, _this$config$transpor3, _this$config$transpor4, _this$config$transpor5, _this$config$transpor6;
3500
+ 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;
3250
3501
 
3251
3502
  if (this.transport.provider) {
3252
3503
  // init must have already been called
@@ -3278,6 +3529,11 @@ class Wallet {
3278
3529
  // this.transport.messageProvider.add(this.transport.extensionMessageProvider)
3279
3530
  }
3280
3531
 
3532
+ if ((_this$config$transpor7 = this.config.transports) != null && (_this$config$transpor8 = _this$config$transpor7.unrealTransport) != null && _this$config$transpor8.enabled) {
3533
+ this.transport.unrealMessageProvider = new UnrealMessageProvider(this.config.walletAppURL);
3534
+ this.transport.messageProvider.add(this.transport.unrealMessageProvider);
3535
+ }
3536
+
3281
3537
  this.transport.messageProvider.register(); // .....
3282
3538
 
3283
3539
  this.transport.allowProvider = allowProviderMiddleware(request => {
@@ -3817,4 +4073,4 @@ const getWallet = () => {
3817
4073
  return walletInstance;
3818
4074
  };
3819
4075
 
3820
- export { BaseInjectedTransport, BaseProviderTransport, BaseWalletTransport, CHANNEL_ID, DefaultProviderConfig, ErrSignedInRequired, EventType, ExtensionMessageHandler, ExtensionMessageProvider, InitState, LocalStorage, LocalStore, LocalWeb3Provider, MuxMessageProvider, OpenState, PROVIDER_OPEN_TIMEOUT, ProviderError, ProxyMessageChannel, ProxyMessageChannelPort, ProxyMessageHandler, ProxyMessageProvider, Wallet, WalletRequestHandler, Web3Provider, Web3Signer, WindowMessageHandler, WindowMessageProvider, WindowSessionParams, getWallet, initWallet, isBrowserExtension, isSequenceProvider, isValidMessageSignature, isValidSignature, isValidTypedDataSignature, isWalletUpToDate, messageToBytes, nextMessageIdx, prefixEIP191Message, recoverWalletConfig };
4076
+ export { BaseInjectedTransport, BaseProviderTransport, BaseWalletTransport, CHANNEL_ID, DefaultProviderConfig, ErrSignedInRequired, EventType, ExtensionMessageHandler, ExtensionMessageProvider, InitState, LocalStorage, LocalStore, LocalWeb3Provider, MuxMessageProvider, OpenState, PROVIDER_OPEN_TIMEOUT, ProviderError, ProxyMessageChannel, ProxyMessageChannelPort, ProxyMessageHandler, ProxyMessageProvider, UnrealMessageHandler, UnrealMessageProvider, Wallet, WalletRequestHandler, Web3Provider, Web3Signer, WindowMessageHandler, WindowMessageProvider, WindowSessionParams, getWallet, initWallet, isBrowserExtension, isSequenceProvider, isValidMessageSignature, isValidSignature, isValidTypedDataSignature, isWalletUpToDate, messageToBytes, nextMessageIdx, prefixEIP191Message, recoverWalletConfig };
@@ -5,3 +5,4 @@ export * from './mux-transport';
5
5
  export * from './window-transport';
6
6
  export * from './wallet-request-handler';
7
7
  export * from './extension-transport';
8
+ export * from './unreal-transport';
@@ -0,0 +1,2 @@
1
+ export * from './unreal-message-provider';
2
+ export * from './unreal-message-handler';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * This will redirect console logs from Sequence.js & the wallet to the Unreal console, for debugging purposes.
3
+ */
4
+ export declare function overrideLogs(side: 'dapp' | 'wallet'): void;
@@ -0,0 +1,14 @@
1
+ import { ProviderMessage } from '../../types';
2
+ import { WalletRequestHandler } from '../wallet-request-handler';
3
+ import { BaseWalletTransport } from '../base-wallet-transport';
4
+ /**
5
+ * Initialized on Wallet side
6
+ */
7
+ export declare class UnrealMessageHandler extends BaseWalletTransport {
8
+ constructor(walletRequestHandler: WalletRequestHandler);
9
+ register(windowHref?: string | URL): Promise<void>;
10
+ unregister(): void;
11
+ private onMessageFromUnreal;
12
+ sendMessage(message: ProviderMessage<any>): void;
13
+ private getUnrealTransportSession;
14
+ }
@@ -0,0 +1,15 @@
1
+ import { OpenWalletIntent, ProviderMessage } from '../../types';
2
+ import { BaseProviderTransport } from '../base-provider-transport';
3
+ /**
4
+ * Initialized on dApp side
5
+ */
6
+ export declare class UnrealMessageProvider extends BaseProviderTransport {
7
+ private walletURL;
8
+ constructor(walletAppURL: string);
9
+ register: () => void;
10
+ unregister: () => void;
11
+ openWallet: (path?: string | undefined, intent?: OpenWalletIntent | undefined, networkId?: string | number | undefined) => void;
12
+ closeWallet(): void;
13
+ private onUnrealCallback;
14
+ sendMessage(message: ProviderMessage<unknown>): void;
15
+ }
@@ -192,7 +192,7 @@ export declare type OpenWalletIntent = {
192
192
  method: string;
193
193
  };
194
194
  export interface MessageToSign {
195
- message?: string;
195
+ message?: Uint8Array;
196
196
  typedData?: TypedData;
197
197
  chainId?: number;
198
198
  }
@@ -95,6 +95,9 @@ export interface ProviderConfig {
95
95
  enabled: boolean;
96
96
  runtime: Runtime.Static;
97
97
  };
98
+ unrealTransport?: {
99
+ enabled: boolean;
100
+ };
98
101
  };
99
102
  walletContext?: WalletContext;
100
103
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xsequence/provider",
3
- "version": "0.40.2",
3
+ "version": "0.40.5",
4
4
  "description": "provider sub-package for Sequence",
5
5
  "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/provider",
6
6
  "source": "src/index.ts",
@@ -13,13 +13,13 @@
13
13
  "typecheck": "tsc --noEmit"
14
14
  },
15
15
  "dependencies": {
16
- "@0xsequence/abi": "^0.40.2",
17
- "@0xsequence/auth": "^0.40.2",
18
- "@0xsequence/config": "^0.40.2",
19
- "@0xsequence/network": "^0.40.2",
20
- "@0xsequence/transactions": "^0.40.2",
21
- "@0xsequence/utils": "^0.40.2",
22
- "@0xsequence/wallet": "^0.40.2",
16
+ "@0xsequence/abi": "^0.40.5",
17
+ "@0xsequence/auth": "^0.40.5",
18
+ "@0xsequence/config": "^0.40.5",
19
+ "@0xsequence/network": "^0.40.5",
20
+ "@0xsequence/transactions": "^0.40.5",
21
+ "@0xsequence/utils": "^0.40.5",
22
+ "@0xsequence/wallet": "^0.40.5",
23
23
  "@ethersproject/abstract-signer": "^5.5.0",
24
24
  "@ethersproject/hash": "^5.5.0",
25
25
  "@ethersproject/providers": "^5.5.1",
@@ -5,3 +5,4 @@ export * from './mux-transport'
5
5
  export * from './window-transport'
6
6
  export * from './wallet-request-handler'
7
7
  export * from './extension-transport'
8
+ export * from './unreal-transport'
@@ -0,0 +1,2 @@
1
+ export * from './unreal-message-provider'
2
+ export * from './unreal-message-handler'
@@ -0,0 +1,36 @@
1
+ interface UnrealInjectedWindow {
2
+ ue?: {
3
+ sequencewallettransport?: {
4
+ logfromjs: (message: string) => void
5
+ warnfromjs: (message: string) => void
6
+ errorfromjs: (message: string) => void
7
+ }
8
+ }
9
+ logsOverriddenForUnreal?: boolean
10
+ }
11
+ declare const window: Window & typeof globalThis & UnrealInjectedWindow
12
+
13
+ /**
14
+ * This will redirect console logs from Sequence.js & the wallet to the Unreal console, for debugging purposes.
15
+ */
16
+ export function overrideLogs(side: 'dapp' | 'wallet') {
17
+ if (window.ue?.sequencewallettransport && !window.logsOverriddenForUnreal) {
18
+ const t = window.ue?.sequencewallettransport
19
+ console.log = (...args: unknown[]) => {
20
+ t.logfromjs(`${side}: ${stringify(args)}`)
21
+ }
22
+ console.warn = (...args: unknown[]) => {
23
+ t.warnfromjs(`${side}: ${stringify(args)}`)
24
+ }
25
+ console.error = (...args: unknown[]) => {
26
+ t.errorfromjs(`${side}: ${stringify(args)}`)
27
+ }
28
+ window.logsOverriddenForUnreal = true
29
+ }
30
+ }
31
+
32
+ function stringify(things: unknown[]): string {
33
+ return things
34
+ .map(a => (typeof a === 'object' ? (a instanceof Error ? a.message : JSON.stringify(a)) : String(a)))
35
+ .join(' ')
36
+ }
@@ -0,0 +1,121 @@
1
+ import {
2
+ ProviderMessageRequest,
3
+ ProviderMessage,
4
+ EventType,
5
+ InitState,
6
+ WindowSessionParams,
7
+ OpenWalletIntent,
8
+ ProviderRpcError,
9
+ TransportSession
10
+ } from '../../types'
11
+ import { WalletRequestHandler } from '../wallet-request-handler'
12
+ import { BaseWalletTransport } from '../base-wallet-transport'
13
+ import { logger, base64DecodeObject } from '@0xsequence/utils'
14
+ import { overrideLogs } from './overridelogs'
15
+
16
+ // all lowercase is an annoying limitation of Unreal CEF BindUObject
17
+ interface UnrealInjectedWalletWindow {
18
+ ue?: {
19
+ sequencewallettransport?: {
20
+ onmessagefromsequencejs?: (message: ProviderMessageRequest) => void
21
+ sendmessagetosequencejs: (message: string) => void
22
+ }
23
+ }
24
+ }
25
+ declare const window: Window & typeof globalThis & UnrealInjectedWalletWindow
26
+
27
+ /**
28
+ * Initialized on Wallet side
29
+ */
30
+ export class UnrealMessageHandler extends BaseWalletTransport {
31
+ constructor(walletRequestHandler: WalletRequestHandler) {
32
+ super(walletRequestHandler)
33
+ this._init = InitState.NIL
34
+ }
35
+
36
+ async register(windowHref?: string | URL) {
37
+ if (window.ue?.sequencewallettransport === undefined) {
38
+ return
39
+ }
40
+ overrideLogs('wallet')
41
+
42
+ // record open details (sessionId + default network) from the window url
43
+ const { search: rawParams } = new URL(windowHref || window.location.href)
44
+
45
+ let session: TransportSession | null = this.getUnrealTransportSession(rawParams)
46
+
47
+ // provider should always include sid when opening a new window
48
+ const isNewWindowSession = !!session.sessionId
49
+
50
+ // attempt to restore previous session in the case of a redirect or window reload
51
+ if (!isNewWindowSession) {
52
+ session = await this.getCachedTransportSession()
53
+ }
54
+
55
+ if (!session) {
56
+ logger.error('unreal session is undefined')
57
+ return
58
+ }
59
+
60
+ // listen for window-transport requests
61
+ window.ue.sequencewallettransport.onmessagefromsequencejs = this.onMessageFromUnreal
62
+ this._registered = true
63
+
64
+ // send open event to the app which opened us
65
+ this.open(session)
66
+ .then(opened => {
67
+ if (!opened) {
68
+ const err = `failed to open to network ${session?.networkId}`
69
+ logger.error(err)
70
+ this.notifyClose({ message: err } as ProviderRpcError)
71
+ window.close()
72
+ }
73
+ })
74
+ .catch(e => {
75
+ const err = `failed to open to network ${session?.networkId}, due to: ${e}`
76
+ logger.error(err)
77
+ this.notifyClose({ message: err } as ProviderRpcError)
78
+ window.close()
79
+ })
80
+ }
81
+
82
+ unregister() {
83
+ if (window.ue?.sequencewallettransport?.onmessagefromsequencejs === this.onMessageFromUnreal) {
84
+ delete window.ue.sequencewallettransport.onmessagefromsequencejs
85
+ }
86
+ this._registered = false
87
+ }
88
+
89
+ // onmessage is called when (the wallet) receives request messages from the dapp
90
+ // over the unreal json-messaging transport
91
+ private onMessageFromUnreal = (request: ProviderMessageRequest) => {
92
+ // Wallet always expects json-rpc request messages from a dapp
93
+
94
+ logger.debug('RECEIVED MESSAGE', request)
95
+
96
+ // Handle message via the base transport
97
+ this.handleMessage(request)
98
+ }
99
+
100
+ // sendMessage sends message to the dapp window
101
+ sendMessage(message: ProviderMessage<any>) {
102
+ if (message.type !== EventType.INIT && this._init !== InitState.OK) {
103
+ logger.error('impossible state, should not be calling postMessage until inited')
104
+ return
105
+ }
106
+ // prepare payload
107
+ const payload = JSON.stringify(message)
108
+
109
+ // post-message to app.
110
+ window.ue?.sequencewallettransport?.sendmessagetosequencejs(payload)
111
+ }
112
+
113
+ private getUnrealTransportSession = (windowParams: string | undefined): TransportSession => {
114
+ const params = new WindowSessionParams(windowParams)
115
+ return {
116
+ sessionId: params.get('sid'),
117
+ networkId: params.get('net'),
118
+ intent: base64DecodeObject<OpenWalletIntent>(params.get('intent'))
119
+ }
120
+ }
121
+ }