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,1420 @@
1
+ import {
2
+ Bytes,
3
+ Hex,
4
+ PublicKey,
5
+ Secp256k1,
6
+ Value,
7
+ WebAuthnP256,
8
+ WebCryptoP256,
9
+ } from 'ox'
10
+ import { verifyHash } from 'viem/actions'
11
+ import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest'
12
+ import { createAccount } from '../../test/src/actions.js'
13
+ import * as TestConfig from '../../test/src/config.js'
14
+ import type * as Tokens from '../core/internal/tokens.js'
15
+ import * as Key from './Key.js'
16
+
17
+ const porto = TestConfig.getPorto()
18
+ const client = TestConfig.getRelayClient(porto)
19
+
20
+ const feeTokens = [
21
+ {
22
+ address: '0x97870b32890d3f1f089489a29007863a5678089d',
23
+ decimals: 6,
24
+ feeToken: true,
25
+ interop: true,
26
+ nativeRate: 387750000000000n,
27
+ symbol: 'EXP',
28
+ uid: 'exp',
29
+ },
30
+ {
31
+ address: '0x0000000000000000000000000000000000000000',
32
+ decimals: 18,
33
+ feeToken: true,
34
+ interop: true,
35
+ nativeRate: 10n ** 18n,
36
+ symbol: 'ETH',
37
+ uid: 'ethereum',
38
+ },
39
+ ] as const satisfies Tokens.Tokens
40
+
41
+ describe('createP256', () => {
42
+ test('default', () => {
43
+ const key = Key.createP256()
44
+
45
+ const { hash, id, publicKey, ...rest } = key
46
+
47
+ expect(hash).toBeDefined()
48
+ expect(id).toBeDefined()
49
+ expect(publicKey).toBeDefined()
50
+ expect(rest).toMatchInlineSnapshot(`
51
+ {
52
+ "chainId": undefined,
53
+ "expiry": 0,
54
+ "feeToken": undefined,
55
+ "permissions": undefined,
56
+ "prehash": false,
57
+ "privateKey": [Function],
58
+ "role": "admin",
59
+ "type": "p256",
60
+ }
61
+ `)
62
+ })
63
+ })
64
+
65
+ describe('createSecp256k1', () => {
66
+ test('default', () => {
67
+ const key = Key.createSecp256k1()
68
+
69
+ const { hash, id, publicKey, ...rest } = key
70
+
71
+ expect(publicKey).toBeDefined()
72
+ expect(hash).toBeDefined()
73
+ expect(id).toBeDefined()
74
+ expect(rest).toMatchInlineSnapshot(`
75
+ {
76
+ "chainId": undefined,
77
+ "expiry": 0,
78
+ "feeToken": undefined,
79
+ "permissions": undefined,
80
+ "prehash": false,
81
+ "privateKey": [Function],
82
+ "role": "admin",
83
+ "type": "secp256k1",
84
+ }
85
+ `)
86
+ })
87
+
88
+ test('behavior: authorize + sign', async () => {
89
+ const key = Key.createSecp256k1()
90
+ const account = await createAccount(client, {
91
+ deploy: true,
92
+ keys: [key],
93
+ })
94
+
95
+ const payload = Hex.random(32)
96
+ const signature = await Key.sign(key, {
97
+ address: account.address,
98
+ payload,
99
+ })
100
+
101
+ expect(
102
+ await verifyHash(client, {
103
+ address: account.address,
104
+ hash: payload,
105
+ signature,
106
+ }),
107
+ ).toBe(true)
108
+ })
109
+ })
110
+
111
+ describe('createWebAuthnP256', () => {
112
+ beforeAll(() => {
113
+ vi.stubGlobal('window', {
114
+ document: {
115
+ title: 'My Website',
116
+ },
117
+ location: {
118
+ hostname: 'https://example.com',
119
+ },
120
+ })
121
+ })
122
+
123
+ afterAll(() => {
124
+ vi.restoreAllMocks()
125
+ })
126
+
127
+ test('default', async () => {
128
+ const key = await Key.createWebAuthnP256({
129
+ createFn() {
130
+ return Promise.resolve({
131
+ id: 'm1-bMPuAqpWhCxHZQZTT6e-lSPntQbh3opIoGe7g4Qs',
132
+ response: {
133
+ getPublicKey() {
134
+ return [
135
+ 48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134,
136
+ 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 171, 137, 20, 0, 20, 15, 196,
137
+ 248, 233, 65, 206, 15, 249, 14, 65, 157, 233, 71, 10, 202, 202,
138
+ 97, 59, 189, 113, 122, 71, 117, 67, 80, 49, 167, 216, 132, 49,
139
+ 142, 145, 159, 211, 179, 229, 166, 49, 216, 102, 216, 163, 128,
140
+ 180, 64, 99, 231, 15, 12, 56, 30, 225, 110, 6, 82, 247, 249,
141
+ 117, 84,
142
+ ]
143
+ },
144
+ },
145
+ } as any)
146
+ },
147
+ label: 'test',
148
+ userId: Bytes.from('0x0000000000000000000000000000000000000000'),
149
+ })
150
+
151
+ const { hash, id, publicKey, ...rest } = key
152
+
153
+ expect(publicKey).toBeDefined()
154
+ expect(hash).toBeDefined()
155
+ expect(id).toBeDefined()
156
+ expect(rest).toMatchInlineSnapshot(`
157
+ {
158
+ "chainId": undefined,
159
+ "expiry": 0,
160
+ "feeToken": undefined,
161
+ "permissions": undefined,
162
+ "prehash": false,
163
+ "privateKey": {
164
+ "credential": {
165
+ "id": "m1-bMPuAqpWhCxHZQZTT6e-lSPntQbh3opIoGe7g4Qs",
166
+ "publicKey": {
167
+ "prefix": 4,
168
+ "x": 77587693192652859874025541476425832478302972220661277688017673393936226333095n,
169
+ "y": 97933141135755737384413290261786792525004108403409931527059712582886746584404n,
170
+ },
171
+ },
172
+ "rpId": undefined,
173
+ },
174
+ "role": "admin",
175
+ "type": "webauthn-p256",
176
+ }
177
+ `)
178
+ })
179
+
180
+ test('behavior: authorize + sign', async () => {
181
+ const key = Key.createHeadlessWebAuthnP256()
182
+ const account = await createAccount(client, {
183
+ deploy: true,
184
+ keys: [key],
185
+ })
186
+
187
+ const payload = Hex.random(32)
188
+ const signature = await Key.sign(key, {
189
+ address: account.address,
190
+ payload,
191
+ })
192
+
193
+ expect(
194
+ await verifyHash(client, {
195
+ address: account.address,
196
+ hash: payload,
197
+ signature,
198
+ }),
199
+ ).toBe(true)
200
+ })
201
+ })
202
+
203
+ describe('createWebCryptoP256', () => {
204
+ test('default', async () => {
205
+ const key = await Key.createWebCryptoP256()
206
+
207
+ const { hash, id, publicKey, ...rest } = key
208
+
209
+ expect(hash).toBeDefined()
210
+ expect(id).toBeDefined()
211
+ expect(publicKey).toBeDefined()
212
+ expect(rest).toMatchInlineSnapshot(`
213
+ {
214
+ "chainId": undefined,
215
+ "expiry": 0,
216
+ "feeToken": undefined,
217
+ "permissions": undefined,
218
+ "prehash": true,
219
+ "privateKey": CryptoKey {},
220
+ "role": "admin",
221
+ "type": "p256",
222
+ }
223
+ `)
224
+ })
225
+ })
226
+
227
+ describe('deserialize', () => {
228
+ test('default', () => {
229
+ const key = Key.fromP256({
230
+ privateKey:
231
+ '0x59ff6b8de3b3b39e94b6f9fc0590cf4e3eaa9b6736e6a49c9a6b324c4f58cb9f',
232
+ })
233
+ const serialized = Key.serialize(key)
234
+ const deserialized = Key.deserialize(serialized)
235
+
236
+ expect(deserialized).toMatchInlineSnapshot(`
237
+ {
238
+ "chainId": undefined,
239
+ "expiry": 0,
240
+ "hash": "0xed7ac7c7b35b77e97be67b84f5889e0ab3ecc69ab65d57db191e11f8811e9965",
241
+ "id": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
242
+ "prehash": false,
243
+ "publicKey": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
244
+ "role": "admin",
245
+ "type": "p256",
246
+ }
247
+ `)
248
+ })
249
+
250
+ test('secp256k1', () => {
251
+ const key = Key.fromSecp256k1({
252
+ publicKey:
253
+ '0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008',
254
+ })
255
+ const serialized = Key.serialize(key)
256
+ const deserialized = Key.deserialize(serialized)
257
+
258
+ expect(deserialized).toMatchInlineSnapshot(`
259
+ {
260
+ "chainId": undefined,
261
+ "expiry": 0,
262
+ "hash": "0x6364f61156f50881a6e5b27442a97c2f218cba981f5bcd1a398750515212b1ab",
263
+ "id": "0xe9cf8e14602e9f081668f2839e63ceb23c6e0e5a",
264
+ "prehash": false,
265
+ "publicKey": "0xe9cf8e14602e9f081668f2839e63ceb23c6e0e5a",
266
+ "role": "admin",
267
+ "type": "secp256k1",
268
+ }
269
+ `)
270
+ })
271
+
272
+ test('address', () => {
273
+ const key = Key.fromSecp256k1({
274
+ address: '0xed7ac7c7b35b77e97be67b84f5889e0ab3412222',
275
+ })
276
+ const serialized = Key.serialize(key)
277
+ const deserialized = Key.deserialize(serialized)
278
+
279
+ expect(deserialized).toMatchInlineSnapshot(`
280
+ {
281
+ "chainId": undefined,
282
+ "expiry": 0,
283
+ "hash": "0xf3d20b7404e4008e6a4df9ffbce26e5f275296eda26b4e82e6c6ea05ad85b650",
284
+ "id": "0xed7ac7c7b35b77e97be67b84f5889e0ab3412222",
285
+ "prehash": false,
286
+ "publicKey": "0xed7ac7c7b35b77e97be67b84f5889e0ab3412222",
287
+ "role": "admin",
288
+ "type": "secp256k1",
289
+ }
290
+ `)
291
+ })
292
+ })
293
+
294
+ describe('from', () => {
295
+ test('default', () => {
296
+ const publicKey = PublicKey.toHex(
297
+ Secp256k1.getPublicKey({
298
+ privateKey:
299
+ '0x72685afe259e683fa3b7819c4745383ba36366c7571fd17456fd4cd9777aedcb',
300
+ }),
301
+ {
302
+ includePrefix: false,
303
+ },
304
+ )
305
+
306
+ const key = Key.from({
307
+ expiry: 69420,
308
+ privateKey() {
309
+ return '0x'
310
+ },
311
+ publicKey,
312
+
313
+ type: 'p256',
314
+ })
315
+
316
+ expect(key).toMatchInlineSnapshot(`
317
+ {
318
+ "chainId": undefined,
319
+ "expiry": 69420,
320
+ "hash": "0x8708c3265105bf57dd6be9e79d384bde46f64e9cf75ddeb72bca10de17986b33",
321
+ "id": "0x144f4bf8bda60e5bf0e9f11a509e55a14987a6c5a63aed81bcb6939f9f5abc7c3598cce19015350ce8d30f11e57cbdd55ccfbc5f30d9ccf59ffd080967229fe9",
322
+ "prehash": false,
323
+ "privateKey": [Function],
324
+ "publicKey": "0x144f4bf8bda60e5bf0e9f11a509e55a14987a6c5a63aed81bcb6939f9f5abc7c3598cce19015350ce8d30f11e57cbdd55ccfbc5f30d9ccf59ffd080967229fe9",
325
+ "role": "admin",
326
+ "type": "p256",
327
+ }
328
+ `)
329
+ })
330
+
331
+ test('behavior: secp256k1', () => {
332
+ expect(
333
+ Key.from({
334
+ publicKey: '0xe57cbdd55ccfbc5f30d9ccf59ffd080967229fe9',
335
+ type: 'secp256k1',
336
+ }),
337
+ ).toMatchInlineSnapshot(`
338
+ {
339
+ "chainId": undefined,
340
+ "expiry": 0,
341
+ "hash": "0x8f76ad68e08f96d89aecd0d57e451be5152675b77ae73134389656e0bc3d695a",
342
+ "id": "0xe57cbdd55ccfbc5f30d9ccf59ffd080967229fe9",
343
+ "prehash": false,
344
+ "publicKey": "0xe57cbdd55ccfbc5f30d9ccf59ffd080967229fe9",
345
+ "role": "admin",
346
+ "type": "secp256k1",
347
+ }
348
+ `)
349
+
350
+ expect(
351
+ Key.from({
352
+ publicKey:
353
+ '0x000000000000000000000000e57cbdd55ccfbc5f30d9ccf59ffd080967229fe9',
354
+ type: 'secp256k1',
355
+ }),
356
+ ).toMatchInlineSnapshot(`
357
+ {
358
+ "chainId": undefined,
359
+ "expiry": 0,
360
+ "hash": "0x8f76ad68e08f96d89aecd0d57e451be5152675b77ae73134389656e0bc3d695a",
361
+ "id": "0xe57cbdd55ccfbc5f30d9ccf59ffd080967229fe9",
362
+ "prehash": false,
363
+ "publicKey": "0xe57cbdd55ccfbc5f30d9ccf59ffd080967229fe9",
364
+ "role": "admin",
365
+ "type": "secp256k1",
366
+ }
367
+ `)
368
+
369
+ expect(
370
+ Key.from({
371
+ publicKey:
372
+ '0x144f4bf8bda60e5bf0e9f11a509e55a14987a6c5a63aed81bcb6939f9f5abc7c3598cce19015350ce8d30f11e57cbdd55ccfbc5f30d9ccf59ffd080967229fe9',
373
+ type: 'secp256k1',
374
+ }),
375
+ ).toMatchInlineSnapshot(`
376
+ {
377
+ "chainId": undefined,
378
+ "expiry": 0,
379
+ "hash": "0xc17311fbf840057e649cef2df2acac84d1fc35a37d754f5f1aa5c00f0d887b21",
380
+ "id": "0x03febc0a78f3e15613be7be0bd84abcd1652d3f0",
381
+ "prehash": false,
382
+ "publicKey": "0x03febc0a78f3e15613be7be0bd84abcd1652d3f0",
383
+ "role": "admin",
384
+ "type": "secp256k1",
385
+ }
386
+ `)
387
+ })
388
+
389
+ test('behavior: serialized', () => {
390
+ const publicKey = PublicKey.toHex(
391
+ Secp256k1.getPublicKey({
392
+ privateKey: Secp256k1.randomPrivateKey(),
393
+ }),
394
+ {
395
+ includePrefix: false,
396
+ },
397
+ )
398
+
399
+ const key = Key.from({
400
+ expiry: 69420,
401
+ privateKey() {
402
+ return '0x'
403
+ },
404
+ publicKey,
405
+ type: 'p256',
406
+ })
407
+ const serialized = Key.serialize(key)
408
+
409
+ expect({
410
+ ...Key.deserialize(serialized),
411
+ hash: undefined,
412
+ id: undefined,
413
+ prehash: undefined,
414
+ }).toEqual({
415
+ expiry: 69420,
416
+ publicKey,
417
+ role: 'admin',
418
+ type: 'p256',
419
+ })
420
+ })
421
+ })
422
+
423
+ describe('fromP256', () => {
424
+ test('default', () => {
425
+ const key = Key.fromP256({
426
+ privateKey:
427
+ '0x59ff6b8de3b3b39e94b6f9fc0590cf4e3eaa9b6736e6a49c9a6b324c4f58cb9f',
428
+ })
429
+
430
+ expect(key).toMatchInlineSnapshot(`
431
+ {
432
+ "chainId": undefined,
433
+ "expiry": 0,
434
+ "feeToken": undefined,
435
+ "hash": "0xed7ac7c7b35b77e97be67b84f5889e0ab3ecc69ab65d57db191e11f8811e9965",
436
+ "id": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
437
+ "permissions": undefined,
438
+ "prehash": false,
439
+ "privateKey": [Function],
440
+ "publicKey": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
441
+ "role": "admin",
442
+ "type": "p256",
443
+ }
444
+ `)
445
+ })
446
+
447
+ test('args: expiry', () => {
448
+ const key = Key.fromP256({
449
+ expiry: 69420,
450
+ privateKey:
451
+ '0x59ff6b8de3b3b39e94b6f9fc0590cf4e3eaa9b6736e6a49c9a6b324c4f58cb9f',
452
+ })
453
+
454
+ expect(key).toMatchInlineSnapshot(`
455
+ {
456
+ "chainId": undefined,
457
+ "expiry": 69420,
458
+ "feeToken": undefined,
459
+ "hash": "0xed7ac7c7b35b77e97be67b84f5889e0ab3ecc69ab65d57db191e11f8811e9965",
460
+ "id": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
461
+ "permissions": undefined,
462
+ "prehash": false,
463
+ "privateKey": [Function],
464
+ "publicKey": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
465
+ "role": "admin",
466
+ "type": "p256",
467
+ }
468
+ `)
469
+ })
470
+ })
471
+
472
+ describe('fromRelay', () => {
473
+ test('default', () => {
474
+ const key = Key.fromRelay(
475
+ {
476
+ expiry: 0,
477
+ permissions: [
478
+ {
479
+ selector: '0x1249c58b',
480
+ to: '0x3232323232323232323232323232323232323232',
481
+ type: 'call',
482
+ },
483
+ {
484
+ selector: '0xdeadbeef',
485
+ to: '0x0000000000000000000000000000000000000000',
486
+ type: 'call',
487
+ },
488
+ {
489
+ limit: 1000000000000000000n,
490
+ period: 'minute',
491
+ token: '0x0000000000000000000000000000000000000000',
492
+ type: 'spend',
493
+ },
494
+ ],
495
+ publicKey:
496
+ '0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008',
497
+ role: 'admin',
498
+ type: 'p256',
499
+ },
500
+ {
501
+ chainId: 1,
502
+ },
503
+ )
504
+
505
+ expect(key).toMatchInlineSnapshot(`
506
+ {
507
+ "chainId": 1,
508
+ "expiry": 0,
509
+ "hash": "0xed7ac7c7b35b77e97be67b84f5889e0ab3ecc69ab65d57db191e11f8811e9965",
510
+ "id": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
511
+ "permissions": {
512
+ "calls": [
513
+ {
514
+ "signature": "0x1249c58b",
515
+ "to": undefined,
516
+ },
517
+ {
518
+ "signature": "0xdeadbeef",
519
+ "to": "0x0000000000000000000000000000000000000000",
520
+ },
521
+ ],
522
+ "spend": [
523
+ {
524
+ "limit": 1000000000000000000n,
525
+ "period": "minute",
526
+ "token": "0x0000000000000000000000000000000000000000",
527
+ },
528
+ ],
529
+ },
530
+ "prehash": false,
531
+ "publicKey": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
532
+ "role": "admin",
533
+ "type": "p256",
534
+ }
535
+ `)
536
+ })
537
+ })
538
+
539
+ describe('fromSecp256k1', () => {
540
+ test('args: privateKey', () => {
541
+ const key = Key.fromSecp256k1({
542
+ privateKey:
543
+ '0x59ff6b8de3b3b39e94b6f9fc0590cf4e3eaa9b6736e6a49c9a6b324c4f58cb9f',
544
+ })
545
+
546
+ expect(key).toMatchInlineSnapshot(`
547
+ {
548
+ "chainId": undefined,
549
+ "expiry": 0,
550
+ "feeToken": undefined,
551
+ "hash": "0xd325ebfdb383f9fca8e4e1c443cdceddda39f1f860824156b75ec85f11b94a35",
552
+ "id": "0x673ee8aabd3a62434cb9e3d7c6f9492e286bcb08",
553
+ "permissions": undefined,
554
+ "prehash": false,
555
+ "privateKey": [Function],
556
+ "publicKey": "0x673ee8aabd3a62434cb9e3d7c6f9492e286bcb08",
557
+ "role": "admin",
558
+ "type": "secp256k1",
559
+ }
560
+ `)
561
+ })
562
+
563
+ test('args: address', () => {
564
+ const key = Key.fromSecp256k1({
565
+ address: '0x0000000000000000000000000000000000000000',
566
+ })
567
+
568
+ expect(key).toMatchInlineSnapshot(`
569
+ {
570
+ "chainId": undefined,
571
+ "expiry": 0,
572
+ "feeToken": undefined,
573
+ "hash": "0x6ce15638cb31daec095a6f3834f344957f69c7dc09ff935917447b3d65976595",
574
+ "id": "0x0000000000000000000000000000000000000000",
575
+ "permissions": undefined,
576
+ "prehash": false,
577
+ "privateKey": undefined,
578
+ "publicKey": "0x0000000000000000000000000000000000000000",
579
+ "role": "admin",
580
+ "type": "secp256k1",
581
+ }
582
+ `)
583
+ })
584
+
585
+ test('args: publicKey', () => {
586
+ const key = Key.fromSecp256k1({
587
+ publicKey:
588
+ '0x626c7f1042b6d3971be0e4c054165e36a6d6a5ace6af1773654d3360fccf0b25b0c998938d9b73e749023eb1c77f5930b5a87660deec42261a9a22fac9a56536',
589
+ })
590
+
591
+ expect(key).toMatchInlineSnapshot(`
592
+ {
593
+ "chainId": undefined,
594
+ "expiry": 0,
595
+ "feeToken": undefined,
596
+ "hash": "0xd325ebfdb383f9fca8e4e1c443cdceddda39f1f860824156b75ec85f11b94a35",
597
+ "id": "0x673ee8aabd3a62434cb9e3d7c6f9492e286bcb08",
598
+ "permissions": undefined,
599
+ "prehash": false,
600
+ "privateKey": undefined,
601
+ "publicKey": "0x673ee8aabd3a62434cb9e3d7c6f9492e286bcb08",
602
+ "role": "admin",
603
+ "type": "secp256k1",
604
+ }
605
+ `)
606
+ })
607
+ })
608
+
609
+ describe('fromWebAuthnP256', () => {
610
+ beforeAll(() => {
611
+ vi.stubGlobal('window', {
612
+ document: {
613
+ title: 'My Website',
614
+ },
615
+ location: {
616
+ hostname: 'https://example.com',
617
+ },
618
+ })
619
+ })
620
+
621
+ afterAll(() => {
622
+ vi.restoreAllMocks()
623
+ })
624
+
625
+ test('default', async () => {
626
+ const credential = await WebAuthnP256.createCredential({
627
+ createFn() {
628
+ return Promise.resolve({
629
+ id: 'm1-bMPuAqpWhCxHZQZTT6e-lSPntQbh3opIoGe7g4Qs',
630
+ response: {
631
+ getPublicKey() {
632
+ return [
633
+ 48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134,
634
+ 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 171, 137, 20, 0, 20, 15, 196,
635
+ 248, 233, 65, 206, 15, 249, 14, 65, 157, 233, 71, 10, 202, 202,
636
+ 97, 59, 189, 113, 122, 71, 117, 67, 80, 49, 167, 216, 132, 49,
637
+ 142, 145, 159, 211, 179, 229, 166, 49, 216, 102, 216, 163, 128,
638
+ 180, 64, 99, 231, 15, 12, 56, 30, 225, 110, 6, 82, 247, 249,
639
+ 117, 84,
640
+ ]
641
+ },
642
+ },
643
+ } as any)
644
+ },
645
+ name: 'test',
646
+ })
647
+
648
+ const key = Key.fromWebAuthnP256({
649
+ credential,
650
+ id: '0x0000000000000000000000000000000000000000',
651
+ })
652
+
653
+ expect(key).toMatchInlineSnapshot(`
654
+ {
655
+ "chainId": undefined,
656
+ "expiry": 0,
657
+ "feeToken": undefined,
658
+ "hash": "0x2a7a39929a819ed8472f7fe3aa65a758432cc8ab833e9999f50217d55c70c50f",
659
+ "id": "0x0000000000000000000000000000000000000000",
660
+ "permissions": undefined,
661
+ "prehash": false,
662
+ "privateKey": {
663
+ "credential": {
664
+ "id": "m1-bMPuAqpWhCxHZQZTT6e-lSPntQbh3opIoGe7g4Qs",
665
+ "publicKey": {
666
+ "prefix": 4,
667
+ "x": 77587693192652859874025541476425832478302972220661277688017673393936226333095n,
668
+ "y": 97933141135755737384413290261786792525004108403409931527059712582886746584404n,
669
+ },
670
+ "raw": {
671
+ "id": "m1-bMPuAqpWhCxHZQZTT6e-lSPntQbh3opIoGe7g4Qs",
672
+ "response": {
673
+ "getPublicKey": [Function],
674
+ },
675
+ },
676
+ },
677
+ "rpId": undefined,
678
+ },
679
+ "publicKey": "0xab891400140fc4f8e941ce0ff90e419de9470acaca613bbd717a4775435031a7d884318e919fd3b3e5a631d866d8a380b44063e70f0c381ee16e0652f7f97554",
680
+ "role": "admin",
681
+ "type": "webauthn-p256",
682
+ }
683
+ `)
684
+ })
685
+ })
686
+
687
+ describe('fromWebCryptoP256', () => {
688
+ test('default', async () => {
689
+ const keyPair = await WebCryptoP256.createKeyPair()
690
+
691
+ const key = Key.fromWebCryptoP256({
692
+ keyPair: {
693
+ privateKey: keyPair.privateKey,
694
+ publicKey: {
695
+ prefix: 4,
696
+ x: 29425393363637877844360099756708459701670665037779565927194637716883031208592n,
697
+ y: 4454192741171077737571435183656715320148197913661532282490480175757904146724n,
698
+ },
699
+ },
700
+ })
701
+
702
+ expect(key).toMatchInlineSnapshot(`
703
+ {
704
+ "chainId": undefined,
705
+ "expiry": 0,
706
+ "feeToken": undefined,
707
+ "hash": "0xa2085f4d3a69fcf0182dbe60a3b7da9b5fd8b2b54d7ea39d345ba82d6edc8fe1",
708
+ "id": "0x410e2eb4820de45c0dd6730c300c3c66b8bc5885c963067fe0ff29c5e480329009d8fbd71e76257a2d5577e2211a62114eca15c9218d488209fa789a45497124",
709
+ "permissions": undefined,
710
+ "prehash": true,
711
+ "privateKey": CryptoKey {},
712
+ "publicKey": "0x410e2eb4820de45c0dd6730c300c3c66b8bc5885c963067fe0ff29c5e480329009d8fbd71e76257a2d5577e2211a62114eca15c9218d488209fa789a45497124",
713
+ "role": "admin",
714
+ "type": "p256",
715
+ }
716
+ `)
717
+ })
718
+ })
719
+
720
+ describe('serialize', () => {
721
+ test('default', () => {
722
+ const key = Key.fromP256({
723
+ privateKey:
724
+ '0x59ff6b8de3b3b39e94b6f9fc0590cf4e3eaa9b6736e6a49c9a6b324c4f58cb9f',
725
+ })
726
+
727
+ expect(Key.serialize(key)).toMatchInlineSnapshot(`
728
+ {
729
+ "expiry": 0,
730
+ "isSuperAdmin": true,
731
+ "keyType": 0,
732
+ "publicKey": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
733
+ }
734
+ `)
735
+ })
736
+ })
737
+
738
+ describe('toRelay', () => {
739
+ test('default', () => {
740
+ const key = Key.fromP256({
741
+ permissions: {
742
+ calls: [
743
+ {
744
+ signature: 'mint()',
745
+ },
746
+ {
747
+ signature: '0xdeadbeef',
748
+ to: '0x0000000000000000000000000000000000000000',
749
+ },
750
+ ],
751
+ spend: [
752
+ {
753
+ limit: 1000000000000000000n,
754
+ period: 'minute',
755
+ token: '0x0000000000000000000000000000000000000000',
756
+ },
757
+ ],
758
+ },
759
+ privateKey:
760
+ '0x59ff6b8de3b3b39e94b6f9fc0590cf4e3eaa9b6736e6a49c9a6b324c4f58cb9f',
761
+ })
762
+
763
+ expect(Key.toRelay(key)).toMatchInlineSnapshot(`
764
+ {
765
+ "expiry": 0,
766
+ "permissions": [
767
+ {
768
+ "selector": "0x1249c58b",
769
+ "to": "0x3232323232323232323232323232323232323232",
770
+ "type": "call",
771
+ },
772
+ {
773
+ "selector": "0xdeadbeef",
774
+ "to": "0x0000000000000000000000000000000000000000",
775
+ "type": "call",
776
+ },
777
+ {
778
+ "limit": 1000000000000000000n,
779
+ "period": "minute",
780
+ "token": "0x0000000000000000000000000000000000000000",
781
+ "type": "spend",
782
+ },
783
+ ],
784
+ "prehash": false,
785
+ "publicKey": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
786
+ "role": "admin",
787
+ "type": "p256",
788
+ }
789
+ `)
790
+ })
791
+
792
+ test('behavior: feeToken', () => {
793
+ const key = Key.fromP256({
794
+ feeToken: {
795
+ limit: '1',
796
+ symbol: 'EXP',
797
+ },
798
+ permissions: {
799
+ calls: [
800
+ {
801
+ signature: 'mint()',
802
+ },
803
+ {
804
+ signature: '0xdeadbeef',
805
+ to: '0x0000000000000000000000000000000000000000',
806
+ },
807
+ ],
808
+ spend: [
809
+ {
810
+ limit: 1000000000000000000n,
811
+ period: 'minute',
812
+ token: '0x0000000000000000000000000000000000000000',
813
+ },
814
+ ],
815
+ },
816
+ privateKey:
817
+ '0x59ff6b8de3b3b39e94b6f9fc0590cf4e3eaa9b6736e6a49c9a6b324c4f58cb9f',
818
+ })
819
+
820
+ expect(Key.toRelay(key, { feeTokens })).toMatchInlineSnapshot(`
821
+ {
822
+ "expiry": 0,
823
+ "permissions": [
824
+ {
825
+ "selector": "0x1249c58b",
826
+ "to": "0x3232323232323232323232323232323232323232",
827
+ "type": "call",
828
+ },
829
+ {
830
+ "selector": "0xdeadbeef",
831
+ "to": "0x0000000000000000000000000000000000000000",
832
+ "type": "call",
833
+ },
834
+ {
835
+ "limit": 1000000n,
836
+ "period": "minute",
837
+ "token": "0x97870b32890d3f1f089489a29007863a5678089d",
838
+ "type": "spend",
839
+ },
840
+ {
841
+ "limit": 1000000000000000000n,
842
+ "period": "minute",
843
+ "token": "0x0000000000000000000000000000000000000000",
844
+ "type": "spend",
845
+ },
846
+ ],
847
+ "prehash": false,
848
+ "publicKey": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
849
+ "role": "admin",
850
+ "type": "p256",
851
+ }
852
+ `)
853
+ })
854
+
855
+ test('behavior: feeToken (existing spend permission)', () => {
856
+ const key = Key.fromP256({
857
+ feeToken: {
858
+ limit: '1',
859
+ symbol: 'ETH',
860
+ },
861
+ permissions: {
862
+ calls: [
863
+ {
864
+ signature: 'mint()',
865
+ },
866
+ {
867
+ signature: '0xdeadbeef',
868
+ to: '0x0000000000000000000000000000000000000000',
869
+ },
870
+ ],
871
+ spend: [
872
+ {
873
+ limit: 1000000000000000000n,
874
+ period: 'minute',
875
+ token: '0x0000000000000000000000000000000000000001',
876
+ },
877
+ {
878
+ limit: 1000000000000000000n,
879
+ period: 'minute',
880
+ token: '0x0000000000000000000000000000000000000000',
881
+ },
882
+ ],
883
+ },
884
+ privateKey:
885
+ '0x59ff6b8de3b3b39e94b6f9fc0590cf4e3eaa9b6736e6a49c9a6b324c4f58cb9f',
886
+ })
887
+
888
+ expect(Key.toRelay(key, { feeTokens })).toMatchInlineSnapshot(`
889
+ {
890
+ "expiry": 0,
891
+ "permissions": [
892
+ {
893
+ "selector": "0x1249c58b",
894
+ "to": "0x3232323232323232323232323232323232323232",
895
+ "type": "call",
896
+ },
897
+ {
898
+ "selector": "0xdeadbeef",
899
+ "to": "0x0000000000000000000000000000000000000000",
900
+ "type": "call",
901
+ },
902
+ {
903
+ "limit": 2000000000000000000n,
904
+ "period": "minute",
905
+ "token": "0x0000000000000000000000000000000000000000",
906
+ "type": "spend",
907
+ },
908
+ {
909
+ "limit": 1000000000000000000n,
910
+ "period": "minute",
911
+ "token": "0x0000000000000000000000000000000000000001",
912
+ "type": "spend",
913
+ },
914
+ ],
915
+ "prehash": false,
916
+ "publicKey": "0xec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008",
917
+ "role": "admin",
918
+ "type": "p256",
919
+ }
920
+ `)
921
+ })
922
+ })
923
+
924
+ describe('resolvePermissions', () => {
925
+ test('default', () => {
926
+ const result = Key.resolvePermissions(
927
+ {
928
+ feeToken: {
929
+ limit: '10',
930
+ symbol: 'EXP',
931
+ },
932
+ permissions: {
933
+ calls: [],
934
+ spend: [
935
+ {
936
+ limit: Value.from('15', 6),
937
+ period: 'year',
938
+ token: '0x97870b32890d3f1f089489a29007863a5678089d',
939
+ },
940
+ ],
941
+ },
942
+ },
943
+ {
944
+ feeTokens,
945
+ },
946
+ )
947
+
948
+ expect(result).toMatchInlineSnapshot(`
949
+ {
950
+ "calls": [],
951
+ "spend": [
952
+ {
953
+ "limit": 25000000n,
954
+ "period": "year",
955
+ "token": "0x97870b32890d3f1f089489a29007863a5678089d",
956
+ },
957
+ ],
958
+ }
959
+ `)
960
+ })
961
+
962
+ test('behavior: no fee tokens provided', async () => {
963
+ const result = Key.resolvePermissions(
964
+ {
965
+ permissions: {
966
+ calls: [],
967
+ spend: [
968
+ {
969
+ limit: Value.from('15', 6),
970
+ period: 'year',
971
+ token: '0x97870b32890d3f1f089489a29007863a5678089d',
972
+ },
973
+ ],
974
+ },
975
+ },
976
+ {},
977
+ )
978
+
979
+ expect(result).toMatchInlineSnapshot(`
980
+ {
981
+ "calls": [],
982
+ "spend": [
983
+ {
984
+ "limit": 15000000n,
985
+ "period": "year",
986
+ "token": "0x97870b32890d3f1f089489a29007863a5678089d",
987
+ },
988
+ ],
989
+ }
990
+ `)
991
+ })
992
+
993
+ test('behavior: empty fee tokens array', async () => {
994
+ const result = Key.resolvePermissions(
995
+ {
996
+ permissions: {
997
+ calls: [],
998
+ spend: [
999
+ {
1000
+ limit: Value.from('15', 6),
1001
+ period: 'year',
1002
+ token: '0x97870b32890d3f1f089489a29007863a5678089d',
1003
+ },
1004
+ ],
1005
+ },
1006
+ },
1007
+ {
1008
+ feeTokens: [],
1009
+ },
1010
+ )
1011
+
1012
+ expect(result).toMatchInlineSnapshot(`
1013
+ {
1014
+ "calls": [],
1015
+ "spend": [
1016
+ {
1017
+ "limit": 15000000n,
1018
+ "period": "year",
1019
+ "token": "0x97870b32890d3f1f089489a29007863a5678089d",
1020
+ },
1021
+ ],
1022
+ }
1023
+ `)
1024
+ })
1025
+
1026
+ test('behavior: no existing spend permissions', async () => {
1027
+ const result = Key.resolvePermissions(
1028
+ {
1029
+ feeToken: {
1030
+ limit: '5',
1031
+ symbol: 'EXP',
1032
+ },
1033
+ permissions: {
1034
+ calls: [],
1035
+ },
1036
+ },
1037
+ {
1038
+ feeTokens,
1039
+ },
1040
+ )
1041
+
1042
+ expect(result).toMatchInlineSnapshot(`
1043
+ {
1044
+ "calls": [],
1045
+ "spend": [
1046
+ {
1047
+ "limit": 5000000n,
1048
+ "period": "year",
1049
+ "token": "0x97870b32890d3f1f089489a29007863a5678089d",
1050
+ },
1051
+ ],
1052
+ }
1053
+ `)
1054
+ })
1055
+
1056
+ test('behavior: no matching spend permission but has other permissions', async () => {
1057
+ const result = Key.resolvePermissions(
1058
+ {
1059
+ feeToken: {
1060
+ limit: '5',
1061
+ symbol: 'EXP',
1062
+ },
1063
+ permissions: {
1064
+ calls: [],
1065
+ spend: [
1066
+ {
1067
+ limit: Value.from('10', 18),
1068
+ period: 'month',
1069
+ token: '0x0000000000000000000000000000000000000000',
1070
+ },
1071
+ {
1072
+ limit: Value.from('20', 18),
1073
+ period: 'day',
1074
+ token: '0x1111111111111111111111111111111111111111',
1075
+ },
1076
+ ],
1077
+ },
1078
+ },
1079
+ {
1080
+ feeTokens,
1081
+ },
1082
+ )
1083
+
1084
+ expect(result).toMatchInlineSnapshot(`
1085
+ {
1086
+ "calls": [],
1087
+ "spend": [
1088
+ {
1089
+ "limit": 5000000n,
1090
+ "period": "day",
1091
+ "token": "0x97870b32890d3f1f089489a29007863a5678089d",
1092
+ },
1093
+ {
1094
+ "limit": 10000000000000000000n,
1095
+ "period": "month",
1096
+ "token": "0x0000000000000000000000000000000000000000",
1097
+ },
1098
+ {
1099
+ "limit": 20000000000000000000n,
1100
+ "period": "day",
1101
+ "token": "0x1111111111111111111111111111111111111111",
1102
+ },
1103
+ ],
1104
+ }
1105
+ `)
1106
+ })
1107
+
1108
+ test('behavior: updates existing spend permission with matching fee token', async () => {
1109
+ const result = Key.resolvePermissions(
1110
+ {
1111
+ feeToken: {
1112
+ limit: '3',
1113
+ symbol: 'EXP',
1114
+ },
1115
+ permissions: {
1116
+ calls: [],
1117
+ spend: [
1118
+ {
1119
+ limit: Value.from('5', 18),
1120
+ period: 'day',
1121
+ token: '0x0000000000000000000000000000000000000000',
1122
+ },
1123
+ {
1124
+ limit: Value.from('10', 6),
1125
+ period: 'month',
1126
+ token: '0x97870b32890d3f1f089489a29007863a5678089d',
1127
+ },
1128
+ ],
1129
+ },
1130
+ },
1131
+ {
1132
+ feeTokens,
1133
+ },
1134
+ )
1135
+
1136
+ expect(result).toMatchInlineSnapshot(`
1137
+ {
1138
+ "calls": [],
1139
+ "spend": [
1140
+ {
1141
+ "limit": 13000000n,
1142
+ "period": "month",
1143
+ "token": "0x97870b32890d3f1f089489a29007863a5678089d",
1144
+ },
1145
+ {
1146
+ "limit": 5000000000000000000n,
1147
+ "period": "day",
1148
+ "token": "0x0000000000000000000000000000000000000000",
1149
+ },
1150
+ ],
1151
+ }
1152
+ `)
1153
+ })
1154
+
1155
+ test('behavior: handles ETH spend permission (ETH fee token)', async () => {
1156
+ const result = Key.resolvePermissions(
1157
+ {
1158
+ feeToken: {
1159
+ limit: '2',
1160
+ symbol: 'ETH',
1161
+ },
1162
+ permissions: {
1163
+ calls: [],
1164
+ spend: [
1165
+ {
1166
+ limit: Value.from('10', 18),
1167
+ period: 'week',
1168
+ },
1169
+ ],
1170
+ },
1171
+ },
1172
+ {
1173
+ feeTokens: feeTokens.toReversed(),
1174
+ },
1175
+ )
1176
+
1177
+ expect(result).toMatchInlineSnapshot(`
1178
+ {
1179
+ "calls": [],
1180
+ "spend": [
1181
+ {
1182
+ "limit": 12000000000000000000n,
1183
+ "period": "week",
1184
+ },
1185
+ ],
1186
+ }
1187
+ `)
1188
+ })
1189
+
1190
+ test('behavior: preserves other permission fields', async () => {
1191
+ const result = Key.resolvePermissions(
1192
+ {
1193
+ feeToken: {
1194
+ limit: '1',
1195
+ symbol: 'EXP',
1196
+ },
1197
+ permissions: {
1198
+ calls: [
1199
+ {
1200
+ signature: '0x12345678',
1201
+ to: '0x1234567890123456789012345678901234567890',
1202
+ },
1203
+ ],
1204
+ spend: [],
1205
+ },
1206
+ },
1207
+ {
1208
+ feeTokens,
1209
+ },
1210
+ )
1211
+
1212
+ expect(result).toMatchInlineSnapshot(`
1213
+ {
1214
+ "calls": [
1215
+ {
1216
+ "signature": "0x12345678",
1217
+ "to": "0x1234567890123456789012345678901234567890",
1218
+ },
1219
+ ],
1220
+ "spend": [
1221
+ {
1222
+ "limit": 1000000n,
1223
+ "period": "year",
1224
+ "token": "0x97870b32890d3f1f089489a29007863a5678089d",
1225
+ },
1226
+ ],
1227
+ }
1228
+ `)
1229
+ })
1230
+
1231
+ test('behavior: handles zero fee limit', async () => {
1232
+ const result = Key.resolvePermissions(
1233
+ {
1234
+ feeToken: {
1235
+ limit: '0',
1236
+ symbol: 'EXP',
1237
+ },
1238
+ permissions: {
1239
+ calls: [],
1240
+ spend: [
1241
+ {
1242
+ limit: Value.from('5', 6),
1243
+ period: 'day',
1244
+ token: '0x97870b32890d3f1f089489a29007863a5678089d',
1245
+ },
1246
+ ],
1247
+ },
1248
+ },
1249
+ {
1250
+ feeTokens,
1251
+ },
1252
+ )
1253
+
1254
+ expect(result).toMatchInlineSnapshot(`
1255
+ {
1256
+ "calls": [],
1257
+ "spend": [
1258
+ {
1259
+ "limit": 5000000n,
1260
+ "period": "day",
1261
+ "token": "0x97870b32890d3f1f089489a29007863a5678089d",
1262
+ },
1263
+ ],
1264
+ }
1265
+ `)
1266
+ })
1267
+ })
1268
+
1269
+ describe('getFeeToken', () => {
1270
+ test('default', () => {
1271
+ const feeToken = Key.getFeeToken(
1272
+ {
1273
+ feeToken: {
1274
+ limit: '0.01',
1275
+ symbol: 'EXP',
1276
+ },
1277
+ permissions: {
1278
+ calls: [],
1279
+ spend: [
1280
+ {
1281
+ limit: 1000000000000000000n,
1282
+ period: 'year',
1283
+ },
1284
+ ],
1285
+ },
1286
+ },
1287
+ {
1288
+ feeTokens,
1289
+ },
1290
+ )
1291
+
1292
+ expect(feeToken).toMatchInlineSnapshot(`
1293
+ {
1294
+ "address": "0x97870b32890d3f1f089489a29007863a5678089d",
1295
+ "decimals": 6,
1296
+ "feeToken": true,
1297
+ "interop": true,
1298
+ "nativeRate": 387750000000000n,
1299
+ "symbol": "EXP",
1300
+ "uid": "exp",
1301
+ "value": 10000n,
1302
+ }
1303
+ `)
1304
+ })
1305
+
1306
+ test('behavior: handles native fee token', () => {
1307
+ const result = Key.getFeeToken(
1308
+ {
1309
+ feeToken: {
1310
+ limit: '0.01',
1311
+ symbol: 'native',
1312
+ },
1313
+ },
1314
+ {
1315
+ feeTokens,
1316
+ },
1317
+ )
1318
+ expect(result).toMatchInlineSnapshot(`
1319
+ {
1320
+ "address": "0x0000000000000000000000000000000000000000",
1321
+ "decimals": 18,
1322
+ "feeToken": true,
1323
+ "interop": true,
1324
+ "nativeRate": 1000000000000000000n,
1325
+ "symbol": "ETH",
1326
+ "uid": "ethereum",
1327
+ "value": 10000000000000000n,
1328
+ }
1329
+ `)
1330
+ })
1331
+
1332
+ test('behavior: returns default when no fee limit', () => {
1333
+ const request = {
1334
+ permissions: {
1335
+ calls: [],
1336
+ },
1337
+ } as const
1338
+ const result = Key.getFeeToken(request, {
1339
+ feeTokens,
1340
+ })
1341
+ expect(result).toMatchInlineSnapshot('undefined')
1342
+ })
1343
+
1344
+ test('behavior: returns zero when null fee limit', () => {
1345
+ const request = {
1346
+ permissions: {
1347
+ calls: [],
1348
+ feeToken: null,
1349
+ },
1350
+ } as const
1351
+ const result = Key.getFeeToken(request, {
1352
+ feeTokens,
1353
+ })
1354
+ expect(result).toMatchInlineSnapshot('undefined')
1355
+ })
1356
+
1357
+ test('behavior: returns zero value when limit token not found', () => {
1358
+ const tokens = [
1359
+ {
1360
+ address: '0x0000000000000000000000000000000000000000',
1361
+ decimals: 18,
1362
+ interop: true,
1363
+ nativeRate: 10n ** 18n,
1364
+ symbol: 'ETH',
1365
+ uid: 'ethereum',
1366
+ },
1367
+ ] as const satisfies Tokens.Tokens
1368
+
1369
+ const result = Key.getFeeToken(
1370
+ {
1371
+ feeToken: {
1372
+ limit: '0.01',
1373
+ symbol: 'EXP',
1374
+ },
1375
+ permissions: {
1376
+ calls: [],
1377
+ },
1378
+ },
1379
+ {
1380
+ feeTokens: tokens,
1381
+ },
1382
+ )
1383
+ expect(result).toMatchInlineSnapshot('undefined')
1384
+ })
1385
+
1386
+ test('behavior: handles tokens without native rate', () => {
1387
+ const tokens = [
1388
+ {
1389
+ address: '0x97870b32890d3f1f089489a29007863a5678089d',
1390
+ decimals: 18,
1391
+ interop: true,
1392
+ symbol: 'EXP',
1393
+ uid: 'exp',
1394
+ },
1395
+ {
1396
+ address: '0x0000000000000000000000000000000000000000',
1397
+ decimals: 18,
1398
+ interop: true,
1399
+ symbol: 'ETH',
1400
+ uid: 'ethereum',
1401
+ },
1402
+ ] as const satisfies Tokens.Tokens
1403
+
1404
+ const result = Key.getFeeToken(
1405
+ {
1406
+ feeToken: {
1407
+ limit: '0.01',
1408
+ symbol: 'ETH',
1409
+ },
1410
+ permissions: {
1411
+ calls: [],
1412
+ },
1413
+ },
1414
+ {
1415
+ feeTokens: tokens,
1416
+ },
1417
+ )
1418
+ expect(result?.value).toMatchInlineSnapshot('10000000000000000n')
1419
+ })
1420
+ })