@metamask/snaps-controllers 6.0.1 → 6.0.3

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 (113) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/dist/{chunk-6N6KZYVD.js → chunk-4CA3O64H.js} +2 -1
  3. package/dist/chunk-4CA3O64H.js.map +1 -0
  4. package/dist/{chunk-6XGUJ27X.js → chunk-6HI7J27U.js} +3 -3
  5. package/dist/{chunk-DSQYZGBH.mjs → chunk-6M4XK4PN.mjs} +19 -19
  6. package/dist/chunk-6M4XK4PN.mjs.map +1 -0
  7. package/dist/{chunk-7PZECZV3.mjs → chunk-AELC3WCV.mjs} +2 -2
  8. package/dist/{chunk-ZAMIT33L.js → chunk-APQVOL5T.js} +23 -26
  9. package/dist/chunk-APQVOL5T.js.map +1 -0
  10. package/dist/{chunk-5R4ENIDN.mjs → chunk-AXXQZJBW.mjs} +23 -26
  11. package/dist/chunk-AXXQZJBW.mjs.map +1 -0
  12. package/dist/{chunk-PGKMKSAR.mjs → chunk-BAJUEBP6.mjs} +2 -2
  13. package/dist/{chunk-U6T2MPXT.js → chunk-CFTCANAK.js} +3 -3
  14. package/dist/{chunk-7JY5VENP.js → chunk-CPUUURMT.js} +19 -19
  15. package/dist/chunk-CPUUURMT.js.map +1 -0
  16. package/dist/{chunk-6YVCFPP6.mjs → chunk-E7627MMH.mjs} +2 -2
  17. package/dist/{chunk-PXECEHH7.mjs → chunk-E7FBXFXJ.mjs} +2 -2
  18. package/dist/{chunk-KF4PCKG7.mjs → chunk-KEEKVE7E.mjs} +2 -2
  19. package/dist/{chunk-FZY2Z5NP.js → chunk-LAVQZHSH.js} +3 -3
  20. package/dist/{chunk-KBVG3CL2.js → chunk-MXCU2GFU.js} +3 -3
  21. package/dist/{chunk-ZRS2VVUV.mjs → chunk-SXF7KAMU.mjs} +2 -2
  22. package/dist/{chunk-43ODL57R.js → chunk-TXR2WWIP.js} +3 -3
  23. package/dist/{chunk-JDHKH5YU.js → chunk-VJZI4VSJ.js} +19 -8
  24. package/dist/chunk-VJZI4VSJ.js.map +1 -0
  25. package/dist/{chunk-4LGL4A3M.js → chunk-VOAJRWUB.js} +3 -3
  26. package/dist/{chunk-J4PGHMLL.js → chunk-WFADRL7I.js} +3 -3
  27. package/dist/{chunk-6NYC5VNK.mjs → chunk-XBGQ5PKQ.mjs} +19 -8
  28. package/dist/chunk-XBGQ5PKQ.mjs.map +1 -0
  29. package/dist/{chunk-IMBPDTVN.mjs → chunk-YDVUJQ2S.mjs} +2 -2
  30. package/dist/{chunk-RU67JKBV.mjs → chunk-ZZD3HUNE.mjs} +2 -1
  31. package/dist/chunk-ZZD3HUNE.mjs.map +1 -0
  32. package/dist/cronjob/CronjobController.js +8 -8
  33. package/dist/cronjob/CronjobController.mjs +8 -8
  34. package/dist/cronjob/index.js +8 -8
  35. package/dist/cronjob/index.mjs +8 -8
  36. package/dist/index.js +9 -9
  37. package/dist/index.mjs +8 -8
  38. package/dist/node.js +11 -11
  39. package/dist/node.mjs +10 -10
  40. package/dist/react-native.js +10 -10
  41. package/dist/react-native.mjs +9 -9
  42. package/dist/services/AbstractExecutionService.js +2 -2
  43. package/dist/services/AbstractExecutionService.mjs +1 -1
  44. package/dist/services/browser.js +7 -7
  45. package/dist/services/browser.mjs +6 -6
  46. package/dist/services/iframe/IframeExecutionService.js +3 -3
  47. package/dist/services/iframe/IframeExecutionService.mjs +2 -2
  48. package/dist/services/iframe/index.js +3 -3
  49. package/dist/services/iframe/index.mjs +2 -2
  50. package/dist/services/index.js +6 -6
  51. package/dist/services/index.mjs +5 -5
  52. package/dist/services/node-js/NodeProcessExecutionService.js +7 -7
  53. package/dist/services/node-js/NodeProcessExecutionService.mjs +6 -6
  54. package/dist/services/node-js/NodeThreadExecutionService.js +7 -7
  55. package/dist/services/node-js/NodeThreadExecutionService.mjs +6 -6
  56. package/dist/services/node-js/index.js +8 -8
  57. package/dist/services/node-js/index.mjs +7 -7
  58. package/dist/services/node.js +8 -8
  59. package/dist/services/node.mjs +7 -7
  60. package/dist/services/offscreen/OffscreenExecutionService.js +4 -4
  61. package/dist/services/offscreen/OffscreenExecutionService.mjs +3 -3
  62. package/dist/services/offscreen/index.js +4 -4
  63. package/dist/services/offscreen/index.mjs +3 -3
  64. package/dist/services/proxy/ProxyExecutionService.js +3 -3
  65. package/dist/services/proxy/ProxyExecutionService.mjs +2 -2
  66. package/dist/services/react-native.js +7 -7
  67. package/dist/services/react-native.mjs +6 -6
  68. package/dist/services/webview/WebViewExecutionService.js +4 -4
  69. package/dist/services/webview/WebViewExecutionService.mjs +3 -3
  70. package/dist/services/webview/index.js +4 -4
  71. package/dist/services/webview/index.mjs +3 -3
  72. package/dist/services/webworker/WebWorkerExecutionService.js +3 -3
  73. package/dist/services/webworker/WebWorkerExecutionService.mjs +2 -2
  74. package/dist/services/webworker/index.js +3 -3
  75. package/dist/services/webworker/index.mjs +2 -2
  76. package/dist/snaps/SnapController.js +4 -4
  77. package/dist/snaps/SnapController.mjs +3 -3
  78. package/dist/snaps/index.js +4 -4
  79. package/dist/snaps/index.mjs +3 -3
  80. package/dist/snaps/registry/index.js +3 -3
  81. package/dist/snaps/registry/index.mjs +2 -2
  82. package/dist/snaps/registry/json.js +3 -3
  83. package/dist/snaps/registry/json.mjs +2 -2
  84. package/dist/snaps/registry/registry.js +2 -2
  85. package/dist/snaps/registry/registry.mjs +1 -1
  86. package/dist/tsconfig.build.tsbuildinfo +1 -1
  87. package/dist/types/services/AbstractExecutionService.d.ts +2 -1
  88. package/dist/types/snaps/SnapController.d.ts +6 -1
  89. package/dist/types/snaps/registry/json.d.ts +2 -2
  90. package/dist/types/snaps/registry/registry.d.ts +2 -1
  91. package/package.json +8 -8
  92. package/dist/chunk-5R4ENIDN.mjs.map +0 -1
  93. package/dist/chunk-6N6KZYVD.js.map +0 -1
  94. package/dist/chunk-6NYC5VNK.mjs.map +0 -1
  95. package/dist/chunk-7JY5VENP.js.map +0 -1
  96. package/dist/chunk-DSQYZGBH.mjs.map +0 -1
  97. package/dist/chunk-JDHKH5YU.js.map +0 -1
  98. package/dist/chunk-RU67JKBV.mjs.map +0 -1
  99. package/dist/chunk-ZAMIT33L.js.map +0 -1
  100. /package/dist/{chunk-6XGUJ27X.js.map → chunk-6HI7J27U.js.map} +0 -0
  101. /package/dist/{chunk-7PZECZV3.mjs.map → chunk-AELC3WCV.mjs.map} +0 -0
  102. /package/dist/{chunk-PGKMKSAR.mjs.map → chunk-BAJUEBP6.mjs.map} +0 -0
  103. /package/dist/{chunk-U6T2MPXT.js.map → chunk-CFTCANAK.js.map} +0 -0
  104. /package/dist/{chunk-6YVCFPP6.mjs.map → chunk-E7627MMH.mjs.map} +0 -0
  105. /package/dist/{chunk-PXECEHH7.mjs.map → chunk-E7FBXFXJ.mjs.map} +0 -0
  106. /package/dist/{chunk-KF4PCKG7.mjs.map → chunk-KEEKVE7E.mjs.map} +0 -0
  107. /package/dist/{chunk-FZY2Z5NP.js.map → chunk-LAVQZHSH.js.map} +0 -0
  108. /package/dist/{chunk-KBVG3CL2.js.map → chunk-MXCU2GFU.js.map} +0 -0
  109. /package/dist/{chunk-ZRS2VVUV.mjs.map → chunk-SXF7KAMU.mjs.map} +0 -0
  110. /package/dist/{chunk-43ODL57R.js.map → chunk-TXR2WWIP.js.map} +0 -0
  111. /package/dist/{chunk-4LGL4A3M.js.map → chunk-VOAJRWUB.js.map} +0 -0
  112. /package/dist/{chunk-J4PGHMLL.js.map → chunk-WFADRL7I.js.map} +0 -0
  113. /package/dist/{chunk-IMBPDTVN.mjs.map → chunk-YDVUJQ2S.mjs.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [6.0.3]
10
+ ### Changed
11
+ - Handle unavailable registry more gracefully ([#2256](https://github.com/MetaMask/snaps/pull/2256))
12
+ - Bump `@metamask/snaps-registry` to `^3.0.1` ([#2255](https://github.com/MetaMask/snaps/pull/2255))
13
+ - Bump `@metamask/json-rpc-engine` to `^7.3.3` ([#2247](https://github.com/MetaMask/snaps/pull/2247))
14
+
15
+ ## [6.0.2]
16
+ ### Changed
17
+ - Improve timeout handling when the execution environment fails to load ([#2242](https://github.com/MetaMask/snaps/pull/2242))
18
+
9
19
  ## [6.0.1]
10
20
  ### Fixed
11
21
  - Fix minor build configuration problems ([#2220](https://github.com/MetaMask/snaps/pull/2220))
@@ -207,7 +217,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
207
217
  - The version of the package no longer needs to match the version of all other
208
218
  MetaMask Snaps packages.
209
219
 
210
- [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.1...HEAD
220
+ [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.3...HEAD
221
+ [6.0.3]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.2...@metamask/snaps-controllers@6.0.3
222
+ [6.0.2]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.1...@metamask/snaps-controllers@6.0.2
211
223
  [6.0.1]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.0...@metamask/snaps-controllers@6.0.1
212
224
  [6.0.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@5.0.1...@metamask/snaps-controllers@6.0.0
213
225
  [5.0.1]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@5.0.0...@metamask/snaps-controllers@5.0.1
@@ -3,10 +3,11 @@ var SnapsRegistryStatus = /* @__PURE__ */ ((SnapsRegistryStatus2) => {
3
3
  SnapsRegistryStatus2[SnapsRegistryStatus2["Unverified"] = 0] = "Unverified";
4
4
  SnapsRegistryStatus2[SnapsRegistryStatus2["Blocked"] = 1] = "Blocked";
5
5
  SnapsRegistryStatus2[SnapsRegistryStatus2["Verified"] = 2] = "Verified";
6
+ SnapsRegistryStatus2[SnapsRegistryStatus2["Unavailable"] = 3] = "Unavailable";
6
7
  return SnapsRegistryStatus2;
7
8
  })(SnapsRegistryStatus || {});
8
9
 
9
10
 
10
11
 
11
12
  exports.SnapsRegistryStatus = SnapsRegistryStatus;
12
- //# sourceMappingURL=chunk-6N6KZYVD.js.map
13
+ //# sourceMappingURL=chunk-4CA3O64H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/snaps/registry/registry.ts"],"names":["SnapsRegistryStatus"],"mappings":";AAYO,IAAK,sBAAL,kBAAKA,yBAAL;AACL,EAAAA,0CAAA,gBAAa,KAAb;AACA,EAAAA,0CAAA,aAAU,KAAV;AACA,EAAAA,0CAAA,cAAW,KAAX;AACA,EAAAA,0CAAA,iBAAc,KAAd;AAJU,SAAAA;AAAA,GAAA","sourcesContent":["import type {\n BlockReason,\n SnapsRegistryDatabase,\n} from '@metamask/snaps-registry';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport type { SemVerRange, SemVerVersion } from '@metamask/utils';\n\nexport type SnapsRegistryInfo = { version: SemVerVersion; checksum: string };\nexport type SnapsRegistryRequest = Record<SnapId, SnapsRegistryInfo>;\nexport type SnapsRegistryMetadata =\n SnapsRegistryDatabase['verifiedSnaps'][SnapId]['metadata'];\n\nexport enum SnapsRegistryStatus {\n Unverified = 0,\n Blocked = 1,\n Verified = 2,\n Unavailable = 3,\n}\n\nexport type SnapsRegistryResult = {\n status: SnapsRegistryStatus;\n reason?: BlockReason;\n};\n\nexport type SnapsRegistry = {\n get(\n snaps: SnapsRegistryRequest,\n ): Promise<Record<SnapId, SnapsRegistryResult>>;\n\n update(): Promise<void>;\n\n /**\n * Find an allowlisted version within a specified version range.\n *\n * @param snapId - The ID of the snap we are trying to resolve a version for.\n * @param versionRange - The version range.\n * @param refetch - An optional flag used to determine if we are refetching the registry.\n * @returns An allowlisted version within the specified version range.\n * @throws If an allowlisted version does not exist within the version range.\n */\n resolveVersion(\n snapId: SnapId,\n versionRange: SemVerRange,\n ): Promise<SemVerRange>;\n\n /**\n * Get metadata for the given snap ID.\n *\n * @param snapId - The ID of the snap to get metadata for.\n * @returns The metadata for the given snap ID, or `null` if the snap is not\n * verified.\n */\n getMetadata(snapId: SnapId): Promise<SnapsRegistryMetadata | null>;\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkU6T2MPXTjs = require('./chunk-U6T2MPXT.js');
3
+ var _chunkCFTCANAKjs = require('./chunk-CFTCANAK.js');
4
4
 
5
5
 
6
6
 
@@ -9,7 +9,7 @@ var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
9
9
  // src/services/offscreen/OffscreenExecutionService.ts
10
10
  var _postmessagestream = require('@metamask/post-message-stream');
11
11
  var _createDocument, createDocument_fn;
12
- var OffscreenExecutionService = class extends _chunkU6T2MPXTjs.ProxyExecutionService {
12
+ var OffscreenExecutionService = class extends _chunkCFTCANAKjs.ProxyExecutionService {
13
13
  /**
14
14
  * Create a new offscreen execution service.
15
15
  *
@@ -69,4 +69,4 @@ createDocument_fn = async function() {
69
69
 
70
70
 
71
71
  exports.OffscreenExecutionService = OffscreenExecutionService;
72
- //# sourceMappingURL=chunk-6XGUJ27X.js.map
72
+ //# sourceMappingURL=chunk-6HI7J27U.js.map
@@ -16,14 +16,16 @@ import {
16
16
  inMilliseconds,
17
17
  satisfiesVersionRange
18
18
  } from "@metamask/utils";
19
- var SNAP_REGISTRY_URL = "https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/registry.json";
20
- var SNAP_REGISTRY_SIGNATURE_URL = "https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/signature.json";
19
+ var SNAP_REGISTRY_URL = "https://acl.execution.metamask.io/latest/registry.json";
20
+ var SNAP_REGISTRY_SIGNATURE_URL = "https://acl.execution.metamask.io/latest/signature.json";
21
+ var DEFAULT_PUBLIC_KEY = "0x025b65308f0f0fb8bc7f7ff87bfc296e0330eee5d3c1d1ee4a048b2fd6a86fa0a6";
21
22
  var controllerName = "SnapsRegistry";
22
23
  var defaultState = {
23
24
  database: null,
24
- lastUpdated: null
25
+ lastUpdated: null,
26
+ databaseUnavailable: false
25
27
  };
26
- var _url, _publicKey, _fetchFunction, _recentFetchThreshold, _refetchOnAllowlistMiss, _failOnUnavailableRegistry, _currentUpdate, _wasRecentlyFetched, wasRecentlyFetched_fn, _triggerUpdate, triggerUpdate_fn, _update, update_fn, _getDatabase, getDatabase_fn, _getSingle, getSingle_fn, _get, get_fn, _resolveVersion, resolveVersion_fn, _getMetadata, getMetadata_fn, _verifySignature, verifySignature_fn, _safeFetch, safeFetch_fn;
28
+ var _url, _publicKey, _fetchFunction, _recentFetchThreshold, _refetchOnAllowlistMiss, _currentUpdate, _wasRecentlyFetched, wasRecentlyFetched_fn, _triggerUpdate, triggerUpdate_fn, _update, update_fn, _getDatabase, getDatabase_fn, _getSingle, getSingle_fn, _get, get_fn, _resolveVersion, resolveVersion_fn, _getMetadata, getMetadata_fn, _verifySignature, verifySignature_fn, _safeFetch, safeFetch_fn;
27
29
  var JsonSnapsRegistry = class extends BaseController {
28
30
  constructor({
29
31
  messenger,
@@ -32,17 +34,17 @@ var JsonSnapsRegistry = class extends BaseController {
32
34
  registry: SNAP_REGISTRY_URL,
33
35
  signature: SNAP_REGISTRY_SIGNATURE_URL
34
36
  },
35
- publicKey,
37
+ publicKey = DEFAULT_PUBLIC_KEY,
36
38
  fetchFunction = globalThis.fetch.bind(globalThis),
37
39
  recentFetchThreshold = inMilliseconds(5, Duration.Minute),
38
- failOnUnavailableRegistry = true,
39
40
  refetchOnAllowlistMiss = true
40
41
  }) {
41
42
  super({
42
43
  messenger,
43
44
  metadata: {
44
45
  database: { persist: true, anonymous: false },
45
- lastUpdated: { persist: true, anonymous: false }
46
+ lastUpdated: { persist: true, anonymous: false },
47
+ databaseUnavailable: { persist: true, anonymous: false }
46
48
  },
47
49
  name: controllerName,
48
50
  state: {
@@ -105,14 +107,12 @@ var JsonSnapsRegistry = class extends BaseController {
105
107
  __privateAdd(this, _fetchFunction, void 0);
106
108
  __privateAdd(this, _recentFetchThreshold, void 0);
107
109
  __privateAdd(this, _refetchOnAllowlistMiss, void 0);
108
- __privateAdd(this, _failOnUnavailableRegistry, void 0);
109
110
  __privateAdd(this, _currentUpdate, void 0);
110
111
  __privateSet(this, _url, url);
111
112
  __privateSet(this, _publicKey, publicKey);
112
113
  __privateSet(this, _fetchFunction, fetchFunction);
113
114
  __privateSet(this, _recentFetchThreshold, recentFetchThreshold);
114
115
  __privateSet(this, _refetchOnAllowlistMiss, refetchOnAllowlistMiss);
115
- __privateSet(this, _failOnUnavailableRegistry, failOnUnavailableRegistry);
116
116
  __privateSet(this, _currentUpdate, null);
117
117
  this.messagingSystem.registerActionHandler(
118
118
  "SnapsRegistry:get",
@@ -137,7 +137,6 @@ _publicKey = new WeakMap();
137
137
  _fetchFunction = new WeakMap();
138
138
  _recentFetchThreshold = new WeakMap();
139
139
  _refetchOnAllowlistMiss = new WeakMap();
140
- _failOnUnavailableRegistry = new WeakMap();
141
140
  _currentUpdate = new WeakMap();
142
141
  _wasRecentlyFetched = new WeakSet();
143
142
  wasRecentlyFetched_fn = function() {
@@ -162,15 +161,17 @@ update_fn = async function() {
162
161
  }
163
162
  try {
164
163
  const database = await __privateMethod(this, _safeFetch, safeFetch_fn).call(this, __privateGet(this, _url).registry);
165
- if (__privateGet(this, _publicKey)) {
166
- const signature = await __privateMethod(this, _safeFetch, safeFetch_fn).call(this, __privateGet(this, _url).signature);
167
- __privateMethod(this, _verifySignature, verifySignature_fn).call(this, database, signature);
168
- }
164
+ const signature = await __privateMethod(this, _safeFetch, safeFetch_fn).call(this, __privateGet(this, _url).signature);
165
+ __privateMethod(this, _verifySignature, verifySignature_fn).call(this, database, signature);
169
166
  this.update((state) => {
170
167
  state.database = JSON.parse(database);
171
168
  state.lastUpdated = Date.now();
169
+ state.databaseUnavailable = false;
172
170
  });
173
171
  } catch {
172
+ this.update((state) => {
173
+ state.databaseUnavailable = true;
174
+ });
174
175
  }
175
176
  };
176
177
  _getDatabase = new WeakSet();
@@ -178,9 +179,6 @@ getDatabase_fn = async function() {
178
179
  if (this.state.database === null) {
179
180
  await __privateMethod(this, _triggerUpdate, triggerUpdate_fn).call(this);
180
181
  }
181
- if (__privateGet(this, _failOnUnavailableRegistry) && this.state.database === null) {
182
- throw new Error("Snaps registry is unavailable, installation blocked.");
183
- }
184
182
  return this.state.database;
185
183
  };
186
184
  _getSingle = new WeakSet();
@@ -207,7 +205,9 @@ getSingle_fn = async function(snapId, snapInfo, refetch = false) {
207
205
  await __privateMethod(this, _triggerUpdate, triggerUpdate_fn).call(this);
208
206
  return __privateMethod(this, _getSingle, getSingle_fn).call(this, snapId, snapInfo, true);
209
207
  }
210
- return { status: 0 /* Unverified */ };
208
+ return {
209
+ status: this.state.databaseUnavailable ? 3 /* Unavailable */ : 0 /* Unverified */
210
+ };
211
211
  };
212
212
  _get = new WeakSet();
213
213
  get_fn = async function(snaps) {
@@ -270,4 +270,4 @@ safeFetch_fn = async function(url) {
270
270
  export {
271
271
  JsonSnapsRegistry
272
272
  };
273
- //# sourceMappingURL=chunk-DSQYZGBH.mjs.map
273
+ //# sourceMappingURL=chunk-6M4XK4PN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/snaps/registry/json.ts"],"sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { SnapsRegistryDatabase } from '@metamask/snaps-registry';\nimport { verify } from '@metamask/snaps-registry';\nimport { getTargetVersion } from '@metamask/snaps-utils';\nimport type { Hex, SemVerRange, SemVerVersion } from '@metamask/utils';\nimport {\n assert,\n assertIsSemVerRange,\n Duration,\n inMilliseconds,\n satisfiesVersionRange,\n} from '@metamask/utils';\n\nimport type {\n SnapsRegistry,\n SnapsRegistryInfo,\n SnapsRegistryMetadata,\n SnapsRegistryRequest,\n SnapsRegistryResult,\n} from './registry';\nimport { SnapsRegistryStatus } from './registry';\n\nconst SNAP_REGISTRY_URL =\n 'https://acl.execution.metamask.io/latest/registry.json';\n\nconst SNAP_REGISTRY_SIGNATURE_URL =\n 'https://acl.execution.metamask.io/latest/signature.json';\n\nconst DEFAULT_PUBLIC_KEY =\n '0x025b65308f0f0fb8bc7f7ff87bfc296e0330eee5d3c1d1ee4a048b2fd6a86fa0a6';\n\ntype JsonSnapsRegistryUrl = {\n registry: string;\n signature: string;\n};\n\nexport type JsonSnapsRegistryArgs = {\n messenger: SnapsRegistryMessenger;\n state?: SnapsRegistryState;\n fetchFunction?: typeof fetch;\n url?: JsonSnapsRegistryUrl;\n recentFetchThreshold?: number;\n refetchOnAllowlistMiss?: boolean;\n publicKey?: Hex;\n};\n\nexport type GetResult = {\n type: `${typeof controllerName}:get`;\n handler: SnapsRegistry['get'];\n};\n\nexport type ResolveVersion = {\n type: `${typeof controllerName}:resolveVersion`;\n handler: SnapsRegistry['resolveVersion'];\n};\n\nexport type GetMetadata = {\n type: `${typeof controllerName}:getMetadata`;\n handler: SnapsRegistry['getMetadata'];\n};\n\nexport type Update = {\n type: `${typeof controllerName}:update`;\n handler: SnapsRegistry['update'];\n};\n\nexport type SnapsRegistryActions =\n | GetResult\n | GetMetadata\n | Update\n | ResolveVersion;\n\nexport type SnapsRegistryEvents = never;\n\nexport type SnapsRegistryMessenger = RestrictedControllerMessenger<\n 'SnapsRegistry',\n SnapsRegistryActions,\n SnapsRegistryEvents,\n SnapsRegistryActions['type'],\n SnapsRegistryEvents['type']\n>;\n\nexport type SnapsRegistryState = {\n database: SnapsRegistryDatabase | null;\n lastUpdated: number | null;\n databaseUnavailable: boolean;\n};\n\nconst controllerName = 'SnapsRegistry';\n\nconst defaultState = {\n database: null,\n lastUpdated: null,\n databaseUnavailable: false,\n};\n\nexport class JsonSnapsRegistry extends BaseController<\n typeof controllerName,\n SnapsRegistryState,\n SnapsRegistryMessenger\n> {\n #url: JsonSnapsRegistryUrl;\n\n #publicKey: Hex;\n\n #fetchFunction: typeof fetch;\n\n #recentFetchThreshold: number;\n\n #refetchOnAllowlistMiss: boolean;\n\n #currentUpdate: Promise<void> | null;\n\n constructor({\n messenger,\n state,\n url = {\n registry: SNAP_REGISTRY_URL,\n signature: SNAP_REGISTRY_SIGNATURE_URL,\n },\n publicKey = DEFAULT_PUBLIC_KEY,\n fetchFunction = globalThis.fetch.bind(globalThis),\n recentFetchThreshold = inMilliseconds(5, Duration.Minute),\n refetchOnAllowlistMiss = true,\n }: JsonSnapsRegistryArgs) {\n super({\n messenger,\n metadata: {\n database: { persist: true, anonymous: false },\n lastUpdated: { persist: true, anonymous: false },\n databaseUnavailable: { persist: true, anonymous: false },\n },\n name: controllerName,\n state: {\n ...defaultState,\n ...state,\n },\n });\n this.#url = url;\n this.#publicKey = publicKey;\n this.#fetchFunction = fetchFunction;\n this.#recentFetchThreshold = recentFetchThreshold;\n this.#refetchOnAllowlistMiss = refetchOnAllowlistMiss;\n this.#currentUpdate = null;\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:get',\n async (...args) => this.#get(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:getMetadata',\n async (...args) => this.#getMetadata(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:resolveVersion',\n async (...args) => this.#resolveVersion(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:update',\n async () => this.#triggerUpdate(),\n );\n }\n\n #wasRecentlyFetched() {\n return (\n this.state.lastUpdated &&\n Date.now() - this.state.lastUpdated < this.#recentFetchThreshold\n );\n }\n\n /**\n * Triggers an update of the registry database.\n *\n * If an existing update is in progress this function will await that update.\n */\n async #triggerUpdate() {\n // If an update is ongoing, wait for that.\n if (this.#currentUpdate) {\n await this.#currentUpdate;\n return;\n }\n // If no update exists, create promise and store globally.\n if (this.#currentUpdate === null) {\n this.#currentUpdate = this.#update();\n }\n await this.#currentUpdate;\n this.#currentUpdate = null;\n }\n\n /**\n * Updates the registry database if the registry hasn't been updated recently.\n *\n * NOTE: SHOULD NOT be called directly, instead `triggerUpdate` should be used.\n */\n async #update() {\n // No-op if we recently fetched the registry.\n if (this.#wasRecentlyFetched()) {\n return;\n }\n\n try {\n const database = await this.#safeFetch(this.#url.registry);\n\n const signature = await this.#safeFetch(this.#url.signature);\n this.#verifySignature(database, signature);\n\n this.update((state) => {\n state.database = JSON.parse(database);\n state.lastUpdated = Date.now();\n state.databaseUnavailable = false;\n });\n } catch {\n // Ignore\n this.update((state) => {\n state.databaseUnavailable = true;\n });\n }\n }\n\n async #getDatabase(): Promise<SnapsRegistryDatabase | null> {\n if (this.state.database === null) {\n await this.#triggerUpdate();\n }\n\n return this.state.database;\n }\n\n async #getSingle(\n snapId: string,\n snapInfo: SnapsRegistryInfo,\n refetch = false,\n ): Promise<SnapsRegistryResult> {\n const database = await this.#getDatabase();\n\n const blockedEntry = database?.blockedSnaps.find((blocked) => {\n if ('id' in blocked) {\n return (\n blocked.id === snapId &&\n satisfiesVersionRange(snapInfo.version, blocked.versionRange)\n );\n }\n\n return blocked.checksum === snapInfo.checksum;\n });\n\n if (blockedEntry) {\n return {\n status: SnapsRegistryStatus.Blocked,\n reason: blockedEntry.reason,\n };\n }\n\n const verified = database?.verifiedSnaps[snapId];\n const version = verified?.versions?.[snapInfo.version];\n if (version && version.checksum === snapInfo.checksum) {\n return { status: SnapsRegistryStatus.Verified };\n }\n // For now, if we have an allowlist miss, we can refetch once and try again.\n if (this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#getSingle(snapId, snapInfo, true);\n }\n return {\n status: this.state.databaseUnavailable\n ? SnapsRegistryStatus.Unavailable\n : SnapsRegistryStatus.Unverified,\n };\n }\n\n async #get(\n snaps: SnapsRegistryRequest,\n ): Promise<Record<string, SnapsRegistryResult>> {\n return Object.entries(snaps).reduce<\n Promise<Record<string, SnapsRegistryResult>>\n >(async (previousPromise, [snapId, snapInfo]) => {\n const result = await this.#getSingle(snapId, snapInfo);\n const acc = await previousPromise;\n acc[snapId] = result;\n return acc;\n }, Promise.resolve({}));\n }\n\n /**\n * Find an allowlisted version within a specified version range. Otherwise return the version range itself.\n *\n * @param snapId - The ID of the snap we are trying to resolve a version for.\n * @param versionRange - The version range.\n * @param refetch - An optional flag used to determine if we are refetching the registry.\n * @returns An allowlisted version within the specified version range if available otherwise returns the input version range.\n */\n async #resolveVersion(\n snapId: string,\n versionRange: SemVerRange,\n refetch = false,\n ): Promise<SemVerRange> {\n const database = await this.#getDatabase();\n const versions = database?.verifiedSnaps[snapId]?.versions ?? null;\n\n if (!versions && this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#resolveVersion(snapId, versionRange, true);\n }\n\n // If we cannot narrow down the version range we return the unaltered version range.\n if (!versions) {\n return versionRange;\n }\n\n const targetVersion = getTargetVersion(\n Object.keys(versions) as SemVerVersion[],\n versionRange,\n );\n\n if (!targetVersion && this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#resolveVersion(snapId, versionRange, true);\n }\n\n // If we cannot narrow down the version range we return the unaltered version range.\n if (!targetVersion) {\n return versionRange;\n }\n\n // A semver version is technically also a valid semver range.\n assertIsSemVerRange(targetVersion);\n return targetVersion;\n }\n\n /**\n * Get metadata for the given snap ID.\n *\n * @param snapId - The ID of the snap to get metadata for.\n * @returns The metadata for the given snap ID, or `null` if the snap is not\n * verified.\n */\n async #getMetadata(snapId: string): Promise<SnapsRegistryMetadata | null> {\n const database = await this.#getDatabase();\n return database?.verifiedSnaps[snapId]?.metadata ?? null;\n }\n\n /**\n * Verify the signature of the registry.\n *\n * @param database - The registry database.\n * @param signature - The signature of the registry.\n * @throws If the signature is invalid.\n * @private\n */\n #verifySignature(database: string, signature: string) {\n assert(this.#publicKey, 'No public key provided.');\n\n const valid = verify({\n registry: database,\n signature: JSON.parse(signature),\n publicKey: this.#publicKey,\n });\n\n assert(valid, 'Invalid registry signature.');\n }\n\n /**\n * Fetch the given URL, throwing if the response is not OK.\n *\n * @param url - The URL to fetch.\n * @returns The response body.\n * @private\n */\n async #safeFetch(url: string) {\n const response = await this.#fetchFunction(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch ${url}.`);\n }\n\n return await response.text();\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AbstractExecutionService
3
- } from "./chunk-6NYC5VNK.mjs";
3
+ } from "./chunk-XBGQ5PKQ.mjs";
4
4
 
5
5
  // src/services/iframe/IframeExecutionService.ts
6
6
  import { WindowPostMessageStream } from "@metamask/post-message-stream";
@@ -35,4 +35,4 @@ var IframeExecutionService = class extends AbstractExecutionService {
35
35
  export {
36
36
  IframeExecutionService
37
37
  };
38
- //# sourceMappingURL=chunk-7PZECZV3.mjs.map
38
+ //# sourceMappingURL=chunk-AELC3WCV.mjs.map
@@ -113,7 +113,7 @@ function truncateSnap(snap) {
113
113
  return truncatedSnap;
114
114
  }
115
115
  var name = "SnapController";
116
- var _closeAllConnections, _dynamicPermissions, _environmentEndowmentPermissions, _excludedPermissions, _featureFlags, _fetchFunction, _idleTimeCheckInterval, _maxIdleTime, _detectSnapLocation, _snapsRuntimeData, _rollbackSnapshots, _timeoutForLastRequestStatus, _statusMachine, _initializeStateMachine, initializeStateMachine_fn, _registerMessageHandlers, registerMessageHandlers_fn, _handlePreinstalledSnaps, handlePreinstalledSnaps_fn, _pollForLastRequestStatus, pollForLastRequestStatus_fn, _blockSnap, blockSnap_fn, _unblockSnap, unblockSnap_fn, _assertIsInstallAllowed, assertIsInstallAllowed_fn, _stopSnapsLastRequestPastMax, stopSnapsLastRequestPastMax_fn, _transition, transition_fn, _terminateSnap, terminateSnap_fn, _handleInitialConnections, handleInitialConnections_fn, _addSnapToSubject, addSnapToSubject_fn, _removeSnapFromSubjects, removeSnapFromSubjects_fn, _revokeAllSnapPermissions, revokeAllSnapPermissions_fn, _createApproval, createApproval_fn, _updateApproval, updateApproval_fn, _resolveAllowlistVersion, resolveAllowlistVersion_fn, _add, add_fn, _startSnap, startSnap_fn, _getEndowments, getEndowments_fn, _set, set_fn, _validateSnapPermissions, validateSnapPermissions_fn, _getExecutionTimeout, getExecutionTimeout_fn, _getRpcRequestHandler, getRpcRequestHandler_fn, _createInterface, createInterface_fn, _assertInterfaceExists, assertInterfaceExists_fn, _transformSnapRpcRequestResult, transformSnapRpcRequestResult_fn, _assertSnapRpcRequestResult, assertSnapRpcRequestResult_fn, _executeWithTimeout, executeWithTimeout_fn, _recordSnapRpcRequestStart, recordSnapRpcRequestStart_fn, _recordSnapRpcRequestFinish, recordSnapRpcRequestFinish_fn, _getRollbackSnapshot, getRollbackSnapshot_fn, _createRollbackSnapshot, createRollbackSnapshot_fn, _rollbackSnap, rollbackSnap_fn, _rollbackSnaps, rollbackSnaps_fn, _getRuntime, getRuntime_fn, _getRuntimeExpect, getRuntimeExpect_fn, _setupRuntime, setupRuntime_fn, _calculatePermissionsChange, calculatePermissionsChange_fn, _updatePermissions, updatePermissions_fn, _isValidUpdate, isValidUpdate_fn, _callLifecycleHook, callLifecycleHook_fn;
116
+ var _closeAllConnections, _dynamicPermissions, _environmentEndowmentPermissions, _excludedPermissions, _featureFlags, _fetchFunction, _idleTimeCheckInterval, _maxIdleTime, _maxInitTime, _detectSnapLocation, _snapsRuntimeData, _rollbackSnapshots, _timeoutForLastRequestStatus, _statusMachine, _initializeStateMachine, initializeStateMachine_fn, _registerMessageHandlers, registerMessageHandlers_fn, _handlePreinstalledSnaps, handlePreinstalledSnaps_fn, _pollForLastRequestStatus, pollForLastRequestStatus_fn, _blockSnap, blockSnap_fn, _unblockSnap, unblockSnap_fn, _assertIsInstallAllowed, assertIsInstallAllowed_fn, _stopSnapsLastRequestPastMax, stopSnapsLastRequestPastMax_fn, _transition, transition_fn, _terminateSnap, terminateSnap_fn, _handleInitialConnections, handleInitialConnections_fn, _addSnapToSubject, addSnapToSubject_fn, _removeSnapFromSubjects, removeSnapFromSubjects_fn, _revokeAllSnapPermissions, revokeAllSnapPermissions_fn, _createApproval, createApproval_fn, _updateApproval, updateApproval_fn, _resolveAllowlistVersion, resolveAllowlistVersion_fn, _add, add_fn, _startSnap, startSnap_fn, _getEndowments, getEndowments_fn, _set, set_fn, _validateSnapPermissions, validateSnapPermissions_fn, _getExecutionTimeout, getExecutionTimeout_fn, _getRpcRequestHandler, getRpcRequestHandler_fn, _createInterface, createInterface_fn, _assertInterfaceExists, assertInterfaceExists_fn, _transformSnapRpcRequestResult, transformSnapRpcRequestResult_fn, _assertSnapRpcRequestResult, assertSnapRpcRequestResult_fn, _recordSnapRpcRequestStart, recordSnapRpcRequestStart_fn, _recordSnapRpcRequestFinish, recordSnapRpcRequestFinish_fn, _getRollbackSnapshot, getRollbackSnapshot_fn, _createRollbackSnapshot, createRollbackSnapshot_fn, _rollbackSnap, rollbackSnap_fn, _rollbackSnaps, rollbackSnaps_fn, _getRuntime, getRuntime_fn, _getRuntimeExpect, getRuntimeExpect_fn, _setupRuntime, setupRuntime_fn, _calculatePermissionsChange, calculatePermissionsChange_fn, _updatePermissions, updatePermissions_fn, _isValidUpdate, isValidUpdate_fn, _callLifecycleHook, callLifecycleHook_fn;
117
117
  var SnapController = class extends _basecontroller.BaseController {
118
118
  constructor({
119
119
  closeAllConnections,
@@ -125,6 +125,7 @@ var SnapController = class extends _basecontroller.BaseController {
125
125
  idleTimeCheckInterval = _utils.inMilliseconds.call(void 0, 5, _utils.Duration.Second),
126
126
  maxIdleTime = _utils.inMilliseconds.call(void 0, 30, _utils.Duration.Second),
127
127
  maxRequestTime = _utils.inMilliseconds.call(void 0, 60, _utils.Duration.Second),
128
+ maxInitTime = _utils.inMilliseconds.call(void 0, 60, _utils.Duration.Second),
128
129
  fetchFunction = globalThis.fetch.bind(globalThis),
129
130
  featureFlags = {},
130
131
  detectSnapLocation: detectSnapLocationFunction = _chunk7WOG63YYjs.detectSnapLocation,
@@ -316,16 +317,6 @@ var SnapController = class extends _basecontroller.BaseController {
316
317
  * @param result - The result of the RPC request.
317
318
  */
318
319
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _assertSnapRpcRequestResult);
319
- /**
320
- * Awaits the specified promise and rejects if the promise doesn't resolve
321
- * before the timeout.
322
- *
323
- * @param promise - The promise to await.
324
- * @param timer - An optional timer object to control the timeout.
325
- * @returns The result of the promise or rejects if the promise times out.
326
- * @template PromiseValue - The value of the Promise.
327
- */
328
- _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _executeWithTimeout);
329
320
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _recordSnapRpcRequestStart);
330
321
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _recordSnapRpcRequestFinish);
331
322
  /**
@@ -414,6 +405,7 @@ var SnapController = class extends _basecontroller.BaseController {
414
405
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _fetchFunction, void 0);
415
406
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _idleTimeCheckInterval, void 0);
416
407
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _maxIdleTime, void 0);
408
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _maxInitTime, void 0);
417
409
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _detectSnapLocation, void 0);
418
410
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _snapsRuntimeData, void 0);
419
411
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _rollbackSnapshots, void 0);
@@ -428,6 +420,7 @@ var SnapController = class extends _basecontroller.BaseController {
428
420
  _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _idleTimeCheckInterval, idleTimeCheckInterval);
429
421
  _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _maxIdleTime, maxIdleTime);
430
422
  this.maxRequestTime = maxRequestTime;
423
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _maxInitTime, maxInitTime);
431
424
  _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _detectSnapLocation, detectSnapLocationFunction);
432
425
  this._onUnhandledSnapError = this._onUnhandledSnapError.bind(this);
433
426
  this._onOutboundRequest = this._onOutboundRequest.bind(this);
@@ -1364,6 +1357,7 @@ _featureFlags = new WeakMap();
1364
1357
  _fetchFunction = new WeakMap();
1365
1358
  _idleTimeCheckInterval = new WeakMap();
1366
1359
  _maxIdleTime = new WeakMap();
1360
+ _maxInitTime = new WeakMap();
1367
1361
  _detectSnapLocation = new WeakMap();
1368
1362
  _snapsRuntimeData = new WeakMap();
1369
1363
  _rollbackSnapshots = new WeakMap();
@@ -1625,7 +1619,7 @@ assertIsInstallAllowed_fn = async function(snapId, snapInfo) {
1625
1619
  );
1626
1620
  if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _featureFlags).requireAllowlist && isAllowlistingRequired && result.status !== 2 /* Verified */) {
1627
1621
  throw new Error(
1628
- `Cannot install version "${snapInfo.version}" of snap "${snapId}": The snap is not on the allowlist.`
1622
+ `Cannot install version "${snapInfo.version}" of snap "${snapId}": ${result.status === 3 /* Unavailable */ ? "The registry is temporarily unavailable." : "The snap is not on the allowlist."}`
1629
1623
  );
1630
1624
  }
1631
1625
  };
@@ -1813,10 +1807,16 @@ startSnap_fn = async function(snapData) {
1813
1807
  }
1814
1808
  try {
1815
1809
  const runtime = _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getRuntimeExpect, getRuntimeExpect_fn).call(this, snapId);
1816
- const result = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _executeWithTimeout, executeWithTimeout_fn).call(this, this.messagingSystem.call("ExecutionService:executeSnap", {
1817
- ...snapData,
1818
- endowments: await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getEndowments, getEndowments_fn).call(this, snapId)
1819
- }));
1810
+ const result = await _chunkXE5IWVNVjs.withTimeout.call(void 0,
1811
+ this.messagingSystem.call("ExecutionService:executeSnap", {
1812
+ ...snapData,
1813
+ endowments: await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getEndowments, getEndowments_fn).call(this, snapId)
1814
+ }),
1815
+ _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _maxInitTime)
1816
+ );
1817
+ if (result === _chunkXE5IWVNVjs.hasTimedOut) {
1818
+ throw new Error(`${snapId} failed to start.`);
1819
+ }
1820
1820
  _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _transition, transition_fn).call(this, snapId, _snapsutils.SnapStatusEvents.Start);
1821
1821
  runtime.lastRequest = Date.now();
1822
1822
  return result;
@@ -2028,7 +2028,12 @@ getRpcRequestHandler_fn = function(snapId) {
2028
2028
  { origin, handler: handlerType, request }
2029
2029
  );
2030
2030
  try {
2031
- const result = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _executeWithTimeout, executeWithTimeout_fn).call(this, handleRpcRequestPromise, timer);
2031
+ const result = await _chunkXE5IWVNVjs.withTimeout.call(void 0, handleRpcRequestPromise, timer);
2032
+ if (result === _chunkXE5IWVNVjs.hasTimedOut) {
2033
+ throw new Error(
2034
+ `${snapId} failed to respond to the request in time.`
2035
+ );
2036
+ }
2032
2037
  await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _assertSnapRpcRequestResult, assertSnapRpcRequestResult_fn).call(this, snapId, handlerType, result);
2033
2038
  return _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _transformSnapRpcRequestResult, transformSnapRpcRequestResult_fn).call(this, snapId, handlerType, result);
2034
2039
  } catch (error) {
@@ -2111,14 +2116,6 @@ assertSnapRpcRequestResult_fn = async function(snapId, handlerType, result) {
2111
2116
  break;
2112
2117
  }
2113
2118
  };
2114
- _executeWithTimeout = new WeakSet();
2115
- executeWithTimeout_fn = async function(promise, timer) {
2116
- const result = await _chunkXE5IWVNVjs.withTimeout.call(void 0, promise, timer ?? this.maxRequestTime);
2117
- if (result === _chunkXE5IWVNVjs.hasTimedOut) {
2118
- throw new Error("The request timed out.");
2119
- }
2120
- return result;
2121
- };
2122
2119
  _recordSnapRpcRequestStart = new WeakSet();
2123
2120
  recordSnapRpcRequestStart_fn = function(snapId, requestId, timer) {
2124
2121
  const runtime = _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getRuntimeExpect, getRuntimeExpect_fn).call(this, snapId);
@@ -2304,4 +2301,4 @@ callLifecycleHook_fn = async function(snapId, handler) {
2304
2301
 
2305
2302
 
2306
2303
  exports.controllerName = controllerName; exports.SNAP_APPROVAL_INSTALL = SNAP_APPROVAL_INSTALL; exports.SNAP_APPROVAL_UPDATE = SNAP_APPROVAL_UPDATE; exports.SNAP_APPROVAL_RESULT = SNAP_APPROVAL_RESULT; exports.SnapController = SnapController;
2307
- //# sourceMappingURL=chunk-ZAMIT33L.js.map
2304
+ //# sourceMappingURL=chunk-APQVOL5T.js.map