@metamask/snaps-controllers 6.0.3 → 7.0.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 (114) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/dist/{chunk-SXF7KAMU.mjs → chunk-25LS4KZK.mjs} +2 -2
  3. package/dist/{chunk-YDVUJQ2S.mjs → chunk-2KCUVQFS.mjs} +2 -2
  4. package/dist/{chunk-VOAJRWUB.js → chunk-3ZC4LB7T.js} +3 -3
  5. package/dist/{chunk-B67RDBZ4.mjs → chunk-42ODFZSH.mjs} +4 -4
  6. package/dist/{chunk-VJZI4VSJ.js → chunk-54TYYPAN.js} +2 -2
  7. package/dist/chunk-54TYYPAN.js.map +1 -0
  8. package/dist/{chunk-TXR2WWIP.js → chunk-63GNCRER.js} +3 -3
  9. package/dist/{chunk-E7627MMH.mjs → chunk-75VM3O4K.mjs} +2 -2
  10. package/dist/{chunk-AELC3WCV.mjs → chunk-BJOQRBH2.mjs} +2 -2
  11. package/dist/chunk-HP6S5IOB.js +1 -0
  12. package/dist/chunk-HP6S5IOB.js.map +1 -0
  13. package/dist/{chunk-APQVOL5T.js → chunk-MIYZN7HG.js} +139 -18
  14. package/dist/chunk-MIYZN7HG.js.map +1 -0
  15. package/dist/{chunk-WFADRL7I.js → chunk-N7WIJNHY.js} +3 -3
  16. package/dist/{chunk-CFTCANAK.js → chunk-NSLYI2LS.js} +3 -3
  17. package/dist/chunk-NZOUFWUN.mjs +1 -0
  18. package/dist/chunk-NZOUFWUN.mjs.map +1 -0
  19. package/dist/{chunk-7WOG63YY.js → chunk-PT22IXNS.js} +3 -3
  20. package/dist/{chunk-KEEKVE7E.mjs → chunk-Q4I5QTVC.mjs} +2 -2
  21. package/dist/{chunk-BAJUEBP6.mjs → chunk-SCERVW3B.mjs} +2 -2
  22. package/dist/{chunk-AXXQZJBW.mjs → chunk-TIP3Q7KZ.mjs} +140 -19
  23. package/dist/chunk-TIP3Q7KZ.mjs.map +1 -0
  24. package/dist/{chunk-6HI7J27U.js → chunk-WQYMF7QP.js} +3 -3
  25. package/dist/{chunk-XBGQ5PKQ.mjs → chunk-WVGK5B5P.mjs} +2 -2
  26. package/dist/{chunk-VJZI4VSJ.js.map → chunk-WVGK5B5P.mjs.map} +1 -1
  27. package/dist/{chunk-E7FBXFXJ.mjs → chunk-Y5KX5ICF.mjs} +2 -2
  28. package/dist/{chunk-MXCU2GFU.js → chunk-YVNRYLOC.js} +3 -3
  29. package/dist/{chunk-LAVQZHSH.js → chunk-Z6SOB3SY.js} +3 -3
  30. package/dist/cronjob/CronjobController.js +11 -11
  31. package/dist/cronjob/CronjobController.mjs +11 -11
  32. package/dist/cronjob/index.js +11 -11
  33. package/dist/cronjob/index.mjs +11 -11
  34. package/dist/index.js +15 -15
  35. package/dist/index.mjs +17 -17
  36. package/dist/node.js +17 -17
  37. package/dist/node.mjs +19 -19
  38. package/dist/react-native.js +16 -16
  39. package/dist/react-native.mjs +18 -18
  40. package/dist/services/AbstractExecutionService.js +2 -2
  41. package/dist/services/AbstractExecutionService.mjs +1 -1
  42. package/dist/services/browser.js +8 -8
  43. package/dist/services/browser.mjs +7 -7
  44. package/dist/services/iframe/IframeExecutionService.js +3 -3
  45. package/dist/services/iframe/IframeExecutionService.mjs +2 -2
  46. package/dist/services/iframe/index.js +3 -3
  47. package/dist/services/iframe/index.mjs +2 -2
  48. package/dist/services/index.js +7 -7
  49. package/dist/services/index.mjs +6 -6
  50. package/dist/services/node-js/NodeProcessExecutionService.js +8 -8
  51. package/dist/services/node-js/NodeProcessExecutionService.mjs +7 -7
  52. package/dist/services/node-js/NodeThreadExecutionService.js +8 -8
  53. package/dist/services/node-js/NodeThreadExecutionService.mjs +7 -7
  54. package/dist/services/node-js/index.js +9 -9
  55. package/dist/services/node-js/index.mjs +8 -8
  56. package/dist/services/node.js +9 -9
  57. package/dist/services/node.mjs +8 -8
  58. package/dist/services/offscreen/OffscreenExecutionService.js +4 -4
  59. package/dist/services/offscreen/OffscreenExecutionService.mjs +3 -3
  60. package/dist/services/offscreen/index.js +4 -4
  61. package/dist/services/offscreen/index.mjs +3 -3
  62. package/dist/services/proxy/ProxyExecutionService.js +3 -3
  63. package/dist/services/proxy/ProxyExecutionService.mjs +2 -2
  64. package/dist/services/react-native.js +8 -8
  65. package/dist/services/react-native.mjs +7 -7
  66. package/dist/services/webview/WebViewExecutionService.js +4 -4
  67. package/dist/services/webview/WebViewExecutionService.mjs +3 -3
  68. package/dist/services/webview/index.js +4 -4
  69. package/dist/services/webview/index.mjs +3 -3
  70. package/dist/services/webworker/WebWorkerExecutionService.js +3 -3
  71. package/dist/services/webworker/WebWorkerExecutionService.mjs +2 -2
  72. package/dist/services/webworker/index.js +3 -3
  73. package/dist/services/webworker/index.mjs +2 -2
  74. package/dist/snaps/SnapController.js +6 -6
  75. package/dist/snaps/SnapController.mjs +5 -5
  76. package/dist/snaps/index.js +9 -9
  77. package/dist/snaps/index.mjs +11 -11
  78. package/dist/snaps/location/index.js +4 -4
  79. package/dist/snaps/location/index.mjs +4 -4
  80. package/dist/snaps/location/location.js +3 -3
  81. package/dist/snaps/location/location.mjs +2 -2
  82. package/dist/tsconfig.build.tsbuildinfo +1 -1
  83. package/dist/types/encryptor.js +2 -0
  84. package/dist/types/encryptor.js.map +1 -0
  85. package/dist/types/encryptor.mjs +2 -0
  86. package/dist/types/encryptor.mjs.map +1 -0
  87. package/dist/types/index.js +2 -0
  88. package/dist/types/index.js.map +1 -0
  89. package/dist/types/index.mjs +2 -0
  90. package/dist/types/index.mjs.map +1 -0
  91. package/dist/types/snaps/SnapController.d.ts +18 -3
  92. package/dist/types/types/encryptor.d.ts +98 -0
  93. package/dist/types/types/index.d.ts +1 -0
  94. package/dist/types/utils.d.ts +31 -55
  95. package/package.json +13 -12
  96. package/dist/chunk-APQVOL5T.js.map +0 -1
  97. package/dist/chunk-AXXQZJBW.mjs.map +0 -1
  98. package/dist/chunk-XBGQ5PKQ.mjs.map +0 -1
  99. /package/dist/{chunk-SXF7KAMU.mjs.map → chunk-25LS4KZK.mjs.map} +0 -0
  100. /package/dist/{chunk-YDVUJQ2S.mjs.map → chunk-2KCUVQFS.mjs.map} +0 -0
  101. /package/dist/{chunk-VOAJRWUB.js.map → chunk-3ZC4LB7T.js.map} +0 -0
  102. /package/dist/{chunk-B67RDBZ4.mjs.map → chunk-42ODFZSH.mjs.map} +0 -0
  103. /package/dist/{chunk-TXR2WWIP.js.map → chunk-63GNCRER.js.map} +0 -0
  104. /package/dist/{chunk-E7627MMH.mjs.map → chunk-75VM3O4K.mjs.map} +0 -0
  105. /package/dist/{chunk-AELC3WCV.mjs.map → chunk-BJOQRBH2.mjs.map} +0 -0
  106. /package/dist/{chunk-WFADRL7I.js.map → chunk-N7WIJNHY.js.map} +0 -0
  107. /package/dist/{chunk-CFTCANAK.js.map → chunk-NSLYI2LS.js.map} +0 -0
  108. /package/dist/{chunk-7WOG63YY.js.map → chunk-PT22IXNS.js.map} +0 -0
  109. /package/dist/{chunk-KEEKVE7E.mjs.map → chunk-Q4I5QTVC.mjs.map} +0 -0
  110. /package/dist/{chunk-BAJUEBP6.mjs.map → chunk-SCERVW3B.mjs.map} +0 -0
  111. /package/dist/{chunk-6HI7J27U.js.map → chunk-WQYMF7QP.js.map} +0 -0
  112. /package/dist/{chunk-E7FBXFXJ.mjs.map → chunk-Y5KX5ICF.mjs.map} +0 -0
  113. /package/dist/{chunk-MXCU2GFU.js.map → chunk-YVNRYLOC.js.map} +0 -0
  114. /package/dist/{chunk-LAVQZHSH.js.map → chunk-Z6SOB3SY.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [7.0.0]
10
+ ### Changed
11
+ - **BREAKING:** Refactor encryption to enable caching ([#2316](https://github.com/MetaMask/snaps/pull/2316))
12
+ - New required constructor arguments `encryptor` and `getMnemonic` have been added.
13
+ - Include `initialConnections` in approval `requestState` ([#2322](https://github.com/MetaMask/snaps/pull/2322))
14
+
15
+ ### Fixed
16
+ - Delete unencrypted state when uninstalling a Snap ([#2311](https://github.com/MetaMask/snaps/pull/2311))
17
+
18
+ ## [6.0.4]
19
+ ### Changed
20
+ - Bump MetaMask dependencies ([#2270](https://github.com/MetaMask/snaps/pull/2270))
21
+
9
22
  ## [6.0.3]
10
23
  ### Changed
11
24
  - Handle unavailable registry more gracefully ([#2256](https://github.com/MetaMask/snaps/pull/2256))
@@ -217,7 +230,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
217
230
  - The version of the package no longer needs to match the version of all other
218
231
  MetaMask Snaps packages.
219
232
 
220
- [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.3...HEAD
233
+ [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@7.0.0...HEAD
234
+ [7.0.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.4...@metamask/snaps-controllers@7.0.0
235
+ [6.0.4]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.3...@metamask/snaps-controllers@6.0.4
221
236
  [6.0.3]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.2...@metamask/snaps-controllers@6.0.3
222
237
  [6.0.2]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.1...@metamask/snaps-controllers@6.0.2
223
238
  [6.0.1]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@6.0.0...@metamask/snaps-controllers@6.0.1
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AbstractExecutionService
3
- } from "./chunk-XBGQ5PKQ.mjs";
3
+ } from "./chunk-WVGK5B5P.mjs";
4
4
  import {
5
5
  __require
6
6
  } from "./chunk-YRZVIDCF.mjs";
@@ -35,4 +35,4 @@ var NodeProcessExecutionService = class extends AbstractExecutionService {
35
35
  export {
36
36
  NodeProcessExecutionService
37
37
  };
38
- //# sourceMappingURL=chunk-SXF7KAMU.mjs.map
38
+ //# sourceMappingURL=chunk-25LS4KZK.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ProxyExecutionService
3
- } from "./chunk-KEEKVE7E.mjs";
3
+ } from "./chunk-Q4I5QTVC.mjs";
4
4
  import {
5
5
  __privateAdd,
6
6
  __privateMethod
@@ -69,4 +69,4 @@ createDocument_fn = async function() {
69
69
  export {
70
70
  OffscreenExecutionService
71
71
  };
72
- //# sourceMappingURL=chunk-YDVUJQ2S.mjs.map
72
+ //# sourceMappingURL=chunk-2KCUVQFS.mjs.map
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkVJZI4VSJjs = require('./chunk-VJZI4VSJ.js');
3
+ var _chunk54TYYPANjs = require('./chunk-54TYYPAN.js');
4
4
 
5
5
 
6
6
  var _chunk7Y6P5FRNjs = require('./chunk-7Y6P5FRN.js');
@@ -17,7 +17,7 @@ var _utils = require('@metamask/utils');
17
17
  var _nanoid = require('nanoid');
18
18
  var WORKER_POOL_ID = "snaps-worker-pool";
19
19
  var _documentUrl, _runtimeStream;
20
- var WebWorkerExecutionService = class extends _chunkVJZI4VSJjs.AbstractExecutionService {
20
+ var WebWorkerExecutionService = class extends _chunk54TYYPANjs.AbstractExecutionService {
21
21
  /**
22
22
  * Create a new webworker execution service.
23
23
  *
@@ -102,4 +102,4 @@ _runtimeStream = new WeakMap();
102
102
 
103
103
 
104
104
  exports.WORKER_POOL_ID = WORKER_POOL_ID; exports.WebWorkerExecutionService = WebWorkerExecutionService;
105
- //# sourceMappingURL=chunk-VOAJRWUB.js.map
105
+ //# sourceMappingURL=chunk-3ZC4LB7T.js.map
@@ -1,9 +1,9 @@
1
- import {
2
- NpmLocation
3
- } from "./chunk-WKQRCGUW.mjs";
4
1
  import {
5
2
  LocalLocation
6
3
  } from "./chunk-B3UTLNYS.mjs";
4
+ import {
5
+ NpmLocation
6
+ } from "./chunk-WKQRCGUW.mjs";
7
7
  import {
8
8
  HttpLocation
9
9
  } from "./chunk-6GMWL4JR.mjs";
@@ -37,4 +37,4 @@ function detectSnapLocation(location, opts) {
37
37
  export {
38
38
  detectSnapLocation
39
39
  };
40
- //# sourceMappingURL=chunk-B67RDBZ4.mjs.map
40
+ //# sourceMappingURL=chunk-42ODFZSH.mjs.map
@@ -14,6 +14,7 @@ var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
14
14
 
15
15
  // src/services/AbstractExecutionService.ts
16
16
  var _jsonrpcengine = require('@metamask/json-rpc-engine');
17
+ var _jsonrpcmiddlewarestream = require('@metamask/json-rpc-middleware-stream');
17
18
  var _objectmultiplex = require('@metamask/object-multiplex'); var _objectmultiplex2 = _interopRequireDefault(_objectmultiplex);
18
19
  var _rpcerrors = require('@metamask/rpc-errors');
19
20
  var _snapsutils = require('@metamask/snaps-utils');
@@ -24,7 +25,6 @@ var _snapsutils = require('@metamask/snaps-utils');
24
25
 
25
26
 
26
27
  var _utils = require('@metamask/utils');
27
- var _jsonrpcmiddlewarestream = require('json-rpc-middleware-stream');
28
28
  var _nanoid = require('nanoid');
29
29
  var _readablestream = require('readable-stream');
30
30
  var controllerName = "ExecutionService";
@@ -362,4 +362,4 @@ function setupMultiplex(connectionStream, streamName) {
362
362
 
363
363
 
364
364
  exports.AbstractExecutionService = AbstractExecutionService; exports.setupMultiplex = setupMultiplex;
365
- //# sourceMappingURL=chunk-VJZI4VSJ.js.map
365
+ //# sourceMappingURL=chunk-54TYYPAN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/AbstractExecutionService.ts"],"names":[],"mappings":"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","sourcesContent":["import { JsonRpcEngine } from '@metamask/json-rpc-engine';\nimport { createStreamMiddleware } from '@metamask/json-rpc-middleware-stream';\nimport ObjectMultiplex from '@metamask/object-multiplex';\nimport type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { JsonRpcError } from '@metamask/rpc-errors';\nimport type { SnapRpcHook, SnapRpcHookArgs } from '@metamask/snaps-utils';\nimport { SNAP_STREAM_NAMES, logError } from '@metamask/snaps-utils';\nimport type {\n Json,\n JsonRpcNotification,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport {\n Duration,\n assertIsJsonRpcRequest,\n inMilliseconds,\n isJsonRpcNotification,\n isObject,\n} from '@metamask/utils';\nimport { nanoid } from 'nanoid';\nimport { pipeline } from 'readable-stream';\nimport type { Duplex } from 'readable-stream';\n\nimport { log } from '../logging';\nimport { hasTimedOut, withTimeout } from '../utils';\nimport type {\n ExecutionService,\n ExecutionServiceMessenger,\n SnapErrorJson,\n SnapExecutionData,\n} from './ExecutionService';\n\nconst controllerName = 'ExecutionService';\n\nexport type SetupSnapProvider = (snapId: string, stream: Duplex) => void;\n\nexport type ExecutionServiceArgs = {\n setupSnapProvider: SetupSnapProvider;\n messenger: ExecutionServiceMessenger;\n pingTimeout?: number;\n terminationTimeout?: number;\n};\n\nexport type JobStreams = {\n command: Duplex;\n rpc: Duplex;\n _connection: BasePostMessageStream;\n};\n\nexport type Job<WorkerType> = {\n id: string;\n streams: JobStreams;\n rpcEngine: JsonRpcEngine;\n worker: WorkerType;\n};\n\nexport abstract class AbstractExecutionService<WorkerType>\n implements ExecutionService\n{\n #snapRpcHooks: Map<string, SnapRpcHook>;\n\n // Cannot be hash private yet because of tests.\n protected jobs: Map<string, Job<WorkerType>>;\n\n // Cannot be hash private yet because of tests.\n private readonly setupSnapProvider: SetupSnapProvider;\n\n #snapToJobMap: Map<string, string>;\n\n #jobToSnapMap: Map<string, string>;\n\n #messenger: ExecutionServiceMessenger;\n\n #pingTimeout: number;\n\n #terminationTimeout: number;\n\n constructor({\n setupSnapProvider,\n messenger,\n pingTimeout = inMilliseconds(2, Duration.Second),\n terminationTimeout = inMilliseconds(1, Duration.Second),\n }: ExecutionServiceArgs) {\n this.#snapRpcHooks = new Map();\n this.jobs = new Map();\n this.setupSnapProvider = setupSnapProvider;\n this.#snapToJobMap = new Map();\n this.#jobToSnapMap = new Map();\n this.#messenger = messenger;\n this.#pingTimeout = pingTimeout;\n this.#terminationTimeout = terminationTimeout;\n\n this.registerMessageHandlers();\n }\n\n /**\n * Constructor helper for registering the controller's messaging system\n * actions.\n */\n private registerMessageHandlers(): void {\n this.#messenger.registerActionHandler(\n `${controllerName}:handleRpcRequest`,\n async (snapId: string, options: SnapRpcHookArgs) =>\n this.handleRpcRequest(snapId, options),\n );\n\n this.#messenger.registerActionHandler(\n `${controllerName}:executeSnap`,\n async (snapData: SnapExecutionData) => this.executeSnap(snapData),\n );\n\n this.#messenger.registerActionHandler(\n `${controllerName}:terminateSnap`,\n async (snapId: string) => this.terminateSnap(snapId),\n );\n\n this.#messenger.registerActionHandler(\n `${controllerName}:terminateAllSnaps`,\n async () => this.terminateAllSnaps(),\n );\n }\n\n /**\n * Performs additional necessary work during job termination. **MUST** be\n * implemented by concrete implementations. See\n * {@link AbstractExecutionService.terminate} for details.\n *\n * @param job - The object corresponding to the job to be terminated.\n */\n protected abstract terminateJob(job: Job<WorkerType>): void;\n\n /**\n * Terminates the job with the specified ID and deletes all its associated\n * data. Any subsequent messages targeting the job will fail with an error.\n * Throws an error if the specified job does not exist, or if termination\n * fails unexpectedly.\n *\n * @param jobId - The id of the job to be terminated.\n */\n public async terminate(jobId: string): Promise<void> {\n const jobWrapper = this.jobs.get(jobId);\n if (!jobWrapper) {\n throw new Error(`Job with id \"${jobId}\" not found.`);\n }\n\n // Ping worker and tell it to run teardown, continue with termination if it takes too long\n const result = await withTimeout(\n this.command(jobId, {\n jsonrpc: '2.0',\n method: 'terminate',\n params: [],\n id: nanoid(),\n }),\n this.#terminationTimeout,\n );\n\n if (result === hasTimedOut || result !== 'OK') {\n // We tried to shutdown gracefully but failed. This probably means the Snap is in infinite loop and\n // hogging down the whole JS process.\n // TODO(ritave): It might be doing weird things such as posting a lot of setTimeouts. Add a test to ensure that this behaviour\n // doesn't leak into other workers. Especially important in IframeExecutionEnvironment since they all share the same\n // JS process.\n logError(`Job \"${jobId}\" failed to terminate gracefully.`, result);\n }\n\n Object.values(jobWrapper.streams).forEach((stream) => {\n try {\n !stream.destroyed && stream.destroy();\n stream.removeAllListeners();\n } catch (error) {\n logError('Error while destroying stream', error);\n }\n });\n\n this.terminateJob(jobWrapper);\n\n this.#removeSnapAndJobMapping(jobId);\n this.jobs.delete(jobId);\n log(`Job \"${jobId}\" terminated.`);\n }\n\n /**\n * Initiates a job for a snap.\n *\n * Depending on the execution environment, this may run forever if the Snap fails to start up properly, therefore any call to this function should be wrapped in a timeout.\n *\n * @returns Information regarding the created job.\n */\n protected async initJob(): Promise<Job<WorkerType>> {\n const jobId = nanoid();\n const { streams, worker } = await this.initStreams(jobId);\n const rpcEngine = new JsonRpcEngine();\n\n const jsonRpcConnection = createStreamMiddleware();\n\n pipeline(\n jsonRpcConnection.stream,\n streams.command,\n jsonRpcConnection.stream,\n (error) => {\n if (error) {\n logError(`Command stream failure.`, error);\n }\n },\n );\n\n rpcEngine.push(jsonRpcConnection.middleware);\n\n const envMetadata = {\n id: jobId,\n streams,\n rpcEngine,\n worker,\n };\n this.jobs.set(jobId, envMetadata);\n\n return envMetadata;\n }\n\n /**\n * Sets up the streams for an initiated job.\n *\n * Depending on the execution environment, this may run forever if the Snap fails to start up properly, therefore any call to this function should be wrapped in a timeout.\n *\n * @param jobId - The id of the job.\n * @returns The streams to communicate with the worker and the worker itself.\n */\n protected async initStreams(\n jobId: string,\n ): Promise<{ streams: JobStreams; worker: WorkerType }> {\n const { worker, stream: envStream } = await this.initEnvStream(jobId);\n const mux = setupMultiplex(envStream, `Job: \"${jobId}\"`);\n const commandStream = mux.createStream(SNAP_STREAM_NAMES.COMMAND);\n\n // Handle out-of-band errors, i.e. errors thrown from the snap outside of the req/res cycle.\n // Also keep track of outbound request/responses\n const notificationHandler = (\n message:\n | JsonRpcRequest\n | JsonRpcNotification<Json[] | Record<string, Json>>,\n ) => {\n if (!isJsonRpcNotification(message)) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const snapId = this.#jobToSnapMap.get(jobId)!;\n if (message.method === 'OutboundRequest') {\n this.#messenger.publish('ExecutionService:outboundRequest', snapId);\n } else if (message.method === 'OutboundResponse') {\n this.#messenger.publish('ExecutionService:outboundResponse', snapId);\n } else if (message.method === 'UnhandledError') {\n if (isObject(message.params) && message.params.error) {\n this.#messenger.publish(\n 'ExecutionService:unhandledError',\n snapId,\n message.params.error as SnapErrorJson,\n );\n commandStream.removeListener('data', notificationHandler);\n } else {\n logError(\n new Error(\n `Received malformed \"${message.method}\" command stream notification.`,\n ),\n );\n }\n } else {\n logError(\n new Error(\n `Received unexpected command stream notification \"${message.method}\".`,\n ),\n );\n }\n };\n\n commandStream.on('data', notificationHandler);\n const rpcStream = mux.createStream(SNAP_STREAM_NAMES.JSON_RPC);\n\n // Typecast: stream type mismatch\n return {\n streams: {\n command: commandStream,\n rpc: rpcStream,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _connection: envStream,\n },\n worker,\n };\n }\n\n /**\n * Abstract function implemented by implementing class that spins up a new worker for a job.\n *\n * Depending on the execution environment, this may run forever if the Snap fails to start up properly, therefore any call to this function should be wrapped in a timeout.\n */\n protected abstract initEnvStream(jobId: string): Promise<{\n worker: WorkerType;\n stream: BasePostMessageStream;\n }>;\n\n /**\n * Terminates the Snap with the specified ID. May throw an error if\n * termination unexpectedly fails, but will not fail if no job for the snap\n * with the specified ID is found.\n *\n * @param snapId - The ID of the snap to terminate.\n */\n async terminateSnap(snapId: string) {\n const jobId = this.#snapToJobMap.get(snapId);\n if (jobId) {\n await this.terminate(jobId);\n }\n }\n\n async terminateAllSnaps() {\n await Promise.all(\n [...this.jobs.keys()].map(async (jobId) => this.terminate(jobId)),\n );\n this.#snapRpcHooks.clear();\n }\n\n /**\n * Gets the RPC request handler for the given snap.\n *\n * @param snapId - The id of the Snap whose message handler to get.\n * @returns The RPC request handler for the snap.\n */\n private getRpcRequestHandler(snapId: string) {\n return this.#snapRpcHooks.get(snapId);\n }\n\n /**\n * Initializes and executes a snap, setting up the communication channels to the snap etc.\n *\n * Depending on the execution environment, this may run forever if the Snap fails to start up properly, therefore any call to this function should be wrapped in a timeout.\n *\n * @param snapData - Data needed for Snap execution.\n * @returns A string `OK` if execution succeeded.\n * @throws If the execution service returns an error.\n */\n async executeSnap(snapData: SnapExecutionData): Promise<string> {\n if (this.#snapToJobMap.has(snapData.snapId)) {\n throw new Error(`Snap \"${snapData.snapId}\" is already being executed.`);\n }\n\n // This may resolve even if the environment has failed to start up fully\n const job = await this.initJob();\n this.#mapSnapAndJob(snapData.snapId, job.id);\n\n // Ping the worker to ensure that it started up\n const pingResult = await withTimeout(\n this.command(job.id, {\n jsonrpc: '2.0',\n method: 'ping',\n id: nanoid(),\n }),\n this.#pingTimeout,\n );\n\n if (pingResult === hasTimedOut) {\n throw new Error('The Snaps execution environment failed to start.');\n }\n\n const rpcStream = job.streams.rpc;\n\n this.setupSnapProvider(snapData.snapId, rpcStream);\n\n const result = await this.command(job.id, {\n jsonrpc: '2.0',\n method: 'executeSnap',\n params: snapData,\n id: nanoid(),\n });\n this.#createSnapHooks(snapData.snapId, job.id);\n return result as string;\n }\n\n // Cannot be hash private yet because of tests.\n private async command(\n jobId: string,\n message: JsonRpcRequest,\n ): Promise<Json | undefined> {\n assertIsJsonRpcRequest(message);\n\n const job = this.jobs.get(jobId);\n if (!job) {\n throw new Error(`Job with id \"${jobId}\" not found.`);\n }\n\n log('Parent: Sending Command', message);\n const response: PendingJsonRpcResponse<Json> = await job.rpcEngine.handle(\n message,\n );\n\n if (response.error) {\n throw new JsonRpcError(\n response.error.code,\n response.error.message,\n response.error.data,\n );\n }\n\n return response.result;\n }\n\n #removeSnapHooks(snapId: string) {\n this.#snapRpcHooks.delete(snapId);\n }\n\n #createSnapHooks(snapId: string, workerId: string) {\n const rpcHook = async ({ origin, handler, request }: SnapRpcHookArgs) => {\n return await this.command(workerId, {\n id: nanoid(),\n jsonrpc: '2.0',\n method: 'snapRpc',\n params: {\n origin,\n handler,\n request: request as JsonRpcRequest,\n target: snapId,\n },\n });\n };\n\n this.#snapRpcHooks.set(snapId, rpcHook);\n }\n\n #mapSnapAndJob(snapId: string, jobId: string): void {\n this.#snapToJobMap.set(snapId, jobId);\n this.#jobToSnapMap.set(jobId, snapId);\n }\n\n #removeSnapAndJobMapping(jobId: string): void {\n const snapId = this.#jobToSnapMap.get(jobId);\n if (!snapId) {\n throw new Error(`job: \"${jobId}\" has no mapped snap.`);\n }\n\n this.#jobToSnapMap.delete(jobId);\n this.#snapToJobMap.delete(snapId);\n this.#removeSnapHooks(snapId);\n }\n\n /**\n * Handle RPC request.\n *\n * @param snapId - The ID of the recipient snap.\n * @param options - Bag of options to pass to the RPC handler.\n * @returns Promise that can handle the request.\n */\n public async handleRpcRequest(\n snapId: string,\n options: SnapRpcHookArgs,\n ): Promise<unknown> {\n const rpcRequestHandler = this.getRpcRequestHandler(snapId);\n\n if (!rpcRequestHandler) {\n throw new Error(\n `Snap execution service returned no RPC handler for running snap \"${snapId}\".`,\n );\n }\n\n return rpcRequestHandler(options);\n }\n}\n\n/**\n * Sets up stream multiplexing for the given stream.\n *\n * @param connectionStream - The stream to mux.\n * @param streamName - The name of the stream, for identification in errors.\n * @returns The multiplexed stream.\n */\nexport function setupMultiplex(\n connectionStream: Duplex,\n streamName: string,\n): ObjectMultiplex {\n const mux = new ObjectMultiplex();\n pipeline(connectionStream, mux, connectionStream, (error) => {\n if (error) {\n streamName\n ? logError(`\"${streamName}\" stream failure.`, error)\n : logError(error);\n }\n });\n return mux;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkVJZI4VSJjs = require('./chunk-VJZI4VSJ.js');
3
+ var _chunk54TYYPANjs = require('./chunk-54TYYPAN.js');
4
4
 
5
5
 
6
6
  var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
@@ -8,7 +8,7 @@ var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
8
8
  // src/services/node-js/NodeThreadExecutionService.ts
9
9
  var _postmessagestream = require('@metamask/post-message-stream');
10
10
  var _worker_threads = require('worker_threads');
11
- var NodeThreadExecutionService = class extends _chunkVJZI4VSJjs.AbstractExecutionService {
11
+ var NodeThreadExecutionService = class extends _chunk54TYYPANjs.AbstractExecutionService {
12
12
  async initEnvStream() {
13
13
  const worker = new (0, _worker_threads.Worker)(
14
14
  _chunkEXN2TFDJjs.__require.resolve(
@@ -36,4 +36,4 @@ var NodeThreadExecutionService = class extends _chunkVJZI4VSJjs.AbstractExecutio
36
36
 
37
37
 
38
38
  exports.NodeThreadExecutionService = NodeThreadExecutionService;
39
- //# sourceMappingURL=chunk-TXR2WWIP.js.map
39
+ //# sourceMappingURL=chunk-63GNCRER.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-IGC4E7PI.mjs";
4
4
  import {
5
5
  ProxyExecutionService
6
- } from "./chunk-KEEKVE7E.mjs";
6
+ } from "./chunk-Q4I5QTVC.mjs";
7
7
  import {
8
8
  __privateAdd,
9
9
  __privateGet,
@@ -55,4 +55,4 @@ ensureWebViewLoaded_fn = async function() {
55
55
  export {
56
56
  WebViewExecutionService
57
57
  };
58
- //# sourceMappingURL=chunk-E7627MMH.mjs.map
58
+ //# sourceMappingURL=chunk-75VM3O4K.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AbstractExecutionService
3
- } from "./chunk-XBGQ5PKQ.mjs";
3
+ } from "./chunk-WVGK5B5P.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-AELC3WCV.mjs.map
38
+ //# sourceMappingURL=chunk-BJOQRBH2.mjs.map
@@ -0,0 +1 @@
1
+ "use strict";//# sourceMappingURL=chunk-HP6S5IOB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk7WOG63YYjs = require('./chunk-7WOG63YY.js');
3
+ var _chunkPT22IXNSjs = require('./chunk-PT22IXNS.js');
4
4
 
5
5
 
6
6
  var _chunkAP7CJ6DAjs = require('./chunk-AP7CJ6DA.js');
@@ -42,6 +42,7 @@ var _rpcerrors = require('@metamask/rpc-errors');
42
42
 
43
43
 
44
44
 
45
+
45
46
  var _snapsrpcmethods = require('@metamask/snaps-rpc-methods');
46
47
  var _snapssdk = require('@metamask/snaps-sdk');
47
48
 
@@ -65,6 +66,7 @@ var _snapssdk = require('@metamask/snaps-sdk');
65
66
 
66
67
 
67
68
 
69
+
68
70
 
69
71
 
70
72
  var _snapsutils = require('@metamask/snaps-utils');
@@ -81,6 +83,7 @@ var _snapsutils = require('@metamask/snaps-utils');
81
83
 
82
84
 
83
85
 
86
+
84
87
  var _utils = require('@metamask/utils');
85
88
  var _fsm = require('@xstate/fsm');
86
89
  var _nanoid = require('nanoid');
@@ -113,7 +116,7 @@ function truncateSnap(snap) {
113
116
  return truncatedSnap;
114
117
  }
115
118
  var name = "SnapController";
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;
119
+ var _closeAllConnections, _dynamicPermissions, _environmentEndowmentPermissions, _excludedPermissions, _featureFlags, _fetchFunction, _idleTimeCheckInterval, _maxIdleTime, _maxInitTime, _encryptor, _getMnemonic, _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, _getSnapEncryptionKey, getSnapEncryptionKey_fn, _decryptSnapState, decryptSnapState_fn, _encryptSnapState, encryptSnapState_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
120
  var SnapController = class extends _basecontroller.BaseController {
118
121
  constructor({
119
122
  closeAllConnections,
@@ -128,8 +131,10 @@ var SnapController = class extends _basecontroller.BaseController {
128
131
  maxInitTime = _utils.inMilliseconds.call(void 0, 60, _utils.Duration.Second),
129
132
  fetchFunction = globalThis.fetch.bind(globalThis),
130
133
  featureFlags = {},
131
- detectSnapLocation: detectSnapLocationFunction = _chunk7WOG63YYjs.detectSnapLocation,
132
- preinstalledSnaps
134
+ detectSnapLocation: detectSnapLocationFunction = _chunkPT22IXNSjs.detectSnapLocation,
135
+ preinstalledSnaps,
136
+ encryptor,
137
+ getMnemonic
133
138
  }) {
134
139
  super({
135
140
  messenger,
@@ -218,6 +223,37 @@ var SnapController = class extends _basecontroller.BaseController {
218
223
  * @param snapId - The snap to terminate.
219
224
  */
220
225
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _terminateSnap);
226
+ /**
227
+ * Generate an encryption key to be used for state encryption for a given Snap.
228
+ *
229
+ * @param options - An options bag.
230
+ * @param options.snapId - The Snap ID.
231
+ * @param options.salt - A salt to be used for the encryption key.
232
+ * @param options.useCache - Whether to use caching or not.
233
+ * @param options.keyMetadata - Optional metadata about how to derive the encryption key.
234
+ * @returns An encryption key.
235
+ */
236
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _getSnapEncryptionKey);
237
+ /**
238
+ * Decrypt the encrypted state for a given Snap.
239
+ *
240
+ * @param snapId - The Snap ID.
241
+ * @param state - The encrypted state as a string.
242
+ * @returns A valid JSON object derived from the encrypted state.
243
+ * @throws If the decryption fails or the decrypted state is not valid JSON.
244
+ */
245
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _decryptSnapState);
246
+ /**
247
+ * Encrypt a JSON state object for a given Snap.
248
+ *
249
+ * Note: This function does not assert the validity of the object,
250
+ * please ensure only valid JSON is passed to it.
251
+ *
252
+ * @param snapId - The Snap ID.
253
+ * @param state - The state object.
254
+ * @returns A string containing the encrypted JSON object.
255
+ */
256
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _encryptSnapState);
221
257
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _handleInitialConnections);
222
258
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _addSnapToSubject);
223
259
  /**
@@ -406,6 +442,8 @@ var SnapController = class extends _basecontroller.BaseController {
406
442
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _idleTimeCheckInterval, void 0);
407
443
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _maxIdleTime, void 0);
408
444
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _maxInitTime, void 0);
445
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _encryptor, void 0);
446
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _getMnemonic, void 0);
409
447
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _detectSnapLocation, void 0);
410
448
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _snapsRuntimeData, void 0);
411
449
  _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _rollbackSnapshots, void 0);
@@ -422,6 +460,8 @@ var SnapController = class extends _basecontroller.BaseController {
422
460
  this.maxRequestTime = maxRequestTime;
423
461
  _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _maxInitTime, maxInitTime);
424
462
  _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _detectSnapLocation, detectSnapLocationFunction);
463
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _encryptor, encryptor);
464
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _getMnemonic, getMnemonic);
425
465
  this._onUnhandledSnapError = this._onUnhandledSnapError.bind(this);
426
466
  this._onOutboundRequest = this._onOutboundRequest.bind(this);
427
467
  this._onOutboundResponse = this._onOutboundResponse.bind(this);
@@ -674,14 +714,17 @@ var SnapController = class extends _basecontroller.BaseController {
674
714
  * @param newSnapState - The new state of the snap.
675
715
  * @param encrypted - A flag to indicate whether to use encrypted storage or not.
676
716
  */
677
- updateSnapState(snapId, newSnapState, encrypted) {
678
- this.update((state) => {
679
- if (encrypted) {
680
- state.snapStates[snapId] = newSnapState;
681
- } else {
682
- state.unencryptedSnapStates[snapId] = newSnapState;
683
- }
684
- });
717
+ async updateSnapState(snapId, newSnapState, encrypted) {
718
+ if (encrypted) {
719
+ const encryptedState = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _encryptSnapState, encryptSnapState_fn).call(this, snapId, newSnapState);
720
+ this.update((state) => {
721
+ state.snapStates[snapId] = encryptedState;
722
+ });
723
+ } else {
724
+ this.update((state) => {
725
+ state.unencryptedSnapStates[snapId] = JSON.stringify(newSnapState);
726
+ });
727
+ }
685
728
  }
686
729
  /**
687
730
  * Clears the state of the snap with the given id.
@@ -707,9 +750,16 @@ var SnapController = class extends _basecontroller.BaseController {
707
750
  * @param encrypted - A flag to indicate whether to use encrypted storage or not.
708
751
  * @returns The requested snap state or null if no state exists.
709
752
  */
710
- getSnapState(snapId, encrypted) {
753
+ async getSnapState(snapId, encrypted) {
711
754
  const state = encrypted ? this.state.snapStates[snapId] : this.state.unencryptedSnapStates[snapId];
712
- return state ?? null;
755
+ if (state === null) {
756
+ return state;
757
+ }
758
+ if (!encrypted) {
759
+ return _snapsutils.parseJson.call(void 0, state);
760
+ }
761
+ const decrypted = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _decryptSnapState, decryptSnapState_fn).call(this, snapId, state);
762
+ return decrypted;
713
763
  }
714
764
  /**
715
765
  * Gets a static auxiliary snap file in a chosen file encoding.
@@ -784,6 +834,7 @@ var SnapController = class extends _basecontroller.BaseController {
784
834
  this.update((state) => {
785
835
  delete state.snaps[snapId];
786
836
  delete state.snapStates[snapId];
837
+ delete state.unencryptedSnapStates[snapId];
787
838
  });
788
839
  if (snap.status !== _snapsutils.SnapStatus.Installing) {
789
840
  this.messagingSystem.publish(
@@ -1136,6 +1187,7 @@ var SnapController = class extends _basecontroller.BaseController {
1136
1187
  _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _validateSnapPermissions, validateSnapPermissions_fn).call(this, processedPermissions);
1137
1188
  const { newPermissions, unusedPermissions, approvedPermissions } = _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _calculatePermissionsChange, calculatePermissionsChange_fn).call(this, snapId, processedPermissions);
1138
1189
  _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _updateApproval, updateApproval_fn).call(this, pendingApproval.id, {
1190
+ connections: manifest.initialConnections ?? {},
1139
1191
  permissions: newPermissions,
1140
1192
  newVersion: manifest.version,
1141
1193
  newPermissions,
@@ -1240,12 +1292,13 @@ var SnapController = class extends _basecontroller.BaseController {
1240
1292
  _chunkNXZVKBSVjs.log.call(void 0, `Authorizing snap: ${snapId}`);
1241
1293
  const snapsState = this.state.snaps;
1242
1294
  const snap = snapsState[snapId];
1243
- const { initialPermissions } = snap;
1295
+ const { initialPermissions, initialConnections } = snap;
1244
1296
  try {
1245
1297
  const processedPermissions = _snapsrpcmethods.processSnapPermissions.call(void 0, initialPermissions);
1246
1298
  _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _validateSnapPermissions, validateSnapPermissions_fn).call(this, processedPermissions);
1247
1299
  _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _updateApproval, updateApproval_fn).call(this, pendingApproval.id, {
1248
1300
  loading: false,
1301
+ connections: initialConnections ?? {},
1249
1302
  permissions: processedPermissions
1250
1303
  });
1251
1304
  const { permissions: approvedPermissions, ...requestData } = await pendingApproval.promise;
@@ -1358,6 +1411,8 @@ _fetchFunction = new WeakMap();
1358
1411
  _idleTimeCheckInterval = new WeakMap();
1359
1412
  _maxIdleTime = new WeakMap();
1360
1413
  _maxInitTime = new WeakMap();
1414
+ _encryptor = new WeakMap();
1415
+ _getMnemonic = new WeakMap();
1361
1416
  _detectSnapLocation = new WeakMap();
1362
1417
  _snapsRuntimeData = new WeakMap();
1363
1418
  _rollbackSnapshots = new WeakMap();
@@ -1429,7 +1484,7 @@ registerMessageHandlers_fn = function() {
1429
1484
  );
1430
1485
  this.messagingSystem.registerActionHandler(
1431
1486
  `${controllerName}:getSnapState`,
1432
- (...args) => this.getSnapState(...args)
1487
+ async (...args) => this.getSnapState(...args)
1433
1488
  );
1434
1489
  this.messagingSystem.registerActionHandler(
1435
1490
  `${controllerName}:handleRequest`,
@@ -1445,7 +1500,7 @@ registerMessageHandlers_fn = function() {
1445
1500
  );
1446
1501
  this.messagingSystem.registerActionHandler(
1447
1502
  `${controllerName}:updateSnapState`,
1448
- (...args) => this.updateSnapState(...args)
1503
+ async (...args) => this.updateSnapState(...args)
1449
1504
  );
1450
1505
  this.messagingSystem.registerActionHandler(
1451
1506
  `${controllerName}:enable`,
@@ -1648,6 +1703,70 @@ terminateSnap_fn = async function(snapId) {
1648
1703
  this.getTruncatedExpect(snapId)
1649
1704
  );
1650
1705
  };
1706
+ _getSnapEncryptionKey = new WeakSet();
1707
+ getSnapEncryptionKey_fn = async function({
1708
+ snapId,
1709
+ salt,
1710
+ useCache,
1711
+ keyMetadata
1712
+ }) {
1713
+ const runtime = _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getRuntimeExpect, getRuntimeExpect_fn).call(this, snapId);
1714
+ if (runtime.encryptionKey && useCache) {
1715
+ return _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _encryptor).importKey(runtime.encryptionKey);
1716
+ }
1717
+ const mnemonicPhrase = await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _getMnemonic).call(this);
1718
+ const entropy = await _snapsrpcmethods.getEncryptionEntropy.call(void 0, { snapId, mnemonicPhrase });
1719
+ const encryptionKey = await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _encryptor).keyFromPassword(
1720
+ entropy,
1721
+ salt,
1722
+ true,
1723
+ keyMetadata
1724
+ );
1725
+ const exportedKey = await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _encryptor).exportKey(encryptionKey);
1726
+ if (useCache) {
1727
+ runtime.encryptionKey = exportedKey;
1728
+ }
1729
+ return encryptionKey;
1730
+ };
1731
+ _decryptSnapState = new WeakSet();
1732
+ decryptSnapState_fn = async function(snapId, state) {
1733
+ try {
1734
+ const parsed = _snapsutils.parseJson.call(void 0, state);
1735
+ const { salt, keyMetadata } = parsed;
1736
+ const useCache = _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _encryptor).isVaultUpdated(state);
1737
+ const encryptionKey = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getSnapEncryptionKey, getSnapEncryptionKey_fn).call(this, {
1738
+ snapId,
1739
+ salt,
1740
+ useCache,
1741
+ keyMetadata
1742
+ });
1743
+ const decryptedState = await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _encryptor).decryptWithKey(
1744
+ encryptionKey,
1745
+ parsed
1746
+ );
1747
+ _utils.assert.call(void 0, _utils.isValidJson.call(void 0, decryptedState));
1748
+ return decryptedState;
1749
+ } catch {
1750
+ throw _rpcerrors.rpcErrors.internal({
1751
+ message: "Failed to decrypt snap state, the state must be corrupted."
1752
+ });
1753
+ }
1754
+ };
1755
+ _encryptSnapState = new WeakSet();
1756
+ encryptSnapState_fn = async function(snapId, state) {
1757
+ const salt = _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _encryptor).generateSalt();
1758
+ const encryptionKey = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getSnapEncryptionKey, getSnapEncryptionKey_fn).call(this, {
1759
+ snapId,
1760
+ salt,
1761
+ useCache: true
1762
+ });
1763
+ const encryptedState = await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _encryptor).encryptWithKey(
1764
+ encryptionKey,
1765
+ state
1766
+ );
1767
+ encryptedState.salt = salt;
1768
+ return JSON.stringify(encryptedState);
1769
+ };
1651
1770
  _handleInitialConnections = new WeakSet();
1652
1771
  handleInitialConnections_fn = function(snapId, previousInitialConnections, initialConnections) {
1653
1772
  if (previousInitialConnections) {
@@ -1913,6 +2032,7 @@ set_fn = function(args) {
1913
2032
  removable,
1914
2033
  preinstalled,
1915
2034
  id: snapId,
2035
+ initialConnections: manifest.result.initialConnections,
1916
2036
  initialPermissions: manifest.result.initialPermissions,
1917
2037
  manifest: manifest.result,
1918
2038
  status: _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _statusMachine).config.initial,
@@ -2222,6 +2342,7 @@ setupRuntime_fn = function(snapId) {
2222
2342
  lastRequest: null,
2223
2343
  rpcHandler: null,
2224
2344
  installPromise: null,
2345
+ encryptionKey: null,
2225
2346
  activeReferences: 0,
2226
2347
  pendingInboundRequests: [],
2227
2348
  pendingOutboundRequests: 0,
@@ -2301,4 +2422,4 @@ callLifecycleHook_fn = async function(snapId, handler) {
2301
2422
 
2302
2423
 
2303
2424
  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;
2304
- //# sourceMappingURL=chunk-APQVOL5T.js.map
2425
+ //# sourceMappingURL=chunk-MIYZN7HG.js.map