@metamask/snaps-controllers 18.0.3 → 19.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 (288) hide show
  1. package/CHANGELOG.md +103 -1
  2. package/dist/cronjob/CronjobController-method-action-types.cjs +7 -0
  3. package/dist/cronjob/CronjobController-method-action-types.cjs.map +1 -0
  4. package/dist/cronjob/CronjobController-method-action-types.d.cts +51 -0
  5. package/dist/cronjob/CronjobController-method-action-types.d.cts.map +1 -0
  6. package/dist/cronjob/CronjobController-method-action-types.d.mts +51 -0
  7. package/dist/cronjob/CronjobController-method-action-types.d.mts.map +1 -0
  8. package/dist/cronjob/CronjobController-method-action-types.mjs +6 -0
  9. package/dist/cronjob/CronjobController-method-action-types.mjs.map +1 -0
  10. package/dist/cronjob/CronjobController.cjs +7 -4
  11. package/dist/cronjob/CronjobController.cjs.map +1 -1
  12. package/dist/cronjob/CronjobController.d.cts +7 -24
  13. package/dist/cronjob/CronjobController.d.cts.map +1 -1
  14. package/dist/cronjob/CronjobController.d.mts +7 -24
  15. package/dist/cronjob/CronjobController.d.mts.map +1 -1
  16. package/dist/cronjob/CronjobController.mjs +7 -4
  17. package/dist/cronjob/CronjobController.mjs.map +1 -1
  18. package/dist/cronjob/index.cjs +3 -15
  19. package/dist/cronjob/index.cjs.map +1 -1
  20. package/dist/cronjob/index.d.cts +3 -1
  21. package/dist/cronjob/index.d.cts.map +1 -1
  22. package/dist/cronjob/index.d.mts +3 -1
  23. package/dist/cronjob/index.d.mts.map +1 -1
  24. package/dist/cronjob/index.mjs +1 -1
  25. package/dist/cronjob/index.mjs.map +1 -1
  26. package/dist/insights/SnapInsightsController.cjs +1 -3
  27. package/dist/insights/SnapInsightsController.cjs.map +1 -1
  28. package/dist/insights/SnapInsightsController.d.cts +8 -8
  29. package/dist/insights/SnapInsightsController.d.cts.map +1 -1
  30. package/dist/insights/SnapInsightsController.d.mts +8 -8
  31. package/dist/insights/SnapInsightsController.d.mts.map +1 -1
  32. package/dist/insights/SnapInsightsController.mjs +1 -3
  33. package/dist/insights/SnapInsightsController.mjs.map +1 -1
  34. package/dist/insights/index.cjs +3 -15
  35. package/dist/insights/index.cjs.map +1 -1
  36. package/dist/insights/index.d.cts +2 -1
  37. package/dist/insights/index.d.cts.map +1 -1
  38. package/dist/insights/index.d.mts +2 -1
  39. package/dist/insights/index.d.mts.map +1 -1
  40. package/dist/insights/index.mjs +1 -1
  41. package/dist/insights/index.mjs.map +1 -1
  42. package/dist/interface/SnapInterfaceController-method-action-types.cjs +7 -0
  43. package/dist/interface/SnapInterfaceController-method-action-types.cjs.map +1 -0
  44. package/dist/interface/SnapInterfaceController-method-action-types.d.cts +99 -0
  45. package/dist/interface/SnapInterfaceController-method-action-types.d.cts.map +1 -0
  46. package/dist/interface/SnapInterfaceController-method-action-types.d.mts +99 -0
  47. package/dist/interface/SnapInterfaceController-method-action-types.d.mts.map +1 -0
  48. package/dist/interface/SnapInterfaceController-method-action-types.mjs +6 -0
  49. package/dist/interface/SnapInterfaceController-method-action-types.mjs.map +1 -0
  50. package/dist/interface/SnapInterfaceController.cjs +12 -16
  51. package/dist/interface/SnapInterfaceController.cjs.map +1 -1
  52. package/dist/interface/SnapInterfaceController.d.cts +9 -39
  53. package/dist/interface/SnapInterfaceController.d.cts.map +1 -1
  54. package/dist/interface/SnapInterfaceController.d.mts +9 -39
  55. package/dist/interface/SnapInterfaceController.d.mts.map +1 -1
  56. package/dist/interface/SnapInterfaceController.mjs +12 -16
  57. package/dist/interface/SnapInterfaceController.mjs.map +1 -1
  58. package/dist/interface/index.cjs +3 -15
  59. package/dist/interface/index.cjs.map +1 -1
  60. package/dist/interface/index.d.cts +3 -1
  61. package/dist/interface/index.d.cts.map +1 -1
  62. package/dist/interface/index.d.mts +3 -1
  63. package/dist/interface/index.d.mts.map +1 -1
  64. package/dist/interface/index.mjs +1 -1
  65. package/dist/interface/index.mjs.map +1 -1
  66. package/dist/multichain/MultichainRoutingService-method-action-types.cjs +7 -0
  67. package/dist/multichain/MultichainRoutingService-method-action-types.cjs.map +1 -0
  68. package/dist/multichain/MultichainRoutingService-method-action-types.d.cts +61 -0
  69. package/dist/multichain/MultichainRoutingService-method-action-types.d.cts.map +1 -0
  70. package/dist/multichain/MultichainRoutingService-method-action-types.d.mts +61 -0
  71. package/dist/multichain/MultichainRoutingService-method-action-types.d.mts.map +1 -0
  72. package/dist/multichain/MultichainRoutingService-method-action-types.mjs +6 -0
  73. package/dist/multichain/MultichainRoutingService-method-action-types.mjs.map +1 -0
  74. package/dist/multichain/{MultichainRouter.cjs → MultichainRoutingService.cjs} +14 -13
  75. package/dist/multichain/MultichainRoutingService.cjs.map +1 -0
  76. package/dist/multichain/{MultichainRouter.d.mts → MultichainRoutingService.d.cts} +13 -28
  77. package/dist/multichain/MultichainRoutingService.d.cts.map +1 -0
  78. package/dist/multichain/{MultichainRouter.d.cts → MultichainRoutingService.d.mts} +13 -28
  79. package/dist/multichain/MultichainRoutingService.d.mts.map +1 -0
  80. package/dist/multichain/{MultichainRouter.mjs → MultichainRoutingService.mjs} +12 -11
  81. package/dist/multichain/MultichainRoutingService.mjs.map +1 -0
  82. package/dist/multichain/index.cjs +3 -15
  83. package/dist/multichain/index.cjs.map +1 -1
  84. package/dist/multichain/index.d.cts +3 -1
  85. package/dist/multichain/index.d.cts.map +1 -1
  86. package/dist/multichain/index.d.mts +3 -1
  87. package/dist/multichain/index.d.mts.map +1 -1
  88. package/dist/multichain/index.mjs +1 -1
  89. package/dist/multichain/index.mjs.map +1 -1
  90. package/dist/services/ExecutionService-method-action-types.cjs +7 -0
  91. package/dist/services/ExecutionService-method-action-types.cjs.map +1 -0
  92. package/dist/services/ExecutionService-method-action-types.d.cts +50 -0
  93. package/dist/services/ExecutionService-method-action-types.d.cts.map +1 -0
  94. package/dist/services/ExecutionService-method-action-types.d.mts +50 -0
  95. package/dist/services/ExecutionService-method-action-types.d.mts.map +1 -0
  96. package/dist/services/ExecutionService-method-action-types.mjs +6 -0
  97. package/dist/services/ExecutionService-method-action-types.mjs.map +1 -0
  98. package/dist/services/ExecutionService.cjs +287 -0
  99. package/dist/services/ExecutionService.cjs.map +1 -1
  100. package/dist/services/ExecutionService.d.cts +100 -46
  101. package/dist/services/ExecutionService.d.cts.map +1 -1
  102. package/dist/services/ExecutionService.d.mts +100 -46
  103. package/dist/services/ExecutionService.d.mts.map +1 -1
  104. package/dist/services/ExecutionService.mjs +285 -1
  105. package/dist/services/ExecutionService.mjs.map +1 -1
  106. package/dist/services/browser.cjs +5 -2
  107. package/dist/services/browser.cjs.map +1 -1
  108. package/dist/services/browser.d.cts +4 -2
  109. package/dist/services/browser.d.cts.map +1 -1
  110. package/dist/services/browser.d.mts +4 -2
  111. package/dist/services/browser.d.mts.map +1 -1
  112. package/dist/services/browser.mjs +2 -2
  113. package/dist/services/browser.mjs.map +1 -1
  114. package/dist/services/iframe/IframeExecutionService.cjs +2 -2
  115. package/dist/services/iframe/IframeExecutionService.cjs.map +1 -1
  116. package/dist/services/iframe/IframeExecutionService.d.cts +3 -3
  117. package/dist/services/iframe/IframeExecutionService.d.cts.map +1 -1
  118. package/dist/services/iframe/IframeExecutionService.d.mts +3 -3
  119. package/dist/services/iframe/IframeExecutionService.d.mts.map +1 -1
  120. package/dist/services/iframe/IframeExecutionService.mjs +2 -2
  121. package/dist/services/iframe/IframeExecutionService.mjs.map +1 -1
  122. package/dist/services/index.cjs +5 -1
  123. package/dist/services/index.cjs.map +1 -1
  124. package/dist/services/index.d.cts +4 -2
  125. package/dist/services/index.d.cts.map +1 -1
  126. package/dist/services/index.d.mts +4 -2
  127. package/dist/services/index.d.mts.map +1 -1
  128. package/dist/services/index.mjs +2 -1
  129. package/dist/services/index.mjs.map +1 -1
  130. package/dist/services/multiplex.cjs +27 -0
  131. package/dist/services/multiplex.cjs.map +1 -0
  132. package/dist/services/multiplex.d.cts +11 -0
  133. package/dist/services/multiplex.d.cts.map +1 -0
  134. package/dist/services/multiplex.d.mts +11 -0
  135. package/dist/services/multiplex.d.mts.map +1 -0
  136. package/dist/services/multiplex.mjs +27 -0
  137. package/dist/services/multiplex.mjs.map +1 -0
  138. package/dist/services/node-js/NodeProcessExecutionService.cjs +2 -2
  139. package/dist/services/node-js/NodeProcessExecutionService.cjs.map +1 -1
  140. package/dist/services/node-js/NodeProcessExecutionService.d.cts +3 -3
  141. package/dist/services/node-js/NodeProcessExecutionService.d.cts.map +1 -1
  142. package/dist/services/node-js/NodeProcessExecutionService.d.mts +3 -3
  143. package/dist/services/node-js/NodeProcessExecutionService.d.mts.map +1 -1
  144. package/dist/services/node-js/NodeProcessExecutionService.mjs +2 -2
  145. package/dist/services/node-js/NodeProcessExecutionService.mjs.map +1 -1
  146. package/dist/services/node-js/NodeThreadExecutionService.cjs +2 -5
  147. package/dist/services/node-js/NodeThreadExecutionService.cjs.map +1 -1
  148. package/dist/services/node-js/NodeThreadExecutionService.d.cts +3 -3
  149. package/dist/services/node-js/NodeThreadExecutionService.d.cts.map +1 -1
  150. package/dist/services/node-js/NodeThreadExecutionService.d.mts +3 -3
  151. package/dist/services/node-js/NodeThreadExecutionService.d.mts.map +1 -1
  152. package/dist/services/node-js/NodeThreadExecutionService.mjs +2 -5
  153. package/dist/services/node-js/NodeThreadExecutionService.mjs.map +1 -1
  154. package/dist/services/offscreen/OffscreenExecutionService.cjs.map +1 -1
  155. package/dist/services/offscreen/OffscreenExecutionService.d.cts +1 -1
  156. package/dist/services/offscreen/OffscreenExecutionService.d.cts.map +1 -1
  157. package/dist/services/offscreen/OffscreenExecutionService.d.mts +1 -1
  158. package/dist/services/offscreen/OffscreenExecutionService.d.mts.map +1 -1
  159. package/dist/services/offscreen/OffscreenExecutionService.mjs.map +1 -1
  160. package/dist/services/proxy/ProxyExecutionService.cjs +2 -5
  161. package/dist/services/proxy/ProxyExecutionService.cjs.map +1 -1
  162. package/dist/services/proxy/ProxyExecutionService.d.cts +3 -3
  163. package/dist/services/proxy/ProxyExecutionService.d.cts.map +1 -1
  164. package/dist/services/proxy/ProxyExecutionService.d.mts +3 -3
  165. package/dist/services/proxy/ProxyExecutionService.d.mts.map +1 -1
  166. package/dist/services/proxy/ProxyExecutionService.mjs +2 -5
  167. package/dist/services/proxy/ProxyExecutionService.mjs.map +1 -1
  168. package/dist/services/webview/WebViewExecutionService.cjs +2 -2
  169. package/dist/services/webview/WebViewExecutionService.cjs.map +1 -1
  170. package/dist/services/webview/WebViewExecutionService.d.cts +3 -3
  171. package/dist/services/webview/WebViewExecutionService.d.cts.map +1 -1
  172. package/dist/services/webview/WebViewExecutionService.d.mts +3 -3
  173. package/dist/services/webview/WebViewExecutionService.d.mts.map +1 -1
  174. package/dist/services/webview/WebViewExecutionService.mjs +2 -2
  175. package/dist/services/webview/WebViewExecutionService.mjs.map +1 -1
  176. package/dist/snaps/SnapController-method-action-types.cjs +7 -0
  177. package/dist/snaps/SnapController-method-action-types.cjs.map +1 -0
  178. package/dist/snaps/SnapController-method-action-types.d.cts +284 -0
  179. package/dist/snaps/SnapController-method-action-types.d.cts.map +1 -0
  180. package/dist/snaps/SnapController-method-action-types.d.mts +284 -0
  181. package/dist/snaps/SnapController-method-action-types.d.mts.map +1 -0
  182. package/dist/snaps/SnapController-method-action-types.mjs +6 -0
  183. package/dist/snaps/SnapController-method-action-types.mjs.map +1 -0
  184. package/dist/snaps/SnapController.cjs +118 -113
  185. package/dist/snaps/SnapController.cjs.map +1 -1
  186. package/dist/snaps/SnapController.d.cts +32 -189
  187. package/dist/snaps/SnapController.d.cts.map +1 -1
  188. package/dist/snaps/SnapController.d.mts +32 -189
  189. package/dist/snaps/SnapController.d.mts.map +1 -1
  190. package/dist/snaps/SnapController.mjs +119 -114
  191. package/dist/snaps/SnapController.mjs.map +1 -1
  192. package/dist/snaps/index.cjs +3 -1
  193. package/dist/snaps/index.cjs.map +1 -1
  194. package/dist/snaps/index.d.cts +3 -1
  195. package/dist/snaps/index.d.cts.map +1 -1
  196. package/dist/snaps/index.d.mts +3 -1
  197. package/dist/snaps/index.d.mts.map +1 -1
  198. package/dist/snaps/index.mjs +1 -1
  199. package/dist/snaps/index.mjs.map +1 -1
  200. package/dist/snaps/registry/SnapRegistryController-method-action-types.cjs +7 -0
  201. package/dist/snaps/registry/SnapRegistryController-method-action-types.cjs.map +1 -0
  202. package/dist/snaps/registry/SnapRegistryController-method-action-types.d.cts +46 -0
  203. package/dist/snaps/registry/SnapRegistryController-method-action-types.d.cts.map +1 -0
  204. package/dist/snaps/registry/SnapRegistryController-method-action-types.d.mts +46 -0
  205. package/dist/snaps/registry/SnapRegistryController-method-action-types.d.mts.map +1 -0
  206. package/dist/snaps/registry/SnapRegistryController-method-action-types.mjs +6 -0
  207. package/dist/snaps/registry/SnapRegistryController-method-action-types.mjs.map +1 -0
  208. package/dist/snaps/registry/{json.cjs → SnapRegistryController.cjs} +27 -24
  209. package/dist/snaps/registry/SnapRegistryController.cjs.map +1 -0
  210. package/dist/snaps/registry/SnapRegistryController.d.cts +67 -0
  211. package/dist/snaps/registry/SnapRegistryController.d.cts.map +1 -0
  212. package/dist/snaps/registry/SnapRegistryController.d.mts +67 -0
  213. package/dist/snaps/registry/SnapRegistryController.d.mts.map +1 -0
  214. package/dist/snaps/registry/{json.mjs → SnapRegistryController.mjs} +25 -22
  215. package/dist/snaps/registry/SnapRegistryController.mjs.map +1 -0
  216. package/dist/snaps/registry/index.cjs +5 -16
  217. package/dist/snaps/registry/index.cjs.map +1 -1
  218. package/dist/snaps/registry/index.d.cts +5 -2
  219. package/dist/snaps/registry/index.d.cts.map +1 -1
  220. package/dist/snaps/registry/index.d.mts +5 -2
  221. package/dist/snaps/registry/index.d.mts.map +1 -1
  222. package/dist/snaps/registry/index.mjs +2 -2
  223. package/dist/snaps/registry/index.mjs.map +1 -1
  224. package/dist/snaps/registry/types.cjs +11 -0
  225. package/dist/snaps/registry/types.cjs.map +1 -0
  226. package/dist/snaps/registry/types.d.cts +20 -0
  227. package/dist/snaps/registry/types.d.cts.map +1 -0
  228. package/dist/snaps/registry/types.d.mts +20 -0
  229. package/dist/snaps/registry/types.d.mts.map +1 -0
  230. package/dist/snaps/registry/types.mjs +8 -0
  231. package/dist/snaps/registry/types.mjs.map +1 -0
  232. package/dist/types/controllers.cjs.map +1 -1
  233. package/dist/types/controllers.d.cts +1 -1
  234. package/dist/types/controllers.d.cts.map +1 -1
  235. package/dist/types/controllers.d.mts +1 -1
  236. package/dist/types/controllers.d.mts.map +1 -1
  237. package/dist/types/controllers.mjs.map +1 -1
  238. package/dist/websocket/WebSocketService-method-action-types.cjs +7 -0
  239. package/dist/websocket/WebSocketService-method-action-types.cjs.map +1 -0
  240. package/dist/websocket/WebSocketService-method-action-types.d.cts +54 -0
  241. package/dist/websocket/WebSocketService-method-action-types.d.cts.map +1 -0
  242. package/dist/websocket/WebSocketService-method-action-types.d.mts +54 -0
  243. package/dist/websocket/WebSocketService-method-action-types.d.mts.map +1 -0
  244. package/dist/websocket/WebSocketService-method-action-types.mjs +6 -0
  245. package/dist/websocket/WebSocketService-method-action-types.mjs.map +1 -0
  246. package/dist/websocket/WebSocketService.cjs +14 -11
  247. package/dist/websocket/WebSocketService.cjs.map +1 -1
  248. package/dist/websocket/WebSocketService.d.cts +43 -22
  249. package/dist/websocket/WebSocketService.d.cts.map +1 -1
  250. package/dist/websocket/WebSocketService.d.mts +43 -22
  251. package/dist/websocket/WebSocketService.d.mts.map +1 -1
  252. package/dist/websocket/WebSocketService.mjs +14 -11
  253. package/dist/websocket/WebSocketService.mjs.map +1 -1
  254. package/dist/websocket/index.cjs +3 -15
  255. package/dist/websocket/index.cjs.map +1 -1
  256. package/dist/websocket/index.d.cts +3 -1
  257. package/dist/websocket/index.d.cts.map +1 -1
  258. package/dist/websocket/index.d.mts +3 -1
  259. package/dist/websocket/index.d.mts.map +1 -1
  260. package/dist/websocket/index.mjs +1 -1
  261. package/dist/websocket/index.mjs.map +1 -1
  262. package/package.json +8 -7
  263. package/dist/multichain/MultichainRouter.cjs.map +0 -1
  264. package/dist/multichain/MultichainRouter.d.cts.map +0 -1
  265. package/dist/multichain/MultichainRouter.d.mts.map +0 -1
  266. package/dist/multichain/MultichainRouter.mjs.map +0 -1
  267. package/dist/services/AbstractExecutionService.cjs +0 -307
  268. package/dist/services/AbstractExecutionService.cjs.map +0 -1
  269. package/dist/services/AbstractExecutionService.d.cts +0 -107
  270. package/dist/services/AbstractExecutionService.d.cts.map +0 -1
  271. package/dist/services/AbstractExecutionService.d.mts +0 -107
  272. package/dist/services/AbstractExecutionService.d.mts.map +0 -1
  273. package/dist/services/AbstractExecutionService.mjs +0 -306
  274. package/dist/services/AbstractExecutionService.mjs.map +0 -1
  275. package/dist/snaps/registry/json.cjs.map +0 -1
  276. package/dist/snaps/registry/json.d.cts +0 -58
  277. package/dist/snaps/registry/json.d.cts.map +0 -1
  278. package/dist/snaps/registry/json.d.mts +0 -58
  279. package/dist/snaps/registry/json.d.mts.map +0 -1
  280. package/dist/snaps/registry/json.mjs.map +0 -1
  281. package/dist/snaps/registry/registry.cjs +0 -11
  282. package/dist/snaps/registry/registry.cjs.map +0 -1
  283. package/dist/snaps/registry/registry.d.cts +0 -41
  284. package/dist/snaps/registry/registry.d.cts.map +0 -1
  285. package/dist/snaps/registry/registry.d.mts +0 -41
  286. package/dist/snaps/registry/registry.d.mts.map +0 -1
  287. package/dist/snaps/registry/registry.mjs +0 -8
  288. package/dist/snaps/registry/registry.mjs.map +0 -1
@@ -22,7 +22,35 @@ const fsm_2 = require("../fsm.cjs");
22
22
  const logging_1 = require("../logging.cjs");
23
23
  const utils_2 = require("../utils.cjs");
24
24
  exports.controllerName = 'SnapController';
25
- // TODO: Figure out how to name these
25
+ // This is used by the `generate-method-action-types` script.
26
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
27
+ const MESSENGER_EXPOSED_METHODS = [
28
+ 'init',
29
+ 'updateRegistry',
30
+ 'enableSnap',
31
+ 'disableSnap',
32
+ 'stopSnap',
33
+ 'stopAllSnaps',
34
+ 'isSnapRunning',
35
+ 'hasSnap',
36
+ 'getSnap',
37
+ 'updateSnapState',
38
+ 'clearSnapState',
39
+ 'getSnapState',
40
+ 'getSnapFile',
41
+ 'isMinimumPlatformVersion',
42
+ 'clearState',
43
+ 'removeSnap',
44
+ 'removeSnaps',
45
+ 'disconnectOrigin',
46
+ 'revokeDynamicSnapPermissions',
47
+ 'getAllSnaps',
48
+ 'getRunnableSnaps',
49
+ 'getPermittedSnaps',
50
+ 'installSnaps',
51
+ 'handleRequest',
52
+ 'setClientActive',
53
+ ];
26
54
  exports.SNAP_APPROVAL_INSTALL = 'wallet_installSnap';
27
55
  exports.SNAP_APPROVAL_UPDATE = 'wallet_updateSnap';
28
56
  exports.SNAP_APPROVAL_RESULT = 'wallet_installSnapResult';
@@ -188,7 +216,7 @@ class SnapController extends base_controller_1.BaseController {
188
216
  });
189
217
  });
190
218
  this.messenger.subscribe('KeyringController:lock', this.#handleLock.bind(this));
191
- this.messenger.subscribe('SnapsRegistry:stateChange', () => {
219
+ this.messenger.subscribe('SnapRegistryController:stateChange', () => {
192
220
  this.#handleRegistryUpdate().catch((error) => {
193
221
  (0, snaps_utils_1.logError)(`Error when processing Snaps registry update: ${(0, snaps_sdk_1.getErrorMessage)(error)}`);
194
222
  });
@@ -197,7 +225,7 @@ class SnapController extends base_controller_1.BaseController {
197
225
  this.#registerMessageHandlers();
198
226
  Object.values(this.state?.snaps ?? {}).forEach((snap) => this.#setupRuntime(snap.id));
199
227
  this.#trackSnapExport = (0, utils_2.throttleTracking)((snapId, handler, success, origin) => {
200
- const snapMetadata = this.messenger.call('SnapsRegistry:getMetadata', snapId);
228
+ const snapMetadata = this.messenger.call('SnapRegistryController:getMetadata', snapId);
201
229
  this.#trackEvent({
202
230
  event: 'Snap Export Used',
203
231
  category: 'Snaps',
@@ -224,7 +252,7 @@ class SnapController extends base_controller_1.BaseController {
224
252
  // In the future, side-effects could be added to the machine during transitions.
225
253
  #initializeStateMachine() {
226
254
  const disableGuard = ({ snapId }) => {
227
- return this.getExpect(snapId).enabled;
255
+ return this.getSnapExpect(snapId).enabled;
228
256
  };
229
257
  const statusConfig = {
230
258
  initial: snaps_utils_1.SnapStatus.Installing,
@@ -282,24 +310,22 @@ class SnapController extends base_controller_1.BaseController {
282
310
  #registerMessageHandlers() {
283
311
  this.messenger.registerActionHandler(`${exports.controllerName}:init`, async (...args) => this.init(...args));
284
312
  this.messenger.registerActionHandler(`${exports.controllerName}:clearSnapState`, (...args) => this.clearSnapState(...args));
285
- this.messenger.registerActionHandler(`${exports.controllerName}:get`, (...args) => this.get(...args));
313
+ this.messenger.registerActionHandler(`${exports.controllerName}:getSnap`, (...args) => this.getSnap(...args));
286
314
  this.messenger.registerActionHandler(`${exports.controllerName}:getSnapState`, async (...args) => this.getSnapState(...args));
287
315
  this.messenger.registerActionHandler(`${exports.controllerName}:handleRequest`, async (...args) => this.handleRequest(...args));
288
- this.messenger.registerActionHandler(`${exports.controllerName}:has`, (...args) => this.has(...args));
316
+ this.messenger.registerActionHandler(`${exports.controllerName}:hasSnap`, (...args) => this.hasSnap(...args));
289
317
  this.messenger.registerActionHandler(`${exports.controllerName}:updateRegistry`, async () => this.updateRegistry());
290
318
  this.messenger.registerActionHandler(`${exports.controllerName}:updateSnapState`, async (...args) => this.updateSnapState(...args));
291
- this.messenger.registerActionHandler(`${exports.controllerName}:enable`, (...args) => this.enableSnap(...args));
292
- this.messenger.registerActionHandler(`${exports.controllerName}:disable`, async (...args) => this.disableSnap(...args));
293
- this.messenger.registerActionHandler(`${exports.controllerName}:remove`, async (...args) => this.removeSnap(...args));
294
- this.messenger.registerActionHandler(`${exports.controllerName}:getPermitted`, (...args) => this.getPermittedSnaps(...args));
295
- this.messenger.registerActionHandler(`${exports.controllerName}:install`, async (...args) => this.installSnaps(...args));
296
- this.messenger.registerActionHandler(`${exports.controllerName}:getAll`, (...args) => this.getAllSnaps(...args));
319
+ this.messenger.registerActionHandler(`${exports.controllerName}:enableSnap`, (...args) => this.enableSnap(...args));
320
+ this.messenger.registerActionHandler(`${exports.controllerName}:disableSnap`, async (...args) => this.disableSnap(...args));
321
+ this.messenger.registerActionHandler(`${exports.controllerName}:removeSnap`, async (...args) => this.removeSnap(...args));
322
+ this.messenger.registerActionHandler(`${exports.controllerName}:getPermittedSnaps`, (...args) => this.getPermittedSnaps(...args));
323
+ this.messenger.registerActionHandler(`${exports.controllerName}:installSnaps`, async (...args) => this.installSnaps(...args));
324
+ this.messenger.registerActionHandler(`${exports.controllerName}:getAllSnaps`, (...args) => this.getAllSnaps(...args));
297
325
  this.messenger.registerActionHandler(`${exports.controllerName}:getRunnableSnaps`, (...args) => this.getRunnableSnaps(...args));
298
- this.messenger.registerActionHandler(`${exports.controllerName}:incrementActiveReferences`, (...args) => this.incrementActiveReferences(...args));
299
- this.messenger.registerActionHandler(`${exports.controllerName}:decrementActiveReferences`, (...args) => this.decrementActiveReferences(...args));
300
- this.messenger.registerActionHandler(`${exports.controllerName}:disconnectOrigin`, (...args) => this.removeSnapFromSubject(...args));
301
- this.messenger.registerActionHandler(`${exports.controllerName}:revokeDynamicPermissions`, (...args) => this.revokeDynamicSnapPermissions(...args));
302
- this.messenger.registerActionHandler(`${exports.controllerName}:getFile`, async (...args) => this.getSnapFile(...args));
326
+ this.messenger.registerActionHandler(`${exports.controllerName}:disconnectOrigin`, (...args) => this.disconnectOrigin(...args));
327
+ this.messenger.registerActionHandler(`${exports.controllerName}:revokeDynamicSnapPermissions`, (...args) => this.revokeDynamicSnapPermissions(...args));
328
+ this.messenger.registerActionHandler(`${exports.controllerName}:getSnapFile`, async (...args) => this.getSnapFile(...args));
303
329
  this.messenger.registerActionHandler(`${exports.controllerName}:stopAllSnaps`, async (...args) => this.stopAllSnaps(...args));
304
330
  this.messenger.registerActionHandler(`${exports.controllerName}:isMinimumPlatformVersion`, (...args) => this.isMinimumPlatformVersion(...args));
305
331
  this.messenger.registerActionHandler(`${exports.controllerName}:setClientActive`, (...args) => this.setClientActive(...args));
@@ -334,8 +360,8 @@ class SnapController extends base_controller_1.BaseController {
334
360
  }
335
361
  async #handlePreinstalledSnaps(preinstalledSnaps) {
336
362
  for (const { snapId, manifest, files, removable, hidden, hideSnapBranding, } of preinstalledSnaps) {
337
- const existingSnap = this.get(snapId);
338
- const isAlreadyInstalled = existingSnap !== undefined;
363
+ const existingSnap = this.getSnap(snapId);
364
+ const isAlreadyInstalled = existingSnap !== null;
339
365
  const isUpdate = isAlreadyInstalled && (0, utils_1.gtVersion)(manifest.version, existingSnap.version);
340
366
  const isPreinstalled = existingSnap?.preinstalled === true;
341
367
  const isMissingSource = isAlreadyInstalled &&
@@ -398,10 +424,10 @@ class SnapController extends base_controller_1.BaseController {
398
424
  this.#setupRuntime(snapId);
399
425
  // Emit events
400
426
  if (isUpdate) {
401
- this.messenger.publish('SnapController:snapUpdated', this.getTruncatedExpect(snapId), existingSnap.version, constants_1.METAMASK_ORIGIN, true);
427
+ this.messenger.publish('SnapController:snapUpdated', this.#getTruncatedSnapExpect(snapId), existingSnap.version, constants_1.METAMASK_ORIGIN, true);
402
428
  }
403
429
  else if (!isMissingSource) {
404
- this.messenger.publish('SnapController:snapInstalled', this.getTruncatedExpect(snapId), constants_1.METAMASK_ORIGIN, true);
430
+ this.messenger.publish('SnapController:snapInstalled', this.#getTruncatedSnapExpect(snapId), constants_1.METAMASK_ORIGIN, true);
405
431
  }
406
432
  if (isMissingSource) {
407
433
  (0, snaps_utils_1.logWarning)(`The source code for "${snapId}" was missing and has been automatically restored. If you see this message, please file a bug report.`);
@@ -457,7 +483,7 @@ class SnapController extends base_controller_1.BaseController {
457
483
  */
458
484
  async updateRegistry() {
459
485
  await this.#ensureCanUsePlatform();
460
- await this.messenger.call('SnapsRegistry:update');
486
+ await this.messenger.call('SnapRegistryController:requestUpdate');
461
487
  }
462
488
  /**
463
489
  * Checks all installed Snaps against the blocklist and
@@ -467,7 +493,7 @@ class SnapController extends base_controller_1.BaseController {
467
493
  * Also updates any preinstalled Snaps to the latest allowlisted version.
468
494
  */
469
495
  async #handleRegistryUpdate() {
470
- const blockedSnaps = await this.messenger.call('SnapsRegistry:get', Object.values(this.state.snaps).reduce((blockListArg, snap) => {
496
+ const blockedSnaps = await this.messenger.call('SnapRegistryController:get', Object.values(this.state.snaps).reduce((blockListArg, snap) => {
471
497
  blockListArg[snap.id] = {
472
498
  version: snap.version,
473
499
  checksum: snap.manifest.source.shasum,
@@ -475,7 +501,7 @@ class SnapController extends base_controller_1.BaseController {
475
501
  return blockListArg;
476
502
  }, {}));
477
503
  await Promise.all(Object.entries(blockedSnaps).map(async ([snapId, { status, reason }]) => {
478
- if (status === registry_1.SnapsRegistryStatus.Blocked) {
504
+ if (status === registry_1.SnapRegistryStatus.Blocked) {
479
505
  return this.#blockSnap(snapId, reason);
480
506
  }
481
507
  return this.#unblockSnap(snapId);
@@ -508,13 +534,13 @@ class SnapController extends base_controller_1.BaseController {
508
534
  }
509
535
  /**
510
536
  * Blocks an installed snap and prevents it from being started again. Emits
511
- * {@link SnapBlocked}. Does nothing if the snap is not installed.
537
+ * {@link SnapControllerSnapBlockedEvent}. Does nothing if the snap is not installed.
512
538
  *
513
539
  * @param snapId - The snap to block.
514
540
  * @param blockedSnapInfo - Information detailing why the snap is blocked.
515
541
  */
516
542
  async #blockSnap(snapId, blockedSnapInfo) {
517
- if (!this.has(snapId)) {
543
+ if (!this.hasSnap(snapId)) {
518
544
  return;
519
545
  }
520
546
  try {
@@ -531,13 +557,13 @@ class SnapController extends base_controller_1.BaseController {
531
557
  }
532
558
  /**
533
559
  * Unblocks a snap so that it can be enabled and started again. Emits
534
- * {@link SnapUnblocked}. Does nothing if the snap is not installed or already
560
+ * {@link SnapControllerSnapUnblockedEvent}. Does nothing if the snap is not installed or already
535
561
  * unblocked.
536
562
  *
537
563
  * @param snapId - The id of the snap to unblock.
538
564
  */
539
565
  #unblockSnap(snapId) {
540
- if (!this.has(snapId) || !this.state.snaps[snapId].blocked) {
566
+ if (!this.hasSnap(snapId) || !this.state.snaps[snapId].blocked) {
541
567
  return;
542
568
  }
543
569
  this.update((state) => {
@@ -547,18 +573,18 @@ class SnapController extends base_controller_1.BaseController {
547
573
  this.messenger.publish(`${exports.controllerName}:snapUnblocked`, snapId);
548
574
  }
549
575
  async #assertIsInstallAllowed(snapId, { platformVersion, ...snapInfo }) {
550
- const results = await this.messenger.call('SnapsRegistry:get', {
576
+ const results = await this.messenger.call('SnapRegistryController:get', {
551
577
  [snapId]: snapInfo,
552
578
  });
553
579
  const result = results[snapId];
554
- if (result.status === registry_1.SnapsRegistryStatus.Blocked) {
580
+ if (result.status === registry_1.SnapRegistryStatus.Blocked) {
555
581
  throw new Error(`Cannot install version "${snapInfo.version}" of snap "${snapId}": The version is blocked. ${result.reason?.explanation ?? ''}`);
556
582
  }
557
583
  const isAllowlistingRequired = Object.keys(snapInfo.permissions).some((permission) => !constants_1.ALLOWED_PERMISSIONS.includes(permission));
558
584
  if (this.#featureFlags.requireAllowlist &&
559
585
  isAllowlistingRequired &&
560
- result.status !== registry_1.SnapsRegistryStatus.Verified) {
561
- throw new Error(`Cannot install version "${snapInfo.version}" of snap "${snapId}": ${result.status === registry_1.SnapsRegistryStatus.Unavailable
586
+ result.status !== registry_1.SnapRegistryStatus.Verified) {
587
+ throw new Error(`Cannot install version "${snapInfo.version}" of snap "${snapId}": ${result.status === registry_1.SnapRegistryStatus.Unavailable
562
588
  ? 'The registry is temporarily unavailable.'
563
589
  : 'The snap is not on the allowlist.'}`);
564
590
  }
@@ -592,8 +618,7 @@ class SnapController extends base_controller_1.BaseController {
592
618
  async #stopSnapsLastRequestPastMax() {
593
619
  const entries = [...this.#snapsRuntimeData.entries()];
594
620
  return Promise.all(entries
595
- .filter(([_snapId, runtime]) => runtime.activeReferences === 0 &&
596
- runtime.pendingInboundRequests.length === 0 &&
621
+ .filter(([_snapId, runtime]) => runtime.pendingInboundRequests.length === 0 &&
597
622
  runtime.lastRequest &&
598
623
  this.#maxIdleTime &&
599
624
  (0, utils_1.timeSince)(runtime.lastRequest) > this.#maxIdleTime)
@@ -670,14 +695,14 @@ class SnapController extends base_controller_1.BaseController {
670
695
  * @param snapId - The id of the Snap to enable.
671
696
  */
672
697
  enableSnap(snapId) {
673
- this.getExpect(snapId);
698
+ this.getSnapExpect(snapId);
674
699
  if (this.state.snaps[snapId].blocked) {
675
700
  throw new Error(`Snap "${snapId}" is blocked and cannot be enabled.`);
676
701
  }
677
702
  this.update((state) => {
678
703
  state.snaps[snapId].enabled = true;
679
704
  });
680
- this.messenger.publish('SnapController:snapEnabled', this.getTruncatedExpect(snapId));
705
+ this.messenger.publish('SnapController:snapEnabled', this.#getTruncatedSnapExpect(snapId));
681
706
  }
682
707
  /**
683
708
  * Disables the given snap. A snap can only be started if it is enabled.
@@ -686,16 +711,16 @@ class SnapController extends base_controller_1.BaseController {
686
711
  * @returns A promise that resolves once the snap has been disabled.
687
712
  */
688
713
  async disableSnap(snapId) {
689
- if (!this.has(snapId)) {
714
+ if (!this.hasSnap(snapId)) {
690
715
  throw new Error(`Snap "${snapId}" not found.`);
691
716
  }
692
717
  this.update((state) => {
693
718
  state.snaps[snapId].enabled = false;
694
719
  });
695
- if (this.isRunning(snapId)) {
720
+ if (this.isSnapRunning(snapId)) {
696
721
  await this.stopSnap(snapId, snaps_utils_1.SnapStatusEvents.Stop);
697
722
  }
698
- this.messenger.publish('SnapController:snapDisabled', this.getTruncatedExpect(snapId));
723
+ this.messenger.publish('SnapController:snapDisabled', this.#getTruncatedSnapExpect(snapId));
699
724
  }
700
725
  /**
701
726
  * Stops the given snap, removes all hooks, closes all connections, and
@@ -720,7 +745,7 @@ class SnapController extends base_controller_1.BaseController {
720
745
  const { promise, resolve } = (0, utils_1.createDeferredPromise)();
721
746
  runtime.stopPromise = promise;
722
747
  try {
723
- if (this.isRunning(snapId)) {
748
+ if (this.isSnapRunning(snapId)) {
724
749
  await this.#terminateSnap(snapId);
725
750
  }
726
751
  }
@@ -730,7 +755,7 @@ class SnapController extends base_controller_1.BaseController {
730
755
  runtime.pendingInboundRequests = [];
731
756
  runtime.pendingOutboundRequests = 0;
732
757
  runtime.stopPromise = null;
733
- if (this.isRunning(snapId)) {
758
+ if (this.isSnapRunning(snapId)) {
734
759
  this.#transition(snapId, statusEvent);
735
760
  }
736
761
  resolve();
@@ -744,7 +769,7 @@ class SnapController extends base_controller_1.BaseController {
744
769
  * stopped.
745
770
  */
746
771
  async stopAllSnaps(statusEvent = snaps_utils_1.SnapStatusEvents.Stop) {
747
- const snaps = Object.values(this.state.snaps).filter((snap) => this.isRunning(snap.id));
772
+ const snaps = Object.values(this.state.snaps).filter((snap) => this.isSnapRunning(snap.id));
748
773
  const promises = snaps.map(async (snap) => this.stopSnap(snap.id, statusEvent));
749
774
  await Promise.allSettled(promises);
750
775
  }
@@ -764,7 +789,7 @@ class SnapController extends base_controller_1.BaseController {
764
789
  .forEach((pendingRequest) => pendingRequest.timer.finish());
765
790
  // Hack to give up execution for a bit to let timed out requests return.
766
791
  await new Promise((resolve) => setTimeout(resolve, 1));
767
- this.messenger.publish('SnapController:snapTerminated', this.getTruncatedExpect(snapId));
792
+ this.messenger.publish('SnapController:snapTerminated', this.#getTruncatedSnapExpect(snapId));
768
793
  }
769
794
  /**
770
795
  * Returns whether the given snap is running.
@@ -773,8 +798,8 @@ class SnapController extends base_controller_1.BaseController {
773
798
  * @param snapId - The id of the Snap to check.
774
799
  * @returns `true` if the snap is running, otherwise `false`.
775
800
  */
776
- isRunning(snapId) {
777
- return this.getExpect(snapId).status === 'running';
801
+ isSnapRunning(snapId) {
802
+ return this.getSnapExpect(snapId).status === 'running';
778
803
  }
779
804
  /**
780
805
  * Returns whether the given snap has been added to state.
@@ -782,8 +807,8 @@ class SnapController extends base_controller_1.BaseController {
782
807
  * @param snapId - The id of the Snap to check for.
783
808
  * @returns `true` if the snap exists in the controller state, otherwise `false`.
784
809
  */
785
- has(snapId) {
786
- return Boolean(this.get(snapId));
810
+ hasSnap(snapId) {
811
+ return Boolean(this.getSnap(snapId));
787
812
  }
788
813
  /**
789
814
  * Gets the snap with the given id if it exists, including all data.
@@ -793,22 +818,22 @@ class SnapController extends base_controller_1.BaseController {
793
818
  * @param snapId - The id of the Snap to get.
794
819
  * @returns The entire snap object from the controller state.
795
820
  */
796
- get(snapId) {
797
- return this.state.snaps[snapId];
821
+ getSnap(snapId) {
822
+ return this.state.snaps[snapId] ?? null;
798
823
  }
799
824
  /**
800
825
  * Gets the snap with the given id, throws if doesn't.
801
826
  * This should not be used if the snap is to be serializable, as e.g.
802
827
  * the snap sourceCode may be quite large.
803
828
  *
804
- * @see {@link SnapController.get}
829
+ * @see {@link SnapController.getSnap}
805
830
  * @throws {@link Error}. If the snap doesn't exist
806
831
  * @param snapId - The id of the snap to get.
807
832
  * @returns The entire snap object.
808
833
  */
809
- getExpect(snapId) {
810
- const snap = this.get(snapId);
811
- (0, utils_1.assert)(snap !== undefined, `Snap "${snapId}" not found.`);
834
+ getSnapExpect(snapId) {
835
+ const snap = this.getSnap(snapId);
836
+ (0, utils_1.assert)(snap !== null, `Snap "${snapId}" not found.`);
812
837
  return snap;
813
838
  }
814
839
  /**
@@ -818,9 +843,8 @@ class SnapController extends base_controller_1.BaseController {
818
843
  * @param snapId - The id of the Snap to get.
819
844
  * @returns A truncated version of the snap state, that is less expensive to serialize.
820
845
  */
821
- // TODO(ritave): this.get returns undefined, this.getTruncated returns null
822
- getTruncated(snapId) {
823
- const snap = this.get(snapId);
846
+ #getTruncatedSnap(snapId) {
847
+ const snap = this.getSnap(snapId);
824
848
  return snap ? truncateSnap(snap) : null;
825
849
  }
826
850
  /**
@@ -830,8 +854,8 @@ class SnapController extends base_controller_1.BaseController {
830
854
  * @param snapId - The id of the snap to get.
831
855
  * @returns A truncated version of the snap state, that is less expensive to serialize.
832
856
  */
833
- getTruncatedExpect(snapId) {
834
- return truncateSnap(this.getExpect(snapId));
857
+ #getTruncatedSnapExpect(snapId) {
858
+ return truncateSnap(this.getSnapExpect(snapId));
835
859
  }
836
860
  /**
837
861
  * Check if a given Snap has a cached encryption key stored in the runtime.
@@ -1062,7 +1086,7 @@ class SnapController extends base_controller_1.BaseController {
1062
1086
  * @returns The file requested in the chosen file encoding or null if the file is not found.
1063
1087
  */
1064
1088
  async getSnapFile(snapId, path, encoding = snaps_sdk_1.AuxiliaryFileEncoding.Base64) {
1065
- const snap = this.getExpect(snapId);
1089
+ const snap = this.getSnapExpect(snapId);
1066
1090
  const normalizedPath = (0, snaps_utils_1.normalizeRelative)(path);
1067
1091
  const value = snap.auxiliaryFiles?.find((file) => file.path === normalizedPath)?.value;
1068
1092
  if (!value) {
@@ -1081,7 +1105,7 @@ class SnapController extends base_controller_1.BaseController {
1081
1105
  * @returns True if the platform version is equal or greater to the passed version, false otherwise.
1082
1106
  */
1083
1107
  isMinimumPlatformVersion(snapId, version) {
1084
- const snap = this.getExpect(snapId);
1108
+ const snap = this.getSnapExpect(snapId);
1085
1109
  const { platformVersion } = snap.manifest;
1086
1110
  if (!platformVersion) {
1087
1111
  return false;
@@ -1131,12 +1155,12 @@ class SnapController extends base_controller_1.BaseController {
1131
1155
  throw new Error('Expected array of snap ids.');
1132
1156
  }
1133
1157
  snapIds.forEach((snapId) => {
1134
- const snap = this.getExpect(snapId);
1158
+ const snap = this.getSnapExpect(snapId);
1135
1159
  (0, utils_1.assert)(snap.removable !== false, `${snapId} is not removable.`);
1136
1160
  });
1137
1161
  await Promise.all(snapIds.map(async (snapId) => {
1138
- const snap = this.getExpect(snapId);
1139
- const truncated = this.getTruncatedExpect(snapId);
1162
+ const snap = this.getSnapExpect(snapId);
1163
+ const truncated = this.#getTruncatedSnapExpect(snapId);
1140
1164
  // Disable the snap and revoke all of its permissions before deleting
1141
1165
  // it. This ensures that the snap will not be restarted or otherwise
1142
1166
  // affect the host environment while we are deleting it.
@@ -1160,7 +1184,7 @@ class SnapController extends base_controller_1.BaseController {
1160
1184
  if (previousInitialConnections) {
1161
1185
  const revokedInitialConnections = (0, utils_2.setDiff)(previousInitialConnections, initialConnections);
1162
1186
  for (const origin of Object.keys(revokedInitialConnections)) {
1163
- this.removeSnapFromSubject(origin, snapId);
1187
+ this.disconnectOrigin(origin, snapId);
1164
1188
  }
1165
1189
  }
1166
1190
  for (const origin of Object.keys(initialConnections)) {
@@ -1198,12 +1222,13 @@ class SnapController extends base_controller_1.BaseController {
1198
1222
  });
1199
1223
  }
1200
1224
  /**
1201
- * Removes a snap's permission (caveat) from the specified subject.
1225
+ * Disconnect the Snap from the given origin, meaning the origin can no longer
1226
+ * interact with the Snap until it is reconnected.
1202
1227
  *
1203
- * @param origin - The origin from which to remove the snap.
1228
+ * @param origin - The origin from which to remove the Snap.
1204
1229
  * @param snapId - The id of the snap to remove.
1205
1230
  */
1206
- removeSnapFromSubject(origin, snapId) {
1231
+ disconnectOrigin(origin, snapId) {
1207
1232
  const subjectPermissions = this.messenger.call('PermissionController:getPermissions', origin);
1208
1233
  const snapIdsCaveat = subjectPermissions?.[snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY]?.caveats?.find((caveat) => caveat.type === snaps_utils_1.SnapCaveatType.SnapIds);
1209
1234
  if (!snapIdsCaveat) {
@@ -1246,7 +1271,7 @@ class SnapController extends base_controller_1.BaseController {
1246
1271
  #removeSnapFromSubjects(snapId) {
1247
1272
  const subjects = this.messenger.call('PermissionController:getSubjectNames');
1248
1273
  for (const subject of subjects) {
1249
- this.removeSnapFromSubject(subject, snapId);
1274
+ this.disconnectOrigin(subject, snapId);
1250
1275
  }
1251
1276
  }
1252
1277
  /**
@@ -1259,25 +1284,6 @@ class SnapController extends base_controller_1.BaseController {
1259
1284
  this.messenger.call('PermissionController:revokeAllPermissions', snapId);
1260
1285
  }
1261
1286
  }
1262
- /**
1263
- * Handles incrementing the activeReferences counter.
1264
- *
1265
- * @param snapId - The snap id of the snap that was referenced.
1266
- */
1267
- incrementActiveReferences(snapId) {
1268
- const runtime = this.#getRuntimeExpect(snapId);
1269
- runtime.activeReferences += 1;
1270
- }
1271
- /**
1272
- * Handles decrement the activeReferences counter.
1273
- *
1274
- * @param snapId - The snap id of the snap that was referenced..
1275
- */
1276
- decrementActiveReferences(snapId) {
1277
- const runtime = this.#getRuntimeExpect(snapId);
1278
- (0, utils_1.assert)(runtime.activeReferences > 0, 'SnapController reference management is in an invalid state.');
1279
- runtime.activeReferences -= 1;
1280
- }
1281
1287
  /**
1282
1288
  * Gets all snaps in their truncated format.
1283
1289
  *
@@ -1304,8 +1310,8 @@ class SnapController extends base_controller_1.BaseController {
1304
1310
  const permissions = this.messenger.call('PermissionController:getPermissions', origin) ?? {};
1305
1311
  const snaps = permissions[snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY]?.caveats?.find((caveat) => caveat.type === snaps_utils_1.SnapCaveatType.SnapIds)?.value ?? {};
1306
1312
  return Object.keys(snaps).reduce((permittedSnaps, snapId) => {
1307
- const snap = this.get(snapId);
1308
- const truncatedSnap = this.getTruncated(snapId);
1313
+ const snap = this.getSnap(snapId);
1314
+ const truncatedSnap = this.#getTruncatedSnap(snapId);
1309
1315
  if (truncatedSnap && snap?.status !== snaps_utils_1.SnapStatus.Installing) {
1310
1316
  permittedSnaps[snapId] = truncatedSnap;
1311
1317
  }
@@ -1345,9 +1351,9 @@ class SnapController extends base_controller_1.BaseController {
1345
1351
  });
1346
1352
  // Existing snaps may need to be updated, unless they should be re-installed (e.g. local snaps)
1347
1353
  // Everything else is treated as an install
1348
- const isUpdate = this.has(snapId) && !location.shouldAlwaysReload;
1354
+ const isUpdate = this.hasSnap(snapId) && !location.shouldAlwaysReload;
1349
1355
  if (isUpdate && this.#isValidUpdate(snapId, version)) {
1350
- const existingSnap = this.getExpect(snapId);
1356
+ const existingSnap = this.getSnapExpect(snapId);
1351
1357
  pendingUpdates.push({ snapId, oldVersion: existingSnap.version });
1352
1358
  let rollbackSnapshot = this.#getRollbackSnapshot(snapId);
1353
1359
  if (rollbackSnapshot === undefined) {
@@ -1364,12 +1370,12 @@ class SnapController extends base_controller_1.BaseController {
1364
1370
  result[snapId] = await this.#processRequestedSnap(origin, snapId, location, version);
1365
1371
  }
1366
1372
  // Once we finish all installs / updates, emit events.
1367
- pendingInstalls.forEach((snapId) => this.messenger.publish(`SnapController:snapInstalled`, this.getTruncatedExpect(snapId), origin, false));
1368
- pendingUpdates.forEach(({ snapId, oldVersion }) => this.messenger.publish(`SnapController:snapUpdated`, this.getTruncatedExpect(snapId), oldVersion, origin, false));
1373
+ pendingInstalls.forEach((snapId) => this.messenger.publish(`SnapController:snapInstalled`, this.#getTruncatedSnapExpect(snapId), origin, false));
1374
+ pendingUpdates.forEach(({ snapId, oldVersion }) => this.messenger.publish(`SnapController:snapUpdated`, this.#getTruncatedSnapExpect(snapId), oldVersion, origin, false));
1369
1375
  snapIds.forEach((snapId) => this.#rollbackSnapshots.delete(snapId));
1370
1376
  }
1371
1377
  catch (error) {
1372
- const installed = pendingInstalls.filter((snapId) => this.has(snapId));
1378
+ const installed = pendingInstalls.filter((snapId) => this.hasSnap(snapId));
1373
1379
  await this.removeSnaps(installed);
1374
1380
  const snapshottedSnaps = [...this.#rollbackSnapshots.keys()];
1375
1381
  const snapsToRollback = pendingUpdates
@@ -1391,7 +1397,7 @@ class SnapController extends base_controller_1.BaseController {
1391
1397
  * @returns The resulting snap object, or an error if something went wrong.
1392
1398
  */
1393
1399
  async #processRequestedSnap(origin, snapId, location, versionRange) {
1394
- const existingSnap = this.getTruncated(snapId);
1400
+ const existingSnap = this.#getTruncatedSnap(snapId);
1395
1401
  // For devX we always re-install local snaps.
1396
1402
  if (existingSnap && !location.shouldAlwaysReload) {
1397
1403
  if ((0, utils_1.satisfiesVersionRange)(existingSnap.version, versionRange)) {
@@ -1412,7 +1418,7 @@ class SnapController extends base_controller_1.BaseController {
1412
1418
  });
1413
1419
  this.messenger.publish('SnapController:snapInstallStarted', snapId, origin, false);
1414
1420
  // Existing snaps must be stopped before overwriting
1415
- if (existingSnap && this.isRunning(snapId)) {
1421
+ if (existingSnap && this.isSnapRunning(snapId)) {
1416
1422
  await this.stopSnap(snapId, snaps_utils_1.SnapStatusEvents.Stop);
1417
1423
  }
1418
1424
  // Existing snaps that should be re-installed should not maintain their existing permissions
@@ -1436,7 +1442,7 @@ class SnapController extends base_controller_1.BaseController {
1436
1442
  snapId,
1437
1443
  sourceCode,
1438
1444
  });
1439
- const truncated = this.getTruncatedExpect(snapId);
1445
+ const truncated = this.#getTruncatedSnapExpect(snapId);
1440
1446
  this.#updateApproval(pendingApproval.id, {
1441
1447
  loading: false,
1442
1448
  type: exports.SNAP_APPROVAL_INSTALL,
@@ -1509,7 +1515,7 @@ class SnapController extends base_controller_1.BaseController {
1509
1515
  this.#assertCanInstallSnaps();
1510
1516
  }
1511
1517
  await this.#ensureCanUsePlatform();
1512
- const snap = this.getExpect(snapId);
1518
+ const snap = this.getSnapExpect(snapId);
1513
1519
  const { preinstalled, removable, hidden, hideSnapBranding } = snap;
1514
1520
  if (preinstalled && !automaticUpdate) {
1515
1521
  throw new Error('Preinstalled Snaps cannot be manually updated.');
@@ -1571,7 +1577,7 @@ class SnapController extends base_controller_1.BaseController {
1571
1577
  (0, utils_1.assert)(automaticUpdate);
1572
1578
  approvedNewPermissions = newPermissions;
1573
1579
  }
1574
- if (this.isRunning(snapId)) {
1580
+ if (this.isSnapRunning(snapId)) {
1575
1581
  await this.stopSnap(snapId, snaps_utils_1.SnapStatusEvents.Stop);
1576
1582
  }
1577
1583
  this.#transition(snapId, snaps_utils_1.SnapStatusEvents.Update);
@@ -1611,7 +1617,7 @@ class SnapController extends base_controller_1.BaseController {
1611
1617
  catch {
1612
1618
  throw new Error(`Snap ${snapId} crashed with updated source code.`);
1613
1619
  }
1614
- const truncatedSnap = this.getTruncatedExpect(snapId);
1620
+ const truncatedSnap = this.#getTruncatedSnapExpect(snapId);
1615
1621
  if (pendingApproval) {
1616
1622
  this.#updateApproval(pendingApproval.id, {
1617
1623
  loading: false,
@@ -1635,7 +1641,7 @@ class SnapController extends base_controller_1.BaseController {
1635
1641
  }
1636
1642
  }
1637
1643
  async #resolveAllowlistVersion(snapId, versionRange) {
1638
- return await this.messenger.call('SnapsRegistry:resolveVersion', snapId, versionRange);
1644
+ return await this.messenger.call('SnapRegistryController:resolveVersion', snapId, versionRange);
1639
1645
  }
1640
1646
  /**
1641
1647
  * Returns a promise representing the complete installation of the requested snap.
@@ -1693,7 +1699,7 @@ class SnapController extends base_controller_1.BaseController {
1693
1699
  }
1694
1700
  async #startSnap(snapData) {
1695
1701
  const { snapId } = snapData;
1696
- if (this.isRunning(snapId)) {
1702
+ if (this.isSnapRunning(snapId)) {
1697
1703
  throw new Error(`Snap "${snapId}" is already started.`);
1698
1704
  }
1699
1705
  try {
@@ -1936,7 +1942,7 @@ class SnapController extends base_controller_1.BaseController {
1936
1942
  */
1937
1943
  async handleRequest({ snapId, origin, handler: handlerType, request: rawRequest, }) {
1938
1944
  await this.#ensureCanUsePlatform();
1939
- const snap = this.get(snapId);
1945
+ const snap = this.getSnap(snapId);
1940
1946
  (0, utils_1.assert)(snap, `The Snap "${snapId}" is not installed. Please install it before invoking it.`);
1941
1947
  (0, utils_1.assert)(origin === constants_1.METAMASK_ORIGIN || (0, snaps_utils_1.isValidUrl)(origin), "'origin' must be a valid URL or 'metamask'.");
1942
1948
  const request = {
@@ -1983,7 +1989,7 @@ class SnapController extends base_controller_1.BaseController {
1983
1989
  if (runtime.stopPromise) {
1984
1990
  await runtime.stopPromise;
1985
1991
  }
1986
- if (!this.isRunning(snapId)) {
1992
+ if (!this.isSnapRunning(snapId)) {
1987
1993
  if (!runtime.startPromise) {
1988
1994
  runtime.startPromise = this.startSnap(snapId);
1989
1995
  }
@@ -2002,7 +2008,7 @@ class SnapController extends base_controller_1.BaseController {
2002
2008
  try {
2003
2009
  const result = await (0, utils_2.withTimeout)(handleRpcRequestPromise, timer);
2004
2010
  if (result === utils_2.hasTimedOut) {
2005
- const stopping = runtime.stopPromise !== null || !this.isRunning(snapId);
2011
+ const stopping = runtime.stopPromise !== null || !this.isSnapRunning(snapId);
2006
2012
  throw new Error(stopping
2007
2013
  ? `${snapId} was stopped and the request was cancelled. This is likely because the Snap crashed.`
2008
2014
  : `${snapId} failed to respond to the request in time.`);
@@ -2023,7 +2029,7 @@ class SnapController extends base_controller_1.BaseController {
2023
2029
  // We flag the RPC request as finished early since termination may affect pending requests
2024
2030
  this.#recordSnapRpcRequestFinish(snapId, transformedRequest.id, handlerType, origin, false);
2025
2031
  const [jsonRpcError, handled] = (0, snaps_utils_1.unwrapError)(error);
2026
- const stopping = runtime.stopPromise !== null || !this.isRunning(snapId);
2032
+ const stopping = runtime.stopPromise !== null || !this.isSnapRunning(snapId);
2027
2033
  if (!handled) {
2028
2034
  if (!stopping) {
2029
2035
  (0, snaps_utils_1.logError)(`"${snapId}" crashed due to an unhandled error:`, jsonRpcError);
@@ -2286,7 +2292,7 @@ class SnapController extends base_controller_1.BaseController {
2286
2292
  if (runtime.pendingInboundRequests.length === 0) {
2287
2293
  runtime.lastRequest = Date.now();
2288
2294
  }
2289
- const snap = this.get(snapId);
2295
+ const snap = this.getSnap(snapId);
2290
2296
  if ((0, utils_2.isTrackableHandler)(handlerType) && !snap?.preinstalled) {
2291
2297
  try {
2292
2298
  this.#trackSnapExport(snapId, handlerType, success, origin);
@@ -2342,7 +2348,7 @@ class SnapController extends base_controller_1.BaseController {
2342
2348
  }
2343
2349
  await this.stopSnap(snapId, snaps_utils_1.SnapStatusEvents.Stop);
2344
2350
  // Always set to stopped even if it wasn't running initially
2345
- if (this.get(snapId)?.status !== snaps_utils_1.SnapStatus.Stopped) {
2351
+ if (this.getSnap(snapId)?.status !== snaps_utils_1.SnapStatus.Stopped) {
2346
2352
  this.#transition(snapId, snaps_utils_1.SnapStatusEvents.Stop);
2347
2353
  }
2348
2354
  const { statePatches, permissions, previousInitialConnections, newInitialConnections, previousSourceCode, } = rollbackSnapshot;
@@ -2356,7 +2362,7 @@ class SnapController extends base_controller_1.BaseController {
2356
2362
  }
2357
2363
  // Reset snap status, as we may have been in another state when we stored state patches
2358
2364
  // But now we are 100% in a stopped state
2359
- if (this.get(snapId)?.status !== snaps_utils_1.SnapStatus.Stopped) {
2365
+ if (this.getSnap(snapId)?.status !== snaps_utils_1.SnapStatus.Stopped) {
2360
2366
  this.update((state) => {
2361
2367
  state.snaps[snapId].status = snaps_utils_1.SnapStatus.Stopped;
2362
2368
  });
@@ -2369,7 +2375,7 @@ class SnapController extends base_controller_1.BaseController {
2369
2375
  });
2370
2376
  // Calling this in reverse order to undo the changes
2371
2377
  this.#handleInitialConnections(snapId, newInitialConnections ?? null, previousInitialConnections ?? {});
2372
- const truncatedSnap = this.getTruncatedExpect(snapId);
2378
+ const truncatedSnap = this.#getTruncatedSnapExpect(snapId);
2373
2379
  this.messenger.publish('SnapController:snapRolledback', truncatedSnap, rollbackSnapshot.newVersion);
2374
2380
  this.#rollbackSnapshots.delete(snapId);
2375
2381
  }
@@ -2396,7 +2402,7 @@ class SnapController extends base_controller_1.BaseController {
2396
2402
  if (this.#snapsRuntimeData.has(snapId)) {
2397
2403
  return;
2398
2404
  }
2399
- const snap = this.get(snapId);
2405
+ const snap = this.getSnap(snapId);
2400
2406
  const interpreter = (0, fsm_1.interpret)(this.#statusMachine);
2401
2407
  interpreter.start({
2402
2408
  context: { snapId },
@@ -2411,7 +2417,6 @@ class SnapController extends base_controller_1.BaseController {
2411
2417
  installPromise: null,
2412
2418
  encryptionKey: null,
2413
2419
  encryptionSalt: null,
2414
- activeReferences: 0,
2415
2420
  pendingInboundRequests: [],
2416
2421
  pendingOutboundRequests: 0,
2417
2422
  interpreter,
@@ -2522,7 +2527,7 @@ class SnapController extends base_controller_1.BaseController {
2522
2527
  * @returns `true` if validation checks pass and `false` if they do not.
2523
2528
  */
2524
2529
  #isValidUpdate(snapId, newVersionRange) {
2525
- const existingSnap = this.getExpect(snapId);
2530
+ const existingSnap = this.getSnapExpect(snapId);
2526
2531
  if ((0, utils_1.satisfiesVersionRange)(existingSnap.version, newVersionRange)) {
2527
2532
  return false;
2528
2533
  }