@metamask/snaps-utils 6.1.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/dist/array.js +8 -0
  3. package/dist/array.js.map +1 -0
  4. package/dist/array.mjs +8 -0
  5. package/dist/array.mjs.map +1 -0
  6. package/dist/auxiliary-files.js +12 -0
  7. package/dist/auxiliary-files.js.map +1 -0
  8. package/dist/auxiliary-files.mjs +12 -0
  9. package/dist/auxiliary-files.mjs.map +1 -0
  10. package/dist/base64.js +13 -0
  11. package/dist/base64.js.map +1 -0
  12. package/dist/base64.mjs +13 -0
  13. package/dist/base64.mjs.map +1 -0
  14. package/dist/bytes.js +10 -0
  15. package/dist/bytes.js.map +1 -0
  16. package/dist/bytes.mjs +10 -0
  17. package/dist/bytes.mjs.map +1 -0
  18. package/dist/caveats.js +8 -0
  19. package/dist/caveats.js.map +1 -0
  20. package/dist/caveats.mjs +8 -0
  21. package/dist/caveats.mjs.map +1 -0
  22. package/dist/checksum.js +13 -0
  23. package/dist/checksum.js.map +1 -0
  24. package/dist/checksum.mjs +13 -0
  25. package/dist/checksum.mjs.map +1 -0
  26. package/dist/chunk-224S5XKL.js +32 -0
  27. package/dist/chunk-224S5XKL.js.map +1 -0
  28. package/dist/chunk-2G4HD42C.mjs +22 -0
  29. package/dist/chunk-2G4HD42C.mjs.map +1 -0
  30. package/dist/chunk-2IVFF3AA.mjs +211 -0
  31. package/dist/chunk-2IVFF3AA.mjs.map +1 -0
  32. package/dist/chunk-2QS3W66J.js +64 -0
  33. package/dist/chunk-2QS3W66J.js.map +1 -0
  34. package/dist/chunk-2XF32FCF.js +1 -0
  35. package/dist/chunk-2XF32FCF.js.map +1 -0
  36. package/dist/chunk-32B4YQM7.mjs +103 -0
  37. package/dist/chunk-32B4YQM7.mjs.map +1 -0
  38. package/dist/chunk-3SARO5TJ.mjs +18 -0
  39. package/dist/chunk-3SARO5TJ.mjs.map +1 -0
  40. package/dist/chunk-3TH3NLQL.js +169 -0
  41. package/dist/chunk-3TH3NLQL.js.map +1 -0
  42. package/dist/chunk-3ZSMMNQB.mjs +41 -0
  43. package/dist/chunk-3ZSMMNQB.mjs.map +1 -0
  44. package/dist/chunk-43EBXDVP.mjs +30 -0
  45. package/dist/chunk-43EBXDVP.mjs.map +1 -0
  46. package/dist/chunk-4GBOSMF7.mjs +33 -0
  47. package/dist/chunk-4GBOSMF7.mjs.map +1 -0
  48. package/dist/chunk-4IKNNAVC.mjs +30 -0
  49. package/dist/chunk-4IKNNAVC.mjs.map +1 -0
  50. package/dist/chunk-4UMDRHDR.js +95 -0
  51. package/dist/chunk-4UMDRHDR.js.map +1 -0
  52. package/dist/chunk-6CTV7VW5.mjs +20 -0
  53. package/dist/chunk-6CTV7VW5.mjs.map +1 -0
  54. package/dist/chunk-6H32HLTZ.js +10 -0
  55. package/dist/chunk-6H32HLTZ.js.map +1 -0
  56. package/dist/chunk-6WBLB5BX.js +9 -0
  57. package/dist/chunk-6WBLB5BX.js.map +1 -0
  58. package/dist/chunk-7H5TGXZ5.js +70 -0
  59. package/dist/chunk-7H5TGXZ5.js.map +1 -0
  60. package/dist/chunk-7KKLGQNE.js +38 -0
  61. package/dist/chunk-7KKLGQNE.js.map +1 -0
  62. package/dist/chunk-7PNGOFLU.js +22 -0
  63. package/dist/chunk-7PNGOFLU.js.map +1 -0
  64. package/dist/chunk-7T3N2ZGQ.mjs +107 -0
  65. package/dist/chunk-7T3N2ZGQ.mjs.map +1 -0
  66. package/dist/chunk-7XA5VYYV.mjs +9 -0
  67. package/dist/chunk-7XA5VYYV.mjs.map +1 -0
  68. package/dist/chunk-B2DMAQNK.mjs +8 -0
  69. package/dist/chunk-B2DMAQNK.mjs.map +1 -0
  70. package/dist/chunk-B3YQVRPE.js +107 -0
  71. package/dist/chunk-B3YQVRPE.js.map +1 -0
  72. package/dist/chunk-DK3IYVMP.mjs +1 -0
  73. package/dist/chunk-DK3IYVMP.mjs.map +1 -0
  74. package/dist/chunk-DKSB4FMW.mjs +74 -0
  75. package/dist/chunk-DKSB4FMW.mjs.map +1 -0
  76. package/dist/chunk-F33RMB76.js +69 -0
  77. package/dist/chunk-F33RMB76.js.map +1 -0
  78. package/dist/chunk-FJH6DDEL.mjs +193 -0
  79. package/dist/chunk-FJH6DDEL.mjs.map +1 -0
  80. package/dist/chunk-FTY3BOF7.js +9 -0
  81. package/dist/chunk-FTY3BOF7.js.map +1 -0
  82. package/dist/chunk-GK4IJQVW.js +409 -0
  83. package/dist/chunk-GK4IJQVW.js.map +1 -0
  84. package/dist/chunk-GMC2A3D7.js +211 -0
  85. package/dist/chunk-GMC2A3D7.js.map +1 -0
  86. package/dist/chunk-GW5NQXN4.mjs +151 -0
  87. package/dist/chunk-GW5NQXN4.mjs.map +1 -0
  88. package/dist/chunk-H34N3OWO.mjs +169 -0
  89. package/dist/chunk-H34N3OWO.mjs.map +1 -0
  90. package/dist/chunk-H636DAOG.js +193 -0
  91. package/dist/chunk-H636DAOG.js.map +1 -0
  92. package/dist/chunk-HOTDTMNP.mjs +21 -0
  93. package/dist/chunk-HOTDTMNP.mjs.map +1 -0
  94. package/dist/chunk-HWFLO7W5.mjs +281 -0
  95. package/dist/chunk-HWFLO7W5.mjs.map +1 -0
  96. package/dist/chunk-I3BUOULW.js +18 -0
  97. package/dist/chunk-I3BUOULW.js.map +1 -0
  98. package/dist/chunk-IIDK6BRC.mjs +1 -0
  99. package/dist/chunk-IIDK6BRC.mjs.map +1 -0
  100. package/dist/chunk-IUNNN6HN.mjs +29 -0
  101. package/dist/chunk-IUNNN6HN.mjs.map +1 -0
  102. package/dist/chunk-IWENO6LT.js +20 -0
  103. package/dist/chunk-IWENO6LT.js.map +1 -0
  104. package/dist/chunk-JGMGNLZW.mjs +38 -0
  105. package/dist/chunk-JGMGNLZW.mjs.map +1 -0
  106. package/dist/chunk-JV7OA3FD.js +1 -0
  107. package/dist/chunk-JV7OA3FD.js.map +1 -0
  108. package/dist/chunk-KEXZDQAN.js +50 -0
  109. package/dist/chunk-KEXZDQAN.js.map +1 -0
  110. package/dist/chunk-KWQKGJSV.js +152 -0
  111. package/dist/chunk-KWQKGJSV.js.map +1 -0
  112. package/dist/chunk-LEFOMYX3.mjs +1 -0
  113. package/dist/chunk-LEFOMYX3.mjs.map +1 -0
  114. package/dist/chunk-LHIPBIPS.mjs +32 -0
  115. package/dist/chunk-LHIPBIPS.mjs.map +1 -0
  116. package/dist/chunk-LOW2T4MV.mjs +50 -0
  117. package/dist/chunk-LOW2T4MV.mjs.map +1 -0
  118. package/dist/chunk-MJABESWH.js +20 -0
  119. package/dist/chunk-MJABESWH.js.map +1 -0
  120. package/dist/chunk-MSUZTHYT.js +9 -0
  121. package/dist/chunk-MSUZTHYT.js.map +1 -0
  122. package/dist/chunk-MYSBDK36.mjs +1 -0
  123. package/dist/chunk-MYSBDK36.mjs.map +1 -0
  124. package/dist/chunk-N52KMB25.mjs +109 -0
  125. package/dist/chunk-N52KMB25.mjs.map +1 -0
  126. package/dist/chunk-O3XKEEJV.mjs +249 -0
  127. package/dist/chunk-O3XKEEJV.mjs.map +1 -0
  128. package/dist/chunk-O4PW77JW.mjs +1 -0
  129. package/dist/chunk-O4PW77JW.mjs.map +1 -0
  130. package/dist/chunk-OQSLMZJN.js +281 -0
  131. package/dist/chunk-OQSLMZJN.js.map +1 -0
  132. package/dist/chunk-P5V6S2PA.mjs +69 -0
  133. package/dist/chunk-P5V6S2PA.mjs.map +1 -0
  134. package/dist/chunk-PHUTP7NB.js +25 -0
  135. package/dist/chunk-PHUTP7NB.js.map +1 -0
  136. package/dist/chunk-Q5T57UNN.js +1 -0
  137. package/dist/chunk-Q5T57UNN.js.map +1 -0
  138. package/dist/chunk-Q7FGULTV.js +8 -0
  139. package/dist/chunk-Q7FGULTV.js.map +1 -0
  140. package/dist/chunk-QF3LHIJ5.mjs +9 -0
  141. package/dist/chunk-QF3LHIJ5.mjs.map +1 -0
  142. package/dist/chunk-QJTAFTW7.js +30 -0
  143. package/dist/chunk-QJTAFTW7.js.map +1 -0
  144. package/dist/chunk-QWEXXUTO.mjs +10 -0
  145. package/dist/chunk-QWEXXUTO.mjs.map +1 -0
  146. package/dist/chunk-QYFDFOWT.js +41 -0
  147. package/dist/chunk-QYFDFOWT.js.map +1 -0
  148. package/dist/chunk-R4BBIGBN.js +18 -0
  149. package/dist/chunk-R4BBIGBN.js.map +1 -0
  150. package/dist/chunk-R7UAMO2U.js +21 -0
  151. package/dist/chunk-R7UAMO2U.js.map +1 -0
  152. package/dist/chunk-RRPU7M4Y.js +29 -0
  153. package/dist/chunk-RRPU7M4Y.js.map +1 -0
  154. package/dist/chunk-RS5HE55U.js +109 -0
  155. package/dist/chunk-RS5HE55U.js.map +1 -0
  156. package/dist/chunk-TUAHXE75.mjs +21 -0
  157. package/dist/chunk-TUAHXE75.mjs.map +1 -0
  158. package/dist/chunk-TURGGK5F.mjs +59 -0
  159. package/dist/chunk-TURGGK5F.mjs.map +1 -0
  160. package/dist/chunk-UGQQ5DJ4.mjs +50 -0
  161. package/dist/chunk-UGQQ5DJ4.mjs.map +1 -0
  162. package/dist/chunk-VGWELVCX.mjs +18 -0
  163. package/dist/chunk-VGWELVCX.mjs.map +1 -0
  164. package/dist/chunk-VMUXXXJC.js +103 -0
  165. package/dist/chunk-VMUXXXJC.js.map +1 -0
  166. package/dist/chunk-WDGBH5CP.js +249 -0
  167. package/dist/chunk-WDGBH5CP.js.map +1 -0
  168. package/dist/chunk-WJOAEPZ7.js +30 -0
  169. package/dist/chunk-WJOAEPZ7.js.map +1 -0
  170. package/dist/chunk-XC5E26VE.mjs +20 -0
  171. package/dist/chunk-XC5E26VE.mjs.map +1 -0
  172. package/dist/chunk-XDEHYKW2.js +1 -0
  173. package/dist/chunk-XDEHYKW2.js.map +1 -0
  174. package/dist/chunk-XEY3KVEH.js +21 -0
  175. package/dist/chunk-XEY3KVEH.js.map +1 -0
  176. package/dist/chunk-XKXHM3PC.mjs +9 -0
  177. package/dist/chunk-XKXHM3PC.mjs.map +1 -0
  178. package/dist/chunk-XRGYWWT7.js +151 -0
  179. package/dist/chunk-XRGYWWT7.js.map +1 -0
  180. package/dist/chunk-XWFKTDB3.js +50 -0
  181. package/dist/chunk-XWFKTDB3.js.map +1 -0
  182. package/dist/chunk-Y3F7VUZB.mjs +409 -0
  183. package/dist/chunk-Y3F7VUZB.mjs.map +1 -0
  184. package/dist/chunk-YF4PGFCO.js +1 -0
  185. package/dist/chunk-YF4PGFCO.js.map +1 -0
  186. package/dist/chunk-YLT6CNSL.mjs +64 -0
  187. package/dist/chunk-YLT6CNSL.mjs.map +1 -0
  188. package/dist/chunk-Z4J4GUGG.mjs +152 -0
  189. package/dist/chunk-Z4J4GUGG.mjs.map +1 -0
  190. package/dist/chunk-ZLFA4R5X.js +56 -0
  191. package/dist/chunk-ZLFA4R5X.js.map +1 -0
  192. package/dist/chunk-ZRVOIW3H.js +74 -0
  193. package/dist/chunk-ZRVOIW3H.js.map +1 -0
  194. package/dist/chunk-ZVXX2CTH.mjs +95 -0
  195. package/dist/chunk-ZVXX2CTH.mjs.map +1 -0
  196. package/dist/chunk-ZXCNX3ZB.mjs +70 -0
  197. package/dist/chunk-ZXCNX3ZB.mjs.map +1 -0
  198. package/dist/cronjob.js +20 -0
  199. package/dist/cronjob.js.map +1 -0
  200. package/dist/cronjob.mjs +20 -0
  201. package/dist/cronjob.mjs.map +1 -0
  202. package/dist/deep-clone.js +8 -0
  203. package/dist/deep-clone.js.map +1 -0
  204. package/dist/deep-clone.mjs +8 -0
  205. package/dist/deep-clone.mjs.map +1 -0
  206. package/dist/default-endowments.js +8 -0
  207. package/dist/default-endowments.js.map +1 -0
  208. package/dist/default-endowments.mjs +8 -0
  209. package/dist/default-endowments.mjs.map +1 -0
  210. package/dist/derivation-paths.js +13 -0
  211. package/dist/derivation-paths.js.map +1 -0
  212. package/dist/derivation-paths.mjs +13 -0
  213. package/dist/derivation-paths.mjs.map +1 -0
  214. package/dist/entropy.js +10 -0
  215. package/dist/entropy.js.map +1 -0
  216. package/dist/entropy.mjs +10 -0
  217. package/dist/entropy.mjs.map +1 -0
  218. package/dist/errors.js +20 -0
  219. package/dist/errors.js.map +1 -0
  220. package/dist/errors.mjs +20 -0
  221. package/dist/errors.mjs.map +1 -0
  222. package/dist/eval-worker.js +43 -0
  223. package/dist/eval-worker.js.map +1 -0
  224. package/dist/eval-worker.mjs +43 -0
  225. package/dist/eval-worker.mjs.map +1 -0
  226. package/dist/eval.js +17 -0
  227. package/dist/eval.js.map +1 -0
  228. package/dist/eval.mjs +17 -0
  229. package/dist/eval.mjs.map +1 -0
  230. package/dist/fs.js +28 -0
  231. package/dist/fs.js.map +1 -0
  232. package/dist/fs.mjs +28 -0
  233. package/dist/fs.mjs.map +1 -0
  234. package/dist/handler-types.js +10 -0
  235. package/dist/handler-types.js.map +1 -0
  236. package/dist/handler-types.mjs +10 -0
  237. package/dist/handler-types.mjs.map +1 -0
  238. package/dist/handlers.js +35 -0
  239. package/dist/handlers.js.map +1 -0
  240. package/dist/handlers.mjs +35 -0
  241. package/dist/handlers.mjs.map +1 -0
  242. package/dist/icon.js +14 -0
  243. package/dist/icon.js.map +1 -0
  244. package/dist/icon.mjs +14 -0
  245. package/dist/icon.mjs.map +1 -0
  246. package/dist/iframe.js +8 -0
  247. package/dist/iframe.js.map +1 -0
  248. package/dist/iframe.mjs +8 -0
  249. package/dist/iframe.mjs.map +1 -0
  250. package/dist/index.executionenv.js +134 -0
  251. package/dist/index.executionenv.js.map +1 -0
  252. package/dist/index.executionenv.mjs +134 -0
  253. package/dist/index.executionenv.mjs.map +1 -0
  254. package/dist/index.js +378 -0
  255. package/dist/index.js.map +1 -0
  256. package/dist/index.mjs +378 -0
  257. package/dist/index.mjs.map +1 -0
  258. package/dist/json-rpc.js +18 -0
  259. package/dist/json-rpc.js.map +1 -0
  260. package/dist/json-rpc.mjs +18 -0
  261. package/dist/json-rpc.mjs.map +1 -0
  262. package/dist/json.js +8 -0
  263. package/dist/json.js.map +1 -0
  264. package/dist/json.mjs +8 -0
  265. package/dist/json.mjs.map +1 -0
  266. package/dist/localization.js +23 -0
  267. package/dist/localization.js.map +1 -0
  268. package/dist/localization.mjs +23 -0
  269. package/dist/localization.mjs.map +1 -0
  270. package/dist/logging.js +14 -0
  271. package/dist/logging.js.map +1 -0
  272. package/dist/logging.mjs +14 -0
  273. package/dist/logging.mjs.map +1 -0
  274. package/dist/manifest/index.js +59 -0
  275. package/dist/manifest/index.js.map +1 -0
  276. package/dist/manifest/index.mjs +59 -0
  277. package/dist/manifest/index.mjs.map +1 -0
  278. package/dist/manifest/manifest.js +42 -0
  279. package/dist/manifest/manifest.js.map +1 -0
  280. package/dist/manifest/manifest.mjs +42 -0
  281. package/dist/manifest/manifest.mjs.map +1 -0
  282. package/dist/manifest/node.js +85 -0
  283. package/dist/manifest/node.js.map +1 -0
  284. package/dist/manifest/node.mjs +85 -0
  285. package/dist/manifest/node.mjs.map +1 -0
  286. package/dist/manifest/validation.js +58 -0
  287. package/dist/manifest/validation.js.map +1 -0
  288. package/dist/manifest/validation.mjs +58 -0
  289. package/dist/manifest/validation.mjs.map +1 -0
  290. package/dist/mock.js +13 -0
  291. package/dist/mock.js.map +1 -0
  292. package/dist/mock.mjs +13 -0
  293. package/dist/mock.mjs.map +1 -0
  294. package/dist/namespace.js +44 -0
  295. package/dist/namespace.js.map +1 -0
  296. package/dist/namespace.mjs +44 -0
  297. package/dist/namespace.mjs.map +1 -0
  298. package/dist/node.js +448 -0
  299. package/dist/node.js.map +1 -0
  300. package/dist/node.mjs +448 -0
  301. package/dist/node.mjs.map +1 -0
  302. package/dist/npm.js +32 -0
  303. package/dist/npm.js.map +1 -0
  304. package/dist/npm.mjs +32 -0
  305. package/dist/npm.mjs.map +1 -0
  306. package/dist/path.js +8 -0
  307. package/dist/path.js.map +1 -0
  308. package/dist/path.mjs +8 -0
  309. package/dist/path.mjs.map +1 -0
  310. package/dist/post-process.js +10 -0
  311. package/dist/post-process.js.map +1 -0
  312. package/dist/post-process.mjs +10 -0
  313. package/dist/post-process.mjs.map +1 -0
  314. package/dist/snaps.js +48 -0
  315. package/dist/snaps.js.map +1 -0
  316. package/dist/snaps.mjs +48 -0
  317. package/dist/snaps.mjs.map +1 -0
  318. package/dist/strings.js +8 -0
  319. package/dist/strings.js.map +1 -0
  320. package/dist/strings.mjs +8 -0
  321. package/dist/strings.mjs.map +1 -0
  322. package/dist/structs.js +31 -0
  323. package/dist/structs.js.map +1 -0
  324. package/dist/structs.mjs +31 -0
  325. package/dist/structs.mjs.map +1 -0
  326. package/dist/tsconfig.build.tsbuildinfo +1 -0
  327. package/dist/types/bytes.d.ts +1 -1
  328. package/dist/types/checksum.d.ts +1 -1
  329. package/dist/types/index.d.ts +1 -6
  330. package/dist/types/json-rpc.d.ts +1 -1
  331. package/dist/types/localization.d.ts +1 -1
  332. package/dist/types/manifest/index.d.ts +0 -1
  333. package/dist/types/manifest/manifest.d.ts +1 -1
  334. package/dist/types/manifest/node.d.ts +2 -0
  335. package/dist/types/manifest/validation.d.ts +5 -5
  336. package/dist/types/node.d.ts +8 -0
  337. package/dist/types/structs.d.ts +0 -20
  338. package/dist/types/ui.d.ts +7 -0
  339. package/dist/types/virtual-file/index.d.ts +0 -1
  340. package/dist/types/virtual-file/node.d.ts +2 -0
  341. package/dist/types.js +28 -0
  342. package/dist/types.js.map +1 -0
  343. package/dist/types.mjs +28 -0
  344. package/dist/types.mjs.map +1 -0
  345. package/dist/ui.js +12 -0
  346. package/dist/ui.js.map +1 -0
  347. package/dist/ui.mjs +12 -0
  348. package/dist/ui.mjs.map +1 -0
  349. package/dist/validation.js +24 -0
  350. package/dist/validation.js.map +1 -0
  351. package/dist/validation.mjs +24 -0
  352. package/dist/validation.mjs.map +1 -0
  353. package/dist/versions.js +12 -0
  354. package/dist/versions.js.map +1 -0
  355. package/dist/versions.mjs +12 -0
  356. package/dist/versions.mjs.map +1 -0
  357. package/dist/virtual-file/VirtualFile.js +9 -0
  358. package/dist/virtual-file/VirtualFile.js.map +1 -0
  359. package/dist/virtual-file/VirtualFile.mjs +9 -0
  360. package/dist/virtual-file/VirtualFile.mjs.map +1 -0
  361. package/dist/virtual-file/index.js +10 -0
  362. package/dist/virtual-file/index.js.map +1 -0
  363. package/dist/virtual-file/index.mjs +10 -0
  364. package/dist/virtual-file/index.mjs.map +1 -0
  365. package/dist/virtual-file/node.js +17 -0
  366. package/dist/virtual-file/node.js.map +1 -0
  367. package/dist/virtual-file/node.mjs +17 -0
  368. package/dist/virtual-file/node.mjs.map +1 -0
  369. package/dist/virtual-file/toVirtualFile.js +12 -0
  370. package/dist/virtual-file/toVirtualFile.js.map +1 -0
  371. package/dist/virtual-file/toVirtualFile.mjs +12 -0
  372. package/dist/virtual-file/toVirtualFile.mjs.map +1 -0
  373. package/package.json +23 -38
  374. package/dist/cjs/array.js +0 -23
  375. package/dist/cjs/array.js.map +0 -1
  376. package/dist/cjs/auxiliary-files.js +0 -27
  377. package/dist/cjs/auxiliary-files.js.map +0 -1
  378. package/dist/cjs/base64.js +0 -44
  379. package/dist/cjs/base64.js.map +0 -1
  380. package/dist/cjs/bytes.js +0 -23
  381. package/dist/cjs/bytes.js.map +0 -1
  382. package/dist/cjs/caveats.js +0 -48
  383. package/dist/cjs/caveats.js.map +0 -1
  384. package/dist/cjs/checksum.js +0 -43
  385. package/dist/cjs/checksum.js.map +0 -1
  386. package/dist/cjs/cronjob.js +0 -77
  387. package/dist/cjs/cronjob.js.map +0 -1
  388. package/dist/cjs/deep-clone.js +0 -22
  389. package/dist/cjs/deep-clone.js.map +0 -1
  390. package/dist/cjs/default-endowments.js +0 -49
  391. package/dist/cjs/default-endowments.js.map +0 -1
  392. package/dist/cjs/derivation-paths.js +0 -300
  393. package/dist/cjs/derivation-paths.js.map +0 -1
  394. package/dist/cjs/entropy.js +0 -23
  395. package/dist/cjs/entropy.js.map +0 -1
  396. package/dist/cjs/errors.js +0 -221
  397. package/dist/cjs/errors.js.map +0 -1
  398. package/dist/cjs/eval-worker.js +0 -44
  399. package/dist/cjs/eval-worker.js.map +0 -1
  400. package/dist/cjs/eval.js +0 -77
  401. package/dist/cjs/eval.js.map +0 -1
  402. package/dist/cjs/fs.js +0 -126
  403. package/dist/cjs/fs.js.map +0 -1
  404. package/dist/cjs/handler-types.js +0 -34
  405. package/dist/cjs/handler-types.js.map +0 -1
  406. package/dist/cjs/handlers.js +0 -173
  407. package/dist/cjs/handlers.js.map +0 -1
  408. package/dist/cjs/icon.js +0 -66
  409. package/dist/cjs/icon.js.map +0 -1
  410. package/dist/cjs/iframe.js +0 -59
  411. package/dist/cjs/iframe.js.map +0 -1
  412. package/dist/cjs/index.browser.js +0 -49
  413. package/dist/cjs/index.browser.js.map +0 -1
  414. package/dist/cjs/index.executionenv.js +0 -27
  415. package/dist/cjs/index.executionenv.js.map +0 -1
  416. package/dist/cjs/index.js +0 -54
  417. package/dist/cjs/index.js.map +0 -1
  418. package/dist/cjs/json-rpc.js +0 -81
  419. package/dist/cjs/json-rpc.js.map +0 -1
  420. package/dist/cjs/json.js +0 -16
  421. package/dist/cjs/json.js.map +0 -1
  422. package/dist/cjs/localization.js +0 -113
  423. package/dist/cjs/localization.js.map +0 -1
  424. package/dist/cjs/logging.js +0 -40
  425. package/dist/cjs/logging.js.map +0 -1
  426. package/dist/cjs/manifest/index.browser.js +0 -20
  427. package/dist/cjs/manifest/index.browser.js.map +0 -1
  428. package/dist/cjs/manifest/index.js +0 -21
  429. package/dist/cjs/manifest/index.js.map +0 -1
  430. package/dist/cjs/manifest/manifest.js +0 -283
  431. package/dist/cjs/manifest/manifest.js.map +0 -1
  432. package/dist/cjs/manifest/validation.js +0 -244
  433. package/dist/cjs/manifest/validation.js.map +0 -1
  434. package/dist/cjs/mock.js +0 -128
  435. package/dist/cjs/mock.js.map +0 -1
  436. package/dist/cjs/namespace.js +0 -136
  437. package/dist/cjs/namespace.js.map +0 -1
  438. package/dist/cjs/npm.js +0 -96
  439. package/dist/cjs/npm.js.map +0 -1
  440. package/dist/cjs/path.js +0 -21
  441. package/dist/cjs/path.js.map +0 -1
  442. package/dist/cjs/post-process.js +0 -328
  443. package/dist/cjs/post-process.js.map +0 -1
  444. package/dist/cjs/snaps.js +0 -232
  445. package/dist/cjs/snaps.js.map +0 -1
  446. package/dist/cjs/strings.js +0 -21
  447. package/dist/cjs/strings.js.map +0 -1
  448. package/dist/cjs/structs.js +0 -210
  449. package/dist/cjs/structs.js.map +0 -1
  450. package/dist/cjs/types.js +0 -104
  451. package/dist/cjs/types.js.map +0 -1
  452. package/dist/cjs/ui.js +0 -53
  453. package/dist/cjs/ui.js.map +0 -1
  454. package/dist/cjs/validation.js +0 -24
  455. package/dist/cjs/validation.js.map +0 -1
  456. package/dist/cjs/versions.js +0 -47
  457. package/dist/cjs/versions.js.map +0 -1
  458. package/dist/cjs/virtual-file/VirtualFile.js +0 -92
  459. package/dist/cjs/virtual-file/VirtualFile.js.map +0 -1
  460. package/dist/cjs/virtual-file/index.browser.js +0 -20
  461. package/dist/cjs/virtual-file/index.browser.js.map +0 -1
  462. package/dist/cjs/virtual-file/index.js +0 -21
  463. package/dist/cjs/virtual-file/index.js.map +0 -1
  464. package/dist/cjs/virtual-file/toVirtualFile.js +0 -33
  465. package/dist/cjs/virtual-file/toVirtualFile.js.map +0 -1
  466. package/dist/esm/array.js +0 -13
  467. package/dist/esm/array.js.map +0 -1
  468. package/dist/esm/auxiliary-files.js +0 -23
  469. package/dist/esm/auxiliary-files.js.map +0 -1
  470. package/dist/esm/base64.js +0 -36
  471. package/dist/esm/base64.js.map +0 -1
  472. package/dist/esm/bytes.js +0 -18
  473. package/dist/esm/bytes.js.map +0 -1
  474. package/dist/esm/caveats.js +0 -38
  475. package/dist/esm/caveats.js.map +0 -1
  476. package/dist/esm/checksum.js +0 -41
  477. package/dist/esm/checksum.js.map +0 -1
  478. package/dist/esm/cronjob.js +0 -59
  479. package/dist/esm/cronjob.js.map +0 -1
  480. package/dist/esm/deep-clone.js +0 -7
  481. package/dist/esm/deep-clone.js.map +0 -1
  482. package/dist/esm/default-endowments.js +0 -39
  483. package/dist/esm/default-endowments.js.map +0 -1
  484. package/dist/esm/derivation-paths.js +0 -287
  485. package/dist/esm/derivation-paths.js.map +0 -1
  486. package/dist/esm/entropy.js +0 -6
  487. package/dist/esm/entropy.js.map +0 -1
  488. package/dist/esm/errors.js +0 -211
  489. package/dist/esm/errors.js.map +0 -1
  490. package/dist/esm/eval-worker.js +0 -40
  491. package/dist/esm/eval-worker.js.map +0 -1
  492. package/dist/esm/eval.js +0 -65
  493. package/dist/esm/eval.js.map +0 -1
  494. package/dist/esm/fs.js +0 -136
  495. package/dist/esm/fs.js.map +0 -1
  496. package/dist/esm/handler-types.js +0 -16
  497. package/dist/esm/handler-types.js.map +0 -1
  498. package/dist/esm/handlers.js +0 -119
  499. package/dist/esm/handlers.js.map +0 -1
  500. package/dist/esm/icon.js +0 -51
  501. package/dist/esm/icon.js.map +0 -1
  502. package/dist/esm/iframe.js +0 -49
  503. package/dist/esm/iframe.js.map +0 -1
  504. package/dist/esm/index.browser.js +0 -32
  505. package/dist/esm/index.browser.js.map +0 -1
  506. package/dist/esm/index.executionenv.js +0 -10
  507. package/dist/esm/index.executionenv.js.map +0 -1
  508. package/dist/esm/index.js +0 -37
  509. package/dist/esm/index.js.map +0 -1
  510. package/dist/esm/json-rpc.js +0 -79
  511. package/dist/esm/json-rpc.js.map +0 -1
  512. package/dist/esm/json.js +0 -17
  513. package/dist/esm/json.js.map +0 -1
  514. package/dist/esm/localization.js +0 -115
  515. package/dist/esm/localization.js.map +0 -1
  516. package/dist/esm/logging.js +0 -59
  517. package/dist/esm/logging.js.map +0 -1
  518. package/dist/esm/manifest/index.browser.js +0 -3
  519. package/dist/esm/manifest/index.browser.js.map +0 -1
  520. package/dist/esm/manifest/index.js +0 -4
  521. package/dist/esm/manifest/index.js.map +0 -1
  522. package/dist/esm/manifest/manifest.js +0 -307
  523. package/dist/esm/manifest/manifest.js.map +0 -1
  524. package/dist/esm/manifest/validation.js +0 -190
  525. package/dist/esm/manifest/validation.js.map +0 -1
  526. package/dist/esm/mock.js +0 -111
  527. package/dist/esm/mock.js.map +0 -1
  528. package/dist/esm/namespace.js +0 -113
  529. package/dist/esm/namespace.js.map +0 -1
  530. package/dist/esm/npm.js +0 -85
  531. package/dist/esm/npm.js.map +0 -1
  532. package/dist/esm/path.js +0 -17
  533. package/dist/esm/path.js.map +0 -1
  534. package/dist/esm/post-process.js +0 -333
  535. package/dist/esm/post-process.js.map +0 -1
  536. package/dist/esm/snaps.js +0 -217
  537. package/dist/esm/snaps.js.map +0 -1
  538. package/dist/esm/strings.js +0 -11
  539. package/dist/esm/strings.js.map +0 -1
  540. package/dist/esm/structs.js +0 -295
  541. package/dist/esm/structs.js.map +0 -1
  542. package/dist/esm/types.js +0 -78
  543. package/dist/esm/types.js.map +0 -1
  544. package/dist/esm/ui.js +0 -50
  545. package/dist/esm/ui.js.map +0 -1
  546. package/dist/esm/validation.js +0 -19
  547. package/dist/esm/validation.js.map +0 -1
  548. package/dist/esm/versions.js +0 -41
  549. package/dist/esm/versions.js.map +0 -1
  550. package/dist/esm/virtual-file/VirtualFile.js +0 -82
  551. package/dist/esm/virtual-file/VirtualFile.js.map +0 -1
  552. package/dist/esm/virtual-file/index.browser.js +0 -3
  553. package/dist/esm/virtual-file/index.browser.js.map +0 -1
  554. package/dist/esm/virtual-file/index.js +0 -4
  555. package/dist/esm/virtual-file/index.js.map +0 -1
  556. package/dist/esm/virtual-file/toVirtualFile.js +0 -26
  557. package/dist/esm/virtual-file/toVirtualFile.js.map +0 -1
  558. package/dist/types/index.browser.d.ts +0 -30
  559. package/dist/types/manifest/index.browser.d.ts +0 -1
  560. package/dist/types/virtual-file/index.browser.d.ts +0 -1
@@ -0,0 +1,249 @@
1
+ // src/post-process.ts
2
+ import { transformSync, template } from "@babel/core";
3
+ import {
4
+ binaryExpression,
5
+ isUnaryExpression,
6
+ isUpdateExpression,
7
+ stringLiteral,
8
+ templateElement,
9
+ templateLiteral
10
+ } from "@babel/types";
11
+ var PostProcessWarning = /* @__PURE__ */ ((PostProcessWarning2) => {
12
+ PostProcessWarning2["UnsafeMathRandom"] = "`Math.random` was detected in the Snap bundle. This is not a secure source of randomness, and should not be used in a secure context. Use `crypto.getRandomValues` instead.";
13
+ return PostProcessWarning2;
14
+ })(PostProcessWarning || {});
15
+ var TOKEN_REGEX = /(<!)(--)|(--)(>)|(import)(\(.*?\))/gu;
16
+ var EMPTY_TEMPLATE_ELEMENT = templateElement({ raw: "", cooked: "" });
17
+ var evalWrapper = template.statement(`
18
+ (1, REF)(ARGS)
19
+ `);
20
+ var objectEvalWrapper = template.statement(`
21
+ (1, OBJECT.REF)
22
+ `);
23
+ var regeneratorRuntimeWrapper = template.statement(`
24
+ var regeneratorRuntime;
25
+ `);
26
+ function breakTokens(value) {
27
+ const tokens = value.split(TOKEN_REGEX);
28
+ return tokens.filter((token) => token !== "" && token !== void 0);
29
+ }
30
+ function breakTokensTemplateLiteral(value) {
31
+ const matches = Array.from(value.matchAll(TOKEN_REGEX));
32
+ if (matches.length > 0) {
33
+ const output = matches.reduce(
34
+ ([elements, expressions], rawMatch, index, values) => {
35
+ const [, first, last] = rawMatch.filter((raw) => raw !== void 0);
36
+ const prefix = value.slice(
37
+ index === 0 ? 0 : values[index - 1].index + values[index - 1][0].length,
38
+ rawMatch.index
39
+ );
40
+ return [
41
+ [
42
+ ...elements,
43
+ templateElement({
44
+ raw: getRawTemplateValue(prefix),
45
+ cooked: prefix
46
+ }),
47
+ EMPTY_TEMPLATE_ELEMENT
48
+ ],
49
+ [...expressions, stringLiteral(first), stringLiteral(last)]
50
+ ];
51
+ },
52
+ [[], []]
53
+ );
54
+ const lastMatch = matches[matches.length - 1];
55
+ const suffix = value.slice(
56
+ lastMatch.index + lastMatch[0].length
57
+ );
58
+ return [
59
+ [
60
+ ...output[0],
61
+ templateElement({ raw: getRawTemplateValue(suffix), cooked: suffix })
62
+ ],
63
+ output[1]
64
+ ];
65
+ }
66
+ return [
67
+ [templateElement({ raw: getRawTemplateValue(value), cooked: value })],
68
+ []
69
+ ];
70
+ }
71
+ function getRawTemplateValue(value) {
72
+ return value.replace(/\\|`|\$\{/gu, "\\$&");
73
+ }
74
+ function postProcessBundle(code, {
75
+ stripComments = true,
76
+ sourceMap: sourceMaps,
77
+ inputSourceMap
78
+ } = {}) {
79
+ const warnings = /* @__PURE__ */ new Set();
80
+ const pre = ({ ast }) => {
81
+ ast.comments?.forEach((comment) => {
82
+ comment.value = comment.value.replace(new RegExp(`<!${"--"}`, "gu"), "< !--").replace(new RegExp(`${"--"}>`, "gu"), "-- >").replace(/import(\(.*\))/gu, "import\\$1");
83
+ });
84
+ };
85
+ const visitor = {
86
+ FunctionExpression(path) {
87
+ const { node } = path;
88
+ if (node.type === "FunctionExpression" && node.extra?.parenthesized) {
89
+ node.params = node.params.filter(
90
+ (param) => !(param.type === "Identifier" && param.name === "Buffer")
91
+ );
92
+ }
93
+ },
94
+ CallExpression(path) {
95
+ const { node } = path;
96
+ if (node.callee.type === "Identifier" && node.callee.name === "eval") {
97
+ path.replaceWith(
98
+ evalWrapper({
99
+ REF: node.callee,
100
+ ARGS: node.arguments
101
+ })
102
+ );
103
+ }
104
+ if (node.callee.type === "MemberExpression" && node.callee.object.type === "Identifier" && node.callee.object.name === "Math" && node.callee.property.type === "Identifier" && node.callee.property.name === "random") {
105
+ warnings.add("`Math.random` was detected in the Snap bundle. This is not a secure source of randomness, and should not be used in a secure context. Use `crypto.getRandomValues` instead." /* UnsafeMathRandom */);
106
+ }
107
+ },
108
+ MemberExpression(path) {
109
+ const { node } = path;
110
+ if (node.property.type === "Identifier" && node.property.name === "eval" && // We only apply this to MemberExpressions that are the callee of CallExpression
111
+ path.parent.type === "CallExpression" && path.parent.callee === node) {
112
+ path.replaceWith(
113
+ objectEvalWrapper({
114
+ OBJECT: node.object,
115
+ REF: node.property
116
+ })
117
+ );
118
+ }
119
+ },
120
+ Identifier(path) {
121
+ const { node } = path;
122
+ if (node.name === "regeneratorRuntime") {
123
+ const program = path.findParent(
124
+ (parent) => parent.node.type === "Program"
125
+ );
126
+ if (program?.node.type === "Program") {
127
+ const body = program.node.body[0];
128
+ if (body.type === "VariableDeclaration" && body.declarations[0].id.name === "regeneratorRuntime") {
129
+ return;
130
+ }
131
+ program?.node.body.unshift(regeneratorRuntimeWrapper());
132
+ }
133
+ }
134
+ },
135
+ TemplateLiteral(path) {
136
+ const { node } = path;
137
+ if (path.getData("visited")) {
138
+ return;
139
+ }
140
+ const [replacementQuasis, replacementExpressions] = node.quasis.reduce(
141
+ ([elements, expressions], quasi, index) => {
142
+ const tokens = breakTokensTemplateLiteral(
143
+ quasi.value.cooked
144
+ );
145
+ if (tokens[0].length <= 1) {
146
+ return [
147
+ [...elements, quasi],
148
+ [...expressions, node.expressions[index]]
149
+ ];
150
+ }
151
+ return [
152
+ [...elements, ...tokens[0]],
153
+ [
154
+ ...expressions,
155
+ ...tokens[1],
156
+ node.expressions[index]
157
+ ]
158
+ ];
159
+ },
160
+ [[], []]
161
+ );
162
+ path.replaceWith(
163
+ templateLiteral(
164
+ replacementQuasis,
165
+ replacementExpressions.filter(
166
+ (expression) => expression !== void 0
167
+ )
168
+ )
169
+ );
170
+ path.setData("visited", true);
171
+ },
172
+ StringLiteral(path) {
173
+ const { node } = path;
174
+ const tokens = breakTokens(node.value);
175
+ if (tokens.length <= 1) {
176
+ return;
177
+ }
178
+ const replacement = tokens.slice(1).reduce(
179
+ (acc, value) => binaryExpression("+", acc, stringLiteral(value)),
180
+ stringLiteral(tokens[0])
181
+ );
182
+ path.replaceWith(replacement);
183
+ path.skip();
184
+ },
185
+ BinaryExpression(path) {
186
+ const { node } = path;
187
+ const errorMessage = "Using HTML comments (`<!--` and `-->`) as operators is not allowed. The behaviour of these comments is ambiguous, and differs per browser and environment. If you want to use them as operators, break them up into separate characters, i.e., `a-- > b` and `a < ! --b`.";
188
+ if (node.operator === "<" && isUnaryExpression(node.right) && isUpdateExpression(node.right.argument) && node.right.argument.operator === "--" && node.left.end && node.right.argument.argument.start) {
189
+ const expression = code.slice(
190
+ node.left.end,
191
+ node.right.argument.argument.start
192
+ );
193
+ if (expression.includes("<!--")) {
194
+ throw new Error(errorMessage);
195
+ }
196
+ }
197
+ if (node.operator === ">" && isUpdateExpression(node.left) && node.left.operator === "--" && node.left.argument.end && node.right.start) {
198
+ const expression = code.slice(node.left.argument.end, node.right.start);
199
+ if (expression.includes("-->")) {
200
+ throw new Error(errorMessage);
201
+ }
202
+ }
203
+ }
204
+ };
205
+ try {
206
+ const file = transformSync(code, {
207
+ // Prevent Babel from searching for a config file.
208
+ configFile: false,
209
+ parserOpts: {
210
+ // Strict mode isn't enabled by default, so we need to enable it here.
211
+ strictMode: true,
212
+ // If this is disabled, the AST does not include any comments. This is
213
+ // useful for performance reasons, and we use it for stripping comments.
214
+ attachComment: !stripComments
215
+ },
216
+ // By default, Babel optimises bundles that exceed 500 KB, but that
217
+ // results in characters which look like HTML comments, which breaks SES.
218
+ compact: false,
219
+ // This configures Babel to generate a new source map from the existing
220
+ // source map if specified. If `sourceMap` is `true` but an input source
221
+ // map is not provided, a new source map will be generated instead.
222
+ inputSourceMap,
223
+ sourceMaps,
224
+ plugins: [
225
+ () => ({
226
+ pre,
227
+ visitor
228
+ })
229
+ ]
230
+ });
231
+ if (!file?.code) {
232
+ throw new Error("Bundled code is empty.");
233
+ }
234
+ return {
235
+ code: file.code,
236
+ sourceMap: file.map,
237
+ warnings: Array.from(warnings)
238
+ };
239
+ } catch (error) {
240
+ throw new Error(`Failed to post process code:
241
+ ${error.message}`);
242
+ }
243
+ }
244
+
245
+ export {
246
+ PostProcessWarning,
247
+ postProcessBundle
248
+ };
249
+ //# sourceMappingURL=chunk-O3XKEEJV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/post-process.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-shadow\nimport type { Node, Visitor, PluginObj } from '@babel/core';\nimport { transformSync, template } from '@babel/core';\nimport type { Expression, Identifier, TemplateElement } from '@babel/types';\nimport {\n binaryExpression,\n isUnaryExpression,\n isUpdateExpression,\n stringLiteral,\n templateElement,\n templateLiteral,\n} from '@babel/types';\n\n/**\n * Source map declaration taken from `@babel/core`. Babel doesn't export the\n * type for this, so it's copied from the source code instead here.\n */\nexport type SourceMap = {\n version: number;\n sources: string[];\n names: string[];\n sourceRoot?: string | undefined;\n sourcesContent?: string[] | undefined;\n mappings: string;\n file: string;\n};\n\n/**\n * The post process options.\n *\n * @property stripComments - Whether to strip comments. Defaults to `true`.\n * @property sourceMap - Whether to generate a source map for the modified code.\n * See also `inputSourceMap`.\n * @property inputSourceMap - The source map for the input code. When provided,\n * the source map will be used to generate a source map for the modified code.\n * This ensures that the source map is correct for the modified code, and still\n * points to the original source. If not provided, a new source map will be\n * generated instead.\n */\nexport type PostProcessOptions = {\n stripComments?: boolean;\n sourceMap?: boolean | 'inline';\n inputSourceMap?: SourceMap;\n};\n\n/**\n * The post processed bundle output.\n *\n * @property code - The modified code.\n * @property sourceMap - The source map for the modified code, if the source map\n * option was enabled.\n * @property warnings - Any warnings that occurred during the post-processing.\n */\nexport type PostProcessedBundle = {\n code: string;\n sourceMap?: SourceMap | null;\n warnings: PostProcessWarning[];\n};\n\nexport enum PostProcessWarning {\n UnsafeMathRandom = '`Math.random` was detected in the Snap bundle. This is not a secure source of randomness, and should not be used in a secure context. Use `crypto.getRandomValues` instead.',\n}\n\n// The RegEx below consists of multiple groups joined by a boolean OR.\n// Each part consists of two groups which capture a part of each string\n// which needs to be split up, e.g., `<!--` is split into `<!` and `--`.\nconst TOKEN_REGEX = /(<!)(--)|(--)(>)|(import)(\\(.*?\\))/gu;\n\n// An empty template element, i.e., a part of a template literal without any\n// value (\"\").\nconst EMPTY_TEMPLATE_ELEMENT = templateElement({ raw: '', cooked: '' });\n\nconst evalWrapper = template.statement(`\n (1, REF)(ARGS)\n`);\n\nconst objectEvalWrapper = template.statement(`\n (1, OBJECT.REF)\n`);\n\nconst regeneratorRuntimeWrapper = template.statement(`\n var regeneratorRuntime;\n`);\n\n/**\n * Breaks up tokens that would otherwise result in SES errors. The tokens are\n * broken up in a non-destructive way where possible. Currently works with:\n * - HTML comment tags `<!--` and `-->`, broken up into `<!`, `--`, and `--`,\n * `>`.\n * - `import(n)` statements, broken up into `import`, `(n)`.\n *\n * @param value - The string value to break up.\n * @returns The string split into an array, in a way that it can be joined\n * together to form the same string, but with the tokens separated into single\n * array elements.\n */\nfunction breakTokens(value: string): string[] {\n const tokens = value.split(TOKEN_REGEX);\n return (\n tokens\n // TODO: The `split` above results in some values being `undefined`.\n // There may be a better solution to avoid having to filter those out.\n .filter((token) => token !== '' && token !== undefined)\n );\n}\n\n/**\n * Breaks up tokens that would otherwise result in SES errors. The tokens are\n * broken up in a non-destructive way where possible. Currently works with:\n * - HTML comment tags `<!--` and `-->`, broken up into `<!`, `--`, and `--`,\n * `>`.\n * - `import(n)` statements, broken up into `import`, `(n)`.\n *\n * @param value - The string value to break up.\n * @returns The string split into a tuple consisting of the new template\n * elements and string literal expressions.\n */\nfunction breakTokensTemplateLiteral(\n value: string,\n): [TemplateElement[], Expression[]] {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore `matchAll` is not available in ES2017, but this code\n // should only be used in environments where the function is supported.\n const matches: RegExpMatchArray[] = Array.from(value.matchAll(TOKEN_REGEX));\n\n if (matches.length > 0) {\n const output = matches.reduce<[TemplateElement[], Expression[]]>(\n ([elements, expressions], rawMatch, index, values) => {\n const [, first, last] = rawMatch.filter((raw) => raw !== undefined);\n\n // Slice the text in front of the match, which does not need to be\n // broken up.\n const prefix = value.slice(\n index === 0\n ? 0\n : (values[index - 1].index as number) + values[index - 1][0].length,\n rawMatch.index,\n );\n\n return [\n [\n ...elements,\n templateElement({\n raw: getRawTemplateValue(prefix),\n cooked: prefix,\n }),\n EMPTY_TEMPLATE_ELEMENT,\n ],\n [...expressions, stringLiteral(first), stringLiteral(last)],\n ];\n },\n [[], []],\n );\n\n // Add the text after the last match to the output.\n const lastMatch = matches[matches.length - 1];\n const suffix = value.slice(\n (lastMatch.index as number) + lastMatch[0].length,\n );\n\n return [\n [\n ...output[0],\n templateElement({ raw: getRawTemplateValue(suffix), cooked: suffix }),\n ],\n output[1],\n ];\n }\n\n // If there are no matches, simply return the original value.\n return [\n [templateElement({ raw: getRawTemplateValue(value), cooked: value })],\n [],\n ];\n}\n\n/**\n * Get a raw template literal value from a cooked value. This adds a backslash\n * before every '`', '\\' and '${' characters.\n *\n * @see https://github.com/babel/babel/issues/9242#issuecomment-532529613\n * @param value - The cooked string to get the raw string for.\n * @returns The value as raw value.\n */\nfunction getRawTemplateValue(value: string) {\n return value.replace(/\\\\|`|\\$\\{/gu, '\\\\$&');\n}\n\n/**\n * Post process code with AST such that it can be evaluated in SES.\n *\n * Currently:\n * - Makes all direct calls to eval indirect.\n * - Handles certain Babel-related edge cases.\n * - Removes the `Buffer` provided by Browserify.\n * - Optionally removes comments.\n * - Breaks up tokens that would otherwise result in SES errors, such as HTML\n * comment tags `<!--` and `-->` and `import(n)` statements.\n *\n * @param code - The code to post process.\n * @param options - The post-process options.\n * @param options.stripComments - Whether to strip comments. Defaults to `true`.\n * @param options.sourceMap - Whether to generate a source map for the modified\n * code. See also `inputSourceMap`.\n * @param options.inputSourceMap - The source map for the input code. When\n * provided, the source map will be used to generate a source map for the\n * modified code. This ensures that the source map is correct for the modified\n * code, and still points to the original source. If not provided, a new source\n * map will be generated instead.\n * @returns An object containing the modified code, and source map, or null if\n * the provided code is null.\n */\nexport function postProcessBundle(\n code: string,\n {\n stripComments = true,\n sourceMap: sourceMaps,\n inputSourceMap,\n }: Partial<PostProcessOptions> = {},\n): PostProcessedBundle {\n const warnings = new Set<PostProcessWarning>();\n\n const pre: PluginObj['pre'] = ({ ast }) => {\n ast.comments?.forEach((comment) => {\n // Break up tokens that could be parsed as HTML comment terminators. The\n // regular expressions below are written strangely so as to avoid the\n // appearance of such tokens in our source code. For reference:\n // https://github.com/endojs/endo/blob/70cc86eb400655e922413b99c38818d7b2e79da0/packages/ses/error-codes/SES_HTML_COMMENT_REJECTED.md\n comment.value = comment.value\n .replace(new RegExp(`<!${'--'}`, 'gu'), '< !--')\n .replace(new RegExp(`${'--'}>`, 'gu'), '-- >')\n .replace(/import(\\(.*\\))/gu, 'import\\\\$1');\n });\n };\n\n const visitor: Visitor<Node> = {\n FunctionExpression(path) {\n const { node } = path;\n\n // Browserify provides the `Buffer` global as an argument to modules that\n // use it, but this does not work in SES. Since we pass in `Buffer` as an\n // endowment, we can simply remove the argument.\n //\n // Note that this only removes `Buffer` from a wrapped function\n // expression, e.g., `(function (Buffer) { ... })`. Regular functions\n // are not affected.\n //\n // TODO: Since we're working on the AST level, we could check the scope\n // of the function expression, and possibly prevent false positives?\n if (node.type === 'FunctionExpression' && node.extra?.parenthesized) {\n node.params = node.params.filter(\n (param) => !(param.type === 'Identifier' && param.name === 'Buffer'),\n );\n }\n },\n\n CallExpression(path) {\n const { node } = path;\n\n // Replace `eval(foo)` with `(1, eval)(foo)`.\n if (node.callee.type === 'Identifier' && node.callee.name === 'eval') {\n path.replaceWith(\n evalWrapper({\n REF: node.callee,\n ARGS: node.arguments,\n }),\n );\n }\n\n // Detect the use of `Math.random()` and add a warning.\n if (\n node.callee.type === 'MemberExpression' &&\n node.callee.object.type === 'Identifier' &&\n node.callee.object.name === 'Math' &&\n node.callee.property.type === 'Identifier' &&\n node.callee.property.name === 'random'\n ) {\n warnings.add(PostProcessWarning.UnsafeMathRandom);\n }\n },\n\n MemberExpression(path) {\n const { node } = path;\n\n // Replace `object.eval(foo)` with `(1, object.eval)(foo)`.\n if (\n node.property.type === 'Identifier' &&\n node.property.name === 'eval' &&\n // We only apply this to MemberExpressions that are the callee of CallExpression\n path.parent.type === 'CallExpression' &&\n path.parent.callee === node\n ) {\n path.replaceWith(\n objectEvalWrapper({\n OBJECT: node.object,\n REF: node.property,\n }),\n );\n }\n },\n\n Identifier(path) {\n const { node } = path;\n\n // Insert `regeneratorRuntime` global if it's used in the code.\n if (node.name === 'regeneratorRuntime') {\n const program = path.findParent(\n (parent) => parent.node.type === 'Program',\n );\n\n // We know that `program` is a Program node here, but this keeps\n // TypeScript happy.\n if (program?.node.type === 'Program') {\n const body = program.node.body[0];\n\n // This stops it from inserting `regeneratorRuntime` multiple times.\n if (\n body.type === 'VariableDeclaration' &&\n (body.declarations[0].id as Identifier).name ===\n 'regeneratorRuntime'\n ) {\n return;\n }\n\n program?.node.body.unshift(regeneratorRuntimeWrapper());\n }\n }\n },\n\n TemplateLiteral(path) {\n const { node } = path;\n\n // This checks if the template literal was visited before. Without this,\n // it would cause an infinite loop resulting in a stack overflow. We can't\n // skip the path here, because we need to visit the children of the node.\n if (path.getData('visited')) {\n return;\n }\n\n // Break up tokens that could be parsed as HTML comment terminators, or\n // `import()` statements.\n // For reference:\n // - https://github.com/endojs/endo/blob/70cc86eb400655e922413b99c38818d7b2e79da0/packages/ses/error-codes/SES_HTML_COMMENT_REJECTED.md\n // - https://github.com/MetaMask/snaps-monorepo/issues/505\n const [replacementQuasis, replacementExpressions] = node.quasis.reduce<\n [TemplateElement[], Expression[]]\n >(\n ([elements, expressions], quasi, index) => {\n // Note: Template literals have two variants, \"cooked\" and \"raw\". Here\n // we use the cooked version.\n // https://exploringjs.com/impatient-js/ch_template-literals.html#template-strings-cooked-vs-raw\n const tokens = breakTokensTemplateLiteral(\n quasi.value.cooked as string,\n );\n\n // Only update the node if something changed.\n if (tokens[0].length <= 1) {\n return [\n [...elements, quasi],\n [...expressions, node.expressions[index] as Expression],\n ];\n }\n\n return [\n [...elements, ...tokens[0]],\n [\n ...expressions,\n ...tokens[1],\n node.expressions[index] as Expression,\n ],\n ];\n },\n [[], []],\n );\n\n path.replaceWith(\n templateLiteral(\n replacementQuasis,\n replacementExpressions.filter(\n (expression) => expression !== undefined,\n ),\n ) as Node,\n );\n\n path.setData('visited', true);\n },\n\n StringLiteral(path) {\n const { node } = path;\n\n // Break up tokens that could be parsed as HTML comment terminators, or\n // `import()` statements.\n // For reference:\n // - https://github.com/endojs/endo/blob/70cc86eb400655e922413b99c38818d7b2e79da0/packages/ses/error-codes/SES_HTML_COMMENT_REJECTED.md\n // - https://github.com/MetaMask/snaps-monorepo/issues/505\n const tokens = breakTokens(node.value);\n\n // Only update the node if the string literal was broken up.\n if (tokens.length <= 1) {\n return;\n }\n\n const replacement = tokens\n .slice(1)\n .reduce<Expression>(\n (acc, value) => binaryExpression('+', acc, stringLiteral(value)),\n stringLiteral(tokens[0]),\n );\n\n path.replaceWith(replacement as Node);\n path.skip();\n },\n\n BinaryExpression(path) {\n const { node } = path;\n\n const errorMessage =\n 'Using HTML comments (`<!--` and `-->`) as operators is not allowed. The behaviour of ' +\n 'these comments is ambiguous, and differs per browser and environment. If you want ' +\n 'to use them as operators, break them up into separate characters, i.e., `a-- > b` ' +\n 'and `a < ! --b`.';\n\n if (\n node.operator === '<' &&\n isUnaryExpression(node.right) &&\n isUpdateExpression(node.right.argument) &&\n node.right.argument.operator === '--' &&\n node.left.end &&\n node.right.argument.argument.start\n ) {\n const expression = code.slice(\n node.left.end,\n node.right.argument.argument.start,\n );\n\n if (expression.includes('<!--')) {\n throw new Error(errorMessage);\n }\n }\n\n if (\n node.operator === '>' &&\n isUpdateExpression(node.left) &&\n node.left.operator === '--' &&\n node.left.argument.end &&\n node.right.start\n ) {\n const expression = code.slice(node.left.argument.end, node.right.start);\n\n if (expression.includes('-->')) {\n throw new Error(errorMessage);\n }\n }\n },\n };\n\n try {\n const file = transformSync(code, {\n // Prevent Babel from searching for a config file.\n configFile: false,\n\n parserOpts: {\n // Strict mode isn't enabled by default, so we need to enable it here.\n strictMode: true,\n\n // If this is disabled, the AST does not include any comments. This is\n // useful for performance reasons, and we use it for stripping comments.\n attachComment: !stripComments,\n },\n\n // By default, Babel optimises bundles that exceed 500 KB, but that\n // results in characters which look like HTML comments, which breaks SES.\n compact: false,\n\n // This configures Babel to generate a new source map from the existing\n // source map if specified. If `sourceMap` is `true` but an input source\n // map is not provided, a new source map will be generated instead.\n inputSourceMap,\n sourceMaps,\n\n plugins: [\n () => ({\n pre,\n visitor,\n }),\n ],\n });\n\n if (!file?.code) {\n throw new Error('Bundled code is empty.');\n }\n\n return {\n code: file.code,\n sourceMap: file.map,\n warnings: Array.from(warnings),\n };\n } catch (error) {\n throw new Error(`Failed to post process code:\\n${error.message}`);\n }\n}\n"],"mappings":"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","names":["PostProcessWarning"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-O4PW77JW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,281 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkH636DAOGjs = require('./chunk-H636DAOG.js');
4
+
5
+
6
+ var _chunkB3YQVRPEjs = require('./chunk-B3YQVRPE.js');
7
+
8
+
9
+
10
+ var _chunk4UMDRHDRjs = require('./chunk-4UMDRHDR.js');
11
+
12
+
13
+
14
+ var _chunkZRVOIW3Hjs = require('./chunk-ZRVOIW3H.js');
15
+
16
+
17
+
18
+ var _chunkMSUZTHYTjs = require('./chunk-MSUZTHYT.js');
19
+
20
+
21
+ var _chunkFTY3BOF7js = require('./chunk-FTY3BOF7.js');
22
+
23
+
24
+ var _chunk2QS3W66Jjs = require('./chunk-2QS3W66J.js');
25
+
26
+ // src/manifest/validation.ts
27
+ var _keytree = require('@metamask/key-tree');
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+ var _utils = require('@metamask/utils');
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+ var _superstruct = require('superstruct');
55
+ var FORBIDDEN_PURPOSES = [
56
+ _chunkMSUZTHYTjs.SIP_6_MAGIC_VALUE,
57
+ _chunkMSUZTHYTjs.STATE_ENCRYPTION_MAGIC_VALUE
58
+ ];
59
+ var FORBIDDEN_COIN_TYPES = [60];
60
+ var FORBIDDEN_PATHS = FORBIDDEN_COIN_TYPES.map((coinType) => [
61
+ "m",
62
+ "44'",
63
+ `${coinType}'`
64
+ ]);
65
+ var Bip32PathStruct = _superstruct.refine.call(void 0,
66
+ _superstruct.array.call(void 0, _superstruct.string.call(void 0, )),
67
+ "BIP-32 path",
68
+ (path) => {
69
+ if (path.length === 0) {
70
+ return "Path must be a non-empty BIP-32 derivation path array";
71
+ }
72
+ if (path[0] !== "m") {
73
+ return 'Path must start with "m".';
74
+ }
75
+ if (path.length < 3) {
76
+ return "Paths must have a length of at least three.";
77
+ }
78
+ if (path.slice(1).some((part) => !_keytree.isValidBIP32PathSegment.call(void 0, part))) {
79
+ return "Path must be a valid BIP-32 derivation path array.";
80
+ }
81
+ if (FORBIDDEN_PURPOSES.includes(path[1])) {
82
+ return `The purpose "${path[1]}" is not allowed for entropy derivation.`;
83
+ }
84
+ if (FORBIDDEN_PATHS.some(
85
+ (forbiddenPath) => _chunkFTY3BOF7js.isEqual.call(void 0, path.slice(0, forbiddenPath.length), forbiddenPath)
86
+ )) {
87
+ return `The path "${path.join(
88
+ "/"
89
+ )}" is not allowed for entropy derivation.`;
90
+ }
91
+ return true;
92
+ }
93
+ );
94
+ var bip32entropy = (struct) => _superstruct.refine.call(void 0, struct, "BIP-32 entropy", (value) => {
95
+ if (value.curve === "ed25519" && value.path.slice(1).some((part) => !part.endsWith("'"))) {
96
+ return "Ed25519 does not support unhardened paths.";
97
+ }
98
+ return true;
99
+ });
100
+ var Bip32EntropyStruct = bip32entropy(
101
+ _superstruct.type.call(void 0, {
102
+ path: Bip32PathStruct,
103
+ curve: _superstruct.enums.call(void 0, ["ed25519", "secp256k1"])
104
+ })
105
+ );
106
+ var SnapGetBip32EntropyPermissionsStruct = _superstruct.size.call(void 0,
107
+ _superstruct.array.call(void 0, Bip32EntropyStruct),
108
+ 1,
109
+ Infinity
110
+ );
111
+ var SemVerRangeStruct = _superstruct.refine.call(void 0, _superstruct.string.call(void 0, ), "SemVer range", (value) => {
112
+ if (_utils.isValidSemVerRange.call(void 0, value)) {
113
+ return true;
114
+ }
115
+ return "Expected a valid SemVer range.";
116
+ });
117
+ var SnapIdsStruct = _superstruct.refine.call(void 0,
118
+ _superstruct.record.call(void 0, _chunkH636DAOGjs.SnapIdStruct, _superstruct.object.call(void 0, { version: _superstruct.optional.call(void 0, SemVerRangeStruct) })),
119
+ "SnapIds",
120
+ (value) => {
121
+ if (Object.keys(value).length === 0) {
122
+ return false;
123
+ }
124
+ return true;
125
+ }
126
+ );
127
+ var ChainIdsStruct = _superstruct.size.call(void 0, _superstruct.array.call(void 0, _chunkB3YQVRPEjs.ChainIdStruct), 1, Infinity);
128
+ var LookupMatchersStruct = _superstruct.union.call(void 0, [
129
+ _superstruct.object.call(void 0, {
130
+ tlds: _superstruct.size.call(void 0, _superstruct.array.call(void 0, _superstruct.string.call(void 0, )), 1, Infinity)
131
+ }),
132
+ _superstruct.object.call(void 0, {
133
+ schemes: _superstruct.size.call(void 0, _superstruct.array.call(void 0, _superstruct.string.call(void 0, )), 1, Infinity)
134
+ }),
135
+ _superstruct.object.call(void 0, {
136
+ tlds: _superstruct.size.call(void 0, _superstruct.array.call(void 0, _superstruct.string.call(void 0, )), 1, Infinity),
137
+ schemes: _superstruct.size.call(void 0, _superstruct.array.call(void 0, _superstruct.string.call(void 0, )), 1, Infinity)
138
+ })
139
+ ]);
140
+ var MINIMUM_REQUEST_TIMEOUT = _utils.inMilliseconds.call(void 0, 5, _utils.Duration.Second);
141
+ var MAXIMUM_REQUEST_TIMEOUT = _utils.inMilliseconds.call(void 0, 3, _utils.Duration.Minute);
142
+ var MaxRequestTimeStruct = _superstruct.size.call(void 0,
143
+ _superstruct.integer.call(void 0, ),
144
+ MINIMUM_REQUEST_TIMEOUT,
145
+ MAXIMUM_REQUEST_TIMEOUT
146
+ );
147
+ var HandlerCaveatsStruct = _superstruct.object.call(void 0, {
148
+ maxRequestTime: _superstruct.optional.call(void 0, MaxRequestTimeStruct)
149
+ });
150
+ var PermissionsStruct = _superstruct.type.call(void 0, {
151
+ "endowment:cronjob": _superstruct.optional.call(void 0,
152
+ _superstruct.assign.call(void 0,
153
+ HandlerCaveatsStruct,
154
+ _superstruct.object.call(void 0, { jobs: _chunk2QS3W66Jjs.CronjobSpecificationArrayStruct })
155
+ )
156
+ ),
157
+ "endowment:ethereum-provider": _superstruct.optional.call(void 0, _superstruct.object.call(void 0, {})),
158
+ "endowment:keyring": _superstruct.optional.call(void 0,
159
+ _superstruct.assign.call(void 0, HandlerCaveatsStruct, _chunkZRVOIW3Hjs.KeyringOriginsStruct)
160
+ ),
161
+ "endowment:lifecycle-hooks": _superstruct.optional.call(void 0, HandlerCaveatsStruct),
162
+ "endowment:name-lookup": _superstruct.optional.call(void 0,
163
+ _superstruct.assign.call(void 0,
164
+ HandlerCaveatsStruct,
165
+ _superstruct.object.call(void 0, {
166
+ chains: _superstruct.optional.call(void 0, ChainIdsStruct),
167
+ matchers: _superstruct.optional.call(void 0, LookupMatchersStruct)
168
+ })
169
+ )
170
+ ),
171
+ "endowment:network-access": _superstruct.optional.call(void 0, _superstruct.object.call(void 0, {})),
172
+ "endowment:page-home": _superstruct.optional.call(void 0, HandlerCaveatsStruct),
173
+ "endowment:rpc": _superstruct.optional.call(void 0, _chunkZRVOIW3Hjs.RpcOriginsStruct),
174
+ "endowment:signature-insight": _superstruct.optional.call(void 0,
175
+ _superstruct.assign.call(void 0,
176
+ HandlerCaveatsStruct,
177
+ _superstruct.object.call(void 0, {
178
+ allowSignatureOrigin: _superstruct.optional.call(void 0, _superstruct.boolean.call(void 0, ))
179
+ })
180
+ )
181
+ ),
182
+ "endowment:transaction-insight": _superstruct.optional.call(void 0,
183
+ _superstruct.assign.call(void 0,
184
+ HandlerCaveatsStruct,
185
+ _superstruct.object.call(void 0, {
186
+ allowTransactionOrigin: _superstruct.optional.call(void 0, _superstruct.boolean.call(void 0, ))
187
+ })
188
+ )
189
+ ),
190
+ "endowment:webassembly": _superstruct.optional.call(void 0, _superstruct.object.call(void 0, {})),
191
+ snap_dialog: _superstruct.optional.call(void 0, _superstruct.object.call(void 0, {})),
192
+ snap_manageState: _superstruct.optional.call(void 0, _superstruct.object.call(void 0, {})),
193
+ snap_manageAccounts: _superstruct.optional.call(void 0, _superstruct.object.call(void 0, {})),
194
+ snap_notify: _superstruct.optional.call(void 0, _superstruct.object.call(void 0, {})),
195
+ snap_getBip32Entropy: _superstruct.optional.call(void 0, SnapGetBip32EntropyPermissionsStruct),
196
+ snap_getBip32PublicKey: _superstruct.optional.call(void 0, SnapGetBip32EntropyPermissionsStruct),
197
+ snap_getBip44Entropy: _superstruct.optional.call(void 0,
198
+ _superstruct.size.call(void 0,
199
+ _superstruct.array.call(void 0, _superstruct.object.call(void 0, { coinType: _superstruct.size.call(void 0, _superstruct.integer.call(void 0, ), 0, 2 ** 32 - 1) })),
200
+ 1,
201
+ Infinity
202
+ )
203
+ ),
204
+ snap_getEntropy: _superstruct.optional.call(void 0, _superstruct.object.call(void 0, {})),
205
+ snap_getLocale: _superstruct.optional.call(void 0, _superstruct.object.call(void 0, {})),
206
+ wallet_snap: _superstruct.optional.call(void 0, SnapIdsStruct)
207
+ });
208
+ var SnapAuxilaryFilesStruct = _superstruct.array.call(void 0, _superstruct.string.call(void 0, ));
209
+ var InitialConnectionsStruct = _superstruct.record.call(void 0,
210
+ _superstruct.intersection.call(void 0, [_superstruct.string.call(void 0, ), _chunk4UMDRHDRjs.uri.call(void 0, )]),
211
+ _superstruct.object.call(void 0, {})
212
+ );
213
+ var SnapManifestStruct = _superstruct.object.call(void 0, {
214
+ version: _utils.VersionStruct,
215
+ description: _superstruct.size.call(void 0, _superstruct.string.call(void 0, ), 1, 280),
216
+ proposedName: _superstruct.size.call(void 0, _superstruct.string.call(void 0, ), 1, 214),
217
+ repository: _superstruct.optional.call(void 0,
218
+ _superstruct.object.call(void 0, {
219
+ type: _superstruct.size.call(void 0, _superstruct.string.call(void 0, ), 1, Infinity),
220
+ url: _superstruct.size.call(void 0, _superstruct.string.call(void 0, ), 1, Infinity)
221
+ })
222
+ ),
223
+ source: _superstruct.object.call(void 0, {
224
+ shasum: _utils.ChecksumStruct,
225
+ location: _superstruct.object.call(void 0, {
226
+ npm: _superstruct.object.call(void 0, {
227
+ filePath: _superstruct.size.call(void 0, _superstruct.string.call(void 0, ), 1, Infinity),
228
+ iconPath: _superstruct.optional.call(void 0, _superstruct.size.call(void 0, _superstruct.string.call(void 0, ), 1, Infinity)),
229
+ packageName: _chunk4UMDRHDRjs.NameStruct,
230
+ registry: _superstruct.union.call(void 0, [
231
+ _superstruct.literal.call(void 0, "https://registry.npmjs.org"),
232
+ _superstruct.literal.call(void 0, "https://registry.npmjs.org/")
233
+ ])
234
+ })
235
+ }),
236
+ files: _superstruct.optional.call(void 0, SnapAuxilaryFilesStruct),
237
+ locales: _superstruct.optional.call(void 0, SnapAuxilaryFilesStruct)
238
+ }),
239
+ initialConnections: _superstruct.optional.call(void 0, InitialConnectionsStruct),
240
+ initialPermissions: PermissionsStruct,
241
+ manifestVersion: _superstruct.literal.call(void 0, "0.1"),
242
+ $schema: _superstruct.optional.call(void 0, _superstruct.string.call(void 0, ))
243
+ // enables JSON-Schema linting in VSC and other IDEs
244
+ });
245
+ function isSnapManifest(value) {
246
+ return _superstruct.is.call(void 0, value, SnapManifestStruct);
247
+ }
248
+ function assertIsSnapManifest(value) {
249
+ _utils.assertStruct.call(void 0,
250
+ value,
251
+ SnapManifestStruct,
252
+ `"${"snap.manifest.json" /* Manifest */}" is invalid`
253
+ );
254
+ }
255
+ function createSnapManifest(value) {
256
+ return _superstruct.create.call(void 0, value, SnapManifestStruct);
257
+ }
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+ exports.FORBIDDEN_COIN_TYPES = FORBIDDEN_COIN_TYPES; exports.Bip32PathStruct = Bip32PathStruct; exports.bip32entropy = bip32entropy; exports.Bip32EntropyStruct = Bip32EntropyStruct; exports.SnapGetBip32EntropyPermissionsStruct = SnapGetBip32EntropyPermissionsStruct; exports.SemVerRangeStruct = SemVerRangeStruct; exports.SnapIdsStruct = SnapIdsStruct; exports.ChainIdsStruct = ChainIdsStruct; exports.LookupMatchersStruct = LookupMatchersStruct; exports.MINIMUM_REQUEST_TIMEOUT = MINIMUM_REQUEST_TIMEOUT; exports.MAXIMUM_REQUEST_TIMEOUT = MAXIMUM_REQUEST_TIMEOUT; exports.MaxRequestTimeStruct = MaxRequestTimeStruct; exports.HandlerCaveatsStruct = HandlerCaveatsStruct; exports.PermissionsStruct = PermissionsStruct; exports.SnapAuxilaryFilesStruct = SnapAuxilaryFilesStruct; exports.InitialConnectionsStruct = InitialConnectionsStruct; exports.SnapManifestStruct = SnapManifestStruct; exports.isSnapManifest = isSnapManifest; exports.assertIsSnapManifest = assertIsSnapManifest; exports.createSnapManifest = createSnapManifest;
281
+ //# sourceMappingURL=chunk-OQSLMZJN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/manifest/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidBIP32PathSegment } from '@metamask/key-tree';\nimport type { InitialPermissions } from '@metamask/snaps-sdk';\nimport {\n assertStruct,\n ChecksumStruct,\n VersionStruct,\n isValidSemVerRange,\n inMilliseconds,\n Duration,\n} from '@metamask/utils';\nimport type { Infer, Struct } from 'superstruct';\nimport {\n array,\n boolean,\n create,\n enums,\n integer,\n is,\n literal,\n object,\n optional,\n refine,\n record,\n size,\n string,\n type,\n union,\n intersection,\n assign,\n} from 'superstruct';\n\nimport { isEqual } from '../array';\nimport { CronjobSpecificationArrayStruct } from '../cronjob';\nimport { SIP_6_MAGIC_VALUE, STATE_ENCRYPTION_MAGIC_VALUE } from '../entropy';\nimport { KeyringOriginsStruct, RpcOriginsStruct } from '../json-rpc';\nimport { ChainIdStruct } from '../namespace';\nimport { SnapIdStruct } from '../snaps';\nimport type { InferMatching } from '../structs';\nimport { NameStruct, NpmSnapFileNames, uri } from '../types';\n\n// BIP-43 purposes that cannot be used for entropy derivation. These are in the\n// string form, ending with `'`.\nconst FORBIDDEN_PURPOSES: string[] = [\n SIP_6_MAGIC_VALUE,\n STATE_ENCRYPTION_MAGIC_VALUE,\n];\n\nexport const FORBIDDEN_COIN_TYPES: number[] = [60];\nconst FORBIDDEN_PATHS: string[][] = FORBIDDEN_COIN_TYPES.map((coinType) => [\n 'm',\n \"44'\",\n `${coinType}'`,\n]);\n\nexport const Bip32PathStruct = refine(\n array(string()),\n 'BIP-32 path',\n (path: string[]) => {\n if (path.length === 0) {\n return 'Path must be a non-empty BIP-32 derivation path array';\n }\n\n if (path[0] !== 'm') {\n return 'Path must start with \"m\".';\n }\n\n if (path.length < 3) {\n return 'Paths must have a length of at least three.';\n }\n\n if (path.slice(1).some((part) => !isValidBIP32PathSegment(part))) {\n return 'Path must be a valid BIP-32 derivation path array.';\n }\n\n if (FORBIDDEN_PURPOSES.includes(path[1])) {\n return `The purpose \"${path[1]}\" is not allowed for entropy derivation.`;\n }\n\n if (\n FORBIDDEN_PATHS.some((forbiddenPath) =>\n isEqual(path.slice(0, forbiddenPath.length), forbiddenPath),\n )\n ) {\n return `The path \"${path.join(\n '/',\n )}\" is not allowed for entropy derivation.`;\n }\n\n return true;\n },\n);\n\nexport const bip32entropy = <\n Type extends { path: string[]; curve: string },\n Schema,\n>(\n struct: Struct<Type, Schema>,\n) =>\n refine(struct, 'BIP-32 entropy', (value) => {\n if (\n value.curve === 'ed25519' &&\n value.path.slice(1).some((part) => !part.endsWith(\"'\"))\n ) {\n return 'Ed25519 does not support unhardened paths.';\n }\n\n return true;\n });\n\n// Used outside @metamask/snap-utils\nexport const Bip32EntropyStruct = bip32entropy(\n type({\n path: Bip32PathStruct,\n curve: enums(['ed25519', 'secp256k1']),\n }),\n);\n\nexport type Bip32Entropy = Infer<typeof Bip32EntropyStruct>;\n\nexport const SnapGetBip32EntropyPermissionsStruct = size(\n array(Bip32EntropyStruct),\n 1,\n Infinity,\n);\n\nexport const SemVerRangeStruct = refine(string(), 'SemVer range', (value) => {\n if (isValidSemVerRange(value)) {\n return true;\n }\n return 'Expected a valid SemVer range.';\n});\n\nexport const SnapIdsStruct = refine(\n record(SnapIdStruct, object({ version: optional(SemVerRangeStruct) })),\n 'SnapIds',\n (value) => {\n if (Object.keys(value).length === 0) {\n return false;\n }\n\n return true;\n },\n);\n\nexport type SnapIds = Infer<typeof SnapIdsStruct>;\n\nexport const ChainIdsStruct = size(array(ChainIdStruct), 1, Infinity);\n\nexport const LookupMatchersStruct = union([\n object({\n tlds: size(array(string()), 1, Infinity),\n }),\n object({\n schemes: size(array(string()), 1, Infinity),\n }),\n object({\n tlds: size(array(string()), 1, Infinity),\n schemes: size(array(string()), 1, Infinity),\n }),\n]);\n\nexport const MINIMUM_REQUEST_TIMEOUT = inMilliseconds(5, Duration.Second);\nexport const MAXIMUM_REQUEST_TIMEOUT = inMilliseconds(3, Duration.Minute);\n\nexport const MaxRequestTimeStruct = size(\n integer(),\n MINIMUM_REQUEST_TIMEOUT,\n MAXIMUM_REQUEST_TIMEOUT,\n);\n\n// Utility type to union with for all handler structs\nexport const HandlerCaveatsStruct = object({\n maxRequestTime: optional(MaxRequestTimeStruct),\n});\n\nexport type HandlerCaveats = Infer<typeof HandlerCaveatsStruct>;\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const PermissionsStruct = type({\n 'endowment:cronjob': optional(\n assign(\n HandlerCaveatsStruct,\n object({ jobs: CronjobSpecificationArrayStruct }),\n ),\n ),\n 'endowment:ethereum-provider': optional(object({})),\n 'endowment:keyring': optional(\n assign(HandlerCaveatsStruct, KeyringOriginsStruct),\n ),\n 'endowment:lifecycle-hooks': optional(HandlerCaveatsStruct),\n 'endowment:name-lookup': optional(\n assign(\n HandlerCaveatsStruct,\n object({\n chains: optional(ChainIdsStruct),\n matchers: optional(LookupMatchersStruct),\n }),\n ),\n ),\n 'endowment:network-access': optional(object({})),\n 'endowment:page-home': optional(HandlerCaveatsStruct),\n 'endowment:rpc': optional(RpcOriginsStruct),\n 'endowment:signature-insight': optional(\n assign(\n HandlerCaveatsStruct,\n object({\n allowSignatureOrigin: optional(boolean()),\n }),\n ),\n ),\n 'endowment:transaction-insight': optional(\n assign(\n HandlerCaveatsStruct,\n object({\n allowTransactionOrigin: optional(boolean()),\n }),\n ),\n ),\n 'endowment:webassembly': optional(object({})),\n snap_dialog: optional(object({})),\n snap_manageState: optional(object({})),\n snap_manageAccounts: optional(object({})),\n snap_notify: optional(object({})),\n snap_getBip32Entropy: optional(SnapGetBip32EntropyPermissionsStruct),\n snap_getBip32PublicKey: optional(SnapGetBip32EntropyPermissionsStruct),\n snap_getBip44Entropy: optional(\n size(\n array(object({ coinType: size(integer(), 0, 2 ** 32 - 1) })),\n 1,\n Infinity,\n ),\n ),\n snap_getEntropy: optional(object({})),\n snap_getLocale: optional(object({})),\n wallet_snap: optional(SnapIdsStruct),\n});\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport type SnapPermissions = InferMatching<\n typeof PermissionsStruct,\n InitialPermissions\n>;\n\nexport const SnapAuxilaryFilesStruct = array(string());\n\nexport const InitialConnectionsStruct = record(\n intersection([string(), uri()]),\n object({}),\n);\n\nexport type InitialConnections = Infer<typeof InitialConnectionsStruct>;\n\nexport const SnapManifestStruct = object({\n version: VersionStruct,\n description: size(string(), 1, 280),\n proposedName: size(string(), 1, 214),\n repository: optional(\n object({\n type: size(string(), 1, Infinity),\n url: size(string(), 1, Infinity),\n }),\n ),\n source: object({\n shasum: ChecksumStruct,\n location: object({\n npm: object({\n filePath: size(string(), 1, Infinity),\n iconPath: optional(size(string(), 1, Infinity)),\n packageName: NameStruct,\n registry: union([\n literal('https://registry.npmjs.org'),\n literal('https://registry.npmjs.org/'),\n ]),\n }),\n }),\n files: optional(SnapAuxilaryFilesStruct),\n locales: optional(SnapAuxilaryFilesStruct),\n }),\n initialConnections: optional(InitialConnectionsStruct),\n initialPermissions: PermissionsStruct,\n manifestVersion: literal('0.1'),\n $schema: optional(string()), // enables JSON-Schema linting in VSC and other IDEs\n});\n\nexport type SnapManifest = Infer<typeof SnapManifestStruct>;\n\n/**\n * Check if the given value is a valid {@link SnapManifest} object.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid {@link SnapManifest} object.\n */\nexport function isSnapManifest(value: unknown): value is SnapManifest {\n return is(value, SnapManifestStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link SnapManifest} object.\n *\n * @param value - The value to check.\n * @throws If the value is not a valid {@link SnapManifest} object.\n */\nexport function assertIsSnapManifest(\n value: unknown,\n): asserts value is SnapManifest {\n assertStruct(\n value,\n SnapManifestStruct,\n `\"${NpmSnapFileNames.Manifest}\" is invalid`,\n );\n}\n\n/**\n * Creates a {@link SnapManifest} object from JSON.\n *\n * @param value - The value to check.\n * @throws If the value cannot be coerced to a {@link SnapManifest} object.\n * @returns The created {@link SnapManifest} object.\n */\nexport function createSnapManifest(value: unknown): SnapManifest {\n // TODO: Add a utility to prefix these errors similar to assertStruct\n return create(value, SnapManifestStruct);\n}\n"]}