@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,67 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunk44XYIN4Njs = require('./chunk-44XYIN4N.js');
4
+
5
+
6
+ var _chunkDLLLH5HNjs = require('./chunk-DLLLH5HN.js');
7
+
8
+ // src/common/endowments/index.ts
9
+ var _rpcerrors = require('@metamask/rpc-errors');
10
+ var _snapsutils = require('@metamask/snaps-utils');
11
+ var _utils = require('@metamask/utils');
12
+ var registeredEndowments = _chunk44XYIN4Njs.commonEndowmentFactory_default.call(void 0, );
13
+ var endowmentFactories = registeredEndowments.reduce((factories, builder) => {
14
+ builder.names.forEach((name) => {
15
+ factories.set(name, builder.factory);
16
+ });
17
+ return factories;
18
+ }, /* @__PURE__ */ new Map());
19
+ function createEndowments({
20
+ snap,
21
+ ethereum,
22
+ snapId,
23
+ endowments,
24
+ notify
25
+ }) {
26
+ const attenuatedEndowments = {};
27
+ const result = endowments.reduce(
28
+ ({ allEndowments, teardowns }, endowmentName) => {
29
+ if (endowmentFactories.has(endowmentName)) {
30
+ if (!_utils.hasProperty.call(void 0, attenuatedEndowments, endowmentName)) {
31
+ const { teardownFunction, ...endowment } = endowmentFactories.get(
32
+ endowmentName
33
+ )({ snapId, notify });
34
+ Object.assign(attenuatedEndowments, endowment);
35
+ if (teardownFunction) {
36
+ teardowns.push(teardownFunction);
37
+ }
38
+ }
39
+ allEndowments[endowmentName] = attenuatedEndowments[endowmentName];
40
+ } else if (endowmentName === "ethereum") {
41
+ allEndowments[endowmentName] = ethereum;
42
+ } else if (endowmentName in _chunkDLLLH5HNjs.rootRealmGlobal) {
43
+ _snapsutils.logWarning.call(void 0, `Access to unhardened global ${endowmentName}.`);
44
+ const globalValue = _chunkDLLLH5HNjs.rootRealmGlobal[endowmentName];
45
+ allEndowments[endowmentName] = globalValue;
46
+ } else {
47
+ throw _rpcerrors.rpcErrors.internal(`Unknown endowment: "${endowmentName}".`);
48
+ }
49
+ return { allEndowments, teardowns };
50
+ },
51
+ {
52
+ allEndowments: { snap },
53
+ teardowns: []
54
+ }
55
+ );
56
+ const teardown = async () => {
57
+ await Promise.all(
58
+ result.teardowns.map((teardownFunction) => teardownFunction())
59
+ );
60
+ };
61
+ return { endowments: result.allEndowments, teardown };
62
+ }
63
+
64
+
65
+
66
+ exports.createEndowments = createEndowments;
67
+ //# sourceMappingURL=chunk-MOXNHXPG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/endowments/index.ts"],"names":[],"mappings":";;;;;;;;AACA,SAAS,iBAAiB;AAE1B,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB;AAuB5B,IAAM,uBAAuB,+BAAsB;AAOnD,IAAM,qBAAqB,qBAAqB,OAAO,CAAC,WAAW,YAAY;AAC7E,UAAQ,MAAM,QAAQ,CAAC,SAAS;AAC9B,cAAU,IAAI,MAAM,QAAQ,OAAO;AAAA,EACrC,CAAC;AACD,SAAO;AACT,GAAG,oBAAI,IAA2E,CAAC;AAiB5E,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAM2E;AACzE,QAAM,uBAAgD,CAAC;AAKvD,QAAM,SAAS,WAAW;AAAA,IAIxB,CAAC,EAAE,eAAe,UAAU,GAAG,kBAAkB;AAE/C,UAAI,mBAAmB,IAAI,aAAa,GAAG;AACzC,YAAI,CAAC,YAAY,sBAAsB,aAAa,GAAG;AASrD,gBAAM,EAAE,kBAAkB,GAAG,UAAU,IAAI,mBAAmB;AAAA,YAC5D;AAAA,UACF,EAAG,EAAE,QAAQ,OAAO,CAAC;AACrB,iBAAO,OAAO,sBAAsB,SAAS;AAC7C,cAAI,kBAAkB;AACpB,sBAAU,KAAK,gBAAgB;AAAA,UACjC;AAAA,QACF;AACA,sBAAc,aAAa,IAAI,qBAAqB,aAAa;AAAA,MACnE,WAAW,kBAAkB,YAAY;AAEvC,sBAAc,aAAa,IAAI;AAAA,MACjC,WAAW,iBAAiB,iBAAiB;AAC3C,mBAAW,+BAA+B,aAAa,GAAG;AAG1D,cAAM,cAAe,gBACnB,aACF;AACA,sBAAc,aAAa,IAAI;AAAA,MACjC,OAAO;AAGL,cAAM,UAAU,SAAS,uBAAuB,aAAa,IAAI;AAAA,MACnE;AACA,aAAO,EAAE,eAAe,UAAU;AAAA,IACpC;AAAA,IACA;AAAA,MACE,eAAe,EAAE,KAAK;AAAA,MACtB,WAAW,CAAC;AAAA,IACd;AAAA,EACF;AAEA,QAAM,WAAW,YAAY;AAC3B,UAAM,QAAQ;AAAA,MACZ,OAAO,UAAU,IAAI,CAAC,qBAAqB,iBAAiB,CAAC;AAAA,IAC/D;AAAA,EACF;AACA,SAAO,EAAE,YAAY,OAAO,eAAe,SAAS;AACtD","sourcesContent":["import type { StreamProvider } from '@metamask/providers';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { SnapsProvider } from '@metamask/snaps-sdk';\nimport { logWarning } from '@metamask/snaps-utils';\nimport { hasProperty } from '@metamask/utils';\n\nimport type { NotifyFunction } from '../BaseSnapExecutor';\nimport { rootRealmGlobal } from '../globalObject';\nimport type { EndowmentFactoryOptions } from './commonEndowmentFactory';\nimport buildCommonEndowments from './commonEndowmentFactory';\n\ntype EndowmentFactoryResult = {\n /**\n * A function that performs any necessary teardown when the snap becomes idle.\n *\n * NOTE:** The endowments are not reconstructed if the snap is re-invoked\n * before being terminated, so the teardown operation must not render the\n * endowments unusable; it should simply restore the endowments to their\n * original state.\n */\n teardownFunction?: () => Promise<void> | void;\n [key: string]: unknown;\n};\n\n/**\n * Retrieve consolidated endowment factories for common endowments.\n */\nconst registeredEndowments = buildCommonEndowments();\n\n/**\n * A map of endowment names to their factory functions. Some endowments share\n * the same factory function, but we only call each factory once for each snap.\n * See {@link createEndowments} for details.\n */\nconst endowmentFactories = registeredEndowments.reduce((factories, builder) => {\n builder.names.forEach((name) => {\n factories.set(name, builder.factory);\n });\n return factories;\n}, new Map<string, (options?: EndowmentFactoryOptions) => EndowmentFactoryResult>());\n\n/**\n * Gets the endowments for a particular Snap. Some endowments, like `setTimeout`\n * and `clearTimeout`, must be attenuated so that they can only affect behavior\n * within the Snap's own realm. Therefore, we use factory functions to create\n * such attenuated / modified endowments. Otherwise, the value that's on the\n * root realm global will be used.\n *\n * @param options - An options bag.\n * @param options.snap - The Snaps global API object.\n * @param options.ethereum - The Snap's EIP-1193 provider object.\n * @param options.snapId - The id of the snap that will use the created endowments.\n * @param options.endowments - The list of endowments to provide to the snap.\n * @param options.notify - A reference to the notify function of the snap executor.\n * @returns An object containing the Snap's endowments.\n */\nexport function createEndowments({\n snap,\n ethereum,\n snapId,\n endowments,\n notify,\n}: {\n snap: SnapsProvider;\n ethereum: StreamProvider;\n snapId: string;\n endowments: string[];\n notify: NotifyFunction;\n}): { endowments: Record<string, unknown>; teardown: () => Promise<void> } {\n const attenuatedEndowments: Record<string, unknown> = {};\n\n // TODO: All endowments should be hardened to prevent covert communication\n // channels. Hardening the returned objects breaks tests elsewhere in the\n // monorepo, so further research is needed.\n const result = endowments.reduce<{\n allEndowments: Record<string, unknown>;\n teardowns: (() => Promise<void> | void)[];\n }>(\n ({ allEndowments, teardowns }, endowmentName) => {\n // First, check if the endowment has a factory, and default to that.\n if (endowmentFactories.has(endowmentName)) {\n if (!hasProperty(attenuatedEndowments, endowmentName)) {\n // Call the endowment factory for the current endowment. If the factory\n // creates multiple endowments, they will all be assigned to the\n // `attenuatedEndowments` object, but will only be passed on to the snap\n // if explicitly listed among its endowment.\n // This may not have an actual use case, but, safety first.\n\n // We just confirmed that endowmentFactories has the specified key.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { teardownFunction, ...endowment } = endowmentFactories.get(\n endowmentName,\n )!({ snapId, notify });\n Object.assign(attenuatedEndowments, endowment);\n if (teardownFunction) {\n teardowns.push(teardownFunction);\n }\n }\n allEndowments[endowmentName] = attenuatedEndowments[endowmentName];\n } else if (endowmentName === 'ethereum') {\n // Special case for adding the EIP-1193 provider.\n allEndowments[endowmentName] = ethereum;\n } else if (endowmentName in rootRealmGlobal) {\n logWarning(`Access to unhardened global ${endowmentName}.`);\n // If the endowment doesn't have a factory, just use whatever is on the\n // global object.\n const globalValue = (rootRealmGlobal as Record<string, unknown>)[\n endowmentName\n ];\n allEndowments[endowmentName] = globalValue;\n } else {\n // If we get to this point, we've been passed an endowment that doesn't\n // exist in our current environment.\n throw rpcErrors.internal(`Unknown endowment: \"${endowmentName}\".`);\n }\n return { allEndowments, teardowns };\n },\n {\n allEndowments: { snap },\n teardowns: [],\n },\n );\n\n const teardown = async () => {\n await Promise.all(\n result.teardowns.map((teardownFunction) => teardownFunction()),\n );\n };\n return { endowments: result.allEndowments, teardown };\n}\n"]}
@@ -0,0 +1,38 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkHGLRZZ56js = require('./chunk-HGLRZZ56.js');
4
+
5
+
6
+ var _chunkDLLLH5HNjs = require('./chunk-DLLLH5HN.js');
7
+
8
+ // src/common/endowments/math.ts
9
+ function createMath() {
10
+ const keys = Object.getOwnPropertyNames(
11
+ _chunkDLLLH5HNjs.rootRealmGlobal.Math
12
+ );
13
+ const math = keys.reduce((target, key) => {
14
+ if (key === "random") {
15
+ return target;
16
+ }
17
+ return { ...target, [key]: _chunkDLLLH5HNjs.rootRealmGlobal.Math[key] };
18
+ }, {});
19
+ const { crypto: hardenedCrypto } = _chunkHGLRZZ56js.createCrypto.call(void 0, );
20
+ return harden({
21
+ Math: {
22
+ ...math,
23
+ random: () => {
24
+ return hardenedCrypto.getRandomValues(new Uint32Array(1))[0] / 2 ** 32;
25
+ }
26
+ }
27
+ });
28
+ }
29
+ var endowmentModule = {
30
+ names: ["Math"],
31
+ factory: createMath
32
+ };
33
+ var math_default = endowmentModule;
34
+
35
+
36
+
37
+ exports.math_default = math_default;
38
+ //# sourceMappingURL=chunk-MS2LQQYH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/endowments/math.ts"],"names":[],"mappings":";;;;;;;;AAUA,SAAS,aAAa;AAGpB,QAAM,OAAO,OAAO;AAAA,IAClB,gBAAgB;AAAA,EAClB;AAEA,QAAM,OAAO,KAAK,OAAsB,CAAC,QAAQ,QAAQ;AACvD,QAAI,QAAQ,UAAU;AACpB,aAAO;AAAA,IACT;AAEA,WAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,GAAG,gBAAgB,KAAK,GAAG,EAAE;AAAA,EACvD,GAAG,CAAC,CAAC;AAGL,QAAM,EAAE,QAAQ,eAAe,IAAI,aAAa;AAEhD,SAAO,OAAO;AAAA,IACZ,MAAM;AAAA,MACJ,GAAG;AAAA,MACH,QAAQ,MAAM;AAiBZ,eAAO,eAAe,gBAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK;AAAA,MACtE;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,IAAM,kBAAkB;AAAA,EACtB,OAAO,CAAC,MAAM;AAAA,EACd,SAAS;AACX;AAEA,IAAO,eAAQ","sourcesContent":["import { rootRealmGlobal } from '../globalObject';\nimport { createCrypto } from './crypto';\n\n/**\n * Create a {@link Math} object, with the same properties as the global\n * {@link Math} object, but with the {@link Math.random} method replaced.\n *\n * @returns The {@link Math} object with the {@link Math.random} method\n * replaced.\n */\nfunction createMath() {\n // `Math` does not work with `Object.keys`, `Object.entries`, etc., so we\n // need to create a new object with the same properties.\n const keys = Object.getOwnPropertyNames(\n rootRealmGlobal.Math,\n ) as (keyof typeof Math)[];\n\n const math = keys.reduce<Partial<Math>>((target, key) => {\n if (key === 'random') {\n return target;\n }\n\n return { ...target, [key]: rootRealmGlobal.Math[key] };\n }, {});\n\n // Since the math endowment requires crypto, we can leverage the crypto endowment factory to get a hardened and platform agnostic instance of webcrypto\n const { crypto: hardenedCrypto } = createCrypto();\n\n return harden({\n Math: {\n ...math,\n random: () => {\n // NOTE: This is not intended to be a secure replacement for the weak\n // random number generator used by `Math.random`. It is only intended to\n // prevent side channel attacks of `Math.random` by replacing it with an\n // alternative implementation that is not vulnerable to the same\n // attacks.\n //\n // This does not mean that this implementation is secure. It is not\n // intended to be used in a security context, and this implementation\n // may change at any time.\n //\n // To securely generate random numbers, use a cryptographically secure\n // random number generator, such as the one provided by the Web Crypto\n // API:\n //\n // - https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey\n // - https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\n return hardenedCrypto.getRandomValues(new Uint32Array(1))[0] / 2 ** 32;\n },\n },\n });\n}\n\nconst endowmentModule = {\n names: ['Math'] as const,\n factory: createMath,\n};\n\nexport default endowmentModule;\n"]}
@@ -0,0 +1,51 @@
1
+ // src/common/lockdown/lockdown-more.ts
2
+ import { logError } from "@metamask/snaps-utils";
3
+ function executeLockdownMore() {
4
+ try {
5
+ const namedIntrinsics = Reflect.ownKeys(new Compartment().globalThis);
6
+ const shouldHardenManually = /* @__PURE__ */ new Set(["eval", "Function"]);
7
+ const globalProperties = /* @__PURE__ */ new Set([
8
+ // universalPropertyNames is a constant added by lockdown to global scope
9
+ // at the time of writing, it is initialized in 'ses/src/whitelist'.
10
+ // These properties tend to be non-enumerable.
11
+ ...namedIntrinsics
12
+ // TODO: Also include the named platform globals
13
+ // This grabs every enumerable property on globalThis.
14
+ // ...Object.keys(globalThis),
15
+ ]);
16
+ globalProperties.forEach((propertyName) => {
17
+ const descriptor = Reflect.getOwnPropertyDescriptor(
18
+ globalThis,
19
+ propertyName
20
+ );
21
+ if (descriptor) {
22
+ if (descriptor.configurable) {
23
+ if (hasAccessor(descriptor)) {
24
+ Object.defineProperty(globalThis, propertyName, {
25
+ configurable: false
26
+ });
27
+ } else {
28
+ Object.defineProperty(globalThis, propertyName, {
29
+ configurable: false,
30
+ writable: false
31
+ });
32
+ }
33
+ }
34
+ if (shouldHardenManually.has(propertyName)) {
35
+ harden(globalThis[propertyName]);
36
+ }
37
+ }
38
+ });
39
+ } catch (error) {
40
+ logError("Protecting intrinsics failed:", error);
41
+ throw error;
42
+ }
43
+ }
44
+ function hasAccessor(descriptor) {
45
+ return "set" in descriptor || "get" in descriptor;
46
+ }
47
+
48
+ export {
49
+ executeLockdownMore
50
+ };
51
+ //# sourceMappingURL=chunk-MXNMMTJW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/lockdown/lockdown-more.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/triple-slash-reference, spaced-comment\n/// <reference path=\"../../../../../node_modules/ses/types.d.ts\" />\n\nimport { logError } from '@metamask/snaps-utils';\n\n/**\n * The SES `lockdown` function only hardens the properties enumerated by the\n * universalPropertyNames constant specified in 'ses/src/whitelist'. This\n * function makes all function and object properties on the start compartment\n * global non-configurable and non-writable, unless they are already\n * non-configurable.\n *\n * It is critical that this function runs at the right time during\n * initialization, which should always be immediately after `lockdown` has been\n * called. At the time of writing, the modifications this function makes to the\n * runtime environment appear to be non-breaking, but that could change with\n * the addition of dependencies, or the order of our scripts in our HTML files.\n * Exercise caution.\n *\n * See inline comments for implementation details.\n *\n * We write this function in IIFE format to avoid polluting global scope.\n *\n * @throws If the lockdown failed.\n */\nexport function executeLockdownMore() {\n // Make all \"object\" and \"function\" own properties of globalThis\n // non-configurable and non-writable, when possible.\n // We call a property that is non-configurable and non-writable,\n // \"non-modifiable\".\n try {\n const namedIntrinsics = Reflect.ownKeys(new Compartment().globalThis);\n\n // These named intrinsics are not automatically hardened by `lockdown`\n const shouldHardenManually = new Set<symbol | string>(['eval', 'Function']);\n\n const globalProperties = new Set([\n // universalPropertyNames is a constant added by lockdown to global scope\n // at the time of writing, it is initialized in 'ses/src/whitelist'.\n // These properties tend to be non-enumerable.\n ...namedIntrinsics,\n\n // TODO: Also include the named platform globals\n // This grabs every enumerable property on globalThis.\n // ...Object.keys(globalThis),\n ]);\n\n globalProperties.forEach((propertyName) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(\n globalThis,\n propertyName,\n );\n\n if (descriptor) {\n if (descriptor.configurable) {\n // If the property on globalThis is configurable, make it\n // non-configurable. If it has no accessor properties, also make it\n // non-writable.\n if (hasAccessor(descriptor)) {\n Object.defineProperty(globalThis, propertyName, {\n configurable: false,\n });\n } else {\n Object.defineProperty(globalThis, propertyName, {\n configurable: false,\n writable: false,\n });\n }\n }\n\n if (shouldHardenManually.has(propertyName)) {\n harden((globalThis as any)[propertyName]);\n }\n }\n });\n } catch (error) {\n logError('Protecting intrinsics failed:', error);\n throw error;\n }\n}\n\n/**\n * Checks whether the given propertyName descriptor has any accessors, i.e. the\n * properties `get` or `set`.\n *\n * We want to make globals non-writable, and we can't set the `writable`\n * property and accessor properties at the same time.\n *\n * @param descriptor - The propertyName descriptor to check.\n * @returns Whether the propertyName descriptor has any accessors.\n */\nfunction hasAccessor(descriptor: any): boolean {\n return 'set' in descriptor || 'get' in descriptor;\n}\n"],"mappings":";AAGA,SAAS,gBAAgB;AAsBlB,SAAS,sBAAsB;AAKpC,MAAI;AACF,UAAM,kBAAkB,QAAQ,QAAQ,IAAI,YAAY,EAAE,UAAU;AAGpE,UAAM,uBAAuB,oBAAI,IAAqB,CAAC,QAAQ,UAAU,CAAC;AAE1E,UAAM,mBAAmB,oBAAI,IAAI;AAAA;AAAA;AAAA;AAAA,MAI/B,GAAG;AAAA;AAAA;AAAA;AAAA,IAKL,CAAC;AAED,qBAAiB,QAAQ,CAAC,iBAAiB;AACzC,YAAM,aAAa,QAAQ;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAEA,UAAI,YAAY;AACd,YAAI,WAAW,cAAc;AAI3B,cAAI,YAAY,UAAU,GAAG;AAC3B,mBAAO,eAAe,YAAY,cAAc;AAAA,cAC9C,cAAc;AAAA,YAChB,CAAC;AAAA,UACH,OAAO;AACL,mBAAO,eAAe,YAAY,cAAc;AAAA,cAC9C,cAAc;AAAA,cACd,UAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF;AAEA,YAAI,qBAAqB,IAAI,YAAY,GAAG;AAC1C,iBAAQ,WAAmB,YAAY,CAAC;AAAA,QAC1C;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,aAAS,iCAAiC,KAAK;AAC/C,UAAM;AAAA,EACR;AACF;AAYA,SAAS,YAAY,YAA0B;AAC7C,SAAO,SAAS,cAAc,SAAS;AACzC;","names":[]}
@@ -0,0 +1,92 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkDLLLH5HNjs = require('./chunk-DLLLH5HN.js');
4
+
5
+ // src/common/endowments/console.ts
6
+ var _utils = require('@metamask/utils');
7
+ var consoleAttenuatedMethods = /* @__PURE__ */ new Set([
8
+ "log",
9
+ "assert",
10
+ "error",
11
+ "debug",
12
+ "info",
13
+ "warn"
14
+ ]);
15
+ var consoleMethods = /* @__PURE__ */ new Set([
16
+ "debug",
17
+ "error",
18
+ "info",
19
+ "log",
20
+ "warn",
21
+ "dir",
22
+ "dirxml",
23
+ "table",
24
+ "trace",
25
+ "group",
26
+ "groupCollapsed",
27
+ "groupEnd",
28
+ "clear",
29
+ "count",
30
+ "countReset",
31
+ "assert",
32
+ "profile",
33
+ "profileEnd",
34
+ "time",
35
+ "timeLog",
36
+ "timeEnd",
37
+ "timeStamp",
38
+ "context"
39
+ ]);
40
+ var consoleFunctions = ["log", "error", "debug", "info", "warn"];
41
+ function getMessage(snapId, message, ...args) {
42
+ const prefix = `[Snap: ${snapId}]`;
43
+ if (typeof message === "string") {
44
+ return [`${prefix} ${message}`, ...args];
45
+ }
46
+ return [prefix, message, ...args];
47
+ }
48
+ function createConsole({ snapId } = {}) {
49
+ _utils.assert.call(void 0, snapId !== void 0);
50
+ const keys = Object.getOwnPropertyNames(
51
+ _chunkDLLLH5HNjs.rootRealmGlobal.console
52
+ );
53
+ const attenuatedConsole = keys.reduce((target, key) => {
54
+ if (consoleMethods.has(key) && !consoleAttenuatedMethods.has(key)) {
55
+ return { ...target, [key]: _chunkDLLLH5HNjs.rootRealmGlobal.console[key] };
56
+ }
57
+ return target;
58
+ }, {});
59
+ return harden({
60
+ console: {
61
+ ...attenuatedConsole,
62
+ assert: (value, message, ...optionalParams) => {
63
+ _chunkDLLLH5HNjs.rootRealmGlobal.console.assert(
64
+ value,
65
+ ...getMessage(snapId, message, ...optionalParams)
66
+ );
67
+ },
68
+ ...consoleFunctions.reduce((target, key) => {
69
+ return {
70
+ ...target,
71
+ [key]: (message, ...optionalParams) => {
72
+ _chunkDLLLH5HNjs.rootRealmGlobal.console[key](
73
+ ...getMessage(snapId, message, ...optionalParams)
74
+ );
75
+ }
76
+ };
77
+ }, {})
78
+ }
79
+ });
80
+ }
81
+ var endowmentModule = {
82
+ names: ["console"],
83
+ factory: createConsole
84
+ };
85
+ var console_default = endowmentModule;
86
+
87
+
88
+
89
+
90
+
91
+ exports.consoleAttenuatedMethods = consoleAttenuatedMethods; exports.consoleMethods = consoleMethods; exports.console_default = console_default;
92
+ //# sourceMappingURL=chunk-OBT45IWW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/endowments/console.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,cAAc;AAKhB,IAAM,2BAA2B,oBAAI,IAAI;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,iBAAiB,oBAAI,IAAI;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,mBAAmB,CAAC,OAAO,SAAS,SAAS,QAAQ,MAAM;AAejE,SAAS,WAAW,QAAgB,YAAqB,MAAiB;AACxE,QAAM,SAAS,UAAU,MAAM;AAI/B,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,GAAG,IAAI;AAAA,EACzC;AAIA,SAAO,CAAC,QAAQ,SAAS,GAAG,IAAI;AAClC;AAUA,SAAS,cAAc,EAAE,OAAO,IAA6B,CAAC,GAAG;AAC/D,SAAO,WAAW,MAAS;AAC3B,QAAM,OAAO,OAAO;AAAA,IAClB,gBAAgB;AAAA,EAClB;AAEA,QAAM,oBAAoB,KAAK,OAAO,CAAC,QAAQ,QAAQ;AACrD,QAAI,eAAe,IAAI,GAAG,KAAK,CAAC,yBAAyB,IAAI,GAAG,GAAG;AACjE,aAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,GAAG,gBAAgB,QAAQ,GAAG,EAAE;AAAA,IAC1D;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,SAAO,OAAO;AAAA,IACZ,SAAS;AAAA,MACP,GAAG;AAAA,MACH,QAAQ,CACN,OACA,YACG,mBACA;AACH,wBAAgB,QAAQ;AAAA,UACtB;AAAA,UACA,GAAG,WAAW,QAAQ,SAAS,GAAG,cAAc;AAAA,QAClD;AAAA,MACF;AAAA,MACA,GAAG,iBAAiB,OAAyB,CAAC,QAAQ,QAAQ;AAC5D,eAAO;AAAA,UACL,GAAG;AAAA,UACH,CAAC,GAAG,GAAG,CAAC,YAAsB,mBAA0B;AACtD,4BAAgB,QAAQ,GAAG;AAAA,cACzB,GAAG,WAAW,QAAQ,SAAS,GAAG,cAAc;AAAA,YAClD;AAAA,UACF;AAAA,QACF;AAAA,MACF,GAAG,CAAC,CAAqB;AAAA,IAC3B;AAAA,EACF,CAAC;AACH;AAEA,IAAM,kBAAkB;AAAA,EACtB,OAAO,CAAC,SAAS;AAAA,EACjB,SAAS;AACX;AAEA,IAAO,kBAAQ","sourcesContent":["import { assert } from '@metamask/utils';\n\nimport { rootRealmGlobal } from '../globalObject';\nimport type { EndowmentFactoryOptions } from './commonEndowmentFactory';\n\nexport const consoleAttenuatedMethods = new Set([\n 'log',\n 'assert',\n 'error',\n 'debug',\n 'info',\n 'warn',\n]);\n\n/**\n * A set of all the `console` values that will be passed to the snap. This has\n * all the values that are available in both the browser and Node.js.\n */\nexport const consoleMethods = new Set([\n 'debug',\n 'error',\n 'info',\n 'log',\n 'warn',\n 'dir',\n 'dirxml',\n 'table',\n 'trace',\n 'group',\n 'groupCollapsed',\n 'groupEnd',\n 'clear',\n 'count',\n 'countReset',\n 'assert',\n 'profile',\n 'profileEnd',\n 'time',\n 'timeLog',\n 'timeEnd',\n 'timeStamp',\n 'context',\n]);\n\nconst consoleFunctions = ['log', 'error', 'debug', 'info', 'warn'] as const;\n\ntype ConsoleFunctions = {\n [Key in (typeof consoleFunctions)[number]]: (typeof rootRealmGlobal.console)[Key];\n};\n\n/**\n * Gets the appropriate (prepended) message to pass to one of the attenuated\n * method calls.\n *\n * @param snapId - Id of the snap that we're getting a message for.\n * @param message - The id of the snap that will interact with the endowment.\n * @param args - The array of additional arguments.\n * @returns An array of arguments to be passed into an attenuated console method call.\n */\nfunction getMessage(snapId: string, message: unknown, ...args: unknown[]) {\n const prefix = `[Snap: ${snapId}]`;\n\n // If the first argument is a string, prepend the prefix to the message, and keep the\n // rest of the arguments as-is.\n if (typeof message === 'string') {\n return [`${prefix} ${message}`, ...args];\n }\n\n // Otherwise, the `message` is an object, array, etc., so add the prefix as a separate\n // message to the arguments.\n return [prefix, message, ...args];\n}\n\n/**\n * Create a a {@link console} object, with the same properties as the global\n * {@link console} object, but with some methods replaced.\n *\n * @param options - Factory options used in construction of the endowment.\n * @param options.snapId - The id of the snap that will interact with the endowment.\n * @returns The {@link console} object with the replaced methods.\n */\nfunction createConsole({ snapId }: EndowmentFactoryOptions = {}) {\n assert(snapId !== undefined);\n const keys = Object.getOwnPropertyNames(\n rootRealmGlobal.console,\n ) as (keyof typeof console)[];\n\n const attenuatedConsole = keys.reduce((target, key) => {\n if (consoleMethods.has(key) && !consoleAttenuatedMethods.has(key)) {\n return { ...target, [key]: rootRealmGlobal.console[key] };\n }\n\n return target;\n }, {});\n\n return harden({\n console: {\n ...attenuatedConsole,\n assert: (\n value: any,\n message?: string | undefined,\n ...optionalParams: any[]\n ) => {\n rootRealmGlobal.console.assert(\n value,\n ...getMessage(snapId, message, ...optionalParams),\n );\n },\n ...consoleFunctions.reduce<ConsoleFunctions>((target, key) => {\n return {\n ...target,\n [key]: (message?: unknown, ...optionalParams: any[]) => {\n rootRealmGlobal.console[key](\n ...getMessage(snapId, message, ...optionalParams),\n );\n },\n };\n }, {} as ConsoleFunctions),\n },\n });\n}\n\nconst endowmentModule = {\n names: ['console'] as const,\n factory: createConsole,\n};\n\nexport default endowmentModule;\n"]}
@@ -0,0 +1,51 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/common/lockdown/lockdown-more.ts
2
+ var _snapsutils = require('@metamask/snaps-utils');
3
+ function executeLockdownMore() {
4
+ try {
5
+ const namedIntrinsics = Reflect.ownKeys(new Compartment().globalThis);
6
+ const shouldHardenManually = /* @__PURE__ */ new Set(["eval", "Function"]);
7
+ const globalProperties = /* @__PURE__ */ new Set([
8
+ // universalPropertyNames is a constant added by lockdown to global scope
9
+ // at the time of writing, it is initialized in 'ses/src/whitelist'.
10
+ // These properties tend to be non-enumerable.
11
+ ...namedIntrinsics
12
+ // TODO: Also include the named platform globals
13
+ // This grabs every enumerable property on globalThis.
14
+ // ...Object.keys(globalThis),
15
+ ]);
16
+ globalProperties.forEach((propertyName) => {
17
+ const descriptor = Reflect.getOwnPropertyDescriptor(
18
+ globalThis,
19
+ propertyName
20
+ );
21
+ if (descriptor) {
22
+ if (descriptor.configurable) {
23
+ if (hasAccessor(descriptor)) {
24
+ Object.defineProperty(globalThis, propertyName, {
25
+ configurable: false
26
+ });
27
+ } else {
28
+ Object.defineProperty(globalThis, propertyName, {
29
+ configurable: false,
30
+ writable: false
31
+ });
32
+ }
33
+ }
34
+ if (shouldHardenManually.has(propertyName)) {
35
+ harden(globalThis[propertyName]);
36
+ }
37
+ }
38
+ });
39
+ } catch (error) {
40
+ _snapsutils.logError.call(void 0, "Protecting intrinsics failed:", error);
41
+ throw error;
42
+ }
43
+ }
44
+ function hasAccessor(descriptor) {
45
+ return "set" in descriptor || "get" in descriptor;
46
+ }
47
+
48
+
49
+
50
+ exports.executeLockdownMore = executeLockdownMore;
51
+ //# sourceMappingURL=chunk-OCNPLHS2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/lockdown/lockdown-more.ts"],"names":[],"mappings":";AAGA,SAAS,gBAAgB;AAsBlB,SAAS,sBAAsB;AAKpC,MAAI;AACF,UAAM,kBAAkB,QAAQ,QAAQ,IAAI,YAAY,EAAE,UAAU;AAGpE,UAAM,uBAAuB,oBAAI,IAAqB,CAAC,QAAQ,UAAU,CAAC;AAE1E,UAAM,mBAAmB,oBAAI,IAAI;AAAA;AAAA;AAAA;AAAA,MAI/B,GAAG;AAAA;AAAA;AAAA;AAAA,IAKL,CAAC;AAED,qBAAiB,QAAQ,CAAC,iBAAiB;AACzC,YAAM,aAAa,QAAQ;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAEA,UAAI,YAAY;AACd,YAAI,WAAW,cAAc;AAI3B,cAAI,YAAY,UAAU,GAAG;AAC3B,mBAAO,eAAe,YAAY,cAAc;AAAA,cAC9C,cAAc;AAAA,YAChB,CAAC;AAAA,UACH,OAAO;AACL,mBAAO,eAAe,YAAY,cAAc;AAAA,cAC9C,cAAc;AAAA,cACd,UAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF;AAEA,YAAI,qBAAqB,IAAI,YAAY,GAAG;AAC1C,iBAAQ,WAAmB,YAAY,CAAC;AAAA,QAC1C;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,aAAS,iCAAiC,KAAK;AAC/C,UAAM;AAAA,EACR;AACF;AAYA,SAAS,YAAY,YAA0B;AAC7C,SAAO,SAAS,cAAc,SAAS;AACzC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/triple-slash-reference, spaced-comment\n/// <reference path=\"../../../../../node_modules/ses/types.d.ts\" />\n\nimport { logError } from '@metamask/snaps-utils';\n\n/**\n * The SES `lockdown` function only hardens the properties enumerated by the\n * universalPropertyNames constant specified in 'ses/src/whitelist'. This\n * function makes all function and object properties on the start compartment\n * global non-configurable and non-writable, unless they are already\n * non-configurable.\n *\n * It is critical that this function runs at the right time during\n * initialization, which should always be immediately after `lockdown` has been\n * called. At the time of writing, the modifications this function makes to the\n * runtime environment appear to be non-breaking, but that could change with\n * the addition of dependencies, or the order of our scripts in our HTML files.\n * Exercise caution.\n *\n * See inline comments for implementation details.\n *\n * We write this function in IIFE format to avoid polluting global scope.\n *\n * @throws If the lockdown failed.\n */\nexport function executeLockdownMore() {\n // Make all \"object\" and \"function\" own properties of globalThis\n // non-configurable and non-writable, when possible.\n // We call a property that is non-configurable and non-writable,\n // \"non-modifiable\".\n try {\n const namedIntrinsics = Reflect.ownKeys(new Compartment().globalThis);\n\n // These named intrinsics are not automatically hardened by `lockdown`\n const shouldHardenManually = new Set<symbol | string>(['eval', 'Function']);\n\n const globalProperties = new Set([\n // universalPropertyNames is a constant added by lockdown to global scope\n // at the time of writing, it is initialized in 'ses/src/whitelist'.\n // These properties tend to be non-enumerable.\n ...namedIntrinsics,\n\n // TODO: Also include the named platform globals\n // This grabs every enumerable property on globalThis.\n // ...Object.keys(globalThis),\n ]);\n\n globalProperties.forEach((propertyName) => {\n const descriptor = Reflect.getOwnPropertyDescriptor(\n globalThis,\n propertyName,\n );\n\n if (descriptor) {\n if (descriptor.configurable) {\n // If the property on globalThis is configurable, make it\n // non-configurable. If it has no accessor properties, also make it\n // non-writable.\n if (hasAccessor(descriptor)) {\n Object.defineProperty(globalThis, propertyName, {\n configurable: false,\n });\n } else {\n Object.defineProperty(globalThis, propertyName, {\n configurable: false,\n writable: false,\n });\n }\n }\n\n if (shouldHardenManually.has(propertyName)) {\n harden((globalThis as any)[propertyName]);\n }\n }\n });\n } catch (error) {\n logError('Protecting intrinsics failed:', error);\n throw error;\n }\n}\n\n/**\n * Checks whether the given propertyName descriptor has any accessors, i.e. the\n * properties `get` or `set`.\n *\n * We want to make globals non-writable, and we can't set the `writable`\n * property and accessor properties at the same time.\n *\n * @param descriptor - The propertyName descriptor to check.\n * @returns Whether the propertyName descriptor has any accessors.\n */\nfunction hasAccessor(descriptor: any): boolean {\n return 'set' in descriptor || 'get' in descriptor;\n}\n"]}
@@ -0,0 +1,81 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+ var _chunkDFPM46ZFjs = require('./chunk-DFPM46ZF.js');
7
+
8
+ // src/common/commands.ts
9
+ var _snapsutils = require('@metamask/snaps-utils');
10
+ var _utils = require('@metamask/utils');
11
+ function getHandlerArguments(origin, handler, request) {
12
+ switch (handler) {
13
+ case _snapsutils.HandlerType.OnTransaction: {
14
+ _chunkDFPM46ZFjs.assertIsOnTransactionRequestArguments.call(void 0, request.params);
15
+ const { transaction, chainId, transactionOrigin } = request.params;
16
+ return {
17
+ transaction,
18
+ chainId,
19
+ transactionOrigin
20
+ };
21
+ }
22
+ case _snapsutils.HandlerType.OnSignature: {
23
+ _chunkDFPM46ZFjs.assertIsOnSignatureRequestArguments.call(void 0, request.params);
24
+ const { signature, signatureOrigin } = request.params;
25
+ return { signature, signatureOrigin };
26
+ }
27
+ case _snapsutils.HandlerType.OnNameLookup: {
28
+ _chunkDFPM46ZFjs.assertIsOnNameLookupRequestArguments.call(void 0, request.params);
29
+ const { chainId, domain, address } = request.params;
30
+ return domain ? {
31
+ chainId,
32
+ domain
33
+ } : {
34
+ chainId,
35
+ address
36
+ };
37
+ }
38
+ case _snapsutils.HandlerType.OnRpcRequest:
39
+ case _snapsutils.HandlerType.OnKeyringRequest:
40
+ return { origin, request };
41
+ case _snapsutils.HandlerType.OnCronjob:
42
+ case _snapsutils.HandlerType.OnInstall:
43
+ case _snapsutils.HandlerType.OnUpdate:
44
+ return { request };
45
+ case _snapsutils.HandlerType.OnHomePage:
46
+ return {};
47
+ case _snapsutils.HandlerType.OnUserInput: {
48
+ _chunkDFPM46ZFjs.assertIsOnUserInputRequestArguments.call(void 0, request.params);
49
+ const { id, event } = request.params;
50
+ return { id, event };
51
+ }
52
+ default:
53
+ return _utils.assertExhaustive.call(void 0, handler);
54
+ }
55
+ }
56
+ function getCommandMethodImplementations(startSnap, invokeSnap, onTerminate) {
57
+ return {
58
+ ping: async () => Promise.resolve("OK"),
59
+ terminate: async () => {
60
+ onTerminate();
61
+ return Promise.resolve("OK");
62
+ },
63
+ executeSnap: async (snapId, sourceCode, endowments) => {
64
+ await startSnap(snapId, sourceCode, endowments);
65
+ return "OK";
66
+ },
67
+ snapRpc: async (target, handler, origin, request) => {
68
+ return await invokeSnap(
69
+ target,
70
+ handler,
71
+ getHandlerArguments(origin, handler, request)
72
+ ) ?? null;
73
+ }
74
+ };
75
+ }
76
+
77
+
78
+
79
+
80
+ exports.getHandlerArguments = getHandlerArguments; exports.getCommandMethodImplementations = getCommandMethodImplementations;
81
+ //# sourceMappingURL=chunk-OLASO3O4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/commands.ts"],"names":[],"mappings":";;;;;;;;AAAA,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AAiC1B,SAAS,oBACd,QACA,SACA,SACgB;AAGhB,UAAQ,SAAS;AAAA,IACf,KAAK,YAAY,eAAe;AAC9B,4CAAsC,QAAQ,MAAM;AAEpD,YAAM,EAAE,aAAa,SAAS,kBAAkB,IAAI,QAAQ;AAC5D,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,YAAY,aAAa;AAC5B,0CAAoC,QAAQ,MAAM;AAElD,YAAM,EAAE,WAAW,gBAAgB,IAAI,QAAQ;AAC/C,aAAO,EAAE,WAAW,gBAAgB;AAAA,IACtC;AAAA,IACA,KAAK,YAAY,cAAc;AAC7B,2CAAqC,QAAQ,MAAM;AAInD,YAAM,EAAE,SAAS,QAAQ,QAAQ,IAC/B,QAAQ;AAEV,aAAO,SACH;AAAA,QACE;AAAA,QACA;AAAA,MACF,IACA;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,IACN;AAAA,IACA,KAAK,YAAY;AAAA,IACjB,KAAK,YAAY;AACf,aAAO,EAAE,QAAQ,QAAQ;AAAA,IAE3B,KAAK,YAAY;AAAA,IACjB,KAAK,YAAY;AAAA,IACjB,KAAK,YAAY;AACf,aAAO,EAAE,QAAQ;AAAA,IAEnB,KAAK,YAAY;AACf,aAAO,CAAC;AAAA,IACV,KAAK,YAAY,aAAa;AAC5B,0CAAoC,QAAQ,MAAM;AAElD,YAAM,EAAE,IAAI,MAAM,IAAI,QAAQ;AAC9B,aAAO,EAAE,IAAI,MAAM;AAAA,IACrB;AAAA,IAEA;AACE,aAAO,iBAAiB,OAAO;AAAA,EACnC;AACF;AAaO,SAAS,gCACd,WACA,YACA,aACuB;AACvB,SAAO;AAAA,IACL,MAAM,YAAY,QAAQ,QAAQ,IAAI;AAAA,IACtC,WAAW,YAAY;AACrB,kBAAY;AACZ,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC7B;AAAA,IAEA,aAAa,OAAO,QAAQ,YAAY,eAAe;AACrD,YAAM,UAAU,QAAQ,YAAY,UAAU;AAC9C,aAAO;AAAA,IACT;AAAA,IAEA,SAAS,OAAO,QAAQ,SAAS,QAAQ,YAAY;AACnD,aACG,MAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA,oBAAoB,QAAQ,SAAS,OAAO;AAAA,MAC9C,KAAM;AAAA,IAEV;AAAA,EACF;AACF","sourcesContent":["import { HandlerType } from '@metamask/snaps-utils';\nimport { assertExhaustive } from '@metamask/utils';\n\nimport type { InvokeSnap, InvokeSnapArgs } from './BaseSnapExecutor';\nimport type {\n ExecuteSnap,\n JsonRpcRequestWithoutId,\n Ping,\n PossibleLookupRequestArgs,\n SnapRpc,\n Terminate,\n} from './validation';\nimport {\n assertIsOnTransactionRequestArguments,\n assertIsOnSignatureRequestArguments,\n assertIsOnNameLookupRequestArguments,\n assertIsOnUserInputRequestArguments,\n} from './validation';\n\nexport type CommandMethodsMapping = {\n ping: Ping;\n terminate: Terminate;\n executeSnap: ExecuteSnap;\n snapRpc: SnapRpc;\n};\n\n/**\n * Formats the arguments for the given handler.\n *\n * @param origin - The origin of the request.\n * @param handler - The handler to pass the request to.\n * @param request - The request object.\n * @returns The formatted arguments.\n */\nexport function getHandlerArguments(\n origin: string,\n handler: HandlerType,\n request: JsonRpcRequestWithoutId,\n): InvokeSnapArgs {\n // `request` is already validated by the time this function is called.\n\n switch (handler) {\n case HandlerType.OnTransaction: {\n assertIsOnTransactionRequestArguments(request.params);\n\n const { transaction, chainId, transactionOrigin } = request.params;\n return {\n transaction,\n chainId,\n transactionOrigin,\n };\n }\n case HandlerType.OnSignature: {\n assertIsOnSignatureRequestArguments(request.params);\n\n const { signature, signatureOrigin } = request.params;\n return { signature, signatureOrigin };\n }\n case HandlerType.OnNameLookup: {\n assertIsOnNameLookupRequestArguments(request.params);\n\n // TS complains that domain/address are not part of the type\n // casting here as we've already validated the request args in the above step.\n const { chainId, domain, address } =\n request.params as unknown as PossibleLookupRequestArgs;\n\n return domain\n ? {\n chainId,\n domain,\n }\n : {\n chainId,\n address,\n };\n }\n case HandlerType.OnRpcRequest:\n case HandlerType.OnKeyringRequest:\n return { origin, request };\n\n case HandlerType.OnCronjob:\n case HandlerType.OnInstall:\n case HandlerType.OnUpdate:\n return { request };\n\n case HandlerType.OnHomePage:\n return {};\n case HandlerType.OnUserInput: {\n assertIsOnUserInputRequestArguments(request.params);\n\n const { id, event } = request.params;\n return { id, event };\n }\n\n default:\n return assertExhaustive(handler);\n }\n}\n\n/**\n * Gets an object mapping internal, \"command\" JSON-RPC method names to their\n * implementations.\n *\n * @param startSnap - A function that starts a snap.\n * @param invokeSnap - A function that invokes the RPC method handler of a\n * snap.\n * @param onTerminate - A function that will be called when this executor is\n * terminated in order to handle cleanup tasks.\n * @returns An object containing the \"command\" method implementations.\n */\nexport function getCommandMethodImplementations(\n startSnap: (...args: Parameters<ExecuteSnap>) => Promise<void>,\n invokeSnap: InvokeSnap,\n onTerminate: () => void,\n): CommandMethodsMapping {\n return {\n ping: async () => Promise.resolve('OK'),\n terminate: async () => {\n onTerminate();\n return Promise.resolve('OK');\n },\n\n executeSnap: async (snapId, sourceCode, endowments) => {\n await startSnap(snapId, sourceCode, endowments);\n return 'OK';\n },\n\n snapRpc: async (target, handler, origin, request) => {\n return (\n (await invokeSnap(\n target,\n handler,\n getHandlerArguments(origin, handler, request),\n )) ?? null\n );\n },\n };\n}\n"]}
@@ -0,0 +1,147 @@
1
+ import {
2
+ log
3
+ } from "./chunk-5DEV3QQU.mjs";
4
+
5
+ // src/common/utils.ts
6
+ import { rpcErrors } from "@metamask/rpc-errors";
7
+ import {
8
+ assert,
9
+ assertStruct,
10
+ getJsonSize,
11
+ getSafeJson,
12
+ isObject,
13
+ JsonStruct
14
+ } from "@metamask/utils";
15
+ var MAX_RESPONSE_JSON_SIZE = 64e6;
16
+ async function withTeardown(originalPromise, teardownRef) {
17
+ const myTeardown = teardownRef.lastTeardown;
18
+ return new Promise((resolve, reject) => {
19
+ originalPromise.then((value) => {
20
+ if (teardownRef.lastTeardown === myTeardown) {
21
+ resolve(value);
22
+ } else {
23
+ log(
24
+ "Late promise received after Snap finished execution. Promise will be dropped."
25
+ );
26
+ }
27
+ }).catch((reason) => {
28
+ if (teardownRef.lastTeardown === myTeardown) {
29
+ reject(reason);
30
+ } else {
31
+ log(
32
+ "Late promise received after Snap finished execution. Promise will be dropped."
33
+ );
34
+ }
35
+ });
36
+ });
37
+ }
38
+ function proxyStreamProvider(provider, request) {
39
+ const proxy = new Proxy(
40
+ {},
41
+ {
42
+ has(_target, prop) {
43
+ return typeof prop === "string" && ["request", "on", "removeListener"].includes(prop);
44
+ },
45
+ get(_target, prop) {
46
+ if (prop === "request") {
47
+ return request;
48
+ } else if (["on", "removeListener"].includes(prop)) {
49
+ return provider[prop];
50
+ }
51
+ return void 0;
52
+ }
53
+ }
54
+ );
55
+ return proxy;
56
+ }
57
+ var BLOCKED_RPC_METHODS = Object.freeze([
58
+ "wallet_requestSnaps",
59
+ "wallet_requestPermissions",
60
+ "wallet_revokePermissions",
61
+ // We disallow all of these confirmations for now, since the screens are not ready for Snaps.
62
+ "eth_sendRawTransaction",
63
+ "eth_sendTransaction",
64
+ "eth_sign",
65
+ "eth_signTypedData",
66
+ "eth_signTypedData_v1",
67
+ "eth_signTypedData_v3",
68
+ "eth_signTypedData_v4",
69
+ "eth_decrypt",
70
+ "eth_getEncryptionPublicKey",
71
+ "wallet_addEthereumChain",
72
+ "wallet_switchEthereumChain",
73
+ "wallet_watchAsset",
74
+ "wallet_registerOnboarding",
75
+ "wallet_scanQRCode"
76
+ ]);
77
+ function assertSnapOutboundRequest(args) {
78
+ assert(
79
+ String.prototype.startsWith.call(args.method, "wallet_") || String.prototype.startsWith.call(args.method, "snap_"),
80
+ "The global Snap API only allows RPC methods starting with `wallet_*` and `snap_*`.",
81
+ rpcErrors.methodNotSupported
82
+ );
83
+ assert(
84
+ !BLOCKED_RPC_METHODS.includes(args.method),
85
+ rpcErrors.methodNotFound({
86
+ data: {
87
+ method: args.method
88
+ }
89
+ })
90
+ );
91
+ assertStruct(
92
+ args,
93
+ JsonStruct,
94
+ "Provided value is not JSON-RPC compatible",
95
+ rpcErrors.invalidParams
96
+ );
97
+ }
98
+ function assertEthereumOutboundRequest(args) {
99
+ assert(
100
+ !String.prototype.startsWith.call(args.method, "snap_"),
101
+ rpcErrors.methodNotFound({
102
+ data: {
103
+ method: args.method
104
+ }
105
+ })
106
+ );
107
+ assert(
108
+ !BLOCKED_RPC_METHODS.includes(args.method),
109
+ rpcErrors.methodNotFound({
110
+ data: {
111
+ method: args.method
112
+ }
113
+ })
114
+ );
115
+ assertStruct(
116
+ args,
117
+ JsonStruct,
118
+ "Provided value is not JSON-RPC compatible",
119
+ rpcErrors.invalidParams
120
+ );
121
+ }
122
+ function sanitizeRequestArguments(value) {
123
+ const json = JSON.parse(JSON.stringify(value));
124
+ return getSafeJson(json);
125
+ }
126
+ function isValidResponse(response) {
127
+ if (!isObject(response)) {
128
+ return false;
129
+ }
130
+ try {
131
+ const size = getJsonSize(response);
132
+ return size < MAX_RESPONSE_JSON_SIZE;
133
+ } catch {
134
+ return false;
135
+ }
136
+ }
137
+
138
+ export {
139
+ withTeardown,
140
+ proxyStreamProvider,
141
+ BLOCKED_RPC_METHODS,
142
+ assertSnapOutboundRequest,
143
+ assertEthereumOutboundRequest,
144
+ sanitizeRequestArguments,
145
+ isValidResponse
146
+ };
147
+ //# sourceMappingURL=chunk-PTCQ2I47.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/utils.ts"],"sourcesContent":["import type { StreamProvider } from '@metamask/providers';\nimport type { RequestArguments } from '@metamask/providers/dist/BaseProvider';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport {\n assert,\n assertStruct,\n getJsonSize,\n getSafeJson,\n isObject,\n JsonStruct,\n} from '@metamask/utils';\n\nimport { log } from '../logging';\n\n// 64 MB - we chose this number because it is the size limit for postMessage\n// between the extension and the dapp enforced by Chrome.\nconst MAX_RESPONSE_JSON_SIZE = 64_000_000;\n\n/**\n * Make proxy for Promise and handle the teardown process properly.\n * If the teardown is called in the meanwhile, Promise result will not be\n * exposed to the snap anymore and warning will be logged to the console.\n *\n * @param originalPromise - Original promise.\n * @param teardownRef - Reference containing teardown count.\n * @param teardownRef.lastTeardown - Number of the last teardown.\n * @returns New proxy promise.\n */\nexport async function withTeardown<Type>(\n originalPromise: Promise<Type>,\n teardownRef: { lastTeardown: number },\n): Promise<Type> {\n const myTeardown = teardownRef.lastTeardown;\n return new Promise<Type>((resolve, reject) => {\n originalPromise\n .then((value) => {\n if (teardownRef.lastTeardown === myTeardown) {\n resolve(value);\n } else {\n log(\n 'Late promise received after Snap finished execution. Promise will be dropped.',\n );\n }\n })\n .catch((reason) => {\n if (teardownRef.lastTeardown === myTeardown) {\n reject(reason);\n } else {\n log(\n 'Late promise received after Snap finished execution. Promise will be dropped.',\n );\n }\n });\n });\n}\n\n/**\n * Returns a Proxy that narrows down (attenuates) the fields available on\n * the StreamProvider and replaces the request implementation.\n *\n * @param provider - Instance of a StreamProvider to be limited.\n * @param request - Custom attenuated request object.\n * @returns Proxy to the StreamProvider instance.\n */\nexport function proxyStreamProvider(\n provider: StreamProvider,\n request: unknown,\n): StreamProvider {\n // Proxy target is intentionally set to be an empty object, to ensure\n // that access to the prototype chain is not possible.\n const proxy = new Proxy(\n {},\n {\n has(_target: object, prop: string | symbol) {\n return (\n typeof prop === 'string' &&\n ['request', 'on', 'removeListener'].includes(prop)\n );\n },\n get(_target, prop: keyof StreamProvider) {\n if (prop === 'request') {\n return request;\n } else if (['on', 'removeListener'].includes(prop)) {\n return provider[prop];\n }\n\n return undefined;\n },\n },\n );\n\n return proxy as StreamProvider;\n}\n\n// We're blocking these RPC methods for v1, will revisit later.\nexport const BLOCKED_RPC_METHODS = Object.freeze([\n 'wallet_requestSnaps',\n 'wallet_requestPermissions',\n 'wallet_revokePermissions',\n // We disallow all of these confirmations for now, since the screens are not ready for Snaps.\n 'eth_sendRawTransaction',\n 'eth_sendTransaction',\n 'eth_sign',\n 'eth_signTypedData',\n 'eth_signTypedData_v1',\n 'eth_signTypedData_v3',\n 'eth_signTypedData_v4',\n 'eth_decrypt',\n 'eth_getEncryptionPublicKey',\n 'wallet_addEthereumChain',\n 'wallet_switchEthereumChain',\n 'wallet_watchAsset',\n 'wallet_registerOnboarding',\n 'wallet_scanQRCode',\n]);\n\n/**\n * Asserts the validity of request arguments for a snap outbound request using the `snap.request` API.\n *\n * @param args - The arguments to validate.\n */\nexport function assertSnapOutboundRequest(args: RequestArguments) {\n // Disallow any non `wallet_` or `snap_` methods for separation of concerns.\n assert(\n String.prototype.startsWith.call(args.method, 'wallet_') ||\n String.prototype.startsWith.call(args.method, 'snap_'),\n 'The global Snap API only allows RPC methods starting with `wallet_*` and `snap_*`.',\n rpcErrors.methodNotSupported,\n );\n assert(\n !BLOCKED_RPC_METHODS.includes(args.method),\n rpcErrors.methodNotFound({\n data: {\n method: args.method,\n },\n }),\n );\n assertStruct(\n args,\n JsonStruct,\n 'Provided value is not JSON-RPC compatible',\n rpcErrors.invalidParams,\n );\n}\n\n/**\n * Asserts the validity of request arguments for an ethereum outbound request using the `ethereum.request` API.\n *\n * @param args - The arguments to validate.\n */\nexport function assertEthereumOutboundRequest(args: RequestArguments) {\n // Disallow snaps methods for separation of concerns.\n assert(\n !String.prototype.startsWith.call(args.method, 'snap_'),\n rpcErrors.methodNotFound({\n data: {\n method: args.method,\n },\n }),\n );\n assert(\n !BLOCKED_RPC_METHODS.includes(args.method),\n rpcErrors.methodNotFound({\n data: {\n method: args.method,\n },\n }),\n );\n assertStruct(\n args,\n JsonStruct,\n 'Provided value is not JSON-RPC compatible',\n rpcErrors.invalidParams,\n );\n}\n\n/**\n * Gets a sanitized value to be used for passing to the underlying MetaMask provider.\n *\n * @param value - An unsanitized value from a snap.\n * @returns A sanitized value ready to be passed to a MetaMask provider.\n */\nexport function sanitizeRequestArguments(value: unknown): RequestArguments {\n // Before passing to getSafeJson we run the value through JSON serialization.\n // This lets request arguments contain undefined which is normally disallowed.\n const json = JSON.parse(JSON.stringify(value));\n return getSafeJson(json) as RequestArguments;\n}\n\n/**\n * Check if the input is a valid response.\n *\n * @param response - The response.\n * @returns True if the response is valid, otherwise false.\n */\nexport function isValidResponse(response: Record<string, unknown>) {\n if (!isObject(response)) {\n return false;\n }\n\n try {\n // If the JSON is invalid this will throw and we should return false.\n const size = getJsonSize(response);\n return size < MAX_RESPONSE_JSON_SIZE;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;;AAEA,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMP,IAAM,yBAAyB;AAY/B,eAAsB,aACpB,iBACA,aACe;AACf,QAAM,aAAa,YAAY;AAC/B,SAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,oBACG,KAAK,CAAC,UAAU;AACf,UAAI,YAAY,iBAAiB,YAAY;AAC3C,gBAAQ,KAAK;AAAA,MACf,OAAO;AACL;AAAA,UACE;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC,EACA,MAAM,CAAC,WAAW;AACjB,UAAI,YAAY,iBAAiB,YAAY;AAC3C,eAAO,MAAM;AAAA,MACf,OAAO;AACL;AAAA,UACE;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACL,CAAC;AACH;AAUO,SAAS,oBACd,UACA,SACgB;AAGhB,QAAM,QAAQ,IAAI;AAAA,IAChB,CAAC;AAAA,IACD;AAAA,MACE,IAAI,SAAiB,MAAuB;AAC1C,eACE,OAAO,SAAS,YAChB,CAAC,WAAW,MAAM,gBAAgB,EAAE,SAAS,IAAI;AAAA,MAErD;AAAA,MACA,IAAI,SAAS,MAA4B;AACvC,YAAI,SAAS,WAAW;AACtB,iBAAO;AAAA,QACT,WAAW,CAAC,MAAM,gBAAgB,EAAE,SAAS,IAAI,GAAG;AAClD,iBAAO,SAAS,IAAI;AAAA,QACtB;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAGO,IAAM,sBAAsB,OAAO,OAAO;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAOM,SAAS,0BAA0B,MAAwB;AAEhE;AAAA,IACE,OAAO,UAAU,WAAW,KAAK,KAAK,QAAQ,SAAS,KACrD,OAAO,UAAU,WAAW,KAAK,KAAK,QAAQ,OAAO;AAAA,IACvD;AAAA,IACA,UAAU;AAAA,EACZ;AACA;AAAA,IACE,CAAC,oBAAoB,SAAS,KAAK,MAAM;AAAA,IACzC,UAAU,eAAe;AAAA,MACvB,MAAM;AAAA,QACJ,QAAQ,KAAK;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAOO,SAAS,8BAA8B,MAAwB;AAEpE;AAAA,IACE,CAAC,OAAO,UAAU,WAAW,KAAK,KAAK,QAAQ,OAAO;AAAA,IACtD,UAAU,eAAe;AAAA,MACvB,MAAM;AAAA,QACJ,QAAQ,KAAK;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AACA;AAAA,IACE,CAAC,oBAAoB,SAAS,KAAK,MAAM;AAAA,IACzC,UAAU,eAAe;AAAA,MACvB,MAAM;AAAA,QACJ,QAAQ,KAAK;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAQO,SAAS,yBAAyB,OAAkC;AAGzE,QAAM,OAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAC7C,SAAO,YAAY,IAAI;AACzB;AAQO,SAAS,gBAAgB,UAAmC;AACjE,MAAI,CAAC,SAAS,QAAQ,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,MAAI;AAEF,UAAM,OAAO,YAAY,QAAQ;AACjC,WAAO,OAAO;AAAA,EAChB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,32 @@
1
+ import {
2
+ rootRealmGlobal
3
+ } from "./chunk-IX5S3V47.mjs";
4
+ import {
5
+ __require
6
+ } from "./chunk-YRZVIDCF.mjs";
7
+
8
+ // src/common/endowments/crypto.ts
9
+ var createCrypto = () => {
10
+ if ("crypto" in rootRealmGlobal && typeof rootRealmGlobal.crypto === "object" && "SubtleCrypto" in rootRealmGlobal && typeof rootRealmGlobal.SubtleCrypto === "function") {
11
+ return {
12
+ crypto: harden(rootRealmGlobal.crypto),
13
+ SubtleCrypto: harden(rootRealmGlobal.SubtleCrypto)
14
+ };
15
+ }
16
+ const crypto = __require("crypto").webcrypto;
17
+ return {
18
+ crypto: harden(crypto),
19
+ SubtleCrypto: harden(crypto.subtle.constructor)
20
+ };
21
+ };
22
+ var endowmentModule = {
23
+ names: ["crypto", "SubtleCrypto"],
24
+ factory: createCrypto
25
+ };
26
+ var crypto_default = endowmentModule;
27
+
28
+ export {
29
+ createCrypto,
30
+ crypto_default
31
+ };
32
+ //# sourceMappingURL=chunk-Q42NNJFY.mjs.map