@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.
- package/dist/0xsequence-provider.cjs.dev.js +285 -27
- package/dist/0xsequence-provider.cjs.prod.js +285 -27
- package/dist/0xsequence-provider.esm.js +284 -28
- package/dist/declarations/src/transports/index.d.ts +1 -0
- package/dist/declarations/src/transports/unreal-transport/index.d.ts +2 -0
- package/dist/declarations/src/transports/unreal-transport/overridelogs.d.ts +4 -0
- package/dist/declarations/src/transports/unreal-transport/unreal-message-handler.d.ts +14 -0
- package/dist/declarations/src/transports/unreal-transport/unreal-message-provider.d.ts +15 -0
- package/dist/declarations/src/types.d.ts +1 -1
- package/dist/declarations/src/wallet.d.ts +7 -5
- package/package.json +8 -8
- package/src/transports/index.ts +1 -0
- package/src/transports/unreal-transport/index.ts +2 -0
- package/src/transports/unreal-transport/overridelogs.ts +36 -0
- package/src/transports/unreal-transport/unreal-message-handler.ts +121 -0
- package/src/transports/unreal-transport/unreal-message-provider.ts +121 -0
- package/src/transports/wallet-request-handler.ts +3 -3
- package/src/types.ts +1 -1
- package/src/wallet.ts +36 -25
|
@@ -593,19 +593,19 @@ class WalletRequestHandler {
|
|
|
593
593
|
let sig = ''; // Message must be prefixed with "\x19Ethereum Signed Message:\n"
|
|
594
594
|
// as defined by EIP-191
|
|
595
595
|
|
|
596
|
-
|
|
596
|
+
const prefixedMessage = prefixEIP191Message(message); // TODO:
|
|
597
597
|
// if (process.env.TEST_MODE === 'true' && this.prompter === null) {
|
|
598
598
|
|
|
599
599
|
if (_this.prompter === null) {
|
|
600
600
|
// prompter is null, so we'll sign from here
|
|
601
|
-
sig = await signer.signMessage(
|
|
601
|
+
sig = await signer.signMessage(prefixedMessage, chainId);
|
|
602
602
|
} else {
|
|
603
603
|
const promptResultForDeployment = await _this.handleConfirmWalletDeployPrompt(_this.prompter, signer, chainId);
|
|
604
604
|
|
|
605
605
|
if (promptResultForDeployment) {
|
|
606
606
|
sig = await _this.prompter.promptSignMessage({
|
|
607
607
|
chainId: chainId,
|
|
608
|
-
message
|
|
608
|
+
message: prefixedMessage
|
|
609
609
|
}, _this.connectOptions);
|
|
610
610
|
}
|
|
611
611
|
}
|
|
@@ -3145,6 +3145,257 @@ class BaseInjectedTransport extends eventemitter2.EventEmitter2 {
|
|
|
3145
3145
|
|
|
3146
3146
|
}
|
|
3147
3147
|
|
|
3148
|
+
/**
|
|
3149
|
+
* This will redirect console logs from Sequence.js & the wallet to the Unreal console, for debugging purposes.
|
|
3150
|
+
*/
|
|
3151
|
+
function overrideLogs(side) {
|
|
3152
|
+
var _window$ue;
|
|
3153
|
+
|
|
3154
|
+
if ((_window$ue = window.ue) != null && _window$ue.sequencewallettransport && !window.logsOverriddenForUnreal) {
|
|
3155
|
+
var _window$ue2;
|
|
3156
|
+
|
|
3157
|
+
const t = (_window$ue2 = window.ue) == null ? void 0 : _window$ue2.sequencewallettransport;
|
|
3158
|
+
|
|
3159
|
+
console.log = (...args) => {
|
|
3160
|
+
t.logfromjs(`${side}: ${stringify(args)}`);
|
|
3161
|
+
};
|
|
3162
|
+
|
|
3163
|
+
console.warn = (...args) => {
|
|
3164
|
+
t.warnfromjs(`${side}: ${stringify(args)}`);
|
|
3165
|
+
};
|
|
3166
|
+
|
|
3167
|
+
console.error = (...args) => {
|
|
3168
|
+
t.errorfromjs(`${side}: ${stringify(args)}`);
|
|
3169
|
+
};
|
|
3170
|
+
|
|
3171
|
+
window.logsOverriddenForUnreal = true;
|
|
3172
|
+
}
|
|
3173
|
+
}
|
|
3174
|
+
|
|
3175
|
+
function stringify(things) {
|
|
3176
|
+
return things.map(a => typeof a === 'object' ? a instanceof Error ? a.message : JSON.stringify(a) : String(a)).join(' ');
|
|
3177
|
+
}
|
|
3178
|
+
|
|
3179
|
+
let registeredUnrealMessageProvider; // all lowercase is an annoying limitation of Unreal CEF BindUObject
|
|
3180
|
+
|
|
3181
|
+
/**
|
|
3182
|
+
* Initialized on dApp side
|
|
3183
|
+
*/
|
|
3184
|
+
class UnrealMessageProvider extends BaseProviderTransport {
|
|
3185
|
+
constructor(walletAppURL) {
|
|
3186
|
+
super();
|
|
3187
|
+
this.walletURL = void 0;
|
|
3188
|
+
|
|
3189
|
+
this.register = () => {
|
|
3190
|
+
var _window$ue;
|
|
3191
|
+
|
|
3192
|
+
overrideLogs('dapp');
|
|
3193
|
+
|
|
3194
|
+
if (registeredUnrealMessageProvider) {
|
|
3195
|
+
// overriding the registered message provider
|
|
3196
|
+
registeredUnrealMessageProvider.unregister();
|
|
3197
|
+
registeredUnrealMessageProvider = this;
|
|
3198
|
+
} // listen for incoming messages from wallet
|
|
3199
|
+
|
|
3200
|
+
|
|
3201
|
+
if ((_window$ue = window.ue) != null && _window$ue.sequencewallettransport) {
|
|
3202
|
+
window.ue.sequencewallettransport.onmessagefromwallet = this.onUnrealCallback;
|
|
3203
|
+
}
|
|
3204
|
+
|
|
3205
|
+
registeredUnrealMessageProvider = this;
|
|
3206
|
+
this._registered = true;
|
|
3207
|
+
console.log('registering transport!');
|
|
3208
|
+
};
|
|
3209
|
+
|
|
3210
|
+
this.unregister = () => {
|
|
3211
|
+
var _window$ue2, _window$ue2$sequencew;
|
|
3212
|
+
|
|
3213
|
+
this._registered = false;
|
|
3214
|
+
this.closeWallet(); // disable message listener
|
|
3215
|
+
|
|
3216
|
+
if (registeredUnrealMessageProvider === this) {
|
|
3217
|
+
registeredUnrealMessageProvider = undefined;
|
|
3218
|
+
}
|
|
3219
|
+
|
|
3220
|
+
if (((_window$ue2 = window.ue) == null ? void 0 : (_window$ue2$sequencew = _window$ue2.sequencewallettransport) == null ? void 0 : _window$ue2$sequencew.onmessagefromwallet) === this.onUnrealCallback) {
|
|
3221
|
+
delete window.ue.sequencewallettransport.onmessagefromwallet;
|
|
3222
|
+
} // clear event listeners
|
|
3223
|
+
|
|
3224
|
+
|
|
3225
|
+
this.events.removeAllListeners();
|
|
3226
|
+
};
|
|
3227
|
+
|
|
3228
|
+
this.openWallet = (path, intent, networkId) => {
|
|
3229
|
+
if (this.isOpened()) {
|
|
3230
|
+
// TODO focus wallet
|
|
3231
|
+
console.log('wallet already open!');
|
|
3232
|
+
return;
|
|
3233
|
+
}
|
|
3234
|
+
|
|
3235
|
+
console.log('opening wallet!'); // Instantiate new walletURL for this call
|
|
3236
|
+
|
|
3237
|
+
const walletURL = new URL(this.walletURL.href);
|
|
3238
|
+
const windowSessionParams = new WindowSessionParams();
|
|
3239
|
+
|
|
3240
|
+
if (path) {
|
|
3241
|
+
walletURL.pathname = path.toLowerCase();
|
|
3242
|
+
} // Set session, intent and network id on walletURL
|
|
3243
|
+
|
|
3244
|
+
|
|
3245
|
+
this._init = exports.InitState.NIL;
|
|
3246
|
+
this._sessionId = `${performance.now()}`;
|
|
3247
|
+
windowSessionParams.set('sid', this._sessionId);
|
|
3248
|
+
|
|
3249
|
+
if (intent) {
|
|
3250
|
+
// encode intent as base64 url-encoded param
|
|
3251
|
+
windowSessionParams.set('intent', utils.base64EncodeObject(intent));
|
|
3252
|
+
}
|
|
3253
|
+
|
|
3254
|
+
if (networkId) {
|
|
3255
|
+
windowSessionParams.set('net', `${networkId}`);
|
|
3256
|
+
} // serialize params
|
|
3257
|
+
|
|
3258
|
+
|
|
3259
|
+
walletURL.search = windowSessionParams.toString();
|
|
3260
|
+
console.log('opening wallet to', walletURL.href);
|
|
3261
|
+
window.open(walletURL.href);
|
|
3262
|
+
};
|
|
3263
|
+
|
|
3264
|
+
this.onUnrealCallback = message => {
|
|
3265
|
+
if (!message) {
|
|
3266
|
+
throw new Error('ProviderMessage object is empty');
|
|
3267
|
+
} // handle message with base message provider
|
|
3268
|
+
|
|
3269
|
+
|
|
3270
|
+
this.handleMessage(message);
|
|
3271
|
+
};
|
|
3272
|
+
|
|
3273
|
+
this.walletURL = new URL(walletAppURL);
|
|
3274
|
+
}
|
|
3275
|
+
|
|
3276
|
+
closeWallet() {
|
|
3277
|
+
this.close();
|
|
3278
|
+
} // onmessage, receives ProviderMessageResponse from the wallet unreal transport
|
|
3279
|
+
|
|
3280
|
+
|
|
3281
|
+
// all lowercase is an annoying limitation of Unreal CEF BindUObject
|
|
3282
|
+
sendMessage(message) {
|
|
3283
|
+
var _window$ue3, _window$ue3$sequencew;
|
|
3284
|
+
|
|
3285
|
+
const postedMessage = typeof message !== 'string' ? JSON.stringify(message) : message;
|
|
3286
|
+
console.log('Sending message to wallet:', postedMessage);
|
|
3287
|
+
(_window$ue3 = window.ue) == null ? void 0 : (_window$ue3$sequencew = _window$ue3.sequencewallettransport) == null ? void 0 : _window$ue3$sequencew.sendmessagetowallet(postedMessage);
|
|
3288
|
+
}
|
|
3289
|
+
|
|
3290
|
+
}
|
|
3291
|
+
|
|
3292
|
+
/**
|
|
3293
|
+
* Initialized on Wallet side
|
|
3294
|
+
*/
|
|
3295
|
+
class UnrealMessageHandler extends BaseWalletTransport {
|
|
3296
|
+
constructor(walletRequestHandler) {
|
|
3297
|
+
super(walletRequestHandler);
|
|
3298
|
+
|
|
3299
|
+
this.onMessageFromUnreal = request => {
|
|
3300
|
+
// Wallet always expects json-rpc request messages from a dapp
|
|
3301
|
+
utils.logger.debug('RECEIVED MESSAGE', request); // Handle message via the base transport
|
|
3302
|
+
|
|
3303
|
+
this.handleMessage(request);
|
|
3304
|
+
};
|
|
3305
|
+
|
|
3306
|
+
this.getUnrealTransportSession = windowParams => {
|
|
3307
|
+
const params = new WindowSessionParams(windowParams);
|
|
3308
|
+
return {
|
|
3309
|
+
sessionId: params.get('sid'),
|
|
3310
|
+
networkId: params.get('net'),
|
|
3311
|
+
intent: utils.base64DecodeObject(params.get('intent'))
|
|
3312
|
+
};
|
|
3313
|
+
};
|
|
3314
|
+
|
|
3315
|
+
this._init = exports.InitState.NIL;
|
|
3316
|
+
}
|
|
3317
|
+
|
|
3318
|
+
async register(windowHref) {
|
|
3319
|
+
var _window$ue;
|
|
3320
|
+
|
|
3321
|
+
if (((_window$ue = window.ue) == null ? void 0 : _window$ue.sequencewallettransport) === undefined) {
|
|
3322
|
+
return;
|
|
3323
|
+
}
|
|
3324
|
+
|
|
3325
|
+
overrideLogs('wallet'); // record open details (sessionId + default network) from the window url
|
|
3326
|
+
|
|
3327
|
+
const {
|
|
3328
|
+
search: rawParams
|
|
3329
|
+
} = new URL(windowHref || window.location.href);
|
|
3330
|
+
let session = this.getUnrealTransportSession(rawParams); // provider should always include sid when opening a new window
|
|
3331
|
+
|
|
3332
|
+
const isNewWindowSession = !!session.sessionId; // attempt to restore previous session in the case of a redirect or window reload
|
|
3333
|
+
|
|
3334
|
+
if (!isNewWindowSession) {
|
|
3335
|
+
session = await this.getCachedTransportSession();
|
|
3336
|
+
}
|
|
3337
|
+
|
|
3338
|
+
if (!session) {
|
|
3339
|
+
utils.logger.error('unreal session is undefined');
|
|
3340
|
+
return;
|
|
3341
|
+
} // listen for window-transport requests
|
|
3342
|
+
|
|
3343
|
+
|
|
3344
|
+
window.ue.sequencewallettransport.onmessagefromsequencejs = this.onMessageFromUnreal;
|
|
3345
|
+
this._registered = true; // send open event to the app which opened us
|
|
3346
|
+
|
|
3347
|
+
this.open(session).then(opened => {
|
|
3348
|
+
if (!opened) {
|
|
3349
|
+
var _session;
|
|
3350
|
+
|
|
3351
|
+
const err = `failed to open to network ${(_session = session) == null ? void 0 : _session.networkId}`;
|
|
3352
|
+
utils.logger.error(err);
|
|
3353
|
+
this.notifyClose({
|
|
3354
|
+
message: err
|
|
3355
|
+
});
|
|
3356
|
+
window.close();
|
|
3357
|
+
}
|
|
3358
|
+
}).catch(e => {
|
|
3359
|
+
var _session2;
|
|
3360
|
+
|
|
3361
|
+
const err = `failed to open to network ${(_session2 = session) == null ? void 0 : _session2.networkId}, due to: ${e}`;
|
|
3362
|
+
utils.logger.error(err);
|
|
3363
|
+
this.notifyClose({
|
|
3364
|
+
message: err
|
|
3365
|
+
});
|
|
3366
|
+
window.close();
|
|
3367
|
+
});
|
|
3368
|
+
}
|
|
3369
|
+
|
|
3370
|
+
unregister() {
|
|
3371
|
+
var _window$ue2, _window$ue2$sequencew;
|
|
3372
|
+
|
|
3373
|
+
if (((_window$ue2 = window.ue) == null ? void 0 : (_window$ue2$sequencew = _window$ue2.sequencewallettransport) == null ? void 0 : _window$ue2$sequencew.onmessagefromsequencejs) === this.onMessageFromUnreal) {
|
|
3374
|
+
delete window.ue.sequencewallettransport.onmessagefromsequencejs;
|
|
3375
|
+
}
|
|
3376
|
+
|
|
3377
|
+
this._registered = false;
|
|
3378
|
+
} // onmessage is called when (the wallet) receives request messages from the dapp
|
|
3379
|
+
// over the unreal json-messaging transport
|
|
3380
|
+
|
|
3381
|
+
|
|
3382
|
+
// sendMessage sends message to the dapp window
|
|
3383
|
+
sendMessage(message) {
|
|
3384
|
+
var _window$ue3, _window$ue3$sequencew;
|
|
3385
|
+
|
|
3386
|
+
if (message.type !== exports.EventType.INIT && this._init !== exports.InitState.OK) {
|
|
3387
|
+
utils.logger.error('impossible state, should not be calling postMessage until inited');
|
|
3388
|
+
return;
|
|
3389
|
+
} // prepare payload
|
|
3390
|
+
|
|
3391
|
+
|
|
3392
|
+
const payload = JSON.stringify(message); // post-message to app.
|
|
3393
|
+
|
|
3394
|
+
(_window$ue3 = window.ue) == null ? void 0 : (_window$ue3$sequencew = _window$ue3.sequencewallettransport) == null ? void 0 : _window$ue3$sequencew.sendmessagetosequencejs(payload);
|
|
3395
|
+
}
|
|
3396
|
+
|
|
3397
|
+
}
|
|
3398
|
+
|
|
3148
3399
|
class WalletUtils {
|
|
3149
3400
|
constructor(walletProvider) {
|
|
3150
3401
|
var _this = this;
|
|
@@ -3250,7 +3501,7 @@ class Wallet {
|
|
|
3250
3501
|
this.providers = void 0;
|
|
3251
3502
|
|
|
3252
3503
|
this.init = () => {
|
|
3253
|
-
var _this$config$transpor, _this$config$transpor2, _this$config$transpor3, _this$config$transpor4, _this$config$transpor5, _this$config$transpor6;
|
|
3504
|
+
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;
|
|
3254
3505
|
|
|
3255
3506
|
if (this.transport.provider) {
|
|
3256
3507
|
// init must have already been called
|
|
@@ -3282,6 +3533,11 @@ class Wallet {
|
|
|
3282
3533
|
// this.transport.messageProvider.add(this.transport.extensionMessageProvider)
|
|
3283
3534
|
}
|
|
3284
3535
|
|
|
3536
|
+
if ((_this$config$transpor7 = this.config.transports) != null && (_this$config$transpor8 = _this$config$transpor7.unrealTransport) != null && _this$config$transpor8.enabled) {
|
|
3537
|
+
this.transport.unrealMessageProvider = new UnrealMessageProvider(this.config.walletAppURL);
|
|
3538
|
+
this.transport.messageProvider.add(this.transport.unrealMessageProvider);
|
|
3539
|
+
}
|
|
3540
|
+
|
|
3285
3541
|
this.transport.messageProvider.register(); // .....
|
|
3286
3542
|
|
|
3287
3543
|
this.transport.allowProvider = network.allowProviderMiddleware(request => {
|
|
@@ -3366,13 +3622,28 @@ class Wallet {
|
|
|
3366
3622
|
this.useSession({
|
|
3367
3623
|
walletContext: walletContext
|
|
3368
3624
|
}, true);
|
|
3369
|
-
});
|
|
3625
|
+
});
|
|
3626
|
+
};
|
|
3627
|
+
|
|
3628
|
+
this.loadSession = async function () {
|
|
3629
|
+
const data = await LocalStorage.getInstance().getItem('@sequence.session');
|
|
3630
|
+
|
|
3631
|
+
if (!data || data === '') {
|
|
3632
|
+
return undefined;
|
|
3633
|
+
}
|
|
3634
|
+
|
|
3635
|
+
try {
|
|
3636
|
+
const session = JSON.parse(data);
|
|
3370
3637
|
|
|
3371
|
-
this.loadSession().then(session => {
|
|
3372
3638
|
if (session) {
|
|
3373
|
-
|
|
3639
|
+
_this.useSession(session, false);
|
|
3374
3640
|
}
|
|
3375
|
-
|
|
3641
|
+
|
|
3642
|
+
return session;
|
|
3643
|
+
} catch (err) {
|
|
3644
|
+
utils.logger.warn('loadSession failed, unable to parse session payload from storage.');
|
|
3645
|
+
return undefined;
|
|
3646
|
+
}
|
|
3376
3647
|
};
|
|
3377
3648
|
|
|
3378
3649
|
this.connect = async function (options) {
|
|
@@ -3506,26 +3777,10 @@ class Wallet {
|
|
|
3506
3777
|
this.transport.messageProvider.closeWallet();
|
|
3507
3778
|
};
|
|
3508
3779
|
|
|
3509
|
-
this.
|
|
3510
|
-
const data = await LocalStorage.getInstance().getItem('@sequence.session');
|
|
3511
|
-
|
|
3512
|
-
if (!data || data === '') {
|
|
3513
|
-
return undefined;
|
|
3514
|
-
}
|
|
3515
|
-
|
|
3516
|
-
try {
|
|
3517
|
-
const session = JSON.parse(data);
|
|
3518
|
-
return session;
|
|
3519
|
-
} catch (err) {
|
|
3520
|
-
utils.logger.warn('loadSession failed, unable to parse session payload from localStorage.');
|
|
3521
|
-
return undefined;
|
|
3522
|
-
}
|
|
3523
|
-
};
|
|
3524
|
-
|
|
3525
|
-
this.saveSession = session => {
|
|
3780
|
+
this.saveSession = async function (session) {
|
|
3526
3781
|
utils.logger.debug('wallet provider: saving session');
|
|
3527
3782
|
const data = JSON.stringify(session);
|
|
3528
|
-
LocalStorage.getInstance().setItem('@sequence.session', data);
|
|
3783
|
+
await LocalStorage.getInstance().setItem('@sequence.session', data);
|
|
3529
3784
|
};
|
|
3530
3785
|
|
|
3531
3786
|
this.useSession = async function (session, autoSave = true) {
|
|
@@ -3805,12 +4060,13 @@ const DefaultProviderConfig = {
|
|
|
3805
4060
|
}
|
|
3806
4061
|
};
|
|
3807
4062
|
let walletInstance;
|
|
3808
|
-
const initWallet = (network, config) => {
|
|
4063
|
+
const initWallet = async (network, config) => {
|
|
3809
4064
|
if (walletInstance && walletInstance.isOpened()) {
|
|
3810
4065
|
walletInstance.closeWallet();
|
|
3811
4066
|
}
|
|
3812
4067
|
|
|
3813
4068
|
walletInstance = new Wallet(network, config);
|
|
4069
|
+
await walletInstance.loadSession();
|
|
3814
4070
|
return walletInstance;
|
|
3815
4071
|
};
|
|
3816
4072
|
const getWallet = () => {
|
|
@@ -3839,6 +4095,8 @@ exports.ProxyMessageChannel = ProxyMessageChannel;
|
|
|
3839
4095
|
exports.ProxyMessageChannelPort = ProxyMessageChannelPort;
|
|
3840
4096
|
exports.ProxyMessageHandler = ProxyMessageHandler;
|
|
3841
4097
|
exports.ProxyMessageProvider = ProxyMessageProvider;
|
|
4098
|
+
exports.UnrealMessageHandler = UnrealMessageHandler;
|
|
4099
|
+
exports.UnrealMessageProvider = UnrealMessageProvider;
|
|
3842
4100
|
exports.Wallet = Wallet;
|
|
3843
4101
|
exports.WalletRequestHandler = WalletRequestHandler;
|
|
3844
4102
|
exports.Web3Provider = Web3Provider;
|