@metamask/snaps-rpc-methods 15.1.1 → 16.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 (344) hide show
  1. package/CHANGELOG.md +27 -4
  2. package/dist/index.cjs +1 -4
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +1 -2
  5. package/dist/index.d.cts.map +1 -1
  6. package/dist/index.d.mts +1 -2
  7. package/dist/index.d.mts.map +1 -1
  8. package/dist/index.mjs +1 -2
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/permissions.cjs +18 -8
  11. package/dist/permissions.cjs.map +1 -1
  12. package/dist/permissions.d.cts +3 -2
  13. package/dist/permissions.d.cts.map +1 -1
  14. package/dist/permissions.d.mts +3 -2
  15. package/dist/permissions.d.mts.map +1 -1
  16. package/dist/permissions.mjs +17 -7
  17. package/dist/permissions.mjs.map +1 -1
  18. package/dist/permitted/cancelBackgroundEvent.cjs +10 -14
  19. package/dist/permitted/cancelBackgroundEvent.cjs.map +1 -1
  20. package/dist/permitted/cancelBackgroundEvent.d.cts +9 -12
  21. package/dist/permitted/cancelBackgroundEvent.d.cts.map +1 -1
  22. package/dist/permitted/cancelBackgroundEvent.d.mts +9 -12
  23. package/dist/permitted/cancelBackgroundEvent.d.mts.map +1 -1
  24. package/dist/permitted/cancelBackgroundEvent.mjs +10 -14
  25. package/dist/permitted/cancelBackgroundEvent.mjs.map +1 -1
  26. package/dist/permitted/clearState.cjs +10 -16
  27. package/dist/permitted/clearState.cjs.map +1 -1
  28. package/dist/permitted/clearState.d.cts +9 -23
  29. package/dist/permitted/clearState.d.cts.map +1 -1
  30. package/dist/permitted/clearState.d.mts +9 -23
  31. package/dist/permitted/clearState.d.mts.map +1 -1
  32. package/dist/permitted/clearState.mjs +10 -16
  33. package/dist/permitted/clearState.mjs.map +1 -1
  34. package/dist/permitted/closeWebSocket.cjs +7 -14
  35. package/dist/permitted/closeWebSocket.cjs.map +1 -1
  36. package/dist/permitted/closeWebSocket.d.cts +9 -12
  37. package/dist/permitted/closeWebSocket.d.cts.map +1 -1
  38. package/dist/permitted/closeWebSocket.d.mts +9 -12
  39. package/dist/permitted/closeWebSocket.d.mts.map +1 -1
  40. package/dist/permitted/closeWebSocket.mjs +7 -14
  41. package/dist/permitted/closeWebSocket.mjs.map +1 -1
  42. package/dist/permitted/createInterface.cjs +11 -15
  43. package/dist/permitted/createInterface.cjs.map +1 -1
  44. package/dist/permitted/createInterface.d.cts +23 -37
  45. package/dist/permitted/createInterface.d.cts.map +1 -1
  46. package/dist/permitted/createInterface.d.mts +23 -37
  47. package/dist/permitted/createInterface.d.mts.map +1 -1
  48. package/dist/permitted/createInterface.mjs +11 -15
  49. package/dist/permitted/createInterface.mjs.map +1 -1
  50. package/dist/permitted/endTrace.cjs +4 -6
  51. package/dist/permitted/endTrace.cjs.map +1 -1
  52. package/dist/permitted/endTrace.d.cts +8 -11
  53. package/dist/permitted/endTrace.d.cts.map +1 -1
  54. package/dist/permitted/endTrace.d.mts +8 -11
  55. package/dist/permitted/endTrace.d.mts.map +1 -1
  56. package/dist/permitted/endTrace.mjs +4 -6
  57. package/dist/permitted/endTrace.mjs.map +1 -1
  58. package/dist/permitted/getAllSnaps.cjs +5 -11
  59. package/dist/permitted/getAllSnaps.cjs.map +1 -1
  60. package/dist/permitted/getAllSnaps.d.cts +10 -14
  61. package/dist/permitted/getAllSnaps.d.cts.map +1 -1
  62. package/dist/permitted/getAllSnaps.d.mts +10 -14
  63. package/dist/permitted/getAllSnaps.d.mts.map +1 -1
  64. package/dist/permitted/getAllSnaps.mjs +5 -11
  65. package/dist/permitted/getAllSnaps.mjs.map +1 -1
  66. package/dist/permitted/getBackgroundEvents.cjs +8 -15
  67. package/dist/permitted/getBackgroundEvents.cjs.map +1 -1
  68. package/dist/permitted/getBackgroundEvents.d.cts +10 -13
  69. package/dist/permitted/getBackgroundEvents.d.cts.map +1 -1
  70. package/dist/permitted/getBackgroundEvents.d.mts +10 -13
  71. package/dist/permitted/getBackgroundEvents.d.mts.map +1 -1
  72. package/dist/permitted/getBackgroundEvents.mjs +8 -15
  73. package/dist/permitted/getBackgroundEvents.mjs.map +1 -1
  74. package/dist/permitted/getClientStatus.cjs +5 -6
  75. package/dist/permitted/getClientStatus.cjs.map +1 -1
  76. package/dist/permitted/getClientStatus.d.cts +17 -18
  77. package/dist/permitted/getClientStatus.d.cts.map +1 -1
  78. package/dist/permitted/getClientStatus.d.mts +17 -18
  79. package/dist/permitted/getClientStatus.d.mts.map +1 -1
  80. package/dist/permitted/getClientStatus.mjs +5 -6
  81. package/dist/permitted/getClientStatus.mjs.map +1 -1
  82. package/dist/permitted/getFile.cjs +7 -11
  83. package/dist/permitted/getFile.cjs.map +1 -1
  84. package/dist/permitted/getFile.d.cts +8 -10
  85. package/dist/permitted/getFile.d.cts.map +1 -1
  86. package/dist/permitted/getFile.d.mts +8 -10
  87. package/dist/permitted/getFile.d.mts.map +1 -1
  88. package/dist/permitted/getFile.mjs +7 -11
  89. package/dist/permitted/getFile.mjs.map +1 -1
  90. package/dist/permitted/getInterfaceContext.cjs +12 -15
  91. package/dist/permitted/getInterfaceContext.cjs.map +1 -1
  92. package/dist/permitted/getInterfaceContext.d.cts +9 -21
  93. package/dist/permitted/getInterfaceContext.d.cts.map +1 -1
  94. package/dist/permitted/getInterfaceContext.d.mts +9 -21
  95. package/dist/permitted/getInterfaceContext.d.mts.map +1 -1
  96. package/dist/permitted/getInterfaceContext.mjs +12 -15
  97. package/dist/permitted/getInterfaceContext.mjs.map +1 -1
  98. package/dist/permitted/getInterfaceState.cjs +11 -15
  99. package/dist/permitted/getInterfaceState.cjs.map +1 -1
  100. package/dist/permitted/getInterfaceState.d.cts +9 -21
  101. package/dist/permitted/getInterfaceState.d.cts.map +1 -1
  102. package/dist/permitted/getInterfaceState.d.mts +9 -21
  103. package/dist/permitted/getInterfaceState.d.mts.map +1 -1
  104. package/dist/permitted/getInterfaceState.mjs +11 -15
  105. package/dist/permitted/getInterfaceState.mjs.map +1 -1
  106. package/dist/permitted/getSnaps.cjs +6 -12
  107. package/dist/permitted/getSnaps.cjs.map +1 -1
  108. package/dist/permitted/getSnaps.d.cts +11 -14
  109. package/dist/permitted/getSnaps.d.cts.map +1 -1
  110. package/dist/permitted/getSnaps.d.mts +11 -14
  111. package/dist/permitted/getSnaps.d.mts.map +1 -1
  112. package/dist/permitted/getSnaps.mjs +6 -12
  113. package/dist/permitted/getSnaps.mjs.map +1 -1
  114. package/dist/permitted/getState.cjs +9 -11
  115. package/dist/permitted/getState.cjs.map +1 -1
  116. package/dist/permitted/getState.d.cts +17 -28
  117. package/dist/permitted/getState.d.cts.map +1 -1
  118. package/dist/permitted/getState.d.mts +17 -28
  119. package/dist/permitted/getState.d.mts.map +1 -1
  120. package/dist/permitted/getState.mjs +9 -11
  121. package/dist/permitted/getState.mjs.map +1 -1
  122. package/dist/permitted/getWebSockets.cjs +11 -14
  123. package/dist/permitted/getWebSockets.cjs.map +1 -1
  124. package/dist/permitted/getWebSockets.d.cts +10 -13
  125. package/dist/permitted/getWebSockets.d.cts.map +1 -1
  126. package/dist/permitted/getWebSockets.d.mts +10 -13
  127. package/dist/permitted/getWebSockets.d.mts.map +1 -1
  128. package/dist/permitted/getWebSockets.mjs +11 -14
  129. package/dist/permitted/getWebSockets.mjs.map +1 -1
  130. package/dist/permitted/index.cjs +0 -1
  131. package/dist/permitted/index.cjs.map +1 -1
  132. package/dist/permitted/index.d.cts +29 -25
  133. package/dist/permitted/index.d.cts.map +1 -1
  134. package/dist/permitted/index.d.mts +29 -25
  135. package/dist/permitted/index.d.mts.map +1 -1
  136. package/dist/permitted/index.mjs +0 -1
  137. package/dist/permitted/index.mjs.map +1 -1
  138. package/dist/permitted/invokeKeyring.cjs +12 -13
  139. package/dist/permitted/invokeKeyring.cjs.map +1 -1
  140. package/dist/permitted/invokeKeyring.d.cts +17 -16
  141. package/dist/permitted/invokeKeyring.d.cts.map +1 -1
  142. package/dist/permitted/invokeKeyring.d.mts +17 -16
  143. package/dist/permitted/invokeKeyring.d.mts.map +1 -1
  144. package/dist/permitted/invokeKeyring.mjs +12 -13
  145. package/dist/permitted/invokeKeyring.mjs.map +1 -1
  146. package/dist/permitted/invokeSnapSugar.cjs +6 -10
  147. package/dist/permitted/invokeSnapSugar.cjs.map +1 -1
  148. package/dist/permitted/invokeSnapSugar.d.cts +9 -12
  149. package/dist/permitted/invokeSnapSugar.d.cts.map +1 -1
  150. package/dist/permitted/invokeSnapSugar.d.mts +9 -12
  151. package/dist/permitted/invokeSnapSugar.d.mts.map +1 -1
  152. package/dist/permitted/invokeSnapSugar.mjs +6 -10
  153. package/dist/permitted/invokeSnapSugar.mjs.map +1 -1
  154. package/dist/permitted/listEntropySources.cjs +28 -12
  155. package/dist/permitted/listEntropySources.cjs.map +1 -1
  156. package/dist/permitted/listEntropySources.d.cts +12 -23
  157. package/dist/permitted/listEntropySources.d.cts.map +1 -1
  158. package/dist/permitted/listEntropySources.d.mts +12 -23
  159. package/dist/permitted/listEntropySources.d.mts.map +1 -1
  160. package/dist/permitted/listEntropySources.mjs +28 -12
  161. package/dist/permitted/listEntropySources.mjs.map +1 -1
  162. package/dist/permitted/middleware.cjs +70 -20
  163. package/dist/permitted/middleware.cjs.map +1 -1
  164. package/dist/permitted/middleware.d.cts +5 -2
  165. package/dist/permitted/middleware.d.cts.map +1 -1
  166. package/dist/permitted/middleware.d.mts +5 -2
  167. package/dist/permitted/middleware.d.mts.map +1 -1
  168. package/dist/permitted/middleware.mjs +70 -20
  169. package/dist/permitted/middleware.mjs.map +1 -1
  170. package/dist/permitted/openWebSocket.cjs +7 -14
  171. package/dist/permitted/openWebSocket.cjs.map +1 -1
  172. package/dist/permitted/openWebSocket.d.cts +9 -12
  173. package/dist/permitted/openWebSocket.d.cts.map +1 -1
  174. package/dist/permitted/openWebSocket.d.mts +9 -12
  175. package/dist/permitted/openWebSocket.d.mts.map +1 -1
  176. package/dist/permitted/openWebSocket.mjs +7 -14
  177. package/dist/permitted/openWebSocket.mjs.map +1 -1
  178. package/dist/permitted/requestSnaps.cjs +14 -19
  179. package/dist/permitted/requestSnaps.cjs.map +1 -1
  180. package/dist/permitted/requestSnaps.d.cts +9 -36
  181. package/dist/permitted/requestSnaps.d.cts.map +1 -1
  182. package/dist/permitted/requestSnaps.d.mts +9 -36
  183. package/dist/permitted/requestSnaps.d.mts.map +1 -1
  184. package/dist/permitted/requestSnaps.mjs +15 -20
  185. package/dist/permitted/requestSnaps.mjs.map +1 -1
  186. package/dist/permitted/resolveInterface.cjs +11 -15
  187. package/dist/permitted/resolveInterface.cjs.map +1 -1
  188. package/dist/permitted/resolveInterface.d.cts +12 -24
  189. package/dist/permitted/resolveInterface.d.cts.map +1 -1
  190. package/dist/permitted/resolveInterface.d.mts +12 -24
  191. package/dist/permitted/resolveInterface.d.mts.map +1 -1
  192. package/dist/permitted/resolveInterface.mjs +11 -15
  193. package/dist/permitted/resolveInterface.mjs.map +1 -1
  194. package/dist/permitted/scheduleBackgroundEvent.cjs +11 -14
  195. package/dist/permitted/scheduleBackgroundEvent.cjs.map +1 -1
  196. package/dist/permitted/scheduleBackgroundEvent.d.cts +10 -17
  197. package/dist/permitted/scheduleBackgroundEvent.d.cts.map +1 -1
  198. package/dist/permitted/scheduleBackgroundEvent.d.mts +10 -17
  199. package/dist/permitted/scheduleBackgroundEvent.d.mts.map +1 -1
  200. package/dist/permitted/scheduleBackgroundEvent.mjs +11 -14
  201. package/dist/permitted/scheduleBackgroundEvent.mjs.map +1 -1
  202. package/dist/permitted/sendWebSocketMessage.cjs +10 -14
  203. package/dist/permitted/sendWebSocketMessage.cjs.map +1 -1
  204. package/dist/permitted/sendWebSocketMessage.d.cts +9 -12
  205. package/dist/permitted/sendWebSocketMessage.d.cts.map +1 -1
  206. package/dist/permitted/sendWebSocketMessage.d.mts +9 -12
  207. package/dist/permitted/sendWebSocketMessage.d.mts.map +1 -1
  208. package/dist/permitted/sendWebSocketMessage.mjs +10 -14
  209. package/dist/permitted/sendWebSocketMessage.mjs.map +1 -1
  210. package/dist/permitted/setState.cjs +18 -21
  211. package/dist/permitted/setState.cjs.map +1 -1
  212. package/dist/permitted/setState.d.cts +18 -45
  213. package/dist/permitted/setState.d.cts.map +1 -1
  214. package/dist/permitted/setState.d.mts +18 -45
  215. package/dist/permitted/setState.d.mts.map +1 -1
  216. package/dist/permitted/setState.mjs +18 -21
  217. package/dist/permitted/setState.mjs.map +1 -1
  218. package/dist/permitted/startTrace.cjs +4 -6
  219. package/dist/permitted/startTrace.cjs.map +1 -1
  220. package/dist/permitted/startTrace.d.cts +8 -11
  221. package/dist/permitted/startTrace.d.cts.map +1 -1
  222. package/dist/permitted/startTrace.d.mts +8 -11
  223. package/dist/permitted/startTrace.d.mts.map +1 -1
  224. package/dist/permitted/startTrace.mjs +4 -6
  225. package/dist/permitted/startTrace.mjs.map +1 -1
  226. package/dist/permitted/trackError.cjs +4 -6
  227. package/dist/permitted/trackError.cjs.map +1 -1
  228. package/dist/permitted/trackError.d.cts +8 -11
  229. package/dist/permitted/trackError.d.cts.map +1 -1
  230. package/dist/permitted/trackError.d.mts +8 -11
  231. package/dist/permitted/trackError.d.mts.map +1 -1
  232. package/dist/permitted/trackError.mjs +4 -6
  233. package/dist/permitted/trackError.mjs.map +1 -1
  234. package/dist/permitted/trackEvent.cjs +4 -6
  235. package/dist/permitted/trackEvent.cjs.map +1 -1
  236. package/dist/permitted/trackEvent.d.cts +8 -11
  237. package/dist/permitted/trackEvent.d.cts.map +1 -1
  238. package/dist/permitted/trackEvent.d.mts +8 -11
  239. package/dist/permitted/trackEvent.d.mts.map +1 -1
  240. package/dist/permitted/trackEvent.mjs +4 -6
  241. package/dist/permitted/trackEvent.mjs.map +1 -1
  242. package/dist/permitted/updateInterface.cjs +11 -15
  243. package/dist/permitted/updateInterface.cjs.map +1 -1
  244. package/dist/permitted/updateInterface.d.cts +9 -22
  245. package/dist/permitted/updateInterface.d.cts.map +1 -1
  246. package/dist/permitted/updateInterface.d.mts +9 -22
  247. package/dist/permitted/updateInterface.d.mts.map +1 -1
  248. package/dist/permitted/updateInterface.mjs +11 -15
  249. package/dist/permitted/updateInterface.mjs.map +1 -1
  250. package/dist/restricted/dialog.cjs +23 -30
  251. package/dist/restricted/dialog.cjs.map +1 -1
  252. package/dist/restricted/dialog.d.cts +10 -58
  253. package/dist/restricted/dialog.d.cts.map +1 -1
  254. package/dist/restricted/dialog.d.mts +10 -58
  255. package/dist/restricted/dialog.d.mts.map +1 -1
  256. package/dist/restricted/dialog.mjs +23 -30
  257. package/dist/restricted/dialog.mjs.map +1 -1
  258. package/dist/restricted/getBip32Entropy.cjs +15 -12
  259. package/dist/restricted/getBip32Entropy.cjs.map +1 -1
  260. package/dist/restricted/getBip32Entropy.d.cts +11 -24
  261. package/dist/restricted/getBip32Entropy.d.cts.map +1 -1
  262. package/dist/restricted/getBip32Entropy.d.mts +11 -24
  263. package/dist/restricted/getBip32Entropy.d.mts.map +1 -1
  264. package/dist/restricted/getBip32Entropy.mjs +16 -13
  265. package/dist/restricted/getBip32Entropy.mjs.map +1 -1
  266. package/dist/restricted/getBip32PublicKey.cjs +15 -12
  267. package/dist/restricted/getBip32PublicKey.cjs.map +1 -1
  268. package/dist/restricted/getBip32PublicKey.d.cts +11 -24
  269. package/dist/restricted/getBip32PublicKey.d.cts.map +1 -1
  270. package/dist/restricted/getBip32PublicKey.d.mts +11 -24
  271. package/dist/restricted/getBip32PublicKey.d.mts.map +1 -1
  272. package/dist/restricted/getBip32PublicKey.mjs +16 -13
  273. package/dist/restricted/getBip32PublicKey.mjs.map +1 -1
  274. package/dist/restricted/getBip44Entropy.cjs +14 -10
  275. package/dist/restricted/getBip44Entropy.cjs.map +1 -1
  276. package/dist/restricted/getBip44Entropy.d.cts +11 -15
  277. package/dist/restricted/getBip44Entropy.d.cts.map +1 -1
  278. package/dist/restricted/getBip44Entropy.d.mts +11 -15
  279. package/dist/restricted/getBip44Entropy.d.mts.map +1 -1
  280. package/dist/restricted/getBip44Entropy.mjs +15 -11
  281. package/dist/restricted/getBip44Entropy.mjs.map +1 -1
  282. package/dist/restricted/getEntropy.cjs +10 -10
  283. package/dist/restricted/getEntropy.cjs.map +1 -1
  284. package/dist/restricted/getEntropy.d.cts +11 -15
  285. package/dist/restricted/getEntropy.d.cts.map +1 -1
  286. package/dist/restricted/getEntropy.d.mts +11 -15
  287. package/dist/restricted/getEntropy.d.mts.map +1 -1
  288. package/dist/restricted/getEntropy.mjs +11 -11
  289. package/dist/restricted/getEntropy.mjs.map +1 -1
  290. package/dist/restricted/index.cjs.map +1 -1
  291. package/dist/restricted/index.d.cts +20 -160
  292. package/dist/restricted/index.d.cts.map +1 -1
  293. package/dist/restricted/index.d.mts +20 -160
  294. package/dist/restricted/index.d.mts.map +1 -1
  295. package/dist/restricted/index.mjs.map +1 -1
  296. package/dist/restricted/invokeSnap.cjs +11 -12
  297. package/dist/restricted/invokeSnap.cjs.map +1 -1
  298. package/dist/restricted/invokeSnap.d.cts +9 -13
  299. package/dist/restricted/invokeSnap.d.cts.map +1 -1
  300. package/dist/restricted/invokeSnap.d.mts +9 -13
  301. package/dist/restricted/invokeSnap.d.mts.map +1 -1
  302. package/dist/restricted/invokeSnap.mjs +11 -12
  303. package/dist/restricted/invokeSnap.mjs.map +1 -1
  304. package/dist/restricted/manageState.cjs +21 -20
  305. package/dist/restricted/manageState.cjs.map +1 -1
  306. package/dist/restricted/manageState.d.cts +12 -34
  307. package/dist/restricted/manageState.d.cts.map +1 -1
  308. package/dist/restricted/manageState.d.mts +12 -34
  309. package/dist/restricted/manageState.d.mts.map +1 -1
  310. package/dist/restricted/manageState.mjs +21 -20
  311. package/dist/restricted/manageState.mjs.map +1 -1
  312. package/dist/restricted/notify.cjs +31 -24
  313. package/dist/restricted/notify.cjs.map +1 -1
  314. package/dist/restricted/notify.d.cts +16 -25
  315. package/dist/restricted/notify.d.cts.map +1 -1
  316. package/dist/restricted/notify.d.mts +16 -25
  317. package/dist/restricted/notify.d.mts.map +1 -1
  318. package/dist/restricted/notify.mjs +32 -25
  319. package/dist/restricted/notify.mjs.map +1 -1
  320. package/dist/types.cjs +3 -0
  321. package/dist/types.cjs.map +1 -0
  322. package/dist/types.d.cts +155 -0
  323. package/dist/types.d.cts.map +1 -0
  324. package/dist/types.d.mts +155 -0
  325. package/dist/types.d.mts.map +1 -0
  326. package/dist/types.mjs +2 -0
  327. package/dist/types.mjs.map +1 -0
  328. package/dist/utils.cjs +78 -24
  329. package/dist/utils.cjs.map +1 -1
  330. package/dist/utils.d.cts +21 -13
  331. package/dist/utils.d.cts.map +1 -1
  332. package/dist/utils.d.mts +21 -13
  333. package/dist/utils.d.mts.map +1 -1
  334. package/dist/utils.mjs +75 -22
  335. package/dist/utils.mjs.map +1 -1
  336. package/package.json +6 -6
  337. package/dist/permitted/handlers.cjs +0 -63
  338. package/dist/permitted/handlers.cjs.map +0 -1
  339. package/dist/permitted/handlers.d.cts +0 -299
  340. package/dist/permitted/handlers.d.cts.map +0 -1
  341. package/dist/permitted/handlers.d.mts +0 -299
  342. package/dist/permitted/handlers.d.mts.map +0 -1
  343. package/dist/permitted/handlers.mjs +0 -60
  344. package/dist/permitted/handlers.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [16.0.0]
11
+
12
+ ### Changed
13
+
14
+ - **BREAKING:** Use messenger for permitted method implementations ([#3987](https://github.com/MetaMask/snaps/pull/3987))
15
+ - `createSnapsMethodMiddleware` now requires a `messenger` parameter.
16
+ - `createSnapsMethodMiddleware` will throw if the expected hooks are not passed.
17
+ - Most previously used method hooks are no longer required.
18
+ - **BREAKING:** Use messenger for restricted method implementations ([#3968](https://github.com/MetaMask/snaps/pull/3968))
19
+ - `buildSnapRestrictedMethodSpecifications` now requires a `messenger` parameter.
20
+ - Most previously used method hooks are no longer required.
21
+ - **BREAKING:** Assert expected hooks for restricted method specifications ([#3993](https://github.com/MetaMask/snaps/pull/3993))
22
+ - `buildSnapRestrictedMethodSpecifications` will now throw if the expected hooks are not passed.
23
+ - Bump `@metamask/permission-controller` `12.3.0` to `^13.1.0` ([#3984](https://github.com/MetaMask/snaps/pull/3984), [#3989](https://github.com/MetaMask/snaps/pull/3989))
24
+ - Bump `@metamask/json-rpc-engine` from `^10.2.4` to `^10.5.0` ([#3982](https://github.com/MetaMask/snaps/pull/3982),[#3992](https://github.com/MetaMask/snaps/pull/3992), [#3998](https://github.com/MetaMask/snaps/pull/3998))
25
+ - Bump `@metamask/messenger` from `^1.1.1` to `^1.2.0` ([#3981](https://github.com/MetaMask/snaps/pull/3981))
26
+
27
+ ### Removed
28
+
29
+ - **BREAKING:** `selectHooks` and `permittedMethods` are no longer exported ([#3987](https://github.com/MetaMask/snaps/pull/3987))
30
+ - A `selectHooks` implementation is exported from `@metamask/json-rpc-engine` if needed.
31
+
10
32
  ## [15.1.1]
11
33
 
12
34
  ### Fixed
@@ -370,15 +392,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
370
392
 
371
393
  ### Changed
372
394
 
373
- - Bump `@metamask/json-rpc-engine` from `^9.0.0` to `^9.0.2` ([#2593](https://github.com/metamask/snaps/pull/2593))
374
- - Bump `@metamask/permission-controller` from `^10.0.1` to `^11.0.0` ([#2593](https://github.com/metamask/snaps/pull/2593))
395
+ - Bump `@metamask/json-rpc-engine` from `^9.0.0` to `^9.0.2` ([#2593](https://github.com/MetaMask/snaps/pull/2593))
396
+ - Bump `@metamask/permission-controller` from `^10.0.1` to `^11.0.0` ([#2593](https://github.com/MetaMask/snaps/pull/2593))
375
397
  - Bump `@metamask/snaps-utils` from `^7.8.0` to `^7.8.1` ([#2595](https://github.com/MetaMask/snaps/pull/2595))
376
398
 
377
399
  ## [10.0.0]
378
400
 
379
401
  ### Added
380
402
 
381
- - **BREAKING:** `snap_dialog` now takes the `requestUserApproval` hook ([#2509](https://github.com/metamask/snaps/pull/2509))
403
+ - **BREAKING:** `snap_dialog` now takes the `requestUserApproval` hook ([#2509](https://github.com/MetaMask/snaps/pull/2509))
382
404
  - It should bind to the `addAndShowRequest` method of the `ApprovalController`.
383
405
  - Add type `DialogApprovalTypes` and object `DIALOG_APPROVAL_TYPES`.
384
406
 
@@ -615,7 +637,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
615
637
  - The version of the package no longer needs to match the version of all other
616
638
  MetaMask Snaps packages.
617
639
 
618
- [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@15.1.1...HEAD
640
+ [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@16.0.0...HEAD
641
+ [16.0.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@15.1.1...@metamask/snaps-rpc-methods@16.0.0
619
642
  [15.1.1]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@15.1.0...@metamask/snaps-rpc-methods@15.1.1
620
643
  [15.1.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@15.0.2...@metamask/snaps-rpc-methods@15.1.0
621
644
  [15.0.2]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@15.0.1...@metamask/snaps-rpc-methods@15.0.2
package/dist/index.cjs CHANGED
@@ -14,14 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.selectHooks = exports.SnapCaveatType = exports.createSnapsMethodMiddleware = exports.permittedMethods = void 0;
17
+ exports.SnapCaveatType = exports.createSnapsMethodMiddleware = void 0;
18
18
  var permitted_1 = require("./permitted/index.cjs");
19
- Object.defineProperty(exports, "permittedMethods", { enumerable: true, get: function () { return permitted_1.handlers; } });
20
19
  Object.defineProperty(exports, "createSnapsMethodMiddleware", { enumerable: true, get: function () { return permitted_1.createSnapsMethodMiddleware; } });
21
20
  var snaps_utils_1 = require("@metamask/snaps-utils");
22
21
  Object.defineProperty(exports, "SnapCaveatType", { enumerable: true, get: function () { return snaps_utils_1.SnapCaveatType; } });
23
- var utils_1 = require("./utils.cjs");
24
- Object.defineProperty(exports, "selectHooks", { enumerable: true, get: function () { return utils_1.selectHooks; } });
25
22
  __exportStar(require("./endowments/index.cjs"), exports);
26
23
  __exportStar(require("./middleware/index.cjs"), exports);
27
24
  __exportStar(require("./permissions.cjs"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mDAGqB;AAFnB,6GAAA,QAAQ,OAAoB;AAC5B,wHAAA,2BAA2B,OAAA;AAG7B,qDAAuD;AAA9C,6GAAA,cAAc,OAAA;AACvB,qCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,yDAA6B;AAC7B,yDAA6B;AAC7B,oDAA8B;AAC9B,yDAA6B","sourcesContent":["export {\n handlers as permittedMethods,\n createSnapsMethodMiddleware,\n} from './permitted';\nexport type { PermittedRpcMethodHooks } from './permitted';\nexport { SnapCaveatType } from '@metamask/snaps-utils';\nexport { selectHooks } from './utils';\nexport * from './endowments';\nexport * from './middleware';\nexport * from './permissions';\nexport * from './restricted';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mDAA0D;AAAjD,wHAAA,2BAA2B,OAAA;AAEpC,qDAAuD;AAA9C,6GAAA,cAAc,OAAA;AACvB,yDAA6B;AAC7B,yDAA6B;AAC7B,oDAA8B;AAC9B,yDAA6B","sourcesContent":["export { createSnapsMethodMiddleware } from './permitted';\nexport type { PermittedRpcMethodHooks } from './permitted';\nexport { SnapCaveatType } from '@metamask/snaps-utils';\nexport * from './endowments';\nexport * from './middleware';\nexport * from './permissions';\nexport * from './restricted';\n"]}
package/dist/index.d.cts CHANGED
@@ -1,7 +1,6 @@
1
- export { handlers as permittedMethods, createSnapsMethodMiddleware, } from "./permitted/index.cjs";
1
+ export { createSnapsMethodMiddleware } from "./permitted/index.cjs";
2
2
  export type { PermittedRpcMethodHooks } from "./permitted/index.cjs";
3
3
  export { SnapCaveatType } from "@metamask/snaps-utils";
4
- export { selectHooks } from "./utils.cjs";
5
4
  export * from "./endowments/index.cjs";
6
5
  export * from "./middleware/index.cjs";
7
6
  export * from "./permissions.cjs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,IAAI,gBAAgB,EAC5B,2BAA2B,GAC5B,8BAAoB;AACrB,YAAY,EAAE,uBAAuB,EAAE,8BAAoB;AAC3D,OAAO,EAAE,cAAc,EAAE,8BAA8B;AACvD,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,uCAA6B;AAC7B,uCAA6B;AAC7B,kCAA8B;AAC9B,uCAA6B"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,8BAAoB;AAC1D,YAAY,EAAE,uBAAuB,EAAE,8BAAoB;AAC3D,OAAO,EAAE,cAAc,EAAE,8BAA8B;AACvD,uCAA6B;AAC7B,uCAA6B;AAC7B,kCAA8B;AAC9B,uCAA6B"}
package/dist/index.d.mts CHANGED
@@ -1,7 +1,6 @@
1
- export { handlers as permittedMethods, createSnapsMethodMiddleware, } from "./permitted/index.mjs";
1
+ export { createSnapsMethodMiddleware } from "./permitted/index.mjs";
2
2
  export type { PermittedRpcMethodHooks } from "./permitted/index.mjs";
3
3
  export { SnapCaveatType } from "@metamask/snaps-utils";
4
- export { selectHooks } from "./utils.mjs";
5
4
  export * from "./endowments/index.mjs";
6
5
  export * from "./middleware/index.mjs";
7
6
  export * from "./permissions.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,IAAI,gBAAgB,EAC5B,2BAA2B,GAC5B,8BAAoB;AACrB,YAAY,EAAE,uBAAuB,EAAE,8BAAoB;AAC3D,OAAO,EAAE,cAAc,EAAE,8BAA8B;AACvD,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,uCAA6B;AAC7B,uCAA6B;AAC7B,kCAA8B;AAC9B,uCAA6B"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,8BAAoB;AAC1D,YAAY,EAAE,uBAAuB,EAAE,8BAAoB;AAC3D,OAAO,EAAE,cAAc,EAAE,8BAA8B;AACvD,uCAA6B;AAC7B,uCAA6B;AAC7B,kCAA8B;AAC9B,uCAA6B"}
package/dist/index.mjs CHANGED
@@ -1,6 +1,5 @@
1
- export { handlers as permittedMethods, createSnapsMethodMiddleware } from "./permitted/index.mjs";
1
+ export { createSnapsMethodMiddleware } from "./permitted/index.mjs";
2
2
  export { SnapCaveatType } from "@metamask/snaps-utils";
3
- export { selectHooks } from "./utils.mjs";
4
3
  export * from "./endowments/index.mjs";
5
4
  export * from "./middleware/index.mjs";
6
5
  export * from "./permissions.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,IAAI,gBAAgB,EAC5B,2BAA2B,EAC5B,8BAAoB;AAErB,OAAO,EAAE,cAAc,EAAE,8BAA8B;AACvD,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,uCAA6B;AAC7B,uCAA6B;AAC7B,kCAA8B;AAC9B,uCAA6B","sourcesContent":["export {\n handlers as permittedMethods,\n createSnapsMethodMiddleware,\n} from './permitted';\nexport type { PermittedRpcMethodHooks } from './permitted';\nexport { SnapCaveatType } from '@metamask/snaps-utils';\nexport { selectHooks } from './utils';\nexport * from './endowments';\nexport * from './middleware';\nexport * from './permissions';\nexport * from './restricted';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,8BAAoB;AAE1D,OAAO,EAAE,cAAc,EAAE,8BAA8B;AACvD,uCAA6B;AAC7B,uCAA6B;AAC7B,kCAA8B;AAC9B,uCAA6B","sourcesContent":["export { createSnapsMethodMiddleware } from './permitted';\nexport type { PermittedRpcMethodHooks } from './permitted';\nexport { SnapCaveatType } from '@metamask/snaps-utils';\nexport * from './endowments';\nexport * from './middleware';\nexport * from './permissions';\nexport * from './restricted';\n"]}
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildSnapRestrictedMethodSpecifications = exports.buildSnapEndowmentSpecifications = exports.processSnapPermissions = void 0;
4
+ const v2_1 = require("@metamask/json-rpc-engine/v2");
5
+ const permission_controller_1 = require("@metamask/permission-controller");
4
6
  const utils_1 = require("@metamask/utils");
5
7
  const endowments_1 = require("./endowments/index.cjs");
6
8
  const restricted_1 = require("./restricted/index.cjs");
7
- const utils_2 = require("./utils.cjs");
8
9
  /**
9
10
  * Map initial permissions as defined in a Snap manifest to something that can
10
11
  * be processed by the PermissionsController. Each caveat mapping function
@@ -42,14 +43,23 @@ const buildSnapEndowmentSpecifications = (excludedEndowments) => Object.values(e
42
43
  return allSpecifications;
43
44
  }, {});
44
45
  exports.buildSnapEndowmentSpecifications = buildSnapEndowmentSpecifications;
45
- const buildSnapRestrictedMethodSpecifications = (excludedPermissions, hooks) => Object.values(restricted_1.restrictedMethodPermissionBuilders).reduce((specifications, { targetName, specificationBuilder, methodHooks }) => {
46
- if (!excludedPermissions.includes(targetName)) {
46
+ const buildSnapRestrictedMethodSpecifications = (excludedPermissions, hooks, messenger) => {
47
+ const permissionBuilders = Object.values(restricted_1.restrictedMethodPermissionBuilders).filter((builder) => !excludedPermissions.includes(builder.targetName));
48
+ const expectedHookNames = new Set(permissionBuilders.flatMap((builder) => builder.methodHooks
49
+ ? Object.getOwnPropertyNames(builder.methodHooks)
50
+ : []));
51
+ (0, v2_1.assertExpectedHooks)(hooks, expectedHookNames);
52
+ return permissionBuilders.reduce((specifications, { targetName, specificationBuilder, methodHooks, actionNames }) => {
47
53
  specifications[targetName] = specificationBuilder({
48
- // @ts-expect-error The selectHooks type is wonky
49
- methodHooks: (0, utils_2.selectHooks)(hooks, methodHooks),
54
+ methodHooks: (0, v2_1.selectHooks)(hooks, methodHooks),
55
+ messenger: (0, permission_controller_1.createRestrictedMethodMessenger)({
56
+ namespace: targetName,
57
+ rootMessenger: messenger,
58
+ actionNames: actionNames,
59
+ }),
50
60
  });
51
- }
52
- return specifications;
53
- }, {});
61
+ return specifications;
62
+ }, {});
63
+ };
54
64
  exports.buildSnapRestrictedMethodSpecifications = buildSnapRestrictedMethodSpecifications;
55
65
  //# sourceMappingURL=permissions.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.cjs","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":";;;AAKA,2CAA8C;AAE9C,uDAGsB;AACtB,uDAGsB;AACtB,uCAAsC;AAEtC;;;;;;;;;;GAUG;AACH,SAAgB,sBAAsB,CACpC,kBAAmC;IAEnC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAE,EAAE;QACpE,IAAI,IAAA,mBAAW,EAAC,0BAAa,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,iBAAiB,EAAE,0BAAa,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,IAAA,mBAAW,EAAC,mCAAsB,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAClE,OAAO;gBACL,iBAAiB;gBACjB,mCAAsB,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC;aACjD,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,OAAO;YACL,iBAAiB;YACjB,KAA8C;SAC/C,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AArBD,wDAqBC;AAEM,MAAM,gCAAgC,GAAG,CAC9C,kBAA4B,EAC5B,EAAE,CACF,MAAM,CAAC,MAAM,CAAC,wCAA2B,CAAC,CAAC,MAAM,CAE/C,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,EAAE,EAAE;IAC5D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,iBAAiB,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;AAVI,QAAA,gCAAgC,oCAUpC;AAEF,MAAM,uCAAuC,GAAG,CACrD,mBAA6B,EAC7B,KAA8B,EAC9B,EAAE,CACF,MAAM,CAAC,MAAM,CAAC,+CAAkC,CAAC,CAAC,MAAM,CAEtD,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,EAAE,EAAE;IACtE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,cAAc,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC;YAChD,iDAAiD;YACjD,WAAW,EAAE,IAAA,mBAAW,EACtB,KAAK,EACL,WAAW,CACoC;SAClD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,EAAE,EAAE,CAAC,CAAC;AAjBI,QAAA,uCAAuC,2CAiB3C","sourcesContent":["import type {\n PermissionConstraint,\n PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport type { SnapPermissions } from '@metamask/snaps-utils';\nimport { hasProperty } from '@metamask/utils';\n\nimport {\n endowmentCaveatMappers,\n endowmentPermissionBuilders,\n} from './endowments';\nimport {\n caveatMappers,\n restrictedMethodPermissionBuilders,\n} from './restricted';\nimport { selectHooks } from './utils';\n\n/**\n * Map initial permissions as defined in a Snap manifest to something that can\n * be processed by the PermissionsController. Each caveat mapping function\n * should return a valid permission caveat value.\n *\n * This function does not validate the caveat values, since that is done by\n * the PermissionsController itself, upon requesting the permissions.\n *\n * @param initialPermissions - The initial permissions to process.\n * @returns The processed permissions.\n */\nexport function processSnapPermissions(\n initialPermissions: SnapPermissions,\n): Record<string, Pick<PermissionConstraint, 'caveats'>> {\n return Object.fromEntries(\n Object.entries(initialPermissions).map(([initialPermission, value]) => {\n if (hasProperty(caveatMappers, initialPermission)) {\n return [initialPermission, caveatMappers[initialPermission](value)];\n } else if (hasProperty(endowmentCaveatMappers, initialPermission)) {\n return [\n initialPermission,\n endowmentCaveatMappers[initialPermission](value),\n ];\n }\n\n // If we have no mapping, this may be a non-snap permission, return as-is\n return [\n initialPermission,\n value as Pick<PermissionConstraint, 'caveats'>,\n ];\n }),\n );\n}\n\nexport const buildSnapEndowmentSpecifications = (\n excludedEndowments: string[],\n) =>\n Object.values(endowmentPermissionBuilders).reduce<\n Record<string, PermissionSpecificationConstraint>\n >((allSpecifications, { targetName, specificationBuilder }) => {\n if (!excludedEndowments.includes(targetName)) {\n allSpecifications[targetName] = specificationBuilder({});\n }\n return allSpecifications;\n }, {});\n\nexport const buildSnapRestrictedMethodSpecifications = (\n excludedPermissions: string[],\n hooks: Record<string, unknown>,\n) =>\n Object.values(restrictedMethodPermissionBuilders).reduce<\n Record<string, PermissionSpecificationConstraint>\n >((specifications, { targetName, specificationBuilder, methodHooks }) => {\n if (!excludedPermissions.includes(targetName)) {\n specifications[targetName] = specificationBuilder({\n // @ts-expect-error The selectHooks type is wonky\n methodHooks: selectHooks<typeof hooks, keyof typeof methodHooks>(\n hooks,\n methodHooks,\n ) as Pick<typeof hooks, keyof typeof methodHooks>,\n });\n }\n return specifications;\n }, {});\n"]}
1
+ {"version":3,"file":"permissions.cjs","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":";;;AAAA,qDAAgF;AAChF,2EAIyC;AAEzC,2CAA8C;AAE9C,uDAGsB;AAKtB,uDAGsB;AAEtB;;;;;;;;;;GAUG;AACH,SAAgB,sBAAsB,CACpC,kBAAmC;IAEnC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAE,EAAE;QACpE,IAAI,IAAA,mBAAW,EAAC,0BAAa,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,iBAAiB,EAAE,0BAAa,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,IAAA,mBAAW,EAAC,mCAAsB,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAClE,OAAO;gBACL,iBAAiB;gBACjB,mCAAsB,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC;aACjD,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,OAAO;YACL,iBAAiB;YACjB,KAA8C;SAC/C,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AArBD,wDAqBC;AAEM,MAAM,gCAAgC,GAAG,CAC9C,kBAA4B,EAC5B,EAAE,CACF,MAAM,CAAC,MAAM,CAAC,wCAA2B,CAAC,CAAC,MAAM,CAE/C,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,EAAE,EAAE;IAC5D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,iBAAiB,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;AAVI,QAAA,gCAAgC,oCAUpC;AAEF,MAAM,uCAAuC,GAAG,CACrD,mBAA6B,EAC7B,KAA8B,EAC9B,SAAoC,EACpC,EAAE;IACF,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CACtC,+CAAkC,CACnC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAEzE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACrC,OAAO,CAAC,WAAW;QACjB,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC;QACjD,CAAC,CAAC,EAAE,CACP,CACF,CAAC;IAEF,IAAA,wBAAmB,EAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAE9C,OAAO,kBAAkB,CAAC,MAAM,CAG9B,CACE,cAAc,EACd,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,EAC9D,EAAE;QACF,cAAc,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC;YAChD,WAAW,EAAE,IAAA,gBAAW,EAAC,KAAK,EAAE,WAAW,CAAC;YAC5C,SAAS,EAAE,IAAA,uDAA+B,EAAC;gBACzC,SAAS,EAAE,UAAU;gBACrB,aAAa,EAAE,SAAS;gBACxB,WAAW,EAAE,WAEZ;aACF,CAAC;SACH,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;IACxB,CAAC,EACD,EAAE,CACH,CAAC;AACJ,CAAC,CAAC;AAxCW,QAAA,uCAAuC,2CAwClD","sourcesContent":["import { selectHooks, assertExpectedHooks } from '@metamask/json-rpc-engine/v2';\nimport {\n createRestrictedMethodMessenger,\n type PermissionConstraint,\n type PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport type { SnapPermissions } from '@metamask/snaps-utils';\nimport { hasProperty } from '@metamask/utils';\n\nimport {\n endowmentCaveatMappers,\n endowmentPermissionBuilders,\n} from './endowments';\nimport type {\n RestrictedMethodActions,\n RestrictedMethodMessenger,\n} from './restricted';\nimport {\n caveatMappers,\n restrictedMethodPermissionBuilders,\n} from './restricted';\n\n/**\n * Map initial permissions as defined in a Snap manifest to something that can\n * be processed by the PermissionsController. Each caveat mapping function\n * should return a valid permission caveat value.\n *\n * This function does not validate the caveat values, since that is done by\n * the PermissionsController itself, upon requesting the permissions.\n *\n * @param initialPermissions - The initial permissions to process.\n * @returns The processed permissions.\n */\nexport function processSnapPermissions(\n initialPermissions: SnapPermissions,\n): Record<string, Pick<PermissionConstraint, 'caveats'>> {\n return Object.fromEntries(\n Object.entries(initialPermissions).map(([initialPermission, value]) => {\n if (hasProperty(caveatMappers, initialPermission)) {\n return [initialPermission, caveatMappers[initialPermission](value)];\n } else if (hasProperty(endowmentCaveatMappers, initialPermission)) {\n return [\n initialPermission,\n endowmentCaveatMappers[initialPermission](value),\n ];\n }\n\n // If we have no mapping, this may be a non-snap permission, return as-is\n return [\n initialPermission,\n value as Pick<PermissionConstraint, 'caveats'>,\n ];\n }),\n );\n}\n\nexport const buildSnapEndowmentSpecifications = (\n excludedEndowments: string[],\n) =>\n Object.values(endowmentPermissionBuilders).reduce<\n Record<string, PermissionSpecificationConstraint>\n >((allSpecifications, { targetName, specificationBuilder }) => {\n if (!excludedEndowments.includes(targetName)) {\n allSpecifications[targetName] = specificationBuilder({});\n }\n return allSpecifications;\n }, {});\n\nexport const buildSnapRestrictedMethodSpecifications = (\n excludedPermissions: string[],\n hooks: Record<string, unknown>,\n messenger: RestrictedMethodMessenger,\n) => {\n const permissionBuilders = Object.values(\n restrictedMethodPermissionBuilders,\n ).filter((builder) => !excludedPermissions.includes(builder.targetName));\n\n const expectedHookNames = new Set(\n permissionBuilders.flatMap((builder) =>\n builder.methodHooks\n ? Object.getOwnPropertyNames(builder.methodHooks)\n : [],\n ),\n );\n\n assertExpectedHooks(hooks, expectedHookNames);\n\n return permissionBuilders.reduce<\n Record<string, PermissionSpecificationConstraint>\n >(\n (\n specifications,\n { targetName, specificationBuilder, methodHooks, actionNames },\n ) => {\n specifications[targetName] = specificationBuilder({\n methodHooks: selectHooks(hooks, methodHooks),\n messenger: createRestrictedMethodMessenger({\n namespace: targetName,\n rootMessenger: messenger,\n actionNames: actionNames as readonly [\n RestrictedMethodActions['type'],\n ],\n }),\n });\n return specifications;\n },\n {},\n );\n};\n"]}
@@ -1,5 +1,6 @@
1
- import type { PermissionConstraint, PermissionSpecificationConstraint } from "@metamask/permission-controller";
1
+ import { type PermissionConstraint, type PermissionSpecificationConstraint } from "@metamask/permission-controller";
2
2
  import type { SnapPermissions } from "@metamask/snaps-utils";
3
+ import type { RestrictedMethodMessenger } from "./restricted/index.cjs";
3
4
  /**
4
5
  * Map initial permissions as defined in a Snap manifest to something that can
5
6
  * be processed by the PermissionsController. Each caveat mapping function
@@ -13,5 +14,5 @@ import type { SnapPermissions } from "@metamask/snaps-utils";
13
14
  */
14
15
  export declare function processSnapPermissions(initialPermissions: SnapPermissions): Record<string, Pick<PermissionConstraint, 'caveats'>>;
15
16
  export declare const buildSnapEndowmentSpecifications: (excludedEndowments: string[]) => Record<string, PermissionSpecificationConstraint>;
16
- export declare const buildSnapRestrictedMethodSpecifications: (excludedPermissions: string[], hooks: Record<string, unknown>) => Record<string, PermissionSpecificationConstraint>;
17
+ export declare const buildSnapRestrictedMethodSpecifications: (excludedPermissions: string[], hooks: Record<string, unknown>, messenger: RestrictedMethodMessenger) => Record<string, PermissionSpecificationConstraint>;
17
18
  //# sourceMappingURL=permissions.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.d.cts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,iCAAiC,EAClC,wCAAwC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA8B;AAa7D;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,kBAAkB,EAAE,eAAe,GAClC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC,CAmBvD;AAED,eAAO,MAAM,gCAAgC,uBACvB,MAAM,EAAE,sDAStB,CAAC;AAET,eAAO,MAAM,uCAAuC,wBAC7B,MAAM,EAAE,SACtB,OAAO,MAAM,EAAE,OAAO,CAAC,sDAexB,CAAC"}
1
+ {"version":3,"file":"permissions.d.cts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACvC,wCAAwC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA8B;AAO7D,OAAO,KAAK,EAEV,yBAAyB,EAC1B,+BAAqB;AAMtB;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,kBAAkB,EAAE,eAAe,GAClC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC,CAmBvD;AAED,eAAO,MAAM,gCAAgC,uBACvB,MAAM,EAAE,sDAStB,CAAC;AAET,eAAO,MAAM,uCAAuC,wBAC7B,MAAM,EAAE,SACtB,OAAO,MAAM,EAAE,OAAO,CAAC,4FAsC/B,CAAC"}
@@ -1,5 +1,6 @@
1
- import type { PermissionConstraint, PermissionSpecificationConstraint } from "@metamask/permission-controller";
1
+ import { type PermissionConstraint, type PermissionSpecificationConstraint } from "@metamask/permission-controller";
2
2
  import type { SnapPermissions } from "@metamask/snaps-utils";
3
+ import type { RestrictedMethodMessenger } from "./restricted/index.mjs";
3
4
  /**
4
5
  * Map initial permissions as defined in a Snap manifest to something that can
5
6
  * be processed by the PermissionsController. Each caveat mapping function
@@ -13,5 +14,5 @@ import type { SnapPermissions } from "@metamask/snaps-utils";
13
14
  */
14
15
  export declare function processSnapPermissions(initialPermissions: SnapPermissions): Record<string, Pick<PermissionConstraint, 'caveats'>>;
15
16
  export declare const buildSnapEndowmentSpecifications: (excludedEndowments: string[]) => Record<string, PermissionSpecificationConstraint>;
16
- export declare const buildSnapRestrictedMethodSpecifications: (excludedPermissions: string[], hooks: Record<string, unknown>) => Record<string, PermissionSpecificationConstraint>;
17
+ export declare const buildSnapRestrictedMethodSpecifications: (excludedPermissions: string[], hooks: Record<string, unknown>, messenger: RestrictedMethodMessenger) => Record<string, PermissionSpecificationConstraint>;
17
18
  //# sourceMappingURL=permissions.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.d.mts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,iCAAiC,EAClC,wCAAwC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA8B;AAa7D;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,kBAAkB,EAAE,eAAe,GAClC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC,CAmBvD;AAED,eAAO,MAAM,gCAAgC,uBACvB,MAAM,EAAE,sDAStB,CAAC;AAET,eAAO,MAAM,uCAAuC,wBAC7B,MAAM,EAAE,SACtB,OAAO,MAAM,EAAE,OAAO,CAAC,sDAexB,CAAC"}
1
+ {"version":3,"file":"permissions.d.mts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACvC,wCAAwC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA8B;AAO7D,OAAO,KAAK,EAEV,yBAAyB,EAC1B,+BAAqB;AAMtB;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,kBAAkB,EAAE,eAAe,GAClC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC,CAmBvD;AAED,eAAO,MAAM,gCAAgC,uBACvB,MAAM,EAAE,sDAStB,CAAC;AAET,eAAO,MAAM,uCAAuC,wBAC7B,MAAM,EAAE,SACtB,OAAO,MAAM,EAAE,OAAO,CAAC,4FAsC/B,CAAC"}
@@ -1,7 +1,8 @@
1
+ import { selectHooks, assertExpectedHooks } from "@metamask/json-rpc-engine/v2";
2
+ import { createRestrictedMethodMessenger } from "@metamask/permission-controller";
1
3
  import { hasProperty } from "@metamask/utils";
2
4
  import { endowmentCaveatMappers, endowmentPermissionBuilders } from "./endowments/index.mjs";
3
5
  import { caveatMappers, restrictedMethodPermissionBuilders } from "./restricted/index.mjs";
4
- import { selectHooks } from "./utils.mjs";
5
6
  /**
6
7
  * Map initial permissions as defined in a Snap manifest to something that can
7
8
  * be processed by the PermissionsController. Each caveat mapping function
@@ -37,13 +38,22 @@ export const buildSnapEndowmentSpecifications = (excludedEndowments) => Object.v
37
38
  }
38
39
  return allSpecifications;
39
40
  }, {});
40
- export const buildSnapRestrictedMethodSpecifications = (excludedPermissions, hooks) => Object.values(restrictedMethodPermissionBuilders).reduce((specifications, { targetName, specificationBuilder, methodHooks }) => {
41
- if (!excludedPermissions.includes(targetName)) {
41
+ export const buildSnapRestrictedMethodSpecifications = (excludedPermissions, hooks, messenger) => {
42
+ const permissionBuilders = Object.values(restrictedMethodPermissionBuilders).filter((builder) => !excludedPermissions.includes(builder.targetName));
43
+ const expectedHookNames = new Set(permissionBuilders.flatMap((builder) => builder.methodHooks
44
+ ? Object.getOwnPropertyNames(builder.methodHooks)
45
+ : []));
46
+ assertExpectedHooks(hooks, expectedHookNames);
47
+ return permissionBuilders.reduce((specifications, { targetName, specificationBuilder, methodHooks, actionNames }) => {
42
48
  specifications[targetName] = specificationBuilder({
43
- // @ts-expect-error The selectHooks type is wonky
44
49
  methodHooks: selectHooks(hooks, methodHooks),
50
+ messenger: createRestrictedMethodMessenger({
51
+ namespace: targetName,
52
+ rootMessenger: messenger,
53
+ actionNames: actionNames,
54
+ }),
45
55
  });
46
- }
47
- return specifications;
48
- }, {});
56
+ return specifications;
57
+ }, {});
58
+ };
49
59
  //# sourceMappingURL=permissions.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.mjs","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,wBAAwB;AAE9C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC5B,+BAAqB;AACtB,OAAO,EACL,aAAa,EACb,kCAAkC,EACnC,+BAAqB;AACtB,OAAO,EAAE,WAAW,EAAE,oBAAgB;AAEtC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CACpC,kBAAmC;IAEnC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAE,EAAE;QACpE,IAAI,WAAW,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,iBAAiB,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,WAAW,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAClE,OAAO;gBACL,iBAAiB;gBACjB,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC;aACjD,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,OAAO;YACL,iBAAiB;YACjB,KAA8C;SAC/C,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,kBAA4B,EAC5B,EAAE,CACF,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAE/C,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,EAAE,EAAE;IAC5D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,iBAAiB,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;AAET,MAAM,CAAC,MAAM,uCAAuC,GAAG,CACrD,mBAA6B,EAC7B,KAA8B,EAC9B,EAAE,CACF,MAAM,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,MAAM,CAEtD,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,EAAE,EAAE;IACtE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,cAAc,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC;YAChD,iDAAiD;YACjD,WAAW,EAAE,WAAW,CACtB,KAAK,EACL,WAAW,CACoC;SAClD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,EAAE,EAAE,CAAC,CAAC","sourcesContent":["import type {\n PermissionConstraint,\n PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport type { SnapPermissions } from '@metamask/snaps-utils';\nimport { hasProperty } from '@metamask/utils';\n\nimport {\n endowmentCaveatMappers,\n endowmentPermissionBuilders,\n} from './endowments';\nimport {\n caveatMappers,\n restrictedMethodPermissionBuilders,\n} from './restricted';\nimport { selectHooks } from './utils';\n\n/**\n * Map initial permissions as defined in a Snap manifest to something that can\n * be processed by the PermissionsController. Each caveat mapping function\n * should return a valid permission caveat value.\n *\n * This function does not validate the caveat values, since that is done by\n * the PermissionsController itself, upon requesting the permissions.\n *\n * @param initialPermissions - The initial permissions to process.\n * @returns The processed permissions.\n */\nexport function processSnapPermissions(\n initialPermissions: SnapPermissions,\n): Record<string, Pick<PermissionConstraint, 'caveats'>> {\n return Object.fromEntries(\n Object.entries(initialPermissions).map(([initialPermission, value]) => {\n if (hasProperty(caveatMappers, initialPermission)) {\n return [initialPermission, caveatMappers[initialPermission](value)];\n } else if (hasProperty(endowmentCaveatMappers, initialPermission)) {\n return [\n initialPermission,\n endowmentCaveatMappers[initialPermission](value),\n ];\n }\n\n // If we have no mapping, this may be a non-snap permission, return as-is\n return [\n initialPermission,\n value as Pick<PermissionConstraint, 'caveats'>,\n ];\n }),\n );\n}\n\nexport const buildSnapEndowmentSpecifications = (\n excludedEndowments: string[],\n) =>\n Object.values(endowmentPermissionBuilders).reduce<\n Record<string, PermissionSpecificationConstraint>\n >((allSpecifications, { targetName, specificationBuilder }) => {\n if (!excludedEndowments.includes(targetName)) {\n allSpecifications[targetName] = specificationBuilder({});\n }\n return allSpecifications;\n }, {});\n\nexport const buildSnapRestrictedMethodSpecifications = (\n excludedPermissions: string[],\n hooks: Record<string, unknown>,\n) =>\n Object.values(restrictedMethodPermissionBuilders).reduce<\n Record<string, PermissionSpecificationConstraint>\n >((specifications, { targetName, specificationBuilder, methodHooks }) => {\n if (!excludedPermissions.includes(targetName)) {\n specifications[targetName] = specificationBuilder({\n // @ts-expect-error The selectHooks type is wonky\n methodHooks: selectHooks<typeof hooks, keyof typeof methodHooks>(\n hooks,\n methodHooks,\n ) as Pick<typeof hooks, keyof typeof methodHooks>,\n });\n }\n return specifications;\n }, {});\n"]}
1
+ {"version":3,"file":"permissions.mjs","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,qCAAqC;AAChF,OAAO,EACL,+BAA+B,EAGhC,wCAAwC;AAEzC,OAAO,EAAE,WAAW,EAAE,wBAAwB;AAE9C,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC5B,+BAAqB;AAKtB,OAAO,EACL,aAAa,EACb,kCAAkC,EACnC,+BAAqB;AAEtB;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CACpC,kBAAmC;IAEnC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAE,EAAE;QACpE,IAAI,WAAW,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,iBAAiB,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,WAAW,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAClE,OAAO;gBACL,iBAAiB;gBACjB,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC;aACjD,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,OAAO;YACL,iBAAiB;YACjB,KAA8C;SAC/C,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,kBAA4B,EAC5B,EAAE,CACF,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAE/C,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,EAAE,EAAE;IAC5D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,iBAAiB,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;AAET,MAAM,CAAC,MAAM,uCAAuC,GAAG,CACrD,mBAA6B,EAC7B,KAA8B,EAC9B,SAAoC,EACpC,EAAE;IACF,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CACtC,kCAAkC,CACnC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAEzE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACrC,OAAO,CAAC,WAAW;QACjB,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC;QACjD,CAAC,CAAC,EAAE,CACP,CACF,CAAC;IAEF,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAE9C,OAAO,kBAAkB,CAAC,MAAM,CAG9B,CACE,cAAc,EACd,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,EAC9D,EAAE;QACF,cAAc,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC;YAChD,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC;YAC5C,SAAS,EAAE,+BAA+B,CAAC;gBACzC,SAAS,EAAE,UAAU;gBACrB,aAAa,EAAE,SAAS;gBACxB,WAAW,EAAE,WAEZ;aACF,CAAC;SACH,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;IACxB,CAAC,EACD,EAAE,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { selectHooks, assertExpectedHooks } from '@metamask/json-rpc-engine/v2';\nimport {\n createRestrictedMethodMessenger,\n type PermissionConstraint,\n type PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport type { SnapPermissions } from '@metamask/snaps-utils';\nimport { hasProperty } from '@metamask/utils';\n\nimport {\n endowmentCaveatMappers,\n endowmentPermissionBuilders,\n} from './endowments';\nimport type {\n RestrictedMethodActions,\n RestrictedMethodMessenger,\n} from './restricted';\nimport {\n caveatMappers,\n restrictedMethodPermissionBuilders,\n} from './restricted';\n\n/**\n * Map initial permissions as defined in a Snap manifest to something that can\n * be processed by the PermissionsController. Each caveat mapping function\n * should return a valid permission caveat value.\n *\n * This function does not validate the caveat values, since that is done by\n * the PermissionsController itself, upon requesting the permissions.\n *\n * @param initialPermissions - The initial permissions to process.\n * @returns The processed permissions.\n */\nexport function processSnapPermissions(\n initialPermissions: SnapPermissions,\n): Record<string, Pick<PermissionConstraint, 'caveats'>> {\n return Object.fromEntries(\n Object.entries(initialPermissions).map(([initialPermission, value]) => {\n if (hasProperty(caveatMappers, initialPermission)) {\n return [initialPermission, caveatMappers[initialPermission](value)];\n } else if (hasProperty(endowmentCaveatMappers, initialPermission)) {\n return [\n initialPermission,\n endowmentCaveatMappers[initialPermission](value),\n ];\n }\n\n // If we have no mapping, this may be a non-snap permission, return as-is\n return [\n initialPermission,\n value as Pick<PermissionConstraint, 'caveats'>,\n ];\n }),\n );\n}\n\nexport const buildSnapEndowmentSpecifications = (\n excludedEndowments: string[],\n) =>\n Object.values(endowmentPermissionBuilders).reduce<\n Record<string, PermissionSpecificationConstraint>\n >((allSpecifications, { targetName, specificationBuilder }) => {\n if (!excludedEndowments.includes(targetName)) {\n allSpecifications[targetName] = specificationBuilder({});\n }\n return allSpecifications;\n }, {});\n\nexport const buildSnapRestrictedMethodSpecifications = (\n excludedPermissions: string[],\n hooks: Record<string, unknown>,\n messenger: RestrictedMethodMessenger,\n) => {\n const permissionBuilders = Object.values(\n restrictedMethodPermissionBuilders,\n ).filter((builder) => !excludedPermissions.includes(builder.targetName));\n\n const expectedHookNames = new Set(\n permissionBuilders.flatMap((builder) =>\n builder.methodHooks\n ? Object.getOwnPropertyNames(builder.methodHooks)\n : [],\n ),\n );\n\n assertExpectedHooks(hooks, expectedHookNames);\n\n return permissionBuilders.reduce<\n Record<string, PermissionSpecificationConstraint>\n >(\n (\n specifications,\n { targetName, specificationBuilder, methodHooks, actionNames },\n ) => {\n specifications[targetName] = specificationBuilder({\n methodHooks: selectHooks(hooks, methodHooks),\n messenger: createRestrictedMethodMessenger({\n namespace: targetName,\n rootMessenger: messenger,\n actionNames: actionNames as readonly [\n RestrictedMethodActions['type'],\n ],\n }),\n });\n return specifications;\n },\n {},\n );\n};\n"]}
@@ -4,11 +4,6 @@ exports.cancelBackgroundEventHandler = void 0;
4
4
  const rpc_errors_1 = require("@metamask/rpc-errors");
5
5
  const superstruct_1 = require("@metamask/superstruct");
6
6
  const endowments_1 = require("../endowments/index.cjs");
7
- const methodName = 'snap_cancelBackgroundEvent';
8
- const hookNames = {
9
- cancelBackgroundEvent: true,
10
- hasPermission: true,
11
- };
12
7
  /**
13
8
  * Cancel a background event created by
14
9
  * [`snap_scheduleBackgroundEvent`](https://docs.metamask.io/snaps/reference/snaps-api/snap_schedulebackgroundevent).
@@ -30,9 +25,11 @@ const hookNames = {
30
25
  * ```
31
26
  */
32
27
  exports.cancelBackgroundEventHandler = {
33
- methodNames: [methodName],
34
28
  implementation: getCancelBackgroundEventImplementation,
35
- hookNames,
29
+ actionNames: [
30
+ 'PermissionController:hasPermission',
31
+ 'CronjobController:cancel',
32
+ ],
36
33
  };
37
34
  const CancelBackgroundEventsParametersStruct = (0, superstruct_1.object)({
38
35
  id: (0, superstruct_1.string)(),
@@ -45,20 +42,19 @@ const CancelBackgroundEventsParametersStruct = (0, superstruct_1.object)({
45
42
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this
46
43
  * function.
47
44
  * @param end - The `json-rpc-engine` "end" callback.
48
- * @param hooks - The RPC method hooks.
49
- * @param hooks.cancelBackgroundEvent - The function to cancel a background event.
50
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
45
+ * @param _hooks - The RPC method hooks. Not used by this function.
46
+ * @param messenger - The messenger used to call controller actions.
51
47
  * @returns Nothing.
52
48
  */
53
- async function getCancelBackgroundEventImplementation(req, res, _next, end, { cancelBackgroundEvent, hasPermission }) {
54
- const { params } = req;
55
- if (!hasPermission(endowments_1.SnapEndowments.Cronjob)) {
49
+ async function getCancelBackgroundEventImplementation(req, res, _next, end, _hooks, messenger) {
50
+ const { params, origin } = req;
51
+ if (!messenger.call('PermissionController:hasPermission', origin, endowments_1.SnapEndowments.Cronjob)) {
56
52
  return end(rpc_errors_1.providerErrors.unauthorized());
57
53
  }
58
54
  try {
59
55
  const validatedParams = getValidatedParams(params);
60
56
  const { id } = validatedParams;
61
- cancelBackgroundEvent(id);
57
+ messenger.call('CronjobController:cancel', origin, id);
62
58
  res.result = null;
63
59
  }
64
60
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"cancelBackgroundEvent.cjs","sourceRoot":"","sources":["../../src/permitted/cancelBackgroundEvent.ts"],"names":[],"mappings":";;;AAEA,qDAAiE;AAOjE,uDAA4E;AAG5E,wDAA+C;AAG/C,MAAM,UAAU,GAAG,4BAA4B,CAAC;AAEhD,MAAM,SAAS,GAAwD;IACrE,qBAAqB,EAAE,IAAI;IAC3B,aAAa,EAAE,IAAI;CACpB,CAAC;AAOF;;;;;;;;;;;;;;;;;;;GAmBG;AACU,QAAA,4BAA4B,GAAG;IAC1C,WAAW,EAAE,CAAC,UAAU,CAAU;IAClC,cAAc,EAAE,sCAAsC;IACtD,SAAS;CAKV,CAAC;AAEF,MAAM,sCAAsC,GAAG,IAAA,oBAAM,EAAC;IACpD,EAAE,EAAE,IAAA,oBAAM,GAAE;CACb,CAAC,CAAC;AAOH;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,sCAAsC,CACnD,GAAoD,EACpD,GAAwD,EACxD,KAAc,EACd,GAA6B,EAC7B,EAAE,qBAAqB,EAAE,aAAa,EAAoC;IAE1E,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,IAAI,CAAC,aAAa,CAAC,2BAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC,2BAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,EAAE,EAAE,EAAE,GAAG,eAAe,CAAC;QAE/B,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC1B,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,IAAA,oBAAM,EAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,yBAAW,EAAE,CAAC;YACjC,MAAM,sBAAS,CAAC,aAAa,CAAC;gBAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,GAAG;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,0BAA0B;QAC1B,MAAM,sBAAS,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport type {\n JsonRpcRequest,\n CancelBackgroundEventParams,\n CancelBackgroundEventResult,\n} from '@metamask/snaps-sdk';\nimport { type InferMatching } from '@metamask/snaps-utils';\nimport { StructError, create, object, string } from '@metamask/superstruct';\nimport { type PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'snap_cancelBackgroundEvent';\n\nconst hookNames: MethodHooksObject<CancelBackgroundEventMethodHooks> = {\n cancelBackgroundEvent: true,\n hasPermission: true,\n};\n\nexport type CancelBackgroundEventMethodHooks = {\n cancelBackgroundEvent: (id: string) => void;\n hasPermission: (permissionName: string) => boolean;\n};\n\n/**\n * Cancel a background event created by\n * [`snap_scheduleBackgroundEvent`](https://docs.metamask.io/snaps/reference/snaps-api/snap_schedulebackgroundevent).\n *\n * @example\n * ```ts\n * const id = await snap.request({\n * method: 'snap_scheduleBackgroundEvent',\n * params: {\n * // ...\n * },\n * });\n *\n * // Later, when you want to cancel the background event:\n * snap.request({\n * method: 'snap_cancelBackgroundEvent',\n * params: { id },\n * });\n * ```\n */\nexport const cancelBackgroundEventHandler = {\n methodNames: [methodName] as const,\n implementation: getCancelBackgroundEventImplementation,\n hookNames,\n} satisfies PermittedHandlerExport<\n CancelBackgroundEventMethodHooks,\n CancelBackgroundEventParameters,\n CancelBackgroundEventResult\n>;\n\nconst CancelBackgroundEventsParametersStruct = object({\n id: string(),\n});\n\nexport type CancelBackgroundEventParameters = InferMatching<\n typeof CancelBackgroundEventsParametersStruct,\n CancelBackgroundEventParams\n>;\n\n/**\n * The `snap_cancelBackgroundEvent` method implementation.\n *\n * @param req - The JSON-RPC request object.\n * @param res - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.cancelBackgroundEvent - The function to cancel a background event.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.\n * @returns Nothing.\n */\nasync function getCancelBackgroundEventImplementation(\n req: JsonRpcRequest<CancelBackgroundEventParameters>,\n res: PendingJsonRpcResponse<CancelBackgroundEventResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { cancelBackgroundEvent, hasPermission }: CancelBackgroundEventMethodHooks,\n): Promise<void> {\n const { params } = req;\n\n if (!hasPermission(SnapEndowments.Cronjob)) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n\n const { id } = validatedParams;\n\n cancelBackgroundEvent(id);\n res.result = null;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the cancelBackgroundEvent method `params` and returns them cast to the correct type. Throws if validation fails.\n *\n * @param params - The unvalidated params object from the method request.\n * @returns The validated resolveInterface method parameter object.\n */\nfunction getValidatedParams(params: unknown): CancelBackgroundEventParameters {\n try {\n return create(params, CancelBackgroundEventsParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
1
+ {"version":3,"file":"cancelBackgroundEvent.cjs","sourceRoot":"","sources":["../../src/permitted/cancelBackgroundEvent.ts"],"names":[],"mappings":";;;AAMA,qDAAiE;AAOjE,uDAA4E;AAG5E,wDAA+C;AAU/C;;;;;;;;;;;;;;;;;;;GAmBG;AACU,QAAA,4BAA4B,GAAG;IAC1C,cAAc,EAAE,sCAAsC;IACtD,WAAW,EAAE;QACX,oCAAoC;QACpC,0BAA0B;KAC3B;CAOF,CAAC;AAEF,MAAM,sCAAsC,GAAG,IAAA,oBAAM,EAAC;IACpD,EAAE,EAAE,IAAA,oBAAM,GAAE;CACb,CAAC,CAAC;AAOH;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,sCAAsC,CACnD,GAA8D,EAC9D,GAAwD,EACxD,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAAgE;IAEhE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE/B,IACE,CAAC,SAAS,CAAC,IAAI,CACb,oCAAoC,EACpC,MAAM,EACN,2BAAc,CAAC,OAAO,CACvB,EACD,CAAC;QACD,OAAO,GAAG,CAAC,2BAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,EAAE,EAAE,EAAE,GAAG,eAAe,CAAC;QAE/B,SAAS,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACvD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,IAAA,oBAAM,EAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,yBAAW,EAAE,CAAC;YACjC,MAAM,sBAAS,CAAC,aAAa,CAAC;gBAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,GAAG;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,0BAA0B;QAC1B,MAAM,sBAAS,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC","sourcesContent":["import type {\n JsonRpcEngineEndCallback,\n MethodHandler,\n} from '@metamask/json-rpc-engine';\nimport type { Messenger } from '@metamask/messenger';\nimport type { PermissionControllerHasPermissionAction } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport type {\n CancelBackgroundEventParams,\n CancelBackgroundEventResult,\n SnapId,\n} from '@metamask/snaps-sdk';\nimport { type InferMatching } from '@metamask/snaps-utils';\nimport { StructError, create, object, string } from '@metamask/superstruct';\nimport { type PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type {\n CronjobControllerCancelAction,\n JsonRpcRequestWithOrigin,\n} from '../types';\n\nexport type CancelBackgroundEventMethodActions =\n | PermissionControllerHasPermissionAction\n | CronjobControllerCancelAction;\n\n/**\n * Cancel a background event created by\n * [`snap_scheduleBackgroundEvent`](https://docs.metamask.io/snaps/reference/snaps-api/snap_schedulebackgroundevent).\n *\n * @example\n * ```ts\n * const id = await snap.request({\n * method: 'snap_scheduleBackgroundEvent',\n * params: {\n * // ...\n * },\n * });\n *\n * // Later, when you want to cancel the background event:\n * snap.request({\n * method: 'snap_cancelBackgroundEvent',\n * params: { id },\n * });\n * ```\n */\nexport const cancelBackgroundEventHandler = {\n implementation: getCancelBackgroundEventImplementation,\n actionNames: [\n 'PermissionController:hasPermission',\n 'CronjobController:cancel',\n ],\n} satisfies MethodHandler<\n never,\n CancelBackgroundEventMethodActions,\n CancelBackgroundEventParameters,\n CancelBackgroundEventResult,\n { origin: SnapId }\n>;\n\nconst CancelBackgroundEventsParametersStruct = object({\n id: string(),\n});\n\nexport type CancelBackgroundEventParameters = InferMatching<\n typeof CancelBackgroundEventsParametersStruct,\n CancelBackgroundEventParams\n>;\n\n/**\n * The `snap_cancelBackgroundEvent` method implementation.\n *\n * @param req - The JSON-RPC request object.\n * @param res - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param _hooks - The RPC method hooks. Not used by this function.\n * @param messenger - The messenger used to call controller actions.\n * @returns Nothing.\n */\nasync function getCancelBackgroundEventImplementation(\n req: JsonRpcRequestWithOrigin<CancelBackgroundEventParameters>,\n res: PendingJsonRpcResponse<CancelBackgroundEventResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, CancelBackgroundEventMethodActions>,\n): Promise<void> {\n const { params, origin } = req;\n\n if (\n !messenger.call(\n 'PermissionController:hasPermission',\n origin,\n SnapEndowments.Cronjob,\n )\n ) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n\n const { id } = validatedParams;\n\n messenger.call('CronjobController:cancel', origin, id);\n res.result = null;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the cancelBackgroundEvent method `params` and returns them cast to the correct type. Throws if validation fails.\n *\n * @param params - The unvalidated params object from the method request.\n * @returns The validated resolveInterface method parameter object.\n */\nfunction getValidatedParams(params: unknown): CancelBackgroundEventParameters {\n try {\n return create(params, CancelBackgroundEventsParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
@@ -1,12 +1,11 @@
1
1
  import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
- import type { JsonRpcRequest, CancelBackgroundEventParams, CancelBackgroundEventResult } from "@metamask/snaps-sdk";
2
+ import type { Messenger } from "@metamask/messenger";
3
+ import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
4
+ import type { CancelBackgroundEventParams, CancelBackgroundEventResult } from "@metamask/snaps-sdk";
3
5
  import { type InferMatching } from "@metamask/snaps-utils";
4
6
  import { type PendingJsonRpcResponse } from "@metamask/utils";
5
- import type { MethodHooksObject } from "../utils.cjs";
6
- export type CancelBackgroundEventMethodHooks = {
7
- cancelBackgroundEvent: (id: string) => void;
8
- hasPermission: (permissionName: string) => boolean;
9
- };
7
+ import type { CronjobControllerCancelAction, JsonRpcRequestWithOrigin } from "../types.cjs";
8
+ export type CancelBackgroundEventMethodActions = PermissionControllerHasPermissionAction | CronjobControllerCancelAction;
10
9
  /**
11
10
  * Cancel a background event created by
12
11
  * [`snap_scheduleBackgroundEvent`](https://docs.metamask.io/snaps/reference/snaps-api/snap_schedulebackgroundevent).
@@ -28,9 +27,8 @@ export type CancelBackgroundEventMethodHooks = {
28
27
  * ```
29
28
  */
30
29
  export declare const cancelBackgroundEventHandler: {
31
- methodNames: ["snap_cancelBackgroundEvent"];
32
30
  implementation: typeof getCancelBackgroundEventImplementation;
33
- hookNames: MethodHooksObject<CancelBackgroundEventMethodHooks>;
31
+ actionNames: ("CronjobController:cancel" | "PermissionController:hasPermission")[];
34
32
  };
35
33
  declare const CancelBackgroundEventsParametersStruct: import("@metamask/superstruct").Struct<{
36
34
  id: string;
@@ -46,11 +44,10 @@ export type CancelBackgroundEventParameters = InferMatching<typeof CancelBackgro
46
44
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this
47
45
  * function.
48
46
  * @param end - The `json-rpc-engine` "end" callback.
49
- * @param hooks - The RPC method hooks.
50
- * @param hooks.cancelBackgroundEvent - The function to cancel a background event.
51
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
47
+ * @param _hooks - The RPC method hooks. Not used by this function.
48
+ * @param messenger - The messenger used to call controller actions.
52
49
  * @returns Nothing.
53
50
  */
54
- declare function getCancelBackgroundEventImplementation(req: JsonRpcRequest<CancelBackgroundEventParameters>, res: PendingJsonRpcResponse<CancelBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, { cancelBackgroundEvent, hasPermission }: CancelBackgroundEventMethodHooks): Promise<void>;
51
+ declare function getCancelBackgroundEventImplementation(req: JsonRpcRequestWithOrigin<CancelBackgroundEventParameters>, res: PendingJsonRpcResponse<CancelBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, CancelBackgroundEventMethodActions>): Promise<void>;
55
52
  export {};
56
53
  //# sourceMappingURL=cancelBackgroundEvent.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cancelBackgroundEvent.d.cts","sourceRoot":"","sources":["../../src/permitted/cancelBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kCAAkC;AAG1E,OAAO,KAAK,EACV,cAAc,EACd,2BAA2B,EAC3B,2BAA2B,EAC5B,4BAA4B;AAC7B,OAAO,EAAE,KAAK,aAAa,EAAE,8BAA8B;AAE3D,OAAO,EAAE,KAAK,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AASlD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,qBAAqB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,4BAA4B;;;;CAQxC,CAAC;AAEF,QAAA,MAAM,sCAAsC;;;;EAE1C,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,aAAa,CACzD,OAAO,sCAAsC,EAC7C,2BAA2B,CAC5B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,sCAAsC,CACnD,GAAG,EAAE,cAAc,CAAC,+BAA+B,CAAC,EACpD,GAAG,EAAE,sBAAsB,CAAC,2BAA2B,CAAC,EACxD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EAAE,qBAAqB,EAAE,aAAa,EAAE,EAAE,gCAAgC,GACzE,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"cancelBackgroundEvent.d.cts","sourceRoot":"","sources":["../../src/permitted/cancelBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,uCAAuC,EAAE,wCAAwC;AAE/F,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAE5B,4BAA4B;AAC7B,OAAO,EAAE,KAAK,aAAa,EAAE,8BAA8B;AAE3D,OAAO,EAAE,KAAK,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EACV,6BAA6B,EAC7B,wBAAwB,EACzB,qBAAiB;AAElB,MAAM,MAAM,kCAAkC,GAC1C,uCAAuC,GACvC,6BAA6B,CAAC;AAElC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,4BAA4B;;;CAYxC,CAAC;AAEF,QAAA,MAAM,sCAAsC;;;;EAE1C,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,aAAa,CACzD,OAAO,sCAAsC,EAC7C,2BAA2B,CAC5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,iBAAe,sCAAsC,CACnD,GAAG,EAAE,wBAAwB,CAAC,+BAA+B,CAAC,EAC9D,GAAG,EAAE,sBAAsB,CAAC,2BAA2B,CAAC,EACxD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,kCAAkC,CAAC,GAC/D,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -1,12 +1,11 @@
1
1
  import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
- import type { JsonRpcRequest, CancelBackgroundEventParams, CancelBackgroundEventResult } from "@metamask/snaps-sdk";
2
+ import type { Messenger } from "@metamask/messenger";
3
+ import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
4
+ import type { CancelBackgroundEventParams, CancelBackgroundEventResult } from "@metamask/snaps-sdk";
3
5
  import { type InferMatching } from "@metamask/snaps-utils";
4
6
  import { type PendingJsonRpcResponse } from "@metamask/utils";
5
- import type { MethodHooksObject } from "../utils.mjs";
6
- export type CancelBackgroundEventMethodHooks = {
7
- cancelBackgroundEvent: (id: string) => void;
8
- hasPermission: (permissionName: string) => boolean;
9
- };
7
+ import type { CronjobControllerCancelAction, JsonRpcRequestWithOrigin } from "../types.mjs";
8
+ export type CancelBackgroundEventMethodActions = PermissionControllerHasPermissionAction | CronjobControllerCancelAction;
10
9
  /**
11
10
  * Cancel a background event created by
12
11
  * [`snap_scheduleBackgroundEvent`](https://docs.metamask.io/snaps/reference/snaps-api/snap_schedulebackgroundevent).
@@ -28,9 +27,8 @@ export type CancelBackgroundEventMethodHooks = {
28
27
  * ```
29
28
  */
30
29
  export declare const cancelBackgroundEventHandler: {
31
- methodNames: ["snap_cancelBackgroundEvent"];
32
30
  implementation: typeof getCancelBackgroundEventImplementation;
33
- hookNames: MethodHooksObject<CancelBackgroundEventMethodHooks>;
31
+ actionNames: ("CronjobController:cancel" | "PermissionController:hasPermission")[];
34
32
  };
35
33
  declare const CancelBackgroundEventsParametersStruct: import("@metamask/superstruct").Struct<{
36
34
  id: string;
@@ -46,11 +44,10 @@ export type CancelBackgroundEventParameters = InferMatching<typeof CancelBackgro
46
44
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this
47
45
  * function.
48
46
  * @param end - The `json-rpc-engine` "end" callback.
49
- * @param hooks - The RPC method hooks.
50
- * @param hooks.cancelBackgroundEvent - The function to cancel a background event.
51
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
47
+ * @param _hooks - The RPC method hooks. Not used by this function.
48
+ * @param messenger - The messenger used to call controller actions.
52
49
  * @returns Nothing.
53
50
  */
54
- declare function getCancelBackgroundEventImplementation(req: JsonRpcRequest<CancelBackgroundEventParameters>, res: PendingJsonRpcResponse<CancelBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, { cancelBackgroundEvent, hasPermission }: CancelBackgroundEventMethodHooks): Promise<void>;
51
+ declare function getCancelBackgroundEventImplementation(req: JsonRpcRequestWithOrigin<CancelBackgroundEventParameters>, res: PendingJsonRpcResponse<CancelBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, CancelBackgroundEventMethodActions>): Promise<void>;
55
52
  export {};
56
53
  //# sourceMappingURL=cancelBackgroundEvent.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cancelBackgroundEvent.d.mts","sourceRoot":"","sources":["../../src/permitted/cancelBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kCAAkC;AAG1E,OAAO,KAAK,EACV,cAAc,EACd,2BAA2B,EAC3B,2BAA2B,EAC5B,4BAA4B;AAC7B,OAAO,EAAE,KAAK,aAAa,EAAE,8BAA8B;AAE3D,OAAO,EAAE,KAAK,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AASlD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,qBAAqB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,4BAA4B;;;;CAQxC,CAAC;AAEF,QAAA,MAAM,sCAAsC;;;;EAE1C,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,aAAa,CACzD,OAAO,sCAAsC,EAC7C,2BAA2B,CAC5B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,sCAAsC,CACnD,GAAG,EAAE,cAAc,CAAC,+BAA+B,CAAC,EACpD,GAAG,EAAE,sBAAsB,CAAC,2BAA2B,CAAC,EACxD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EAAE,qBAAqB,EAAE,aAAa,EAAE,EAAE,gCAAgC,GACzE,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"cancelBackgroundEvent.d.mts","sourceRoot":"","sources":["../../src/permitted/cancelBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,uCAAuC,EAAE,wCAAwC;AAE/F,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAE5B,4BAA4B;AAC7B,OAAO,EAAE,KAAK,aAAa,EAAE,8BAA8B;AAE3D,OAAO,EAAE,KAAK,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EACV,6BAA6B,EAC7B,wBAAwB,EACzB,qBAAiB;AAElB,MAAM,MAAM,kCAAkC,GAC1C,uCAAuC,GACvC,6BAA6B,CAAC;AAElC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,4BAA4B;;;CAYxC,CAAC;AAEF,QAAA,MAAM,sCAAsC;;;;EAE1C,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,aAAa,CACzD,OAAO,sCAAsC,EAC7C,2BAA2B,CAC5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,iBAAe,sCAAsC,CACnD,GAAG,EAAE,wBAAwB,CAAC,+BAA+B,CAAC,EAC9D,GAAG,EAAE,sBAAsB,CAAC,2BAA2B,CAAC,EACxD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,kCAAkC,CAAC,GAC/D,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -1,11 +1,6 @@
1
1
  import { providerErrors, rpcErrors } from "@metamask/rpc-errors";
2
2
  import { StructError, create, object, string } from "@metamask/superstruct";
3
3
  import { SnapEndowments } from "../endowments/index.mjs";
4
- const methodName = 'snap_cancelBackgroundEvent';
5
- const hookNames = {
6
- cancelBackgroundEvent: true,
7
- hasPermission: true,
8
- };
9
4
  /**
10
5
  * Cancel a background event created by
11
6
  * [`snap_scheduleBackgroundEvent`](https://docs.metamask.io/snaps/reference/snaps-api/snap_schedulebackgroundevent).
@@ -27,9 +22,11 @@ const hookNames = {
27
22
  * ```
28
23
  */
29
24
  export const cancelBackgroundEventHandler = {
30
- methodNames: [methodName],
31
25
  implementation: getCancelBackgroundEventImplementation,
32
- hookNames,
26
+ actionNames: [
27
+ 'PermissionController:hasPermission',
28
+ 'CronjobController:cancel',
29
+ ],
33
30
  };
34
31
  const CancelBackgroundEventsParametersStruct = object({
35
32
  id: string(),
@@ -42,20 +39,19 @@ const CancelBackgroundEventsParametersStruct = object({
42
39
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this
43
40
  * function.
44
41
  * @param end - The `json-rpc-engine` "end" callback.
45
- * @param hooks - The RPC method hooks.
46
- * @param hooks.cancelBackgroundEvent - The function to cancel a background event.
47
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
42
+ * @param _hooks - The RPC method hooks. Not used by this function.
43
+ * @param messenger - The messenger used to call controller actions.
48
44
  * @returns Nothing.
49
45
  */
50
- async function getCancelBackgroundEventImplementation(req, res, _next, end, { cancelBackgroundEvent, hasPermission }) {
51
- const { params } = req;
52
- if (!hasPermission(SnapEndowments.Cronjob)) {
46
+ async function getCancelBackgroundEventImplementation(req, res, _next, end, _hooks, messenger) {
47
+ const { params, origin } = req;
48
+ if (!messenger.call('PermissionController:hasPermission', origin, SnapEndowments.Cronjob)) {
53
49
  return end(providerErrors.unauthorized());
54
50
  }
55
51
  try {
56
52
  const validatedParams = getValidatedParams(params);
57
53
  const { id } = validatedParams;
58
- cancelBackgroundEvent(id);
54
+ messenger.call('CronjobController:cancel', origin, id);
59
55
  res.result = null;
60
56
  }
61
57
  catch (error) {