@metamask/snaps-jest 4.0.1 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (458) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/README.md +66 -179
  3. package/dist/chunk-2KLZ7GOW.js +15 -0
  4. package/dist/chunk-2KLZ7GOW.js.map +1 -0
  5. package/dist/chunk-2M7WQ26F.js +28 -0
  6. package/dist/chunk-2M7WQ26F.js.map +1 -0
  7. package/dist/chunk-34GS3AHA.js +33 -0
  8. package/dist/chunk-34GS3AHA.js.map +1 -0
  9. package/dist/chunk-3CC2NI7R.js +80 -0
  10. package/dist/chunk-3CC2NI7R.js.map +1 -0
  11. package/dist/chunk-3IUQA6YL.mjs +1 -0
  12. package/dist/chunk-3IUQA6YL.mjs.map +1 -0
  13. package/dist/chunk-3KCEPGJA.js +39 -0
  14. package/dist/chunk-3KCEPGJA.js.map +1 -0
  15. package/dist/chunk-3KQYPQZY.js +20 -0
  16. package/dist/chunk-3KQYPQZY.js.map +1 -0
  17. package/dist/chunk-3O5OISLU.js +16 -0
  18. package/dist/chunk-3O5OISLU.js.map +1 -0
  19. package/dist/chunk-3ZW2EE3B.js +1 -0
  20. package/dist/chunk-3ZW2EE3B.js.map +1 -0
  21. package/dist/chunk-4FCRZDOX.js +134 -0
  22. package/dist/chunk-4FCRZDOX.js.map +1 -0
  23. package/dist/chunk-4HY4SM3A.js +1 -0
  24. package/dist/chunk-4HY4SM3A.js.map +1 -0
  25. package/dist/chunk-4JUUFDTC.js +104 -0
  26. package/dist/chunk-4JUUFDTC.js.map +1 -0
  27. package/dist/chunk-4VCE3DRR.mjs +34 -0
  28. package/dist/chunk-4VCE3DRR.mjs.map +1 -0
  29. package/dist/chunk-4WCFXE73.js +48 -0
  30. package/dist/chunk-4WCFXE73.js.map +1 -0
  31. package/dist/chunk-5IUHGC5S.js +153 -0
  32. package/dist/chunk-5IUHGC5S.js.map +1 -0
  33. package/dist/chunk-5O6VBW42.js +42 -0
  34. package/dist/chunk-5O6VBW42.js.map +1 -0
  35. package/dist/chunk-6IMEYERE.js +137 -0
  36. package/dist/chunk-6IMEYERE.js.map +1 -0
  37. package/dist/chunk-6KNT4UMX.mjs +35 -0
  38. package/dist/chunk-6KNT4UMX.mjs.map +1 -0
  39. package/dist/chunk-6RDNSELT.mjs +39 -0
  40. package/dist/chunk-6RDNSELT.mjs.map +1 -0
  41. package/dist/chunk-72YN2D26.mjs +60 -0
  42. package/dist/chunk-72YN2D26.mjs.map +1 -0
  43. package/dist/chunk-7JLVQJK7.js +14 -0
  44. package/dist/chunk-7JLVQJK7.js.map +1 -0
  45. package/dist/chunk-AH7YNG6N.js +22 -0
  46. package/dist/chunk-AH7YNG6N.js.map +1 -0
  47. package/dist/chunk-AIZADBRK.mjs +36 -0
  48. package/dist/chunk-AIZADBRK.mjs.map +1 -0
  49. package/dist/chunk-AKFRQ5EJ.mjs +42 -0
  50. package/dist/chunk-AKFRQ5EJ.mjs.map +1 -0
  51. package/dist/chunk-AUB7XPDH.mjs +28 -0
  52. package/dist/chunk-AUB7XPDH.mjs.map +1 -0
  53. package/dist/chunk-BJMTD7H2.mjs +20 -0
  54. package/dist/chunk-BJMTD7H2.mjs.map +1 -0
  55. package/dist/chunk-BN5VBVT3.mjs +233 -0
  56. package/dist/chunk-BN5VBVT3.mjs.map +1 -0
  57. package/dist/chunk-CKOGTHM4.mjs +22 -0
  58. package/dist/chunk-CKOGTHM4.mjs.map +1 -0
  59. package/dist/chunk-CZQKOZLR.js +11 -0
  60. package/dist/chunk-CZQKOZLR.js.map +1 -0
  61. package/dist/chunk-D36QBJ35.js +24 -0
  62. package/dist/chunk-D36QBJ35.js.map +1 -0
  63. package/dist/chunk-DEFFA5IJ.mjs +24 -0
  64. package/dist/chunk-DEFFA5IJ.mjs.map +1 -0
  65. package/dist/chunk-EFB6AQPB.js +36 -0
  66. package/dist/chunk-EFB6AQPB.js.map +1 -0
  67. package/dist/chunk-EOCDSPT7.mjs +97 -0
  68. package/dist/chunk-EOCDSPT7.mjs.map +1 -0
  69. package/dist/chunk-FPFX5AKR.mjs +36 -0
  70. package/dist/chunk-FPFX5AKR.mjs.map +1 -0
  71. package/dist/chunk-HBT34TJ2.mjs +1 -0
  72. package/dist/chunk-HBT34TJ2.mjs.map +1 -0
  73. package/dist/chunk-HBVDXIVN.mjs +80 -0
  74. package/dist/chunk-HBVDXIVN.mjs.map +1 -0
  75. package/dist/chunk-HMF2CKYT.mjs +39 -0
  76. package/dist/chunk-HMF2CKYT.mjs.map +1 -0
  77. package/dist/chunk-HP56MLQ3.js +1 -0
  78. package/dist/chunk-HP56MLQ3.js.map +1 -0
  79. package/dist/chunk-I5LVU57H.mjs +69 -0
  80. package/dist/chunk-I5LVU57H.mjs.map +1 -0
  81. package/dist/chunk-I7FLOZU7.mjs +1 -0
  82. package/dist/chunk-I7FLOZU7.mjs.map +1 -0
  83. package/dist/chunk-J2ID3DS7.mjs +33 -0
  84. package/dist/chunk-J2ID3DS7.mjs.map +1 -0
  85. package/dist/chunk-JA7RJLI7.js +34 -0
  86. package/dist/chunk-JA7RJLI7.js.map +1 -0
  87. package/dist/chunk-JB2H2XEL.mjs +1 -0
  88. package/dist/chunk-JB2H2XEL.mjs.map +1 -0
  89. package/dist/chunk-JDN3VGMO.js +21 -0
  90. package/dist/chunk-JDN3VGMO.js.map +1 -0
  91. package/dist/chunk-JGQJFYU4.js +57 -0
  92. package/dist/chunk-JGQJFYU4.js.map +1 -0
  93. package/dist/chunk-JJCX335U.mjs +91 -0
  94. package/dist/chunk-JJCX335U.mjs.map +1 -0
  95. package/dist/chunk-JMDSN227.mjs +25 -0
  96. package/dist/chunk-JMDSN227.mjs.map +1 -0
  97. package/dist/chunk-JXOKRTEH.mjs +11 -0
  98. package/dist/chunk-JXOKRTEH.mjs.map +1 -0
  99. package/dist/chunk-JZJWUVD7.mjs +1 -0
  100. package/dist/chunk-JZJWUVD7.mjs.map +1 -0
  101. package/dist/chunk-K2KTKFLP.js +76 -0
  102. package/dist/chunk-K2KTKFLP.js.map +1 -0
  103. package/dist/chunk-KGIWSGTT.js +91 -0
  104. package/dist/chunk-KGIWSGTT.js.map +1 -0
  105. package/dist/chunk-KPXLJ6RH.js +60 -0
  106. package/dist/chunk-KPXLJ6RH.js.map +1 -0
  107. package/dist/chunk-LD5PSHHT.mjs +57 -0
  108. package/dist/chunk-LD5PSHHT.mjs.map +1 -0
  109. package/dist/chunk-LNNKGOHQ.mjs +16 -0
  110. package/dist/chunk-LNNKGOHQ.mjs.map +1 -0
  111. package/dist/chunk-MNDF32ZV.js +8 -0
  112. package/dist/chunk-MNDF32ZV.js.map +1 -0
  113. package/dist/chunk-MSQ7Q2VJ.mjs +13 -0
  114. package/dist/chunk-MSQ7Q2VJ.mjs.map +1 -0
  115. package/dist/chunk-O3VJYBFN.mjs +15 -0
  116. package/dist/chunk-O3VJYBFN.mjs.map +1 -0
  117. package/dist/chunk-O4MJRHZD.js +69 -0
  118. package/dist/chunk-O4MJRHZD.js.map +1 -0
  119. package/dist/chunk-OC64PNDU.mjs +21 -0
  120. package/dist/chunk-OC64PNDU.mjs.map +1 -0
  121. package/dist/chunk-ON6M4WG5.js +36 -0
  122. package/dist/chunk-ON6M4WG5.js.map +1 -0
  123. package/dist/chunk-P7JA42ZC.mjs +153 -0
  124. package/dist/chunk-P7JA42ZC.mjs.map +1 -0
  125. package/dist/chunk-PHUTP7NB.js +25 -0
  126. package/dist/chunk-PHUTP7NB.js.map +1 -0
  127. package/dist/chunk-QFPRGU5L.mjs +104 -0
  128. package/dist/chunk-QFPRGU5L.mjs.map +1 -0
  129. package/dist/chunk-QMHWGASM.js +1 -0
  130. package/dist/chunk-QMHWGASM.js.map +1 -0
  131. package/dist/chunk-QNDLJ2W7.js +1 -0
  132. package/dist/chunk-QNDLJ2W7.js.map +1 -0
  133. package/dist/chunk-QUUILTDY.mjs +137 -0
  134. package/dist/chunk-QUUILTDY.mjs.map +1 -0
  135. package/dist/chunk-R7ORBTUD.js +1 -0
  136. package/dist/chunk-R7ORBTUD.js.map +1 -0
  137. package/dist/chunk-RQBZLDXL.js +233 -0
  138. package/dist/chunk-RQBZLDXL.js.map +1 -0
  139. package/dist/chunk-S3DHQTXB.js +1 -0
  140. package/dist/chunk-S3DHQTXB.js.map +1 -0
  141. package/dist/chunk-SWSSV3LK.js +35 -0
  142. package/dist/chunk-SWSSV3LK.js.map +1 -0
  143. package/dist/chunk-T4TRX3ZR.js +22 -0
  144. package/dist/chunk-T4TRX3ZR.js.map +1 -0
  145. package/dist/chunk-UXHKMILA.mjs +1 -0
  146. package/dist/chunk-UXHKMILA.mjs.map +1 -0
  147. package/dist/chunk-VCXM6FKU.mjs +1 -0
  148. package/dist/chunk-VCXM6FKU.mjs.map +1 -0
  149. package/dist/chunk-VHTVUQWR.mjs +14 -0
  150. package/dist/chunk-VHTVUQWR.mjs.map +1 -0
  151. package/dist/chunk-VNQIROKZ.js +97 -0
  152. package/dist/chunk-VNQIROKZ.js.map +1 -0
  153. package/dist/chunk-VXQOXWRO.mjs +48 -0
  154. package/dist/chunk-VXQOXWRO.mjs.map +1 -0
  155. package/dist/chunk-VYKYQSUI.mjs +22 -0
  156. package/dist/chunk-VYKYQSUI.mjs.map +1 -0
  157. package/dist/chunk-WEI35OIM.mjs +8 -0
  158. package/dist/chunk-WEI35OIM.mjs.map +1 -0
  159. package/dist/chunk-WL2GRM5E.mjs +76 -0
  160. package/dist/chunk-WL2GRM5E.mjs.map +1 -0
  161. package/dist/chunk-XDZPH5WD.js +39 -0
  162. package/dist/chunk-XDZPH5WD.js.map +1 -0
  163. package/dist/chunk-Y5NWZU43.js +13 -0
  164. package/dist/chunk-Y5NWZU43.js.map +1 -0
  165. package/dist/chunk-YZFWCFMG.js +1 -0
  166. package/dist/chunk-YZFWCFMG.js.map +1 -0
  167. package/dist/chunk-ZCE26WZM.mjs +1 -0
  168. package/dist/chunk-ZCE26WZM.mjs.map +1 -0
  169. package/dist/chunk-ZZPKZRJQ.mjs +134 -0
  170. package/dist/chunk-ZZPKZRJQ.mjs.map +1 -0
  171. package/dist/environment.js +47 -0
  172. package/dist/environment.js.map +1 -0
  173. package/dist/environment.mjs +47 -0
  174. package/dist/environment.mjs.map +1 -0
  175. package/dist/helpers.js +44 -0
  176. package/dist/helpers.js.map +1 -0
  177. package/dist/helpers.mjs +44 -0
  178. package/dist/helpers.mjs.map +1 -0
  179. package/dist/index.js +54 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/index.mjs +54 -0
  182. package/dist/index.mjs.map +1 -0
  183. package/dist/internals/environment.js +8 -0
  184. package/dist/internals/environment.js.map +1 -0
  185. package/dist/internals/environment.mjs +8 -0
  186. package/dist/internals/environment.mjs.map +1 -0
  187. package/dist/internals/index.js +123 -0
  188. package/dist/internals/index.js.map +1 -0
  189. package/dist/internals/index.mjs +123 -0
  190. package/dist/internals/index.mjs.map +1 -0
  191. package/dist/internals/logger.js +8 -0
  192. package/dist/internals/logger.js.map +1 -0
  193. package/dist/internals/logger.mjs +8 -0
  194. package/dist/internals/logger.mjs.map +1 -0
  195. package/dist/internals/request.js +40 -0
  196. package/dist/internals/request.js.map +1 -0
  197. package/dist/internals/request.mjs +40 -0
  198. package/dist/internals/request.mjs.map +1 -0
  199. package/dist/internals/server.js +9 -0
  200. package/dist/internals/server.js.map +1 -0
  201. package/dist/internals/server.mjs +9 -0
  202. package/dist/internals/server.mjs.map +1 -0
  203. package/dist/internals/simulation/constants.js +12 -0
  204. package/dist/internals/simulation/constants.js.map +1 -0
  205. package/dist/internals/simulation/constants.mjs +12 -0
  206. package/dist/internals/simulation/constants.mjs.map +1 -0
  207. package/dist/internals/simulation/controllers.js +26 -0
  208. package/dist/internals/simulation/controllers.js.map +1 -0
  209. package/dist/internals/simulation/controllers.mjs +26 -0
  210. package/dist/internals/simulation/controllers.mjs.map +1 -0
  211. package/dist/internals/simulation/files.js +8 -0
  212. package/dist/internals/simulation/files.js.map +1 -0
  213. package/dist/internals/simulation/files.mjs +8 -0
  214. package/dist/internals/simulation/files.mjs.map +1 -0
  215. package/dist/internals/simulation/index.js +90 -0
  216. package/dist/internals/simulation/index.js.map +1 -0
  217. package/dist/internals/simulation/index.mjs +90 -0
  218. package/dist/internals/simulation/index.mjs.map +1 -0
  219. package/dist/internals/simulation/interface.js +16 -0
  220. package/dist/internals/simulation/interface.js.map +1 -0
  221. package/dist/internals/simulation/interface.mjs +16 -0
  222. package/dist/internals/simulation/interface.mjs.map +1 -0
  223. package/dist/internals/simulation/methods/constants.js +12 -0
  224. package/dist/internals/simulation/methods/constants.js.map +1 -0
  225. package/dist/internals/simulation/methods/constants.mjs +12 -0
  226. package/dist/internals/simulation/methods/constants.mjs.map +1 -0
  227. package/dist/internals/simulation/methods/hooks/encryption.js +10 -0
  228. package/dist/internals/simulation/methods/hooks/encryption.js.map +1 -0
  229. package/dist/internals/simulation/methods/hooks/encryption.mjs +10 -0
  230. package/dist/internals/simulation/methods/hooks/encryption.mjs.map +1 -0
  231. package/dist/internals/simulation/methods/hooks/get-locale.js +8 -0
  232. package/dist/internals/simulation/methods/hooks/get-locale.js.map +1 -0
  233. package/dist/internals/simulation/methods/hooks/get-locale.mjs +8 -0
  234. package/dist/internals/simulation/methods/hooks/get-locale.mjs.map +1 -0
  235. package/dist/internals/simulation/methods/hooks/index.js +45 -0
  236. package/dist/internals/simulation/methods/hooks/index.js.map +1 -0
  237. package/dist/internals/simulation/methods/hooks/index.mjs +45 -0
  238. package/dist/internals/simulation/methods/hooks/index.mjs.map +1 -0
  239. package/dist/internals/simulation/methods/hooks/interface.js +10 -0
  240. package/dist/internals/simulation/methods/hooks/interface.js.map +1 -0
  241. package/dist/internals/simulation/methods/hooks/interface.mjs +10 -0
  242. package/dist/internals/simulation/methods/hooks/interface.mjs.map +1 -0
  243. package/dist/internals/simulation/methods/hooks/notifications.js +16 -0
  244. package/dist/internals/simulation/methods/hooks/notifications.js.map +1 -0
  245. package/dist/internals/simulation/methods/hooks/notifications.mjs +16 -0
  246. package/dist/internals/simulation/methods/hooks/notifications.mjs.map +1 -0
  247. package/dist/internals/simulation/methods/hooks/show-dialog.js +14 -0
  248. package/dist/internals/simulation/methods/hooks/show-dialog.js.map +1 -0
  249. package/dist/internals/simulation/methods/hooks/show-dialog.mjs +14 -0
  250. package/dist/internals/simulation/methods/hooks/show-dialog.mjs.map +1 -0
  251. package/dist/internals/simulation/methods/hooks/state.js +18 -0
  252. package/dist/internals/simulation/methods/hooks/state.js.map +1 -0
  253. package/dist/internals/simulation/methods/hooks/state.mjs +18 -0
  254. package/dist/internals/simulation/methods/hooks/state.mjs.map +1 -0
  255. package/dist/internals/simulation/methods/index.js +29 -0
  256. package/dist/internals/simulation/methods/index.js.map +1 -0
  257. package/dist/internals/simulation/methods/index.mjs +29 -0
  258. package/dist/internals/simulation/methods/index.mjs.map +1 -0
  259. package/dist/internals/simulation/methods/specifications.js +28 -0
  260. package/dist/internals/simulation/methods/specifications.js.map +1 -0
  261. package/dist/internals/simulation/methods/specifications.mjs +28 -0
  262. package/dist/internals/simulation/methods/specifications.mjs.map +1 -0
  263. package/dist/internals/simulation/middleware/engine.js +15 -0
  264. package/dist/internals/simulation/middleware/engine.js.map +1 -0
  265. package/dist/internals/simulation/middleware/engine.mjs +15 -0
  266. package/dist/internals/simulation/middleware/engine.mjs.map +1 -0
  267. package/dist/internals/simulation/middleware/index.js +16 -0
  268. package/dist/internals/simulation/middleware/index.js.map +1 -0
  269. package/dist/internals/simulation/middleware/index.mjs +16 -0
  270. package/dist/internals/simulation/middleware/index.mjs.map +1 -0
  271. package/dist/internals/simulation/middleware/internal-methods/accounts.js +8 -0
  272. package/dist/internals/simulation/middleware/internal-methods/accounts.js.map +1 -0
  273. package/dist/internals/simulation/middleware/internal-methods/accounts.mjs +8 -0
  274. package/dist/internals/simulation/middleware/internal-methods/accounts.mjs.map +1 -0
  275. package/dist/internals/simulation/middleware/internal-methods/index.js +11 -0
  276. package/dist/internals/simulation/middleware/internal-methods/index.js.map +1 -0
  277. package/dist/internals/simulation/middleware/internal-methods/index.mjs +11 -0
  278. package/dist/internals/simulation/middleware/internal-methods/index.mjs.map +1 -0
  279. package/dist/internals/simulation/middleware/internal-methods/middleware.js +10 -0
  280. package/dist/internals/simulation/middleware/internal-methods/middleware.js.map +1 -0
  281. package/dist/internals/simulation/middleware/internal-methods/middleware.mjs +10 -0
  282. package/dist/internals/simulation/middleware/internal-methods/middleware.mjs.map +1 -0
  283. package/dist/internals/simulation/middleware/internal-methods/provider-state.js +8 -0
  284. package/dist/internals/simulation/middleware/internal-methods/provider-state.js.map +1 -0
  285. package/dist/internals/simulation/middleware/internal-methods/provider-state.mjs +8 -0
  286. package/dist/internals/simulation/middleware/internal-methods/provider-state.mjs.map +1 -0
  287. package/dist/internals/simulation/middleware/mock.js +9 -0
  288. package/dist/internals/simulation/middleware/mock.js.map +1 -0
  289. package/dist/internals/simulation/middleware/mock.mjs +9 -0
  290. package/dist/internals/simulation/middleware/mock.mjs.map +1 -0
  291. package/dist/internals/simulation/options.js +9 -0
  292. package/dist/internals/simulation/options.js.map +1 -0
  293. package/dist/internals/simulation/options.mjs +9 -0
  294. package/dist/internals/simulation/options.mjs.map +1 -0
  295. package/dist/internals/simulation/simulation.js +39 -0
  296. package/dist/internals/simulation/simulation.js.map +1 -0
  297. package/dist/internals/simulation/simulation.mjs +39 -0
  298. package/dist/internals/simulation/simulation.mjs.map +1 -0
  299. package/dist/internals/simulation/store/index.js +44 -0
  300. package/dist/internals/simulation/store/index.js.map +1 -0
  301. package/dist/internals/simulation/store/index.mjs +44 -0
  302. package/dist/internals/simulation/store/index.mjs.map +1 -0
  303. package/dist/internals/simulation/store/mocks.js +16 -0
  304. package/dist/internals/simulation/store/mocks.js.map +1 -0
  305. package/dist/internals/simulation/store/mocks.mjs +16 -0
  306. package/dist/internals/simulation/store/mocks.mjs.map +1 -0
  307. package/dist/internals/simulation/store/notifications.js +16 -0
  308. package/dist/internals/simulation/store/notifications.js.map +1 -0
  309. package/dist/internals/simulation/store/notifications.mjs +16 -0
  310. package/dist/internals/simulation/store/notifications.mjs.map +1 -0
  311. package/dist/internals/simulation/store/state.js +14 -0
  312. package/dist/internals/simulation/store/state.js.map +1 -0
  313. package/dist/internals/simulation/store/state.mjs +14 -0
  314. package/dist/internals/simulation/store/state.mjs.map +1 -0
  315. package/dist/internals/simulation/store/store.js +12 -0
  316. package/dist/internals/simulation/store/store.js.map +1 -0
  317. package/dist/internals/simulation/store/store.mjs +12 -0
  318. package/dist/internals/simulation/store/store.mjs.map +1 -0
  319. package/dist/internals/simulation/store/ui.js +16 -0
  320. package/dist/internals/simulation/store/ui.js.map +1 -0
  321. package/dist/internals/simulation/store/ui.mjs +16 -0
  322. package/dist/internals/simulation/store/ui.mjs.map +1 -0
  323. package/dist/internals/structs.js +18 -0
  324. package/dist/internals/structs.js.map +1 -0
  325. package/dist/internals/structs.mjs +18 -0
  326. package/dist/internals/structs.mjs.map +1 -0
  327. package/dist/matchers.js +50 -0
  328. package/dist/matchers.js.map +1 -0
  329. package/dist/matchers.mjs +50 -0
  330. package/dist/matchers.mjs.map +1 -0
  331. package/dist/options.js +8 -0
  332. package/dist/options.js.map +1 -0
  333. package/dist/options.mjs +8 -0
  334. package/dist/options.mjs.map +1 -0
  335. package/dist/setup.js +39 -0
  336. package/dist/setup.js.map +1 -0
  337. package/dist/setup.mjs +39 -0
  338. package/dist/setup.mjs.map +1 -0
  339. package/dist/tsconfig.build.tsbuildinfo +1 -0
  340. package/dist/types/environment.d.ts +14 -15
  341. package/dist/types/helpers.d.ts +64 -3
  342. package/dist/types/internals/index.d.ts +1 -4
  343. package/dist/types/internals/request.d.ts +38 -74
  344. package/dist/types/internals/simulation/constants.d.ts +13 -0
  345. package/dist/types/internals/simulation/controllers.d.ts +40 -0
  346. package/dist/types/internals/simulation/files.d.ts +11 -0
  347. package/dist/types/internals/simulation/index.d.ts +5 -0
  348. package/dist/types/internals/simulation/interface.d.ts +25 -0
  349. package/dist/types/internals/simulation/methods/constants.d.ts +10 -0
  350. package/dist/types/internals/simulation/methods/hooks/encryption.d.ts +29 -0
  351. package/dist/types/internals/simulation/methods/hooks/get-locale.d.ts +9 -0
  352. package/dist/types/internals/simulation/methods/hooks/index.d.ts +6 -0
  353. package/dist/types/internals/simulation/methods/hooks/interface.d.ts +16 -0
  354. package/dist/types/internals/simulation/methods/hooks/notifications.d.ts +16 -0
  355. package/dist/types/internals/simulation/methods/hooks/show-dialog.d.ts +9 -0
  356. package/dist/types/internals/simulation/methods/hooks/state.d.ts +22 -0
  357. package/dist/types/internals/simulation/methods/index.d.ts +1 -0
  358. package/dist/types/internals/simulation/methods/specifications.d.ts +56 -0
  359. package/dist/types/internals/simulation/middleware/engine.d.ts +26 -0
  360. package/dist/types/internals/simulation/middleware/index.d.ts +1 -0
  361. package/dist/types/internals/simulation/middleware/internal-methods/accounts.d.ts +18 -0
  362. package/dist/types/internals/simulation/middleware/internal-methods/index.d.ts +1 -0
  363. package/dist/types/internals/simulation/middleware/internal-methods/middleware.d.ts +22 -0
  364. package/dist/types/internals/simulation/middleware/internal-methods/provider-state.d.ts +14 -0
  365. package/dist/types/internals/simulation/middleware/mock.d.ts +10 -0
  366. package/dist/types/internals/simulation/options.d.ts +37 -0
  367. package/dist/types/internals/simulation/simulation.d.ts +98 -0
  368. package/dist/types/internals/simulation/store/index.d.ts +4 -0
  369. package/dist/types/internals/simulation/store/mocks.d.ts +35 -0
  370. package/dist/types/internals/simulation/store/notifications.d.ts +44 -0
  371. package/dist/types/internals/simulation/store/state.d.ts +55 -0
  372. package/dist/types/internals/simulation/store/store.d.ts +22 -0
  373. package/dist/types/internals/simulation/store/ui.d.ts +25 -0
  374. package/dist/types/internals/structs.d.ts +153 -0
  375. package/dist/types/options.d.ts +3 -35
  376. package/dist/types/types.d.ts +88 -41
  377. package/dist/types/vendor/readable-stream.d.js +1 -0
  378. package/dist/types/vendor/readable-stream.d.js.map +1 -0
  379. package/dist/types/vendor/readable-stream.d.mjs +1 -0
  380. package/dist/types/vendor/readable-stream.d.mjs.map +1 -0
  381. package/dist/types.js +2 -0
  382. package/dist/types.js.map +1 -0
  383. package/dist/types.mjs +2 -0
  384. package/dist/types.mjs.map +1 -0
  385. package/jest-preset.js +1 -1
  386. package/package.json +37 -24
  387. package/dist/cjs/environment.js +0 -205
  388. package/dist/cjs/environment.js.map +0 -1
  389. package/dist/cjs/helpers.js +0 -67
  390. package/dist/cjs/helpers.js.map +0 -1
  391. package/dist/cjs/index.js +0 -42
  392. package/dist/cjs/index.js.map +0 -1
  393. package/dist/cjs/internals/environment.js +0 -19
  394. package/dist/cjs/internals/environment.js.map +0 -1
  395. package/dist/cjs/internals/index.js +0 -28
  396. package/dist/cjs/internals/index.js.map +0 -1
  397. package/dist/cjs/internals/interface.js +0 -103
  398. package/dist/cjs/internals/interface.js.map +0 -1
  399. package/dist/cjs/internals/logger.js +0 -14
  400. package/dist/cjs/internals/logger.js.map +0 -1
  401. package/dist/cjs/internals/network.js +0 -148
  402. package/dist/cjs/internals/network.js.map +0 -1
  403. package/dist/cjs/internals/request.js +0 -121
  404. package/dist/cjs/internals/request.js.map +0 -1
  405. package/dist/cjs/internals/server.js +0 -75
  406. package/dist/cjs/internals/server.js.map +0 -1
  407. package/dist/cjs/internals/structs.js +0 -122
  408. package/dist/cjs/internals/structs.js.map +0 -1
  409. package/dist/cjs/internals/types.js +0 -6
  410. package/dist/cjs/internals/types.js.map +0 -1
  411. package/dist/cjs/internals/wait-for.js +0 -63
  412. package/dist/cjs/internals/wait-for.js.map +0 -1
  413. package/dist/cjs/matchers.js +0 -117
  414. package/dist/cjs/matchers.js.map +0 -1
  415. package/dist/cjs/options.js +0 -29
  416. package/dist/cjs/options.js.map +0 -1
  417. package/dist/cjs/setup.js +0 -10
  418. package/dist/cjs/setup.js.map +0 -1
  419. package/dist/cjs/types.js +0 -6
  420. package/dist/cjs/types.js.map +0 -1
  421. package/dist/esm/environment.js +0 -182
  422. package/dist/esm/environment.js.map +0 -1
  423. package/dist/esm/helpers.js +0 -82
  424. package/dist/esm/helpers.js.map +0 -1
  425. package/dist/esm/index.js +0 -6
  426. package/dist/esm/index.js.map +0 -1
  427. package/dist/esm/internals/environment.js +0 -14
  428. package/dist/esm/internals/environment.js.map +0 -1
  429. package/dist/esm/internals/index.js +0 -12
  430. package/dist/esm/internals/index.js.map +0 -1
  431. package/dist/esm/internals/interface.js +0 -100
  432. package/dist/esm/internals/interface.js.map +0 -1
  433. package/dist/esm/internals/logger.js +0 -4
  434. package/dist/esm/internals/logger.js.map +0 -1
  435. package/dist/esm/internals/network.js +0 -143
  436. package/dist/esm/internals/network.js.map +0 -1
  437. package/dist/esm/internals/request.js +0 -120
  438. package/dist/esm/internals/request.js.map +0 -1
  439. package/dist/esm/internals/server.js +0 -68
  440. package/dist/esm/internals/server.js.map +0 -1
  441. package/dist/esm/internals/structs.js +0 -98
  442. package/dist/esm/internals/structs.js.map +0 -1
  443. package/dist/esm/internals/types.js +0 -3
  444. package/dist/esm/internals/types.js.map +0 -1
  445. package/dist/esm/internals/wait-for.js +0 -63
  446. package/dist/esm/internals/wait-for.js.map +0 -1
  447. package/dist/esm/matchers.js +0 -108
  448. package/dist/esm/matchers.js.map +0 -1
  449. package/dist/esm/options.js +0 -26
  450. package/dist/esm/options.js.map +0 -1
  451. package/dist/esm/setup.js +0 -6
  452. package/dist/esm/setup.js.map +0 -1
  453. package/dist/esm/types.js +0 -3
  454. package/dist/esm/types.js.map +0 -1
  455. package/dist/types/internals/interface.d.ts +0 -25
  456. package/dist/types/internals/network.d.ts +0 -87
  457. package/dist/types/internals/types.d.ts +0 -18
  458. package/dist/types/internals/wait-for.d.ts +0 -38
@@ -1,82 +0,0 @@
1
- import { createModuleLogger } from '@metamask/utils';
2
- import { getDocument, queries } from 'pptr-testing-library';
3
- import { getEnvironment, mock, waitFor, request, sendTransaction, runCronjob, mockJsonRpc, rootLogger } from './internals';
4
- // eslint-disable-next-line @typescript-eslint/unbound-method
5
- const { getByTestId } = queries;
6
- const log = createModuleLogger(rootLogger, 'helpers');
7
- /**
8
- * Load a snap into the environment. This is the main entry point for testing
9
- * snaps: It returns a {@link Snap} object that can be used to interact with the
10
- * snap.
11
- *
12
- * @example
13
- * ```ts
14
- * import { installSnap } from '@metamask/snaps-jest';
15
- *
16
- * describe('My Snap', () => {
17
- * it('should do something', async () => {
18
- * const { request } = await installSnap('local:my-snap');
19
- * const response = await request({
20
- * method: 'foo',
21
- * params: ['bar'],
22
- * });
23
- * expect(response).toRespondWith('bar');
24
- * });
25
- * });
26
- * ```
27
- * @param snapId - The ID of the snap, including the prefix (`local:`). Defaults
28
- * to the URL of the built-in server, if it is running. This supports both
29
- * local snap IDs and NPM snap IDs.
30
- * @returns The snap.
31
- * @throws If the built-in server is not running, and no snap ID is provided.
32
- */ export async function installSnap(snapId = getEnvironment().snapId) {
33
- const environment = getEnvironment();
34
- log('Installing snap %s.', snapId);
35
- const page = await environment.createPage();
36
- const document = await getDocument(page);
37
- log('Setting snap ID to %s.', snapId);
38
- await page.evaluate((payload)=>{
39
- window.__SIMULATOR_API__.dispatch({
40
- type: 'configuration/setSnapId',
41
- payload
42
- });
43
- }, snapId);
44
- log('Waiting for snap to install.');
45
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
46
- await waitFor(async ()=>await getByTestId(document, 'status-ok'), {
47
- timeout: 10000,
48
- message: `Timed out waiting for snap to install. Make sure the snap ID ("${snapId}") is correct, and the server is running.`
49
- });
50
- return {
51
- request: (options)=>{
52
- log('Sending request %o.', options);
53
- // Note: This function is intentionally not async, so that we can access
54
- // the `getInterface` method on the response.
55
- return request(page, options);
56
- },
57
- sendTransaction: async (options = {})=>{
58
- log('Sending transaction %o.', options);
59
- return await sendTransaction(page, options);
60
- },
61
- runCronjob: (options)=>{
62
- log('Running cronjob %o.', options);
63
- // Note: This function is intentionally not async, so that we can access
64
- // the `getInterface` method on the response.
65
- return runCronjob(page, options);
66
- },
67
- close: async ()=>{
68
- log('Closing page.');
69
- await page.close();
70
- },
71
- mock: async (options)=>{
72
- log('Mocking %o.', options);
73
- return await mock(page, options);
74
- },
75
- mockJsonRpc: async (options)=>{
76
- log('Mocking JSON-RPC %o.', options);
77
- return await mockJsonRpc(page, options);
78
- }
79
- };
80
- }
81
-
82
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/helpers.ts"],"sourcesContent":["import { createModuleLogger } from '@metamask/utils';\nimport { getDocument, queries } from 'pptr-testing-library';\n\nimport {\n getEnvironment,\n mock,\n waitFor,\n request,\n sendTransaction,\n runCronjob,\n mockJsonRpc,\n rootLogger,\n} from './internals';\nimport type { Snap, SnapResponse } from './types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst { getByTestId } = queries;\n\nconst log = createModuleLogger(rootLogger, 'helpers');\n\n/**\n * Load a snap into the environment. This is the main entry point for testing\n * snaps: It returns a {@link Snap} object that can be used to interact with the\n * snap.\n *\n * @example\n * ```ts\n * import { installSnap } from '@metamask/snaps-jest';\n *\n * describe('My Snap', () => {\n * it('should do something', async () => {\n * const { request } = await installSnap('local:my-snap');\n * const response = await request({\n * method: 'foo',\n * params: ['bar'],\n * });\n * expect(response).toRespondWith('bar');\n * });\n * });\n * ```\n * @param snapId - The ID of the snap, including the prefix (`local:`). Defaults\n * to the URL of the built-in server, if it is running. This supports both\n * local snap IDs and NPM snap IDs.\n * @returns The snap.\n * @throws If the built-in server is not running, and no snap ID is provided.\n */\nexport async function installSnap(\n snapId: string = getEnvironment().snapId,\n): Promise<Snap> {\n const environment = getEnvironment();\n\n log('Installing snap %s.', snapId);\n\n const page = await environment.createPage();\n const document = await getDocument(page);\n\n log('Setting snap ID to %s.', snapId);\n await page.evaluate((payload) => {\n window.__SIMULATOR_API__.dispatch({\n type: 'configuration/setSnapId',\n payload,\n });\n }, snapId);\n\n log('Waiting for snap to install.');\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n await waitFor(async () => await getByTestId(document, 'status-ok'), {\n timeout: 10000,\n message: `Timed out waiting for snap to install. Make sure the snap ID (\"${snapId}\") is correct, and the server is running.`,\n });\n\n return {\n request: (options) => {\n log('Sending request %o.', options);\n\n // Note: This function is intentionally not async, so that we can access\n // the `getInterface` method on the response.\n return request(page, options);\n },\n\n sendTransaction: async (options = {}): Promise<SnapResponse> => {\n log('Sending transaction %o.', options);\n\n return await sendTransaction(page, options);\n },\n\n runCronjob: (options) => {\n log('Running cronjob %o.', options);\n\n // Note: This function is intentionally not async, so that we can access\n // the `getInterface` method on the response.\n return runCronjob(page, options);\n },\n\n close: async () => {\n log('Closing page.');\n\n await page.close();\n },\n\n mock: async (options) => {\n log('Mocking %o.', options);\n\n return await mock(page, options);\n },\n\n mockJsonRpc: async (options) => {\n log('Mocking JSON-RPC %o.', options);\n\n return await mockJsonRpc(page, options);\n },\n };\n}\n"],"names":["createModuleLogger","getDocument","queries","getEnvironment","mock","waitFor","request","sendTransaction","runCronjob","mockJsonRpc","rootLogger","getByTestId","log","installSnap","snapId","environment","page","createPage","document","evaluate","payload","window","__SIMULATOR_API__","dispatch","type","timeout","message","options","close"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,kBAAkB;AACrD,SAASC,WAAW,EAAEC,OAAO,QAAQ,uBAAuB;AAE5D,SACEC,cAAc,EACdC,IAAI,EACJC,OAAO,EACPC,OAAO,EACPC,eAAe,EACfC,UAAU,EACVC,WAAW,EACXC,UAAU,QACL,cAAc;AAGrB,6DAA6D;AAC7D,MAAM,EAAEC,WAAW,EAAE,GAAGT;AAExB,MAAMU,MAAMZ,mBAAmBU,YAAY;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GACD,OAAO,eAAeG,YACpBC,SAAiBX,iBAAiBW,MAAM;IAExC,MAAMC,cAAcZ;IAEpBS,IAAI,uBAAuBE;IAE3B,MAAME,OAAO,MAAMD,YAAYE,UAAU;IACzC,MAAMC,WAAW,MAAMjB,YAAYe;IAEnCJ,IAAI,0BAA0BE;IAC9B,MAAME,KAAKG,QAAQ,CAAC,CAACC;QACnBC,OAAOC,iBAAiB,CAACC,QAAQ,CAAC;YAChCC,MAAM;YACNJ;QACF;IACF,GAAGN;IAEHF,IAAI;IACJ,kEAAkE;IAClE,MAAMP,QAAQ,UAAY,MAAMM,YAAYO,UAAU,cAAc;QAClEO,SAAS;QACTC,SAAS,CAAC,+DAA+D,EAAEZ,OAAO,yCAAyC,CAAC;IAC9H;IAEA,OAAO;QACLR,SAAS,CAACqB;YACRf,IAAI,uBAAuBe;YAE3B,wEAAwE;YACxE,6CAA6C;YAC7C,OAAOrB,QAAQU,MAAMW;QACvB;QAEApB,iBAAiB,OAAOoB,UAAU,CAAC,CAAC;YAClCf,IAAI,2BAA2Be;YAE/B,OAAO,MAAMpB,gBAAgBS,MAAMW;QACrC;QAEAnB,YAAY,CAACmB;YACXf,IAAI,uBAAuBe;YAE3B,wEAAwE;YACxE,6CAA6C;YAC7C,OAAOnB,WAAWQ,MAAMW;QAC1B;QAEAC,OAAO;YACLhB,IAAI;YAEJ,MAAMI,KAAKY,KAAK;QAClB;QAEAxB,MAAM,OAAOuB;YACXf,IAAI,eAAee;YAEnB,OAAO,MAAMvB,KAAKY,MAAMW;QAC1B;QAEAlB,aAAa,OAAOkB;YAClBf,IAAI,wBAAwBe;YAE5B,OAAO,MAAMlB,YAAYO,MAAMW;QACjC;IACF;AACF"}
package/dist/esm/index.js DELETED
@@ -1,6 +0,0 @@
1
- export { default, default as TestEnvironment } from './environment';
2
- export * from './helpers';
3
- export * from './options';
4
- export * from './types';
5
-
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export { default, default as TestEnvironment } from './environment';\nexport * from './helpers';\nexport * from './options';\nexport * from './types';\n"],"names":["default","TestEnvironment"],"mappings":"AAAA,SAASA,OAAO,EAAEA,WAAWC,eAAe,QAAQ,gBAAgB;AACpE,cAAc,YAAY;AAC1B,cAAc,YAAY;AAC1B,cAAc,UAAU"}
@@ -1,14 +0,0 @@
1
- import { assert } from '@metamask/utils';
2
- /**
3
- * Get the Snaps environment. This asserts that the environment has been
4
- * configured.
5
- *
6
- * @returns The Snaps environment.
7
- */ export function getEnvironment() {
8
- // `snapsEnvironment` is a global variable that is set by the Jest
9
- // environment.
10
- assert(snapsEnvironment, 'Snaps environment not found. Make sure you have configured the environment correctly.');
11
- return snapsEnvironment;
12
- }
13
-
14
- //# sourceMappingURL=environment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/internals/environment.ts"],"sourcesContent":["import { assert } from '@metamask/utils';\n\n/**\n * Get the Snaps environment. This asserts that the environment has been\n * configured.\n *\n * @returns The Snaps environment.\n */\nexport function getEnvironment() {\n // `snapsEnvironment` is a global variable that is set by the Jest\n // environment.\n assert(\n snapsEnvironment,\n 'Snaps environment not found. Make sure you have configured the environment correctly.',\n );\n\n return snapsEnvironment;\n}\n"],"names":["assert","getEnvironment","snapsEnvironment"],"mappings":"AAAA,SAASA,MAAM,QAAQ,kBAAkB;AAEzC;;;;;CAKC,GACD,OAAO,SAASC;IACd,kEAAkE;IAClE,eAAe;IACfD,OACEE,kBACA;IAGF,OAAOA;AACT"}
@@ -1,12 +0,0 @@
1
- export * from './environment';
2
- export * from './interface';
3
- export * from './logger';
4
- export * from './network';
5
- export * from './request';
6
- export * from './server';
7
- export * from './structs';
8
- // eslint-disable-next-line import/export
9
- export * from './types';
10
- export * from './wait-for';
11
-
12
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/internals/index.ts"],"sourcesContent":["export * from './environment';\nexport * from './interface';\nexport * from './logger';\nexport * from './network';\nexport * from './request';\nexport * from './server';\nexport * from './structs';\n// eslint-disable-next-line import/export\nexport * from './types';\nexport * from './wait-for';\n"],"names":[],"mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,cAAc;AAC5B,cAAc,WAAW;AACzB,cAAc,YAAY;AAC1B,cAAc,YAAY;AAC1B,cAAc,WAAW;AACzB,cAAc,YAAY;AAC1B,yCAAyC;AACzC,cAAc,UAAU;AACxB,cAAc,aAAa"}
@@ -1,100 +0,0 @@
1
- import { DialogType } from '@metamask/snaps-sdk';
2
- import { assert } from '@metamask/utils';
3
- import { create } from 'superstruct';
4
- import { SnapOptionsStruct } from './structs';
5
- import { waitFor } from './wait-for';
6
- /**
7
- * Get the current snap user interface (i.e., dialog). This will throw an error
8
- * if the snap does not show a user interface within the timeout.
9
- *
10
- * @param page - The page to get the interface from.
11
- * @param options - The options to use.
12
- * @param options.timeout - The timeout in milliseconds to use. Defaults to
13
- * `1000`.
14
- * @returns The user interface object.
15
- */ export async function getInterface(page, options = {}) {
16
- const { timeout } = create(options, SnapOptionsStruct);
17
- const { type, node: content } = await waitFor(async ()=>{
18
- const ui = await page.evaluate(()=>{
19
- const state = window.__SIMULATOR_API__.getState();
20
- return state.simulation.ui;
21
- });
22
- assert(ui);
23
- return ui;
24
- }, {
25
- timeout,
26
- message: 'Timed out waiting for snap interface to be shown.'
27
- });
28
- switch(type){
29
- case DialogType.Alert:
30
- return {
31
- type: 'alert',
32
- content,
33
- ok: async ()=>{
34
- await page.evaluate(()=>{
35
- window.__SIMULATOR_API__.dispatch({
36
- type: 'simulation/resolveUserInterface',
37
- payload: null
38
- });
39
- });
40
- }
41
- };
42
- case DialogType.Confirmation:
43
- return {
44
- type: 'confirmation',
45
- content,
46
- ok: async ()=>{
47
- await page.evaluate(()=>{
48
- window.__SIMULATOR_API__.dispatch({
49
- type: 'simulation/resolveUserInterface',
50
- payload: true
51
- });
52
- });
53
- },
54
- cancel: async ()=>{
55
- await page.evaluate(()=>{
56
- window.__SIMULATOR_API__.dispatch({
57
- type: 'simulation/resolveUserInterface',
58
- payload: false
59
- });
60
- });
61
- }
62
- };
63
- case DialogType.Prompt:
64
- return {
65
- type: 'prompt',
66
- content,
67
- ok: async (value)=>{
68
- await page.evaluate((payload)=>{
69
- window.__SIMULATOR_API__.dispatch({
70
- type: 'simulation/resolveUserInterface',
71
- payload
72
- });
73
- }, value);
74
- },
75
- cancel: async ()=>{
76
- await page.evaluate(()=>{
77
- window.__SIMULATOR_API__.dispatch({
78
- type: 'simulation/resolveUserInterface',
79
- payload: null
80
- });
81
- });
82
- }
83
- };
84
- default:
85
- throw new Error(`Unknown or unsupported dialog type: ${String(type)}.`);
86
- }
87
- }
88
- /**
89
- * Get the text of the notifications.
90
- *
91
- * @param page - The page to get the notifications from.
92
- * @param requestId - The ID of the request to get the notifications for.
93
- * @returns The text of the notifications, in order of appearance.
94
- */ export async function getNotifications(page, requestId) {
95
- return await page.evaluate((id)=>{
96
- return window.__SIMULATOR_API__.getNotifications(id);
97
- }, requestId);
98
- }
99
-
100
- //# sourceMappingURL=interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/internals/interface.ts"],"sourcesContent":["import { DialogType } from '@metamask/snaps-sdk';\nimport { assert } from '@metamask/utils';\nimport type { Page } from 'puppeteer';\nimport { create } from 'superstruct';\n\nimport type { SnapInterface, SnapOptions } from '../types';\nimport { SnapOptionsStruct } from './structs';\nimport { waitFor } from './wait-for';\n\n/**\n * Get the current snap user interface (i.e., dialog). This will throw an error\n * if the snap does not show a user interface within the timeout.\n *\n * @param page - The page to get the interface from.\n * @param options - The options to use.\n * @param options.timeout - The timeout in milliseconds to use. Defaults to\n * `1000`.\n * @returns The user interface object.\n */\nexport async function getInterface(\n page: Page,\n options: SnapOptions = {},\n): Promise<SnapInterface> {\n const { timeout } = create(options, SnapOptionsStruct);\n\n const { type, node: content } = await waitFor(\n async () => {\n const ui = await page.evaluate(() => {\n const state = window.__SIMULATOR_API__.getState();\n return state.simulation.ui;\n });\n\n assert(ui);\n return ui;\n },\n {\n timeout,\n message: 'Timed out waiting for snap interface to be shown.',\n },\n );\n\n switch (type) {\n case DialogType.Alert:\n return {\n type: 'alert',\n content,\n\n ok: async () => {\n await page.evaluate(() => {\n window.__SIMULATOR_API__.dispatch({\n type: 'simulation/resolveUserInterface',\n payload: null,\n });\n });\n },\n };\n\n case DialogType.Confirmation:\n return {\n type: 'confirmation',\n content,\n\n ok: async () => {\n await page.evaluate(() => {\n window.__SIMULATOR_API__.dispatch({\n type: 'simulation/resolveUserInterface',\n payload: true,\n });\n });\n },\n\n cancel: async () => {\n await page.evaluate(() => {\n window.__SIMULATOR_API__.dispatch({\n type: 'simulation/resolveUserInterface',\n payload: false,\n });\n });\n },\n };\n\n case DialogType.Prompt:\n return {\n type: 'prompt',\n content,\n\n ok: async (value) => {\n await page.evaluate((payload) => {\n window.__SIMULATOR_API__.dispatch({\n type: 'simulation/resolveUserInterface',\n payload,\n });\n }, value);\n },\n\n cancel: async () => {\n await page.evaluate(() => {\n window.__SIMULATOR_API__.dispatch({\n type: 'simulation/resolveUserInterface',\n payload: null,\n });\n });\n },\n };\n\n default:\n throw new Error(`Unknown or unsupported dialog type: ${String(type)}.`);\n }\n}\n\n/**\n * Get the text of the notifications.\n *\n * @param page - The page to get the notifications from.\n * @param requestId - The ID of the request to get the notifications for.\n * @returns The text of the notifications, in order of appearance.\n */\nexport async function getNotifications(page: Page, requestId: string) {\n return await page.evaluate((id) => {\n return window.__SIMULATOR_API__.getNotifications(id);\n }, requestId);\n}\n"],"names":["DialogType","assert","create","SnapOptionsStruct","waitFor","getInterface","page","options","timeout","type","node","content","ui","evaluate","state","window","__SIMULATOR_API__","getState","simulation","message","Alert","ok","dispatch","payload","Confirmation","cancel","Prompt","value","Error","String","getNotifications","requestId","id"],"mappings":"AAAA,SAASA,UAAU,QAAQ,sBAAsB;AACjD,SAASC,MAAM,QAAQ,kBAAkB;AAEzC,SAASC,MAAM,QAAQ,cAAc;AAGrC,SAASC,iBAAiB,QAAQ,YAAY;AAC9C,SAASC,OAAO,QAAQ,aAAa;AAErC;;;;;;;;;CASC,GACD,OAAO,eAAeC,aACpBC,IAAU,EACVC,UAAuB,CAAC,CAAC;IAEzB,MAAM,EAAEC,OAAO,EAAE,GAAGN,OAAOK,SAASJ;IAEpC,MAAM,EAAEM,IAAI,EAAEC,MAAMC,OAAO,EAAE,GAAG,MAAMP,QACpC;QACE,MAAMQ,KAAK,MAAMN,KAAKO,QAAQ,CAAC;YAC7B,MAAMC,QAAQC,OAAOC,iBAAiB,CAACC,QAAQ;YAC/C,OAAOH,MAAMI,UAAU,CAACN,EAAE;QAC5B;QAEAX,OAAOW;QACP,OAAOA;IACT,GACA;QACEJ;QACAW,SAAS;IACX;IAGF,OAAQV;QACN,KAAKT,WAAWoB,KAAK;YACnB,OAAO;gBACLX,MAAM;gBACNE;gBAEAU,IAAI;oBACF,MAAMf,KAAKO,QAAQ,CAAC;wBAClBE,OAAOC,iBAAiB,CAACM,QAAQ,CAAC;4BAChCb,MAAM;4BACNc,SAAS;wBACX;oBACF;gBACF;YACF;QAEF,KAAKvB,WAAWwB,YAAY;YAC1B,OAAO;gBACLf,MAAM;gBACNE;gBAEAU,IAAI;oBACF,MAAMf,KAAKO,QAAQ,CAAC;wBAClBE,OAAOC,iBAAiB,CAACM,QAAQ,CAAC;4BAChCb,MAAM;4BACNc,SAAS;wBACX;oBACF;gBACF;gBAEAE,QAAQ;oBACN,MAAMnB,KAAKO,QAAQ,CAAC;wBAClBE,OAAOC,iBAAiB,CAACM,QAAQ,CAAC;4BAChCb,MAAM;4BACNc,SAAS;wBACX;oBACF;gBACF;YACF;QAEF,KAAKvB,WAAW0B,MAAM;YACpB,OAAO;gBACLjB,MAAM;gBACNE;gBAEAU,IAAI,OAAOM;oBACT,MAAMrB,KAAKO,QAAQ,CAAC,CAACU;wBACnBR,OAAOC,iBAAiB,CAACM,QAAQ,CAAC;4BAChCb,MAAM;4BACNc;wBACF;oBACF,GAAGI;gBACL;gBAEAF,QAAQ;oBACN,MAAMnB,KAAKO,QAAQ,CAAC;wBAClBE,OAAOC,iBAAiB,CAACM,QAAQ,CAAC;4BAChCb,MAAM;4BACNc,SAAS;wBACX;oBACF;gBACF;YACF;QAEF;YACE,MAAM,IAAIK,MAAM,CAAC,oCAAoC,EAAEC,OAAOpB,MAAM,CAAC,CAAC;IAC1E;AACF;AAEA;;;;;;CAMC,GACD,OAAO,eAAeqB,iBAAiBxB,IAAU,EAAEyB,SAAiB;IAClE,OAAO,MAAMzB,KAAKO,QAAQ,CAAC,CAACmB;QAC1B,OAAOjB,OAAOC,iBAAiB,CAACc,gBAAgB,CAACE;IACnD,GAAGD;AACL"}
@@ -1,4 +0,0 @@
1
- import { createProjectLogger } from '@metamask/utils';
2
- export const rootLogger = createProjectLogger('snaps-jest');
3
-
4
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/internals/logger.ts"],"sourcesContent":["import { createProjectLogger } from '@metamask/utils';\n\nexport const rootLogger = createProjectLogger('snaps-jest');\n"],"names":["createProjectLogger","rootLogger"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,kBAAkB;AAEtD,OAAO,MAAMC,aAAaD,oBAAoB,cAAc"}
@@ -1,143 +0,0 @@
1
- import { JSON_RPC_ENDPOINT } from '@metamask/snaps-simulator';
2
- import { createModuleLogger, UnsafeJsonStruct } from '@metamask/utils';
3
- import { assign, boolean, create, defaulted, number, object, optional, record, regexp, string, union, unknown, func } from 'superstruct';
4
- import { rootLogger } from './logger';
5
- /**
6
- * The default headers to use for mocked responses. These headers are used to
7
- * enable CORS.
8
- */ const DEFAULT_HEADERS = {
9
- /* eslint-disable @typescript-eslint/naming-convention */ 'Access-Control-Allow-Origin': '*',
10
- 'Access-Control-Allow-Credentials': 'true',
11
- 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
12
- 'Access-Control-Allow-Headers': 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers'
13
- };
14
- const log = createModuleLogger(rootLogger, 'network');
15
- const MockOptionsBaseStruct = object({
16
- response: defaulted(object({
17
- status: defaulted(number(), 200),
18
- headers: defaulted(record(string(), unknown()), DEFAULT_HEADERS),
19
- contentType: defaulted(string(), 'text/plain'),
20
- // Note: We default to a newline here, because the fetch request never
21
- // resolves if the body is empty.
22
- body: defaulted(string(), '\n')
23
- }), {})
24
- });
25
- const MockOptionsUrlStruct = object({
26
- url: union([
27
- string(),
28
- regexp()
29
- ]),
30
- partial: optional(boolean())
31
- });
32
- const MockOptionsConditionStruct = object({
33
- condition: func()
34
- });
35
- export const MockOptionsStruct = union([
36
- assign(MockOptionsBaseStruct, MockOptionsUrlStruct),
37
- assign(MockOptionsBaseStruct, MockOptionsConditionStruct)
38
- ]);
39
- /**
40
- * Check if the given URL matches the given request, or if the condition
41
- * function returns `true`.
42
- *
43
- * @param request - The request to check.
44
- * @param options - The options for the network mocking.
45
- * @returns Whether the URL matches the request.
46
- */ function matches(request, options) {
47
- if ('url' in options) {
48
- const { url, partial } = options;
49
- if (typeof url === 'string') {
50
- if (partial) {
51
- return request.url().startsWith(url);
52
- }
53
- return url === request.url();
54
- }
55
- return url.test(request.url());
56
- }
57
- const { condition } = options;
58
- return condition(request);
59
- }
60
- /**
61
- * Enable network mocking for the given page, and all its sub-frames.
62
- *
63
- * @param page - The page to enable network mocking on.
64
- * @param options - The options for the network mocking.
65
- * @returns A {@link Mock} object, with an `unmock` function.
66
- */ export async function mock(page, options) {
67
- await page.setRequestInterception(true);
68
- const parsedOptions = create(options, MockOptionsStruct);
69
- /**
70
- * The mock handler.
71
- *
72
- * @param request - The request to handle.
73
- */ function handler(request) {
74
- // If the request is already handled, Puppeteer will throw an error if we
75
- // try to continue the request.
76
- if (request.isInterceptResolutionHandled()) {
77
- return;
78
- }
79
- if (!matches(request, parsedOptions)) {
80
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
81
- request.continue();
82
- return;
83
- }
84
- log('Mocking request to %s', request.url());
85
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
86
- request.respond(parsedOptions.response);
87
- }
88
- /**
89
- * Unmock the page.
90
- */ async function unmock() {
91
- await page.setRequestInterception(false);
92
- page.off('request', handler);
93
- }
94
- page.on('request', handler);
95
- return {
96
- unmock
97
- };
98
- }
99
- const MockJsonRpcOptionsStruct = object({
100
- method: string(),
101
- result: UnsafeJsonStruct
102
- });
103
- /**
104
- * Mock an Ethereum JSON-RPC request. This intercepts all requests to the
105
- * Ethereum provider, and returns the `result` instead.
106
- *
107
- * @param page - The page to enable network JSON-RPC mocking on.
108
- * @param options - The options for the JSON-RPC mock.
109
- * @param options.method - The JSON-RPC method to mock. Any other methods will be
110
- * forwarded to the provider.
111
- * @param options.result - The JSON response to return.
112
- * @returns A {@link Mock} object, with an `unmock` function.
113
- */ export async function mockJsonRpc(page, { method, result }) {
114
- return await mock(page, {
115
- condition: (request)=>{
116
- if (request.url() !== JSON_RPC_ENDPOINT) {
117
- return false;
118
- }
119
- const body = request.postData();
120
- if (!body) {
121
- return false;
122
- }
123
- try {
124
- const json = JSON.parse(body);
125
- return json.method === method;
126
- } catch (error) {
127
- log(`Unable to mock "${method}" request to Ethereum provider: %s`, error.message);
128
- return false;
129
- }
130
- },
131
- response: {
132
- status: 200,
133
- contentType: 'application/json',
134
- body: JSON.stringify({
135
- jsonrpc: '2.0',
136
- id: 1,
137
- result
138
- })
139
- }
140
- });
141
- }
142
-
143
- //# sourceMappingURL=network.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/internals/network.ts"],"sourcesContent":["import { JSON_RPC_ENDPOINT } from '@metamask/snaps-simulator';\nimport { createModuleLogger, UnsafeJsonStruct } from '@metamask/utils';\nimport type { Page, HTTPRequest } from 'puppeteer';\nimport type { Infer, Struct } from 'superstruct';\nimport {\n assign,\n boolean,\n create,\n defaulted,\n number,\n object,\n optional,\n record,\n regexp,\n string,\n union,\n unknown,\n func,\n} from 'superstruct';\n\nimport type { DeepPartial } from '../types';\nimport { rootLogger } from './logger';\n\n/**\n * The default headers to use for mocked responses. These headers are used to\n * enable CORS.\n */\nconst DEFAULT_HEADERS = {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Credentials': 'true',\n 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',\n 'Access-Control-Allow-Headers':\n 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers',\n /* eslint-enable @typescript-eslint/naming-convention */\n};\n\nconst log = createModuleLogger(rootLogger, 'network');\n\nexport type Unmock = () => Promise<void>;\n\nexport type Mock = {\n /**\n * A function that can be used to unmock the URL.\n */\n unmock: Unmock;\n};\n\n/**\n * A function that can return `true` if the given request should be mocked, or\n * false if not.\n *\n * @param request - The request to check.\n * @returns Whether to mock the request.\n */\nexport type ConditionFunction = (request: HTTPRequest) => boolean;\n\nconst MockOptionsBaseStruct = object({\n response: defaulted(\n object({\n status: defaulted(number(), 200),\n headers: defaulted(record(string(), unknown()), DEFAULT_HEADERS),\n contentType: defaulted(string(), 'text/plain'),\n\n // Note: We default to a newline here, because the fetch request never\n // resolves if the body is empty.\n body: defaulted(string(), '\\n'),\n }),\n {},\n ),\n});\n\nconst MockOptionsUrlStruct = object({\n url: union([string(), regexp()]),\n partial: optional(boolean()),\n});\n\nconst MockOptionsConditionStruct = object({\n condition: func() as unknown as Struct<ConditionFunction, null>,\n});\n\nexport const MockOptionsStruct = union([\n assign(MockOptionsBaseStruct, MockOptionsUrlStruct),\n assign(MockOptionsBaseStruct, MockOptionsConditionStruct),\n]);\n\n/**\n * The options for the network mocking.\n *\n * @property url - The URL to mock. If a string is provided, the URL will be\n * matched exactly. If a RegExp is provided, the URL will be matched against it.\n * This option is incompatible with the `condition` option.\n * @property partial - If enabled, the request will be mocked if the URL starts\n * with the given URL. This option is ignored if a RegExp is provided to the\n * `url` option. This option is incompatible with the `condition` option.\n * @property condition - A function which gets the {@link HTTPRequest} as\n * parameter and returns a boolean to indicate whether the response should be\n * mocked or not. This option is incompatible with the `url` and `partial`\n * options.\n * @property response - The response to send for the request.\n * @property response.status - The status code to send for the response.\n * Defaults to `200`.\n * @property response.headers - The headers to send for the response. Defaults\n * to headers that enable CORS.\n * @property response.contentType - The content type to send for the response.\n * Defaults to `text/plain`.\n */\nexport type MockOptions = Infer<typeof MockOptionsStruct>;\n\n/**\n * Check if the given URL matches the given request, or if the condition\n * function returns `true`.\n *\n * @param request - The request to check.\n * @param options - The options for the network mocking.\n * @returns Whether the URL matches the request.\n */\nfunction matches(request: HTTPRequest, options: MockOptions) {\n if ('url' in options) {\n const { url, partial } = options;\n if (typeof url === 'string') {\n if (partial) {\n return request.url().startsWith(url);\n }\n\n return url === request.url();\n }\n\n return url.test(request.url());\n }\n\n const { condition } = options;\n return condition(request);\n}\n\n/**\n * Enable network mocking for the given page, and all its sub-frames.\n *\n * @param page - The page to enable network mocking on.\n * @param options - The options for the network mocking.\n * @returns A {@link Mock} object, with an `unmock` function.\n */\nexport async function mock(\n page: Page,\n options: DeepPartial<MockOptions>,\n): Promise<Mock> {\n await page.setRequestInterception(true);\n\n const parsedOptions = create(options, MockOptionsStruct);\n\n /**\n * The mock handler.\n *\n * @param request - The request to handle.\n */\n function handler(request: HTTPRequest) {\n // If the request is already handled, Puppeteer will throw an error if we\n // try to continue the request.\n if (request.isInterceptResolutionHandled()) {\n return;\n }\n\n if (!matches(request, parsedOptions)) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n request.continue();\n return;\n }\n\n log('Mocking request to %s', request.url());\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n request.respond(parsedOptions.response);\n }\n\n /**\n * Unmock the page.\n */\n async function unmock() {\n await page.setRequestInterception(false);\n page.off('request', handler);\n }\n\n page.on('request', handler);\n\n return {\n unmock,\n };\n}\n\nconst MockJsonRpcOptionsStruct = object({\n method: string(),\n result: UnsafeJsonStruct,\n});\n\nexport type MockJsonRpcOptions = Infer<typeof MockJsonRpcOptionsStruct>;\n\n/**\n * Mock an Ethereum JSON-RPC request. This intercepts all requests to the\n * Ethereum provider, and returns the `result` instead.\n *\n * @param page - The page to enable network JSON-RPC mocking on.\n * @param options - The options for the JSON-RPC mock.\n * @param options.method - The JSON-RPC method to mock. Any other methods will be\n * forwarded to the provider.\n * @param options.result - The JSON response to return.\n * @returns A {@link Mock} object, with an `unmock` function.\n */\nexport async function mockJsonRpc(\n page: Page,\n { method, result }: MockJsonRpcOptions,\n) {\n return await mock(page, {\n condition: (request: HTTPRequest) => {\n if (request.url() !== JSON_RPC_ENDPOINT) {\n return false;\n }\n\n const body = request.postData();\n if (!body) {\n return false;\n }\n\n try {\n const json = JSON.parse(body);\n return json.method === method;\n } catch (error) {\n log(\n `Unable to mock \"${method}\" request to Ethereum provider: %s`,\n error.message,\n );\n return false;\n }\n },\n response: {\n status: 200,\n contentType: 'application/json',\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n result,\n }),\n },\n });\n}\n"],"names":["JSON_RPC_ENDPOINT","createModuleLogger","UnsafeJsonStruct","assign","boolean","create","defaulted","number","object","optional","record","regexp","string","union","unknown","func","rootLogger","DEFAULT_HEADERS","log","MockOptionsBaseStruct","response","status","headers","contentType","body","MockOptionsUrlStruct","url","partial","MockOptionsConditionStruct","condition","MockOptionsStruct","matches","request","options","startsWith","test","mock","page","setRequestInterception","parsedOptions","handler","isInterceptResolutionHandled","continue","respond","unmock","off","on","MockJsonRpcOptionsStruct","method","result","mockJsonRpc","postData","json","JSON","parse","error","message","stringify","jsonrpc","id"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,kBAAkB,EAAEC,gBAAgB,QAAQ,kBAAkB;AAGvE,SACEC,MAAM,EACNC,OAAO,EACPC,MAAM,EACNC,SAAS,EACTC,MAAM,EACNC,MAAM,EACNC,QAAQ,EACRC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,IAAI,QACC,cAAc;AAGrB,SAASC,UAAU,QAAQ,WAAW;AAEtC;;;CAGC,GACD,MAAMC,kBAAkB;IACtB,uDAAuD,GACvD,+BAA+B;IAC/B,oCAAoC;IACpC,gCAAgC;IAChC,gCACE;AAEJ;AAEA,MAAMC,MAAMjB,mBAAmBe,YAAY;AAoB3C,MAAMG,wBAAwBX,OAAO;IACnCY,UAAUd,UACRE,OAAO;QACLa,QAAQf,UAAUC,UAAU;QAC5Be,SAAShB,UAAUI,OAAOE,UAAUE,YAAYG;QAChDM,aAAajB,UAAUM,UAAU;QAEjC,sEAAsE;QACtE,iCAAiC;QACjCY,MAAMlB,UAAUM,UAAU;IAC5B,IACA,CAAC;AAEL;AAEA,MAAMa,uBAAuBjB,OAAO;IAClCkB,KAAKb,MAAM;QAACD;QAAUD;KAAS;IAC/BgB,SAASlB,SAASL;AACpB;AAEA,MAAMwB,6BAA6BpB,OAAO;IACxCqB,WAAWd;AACb;AAEA,OAAO,MAAMe,oBAAoBjB,MAAM;IACrCV,OAAOgB,uBAAuBM;IAC9BtB,OAAOgB,uBAAuBS;CAC/B,EAAE;AAyBH;;;;;;;CAOC,GACD,SAASG,QAAQC,OAAoB,EAAEC,OAAoB;IACzD,IAAI,SAASA,SAAS;QACpB,MAAM,EAAEP,GAAG,EAAEC,OAAO,EAAE,GAAGM;QACzB,IAAI,OAAOP,QAAQ,UAAU;YAC3B,IAAIC,SAAS;gBACX,OAAOK,QAAQN,GAAG,GAAGQ,UAAU,CAACR;YAClC;YAEA,OAAOA,QAAQM,QAAQN,GAAG;QAC5B;QAEA,OAAOA,IAAIS,IAAI,CAACH,QAAQN,GAAG;IAC7B;IAEA,MAAM,EAAEG,SAAS,EAAE,GAAGI;IACtB,OAAOJ,UAAUG;AACnB;AAEA;;;;;;CAMC,GACD,OAAO,eAAeI,KACpBC,IAAU,EACVJ,OAAiC;IAEjC,MAAMI,KAAKC,sBAAsB,CAAC;IAElC,MAAMC,gBAAgBlC,OAAO4B,SAASH;IAEtC;;;;GAIC,GACD,SAASU,QAAQR,OAAoB;QACnC,yEAAyE;QACzE,+BAA+B;QAC/B,IAAIA,QAAQS,4BAA4B,IAAI;YAC1C;QACF;QAEA,IAAI,CAACV,QAAQC,SAASO,gBAAgB;YACpC,mEAAmE;YACnEP,QAAQU,QAAQ;YAChB;QACF;QAEAxB,IAAI,yBAAyBc,QAAQN,GAAG;QAExC,mEAAmE;QACnEM,QAAQW,OAAO,CAACJ,cAAcnB,QAAQ;IACxC;IAEA;;GAEC,GACD,eAAewB;QACb,MAAMP,KAAKC,sBAAsB,CAAC;QAClCD,KAAKQ,GAAG,CAAC,WAAWL;IACtB;IAEAH,KAAKS,EAAE,CAAC,WAAWN;IAEnB,OAAO;QACLI;IACF;AACF;AAEA,MAAMG,2BAA2BvC,OAAO;IACtCwC,QAAQpC;IACRqC,QAAQ/C;AACV;AAIA;;;;;;;;;;CAUC,GACD,OAAO,eAAegD,YACpBb,IAAU,EACV,EAAEW,MAAM,EAAEC,MAAM,EAAsB;IAEtC,OAAO,MAAMb,KAAKC,MAAM;QACtBR,WAAW,CAACG;YACV,IAAIA,QAAQN,GAAG,OAAO1B,mBAAmB;gBACvC,OAAO;YACT;YAEA,MAAMwB,OAAOQ,QAAQmB,QAAQ;YAC7B,IAAI,CAAC3B,MAAM;gBACT,OAAO;YACT;YAEA,IAAI;gBACF,MAAM4B,OAAOC,KAAKC,KAAK,CAAC9B;gBACxB,OAAO4B,KAAKJ,MAAM,KAAKA;YACzB,EAAE,OAAOO,OAAO;gBACdrC,IACE,CAAC,gBAAgB,EAAE8B,OAAO,kCAAkC,CAAC,EAC7DO,MAAMC,OAAO;gBAEf,OAAO;YACT;QACF;QACApC,UAAU;YACRC,QAAQ;YACRE,aAAa;YACbC,MAAM6B,KAAKI,SAAS,CAAC;gBACnBC,SAAS;gBACTC,IAAI;gBACJV;YACF;QACF;IACF;AACF"}
@@ -1,120 +0,0 @@
1
- import { HandlerType } from '@metamask/snaps-utils';
2
- import { assert, createModuleLogger, hasProperty, isPlainObject } from '@metamask/utils';
3
- import { getDocument, queries } from 'pptr-testing-library';
4
- import { create } from 'superstruct';
5
- import { getInterface, getNotifications } from './interface';
6
- import { rootLogger } from './logger';
7
- import { TransactionOptionsStruct } from './structs';
8
- import { waitForResponse } from './wait-for';
9
- const log = createModuleLogger(rootLogger, 'request');
10
- /**
11
- * Send a request to the snap.
12
- *
13
- * @param page - The page to send the request from.
14
- * @param args - The request arguments.
15
- * @returns The request ID.
16
- */ async function sendRequest(page, args) {
17
- const document = await getDocument(page);
18
- const button = await queries.getByTestId(document, `navigation-${args.handler}`);
19
- // Navigate to the request handler page.
20
- await button.click();
21
- return await page.evaluate((payload)=>{
22
- window.__SIMULATOR_API__.dispatch({
23
- type: 'simulation/sendRequest',
24
- payload
25
- });
26
- return window.__SIMULATOR_API__.getRequestId();
27
- }, args);
28
- }
29
- /**
30
- * Send a request to the snap.
31
- *
32
- * @param page - The page to send the request from.
33
- * @param options - The request options.
34
- * @param options.origin - The origin of the request. Defaults to `metamask.io`.
35
- * @param handler - The handler to use. Defaults to `onRpcRequest`.
36
- * @returns The response.
37
- */ export function request(page, { origin = 'metamask.io', ...options }, handler = HandlerType.OnRpcRequest) {
38
- const doRequest = async ()=>{
39
- const args = {
40
- origin,
41
- handler,
42
- request: {
43
- jsonrpc: '2.0',
44
- id: 1,
45
- ...options
46
- }
47
- };
48
- log('Sending request %o', args);
49
- const promise = waitForResponse(page, handler);
50
- const id = await sendRequest(page, args);
51
- const response = await promise;
52
- log('Received response %o', response);
53
- const notifications = await getNotifications(page, id);
54
- return {
55
- id,
56
- response,
57
- notifications
58
- };
59
- };
60
- // This is a bit hacky, but it allows us to add the `getInterface` method
61
- // to the response promise.
62
- const response = doRequest();
63
- response.getInterface = async (getInterfaceOptions)=>{
64
- return await getInterface(page, getInterfaceOptions);
65
- };
66
- return response;
67
- }
68
- /**
69
- * Send a transaction to the snap.
70
- *
71
- * @param page - The page to send the transaction from.
72
- * @param options - The transaction options.
73
- * @returns The response.
74
- */ export async function sendTransaction(page, options) {
75
- const { origin: transactionOrigin, chainId, ...transaction } = create(options, TransactionOptionsStruct);
76
- const args = {
77
- origin: '',
78
- handler: HandlerType.OnTransaction,
79
- request: {
80
- jsonrpc: '2.0',
81
- method: '',
82
- params: {
83
- chainId,
84
- transaction,
85
- transactionOrigin
86
- }
87
- }
88
- };
89
- log('Sending transaction %o', args);
90
- const promise = waitForResponse(page, HandlerType.OnTransaction);
91
- const id = await sendRequest(page, args);
92
- const response = await promise;
93
- log('Received response %o', response);
94
- if (hasProperty(response, 'error')) {
95
- return {
96
- id,
97
- response,
98
- notifications: []
99
- };
100
- }
101
- assert(isPlainObject(response.result));
102
- assert(hasProperty(response.result, 'content'));
103
- return {
104
- id,
105
- response,
106
- notifications: [],
107
- content: response.result.content
108
- };
109
- }
110
- /**
111
- * Run a cronjob.
112
- *
113
- * @param page - The page to run the cronjob from.
114
- * @param options - The request options.
115
- * @returns The response.
116
- */ export function runCronjob(page, options) {
117
- return request(page, options, HandlerType.OnCronjob);
118
- }
119
-
120
- //# sourceMappingURL=request.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/internals/request.ts"],"sourcesContent":["import type { Component } from '@metamask/snaps-sdk';\nimport type { SnapRpcHookArgs } from '@metamask/snaps-utils';\nimport { HandlerType } from '@metamask/snaps-utils';\nimport {\n assert,\n createModuleLogger,\n hasProperty,\n isPlainObject,\n} from '@metamask/utils';\nimport { getDocument, queries } from 'pptr-testing-library';\nimport type { Page } from 'puppeteer';\nimport { create } from 'superstruct';\n\nimport type {\n CronjobOptions,\n RequestOptions,\n SnapRequest,\n SnapResponse,\n TransactionOptions,\n} from '../types';\nimport { getInterface, getNotifications } from './interface';\nimport { rootLogger } from './logger';\nimport { TransactionOptionsStruct } from './structs';\nimport { waitForResponse } from './wait-for';\n\nconst log = createModuleLogger(rootLogger, 'request');\n\n/**\n * Send a request to the snap.\n *\n * @param page - The page to send the request from.\n * @param args - The request arguments.\n * @returns The request ID.\n */\nasync function sendRequest(page: Page, args: SnapRpcHookArgs) {\n const document = await getDocument(page);\n const button = await queries.getByTestId(\n document,\n `navigation-${args.handler}`,\n );\n\n // Navigate to the request handler page.\n await button.click();\n\n return await page.evaluate((payload) => {\n window.__SIMULATOR_API__.dispatch({\n type: 'simulation/sendRequest',\n payload,\n });\n\n return window.__SIMULATOR_API__.getRequestId();\n }, args);\n}\n\n/**\n * Send a request to the snap.\n *\n * @param page - The page to send the request from.\n * @param options - The request options.\n * @param options.origin - The origin of the request. Defaults to `metamask.io`.\n * @param handler - The handler to use. Defaults to `onRpcRequest`.\n * @returns The response.\n */\nexport function request(\n page: Page,\n { origin = 'metamask.io', ...options }: RequestOptions,\n handler:\n | HandlerType.OnRpcRequest\n | HandlerType.OnCronjob = HandlerType.OnRpcRequest,\n) {\n const doRequest = async (): Promise<SnapResponse> => {\n const args: SnapRpcHookArgs = {\n origin,\n handler,\n request: {\n jsonrpc: '2.0',\n id: 1,\n ...options,\n },\n };\n\n log('Sending request %o', args);\n\n const promise = waitForResponse(page, handler);\n const id = await sendRequest(page, args);\n const response = await promise;\n\n log('Received response %o', response);\n\n const notifications = await getNotifications(page, id);\n\n return { id, response, notifications };\n };\n\n // This is a bit hacky, but it allows us to add the `getInterface` method\n // to the response promise.\n const response = doRequest() as SnapRequest;\n\n response.getInterface = async (getInterfaceOptions) => {\n return await getInterface(page, getInterfaceOptions);\n };\n\n return response;\n}\n\n/**\n * Send a transaction to the snap.\n *\n * @param page - The page to send the transaction from.\n * @param options - The transaction options.\n * @returns The response.\n */\nexport async function sendTransaction(\n page: Page,\n options: Partial<TransactionOptions>,\n) {\n const {\n origin: transactionOrigin,\n chainId,\n ...transaction\n } = create(options, TransactionOptionsStruct);\n\n const args: SnapRpcHookArgs = {\n origin: '',\n handler: HandlerType.OnTransaction,\n request: {\n jsonrpc: '2.0',\n method: '',\n params: {\n chainId,\n transaction,\n transactionOrigin,\n },\n },\n };\n\n log('Sending transaction %o', args);\n\n const promise = waitForResponse(page, HandlerType.OnTransaction);\n const id = await sendRequest(page, args);\n const response = await promise;\n\n log('Received response %o', response);\n\n if (hasProperty(response, 'error')) {\n return { id, response, notifications: [] };\n }\n\n assert(isPlainObject(response.result));\n assert(hasProperty(response.result, 'content'));\n\n return {\n id,\n response,\n notifications: [],\n content: response.result.content as Component,\n };\n}\n\n/**\n * Run a cronjob.\n *\n * @param page - The page to run the cronjob from.\n * @param options - The request options.\n * @returns The response.\n */\nexport function runCronjob(page: Page, options: CronjobOptions) {\n return request(page, options, HandlerType.OnCronjob);\n}\n"],"names":["HandlerType","assert","createModuleLogger","hasProperty","isPlainObject","getDocument","queries","create","getInterface","getNotifications","rootLogger","TransactionOptionsStruct","waitForResponse","log","sendRequest","page","args","document","button","getByTestId","handler","click","evaluate","payload","window","__SIMULATOR_API__","dispatch","type","getRequestId","request","origin","options","OnRpcRequest","doRequest","jsonrpc","id","promise","response","notifications","getInterfaceOptions","sendTransaction","transactionOrigin","chainId","transaction","OnTransaction","method","params","result","content","runCronjob","OnCronjob"],"mappings":"AAEA,SAASA,WAAW,QAAQ,wBAAwB;AACpD,SACEC,MAAM,EACNC,kBAAkB,EAClBC,WAAW,EACXC,aAAa,QACR,kBAAkB;AACzB,SAASC,WAAW,EAAEC,OAAO,QAAQ,uBAAuB;AAE5D,SAASC,MAAM,QAAQ,cAAc;AASrC,SAASC,YAAY,EAAEC,gBAAgB,QAAQ,cAAc;AAC7D,SAASC,UAAU,QAAQ,WAAW;AACtC,SAASC,wBAAwB,QAAQ,YAAY;AACrD,SAASC,eAAe,QAAQ,aAAa;AAE7C,MAAMC,MAAMX,mBAAmBQ,YAAY;AAE3C;;;;;;CAMC,GACD,eAAeI,YAAYC,IAAU,EAAEC,IAAqB;IAC1D,MAAMC,WAAW,MAAMZ,YAAYU;IACnC,MAAMG,SAAS,MAAMZ,QAAQa,WAAW,CACtCF,UACA,CAAC,WAAW,EAAED,KAAKI,OAAO,CAAC,CAAC;IAG9B,wCAAwC;IACxC,MAAMF,OAAOG,KAAK;IAElB,OAAO,MAAMN,KAAKO,QAAQ,CAAC,CAACC;QAC1BC,OAAOC,iBAAiB,CAACC,QAAQ,CAAC;YAChCC,MAAM;YACNJ;QACF;QAEA,OAAOC,OAAOC,iBAAiB,CAACG,YAAY;IAC9C,GAAGZ;AACL;AAEA;;;;;;;;CAQC,GACD,OAAO,SAASa,QACdd,IAAU,EACV,EAAEe,SAAS,aAAa,EAAE,GAAGC,SAAyB,EACtDX,UAE4BpB,YAAYgC,YAAY;IAEpD,MAAMC,YAAY;QAChB,MAAMjB,OAAwB;YAC5Bc;YACAV;YACAS,SAAS;gBACPK,SAAS;gBACTC,IAAI;gBACJ,GAAGJ,OAAO;YACZ;QACF;QAEAlB,IAAI,sBAAsBG;QAE1B,MAAMoB,UAAUxB,gBAAgBG,MAAMK;QACtC,MAAMe,KAAK,MAAMrB,YAAYC,MAAMC;QACnC,MAAMqB,WAAW,MAAMD;QAEvBvB,IAAI,wBAAwBwB;QAE5B,MAAMC,gBAAgB,MAAM7B,iBAAiBM,MAAMoB;QAEnD,OAAO;YAAEA;YAAIE;YAAUC;QAAc;IACvC;IAEA,yEAAyE;IACzE,2BAA2B;IAC3B,MAAMD,WAAWJ;IAEjBI,SAAS7B,YAAY,GAAG,OAAO+B;QAC7B,OAAO,MAAM/B,aAAaO,MAAMwB;IAClC;IAEA,OAAOF;AACT;AAEA;;;;;;CAMC,GACD,OAAO,eAAeG,gBACpBzB,IAAU,EACVgB,OAAoC;IAEpC,MAAM,EACJD,QAAQW,iBAAiB,EACzBC,OAAO,EACP,GAAGC,aACJ,GAAGpC,OAAOwB,SAASpB;IAEpB,MAAMK,OAAwB;QAC5Bc,QAAQ;QACRV,SAASpB,YAAY4C,aAAa;QAClCf,SAAS;YACPK,SAAS;YACTW,QAAQ;YACRC,QAAQ;gBACNJ;gBACAC;gBACAF;YACF;QACF;IACF;IAEA5B,IAAI,0BAA0BG;IAE9B,MAAMoB,UAAUxB,gBAAgBG,MAAMf,YAAY4C,aAAa;IAC/D,MAAMT,KAAK,MAAMrB,YAAYC,MAAMC;IACnC,MAAMqB,WAAW,MAAMD;IAEvBvB,IAAI,wBAAwBwB;IAE5B,IAAIlC,YAAYkC,UAAU,UAAU;QAClC,OAAO;YAAEF;YAAIE;YAAUC,eAAe,EAAE;QAAC;IAC3C;IAEArC,OAAOG,cAAciC,SAASU,MAAM;IACpC9C,OAAOE,YAAYkC,SAASU,MAAM,EAAE;IAEpC,OAAO;QACLZ;QACAE;QACAC,eAAe,EAAE;QACjBU,SAASX,SAASU,MAAM,CAACC,OAAO;IAClC;AACF;AAEA;;;;;;CAMC,GACD,OAAO,SAASC,WAAWlC,IAAU,EAAEgB,OAAuB;IAC5D,OAAOF,QAAQd,MAAMgB,SAAS/B,YAAYkD,SAAS;AACrD"}
@@ -1,68 +0,0 @@
1
- import { assertIsSnapManifest, isDirectory, isFile } from '@metamask/snaps-utils';
2
- import { createModuleLogger } from '@metamask/utils';
3
- import express from 'express';
4
- import { promises as fs } from 'fs';
5
- import { createServer } from 'http';
6
- import { resolve as pathResolve, dirname } from 'path';
7
- import { rootLogger } from './logger';
8
- const SNAPS_EXECUTION_ENVIRONMENTS_PATH = pathResolve(dirname(require.resolve('@metamask/snaps-execution-environments/package.json')), 'dist', 'browserify', 'iframe');
9
- const SNAPS_SIMULATOR_PATH = pathResolve(dirname(require.resolve('@metamask/snaps-simulator/package.json')), 'dist', 'webpack', 'test');
10
- /**
11
- * Check that:
12
- *
13
- * - The root directory exists.
14
- * - The root directory contains a `snap.manifest.json` file.
15
- * - The file path in the manifest exists.
16
- *
17
- * @param root - The root directory.
18
- * @throws If any of the checks fail.
19
- */ async function assertRoot(root) {
20
- if (!root) {
21
- throw new Error('You must specify a root directory.');
22
- }
23
- if (!await isDirectory(root, false)) {
24
- throw new Error(`Root directory "${root}" is not a directory.`);
25
- }
26
- const manifestPath = pathResolve(root, 'snap.manifest.json');
27
- const manifest = await fs.readFile(manifestPath, 'utf8').then(JSON.parse);
28
- assertIsSnapManifest(manifest);
29
- const filePath = pathResolve(root, manifest.source.location.npm.filePath);
30
- if (!await isFile(filePath)) {
31
- throw new Error(`File "${filePath}" does not exist, or is not a file. Did you forget to build your snap?`);
32
- }
33
- }
34
- /**
35
- * Start an HTTP server on `localhost` with a random port. This is used to serve
36
- * the static files for the environment.
37
- *
38
- * @param options - The options to use.
39
- * @param options.port - The port to use for the server.
40
- * @param options.root - The root directory to serve from the server.
41
- * @returns The HTTP server.
42
- */ export async function startServer(options) {
43
- await assertRoot(options.root);
44
- const log = createModuleLogger(rootLogger, 'server');
45
- const app = express();
46
- app.use((_request, response, next)=>{
47
- response.header('Access-Control-Allow-Origin', '*');
48
- response.header('Access-Control-Allow-Credentials', 'true');
49
- response.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
50
- response.header('Access-Control-Allow-Headers', 'Content-Type');
51
- next();
52
- });
53
- app.use('/environment', express.static(SNAPS_EXECUTION_ENVIRONMENTS_PATH));
54
- app.use('/simulator', express.static(SNAPS_SIMULATOR_PATH));
55
- app.use(express.static(pathResolve(process.cwd(), options.root)));
56
- const server = createServer(app);
57
- return await new Promise((resolve, reject)=>{
58
- server.listen(options.port, ()=>{
59
- resolve(server);
60
- });
61
- server.on('error', (error)=>{
62
- log(error);
63
- reject(error);
64
- });
65
- });
66
- }
67
-
68
- //# sourceMappingURL=server.js.map