@metamask/snaps-controllers 5.0.1 → 6.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 (532) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/dist/chunk-26FZJGWA.mjs +331 -0
  3. package/dist/chunk-26FZJGWA.mjs.map +1 -0
  4. package/dist/chunk-2SSKLA6H.mjs +47 -0
  5. package/dist/chunk-2SSKLA6H.mjs.map +1 -0
  6. package/dist/chunk-2WWTILPZ.js +101 -0
  7. package/dist/chunk-2WWTILPZ.js.map +1 -0
  8. package/dist/chunk-35RVMQQU.mjs +283 -0
  9. package/dist/chunk-35RVMQQU.mjs.map +1 -0
  10. package/dist/chunk-3EJ6JINY.mjs +1 -0
  11. package/dist/chunk-3EJ6JINY.mjs.map +1 -0
  12. package/dist/chunk-3RXU6FL7.js +354 -0
  13. package/dist/chunk-3RXU6FL7.js.map +1 -0
  14. package/dist/chunk-3ZTS7EYA.mjs +109 -0
  15. package/dist/chunk-3ZTS7EYA.mjs.map +1 -0
  16. package/dist/chunk-4ICLRPDE.mjs +354 -0
  17. package/dist/chunk-4ICLRPDE.mjs.map +1 -0
  18. package/dist/chunk-4X5GUCI4.js +1 -0
  19. package/dist/chunk-4X5GUCI4.js.map +1 -0
  20. package/dist/chunk-5526GKFY.mjs +101 -0
  21. package/dist/chunk-5526GKFY.mjs.map +1 -0
  22. package/dist/chunk-57XSIYLY.mjs +9 -0
  23. package/dist/chunk-57XSIYLY.mjs.map +1 -0
  24. package/dist/chunk-5AOHJSZ6.mjs +40 -0
  25. package/dist/chunk-5AOHJSZ6.mjs.map +1 -0
  26. package/dist/chunk-5JX3PHKY.mjs +7 -0
  27. package/dist/chunk-5JX3PHKY.mjs.map +1 -0
  28. package/dist/chunk-5UJDZGAF.mjs +19 -0
  29. package/dist/chunk-5UJDZGAF.mjs.map +1 -0
  30. package/dist/chunk-66XO4TRY.js +9 -0
  31. package/dist/chunk-66XO4TRY.js.map +1 -0
  32. package/dist/chunk-6I34XHMY.mjs +1 -0
  33. package/dist/chunk-6I34XHMY.mjs.map +1 -0
  34. package/dist/chunk-6JQAGWUX.mjs +2307 -0
  35. package/dist/chunk-6JQAGWUX.mjs.map +1 -0
  36. package/dist/chunk-6RHMHULS.js +7 -0
  37. package/dist/chunk-6RHMHULS.js.map +1 -0
  38. package/dist/chunk-7LDJN7LU.js +283 -0
  39. package/dist/chunk-7LDJN7LU.js.map +1 -0
  40. package/dist/chunk-7W4BE27D.mjs +1 -0
  41. package/dist/chunk-7W4BE27D.mjs.map +1 -0
  42. package/dist/chunk-A7QA5OIN.js +1 -0
  43. package/dist/chunk-A7QA5OIN.js.map +1 -0
  44. package/dist/chunk-AR5J3IYZ.js +1 -0
  45. package/dist/chunk-AR5J3IYZ.js.map +1 -0
  46. package/dist/chunk-BEEH4ZXK.js +1 -0
  47. package/dist/chunk-BEEH4ZXK.js.map +1 -0
  48. package/dist/chunk-BFD5P2VB.mjs +12 -0
  49. package/dist/chunk-BFD5P2VB.mjs.map +1 -0
  50. package/dist/chunk-BGJPFPCH.js +109 -0
  51. package/dist/chunk-BGJPFPCH.js.map +1 -0
  52. package/dist/chunk-BKAYI3FB.js +74 -0
  53. package/dist/chunk-BKAYI3FB.js.map +1 -0
  54. package/dist/chunk-BMLPPIKQ.js +38 -0
  55. package/dist/chunk-BMLPPIKQ.js.map +1 -0
  56. package/dist/chunk-BMNPP53N.js +1 -0
  57. package/dist/chunk-BMNPP53N.js.map +1 -0
  58. package/dist/chunk-BUPF6RN3.mjs +1 -0
  59. package/dist/chunk-BUPF6RN3.mjs.map +1 -0
  60. package/dist/chunk-DC3KUFAP.mjs +58 -0
  61. package/dist/chunk-DC3KUFAP.mjs.map +1 -0
  62. package/dist/chunk-DLLH2SFQ.js +19 -0
  63. package/dist/chunk-DLLH2SFQ.js.map +1 -0
  64. package/dist/chunk-DQPMF4WI.mjs +1 -0
  65. package/dist/chunk-DQPMF4WI.mjs.map +1 -0
  66. package/dist/chunk-DX3JFCRL.mjs +72 -0
  67. package/dist/chunk-DX3JFCRL.mjs.map +1 -0
  68. package/dist/chunk-E5PSKNI7.js +1 -0
  69. package/dist/chunk-E5PSKNI7.js.map +1 -0
  70. package/dist/chunk-EXN2TFDJ.js +38 -0
  71. package/dist/chunk-EXN2TFDJ.js.map +1 -0
  72. package/dist/chunk-F62W2GSZ.js +47 -0
  73. package/dist/chunk-F62W2GSZ.js.map +1 -0
  74. package/dist/chunk-FD37BGB7.mjs +1 -0
  75. package/dist/chunk-FD37BGB7.mjs.map +1 -0
  76. package/dist/chunk-FYDIMXGD.mjs +71 -0
  77. package/dist/chunk-FYDIMXGD.mjs.map +1 -0
  78. package/dist/chunk-H3QD2CYQ.mjs +38 -0
  79. package/dist/chunk-H3QD2CYQ.mjs.map +1 -0
  80. package/dist/chunk-I6HMKVV3.js +48 -0
  81. package/dist/chunk-I6HMKVV3.js.map +1 -0
  82. package/dist/chunk-IEFJGFVV.mjs +1 -0
  83. package/dist/chunk-IEFJGFVV.mjs.map +1 -0
  84. package/dist/chunk-J35UUTXN.mjs +1 -0
  85. package/dist/chunk-J35UUTXN.mjs.map +1 -0
  86. package/dist/chunk-JBMTTZHS.js +1 -0
  87. package/dist/chunk-JBMTTZHS.js.map +1 -0
  88. package/dist/chunk-JFXRELU2.mjs +39 -0
  89. package/dist/chunk-JFXRELU2.mjs.map +1 -0
  90. package/dist/chunk-JPJ2F22U.mjs +38 -0
  91. package/dist/chunk-JPJ2F22U.mjs.map +1 -0
  92. package/dist/chunk-KDQ6OXVG.js +39 -0
  93. package/dist/chunk-KDQ6OXVG.js.map +1 -0
  94. package/dist/chunk-KET5WAIE.mjs +1 -0
  95. package/dist/chunk-KET5WAIE.mjs.map +1 -0
  96. package/dist/chunk-KF6HZNN4.js +1 -0
  97. package/dist/chunk-KF6HZNN4.js.map +1 -0
  98. package/dist/chunk-LANLSIYZ.mjs +74 -0
  99. package/dist/chunk-LANLSIYZ.mjs.map +1 -0
  100. package/dist/chunk-LFWLV3SS.js +273 -0
  101. package/dist/chunk-LFWLV3SS.js.map +1 -0
  102. package/dist/chunk-MJOLPPQK.mjs +105 -0
  103. package/dist/chunk-MJOLPPQK.mjs.map +1 -0
  104. package/dist/chunk-N3MAPSR3.js +197 -0
  105. package/dist/chunk-N3MAPSR3.js.map +1 -0
  106. package/dist/chunk-NAJQX2WM.mjs +55 -0
  107. package/dist/chunk-NAJQX2WM.mjs.map +1 -0
  108. package/dist/chunk-NDOKX4CC.js +58 -0
  109. package/dist/chunk-NDOKX4CC.js.map +1 -0
  110. package/dist/chunk-NKMIKK4P.js +71 -0
  111. package/dist/chunk-NKMIKK4P.js.map +1 -0
  112. package/dist/chunk-NSOTRW3O.mjs +1 -0
  113. package/dist/chunk-NSOTRW3O.mjs.map +1 -0
  114. package/dist/chunk-OJ2YAMFL.mjs +1 -0
  115. package/dist/chunk-OJ2YAMFL.mjs.map +1 -0
  116. package/dist/chunk-OPH3RY2U.mjs +60 -0
  117. package/dist/chunk-OPH3RY2U.mjs.map +1 -0
  118. package/dist/chunk-OUYEWVXP.js +331 -0
  119. package/dist/chunk-OUYEWVXP.js.map +1 -0
  120. package/dist/chunk-OYSDB7WV.js +60 -0
  121. package/dist/chunk-OYSDB7WV.js.map +1 -0
  122. package/dist/chunk-OZPD234W.js +55 -0
  123. package/dist/chunk-OZPD234W.js.map +1 -0
  124. package/dist/chunk-SREHPG7K.js +40 -0
  125. package/dist/chunk-SREHPG7K.js.map +1 -0
  126. package/dist/chunk-U7REZSMO.js +1 -0
  127. package/dist/chunk-U7REZSMO.js.map +1 -0
  128. package/dist/chunk-UMS7NV46.mjs +59 -0
  129. package/dist/chunk-UMS7NV46.mjs.map +1 -0
  130. package/dist/chunk-V5F3LOTD.js +2307 -0
  131. package/dist/chunk-V5F3LOTD.js.map +1 -0
  132. package/dist/chunk-VADTO25Q.js +12 -0
  133. package/dist/chunk-VADTO25Q.js.map +1 -0
  134. package/dist/chunk-VK6JW7XB.js +1 -0
  135. package/dist/chunk-VK6JW7XB.js.map +1 -0
  136. package/dist/chunk-VZD5REFA.js +72 -0
  137. package/dist/chunk-VZD5REFA.js.map +1 -0
  138. package/dist/chunk-W6RU3LZS.mjs +1 -0
  139. package/dist/chunk-W6RU3LZS.mjs.map +1 -0
  140. package/dist/chunk-WCLBWRFH.js +1 -0
  141. package/dist/chunk-WCLBWRFH.js.map +1 -0
  142. package/dist/chunk-WFWBAJSP.js +38 -0
  143. package/dist/chunk-WFWBAJSP.js.map +1 -0
  144. package/dist/chunk-WMOR2T45.js +1 -0
  145. package/dist/chunk-WMOR2T45.js.map +1 -0
  146. package/dist/chunk-WUAYTNK4.mjs +92 -0
  147. package/dist/chunk-WUAYTNK4.mjs.map +1 -0
  148. package/dist/chunk-X57FJ67O.mjs +197 -0
  149. package/dist/chunk-X57FJ67O.mjs.map +1 -0
  150. package/dist/chunk-XEITRX5U.js +59 -0
  151. package/dist/chunk-XEITRX5U.js.map +1 -0
  152. package/dist/chunk-XQ2TCH36.mjs +48 -0
  153. package/dist/chunk-XQ2TCH36.mjs.map +1 -0
  154. package/dist/chunk-XW3CYXPK.js +105 -0
  155. package/dist/chunk-XW3CYXPK.js.map +1 -0
  156. package/dist/chunk-YRZVIDCF.mjs +38 -0
  157. package/dist/chunk-YRZVIDCF.mjs.map +1 -0
  158. package/dist/chunk-YYBXAUVN.js +1 -0
  159. package/dist/chunk-YYBXAUVN.js.map +1 -0
  160. package/dist/chunk-Z7J4BWYY.mjs +1 -0
  161. package/dist/chunk-Z7J4BWYY.mjs.map +1 -0
  162. package/dist/chunk-ZQHMLI2N.mjs +273 -0
  163. package/dist/chunk-ZQHMLI2N.mjs.map +1 -0
  164. package/dist/chunk-ZRHUHKGT.js +92 -0
  165. package/dist/chunk-ZRHUHKGT.js.map +1 -0
  166. package/dist/cronjob/CronjobController.js +41 -0
  167. package/dist/cronjob/CronjobController.js.map +1 -0
  168. package/dist/cronjob/CronjobController.mjs +41 -0
  169. package/dist/cronjob/CronjobController.mjs.map +1 -0
  170. package/dist/cronjob/index.js +41 -0
  171. package/dist/cronjob/index.js.map +1 -0
  172. package/dist/cronjob/index.mjs +41 -0
  173. package/dist/cronjob/index.mjs.map +1 -0
  174. package/dist/fsm.js +10 -0
  175. package/dist/fsm.js.map +1 -0
  176. package/dist/fsm.mjs +10 -0
  177. package/dist/fsm.mjs.map +1 -0
  178. package/dist/index.js +118 -0
  179. package/dist/index.js.map +1 -0
  180. package/dist/index.mjs +118 -0
  181. package/dist/index.mjs.map +1 -0
  182. package/dist/interface/SnapInterfaceController.js +9 -0
  183. package/dist/interface/SnapInterfaceController.js.map +1 -0
  184. package/dist/interface/SnapInterfaceController.mjs +9 -0
  185. package/dist/interface/SnapInterfaceController.mjs.map +1 -0
  186. package/dist/interface/index.js +10 -0
  187. package/dist/interface/index.js.map +1 -0
  188. package/dist/interface/index.mjs +10 -0
  189. package/dist/interface/index.mjs.map +1 -0
  190. package/dist/interface/utils.js +14 -0
  191. package/dist/interface/utils.js.map +1 -0
  192. package/dist/interface/utils.mjs +14 -0
  193. package/dist/interface/utils.mjs.map +1 -0
  194. package/dist/logging.js +8 -0
  195. package/dist/logging.js.map +1 -0
  196. package/dist/logging.mjs +8 -0
  197. package/dist/logging.mjs.map +1 -0
  198. package/dist/node.js +128 -0
  199. package/dist/node.js.map +1 -0
  200. package/dist/node.mjs +128 -0
  201. package/dist/node.mjs.map +1 -0
  202. package/dist/react-native.js +125 -0
  203. package/dist/react-native.js.map +1 -0
  204. package/dist/react-native.mjs +125 -0
  205. package/dist/react-native.mjs.map +1 -0
  206. package/dist/services/AbstractExecutionService.js +13 -0
  207. package/dist/services/AbstractExecutionService.js.map +1 -0
  208. package/dist/services/AbstractExecutionService.mjs +13 -0
  209. package/dist/services/AbstractExecutionService.mjs.map +1 -0
  210. package/dist/services/ExecutionService.js +2 -0
  211. package/dist/services/ExecutionService.js.map +1 -0
  212. package/dist/services/ExecutionService.mjs +2 -0
  213. package/dist/services/ExecutionService.mjs.map +1 -0
  214. package/dist/services/ProxyPostMessageStream.js +8 -0
  215. package/dist/services/ProxyPostMessageStream.js.map +1 -0
  216. package/dist/services/ProxyPostMessageStream.mjs +8 -0
  217. package/dist/services/ProxyPostMessageStream.mjs.map +1 -0
  218. package/dist/services/browser.js +40 -0
  219. package/dist/services/browser.js.map +1 -0
  220. package/dist/services/browser.mjs +40 -0
  221. package/dist/services/browser.mjs.map +1 -0
  222. package/dist/services/iframe/IframeExecutionService.js +12 -0
  223. package/dist/services/iframe/IframeExecutionService.js.map +1 -0
  224. package/dist/services/iframe/IframeExecutionService.mjs +12 -0
  225. package/dist/services/iframe/IframeExecutionService.mjs.map +1 -0
  226. package/dist/services/iframe/index.js +13 -0
  227. package/dist/services/iframe/index.js.map +1 -0
  228. package/dist/services/iframe/index.mjs +13 -0
  229. package/dist/services/iframe/index.mjs.map +1 -0
  230. package/dist/services/index.js +35 -0
  231. package/dist/services/index.js.map +1 -0
  232. package/dist/services/index.mjs +35 -0
  233. package/dist/services/index.mjs.map +1 -0
  234. package/dist/services/node-js/NodeProcessExecutionService.js +22 -0
  235. package/dist/services/node-js/NodeProcessExecutionService.js.map +1 -0
  236. package/dist/services/node-js/NodeProcessExecutionService.mjs +22 -0
  237. package/dist/services/node-js/NodeProcessExecutionService.mjs.map +1 -0
  238. package/dist/services/node-js/NodeThreadExecutionService.js +22 -0
  239. package/dist/services/node-js/NodeThreadExecutionService.js.map +1 -0
  240. package/dist/services/node-js/NodeThreadExecutionService.mjs +22 -0
  241. package/dist/services/node-js/NodeThreadExecutionService.mjs.map +1 -0
  242. package/dist/services/node-js/index.js +27 -0
  243. package/dist/services/node-js/index.js.map +1 -0
  244. package/dist/services/node-js/index.mjs +27 -0
  245. package/dist/services/node-js/index.mjs.map +1 -0
  246. package/dist/services/node.js +45 -0
  247. package/dist/services/node.js.map +1 -0
  248. package/dist/services/node.mjs +45 -0
  249. package/dist/services/node.mjs.map +1 -0
  250. package/dist/services/offscreen/OffscreenExecutionService.js +14 -0
  251. package/dist/services/offscreen/OffscreenExecutionService.js.map +1 -0
  252. package/dist/services/offscreen/OffscreenExecutionService.mjs +14 -0
  253. package/dist/services/offscreen/OffscreenExecutionService.mjs.map +1 -0
  254. package/dist/services/offscreen/index.js +15 -0
  255. package/dist/services/offscreen/index.js.map +1 -0
  256. package/dist/services/offscreen/index.mjs +15 -0
  257. package/dist/services/offscreen/index.mjs.map +1 -0
  258. package/dist/services/proxy/ProxyExecutionService.js +13 -0
  259. package/dist/services/proxy/ProxyExecutionService.js.map +1 -0
  260. package/dist/services/proxy/ProxyExecutionService.mjs +13 -0
  261. package/dist/services/proxy/ProxyExecutionService.mjs.map +1 -0
  262. package/dist/services/react-native.js +42 -0
  263. package/dist/services/react-native.js.map +1 -0
  264. package/dist/services/react-native.mjs +42 -0
  265. package/dist/services/react-native.mjs.map +1 -0
  266. package/dist/services/webview/WebViewExecutionService.js +15 -0
  267. package/dist/services/webview/WebViewExecutionService.js.map +1 -0
  268. package/dist/services/webview/WebViewExecutionService.mjs +15 -0
  269. package/dist/services/webview/WebViewExecutionService.mjs.map +1 -0
  270. package/dist/services/webview/WebViewMessageStream.js +8 -0
  271. package/dist/services/webview/WebViewMessageStream.js.map +1 -0
  272. package/dist/services/webview/WebViewMessageStream.mjs +8 -0
  273. package/dist/services/webview/WebViewMessageStream.mjs.map +1 -0
  274. package/dist/services/webview/index.js +16 -0
  275. package/dist/services/webview/index.js.map +1 -0
  276. package/dist/services/webview/index.mjs +16 -0
  277. package/dist/services/webview/index.mjs.map +1 -0
  278. package/dist/services/webworker/WebWorkerExecutionService.js +15 -0
  279. package/dist/services/webworker/WebWorkerExecutionService.js.map +1 -0
  280. package/dist/services/webworker/WebWorkerExecutionService.mjs +15 -0
  281. package/dist/services/webworker/WebWorkerExecutionService.mjs.map +1 -0
  282. package/dist/services/webworker/index.js +16 -0
  283. package/dist/services/webworker/index.js.map +1 -0
  284. package/dist/services/webworker/index.mjs +16 -0
  285. package/dist/services/webworker/index.mjs.map +1 -0
  286. package/dist/snaps/RequestQueue.js +8 -0
  287. package/dist/snaps/RequestQueue.js.map +1 -0
  288. package/dist/snaps/RequestQueue.mjs +8 -0
  289. package/dist/snaps/RequestQueue.mjs.map +1 -0
  290. package/dist/snaps/SnapController.js +30 -0
  291. package/dist/snaps/SnapController.js.map +1 -0
  292. package/dist/snaps/SnapController.mjs +30 -0
  293. package/dist/snaps/SnapController.mjs.map +1 -0
  294. package/dist/snaps/Timer.js +8 -0
  295. package/dist/snaps/Timer.js.map +1 -0
  296. package/dist/snaps/Timer.mjs +8 -0
  297. package/dist/snaps/Timer.mjs.map +1 -0
  298. package/dist/snaps/constants.js +8 -0
  299. package/dist/snaps/constants.js.map +1 -0
  300. package/dist/snaps/constants.mjs +8 -0
  301. package/dist/snaps/constants.mjs.map +1 -0
  302. package/dist/snaps/index.js +63 -0
  303. package/dist/snaps/index.js.map +1 -0
  304. package/dist/snaps/index.mjs +63 -0
  305. package/dist/snaps/index.mjs.map +1 -0
  306. package/dist/snaps/location/http.js +8 -0
  307. package/dist/snaps/location/http.js.map +1 -0
  308. package/dist/snaps/location/http.mjs +8 -0
  309. package/dist/snaps/location/http.mjs.map +1 -0
  310. package/dist/snaps/location/index.js +31 -0
  311. package/dist/snaps/location/index.js.map +1 -0
  312. package/dist/snaps/location/index.mjs +31 -0
  313. package/dist/snaps/location/index.mjs.map +1 -0
  314. package/dist/snaps/location/local.js +9 -0
  315. package/dist/snaps/location/local.js.map +1 -0
  316. package/dist/snaps/location/local.mjs +9 -0
  317. package/dist/snaps/location/local.mjs.map +1 -0
  318. package/dist/snaps/location/location.js +11 -0
  319. package/dist/snaps/location/location.js.map +1 -0
  320. package/dist/snaps/location/location.mjs +11 -0
  321. package/dist/snaps/location/location.mjs.map +1 -0
  322. package/dist/snaps/location/npm.js +18 -0
  323. package/dist/snaps/location/npm.js.map +1 -0
  324. package/dist/snaps/location/npm.mjs +18 -0
  325. package/dist/snaps/location/npm.mjs.map +1 -0
  326. package/dist/snaps/registry/index.js +13 -0
  327. package/dist/snaps/registry/index.js.map +1 -0
  328. package/dist/snaps/registry/index.mjs +13 -0
  329. package/dist/snaps/registry/index.mjs.map +1 -0
  330. package/dist/snaps/registry/json.js +9 -0
  331. package/dist/snaps/registry/json.js.map +1 -0
  332. package/dist/snaps/registry/json.mjs +9 -0
  333. package/dist/snaps/registry/json.mjs.map +1 -0
  334. package/dist/snaps/registry/registry.js +8 -0
  335. package/dist/snaps/registry/registry.js.map +1 -0
  336. package/dist/snaps/registry/registry.mjs +8 -0
  337. package/dist/snaps/registry/registry.mjs.map +1 -0
  338. package/dist/snaps/selectors.js +8 -0
  339. package/dist/snaps/selectors.js.map +1 -0
  340. package/dist/snaps/selectors.mjs +8 -0
  341. package/dist/snaps/selectors.mjs.map +1 -0
  342. package/dist/tsconfig.build.tsbuildinfo +1 -0
  343. package/dist/types/node.d.ts +2 -0
  344. package/dist/types/react-native.d.ts +2 -0
  345. package/dist/types/services/index.d.ts +0 -2
  346. package/dist/types/services/node.d.ts +2 -0
  347. package/dist/types/services/react-native.d.ts +2 -0
  348. package/dist/types/utils.d.ts +1 -1
  349. package/dist/types/vendor/global.d.js +1 -0
  350. package/dist/types/vendor/global.d.js.map +1 -0
  351. package/dist/types/vendor/global.d.mjs +1 -0
  352. package/dist/types/vendor/global.d.mjs.map +1 -0
  353. package/dist/types/vendor/readable-stream.d.js +1 -0
  354. package/dist/types/vendor/readable-stream.d.js.map +1 -0
  355. package/dist/types/vendor/readable-stream.d.mjs +1 -0
  356. package/dist/types/vendor/readable-stream.d.mjs.map +1 -0
  357. package/dist/types/vendor/zlib.d.js +1 -0
  358. package/dist/types/vendor/zlib.d.js.map +1 -0
  359. package/dist/types/vendor/zlib.d.mjs +1 -0
  360. package/dist/types/vendor/zlib.d.mjs.map +1 -0
  361. package/dist/utils.js +21 -0
  362. package/dist/utils.js.map +1 -0
  363. package/dist/utils.mjs +21 -0
  364. package/dist/utils.mjs.map +1 -0
  365. package/package.json +31 -22
  366. package/dist/cjs/cronjob/CronjobController.js +0 -296
  367. package/dist/cjs/cronjob/CronjobController.js.map +0 -1
  368. package/dist/cjs/cronjob/index.js +0 -20
  369. package/dist/cjs/cronjob/index.js.map +0 -1
  370. package/dist/cjs/fsm.js +0 -69
  371. package/dist/cjs/fsm.js.map +0 -1
  372. package/dist/cjs/index.js +0 -24
  373. package/dist/cjs/index.js.map +0 -1
  374. package/dist/cjs/interface/SnapInterfaceController.js +0 -166
  375. package/dist/cjs/interface/SnapInterfaceController.js.map +0 -1
  376. package/dist/cjs/interface/index.js +0 -20
  377. package/dist/cjs/interface/index.js.map +0 -1
  378. package/dist/cjs/interface/utils.js +0 -59
  379. package/dist/cjs/interface/utils.js.map +0 -1
  380. package/dist/cjs/logging.js +0 -15
  381. package/dist/cjs/logging.js.map +0 -1
  382. package/dist/cjs/services/AbstractExecutionService.js +0 -387
  383. package/dist/cjs/services/AbstractExecutionService.js.map +0 -1
  384. package/dist/cjs/services/ExecutionService.js +0 -7
  385. package/dist/cjs/services/ExecutionService.js.map +0 -1
  386. package/dist/cjs/services/ProxyPostMessageStream.js +0 -109
  387. package/dist/cjs/services/ProxyPostMessageStream.js.map +0 -1
  388. package/dist/cjs/services/browser.js +0 -33
  389. package/dist/cjs/services/browser.js.map +0 -1
  390. package/dist/cjs/services/iframe/IframeExecutionService.js +0 -54
  391. package/dist/cjs/services/iframe/IframeExecutionService.js.map +0 -1
  392. package/dist/cjs/services/iframe/index.js +0 -20
  393. package/dist/cjs/services/iframe/index.js.map +0 -1
  394. package/dist/cjs/services/index.js +0 -33
  395. package/dist/cjs/services/index.js.map +0 -1
  396. package/dist/cjs/services/node/NodeProcessExecutionService.js +0 -42
  397. package/dist/cjs/services/node/NodeProcessExecutionService.js.map +0 -1
  398. package/dist/cjs/services/node/NodeThreadExecutionService.js +0 -43
  399. package/dist/cjs/services/node/NodeThreadExecutionService.js.map +0 -1
  400. package/dist/cjs/services/node/index.js +0 -21
  401. package/dist/cjs/services/node/index.js.map +0 -1
  402. package/dist/cjs/services/offscreen/OffscreenExecutionService.js +0 -96
  403. package/dist/cjs/services/offscreen/OffscreenExecutionService.js.map +0 -1
  404. package/dist/cjs/services/offscreen/index.js +0 -20
  405. package/dist/cjs/services/offscreen/index.js.map +0 -1
  406. package/dist/cjs/services/proxy/ProxyExecutionService.js +0 -110
  407. package/dist/cjs/services/proxy/ProxyExecutionService.js.map +0 -1
  408. package/dist/cjs/services/webview/WebViewExecutionService.js +0 -99
  409. package/dist/cjs/services/webview/WebViewExecutionService.js.map +0 -1
  410. package/dist/cjs/services/webview/WebViewMessageStream.js +0 -127
  411. package/dist/cjs/services/webview/WebViewMessageStream.js.map +0 -1
  412. package/dist/cjs/services/webview/index.js +0 -20
  413. package/dist/cjs/services/webview/index.js.map +0 -1
  414. package/dist/cjs/services/webworker/WebWorkerExecutionService.js +0 -148
  415. package/dist/cjs/services/webworker/WebWorkerExecutionService.js.map +0 -1
  416. package/dist/cjs/services/webworker/index.js +0 -20
  417. package/dist/cjs/services/webworker/index.js.map +0 -1
  418. package/dist/cjs/snaps/RequestQueue.js +0 -63
  419. package/dist/cjs/snaps/RequestQueue.js.map +0 -1
  420. package/dist/cjs/snaps/SnapController.js +0 -1968
  421. package/dist/cjs/snaps/SnapController.js.map +0 -1
  422. package/dist/cjs/snaps/Timer.js +0 -117
  423. package/dist/cjs/snaps/Timer.js.map +0 -1
  424. package/dist/cjs/snaps/constants.js +0 -25
  425. package/dist/cjs/snaps/constants.js.map +0 -1
  426. package/dist/cjs/snaps/index.js +0 -23
  427. package/dist/cjs/snaps/index.js.map +0 -1
  428. package/dist/cjs/snaps/location/http.js +0 -106
  429. package/dist/cjs/snaps/location/http.js.map +0 -1
  430. package/dist/cjs/snaps/location/index.js +0 -23
  431. package/dist/cjs/snaps/location/index.js.map +0 -1
  432. package/dist/cjs/snaps/location/local.js +0 -93
  433. package/dist/cjs/snaps/location/local.js.map +0 -1
  434. package/dist/cjs/snaps/location/location.js +0 -34
  435. package/dist/cjs/snaps/location/location.js.map +0 -1
  436. package/dist/cjs/snaps/location/npm.js +0 -389
  437. package/dist/cjs/snaps/location/npm.js.map +0 -1
  438. package/dist/cjs/snaps/registry/index.js +0 -21
  439. package/dist/cjs/snaps/registry/index.js.map +0 -1
  440. package/dist/cjs/snaps/registry/json.js +0 -311
  441. package/dist/cjs/snaps/registry/json.js.map +0 -1
  442. package/dist/cjs/snaps/registry/registry.js +0 -18
  443. package/dist/cjs/snaps/registry/registry.js.map +0 -1
  444. package/dist/cjs/snaps/selectors.js +0 -13
  445. package/dist/cjs/snaps/selectors.js.map +0 -1
  446. package/dist/cjs/utils.js +0 -111
  447. package/dist/cjs/utils.js.map +0 -1
  448. package/dist/esm/cronjob/CronjobController.js +0 -281
  449. package/dist/esm/cronjob/CronjobController.js.map +0 -1
  450. package/dist/esm/cronjob/index.js +0 -3
  451. package/dist/esm/cronjob/index.js.map +0 -1
  452. package/dist/esm/fsm.js +0 -70
  453. package/dist/esm/fsm.js.map +0 -1
  454. package/dist/esm/index.js +0 -7
  455. package/dist/esm/index.js.map +0 -1
  456. package/dist/esm/interface/SnapInterfaceController.js +0 -158
  457. package/dist/esm/interface/SnapInterfaceController.js.map +0 -1
  458. package/dist/esm/interface/index.js +0 -3
  459. package/dist/esm/interface/index.js.map +0 -1
  460. package/dist/esm/interface/utils.js +0 -62
  461. package/dist/esm/interface/utils.js.map +0 -1
  462. package/dist/esm/logging.js +0 -10
  463. package/dist/esm/logging.js.map +0 -1
  464. package/dist/esm/services/AbstractExecutionService.js +0 -370
  465. package/dist/esm/services/AbstractExecutionService.js.map +0 -1
  466. package/dist/esm/services/ExecutionService.js +0 -4
  467. package/dist/esm/services/ExecutionService.js.map +0 -1
  468. package/dist/esm/services/ProxyPostMessageStream.js +0 -102
  469. package/dist/esm/services/ProxyPostMessageStream.js.map +0 -1
  470. package/dist/esm/services/browser.js +0 -10
  471. package/dist/esm/services/browser.js.map +0 -1
  472. package/dist/esm/services/iframe/IframeExecutionService.js +0 -44
  473. package/dist/esm/services/iframe/IframeExecutionService.js.map +0 -1
  474. package/dist/esm/services/iframe/index.js +0 -3
  475. package/dist/esm/services/iframe/index.js.map +0 -1
  476. package/dist/esm/services/index.js +0 -10
  477. package/dist/esm/services/index.js.map +0 -1
  478. package/dist/esm/services/node/NodeProcessExecutionService.js +0 -32
  479. package/dist/esm/services/node/NodeProcessExecutionService.js.map +0 -1
  480. package/dist/esm/services/node/NodeThreadExecutionService.js +0 -34
  481. package/dist/esm/services/node/NodeThreadExecutionService.js.map +0 -1
  482. package/dist/esm/services/node/index.js +0 -4
  483. package/dist/esm/services/node/index.js.map +0 -1
  484. package/dist/esm/services/offscreen/OffscreenExecutionService.js +0 -86
  485. package/dist/esm/services/offscreen/OffscreenExecutionService.js.map +0 -1
  486. package/dist/esm/services/offscreen/index.js +0 -3
  487. package/dist/esm/services/offscreen/index.js.map +0 -1
  488. package/dist/esm/services/proxy/ProxyExecutionService.js +0 -100
  489. package/dist/esm/services/proxy/ProxyExecutionService.js.map +0 -1
  490. package/dist/esm/services/webview/WebViewExecutionService.js +0 -89
  491. package/dist/esm/services/webview/WebViewExecutionService.js.map +0 -1
  492. package/dist/esm/services/webview/WebViewMessageStream.js +0 -119
  493. package/dist/esm/services/webview/WebViewMessageStream.js.map +0 -1
  494. package/dist/esm/services/webview/index.js +0 -3
  495. package/dist/esm/services/webview/index.js.map +0 -1
  496. package/dist/esm/services/webworker/WebWorkerExecutionService.js +0 -130
  497. package/dist/esm/services/webworker/WebWorkerExecutionService.js.map +0 -1
  498. package/dist/esm/services/webworker/index.js +0 -3
  499. package/dist/esm/services/webworker/index.js.map +0 -1
  500. package/dist/esm/snaps/RequestQueue.js +0 -53
  501. package/dist/esm/snaps/RequestQueue.js.map +0 -1
  502. package/dist/esm/snaps/SnapController.js +0 -1947
  503. package/dist/esm/snaps/SnapController.js.map +0 -1
  504. package/dist/esm/snaps/Timer.js +0 -107
  505. package/dist/esm/snaps/Timer.js.map +0 -1
  506. package/dist/esm/snaps/constants.js +0 -16
  507. package/dist/esm/snaps/constants.js.map +0 -1
  508. package/dist/esm/snaps/index.js +0 -6
  509. package/dist/esm/snaps/index.js.map +0 -1
  510. package/dist/esm/snaps/location/http.js +0 -96
  511. package/dist/esm/snaps/location/http.js.map +0 -1
  512. package/dist/esm/snaps/location/index.js +0 -6
  513. package/dist/esm/snaps/location/index.js.map +0 -1
  514. package/dist/esm/snaps/location/local.js +0 -83
  515. package/dist/esm/snaps/location/local.js.map +0 -1
  516. package/dist/esm/snaps/location/location.js +0 -30
  517. package/dist/esm/snaps/location/location.js.map +0 -1
  518. package/dist/esm/snaps/location/npm.js +0 -373
  519. package/dist/esm/snaps/location/npm.js.map +0 -1
  520. package/dist/esm/snaps/registry/index.js +0 -4
  521. package/dist/esm/snaps/registry/index.js.map +0 -1
  522. package/dist/esm/snaps/registry/json.js +0 -301
  523. package/dist/esm/snaps/registry/json.js.map +0 -1
  524. package/dist/esm/snaps/registry/registry.js +0 -8
  525. package/dist/esm/snaps/registry/registry.js.map +0 -1
  526. package/dist/esm/snaps/selectors.js +0 -3
  527. package/dist/esm/snaps/selectors.js.map +0 -1
  528. package/dist/esm/utils.js +0 -132
  529. package/dist/esm/utils.js.map +0 -1
  530. /package/dist/types/services/{node → node-js}/NodeProcessExecutionService.d.ts +0 -0
  531. /package/dist/types/services/{node → node-js}/NodeThreadExecutionService.d.ts +0 -0
  532. /package/dist/types/services/{node → node-js}/index.d.ts +0 -0
@@ -1,311 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "JsonSnapsRegistry", {
6
- enumerable: true,
7
- get: function() {
8
- return JsonSnapsRegistry;
9
- }
10
- });
11
- const _basecontroller = require("@metamask/base-controller");
12
- const _snapsregistry = require("@metamask/snaps-registry");
13
- const _snapsutils = require("@metamask/snaps-utils");
14
- const _utils = require("@metamask/utils");
15
- const _registry = require("./registry");
16
- function _check_private_redeclaration(obj, privateCollection) {
17
- if (privateCollection.has(obj)) {
18
- throw new TypeError("Cannot initialize the same private elements twice on an object");
19
- }
20
- }
21
- function _class_apply_descriptor_get(receiver, descriptor) {
22
- if (descriptor.get) {
23
- return descriptor.get.call(receiver);
24
- }
25
- return descriptor.value;
26
- }
27
- function _class_apply_descriptor_set(receiver, descriptor, value) {
28
- if (descriptor.set) {
29
- descriptor.set.call(receiver, value);
30
- } else {
31
- if (!descriptor.writable) {
32
- throw new TypeError("attempted to set read only private field");
33
- }
34
- descriptor.value = value;
35
- }
36
- }
37
- function _class_extract_field_descriptor(receiver, privateMap, action) {
38
- if (!privateMap.has(receiver)) {
39
- throw new TypeError("attempted to " + action + " private field on non-instance");
40
- }
41
- return privateMap.get(receiver);
42
- }
43
- function _class_private_field_get(receiver, privateMap) {
44
- var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
45
- return _class_apply_descriptor_get(receiver, descriptor);
46
- }
47
- function _class_private_field_init(obj, privateMap, value) {
48
- _check_private_redeclaration(obj, privateMap);
49
- privateMap.set(obj, value);
50
- }
51
- function _class_private_field_set(receiver, privateMap, value) {
52
- var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
53
- _class_apply_descriptor_set(receiver, descriptor, value);
54
- return value;
55
- }
56
- function _class_private_method_get(receiver, privateSet, fn) {
57
- if (!privateSet.has(receiver)) {
58
- throw new TypeError("attempted to get private field on non-instance");
59
- }
60
- return fn;
61
- }
62
- function _class_private_method_init(obj, privateSet) {
63
- _check_private_redeclaration(obj, privateSet);
64
- privateSet.add(obj);
65
- }
66
- // TODO: Replace with a Codefi URL
67
- const SNAP_REGISTRY_URL = 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/registry.json';
68
- const SNAP_REGISTRY_SIGNATURE_URL = 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/signature.json';
69
- const controllerName = 'SnapsRegistry';
70
- const defaultState = {
71
- database: null,
72
- lastUpdated: null
73
- };
74
- var _url = /*#__PURE__*/ new WeakMap(), _publicKey = /*#__PURE__*/ new WeakMap(), _fetchFunction = /*#__PURE__*/ new WeakMap(), _recentFetchThreshold = /*#__PURE__*/ new WeakMap(), _refetchOnAllowlistMiss = /*#__PURE__*/ new WeakMap(), _failOnUnavailableRegistry = /*#__PURE__*/ new WeakMap(), _currentUpdate = /*#__PURE__*/ new WeakMap(), _wasRecentlyFetched = /*#__PURE__*/ new WeakSet(), _triggerUpdate = /*#__PURE__*/ new WeakSet(), _update = /*#__PURE__*/ new WeakSet(), _getDatabase = /*#__PURE__*/ new WeakSet(), _getSingle = /*#__PURE__*/ new WeakSet(), _get = /*#__PURE__*/ new WeakSet(), _resolveVersion = /*#__PURE__*/ new WeakSet(), _getMetadata = /*#__PURE__*/ new WeakSet(), /**
75
- * Verify the signature of the registry.
76
- *
77
- * @param database - The registry database.
78
- * @param signature - The signature of the registry.
79
- * @throws If the signature is invalid.
80
- * @private
81
- */ _verifySignature = /*#__PURE__*/ new WeakSet(), _safeFetch = /*#__PURE__*/ new WeakSet();
82
- class JsonSnapsRegistry extends _basecontroller.BaseController {
83
- constructor({ messenger, state, url = {
84
- registry: SNAP_REGISTRY_URL,
85
- signature: SNAP_REGISTRY_SIGNATURE_URL
86
- }, publicKey, fetchFunction = globalThis.fetch.bind(globalThis), recentFetchThreshold = (0, _utils.inMilliseconds)(5, _utils.Duration.Minute), failOnUnavailableRegistry = true, refetchOnAllowlistMiss = true }){
87
- super({
88
- messenger,
89
- metadata: {
90
- database: {
91
- persist: true,
92
- anonymous: false
93
- },
94
- lastUpdated: {
95
- persist: true,
96
- anonymous: false
97
- }
98
- },
99
- name: controllerName,
100
- state: {
101
- ...defaultState,
102
- ...state
103
- }
104
- });
105
- _class_private_method_init(this, _wasRecentlyFetched);
106
- /**
107
- * Triggers an update of the registry database.
108
- *
109
- * If an existing update is in progress this function will await that update.
110
- */ _class_private_method_init(this, _triggerUpdate);
111
- /**
112
- * Updates the registry database if the registry hasn't been updated recently.
113
- *
114
- * NOTE: SHOULD NOT be called directly, instead `triggerUpdate` should be used.
115
- */ _class_private_method_init(this, _update);
116
- _class_private_method_init(this, _getDatabase);
117
- _class_private_method_init(this, _getSingle);
118
- _class_private_method_init(this, _get);
119
- /**
120
- * Find an allowlisted version within a specified version range. Otherwise return the version range itself.
121
- *
122
- * @param snapId - The ID of the snap we are trying to resolve a version for.
123
- * @param versionRange - The version range.
124
- * @param refetch - An optional flag used to determine if we are refetching the registry.
125
- * @returns An allowlisted version within the specified version range if available otherwise returns the input version range.
126
- */ _class_private_method_init(this, _resolveVersion);
127
- /**
128
- * Get metadata for the given snap ID.
129
- *
130
- * @param snapId - The ID of the snap to get metadata for.
131
- * @returns The metadata for the given snap ID, or `null` if the snap is not
132
- * verified.
133
- */ _class_private_method_init(this, _getMetadata);
134
- _class_private_method_init(this, _verifySignature);
135
- /**
136
- * Fetch the given URL, throwing if the response is not OK.
137
- *
138
- * @param url - The URL to fetch.
139
- * @returns The response body.
140
- * @private
141
- */ _class_private_method_init(this, _safeFetch);
142
- _class_private_field_init(this, _url, {
143
- writable: true,
144
- value: void 0
145
- });
146
- _class_private_field_init(this, _publicKey, {
147
- writable: true,
148
- value: void 0
149
- });
150
- _class_private_field_init(this, _fetchFunction, {
151
- writable: true,
152
- value: void 0
153
- });
154
- _class_private_field_init(this, _recentFetchThreshold, {
155
- writable: true,
156
- value: void 0
157
- });
158
- _class_private_field_init(this, _refetchOnAllowlistMiss, {
159
- writable: true,
160
- value: void 0
161
- });
162
- _class_private_field_init(this, _failOnUnavailableRegistry, {
163
- writable: true,
164
- value: void 0
165
- });
166
- _class_private_field_init(this, _currentUpdate, {
167
- writable: true,
168
- value: void 0
169
- });
170
- _class_private_field_set(this, _url, url);
171
- _class_private_field_set(this, _publicKey, publicKey);
172
- _class_private_field_set(this, _fetchFunction, fetchFunction);
173
- _class_private_field_set(this, _recentFetchThreshold, recentFetchThreshold);
174
- _class_private_field_set(this, _refetchOnAllowlistMiss, refetchOnAllowlistMiss);
175
- _class_private_field_set(this, _failOnUnavailableRegistry, failOnUnavailableRegistry);
176
- _class_private_field_set(this, _currentUpdate, null);
177
- this.messagingSystem.registerActionHandler('SnapsRegistry:get', async (...args)=>_class_private_method_get(this, _get, get).call(this, ...args));
178
- this.messagingSystem.registerActionHandler('SnapsRegistry:getMetadata', async (...args)=>_class_private_method_get(this, _getMetadata, getMetadata).call(this, ...args));
179
- this.messagingSystem.registerActionHandler('SnapsRegistry:resolveVersion', async (...args)=>_class_private_method_get(this, _resolveVersion, resolveVersion).call(this, ...args));
180
- this.messagingSystem.registerActionHandler('SnapsRegistry:update', async ()=>_class_private_method_get(this, _triggerUpdate, triggerUpdate).call(this));
181
- }
182
- }
183
- function wasRecentlyFetched() {
184
- return this.state.lastUpdated && Date.now() - this.state.lastUpdated < _class_private_field_get(this, _recentFetchThreshold);
185
- }
186
- async function triggerUpdate() {
187
- // If an update is ongoing, wait for that.
188
- if (_class_private_field_get(this, _currentUpdate)) {
189
- await _class_private_field_get(this, _currentUpdate);
190
- return;
191
- }
192
- // If no update exists, create promise and store globally.
193
- if (_class_private_field_get(this, _currentUpdate) === null) {
194
- _class_private_field_set(this, _currentUpdate, _class_private_method_get(this, _update, update).call(this));
195
- }
196
- await _class_private_field_get(this, _currentUpdate);
197
- _class_private_field_set(this, _currentUpdate, null);
198
- }
199
- async function update() {
200
- // No-op if we recently fetched the registry.
201
- if (_class_private_method_get(this, _wasRecentlyFetched, wasRecentlyFetched).call(this)) {
202
- return;
203
- }
204
- try {
205
- const database = await _class_private_method_get(this, _safeFetch, safeFetch).call(this, _class_private_field_get(this, _url).registry);
206
- if (_class_private_field_get(this, _publicKey)) {
207
- const signature = await _class_private_method_get(this, _safeFetch, safeFetch).call(this, _class_private_field_get(this, _url).signature);
208
- _class_private_method_get(this, _verifySignature, verifySignature).call(this, database, signature);
209
- }
210
- this.update((state)=>{
211
- state.database = JSON.parse(database);
212
- state.lastUpdated = Date.now();
213
- });
214
- } catch {
215
- // Ignore
216
- }
217
- }
218
- async function getDatabase() {
219
- if (this.state.database === null) {
220
- await _class_private_method_get(this, _triggerUpdate, triggerUpdate).call(this);
221
- }
222
- // If the database is still null and we require it, throw.
223
- if (_class_private_field_get(this, _failOnUnavailableRegistry) && this.state.database === null) {
224
- throw new Error('Snaps registry is unavailable, installation blocked.');
225
- }
226
- return this.state.database;
227
- }
228
- async function getSingle(snapId, snapInfo, refetch = false) {
229
- const database = await _class_private_method_get(this, _getDatabase, getDatabase).call(this);
230
- const blockedEntry = database?.blockedSnaps.find((blocked)=>{
231
- if ('id' in blocked) {
232
- return blocked.id === snapId && (0, _utils.satisfiesVersionRange)(snapInfo.version, blocked.versionRange);
233
- }
234
- return blocked.checksum === snapInfo.checksum;
235
- });
236
- if (blockedEntry) {
237
- return {
238
- status: _registry.SnapsRegistryStatus.Blocked,
239
- reason: blockedEntry.reason
240
- };
241
- }
242
- const verified = database?.verifiedSnaps[snapId];
243
- const version = verified?.versions?.[snapInfo.version];
244
- if (version && version.checksum === snapInfo.checksum) {
245
- return {
246
- status: _registry.SnapsRegistryStatus.Verified
247
- };
248
- }
249
- // For now, if we have an allowlist miss, we can refetch once and try again.
250
- if (_class_private_field_get(this, _refetchOnAllowlistMiss) && !refetch) {
251
- await _class_private_method_get(this, _triggerUpdate, triggerUpdate).call(this);
252
- return _class_private_method_get(this, _getSingle, getSingle).call(this, snapId, snapInfo, true);
253
- }
254
- return {
255
- status: _registry.SnapsRegistryStatus.Unverified
256
- };
257
- }
258
- async function get(snaps) {
259
- return Object.entries(snaps).reduce(async (previousPromise, [snapId, snapInfo])=>{
260
- const result = await _class_private_method_get(this, _getSingle, getSingle).call(this, snapId, snapInfo);
261
- const acc = await previousPromise;
262
- acc[snapId] = result;
263
- return acc;
264
- }, Promise.resolve({}));
265
- }
266
- async function resolveVersion(snapId, versionRange, refetch = false) {
267
- const database = await _class_private_method_get(this, _getDatabase, getDatabase).call(this);
268
- const versions = database?.verifiedSnaps[snapId]?.versions ?? null;
269
- if (!versions && _class_private_field_get(this, _refetchOnAllowlistMiss) && !refetch) {
270
- await _class_private_method_get(this, _triggerUpdate, triggerUpdate).call(this);
271
- return _class_private_method_get(this, _resolveVersion, resolveVersion).call(this, snapId, versionRange, true);
272
- }
273
- // If we cannot narrow down the version range we return the unaltered version range.
274
- if (!versions) {
275
- return versionRange;
276
- }
277
- const targetVersion = (0, _snapsutils.getTargetVersion)(Object.keys(versions), versionRange);
278
- if (!targetVersion && _class_private_field_get(this, _refetchOnAllowlistMiss) && !refetch) {
279
- await _class_private_method_get(this, _triggerUpdate, triggerUpdate).call(this);
280
- return _class_private_method_get(this, _resolveVersion, resolveVersion).call(this, snapId, versionRange, true);
281
- }
282
- // If we cannot narrow down the version range we return the unaltered version range.
283
- if (!targetVersion) {
284
- return versionRange;
285
- }
286
- // A semver version is technically also a valid semver range.
287
- (0, _utils.assertIsSemVerRange)(targetVersion);
288
- return targetVersion;
289
- }
290
- async function getMetadata(snapId) {
291
- const database = await _class_private_method_get(this, _getDatabase, getDatabase).call(this);
292
- return database?.verifiedSnaps[snapId]?.metadata ?? null;
293
- }
294
- function verifySignature(database, signature) {
295
- (0, _utils.assert)(_class_private_field_get(this, _publicKey), 'No public key provided.');
296
- const valid = (0, _snapsregistry.verify)({
297
- registry: database,
298
- signature: JSON.parse(signature),
299
- publicKey: _class_private_field_get(this, _publicKey)
300
- });
301
- (0, _utils.assert)(valid, 'Invalid registry signature.');
302
- }
303
- async function safeFetch(url) {
304
- const response = await _class_private_field_get(this, _fetchFunction).call(this, url);
305
- if (!response.ok) {
306
- throw new Error(`Failed to fetch ${url}.`);
307
- }
308
- return await response.text();
309
- }
310
-
311
- //# sourceMappingURL=json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/snaps/registry/json.ts"],"sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { SnapsRegistryDatabase } from '@metamask/snaps-registry';\nimport { verify } from '@metamask/snaps-registry';\nimport { getTargetVersion } from '@metamask/snaps-utils';\nimport type { Hex, SemVerRange, SemVerVersion } from '@metamask/utils';\nimport {\n assert,\n assertIsSemVerRange,\n Duration,\n inMilliseconds,\n satisfiesVersionRange,\n} from '@metamask/utils';\n\nimport type {\n SnapsRegistry,\n SnapsRegistryInfo,\n SnapsRegistryMetadata,\n SnapsRegistryRequest,\n SnapsRegistryResult,\n} from './registry';\nimport { SnapsRegistryStatus } from './registry';\n\n// TODO: Replace with a Codefi URL\nconst SNAP_REGISTRY_URL =\n 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/registry.json';\n\nconst SNAP_REGISTRY_SIGNATURE_URL =\n 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/signature.json';\n\ntype JsonSnapsRegistryUrl = {\n registry: string;\n signature: string;\n};\n\nexport type JsonSnapsRegistryArgs = {\n messenger: SnapsRegistryMessenger;\n state?: SnapsRegistryState;\n fetchFunction?: typeof fetch;\n url?: JsonSnapsRegistryUrl;\n recentFetchThreshold?: number;\n refetchOnAllowlistMiss?: boolean;\n failOnUnavailableRegistry?: boolean;\n publicKey?: Hex;\n};\n\nexport type GetResult = {\n type: `${typeof controllerName}:get`;\n handler: SnapsRegistry['get'];\n};\n\nexport type ResolveVersion = {\n type: `${typeof controllerName}:resolveVersion`;\n handler: SnapsRegistry['resolveVersion'];\n};\n\nexport type GetMetadata = {\n type: `${typeof controllerName}:getMetadata`;\n handler: SnapsRegistry['getMetadata'];\n};\n\nexport type Update = {\n type: `${typeof controllerName}:update`;\n handler: SnapsRegistry['update'];\n};\n\nexport type SnapsRegistryActions =\n | GetResult\n | GetMetadata\n | Update\n | ResolveVersion;\n\nexport type SnapsRegistryEvents = never;\n\nexport type SnapsRegistryMessenger = RestrictedControllerMessenger<\n 'SnapsRegistry',\n SnapsRegistryActions,\n SnapsRegistryEvents,\n SnapsRegistryActions['type'],\n SnapsRegistryEvents['type']\n>;\n\nexport type SnapsRegistryState = {\n database: SnapsRegistryDatabase | null;\n lastUpdated: number | null;\n};\n\nconst controllerName = 'SnapsRegistry';\n\nconst defaultState = {\n database: null,\n lastUpdated: null,\n};\n\nexport class JsonSnapsRegistry extends BaseController<\n typeof controllerName,\n SnapsRegistryState,\n SnapsRegistryMessenger\n> {\n #url: JsonSnapsRegistryUrl;\n\n #publicKey?: Hex;\n\n #fetchFunction: typeof fetch;\n\n #recentFetchThreshold: number;\n\n #refetchOnAllowlistMiss: boolean;\n\n #failOnUnavailableRegistry: boolean;\n\n #currentUpdate: Promise<void> | null;\n\n constructor({\n messenger,\n state,\n url = {\n registry: SNAP_REGISTRY_URL,\n signature: SNAP_REGISTRY_SIGNATURE_URL,\n },\n publicKey,\n fetchFunction = globalThis.fetch.bind(globalThis),\n recentFetchThreshold = inMilliseconds(5, Duration.Minute),\n failOnUnavailableRegistry = true,\n refetchOnAllowlistMiss = true,\n }: JsonSnapsRegistryArgs) {\n super({\n messenger,\n metadata: {\n database: { persist: true, anonymous: false },\n lastUpdated: { persist: true, anonymous: false },\n },\n name: controllerName,\n state: {\n ...defaultState,\n ...state,\n },\n });\n this.#url = url;\n this.#publicKey = publicKey;\n this.#fetchFunction = fetchFunction;\n this.#recentFetchThreshold = recentFetchThreshold;\n this.#refetchOnAllowlistMiss = refetchOnAllowlistMiss;\n this.#failOnUnavailableRegistry = failOnUnavailableRegistry;\n this.#currentUpdate = null;\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:get',\n async (...args) => this.#get(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:getMetadata',\n async (...args) => this.#getMetadata(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:resolveVersion',\n async (...args) => this.#resolveVersion(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:update',\n async () => this.#triggerUpdate(),\n );\n }\n\n #wasRecentlyFetched() {\n return (\n this.state.lastUpdated &&\n Date.now() - this.state.lastUpdated < this.#recentFetchThreshold\n );\n }\n\n /**\n * Triggers an update of the registry database.\n *\n * If an existing update is in progress this function will await that update.\n */\n async #triggerUpdate() {\n // If an update is ongoing, wait for that.\n if (this.#currentUpdate) {\n await this.#currentUpdate;\n return;\n }\n // If no update exists, create promise and store globally.\n if (this.#currentUpdate === null) {\n this.#currentUpdate = this.#update();\n }\n await this.#currentUpdate;\n this.#currentUpdate = null;\n }\n\n /**\n * Updates the registry database if the registry hasn't been updated recently.\n *\n * NOTE: SHOULD NOT be called directly, instead `triggerUpdate` should be used.\n */\n async #update() {\n // No-op if we recently fetched the registry.\n if (this.#wasRecentlyFetched()) {\n return;\n }\n\n try {\n const database = await this.#safeFetch(this.#url.registry);\n\n if (this.#publicKey) {\n const signature = await this.#safeFetch(this.#url.signature);\n this.#verifySignature(database, signature);\n }\n\n this.update((state) => {\n state.database = JSON.parse(database);\n state.lastUpdated = Date.now();\n });\n } catch {\n // Ignore\n }\n }\n\n async #getDatabase(): Promise<SnapsRegistryDatabase | null> {\n if (this.state.database === null) {\n await this.#triggerUpdate();\n }\n\n // If the database is still null and we require it, throw.\n if (this.#failOnUnavailableRegistry && this.state.database === null) {\n throw new Error('Snaps registry is unavailable, installation blocked.');\n }\n return this.state.database;\n }\n\n async #getSingle(\n snapId: string,\n snapInfo: SnapsRegistryInfo,\n refetch = false,\n ): Promise<SnapsRegistryResult> {\n const database = await this.#getDatabase();\n\n const blockedEntry = database?.blockedSnaps.find((blocked) => {\n if ('id' in blocked) {\n return (\n blocked.id === snapId &&\n satisfiesVersionRange(snapInfo.version, blocked.versionRange)\n );\n }\n\n return blocked.checksum === snapInfo.checksum;\n });\n\n if (blockedEntry) {\n return {\n status: SnapsRegistryStatus.Blocked,\n reason: blockedEntry.reason,\n };\n }\n\n const verified = database?.verifiedSnaps[snapId];\n const version = verified?.versions?.[snapInfo.version];\n if (version && version.checksum === snapInfo.checksum) {\n return { status: SnapsRegistryStatus.Verified };\n }\n // For now, if we have an allowlist miss, we can refetch once and try again.\n if (this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#getSingle(snapId, snapInfo, true);\n }\n return { status: SnapsRegistryStatus.Unverified };\n }\n\n async #get(\n snaps: SnapsRegistryRequest,\n ): Promise<Record<string, SnapsRegistryResult>> {\n return Object.entries(snaps).reduce<\n Promise<Record<string, SnapsRegistryResult>>\n >(async (previousPromise, [snapId, snapInfo]) => {\n const result = await this.#getSingle(snapId, snapInfo);\n const acc = await previousPromise;\n acc[snapId] = result;\n return acc;\n }, Promise.resolve({}));\n }\n\n /**\n * Find an allowlisted version within a specified version range. Otherwise return the version range itself.\n *\n * @param snapId - The ID of the snap we are trying to resolve a version for.\n * @param versionRange - The version range.\n * @param refetch - An optional flag used to determine if we are refetching the registry.\n * @returns An allowlisted version within the specified version range if available otherwise returns the input version range.\n */\n async #resolveVersion(\n snapId: string,\n versionRange: SemVerRange,\n refetch = false,\n ): Promise<SemVerRange> {\n const database = await this.#getDatabase();\n const versions = database?.verifiedSnaps[snapId]?.versions ?? null;\n\n if (!versions && this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#resolveVersion(snapId, versionRange, true);\n }\n\n // If we cannot narrow down the version range we return the unaltered version range.\n if (!versions) {\n return versionRange;\n }\n\n const targetVersion = getTargetVersion(\n Object.keys(versions) as SemVerVersion[],\n versionRange,\n );\n\n if (!targetVersion && this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#resolveVersion(snapId, versionRange, true);\n }\n\n // If we cannot narrow down the version range we return the unaltered version range.\n if (!targetVersion) {\n return versionRange;\n }\n\n // A semver version is technically also a valid semver range.\n assertIsSemVerRange(targetVersion);\n return targetVersion;\n }\n\n /**\n * Get metadata for the given snap ID.\n *\n * @param snapId - The ID of the snap to get metadata for.\n * @returns The metadata for the given snap ID, or `null` if the snap is not\n * verified.\n */\n async #getMetadata(snapId: string): Promise<SnapsRegistryMetadata | null> {\n const database = await this.#getDatabase();\n return database?.verifiedSnaps[snapId]?.metadata ?? null;\n }\n\n /**\n * Verify the signature of the registry.\n *\n * @param database - The registry database.\n * @param signature - The signature of the registry.\n * @throws If the signature is invalid.\n * @private\n */\n #verifySignature(database: string, signature: string) {\n assert(this.#publicKey, 'No public key provided.');\n\n const valid = verify({\n registry: database,\n signature: JSON.parse(signature),\n publicKey: this.#publicKey,\n });\n\n assert(valid, 'Invalid registry signature.');\n }\n\n /**\n * Fetch the given URL, throwing if the response is not OK.\n *\n * @param url - The URL to fetch.\n * @returns The response body.\n * @private\n */\n async #safeFetch(url: string) {\n const response = await this.#fetchFunction(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch ${url}.`);\n }\n\n return await response.text();\n }\n}\n"],"names":["JsonSnapsRegistry","SNAP_REGISTRY_URL","SNAP_REGISTRY_SIGNATURE_URL","controllerName","defaultState","database","lastUpdated","BaseController","constructor","messenger","state","url","registry","signature","publicKey","fetchFunction","globalThis","fetch","bind","recentFetchThreshold","inMilliseconds","Duration","Minute","failOnUnavailableRegistry","refetchOnAllowlistMiss","metadata","persist","anonymous","name","currentUpdate","messagingSystem","registerActionHandler","args","get","getMetadata","resolveVersion","triggerUpdate","Date","now","update","wasRecentlyFetched","safeFetch","verifySignature","JSON","parse","Error","snapId","snapInfo","refetch","getDatabase","blockedEntry","blockedSnaps","find","blocked","id","satisfiesVersionRange","version","versionRange","checksum","status","SnapsRegistryStatus","Blocked","reason","verified","verifiedSnaps","versions","Verified","getSingle","Unverified","snaps","Object","entries","reduce","previousPromise","result","acc","Promise","resolve","targetVersion","getTargetVersion","keys","assertIsSemVerRange","assert","valid","verify","response","ok","text"],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SnapsRegistryStatus", {
6
- enumerable: true,
7
- get: function() {
8
- return SnapsRegistryStatus;
9
- }
10
- });
11
- var SnapsRegistryStatus;
12
- (function(SnapsRegistryStatus) {
13
- SnapsRegistryStatus[SnapsRegistryStatus["Unverified"] = 0] = "Unverified";
14
- SnapsRegistryStatus[SnapsRegistryStatus["Blocked"] = 1] = "Blocked";
15
- SnapsRegistryStatus[SnapsRegistryStatus["Verified"] = 2] = "Verified";
16
- })(SnapsRegistryStatus || (SnapsRegistryStatus = {}));
17
-
18
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/snaps/registry/registry.ts"],"sourcesContent":["import type {\n BlockReason,\n SnapsRegistryDatabase,\n} from '@metamask/snaps-registry';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport type { SemVerRange, SemVerVersion } from '@metamask/utils';\n\nexport type SnapsRegistryInfo = { version: SemVerVersion; checksum: string };\nexport type SnapsRegistryRequest = Record<SnapId, SnapsRegistryInfo>;\nexport type SnapsRegistryMetadata =\n SnapsRegistryDatabase['verifiedSnaps'][SnapId]['metadata'];\n\n// TODO: Decide on names for these\nexport enum SnapsRegistryStatus {\n Unverified = 0,\n Blocked = 1,\n Verified = 2,\n}\n\nexport type SnapsRegistryResult = {\n status: SnapsRegistryStatus;\n reason?: BlockReason;\n};\n\nexport type SnapsRegistry = {\n get(\n snaps: SnapsRegistryRequest,\n ): Promise<Record<SnapId, SnapsRegistryResult>>;\n\n update(): Promise<void>;\n\n /**\n * Find an allowlisted version within a specified version range.\n *\n * @param snapId - The ID of the snap we are trying to resolve a version for.\n * @param versionRange - The version range.\n * @param refetch - An optional flag used to determine if we are refetching the registry.\n * @returns An allowlisted version within the specified version range.\n * @throws If an allowlisted version does not exist within the version range.\n */\n resolveVersion(\n snapId: SnapId,\n versionRange: SemVerRange,\n ): Promise<SemVerRange>;\n\n /**\n * Get metadata for the given snap ID.\n *\n * @param snapId - The ID of the snap to get metadata for.\n * @returns The metadata for the given snap ID, or `null` if the snap is not\n * verified.\n */\n getMetadata(snapId: SnapId): Promise<SnapsRegistryMetadata | null>;\n};\n"],"names":["SnapsRegistryStatus","Unverified","Blocked","Verified"],"mappings":";;;;;;;;;;IAaO;UAAKA,mBAAmB;IAAnBA,oBAAAA,oBACVC,gBAAa,KAAbA;IADUD,oBAAAA,oBAEVE,aAAU,KAAVA;IAFUF,oBAAAA,oBAGVG,cAAW,KAAXA;GAHUH,wBAAAA"}
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "getRunnableSnaps", {
6
- enumerable: true,
7
- get: function() {
8
- return getRunnableSnaps;
9
- }
10
- });
11
- const getRunnableSnaps = (snaps)=>snaps.filter((snap)=>snap.enabled && !snap.blocked);
12
-
13
- //# sourceMappingURL=selectors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/snaps/selectors.ts"],"sourcesContent":["import type { TruncatedSnap } from '@metamask/snaps-utils';\n\nexport const getRunnableSnaps = <Snap extends TruncatedSnap>(snaps: Snap[]) =>\n snaps.filter((snap) => snap.enabled && !snap.blocked);\n"],"names":["getRunnableSnaps","snaps","filter","snap","enabled","blocked"],"mappings":";;;;+BAEaA;;;eAAAA;;;AAAN,MAAMA,mBAAmB,CAA6BC,QAC3DA,MAAMC,MAAM,CAAC,CAACC,OAASA,KAAKC,OAAO,IAAI,CAACD,KAAKE,OAAO"}
package/dist/cjs/utils.js DELETED
@@ -1,111 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- setDiff: function() {
13
- return setDiff;
14
- },
15
- delay: function() {
16
- return delay;
17
- },
18
- delayWithTimer: function() {
19
- return delayWithTimer;
20
- },
21
- hasTimedOut: function() {
22
- return hasTimedOut;
23
- },
24
- withTimeout: function() {
25
- return withTimeout;
26
- },
27
- getSnapFiles: function() {
28
- return getSnapFiles;
29
- },
30
- fetchSnap: function() {
31
- return fetchSnap;
32
- }
33
- });
34
- const _snapssdk = require("@metamask/snaps-sdk");
35
- const _snapsutils = require("@metamask/snaps-utils");
36
- const _Timer = require("./snaps/Timer");
37
- function setDiff(objectA, objectB) {
38
- return Object.entries(objectA).reduce((acc, [key, value])=>{
39
- if (!(key in objectB)) {
40
- acc[key] = value;
41
- }
42
- return acc;
43
- }, {});
44
- }
45
- function delay(ms, result) {
46
- return delayWithTimer(new _Timer.Timer(ms), result);
47
- }
48
- function delayWithTimer(timer, result) {
49
- let rejectFunc;
50
- const promise = new Promise((resolve, reject)=>{
51
- timer.start(()=>{
52
- result === undefined ? resolve() : resolve(result);
53
- });
54
- rejectFunc = reject;
55
- });
56
- promise.cancel = ()=>{
57
- if (timer.status !== 'finished') {
58
- timer.cancel();
59
- rejectFunc(new Error('The delay has been canceled.'));
60
- }
61
- };
62
- return promise;
63
- }
64
- const hasTimedOut = Symbol('Used to check if the requested promise has timeout (see withTimeout)');
65
- async function withTimeout(promise, timerOrMs) {
66
- const timer = typeof timerOrMs === 'number' ? new _Timer.Timer(timerOrMs) : timerOrMs;
67
- const delayPromise = delayWithTimer(timer, hasTimedOut);
68
- try {
69
- return await Promise.race([
70
- promise,
71
- delayPromise
72
- ]);
73
- } finally{
74
- delayPromise.cancel();
75
- }
76
- }
77
- async function getSnapFiles(location, files) {
78
- if (!files || files.length === 0) {
79
- return [];
80
- }
81
- return await Promise.all(files.map(async (filePath)=>location.fetch(filePath)));
82
- }
83
- async function fetchSnap(snapId, location) {
84
- try {
85
- const manifest = await location.manifest();
86
- const sourceCode = await location.fetch(manifest.result.source.location.npm.filePath);
87
- const { iconPath } = manifest.result.source.location.npm;
88
- const svgIcon = iconPath ? await location.fetch(iconPath) : undefined;
89
- const auxiliaryFiles = await getSnapFiles(location, manifest.result.source.files);
90
- await Promise.all(auxiliaryFiles.map(async (file)=>{
91
- // This should still be safe
92
- // eslint-disable-next-line require-atomic-updates
93
- file.data.base64 = await (0, _snapsutils.encodeBase64)(file);
94
- }));
95
- const localizationFiles = await getSnapFiles(location, manifest.result.source.locales);
96
- const validatedLocalizationFiles = (0, _snapsutils.getValidatedLocalizationFiles)(localizationFiles);
97
- const files = {
98
- manifest,
99
- sourceCode,
100
- svgIcon,
101
- auxiliaryFiles,
102
- localizationFiles: validatedLocalizationFiles
103
- };
104
- await (0, _snapsutils.validateFetchedSnap)(files);
105
- return files;
106
- } catch (error) {
107
- throw new Error(`Failed to fetch snap "${snapId}": ${(0, _snapssdk.getErrorMessage)(error)}.`);
108
- }
109
- }
110
-
111
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils.ts"],"sourcesContent":["import type { SnapId } from '@metamask/snaps-sdk';\nimport { getErrorMessage } from '@metamask/snaps-sdk';\nimport {\n encodeBase64,\n getValidatedLocalizationFiles,\n validateFetchedSnap,\n} from '@metamask/snaps-utils';\n\nimport type { SnapLocation } from './snaps';\nimport { Timer } from './snaps/Timer';\n\n/**\n * Takes two objects and does a Set Difference of them.\n * Set Difference is generally defined as follows:\n * ```\n * 𝑥 ∈ A ∖ B ⟺ 𝑥 ∈ A ∧ 𝑥 ∉ B\n * ```\n * Meaning that the returned object contains all properties of A expect those that also\n * appear in B. Notice that properties that appear in B, but not in A, have no effect.\n *\n * @see [Set Difference]{@link https://proofwiki.org/wiki/Definition:Set_Difference}\n * @param objectA - The object on which the difference is being calculated.\n * @param objectB - The object whose properties will be removed from objectA.\n * @returns The objectA without properties from objectB.\n */\nexport function setDiff<\n ObjectA extends Record<any, unknown>,\n ObjectB extends Record<any, unknown>,\n>(objectA: ObjectA, objectB: ObjectB): Diff<ObjectA, ObjectB> {\n return Object.entries(objectA).reduce<Record<any, unknown>>(\n (acc, [key, value]) => {\n if (!(key in objectB)) {\n acc[key] = value;\n }\n return acc;\n },\n {},\n ) as Diff<ObjectA, ObjectB>;\n}\n\n/**\n * A Promise that delays its return for a given amount of milliseconds.\n *\n * @param ms - Milliseconds to delay the execution for.\n * @param result - The result to return from the Promise after delay.\n * @returns A promise that is void if no result provided, result otherwise.\n * @template Result - The `result`.\n */\nexport function delay<Result = void>(\n ms: number,\n result?: Result,\n): Promise<Result> & { cancel: () => void } {\n return delayWithTimer(new Timer(ms), result);\n}\n\n/**\n * A Promise that delays it's return by using a pausable Timer.\n *\n * @param timer - Timer used to control the delay.\n * @param result - The result to return from the Promise after delay.\n * @returns A promise that is void if no result provided, result otherwise.\n * @template Result - The `result`.\n */\nexport function delayWithTimer<Result = void>(\n timer: Timer,\n result?: Result,\n): Promise<Result> & { cancel: () => void } {\n let rejectFunc: (reason: Error) => void;\n const promise: any = new Promise<Result>((resolve: any, reject) => {\n timer.start(() => {\n result === undefined ? resolve() : resolve(result);\n });\n rejectFunc = reject;\n });\n\n promise.cancel = () => {\n if (timer.status !== 'finished') {\n timer.cancel();\n rejectFunc(new Error('The delay has been canceled.'));\n }\n };\n return promise;\n}\n\n/*\n * We use a Symbol instead of rejecting the promise so that Errors thrown\n * by the main promise will propagate.\n */\nexport const hasTimedOut = Symbol(\n 'Used to check if the requested promise has timeout (see withTimeout)',\n);\n\n/**\n * Executes the given Promise, if the Timer expires before the Promise settles, we return earlier.\n *\n * NOTE:** The given Promise is not cancelled or interrupted, and will continue to execute uninterrupted. We will just discard its result if it does not complete before the timeout.\n *\n * @param promise - The promise that you want to execute.\n * @param timerOrMs - The timer controlling the timeout or a ms value.\n * @returns The resolved `PromiseValue`, or the hasTimedOut symbol if\n * returning early.\n * @template PromiseValue - The value of the Promise.\n */\nexport async function withTimeout<PromiseValue = void>(\n promise: Promise<PromiseValue>,\n timerOrMs: Timer | number,\n): Promise<PromiseValue | typeof hasTimedOut> {\n const timer =\n typeof timerOrMs === 'number' ? new Timer(timerOrMs) : timerOrMs;\n const delayPromise = delayWithTimer(timer, hasTimedOut);\n try {\n return await Promise.race([promise, delayPromise]);\n } finally {\n delayPromise.cancel();\n }\n}\n\n/**\n * Checks whether the type is composed of literal types\n *\n * @returns @type {true} if whole type is composed of literals, @type {false} if whole type is not literals, @type {boolean} if mixed\n * @example\n * ```\n * type t1 = IsLiteral<1 | 2 | \"asd\" | true>;\n * // t1 = true\n *\n * type t2 = IsLiteral<number | string>;\n * // t2 = false\n *\n * type t3 = IsLiteral<1 | string>;\n * // t3 = boolean\n *\n * const s = Symbol();\n * type t4 = IsLiteral<typeof s>;\n * // t4 = true\n *\n * type t5 = IsLiteral<symbol>\n * // t5 = false;\n * ```\n */\ntype IsLiteral<Type> = Type extends string | number | boolean | symbol\n ? Extract<string | number | boolean | symbol, Type> extends never\n ? true\n : false\n : false;\n\n/**\n * Returns all keys of an object, that are literal, as an union\n *\n * @example\n * ```\n * type t1 = _LiteralKeys<{a: number, b: 0, c: 'foo', d: string}>\n * // t1 = 'b' | 'c'\n * ```\n * @see [Literal types]{@link https://www.typescriptlang.org/docs/handbook/literal-types.html}\n */\ntype LiteralKeys<Type> = NonNullable<\n {\n [Key in keyof Type]: IsLiteral<Key> extends true ? Key : never;\n }[keyof Type]\n>;\n\n/**\n * Returns all keys of an object, that are not literal, as an union\n *\n * @example\n * ```\n * type t1 = _NonLiteralKeys<{a: number, b: 0, c: 'foo', d: string}>\n * // t1 = 'a' | 'd'\n * ```\n * @see [Literal types]{@link https://www.typescriptlang.org/docs/handbook/literal-types.html}\n */\ntype NonLiteralKeys<Type> = NonNullable<\n {\n [Key in keyof Type]: IsLiteral<Key> extends false ? Key : never;\n }[keyof Type]\n>;\n\n/**\n * A set difference of two objects based on their keys\n *\n * @example\n * ```\n * type t1 = Diff<{a: string, b: string}, {a: number}>\n * // t1 = {b: string};\n * type t2 = Diff<{a: string, 0: string}, Record<string, unknown>>;\n * // t2 = { a?: string, 0: string};\n * type t3 = Diff<{a: string, 0: string, 1: string}, Record<1 | string, unknown>>;\n * // t3 = {a?: string, 0: string}\n * ```\n * @see {@link setDiff} for the main use-case\n */\nexport type Diff<First, Second> = Omit<First, LiteralKeys<Second>> &\n Partial<Pick<First, Extract<keyof First, NonLiteralKeys<Second>>>>;\n\n/**\n * Makes every specified property of the specified object type mutable.\n *\n * @template Type - The object whose readonly properties to make mutable.\n * @template TargetKey - The property key(s) to make mutable.\n */\nexport type Mutable<\n Type extends Record<string, unknown>,\n TargetKey extends string,\n> = {\n -readonly [Key in keyof Pick<Type, TargetKey>]: Type[Key];\n} & {\n [Key in keyof Omit<Type, TargetKey>]: Type[Key];\n};\n\n/**\n * Get all files in a Snap from an array of file paths.\n *\n * @param location - The location of the Snap.\n * @param files - The array of file paths.\n * @returns The array of files as {@link VirtualFile}s.\n */\nexport async function getSnapFiles(\n location: SnapLocation,\n files?: string[] | undefined,\n) {\n if (!files || files.length === 0) {\n return [];\n }\n\n return await Promise.all(\n files.map(async (filePath) => location.fetch(filePath)),\n );\n}\n\n/**\n * Fetch the Snap manifest, source code, and any other files from the given\n * location.\n *\n * @param snapId - The ID of the Snap to fetch.\n * @param location - The location of the Snap.\n * @returns The Snap files and location.\n * @throws If the Snap files are invalid, or if the Snap could not be fetched.\n */\nexport async function fetchSnap(snapId: SnapId, location: SnapLocation) {\n try {\n const manifest = await location.manifest();\n const sourceCode = await location.fetch(\n manifest.result.source.location.npm.filePath,\n );\n const { iconPath } = manifest.result.source.location.npm;\n const svgIcon = iconPath ? await location.fetch(iconPath) : undefined;\n\n const auxiliaryFiles = await getSnapFiles(\n location,\n manifest.result.source.files,\n );\n\n await Promise.all(\n auxiliaryFiles.map(async (file) => {\n // This should still be safe\n // eslint-disable-next-line require-atomic-updates\n file.data.base64 = await encodeBase64(file);\n }),\n );\n\n const localizationFiles = await getSnapFiles(\n location,\n manifest.result.source.locales,\n );\n\n const validatedLocalizationFiles =\n getValidatedLocalizationFiles(localizationFiles);\n\n const files = {\n manifest,\n sourceCode,\n svgIcon,\n auxiliaryFiles,\n localizationFiles: validatedLocalizationFiles,\n };\n\n await validateFetchedSnap(files);\n\n return files;\n } catch (error) {\n throw new Error(\n `Failed to fetch snap \"${snapId}\": ${getErrorMessage(error)}.`,\n );\n }\n}\n"],"names":["setDiff","delay","delayWithTimer","hasTimedOut","withTimeout","getSnapFiles","fetchSnap","objectA","objectB","Object","entries","reduce","acc","key","value","ms","result","Timer","timer","rejectFunc","promise","Promise","resolve","reject","start","undefined","cancel","status","Error","Symbol","timerOrMs","delayPromise","race","location","files","length","all","map","filePath","fetch","snapId","manifest","sourceCode","source","npm","iconPath","svgIcon","auxiliaryFiles","file","data","base64","encodeBase64","localizationFiles","locales","validatedLocalizationFiles","getValidatedLocalizationFiles","validateFetchedSnap","error","getErrorMessage"],"mappings":"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"}