@metamask/snaps-execution-environments 6.6.1 → 6.7.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.
- package/CHANGELOG.md +19 -1
- package/dist/common/BaseSnapExecutor.cjs +436 -0
- package/dist/common/BaseSnapExecutor.cjs.map +1 -0
- package/dist/{types/common/BaseSnapExecutor.d.ts → common/BaseSnapExecutor.d.cts} +8 -6
- package/dist/common/BaseSnapExecutor.d.cts.map +1 -0
- package/dist/common/BaseSnapExecutor.d.mts +70 -0
- package/dist/common/BaseSnapExecutor.d.mts.map +1 -0
- package/dist/common/BaseSnapExecutor.mjs +430 -24
- package/dist/common/BaseSnapExecutor.mjs.map +1 -1
- package/dist/common/commands.cjs +95 -0
- package/dist/common/commands.cjs.map +1 -0
- package/dist/{types/common/commands.d.ts → common/commands.d.cts} +5 -4
- package/dist/common/commands.d.cts.map +1 -0
- package/dist/common/commands.d.mts +31 -0
- package/dist/common/commands.d.mts.map +1 -0
- package/dist/common/commands.mjs +89 -10
- package/dist/common/commands.mjs.map +1 -1
- package/dist/common/endowments/commonEndowmentFactory.cjs +76 -0
- package/dist/common/endowments/commonEndowmentFactory.cjs.map +1 -0
- package/dist/{types/common/endowments/commonEndowmentFactory.d.ts → common/endowments/commonEndowmentFactory.d.cts} +5 -4
- package/dist/common/endowments/commonEndowmentFactory.d.cts.map +1 -0
- package/dist/common/endowments/commonEndowmentFactory.d.mts +26 -0
- package/dist/common/endowments/commonEndowmentFactory.d.mts.map +1 -0
- package/dist/common/endowments/commonEndowmentFactory.mjs +69 -18
- package/dist/common/endowments/commonEndowmentFactory.mjs.map +1 -1
- package/dist/common/endowments/console.cjs +103 -0
- package/dist/common/endowments/console.cjs.map +1 -0
- package/dist/{types/common/endowments/console.d.ts → common/endowments/console.d.cts} +2 -1
- package/dist/common/endowments/console.d.cts.map +1 -0
- package/dist/common/endowments/console.d.mts +46 -0
- package/dist/common/endowments/console.d.mts.map +1 -0
- package/dist/common/endowments/console.mjs +98 -11
- package/dist/common/endowments/console.mjs.map +1 -1
- package/dist/common/endowments/crypto.cjs +30 -0
- package/dist/common/endowments/crypto.cjs.map +1 -0
- package/dist/{types/common/endowments/crypto.d.ts → common/endowments/crypto.d.cts} +1 -0
- package/dist/common/endowments/crypto.d.cts.map +1 -0
- package/dist/common/endowments/crypto.d.mts +13 -0
- package/dist/common/endowments/crypto.d.mts.map +1 -0
- package/dist/common/endowments/crypto.mjs +24 -9
- package/dist/common/endowments/crypto.mjs.map +1 -1
- package/dist/common/endowments/date.cjs +39 -0
- package/dist/common/endowments/date.cjs.map +1 -0
- package/dist/{types/common/endowments/date.d.ts → common/endowments/date.d.cts} +1 -0
- package/dist/common/endowments/date.d.cts.map +1 -0
- package/dist/common/endowments/date.d.mts +16 -0
- package/dist/common/endowments/date.d.mts.map +1 -0
- package/dist/common/endowments/date.mjs +35 -7
- package/dist/common/endowments/date.mjs.map +1 -1
- package/dist/common/endowments/index.cjs +93 -0
- package/dist/common/endowments/index.cjs.map +1 -0
- package/dist/{types/common/endowments/index.d.ts → common/endowments/index.d.cts} +4 -3
- package/dist/common/endowments/index.d.cts.map +1 -0
- package/dist/common/endowments/index.d.mts +29 -0
- package/dist/common/endowments/index.d.mts.map +1 -0
- package/dist/common/endowments/index.mjs +85 -20
- package/dist/common/endowments/index.mjs.map +1 -1
- package/dist/common/endowments/interval.cjs +51 -0
- package/dist/common/endowments/interval.cjs.map +1 -0
- package/dist/{types/common/endowments/interval.d.ts → common/endowments/interval.d.cts} +1 -0
- package/dist/common/endowments/interval.d.cts.map +1 -0
- package/dist/common/endowments/interval.d.mts +10 -0
- package/dist/common/endowments/interval.d.mts.map +1 -0
- package/dist/common/endowments/interval.mjs +47 -6
- package/dist/common/endowments/interval.mjs.map +1 -1
- package/dist/common/endowments/math.cjs +54 -0
- package/dist/common/endowments/math.cjs.map +1 -0
- package/dist/{types/common/endowments/math.d.ts → common/endowments/math.d.cts} +1 -0
- package/dist/common/endowments/math.d.cts.map +1 -0
- package/dist/common/endowments/math.d.mts +61 -0
- package/dist/common/endowments/math.d.mts.map +1 -0
- package/dist/common/endowments/math.mjs +50 -8
- package/dist/common/endowments/math.mjs.map +1 -1
- package/dist/common/endowments/network.cjs +255 -0
- package/dist/common/endowments/network.cjs.map +1 -0
- package/dist/{types/common/endowments/network.d.ts → common/endowments/network.d.cts} +4 -2
- package/dist/common/endowments/network.d.cts.map +1 -0
- package/dist/common/endowments/network.d.mts +25 -0
- package/dist/common/endowments/network.d.mts.map +1 -0
- package/dist/common/endowments/network.mjs +251 -8
- package/dist/common/endowments/network.mjs.map +1 -1
- package/dist/common/endowments/textDecoder.cjs +18 -0
- package/dist/common/endowments/textDecoder.cjs.map +1 -0
- package/dist/{types/common/endowments/textDecoder.d.ts → common/endowments/textDecoder.d.cts} +1 -0
- package/dist/common/endowments/textDecoder.d.cts.map +1 -0
- package/dist/common/endowments/textDecoder.d.mts +11 -0
- package/dist/common/endowments/textDecoder.d.mts.map +1 -0
- package/dist/common/endowments/textDecoder.mjs +14 -6
- package/dist/common/endowments/textDecoder.mjs.map +1 -1
- package/dist/common/endowments/textEncoder.cjs +18 -0
- package/dist/common/endowments/textEncoder.cjs.map +1 -0
- package/dist/{types/common/endowments/textEncoder.d.ts → common/endowments/textEncoder.d.cts} +1 -0
- package/dist/common/endowments/textEncoder.d.cts.map +1 -0
- package/dist/common/endowments/textEncoder.d.mts +11 -0
- package/dist/common/endowments/textEncoder.d.mts.map +1 -0
- package/dist/common/endowments/textEncoder.mjs +14 -6
- package/dist/common/endowments/textEncoder.mjs.map +1 -1
- package/dist/common/endowments/timeout.cjs +53 -0
- package/dist/common/endowments/timeout.cjs.map +1 -0
- package/dist/{types/common/endowments/timeout.d.ts → common/endowments/timeout.d.cts} +1 -0
- package/dist/common/endowments/timeout.d.cts.map +1 -0
- package/dist/common/endowments/timeout.d.mts +10 -0
- package/dist/common/endowments/timeout.d.mts.map +1 -0
- package/dist/common/endowments/timeout.mjs +49 -6
- package/dist/common/endowments/timeout.mjs.map +1 -1
- package/dist/common/globalEvents.cjs +48 -0
- package/dist/common/globalEvents.cjs.map +1 -0
- package/dist/{types/common/globalEvents.d.ts → common/globalEvents.d.cts} +1 -0
- package/dist/common/globalEvents.d.cts.map +1 -0
- package/dist/common/globalEvents.d.mts +21 -0
- package/dist/common/globalEvents.d.mts.map +1 -0
- package/dist/common/globalEvents.mjs +42 -10
- package/dist/common/globalEvents.mjs.map +1 -1
- package/dist/common/globalObject.cjs +50 -0
- package/dist/common/globalObject.cjs.map +1 -0
- package/dist/{types/common/globalObject.d.ts → common/globalObject.d.cts} +1 -0
- package/dist/common/globalObject.d.cts.map +1 -0
- package/dist/common/globalObject.d.mts +10 -0
- package/dist/common/globalObject.d.mts.map +1 -0
- package/dist/common/globalObject.mjs +45 -9
- package/dist/common/globalObject.mjs.map +1 -1
- package/dist/common/lockdown/lockdown-events.cjs +60 -0
- package/dist/common/lockdown/lockdown-events.cjs.map +1 -0
- package/dist/{types/common/lockdown/lockdown-events.d.ts → common/lockdown/lockdown-events.d.cts} +1 -0
- package/dist/common/lockdown/lockdown-events.d.cts.map +1 -0
- package/dist/common/lockdown/lockdown-events.d.mts +5 -0
- package/dist/common/lockdown/lockdown-events.d.mts.map +1 -0
- package/dist/common/lockdown/lockdown-events.mjs +55 -7
- package/dist/common/lockdown/lockdown-events.mjs.map +1 -1
- package/dist/common/lockdown/lockdown-more.cjs +89 -0
- package/dist/common/lockdown/lockdown-more.cjs.map +1 -0
- package/dist/{types/common/lockdown/lockdown-more.d.ts → common/lockdown/lockdown-more.d.cts} +1 -0
- package/dist/common/lockdown/lockdown-more.d.cts.map +1 -0
- package/dist/common/lockdown/lockdown-more.d.mts +23 -0
- package/dist/common/lockdown/lockdown-more.d.mts.map +1 -0
- package/dist/common/lockdown/lockdown-more.mjs +84 -7
- package/dist/common/lockdown/lockdown-more.mjs.map +1 -1
- package/dist/common/lockdown/lockdown.cjs +29 -0
- package/dist/common/lockdown/lockdown.cjs.map +1 -0
- package/dist/{types/common/lockdown/lockdown.d.ts → common/lockdown/lockdown.d.cts} +1 -0
- package/dist/common/lockdown/lockdown.d.cts.map +1 -0
- package/dist/common/lockdown/lockdown.d.mts +8 -0
- package/dist/common/lockdown/lockdown.d.mts.map +1 -0
- package/dist/common/lockdown/lockdown.mjs +22 -19
- package/dist/common/lockdown/lockdown.mjs.map +1 -1
- package/dist/common/sortParams.cjs +35 -0
- package/dist/common/sortParams.cjs.map +1 -0
- package/dist/{types/common/sortParams.d.ts → common/sortParams.d.cts} +2 -1
- package/dist/common/sortParams.d.cts.map +1 -0
- package/dist/common/sortParams.d.mts +17 -0
- package/dist/common/sortParams.d.mts.map +1 -0
- package/dist/common/sortParams.mjs +29 -6
- package/dist/common/sortParams.mjs.map +1 -1
- package/dist/common/utils.cjs +156 -0
- package/dist/common/utils.cjs.map +1 -0
- package/dist/{types/common/utils.d.ts → common/utils.d.cts} +2 -1
- package/dist/common/utils.d.cts.map +1 -0
- package/dist/common/utils.d.mts +50 -0
- package/dist/common/utils.d.mts.map +1 -0
- package/dist/common/utils.mjs +146 -20
- package/dist/common/utils.mjs.map +1 -1
- package/dist/common/validation.cjs +137 -0
- package/dist/common/validation.cjs.map +1 -0
- package/dist/{types/common/validation.d.ts → common/validation.d.cts} +37 -36
- package/dist/common/validation.d.cts.map +1 -0
- package/dist/common/validation.d.mts +199 -0
- package/dist/common/validation.d.mts.map +1 -0
- package/dist/common/validation.mjs +127 -37
- package/dist/common/validation.mjs.map +1 -1
- package/dist/iframe/IFrameSnapExecutor.cjs +42 -0
- package/dist/iframe/IFrameSnapExecutor.cjs.map +1 -0
- package/dist/{types/iframe/IFrameSnapExecutor.d.ts → iframe/IFrameSnapExecutor.d.cts} +3 -2
- package/dist/iframe/IFrameSnapExecutor.d.cts.map +1 -0
- package/dist/iframe/IFrameSnapExecutor.d.mts +14 -0
- package/dist/iframe/IFrameSnapExecutor.d.mts.map +1 -0
- package/dist/iframe/IFrameSnapExecutor.mjs +42 -26
- package/dist/iframe/IFrameSnapExecutor.mjs.map +1 -1
- package/dist/iframe/index.cjs +10 -0
- package/dist/iframe/index.cjs.map +1 -0
- package/dist/iframe/index.d.cts +2 -0
- package/dist/iframe/index.d.cts.map +1 -0
- package/dist/iframe/index.d.mts +2 -0
- package/dist/iframe/index.d.mts.map +1 -0
- package/dist/iframe/index.mjs +4 -31
- package/dist/iframe/index.mjs.map +1 -1
- package/dist/index.cjs +18 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1 -8
- package/dist/index.mjs.map +1 -1
- package/dist/logging.cjs +13 -0
- package/dist/logging.cjs.map +1 -0
- package/dist/{types/logging.d.ts → logging.d.cts} +1 -0
- package/dist/logging.d.cts.map +1 -0
- package/dist/logging.d.mts +9 -0
- package/dist/logging.d.mts.map +1 -0
- package/dist/logging.mjs +9 -7
- package/dist/logging.mjs.map +1 -1
- package/dist/node-process/ChildProcessSnapExecutor.cjs +30 -0
- package/dist/node-process/ChildProcessSnapExecutor.cjs.map +1 -0
- package/dist/{types/node-process/ChildProcessSnapExecutor.d.ts → node-process/ChildProcessSnapExecutor.d.cts} +2 -1
- package/dist/node-process/ChildProcessSnapExecutor.d.cts.map +1 -0
- package/dist/node-process/ChildProcessSnapExecutor.d.mts +5 -0
- package/dist/node-process/ChildProcessSnapExecutor.d.mts.map +1 -0
- package/dist/node-process/ChildProcessSnapExecutor.mjs +30 -26
- package/dist/node-process/ChildProcessSnapExecutor.mjs.map +1 -1
- package/dist/node-process/index.cjs +8 -0
- package/dist/node-process/index.cjs.map +1 -0
- package/dist/node-process/index.d.cts +2 -0
- package/dist/node-process/index.d.cts.map +1 -0
- package/dist/node-process/index.d.mts +2 -0
- package/dist/node-process/index.d.mts.map +1 -0
- package/dist/node-process/index.mjs +3 -28
- package/dist/node-process/index.mjs.map +1 -1
- package/dist/node-thread/ThreadSnapExecutor.cjs +30 -0
- package/dist/node-thread/ThreadSnapExecutor.cjs.map +1 -0
- package/dist/node-thread/ThreadSnapExecutor.d.cts +5 -0
- package/dist/node-thread/ThreadSnapExecutor.d.cts.map +1 -0
- package/dist/node-thread/ThreadSnapExecutor.d.mts +5 -0
- package/dist/node-thread/ThreadSnapExecutor.d.mts.map +1 -0
- package/dist/node-thread/ThreadSnapExecutor.mjs +30 -26
- package/dist/node-thread/ThreadSnapExecutor.mjs.map +1 -1
- package/dist/node-thread/index.cjs +8 -0
- package/dist/node-thread/index.cjs.map +1 -0
- package/dist/node-thread/index.d.cts +2 -0
- package/dist/node-thread/index.d.cts.map +1 -0
- package/dist/node-thread/index.d.mts +2 -0
- package/dist/node-thread/index.d.mts.map +1 -0
- package/dist/node-thread/index.mjs +3 -28
- package/dist/node-thread/index.mjs.map +1 -1
- package/dist/proxy/ProxySnapExecutor.cjs +112 -0
- package/dist/proxy/ProxySnapExecutor.cjs.map +1 -0
- package/dist/{types/proxy/ProxySnapExecutor.d.ts → proxy/ProxySnapExecutor.d.cts} +4 -3
- package/dist/proxy/ProxySnapExecutor.d.cts.map +1 -0
- package/dist/proxy/ProxySnapExecutor.d.mts +36 -0
- package/dist/proxy/ProxySnapExecutor.d.mts.map +1 -0
- package/dist/proxy/ProxySnapExecutor.mjs +104 -6
- package/dist/proxy/ProxySnapExecutor.mjs.map +1 -1
- package/dist/proxy/index.cjs +18 -0
- package/dist/proxy/index.cjs.map +1 -0
- package/dist/proxy/index.d.cts +2 -0
- package/dist/proxy/index.d.cts.map +1 -0
- package/dist/proxy/index.d.mts +2 -0
- package/dist/proxy/index.d.mts.map +1 -0
- package/dist/proxy/index.mjs +1 -8
- package/dist/proxy/index.mjs.map +1 -1
- package/dist/webview/WebViewExecutorStream.cjs +79 -0
- package/dist/webview/WebViewExecutorStream.cjs.map +1 -0
- package/dist/{types/webview/WebViewExecutorStream.d.ts → webview/WebViewExecutorStream.d.cts} +3 -2
- package/dist/webview/WebViewExecutorStream.d.cts.map +1 -0
- package/dist/webview/WebViewExecutorStream.d.mts +33 -0
- package/dist/webview/WebViewExecutorStream.d.mts.map +1 -0
- package/dist/webview/WebViewExecutorStream.mjs +74 -6
- package/dist/webview/WebViewExecutorStream.mjs.map +1 -1
- package/dist/webview/index.cjs +16 -0
- package/dist/webview/index.cjs.map +1 -0
- package/dist/webview/index.d.cts +2 -0
- package/dist/webview/index.d.cts.map +1 -0
- package/dist/webview/index.d.mts +2 -0
- package/dist/webview/index.d.mts.map +1 -0
- package/dist/webview/index.mjs +9 -21
- package/dist/webview/index.mjs.map +1 -1
- package/dist/webworker/executor/WebWorkerSnapExecutor.cjs +37 -0
- package/dist/webworker/executor/WebWorkerSnapExecutor.cjs.map +1 -0
- package/dist/{types/webworker/executor/WebWorkerSnapExecutor.d.ts → webworker/executor/WebWorkerSnapExecutor.d.cts} +3 -2
- package/dist/webworker/executor/WebWorkerSnapExecutor.d.cts.map +1 -0
- package/dist/webworker/executor/WebWorkerSnapExecutor.d.mts +14 -0
- package/dist/webworker/executor/WebWorkerSnapExecutor.d.mts.map +1 -0
- package/dist/webworker/executor/WebWorkerSnapExecutor.mjs +37 -26
- package/dist/webworker/executor/WebWorkerSnapExecutor.mjs.map +1 -1
- package/dist/webworker/executor/index.cjs +10 -0
- package/dist/webworker/executor/index.cjs.map +1 -0
- package/dist/webworker/executor/index.d.cts +2 -0
- package/dist/webworker/executor/index.d.cts.map +1 -0
- package/dist/webworker/executor/index.d.mts +2 -0
- package/dist/webworker/executor/index.d.mts.map +1 -0
- package/dist/webworker/executor/index.mjs +4 -31
- package/dist/webworker/executor/index.mjs.map +1 -1
- package/dist/webworker/pool/WebWorkerPool.cjs +168 -0
- package/dist/webworker/pool/WebWorkerPool.cjs.map +1 -0
- package/dist/{types/webworker/pool/WebWorkerPool.d.ts → webworker/pool/WebWorkerPool.d.cts} +4 -3
- package/dist/webworker/pool/WebWorkerPool.d.cts.map +1 -0
- package/dist/webworker/pool/WebWorkerPool.d.mts +24 -0
- package/dist/webworker/pool/WebWorkerPool.d.mts.map +1 -0
- package/dist/webworker/pool/WebWorkerPool.mjs +163 -6
- package/dist/webworker/pool/WebWorkerPool.mjs.map +1 -1
- package/dist/webworker/pool/index.cjs +10 -0
- package/dist/webworker/pool/index.cjs.map +1 -0
- package/dist/webworker/pool/index.d.cts +2 -0
- package/dist/webworker/pool/index.d.cts.map +1 -0
- package/dist/webworker/pool/index.d.mts +2 -0
- package/dist/webworker/pool/index.d.mts.map +1 -0
- package/dist/webworker/pool/index.mjs +4 -12
- package/dist/webworker/pool/index.mjs.map +1 -1
- package/package.json +23 -20
- package/dist/browserify/iframe/bundle.js +0 -9
- package/dist/browserify/iframe/index.html +0 -13394
- package/dist/browserify/node-process/bundle.js +0 -13390
- package/dist/browserify/node-thread/bundle.js +0 -13390
- package/dist/browserify/webview/index.html +0 -13402
- package/dist/browserify/worker-executor/bundle.js +0 -13392
- package/dist/browserify/worker-pool/bundle.js +0 -9
- package/dist/browserify/worker-pool/index.html +0 -13394
- package/dist/chunk-2VA6RAEE.js +0 -30
- package/dist/chunk-2VA6RAEE.js.map +0 -1
- package/dist/chunk-3JCT4MWT.js +0 -108
- package/dist/chunk-3JCT4MWT.js.map +0 -1
- package/dist/chunk-46LW37FK.js +0 -144
- package/dist/chunk-46LW37FK.js.map +0 -1
- package/dist/chunk-4COIRXF5.js +0 -86
- package/dist/chunk-4COIRXF5.js.map +0 -1
- package/dist/chunk-4XRZLEKU.js +0 -49
- package/dist/chunk-4XRZLEKU.js.map +0 -1
- package/dist/chunk-53ZULHPK.mjs +0 -16
- package/dist/chunk-53ZULHPK.mjs.map +0 -1
- package/dist/chunk-5DEV3QQU.mjs +0 -12
- package/dist/chunk-5DEV3QQU.mjs.map +0 -1
- package/dist/chunk-5STN3QCA.js +0 -183
- package/dist/chunk-5STN3QCA.js.map +0 -1
- package/dist/chunk-72KFTWQZ.mjs +0 -45
- package/dist/chunk-72KFTWQZ.mjs.map +0 -1
- package/dist/chunk-75RCH4ZX.mjs +0 -151
- package/dist/chunk-75RCH4ZX.mjs.map +0 -1
- package/dist/chunk-7AJWXSDQ.mjs +0 -73
- package/dist/chunk-7AJWXSDQ.mjs.map +0 -1
- package/dist/chunk-7MMUJJQ2.js +0 -151
- package/dist/chunk-7MMUJJQ2.js.map +0 -1
- package/dist/chunk-BCBKEUCG.mjs +0 -38
- package/dist/chunk-BCBKEUCG.mjs.map +0 -1
- package/dist/chunk-BEJDC4XI.mjs +0 -40
- package/dist/chunk-BEJDC4XI.mjs.map +0 -1
- package/dist/chunk-BLHIYDO5.js +0 -40
- package/dist/chunk-BLHIYDO5.js.map +0 -1
- package/dist/chunk-BTEAZZKP.mjs +0 -24
- package/dist/chunk-BTEAZZKP.mjs.map +0 -1
- package/dist/chunk-BVRVUIJB.mjs +0 -67
- package/dist/chunk-BVRVUIJB.mjs.map +0 -1
- package/dist/chunk-CV5LC4PP.js +0 -24
- package/dist/chunk-CV5LC4PP.js.map +0 -1
- package/dist/chunk-DKDTGAFK.js +0 -67
- package/dist/chunk-DKDTGAFK.js.map +0 -1
- package/dist/chunk-DLLLH5HN.js +0 -26
- package/dist/chunk-DLLLH5HN.js.map +0 -1
- package/dist/chunk-EXN2TFDJ.js +0 -38
- package/dist/chunk-EXN2TFDJ.js.map +0 -1
- package/dist/chunk-FOEAIF5U.js +0 -16
- package/dist/chunk-FOEAIF5U.js.map +0 -1
- package/dist/chunk-FUPEJT7B.js +0 -82
- package/dist/chunk-FUPEJT7B.js.map +0 -1
- package/dist/chunk-HCXTK3PR.js +0 -472
- package/dist/chunk-HCXTK3PR.js.map +0 -1
- package/dist/chunk-HGLRZZ56.js +0 -32
- package/dist/chunk-HGLRZZ56.js.map +0 -1
- package/dist/chunk-HL2TTKF3.mjs +0 -144
- package/dist/chunk-HL2TTKF3.mjs.map +0 -1
- package/dist/chunk-HWS4QSOC.mjs +0 -16
- package/dist/chunk-HWS4QSOC.mjs.map +0 -1
- package/dist/chunk-HXKBUIYS.js +0 -262
- package/dist/chunk-HXKBUIYS.js.map +0 -1
- package/dist/chunk-HXUJHX3E.mjs +0 -33
- package/dist/chunk-HXUJHX3E.mjs.map +0 -1
- package/dist/chunk-I5G4YFHM.js +0 -73
- package/dist/chunk-I5G4YFHM.js.map +0 -1
- package/dist/chunk-IX5S3V47.mjs +0 -26
- package/dist/chunk-IX5S3V47.mjs.map +0 -1
- package/dist/chunk-JDWYJ5UI.mjs +0 -33
- package/dist/chunk-JDWYJ5UI.mjs.map +0 -1
- package/dist/chunk-JOT5JH42.js +0 -52
- package/dist/chunk-JOT5JH42.js.map +0 -1
- package/dist/chunk-KEAB7ZVV.js +0 -50
- package/dist/chunk-KEAB7ZVV.js.map +0 -1
- package/dist/chunk-LO5ORVRC.js +0 -16
- package/dist/chunk-LO5ORVRC.js.map +0 -1
- package/dist/chunk-M3OBSGHF.mjs +0 -472
- package/dist/chunk-M3OBSGHF.mjs.map +0 -1
- package/dist/chunk-MCXWFCGV.js +0 -1
- package/dist/chunk-MCXWFCGV.js.map +0 -1
- package/dist/chunk-MIWGLICQ.mjs +0 -108
- package/dist/chunk-MIWGLICQ.mjs.map +0 -1
- package/dist/chunk-MMYM63NH.mjs +0 -82
- package/dist/chunk-MMYM63NH.mjs.map +0 -1
- package/dist/chunk-MS2LQQYH.js +0 -38
- package/dist/chunk-MS2LQQYH.js.map +0 -1
- package/dist/chunk-MXNMMTJW.mjs +0 -51
- package/dist/chunk-MXNMMTJW.mjs.map +0 -1
- package/dist/chunk-OBT45IWW.js +0 -92
- package/dist/chunk-OBT45IWW.js.map +0 -1
- package/dist/chunk-OCNPLHS2.js +0 -51
- package/dist/chunk-OCNPLHS2.js.map +0 -1
- package/dist/chunk-ODICKSGZ.mjs +0 -86
- package/dist/chunk-ODICKSGZ.mjs.map +0 -1
- package/dist/chunk-Q42NNJFY.mjs +0 -32
- package/dist/chunk-Q42NNJFY.mjs.map +0 -1
- package/dist/chunk-QZC2X6NG.js +0 -44
- package/dist/chunk-QZC2X6NG.js.map +0 -1
- package/dist/chunk-RACRYFWM.js +0 -45
- package/dist/chunk-RACRYFWM.js.map +0 -1
- package/dist/chunk-RD2APLK5.js +0 -33
- package/dist/chunk-RD2APLK5.js.map +0 -1
- package/dist/chunk-S5NWI5Z7.mjs +0 -50
- package/dist/chunk-S5NWI5Z7.mjs.map +0 -1
- package/dist/chunk-S7257EN3.mjs +0 -49
- package/dist/chunk-S7257EN3.mjs.map +0 -1
- package/dist/chunk-TSEAPB7L.mjs +0 -1
- package/dist/chunk-TSEAPB7L.mjs.map +0 -1
- package/dist/chunk-UOPIRTJX.mjs +0 -44
- package/dist/chunk-UOPIRTJX.mjs.map +0 -1
- package/dist/chunk-V76DI2XM.mjs +0 -183
- package/dist/chunk-V76DI2XM.mjs.map +0 -1
- package/dist/chunk-W7EDURT5.mjs +0 -92
- package/dist/chunk-W7EDURT5.mjs.map +0 -1
- package/dist/chunk-XPCW7TKM.mjs +0 -262
- package/dist/chunk-XPCW7TKM.mjs.map +0 -1
- package/dist/chunk-Y7AK2VVC.mjs +0 -52
- package/dist/chunk-Y7AK2VVC.mjs.map +0 -1
- package/dist/chunk-YRZVIDCF.mjs +0 -38
- package/dist/chunk-YRZVIDCF.mjs.map +0 -1
- package/dist/chunk-Z7BOREC4.js +0 -12
- package/dist/chunk-Z7BOREC4.js.map +0 -1
- package/dist/chunk-ZAYDLP42.js +0 -33
- package/dist/chunk-ZAYDLP42.js.map +0 -1
- package/dist/chunk-ZNTCZK7J.mjs +0 -30
- package/dist/chunk-ZNTCZK7J.mjs.map +0 -1
- package/dist/common/BaseSnapExecutor.js +0 -26
- package/dist/common/BaseSnapExecutor.js.map +0 -1
- package/dist/common/commands.js +0 -11
- package/dist/common/commands.js.map +0 -1
- package/dist/common/endowments/commonEndowmentFactory.js +0 -20
- package/dist/common/endowments/commonEndowmentFactory.js.map +0 -1
- package/dist/common/endowments/console.js +0 -13
- package/dist/common/endowments/console.js.map +0 -1
- package/dist/common/endowments/crypto.js +0 -11
- package/dist/common/endowments/crypto.js.map +0 -1
- package/dist/common/endowments/date.js +0 -9
- package/dist/common/endowments/date.js.map +0 -1
- package/dist/common/endowments/index.js +0 -21
- package/dist/common/endowments/index.js.map +0 -1
- package/dist/common/endowments/interval.js +0 -8
- package/dist/common/endowments/interval.js.map +0 -1
- package/dist/common/endowments/math.js +0 -10
- package/dist/common/endowments/math.js.map +0 -1
- package/dist/common/endowments/network.js +0 -10
- package/dist/common/endowments/network.js.map +0 -1
- package/dist/common/endowments/textDecoder.js +0 -8
- package/dist/common/endowments/textDecoder.js.map +0 -1
- package/dist/common/endowments/textEncoder.js +0 -8
- package/dist/common/endowments/textEncoder.js.map +0 -1
- package/dist/common/endowments/timeout.js +0 -8
- package/dist/common/endowments/timeout.js.map +0 -1
- package/dist/common/globalEvents.js +0 -11
- package/dist/common/globalEvents.js.map +0 -1
- package/dist/common/globalObject.js +0 -10
- package/dist/common/globalObject.js.map +0 -1
- package/dist/common/lockdown/lockdown-events.js +0 -8
- package/dist/common/lockdown/lockdown-events.js.map +0 -1
- package/dist/common/lockdown/lockdown-more.js +0 -8
- package/dist/common/lockdown/lockdown-more.js.map +0 -1
- package/dist/common/lockdown/lockdown.js +0 -22
- package/dist/common/lockdown/lockdown.js.map +0 -1
- package/dist/common/sortParams.js +0 -8
- package/dist/common/sortParams.js.map +0 -1
- package/dist/common/utils.js +0 -21
- package/dist/common/utils.js.map +0 -1
- package/dist/common/validation.js +0 -38
- package/dist/common/validation.js.map +0 -1
- package/dist/globals.d.js +0 -1
- package/dist/globals.d.js.map +0 -1
- package/dist/globals.d.mjs +0 -1
- package/dist/globals.d.mjs.map +0 -1
- package/dist/iframe/IFrameSnapExecutor.js +0 -27
- package/dist/iframe/IFrameSnapExecutor.js.map +0 -1
- package/dist/iframe/index.js +0 -35
- package/dist/iframe/index.js.map +0 -1
- package/dist/index.js +0 -9
- package/dist/index.js.map +0 -1
- package/dist/logging.js +0 -8
- package/dist/logging.js.map +0 -1
- package/dist/node-process/ChildProcessSnapExecutor.js +0 -27
- package/dist/node-process/ChildProcessSnapExecutor.js.map +0 -1
- package/dist/node-process/index.js +0 -31
- package/dist/node-process/index.js.map +0 -1
- package/dist/node-thread/ThreadSnapExecutor.js +0 -27
- package/dist/node-thread/ThreadSnapExecutor.js.map +0 -1
- package/dist/node-thread/index.js +0 -31
- package/dist/node-thread/index.js.map +0 -1
- package/dist/proxy/ProxySnapExecutor.js +0 -8
- package/dist/proxy/ProxySnapExecutor.js.map +0 -1
- package/dist/proxy/index.js +0 -9
- package/dist/proxy/index.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/types/iframe/index.d.ts +0 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/node-process/index.d.ts +0 -1
- package/dist/types/node-thread/ThreadSnapExecutor.d.ts +0 -4
- package/dist/types/node-thread/index.d.ts +0 -1
- package/dist/types/proxy/index.d.ts +0 -1
- package/dist/types/vendor/global.d.js +0 -1
- package/dist/types/vendor/global.d.js.map +0 -1
- package/dist/types/vendor/global.d.mjs +0 -1
- package/dist/types/vendor/global.d.mjs.map +0 -1
- package/dist/types/vendor/providers.d.js +0 -1
- package/dist/types/vendor/providers.d.js.map +0 -1
- package/dist/types/vendor/providers.d.mjs +0 -1
- package/dist/types/vendor/providers.d.mjs.map +0 -1
- package/dist/types/vendor/readable-stream.d.js +0 -1
- package/dist/types/vendor/readable-stream.d.js.map +0 -1
- package/dist/types/vendor/readable-stream.d.mjs +0 -1
- package/dist/types/vendor/readable-stream.d.mjs.map +0 -1
- package/dist/types/webview/index.d.ts +0 -1
- package/dist/types/webworker/executor/index.d.ts +0 -1
- package/dist/types/webworker/pool/index.d.ts +0 -1
- package/dist/webview/WebViewExecutorStream.js +0 -8
- package/dist/webview/WebViewExecutorStream.js.map +0 -1
- package/dist/webview/index.js +0 -26
- package/dist/webview/index.js.map +0 -1
- package/dist/webworker/executor/WebWorkerSnapExecutor.js +0 -27
- package/dist/webworker/executor/WebWorkerSnapExecutor.js.map +0 -1
- package/dist/webworker/executor/index.js +0 -35
- package/dist/webworker/executor/index.js.map +0 -1
- package/dist/webworker/pool/WebWorkerPool.js +0 -8
- package/dist/webworker/pool/WebWorkerPool.js.map +0 -1
- package/dist/webworker/pool/index.js +0 -16
- package/dist/webworker/pool/index.js.map +0 -1
|
@@ -0,0 +1,255 @@
|
|
|
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 _ResponseWrapper_teardownRef, _ResponseWrapper_ogResponse, _ResponseWrapper_onStart, _ResponseWrapper_onFinish;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const utils_1 = require("@metamask/utils");
|
|
16
|
+
const utils_2 = require("../utils.cjs");
|
|
17
|
+
/**
|
|
18
|
+
* This class wraps a Response object.
|
|
19
|
+
* That way, a teardown process can stop any processes left.
|
|
20
|
+
*/
|
|
21
|
+
class ResponseWrapper {
|
|
22
|
+
constructor(ogResponse, teardownRef, onStart, onFinish) {
|
|
23
|
+
_ResponseWrapper_teardownRef.set(this, void 0);
|
|
24
|
+
_ResponseWrapper_ogResponse.set(this, void 0);
|
|
25
|
+
_ResponseWrapper_onStart.set(this, void 0);
|
|
26
|
+
_ResponseWrapper_onFinish.set(this, void 0);
|
|
27
|
+
__classPrivateFieldSet(this, _ResponseWrapper_ogResponse, ogResponse, "f");
|
|
28
|
+
__classPrivateFieldSet(this, _ResponseWrapper_teardownRef, teardownRef, "f");
|
|
29
|
+
__classPrivateFieldSet(this, _ResponseWrapper_onStart, onStart, "f");
|
|
30
|
+
__classPrivateFieldSet(this, _ResponseWrapper_onFinish, onFinish, "f");
|
|
31
|
+
}
|
|
32
|
+
get body() {
|
|
33
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").body;
|
|
34
|
+
}
|
|
35
|
+
get bodyUsed() {
|
|
36
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").bodyUsed;
|
|
37
|
+
}
|
|
38
|
+
get headers() {
|
|
39
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").headers;
|
|
40
|
+
}
|
|
41
|
+
get ok() {
|
|
42
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").ok;
|
|
43
|
+
}
|
|
44
|
+
get redirected() {
|
|
45
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").redirected;
|
|
46
|
+
}
|
|
47
|
+
get status() {
|
|
48
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").status;
|
|
49
|
+
}
|
|
50
|
+
get statusText() {
|
|
51
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").statusText;
|
|
52
|
+
}
|
|
53
|
+
get type() {
|
|
54
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").type;
|
|
55
|
+
}
|
|
56
|
+
get url() {
|
|
57
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").url;
|
|
58
|
+
}
|
|
59
|
+
async text() {
|
|
60
|
+
return await (0, utils_2.withTeardown)((async () => {
|
|
61
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
62
|
+
try {
|
|
63
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").text();
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
67
|
+
}
|
|
68
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
69
|
+
}
|
|
70
|
+
async arrayBuffer() {
|
|
71
|
+
return await (0, utils_2.withTeardown)((async () => {
|
|
72
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
73
|
+
try {
|
|
74
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").arrayBuffer();
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
78
|
+
}
|
|
79
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
80
|
+
}
|
|
81
|
+
async blob() {
|
|
82
|
+
return await (0, utils_2.withTeardown)((async () => {
|
|
83
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
84
|
+
try {
|
|
85
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").blob();
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
89
|
+
}
|
|
90
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
91
|
+
}
|
|
92
|
+
clone() {
|
|
93
|
+
const newResponse = __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").clone();
|
|
94
|
+
return new ResponseWrapper(newResponse, __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"), __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f"), __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f"));
|
|
95
|
+
}
|
|
96
|
+
async formData() {
|
|
97
|
+
return await (0, utils_2.withTeardown)((async () => {
|
|
98
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
99
|
+
try {
|
|
100
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").formData();
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
104
|
+
}
|
|
105
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
106
|
+
}
|
|
107
|
+
async json() {
|
|
108
|
+
return await (0, utils_2.withTeardown)((async () => {
|
|
109
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
110
|
+
try {
|
|
111
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").json();
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
115
|
+
}
|
|
116
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
_ResponseWrapper_teardownRef = new WeakMap(), _ResponseWrapper_ogResponse = new WeakMap(), _ResponseWrapper_onStart = new WeakMap(), _ResponseWrapper_onFinish = new WeakMap();
|
|
120
|
+
/**
|
|
121
|
+
* Create a network endowment, consisting of a `fetch` function.
|
|
122
|
+
* This allows us to provide a teardown function, so that we can cancel
|
|
123
|
+
* any pending requests, connections, streams, etc. that may be open when a snap
|
|
124
|
+
* is terminated.
|
|
125
|
+
*
|
|
126
|
+
* This wraps the original implementation of `fetch`,
|
|
127
|
+
* to ensure that a bad actor cannot get access to the original function, thus
|
|
128
|
+
* potentially preventing the network requests from being torn down.
|
|
129
|
+
*
|
|
130
|
+
* @param options - An options bag.
|
|
131
|
+
* @param options.notify - A reference to the notify function of the snap executor.
|
|
132
|
+
* @returns An object containing a wrapped `fetch`
|
|
133
|
+
* function, as well as a teardown function.
|
|
134
|
+
*/
|
|
135
|
+
const createNetwork = ({ notify } = {}) => {
|
|
136
|
+
(0, utils_1.assert)(notify, 'Notify must be passed to network endowment factory');
|
|
137
|
+
// Open fetch calls or open body streams
|
|
138
|
+
const openConnections = new Set();
|
|
139
|
+
// Track last teardown count
|
|
140
|
+
const teardownRef = { lastTeardown: 0 };
|
|
141
|
+
// Remove items from openConnections after they were garbage collected
|
|
142
|
+
const cleanup = new FinalizationRegistry(
|
|
143
|
+
/* istanbul ignore next: can't test garbage collection without modifying node parameters */
|
|
144
|
+
(callback) => callback());
|
|
145
|
+
const _fetch = async (input, init) => {
|
|
146
|
+
const abortController = new AbortController();
|
|
147
|
+
if (init?.signal !== null && init?.signal !== undefined) {
|
|
148
|
+
const originalSignal = init.signal;
|
|
149
|
+
// Merge abort controllers
|
|
150
|
+
originalSignal.addEventListener('abort', () => {
|
|
151
|
+
abortController.abort(originalSignal.reason);
|
|
152
|
+
}, { once: true });
|
|
153
|
+
}
|
|
154
|
+
let started = false;
|
|
155
|
+
const onStart = async () => {
|
|
156
|
+
if (!started) {
|
|
157
|
+
started = true;
|
|
158
|
+
await notify({
|
|
159
|
+
method: 'OutboundRequest',
|
|
160
|
+
params: { source: 'fetch' },
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
let finished = false;
|
|
165
|
+
const onFinish = async () => {
|
|
166
|
+
if (!finished) {
|
|
167
|
+
finished = true;
|
|
168
|
+
await notify({
|
|
169
|
+
method: 'OutboundResponse',
|
|
170
|
+
params: { source: 'fetch' },
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
let res;
|
|
175
|
+
let openFetchConnection;
|
|
176
|
+
return await (0, utils_2.withTeardown)((async () => {
|
|
177
|
+
try {
|
|
178
|
+
await notify({
|
|
179
|
+
method: 'OutboundRequest',
|
|
180
|
+
params: { source: 'fetch' },
|
|
181
|
+
});
|
|
182
|
+
const fetchPromise = fetch(input, {
|
|
183
|
+
...init,
|
|
184
|
+
signal: abortController.signal,
|
|
185
|
+
});
|
|
186
|
+
openFetchConnection = {
|
|
187
|
+
cancel: async () => {
|
|
188
|
+
abortController.abort();
|
|
189
|
+
try {
|
|
190
|
+
await fetchPromise;
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
/* do nothing */
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
openConnections.add(openFetchConnection);
|
|
198
|
+
res = new ResponseWrapper(await fetchPromise, teardownRef, onStart, onFinish);
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
if (openFetchConnection !== undefined) {
|
|
202
|
+
openConnections.delete(openFetchConnection);
|
|
203
|
+
}
|
|
204
|
+
await notify({
|
|
205
|
+
method: 'OutboundResponse',
|
|
206
|
+
params: { source: 'fetch' },
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
if (res.body !== null) {
|
|
210
|
+
const body = new WeakRef(res.body);
|
|
211
|
+
const openBodyConnection = {
|
|
212
|
+
cancel:
|
|
213
|
+
/* istanbul ignore next: see it.todo('can be torn down during body read') test */
|
|
214
|
+
async () => {
|
|
215
|
+
try {
|
|
216
|
+
await body.deref()?.cancel();
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
/* do nothing */
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
openConnections.add(openBodyConnection);
|
|
224
|
+
cleanup.register(res.body,
|
|
225
|
+
/* istanbul ignore next: can't test garbage collection without modifying node parameters */
|
|
226
|
+
() => openConnections.delete(openBodyConnection));
|
|
227
|
+
}
|
|
228
|
+
return harden(res);
|
|
229
|
+
})(), teardownRef);
|
|
230
|
+
};
|
|
231
|
+
const teardownFunction = async () => {
|
|
232
|
+
teardownRef.lastTeardown += 1;
|
|
233
|
+
const promises = [];
|
|
234
|
+
openConnections.forEach(({ cancel }) => promises.push(cancel()));
|
|
235
|
+
openConnections.clear();
|
|
236
|
+
await Promise.all(promises);
|
|
237
|
+
};
|
|
238
|
+
return {
|
|
239
|
+
fetch: harden(_fetch),
|
|
240
|
+
// Request, Headers and Response are the endowments injected alongside fetch
|
|
241
|
+
// only when 'endowment:network-access' permission is requested,
|
|
242
|
+
// therefore these are hardened as part of fetch dependency injection within its factory.
|
|
243
|
+
// These endowments are not (and should never be) available by default.
|
|
244
|
+
Request: harden(Request),
|
|
245
|
+
Headers: harden(Headers),
|
|
246
|
+
Response: harden(Response),
|
|
247
|
+
teardownFunction,
|
|
248
|
+
};
|
|
249
|
+
};
|
|
250
|
+
const endowmentModule = {
|
|
251
|
+
names: ['fetch', 'Request', 'Headers', 'Response'],
|
|
252
|
+
factory: createNetwork,
|
|
253
|
+
};
|
|
254
|
+
exports.default = endowmentModule;
|
|
255
|
+
//# sourceMappingURL=network.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.cjs","sourceRoot":"","sources":["../../../src/common/endowments/network.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,2CAAyC;AAEzC,wCAAwC;AAGxC;;;GAGG;AACH,MAAM,eAAe;IASnB,YACE,UAAoB,EACpB,WAAqC,EACrC,OAA4B,EAC5B,QAA6B;QAZtB,+CAAuC;QAEhD,8CAAsB;QAEtB,2CAA8B;QAE9B,4CAA+B;QAQ7B,uBAAA,IAAI,+BAAe,UAAU,MAAA,CAAC;QAC9B,uBAAA,IAAI,gCAAgB,WAAW,MAAA,CAAC;QAChC,uBAAA,IAAI,4BAAY,OAAO,MAAA,CAAC;QACxB,uBAAA,IAAI,6BAAa,QAAQ,MAAA,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,uBAAA,IAAI,mCAAY,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,uBAAA,IAAI,mCAAY,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,uBAAA,IAAI,mCAAY,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,uBAAA,IAAI,mCAAY,CAAC,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,uBAAA,IAAI,mCAAY,CAAC,UAAU,CAAC;IACrC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,uBAAA,IAAI,mCAAY,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,uBAAA,IAAI,mCAAY,CAAC,UAAU,CAAC;IACrC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,uBAAA,IAAI,mCAAY,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,IAAI,GAAG;QACL,OAAO,uBAAA,IAAI,mCAAY,CAAC,GAAG,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,MAAM,IAAA,oBAAY,EACvB,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,uBAAA,IAAI,gCAAS,MAAb,IAAI,CAAW,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,uBAAA,IAAI,mCAAY,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;oBAAS,CAAC;gBACT,MAAM,uBAAA,IAAI,iCAAU,MAAd,IAAI,CAAY,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,EAAE,EACJ,uBAAA,IAAI,oCAAa,CAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,MAAM,IAAA,oBAAY,EACvB,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,uBAAA,IAAI,gCAAS,MAAb,IAAI,CAAW,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,uBAAA,IAAI,mCAAY,CAAC,WAAW,EAAE,CAAC;YAC9C,CAAC;oBAAS,CAAC;gBACT,MAAM,uBAAA,IAAI,iCAAU,MAAd,IAAI,CAAY,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,EAAE,EACJ,uBAAA,IAAI,oCAAa,CAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,MAAM,IAAA,oBAAY,EACvB,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,uBAAA,IAAI,gCAAS,MAAb,IAAI,CAAW,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,uBAAA,IAAI,mCAAY,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;oBAAS,CAAC;gBACT,MAAM,uBAAA,IAAI,iCAAU,MAAd,IAAI,CAAY,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,EAAE,EACJ,uBAAA,IAAI,oCAAa,CAClB,CAAC;IACJ,CAAC;IAED,KAAK;QACH,MAAM,WAAW,GAAG,uBAAA,IAAI,mCAAY,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,IAAI,eAAe,CACxB,WAAW,EACX,uBAAA,IAAI,oCAAa,EACjB,uBAAA,IAAI,gCAAS,EACb,uBAAA,IAAI,iCAAU,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,MAAM,IAAA,oBAAY,EACvB,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,uBAAA,IAAI,gCAAS,MAAb,IAAI,CAAW,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,uBAAA,IAAI,mCAAY,CAAC,QAAQ,EAAE,CAAC;YAC3C,CAAC;oBAAS,CAAC;gBACT,MAAM,uBAAA,IAAI,iCAAU,MAAd,IAAI,CAAY,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,EAAE,EACJ,uBAAA,IAAI,oCAAa,CAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,MAAM,IAAA,oBAAY,EACvB,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,uBAAA,IAAI,gCAAS,MAAb,IAAI,CAAW,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,uBAAA,IAAI,mCAAY,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;oBAAS,CAAC;gBACT,MAAM,uBAAA,IAAI,iCAAU,MAAd,IAAI,CAAY,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,EAAE,EACJ,uBAAA,IAAI,oCAAa,CAClB,CAAC;IACJ,CAAC;CACF;;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,aAAa,GAAG,CAAC,EAAE,MAAM,KAA8B,EAAE,EAAE,EAAE;IACjE,IAAA,cAAM,EAAC,MAAM,EAAE,oDAAoD,CAAC,CAAC;IACrE,wCAAwC;IACxC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmC,CAAC;IACnE,4BAA4B;IAC5B,MAAM,WAAW,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAExC,sEAAsE;IACtE,MAAM,OAAO,GAAG,IAAI,oBAAoB;IACtC,2FAA2F;IAC3F,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CACzB,CAAC;IAEF,MAAM,MAAM,GAAiB,KAAK,EAChC,KAAwB,EACxB,IAAkB,EACC,EAAE;QACrB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,IAAI,EAAE,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YACxD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;YACnC,0BAA0B;YAC1B,cAAc,CAAC,gBAAgB,CAC7B,OAAO,EACP,GAAG,EAAE;gBACH,eAAe,CAAC,KAAK,CAAE,cAAsB,CAAC,MAAM,CAAC,CAAC;YACxD,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,MAAM,CAAC;oBACX,MAAM,EAAE,iBAAiB;oBACzB,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,MAAM,CAAC;oBACX,MAAM,EAAE,kBAAkB;oBAC1B,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,GAAa,CAAC;QAClB,IAAI,mBAAgE,CAAC;QACrE,OAAO,MAAM,IAAA,oBAAY,EACvB,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC;oBACX,MAAM,EAAE,iBAAiB;oBACzB,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;iBAC5B,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE;oBAChC,GAAG,IAAI;oBACP,MAAM,EAAE,eAAe,CAAC,MAAM;iBAC/B,CAAC,CAAC;gBAEH,mBAAmB,GAAG;oBACpB,MAAM,EAAE,KAAK,IAAI,EAAE;wBACjB,eAAe,CAAC,KAAK,EAAE,CAAC;wBACxB,IAAI,CAAC;4BACH,MAAM,YAAY,CAAC;wBACrB,CAAC;wBAAC,MAAM,CAAC;4BACP,gBAAgB;wBAClB,CAAC;oBACH,CAAC;iBACF,CAAC;gBACF,eAAe,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBAEzC,GAAG,GAAG,IAAI,eAAe,CACvB,MAAM,YAAY,EAClB,WAAW,EACX,OAAO,EACP,QAAQ,CACT,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBACtC,eAAe,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBAC9C,CAAC;gBACD,MAAM,MAAM,CAAC;oBACX,MAAM,EAAE,kBAAkB;oBAC1B,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;iBAC5B,CAAC,CAAC;YACL,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAiB,GAAG,CAAC,IAAI,CAAC,CAAC;gBAEnD,MAAM,kBAAkB,GAAG;oBACzB,MAAM;oBACJ,iFAAiF;oBACjF,KAAK,IAAI,EAAE;wBACT,IAAI,CAAC;4BACH,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC;wBAC/B,CAAC;wBAAC,MAAM,CAAC;4BACP,gBAAgB;wBAClB,CAAC;oBACH,CAAC;iBACJ,CAAC;gBACF,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBACxC,OAAO,CAAC,QAAQ,CACd,GAAG,CAAC,IAAI;gBACR,2FAA2F;gBAC3F,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC,CACjD,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,EAAE,EACJ,WAAW,CACZ,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;QAClC,WAAW,CAAC,YAAY,IAAI,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjE,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,4EAA4E;QAC5E,gEAAgE;QAChE,yFAAyF;QACzF,uEAAuE;QACvE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC1B,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAU;IAC3D,OAAO,EAAE,aAAa;CACvB,CAAC;AACF,kBAAe,eAAe,CAAC","sourcesContent":["import { assert } from '@metamask/utils';\n\nimport { withTeardown } from '../utils';\nimport type { EndowmentFactoryOptions } from './commonEndowmentFactory';\n\n/**\n * This class wraps a Response object.\n * That way, a teardown process can stop any processes left.\n */\nclass ResponseWrapper implements Response {\n readonly #teardownRef: { lastTeardown: number };\n\n #ogResponse: Response;\n\n #onStart: () => Promise<void>;\n\n #onFinish: () => Promise<void>;\n\n constructor(\n ogResponse: Response,\n teardownRef: { lastTeardown: number },\n onStart: () => Promise<void>,\n onFinish: () => Promise<void>,\n ) {\n this.#ogResponse = ogResponse;\n this.#teardownRef = teardownRef;\n this.#onStart = onStart;\n this.#onFinish = onFinish;\n }\n\n get body(): ReadableStream<Uint8Array> | null {\n return this.#ogResponse.body;\n }\n\n get bodyUsed() {\n return this.#ogResponse.bodyUsed;\n }\n\n get headers() {\n return this.#ogResponse.headers;\n }\n\n get ok() {\n return this.#ogResponse.ok;\n }\n\n get redirected() {\n return this.#ogResponse.redirected;\n }\n\n get status() {\n return this.#ogResponse.status;\n }\n\n get statusText() {\n return this.#ogResponse.statusText;\n }\n\n get type() {\n return this.#ogResponse.type;\n }\n\n get url() {\n return this.#ogResponse.url;\n }\n\n async text() {\n return await withTeardown<string>(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.text();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n\n async arrayBuffer(): Promise<ArrayBuffer> {\n return await withTeardown<ArrayBuffer>(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.arrayBuffer();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n\n async blob(): Promise<Blob> {\n return await withTeardown<Blob>(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.blob();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n\n clone(): Response {\n const newResponse = this.#ogResponse.clone();\n return new ResponseWrapper(\n newResponse,\n this.#teardownRef,\n this.#onStart,\n this.#onFinish,\n );\n }\n\n async formData(): Promise<FormData> {\n return await withTeardown<FormData>(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.formData();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n\n async json(): Promise<any> {\n return await withTeardown(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.json();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n}\n\n/**\n * Create a network endowment, consisting of a `fetch` function.\n * This allows us to provide a teardown function, so that we can cancel\n * any pending requests, connections, streams, etc. that may be open when a snap\n * is terminated.\n *\n * This wraps the original implementation of `fetch`,\n * to ensure that a bad actor cannot get access to the original function, thus\n * potentially preventing the network requests from being torn down.\n *\n * @param options - An options bag.\n * @param options.notify - A reference to the notify function of the snap executor.\n * @returns An object containing a wrapped `fetch`\n * function, as well as a teardown function.\n */\nconst createNetwork = ({ notify }: EndowmentFactoryOptions = {}) => {\n assert(notify, 'Notify must be passed to network endowment factory');\n // Open fetch calls or open body streams\n const openConnections = new Set<{ cancel: () => Promise<void> }>();\n // Track last teardown count\n const teardownRef = { lastTeardown: 0 };\n\n // Remove items from openConnections after they were garbage collected\n const cleanup = new FinalizationRegistry<() => void>(\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n (callback) => callback(),\n );\n\n const _fetch: typeof fetch = async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const abortController = new AbortController();\n if (init?.signal !== null && init?.signal !== undefined) {\n const originalSignal = init.signal;\n // Merge abort controllers\n originalSignal.addEventListener(\n 'abort',\n () => {\n abortController.abort((originalSignal as any).reason);\n },\n { once: true },\n );\n }\n\n let started = false;\n const onStart = async () => {\n if (!started) {\n started = true;\n await notify({\n method: 'OutboundRequest',\n params: { source: 'fetch' },\n });\n }\n };\n\n let finished = false;\n const onFinish = async () => {\n if (!finished) {\n finished = true;\n await notify({\n method: 'OutboundResponse',\n params: { source: 'fetch' },\n });\n }\n };\n\n let res: Response;\n let openFetchConnection: { cancel: () => Promise<void> } | undefined;\n return await withTeardown(\n (async () => {\n try {\n await notify({\n method: 'OutboundRequest',\n params: { source: 'fetch' },\n });\n const fetchPromise = fetch(input, {\n ...init,\n signal: abortController.signal,\n });\n\n openFetchConnection = {\n cancel: async () => {\n abortController.abort();\n try {\n await fetchPromise;\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openFetchConnection);\n\n res = new ResponseWrapper(\n await fetchPromise,\n teardownRef,\n onStart,\n onFinish,\n );\n } finally {\n if (openFetchConnection !== undefined) {\n openConnections.delete(openFetchConnection);\n }\n await notify({\n method: 'OutboundResponse',\n params: { source: 'fetch' },\n });\n }\n\n if (res.body !== null) {\n const body = new WeakRef<ReadableStream>(res.body);\n\n const openBodyConnection = {\n cancel:\n /* istanbul ignore next: see it.todo('can be torn down during body read') test */\n async () => {\n try {\n await body.deref()?.cancel();\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openBodyConnection);\n cleanup.register(\n res.body,\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n () => openConnections.delete(openBodyConnection),\n );\n }\n return harden(res);\n })(),\n teardownRef,\n );\n };\n\n const teardownFunction = async () => {\n teardownRef.lastTeardown += 1;\n const promises: Promise<void>[] = [];\n openConnections.forEach(({ cancel }) => promises.push(cancel()));\n openConnections.clear();\n await Promise.all(promises);\n };\n\n return {\n fetch: harden(_fetch),\n // Request, Headers and Response are the endowments injected alongside fetch\n // only when 'endowment:network-access' permission is requested,\n // therefore these are hardened as part of fetch dependency injection within its factory.\n // These endowments are not (and should never be) available by default.\n Request: harden(Request),\n Headers: harden(Headers),\n Response: harden(Response),\n teardownFunction,\n };\n};\n\nconst endowmentModule = {\n names: ['fetch', 'Request', 'Headers', 'Response'] as const,\n factory: createNetwork,\n};\nexport default endowmentModule;\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { EndowmentFactoryOptions } from
|
|
1
|
+
import type { EndowmentFactoryOptions } from "./commonEndowmentFactory.cjs";
|
|
2
2
|
declare const endowmentModule: {
|
|
3
3
|
names: readonly ["fetch", "Request", "Headers", "Response"];
|
|
4
4
|
factory: ({ notify }?: EndowmentFactoryOptions) => {
|
|
5
5
|
fetch: typeof fetch;
|
|
6
6
|
Request: {
|
|
7
|
-
new (input:
|
|
7
|
+
new (input: RequestInfo | URL, init?: RequestInit | undefined): Request;
|
|
8
8
|
prototype: Request;
|
|
9
9
|
};
|
|
10
10
|
Headers: {
|
|
@@ -15,9 +15,11 @@ declare const endowmentModule: {
|
|
|
15
15
|
new (body?: BodyInit | null | undefined, init?: ResponseInit | undefined): Response;
|
|
16
16
|
prototype: Response;
|
|
17
17
|
error(): Response;
|
|
18
|
+
json(data: any, init?: ResponseInit | undefined): Response;
|
|
18
19
|
redirect(url: string | URL, status?: number | undefined): Response;
|
|
19
20
|
};
|
|
20
21
|
teardownFunction: () => Promise<void>;
|
|
21
22
|
};
|
|
22
23
|
};
|
|
23
24
|
export default endowmentModule;
|
|
25
|
+
//# sourceMappingURL=network.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.cts","sourceRoot":"","sources":["../../../src/common/endowments/network.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,qCAAiC;AA6SxE,QAAA,MAAM,eAAe;;2BA9Ic,uBAAuB;;;;;;;;;;;;;;;;;;;CAiJzD,CAAC;AACF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { EndowmentFactoryOptions } from "./commonEndowmentFactory.mjs";
|
|
2
|
+
declare const endowmentModule: {
|
|
3
|
+
names: readonly ["fetch", "Request", "Headers", "Response"];
|
|
4
|
+
factory: ({ notify }?: EndowmentFactoryOptions) => {
|
|
5
|
+
fetch: typeof fetch;
|
|
6
|
+
Request: {
|
|
7
|
+
new (input: RequestInfo | URL, init?: RequestInit | undefined): Request;
|
|
8
|
+
prototype: Request;
|
|
9
|
+
};
|
|
10
|
+
Headers: {
|
|
11
|
+
new (init?: HeadersInit | undefined): Headers;
|
|
12
|
+
prototype: Headers;
|
|
13
|
+
};
|
|
14
|
+
Response: {
|
|
15
|
+
new (body?: BodyInit | null | undefined, init?: ResponseInit | undefined): Response;
|
|
16
|
+
prototype: Response;
|
|
17
|
+
error(): Response;
|
|
18
|
+
json(data: any, init?: ResponseInit | undefined): Response;
|
|
19
|
+
redirect(url: string | URL, status?: number | undefined): Response;
|
|
20
|
+
};
|
|
21
|
+
teardownFunction: () => Promise<void>;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export default endowmentModule;
|
|
25
|
+
//# sourceMappingURL=network.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.mts","sourceRoot":"","sources":["../../../src/common/endowments/network.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,qCAAiC;AA6SxE,QAAA,MAAM,eAAe;;2BA9Ic,uBAAuB;;;;;;;;;;;;;;;;;;;CAiJzD,CAAC;AACF,eAAe,eAAe,CAAC"}
|
|
@@ -1,10 +1,253 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import "../../chunk-YRZVIDCF.mjs";
|
|
7
|
-
export {
|
|
8
|
-
network_default as default
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
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");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
9
6
|
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
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");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _ResponseWrapper_teardownRef, _ResponseWrapper_ogResponse, _ResponseWrapper_onStart, _ResponseWrapper_onFinish;
|
|
13
|
+
import { assert } from "@metamask/utils";
|
|
14
|
+
import { withTeardown } from "../utils.mjs";
|
|
15
|
+
/**
|
|
16
|
+
* This class wraps a Response object.
|
|
17
|
+
* That way, a teardown process can stop any processes left.
|
|
18
|
+
*/
|
|
19
|
+
class ResponseWrapper {
|
|
20
|
+
constructor(ogResponse, teardownRef, onStart, onFinish) {
|
|
21
|
+
_ResponseWrapper_teardownRef.set(this, void 0);
|
|
22
|
+
_ResponseWrapper_ogResponse.set(this, void 0);
|
|
23
|
+
_ResponseWrapper_onStart.set(this, void 0);
|
|
24
|
+
_ResponseWrapper_onFinish.set(this, void 0);
|
|
25
|
+
__classPrivateFieldSet(this, _ResponseWrapper_ogResponse, ogResponse, "f");
|
|
26
|
+
__classPrivateFieldSet(this, _ResponseWrapper_teardownRef, teardownRef, "f");
|
|
27
|
+
__classPrivateFieldSet(this, _ResponseWrapper_onStart, onStart, "f");
|
|
28
|
+
__classPrivateFieldSet(this, _ResponseWrapper_onFinish, onFinish, "f");
|
|
29
|
+
}
|
|
30
|
+
get body() {
|
|
31
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").body;
|
|
32
|
+
}
|
|
33
|
+
get bodyUsed() {
|
|
34
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").bodyUsed;
|
|
35
|
+
}
|
|
36
|
+
get headers() {
|
|
37
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").headers;
|
|
38
|
+
}
|
|
39
|
+
get ok() {
|
|
40
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").ok;
|
|
41
|
+
}
|
|
42
|
+
get redirected() {
|
|
43
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").redirected;
|
|
44
|
+
}
|
|
45
|
+
get status() {
|
|
46
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").status;
|
|
47
|
+
}
|
|
48
|
+
get statusText() {
|
|
49
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").statusText;
|
|
50
|
+
}
|
|
51
|
+
get type() {
|
|
52
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").type;
|
|
53
|
+
}
|
|
54
|
+
get url() {
|
|
55
|
+
return __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").url;
|
|
56
|
+
}
|
|
57
|
+
async text() {
|
|
58
|
+
return await withTeardown((async () => {
|
|
59
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
60
|
+
try {
|
|
61
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").text();
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
65
|
+
}
|
|
66
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
67
|
+
}
|
|
68
|
+
async arrayBuffer() {
|
|
69
|
+
return await withTeardown((async () => {
|
|
70
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
71
|
+
try {
|
|
72
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").arrayBuffer();
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
76
|
+
}
|
|
77
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
78
|
+
}
|
|
79
|
+
async blob() {
|
|
80
|
+
return await withTeardown((async () => {
|
|
81
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
82
|
+
try {
|
|
83
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").blob();
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
87
|
+
}
|
|
88
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
89
|
+
}
|
|
90
|
+
clone() {
|
|
91
|
+
const newResponse = __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").clone();
|
|
92
|
+
return new ResponseWrapper(newResponse, __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"), __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f"), __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f"));
|
|
93
|
+
}
|
|
94
|
+
async formData() {
|
|
95
|
+
return await withTeardown((async () => {
|
|
96
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
97
|
+
try {
|
|
98
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").formData();
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
102
|
+
}
|
|
103
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
104
|
+
}
|
|
105
|
+
async json() {
|
|
106
|
+
return await withTeardown((async () => {
|
|
107
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onStart, "f").call(this);
|
|
108
|
+
try {
|
|
109
|
+
return await __classPrivateFieldGet(this, _ResponseWrapper_ogResponse, "f").json();
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
await __classPrivateFieldGet(this, _ResponseWrapper_onFinish, "f").call(this);
|
|
113
|
+
}
|
|
114
|
+
})(), __classPrivateFieldGet(this, _ResponseWrapper_teardownRef, "f"));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
_ResponseWrapper_teardownRef = new WeakMap(), _ResponseWrapper_ogResponse = new WeakMap(), _ResponseWrapper_onStart = new WeakMap(), _ResponseWrapper_onFinish = new WeakMap();
|
|
118
|
+
/**
|
|
119
|
+
* Create a network endowment, consisting of a `fetch` function.
|
|
120
|
+
* This allows us to provide a teardown function, so that we can cancel
|
|
121
|
+
* any pending requests, connections, streams, etc. that may be open when a snap
|
|
122
|
+
* is terminated.
|
|
123
|
+
*
|
|
124
|
+
* This wraps the original implementation of `fetch`,
|
|
125
|
+
* to ensure that a bad actor cannot get access to the original function, thus
|
|
126
|
+
* potentially preventing the network requests from being torn down.
|
|
127
|
+
*
|
|
128
|
+
* @param options - An options bag.
|
|
129
|
+
* @param options.notify - A reference to the notify function of the snap executor.
|
|
130
|
+
* @returns An object containing a wrapped `fetch`
|
|
131
|
+
* function, as well as a teardown function.
|
|
132
|
+
*/
|
|
133
|
+
const createNetwork = ({ notify } = {}) => {
|
|
134
|
+
assert(notify, 'Notify must be passed to network endowment factory');
|
|
135
|
+
// Open fetch calls or open body streams
|
|
136
|
+
const openConnections = new Set();
|
|
137
|
+
// Track last teardown count
|
|
138
|
+
const teardownRef = { lastTeardown: 0 };
|
|
139
|
+
// Remove items from openConnections after they were garbage collected
|
|
140
|
+
const cleanup = new FinalizationRegistry(
|
|
141
|
+
/* istanbul ignore next: can't test garbage collection without modifying node parameters */
|
|
142
|
+
(callback) => callback());
|
|
143
|
+
const _fetch = async (input, init) => {
|
|
144
|
+
const abortController = new AbortController();
|
|
145
|
+
if (init?.signal !== null && init?.signal !== undefined) {
|
|
146
|
+
const originalSignal = init.signal;
|
|
147
|
+
// Merge abort controllers
|
|
148
|
+
originalSignal.addEventListener('abort', () => {
|
|
149
|
+
abortController.abort(originalSignal.reason);
|
|
150
|
+
}, { once: true });
|
|
151
|
+
}
|
|
152
|
+
let started = false;
|
|
153
|
+
const onStart = async () => {
|
|
154
|
+
if (!started) {
|
|
155
|
+
started = true;
|
|
156
|
+
await notify({
|
|
157
|
+
method: 'OutboundRequest',
|
|
158
|
+
params: { source: 'fetch' },
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
let finished = false;
|
|
163
|
+
const onFinish = async () => {
|
|
164
|
+
if (!finished) {
|
|
165
|
+
finished = true;
|
|
166
|
+
await notify({
|
|
167
|
+
method: 'OutboundResponse',
|
|
168
|
+
params: { source: 'fetch' },
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
let res;
|
|
173
|
+
let openFetchConnection;
|
|
174
|
+
return await withTeardown((async () => {
|
|
175
|
+
try {
|
|
176
|
+
await notify({
|
|
177
|
+
method: 'OutboundRequest',
|
|
178
|
+
params: { source: 'fetch' },
|
|
179
|
+
});
|
|
180
|
+
const fetchPromise = fetch(input, {
|
|
181
|
+
...init,
|
|
182
|
+
signal: abortController.signal,
|
|
183
|
+
});
|
|
184
|
+
openFetchConnection = {
|
|
185
|
+
cancel: async () => {
|
|
186
|
+
abortController.abort();
|
|
187
|
+
try {
|
|
188
|
+
await fetchPromise;
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
/* do nothing */
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
openConnections.add(openFetchConnection);
|
|
196
|
+
res = new ResponseWrapper(await fetchPromise, teardownRef, onStart, onFinish);
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
if (openFetchConnection !== undefined) {
|
|
200
|
+
openConnections.delete(openFetchConnection);
|
|
201
|
+
}
|
|
202
|
+
await notify({
|
|
203
|
+
method: 'OutboundResponse',
|
|
204
|
+
params: { source: 'fetch' },
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (res.body !== null) {
|
|
208
|
+
const body = new WeakRef(res.body);
|
|
209
|
+
const openBodyConnection = {
|
|
210
|
+
cancel:
|
|
211
|
+
/* istanbul ignore next: see it.todo('can be torn down during body read') test */
|
|
212
|
+
async () => {
|
|
213
|
+
try {
|
|
214
|
+
await body.deref()?.cancel();
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
/* do nothing */
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
openConnections.add(openBodyConnection);
|
|
222
|
+
cleanup.register(res.body,
|
|
223
|
+
/* istanbul ignore next: can't test garbage collection without modifying node parameters */
|
|
224
|
+
() => openConnections.delete(openBodyConnection));
|
|
225
|
+
}
|
|
226
|
+
return harden(res);
|
|
227
|
+
})(), teardownRef);
|
|
228
|
+
};
|
|
229
|
+
const teardownFunction = async () => {
|
|
230
|
+
teardownRef.lastTeardown += 1;
|
|
231
|
+
const promises = [];
|
|
232
|
+
openConnections.forEach(({ cancel }) => promises.push(cancel()));
|
|
233
|
+
openConnections.clear();
|
|
234
|
+
await Promise.all(promises);
|
|
235
|
+
};
|
|
236
|
+
return {
|
|
237
|
+
fetch: harden(_fetch),
|
|
238
|
+
// Request, Headers and Response are the endowments injected alongside fetch
|
|
239
|
+
// only when 'endowment:network-access' permission is requested,
|
|
240
|
+
// therefore these are hardened as part of fetch dependency injection within its factory.
|
|
241
|
+
// These endowments are not (and should never be) available by default.
|
|
242
|
+
Request: harden(Request),
|
|
243
|
+
Headers: harden(Headers),
|
|
244
|
+
Response: harden(Response),
|
|
245
|
+
teardownFunction,
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
const endowmentModule = {
|
|
249
|
+
names: ['fetch', 'Request', 'Headers', 'Response'],
|
|
250
|
+
factory: createNetwork,
|
|
251
|
+
};
|
|
252
|
+
export default endowmentModule;
|
|
10
253
|
//# sourceMappingURL=network.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"file":"network.mjs","sourceRoot":"","sources":["../../../src/common/endowments/network.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert } from '@metamask/utils';\n\nimport { withTeardown } from '../utils';\nimport type { EndowmentFactoryOptions } from './commonEndowmentFactory';\n\n/**\n * This class wraps a Response object.\n * That way, a teardown process can stop any processes left.\n */\nclass ResponseWrapper implements Response {\n readonly #teardownRef: { lastTeardown: number };\n\n #ogResponse: Response;\n\n #onStart: () => Promise<void>;\n\n #onFinish: () => Promise<void>;\n\n constructor(\n ogResponse: Response,\n teardownRef: { lastTeardown: number },\n onStart: () => Promise<void>,\n onFinish: () => Promise<void>,\n ) {\n this.#ogResponse = ogResponse;\n this.#teardownRef = teardownRef;\n this.#onStart = onStart;\n this.#onFinish = onFinish;\n }\n\n get body(): ReadableStream<Uint8Array> | null {\n return this.#ogResponse.body;\n }\n\n get bodyUsed() {\n return this.#ogResponse.bodyUsed;\n }\n\n get headers() {\n return this.#ogResponse.headers;\n }\n\n get ok() {\n return this.#ogResponse.ok;\n }\n\n get redirected() {\n return this.#ogResponse.redirected;\n }\n\n get status() {\n return this.#ogResponse.status;\n }\n\n get statusText() {\n return this.#ogResponse.statusText;\n }\n\n get type() {\n return this.#ogResponse.type;\n }\n\n get url() {\n return this.#ogResponse.url;\n }\n\n async text() {\n return await withTeardown<string>(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.text();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n\n async arrayBuffer(): Promise<ArrayBuffer> {\n return await withTeardown<ArrayBuffer>(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.arrayBuffer();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n\n async blob(): Promise<Blob> {\n return await withTeardown<Blob>(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.blob();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n\n clone(): Response {\n const newResponse = this.#ogResponse.clone();\n return new ResponseWrapper(\n newResponse,\n this.#teardownRef,\n this.#onStart,\n this.#onFinish,\n );\n }\n\n async formData(): Promise<FormData> {\n return await withTeardown<FormData>(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.formData();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n\n async json(): Promise<any> {\n return await withTeardown(\n (async () => {\n await this.#onStart();\n try {\n return await this.#ogResponse.json();\n } finally {\n await this.#onFinish();\n }\n })(),\n this.#teardownRef,\n );\n }\n}\n\n/**\n * Create a network endowment, consisting of a `fetch` function.\n * This allows us to provide a teardown function, so that we can cancel\n * any pending requests, connections, streams, etc. that may be open when a snap\n * is terminated.\n *\n * This wraps the original implementation of `fetch`,\n * to ensure that a bad actor cannot get access to the original function, thus\n * potentially preventing the network requests from being torn down.\n *\n * @param options - An options bag.\n * @param options.notify - A reference to the notify function of the snap executor.\n * @returns An object containing a wrapped `fetch`\n * function, as well as a teardown function.\n */\nconst createNetwork = ({ notify }: EndowmentFactoryOptions = {}) => {\n assert(notify, 'Notify must be passed to network endowment factory');\n // Open fetch calls or open body streams\n const openConnections = new Set<{ cancel: () => Promise<void> }>();\n // Track last teardown count\n const teardownRef = { lastTeardown: 0 };\n\n // Remove items from openConnections after they were garbage collected\n const cleanup = new FinalizationRegistry<() => void>(\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n (callback) => callback(),\n );\n\n const _fetch: typeof fetch = async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const abortController = new AbortController();\n if (init?.signal !== null && init?.signal !== undefined) {\n const originalSignal = init.signal;\n // Merge abort controllers\n originalSignal.addEventListener(\n 'abort',\n () => {\n abortController.abort((originalSignal as any).reason);\n },\n { once: true },\n );\n }\n\n let started = false;\n const onStart = async () => {\n if (!started) {\n started = true;\n await notify({\n method: 'OutboundRequest',\n params: { source: 'fetch' },\n });\n }\n };\n\n let finished = false;\n const onFinish = async () => {\n if (!finished) {\n finished = true;\n await notify({\n method: 'OutboundResponse',\n params: { source: 'fetch' },\n });\n }\n };\n\n let res: Response;\n let openFetchConnection: { cancel: () => Promise<void> } | undefined;\n return await withTeardown(\n (async () => {\n try {\n await notify({\n method: 'OutboundRequest',\n params: { source: 'fetch' },\n });\n const fetchPromise = fetch(input, {\n ...init,\n signal: abortController.signal,\n });\n\n openFetchConnection = {\n cancel: async () => {\n abortController.abort();\n try {\n await fetchPromise;\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openFetchConnection);\n\n res = new ResponseWrapper(\n await fetchPromise,\n teardownRef,\n onStart,\n onFinish,\n );\n } finally {\n if (openFetchConnection !== undefined) {\n openConnections.delete(openFetchConnection);\n }\n await notify({\n method: 'OutboundResponse',\n params: { source: 'fetch' },\n });\n }\n\n if (res.body !== null) {\n const body = new WeakRef<ReadableStream>(res.body);\n\n const openBodyConnection = {\n cancel:\n /* istanbul ignore next: see it.todo('can be torn down during body read') test */\n async () => {\n try {\n await body.deref()?.cancel();\n } catch {\n /* do nothing */\n }\n },\n };\n openConnections.add(openBodyConnection);\n cleanup.register(\n res.body,\n /* istanbul ignore next: can't test garbage collection without modifying node parameters */\n () => openConnections.delete(openBodyConnection),\n );\n }\n return harden(res);\n })(),\n teardownRef,\n );\n };\n\n const teardownFunction = async () => {\n teardownRef.lastTeardown += 1;\n const promises: Promise<void>[] = [];\n openConnections.forEach(({ cancel }) => promises.push(cancel()));\n openConnections.clear();\n await Promise.all(promises);\n };\n\n return {\n fetch: harden(_fetch),\n // Request, Headers and Response are the endowments injected alongside fetch\n // only when 'endowment:network-access' permission is requested,\n // therefore these are hardened as part of fetch dependency injection within its factory.\n // These endowments are not (and should never be) available by default.\n Request: harden(Request),\n Headers: harden(Headers),\n Response: harden(Response),\n teardownFunction,\n };\n};\n\nconst endowmentModule = {\n names: ['fetch', 'Request', 'Headers', 'Response'] as const,\n factory: createNetwork,\n};\nexport default endowmentModule;\n"]}
|