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,760 @@
1
+ import * as Hex from 'ox/Hex';
2
+ import * as Provider from 'ox/Provider';
3
+ import * as RpcRequest from 'ox/RpcRequest';
4
+ import * as RpcResponse from 'ox/RpcResponse';
5
+ import * as RpcSchema from 'ox/RpcSchema';
6
+ import { waitForCallsStatus } from 'viem/actions';
7
+ import * as z from 'zod/mini';
8
+ import * as Account from "../../../viem/Account.js";
9
+ import * as Key from "../../../viem/Key.js";
10
+ import * as Dialog from "../../Dialog.js";
11
+ import * as RpcSchema_porto from "../../RpcSchema.js";
12
+ import * as Mode from "../mode.js";
13
+ import * as Permissions from "../permissions.js";
14
+ import * as PermissionsRequest from "../permissionsRequest.js";
15
+ import * as Siwe from "../siwe.js";
16
+ import * as U from "../utils.js";
17
+ import { relay } from "./relay.js";
18
+ export function dialog(parameters = {}) {
19
+ const { fallback = relay(), host = Dialog.hostUrls.prod, renderer = Dialog.iframe(), theme, themeController, } = parameters;
20
+ const listeners = new Set();
21
+ const requestStore = RpcRequest.createStore();
22
+ // Function to instantiate a provider for the dialog. This
23
+ // will be used to queue up requests for the dialog and
24
+ // handle responses.
25
+ function getProvider(store) {
26
+ return Provider.from({
27
+ async request(r) {
28
+ const request = requestStore.prepare(r);
29
+ // When we receive a request, we need to add it to the queue.
30
+ store.setState((x) => {
31
+ const account = x.accounts[0];
32
+ const adminKey = account?.keys?.find((key) => key.role === 'admin' && key.type === 'webauthn-p256');
33
+ return {
34
+ ...x,
35
+ requestQueue: [
36
+ ...x.requestQueue,
37
+ {
38
+ account: account
39
+ ? {
40
+ address: account.address,
41
+ key: adminKey
42
+ ? {
43
+ credentialId: adminKey?.credentialId,
44
+ publicKey: adminKey.publicKey,
45
+ }
46
+ : undefined,
47
+ }
48
+ : undefined,
49
+ request,
50
+ status: 'pending',
51
+ },
52
+ ],
53
+ };
54
+ });
55
+ // We need to wait for the request to be resolved.
56
+ return new Promise((resolve, reject) => {
57
+ const listener = (requestQueue) => {
58
+ // Find the request in the queue based off its JSON-RPC identifier.
59
+ const queued = requestQueue.find((x) => x.request.id === request.id);
60
+ // If the request is not found and the queue is empty, reject the request
61
+ // as it will never be resolved (likely cancelled or dialog closed).
62
+ if (!queued && requestQueue.length === 0) {
63
+ listeners.delete(listener);
64
+ reject(new Provider.UserRejectedRequestError());
65
+ return;
66
+ }
67
+ // If request not found but queue has other requests, wait for next update.
68
+ if (!queued)
69
+ return;
70
+ // If request found but not yet resolved, wait for next update.
71
+ if (queued.status !== 'success' && queued.status !== 'error')
72
+ return;
73
+ // We have a response, we can unsubscribe from the listener.
74
+ listeners.delete(listener);
75
+ // If the request was successful, resolve with the result.
76
+ if (queued.status === 'success')
77
+ resolve(queued.result);
78
+ // Otherwise, reject with EIP-1193 Provider error.
79
+ else
80
+ reject(Provider.parseError(queued.error));
81
+ // Remove the request from the queue.
82
+ store.setState((x) => ({
83
+ ...x,
84
+ requestQueue: x.requestQueue.filter((x) => x.request.id !== request.id),
85
+ }));
86
+ };
87
+ listeners.add(listener);
88
+ });
89
+ },
90
+ }, { schema: RpcSchema.from() });
91
+ }
92
+ return Mode.from({
93
+ actions: {
94
+ async addFunds(parameters) {
95
+ const { internal } = parameters;
96
+ const { request, store } = internal;
97
+ if (request.method !== 'wallet_addFunds')
98
+ throw new Error('Cannot add funds for method: ' + request.method);
99
+ const provider = getProvider(store);
100
+ return await provider.request(request);
101
+ },
102
+ async createAccount(parameters) {
103
+ const { internal } = parameters;
104
+ const { client, config, request, store } = internal;
105
+ const { storage } = config;
106
+ const provider = getProvider(store);
107
+ const account = await (async () => {
108
+ if (request.method === 'wallet_connect') {
109
+ // Extract the capabilities from the request.
110
+ const [{ capabilities, chainIds }] = request._decoded.params ?? [{}];
111
+ const authUrl = getAuthUrl(capabilities?.signInWithEthereum?.authUrl ?? config.authUrl, { storage });
112
+ const signInWithEthereum = request.params?.[0]?.capabilities?.signInWithEthereum;
113
+ // Parse the authorize key into a structured key.
114
+ const key = await PermissionsRequest.toKey(capabilities?.grantPermissions, {
115
+ chainId: client.chain.id,
116
+ });
117
+ // Convert the key into a permission.
118
+ const permissionsRequest = key
119
+ ? z.encode(PermissionsRequest.Schema, PermissionsRequest.fromKey(key))
120
+ : undefined;
121
+ // Send a request off to the dialog to create an account.
122
+ const { accounts } = await provider.request({
123
+ ...request,
124
+ params: [
125
+ {
126
+ capabilities: {
127
+ ...request.params?.[0]?.capabilities,
128
+ grantPermissions: permissionsRequest,
129
+ signInWithEthereum: authUrl || signInWithEthereum
130
+ ? {
131
+ ...signInWithEthereum,
132
+ authUrl: authUrl,
133
+ }
134
+ : undefined,
135
+ },
136
+ chainIds: chainIds?.map((chainId) => Hex.fromNumber(chainId)),
137
+ },
138
+ ],
139
+ });
140
+ const [account] = accounts;
141
+ if (!account)
142
+ throw new Error('no account found.');
143
+ // Build keys to assign onto the account.
144
+ const adminKeys = account.capabilities?.admins
145
+ ?.map((admin) => Key.from(admin, { chainId: client.chain.id }))
146
+ .filter(Boolean);
147
+ const sessionKeys = account.capabilities?.permissions
148
+ ?.map((permission) => {
149
+ try {
150
+ const key_permission = Permissions.toKey(z.decode(Permissions.Schema, permission));
151
+ if (key_permission.id === key?.id)
152
+ return {
153
+ ...key_permission,
154
+ ...key,
155
+ permissions: key_permission.permissions,
156
+ };
157
+ return key_permission;
158
+ }
159
+ catch {
160
+ return undefined;
161
+ }
162
+ })
163
+ .filter(Boolean);
164
+ const signInWithEthereum_response = await (async () => {
165
+ if (!account.capabilities?.signInWithEthereum)
166
+ return;
167
+ const { message, signature } = account.capabilities.signInWithEthereum;
168
+ if (!authUrl)
169
+ return {
170
+ message,
171
+ signature,
172
+ };
173
+ const { token } = await Siwe.authenticate({
174
+ address: account.address,
175
+ authUrl,
176
+ message,
177
+ signature,
178
+ });
179
+ return {
180
+ message,
181
+ signature,
182
+ token,
183
+ };
184
+ })();
185
+ return {
186
+ ...Account.from({
187
+ address: account.address,
188
+ keys: [...(adminKeys ?? []), ...(sessionKeys ?? [])],
189
+ }),
190
+ signInWithEthereum: signInWithEthereum_response,
191
+ };
192
+ }
193
+ throw new Error(`Account creation not supported on method: ${request.method}`);
194
+ })();
195
+ return {
196
+ account,
197
+ };
198
+ },
199
+ async disconnect(parameters) {
200
+ const { internal } = parameters;
201
+ const { config } = internal;
202
+ const { storage } = config;
203
+ const authUrl_storage = (await storage.getItem('porto.authUrl')) ||
204
+ undefined;
205
+ const authUrl = getAuthUrl(config.authUrl ?? authUrl_storage, {
206
+ storage,
207
+ });
208
+ if (authUrl)
209
+ await fetch(authUrl.logout, {
210
+ credentials: 'include',
211
+ method: 'POST',
212
+ }).catch(() => { });
213
+ },
214
+ async getAccountVersion(parameters) {
215
+ const { internal } = parameters;
216
+ const { store, request } = internal;
217
+ if (request.method !== 'wallet_getAccountVersion')
218
+ throw new Error('Cannot get version for method: ' + request.method);
219
+ if (!renderer.supportsHeadless)
220
+ return fallback.actions.getAccountVersion(parameters);
221
+ const provider = getProvider(store);
222
+ const result = await provider.request(request);
223
+ return result;
224
+ },
225
+ async getAssets(parameters) {
226
+ const { internal } = parameters;
227
+ const { store, request } = internal;
228
+ if (request.method !== 'wallet_getAssets')
229
+ throw new Error('Cannot get assets for method: ' + request.method);
230
+ if (!renderer.supportsHeadless)
231
+ return fallback.actions.getAssets(parameters);
232
+ const provider = getProvider(store);
233
+ const result = await provider.request(request);
234
+ return z.decode(RpcSchema_porto.wallet_getAssets.Response, result);
235
+ },
236
+ async getCallsStatus(parameters) {
237
+ const { internal } = parameters;
238
+ const { store, request } = internal;
239
+ if (request.method !== 'wallet_getCallsStatus')
240
+ throw new Error('Cannot get status for method: ' + request.method);
241
+ if (!renderer.supportsHeadless)
242
+ return fallback.actions.getCallsStatus(parameters);
243
+ const provider = getProvider(store);
244
+ const result = await provider.request(request);
245
+ return result;
246
+ },
247
+ async getCapabilities(parameters) {
248
+ const { internal } = parameters;
249
+ const { store, request } = internal;
250
+ if (request.method !== 'wallet_getCapabilities')
251
+ throw new Error('Cannot get capabilities for method: ' + request.method);
252
+ if (!renderer.supportsHeadless)
253
+ return fallback.actions.getCapabilities(parameters);
254
+ const provider = getProvider(store);
255
+ const result = await provider.request(request);
256
+ return result;
257
+ },
258
+ async getKeys(parameters) {
259
+ const { account, chainIds, internal } = parameters;
260
+ const { store } = internal;
261
+ const keys = await (async () => {
262
+ if (!renderer.supportsHeadless)
263
+ return fallback.actions.getKeys(parameters);
264
+ const provider = getProvider(store);
265
+ const result = await provider.request({
266
+ method: 'wallet_getKeys',
267
+ params: [
268
+ z.encode(RpcSchema_porto.wallet_getKeys.Parameters, {
269
+ address: account.address,
270
+ chainIds,
271
+ }),
272
+ ],
273
+ });
274
+ return z.decode(RpcSchema_porto.wallet_getKeys.Response, result);
275
+ })();
276
+ return U.uniqBy([...keys, ...(account.keys ?? [])], (key) => key.publicKey);
277
+ },
278
+ async grantAdmin(parameters) {
279
+ const { internal } = parameters;
280
+ const { request, store } = internal;
281
+ if (request.method !== 'wallet_grantAdmin')
282
+ throw new Error('Cannot authorize admin for method: ' + request.method);
283
+ const [params] = request._decoded.params;
284
+ const key = Key.from(params.key);
285
+ if (!key)
286
+ throw new Error('no key found.');
287
+ const feeToken = await resolveFeeToken(internal, parameters);
288
+ // Send a request off to the dialog to authorize the admin.
289
+ const provider = getProvider(store);
290
+ await provider.request({
291
+ method: 'wallet_grantAdmin',
292
+ params: [
293
+ {
294
+ ...request.params?.[0],
295
+ capabilities: {
296
+ ...request.params?.[0]?.capabilities,
297
+ feeToken,
298
+ },
299
+ },
300
+ ],
301
+ });
302
+ return { key };
303
+ },
304
+ async grantPermissions(parameters) {
305
+ const { internal } = parameters;
306
+ const { client, request, store } = internal;
307
+ if (request.method !== 'wallet_grantPermissions')
308
+ throw new Error('Cannot grant permissions for method: ' + request.method);
309
+ const [{ address, ...permissions }] = request._decoded.params;
310
+ // Parse permissions request into a structured key.
311
+ const key = await PermissionsRequest.toKey(permissions, {
312
+ chainId: client.chain.id,
313
+ });
314
+ if (!key)
315
+ throw new Error('no key found.');
316
+ const permissionsRequest = z.encode(PermissionsRequest.Schema, PermissionsRequest.fromKey(key));
317
+ // Send a request off to the dialog to grant the permissions.
318
+ const provider = getProvider(store);
319
+ await provider.request({
320
+ method: 'wallet_grantPermissions',
321
+ params: [permissionsRequest],
322
+ });
323
+ return { key };
324
+ },
325
+ async loadAccounts(parameters) {
326
+ const { internal } = parameters;
327
+ const { client, config, store } = internal;
328
+ const { storage } = config;
329
+ const provider = getProvider(store);
330
+ const request = internal.request;
331
+ if (request.method !== 'wallet_connect' &&
332
+ request.method !== 'eth_requestAccounts')
333
+ throw new Error('Cannot load accounts for method: ' + request.method);
334
+ const accounts = await (async () => {
335
+ const [params] = request._decoded.params ?? [];
336
+ const { capabilities } = params ?? {};
337
+ const authUrl = getAuthUrl(capabilities?.signInWithEthereum?.authUrl ?? config.authUrl, { storage });
338
+ const signInWithEthereum = request.params?.[0]?.capabilities?.signInWithEthereum;
339
+ // Parse provided (RPC) key into a structured key.
340
+ const key = await PermissionsRequest.toKey(capabilities?.grantPermissions, {
341
+ chainId: client.chain.id,
342
+ });
343
+ // Convert the key into a permissions request.
344
+ const permissionsRequest = key
345
+ ? z.encode(PermissionsRequest.Schema, PermissionsRequest.fromKey(key))
346
+ : undefined;
347
+ // Send a request to the dialog.
348
+ const { accounts } = await provider.request({
349
+ method: 'wallet_connect',
350
+ params: [
351
+ {
352
+ ...request.params?.[0],
353
+ capabilities: {
354
+ ...request.params?.[0]?.capabilities,
355
+ grantPermissions: permissionsRequest,
356
+ signInWithEthereum: authUrl || signInWithEthereum
357
+ ? {
358
+ ...signInWithEthereum,
359
+ authUrl: authUrl,
360
+ }
361
+ : undefined,
362
+ },
363
+ },
364
+ ],
365
+ });
366
+ return Promise.all(accounts.map(async (account) => {
367
+ const adminKeys = account.capabilities?.admins
368
+ ?.map((key) => Key.from(key))
369
+ .filter(Boolean);
370
+ const sessionKeys = account.capabilities?.permissions
371
+ ?.map((permission) => {
372
+ try {
373
+ const key_permission = Permissions.toKey(z.decode(Permissions.Schema, permission));
374
+ if (key_permission.id === key?.id)
375
+ return {
376
+ ...key_permission,
377
+ ...key,
378
+ permissions: key_permission.permissions,
379
+ };
380
+ return key_permission;
381
+ }
382
+ catch {
383
+ return undefined;
384
+ }
385
+ })
386
+ .filter(Boolean);
387
+ const signInWithEthereum_response = await (async () => {
388
+ if (!account.capabilities?.signInWithEthereum)
389
+ return;
390
+ const { message, signature } = account.capabilities.signInWithEthereum;
391
+ if (!authUrl)
392
+ return {
393
+ message,
394
+ signature,
395
+ };
396
+ const { token } = await Siwe.authenticate({
397
+ address: account.address,
398
+ authUrl,
399
+ message,
400
+ signature,
401
+ });
402
+ return {
403
+ message,
404
+ signature,
405
+ token,
406
+ };
407
+ })();
408
+ return {
409
+ ...Account.from({
410
+ address: account.address,
411
+ keys: [...(adminKeys ?? []), ...(sessionKeys ?? [])],
412
+ }),
413
+ signInWithEthereum: signInWithEthereum_response,
414
+ };
415
+ }));
416
+ })();
417
+ return {
418
+ accounts,
419
+ };
420
+ },
421
+ async prepareCalls(parameters) {
422
+ const { account, internal } = parameters;
423
+ const { store, request } = internal;
424
+ if (request.method !== 'wallet_prepareCalls')
425
+ throw new Error('Cannot prepare calls for method: ' + request.method);
426
+ if (!renderer.supportsHeadless)
427
+ return fallback.actions.prepareCalls(parameters);
428
+ const feeToken = await resolveFeeToken(internal, parameters);
429
+ const provider = getProvider(store);
430
+ const result = z.decode(RpcSchema_porto.wallet_prepareCalls.Response, await provider.request({
431
+ ...request,
432
+ params: [
433
+ {
434
+ ...request.params?.[0],
435
+ capabilities: {
436
+ ...request.params?.[0]?.capabilities,
437
+ feeToken,
438
+ },
439
+ },
440
+ ],
441
+ }));
442
+ return {
443
+ account,
444
+ chainId: Number(result.chainId),
445
+ context: result.context,
446
+ digest: result.digest,
447
+ key: result.key,
448
+ typedData: result.typedData,
449
+ };
450
+ },
451
+ async prepareUpgradeAccount(parameters) {
452
+ const { internal } = parameters;
453
+ const { client, store, request } = internal;
454
+ if (request.method !== 'wallet_prepareUpgradeAccount')
455
+ throw new Error('Cannot prepare upgrade for method: ' + request.method);
456
+ if (!renderer.supportsHeadless)
457
+ return fallback.actions.prepareUpgradeAccount(parameters);
458
+ // Extract the capabilities from the request.
459
+ const [{ capabilities }] = request._decoded.params ?? [{}];
460
+ // Parse the authorize key into a structured key.
461
+ const key = await PermissionsRequest.toKey(capabilities?.grantPermissions, {
462
+ chainId: client.chain.id,
463
+ });
464
+ // Convert the key into a permission.
465
+ const permissionsRequest = key
466
+ ? z.encode(PermissionsRequest.Schema, PermissionsRequest.fromKey(key))
467
+ : undefined;
468
+ // Send a request off to the dialog to prepare the upgrade.
469
+ const provider = getProvider(store);
470
+ const { context, digests } = await provider.request({
471
+ ...request,
472
+ params: [
473
+ {
474
+ ...request.params?.[0],
475
+ capabilities: {
476
+ ...request.params?.[0]?.capabilities,
477
+ grantPermissions: permissionsRequest,
478
+ },
479
+ },
480
+ ],
481
+ });
482
+ const keys = context.account.keys?.map((k) => {
483
+ if (k.id === key?.id)
484
+ return { ...k, ...key };
485
+ return k;
486
+ });
487
+ return {
488
+ context: {
489
+ ...context,
490
+ account: { ...context.account, keys },
491
+ },
492
+ digests,
493
+ };
494
+ },
495
+ async revokeAdmin(parameters) {
496
+ const { account, id, internal } = parameters;
497
+ const { store, request } = internal;
498
+ if (request.method !== 'wallet_revokeAdmin')
499
+ throw new Error('Cannot revoke admin for method: ' + request.method);
500
+ const key = account.keys?.find((key) => key.id === id);
501
+ if (!key)
502
+ return;
503
+ // Cannot revoke the only WebAuthn key left
504
+ if (key.type === 'webauthn-p256' &&
505
+ account.keys?.filter((key) => key.type === 'webauthn-p256').length ===
506
+ 1)
507
+ throw new Error('revoke the only WebAuthn key left.');
508
+ const feeToken = await resolveFeeToken(internal, parameters);
509
+ const provider = getProvider(store);
510
+ return await provider.request({
511
+ ...request,
512
+ params: [
513
+ {
514
+ ...request.params?.[0],
515
+ capabilities: {
516
+ ...request.params?.[0]?.capabilities,
517
+ feeToken,
518
+ },
519
+ },
520
+ ],
521
+ });
522
+ },
523
+ async revokePermissions(parameters) {
524
+ const { account, id, internal } = parameters;
525
+ const { store, request } = internal;
526
+ if (request.method !== 'wallet_revokePermissions')
527
+ throw new Error('Cannot revoke permissions for method: ' + request.method);
528
+ const key = account.keys?.find((key) => key.id === id);
529
+ if (!key)
530
+ return;
531
+ // We shouldn't be able to revoke admins.
532
+ if (key.role === 'admin')
533
+ throw new Error('cannot revoke permissions.');
534
+ const provider = getProvider(store);
535
+ return await provider.request(request);
536
+ },
537
+ async sendCalls(parameters) {
538
+ const { account, asTxHash, calls, internal, merchantUrl, requiredFunds, } = parameters;
539
+ const { client, store, request } = internal;
540
+ const provider = getProvider(store);
541
+ const feeToken = await resolveFeeToken(internal, parameters);
542
+ // Try and extract an authorized key to sign the calls with.
543
+ const key = await Mode.getAuthorizedExecuteKey({
544
+ account,
545
+ calls,
546
+ permissionsId: parameters.permissionsId,
547
+ });
548
+ // If a session key is found, try execute the calls with it
549
+ // without sending a request to the dialog. If the key does not
550
+ // have permission to execute the calls, fall back to the dialog.
551
+ if (key && key.role === 'session') {
552
+ if (!renderer.supportsHeadless)
553
+ return fallback.actions.sendCalls(parameters);
554
+ try {
555
+ // TODO: use eventual Viem Action.
556
+ const req = await provider.request(z.encode(RpcSchema_porto.wallet_prepareCalls.Request, {
557
+ method: 'wallet_prepareCalls',
558
+ params: [
559
+ {
560
+ calls,
561
+ capabilities: {
562
+ ...(request._decoded.method === 'wallet_sendCalls'
563
+ ? request._decoded.params?.[0]?.capabilities
564
+ : undefined),
565
+ feeToken,
566
+ merchantUrl,
567
+ requiredFunds,
568
+ },
569
+ chainId: client.chain.id,
570
+ from: account.address,
571
+ key,
572
+ },
573
+ ],
574
+ }));
575
+ const quotes = req.capabilities?.quote?.quotes ?? [];
576
+ const hasFeeDeficit = quotes.some((quote, index) => {
577
+ const isMultichainDestination = index === quotes.length - 1 && quotes.length > 1;
578
+ if (isMultichainDestination)
579
+ return false;
580
+ return Hex.toBigInt(quote.feeTokenDeficit) > 0n;
581
+ });
582
+ if (hasFeeDeficit)
583
+ throw new Error('insufficient funds');
584
+ const signature = await Key.sign(key, {
585
+ address: null,
586
+ payload: req.digest,
587
+ wrap: false,
588
+ });
589
+ // TODO: use eventual Viem Action.
590
+ const result = await provider.request({
591
+ method: 'wallet_sendPreparedCalls',
592
+ params: [
593
+ {
594
+ ...req,
595
+ signature,
596
+ },
597
+ ],
598
+ });
599
+ const response = result[0];
600
+ if (!response)
601
+ throw new Error('id not found');
602
+ if (asTxHash) {
603
+ const { id, receipts, status } = await waitForCallsStatus(client, {
604
+ id: response.id,
605
+ pollingInterval: 500,
606
+ });
607
+ if (!receipts?.[0]) {
608
+ if (status === 'success')
609
+ throw new Provider.UnknownBundleIdError({
610
+ message: 'Call bundle with id: ' + id + ' not found.',
611
+ });
612
+ throw new RpcResponse.TransactionRejectedError({
613
+ message: 'Transaction failed under call bundle id: ' + id + '.',
614
+ });
615
+ }
616
+ return {
617
+ id: receipts[0].transactionHash,
618
+ };
619
+ }
620
+ return response;
621
+ }
622
+ catch { }
623
+ }
624
+ if (request.method === 'eth_sendTransaction') {
625
+ // Send a transaction request to the dialog.
626
+ const id = await provider.request({
627
+ ...request,
628
+ params: [
629
+ {
630
+ ...request.params?.[0],
631
+ // @ts-expect-error
632
+ capabilities: {
633
+ feeToken,
634
+ merchantUrl,
635
+ },
636
+ },
637
+ ],
638
+ });
639
+ return { id };
640
+ }
641
+ if (request.method === 'wallet_sendCalls') {
642
+ // Send calls request to the dialog.
643
+ const result = await provider.request({
644
+ method: 'wallet_sendCalls',
645
+ params: [
646
+ {
647
+ ...request.params?.[0],
648
+ capabilities: {
649
+ ...request.params?.[0]?.capabilities,
650
+ feeToken,
651
+ merchantUrl,
652
+ },
653
+ },
654
+ ],
655
+ });
656
+ return result;
657
+ }
658
+ throw new Error('Cannot execute for method: ' + request.method);
659
+ },
660
+ async sendPreparedCalls(parameters) {
661
+ const { internal } = parameters;
662
+ const { store, request } = internal;
663
+ if (request.method !== 'wallet_sendPreparedCalls')
664
+ throw new Error('Cannot send prepared calls for method: ' + request.method);
665
+ if (!renderer.supportsHeadless)
666
+ return fallback.actions.sendPreparedCalls(parameters);
667
+ const provider = getProvider(store);
668
+ const result = await provider.request(request);
669
+ const id = result[0]?.id;
670
+ if (!id)
671
+ throw new Error('id not found');
672
+ return id;
673
+ },
674
+ async signPersonalMessage(parameters) {
675
+ const { internal } = parameters;
676
+ const { store, request } = internal;
677
+ if (request.method !== 'personal_sign')
678
+ throw new Error('Cannot sign personal message for method: ' + request.method);
679
+ const provider = getProvider(store);
680
+ return await provider.request(request);
681
+ },
682
+ async signTypedData(parameters) {
683
+ const { internal } = parameters;
684
+ const { store, request } = internal;
685
+ if (request.method !== 'eth_signTypedData_v4')
686
+ throw new Error('Cannot sign typed data for method: ' + request.method);
687
+ const provider = getProvider(store);
688
+ return await provider.request(request);
689
+ },
690
+ async switchChain(parameters) {
691
+ const { internal } = parameters;
692
+ const { store, request } = internal;
693
+ if (request.method !== 'wallet_switchEthereumChain')
694
+ throw new Error('Cannot switch chain for method: ' + request.method);
695
+ if (!renderer.supportsHeadless)
696
+ return;
697
+ const provider = getProvider(store);
698
+ return await provider.request(request);
699
+ },
700
+ async upgradeAccount(parameters) {
701
+ const { account, internal } = parameters;
702
+ const { store, request } = internal;
703
+ if (request.method !== 'wallet_upgradeAccount')
704
+ throw new Error('Cannot upgrade account for method: ' + request.method);
705
+ const provider = getProvider(store);
706
+ await provider.request(request);
707
+ return { account };
708
+ },
709
+ async verifyEmail(parameters) {
710
+ const { internal } = parameters;
711
+ const { request, store } = internal;
712
+ if (request.method !== 'account_verifyEmail')
713
+ throw new Error('Cannot verify email for method: ' + request.method);
714
+ const provider = getProvider(store);
715
+ return await provider.request(request);
716
+ },
717
+ },
718
+ config: parameters,
719
+ name: 'dialog',
720
+ setup(parameters) {
721
+ const { internal } = parameters;
722
+ const { store } = internal;
723
+ const dialog = renderer.setup({
724
+ host,
725
+ internal,
726
+ theme,
727
+ themeController,
728
+ });
729
+ const unsubscribe = store.subscribe((x) => x.requestQueue, (requestQueue) => {
730
+ for (const listener of listeners)
731
+ listener(requestQueue);
732
+ const requests = requestQueue
733
+ .map((x) => (x.status === 'pending' ? x : undefined))
734
+ .filter(Boolean);
735
+ dialog.syncRequests(requests).catch(() => { });
736
+ if (requests.length === 0)
737
+ dialog.close();
738
+ });
739
+ return () => {
740
+ unsubscribe();
741
+ dialog.destroy();
742
+ };
743
+ },
744
+ });
745
+ }
746
+ export async function resolveFeeToken(internal, parameters) {
747
+ const { config: { feeToken }, } = internal;
748
+ const { feeToken: overrideFeeToken } = parameters ?? {};
749
+ return overrideFeeToken ?? feeToken;
750
+ }
751
+ function getAuthUrl(apiUrl, { storage }) {
752
+ if (!apiUrl)
753
+ return undefined;
754
+ const authUrl = Siwe.resolveAuthUrl(apiUrl, typeof window !== 'undefined' ? window.location.origin : undefined);
755
+ // Store the resolved auth URL for future use (e.g., disconnect)
756
+ if (authUrl)
757
+ storage.setItem('porto.authUrl', authUrl);
758
+ return authUrl;
759
+ }
760
+ //# sourceMappingURL=dialog.js.map