@metamask/snaps-controllers 0.35.1-flask.1 → 1.0.0-prerelease.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -40
- package/dist/{types/cronjob → cronjob}/CronjobController.d.ts +3 -3
- package/dist/cronjob/CronjobController.js +248 -0
- package/dist/cronjob/CronjobController.js.map +1 -0
- package/dist/cronjob/index.js +18 -0
- package/dist/cronjob/index.js.map +1 -0
- package/dist/fsm.js +75 -0
- package/dist/fsm.js.map +1 -0
- package/dist/{types/index.d.ts → index.d.ts} +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/logging.js +13 -0
- package/dist/logging.js.map +1 -0
- package/dist/multichain/MultiChainController.d.ts +137 -0
- package/dist/multichain/MultiChainController.js +339 -0
- package/dist/multichain/MultiChainController.js.map +1 -0
- package/dist/multichain/index.d.ts +3 -0
- package/dist/multichain/index.js +20 -0
- package/dist/multichain/index.js.map +1 -0
- package/dist/multichain/matching.d.ts +9 -0
- package/dist/multichain/matching.js +57 -0
- package/dist/multichain/matching.js.map +1 -0
- package/dist/multichain/middleware.d.ts +14 -0
- package/dist/multichain/middleware.js +42 -0
- package/dist/multichain/middleware.js.map +1 -0
- package/dist/services/AbstractExecutionService.js +318 -0
- package/dist/services/AbstractExecutionService.js.map +1 -0
- package/dist/services/ExecutionService.js +4 -0
- package/dist/services/ExecutionService.js.map +1 -0
- package/dist/{types/services → services}/browser.d.ts +0 -2
- package/dist/services/browser.js +22 -0
- package/dist/services/browser.js.map +1 -0
- package/dist/services/iframe/IframeExecutionService.js +30 -0
- package/dist/services/iframe/IframeExecutionService.js.map +1 -0
- package/dist/services/iframe/index.js +18 -0
- package/dist/services/iframe/index.js.map +1 -0
- package/dist/{types/services → services}/index.d.ts +0 -2
- package/dist/services/index.js +22 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/node/NodeProcessExecutionService.js +18 -0
- package/dist/services/node/NodeProcessExecutionService.js.map +1 -0
- package/dist/services/node/NodeThreadExecutionService.js +19 -0
- package/dist/services/node/NodeThreadExecutionService.js.map +1 -0
- package/dist/services/node/index.js +19 -0
- package/dist/services/node/index.js.map +1 -0
- package/dist/{types/services → services}/offscreen/OffscreenExecutionService.d.ts +2 -2
- package/dist/services/offscreen/OffscreenExecutionService.js +100 -0
- package/dist/services/offscreen/OffscreenExecutionService.js.map +1 -0
- package/dist/{types/services/ProxyPostMessageStream.d.ts → services/offscreen/OffscreenPostMessageStream.d.ts} +9 -9
- package/dist/services/offscreen/OffscreenPostMessageStream.js +66 -0
- package/dist/services/offscreen/OffscreenPostMessageStream.js.map +1 -0
- package/dist/services/offscreen/index.d.ts +2 -0
- package/dist/services/offscreen/index.js +19 -0
- package/dist/services/offscreen/index.js.map +1 -0
- package/dist/snaps/RequestQueue.js +44 -0
- package/dist/snaps/RequestQueue.js.map +1 -0
- package/dist/{types/snaps → snaps}/SnapController.d.ts +22 -33
- package/dist/snaps/SnapController.js +1497 -0
- package/dist/snaps/SnapController.js.map +1 -0
- package/dist/snaps/Timer.js +86 -0
- package/dist/snaps/Timer.js.map +1 -0
- package/dist/snaps/endowments/cronjob.js +105 -0
- package/dist/{cjs/snaps → snaps}/endowments/cronjob.js.map +1 -1
- package/dist/{types/snaps → snaps}/endowments/enum.d.ts +1 -0
- package/dist/snaps/endowments/enum.js +15 -0
- package/dist/snaps/endowments/enum.js.map +1 -0
- package/dist/snaps/endowments/ethereum-provider.js +32 -0
- package/dist/snaps/endowments/ethereum-provider.js.map +1 -0
- package/dist/{types/snaps → snaps}/endowments/index.d.ts +12 -0
- package/dist/snaps/endowments/index.js +60 -0
- package/dist/snaps/endowments/index.js.map +1 -0
- package/dist/snaps/endowments/keyring.d.ts +40 -0
- package/dist/snaps/endowments/keyring.js +103 -0
- package/dist/snaps/endowments/keyring.js.map +1 -0
- package/dist/snaps/endowments/long-running.js +29 -0
- package/dist/snaps/endowments/long-running.js.map +1 -0
- package/dist/snaps/endowments/network-access.js +30 -0
- package/dist/snaps/endowments/network-access.js.map +1 -0
- package/dist/snaps/endowments/rpc.js +92 -0
- package/dist/snaps/endowments/rpc.js.map +1 -0
- package/dist/snaps/endowments/transaction-insight.js +106 -0
- package/dist/snaps/endowments/transaction-insight.js.map +1 -0
- package/dist/snaps/endowments/web-assembly.js +31 -0
- package/dist/snaps/endowments/web-assembly.js.map +1 -0
- package/dist/{types/snaps → snaps}/index.d.ts +0 -2
- package/dist/snaps/index.js +21 -0
- package/dist/snaps/index.js.map +1 -0
- package/dist/{esm/snaps → snaps}/location/http.js +31 -52
- package/dist/snaps/location/http.js.map +1 -0
- package/dist/snaps/location/index.js +21 -0
- package/dist/snaps/location/index.js.map +1 -0
- package/dist/snaps/location/local.js +51 -0
- package/dist/snaps/location/local.js.map +1 -0
- package/dist/snaps/location/location.js +34 -0
- package/dist/snaps/location/location.js.map +1 -0
- package/dist/{types/snaps → snaps}/location/npm.d.ts +0 -20
- package/dist/{esm/snaps → snaps}/location/npm.js +117 -141
- package/dist/snaps/location/npm.js.map +1 -0
- package/dist/snaps/registry/index.js +19 -0
- package/dist/snaps/registry/index.js.map +1 -0
- package/dist/snaps/registry/json.js +170 -0
- package/dist/snaps/registry/json.js.map +1 -0
- package/dist/{types/snaps → snaps}/registry/registry.d.ts +3 -3
- package/dist/snaps/registry/registry.js +11 -0
- package/dist/snaps/registry/registry.js.map +1 -0
- package/dist/snaps/selectors.js +6 -0
- package/dist/snaps/selectors.js.map +1 -0
- package/dist/{esm/utils.js → utils.js} +28 -19
- package/dist/utils.js.map +1 -0
- package/package.json +25 -74
- package/dist/cjs/cronjob/CronjobController.js +0 -290
- package/dist/cjs/cronjob/CronjobController.js.map +0 -1
- package/dist/cjs/cronjob/index.js +0 -20
- package/dist/cjs/cronjob/index.js.map +0 -1
- package/dist/cjs/fsm.js +0 -69
- package/dist/cjs/fsm.js.map +0 -1
- package/dist/cjs/index.js +0 -23
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/logging.js +0 -15
- package/dist/cjs/logging.js.map +0 -1
- package/dist/cjs/services/AbstractExecutionService.js +0 -404
- package/dist/cjs/services/AbstractExecutionService.js.map +0 -1
- package/dist/cjs/services/ExecutionService.js +0 -7
- package/dist/cjs/services/ExecutionService.js.map +0 -1
- package/dist/cjs/services/ProxyPostMessageStream.js +0 -116
- package/dist/cjs/services/ProxyPostMessageStream.js.map +0 -1
- package/dist/cjs/services/browser.js +0 -32
- package/dist/cjs/services/browser.js.map +0 -1
- package/dist/cjs/services/iframe/IframeExecutionService.js +0 -54
- package/dist/cjs/services/iframe/IframeExecutionService.js.map +0 -1
- package/dist/cjs/services/iframe/index.js +0 -20
- package/dist/cjs/services/iframe/index.js.map +0 -1
- package/dist/cjs/services/index.js +0 -32
- package/dist/cjs/services/index.js.map +0 -1
- package/dist/cjs/services/node/NodeProcessExecutionService.js +0 -30
- package/dist/cjs/services/node/NodeProcessExecutionService.js.map +0 -1
- package/dist/cjs/services/node/NodeThreadExecutionService.js +0 -30
- package/dist/cjs/services/node/NodeThreadExecutionService.js.map +0 -1
- package/dist/cjs/services/node/index.js +0 -21
- package/dist/cjs/services/node/index.js.map +0 -1
- package/dist/cjs/services/offscreen/OffscreenExecutionService.js +0 -159
- package/dist/cjs/services/offscreen/OffscreenExecutionService.js.map +0 -1
- package/dist/cjs/services/offscreen/index.js +0 -20
- package/dist/cjs/services/offscreen/index.js.map +0 -1
- package/dist/cjs/services/webworker/WebWorkerExecutionService.js +0 -148
- package/dist/cjs/services/webworker/WebWorkerExecutionService.js.map +0 -1
- package/dist/cjs/services/webworker/index.js +0 -20
- package/dist/cjs/services/webworker/index.js.map +0 -1
- package/dist/cjs/snaps/RequestQueue.js +0 -63
- package/dist/cjs/snaps/RequestQueue.js.map +0 -1
- package/dist/cjs/snaps/SnapController.js +0 -1708
- package/dist/cjs/snaps/SnapController.js.map +0 -1
- package/dist/cjs/snaps/Timer.js +0 -117
- package/dist/cjs/snaps/Timer.js.map +0 -1
- package/dist/cjs/snaps/endowments/cronjob.js +0 -100
- package/dist/cjs/snaps/endowments/enum.js +0 -22
- package/dist/cjs/snaps/endowments/enum.js.map +0 -1
- package/dist/cjs/snaps/endowments/ethereum-provider.js +0 -43
- package/dist/cjs/snaps/endowments/ethereum-provider.js.map +0 -1
- package/dist/cjs/snaps/endowments/index.js +0 -78
- package/dist/cjs/snaps/endowments/index.js.map +0 -1
- package/dist/cjs/snaps/endowments/long-running.js +0 -38
- package/dist/cjs/snaps/endowments/long-running.js.map +0 -1
- package/dist/cjs/snaps/endowments/network-access.js +0 -44
- package/dist/cjs/snaps/endowments/network-access.js.map +0 -1
- package/dist/cjs/snaps/endowments/rpc.js +0 -99
- package/dist/cjs/snaps/endowments/rpc.js.map +0 -1
- package/dist/cjs/snaps/endowments/transaction-insight.js +0 -106
- package/dist/cjs/snaps/endowments/transaction-insight.js.map +0 -1
- package/dist/cjs/snaps/endowments/web-assembly.js +0 -42
- package/dist/cjs/snaps/endowments/web-assembly.js.map +0 -1
- package/dist/cjs/snaps/index.js +0 -25
- package/dist/cjs/snaps/index.js.map +0 -1
- package/dist/cjs/snaps/location/http.js +0 -106
- package/dist/cjs/snaps/location/http.js.map +0 -1
- package/dist/cjs/snaps/location/index.js +0 -23
- package/dist/cjs/snaps/location/index.js.map +0 -1
- package/dist/cjs/snaps/location/local.js +0 -93
- package/dist/cjs/snaps/location/local.js.map +0 -1
- package/dist/cjs/snaps/location/location.js +0 -34
- package/dist/cjs/snaps/location/location.js.map +0 -1
- package/dist/cjs/snaps/location/npm.js +0 -291
- package/dist/cjs/snaps/location/npm.js.map +0 -1
- package/dist/cjs/snaps/permissions.js +0 -61
- package/dist/cjs/snaps/permissions.js.map +0 -1
- package/dist/cjs/snaps/registry/index.js +0 -21
- package/dist/cjs/snaps/registry/index.js.map +0 -1
- package/dist/cjs/snaps/registry/json.js +0 -249
- package/dist/cjs/snaps/registry/json.js.map +0 -1
- package/dist/cjs/snaps/registry/registry.js +0 -18
- package/dist/cjs/snaps/registry/registry.js.map +0 -1
- package/dist/cjs/snaps/selectors.js +0 -13
- package/dist/cjs/snaps/selectors.js.map +0 -1
- package/dist/cjs/utils.js +0 -70
- package/dist/cjs/utils.js.map +0 -1
- package/dist/esm/cronjob/CronjobController.js +0 -275
- package/dist/esm/cronjob/CronjobController.js.map +0 -1
- package/dist/esm/cronjob/index.js +0 -3
- package/dist/esm/cronjob/index.js.map +0 -1
- package/dist/esm/fsm.js +0 -70
- package/dist/esm/fsm.js.map +0 -1
- package/dist/esm/index.js +0 -6
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/logging.js +0 -10
- package/dist/esm/logging.js.map +0 -1
- package/dist/esm/services/AbstractExecutionService.js +0 -387
- package/dist/esm/services/AbstractExecutionService.js.map +0 -1
- package/dist/esm/services/ExecutionService.js +0 -4
- package/dist/esm/services/ExecutionService.js.map +0 -1
- package/dist/esm/services/ProxyPostMessageStream.js +0 -109
- package/dist/esm/services/ProxyPostMessageStream.js.map +0 -1
- package/dist/esm/services/browser.js +0 -9
- package/dist/esm/services/browser.js.map +0 -1
- package/dist/esm/services/iframe/IframeExecutionService.js +0 -44
- package/dist/esm/services/iframe/IframeExecutionService.js.map +0 -1
- package/dist/esm/services/iframe/index.js +0 -3
- package/dist/esm/services/iframe/index.js.map +0 -1
- package/dist/esm/services/index.js +0 -9
- package/dist/esm/services/index.js.map +0 -1
- package/dist/esm/services/node/NodeProcessExecutionService.js +0 -20
- package/dist/esm/services/node/NodeProcessExecutionService.js.map +0 -1
- package/dist/esm/services/node/NodeThreadExecutionService.js +0 -21
- package/dist/esm/services/node/NodeThreadExecutionService.js.map +0 -1
- package/dist/esm/services/node/index.js +0 -4
- package/dist/esm/services/node/index.js.map +0 -1
- package/dist/esm/services/offscreen/OffscreenExecutionService.js +0 -149
- package/dist/esm/services/offscreen/OffscreenExecutionService.js.map +0 -1
- package/dist/esm/services/offscreen/index.js +0 -3
- package/dist/esm/services/offscreen/index.js.map +0 -1
- package/dist/esm/services/webworker/WebWorkerExecutionService.js +0 -130
- package/dist/esm/services/webworker/WebWorkerExecutionService.js.map +0 -1
- package/dist/esm/services/webworker/index.js +0 -3
- package/dist/esm/services/webworker/index.js.map +0 -1
- package/dist/esm/snaps/RequestQueue.js +0 -53
- package/dist/esm/snaps/RequestQueue.js.map +0 -1
- package/dist/esm/snaps/SnapController.js +0 -1687
- package/dist/esm/snaps/SnapController.js.map +0 -1
- package/dist/esm/snaps/Timer.js +0 -107
- package/dist/esm/snaps/Timer.js.map +0 -1
- package/dist/esm/snaps/endowments/cronjob.js +0 -99
- package/dist/esm/snaps/endowments/cronjob.js.map +0 -1
- package/dist/esm/snaps/endowments/enum.js +0 -12
- package/dist/esm/snaps/endowments/enum.js.map +0 -1
- package/dist/esm/snaps/endowments/ethereum-provider.js +0 -33
- package/dist/esm/snaps/endowments/ethereum-provider.js.map +0 -1
- package/dist/esm/snaps/endowments/index.js +0 -37
- package/dist/esm/snaps/endowments/index.js.map +0 -1
- package/dist/esm/snaps/endowments/long-running.js +0 -28
- package/dist/esm/snaps/endowments/long-running.js.map +0 -1
- package/dist/esm/snaps/endowments/network-access.js +0 -34
- package/dist/esm/snaps/endowments/network-access.js.map +0 -1
- package/dist/esm/snaps/endowments/rpc.js +0 -88
- package/dist/esm/snaps/endowments/rpc.js.map +0 -1
- package/dist/esm/snaps/endowments/transaction-insight.js +0 -99
- package/dist/esm/snaps/endowments/transaction-insight.js.map +0 -1
- package/dist/esm/snaps/endowments/web-assembly.js +0 -32
- package/dist/esm/snaps/endowments/web-assembly.js.map +0 -1
- package/dist/esm/snaps/index.js +0 -8
- package/dist/esm/snaps/index.js.map +0 -1
- package/dist/esm/snaps/location/http.js.map +0 -1
- package/dist/esm/snaps/location/index.js +0 -6
- package/dist/esm/snaps/location/index.js.map +0 -1
- package/dist/esm/snaps/location/local.js +0 -83
- package/dist/esm/snaps/location/local.js.map +0 -1
- package/dist/esm/snaps/location/location.js +0 -30
- package/dist/esm/snaps/location/location.js.map +0 -1
- package/dist/esm/snaps/location/npm.js.map +0 -1
- package/dist/esm/snaps/permissions.js +0 -50
- package/dist/esm/snaps/permissions.js.map +0 -1
- package/dist/esm/snaps/registry/index.js +0 -4
- package/dist/esm/snaps/registry/index.js.map +0 -1
- package/dist/esm/snaps/registry/json.js +0 -239
- package/dist/esm/snaps/registry/json.js.map +0 -1
- package/dist/esm/snaps/registry/registry.js +0 -8
- package/dist/esm/snaps/registry/registry.js.map +0 -1
- package/dist/esm/snaps/selectors.js +0 -3
- package/dist/esm/snaps/selectors.js.map +0 -1
- package/dist/esm/utils.js.map +0 -1
- package/dist/types/services/offscreen/index.d.ts +0 -1
- package/dist/types/services/webworker/WebWorkerExecutionService.d.ts +0 -44
- package/dist/types/services/webworker/index.d.ts +0 -1
- package/dist/types/snaps/permissions.d.ts +0 -16
- /package/dist/{types/cronjob → cronjob}/index.d.ts +0 -0
- /package/dist/{types/fsm.d.ts → fsm.d.ts} +0 -0
- /package/dist/{types/logging.d.ts → logging.d.ts} +0 -0
- /package/dist/{types/services → services}/AbstractExecutionService.d.ts +0 -0
- /package/dist/{types/services → services}/ExecutionService.d.ts +0 -0
- /package/dist/{types/services → services}/iframe/IframeExecutionService.d.ts +0 -0
- /package/dist/{types/services → services}/iframe/index.d.ts +0 -0
- /package/dist/{types/services → services}/node/NodeProcessExecutionService.d.ts +0 -0
- /package/dist/{types/services → services}/node/NodeThreadExecutionService.d.ts +0 -0
- /package/dist/{types/services → services}/node/index.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/RequestQueue.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/Timer.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/endowments/cronjob.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/endowments/ethereum-provider.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/endowments/long-running.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/endowments/network-access.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/endowments/rpc.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/endowments/transaction-insight.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/endowments/web-assembly.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/location/http.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/location/index.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/location/local.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/location/location.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/registry/index.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/registry/json.d.ts +0 -0
- /package/dist/{types/snaps → snaps}/selectors.d.ts +0 -0
- /package/dist/{types/utils.d.ts → utils.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeThreadExecutionService.js","sourceRoot":"","sources":["../../../src/services/node/NodeThreadExecutionService.ts"],"names":[],"mappings":";;;AAAA,uEAGuC;AACvC,wDAAwD;AACxD,mDAAwC;AAExC,0BAAmD;AAEnD,MAAa,0BAA2B,SAAQ,4BAAgC;IACpE,KAAK,CAAC,aAAa;QAI3B,MAAM,MAAM,GAAG,IAAI,uBAAM,CACvB,OAAO,CAAC,OAAO,CACb,8EAA8E,CAC/E,CACF,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,+CAAyB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,UAAuB;QAClD,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC;CACF;AAjBD,gEAiBC","sourcesContent":["import {\n ThreadParentMessageStream,\n BasePostMessageStream,\n} from '@metamask/post-message-stream';\n// eslint-disable-next-line @typescript-eslint/no-shadow\nimport { Worker } from 'worker_threads';\n\nimport { AbstractExecutionService, Job } from '..';\n\nexport class NodeThreadExecutionService extends AbstractExecutionService<Worker> {\n protected async initEnvStream(): Promise<{\n worker: Worker;\n stream: BasePostMessageStream;\n }> {\n const worker = new Worker(\n require.resolve(\n '@metamask/snaps-execution-environments/dist/browserify/node-thread/bundle.js',\n ),\n );\n const stream = new ThreadParentMessageStream({ thread: worker });\n return Promise.resolve({ worker, stream });\n }\n\n protected async terminateJob(jobWrapper: Job<Worker>): Promise<void> {\n await jobWrapper.worker.terminate();\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./NodeProcessExecutionService"), exports);
|
|
18
|
+
__exportStar(require("./NodeThreadExecutionService"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/node/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,+DAA6C","sourcesContent":["export * from './NodeProcessExecutionService';\nexport * from './NodeThreadExecutionService';\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AbstractExecutionService, ExecutionServiceArgs, Job } from '../AbstractExecutionService';
|
|
2
|
-
import {
|
|
2
|
+
import { OffscreenPostMessageStream } from './OffscreenPostMessageStream';
|
|
3
3
|
declare type OffscreenExecutionEnvironmentServiceArgs = {
|
|
4
4
|
documentUrl: URL;
|
|
5
5
|
frameUrl: URL;
|
|
@@ -37,7 +37,7 @@ export declare class OffscreenExecutionService extends AbstractExecutionService<
|
|
|
37
37
|
*/
|
|
38
38
|
protected initEnvStream(jobId: string): Promise<{
|
|
39
39
|
worker: string;
|
|
40
|
-
stream:
|
|
40
|
+
stream: OffscreenPostMessageStream;
|
|
41
41
|
}>;
|
|
42
42
|
/**
|
|
43
43
|
* Creates the offscreen document to be used as the execution environment.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _OffscreenExecutionService_runtimeStream;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.OffscreenExecutionService = void 0;
|
|
16
|
+
const post_message_stream_1 = require("@metamask/post-message-stream");
|
|
17
|
+
const nanoid_1 = require("nanoid");
|
|
18
|
+
const AbstractExecutionService_1 = require("../AbstractExecutionService");
|
|
19
|
+
const OffscreenPostMessageStream_1 = require("./OffscreenPostMessageStream");
|
|
20
|
+
class OffscreenExecutionService extends AbstractExecutionService_1.AbstractExecutionService {
|
|
21
|
+
/**
|
|
22
|
+
* Create a new offscreen execution service.
|
|
23
|
+
*
|
|
24
|
+
* @param args - The constructor arguments.
|
|
25
|
+
* @param args.documentUrl - The URL of the offscreen document to use as the
|
|
26
|
+
* execution environment. This must be a URL relative to the location where
|
|
27
|
+
* this is called. This cannot be a public (http(s)) URL.
|
|
28
|
+
* @param args.frameUrl - The URL of the iframe to load inside the offscreen
|
|
29
|
+
* document.
|
|
30
|
+
* @param args.messenger - The messenger to use for communication with the
|
|
31
|
+
* `SnapController`.
|
|
32
|
+
* @param args.setupSnapProvider - The function to use to set up the snap
|
|
33
|
+
* provider.
|
|
34
|
+
*/
|
|
35
|
+
constructor({ documentUrl, frameUrl, messenger, setupSnapProvider, }) {
|
|
36
|
+
super({
|
|
37
|
+
messenger,
|
|
38
|
+
setupSnapProvider,
|
|
39
|
+
});
|
|
40
|
+
_OffscreenExecutionService_runtimeStream.set(this, void 0);
|
|
41
|
+
this.documentUrl = documentUrl;
|
|
42
|
+
this.frameUrl = frameUrl;
|
|
43
|
+
__classPrivateFieldSet(this, _OffscreenExecutionService_runtimeStream, new post_message_stream_1.BrowserRuntimePostMessageStream({
|
|
44
|
+
name: 'parent',
|
|
45
|
+
target: 'child',
|
|
46
|
+
}), "f");
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Send a termination command to the offscreen document.
|
|
50
|
+
*
|
|
51
|
+
* @param job - The job to terminate.
|
|
52
|
+
*/
|
|
53
|
+
async terminateJob(job) {
|
|
54
|
+
// The `AbstractExecutionService` will have already closed the job stream,
|
|
55
|
+
// so we write to the runtime stream directly.
|
|
56
|
+
__classPrivateFieldGet(this, _OffscreenExecutionService_runtimeStream, "f").write({
|
|
57
|
+
jobId: job.id,
|
|
58
|
+
data: {
|
|
59
|
+
jsonrpc: '2.0',
|
|
60
|
+
method: 'terminateJob',
|
|
61
|
+
id: (0, nanoid_1.nanoid)(),
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Create a new stream for the specified job. This wraps the runtime stream
|
|
67
|
+
* in a stream specific to the job.
|
|
68
|
+
*
|
|
69
|
+
* @param jobId - The job ID.
|
|
70
|
+
*/
|
|
71
|
+
async initEnvStream(jobId) {
|
|
72
|
+
// Lazily create the offscreen document.
|
|
73
|
+
await this.createDocument();
|
|
74
|
+
const stream = new OffscreenPostMessageStream_1.OffscreenPostMessageStream({
|
|
75
|
+
stream: __classPrivateFieldGet(this, _OffscreenExecutionService_runtimeStream, "f"),
|
|
76
|
+
frameUrl: this.frameUrl.toString(),
|
|
77
|
+
jobId,
|
|
78
|
+
});
|
|
79
|
+
return { worker: jobId, stream };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Creates the offscreen document to be used as the execution environment.
|
|
83
|
+
*
|
|
84
|
+
* If the document already exists, this does nothing.
|
|
85
|
+
*/
|
|
86
|
+
async createDocument() {
|
|
87
|
+
// Extensions can only have a single offscreen document.
|
|
88
|
+
if (await chrome.offscreen.hasDocument()) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
await chrome.offscreen.createDocument({
|
|
92
|
+
justification: 'MetaMask Snaps Execution Environment',
|
|
93
|
+
reasons: ['IFRAME_SCRIPTING'],
|
|
94
|
+
url: this.documentUrl.toString(),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.OffscreenExecutionService = OffscreenExecutionService;
|
|
99
|
+
_OffscreenExecutionService_runtimeStream = new WeakMap();
|
|
100
|
+
//# sourceMappingURL=OffscreenExecutionService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OffscreenExecutionService.js","sourceRoot":"","sources":["../../../src/services/offscreen/OffscreenExecutionService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uEAAgF;AAChF,mCAAgC;AAEhC,0EAIqC;AACrC,6EAA0E;AAO1E,MAAa,yBAA0B,SAAQ,mDAAgC;IAO7E;;;;;;;;;;;;;OAaG;IACH,YAAY,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,iBAAiB,GACwB;QACzC,KAAK,CAAC;YACJ,SAAS;YACT,iBAAiB;SAClB,CAAC,CAAC;QAzBL,2DAAyD;QA2BvD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,uBAAA,IAAI,4CAAkB,IAAI,qDAA+B,CAAC;YACxD,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;SAChB,CAAC,MAAA,CAAC;IACL,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,YAAY,CAAC,GAAgB;QAC3C,0EAA0E;QAC1E,8CAA8C;QAC9C,uBAAA,IAAI,gDAAe,CAAC,KAAK,CAAC;YACxB,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,IAAI,EAAE;gBACJ,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,cAAc;gBACtB,EAAE,EAAE,IAAA,eAAM,GAAE;aACb;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,aAAa,CAAC,KAAa;QACzC,wCAAwC;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,IAAI,uDAA0B,CAAC;YAC5C,MAAM,EAAE,uBAAA,IAAI,gDAAe;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAClC,KAAK;SACN,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,cAAc;QAC1B,wDAAwD;QACxD,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;YACxC,OAAO;SACR;QAED,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;YACpC,aAAa,EAAE,sCAAsC;YACrD,OAAO,EAAE,CAAC,kBAAkB,CAAC;YAC7B,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;SACjC,CAAC,CAAC;IACL,CAAC;CACF;AA9FD,8DA8FC","sourcesContent":["import { BrowserRuntimePostMessageStream } from '@metamask/post-message-stream';\nimport { nanoid } from 'nanoid';\n\nimport {\n AbstractExecutionService,\n ExecutionServiceArgs,\n Job,\n} from '../AbstractExecutionService';\nimport { OffscreenPostMessageStream } from './OffscreenPostMessageStream';\n\ntype OffscreenExecutionEnvironmentServiceArgs = {\n documentUrl: URL;\n frameUrl: URL;\n} & ExecutionServiceArgs;\n\nexport class OffscreenExecutionService extends AbstractExecutionService<string> {\n public readonly documentUrl: URL;\n\n public readonly frameUrl: URL;\n\n readonly #runtimeStream: BrowserRuntimePostMessageStream;\n\n /**\n * Create a new offscreen execution service.\n *\n * @param args - The constructor arguments.\n * @param args.documentUrl - The URL of the offscreen document to use as the\n * execution environment. This must be a URL relative to the location where\n * this is called. This cannot be a public (http(s)) URL.\n * @param args.frameUrl - The URL of the iframe to load inside the offscreen\n * document.\n * @param args.messenger - The messenger to use for communication with the\n * `SnapController`.\n * @param args.setupSnapProvider - The function to use to set up the snap\n * provider.\n */\n constructor({\n documentUrl,\n frameUrl,\n messenger,\n setupSnapProvider,\n }: OffscreenExecutionEnvironmentServiceArgs) {\n super({\n messenger,\n setupSnapProvider,\n });\n\n this.documentUrl = documentUrl;\n this.frameUrl = frameUrl;\n this.#runtimeStream = new BrowserRuntimePostMessageStream({\n name: 'parent',\n target: 'child',\n });\n }\n\n /**\n * Send a termination command to the offscreen document.\n *\n * @param job - The job to terminate.\n */\n protected async terminateJob(job: Job<string>) {\n // The `AbstractExecutionService` will have already closed the job stream,\n // so we write to the runtime stream directly.\n this.#runtimeStream.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 runtime stream\n * in a stream specific to the job.\n *\n * @param jobId - The job ID.\n */\n protected async initEnvStream(jobId: string) {\n // Lazily create the offscreen document.\n await this.createDocument();\n\n const stream = new OffscreenPostMessageStream({\n stream: this.#runtimeStream,\n frameUrl: this.frameUrl.toString(),\n jobId,\n });\n\n return { worker: jobId, stream };\n }\n\n /**\n * Creates the offscreen document to be used as the execution environment.\n *\n * If the document already exists, this does nothing.\n */\n private async createDocument() {\n // Extensions can only have a single offscreen document.\n if (await chrome.offscreen.hasDocument()) {\n return;\n }\n\n await chrome.offscreen.createDocument({\n justification: 'MetaMask Snaps Execution Environment',\n reasons: ['IFRAME_SCRIPTING'],\n url: this.documentUrl.toString(),\n });\n }\n}\n"]}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
import { BasePostMessageStream } from '@metamask/post-message-stream';
|
|
2
2
|
import { JsonRpcRequest } from '@metamask/utils';
|
|
3
|
-
export declare type
|
|
3
|
+
export declare type OffscreenPostMessageStreamArgs = {
|
|
4
4
|
stream: BasePostMessageStream;
|
|
5
5
|
jobId: string;
|
|
6
|
-
|
|
6
|
+
frameUrl: string;
|
|
7
7
|
};
|
|
8
|
-
export declare type
|
|
8
|
+
export declare type OffscreenPostMessage = {
|
|
9
9
|
jobId: string;
|
|
10
10
|
data: JsonRpcRequest;
|
|
11
|
-
extra?: Record<string, unknown>;
|
|
12
11
|
};
|
|
13
12
|
/**
|
|
14
13
|
* A post message stream that wraps messages in a job ID, before sending them
|
|
15
14
|
* over the underlying stream.
|
|
16
15
|
*/
|
|
17
|
-
export declare class
|
|
16
|
+
export declare class OffscreenPostMessageStream extends BasePostMessageStream {
|
|
18
17
|
#private;
|
|
19
18
|
/**
|
|
20
|
-
* Initializes a new `
|
|
19
|
+
* Initializes a new `OffscreenPostMessageStream` instance.
|
|
21
20
|
*
|
|
22
21
|
* @param args - The constructor arguments.
|
|
23
22
|
* @param args.stream - The underlying stream to use for communication.
|
|
24
23
|
* @param args.jobId - The ID of the job this stream is associated with.
|
|
25
|
-
* @param args.
|
|
24
|
+
* @param args.frameUrl - The URL of the frame to load inside the offscreen
|
|
25
|
+
* document.
|
|
26
26
|
*/
|
|
27
|
-
constructor({ stream, jobId,
|
|
27
|
+
constructor({ stream, jobId, frameUrl }: OffscreenPostMessageStreamArgs);
|
|
28
28
|
/**
|
|
29
29
|
* Write data to the underlying stream. This wraps the data in an object with
|
|
30
30
|
* the job ID.
|
|
31
31
|
*
|
|
32
32
|
* @param data - The data to write.
|
|
33
33
|
*/
|
|
34
|
-
_postMessage(data:
|
|
34
|
+
_postMessage(data: OffscreenPostMessage): void;
|
|
35
35
|
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _OffscreenPostMessageStream_instances, _OffscreenPostMessageStream_stream, _OffscreenPostMessageStream_jobId, _OffscreenPostMessageStream_frameUrl, _OffscreenPostMessageStream_onData;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.OffscreenPostMessageStream = void 0;
|
|
16
|
+
const post_message_stream_1 = require("@metamask/post-message-stream");
|
|
17
|
+
/**
|
|
18
|
+
* A post message stream that wraps messages in a job ID, before sending them
|
|
19
|
+
* over the underlying stream.
|
|
20
|
+
*/
|
|
21
|
+
class OffscreenPostMessageStream extends post_message_stream_1.BasePostMessageStream {
|
|
22
|
+
/**
|
|
23
|
+
* Initializes a new `OffscreenPostMessageStream` instance.
|
|
24
|
+
*
|
|
25
|
+
* @param args - The constructor arguments.
|
|
26
|
+
* @param args.stream - The underlying stream to use for communication.
|
|
27
|
+
* @param args.jobId - The ID of the job this stream is associated with.
|
|
28
|
+
* @param args.frameUrl - The URL of the frame to load inside the offscreen
|
|
29
|
+
* document.
|
|
30
|
+
*/
|
|
31
|
+
constructor({ stream, jobId, frameUrl }) {
|
|
32
|
+
super();
|
|
33
|
+
_OffscreenPostMessageStream_instances.add(this);
|
|
34
|
+
_OffscreenPostMessageStream_stream.set(this, void 0);
|
|
35
|
+
_OffscreenPostMessageStream_jobId.set(this, void 0);
|
|
36
|
+
_OffscreenPostMessageStream_frameUrl.set(this, void 0);
|
|
37
|
+
__classPrivateFieldSet(this, _OffscreenPostMessageStream_stream, stream, "f");
|
|
38
|
+
__classPrivateFieldSet(this, _OffscreenPostMessageStream_jobId, jobId, "f");
|
|
39
|
+
__classPrivateFieldSet(this, _OffscreenPostMessageStream_frameUrl, frameUrl, "f");
|
|
40
|
+
__classPrivateFieldGet(this, _OffscreenPostMessageStream_stream, "f").on('data', __classPrivateFieldGet(this, _OffscreenPostMessageStream_instances, "m", _OffscreenPostMessageStream_onData).bind(this));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Write data to the underlying stream. This wraps the data in an object with
|
|
44
|
+
* the job ID.
|
|
45
|
+
*
|
|
46
|
+
* @param data - The data to write.
|
|
47
|
+
*/
|
|
48
|
+
_postMessage(data) {
|
|
49
|
+
__classPrivateFieldGet(this, _OffscreenPostMessageStream_stream, "f").write({
|
|
50
|
+
jobId: __classPrivateFieldGet(this, _OffscreenPostMessageStream_jobId, "f"),
|
|
51
|
+
// TODO: Rather than injecting the frame URL here, we should come up with
|
|
52
|
+
// a better way to do this. The frame URL is needed to avoid hard coding
|
|
53
|
+
// it in the offscreen execution environment.
|
|
54
|
+
frameUrl: __classPrivateFieldGet(this, _OffscreenPostMessageStream_frameUrl, "f"),
|
|
55
|
+
data,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.OffscreenPostMessageStream = OffscreenPostMessageStream;
|
|
60
|
+
_OffscreenPostMessageStream_stream = new WeakMap(), _OffscreenPostMessageStream_jobId = new WeakMap(), _OffscreenPostMessageStream_frameUrl = new WeakMap(), _OffscreenPostMessageStream_instances = new WeakSet(), _OffscreenPostMessageStream_onData = function _OffscreenPostMessageStream_onData(data) {
|
|
61
|
+
if (data.jobId !== __classPrivateFieldGet(this, _OffscreenPostMessageStream_jobId, "f")) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this.push(data.data);
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=OffscreenPostMessageStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OffscreenPostMessageStream.js","sourceRoot":"","sources":["../../../src/services/offscreen/OffscreenPostMessageStream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uEAAsE;AActE;;;GAGG;AACH,MAAa,0BAA2B,SAAQ,2CAAqB;IAOnE;;;;;;;;OAQG;IACH,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAkC;QACrE,KAAK,EAAE,CAAC;;QAhBV,qDAAwC;QAExC,oDAAwB;QAExB,uDAA2B;QAczB,uBAAA,IAAI,sCAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,qCAAU,KAAK,MAAA,CAAC;QACpB,uBAAA,IAAI,wCAAa,QAAQ,MAAA,CAAC;QAE1B,uBAAA,IAAI,0CAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAA,IAAI,iFAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAgBD;;;;;OAKG;IACH,YAAY,CAAC,IAA0B;QACrC,uBAAA,IAAI,0CAAQ,CAAC,KAAK,CAAC;YACjB,KAAK,EAAE,uBAAA,IAAI,yCAAO;YAClB,yEAAyE;YACzE,wEAAwE;YACxE,6CAA6C;YAC7C,QAAQ,EAAE,uBAAA,IAAI,4CAAU;YACxB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF;AAxDD,gEAwDC;qSAxBS,IAA0B;IAChC,IAAI,IAAI,CAAC,KAAK,KAAK,uBAAA,IAAI,yCAAO,EAAE;QAC9B,OAAO;KACR;IAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC","sourcesContent":["import { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { JsonRpcRequest } from '@metamask/utils';\n\nexport type OffscreenPostMessageStreamArgs = {\n stream: BasePostMessageStream;\n jobId: string;\n frameUrl: string;\n};\n\nexport type OffscreenPostMessage = {\n jobId: string;\n data: JsonRpcRequest;\n};\n\n/**\n * A post message stream that wraps messages in a job ID, before sending them\n * over the underlying stream.\n */\nexport class OffscreenPostMessageStream extends BasePostMessageStream {\n readonly #stream: BasePostMessageStream;\n\n readonly #jobId: string;\n\n readonly #frameUrl: string;\n\n /**\n * Initializes a new `OffscreenPostMessageStream` instance.\n *\n * @param args - The constructor arguments.\n * @param args.stream - The underlying stream to use for communication.\n * @param args.jobId - The ID of the job this stream is associated with.\n * @param args.frameUrl - The URL of the frame to load inside the offscreen\n * document.\n */\n constructor({ stream, jobId, frameUrl }: OffscreenPostMessageStreamArgs) {\n super();\n\n this.#stream = stream;\n this.#jobId = jobId;\n this.#frameUrl = frameUrl;\n\n this.#stream.on('data', this.#onData.bind(this));\n }\n\n /**\n * Handle incoming data from the underlying stream. This checks that the job\n * ID matches the expected job ID, and pushes the data to the stream if so.\n *\n * @param data - The data to handle.\n */\n #onData(data: OffscreenPostMessage) {\n if (data.jobId !== this.#jobId) {\n return;\n }\n\n this.push(data.data);\n }\n\n /**\n * Write data to the underlying stream. This wraps the data in an object with\n * the job ID.\n *\n * @param data - The data to write.\n */\n _postMessage(data: OffscreenPostMessage) {\n this.#stream.write({\n jobId: this.#jobId,\n // TODO: Rather than injecting the frame URL here, we should come up with\n // a better way to do this. The frame URL is needed to avoid hard coding\n // it in the offscreen execution environment.\n frameUrl: this.#frameUrl,\n data,\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./OffscreenExecutionService"), exports);
|
|
18
|
+
__exportStar(require("./OffscreenPostMessageStream"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/offscreen/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8DAA4C;AAC5C,+DAA6C","sourcesContent":["export * from './OffscreenExecutionService';\nexport * from './OffscreenPostMessageStream';\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestQueue = void 0;
|
|
4
|
+
class RequestQueue {
|
|
5
|
+
constructor(maxQueueSize) {
|
|
6
|
+
this.maxQueueSize = maxQueueSize;
|
|
7
|
+
this.queueSizes = new Map();
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Increments the queue count for a particular origin.
|
|
11
|
+
*
|
|
12
|
+
* @param origin - A string identifying the origin.
|
|
13
|
+
*/
|
|
14
|
+
increment(origin) {
|
|
15
|
+
const currentCount = this.queueSizes.get(origin) ?? 0;
|
|
16
|
+
if (currentCount >= this.maxQueueSize) {
|
|
17
|
+
throw new Error('Maximum number of requests reached. Try again later.');
|
|
18
|
+
}
|
|
19
|
+
this.queueSizes.set(origin, currentCount + 1);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Decrements the queue count for a particular origin.
|
|
23
|
+
*
|
|
24
|
+
* @param origin - A string identifying the origin.
|
|
25
|
+
*/
|
|
26
|
+
decrement(origin) {
|
|
27
|
+
const currentCount = this.queueSizes.get(origin) ?? 0;
|
|
28
|
+
if (currentCount === 0) {
|
|
29
|
+
throw new Error(`Cannot decrement, ${origin} does not have any outstanding requests.`);
|
|
30
|
+
}
|
|
31
|
+
this.queueSizes.set(origin, currentCount - 1);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Gets the queue count for a particular origin.
|
|
35
|
+
*
|
|
36
|
+
* @param origin - A string identifying the origin.
|
|
37
|
+
* @returns The queue count for the origin.
|
|
38
|
+
*/
|
|
39
|
+
get(origin) {
|
|
40
|
+
return this.queueSizes.get(origin) ?? 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.RequestQueue = RequestQueue;
|
|
44
|
+
//# sourceMappingURL=RequestQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestQueue.js","sourceRoot":"","sources":["../../src/snaps/RequestQueue.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IAKvB,YAAY,YAAoB;QAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,MAAc;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SACzE;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,MAAc;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,YAAY,KAAK,CAAC,EAAE;YACtB,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,0CAA0C,CACtE,CAAC;SACH;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACI,GAAG,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF;AA/CD,oCA+CC","sourcesContent":["export class RequestQueue {\n public readonly maxQueueSize: number;\n\n private readonly queueSizes: Map<string, number>;\n\n constructor(maxQueueSize: number) {\n this.maxQueueSize = maxQueueSize;\n this.queueSizes = new Map<string, number>();\n }\n\n /**\n * Increments the queue count for a particular origin.\n *\n * @param origin - A string identifying the origin.\n */\n public increment(origin: string) {\n const currentCount = this.queueSizes.get(origin) ?? 0;\n if (currentCount >= this.maxQueueSize) {\n throw new Error('Maximum number of requests reached. Try again later.');\n }\n this.queueSizes.set(origin, currentCount + 1);\n }\n\n /**\n * Decrements the queue count for a particular origin.\n *\n * @param origin - A string identifying the origin.\n */\n public decrement(origin: string) {\n const currentCount = this.queueSizes.get(origin) ?? 0;\n if (currentCount === 0) {\n throw new Error(\n `Cannot decrement, ${origin} does not have any outstanding requests.`,\n );\n }\n this.queueSizes.set(origin, currentCount - 1);\n }\n\n /**\n * Gets the queue count for a particular origin.\n *\n * @param origin - A string identifying the origin.\n * @returns The queue count for the origin.\n */\n public get(origin: string): number {\n return this.queueSizes.get(origin) ?? 0;\n }\n}\n"]}
|
|
@@ -71,7 +71,7 @@ export declare type SnapError = {
|
|
|
71
71
|
data?: Json;
|
|
72
72
|
};
|
|
73
73
|
declare type CloseAllConnectionsFunction = (origin: string) => void;
|
|
74
|
-
declare type StoredSnaps = Record<
|
|
74
|
+
declare type StoredSnaps = Record<SnapId, Snap>;
|
|
75
75
|
export declare type SnapControllerState = {
|
|
76
76
|
snaps: StoredSnaps;
|
|
77
77
|
snapStates: {};
|
|
@@ -82,8 +82,8 @@ export declare type SnapControllerState = {
|
|
|
82
82
|
};
|
|
83
83
|
};
|
|
84
84
|
export declare type PersistedSnapControllerState = SnapControllerState & {
|
|
85
|
-
snaps: Record<
|
|
86
|
-
snapStates: Record<
|
|
85
|
+
snaps: Record<SnapId, PersistedSnap>;
|
|
86
|
+
snapStates: Record<SnapId, string>;
|
|
87
87
|
};
|
|
88
88
|
/**
|
|
89
89
|
* Gets the specified Snap from state.
|
|
@@ -174,11 +174,7 @@ export declare type GetRegistryMetadata = {
|
|
|
174
174
|
type: `${typeof controllerName}:getRegistryMetadata`;
|
|
175
175
|
handler: SnapController['getRegistryMetadata'];
|
|
176
176
|
};
|
|
177
|
-
export declare type
|
|
178
|
-
type: `${typeof controllerName}:disconnectOrigin`;
|
|
179
|
-
handler: SnapController['removeSnapFromSubject'];
|
|
180
|
-
};
|
|
181
|
-
export declare type SnapControllerActions = ClearSnapState | GetSnap | GetSnapState | HandleSnapRequest | HasSnap | UpdateBlockedSnaps | UpdateSnapState | EnableSnap | DisableSnap | RemoveSnap | GetPermittedSnaps | InstallSnaps | RemoveSnapError | GetAllSnaps | IncrementActiveReferences | DecrementActiveReferences | GetRegistryMetadata | DisconnectOrigin;
|
|
177
|
+
export declare type SnapControllerActions = ClearSnapState | GetSnap | GetSnapState | HandleSnapRequest | HasSnap | UpdateBlockedSnaps | UpdateSnapState | EnableSnap | DisableSnap | RemoveSnap | GetPermittedSnaps | InstallSnaps | RemoveSnapError | GetAllSnaps | IncrementActiveReferences | DecrementActiveReferences | GetRegistryMetadata;
|
|
182
178
|
export declare type SnapStateChange = {
|
|
183
179
|
type: `${typeof controllerName}:stateChange`;
|
|
184
180
|
payload: [SnapControllerState, Patch[]];
|
|
@@ -334,21 +330,21 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
334
330
|
*
|
|
335
331
|
* @param snapId - The id of the Snap to start.
|
|
336
332
|
*/
|
|
337
|
-
startSnap(snapId:
|
|
333
|
+
startSnap(snapId: SnapId): Promise<void>;
|
|
338
334
|
/**
|
|
339
335
|
* Enables the given snap. A snap can only be started if it is enabled. A snap
|
|
340
336
|
* can only be enabled if it isn't blocked.
|
|
341
337
|
*
|
|
342
338
|
* @param snapId - The id of the Snap to enable.
|
|
343
339
|
*/
|
|
344
|
-
enableSnap(snapId:
|
|
340
|
+
enableSnap(snapId: SnapId): void;
|
|
345
341
|
/**
|
|
346
342
|
* Disables the given snap. A snap can only be started if it is enabled.
|
|
347
343
|
*
|
|
348
344
|
* @param snapId - The id of the Snap to disable.
|
|
349
345
|
* @returns A promise that resolves once the snap has been disabled.
|
|
350
346
|
*/
|
|
351
|
-
disableSnap(snapId:
|
|
347
|
+
disableSnap(snapId: SnapId): Promise<void>;
|
|
352
348
|
/**
|
|
353
349
|
* Stops the given snap, removes all hooks, closes all connections, and
|
|
354
350
|
* terminates its worker.
|
|
@@ -357,7 +353,7 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
357
353
|
* @param statusEvent - The Snap status event that caused the snap to be
|
|
358
354
|
* stopped.
|
|
359
355
|
*/
|
|
360
|
-
stopSnap(snapId:
|
|
356
|
+
stopSnap(snapId: SnapId, statusEvent?: SnapStatusEvents.Stop | SnapStatusEvents.Crash): Promise<void>;
|
|
361
357
|
/**
|
|
362
358
|
* Returns whether the given snap is running.
|
|
363
359
|
* Throws an error if the snap doesn't exist.
|
|
@@ -365,14 +361,14 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
365
361
|
* @param snapId - The id of the Snap to check.
|
|
366
362
|
* @returns `true` if the snap is running, otherwise `false`.
|
|
367
363
|
*/
|
|
368
|
-
isRunning(snapId:
|
|
364
|
+
isRunning(snapId: SnapId): boolean;
|
|
369
365
|
/**
|
|
370
366
|
* Returns whether the given snap has been added to state.
|
|
371
367
|
*
|
|
372
368
|
* @param snapId - The id of the Snap to check for.
|
|
373
369
|
* @returns `true` if the snap exists in the controller state, otherwise `false`.
|
|
374
370
|
*/
|
|
375
|
-
has(snapId:
|
|
371
|
+
has(snapId: SnapId): boolean;
|
|
376
372
|
/**
|
|
377
373
|
* Gets the snap with the given id if it exists, including all data.
|
|
378
374
|
* This should not be used if the snap is to be serializable, as e.g.
|
|
@@ -392,7 +388,7 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
392
388
|
* @param snapId - The id of the snap to get.
|
|
393
389
|
* @returns The entire snap object.
|
|
394
390
|
*/
|
|
395
|
-
getExpect(snapId:
|
|
391
|
+
getExpect(snapId: SnapId): Snap;
|
|
396
392
|
/**
|
|
397
393
|
* Gets the snap with the given id if it exists, excluding any
|
|
398
394
|
* non-serializable or expensive-to-serialize data.
|
|
@@ -400,7 +396,7 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
400
396
|
* @param snapId - The id of the Snap to get.
|
|
401
397
|
* @returns A truncated version of the snap state, that is less expensive to serialize.
|
|
402
398
|
*/
|
|
403
|
-
getTruncated(snapId:
|
|
399
|
+
getTruncated(snapId: SnapId): TruncatedSnap | null;
|
|
404
400
|
/**
|
|
405
401
|
* Gets the snap with the given id, throw if it doesn't exist.
|
|
406
402
|
*
|
|
@@ -408,7 +404,7 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
408
404
|
* @param snapId - The id of the snap to get.
|
|
409
405
|
* @returns A truncated version of the snap state, that is less expensive to serialize.
|
|
410
406
|
*/
|
|
411
|
-
getTruncatedExpect(snapId:
|
|
407
|
+
getTruncatedExpect(snapId: SnapId): TruncatedSnap;
|
|
412
408
|
/**
|
|
413
409
|
* Updates the own state of the snap with the given id.
|
|
414
410
|
* This is distinct from the state MetaMask uses to manage snaps.
|
|
@@ -416,14 +412,14 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
416
412
|
* @param snapId - The id of the Snap whose state should be updated.
|
|
417
413
|
* @param newSnapState - The new state of the snap.
|
|
418
414
|
*/
|
|
419
|
-
updateSnapState(snapId:
|
|
415
|
+
updateSnapState(snapId: SnapId, newSnapState: string): Promise<void>;
|
|
420
416
|
/**
|
|
421
417
|
* Clears the state of the snap with the given id.
|
|
422
418
|
* This is distinct from the state MetaMask uses to manage snaps.
|
|
423
419
|
*
|
|
424
420
|
* @param snapId - The id of the Snap whose state should be cleared.
|
|
425
421
|
*/
|
|
426
|
-
clearSnapState(snapId:
|
|
422
|
+
clearSnapState(snapId: SnapId): void;
|
|
427
423
|
/**
|
|
428
424
|
* Adds error from a snap to the SnapController state.
|
|
429
425
|
*
|
|
@@ -448,7 +444,7 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
448
444
|
* @returns A promise that resolves with the decrypted snap state or null if no state exists.
|
|
449
445
|
* @throws If the snap state decryption fails.
|
|
450
446
|
*/
|
|
451
|
-
getSnapState(snapId:
|
|
447
|
+
getSnapState(snapId: SnapId): Promise<Json>;
|
|
452
448
|
/**
|
|
453
449
|
* Completely clear the controller's state: delete all associated data,
|
|
454
450
|
* handlers, event listeners, and permissions; tear down all snap providers.
|
|
@@ -461,21 +457,14 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
461
457
|
* @param snapId - The id of the Snap.
|
|
462
458
|
* @returns A promise that resolves once the snap has been removed.
|
|
463
459
|
*/
|
|
464
|
-
removeSnap(snapId:
|
|
460
|
+
removeSnap(snapId: SnapId): Promise<void>;
|
|
465
461
|
/**
|
|
466
462
|
* Stops the given snaps, removes them from state, and clears all associated
|
|
467
463
|
* permissions, handlers, and listeners.
|
|
468
464
|
*
|
|
469
465
|
* @param snapIds - The ids of the Snaps.
|
|
470
466
|
*/
|
|
471
|
-
removeSnaps(snapIds:
|
|
472
|
-
/**
|
|
473
|
-
* Removes a snap's permission (caveat) from the specified subject.
|
|
474
|
-
*
|
|
475
|
-
* @param origin - The origin from which to remove the snap.
|
|
476
|
-
* @param snapId - The id of the snap to remove.
|
|
477
|
-
*/
|
|
478
|
-
removeSnapFromSubject(origin: string, snapId: ValidatedSnapId): void;
|
|
467
|
+
removeSnaps(snapIds: string[]): Promise<void>;
|
|
479
468
|
/**
|
|
480
469
|
* Safely revokes all permissions granted to a Snap.
|
|
481
470
|
*
|
|
@@ -487,13 +476,13 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
487
476
|
*
|
|
488
477
|
* @param snapId - The snap id of the snap that was referenced.
|
|
489
478
|
*/
|
|
490
|
-
incrementActiveReferences(snapId:
|
|
479
|
+
incrementActiveReferences(snapId: SnapId): void;
|
|
491
480
|
/**
|
|
492
481
|
* Handles decrement the activeReferences counter.
|
|
493
482
|
*
|
|
494
483
|
* @param snapId - The snap id of the snap that was referenced..
|
|
495
484
|
*/
|
|
496
|
-
decrementActiveReferences(snapId:
|
|
485
|
+
decrementActiveReferences(snapId: SnapId): void;
|
|
497
486
|
/**
|
|
498
487
|
* Gets all snaps in their truncated format.
|
|
499
488
|
*
|
|
@@ -555,7 +544,7 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
555
544
|
* @returns The metadata for the given snap ID, or `null` if the snap is not
|
|
556
545
|
* verified.
|
|
557
546
|
*/
|
|
558
|
-
getRegistryMetadata(snapId:
|
|
547
|
+
getRegistryMetadata(snapId: SnapId): Promise<SnapsRegistryMetadata | null>;
|
|
559
548
|
/**
|
|
560
549
|
* Initiates a request for the given snap's initial permissions.
|
|
561
550
|
* Must be called in order. See processRequestedSnap.
|
|
@@ -579,7 +568,7 @@ export declare class SnapController extends BaseController<string, SnapControlle
|
|
|
579
568
|
* @returns The result of the JSON-RPC request.
|
|
580
569
|
*/
|
|
581
570
|
handleRequest({ snapId, origin, handler: handlerType, request, }: SnapRpcHookArgs & {
|
|
582
|
-
snapId:
|
|
571
|
+
snapId: SnapId;
|
|
583
572
|
}): Promise<unknown>;
|
|
584
573
|
}
|
|
585
574
|
export {};
|