@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.
Files changed (58) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/dist/interface/SnapInterfaceController.cjs +8 -3
  3. package/dist/interface/SnapInterfaceController.cjs.map +1 -1
  4. package/dist/interface/SnapInterfaceController.d.cts +2 -1
  5. package/dist/interface/SnapInterfaceController.d.cts.map +1 -1
  6. package/dist/interface/SnapInterfaceController.d.mts +2 -1
  7. package/dist/interface/SnapInterfaceController.d.mts.map +1 -1
  8. package/dist/interface/SnapInterfaceController.mjs +8 -3
  9. package/dist/interface/SnapInterfaceController.mjs.map +1 -1
  10. package/dist/services/AbstractExecutionService.cjs +4 -5
  11. package/dist/services/AbstractExecutionService.cjs.map +1 -1
  12. package/dist/services/AbstractExecutionService.d.cts +3 -2
  13. package/dist/services/AbstractExecutionService.d.cts.map +1 -1
  14. package/dist/services/AbstractExecutionService.d.mts +3 -2
  15. package/dist/services/AbstractExecutionService.d.mts.map +1 -1
  16. package/dist/services/AbstractExecutionService.mjs +4 -5
  17. package/dist/services/AbstractExecutionService.mjs.map +1 -1
  18. package/dist/services/iframe/IframeExecutionService.cjs +12 -2
  19. package/dist/services/iframe/IframeExecutionService.cjs.map +1 -1
  20. package/dist/services/iframe/IframeExecutionService.d.cts +1 -1
  21. package/dist/services/iframe/IframeExecutionService.d.cts.map +1 -1
  22. package/dist/services/iframe/IframeExecutionService.d.mts +1 -1
  23. package/dist/services/iframe/IframeExecutionService.d.mts.map +1 -1
  24. package/dist/services/iframe/IframeExecutionService.mjs +12 -2
  25. package/dist/services/iframe/IframeExecutionService.mjs.map +1 -1
  26. package/dist/services/node-js/NodeProcessExecutionService.cjs +1 -1
  27. package/dist/services/node-js/NodeProcessExecutionService.cjs.map +1 -1
  28. package/dist/services/node-js/NodeProcessExecutionService.d.cts +1 -1
  29. package/dist/services/node-js/NodeProcessExecutionService.d.cts.map +1 -1
  30. package/dist/services/node-js/NodeProcessExecutionService.d.mts +1 -1
  31. package/dist/services/node-js/NodeProcessExecutionService.d.mts.map +1 -1
  32. package/dist/services/node-js/NodeProcessExecutionService.mjs +1 -1
  33. package/dist/services/node-js/NodeProcessExecutionService.mjs.map +1 -1
  34. package/dist/services/webview/WebViewExecutionService.cjs +1 -1
  35. package/dist/services/webview/WebViewExecutionService.cjs.map +1 -1
  36. package/dist/services/webview/WebViewExecutionService.d.cts +1 -1
  37. package/dist/services/webview/WebViewExecutionService.d.cts.map +1 -1
  38. package/dist/services/webview/WebViewExecutionService.d.mts +1 -1
  39. package/dist/services/webview/WebViewExecutionService.d.mts.map +1 -1
  40. package/dist/services/webview/WebViewExecutionService.mjs +1 -1
  41. package/dist/services/webview/WebViewExecutionService.mjs.map +1 -1
  42. package/dist/snaps/SnapController.cjs +25 -7
  43. package/dist/snaps/SnapController.cjs.map +1 -1
  44. package/dist/snaps/SnapController.d.cts +1 -0
  45. package/dist/snaps/SnapController.d.cts.map +1 -1
  46. package/dist/snaps/SnapController.d.mts +1 -0
  47. package/dist/snaps/SnapController.d.mts.map +1 -1
  48. package/dist/snaps/SnapController.mjs +25 -7
  49. package/dist/snaps/SnapController.mjs.map +1 -1
  50. package/dist/snaps/registry/json.cjs +19 -2
  51. package/dist/snaps/registry/json.cjs.map +1 -1
  52. package/dist/snaps/registry/json.d.cts +1 -0
  53. package/dist/snaps/registry/json.d.cts.map +1 -1
  54. package/dist/snaps/registry/json.d.mts +1 -0
  55. package/dist/snaps/registry/json.d.mts.map +1 -1
  56. package/dist/snaps/registry/json.mjs +19 -2
  57. package/dist/snaps/registry/json.mjs.map +1 -1
  58. 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;;;;IAc5C,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAG7E"}
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;;;;IAc5C,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAG7E"}
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"}
@@ -29,7 +29,7 @@ export class WebViewExecutionService extends AbstractExecutionService {
29
29
  });
30
30
  return { worker: webView, stream };
31
31
  }
32
- terminateJob(jobWrapper) {
32
+ async terminateJob(jobWrapper) {
33
33
  this.#removeWebView(jobWrapper.id);
34
34
  }
35
35
  }
@@ -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,YAAY,CAAC,UAA8C;QACnE,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 terminateJob(jobWrapper: TerminateJobArgs<WebViewInterface>): void {\n this.#removeWebView(jobWrapper.id);\n }\n}\n"]}
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.#assertCanUsePlatform();
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 #assertCanUsePlatform() {
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
- (0, utils_1.assert)(flags.disableSnaps !== true, 'The Snaps platform requires basic functionality to be used. Enable basic functionality in the settings to use the Snaps platform.');
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.#assertCanUsePlatform();
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.#assertCanUsePlatform();
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.#assertCanUsePlatform();
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.#assertCanUsePlatform();
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'.");