@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
@@ -0,0 +1,273 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+
5
+
6
+ var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
7
+
8
+ // src/snaps/registry/json.ts
9
+ var _basecontroller = require('@metamask/base-controller');
10
+ var _snapsregistry = require('@metamask/snaps-registry');
11
+ var _snapsutils = require('@metamask/snaps-utils');
12
+
13
+
14
+
15
+
16
+
17
+
18
+ var _utils = require('@metamask/utils');
19
+ var SNAP_REGISTRY_URL = "https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/registry.json";
20
+ var SNAP_REGISTRY_SIGNATURE_URL = "https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/signature.json";
21
+ var controllerName = "SnapsRegistry";
22
+ var defaultState = {
23
+ database: null,
24
+ lastUpdated: null
25
+ };
26
+ var _url, _publicKey, _fetchFunction, _recentFetchThreshold, _refetchOnAllowlistMiss, _failOnUnavailableRegistry, _currentUpdate, _wasRecentlyFetched, wasRecentlyFetched_fn, _triggerUpdate, triggerUpdate_fn, _update, update_fn, _getDatabase, getDatabase_fn, _getSingle, getSingle_fn, _get, get_fn, _resolveVersion, resolveVersion_fn, _getMetadata, getMetadata_fn, _verifySignature, verifySignature_fn, _safeFetch, safeFetch_fn;
27
+ var JsonSnapsRegistry = class extends _basecontroller.BaseController {
28
+ constructor({
29
+ messenger,
30
+ state,
31
+ url = {
32
+ registry: SNAP_REGISTRY_URL,
33
+ signature: SNAP_REGISTRY_SIGNATURE_URL
34
+ },
35
+ publicKey,
36
+ fetchFunction = globalThis.fetch.bind(globalThis),
37
+ recentFetchThreshold = _utils.inMilliseconds.call(void 0, 5, _utils.Duration.Minute),
38
+ failOnUnavailableRegistry = true,
39
+ refetchOnAllowlistMiss = true
40
+ }) {
41
+ super({
42
+ messenger,
43
+ metadata: {
44
+ database: { persist: true, anonymous: false },
45
+ lastUpdated: { persist: true, anonymous: false }
46
+ },
47
+ name: controllerName,
48
+ state: {
49
+ ...defaultState,
50
+ ...state
51
+ }
52
+ });
53
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _wasRecentlyFetched);
54
+ /**
55
+ * Triggers an update of the registry database.
56
+ *
57
+ * If an existing update is in progress this function will await that update.
58
+ */
59
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _triggerUpdate);
60
+ /**
61
+ * Updates the registry database if the registry hasn't been updated recently.
62
+ *
63
+ * NOTE: SHOULD NOT be called directly, instead `triggerUpdate` should be used.
64
+ */
65
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _update);
66
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _getDatabase);
67
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _getSingle);
68
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _get);
69
+ /**
70
+ * Find an allowlisted version within a specified version range. Otherwise return the version range itself.
71
+ *
72
+ * @param snapId - The ID of the snap we are trying to resolve a version for.
73
+ * @param versionRange - The version range.
74
+ * @param refetch - An optional flag used to determine if we are refetching the registry.
75
+ * @returns An allowlisted version within the specified version range if available otherwise returns the input version range.
76
+ */
77
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _resolveVersion);
78
+ /**
79
+ * Get metadata for the given snap ID.
80
+ *
81
+ * @param snapId - The ID of the snap to get metadata for.
82
+ * @returns The metadata for the given snap ID, or `null` if the snap is not
83
+ * verified.
84
+ */
85
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _getMetadata);
86
+ /**
87
+ * Verify the signature of the registry.
88
+ *
89
+ * @param database - The registry database.
90
+ * @param signature - The signature of the registry.
91
+ * @throws If the signature is invalid.
92
+ * @private
93
+ */
94
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _verifySignature);
95
+ /**
96
+ * Fetch the given URL, throwing if the response is not OK.
97
+ *
98
+ * @param url - The URL to fetch.
99
+ * @returns The response body.
100
+ * @private
101
+ */
102
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _safeFetch);
103
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _url, void 0);
104
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _publicKey, void 0);
105
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _fetchFunction, void 0);
106
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _recentFetchThreshold, void 0);
107
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _refetchOnAllowlistMiss, void 0);
108
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _failOnUnavailableRegistry, void 0);
109
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _currentUpdate, void 0);
110
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _url, url);
111
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _publicKey, publicKey);
112
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _fetchFunction, fetchFunction);
113
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _recentFetchThreshold, recentFetchThreshold);
114
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _refetchOnAllowlistMiss, refetchOnAllowlistMiss);
115
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _failOnUnavailableRegistry, failOnUnavailableRegistry);
116
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _currentUpdate, null);
117
+ this.messagingSystem.registerActionHandler(
118
+ "SnapsRegistry:get",
119
+ async (...args) => _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _get, get_fn).call(this, ...args)
120
+ );
121
+ this.messagingSystem.registerActionHandler(
122
+ "SnapsRegistry:getMetadata",
123
+ async (...args) => _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getMetadata, getMetadata_fn).call(this, ...args)
124
+ );
125
+ this.messagingSystem.registerActionHandler(
126
+ "SnapsRegistry:resolveVersion",
127
+ async (...args) => _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _resolveVersion, resolveVersion_fn).call(this, ...args)
128
+ );
129
+ this.messagingSystem.registerActionHandler(
130
+ "SnapsRegistry:update",
131
+ async () => _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this)
132
+ );
133
+ }
134
+ };
135
+ _url = new WeakMap();
136
+ _publicKey = new WeakMap();
137
+ _fetchFunction = new WeakMap();
138
+ _recentFetchThreshold = new WeakMap();
139
+ _refetchOnAllowlistMiss = new WeakMap();
140
+ _failOnUnavailableRegistry = new WeakMap();
141
+ _currentUpdate = new WeakMap();
142
+ _wasRecentlyFetched = new WeakSet();
143
+ wasRecentlyFetched_fn = function() {
144
+ return this.state.lastUpdated && Date.now() - this.state.lastUpdated < _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _recentFetchThreshold);
145
+ };
146
+ _triggerUpdate = new WeakSet();
147
+ triggerUpdate_fn = async function() {
148
+ if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _currentUpdate)) {
149
+ await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _currentUpdate);
150
+ return;
151
+ }
152
+ if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _currentUpdate) === null) {
153
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _currentUpdate, _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _update, update_fn).call(this));
154
+ }
155
+ await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _currentUpdate);
156
+ _chunkEXN2TFDJjs.__privateSet.call(void 0, this, _currentUpdate, null);
157
+ };
158
+ _update = new WeakSet();
159
+ update_fn = async function() {
160
+ if (_chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _wasRecentlyFetched, wasRecentlyFetched_fn).call(this)) {
161
+ return;
162
+ }
163
+ try {
164
+ const database = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _safeFetch, safeFetch_fn).call(this, _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _url).registry);
165
+ if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _publicKey)) {
166
+ const signature = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _safeFetch, safeFetch_fn).call(this, _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _url).signature);
167
+ _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _verifySignature, verifySignature_fn).call(this, database, signature);
168
+ }
169
+ this.update((state) => {
170
+ state.database = JSON.parse(database);
171
+ state.lastUpdated = Date.now();
172
+ });
173
+ } catch (e) {
174
+ }
175
+ };
176
+ _getDatabase = new WeakSet();
177
+ getDatabase_fn = async function() {
178
+ if (this.state.database === null) {
179
+ await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this);
180
+ }
181
+ if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _failOnUnavailableRegistry) && this.state.database === null) {
182
+ throw new Error("Snaps registry is unavailable, installation blocked.");
183
+ }
184
+ return this.state.database;
185
+ };
186
+ _getSingle = new WeakSet();
187
+ getSingle_fn = async function(snapId, snapInfo, refetch = false) {
188
+ const database = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getDatabase, getDatabase_fn).call(this);
189
+ const blockedEntry = _optionalChain([database, 'optionalAccess', _ => _.blockedSnaps, 'access', _2 => _2.find, 'call', _3 => _3((blocked) => {
190
+ if ("id" in blocked) {
191
+ return blocked.id === snapId && _utils.satisfiesVersionRange.call(void 0, snapInfo.version, blocked.versionRange);
192
+ }
193
+ return blocked.checksum === snapInfo.checksum;
194
+ })]);
195
+ if (blockedEntry) {
196
+ return {
197
+ status: 1 /* Blocked */,
198
+ reason: blockedEntry.reason
199
+ };
200
+ }
201
+ const verified = _optionalChain([database, 'optionalAccess', _4 => _4.verifiedSnaps, 'access', _5 => _5[snapId]]);
202
+ const version = _optionalChain([verified, 'optionalAccess', _6 => _6.versions, 'optionalAccess', _7 => _7[snapInfo.version]]);
203
+ if (version && version.checksum === snapInfo.checksum) {
204
+ return { status: 2 /* Verified */ };
205
+ }
206
+ if (_chunkEXN2TFDJjs.__privateGet.call(void 0, this, _refetchOnAllowlistMiss) && !refetch) {
207
+ await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this);
208
+ return _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getSingle, getSingle_fn).call(this, snapId, snapInfo, true);
209
+ }
210
+ return { status: 0 /* Unverified */ };
211
+ };
212
+ _get = new WeakSet();
213
+ get_fn = async function(snaps) {
214
+ return Object.entries(snaps).reduce(async (previousPromise, [snapId, snapInfo]) => {
215
+ const result = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getSingle, getSingle_fn).call(this, snapId, snapInfo);
216
+ const acc = await previousPromise;
217
+ acc[snapId] = result;
218
+ return acc;
219
+ }, Promise.resolve({}));
220
+ };
221
+ _resolveVersion = new WeakSet();
222
+ resolveVersion_fn = async function(snapId, versionRange, refetch = false) {
223
+ const database = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getDatabase, getDatabase_fn).call(this);
224
+ const versions = _nullishCoalesce(_optionalChain([database, 'optionalAccess', _8 => _8.verifiedSnaps, 'access', _9 => _9[snapId], 'optionalAccess', _10 => _10.versions]), () => ( null));
225
+ if (!versions && _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _refetchOnAllowlistMiss) && !refetch) {
226
+ await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this);
227
+ return _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _resolveVersion, resolveVersion_fn).call(this, snapId, versionRange, true);
228
+ }
229
+ if (!versions) {
230
+ return versionRange;
231
+ }
232
+ const targetVersion = _snapsutils.getTargetVersion.call(void 0,
233
+ Object.keys(versions),
234
+ versionRange
235
+ );
236
+ if (!targetVersion && _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _refetchOnAllowlistMiss) && !refetch) {
237
+ await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerUpdate, triggerUpdate_fn).call(this);
238
+ return _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _resolveVersion, resolveVersion_fn).call(this, snapId, versionRange, true);
239
+ }
240
+ if (!targetVersion) {
241
+ return versionRange;
242
+ }
243
+ _utils.assertIsSemVerRange.call(void 0, targetVersion);
244
+ return targetVersion;
245
+ };
246
+ _getMetadata = new WeakSet();
247
+ getMetadata_fn = async function(snapId) {
248
+ const database = await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _getDatabase, getDatabase_fn).call(this);
249
+ return _nullishCoalesce(_optionalChain([database, 'optionalAccess', _11 => _11.verifiedSnaps, 'access', _12 => _12[snapId], 'optionalAccess', _13 => _13.metadata]), () => ( null));
250
+ };
251
+ _verifySignature = new WeakSet();
252
+ verifySignature_fn = function(database, signature) {
253
+ _utils.assert.call(void 0, _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _publicKey), "No public key provided.");
254
+ const valid = _snapsregistry.verify.call(void 0, {
255
+ registry: database,
256
+ signature: JSON.parse(signature),
257
+ publicKey: _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _publicKey)
258
+ });
259
+ _utils.assert.call(void 0, valid, "Invalid registry signature.");
260
+ };
261
+ _safeFetch = new WeakSet();
262
+ safeFetch_fn = async function(url) {
263
+ const response = await _chunkEXN2TFDJjs.__privateGet.call(void 0, this, _fetchFunction).call(this, url);
264
+ if (!response.ok) {
265
+ throw new Error(`Failed to fetch ${url}.`);
266
+ }
267
+ return await response.text();
268
+ };
269
+
270
+
271
+
272
+ exports.JsonSnapsRegistry = JsonSnapsRegistry;
273
+ //# sourceMappingURL=chunk-LFWLV3SS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/snaps/registry/json.ts"],"names":[],"mappings":";;;;;;;;AACA,SAAS,sBAAsB;AAE/B,SAAS,cAAc;AACvB,SAAS,wBAAwB;AAEjC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAYP,IAAM,oBACJ;AAEF,IAAM,8BACJ;AA2DF,IAAM,iBAAiB;AAEvB,IAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,aAAa;AACf;AA5FA;AA8FO,IAAM,oBAAN,cAAgC,eAIrC;AAAA,EAeA,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA;AAAA,IACA,gBAAgB,WAAW,MAAM,KAAK,UAAU;AAAA,IAChD,uBAAuB,eAAe,GAAG,SAAS,MAAM;AAAA,IACxD,4BAA4B;AAAA,IAC5B,yBAAyB;AAAA,EAC3B,GAA0B;AACxB,UAAM;AAAA,MACJ;AAAA,MACA,UAAU;AAAA,QACR,UAAU,EAAE,SAAS,MAAM,WAAW,MAAM;AAAA,QAC5C,aAAa,EAAE,SAAS,MAAM,WAAW,MAAM;AAAA,MACjD;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,IACF,CAAC;AA8BH;AAYA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AAmBN;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AAuBN,uBAAM;AAYN,uBAAM;AAsCN,uBAAM;AAqBN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AA6CN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AAaN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAM;AA9QN;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AA2BE,uBAAK,MAAO;AACZ,uBAAK,YAAa;AAClB,uBAAK,gBAAiB;AACtB,uBAAK,uBAAwB;AAC7B,uBAAK,yBAA0B;AAC/B,uBAAK,4BAA6B;AAClC,uBAAK,gBAAiB;AAEtB,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,UAAU,SAAS,sBAAK,cAAL,WAAU,GAAG;AAAA,IAClC;AAEA,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,UAAU,SAAS,sBAAK,8BAAL,WAAkB,GAAG;AAAA,IAC1C;AAEA,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,UAAU,SAAS,sBAAK,oCAAL,WAAqB,GAAG;AAAA,IAC7C;AAEA,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,YAAY,sBAAK,kCAAL;AAAA,IACd;AAAA,EACF;AAoNF;AAtRE;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAwDA;AAAA,wBAAmB,WAAG;AACpB,SACE,KAAK,MAAM,eACX,KAAK,IAAI,IAAI,KAAK,MAAM,cAAc,mBAAK;AAE/C;AAOM;AAAA,mBAAc,iBAAG;AAErB,MAAI,mBAAK,iBAAgB;AACvB,UAAM,mBAAK;AACX;AAAA,EACF;AAEA,MAAI,mBAAK,oBAAmB,MAAM;AAChC,uBAAK,gBAAiB,sBAAK,oBAAL;AAAA,EACxB;AACA,QAAM,mBAAK;AACX,qBAAK,gBAAiB;AACxB;AAOM;AAAA,YAAO,iBAAG;AAEd,MAAI,sBAAK,4CAAL,YAA4B;AAC9B;AAAA,EACF;AAEA,MAAI;AACF,UAAM,WAAW,MAAM,sBAAK,0BAAL,WAAgB,mBAAK,MAAK;AAEjD,QAAI,mBAAK,aAAY;AACnB,YAAM,YAAY,MAAM,sBAAK,0BAAL,WAAgB,mBAAK,MAAK;AAClD,4BAAK,sCAAL,WAAsB,UAAU;AAAA,IAClC;AAEA,SAAK,OAAO,CAAC,UAAU;AACrB,YAAM,WAAW,KAAK,MAAM,QAAQ;AACpC,YAAM,cAAc,KAAK,IAAI;AAAA,IAC/B,CAAC;AAAA,EACH,QAAQ;AAAA,EAER;AACF;AAEM;AAAA,iBAAY,iBAA0C;AAC1D,MAAI,KAAK,MAAM,aAAa,MAAM;AAChC,UAAM,sBAAK,kCAAL;AAAA,EACR;AAGA,MAAI,mBAAK,+BAA8B,KAAK,MAAM,aAAa,MAAM;AACnE,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AACA,SAAO,KAAK,MAAM;AACpB;AAEM;AAAA,eAAU,eACd,QACA,UACA,UAAU,OACoB;AAC9B,QAAM,WAAW,MAAM,sBAAK,8BAAL;AAEvB,QAAM,eAAe,UAAU,aAAa,KAAK,CAAC,YAAY;AAC5D,QAAI,QAAQ,SAAS;AACnB,aACE,QAAQ,OAAO,UACf,sBAAsB,SAAS,SAAS,QAAQ,YAAY;AAAA,IAEhE;AAEA,WAAO,QAAQ,aAAa,SAAS;AAAA,EACvC,CAAC;AAED,MAAI,cAAc;AAChB,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,aAAa;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,WAAW,UAAU,cAAc,MAAM;AAC/C,QAAM,UAAU,UAAU,WAAW,SAAS,OAAO;AACrD,MAAI,WAAW,QAAQ,aAAa,SAAS,UAAU;AACrD,WAAO,EAAE,yBAAqC;AAAA,EAChD;AAEA,MAAI,mBAAK,4BAA2B,CAAC,SAAS;AAC5C,UAAM,sBAAK,kCAAL;AACN,WAAO,sBAAK,0BAAL,WAAgB,QAAQ,UAAU;AAAA,EAC3C;AACA,SAAO,EAAE,2BAAuC;AAClD;AAEM;AAAA,SAAI,eACR,OAC8C;AAC9C,SAAO,OAAO,QAAQ,KAAK,EAAE,OAE3B,OAAO,iBAAiB,CAAC,QAAQ,QAAQ,MAAM;AAC/C,UAAM,SAAS,MAAM,sBAAK,0BAAL,WAAgB,QAAQ;AAC7C,UAAM,MAAM,MAAM;AAClB,QAAI,MAAM,IAAI;AACd,WAAO;AAAA,EACT,GAAG,QAAQ,QAAQ,CAAC,CAAC,CAAC;AACxB;AAUM;AAAA,oBAAe,eACnB,QACA,cACA,UAAU,OACY;AACtB,QAAM,WAAW,MAAM,sBAAK,8BAAL;AACvB,QAAM,WAAW,UAAU,cAAc,MAAM,GAAG,YAAY;AAE9D,MAAI,CAAC,YAAY,mBAAK,4BAA2B,CAAC,SAAS;AACzD,UAAM,sBAAK,kCAAL;AACN,WAAO,sBAAK,oCAAL,WAAqB,QAAQ,cAAc;AAAA,EACpD;AAGA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB;AAAA,IACpB,OAAO,KAAK,QAAQ;AAAA,IACpB;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB,mBAAK,4BAA2B,CAAC,SAAS;AAC9D,UAAM,sBAAK,kCAAL;AACN,WAAO,sBAAK,oCAAL,WAAqB,QAAQ,cAAc;AAAA,EACpD;AAGA,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AAGA,sBAAoB,aAAa;AACjC,SAAO;AACT;AASM;AAAA,iBAAY,eAAC,QAAuD;AACxE,QAAM,WAAW,MAAM,sBAAK,8BAAL;AACvB,SAAO,UAAU,cAAc,MAAM,GAAG,YAAY;AACtD;AAUA;AAAA,qBAAgB,SAAC,UAAkB,WAAmB;AACpD,SAAO,mBAAK,aAAY,yBAAyB;AAEjD,QAAM,QAAQ,OAAO;AAAA,IACnB,UAAU;AAAA,IACV,WAAW,KAAK,MAAM,SAAS;AAAA,IAC/B,WAAW,mBAAK;AAAA,EAClB,CAAC;AAED,SAAO,OAAO,6BAA6B;AAC7C;AASM;AAAA,eAAU,eAAC,KAAa;AAC5B,QAAM,WAAW,MAAM,mBAAK,gBAAL,WAAoB;AAC3C,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,mBAAmB,GAAG,GAAG;AAAA,EAC3C;AAEA,SAAO,MAAM,SAAS,KAAK;AAC7B","sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { SnapsRegistryDatabase } from '@metamask/snaps-registry';\nimport { verify } from '@metamask/snaps-registry';\nimport { getTargetVersion } from '@metamask/snaps-utils';\nimport type { Hex, SemVerRange, SemVerVersion } from '@metamask/utils';\nimport {\n assert,\n assertIsSemVerRange,\n Duration,\n inMilliseconds,\n satisfiesVersionRange,\n} from '@metamask/utils';\n\nimport type {\n SnapsRegistry,\n SnapsRegistryInfo,\n SnapsRegistryMetadata,\n SnapsRegistryRequest,\n SnapsRegistryResult,\n} from './registry';\nimport { SnapsRegistryStatus } from './registry';\n\n// TODO: Replace with a Codefi URL\nconst SNAP_REGISTRY_URL =\n 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/registry.json';\n\nconst SNAP_REGISTRY_SIGNATURE_URL =\n 'https://cdn.jsdelivr.net/gh/MetaMask/snaps-registry@gh-pages/latest/signature.json';\n\ntype JsonSnapsRegistryUrl = {\n registry: string;\n signature: string;\n};\n\nexport type JsonSnapsRegistryArgs = {\n messenger: SnapsRegistryMessenger;\n state?: SnapsRegistryState;\n fetchFunction?: typeof fetch;\n url?: JsonSnapsRegistryUrl;\n recentFetchThreshold?: number;\n refetchOnAllowlistMiss?: boolean;\n failOnUnavailableRegistry?: boolean;\n publicKey?: Hex;\n};\n\nexport type GetResult = {\n type: `${typeof controllerName}:get`;\n handler: SnapsRegistry['get'];\n};\n\nexport type ResolveVersion = {\n type: `${typeof controllerName}:resolveVersion`;\n handler: SnapsRegistry['resolveVersion'];\n};\n\nexport type GetMetadata = {\n type: `${typeof controllerName}:getMetadata`;\n handler: SnapsRegistry['getMetadata'];\n};\n\nexport type Update = {\n type: `${typeof controllerName}:update`;\n handler: SnapsRegistry['update'];\n};\n\nexport type SnapsRegistryActions =\n | GetResult\n | GetMetadata\n | Update\n | ResolveVersion;\n\nexport type SnapsRegistryEvents = never;\n\nexport type SnapsRegistryMessenger = RestrictedControllerMessenger<\n 'SnapsRegistry',\n SnapsRegistryActions,\n SnapsRegistryEvents,\n SnapsRegistryActions['type'],\n SnapsRegistryEvents['type']\n>;\n\nexport type SnapsRegistryState = {\n database: SnapsRegistryDatabase | null;\n lastUpdated: number | null;\n};\n\nconst controllerName = 'SnapsRegistry';\n\nconst defaultState = {\n database: null,\n lastUpdated: null,\n};\n\nexport class JsonSnapsRegistry extends BaseController<\n typeof controllerName,\n SnapsRegistryState,\n SnapsRegistryMessenger\n> {\n #url: JsonSnapsRegistryUrl;\n\n #publicKey?: Hex;\n\n #fetchFunction: typeof fetch;\n\n #recentFetchThreshold: number;\n\n #refetchOnAllowlistMiss: boolean;\n\n #failOnUnavailableRegistry: boolean;\n\n #currentUpdate: Promise<void> | null;\n\n constructor({\n messenger,\n state,\n url = {\n registry: SNAP_REGISTRY_URL,\n signature: SNAP_REGISTRY_SIGNATURE_URL,\n },\n publicKey,\n fetchFunction = globalThis.fetch.bind(globalThis),\n recentFetchThreshold = inMilliseconds(5, Duration.Minute),\n failOnUnavailableRegistry = true,\n refetchOnAllowlistMiss = true,\n }: JsonSnapsRegistryArgs) {\n super({\n messenger,\n metadata: {\n database: { persist: true, anonymous: false },\n lastUpdated: { persist: true, anonymous: false },\n },\n name: controllerName,\n state: {\n ...defaultState,\n ...state,\n },\n });\n this.#url = url;\n this.#publicKey = publicKey;\n this.#fetchFunction = fetchFunction;\n this.#recentFetchThreshold = recentFetchThreshold;\n this.#refetchOnAllowlistMiss = refetchOnAllowlistMiss;\n this.#failOnUnavailableRegistry = failOnUnavailableRegistry;\n this.#currentUpdate = null;\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:get',\n async (...args) => this.#get(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:getMetadata',\n async (...args) => this.#getMetadata(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:resolveVersion',\n async (...args) => this.#resolveVersion(...args),\n );\n\n this.messagingSystem.registerActionHandler(\n 'SnapsRegistry:update',\n async () => this.#triggerUpdate(),\n );\n }\n\n #wasRecentlyFetched() {\n return (\n this.state.lastUpdated &&\n Date.now() - this.state.lastUpdated < this.#recentFetchThreshold\n );\n }\n\n /**\n * Triggers an update of the registry database.\n *\n * If an existing update is in progress this function will await that update.\n */\n async #triggerUpdate() {\n // If an update is ongoing, wait for that.\n if (this.#currentUpdate) {\n await this.#currentUpdate;\n return;\n }\n // If no update exists, create promise and store globally.\n if (this.#currentUpdate === null) {\n this.#currentUpdate = this.#update();\n }\n await this.#currentUpdate;\n this.#currentUpdate = null;\n }\n\n /**\n * Updates the registry database if the registry hasn't been updated recently.\n *\n * NOTE: SHOULD NOT be called directly, instead `triggerUpdate` should be used.\n */\n async #update() {\n // No-op if we recently fetched the registry.\n if (this.#wasRecentlyFetched()) {\n return;\n }\n\n try {\n const database = await this.#safeFetch(this.#url.registry);\n\n if (this.#publicKey) {\n const signature = await this.#safeFetch(this.#url.signature);\n this.#verifySignature(database, signature);\n }\n\n this.update((state) => {\n state.database = JSON.parse(database);\n state.lastUpdated = Date.now();\n });\n } catch {\n // Ignore\n }\n }\n\n async #getDatabase(): Promise<SnapsRegistryDatabase | null> {\n if (this.state.database === null) {\n await this.#triggerUpdate();\n }\n\n // If the database is still null and we require it, throw.\n if (this.#failOnUnavailableRegistry && this.state.database === null) {\n throw new Error('Snaps registry is unavailable, installation blocked.');\n }\n return this.state.database;\n }\n\n async #getSingle(\n snapId: string,\n snapInfo: SnapsRegistryInfo,\n refetch = false,\n ): Promise<SnapsRegistryResult> {\n const database = await this.#getDatabase();\n\n const blockedEntry = database?.blockedSnaps.find((blocked) => {\n if ('id' in blocked) {\n return (\n blocked.id === snapId &&\n satisfiesVersionRange(snapInfo.version, blocked.versionRange)\n );\n }\n\n return blocked.checksum === snapInfo.checksum;\n });\n\n if (blockedEntry) {\n return {\n status: SnapsRegistryStatus.Blocked,\n reason: blockedEntry.reason,\n };\n }\n\n const verified = database?.verifiedSnaps[snapId];\n const version = verified?.versions?.[snapInfo.version];\n if (version && version.checksum === snapInfo.checksum) {\n return { status: SnapsRegistryStatus.Verified };\n }\n // For now, if we have an allowlist miss, we can refetch once and try again.\n if (this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#getSingle(snapId, snapInfo, true);\n }\n return { status: SnapsRegistryStatus.Unverified };\n }\n\n async #get(\n snaps: SnapsRegistryRequest,\n ): Promise<Record<string, SnapsRegistryResult>> {\n return Object.entries(snaps).reduce<\n Promise<Record<string, SnapsRegistryResult>>\n >(async (previousPromise, [snapId, snapInfo]) => {\n const result = await this.#getSingle(snapId, snapInfo);\n const acc = await previousPromise;\n acc[snapId] = result;\n return acc;\n }, Promise.resolve({}));\n }\n\n /**\n * Find an allowlisted version within a specified version range. Otherwise return the version range itself.\n *\n * @param snapId - The ID of the snap we are trying to resolve a version for.\n * @param versionRange - The version range.\n * @param refetch - An optional flag used to determine if we are refetching the registry.\n * @returns An allowlisted version within the specified version range if available otherwise returns the input version range.\n */\n async #resolveVersion(\n snapId: string,\n versionRange: SemVerRange,\n refetch = false,\n ): Promise<SemVerRange> {\n const database = await this.#getDatabase();\n const versions = database?.verifiedSnaps[snapId]?.versions ?? null;\n\n if (!versions && this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#resolveVersion(snapId, versionRange, true);\n }\n\n // If we cannot narrow down the version range we return the unaltered version range.\n if (!versions) {\n return versionRange;\n }\n\n const targetVersion = getTargetVersion(\n Object.keys(versions) as SemVerVersion[],\n versionRange,\n );\n\n if (!targetVersion && this.#refetchOnAllowlistMiss && !refetch) {\n await this.#triggerUpdate();\n return this.#resolveVersion(snapId, versionRange, true);\n }\n\n // If we cannot narrow down the version range we return the unaltered version range.\n if (!targetVersion) {\n return versionRange;\n }\n\n // A semver version is technically also a valid semver range.\n assertIsSemVerRange(targetVersion);\n return targetVersion;\n }\n\n /**\n * Get metadata for the given snap ID.\n *\n * @param snapId - The ID of the snap to get metadata for.\n * @returns The metadata for the given snap ID, or `null` if the snap is not\n * verified.\n */\n async #getMetadata(snapId: string): Promise<SnapsRegistryMetadata | null> {\n const database = await this.#getDatabase();\n return database?.verifiedSnaps[snapId]?.metadata ?? null;\n }\n\n /**\n * Verify the signature of the registry.\n *\n * @param database - The registry database.\n * @param signature - The signature of the registry.\n * @throws If the signature is invalid.\n * @private\n */\n #verifySignature(database: string, signature: string) {\n assert(this.#publicKey, 'No public key provided.');\n\n const valid = verify({\n registry: database,\n signature: JSON.parse(signature),\n publicKey: this.#publicKey,\n });\n\n assert(valid, 'Invalid registry signature.');\n }\n\n /**\n * Fetch the given URL, throwing if the response is not OK.\n *\n * @param url - The URL to fetch.\n * @returns The response body.\n * @private\n */\n async #safeFetch(url: string) {\n const response = await this.#fetchFunction(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch ${url}.`);\n }\n\n return await response.text();\n }\n}\n"]}
@@ -0,0 +1,105 @@
1
+ import {
2
+ AbstractExecutionService
3
+ } from "./chunk-4ICLRPDE.mjs";
4
+ import {
5
+ ProxyPostMessageStream
6
+ } from "./chunk-OPH3RY2U.mjs";
7
+ import {
8
+ __privateAdd,
9
+ __privateGet,
10
+ __privateSet
11
+ } from "./chunk-YRZVIDCF.mjs";
12
+
13
+ // src/services/webworker/WebWorkerExecutionService.ts
14
+ import { WindowPostMessageStream } from "@metamask/post-message-stream";
15
+ import { createWindow } from "@metamask/snaps-utils";
16
+ import { assert } from "@metamask/utils";
17
+ import { nanoid } from "nanoid";
18
+ var WORKER_POOL_ID = "snaps-worker-pool";
19
+ var _documentUrl, _runtimeStream;
20
+ var WebWorkerExecutionService = class extends AbstractExecutionService {
21
+ /**
22
+ * Create a new webworker execution service.
23
+ *
24
+ * @param args - The constructor arguments.
25
+ * @param args.documentUrl - The URL of the worker pool document to use as the
26
+ * execution environment.
27
+ * @param args.messenger - The messenger to use for communication with the
28
+ * `SnapController`.
29
+ * @param args.setupSnapProvider - The function to use to set up the snap
30
+ * provider.
31
+ */
32
+ constructor({
33
+ documentUrl,
34
+ messenger,
35
+ setupSnapProvider
36
+ }) {
37
+ super({
38
+ messenger,
39
+ setupSnapProvider
40
+ });
41
+ __privateAdd(this, _documentUrl, void 0);
42
+ __privateAdd(this, _runtimeStream, void 0);
43
+ __privateSet(this, _documentUrl, documentUrl);
44
+ }
45
+ /**
46
+ * Send a termination command to the worker pool document.
47
+ *
48
+ * @param job - The job to terminate.
49
+ */
50
+ async terminateJob(job) {
51
+ assert(__privateGet(this, _runtimeStream), "Runtime stream not initialized.");
52
+ __privateGet(this, _runtimeStream).write({
53
+ jobId: job.id,
54
+ data: {
55
+ jsonrpc: "2.0",
56
+ method: "terminateJob",
57
+ id: nanoid()
58
+ }
59
+ });
60
+ }
61
+ /**
62
+ * Create a new stream for the specified job. This wraps the runtime stream
63
+ * in a stream specific to the job.
64
+ *
65
+ * @param jobId - The job ID.
66
+ */
67
+ async initEnvStream(jobId) {
68
+ await this.createDocument();
69
+ assert(__privateGet(this, _runtimeStream), "Runtime stream not initialized.");
70
+ const stream = new ProxyPostMessageStream({
71
+ stream: __privateGet(this, _runtimeStream),
72
+ jobId
73
+ });
74
+ return { worker: jobId, stream };
75
+ }
76
+ /**
77
+ * Creates the worker pool document to be used as the execution environment.
78
+ *
79
+ * If the document already exists, this does nothing.
80
+ */
81
+ async createDocument() {
82
+ if (document.getElementById(WORKER_POOL_ID)) {
83
+ return;
84
+ }
85
+ const window = await createWindow(
86
+ __privateGet(this, _documentUrl).href,
87
+ WORKER_POOL_ID,
88
+ false
89
+ );
90
+ __privateSet(this, _runtimeStream, new WindowPostMessageStream({
91
+ name: "parent",
92
+ target: "child",
93
+ targetWindow: window,
94
+ targetOrigin: "*"
95
+ }));
96
+ }
97
+ };
98
+ _documentUrl = new WeakMap();
99
+ _runtimeStream = new WeakMap();
100
+
101
+ export {
102
+ WORKER_POOL_ID,
103
+ WebWorkerExecutionService
104
+ };
105
+ //# sourceMappingURL=chunk-MJOLPPQK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/webworker/WebWorkerExecutionService.ts"],"sourcesContent":["import type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { WindowPostMessageStream } from '@metamask/post-message-stream';\nimport { createWindow } from '@metamask/snaps-utils';\nimport { assert } from '@metamask/utils';\nimport { nanoid } from 'nanoid';\n\nimport type { ExecutionServiceArgs, Job } from '../AbstractExecutionService';\nimport { AbstractExecutionService } from '../AbstractExecutionService';\nimport { ProxyPostMessageStream } from '../ProxyPostMessageStream';\n\ntype WebWorkerExecutionEnvironmentServiceArgs = {\n documentUrl: URL;\n} & ExecutionServiceArgs;\n\nexport const WORKER_POOL_ID = 'snaps-worker-pool';\n\nexport class WebWorkerExecutionService extends AbstractExecutionService<string> {\n #documentUrl: URL;\n\n #runtimeStream?: BasePostMessageStream;\n\n /**\n * Create a new webworker execution service.\n *\n * @param args - The constructor arguments.\n * @param args.documentUrl - The URL of the worker pool document to use as the\n * execution environment.\n * @param args.messenger - The messenger to use for communication with the\n * `SnapController`.\n * @param args.setupSnapProvider - The function to use to set up the snap\n * provider.\n */\n constructor({\n documentUrl,\n messenger,\n setupSnapProvider,\n }: WebWorkerExecutionEnvironmentServiceArgs) {\n super({\n messenger,\n setupSnapProvider,\n });\n\n this.#documentUrl = documentUrl;\n }\n\n /**\n * Send a termination command to the worker pool document.\n *\n * @param job - The job to terminate.\n */\n protected async terminateJob(job: Job<string>) {\n // The `AbstractExecutionService` will have already closed the job stream,\n // so we write to the runtime stream directly.\n assert(this.#runtimeStream, 'Runtime stream not initialized.');\n this.#runtimeStream.write({\n jobId: job.id,\n data: {\n jsonrpc: '2.0',\n method: 'terminateJob',\n id: nanoid(),\n },\n });\n }\n\n /**\n * Create a new stream for the specified job. This wraps the runtime stream\n * in a stream specific to the job.\n *\n * @param jobId - The job ID.\n */\n protected async initEnvStream(jobId: string) {\n // Lazily create the worker pool document.\n await this.createDocument();\n\n // `createDocument` should have initialized the runtime stream.\n assert(this.#runtimeStream, 'Runtime stream not initialized.');\n\n const stream = new ProxyPostMessageStream({\n stream: this.#runtimeStream,\n jobId,\n });\n\n return { worker: jobId, stream };\n }\n\n /**\n * Creates the worker pool document to be used as the execution environment.\n *\n * If the document already exists, this does nothing.\n */\n private async createDocument() {\n // We only want to create a single pool.\n if (document.getElementById(WORKER_POOL_ID)) {\n return;\n }\n\n const window = await createWindow(\n this.#documentUrl.href,\n WORKER_POOL_ID,\n false,\n );\n\n this.#runtimeStream = new WindowPostMessageStream({\n name: 'parent',\n target: 'child',\n targetWindow: window,\n targetOrigin: '*',\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AACA,SAAS,+BAA+B;AACxC,SAAS,oBAAoB;AAC7B,SAAS,cAAc;AACvB,SAAS,cAAc;AAUhB,IAAM,iBAAiB;AAd9B;AAgBO,IAAM,4BAAN,cAAwC,yBAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgB9E,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA6C;AAC3C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,CAAC;AAvBH;AAEA;AAuBE,uBAAK,cAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAgB,aAAa,KAAkB;AAG7C,WAAO,mBAAK,iBAAgB,iCAAiC;AAC7D,uBAAK,gBAAe,MAAM;AAAA,MACxB,OAAO,IAAI;AAAA,MACX,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,IAAI,OAAO;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAgB,cAAc,OAAe;AAE3C,UAAM,KAAK,eAAe;AAG1B,WAAO,mBAAK,iBAAgB,iCAAiC;AAE7D,UAAM,SAAS,IAAI,uBAAuB;AAAA,MACxC,QAAQ,mBAAK;AAAA,MACb;AAAA,IACF,CAAC;AAED,WAAO,EAAE,QAAQ,OAAO,OAAO;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,iBAAiB;AAE7B,QAAI,SAAS,eAAe,cAAc,GAAG;AAC3C;AAAA,IACF;AAEA,UAAM,SAAS,MAAM;AAAA,MACnB,mBAAK,cAAa;AAAA,MAClB;AAAA,MACA;AAAA,IACF;AAEA,uBAAK,gBAAiB,IAAI,wBAAwB;AAAA,MAChD,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AACF;AA5FE;AAEA;","names":[]}
@@ -0,0 +1,197 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkOZPD234Wjs = require('./chunk-OZPD234W.js');
4
+
5
+
6
+
7
+ var _chunkEXN2TFDJjs = require('./chunk-EXN2TFDJ.js');
8
+
9
+ // src/interface/SnapInterfaceController.ts
10
+ var _basecontroller = require('@metamask/base-controller');
11
+
12
+
13
+
14
+ var _snapsutils = require('@metamask/snaps-utils');
15
+ var _utils = require('@metamask/utils');
16
+ var _nanoid = require('nanoid');
17
+ var MAX_UI_CONTENT_SIZE = 25e4;
18
+ var MAX_TEXT_LENGTH = 5e4;
19
+ var controllerName = "SnapInterfaceController";
20
+ var _registerMessageHandlers, registerMessageHandlers_fn, _validateArgs, validateArgs_fn, _triggerPhishingListUpdate, triggerPhishingListUpdate_fn, _checkPhishingList, checkPhishingList_fn, _validateContent, validateContent_fn;
21
+ var SnapInterfaceController = class extends _basecontroller.BaseController {
22
+ constructor({ messenger, state }) {
23
+ super({
24
+ messenger,
25
+ metadata: {
26
+ interfaces: { persist: false, anonymous: false }
27
+ },
28
+ name: controllerName,
29
+ state: { interfaces: {}, ...state }
30
+ });
31
+ /**
32
+ * Constructor helper for registering this controller's messaging system
33
+ * actions.
34
+ */
35
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _registerMessageHandlers);
36
+ /**
37
+ * Utility function to validate the args passed to the other methods.
38
+ *
39
+ * @param snapId - The snap id.
40
+ * @param id - The interface id.
41
+ */
42
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _validateArgs);
43
+ /**
44
+ * Trigger a Phishing list update if needed.
45
+ */
46
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _triggerPhishingListUpdate);
47
+ /**
48
+ * Check an origin against the phishing list.
49
+ *
50
+ * @param origin - The origin to check.
51
+ * @returns True if the origin is on the phishing list, otherwise false.
52
+ */
53
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _checkPhishingList);
54
+ /**
55
+ * Utility function to validate the components of an interface.
56
+ * Throws if something is invalid.
57
+ *
58
+ * Right now this only checks links against the phighing list.
59
+ *
60
+ * @param content - The components to verify.
61
+ */
62
+ _chunkEXN2TFDJjs.__privateAdd.call(void 0, this, _validateContent);
63
+ _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _registerMessageHandlers, registerMessageHandlers_fn).call(this);
64
+ }
65
+ /**
66
+ * Create an interface in the controller state with the associated data.
67
+ *
68
+ * @param snapId - The snap id that created the interface.
69
+ * @param content - The interface content.
70
+ * @returns The newly interface id.
71
+ */
72
+ async createInterface(snapId, content) {
73
+ await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _validateContent, validateContent_fn).call(this, content);
74
+ const id = _nanoid.nanoid.call(void 0, );
75
+ const componentState = _chunkOZPD234Wjs.constructState.call(void 0, {}, content);
76
+ this.update((draftState) => {
77
+ draftState.interfaces[id] = {
78
+ snapId,
79
+ content,
80
+ state: componentState
81
+ };
82
+ });
83
+ return id;
84
+ }
85
+ /**
86
+ * Get the data of a given interface id.
87
+ *
88
+ * @param snapId - The snap id requesting the interface data.
89
+ * @param id - The interface id.
90
+ * @returns The interface state.
91
+ */
92
+ getInterface(snapId, id) {
93
+ _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _validateArgs, validateArgs_fn).call(this, snapId, id);
94
+ return this.state.interfaces[id];
95
+ }
96
+ /**
97
+ * Update the interface with the given content.
98
+ *
99
+ * @param snapId - The snap id requesting the update.
100
+ * @param id - The interface id.
101
+ * @param content - The new content.
102
+ */
103
+ async updateInterface(snapId, id, content) {
104
+ _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _validateArgs, validateArgs_fn).call(this, snapId, id);
105
+ await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _validateContent, validateContent_fn).call(this, content);
106
+ const oldState = this.state.interfaces[id].state;
107
+ const newState = _chunkOZPD234Wjs.constructState.call(void 0, oldState, content);
108
+ this.update((draftState) => {
109
+ draftState.interfaces[id].state = newState;
110
+ draftState.interfaces[id].content = content;
111
+ });
112
+ }
113
+ /**
114
+ * Delete an interface from state.
115
+ *
116
+ * @param id - The interface id.
117
+ */
118
+ deleteInterface(id) {
119
+ this.update((draftState) => {
120
+ delete draftState.interfaces[id];
121
+ });
122
+ }
123
+ /**
124
+ * Update the interface state.
125
+ *
126
+ * @param id - The interface id.
127
+ * @param state - The new state.
128
+ */
129
+ updateInterfaceState(id, state) {
130
+ this.update((draftState) => {
131
+ draftState.interfaces[id].state = state;
132
+ });
133
+ }
134
+ };
135
+ _registerMessageHandlers = new WeakSet();
136
+ registerMessageHandlers_fn = function() {
137
+ this.messagingSystem.registerActionHandler(
138
+ `${controllerName}:createInterface`,
139
+ this.createInterface.bind(this)
140
+ );
141
+ this.messagingSystem.registerActionHandler(
142
+ `${controllerName}:getInterface`,
143
+ this.getInterface.bind(this)
144
+ );
145
+ this.messagingSystem.registerActionHandler(
146
+ `${controllerName}:updateInterface`,
147
+ this.updateInterface.bind(this)
148
+ );
149
+ this.messagingSystem.registerActionHandler(
150
+ `${controllerName}:deleteInterface`,
151
+ this.deleteInterface.bind(this)
152
+ );
153
+ this.messagingSystem.registerActionHandler(
154
+ `${controllerName}:updateInterfaceState`,
155
+ this.updateInterfaceState.bind(this)
156
+ );
157
+ };
158
+ _validateArgs = new WeakSet();
159
+ validateArgs_fn = function(snapId, id) {
160
+ const existingInterface = this.state.interfaces[id];
161
+ _utils.assert.call(void 0,
162
+ existingInterface !== void 0,
163
+ `Interface with id '${id}' not found.`
164
+ );
165
+ _utils.assert.call(void 0,
166
+ existingInterface.snapId === snapId,
167
+ `Interface not created by ${snapId}.`
168
+ );
169
+ };
170
+ _triggerPhishingListUpdate = new WeakSet();
171
+ triggerPhishingListUpdate_fn = async function() {
172
+ await this.messagingSystem.call("PhishingController:maybeUpdateState");
173
+ };
174
+ _checkPhishingList = new WeakSet();
175
+ checkPhishingList_fn = function(origin) {
176
+ return this.messagingSystem.call("PhishingController:testOrigin", origin).result;
177
+ };
178
+ _validateContent = new WeakSet();
179
+ validateContent_fn = async function(content) {
180
+ const size = _utils.getJsonSize.call(void 0, content);
181
+ _utils.assert.call(void 0,
182
+ size <= MAX_UI_CONTENT_SIZE,
183
+ `A Snap UI may not be larger than ${MAX_UI_CONTENT_SIZE / 1e3} kB.`
184
+ );
185
+ const textSize = _snapsutils.getTotalTextLength.call(void 0, content);
186
+ _utils.assert.call(void 0,
187
+ textSize <= MAX_TEXT_LENGTH,
188
+ `The text in a Snap UI may not be larger than ${MAX_TEXT_LENGTH / 1e3} kB.`
189
+ );
190
+ await _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _triggerPhishingListUpdate, triggerPhishingListUpdate_fn).call(this);
191
+ _snapsutils.validateComponentLinks.call(void 0, content, _chunkEXN2TFDJjs.__privateMethod.call(void 0, this, _checkPhishingList, checkPhishingList_fn).bind(this));
192
+ };
193
+
194
+
195
+
196
+ exports.SnapInterfaceController = SnapInterfaceController;
197
+ //# sourceMappingURL=chunk-N3MAPSR3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/interface/SnapInterfaceController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n MaybeUpdateState,\n TestOrigin,\n} from '@metamask/phishing-controller';\nimport type { Component, InterfaceState, SnapId } from '@metamask/snaps-sdk';\nimport {\n getTotalTextLength,\n validateComponentLinks,\n} from '@metamask/snaps-utils';\nimport { assert, getJsonSize } from '@metamask/utils';\nimport { nanoid } from 'nanoid';\n\nimport { constructState } from './utils';\n\nconst MAX_UI_CONTENT_SIZE = 250_000; // 250 kb\nconst MAX_TEXT_LENGTH = 50_000; // 50 kb\n\nconst controllerName = 'SnapInterfaceController';\n\nexport type CreateInterface = {\n type: `${typeof controllerName}:createInterface`;\n handler: SnapInterfaceController['createInterface'];\n};\n\nexport type GetInterface = {\n type: `${typeof controllerName}:getInterface`;\n handler: SnapInterfaceController['getInterface'];\n};\n\nexport type UpdateInterface = {\n type: `${typeof controllerName}:updateInterface`;\n handler: SnapInterfaceController['updateInterface'];\n};\n\nexport type DeleteInterface = {\n type: `${typeof controllerName}:deleteInterface`;\n handler: SnapInterfaceController['deleteInterface'];\n};\n\nexport type UpdateInterfaceState = {\n type: `${typeof controllerName}:updateInterfaceState`;\n handler: SnapInterfaceController['updateInterfaceState'];\n};\n\nexport type SnapInterfaceControllerAllowedActions =\n | TestOrigin\n | MaybeUpdateState;\n\nexport type SnapInterfaceControllerActions =\n | CreateInterface\n | GetInterface\n | UpdateInterface\n | DeleteInterface\n | UpdateInterfaceState;\n\nexport type SnapInterfaceControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SnapInterfaceControllerActions | SnapInterfaceControllerAllowedActions,\n never,\n SnapInterfaceControllerAllowedActions['type'],\n never\n>;\n\nexport type StoredInterface = {\n snapId: SnapId;\n content: Component;\n state: InterfaceState;\n};\n\nexport type SnapInterfaceControllerState = {\n interfaces: Record<string, StoredInterface>;\n};\n\nexport type SnapInterfaceControllerArgs = {\n messenger: SnapInterfaceControllerMessenger;\n state?: SnapInterfaceControllerState;\n};\n\n/**\n * Use this controller to manage snaps UI interfaces using RPC method hooks.\n */\nexport class SnapInterfaceController extends BaseController<\n typeof controllerName,\n SnapInterfaceControllerState,\n SnapInterfaceControllerMessenger\n> {\n constructor({ messenger, state }: SnapInterfaceControllerArgs) {\n super({\n messenger,\n metadata: {\n interfaces: { persist: false, anonymous: false },\n },\n name: controllerName,\n state: { interfaces: {}, ...state },\n });\n\n this.#registerMessageHandlers();\n }\n\n /**\n * Constructor helper for registering this controller's messaging system\n * actions.\n */\n #registerMessageHandlers() {\n this.messagingSystem.registerActionHandler(\n `${controllerName}:createInterface`,\n this.createInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:getInterface`,\n this.getInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:updateInterface`,\n this.updateInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:deleteInterface`,\n this.deleteInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:updateInterfaceState`,\n this.updateInterfaceState.bind(this),\n );\n }\n\n /**\n * Create an interface in the controller state with the associated data.\n *\n * @param snapId - The snap id that created the interface.\n * @param content - The interface content.\n * @returns The newly interface id.\n */\n async createInterface(snapId: SnapId, content: Component) {\n await this.#validateContent(content);\n\n const id = nanoid();\n\n const componentState = constructState({}, content);\n\n this.update((draftState) => {\n draftState.interfaces[id] = {\n snapId,\n content,\n state: componentState,\n };\n });\n\n return id;\n }\n\n /**\n * Get the data of a given interface id.\n *\n * @param snapId - The snap id requesting the interface data.\n * @param id - The interface id.\n * @returns The interface state.\n */\n getInterface(snapId: SnapId, id: string) {\n this.#validateArgs(snapId, id);\n\n return this.state.interfaces[id];\n }\n\n /**\n * Update the interface with the given content.\n *\n * @param snapId - The snap id requesting the update.\n * @param id - The interface id.\n * @param content - The new content.\n */\n async updateInterface(snapId: SnapId, id: string, content: Component) {\n this.#validateArgs(snapId, id);\n await this.#validateContent(content);\n\n const oldState = this.state.interfaces[id].state;\n\n const newState = constructState(oldState, content);\n\n this.update((draftState) => {\n draftState.interfaces[id].state = newState;\n draftState.interfaces[id].content = content;\n });\n }\n\n /**\n * Delete an interface from state.\n *\n * @param id - The interface id.\n */\n deleteInterface(id: string) {\n this.update((draftState) => {\n delete draftState.interfaces[id];\n });\n }\n\n /**\n * Update the interface state.\n *\n * @param id - The interface id.\n * @param state - The new state.\n */\n updateInterfaceState(id: string, state: InterfaceState) {\n this.update((draftState) => {\n draftState.interfaces[id].state = state;\n });\n }\n\n /**\n * Utility function to validate the args passed to the other methods.\n *\n * @param snapId - The snap id.\n * @param id - The interface id.\n */\n #validateArgs(snapId: SnapId, id: string) {\n const existingInterface = this.state.interfaces[id];\n\n assert(\n existingInterface !== undefined,\n `Interface with id '${id}' not found.`,\n );\n assert(\n existingInterface.snapId === snapId,\n `Interface not created by ${snapId}.`,\n );\n }\n\n /**\n * Trigger a Phishing list update if needed.\n */\n async #triggerPhishingListUpdate() {\n await this.messagingSystem.call('PhishingController:maybeUpdateState');\n }\n\n /**\n * Check an origin against the phishing list.\n *\n * @param origin - The origin to check.\n * @returns True if the origin is on the phishing list, otherwise false.\n */\n #checkPhishingList(origin: string) {\n return this.messagingSystem.call('PhishingController:testOrigin', origin)\n .result;\n }\n\n /**\n * Utility function to validate the components of an interface.\n * Throws if something is invalid.\n *\n * Right now this only checks links against the phighing list.\n *\n * @param content - The components to verify.\n */\n async #validateContent(content: Component) {\n const size = getJsonSize(content);\n\n assert(\n size <= MAX_UI_CONTENT_SIZE,\n `A Snap UI may not be larger than ${MAX_UI_CONTENT_SIZE / 1000} kB.`,\n );\n\n const textSize = getTotalTextLength(content);\n\n assert(\n textSize <= MAX_TEXT_LENGTH,\n `The text in a Snap UI may not be larger than ${\n MAX_TEXT_LENGTH / 1000\n } kB.`,\n );\n\n await this.#triggerPhishingListUpdate();\n\n validateComponentLinks(content, this.#checkPhishingList.bind(this));\n }\n}\n"]}