@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
@@ -1 +1 @@
1
- {"version":3,"file":"invokeKeyring.cjs","sourceRoot":"","sources":["../../src/permitted/invokeKeyring.ts"],"names":[],"mappings":";;;AAEA,qDAAiD;AAOjD,uDAAgF;AAMhF,2CAA8C;AAE9C,2DAAuD;AAGvD,MAAM,SAAS,GAA0C;IACvD,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;IAC1B,OAAO,EAAE,IAAI;IACb,wBAAwB,EAAE,IAAI;CAC/B,CAAC;AAEF;;GAEG;AACU,QAAA,oBAAoB,GAI7B;IACF,WAAW,EAAE,CAAC,sBAAsB,CAAC;IACrC,cAAc,EAAE,2BAA2B;IAC3C,SAAS;CACV,CAAC;AAgBF;;;;;;;;;;;;;;;;GAgBG;AACH,KAAK,UAAU,2BAA2B,CACxC,GAAwC;AACxC,0EAA0E;AAC1E,8EAA8E;AAC9E,8EAA8E;AAC9E,+BAA+B;AAC/B,4EAA4E;AAC5E,GAAgD,EAChD,KAAc,EACd,GAA6B,EAC7B,EACE,oBAAoB,EACpB,aAAa,EACb,OAAO,EACP,wBAAwB,GACL;IAErB,IAAI,MAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,oCAAkB,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,yEAAyE;IACzE,MAAM,EAAE,MAAM,EAAE,GAAG,GAA0C,CAAC;IAC9D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEnC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,wCAA0B,CAAC,EAAE,CAAC;QAC1D,OAAO,GAAG,CACR,sBAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,aAAa,MAAM,0BAA0B,MAAM,6CAA6C;SAC1G,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG;QACR,4CAA4C;QAC5C,sBAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,aAAa,MAAM,2DAA2D;SACxF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAA,mBAAW,EAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,GAAG,CACR,sBAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,iCAAiC;SAC3C,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,wBAAwB,EAAE,CAAC;IAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CACR,sBAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,eAAe,MAAM,0CAA0C,OAAO,CAAC,MAAM,IAAI;SAC3F,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,oBAAoB,CAAC;YACvC,MAAM;YACN,OAAO;YACP,OAAO,EAAE,yBAAW,CAAC,gBAAgB;SACtC,CAAC,CAAS,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n InvokeKeyringParams,\n InvokeKeyringResult,\n InvokeSnapParams,\n} from '@metamask/snaps-sdk';\nimport type { Snap, SnapRpcHookArgs } from '@metamask/snaps-utils';\nimport { HandlerType, WALLET_SNAP_PERMISSION_KEY } from '@metamask/snaps-utils';\nimport type {\n PendingJsonRpcResponse,\n Json,\n JsonRpcRequest,\n} from '@metamask/utils';\nimport { hasProperty } from '@metamask/utils';\n\nimport { getValidatedParams } from './invokeSnapSugar';\nimport type { MethodHooksObject } from '../utils';\n\nconst hookNames: MethodHooksObject<InvokeKeyringHooks> = {\n hasPermission: true,\n handleSnapRpcRequest: true,\n getSnap: true,\n getAllowedKeyringMethods: true,\n};\n\n/**\n * `wallet_invokeKeyring` gets the requester's permitted and installed Snaps.\n */\nexport const invokeKeyringHandler: PermittedHandlerExport<\n InvokeKeyringHooks,\n InvokeSnapParams,\n InvokeKeyringResult\n> = {\n methodNames: ['wallet_invokeKeyring'],\n implementation: invokeKeyringImplementation,\n hookNames,\n};\n\nexport type InvokeKeyringHooks = {\n hasPermission: (permissionName: string) => boolean;\n\n handleSnapRpcRequest: ({\n snapId,\n handler,\n request,\n }: Omit<SnapRpcHookArgs, 'origin'> & { snapId: string }) => Promise<unknown>;\n\n getSnap: (snapId: string) => Snap | undefined;\n\n getAllowedKeyringMethods: () => string[];\n};\n\n/**\n * The `wallet_invokeKeyring` method implementation.\n * Invokes onKeyringRequest if the snap requested is installed and connected to the dapp.\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.handleSnapRpcRequest - Invokes a snap with a given RPC request.\n * @param hooks.hasPermission - Checks whether a given origin has a given permission.\n * @param hooks.getSnap - Gets information about a given snap.\n * @param hooks.getAllowedKeyringMethods - Get the list of allowed Keyring\n * methods for a given origin.\n * @returns Nothing.\n */\nasync function invokeKeyringImplementation(\n req: JsonRpcRequest<InvokeKeyringParams>,\n // `InvokeKeyringResult` is an alias for `Json` (which is the default type\n // argument for `PendingJsonRpcResponse`), but that may not be the case in the\n // future. We use `InvokeKeyringResult` here to make it clear that this is the\n // expected type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n res: PendingJsonRpcResponse<InvokeKeyringResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n handleSnapRpcRequest,\n hasPermission,\n getSnap,\n getAllowedKeyringMethods,\n }: InvokeKeyringHooks,\n): Promise<void> {\n let params: InvokeSnapParams;\n try {\n params = getValidatedParams(req.params);\n } catch (error) {\n return end(error);\n }\n\n // We expect the MM middleware stack to always add the origin to requests\n const { origin } = req as JsonRpcRequest & { origin: string };\n const { snapId, request } = params;\n\n if (!origin || !hasPermission(WALLET_SNAP_PERMISSION_KEY)) {\n return end(\n rpcErrors.invalidRequest({\n message: `The snap \"${snapId}\" is not connected to \"${origin}\". Please connect before invoking the snap.`,\n }),\n );\n }\n\n if (!getSnap(snapId)) {\n return end(\n // Mirror error message from SnapController.\n rpcErrors.invalidRequest({\n message: `The Snap \"${snapId}\" is not installed. Please install it before invoking it.`,\n }),\n );\n }\n\n if (!hasProperty(request, 'method') || typeof request.method !== 'string') {\n return end(\n rpcErrors.invalidRequest({\n message: 'The request must have a method.',\n }),\n );\n }\n\n const allowedMethods = getAllowedKeyringMethods();\n if (!allowedMethods.includes(request.method)) {\n return end(\n rpcErrors.invalidRequest({\n message: `The origin \"${origin}\" is not allowed to invoke the method \"${request.method}\".`,\n }),\n );\n }\n\n try {\n res.result = (await handleSnapRpcRequest({\n snapId,\n request,\n handler: HandlerType.OnKeyringRequest,\n })) as Json;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n"]}
1
+ {"version":3,"file":"invokeKeyring.cjs","sourceRoot":"","sources":["../../src/permitted/invokeKeyring.ts"],"names":[],"mappings":";;;AAEA,qDAAiD;AAOjD,uDAAgF;AAMhF,2CAA8C;AAE9C,2DAAuD;AAGvD,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAE1C,MAAM,SAAS,GAA0C;IACvD,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;IAC1B,OAAO,EAAE,IAAI;IACb,wBAAwB,EAAE,IAAI;CAC/B,CAAC;AAEF;;;;;;;GAOG;AACU,QAAA,oBAAoB,GAAG;IAClC,WAAW,EAAE,CAAC,UAAU,CAAU;IAClC,cAAc,EAAE,2BAA2B;IAC3C,SAAS;CAKV,CAAC;AAgBF;;;;;;;;;;;;;;;;GAgBG;AACH,KAAK,UAAU,2BAA2B,CACxC,GAAwC;AACxC,0EAA0E;AAC1E,8EAA8E;AAC9E,8EAA8E;AAC9E,+BAA+B;AAC/B,4EAA4E;AAC5E,GAAgD,EAChD,KAAc,EACd,GAA6B,EAC7B,EACE,oBAAoB,EACpB,aAAa,EACb,OAAO,EACP,wBAAwB,GACL;IAErB,IAAI,MAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,oCAAkB,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,yEAAyE;IACzE,MAAM,EAAE,MAAM,EAAE,GAAG,GAA0C,CAAC;IAC9D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEnC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,wCAA0B,CAAC,EAAE,CAAC;QAC1D,OAAO,GAAG,CACR,sBAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,aAAa,MAAM,0BAA0B,MAAM,6CAA6C;SAC1G,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG;QACR,4CAA4C;QAC5C,sBAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,aAAa,MAAM,2DAA2D;SACxF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAA,mBAAW,EAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,GAAG,CACR,sBAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,iCAAiC;SAC3C,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,wBAAwB,EAAE,CAAC;IAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CACR,sBAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,eAAe,MAAM,0CAA0C,OAAO,CAAC,MAAM,IAAI;SAC3F,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,oBAAoB,CAAC;YACvC,MAAM;YACN,OAAO;YACP,OAAO,EAAE,yBAAW,CAAC,gBAAgB;SACtC,CAAC,CAAS,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n InvokeKeyringParams,\n InvokeKeyringResult,\n InvokeSnapParams,\n} from '@metamask/snaps-sdk';\nimport type { Snap, SnapRpcHookArgs } from '@metamask/snaps-utils';\nimport { HandlerType, WALLET_SNAP_PERMISSION_KEY } from '@metamask/snaps-utils';\nimport type {\n PendingJsonRpcResponse,\n Json,\n JsonRpcRequest,\n} from '@metamask/utils';\nimport { hasProperty } from '@metamask/utils';\n\nimport { getValidatedParams } from './invokeSnapSugar';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'wallet_invokeKeyring';\n\nconst hookNames: MethodHooksObject<InvokeKeyringHooks> = {\n hasPermission: true,\n handleSnapRpcRequest: true,\n getSnap: true,\n getAllowedKeyringMethods: true,\n};\n\n/**\n * Invoke a keyring method of a Snap. This calls the `onKeyringRequest` handler\n * of the Snap.\n *\n * The Snap must be installed and the dapp must have permission to communicate\n * with the Snap, or the request is rejected. The dapp can install the Snap and\n * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).\n */\nexport const invokeKeyringHandler = {\n methodNames: [methodName] as const,\n implementation: invokeKeyringImplementation,\n hookNames,\n} satisfies PermittedHandlerExport<\n InvokeKeyringHooks,\n InvokeSnapParams,\n InvokeKeyringResult\n>;\n\nexport type InvokeKeyringHooks = {\n hasPermission: (permissionName: string) => boolean;\n\n handleSnapRpcRequest: ({\n snapId,\n handler,\n request,\n }: Omit<SnapRpcHookArgs, 'origin'> & { snapId: string }) => Promise<unknown>;\n\n getSnap: (snapId: string) => Snap | undefined;\n\n getAllowedKeyringMethods: () => string[];\n};\n\n/**\n * The `wallet_invokeKeyring` method implementation.\n * Invokes onKeyringRequest if the snap requested is installed and connected to the dapp.\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.handleSnapRpcRequest - Invokes a snap with a given RPC request.\n * @param hooks.hasPermission - Checks whether a given origin has a given permission.\n * @param hooks.getSnap - Gets information about a given snap.\n * @param hooks.getAllowedKeyringMethods - Get the list of allowed Keyring\n * methods for a given origin.\n * @returns Nothing.\n */\nasync function invokeKeyringImplementation(\n req: JsonRpcRequest<InvokeKeyringParams>,\n // `InvokeKeyringResult` is an alias for `Json` (which is the default type\n // argument for `PendingJsonRpcResponse`), but that may not be the case in the\n // future. We use `InvokeKeyringResult` here to make it clear that this is the\n // expected type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n res: PendingJsonRpcResponse<InvokeKeyringResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n handleSnapRpcRequest,\n hasPermission,\n getSnap,\n getAllowedKeyringMethods,\n }: InvokeKeyringHooks,\n): Promise<void> {\n let params: InvokeSnapParams;\n try {\n params = getValidatedParams(req.params);\n } catch (error) {\n return end(error);\n }\n\n // We expect the MM middleware stack to always add the origin to requests\n const { origin } = req as JsonRpcRequest & { origin: string };\n const { snapId, request } = params;\n\n if (!origin || !hasPermission(WALLET_SNAP_PERMISSION_KEY)) {\n return end(\n rpcErrors.invalidRequest({\n message: `The snap \"${snapId}\" is not connected to \"${origin}\". Please connect before invoking the snap.`,\n }),\n );\n }\n\n if (!getSnap(snapId)) {\n return end(\n // Mirror error message from SnapController.\n rpcErrors.invalidRequest({\n message: `The Snap \"${snapId}\" is not installed. Please install it before invoking it.`,\n }),\n );\n }\n\n if (!hasProperty(request, 'method') || typeof request.method !== 'string') {\n return end(\n rpcErrors.invalidRequest({\n message: 'The request must have a method.',\n }),\n );\n }\n\n const allowedMethods = getAllowedKeyringMethods();\n if (!allowedMethods.includes(request.method)) {\n return end(\n rpcErrors.invalidRequest({\n message: `The origin \"${origin}\" is not allowed to invoke the method \"${request.method}\".`,\n }),\n );\n }\n\n try {\n res.result = (await handleSnapRpcRequest({\n snapId,\n request,\n handler: HandlerType.OnKeyringRequest,\n })) as Json;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n"]}
@@ -1,10 +1,21 @@
1
- import type { PermittedHandlerExport } from "@metamask/permission-controller";
2
- import type { InvokeKeyringResult, InvokeSnapParams } from "@metamask/snaps-sdk";
1
+ import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
+ import type { InvokeKeyringParams, InvokeKeyringResult } from "@metamask/snaps-sdk";
3
3
  import type { Snap, SnapRpcHookArgs } from "@metamask/snaps-utils";
4
+ import type { PendingJsonRpcResponse, JsonRpcRequest } from "@metamask/utils";
5
+ import type { MethodHooksObject } from "../utils.cjs";
4
6
  /**
5
- * `wallet_invokeKeyring` gets the requester's permitted and installed Snaps.
7
+ * Invoke a keyring method of a Snap. This calls the `onKeyringRequest` handler
8
+ * of the Snap.
9
+ *
10
+ * The Snap must be installed and the dapp must have permission to communicate
11
+ * with the Snap, or the request is rejected. The dapp can install the Snap and
12
+ * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).
6
13
  */
7
- export declare const invokeKeyringHandler: PermittedHandlerExport<InvokeKeyringHooks, InvokeSnapParams, InvokeKeyringResult>;
14
+ export declare const invokeKeyringHandler: {
15
+ methodNames: ["wallet_invokeKeyring"];
16
+ implementation: typeof invokeKeyringImplementation;
17
+ hookNames: MethodHooksObject<InvokeKeyringHooks>;
18
+ };
8
19
  export type InvokeKeyringHooks = {
9
20
  hasPermission: (permissionName: string) => boolean;
10
21
  handleSnapRpcRequest: ({ snapId, handler, request, }: Omit<SnapRpcHookArgs, 'origin'> & {
@@ -13,4 +24,23 @@ export type InvokeKeyringHooks = {
13
24
  getSnap: (snapId: string) => Snap | undefined;
14
25
  getAllowedKeyringMethods: () => string[];
15
26
  };
27
+ /**
28
+ * The `wallet_invokeKeyring` method implementation.
29
+ * Invokes onKeyringRequest if the snap requested is installed and connected to the dapp.
30
+ *
31
+ * @param req - The JSON-RPC request object.
32
+ * @param res - The JSON-RPC response object.
33
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this
34
+ * function.
35
+ * @param end - The `json-rpc-engine` "end" callback.
36
+ * @param hooks - The RPC method hooks.
37
+ * @param hooks.handleSnapRpcRequest - Invokes a snap with a given RPC request.
38
+ * @param hooks.hasPermission - Checks whether a given origin has a given permission.
39
+ * @param hooks.getSnap - Gets information about a given snap.
40
+ * @param hooks.getAllowedKeyringMethods - Get the list of allowed Keyring
41
+ * methods for a given origin.
42
+ * @returns Nothing.
43
+ */
44
+ declare function invokeKeyringImplementation(req: JsonRpcRequest<InvokeKeyringParams>, res: PendingJsonRpcResponse<InvokeKeyringResult>, _next: unknown, end: JsonRpcEngineEndCallback, { handleSnapRpcRequest, hasPermission, getSnap, getAllowedKeyringMethods, }: InvokeKeyringHooks): Promise<void>;
45
+ export {};
16
46
  //# sourceMappingURL=invokeKeyring.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"invokeKeyring.d.cts","sourceRoot":"","sources":["../../src/permitted/invokeKeyring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,mBAAmB,EACnB,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,8BAA8B;AAmBnE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,sBAAsB,CACvD,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,CAKpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IAEnD,oBAAoB,EAAE,CAAC,EACrB,MAAM,EACN,OAAO,EACP,OAAO,GACR,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;IAE9C,wBAAwB,EAAE,MAAM,MAAM,EAAE,CAAC;CAC1C,CAAC"}
1
+ {"version":3,"file":"invokeKeyring.d.cts","sourceRoot":"","sources":["../../src/permitted/invokeKeyring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kCAAkC;AAG1E,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAEpB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,8BAA8B;AAEnE,OAAO,KAAK,EACV,sBAAsB,EAEtB,cAAc,EACf,wBAAwB;AAIzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAWlD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB;;;;CAQhC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IAEnD,oBAAoB,EAAE,CAAC,EACrB,MAAM,EACN,OAAO,EACP,OAAO,GACR,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;IAE9C,wBAAwB,EAAE,MAAM,MAAM,EAAE,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,iBAAe,2BAA2B,CACxC,GAAG,EAAE,cAAc,CAAC,mBAAmB,CAAC,EAMxC,GAAG,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,EAChD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EACE,oBAAoB,EACpB,aAAa,EACb,OAAO,EACP,wBAAwB,GACzB,EAAE,kBAAkB,GACpB,OAAO,CAAC,IAAI,CAAC,CAyDf"}
@@ -1,10 +1,21 @@
1
- import type { PermittedHandlerExport } from "@metamask/permission-controller";
2
- import type { InvokeKeyringResult, InvokeSnapParams } from "@metamask/snaps-sdk";
1
+ import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
+ import type { InvokeKeyringParams, InvokeKeyringResult } from "@metamask/snaps-sdk";
3
3
  import type { Snap, SnapRpcHookArgs } from "@metamask/snaps-utils";
4
+ import type { PendingJsonRpcResponse, JsonRpcRequest } from "@metamask/utils";
5
+ import type { MethodHooksObject } from "../utils.mjs";
4
6
  /**
5
- * `wallet_invokeKeyring` gets the requester's permitted and installed Snaps.
7
+ * Invoke a keyring method of a Snap. This calls the `onKeyringRequest` handler
8
+ * of the Snap.
9
+ *
10
+ * The Snap must be installed and the dapp must have permission to communicate
11
+ * with the Snap, or the request is rejected. The dapp can install the Snap and
12
+ * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).
6
13
  */
7
- export declare const invokeKeyringHandler: PermittedHandlerExport<InvokeKeyringHooks, InvokeSnapParams, InvokeKeyringResult>;
14
+ export declare const invokeKeyringHandler: {
15
+ methodNames: ["wallet_invokeKeyring"];
16
+ implementation: typeof invokeKeyringImplementation;
17
+ hookNames: MethodHooksObject<InvokeKeyringHooks>;
18
+ };
8
19
  export type InvokeKeyringHooks = {
9
20
  hasPermission: (permissionName: string) => boolean;
10
21
  handleSnapRpcRequest: ({ snapId, handler, request, }: Omit<SnapRpcHookArgs, 'origin'> & {
@@ -13,4 +24,23 @@ export type InvokeKeyringHooks = {
13
24
  getSnap: (snapId: string) => Snap | undefined;
14
25
  getAllowedKeyringMethods: () => string[];
15
26
  };
27
+ /**
28
+ * The `wallet_invokeKeyring` method implementation.
29
+ * Invokes onKeyringRequest if the snap requested is installed and connected to the dapp.
30
+ *
31
+ * @param req - The JSON-RPC request object.
32
+ * @param res - The JSON-RPC response object.
33
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this
34
+ * function.
35
+ * @param end - The `json-rpc-engine` "end" callback.
36
+ * @param hooks - The RPC method hooks.
37
+ * @param hooks.handleSnapRpcRequest - Invokes a snap with a given RPC request.
38
+ * @param hooks.hasPermission - Checks whether a given origin has a given permission.
39
+ * @param hooks.getSnap - Gets information about a given snap.
40
+ * @param hooks.getAllowedKeyringMethods - Get the list of allowed Keyring
41
+ * methods for a given origin.
42
+ * @returns Nothing.
43
+ */
44
+ declare function invokeKeyringImplementation(req: JsonRpcRequest<InvokeKeyringParams>, res: PendingJsonRpcResponse<InvokeKeyringResult>, _next: unknown, end: JsonRpcEngineEndCallback, { handleSnapRpcRequest, hasPermission, getSnap, getAllowedKeyringMethods, }: InvokeKeyringHooks): Promise<void>;
45
+ export {};
16
46
  //# sourceMappingURL=invokeKeyring.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"invokeKeyring.d.mts","sourceRoot":"","sources":["../../src/permitted/invokeKeyring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,mBAAmB,EACnB,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,8BAA8B;AAmBnE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,sBAAsB,CACvD,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,CAKpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IAEnD,oBAAoB,EAAE,CAAC,EACrB,MAAM,EACN,OAAO,EACP,OAAO,GACR,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;IAE9C,wBAAwB,EAAE,MAAM,MAAM,EAAE,CAAC;CAC1C,CAAC"}
1
+ {"version":3,"file":"invokeKeyring.d.mts","sourceRoot":"","sources":["../../src/permitted/invokeKeyring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kCAAkC;AAG1E,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAEpB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,8BAA8B;AAEnE,OAAO,KAAK,EACV,sBAAsB,EAEtB,cAAc,EACf,wBAAwB;AAIzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAWlD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB;;;;CAQhC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IAEnD,oBAAoB,EAAE,CAAC,EACrB,MAAM,EACN,OAAO,EACP,OAAO,GACR,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;IAE9C,wBAAwB,EAAE,MAAM,MAAM,EAAE,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,iBAAe,2BAA2B,CACxC,GAAG,EAAE,cAAc,CAAC,mBAAmB,CAAC,EAMxC,GAAG,EAAE,sBAAsB,CAAC,mBAAmB,CAAC,EAChD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EACE,oBAAoB,EACpB,aAAa,EACb,OAAO,EACP,wBAAwB,GACzB,EAAE,kBAAkB,GACpB,OAAO,CAAC,IAAI,CAAC,CAyDf"}
@@ -2,6 +2,7 @@ import { rpcErrors } from "@metamask/rpc-errors";
2
2
  import { HandlerType, WALLET_SNAP_PERMISSION_KEY } from "@metamask/snaps-utils";
3
3
  import { hasProperty } from "@metamask/utils";
4
4
  import { getValidatedParams } from "./invokeSnapSugar.mjs";
5
+ const methodName = 'wallet_invokeKeyring';
5
6
  const hookNames = {
6
7
  hasPermission: true,
7
8
  handleSnapRpcRequest: true,
@@ -9,10 +10,15 @@ const hookNames = {
9
10
  getAllowedKeyringMethods: true,
10
11
  };
11
12
  /**
12
- * `wallet_invokeKeyring` gets the requester's permitted and installed Snaps.
13
+ * Invoke a keyring method of a Snap. This calls the `onKeyringRequest` handler
14
+ * of the Snap.
15
+ *
16
+ * The Snap must be installed and the dapp must have permission to communicate
17
+ * with the Snap, or the request is rejected. The dapp can install the Snap and
18
+ * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).
13
19
  */
14
20
  export const invokeKeyringHandler = {
15
- methodNames: ['wallet_invokeKeyring'],
21
+ methodNames: [methodName],
16
22
  implementation: invokeKeyringImplementation,
17
23
  hookNames,
18
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"invokeKeyring.mjs","sourceRoot":"","sources":["../../src/permitted/invokeKeyring.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAOjD,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE,8BAA8B;AAMhF,OAAO,EAAE,WAAW,EAAE,wBAAwB;AAE9C,OAAO,EAAE,kBAAkB,EAAE,8BAA0B;AAGvD,MAAM,SAAS,GAA0C;IACvD,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;IAC1B,OAAO,EAAE,IAAI;IACb,wBAAwB,EAAE,IAAI;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAI7B;IACF,WAAW,EAAE,CAAC,sBAAsB,CAAC;IACrC,cAAc,EAAE,2BAA2B;IAC3C,SAAS;CACV,CAAC;AAgBF;;;;;;;;;;;;;;;;GAgBG;AACH,KAAK,UAAU,2BAA2B,CACxC,GAAwC;AACxC,0EAA0E;AAC1E,8EAA8E;AAC9E,8EAA8E;AAC9E,+BAA+B;AAC/B,4EAA4E;AAC5E,GAAgD,EAChD,KAAc,EACd,GAA6B,EAC7B,EACE,oBAAoB,EACpB,aAAa,EACb,OAAO,EACP,wBAAwB,GACL;IAErB,IAAI,MAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,yEAAyE;IACzE,MAAM,EAAE,MAAM,EAAE,GAAG,GAA0C,CAAC;IAC9D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEnC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC1D,OAAO,GAAG,CACR,SAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,aAAa,MAAM,0BAA0B,MAAM,6CAA6C;SAC1G,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG;QACR,4CAA4C;QAC5C,SAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,aAAa,MAAM,2DAA2D;SACxF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,GAAG,CACR,SAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,iCAAiC;SAC3C,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,wBAAwB,EAAE,CAAC;IAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CACR,SAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,eAAe,MAAM,0CAA0C,OAAO,CAAC,MAAM,IAAI;SAC3F,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,oBAAoB,CAAC;YACvC,MAAM;YACN,OAAO;YACP,OAAO,EAAE,WAAW,CAAC,gBAAgB;SACtC,CAAC,CAAS,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n InvokeKeyringParams,\n InvokeKeyringResult,\n InvokeSnapParams,\n} from '@metamask/snaps-sdk';\nimport type { Snap, SnapRpcHookArgs } from '@metamask/snaps-utils';\nimport { HandlerType, WALLET_SNAP_PERMISSION_KEY } from '@metamask/snaps-utils';\nimport type {\n PendingJsonRpcResponse,\n Json,\n JsonRpcRequest,\n} from '@metamask/utils';\nimport { hasProperty } from '@metamask/utils';\n\nimport { getValidatedParams } from './invokeSnapSugar';\nimport type { MethodHooksObject } from '../utils';\n\nconst hookNames: MethodHooksObject<InvokeKeyringHooks> = {\n hasPermission: true,\n handleSnapRpcRequest: true,\n getSnap: true,\n getAllowedKeyringMethods: true,\n};\n\n/**\n * `wallet_invokeKeyring` gets the requester's permitted and installed Snaps.\n */\nexport const invokeKeyringHandler: PermittedHandlerExport<\n InvokeKeyringHooks,\n InvokeSnapParams,\n InvokeKeyringResult\n> = {\n methodNames: ['wallet_invokeKeyring'],\n implementation: invokeKeyringImplementation,\n hookNames,\n};\n\nexport type InvokeKeyringHooks = {\n hasPermission: (permissionName: string) => boolean;\n\n handleSnapRpcRequest: ({\n snapId,\n handler,\n request,\n }: Omit<SnapRpcHookArgs, 'origin'> & { snapId: string }) => Promise<unknown>;\n\n getSnap: (snapId: string) => Snap | undefined;\n\n getAllowedKeyringMethods: () => string[];\n};\n\n/**\n * The `wallet_invokeKeyring` method implementation.\n * Invokes onKeyringRequest if the snap requested is installed and connected to the dapp.\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.handleSnapRpcRequest - Invokes a snap with a given RPC request.\n * @param hooks.hasPermission - Checks whether a given origin has a given permission.\n * @param hooks.getSnap - Gets information about a given snap.\n * @param hooks.getAllowedKeyringMethods - Get the list of allowed Keyring\n * methods for a given origin.\n * @returns Nothing.\n */\nasync function invokeKeyringImplementation(\n req: JsonRpcRequest<InvokeKeyringParams>,\n // `InvokeKeyringResult` is an alias for `Json` (which is the default type\n // argument for `PendingJsonRpcResponse`), but that may not be the case in the\n // future. We use `InvokeKeyringResult` here to make it clear that this is the\n // expected type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n res: PendingJsonRpcResponse<InvokeKeyringResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n handleSnapRpcRequest,\n hasPermission,\n getSnap,\n getAllowedKeyringMethods,\n }: InvokeKeyringHooks,\n): Promise<void> {\n let params: InvokeSnapParams;\n try {\n params = getValidatedParams(req.params);\n } catch (error) {\n return end(error);\n }\n\n // We expect the MM middleware stack to always add the origin to requests\n const { origin } = req as JsonRpcRequest & { origin: string };\n const { snapId, request } = params;\n\n if (!origin || !hasPermission(WALLET_SNAP_PERMISSION_KEY)) {\n return end(\n rpcErrors.invalidRequest({\n message: `The snap \"${snapId}\" is not connected to \"${origin}\". Please connect before invoking the snap.`,\n }),\n );\n }\n\n if (!getSnap(snapId)) {\n return end(\n // Mirror error message from SnapController.\n rpcErrors.invalidRequest({\n message: `The Snap \"${snapId}\" is not installed. Please install it before invoking it.`,\n }),\n );\n }\n\n if (!hasProperty(request, 'method') || typeof request.method !== 'string') {\n return end(\n rpcErrors.invalidRequest({\n message: 'The request must have a method.',\n }),\n );\n }\n\n const allowedMethods = getAllowedKeyringMethods();\n if (!allowedMethods.includes(request.method)) {\n return end(\n rpcErrors.invalidRequest({\n message: `The origin \"${origin}\" is not allowed to invoke the method \"${request.method}\".`,\n }),\n );\n }\n\n try {\n res.result = (await handleSnapRpcRequest({\n snapId,\n request,\n handler: HandlerType.OnKeyringRequest,\n })) as Json;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n"]}
1
+ {"version":3,"file":"invokeKeyring.mjs","sourceRoot":"","sources":["../../src/permitted/invokeKeyring.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAOjD,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE,8BAA8B;AAMhF,OAAO,EAAE,WAAW,EAAE,wBAAwB;AAE9C,OAAO,EAAE,kBAAkB,EAAE,8BAA0B;AAGvD,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAE1C,MAAM,SAAS,GAA0C;IACvD,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;IAC1B,OAAO,EAAE,IAAI;IACb,wBAAwB,EAAE,IAAI;CAC/B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW,EAAE,CAAC,UAAU,CAAU;IAClC,cAAc,EAAE,2BAA2B;IAC3C,SAAS;CAKV,CAAC;AAgBF;;;;;;;;;;;;;;;;GAgBG;AACH,KAAK,UAAU,2BAA2B,CACxC,GAAwC;AACxC,0EAA0E;AAC1E,8EAA8E;AAC9E,8EAA8E;AAC9E,+BAA+B;AAC/B,4EAA4E;AAC5E,GAAgD,EAChD,KAAc,EACd,GAA6B,EAC7B,EACE,oBAAoB,EACpB,aAAa,EACb,OAAO,EACP,wBAAwB,GACL;IAErB,IAAI,MAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,yEAAyE;IACzE,MAAM,EAAE,MAAM,EAAE,GAAG,GAA0C,CAAC;IAC9D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEnC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC1D,OAAO,GAAG,CACR,SAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,aAAa,MAAM,0BAA0B,MAAM,6CAA6C;SAC1G,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG;QACR,4CAA4C;QAC5C,SAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,aAAa,MAAM,2DAA2D;SACxF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,GAAG,CACR,SAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,iCAAiC;SAC3C,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,wBAAwB,EAAE,CAAC;IAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CACR,SAAS,CAAC,cAAc,CAAC;YACvB,OAAO,EAAE,eAAe,MAAM,0CAA0C,OAAO,CAAC,MAAM,IAAI;SAC3F,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,oBAAoB,CAAC;YACvC,MAAM;YACN,OAAO;YACP,OAAO,EAAE,WAAW,CAAC,gBAAgB;SACtC,CAAC,CAAS,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n InvokeKeyringParams,\n InvokeKeyringResult,\n InvokeSnapParams,\n} from '@metamask/snaps-sdk';\nimport type { Snap, SnapRpcHookArgs } from '@metamask/snaps-utils';\nimport { HandlerType, WALLET_SNAP_PERMISSION_KEY } from '@metamask/snaps-utils';\nimport type {\n PendingJsonRpcResponse,\n Json,\n JsonRpcRequest,\n} from '@metamask/utils';\nimport { hasProperty } from '@metamask/utils';\n\nimport { getValidatedParams } from './invokeSnapSugar';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'wallet_invokeKeyring';\n\nconst hookNames: MethodHooksObject<InvokeKeyringHooks> = {\n hasPermission: true,\n handleSnapRpcRequest: true,\n getSnap: true,\n getAllowedKeyringMethods: true,\n};\n\n/**\n * Invoke a keyring method of a Snap. This calls the `onKeyringRequest` handler\n * of the Snap.\n *\n * The Snap must be installed and the dapp must have permission to communicate\n * with the Snap, or the request is rejected. The dapp can install the Snap and\n * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).\n */\nexport const invokeKeyringHandler = {\n methodNames: [methodName] as const,\n implementation: invokeKeyringImplementation,\n hookNames,\n} satisfies PermittedHandlerExport<\n InvokeKeyringHooks,\n InvokeSnapParams,\n InvokeKeyringResult\n>;\n\nexport type InvokeKeyringHooks = {\n hasPermission: (permissionName: string) => boolean;\n\n handleSnapRpcRequest: ({\n snapId,\n handler,\n request,\n }: Omit<SnapRpcHookArgs, 'origin'> & { snapId: string }) => Promise<unknown>;\n\n getSnap: (snapId: string) => Snap | undefined;\n\n getAllowedKeyringMethods: () => string[];\n};\n\n/**\n * The `wallet_invokeKeyring` method implementation.\n * Invokes onKeyringRequest if the snap requested is installed and connected to the dapp.\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.handleSnapRpcRequest - Invokes a snap with a given RPC request.\n * @param hooks.hasPermission - Checks whether a given origin has a given permission.\n * @param hooks.getSnap - Gets information about a given snap.\n * @param hooks.getAllowedKeyringMethods - Get the list of allowed Keyring\n * methods for a given origin.\n * @returns Nothing.\n */\nasync function invokeKeyringImplementation(\n req: JsonRpcRequest<InvokeKeyringParams>,\n // `InvokeKeyringResult` is an alias for `Json` (which is the default type\n // argument for `PendingJsonRpcResponse`), but that may not be the case in the\n // future. We use `InvokeKeyringResult` here to make it clear that this is the\n // expected type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n res: PendingJsonRpcResponse<InvokeKeyringResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n handleSnapRpcRequest,\n hasPermission,\n getSnap,\n getAllowedKeyringMethods,\n }: InvokeKeyringHooks,\n): Promise<void> {\n let params: InvokeSnapParams;\n try {\n params = getValidatedParams(req.params);\n } catch (error) {\n return end(error);\n }\n\n // We expect the MM middleware stack to always add the origin to requests\n const { origin } = req as JsonRpcRequest & { origin: string };\n const { snapId, request } = params;\n\n if (!origin || !hasPermission(WALLET_SNAP_PERMISSION_KEY)) {\n return end(\n rpcErrors.invalidRequest({\n message: `The snap \"${snapId}\" is not connected to \"${origin}\". Please connect before invoking the snap.`,\n }),\n );\n }\n\n if (!getSnap(snapId)) {\n return end(\n // Mirror error message from SnapController.\n rpcErrors.invalidRequest({\n message: `The Snap \"${snapId}\" is not installed. Please install it before invoking it.`,\n }),\n );\n }\n\n if (!hasProperty(request, 'method') || typeof request.method !== 'string') {\n return end(\n rpcErrors.invalidRequest({\n message: 'The request must have a method.',\n }),\n );\n }\n\n const allowedMethods = getAllowedKeyringMethods();\n if (!allowedMethods.includes(request.method)) {\n return end(\n rpcErrors.invalidRequest({\n message: `The origin \"${origin}\" is not allowed to invoke the method \"${request.method}\".`,\n }),\n );\n }\n\n try {\n res.result = (await handleSnapRpcRequest({\n snapId,\n request,\n handler: HandlerType.OnKeyringRequest,\n })) as Json;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n"]}
@@ -3,11 +3,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getValidatedParams = exports.invokeSnapSugar = exports.invokeSnapSugarHandler = void 0;
4
4
  const rpc_errors_1 = require("@metamask/rpc-errors");
5
5
  const utils_1 = require("@metamask/utils");
6
+ const methodName = 'wallet_invokeSnap';
6
7
  /**
7
- * `wallet_invokeSnap` attempts to invoke an RPC method of the specified Snap.
8
+ * Invoke a method of a Snap, designated by the `snapId` parameter, with a
9
+ * JSON-RPC request specified in the `request` parameter. This is effectively a
10
+ * wrapper around [`wallet_snap`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_snap)
11
+ * that allows for more convenient invocation of Snap methods without needing to
12
+ * specify the full `wallet_snap` parameters.
13
+ *
14
+ * The Snap must be installed and the dapp must have permission to communicate
15
+ * with the Snap, or the request is rejected. The dapp can install the Snap and
16
+ * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const result = await snap.request({
21
+ * method: 'wallet_invokeSnap',
22
+ * params: {
23
+ * snapId: 'npm:@metamask/example-snap',
24
+ * request: {
25
+ * method: 'someMethod',
26
+ * params: { some: 'params' },
27
+ * },
28
+ * },
29
+ * });
30
+ * ```
8
31
  */
9
32
  exports.invokeSnapSugarHandler = {
10
- methodNames: ['wallet_invokeSnap'],
33
+ methodNames: [methodName],
11
34
  implementation: invokeSnapSugar,
12
35
  hookNames: {
13
36
  invokeSnap: true,
@@ -1 +1 @@
1
- {"version":3,"file":"invokeSnapSugar.cjs","sourceRoot":"","sources":["../../src/permitted/invokeSnapSugar.ts"],"names":[],"mappings":";;;AAKA,qDAAiD;AAGjD,2CAA2C;AAE3C;;GAEG;AACU,QAAA,sBAAsB,GAI/B;IACF,WAAW,EAAE,CAAC,mBAAmB,CAAC;IAClC,cAAc,EAAE,eAAe;IAC/B,SAAS,EAAE;QACT,UAAU,EAAE,IAAI;KACjB;CACF,CAAC;AAMF;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,eAAe,CACnC,GAAqC;AACrC,uEAAuE;AACvE,8EAA8E;AAC9E,2EAA2E;AAC3E,+BAA+B;AAC/B,4EAA4E;AAC5E,GAA6C,EAC7C,KAAgC,EAChC,GAA6B,EAC7B,EAAE,UAAU,EAAwB;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,GAAG,CAAC,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAnBD,0CAmBC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,MAAe;IAChD,IAAI,CAAC,IAAA,gBAAQ,EAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,sBAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,wCAAwC;SAClD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3D,MAAM,sBAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,+BAA+B;SACzC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAA,gBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,sBAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,yCAAyC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAA0B,CAAC;AACpC,CAAC;AAtBD,gDAsBC","sourcesContent":["import type {\n JsonRpcEngineEndCallback,\n JsonRpcEngineNextCallback,\n} from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { InvokeSnapParams, InvokeSnapResult } from '@metamask/snaps-sdk';\nimport type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';\nimport { isObject } from '@metamask/utils';\n\n/**\n * `wallet_invokeSnap` attempts to invoke an RPC method of the specified Snap.\n */\nexport const invokeSnapSugarHandler: PermittedHandlerExport<\n InvokeSnapSugarHooks,\n InvokeSnapParams,\n InvokeSnapResult\n> = {\n methodNames: ['wallet_invokeSnap'],\n implementation: invokeSnapSugar,\n hookNames: {\n invokeSnap: true,\n },\n};\n\nexport type InvokeSnapSugarHooks = {\n invokeSnap: (params: InvokeSnapParams) => Promise<InvokeSnapResult>;\n};\n\n/**\n * The `wallet_invokeSnap` method implementation.\n * Effectively calls `wallet_snap` under the hood.\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.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.invokeSnap - A function to invoke a snap designated by its parameters,\n * bound to the requesting origin.\n * @returns Nothing.\n * @throws If the params are invalid.\n */\nexport async function invokeSnapSugar(\n req: JsonRpcRequest<InvokeSnapParams>,\n // `InvokeSnapResult` is an alias for `Json` (which is the default type\n // argument for `PendingJsonRpcResponse`), but that may not be the case in the\n // future. We use `InvokeSnapResult` here to make it clear that this is the\n // expected type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n res: PendingJsonRpcResponse<InvokeSnapResult>,\n _next: JsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n { invokeSnap }: InvokeSnapSugarHooks,\n): Promise<void> {\n try {\n const params = getValidatedParams(req.params);\n res.result = await invokeSnap(params);\n } catch (error) {\n return end(error);\n }\n return end();\n}\n\n/**\n * Validates the wallet_invokeSnap 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 method parameter object.\n */\nexport function getValidatedParams(params: unknown): InvokeSnapParams {\n if (!isObject(params)) {\n throw rpcErrors.invalidParams({\n message: 'Expected params to be a single object.',\n });\n }\n\n const { snapId, request } = params;\n\n if (!snapId || typeof snapId !== 'string' || snapId === '') {\n throw rpcErrors.invalidParams({\n message: 'Must specify a valid snap ID.',\n });\n }\n\n if (!isObject(request)) {\n throw rpcErrors.invalidParams({\n message: 'Expected request to be a single object.',\n });\n }\n\n return params as InvokeSnapParams;\n}\n"]}
1
+ {"version":3,"file":"invokeSnapSugar.cjs","sourceRoot":"","sources":["../../src/permitted/invokeSnapSugar.ts"],"names":[],"mappings":";;;AAKA,qDAAiD;AAGjD,2CAA2C;AAE3C,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACU,QAAA,sBAAsB,GAAG;IACpC,WAAW,EAAE,CAAC,UAAU,CAAU;IAClC,cAAc,EAAE,eAAe;IAC/B,SAAS,EAAE;QACT,UAAU,EAAE,IAAI;KACjB;CAKF,CAAC;AAMF;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,eAAe,CACnC,GAAqC;AACrC,uEAAuE;AACvE,8EAA8E;AAC9E,2EAA2E;AAC3E,+BAA+B;AAC/B,4EAA4E;AAC5E,GAA6C,EAC7C,KAAgC,EAChC,GAA6B,EAC7B,EAAE,UAAU,EAAwB;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,GAAG,CAAC,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAnBD,0CAmBC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,MAAe;IAChD,IAAI,CAAC,IAAA,gBAAQ,EAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,sBAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,wCAAwC;SAClD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3D,MAAM,sBAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,+BAA+B;SACzC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAA,gBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,sBAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,yCAAyC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAA0B,CAAC;AACpC,CAAC;AAtBD,gDAsBC","sourcesContent":["import type {\n JsonRpcEngineEndCallback,\n JsonRpcEngineNextCallback,\n} from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { InvokeSnapParams, InvokeSnapResult } from '@metamask/snaps-sdk';\nimport type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';\nimport { isObject } from '@metamask/utils';\n\nconst methodName = 'wallet_invokeSnap';\n\n/**\n * Invoke a method of a Snap, designated by the `snapId` parameter, with a\n * JSON-RPC request specified in the `request` parameter. This is effectively a\n * wrapper around [`wallet_snap`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_snap)\n * that allows for more convenient invocation of Snap methods without needing to\n * specify the full `wallet_snap` parameters.\n *\n * The Snap must be installed and the dapp must have permission to communicate\n * with the Snap, or the request is rejected. The dapp can install the Snap and\n * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).\n *\n * @example\n * ```ts\n * const result = await snap.request({\n * method: 'wallet_invokeSnap',\n * params: {\n * snapId: 'npm:@metamask/example-snap',\n * request: {\n * method: 'someMethod',\n * params: { some: 'params' },\n * },\n * },\n * });\n * ```\n */\nexport const invokeSnapSugarHandler = {\n methodNames: [methodName] as const,\n implementation: invokeSnapSugar,\n hookNames: {\n invokeSnap: true,\n },\n} satisfies PermittedHandlerExport<\n InvokeSnapSugarHooks,\n InvokeSnapParams,\n InvokeSnapResult\n>;\n\nexport type InvokeSnapSugarHooks = {\n invokeSnap: (params: InvokeSnapParams) => Promise<InvokeSnapResult>;\n};\n\n/**\n * The `wallet_invokeSnap` method implementation.\n * Effectively calls `wallet_snap` under the hood.\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.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.invokeSnap - A function to invoke a snap designated by its parameters,\n * bound to the requesting origin.\n * @returns Nothing.\n * @throws If the params are invalid.\n */\nexport async function invokeSnapSugar(\n req: JsonRpcRequest<InvokeSnapParams>,\n // `InvokeSnapResult` is an alias for `Json` (which is the default type\n // argument for `PendingJsonRpcResponse`), but that may not be the case in the\n // future. We use `InvokeSnapResult` here to make it clear that this is the\n // expected type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n res: PendingJsonRpcResponse<InvokeSnapResult>,\n _next: JsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n { invokeSnap }: InvokeSnapSugarHooks,\n): Promise<void> {\n try {\n const params = getValidatedParams(req.params);\n res.result = await invokeSnap(params);\n } catch (error) {\n return end(error);\n }\n return end();\n}\n\n/**\n * Validates the wallet_invokeSnap 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 method parameter object.\n */\nexport function getValidatedParams(params: unknown): InvokeSnapParams {\n if (!isObject(params)) {\n throw rpcErrors.invalidParams({\n message: 'Expected params to be a single object.',\n });\n }\n\n const { snapId, request } = params;\n\n if (!snapId || typeof snapId !== 'string' || snapId === '') {\n throw rpcErrors.invalidParams({\n message: 'Must specify a valid snap ID.',\n });\n }\n\n if (!isObject(request)) {\n throw rpcErrors.invalidParams({\n message: 'Expected request to be a single object.',\n });\n }\n\n return params as InvokeSnapParams;\n}\n"]}
@@ -1,11 +1,38 @@
1
1
  import type { JsonRpcEngineEndCallback, JsonRpcEngineNextCallback } from "@metamask/json-rpc-engine";
2
- import type { PermittedHandlerExport } from "@metamask/permission-controller";
3
2
  import type { InvokeSnapParams, InvokeSnapResult } from "@metamask/snaps-sdk";
4
3
  import type { JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
5
4
  /**
6
- * `wallet_invokeSnap` attempts to invoke an RPC method of the specified Snap.
5
+ * Invoke a method of a Snap, designated by the `snapId` parameter, with a
6
+ * JSON-RPC request specified in the `request` parameter. This is effectively a
7
+ * wrapper around [`wallet_snap`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_snap)
8
+ * that allows for more convenient invocation of Snap methods without needing to
9
+ * specify the full `wallet_snap` parameters.
10
+ *
11
+ * The Snap must be installed and the dapp must have permission to communicate
12
+ * with the Snap, or the request is rejected. The dapp can install the Snap and
13
+ * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const result = await snap.request({
18
+ * method: 'wallet_invokeSnap',
19
+ * params: {
20
+ * snapId: 'npm:@metamask/example-snap',
21
+ * request: {
22
+ * method: 'someMethod',
23
+ * params: { some: 'params' },
24
+ * },
25
+ * },
26
+ * });
27
+ * ```
7
28
  */
8
- export declare const invokeSnapSugarHandler: PermittedHandlerExport<InvokeSnapSugarHooks, InvokeSnapParams, InvokeSnapResult>;
29
+ export declare const invokeSnapSugarHandler: {
30
+ methodNames: ["wallet_invokeSnap"];
31
+ implementation: typeof invokeSnapSugar;
32
+ hookNames: {
33
+ invokeSnap: true;
34
+ };
35
+ };
9
36
  export type InvokeSnapSugarHooks = {
10
37
  invokeSnap: (params: InvokeSnapParams) => Promise<InvokeSnapResult>;
11
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"invokeSnapSugar.d.cts","sourceRoot":"","sources":["../../src/permitted/invokeSnapSugar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,kCAAkC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,4BAA4B;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,wBAAwB;AAG9E;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,sBAAsB,CACzD,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,CAOjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAMrC,GAAG,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,EAC7C,KAAK,EAAE,yBAAyB,EAChC,GAAG,EAAE,wBAAwB,EAC7B,EAAE,UAAU,EAAE,EAAE,oBAAoB,GACnC,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAsBpE"}
1
+ {"version":3,"file":"invokeSnapSugar.d.cts","sourceRoot":"","sources":["../../src/permitted/invokeSnapSugar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,kCAAkC;AAGnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,4BAA4B;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,wBAAwB;AAK9E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,sBAAsB;;;;;;CAUlC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAMrC,GAAG,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,EAC7C,KAAK,EAAE,yBAAyB,EAChC,GAAG,EAAE,wBAAwB,EAC7B,EAAE,UAAU,EAAE,EAAE,oBAAoB,GACnC,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAsBpE"}
@@ -1,11 +1,38 @@
1
1
  import type { JsonRpcEngineEndCallback, JsonRpcEngineNextCallback } from "@metamask/json-rpc-engine";
2
- import type { PermittedHandlerExport } from "@metamask/permission-controller";
3
2
  import type { InvokeSnapParams, InvokeSnapResult } from "@metamask/snaps-sdk";
4
3
  import type { JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
5
4
  /**
6
- * `wallet_invokeSnap` attempts to invoke an RPC method of the specified Snap.
5
+ * Invoke a method of a Snap, designated by the `snapId` parameter, with a
6
+ * JSON-RPC request specified in the `request` parameter. This is effectively a
7
+ * wrapper around [`wallet_snap`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_snap)
8
+ * that allows for more convenient invocation of Snap methods without needing to
9
+ * specify the full `wallet_snap` parameters.
10
+ *
11
+ * The Snap must be installed and the dapp must have permission to communicate
12
+ * with the Snap, or the request is rejected. The dapp can install the Snap and
13
+ * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const result = await snap.request({
18
+ * method: 'wallet_invokeSnap',
19
+ * params: {
20
+ * snapId: 'npm:@metamask/example-snap',
21
+ * request: {
22
+ * method: 'someMethod',
23
+ * params: { some: 'params' },
24
+ * },
25
+ * },
26
+ * });
27
+ * ```
7
28
  */
8
- export declare const invokeSnapSugarHandler: PermittedHandlerExport<InvokeSnapSugarHooks, InvokeSnapParams, InvokeSnapResult>;
29
+ export declare const invokeSnapSugarHandler: {
30
+ methodNames: ["wallet_invokeSnap"];
31
+ implementation: typeof invokeSnapSugar;
32
+ hookNames: {
33
+ invokeSnap: true;
34
+ };
35
+ };
9
36
  export type InvokeSnapSugarHooks = {
10
37
  invokeSnap: (params: InvokeSnapParams) => Promise<InvokeSnapResult>;
11
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"invokeSnapSugar.d.mts","sourceRoot":"","sources":["../../src/permitted/invokeSnapSugar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,kCAAkC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,4BAA4B;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,wBAAwB;AAG9E;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,sBAAsB,CACzD,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,CAOjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAMrC,GAAG,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,EAC7C,KAAK,EAAE,yBAAyB,EAChC,GAAG,EAAE,wBAAwB,EAC7B,EAAE,UAAU,EAAE,EAAE,oBAAoB,GACnC,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAsBpE"}
1
+ {"version":3,"file":"invokeSnapSugar.d.mts","sourceRoot":"","sources":["../../src/permitted/invokeSnapSugar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,kCAAkC;AAGnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,4BAA4B;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,wBAAwB;AAK9E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,sBAAsB;;;;;;CAUlC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAMrC,GAAG,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,EAC7C,KAAK,EAAE,yBAAyB,EAChC,GAAG,EAAE,wBAAwB,EAC7B,EAAE,UAAU,EAAE,EAAE,oBAAoB,GACnC,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAsBpE"}
@@ -1,10 +1,33 @@
1
1
  import { rpcErrors } from "@metamask/rpc-errors";
2
2
  import { isObject } from "@metamask/utils";
3
+ const methodName = 'wallet_invokeSnap';
3
4
  /**
4
- * `wallet_invokeSnap` attempts to invoke an RPC method of the specified Snap.
5
+ * Invoke a method of a Snap, designated by the `snapId` parameter, with a
6
+ * JSON-RPC request specified in the `request` parameter. This is effectively a
7
+ * wrapper around [`wallet_snap`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_snap)
8
+ * that allows for more convenient invocation of Snap methods without needing to
9
+ * specify the full `wallet_snap` parameters.
10
+ *
11
+ * The Snap must be installed and the dapp must have permission to communicate
12
+ * with the Snap, or the request is rejected. The dapp can install the Snap and
13
+ * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const result = await snap.request({
18
+ * method: 'wallet_invokeSnap',
19
+ * params: {
20
+ * snapId: 'npm:@metamask/example-snap',
21
+ * request: {
22
+ * method: 'someMethod',
23
+ * params: { some: 'params' },
24
+ * },
25
+ * },
26
+ * });
27
+ * ```
5
28
  */
6
29
  export const invokeSnapSugarHandler = {
7
- methodNames: ['wallet_invokeSnap'],
30
+ methodNames: [methodName],
8
31
  implementation: invokeSnapSugar,
9
32
  hookNames: {
10
33
  invokeSnap: true,
@@ -1 +1 @@
1
- {"version":3,"file":"invokeSnapSugar.mjs","sourceRoot":"","sources":["../../src/permitted/invokeSnapSugar.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAGjD,OAAO,EAAE,QAAQ,EAAE,wBAAwB;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAI/B;IACF,WAAW,EAAE,CAAC,mBAAmB,CAAC;IAClC,cAAc,EAAE,eAAe;IAC/B,SAAS,EAAE;QACT,UAAU,EAAE,IAAI;KACjB;CACF,CAAC;AAMF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAqC;AACrC,uEAAuE;AACvE,8EAA8E;AAC9E,2EAA2E;AAC3E,+BAA+B;AAC/B,4EAA4E;AAC5E,GAA6C,EAC7C,KAAgC,EAChC,GAA6B,EAC7B,EAAE,UAAU,EAAwB;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,GAAG,CAAC,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,SAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,wCAAwC;SAClD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3D,MAAM,SAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,+BAA+B;SACzC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,SAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,yCAAyC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAA0B,CAAC;AACpC,CAAC","sourcesContent":["import type {\n JsonRpcEngineEndCallback,\n JsonRpcEngineNextCallback,\n} from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { InvokeSnapParams, InvokeSnapResult } from '@metamask/snaps-sdk';\nimport type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';\nimport { isObject } from '@metamask/utils';\n\n/**\n * `wallet_invokeSnap` attempts to invoke an RPC method of the specified Snap.\n */\nexport const invokeSnapSugarHandler: PermittedHandlerExport<\n InvokeSnapSugarHooks,\n InvokeSnapParams,\n InvokeSnapResult\n> = {\n methodNames: ['wallet_invokeSnap'],\n implementation: invokeSnapSugar,\n hookNames: {\n invokeSnap: true,\n },\n};\n\nexport type InvokeSnapSugarHooks = {\n invokeSnap: (params: InvokeSnapParams) => Promise<InvokeSnapResult>;\n};\n\n/**\n * The `wallet_invokeSnap` method implementation.\n * Effectively calls `wallet_snap` under the hood.\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.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.invokeSnap - A function to invoke a snap designated by its parameters,\n * bound to the requesting origin.\n * @returns Nothing.\n * @throws If the params are invalid.\n */\nexport async function invokeSnapSugar(\n req: JsonRpcRequest<InvokeSnapParams>,\n // `InvokeSnapResult` is an alias for `Json` (which is the default type\n // argument for `PendingJsonRpcResponse`), but that may not be the case in the\n // future. We use `InvokeSnapResult` here to make it clear that this is the\n // expected type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n res: PendingJsonRpcResponse<InvokeSnapResult>,\n _next: JsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n { invokeSnap }: InvokeSnapSugarHooks,\n): Promise<void> {\n try {\n const params = getValidatedParams(req.params);\n res.result = await invokeSnap(params);\n } catch (error) {\n return end(error);\n }\n return end();\n}\n\n/**\n * Validates the wallet_invokeSnap 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 method parameter object.\n */\nexport function getValidatedParams(params: unknown): InvokeSnapParams {\n if (!isObject(params)) {\n throw rpcErrors.invalidParams({\n message: 'Expected params to be a single object.',\n });\n }\n\n const { snapId, request } = params;\n\n if (!snapId || typeof snapId !== 'string' || snapId === '') {\n throw rpcErrors.invalidParams({\n message: 'Must specify a valid snap ID.',\n });\n }\n\n if (!isObject(request)) {\n throw rpcErrors.invalidParams({\n message: 'Expected request to be a single object.',\n });\n }\n\n return params as InvokeSnapParams;\n}\n"]}
1
+ {"version":3,"file":"invokeSnapSugar.mjs","sourceRoot":"","sources":["../../src/permitted/invokeSnapSugar.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAGjD,OAAO,EAAE,QAAQ,EAAE,wBAAwB;AAE3C,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,WAAW,EAAE,CAAC,UAAU,CAAU;IAClC,cAAc,EAAE,eAAe;IAC/B,SAAS,EAAE;QACT,UAAU,EAAE,IAAI;KACjB;CAKF,CAAC;AAMF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAqC;AACrC,uEAAuE;AACvE,8EAA8E;AAC9E,2EAA2E;AAC3E,+BAA+B;AAC/B,4EAA4E;AAC5E,GAA6C,EAC7C,KAAgC,EAChC,GAA6B,EAC7B,EAAE,UAAU,EAAwB;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,GAAG,CAAC,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,SAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,wCAAwC;SAClD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3D,MAAM,SAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,+BAA+B;SACzC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,SAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,yCAAyC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAA0B,CAAC;AACpC,CAAC","sourcesContent":["import type {\n JsonRpcEngineEndCallback,\n JsonRpcEngineNextCallback,\n} from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { InvokeSnapParams, InvokeSnapResult } from '@metamask/snaps-sdk';\nimport type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';\nimport { isObject } from '@metamask/utils';\n\nconst methodName = 'wallet_invokeSnap';\n\n/**\n * Invoke a method of a Snap, designated by the `snapId` parameter, with a\n * JSON-RPC request specified in the `request` parameter. This is effectively a\n * wrapper around [`wallet_snap`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_snap)\n * that allows for more convenient invocation of Snap methods without needing to\n * specify the full `wallet_snap` parameters.\n *\n * The Snap must be installed and the dapp must have permission to communicate\n * with the Snap, or the request is rejected. The dapp can install the Snap and\n * request permission to communicate with it using [`wallet_requestSnaps`](https://docs.metamask.io/snaps/reference/snaps-api/wallet_requestsnaps).\n *\n * @example\n * ```ts\n * const result = await snap.request({\n * method: 'wallet_invokeSnap',\n * params: {\n * snapId: 'npm:@metamask/example-snap',\n * request: {\n * method: 'someMethod',\n * params: { some: 'params' },\n * },\n * },\n * });\n * ```\n */\nexport const invokeSnapSugarHandler = {\n methodNames: [methodName] as const,\n implementation: invokeSnapSugar,\n hookNames: {\n invokeSnap: true,\n },\n} satisfies PermittedHandlerExport<\n InvokeSnapSugarHooks,\n InvokeSnapParams,\n InvokeSnapResult\n>;\n\nexport type InvokeSnapSugarHooks = {\n invokeSnap: (params: InvokeSnapParams) => Promise<InvokeSnapResult>;\n};\n\n/**\n * The `wallet_invokeSnap` method implementation.\n * Effectively calls `wallet_snap` under the hood.\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.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.invokeSnap - A function to invoke a snap designated by its parameters,\n * bound to the requesting origin.\n * @returns Nothing.\n * @throws If the params are invalid.\n */\nexport async function invokeSnapSugar(\n req: JsonRpcRequest<InvokeSnapParams>,\n // `InvokeSnapResult` is an alias for `Json` (which is the default type\n // argument for `PendingJsonRpcResponse`), but that may not be the case in the\n // future. We use `InvokeSnapResult` here to make it clear that this is the\n // expected type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n res: PendingJsonRpcResponse<InvokeSnapResult>,\n _next: JsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n { invokeSnap }: InvokeSnapSugarHooks,\n): Promise<void> {\n try {\n const params = getValidatedParams(req.params);\n res.result = await invokeSnap(params);\n } catch (error) {\n return end(error);\n }\n return end();\n}\n\n/**\n * Validates the wallet_invokeSnap 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 method parameter object.\n */\nexport function getValidatedParams(params: unknown): InvokeSnapParams {\n if (!isObject(params)) {\n throw rpcErrors.invalidParams({\n message: 'Expected params to be a single object.',\n });\n }\n\n const { snapId, request } = params;\n\n if (!snapId || typeof snapId !== 'string' || snapId === '') {\n throw rpcErrors.invalidParams({\n message: 'Must specify a valid snap ID.',\n });\n }\n\n if (!isObject(request)) {\n throw rpcErrors.invalidParams({\n message: 'Expected request to be a single object.',\n });\n }\n\n return params as InvokeSnapParams;\n}\n"]}
@@ -16,13 +16,52 @@ const REQUIRED_PERMISSIONS = [
16
16
  getBip44Entropy_1.getBip44EntropyBuilder.targetName,
17
17
  getEntropy_1.getEntropyBuilder.targetName,
18
18
  ];
19
+ const methodName = 'snap_listEntropySources';
19
20
  const hookNames = {
20
21
  hasPermission: true,
21
22
  getEntropySources: true,
22
23
  getUnlockPromise: true,
23
24
  };
25
+ /**
26
+ * Get a list of entropy sources available to the Snap. The requesting origin
27
+ * must have at least one of the following permissions to access entropy source
28
+ * metadata:
29
+ *
30
+ * - `snap_getBip32Entropy`
31
+ * - `snap_getBip32PublicKey`
32
+ * - `snap_getBip44Entropy`
33
+ * - `snap_getEntropy`
34
+ *
35
+ * @example
36
+ * ```json name="Manifest"
37
+ * {
38
+ * "initialPermissions": {
39
+ * "snap_getBip32Entropy": {}
40
+ * }
41
+ * }
42
+ * ```
43
+ * ```ts name="Usage"
44
+ * const entropySources = await snap.request({ method: 'snap_listEntropySources' });
45
+ * console.log(entropySources);
46
+ * // Example output:
47
+ * // [
48
+ * // {
49
+ * // name: 'Mnemonic 1',
50
+ * // id: 'mnemonic-1',
51
+ * // type: 'mnemonic',
52
+ * // primary: true,
53
+ * // },
54
+ * // {
55
+ * // name: 'Mnemonic 2',
56
+ * // id: 'mnemonic-2',
57
+ * // type: 'mnemonic',
58
+ * // primary: false,
59
+ * // },
60
+ * // ]
61
+ * ```
62
+ */
24
63
  exports.listEntropySourcesHandler = {
25
- methodNames: ['snap_listEntropySources'],
64
+ methodNames: [methodName],
26
65
  implementation: listEntropySourcesImplementation,
27
66
  hookNames,
28
67
  };
@@ -1 +1 @@
1
- {"version":3,"file":"listEntropySources.cjs","sourceRoot":"","sources":["../../src/permitted/listEntropySources.ts"],"names":[],"mappings":";;;AAEA,qDAAsD;AAStD,uEAAuE;AACvE,2EAA2E;AAC3E,uEAAuE;AACvE,6DAA6D;AAG7D;;;GAGG;AACH,MAAM,oBAAoB,GAAG;IAC3B,wCAAsB,CAAC,UAAU;IACjC,4CAAwB,CAAC,UAAU;IACnC,wCAAsB,CAAC,UAAU;IACjC,8BAAiB,CAAC,UAAU;CAC7B,CAAC;AAEF,MAAM,SAAS,GAA+C;IAC5D,aAAa,EAAE,IAAI;IACnB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;CACvB,CAAC;AA0BW,QAAA,yBAAyB,GAIlC;IACF,WAAW,EAAE,CAAC,yBAAyB,CAAC;IACxC,cAAc,EAAE,gCAAgC;IAChD,SAAS;CACV,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,gCAAgC,CAC7C,QAAkD,EAClD,QAA0D,EAC1D,KAAc,EACd,GAA6B,EAC7B,EACE,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACQ;IAE1B,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,2BAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAE7B,QAAQ,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACtC,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors } from '@metamask/rpc-errors';\nimport type {\n EntropySource,\n JsonRpcRequest,\n ListEntropySourcesParams,\n ListEntropySourcesResult,\n} from '@metamask/snaps-sdk';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { getBip32EntropyBuilder } from '../restricted/getBip32Entropy';\nimport { getBip32PublicKeyBuilder } from '../restricted/getBip32PublicKey';\nimport { getBip44EntropyBuilder } from '../restricted/getBip44Entropy';\nimport { getEntropyBuilder } from '../restricted/getEntropy';\nimport type { MethodHooksObject } from '../utils';\n\n/**\n * A list of permissions that the requesting origin must have at least one of\n * in order to call this method.\n */\nconst REQUIRED_PERMISSIONS = [\n getBip32EntropyBuilder.targetName,\n getBip32PublicKeyBuilder.targetName,\n getBip44EntropyBuilder.targetName,\n getEntropyBuilder.targetName,\n];\n\nconst hookNames: MethodHooksObject<ListEntropySourcesHooks> = {\n hasPermission: true,\n getEntropySources: true,\n getUnlockPromise: true,\n};\n\nexport type ListEntropySourcesHooks = {\n /**\n * Check if the requesting origin has a given permission.\n *\n * @param permissionName - The name of the permission to check.\n * @returns Whether the origin has the permission.\n */\n hasPermission: (permissionName: string) => boolean;\n\n /**\n * Get the entropy sources from the client.\n *\n * @returns The entropy sources.\n */\n getEntropySources: () => EntropySource[];\n\n /**\n * Wait for the extension to be unlocked.\n *\n * @returns A promise that resolves once the extension is unlocked.\n */\n getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;\n};\n\nexport const listEntropySourcesHandler: PermittedHandlerExport<\n ListEntropySourcesHooks,\n ListEntropySourcesParams,\n ListEntropySourcesResult\n> = {\n methodNames: ['snap_listEntropySources'],\n implementation: listEntropySourcesImplementation,\n hookNames,\n};\n\n/**\n * The `snap_listEntropySources` method implementation.\n *\n * @param _request - The JSON-RPC request object. Not used by this function.\n * @param response - 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.hasPermission - The function to check if the origin has a\n * permission.\n * @param hooks.getEntropySources - The function to get the entropy sources.\n * @param hooks.getUnlockPromise - The function to get the unlock promise.\n * @returns Noting.\n */\nasync function listEntropySourcesImplementation(\n _request: JsonRpcRequest<ListEntropySourcesParams>,\n response: PendingJsonRpcResponse<ListEntropySourcesResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n hasPermission,\n getEntropySources,\n getUnlockPromise,\n }: ListEntropySourcesHooks,\n): Promise<void> {\n const isPermitted = REQUIRED_PERMISSIONS.some(hasPermission);\n if (!isPermitted) {\n return end(providerErrors.unauthorized());\n }\n\n await getUnlockPromise(true);\n\n response.result = getEntropySources();\n return end();\n}\n"]}
1
+ {"version":3,"file":"listEntropySources.cjs","sourceRoot":"","sources":["../../src/permitted/listEntropySources.ts"],"names":[],"mappings":";;;AAEA,qDAAsD;AAStD,uEAAuE;AACvE,2EAA2E;AAC3E,uEAAuE;AACvE,6DAA6D;AAG7D;;;GAGG;AACH,MAAM,oBAAoB,GAAG;IAC3B,wCAAsB,CAAC,UAAU;IACjC,4CAAwB,CAAC,UAAU;IACnC,wCAAsB,CAAC,UAAU;IACjC,8BAAiB,CAAC,UAAU;CAC7B,CAAC;AAEF,MAAM,UAAU,GAAG,yBAAyB,CAAC;AAE7C,MAAM,SAAS,GAA+C;IAC5D,aAAa,EAAE,IAAI;IACnB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;CACvB,CAAC;AA0BF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACU,QAAA,yBAAyB,GAAG;IACvC,WAAW,EAAE,CAAC,UAAU,CAAU;IAClC,cAAc,EAAE,gCAAgC;IAChD,SAAS;CAKV,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,gCAAgC,CAC7C,QAAkD,EAClD,QAA0D,EAC1D,KAAc,EACd,GAA6B,EAC7B,EACE,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACQ;IAE1B,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,2BAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAE7B,QAAQ,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACtC,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors } from '@metamask/rpc-errors';\nimport type {\n EntropySource,\n JsonRpcRequest,\n ListEntropySourcesParams,\n ListEntropySourcesResult,\n} from '@metamask/snaps-sdk';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { getBip32EntropyBuilder } from '../restricted/getBip32Entropy';\nimport { getBip32PublicKeyBuilder } from '../restricted/getBip32PublicKey';\nimport { getBip44EntropyBuilder } from '../restricted/getBip44Entropy';\nimport { getEntropyBuilder } from '../restricted/getEntropy';\nimport type { MethodHooksObject } from '../utils';\n\n/**\n * A list of permissions that the requesting origin must have at least one of\n * in order to call this method.\n */\nconst REQUIRED_PERMISSIONS = [\n getBip32EntropyBuilder.targetName,\n getBip32PublicKeyBuilder.targetName,\n getBip44EntropyBuilder.targetName,\n getEntropyBuilder.targetName,\n];\n\nconst methodName = 'snap_listEntropySources';\n\nconst hookNames: MethodHooksObject<ListEntropySourcesHooks> = {\n hasPermission: true,\n getEntropySources: true,\n getUnlockPromise: true,\n};\n\nexport type ListEntropySourcesHooks = {\n /**\n * Check if the requesting origin has a given permission.\n *\n * @param permissionName - The name of the permission to check.\n * @returns Whether the origin has the permission.\n */\n hasPermission: (permissionName: string) => boolean;\n\n /**\n * Get the entropy sources from the client.\n *\n * @returns The entropy sources.\n */\n getEntropySources: () => EntropySource[];\n\n /**\n * Wait for the extension to be unlocked.\n *\n * @returns A promise that resolves once the extension is unlocked.\n */\n getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;\n};\n\n/**\n * Get a list of entropy sources available to the Snap. The requesting origin\n * must have at least one of the following permissions to access entropy source\n * metadata:\n *\n * - `snap_getBip32Entropy`\n * - `snap_getBip32PublicKey`\n * - `snap_getBip44Entropy`\n * - `snap_getEntropy`\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"snap_getBip32Entropy\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * const entropySources = await snap.request({ method: 'snap_listEntropySources' });\n * console.log(entropySources);\n * // Example output:\n * // [\n * // {\n * // name: 'Mnemonic 1',\n * // id: 'mnemonic-1',\n * // type: 'mnemonic',\n * // primary: true,\n * // },\n * // {\n * // name: 'Mnemonic 2',\n * // id: 'mnemonic-2',\n * // type: 'mnemonic',\n * // primary: false,\n * // },\n * // ]\n * ```\n */\nexport const listEntropySourcesHandler = {\n methodNames: [methodName] as const,\n implementation: listEntropySourcesImplementation,\n hookNames,\n} satisfies PermittedHandlerExport<\n ListEntropySourcesHooks,\n ListEntropySourcesParams,\n ListEntropySourcesResult\n>;\n\n/**\n * The `snap_listEntropySources` method implementation.\n *\n * @param _request - The JSON-RPC request object. Not used by this function.\n * @param response - 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.hasPermission - The function to check if the origin has a\n * permission.\n * @param hooks.getEntropySources - The function to get the entropy sources.\n * @param hooks.getUnlockPromise - The function to get the unlock promise.\n * @returns Noting.\n */\nasync function listEntropySourcesImplementation(\n _request: JsonRpcRequest<ListEntropySourcesParams>,\n response: PendingJsonRpcResponse<ListEntropySourcesResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n hasPermission,\n getEntropySources,\n getUnlockPromise,\n }: ListEntropySourcesHooks,\n): Promise<void> {\n const isPermitted = REQUIRED_PERMISSIONS.some(hasPermission);\n if (!isPermitted) {\n return end(providerErrors.unauthorized());\n }\n\n await getUnlockPromise(true);\n\n response.result = getEntropySources();\n return end();\n}\n"]}
@@ -1,5 +1,7 @@
1
- import type { PermittedHandlerExport } from "@metamask/permission-controller";
2
- import type { EntropySource, ListEntropySourcesParams, ListEntropySourcesResult } from "@metamask/snaps-sdk";
1
+ import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
+ import type { EntropySource, JsonRpcRequest, ListEntropySourcesParams, ListEntropySourcesResult } from "@metamask/snaps-sdk";
3
+ import type { PendingJsonRpcResponse } from "@metamask/utils";
4
+ import type { MethodHooksObject } from "../utils.cjs";
3
5
  export type ListEntropySourcesHooks = {
4
6
  /**
5
7
  * Check if the requesting origin has a given permission.
@@ -21,5 +23,64 @@ export type ListEntropySourcesHooks = {
21
23
  */
22
24
  getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;
23
25
  };
24
- export declare const listEntropySourcesHandler: PermittedHandlerExport<ListEntropySourcesHooks, ListEntropySourcesParams, ListEntropySourcesResult>;
26
+ /**
27
+ * Get a list of entropy sources available to the Snap. The requesting origin
28
+ * must have at least one of the following permissions to access entropy source
29
+ * metadata:
30
+ *
31
+ * - `snap_getBip32Entropy`
32
+ * - `snap_getBip32PublicKey`
33
+ * - `snap_getBip44Entropy`
34
+ * - `snap_getEntropy`
35
+ *
36
+ * @example
37
+ * ```json name="Manifest"
38
+ * {
39
+ * "initialPermissions": {
40
+ * "snap_getBip32Entropy": {}
41
+ * }
42
+ * }
43
+ * ```
44
+ * ```ts name="Usage"
45
+ * const entropySources = await snap.request({ method: 'snap_listEntropySources' });
46
+ * console.log(entropySources);
47
+ * // Example output:
48
+ * // [
49
+ * // {
50
+ * // name: 'Mnemonic 1',
51
+ * // id: 'mnemonic-1',
52
+ * // type: 'mnemonic',
53
+ * // primary: true,
54
+ * // },
55
+ * // {
56
+ * // name: 'Mnemonic 2',
57
+ * // id: 'mnemonic-2',
58
+ * // type: 'mnemonic',
59
+ * // primary: false,
60
+ * // },
61
+ * // ]
62
+ * ```
63
+ */
64
+ export declare const listEntropySourcesHandler: {
65
+ methodNames: ["snap_listEntropySources"];
66
+ implementation: typeof listEntropySourcesImplementation;
67
+ hookNames: MethodHooksObject<ListEntropySourcesHooks>;
68
+ };
69
+ /**
70
+ * The `snap_listEntropySources` method implementation.
71
+ *
72
+ * @param _request - The JSON-RPC request object. Not used by this function.
73
+ * @param response - The JSON-RPC response object.
74
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this
75
+ * function.
76
+ * @param end - The `json-rpc-engine` "end" callback.
77
+ * @param hooks - The RPC method hooks.
78
+ * @param hooks.hasPermission - The function to check if the origin has a
79
+ * permission.
80
+ * @param hooks.getEntropySources - The function to get the entropy sources.
81
+ * @param hooks.getUnlockPromise - The function to get the unlock promise.
82
+ * @returns Noting.
83
+ */
84
+ declare function listEntropySourcesImplementation(_request: JsonRpcRequest<ListEntropySourcesParams>, response: PendingJsonRpcResponse<ListEntropySourcesResult>, _next: unknown, end: JsonRpcEngineEndCallback, { hasPermission, getEntropySources, getUnlockPromise, }: ListEntropySourcesHooks): Promise<void>;
85
+ export {};
25
86
  //# sourceMappingURL=listEntropySources.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"listEntropySources.d.cts","sourceRoot":"","sources":["../../src/permitted/listEntropySources.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EACV,aAAa,EAEb,wBAAwB,EACxB,wBAAwB,EACzB,4BAA4B;AA0B7B,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;;OAKG;IACH,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IAEnD;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,aAAa,EAAE,CAAC;IAEzC;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,sBAAsB,CAC5D,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,CAKzB,CAAC"}
1
+ {"version":3,"file":"listEntropySources.d.cts","sourceRoot":"","sources":["../../src/permitted/listEntropySources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kCAAkC;AAG1E,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACzB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB;AAM9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAqBlD,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;;OAKG;IACH,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IAEnD;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,aAAa,EAAE,CAAC;IAEzC;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,yBAAyB;;;;CAQrC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,iBAAe,gCAAgC,CAC7C,QAAQ,EAAE,cAAc,CAAC,wBAAwB,CAAC,EAClD,QAAQ,EAAE,sBAAsB,CAAC,wBAAwB,CAAC,EAC1D,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EACE,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,EAAE,uBAAuB,GACzB,OAAO,CAAC,IAAI,CAAC,CAUf"}