@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
@@ -1,16 +1,11 @@
1
1
  import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
- import { type JsonRpcRequest, type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
3
- import type { CronjobRpcRequest, InferMatching } from "@metamask/snaps-utils";
2
+ import type { Messenger } from "@metamask/messenger";
3
+ import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
4
+ import { type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
5
+ import type { InferMatching } from "@metamask/snaps-utils";
4
6
  import { type PendingJsonRpcResponse } from "@metamask/utils";
5
- import type { MethodHooksObject } from "../utils.cjs";
6
- type ScheduleBackgroundEventHookParams = {
7
- schedule: string;
8
- request: CronjobRpcRequest;
9
- };
10
- export type ScheduleBackgroundEventMethodHooks = {
11
- scheduleBackgroundEvent: (snapEvent: ScheduleBackgroundEventHookParams) => string;
12
- hasPermission: (permissionName: string) => boolean;
13
- };
7
+ import type { CronjobControllerScheduleAction, JsonRpcRequestWithOrigin } from "../types.cjs";
8
+ export type ScheduleBackgroundEventMethodActions = PermissionControllerHasPermissionAction | CronjobControllerScheduleAction;
14
9
  /**
15
10
  * Schedule a background event for a Snap. The background event will trigger a
16
11
  * JSON-RPC request to the Snap at the scheduled time, handled by the
@@ -38,9 +33,8 @@ export type ScheduleBackgroundEventMethodHooks = {
38
33
  * ```
39
34
  */
40
35
  export declare const scheduleBackgroundEventHandler: {
41
- methodNames: ["snap_scheduleBackgroundEvent"];
42
36
  implementation: typeof getScheduleBackgroundEventImplementation;
43
- hookNames: MethodHooksObject<ScheduleBackgroundEventMethodHooks>;
37
+ actionNames: ("CronjobController:schedule" | "PermissionController:hasPermission")[];
44
38
  };
45
39
  declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superstruct").Struct<{
46
40
  date: string;
@@ -68,11 +62,10 @@ export type ScheduleBackgroundEventParameters = InferMatching<typeof ScheduleBac
68
62
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this
69
63
  * function.
70
64
  * @param end - The `json-rpc-engine` "end" callback.
71
- * @param hooks - The RPC method hooks.
72
- * @param hooks.scheduleBackgroundEvent - The function to schedule a background event.
73
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
65
+ * @param _hooks - The RPC method hooks. Not used by this function.
66
+ * @param messenger - The messenger used to call controller actions.
74
67
  * @returns An id representing the background event.
75
68
  */
76
- declare function getScheduleBackgroundEventImplementation(req: JsonRpcRequest<ScheduleBackgroundEventParameters>, res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, { scheduleBackgroundEvent, hasPermission, }: ScheduleBackgroundEventMethodHooks): Promise<void>;
69
+ declare function getScheduleBackgroundEventImplementation(req: JsonRpcRequestWithOrigin<ScheduleBackgroundEventParameters>, res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, ScheduleBackgroundEventMethodActions>): Promise<void>;
77
70
  export {};
78
71
  //# sourceMappingURL=scheduleBackgroundEvent.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.d.cts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kCAAkC;AAG1E,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EACnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,8BAA8B;AAO9E,OAAO,EAAe,KAAK,sBAAsB,EAAE,wBAAwB;AAG3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AASlD,KAAK,iCAAiC,GAAG;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,uBAAuB,EAAE,CACvB,SAAS,EAAE,iCAAiC,KACzC,MAAM,CAAC;IAEZ,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,8BAA8B;;;;CAQ1C,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC;AAiBF;;;;;;;;;;;;GAYG;AACH,iBAAe,wCAAwC,CACrD,GAAG,EAAE,cAAc,CAAC,iCAAiC,CAAC,EACtD,GAAG,EAAE,sBAAsB,CAAC,6BAA6B,CAAC,EAC1D,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EACE,uBAAuB,EACvB,aAAa,GACd,EAAE,kCAAkC,GACpC,OAAO,CAAC,IAAI,CAAC,CAuBf"}
1
+ {"version":3,"file":"scheduleBackgroundEvent.d.cts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.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,EAEL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAEnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAO3D,OAAO,EAAe,KAAK,sBAAsB,EAAE,wBAAwB;AAG3E,OAAO,KAAK,EACV,+BAA+B,EAC/B,wBAAwB,EACzB,qBAAiB;AAElB,MAAM,MAAM,oCAAoC,GAC5C,uCAAuC,GACvC,+BAA+B,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,8BAA8B;;;CAY1C,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC;AAiBF;;;;;;;;;;;GAWG;AACH,iBAAe,wCAAwC,CACrD,GAAG,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,EAChE,GAAG,EAAE,sBAAsB,CAAC,6BAA6B,CAAC,EAC1D,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,oCAAoC,CAAC,GACjE,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -1,16 +1,11 @@
1
1
  import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
- import { type JsonRpcRequest, type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
3
- import type { CronjobRpcRequest, InferMatching } from "@metamask/snaps-utils";
2
+ import type { Messenger } from "@metamask/messenger";
3
+ import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
4
+ import { type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
5
+ import type { InferMatching } from "@metamask/snaps-utils";
4
6
  import { type PendingJsonRpcResponse } from "@metamask/utils";
5
- import type { MethodHooksObject } from "../utils.mjs";
6
- type ScheduleBackgroundEventHookParams = {
7
- schedule: string;
8
- request: CronjobRpcRequest;
9
- };
10
- export type ScheduleBackgroundEventMethodHooks = {
11
- scheduleBackgroundEvent: (snapEvent: ScheduleBackgroundEventHookParams) => string;
12
- hasPermission: (permissionName: string) => boolean;
13
- };
7
+ import type { CronjobControllerScheduleAction, JsonRpcRequestWithOrigin } from "../types.mjs";
8
+ export type ScheduleBackgroundEventMethodActions = PermissionControllerHasPermissionAction | CronjobControllerScheduleAction;
14
9
  /**
15
10
  * Schedule a background event for a Snap. The background event will trigger a
16
11
  * JSON-RPC request to the Snap at the scheduled time, handled by the
@@ -38,9 +33,8 @@ export type ScheduleBackgroundEventMethodHooks = {
38
33
  * ```
39
34
  */
40
35
  export declare const scheduleBackgroundEventHandler: {
41
- methodNames: ["snap_scheduleBackgroundEvent"];
42
36
  implementation: typeof getScheduleBackgroundEventImplementation;
43
- hookNames: MethodHooksObject<ScheduleBackgroundEventMethodHooks>;
37
+ actionNames: ("CronjobController:schedule" | "PermissionController:hasPermission")[];
44
38
  };
45
39
  declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superstruct").Struct<{
46
40
  date: string;
@@ -68,11 +62,10 @@ export type ScheduleBackgroundEventParameters = InferMatching<typeof ScheduleBac
68
62
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this
69
63
  * function.
70
64
  * @param end - The `json-rpc-engine` "end" callback.
71
- * @param hooks - The RPC method hooks.
72
- * @param hooks.scheduleBackgroundEvent - The function to schedule a background event.
73
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
65
+ * @param _hooks - The RPC method hooks. Not used by this function.
66
+ * @param messenger - The messenger used to call controller actions.
74
67
  * @returns An id representing the background event.
75
68
  */
76
- declare function getScheduleBackgroundEventImplementation(req: JsonRpcRequest<ScheduleBackgroundEventParameters>, res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, { scheduleBackgroundEvent, hasPermission, }: ScheduleBackgroundEventMethodHooks): Promise<void>;
69
+ declare function getScheduleBackgroundEventImplementation(req: JsonRpcRequestWithOrigin<ScheduleBackgroundEventParameters>, res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, ScheduleBackgroundEventMethodActions>): Promise<void>;
77
70
  export {};
78
71
  //# sourceMappingURL=scheduleBackgroundEvent.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.d.mts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kCAAkC;AAG1E,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EACnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,8BAA8B;AAO9E,OAAO,EAAe,KAAK,sBAAsB,EAAE,wBAAwB;AAG3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AASlD,KAAK,iCAAiC,GAAG;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,uBAAuB,EAAE,CACvB,SAAS,EAAE,iCAAiC,KACzC,MAAM,CAAC;IAEZ,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,8BAA8B;;;;CAQ1C,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC;AAiBF;;;;;;;;;;;;GAYG;AACH,iBAAe,wCAAwC,CACrD,GAAG,EAAE,cAAc,CAAC,iCAAiC,CAAC,EACtD,GAAG,EAAE,sBAAsB,CAAC,6BAA6B,CAAC,EAC1D,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EACE,uBAAuB,EACvB,aAAa,GACd,EAAE,kCAAkC,GACpC,OAAO,CAAC,IAAI,CAAC,CAuBf"}
1
+ {"version":3,"file":"scheduleBackgroundEvent.d.mts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.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,EAEL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAEnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAO3D,OAAO,EAAe,KAAK,sBAAsB,EAAE,wBAAwB;AAG3E,OAAO,KAAK,EACV,+BAA+B,EAC/B,wBAAwB,EACzB,qBAAiB;AAElB,MAAM,MAAM,oCAAoC,GAC5C,uCAAuC,GACvC,+BAA+B,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,8BAA8B;;;CAY1C,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC;AAiBF;;;;;;;;;;;GAWG;AACH,iBAAe,wCAAwC,CACrD,GAAG,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,EAChE,GAAG,EAAE,sBAAsB,CAAC,6BAA6B,CAAC,EAC1D,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,oCAAoC,CAAC,GACjE,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -4,11 +4,6 @@ import { CronjobRpcRequestStruct, ISO8601DateStruct, ISO8601DurationStruct } fro
4
4
  import { StructError, create, object } from "@metamask/superstruct";
5
5
  import { hasProperty } from "@metamask/utils";
6
6
  import { SnapEndowments } from "../endowments/index.mjs";
7
- const methodName = 'snap_scheduleBackgroundEvent';
8
- const hookNames = {
9
- scheduleBackgroundEvent: true,
10
- hasPermission: true,
11
- };
12
7
  /**
13
8
  * Schedule a background event for a Snap. The background event will trigger a
14
9
  * JSON-RPC request to the Snap at the scheduled time, handled by the
@@ -36,9 +31,11 @@ const hookNames = {
36
31
  * ```
37
32
  */
38
33
  export const scheduleBackgroundEventHandler = {
39
- methodNames: [methodName],
40
34
  implementation: getScheduleBackgroundEventImplementation,
41
- hookNames,
35
+ actionNames: [
36
+ 'PermissionController:hasPermission',
37
+ 'CronjobController:schedule',
38
+ ],
42
39
  };
43
40
  const ScheduleBackgroundEventParametersWithDateStruct = object({
44
41
  date: ISO8601DateStruct,
@@ -75,21 +72,21 @@ function getSchedule(params) {
75
72
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this
76
73
  * function.
77
74
  * @param end - The `json-rpc-engine` "end" callback.
78
- * @param hooks - The RPC method hooks.
79
- * @param hooks.scheduleBackgroundEvent - The function to schedule a background event.
80
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
75
+ * @param _hooks - The RPC method hooks. Not used by this function.
76
+ * @param messenger - The messenger used to call controller actions.
81
77
  * @returns An id representing the background event.
82
78
  */
83
- async function getScheduleBackgroundEventImplementation(req, res, _next, end, { scheduleBackgroundEvent, hasPermission, }) {
84
- const { params } = req;
85
- if (!hasPermission(SnapEndowments.Cronjob)) {
79
+ async function getScheduleBackgroundEventImplementation(req, res, _next, end, _hooks, messenger) {
80
+ const { params, origin } = req;
81
+ if (!messenger.call('PermissionController:hasPermission', origin, SnapEndowments.Cronjob)) {
86
82
  return end(providerErrors.unauthorized());
87
83
  }
88
84
  try {
89
85
  const validatedParams = getValidatedParams(params);
90
86
  const { request } = validatedParams;
91
87
  const schedule = getSchedule(validatedParams);
92
- const id = scheduleBackgroundEvent({
88
+ const id = messenger.call('CronjobController:schedule', {
89
+ snapId: origin,
93
90
  schedule,
94
91
  request,
95
92
  });
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.mjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport {\n selectiveUnion,\n type JsonRpcRequest,\n type ScheduleBackgroundEventParams,\n type ScheduleBackgroundEventResult,\n} from '@metamask/snaps-sdk';\nimport type { CronjobRpcRequest, InferMatching } from '@metamask/snaps-utils';\nimport {\n CronjobRpcRequestStruct,\n ISO8601DateStruct,\n ISO8601DurationStruct,\n} from '@metamask/snaps-utils';\nimport { StructError, create, object } from '@metamask/superstruct';\nimport { hasProperty, type PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'snap_scheduleBackgroundEvent';\n\nconst hookNames: MethodHooksObject<ScheduleBackgroundEventMethodHooks> = {\n scheduleBackgroundEvent: true,\n hasPermission: true,\n};\n\ntype ScheduleBackgroundEventHookParams = {\n schedule: string;\n request: CronjobRpcRequest;\n};\n\nexport type ScheduleBackgroundEventMethodHooks = {\n scheduleBackgroundEvent: (\n snapEvent: ScheduleBackgroundEventHookParams,\n ) => string;\n\n hasPermission: (permissionName: string) => boolean;\n};\n\n/**\n * Schedule a background event for a Snap. The background event will trigger a\n * JSON-RPC request to the Snap at the scheduled time, handled by the\n * `onCronjob` entry point in the Snap.\n *\n * The schedule can be defined using either an ISO 8601 date or duration string.\n * For example:\n *\n * - Using a date: `2026-12-31T23:59:59Z`\n * - Using a duration: `P1DT2H` (which represents a duration of 1 day and 2\n * hours)\n *\n * @example\n * ```ts\n * const id = await wallet.request({\n * method: 'snap_scheduleBackgroundEvent',\n * params: {\n * date: '2026-12-31T23:59:59Z',\n * request: {\n * method: 'mySnapMethod',\n * params: { foo: 'bar' },\n * },\n * },\n * });\n * ```\n */\nexport const scheduleBackgroundEventHandler = {\n methodNames: [methodName] as const,\n implementation: getScheduleBackgroundEventImplementation,\n hookNames,\n} satisfies PermittedHandlerExport<\n ScheduleBackgroundEventMethodHooks,\n ScheduleBackgroundEventParameters,\n ScheduleBackgroundEventResult\n>;\n\nconst ScheduleBackgroundEventParametersWithDateStruct = object({\n date: ISO8601DateStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersWithDurationStruct = object({\n duration: ISO8601DurationStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersStruct = selectiveUnion((val) => {\n if (hasProperty(val, 'date')) {\n return ScheduleBackgroundEventParametersWithDateStruct;\n }\n return ScheduleBackgroundEventParametersWithDurationStruct;\n});\n\nexport type ScheduleBackgroundEventParameters = InferMatching<\n typeof ScheduleBackgroundEventParametersStruct,\n ScheduleBackgroundEventParams\n>;\n\n/**\n * Get the schedule for a background event based on the provided parameters.\n *\n * @param params - The parameters for the background event.\n * @returns The schedule parameters for the background event.\n */\nfunction getSchedule(params: ScheduleBackgroundEventParameters): string {\n if (hasProperty(params, 'date')) {\n // TODO: Check why `params.date` is not a string.\n return params.date as string;\n }\n\n return params.duration;\n}\n\n/**\n * The `snap_scheduleBackgroundEvent` 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.scheduleBackgroundEvent - The function to schedule a background event.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.\n * @returns An id representing the background event.\n */\nasync function getScheduleBackgroundEventImplementation(\n req: JsonRpcRequest<ScheduleBackgroundEventParameters>,\n res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n scheduleBackgroundEvent,\n hasPermission,\n }: ScheduleBackgroundEventMethodHooks,\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 const { request } = validatedParams;\n const schedule = getSchedule(validatedParams);\n\n const id = scheduleBackgroundEvent({\n schedule,\n request,\n });\n\n res.result = id;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the scheduleBackgroundEvent method `params` and returns them cast to the correct\n * 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(\n params: unknown,\n): ScheduleBackgroundEventParameters {\n try {\n return create(params, ScheduleBackgroundEventParametersStruct);\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":"scheduleBackgroundEvent.mjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"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","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 {\n selectiveUnion,\n type ScheduleBackgroundEventParams,\n type ScheduleBackgroundEventResult,\n type SnapId,\n} from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport {\n CronjobRpcRequestStruct,\n ISO8601DateStruct,\n ISO8601DurationStruct,\n} from '@metamask/snaps-utils';\nimport { StructError, create, object } from '@metamask/superstruct';\nimport { hasProperty, type PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type {\n CronjobControllerScheduleAction,\n JsonRpcRequestWithOrigin,\n} from '../types';\n\nexport type ScheduleBackgroundEventMethodActions =\n | PermissionControllerHasPermissionAction\n | CronjobControllerScheduleAction;\n\n/**\n * Schedule a background event for a Snap. The background event will trigger a\n * JSON-RPC request to the Snap at the scheduled time, handled by the\n * `onCronjob` entry point in the Snap.\n *\n * The schedule can be defined using either an ISO 8601 date or duration string.\n * For example:\n *\n * - Using a date: `2026-12-31T23:59:59Z`\n * - Using a duration: `P1DT2H` (which represents a duration of 1 day and 2\n * hours)\n *\n * @example\n * ```ts\n * const id = await wallet.request({\n * method: 'snap_scheduleBackgroundEvent',\n * params: {\n * date: '2026-12-31T23:59:59Z',\n * request: {\n * method: 'mySnapMethod',\n * params: { foo: 'bar' },\n * },\n * },\n * });\n * ```\n */\nexport const scheduleBackgroundEventHandler = {\n implementation: getScheduleBackgroundEventImplementation,\n actionNames: [\n 'PermissionController:hasPermission',\n 'CronjobController:schedule',\n ],\n} satisfies MethodHandler<\n never,\n ScheduleBackgroundEventMethodActions,\n ScheduleBackgroundEventParameters,\n ScheduleBackgroundEventResult,\n { origin: SnapId }\n>;\n\nconst ScheduleBackgroundEventParametersWithDateStruct = object({\n date: ISO8601DateStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersWithDurationStruct = object({\n duration: ISO8601DurationStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersStruct = selectiveUnion((val) => {\n if (hasProperty(val, 'date')) {\n return ScheduleBackgroundEventParametersWithDateStruct;\n }\n return ScheduleBackgroundEventParametersWithDurationStruct;\n});\n\nexport type ScheduleBackgroundEventParameters = InferMatching<\n typeof ScheduleBackgroundEventParametersStruct,\n ScheduleBackgroundEventParams\n>;\n\n/**\n * Get the schedule for a background event based on the provided parameters.\n *\n * @param params - The parameters for the background event.\n * @returns The schedule parameters for the background event.\n */\nfunction getSchedule(params: ScheduleBackgroundEventParameters): string {\n if (hasProperty(params, 'date')) {\n // TODO: Check why `params.date` is not a string.\n return params.date as string;\n }\n\n return params.duration;\n}\n\n/**\n * The `snap_scheduleBackgroundEvent` 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 An id representing the background event.\n */\nasync function getScheduleBackgroundEventImplementation(\n req: JsonRpcRequestWithOrigin<ScheduleBackgroundEventParameters>,\n res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, ScheduleBackgroundEventMethodActions>,\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 const { request } = validatedParams;\n const schedule = getSchedule(validatedParams);\n\n const id = messenger.call('CronjobController:schedule', {\n snapId: origin,\n schedule,\n request,\n });\n\n res.result = id;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the scheduleBackgroundEvent method `params` and returns them cast to the correct\n * 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(\n params: unknown,\n): ScheduleBackgroundEventParameters {\n try {\n return create(params, ScheduleBackgroundEventParametersStruct);\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"]}
@@ -5,11 +5,6 @@ const rpc_errors_1 = require("@metamask/rpc-errors");
5
5
  const snaps_sdk_1 = require("@metamask/snaps-sdk");
6
6
  const superstruct_1 = require("@metamask/superstruct");
7
7
  const endowments_1 = require("../endowments/index.cjs");
8
- const methodName = 'snap_sendWebSocketMessage';
9
- const hookNames = {
10
- hasPermission: true,
11
- sendWebSocketMessage: true,
12
- };
13
8
  const SendWebSocketMessageParametersStruct = (0, superstruct_1.object)({
14
9
  id: (0, superstruct_1.string)(),
15
10
  message: (0, snaps_sdk_1.union)([(0, superstruct_1.string)(), (0, superstruct_1.array)((0, superstruct_1.number)())]),
@@ -39,9 +34,11 @@ const SendWebSocketMessageParametersStruct = (0, superstruct_1.object)({
39
34
  * ```
40
35
  */
41
36
  exports.sendWebSocketMessageHandler = {
42
- methodNames: [methodName],
43
37
  implementation: sendWebSocketMessageImplementation,
44
- hookNames,
38
+ actionNames: [
39
+ 'PermissionController:hasPermission',
40
+ 'WebSocketService:sendMessage',
41
+ ],
45
42
  };
46
43
  /**
47
44
  * The `snap_sendWebSocketMessage` method implementation.
@@ -50,19 +47,18 @@ exports.sendWebSocketMessageHandler = {
50
47
  * @param res - The JSON-RPC response object.
51
48
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
52
49
  * @param end - The `json-rpc-engine` "end" callback.
53
- * @param hooks - The RPC method hooks.
54
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:network-access` permission.
55
- * @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
50
+ * @param _hooks - The RPC method hooks. Not used by this function.
51
+ * @param messenger - The messenger used to call controller actions.
56
52
  * @returns Nothing.
57
53
  */
58
- async function sendWebSocketMessageImplementation(req, res, _next, end, { hasPermission, sendWebSocketMessage }) {
59
- if (!hasPermission(endowments_1.SnapEndowments.NetworkAccess)) {
54
+ async function sendWebSocketMessageImplementation(req, res, _next, end, _hooks, messenger) {
55
+ const { params, origin } = req;
56
+ if (!messenger.call('PermissionController:hasPermission', origin, endowments_1.SnapEndowments.NetworkAccess)) {
60
57
  return end(rpc_errors_1.providerErrors.unauthorized());
61
58
  }
62
- const { params } = req;
63
59
  try {
64
60
  const { id, message } = getValidatedParams(params);
65
- await sendWebSocketMessage(id, message);
61
+ await messenger.call('WebSocketService:sendMessage', origin, id, message);
66
62
  res.result = null;
67
63
  }
68
64
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"sendWebSocketMessage.cjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":";;;AAEA,qDAAiE;AAMjE,mDAA4C;AAE5C,uDAO+B;AAG/B,wDAA+C;AAG/C,MAAM,UAAU,GAAG,2BAA2B,CAAC;AAE/C,MAAM,SAAS,GAAuD;IACpE,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;CAC3B,CAAC;AAOF,MAAM,oCAAoC,GAAG,IAAA,oBAAM,EAAC;IAClD,EAAE,EAAE,IAAA,oBAAM,GAAE;IACZ,OAAO,EAAE,IAAA,iBAAK,EAAC,CAAC,IAAA,oBAAM,GAAE,EAAE,IAAA,mBAAK,EAAC,IAAA,oBAAM,GAAE,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AAOH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACU,QAAA,2BAA2B,GAAG;IACzC,WAAW,EAAE,CAAC,UAAU,CAAU;IAClC,cAAc,EAAE,kCAAkC;IAClD,SAAS;CAKV,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,kCAAkC,CAC/C,GAAmD,EACnD,GAAuD,EACvD,KAAc,EACd,GAA6B,EAC7B,EAAE,aAAa,EAAE,oBAAoB,EAAmC;IAExE,IAAI,CAAC,aAAa,CAAC,2BAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC,2BAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,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;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,IAAA,oBAAM,EAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IAC9D,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 SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n} from '@metamask/snaps-sdk';\nimport { union } from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport {\n create,\n object,\n number,\n string,\n array,\n StructError,\n} from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'snap_sendWebSocketMessage';\n\nconst hookNames: MethodHooksObject<SendWebSocketMessageMethodHooks> = {\n hasPermission: true,\n sendWebSocketMessage: true,\n};\n\nexport type SendWebSocketMessageMethodHooks = {\n hasPermission: (permissionName: string) => boolean;\n sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;\n};\n\nconst SendWebSocketMessageParametersStruct = object({\n id: string(),\n message: union([string(), array(number())]),\n});\n\nexport type SendWebSocketMessageParameters = InferMatching<\n typeof SendWebSocketMessageParametersStruct,\n SendWebSocketMessageParams\n>;\n\n/**\n * Send a message to an open WebSocket connection. The message will be sent to\n * the WebSocket connection with the specified ID, which must have been\n * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)\n * method.\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"endowment:network-access\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * await wallet.request({\n * method: 'snap_sendWebSocketMessage',\n * params: {\n * id: 'websocket-connection-id',\n * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data\n * },\n * });\n * ```\n */\nexport const sendWebSocketMessageHandler = {\n methodNames: [methodName] as const,\n implementation: sendWebSocketMessageImplementation,\n hookNames,\n} satisfies PermittedHandlerExport<\n SendWebSocketMessageMethodHooks,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult\n>;\n\n/**\n * The `snap_sendWebSocketMessage` 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 function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:network-access` permission.\n * @param hooks.sendWebSocketMessage - The function to send a WebSocket message.\n * @returns Nothing.\n */\nasync function sendWebSocketMessageImplementation(\n req: JsonRpcRequest<SendWebSocketMessageParameters>,\n res: PendingJsonRpcResponse<SendWebSocketMessageResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { hasPermission, sendWebSocketMessage }: SendWebSocketMessageMethodHooks,\n): Promise<void> {\n if (!hasPermission(SnapEndowments.NetworkAccess)) {\n return end(providerErrors.unauthorized());\n }\n\n const { params } = req;\n\n try {\n const { id, message } = getValidatedParams(params);\n await sendWebSocketMessage(id, message);\n res.result = null;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validates the parameters for the snap_sendWebSocketMessage method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): SendWebSocketMessageParameters {\n try {\n return create(params, SendWebSocketMessageParametersStruct);\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":"sendWebSocketMessage.cjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":";;;AAMA,qDAAiE;AAKjE,mDAA4C;AAE5C,uDAO+B;AAG/B,wDAA+C;AAU/C,MAAM,oCAAoC,GAAG,IAAA,oBAAM,EAAC;IAClD,EAAE,EAAE,IAAA,oBAAM,GAAE;IACZ,OAAO,EAAE,IAAA,iBAAK,EAAC,CAAC,IAAA,oBAAM,GAAE,EAAE,IAAA,mBAAK,EAAC,IAAA,oBAAM,GAAE,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AAOH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACU,QAAA,2BAA2B,GAAG;IACzC,cAAc,EAAE,kCAAkC;IAClD,WAAW,EAAE;QACX,oCAAoC;QACpC,8BAA8B;KAC/B;CAOF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,kCAAkC,CAC/C,GAA6D,EAC7D,GAAuD,EACvD,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAA+D;IAE/D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE/B,IACE,CAAC,SAAS,CAAC,IAAI,CACb,oCAAoC,EACpC,MAAM,EACN,2BAAc,CAAC,aAAa,CAC7B,EACD,CAAC;QACD,OAAO,GAAG,CAAC,2BAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1E,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;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,IAAA,oBAAM,EAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IAC9D,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 SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n} from '@metamask/snaps-sdk';\nimport { union } from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport {\n create,\n object,\n number,\n string,\n array,\n StructError,\n} from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type {\n JsonRpcRequestWithOrigin,\n WebSocketServiceSendMessageAction,\n} from '../types';\n\nexport type SendWebSocketMessageMethodActions =\n | PermissionControllerHasPermissionAction\n | WebSocketServiceSendMessageAction;\n\nconst SendWebSocketMessageParametersStruct = object({\n id: string(),\n message: union([string(), array(number())]),\n});\n\nexport type SendWebSocketMessageParameters = InferMatching<\n typeof SendWebSocketMessageParametersStruct,\n SendWebSocketMessageParams\n>;\n\n/**\n * Send a message to an open WebSocket connection. The message will be sent to\n * the WebSocket connection with the specified ID, which must have been\n * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)\n * method.\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"endowment:network-access\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * await wallet.request({\n * method: 'snap_sendWebSocketMessage',\n * params: {\n * id: 'websocket-connection-id',\n * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data\n * },\n * });\n * ```\n */\nexport const sendWebSocketMessageHandler = {\n implementation: sendWebSocketMessageImplementation,\n actionNames: [\n 'PermissionController:hasPermission',\n 'WebSocketService:sendMessage',\n ],\n} satisfies MethodHandler<\n never,\n SendWebSocketMessageMethodActions,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n { origin: string }\n>;\n\n/**\n * The `snap_sendWebSocketMessage` 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 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 sendWebSocketMessageImplementation(\n req: JsonRpcRequestWithOrigin<SendWebSocketMessageParameters>,\n res: PendingJsonRpcResponse<SendWebSocketMessageResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, SendWebSocketMessageMethodActions>,\n): Promise<void> {\n const { params, origin } = req;\n\n if (\n !messenger.call(\n 'PermissionController:hasPermission',\n origin,\n SnapEndowments.NetworkAccess,\n )\n ) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const { id, message } = getValidatedParams(params);\n await messenger.call('WebSocketService:sendMessage', origin, id, message);\n res.result = null;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validates the parameters for the snap_sendWebSocketMessage method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): SendWebSocketMessageParameters {\n try {\n return create(params, SendWebSocketMessageParametersStruct);\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, SendWebSocketMessageParams, SendWebSocketMessageResult } from "@metamask/snaps-sdk";
2
+ import type { Messenger } from "@metamask/messenger";
3
+ import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
4
+ import type { SendWebSocketMessageParams, SendWebSocketMessageResult } 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 SendWebSocketMessageMethodHooks = {
7
- hasPermission: (permissionName: string) => boolean;
8
- sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;
9
- };
7
+ import type { JsonRpcRequestWithOrigin, WebSocketServiceSendMessageAction } from "../types.cjs";
8
+ export type SendWebSocketMessageMethodActions = PermissionControllerHasPermissionAction | WebSocketServiceSendMessageAction;
10
9
  declare const SendWebSocketMessageParametersStruct: import("@metamask/superstruct").Struct<{
11
10
  id: string;
12
11
  message: string | number[];
@@ -40,9 +39,8 @@ export type SendWebSocketMessageParameters = InferMatching<typeof SendWebSocketM
40
39
  * ```
41
40
  */
42
41
  export declare const sendWebSocketMessageHandler: {
43
- methodNames: ["snap_sendWebSocketMessage"];
44
42
  implementation: typeof sendWebSocketMessageImplementation;
45
- hookNames: MethodHooksObject<SendWebSocketMessageMethodHooks>;
43
+ actionNames: ("WebSocketService:sendMessage" | "PermissionController:hasPermission")[];
46
44
  };
47
45
  /**
48
46
  * The `snap_sendWebSocketMessage` method implementation.
@@ -51,11 +49,10 @@ export declare const sendWebSocketMessageHandler: {
51
49
  * @param res - The JSON-RPC response object.
52
50
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
53
51
  * @param end - The `json-rpc-engine` "end" callback.
54
- * @param hooks - The RPC method hooks.
55
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:network-access` permission.
56
- * @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
52
+ * @param _hooks - The RPC method hooks. Not used by this function.
53
+ * @param messenger - The messenger used to call controller actions.
57
54
  * @returns Nothing.
58
55
  */
59
- declare function sendWebSocketMessageImplementation(req: JsonRpcRequest<SendWebSocketMessageParameters>, res: PendingJsonRpcResponse<SendWebSocketMessageResult>, _next: unknown, end: JsonRpcEngineEndCallback, { hasPermission, sendWebSocketMessage }: SendWebSocketMessageMethodHooks): Promise<void>;
56
+ declare function sendWebSocketMessageImplementation(req: JsonRpcRequestWithOrigin<SendWebSocketMessageParameters>, res: PendingJsonRpcResponse<SendWebSocketMessageResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, SendWebSocketMessageMethodActions>): Promise<void>;
60
57
  export {};
61
58
  //# sourceMappingURL=sendWebSocketMessage.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sendWebSocketMessage.d.cts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kCAAkC;AAG1E,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAS3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AASlD,MAAM,MAAM,+BAA+B,GAAG;IAC5C,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E,CAAC;AAEF,QAAA,MAAM,oCAAoC;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,OAAO,oCAAoC,EAC3C,0BAA0B,CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,2BAA2B;;;;CAQvC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,iBAAe,kCAAkC,CAC/C,GAAG,EAAE,cAAc,CAAC,8BAA8B,CAAC,EACnD,GAAG,EAAE,sBAAsB,CAAC,0BAA0B,CAAC,EACvD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EAAE,aAAa,EAAE,oBAAoB,EAAE,EAAE,+BAA+B,GACvE,OAAO,CAAC,IAAI,CAAC,CAgBf"}
1
+ {"version":3,"file":"sendWebSocketMessage.d.cts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.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,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAS3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EACV,wBAAwB,EACxB,iCAAiC,EAClC,qBAAiB;AAElB,MAAM,MAAM,iCAAiC,GACzC,uCAAuC,GACvC,iCAAiC,CAAC;AAEtC,QAAA,MAAM,oCAAoC;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,OAAO,oCAAoC,EAC3C,0BAA0B,CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,2BAA2B;;;CAYvC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAe,kCAAkC,CAC/C,GAAG,EAAE,wBAAwB,CAAC,8BAA8B,CAAC,EAC7D,GAAG,EAAE,sBAAsB,CAAC,0BAA0B,CAAC,EACvD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,iCAAiC,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -1,12 +1,11 @@
1
1
  import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
- import type { JsonRpcRequest, SendWebSocketMessageParams, SendWebSocketMessageResult } from "@metamask/snaps-sdk";
2
+ import type { Messenger } from "@metamask/messenger";
3
+ import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
4
+ import type { SendWebSocketMessageParams, SendWebSocketMessageResult } 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 SendWebSocketMessageMethodHooks = {
7
- hasPermission: (permissionName: string) => boolean;
8
- sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;
9
- };
7
+ import type { JsonRpcRequestWithOrigin, WebSocketServiceSendMessageAction } from "../types.mjs";
8
+ export type SendWebSocketMessageMethodActions = PermissionControllerHasPermissionAction | WebSocketServiceSendMessageAction;
10
9
  declare const SendWebSocketMessageParametersStruct: import("@metamask/superstruct").Struct<{
11
10
  id: string;
12
11
  message: string | number[];
@@ -40,9 +39,8 @@ export type SendWebSocketMessageParameters = InferMatching<typeof SendWebSocketM
40
39
  * ```
41
40
  */
42
41
  export declare const sendWebSocketMessageHandler: {
43
- methodNames: ["snap_sendWebSocketMessage"];
44
42
  implementation: typeof sendWebSocketMessageImplementation;
45
- hookNames: MethodHooksObject<SendWebSocketMessageMethodHooks>;
43
+ actionNames: ("WebSocketService:sendMessage" | "PermissionController:hasPermission")[];
46
44
  };
47
45
  /**
48
46
  * The `snap_sendWebSocketMessage` method implementation.
@@ -51,11 +49,10 @@ export declare const sendWebSocketMessageHandler: {
51
49
  * @param res - The JSON-RPC response object.
52
50
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
53
51
  * @param end - The `json-rpc-engine` "end" callback.
54
- * @param hooks - The RPC method hooks.
55
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:network-access` permission.
56
- * @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
52
+ * @param _hooks - The RPC method hooks. Not used by this function.
53
+ * @param messenger - The messenger used to call controller actions.
57
54
  * @returns Nothing.
58
55
  */
59
- declare function sendWebSocketMessageImplementation(req: JsonRpcRequest<SendWebSocketMessageParameters>, res: PendingJsonRpcResponse<SendWebSocketMessageResult>, _next: unknown, end: JsonRpcEngineEndCallback, { hasPermission, sendWebSocketMessage }: SendWebSocketMessageMethodHooks): Promise<void>;
56
+ declare function sendWebSocketMessageImplementation(req: JsonRpcRequestWithOrigin<SendWebSocketMessageParameters>, res: PendingJsonRpcResponse<SendWebSocketMessageResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, SendWebSocketMessageMethodActions>): Promise<void>;
60
57
  export {};
61
58
  //# sourceMappingURL=sendWebSocketMessage.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sendWebSocketMessage.d.mts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kCAAkC;AAG1E,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAS3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AASlD,MAAM,MAAM,+BAA+B,GAAG;IAC5C,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E,CAAC;AAEF,QAAA,MAAM,oCAAoC;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,OAAO,oCAAoC,EAC3C,0BAA0B,CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,2BAA2B;;;;CAQvC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,iBAAe,kCAAkC,CAC/C,GAAG,EAAE,cAAc,CAAC,8BAA8B,CAAC,EACnD,GAAG,EAAE,sBAAsB,CAAC,0BAA0B,CAAC,EACvD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EAAE,aAAa,EAAE,oBAAoB,EAAE,EAAE,+BAA+B,GACvE,OAAO,CAAC,IAAI,CAAC,CAgBf"}
1
+ {"version":3,"file":"sendWebSocketMessage.d.mts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.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,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAS3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EACV,wBAAwB,EACxB,iCAAiC,EAClC,qBAAiB;AAElB,MAAM,MAAM,iCAAiC,GACzC,uCAAuC,GACvC,iCAAiC,CAAC;AAEtC,QAAA,MAAM,oCAAoC;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,OAAO,oCAAoC,EAC3C,0BAA0B,CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,2BAA2B;;;CAYvC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAe,kCAAkC,CAC/C,GAAG,EAAE,wBAAwB,CAAC,8BAA8B,CAAC,EAC7D,GAAG,EAAE,sBAAsB,CAAC,0BAA0B,CAAC,EACvD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,iCAAiC,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -2,11 +2,6 @@ import { providerErrors, rpcErrors } from "@metamask/rpc-errors";
2
2
  import { union } from "@metamask/snaps-sdk";
3
3
  import { create, object, number, string, array, StructError } from "@metamask/superstruct";
4
4
  import { SnapEndowments } from "../endowments/index.mjs";
5
- const methodName = 'snap_sendWebSocketMessage';
6
- const hookNames = {
7
- hasPermission: true,
8
- sendWebSocketMessage: true,
9
- };
10
5
  const SendWebSocketMessageParametersStruct = object({
11
6
  id: string(),
12
7
  message: union([string(), array(number())]),
@@ -36,9 +31,11 @@ const SendWebSocketMessageParametersStruct = object({
36
31
  * ```
37
32
  */
38
33
  export const sendWebSocketMessageHandler = {
39
- methodNames: [methodName],
40
34
  implementation: sendWebSocketMessageImplementation,
41
- hookNames,
35
+ actionNames: [
36
+ 'PermissionController:hasPermission',
37
+ 'WebSocketService:sendMessage',
38
+ ],
42
39
  };
43
40
  /**
44
41
  * The `snap_sendWebSocketMessage` method implementation.
@@ -47,19 +44,18 @@ export const sendWebSocketMessageHandler = {
47
44
  * @param res - The JSON-RPC response object.
48
45
  * @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
49
46
  * @param end - The `json-rpc-engine` "end" callback.
50
- * @param hooks - The RPC method hooks.
51
- * @param hooks.hasPermission - The function to check if a snap has the `endowment:network-access` permission.
52
- * @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
47
+ * @param _hooks - The RPC method hooks. Not used by this function.
48
+ * @param messenger - The messenger used to call controller actions.
53
49
  * @returns Nothing.
54
50
  */
55
- async function sendWebSocketMessageImplementation(req, res, _next, end, { hasPermission, sendWebSocketMessage }) {
56
- if (!hasPermission(SnapEndowments.NetworkAccess)) {
51
+ async function sendWebSocketMessageImplementation(req, res, _next, end, _hooks, messenger) {
52
+ const { params, origin } = req;
53
+ if (!messenger.call('PermissionController:hasPermission', origin, SnapEndowments.NetworkAccess)) {
57
54
  return end(providerErrors.unauthorized());
58
55
  }
59
- const { params } = req;
60
56
  try {
61
57
  const { id, message } = getValidatedParams(params);
62
- await sendWebSocketMessage(id, message);
58
+ await messenger.call('WebSocketService:sendMessage', origin, id, message);
63
59
  res.result = null;
64
60
  }
65
61
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"sendWebSocketMessage.mjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,6BAA6B;AAMjE,OAAO,EAAE,KAAK,EAAE,4BAA4B;AAE5C,OAAO,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,KAAK,EACL,WAAW,EACZ,8BAA8B;AAG/B,OAAO,EAAE,cAAc,EAAE,gCAAsB;AAG/C,MAAM,UAAU,GAAG,2BAA2B,CAAC;AAE/C,MAAM,SAAS,GAAuD;IACpE,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;CAC3B,CAAC;AAOF,MAAM,oCAAoC,GAAG,MAAM,CAAC;IAClD,EAAE,EAAE,MAAM,EAAE;IACZ,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AAOH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,WAAW,EAAE,CAAC,UAAU,CAAU;IAClC,cAAc,EAAE,kCAAkC;IAClD,SAAS;CAKV,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,kCAAkC,CAC/C,GAAmD,EACnD,GAAuD,EACvD,KAAc,EACd,GAA6B,EAC7B,EAAE,aAAa,EAAE,oBAAoB,EAAmC;IAExE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,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;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,SAAS,CAAC,aAAa,CAAC;gBAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,GAAG;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,0BAA0B;QAC1B,MAAM,SAAS,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 SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n} from '@metamask/snaps-sdk';\nimport { union } from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport {\n create,\n object,\n number,\n string,\n array,\n StructError,\n} from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'snap_sendWebSocketMessage';\n\nconst hookNames: MethodHooksObject<SendWebSocketMessageMethodHooks> = {\n hasPermission: true,\n sendWebSocketMessage: true,\n};\n\nexport type SendWebSocketMessageMethodHooks = {\n hasPermission: (permissionName: string) => boolean;\n sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;\n};\n\nconst SendWebSocketMessageParametersStruct = object({\n id: string(),\n message: union([string(), array(number())]),\n});\n\nexport type SendWebSocketMessageParameters = InferMatching<\n typeof SendWebSocketMessageParametersStruct,\n SendWebSocketMessageParams\n>;\n\n/**\n * Send a message to an open WebSocket connection. The message will be sent to\n * the WebSocket connection with the specified ID, which must have been\n * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)\n * method.\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"endowment:network-access\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * await wallet.request({\n * method: 'snap_sendWebSocketMessage',\n * params: {\n * id: 'websocket-connection-id',\n * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data\n * },\n * });\n * ```\n */\nexport const sendWebSocketMessageHandler = {\n methodNames: [methodName] as const,\n implementation: sendWebSocketMessageImplementation,\n hookNames,\n} satisfies PermittedHandlerExport<\n SendWebSocketMessageMethodHooks,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult\n>;\n\n/**\n * The `snap_sendWebSocketMessage` 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 function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:network-access` permission.\n * @param hooks.sendWebSocketMessage - The function to send a WebSocket message.\n * @returns Nothing.\n */\nasync function sendWebSocketMessageImplementation(\n req: JsonRpcRequest<SendWebSocketMessageParameters>,\n res: PendingJsonRpcResponse<SendWebSocketMessageResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { hasPermission, sendWebSocketMessage }: SendWebSocketMessageMethodHooks,\n): Promise<void> {\n if (!hasPermission(SnapEndowments.NetworkAccess)) {\n return end(providerErrors.unauthorized());\n }\n\n const { params } = req;\n\n try {\n const { id, message } = getValidatedParams(params);\n await sendWebSocketMessage(id, message);\n res.result = null;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validates the parameters for the snap_sendWebSocketMessage method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): SendWebSocketMessageParameters {\n try {\n return create(params, SendWebSocketMessageParametersStruct);\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":"sendWebSocketMessage.mjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,6BAA6B;AAKjE,OAAO,EAAE,KAAK,EAAE,4BAA4B;AAE5C,OAAO,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,KAAK,EACL,WAAW,EACZ,8BAA8B;AAG/B,OAAO,EAAE,cAAc,EAAE,gCAAsB;AAU/C,MAAM,oCAAoC,GAAG,MAAM,CAAC;IAClD,EAAE,EAAE,MAAM,EAAE;IACZ,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AAOH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,cAAc,EAAE,kCAAkC;IAClD,WAAW,EAAE;QACX,oCAAoC;QACpC,8BAA8B;KAC/B;CAOF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,kCAAkC,CAC/C,GAA6D,EAC7D,GAAuD,EACvD,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAA+D;IAE/D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE/B,IACE,CAAC,SAAS,CAAC,IAAI,CACb,oCAAoC,EACpC,MAAM,EACN,cAAc,CAAC,aAAa,CAC7B,EACD,CAAC;QACD,OAAO,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1E,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;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,SAAS,CAAC,aAAa,CAAC;gBAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,GAAG;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,0BAA0B;QAC1B,MAAM,SAAS,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 SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n} from '@metamask/snaps-sdk';\nimport { union } from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport {\n create,\n object,\n number,\n string,\n array,\n StructError,\n} from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type {\n JsonRpcRequestWithOrigin,\n WebSocketServiceSendMessageAction,\n} from '../types';\n\nexport type SendWebSocketMessageMethodActions =\n | PermissionControllerHasPermissionAction\n | WebSocketServiceSendMessageAction;\n\nconst SendWebSocketMessageParametersStruct = object({\n id: string(),\n message: union([string(), array(number())]),\n});\n\nexport type SendWebSocketMessageParameters = InferMatching<\n typeof SendWebSocketMessageParametersStruct,\n SendWebSocketMessageParams\n>;\n\n/**\n * Send a message to an open WebSocket connection. The message will be sent to\n * the WebSocket connection with the specified ID, which must have been\n * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)\n * method.\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"endowment:network-access\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * await wallet.request({\n * method: 'snap_sendWebSocketMessage',\n * params: {\n * id: 'websocket-connection-id',\n * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data\n * },\n * });\n * ```\n */\nexport const sendWebSocketMessageHandler = {\n implementation: sendWebSocketMessageImplementation,\n actionNames: [\n 'PermissionController:hasPermission',\n 'WebSocketService:sendMessage',\n ],\n} satisfies MethodHandler<\n never,\n SendWebSocketMessageMethodActions,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n { origin: string }\n>;\n\n/**\n * The `snap_sendWebSocketMessage` 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 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 sendWebSocketMessageImplementation(\n req: JsonRpcRequestWithOrigin<SendWebSocketMessageParameters>,\n res: PendingJsonRpcResponse<SendWebSocketMessageResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, SendWebSocketMessageMethodActions>,\n): Promise<void> {\n const { params, origin } = req;\n\n if (\n !messenger.call(\n 'PermissionController:hasPermission',\n origin,\n SnapEndowments.NetworkAccess,\n )\n ) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const { id, message } = getValidatedParams(params);\n await messenger.call('WebSocketService:sendMessage', origin, id, message);\n res.result = null;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validates the parameters for the snap_sendWebSocketMessage method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): SendWebSocketMessageParameters {\n try {\n return create(params, SendWebSocketMessageParametersStruct);\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"]}
@@ -8,13 +8,8 @@ const utils_1 = require("@metamask/utils");
8
8
  const async_mutex_1 = require("async-mutex");
9
9
  const manageState_1 = require("../restricted/manageState.cjs");
10
10
  const utils_2 = require("../utils.cjs");
11
- const methodName = 'snap_setState';
12
11
  const hookNames = {
13
- hasPermission: true,
14
- getSnapState: true,
15
12
  getUnlockPromise: true,
16
- updateSnapState: true,
17
- getSnap: true,
18
13
  };
19
14
  /**
20
15
  * Allow the Snap to persist up to 64 MB of data to disk and retrieve it at
@@ -65,9 +60,14 @@ const hookNames = {
65
60
  * ```
66
61
  */
67
62
  exports.setStateHandler = {
68
- methodNames: [methodName],
69
63
  implementation: setStateImplementation,
70
64
  hookNames,
65
+ actionNames: [
66
+ 'PermissionController:hasPermission',
67
+ 'SnapController:getSnapState',
68
+ 'SnapController:updateSnapState',
69
+ 'SnapController:getSnap',
70
+ ],
71
71
  };
72
72
  const mutexes = new Map();
73
73
  /**
@@ -96,17 +96,13 @@ const SetStateParametersStruct = (0, superstruct_1.object)({
96
96
  * function.
97
97
  * @param end - The `json-rpc-engine` "end" callback.
98
98
  * @param hooks - The RPC method hooks.
99
- * @param hooks.hasPermission - Check whether a given origin has a given
100
- * permission.
101
- * @param hooks.getSnapState - Get the state of the requesting Snap.
102
99
  * @param hooks.getUnlockPromise - Wait for the extension to be unlocked.
103
- * @param hooks.updateSnapState - Update the state of the requesting Snap.
104
- * @param hooks.getSnap - The hook function to get Snap metadata.
100
+ * @param messenger - The messenger used to call controller actions.
105
101
  * @returns Nothing.
106
102
  */
107
- async function setStateImplementation(request, response, _next, end, { hasPermission, getSnapState, getUnlockPromise, updateSnapState, getSnap, }) {
108
- const { params } = request;
109
- if (!hasPermission(manageState_1.manageStateBuilder.targetName)) {
103
+ async function setStateImplementation(request, response, _next, end, { getUnlockPromise }, messenger) {
104
+ const { params, origin } = request;
105
+ if (!messenger.call('PermissionController:hasPermission', origin, manageState_1.manageStateBuilder.targetName)) {
110
106
  return end(rpc_errors_1.providerErrors.unauthorized());
111
107
  }
112
108
  try {
@@ -118,14 +114,14 @@ async function setStateImplementation(request, response, _next, end, { hasPermis
118
114
  if (encrypted) {
119
115
  await getUnlockPromise(true);
120
116
  }
121
- const snapId = request.origin;
117
+ const snapId = origin;
122
118
  const mutex = getMutex(snapId);
123
119
  // The expectation when using `snap_setState` is for the operation to safe
124
120
  // to do in parallel. The mutex ensures that and prevents a bug that was
125
121
  // mostly prevalent on mobile and caused data loss.
126
122
  await mutex.runExclusive(async () => {
127
- const newState = await getNewState(key, value, encrypted, getSnapState);
128
- const snap = getSnap(snapId);
123
+ const newState = await getNewState(snapId, key, value, encrypted, messenger);
124
+ const snap = messenger.call('SnapController:getSnap', origin);
129
125
  if (!snap?.preinstalled) {
130
126
  // We know that the state is valid JSON as per previous validation.
131
127
  const size = (0, snaps_utils_1.getJsonSizeUnsafe)(newState, true);
@@ -135,7 +131,7 @@ async function setStateImplementation(request, response, _next, end, { hasPermis
135
131
  });
136
132
  }
137
133
  }
138
- await updateSnapState(newState, encrypted);
134
+ await messenger.call('SnapController:updateSnapState', origin, newState, encrypted);
139
135
  response.result = null;
140
136
  });
141
137
  }
@@ -174,18 +170,19 @@ function getValidatedParams(params) {
174
170
  * the key does not exist, it is created (and any missing intermediate keys are
175
171
  * created as well).
176
172
  *
173
+ * @param snapId - The Snap ID.
177
174
  * @param key - The key to set.
178
175
  * @param value - The value to set the key to.
179
176
  * @param encrypted - Whether the state is encrypted.
180
- * @param getSnapState - The `getSnapState` hook.
177
+ * @param messenger - The messenger used to call controller actions.
181
178
  * @returns The new state of the Snap.
182
179
  */
183
- async function getNewState(key, value, encrypted, getSnapState) {
180
+ async function getNewState(snapId, key, value, encrypted, messenger) {
184
181
  if (key === undefined) {
185
182
  (0, utils_1.assert)((0, utils_1.isObject)(value));
186
183
  return value;
187
184
  }
188
- const state = await getSnapState(encrypted);
185
+ const state = await messenger.call('SnapController:getSnapState', snapId, encrypted);
189
186
  return set(state, key, value);
190
187
  }
191
188
  /**