@metamask/snaps-controllers 7.0.1 → 8.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 (141) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/dist/{chunk-XE5IWVNV.js → chunk-4DPX4O3T.js} +17 -6
  3. package/dist/chunk-4DPX4O3T.js.map +1 -0
  4. package/dist/{chunk-BJOQRBH2.mjs → chunk-6QZJC5I2.mjs} +2 -2
  5. package/dist/chunk-6QZJC5I2.mjs.map +1 -0
  6. package/dist/{chunk-2KCUVQFS.mjs → chunk-7DLODFQK.mjs} +2 -2
  7. package/dist/{chunk-Z6SOB3SY.js → chunk-ABKWEVW4.js} +3 -3
  8. package/dist/chunk-ABKWEVW4.js.map +1 -0
  9. package/dist/{chunk-NOLPMHXS.js → chunk-BOFPNIRX.js} +21 -3
  10. package/dist/chunk-BOFPNIRX.js.map +1 -0
  11. package/dist/{chunk-WQYMF7QP.js → chunk-CXT7XBMN.js} +3 -3
  12. package/dist/{chunk-63GNCRER.js → chunk-DQLRXCST.js} +4 -4
  13. package/dist/chunk-DQLRXCST.js.map +1 -0
  14. package/dist/{chunk-YVNRYLOC.js → chunk-DVTMXCTZ.js} +3 -3
  15. package/dist/{chunk-3ZC4LB7T.js → chunk-FOT4VRMQ.js} +3 -3
  16. package/dist/chunk-FOT4VRMQ.js.map +1 -0
  17. package/dist/{chunk-MYWDTEX2.js → chunk-GRBWVPLF.js} +4 -4
  18. package/dist/{chunk-36YC4Z3T.mjs → chunk-GTDDODNP.mjs} +13 -2
  19. package/dist/chunk-GTDDODNP.mjs.map +1 -0
  20. package/dist/{chunk-Q2ON6SMV.js → chunk-GZ3RVSUA.js} +5 -6
  21. package/dist/chunk-GZ3RVSUA.js.map +1 -0
  22. package/dist/{chunk-5MVIYRYL.mjs → chunk-HBNET6MY.mjs} +40 -26
  23. package/dist/chunk-HBNET6MY.mjs.map +1 -0
  24. package/dist/{chunk-SCERVW3B.mjs → chunk-HT7X5NPH.mjs} +2 -2
  25. package/dist/chunk-HT7X5NPH.mjs.map +1 -0
  26. package/dist/{chunk-WVGK5B5P.mjs → chunk-IRVUYBSV.mjs} +70 -41
  27. package/dist/chunk-IRVUYBSV.mjs.map +1 -0
  28. package/dist/{chunk-CJN25EXL.js → chunk-JMP6XYRL.js} +46 -32
  29. package/dist/chunk-JMP6XYRL.js.map +1 -0
  30. package/dist/{chunk-Y5KX5ICF.mjs → chunk-JQLPWQIR.mjs} +3 -3
  31. package/dist/chunk-JQLPWQIR.mjs.map +1 -0
  32. package/dist/{chunk-54TYYPAN.js → chunk-JZCXZEFV.js} +72 -43
  33. package/dist/chunk-JZCXZEFV.js.map +1 -0
  34. package/dist/{chunk-NSLYI2LS.js → chunk-M2NMZ4ER.js} +3 -3
  35. package/dist/chunk-M2NMZ4ER.js.map +1 -0
  36. package/dist/{chunk-Q4I5QTVC.mjs → chunk-MB23XAVD.mjs} +2 -2
  37. package/dist/chunk-MB23XAVD.mjs.map +1 -0
  38. package/dist/{chunk-75VM3O4K.mjs → chunk-MD2JCQBG.mjs} +2 -2
  39. package/dist/{chunk-25LS4KZK.mjs → chunk-PGQXTXAQ.mjs} +3 -3
  40. package/dist/chunk-PGQXTXAQ.mjs.map +1 -0
  41. package/dist/{chunk-N7WIJNHY.js → chunk-PRJADV7W.js} +4 -4
  42. package/dist/chunk-PRJADV7W.js.map +1 -0
  43. package/dist/{chunk-K276CM3B.mjs → chunk-SD6JM5ZU.mjs} +6 -7
  44. package/dist/chunk-SD6JM5ZU.mjs.map +1 -0
  45. package/dist/{chunk-VOZOZKRC.mjs → chunk-XO7KDFBY.mjs} +21 -3
  46. package/dist/chunk-XO7KDFBY.mjs.map +1 -0
  47. package/dist/{chunk-ZETJVFUS.mjs → chunk-XSFI32LB.mjs} +2 -2
  48. package/dist/cronjob/CronjobController.js +11 -11
  49. package/dist/cronjob/CronjobController.mjs +10 -10
  50. package/dist/cronjob/index.js +11 -11
  51. package/dist/cronjob/index.mjs +10 -10
  52. package/dist/index.js +13 -11
  53. package/dist/index.mjs +12 -10
  54. package/dist/interface/SnapInterfaceController.js +2 -2
  55. package/dist/interface/SnapInterfaceController.mjs +1 -1
  56. package/dist/interface/index.js +2 -2
  57. package/dist/interface/index.mjs +1 -1
  58. package/dist/node.js +15 -13
  59. package/dist/node.mjs +14 -12
  60. package/dist/react-native.js +14 -12
  61. package/dist/react-native.mjs +13 -11
  62. package/dist/services/AbstractExecutionService.js +4 -4
  63. package/dist/services/AbstractExecutionService.mjs +3 -3
  64. package/dist/services/browser.js +9 -9
  65. package/dist/services/browser.mjs +8 -8
  66. package/dist/services/iframe/IframeExecutionService.js +5 -5
  67. package/dist/services/iframe/IframeExecutionService.mjs +4 -4
  68. package/dist/services/iframe/index.js +5 -5
  69. package/dist/services/iframe/index.mjs +4 -4
  70. package/dist/services/index.js +8 -8
  71. package/dist/services/index.mjs +7 -7
  72. package/dist/services/node-js/NodeProcessExecutionService.js +9 -9
  73. package/dist/services/node-js/NodeProcessExecutionService.mjs +8 -8
  74. package/dist/services/node-js/NodeThreadExecutionService.js +9 -9
  75. package/dist/services/node-js/NodeThreadExecutionService.mjs +8 -8
  76. package/dist/services/node-js/index.js +10 -10
  77. package/dist/services/node-js/index.mjs +9 -9
  78. package/dist/services/node.js +10 -10
  79. package/dist/services/node.mjs +9 -9
  80. package/dist/services/offscreen/OffscreenExecutionService.js +6 -6
  81. package/dist/services/offscreen/OffscreenExecutionService.mjs +5 -5
  82. package/dist/services/offscreen/index.js +6 -6
  83. package/dist/services/offscreen/index.mjs +5 -5
  84. package/dist/services/proxy/ProxyExecutionService.js +5 -5
  85. package/dist/services/proxy/ProxyExecutionService.mjs +4 -4
  86. package/dist/services/react-native.js +9 -9
  87. package/dist/services/react-native.mjs +8 -8
  88. package/dist/services/webview/WebViewExecutionService.js +6 -6
  89. package/dist/services/webview/WebViewExecutionService.mjs +5 -5
  90. package/dist/services/webview/index.js +6 -6
  91. package/dist/services/webview/index.mjs +5 -5
  92. package/dist/services/webworker/WebWorkerExecutionService.js +5 -5
  93. package/dist/services/webworker/WebWorkerExecutionService.mjs +4 -4
  94. package/dist/services/webworker/index.js +5 -5
  95. package/dist/services/webworker/index.mjs +4 -4
  96. package/dist/snaps/SnapController.js +4 -4
  97. package/dist/snaps/SnapController.mjs +3 -3
  98. package/dist/snaps/Timer.js +2 -2
  99. package/dist/snaps/Timer.mjs +1 -1
  100. package/dist/snaps/index.js +4 -4
  101. package/dist/snaps/index.mjs +3 -3
  102. package/dist/tsconfig.build.tsbuildinfo +1 -1
  103. package/dist/types/services/AbstractExecutionService.d.ts +17 -12
  104. package/dist/types/services/ExecutionService.d.ts +1 -1
  105. package/dist/types/services/iframe/IframeExecutionService.d.ts +2 -2
  106. package/dist/types/services/node-js/NodeProcessExecutionService.d.ts +2 -2
  107. package/dist/types/services/node-js/NodeThreadExecutionService.d.ts +2 -2
  108. package/dist/types/services/proxy/ProxyExecutionService.d.ts +2 -2
  109. package/dist/types/services/webworker/WebWorkerExecutionService.d.ts +2 -2
  110. package/dist/types/snaps/SnapController.d.ts +5 -6
  111. package/dist/types/snaps/Timer.d.ts +7 -0
  112. package/dist/types/utils.d.ts +12 -0
  113. package/dist/utils.js +5 -3
  114. package/dist/utils.mjs +4 -2
  115. package/package.json +5 -4
  116. package/dist/chunk-25LS4KZK.mjs.map +0 -1
  117. package/dist/chunk-36YC4Z3T.mjs.map +0 -1
  118. package/dist/chunk-3ZC4LB7T.js.map +0 -1
  119. package/dist/chunk-54TYYPAN.js.map +0 -1
  120. package/dist/chunk-5MVIYRYL.mjs.map +0 -1
  121. package/dist/chunk-63GNCRER.js.map +0 -1
  122. package/dist/chunk-BJOQRBH2.mjs.map +0 -1
  123. package/dist/chunk-CJN25EXL.js.map +0 -1
  124. package/dist/chunk-K276CM3B.mjs.map +0 -1
  125. package/dist/chunk-N7WIJNHY.js.map +0 -1
  126. package/dist/chunk-NOLPMHXS.js.map +0 -1
  127. package/dist/chunk-NSLYI2LS.js.map +0 -1
  128. package/dist/chunk-Q2ON6SMV.js.map +0 -1
  129. package/dist/chunk-Q4I5QTVC.mjs.map +0 -1
  130. package/dist/chunk-SCERVW3B.mjs.map +0 -1
  131. package/dist/chunk-VOZOZKRC.mjs.map +0 -1
  132. package/dist/chunk-WVGK5B5P.mjs.map +0 -1
  133. package/dist/chunk-XE5IWVNV.js.map +0 -1
  134. package/dist/chunk-Y5KX5ICF.mjs.map +0 -1
  135. package/dist/chunk-Z6SOB3SY.js.map +0 -1
  136. /package/dist/{chunk-2KCUVQFS.mjs.map → chunk-7DLODFQK.mjs.map} +0 -0
  137. /package/dist/{chunk-WQYMF7QP.js.map → chunk-CXT7XBMN.js.map} +0 -0
  138. /package/dist/{chunk-YVNRYLOC.js.map → chunk-DVTMXCTZ.js.map} +0 -0
  139. /package/dist/{chunk-MYWDTEX2.js.map → chunk-GRBWVPLF.js.map} +0 -0
  140. /package/dist/{chunk-75VM3O4K.mjs.map → chunk-MD2JCQBG.mjs.map} +0 -0
  141. /package/dist/{chunk-ZETJVFUS.mjs.map → chunk-XSFI32LB.mjs.map} +0 -0
@@ -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 { Timer } from '../snaps/Timer';\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 initTimeout?: number;\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 type TerminateJobArgs<WorkerType> = Partial<Job<WorkerType>> &\n Pick<Job<WorkerType>, 'id'>;\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 #initTimeout: number;\n\n #pingTimeout: number;\n\n #terminationTimeout: number;\n\n constructor({\n setupSnapProvider,\n messenger,\n initTimeout = inMilliseconds(60, Duration.Second),\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.#initTimeout = initTimeout;\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 (data: SnapExecutionData) => this.executeSnap(data),\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: TerminateJobArgs<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 try {\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 } catch {\n // Ignore\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.jobs.delete(jobId);\n this.#removeSnapAndJobMapping(jobId);\n log(`Job \"${jobId}\" terminated.`);\n }\n\n /**\n * Initiates a job for a snap.\n *\n * @param jobId - The ID of the job to initiate.\n * @param timer - The timer to use for timeouts.\n * @returns Information regarding the created job.\n * @throws If the execution service returns an error or execution times out.\n */\n protected async initJob(\n jobId: string,\n timer: Timer,\n ): Promise<Job<WorkerType>> {\n const { streams, worker } = await this.initStreams(jobId, timer);\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 * @param jobId - The id of the job.\n * @param timer - The timer to use for timeouts.\n * @returns The streams to communicate with the worker and the worker itself.\n * @throws If the execution service returns an error or execution times out.\n */\n protected async initStreams(\n jobId: string,\n timer: Timer,\n ): Promise<{ streams: JobStreams; worker: WorkerType }> {\n const result = await withTimeout(this.initEnvStream(jobId), timer);\n\n if (result === hasTimedOut) {\n // For certain environments, such as the iframe we may have already created the worker and wish to terminate it.\n this.terminateJob({ id: jobId });\n throw new Error('The Snaps execution environment failed to start.');\n }\n\n const { worker, stream: envStream } = result;\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 * @param snapData - Data needed for Snap execution.\n * @param snapData.snapId - The ID of the Snap to execute.\n * @param snapData.sourceCode - The source code of the Snap to execute.\n * @param snapData.endowments - The endowments available to the executing Snap.\n * @returns A string `OK` if execution succeeded.\n * @throws If the execution service returns an error or execution times out.\n */\n async executeSnap({\n snapId,\n sourceCode,\n endowments,\n }: SnapExecutionData): Promise<string> {\n if (this.#snapToJobMap.has(snapId)) {\n throw new Error(`Snap \"${snapId}\" is already being executed.`);\n }\n\n const jobId = nanoid();\n const timer = new Timer(this.#initTimeout);\n\n // This may resolve even if the environment has failed to start up fully\n const job = await this.initJob(jobId, timer);\n\n this.#mapSnapAndJob(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(snapId, rpcStream);\n\n const remainingTime = timer.remaining;\n\n const result = await withTimeout(\n this.command(job.id, {\n jsonrpc: '2.0',\n method: 'executeSnap',\n params: { snapId, sourceCode, endowments },\n id: nanoid(),\n }),\n remainingTime,\n );\n\n if (result === hasTimedOut) {\n throw new Error(`${snapId} failed to start.`);\n }\n\n this.#createSnapHooks(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 _chunk54TYYPANjs = require('./chunk-54TYYPAN.js');
3
+ var _chunkJZCXZEFVjs = require('./chunk-JZCXZEFV.js');
4
4
 
5
5
 
6
6
  var _chunk7Y6P5FRNjs = require('./chunk-7Y6P5FRN.js');
@@ -13,7 +13,7 @@ var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
13
13
  // src/services/proxy/ProxyExecutionService.ts
14
14
  var _nanoid = require('nanoid');
15
15
  var _stream;
16
- var ProxyExecutionService = class extends _chunk54TYYPANjs.AbstractExecutionService {
16
+ var ProxyExecutionService = class extends _chunkJZCXZEFVjs.AbstractExecutionService {
17
17
  /**
18
18
  * Create a new proxy execution service.
19
19
  *
@@ -71,4 +71,4 @@ _stream = new WeakMap();
71
71
 
72
72
 
73
73
  exports.ProxyExecutionService = ProxyExecutionService;
74
- //# sourceMappingURL=chunk-NSLYI2LS.js.map
74
+ //# sourceMappingURL=chunk-M2NMZ4ER.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/proxy/ProxyExecutionService.ts"],"names":[],"mappings":";;;;;;;;;;;;;AACA,SAAS,cAAc;AADvB;AAcO,IAAM,wBAAN,cAAoC,yBAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc1E,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAyC;AACvC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,CAAC;AArBH,uBAAS,SAAT;AAuBE,uBAAK,SAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAgB,aAAa,KAA+B;AAG1D,uBAAK,SAAQ,MAAM;AAAA,MACjB,OAAO,IAAI;AAAA,MACX,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,IAAI,OAAO;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAgB,cAAc,OAAe;AAC3C,UAAM,SAAS,IAAI,uBAAuB;AAAA,MACxC,QAAQ,mBAAK;AAAA,MACb;AAAA,IACF,CAAC;AAED,WAAO,EAAE,QAAQ,OAAO,OAAO;AAAA,EACjC;AACF;AA1DW","sourcesContent":["import type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { nanoid } from 'nanoid';\n\nimport type {\n ExecutionServiceArgs,\n TerminateJobArgs,\n} from '../AbstractExecutionService';\nimport { AbstractExecutionService } from '../AbstractExecutionService';\nimport { ProxyPostMessageStream } from '../ProxyPostMessageStream';\n\ntype ProxyExecutionEnvironmentServiceArgs = {\n stream: BasePostMessageStream;\n} & ExecutionServiceArgs;\n\nexport class ProxyExecutionService extends AbstractExecutionService<string> {\n readonly #stream: BasePostMessageStream;\n\n /**\n * Create a new proxy execution service.\n *\n * @param args - The constructor arguments.\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 * @param args.stream - The stream to use for communicating with the proxy\n * executor.\n */\n constructor({\n stream,\n messenger,\n setupSnapProvider,\n }: ProxyExecutionEnvironmentServiceArgs) {\n super({\n messenger,\n setupSnapProvider,\n });\n\n this.#stream = stream;\n }\n\n /**\n * Send a termination command to the proxy stream.\n *\n * @param job - The job to terminate.\n */\n protected async terminateJob(job: TerminateJobArgs<string>) {\n // The `AbstractExecutionService` will have already closed the job stream,\n // so we write to the runtime stream directly.\n this.#stream.write({\n jobId: job.id,\n data: {\n jsonrpc: '2.0',\n method: 'terminateJob',\n id: nanoid(),\n },\n });\n }\n\n /**\n * Create a new stream for the specified job. This wraps the root stream\n * in a stream specific to the job.\n *\n * @param jobId - The job ID.\n */\n protected async initEnvStream(jobId: string) {\n const stream = new ProxyPostMessageStream({\n stream: this.#stream,\n jobId,\n });\n\n return { worker: jobId, stream };\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AbstractExecutionService
3
- } from "./chunk-WVGK5B5P.mjs";
3
+ } from "./chunk-IRVUYBSV.mjs";
4
4
  import {
5
5
  ProxyPostMessageStream
6
6
  } from "./chunk-ZVOYOZFT.mjs";
@@ -71,4 +71,4 @@ _stream = new WeakMap();
71
71
  export {
72
72
  ProxyExecutionService
73
73
  };
74
- //# sourceMappingURL=chunk-Q4I5QTVC.mjs.map
74
+ //# sourceMappingURL=chunk-MB23XAVD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/proxy/ProxyExecutionService.ts"],"sourcesContent":["import type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { nanoid } from 'nanoid';\n\nimport type {\n ExecutionServiceArgs,\n TerminateJobArgs,\n} from '../AbstractExecutionService';\nimport { AbstractExecutionService } from '../AbstractExecutionService';\nimport { ProxyPostMessageStream } from '../ProxyPostMessageStream';\n\ntype ProxyExecutionEnvironmentServiceArgs = {\n stream: BasePostMessageStream;\n} & ExecutionServiceArgs;\n\nexport class ProxyExecutionService extends AbstractExecutionService<string> {\n readonly #stream: BasePostMessageStream;\n\n /**\n * Create a new proxy execution service.\n *\n * @param args - The constructor arguments.\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 * @param args.stream - The stream to use for communicating with the proxy\n * executor.\n */\n constructor({\n stream,\n messenger,\n setupSnapProvider,\n }: ProxyExecutionEnvironmentServiceArgs) {\n super({\n messenger,\n setupSnapProvider,\n });\n\n this.#stream = stream;\n }\n\n /**\n * Send a termination command to the proxy stream.\n *\n * @param job - The job to terminate.\n */\n protected async terminateJob(job: TerminateJobArgs<string>) {\n // The `AbstractExecutionService` will have already closed the job stream,\n // so we write to the runtime stream directly.\n this.#stream.write({\n jobId: job.id,\n data: {\n jsonrpc: '2.0',\n method: 'terminateJob',\n id: nanoid(),\n },\n });\n }\n\n /**\n * Create a new stream for the specified job. This wraps the root stream\n * in a stream specific to the job.\n *\n * @param jobId - The job ID.\n */\n protected async initEnvStream(jobId: string) {\n const stream = new ProxyPostMessageStream({\n stream: this.#stream,\n jobId,\n });\n\n return { worker: jobId, stream };\n }\n}\n"],"mappings":";;;;;;;;;;;;;AACA,SAAS,cAAc;AADvB;AAcO,IAAM,wBAAN,cAAoC,yBAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc1E,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAyC;AACvC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,CAAC;AArBH,uBAAS,SAAT;AAuBE,uBAAK,SAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAgB,aAAa,KAA+B;AAG1D,uBAAK,SAAQ,MAAM;AAAA,MACjB,OAAO,IAAI;AAAA,MACX,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,IAAI,OAAO;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAgB,cAAc,OAAe;AAC3C,UAAM,SAAS,IAAI,uBAAuB;AAAA,MACxC,QAAQ,mBAAK;AAAA,MACb;AAAA,IACF,CAAC;AAED,WAAO,EAAE,QAAQ,OAAO,OAAO;AAAA,EACjC;AACF;AA1DW;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-IGC4E7PI.mjs";
4
4
  import {
5
5
  ProxyExecutionService
6
- } from "./chunk-Q4I5QTVC.mjs";
6
+ } from "./chunk-MB23XAVD.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-75VM3O4K.mjs.map
58
+ //# sourceMappingURL=chunk-MD2JCQBG.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AbstractExecutionService
3
- } from "./chunk-WVGK5B5P.mjs";
3
+ } from "./chunk-IRVUYBSV.mjs";
4
4
  import {
5
5
  __require
6
6
  } from "./chunk-YRZVIDCF.mjs";
@@ -28,11 +28,11 @@ var NodeProcessExecutionService = class extends AbstractExecutionService {
28
28
  return Promise.resolve({ worker, stream });
29
29
  }
30
30
  terminateJob(jobWrapper) {
31
- jobWrapper.worker.kill();
31
+ jobWrapper.worker?.kill();
32
32
  }
33
33
  };
34
34
 
35
35
  export {
36
36
  NodeProcessExecutionService
37
37
  };
38
- //# sourceMappingURL=chunk-25LS4KZK.mjs.map
38
+ //# sourceMappingURL=chunk-PGQXTXAQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/node-js/NodeProcessExecutionService.ts"],"sourcesContent":["import type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { ProcessParentMessageStream } from '@metamask/post-message-stream';\nimport type { ChildProcess } from 'child_process';\nimport { fork } from 'child_process';\n\nimport type { TerminateJobArgs } from '..';\nimport { AbstractExecutionService } from '..';\n\nexport class NodeProcessExecutionService extends AbstractExecutionService<ChildProcess> {\n protected async initEnvStream(): Promise<{\n worker: ChildProcess;\n stream: BasePostMessageStream;\n }> {\n const worker = fork(\n require.resolve(\n '@metamask/snaps-execution-environments/dist/browserify/node-process/bundle.js',\n ),\n {\n stdio: 'pipe',\n },\n );\n\n // Capturing `stdout` and `stderr` from the worker prevents the worker from\n // writing to them directly, making it easier to capture them Jest.\n worker.stdout?.on('data', (data) => {\n // eslint-disable-next-line no-console\n console.log(data.toString());\n });\n\n worker.stderr?.on('data', (data) => {\n // eslint-disable-next-line no-console\n console.error(data.toString());\n });\n\n const stream = new ProcessParentMessageStream({ process: worker });\n return Promise.resolve({ worker, stream });\n }\n\n protected terminateJob(jobWrapper: TerminateJobArgs<ChildProcess>): void {\n jobWrapper.worker?.kill();\n }\n}\n"],"mappings":";;;;;;;;AACA,SAAS,kCAAkC;AAE3C,SAAS,YAAY;AAKd,IAAM,8BAAN,cAA0C,yBAAuC;AAAA,EACtF,MAAgB,gBAGb;AACD,UAAM,SAAS;AAAA,MACb,UAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA;AAAA,QACE,OAAO;AAAA,MACT;AAAA,IACF;AAIA,WAAO,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAElC,cAAQ,IAAI,KAAK,SAAS,CAAC;AAAA,IAC7B,CAAC;AAED,WAAO,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAElC,cAAQ,MAAM,KAAK,SAAS,CAAC;AAAA,IAC/B,CAAC;AAED,UAAM,SAAS,IAAI,2BAA2B,EAAE,SAAS,OAAO,CAAC;AACjE,WAAO,QAAQ,QAAQ,EAAE,QAAQ,OAAO,CAAC;AAAA,EAC3C;AAAA,EAEU,aAAa,YAAkD;AACvE,eAAW,QAAQ,KAAK;AAAA,EAC1B;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk54TYYPANjs = require('./chunk-54TYYPAN.js');
3
+ var _chunkJZCXZEFVjs = require('./chunk-JZCXZEFV.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/NodeProcessExecutionService.ts
9
9
  var _postmessagestream = require('@metamask/post-message-stream');
10
10
  var _child_process = require('child_process');
11
- var NodeProcessExecutionService = class extends _chunk54TYYPANjs.AbstractExecutionService {
11
+ var NodeProcessExecutionService = class extends _chunkJZCXZEFVjs.AbstractExecutionService {
12
12
  async initEnvStream() {
13
13
  const worker = _child_process.fork.call(void 0,
14
14
  _chunkEXN2TFDJjs.__require.resolve(
@@ -28,11 +28,11 @@ var NodeProcessExecutionService = class extends _chunk54TYYPANjs.AbstractExecuti
28
28
  return Promise.resolve({ worker, stream });
29
29
  }
30
30
  terminateJob(jobWrapper) {
31
- jobWrapper.worker.kill();
31
+ jobWrapper.worker?.kill();
32
32
  }
33
33
  };
34
34
 
35
35
 
36
36
 
37
37
  exports.NodeProcessExecutionService = NodeProcessExecutionService;
38
- //# sourceMappingURL=chunk-N7WIJNHY.js.map
38
+ //# sourceMappingURL=chunk-PRJADV7W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/node-js/NodeProcessExecutionService.ts"],"names":[],"mappings":";;;;;;;;AACA,SAAS,kCAAkC;AAE3C,SAAS,YAAY;AAKd,IAAM,8BAAN,cAA0C,yBAAuC;AAAA,EACtF,MAAgB,gBAGb;AACD,UAAM,SAAS;AAAA,MACb,UAAQ;AAAA,QACN;AAAA,MACF;AAAA,MACA;AAAA,QACE,OAAO;AAAA,MACT;AAAA,IACF;AAIA,WAAO,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAElC,cAAQ,IAAI,KAAK,SAAS,CAAC;AAAA,IAC7B,CAAC;AAED,WAAO,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAElC,cAAQ,MAAM,KAAK,SAAS,CAAC;AAAA,IAC/B,CAAC;AAED,UAAM,SAAS,IAAI,2BAA2B,EAAE,SAAS,OAAO,CAAC;AACjE,WAAO,QAAQ,QAAQ,EAAE,QAAQ,OAAO,CAAC;AAAA,EAC3C;AAAA,EAEU,aAAa,YAAkD;AACvE,eAAW,QAAQ,KAAK;AAAA,EAC1B;AACF","sourcesContent":["import type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { ProcessParentMessageStream } from '@metamask/post-message-stream';\nimport type { ChildProcess } from 'child_process';\nimport { fork } from 'child_process';\n\nimport type { TerminateJobArgs } from '..';\nimport { AbstractExecutionService } from '..';\n\nexport class NodeProcessExecutionService extends AbstractExecutionService<ChildProcess> {\n protected async initEnvStream(): Promise<{\n worker: ChildProcess;\n stream: BasePostMessageStream;\n }> {\n const worker = fork(\n require.resolve(\n '@metamask/snaps-execution-environments/dist/browserify/node-process/bundle.js',\n ),\n {\n stdio: 'pipe',\n },\n );\n\n // Capturing `stdout` and `stderr` from the worker prevents the worker from\n // writing to them directly, making it easier to capture them Jest.\n worker.stdout?.on('data', (data) => {\n // eslint-disable-next-line no-console\n console.log(data.toString());\n });\n\n worker.stderr?.on('data', (data) => {\n // eslint-disable-next-line no-console\n console.error(data.toString());\n });\n\n const stream = new ProcessParentMessageStream({ process: worker });\n return Promise.resolve({ worker, stream });\n }\n\n protected terminateJob(jobWrapper: TerminateJobArgs<ChildProcess>): void {\n jobWrapper.worker?.kill();\n }\n}\n"]}
@@ -9,12 +9,13 @@ import {
9
9
  // src/interface/SnapInterfaceController.ts
10
10
  import { BaseController } from "@metamask/base-controller";
11
11
  import {
12
+ getJsonSizeUnsafe,
12
13
  getTotalTextLength,
13
14
  validateComponentLinks
14
15
  } from "@metamask/snaps-utils";
15
- import { assert, getJsonSize } from "@metamask/utils";
16
+ import { assert } from "@metamask/utils";
16
17
  import { nanoid } from "nanoid";
17
- var MAX_UI_CONTENT_SIZE = 25e4;
18
+ var MAX_UI_CONTENT_SIZE = 1e7;
18
19
  var MAX_TEXT_LENGTH = 5e4;
19
20
  var controllerName = "SnapInterfaceController";
20
21
  var _registerMessageHandlers, registerMessageHandlers_fn, _validateArgs, validateArgs_fn, _triggerPhishingListUpdate, triggerPhishingListUpdate_fn, _checkPhishingList, checkPhishingList_fn, _validateContent, validateContent_fn;
@@ -55,8 +56,6 @@ var SnapInterfaceController = class extends BaseController {
55
56
  * Utility function to validate the components of an interface.
56
57
  * Throws if something is invalid.
57
58
  *
58
- * Right now this only checks links against the phighing list.
59
- *
60
59
  * @param content - The components to verify.
61
60
  */
62
61
  __privateAdd(this, _validateContent);
@@ -177,10 +176,10 @@ checkPhishingList_fn = function(origin) {
177
176
  };
178
177
  _validateContent = new WeakSet();
179
178
  validateContent_fn = async function(content) {
180
- const size = getJsonSize(content);
179
+ const size = getJsonSizeUnsafe(content);
181
180
  assert(
182
181
  size <= MAX_UI_CONTENT_SIZE,
183
- `A Snap UI may not be larger than ${MAX_UI_CONTENT_SIZE / 1e3} kB.`
182
+ `A Snap UI may not be larger than ${MAX_UI_CONTENT_SIZE / 1e6} MB.`
184
183
  );
185
184
  const textSize = getTotalTextLength(content);
186
185
  assert(
@@ -194,4 +193,4 @@ validateContent_fn = async function(content) {
194
193
  export {
195
194
  SnapInterfaceController
196
195
  };
197
- //# sourceMappingURL=chunk-K276CM3B.mjs.map
196
+ //# sourceMappingURL=chunk-SD6JM5ZU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/interface/SnapInterfaceController.ts"],"sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n MaybeUpdateState,\n TestOrigin,\n} from '@metamask/phishing-controller';\nimport type { Component, InterfaceState, SnapId } from '@metamask/snaps-sdk';\nimport {\n getJsonSizeUnsafe,\n getTotalTextLength,\n validateComponentLinks,\n} from '@metamask/snaps-utils';\nimport { assert } from '@metamask/utils';\nimport { nanoid } from 'nanoid';\n\nimport { constructState } from './utils';\n\nconst MAX_UI_CONTENT_SIZE = 10_000_000; // 10 mb\nconst MAX_TEXT_LENGTH = 50_000; // 50 kb\n\nconst controllerName = 'SnapInterfaceController';\n\nexport type CreateInterface = {\n type: `${typeof controllerName}:createInterface`;\n handler: SnapInterfaceController['createInterface'];\n};\n\nexport type GetInterface = {\n type: `${typeof controllerName}:getInterface`;\n handler: SnapInterfaceController['getInterface'];\n};\n\nexport type UpdateInterface = {\n type: `${typeof controllerName}:updateInterface`;\n handler: SnapInterfaceController['updateInterface'];\n};\n\nexport type DeleteInterface = {\n type: `${typeof controllerName}:deleteInterface`;\n handler: SnapInterfaceController['deleteInterface'];\n};\n\nexport type UpdateInterfaceState = {\n type: `${typeof controllerName}:updateInterfaceState`;\n handler: SnapInterfaceController['updateInterfaceState'];\n};\n\nexport type SnapInterfaceControllerAllowedActions =\n | TestOrigin\n | MaybeUpdateState;\n\nexport type SnapInterfaceControllerActions =\n | CreateInterface\n | GetInterface\n | UpdateInterface\n | DeleteInterface\n | UpdateInterfaceState;\n\nexport type SnapInterfaceControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SnapInterfaceControllerActions | SnapInterfaceControllerAllowedActions,\n never,\n SnapInterfaceControllerAllowedActions['type'],\n never\n>;\n\nexport type StoredInterface = {\n snapId: SnapId;\n content: Component;\n state: InterfaceState;\n};\n\nexport type SnapInterfaceControllerState = {\n interfaces: Record<string, StoredInterface>;\n};\n\nexport type SnapInterfaceControllerArgs = {\n messenger: SnapInterfaceControllerMessenger;\n state?: SnapInterfaceControllerState;\n};\n\n/**\n * Use this controller to manage snaps UI interfaces using RPC method hooks.\n */\nexport class SnapInterfaceController extends BaseController<\n typeof controllerName,\n SnapInterfaceControllerState,\n SnapInterfaceControllerMessenger\n> {\n constructor({ messenger, state }: SnapInterfaceControllerArgs) {\n super({\n messenger,\n metadata: {\n interfaces: { persist: false, anonymous: false },\n },\n name: controllerName,\n state: { interfaces: {}, ...state },\n });\n\n this.#registerMessageHandlers();\n }\n\n /**\n * Constructor helper for registering this controller's messaging system\n * actions.\n */\n #registerMessageHandlers() {\n this.messagingSystem.registerActionHandler(\n `${controllerName}:createInterface`,\n this.createInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:getInterface`,\n this.getInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:updateInterface`,\n this.updateInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:deleteInterface`,\n this.deleteInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:updateInterfaceState`,\n this.updateInterfaceState.bind(this),\n );\n }\n\n /**\n * Create an interface in the controller state with the associated data.\n *\n * @param snapId - The snap id that created the interface.\n * @param content - The interface content.\n * @returns The newly interface id.\n */\n async createInterface(snapId: SnapId, content: Component) {\n await this.#validateContent(content);\n\n const id = nanoid();\n\n const componentState = constructState({}, content);\n\n this.update((draftState) => {\n draftState.interfaces[id] = {\n snapId,\n content,\n state: componentState,\n };\n });\n\n return id;\n }\n\n /**\n * Get the data of a given interface id.\n *\n * @param snapId - The snap id requesting the interface data.\n * @param id - The interface id.\n * @returns The interface state.\n */\n getInterface(snapId: SnapId, id: string) {\n this.#validateArgs(snapId, id);\n\n return this.state.interfaces[id];\n }\n\n /**\n * Update the interface with the given content.\n *\n * @param snapId - The snap id requesting the update.\n * @param id - The interface id.\n * @param content - The new content.\n */\n async updateInterface(snapId: SnapId, id: string, content: Component) {\n this.#validateArgs(snapId, id);\n await this.#validateContent(content);\n\n const oldState = this.state.interfaces[id].state;\n\n const newState = constructState(oldState, content);\n\n this.update((draftState) => {\n draftState.interfaces[id].state = newState;\n draftState.interfaces[id].content = content;\n });\n }\n\n /**\n * Delete an interface from state.\n *\n * @param id - The interface id.\n */\n deleteInterface(id: string) {\n this.update((draftState) => {\n delete draftState.interfaces[id];\n });\n }\n\n /**\n * Update the interface state.\n *\n * @param id - The interface id.\n * @param state - The new state.\n */\n updateInterfaceState(id: string, state: InterfaceState) {\n this.update((draftState) => {\n draftState.interfaces[id].state = state;\n });\n }\n\n /**\n * Utility function to validate the args passed to the other methods.\n *\n * @param snapId - The snap id.\n * @param id - The interface id.\n */\n #validateArgs(snapId: SnapId, id: string) {\n const existingInterface = this.state.interfaces[id];\n\n assert(\n existingInterface !== undefined,\n `Interface with id '${id}' not found.`,\n );\n assert(\n existingInterface.snapId === snapId,\n `Interface not created by ${snapId}.`,\n );\n }\n\n /**\n * Trigger a Phishing list update if needed.\n */\n async #triggerPhishingListUpdate() {\n await this.messagingSystem.call('PhishingController:maybeUpdateState');\n }\n\n /**\n * Check an origin against the phishing list.\n *\n * @param origin - The origin to check.\n * @returns True if the origin is on the phishing list, otherwise false.\n */\n #checkPhishingList(origin: string) {\n return this.messagingSystem.call('PhishingController:testOrigin', origin)\n .result;\n }\n\n /**\n * Utility function to validate the components of an interface.\n * Throws if something is invalid.\n *\n * @param content - The components to verify.\n */\n async #validateContent(content: Component) {\n // We assume the validity of this JSON to be validated by the caller.\n // E.g. in the RPC method implementation.\n const size = getJsonSizeUnsafe(content);\n\n assert(\n size <= MAX_UI_CONTENT_SIZE,\n `A Snap UI may not be larger than ${MAX_UI_CONTENT_SIZE / 1000000} MB.`,\n );\n\n const textSize = getTotalTextLength(content);\n\n assert(\n textSize <= MAX_TEXT_LENGTH,\n `The text in a Snap UI may not be larger than ${\n MAX_TEXT_LENGTH / 1000\n } kB.`,\n );\n\n await this.#triggerPhishingListUpdate();\n\n validateComponentLinks(content, this.#checkPhishingList.bind(this));\n }\n}\n"],"mappings":"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","names":[]}
@@ -19,6 +19,9 @@ var Timer = class {
19
19
  get status() {
20
20
  return this.state.value;
21
21
  }
22
+ get remaining() {
23
+ return this.state.remaining;
24
+ }
22
25
  /**
23
26
  * Cancels the currently running timer and marks it finished.
24
27
  *
@@ -31,6 +34,18 @@ var Timer = class {
31
34
  );
32
35
  this.onFinish(false);
33
36
  }
37
+ /**
38
+ * Marks the timer as finished prematurely and triggers the callback.
39
+ *
40
+ * @throws {@link Error}. If it wasn't running or paused.
41
+ */
42
+ finish() {
43
+ assert(
44
+ this.status !== "finished",
45
+ new Error("Tried to finish a finished Timer.")
46
+ );
47
+ this.onFinish(true);
48
+ }
34
49
  /**
35
50
  * Pauses a currently running timer, allowing it to resume later.
36
51
  *
@@ -87,8 +102,11 @@ var Timer = class {
87
102
  if (this.state.value === "running" && this.state.timeout !== void 0) {
88
103
  clearTimeout(this.state.timeout);
89
104
  }
90
- const { callback } = this.state;
91
- this.state = { value: "finished" };
105
+ const { callback, remaining } = this.state;
106
+ this.state = {
107
+ value: "finished",
108
+ remaining: this.state.value === "running" ? remaining - (Date.now() - this.state.start) : remaining
109
+ };
92
110
  if (shouldCall) {
93
111
  callback();
94
112
  }
@@ -98,4 +116,4 @@ var Timer = class {
98
116
  export {
99
117
  Timer
100
118
  };
101
- //# sourceMappingURL=chunk-VOZOZKRC.mjs.map
119
+ //# sourceMappingURL=chunk-XO7KDFBY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/snaps/Timer.ts"],"sourcesContent":["import { assert } from '@metamask/utils';\n\nexport type TimerStatus = 'stopped' | 'paused' | 'running' | 'finished';\n\nexport class Timer {\n private state:\n | { value: 'stopped'; remaining: number }\n | {\n value: 'paused';\n remaining: number;\n callback: () => void;\n }\n | {\n value: 'running';\n remaining: number;\n callback: () => void;\n start: number;\n timeout?: unknown;\n }\n | { value: 'finished'; remaining: number };\n\n /**\n * If `ms` is smaller or equal to zero (including -Infinity), the callback is added to the event loop and executed async immediately\n * If `ms` is +Infinity the timer never finishes.\n *\n * @throws {@link TypeError}. If `ms` is NaN or negative.\n * @param ms - The number of milliseconds before the callback is called after started.\n */\n constructor(ms: number) {\n assert(\n !Number.isNaN(ms),\n new TypeError(\"Can't start a timer with NaN time\"),\n );\n assert(ms >= 0, new TypeError(\"Can't start a timer with negative time\"));\n this.state = { value: 'stopped', remaining: ms };\n }\n\n get status(): TimerStatus {\n return this.state.value;\n }\n\n get remaining(): number {\n return this.state.remaining;\n }\n\n /**\n * Cancels the currently running timer and marks it finished.\n *\n * @throws {@link Error}. If it wasn't running or paused.\n */\n cancel() {\n assert(\n this.status === 'paused' || this.status === 'running',\n new Error('Tried to cancel a not running Timer'),\n );\n this.onFinish(false);\n }\n\n /**\n * Marks the timer as finished prematurely and triggers the callback.\n *\n * @throws {@link Error}. If it wasn't running or paused.\n */\n finish() {\n assert(\n this.status !== 'finished',\n new Error('Tried to finish a finished Timer.'),\n );\n this.onFinish(true);\n }\n\n /**\n * Pauses a currently running timer, allowing it to resume later.\n *\n * @throws {@link Error}. If it wasn't running.\n */\n pause() {\n assert(\n this.state.value === 'running',\n new Error('Tried to pause a not running Timer'),\n );\n\n const { callback, start, timeout, remaining } = this.state;\n\n timeout !== undefined && clearTimeout(timeout as any);\n this.state = {\n value: 'paused',\n callback,\n remaining: remaining - (Date.now() - start),\n };\n }\n\n /**\n * Starts the timer.\n *\n * @param callback - The function that will be called after the timer finishes.\n * @throws {@link Error}. If it was already started.\n */\n start(callback: () => void) {\n assert(\n this.state.value === 'stopped',\n new Error('Tried to start an already running Timer'),\n );\n\n const { remaining } = this.state;\n this.state = { value: 'paused', remaining, callback };\n this.resume();\n }\n\n /**\n * Resumes a currently paused timer.\n *\n * @throws {@link Error}. If it wasn't paused.\n */\n resume() {\n assert(\n this.state.value === 'paused',\n new Error('Tried to resume not paused Timer'),\n );\n const { remaining, callback } = this.state;\n const start = Date.now();\n\n let timeout: unknown;\n // setTimeout returns immediately on +Infinity which we use\n if (remaining !== Number.POSITIVE_INFINITY) {\n timeout = setTimeout(() => this.onFinish(true), remaining);\n }\n\n this.state = { value: 'running', callback, remaining, start, timeout };\n }\n\n private onFinish(shouldCall: boolean) {\n assert(this.state.value === 'running' || this.state.value === 'paused');\n\n if (this.state.value === 'running' && this.state.timeout !== undefined) {\n clearTimeout(this.state.timeout as any);\n }\n\n const { callback, remaining } = this.state;\n this.state = {\n value: 'finished',\n remaining:\n this.state.value === 'running'\n ? remaining - (Date.now() - this.state.start)\n : remaining,\n };\n\n if (shouldCall) {\n callback();\n }\n }\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAIhB,IAAM,QAAN,MAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBjB,YAAY,IAAY;AACtB;AAAA,MACE,CAAC,OAAO,MAAM,EAAE;AAAA,MAChB,IAAI,UAAU,mCAAmC;AAAA,IACnD;AACA,WAAO,MAAM,GAAG,IAAI,UAAU,wCAAwC,CAAC;AACvE,SAAK,QAAQ,EAAE,OAAO,WAAW,WAAW,GAAG;AAAA,EACjD;AAAA,EAEA,IAAI,SAAsB;AACxB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAI,YAAoB;AACtB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS;AACP;AAAA,MACE,KAAK,WAAW,YAAY,KAAK,WAAW;AAAA,MAC5C,IAAI,MAAM,qCAAqC;AAAA,IACjD;AACA,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS;AACP;AAAA,MACE,KAAK,WAAW;AAAA,MAChB,IAAI,MAAM,mCAAmC;AAAA,IAC/C;AACA,SAAK,SAAS,IAAI;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ;AACN;AAAA,MACE,KAAK,MAAM,UAAU;AAAA,MACrB,IAAI,MAAM,oCAAoC;AAAA,IAChD;AAEA,UAAM,EAAE,UAAU,OAAO,SAAS,UAAU,IAAI,KAAK;AAErD,gBAAY,UAAa,aAAa,OAAc;AACpD,SAAK,QAAQ;AAAA,MACX,OAAO;AAAA,MACP;AAAA,MACA,WAAW,aAAa,KAAK,IAAI,IAAI;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,UAAsB;AAC1B;AAAA,MACE,KAAK,MAAM,UAAU;AAAA,MACrB,IAAI,MAAM,yCAAyC;AAAA,IACrD;AAEA,UAAM,EAAE,UAAU,IAAI,KAAK;AAC3B,SAAK,QAAQ,EAAE,OAAO,UAAU,WAAW,SAAS;AACpD,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS;AACP;AAAA,MACE,KAAK,MAAM,UAAU;AAAA,MACrB,IAAI,MAAM,kCAAkC;AAAA,IAC9C;AACA,UAAM,EAAE,WAAW,SAAS,IAAI,KAAK;AACrC,UAAM,QAAQ,KAAK,IAAI;AAEvB,QAAI;AAEJ,QAAI,cAAc,OAAO,mBAAmB;AAC1C,gBAAU,WAAW,MAAM,KAAK,SAAS,IAAI,GAAG,SAAS;AAAA,IAC3D;AAEA,SAAK,QAAQ,EAAE,OAAO,WAAW,UAAU,WAAW,OAAO,QAAQ;AAAA,EACvE;AAAA,EAEQ,SAAS,YAAqB;AACpC,WAAO,KAAK,MAAM,UAAU,aAAa,KAAK,MAAM,UAAU,QAAQ;AAEtE,QAAI,KAAK,MAAM,UAAU,aAAa,KAAK,MAAM,YAAY,QAAW;AACtE,mBAAa,KAAK,MAAM,OAAc;AAAA,IACxC;AAEA,UAAM,EAAE,UAAU,UAAU,IAAI,KAAK;AACrC,SAAK,QAAQ;AAAA,MACX,OAAO;AAAA,MACP,WACE,KAAK,MAAM,UAAU,YACjB,aAAa,KAAK,IAAI,IAAI,KAAK,MAAM,SACrC;AAAA,IACR;AAEA,QAAI,YAAY;AACd,eAAS;AAAA,IACX;AAAA,EACF;AACF;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-P7Y6MIZW.mjs";
4
4
  import {
5
5
  Timer
6
- } from "./chunk-VOZOZKRC.mjs";
6
+ } from "./chunk-XO7KDFBY.mjs";
7
7
  import {
8
8
  __privateAdd,
9
9
  __privateGet,
@@ -280,4 +280,4 @@ export {
280
280
  DAILY_TIMEOUT,
281
281
  CronjobController
282
282
  };
283
- //# sourceMappingURL=chunk-ZETJVFUS.mjs.map
283
+ //# sourceMappingURL=chunk-XSFI32LB.mjs.map
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkMYWDTEX2js = require('../chunk-MYWDTEX2.js');
4
+ var _chunkGRBWVPLFjs = require('../chunk-GRBWVPLF.js');
5
5
  require('../chunk-JAUAKTUL.js');
6
- require('../chunk-CJN25EXL.js');
6
+ require('../chunk-JMP6XYRL.js');
7
7
  require('../chunk-WEY7ICES.js');
8
8
  require('../chunk-PT22IXNS.js');
9
9
  require('../chunk-LWBPKSU2.js');
@@ -16,26 +16,26 @@ require('../chunk-AP7CJ6DA.js');
16
16
  require('../chunk-5YBORD3A.js');
17
17
  require('../chunk-YYPUPKQY.js');
18
18
  require('../chunk-VNOCJWOK.js');
19
- require('../chunk-Q2ON6SMV.js');
19
+ require('../chunk-GZ3RVSUA.js');
20
20
  require('../chunk-KLK7ZRMH.js');
21
21
  require('../chunk-4URGXJP7.js');
22
22
  require('../chunk-OHMCPTOI.js');
23
23
  require('../chunk-D74XJG2L.js');
24
- require('../chunk-3ZC4LB7T.js');
24
+ require('../chunk-FOT4VRMQ.js');
25
25
  require('../chunk-HOY6NKQR.js');
26
- require('../chunk-Z6SOB3SY.js');
27
- require('../chunk-WQYMF7QP.js');
28
- require('../chunk-NSLYI2LS.js');
29
- require('../chunk-54TYYPAN.js');
26
+ require('../chunk-ABKWEVW4.js');
27
+ require('../chunk-CXT7XBMN.js');
28
+ require('../chunk-M2NMZ4ER.js');
29
+ require('../chunk-JZCXZEFV.js');
30
30
  require('../chunk-OIEUL55W.js');
31
31
  require('../chunk-7Y6P5FRN.js');
32
32
  require('../chunk-BO2ZDPWV.js');
33
33
  require('../chunk-NXZVKBSV.js');
34
- require('../chunk-XE5IWVNV.js');
35
- require('../chunk-NOLPMHXS.js');
34
+ require('../chunk-4DPX4O3T.js');
35
+ require('../chunk-BOFPNIRX.js');
36
36
  require('../chunk-EXN2TFDJ.js');
37
37
 
38
38
 
39
39
 
40
- exports.CronjobController = _chunkMYWDTEX2js.CronjobController; exports.DAILY_TIMEOUT = _chunkMYWDTEX2js.DAILY_TIMEOUT;
40
+ exports.CronjobController = _chunkGRBWVPLFjs.CronjobController; exports.DAILY_TIMEOUT = _chunkGRBWVPLFjs.DAILY_TIMEOUT;
41
41
  //# sourceMappingURL=CronjobController.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CronjobController,
3
3
  DAILY_TIMEOUT
4
- } from "../chunk-ZETJVFUS.mjs";
4
+ } from "../chunk-XSFI32LB.mjs";
5
5
  import "../chunk-BAEXVO3U.mjs";
6
- import "../chunk-5MVIYRYL.mjs";
6
+ import "../chunk-HBNET6MY.mjs";
7
7
  import "../chunk-QL3QGUTM.mjs";
8
8
  import "../chunk-42ODFZSH.mjs";
9
9
  import "../chunk-B3UTLNYS.mjs";
@@ -16,23 +16,23 @@ import "../chunk-NC5PBDKD.mjs";
16
16
  import "../chunk-YIQM6ZKA.mjs";
17
17
  import "../chunk-P7Y6MIZW.mjs";
18
18
  import "../chunk-U74FML7Z.mjs";
19
- import "../chunk-K276CM3B.mjs";
19
+ import "../chunk-SD6JM5ZU.mjs";
20
20
  import "../chunk-RIU3ZIXZ.mjs";
21
21
  import "../chunk-IABOI7TW.mjs";
22
22
  import "../chunk-ESQPQNEF.mjs";
23
23
  import "../chunk-V6NFZ47P.mjs";
24
- import "../chunk-SCERVW3B.mjs";
24
+ import "../chunk-HT7X5NPH.mjs";
25
25
  import "../chunk-KCMULJ2M.mjs";
26
- import "../chunk-BJOQRBH2.mjs";
27
- import "../chunk-2KCUVQFS.mjs";
28
- import "../chunk-Q4I5QTVC.mjs";
29
- import "../chunk-WVGK5B5P.mjs";
26
+ import "../chunk-6QZJC5I2.mjs";
27
+ import "../chunk-7DLODFQK.mjs";
28
+ import "../chunk-MB23XAVD.mjs";
29
+ import "../chunk-IRVUYBSV.mjs";
30
30
  import "../chunk-3RNW7OKG.mjs";
31
31
  import "../chunk-ZVOYOZFT.mjs";
32
32
  import "../chunk-6EZSNS4O.mjs";
33
33
  import "../chunk-4HVWEABQ.mjs";
34
- import "../chunk-36YC4Z3T.mjs";
35
- import "../chunk-VOZOZKRC.mjs";
34
+ import "../chunk-GTDDODNP.mjs";
35
+ import "../chunk-XO7KDFBY.mjs";
36
36
  import "../chunk-YRZVIDCF.mjs";
37
37
  export {
38
38
  CronjobController,
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkMYWDTEX2js = require('../chunk-MYWDTEX2.js');
4
+ var _chunkGRBWVPLFjs = require('../chunk-GRBWVPLF.js');
5
5
  require('../chunk-JAUAKTUL.js');
6
- require('../chunk-CJN25EXL.js');
6
+ require('../chunk-JMP6XYRL.js');
7
7
  require('../chunk-WEY7ICES.js');
8
8
  require('../chunk-PT22IXNS.js');
9
9
  require('../chunk-LWBPKSU2.js');
@@ -16,26 +16,26 @@ require('../chunk-AP7CJ6DA.js');
16
16
  require('../chunk-5YBORD3A.js');
17
17
  require('../chunk-YYPUPKQY.js');
18
18
  require('../chunk-VNOCJWOK.js');
19
- require('../chunk-Q2ON6SMV.js');
19
+ require('../chunk-GZ3RVSUA.js');
20
20
  require('../chunk-KLK7ZRMH.js');
21
21
  require('../chunk-4URGXJP7.js');
22
22
  require('../chunk-OHMCPTOI.js');
23
23
  require('../chunk-D74XJG2L.js');
24
- require('../chunk-3ZC4LB7T.js');
24
+ require('../chunk-FOT4VRMQ.js');
25
25
  require('../chunk-HOY6NKQR.js');
26
- require('../chunk-Z6SOB3SY.js');
27
- require('../chunk-WQYMF7QP.js');
28
- require('../chunk-NSLYI2LS.js');
29
- require('../chunk-54TYYPAN.js');
26
+ require('../chunk-ABKWEVW4.js');
27
+ require('../chunk-CXT7XBMN.js');
28
+ require('../chunk-M2NMZ4ER.js');
29
+ require('../chunk-JZCXZEFV.js');
30
30
  require('../chunk-OIEUL55W.js');
31
31
  require('../chunk-7Y6P5FRN.js');
32
32
  require('../chunk-BO2ZDPWV.js');
33
33
  require('../chunk-NXZVKBSV.js');
34
- require('../chunk-XE5IWVNV.js');
35
- require('../chunk-NOLPMHXS.js');
34
+ require('../chunk-4DPX4O3T.js');
35
+ require('../chunk-BOFPNIRX.js');
36
36
  require('../chunk-EXN2TFDJ.js');
37
37
 
38
38
 
39
39
 
40
- exports.CronjobController = _chunkMYWDTEX2js.CronjobController; exports.DAILY_TIMEOUT = _chunkMYWDTEX2js.DAILY_TIMEOUT;
40
+ exports.CronjobController = _chunkGRBWVPLFjs.CronjobController; exports.DAILY_TIMEOUT = _chunkGRBWVPLFjs.DAILY_TIMEOUT;
41
41
  //# sourceMappingURL=index.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CronjobController,
3
3
  DAILY_TIMEOUT
4
- } from "../chunk-ZETJVFUS.mjs";
4
+ } from "../chunk-XSFI32LB.mjs";
5
5
  import "../chunk-BAEXVO3U.mjs";
6
- import "../chunk-5MVIYRYL.mjs";
6
+ import "../chunk-HBNET6MY.mjs";
7
7
  import "../chunk-QL3QGUTM.mjs";
8
8
  import "../chunk-42ODFZSH.mjs";
9
9
  import "../chunk-B3UTLNYS.mjs";
@@ -16,23 +16,23 @@ import "../chunk-NC5PBDKD.mjs";
16
16
  import "../chunk-YIQM6ZKA.mjs";
17
17
  import "../chunk-P7Y6MIZW.mjs";
18
18
  import "../chunk-U74FML7Z.mjs";
19
- import "../chunk-K276CM3B.mjs";
19
+ import "../chunk-SD6JM5ZU.mjs";
20
20
  import "../chunk-RIU3ZIXZ.mjs";
21
21
  import "../chunk-IABOI7TW.mjs";
22
22
  import "../chunk-ESQPQNEF.mjs";
23
23
  import "../chunk-V6NFZ47P.mjs";
24
- import "../chunk-SCERVW3B.mjs";
24
+ import "../chunk-HT7X5NPH.mjs";
25
25
  import "../chunk-KCMULJ2M.mjs";
26
- import "../chunk-BJOQRBH2.mjs";
27
- import "../chunk-2KCUVQFS.mjs";
28
- import "../chunk-Q4I5QTVC.mjs";
29
- import "../chunk-WVGK5B5P.mjs";
26
+ import "../chunk-6QZJC5I2.mjs";
27
+ import "../chunk-7DLODFQK.mjs";
28
+ import "../chunk-MB23XAVD.mjs";
29
+ import "../chunk-IRVUYBSV.mjs";
30
30
  import "../chunk-3RNW7OKG.mjs";
31
31
  import "../chunk-ZVOYOZFT.mjs";
32
32
  import "../chunk-6EZSNS4O.mjs";
33
33
  import "../chunk-4HVWEABQ.mjs";
34
- import "../chunk-36YC4Z3T.mjs";
35
- import "../chunk-VOZOZKRC.mjs";
34
+ import "../chunk-GTDDODNP.mjs";
35
+ import "../chunk-XO7KDFBY.mjs";
36
36
  import "../chunk-YRZVIDCF.mjs";
37
37
  export {
38
38
  CronjobController,
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkMYWDTEX2js = require('./chunk-MYWDTEX2.js');
4
+ var _chunkGRBWVPLFjs = require('./chunk-GRBWVPLF.js');
5
5
  require('./chunk-JAUAKTUL.js');
6
6
 
7
7
 
@@ -9,7 +9,7 @@ require('./chunk-JAUAKTUL.js');
9
9
 
10
10
 
11
11
 
12
- var _chunkCJN25EXLjs = require('./chunk-CJN25EXL.js');
12
+ var _chunkJMP6XYRLjs = require('./chunk-JMP6XYRL.js');
13
13
  require('./chunk-WEY7ICES.js');
14
14
 
15
15
 
@@ -43,26 +43,26 @@ var _chunkYYPUPKQYjs = require('./chunk-YYPUPKQY.js');
43
43
  require('./chunk-VNOCJWOK.js');
44
44
 
45
45
 
46
- var _chunkQ2ON6SMVjs = require('./chunk-Q2ON6SMV.js');
46
+ var _chunkGZ3RVSUAjs = require('./chunk-GZ3RVSUA.js');
47
47
  require('./chunk-KLK7ZRMH.js');
48
48
  require('./chunk-4URGXJP7.js');
49
49
  require('./chunk-OHMCPTOI.js');
50
50
  require('./chunk-D74XJG2L.js');
51
51
 
52
52
 
53
- var _chunk3ZC4LB7Tjs = require('./chunk-3ZC4LB7T.js');
53
+ var _chunkFOT4VRMQjs = require('./chunk-FOT4VRMQ.js');
54
54
  require('./chunk-HOY6NKQR.js');
55
55
 
56
56
 
57
- var _chunkZ6SOB3SYjs = require('./chunk-Z6SOB3SY.js');
57
+ var _chunkABKWEVW4js = require('./chunk-ABKWEVW4.js');
58
58
 
59
59
 
60
- var _chunkWQYMF7QPjs = require('./chunk-WQYMF7QP.js');
61
- require('./chunk-NSLYI2LS.js');
60
+ var _chunkCXT7XBMNjs = require('./chunk-CXT7XBMN.js');
61
+ require('./chunk-M2NMZ4ER.js');
62
62
 
63
63
 
64
64
 
65
- var _chunk54TYYPANjs = require('./chunk-54TYYPAN.js');
65
+ var _chunkJZCXZEFVjs = require('./chunk-JZCXZEFV.js');
66
66
  require('./chunk-OIEUL55W.js');
67
67
 
68
68
 
@@ -77,8 +77,9 @@ require('./chunk-NXZVKBSV.js');
77
77
 
78
78
 
79
79
 
80
- var _chunkXE5IWVNVjs = require('./chunk-XE5IWVNV.js');
81
- require('./chunk-NOLPMHXS.js');
80
+
81
+ var _chunk4DPX4O3Tjs = require('./chunk-4DPX4O3T.js');
82
+ require('./chunk-BOFPNIRX.js');
82
83
  require('./chunk-EXN2TFDJ.js');
83
84
 
84
85
 
@@ -114,5 +115,6 @@ require('./chunk-EXN2TFDJ.js');
114
115
 
115
116
 
116
117
 
117
- exports.AbstractExecutionService = _chunk54TYYPANjs.AbstractExecutionService; exports.BaseNpmLocation = _chunkXWDEGRM5js.BaseNpmLocation; exports.CronjobController = _chunkMYWDTEX2js.CronjobController; exports.DAILY_TIMEOUT = _chunkMYWDTEX2js.DAILY_TIMEOUT; exports.DEFAULT_NPM_REGISTRY = _chunkXWDEGRM5js.DEFAULT_NPM_REGISTRY; exports.HttpLocation = _chunkRDBT3ZJQjs.HttpLocation; exports.IframeExecutionService = _chunkZ6SOB3SYjs.IframeExecutionService; exports.JsonSnapsRegistry = _chunkCPUUURMTjs.JsonSnapsRegistry; exports.LocalLocation = _chunkLWBPKSU2js.LocalLocation; exports.NpmLocation = _chunkXWDEGRM5js.NpmLocation; exports.OffscreenExecutionService = _chunkWQYMF7QPjs.OffscreenExecutionService; exports.ProxyPostMessageStream = _chunk7Y6P5FRNjs.ProxyPostMessageStream; exports.SNAP_APPROVAL_INSTALL = _chunkCJN25EXLjs.SNAP_APPROVAL_INSTALL; exports.SNAP_APPROVAL_RESULT = _chunkCJN25EXLjs.SNAP_APPROVAL_RESULT; exports.SNAP_APPROVAL_UPDATE = _chunkCJN25EXLjs.SNAP_APPROVAL_UPDATE; exports.SnapController = _chunkCJN25EXLjs.SnapController; exports.SnapInterfaceController = _chunkQ2ON6SMVjs.SnapInterfaceController; exports.SnapsRegistryStatus = _chunk4CA3O64Hjs.SnapsRegistryStatus; exports.TARBALL_SIZE_SAFETY_LIMIT = _chunkXWDEGRM5js.TARBALL_SIZE_SAFETY_LIMIT; exports.WebWorkerExecutionService = _chunk3ZC4LB7Tjs.WebWorkerExecutionService; exports.controllerName = _chunkCJN25EXLjs.controllerName; exports.delay = _chunkXE5IWVNVjs.delay; exports.delayWithTimer = _chunkXE5IWVNVjs.delayWithTimer; exports.detectSnapLocation = _chunkPT22IXNSjs.detectSnapLocation; exports.fetchNpmMetadata = _chunkXWDEGRM5js.fetchNpmMetadata; exports.fetchSnap = _chunkXE5IWVNVjs.fetchSnap; exports.getNpmCanonicalBasePath = _chunkXWDEGRM5js.getNpmCanonicalBasePath; exports.getRunnableSnaps = _chunkYYPUPKQYjs.getRunnableSnaps; exports.getSnapFiles = _chunkXE5IWVNVjs.getSnapFiles; exports.hasTimedOut = _chunkXE5IWVNVjs.hasTimedOut; exports.setDiff = _chunkXE5IWVNVjs.setDiff; exports.setupMultiplex = _chunk54TYYPANjs.setupMultiplex; exports.withTimeout = _chunkXE5IWVNVjs.withTimeout;
118
+
119
+ exports.AbstractExecutionService = _chunkJZCXZEFVjs.AbstractExecutionService; exports.BaseNpmLocation = _chunkXWDEGRM5js.BaseNpmLocation; exports.CronjobController = _chunkGRBWVPLFjs.CronjobController; exports.DAILY_TIMEOUT = _chunkGRBWVPLFjs.DAILY_TIMEOUT; exports.DEFAULT_NPM_REGISTRY = _chunkXWDEGRM5js.DEFAULT_NPM_REGISTRY; exports.HttpLocation = _chunkRDBT3ZJQjs.HttpLocation; exports.IframeExecutionService = _chunkABKWEVW4js.IframeExecutionService; exports.JsonSnapsRegistry = _chunkCPUUURMTjs.JsonSnapsRegistry; exports.LocalLocation = _chunkLWBPKSU2js.LocalLocation; exports.NpmLocation = _chunkXWDEGRM5js.NpmLocation; exports.OffscreenExecutionService = _chunkCXT7XBMNjs.OffscreenExecutionService; exports.ProxyPostMessageStream = _chunk7Y6P5FRNjs.ProxyPostMessageStream; exports.SNAP_APPROVAL_INSTALL = _chunkJMP6XYRLjs.SNAP_APPROVAL_INSTALL; exports.SNAP_APPROVAL_RESULT = _chunkJMP6XYRLjs.SNAP_APPROVAL_RESULT; exports.SNAP_APPROVAL_UPDATE = _chunkJMP6XYRLjs.SNAP_APPROVAL_UPDATE; exports.SnapController = _chunkJMP6XYRLjs.SnapController; exports.SnapInterfaceController = _chunkGZ3RVSUAjs.SnapInterfaceController; exports.SnapsRegistryStatus = _chunk4CA3O64Hjs.SnapsRegistryStatus; exports.TARBALL_SIZE_SAFETY_LIMIT = _chunkXWDEGRM5js.TARBALL_SIZE_SAFETY_LIMIT; exports.WebWorkerExecutionService = _chunkFOT4VRMQjs.WebWorkerExecutionService; exports.controllerName = _chunkJMP6XYRLjs.controllerName; exports.delay = _chunk4DPX4O3Tjs.delay; exports.delayWithTimer = _chunk4DPX4O3Tjs.delayWithTimer; exports.detectSnapLocation = _chunkPT22IXNSjs.detectSnapLocation; exports.fetchNpmMetadata = _chunkXWDEGRM5js.fetchNpmMetadata; exports.fetchSnap = _chunk4DPX4O3Tjs.fetchSnap; exports.getNpmCanonicalBasePath = _chunkXWDEGRM5js.getNpmCanonicalBasePath; exports.getRunnableSnaps = _chunkYYPUPKQYjs.getRunnableSnaps; exports.getSnapFiles = _chunk4DPX4O3Tjs.getSnapFiles; exports.hasTimedOut = _chunk4DPX4O3Tjs.hasTimedOut; exports.permissionsDiff = _chunk4DPX4O3Tjs.permissionsDiff; exports.setDiff = _chunk4DPX4O3Tjs.setDiff; exports.setupMultiplex = _chunkJZCXZEFVjs.setupMultiplex; exports.withTimeout = _chunk4DPX4O3Tjs.withTimeout;
118
120
  //# sourceMappingURL=index.js.map