@metamask/snaps-controllers 5.0.1 → 6.0.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 +18 -1
- package/dist/chunk-36YC4Z3T.mjs +109 -0
- package/dist/chunk-36YC4Z3T.mjs.map +1 -0
- package/dist/chunk-3RNW7OKG.mjs +1 -0
- package/dist/chunk-3RNW7OKG.mjs.map +1 -0
- package/dist/chunk-43ODL57R.js +39 -0
- package/dist/chunk-43ODL57R.js.map +1 -0
- package/dist/chunk-4HVWEABQ.mjs +9 -0
- package/dist/chunk-4HVWEABQ.mjs.map +1 -0
- package/dist/chunk-4LGL4A3M.js +105 -0
- package/dist/chunk-4LGL4A3M.js.map +1 -0
- package/dist/chunk-4URGXJP7.js +1 -0
- package/dist/chunk-4URGXJP7.js.map +1 -0
- package/dist/chunk-5R4ENIDN.mjs +2307 -0
- package/dist/chunk-5R4ENIDN.mjs.map +1 -0
- package/dist/chunk-5YBORD3A.js +19 -0
- package/dist/chunk-5YBORD3A.js.map +1 -0
- package/dist/chunk-6EZSNS4O.mjs +59 -0
- package/dist/chunk-6EZSNS4O.mjs.map +1 -0
- package/dist/chunk-6GMWL4JR.mjs +92 -0
- package/dist/chunk-6GMWL4JR.mjs.map +1 -0
- package/dist/chunk-6N6KZYVD.js +12 -0
- package/dist/chunk-6N6KZYVD.js.map +1 -0
- package/dist/chunk-6NYC5VNK.mjs +354 -0
- package/dist/chunk-6NYC5VNK.mjs.map +1 -0
- package/dist/chunk-6XGUJ27X.js +72 -0
- package/dist/chunk-6XGUJ27X.js.map +1 -0
- package/dist/chunk-6YVCFPP6.mjs +58 -0
- package/dist/chunk-6YVCFPP6.mjs.map +1 -0
- package/dist/chunk-7JY5VENP.js +273 -0
- package/dist/chunk-7JY5VENP.js.map +1 -0
- package/dist/chunk-7PZECZV3.mjs +38 -0
- package/dist/chunk-7PZECZV3.mjs.map +1 -0
- package/dist/chunk-7WOG63YY.js +40 -0
- package/dist/chunk-7WOG63YY.js.map +1 -0
- package/dist/chunk-7Y6P5FRN.js +60 -0
- package/dist/chunk-7Y6P5FRN.js.map +1 -0
- package/dist/chunk-A6WJEA3C.js +1 -0
- package/dist/chunk-A6WJEA3C.js.map +1 -0
- package/dist/chunk-AP7CJ6DA.js +47 -0
- package/dist/chunk-AP7CJ6DA.js.map +1 -0
- package/dist/chunk-B3UTLNYS.mjs +48 -0
- package/dist/chunk-B3UTLNYS.mjs.map +1 -0
- package/dist/chunk-B67RDBZ4.mjs +40 -0
- package/dist/chunk-B67RDBZ4.mjs.map +1 -0
- package/dist/chunk-B7R3EWM3.mjs +1 -0
- package/dist/chunk-B7R3EWM3.mjs.map +1 -0
- package/dist/chunk-BAEXVO3U.mjs +1 -0
- package/dist/chunk-BAEXVO3U.mjs.map +1 -0
- package/dist/chunk-BO2ZDPWV.js +59 -0
- package/dist/chunk-BO2ZDPWV.js.map +1 -0
- package/dist/chunk-C4D6GBMY.js +71 -0
- package/dist/chunk-C4D6GBMY.js.map +1 -0
- package/dist/chunk-D74XJG2L.js +1 -0
- package/dist/chunk-D74XJG2L.js.map +1 -0
- package/dist/chunk-DSQYZGBH.mjs +273 -0
- package/dist/chunk-DSQYZGBH.mjs.map +1 -0
- package/dist/chunk-ESQPQNEF.mjs +1 -0
- package/dist/chunk-ESQPQNEF.mjs.map +1 -0
- package/dist/chunk-EXN2TFDJ.js +38 -0
- package/dist/chunk-EXN2TFDJ.js.map +1 -0
- package/dist/chunk-FX5AADOV.mjs +1 -0
- package/dist/chunk-FX5AADOV.mjs.map +1 -0
- package/dist/chunk-FZY2Z5NP.js +38 -0
- package/dist/chunk-FZY2Z5NP.js.map +1 -0
- package/dist/chunk-G66GQJS6.js +1 -0
- package/dist/chunk-G66GQJS6.js.map +1 -0
- package/dist/chunk-G7U6WKWS.mjs +1 -0
- package/dist/chunk-G7U6WKWS.mjs.map +1 -0
- package/dist/chunk-HOY6NKQR.js +1 -0
- package/dist/chunk-HOY6NKQR.js.map +1 -0
- package/dist/chunk-HWJE3SDW.mjs +1 -0
- package/dist/chunk-HWJE3SDW.mjs.map +1 -0
- package/dist/chunk-IABOI7TW.mjs +1 -0
- package/dist/chunk-IABOI7TW.mjs.map +1 -0
- package/dist/chunk-IGC4E7PI.mjs +71 -0
- package/dist/chunk-IGC4E7PI.mjs.map +1 -0
- package/dist/chunk-IMBPDTVN.mjs +72 -0
- package/dist/chunk-IMBPDTVN.mjs.map +1 -0
- package/dist/chunk-J4PGHMLL.js +38 -0
- package/dist/chunk-J4PGHMLL.js.map +1 -0
- package/dist/chunk-JAUAKTUL.js +1 -0
- package/dist/chunk-JAUAKTUL.js.map +1 -0
- package/dist/chunk-JDHKH5YU.js +354 -0
- package/dist/chunk-JDHKH5YU.js.map +1 -0
- package/dist/chunk-JW7WBUL7.js +1 -0
- package/dist/chunk-JW7WBUL7.js.map +1 -0
- package/dist/chunk-K276CM3B.mjs +197 -0
- package/dist/chunk-K276CM3B.mjs.map +1 -0
- package/dist/chunk-KBVG3CL2.js +58 -0
- package/dist/chunk-KBVG3CL2.js.map +1 -0
- package/dist/chunk-KCMULJ2M.mjs +1 -0
- package/dist/chunk-KCMULJ2M.mjs.map +1 -0
- package/dist/chunk-KF4PCKG7.mjs +74 -0
- package/dist/chunk-KF4PCKG7.mjs.map +1 -0
- package/dist/chunk-KLK7ZRMH.js +55 -0
- package/dist/chunk-KLK7ZRMH.js.map +1 -0
- package/dist/chunk-LWBPKSU2.js +48 -0
- package/dist/chunk-LWBPKSU2.js.map +1 -0
- package/dist/chunk-MYWDTEX2.js +283 -0
- package/dist/chunk-MYWDTEX2.js.map +1 -0
- package/dist/chunk-NC5PBDKD.mjs +47 -0
- package/dist/chunk-NC5PBDKD.mjs.map +1 -0
- package/dist/chunk-NOLPMHXS.js +101 -0
- package/dist/chunk-NOLPMHXS.js.map +1 -0
- package/dist/chunk-NXZVKBSV.js +9 -0
- package/dist/chunk-NXZVKBSV.js.map +1 -0
- package/dist/chunk-OHMCPTOI.js +1 -0
- package/dist/chunk-OHMCPTOI.js.map +1 -0
- package/dist/chunk-OIEUL55W.js +1 -0
- package/dist/chunk-OIEUL55W.js.map +1 -0
- package/dist/chunk-P7Y6MIZW.mjs +7 -0
- package/dist/chunk-P7Y6MIZW.mjs.map +1 -0
- package/dist/chunk-PGKMKSAR.mjs +105 -0
- package/dist/chunk-PGKMKSAR.mjs.map +1 -0
- package/dist/chunk-PXECEHH7.mjs +39 -0
- package/dist/chunk-PXECEHH7.mjs.map +1 -0
- package/dist/chunk-Q2ON6SMV.js +197 -0
- package/dist/chunk-Q2ON6SMV.js.map +1 -0
- package/dist/chunk-QL3QGUTM.mjs +1 -0
- package/dist/chunk-QL3QGUTM.mjs.map +1 -0
- package/dist/chunk-RDBT3ZJQ.js +92 -0
- package/dist/chunk-RDBT3ZJQ.js.map +1 -0
- package/dist/chunk-RIU3ZIXZ.mjs +55 -0
- package/dist/chunk-RIU3ZIXZ.mjs.map +1 -0
- package/dist/chunk-RU67JKBV.mjs +12 -0
- package/dist/chunk-RU67JKBV.mjs.map +1 -0
- package/dist/chunk-TG6OXBLR.js +1 -0
- package/dist/chunk-TG6OXBLR.js.map +1 -0
- package/dist/chunk-TMWMIQV4.js +1 -0
- package/dist/chunk-TMWMIQV4.js.map +1 -0
- package/dist/chunk-U6T2MPXT.js +74 -0
- package/dist/chunk-U6T2MPXT.js.map +1 -0
- package/dist/chunk-U74FML7Z.mjs +1 -0
- package/dist/chunk-U74FML7Z.mjs.map +1 -0
- package/dist/chunk-V6NFZ47P.mjs +1 -0
- package/dist/chunk-V6NFZ47P.mjs.map +1 -0
- package/dist/chunk-VNOCJWOK.js +1 -0
- package/dist/chunk-VNOCJWOK.js.map +1 -0
- package/dist/chunk-VOZOZKRC.mjs +101 -0
- package/dist/chunk-VOZOZKRC.mjs.map +1 -0
- package/dist/chunk-WEY7ICES.js +1 -0
- package/dist/chunk-WEY7ICES.js.map +1 -0
- package/dist/chunk-WKQRCGUW.mjs +331 -0
- package/dist/chunk-WKQRCGUW.mjs.map +1 -0
- package/dist/chunk-XE5IWVNV.js +109 -0
- package/dist/chunk-XE5IWVNV.js.map +1 -0
- package/dist/chunk-XWDEGRM5.js +331 -0
- package/dist/chunk-XWDEGRM5.js.map +1 -0
- package/dist/chunk-YIQM6ZKA.mjs +19 -0
- package/dist/chunk-YIQM6ZKA.mjs.map +1 -0
- package/dist/chunk-YRZVIDCF.mjs +38 -0
- package/dist/chunk-YRZVIDCF.mjs.map +1 -0
- package/dist/chunk-YYPUPKQY.js +7 -0
- package/dist/chunk-YYPUPKQY.js.map +1 -0
- package/dist/chunk-ZAMIT33L.js +2307 -0
- package/dist/chunk-ZAMIT33L.js.map +1 -0
- package/dist/chunk-ZETJVFUS.mjs +283 -0
- package/dist/chunk-ZETJVFUS.mjs.map +1 -0
- package/dist/chunk-ZQAGLOXD.mjs +1 -0
- package/dist/chunk-ZQAGLOXD.mjs.map +1 -0
- package/dist/chunk-ZRS2VVUV.mjs +38 -0
- package/dist/chunk-ZRS2VVUV.mjs.map +1 -0
- package/dist/chunk-ZVOYOZFT.mjs +60 -0
- package/dist/chunk-ZVOYOZFT.mjs.map +1 -0
- package/dist/cronjob/CronjobController.js +41 -0
- package/dist/cronjob/CronjobController.js.map +1 -0
- package/dist/cronjob/CronjobController.mjs +41 -0
- package/dist/cronjob/CronjobController.mjs.map +1 -0
- package/dist/cronjob/index.js +41 -0
- package/dist/cronjob/index.js.map +1 -0
- package/dist/cronjob/index.mjs +41 -0
- package/dist/cronjob/index.mjs.map +1 -0
- package/dist/fsm.js +10 -0
- package/dist/fsm.js.map +1 -0
- package/dist/fsm.mjs +10 -0
- package/dist/fsm.mjs.map +1 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +118 -0
- package/dist/index.mjs.map +1 -0
- package/dist/interface/SnapInterfaceController.js +9 -0
- package/dist/interface/SnapInterfaceController.js.map +1 -0
- package/dist/interface/SnapInterfaceController.mjs +9 -0
- package/dist/interface/SnapInterfaceController.mjs.map +1 -0
- package/dist/interface/index.js +10 -0
- package/dist/interface/index.js.map +1 -0
- package/dist/interface/index.mjs +10 -0
- package/dist/interface/index.mjs.map +1 -0
- package/dist/interface/utils.js +14 -0
- package/dist/interface/utils.js.map +1 -0
- package/dist/interface/utils.mjs +14 -0
- package/dist/interface/utils.mjs.map +1 -0
- package/dist/logging.js +8 -0
- package/dist/logging.js.map +1 -0
- package/dist/logging.mjs +8 -0
- package/dist/logging.mjs.map +1 -0
- package/dist/node.js +128 -0
- package/dist/node.js.map +1 -0
- package/dist/node.mjs +128 -0
- package/dist/node.mjs.map +1 -0
- package/dist/react-native.js +125 -0
- package/dist/react-native.js.map +1 -0
- package/dist/react-native.mjs +125 -0
- package/dist/react-native.mjs.map +1 -0
- package/dist/services/AbstractExecutionService.js +13 -0
- package/dist/services/AbstractExecutionService.js.map +1 -0
- package/dist/services/AbstractExecutionService.mjs +13 -0
- package/dist/services/AbstractExecutionService.mjs.map +1 -0
- package/dist/services/ExecutionService.js +2 -0
- package/dist/services/ExecutionService.js.map +1 -0
- package/dist/services/ExecutionService.mjs +2 -0
- package/dist/services/ExecutionService.mjs.map +1 -0
- package/dist/services/ProxyPostMessageStream.js +8 -0
- package/dist/services/ProxyPostMessageStream.js.map +1 -0
- package/dist/services/ProxyPostMessageStream.mjs +8 -0
- package/dist/services/ProxyPostMessageStream.mjs.map +1 -0
- package/dist/services/browser.js +40 -0
- package/dist/services/browser.js.map +1 -0
- package/dist/services/browser.mjs +40 -0
- package/dist/services/browser.mjs.map +1 -0
- package/dist/services/iframe/IframeExecutionService.js +12 -0
- package/dist/services/iframe/IframeExecutionService.js.map +1 -0
- package/dist/services/iframe/IframeExecutionService.mjs +12 -0
- package/dist/services/iframe/IframeExecutionService.mjs.map +1 -0
- package/dist/services/iframe/index.js +13 -0
- package/dist/services/iframe/index.js.map +1 -0
- package/dist/services/iframe/index.mjs +13 -0
- package/dist/services/iframe/index.mjs.map +1 -0
- package/dist/services/index.js +35 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/index.mjs +35 -0
- package/dist/services/index.mjs.map +1 -0
- package/dist/services/node-js/NodeProcessExecutionService.js +22 -0
- package/dist/services/node-js/NodeProcessExecutionService.js.map +1 -0
- package/dist/services/node-js/NodeProcessExecutionService.mjs +22 -0
- package/dist/services/node-js/NodeProcessExecutionService.mjs.map +1 -0
- package/dist/services/node-js/NodeThreadExecutionService.js +22 -0
- package/dist/services/node-js/NodeThreadExecutionService.js.map +1 -0
- package/dist/services/node-js/NodeThreadExecutionService.mjs +22 -0
- package/dist/services/node-js/NodeThreadExecutionService.mjs.map +1 -0
- package/dist/services/node-js/index.js +27 -0
- package/dist/services/node-js/index.js.map +1 -0
- package/dist/services/node-js/index.mjs +27 -0
- package/dist/services/node-js/index.mjs.map +1 -0
- package/dist/services/node.js +45 -0
- package/dist/services/node.js.map +1 -0
- package/dist/services/node.mjs +45 -0
- package/dist/services/node.mjs.map +1 -0
- package/dist/services/offscreen/OffscreenExecutionService.js +14 -0
- package/dist/services/offscreen/OffscreenExecutionService.js.map +1 -0
- package/dist/services/offscreen/OffscreenExecutionService.mjs +14 -0
- package/dist/services/offscreen/OffscreenExecutionService.mjs.map +1 -0
- package/dist/services/offscreen/index.js +15 -0
- package/dist/services/offscreen/index.js.map +1 -0
- package/dist/services/offscreen/index.mjs +15 -0
- package/dist/services/offscreen/index.mjs.map +1 -0
- package/dist/services/proxy/ProxyExecutionService.js +13 -0
- package/dist/services/proxy/ProxyExecutionService.js.map +1 -0
- package/dist/services/proxy/ProxyExecutionService.mjs +13 -0
- package/dist/services/proxy/ProxyExecutionService.mjs.map +1 -0
- package/dist/services/react-native.js +42 -0
- package/dist/services/react-native.js.map +1 -0
- package/dist/services/react-native.mjs +42 -0
- package/dist/services/react-native.mjs.map +1 -0
- package/dist/services/webview/WebViewExecutionService.js +15 -0
- package/dist/services/webview/WebViewExecutionService.js.map +1 -0
- package/dist/services/webview/WebViewExecutionService.mjs +15 -0
- package/dist/services/webview/WebViewExecutionService.mjs.map +1 -0
- package/dist/services/webview/WebViewMessageStream.js +8 -0
- package/dist/services/webview/WebViewMessageStream.js.map +1 -0
- package/dist/services/webview/WebViewMessageStream.mjs +8 -0
- package/dist/services/webview/WebViewMessageStream.mjs.map +1 -0
- package/dist/services/webview/index.js +16 -0
- package/dist/services/webview/index.js.map +1 -0
- package/dist/services/webview/index.mjs +16 -0
- package/dist/services/webview/index.mjs.map +1 -0
- package/dist/services/webworker/WebWorkerExecutionService.js +15 -0
- package/dist/services/webworker/WebWorkerExecutionService.js.map +1 -0
- package/dist/services/webworker/WebWorkerExecutionService.mjs +15 -0
- package/dist/services/webworker/WebWorkerExecutionService.mjs.map +1 -0
- package/dist/services/webworker/index.js +16 -0
- package/dist/services/webworker/index.js.map +1 -0
- package/dist/services/webworker/index.mjs +16 -0
- package/dist/services/webworker/index.mjs.map +1 -0
- package/dist/snaps/RequestQueue.js +8 -0
- package/dist/snaps/RequestQueue.js.map +1 -0
- package/dist/snaps/RequestQueue.mjs +8 -0
- package/dist/snaps/RequestQueue.mjs.map +1 -0
- package/dist/snaps/SnapController.js +30 -0
- package/dist/snaps/SnapController.js.map +1 -0
- package/dist/snaps/SnapController.mjs +30 -0
- package/dist/snaps/SnapController.mjs.map +1 -0
- package/dist/snaps/Timer.js +8 -0
- package/dist/snaps/Timer.js.map +1 -0
- package/dist/snaps/Timer.mjs +8 -0
- package/dist/snaps/Timer.mjs.map +1 -0
- package/dist/snaps/constants.js +8 -0
- package/dist/snaps/constants.js.map +1 -0
- package/dist/snaps/constants.mjs +8 -0
- package/dist/snaps/constants.mjs.map +1 -0
- package/dist/snaps/index.js +63 -0
- package/dist/snaps/index.js.map +1 -0
- package/dist/snaps/index.mjs +63 -0
- package/dist/snaps/index.mjs.map +1 -0
- package/dist/snaps/location/http.js +8 -0
- package/dist/snaps/location/http.js.map +1 -0
- package/dist/snaps/location/http.mjs +8 -0
- package/dist/snaps/location/http.mjs.map +1 -0
- package/dist/snaps/location/index.js +31 -0
- package/dist/snaps/location/index.js.map +1 -0
- package/dist/snaps/location/index.mjs +31 -0
- package/dist/snaps/location/index.mjs.map +1 -0
- package/dist/snaps/location/local.js +9 -0
- package/dist/snaps/location/local.js.map +1 -0
- package/dist/snaps/location/local.mjs +9 -0
- package/dist/snaps/location/local.mjs.map +1 -0
- package/dist/snaps/location/location.js +11 -0
- package/dist/snaps/location/location.js.map +1 -0
- package/dist/snaps/location/location.mjs +11 -0
- package/dist/snaps/location/location.mjs.map +1 -0
- package/dist/snaps/location/npm.js +18 -0
- package/dist/snaps/location/npm.js.map +1 -0
- package/dist/snaps/location/npm.mjs +18 -0
- package/dist/snaps/location/npm.mjs.map +1 -0
- package/dist/snaps/registry/index.js +13 -0
- package/dist/snaps/registry/index.js.map +1 -0
- package/dist/snaps/registry/index.mjs +13 -0
- package/dist/snaps/registry/index.mjs.map +1 -0
- package/dist/snaps/registry/json.js +9 -0
- package/dist/snaps/registry/json.js.map +1 -0
- package/dist/snaps/registry/json.mjs +9 -0
- package/dist/snaps/registry/json.mjs.map +1 -0
- package/dist/snaps/registry/registry.js +8 -0
- package/dist/snaps/registry/registry.js.map +1 -0
- package/dist/snaps/registry/registry.mjs +8 -0
- package/dist/snaps/registry/registry.mjs.map +1 -0
- package/dist/snaps/selectors.js +8 -0
- package/dist/snaps/selectors.js.map +1 -0
- package/dist/snaps/selectors.mjs +8 -0
- package/dist/snaps/selectors.mjs.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/types/node.d.ts +2 -0
- package/dist/types/react-native.d.ts +2 -0
- package/dist/types/services/index.d.ts +0 -2
- package/dist/types/services/node.d.ts +2 -0
- package/dist/types/services/react-native.d.ts +2 -0
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/vendor/global.d.js +1 -0
- package/dist/types/vendor/global.d.js.map +1 -0
- package/dist/types/vendor/global.d.mjs +1 -0
- package/dist/types/vendor/global.d.mjs.map +1 -0
- package/dist/types/vendor/readable-stream.d.js +1 -0
- package/dist/types/vendor/readable-stream.d.js.map +1 -0
- package/dist/types/vendor/readable-stream.d.mjs +1 -0
- package/dist/types/vendor/readable-stream.d.mjs.map +1 -0
- package/dist/types/vendor/zlib.d.js +1 -0
- package/dist/types/vendor/zlib.d.js.map +1 -0
- package/dist/types/vendor/zlib.d.mjs +1 -0
- package/dist/types/vendor/zlib.d.mjs.map +1 -0
- package/dist/utils.js +21 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +21 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +31 -22
- package/dist/cjs/cronjob/CronjobController.js +0 -296
- 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 -24
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/interface/SnapInterfaceController.js +0 -166
- package/dist/cjs/interface/SnapInterfaceController.js.map +0 -1
- package/dist/cjs/interface/index.js +0 -20
- package/dist/cjs/interface/index.js.map +0 -1
- package/dist/cjs/interface/utils.js +0 -59
- package/dist/cjs/interface/utils.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 -387
- 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 -109
- package/dist/cjs/services/ProxyPostMessageStream.js.map +0 -1
- package/dist/cjs/services/browser.js +0 -33
- 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 -33
- package/dist/cjs/services/index.js.map +0 -1
- package/dist/cjs/services/node/NodeProcessExecutionService.js +0 -42
- package/dist/cjs/services/node/NodeProcessExecutionService.js.map +0 -1
- package/dist/cjs/services/node/NodeThreadExecutionService.js +0 -43
- 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 -96
- 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/proxy/ProxyExecutionService.js +0 -110
- package/dist/cjs/services/proxy/ProxyExecutionService.js.map +0 -1
- package/dist/cjs/services/webview/WebViewExecutionService.js +0 -99
- package/dist/cjs/services/webview/WebViewExecutionService.js.map +0 -1
- package/dist/cjs/services/webview/WebViewMessageStream.js +0 -127
- package/dist/cjs/services/webview/WebViewMessageStream.js.map +0 -1
- package/dist/cjs/services/webview/index.js +0 -20
- package/dist/cjs/services/webview/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 -1968
- 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/constants.js +0 -25
- package/dist/cjs/snaps/constants.js.map +0 -1
- package/dist/cjs/snaps/index.js +0 -23
- 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 -389
- package/dist/cjs/snaps/location/npm.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 -311
- 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 -111
- package/dist/cjs/utils.js.map +0 -1
- package/dist/esm/cronjob/CronjobController.js +0 -281
- 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 -7
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/interface/SnapInterfaceController.js +0 -158
- package/dist/esm/interface/SnapInterfaceController.js.map +0 -1
- package/dist/esm/interface/index.js +0 -3
- package/dist/esm/interface/index.js.map +0 -1
- package/dist/esm/interface/utils.js +0 -62
- package/dist/esm/interface/utils.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 -370
- 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 -102
- package/dist/esm/services/ProxyPostMessageStream.js.map +0 -1
- package/dist/esm/services/browser.js +0 -10
- 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 -10
- package/dist/esm/services/index.js.map +0 -1
- package/dist/esm/services/node/NodeProcessExecutionService.js +0 -32
- package/dist/esm/services/node/NodeProcessExecutionService.js.map +0 -1
- package/dist/esm/services/node/NodeThreadExecutionService.js +0 -34
- 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 -86
- 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/proxy/ProxyExecutionService.js +0 -100
- package/dist/esm/services/proxy/ProxyExecutionService.js.map +0 -1
- package/dist/esm/services/webview/WebViewExecutionService.js +0 -89
- package/dist/esm/services/webview/WebViewExecutionService.js.map +0 -1
- package/dist/esm/services/webview/WebViewMessageStream.js +0 -119
- package/dist/esm/services/webview/WebViewMessageStream.js.map +0 -1
- package/dist/esm/services/webview/index.js +0 -3
- package/dist/esm/services/webview/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 -1947
- 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/constants.js +0 -16
- package/dist/esm/snaps/constants.js.map +0 -1
- package/dist/esm/snaps/index.js +0 -6
- package/dist/esm/snaps/index.js.map +0 -1
- package/dist/esm/snaps/location/http.js +0 -96
- 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 +0 -373
- package/dist/esm/snaps/location/npm.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 -301
- 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 +0 -132
- package/dist/esm/utils.js.map +0 -1
- /package/dist/types/services/{node → node-js}/NodeProcessExecutionService.d.ts +0 -0
- /package/dist/types/services/{node → node-js}/NodeThreadExecutionService.d.ts +0 -0
- /package/dist/types/services/{node → node-js}/index.d.ts +0 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
|
|
7
|
+
|
|
8
|
+
// src/snaps/registry/json.ts
|
|
9
|
+
var _basecontroller = require('@metamask/base-controller');
|
|
10
|
+
var _snapsregistry = require('@metamask/snaps-registry');
|
|
11
|
+
var _snapsutils = require('@metamask/snaps-utils');
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
var _utils = require('@metamask/utils');
|
|
19
|
+
var SNAP_REGISTRY_URL = "https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/registry.json";
|
|
20
|
+
var SNAP_REGISTRY_SIGNATURE_URL = "https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/signature.json";
|
|
21
|
+
var controllerName = "SnapsRegistry";
|
|
22
|
+
var defaultState = {
|
|
23
|
+
database: null,
|
|
24
|
+
lastUpdated: null
|
|
25
|
+
};
|
|
26
|
+
var _url, _publicKey, _fetchFunction, _recentFetchThreshold, _refetchOnAllowlistMiss, _failOnUnavailableRegistry, _currentUpdate, _wasRecentlyFetched, wasRecentlyFetched_fn, _triggerUpdate, triggerUpdate_fn, _update, update_fn, _getDatabase, getDatabase_fn, _getSingle, getSingle_fn, _get, get_fn, _resolveVersion, resolveVersion_fn, _getMetadata, getMetadata_fn, _verifySignature, verifySignature_fn, _safeFetch, safeFetch_fn;
|
|
27
|
+
var JsonSnapsRegistry = class extends _basecontroller.BaseController {
|
|
28
|
+
constructor({
|
|
29
|
+
messenger,
|
|
30
|
+
state,
|
|
31
|
+
url = {
|
|
32
|
+
registry: SNAP_REGISTRY_URL,
|
|
33
|
+
signature: SNAP_REGISTRY_SIGNATURE_URL
|
|
34
|
+
},
|
|
35
|
+
publicKey,
|
|
36
|
+
fetchFunction = globalThis.fetch.bind(globalThis),
|
|
37
|
+
recentFetchThreshold = _utils.inMilliseconds.call(void 0, 5, _utils.Duration.Minute),
|
|
38
|
+
failOnUnavailableRegistry = true,
|
|
39
|
+
refetchOnAllowlistMiss = true
|
|
40
|
+
}) {
|
|
41
|
+
super({
|
|
42
|
+
messenger,
|
|
43
|
+
metadata: {
|
|
44
|
+
database: { persist: true, anonymous: false },
|
|
45
|
+
lastUpdated: { persist: true, anonymous: false }
|
|
46
|
+
},
|
|
47
|
+
name: controllerName,
|
|
48
|
+
state: {
|
|
49
|
+
...defaultState,
|
|
50
|
+
...state
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _wasRecentlyFetched);
|
|
54
|
+
/**
|
|
55
|
+
* Triggers an update of the registry database.
|
|
56
|
+
*
|
|
57
|
+
* If an existing update is in progress this function will await that update.
|
|
58
|
+
*/
|
|
59
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _triggerUpdate);
|
|
60
|
+
/**
|
|
61
|
+
* Updates the registry database if the registry hasn't been updated recently.
|
|
62
|
+
*
|
|
63
|
+
* NOTE: SHOULD NOT be called directly, instead `triggerUpdate` should be used.
|
|
64
|
+
*/
|
|
65
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _update);
|
|
66
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _getDatabase);
|
|
67
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _getSingle);
|
|
68
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _get);
|
|
69
|
+
/**
|
|
70
|
+
* Find an allowlisted version within a specified version range. Otherwise return the version range itself.
|
|
71
|
+
*
|
|
72
|
+
* @param snapId - The ID of the snap we are trying to resolve a version for.
|
|
73
|
+
* @param versionRange - The version range.
|
|
74
|
+
* @param refetch - An optional flag used to determine if we are refetching the registry.
|
|
75
|
+
* @returns An allowlisted version within the specified version range if available otherwise returns the input version range.
|
|
76
|
+
*/
|
|
77
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _resolveVersion);
|
|
78
|
+
/**
|
|
79
|
+
* Get metadata for the given snap ID.
|
|
80
|
+
*
|
|
81
|
+
* @param snapId - The ID of the snap to get metadata for.
|
|
82
|
+
* @returns The metadata for the given snap ID, or `null` if the snap is not
|
|
83
|
+
* verified.
|
|
84
|
+
*/
|
|
85
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _getMetadata);
|
|
86
|
+
/**
|
|
87
|
+
* Verify the signature of the registry.
|
|
88
|
+
*
|
|
89
|
+
* @param database - The registry database.
|
|
90
|
+
* @param signature - The signature of the registry.
|
|
91
|
+
* @throws If the signature is invalid.
|
|
92
|
+
* @private
|
|
93
|
+
*/
|
|
94
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _verifySignature);
|
|
95
|
+
/**
|
|
96
|
+
* Fetch the given URL, throwing if the response is not OK.
|
|
97
|
+
*
|
|
98
|
+
* @param url - The URL to fetch.
|
|
99
|
+
* @returns The response body.
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _safeFetch);
|
|
103
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _url, void 0);
|
|
104
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _publicKey, void 0);
|
|
105
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _fetchFunction, void 0);
|
|
106
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _recentFetchThreshold, void 0);
|
|
107
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _refetchOnAllowlistMiss, void 0);
|
|
108
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _failOnUnavailableRegistry, void 0);
|
|
109
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _currentUpdate, void 0);
|
|
110
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _url, url);
|
|
111
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _publicKey, publicKey);
|
|
112
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _fetchFunction, fetchFunction);
|
|
113
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _recentFetchThreshold, recentFetchThreshold);
|
|
114
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _refetchOnAllowlistMiss, refetchOnAllowlistMiss);
|
|
115
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _failOnUnavailableRegistry, failOnUnavailableRegistry);
|
|
116
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _currentUpdate, null);
|
|
117
|
+
this.messagingSystem.registerActionHandler(
|
|
118
|
+
"SnapsRegistry:get",
|
|
119
|
+
async (...args) => _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _get, get_fn).call(this, ...args)
|
|
120
|
+
);
|
|
121
|
+
this.messagingSystem.registerActionHandler(
|
|
122
|
+
"SnapsRegistry:getMetadata",
|
|
123
|
+
async (...args) => _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getMetadata, getMetadata_fn).call(this, ...args)
|
|
124
|
+
);
|
|
125
|
+
this.messagingSystem.registerActionHandler(
|
|
126
|
+
"SnapsRegistry:resolveVersion",
|
|
127
|
+
async (...args) => _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _resolveVersion, resolveVersion_fn).call(this, ...args)
|
|
128
|
+
);
|
|
129
|
+
this.messagingSystem.registerActionHandler(
|
|
130
|
+
"SnapsRegistry:update",
|
|
131
|
+
async () => _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this)
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
_url = new WeakMap();
|
|
136
|
+
_publicKey = new WeakMap();
|
|
137
|
+
_fetchFunction = new WeakMap();
|
|
138
|
+
_recentFetchThreshold = new WeakMap();
|
|
139
|
+
_refetchOnAllowlistMiss = new WeakMap();
|
|
140
|
+
_failOnUnavailableRegistry = new WeakMap();
|
|
141
|
+
_currentUpdate = new WeakMap();
|
|
142
|
+
_wasRecentlyFetched = new WeakSet();
|
|
143
|
+
wasRecentlyFetched_fn = function() {
|
|
144
|
+
return this.state.lastUpdated && Date.now() - this.state.lastUpdated < _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _recentFetchThreshold);
|
|
145
|
+
};
|
|
146
|
+
_triggerUpdate = new WeakSet();
|
|
147
|
+
triggerUpdate_fn = async function() {
|
|
148
|
+
if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _currentUpdate)) {
|
|
149
|
+
await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _currentUpdate);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _currentUpdate) === null) {
|
|
153
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _currentUpdate, _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _update, update_fn).call(this));
|
|
154
|
+
}
|
|
155
|
+
await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _currentUpdate);
|
|
156
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _currentUpdate, null);
|
|
157
|
+
};
|
|
158
|
+
_update = new WeakSet();
|
|
159
|
+
update_fn = async function() {
|
|
160
|
+
if (_chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _wasRecentlyFetched, wasRecentlyFetched_fn).call(this)) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const database = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _safeFetch, safeFetch_fn).call(this, _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _url).registry);
|
|
165
|
+
if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _publicKey)) {
|
|
166
|
+
const signature = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _safeFetch, safeFetch_fn).call(this, _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _url).signature);
|
|
167
|
+
_chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _verifySignature, verifySignature_fn).call(this, database, signature);
|
|
168
|
+
}
|
|
169
|
+
this.update((state) => {
|
|
170
|
+
state.database = JSON.parse(database);
|
|
171
|
+
state.lastUpdated = Date.now();
|
|
172
|
+
});
|
|
173
|
+
} catch {
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
_getDatabase = new WeakSet();
|
|
177
|
+
getDatabase_fn = async function() {
|
|
178
|
+
if (this.state.database === null) {
|
|
179
|
+
await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this);
|
|
180
|
+
}
|
|
181
|
+
if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _failOnUnavailableRegistry) && this.state.database === null) {
|
|
182
|
+
throw new Error("Snaps registry is unavailable, installation blocked.");
|
|
183
|
+
}
|
|
184
|
+
return this.state.database;
|
|
185
|
+
};
|
|
186
|
+
_getSingle = new WeakSet();
|
|
187
|
+
getSingle_fn = async function(snapId, snapInfo, refetch = false) {
|
|
188
|
+
const database = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getDatabase, getDatabase_fn).call(this);
|
|
189
|
+
const blockedEntry = database?.blockedSnaps.find((blocked) => {
|
|
190
|
+
if ("id" in blocked) {
|
|
191
|
+
return blocked.id === snapId && _utils.satisfiesVersionRange.call(void 0, snapInfo.version, blocked.versionRange);
|
|
192
|
+
}
|
|
193
|
+
return blocked.checksum === snapInfo.checksum;
|
|
194
|
+
});
|
|
195
|
+
if (blockedEntry) {
|
|
196
|
+
return {
|
|
197
|
+
status: 1 /* Blocked */,
|
|
198
|
+
reason: blockedEntry.reason
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
const verified = database?.verifiedSnaps[snapId];
|
|
202
|
+
const version = verified?.versions?.[snapInfo.version];
|
|
203
|
+
if (version && version.checksum === snapInfo.checksum) {
|
|
204
|
+
return { status: 2 /* Verified */ };
|
|
205
|
+
}
|
|
206
|
+
if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _refetchOnAllowlistMiss) && !refetch) {
|
|
207
|
+
await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this);
|
|
208
|
+
return _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getSingle, getSingle_fn).call(this, snapId, snapInfo, true);
|
|
209
|
+
}
|
|
210
|
+
return { status: 0 /* Unverified */ };
|
|
211
|
+
};
|
|
212
|
+
_get = new WeakSet();
|
|
213
|
+
get_fn = async function(snaps) {
|
|
214
|
+
return Object.entries(snaps).reduce(async (previousPromise, [snapId, snapInfo]) => {
|
|
215
|
+
const result = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getSingle, getSingle_fn).call(this, snapId, snapInfo);
|
|
216
|
+
const acc = await previousPromise;
|
|
217
|
+
acc[snapId] = result;
|
|
218
|
+
return acc;
|
|
219
|
+
}, Promise.resolve({}));
|
|
220
|
+
};
|
|
221
|
+
_resolveVersion = new WeakSet();
|
|
222
|
+
resolveVersion_fn = async function(snapId, versionRange, refetch = false) {
|
|
223
|
+
const database = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getDatabase, getDatabase_fn).call(this);
|
|
224
|
+
const versions = database?.verifiedSnaps[snapId]?.versions ?? null;
|
|
225
|
+
if (!versions && _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _refetchOnAllowlistMiss) && !refetch) {
|
|
226
|
+
await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this);
|
|
227
|
+
return _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _resolveVersion, resolveVersion_fn).call(this, snapId, versionRange, true);
|
|
228
|
+
}
|
|
229
|
+
if (!versions) {
|
|
230
|
+
return versionRange;
|
|
231
|
+
}
|
|
232
|
+
const targetVersion = _snapsutils.getTargetVersion.call(void 0,
|
|
233
|
+
Object.keys(versions),
|
|
234
|
+
versionRange
|
|
235
|
+
);
|
|
236
|
+
if (!targetVersion && _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _refetchOnAllowlistMiss) && !refetch) {
|
|
237
|
+
await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this);
|
|
238
|
+
return _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _resolveVersion, resolveVersion_fn).call(this, snapId, versionRange, true);
|
|
239
|
+
}
|
|
240
|
+
if (!targetVersion) {
|
|
241
|
+
return versionRange;
|
|
242
|
+
}
|
|
243
|
+
_utils.assertIsSemVerRange.call(void 0, targetVersion);
|
|
244
|
+
return targetVersion;
|
|
245
|
+
};
|
|
246
|
+
_getMetadata = new WeakSet();
|
|
247
|
+
getMetadata_fn = async function(snapId) {
|
|
248
|
+
const database = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getDatabase, getDatabase_fn).call(this);
|
|
249
|
+
return database?.verifiedSnaps[snapId]?.metadata ?? null;
|
|
250
|
+
};
|
|
251
|
+
_verifySignature = new WeakSet();
|
|
252
|
+
verifySignature_fn = function(database, signature) {
|
|
253
|
+
_utils.assert.call(void 0, _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _publicKey), "No public key provided.");
|
|
254
|
+
const valid = _snapsregistry.verify.call(void 0, {
|
|
255
|
+
registry: database,
|
|
256
|
+
signature: JSON.parse(signature),
|
|
257
|
+
publicKey: _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _publicKey)
|
|
258
|
+
});
|
|
259
|
+
_utils.assert.call(void 0, valid, "Invalid registry signature.");
|
|
260
|
+
};
|
|
261
|
+
_safeFetch = new WeakSet();
|
|
262
|
+
safeFetch_fn = async function(url) {
|
|
263
|
+
const response = await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _fetchFunction).call(this, url);
|
|
264
|
+
if (!response.ok) {
|
|
265
|
+
throw new Error(`Failed to fetch ${url}.`);
|
|
266
|
+
}
|
|
267
|
+
return await response.text();
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
exports.JsonSnapsRegistry = JsonSnapsRegistry;
|
|
273
|
+
//# sourceMappingURL=chunk-7JY5VENP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/snaps/registry/json.ts"],"names":[],"mappings":";;;;;;;;AACA,SAAS,sBAAsB;AAE/B,SAAS,cAAc;AACvB,SAAS,wBAAwB;AAEjC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAYP,IAAM,oBACJ;AAEF,IAAM,8BACJ;AA2DF,IAAM,iBAAiB;AAEvB,IAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,aAAa;AACf;AA5FA;AA8FO,IAAM,oBAAN,cAAgC,eAIrC;AAAA,EAeA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA;AAAA,IACA,gBAAgB,WAAW,MAAM,KAAK,UAAU;AAAA,IAChD,uBAAuB,eAAe,GAAG,SAAS,MAAM;AAAA,IACxD,4BAA4B;AAAA,IAC5B,yBAAyB;AAAA,EAC3B,GAA0B;AACxB,UAAM;AAAA,MACJ;AAAA,MACA,UAAU;AAAA,QACR,UAAU,EAAE,SAAS,MAAM,WAAW,MAAM;AAAA,QAC5C,aAAa,EAAE,SAAS,MAAM,WAAW,MAAM;AAAA,MACjD;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,IACF,CAAC;AA8BH;AAYA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AAmBN;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AAuBN,uBAAM;AAYN,uBAAM;AAsCN,uBAAM;AAqBN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AA6CN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AAaN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AA9QN;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AA2BE,uBAAK,MAAO;AACZ,uBAAK,YAAa;AAClB,uBAAK,gBAAiB;AACtB,uBAAK,uBAAwB;AAC7B,uBAAK,yBAA0B;AAC/B,uBAAK,4BAA6B;AAClC,uBAAK,gBAAiB;AAEtB,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,UAAU,SAAS,sBAAK,cAAL,WAAU,GAAG;AAAA,IAClC;AAEA,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,UAAU,SAAS,sBAAK,8BAAL,WAAkB,GAAG;AAAA,IAC1C;AAEA,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,UAAU,SAAS,sBAAK,oCAAL,WAAqB,GAAG;AAAA,IAC7C;AAEA,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,YAAY,sBAAK,kCAAL;AAAA,IACd;AAAA,EACF;AAoNF;AAtRE;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAwDA;AAAA,wBAAmB,WAAG;AACpB,SACE,KAAK,MAAM,eACX,KAAK,IAAI,IAAI,KAAK,MAAM,cAAc,mBAAK;AAE/C;AAOM;AAAA,mBAAc,iBAAG;AAErB,MAAI,mBAAK,iBAAgB;AACvB,UAAM,mBAAK;AACX;AAAA,EACF;AAEA,MAAI,mBAAK,oBAAmB,MAAM;AAChC,uBAAK,gBAAiB,sBAAK,oBAAL;AAAA,EACxB;AACA,QAAM,mBAAK;AACX,qBAAK,gBAAiB;AACxB;AAOM;AAAA,YAAO,iBAAG;AAEd,MAAI,sBAAK,4CAAL,YAA4B;AAC9B;AAAA,EACF;AAEA,MAAI;AACF,UAAM,WAAW,MAAM,sBAAK,0BAAL,WAAgB,mBAAK,MAAK;AAEjD,QAAI,mBAAK,aAAY;AACnB,YAAM,YAAY,MAAM,sBAAK,0BAAL,WAAgB,mBAAK,MAAK;AAClD,4BAAK,sCAAL,WAAsB,UAAU;AAAA,IAClC;AAEA,SAAK,OAAO,CAAC,UAAU;AACrB,YAAM,WAAW,KAAK,MAAM,QAAQ;AACpC,YAAM,cAAc,KAAK,IAAI;AAAA,IAC/B,CAAC;AAAA,EACH,QAAQ;AAAA,EAER;AACF;AAEM;AAAA,iBAAY,iBAA0C;AAC1D,MAAI,KAAK,MAAM,aAAa,MAAM;AAChC,UAAM,sBAAK,kCAAL;AAAA,EACR;AAGA,MAAI,mBAAK,+BAA8B,KAAK,MAAM,aAAa,MAAM;AACnE,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AACA,SAAO,KAAK,MAAM;AACpB;AAEM;AAAA,eAAU,eACd,QACA,UACA,UAAU,OACoB;AAC9B,QAAM,WAAW,MAAM,sBAAK,8BAAL;AAEvB,QAAM,eAAe,UAAU,aAAa,KAAK,CAAC,YAAY;AAC5D,QAAI,QAAQ,SAAS;AACnB,aACE,QAAQ,OAAO,UACf,sBAAsB,SAAS,SAAS,QAAQ,YAAY;AAAA,IAEhE;AAEA,WAAO,QAAQ,aAAa,SAAS;AAAA,EACvC,CAAC;AAED,MAAI,cAAc;AAChB,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,aAAa;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,WAAW,UAAU,cAAc,MAAM;AAC/C,QAAM,UAAU,UAAU,WAAW,SAAS,OAAO;AACrD,MAAI,WAAW,QAAQ,aAAa,SAAS,UAAU;AACrD,WAAO,EAAE,yBAAqC;AAAA,EAChD;AAEA,MAAI,mBAAK,4BAA2B,CAAC,SAAS;AAC5C,UAAM,sBAAK,kCAAL;AACN,WAAO,sBAAK,0BAAL,WAAgB,QAAQ,UAAU;AAAA,EAC3C;AACA,SAAO,EAAE,2BAAuC;AAClD;AAEM;AAAA,SAAI,eACR,OAC8C;AAC9C,SAAO,OAAO,QAAQ,KAAK,EAAE,OAE3B,OAAO,iBAAiB,CAAC,QAAQ,QAAQ,MAAM;AAC/C,UAAM,SAAS,MAAM,sBAAK,0BAAL,WAAgB,QAAQ;AAC7C,UAAM,MAAM,MAAM;AAClB,QAAI,MAAM,IAAI;AACd,WAAO;AAAA,EACT,GAAG,QAAQ,QAAQ,CAAC,CAAC,CAAC;AACxB;AAUM;AAAA,oBAAe,eACnB,QACA,cACA,UAAU,OACY;AACtB,QAAM,WAAW,MAAM,sBAAK,8BAAL;AACvB,QAAM,WAAW,UAAU,cAAc,MAAM,GAAG,YAAY;AAE9D,MAAI,CAAC,YAAY,mBAAK,4BAA2B,CAAC,SAAS;AACzD,UAAM,sBAAK,kCAAL;AACN,WAAO,sBAAK,oCAAL,WAAqB,QAAQ,cAAc;AAAA,EACpD;AAGA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB;AAAA,IACpB,OAAO,KAAK,QAAQ;AAAA,IACpB;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB,mBAAK,4BAA2B,CAAC,SAAS;AAC9D,UAAM,sBAAK,kCAAL;AACN,WAAO,sBAAK,oCAAL,WAAqB,QAAQ,cAAc;AAAA,EACpD;AAGA,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AAGA,sBAAoB,aAAa;AACjC,SAAO;AACT;AASM;AAAA,iBAAY,eAAC,QAAuD;AACxE,QAAM,WAAW,MAAM,sBAAK,8BAAL;AACvB,SAAO,UAAU,cAAc,MAAM,GAAG,YAAY;AACtD;AAUA;AAAA,qBAAgB,SAAC,UAAkB,WAAmB;AACpD,SAAO,mBAAK,aAAY,yBAAyB;AAEjD,QAAM,QAAQ,OAAO;AAAA,IACnB,UAAU;AAAA,IACV,WAAW,KAAK,MAAM,SAAS;AAAA,IAC/B,WAAW,mBAAK;AAAA,EAClB,CAAC;AAED,SAAO,OAAO,6BAA6B;AAC7C;AASM;AAAA,eAAU,eAAC,KAAa;AAC5B,QAAM,WAAW,MAAM,mBAAK,gBAAL,WAAoB;AAC3C,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,mBAAmB,GAAG,GAAG;AAAA,EAC3C;AAEA,SAAO,MAAM,SAAS,KAAK;AAC7B","sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { SnapsRegistryDatabase } from '@metamask/snaps-registry';\nimport { verify } from '@metamask/snaps-registry';\nimport { getTargetVersion } from '@metamask/snaps-utils';\nimport type { Hex, SemVerRange, SemVerVersion } from '@metamask/utils';\nimport {\n assert,\n assertIsSemVerRange,\n Duration,\n inMilliseconds,\n satisfiesVersionRange,\n} from '@metamask/utils';\n\nimport type {\n SnapsRegistry,\n SnapsRegistryInfo,\n SnapsRegistryMetadata,\n SnapsRegistryRequest,\n SnapsRegistryResult,\n} from './registry';\nimport { SnapsRegistryStatus } from './registry';\n\n// TODO: Replace with a Codefi URL\nconst SNAP_REGISTRY_URL =\n 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/registry.json';\n\nconst SNAP_REGISTRY_SIGNATURE_URL =\n 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/signature.json';\n\ntype JsonSnapsRegistryUrl = {\n registry: string;\n signature: string;\n};\n\nexport type JsonSnapsRegistryArgs = {\n messenger: SnapsRegistryMessenger;\n state?: SnapsRegistryState;\n fetchFunction?: typeof fetch;\n url?: JsonSnapsRegistryUrl;\n recentFetchThreshold?: number;\n refetchOnAllowlistMiss?: boolean;\n failOnUnavailableRegistry?: boolean;\n publicKey?: Hex;\n};\n\nexport type GetResult = {\n type: `${typeof controllerName}:get`;\n handler: SnapsRegistry['get'];\n};\n\nexport type ResolveVersion = {\n type: `${typeof controllerName}:resolveVersion`;\n handler: SnapsRegistry['resolveVersion'];\n};\n\nexport type GetMetadata = {\n type: `${typeof controllerName}:getMetadata`;\n handler: SnapsRegistry['getMetadata'];\n};\n\nexport type Update = {\n type: `${typeof controllerName}:update`;\n handler: SnapsRegistry['update'];\n};\n\nexport type SnapsRegistryActions =\n | GetResult\n | GetMetadata\n | Update\n | ResolveVersion;\n\nexport type SnapsRegistryEvents = never;\n\nexport type SnapsRegistryMessenger = RestrictedControllerMessenger<\n 'SnapsRegistry',\n SnapsRegistryActions,\n SnapsRegistryEvents,\n SnapsRegistryActions['type'],\n SnapsRegistryEvents['type']\n>;\n\nexport type SnapsRegistryState = {\n database: SnapsRegistryDatabase | null;\n lastUpdated: number | null;\n};\n\nconst controllerName = 'SnapsRegistry';\n\nconst defaultState = {\n database: null,\n lastUpdated: null,\n};\n\nexport class JsonSnapsRegistry extends BaseController<\n typeof controllerName,\n SnapsRegistryState,\n SnapsRegistryMessenger\n> {\n #url: JsonSnapsRegistryUrl;\n\n #publicKey?: Hex;\n\n #fetchFunction: typeof fetch;\n\n #recentFetchThreshold: number;\n\n #refetchOnAllowlistMiss: boolean;\n\n #failOnUnavailableRegistry: boolean;\n\n #currentUpdate: Promise<void> | null;\n\n constructor({\n messenger,\n state,\n url = {\n registry: SNAP_REGISTRY_URL,\n signature: SNAP_REGISTRY_SIGNATURE_URL,\n },\n publicKey,\n fetchFunction = globalThis.fetch.bind(globalThis),\n recentFetchThreshold = inMilliseconds(5, Duration.Minute),\n failOnUnavailableRegistry = true,\n refetchOnAllowlistMiss = true,\n }: JsonSnapsRegistryArgs) {\n super({\n messenger,\n metadata: {\n database: { persist: true, anonymous: false },\n lastUpdated: { persist: true, anonymous: false },\n },\n name: controllerName,\n state: {\n ...defaultState,\n ...state,\n },\n });\n this.#url = url;\n this.#publicKey = publicKey;\n this.#fetchFunction = fetchFunction;\n this.#recentFetchThreshold = recentFetchThreshold;\n this.#refetchOnAllowlistMiss = refetchOnAllowlistMiss;\n this.#failOnUnavailableRegistry = failOnUnavailableRegistry;\n this.#currentUpdate = null;\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:get',\n async (...args) => this.#get(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:getMetadata',\n async (...args) => this.#getMetadata(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:resolveVersion',\n async (...args) => this.#resolveVersion(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:update',\n async () => this.#triggerUpdate(),\n );\n }\n\n #wasRecentlyFetched() {\n return (\n this.state.lastUpdated &&\n Date.now() - this.state.lastUpdated < this.#recentFetchThreshold\n );\n }\n\n /**\n * Triggers an update of the registry database.\n *\n * If an existing update is in progress this function will await that update.\n */\n async #triggerUpdate() {\n // If an update is ongoing, wait for that.\n if (this.#currentUpdate) {\n await this.#currentUpdate;\n return;\n }\n // If no update exists, create promise and store globally.\n if (this.#currentUpdate === null) {\n this.#currentUpdate = this.#update();\n }\n await this.#currentUpdate;\n this.#currentUpdate = null;\n }\n\n /**\n * Updates the registry database if the registry hasn't been updated recently.\n *\n * NOTE: SHOULD NOT be called directly, instead `triggerUpdate` should be used.\n */\n async #update() {\n // No-op if we recently fetched the registry.\n if (this.#wasRecentlyFetched()) {\n return;\n }\n\n try {\n const database = await this.#safeFetch(this.#url.registry);\n\n if (this.#publicKey) {\n const signature = await this.#safeFetch(this.#url.signature);\n this.#verifySignature(database, signature);\n }\n\n this.update((state) => {\n state.database = JSON.parse(database);\n state.lastUpdated = Date.now();\n });\n } catch {\n // Ignore\n }\n }\n\n async #getDatabase(): Promise<SnapsRegistryDatabase | null> {\n if (this.state.database === null) {\n await this.#triggerUpdate();\n }\n\n // If the database is still null and we require it, throw.\n if (this.#failOnUnavailableRegistry && this.state.database === null) {\n throw new Error('Snaps registry is unavailable, installation blocked.');\n }\n return this.state.database;\n }\n\n async #getSingle(\n snapId: string,\n snapInfo: SnapsRegistryInfo,\n refetch = false,\n ): Promise<SnapsRegistryResult> {\n const database = await this.#getDatabase();\n\n const blockedEntry = database?.blockedSnaps.find((blocked) => {\n if ('id' in blocked) {\n return (\n blocked.id === snapId &&\n satisfiesVersionRange(snapInfo.version, blocked.versionRange)\n );\n }\n\n return blocked.checksum === snapInfo.checksum;\n });\n\n if (blockedEntry) {\n return {\n status: SnapsRegistryStatus.Blocked,\n reason: blockedEntry.reason,\n };\n }\n\n const verified = database?.verifiedSnaps[snapId];\n const version = verified?.versions?.[snapInfo.version];\n if (version && version.checksum === snapInfo.checksum) {\n return { status: SnapsRegistryStatus.Verified };\n }\n // For now, if we have an allowlist miss, we can refetch once and try again.\n if (this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#getSingle(snapId, snapInfo, true);\n }\n return { status: SnapsRegistryStatus.Unverified };\n }\n\n async #get(\n snaps: SnapsRegistryRequest,\n ): Promise<Record<string, SnapsRegistryResult>> {\n return Object.entries(snaps).reduce<\n Promise<Record<string, SnapsRegistryResult>>\n >(async (previousPromise, [snapId, snapInfo]) => {\n const result = await this.#getSingle(snapId, snapInfo);\n const acc = await previousPromise;\n acc[snapId] = result;\n return acc;\n }, Promise.resolve({}));\n }\n\n /**\n * Find an allowlisted version within a specified version range. Otherwise return the version range itself.\n *\n * @param snapId - The ID of the snap we are trying to resolve a version for.\n * @param versionRange - The version range.\n * @param refetch - An optional flag used to determine if we are refetching the registry.\n * @returns An allowlisted version within the specified version range if available otherwise returns the input version range.\n */\n async #resolveVersion(\n snapId: string,\n versionRange: SemVerRange,\n refetch = false,\n ): Promise<SemVerRange> {\n const database = await this.#getDatabase();\n const versions = database?.verifiedSnaps[snapId]?.versions ?? null;\n\n if (!versions && this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#resolveVersion(snapId, versionRange, true);\n }\n\n // If we cannot narrow down the version range we return the unaltered version range.\n if (!versions) {\n return versionRange;\n }\n\n const targetVersion = getTargetVersion(\n Object.keys(versions) as SemVerVersion[],\n versionRange,\n );\n\n if (!targetVersion && this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#resolveVersion(snapId, versionRange, true);\n }\n\n // If we cannot narrow down the version range we return the unaltered version range.\n if (!targetVersion) {\n return versionRange;\n }\n\n // A semver version is technically also a valid semver range.\n assertIsSemVerRange(targetVersion);\n return targetVersion;\n }\n\n /**\n * Get metadata for the given snap ID.\n *\n * @param snapId - The ID of the snap to get metadata for.\n * @returns The metadata for the given snap ID, or `null` if the snap is not\n * verified.\n */\n async #getMetadata(snapId: string): Promise<SnapsRegistryMetadata | null> {\n const database = await this.#getDatabase();\n return database?.verifiedSnaps[snapId]?.metadata ?? null;\n }\n\n /**\n * Verify the signature of the registry.\n *\n * @param database - The registry database.\n * @param signature - The signature of the registry.\n * @throws If the signature is invalid.\n * @private\n */\n #verifySignature(database: string, signature: string) {\n assert(this.#publicKey, 'No public key provided.');\n\n const valid = verify({\n registry: database,\n signature: JSON.parse(signature),\n publicKey: this.#publicKey,\n });\n\n assert(valid, 'Invalid registry signature.');\n }\n\n /**\n * Fetch the given URL, throwing if the response is not OK.\n *\n * @param url - The URL to fetch.\n * @returns The response body.\n * @private\n */\n async #safeFetch(url: string) {\n const response = await this.#fetchFunction(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch ${url}.`);\n }\n\n return await response.text();\n }\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbstractExecutionService
|
|
3
|
+
} from "./chunk-6NYC5VNK.mjs";
|
|
4
|
+
|
|
5
|
+
// src/services/iframe/IframeExecutionService.ts
|
|
6
|
+
import { WindowPostMessageStream } from "@metamask/post-message-stream";
|
|
7
|
+
import { createWindow } from "@metamask/snaps-utils";
|
|
8
|
+
var IframeExecutionService = class extends AbstractExecutionService {
|
|
9
|
+
constructor({
|
|
10
|
+
iframeUrl,
|
|
11
|
+
messenger,
|
|
12
|
+
setupSnapProvider
|
|
13
|
+
}) {
|
|
14
|
+
super({
|
|
15
|
+
messenger,
|
|
16
|
+
setupSnapProvider
|
|
17
|
+
});
|
|
18
|
+
this.iframeUrl = iframeUrl;
|
|
19
|
+
}
|
|
20
|
+
terminateJob(jobWrapper) {
|
|
21
|
+
document.getElementById(jobWrapper.id)?.remove();
|
|
22
|
+
}
|
|
23
|
+
async initEnvStream(jobId) {
|
|
24
|
+
const iframeWindow = await createWindow(this.iframeUrl.toString(), jobId);
|
|
25
|
+
const stream = new WindowPostMessageStream({
|
|
26
|
+
name: "parent",
|
|
27
|
+
target: "child",
|
|
28
|
+
targetWindow: iframeWindow,
|
|
29
|
+
targetOrigin: "*"
|
|
30
|
+
});
|
|
31
|
+
return { worker: iframeWindow, stream };
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
IframeExecutionService
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=chunk-7PZECZV3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/iframe/IframeExecutionService.ts"],"sourcesContent":["import type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { WindowPostMessageStream } from '@metamask/post-message-stream';\nimport { createWindow } from '@metamask/snaps-utils';\n\nimport type { Job, ExecutionServiceArgs } from '../AbstractExecutionService';\nimport { AbstractExecutionService } from '../AbstractExecutionService';\n\ntype IframeExecutionEnvironmentServiceArgs = {\n iframeUrl: URL;\n} & ExecutionServiceArgs;\n\nexport class IframeExecutionService extends AbstractExecutionService<Window> {\n public iframeUrl: URL;\n\n constructor({\n iframeUrl,\n messenger,\n setupSnapProvider,\n }: IframeExecutionEnvironmentServiceArgs) {\n super({\n messenger,\n setupSnapProvider,\n });\n this.iframeUrl = iframeUrl;\n }\n\n protected terminateJob(jobWrapper: Job<Window>): void {\n document.getElementById(jobWrapper.id)?.remove();\n }\n\n protected async initEnvStream(jobId: string): Promise<{\n worker: Window;\n stream: BasePostMessageStream;\n }> {\n const iframeWindow = await createWindow(this.iframeUrl.toString(), jobId);\n\n const stream = new WindowPostMessageStream({\n name: 'parent',\n target: 'child',\n targetWindow: iframeWindow,\n targetOrigin: '*',\n });\n\n return { worker: iframeWindow, stream };\n }\n}\n"],"mappings":";;;;;AACA,SAAS,+BAA+B;AACxC,SAAS,oBAAoB;AAStB,IAAM,yBAAN,cAAqC,yBAAiC;AAAA,EAG3E,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA0C;AACxC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,CAAC;AACD,SAAK,YAAY;AAAA,EACnB;AAAA,EAEU,aAAa,YAA+B;AACpD,aAAS,eAAe,WAAW,EAAE,GAAG,OAAO;AAAA,EACjD;AAAA,EAEA,MAAgB,cAAc,OAG3B;AACD,UAAM,eAAe,MAAM,aAAa,KAAK,UAAU,SAAS,GAAG,KAAK;AAExE,UAAM,SAAS,IAAI,wBAAwB;AAAA,MACzC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,cAAc;AAAA,IAChB,CAAC;AAED,WAAO,EAAE,QAAQ,cAAc,OAAO;AAAA,EACxC;AACF;","names":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkXWDEGRM5js = require('./chunk-XWDEGRM5.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkLWBPKSU2js = require('./chunk-LWBPKSU2.js');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkRDBT3ZJQjs = require('./chunk-RDBT3ZJQ.js');
|
|
10
|
+
|
|
11
|
+
// src/snaps/location/location.ts
|
|
12
|
+
var _utils = require('@metamask/utils');
|
|
13
|
+
function detectSnapLocation(location, opts) {
|
|
14
|
+
const allowHttp = opts?.allowHttp ?? false;
|
|
15
|
+
const allowLocal = opts?.allowLocal ?? false;
|
|
16
|
+
const root = new URL(location);
|
|
17
|
+
switch (root.protocol) {
|
|
18
|
+
case "npm:":
|
|
19
|
+
return new (0, _chunkXWDEGRM5js.NpmLocation)(root, opts);
|
|
20
|
+
case "local:":
|
|
21
|
+
_utils.assert.call(void 0, allowLocal, new TypeError("Fetching local snaps is disabled."));
|
|
22
|
+
return new (0, _chunkLWBPKSU2js.LocalLocation)(root, opts);
|
|
23
|
+
case "http:":
|
|
24
|
+
case "https:":
|
|
25
|
+
_utils.assert.call(void 0,
|
|
26
|
+
allowHttp,
|
|
27
|
+
new TypeError("Fetching snaps through http/https is disabled.")
|
|
28
|
+
);
|
|
29
|
+
return new (0, _chunkRDBT3ZJQjs.HttpLocation)(root, opts);
|
|
30
|
+
default:
|
|
31
|
+
throw new TypeError(
|
|
32
|
+
`Unrecognized "${root.protocol}" snap location protocol.`
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
exports.detectSnapLocation = detectSnapLocation;
|
|
40
|
+
//# sourceMappingURL=chunk-7WOG63YY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/snaps/location/location.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,SAAS,cAAc;AAoDhB,SAAS,mBACd,UACA,MACc;AACd,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,UAAQ,KAAK,UAAU;AAAA,IACrB,KAAK;AACH,aAAO,IAAI,YAAY,MAAM,IAAI;AAAA,IACnC,KAAK;AACH,aAAO,YAAY,IAAI,UAAU,mCAAmC,CAAC;AACrE,aAAO,IAAI,cAAc,MAAM,IAAI;AAAA,IACrC,KAAK;AAAA,IACL,KAAK;AACH;AAAA,QACE;AAAA,QACA,IAAI,UAAU,gDAAgD;AAAA,MAChE;AACA,aAAO,IAAI,aAAa,MAAM,IAAI;AAAA,IACpC;AACE,YAAM,IAAI;AAAA,QACR,iBAAiB,KAAK,QAAQ;AAAA,MAChC;AAAA,EACJ;AACF","sourcesContent":["import type { SnapManifest, VirtualFile } from '@metamask/snaps-utils';\nimport type { SemVerRange } from '@metamask/utils';\nimport { assert } from '@metamask/utils';\n\nimport { HttpLocation } from './http';\nimport { LocalLocation } from './local';\nimport type { NpmOptions } from './npm';\nimport { NpmLocation } from './npm';\n\ndeclare module '@metamask/snaps-utils' {\n interface DataMap {\n /**\n * Fully qualified, canonical path for the file in {@link https://github.com/MetaMask/SIPs/blob/main/SIPS/sip-8.md SIP-8 } URI format.\n */\n canonicalPath: string;\n }\n}\n\nexport interface SnapLocation {\n /**\n * All files are relative to the manifest, except the manifest itself.\n */\n manifest(): Promise<VirtualFile<SnapManifest>>;\n fetch(path: string): Promise<VirtualFile>;\n\n readonly shouldAlwaysReload?: boolean;\n}\n\nexport type DetectSnapLocationOptions = NpmOptions & {\n /**\n * The function used to fetch data.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * @default false\n */\n allowHttp?: boolean;\n /**\n * @default false\n */\n allowLocal?: boolean;\n\n resolveVersion?: (range: SemVerRange) => Promise<SemVerRange>;\n};\n\n/**\n * Auto-magically detects which SnapLocation object to create based on the provided {@link location}.\n *\n * @param location - A {@link https://github.com/MetaMask/SIPs/blob/main/SIPS/sip-8.md SIP-8} uri.\n * @param opts - NPM options and feature flags.\n * @returns SnapLocation based on url.\n */\nexport function detectSnapLocation(\n location: string | URL,\n opts?: DetectSnapLocationOptions,\n): SnapLocation {\n const allowHttp = opts?.allowHttp ?? false;\n const allowLocal = opts?.allowLocal ?? false;\n const root = new URL(location);\n switch (root.protocol) {\n case 'npm:':\n return new NpmLocation(root, opts);\n case 'local:':\n assert(allowLocal, new TypeError('Fetching local snaps is disabled.'));\n return new LocalLocation(root, opts);\n case 'http:':\n case 'https:':\n assert(\n allowHttp,\n new TypeError('Fetching snaps through http/https is disabled.'),\n );\n return new HttpLocation(root, opts);\n default:\n throw new TypeError(\n `Unrecognized \"${root.protocol}\" snap location protocol.`,\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
|
|
7
|
+
|
|
8
|
+
// src/services/ProxyPostMessageStream.ts
|
|
9
|
+
var _postmessagestream = require('@metamask/post-message-stream');
|
|
10
|
+
var _stream, _jobId, _onData, onData_fn;
|
|
11
|
+
var ProxyPostMessageStream = class extends _postmessagestream.BasePostMessageStream {
|
|
12
|
+
/**
|
|
13
|
+
* Initializes a new `ProxyPostMessageStream` instance.
|
|
14
|
+
*
|
|
15
|
+
* @param args - The constructor arguments.
|
|
16
|
+
* @param args.stream - The underlying stream to use for communication.
|
|
17
|
+
* @param args.jobId - The ID of the job this stream is associated with.
|
|
18
|
+
*/
|
|
19
|
+
constructor({ stream, jobId }) {
|
|
20
|
+
super();
|
|
21
|
+
/**
|
|
22
|
+
* Handle incoming data from the underlying stream. This checks that the job
|
|
23
|
+
* ID matches the expected job ID, and pushes the data to the stream if so.
|
|
24
|
+
*
|
|
25
|
+
* @param data - The data to handle.
|
|
26
|
+
*/
|
|
27
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _onData);
|
|
28
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _stream, void 0);
|
|
29
|
+
_chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _jobId, void 0);
|
|
30
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _stream, stream);
|
|
31
|
+
_chunkEXN2TFDJjs.__privateSet.call(void 0, this, _jobId, jobId);
|
|
32
|
+
_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _stream).on("data", _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _onData, onData_fn).bind(this));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Write data to the underlying stream. This wraps the data in an object with
|
|
36
|
+
* the job ID.
|
|
37
|
+
*
|
|
38
|
+
* @param data - The data to write.
|
|
39
|
+
*/
|
|
40
|
+
_postMessage(data) {
|
|
41
|
+
_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _stream).write({
|
|
42
|
+
jobId: _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _jobId),
|
|
43
|
+
data
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
_stream = new WeakMap();
|
|
48
|
+
_jobId = new WeakMap();
|
|
49
|
+
_onData = new WeakSet();
|
|
50
|
+
onData_fn = function(data) {
|
|
51
|
+
if (data.jobId !== _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _jobId)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.push(data.data);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
exports.ProxyPostMessageStream = ProxyPostMessageStream;
|
|
60
|
+
//# sourceMappingURL=chunk-7Y6P5FRN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/ProxyPostMessageStream.ts"],"names":[],"mappings":";;;;;;;;AAAA,SAAS,6BAA6B;AAAtC;AAmBO,IAAM,yBAAN,cAAqC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYhE,YAAY,EAAE,QAAQ,MAAM,GAA+B;AACzD,UAAM;AAcR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BA,uBAAS,SAAT;AAEA,uBAAS,QAAT;AAYE,uBAAK,SAAU;AACf,uBAAK,QAAS;AAEd,uBAAK,SAAQ,GAAG,QAAQ,sBAAK,oBAAQ,KAAK,IAAI,CAAC;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,aAAa,MAAwB;AACnC,uBAAK,SAAQ,MAAM;AAAA,MACjB,OAAO,mBAAK;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH;AACF;AA9CW;AAEA;AAwBT;AAAA,YAAO,SAAC,MAAwB;AAC9B,MAAI,KAAK,UAAU,mBAAK,SAAQ;AAC9B;AAAA,EACF;AAEA,OAAK,KAAK,KAAK,IAAI;AACrB","sourcesContent":["import { BasePostMessageStream } from '@metamask/post-message-stream';\nimport type { JsonRpcRequest } from '@metamask/utils';\n\nexport type ProxyPostMessageStreamArgs = {\n stream: BasePostMessageStream;\n jobId: string;\n extra?: Record<string, unknown>;\n};\n\nexport type ProxyPostMessage = {\n jobId: string;\n data: JsonRpcRequest;\n extra?: Record<string, unknown>;\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 ProxyPostMessageStream extends BasePostMessageStream {\n readonly #stream: BasePostMessageStream;\n\n readonly #jobId: string;\n\n /**\n * Initializes a new `ProxyPostMessageStream` 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 */\n constructor({ stream, jobId }: ProxyPostMessageStreamArgs) {\n super();\n\n this.#stream = stream;\n this.#jobId = jobId;\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: ProxyPostMessage) {\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: ProxyPostMessage) {\n this.#stream.write({\n jobId: this.#jobId,\n data,\n });\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";//# sourceMappingURL=chunk-A6WJEA3C.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/snaps/RequestQueue.ts
|
|
2
|
+
var RequestQueue = class {
|
|
3
|
+
constructor(maxQueueSize) {
|
|
4
|
+
this.maxQueueSize = maxQueueSize;
|
|
5
|
+
this.queueSizes = /* @__PURE__ */ new Map();
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Increments the queue count for a particular origin.
|
|
9
|
+
*
|
|
10
|
+
* @param origin - A string identifying the origin.
|
|
11
|
+
*/
|
|
12
|
+
increment(origin) {
|
|
13
|
+
const currentCount = this.queueSizes.get(origin) ?? 0;
|
|
14
|
+
if (currentCount >= this.maxQueueSize) {
|
|
15
|
+
throw new Error("Maximum number of requests reached. Try again later.");
|
|
16
|
+
}
|
|
17
|
+
this.queueSizes.set(origin, currentCount + 1);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Decrements the queue count for a particular origin.
|
|
21
|
+
*
|
|
22
|
+
* @param origin - A string identifying the origin.
|
|
23
|
+
*/
|
|
24
|
+
decrement(origin) {
|
|
25
|
+
const currentCount = this.queueSizes.get(origin) ?? 0;
|
|
26
|
+
if (currentCount === 0) {
|
|
27
|
+
throw new Error(
|
|
28
|
+
`Cannot decrement, ${origin} does not have any outstanding requests.`
|
|
29
|
+
);
|
|
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
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
exports.RequestQueue = RequestQueue;
|
|
47
|
+
//# sourceMappingURL=chunk-AP7CJ6DA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/snaps/RequestQueue.ts"],"names":[],"mappings":";AAAO,IAAM,eAAN,MAAmB;AAAA,EAKxB,YAAY,cAAsB;AAChC,SAAK,eAAe;AACpB,SAAK,aAAa,oBAAI,IAAoB;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,QAAgB;AAC/B,UAAM,eAAe,KAAK,WAAW,IAAI,MAAM,KAAK;AACpD,QAAI,gBAAgB,KAAK,cAAc;AACrC,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AACA,SAAK,WAAW,IAAI,QAAQ,eAAe,CAAC;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,QAAgB;AAC/B,UAAM,eAAe,KAAK,WAAW,IAAI,MAAM,KAAK;AACpD,QAAI,iBAAiB,GAAG;AACtB,YAAM,IAAI;AAAA,QACR,qBAAqB,MAAM;AAAA,MAC7B;AAAA,IACF;AACA,SAAK,WAAW,IAAI,QAAQ,eAAe,CAAC;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,IAAI,QAAwB;AACjC,WAAO,KAAK,WAAW,IAAI,MAAM,KAAK;AAAA,EACxC;AACF","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"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import {
|
|
2
|
+
HttpLocation
|
|
3
|
+
} from "./chunk-6GMWL4JR.mjs";
|
|
4
|
+
import {
|
|
5
|
+
__privateAdd,
|
|
6
|
+
__privateGet,
|
|
7
|
+
__privateSet
|
|
8
|
+
} from "./chunk-YRZVIDCF.mjs";
|
|
9
|
+
|
|
10
|
+
// src/snaps/location/local.ts
|
|
11
|
+
import { LocalSnapIdStruct, SnapIdPrefixes } from "@metamask/snaps-utils";
|
|
12
|
+
import { assert, assertStruct } from "@metamask/utils";
|
|
13
|
+
var _http;
|
|
14
|
+
var LocalLocation = class {
|
|
15
|
+
constructor(url, opts = {}) {
|
|
16
|
+
__privateAdd(this, _http, void 0);
|
|
17
|
+
assertStruct(url.toString(), LocalSnapIdStruct, "Invalid Snap Id");
|
|
18
|
+
assert(
|
|
19
|
+
opts.fetchOptions === void 0,
|
|
20
|
+
"Currently adding fetch options to local: is unsupported."
|
|
21
|
+
);
|
|
22
|
+
__privateSet(this, _http, new HttpLocation(
|
|
23
|
+
new URL(url.toString().slice(SnapIdPrefixes.local.length)),
|
|
24
|
+
{ ...opts, fetchOptions: { cache: "no-cache" } }
|
|
25
|
+
));
|
|
26
|
+
}
|
|
27
|
+
async manifest() {
|
|
28
|
+
const vfile = await __privateGet(this, _http).manifest();
|
|
29
|
+
return convertCanonical(vfile);
|
|
30
|
+
}
|
|
31
|
+
async fetch(path) {
|
|
32
|
+
return convertCanonical(await __privateGet(this, _http).fetch(path));
|
|
33
|
+
}
|
|
34
|
+
get shouldAlwaysReload() {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
_http = new WeakMap();
|
|
39
|
+
function convertCanonical(vfile) {
|
|
40
|
+
assert(vfile.data.canonicalPath !== void 0);
|
|
41
|
+
vfile.data.canonicalPath = `local:${vfile.data.canonicalPath}`;
|
|
42
|
+
return vfile;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
LocalLocation
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=chunk-B3UTLNYS.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/snaps/location/local.ts"],"sourcesContent":["import type { SnapManifest, VirtualFile } from '@metamask/snaps-utils';\nimport { LocalSnapIdStruct, SnapIdPrefixes } from '@metamask/snaps-utils';\nimport { assert, assertStruct } from '@metamask/utils';\n\nimport type { HttpOptions } from './http';\nimport { HttpLocation } from './http';\nimport type { SnapLocation } from './location';\n\nexport class LocalLocation implements SnapLocation {\n readonly #http: HttpLocation;\n\n constructor(url: URL, opts: HttpOptions = {}) {\n assertStruct(url.toString(), LocalSnapIdStruct, 'Invalid Snap Id');\n // TODO(ritave): Write deepMerge() which merges fetchOptions.\n assert(\n opts.fetchOptions === undefined,\n 'Currently adding fetch options to local: is unsupported.',\n );\n\n this.#http = new HttpLocation(\n new URL(url.toString().slice(SnapIdPrefixes.local.length)),\n { ...opts, fetchOptions: { cache: 'no-cache' } },\n );\n }\n\n async manifest(): Promise<VirtualFile<SnapManifest>> {\n const vfile = await this.#http.manifest();\n\n return convertCanonical(vfile);\n }\n\n async fetch(path: string): Promise<VirtualFile> {\n return convertCanonical(await this.#http.fetch(path));\n }\n\n get shouldAlwaysReload() {\n return true;\n }\n}\n\n/**\n * Converts vfiles with canonical `http:` paths into `local:` paths.\n *\n * @param vfile - The {@link VirtualFile} to convert.\n * @returns The same object with updated `.data.canonicalPath`.\n */\nfunction convertCanonical<Result>(\n vfile: VirtualFile<Result>,\n): VirtualFile<Result> {\n assert(vfile.data.canonicalPath !== undefined);\n vfile.data.canonicalPath = `local:${vfile.data.canonicalPath}`;\n return vfile;\n}\n"],"mappings":";;;;;;;;;;AACA,SAAS,mBAAmB,sBAAsB;AAClD,SAAS,QAAQ,oBAAoB;AAFrC;AAQO,IAAM,gBAAN,MAA4C;AAAA,EAGjD,YAAY,KAAU,OAAoB,CAAC,GAAG;AAF9C,uBAAS,OAAT;AAGE,iBAAa,IAAI,SAAS,GAAG,mBAAmB,iBAAiB;AAEjE;AAAA,MACE,KAAK,iBAAiB;AAAA,MACtB;AAAA,IACF;AAEA,uBAAK,OAAQ,IAAI;AAAA,MACf,IAAI,IAAI,IAAI,SAAS,EAAE,MAAM,eAAe,MAAM,MAAM,CAAC;AAAA,MACzD,EAAE,GAAG,MAAM,cAAc,EAAE,OAAO,WAAW,EAAE;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAM,WAA+C;AACnD,UAAM,QAAQ,MAAM,mBAAK,OAAM,SAAS;AAExC,WAAO,iBAAiB,KAAK;AAAA,EAC/B;AAAA,EAEA,MAAM,MAAM,MAAoC;AAC9C,WAAO,iBAAiB,MAAM,mBAAK,OAAM,MAAM,IAAI,CAAC;AAAA,EACtD;AAAA,EAEA,IAAI,qBAAqB;AACvB,WAAO;AAAA,EACT;AACF;AA7BW;AAqCX,SAAS,iBACP,OACqB;AACrB,SAAO,MAAM,KAAK,kBAAkB,MAAS;AAC7C,QAAM,KAAK,gBAAgB,SAAS,MAAM,KAAK,aAAa;AAC5D,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NpmLocation
|
|
3
|
+
} from "./chunk-WKQRCGUW.mjs";
|
|
4
|
+
import {
|
|
5
|
+
LocalLocation
|
|
6
|
+
} from "./chunk-B3UTLNYS.mjs";
|
|
7
|
+
import {
|
|
8
|
+
HttpLocation
|
|
9
|
+
} from "./chunk-6GMWL4JR.mjs";
|
|
10
|
+
|
|
11
|
+
// src/snaps/location/location.ts
|
|
12
|
+
import { assert } from "@metamask/utils";
|
|
13
|
+
function detectSnapLocation(location, opts) {
|
|
14
|
+
const allowHttp = opts?.allowHttp ?? false;
|
|
15
|
+
const allowLocal = opts?.allowLocal ?? false;
|
|
16
|
+
const root = new URL(location);
|
|
17
|
+
switch (root.protocol) {
|
|
18
|
+
case "npm:":
|
|
19
|
+
return new NpmLocation(root, opts);
|
|
20
|
+
case "local:":
|
|
21
|
+
assert(allowLocal, new TypeError("Fetching local snaps is disabled."));
|
|
22
|
+
return new LocalLocation(root, opts);
|
|
23
|
+
case "http:":
|
|
24
|
+
case "https:":
|
|
25
|
+
assert(
|
|
26
|
+
allowHttp,
|
|
27
|
+
new TypeError("Fetching snaps through http/https is disabled.")
|
|
28
|
+
);
|
|
29
|
+
return new HttpLocation(root, opts);
|
|
30
|
+
default:
|
|
31
|
+
throw new TypeError(
|
|
32
|
+
`Unrecognized "${root.protocol}" snap location protocol.`
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export {
|
|
38
|
+
detectSnapLocation
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=chunk-B67RDBZ4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/snaps/location/location.ts"],"sourcesContent":["import type { SnapManifest, VirtualFile } from '@metamask/snaps-utils';\nimport type { SemVerRange } from '@metamask/utils';\nimport { assert } from '@metamask/utils';\n\nimport { HttpLocation } from './http';\nimport { LocalLocation } from './local';\nimport type { NpmOptions } from './npm';\nimport { NpmLocation } from './npm';\n\ndeclare module '@metamask/snaps-utils' {\n interface DataMap {\n /**\n * Fully qualified, canonical path for the file in {@link https://github.com/MetaMask/SIPs/blob/main/SIPS/sip-8.md SIP-8 } URI format.\n */\n canonicalPath: string;\n }\n}\n\nexport interface SnapLocation {\n /**\n * All files are relative to the manifest, except the manifest itself.\n */\n manifest(): Promise<VirtualFile<SnapManifest>>;\n fetch(path: string): Promise<VirtualFile>;\n\n readonly shouldAlwaysReload?: boolean;\n}\n\nexport type DetectSnapLocationOptions = NpmOptions & {\n /**\n * The function used to fetch data.\n *\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n /**\n * @default false\n */\n allowHttp?: boolean;\n /**\n * @default false\n */\n allowLocal?: boolean;\n\n resolveVersion?: (range: SemVerRange) => Promise<SemVerRange>;\n};\n\n/**\n * Auto-magically detects which SnapLocation object to create based on the provided {@link location}.\n *\n * @param location - A {@link https://github.com/MetaMask/SIPs/blob/main/SIPS/sip-8.md SIP-8} uri.\n * @param opts - NPM options and feature flags.\n * @returns SnapLocation based on url.\n */\nexport function detectSnapLocation(\n location: string | URL,\n opts?: DetectSnapLocationOptions,\n): SnapLocation {\n const allowHttp = opts?.allowHttp ?? false;\n const allowLocal = opts?.allowLocal ?? false;\n const root = new URL(location);\n switch (root.protocol) {\n case 'npm:':\n return new NpmLocation(root, opts);\n case 'local:':\n assert(allowLocal, new TypeError('Fetching local snaps is disabled.'));\n return new LocalLocation(root, opts);\n case 'http:':\n case 'https:':\n assert(\n allowHttp,\n new TypeError('Fetching snaps through http/https is disabled.'),\n );\n return new HttpLocation(root, opts);\n default:\n throw new TypeError(\n `Unrecognized \"${root.protocol}\" snap location protocol.`,\n );\n }\n}\n"],"mappings":";;;;;;;;;;;AAEA,SAAS,cAAc;AAoDhB,SAAS,mBACd,UACA,MACc;AACd,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,UAAQ,KAAK,UAAU;AAAA,IACrB,KAAK;AACH,aAAO,IAAI,YAAY,MAAM,IAAI;AAAA,IACnC,KAAK;AACH,aAAO,YAAY,IAAI,UAAU,mCAAmC,CAAC;AACrE,aAAO,IAAI,cAAc,MAAM,IAAI;AAAA,IACrC,KAAK;AAAA,IACL,KAAK;AACH;AAAA,QACE;AAAA,QACA,IAAI,UAAU,gDAAgD;AAAA,MAChE;AACA,aAAO,IAAI,aAAa,MAAM,IAAI;AAAA,IACpC;AACE,YAAM,IAAI;AAAA,QACR,iBAAiB,KAAK,QAAQ;AAAA,MAChC;AAAA,EACJ;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-B7R3EWM3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-BAEXVO3U.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|