@0xsequence/provider 0.40.1 → 0.40.4

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 => {
@@ -3362,13 +3618,28 @@ class Wallet {
3362
3618
  this.useSession({
3363
3619
  walletContext: walletContext
3364
3620
  }, true);
3365
- }); // Load existing session from localStorage
3621
+ });
3622
+ };
3623
+
3624
+ this.loadSession = async function () {
3625
+ const data = await LocalStorage.getInstance().getItem('@sequence.session');
3626
+
3627
+ if (!data || data === '') {
3628
+ return undefined;
3629
+ }
3630
+
3631
+ try {
3632
+ const session = JSON.parse(data);
3366
3633
 
3367
- this.loadSession().then(session => {
3368
3634
  if (session) {
3369
- this.useSession(session, false);
3635
+ _this.useSession(session, false);
3370
3636
  }
3371
- });
3637
+
3638
+ return session;
3639
+ } catch (err) {
3640
+ logger.warn('loadSession failed, unable to parse session payload from storage.');
3641
+ return undefined;
3642
+ }
3372
3643
  };
3373
3644
 
3374
3645
  this.connect = async function (options) {
@@ -3502,26 +3773,10 @@ class Wallet {
3502
3773
  this.transport.messageProvider.closeWallet();
3503
3774
  };
3504
3775
 
3505
- this.loadSession = async function () {
3506
- const data = await LocalStorage.getInstance().getItem('@sequence.session');
3507
-
3508
- if (!data || data === '') {
3509
- return undefined;
3510
- }
3511
-
3512
- try {
3513
- const session = JSON.parse(data);
3514
- return session;
3515
- } catch (err) {
3516
- logger.warn('loadSession failed, unable to parse session payload from localStorage.');
3517
- return undefined;
3518
- }
3519
- };
3520
-
3521
- this.saveSession = session => {
3776
+ this.saveSession = async function (session) {
3522
3777
  logger.debug('wallet provider: saving session');
3523
3778
  const data = JSON.stringify(session);
3524
- LocalStorage.getInstance().setItem('@sequence.session', data);
3779
+ await LocalStorage.getInstance().setItem('@sequence.session', data);
3525
3780
  };
3526
3781
 
3527
3782
  this.useSession = async function (session, autoSave = true) {
@@ -3801,12 +4056,13 @@ const DefaultProviderConfig = {
3801
4056
  }
3802
4057
  };
3803
4058
  let walletInstance;
3804
- const initWallet = (network, config) => {
4059
+ const initWallet = async (network, config) => {
3805
4060
  if (walletInstance && walletInstance.isOpened()) {
3806
4061
  walletInstance.closeWallet();
3807
4062
  }
3808
4063
 
3809
4064
  walletInstance = new Wallet(network, config);
4065
+ await walletInstance.loadSession();
3810
4066
  return walletInstance;
3811
4067
  };
3812
4068
  const getWallet = () => {
@@ -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
  }
@@ -6,17 +6,16 @@ import { WalletSession, ProviderEventTypes, ConnectOptions, OpenWalletIntent, Co
6
6
  import { ItemStore } from './utils';
7
7
  import { WalletUtils } from './utils/index';
8
8
  import { Runtime } from 'webextension-polyfill-ts';
9
- import { sequence } from '../../0xsequence/src';
10
9
  export interface WalletProvider {
11
10
  connect(options?: ConnectOptions): Promise<ConnectDetails>;
12
11
  disconnect(): void;
13
- isOpened(): boolean;
14
12
  isConnected(): boolean;
15
13
  getSession(): WalletSession | undefined;
16
14
  getAddress(): Promise<string>;
17
15
  getNetworks(chainId?: ChainIdLike): Promise<NetworkConfig[]>;
18
16
  getChainId(): Promise<number>;
19
17
  getAuthChainId(): Promise<number>;
18
+ isOpened(): boolean;
20
19
  openWallet(path?: string, intent?: OpenWalletIntent, networkId?: string | number): Promise<boolean>;
21
20
  closeWallet(): void;
22
21
  getProvider(chainId?: ChainIdLike): Web3Provider | undefined;
@@ -40,6 +39,7 @@ export declare class Wallet implements WalletProvider {
40
39
  private providers;
41
40
  constructor(network?: string | number, config?: Partial<ProviderConfig>);
42
41
  private init;
42
+ loadSession: () => Promise<WalletSession | undefined>;
43
43
  connect: (options?: ConnectOptions | undefined) => Promise<ConnectDetails>;
44
44
  addConnectedSite(origin: string | undefined): Promise<void>;
45
45
  removeConnectedSite(origin: string): Promise<void>;
@@ -71,7 +71,6 @@ export declare class Wallet implements WalletProvider {
71
71
  isDeployed(chainId?: ChainIdLike): Promise<boolean>;
72
72
  on<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
73
73
  once<K extends keyof ProviderEventTypes>(event: K, fn: ProviderEventTypes[K]): void;
74
- private loadSession;
75
74
  private saveSession;
76
75
  private useSession;
77
76
  private useAccountAddress;
@@ -96,9 +95,12 @@ export interface ProviderConfig {
96
95
  enabled: boolean;
97
96
  runtime: Runtime.Static;
98
97
  };
98
+ unrealTransport?: {
99
+ enabled: boolean;
100
+ };
99
101
  };
100
102
  walletContext?: WalletContext;
101
103
  }
102
104
  export declare const DefaultProviderConfig: ProviderConfig;
103
- export declare const initWallet: (network?: string | number | undefined, config?: Partial<sequence.provider.ProviderConfig> | undefined) => sequence.provider.Wallet;
104
- export declare const getWallet: () => sequence.provider.Wallet;
105
+ export declare const initWallet: (network?: string | number | undefined, config?: Partial<ProviderConfig> | undefined) => Promise<Wallet>;
106
+ export declare const getWallet: () => Wallet;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xsequence/provider",
3
- "version": "0.40.1",
3
+ "version": "0.40.4",
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.1",
17
- "@0xsequence/auth": "^0.40.1",
18
- "@0xsequence/config": "^0.40.1",
19
- "@0xsequence/network": "^0.40.1",
20
- "@0xsequence/transactions": "^0.40.1",
21
- "@0xsequence/utils": "^0.40.1",
22
- "@0xsequence/wallet": "^0.40.1",
16
+ "@0xsequence/abi": "^0.40.4",
17
+ "@0xsequence/auth": "^0.40.4",
18
+ "@0xsequence/config": "^0.40.4",
19
+ "@0xsequence/network": "^0.40.4",
20
+ "@0xsequence/transactions": "^0.40.4",
21
+ "@0xsequence/utils": "^0.40.4",
22
+ "@0xsequence/wallet": "^0.40.4",
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
+ }