@metamask/snaps-controllers 17.1.2 → 17.2.1
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/CHANGELOG.md +25 -1
- package/dist/interface/SnapInterfaceController.cjs +8 -3
- package/dist/interface/SnapInterfaceController.cjs.map +1 -1
- package/dist/interface/SnapInterfaceController.d.cts +2 -1
- package/dist/interface/SnapInterfaceController.d.cts.map +1 -1
- package/dist/interface/SnapInterfaceController.d.mts +2 -1
- package/dist/interface/SnapInterfaceController.d.mts.map +1 -1
- package/dist/interface/SnapInterfaceController.mjs +8 -3
- package/dist/interface/SnapInterfaceController.mjs.map +1 -1
- package/dist/services/AbstractExecutionService.cjs +4 -5
- package/dist/services/AbstractExecutionService.cjs.map +1 -1
- package/dist/services/AbstractExecutionService.d.cts +3 -2
- package/dist/services/AbstractExecutionService.d.cts.map +1 -1
- package/dist/services/AbstractExecutionService.d.mts +3 -2
- package/dist/services/AbstractExecutionService.d.mts.map +1 -1
- package/dist/services/AbstractExecutionService.mjs +4 -5
- package/dist/services/AbstractExecutionService.mjs.map +1 -1
- package/dist/services/iframe/IframeExecutionService.cjs +12 -2
- package/dist/services/iframe/IframeExecutionService.cjs.map +1 -1
- package/dist/services/iframe/IframeExecutionService.d.cts +1 -1
- package/dist/services/iframe/IframeExecutionService.d.cts.map +1 -1
- package/dist/services/iframe/IframeExecutionService.d.mts +1 -1
- package/dist/services/iframe/IframeExecutionService.d.mts.map +1 -1
- package/dist/services/iframe/IframeExecutionService.mjs +12 -2
- package/dist/services/iframe/IframeExecutionService.mjs.map +1 -1
- package/dist/services/node-js/NodeProcessExecutionService.cjs +1 -1
- package/dist/services/node-js/NodeProcessExecutionService.cjs.map +1 -1
- package/dist/services/node-js/NodeProcessExecutionService.d.cts +1 -1
- package/dist/services/node-js/NodeProcessExecutionService.d.cts.map +1 -1
- package/dist/services/node-js/NodeProcessExecutionService.d.mts +1 -1
- package/dist/services/node-js/NodeProcessExecutionService.d.mts.map +1 -1
- package/dist/services/node-js/NodeProcessExecutionService.mjs +1 -1
- package/dist/services/node-js/NodeProcessExecutionService.mjs.map +1 -1
- package/dist/services/webview/WebViewExecutionService.cjs +1 -1
- package/dist/services/webview/WebViewExecutionService.cjs.map +1 -1
- package/dist/services/webview/WebViewExecutionService.d.cts +1 -1
- package/dist/services/webview/WebViewExecutionService.d.cts.map +1 -1
- package/dist/services/webview/WebViewExecutionService.d.mts +1 -1
- package/dist/services/webview/WebViewExecutionService.d.mts.map +1 -1
- package/dist/services/webview/WebViewExecutionService.mjs +1 -1
- package/dist/services/webview/WebViewExecutionService.mjs.map +1 -1
- package/dist/snaps/SnapController.cjs +25 -7
- package/dist/snaps/SnapController.cjs.map +1 -1
- package/dist/snaps/SnapController.d.cts +1 -0
- package/dist/snaps/SnapController.d.cts.map +1 -1
- package/dist/snaps/SnapController.d.mts +1 -0
- package/dist/snaps/SnapController.d.mts.map +1 -1
- package/dist/snaps/SnapController.mjs +25 -7
- package/dist/snaps/SnapController.mjs.map +1 -1
- package/dist/snaps/registry/json.cjs +19 -2
- package/dist/snaps/registry/json.cjs.map +1 -1
- package/dist/snaps/registry/json.d.cts +1 -0
- package/dist/snaps/registry/json.d.cts.map +1 -1
- package/dist/snaps/registry/json.d.mts +1 -0
- package/dist/snaps/registry/json.d.mts.map +1 -1
- package/dist/snaps/registry/json.mjs +19 -2
- package/dist/snaps/registry/json.mjs.map +1 -1
- package/package.json +8 -7
|
@@ -20,6 +20,6 @@ export declare class WebViewExecutionService extends AbstractExecutionService<We
|
|
|
20
20
|
worker: WebViewInterface;
|
|
21
21
|
stream: WebViewMessageStream;
|
|
22
22
|
}>;
|
|
23
|
-
protected terminateJob(jobWrapper: TerminateJobArgs<WebViewInterface>): void
|
|
23
|
+
protected terminateJob(jobWrapper: TerminateJobArgs<WebViewInterface>): Promise<void>;
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=WebViewExecutionService.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebViewExecutionService.d.cts","sourceRoot":"","sources":["../../../src/services/webview/WebViewExecutionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mCAA+B;AAC/D,OAAO,EAAE,oBAAoB,EAAE,mCAA+B;AAC9D,OAAO,EAAE,wBAAwB,EAAE,wCAAoC;AACvE,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EACjB,wCAAoC;AAErC,MAAM,MAAM,2BAA2B,GAAG,oBAAoB,GAAG;IAC/D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,qBAAa,uBAAwB,SAAQ,wBAAwB,CAAC,gBAAgB,CAAC;;gBAKzE,EACV,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,GAAG,IAAI,EACR,EAAE,2BAA2B;IAU9B;;;;;;OAMG;cACa,aAAa,CAAC,MAAM,EAAE,MAAM;;;;
|
|
1
|
+
{"version":3,"file":"WebViewExecutionService.d.cts","sourceRoot":"","sources":["../../../src/services/webview/WebViewExecutionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mCAA+B;AAC/D,OAAO,EAAE,oBAAoB,EAAE,mCAA+B;AAC9D,OAAO,EAAE,wBAAwB,EAAE,wCAAoC;AACvE,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EACjB,wCAAoC;AAErC,MAAM,MAAM,2BAA2B,GAAG,oBAAoB,GAAG;IAC/D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,qBAAa,uBAAwB,SAAQ,wBAAwB,CAAC,gBAAgB,CAAC;;gBAKzE,EACV,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,GAAG,IAAI,EACR,EAAE,2BAA2B;IAU9B;;;;;;OAMG;cACa,aAAa,CAAC,MAAM,EAAE,MAAM;;;;cAc5B,YAAY,CAC1B,UAAU,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAC7C,OAAO,CAAC,IAAI,CAAC;CAGjB"}
|
|
@@ -20,6 +20,6 @@ export declare class WebViewExecutionService extends AbstractExecutionService<We
|
|
|
20
20
|
worker: WebViewInterface;
|
|
21
21
|
stream: WebViewMessageStream;
|
|
22
22
|
}>;
|
|
23
|
-
protected terminateJob(jobWrapper: TerminateJobArgs<WebViewInterface>): void
|
|
23
|
+
protected terminateJob(jobWrapper: TerminateJobArgs<WebViewInterface>): Promise<void>;
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=WebViewExecutionService.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebViewExecutionService.d.mts","sourceRoot":"","sources":["../../../src/services/webview/WebViewExecutionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mCAA+B;AAC/D,OAAO,EAAE,oBAAoB,EAAE,mCAA+B;AAC9D,OAAO,EAAE,wBAAwB,EAAE,wCAAoC;AACvE,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EACjB,wCAAoC;AAErC,MAAM,MAAM,2BAA2B,GAAG,oBAAoB,GAAG;IAC/D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,qBAAa,uBAAwB,SAAQ,wBAAwB,CAAC,gBAAgB,CAAC;;gBAKzE,EACV,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,GAAG,IAAI,EACR,EAAE,2BAA2B;IAU9B;;;;;;OAMG;cACa,aAAa,CAAC,MAAM,EAAE,MAAM;;;;
|
|
1
|
+
{"version":3,"file":"WebViewExecutionService.d.mts","sourceRoot":"","sources":["../../../src/services/webview/WebViewExecutionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mCAA+B;AAC/D,OAAO,EAAE,oBAAoB,EAAE,mCAA+B;AAC9D,OAAO,EAAE,wBAAwB,EAAE,wCAAoC;AACvE,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EACjB,wCAAoC;AAErC,MAAM,MAAM,2BAA2B,GAAG,oBAAoB,GAAG;IAC/D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,qBAAa,uBAAwB,SAAQ,wBAAwB,CAAC,gBAAgB,CAAC;;gBAKzE,EACV,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,GAAG,IAAI,EACR,EAAE,2BAA2B;IAU9B;;;;;;OAMG;cACa,aAAa,CAAC,MAAM,EAAE,MAAM;;;;cAc5B,YAAY,CAC1B,UAAU,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAC7C,OAAO,CAAC,IAAI,CAAC;CAGjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebViewExecutionService.mjs","sourceRoot":"","sources":["../../../src/services/webview/WebViewExecutionService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mCAA+B;AAC9D,OAAO,EAAE,wBAAwB,EAAE,wCAAoC;AAWvE,MAAM,OAAO,uBAAwB,SAAQ,wBAA0C;IAC5E,cAAc,CAAC;IAEf,cAAc,CAAC;IAExB,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,GAAG,IAAI,EACqB;QAC5B,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,SAAS;YACT,iBAAiB;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,aAAa,CAAC,MAAc;QAC1C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC;YACtC,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;YACf,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IAES,
|
|
1
|
+
{"version":3,"file":"WebViewExecutionService.mjs","sourceRoot":"","sources":["../../../src/services/webview/WebViewExecutionService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mCAA+B;AAC9D,OAAO,EAAE,wBAAwB,EAAE,wCAAoC;AAWvE,MAAM,OAAO,uBAAwB,SAAQ,wBAA0C;IAC5E,cAAc,CAAC;IAEf,cAAc,CAAC;IAExB,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,GAAG,IAAI,EACqB;QAC5B,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,SAAS;YACT,iBAAiB;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,aAAa,CAAC,MAAc;QAC1C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC;YACtC,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;YACf,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,YAAY,CAC1B,UAA8C;QAE9C,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;CACF","sourcesContent":["import type { WebViewInterface } from './WebViewMessageStream';\nimport { WebViewMessageStream } from './WebViewMessageStream';\nimport { AbstractExecutionService } from '../AbstractExecutionService';\nimport type {\n ExecutionServiceArgs,\n TerminateJobArgs,\n} from '../AbstractExecutionService';\n\nexport type WebViewExecutionServiceArgs = ExecutionServiceArgs & {\n createWebView: (jobId: string) => Promise<WebViewInterface>;\n removeWebView: (jobId: string) => void;\n};\n\nexport class WebViewExecutionService extends AbstractExecutionService<WebViewInterface> {\n readonly #createWebView;\n\n readonly #removeWebView;\n\n constructor({\n messenger,\n setupSnapProvider,\n createWebView,\n removeWebView,\n ...args\n }: WebViewExecutionServiceArgs) {\n super({\n ...args,\n messenger,\n setupSnapProvider,\n });\n this.#createWebView = createWebView;\n this.#removeWebView = removeWebView;\n }\n\n /**\n * Create a new stream for the specified Snap. This wraps the runtime stream\n * in a stream specific to the Snap.\n *\n * @param snapId - The Snap ID.\n * @returns An object with the webview and stream.\n */\n protected async initEnvStream(snapId: string) {\n this.setSnapStatus(snapId, 'initializing');\n\n const webView = await this.#createWebView(snapId);\n\n const stream = new WebViewMessageStream({\n name: 'parent',\n target: 'child',\n webView,\n });\n\n return { worker: webView, stream };\n }\n\n protected async terminateJob(\n jobWrapper: TerminateJobArgs<WebViewInterface>,\n ): Promise<void> {\n this.#removeWebView(jobWrapper.id);\n }\n}\n"]}
|
|
@@ -37,6 +37,7 @@ const defaultState = {
|
|
|
37
37
|
snaps: {},
|
|
38
38
|
snapStates: {},
|
|
39
39
|
unencryptedSnapStates: {},
|
|
40
|
+
isReady: false,
|
|
40
41
|
};
|
|
41
42
|
/**
|
|
42
43
|
* Truncates the properties of a snap to only ones that are easily serializable.
|
|
@@ -88,6 +89,12 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
88
89
|
super({
|
|
89
90
|
messenger,
|
|
90
91
|
metadata: {
|
|
92
|
+
isReady: {
|
|
93
|
+
includeInStateLogs: true,
|
|
94
|
+
includeInDebugSnapshot: true,
|
|
95
|
+
persist: false,
|
|
96
|
+
usedInUi: false,
|
|
97
|
+
},
|
|
91
98
|
snapStates: {
|
|
92
99
|
includeInStateLogs: false,
|
|
93
100
|
persist: true,
|
|
@@ -300,6 +307,8 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
300
307
|
* runnable Snaps.
|
|
301
308
|
*/
|
|
302
309
|
init() {
|
|
310
|
+
// Lazily populate the `isReady` state.
|
|
311
|
+
this.#ensureCanUsePlatform().catch(snaps_utils_1.logWarning);
|
|
303
312
|
this.#callLifecycleHooks(constants_1.METAMASK_ORIGIN, snaps_utils_1.HandlerType.OnStart);
|
|
304
313
|
}
|
|
305
314
|
#handlePreinstalledSnaps(preinstalledSnaps) {
|
|
@@ -417,7 +426,7 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
417
426
|
* Also updates any preinstalled Snaps to the latest allowlisted version.
|
|
418
427
|
*/
|
|
419
428
|
async updateRegistry() {
|
|
420
|
-
await this.#
|
|
429
|
+
await this.#ensureCanUsePlatform();
|
|
421
430
|
await this.messenger.call('SnapsRegistry:update');
|
|
422
431
|
const blockedSnaps = await this.messenger.call('SnapsRegistry:get', Object.values(this.state.snaps).reduce((blockListArg, snap) => {
|
|
423
432
|
blockListArg[snap.id] = {
|
|
@@ -525,11 +534,19 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
525
534
|
/**
|
|
526
535
|
* Waits for onboarding and then asserts whether the Snaps platform is allowed to run.
|
|
527
536
|
*/
|
|
528
|
-
async #
|
|
537
|
+
async #ensureCanUsePlatform() {
|
|
529
538
|
// Ensure the user has onboarded before allowing access to Snaps.
|
|
530
539
|
await this.#ensureOnboardingComplete();
|
|
531
540
|
const flags = this.#getFeatureFlags();
|
|
532
|
-
|
|
541
|
+
// If the user has onboarded, the Snaps Platform is considered ready,
|
|
542
|
+
// if it isn't forced to be disabled via feature flags.
|
|
543
|
+
const isReady = flags.disableSnaps !== true;
|
|
544
|
+
if (this.state.isReady !== isReady) {
|
|
545
|
+
this.update((state) => {
|
|
546
|
+
state.isReady = isReady;
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
(0, utils_1.assert)(isReady, 'The Snaps platform requires basic functionality to be used. Enable basic functionality in the settings to use the Snaps platform.');
|
|
533
550
|
}
|
|
534
551
|
async #stopSnapsLastRequestPastMax() {
|
|
535
552
|
const entries = [...this.#snapsRuntimeData.entries()];
|
|
@@ -594,7 +611,7 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
594
611
|
* @param snapId - The id of the Snap to start.
|
|
595
612
|
*/
|
|
596
613
|
async startSnap(snapId) {
|
|
597
|
-
await this.#
|
|
614
|
+
await this.#ensureCanUsePlatform();
|
|
598
615
|
const snap = this.state.snaps[snapId];
|
|
599
616
|
if (!snap.enabled) {
|
|
600
617
|
throw new Error(`Snap "${snapId}" is disabled.`);
|
|
@@ -1039,6 +1056,7 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
1039
1056
|
await this.stopAllSnaps();
|
|
1040
1057
|
snapIds.forEach((snapId) => this.#revokeAllSnapPermissions(snapId));
|
|
1041
1058
|
this.update((state) => {
|
|
1059
|
+
state.isReady = false;
|
|
1042
1060
|
state.snaps = {};
|
|
1043
1061
|
state.snapStates = {};
|
|
1044
1062
|
state.unencryptedSnapStates = {};
|
|
@@ -1262,7 +1280,7 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
1262
1280
|
* snap couldn't be installed.
|
|
1263
1281
|
*/
|
|
1264
1282
|
async installSnaps(origin, requestedSnaps) {
|
|
1265
|
-
await this.#
|
|
1283
|
+
await this.#ensureCanUsePlatform();
|
|
1266
1284
|
const result = {};
|
|
1267
1285
|
const snapIds = Object.keys(requestedSnaps);
|
|
1268
1286
|
const pendingUpdates = [];
|
|
@@ -1447,7 +1465,7 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
1447
1465
|
if (!automaticUpdate) {
|
|
1448
1466
|
this.#assertCanInstallSnaps();
|
|
1449
1467
|
}
|
|
1450
|
-
await this.#
|
|
1468
|
+
await this.#ensureCanUsePlatform();
|
|
1451
1469
|
const snap = this.getExpect(snapId);
|
|
1452
1470
|
const { preinstalled, removable, hidden, hideSnapBranding } = snap;
|
|
1453
1471
|
if (preinstalled && !automaticUpdate) {
|
|
@@ -1870,7 +1888,7 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
1870
1888
|
* @returns The result of the JSON-RPC request.
|
|
1871
1889
|
*/
|
|
1872
1890
|
async handleRequest({ snapId, origin, handler: handlerType, request: rawRequest, }) {
|
|
1873
|
-
await this.#
|
|
1891
|
+
await this.#ensureCanUsePlatform();
|
|
1874
1892
|
const snap = this.get(snapId);
|
|
1875
1893
|
(0, utils_1.assert)(snap, `The Snap "${snapId}" is not installed. Please install it before invoking it.`);
|
|
1876
1894
|
(0, utils_1.assert)(origin === constants_1.METAMASK_ORIGIN || (0, snaps_utils_1.isValidUrl)(origin), "'origin' must be a valid URL or 'metamask'.");
|