rise-wallet 0.1.4-beta.1 → 0.2.28

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 (486) hide show
  1. package/README.md +64 -34
  2. package/dist/cli/Dialog.d.ts +34 -0
  3. package/dist/cli/Dialog.js +60 -0
  4. package/dist/cli/Dialog.js.map +1 -0
  5. package/dist/cli/Messenger.d.ts +7 -0
  6. package/dist/cli/Messenger.js +123 -0
  7. package/dist/cli/Messenger.js.map +1 -0
  8. package/dist/cli/bin/commands-D7N5ucUu.js +50 -0
  9. package/dist/cli/bin/index.js +9 -0
  10. package/dist/cli/index.d.ts +2 -0
  11. package/dist/cli/index.js +3 -0
  12. package/dist/cli/index.js.map +1 -0
  13. package/dist/cli/internal/http.d.ts +6 -0
  14. package/dist/cli/internal/http.js +17 -0
  15. package/dist/cli/internal/http.js.map +1 -0
  16. package/dist/cli/tsdown.config.d.ts +2 -0
  17. package/dist/cli/tsdown.config.js +28 -0
  18. package/dist/cli/tsdown.config.js.map +1 -0
  19. package/dist/core/Chains.d.ts +210 -0
  20. package/dist/core/Chains.js +20 -0
  21. package/dist/core/Chains.js.map +1 -0
  22. package/dist/core/Dialog.d.ts +307 -0
  23. package/dist/core/Dialog.js +809 -0
  24. package/dist/core/Dialog.js.map +1 -0
  25. package/dist/core/Messenger.d.ts +164 -0
  26. package/dist/core/Messenger.js +207 -0
  27. package/dist/core/Messenger.js.map +1 -0
  28. package/dist/core/Mode.d.ts +4 -0
  29. package/dist/core/Mode.js +5 -0
  30. package/dist/core/Mode.js.map +1 -0
  31. package/dist/core/Porto.d.ts +1608 -0
  32. package/dist/core/Porto.js +105 -0
  33. package/dist/core/Porto.js.map +1 -0
  34. package/dist/core/RpcSchema.d.ts +81 -0
  35. package/dist/core/RpcSchema.js +2 -0
  36. package/dist/core/RpcSchema.js.map +1 -0
  37. package/dist/core/Storage.d.ts +14 -0
  38. package/dist/core/Storage.js +109 -0
  39. package/dist/core/Storage.js.map +1 -0
  40. package/dist/core/Transport.d.ts +22 -0
  41. package/dist/core/Transport.js +37 -0
  42. package/dist/core/Transport.js.map +1 -0
  43. package/dist/core/internal/_generated/chains.d.ts +1 -0
  44. package/dist/core/internal/_generated/chains.js +3 -0
  45. package/dist/core/internal/_generated/chains.js.map +1 -0
  46. package/dist/core/internal/_generated/contracts/IthacaAccount.d.ts +1120 -0
  47. package/dist/core/internal/_generated/contracts/IthacaAccount.js +1453 -0
  48. package/dist/core/internal/_generated/contracts/IthacaAccount.js.map +1 -0
  49. package/dist/core/internal/call.d.ts +163 -0
  50. package/dist/core/internal/call.js +115 -0
  51. package/dist/core/internal/call.js.map +1 -0
  52. package/dist/core/internal/erc8010.d.ts +17 -0
  53. package/dist/core/internal/erc8010.js +29 -0
  54. package/dist/core/internal/erc8010.js.map +1 -0
  55. package/dist/core/internal/intersectionObserver.d.ts +1 -0
  56. package/dist/core/internal/intersectionObserver.js +5 -0
  57. package/dist/core/internal/intersectionObserver.js.map +1 -0
  58. package/dist/core/internal/logger.d.ts +21 -0
  59. package/dist/core/internal/logger.js +24 -0
  60. package/dist/core/internal/logger.js.map +1 -0
  61. package/dist/core/internal/mode.d.ts +344 -0
  62. package/dist/core/internal/mode.js +110 -0
  63. package/dist/core/internal/mode.js.map +1 -0
  64. package/dist/core/internal/modes/dialog.d.ts +799 -0
  65. package/dist/core/internal/modes/dialog.js +760 -0
  66. package/dist/core/internal/modes/dialog.js.map +1 -0
  67. package/dist/core/internal/modes/reactNative.d.ts +1401 -0
  68. package/dist/core/internal/modes/reactNative.js +19 -0
  69. package/dist/core/internal/modes/reactNative.js.map +1 -0
  70. package/dist/core/internal/modes/relay.d.ts +684 -0
  71. package/dist/core/internal/modes/relay.js +708 -0
  72. package/dist/core/internal/modes/relay.js.map +1 -0
  73. package/dist/core/internal/permissions.d.ts +59 -0
  74. package/dist/core/internal/permissions.js +30 -0
  75. package/dist/core/internal/permissions.js.map +1 -0
  76. package/dist/core/internal/permissionsRequest.d.ts +71 -0
  77. package/dist/core/internal/permissionsRequest.js +58 -0
  78. package/dist/core/internal/permissionsRequest.js.map +1 -0
  79. package/dist/core/internal/porto.d.ts +13 -0
  80. package/dist/core/internal/porto.js +2 -0
  81. package/dist/core/internal/porto.js.map +1 -0
  82. package/dist/core/internal/promise.d.ts +8 -0
  83. package/dist/core/internal/promise.js +11 -0
  84. package/dist/core/internal/promise.js.map +1 -0
  85. package/dist/core/internal/provider.d.ts +29 -0
  86. package/dist/core/internal/provider.js +941 -0
  87. package/dist/core/internal/provider.js.map +1 -0
  88. package/dist/core/internal/relay/rpcSchema.d.ts +75 -0
  89. package/dist/core/internal/relay/rpcSchema.js +7 -0
  90. package/dist/core/internal/relay/rpcSchema.js.map +1 -0
  91. package/dist/core/internal/relay/schema/capabilities.d.ts +164 -0
  92. package/dist/core/internal/relay/schema/capabilities.js +112 -0
  93. package/dist/core/internal/relay/schema/capabilities.js.map +1 -0
  94. package/dist/core/internal/relay/schema/intent.d.ts +167 -0
  95. package/dist/core/internal/relay/schema/intent.js +170 -0
  96. package/dist/core/internal/relay/schema/intent.js.map +1 -0
  97. package/dist/core/internal/relay/schema/key.d.ts +43 -0
  98. package/dist/core/internal/relay/schema/key.js +30 -0
  99. package/dist/core/internal/relay/schema/key.js.map +1 -0
  100. package/dist/core/internal/relay/schema/permission.d.ts +39 -0
  101. package/dist/core/internal/relay/schema/permission.js +29 -0
  102. package/dist/core/internal/relay/schema/permission.js.map +1 -0
  103. package/dist/core/internal/relay/schema/preCall.d.ts +62 -0
  104. package/dist/core/internal/relay/schema/preCall.js +36 -0
  105. package/dist/core/internal/relay/schema/preCall.js.map +1 -0
  106. package/dist/core/internal/relay/schema/quotes.d.ts +369 -0
  107. package/dist/core/internal/relay/schema/quotes.js +89 -0
  108. package/dist/core/internal/relay/schema/quotes.js.map +1 -0
  109. package/dist/core/internal/relay/schema/rpc.d.ts +1528 -0
  110. package/dist/core/internal/relay/schema/rpc.js +638 -0
  111. package/dist/core/internal/relay/schema/rpc.js.map +1 -0
  112. package/dist/core/internal/relay/schema/token.d.ts +13 -0
  113. package/dist/core/internal/relay/schema/token.js +13 -0
  114. package/dist/core/internal/relay/schema/token.js.map +1 -0
  115. package/dist/core/internal/requiredFunds.d.ts +18 -0
  116. package/dist/core/internal/requiredFunds.js +25 -0
  117. package/dist/core/internal/requiredFunds.js.map +1 -0
  118. package/dist/core/internal/schema/capabilities.d.ts +313 -0
  119. package/dist/core/internal/schema/capabilities.js +133 -0
  120. package/dist/core/internal/schema/capabilities.js.map +1 -0
  121. package/dist/core/internal/schema/key.d.ts +164 -0
  122. package/dist/core/internal/schema/key.js +75 -0
  123. package/dist/core/internal/schema/key.js.map +1 -0
  124. package/dist/core/internal/schema/permissions.d.ts +102 -0
  125. package/dist/core/internal/schema/permissions.js +28 -0
  126. package/dist/core/internal/schema/permissions.js.map +1 -0
  127. package/dist/core/internal/schema/request.d.ts +937 -0
  128. package/dist/core/internal/schema/request.js +57 -0
  129. package/dist/core/internal/schema/request.js.map +1 -0
  130. package/dist/core/internal/schema/rpc.d.ts +3314 -0
  131. package/dist/core/internal/schema/rpc.js +599 -0
  132. package/dist/core/internal/schema/rpc.js.map +1 -0
  133. package/dist/core/internal/schema/token.d.ts +1 -0
  134. package/dist/core/internal/schema/token.js +2 -0
  135. package/dist/core/internal/schema/token.js.map +1 -0
  136. package/dist/core/internal/schema/utils.d.ts +18 -0
  137. package/dist/core/internal/schema/utils.js +213 -0
  138. package/dist/core/internal/schema/utils.js.map +1 -0
  139. package/dist/core/internal/siwe.d.ts +32 -0
  140. package/dist/core/internal/siwe.js +92 -0
  141. package/dist/core/internal/siwe.js.map +1 -0
  142. package/dist/core/internal/store.d.ts +2 -0
  143. package/dist/core/internal/store.js +9 -0
  144. package/dist/core/internal/store.js.map +1 -0
  145. package/dist/core/internal/tokens.d.ts +57 -0
  146. package/dist/core/internal/tokens.js +69 -0
  147. package/dist/core/internal/tokens.js.map +1 -0
  148. package/dist/core/internal/types.d.ts +298 -0
  149. package/dist/core/internal/types.js +2 -0
  150. package/dist/core/internal/types.js.map +1 -0
  151. package/dist/core/internal/urlString.d.ts +1 -0
  152. package/dist/core/internal/urlString.js +8 -0
  153. package/dist/core/internal/urlString.js.map +1 -0
  154. package/dist/core/internal/userAgent.d.ts +10 -0
  155. package/dist/core/internal/userAgent.js +19 -0
  156. package/dist/core/internal/userAgent.js.map +1 -0
  157. package/dist/core/internal/utils.d.ts +24 -0
  158. package/dist/core/internal/utils.js +62 -0
  159. package/dist/core/internal/utils.js.map +1 -0
  160. package/dist/core/react-native/Porto.d.ts +1480 -0
  161. package/dist/core/react-native/Porto.js +17 -0
  162. package/dist/core/react-native/Porto.js.map +1 -0
  163. package/dist/core/react-native/configure.d.ts +9 -0
  164. package/dist/core/react-native/configure.js +24 -0
  165. package/dist/core/react-native/configure.js.map +1 -0
  166. package/dist/core/react-native/environment.d.ts +26 -0
  167. package/dist/core/react-native/environment.js +13 -0
  168. package/dist/core/react-native/environment.js.map +1 -0
  169. package/dist/core/react-native/index.d.ts +4 -0
  170. package/dist/core/react-native/index.js +5 -0
  171. package/dist/core/react-native/index.js.map +1 -0
  172. package/dist/core/react-native/utils.d.ts +1 -0
  173. package/dist/core/react-native/utils.js +12 -0
  174. package/dist/core/react-native/utils.js.map +1 -0
  175. package/dist/index.d.ts +16 -2
  176. package/dist/index.js +15 -2
  177. package/dist/index.js.map +1 -0
  178. package/dist/internal/index.d.ts +3 -0
  179. package/dist/internal/index.js +4 -0
  180. package/dist/internal/index.js.map +1 -0
  181. package/dist/react-native/crypto.d.ts +1 -0
  182. package/dist/react-native/crypto.js +12 -0
  183. package/dist/react-native/crypto.js.map +1 -0
  184. package/dist/react-native/index.d.ts +7 -0
  185. package/dist/react-native/index.js +12 -0
  186. package/dist/react-native/index.js.map +1 -0
  187. package/dist/react-native/register.d.ts +2 -0
  188. package/dist/react-native/register.js +15 -0
  189. package/dist/react-native/register.js.map +1 -0
  190. package/dist/register/index.d.ts +14 -0
  191. package/dist/register/index.js +2 -0
  192. package/dist/register/index.js.map +1 -0
  193. package/dist/remote/Actions.d.ts +33 -0
  194. package/dist/remote/Actions.js +76 -0
  195. package/dist/remote/Actions.js.map +1 -0
  196. package/dist/remote/Events.d.ts +46 -0
  197. package/dist/remote/Events.js +132 -0
  198. package/dist/remote/Events.js.map +1 -0
  199. package/dist/remote/Hooks.d.ts +3800 -0
  200. package/dist/remote/Hooks.js +106 -0
  201. package/dist/remote/Hooks.js.map +1 -0
  202. package/dist/remote/Porto.d.ts +857 -0
  203. package/dist/remote/Porto.js +66 -0
  204. package/dist/remote/Porto.js.map +1 -0
  205. package/dist/remote/index.d.ts +4 -0
  206. package/dist/remote/index.js +5 -0
  207. package/dist/remote/index.js.map +1 -0
  208. package/dist/remote/internal/methodPolicies.d.ts +96 -0
  209. package/dist/remote/internal/methodPolicies.js +102 -0
  210. package/dist/remote/internal/methodPolicies.js.map +1 -0
  211. package/dist/server/Route.d.ts +87 -0
  212. package/dist/server/Route.js +189 -0
  213. package/dist/server/Route.js.map +1 -0
  214. package/dist/server/Router.d.ts +23 -0
  215. package/dist/server/Router.js +29 -0
  216. package/dist/server/Router.js.map +1 -0
  217. package/dist/server/index.d.ts +2 -0
  218. package/dist/server/index.js +3 -0
  219. package/dist/server/index.js.map +1 -0
  220. package/dist/server/internal/merchantSchema.d.ts +64 -0
  221. package/dist/server/internal/merchantSchema.js +7 -0
  222. package/dist/server/internal/merchantSchema.js.map +1 -0
  223. package/dist/server/internal/requestListener.d.ts +123 -0
  224. package/dist/server/internal/requestListener.js +172 -0
  225. package/dist/server/internal/requestListener.js.map +1 -0
  226. package/dist/theme/Theme.d.ts +121 -0
  227. package/dist/theme/Theme.js +18 -0
  228. package/dist/theme/Theme.js.map +1 -0
  229. package/dist/theme/index.d.ts +2 -0
  230. package/dist/theme/index.js +2 -0
  231. package/dist/theme/index.js.map +1 -0
  232. package/dist/trusted-hosts.d.ts +1 -0
  233. package/dist/trusted-hosts.js +41 -0
  234. package/dist/trusted-hosts.js.map +1 -0
  235. package/dist/viem/Account.d.ts +110 -0
  236. package/dist/viem/Account.js +132 -0
  237. package/dist/viem/Account.js.map +1 -0
  238. package/dist/viem/AccountActions.d.ts +10 -0
  239. package/dist/viem/AccountActions.js +14 -0
  240. package/dist/viem/AccountActions.js.map +1 -0
  241. package/dist/viem/CapabilitiesSchema.d.ts +14 -0
  242. package/dist/viem/CapabilitiesSchema.js +2 -0
  243. package/dist/viem/CapabilitiesSchema.js.map +1 -0
  244. package/dist/viem/ContractActions.d.ts +208 -0
  245. package/dist/viem/ContractActions.js +350 -0
  246. package/dist/viem/ContractActions.js.map +1 -0
  247. package/dist/viem/Key.d.ts +1155 -0
  248. package/dist/viem/Key.js +924 -0
  249. package/dist/viem/Key.js.map +1 -0
  250. package/dist/viem/RelayActions.d.ts +435 -0
  251. package/dist/viem/RelayActions.js +385 -0
  252. package/dist/viem/RelayActions.js.map +1 -0
  253. package/dist/viem/RelayClient.d.ts +26 -0
  254. package/dist/viem/RelayClient.js +44 -0
  255. package/dist/viem/RelayClient.js.map +1 -0
  256. package/dist/viem/RpcSchema.d.ts +22 -0
  257. package/dist/viem/RpcSchema.js +2 -0
  258. package/dist/viem/RpcSchema.js.map +1 -0
  259. package/dist/viem/WalletActions.d.ts +86 -0
  260. package/dist/viem/WalletActions.js +220 -0
  261. package/dist/viem/WalletActions.js.map +1 -0
  262. package/dist/viem/WalletClient.d.ts +20 -0
  263. package/dist/viem/WalletClient.js +23 -0
  264. package/dist/viem/WalletClient.js.map +1 -0
  265. package/dist/viem/index.d.ts +13 -0
  266. package/dist/viem/index.js +12 -0
  267. package/dist/viem/index.js.map +1 -0
  268. package/dist/viem/internal/relayActions.d.ts +364 -0
  269. package/dist/viem/internal/relayActions.js +783 -0
  270. package/dist/viem/internal/relayActions.js.map +1 -0
  271. package/dist/viem/internal/utils.d.ts +15 -0
  272. package/dist/viem/internal/utils.js +2 -0
  273. package/dist/viem/internal/utils.js.map +1 -0
  274. package/dist/wagmi/Actions.d.ts +1 -0
  275. package/dist/wagmi/Actions.js +2 -0
  276. package/dist/wagmi/Actions.js.map +1 -0
  277. package/dist/wagmi/Connector.d.ts +26 -0
  278. package/dist/wagmi/Connector.js +238 -0
  279. package/dist/wagmi/Connector.js.map +1 -0
  280. package/dist/wagmi/Hooks.d.ts +1 -0
  281. package/dist/wagmi/Hooks.js +2 -0
  282. package/dist/wagmi/Hooks.js.map +1 -0
  283. package/dist/wagmi/Query.d.ts +1 -0
  284. package/dist/wagmi/Query.js +2 -0
  285. package/dist/wagmi/Query.js.map +1 -0
  286. package/dist/wagmi/index.d.ts +4 -0
  287. package/dist/wagmi/index.js +5 -0
  288. package/dist/wagmi/index.js.map +1 -0
  289. package/dist/wagmi/internal/core.d.ts +83 -0
  290. package/dist/wagmi/internal/core.js +229 -0
  291. package/dist/wagmi/internal/core.js.map +1 -0
  292. package/dist/wagmi/internal/query.d.ts +32 -0
  293. package/dist/wagmi/internal/query.js +23 -0
  294. package/dist/wagmi/internal/query.js.map +1 -0
  295. package/dist/wagmi/internal/react.d.ts +90 -0
  296. package/dist/wagmi/internal/react.js +256 -0
  297. package/dist/wagmi/internal/react.js.map +1 -0
  298. package/dist/wagmi/internal/types.d.ts +10 -0
  299. package/dist/wagmi/internal/types.js +2 -0
  300. package/dist/wagmi/internal/types.js.map +1 -0
  301. package/dist/wagmi/internal/utils.d.ts +1 -0
  302. package/dist/wagmi/internal/utils.js +18 -0
  303. package/dist/wagmi/internal/utils.js.map +1 -0
  304. package/package.json +286 -34
  305. package/src/cli/Dialog.ts +75 -0
  306. package/src/cli/Messenger.ts +148 -0
  307. package/src/cli/bin/index.ts +37 -0
  308. package/src/cli/bin/tsconfig.json +8 -0
  309. package/src/cli/index.ts +2 -0
  310. package/src/cli/internal/commands.ts +212 -0
  311. package/src/cli/internal/context.ts +56 -0
  312. package/src/cli/internal/http.ts +28 -0
  313. package/src/cli/internal/utils.ts +28 -0
  314. package/src/cli/tsdown.config.ts +37 -0
  315. package/src/core/Chains.ts +25 -0
  316. package/src/core/Dialog.ts +1059 -0
  317. package/src/core/Messenger.ts +394 -0
  318. package/src/core/Mode.ts +4 -0
  319. package/src/core/Porto.ts +287 -0
  320. package/src/core/RpcSchema.ts +124 -0
  321. package/src/core/Storage.ts +122 -0
  322. package/src/core/Transport.ts +45 -0
  323. package/src/core/internal/_generated/chains.ts +2 -0
  324. package/src/core/internal/_generated/contracts/EIP7702Proxy.ts +25 -0
  325. package/src/core/internal/_generated/contracts/Escrow.ts +330 -0
  326. package/src/core/internal/_generated/contracts/ExperimentERC20.ts +569 -0
  327. package/src/core/internal/_generated/contracts/ExperimentERC721.ts +588 -0
  328. package/src/core/internal/_generated/contracts/GuardedExecutor.ts +623 -0
  329. package/src/core/internal/_generated/contracts/ICallChecker.ts +34 -0
  330. package/src/core/internal/_generated/contracts/ICommon.ts +4 -0
  331. package/src/core/internal/_generated/contracts/IEscrow.ts +114 -0
  332. package/src/core/internal/_generated/contracts/IFunder.ts +80 -0
  333. package/src/core/internal/_generated/contracts/IFunderV4.ts +45 -0
  334. package/src/core/internal/_generated/contracts/IIthacaAccount.ts +107 -0
  335. package/src/core/internal/_generated/contracts/IOAppCore.ts +142 -0
  336. package/src/core/internal/_generated/contracts/IOAppMsgInspector.ts +45 -0
  337. package/src/core/internal/_generated/contracts/IOAppReceiver.ts +161 -0
  338. package/src/core/internal/_generated/contracts/IOrchestrator.ts +95 -0
  339. package/src/core/internal/_generated/contracts/ISettler.ts +52 -0
  340. package/src/core/internal/_generated/contracts/ISigner.ts +34 -0
  341. package/src/core/internal/_generated/contracts/IthacaAccount.ts +1454 -0
  342. package/src/core/internal/_generated/contracts/IthacaAccountNew.ts +1454 -0
  343. package/src/core/internal/_generated/contracts/IthacaAccountOld.ts +1454 -0
  344. package/src/core/internal/_generated/contracts/LayerZeroSettler.ts +811 -0
  345. package/src/core/internal/_generated/contracts/LibNonce.ts +15 -0
  346. package/src/core/internal/_generated/contracts/LibTStack.ts +4 -0
  347. package/src/core/internal/_generated/contracts/MultiSigSigner.ts +203 -0
  348. package/src/core/internal/_generated/contracts/OApp.ts +412 -0
  349. package/src/core/internal/_generated/contracts/OAppCore.ts +229 -0
  350. package/src/core/internal/_generated/contracts/OAppReceiver.ts +396 -0
  351. package/src/core/internal/_generated/contracts/OAppSender.ts +245 -0
  352. package/src/core/internal/_generated/contracts/Orchestrator.ts +390 -0
  353. package/src/core/internal/_generated/contracts/SimpleFunder.ts +534 -0
  354. package/src/core/internal/_generated/contracts/SimpleSettler.ts +360 -0
  355. package/src/core/internal/_generated/contracts/Simulator.ts +170 -0
  356. package/src/core/internal/_generated/contracts/TokenTransferLib.ts +4 -0
  357. package/src/core/internal/_snapshots/provider.browser.test.ts.snap +119 -0
  358. package/src/core/internal/_snapshots/provider.test.ts.snap +1103 -0
  359. package/src/core/internal/call.test.ts +116 -0
  360. package/src/core/internal/call.ts +245 -0
  361. package/src/core/internal/erc8010.test.ts +74 -0
  362. package/src/core/internal/erc8010.ts +44 -0
  363. package/src/core/internal/intersectionObserver.ts +5 -0
  364. package/src/core/internal/logger.ts +42 -0
  365. package/src/core/internal/mode.ts +498 -0
  366. package/src/core/internal/modes/dialog.ts +1051 -0
  367. package/src/core/internal/modes/reactNative.ts +29 -0
  368. package/src/core/internal/modes/relay.ts +893 -0
  369. package/src/core/internal/permissions.ts +43 -0
  370. package/src/core/internal/permissionsRequest.ts +88 -0
  371. package/src/core/internal/porto.ts +16 -0
  372. package/src/core/internal/promise.ts +19 -0
  373. package/src/core/internal/provider.browser.test.ts +311 -0
  374. package/src/core/internal/provider.test.ts +3552 -0
  375. package/src/core/internal/provider.ts +1277 -0
  376. package/src/core/internal/relay/rpcSchema.ts +101 -0
  377. package/src/core/internal/relay/schema/capabilities.test.ts +663 -0
  378. package/src/core/internal/relay/schema/capabilities.ts +156 -0
  379. package/src/core/internal/relay/schema/intent.test.ts +433 -0
  380. package/src/core/internal/relay/schema/intent.ts +174 -0
  381. package/src/core/internal/relay/schema/key.test.ts +424 -0
  382. package/src/core/internal/relay/schema/key.ts +34 -0
  383. package/src/core/internal/relay/schema/permission.test.ts +499 -0
  384. package/src/core/internal/relay/schema/permission.ts +34 -0
  385. package/src/core/internal/relay/schema/preCall.ts +39 -0
  386. package/src/core/internal/relay/schema/quotes.test.ts +901 -0
  387. package/src/core/internal/relay/schema/quotes.ts +98 -0
  388. package/src/core/internal/relay/schema/rpc.ts +822 -0
  389. package/src/core/internal/relay/schema/token.ts +16 -0
  390. package/src/core/internal/requiredFunds.test.ts +141 -0
  391. package/src/core/internal/requiredFunds.ts +45 -0
  392. package/src/core/internal/schema/capabilities.test.ts +1334 -0
  393. package/src/core/internal/schema/capabilities.ts +162 -0
  394. package/src/core/internal/schema/key.test.ts +570 -0
  395. package/src/core/internal/schema/key.ts +98 -0
  396. package/src/core/internal/schema/permissions.test.ts +948 -0
  397. package/src/core/internal/schema/permissions.ts +31 -0
  398. package/src/core/internal/schema/request.bench.ts +35 -0
  399. package/src/core/internal/schema/request.ts +90 -0
  400. package/src/core/internal/schema/rpc.ts +821 -0
  401. package/src/core/internal/schema/token.ts +1 -0
  402. package/src/core/internal/schema/utils.test.ts +572 -0
  403. package/src/core/internal/schema/utils.ts +236 -0
  404. package/src/core/internal/siwe.test.ts +473 -0
  405. package/src/core/internal/siwe.ts +144 -0
  406. package/src/core/internal/store.ts +9 -0
  407. package/src/core/internal/tokens.test.ts +317 -0
  408. package/src/core/internal/tokens.ts +125 -0
  409. package/src/core/internal/types.ts +448 -0
  410. package/src/core/internal/urlString.ts +5 -0
  411. package/src/core/internal/userAgent.ts +35 -0
  412. package/src/core/internal/utils.test.ts +35 -0
  413. package/src/core/internal/utils.ts +67 -0
  414. package/src/core/react-native/Porto.ts +22 -0
  415. package/src/core/react-native/configure.ts +31 -0
  416. package/src/core/react-native/environment.ts +43 -0
  417. package/src/core/react-native/index.ts +4 -0
  418. package/src/core/react-native/utils.ts +18 -0
  419. package/src/index.ts +17 -0
  420. package/src/internal/index.ts +3 -0
  421. package/src/react-native/crypto.ts +19 -0
  422. package/src/react-native/index.ts +15 -0
  423. package/src/react-native/register.ts +24 -0
  424. package/src/register/index.ts +17 -0
  425. package/src/remote/Actions.ts +115 -0
  426. package/src/remote/Events.ts +193 -0
  427. package/src/remote/Hooks.ts +194 -0
  428. package/src/remote/Porto.ts +144 -0
  429. package/src/remote/index.ts +4 -0
  430. package/src/remote/internal/methodPolicies.ts +124 -0
  431. package/src/server/Route.test.ts +347 -0
  432. package/src/server/Route.ts +259 -0
  433. package/src/server/Router.test.ts +32 -0
  434. package/src/server/Router.ts +59 -0
  435. package/src/server/index.ts +2 -0
  436. package/src/server/internal/merchantSchema.ts +11 -0
  437. package/src/server/internal/requestListener.ts +284 -0
  438. package/src/theme/Theme.ts +163 -0
  439. package/src/theme/index.ts +2 -0
  440. package/src/trusted-hosts.ts +40 -0
  441. package/src/tsconfig.build.tsbuildinfo +1 -0
  442. package/src/tsconfig.json +15 -0
  443. package/src/viem/Account.test.ts +270 -0
  444. package/src/viem/Account.ts +278 -0
  445. package/src/viem/AccountActions.test.ts +3 -0
  446. package/src/viem/AccountActions.ts +30 -0
  447. package/src/viem/CapabilitiesSchema.ts +18 -0
  448. package/src/viem/ContractActions.test.ts +980 -0
  449. package/src/viem/ContractActions.ts +624 -0
  450. package/src/viem/Key.test.ts +1420 -0
  451. package/src/viem/Key.ts +1318 -0
  452. package/src/viem/RelayActions.test.ts +1730 -0
  453. package/src/viem/RelayActions.ts +1082 -0
  454. package/src/viem/RelayClient.test.ts +127 -0
  455. package/src/viem/RelayClient.ts +87 -0
  456. package/src/viem/RpcSchema.ts +27 -0
  457. package/src/viem/WalletActions.test.ts +646 -0
  458. package/src/viem/WalletActions.ts +476 -0
  459. package/src/viem/WalletClient.test.ts +36 -0
  460. package/src/viem/WalletClient.ts +74 -0
  461. package/src/viem/index.ts +13 -0
  462. package/src/viem/internal/relayActions.test.ts +1296 -0
  463. package/src/viem/internal/relayActions.ts +1222 -0
  464. package/src/viem/internal/utils.ts +27 -0
  465. package/src/wagmi/Actions.ts +13 -0
  466. package/src/wagmi/Connector.ts +304 -0
  467. package/src/wagmi/Hooks.ts +14 -0
  468. package/src/wagmi/Query.ts +5 -0
  469. package/src/wagmi/index.ts +4 -0
  470. package/src/wagmi/internal/core.test.ts +12 -0
  471. package/src/wagmi/internal/core.ts +468 -0
  472. package/src/wagmi/internal/query.ts +52 -0
  473. package/src/wagmi/internal/react.test.ts +12 -0
  474. package/src/wagmi/internal/react.ts +705 -0
  475. package/src/wagmi/internal/types.ts +21 -0
  476. package/src/wagmi/internal/utils.ts +25 -0
  477. package/dist/chain.cjs +0 -17
  478. package/dist/chain.d.cts +0 -41
  479. package/dist/chain.d.ts +0 -41
  480. package/dist/chain.js +0 -13
  481. package/dist/config.cjs +0 -19
  482. package/dist/config.d.cts +0 -3
  483. package/dist/config.d.ts +0 -3
  484. package/dist/config.js +0 -16
  485. package/dist/index.cjs +0 -18
  486. package/dist/index.d.cts +0 -2
@@ -0,0 +1,708 @@
1
+ import * as Bytes from 'ox/Bytes';
2
+ import * as Hash from 'ox/Hash';
3
+ import * as Hex from 'ox/Hex';
4
+ import * as Json from 'ox/Json';
5
+ import * as PersonalMessage from 'ox/PersonalMessage';
6
+ import * as Provider from 'ox/Provider';
7
+ import * as PublicKey from 'ox/PublicKey';
8
+ import * as RpcResponse from 'ox/RpcResponse';
9
+ import * as Secp256k1 from 'ox/Secp256k1';
10
+ import * as TypedData from 'ox/TypedData';
11
+ import * as WebAuthnP256 from 'ox/WebAuthnP256';
12
+ import { waitForCallsStatus } from 'viem/actions';
13
+ import * as Account from "../../../viem/Account.js";
14
+ import * as ContractActions from "../../../viem/ContractActions.js";
15
+ import * as RelayActions_internal from "../../../viem/internal/relayActions.js";
16
+ import * as Key from "../../../viem/Key.js";
17
+ import * as RelayActions from "../../../viem/RelayActions.js";
18
+ import * as Erc8010 from "../erc8010.js";
19
+ import * as Mode from "../mode.js";
20
+ import * as PermissionsRequest from "../permissionsRequest.js";
21
+ import * as RequiredFunds from "../requiredFunds.js";
22
+ import * as Siwe from "../siwe.js";
23
+ import * as Tokens from "../tokens.js";
24
+ import * as U from "../utils.js";
25
+ /**
26
+ * Mode for a WebAuthn-based environment that interacts with the Porto
27
+ * Relay. Account management, signing, and execution is coordinated
28
+ * between the library and the Relay.
29
+ *
30
+ * @param parameters - Parameters.
31
+ * @returns Mode.
32
+ */
33
+ export function relay(parameters = {}) {
34
+ const config = parameters;
35
+ const { mock, multichain = true, webAuthn } = config;
36
+ let address_internal;
37
+ let email_internal;
38
+ const keystoreHost = (() => {
39
+ if (config.keystoreHost === 'self')
40
+ return undefined;
41
+ if (typeof window !== 'undefined' &&
42
+ window.location?.hostname === 'localhost')
43
+ return undefined;
44
+ return config.keystoreHost;
45
+ })();
46
+ return Mode.from({
47
+ actions: {
48
+ async addFunds() {
49
+ throw new Provider.UnsupportedMethodError();
50
+ },
51
+ async createAccount(parameters) {
52
+ const { admins, email, label, permissions, internal, signInWithEthereum, } = parameters;
53
+ const { client } = internal;
54
+ const eoa = Account.fromPrivateKey(Secp256k1.randomPrivateKey());
55
+ const feeTokens = await Tokens.getTokens(client);
56
+ const adminKey = !mock
57
+ ? await Key.createWebAuthnP256({
58
+ createFn: webAuthn?.createFn,
59
+ label: label ||
60
+ `${eoa.address.slice(0, 8)}\u2026${eoa.address.slice(-6)}`,
61
+ rpId: keystoreHost,
62
+ userId: Bytes.from(eoa.address),
63
+ })
64
+ : Key.createHeadlessWebAuthnP256();
65
+ const sessionKey = await PermissionsRequest.toKey(permissions, {
66
+ chainId: client.chain.id,
67
+ feeTokens,
68
+ });
69
+ const adminKeys = admins?.map((admin) => Key.from(admin));
70
+ const account = await RelayActions.upgradeAccount(client, {
71
+ account: eoa,
72
+ authorizeKeys: [
73
+ adminKey,
74
+ ...(adminKeys ?? []),
75
+ ...(sessionKey ? [sessionKey] : []),
76
+ ],
77
+ });
78
+ address_internal = eoa.address;
79
+ if (email && label)
80
+ await RelayActions.setEmail(client, {
81
+ email: label,
82
+ walletAddress: account.address,
83
+ });
84
+ const signInWithEthereum_response = await (async () => {
85
+ if (!signInWithEthereum)
86
+ return undefined;
87
+ const message = await Siwe.buildMessage(client, signInWithEthereum, {
88
+ address: account.address,
89
+ });
90
+ const signature = await Account.sign(eoa, {
91
+ payload: PersonalMessage.getSignPayload(Hex.fromString(message)),
92
+ });
93
+ const signature_erc8010 = await Erc8010.wrap(client, {
94
+ address: account.address,
95
+ signature,
96
+ });
97
+ return { message, signature: signature_erc8010 };
98
+ })();
99
+ return {
100
+ account: {
101
+ ...account,
102
+ signInWithEthereum: signInWithEthereum_response,
103
+ },
104
+ };
105
+ },
106
+ async getAccountVersion(parameters) {
107
+ const { address, internal } = parameters;
108
+ const { client } = internal;
109
+ const { contracts } = await RelayActions.getCapabilities(client);
110
+ const { accountImplementation } = contracts;
111
+ const latest = await ContractActions.getEip712Domain(client, {
112
+ account: Account.from(accountImplementation),
113
+ }).then((x) => x.version);
114
+ const current = await ContractActions.getEip712Domain(client, {
115
+ account: address,
116
+ })
117
+ .then((x) => x.version)
118
+ // TODO: get counterfactual account version via Relay.
119
+ .catch(() => latest);
120
+ if (!current || !latest)
121
+ throw new Error('version not found.');
122
+ return { current, latest };
123
+ },
124
+ async getAssets(parameters) {
125
+ const { account, chainFilter, assetFilter, assetTypeFilter, internal } = parameters;
126
+ const { client } = internal;
127
+ const result = await RelayActions.getAssets(client, {
128
+ account,
129
+ assetFilter,
130
+ assetTypeFilter,
131
+ chainFilter,
132
+ });
133
+ return result;
134
+ },
135
+ async getCallsStatus(parameters) {
136
+ const { id, internal } = parameters;
137
+ const { client } = internal;
138
+ const result = await RelayActions_internal.getCallsStatus(client, {
139
+ id,
140
+ });
141
+ return {
142
+ atomic: true,
143
+ chainId: Hex.fromNumber(client.chain.id),
144
+ id,
145
+ receipts: result.receipts?.map((receipt) => ({
146
+ blockHash: receipt.blockHash,
147
+ blockNumber: Hex.fromNumber(receipt.blockNumber),
148
+ gasUsed: Hex.fromNumber(receipt.gasUsed),
149
+ logs: receipt.logs,
150
+ status: receipt.status,
151
+ transactionHash: receipt.transactionHash,
152
+ })),
153
+ status: result.status,
154
+ version: '1.0',
155
+ };
156
+ },
157
+ async getCapabilities(parameters) {
158
+ const { chainIds, internal } = parameters;
159
+ const { client } = internal;
160
+ const base = {
161
+ atomic: {
162
+ status: 'supported',
163
+ },
164
+ atomicBatch: {
165
+ supported: true,
166
+ },
167
+ feeToken: {
168
+ supported: true,
169
+ tokens: [],
170
+ },
171
+ merchant: {
172
+ supported: true,
173
+ },
174
+ permissions: {
175
+ supported: true,
176
+ },
177
+ requiredFunds: {
178
+ supported: Boolean(multichain),
179
+ tokens: [],
180
+ },
181
+ };
182
+ const capabilities = await RelayActions.getCapabilities(client, {
183
+ chainIds: chainIds ? chainIds.map((id) => Hex.toNumber(id)) : 'all',
184
+ raw: true,
185
+ });
186
+ return Object.entries(capabilities).reduce((acc, [chainId, capabilities]) => ({
187
+ // biome-ignore lint/performance/noAccumulatingSpread: _
188
+ ...acc,
189
+ [chainId]: {
190
+ ...base,
191
+ ...capabilities,
192
+ feeToken: {
193
+ supported: true,
194
+ tokens: capabilities.fees.tokens,
195
+ },
196
+ requiredFunds: {
197
+ supported: Boolean(multichain),
198
+ tokens: multichain
199
+ ? capabilities.fees.tokens.filter((token) => token.interop)
200
+ : [],
201
+ },
202
+ },
203
+ }), {});
204
+ },
205
+ async getKeys(parameters) {
206
+ const { account, chainIds, internal } = parameters;
207
+ const { client } = internal;
208
+ const keys = await RelayActions.getKeys(client, {
209
+ account,
210
+ chainIds,
211
+ });
212
+ return U.uniqBy([...keys, ...(account.keys ?? [])], (key) => key.publicKey);
213
+ },
214
+ async grantAdmin(parameters) {
215
+ const { account, internal } = parameters;
216
+ const { client } = internal;
217
+ const authorizeKey = Key.from(parameters.key, {
218
+ chainId: client.chain.id,
219
+ });
220
+ const feeToken = await Tokens.resolveFeeToken(client, {
221
+ addressOrSymbol: parameters.feeToken,
222
+ store: internal.store,
223
+ });
224
+ const { id } = await RelayActions.sendCalls(client, {
225
+ account,
226
+ authorizeKeys: [authorizeKey],
227
+ feeToken: feeToken?.address,
228
+ webAuthn,
229
+ });
230
+ await waitForCallsStatus(client, {
231
+ id,
232
+ pollingInterval: 500,
233
+ });
234
+ return { key: authorizeKey };
235
+ },
236
+ async grantPermissions(parameters) {
237
+ const { account, internal, permissions } = parameters;
238
+ const { client } = internal;
239
+ const feeTokens = await Tokens.getTokens(client);
240
+ // Parse permissions request into a structured key.
241
+ const authorizeKey = await PermissionsRequest.toKey(permissions, {
242
+ chainId: client.chain.id,
243
+ feeTokens,
244
+ });
245
+ if (!authorizeKey)
246
+ throw new Error('key to authorize not found.');
247
+ const adminKey = account.keys?.find((key) => key.role === 'admin' && key.privateKey);
248
+ if (!adminKey)
249
+ throw new Error('admin key not found.');
250
+ const { context, digest } = await RelayActions.prepareCalls(client, {
251
+ account,
252
+ authorizeKeys: [authorizeKey],
253
+ key: adminKey,
254
+ preCalls: true,
255
+ });
256
+ const signature = await Key.sign(adminKey, {
257
+ address: null,
258
+ payload: digest,
259
+ });
260
+ await RelayActions.sendPreparedCalls(client, {
261
+ context,
262
+ key: adminKey,
263
+ signature,
264
+ });
265
+ return { key: authorizeKey };
266
+ },
267
+ async loadAccounts(parameters) {
268
+ const { internal, permissions, signInWithEthereum } = parameters;
269
+ const { client } = internal;
270
+ const feeTokens = await Tokens.getTokens(client);
271
+ const authorizeKey = await PermissionsRequest.toKey(permissions, {
272
+ chainId: client.chain.id,
273
+ feeTokens,
274
+ });
275
+ // Prepare calls to sign over the session key or SIWE message to authorize.
276
+ // TODO: figure out with relay if we can prepare the "precall" here also.
277
+ // prepareCalls requires the EOA address, but we don't know it here.
278
+ const { digest, digestType, message } = await (async () => {
279
+ if (signInWithEthereum && parameters.address) {
280
+ const message = await Siwe.buildMessage(client, signInWithEthereum, {
281
+ address: parameters.address,
282
+ });
283
+ return {
284
+ context: undefined,
285
+ digest: PersonalMessage.getSignPayload(Hex.fromString(message)),
286
+ digestType: 'siwe',
287
+ message,
288
+ };
289
+ }
290
+ return {
291
+ context: undefined,
292
+ digest: '0x',
293
+ message: undefined,
294
+ };
295
+ })();
296
+ const { address, credentialId, webAuthnSignature } = await (async () => {
297
+ if (mock) {
298
+ if (!address_internal)
299
+ throw new Error('address_internal not found.');
300
+ return {
301
+ address: address_internal,
302
+ credentialId: undefined,
303
+ };
304
+ }
305
+ // If the address and credentialId are provided, we can skip the
306
+ // WebAuthn discovery step.
307
+ if (parameters.address && parameters.key)
308
+ return {
309
+ address: parameters.address,
310
+ credentialId: parameters.key.credentialId,
311
+ };
312
+ // Discovery step. We need to do this to extract the key id
313
+ // to query for the Account.
314
+ // We will also optionally sign over a digest to authorize
315
+ // a session key if the user has provided one.
316
+ const webAuthnSignature = await WebAuthnP256.sign({
317
+ challenge: digest,
318
+ getFn: webAuthn?.getFn,
319
+ rpId: keystoreHost,
320
+ });
321
+ const response = webAuthnSignature.raw
322
+ .response;
323
+ const address = Bytes.toHex(new Uint8Array(response.userHandle));
324
+ const credentialId = webAuthnSignature.raw.id;
325
+ return { address, credentialId, webAuthnSignature };
326
+ })();
327
+ const keys = await RelayActions.getKeys(client, {
328
+ account: address,
329
+ chainIds: [client.chain.id],
330
+ });
331
+ // Instantiate the account based off the extracted address and keys.
332
+ const account = Account.from({
333
+ address,
334
+ keys: [...keys, ...(authorizeKey ? [authorizeKey] : [])].map((key, i) => {
335
+ // Assume that the first key is the admin WebAuthn key.
336
+ if (i === 0) {
337
+ if (key.type === 'webauthn-p256')
338
+ return Key.fromWebAuthnP256({
339
+ ...key,
340
+ credential: {
341
+ id: credentialId,
342
+ publicKey: PublicKey.fromHex(key.publicKey),
343
+ },
344
+ id: address,
345
+ rpId: keystoreHost,
346
+ });
347
+ }
348
+ return key;
349
+ }),
350
+ });
351
+ const adminKey = Account.getKey(account, { role: 'admin' });
352
+ // Get the signature of the authorize session key pre-call.
353
+ const signature = await (async () => {
354
+ // If we don't have a digest, we never signed over anything.
355
+ if (digest === '0x')
356
+ return undefined;
357
+ // If we signed to authorize the session key at credential
358
+ // discovery, we will need to form the signature and store it
359
+ // as a signed pre-call.
360
+ if (webAuthnSignature)
361
+ return Key.wrapSignature(Key.serializeWebAuthnSignature(webAuthnSignature), {
362
+ keyType: 'webauthn-p256',
363
+ publicKey: adminKey.publicKey,
364
+ });
365
+ // Otherwise, we will sign over the digest for authorizing
366
+ // the session key.
367
+ return await Key.sign(adminKey, {
368
+ address: account.address,
369
+ payload: digest,
370
+ });
371
+ })();
372
+ // Prepare and send the authorize key pre-call.
373
+ if (authorizeKey) {
374
+ const { context, digest } = await RelayActions.prepareCalls(client, {
375
+ account,
376
+ authorizeKeys: [authorizeKey],
377
+ preCalls: true,
378
+ });
379
+ const signature = await Key.sign(adminKey, {
380
+ address: null,
381
+ payload: digest,
382
+ });
383
+ await RelayActions.sendPreparedCalls(client, {
384
+ context,
385
+ key: adminKey,
386
+ signature,
387
+ });
388
+ }
389
+ const signInWithEthereum_response = await (async () => {
390
+ if (!signInWithEthereum)
391
+ return undefined;
392
+ if (digestType === 'siwe' && message && signature) {
393
+ const signature_erc8010 = await Erc8010.wrap(client, {
394
+ address: account.address,
395
+ signature,
396
+ });
397
+ return { message, signature: signature_erc8010 };
398
+ }
399
+ {
400
+ const message = await Siwe.buildMessage(client, signInWithEthereum, {
401
+ address: account.address,
402
+ });
403
+ const signature = await Account.sign(account, {
404
+ payload: PersonalMessage.getSignPayload(Hex.fromString(message)),
405
+ role: 'admin',
406
+ });
407
+ const signature_erc8010 = await Erc8010.wrap(client, {
408
+ address: account.address,
409
+ signature,
410
+ });
411
+ return {
412
+ message,
413
+ signature: signature_erc8010,
414
+ };
415
+ }
416
+ })();
417
+ return {
418
+ accounts: [
419
+ {
420
+ ...account,
421
+ signInWithEthereum: signInWithEthereum_response,
422
+ },
423
+ ],
424
+ };
425
+ },
426
+ async prepareCalls(parameters) {
427
+ const { account, calls, internal, merchantUrl } = parameters;
428
+ const { client } = internal;
429
+ // Try and extract an authorized key to sign the calls with.
430
+ const key = parameters.key ??
431
+ (await Mode.getAuthorizedExecuteKey({
432
+ account,
433
+ calls,
434
+ }));
435
+ if (!key)
436
+ throw new Error('cannot find authorized key to sign with.');
437
+ const [tokens, feeToken] = await Promise.all([
438
+ Tokens.getTokens(client),
439
+ Tokens.resolveFeeToken(client, {
440
+ addressOrSymbol: parameters.feeToken,
441
+ store: internal.store,
442
+ }),
443
+ ]);
444
+ const requiredFunds = RequiredFunds.toRelay(parameters.requiredFunds ?? [], {
445
+ tokens,
446
+ });
447
+ const { capabilities, context, digest, typedData } = await RelayActions.prepareCalls(client, {
448
+ account,
449
+ calls,
450
+ feeToken: feeToken?.address,
451
+ key,
452
+ merchantUrl,
453
+ requiredFunds: multichain ? requiredFunds : undefined,
454
+ });
455
+ const quotes = context.quote?.quotes ?? [];
456
+ const outputQuote = quotes[quotes.length - 1];
457
+ return {
458
+ account,
459
+ capabilities: {
460
+ ...capabilities,
461
+ quote: context.quote,
462
+ },
463
+ chainId: client.chain.id,
464
+ context: {
465
+ ...context,
466
+ account,
467
+ calls,
468
+ nonce: outputQuote?.intent.nonce,
469
+ },
470
+ digest,
471
+ key,
472
+ typedData,
473
+ };
474
+ },
475
+ async prepareUpgradeAccount(parameters) {
476
+ const { address, email, label, internal, permissions } = parameters;
477
+ const { client } = internal;
478
+ const [tokens, feeToken] = await Promise.all([
479
+ Tokens.getTokens(client),
480
+ Tokens.resolveFeeToken(client, {
481
+ store: internal.store,
482
+ }),
483
+ ]);
484
+ const adminKey = !mock
485
+ ? await Key.createWebAuthnP256({
486
+ createFn: webAuthn?.createFn,
487
+ label: label || `${address.slice(0, 8)}\u2026${address.slice(-6)}`,
488
+ rpId: keystoreHost,
489
+ userId: Bytes.from(address),
490
+ })
491
+ : Key.createHeadlessWebAuthnP256();
492
+ const sessionKey = await PermissionsRequest.toKey(permissions, {
493
+ chainId: client.chain.id,
494
+ feeTokens: tokens,
495
+ });
496
+ const { context, digests } = await RelayActions.prepareUpgradeAccount(client, {
497
+ address,
498
+ authorizeKeys: [adminKey, ...(sessionKey ? [sessionKey] : [])],
499
+ feeToken: feeToken?.address,
500
+ });
501
+ if (email)
502
+ email_internal = label;
503
+ return {
504
+ context,
505
+ digests,
506
+ };
507
+ },
508
+ async revokeAdmin(parameters) {
509
+ const { account, id, internal } = parameters;
510
+ const { client } = internal;
511
+ const key = account.keys?.find((key) => key.id === id);
512
+ if (!key)
513
+ return;
514
+ // Cannot revoke the only WebAuthn key left
515
+ if (key.type === 'webauthn-p256' &&
516
+ account.keys?.filter((key) => key.type === 'webauthn-p256').length ===
517
+ 1)
518
+ throw new Error('revoke the only WebAuthn key left.');
519
+ try {
520
+ const feeToken = await Tokens.resolveFeeToken(client, {
521
+ addressOrSymbol: parameters.feeToken,
522
+ store: internal.store,
523
+ });
524
+ const { id } = await RelayActions.sendCalls(client, {
525
+ account,
526
+ feeToken: feeToken?.address,
527
+ revokeKeys: [key],
528
+ webAuthn,
529
+ });
530
+ await waitForCallsStatus(client, {
531
+ id,
532
+ });
533
+ }
534
+ catch (e) {
535
+ const error = e;
536
+ if (error.name === 'Rpc.ExecutionError' &&
537
+ error.abiError?.name === 'KeyDoesNotExist')
538
+ return;
539
+ throw e;
540
+ }
541
+ },
542
+ async revokePermissions(parameters) {
543
+ const { account, id, internal } = parameters;
544
+ const { client } = internal;
545
+ const key = account.keys?.find((key) => key.id === id);
546
+ if (!key)
547
+ return;
548
+ // We shouldn't be able to revoke the admin keys.
549
+ if (key.role === 'admin')
550
+ throw new Error('cannot revoke admins.');
551
+ try {
552
+ const feeToken = await Tokens.resolveFeeToken(client, {
553
+ addressOrSymbol: parameters.feeToken,
554
+ store: internal.store,
555
+ });
556
+ const { id } = await RelayActions.sendCalls(client, {
557
+ account,
558
+ feeToken: feeToken?.address,
559
+ revokeKeys: [key],
560
+ webAuthn,
561
+ });
562
+ await waitForCallsStatus(client, {
563
+ id,
564
+ });
565
+ }
566
+ catch (e) {
567
+ const error = e;
568
+ if (error.name === 'Rpc.ExecutionError' &&
569
+ error.abiError?.name === 'KeyDoesNotExist')
570
+ return;
571
+ throw e;
572
+ }
573
+ },
574
+ async sendCalls(parameters) {
575
+ const { account, asTxHash, calls, internal, merchantUrl } = parameters;
576
+ const { client } = internal;
577
+ // Try and extract an authorized key to sign the calls with.
578
+ const key = await Mode.getAuthorizedExecuteKey({
579
+ account,
580
+ calls,
581
+ permissionsId: parameters.permissionsId,
582
+ });
583
+ // Resolve fee token to use.
584
+ const [tokens, feeToken] = await Promise.all([
585
+ Tokens.getTokens(client),
586
+ Tokens.resolveFeeToken(client, {
587
+ addressOrSymbol: parameters.feeToken,
588
+ store: internal.store,
589
+ }),
590
+ ]);
591
+ const requiredFunds = RequiredFunds.toRelay(parameters.requiredFunds ?? [], {
592
+ tokens,
593
+ });
594
+ // Execute the calls (with the key if provided, otherwise it will
595
+ // fall back to an admin key).
596
+ const result = await RelayActions.sendCalls(client, {
597
+ account,
598
+ calls,
599
+ feeToken: feeToken?.address,
600
+ key,
601
+ merchantUrl,
602
+ requiredFunds: multichain ? requiredFunds : undefined,
603
+ webAuthn,
604
+ });
605
+ if (asTxHash) {
606
+ const { id, receipts, status } = await waitForCallsStatus(client, {
607
+ id: result.id,
608
+ pollingInterval: 500,
609
+ });
610
+ if (!receipts?.[0]) {
611
+ if (status === 'success')
612
+ throw new Provider.UnknownBundleIdError({
613
+ message: 'Call bundle with id: ' + id + ' not found.',
614
+ });
615
+ throw new RpcResponse.TransactionRejectedError({
616
+ message: 'Transaction failed under call bundle id: ' + id + '.',
617
+ });
618
+ }
619
+ return {
620
+ id: receipts[0].transactionHash,
621
+ };
622
+ }
623
+ return result;
624
+ },
625
+ async sendPreparedCalls(parameters) {
626
+ const { context, key, internal, signature } = parameters;
627
+ const { client } = internal;
628
+ const { id } = await RelayActions.sendPreparedCalls(client, {
629
+ context: context,
630
+ key,
631
+ signature,
632
+ });
633
+ return id;
634
+ },
635
+ async signPersonalMessage(parameters) {
636
+ const { account, data, internal } = parameters;
637
+ const { client } = internal;
638
+ // Only admin keys can sign personal messages.
639
+ const key = account.keys?.find((key) => key.role === 'admin' && key.privateKey);
640
+ if (!key)
641
+ throw new Error('cannot find admin key to sign with.');
642
+ const signature = await Account.sign(account, {
643
+ key,
644
+ payload: PersonalMessage.getSignPayload(data),
645
+ webAuthn,
646
+ });
647
+ return Erc8010.wrap(client, { address: account.address, signature });
648
+ },
649
+ async signTypedData(parameters) {
650
+ const { account, internal } = parameters;
651
+ const { client } = internal;
652
+ // Only admin keys can sign typed data.
653
+ const key = account.keys?.find((key) => key.role === 'admin' && key.privateKey);
654
+ if (!key)
655
+ throw new Error('cannot find admin key to sign with.');
656
+ const data = Json.parse(parameters.data);
657
+ const isOrchestrator = data.domain?.name === 'Orchestrator';
658
+ const signature = await Account.sign(account, {
659
+ key,
660
+ payload: TypedData.getSignPayload(data),
661
+ // If the domain is the Orchestrator, we don't need to replay-safe sign.
662
+ replaySafe: !isOrchestrator,
663
+ webAuthn,
664
+ });
665
+ return isOrchestrator
666
+ ? signature
667
+ : Erc8010.wrap(client, { address: account.address, signature });
668
+ },
669
+ async upgradeAccount(parameters) {
670
+ const { account, context, internal, signatures } = parameters;
671
+ const { client } = internal;
672
+ await RelayActions.upgradeAccount(client, {
673
+ context: context,
674
+ signatures,
675
+ });
676
+ if (email_internal)
677
+ await RelayActions.setEmail(client, {
678
+ email: email_internal,
679
+ walletAddress: account.address,
680
+ });
681
+ return { account };
682
+ },
683
+ async verifyEmail(parameters) {
684
+ const { account, chainId, email, token, internal, walletAddress } = parameters;
685
+ const { client } = internal;
686
+ // Only allow admin keys can sign message.
687
+ const key = account.keys?.find((key) => key.role === 'admin' && key.privateKey);
688
+ if (!key)
689
+ throw new Error('cannot find admin key to sign with.');
690
+ const signature = await Account.sign(account, {
691
+ key,
692
+ payload: Hash.keccak256(Hex.fromString(`${email}${token}`)),
693
+ webAuthn,
694
+ });
695
+ return await RelayActions.verifyEmail(client, {
696
+ chainId,
697
+ email,
698
+ signature,
699
+ token,
700
+ walletAddress,
701
+ });
702
+ },
703
+ },
704
+ config: parameters,
705
+ name: 'rpc',
706
+ });
707
+ }
708
+ //# sourceMappingURL=relay.js.map