rise-wallet 0.1.4-beta.2 → 0.2.29

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 (738) hide show
  1. package/README.md +64 -34
  2. package/dist/cli/Dialog.d.ts +35 -0
  3. package/dist/cli/Dialog.d.ts.map +1 -0
  4. package/dist/cli/Dialog.js +60 -0
  5. package/dist/cli/Dialog.js.map +1 -0
  6. package/dist/cli/Messenger.d.ts +8 -0
  7. package/dist/cli/Messenger.d.ts.map +1 -0
  8. package/dist/cli/Messenger.js +123 -0
  9. package/dist/cli/Messenger.js.map +1 -0
  10. package/dist/cli/bin/commands-o468kGU4.js +50 -0
  11. package/dist/cli/bin/index.js +9 -0
  12. package/dist/cli/index.d.ts +3 -0
  13. package/dist/cli/index.d.ts.map +1 -0
  14. package/dist/cli/index.js +3 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/cli/internal/commands.d.ts +13 -0
  17. package/dist/cli/internal/commands.d.ts.map +1 -0
  18. package/dist/cli/internal/commands.js +180 -0
  19. package/dist/cli/internal/commands.js.map +1 -0
  20. package/dist/cli/internal/context.d.ts +521 -0
  21. package/dist/cli/internal/context.d.ts.map +1 -0
  22. package/dist/cli/internal/context.js +38 -0
  23. package/dist/cli/internal/context.js.map +1 -0
  24. package/dist/cli/internal/http.d.ts +7 -0
  25. package/dist/cli/internal/http.d.ts.map +1 -0
  26. package/dist/cli/internal/http.js +17 -0
  27. package/dist/cli/internal/http.js.map +1 -0
  28. package/dist/cli/internal/utils.d.ts +7 -0
  29. package/dist/cli/internal/utils.d.ts.map +1 -0
  30. package/dist/cli/internal/utils.js +24 -0
  31. package/dist/cli/internal/utils.js.map +1 -0
  32. package/dist/core/Chains.d.ts +211 -0
  33. package/dist/core/Chains.d.ts.map +1 -0
  34. package/dist/core/Chains.js +20 -0
  35. package/dist/core/Chains.js.map +1 -0
  36. package/dist/core/Dialog.d.ts +308 -0
  37. package/dist/core/Dialog.d.ts.map +1 -0
  38. package/dist/core/Dialog.js +809 -0
  39. package/dist/core/Dialog.js.map +1 -0
  40. package/dist/core/Messenger.d.ts +165 -0
  41. package/dist/core/Messenger.d.ts.map +1 -0
  42. package/dist/core/Messenger.js +207 -0
  43. package/dist/core/Messenger.js.map +1 -0
  44. package/dist/core/Mode.d.ts +5 -0
  45. package/dist/core/Mode.d.ts.map +1 -0
  46. package/dist/core/Mode.js +5 -0
  47. package/dist/core/Mode.js.map +1 -0
  48. package/dist/core/Porto.d.ts +1609 -0
  49. package/dist/core/Porto.d.ts.map +1 -0
  50. package/dist/core/Porto.js +105 -0
  51. package/dist/core/Porto.js.map +1 -0
  52. package/dist/core/RpcSchema.d.ts +82 -0
  53. package/dist/core/RpcSchema.d.ts.map +1 -0
  54. package/dist/core/RpcSchema.js +2 -0
  55. package/dist/core/RpcSchema.js.map +1 -0
  56. package/dist/core/Storage.d.ts +15 -0
  57. package/dist/core/Storage.d.ts.map +1 -0
  58. package/dist/core/Storage.js +109 -0
  59. package/dist/core/Storage.js.map +1 -0
  60. package/dist/core/Transport.d.ts +23 -0
  61. package/dist/core/Transport.d.ts.map +1 -0
  62. package/dist/core/Transport.js +37 -0
  63. package/dist/core/Transport.js.map +1 -0
  64. package/dist/core/internal/_generated/chains.d.ts +2 -0
  65. package/dist/core/internal/_generated/chains.d.ts.map +1 -0
  66. package/dist/core/internal/_generated/chains.js +3 -0
  67. package/dist/core/internal/_generated/chains.js.map +1 -0
  68. package/dist/core/internal/_generated/contracts/EIP7702Proxy.d.ts +18 -0
  69. package/dist/core/internal/_generated/contracts/EIP7702Proxy.d.ts.map +1 -0
  70. package/dist/core/internal/_generated/contracts/EIP7702Proxy.js +24 -0
  71. package/dist/core/internal/_generated/contracts/EIP7702Proxy.js.map +1 -0
  72. package/dist/core/internal/_generated/contracts/Escrow.d.ts +256 -0
  73. package/dist/core/internal/_generated/contracts/Escrow.d.ts.map +1 -0
  74. package/dist/core/internal/_generated/contracts/Escrow.js +329 -0
  75. package/dist/core/internal/_generated/contracts/Escrow.js.map +1 -0
  76. package/dist/core/internal/_generated/contracts/ExperimentERC20.d.ts +440 -0
  77. package/dist/core/internal/_generated/contracts/ExperimentERC20.d.ts.map +1 -0
  78. package/dist/core/internal/_generated/contracts/ExperimentERC20.js +568 -0
  79. package/dist/core/internal/_generated/contracts/ExperimentERC20.js.map +1 -0
  80. package/dist/core/internal/_generated/contracts/ExperimentERC721.d.ts +456 -0
  81. package/dist/core/internal/_generated/contracts/ExperimentERC721.d.ts.map +1 -0
  82. package/dist/core/internal/_generated/contracts/ExperimentERC721.js +587 -0
  83. package/dist/core/internal/_generated/contracts/ExperimentERC721.js.map +1 -0
  84. package/dist/core/internal/_generated/contracts/GuardedExecutor.d.ts +482 -0
  85. package/dist/core/internal/_generated/contracts/GuardedExecutor.d.ts.map +1 -0
  86. package/dist/core/internal/_generated/contracts/GuardedExecutor.js +622 -0
  87. package/dist/core/internal/_generated/contracts/GuardedExecutor.js.map +1 -0
  88. package/dist/core/internal/_generated/contracts/ICallChecker.d.ts +25 -0
  89. package/dist/core/internal/_generated/contracts/ICallChecker.d.ts.map +1 -0
  90. package/dist/core/internal/_generated/contracts/ICallChecker.js +33 -0
  91. package/dist/core/internal/_generated/contracts/ICallChecker.js.map +1 -0
  92. package/dist/core/internal/_generated/contracts/ICommon.d.ts +3 -0
  93. package/dist/core/internal/_generated/contracts/ICommon.d.ts.map +1 -0
  94. package/dist/core/internal/_generated/contracts/ICommon.js +3 -0
  95. package/dist/core/internal/_generated/contracts/ICommon.js.map +1 -0
  96. package/dist/core/internal/_generated/contracts/IEscrow.d.ts +88 -0
  97. package/dist/core/internal/_generated/contracts/IEscrow.d.ts.map +1 -0
  98. package/dist/core/internal/_generated/contracts/IEscrow.js +113 -0
  99. package/dist/core/internal/_generated/contracts/IEscrow.js.map +1 -0
  100. package/dist/core/internal/_generated/contracts/IFunder.d.ts +61 -0
  101. package/dist/core/internal/_generated/contracts/IFunder.d.ts.map +1 -0
  102. package/dist/core/internal/_generated/contracts/IFunder.js +79 -0
  103. package/dist/core/internal/_generated/contracts/IFunder.js.map +1 -0
  104. package/dist/core/internal/_generated/contracts/IFunderV4.d.ts +34 -0
  105. package/dist/core/internal/_generated/contracts/IFunderV4.d.ts.map +1 -0
  106. package/dist/core/internal/_generated/contracts/IFunderV4.js +44 -0
  107. package/dist/core/internal/_generated/contracts/IFunderV4.js.map +1 -0
  108. package/dist/core/internal/_generated/contracts/IIthacaAccount.d.ts +81 -0
  109. package/dist/core/internal/_generated/contracts/IIthacaAccount.d.ts.map +1 -0
  110. package/dist/core/internal/_generated/contracts/IIthacaAccount.js +106 -0
  111. package/dist/core/internal/_generated/contracts/IIthacaAccount.js.map +1 -0
  112. package/dist/core/internal/_generated/contracts/IOAppCore.d.ts +108 -0
  113. package/dist/core/internal/_generated/contracts/IOAppCore.d.ts.map +1 -0
  114. package/dist/core/internal/_generated/contracts/IOAppCore.js +141 -0
  115. package/dist/core/internal/_generated/contracts/IOAppCore.js.map +1 -0
  116. package/dist/core/internal/_generated/contracts/IOAppMsgInspector.d.ts +33 -0
  117. package/dist/core/internal/_generated/contracts/IOAppMsgInspector.d.ts.map +1 -0
  118. package/dist/core/internal/_generated/contracts/IOAppMsgInspector.js +44 -0
  119. package/dist/core/internal/_generated/contracts/IOAppMsgInspector.js.map +1 -0
  120. package/dist/core/internal/_generated/contracts/IOAppReceiver.d.ts +122 -0
  121. package/dist/core/internal/_generated/contracts/IOAppReceiver.d.ts.map +1 -0
  122. package/dist/core/internal/_generated/contracts/IOAppReceiver.js +160 -0
  123. package/dist/core/internal/_generated/contracts/IOAppReceiver.js.map +1 -0
  124. package/dist/core/internal/_generated/contracts/IOrchestrator.d.ts +71 -0
  125. package/dist/core/internal/_generated/contracts/IOrchestrator.d.ts.map +1 -0
  126. package/dist/core/internal/_generated/contracts/IOrchestrator.js +94 -0
  127. package/dist/core/internal/_generated/contracts/IOrchestrator.js.map +1 -0
  128. package/dist/core/internal/_generated/contracts/ISettler.d.ts +39 -0
  129. package/dist/core/internal/_generated/contracts/ISettler.d.ts.map +1 -0
  130. package/dist/core/internal/_generated/contracts/ISettler.js +51 -0
  131. package/dist/core/internal/_generated/contracts/ISettler.js.map +1 -0
  132. package/dist/core/internal/_generated/contracts/ISigner.d.ts +25 -0
  133. package/dist/core/internal/_generated/contracts/ISigner.d.ts.map +1 -0
  134. package/dist/core/internal/_generated/contracts/ISigner.js +33 -0
  135. package/dist/core/internal/_generated/contracts/ISigner.js.map +1 -0
  136. package/dist/core/internal/_generated/contracts/IthacaAccount.d.ts +1121 -0
  137. package/dist/core/internal/_generated/contracts/IthacaAccount.d.ts.map +1 -0
  138. package/dist/core/internal/_generated/contracts/IthacaAccount.js +1453 -0
  139. package/dist/core/internal/_generated/contracts/IthacaAccount.js.map +1 -0
  140. package/dist/core/internal/_generated/contracts/IthacaAccountNew.d.ts +1121 -0
  141. package/dist/core/internal/_generated/contracts/IthacaAccountNew.d.ts.map +1 -0
  142. package/dist/core/internal/_generated/contracts/IthacaAccountNew.js +1453 -0
  143. package/dist/core/internal/_generated/contracts/IthacaAccountNew.js.map +1 -0
  144. package/dist/core/internal/_generated/contracts/IthacaAccountOld.d.ts +1121 -0
  145. package/dist/core/internal/_generated/contracts/IthacaAccountOld.d.ts.map +1 -0
  146. package/dist/core/internal/_generated/contracts/IthacaAccountOld.js +1453 -0
  147. package/dist/core/internal/_generated/contracts/IthacaAccountOld.js.map +1 -0
  148. package/dist/core/internal/_generated/contracts/LayerZeroSettler.d.ts +621 -0
  149. package/dist/core/internal/_generated/contracts/LayerZeroSettler.d.ts.map +1 -0
  150. package/dist/core/internal/_generated/contracts/LayerZeroSettler.js +810 -0
  151. package/dist/core/internal/_generated/contracts/LayerZeroSettler.js.map +1 -0
  152. package/dist/core/internal/_generated/contracts/LibNonce.d.ts +11 -0
  153. package/dist/core/internal/_generated/contracts/LibNonce.d.ts.map +1 -0
  154. package/dist/core/internal/_generated/contracts/LibNonce.js +14 -0
  155. package/dist/core/internal/_generated/contracts/LibNonce.js.map +1 -0
  156. package/dist/core/internal/_generated/contracts/LibTStack.d.ts +3 -0
  157. package/dist/core/internal/_generated/contracts/LibTStack.d.ts.map +1 -0
  158. package/dist/core/internal/_generated/contracts/LibTStack.js +3 -0
  159. package/dist/core/internal/_generated/contracts/LibTStack.js.map +1 -0
  160. package/dist/core/internal/_generated/contracts/MultiSigSigner.d.ts +157 -0
  161. package/dist/core/internal/_generated/contracts/MultiSigSigner.d.ts.map +1 -0
  162. package/dist/core/internal/_generated/contracts/MultiSigSigner.js +202 -0
  163. package/dist/core/internal/_generated/contracts/MultiSigSigner.js.map +1 -0
  164. package/dist/core/internal/_generated/contracts/OApp.d.ts +314 -0
  165. package/dist/core/internal/_generated/contracts/OApp.d.ts.map +1 -0
  166. package/dist/core/internal/_generated/contracts/OApp.js +411 -0
  167. package/dist/core/internal/_generated/contracts/OApp.js.map +1 -0
  168. package/dist/core/internal/_generated/contracts/OAppCore.d.ts +175 -0
  169. package/dist/core/internal/_generated/contracts/OAppCore.d.ts.map +1 -0
  170. package/dist/core/internal/_generated/contracts/OAppCore.js +228 -0
  171. package/dist/core/internal/_generated/contracts/OAppCore.js.map +1 -0
  172. package/dist/core/internal/_generated/contracts/OAppReceiver.d.ts +302 -0
  173. package/dist/core/internal/_generated/contracts/OAppReceiver.d.ts.map +1 -0
  174. package/dist/core/internal/_generated/contracts/OAppReceiver.js +395 -0
  175. package/dist/core/internal/_generated/contracts/OAppReceiver.js.map +1 -0
  176. package/dist/core/internal/_generated/contracts/OAppSender.d.ts +187 -0
  177. package/dist/core/internal/_generated/contracts/OAppSender.d.ts.map +1 -0
  178. package/dist/core/internal/_generated/contracts/OAppSender.js +244 -0
  179. package/dist/core/internal/_generated/contracts/OAppSender.js.map +1 -0
  180. package/dist/core/internal/_generated/contracts/Orchestrator.d.ts +302 -0
  181. package/dist/core/internal/_generated/contracts/Orchestrator.d.ts.map +1 -0
  182. package/dist/core/internal/_generated/contracts/Orchestrator.js +389 -0
  183. package/dist/core/internal/_generated/contracts/Orchestrator.js.map +1 -0
  184. package/dist/core/internal/_generated/contracts/SimpleFunder.d.ts +413 -0
  185. package/dist/core/internal/_generated/contracts/SimpleFunder.d.ts.map +1 -0
  186. package/dist/core/internal/_generated/contracts/SimpleFunder.js +533 -0
  187. package/dist/core/internal/_generated/contracts/SimpleFunder.js.map +1 -0
  188. package/dist/core/internal/_generated/contracts/SimpleSettler.d.ts +280 -0
  189. package/dist/core/internal/_generated/contracts/SimpleSettler.d.ts.map +1 -0
  190. package/dist/core/internal/_generated/contracts/SimpleSettler.js +359 -0
  191. package/dist/core/internal/_generated/contracts/SimpleSettler.js.map +1 -0
  192. package/dist/core/internal/_generated/contracts/Simulator.d.ts +131 -0
  193. package/dist/core/internal/_generated/contracts/Simulator.d.ts.map +1 -0
  194. package/dist/core/internal/_generated/contracts/Simulator.js +169 -0
  195. package/dist/core/internal/_generated/contracts/Simulator.js.map +1 -0
  196. package/dist/core/internal/_generated/contracts/TokenTransferLib.d.ts +3 -0
  197. package/dist/core/internal/_generated/contracts/TokenTransferLib.d.ts.map +1 -0
  198. package/dist/core/internal/_generated/contracts/TokenTransferLib.js +3 -0
  199. package/dist/core/internal/_generated/contracts/TokenTransferLib.js.map +1 -0
  200. package/dist/core/internal/call.d.ts +164 -0
  201. package/dist/core/internal/call.d.ts.map +1 -0
  202. package/dist/core/internal/call.js +115 -0
  203. package/dist/core/internal/call.js.map +1 -0
  204. package/dist/core/internal/erc8010.d.ts +18 -0
  205. package/dist/core/internal/erc8010.d.ts.map +1 -0
  206. package/dist/core/internal/erc8010.js +29 -0
  207. package/dist/core/internal/erc8010.js.map +1 -0
  208. package/dist/core/internal/intersectionObserver.d.ts +2 -0
  209. package/dist/core/internal/intersectionObserver.d.ts.map +1 -0
  210. package/dist/core/internal/intersectionObserver.js +5 -0
  211. package/dist/core/internal/intersectionObserver.js.map +1 -0
  212. package/dist/core/internal/logger.d.ts +22 -0
  213. package/dist/core/internal/logger.d.ts.map +1 -0
  214. package/dist/core/internal/logger.js +24 -0
  215. package/dist/core/internal/logger.js.map +1 -0
  216. package/dist/core/internal/mode.d.ts +345 -0
  217. package/dist/core/internal/mode.d.ts.map +1 -0
  218. package/dist/core/internal/mode.js +110 -0
  219. package/dist/core/internal/mode.js.map +1 -0
  220. package/dist/core/internal/modes/dialog.d.ts +800 -0
  221. package/dist/core/internal/modes/dialog.d.ts.map +1 -0
  222. package/dist/core/internal/modes/dialog.js +760 -0
  223. package/dist/core/internal/modes/dialog.js.map +1 -0
  224. package/dist/core/internal/modes/reactNative.d.ts +1402 -0
  225. package/dist/core/internal/modes/reactNative.d.ts.map +1 -0
  226. package/dist/core/internal/modes/reactNative.js +19 -0
  227. package/dist/core/internal/modes/reactNative.js.map +1 -0
  228. package/dist/core/internal/modes/relay.d.ts +685 -0
  229. package/dist/core/internal/modes/relay.d.ts.map +1 -0
  230. package/dist/core/internal/modes/relay.js +708 -0
  231. package/dist/core/internal/modes/relay.js.map +1 -0
  232. package/dist/core/internal/permissions.d.ts +60 -0
  233. package/dist/core/internal/permissions.d.ts.map +1 -0
  234. package/dist/core/internal/permissions.js +30 -0
  235. package/dist/core/internal/permissions.js.map +1 -0
  236. package/dist/core/internal/permissionsRequest.d.ts +72 -0
  237. package/dist/core/internal/permissionsRequest.d.ts.map +1 -0
  238. package/dist/core/internal/permissionsRequest.js +58 -0
  239. package/dist/core/internal/permissionsRequest.js.map +1 -0
  240. package/dist/core/internal/porto.d.ts +14 -0
  241. package/dist/core/internal/porto.d.ts.map +1 -0
  242. package/dist/core/internal/porto.js +2 -0
  243. package/dist/core/internal/porto.js.map +1 -0
  244. package/dist/core/internal/promise.d.ts +9 -0
  245. package/dist/core/internal/promise.d.ts.map +1 -0
  246. package/dist/core/internal/promise.js +11 -0
  247. package/dist/core/internal/promise.js.map +1 -0
  248. package/dist/core/internal/provider.d.ts +30 -0
  249. package/dist/core/internal/provider.d.ts.map +1 -0
  250. package/dist/core/internal/provider.js +944 -0
  251. package/dist/core/internal/provider.js.map +1 -0
  252. package/dist/core/internal/relay/rpcSchema.d.ts +76 -0
  253. package/dist/core/internal/relay/rpcSchema.d.ts.map +1 -0
  254. package/dist/core/internal/relay/rpcSchema.js +7 -0
  255. package/dist/core/internal/relay/rpcSchema.js.map +1 -0
  256. package/dist/core/internal/relay/schema/capabilities.d.ts +165 -0
  257. package/dist/core/internal/relay/schema/capabilities.d.ts.map +1 -0
  258. package/dist/core/internal/relay/schema/capabilities.js +112 -0
  259. package/dist/core/internal/relay/schema/capabilities.js.map +1 -0
  260. package/dist/core/internal/relay/schema/intent.d.ts +168 -0
  261. package/dist/core/internal/relay/schema/intent.d.ts.map +1 -0
  262. package/dist/core/internal/relay/schema/intent.js +170 -0
  263. package/dist/core/internal/relay/schema/intent.js.map +1 -0
  264. package/dist/core/internal/relay/schema/key.d.ts +44 -0
  265. package/dist/core/internal/relay/schema/key.d.ts.map +1 -0
  266. package/dist/core/internal/relay/schema/key.js +30 -0
  267. package/dist/core/internal/relay/schema/key.js.map +1 -0
  268. package/dist/core/internal/relay/schema/permission.d.ts +40 -0
  269. package/dist/core/internal/relay/schema/permission.d.ts.map +1 -0
  270. package/dist/core/internal/relay/schema/permission.js +29 -0
  271. package/dist/core/internal/relay/schema/permission.js.map +1 -0
  272. package/dist/core/internal/relay/schema/preCall.d.ts +63 -0
  273. package/dist/core/internal/relay/schema/preCall.d.ts.map +1 -0
  274. package/dist/core/internal/relay/schema/preCall.js +36 -0
  275. package/dist/core/internal/relay/schema/preCall.js.map +1 -0
  276. package/dist/core/internal/relay/schema/quotes.d.ts +370 -0
  277. package/dist/core/internal/relay/schema/quotes.d.ts.map +1 -0
  278. package/dist/core/internal/relay/schema/quotes.js +89 -0
  279. package/dist/core/internal/relay/schema/quotes.js.map +1 -0
  280. package/dist/core/internal/relay/schema/rpc.d.ts +1529 -0
  281. package/dist/core/internal/relay/schema/rpc.d.ts.map +1 -0
  282. package/dist/core/internal/relay/schema/rpc.js +638 -0
  283. package/dist/core/internal/relay/schema/rpc.js.map +1 -0
  284. package/dist/core/internal/relay/schema/token.d.ts +14 -0
  285. package/dist/core/internal/relay/schema/token.d.ts.map +1 -0
  286. package/dist/core/internal/relay/schema/token.js +13 -0
  287. package/dist/core/internal/relay/schema/token.js.map +1 -0
  288. package/dist/core/internal/requiredFunds.d.ts +19 -0
  289. package/dist/core/internal/requiredFunds.d.ts.map +1 -0
  290. package/dist/core/internal/requiredFunds.js +25 -0
  291. package/dist/core/internal/requiredFunds.js.map +1 -0
  292. package/dist/core/internal/schema/capabilities.d.ts +314 -0
  293. package/dist/core/internal/schema/capabilities.d.ts.map +1 -0
  294. package/dist/core/internal/schema/capabilities.js +133 -0
  295. package/dist/core/internal/schema/capabilities.js.map +1 -0
  296. package/dist/core/internal/schema/key.d.ts +165 -0
  297. package/dist/core/internal/schema/key.d.ts.map +1 -0
  298. package/dist/core/internal/schema/key.js +75 -0
  299. package/dist/core/internal/schema/key.js.map +1 -0
  300. package/dist/core/internal/schema/permissions.d.ts +103 -0
  301. package/dist/core/internal/schema/permissions.d.ts.map +1 -0
  302. package/dist/core/internal/schema/permissions.js +28 -0
  303. package/dist/core/internal/schema/permissions.js.map +1 -0
  304. package/dist/core/internal/schema/request.d.ts +938 -0
  305. package/dist/core/internal/schema/request.d.ts.map +1 -0
  306. package/dist/core/internal/schema/request.js +57 -0
  307. package/dist/core/internal/schema/request.js.map +1 -0
  308. package/dist/core/internal/schema/rpc.d.ts +3315 -0
  309. package/dist/core/internal/schema/rpc.d.ts.map +1 -0
  310. package/dist/core/internal/schema/rpc.js +599 -0
  311. package/dist/core/internal/schema/rpc.js.map +1 -0
  312. package/dist/core/internal/schema/token.d.ts +2 -0
  313. package/dist/core/internal/schema/token.d.ts.map +1 -0
  314. package/dist/core/internal/schema/token.js +2 -0
  315. package/dist/core/internal/schema/token.js.map +1 -0
  316. package/dist/core/internal/schema/utils.d.ts +19 -0
  317. package/dist/core/internal/schema/utils.d.ts.map +1 -0
  318. package/dist/core/internal/schema/utils.js +213 -0
  319. package/dist/core/internal/schema/utils.js.map +1 -0
  320. package/dist/core/internal/siwe.d.ts +33 -0
  321. package/dist/core/internal/siwe.d.ts.map +1 -0
  322. package/dist/core/internal/siwe.js +92 -0
  323. package/dist/core/internal/siwe.js.map +1 -0
  324. package/dist/core/internal/store.d.ts +3 -0
  325. package/dist/core/internal/store.d.ts.map +1 -0
  326. package/dist/core/internal/store.js +9 -0
  327. package/dist/core/internal/store.js.map +1 -0
  328. package/dist/core/internal/tokens.d.ts +58 -0
  329. package/dist/core/internal/tokens.d.ts.map +1 -0
  330. package/dist/core/internal/tokens.js +69 -0
  331. package/dist/core/internal/tokens.js.map +1 -0
  332. package/dist/core/internal/types.d.ts +299 -0
  333. package/dist/core/internal/types.d.ts.map +1 -0
  334. package/dist/core/internal/types.js +2 -0
  335. package/dist/core/internal/types.js.map +1 -0
  336. package/dist/core/internal/urlString.d.ts +2 -0
  337. package/dist/core/internal/urlString.d.ts.map +1 -0
  338. package/dist/core/internal/urlString.js +8 -0
  339. package/dist/core/internal/urlString.js.map +1 -0
  340. package/dist/core/internal/userAgent.d.ts +11 -0
  341. package/dist/core/internal/userAgent.d.ts.map +1 -0
  342. package/dist/core/internal/userAgent.js +19 -0
  343. package/dist/core/internal/userAgent.js.map +1 -0
  344. package/dist/core/internal/utils.d.ts +25 -0
  345. package/dist/core/internal/utils.d.ts.map +1 -0
  346. package/dist/core/internal/utils.js +62 -0
  347. package/dist/core/internal/utils.js.map +1 -0
  348. package/dist/core/react-native/Porto.d.ts +1481 -0
  349. package/dist/core/react-native/Porto.d.ts.map +1 -0
  350. package/dist/core/react-native/Porto.js +17 -0
  351. package/dist/core/react-native/Porto.js.map +1 -0
  352. package/dist/core/react-native/configure.d.ts +10 -0
  353. package/dist/core/react-native/configure.d.ts.map +1 -0
  354. package/dist/core/react-native/configure.js +24 -0
  355. package/dist/core/react-native/configure.js.map +1 -0
  356. package/dist/core/react-native/environment.d.ts +27 -0
  357. package/dist/core/react-native/environment.d.ts.map +1 -0
  358. package/dist/core/react-native/environment.js +13 -0
  359. package/dist/core/react-native/environment.js.map +1 -0
  360. package/dist/core/react-native/index.d.ts +5 -0
  361. package/dist/core/react-native/index.d.ts.map +1 -0
  362. package/dist/core/react-native/index.js +5 -0
  363. package/dist/core/react-native/index.js.map +1 -0
  364. package/dist/core/react-native/utils.d.ts +2 -0
  365. package/dist/core/react-native/utils.d.ts.map +1 -0
  366. package/dist/core/react-native/utils.js +12 -0
  367. package/dist/core/react-native/utils.js.map +1 -0
  368. package/dist/index.d.ts +17 -2
  369. package/dist/index.d.ts.map +1 -0
  370. package/dist/index.js +15 -2
  371. package/dist/index.js.map +1 -0
  372. package/dist/index.native.d.ts +8 -0
  373. package/dist/index.native.d.ts.map +1 -0
  374. package/dist/index.native.js +12 -0
  375. package/dist/index.native.js.map +1 -0
  376. package/dist/internal/index.d.ts +4 -0
  377. package/dist/internal/index.d.ts.map +1 -0
  378. package/dist/internal/index.js +4 -0
  379. package/dist/internal/index.js.map +1 -0
  380. package/dist/react-native/crypto.d.ts +2 -0
  381. package/dist/react-native/crypto.d.ts.map +1 -0
  382. package/dist/react-native/crypto.js +12 -0
  383. package/dist/react-native/crypto.js.map +1 -0
  384. package/dist/react-native/index.d.ts +8 -0
  385. package/dist/react-native/index.d.ts.map +1 -0
  386. package/dist/react-native/index.js +12 -0
  387. package/dist/react-native/index.js.map +1 -0
  388. package/dist/react-native/register.d.ts +3 -0
  389. package/dist/react-native/register.d.ts.map +1 -0
  390. package/dist/react-native/register.js +15 -0
  391. package/dist/react-native/register.js.map +1 -0
  392. package/dist/register/index.d.ts +15 -0
  393. package/dist/register/index.d.ts.map +1 -0
  394. package/dist/register/index.js +2 -0
  395. package/dist/register/index.js.map +1 -0
  396. package/dist/remote/Actions.d.ts +34 -0
  397. package/dist/remote/Actions.d.ts.map +1 -0
  398. package/dist/remote/Actions.js +76 -0
  399. package/dist/remote/Actions.js.map +1 -0
  400. package/dist/remote/Events.d.ts +47 -0
  401. package/dist/remote/Events.d.ts.map +1 -0
  402. package/dist/remote/Events.js +132 -0
  403. package/dist/remote/Events.js.map +1 -0
  404. package/dist/remote/Hooks.d.ts +3801 -0
  405. package/dist/remote/Hooks.d.ts.map +1 -0
  406. package/dist/remote/Hooks.js +106 -0
  407. package/dist/remote/Hooks.js.map +1 -0
  408. package/dist/remote/Porto.d.ts +858 -0
  409. package/dist/remote/Porto.d.ts.map +1 -0
  410. package/dist/remote/Porto.js +66 -0
  411. package/dist/remote/Porto.js.map +1 -0
  412. package/dist/remote/index.d.ts +5 -0
  413. package/dist/remote/index.d.ts.map +1 -0
  414. package/dist/remote/index.js +5 -0
  415. package/dist/remote/index.js.map +1 -0
  416. package/dist/remote/internal/methodPolicies.d.ts +97 -0
  417. package/dist/remote/internal/methodPolicies.d.ts.map +1 -0
  418. package/dist/remote/internal/methodPolicies.js +102 -0
  419. package/dist/remote/internal/methodPolicies.js.map +1 -0
  420. package/dist/server/Route.d.ts +88 -0
  421. package/dist/server/Route.d.ts.map +1 -0
  422. package/dist/server/Route.js +189 -0
  423. package/dist/server/Route.js.map +1 -0
  424. package/dist/server/Router.d.ts +24 -0
  425. package/dist/server/Router.d.ts.map +1 -0
  426. package/dist/server/Router.js +29 -0
  427. package/dist/server/Router.js.map +1 -0
  428. package/dist/server/index.d.ts +3 -0
  429. package/dist/server/index.d.ts.map +1 -0
  430. package/dist/server/index.js +3 -0
  431. package/dist/server/index.js.map +1 -0
  432. package/dist/server/internal/merchantSchema.d.ts +65 -0
  433. package/dist/server/internal/merchantSchema.d.ts.map +1 -0
  434. package/dist/server/internal/merchantSchema.js +7 -0
  435. package/dist/server/internal/merchantSchema.js.map +1 -0
  436. package/dist/server/internal/requestListener.d.ts +124 -0
  437. package/dist/server/internal/requestListener.d.ts.map +1 -0
  438. package/dist/server/internal/requestListener.js +172 -0
  439. package/dist/server/internal/requestListener.js.map +1 -0
  440. package/dist/theme/Theme.d.ts +122 -0
  441. package/dist/theme/Theme.d.ts.map +1 -0
  442. package/dist/theme/Theme.js +18 -0
  443. package/dist/theme/Theme.js.map +1 -0
  444. package/dist/theme/index.d.ts +3 -0
  445. package/dist/theme/index.d.ts.map +1 -0
  446. package/dist/theme/index.js +2 -0
  447. package/dist/theme/index.js.map +1 -0
  448. package/dist/trusted-hosts.d.ts +2 -0
  449. package/dist/trusted-hosts.d.ts.map +1 -0
  450. package/dist/trusted-hosts.js +44 -0
  451. package/dist/trusted-hosts.js.map +1 -0
  452. package/dist/tsconfig.tmp.tsbuildinfo +1 -0
  453. package/dist/viem/Account.d.ts +111 -0
  454. package/dist/viem/Account.d.ts.map +1 -0
  455. package/dist/viem/Account.js +132 -0
  456. package/dist/viem/Account.js.map +1 -0
  457. package/dist/viem/AccountActions.d.ts +11 -0
  458. package/dist/viem/AccountActions.d.ts.map +1 -0
  459. package/dist/viem/AccountActions.js +14 -0
  460. package/dist/viem/AccountActions.js.map +1 -0
  461. package/dist/viem/CapabilitiesSchema.d.ts +15 -0
  462. package/dist/viem/CapabilitiesSchema.d.ts.map +1 -0
  463. package/dist/viem/CapabilitiesSchema.js +2 -0
  464. package/dist/viem/CapabilitiesSchema.js.map +1 -0
  465. package/dist/viem/ContractActions.d.ts +209 -0
  466. package/dist/viem/ContractActions.d.ts.map +1 -0
  467. package/dist/viem/ContractActions.js +350 -0
  468. package/dist/viem/ContractActions.js.map +1 -0
  469. package/dist/viem/Key.d.ts +1156 -0
  470. package/dist/viem/Key.d.ts.map +1 -0
  471. package/dist/viem/Key.js +924 -0
  472. package/dist/viem/Key.js.map +1 -0
  473. package/dist/viem/RelayActions.d.ts +436 -0
  474. package/dist/viem/RelayActions.d.ts.map +1 -0
  475. package/dist/viem/RelayActions.js +385 -0
  476. package/dist/viem/RelayActions.js.map +1 -0
  477. package/dist/viem/RelayClient.d.ts +27 -0
  478. package/dist/viem/RelayClient.d.ts.map +1 -0
  479. package/dist/viem/RelayClient.js +44 -0
  480. package/dist/viem/RelayClient.js.map +1 -0
  481. package/dist/viem/RpcSchema.d.ts +23 -0
  482. package/dist/viem/RpcSchema.d.ts.map +1 -0
  483. package/dist/viem/RpcSchema.js +2 -0
  484. package/dist/viem/RpcSchema.js.map +1 -0
  485. package/dist/viem/WalletActions.d.ts +87 -0
  486. package/dist/viem/WalletActions.d.ts.map +1 -0
  487. package/dist/viem/WalletActions.js +220 -0
  488. package/dist/viem/WalletActions.js.map +1 -0
  489. package/dist/viem/WalletClient.d.ts +21 -0
  490. package/dist/viem/WalletClient.d.ts.map +1 -0
  491. package/dist/viem/WalletClient.js +23 -0
  492. package/dist/viem/WalletClient.js.map +1 -0
  493. package/dist/viem/index.d.ts +14 -0
  494. package/dist/viem/index.d.ts.map +1 -0
  495. package/dist/viem/index.js +12 -0
  496. package/dist/viem/index.js.map +1 -0
  497. package/dist/viem/internal/relayActions.d.ts +365 -0
  498. package/dist/viem/internal/relayActions.d.ts.map +1 -0
  499. package/dist/viem/internal/relayActions.js +783 -0
  500. package/dist/viem/internal/relayActions.js.map +1 -0
  501. package/dist/viem/internal/utils.d.ts +16 -0
  502. package/dist/viem/internal/utils.d.ts.map +1 -0
  503. package/dist/viem/internal/utils.js +2 -0
  504. package/dist/viem/internal/utils.js.map +1 -0
  505. package/dist/wagmi/Actions.d.ts +2 -0
  506. package/dist/wagmi/Actions.d.ts.map +1 -0
  507. package/dist/wagmi/Actions.js +2 -0
  508. package/dist/wagmi/Actions.js.map +1 -0
  509. package/dist/wagmi/Connector.d.ts +28 -0
  510. package/dist/wagmi/Connector.d.ts.map +1 -0
  511. package/dist/wagmi/Connector.js +238 -0
  512. package/dist/wagmi/Connector.js.map +1 -0
  513. package/dist/wagmi/Hooks.d.ts +2 -0
  514. package/dist/wagmi/Hooks.d.ts.map +1 -0
  515. package/dist/wagmi/Hooks.js +2 -0
  516. package/dist/wagmi/Hooks.js.map +1 -0
  517. package/dist/wagmi/Hooks.native.d.ts +3 -0
  518. package/dist/wagmi/Hooks.native.d.ts.map +1 -0
  519. package/dist/wagmi/Hooks.native.js +3 -0
  520. package/dist/wagmi/Hooks.native.js.map +1 -0
  521. package/dist/wagmi/Query.d.ts +2 -0
  522. package/dist/wagmi/Query.d.ts.map +1 -0
  523. package/dist/wagmi/Query.js +2 -0
  524. package/dist/wagmi/Query.js.map +1 -0
  525. package/dist/wagmi/index.d.ts +5 -0
  526. package/dist/wagmi/index.d.ts.map +1 -0
  527. package/dist/wagmi/index.js +5 -0
  528. package/dist/wagmi/index.js.map +1 -0
  529. package/dist/wagmi/index.native.d.ts +6 -0
  530. package/dist/wagmi/index.native.d.ts.map +1 -0
  531. package/dist/wagmi/index.native.js +6 -0
  532. package/dist/wagmi/index.native.js.map +1 -0
  533. package/dist/wagmi/internal/core.d.ts +84 -0
  534. package/dist/wagmi/internal/core.d.ts.map +1 -0
  535. package/dist/wagmi/internal/core.js +229 -0
  536. package/dist/wagmi/internal/core.js.map +1 -0
  537. package/dist/wagmi/internal/query.d.ts +33 -0
  538. package/dist/wagmi/internal/query.d.ts.map +1 -0
  539. package/dist/wagmi/internal/query.js +23 -0
  540. package/dist/wagmi/internal/query.js.map +1 -0
  541. package/dist/wagmi/internal/react.d.ts +91 -0
  542. package/dist/wagmi/internal/react.d.ts.map +1 -0
  543. package/dist/wagmi/internal/react.js +256 -0
  544. package/dist/wagmi/internal/react.js.map +1 -0
  545. package/dist/wagmi/internal/types.d.ts +11 -0
  546. package/dist/wagmi/internal/types.d.ts.map +1 -0
  547. package/dist/wagmi/internal/types.js +2 -0
  548. package/dist/wagmi/internal/types.js.map +1 -0
  549. package/dist/wagmi/internal/utils.d.ts +2 -0
  550. package/dist/wagmi/internal/utils.d.ts.map +1 -0
  551. package/dist/wagmi/internal/utils.js +18 -0
  552. package/dist/wagmi/internal/utils.js.map +1 -0
  553. package/package.json +287 -34
  554. package/src/cli/Dialog.ts +75 -0
  555. package/src/cli/Messenger.ts +148 -0
  556. package/src/cli/bin/index.ts +37 -0
  557. package/src/cli/bin/tsconfig.json +8 -0
  558. package/src/cli/index.ts +2 -0
  559. package/src/cli/internal/commands.ts +216 -0
  560. package/src/cli/internal/context.ts +56 -0
  561. package/src/cli/internal/http.ts +28 -0
  562. package/src/cli/internal/utils.ts +28 -0
  563. package/src/cli/tsdown.config.ts +37 -0
  564. package/src/core/Chains.ts +25 -0
  565. package/src/core/Dialog.ts +1059 -0
  566. package/src/core/Messenger.ts +394 -0
  567. package/src/core/Mode.ts +4 -0
  568. package/src/core/Porto.ts +287 -0
  569. package/src/core/RpcSchema.ts +124 -0
  570. package/src/core/Storage.ts +122 -0
  571. package/src/core/Transport.ts +45 -0
  572. package/src/core/internal/_generated/chains.ts +2 -0
  573. package/src/core/internal/_generated/contracts/EIP7702Proxy.ts +25 -0
  574. package/src/core/internal/_generated/contracts/Escrow.ts +330 -0
  575. package/src/core/internal/_generated/contracts/ExperimentERC20.ts +569 -0
  576. package/src/core/internal/_generated/contracts/ExperimentERC721.ts +588 -0
  577. package/src/core/internal/_generated/contracts/GuardedExecutor.ts +623 -0
  578. package/src/core/internal/_generated/contracts/ICallChecker.ts +34 -0
  579. package/src/core/internal/_generated/contracts/ICommon.ts +4 -0
  580. package/src/core/internal/_generated/contracts/IEscrow.ts +114 -0
  581. package/src/core/internal/_generated/contracts/IFunder.ts +80 -0
  582. package/src/core/internal/_generated/contracts/IFunderV4.ts +45 -0
  583. package/src/core/internal/_generated/contracts/IIthacaAccount.ts +107 -0
  584. package/src/core/internal/_generated/contracts/IOAppCore.ts +142 -0
  585. package/src/core/internal/_generated/contracts/IOAppMsgInspector.ts +45 -0
  586. package/src/core/internal/_generated/contracts/IOAppReceiver.ts +161 -0
  587. package/src/core/internal/_generated/contracts/IOrchestrator.ts +95 -0
  588. package/src/core/internal/_generated/contracts/ISettler.ts +52 -0
  589. package/src/core/internal/_generated/contracts/ISigner.ts +34 -0
  590. package/src/core/internal/_generated/contracts/IthacaAccount.ts +1454 -0
  591. package/src/core/internal/_generated/contracts/IthacaAccountNew.ts +1454 -0
  592. package/src/core/internal/_generated/contracts/IthacaAccountOld.ts +1454 -0
  593. package/src/core/internal/_generated/contracts/LayerZeroSettler.ts +811 -0
  594. package/src/core/internal/_generated/contracts/LibNonce.ts +15 -0
  595. package/src/core/internal/_generated/contracts/LibTStack.ts +4 -0
  596. package/src/core/internal/_generated/contracts/MultiSigSigner.ts +203 -0
  597. package/src/core/internal/_generated/contracts/OApp.ts +412 -0
  598. package/src/core/internal/_generated/contracts/OAppCore.ts +229 -0
  599. package/src/core/internal/_generated/contracts/OAppReceiver.ts +396 -0
  600. package/src/core/internal/_generated/contracts/OAppSender.ts +245 -0
  601. package/src/core/internal/_generated/contracts/Orchestrator.ts +390 -0
  602. package/src/core/internal/_generated/contracts/SimpleFunder.ts +534 -0
  603. package/src/core/internal/_generated/contracts/SimpleSettler.ts +360 -0
  604. package/src/core/internal/_generated/contracts/Simulator.ts +170 -0
  605. package/src/core/internal/_generated/contracts/TokenTransferLib.ts +4 -0
  606. package/src/core/internal/_snapshots/provider.browser.test.ts.snap +119 -0
  607. package/src/core/internal/_snapshots/provider.test.ts.snap +1103 -0
  608. package/src/core/internal/call.test.ts +116 -0
  609. package/src/core/internal/call.ts +245 -0
  610. package/src/core/internal/erc8010.test.ts +74 -0
  611. package/src/core/internal/erc8010.ts +44 -0
  612. package/src/core/internal/intersectionObserver.ts +5 -0
  613. package/src/core/internal/logger.ts +42 -0
  614. package/src/core/internal/mode.ts +498 -0
  615. package/src/core/internal/modes/dialog.ts +1051 -0
  616. package/src/core/internal/modes/reactNative.ts +29 -0
  617. package/src/core/internal/modes/relay.ts +893 -0
  618. package/src/core/internal/permissions.ts +43 -0
  619. package/src/core/internal/permissionsRequest.ts +88 -0
  620. package/src/core/internal/porto.ts +16 -0
  621. package/src/core/internal/promise.ts +19 -0
  622. package/src/core/internal/provider.browser.test.ts +311 -0
  623. package/src/core/internal/provider.test.ts +3552 -0
  624. package/src/core/internal/provider.ts +1278 -0
  625. package/src/core/internal/relay/rpcSchema.ts +101 -0
  626. package/src/core/internal/relay/schema/capabilities.test.ts +663 -0
  627. package/src/core/internal/relay/schema/capabilities.ts +156 -0
  628. package/src/core/internal/relay/schema/intent.test.ts +433 -0
  629. package/src/core/internal/relay/schema/intent.ts +174 -0
  630. package/src/core/internal/relay/schema/key.test.ts +424 -0
  631. package/src/core/internal/relay/schema/key.ts +34 -0
  632. package/src/core/internal/relay/schema/permission.test.ts +499 -0
  633. package/src/core/internal/relay/schema/permission.ts +34 -0
  634. package/src/core/internal/relay/schema/preCall.ts +39 -0
  635. package/src/core/internal/relay/schema/quotes.test.ts +901 -0
  636. package/src/core/internal/relay/schema/quotes.ts +98 -0
  637. package/src/core/internal/relay/schema/rpc.ts +822 -0
  638. package/src/core/internal/relay/schema/token.ts +16 -0
  639. package/src/core/internal/requiredFunds.test.ts +141 -0
  640. package/src/core/internal/requiredFunds.ts +45 -0
  641. package/src/core/internal/schema/capabilities.test.ts +1334 -0
  642. package/src/core/internal/schema/capabilities.ts +162 -0
  643. package/src/core/internal/schema/key.test.ts +570 -0
  644. package/src/core/internal/schema/key.ts +98 -0
  645. package/src/core/internal/schema/permissions.test.ts +948 -0
  646. package/src/core/internal/schema/permissions.ts +31 -0
  647. package/src/core/internal/schema/request.bench.ts +35 -0
  648. package/src/core/internal/schema/request.ts +90 -0
  649. package/src/core/internal/schema/rpc.ts +821 -0
  650. package/src/core/internal/schema/token.ts +1 -0
  651. package/src/core/internal/schema/utils.test.ts +572 -0
  652. package/src/core/internal/schema/utils.ts +236 -0
  653. package/src/core/internal/siwe.test.ts +473 -0
  654. package/src/core/internal/siwe.ts +144 -0
  655. package/src/core/internal/store.ts +9 -0
  656. package/src/core/internal/tokens.test.ts +317 -0
  657. package/src/core/internal/tokens.ts +125 -0
  658. package/src/core/internal/types.ts +448 -0
  659. package/src/core/internal/urlString.ts +5 -0
  660. package/src/core/internal/userAgent.ts +35 -0
  661. package/src/core/internal/utils.test.ts +35 -0
  662. package/src/core/internal/utils.ts +67 -0
  663. package/src/core/react-native/Porto.ts +22 -0
  664. package/src/core/react-native/configure.ts +31 -0
  665. package/src/core/react-native/environment.ts +43 -0
  666. package/src/core/react-native/index.ts +4 -0
  667. package/src/core/react-native/utils.ts +18 -0
  668. package/src/index.native.ts +15 -0
  669. package/src/index.ts +17 -0
  670. package/src/internal/index.ts +3 -0
  671. package/src/react-native/crypto.ts +19 -0
  672. package/src/react-native/index.ts +15 -0
  673. package/src/react-native/register.ts +24 -0
  674. package/src/register/index.ts +17 -0
  675. package/src/remote/Actions.ts +115 -0
  676. package/src/remote/Events.ts +193 -0
  677. package/src/remote/Hooks.ts +194 -0
  678. package/src/remote/Porto.ts +144 -0
  679. package/src/remote/index.ts +4 -0
  680. package/src/remote/internal/methodPolicies.ts +124 -0
  681. package/src/server/Route.test.ts +347 -0
  682. package/src/server/Route.ts +259 -0
  683. package/src/server/Router.test.ts +32 -0
  684. package/src/server/Router.ts +59 -0
  685. package/src/server/index.ts +2 -0
  686. package/src/server/internal/merchantSchema.ts +11 -0
  687. package/src/server/internal/requestListener.ts +284 -0
  688. package/src/theme/Theme.ts +163 -0
  689. package/src/theme/index.ts +2 -0
  690. package/src/trusted-hosts.ts +43 -0
  691. package/src/tsconfig.build.tsbuildinfo +1 -0
  692. package/src/tsconfig.json +15 -0
  693. package/src/viem/Account.test.ts +270 -0
  694. package/src/viem/Account.ts +278 -0
  695. package/src/viem/AccountActions.test.ts +3 -0
  696. package/src/viem/AccountActions.ts +30 -0
  697. package/src/viem/CapabilitiesSchema.ts +18 -0
  698. package/src/viem/ContractActions.test.ts +980 -0
  699. package/src/viem/ContractActions.ts +624 -0
  700. package/src/viem/Key.test.ts +1420 -0
  701. package/src/viem/Key.ts +1318 -0
  702. package/src/viem/RelayActions.test.ts +1730 -0
  703. package/src/viem/RelayActions.ts +1082 -0
  704. package/src/viem/RelayClient.test.ts +127 -0
  705. package/src/viem/RelayClient.ts +87 -0
  706. package/src/viem/RpcSchema.ts +27 -0
  707. package/src/viem/WalletActions.test.ts +646 -0
  708. package/src/viem/WalletActions.ts +476 -0
  709. package/src/viem/WalletClient.test.ts +36 -0
  710. package/src/viem/WalletClient.ts +74 -0
  711. package/src/viem/index.ts +13 -0
  712. package/src/viem/internal/relayActions.test.ts +1296 -0
  713. package/src/viem/internal/relayActions.ts +1222 -0
  714. package/src/viem/internal/utils.ts +27 -0
  715. package/src/wagmi/Actions.ts +13 -0
  716. package/src/wagmi/Connector.ts +306 -0
  717. package/src/wagmi/Hooks.native.ts +16 -0
  718. package/src/wagmi/Hooks.ts +14 -0
  719. package/src/wagmi/Query.ts +5 -0
  720. package/src/wagmi/index.native.ts +6 -0
  721. package/src/wagmi/index.ts +4 -0
  722. package/src/wagmi/internal/core.test.ts +12 -0
  723. package/src/wagmi/internal/core.ts +468 -0
  724. package/src/wagmi/internal/query.ts +52 -0
  725. package/src/wagmi/internal/react.test.ts +12 -0
  726. package/src/wagmi/internal/react.ts +705 -0
  727. package/src/wagmi/internal/types.ts +21 -0
  728. package/src/wagmi/internal/utils.ts +25 -0
  729. package/dist/chain.cjs +0 -17
  730. package/dist/chain.d.cts +0 -41
  731. package/dist/chain.d.ts +0 -41
  732. package/dist/chain.js +0 -13
  733. package/dist/config.cjs +0 -19
  734. package/dist/config.d.cts +0 -3
  735. package/dist/config.d.ts +0 -3
  736. package/dist/config.js +0 -16
  737. package/dist/index.cjs +0 -18
  738. package/dist/index.d.cts +0 -2
@@ -0,0 +1,1730 @@
1
+ import { Hex, Value } from 'ox'
2
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
3
+ import { getEip712Domain, readContract, waitForCallsStatus } from 'viem/actions'
4
+ import { describe, expect, test } from 'vitest'
5
+ import * as TestActions from '../../test/src/actions.js'
6
+ import * as Anvil from '../../test/src/anvil.js'
7
+ import * as TestConfig from '../../test/src/config.js'
8
+ import * as Relay from '../../test/src/relay.js'
9
+ import * as AccountContract from './ContractActions.js'
10
+ import { ContractActions } from './index.js'
11
+ import * as Key from './Key.js'
12
+ import * as RelayActions from './RelayActions.js'
13
+
14
+ const porto = TestConfig.getPorto()
15
+ const client = TestConfig.getRelayClient(porto)
16
+ const contracts = await TestConfig.getContracts(porto)
17
+
18
+ describe('createAccount', () => {
19
+ test('default', async () => {
20
+ const account = await RelayActions.createAccount(client, {
21
+ authorizeKeys: [Key.createHeadlessWebAuthnP256()],
22
+ })
23
+
24
+ expect(account).toBeDefined()
25
+ })
26
+ })
27
+
28
+ describe('signCalls', () => {
29
+ test('default: signs with provided key', async () => {
30
+ const key = Key.createHeadlessWebAuthnP256()
31
+ const account = await TestActions.createAccount(client, { keys: [key] })
32
+
33
+ const request = await RelayActions.prepareCalls(client, {
34
+ account,
35
+ calls: [
36
+ {
37
+ abi: contracts.exp2.abi,
38
+ args: [account.address, 100n],
39
+ functionName: 'mint',
40
+ to: contracts.exp2.address,
41
+ },
42
+ ],
43
+ key,
44
+ })
45
+
46
+ const signature = await RelayActions.signCalls(request, { key })
47
+ expect(signature).toBeDefined()
48
+
49
+ const { id } = await RelayActions.sendPreparedCalls(client, {
50
+ ...request,
51
+ key: request.key!,
52
+ signature,
53
+ })
54
+ expect(id).toBeDefined()
55
+ })
56
+
57
+ test('behavior: signs with account', async () => {
58
+ const key = Key.createHeadlessWebAuthnP256()
59
+ const account = await TestActions.createAccount(client, { keys: [key] })
60
+
61
+ const request = await RelayActions.prepareCalls(client, {
62
+ account,
63
+ calls: [
64
+ {
65
+ abi: contracts.exp2.abi,
66
+ args: [account.address, 100n],
67
+ functionName: 'mint',
68
+ to: contracts.exp2.address,
69
+ },
70
+ ],
71
+ })
72
+
73
+ const signature = await RelayActions.signCalls(request, { account })
74
+ expect(signature).toBeDefined()
75
+ })
76
+
77
+ test('behavior: signs with eoa', async () => {
78
+ const eoa = privateKeyToAccount(generatePrivateKey())
79
+
80
+ await TestActions.setBalance(client, {
81
+ address: eoa.address,
82
+ value: Value.fromEther('100'),
83
+ })
84
+ await RelayActions.upgradeAccount(client, {
85
+ account: eoa,
86
+ })
87
+
88
+ const request = await RelayActions.prepareCalls(client, {
89
+ account: eoa,
90
+ calls: [
91
+ {
92
+ abi: contracts.exp2.abi,
93
+ args: [eoa.address, 100n],
94
+ functionName: 'mint',
95
+ to: contracts.exp2.address,
96
+ },
97
+ ],
98
+ })
99
+
100
+ const signature = await RelayActions.signCalls(request, { account: eoa })
101
+ expect(signature).toBeDefined()
102
+ })
103
+
104
+ test('error: missing signer', async () => {
105
+ const key = Key.createHeadlessWebAuthnP256()
106
+ const account = await TestActions.createAccount(client, { keys: [key] })
107
+
108
+ const request = await RelayActions.prepareCalls(client, {
109
+ account,
110
+ calls: [],
111
+ })
112
+
113
+ await expect(() =>
114
+ // @ts-expect-error testing runtime validation
115
+ RelayActions.signCalls(request, {}),
116
+ ).rejects.toThrowError('no key or account provided')
117
+ })
118
+
119
+ test('error: key not found (account signer with mismatched request key)', async () => {
120
+ const adminKey = Key.createHeadlessWebAuthnP256()
121
+ const account = await TestActions.createAccount(client, {
122
+ keys: [adminKey],
123
+ })
124
+ const otherKey = Key.createHeadlessWebAuthnP256()
125
+
126
+ // Create a pre-call request that references a key that is not on the account
127
+ const request = await RelayActions.prepareCalls(client, {
128
+ authorizeKeys: [otherKey],
129
+ preCalls: true,
130
+ })
131
+
132
+ await expect(() =>
133
+ RelayActions.signCalls(request, { account }),
134
+ ).rejects.toThrowError('key not found')
135
+ })
136
+ })
137
+
138
+ describe('upgradeAccount', () => {
139
+ test('default', async () => {
140
+ const { account } = await TestActions.getAccount(client)
141
+ const adminKey = Key.createHeadlessWebAuthnP256()
142
+
143
+ await RelayActions.upgradeAccount(client, {
144
+ account,
145
+ authorizeKeys: [adminKey],
146
+ })
147
+
148
+ // Verify that Relay has registered the admin key.
149
+ const keys = await RelayActions.getKeys(client, {
150
+ account,
151
+ chainIds: [client.chain.id],
152
+ })
153
+ expect(keys.length).toBe(1)
154
+ expect(keys[0]!.publicKey).toBe(adminKey.publicKey)
155
+
156
+ // Upgrade account onchain
157
+ const { id } = await RelayActions.sendCalls(client, {
158
+ account,
159
+ calls: [],
160
+ key: adminKey,
161
+ })
162
+ await waitForCallsStatus(client, {
163
+ id,
164
+ })
165
+
166
+ // Check that account now has keys onchain
167
+ const key = await ContractActions.keyAt(client, {
168
+ account,
169
+ index: 0,
170
+ })
171
+ expect(key.publicKey).toEqual(adminKey.publicKey)
172
+ })
173
+
174
+ test('behavior: multiple keys', async () => {
175
+ const { account } = await TestActions.getAccount(client)
176
+ const adminKey = Key.createHeadlessWebAuthnP256()
177
+ const sessionKey = Key.createP256({
178
+ expiry: 99999999,
179
+ permissions: {
180
+ calls: [
181
+ {
182
+ signature: 'mint()',
183
+ },
184
+ ],
185
+ spend: [
186
+ {
187
+ limit: 100n,
188
+ period: 'minute',
189
+ },
190
+ ],
191
+ },
192
+ role: 'session',
193
+ })
194
+
195
+ await RelayActions.upgradeAccount(client, {
196
+ account,
197
+ authorizeKeys: [adminKey, sessionKey],
198
+ })
199
+
200
+ // Verify that Relay has registered the admin key.
201
+ const keys = await RelayActions.getKeys(client, {
202
+ account,
203
+ chainIds: [client.chain.id],
204
+ })
205
+ expect(keys.length).toBe(2)
206
+ expect(keys[0]!.publicKey).toBe(adminKey.publicKey)
207
+ expect(keys[1]!.publicKey).toBe(sessionKey.publicKey)
208
+
209
+ // Upgrade account onchain
210
+ const { id } = await RelayActions.sendCalls(client, {
211
+ account,
212
+ calls: [],
213
+ key: adminKey,
214
+ })
215
+ await waitForCallsStatus(client, {
216
+ id,
217
+ })
218
+
219
+ // Check that account now has keys onchain
220
+ const key = await ContractActions.keyAt(client, {
221
+ account,
222
+ index: 0,
223
+ })
224
+ expect(key.publicKey).toEqual(adminKey.publicKey)
225
+
226
+ const key2 = await ContractActions.keyAt(client, {
227
+ account,
228
+ index: 1,
229
+ })
230
+ expect(key2.publicKey).toEqual(sessionKey.publicKey)
231
+ })
232
+
233
+ test('behavior: prepared upgrade', async () => {
234
+ const { account } = await TestActions.getAccount(client)
235
+ const adminKey = Key.createHeadlessWebAuthnP256()
236
+
237
+ const { digests, ...request } = await RelayActions.prepareUpgradeAccount(
238
+ client,
239
+ {
240
+ address: account.address,
241
+ authorizeKeys: [adminKey],
242
+ },
243
+ )
244
+
245
+ const signatures = {
246
+ auth: await account.sign({ hash: digests.auth }),
247
+ exec: await account.sign({ hash: digests.exec }),
248
+ }
249
+
250
+ await RelayActions.upgradeAccount(client, {
251
+ ...request,
252
+ signatures,
253
+ })
254
+
255
+ // Verify that Relay has registered the admin key.
256
+ const keys = await RelayActions.getKeys(client, {
257
+ account,
258
+ chainIds: [client.chain.id],
259
+ })
260
+ expect(keys.length).toBe(1)
261
+ expect(keys[0]!.publicKey).toBe(adminKey.publicKey)
262
+
263
+ // Upgrade account onchain
264
+ const { id } = await RelayActions.sendCalls(client, {
265
+ account,
266
+ calls: [],
267
+ key: adminKey,
268
+ })
269
+ await waitForCallsStatus(client, {
270
+ id,
271
+ })
272
+
273
+ // Check that account now has keys onchain
274
+ const key = await ContractActions.keyAt(client, {
275
+ account,
276
+ index: 0,
277
+ })
278
+ expect(key.publicKey).toEqual(adminKey.publicKey)
279
+ })
280
+ })
281
+
282
+ describe('getKeys', () => {
283
+ test('default', async () => {
284
+ const key = Key.createHeadlessWebAuthnP256()
285
+ const account = await TestActions.createAccount(client, { keys: [key] })
286
+
287
+ const keys = await RelayActions.getKeys(client, {
288
+ account,
289
+ chainIds: [client.chain.id],
290
+ })
291
+
292
+ expect(keys.length).toBe(1)
293
+ expect(keys[0]!.publicKey).toBe(key.publicKey)
294
+ })
295
+
296
+ test('behavior: address', async () => {
297
+ const key = Key.createHeadlessWebAuthnP256()
298
+ const account = await TestActions.createAccount(client, { keys: [key] })
299
+
300
+ const keys = await RelayActions.getKeys(client, {
301
+ account: account.address,
302
+ chainIds: [client.chain.id],
303
+ })
304
+
305
+ expect(keys.length).toBe(1)
306
+ expect(keys[0]!.publicKey).toBe(key.publicKey)
307
+ })
308
+ })
309
+
310
+ describe('sendCalls', () => {
311
+ test('default', async () => {
312
+ const key = Key.createHeadlessWebAuthnP256()
313
+ const account = await TestActions.createAccount(client, {
314
+ keys: [key],
315
+ })
316
+
317
+ const { id } = await RelayActions.sendCalls(client, {
318
+ account,
319
+ calls: [
320
+ {
321
+ abi: contracts.exp2.abi,
322
+ args: [account.address, 100n],
323
+ functionName: 'mint',
324
+ to: contracts.exp2.address,
325
+ },
326
+ ],
327
+ })
328
+
329
+ expect(id).toBeDefined()
330
+
331
+ await waitForCallsStatus(client, {
332
+ id,
333
+ })
334
+
335
+ expect(
336
+ await readContract(client, {
337
+ ...contracts.exp2,
338
+ args: [account.address],
339
+ functionName: 'balanceOf',
340
+ }),
341
+ ).toBe(100n)
342
+ })
343
+
344
+ test('behavior: eoa', async () => {
345
+ const eoa = privateKeyToAccount(generatePrivateKey())
346
+
347
+ await TestActions.setBalance(client, {
348
+ address: eoa.address,
349
+ value: Value.fromEther('100'),
350
+ })
351
+
352
+ await RelayActions.upgradeAccount(client, {
353
+ account: eoa,
354
+ })
355
+
356
+ const { id } = await RelayActions.sendCalls(client, {
357
+ account: eoa,
358
+ calls: [
359
+ {
360
+ abi: contracts.exp2.abi,
361
+ args: [eoa.address, 100n],
362
+ functionName: 'mint',
363
+ to: contracts.exp2.address,
364
+ },
365
+ ],
366
+ })
367
+
368
+ expect(id).toBeDefined()
369
+
370
+ await waitForCallsStatus(client, {
371
+ id,
372
+ })
373
+
374
+ expect(
375
+ await readContract(client, {
376
+ ...contracts.exp2,
377
+ args: [eoa.address],
378
+ functionName: 'balanceOf',
379
+ }),
380
+ ).toBe(100n)
381
+ })
382
+
383
+ test.runIf(Anvil.enabled)('behavior: no fee token (ETH)', async () => {
384
+ const key = Key.createHeadlessWebAuthnP256()
385
+ const account = await TestActions.createAccount(client, {
386
+ keys: [key],
387
+ })
388
+
389
+ const { id } = await RelayActions.sendCalls(client, {
390
+ account,
391
+ calls: [
392
+ {
393
+ abi: contracts.exp2.abi,
394
+ args: [account.address, 100n],
395
+ functionName: 'mint',
396
+ to: contracts.exp2.address,
397
+ },
398
+ ],
399
+ })
400
+
401
+ expect(id).toBeDefined()
402
+
403
+ await waitForCallsStatus(client, {
404
+ id,
405
+ })
406
+
407
+ expect(
408
+ await readContract(client, {
409
+ ...contracts.exp2,
410
+ args: [account.address],
411
+ functionName: 'balanceOf',
412
+ }),
413
+ ).toBe(100n)
414
+ })
415
+
416
+ test('behavior: pre calls', async () => {
417
+ const key = Key.createHeadlessWebAuthnP256()
418
+ const account = await TestActions.createAccount(client, {
419
+ deploy: true,
420
+ keys: [key],
421
+ })
422
+
423
+ const newKey = Key.createP256({
424
+ permissions: {
425
+ calls: [{ to: contracts.exp2.address }],
426
+ spend: [
427
+ {
428
+ limit: Value.fromEther('5'),
429
+ period: 'minute',
430
+ token: contracts.exp1.address,
431
+ },
432
+ ],
433
+ },
434
+ role: 'session',
435
+ })
436
+
437
+ const { id } = await RelayActions.sendCalls(client, {
438
+ account,
439
+ calls: [
440
+ {
441
+ abi: contracts.exp2.abi,
442
+ args: [account.address, 100n],
443
+ functionName: 'mint',
444
+ to: contracts.exp2.address,
445
+ },
446
+ ],
447
+ key: newKey,
448
+ preCalls: [
449
+ {
450
+ authorizeKeys: [newKey],
451
+ key,
452
+ },
453
+ ],
454
+ })
455
+
456
+ expect(id).toBeDefined()
457
+
458
+ await waitForCallsStatus(client, {
459
+ id,
460
+ })
461
+
462
+ expect(
463
+ await readContract(client, {
464
+ ...contracts.exp2,
465
+ args: [account.address],
466
+ functionName: 'balanceOf',
467
+ }),
468
+ ).toBe(100n)
469
+ })
470
+
471
+ test('behavior: pre calls; authorize session key, sign with session key', async () => {
472
+ const adminKey = Key.createHeadlessWebAuthnP256()
473
+ const account = await TestActions.createAccount(client, {
474
+ keys: [adminKey],
475
+ })
476
+
477
+ const sessionKey = Key.createP256({
478
+ expiry: 9999999999,
479
+ permissions: {
480
+ calls: [{ to: contracts.exp2.address }],
481
+ spend: [
482
+ {
483
+ limit: Value.fromEther('5'),
484
+ period: 'minute',
485
+ token: contracts.exp1.address,
486
+ },
487
+ ],
488
+ },
489
+ role: 'session',
490
+ })
491
+
492
+ const request_1 = await RelayActions.prepareCalls(client, {
493
+ authorizeKeys: [sessionKey],
494
+ preCalls: true,
495
+ })
496
+ const signature_1 = await RelayActions.signCalls(request_1, {
497
+ key: adminKey,
498
+ })
499
+
500
+ const { id } = await RelayActions.sendCalls(client, {
501
+ account,
502
+ calls: [
503
+ {
504
+ abi: contracts.exp2.abi,
505
+ args: [account.address, 100n],
506
+ functionName: 'mint',
507
+ to: contracts.exp2.address,
508
+ },
509
+ ],
510
+ key: sessionKey,
511
+ preCalls: [{ ...(request_1 as any), signature: signature_1 }],
512
+ })
513
+
514
+ expect(id).toBeDefined()
515
+
516
+ await waitForCallsStatus(client, {
517
+ id,
518
+ })
519
+
520
+ expect(
521
+ await readContract(client, {
522
+ ...contracts.exp2,
523
+ args: [account.address],
524
+ functionName: 'balanceOf',
525
+ }),
526
+ ).toBe(100n)
527
+ })
528
+
529
+ // TODO: support interop on Anvil
530
+ test.runIf(!Anvil.enabled)('behavior: required funds', async () => {
531
+ const key = Key.createHeadlessWebAuthnP256()
532
+ const account = await TestActions.createAccount(client, {
533
+ keys: [key],
534
+ })
535
+
536
+ const balance_pre = await readContract(client, {
537
+ abi: contracts.exp1.abi,
538
+ address: contracts.exp1.address,
539
+ args: [account.address],
540
+ functionName: 'balanceOf',
541
+ })
542
+
543
+ const alice = Hex.random(20)
544
+ const chain_dest = TestConfig.chains[1]
545
+
546
+ const { id } = await RelayActions.sendCalls(client, {
547
+ account,
548
+ calls: [
549
+ {
550
+ abi: contracts.exp1.abi,
551
+ args: [alice, Value.fromEther('50')],
552
+ functionName: 'transfer',
553
+ to: contracts.exp1.address,
554
+ },
555
+ ],
556
+ chain: chain_dest,
557
+ // TODO: allow `requiredFunds` to be set without `feeToken`
558
+ feeToken: contracts.exp1.address,
559
+ requiredFunds: [
560
+ {
561
+ address: contracts.exp1.address,
562
+ value: Value.fromEther('50'),
563
+ },
564
+ ],
565
+ })
566
+
567
+ expect(id).toBeDefined()
568
+
569
+ const { status } = await waitForCallsStatus(client, {
570
+ id,
571
+ })
572
+ expect(status).toBe('success')
573
+
574
+ const client_dest = TestConfig.getRelayClient(porto, {
575
+ chainId: chain_dest!.id,
576
+ })
577
+
578
+ const balance_post = await readContract(client, {
579
+ abi: contracts.exp1.abi,
580
+ address: contracts.exp1.address,
581
+ args: [account.address],
582
+ functionName: 'balanceOf',
583
+ })
584
+ expect(balance_post).toBeLessThan(balance_pre)
585
+
586
+ const balance_dest = await readContract(client_dest, {
587
+ abi: contracts.exp1.abi,
588
+ address: contracts.exp1.address,
589
+ args: [alice],
590
+ functionName: 'balanceOf',
591
+ })
592
+ expect(balance_dest).toBeGreaterThanOrEqual(Value.fromEther('50'))
593
+ expect(balance_dest).toBeLessThan(Value.fromEther('50.0005'))
594
+ })
595
+ })
596
+
597
+ describe('prepareCalls', () => {
598
+ test('default', async () => {
599
+ const key = Key.createHeadlessWebAuthnP256()
600
+ const account = await TestActions.createAccount(client, {
601
+ keys: [key],
602
+ })
603
+
604
+ const request = await RelayActions.prepareCalls(client, {
605
+ account,
606
+ calls: [
607
+ {
608
+ abi: contracts.exp2.abi,
609
+ args: [account.address, 100n],
610
+ functionName: 'mint',
611
+ to: contracts.exp2.address,
612
+ },
613
+ ],
614
+ key,
615
+ })
616
+
617
+ const signature = await RelayActions.signCalls(request, {
618
+ key,
619
+ })
620
+
621
+ const { id } = await RelayActions.sendPreparedCalls(client, {
622
+ ...request,
623
+ key: request.key!,
624
+ signature,
625
+ })
626
+
627
+ expect(id).toBeDefined()
628
+
629
+ await waitForCallsStatus(client, {
630
+ id,
631
+ })
632
+
633
+ expect(
634
+ await readContract(client, {
635
+ ...contracts.exp2,
636
+ args: [account.address],
637
+ functionName: 'balanceOf',
638
+ }),
639
+ ).toBe(100n)
640
+ })
641
+
642
+ test('behavior: account', async () => {
643
+ const key = Key.createHeadlessWebAuthnP256()
644
+ const account = await TestActions.createAccount(client, {
645
+ keys: [key],
646
+ })
647
+
648
+ const request = await RelayActions.prepareCalls(client, {
649
+ account,
650
+ calls: [
651
+ {
652
+ abi: contracts.exp2.abi,
653
+ args: [account.address, 100n],
654
+ functionName: 'mint',
655
+ to: contracts.exp2.address,
656
+ },
657
+ ],
658
+ })
659
+
660
+ const signature = await RelayActions.signCalls(request, {
661
+ account,
662
+ })
663
+
664
+ const { id } = await RelayActions.sendPreparedCalls(client, {
665
+ ...request,
666
+ key: request.key!,
667
+ signature,
668
+ })
669
+
670
+ expect(id).toBeDefined()
671
+
672
+ await waitForCallsStatus(client, {
673
+ id,
674
+ })
675
+
676
+ expect(
677
+ await readContract(client, {
678
+ ...contracts.exp2,
679
+ args: [account.address],
680
+ functionName: 'balanceOf',
681
+ }),
682
+ ).toBe(100n)
683
+ })
684
+
685
+ test('behavior: pre calls', async () => {
686
+ const key = Key.createHeadlessWebAuthnP256()
687
+ const account = await TestActions.createAccount(client, {
688
+ keys: [key],
689
+ })
690
+
691
+ const alice = Hex.random(20)
692
+ const newKey = Key.createP256({
693
+ expiry: 9999999999,
694
+ permissions: {
695
+ calls: [{ to: alice }],
696
+ spend: [
697
+ {
698
+ limit: Value.fromEther('5'),
699
+ period: 'day',
700
+ token: contracts.exp1.address,
701
+ },
702
+ ],
703
+ },
704
+ role: 'session',
705
+ })
706
+ const request_1 = await RelayActions.prepareCalls(client, {
707
+ authorizeKeys: [newKey],
708
+ preCalls: true,
709
+ })
710
+ const signature_1 = await RelayActions.signCalls(request_1, {
711
+ key,
712
+ })
713
+
714
+ const request_2 = await RelayActions.prepareCalls(client, {
715
+ account,
716
+ calls: [
717
+ {
718
+ abi: contracts.exp2.abi,
719
+ args: [account.address, 100n],
720
+ functionName: 'mint',
721
+ to: contracts.exp2.address,
722
+ },
723
+ ],
724
+ key,
725
+ preCalls: [{ ...request_1, signature: signature_1 }],
726
+ })
727
+ const signature_2 = await RelayActions.signCalls(request_2, {
728
+ key,
729
+ })
730
+
731
+ const { id } = await RelayActions.sendPreparedCalls(client, {
732
+ ...request_2,
733
+ key: request_2.key!,
734
+ signature: signature_2,
735
+ })
736
+
737
+ expect(id).toBeDefined()
738
+
739
+ await waitForCallsStatus(client, {
740
+ id,
741
+ })
742
+
743
+ expect(
744
+ await readContract(client, {
745
+ ...contracts.exp2,
746
+ args: [account.address],
747
+ functionName: 'balanceOf',
748
+ }),
749
+ ).toBe(100n)
750
+ })
751
+
752
+ test.skip('behavior: pre calls; account has executed calls previously', async () => {
753
+ const key = Key.createHeadlessWebAuthnP256()
754
+ const account = await TestActions.createAccount(client, {
755
+ keys: [key],
756
+ })
757
+
758
+ await RelayActions.sendCalls(client, {
759
+ account,
760
+ calls: [{ to: account.address }],
761
+ })
762
+
763
+ const alice = Hex.random(20)
764
+ const newKey = Key.createP256({
765
+ expiry: 9999999999,
766
+ permissions: {
767
+ calls: [{ to: alice }],
768
+ spend: [
769
+ {
770
+ limit: Value.fromEther('5'),
771
+ period: 'day',
772
+ token: contracts.exp1.address,
773
+ },
774
+ ],
775
+ },
776
+ role: 'session',
777
+ })
778
+ const request_1 = await RelayActions.prepareCalls(client, {
779
+ authorizeKeys: [newKey],
780
+ preCalls: true,
781
+ })
782
+ const signature_1 = await RelayActions.signCalls(request_1, {
783
+ key,
784
+ })
785
+
786
+ const request_2 = await RelayActions.prepareCalls(client, {
787
+ account,
788
+ calls: [
789
+ {
790
+ abi: contracts.exp2.abi,
791
+ args: [account.address, 100n],
792
+ functionName: 'mint',
793
+ to: contracts.exp2.address,
794
+ },
795
+ ],
796
+ key,
797
+ preCalls: [{ ...request_1, signature: signature_1 }],
798
+ })
799
+ const signature_2 = await RelayActions.signCalls(request_2, {
800
+ key,
801
+ })
802
+
803
+ const { id } = await RelayActions.sendPreparedCalls(client, {
804
+ ...request_2,
805
+ key: request_2.key!,
806
+ signature: signature_2,
807
+ })
808
+
809
+ expect(id).toBeDefined()
810
+
811
+ await waitForCallsStatus(client, {
812
+ id,
813
+ })
814
+
815
+ expect(
816
+ await readContract(client, {
817
+ ...contracts.exp2,
818
+ args: [account.address],
819
+ functionName: 'balanceOf',
820
+ }),
821
+ ).toBe(100n)
822
+ })
823
+
824
+ test('behavior: pre calls; authorize session key, sign with session key', async () => {
825
+ const adminKey = Key.createHeadlessWebAuthnP256()
826
+ const account = await TestActions.createAccount(client, {
827
+ keys: [adminKey],
828
+ })
829
+
830
+ const sessionKey = Key.createP256({
831
+ expiry: 9999999999,
832
+ permissions: {
833
+ calls: [{ to: contracts.exp2.address }],
834
+ spend: [
835
+ {
836
+ limit: Value.fromEther('5'),
837
+ period: 'minute',
838
+ token: contracts.exp1.address,
839
+ },
840
+ ],
841
+ },
842
+ role: 'session',
843
+ })
844
+
845
+ const request_1 = await RelayActions.prepareCalls(client, {
846
+ authorizeKeys: [sessionKey],
847
+ preCalls: true,
848
+ })
849
+ const signature_1 = await RelayActions.signCalls(request_1, {
850
+ key: adminKey,
851
+ })
852
+
853
+ const request_2 = await RelayActions.prepareCalls(client, {
854
+ account,
855
+ calls: [
856
+ {
857
+ abi: contracts.exp2.abi,
858
+ args: [account.address, 100n],
859
+ functionName: 'mint',
860
+ to: contracts.exp2.address,
861
+ },
862
+ ],
863
+ key: sessionKey,
864
+ preCalls: [{ ...request_1, signature: signature_1 }],
865
+ })
866
+ const signature_2 = await RelayActions.signCalls(request_2, {
867
+ key: sessionKey,
868
+ })
869
+
870
+ const { id } = await RelayActions.sendPreparedCalls(client, {
871
+ ...request_2,
872
+ key: request_2.key!,
873
+ signature: signature_2,
874
+ })
875
+
876
+ expect(id).toBeDefined()
877
+
878
+ await waitForCallsStatus(client, {
879
+ id,
880
+ })
881
+
882
+ expect(
883
+ await readContract(client, {
884
+ ...contracts.exp2,
885
+ args: [account.address],
886
+ functionName: 'balanceOf',
887
+ }),
888
+ ).toBe(100n)
889
+ })
890
+ })
891
+
892
+ describe('e2e', () => {
893
+ describe('behavior: arbitrary calls', () => {
894
+ test('mint erc20', async () => {
895
+ // 1. Initialize Account with Admin Key.
896
+ const key = Key.createHeadlessWebAuthnP256()
897
+ const account = await TestActions.createAccount(client, {
898
+ keys: [key],
899
+ })
900
+
901
+ // 2. Mint 100 ERC20 tokens to Account.
902
+ const { id } = await RelayActions.sendCalls(client, {
903
+ account,
904
+ calls: [
905
+ {
906
+ abi: contracts.exp2.abi,
907
+ args: [account.address, 100n],
908
+ functionName: 'mint',
909
+ to: contracts.exp2.address,
910
+ },
911
+ ],
912
+ })
913
+ expect(id).toBeDefined()
914
+
915
+ await waitForCallsStatus(client, {
916
+ id,
917
+ })
918
+
919
+ // 3. Verify that Account has 100 ERC20 tokens.
920
+ expect(
921
+ await readContract(client, {
922
+ abi: contracts.exp2.abi,
923
+ address: contracts.exp2.address,
924
+ args: [account.address],
925
+ functionName: 'balanceOf',
926
+ }),
927
+ ).toBe(100n)
928
+ })
929
+
930
+ test.runIf(Anvil.enabled)('mint erc20; no fee token (ETH)', async () => {
931
+ // 1. Initialize Account with Admin Key.
932
+ const key = Key.createHeadlessWebAuthnP256()
933
+ const account = await TestActions.createAccount(client, {
934
+ keys: [key],
935
+ })
936
+
937
+ // 2. Mint 100 ERC20 tokens to Account – no `feeToken` specified.
938
+ const { id } = await RelayActions.sendCalls(client, {
939
+ account,
940
+ calls: [
941
+ {
942
+ abi: contracts.exp2.abi,
943
+ args: [account.address, 100n],
944
+ functionName: 'mint',
945
+ to: contracts.exp2.address,
946
+ },
947
+ ],
948
+ })
949
+ expect(id).toBeDefined()
950
+
951
+ await waitForCallsStatus(client, {
952
+ id,
953
+ })
954
+
955
+ // 3. Verify that Account has 100 ERC20 tokens.
956
+ expect(
957
+ await readContract(client, {
958
+ abi: contracts.exp2.abi,
959
+ address: contracts.exp2.address,
960
+ args: [account.address],
961
+ functionName: 'balanceOf',
962
+ }),
963
+ ).toBe(100n)
964
+ })
965
+
966
+ test('noop', async () => {
967
+ // 1. Initialize Account with Admin Key.
968
+ const key = Key.createHeadlessWebAuthnP256()
969
+ const account = await TestActions.createAccount(client, {
970
+ keys: [key],
971
+ })
972
+
973
+ // 2. Perform a no-op call.
974
+ const { id } = await RelayActions.sendCalls(client, {
975
+ account,
976
+ calls: [
977
+ {
978
+ to: '0x0000000000000000000000000000000000000000',
979
+ },
980
+ ],
981
+ })
982
+
983
+ expect(id).toBeDefined()
984
+ })
985
+
986
+ // TODO: fix
987
+ test.skip('behavior: insufficient erc20 balance (asset deficits)', async () => {
988
+ // 1. Initialize Account with Admin Key.
989
+ const key = Key.createHeadlessWebAuthnP256()
990
+ const account = await TestActions.createAccount(client, {
991
+ keys: [key],
992
+ })
993
+
994
+ // 2. Try to transfer 100 ERC20 tokens to the zero address.
995
+ await expect(() =>
996
+ RelayActions.sendCalls(client, {
997
+ account,
998
+ calls: [
999
+ {
1000
+ abi: contracts.exp2.abi,
1001
+ args: ['0x0000000000000000000000000000000000000000', 100n],
1002
+ functionName: 'transfer',
1003
+ to: contracts.exp2.address,
1004
+ },
1005
+ ],
1006
+ }),
1007
+ ).rejects.toThrowError('Error: InsufficientBalance()')
1008
+ })
1009
+
1010
+ // TODO: fix
1011
+ test.skip('error: contract error (insufficient eth balance)', async () => {
1012
+ // 1. Initialize Account with Admin Key.
1013
+ const key = Key.createHeadlessWebAuthnP256()
1014
+ const account = await TestActions.createAccount(client, {
1015
+ keys: [key],
1016
+ })
1017
+
1018
+ // 2. Try to transfer 100000000 ETH tokens to the zero address.
1019
+ await expect(() =>
1020
+ RelayActions.sendCalls(client, {
1021
+ account,
1022
+ calls: [
1023
+ {
1024
+ to: '0x0000000000000000000000000000000000000000',
1025
+ value: Value.fromEther('100000000'),
1026
+ },
1027
+ ],
1028
+ }),
1029
+ ).rejects.toThrowError('Reason: CallError')
1030
+ })
1031
+ })
1032
+
1033
+ describe('behavior: authorize keys', () => {
1034
+ test('authorize admin keys', async () => {
1035
+ // 1. Initialize Account with Admin Key.
1036
+ const key = Key.createHeadlessWebAuthnP256()
1037
+ const account = await TestActions.createAccount(client, {
1038
+ keys: [key],
1039
+ })
1040
+
1041
+ // 2. Define additional Admin Keys.
1042
+ const keys = [
1043
+ Key.createHeadlessWebAuthnP256(),
1044
+ Key.createSecp256k1(),
1045
+ ] as const
1046
+
1047
+ // 3. Authorize additional Admin Keys.
1048
+ const { id } = await RelayActions.sendCalls(client, {
1049
+ account,
1050
+ authorizeKeys: keys,
1051
+ calls: [],
1052
+ })
1053
+ expect(id).toBeDefined()
1054
+
1055
+ await waitForCallsStatus(client, {
1056
+ id,
1057
+ })
1058
+
1059
+ // 4. Verify that Account now has 3 Admin Keys.
1060
+ const [key_1, key_2, key_3] = [
1061
+ await AccountContract.keyAt(client, {
1062
+ account,
1063
+ index: 0,
1064
+ }),
1065
+ await AccountContract.keyAt(client, {
1066
+ account,
1067
+ index: 1,
1068
+ }),
1069
+ await AccountContract.keyAt(client, {
1070
+ account,
1071
+ index: 2,
1072
+ }),
1073
+ ]
1074
+
1075
+ expect(key_1.publicKey).toBe(key.publicKey)
1076
+ expect(key_2.publicKey).toBe(keys[0].publicKey)
1077
+ expect(key_3.publicKey).toBe(keys[1].publicKey)
1078
+ })
1079
+
1080
+ test('authorize key with previous key', async () => {
1081
+ // 1. Initialize Account with Admin Key.
1082
+ const key = Key.createHeadlessWebAuthnP256()
1083
+ const account = await TestActions.createAccount(client, {
1084
+ keys: [key],
1085
+ })
1086
+
1087
+ // 2. Authorize a new Admin Key.
1088
+ const newKey = Key.createHeadlessWebAuthnP256()
1089
+ {
1090
+ const { id } = await RelayActions.sendCalls(client, {
1091
+ account,
1092
+ authorizeKeys: [newKey],
1093
+ })
1094
+ expect(id).toBeDefined()
1095
+
1096
+ await waitForCallsStatus(client, {
1097
+ id,
1098
+ })
1099
+ }
1100
+
1101
+ // 3. Mint 100 ERC20 tokens to Account with new Admin Key.
1102
+ {
1103
+ const { id } = await RelayActions.sendCalls(client, {
1104
+ account,
1105
+ calls: [
1106
+ {
1107
+ abi: contracts.exp2.abi,
1108
+ args: [account.address, 100n],
1109
+ functionName: 'mint',
1110
+ to: contracts.exp2.address,
1111
+ },
1112
+ ],
1113
+ key: newKey,
1114
+ })
1115
+ expect(id).toBeDefined()
1116
+
1117
+ await waitForCallsStatus(client, {
1118
+ id,
1119
+ })
1120
+
1121
+ // 4. Verify that Account has 100 ERC20 tokens.
1122
+ expect(
1123
+ await readContract(client, {
1124
+ abi: contracts.exp2.abi,
1125
+ address: contracts.exp2.address,
1126
+ args: [account.address],
1127
+ functionName: 'balanceOf',
1128
+ }),
1129
+ ).toBe(100n)
1130
+ }
1131
+ })
1132
+
1133
+ test('batch authorize + mint', async () => {
1134
+ // 1. Initialize Account with Admin Key & Session Key.
1135
+ const adminKey = Key.createHeadlessWebAuthnP256()
1136
+ const sessionKey = Key.createP256({
1137
+ permissions: {
1138
+ calls: [{ to: contracts.exp2.address }],
1139
+ spend: [
1140
+ {
1141
+ limit: Value.fromEther('5'),
1142
+ period: 'day',
1143
+ token: contracts.exp1.address,
1144
+ },
1145
+ ],
1146
+ },
1147
+ role: 'session',
1148
+ })
1149
+ const account = await TestActions.createAccount(client, {
1150
+ keys: [adminKey, sessionKey],
1151
+ })
1152
+
1153
+ // 3. Mint 100 ERC20 tokens to Account with new Session Key.
1154
+ const { id } = await RelayActions.sendCalls(client, {
1155
+ account,
1156
+ calls: [
1157
+ {
1158
+ abi: contracts.exp2.abi,
1159
+ args: [account.address, 100n],
1160
+ functionName: 'mint',
1161
+ to: contracts.exp2.address,
1162
+ },
1163
+ ],
1164
+ key: sessionKey,
1165
+ })
1166
+ expect(id).toBeDefined()
1167
+
1168
+ await waitForCallsStatus(client, {
1169
+ id,
1170
+ })
1171
+
1172
+ // 3. Verify that Account has 100 ERC20 tokens.
1173
+ expect(
1174
+ await readContract(client, {
1175
+ abi: contracts.exp2.abi,
1176
+ address: contracts.exp2.address,
1177
+ args: [account.address],
1178
+ functionName: 'balanceOf',
1179
+ }),
1180
+ ).toBe(100n)
1181
+ })
1182
+ })
1183
+
1184
+ describe('behavior: call permissions', () => {
1185
+ test('default', async () => {
1186
+ // 1. Initialize account with Admin Key & Session Key.
1187
+ const adminKey = Key.createHeadlessWebAuthnP256()
1188
+ const sessionKey = Key.createP256({
1189
+ permissions: {
1190
+ calls: [
1191
+ {
1192
+ to: contracts.exp2.address,
1193
+ },
1194
+ ],
1195
+ spend: [
1196
+ {
1197
+ limit: Value.fromEther('5'),
1198
+ period: 'day',
1199
+ token: contracts.exp1.address,
1200
+ },
1201
+ ],
1202
+ },
1203
+ role: 'session',
1204
+ })
1205
+ const account = await TestActions.createAccount(client, {
1206
+ keys: [adminKey, sessionKey],
1207
+ })
1208
+
1209
+ // 2. Mint 100 ERC20 tokens to Account.
1210
+ {
1211
+ const { id } = await RelayActions.sendCalls(client, {
1212
+ account,
1213
+ calls: [
1214
+ {
1215
+ abi: contracts.exp2.abi,
1216
+ args: [account.address, 100n],
1217
+ functionName: 'mint',
1218
+ to: contracts.exp2.address,
1219
+ },
1220
+ ],
1221
+ key: sessionKey,
1222
+ })
1223
+ expect(id).toBeDefined()
1224
+
1225
+ await waitForCallsStatus(client, {
1226
+ id,
1227
+ })
1228
+
1229
+ // 3. Verify that Account has 100 ERC20 tokens.
1230
+ expect(
1231
+ await readContract(client, {
1232
+ abi: contracts.exp2.abi,
1233
+ address: contracts.exp2.address,
1234
+ args: [account.address],
1235
+ functionName: 'balanceOf',
1236
+ }),
1237
+ ).toBe(100n)
1238
+ }
1239
+ })
1240
+
1241
+ test('multiple calls', async () => {
1242
+ // 1. Initialize account with Admin Key & Session Key.
1243
+ const adminKey = Key.createHeadlessWebAuthnP256()
1244
+ const sessionKey = Key.createP256({
1245
+ feeToken: {
1246
+ limit: '1',
1247
+ symbol: 'EXP',
1248
+ },
1249
+ permissions: {
1250
+ calls: [
1251
+ {
1252
+ to: contracts.exp2.address,
1253
+ },
1254
+ ],
1255
+ spend: [
1256
+ {
1257
+ limit: Value.fromEther('5'),
1258
+ period: 'day',
1259
+ token: contracts.exp1.address,
1260
+ },
1261
+ ],
1262
+ },
1263
+ role: 'session',
1264
+ })
1265
+ const account = await TestActions.createAccount(client, {
1266
+ keys: [adminKey, sessionKey],
1267
+ })
1268
+
1269
+ // 2. Mint 100 ERC20 tokens to Account (and initialize scoped Session Key).
1270
+ {
1271
+ const { id } = await RelayActions.sendCalls(client, {
1272
+ account,
1273
+ calls: [
1274
+ {
1275
+ abi: contracts.exp2.abi,
1276
+ args: [account.address, 100n],
1277
+ functionName: 'mint',
1278
+ to: contracts.exp2.address,
1279
+ },
1280
+ ],
1281
+ key: sessionKey,
1282
+ })
1283
+ expect(id).toBeDefined()
1284
+
1285
+ await waitForCallsStatus(client, {
1286
+ id,
1287
+ })
1288
+
1289
+ // 3. Verify that Account has 100 ERC20 tokens.
1290
+ expect(
1291
+ await readContract(client, {
1292
+ abi: contracts.exp2.abi,
1293
+ address: contracts.exp2.address,
1294
+ args: [account.address],
1295
+ functionName: 'balanceOf',
1296
+ }),
1297
+ ).toBe(100n)
1298
+ }
1299
+
1300
+ // 4. Mint another 100 ERC20 tokens to Account.
1301
+ {
1302
+ const { id } = await RelayActions.sendCalls(client, {
1303
+ account,
1304
+ calls: [
1305
+ {
1306
+ abi: contracts.exp2.abi,
1307
+ args: [account.address, 100n],
1308
+ functionName: 'mint',
1309
+ to: contracts.exp2.address,
1310
+ },
1311
+ ],
1312
+ key: sessionKey,
1313
+ })
1314
+ expect(id).toBeDefined()
1315
+
1316
+ await waitForCallsStatus(client, {
1317
+ id,
1318
+ })
1319
+
1320
+ // 5. Verify that Account now has 200 ERC20 tokens.
1321
+ expect(
1322
+ await readContract(client, {
1323
+ abi: contracts.exp2.abi,
1324
+ address: contracts.exp2.address,
1325
+ args: [account.address],
1326
+ functionName: 'balanceOf',
1327
+ }),
1328
+ ).toBe(200n)
1329
+ }
1330
+ })
1331
+
1332
+ test('multiple calls (w/ admin key, then session key)', async () => {
1333
+ // 1. Initialize account with Admin Key and Session Key (with call permission).
1334
+ const adminKey = Key.createHeadlessWebAuthnP256()
1335
+ const sessionKey = Key.createP256({
1336
+ permissions: {
1337
+ calls: [
1338
+ {
1339
+ to: contracts.exp2.address,
1340
+ },
1341
+ ],
1342
+ spend: [
1343
+ {
1344
+ limit: Value.fromEther('5'),
1345
+ period: 'day',
1346
+ token: contracts.exp1.address,
1347
+ },
1348
+ ],
1349
+ },
1350
+ role: 'session',
1351
+ })
1352
+ const account = await TestActions.createAccount(client, {
1353
+ keys: [adminKey, sessionKey],
1354
+ })
1355
+
1356
+ // 2. Mint 100 ERC20 tokens to Account with Admin Key.
1357
+ {
1358
+ const { id } = await RelayActions.sendCalls(client, {
1359
+ account,
1360
+ calls: [
1361
+ {
1362
+ abi: contracts.exp2.abi,
1363
+ args: [account.address, 100n],
1364
+ functionName: 'mint',
1365
+ to: contracts.exp2.address,
1366
+ },
1367
+ ],
1368
+ key: adminKey,
1369
+ })
1370
+ expect(id).toBeDefined()
1371
+
1372
+ await waitForCallsStatus(client, {
1373
+ id,
1374
+ })
1375
+
1376
+ // 3. Verify that Account has 100 ERC20 tokens.
1377
+ expect(
1378
+ await readContract(client, {
1379
+ abi: contracts.exp2.abi,
1380
+ address: contracts.exp2.address,
1381
+ args: [account.address],
1382
+ functionName: 'balanceOf',
1383
+ }),
1384
+ ).toBe(100n)
1385
+ }
1386
+
1387
+ // 4. Mint another 100 ERC20 tokens to Account with Session Key.
1388
+ {
1389
+ const { id } = await RelayActions.sendCalls(client, {
1390
+ account,
1391
+ calls: [
1392
+ {
1393
+ abi: contracts.exp2.abi,
1394
+ args: [account.address, 100n],
1395
+ functionName: 'mint',
1396
+ to: contracts.exp2.address,
1397
+ },
1398
+ ],
1399
+ key: sessionKey,
1400
+ })
1401
+ expect(id).toBeDefined()
1402
+
1403
+ await waitForCallsStatus(client, {
1404
+ id,
1405
+ })
1406
+
1407
+ // 5. Verify that Account now has 200 ERC20 tokens.
1408
+ expect(
1409
+ await readContract(client, {
1410
+ abi: contracts.exp2.abi,
1411
+ address: contracts.exp2.address,
1412
+ args: [account.address],
1413
+ functionName: 'balanceOf',
1414
+ }),
1415
+ ).toBe(200n)
1416
+ }
1417
+ })
1418
+
1419
+ test('multiple scopes', async () => {
1420
+ const alice = Hex.random(20)
1421
+
1422
+ // 1. Initialize account with Admin Key and Session Key (with call permission).
1423
+ const adminKey = Key.createHeadlessWebAuthnP256()
1424
+ const sessionKey = Key.createP256({
1425
+ permissions: {
1426
+ calls: [
1427
+ {
1428
+ signature: 'mint(address,uint256)',
1429
+ to: contracts.exp2.address,
1430
+ },
1431
+ {
1432
+ signature: 'transfer(address,uint256)',
1433
+ to: contracts.exp1.address,
1434
+ },
1435
+ ],
1436
+ spend: [
1437
+ {
1438
+ limit: Value.fromEther('5'),
1439
+ period: 'day',
1440
+ token: contracts.exp1.address,
1441
+ },
1442
+ ],
1443
+ },
1444
+ role: 'session',
1445
+ })
1446
+ const account = await TestActions.createAccount(client, {
1447
+ keys: [adminKey, sessionKey],
1448
+ })
1449
+
1450
+ // 2. Mint 100 ERC20 tokens to Account (and initialize scoped Session Key).
1451
+ {
1452
+ const { id } = await RelayActions.sendCalls(client, {
1453
+ account,
1454
+ calls: [
1455
+ {
1456
+ abi: contracts.exp2.abi,
1457
+ args: [account.address, 100n],
1458
+ functionName: 'mint',
1459
+ to: contracts.exp2.address,
1460
+ },
1461
+ {
1462
+ abi: contracts.exp1.abi,
1463
+ args: [alice, 100n],
1464
+ functionName: 'transfer',
1465
+ to: contracts.exp1.address,
1466
+ },
1467
+ ],
1468
+ key: sessionKey,
1469
+ })
1470
+ expect(id).toBeDefined()
1471
+
1472
+ await waitForCallsStatus(client, {
1473
+ id,
1474
+ })
1475
+
1476
+ // 3. Verify that Account has 100 ERC20 tokens.
1477
+ expect(
1478
+ await readContract(client, {
1479
+ abi: contracts.exp2.abi,
1480
+ address: contracts.exp2.address,
1481
+ args: [account.address],
1482
+ functionName: 'balanceOf',
1483
+ }),
1484
+ ).toBe(100n)
1485
+ }
1486
+ })
1487
+
1488
+ test('error: invalid target', async () => {
1489
+ // 1. Initialize account with Admin Key & Session Key.
1490
+ const adminKey = Key.createHeadlessWebAuthnP256()
1491
+ const sessionKey = Key.createP256({
1492
+ permissions: {
1493
+ calls: [
1494
+ {
1495
+ to: contracts.exp1.address,
1496
+ },
1497
+ ],
1498
+ spend: [
1499
+ {
1500
+ limit: Value.fromEther('5'),
1501
+ period: 'day',
1502
+ token: contracts.exp1.address,
1503
+ },
1504
+ ],
1505
+ },
1506
+ role: 'session',
1507
+ })
1508
+ const account = await TestActions.createAccount(client, {
1509
+ keys: [adminKey, sessionKey],
1510
+ })
1511
+
1512
+ // 2. Try to mint ERC20 tokens to Account with Session Key.
1513
+ await expect(() =>
1514
+ RelayActions.sendCalls(client, {
1515
+ account,
1516
+ calls: [
1517
+ {
1518
+ abi: contracts.exp2.abi,
1519
+ args: [account.address, 100n],
1520
+ functionName: 'mint',
1521
+ to: contracts.exp2.address,
1522
+ },
1523
+ ],
1524
+ key: sessionKey,
1525
+ }),
1526
+ ).rejects.toThrowError('Reason: Unauthorized')
1527
+ })
1528
+
1529
+ test('error: invalid selector', async () => {
1530
+ // 1. Initialize account with Admin Key & Session Key.
1531
+ const adminKey = Key.createHeadlessWebAuthnP256()
1532
+ const sessionKey = Key.createP256({
1533
+ permissions: {
1534
+ calls: [
1535
+ {
1536
+ signature: '0xdeadbeef',
1537
+ },
1538
+ ],
1539
+ spend: [
1540
+ {
1541
+ limit: Value.fromEther('5'),
1542
+ period: 'day',
1543
+ token: contracts.exp1.address,
1544
+ },
1545
+ ],
1546
+ },
1547
+ role: 'session',
1548
+ })
1549
+ const account = await TestActions.createAccount(client, {
1550
+ keys: [adminKey, sessionKey],
1551
+ })
1552
+
1553
+ // 2. Try to mint ERC20 tokens to Account with Session Key.
1554
+ await expect(() =>
1555
+ RelayActions.sendCalls(client, {
1556
+ account,
1557
+ calls: [
1558
+ {
1559
+ abi: contracts.exp2.abi,
1560
+ args: [account.address, 100n],
1561
+ functionName: 'mint',
1562
+ to: contracts.exp2.address,
1563
+ },
1564
+ ],
1565
+ key: sessionKey,
1566
+ preCalls: [
1567
+ {
1568
+ authorizeKeys: [sessionKey],
1569
+ key: adminKey,
1570
+ },
1571
+ ],
1572
+ }),
1573
+ ).rejects.toThrowError('Reason: Unauthorized')
1574
+ })
1575
+ })
1576
+
1577
+ describe('behavior: spend permissions', () => {
1578
+ test('session key', async () => {
1579
+ // 1. Initialize account with Admin Key and Session Key (with permissions).
1580
+ const adminKey = Key.createHeadlessWebAuthnP256()
1581
+ const sessionKey = Key.createP256({
1582
+ permissions: {
1583
+ calls: [
1584
+ {
1585
+ to: contracts.exp2.address,
1586
+ },
1587
+ ],
1588
+ spend: [
1589
+ {
1590
+ limit: Value.fromEther('5'),
1591
+ period: 'day',
1592
+ token: contracts.exp1.address,
1593
+ },
1594
+ { limit: 100n, period: 'day', token: contracts.exp2.address },
1595
+ ],
1596
+ },
1597
+ role: 'session',
1598
+ })
1599
+ const account = await TestActions.createAccount(client, {
1600
+ keys: [adminKey, sessionKey],
1601
+ })
1602
+
1603
+ // 2. Mint 100 ERC20 tokens to Account with Session Key.
1604
+ {
1605
+ const { id } = await RelayActions.sendCalls(client, {
1606
+ account,
1607
+ calls: [
1608
+ {
1609
+ abi: contracts.exp2.abi,
1610
+ args: [account.address, 100n],
1611
+ functionName: 'mint',
1612
+ to: contracts.exp2.address,
1613
+ },
1614
+ ],
1615
+ key: sessionKey,
1616
+ })
1617
+ expect(id).toBeDefined()
1618
+
1619
+ await waitForCallsStatus(client, {
1620
+ id,
1621
+ })
1622
+
1623
+ // 3. Verify that Account has 100 ERC20 tokens.
1624
+ expect(
1625
+ await readContract(client, {
1626
+ abi: contracts.exp2.abi,
1627
+ address: contracts.exp2.address,
1628
+ args: [account.address],
1629
+ functionName: 'balanceOf',
1630
+ }),
1631
+ ).toBe(100n)
1632
+ }
1633
+
1634
+ {
1635
+ // 4. Transfer 50 ERC20 token from Account.
1636
+ const { id } = await RelayActions.sendCalls(client, {
1637
+ account,
1638
+ calls: [
1639
+ {
1640
+ abi: contracts.exp2.abi,
1641
+ args: ['0x0000000000000000000000000000000000000000', 50n],
1642
+ functionName: 'transfer',
1643
+ to: contracts.exp2.address,
1644
+ },
1645
+ ],
1646
+ key: sessionKey,
1647
+ })
1648
+
1649
+ await waitForCallsStatus(client, {
1650
+ id,
1651
+ })
1652
+ }
1653
+
1654
+ // 5. Try to transfer another 50 ERC20 tokens from Account.
1655
+ await expect(() =>
1656
+ RelayActions.sendCalls(client, {
1657
+ account,
1658
+ calls: [
1659
+ {
1660
+ abi: contracts.exp2.abi,
1661
+ args: ['0x0000000000000000000000000000000000000000', 100n],
1662
+ functionName: 'transfer',
1663
+ to: contracts.exp2.address,
1664
+ },
1665
+ ],
1666
+ key: sessionKey,
1667
+ }),
1668
+ ).rejects.toThrowError('ExceededSpendLimit')
1669
+ })
1670
+ })
1671
+
1672
+ describe.runIf(Anvil.enabled)('behavior: update account', () => {
1673
+ test('default', async () => {
1674
+ const key = Key.createHeadlessWebAuthnP256()
1675
+ const account = await TestActions.createAccount(client, {
1676
+ deploy: true,
1677
+ keys: [key],
1678
+ })
1679
+
1680
+ {
1681
+ const { contracts } = await RelayActions.getCapabilities(client)
1682
+ const { accountImplementation } = contracts
1683
+ const { domain: current } = await getEip712Domain(client, {
1684
+ address: account.address,
1685
+ })
1686
+ const { domain: latest } = await getEip712Domain(client, {
1687
+ address: accountImplementation.address,
1688
+ })
1689
+ expect(current.version).toBe(latest.version)
1690
+ }
1691
+
1692
+ const porto_newAccount = TestConfig.getPorto({
1693
+ relayRpcUrl: Relay.instances.anvil_newAccount.rpcUrl,
1694
+ })
1695
+ porto_newAccount._internal.store.setState(
1696
+ porto._internal.store.getState(),
1697
+ )
1698
+
1699
+ {
1700
+ const client = TestConfig.getRelayClient(porto_newAccount)
1701
+ const {
1702
+ contracts: { accountImplementation },
1703
+ } = await RelayActions.getCapabilities(client)
1704
+
1705
+ const { domain: current } = await getEip712Domain(client, {
1706
+ address: account.address,
1707
+ })
1708
+ const { domain: latest } = await getEip712Domain(client, {
1709
+ address: accountImplementation.address,
1710
+ })
1711
+ expect(current.version).not.toBe(latest.version)
1712
+
1713
+ const { id } = await RelayActions.sendCalls(client, {
1714
+ account,
1715
+ calls: [],
1716
+ })
1717
+ await waitForCallsStatus(client, {
1718
+ id,
1719
+ })
1720
+
1721
+ {
1722
+ const { domain: current } = await getEip712Domain(client, {
1723
+ address: account.address,
1724
+ })
1725
+ expect(current.version).toBe(latest.version)
1726
+ }
1727
+ }
1728
+ })
1729
+ })
1730
+ })