@metamask/snaps-execution-environments 4.0.1 → 5.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.
Files changed (438) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/dist/browserify/iframe/bundle.js +4 -4
  3. package/dist/browserify/node-process/bundle.js +3 -3
  4. package/dist/browserify/node-thread/bundle.js +3 -3
  5. package/dist/browserify/webview/bundle.js +4 -4
  6. package/dist/browserify/worker-executor/bundle.js +4 -4
  7. package/dist/browserify/worker-pool/bundle.js +4 -4
  8. package/dist/chunk-2VA6RAEE.js +30 -0
  9. package/dist/chunk-2VA6RAEE.js.map +1 -0
  10. package/dist/chunk-3JCT4MWT.js +108 -0
  11. package/dist/chunk-3JCT4MWT.js.map +1 -0
  12. package/dist/chunk-3Y4ZRKNE.js +33 -0
  13. package/dist/chunk-3Y4ZRKNE.js.map +1 -0
  14. package/dist/chunk-44XYIN4N.js +86 -0
  15. package/dist/chunk-44XYIN4N.js.map +1 -0
  16. package/dist/chunk-4CGJF3BT.mjs +262 -0
  17. package/dist/chunk-4CGJF3BT.mjs.map +1 -0
  18. package/dist/chunk-4XRZLEKU.js +49 -0
  19. package/dist/chunk-4XRZLEKU.js.map +1 -0
  20. package/dist/chunk-53ZULHPK.mjs +16 -0
  21. package/dist/chunk-53ZULHPK.mjs.map +1 -0
  22. package/dist/chunk-5DEV3QQU.mjs +12 -0
  23. package/dist/chunk-5DEV3QQU.mjs.map +1 -0
  24. package/dist/chunk-5FG5IBYT.mjs +33 -0
  25. package/dist/chunk-5FG5IBYT.mjs.map +1 -0
  26. package/dist/chunk-5STN3QCA.js +183 -0
  27. package/dist/chunk-5STN3QCA.js.map +1 -0
  28. package/dist/chunk-7AJWXSDQ.mjs +73 -0
  29. package/dist/chunk-7AJWXSDQ.mjs.map +1 -0
  30. package/dist/chunk-ACK2JBSO.mjs +49 -0
  31. package/dist/chunk-ACK2JBSO.mjs.map +1 -0
  32. package/dist/chunk-B3JZNNZD.js +48 -0
  33. package/dist/chunk-B3JZNNZD.js.map +1 -0
  34. package/dist/chunk-BCBKEUCG.mjs +38 -0
  35. package/dist/chunk-BCBKEUCG.mjs.map +1 -0
  36. package/dist/chunk-BTEAZZKP.mjs +24 -0
  37. package/dist/chunk-BTEAZZKP.mjs.map +1 -0
  38. package/dist/chunk-CV5LC4PP.js +24 -0
  39. package/dist/chunk-CV5LC4PP.js.map +1 -0
  40. package/dist/chunk-CWCVTRNZ.mjs +48 -0
  41. package/dist/chunk-CWCVTRNZ.mjs.map +1 -0
  42. package/dist/chunk-CWIFVPLR.js +262 -0
  43. package/dist/chunk-CWIFVPLR.js.map +1 -0
  44. package/dist/chunk-DFPM46ZF.js +147 -0
  45. package/dist/chunk-DFPM46ZF.js.map +1 -0
  46. package/dist/chunk-DLLLH5HN.js +26 -0
  47. package/dist/chunk-DLLLH5HN.js.map +1 -0
  48. package/dist/chunk-DTF6YTIS.js +484 -0
  49. package/dist/chunk-DTF6YTIS.js.map +1 -0
  50. package/dist/chunk-ERB7OLAB.mjs +86 -0
  51. package/dist/chunk-ERB7OLAB.mjs.map +1 -0
  52. package/dist/chunk-EXN2TFDJ.js +38 -0
  53. package/dist/chunk-EXN2TFDJ.js.map +1 -0
  54. package/dist/chunk-F37LPBJS.js +33 -0
  55. package/dist/chunk-F37LPBJS.js.map +1 -0
  56. package/dist/chunk-FOEAIF5U.js +16 -0
  57. package/dist/chunk-FOEAIF5U.js.map +1 -0
  58. package/dist/chunk-HGLRZZ56.js +32 -0
  59. package/dist/chunk-HGLRZZ56.js.map +1 -0
  60. package/dist/chunk-HKHW6TTX.js +49 -0
  61. package/dist/chunk-HKHW6TTX.js.map +1 -0
  62. package/dist/chunk-HWS4QSOC.mjs +16 -0
  63. package/dist/chunk-HWS4QSOC.mjs.map +1 -0
  64. package/dist/chunk-I5G4YFHM.js +73 -0
  65. package/dist/chunk-I5G4YFHM.js.map +1 -0
  66. package/dist/chunk-IX5S3V47.mjs +26 -0
  67. package/dist/chunk-IX5S3V47.mjs.map +1 -0
  68. package/dist/chunk-JW3JHJ7S.js +45 -0
  69. package/dist/chunk-JW3JHJ7S.js.map +1 -0
  70. package/dist/chunk-LO5ORVRC.js +16 -0
  71. package/dist/chunk-LO5ORVRC.js.map +1 -0
  72. package/dist/chunk-MCXWFCGV.js +1 -0
  73. package/dist/chunk-MCXWFCGV.js.map +1 -0
  74. package/dist/chunk-MIWGLICQ.mjs +108 -0
  75. package/dist/chunk-MIWGLICQ.mjs.map +1 -0
  76. package/dist/chunk-MM6ZSW4E.mjs +81 -0
  77. package/dist/chunk-MM6ZSW4E.mjs.map +1 -0
  78. package/dist/chunk-MOXNHXPG.js +67 -0
  79. package/dist/chunk-MOXNHXPG.js.map +1 -0
  80. package/dist/chunk-MS2LQQYH.js +38 -0
  81. package/dist/chunk-MS2LQQYH.js.map +1 -0
  82. package/dist/chunk-MXNMMTJW.mjs +51 -0
  83. package/dist/chunk-MXNMMTJW.mjs.map +1 -0
  84. package/dist/chunk-OBT45IWW.js +92 -0
  85. package/dist/chunk-OBT45IWW.js.map +1 -0
  86. package/dist/chunk-OCNPLHS2.js +51 -0
  87. package/dist/chunk-OCNPLHS2.js.map +1 -0
  88. package/dist/chunk-OLASO3O4.js +81 -0
  89. package/dist/chunk-OLASO3O4.js.map +1 -0
  90. package/dist/chunk-PTCQ2I47.mjs +147 -0
  91. package/dist/chunk-PTCQ2I47.mjs.map +1 -0
  92. package/dist/chunk-Q42NNJFY.mjs +32 -0
  93. package/dist/chunk-Q42NNJFY.mjs.map +1 -0
  94. package/dist/chunk-QJB4J7WL.mjs +67 -0
  95. package/dist/chunk-QJB4J7WL.mjs.map +1 -0
  96. package/dist/chunk-QVIHE3WB.mjs +484 -0
  97. package/dist/chunk-QVIHE3WB.mjs.map +1 -0
  98. package/dist/chunk-QZC2X6NG.js +44 -0
  99. package/dist/chunk-QZC2X6NG.js.map +1 -0
  100. package/dist/chunk-RZNKZRAD.js +40 -0
  101. package/dist/chunk-RZNKZRAD.js.map +1 -0
  102. package/dist/chunk-S7257EN3.mjs +49 -0
  103. package/dist/chunk-S7257EN3.mjs.map +1 -0
  104. package/dist/chunk-TSEAPB7L.mjs +1 -0
  105. package/dist/chunk-TSEAPB7L.mjs.map +1 -0
  106. package/dist/chunk-UOPIRTJX.mjs +44 -0
  107. package/dist/chunk-UOPIRTJX.mjs.map +1 -0
  108. package/dist/chunk-USHNZDGV.mjs +33 -0
  109. package/dist/chunk-USHNZDGV.mjs.map +1 -0
  110. package/dist/chunk-V76DI2XM.mjs +183 -0
  111. package/dist/chunk-V76DI2XM.mjs.map +1 -0
  112. package/dist/chunk-VKFZ4EB5.mjs +40 -0
  113. package/dist/chunk-VKFZ4EB5.mjs.map +1 -0
  114. package/dist/chunk-W7EDURT5.mjs +92 -0
  115. package/dist/chunk-W7EDURT5.mjs.map +1 -0
  116. package/dist/chunk-WV3CXIKN.mjs +147 -0
  117. package/dist/chunk-WV3CXIKN.mjs.map +1 -0
  118. package/dist/chunk-Y7MVNOPY.mjs +45 -0
  119. package/dist/chunk-Y7MVNOPY.mjs.map +1 -0
  120. package/dist/chunk-YRZVIDCF.mjs +38 -0
  121. package/dist/chunk-YRZVIDCF.mjs.map +1 -0
  122. package/dist/chunk-Z4WSS7YZ.js +147 -0
  123. package/dist/chunk-Z4WSS7YZ.js.map +1 -0
  124. package/dist/chunk-Z7BOREC4.js +12 -0
  125. package/dist/chunk-Z7BOREC4.js.map +1 -0
  126. package/dist/chunk-ZNTCZK7J.mjs +30 -0
  127. package/dist/chunk-ZNTCZK7J.mjs.map +1 -0
  128. package/dist/common/BaseSnapExecutor.js +26 -0
  129. package/dist/common/BaseSnapExecutor.js.map +1 -0
  130. package/dist/common/BaseSnapExecutor.mjs +26 -0
  131. package/dist/common/BaseSnapExecutor.mjs.map +1 -0
  132. package/dist/common/commands.js +11 -0
  133. package/dist/common/commands.js.map +1 -0
  134. package/dist/common/commands.mjs +11 -0
  135. package/dist/common/commands.mjs.map +1 -0
  136. package/dist/common/endowments/commonEndowmentFactory.js +20 -0
  137. package/dist/common/endowments/commonEndowmentFactory.js.map +1 -0
  138. package/dist/common/endowments/commonEndowmentFactory.mjs +20 -0
  139. package/dist/common/endowments/commonEndowmentFactory.mjs.map +1 -0
  140. package/dist/common/endowments/console.js +13 -0
  141. package/dist/common/endowments/console.js.map +1 -0
  142. package/dist/common/endowments/console.mjs +13 -0
  143. package/dist/common/endowments/console.mjs.map +1 -0
  144. package/dist/common/endowments/crypto.js +11 -0
  145. package/dist/common/endowments/crypto.js.map +1 -0
  146. package/dist/common/endowments/crypto.mjs +11 -0
  147. package/dist/common/endowments/crypto.mjs.map +1 -0
  148. package/dist/common/endowments/date.js +9 -0
  149. package/dist/common/endowments/date.js.map +1 -0
  150. package/dist/common/endowments/date.mjs +9 -0
  151. package/dist/common/endowments/date.mjs.map +1 -0
  152. package/dist/common/endowments/index.js +21 -0
  153. package/dist/common/endowments/index.js.map +1 -0
  154. package/dist/common/endowments/index.mjs +21 -0
  155. package/dist/common/endowments/index.mjs.map +1 -0
  156. package/dist/common/endowments/interval.js +8 -0
  157. package/dist/common/endowments/interval.js.map +1 -0
  158. package/dist/common/endowments/interval.mjs +8 -0
  159. package/dist/common/endowments/interval.mjs.map +1 -0
  160. package/dist/common/endowments/math.js +10 -0
  161. package/dist/common/endowments/math.js.map +1 -0
  162. package/dist/common/endowments/math.mjs +10 -0
  163. package/dist/common/endowments/math.mjs.map +1 -0
  164. package/dist/common/endowments/network.js +10 -0
  165. package/dist/common/endowments/network.js.map +1 -0
  166. package/dist/common/endowments/network.mjs +10 -0
  167. package/dist/common/endowments/network.mjs.map +1 -0
  168. package/dist/common/endowments/textDecoder.js +8 -0
  169. package/dist/common/endowments/textDecoder.js.map +1 -0
  170. package/dist/common/endowments/textDecoder.mjs +8 -0
  171. package/dist/common/endowments/textDecoder.mjs.map +1 -0
  172. package/dist/common/endowments/textEncoder.js +8 -0
  173. package/dist/common/endowments/textEncoder.js.map +1 -0
  174. package/dist/common/endowments/textEncoder.mjs +8 -0
  175. package/dist/common/endowments/textEncoder.mjs.map +1 -0
  176. package/dist/common/endowments/timeout.js +8 -0
  177. package/dist/common/endowments/timeout.js.map +1 -0
  178. package/dist/common/endowments/timeout.mjs +8 -0
  179. package/dist/common/endowments/timeout.mjs.map +1 -0
  180. package/dist/common/globalEvents.js +11 -0
  181. package/dist/common/globalEvents.js.map +1 -0
  182. package/dist/common/globalEvents.mjs +11 -0
  183. package/dist/common/globalEvents.mjs.map +1 -0
  184. package/dist/common/globalObject.js +10 -0
  185. package/dist/common/globalObject.js.map +1 -0
  186. package/dist/common/globalObject.mjs +10 -0
  187. package/dist/common/globalObject.mjs.map +1 -0
  188. package/dist/common/lockdown/lockdown-events.js +8 -0
  189. package/dist/common/lockdown/lockdown-events.js.map +1 -0
  190. package/dist/common/lockdown/lockdown-events.mjs +8 -0
  191. package/dist/common/lockdown/lockdown-events.mjs.map +1 -0
  192. package/dist/common/lockdown/lockdown-more.js +8 -0
  193. package/dist/common/lockdown/lockdown-more.js.map +1 -0
  194. package/dist/common/lockdown/lockdown-more.mjs +8 -0
  195. package/dist/common/lockdown/lockdown-more.mjs.map +1 -0
  196. package/dist/common/lockdown/lockdown.js +22 -0
  197. package/dist/common/lockdown/lockdown.js.map +1 -0
  198. package/dist/common/lockdown/lockdown.mjs +22 -0
  199. package/dist/common/lockdown/lockdown.mjs.map +1 -0
  200. package/dist/common/sortParams.js +8 -0
  201. package/dist/common/sortParams.js.map +1 -0
  202. package/dist/common/sortParams.mjs +8 -0
  203. package/dist/common/sortParams.mjs.map +1 -0
  204. package/dist/common/utils.js +21 -0
  205. package/dist/common/utils.js.map +1 -0
  206. package/dist/common/utils.mjs +21 -0
  207. package/dist/common/utils.mjs.map +1 -0
  208. package/dist/common/validation.js +38 -0
  209. package/dist/common/validation.js.map +1 -0
  210. package/dist/common/validation.mjs +38 -0
  211. package/dist/common/validation.mjs.map +1 -0
  212. package/dist/globals.d.js +1 -0
  213. package/dist/globals.d.js.map +1 -0
  214. package/dist/globals.d.mjs +1 -0
  215. package/dist/globals.d.mjs.map +1 -0
  216. package/dist/iframe/IFrameSnapExecutor.js +27 -0
  217. package/dist/iframe/IFrameSnapExecutor.js.map +1 -0
  218. package/dist/iframe/IFrameSnapExecutor.mjs +27 -0
  219. package/dist/iframe/IFrameSnapExecutor.mjs.map +1 -0
  220. package/dist/iframe/index.js +35 -0
  221. package/dist/iframe/index.js.map +1 -0
  222. package/dist/iframe/index.mjs +35 -0
  223. package/dist/iframe/index.mjs.map +1 -0
  224. package/dist/index.js +9 -0
  225. package/dist/index.js.map +1 -0
  226. package/dist/index.mjs +9 -0
  227. package/dist/index.mjs.map +1 -0
  228. package/dist/logging.js +8 -0
  229. package/dist/logging.js.map +1 -0
  230. package/dist/logging.mjs +8 -0
  231. package/dist/logging.mjs.map +1 -0
  232. package/dist/node-process/ChildProcessSnapExecutor.js +27 -0
  233. package/dist/node-process/ChildProcessSnapExecutor.js.map +1 -0
  234. package/dist/node-process/ChildProcessSnapExecutor.mjs +27 -0
  235. package/dist/node-process/ChildProcessSnapExecutor.mjs.map +1 -0
  236. package/dist/node-process/index.js +31 -0
  237. package/dist/node-process/index.js.map +1 -0
  238. package/dist/node-process/index.mjs +31 -0
  239. package/dist/node-process/index.mjs.map +1 -0
  240. package/dist/node-thread/ThreadSnapExecutor.js +27 -0
  241. package/dist/node-thread/ThreadSnapExecutor.js.map +1 -0
  242. package/dist/node-thread/ThreadSnapExecutor.mjs +27 -0
  243. package/dist/node-thread/ThreadSnapExecutor.mjs.map +1 -0
  244. package/dist/node-thread/index.js +31 -0
  245. package/dist/node-thread/index.js.map +1 -0
  246. package/dist/node-thread/index.mjs +31 -0
  247. package/dist/node-thread/index.mjs.map +1 -0
  248. package/dist/proxy/ProxySnapExecutor.js +8 -0
  249. package/dist/proxy/ProxySnapExecutor.js.map +1 -0
  250. package/dist/proxy/ProxySnapExecutor.mjs +8 -0
  251. package/dist/proxy/ProxySnapExecutor.mjs.map +1 -0
  252. package/dist/proxy/index.js +9 -0
  253. package/dist/proxy/index.js.map +1 -0
  254. package/dist/proxy/index.mjs +9 -0
  255. package/dist/proxy/index.mjs.map +1 -0
  256. package/dist/tsconfig.build.tsbuildinfo +1 -0
  257. package/dist/types/common/utils.d.ts +7 -0
  258. package/dist/types/vendor/global.d.js +1 -0
  259. package/dist/types/vendor/global.d.js.map +1 -0
  260. package/dist/types/vendor/global.d.mjs +1 -0
  261. package/dist/types/vendor/global.d.mjs.map +1 -0
  262. package/dist/types/vendor/readable-stream.d.js +1 -0
  263. package/dist/types/vendor/readable-stream.d.js.map +1 -0
  264. package/dist/types/vendor/readable-stream.d.mjs +1 -0
  265. package/dist/types/vendor/readable-stream.d.mjs.map +1 -0
  266. package/dist/webview/WebViewExecutorStream.js +8 -0
  267. package/dist/webview/WebViewExecutorStream.js.map +1 -0
  268. package/dist/webview/WebViewExecutorStream.mjs +8 -0
  269. package/dist/webview/WebViewExecutorStream.mjs.map +1 -0
  270. package/dist/webview/index.js +26 -0
  271. package/dist/webview/index.js.map +1 -0
  272. package/dist/webview/index.mjs +26 -0
  273. package/dist/webview/index.mjs.map +1 -0
  274. package/dist/webworker/executor/WebWorkerSnapExecutor.js +27 -0
  275. package/dist/webworker/executor/WebWorkerSnapExecutor.js.map +1 -0
  276. package/dist/webworker/executor/WebWorkerSnapExecutor.mjs +27 -0
  277. package/dist/webworker/executor/WebWorkerSnapExecutor.mjs.map +1 -0
  278. package/dist/webworker/executor/index.js +35 -0
  279. package/dist/webworker/executor/index.js.map +1 -0
  280. package/dist/webworker/executor/index.mjs +35 -0
  281. package/dist/webworker/executor/index.mjs.map +1 -0
  282. package/dist/webworker/pool/WebWorkerPool.js +8 -0
  283. package/dist/webworker/pool/WebWorkerPool.js.map +1 -0
  284. package/dist/webworker/pool/WebWorkerPool.mjs +8 -0
  285. package/dist/webworker/pool/WebWorkerPool.mjs.map +1 -0
  286. package/dist/webworker/pool/index.js +16 -0
  287. package/dist/webworker/pool/index.js.map +1 -0
  288. package/dist/webworker/pool/index.mjs +16 -0
  289. package/dist/webworker/pool/index.mjs.map +1 -0
  290. package/package.json +25 -18
  291. package/dist/cjs/common/BaseSnapExecutor.js +0 -496
  292. package/dist/cjs/common/BaseSnapExecutor.js.map +0 -1
  293. package/dist/cjs/common/commands.js +0 -102
  294. package/dist/cjs/common/commands.js.map +0 -1
  295. package/dist/cjs/common/endowments/commonEndowmentFactory.js +0 -147
  296. package/dist/cjs/common/endowments/commonEndowmentFactory.js.map +0 -1
  297. package/dist/cjs/common/endowments/console.js +0 -134
  298. package/dist/cjs/common/endowments/console.js.map +0 -1
  299. package/dist/cjs/common/endowments/crypto.js +0 -44
  300. package/dist/cjs/common/endowments/crypto.js.map +0 -1
  301. package/dist/cjs/common/endowments/date.js +0 -53
  302. package/dist/cjs/common/endowments/date.js.map +0 -1
  303. package/dist/cjs/common/endowments/index.js +0 -93
  304. package/dist/cjs/common/endowments/index.js.map +0 -1
  305. package/dist/cjs/common/endowments/interval.js +0 -62
  306. package/dist/cjs/common/endowments/interval.js.map +0 -1
  307. package/dist/cjs/common/endowments/math.js +0 -67
  308. package/dist/cjs/common/endowments/math.js.map +0 -1
  309. package/dist/cjs/common/endowments/network.js +0 -303
  310. package/dist/cjs/common/endowments/network.js.map +0 -1
  311. package/dist/cjs/common/endowments/textDecoder.js +0 -28
  312. package/dist/cjs/common/endowments/textDecoder.js.map +0 -1
  313. package/dist/cjs/common/endowments/textEncoder.js +0 -28
  314. package/dist/cjs/common/endowments/textEncoder.js.map +0 -1
  315. package/dist/cjs/common/endowments/timeout.js +0 -64
  316. package/dist/cjs/common/endowments/timeout.js.map +0 -1
  317. package/dist/cjs/common/globalEvents.js +0 -40
  318. package/dist/cjs/common/globalEvents.js.map +0 -1
  319. package/dist/cjs/common/globalObject.js +0 -53
  320. package/dist/cjs/common/globalObject.js.map +0 -1
  321. package/dist/cjs/common/lockdown/lockdown-events.js +0 -74
  322. package/dist/cjs/common/lockdown/lockdown-events.js.map +0 -1
  323. package/dist/cjs/common/lockdown/lockdown-more.js +0 -73
  324. package/dist/cjs/common/lockdown/lockdown-more.js.map +0 -1
  325. package/dist/cjs/common/lockdown/lockdown.js +0 -30
  326. package/dist/cjs/common/lockdown/lockdown.js.map +0 -1
  327. package/dist/cjs/common/sortParams.js +0 -26
  328. package/dist/cjs/common/sortParams.js.map +0 -1
  329. package/dist/cjs/common/utils.js +0 -128
  330. package/dist/cjs/common/utils.js.map +0 -1
  331. package/dist/cjs/common/validation.js +0 -149
  332. package/dist/cjs/common/validation.js.map +0 -1
  333. package/dist/cjs/iframe/IFrameSnapExecutor.js +0 -50
  334. package/dist/cjs/iframe/IFrameSnapExecutor.js.map +0 -1
  335. package/dist/cjs/iframe/index.js +0 -13
  336. package/dist/cjs/iframe/index.js.map +0 -1
  337. package/dist/cjs/index.js +0 -20
  338. package/dist/cjs/index.js.map +0 -1
  339. package/dist/cjs/logging.js +0 -15
  340. package/dist/cjs/logging.js.map +0 -1
  341. package/dist/cjs/node-process/ChildProcessSnapExecutor.js +0 -39
  342. package/dist/cjs/node-process/ChildProcessSnapExecutor.js.map +0 -1
  343. package/dist/cjs/node-process/index.js +0 -11
  344. package/dist/cjs/node-process/index.js.map +0 -1
  345. package/dist/cjs/node-thread/ThreadSnapExecutor.js +0 -39
  346. package/dist/cjs/node-thread/ThreadSnapExecutor.js.map +0 -1
  347. package/dist/cjs/node-thread/index.js +0 -11
  348. package/dist/cjs/node-thread/index.js.map +0 -1
  349. package/dist/cjs/proxy/ProxySnapExecutor.js +0 -183
  350. package/dist/cjs/proxy/ProxySnapExecutor.js.map +0 -1
  351. package/dist/cjs/proxy/index.js +0 -20
  352. package/dist/cjs/proxy/index.js.map +0 -1
  353. package/dist/cjs/webview/WebViewExecutorStream.js +0 -121
  354. package/dist/cjs/webview/WebViewExecutorStream.js.map +0 -1
  355. package/dist/cjs/webview/index.js +0 -19
  356. package/dist/cjs/webview/index.js.map +0 -1
  357. package/dist/cjs/webworker/executor/WebWorkerSnapExecutor.js +0 -45
  358. package/dist/cjs/webworker/executor/WebWorkerSnapExecutor.js.map +0 -1
  359. package/dist/cjs/webworker/executor/index.js +0 -13
  360. package/dist/cjs/webworker/executor/index.js.map +0 -1
  361. package/dist/cjs/webworker/pool/WebWorkerPool.js +0 -248
  362. package/dist/cjs/webworker/pool/WebWorkerPool.js.map +0 -1
  363. package/dist/cjs/webworker/pool/index.js +0 -13
  364. package/dist/cjs/webworker/pool/index.js.map +0 -1
  365. package/dist/esm/common/BaseSnapExecutor.js +0 -486
  366. package/dist/esm/common/BaseSnapExecutor.js.map +0 -1
  367. package/dist/esm/common/commands.js +0 -101
  368. package/dist/esm/common/commands.js.map +0 -1
  369. package/dist/esm/common/endowments/commonEndowmentFactory.js +0 -132
  370. package/dist/esm/common/endowments/commonEndowmentFactory.js.map +0 -1
  371. package/dist/esm/common/endowments/console.js +0 -116
  372. package/dist/esm/common/endowments/console.js.map +0 -1
  373. package/dist/esm/common/endowments/crypto.js +0 -26
  374. package/dist/esm/common/endowments/crypto.js.map +0 -1
  375. package/dist/esm/common/endowments/date.js +0 -43
  376. package/dist/esm/common/endowments/date.js.map +0 -1
  377. package/dist/esm/common/endowments/index.js +0 -92
  378. package/dist/esm/common/endowments/index.js.map +0 -1
  379. package/dist/esm/common/endowments/interval.js +0 -52
  380. package/dist/esm/common/endowments/interval.js.map +0 -1
  381. package/dist/esm/common/endowments/math.js +0 -57
  382. package/dist/esm/common/endowments/math.js.map +0 -1
  383. package/dist/esm/common/endowments/network.js +0 -293
  384. package/dist/esm/common/endowments/network.js.map +0 -1
  385. package/dist/esm/common/endowments/textDecoder.js +0 -18
  386. package/dist/esm/common/endowments/textDecoder.js.map +0 -1
  387. package/dist/esm/common/endowments/textEncoder.js +0 -18
  388. package/dist/esm/common/endowments/textEncoder.js.map +0 -1
  389. package/dist/esm/common/endowments/timeout.js +0 -54
  390. package/dist/esm/common/endowments/timeout.js.map +0 -1
  391. package/dist/esm/common/globalEvents.js +0 -36
  392. package/dist/esm/common/globalEvents.js.map +0 -1
  393. package/dist/esm/common/globalObject.js +0 -36
  394. package/dist/esm/common/globalObject.js.map +0 -1
  395. package/dist/esm/common/lockdown/lockdown-events.js +0 -66
  396. package/dist/esm/common/lockdown/lockdown-events.js.map +0 -1
  397. package/dist/esm/common/lockdown/lockdown-more.js +0 -82
  398. package/dist/esm/common/lockdown/lockdown-more.js.map +0 -1
  399. package/dist/esm/common/lockdown/lockdown.js +0 -24
  400. package/dist/esm/common/lockdown/lockdown.js.map +0 -1
  401. package/dist/esm/common/sortParams.js +0 -29
  402. package/dist/esm/common/sortParams.js.map +0 -1
  403. package/dist/esm/common/utils.js +0 -128
  404. package/dist/esm/common/utils.js.map +0 -1
  405. package/dist/esm/common/validation.js +0 -127
  406. package/dist/esm/common/validation.js.map +0 -1
  407. package/dist/esm/iframe/IFrameSnapExecutor.js +0 -35
  408. package/dist/esm/iframe/IFrameSnapExecutor.js.map +0 -1
  409. package/dist/esm/iframe/index.js +0 -9
  410. package/dist/esm/iframe/index.js.map +0 -1
  411. package/dist/esm/index.js +0 -3
  412. package/dist/esm/index.js.map +0 -1
  413. package/dist/esm/logging.js +0 -10
  414. package/dist/esm/logging.js.map +0 -1
  415. package/dist/esm/node-process/ChildProcessSnapExecutor.js +0 -24
  416. package/dist/esm/node-process/ChildProcessSnapExecutor.js.map +0 -1
  417. package/dist/esm/node-process/index.js +0 -7
  418. package/dist/esm/node-process/index.js.map +0 -1
  419. package/dist/esm/node-thread/ThreadSnapExecutor.js +0 -24
  420. package/dist/esm/node-thread/ThreadSnapExecutor.js.map +0 -1
  421. package/dist/esm/node-thread/index.js +0 -7
  422. package/dist/esm/node-thread/index.js.map +0 -1
  423. package/dist/esm/proxy/ProxySnapExecutor.js +0 -181
  424. package/dist/esm/proxy/ProxySnapExecutor.js.map +0 -1
  425. package/dist/esm/proxy/index.js +0 -3
  426. package/dist/esm/proxy/index.js.map +0 -1
  427. package/dist/esm/webview/WebViewExecutorStream.js +0 -111
  428. package/dist/esm/webview/WebViewExecutorStream.js.map +0 -1
  429. package/dist/esm/webview/index.js +0 -15
  430. package/dist/esm/webview/index.js.map +0 -1
  431. package/dist/esm/webworker/executor/WebWorkerSnapExecutor.js +0 -30
  432. package/dist/esm/webworker/executor/WebWorkerSnapExecutor.js.map +0 -1
  433. package/dist/esm/webworker/executor/index.js +0 -9
  434. package/dist/esm/webworker/executor/index.js.map +0 -1
  435. package/dist/esm/webworker/pool/WebWorkerPool.js +0 -245
  436. package/dist/esm/webworker/pool/WebWorkerPool.js.map +0 -1
  437. package/dist/esm/webworker/pool/index.js +0 -9
  438. package/dist/esm/webworker/pool/index.js.map +0 -1
@@ -0,0 +1,30 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkDLLLH5HNjs = require('./chunk-DLLLH5HN.js');
4
+
5
+ // src/common/globalEvents.ts
6
+ var _rpcerrors = require('@metamask/rpc-errors');
7
+ function addEventListener(event, listener) {
8
+ if ("addEventListener" in _chunkDLLLH5HNjs.rootRealmGlobal && typeof _chunkDLLLH5HNjs.rootRealmGlobal.addEventListener === "function") {
9
+ return _chunkDLLLH5HNjs.rootRealmGlobal.addEventListener(event.toLowerCase(), listener);
10
+ }
11
+ if (_chunkDLLLH5HNjs.rootRealmGlobal.process && "on" in _chunkDLLLH5HNjs.rootRealmGlobal.process && typeof _chunkDLLLH5HNjs.rootRealmGlobal.process.on === "function") {
12
+ return _chunkDLLLH5HNjs.rootRealmGlobal.process.on(event, listener);
13
+ }
14
+ throw _rpcerrors.rpcErrors.internal("Platform agnostic addEventListener failed.");
15
+ }
16
+ function removeEventListener(event, listener) {
17
+ if ("removeEventListener" in _chunkDLLLH5HNjs.rootRealmGlobal && typeof _chunkDLLLH5HNjs.rootRealmGlobal.removeEventListener === "function") {
18
+ return _chunkDLLLH5HNjs.rootRealmGlobal.removeEventListener(event.toLowerCase(), listener);
19
+ }
20
+ if (_chunkDLLLH5HNjs.rootRealmGlobal.process && "removeListener" in _chunkDLLLH5HNjs.rootRealmGlobal.process && typeof _chunkDLLLH5HNjs.rootRealmGlobal.process.removeListener === "function") {
21
+ return _chunkDLLLH5HNjs.rootRealmGlobal.process.removeListener(event, listener);
22
+ }
23
+ throw new Error("Platform agnostic removeEventListener failed");
24
+ }
25
+
26
+
27
+
28
+
29
+ exports.addEventListener = addEventListener; exports.removeEventListener = removeEventListener;
30
+ //# sourceMappingURL=chunk-2VA6RAEE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/globalEvents.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,iBAAiB;AAYnB,SAAS,iBACd,OACA,UACA;AACA,MACE,sBAAsB,mBACtB,OAAO,gBAAgB,qBAAqB,YAC5C;AACA,WAAO,gBAAgB,iBAAiB,MAAM,YAAY,GAAG,QAAQ;AAAA,EACvE;AAEA,MACE,gBAAgB,WAChB,QAAQ,gBAAgB,WACxB,OAAO,gBAAgB,QAAQ,OAAO,YACtC;AACA,WAAO,gBAAgB,QAAQ,GAAG,OAAO,QAAQ;AAAA,EACnD;AAEA,QAAM,UAAU,SAAS,4CAA4C;AACvE;AAUO,SAAS,oBACd,OACA,UACA;AACA,MACE,yBAAyB,mBACzB,OAAO,gBAAgB,wBAAwB,YAC/C;AACA,WAAO,gBAAgB,oBAAoB,MAAM,YAAY,GAAG,QAAQ;AAAA,EAC1E;AAEA,MACE,gBAAgB,WAChB,oBAAoB,gBAAgB,WACpC,OAAO,gBAAgB,QAAQ,mBAAmB,YAClD;AACA,WAAO,gBAAgB,QAAQ,eAAe,OAAO,QAAQ;AAAA,EAC/D;AAEA,QAAM,IAAI,MAAM,8CAA8C;AAChE","sourcesContent":["import { rpcErrors } from '@metamask/rpc-errors';\n\nimport { rootRealmGlobal } from './globalObject';\n\n/**\n * Adds an event listener platform agnostically, trying both `globalThis.addEventListener` and `globalThis.process.on`\n *\n * @param event - The event to listen for.\n * @param listener - The listener to be triggered when the event occurs.\n * @returns The result of the platform agnostic operation if any.\n * @throws If none of the platform options are present.\n */\nexport function addEventListener(\n event: string,\n listener: (...args: any[]) => void,\n) {\n if (\n 'addEventListener' in rootRealmGlobal &&\n typeof rootRealmGlobal.addEventListener === 'function'\n ) {\n return rootRealmGlobal.addEventListener(event.toLowerCase(), listener);\n }\n\n if (\n rootRealmGlobal.process &&\n 'on' in rootRealmGlobal.process &&\n typeof rootRealmGlobal.process.on === 'function'\n ) {\n return rootRealmGlobal.process.on(event, listener);\n }\n\n throw rpcErrors.internal('Platform agnostic addEventListener failed.');\n}\n\n/**\n * Removes an event listener platform agnostically, trying both `globalThis.removeEventListener` and `globalThis.process.removeListener`\n *\n * @param event - The event to remove the listener for.\n * @param listener - The currently attached listener.\n * @returns The result of the platform agnostic operation if any.\n * @throws If none of the platform options are present.\n */\nexport function removeEventListener(\n event: string,\n listener: (...args: any[]) => void,\n) {\n if (\n 'removeEventListener' in rootRealmGlobal &&\n typeof rootRealmGlobal.removeEventListener === 'function'\n ) {\n return rootRealmGlobal.removeEventListener(event.toLowerCase(), listener);\n }\n\n if (\n rootRealmGlobal.process &&\n 'removeListener' in rootRealmGlobal.process &&\n typeof rootRealmGlobal.process.removeListener === 'function'\n ) {\n return rootRealmGlobal.process.removeListener(event, listener);\n }\n\n throw new Error('Platform agnostic removeEventListener failed');\n}\n"]}
@@ -0,0 +1,108 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+
4
+
5
+
6
+ var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
7
+
8
+ // src/proxy/ProxySnapExecutor.ts
9
+ var _postmessagestream = require('@metamask/post-message-stream');
10
+ var _packagejson = require('@metamask/snaps-execution-environments/package.json'); var _packagejson2 = _interopRequireDefault(_packagejson);
11
+ var _snapsutils = require('@metamask/snaps-utils');
12
+ var _utils = require('@metamask/utils');
13
+ var IFRAME_URL = `https://execution.metamask.io/iframe/${_packagejson2.default.version}/index.html`;
14
+ var _stream, _frameUrl, _onData, onData_fn, _initializeJob, initializeJob_fn, _terminateJob, terminateJob_fn;
15
+ var _ProxySnapExecutor = class _ProxySnapExecutor {
16
+ constructor(stream, frameUrl) {
17
+ /**
18
+ * Handle an incoming message from a `ProxyExecutionService`. This
19
+ * assumes that the message contains a `jobId` property, and a JSON-RPC
20
+ * request in the `data` property.
21
+ *
22
+ * @param data - The message data.
23
+ * @param data.data - The JSON-RPC request.
24
+ * @param data.jobId - The job ID.
25
+ */
26
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _onData);
27
+ /**
28
+ * Create a new iframe and set up a stream to communicate with it.
29
+ *
30
+ * @param jobId - The job ID.
31
+ */
32
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _initializeJob);
33
+ /**
34
+ * Terminate the job with the given ID. This will close the iframe and delete
35
+ * the job from the internal job map.
36
+ *
37
+ * @param jobId - The job ID.
38
+ */
39
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _terminateJob);
40
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _stream, void 0);
41
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _frameUrl, void 0);
42
+ this.jobs = {};
43
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _stream, stream);
44
+ _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _stream).on("data", _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _onData, onData_fn).bind(this));
45
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _frameUrl, frameUrl);
46
+ }
47
+ /**
48
+ * Initialize the executor with the given stream. This is a wrapper around the
49
+ * constructor.
50
+ *
51
+ * @param stream - The stream to use for communication.
52
+ * @param frameUrl - An optional URL for the iframe to use.
53
+ * @returns The initialized executor.
54
+ */
55
+ static initialize(stream, frameUrl = IFRAME_URL) {
56
+ return new _ProxySnapExecutor(stream, frameUrl);
57
+ }
58
+ };
59
+ _stream = new WeakMap();
60
+ _frameUrl = new WeakMap();
61
+ _onData = new WeakSet();
62
+ onData_fn = function(data) {
63
+ const { jobId, data: request } = data;
64
+ if (!this.jobs[jobId]) {
65
+ _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _initializeJob, initializeJob_fn).call(this, jobId).then(() => {
66
+ _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _onData, onData_fn).call(this, data);
67
+ }).catch((error) => {
68
+ _snapsutils.logError.call(void 0, "[Worker] Error initializing job:", error);
69
+ });
70
+ return;
71
+ }
72
+ if (request.method === "terminateJob") {
73
+ _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _terminateJob, terminateJob_fn).call(this, jobId);
74
+ return;
75
+ }
76
+ this.jobs[jobId].stream.write(request);
77
+ };
78
+ _initializeJob = new WeakSet();
79
+ initializeJob_fn = async function(jobId) {
80
+ const window = await _snapsutils.createWindow.call(void 0, _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _frameUrl), jobId);
81
+ const jobStream = new (0, _postmessagestream.WindowPostMessageStream)({
82
+ name: "parent",
83
+ target: "child",
84
+ targetWindow: window,
85
+ // iframe's internal window
86
+ targetOrigin: "*"
87
+ });
88
+ jobStream.on("data", (data) => {
89
+ _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _stream).write({ data, jobId });
90
+ });
91
+ this.jobs[jobId] = { id: jobId, window, stream: jobStream };
92
+ return this.jobs[jobId];
93
+ };
94
+ _terminateJob = new WeakSet();
95
+ terminateJob_fn = function(jobId) {
96
+ _utils.assert.call(void 0, this.jobs[jobId], `Job "${jobId}" not found.`);
97
+ const iframe = document.getElementById(jobId);
98
+ _utils.assert.call(void 0, iframe, `Iframe with ID "${jobId}" not found.`);
99
+ iframe.remove();
100
+ this.jobs[jobId].stream.destroy();
101
+ delete this.jobs[jobId];
102
+ };
103
+ var ProxySnapExecutor = _ProxySnapExecutor;
104
+
105
+
106
+
107
+ exports.ProxySnapExecutor = ProxySnapExecutor;
108
+ //# sourceMappingURL=chunk-3JCT4MWT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/proxy/ProxySnapExecutor.ts"],"names":[],"mappings":";;;;;;;;AACA,SAAS,+BAA+B;AAExC,OAAO,iBAAiB;AACxB,SAAS,cAAc,gBAAgB;AAEvC,SAAS,cAAc;AAQvB,IAAM,aAAa,wCAAwC,YAAY,OAAO;AAd9E;AA6BO,IAAM,qBAAN,MAAM,mBAAkB;AAAA,EAmB7B,YAAY,QAA+B,UAAkB;AAe7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AAwBN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1FA,uBAAS,SAAT;AAEA,uBAAS,WAAT;AAEA,SAAS,OAAoC,CAAC;AAe5C,uBAAK,SAAU;AACf,uBAAK,SAAQ,GAAG,QAAQ,sBAAK,oBAAQ,KAAK,IAAI,CAAC;AAC/C,uBAAK,WAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EARA,OAAO,WAAW,QAA+B,WAAW,YAAY;AACtE,WAAO,IAAI,mBAAkB,QAAQ,QAAQ;AAAA,EAC/C;AAoFF;AApGW;AAEA;AA+BT;AAAA,YAAO,SAAC,MAA+C;AACrD,QAAM,EAAE,OAAO,MAAM,QAAQ,IAAI;AAEjC,MAAI,CAAC,KAAK,KAAK,KAAK,GAAG;AAIrB,0BAAK,kCAAL,WAAoB,OACjB,KAAK,MAAM;AACV,4BAAK,oBAAL,WAAa;AAAA,IACf,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,eAAS,oCAAoC,KAAK;AAAA,IACpD,CAAC;AAEH;AAAA,EACF;AAIA,MAAI,QAAQ,WAAW,gBAAgB;AACrC,0BAAK,gCAAL,WAAmB;AACnB;AAAA,EACF;AAEA,OAAK,KAAK,KAAK,EAAE,OAAO,MAAM,OAAO;AACvC;AAOM;AAAA,mBAAc,eAAC,OAAqC;AACxD,QAAM,SAAS,MAAM,aAAa,mBAAK,YAAW,KAAK;AACvD,QAAM,YAAY,IAAI,wBAAwB;AAAA,IAC5C,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA;AAAA,IACd,cAAc;AAAA,EAChB,CAAC;AAGD,YAAU,GAAG,QAAQ,CAAC,SAAS;AAC7B,uBAAK,SAAQ,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,EACpC,CAAC;AAED,OAAK,KAAK,KAAK,IAAI,EAAE,IAAI,OAAO,QAAQ,QAAQ,UAAU;AAC1D,SAAO,KAAK,KAAK,KAAK;AACxB;AAQA;AAAA,kBAAa,SAAC,OAAe;AAC3B,SAAO,KAAK,KAAK,KAAK,GAAG,QAAQ,KAAK,cAAc;AAEpD,QAAM,SAAS,SAAS,eAAe,KAAK;AAC5C,SAAO,QAAQ,mBAAmB,KAAK,cAAc;AAErD,SAAO,OAAO;AACd,OAAK,KAAK,KAAK,EAAE,OAAO,QAAQ;AAChC,SAAO,KAAK,KAAK,KAAK;AACxB;AApGK,IAAM,oBAAN","sourcesContent":["import type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { WindowPostMessageStream } from '@metamask/post-message-stream';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport packageJson from '@metamask/snaps-execution-environments/package.json';\nimport { createWindow, logError } from '@metamask/snaps-utils';\nimport type { JsonRpcRequest } from '@metamask/utils';\nimport { assert } from '@metamask/utils';\n\ntype ExecutorJob = {\n id: string;\n window: Window;\n stream: WindowPostMessageStream;\n};\n\nconst IFRAME_URL = `https://execution.metamask.io/iframe/${packageJson.version}/index.html`;\n\n/**\n * A \"proxy\" snap executor that uses a level of indirection to execute snaps.\n *\n * Useful for multiple execution environments.\n *\n * This is not a traditional snap executor, as it does not execute snaps itself.\n * Instead, it creates an iframe window for each snap execution, and sends the\n * snap execution request to the iframe window. The iframe window is responsible\n * for executing the snap.\n *\n * This executor is persisted between snap executions. The executor essentially\n * acts as a proxy between the client and the iframe execution environment.\n */\nexport class ProxySnapExecutor {\n readonly #stream: BasePostMessageStream;\n\n readonly #frameUrl: string;\n\n readonly jobs: Record<string, ExecutorJob> = {};\n\n /**\n * Initialize the executor with the given stream. This is a wrapper around the\n * constructor.\n *\n * @param stream - The stream to use for communication.\n * @param frameUrl - An optional URL for the iframe to use.\n * @returns The initialized executor.\n */\n static initialize(stream: BasePostMessageStream, frameUrl = IFRAME_URL) {\n return new ProxySnapExecutor(stream, frameUrl);\n }\n\n constructor(stream: BasePostMessageStream, frameUrl: string) {\n this.#stream = stream;\n this.#stream.on('data', this.#onData.bind(this));\n this.#frameUrl = frameUrl;\n }\n\n /**\n * Handle an incoming message from a `ProxyExecutionService`. This\n * assumes that the message contains a `jobId` property, and a JSON-RPC\n * request in the `data` property.\n *\n * @param data - The message data.\n * @param data.data - The JSON-RPC request.\n * @param data.jobId - The job ID.\n */\n #onData(data: { data: JsonRpcRequest; jobId: string }) {\n const { jobId, data: request } = data;\n\n if (!this.jobs[jobId]) {\n // This ensures that a job is initialized before it is used. To avoid\n // code duplication, we call the `#onData` method again, which will\n // run the rest of the logic after initialization.\n this.#initializeJob(jobId)\n .then(() => {\n this.#onData(data);\n })\n .catch((error) => {\n logError('[Worker] Error initializing job:', error);\n });\n\n return;\n }\n\n // This is a method specific to the `OffscreenSnapExecutor`, as the service\n // itself does not have access to the iframes directly.\n if (request.method === 'terminateJob') {\n this.#terminateJob(jobId);\n return;\n }\n\n this.jobs[jobId].stream.write(request);\n }\n\n /**\n * Create a new iframe and set up a stream to communicate with it.\n *\n * @param jobId - The job ID.\n */\n async #initializeJob(jobId: string): Promise<ExecutorJob> {\n const window = await createWindow(this.#frameUrl, jobId);\n const jobStream = new WindowPostMessageStream({\n name: 'parent',\n target: 'child',\n targetWindow: window, // iframe's internal window\n targetOrigin: '*',\n });\n\n // Write messages from the iframe to the parent, wrapped with the job ID.\n jobStream.on('data', (data) => {\n this.#stream.write({ data, jobId });\n });\n\n this.jobs[jobId] = { id: jobId, window, stream: jobStream };\n return this.jobs[jobId];\n }\n\n /**\n * Terminate the job with the given ID. This will close the iframe and delete\n * the job from the internal job map.\n *\n * @param jobId - The job ID.\n */\n #terminateJob(jobId: string) {\n assert(this.jobs[jobId], `Job \"${jobId}\" not found.`);\n\n const iframe = document.getElementById(jobId);\n assert(iframe, `Iframe with ID \"${jobId}\" not found.`);\n\n iframe.remove();\n this.jobs[jobId].stream.destroy();\n delete this.jobs[jobId];\n }\n}\n"]}
@@ -0,0 +1,33 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkDTF6YTISjs = require('./chunk-DTF6YTIS.js');
4
+
5
+
6
+ var _chunkZ7BOREC4js = require('./chunk-Z7BOREC4.js');
7
+
8
+ // src/node-thread/ThreadSnapExecutor.ts
9
+ var _objectmultiplex = require('@metamask/object-multiplex'); var _objectmultiplex2 = _interopRequireDefault(_objectmultiplex);
10
+ var _postmessagestream = require('@metamask/post-message-stream');
11
+ var _snapsutils = require('@metamask/snaps-utils');
12
+ var _readablestream = require('readable-stream');
13
+ var ThreadSnapExecutor = class _ThreadSnapExecutor extends _chunkDTF6YTISjs.BaseSnapExecutor {
14
+ static initialize() {
15
+ _chunkZ7BOREC4js.log.call(void 0, "Worker: Connecting to parent.");
16
+ const parentStream = new (0, _postmessagestream.ThreadMessageStream)();
17
+ const mux = new (0, _objectmultiplex2.default)();
18
+ _readablestream.pipeline.call(void 0, parentStream, mux, parentStream, (error) => {
19
+ if (error) {
20
+ _snapsutils.logError.call(void 0, `Parent stream failure, closing worker.`, error);
21
+ }
22
+ self.close();
23
+ });
24
+ const commandStream = mux.createStream(_snapsutils.SNAP_STREAM_NAMES.COMMAND);
25
+ const rpcStream = mux.createStream(_snapsutils.SNAP_STREAM_NAMES.JSON_RPC);
26
+ return new _ThreadSnapExecutor(commandStream, rpcStream);
27
+ }
28
+ };
29
+
30
+
31
+
32
+ exports.ThreadSnapExecutor = ThreadSnapExecutor;
33
+ //# sourceMappingURL=chunk-3Y4ZRKNE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/node-thread/ThreadSnapExecutor.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,qBAAqB;AAC5B,SAAS,2BAA2B;AACpC,SAAS,UAAU,yBAAyB;AAC5C,SAAS,gBAAgB;AAKlB,IAAM,qBAAN,MAAM,4BAA2B,iBAAiB;AAAA,EACvD,OAAO,aAAa;AAClB,QAAI,+BAA+B;AAEnC,UAAM,eAAe,IAAI,oBAAoB;AAC7C,UAAM,MAAM,IAAI,gBAAgB;AAChC,aAAS,cAAc,KAAY,cAAc,CAAC,UAAU;AAC1D,UAAI,OAAO;AACT,iBAAS,0CAA0C,KAAK;AAAA,MAC1D;AACA,WAAK,MAAM;AAAA,IACb,CAAC;AAED,UAAM,gBAAgB,IAAI,aAAa,kBAAkB,OAAO;AAChE,UAAM,YAAY,IAAI,aAAa,kBAAkB,QAAQ;AAC7D,WAAO,IAAI,oBAAmB,eAAe,SAAS;AAAA,EACxD;AACF","sourcesContent":["import ObjectMultiplex from '@metamask/object-multiplex';\nimport { ThreadMessageStream } from '@metamask/post-message-stream';\nimport { logError, SNAP_STREAM_NAMES } from '@metamask/snaps-utils';\nimport { pipeline } from 'readable-stream';\n\nimport { BaseSnapExecutor } from '../common/BaseSnapExecutor';\nimport { log } from '../logging';\n\nexport class ThreadSnapExecutor extends BaseSnapExecutor {\n static initialize() {\n log('Worker: Connecting to parent.');\n\n const parentStream = new ThreadMessageStream();\n const mux = new ObjectMultiplex();\n pipeline(parentStream, mux as any, parentStream, (error) => {\n if (error) {\n logError(`Parent stream failure, closing worker.`, error);\n }\n self.close();\n });\n\n const commandStream = mux.createStream(SNAP_STREAM_NAMES.COMMAND);\n const rpcStream = mux.createStream(SNAP_STREAM_NAMES.JSON_RPC) as any;\n return new ThreadSnapExecutor(commandStream, rpcStream);\n }\n}\n"]}
@@ -0,0 +1,86 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkHKHW6TTXjs = require('./chunk-HKHW6TTX.js');
4
+
5
+
6
+ var _chunkMS2LQQYHjs = require('./chunk-MS2LQQYH.js');
7
+
8
+
9
+ var _chunkCWIFVPLRjs = require('./chunk-CWIFVPLR.js');
10
+
11
+
12
+ var _chunkFOEAIF5Ujs = require('./chunk-FOEAIF5U.js');
13
+
14
+
15
+ var _chunkLO5ORVRCjs = require('./chunk-LO5ORVRC.js');
16
+
17
+
18
+ var _chunkB3JZNNZDjs = require('./chunk-B3JZNNZD.js');
19
+
20
+
21
+ var _chunkOBT45IWWjs = require('./chunk-OBT45IWW.js');
22
+
23
+
24
+ var _chunkHGLRZZ56js = require('./chunk-HGLRZZ56.js');
25
+
26
+
27
+ var _chunkQZC2X6NGjs = require('./chunk-QZC2X6NG.js');
28
+
29
+
30
+ var _chunkDLLLH5HNjs = require('./chunk-DLLLH5HN.js');
31
+
32
+ // src/common/endowments/commonEndowmentFactory.ts
33
+ var commonEndowments = [
34
+ { endowment: AbortController, name: "AbortController" },
35
+ { endowment: AbortSignal, name: "AbortSignal" },
36
+ { endowment: ArrayBuffer, name: "ArrayBuffer" },
37
+ { endowment: atob, name: "atob", bind: true },
38
+ { endowment: BigInt, name: "BigInt" },
39
+ { endowment: BigInt64Array, name: "BigInt64Array" },
40
+ { endowment: BigUint64Array, name: "BigUint64Array" },
41
+ { endowment: btoa, name: "btoa", bind: true },
42
+ { endowment: DataView, name: "DataView" },
43
+ { endowment: Float32Array, name: "Float32Array" },
44
+ { endowment: Float64Array, name: "Float64Array" },
45
+ { endowment: Int8Array, name: "Int8Array" },
46
+ { endowment: Int16Array, name: "Int16Array" },
47
+ { endowment: Int32Array, name: "Int32Array" },
48
+ { endowment: Uint8Array, name: "Uint8Array" },
49
+ { endowment: Uint8ClampedArray, name: "Uint8ClampedArray" },
50
+ { endowment: Uint16Array, name: "Uint16Array" },
51
+ { endowment: Uint32Array, name: "Uint32Array" },
52
+ { endowment: URL, name: "URL" },
53
+ { endowment: WebAssembly, name: "WebAssembly" }
54
+ ];
55
+ var buildCommonEndowments = () => {
56
+ const endowmentFactories = [
57
+ _chunkHGLRZZ56js.crypto_default,
58
+ _chunkHKHW6TTXjs.interval_default,
59
+ _chunkMS2LQQYHjs.math_default,
60
+ _chunkCWIFVPLRjs.network_default,
61
+ _chunkB3JZNNZDjs.timeout_default,
62
+ _chunkFOEAIF5Ujs.textDecoder_default,
63
+ _chunkLO5ORVRCjs.textEncoder_default,
64
+ _chunkQZC2X6NGjs.date_default,
65
+ _chunkOBT45IWWjs.console_default
66
+ ];
67
+ commonEndowments.forEach((endowmentSpecification) => {
68
+ const endowment = {
69
+ names: [endowmentSpecification.name],
70
+ factory: () => {
71
+ const boundEndowment = typeof endowmentSpecification.endowment === "function" && endowmentSpecification.bind ? endowmentSpecification.endowment.bind(_chunkDLLLH5HNjs.rootRealmGlobal) : endowmentSpecification.endowment;
72
+ return {
73
+ [endowmentSpecification.name]: harden(boundEndowment)
74
+ };
75
+ }
76
+ };
77
+ endowmentFactories.push(endowment);
78
+ });
79
+ return endowmentFactories;
80
+ };
81
+ var commonEndowmentFactory_default = buildCommonEndowments;
82
+
83
+
84
+
85
+ exports.commonEndowmentFactory_default = commonEndowmentFactory_default;
86
+ //# sourceMappingURL=chunk-44XYIN4N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/endowments/commonEndowmentFactory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,IAAM,mBAAmD;AAAA,EACvD,EAAE,WAAW,iBAAiB,MAAM,kBAAkB;AAAA,EACtD,EAAE,WAAW,aAAa,MAAM,cAAc;AAAA,EAC9C,EAAE,WAAW,aAAa,MAAM,cAAc;AAAA,EAC9C,EAAE,WAAW,MAAM,MAAM,QAAQ,MAAM,KAAK;AAAA,EAC5C,EAAE,WAAW,QAAQ,MAAM,SAAS;AAAA,EACpC,EAAE,WAAW,eAAe,MAAM,gBAAgB;AAAA,EAClD,EAAE,WAAW,gBAAgB,MAAM,iBAAiB;AAAA,EACpD,EAAE,WAAW,MAAM,MAAM,QAAQ,MAAM,KAAK;AAAA,EAC5C,EAAE,WAAW,UAAU,MAAM,WAAW;AAAA,EACxC,EAAE,WAAW,cAAc,MAAM,eAAe;AAAA,EAChD,EAAE,WAAW,cAAc,MAAM,eAAe;AAAA,EAChD,EAAE,WAAW,WAAW,MAAM,YAAY;AAAA,EAC1C,EAAE,WAAW,YAAY,MAAM,aAAa;AAAA,EAC5C,EAAE,WAAW,YAAY,MAAM,aAAa;AAAA,EAC5C,EAAE,WAAW,YAAY,MAAM,aAAa;AAAA,EAC5C,EAAE,WAAW,mBAAmB,MAAM,oBAAoB;AAAA,EAC1D,EAAE,WAAW,aAAa,MAAM,cAAc;AAAA,EAC9C,EAAE,WAAW,aAAa,MAAM,cAAc;AAAA,EAC9C,EAAE,WAAW,KAAK,MAAM,MAAM;AAAA,EAC9B,EAAE,WAAW,aAAa,MAAM,cAAc;AAChD;AASA,IAAM,wBAAwB,MAA0B;AACtD,QAAM,qBAAyC;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,mBAAiB,QAAQ,CAAC,2BAA2B;AACnD,UAAM,YAAY;AAAA,MAChB,OAAO,CAAC,uBAAuB,IAAI;AAAA,MACnC,SAAS,MAAM;AACb,cAAM,iBACJ,OAAO,uBAAuB,cAAc,cAC5C,uBAAuB,OACnB,uBAAuB,UAAU,KAAK,eAAe,IACrD,uBAAuB;AAC7B,eAAO;AAAA,UACL,CAAC,uBAAuB,IAAI,GAAG,OAAO,cAAc;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AACA,uBAAmB,KAAK,SAAS;AAAA,EACnC,CAAC;AAED,SAAO;AACT;AAEA,IAAO,iCAAQ","sourcesContent":["import type { NotifyFunction } from '../BaseSnapExecutor';\nimport { rootRealmGlobal } from '../globalObject';\nimport consoleEndowment from './console';\nimport crypto from './crypto';\nimport date from './date';\nimport interval from './interval';\nimport math from './math';\nimport network from './network';\nimport textDecoder from './textDecoder';\nimport textEncoder from './textEncoder';\nimport timeout from './timeout';\n\nexport type EndowmentFactoryOptions = {\n snapId?: string;\n notify?: NotifyFunction;\n};\n\nexport type EndowmentFactory = {\n names: readonly string[];\n factory: (options?: EndowmentFactoryOptions) => { [key: string]: unknown };\n};\n\nexport type CommonEndowmentSpecification = {\n endowment: unknown;\n name: string;\n bind?: boolean;\n};\n\n// Array of common endowments\nconst commonEndowments: CommonEndowmentSpecification[] = [\n { endowment: AbortController, name: 'AbortController' },\n { endowment: AbortSignal, name: 'AbortSignal' },\n { endowment: ArrayBuffer, name: 'ArrayBuffer' },\n { endowment: atob, name: 'atob', bind: true },\n { endowment: BigInt, name: 'BigInt' },\n { endowment: BigInt64Array, name: 'BigInt64Array' },\n { endowment: BigUint64Array, name: 'BigUint64Array' },\n { endowment: btoa, name: 'btoa', bind: true },\n { endowment: DataView, name: 'DataView' },\n { endowment: Float32Array, name: 'Float32Array' },\n { endowment: Float64Array, name: 'Float64Array' },\n { endowment: Int8Array, name: 'Int8Array' },\n { endowment: Int16Array, name: 'Int16Array' },\n { endowment: Int32Array, name: 'Int32Array' },\n { endowment: Uint8Array, name: 'Uint8Array' },\n { endowment: Uint8ClampedArray, name: 'Uint8ClampedArray' },\n { endowment: Uint16Array, name: 'Uint16Array' },\n { endowment: Uint32Array, name: 'Uint32Array' },\n { endowment: URL, name: 'URL' },\n { endowment: WebAssembly, name: 'WebAssembly' },\n];\n\n/**\n * Creates a consolidated collection of common endowments.\n * This function will return factories for all common endowments including\n * the additionally attenuated. All hardened with SES.\n *\n * @returns An object with common endowments.\n */\nconst buildCommonEndowments = (): EndowmentFactory[] => {\n const endowmentFactories: EndowmentFactory[] = [\n crypto,\n interval,\n math,\n network,\n timeout,\n textDecoder,\n textEncoder,\n date,\n consoleEndowment,\n ];\n\n commonEndowments.forEach((endowmentSpecification) => {\n const endowment = {\n names: [endowmentSpecification.name] as const,\n factory: () => {\n const boundEndowment =\n typeof endowmentSpecification.endowment === 'function' &&\n endowmentSpecification.bind\n ? endowmentSpecification.endowment.bind(rootRealmGlobal)\n : endowmentSpecification.endowment;\n return {\n [endowmentSpecification.name]: harden(boundEndowment),\n } as const;\n },\n };\n endowmentFactories.push(endowment);\n });\n\n return endowmentFactories;\n};\n\nexport default buildCommonEndowments;\n"]}
@@ -0,0 +1,262 @@
1
+ import {
2
+ withTeardown
3
+ } from "./chunk-PTCQ2I47.mjs";
4
+ import {
5
+ __privateAdd,
6
+ __privateGet,
7
+ __privateSet
8
+ } from "./chunk-YRZVIDCF.mjs";
9
+
10
+ // src/common/endowments/network.ts
11
+ import { assert } from "@metamask/utils";
12
+ var _teardownRef, _ogResponse, _onStart, _onFinish;
13
+ var _ResponseWrapper = class _ResponseWrapper {
14
+ constructor(ogResponse, teardownRef, onStart, onFinish) {
15
+ __privateAdd(this, _teardownRef, void 0);
16
+ __privateAdd(this, _ogResponse, void 0);
17
+ __privateAdd(this, _onStart, void 0);
18
+ __privateAdd(this, _onFinish, void 0);
19
+ __privateSet(this, _ogResponse, ogResponse);
20
+ __privateSet(this, _teardownRef, teardownRef);
21
+ __privateSet(this, _onStart, onStart);
22
+ __privateSet(this, _onFinish, onFinish);
23
+ }
24
+ get body() {
25
+ return __privateGet(this, _ogResponse).body;
26
+ }
27
+ get bodyUsed() {
28
+ return __privateGet(this, _ogResponse).bodyUsed;
29
+ }
30
+ get headers() {
31
+ return __privateGet(this, _ogResponse).headers;
32
+ }
33
+ get ok() {
34
+ return __privateGet(this, _ogResponse).ok;
35
+ }
36
+ get redirected() {
37
+ return __privateGet(this, _ogResponse).redirected;
38
+ }
39
+ get status() {
40
+ return __privateGet(this, _ogResponse).status;
41
+ }
42
+ get statusText() {
43
+ return __privateGet(this, _ogResponse).statusText;
44
+ }
45
+ get type() {
46
+ return __privateGet(this, _ogResponse).type;
47
+ }
48
+ get url() {
49
+ return __privateGet(this, _ogResponse).url;
50
+ }
51
+ async text() {
52
+ return await withTeardown(
53
+ (async () => {
54
+ await __privateGet(this, _onStart).call(this);
55
+ try {
56
+ return await __privateGet(this, _ogResponse).text();
57
+ } finally {
58
+ await __privateGet(this, _onFinish).call(this);
59
+ }
60
+ })(),
61
+ __privateGet(this, _teardownRef)
62
+ );
63
+ }
64
+ async arrayBuffer() {
65
+ return await withTeardown(
66
+ (async () => {
67
+ await __privateGet(this, _onStart).call(this);
68
+ try {
69
+ return await __privateGet(this, _ogResponse).arrayBuffer();
70
+ } finally {
71
+ await __privateGet(this, _onFinish).call(this);
72
+ }
73
+ })(),
74
+ __privateGet(this, _teardownRef)
75
+ );
76
+ }
77
+ async blob() {
78
+ return await withTeardown(
79
+ (async () => {
80
+ await __privateGet(this, _onStart).call(this);
81
+ try {
82
+ return await __privateGet(this, _ogResponse).blob();
83
+ } finally {
84
+ await __privateGet(this, _onFinish).call(this);
85
+ }
86
+ })(),
87
+ __privateGet(this, _teardownRef)
88
+ );
89
+ }
90
+ clone() {
91
+ const newResponse = __privateGet(this, _ogResponse).clone();
92
+ return new _ResponseWrapper(
93
+ newResponse,
94
+ __privateGet(this, _teardownRef),
95
+ __privateGet(this, _onStart),
96
+ __privateGet(this, _onFinish)
97
+ );
98
+ }
99
+ async formData() {
100
+ return await withTeardown(
101
+ (async () => {
102
+ await __privateGet(this, _onStart).call(this);
103
+ try {
104
+ return await __privateGet(this, _ogResponse).formData();
105
+ } finally {
106
+ await __privateGet(this, _onFinish).call(this);
107
+ }
108
+ })(),
109
+ __privateGet(this, _teardownRef)
110
+ );
111
+ }
112
+ async json() {
113
+ return await withTeardown(
114
+ (async () => {
115
+ await __privateGet(this, _onStart).call(this);
116
+ try {
117
+ return await __privateGet(this, _ogResponse).json();
118
+ } finally {
119
+ await __privateGet(this, _onFinish).call(this);
120
+ }
121
+ })(),
122
+ __privateGet(this, _teardownRef)
123
+ );
124
+ }
125
+ };
126
+ _teardownRef = new WeakMap();
127
+ _ogResponse = new WeakMap();
128
+ _onStart = new WeakMap();
129
+ _onFinish = new WeakMap();
130
+ var ResponseWrapper = _ResponseWrapper;
131
+ var createNetwork = ({ notify } = {}) => {
132
+ assert(notify, "Notify must be passed to network endowment factory");
133
+ const openConnections = /* @__PURE__ */ new Set();
134
+ const teardownRef = { lastTeardown: 0 };
135
+ const cleanup = new FinalizationRegistry(
136
+ /* istanbul ignore next: can't test garbage collection without modifying node parameters */
137
+ (callback) => callback()
138
+ );
139
+ const _fetch = async (input, init) => {
140
+ const abortController = new AbortController();
141
+ if (init?.signal !== null && init?.signal !== void 0) {
142
+ const originalSignal = init.signal;
143
+ originalSignal.addEventListener(
144
+ "abort",
145
+ () => {
146
+ abortController.abort(originalSignal.reason);
147
+ },
148
+ { once: true }
149
+ );
150
+ }
151
+ let started = false;
152
+ const onStart = async () => {
153
+ if (!started) {
154
+ started = true;
155
+ await notify({
156
+ method: "OutboundRequest",
157
+ params: { source: "fetch" }
158
+ });
159
+ }
160
+ };
161
+ let finished = false;
162
+ const onFinish = async () => {
163
+ if (!finished) {
164
+ finished = true;
165
+ await notify({
166
+ method: "OutboundResponse",
167
+ params: { source: "fetch" }
168
+ });
169
+ }
170
+ };
171
+ let res;
172
+ let openFetchConnection;
173
+ return await withTeardown(
174
+ (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
+ } catch {
190
+ }
191
+ }
192
+ };
193
+ openConnections.add(openFetchConnection);
194
+ res = new ResponseWrapper(
195
+ await fetchPromise,
196
+ teardownRef,
197
+ onStart,
198
+ onFinish
199
+ );
200
+ } finally {
201
+ if (openFetchConnection !== void 0) {
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
+ } catch {
218
+ }
219
+ }
220
+ )
221
+ };
222
+ openConnections.add(openBodyConnection);
223
+ cleanup.register(
224
+ res.body,
225
+ /* istanbul ignore next: can't test garbage collection without modifying node parameters */
226
+ () => openConnections.delete(openBodyConnection)
227
+ );
228
+ }
229
+ return harden(res);
230
+ })(),
231
+ teardownRef
232
+ );
233
+ };
234
+ const teardownFunction = async () => {
235
+ teardownRef.lastTeardown += 1;
236
+ const promises = [];
237
+ openConnections.forEach(({ cancel }) => promises.push(cancel()));
238
+ openConnections.clear();
239
+ await Promise.all(promises);
240
+ };
241
+ return {
242
+ fetch: harden(_fetch),
243
+ // Request, Headers and Response are the endowments injected alongside fetch
244
+ // only when 'endowment:network-access' permission is requested,
245
+ // therefore these are hardened as part of fetch dependency injection within its factory.
246
+ // These endowments are not (and should never be) available by default.
247
+ Request: harden(Request),
248
+ Headers: harden(Headers),
249
+ Response: harden(Response),
250
+ teardownFunction
251
+ };
252
+ };
253
+ var endowmentModule = {
254
+ names: ["fetch", "Request", "Headers", "Response"],
255
+ factory: createNetwork
256
+ };
257
+ var network_default = endowmentModule;
258
+
259
+ export {
260
+ network_default
261
+ };
262
+ //# sourceMappingURL=chunk-4CGJF3BT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/endowments/network.ts"],"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"],"mappings":"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","names":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/common/lockdown/lockdown-events.ts
2
+ var _utils = require('@metamask/utils');
3
+ var targetEvents = /* @__PURE__ */ new Map();
4
+ if (_utils.hasProperty.call(void 0, globalThis, "UIEvent")) {
5
+ targetEvents.set(UIEvent.prototype, ["view"]);
6
+ }
7
+ if (_utils.hasProperty.call(void 0, globalThis, "MutationEvent")) {
8
+ targetEvents.set(MutationEvent.prototype, ["relatedNode"]);
9
+ }
10
+ if (_utils.hasProperty.call(void 0, globalThis, "MessageEvent")) {
11
+ targetEvents.set(MessageEvent.prototype, ["source"]);
12
+ }
13
+ if (_utils.hasProperty.call(void 0, globalThis, "FocusEvent")) {
14
+ targetEvents.set(FocusEvent.prototype, ["relatedTarget"]);
15
+ }
16
+ if (_utils.hasProperty.call(void 0, globalThis, "MouseEvent")) {
17
+ targetEvents.set(MouseEvent.prototype, [
18
+ "relatedTarget",
19
+ "fromElement",
20
+ "toElement"
21
+ ]);
22
+ }
23
+ if (_utils.hasProperty.call(void 0, globalThis, "TouchEvent")) {
24
+ targetEvents.set(TouchEvent.prototype, ["targetTouches", "touches"]);
25
+ }
26
+ if (_utils.hasProperty.call(void 0, globalThis, "Event")) {
27
+ targetEvents.set(Event.prototype, [
28
+ "target",
29
+ "currentTarget",
30
+ "srcElement",
31
+ "composedPath"
32
+ ]);
33
+ }
34
+ function executeLockdownEvents() {
35
+ targetEvents.forEach((properties, prototype) => {
36
+ for (const property of properties) {
37
+ Object.defineProperty(prototype, property, {
38
+ value: void 0,
39
+ configurable: false,
40
+ writable: false
41
+ });
42
+ }
43
+ });
44
+ }
45
+
46
+
47
+
48
+ exports.executeLockdownEvents = executeLockdownEvents;
49
+ //# sourceMappingURL=chunk-4XRZLEKU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/lockdown/lockdown-events.ts"],"names":[],"mappings":";AAGA,SAAS,mBAAmB;AAQ5B,IAAM,eAAe,oBAAI,IAAI;AAC7B,IAAI,YAAY,YAAY,SAAS,GAAG;AACtC,eAAa,IAAI,QAAQ,WAAW,CAAC,MAAM,CAAC;AAC9C;AACA,IAAI,YAAY,YAAY,eAAe,GAAG;AAC5C,eAAa,IAAI,cAAc,WAAW,CAAC,aAAa,CAAC;AAC3D;AACA,IAAI,YAAY,YAAY,cAAc,GAAG;AAC3C,eAAa,IAAI,aAAa,WAAW,CAAC,QAAQ,CAAC;AACrD;AACA,IAAI,YAAY,YAAY,YAAY,GAAG;AACzC,eAAa,IAAI,WAAW,WAAW,CAAC,eAAe,CAAC;AAC1D;AACA,IAAI,YAAY,YAAY,YAAY,GAAG;AACzC,eAAa,IAAI,WAAW,WAAW;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AACA,IAAI,YAAY,YAAY,YAAY,GAAG;AACzC,eAAa,IAAI,WAAW,WAAW,CAAC,iBAAiB,SAAS,CAAC;AACrE;AACA,IAAI,YAAY,YAAY,OAAO,GAAG;AACpC,eAAa,IAAI,MAAM,WAAW;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAKO,SAAS,wBAAwB;AACtC,eAAa,QAAQ,CAAC,YAAY,cAAc;AAC9C,eAAW,YAAY,YAAY;AACjC,aAAO,eAAe,WAAW,UAAU;AAAA,QACzC,OAAO;AAAA,QACP,cAAc;AAAA,QACd,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH","sourcesContent":["// When creating a sandbox, limitation of the events from leaking\n// sensitive objects is required. This is done by overriding own properties\n// of prototypes of all existing events.\nimport { hasProperty } from '@metamask/utils';\n\n/**\n * Targeted Event objects and properties.\n * Note: This is a map of the prototypes that inherit from Events with\n * properties that are identified to leak sensitive objects.\n * Not all browsers support all event types, so checking its existence is required.\n */\nconst targetEvents = new Map();\nif (hasProperty(globalThis, 'UIEvent')) {\n targetEvents.set(UIEvent.prototype, ['view']);\n}\nif (hasProperty(globalThis, 'MutationEvent')) {\n targetEvents.set(MutationEvent.prototype, ['relatedNode']);\n}\nif (hasProperty(globalThis, 'MessageEvent')) {\n targetEvents.set(MessageEvent.prototype, ['source']);\n}\nif (hasProperty(globalThis, 'FocusEvent')) {\n targetEvents.set(FocusEvent.prototype, ['relatedTarget']);\n}\nif (hasProperty(globalThis, 'MouseEvent')) {\n targetEvents.set(MouseEvent.prototype, [\n 'relatedTarget',\n 'fromElement',\n 'toElement',\n ]);\n}\nif (hasProperty(globalThis, 'TouchEvent')) {\n targetEvents.set(TouchEvent.prototype, ['targetTouches', 'touches']);\n}\nif (hasProperty(globalThis, 'Event')) {\n targetEvents.set(Event.prototype, [\n 'target',\n 'currentTarget',\n 'srcElement',\n 'composedPath',\n ]);\n}\n\n/**\n * Attenuate Event objects by replacing its own properties.\n */\nexport function executeLockdownEvents() {\n targetEvents.forEach((properties, prototype) => {\n for (const property of properties) {\n Object.defineProperty(prototype, property, {\n value: undefined,\n configurable: false,\n writable: false,\n });\n }\n });\n}\n"]}