@cartridge/controller 0.5.9 → 0.7.0
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/.turbo/turbo-build$colon$deps.log +53 -115
- package/.turbo/turbo-build.log +54 -116
- package/dist/controller.cjs +860 -0
- package/dist/controller.cjs.map +1 -0
- package/dist/controller.d.cts +33 -0
- package/dist/controller.d.ts +4 -4
- package/dist/controller.js +254 -170
- package/dist/controller.js.map +1 -1
- package/dist/index.cjs +2200 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +17 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.js +296 -7666
- package/dist/index.js.map +1 -1
- package/dist/lookup.cjs +59 -0
- package/dist/lookup.cjs.map +1 -0
- package/dist/lookup.d.cts +4 -0
- package/dist/lookup.js +7 -7
- package/dist/lookup.js.map +1 -1
- package/dist/node/index.cjs +726 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +56 -0
- package/dist/node/index.d.ts +56 -0
- package/dist/{telegram/provider.js → node/index.js} +521 -216
- package/dist/node/index.js.map +1 -0
- package/dist/policies-DD1aPjQ4.d.cts +21 -0
- package/dist/policies-DD1aPjQ4.d.ts +21 -0
- package/dist/{types-CVnDQVqD.d.ts → provider-ap1C1ypF.d.cts} +27 -10
- package/dist/provider-ap1C1ypF.d.ts +201 -0
- package/dist/session/{provider.js → index.cjs} +342 -168
- package/dist/session/index.cjs.map +1 -0
- package/dist/session/index.d.cts +38 -0
- package/dist/session/index.d.ts +37 -7
- package/dist/session/index.js +309 -161
- package/dist/session/index.js.map +1 -1
- package/package.json +49 -16
- package/src/controller.ts +44 -15
- package/src/iframe/base.ts +1 -11
- package/src/mutex.ts +22 -0
- package/src/node/account.ts +72 -0
- package/src/node/backend.ts +159 -0
- package/src/node/index.ts +4 -0
- package/src/node/provider.ts +178 -0
- package/src/node/server.ts +89 -0
- package/src/policies.ts +49 -0
- package/src/provider.ts +33 -2
- package/src/session/account.ts +2 -1
- package/src/session/provider.ts +123 -10
- package/src/telegram/provider.ts +3 -2
- package/src/types.ts +3 -6
- package/src/utils.ts +4 -1
- package/tsconfig.json +3 -3
- package/dist/__tests__/parseChainId.test.d.ts +0 -2
- package/dist/__tests__/parseChainId.test.js +0 -89
- package/dist/__tests__/parseChainId.test.js.map +0 -1
- package/dist/account.d.ts +0 -38
- package/dist/account.js +0 -106
- package/dist/account.js.map +0 -1
- package/dist/constants.d.ts +0 -5
- package/dist/constants.js +0 -10
- package/dist/constants.js.map +0 -1
- package/dist/errors.d.ts +0 -5
- package/dist/errors.js +0 -11
- package/dist/errors.js.map +0 -1
- package/dist/icon.d.ts +0 -3
- package/dist/icon.js +0 -6
- package/dist/icon.js.map +0 -1
- package/dist/iframe/base.d.ts +0 -5
- package/dist/iframe/base.js +0 -122
- package/dist/iframe/base.js.map +0 -1
- package/dist/iframe/index.d.ts +0 -5
- package/dist/iframe/index.js +0 -184
- package/dist/iframe/index.js.map +0 -1
- package/dist/iframe/keychain.d.ts +0 -5
- package/dist/iframe/keychain.js +0 -143
- package/dist/iframe/keychain.js.map +0 -1
- package/dist/iframe/profile.d.ts +0 -5
- package/dist/iframe/profile.js +0 -163
- package/dist/iframe/profile.js.map +0 -1
- package/dist/index.d-BbTUPBeO.d.ts +0 -68
- package/dist/provider.d.ts +0 -22
- package/dist/provider.js +0 -198
- package/dist/provider.js.map +0 -1
- package/dist/session/account.d.ts +0 -37
- package/dist/session/account.js +0 -92
- package/dist/session/account.js.map +0 -1
- package/dist/session/backend.d.ts +0 -60
- package/dist/session/backend.js +0 -39
- package/dist/session/backend.js.map +0 -1
- package/dist/session/provider.d.ts +0 -30
- package/dist/session/provider.js.map +0 -1
- package/dist/telegram/backend.d.ts +0 -33
- package/dist/telegram/backend.js +0 -40
- package/dist/telegram/backend.js.map +0 -1
- package/dist/telegram/provider.d.ts +0 -26
- package/dist/telegram/provider.js.map +0 -1
- package/dist/types.d.ts +0 -5
- package/dist/types.js +0 -13
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -18
- package/dist/utils.js +0 -139
- package/dist/utils.js.map +0 -1
package/dist/controller.js
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
} from "starknet";
|
|
1
|
+
import { constants, shortString, WalletAccount } from 'starknet';
|
|
2
|
+
import { connectToChild } from '@cartridge/penpal';
|
|
3
|
+
import { Permission } from '@starknet-io/types-js';
|
|
5
4
|
|
|
6
|
-
// src/
|
|
7
|
-
import {
|
|
8
|
-
addAddressPadding,
|
|
9
|
-
CallData,
|
|
10
|
-
constants,
|
|
11
|
-
getChecksumAddress,
|
|
12
|
-
hash,
|
|
13
|
-
shortString,
|
|
14
|
-
typedData,
|
|
15
|
-
TypedDataRevision
|
|
16
|
-
} from "starknet";
|
|
5
|
+
// src/account.ts
|
|
17
6
|
function toArray(val) {
|
|
18
7
|
return Array.isArray(val) ? val : [val];
|
|
19
8
|
}
|
|
@@ -42,6 +31,10 @@ function parseChainId(url) {
|
|
|
42
31
|
|
|
43
32
|
// src/account.ts
|
|
44
33
|
var ControllerAccount = class extends WalletAccount {
|
|
34
|
+
address;
|
|
35
|
+
keychain;
|
|
36
|
+
modal;
|
|
37
|
+
options;
|
|
45
38
|
constructor(provider, rpcUrl, address, keychain, options, modal) {
|
|
46
39
|
super({ nodeUrl: rpcUrl }, provider);
|
|
47
40
|
this.address = address;
|
|
@@ -66,8 +59,8 @@ var ControllerAccount = class extends WalletAccount {
|
|
|
66
59
|
return new Promise(async (resolve, reject) => {
|
|
67
60
|
const sessionExecute = await this.keychain.execute(
|
|
68
61
|
calls,
|
|
69
|
-
|
|
70
|
-
|
|
62
|
+
undefined,
|
|
63
|
+
undefined,
|
|
71
64
|
false
|
|
72
65
|
);
|
|
73
66
|
if (sessionExecute.code === "SUCCESS" /* SUCCESS */) {
|
|
@@ -81,8 +74,8 @@ var ControllerAccount = class extends WalletAccount {
|
|
|
81
74
|
this.modal.open();
|
|
82
75
|
const manualExecute = await this.keychain.execute(
|
|
83
76
|
calls,
|
|
84
|
-
|
|
85
|
-
|
|
77
|
+
undefined,
|
|
78
|
+
undefined,
|
|
86
79
|
true,
|
|
87
80
|
sessionExecute.error
|
|
88
81
|
);
|
|
@@ -122,16 +115,15 @@ var ControllerAccount = class extends WalletAccount {
|
|
|
122
115
|
}
|
|
123
116
|
};
|
|
124
117
|
var account_default = ControllerAccount;
|
|
125
|
-
|
|
126
|
-
// src/iframe/base.ts
|
|
127
|
-
import { connectToChild } from "@cartridge/penpal";
|
|
128
118
|
var IFrame = class {
|
|
119
|
+
url;
|
|
120
|
+
iframe;
|
|
121
|
+
container;
|
|
122
|
+
onClose;
|
|
129
123
|
constructor({
|
|
130
124
|
id,
|
|
131
125
|
url,
|
|
132
126
|
preset,
|
|
133
|
-
theme,
|
|
134
|
-
colorMode,
|
|
135
127
|
onClose,
|
|
136
128
|
onConnect,
|
|
137
129
|
methods = {}
|
|
@@ -139,15 +131,9 @@ var IFrame = class {
|
|
|
139
131
|
if (typeof document === "undefined") {
|
|
140
132
|
return;
|
|
141
133
|
}
|
|
142
|
-
if (theme) {
|
|
143
|
-
url.searchParams.set("theme", theme);
|
|
144
|
-
}
|
|
145
134
|
if (preset) {
|
|
146
135
|
url.searchParams.set("preset", preset);
|
|
147
136
|
}
|
|
148
|
-
if (colorMode) {
|
|
149
|
-
url.searchParams.set("colorMode", colorMode);
|
|
150
|
-
}
|
|
151
137
|
this.url = url;
|
|
152
138
|
const iframe = document.createElement("iframe");
|
|
153
139
|
iframe.src = url.toString();
|
|
@@ -310,21 +296,16 @@ var NotReadyToConnect = class _NotReadyToConnect extends Error {
|
|
|
310
296
|
}
|
|
311
297
|
};
|
|
312
298
|
|
|
313
|
-
// src/provider.ts
|
|
314
|
-
import {
|
|
315
|
-
Permission
|
|
316
|
-
} from "@starknet-io/types-js";
|
|
317
|
-
|
|
318
299
|
// package.json
|
|
319
300
|
var package_default = {
|
|
320
301
|
name: "@cartridge/controller",
|
|
321
|
-
version: "0.
|
|
302
|
+
version: "0.7.0",
|
|
322
303
|
description: "Cartridge Controller",
|
|
323
304
|
module: "dist/index.js",
|
|
324
305
|
types: "dist/index.d.ts",
|
|
325
306
|
type: "module",
|
|
326
307
|
scripts: {
|
|
327
|
-
"build:deps": "tsup
|
|
308
|
+
"build:deps": "tsup",
|
|
328
309
|
build: "pnpm build:deps",
|
|
329
310
|
format: 'prettier --write "src/**/*.ts"',
|
|
330
311
|
"format:check": 'prettier --check "src/**/*.ts"',
|
|
@@ -332,167 +313,240 @@ var package_default = {
|
|
|
332
313
|
version: "pnpm pkg get version"
|
|
333
314
|
},
|
|
334
315
|
exports: {
|
|
335
|
-
".":
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
316
|
+
".": {
|
|
317
|
+
types: "./dist/index.d.ts",
|
|
318
|
+
import: "./dist/index.js",
|
|
319
|
+
require: "./dist/index.cjs"
|
|
320
|
+
},
|
|
321
|
+
"./session": {
|
|
322
|
+
types: "./dist/session/index.d.ts",
|
|
323
|
+
import: "./dist/session/index.js",
|
|
324
|
+
require: "./dist/session/index.cjs"
|
|
325
|
+
},
|
|
326
|
+
"./session/node": {
|
|
327
|
+
types: "./dist/node/index.d.ts",
|
|
328
|
+
import: "./dist/node/index.js",
|
|
329
|
+
require: "./dist/node/index.cjs"
|
|
330
|
+
},
|
|
331
|
+
"./provider": {
|
|
332
|
+
types: "./dist/provider/index.d.ts",
|
|
333
|
+
import: "./dist/provider/index.js"
|
|
334
|
+
},
|
|
335
|
+
"./types": {
|
|
336
|
+
types: "./dist/types/index.d.ts",
|
|
337
|
+
import: "./dist/types/index.js"
|
|
338
|
+
}
|
|
339
339
|
},
|
|
340
340
|
tsup: {
|
|
341
341
|
entry: [
|
|
342
|
-
"src
|
|
342
|
+
"src/index.ts",
|
|
343
|
+
"src/controller.ts",
|
|
344
|
+
"src/lookup.ts",
|
|
345
|
+
"src/session/index.ts",
|
|
346
|
+
"src/node/index.ts"
|
|
343
347
|
],
|
|
344
348
|
format: [
|
|
345
|
-
"esm"
|
|
349
|
+
"esm",
|
|
350
|
+
"cjs"
|
|
346
351
|
],
|
|
347
352
|
splitting: false,
|
|
348
353
|
sourcemap: true,
|
|
349
|
-
clean: true
|
|
354
|
+
clean: true,
|
|
355
|
+
dts: true,
|
|
356
|
+
treeshake: {
|
|
357
|
+
preset: "recommended"
|
|
358
|
+
},
|
|
359
|
+
exports: "named"
|
|
360
|
+
},
|
|
361
|
+
peerDependencies: {
|
|
362
|
+
starknet: "catalog:",
|
|
363
|
+
open: "^10.1.0"
|
|
350
364
|
},
|
|
351
365
|
dependencies: {
|
|
352
366
|
"@cartridge/account-wasm": "workspace:*",
|
|
353
|
-
"@cartridge/penpal": "
|
|
354
|
-
"@starknet-io/types-js": "
|
|
367
|
+
"@cartridge/penpal": "catalog:",
|
|
368
|
+
"@starknet-io/types-js": "catalog:",
|
|
355
369
|
"@telegram-apps/sdk": "^2.4.0",
|
|
356
|
-
base64url: "
|
|
370
|
+
base64url: "catalog:",
|
|
357
371
|
"cbor-x": "^1.5.0",
|
|
358
|
-
"fast-deep-equal": "
|
|
359
|
-
"query-string": "^7.1.1",
|
|
360
|
-
starknet: "^6.11.0"
|
|
372
|
+
"fast-deep-equal": "catalog:"
|
|
361
373
|
},
|
|
362
374
|
devDependencies: {
|
|
363
375
|
"@cartridge/tsconfig": "workspace:*",
|
|
364
376
|
"@types/jest": "^29.5.14",
|
|
365
|
-
"@types/node": "
|
|
377
|
+
"@types/node": "catalog:",
|
|
366
378
|
jest: "^29.7.0",
|
|
379
|
+
prettier: "catalog:",
|
|
367
380
|
"ts-jest": "^29.2.5",
|
|
368
|
-
|
|
381
|
+
tsup: "catalog:",
|
|
382
|
+
typescript: "catalog:"
|
|
369
383
|
}
|
|
370
384
|
};
|
|
371
385
|
|
|
372
386
|
// src/icon.ts
|
|
373
387
|
var icon = "data:image/png;base64,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";
|
|
374
388
|
|
|
389
|
+
// src/mutex.ts
|
|
390
|
+
function releaseStub() {
|
|
391
|
+
}
|
|
392
|
+
var Mutex = class {
|
|
393
|
+
m_lastPromise = Promise.resolve();
|
|
394
|
+
/**
|
|
395
|
+
* Acquire lock
|
|
396
|
+
* @param [bypass=false] option to skip lock acquisition
|
|
397
|
+
*/
|
|
398
|
+
async obtain(bypass = false) {
|
|
399
|
+
let release = releaseStub;
|
|
400
|
+
if (bypass) return release;
|
|
401
|
+
const lastPromise = this.m_lastPromise;
|
|
402
|
+
this.m_lastPromise = new Promise((resolve) => release = resolve);
|
|
403
|
+
await lastPromise;
|
|
404
|
+
return release;
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
|
|
375
408
|
// src/provider.ts
|
|
409
|
+
var mutex = new Mutex();
|
|
376
410
|
var BaseProvider = class {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
411
|
+
id = "controller";
|
|
412
|
+
name = "Controller";
|
|
413
|
+
version = package_default.version;
|
|
414
|
+
icon = icon;
|
|
415
|
+
account;
|
|
416
|
+
subscriptions = [];
|
|
417
|
+
_probePromise = null;
|
|
418
|
+
async safeProbe() {
|
|
419
|
+
if (this.account) {
|
|
420
|
+
return this.account;
|
|
421
|
+
}
|
|
422
|
+
if (this._probePromise) {
|
|
423
|
+
return this._probePromise;
|
|
424
|
+
}
|
|
425
|
+
const release = await mutex.obtain();
|
|
426
|
+
return await new Promise(async (resolve) => {
|
|
427
|
+
try {
|
|
428
|
+
this._probePromise = this.probe();
|
|
429
|
+
const result = await this._probePromise;
|
|
430
|
+
resolve(result);
|
|
431
|
+
} finally {
|
|
432
|
+
this._probePromise = null;
|
|
433
|
+
}
|
|
434
|
+
}).finally(() => {
|
|
435
|
+
release();
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
request = async (call) => {
|
|
439
|
+
switch (call.type) {
|
|
440
|
+
case "wallet_getPermissions":
|
|
441
|
+
await this.safeProbe();
|
|
442
|
+
if (this.account) {
|
|
443
|
+
return [Permission.ACCOUNTS];
|
|
404
444
|
}
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
data: "wallet_watchAsset not implemented"
|
|
410
|
-
};
|
|
411
|
-
case "wallet_addStarknetChain": {
|
|
412
|
-
let params2 = call.params;
|
|
413
|
-
return this.addStarknetChain(params2);
|
|
445
|
+
return [];
|
|
446
|
+
case "wallet_requestAccounts": {
|
|
447
|
+
if (this.account) {
|
|
448
|
+
return [this.account.address];
|
|
414
449
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
450
|
+
const silentMode = call.params && call.params.silent_mode;
|
|
451
|
+
this.account = await this.safeProbe();
|
|
452
|
+
if (!this.account && !silentMode) {
|
|
453
|
+
this.account = await this.connect();
|
|
418
454
|
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
455
|
+
if (this.account) {
|
|
456
|
+
return [this.account.address];
|
|
457
|
+
}
|
|
458
|
+
return [];
|
|
459
|
+
}
|
|
460
|
+
case "wallet_watchAsset":
|
|
461
|
+
throw {
|
|
462
|
+
code: 63,
|
|
463
|
+
message: "An unexpected error occurred",
|
|
464
|
+
data: "wallet_watchAsset not implemented"
|
|
465
|
+
};
|
|
466
|
+
case "wallet_addStarknetChain": {
|
|
467
|
+
let params2 = call.params;
|
|
468
|
+
return this.addStarknetChain(params2);
|
|
469
|
+
}
|
|
470
|
+
case "wallet_switchStarknetChain": {
|
|
471
|
+
let params2 = call.params;
|
|
472
|
+
return this.switchStarknetChain(params2.chainId);
|
|
473
|
+
}
|
|
474
|
+
case "wallet_requestChainId":
|
|
475
|
+
if (!this.account) {
|
|
429
476
|
throw {
|
|
430
477
|
code: 63,
|
|
431
478
|
message: "An unexpected error occurred",
|
|
432
|
-
data: "
|
|
479
|
+
data: "Account not initialized"
|
|
433
480
|
};
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
params.calls.map((call2) => ({
|
|
445
|
-
contractAddress: call2.contract_address,
|
|
446
|
-
entrypoint: call2.entry_point,
|
|
447
|
-
calldata: call2.calldata
|
|
448
|
-
}))
|
|
449
|
-
);
|
|
450
|
-
case "wallet_addDeclareTransaction":
|
|
481
|
+
}
|
|
482
|
+
return await this.account.getChainId();
|
|
483
|
+
case "wallet_deploymentData":
|
|
484
|
+
throw {
|
|
485
|
+
code: 63,
|
|
486
|
+
message: "An unexpected error occurred",
|
|
487
|
+
data: "wallet_deploymentData not implemented"
|
|
488
|
+
};
|
|
489
|
+
case "wallet_addInvokeTransaction":
|
|
490
|
+
if (!this.account) {
|
|
451
491
|
throw {
|
|
452
492
|
code: 63,
|
|
453
493
|
message: "An unexpected error occurred",
|
|
454
|
-
data: "
|
|
494
|
+
data: "Account not initialized"
|
|
455
495
|
};
|
|
456
|
-
case "wallet_signTypedData": {
|
|
457
|
-
if (!this.account) {
|
|
458
|
-
throw {
|
|
459
|
-
code: 63,
|
|
460
|
-
message: "An unexpected error occurred",
|
|
461
|
-
data: "Account not initialized"
|
|
462
|
-
};
|
|
463
|
-
}
|
|
464
|
-
return await this.account.signMessage(call.params);
|
|
465
496
|
}
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
497
|
+
let params = call.params;
|
|
498
|
+
return await this.account.execute(
|
|
499
|
+
params.calls.map((call2) => ({
|
|
500
|
+
contractAddress: call2.contract_address,
|
|
501
|
+
entrypoint: call2.entry_point,
|
|
502
|
+
calldata: call2.calldata
|
|
503
|
+
}))
|
|
504
|
+
);
|
|
505
|
+
case "wallet_addDeclareTransaction":
|
|
506
|
+
throw {
|
|
507
|
+
code: 63,
|
|
508
|
+
message: "An unexpected error occurred",
|
|
509
|
+
data: "wallet_addDeclareTransaction not implemented"
|
|
510
|
+
};
|
|
511
|
+
case "wallet_signTypedData": {
|
|
512
|
+
if (!this.account) {
|
|
471
513
|
throw {
|
|
472
514
|
code: 63,
|
|
473
515
|
message: "An unexpected error occurred",
|
|
474
|
-
data:
|
|
516
|
+
data: "Account not initialized"
|
|
475
517
|
};
|
|
518
|
+
}
|
|
519
|
+
return await this.account.signMessage(call.params);
|
|
476
520
|
}
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
521
|
+
case "wallet_supportedSpecs":
|
|
522
|
+
return [];
|
|
523
|
+
case "wallet_supportedWalletApi":
|
|
524
|
+
return [];
|
|
525
|
+
default:
|
|
526
|
+
throw {
|
|
527
|
+
code: 63,
|
|
528
|
+
message: "An unexpected error occurred",
|
|
529
|
+
data: `Unknown RPC call type: ${call.type}`
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
};
|
|
533
|
+
on = (event, handler) => {
|
|
534
|
+
if (event !== "accountsChanged" && event !== "networkChanged") {
|
|
535
|
+
throw new Error(`Unknown event: ${event}`);
|
|
536
|
+
}
|
|
537
|
+
this.subscriptions.push({ type: event, handler });
|
|
538
|
+
};
|
|
539
|
+
off = (event, handler) => {
|
|
540
|
+
if (event !== "accountsChanged" && event !== "networkChanged") {
|
|
541
|
+
throw new Error(`Unknown event: ${event}`);
|
|
542
|
+
}
|
|
543
|
+
const idx = this.subscriptions.findIndex(
|
|
544
|
+
(sub) => sub.type === event && sub.handler === handler
|
|
545
|
+
);
|
|
546
|
+
if (idx >= 0) {
|
|
547
|
+
this.subscriptions.splice(idx, 1);
|
|
548
|
+
}
|
|
549
|
+
};
|
|
496
550
|
emitNetworkChanged(chainId) {
|
|
497
551
|
this.subscriptions.filter((sub) => sub.type === "networkChanged").forEach((sub) => {
|
|
498
552
|
sub.handler(chainId);
|
|
@@ -507,6 +561,12 @@ var BaseProvider = class {
|
|
|
507
561
|
|
|
508
562
|
// src/controller.ts
|
|
509
563
|
var ControllerProvider = class extends BaseProvider {
|
|
564
|
+
keychain;
|
|
565
|
+
profile;
|
|
566
|
+
options;
|
|
567
|
+
iframes;
|
|
568
|
+
selectedChain;
|
|
569
|
+
chains;
|
|
510
570
|
constructor(options) {
|
|
511
571
|
super();
|
|
512
572
|
const chains = /* @__PURE__ */ new Map();
|
|
@@ -549,9 +609,10 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
549
609
|
return;
|
|
550
610
|
}
|
|
551
611
|
const response = await this.keychain.probe(this.rpcUrl());
|
|
612
|
+
let rpcUrl = response?.rpcUrl || this.rpcUrl();
|
|
552
613
|
this.account = new account_default(
|
|
553
614
|
this,
|
|
554
|
-
|
|
615
|
+
rpcUrl,
|
|
555
616
|
response.address,
|
|
556
617
|
this.keychain,
|
|
557
618
|
this.options,
|
|
@@ -620,12 +681,17 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
620
681
|
}
|
|
621
682
|
}
|
|
622
683
|
async switchStarknetChain(chainId) {
|
|
684
|
+
if (!this.keychain || !this.iframes.keychain) {
|
|
685
|
+
console.error(new NotReadyToConnect().message);
|
|
686
|
+
return false;
|
|
687
|
+
}
|
|
623
688
|
try {
|
|
624
689
|
this.selectedChain = chainId;
|
|
625
|
-
|
|
626
|
-
if (
|
|
627
|
-
|
|
690
|
+
const response = await this.keychain.probe(this.rpcUrl());
|
|
691
|
+
if (response.rpcUrl === this.rpcUrl()) {
|
|
692
|
+
return true;
|
|
628
693
|
}
|
|
694
|
+
await this.keychain.switchChain(this.rpcUrl());
|
|
629
695
|
} catch (e) {
|
|
630
696
|
console.error(e);
|
|
631
697
|
return false;
|
|
@@ -647,7 +713,7 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
647
713
|
await document.requestStorageAccess();
|
|
648
714
|
}
|
|
649
715
|
}
|
|
650
|
-
this.account =
|
|
716
|
+
this.account = undefined;
|
|
651
717
|
return this.keychain.disconnect();
|
|
652
718
|
}
|
|
653
719
|
async openProfile(tab = "inventory") {
|
|
@@ -662,6 +728,30 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
662
728
|
this.profile.navigate(`${this.iframes.profile.url?.pathname}/${tab}`);
|
|
663
729
|
this.iframes.profile.open();
|
|
664
730
|
}
|
|
731
|
+
async openProfileTo(to) {
|
|
732
|
+
if (!this.profile || !this.iframes.profile?.url) {
|
|
733
|
+
console.error("Profile is not ready");
|
|
734
|
+
return;
|
|
735
|
+
}
|
|
736
|
+
if (!this.account) {
|
|
737
|
+
console.error("Account is not ready");
|
|
738
|
+
return;
|
|
739
|
+
}
|
|
740
|
+
this.profile.navigate(`${this.iframes.profile.url?.pathname}/${to}`);
|
|
741
|
+
this.iframes.profile.open();
|
|
742
|
+
}
|
|
743
|
+
async openProfileAt(at) {
|
|
744
|
+
if (!this.profile || !this.iframes.profile?.url) {
|
|
745
|
+
console.error("Profile is not ready");
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
if (!this.account) {
|
|
749
|
+
console.error("Account is not ready");
|
|
750
|
+
return;
|
|
751
|
+
}
|
|
752
|
+
this.profile.navigate(at);
|
|
753
|
+
this.iframes.profile.open();
|
|
754
|
+
}
|
|
665
755
|
async openSettings() {
|
|
666
756
|
if (!this.keychain || !this.iframes.keychain) {
|
|
667
757
|
console.error(new NotReadyToConnect().message);
|
|
@@ -698,12 +788,6 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
698
788
|
}
|
|
699
789
|
return this.keychain.username();
|
|
700
790
|
}
|
|
701
|
-
fetchControllers(contractAddresses) {
|
|
702
|
-
if (!this.keychain) {
|
|
703
|
-
throw new NotReadyToConnect().message;
|
|
704
|
-
}
|
|
705
|
-
return this.keychain.fetchControllers(contractAddresses);
|
|
706
|
-
}
|
|
707
791
|
openPurchaseCredits() {
|
|
708
792
|
if (!this.keychain || !this.iframes.keychain) {
|
|
709
793
|
console.error(new NotReadyToConnect().message);
|
|
@@ -733,7 +817,7 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
733
817
|
this.iframes.profile?.sendBackward();
|
|
734
818
|
this.iframes.keychain.open();
|
|
735
819
|
this.iframes.profile?.close();
|
|
736
|
-
const res = await this.keychain.execute(calls,
|
|
820
|
+
const res = await this.keychain.execute(calls, undefined, undefined, true);
|
|
737
821
|
this.iframes.profile?.open();
|
|
738
822
|
this.iframes.keychain.close();
|
|
739
823
|
this.iframes.profile?.sendForward();
|
|
@@ -750,7 +834,7 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
750
834
|
return await this.keychain.delegateAccount();
|
|
751
835
|
}
|
|
752
836
|
waitForKeychain({
|
|
753
|
-
timeout =
|
|
837
|
+
timeout = 5e4,
|
|
754
838
|
interval = 100
|
|
755
839
|
} = {}) {
|
|
756
840
|
return new Promise((resolve, reject) => {
|
|
@@ -768,7 +852,7 @@ var ControllerProvider = class extends BaseProvider {
|
|
|
768
852
|
});
|
|
769
853
|
}
|
|
770
854
|
};
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
855
|
+
|
|
856
|
+
export { ControllerProvider as default };
|
|
857
|
+
//# sourceMappingURL=controller.js.map
|
|
774
858
|
//# sourceMappingURL=controller.js.map
|