0xtrails 0.13.0 → 0.13.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 (307) hide show
  1. package/dist/{ccip-Cg9-lJ6K.js → ccip-CT_An6eM.js} +39 -39
  2. package/dist/chains.d.ts +4 -3
  3. package/dist/chains.d.ts.map +1 -1
  4. package/dist/constants.d.ts +1 -0
  5. package/dist/constants.d.ts.map +1 -1
  6. package/dist/customTokens.d.ts.map +1 -1
  7. package/dist/error.d.ts +1 -0
  8. package/dist/error.d.ts.map +1 -1
  9. package/dist/gasless.d.ts +1 -2
  10. package/dist/gasless.d.ts.map +1 -1
  11. package/dist/{index-DEojZg7b.js → index-RfqL5Foz.js} +56672 -43550
  12. package/dist/index.d.ts +5 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +385 -333
  15. package/dist/intents.d.ts +8 -2
  16. package/dist/intents.d.ts.map +1 -1
  17. package/dist/keyMachineClient.d.ts +9 -0
  18. package/dist/keyMachineClient.d.ts.map +1 -0
  19. package/dist/keymachine/index.d.ts +14 -0
  20. package/dist/keymachine/index.d.ts.map +1 -0
  21. package/dist/keymachine/key-machine.gen.d.ts +461 -0
  22. package/dist/keymachine/key-machine.gen.d.ts.map +1 -0
  23. package/dist/onramp/MeshConnectFlow.d.ts +18 -0
  24. package/dist/onramp/MeshConnectFlow.d.ts.map +1 -0
  25. package/dist/onramp/MeshConnectIframe.d.ts +13 -0
  26. package/dist/onramp/MeshConnectIframe.d.ts.map +1 -0
  27. package/dist/onramp/SendFromExchangeButton.d.ts +16 -0
  28. package/dist/onramp/SendFromExchangeButton.d.ts.map +1 -0
  29. package/dist/onramp/TrailsOnRampProvider.d.ts +31 -0
  30. package/dist/onramp/TrailsOnRampProvider.d.ts.map +1 -0
  31. package/dist/onramp/index.d.ts +13 -0
  32. package/dist/onramp/index.d.ts.map +1 -0
  33. package/dist/onramp/meshconnect.d.ts +30 -0
  34. package/dist/onramp/meshconnect.d.ts.map +1 -0
  35. package/dist/onramp/trailsOnramp.d.ts +24 -0
  36. package/dist/onramp/trailsOnramp.d.ts.map +1 -0
  37. package/dist/onramp-client/index.d.ts +3 -3
  38. package/dist/onramp-client/index.d.ts.map +1 -1
  39. package/dist/paymasterSend.d.ts.map +1 -1
  40. package/dist/prepareSend.d.ts.map +1 -1
  41. package/dist/query/balance.fetchers.d.ts +31 -2
  42. package/dist/query/balance.fetchers.d.ts.map +1 -1
  43. package/dist/query/balance.hooks.d.ts +21 -2
  44. package/dist/query/balance.hooks.d.ts.map +1 -1
  45. package/dist/query/balance.queries.d.ts +18 -1
  46. package/dist/query/balance.queries.d.ts.map +1 -1
  47. package/dist/query/chains.queries.d.ts.map +1 -1
  48. package/dist/query/meld.fetchers.d.ts +1 -1
  49. package/dist/query/meld.fetchers.d.ts.map +1 -1
  50. package/dist/query/meld.hooks.d.ts +3 -3
  51. package/dist/query/meld.hooks.d.ts.map +1 -1
  52. package/dist/query/meld.queries.d.ts +1 -1
  53. package/dist/query/meld.queries.d.ts.map +1 -1
  54. package/dist/query/price.fetchers.d.ts +15 -0
  55. package/dist/query/price.fetchers.d.ts.map +1 -0
  56. package/dist/query/price.hooks.d.ts +352 -0
  57. package/dist/query/price.hooks.d.ts.map +1 -0
  58. package/dist/query/price.queries.d.ts +34 -0
  59. package/dist/query/price.queries.d.ts.map +1 -0
  60. package/dist/query/tokenList.queries.d.ts +54 -0
  61. package/dist/query/tokenList.queries.d.ts.map +1 -0
  62. package/dist/recover.d.ts +6 -4
  63. package/dist/recover.d.ts.map +1 -1
  64. package/dist/tokens.d.ts +13 -0
  65. package/dist/tokens.d.ts.map +1 -1
  66. package/dist/transactionIntent/deposits/depositOrchestrator.d.ts +2 -2
  67. package/dist/transactionIntent/deposits/depositOrchestrator.d.ts.map +1 -1
  68. package/dist/transactionIntent/deposits/gaslessDeposit.d.ts +2 -2
  69. package/dist/transactionIntent/deposits/gaslessDeposit.d.ts.map +1 -1
  70. package/dist/transactionIntent/deposits/standardDeposit.d.ts +1 -1
  71. package/dist/transactionIntent/deposits/standardDeposit.d.ts.map +1 -1
  72. package/dist/transactionIntent/handlers/intentHandler.d.ts.map +1 -1
  73. package/dist/transactionIntent/helpers/transactionStateHelpers.d.ts.map +1 -1
  74. package/dist/transactionIntent/quote/normalizeQuote.d.ts.map +1 -1
  75. package/dist/transactionIntent/types.d.ts +1 -1
  76. package/dist/transactionIntent/types.d.ts.map +1 -1
  77. package/dist/transactions.d.ts +4 -0
  78. package/dist/transactions.d.ts.map +1 -1
  79. package/dist/umd/trails.min.js +291 -202
  80. package/dist/utils/format.d.ts +7 -0
  81. package/dist/utils/format.d.ts.map +1 -1
  82. package/dist/walletUtils.d.ts +2 -1
  83. package/dist/walletUtils.d.ts.map +1 -1
  84. package/dist/wallets.d.ts +13 -54
  85. package/dist/wallets.d.ts.map +1 -1
  86. package/dist/widget/components/AccountIntentTransactionHistory.d.ts.map +1 -1
  87. package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
  88. package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
  89. package/dist/widget/components/ConnectedWallets.d.ts.map +1 -1
  90. package/dist/widget/components/DirectTransfer.d.ts +1 -1
  91. package/dist/widget/components/DirectTransfer.d.ts.map +1 -1
  92. package/dist/widget/components/EarnPools.d.ts.map +1 -1
  93. package/dist/widget/components/ExecutionStatusBadge.d.ts.map +1 -1
  94. package/dist/widget/components/Fund.d.ts.map +1 -1
  95. package/dist/widget/components/FundMethods.d.ts.map +1 -1
  96. package/dist/widget/components/HighPriceImpactBlock.d.ts +7 -0
  97. package/dist/widget/components/HighPriceImpactBlock.d.ts.map +1 -0
  98. package/dist/widget/components/MeldHistory.d.ts.map +1 -1
  99. package/dist/widget/components/MeshExchangeSelection.d.ts +11 -0
  100. package/dist/widget/components/MeshExchangeSelection.d.ts.map +1 -0
  101. package/dist/widget/components/OnrampHistoryRow.d.ts +1 -1
  102. package/dist/widget/components/OnrampHistoryRow.d.ts.map +1 -1
  103. package/dist/widget/components/OnrampProviderConfirmation.d.ts.map +1 -1
  104. package/dist/widget/components/Pay.d.ts.map +1 -1
  105. package/dist/widget/components/PoolDeposit.d.ts.map +1 -1
  106. package/dist/widget/components/PoolWithdraw.d.ts.map +1 -1
  107. package/dist/widget/components/QRCodeWalletSelect.d.ts +1 -1
  108. package/dist/widget/components/QRCodeWalletSelect.d.ts.map +1 -1
  109. package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
  110. package/dist/widget/components/Receipt.d.ts.map +1 -1
  111. package/dist/widget/components/Recipients.d.ts.map +1 -1
  112. package/dist/widget/components/RefundWarning.d.ts.map +1 -1
  113. package/dist/widget/components/TokenSelector.d.ts.map +1 -1
  114. package/dist/widget/components/TransactionDetails.d.ts.map +1 -1
  115. package/dist/widget/components/TransactionHistoryItem.d.ts +2 -0
  116. package/dist/widget/components/TransactionHistoryItem.d.ts.map +1 -1
  117. package/dist/widget/components/TransferPendingVertical.d.ts +1 -0
  118. package/dist/widget/components/TransferPendingVertical.d.ts.map +1 -1
  119. package/dist/widget/components/WaasFeeOptions.d.ts.map +1 -1
  120. package/dist/widget/components/WalletConnect.d.ts.map +1 -1
  121. package/dist/widget/components/WalletImage.d.ts.map +1 -1
  122. package/dist/widget/components/WalletList.d.ts.map +1 -1
  123. package/dist/widget/components/Withdraw.d.ts.map +1 -1
  124. package/dist/widget/css/compiled.css +1 -1
  125. package/dist/widget/hooks/useAddressWalletIcon.d.ts.map +1 -1
  126. package/dist/widget/hooks/useCombinedHistory.d.ts +6 -5
  127. package/dist/widget/hooks/useCombinedHistory.d.ts.map +1 -1
  128. package/dist/widget/hooks/useCustomTokenSearch.d.ts +6 -1
  129. package/dist/widget/hooks/useCustomTokenSearch.d.ts.map +1 -1
  130. package/dist/widget/hooks/useDefaultDestinationToken.d.ts.map +1 -1
  131. package/dist/widget/hooks/useDefaultOriginToken.d.ts.map +1 -1
  132. package/dist/widget/hooks/useFiatOnRampCurrencies.d.ts +1 -1
  133. package/dist/widget/hooks/useFiatOnRampCurrencies.d.ts.map +1 -1
  134. package/dist/widget/hooks/useGetIntent.d.ts +3 -2
  135. package/dist/widget/hooks/useGetIntent.d.ts.map +1 -1
  136. package/dist/widget/hooks/useIntentReceiptBalances.d.ts +1 -1
  137. package/dist/widget/hooks/useIntentReceiptBalances.d.ts.map +1 -1
  138. package/dist/widget/hooks/useIntentTransactionHistory.d.ts +3 -2
  139. package/dist/widget/hooks/useIntentTransactionHistory.d.ts.map +1 -1
  140. package/dist/widget/hooks/useMeldTransactionHistory.d.ts +1 -1
  141. package/dist/widget/hooks/useMeldTransactionHistory.d.ts.map +1 -1
  142. package/dist/widget/hooks/useMeldTransactionStatus.d.ts +1 -1
  143. package/dist/widget/hooks/useMeldTransactionStatus.d.ts.map +1 -1
  144. package/dist/widget/hooks/useOnRampQuote.d.ts +1 -1
  145. package/dist/widget/hooks/useOnRampQuote.d.ts.map +1 -1
  146. package/dist/widget/hooks/useOnRampTransactionStatus.d.ts +1 -1
  147. package/dist/widget/hooks/useOnRampTransactionStatus.d.ts.map +1 -1
  148. package/dist/widget/hooks/useQuote.d.ts +2 -2
  149. package/dist/widget/hooks/useQuote.d.ts.map +1 -1
  150. package/dist/widget/hooks/useSelectedFundMethod.d.ts +7 -0
  151. package/dist/widget/hooks/useSelectedFundMethod.d.ts.map +1 -1
  152. package/dist/widget/hooks/useSendForm.d.ts +0 -1
  153. package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
  154. package/dist/widget/hooks/useTokenList.d.ts +7 -1
  155. package/dist/widget/hooks/useTokenList.d.ts.map +1 -1
  156. package/dist/widget/hooks/useViewManager.d.ts +1 -1
  157. package/dist/widget/hooks/useViewManager.d.ts.map +1 -1
  158. package/dist/widget/index.js +1 -1
  159. package/dist/widget/providers/TrailsProvider.d.ts +2 -0
  160. package/dist/widget/providers/TrailsProvider.d.ts.map +1 -1
  161. package/dist/widget/utils/createWagmiConfig.d.ts +2 -2
  162. package/dist/widget/utils/createWagmiConfig.d.ts.map +1 -1
  163. package/dist/widget/utils/fundMethodSwitchState.d.ts +1 -0
  164. package/dist/widget/utils/fundMethodSwitchState.d.ts.map +1 -1
  165. package/dist/widget/utils/historyFilters.d.ts +13 -0
  166. package/dist/widget/utils/historyFilters.d.ts.map +1 -0
  167. package/dist/widget/utils/meldProviderUtils.d.ts +1 -1
  168. package/dist/widget/utils/meldProviderUtils.d.ts.map +1 -1
  169. package/dist/widget/utils/meshSupportedTokens.d.ts +4 -0
  170. package/dist/widget/utils/meshSupportedTokens.d.ts.map +1 -0
  171. package/dist/widget/utils/onrampConfig.d.ts +11 -0
  172. package/dist/widget/utils/onrampConfig.d.ts.map +1 -0
  173. package/dist/widget/utils/statusLabel.d.ts +2 -0
  174. package/dist/widget/utils/statusLabel.d.ts.map +1 -0
  175. package/dist/widget/utils/trailsOnrampConfig.d.ts +18 -0
  176. package/dist/widget/utils/trailsOnrampConfig.d.ts.map +1 -0
  177. package/dist/widget/widget.d.ts +24 -8
  178. package/dist/widget/widget.d.ts.map +1 -1
  179. package/package.json +9 -7
  180. package/src/chains.ts +26 -9
  181. package/src/constants.ts +2 -0
  182. package/src/customTokens.ts +22 -7
  183. package/src/error.ts +7 -0
  184. package/src/gasless.ts +5 -2
  185. package/src/index.ts +8 -5
  186. package/src/intents.ts +56 -60
  187. package/src/keyMachineClient.ts +29 -0
  188. package/src/keymachine/index.ts +175 -0
  189. package/src/keymachine/key-machine.gen.ts +993 -0
  190. package/src/onramp/MeshConnectFlow.tsx +86 -0
  191. package/src/onramp/MeshConnectIframe.tsx +661 -0
  192. package/src/onramp/SendFromExchangeButton.tsx +81 -0
  193. package/src/onramp/TrailsOnRampProvider.tsx +59 -0
  194. package/src/onramp/index.ts +31 -0
  195. package/src/onramp/meshconnect.ts +277 -0
  196. package/src/onramp/trailsOnramp.tsx +130 -0
  197. package/src/onramp-client/index.ts +4 -6
  198. package/src/paymasterSend.ts +0 -5
  199. package/src/prepareSend.ts +45 -44
  200. package/src/query/balance.fetchers.ts +172 -17
  201. package/src/query/balance.hooks.ts +69 -6
  202. package/src/query/balance.queries.ts +63 -0
  203. package/src/query/chains.queries.ts +1 -6
  204. package/src/query/meld.fetchers.ts +1 -1
  205. package/src/query/meld.hooks.ts +1 -1
  206. package/src/query/meld.queries.ts +1 -1
  207. package/src/query/price.fetchers.ts +53 -0
  208. package/src/query/price.hooks.ts +46 -0
  209. package/src/query/price.queries.ts +364 -0
  210. package/src/query/tokenList.queries.ts +118 -0
  211. package/src/recover.ts +89 -26
  212. package/src/tokens.ts +108 -26
  213. package/src/transactionIntent/deposits/depositOrchestrator.ts +11 -11
  214. package/src/transactionIntent/deposits/gaslessDeposit.ts +38 -39
  215. package/src/transactionIntent/deposits/standardDeposit.ts +5 -30
  216. package/src/transactionIntent/handlers/intentHandler.ts +29 -12
  217. package/src/transactionIntent/helpers/transactionStateHelpers.ts +5 -2
  218. package/src/transactionIntent/quote/normalizeQuote.ts +11 -5
  219. package/src/transactionIntent/types.ts +1 -1
  220. package/src/transactions.ts +5 -1
  221. package/src/utils/format.ts +85 -1
  222. package/src/walletUtils.ts +2 -1
  223. package/src/wallets.ts +184 -380
  224. package/src/widget/compiled.css +1 -1
  225. package/src/widget/components/AccountIntentTransactionHistory.tsx +134 -109
  226. package/src/widget/components/ClassicSwap.tsx +26 -24
  227. package/src/widget/components/ConnectWallet.tsx +4 -2
  228. package/src/widget/components/ConnectedWallets.tsx +2 -5
  229. package/src/widget/components/DirectTransfer.tsx +5 -2
  230. package/src/widget/components/EarnPools.tsx +1 -2
  231. package/src/widget/components/ExecutionStatusBadge.tsx +10 -4
  232. package/src/widget/components/Fund.tsx +169 -110
  233. package/src/widget/components/FundMethods.tsx +5 -9
  234. package/src/widget/components/HighPriceImpactBlock.tsx +44 -0
  235. package/src/widget/components/MeldHistory.tsx +4 -28
  236. package/src/widget/components/MeshExchangeSelection.tsx +218 -0
  237. package/src/widget/components/OnrampHistoryRow.tsx +3 -27
  238. package/src/widget/components/OnrampProviderConfirmation.tsx +0 -25
  239. package/src/widget/components/Pay.tsx +20 -36
  240. package/src/widget/components/PoolDeposit.tsx +14 -24
  241. package/src/widget/components/PoolWithdraw.tsx +1 -63
  242. package/src/widget/components/QRCodeWalletSelect.tsx +5 -2
  243. package/src/widget/components/QuoteDetails.tsx +113 -106
  244. package/src/widget/components/Receipt.tsx +0 -11
  245. package/src/widget/components/Recipients.tsx +2 -1
  246. package/src/widget/components/RefundWarning.tsx +5 -10
  247. package/src/widget/components/ThemeProvider.tsx +4 -4
  248. package/src/widget/components/TokenSelector.tsx +85 -16
  249. package/src/widget/components/TransactionDetails.tsx +46 -0
  250. package/src/widget/components/TransactionHistoryItem.tsx +14 -23
  251. package/src/widget/components/TransferPendingVertical.tsx +17 -11
  252. package/src/widget/components/WaasFeeOptions.tsx +4 -42
  253. package/src/widget/components/WalletConnect.tsx +2 -5
  254. package/src/widget/components/WalletImage.tsx +6 -18
  255. package/src/widget/components/WalletList.tsx +1 -1
  256. package/src/widget/components/Withdraw.tsx +22 -23
  257. package/src/widget/hooks/useAddressWalletIcon.ts +2 -1
  258. package/src/widget/hooks/useAmountUsd.ts +1 -1
  259. package/src/widget/hooks/useCombinedHistory.ts +37 -93
  260. package/src/widget/hooks/useCustomTokenSearch.tsx +63 -33
  261. package/src/widget/hooks/useDefaultDestinationToken.tsx +2 -5
  262. package/src/widget/hooks/useDefaultOriginToken.tsx +2 -5
  263. package/src/widget/hooks/useFiatOnRampCurrencies.ts +1 -1
  264. package/src/widget/hooks/useGetIntent.ts +5 -4
  265. package/src/widget/hooks/useIntentReceiptBalances.ts +3 -3
  266. package/src/widget/hooks/useIntentTransactionHistory.ts +24 -47
  267. package/src/widget/hooks/useMeldTransactionHistory.ts +4 -2
  268. package/src/widget/hooks/useMeldTransactionStatus.ts +13 -11
  269. package/src/widget/hooks/useOnRampQuote.ts +3 -3
  270. package/src/widget/hooks/useOnRampTransactionStatus.ts +8 -6
  271. package/src/widget/hooks/useQuote.ts +56 -48
  272. package/src/widget/hooks/useSelectedFundMethod.tsx +14 -1
  273. package/src/widget/hooks/useSendForm.ts +52 -31
  274. package/src/widget/hooks/useTokenList.ts +209 -140
  275. package/src/widget/hooks/useTrailsSendTransaction.ts +1 -1
  276. package/src/widget/hooks/useViewManager.tsx +1 -0
  277. package/src/widget/providers/TrailsProvider.tsx +5 -0
  278. package/src/widget/styles.ts +1 -1
  279. package/src/widget/utils/createWagmiConfig.ts +7 -2
  280. package/src/widget/utils/fundMethodSwitchState.ts +2 -0
  281. package/src/widget/utils/historyFilters.ts +157 -0
  282. package/src/widget/utils/meldProviderUtils.ts +8 -2
  283. package/src/widget/utils/meshSupportedTokens.ts +28 -0
  284. package/src/widget/utils/onrampConfig.ts +15 -0
  285. package/src/widget/utils/statusLabel.ts +3 -0
  286. package/src/widget/utils/trailsOnrampConfig.ts +39 -0
  287. package/src/widget/widget.tsx +235 -185
  288. package/dist/onramp-client/trails-onramp.gen.d.ts +0 -570
  289. package/dist/onramp-client/trails-onramp.gen.d.ts.map +0 -1
  290. package/dist/prices.d.ts +0 -34
  291. package/dist/prices.d.ts.map +0 -1
  292. package/dist/useGasEstimation.d.ts +0 -34
  293. package/dist/useGasEstimation.d.ts.map +0 -1
  294. package/dist/widget/hooks/useCustomTokenFetch.d.ts +0 -19
  295. package/dist/widget/hooks/useCustomTokenFetch.d.ts.map +0 -1
  296. package/dist/widget/hooks/useTokenWithFreshBalance.d.ts +0 -18
  297. package/dist/widget/hooks/useTokenWithFreshBalance.d.ts.map +0 -1
  298. package/src/onramp-client/trails-onramp.gen.ts +0 -1320
  299. package/src/prices.ts +0 -528
  300. package/src/useGasEstimation.ts +0 -147
  301. package/src/widget/assets/Binance_Icon_Logo.svg +0 -14
  302. package/src/widget/assets/Bitfinex_Icon_Logo.svg +0 -5
  303. package/src/widget/assets/Coinbase_Icon_Logo.svg +0 -1
  304. package/src/widget/assets/WalletConnect-logo-blue-bg.svg +0 -11
  305. package/src/widget/assets/sequence-logo.svg +0 -15
  306. package/src/widget/hooks/useCustomTokenFetch.tsx +0 -74
  307. package/src/widget/hooks/useTokenWithFreshBalance.ts +0 -246
@@ -1,11 +0,0 @@
1
- <svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 1280" width="1280" height="1280">
2
- <title>New Project</title>
3
- <defs>
4
- <image width="1280" height="1280" id="img1" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAUAAQMAAAAiKm20AAAAAXNSR0IB2cksfwAAAANQTFRFO5n8m8y4zwAABH5JREFUeJztzjEBACAMwDDm3zQSduSAo1GQOZ+b14FNQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQXra8FAaK2qtUAAAAASUVORK5CYII="/>
5
- <image width="600" height="370" id="img2" href="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMzAwcHgiIGhlaWdodD0iMTg1cHgiIHZpZXdCb3g9IjAgMCAzMDAgMTg1IiB2ZXJzaW9uPSIxLjEiCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCgl4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+Cgk8IS0tIEdlbmVyYXRvcjogU2tldGNoIDQ5LjMgKDUxMTY3KSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KCTx0aXRsZT5XYWxsZXRDb25uZWN0PC90aXRsZT4KCTxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgoJPGRlZnM+PC9kZWZzPgoJPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CgkJPGcgaWQ9IndhbGxldGNvbm5lY3QtbG9nby1hbHQiIGZpbGw9IiNmZmZmZmYiIGZpbGwtcnVsZT0ibm9uemVybyI+CgkJCTxwYXRoIGQ9Ik02MS40Mzg1NDI5LDM2LjI1NjI2MTIgQzExMC4zNDk3NjcsLTExLjYzMTkwNTEgMTg5LjY1MDUzLC0xMS42MzE5MDUxIDIzOC41NjE3NTIsMzYuMjU2MjYxMiBMMjQ0LjQ0ODI5Nyw0Mi4wMTk2Nzg2IEMyNDYuODkzODU4LDQ0LjQxNDA4NjcgMjQ2Ljg5Mzg1OCw0OC4yOTYxODk4IDI0NC40NDgyOTcsNTAuNjkwNTk5IEwyMjQuMzExNjAyLDcwLjQwNjEwMiBDMjIzLjA4ODgyMSw3MS42MDMzMDcxIDIyMS4xMDYzMDIsNzEuNjAzMzA3MSAyMTkuODgzNTIxLDcwLjQwNjEwMiBMMjExLjc4MjkzNyw2Mi40NzQ5NTQxIEMxNzcuNjYxMjQ1LDI5LjA2Njk3MjQgMTIyLjMzOTA1MSwyOS4wNjY5NzI0IDg4LjIxNzM1ODIsNjIuNDc0OTU0MSBMNzkuNTQyMzAyLDcwLjk2ODU1OTIgQzc4LjMxOTUyMDQsNzIuMTY1NzYzMyA3Ni4zMzcwMDEsNzIuMTY1NzYzMyA3NS4xMTQyMjE0LDcwLjk2ODU1OTIgTDU0Ljk3NzUyNjUsNTEuMjUzMDU2MSBDNTIuNTMxOTY1Myw0OC44NTg2NDY5IDUyLjUzMTk2NTMsNDQuOTc2NTQzOSA1NC45Nzc1MjY1LDQyLjU4MjEzNTcgTDYxLjQzODU0MjksMzYuMjU2MjYxMiBaIE0yODAuMjA2MzM5LDc3LjAzMDAwNjEgTDI5OC4xMjgwMzYsOTQuNTc2OTAzMSBDMzAwLjU3MzU4NSw5Ni45NzEzIDMwMC41NzM1OTksMTAwLjg1MzM4IDI5OC4xMjgwNjcsMTAzLjI0Nzc5MyBMMjE3LjMxNzg5NiwxODIuMzY4OTI3IEMyMTQuODcyMzUyLDE4NC43NjMzNTMgMjEwLjkwNzMxNCwxODQuNzYzMzggMjA4LjQ2MTczNiwxODIuMzY4OTg5IEMyMDguNDYxNzI2LDE4Mi4zNjg5NzkgMjA4LjQ2MTcxNCwxODIuMzY4OTY3IDIwOC40NjE3MDQsMTgyLjM2ODk1NyBMMTUxLjEwNzU2MSwxMjYuMjE0Mzg1IEMxNTAuNDk2MTcxLDEyNS42MTU3ODMgMTQ5LjUwNDkxMSwxMjUuNjE1NzgzIDE0OC44OTM1MjEsMTI2LjIxNDM4NSBDMTQ4Ljg5MzUxNywxMjYuMjE0Mzg5IDE0OC44OTM1MTQsMTI2LjIxNDM5MyAxNDguODkzNTEsMTI2LjIxNDM5NiBMOTEuNTQwNTg4OCwxODIuMzY4OTI3IEM4OS4wOTUwNTIsMTg0Ljc2MzM1OSA4NS4xMzAwMTMzLDE4NC43NjMzOTkgODIuNjg0NDI3NiwxODIuMzY5MDE0IEM4Mi42ODQ0MTMzLDE4Mi4zNjkgODIuNjg0Mzk4LDE4Mi4zNjg5ODYgODIuNjg0MzgyNywxODIuMzY4OTcgTDEuODcxOTYzMjcsMTAzLjI0Njc4NSBDLTAuNTczNTk2OTM5LDEwMC44NTIzNzcgLTAuNTczNTk2OTM5LDk2Ljk3MDI3MzUgMS44NzE5NjMyNyw5NC41NzU4NjUzIEwxOS43OTM2OTI5LDc3LjAyODk5OCBDMjIuMjM5MjUzMSw3NC42MzQ1ODk4IDI2LjIwNDI5MTgsNzQuNjM0NTg5OCAyOC42NDk4NTMxLDc3LjAyODk5OCBMODYuMDA0ODMwNiwxMzMuMTg0MzU1IEM4Ni42MTYyMjE0LDEzMy43ODI5NTcgODcuNjA3NDc5NiwxMzMuNzgyOTU3IDg4LjIxODg3MDQsMTMzLjE4NDM1NSBDODguMjE4ODc5NiwxMzMuMTg0MzQ2IDg4LjIxODg4NzgsMTMzLjE4NDMzOCA4OC4yMTg4OTY5LDEzMy4xODQzMzEgTDE0NS41NzEsNzcuMDI4OTk4IEMxNDguMDE2NTA1LDc0LjYzNDUzNDcgMTUxLjk4MTU0NCw3NC42MzQ0NDQ5IDE1NC40MjcxNjEsNzcuMDI4Nzk4IEMxNTQuNDI3MTk1LDc3LjAyODgzMTYgMTU0LjQyNzIyOSw3Ny4wMjg4NjUzIDE1NC40MjcyNjIsNzcuMDI4ODk5IEwyMTEuNzgyMTY0LDEzMy4xODQzMzEgQzIxMi4zOTM1NTQsMTMzLjc4MjkzMiAyMTMuMzg0ODE0LDEzMy43ODI5MzIgMjEzLjk5NjIwNCwxMzMuMTg0MzMxIEwyNzEuMzUwMTc5LDc3LjAzMDAwNjEgQzI3My43OTU3NCw3NC42MzU1OTY5IDI3Ny43NjA3NzgsNzQuNjM1NTk2OSAyODAuMjA2MzM5LDc3LjAzMDAwNjEgWiIgaWQ9IldhbGxldENvbm5lY3QiPjwvcGF0aD4KCQk8L2c+Cgk8L2c+Cjwvc3ZnPg=="/>
6
- </defs>
7
- <style>
8
- </style>
9
- <use id="Background" href="#img1" x="0" y="0"/>
10
- <use id="WalletConnect-logo-white" href="#img2" transform="matrix(1.241,0,0,1.241,268,410)"/>
11
- </svg>
@@ -1,15 +0,0 @@
1
- <svg width="500" height="365" viewBox="0 0 500 365" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_29_10159)">
3
- <path d="M496.448 181.441C496.448 158.416 478.089 139.75 455.442 139.75C432.796 139.75 414.437 158.416 414.437 181.441C414.437 204.467 432.796 223.132 455.442 223.132C478.089 223.132 496.448 204.467 496.448 181.441Z" fill="#7C3AED"/>
4
- <path d="M82.0114 42.2523C82.0114 19.227 63.6525 0.561279 41.0057 0.561279C18.3589 0.561279 0 19.227 0 42.2523C0 65.2776 18.3589 83.9433 41.0057 83.9433C63.6525 83.9433 82.0114 65.2776 82.0114 42.2523Z" fill="#7C3AED"/>
5
- <path d="M82.0114 322.846C82.0114 299.821 63.6525 281.155 41.0057 281.155C18.3589 281.155 0 299.821 0 322.846C0 345.871 18.3589 364.537 41.0057 364.537C63.6525 364.537 82.0114 345.871 82.0114 322.846Z" fill="#7C3AED"/>
6
- <path d="M500 320.63C500 301.412 484.677 285.833 465.775 285.833H161.879C142.977 285.833 127.654 301.412 127.654 320.63C127.654 339.848 142.977 355.427 161.879 355.427H465.775C484.677 355.427 500 339.848 500 320.63Z" fill="#7C3AED"/>
7
- <path d="M368.794 181.441C368.794 162.223 353.471 146.644 334.569 146.644H34.2255C15.3234 146.644 0.000265708 162.223 0.000265708 181.441C0.000265708 200.659 15.3234 216.238 34.2255 216.238H334.569C353.471 216.238 368.794 200.659 368.794 181.441Z" fill="#7C3AED"/>
8
- <path d="M500 42.2523C500 23.0343 484.677 7.45507 465.775 7.45507H161.879C142.977 7.45507 127.654 23.0343 127.654 42.2523C127.654 61.4703 142.977 77.0495 161.879 77.0495H465.775C484.677 77.0495 500 61.4703 500 42.2523Z" fill="#7C3AED"/>
9
- </g>
10
- <defs>
11
- <clipPath id="clip0_29_10159">
12
- <rect width="500" height="363.98" fill="white" transform="translate(0 0.561279)"/>
13
- </clipPath>
14
- </defs>
15
- </svg>
@@ -1,74 +0,0 @@
1
- import { useQuery } from "@tanstack/react-query"
2
- import { isAddress } from "viem"
3
- import { getTokenInfo } from "../../tokens.js"
4
- import { logger } from "../../logger.js"
5
- import { MINUTE_MS, DAY_MS } from "../../utils/time.js"
6
- import { useTrails } from "../providers/TrailsProvider.js"
7
-
8
- interface UseCustomTokenFetchProps {
9
- address: string | null
10
- chainId: number | null
11
- enabled?: boolean
12
- }
13
-
14
- interface UseCustomTokenFetchReturn {
15
- tokenInfo: Awaited<ReturnType<typeof getTokenInfo>> | null
16
- isLoading: boolean
17
- error: Error | null
18
- isValidAddress: boolean
19
- }
20
-
21
- /**
22
- * Hook to fetch token information for a custom address
23
- * Reuses getTokenInfo from tokens.ts which handles caching and on-chain fetching
24
- */
25
- export function useCustomTokenFetch({
26
- address,
27
- chainId,
28
- enabled = true,
29
- }: UseCustomTokenFetchProps): UseCustomTokenFetchReturn {
30
- const isValidAddress = address ? isAddress(address) : false
31
- const shouldFetch = enabled && isValidAddress && chainId !== null
32
- const trailsConfig = useTrails()
33
-
34
- const {
35
- data: tokenInfo,
36
- isLoading,
37
- error,
38
- } = useQuery({
39
- queryKey: ["customToken", address?.toLowerCase(), chainId],
40
- queryFn: async () => {
41
- if (!address || !chainId) return null
42
-
43
- try {
44
- const info = await getTokenInfo(chainId, address, {
45
- trailsApiKey: trailsConfig.trailsApiKey,
46
- trailsApiUrl: trailsConfig.trailsApiUrl,
47
- sequenceMetadataUrl: trailsConfig.sequenceMetadataUrl,
48
- })
49
- if (info) {
50
- logger.console.log("[trails-sdk] Fetched custom token info:", info)
51
- }
52
- return info
53
- } catch (err) {
54
- logger.console.error(
55
- "[trails-sdk] Error fetching custom token info:",
56
- err,
57
- )
58
- throw err
59
- }
60
- },
61
- enabled: shouldFetch,
62
- staleTime: 5 * MINUTE_MS, // 5 minutes - token info doesn't change often
63
- gcTime: DAY_MS, // 24 hours
64
- retry: 1, // Only retry once for network errors
65
- refetchOnWindowFocus: false,
66
- })
67
-
68
- return {
69
- tokenInfo: tokenInfo ?? null,
70
- isLoading,
71
- error: error as Error | null,
72
- isValidAddress,
73
- }
74
- }
@@ -1,246 +0,0 @@
1
- import { useMemo } from "react"
2
- import type { Token } from "../../tokens.js"
3
- import {
4
- useTokenBalances,
5
- WIDGET_REFRESH_INTERVAL,
6
- } from "../../query/balance.hooks.js"
7
- import type { Address } from "viem"
8
- import { erc20Abi } from "viem"
9
- import { useBalance, useReadContract } from "wagmi"
10
- import { logger } from "../../index.js"
11
- import { isNativeToken, addressEqual } from "../../utils/address.js"
12
- import { formatBalanceFields } from "../../utils/format.js"
13
-
14
- /**
15
- * Reads the on-chain balance for a single token (native or ERC20).
16
- * This is the source of truth — it bypasses the indexer entirely.
17
- */
18
- function useOnChainBalance(
19
- token: Token | null | undefined,
20
- accountAddress?: string,
21
- ): { balance: string | undefined; isLoading: boolean } {
22
- const isNative = isNativeToken(token?.contractAddress)
23
- const enabled = !!token && !!accountAddress && !!token.chainId
24
-
25
- // Native token balance (ETH, MATIC, etc.)
26
- const { data: nativeData, isLoading: nativeLoading } = useBalance({
27
- address: accountAddress as Address | undefined,
28
- chainId: token?.chainId,
29
- query: {
30
- enabled: enabled && isNative,
31
- refetchInterval: WIDGET_REFRESH_INTERVAL,
32
- },
33
- })
34
-
35
- // ERC20 token balance
36
- const { data: erc20Data, isLoading: erc20Loading } = useReadContract({
37
- address: token?.contractAddress as Address | undefined,
38
- abi: erc20Abi,
39
- functionName: "balanceOf",
40
- args: accountAddress ? [accountAddress as Address] : undefined,
41
- chainId: token?.chainId,
42
- query: {
43
- enabled: enabled && !isNative,
44
- refetchInterval: WIDGET_REFRESH_INTERVAL,
45
- },
46
- })
47
-
48
- return useMemo(() => {
49
- if (!enabled) return { balance: undefined, isLoading: false }
50
-
51
- if (isNative) {
52
- return {
53
- balance: nativeData?.value?.toString(),
54
- isLoading: nativeLoading,
55
- }
56
- }
57
-
58
- return {
59
- balance: erc20Data?.toString(),
60
- isLoading: erc20Loading,
61
- }
62
- }, [
63
- enabled,
64
- isNative,
65
- nativeData?.value,
66
- nativeLoading,
67
- erc20Data,
68
- erc20Loading,
69
- ])
70
- }
71
-
72
- /**
73
- * Enriches a token with fresh balance data from the cache/API,
74
- * with an on-chain balance read as source of truth fallback.
75
- * This prevents displaying stale balance data from localStorage or props.
76
- */
77
- export function useTokenWithFreshBalance(
78
- token: Token | null | undefined,
79
- accountAddress?: string,
80
- disabled?: boolean,
81
- ): { token: Token | null | undefined; isLoadingBalance: boolean } {
82
- // Fetch fresh balance data for the account (indexer-backed, includes USD prices)
83
- const { sortedTokens, isLoadingBalances } = useTokenBalances(
84
- accountAddress as Address | null,
85
- undefined,
86
- { disabled: disabled, refetchInterval: WIDGET_REFRESH_INTERVAL },
87
- )
88
-
89
- // On-chain balance as source of truth for the selected token
90
- const { balance: onChainBalance, isLoading: isLoadingOnChain } =
91
- useOnChainBalance(disabled ? null : token, accountAddress)
92
-
93
- logger.console.log(
94
- "[trails-sdk] sortedTokens FROM useTokenWithFreshBalance",
95
- sortedTokens,
96
- )
97
-
98
- // Enrich token with fresh balance data
99
- const tokenWithFreshBalance = useMemo(() => {
100
- if (!token) return token
101
- if (!sortedTokens) return token // Return original if no fresh data available
102
-
103
- // Find matching token in indexer balance data
104
- const freshToken = sortedTokens.find(
105
- (t: Token) =>
106
- addressEqual(t.contractAddress, token.contractAddress) &&
107
- (t.chainId || 0) === (token.chainId || 0),
108
- )
109
-
110
- if (freshToken) {
111
- // If on-chain balance is lower than indexer balance, the indexer is stale —
112
- // use the on-chain value as source of truth for the balance fields.
113
- if (onChainBalance !== undefined && freshToken.balance) {
114
- try {
115
- const onChain = BigInt(onChainBalance)
116
- const indexed = BigInt(freshToken.balance)
117
- if (onChain < indexed) {
118
- const fields = formatBalanceFields(onChainBalance, token.decimals)
119
- return {
120
- ...token,
121
- ...fields,
122
- balanceUsd: freshToken.balanceUsd,
123
- balanceUsdFormatted: freshToken.balanceUsdFormatted,
124
- isSufficientBalance: freshToken.isSufficientBalance,
125
- priceUsd: freshToken.priceUsd,
126
- }
127
- }
128
- } catch {
129
- // Fall through to indexer balance
130
- }
131
- }
132
-
133
- // Merge token metadata with fresh balance data
134
- return {
135
- ...token,
136
- balance: freshToken.balance,
137
- balanceDisplay: freshToken.balanceDisplay,
138
- balanceLocaleDisplay: freshToken.balanceLocaleDisplay,
139
- balanceFormatted: freshToken.balanceFormatted,
140
- balanceUsd: freshToken.balanceUsd,
141
- balanceUsdFormatted: freshToken.balanceUsdFormatted,
142
- isSufficientBalance: freshToken.isSufficientBalance,
143
- priceUsd: freshToken.priceUsd,
144
- }
145
- }
146
-
147
- // Token not found in indexer data — use on-chain balance as source of truth
148
- if (onChainBalance !== undefined) {
149
- const fields = formatBalanceFields(onChainBalance, token.decimals)
150
- return {
151
- ...token,
152
- ...fields,
153
- balanceUsd: 0,
154
- balanceUsdFormatted: "$0.00",
155
- isSufficientBalance: false,
156
- priceUsd: token.priceUsd,
157
- }
158
- }
159
-
160
- // Token not found and no on-chain data yet — zero out if indexer has loaded
161
- if (sortedTokens.length > 0 || !isLoadingBalances) {
162
- return {
163
- ...token,
164
- balance: "0",
165
- balanceDisplay: "0",
166
- balanceLocaleDisplay: "0",
167
- balanceFormatted: "0",
168
- balanceUsd: 0,
169
- balanceUsdFormatted: "$0.00",
170
- isSufficientBalance: false,
171
- }
172
- }
173
-
174
- // Return original token while still loading
175
- return token
176
- }, [token, sortedTokens, isLoadingBalances, onChainBalance])
177
-
178
- return {
179
- token: tokenWithFreshBalance,
180
- isLoadingBalance: isLoadingBalances || isLoadingOnChain,
181
- }
182
- }
183
-
184
- /**
185
- * Enriches multiple tokens with fresh balance data
186
- */
187
- export function useTokensWithFreshBalance(
188
- tokens: Token[],
189
- accountAddress?: string,
190
- ): { tokens: Token[]; isLoadingBalance: boolean } {
191
- // Fetch fresh balance data for the account
192
- const { sortedTokens, isLoadingBalances } = useTokenBalances(
193
- accountAddress as Address | null,
194
- undefined,
195
- { refetchInterval: WIDGET_REFRESH_INTERVAL },
196
- )
197
-
198
- // Enrich tokens with fresh balance data
199
- const tokensWithFreshBalance = useMemo(() => {
200
- if (!sortedTokens || tokens.length === 0) {
201
- return tokens
202
- }
203
-
204
- return tokens.map((token) => {
205
- // Find matching token in balance data
206
- const freshToken = sortedTokens.find(
207
- (t: Token) =>
208
- addressEqual(t.contractAddress, token.contractAddress) &&
209
- (t.chainId || 0) === (token.chainId || 0),
210
- )
211
-
212
- if (freshToken) {
213
- // Merge token metadata with fresh balance data
214
- return {
215
- ...token,
216
- balance: freshToken.balance,
217
- balanceDisplay: freshToken.balanceDisplay,
218
- balanceLocaleDisplay: freshToken.balanceLocaleDisplay,
219
- balanceFormatted: freshToken.balanceFormatted,
220
- balanceUsd: freshToken.balanceUsd,
221
- balanceUsdFormatted: freshToken.balanceUsdFormatted,
222
- isSufficientBalance: freshToken.isSufficientBalance,
223
- priceUsd: freshToken.priceUsd,
224
- }
225
- }
226
-
227
- // Token not found — balance is likely zero (filtered out by useTokenBalances)
228
- if (sortedTokens.length > 0 || !isLoadingBalances) {
229
- return {
230
- ...token,
231
- balance: "0",
232
- balanceDisplay: "0",
233
- balanceLocaleDisplay: "0",
234
- balanceFormatted: "0",
235
- balanceUsd: 0,
236
- balanceUsdFormatted: "$0.00",
237
- isSufficientBalance: false,
238
- }
239
- }
240
-
241
- return token
242
- })
243
- }, [tokens, sortedTokens, isLoadingBalances])
244
-
245
- return { tokens: tokensWithFreshBalance, isLoadingBalance: isLoadingBalances }
246
- }