@metamask/snaps-rpc-methods 14.3.0 → 15.0.1

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 (350) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/dist/permitted/cancelBackgroundEvent.cjs +20 -0
  3. package/dist/permitted/cancelBackgroundEvent.cjs.map +1 -1
  4. package/dist/permitted/cancelBackgroundEvent.d.cts +43 -3
  5. package/dist/permitted/cancelBackgroundEvent.d.cts.map +1 -1
  6. package/dist/permitted/cancelBackgroundEvent.d.mts +43 -3
  7. package/dist/permitted/cancelBackgroundEvent.d.mts.map +1 -1
  8. package/dist/permitted/cancelBackgroundEvent.mjs +20 -0
  9. package/dist/permitted/cancelBackgroundEvent.mjs.map +1 -1
  10. package/dist/permitted/clearState.cjs +13 -2
  11. package/dist/permitted/clearState.cjs.map +1 -1
  12. package/dist/permitted/clearState.d.cts +35 -3
  13. package/dist/permitted/clearState.d.cts.map +1 -1
  14. package/dist/permitted/clearState.d.mts +35 -3
  15. package/dist/permitted/clearState.d.mts.map +1 -1
  16. package/dist/permitted/clearState.mjs +13 -2
  17. package/dist/permitted/clearState.mjs.map +1 -1
  18. package/dist/permitted/closeWebSocket.cjs +19 -2
  19. package/dist/permitted/closeWebSocket.cjs.map +1 -1
  20. package/dist/permitted/closeWebSocket.d.cts +39 -4
  21. package/dist/permitted/closeWebSocket.d.cts.map +1 -1
  22. package/dist/permitted/closeWebSocket.d.mts +39 -4
  23. package/dist/permitted/closeWebSocket.d.mts.map +1 -1
  24. package/dist/permitted/closeWebSocket.mjs +19 -2
  25. package/dist/permitted/closeWebSocket.mjs.map +1 -1
  26. package/dist/permitted/createInterface.cjs +33 -2
  27. package/dist/permitted/createInterface.cjs.map +1 -1
  28. package/dist/permitted/createInterface.d.cts +68 -17
  29. package/dist/permitted/createInterface.d.cts.map +1 -1
  30. package/dist/permitted/createInterface.d.mts +68 -17
  31. package/dist/permitted/createInterface.d.mts.map +1 -1
  32. package/dist/permitted/createInterface.mjs +34 -3
  33. package/dist/permitted/createInterface.mjs.map +1 -1
  34. package/dist/permitted/endTrace.cjs +6 -2
  35. package/dist/permitted/endTrace.cjs.map +1 -1
  36. package/dist/permitted/endTrace.d.cts +28 -4
  37. package/dist/permitted/endTrace.d.cts.map +1 -1
  38. package/dist/permitted/endTrace.d.mts +28 -4
  39. package/dist/permitted/endTrace.d.mts.map +1 -1
  40. package/dist/permitted/endTrace.mjs +6 -2
  41. package/dist/permitted/endTrace.mjs.map +1 -1
  42. package/dist/permitted/getAllSnaps.cjs +4 -1
  43. package/dist/permitted/getAllSnaps.cjs.map +1 -1
  44. package/dist/permitted/getAllSnaps.d.cts +25 -3
  45. package/dist/permitted/getAllSnaps.d.cts.map +1 -1
  46. package/dist/permitted/getAllSnaps.d.mts +25 -3
  47. package/dist/permitted/getAllSnaps.d.mts.map +1 -1
  48. package/dist/permitted/getAllSnaps.mjs +4 -1
  49. package/dist/permitted/getAllSnaps.mjs.map +1 -1
  50. package/dist/permitted/getBackgroundEvents.cjs +24 -0
  51. package/dist/permitted/getBackgroundEvents.cjs.map +1 -1
  52. package/dist/permitted/getBackgroundEvents.d.cts +48 -3
  53. package/dist/permitted/getBackgroundEvents.d.cts.map +1 -1
  54. package/dist/permitted/getBackgroundEvents.d.mts +48 -3
  55. package/dist/permitted/getBackgroundEvents.d.mts.map +1 -1
  56. package/dist/permitted/getBackgroundEvents.mjs +24 -0
  57. package/dist/permitted/getBackgroundEvents.mjs.map +1 -1
  58. package/dist/permitted/getClientStatus.cjs +27 -2
  59. package/dist/permitted/getClientStatus.cjs.map +1 -1
  60. package/dist/permitted/getClientStatus.d.cts +50 -4
  61. package/dist/permitted/getClientStatus.d.cts.map +1 -1
  62. package/dist/permitted/getClientStatus.d.mts +50 -4
  63. package/dist/permitted/getClientStatus.d.mts.map +1 -1
  64. package/dist/permitted/getClientStatus.mjs +27 -2
  65. package/dist/permitted/getClientStatus.mjs.map +1 -1
  66. package/dist/permitted/getFile.cjs +28 -1
  67. package/dist/permitted/getFile.cjs.map +1 -1
  68. package/dist/permitted/getFile.d.cts +49 -3
  69. package/dist/permitted/getFile.d.cts.map +1 -1
  70. package/dist/permitted/getFile.d.mts +49 -3
  71. package/dist/permitted/getFile.d.mts.map +1 -1
  72. package/dist/permitted/getFile.mjs +28 -1
  73. package/dist/permitted/getFile.mjs.map +1 -1
  74. package/dist/permitted/getInterfaceContext.cjs +49 -3
  75. package/dist/permitted/getInterfaceContext.cjs.map +1 -1
  76. package/dist/permitted/getInterfaceContext.d.cts +65 -3
  77. package/dist/permitted/getInterfaceContext.d.cts.map +1 -1
  78. package/dist/permitted/getInterfaceContext.d.mts +65 -3
  79. package/dist/permitted/getInterfaceContext.d.mts.map +1 -1
  80. package/dist/permitted/getInterfaceContext.mjs +50 -4
  81. package/dist/permitted/getInterfaceContext.mjs.map +1 -1
  82. package/dist/permitted/getInterfaceState.cjs +27 -3
  83. package/dist/permitted/getInterfaceState.cjs.map +1 -1
  84. package/dist/permitted/getInterfaceState.d.cts +43 -3
  85. package/dist/permitted/getInterfaceState.d.cts.map +1 -1
  86. package/dist/permitted/getInterfaceState.d.mts +43 -3
  87. package/dist/permitted/getInterfaceState.d.mts.map +1 -1
  88. package/dist/permitted/getInterfaceState.mjs +28 -4
  89. package/dist/permitted/getInterfaceState.mjs.map +1 -1
  90. package/dist/permitted/getSnaps.cjs +21 -2
  91. package/dist/permitted/getSnaps.cjs.map +1 -1
  92. package/dist/permitted/getSnaps.d.cts +42 -4
  93. package/dist/permitted/getSnaps.d.cts.map +1 -1
  94. package/dist/permitted/getSnaps.d.mts +42 -4
  95. package/dist/permitted/getSnaps.d.mts.map +1 -1
  96. package/dist/permitted/getSnaps.mjs +21 -2
  97. package/dist/permitted/getSnaps.mjs.map +1 -1
  98. package/dist/permitted/getState.cjs +24 -2
  99. package/dist/permitted/getState.cjs.map +1 -1
  100. package/dist/permitted/getState.d.cts +46 -4
  101. package/dist/permitted/getState.d.cts.map +1 -1
  102. package/dist/permitted/getState.d.mts +46 -4
  103. package/dist/permitted/getState.d.mts.map +1 -1
  104. package/dist/permitted/getState.mjs +24 -2
  105. package/dist/permitted/getState.mjs.map +1 -1
  106. package/dist/permitted/getWebSockets.cjs +29 -2
  107. package/dist/permitted/getWebSockets.cjs.map +1 -1
  108. package/dist/permitted/getWebSockets.d.cts +50 -4
  109. package/dist/permitted/getWebSockets.d.cts.map +1 -1
  110. package/dist/permitted/getWebSockets.d.mts +50 -4
  111. package/dist/permitted/getWebSockets.d.mts.map +1 -1
  112. package/dist/permitted/getWebSockets.mjs +29 -2
  113. package/dist/permitted/getWebSockets.mjs.map +1 -1
  114. package/dist/permitted/handlers.cjs +0 -4
  115. package/dist/permitted/handlers.cjs.map +1 -1
  116. package/dist/permitted/handlers.d.cts +274 -56
  117. package/dist/permitted/handlers.d.cts.map +1 -1
  118. package/dist/permitted/handlers.d.mts +274 -56
  119. package/dist/permitted/handlers.d.mts.map +1 -1
  120. package/dist/permitted/handlers.mjs +0 -4
  121. package/dist/permitted/handlers.mjs.map +1 -1
  122. package/dist/permitted/index.cjs.map +1 -1
  123. package/dist/permitted/index.d.cts +1 -3
  124. package/dist/permitted/index.d.cts.map +1 -1
  125. package/dist/permitted/index.d.mts +1 -3
  126. package/dist/permitted/index.d.mts.map +1 -1
  127. package/dist/permitted/index.mjs.map +1 -1
  128. package/dist/permitted/invokeKeyring.cjs +8 -2
  129. package/dist/permitted/invokeKeyring.cjs.map +1 -1
  130. package/dist/permitted/invokeKeyring.d.cts +34 -4
  131. package/dist/permitted/invokeKeyring.d.cts.map +1 -1
  132. package/dist/permitted/invokeKeyring.d.mts +34 -4
  133. package/dist/permitted/invokeKeyring.d.mts.map +1 -1
  134. package/dist/permitted/invokeKeyring.mjs +8 -2
  135. package/dist/permitted/invokeKeyring.mjs.map +1 -1
  136. package/dist/permitted/invokeSnapSugar.cjs +25 -2
  137. package/dist/permitted/invokeSnapSugar.cjs.map +1 -1
  138. package/dist/permitted/invokeSnapSugar.d.cts +30 -3
  139. package/dist/permitted/invokeSnapSugar.d.cts.map +1 -1
  140. package/dist/permitted/invokeSnapSugar.d.mts +30 -3
  141. package/dist/permitted/invokeSnapSugar.d.mts.map +1 -1
  142. package/dist/permitted/invokeSnapSugar.mjs +25 -2
  143. package/dist/permitted/invokeSnapSugar.mjs.map +1 -1
  144. package/dist/permitted/listEntropySources.cjs +40 -1
  145. package/dist/permitted/listEntropySources.cjs.map +1 -1
  146. package/dist/permitted/listEntropySources.d.cts +64 -3
  147. package/dist/permitted/listEntropySources.d.cts.map +1 -1
  148. package/dist/permitted/listEntropySources.d.mts +64 -3
  149. package/dist/permitted/listEntropySources.d.mts.map +1 -1
  150. package/dist/permitted/listEntropySources.mjs +40 -1
  151. package/dist/permitted/listEntropySources.mjs.map +1 -1
  152. package/dist/permitted/openWebSocket.cjs +46 -2
  153. package/dist/permitted/openWebSocket.cjs.map +1 -1
  154. package/dist/permitted/openWebSocket.d.cts +66 -4
  155. package/dist/permitted/openWebSocket.d.cts.map +1 -1
  156. package/dist/permitted/openWebSocket.d.mts +66 -4
  157. package/dist/permitted/openWebSocket.d.mts.map +1 -1
  158. package/dist/permitted/openWebSocket.mjs +46 -2
  159. package/dist/permitted/openWebSocket.mjs.map +1 -1
  160. package/dist/permitted/requestSnaps.cjs +25 -2
  161. package/dist/permitted/requestSnaps.cjs.map +1 -1
  162. package/dist/permitted/requestSnaps.d.cts +51 -3
  163. package/dist/permitted/requestSnaps.d.cts.map +1 -1
  164. package/dist/permitted/requestSnaps.d.mts +51 -3
  165. package/dist/permitted/requestSnaps.d.mts.map +1 -1
  166. package/dist/permitted/requestSnaps.mjs +25 -2
  167. package/dist/permitted/requestSnaps.mjs.map +1 -1
  168. package/dist/permitted/resolveInterface.cjs +38 -2
  169. package/dist/permitted/resolveInterface.cjs.map +1 -1
  170. package/dist/permitted/resolveInterface.d.cts +55 -4
  171. package/dist/permitted/resolveInterface.d.cts.map +1 -1
  172. package/dist/permitted/resolveInterface.d.mts +55 -4
  173. package/dist/permitted/resolveInterface.d.mts.map +1 -1
  174. package/dist/permitted/resolveInterface.mjs +39 -3
  175. package/dist/permitted/resolveInterface.mjs.map +1 -1
  176. package/dist/permitted/scheduleBackgroundEvent.cjs +26 -0
  177. package/dist/permitted/scheduleBackgroundEvent.cjs.map +1 -1
  178. package/dist/permitted/scheduleBackgroundEvent.d.cts +49 -3
  179. package/dist/permitted/scheduleBackgroundEvent.d.cts.map +1 -1
  180. package/dist/permitted/scheduleBackgroundEvent.d.mts +49 -3
  181. package/dist/permitted/scheduleBackgroundEvent.d.mts.map +1 -1
  182. package/dist/permitted/scheduleBackgroundEvent.mjs +26 -0
  183. package/dist/permitted/scheduleBackgroundEvent.mjs.map +1 -1
  184. package/dist/permitted/sendWebSocketMessage.cjs +24 -2
  185. package/dist/permitted/sendWebSocketMessage.cjs.map +1 -1
  186. package/dist/permitted/sendWebSocketMessage.d.cts +44 -4
  187. package/dist/permitted/sendWebSocketMessage.d.cts.map +1 -1
  188. package/dist/permitted/sendWebSocketMessage.d.mts +44 -4
  189. package/dist/permitted/sendWebSocketMessage.d.mts.map +1 -1
  190. package/dist/permitted/sendWebSocketMessage.mjs +24 -2
  191. package/dist/permitted/sendWebSocketMessage.mjs.map +1 -1
  192. package/dist/permitted/setState.cjs +48 -2
  193. package/dist/permitted/setState.cjs.map +1 -1
  194. package/dist/permitted/setState.d.cts +72 -4
  195. package/dist/permitted/setState.d.cts.map +1 -1
  196. package/dist/permitted/setState.d.mts +72 -4
  197. package/dist/permitted/setState.d.mts.map +1 -1
  198. package/dist/permitted/setState.mjs +48 -2
  199. package/dist/permitted/setState.mjs.map +1 -1
  200. package/dist/permitted/startTrace.cjs +4 -1
  201. package/dist/permitted/startTrace.cjs.map +1 -1
  202. package/dist/permitted/startTrace.d.cts +26 -3
  203. package/dist/permitted/startTrace.d.cts.map +1 -1
  204. package/dist/permitted/startTrace.d.mts +26 -3
  205. package/dist/permitted/startTrace.d.mts.map +1 -1
  206. package/dist/permitted/startTrace.mjs +4 -1
  207. package/dist/permitted/startTrace.mjs.map +1 -1
  208. package/dist/permitted/trackError.cjs +4 -1
  209. package/dist/permitted/trackError.cjs.map +1 -1
  210. package/dist/permitted/trackError.d.cts +26 -3
  211. package/dist/permitted/trackError.d.cts.map +1 -1
  212. package/dist/permitted/trackError.d.mts +26 -3
  213. package/dist/permitted/trackError.d.mts.map +1 -1
  214. package/dist/permitted/trackError.mjs +4 -1
  215. package/dist/permitted/trackError.mjs.map +1 -1
  216. package/dist/permitted/trackEvent.cjs +4 -1
  217. package/dist/permitted/trackEvent.cjs.map +1 -1
  218. package/dist/permitted/trackEvent.d.cts +25 -4
  219. package/dist/permitted/trackEvent.d.cts.map +1 -1
  220. package/dist/permitted/trackEvent.d.mts +25 -4
  221. package/dist/permitted/trackEvent.d.mts.map +1 -1
  222. package/dist/permitted/trackEvent.mjs +4 -1
  223. package/dist/permitted/trackEvent.mjs.map +1 -1
  224. package/dist/permitted/updateInterface.cjs +47 -2
  225. package/dist/permitted/updateInterface.cjs.map +1 -1
  226. package/dist/permitted/updateInterface.d.cts +64 -3
  227. package/dist/permitted/updateInterface.d.cts.map +1 -1
  228. package/dist/permitted/updateInterface.d.mts +64 -3
  229. package/dist/permitted/updateInterface.d.mts.map +1 -1
  230. package/dist/permitted/updateInterface.mjs +48 -3
  231. package/dist/permitted/updateInterface.mjs.map +1 -1
  232. package/dist/restricted/caveats/snapIds.cjs.map +1 -1
  233. package/dist/restricted/caveats/snapIds.d.cts.map +1 -1
  234. package/dist/restricted/caveats/snapIds.d.mts.map +1 -1
  235. package/dist/restricted/caveats/snapIds.mjs.map +1 -1
  236. package/dist/restricted/dialog.cjs +49 -1
  237. package/dist/restricted/dialog.cjs.map +1 -1
  238. package/dist/restricted/dialog.d.cts +52 -2
  239. package/dist/restricted/dialog.d.cts.map +1 -1
  240. package/dist/restricted/dialog.d.mts +52 -2
  241. package/dist/restricted/dialog.d.mts.map +1 -1
  242. package/dist/restricted/dialog.mjs +49 -1
  243. package/dist/restricted/dialog.mjs.map +1 -1
  244. package/dist/restricted/getBip32Entropy.cjs +55 -0
  245. package/dist/restricted/getBip32Entropy.cjs.map +1 -1
  246. package/dist/restricted/getBip32Entropy.d.cts +55 -0
  247. package/dist/restricted/getBip32Entropy.d.cts.map +1 -1
  248. package/dist/restricted/getBip32Entropy.d.mts +55 -0
  249. package/dist/restricted/getBip32Entropy.d.mts.map +1 -1
  250. package/dist/restricted/getBip32Entropy.mjs +55 -0
  251. package/dist/restricted/getBip32Entropy.mjs.map +1 -1
  252. package/dist/restricted/getBip32PublicKey.cjs +36 -0
  253. package/dist/restricted/getBip32PublicKey.cjs.map +1 -1
  254. package/dist/restricted/getBip32PublicKey.d.cts +36 -0
  255. package/dist/restricted/getBip32PublicKey.d.cts.map +1 -1
  256. package/dist/restricted/getBip32PublicKey.d.mts +36 -0
  257. package/dist/restricted/getBip32PublicKey.d.mts.map +1 -1
  258. package/dist/restricted/getBip32PublicKey.mjs +36 -0
  259. package/dist/restricted/getBip32PublicKey.mjs.map +1 -1
  260. package/dist/restricted/getBip44Entropy.cjs +53 -0
  261. package/dist/restricted/getBip44Entropy.cjs.map +1 -1
  262. package/dist/restricted/getBip44Entropy.d.cts +53 -0
  263. package/dist/restricted/getBip44Entropy.d.cts.map +1 -1
  264. package/dist/restricted/getBip44Entropy.d.mts +53 -0
  265. package/dist/restricted/getBip44Entropy.d.mts.map +1 -1
  266. package/dist/restricted/getBip44Entropy.mjs +53 -0
  267. package/dist/restricted/getBip44Entropy.mjs.map +1 -1
  268. package/dist/restricted/getEntropy.cjs +35 -0
  269. package/dist/restricted/getEntropy.cjs.map +1 -1
  270. package/dist/restricted/getEntropy.d.cts +35 -0
  271. package/dist/restricted/getEntropy.d.cts.map +1 -1
  272. package/dist/restricted/getEntropy.d.mts +35 -0
  273. package/dist/restricted/getEntropy.d.mts.map +1 -1
  274. package/dist/restricted/getEntropy.mjs +35 -0
  275. package/dist/restricted/getEntropy.mjs.map +1 -1
  276. package/dist/restricted/getLocale.cjs +11 -0
  277. package/dist/restricted/getLocale.cjs.map +1 -1
  278. package/dist/restricted/getLocale.d.cts +11 -0
  279. package/dist/restricted/getLocale.d.cts.map +1 -1
  280. package/dist/restricted/getLocale.d.mts +11 -0
  281. package/dist/restricted/getLocale.d.mts.map +1 -1
  282. package/dist/restricted/getLocale.mjs +11 -0
  283. package/dist/restricted/getLocale.mjs.map +1 -1
  284. package/dist/restricted/getPreferences.cjs +24 -0
  285. package/dist/restricted/getPreferences.cjs.map +1 -1
  286. package/dist/restricted/getPreferences.d.cts +24 -0
  287. package/dist/restricted/getPreferences.d.cts.map +1 -1
  288. package/dist/restricted/getPreferences.d.mts +24 -0
  289. package/dist/restricted/getPreferences.d.mts.map +1 -1
  290. package/dist/restricted/getPreferences.mjs +24 -0
  291. package/dist/restricted/getPreferences.mjs.map +1 -1
  292. package/dist/restricted/index.d.cts +2 -2
  293. package/dist/restricted/index.d.mts +2 -2
  294. package/dist/restricted/invokeSnap.cjs +24 -2
  295. package/dist/restricted/invokeSnap.cjs.map +1 -1
  296. package/dist/restricted/invokeSnap.d.cts +29 -11
  297. package/dist/restricted/invokeSnap.d.cts.map +1 -1
  298. package/dist/restricted/invokeSnap.d.mts +29 -11
  299. package/dist/restricted/invokeSnap.d.mts.map +1 -1
  300. package/dist/restricted/invokeSnap.mjs +24 -2
  301. package/dist/restricted/invokeSnap.mjs.map +1 -1
  302. package/dist/restricted/manageAccounts.cjs +10 -0
  303. package/dist/restricted/manageAccounts.cjs.map +1 -1
  304. package/dist/restricted/manageAccounts.d.cts +10 -0
  305. package/dist/restricted/manageAccounts.d.cts.map +1 -1
  306. package/dist/restricted/manageAccounts.d.mts +10 -0
  307. package/dist/restricted/manageAccounts.d.mts.map +1 -1
  308. package/dist/restricted/manageAccounts.mjs +10 -0
  309. package/dist/restricted/manageAccounts.mjs.map +1 -1
  310. package/dist/restricted/manageState.cjs +42 -0
  311. package/dist/restricted/manageState.cjs.map +1 -1
  312. package/dist/restricted/manageState.d.cts +42 -0
  313. package/dist/restricted/manageState.d.cts.map +1 -1
  314. package/dist/restricted/manageState.d.mts +42 -0
  315. package/dist/restricted/manageState.d.mts.map +1 -1
  316. package/dist/restricted/manageState.mjs +42 -0
  317. package/dist/restricted/manageState.mjs.map +1 -1
  318. package/dist/restricted/notify.cjs +74 -0
  319. package/dist/restricted/notify.cjs.map +1 -1
  320. package/dist/restricted/notify.d.cts +75 -1
  321. package/dist/restricted/notify.d.cts.map +1 -1
  322. package/dist/restricted/notify.d.mts +75 -1
  323. package/dist/restricted/notify.d.mts.map +1 -1
  324. package/dist/restricted/notify.mjs +74 -0
  325. package/dist/restricted/notify.mjs.map +1 -1
  326. package/dist/utils.cjs +14 -1
  327. package/dist/utils.cjs.map +1 -1
  328. package/dist/utils.d.cts +6 -0
  329. package/dist/utils.d.cts.map +1 -1
  330. package/dist/utils.d.mts +6 -0
  331. package/dist/utils.d.mts.map +1 -1
  332. package/dist/utils.mjs +13 -0
  333. package/dist/utils.mjs.map +1 -1
  334. package/package.json +12 -8
  335. package/dist/permitted/experimentalProviderRequest.cjs +0 -152
  336. package/dist/permitted/experimentalProviderRequest.cjs.map +0 -1
  337. package/dist/permitted/experimentalProviderRequest.d.cts +0 -39
  338. package/dist/permitted/experimentalProviderRequest.d.cts.map +0 -1
  339. package/dist/permitted/experimentalProviderRequest.d.mts +0 -39
  340. package/dist/permitted/experimentalProviderRequest.d.mts.map +0 -1
  341. package/dist/permitted/experimentalProviderRequest.mjs +0 -149
  342. package/dist/permitted/experimentalProviderRequest.mjs.map +0 -1
  343. package/dist/permitted/getCurrencyRate.cjs +0 -63
  344. package/dist/permitted/getCurrencyRate.cjs.map +0 -1
  345. package/dist/permitted/getCurrencyRate.d.cts +0 -20
  346. package/dist/permitted/getCurrencyRate.d.cts.map +0 -1
  347. package/dist/permitted/getCurrencyRate.d.mts +0 -20
  348. package/dist/permitted/getCurrencyRate.d.mts.map +0 -1
  349. package/dist/permitted/getCurrencyRate.mjs +0 -60
  350. package/dist/permitted/getCurrencyRate.mjs.map +0 -1
@@ -12,6 +12,32 @@ const hookNames = {
12
12
  scheduleBackgroundEvent: true,
13
13
  hasPermission: true,
14
14
  };
15
+ /**
16
+ * Schedule a background event for a Snap. The background event will trigger a
17
+ * JSON-RPC request to the Snap at the scheduled time, handled by the
18
+ * `onCronjob` entry point in the Snap.
19
+ *
20
+ * The schedule can be defined using either an ISO 8601 date or duration string.
21
+ * For example:
22
+ *
23
+ * - Using a date: `2026-12-31T23:59:59Z`
24
+ * - Using a duration: `P1DT2H` (which represents a duration of 1 day and 2
25
+ * hours)
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * const id = await wallet.request({
30
+ * method: 'snap_scheduleBackgroundEvent',
31
+ * params: {
32
+ * date: '2026-12-31T23:59:59Z',
33
+ * request: {
34
+ * method: 'mySnapMethod',
35
+ * params: { foo: 'bar' },
36
+ * },
37
+ * },
38
+ * });
39
+ * ```
40
+ */
15
41
  exports.scheduleBackgroundEventHandler = {
16
42
  methodNames: [methodName],
17
43
  implementation: getScheduleBackgroundEventImplementation,
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.cjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":";;;AAEA,qDAAiE;AACjE,mDAK6B;AAE7B,uDAI+B;AAC/B,uDAAoE;AACpE,2CAA2E;AAE3E,wDAA+C;AAG/C,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAElD,MAAM,SAAS,GAA0D;IACvE,uBAAuB,EAAE,IAAI;IAC7B,aAAa,EAAE,IAAI;CACpB,CAAC;AAeW,QAAA,8BAA8B,GAIvC;IACF,WAAW,EAAE,CAAC,UAAU,CAAC;IACzB,cAAc,EAAE,wCAAwC;IACxD,SAAS;CACV,CAAC;AAEF,MAAM,+CAA+C,GAAG,IAAA,oBAAM,EAAC;IAC7D,IAAI,EAAE,+BAAiB;IACvB,OAAO,EAAE,qCAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,mDAAmD,GAAG,IAAA,oBAAM,EAAC;IACjE,QAAQ,EAAE,mCAAqB;IAC/B,OAAO,EAAE,qCAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,uCAAuC,GAAG,IAAA,0BAAc,EAAC,CAAC,GAAG,EAAE,EAAE;IACrE,IAAI,IAAA,mBAAW,EAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,+CAA+C,CAAC;IACzD,CAAC;IACD,OAAO,mDAAmD,CAAC;AAC7D,CAAC,CAAC,CAAC;AAOH;;;;;GAKG;AACH,SAAS,WAAW,CAAC,MAAyC;IAC5D,IAAI,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAChC,iDAAiD;QACjD,OAAO,MAAM,CAAC,IAAc,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,wCAAwC,CACrD,GAAsD,EACtD,GAA0D,EAC1D,KAAc,EACd,GAA6B,EAC7B,EACE,uBAAuB,EACvB,aAAa,GACsB;IAErC,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;QACnD,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;QACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QAE9C,MAAM,EAAE,GAAG,uBAAuB,CAAC;YACjC,QAAQ;YACR,OAAO;SACR,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAClB,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,CACzB,MAAe;IAEf,IAAI,CAAC;QACH,OAAO,IAAA,oBAAM,EAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;IACjE,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 {\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\nexport const scheduleBackgroundEventHandler: PermittedHandlerExport<\n ScheduleBackgroundEventMethodHooks,\n ScheduleBackgroundEventParameters,\n ScheduleBackgroundEventResult\n> = {\n methodNames: [methodName],\n implementation: getScheduleBackgroundEventImplementation,\n hookNames,\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.cjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":";;;AAEA,qDAAiE;AACjE,mDAK6B;AAE7B,uDAI+B;AAC/B,uDAAoE;AACpE,2CAA2E;AAE3E,wDAA+C;AAG/C,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAElD,MAAM,SAAS,GAA0D;IACvE,uBAAuB,EAAE,IAAI;IAC7B,aAAa,EAAE,IAAI;CACpB,CAAC;AAeF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACU,QAAA,8BAA8B,GAAG;IAC5C,WAAW,EAAE,CAAC,UAAU,CAAU;IAClC,cAAc,EAAE,wCAAwC;IACxD,SAAS;CAKV,CAAC;AAEF,MAAM,+CAA+C,GAAG,IAAA,oBAAM,EAAC;IAC7D,IAAI,EAAE,+BAAiB;IACvB,OAAO,EAAE,qCAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,mDAAmD,GAAG,IAAA,oBAAM,EAAC;IACjE,QAAQ,EAAE,mCAAqB;IAC/B,OAAO,EAAE,qCAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,uCAAuC,GAAG,IAAA,0BAAc,EAAC,CAAC,GAAG,EAAE,EAAE;IACrE,IAAI,IAAA,mBAAW,EAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,+CAA+C,CAAC;IACzD,CAAC;IACD,OAAO,mDAAmD,CAAC;AAC7D,CAAC,CAAC,CAAC;AAOH;;;;;GAKG;AACH,SAAS,WAAW,CAAC,MAAyC;IAC5D,IAAI,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAChC,iDAAiD;QACjD,OAAO,MAAM,CAAC,IAAc,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,wCAAwC,CACrD,GAAsD,EACtD,GAA0D,EAC1D,KAAc,EACd,GAA6B,EAC7B,EACE,uBAAuB,EACvB,aAAa,GACsB;IAErC,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;QACnD,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;QACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QAE9C,MAAM,EAAE,GAAG,uBAAuB,CAAC;YACjC,QAAQ;YACR,OAAO;SACR,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAClB,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,CACzB,MAAe;IAEf,IAAI,CAAC;QACH,OAAO,IAAA,oBAAM,EAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;IACjE,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 {\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,6 +1,8 @@
1
- import type { PermittedHandlerExport } from "@metamask/permission-controller";
2
- import { type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
1
+ import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
+ import { type JsonRpcRequest, type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
3
3
  import type { CronjobRpcRequest, InferMatching } from "@metamask/snaps-utils";
4
+ import { type PendingJsonRpcResponse } from "@metamask/utils";
5
+ import type { MethodHooksObject } from "../utils.cjs";
4
6
  type ScheduleBackgroundEventHookParams = {
5
7
  schedule: string;
6
8
  request: CronjobRpcRequest;
@@ -9,7 +11,37 @@ export type ScheduleBackgroundEventMethodHooks = {
9
11
  scheduleBackgroundEvent: (snapEvent: ScheduleBackgroundEventHookParams) => string;
10
12
  hasPermission: (permissionName: string) => boolean;
11
13
  };
12
- export declare const scheduleBackgroundEventHandler: PermittedHandlerExport<ScheduleBackgroundEventMethodHooks, ScheduleBackgroundEventParameters, ScheduleBackgroundEventResult>;
14
+ /**
15
+ * Schedule a background event for a Snap. The background event will trigger a
16
+ * JSON-RPC request to the Snap at the scheduled time, handled by the
17
+ * `onCronjob` entry point in the Snap.
18
+ *
19
+ * The schedule can be defined using either an ISO 8601 date or duration string.
20
+ * For example:
21
+ *
22
+ * - Using a date: `2026-12-31T23:59:59Z`
23
+ * - Using a duration: `P1DT2H` (which represents a duration of 1 day and 2
24
+ * hours)
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const id = await wallet.request({
29
+ * method: 'snap_scheduleBackgroundEvent',
30
+ * params: {
31
+ * date: '2026-12-31T23:59:59Z',
32
+ * request: {
33
+ * method: 'mySnapMethod',
34
+ * params: { foo: 'bar' },
35
+ * },
36
+ * },
37
+ * });
38
+ * ```
39
+ */
40
+ export declare const scheduleBackgroundEventHandler: {
41
+ methodNames: ["snap_scheduleBackgroundEvent"];
42
+ implementation: typeof getScheduleBackgroundEventImplementation;
43
+ hookNames: MethodHooksObject<ScheduleBackgroundEventMethodHooks>;
44
+ };
13
45
  declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superstruct").Struct<{
14
46
  date: string;
15
47
  request: {
@@ -28,5 +60,19 @@ declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superst
28
60
  duration: string;
29
61
  }, null>;
30
62
  export type ScheduleBackgroundEventParameters = InferMatching<typeof ScheduleBackgroundEventParametersStruct, ScheduleBackgroundEventParams>;
63
+ /**
64
+ * The `snap_scheduleBackgroundEvent` method implementation.
65
+ *
66
+ * @param req - The JSON-RPC request object.
67
+ * @param res - The JSON-RPC response object.
68
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this
69
+ * function.
70
+ * @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.
74
+ * @returns An id representing the background event.
75
+ */
76
+ declare function getScheduleBackgroundEventImplementation(req: JsonRpcRequest<ScheduleBackgroundEventParameters>, res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, { scheduleBackgroundEvent, hasPermission, }: ScheduleBackgroundEventMethodHooks): Promise<void>;
31
77
  export {};
32
78
  //# sourceMappingURL=scheduleBackgroundEvent.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.d.cts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EACnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,8BAA8B;AAmB9E,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,eAAO,MAAM,8BAA8B,EAAE,sBAAsB,CACjE,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,CAK9B,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC"}
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,6 +1,8 @@
1
- import type { PermittedHandlerExport } from "@metamask/permission-controller";
2
- import { type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
1
+ import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
+ import { type JsonRpcRequest, type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
3
3
  import type { CronjobRpcRequest, InferMatching } from "@metamask/snaps-utils";
4
+ import { type PendingJsonRpcResponse } from "@metamask/utils";
5
+ import type { MethodHooksObject } from "../utils.mjs";
4
6
  type ScheduleBackgroundEventHookParams = {
5
7
  schedule: string;
6
8
  request: CronjobRpcRequest;
@@ -9,7 +11,37 @@ export type ScheduleBackgroundEventMethodHooks = {
9
11
  scheduleBackgroundEvent: (snapEvent: ScheduleBackgroundEventHookParams) => string;
10
12
  hasPermission: (permissionName: string) => boolean;
11
13
  };
12
- export declare const scheduleBackgroundEventHandler: PermittedHandlerExport<ScheduleBackgroundEventMethodHooks, ScheduleBackgroundEventParameters, ScheduleBackgroundEventResult>;
14
+ /**
15
+ * Schedule a background event for a Snap. The background event will trigger a
16
+ * JSON-RPC request to the Snap at the scheduled time, handled by the
17
+ * `onCronjob` entry point in the Snap.
18
+ *
19
+ * The schedule can be defined using either an ISO 8601 date or duration string.
20
+ * For example:
21
+ *
22
+ * - Using a date: `2026-12-31T23:59:59Z`
23
+ * - Using a duration: `P1DT2H` (which represents a duration of 1 day and 2
24
+ * hours)
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const id = await wallet.request({
29
+ * method: 'snap_scheduleBackgroundEvent',
30
+ * params: {
31
+ * date: '2026-12-31T23:59:59Z',
32
+ * request: {
33
+ * method: 'mySnapMethod',
34
+ * params: { foo: 'bar' },
35
+ * },
36
+ * },
37
+ * });
38
+ * ```
39
+ */
40
+ export declare const scheduleBackgroundEventHandler: {
41
+ methodNames: ["snap_scheduleBackgroundEvent"];
42
+ implementation: typeof getScheduleBackgroundEventImplementation;
43
+ hookNames: MethodHooksObject<ScheduleBackgroundEventMethodHooks>;
44
+ };
13
45
  declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superstruct").Struct<{
14
46
  date: string;
15
47
  request: {
@@ -28,5 +60,19 @@ declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superst
28
60
  duration: string;
29
61
  }, null>;
30
62
  export type ScheduleBackgroundEventParameters = InferMatching<typeof ScheduleBackgroundEventParametersStruct, ScheduleBackgroundEventParams>;
63
+ /**
64
+ * The `snap_scheduleBackgroundEvent` method implementation.
65
+ *
66
+ * @param req - The JSON-RPC request object.
67
+ * @param res - The JSON-RPC response object.
68
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this
69
+ * function.
70
+ * @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.
74
+ * @returns An id representing the background event.
75
+ */
76
+ declare function getScheduleBackgroundEventImplementation(req: JsonRpcRequest<ScheduleBackgroundEventParameters>, res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, { scheduleBackgroundEvent, hasPermission, }: ScheduleBackgroundEventMethodHooks): Promise<void>;
31
77
  export {};
32
78
  //# sourceMappingURL=scheduleBackgroundEvent.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.d.mts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EACnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,8BAA8B;AAmB9E,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,eAAO,MAAM,8BAA8B,EAAE,sBAAsB,CACjE,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,CAK9B,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC"}
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"}
@@ -9,6 +9,32 @@ const hookNames = {
9
9
  scheduleBackgroundEvent: true,
10
10
  hasPermission: true,
11
11
  };
12
+ /**
13
+ * Schedule a background event for a Snap. The background event will trigger a
14
+ * JSON-RPC request to the Snap at the scheduled time, handled by the
15
+ * `onCronjob` entry point in the Snap.
16
+ *
17
+ * The schedule can be defined using either an ISO 8601 date or duration string.
18
+ * For example:
19
+ *
20
+ * - Using a date: `2026-12-31T23:59:59Z`
21
+ * - Using a duration: `P1DT2H` (which represents a duration of 1 day and 2
22
+ * hours)
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * const id = await wallet.request({
27
+ * method: 'snap_scheduleBackgroundEvent',
28
+ * params: {
29
+ * date: '2026-12-31T23:59:59Z',
30
+ * request: {
31
+ * method: 'mySnapMethod',
32
+ * params: { foo: 'bar' },
33
+ * },
34
+ * },
35
+ * });
36
+ * ```
37
+ */
12
38
  export const scheduleBackgroundEventHandler = {
13
39
  methodNames: [methodName],
14
40
  implementation: getScheduleBackgroundEventImplementation,
@@ -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\nexport const scheduleBackgroundEventHandler: PermittedHandlerExport<\n ScheduleBackgroundEventMethodHooks,\n ScheduleBackgroundEventParameters,\n ScheduleBackgroundEventResult\n> = {\n methodNames: [methodName],\n implementation: getScheduleBackgroundEventImplementation,\n hookNames,\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 { 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"]}
@@ -5,6 +5,7 @@ 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';
8
9
  const hookNames = {
9
10
  hasPermission: true,
10
11
  sendWebSocketMessage: true,
@@ -14,10 +15,31 @@ const SendWebSocketMessageParametersStruct = (0, superstruct_1.object)({
14
15
  message: (0, snaps_sdk_1.union)([(0, superstruct_1.string)(), (0, superstruct_1.array)((0, superstruct_1.number)())]),
15
16
  });
16
17
  /**
17
- * Handler for the `snap_sendWebSocketMessage` method.
18
+ * Send a message to an open WebSocket connection. The message will be sent to
19
+ * the WebSocket connection with the specified ID, which must have been
20
+ * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)
21
+ * method.
22
+ *
23
+ * @example
24
+ * ```json name="Manifest"
25
+ * {
26
+ * "initialPermissions": {
27
+ * "endowment:network-access": {}
28
+ * }
29
+ * }
30
+ * ```
31
+ * ```ts name="Usage"
32
+ * await wallet.request({
33
+ * method: 'snap_sendWebSocketMessage',
34
+ * params: {
35
+ * id: 'websocket-connection-id',
36
+ * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data
37
+ * },
38
+ * });
39
+ * ```
18
40
  */
19
41
  exports.sendWebSocketMessageHandler = {
20
- methodNames: ['snap_sendWebSocketMessage'],
42
+ methodNames: [methodName],
21
43
  implementation: sendWebSocketMessageImplementation,
22
44
  hookNames,
23
45
  };
@@ -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,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;;GAEG;AACU,QAAA,2BAA2B,GAIpC;IACF,WAAW,EAAE,CAAC,2BAA2B,CAAC;IAC1C,cAAc,EAAE,kCAAkC;IAClD,SAAS;CACV,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 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 * Handler for the `snap_sendWebSocketMessage` method.\n */\nexport const sendWebSocketMessageHandler: PermittedHandlerExport<\n SendWebSocketMessageMethodHooks,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult\n> = {\n methodNames: ['snap_sendWebSocketMessage'],\n implementation: sendWebSocketMessageImplementation,\n hookNames,\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":";;;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,6 +1,8 @@
1
- import type { PermittedHandlerExport } from "@metamask/permission-controller";
2
- import type { SendWebSocketMessageParams, SendWebSocketMessageResult } from "@metamask/snaps-sdk";
1
+ import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
+ import type { JsonRpcRequest, SendWebSocketMessageParams, SendWebSocketMessageResult } from "@metamask/snaps-sdk";
3
3
  import type { InferMatching } from "@metamask/snaps-utils";
4
+ import type { PendingJsonRpcResponse } from "@metamask/utils";
5
+ import type { MethodHooksObject } from "../utils.cjs";
4
6
  export type SendWebSocketMessageMethodHooks = {
5
7
  hasPermission: (permissionName: string) => boolean;
6
8
  sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;
@@ -14,8 +16,46 @@ declare const SendWebSocketMessageParametersStruct: import("@metamask/superstruc
14
16
  }>;
15
17
  export type SendWebSocketMessageParameters = InferMatching<typeof SendWebSocketMessageParametersStruct, SendWebSocketMessageParams>;
16
18
  /**
17
- * Handler for the `snap_sendWebSocketMessage` method.
19
+ * Send a message to an open WebSocket connection. The message will be sent to
20
+ * the WebSocket connection with the specified ID, which must have been
21
+ * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)
22
+ * method.
23
+ *
24
+ * @example
25
+ * ```json name="Manifest"
26
+ * {
27
+ * "initialPermissions": {
28
+ * "endowment:network-access": {}
29
+ * }
30
+ * }
31
+ * ```
32
+ * ```ts name="Usage"
33
+ * await wallet.request({
34
+ * method: 'snap_sendWebSocketMessage',
35
+ * params: {
36
+ * id: 'websocket-connection-id',
37
+ * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data
38
+ * },
39
+ * });
40
+ * ```
18
41
  */
19
- export declare const sendWebSocketMessageHandler: PermittedHandlerExport<SendWebSocketMessageMethodHooks, SendWebSocketMessageParams, SendWebSocketMessageResult>;
42
+ export declare const sendWebSocketMessageHandler: {
43
+ methodNames: ["snap_sendWebSocketMessage"];
44
+ implementation: typeof sendWebSocketMessageImplementation;
45
+ hookNames: MethodHooksObject<SendWebSocketMessageMethodHooks>;
46
+ };
47
+ /**
48
+ * The `snap_sendWebSocketMessage` method implementation.
49
+ *
50
+ * @param req - The JSON-RPC request object.
51
+ * @param res - The JSON-RPC response object.
52
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
53
+ * @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.
57
+ * @returns Nothing.
58
+ */
59
+ declare function sendWebSocketMessageImplementation(req: JsonRpcRequest<SendWebSocketMessageParameters>, res: PendingJsonRpcResponse<SendWebSocketMessageResult>, _next: unknown, end: JsonRpcEngineEndCallback, { hasPermission, sendWebSocketMessage }: SendWebSocketMessageMethodHooks): Promise<void>;
20
60
  export {};
21
61
  //# sourceMappingURL=sendWebSocketMessage.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sendWebSocketMessage.d.cts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAmB3D,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;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,sBAAsB,CAC9D,+BAA+B,EAC/B,0BAA0B,EAC1B,0BAA0B,CAK3B,CAAC"}
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,6 +1,8 @@
1
- import type { PermittedHandlerExport } from "@metamask/permission-controller";
2
- import type { SendWebSocketMessageParams, SendWebSocketMessageResult } from "@metamask/snaps-sdk";
1
+ import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
+ import type { JsonRpcRequest, SendWebSocketMessageParams, SendWebSocketMessageResult } from "@metamask/snaps-sdk";
3
3
  import type { InferMatching } from "@metamask/snaps-utils";
4
+ import type { PendingJsonRpcResponse } from "@metamask/utils";
5
+ import type { MethodHooksObject } from "../utils.mjs";
4
6
  export type SendWebSocketMessageMethodHooks = {
5
7
  hasPermission: (permissionName: string) => boolean;
6
8
  sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;
@@ -14,8 +16,46 @@ declare const SendWebSocketMessageParametersStruct: import("@metamask/superstruc
14
16
  }>;
15
17
  export type SendWebSocketMessageParameters = InferMatching<typeof SendWebSocketMessageParametersStruct, SendWebSocketMessageParams>;
16
18
  /**
17
- * Handler for the `snap_sendWebSocketMessage` method.
19
+ * Send a message to an open WebSocket connection. The message will be sent to
20
+ * the WebSocket connection with the specified ID, which must have been
21
+ * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)
22
+ * method.
23
+ *
24
+ * @example
25
+ * ```json name="Manifest"
26
+ * {
27
+ * "initialPermissions": {
28
+ * "endowment:network-access": {}
29
+ * }
30
+ * }
31
+ * ```
32
+ * ```ts name="Usage"
33
+ * await wallet.request({
34
+ * method: 'snap_sendWebSocketMessage',
35
+ * params: {
36
+ * id: 'websocket-connection-id',
37
+ * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data
38
+ * },
39
+ * });
40
+ * ```
18
41
  */
19
- export declare const sendWebSocketMessageHandler: PermittedHandlerExport<SendWebSocketMessageMethodHooks, SendWebSocketMessageParams, SendWebSocketMessageResult>;
42
+ export declare const sendWebSocketMessageHandler: {
43
+ methodNames: ["snap_sendWebSocketMessage"];
44
+ implementation: typeof sendWebSocketMessageImplementation;
45
+ hookNames: MethodHooksObject<SendWebSocketMessageMethodHooks>;
46
+ };
47
+ /**
48
+ * The `snap_sendWebSocketMessage` method implementation.
49
+ *
50
+ * @param req - The JSON-RPC request object.
51
+ * @param res - The JSON-RPC response object.
52
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
53
+ * @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.
57
+ * @returns Nothing.
58
+ */
59
+ declare function sendWebSocketMessageImplementation(req: JsonRpcRequest<SendWebSocketMessageParameters>, res: PendingJsonRpcResponse<SendWebSocketMessageResult>, _next: unknown, end: JsonRpcEngineEndCallback, { hasPermission, sendWebSocketMessage }: SendWebSocketMessageMethodHooks): Promise<void>;
20
60
  export {};
21
61
  //# sourceMappingURL=sendWebSocketMessage.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sendWebSocketMessage.d.mts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAmB3D,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;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,sBAAsB,CAC9D,+BAA+B,EAC/B,0BAA0B,EAC1B,0BAA0B,CAK3B,CAAC"}
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"}
@@ -2,6 +2,7 @@ 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';
5
6
  const hookNames = {
6
7
  hasPermission: true,
7
8
  sendWebSocketMessage: true,
@@ -11,10 +12,31 @@ const SendWebSocketMessageParametersStruct = object({
11
12
  message: union([string(), array(number())]),
12
13
  });
13
14
  /**
14
- * Handler for the `snap_sendWebSocketMessage` method.
15
+ * Send a message to an open WebSocket connection. The message will be sent to
16
+ * the WebSocket connection with the specified ID, which must have been
17
+ * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)
18
+ * method.
19
+ *
20
+ * @example
21
+ * ```json name="Manifest"
22
+ * {
23
+ * "initialPermissions": {
24
+ * "endowment:network-access": {}
25
+ * }
26
+ * }
27
+ * ```
28
+ * ```ts name="Usage"
29
+ * await wallet.request({
30
+ * method: 'snap_sendWebSocketMessage',
31
+ * params: {
32
+ * id: 'websocket-connection-id',
33
+ * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data
34
+ * },
35
+ * });
36
+ * ```
15
37
  */
16
38
  export const sendWebSocketMessageHandler = {
17
- methodNames: ['snap_sendWebSocketMessage'],
39
+ methodNames: [methodName],
18
40
  implementation: sendWebSocketMessageImplementation,
19
41
  hookNames,
20
42
  };
@@ -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,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;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAIpC;IACF,WAAW,EAAE,CAAC,2BAA2B,CAAC;IAC1C,cAAc,EAAE,kCAAkC;IAClD,SAAS;CACV,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 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 * Handler for the `snap_sendWebSocketMessage` method.\n */\nexport const sendWebSocketMessageHandler: PermittedHandlerExport<\n SendWebSocketMessageMethodHooks,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult\n> = {\n methodNames: ['snap_sendWebSocketMessage'],\n implementation: sendWebSocketMessageImplementation,\n hookNames,\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":"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"]}