0xtrails 0.0.1 → 0.0.2

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 (359) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +42 -0
  3. package/dist/abi.d.ts +37 -0
  4. package/dist/abi.d.ts.map +1 -0
  5. package/dist/abi.js +36 -0
  6. package/dist/apiClient.d.ts +9 -0
  7. package/dist/apiClient.d.ts.map +1 -0
  8. package/dist/apiClient.js +18 -0
  9. package/dist/buffer.d.ts +3 -0
  10. package/dist/buffer.d.ts.map +1 -0
  11. package/dist/buffer.js +8 -0
  12. package/dist/cctp.d.ts +84 -0
  13. package/dist/cctp.d.ts.map +1 -0
  14. package/dist/cctp.js +401 -0
  15. package/dist/chainSwitch.d.ts +7 -0
  16. package/dist/chainSwitch.d.ts.map +1 -0
  17. package/dist/chainSwitch.js +33 -0
  18. package/dist/chains.d.ts +13 -0
  19. package/dist/chains.d.ts.map +1 -0
  20. package/dist/chains.js +95 -0
  21. package/dist/constants.d.ts +11 -0
  22. package/dist/constants.d.ts.map +1 -0
  23. package/dist/constants.js +16 -0
  24. package/dist/encoders.d.ts +7 -0
  25. package/dist/encoders.d.ts.map +1 -0
  26. package/dist/encoders.js +8 -0
  27. package/dist/error.d.ts +2 -0
  28. package/dist/error.d.ts.map +1 -0
  29. package/dist/error.js +12 -0
  30. package/dist/explorer.d.ts +12 -0
  31. package/dist/explorer.d.ts.map +1 -0
  32. package/dist/explorer.js +18 -0
  33. package/dist/gasless.d.ts +116 -0
  34. package/dist/gasless.d.ts.map +1 -0
  35. package/dist/gasless.js +297 -0
  36. package/dist/index.d.ts +13 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +9 -0
  39. package/dist/indexerClient.d.ts +9 -0
  40. package/dist/indexerClient.d.ts.map +1 -0
  41. package/dist/indexerClient.js +18 -0
  42. package/dist/intents.d.ts +83 -0
  43. package/dist/intents.d.ts.map +1 -0
  44. package/dist/intents.js +288 -0
  45. package/dist/metaTxnMonitor.d.ts +14 -0
  46. package/dist/metaTxnMonitor.d.ts.map +1 -0
  47. package/dist/metaTxnMonitor.js +121 -0
  48. package/dist/metaTxns.d.ts +6 -0
  49. package/dist/metaTxns.d.ts.map +1 -0
  50. package/dist/metaTxns.js +4 -0
  51. package/dist/paymasterSend.d.ts +90 -0
  52. package/dist/paymasterSend.d.ts.map +1 -0
  53. package/dist/paymasterSend.js +329 -0
  54. package/dist/preconditions.d.ts +11 -0
  55. package/dist/preconditions.d.ts.map +1 -0
  56. package/dist/preconditions.js +29 -0
  57. package/dist/prepareSend.d.ts +102 -0
  58. package/dist/prepareSend.d.ts.map +1 -0
  59. package/dist/prepareSend.js +1080 -0
  60. package/dist/prices.d.ts +18 -0
  61. package/dist/prices.d.ts.map +1 -0
  62. package/dist/prices.js +142 -0
  63. package/dist/queryParams.d.ts +9 -0
  64. package/dist/queryParams.d.ts.map +1 -0
  65. package/dist/queryParams.js +66 -0
  66. package/dist/relaySdk.d.ts +65 -0
  67. package/dist/relaySdk.d.ts.map +1 -0
  68. package/dist/relaySdk.js +314 -0
  69. package/dist/relayer.d.ts +23 -0
  70. package/dist/relayer.d.ts.map +1 -0
  71. package/dist/relayer.js +230 -0
  72. package/dist/sendUserOp.d.ts +140 -0
  73. package/dist/sendUserOp.d.ts.map +1 -0
  74. package/dist/sendUserOp.js +388 -0
  75. package/dist/sequenceWallet.d.ts +79 -0
  76. package/dist/sequenceWallet.d.ts.map +1 -0
  77. package/dist/sequenceWallet.js +374 -0
  78. package/dist/theme.d.ts +3 -0
  79. package/dist/theme.d.ts.map +1 -0
  80. package/dist/theme.js +1 -0
  81. package/dist/toSimpleSmartAccount.d.ts +95 -0
  82. package/dist/toSimpleSmartAccount.d.ts.map +1 -0
  83. package/dist/toSimpleSmartAccount.js +373 -0
  84. package/dist/tokenBalances.d.ts +118 -0
  85. package/dist/tokenBalances.d.ts.map +1 -0
  86. package/dist/tokenBalances.js +492 -0
  87. package/dist/tokens.d.ts +50 -0
  88. package/dist/tokens.d.ts.map +1 -0
  89. package/dist/tokens.js +356 -0
  90. package/dist/trails.d.ts +128 -0
  91. package/dist/trails.d.ts.map +1 -0
  92. package/dist/trails.js +1031 -0
  93. package/dist/umd/trails.min.js +12610 -0
  94. package/dist/umd/trails.min.js.map +1 -0
  95. package/dist/umd.d.ts +24 -0
  96. package/dist/umd.d.ts.map +1 -0
  97. package/dist/utils.d.ts +5 -0
  98. package/dist/utils.d.ts.map +1 -0
  99. package/dist/utils.js +9 -0
  100. package/dist/widget/ConstantsUtil-B-_-u8aQ.js +6 -0
  101. package/dist/widget/add-hVLs3ldJ.js +20 -0
  102. package/dist/widget/all-wallets-Cwxnx4BT.js +11 -0
  103. package/dist/widget/app-store-CAAVQjW0.js +22 -0
  104. package/dist/widget/apple-C3BSbglw.js +23 -0
  105. package/dist/widget/arrow-bottom-circle-BGU9MmsZ.js +16 -0
  106. package/dist/widget/arrow-bottom-hS_SA8Gp.js +13 -0
  107. package/dist/widget/arrow-left-CJZanWz7.js +13 -0
  108. package/dist/widget/arrow-right-C1qL8EMd.js +13 -0
  109. package/dist/widget/arrow-top-CbuCmbQs.js +13 -0
  110. package/dist/widget/bank-CXBEEGbb.js +19 -0
  111. package/dist/widget/bin-Dqzv3zCZ.js +9 -0
  112. package/dist/widget/bitcoin-4y3sovZp.js +18 -0
  113. package/dist/widget/browser-DyOl4_8m.js +1413 -0
  114. package/dist/widget/browser-t7Fh0sEU.js +19 -0
  115. package/dist/widget/card-Bo4CZkTs.js +19 -0
  116. package/dist/widget/ccip-BynehMIN.js +232 -0
  117. package/dist/widget/checkmark-DV6OKvnY.js +16 -0
  118. package/dist/widget/checkmark-bold-CAp1-IQ2.js +13 -0
  119. package/dist/widget/chevron-bottom-BjzsVzk9.js +13 -0
  120. package/dist/widget/chevron-left-CQZBDCiR.js +13 -0
  121. package/dist/widget/chevron-right-Dhg4zeZM.js +13 -0
  122. package/dist/widget/chevron-top-CDQmfJef.js +13 -0
  123. package/dist/widget/chrome-store-BNaC_b6w.js +66 -0
  124. package/dist/widget/circle-BC_GBj91.js +9 -0
  125. package/dist/widget/clock-BmF8-4a0.js +13 -0
  126. package/dist/widget/close-Bf61nZ8o.js +13 -0
  127. package/dist/widget/coinPlaceholder-7cZW2058.js +13 -0
  128. package/dist/widget/compass-CFC3yhnW.js +13 -0
  129. package/dist/widget/components/ChainImage.d.ts +8 -0
  130. package/dist/widget/components/ChainImage.d.ts.map +1 -0
  131. package/dist/widget/components/ChainImage.js +6 -0
  132. package/dist/widget/components/ConnectWallet.d.ts +18 -0
  133. package/dist/widget/components/ConnectWallet.d.ts.map +1 -0
  134. package/dist/widget/components/ConnectWallet.js +66 -0
  135. package/dist/widget/components/DebugScreensDropdown.d.ts +9 -0
  136. package/dist/widget/components/DebugScreensDropdown.d.ts.map +1 -0
  137. package/dist/widget/components/DebugScreensDropdown.js +40 -0
  138. package/dist/widget/components/FeeOptions.d.ts +17 -0
  139. package/dist/widget/components/FeeOptions.d.ts.map +1 -0
  140. package/dist/widget/components/FeeOptions.js +65 -0
  141. package/dist/widget/components/Footer.d.ts +9 -0
  142. package/dist/widget/components/Footer.d.ts.map +1 -0
  143. package/dist/widget/components/Footer.js +13 -0
  144. package/dist/widget/components/GreenCheckAnimation.d.ts +2 -0
  145. package/dist/widget/components/GreenCheckAnimation.d.ts.map +1 -0
  146. package/dist/widget/components/GreenCheckAnimation.js +74 -0
  147. package/dist/widget/components/Modal.d.ts +11 -0
  148. package/dist/widget/components/Modal.d.ts.map +1 -0
  149. package/dist/widget/components/Modal.js +36 -0
  150. package/dist/widget/components/Receipt.d.ts +13 -0
  151. package/dist/widget/components/Receipt.d.ts.map +1 -0
  152. package/dist/widget/components/Receipt.js +36 -0
  153. package/dist/widget/components/SendForm.d.ts +44 -0
  154. package/dist/widget/components/SendForm.d.ts.map +1 -0
  155. package/dist/widget/components/SendForm.js +177 -0
  156. package/dist/widget/components/TokenImage.d.ts +10 -0
  157. package/dist/widget/components/TokenImage.d.ts.map +1 -0
  158. package/dist/widget/components/TokenImage.js +8 -0
  159. package/dist/widget/components/TokenList.d.ts +16 -0
  160. package/dist/widget/components/TokenList.d.ts.map +1 -0
  161. package/dist/widget/components/TokenList.js +39 -0
  162. package/dist/widget/components/TransferPending.d.ts +11 -0
  163. package/dist/widget/components/TransferPending.d.ts.map +1 -0
  164. package/dist/widget/components/TransferPending.js +77 -0
  165. package/dist/widget/components/TransferPendingVertical.d.ts +18 -0
  166. package/dist/widget/components/TransferPendingVertical.d.ts.map +1 -0
  167. package/dist/widget/components/TransferPendingVertical.js +183 -0
  168. package/dist/widget/components/WalletConfirmation.d.ts +18 -0
  169. package/dist/widget/components/WalletConfirmation.d.ts.map +1 -0
  170. package/dist/widget/components/WalletConfirmation.js +22 -0
  171. package/dist/widget/config.d.ts +4 -0
  172. package/dist/widget/config.d.ts.map +1 -0
  173. package/dist/widget/config.js +3 -0
  174. package/dist/widget/copy-e0xXvKN0.js +20 -0
  175. package/dist/widget/cursor-CqM3v0xJ.js +8 -0
  176. package/dist/widget/cursor-transparent-CUQpdsCG.js +17 -0
  177. package/dist/widget/desktop-DUDGIRpM.js +14 -0
  178. package/dist/widget/disconnect-DUFST9QQ.js +13 -0
  179. package/dist/widget/discord-C1cj365Z.js +22 -0
  180. package/dist/widget/email-BHhmb_lX.js +703 -0
  181. package/dist/widget/embedded-wallet-CuuC4eah.js +467 -0
  182. package/dist/widget/ethereum-CfmBVfeB.js +15 -0
  183. package/dist/widget/etherscan-BSiynDhW.js +11 -0
  184. package/dist/widget/exclamation-triangle-DEiFNpHw.js +9 -0
  185. package/dist/widget/extension-mRmfCDxo.js +13 -0
  186. package/dist/widget/external-link-B4xMIVnW.js +13 -0
  187. package/dist/widget/facebook-CBAZStBR.js +31 -0
  188. package/dist/widget/farcaster-LHDEDf5S.js +17 -0
  189. package/dist/widget/filters-CBijuvFv.js +13 -0
  190. package/dist/widget/github-C3ILD420.js +23 -0
  191. package/dist/widget/google-CSj73POX.js +23 -0
  192. package/dist/widget/help-circle-2hdG5IdB.js +17 -0
  193. package/dist/widget/hooks/useAmountUsd.d.ts +13 -0
  194. package/dist/widget/hooks/useAmountUsd.d.ts.map +1 -0
  195. package/dist/widget/hooks/useAmountUsd.js +35 -0
  196. package/dist/widget/hooks/useSendForm.d.ts +125 -0
  197. package/dist/widget/hooks/useSendForm.d.ts.map +1 -0
  198. package/dist/widget/hooks/useSendForm.js +450 -0
  199. package/dist/widget/hooks/useTokenList.d.ts +52 -0
  200. package/dist/widget/hooks/useTokenList.d.ts.map +1 -0
  201. package/dist/widget/hooks/useTokenList.js +252 -0
  202. package/dist/widget/id-ByYSrwsd.js +17 -0
  203. package/dist/widget/if-defined-DRXJEhv7.js +752 -0
  204. package/dist/widget/image-C90L4Rf6.js +9 -0
  205. package/dist/widget/index-B3SlQ9v3.js +46 -0
  206. package/dist/widget/index-B8LPuLXQ.js +78 -0
  207. package/dist/widget/index-BDbworWA.js +171 -0
  208. package/dist/widget/index-BTlDgFSK.js +98 -0
  209. package/dist/widget/index-BUCcjXbd.js +306 -0
  210. package/dist/widget/index-BZ34edi2.js +1055 -0
  211. package/dist/widget/index-BiCU29wK.js +147 -0
  212. package/dist/widget/index-BlmqIKsY.js +266 -0
  213. package/dist/widget/index-BlviH5nG.js +55 -0
  214. package/dist/widget/index-Bwd5X3fS.js +8306 -0
  215. package/dist/widget/index-C5gmknHK.js +78 -0
  216. package/dist/widget/index-CD6dBcRj.js +76 -0
  217. package/dist/widget/index-CDlhy529.js +63 -0
  218. package/dist/widget/index-CHXa5ke-.js +59 -0
  219. package/dist/widget/index-CK94R-H7.js +22498 -0
  220. package/dist/widget/index-CQzo3m3x.js +182 -0
  221. package/dist/widget/index-CRT8cAwG.js +325 -0
  222. package/dist/widget/index-CY7Lt2Yu.js +310 -0
  223. package/dist/widget/index-CiKfAu1E.js +79 -0
  224. package/dist/widget/index-CkCu6rMi.js +258 -0
  225. package/dist/widget/index-CngLTu_R.js +517 -0
  226. package/dist/widget/index-CsMV8-em.js +2577 -0
  227. package/dist/widget/index-Cu2Wva8v.js +200 -0
  228. package/dist/widget/index-DKBxLTEF.js +240 -0
  229. package/dist/widget/index-DQEVT3dx.js +511 -0
  230. package/dist/widget/index-DU2HcCis.js +200 -0
  231. package/dist/widget/index-DutZGWNW.js +321 -0
  232. package/dist/widget/index-O0glArmc.js +182 -0
  233. package/dist/widget/index-O8FmRjKe.js +63719 -0
  234. package/dist/widget/index-RtKXrB6I.js +576 -0
  235. package/dist/widget/index-TIYtS0gE.js +88 -0
  236. package/dist/widget/index-dQNJvWHs.js +66 -0
  237. package/dist/widget/index-wmEwdsq7.js +909 -0
  238. package/dist/widget/index.d.ts +3 -0
  239. package/dist/widget/index.d.ts.map +1 -0
  240. package/dist/widget/index.js +2 -0
  241. package/dist/widget/info-DMPChDjV.js +8 -0
  242. package/dist/widget/info-circle-DAvS_7nY.js +17 -0
  243. package/dist/widget/lightbulb-DnZ9mNEs.js +8 -0
  244. package/dist/widget/lit-html-BRjl1r6K.js +243 -0
  245. package/dist/widget/mail-DpaVSOP8.js +13 -0
  246. package/dist/widget/mobile-CRvdyu7I.js +14 -0
  247. package/dist/widget/more-C5VqW9PR.js +16 -0
  248. package/dist/widget/network-placeholder-CZ0vApma.js +19 -0
  249. package/dist/widget/nftPlaceholder-7jjIK2bT.js +13 -0
  250. package/dist/widget/off-4mHjJLLX.js +9 -0
  251. package/dist/widget/onramp-Bc0ozVsw.js +929 -0
  252. package/dist/widget/play-store-Uocul8nC.js +37 -0
  253. package/dist/widget/plus-DrYF7siO.js +18 -0
  254. package/dist/widget/prepareSend-BQJmzM5B.js +54987 -0
  255. package/dist/widget/qr-code-DcnGMUB3.js +11 -0
  256. package/dist/widget/receive-fvIVd7R_.js +184 -0
  257. package/dist/widget/recycle-horizontal-DrDwXC4D.js +14 -0
  258. package/dist/widget/ref-CXNmEjML.js +41 -0
  259. package/dist/widget/refresh-OK9lIPLS.js +13 -0
  260. package/dist/widget/reown-logo-C-Qn7mS3.js +17 -0
  261. package/dist/widget/search-DZqv1oKg.js +13 -0
  262. package/dist/widget/send-CJlmI-xe.js +1039 -0
  263. package/dist/widget/send-otoEC8uU.js +20 -0
  264. package/dist/widget/socials-BJciurWF.js +599 -0
  265. package/dist/widget/solana-Bv5Hs_0T.js +18 -0
  266. package/dist/widget/swapHorizontal-BzOPGV37.js +13 -0
  267. package/dist/widget/swapHorizontalBold-axyHnSmj.js +13 -0
  268. package/dist/widget/swapHorizontalMedium-C6YOPfPz.js +21 -0
  269. package/dist/widget/swapHorizontalRoundedBold-yVcLbWNT.js +13 -0
  270. package/dist/widget/swapVertical-BDjxt9pE.js +13 -0
  271. package/dist/widget/swaps-DEWNj4kd.js +1637 -0
  272. package/dist/widget/telegram-BQJD7dlP.js +21 -0
  273. package/dist/widget/three-dots-DW9jmSMG.js +10 -0
  274. package/dist/widget/transactions-uCseGQQt.js +38 -0
  275. package/dist/widget/twitch-XugxDfOE.js +23 -0
  276. package/dist/widget/twitterIcon-DQVObQUL.js +11 -0
  277. package/dist/widget/types.d.ts +51 -0
  278. package/dist/widget/types.d.ts.map +1 -0
  279. package/dist/widget/types.js +1 -0
  280. package/dist/widget/verify-DpMYHxLf.js +13 -0
  281. package/dist/widget/verify-filled-KpEL6ZJ_.js +13 -0
  282. package/dist/widget/w3m-modal-C8e-6Kba.js +1047 -0
  283. package/dist/widget/wallet-D8ssEB0o.js +13 -0
  284. package/dist/widget/wallet-placeholder-HtAy21Wc.js +19 -0
  285. package/dist/widget/walletconnect-Bp_4XfrY.js +37 -0
  286. package/dist/widget/warning-circle-FgYS7P7n.js +17 -0
  287. package/dist/widget/widget/index.js +7 -0
  288. package/dist/widget/widget.d.ts +47 -0
  289. package/dist/widget/widget.d.ts.map +1 -0
  290. package/dist/widget/widget.js +932 -0
  291. package/dist/widget/x-DlZBoP9k.js +17 -0
  292. package/dist/widget/x-mark-Ba9pt-_h.js +8 -0
  293. package/package.json +102 -8
  294. package/src/abi.ts +38 -0
  295. package/src/apiClient.ts +32 -0
  296. package/src/buffer.ts +10 -0
  297. package/src/cctp.ts +579 -0
  298. package/src/chainSwitch.ts +55 -0
  299. package/src/chains.ts +124 -0
  300. package/src/constants.ts +26 -0
  301. package/src/encoders.ts +20 -0
  302. package/src/error.ts +15 -0
  303. package/src/explorer.ts +37 -0
  304. package/src/gasless.ts +545 -0
  305. package/src/index.ts +48 -0
  306. package/src/indexerClient.ts +36 -0
  307. package/src/intents.ts +537 -0
  308. package/src/metaTxnMonitor.ts +163 -0
  309. package/src/metaTxns.ts +21 -0
  310. package/src/paymasterSend.ts +503 -0
  311. package/src/preconditions.ts +52 -0
  312. package/src/prepareSend.ts +1849 -0
  313. package/src/prices.ts +186 -0
  314. package/src/queryParams.ts +80 -0
  315. package/src/relaySdk.ts +481 -0
  316. package/src/relayer.ts +255 -0
  317. package/src/sendUserOp.ts +570 -0
  318. package/src/sequenceWallet.ts +579 -0
  319. package/src/theme.ts +2 -0
  320. package/src/toSimpleSmartAccount.ts +567 -0
  321. package/src/tokenBalances.ts +760 -0
  322. package/src/tokens.ts +471 -0
  323. package/src/trails.ts +1591 -0
  324. package/src/types.d.ts +11 -0
  325. package/src/umd.tsx +49 -0
  326. package/src/utils.ts +16 -0
  327. package/src/vite-env.d.ts +4 -0
  328. package/src/widget/assets/MetaMask-icon-fox-with-margins.svg +31 -0
  329. package/src/widget/assets/MetaMask-icon-fox.svg +26 -0
  330. package/src/widget/assets/MetaMask-logo-black.svg +3 -0
  331. package/src/widget/assets/MetaMask-logo-white.svg +16 -0
  332. package/src/widget/assets/Privy_Brandmark_Black.svg +9 -0
  333. package/src/widget/assets/Privy_Brandmark_White.svg +9 -0
  334. package/src/widget/assets/Trails-logo-black.svg +11 -0
  335. package/src/widget/assets/Trails-logo-white.svg +11 -0
  336. package/src/widget/components/ChainImage.tsx +28 -0
  337. package/src/widget/components/ConnectWallet.tsx +206 -0
  338. package/src/widget/components/DebugScreensDropdown.tsx +88 -0
  339. package/src/widget/components/FeeOptions.tsx +199 -0
  340. package/src/widget/components/Footer.tsx +51 -0
  341. package/src/widget/components/GreenCheckAnimation.tsx +119 -0
  342. package/src/widget/components/Modal.tsx +97 -0
  343. package/src/widget/components/Receipt.tsx +237 -0
  344. package/src/widget/components/SendForm.tsx +695 -0
  345. package/src/widget/components/TokenImage.tsx +37 -0
  346. package/src/widget/components/TokenList.tsx +287 -0
  347. package/src/widget/components/TransferPending.tsx +204 -0
  348. package/src/widget/components/TransferPendingVertical.tsx +412 -0
  349. package/src/widget/components/WalletConfirmation.tsx +172 -0
  350. package/src/widget/config.ts +5 -0
  351. package/src/widget/hooks/useAmountUsd.ts +59 -0
  352. package/src/widget/hooks/useSendForm.ts +715 -0
  353. package/src/widget/hooks/useTokenList.ts +397 -0
  354. package/src/widget/index.css +2 -0
  355. package/src/widget/index.tsx +8 -0
  356. package/src/widget/types/svg.d.ts +8 -0
  357. package/src/widget/types.ts +59 -0
  358. package/src/widget/widget.tsx +1438 -0
  359. package/index.js +0 -1
@@ -0,0 +1,579 @@
1
+ import { Account } from "@0xsequence/account"
2
+ import { commons } from "@0xsequence/core"
3
+ import { allNetworks } from "@0xsequence/network"
4
+ import { trackers } from "@0xsequence/sessions"
5
+ import { Orchestrator, type signers } from "@0xsequence/signhub"
6
+ import type { Payload } from "@0xsequence/wallet-primitives"
7
+ import { ethers } from "ethers"
8
+ import { Abi, AbiFunction } from "ox"
9
+ import {
10
+ bytesToHex,
11
+ type Chain,
12
+ hexToBytes,
13
+ type PublicClient,
14
+ toHex,
15
+ type WalletClient,
16
+ } from "viem"
17
+ import type { Relayer, RelayerEnvConfig } from "./relayer.js"
18
+ import { getRelayerUrl } from "./relayer.js"
19
+
20
+ export type FlatTransaction = {
21
+ to: string
22
+ value?: string
23
+ data?: string
24
+ gasLimit?: string
25
+ delegateCall?: boolean
26
+ revertOnError?: boolean
27
+ }
28
+
29
+ export type TransactionsEntry = {
30
+ subdigest?: string
31
+ wallet: string
32
+ space: string
33
+ nonce: string
34
+ chainId: string
35
+ transactions: FlatTransaction[]
36
+ }
37
+
38
+ export const TRACKER = new trackers.remote.RemoteConfigTracker(
39
+ "https://sessions.sequence.app",
40
+ )
41
+
42
+ type GetAccountNetworksInput = {
43
+ relayerConfig: RelayerEnvConfig
44
+ sequenceProjectAccessKey: string
45
+ }
46
+
47
+ export function getAccountNetworks(input: GetAccountNetworksInput): any[] {
48
+ return allNetworks.map((network) => {
49
+ try {
50
+ const relayerUrl = getRelayerUrl(input.relayerConfig, network.chainId)
51
+ if (relayerUrl) {
52
+ const relayer: any = {
53
+ provider: new ethers.JsonRpcProvider(network.rpcUrl),
54
+ url: relayerUrl,
55
+ projectAccessKey: input.sequenceProjectAccessKey,
56
+ }
57
+ return {
58
+ ...network,
59
+ relayer,
60
+ }
61
+ }
62
+ } catch (_err: unknown) {
63
+ // noop
64
+ }
65
+ return network
66
+ })
67
+ }
68
+
69
+ export async function createSequenceWallet(
70
+ threshold: number,
71
+ signers: { address: string; weight: number }[],
72
+ relayerConfig: RelayerEnvConfig,
73
+ sequenceProjectAccessKey: string,
74
+ ): Promise<Account> {
75
+ const account = await Account.new({
76
+ config: {
77
+ threshold,
78
+ // By default a random checkpoint is generated every second
79
+ checkpoint: Math.floor(Date.now() / 1000),
80
+ signers: signers,
81
+ },
82
+ tracker: TRACKER,
83
+ contexts: commons.context.defaultContexts,
84
+ orchestrator: new Orchestrator([]),
85
+ networks: getAccountNetworks({ relayerConfig, sequenceProjectAccessKey }),
86
+ })
87
+
88
+ // Try to fetch the config from the tracker
89
+ const reverse1 = await TRACKER.imageHashOfCounterfactualWallet({
90
+ wallet: account.address,
91
+ })
92
+ if (!reverse1) {
93
+ throw new Error("Failed to fetch imageHash from the tracker")
94
+ }
95
+
96
+ // Try to fetch the imageHash from the tracker
97
+ const reverse2 = await TRACKER.configOfImageHash({
98
+ imageHash: reverse1.imageHash,
99
+ })
100
+ if (!reverse2) {
101
+ throw new Error("Failed to fetch config from the tracker")
102
+ }
103
+
104
+ return account
105
+ }
106
+
107
+ export function toSequenceTransactions(
108
+ txs: FlatTransaction[],
109
+ ): commons.transaction.Transaction[] {
110
+ return txs.map(toSequenceTransaction)
111
+ }
112
+
113
+ export function toSequenceTransaction(
114
+ tx: FlatTransaction,
115
+ ): commons.transaction.Transaction {
116
+ return {
117
+ to: tx.to,
118
+ value: tx.value ? BigInt(tx.value) : undefined,
119
+ data: tx.data,
120
+ gasLimit: tx.gasLimit ? BigInt(tx.gasLimit) : undefined,
121
+ delegateCall: tx.delegateCall || false,
122
+ revertOnError: tx.revertOnError || false,
123
+ }
124
+ }
125
+
126
+ export function accountFor(args: {
127
+ address: string
128
+ signatures?: { signer: string; signature: string }[]
129
+ relayerConfig: RelayerEnvConfig
130
+ sequenceProjectAccessKey: string
131
+ }): Account {
132
+ const signers: signers.SapientSigner[] = []
133
+
134
+ if (args.signatures) {
135
+ for (const { signer, signature } of args.signatures) {
136
+ // Some ECDSA libraries may return the signature with `v` as 0x00 or 0x01
137
+ // but the Sequence protocol expects it to be 0x1b or 0x1c. We need to
138
+ // adjust the signature to match the protocol.
139
+ const signatureArr = hexToBytes(signature as `0x${string}`)
140
+ if (
141
+ signatureArr.length === 66 &&
142
+ (signatureArr[64] === 0 || signatureArr[64] === 1)
143
+ ) {
144
+ signatureArr[64] = signatureArr[64] + 27
145
+ }
146
+
147
+ signers.push(new StaticSigner(signer, bytesToHex(signatureArr)))
148
+ }
149
+ }
150
+
151
+ console.log("[trails-sdk] signers", signers)
152
+
153
+ return new Account({
154
+ address: args.address,
155
+ tracker: TRACKER,
156
+ contexts: commons.context.defaultContexts,
157
+ orchestrator: new Orchestrator(signers),
158
+ networks: getAccountNetworks({
159
+ relayerConfig: args.relayerConfig,
160
+ sequenceProjectAccessKey: args.sequenceProjectAccessKey,
161
+ }),
162
+ })
163
+ }
164
+
165
+ export function digestOf(tx: TransactionsEntry): string {
166
+ return commons.transaction.digestOfTransactions(
167
+ commons.transaction.encodeNonce(tx.space, tx.nonce),
168
+ toSequenceTransactions(tx.transactions),
169
+ )
170
+ }
171
+
172
+ export function subdigestOf(tx: TransactionsEntry): string {
173
+ const digest = digestOf(tx)
174
+
175
+ return commons.signature.subdigestOf({
176
+ digest,
177
+ chainId: tx.chainId,
178
+ address: tx.wallet,
179
+ })
180
+ }
181
+
182
+ export function fromSequenceTransactions(
183
+ wallet: string,
184
+ txs: commons.transaction.Transactionish,
185
+ ): FlatTransaction[] {
186
+ const sequenceTxs = commons.transaction.fromTransactionish(wallet, txs)
187
+ return sequenceTxs.map((stx: any) => ({
188
+ to: stx.to,
189
+ value: stx.value?.toString(),
190
+ data: stx.data?.toString(),
191
+ gasLimit: stx.gasLimit?.toString(),
192
+ delegateCall: stx.delegateCall,
193
+ revertOnError: stx.revertOnError,
194
+ }))
195
+ }
196
+
197
+ export function recoverSigner(
198
+ signatures: string[],
199
+ subdigest: string,
200
+ ): { signer: string; signature: string }[] {
201
+ const res: { signer: string; signature: string }[] = []
202
+
203
+ for (const signature of signatures) {
204
+ try {
205
+ const r = commons.signer.recoverSigner(subdigest, signature)
206
+ res.push({ signer: r, signature: signature })
207
+ } catch (e) {
208
+ console.error("[trails-sdk] Failed to recover signature", e)
209
+ }
210
+ }
211
+
212
+ return res
213
+ }
214
+
215
+ export async function simpleCreateSequenceWallet(
216
+ account: Account,
217
+ relayerConfig: RelayerEnvConfig,
218
+ sequenceProjectAccessKey: string,
219
+ ): Promise<`0x${string}`> {
220
+ const signer = account.address
221
+ const threshold = 1
222
+ const weight = 1
223
+ const wallet = await createSequenceWallet(
224
+ threshold,
225
+ [{ address: signer, weight: weight }],
226
+ relayerConfig,
227
+ sequenceProjectAccessKey,
228
+ )
229
+
230
+ return wallet.address as `0x${string}`
231
+ }
232
+
233
+ export async function getIsWalletDeployed(
234
+ wallet: `0x${string}`,
235
+ publicClient: PublicClient,
236
+ ): Promise<boolean> {
237
+ const hasCode = await publicClient?.getCode({
238
+ address: wallet as `0x${string}`,
239
+ })
240
+
241
+ const isDeployed = hasCode !== undefined && hasCode !== "0x"
242
+ return isDeployed
243
+ }
244
+
245
+ export async function waitForWalletDeployment(
246
+ wallet: `0x${string}`,
247
+ publicClient: PublicClient,
248
+ ): Promise<void> {
249
+ while (true) {
250
+ const isDeployed = await getIsWalletDeployed(wallet, publicClient)
251
+ if (isDeployed) {
252
+ break
253
+ }
254
+ console.log("[trails-sdk] waiting for wallet deployment")
255
+ await new Promise((resolve) => setTimeout(resolve, 500))
256
+ }
257
+ }
258
+ export async function sequenceSendTransaction(
259
+ sequenceWalletAddress: string,
260
+ accountClient: WalletClient,
261
+ publicClient: PublicClient,
262
+ calls: any[],
263
+ chain: Chain,
264
+ relayerConfig: RelayerEnvConfig,
265
+ sequenceProjectAccessKey: string,
266
+ ): Promise<string | null> {
267
+ const chainId = chain.id
268
+ if (!accountClient?.account?.address || !sequenceWalletAddress) {
269
+ throw new Error("Privy signer or sequence wallet address not available")
270
+ }
271
+ const txsToExecute = calls.map((call: any) => {
272
+ return {
273
+ to: call.to,
274
+ data: call.data,
275
+ value: call.value || "0",
276
+ revertOnError: true,
277
+ }
278
+ })
279
+
280
+ const txe: TransactionsEntry = {
281
+ wallet: sequenceWalletAddress as `0x${string}`,
282
+ space: Math.floor(Date.now()).toString(),
283
+ nonce: "0",
284
+ chainId: chainId.toString(),
285
+ transactions: txsToExecute,
286
+ }
287
+ // Calculate the tx subdigest
288
+ const subdigest = subdigestOf(txe)
289
+ const digestBytes = hexToBytes(subdigest as `0x${string}`)
290
+ // Sign the tx subdigest
291
+ const signature = await accountClient.signMessage({
292
+ account: accountClient.account,
293
+ message: { raw: digestBytes },
294
+ })
295
+ const suffixed = `${signature}02`
296
+ // Get the account for the Sequence Wallet with signatures
297
+ const sequenceAccount = accountFor({
298
+ address: sequenceWalletAddress as `0x${string}`,
299
+ signatures: [
300
+ {
301
+ signer: accountClient.account?.address as `0x${string}`,
302
+ signature: suffixed,
303
+ },
304
+ ],
305
+ relayerConfig,
306
+ sequenceProjectAccessKey,
307
+ })
308
+ const sequenceTxs = toSequenceTransactions(txsToExecute)
309
+ const status = await sequenceAccount.status(chainId)
310
+ const wallet = sequenceAccount.walletForStatus(chainId, status)
311
+
312
+ console.log("[trails-sdk] sequence wallet", wallet)
313
+
314
+ const isDeployed = await getIsWalletDeployed(
315
+ wallet.address as `0x${string}`,
316
+ publicClient,
317
+ )
318
+ if (!isDeployed) {
319
+ console.log("[trails-sdk] deploying sequence wallet")
320
+
321
+ const deployTx = await wallet.buildDeployTransaction()
322
+ if (!wallet.relayer) throw new Error("Wallet deploy requires a relayer")
323
+ console.log("[trails-sdk] deploy Tx", deployTx)
324
+ console.log("[trails-sdk] deployTx entrypoint:", deployTx!.entrypoint)
325
+ console.log("[trails-sdk] deployTx transactions:", deployTx!.transactions)
326
+
327
+ console.log("[trails-sdk] getting fee options 0")
328
+ const feeOptions = await wallet.relayer.getFeeOptions(
329
+ wallet.address as `0x${string}`,
330
+ ...deployTx!.transactions,
331
+ )
332
+
333
+ const quote = feeOptions?.quote
334
+ console.log("[trails-sdk] feeOptions", feeOptions)
335
+
336
+ // Check if deployment is whitelisted (no fees required)
337
+ if (feeOptions?.options.length === 0) {
338
+ console.log("[trails-sdk] Deployment is whitelisted - no fees required")
339
+
340
+ const bytes = new Uint8Array(32)
341
+ crypto.getRandomValues(bytes)
342
+
343
+ wallet.relayer.relay(
344
+ {
345
+ entrypoint: deployTx!.entrypoint as `0x${string}`,
346
+ transactions: deployTx!.transactions,
347
+ chainId: wallet.chainId,
348
+ intent: {
349
+ id: toHex(bytes),
350
+ wallet: wallet.address,
351
+ },
352
+ },
353
+ quote,
354
+ )
355
+
356
+ console.log("[trails-sdk] Deployment relayed")
357
+
358
+ await waitForWalletDeployment(
359
+ wallet.address as `0x${string}`,
360
+ publicClient,
361
+ )
362
+ console.log("[trails-sdk] sequence wallet deployed")
363
+ } else {
364
+ const option = feeOptions?.options[0]
365
+ if (!option) {
366
+ throw new Error("fee option not found")
367
+ }
368
+
369
+ console.log("[trails-sdk] option", option)
370
+
371
+ if (option) {
372
+ console.log("[trails-sdk] Using native token for deployment fee")
373
+
374
+ // Use encodeGasRefundTransaction to create the fee transaction
375
+ const feeTransactions = encodeGasRefundTransaction(option)
376
+ console.log("[trails-sdk] Fee transactions:", feeTransactions)
377
+
378
+ // Include both deployment and fee transactions
379
+ const allTransactions = [...deployTx!.transactions]
380
+ console.log(
381
+ "[trails-sdk] All transactions (deployment + fees):",
382
+ allTransactions,
383
+ )
384
+
385
+ const predecorated = await sequenceAccount.predecorateTransactions(
386
+ allTransactions,
387
+ status,
388
+ chainId,
389
+ )
390
+ const signed = await sequenceAccount.signTransactions(
391
+ predecorated,
392
+ chainId,
393
+ )
394
+
395
+ console.log(
396
+ "[trails-sdk] signed transactions with fees:",
397
+ signed.transactions,
398
+ )
399
+ console.log(
400
+ "[trails-sdk] signed entrypoint with fees:",
401
+ signed.entrypoint,
402
+ )
403
+
404
+ const bytes = new Uint8Array(32)
405
+ crypto.getRandomValues(bytes)
406
+
407
+ wallet.relayer.relay(
408
+ {
409
+ entrypoint: deployTx!.entrypoint as `0x${string}`,
410
+ transactions: deployTx!.transactions,
411
+ chainId: wallet.chainId,
412
+ intent: {
413
+ id: toHex(bytes),
414
+ wallet: wallet.address,
415
+ },
416
+ },
417
+ quote,
418
+ )
419
+
420
+ console.log("[trails-sdk] relayed deployment")
421
+
422
+ await waitForWalletDeployment(
423
+ wallet.address as `0x${string}`,
424
+ publicClient,
425
+ )
426
+ console.log("[trails-sdk] sequence wallet deployed")
427
+ } else {
428
+ throw new Error(
429
+ "ERC20 fee payment for deployment is not supported yet. Please use native token or a relayer with free wallet deployments.",
430
+ )
431
+ }
432
+ }
433
+ }
434
+
435
+ console.log("[trails-sdk] getting fee options 1")
436
+ const feeOptions = await wallet.relayer!.getFeeOptions(
437
+ wallet.address as `0x${string}`,
438
+ ...sequenceTxs,
439
+ )
440
+
441
+ // Find the USDC option for fee payment
442
+ const option = feeOptions?.options.find(
443
+ (option) => option.token.symbol === "USDC",
444
+ )
445
+
446
+ const quote = feeOptions?.quote
447
+
448
+ // Use encodeGasRefundTransaction to create the fee transaction
449
+ const feeTransactions = encodeGasRefundTransaction(option)
450
+ console.log("[trails-sdk] Fee transactions:", feeTransactions)
451
+
452
+ // Sign the txs with the Sequence Wallet
453
+ const signed = await wallet.signTransactions(
454
+ [...feeTransactions, ...sequenceTxs],
455
+ commons.transaction.encodeNonce(txe.space, txe.nonce),
456
+ )
457
+ // Relay the txs to sponsor them
458
+ const relayer = sequenceAccount.relayer(chainId)
459
+ const relayed = await relayer.relay(signed, quote)
460
+ return relayed?.hash || null
461
+ }
462
+
463
+ type TransactionBundle = commons.transaction.TransactionBundle
464
+ type SignedTransactionBundle = commons.transaction.SignedTransactionBundle
465
+ type IntendedTransactionBundle = commons.transaction.IntendedTransactionBundle
466
+ type BytesLike = `0x${string}` | Uint8Array
467
+
468
+ export class StaticSigner implements signers.SapientSigner {
469
+ private readonly signatureBytes: Uint8Array
470
+ private readonly savedSuffix: Uint8Array
471
+
472
+ constructor(
473
+ private readonly address: string,
474
+ private readonly signature: string,
475
+ ) {
476
+ const raw = hexToBytes(this.signature as `0x${string}`)
477
+
478
+ // Separate last byte as suffix
479
+ this.savedSuffix = raw.slice(-1)
480
+ this.signatureBytes = raw.slice(0, -1)
481
+ }
482
+
483
+ async buildDeployTransaction(): Promise<TransactionBundle | undefined> {
484
+ return undefined
485
+ }
486
+
487
+ async predecorateSignedTransactions(): Promise<SignedTransactionBundle[]> {
488
+ return []
489
+ }
490
+
491
+ async decorateTransactions(
492
+ og: IntendedTransactionBundle,
493
+ ): Promise<IntendedTransactionBundle> {
494
+ return og
495
+ }
496
+
497
+ async sign(): Promise<BytesLike> {
498
+ return this.signatureBytes
499
+ }
500
+
501
+ notifyStatusChange(): void {}
502
+
503
+ suffix(): BytesLike {
504
+ return this.savedSuffix
505
+ }
506
+
507
+ async getAddress() {
508
+ return this.address
509
+ }
510
+ }
511
+
512
+ export async function getFeeOptions(
513
+ relayer: Relayer.Standard.Rpc.RpcRelayer,
514
+ wallet: string,
515
+ chainId: number,
516
+ calls: Payload.Call[],
517
+ ) {
518
+ const feeOptions = await relayer.feeOptions(
519
+ wallet as `0x${string}`,
520
+ BigInt(chainId),
521
+ calls,
522
+ )
523
+
524
+ return feeOptions
525
+ }
526
+
527
+ // Import the encodeGasRefundTransaction function
528
+ function encodeGasRefundTransaction(option?: any): FlatTransaction[] {
529
+ if (!option) return []
530
+
531
+ const value = BigInt(option.value)
532
+
533
+ switch (option.token.type) {
534
+ case "UNKNOWN":
535
+ return [
536
+ {
537
+ delegateCall: false,
538
+ revertOnError: true,
539
+ gasLimit: option.gasLimit,
540
+ to: option.to,
541
+ value: value.toString(),
542
+ data: "0x",
543
+ },
544
+ ]
545
+
546
+ case "ERC20_TOKEN": {
547
+ if (!option.token.contractAddress) {
548
+ throw new Error(`No contract address for ERC-20 fee option`)
549
+ }
550
+
551
+ const [transfer] = Abi.from([
552
+ {
553
+ inputs: [{ type: "address" }, { type: "uint256" }],
554
+ name: "transfer",
555
+ outputs: [{ type: "bool" }],
556
+ stateMutability: "nonpayable",
557
+ type: "function",
558
+ },
559
+ ])
560
+
561
+ return [
562
+ {
563
+ delegateCall: false,
564
+ revertOnError: true,
565
+ gasLimit: option.gasLimit,
566
+ to: option.token.contractAddress,
567
+ value: "0",
568
+ data: AbiFunction.encodeData(transfer, [
569
+ option.to as `0x${string}`,
570
+ value,
571
+ ]),
572
+ },
573
+ ]
574
+ }
575
+
576
+ default:
577
+ throw new Error(`Unhandled fee token type ${option.token.type}`)
578
+ }
579
+ }
package/src/theme.ts ADDED
@@ -0,0 +1,2 @@
1
+ export type Theme = "light" | "dark" | "auto"
2
+ export type ActiveTheme = "light" | "dark"