@metamask/snaps-controllers 8.4.0 → 9.1.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/dist/chunk-3T6W5VI2.mjs +100 -0
  3. package/dist/chunk-3T6W5VI2.mjs.map +1 -0
  4. package/dist/{chunk-YIQM6ZKA.mjs → chunk-4M2FX2AT.mjs} +9 -2
  5. package/dist/{chunk-YIQM6ZKA.mjs.map → chunk-4M2FX2AT.mjs.map} +1 -1
  6. package/dist/chunk-6ERB63FH.js +58 -0
  7. package/dist/chunk-6ERB63FH.js.map +1 -0
  8. package/dist/{chunk-LLA2BJYO.js → chunk-BUHS4M6F.js} +7 -7
  9. package/dist/chunk-CIFVYFJW.mjs +58 -0
  10. package/dist/chunk-CIFVYFJW.mjs.map +1 -0
  11. package/dist/chunk-H7TB7I6Z.js +100 -0
  12. package/dist/chunk-H7TB7I6Z.js.map +1 -0
  13. package/dist/{chunk-5YBORD3A.js → chunk-JQ54YYLU.js} +9 -2
  14. package/dist/chunk-JQ54YYLU.js.map +1 -0
  15. package/dist/{chunk-TSPPQQHW.mjs → chunk-RVWBSSZM.mjs} +7 -4
  16. package/dist/chunk-RVWBSSZM.mjs.map +1 -0
  17. package/dist/{chunk-TMJA2PSY.mjs → chunk-WP3DAIFM.mjs} +2 -2
  18. package/dist/{chunk-IKD6PUV7.js → chunk-ZBSBCWWM.js} +7 -4
  19. package/dist/chunk-ZBSBCWWM.js.map +1 -0
  20. package/dist/cronjob/CronjobController.js +5 -5
  21. package/dist/cronjob/CronjobController.mjs +5 -5
  22. package/dist/cronjob/index.js +5 -5
  23. package/dist/cronjob/index.mjs +5 -5
  24. package/dist/index.js +6 -6
  25. package/dist/index.mjs +5 -5
  26. package/dist/interface/SnapInterfaceController.js +3 -3
  27. package/dist/interface/SnapInterfaceController.mjs +2 -2
  28. package/dist/interface/index.js +3 -3
  29. package/dist/interface/index.mjs +2 -2
  30. package/dist/interface/utils.js +2 -2
  31. package/dist/interface/utils.mjs +1 -1
  32. package/dist/node.js +6 -6
  33. package/dist/node.mjs +5 -5
  34. package/dist/react-native.js +6 -6
  35. package/dist/react-native.mjs +5 -5
  36. package/dist/services/browser.js +2 -2
  37. package/dist/services/browser.mjs +1 -1
  38. package/dist/services/index.js +2 -2
  39. package/dist/services/index.mjs +1 -1
  40. package/dist/services/node-js/NodeProcessExecutionService.js +1 -1
  41. package/dist/services/node-js/NodeProcessExecutionService.mjs +1 -1
  42. package/dist/services/node-js/NodeThreadExecutionService.js +1 -1
  43. package/dist/services/node-js/NodeThreadExecutionService.mjs +1 -1
  44. package/dist/services/node-js/index.js +1 -1
  45. package/dist/services/node-js/index.mjs +1 -1
  46. package/dist/services/node.js +2 -2
  47. package/dist/services/node.mjs +1 -1
  48. package/dist/services/offscreen/OffscreenExecutionService.js +2 -2
  49. package/dist/services/offscreen/OffscreenExecutionService.mjs +1 -1
  50. package/dist/services/offscreen/index.js +2 -2
  51. package/dist/services/offscreen/index.mjs +1 -1
  52. package/dist/services/react-native.js +2 -2
  53. package/dist/services/react-native.mjs +1 -1
  54. package/dist/snaps/SnapController.js +3 -3
  55. package/dist/snaps/SnapController.mjs +2 -2
  56. package/dist/snaps/constants.js +4 -2
  57. package/dist/snaps/constants.mjs +5 -3
  58. package/dist/snaps/index.js +3 -3
  59. package/dist/snaps/index.mjs +2 -2
  60. package/dist/tsconfig.build.tsbuildinfo +1 -1
  61. package/dist/types/interface/utils.d.ts +2 -3
  62. package/dist/types/services/offscreen/OffscreenExecutionService.d.ts +8 -9
  63. package/dist/types/snaps/constants.d.ts +6 -0
  64. package/package.json +11 -11
  65. package/dist/chunk-3OJFF5CK.mjs +0 -72
  66. package/dist/chunk-3OJFF5CK.mjs.map +0 -1
  67. package/dist/chunk-5YBORD3A.js.map +0 -1
  68. package/dist/chunk-HK4OAMJT.js +0 -72
  69. package/dist/chunk-HK4OAMJT.js.map +0 -1
  70. package/dist/chunk-IKD6PUV7.js.map +0 -1
  71. package/dist/chunk-TII2PO6O.js +0 -100
  72. package/dist/chunk-TII2PO6O.js.map +0 -1
  73. package/dist/chunk-TSPPQQHW.mjs.map +0 -1
  74. package/dist/chunk-VSDMYMJK.mjs +0 -100
  75. package/dist/chunk-VSDMYMJK.mjs.map +0 -1
  76. /package/dist/{chunk-LLA2BJYO.js.map → chunk-BUHS4M6F.js.map} +0 -0
  77. /package/dist/{chunk-TMJA2PSY.mjs.map → chunk-WP3DAIFM.mjs.map} +0 -0
@@ -20,11 +20,10 @@ export declare function assertNameIsUnique(state: InterfaceState, name: string):
20
20
  * Construct the interface state for a given component tree.
21
21
  *
22
22
  * @param oldState - The previous state.
23
- * @param component - The UI component to construct state from.
24
- * @param newState - The state that is being constructed.
23
+ * @param rootComponent - The UI component to construct state from.
25
24
  * @returns The interface state of the passed component.
26
25
  */
27
- export declare function constructState(oldState: InterfaceState, component: JSXElement, newState?: InterfaceState): InterfaceState;
26
+ export declare function constructState(oldState: InterfaceState, rootComponent: JSXElement): InterfaceState;
28
27
  /**
29
28
  * Validate a JSON blob to be used as the interface context.
30
29
  *
@@ -1,29 +1,28 @@
1
1
  import type { ExecutionServiceArgs } from '../AbstractExecutionService';
2
2
  import { ProxyExecutionService } from '../proxy/ProxyExecutionService';
3
3
  declare type OffscreenExecutionEnvironmentServiceArgs = {
4
- documentUrl: URL;
4
+ offscreenPromise: Promise<unknown>;
5
5
  } & ExecutionServiceArgs;
6
6
  export declare class OffscreenExecutionService extends ProxyExecutionService {
7
7
  #private;
8
- readonly documentUrl: URL;
9
8
  /**
10
9
  * Create a new offscreen execution service.
11
10
  *
12
11
  * @param args - The constructor arguments.
13
- * @param args.documentUrl - The URL of the offscreen document to use as the
14
- * execution environment. This must be a URL relative to the location where
15
- * this is called. This cannot be a public (http(s)) URL.
16
12
  * @param args.messenger - The messenger to use for communication with the
17
13
  * `SnapController`.
18
14
  * @param args.setupSnapProvider - The function to use to set up the snap
19
15
  * provider.
16
+ * @param args.offscreenPromise - A promise that resolves when the offscreen
17
+ * environment is ready.
20
18
  */
21
- constructor({ documentUrl, messenger, setupSnapProvider, }: OffscreenExecutionEnvironmentServiceArgs);
19
+ constructor({ messenger, setupSnapProvider, offscreenPromise, }: OffscreenExecutionEnvironmentServiceArgs);
22
20
  /**
23
- * Create a new stream for the specified job. This wraps the runtime stream
24
- * in a stream specific to the job.
21
+ * Create a new stream for the given job ID. This will wait for the offscreen
22
+ * environment to be ready before creating the stream.
25
23
  *
26
- * @param jobId - The job ID.
24
+ * @param jobId - The job ID to create a stream for.
25
+ * @returns The stream for the given job ID.
27
26
  */
28
27
  protected initEnvStream(jobId: string): Promise<{
29
28
  worker: string;
@@ -1 +1,7 @@
1
1
  export declare const ALLOWED_PERMISSIONS: readonly string[];
2
+ export declare const LEGACY_ENCRYPTION_KEY_DERIVATION_OPTIONS: {
3
+ algorithm: "PBKDF2";
4
+ params: {
5
+ iterations: number;
6
+ };
7
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/snaps-controllers",
3
- "version": "8.4.0",
3
+ "version": "9.1.0",
4
4
  "description": "Controllers for MetaMask Snaps.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -53,19 +53,19 @@
53
53
  "build:ci": "tsup --clean"
54
54
  },
55
55
  "dependencies": {
56
- "@metamask/approval-controller": "^6.0.2",
57
- "@metamask/base-controller": "^5.0.2",
58
- "@metamask/json-rpc-engine": "^8.0.1",
59
- "@metamask/json-rpc-middleware-stream": "^7.0.1",
56
+ "@metamask/approval-controller": "^7.0.0",
57
+ "@metamask/base-controller": "^6.0.0",
58
+ "@metamask/json-rpc-engine": "^9.0.0",
59
+ "@metamask/json-rpc-middleware-stream": "^8.0.0",
60
60
  "@metamask/object-multiplex": "^2.0.0",
61
- "@metamask/permission-controller": "^9.0.2",
62
- "@metamask/phishing-controller": "^9.0.1",
61
+ "@metamask/permission-controller": "^10.0.0",
62
+ "@metamask/phishing-controller": "^10.0.0",
63
63
  "@metamask/post-message-stream": "^8.1.0",
64
64
  "@metamask/rpc-errors": "^6.2.1",
65
65
  "@metamask/snaps-registry": "^3.1.0",
66
- "@metamask/snaps-rpc-methods": "^9.1.2",
67
- "@metamask/snaps-sdk": "^4.4.2",
68
- "@metamask/snaps-utils": "^7.5.0",
66
+ "@metamask/snaps-rpc-methods": "^9.1.4",
67
+ "@metamask/snaps-sdk": "^6.0.0",
68
+ "@metamask/snaps-utils": "^7.7.0",
69
69
  "@metamask/utils": "^8.3.0",
70
70
  "@xstate/fsm": "^2.0.0",
71
71
  "browserify-zlib": "^0.2.0",
@@ -138,7 +138,7 @@
138
138
  "webdriverio": "^8.19.0"
139
139
  },
140
140
  "peerDependencies": {
141
- "@metamask/snaps-execution-environments": "^6.3.0"
141
+ "@metamask/snaps-execution-environments": "^6.5.0"
142
142
  },
143
143
  "peerDependenciesMeta": {
144
144
  "@metamask/snaps-execution-environments": {
@@ -1,72 +0,0 @@
1
- import {
2
- ProxyExecutionService
3
- } from "./chunk-3A72M4GC.mjs";
4
- import {
5
- __privateAdd,
6
- __privateMethod
7
- } from "./chunk-YRZVIDCF.mjs";
8
-
9
- // src/services/offscreen/OffscreenExecutionService.ts
10
- import { BrowserRuntimePostMessageStream } from "@metamask/post-message-stream";
11
- var _createDocument, createDocument_fn;
12
- var OffscreenExecutionService = class extends ProxyExecutionService {
13
- /**
14
- * Create a new offscreen execution service.
15
- *
16
- * @param args - The constructor arguments.
17
- * @param args.documentUrl - The URL of the offscreen document to use as the
18
- * execution environment. This must be a URL relative to the location where
19
- * this is called. This cannot be a public (http(s)) URL.
20
- * @param args.messenger - The messenger to use for communication with the
21
- * `SnapController`.
22
- * @param args.setupSnapProvider - The function to use to set up the snap
23
- * provider.
24
- */
25
- constructor({
26
- documentUrl,
27
- messenger,
28
- setupSnapProvider
29
- }) {
30
- super({
31
- messenger,
32
- setupSnapProvider,
33
- stream: new BrowserRuntimePostMessageStream({
34
- name: "parent",
35
- target: "child"
36
- })
37
- });
38
- /**
39
- * Creates the offscreen document to be used as the execution environment.
40
- *
41
- * If the document already exists, this does nothing.
42
- */
43
- __privateAdd(this, _createDocument);
44
- this.documentUrl = documentUrl;
45
- }
46
- /**
47
- * Create a new stream for the specified job. This wraps the runtime stream
48
- * in a stream specific to the job.
49
- *
50
- * @param jobId - The job ID.
51
- */
52
- async initEnvStream(jobId) {
53
- await __privateMethod(this, _createDocument, createDocument_fn).call(this);
54
- return super.initEnvStream(jobId);
55
- }
56
- };
57
- _createDocument = new WeakSet();
58
- createDocument_fn = async function() {
59
- if (await chrome.offscreen.hasDocument()) {
60
- return;
61
- }
62
- await chrome.offscreen.createDocument({
63
- justification: "MetaMask Snaps Execution Environment",
64
- reasons: ["IFRAME_SCRIPTING"],
65
- url: this.documentUrl.toString()
66
- });
67
- };
68
-
69
- export {
70
- OffscreenExecutionService
71
- };
72
- //# sourceMappingURL=chunk-3OJFF5CK.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/services/offscreen/OffscreenExecutionService.ts"],"sourcesContent":["import { BrowserRuntimePostMessageStream } from '@metamask/post-message-stream';\n\nimport type { ExecutionServiceArgs } from '../AbstractExecutionService';\nimport { ProxyExecutionService } from '../proxy/ProxyExecutionService';\n\ntype OffscreenExecutionEnvironmentServiceArgs = {\n documentUrl: URL;\n} & ExecutionServiceArgs;\n\nexport class OffscreenExecutionService extends ProxyExecutionService {\n public readonly documentUrl: URL;\n\n /**\n * Create a new offscreen execution service.\n *\n * @param args - The constructor arguments.\n * @param args.documentUrl - The URL of the offscreen document to use as the\n * execution environment. This must be a URL relative to the location where\n * this is called. This cannot be a public (http(s)) URL.\n * @param args.messenger - The messenger to use for communication with the\n * `SnapController`.\n * @param args.setupSnapProvider - The function to use to set up the snap\n * provider.\n */\n constructor({\n documentUrl,\n messenger,\n setupSnapProvider,\n }: OffscreenExecutionEnvironmentServiceArgs) {\n super({\n messenger,\n setupSnapProvider,\n stream: new BrowserRuntimePostMessageStream({\n name: 'parent',\n target: 'child',\n }),\n });\n\n this.documentUrl = documentUrl;\n }\n\n /**\n * Create a new stream for the specified job. This wraps the runtime stream\n * in a stream specific to the job.\n *\n * @param jobId - The job ID.\n */\n protected async initEnvStream(jobId: string) {\n // Lazily create the offscreen document.\n await this.#createDocument();\n\n return super.initEnvStream(jobId);\n }\n\n /**\n * Creates the offscreen document to be used as the execution environment.\n *\n * If the document already exists, this does nothing.\n */\n async #createDocument() {\n // Extensions can only have a single offscreen document.\n if (await chrome.offscreen.hasDocument()) {\n return;\n }\n\n await chrome.offscreen.createDocument({\n justification: 'MetaMask Snaps Execution Environment',\n reasons: ['IFRAME_SCRIPTING' as chrome.offscreen.Reason],\n url: this.documentUrl.toString(),\n });\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,uCAAuC;AAAhD;AASO,IAAM,4BAAN,cAAwC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAenE,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA6C;AAC3C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,QAAQ,IAAI,gCAAgC;AAAA,QAC1C,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAuBH;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AArBJ,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAgB,cAAc,OAAe;AAE3C,UAAM,sBAAK,oCAAL;AAEN,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC;AAmBF;AAZQ;AAAA,oBAAe,iBAAG;AAEtB,MAAI,MAAM,OAAO,UAAU,YAAY,GAAG;AACxC;AAAA,EACF;AAEA,QAAM,OAAO,UAAU,eAAe;AAAA,IACpC,eAAe;AAAA,IACf,SAAS,CAAC,kBAA6C;AAAA,IACvD,KAAK,KAAK,YAAY,SAAS;AAAA,EACjC,CAAC;AACH;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/snaps/constants.ts"],"names":[],"mappings":";AAAA,SAAS,sBAAsB;AAGxB,IAAM,sBAAsB,OAAO,OAAO;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AACjB,CAAC","sourcesContent":["import { SnapEndowments } from '@metamask/snaps-rpc-methods';\n\n// These permissions are allowed without being on the allowlist.\nexport const ALLOWED_PERMISSIONS = Object.freeze([\n 'snap_dialog',\n 'snap_manageState',\n 'snap_notify',\n 'snap_getLocale',\n SnapEndowments.Cronjob,\n SnapEndowments.HomePage,\n SnapEndowments.LifecycleHooks,\n SnapEndowments.EthereumProvider,\n SnapEndowments.TransactionInsight,\n SnapEndowments.SignatureInsight,\n]);\n"]}
@@ -1,72 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkKH72WRHRjs = require('./chunk-KH72WRHR.js');
4
-
5
-
6
-
7
- var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
8
-
9
- // src/services/offscreen/OffscreenExecutionService.ts
10
- var _postmessagestream = require('@metamask/post-message-stream');
11
- var _createDocument, createDocument_fn;
12
- var OffscreenExecutionService = class extends _chunkKH72WRHRjs.ProxyExecutionService {
13
- /**
14
- * Create a new offscreen execution service.
15
- *
16
- * @param args - The constructor arguments.
17
- * @param args.documentUrl - The URL of the offscreen document to use as the
18
- * execution environment. This must be a URL relative to the location where
19
- * this is called. This cannot be a public (http(s)) URL.
20
- * @param args.messenger - The messenger to use for communication with the
21
- * `SnapController`.
22
- * @param args.setupSnapProvider - The function to use to set up the snap
23
- * provider.
24
- */
25
- constructor({
26
- documentUrl,
27
- messenger,
28
- setupSnapProvider
29
- }) {
30
- super({
31
- messenger,
32
- setupSnapProvider,
33
- stream: new (0, _postmessagestream.BrowserRuntimePostMessageStream)({
34
- name: "parent",
35
- target: "child"
36
- })
37
- });
38
- /**
39
- * Creates the offscreen document to be used as the execution environment.
40
- *
41
- * If the document already exists, this does nothing.
42
- */
43
- _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _createDocument);
44
- this.documentUrl = documentUrl;
45
- }
46
- /**
47
- * Create a new stream for the specified job. This wraps the runtime stream
48
- * in a stream specific to the job.
49
- *
50
- * @param jobId - The job ID.
51
- */
52
- async initEnvStream(jobId) {
53
- await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _createDocument, createDocument_fn).call(this);
54
- return super.initEnvStream(jobId);
55
- }
56
- };
57
- _createDocument = new WeakSet();
58
- createDocument_fn = async function() {
59
- if (await chrome.offscreen.hasDocument()) {
60
- return;
61
- }
62
- await chrome.offscreen.createDocument({
63
- justification: "MetaMask Snaps Execution Environment",
64
- reasons: ["IFRAME_SCRIPTING"],
65
- url: this.documentUrl.toString()
66
- });
67
- };
68
-
69
-
70
-
71
- exports.OffscreenExecutionService = OffscreenExecutionService;
72
- //# sourceMappingURL=chunk-HK4OAMJT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/services/offscreen/OffscreenExecutionService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,SAAS,uCAAuC;AAAhD;AASO,IAAM,4BAAN,cAAwC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAenE,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA6C;AAC3C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,QAAQ,IAAI,gCAAgC;AAAA,QAC1C,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAuBH;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AArBJ,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAgB,cAAc,OAAe;AAE3C,UAAM,sBAAK,oCAAL;AAEN,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC;AAmBF;AAZQ;AAAA,oBAAe,iBAAG;AAEtB,MAAI,MAAM,OAAO,UAAU,YAAY,GAAG;AACxC;AAAA,EACF;AAEA,QAAM,OAAO,UAAU,eAAe;AAAA,IACpC,eAAe;AAAA,IACf,SAAS,CAAC,kBAA6C;AAAA,IACvD,KAAK,KAAK,YAAY,SAAS;AAAA,EACjC,CAAC;AACH","sourcesContent":["import { BrowserRuntimePostMessageStream } from '@metamask/post-message-stream';\n\nimport type { ExecutionServiceArgs } from '../AbstractExecutionService';\nimport { ProxyExecutionService } from '../proxy/ProxyExecutionService';\n\ntype OffscreenExecutionEnvironmentServiceArgs = {\n documentUrl: URL;\n} & ExecutionServiceArgs;\n\nexport class OffscreenExecutionService extends ProxyExecutionService {\n public readonly documentUrl: URL;\n\n /**\n * Create a new offscreen execution service.\n *\n * @param args - The constructor arguments.\n * @param args.documentUrl - The URL of the offscreen document to use as the\n * execution environment. This must be a URL relative to the location where\n * this is called. This cannot be a public (http(s)) URL.\n * @param args.messenger - The messenger to use for communication with the\n * `SnapController`.\n * @param args.setupSnapProvider - The function to use to set up the snap\n * provider.\n */\n constructor({\n documentUrl,\n messenger,\n setupSnapProvider,\n }: OffscreenExecutionEnvironmentServiceArgs) {\n super({\n messenger,\n setupSnapProvider,\n stream: new BrowserRuntimePostMessageStream({\n name: 'parent',\n target: 'child',\n }),\n });\n\n this.documentUrl = documentUrl;\n }\n\n /**\n * Create a new stream for the specified job. This wraps the runtime stream\n * in a stream specific to the job.\n *\n * @param jobId - The job ID.\n */\n protected async initEnvStream(jobId: string) {\n // Lazily create the offscreen document.\n await this.#createDocument();\n\n return super.initEnvStream(jobId);\n }\n\n /**\n * Creates the offscreen document to be used as the execution environment.\n *\n * If the document already exists, this does nothing.\n */\n async #createDocument() {\n // Extensions can only have a single offscreen document.\n if (await chrome.offscreen.hasDocument()) {\n return;\n }\n\n await chrome.offscreen.createDocument({\n justification: 'MetaMask Snaps Execution Environment',\n reasons: ['IFRAME_SCRIPTING' as chrome.offscreen.Reason],\n url: this.documentUrl.toString(),\n });\n }\n}\n"]}