@lifi/widget 4.3.0 → 4.4.0

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 (361) hide show
  1. package/dist/esm/App.d.ts +0 -1
  2. package/dist/esm/App.d.ts.map +1 -1
  3. package/dist/esm/AppDrawer.d.ts +1 -1
  4. package/dist/esm/AppDrawer.d.ts.map +1 -1
  5. package/dist/esm/components/ActionRow/ActionRow.d.ts +13 -0
  6. package/dist/esm/components/ActionRow/ActionRow.d.ts.map +1 -0
  7. package/dist/esm/components/AmountInput/AmountInput.style.d.ts +9 -0
  8. package/dist/esm/components/AmountInput/AmountInput.style.d.ts.map +1 -0
  9. package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts +7 -0
  10. package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts.map +1 -0
  11. package/dist/esm/components/AmountInput/PriceFormHelperText.style.d.ts +7 -0
  12. package/dist/esm/components/AmountInput/PriceFormHelperText.style.d.ts.map +1 -0
  13. package/dist/esm/components/Avatar/Avatar.d.ts +12 -0
  14. package/dist/esm/components/Avatar/Avatar.d.ts.map +1 -0
  15. package/dist/esm/components/Avatar/TokenAvatar.d.ts +14 -0
  16. package/dist/esm/components/Avatar/TokenAvatar.d.ts.map +1 -0
  17. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.d.ts +6 -0
  18. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.d.ts.map +1 -0
  19. package/dist/esm/components/BaseTransactionButton/types.d.ts +14 -0
  20. package/dist/esm/components/BaseTransactionButton/types.d.ts.map +1 -0
  21. package/dist/esm/components/BottomSheet/types.d.ts +11 -0
  22. package/dist/esm/components/BottomSheet/types.d.ts.map +1 -0
  23. package/dist/esm/components/ButtonTertiary.d.ts +7 -0
  24. package/dist/esm/components/ButtonTertiary.d.ts.map +1 -0
  25. package/dist/esm/components/Card/Card.d.ts +12 -0
  26. package/dist/esm/components/Card/Card.d.ts.map +1 -0
  27. package/dist/esm/components/Card/CardIconButton.d.ts +7 -0
  28. package/dist/esm/components/Card/CardIconButton.d.ts.map +1 -0
  29. package/dist/esm/components/Card/CardTitle.d.ts +9 -0
  30. package/dist/esm/components/Card/CardTitle.d.ts.map +1 -0
  31. package/dist/esm/components/Card/InputCard.d.ts +7 -0
  32. package/dist/esm/components/Card/InputCard.d.ts.map +1 -0
  33. package/dist/esm/components/ChainSelect/ChainSelect.d.ts +7 -0
  34. package/dist/esm/components/ChainSelect/ChainSelect.d.ts.map +1 -0
  35. package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts +10 -0
  36. package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts.map +1 -0
  37. package/dist/esm/components/ContractComponent/ContractComponent.d.ts +7 -0
  38. package/dist/esm/components/ContractComponent/ContractComponent.d.ts.map +1 -0
  39. package/dist/esm/components/ContractComponent/ItemPrice.d.ts +0 -1
  40. package/dist/esm/components/ContractComponent/ItemPrice.d.ts.map +1 -1
  41. package/dist/esm/components/ContractComponent/NFT/NFT.d.ts +0 -1
  42. package/dist/esm/components/ContractComponent/NFT/NFT.d.ts.map +1 -1
  43. package/dist/esm/components/ContractComponent/NFT/NFTBase.d.ts +0 -1
  44. package/dist/esm/components/ContractComponent/NFT/NFTBase.d.ts.map +1 -1
  45. package/dist/esm/components/ContractComponent/NFT/types.d.ts +0 -1
  46. package/dist/esm/components/ContractComponent/NFT/types.d.ts.map +1 -1
  47. package/dist/esm/components/ExecutionStatusCard/ExecutionStatusCard.d.ts +21 -0
  48. package/dist/esm/components/ExecutionStatusCard/ExecutionStatusCard.d.ts.map +1 -0
  49. package/dist/esm/components/ExecutionStatusCard/StatusIcon.d.ts +16 -0
  50. package/dist/esm/components/ExecutionStatusCard/StatusIcon.d.ts.map +1 -0
  51. package/dist/esm/components/ExecutionStatusCard/iconKey.js +1 -0
  52. package/dist/esm/components/ExecutionStatusCard/iconKey.js.map +1 -1
  53. package/dist/esm/components/FeeBreakdownTooltip.d.ts +13 -0
  54. package/dist/esm/components/FeeBreakdownTooltip.d.ts.map +1 -0
  55. package/dist/esm/components/IconCircle/IconCircle.d.ts +11 -0
  56. package/dist/esm/components/IconCircle/IconCircle.d.ts.map +1 -0
  57. package/dist/esm/components/IconCircle/statusIcons.d.ts +6 -0
  58. package/dist/esm/components/IconCircle/statusIcons.d.ts.map +1 -0
  59. package/dist/esm/components/IconTypography.d.ts +7 -0
  60. package/dist/esm/components/IconTypography.d.ts.map +1 -0
  61. package/dist/esm/components/ListItem/ListItemButton.d.ts +7 -0
  62. package/dist/esm/components/ListItem/ListItemButton.d.ts.map +1 -0
  63. package/dist/esm/components/ListItemButton.d.ts +7 -0
  64. package/dist/esm/components/ListItemButton.d.ts.map +1 -0
  65. package/dist/esm/components/Messages/WarningMessages.d.ts +11 -0
  66. package/dist/esm/components/Messages/WarningMessages.d.ts.map +1 -0
  67. package/dist/esm/components/PageContainer.d.ts +12 -0
  68. package/dist/esm/components/PageContainer.d.ts.map +1 -0
  69. package/dist/esm/components/PoweredBy/PoweredBy.d.ts +5 -0
  70. package/dist/esm/components/PoweredBy/PoweredBy.d.ts.map +1 -0
  71. package/dist/esm/components/ProgressToNextUpdate.d.ts +10 -0
  72. package/dist/esm/components/ProgressToNextUpdate.d.ts.map +1 -0
  73. package/dist/esm/components/RouteCard/RouteCard.d.ts +7 -0
  74. package/dist/esm/components/RouteCard/RouteCard.d.ts.map +1 -0
  75. package/dist/esm/components/RouteCard/RouteCardSkeleton.d.ts +7 -0
  76. package/dist/esm/components/RouteCard/RouteCardSkeleton.d.ts.map +1 -0
  77. package/dist/esm/components/RouteCard/RouteDetails.d.ts +10 -0
  78. package/dist/esm/components/RouteCard/RouteDetails.d.ts.map +1 -0
  79. package/dist/esm/components/RouteCard/RouteDetails.style.d.ts +12 -0
  80. package/dist/esm/components/RouteCard/RouteDetails.style.d.ts.map +1 -0
  81. package/dist/esm/components/RouteCard/RouteNotFoundCard.d.ts +5 -0
  82. package/dist/esm/components/RouteCard/RouteNotFoundCard.d.ts.map +1 -0
  83. package/dist/esm/components/RouteCard/RouteTokens.d.ts +11 -0
  84. package/dist/esm/components/RouteCard/RouteTokens.d.ts.map +1 -0
  85. package/dist/esm/components/RouteCard/RouteTokens.js +2 -2
  86. package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
  87. package/dist/esm/components/RouteCard/types.d.ts +14 -0
  88. package/dist/esm/components/RouteCard/types.d.ts.map +1 -0
  89. package/dist/esm/components/Search/SearchInput.d.ts +17 -0
  90. package/dist/esm/components/Search/SearchInput.d.ts.map +1 -0
  91. package/dist/esm/components/SendToWallet/SendToWalletButton.d.ts +10 -0
  92. package/dist/esm/components/SendToWallet/SendToWalletButton.d.ts.map +1 -0
  93. package/dist/esm/components/SendToWallet/SendToWalletButton.js +15 -6
  94. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  95. package/dist/esm/components/Skeleton/WidgetSkeleton.d.ts +1 -4
  96. package/dist/esm/components/Skeleton/WidgetSkeleton.d.ts.map +1 -1
  97. package/dist/esm/components/StepActions/SentToWalletRow.d.ts +9 -0
  98. package/dist/esm/components/StepActions/SentToWalletRow.d.ts.map +1 -0
  99. package/dist/esm/components/StepActions/StepActionRow.style.d.ts +7 -0
  100. package/dist/esm/components/StepActions/StepActionRow.style.d.ts.map +1 -0
  101. package/dist/esm/components/StepActions/StepActionsList.d.ts +12 -0
  102. package/dist/esm/components/StepActions/StepActionsList.d.ts.map +1 -0
  103. package/dist/esm/components/StepActions/executionRows.d.ts +26 -0
  104. package/dist/esm/components/StepActions/executionRows.d.ts.map +1 -0
  105. package/dist/esm/components/Token/Token.d.ts +17 -0
  106. package/dist/esm/components/Token/Token.d.ts.map +1 -0
  107. package/dist/esm/components/TokenList/TokenNotFound.d.ts +6 -0
  108. package/dist/esm/components/TokenList/TokenNotFound.d.ts.map +1 -0
  109. package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts +7 -0
  110. package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts.map +1 -0
  111. package/dist/esm/components/TokenList/types.d.ts +20 -0
  112. package/dist/esm/components/TokenList/types.d.ts.map +1 -0
  113. package/dist/esm/components/TokenList/useTokenSelect.d.ts +6 -0
  114. package/dist/esm/components/TokenList/useTokenSelect.d.ts.map +1 -0
  115. package/dist/esm/components/TokenRate/TokenRate.d.ts +10 -0
  116. package/dist/esm/components/TokenRate/TokenRate.d.ts.map +1 -0
  117. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js +1 -0
  118. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  119. package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js +9 -0
  120. package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js.map +1 -1
  121. package/dist/esm/components/TransactionCard/TransactionCard.style.d.ts +8 -0
  122. package/dist/esm/components/TransactionCard/TransactionCard.style.d.ts.map +1 -0
  123. package/dist/esm/config/constants.d.ts.map +1 -1
  124. package/dist/esm/config/version.d.ts +1 -1
  125. package/dist/esm/config/version.d.ts.map +1 -1
  126. package/dist/esm/config/version.js +1 -1
  127. package/dist/esm/config/version.js.map +1 -1
  128. package/dist/esm/hooks/useAddressActivity.d.ts +11 -0
  129. package/dist/esm/hooks/useAddressActivity.d.ts.map +1 -0
  130. package/dist/esm/hooks/useAddressValidation.d.ts +28 -0
  131. package/dist/esm/hooks/useAddressValidation.d.ts.map +1 -0
  132. package/dist/esm/hooks/useAddressValidation.js +6 -1
  133. package/dist/esm/hooks/useAddressValidation.js.map +1 -1
  134. package/dist/esm/hooks/useAvailableChains.d.ts +12 -0
  135. package/dist/esm/hooks/useAvailableChains.d.ts.map +1 -0
  136. package/dist/esm/hooks/useChain.d.ts +10 -0
  137. package/dist/esm/hooks/useChain.d.ts.map +1 -0
  138. package/dist/esm/hooks/useContactSupport.d.ts +5 -0
  139. package/dist/esm/hooks/useContactSupport.d.ts.map +1 -0
  140. package/dist/esm/hooks/useDebouncedWatch.d.ts +6 -0
  141. package/dist/esm/hooks/useDebouncedWatch.d.ts.map +1 -0
  142. package/dist/esm/hooks/useDisplayedTokens.js +48 -0
  143. package/dist/esm/hooks/useDisplayedTokens.js.map +1 -0
  144. package/dist/esm/hooks/useExplorer.d.ts +14 -0
  145. package/dist/esm/hooks/useExplorer.d.ts.map +1 -0
  146. package/dist/esm/hooks/useHeader.d.ts +6 -0
  147. package/dist/esm/hooks/useHeader.d.ts.map +1 -0
  148. package/dist/esm/hooks/useListHeight.d.ts +12 -0
  149. package/dist/esm/hooks/useListHeight.d.ts.map +1 -0
  150. package/dist/esm/hooks/useListHeight.js +1 -0
  151. package/dist/esm/hooks/useListHeight.js.map +1 -1
  152. package/dist/esm/hooks/useNavigateBack.d.ts +5 -0
  153. package/dist/esm/hooks/useNavigateBack.d.ts.map +1 -0
  154. package/dist/esm/hooks/usePacedRouteExecution.js +1 -0
  155. package/dist/esm/hooks/usePacedRouteExecution.js.map +1 -1
  156. package/dist/esm/hooks/useRouteExecution.d.ts +18 -0
  157. package/dist/esm/hooks/useRouteExecution.d.ts.map +1 -0
  158. package/dist/esm/hooks/useRouteExecutionMessage.d.ts +10 -0
  159. package/dist/esm/hooks/useRouteExecutionMessage.d.ts.map +1 -0
  160. package/dist/esm/hooks/useRouteExecutionMessage.js +1 -0
  161. package/dist/esm/hooks/useRouteExecutionMessage.js.map +1 -1
  162. package/dist/esm/hooks/useRoutes.d.ts +32 -0
  163. package/dist/esm/hooks/useRoutes.d.ts.map +1 -0
  164. package/dist/esm/hooks/useRoutes.js +12 -8
  165. package/dist/esm/hooks/useRoutes.js.map +1 -1
  166. package/dist/esm/hooks/useToAddressRequirements.d.ts +16 -0
  167. package/dist/esm/hooks/useToAddressRequirements.d.ts.map +1 -0
  168. package/dist/esm/hooks/useToken.d.ts +9 -0
  169. package/dist/esm/hooks/useToken.d.ts.map +1 -0
  170. package/dist/esm/hooks/useTokenAddressBalance.d.ts +11 -0
  171. package/dist/esm/hooks/useTokenAddressBalance.d.ts.map +1 -0
  172. package/dist/esm/hooks/useTokenBalances.d.ts +14 -0
  173. package/dist/esm/hooks/useTokenBalances.d.ts.map +1 -0
  174. package/dist/esm/hooks/useTokenBalances.js +5 -45
  175. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  176. package/dist/esm/hooks/useTokenList.d.ts +16 -0
  177. package/dist/esm/hooks/useTokenList.d.ts.map +1 -0
  178. package/dist/esm/hooks/useTokenList.js +31 -0
  179. package/dist/esm/hooks/useTokenList.js.map +1 -0
  180. package/dist/esm/hooks/useTools.d.ts +8 -0
  181. package/dist/esm/hooks/useTools.d.ts.map +1 -0
  182. package/dist/esm/hooks/useTransactionDetails.js +1 -3
  183. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  184. package/dist/esm/hooks/useTransactionList.js +1 -0
  185. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  186. package/dist/esm/hooks/useWidgetChains.d.ts +0 -1
  187. package/dist/esm/hooks/useWidgetChains.d.ts.map +1 -1
  188. package/dist/esm/hooks/useWidgetEvents.d.ts +0 -1
  189. package/dist/esm/hooks/useWidgetEvents.d.ts.map +1 -1
  190. package/dist/esm/i18n/en.json +321 -0
  191. package/dist/esm/index.d.ts +1 -0
  192. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js +1 -0
  193. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  194. package/dist/esm/pages/LanguagesPage.js +19 -7
  195. package/dist/esm/pages/LanguagesPage.js.map +1 -1
  196. package/dist/esm/pages/MainPage/MainWarningMessages.d.ts +10 -0
  197. package/dist/esm/pages/MainPage/MainWarningMessages.d.ts.map +1 -0
  198. package/dist/esm/pages/RoutesPage/RoutesPage.js +28 -16
  199. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  200. package/dist/esm/pages/RoutesPage/RoutesPage.style.d.ts +7 -0
  201. package/dist/esm/pages/RoutesPage/RoutesPage.style.d.ts.map +1 -0
  202. package/dist/esm/pages/SelectChainPage/SelectChainPage.d.ts +6 -0
  203. package/dist/esm/pages/SelectChainPage/SelectChainPage.d.ts.map +1 -0
  204. package/dist/esm/pages/SelectChainPage/types.d.ts +8 -0
  205. package/dist/esm/pages/SelectChainPage/types.d.ts.map +1 -0
  206. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.d.ts +10 -0
  207. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.d.ts.map +1 -0
  208. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.d.ts +9 -0
  209. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.d.ts.map +1 -0
  210. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.d.ts +14 -0
  211. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.d.ts.map +1 -0
  212. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.d.ts +19 -0
  213. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.d.ts.map +1 -0
  214. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.d.ts +12 -0
  215. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.d.ts.map +1 -0
  216. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.js +1 -0
  217. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.js.map +1 -1
  218. package/dist/esm/pages/TransactionPage/RouteTracker.d.ts +11 -0
  219. package/dist/esm/pages/TransactionPage/RouteTracker.d.ts.map +1 -0
  220. package/dist/esm/pages/TransactionPage/StartTransactionButton.d.ts +6 -0
  221. package/dist/esm/pages/TransactionPage/StartTransactionButton.d.ts.map +1 -0
  222. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.d.ts +15 -0
  223. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.d.ts.map +1 -0
  224. package/dist/esm/pages/TransactionPage/TransactionContent.js +1 -0
  225. package/dist/esm/pages/TransactionPage/TransactionContent.js.map +1 -1
  226. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.d.ts +12 -0
  227. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.d.ts.map +1 -0
  228. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.js +1 -0
  229. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.js.map +1 -1
  230. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js +1 -0
  231. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js.map +1 -1
  232. package/dist/esm/pages/TransactionPage/TransactionPage.js +1 -0
  233. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  234. package/dist/esm/pages/TransactionPage/types.d.ts +9 -0
  235. package/dist/esm/pages/TransactionPage/types.d.ts.map +1 -0
  236. package/dist/esm/pages/TransactionPage/utils.d.ts +6 -0
  237. package/dist/esm/pages/TransactionPage/utils.d.ts.map +1 -0
  238. package/dist/esm/providers/I18nProvider/I18nProvider.d.ts +5 -0
  239. package/dist/esm/providers/I18nProvider/I18nProvider.d.ts.map +1 -0
  240. package/dist/esm/providers/I18nProvider/types.d.ts +2 -3
  241. package/dist/esm/providers/I18nProvider/types.d.ts.map +1 -1
  242. package/dist/esm/providers/QueryClientProvider.d.ts +6 -0
  243. package/dist/esm/providers/QueryClientProvider.d.ts.map +1 -0
  244. package/dist/esm/providers/SDKClientProvider.d.ts +8 -0
  245. package/dist/esm/providers/SDKClientProvider.d.ts.map +1 -0
  246. package/dist/esm/providers/WalletProvider/WalletProvider.d.ts +10 -0
  247. package/dist/esm/providers/WalletProvider/WalletProvider.d.ts.map +1 -0
  248. package/dist/esm/providers/WalletProvider/WalletProvider.js +8 -3
  249. package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
  250. package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts +8 -0
  251. package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts.map +1 -0
  252. package/dist/esm/providers/WidgetProvider/types.d.ts +11 -0
  253. package/dist/esm/providers/WidgetProvider/types.d.ts.map +1 -0
  254. package/dist/esm/shared.d.ts +107 -0
  255. package/dist/esm/shared.js +105 -0
  256. package/dist/esm/stores/StoreProvider.d.ts +7 -0
  257. package/dist/esm/stores/StoreProvider.d.ts.map +1 -0
  258. package/dist/esm/stores/bookmarks/BookmarkStore.d.ts +7 -0
  259. package/dist/esm/stores/bookmarks/BookmarkStore.d.ts.map +1 -0
  260. package/dist/esm/stores/bookmarks/types.d.ts +0 -1
  261. package/dist/esm/stores/bookmarks/types.d.ts.map +1 -1
  262. package/dist/esm/stores/chains/ChainOrderStore.d.ts +8 -0
  263. package/dist/esm/stores/chains/ChainOrderStore.d.ts.map +1 -0
  264. package/dist/esm/stores/chains/types.d.ts +27 -0
  265. package/dist/esm/stores/chains/types.d.ts.map +1 -0
  266. package/dist/esm/stores/form/createFormStore.js +1 -0
  267. package/dist/esm/stores/form/createFormStore.js.map +1 -1
  268. package/dist/esm/stores/form/types.d.ts +7 -7
  269. package/dist/esm/stores/form/types.d.ts.map +1 -1
  270. package/dist/esm/stores/form/types.js.map +1 -1
  271. package/dist/esm/stores/form/useFieldActions.d.ts +0 -1
  272. package/dist/esm/stores/form/useFieldActions.d.ts.map +1 -1
  273. package/dist/esm/stores/form/useFieldValues.d.ts +0 -1
  274. package/dist/esm/stores/form/useFieldValues.d.ts.map +1 -1
  275. package/dist/esm/stores/header/types.d.ts +20 -0
  276. package/dist/esm/stores/header/types.d.ts.map +1 -0
  277. package/dist/esm/stores/header/useHeaderStore.d.ts +8 -0
  278. package/dist/esm/stores/header/useHeaderStore.d.ts.map +1 -0
  279. package/dist/esm/stores/inputMode/useInputModeStore.d.ts +13 -0
  280. package/dist/esm/stores/inputMode/useInputModeStore.d.ts.map +1 -0
  281. package/dist/esm/stores/routes/RouteExecutionStore.d.ts +9 -0
  282. package/dist/esm/stores/routes/RouteExecutionStore.d.ts.map +1 -0
  283. package/dist/esm/stores/routes/createRouteExecutionStore.js +1 -0
  284. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  285. package/dist/esm/stores/routes/types.d.ts +24 -0
  286. package/dist/esm/stores/routes/types.d.ts.map +1 -0
  287. package/dist/esm/stores/routes/types.js +14 -0
  288. package/dist/esm/stores/routes/types.js.map +1 -0
  289. package/dist/esm/stores/routes/useRouteExecutionIndicator.js +1 -0
  290. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  291. package/dist/esm/stores/routes/utils.d.ts +9 -0
  292. package/dist/esm/stores/routes/utils.d.ts.map +1 -0
  293. package/dist/esm/stores/settings/SettingsStore.d.ts +8 -0
  294. package/dist/esm/stores/settings/SettingsStore.d.ts.map +1 -0
  295. package/dist/esm/stores/settings/types.d.ts +5 -2
  296. package/dist/esm/stores/settings/types.d.ts.map +1 -1
  297. package/dist/esm/stores/types.d.ts +9 -0
  298. package/dist/esm/stores/types.d.ts.map +1 -0
  299. package/dist/esm/themes/azureLight.d.ts +0 -1
  300. package/dist/esm/themes/azureLight.d.ts.map +1 -1
  301. package/dist/esm/themes/createTheme.d.ts +0 -1
  302. package/dist/esm/themes/createTheme.d.ts.map +1 -1
  303. package/dist/esm/themes/jumper.d.ts +0 -1
  304. package/dist/esm/themes/jumper.d.ts.map +1 -1
  305. package/dist/esm/themes/palettes.d.ts.map +1 -1
  306. package/dist/esm/themes/types.d.ts +0 -1
  307. package/dist/esm/themes/types.d.ts.map +1 -1
  308. package/dist/esm/themes/watermelonLight.d.ts +0 -1
  309. package/dist/esm/themes/watermelonLight.d.ts.map +1 -1
  310. package/dist/esm/themes/windows95.d.ts +0 -1
  311. package/dist/esm/themes/windows95.d.ts.map +1 -1
  312. package/dist/esm/types/events.d.ts +4 -3
  313. package/dist/esm/types/events.d.ts.map +1 -1
  314. package/dist/esm/types/token.d.ts +1 -2
  315. package/dist/esm/types/token.d.ts.map +1 -1
  316. package/dist/esm/types/widget.d.ts +72 -73
  317. package/dist/esm/types/widget.d.ts.map +1 -1
  318. package/dist/esm/utils/compactNumberFormatter.d.ts +8 -8
  319. package/dist/esm/utils/compactNumberFormatter.d.ts.map +1 -1
  320. package/dist/esm/utils/converters.d.ts +7 -0
  321. package/dist/esm/utils/converters.d.ts.map +1 -0
  322. package/dist/esm/utils/currencyExtendedFormatter.d.ts.map +1 -1
  323. package/dist/esm/utils/elements.d.ts +11 -0
  324. package/dist/esm/utils/elements.d.ts.map +1 -0
  325. package/dist/esm/utils/elements.js +8 -1
  326. package/dist/esm/utils/elements.js.map +1 -1
  327. package/dist/esm/utils/enum.d.ts +5 -0
  328. package/dist/esm/utils/enum.d.ts.map +1 -0
  329. package/dist/esm/utils/fees.d.ts +17 -0
  330. package/dist/esm/utils/fees.d.ts.map +1 -0
  331. package/dist/esm/utils/format.d.ts +14 -14
  332. package/dist/esm/utils/format.d.ts.map +1 -1
  333. package/dist/esm/utils/getPriceImpact.d.ts +1 -7
  334. package/dist/esm/utils/getPriceImpact.d.ts.map +1 -1
  335. package/dist/esm/utils/input.d.ts +5 -0
  336. package/dist/esm/utils/input.d.ts.map +1 -0
  337. package/dist/esm/utils/navigationRoutes.d.ts.map +1 -1
  338. package/dist/esm/utils/percentFormatter.d.ts +5 -5
  339. package/dist/esm/utils/percentFormatter.d.ts.map +1 -1
  340. package/dist/esm/utils/tokenList.js +3 -3
  341. package/dist/esm/utils/tokenList.js.map +1 -1
  342. package/dist/esm/utils/wallet.d.ts +5 -0
  343. package/dist/esm/utils/wallet.d.ts.map +1 -0
  344. package/package.json +28 -20
  345. package/src/components/RouteCard/RouteTokens.tsx +3 -2
  346. package/src/components/SendToWallet/SendToWalletButton.tsx +27 -5
  347. package/src/components/TransactionCard/ActiveTransactionCard.style.tsx +11 -0
  348. package/src/config/version.ts +1 -1
  349. package/src/hooks/useDisplayedTokens.ts +70 -0
  350. package/src/hooks/useListHeight.ts +4 -0
  351. package/src/hooks/useRoutes.ts +360 -325
  352. package/src/hooks/useTokenBalances.ts +8 -53
  353. package/src/hooks/useTokenList.ts +59 -0
  354. package/src/hooks/useTransactionDetails.ts +1 -3
  355. package/src/pages/LanguagesPage.tsx +36 -23
  356. package/src/pages/RoutesPage/RoutesPage.tsx +38 -27
  357. package/src/providers/WalletProvider/WalletProvider.tsx +15 -3
  358. package/src/shared.ts +191 -0
  359. package/src/stores/form/createFormStore.ts +1 -0
  360. package/src/stores/form/types.ts +1 -0
  361. package/src/utils/tokenList.ts +3 -3
@@ -13,7 +13,11 @@ import {
13
13
  useChainTypeFromAddress,
14
14
  useEthereumContext,
15
15
  } from '@lifi/widget-provider'
16
- import { useQuery, useQueryClient } from '@tanstack/react-query'
16
+ import {
17
+ keepPreviousData,
18
+ useQuery,
19
+ useQueryClient,
20
+ } from '@tanstack/react-query'
17
21
  import { useCallback, useMemo } from 'react'
18
22
  import { useSDKClient } from '../providers/SDKClientProvider.js'
19
23
  import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'
@@ -39,15 +43,28 @@ const refetchTime = 60_000
39
43
 
40
44
  interface RoutesProps {
41
45
  observableRoute?: Route
46
+ /**
47
+ * Address to quote from when no wallet is connected. Treated as a non-signing
48
+ * placeholder, so signer-dependent (relayer/permit2) quotes are skipped.
49
+ */
50
+ quoteFromAddress?: string
51
+ /**
52
+ * Keep showing the previous result while a new query (e.g. a token/amount
53
+ * change) is fetching, instead of clearing to a loading state.
54
+ */
55
+ keepPreviousData?: boolean
42
56
  }
43
57
 
44
58
  export const useRoutes = ({
45
59
  observableRoute,
60
+ quoteFromAddress,
61
+ keepPreviousData: keepPreviousDataEnabled,
46
62
  }: RoutesProps = {}): {
47
63
  routes: Route[] | undefined
48
64
  isLoading: boolean
49
65
  isFetching: boolean
50
66
  isFetched: boolean
67
+ isError: boolean
51
68
  dataUpdatedAt: number
52
69
  refetchTime: number
53
70
  refetch: () => void
@@ -136,8 +153,18 @@ export const useRoutes = ({
136
153
  ? Number(fromTokenAmount) > 0 && Number(toTokenAmount) > 0
137
154
  : Number(fromTokenAmount) > 0 || Number(toTokenAmount) > 0
138
155
 
139
- const contractCallQuoteEnabled: boolean =
140
- mode === 'custom' ? Boolean(contractCalls && account.address) : true
156
+ const customType = mode === 'custom' ? modeOptions?.custom?.type : undefined
157
+ const isContractCallQuote =
158
+ mode === 'custom' && Boolean(contractCalls?.length)
159
+ // A contract-call quote needs a connected wallet to resolve fromAddress.
160
+ // Deposit funding quotes a plain route with no contract calls and no wallet
161
+ // (a placeholder fromAddress arrives via quoteFromAddress); every other custom
162
+ // flow stays gated on a real wallet, as before.
163
+ const contractCallQuoteEnabled: boolean = isContractCallQuote
164
+ ? Boolean(account.address)
165
+ : mode !== 'custom' || customType === 'deposit'
166
+
167
+ const effectiveFromAddress = account.address ?? quoteFromAddress
141
168
 
142
169
  // When we bridge between ecosystems we need to be sure toAddress is set and has the same chainType as toChain
143
170
  // If toAddress is set, it must have the same chainType as toChain
@@ -178,7 +205,7 @@ export const useRoutes = ({
178
205
  () =>
179
206
  [
180
207
  getQueryKey('routes', keyPrefix),
181
- account.address,
208
+ effectiveFromAddress,
182
209
  fromChain?.id as number,
183
210
  fromToken?.address as string,
184
211
  fromTokenAmount,
@@ -208,7 +235,7 @@ export const useRoutes = ({
208
235
  ] as const,
209
236
  [
210
237
  keyPrefix,
211
- account.address,
238
+ effectiveFromAddress,
212
239
  fromChain?.id,
213
240
  fromToken?.address,
214
241
  fromTokenAmount,
@@ -242,355 +269,362 @@ export const useRoutes = ({
242
269
  const { getIntermediateRoutes, setIntermediateRoutes } =
243
270
  useIntermediateRoutesStore()
244
271
 
245
- const { data, isLoading, isFetching, isFetched, dataUpdatedAt, refetch } =
246
- useQuery({
247
- queryKey,
248
- queryFn: async ({
249
- queryKey: [
250
- _,
251
- fromAddress,
252
- fromChainId,
253
- fromTokenAddress,
254
- fromTokenAmount,
255
- toAddress,
256
- toChainId,
257
- toTokenAddress,
258
- toTokenAmount,
259
- validUntilDuration,
260
- partiallyFillable,
261
- contractCalls,
262
- slippage = defaultSlippage,
263
- swapOnly,
264
- disabledBridges,
265
- disabledExchanges,
266
- allowedBridges,
267
- allowedExchanges,
268
- routePriority,
269
- mode,
270
- allowSwitchChain,
271
- enabledRefuel,
272
- gasRecommendationFromAmount,
273
- configuredFee,
274
- disableMessageSigning,
275
- isBatchingSupported,
276
- isPrivate,
277
- // _observableRouteId must be the last element in the query key
278
- _observableRouteId,
279
- ],
280
- signal,
281
- }) => {
282
- const fromAmount = parseUnits(fromTokenAmount, fromToken!.decimals)
283
- const toAmount = toTokenAmount
284
- ? parseUnits(toTokenAmount, toToken!.decimals)
285
- : undefined
286
- const formattedSlippage = slippage
287
- ? Number.parseFloat(slippage) / 100
288
- : defaultSlippage
289
-
290
- const allowBridges = swapOnly
291
- ? []
292
- : observableRoute
293
- ? observableRoute.steps.flatMap((step) =>
294
- step.includedSteps.reduce((toolKeys, includedStep) => {
295
- if (includedStep.type === 'cross') {
296
- toolKeys.push(includedStep.toolDetails.key)
297
- }
298
- return toolKeys
299
- }, [] as string[])
300
- )
301
- : allowedBridges
302
- const allowExchanges = observableRoute
272
+ const {
273
+ data,
274
+ isLoading,
275
+ isFetching,
276
+ isFetched,
277
+ isError,
278
+ dataUpdatedAt,
279
+ refetch,
280
+ } = useQuery({
281
+ queryKey,
282
+ queryFn: async ({
283
+ queryKey: [
284
+ _,
285
+ fromAddress,
286
+ fromChainId,
287
+ fromTokenAddress,
288
+ fromTokenAmount,
289
+ toAddress,
290
+ toChainId,
291
+ toTokenAddress,
292
+ toTokenAmount,
293
+ validUntilDuration,
294
+ partiallyFillable,
295
+ contractCalls,
296
+ slippage = defaultSlippage,
297
+ swapOnly,
298
+ disabledBridges,
299
+ disabledExchanges,
300
+ allowedBridges,
301
+ allowedExchanges,
302
+ routePriority,
303
+ mode,
304
+ allowSwitchChain,
305
+ enabledRefuel,
306
+ gasRecommendationFromAmount,
307
+ configuredFee,
308
+ disableMessageSigning,
309
+ isBatchingSupported,
310
+ isPrivate,
311
+ // _observableRouteId must be the last element in the query key
312
+ _observableRouteId,
313
+ ],
314
+ signal,
315
+ }) => {
316
+ const fromAmount = parseUnits(fromTokenAmount, fromToken!.decimals)
317
+ const toAmount = toTokenAmount
318
+ ? parseUnits(toTokenAmount, toToken!.decimals)
319
+ : undefined
320
+ const formattedSlippage = slippage
321
+ ? Number.parseFloat(slippage) / 100
322
+ : defaultSlippage
323
+
324
+ const allowBridges = swapOnly
325
+ ? []
326
+ : observableRoute
303
327
  ? observableRoute.steps.flatMap((step) =>
304
328
  step.includedSteps.reduce((toolKeys, includedStep) => {
305
- if (includedStep.type === 'swap') {
329
+ if (includedStep.type === 'cross') {
306
330
  toolKeys.push(includedStep.toolDetails.key)
307
331
  }
308
332
  return toolKeys
309
333
  }, [] as string[])
310
334
  )
311
- : allowedExchanges
312
-
313
- const calculatedFee = await feeConfig?.calculateFee?.({
314
- fromChain: fromChain!,
315
- toChain: toChain!,
316
- fromToken: fromToken!,
317
- toToken: toToken!,
318
- fromAddress,
319
- toAddress,
320
- fromAmount,
321
- toAmount,
322
- slippage: formattedSlippage,
323
- })
324
-
325
- if (mode === 'custom' && contractCalls && toAmount) {
326
- const contractCallQuote = await getContractCallsQuote(
327
- sdkClient,
328
- {
329
- // Contract calls are enabled only when fromAddress is set
330
- fromAddress: fromAddress as string,
331
- fromChain: fromChainId,
332
- fromToken: fromTokenAddress,
333
- toAmount: toAmount.toString(),
334
- toChain: toChainId,
335
- toToken: toTokenAddress,
336
- contractCalls,
337
- denyBridges: disabledBridges.length ? disabledBridges : undefined,
338
- denyExchanges: disabledExchanges.length
339
- ? disabledExchanges
340
- : undefined,
341
- allowBridges,
342
- allowExchanges,
343
- toFallbackAddress: toAddress,
344
- slippage: formattedSlippage,
345
- fee: calculatedFee || configuredFee,
346
- },
347
- { signal }
335
+ : allowedBridges
336
+ const allowExchanges = observableRoute
337
+ ? observableRoute.steps.flatMap((step) =>
338
+ step.includedSteps.reduce((toolKeys, includedStep) => {
339
+ if (includedStep.type === 'swap') {
340
+ toolKeys.push(includedStep.toolDetails.key)
341
+ }
342
+ return toolKeys
343
+ }, [] as string[])
348
344
  )
345
+ : allowedExchanges
346
+
347
+ const calculatedFee = await feeConfig?.calculateFee?.({
348
+ fromChain: fromChain!,
349
+ toChain: toChain!,
350
+ fromToken: fromToken!,
351
+ toToken: toToken!,
352
+ fromAddress,
353
+ toAddress,
354
+ fromAmount,
355
+ toAmount,
356
+ slippage: formattedSlippage,
357
+ })
349
358
 
350
- contractCallQuote.action.toToken = toToken!
351
-
352
- const customStep =
353
- mode === 'custom'
354
- ? contractCallQuote.includedSteps?.find(
355
- (step) => step.type === 'custom'
356
- )
357
- : undefined
358
-
359
- if (customStep && contractTool) {
360
- const toolDetails = {
361
- key: contractTool.name,
362
- name: contractTool.name,
363
- logoURI: contractTool.logoURI,
364
- }
365
- customStep.toolDetails = toolDetails
366
- contractCallQuote.toolDetails = toolDetails
367
- }
359
+ if (mode === 'custom' && contractCalls?.length && toAmount) {
360
+ const contractCallQuote = await getContractCallsQuote(
361
+ sdkClient,
362
+ {
363
+ // Contract calls are enabled only when fromAddress is set
364
+ fromAddress: fromAddress as string,
365
+ fromChain: fromChainId,
366
+ fromToken: fromTokenAddress,
367
+ toAmount: toAmount.toString(),
368
+ toChain: toChainId,
369
+ toToken: toTokenAddress,
370
+ contractCalls,
371
+ denyBridges: disabledBridges.length ? disabledBridges : undefined,
372
+ denyExchanges: disabledExchanges.length
373
+ ? disabledExchanges
374
+ : undefined,
375
+ allowBridges,
376
+ allowExchanges,
377
+ toFallbackAddress: toAddress,
378
+ slippage: formattedSlippage,
379
+ fee: calculatedFee || configuredFee,
380
+ },
381
+ { signal }
382
+ )
368
383
 
369
- const route: Route = convertQuoteToRoute(contractCallQuote)
384
+ contractCallQuote.action.toToken = toToken!
370
385
 
371
- return [route]
372
- }
386
+ const customStep =
387
+ mode === 'custom'
388
+ ? contractCallQuote.includedSteps?.find(
389
+ (step) => step.type === 'custom'
390
+ )
391
+ : undefined
373
392
 
374
- // Prevent sending a request for the same chain token combinations.
375
- // Exception: proceed anyway if mode is custom and modeOptions custom type is deposit
376
- if (
377
- fromChainId === toChainId &&
378
- fromTokenAddress === toTokenAddress &&
379
- !(mode === 'custom' && modeOptions?.custom?.type === 'deposit')
380
- ) {
381
- return
393
+ if (customStep && contractTool) {
394
+ const toolDetails = {
395
+ key: contractTool.name,
396
+ name: contractTool.name,
397
+ logoURI: contractTool.logoURI,
398
+ }
399
+ customStep.toolDetails = toolDetails
400
+ contractCallQuote.toolDetails = toolDetails
382
401
  }
383
402
 
384
- const isObservableRelayerRoute = observableRoute?.steps?.some(
385
- (step) => !!isGaslessStep?.(step, fromChain)
386
- )
387
-
388
- const shouldUseMainRoutes =
389
- !observableRoute || !isObservableRelayerRoute
390
- const shouldUseRelayerQuote =
391
- // Relayer quotes don't support limit-order params
392
- mode !== 'limit' &&
393
- fromAddress &&
394
- fromChain?.chainType === ChainType.EVM &&
395
- fromChain.permit2 &&
396
- fromChain.permit2Proxy &&
397
- fromChain.relayerSupported &&
398
- fromChain.nativeToken.address !== fromTokenAddress &&
399
- useRelayerRoutes &&
400
- !isBatchingSupported &&
401
- (!observableRoute || isObservableRelayerRoute)
402
-
403
- const limitOrderRouteParams =
404
- mode === 'limit'
405
- ? {
406
- toAmount: toAmount?.toString(),
407
- validUntil: Math.floor(Date.now() / 1000) + validUntilDuration,
408
- partiallyFillable: partiallyFillable,
409
- }
410
- : undefined
403
+ const route: Route = convertQuoteToRoute(contractCallQuote)
404
+
405
+ return [route]
406
+ }
407
+
408
+ // Prevent sending a request for the same chain token combinations.
409
+ // Exception: proceed anyway if mode is custom and modeOptions custom type is deposit
410
+ if (
411
+ fromChainId === toChainId &&
412
+ fromTokenAddress === toTokenAddress &&
413
+ !(mode === 'custom' && modeOptions?.custom?.type === 'deposit')
414
+ ) {
415
+ return
416
+ }
417
+
418
+ const isObservableRelayerRoute = observableRoute?.steps?.some(
419
+ (step) => !!isGaslessStep?.(step, fromChain)
420
+ )
421
+
422
+ const shouldUseMainRoutes = !observableRoute || !isObservableRelayerRoute
423
+ const shouldUseRelayerQuote =
424
+ // Relayer quotes don't support limit-order params
425
+ mode !== 'limit' &&
426
+ account.address &&
427
+ fromAddress &&
428
+ fromChain?.chainType === ChainType.EVM &&
429
+ fromChain.permit2 &&
430
+ fromChain.permit2Proxy &&
431
+ fromChain.relayerSupported &&
432
+ fromChain.nativeToken.address !== fromTokenAddress &&
433
+ useRelayerRoutes &&
434
+ !isBatchingSupported &&
435
+ (!observableRoute || isObservableRelayerRoute)
436
+
437
+ const limitOrderRouteParams =
438
+ mode === 'limit'
439
+ ? {
440
+ toAmount: toAmount?.toString(),
441
+ validUntil: Math.floor(Date.now() / 1000) + validUntilDuration,
442
+ partiallyFillable: partiallyFillable,
443
+ }
444
+ : undefined
411
445
 
412
- const mainRoutesPromise = shouldUseMainRoutes
413
- ? getRoutes(
414
- sdkClient,
415
- {
416
- fromAddress,
417
- fromAmount: fromAmount.toString(),
418
- fromChainId,
419
- fromTokenAddress,
420
- toAddress,
421
- toChainId,
422
- toTokenAddress,
423
- fromAmountForGas:
424
- enabledRefuel && gasRecommendationFromAmount
425
- ? gasRecommendationFromAmount
446
+ const mainRoutesPromise = shouldUseMainRoutes
447
+ ? getRoutes(
448
+ sdkClient,
449
+ {
450
+ fromAddress,
451
+ fromAmount: fromAmount.toString(),
452
+ fromChainId,
453
+ fromTokenAddress,
454
+ toAddress,
455
+ toChainId,
456
+ toTokenAddress,
457
+ fromAmountForGas:
458
+ enabledRefuel && gasRecommendationFromAmount
459
+ ? gasRecommendationFromAmount
460
+ : undefined,
461
+ ...limitOrderRouteParams,
462
+ options: {
463
+ allowSwitchChain: mode === 'refuel' ? false : allowSwitchChain,
464
+ bridges:
465
+ allowBridges?.length || disabledBridges.length
466
+ ? {
467
+ allow: allowBridges,
468
+ deny: disabledBridges.length
469
+ ? disabledBridges
470
+ : undefined,
471
+ }
426
472
  : undefined,
427
- ...limitOrderRouteParams,
428
- options: {
429
- allowSwitchChain:
430
- mode === 'refuel' ? false : allowSwitchChain,
431
- bridges:
432
- allowBridges?.length || disabledBridges.length
433
- ? {
434
- allow: allowBridges,
435
- deny: disabledBridges.length
436
- ? disabledBridges
437
- : undefined,
438
- }
439
- : undefined,
440
- exchanges:
441
- allowExchanges?.length || disabledExchanges.length
442
- ? {
443
- allow: allowExchanges,
444
- deny: disabledExchanges.length
445
- ? disabledExchanges
446
- : undefined,
447
- }
448
- : undefined,
449
- order: routePriority,
450
- slippage: formattedSlippage,
451
- fee: calculatedFee || configuredFee,
452
- executionType: disableMessageSigning ? 'transaction' : 'all',
453
- ...(isPrivate && { private: true }),
454
- },
455
- },
456
- { signal }
457
- )
458
- : Promise.resolve(null)
459
-
460
- const relayerQuotePromise = shouldUseRelayerQuote
461
- ? getRelayerQuote(
462
- sdkClient,
463
- {
464
- fromAddress,
465
- fromAmount: fromAmount.toString(),
466
- fromChain: fromChainId,
467
- fromToken: fromTokenAddress,
468
- toAddress,
469
- toChain: toChainId,
470
- toToken: toTokenAddress,
471
- fromAmountForGas:
472
- enabledRefuel && gasRecommendationFromAmount
473
- ? gasRecommendationFromAmount
473
+ exchanges:
474
+ allowExchanges?.length || disabledExchanges.length
475
+ ? {
476
+ allow: allowExchanges,
477
+ deny: disabledExchanges.length
478
+ ? disabledExchanges
479
+ : undefined,
480
+ }
474
481
  : undefined,
475
482
  order: routePriority,
476
483
  slippage: formattedSlippage,
477
484
  fee: calculatedFee || configuredFee,
478
- ...(allowBridges?.length || disabledBridges.length
479
- ? {
480
- allowBridges: allowBridges,
481
- denyBridges: disabledBridges.length
482
- ? disabledBridges
483
- : undefined,
484
- }
485
- : undefined),
486
- ...(allowExchanges?.length || disabledExchanges.length
487
- ? {
488
- allowExchanges: allowExchanges,
489
- denyExchanges: disabledExchanges.length
490
- ? disabledExchanges
491
- : undefined,
492
- }
493
- : undefined),
485
+ executionType: disableMessageSigning ? 'transaction' : 'all',
486
+ ...(isPrivate && { private: true }),
494
487
  },
495
- { signal }
496
- )
497
- .then(convertQuoteToRoute)
498
- .catch(() => null)
499
- : Promise.resolve(null)
500
-
501
- // Wait for the main routes to complete first
502
- const routesResult = await mainRoutesPromise
503
-
504
- if (routesResult?.routes[0] && fromAddress) {
505
- // Update local tokens cache to keep priceUSD in sync
506
- const { fromToken, toToken } = routesResult.routes[0]
507
- ;[fromToken, toToken].forEach((token) => {
508
- // Update main tokens cache (verified)
509
- queryClient.setQueriesData<TokensByChain>(
510
- { queryKey: [getQueryKey('tokens', keyPrefix)] },
511
- (data) => updateTokenInCache(data, token)
512
- )
488
+ },
489
+ { signal }
490
+ )
491
+ : Promise.resolve(null)
513
492
 
514
- // Update search tokens cache (unverified) - matches any search query
515
- queryClient.setQueriesData<TokensByChain>(
516
- {
517
- queryKey: [getQueryKey('tokens-search', keyPrefix)],
518
- exact: false,
519
- },
520
- (data) => updateTokenInCache(data, token)
521
- )
493
+ const relayerQuotePromise = shouldUseRelayerQuote
494
+ ? getRelayerQuote(
495
+ sdkClient,
496
+ {
497
+ fromAddress,
498
+ fromAmount: fromAmount.toString(),
499
+ fromChain: fromChainId,
500
+ fromToken: fromTokenAddress,
501
+ toAddress,
502
+ toChain: toChainId,
503
+ toToken: toTokenAddress,
504
+ fromAmountForGas:
505
+ enabledRefuel && gasRecommendationFromAmount
506
+ ? gasRecommendationFromAmount
507
+ : undefined,
508
+ order: routePriority,
509
+ slippage: formattedSlippage,
510
+ fee: calculatedFee || configuredFee,
511
+ ...(allowBridges?.length || disabledBridges.length
512
+ ? {
513
+ allowBridges: allowBridges,
514
+ denyBridges: disabledBridges.length
515
+ ? disabledBridges
516
+ : undefined,
517
+ }
518
+ : undefined),
519
+ ...(allowExchanges?.length || disabledExchanges.length
520
+ ? {
521
+ allowExchanges: allowExchanges,
522
+ denyExchanges: disabledExchanges.length
523
+ ? disabledExchanges
524
+ : undefined,
525
+ }
526
+ : undefined),
527
+ },
528
+ { signal }
529
+ )
530
+ .then(convertQuoteToRoute)
531
+ .catch(() => null)
532
+ : Promise.resolve(null)
533
+
534
+ // Wait for the main routes to complete first
535
+ const routesResult = await mainRoutesPromise
536
+
537
+ if (routesResult?.routes[0] && fromAddress) {
538
+ // Update local tokens cache to keep priceUSD in sync
539
+ const { fromToken, toToken } = routesResult.routes[0]
540
+ ;[fromToken, toToken].forEach((token) => {
541
+ // Update main tokens cache (verified)
542
+ queryClient.setQueriesData<TokensByChain>(
543
+ { queryKey: [getQueryKey('tokens', keyPrefix)] },
544
+ (data) => updateTokenInCache(data, token)
545
+ )
522
546
 
523
- queryClient.setQueriesData<Token[]>(
524
- {
525
- queryKey: [
526
- getQueryKey('token-balances', keyPrefix),
527
- fromAddress,
528
- token.chainId,
529
- ],
530
- },
531
- (data) => {
532
- if (data) {
533
- const clonedData = [...data]
534
- const index = clonedData.findIndex(
535
- (dataToken) => dataToken.address === token.address
536
- )
537
- if (index >= 0) {
538
- clonedData[index] = {
539
- ...clonedData[index],
540
- ...token,
541
- }
547
+ // Update search tokens cache (unverified) - matches any search query
548
+ queryClient.setQueriesData<TokensByChain>(
549
+ {
550
+ queryKey: [getQueryKey('tokens-search', keyPrefix)],
551
+ exact: false,
552
+ },
553
+ (data) => updateTokenInCache(data, token)
554
+ )
555
+
556
+ queryClient.setQueriesData<Token[]>(
557
+ {
558
+ queryKey: [
559
+ getQueryKey('token-balances', keyPrefix),
560
+ fromAddress,
561
+ token.chainId,
562
+ ],
563
+ },
564
+ (data) => {
565
+ if (data) {
566
+ const clonedData = [...data]
567
+ const index = clonedData.findIndex(
568
+ (dataToken) => dataToken.address === token.address
569
+ )
570
+ if (index >= 0) {
571
+ clonedData[index] = {
572
+ ...clonedData[index],
573
+ ...token,
542
574
  }
543
- return clonedData
544
575
  }
576
+ return clonedData
545
577
  }
546
- )
547
- })
548
- }
549
-
550
- const initialRoutes = routesResult?.routes ?? []
551
-
552
- if (shouldUseRelayerQuote && initialRoutes.length) {
553
- setIntermediateRoutes(queryKey, initialRoutes)
554
- emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)
555
- // Return early if we're only using main routes
556
- } else if (shouldUseMainRoutes) {
557
- // If we don't need relayer quote, return the initial routes
558
- emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)
559
- return initialRoutes
560
- }
578
+ }
579
+ )
580
+ })
581
+ }
561
582
 
562
- const relayerRouteResult = await relayerQuotePromise
563
- // If we have a relayer route, add it to the routes array
564
- if (relayerRouteResult) {
565
- // Insert the relayer route at position 1 (after the first route)
566
- initialRoutes.splice(1, 0, relayerRouteResult)
567
- // Emit the updated routes
568
- emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)
569
- }
583
+ const initialRoutes = routesResult?.routes ?? []
570
584
 
585
+ if (shouldUseRelayerQuote && initialRoutes.length) {
586
+ setIntermediateRoutes(queryKey, initialRoutes)
587
+ emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)
588
+ // Return early if we're only using main routes
589
+ } else if (shouldUseMainRoutes) {
590
+ // If we don't need relayer quote, return the initial routes
591
+ emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)
571
592
  return initialRoutes
572
- },
573
- enabled: isEnabled,
574
- staleTime: refetchTime,
575
- refetchInterval(query) {
576
- return Math.min(
577
- Math.abs(refetchTime - (Date.now() - query.state.dataUpdatedAt)),
578
- refetchTime
579
- )
580
- },
581
- retry(failureCount, error: any) {
582
- if (process.env.NODE_ENV === 'development') {
583
- console.warn('Route query failed:', { failureCount, error })
584
- }
585
- if (failureCount >= 3) {
586
- return false
587
- }
588
- if (error?.code === LiFiErrorCode.NotFound) {
589
- return false
590
- }
591
- return true
592
- },
593
- })
593
+ }
594
+
595
+ const relayerRouteResult = await relayerQuotePromise
596
+ // If we have a relayer route, add it to the routes array
597
+ if (relayerRouteResult) {
598
+ // Insert the relayer route at position 1 (after the first route)
599
+ initialRoutes.splice(1, 0, relayerRouteResult)
600
+ // Emit the updated routes
601
+ emitter.emit(WidgetEvent.AvailableRoutes, initialRoutes)
602
+ }
603
+
604
+ return initialRoutes
605
+ },
606
+ enabled: isEnabled,
607
+ staleTime: refetchTime,
608
+ placeholderData: keepPreviousDataEnabled ? keepPreviousData : undefined,
609
+ refetchInterval(query) {
610
+ return Math.min(
611
+ Math.abs(refetchTime - (Date.now() - query.state.dataUpdatedAt)),
612
+ refetchTime
613
+ )
614
+ },
615
+ retry(failureCount, error: any) {
616
+ if (process.env.NODE_ENV === 'development') {
617
+ console.warn('Route query failed:', { failureCount, error })
618
+ }
619
+ if (failureCount >= 3) {
620
+ return false
621
+ }
622
+ if (error?.code === LiFiErrorCode.NotFound) {
623
+ return false
624
+ }
625
+ return true
626
+ },
627
+ })
594
628
 
595
629
  const setReviewableRoute = useCallback(
596
630
  (route: Route) => {
@@ -608,6 +642,7 @@ export const useRoutes = ({
608
642
  isLoading: isEnabled && isLoading,
609
643
  isFetching,
610
644
  isFetched,
645
+ isError,
611
646
  dataUpdatedAt,
612
647
  refetchTime,
613
648
  refetch,