@0xsquid/react-hooks 6.7.0-rollup-beta.1 → 6.7.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 (258) hide show
  1. package/dist/core/abis/ics20.json +128 -0
  2. package/dist/core/connectors/bitcoin/errors/index.js +22 -0
  3. package/dist/core/connectors/bitcoin/errors/index.js.map +1 -0
  4. package/dist/core/connectors/bitcoin/helpers.js +86 -0
  5. package/dist/core/connectors/bitcoin/helpers.js.map +1 -0
  6. package/dist/core/connectors/bitcoin/index.js +2 -0
  7. package/dist/core/connectors/bitcoin/index.js.map +1 -0
  8. package/dist/core/connectors/bitcoin/wallets/index.js +4 -0
  9. package/dist/core/connectors/bitcoin/wallets/index.js.map +1 -0
  10. package/dist/core/connectors/bitcoin/wallets/keplr.js +28 -0
  11. package/dist/core/connectors/bitcoin/wallets/keplr.js.map +1 -0
  12. package/dist/core/connectors/bitcoin/wallets/phantom.js +56 -0
  13. package/dist/core/connectors/bitcoin/wallets/phantom.js.map +1 -0
  14. package/dist/core/connectors/bitcoin/wallets/unisat.js +28 -0
  15. package/dist/core/connectors/bitcoin/wallets/unisat.js.map +1 -0
  16. package/dist/core/constants.js +144 -0
  17. package/dist/core/constants.js.map +1 -0
  18. package/dist/core/externalLinks.js +21 -0
  19. package/dist/core/externalLinks.js.map +1 -0
  20. package/dist/core/index.js +4 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/core/multicall3.js +442 -0
  23. package/dist/core/multicall3.js.map +1 -0
  24. package/dist/core/providers/CosmosProvider.js +13 -0
  25. package/dist/core/providers/CosmosProvider.js.map +1 -0
  26. package/dist/core/providers/SolanaProvider.js +15 -0
  27. package/dist/core/providers/SolanaProvider.js.map +1 -0
  28. package/dist/core/providers/SuiProvider.js +15 -0
  29. package/dist/core/providers/SuiProvider.js.map +1 -0
  30. package/dist/core/queries/queries-keys.d.ts +2 -2
  31. package/dist/core/queries/queries-keys.js +206 -0
  32. package/dist/core/queries/queries-keys.js.map +1 -0
  33. package/dist/core/queries/react-query-config.js +11 -0
  34. package/dist/core/queries/react-query-config.js.map +1 -0
  35. package/dist/core/types/config.d.ts +2 -0
  36. package/dist/core/types/config.js +2 -0
  37. package/dist/core/types/config.js.map +1 -0
  38. package/dist/core/types/dex.js +33 -0
  39. package/dist/core/types/dex.js.map +1 -0
  40. package/dist/core/types/error.js +12 -0
  41. package/dist/core/types/error.js.map +1 -0
  42. package/dist/core/types/event.d.ts +5 -0
  43. package/dist/core/types/event.js +2 -0
  44. package/dist/core/types/event.js.map +1 -0
  45. package/dist/core/types/index.js +2 -0
  46. package/dist/core/types/index.js.map +1 -0
  47. package/dist/core/types/rpc.js +2 -0
  48. package/dist/core/types/rpc.js.map +1 -0
  49. package/dist/core/types/sui.js +2 -0
  50. package/dist/core/types/sui.js.map +1 -0
  51. package/dist/core/types/swap.js +2 -0
  52. package/dist/core/types/swap.js.map +1 -0
  53. package/dist/core/types/tokens.js +2 -0
  54. package/dist/core/types/tokens.js.map +1 -0
  55. package/dist/core/types/transaction.js +41 -0
  56. package/dist/core/types/transaction.js.map +1 -0
  57. package/dist/core/types/wallet.js +26 -0
  58. package/dist/core/types/wallet.js.map +1 -0
  59. package/dist/core/wagmiConfig.js +60 -0
  60. package/dist/core/wagmiConfig.js.map +1 -0
  61. package/dist/core/wallets.js +549 -0
  62. package/dist/core/wallets.js.map +1 -0
  63. package/dist/hooks/analytics/useTrackSearchEmpty.d.ts +12 -0
  64. package/dist/hooks/analytics/useTrackSearchEmpty.js +22 -0
  65. package/dist/hooks/analytics/useTrackSearchEmpty.js.map +1 -0
  66. package/dist/hooks/chains/useSquidChains.js +107 -0
  67. package/dist/hooks/chains/useSquidChains.js.map +1 -0
  68. package/dist/hooks/client/useClient.js +6 -0
  69. package/dist/hooks/client/useClient.js.map +1 -0
  70. package/dist/hooks/cosmos/useCosmos.js +172 -0
  71. package/dist/hooks/cosmos/useCosmos.js.map +1 -0
  72. package/dist/hooks/cosmos/useCosmosForChain.js +33 -0
  73. package/dist/hooks/cosmos/useCosmosForChain.js.map +1 -0
  74. package/dist/hooks/index.d.ts +5 -5
  75. package/dist/hooks/index.js +45 -0
  76. package/dist/hooks/index.js.map +1 -0
  77. package/dist/hooks/navigation/useKeyboardNavigation.js +67 -0
  78. package/dist/hooks/navigation/useKeyboardNavigation.js.map +1 -0
  79. package/dist/hooks/query/useSquidQueryClient.js +23 -0
  80. package/dist/hooks/query/useSquidQueryClient.js.map +1 -0
  81. package/dist/hooks/solana/useSolana.js +104 -0
  82. package/dist/hooks/solana/useSolana.js.map +1 -0
  83. package/dist/hooks/squid/useSquid.js +55 -0
  84. package/dist/hooks/squid/useSquid.js.map +1 -0
  85. package/dist/hooks/store/useAddressBookStore.js +26 -0
  86. package/dist/hooks/store/useAddressBookStore.js.map +1 -0
  87. package/dist/hooks/store/useAssetsColorsStore.js +7 -0
  88. package/dist/hooks/store/useAssetsColorsStore.js.map +1 -0
  89. package/dist/hooks/store/useDepositAddressStore.js +12 -0
  90. package/dist/hooks/store/useDepositAddressStore.js.map +1 -0
  91. package/dist/hooks/store/useFavoriteTokensStore.js +28 -0
  92. package/dist/hooks/store/useFavoriteTokensStore.js.map +1 -0
  93. package/dist/hooks/store/useHistoryStore.js +41 -0
  94. package/dist/hooks/store/useHistoryStore.js.map +1 -0
  95. package/dist/hooks/store/useSquidStore.js +56 -0
  96. package/dist/hooks/store/useSquidStore.js.map +1 -0
  97. package/dist/hooks/store/useWalletStore.js +42 -0
  98. package/dist/hooks/store/useWalletStore.js.map +1 -0
  99. package/dist/hooks/sui/useSui.js +28 -0
  100. package/dist/hooks/sui/useSui.js.map +1 -0
  101. package/dist/hooks/sui/useSuiClient.js +16 -0
  102. package/dist/hooks/sui/useSuiClient.js.map +1 -0
  103. package/dist/hooks/sui/useSuiWallets.js +42 -0
  104. package/dist/hooks/sui/useSuiWallets.js.map +1 -0
  105. package/dist/hooks/swap/useDepositAddress.js +63 -0
  106. package/dist/hooks/swap/useDepositAddress.js.map +1 -0
  107. package/dist/hooks/swap/useSwap.js +209 -0
  108. package/dist/hooks/swap/useSwap.js.map +1 -0
  109. package/dist/hooks/tokens/useAllConnectedWalletBalances.js +103 -0
  110. package/dist/hooks/tokens/useAllConnectedWalletBalances.js.map +1 -0
  111. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js +119 -0
  112. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js.map +1 -0
  113. package/dist/hooks/tokens/useBalance.js +136 -0
  114. package/dist/hooks/tokens/useBalance.js.map +1 -0
  115. package/dist/hooks/tokens/useMultiChainBalance.js +68 -0
  116. package/dist/hooks/tokens/useMultiChainBalance.js.map +1 -0
  117. package/dist/hooks/tokens/useMultipleTokenPrices.js +46 -0
  118. package/dist/hooks/tokens/useMultipleTokenPrices.js.map +1 -0
  119. package/dist/hooks/tokens/useNativeBalance.js +217 -0
  120. package/dist/hooks/tokens/useNativeBalance.js.map +1 -0
  121. package/dist/hooks/tokens/useNativeTokenForChain.js +28 -0
  122. package/dist/hooks/tokens/useNativeTokenForChain.js.map +1 -0
  123. package/dist/hooks/tokens/useSingleTokenPrice.js +38 -0
  124. package/dist/hooks/tokens/useSingleTokenPrice.js.map +1 -0
  125. package/dist/hooks/tokens/useSquidTokens.js +80 -0
  126. package/dist/hooks/tokens/useSquidTokens.js.map +1 -0
  127. package/dist/hooks/tokens/useTokenHistoricalData.js +23 -0
  128. package/dist/hooks/tokens/useTokenHistoricalData.js.map +1 -0
  129. package/dist/hooks/transaction/useAllTransactionsStatus.js +68 -0
  130. package/dist/hooks/transaction/useAllTransactionsStatus.js.map +1 -0
  131. package/dist/hooks/transaction/useApproval.js +223 -0
  132. package/dist/hooks/transaction/useApproval.js.map +1 -0
  133. package/dist/hooks/transaction/useErc20Allowance.js +43 -0
  134. package/dist/hooks/transaction/useErc20Allowance.js.map +1 -0
  135. package/dist/hooks/transaction/useEstimate.js +118 -0
  136. package/dist/hooks/transaction/useEstimate.js.map +1 -0
  137. package/dist/hooks/transaction/useEstimatePriceImpact.js +31 -0
  138. package/dist/hooks/transaction/useEstimatePriceImpact.js.map +1 -0
  139. package/dist/hooks/transaction/useExecuteTransaction.js +605 -0
  140. package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -0
  141. package/dist/hooks/transaction/useGetRoute.d.ts +3 -0
  142. package/dist/hooks/transaction/useGetRoute.js +230 -0
  143. package/dist/hooks/transaction/useGetRoute.js.map +1 -0
  144. package/dist/hooks/transaction/useIcs20Allowance.js +40 -0
  145. package/dist/hooks/transaction/useIcs20Allowance.js.map +1 -0
  146. package/dist/hooks/transaction/useRouteWarnings.js +19 -0
  147. package/dist/hooks/transaction/useRouteWarnings.js.map +1 -0
  148. package/dist/hooks/transaction/useSingleTransaction.js +91 -0
  149. package/dist/hooks/transaction/useSingleTransaction.js.map +1 -0
  150. package/dist/hooks/user/useAvatar.js +34 -0
  151. package/dist/hooks/user/useAvatar.js.map +1 -0
  152. package/dist/hooks/user/useHistory.js +106 -0
  153. package/dist/hooks/user/useHistory.js.map +1 -0
  154. package/dist/hooks/user/useUserParams.js +33 -0
  155. package/dist/hooks/user/useUserParams.js.map +1 -0
  156. package/dist/hooks/wallet/useAddToken.js +49 -0
  157. package/dist/hooks/wallet/useAddToken.js.map +1 -0
  158. package/dist/hooks/wallet/useAutoConnect.js +74 -0
  159. package/dist/hooks/wallet/useAutoConnect.js.map +1 -0
  160. package/dist/hooks/wallet/useEns.js +69 -0
  161. package/dist/hooks/wallet/useEns.js.map +1 -0
  162. package/dist/hooks/wallet/useGnosisContext.js +78 -0
  163. package/dist/hooks/wallet/useGnosisContext.js.map +1 -0
  164. package/dist/hooks/wallet/useIntegratorContext.js +39 -0
  165. package/dist/hooks/wallet/useIntegratorContext.js.map +1 -0
  166. package/dist/hooks/wallet/useMultiChainWallet.js +175 -0
  167. package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -0
  168. package/dist/hooks/wallet/useSigner.js +76 -0
  169. package/dist/hooks/wallet/useSigner.js.map +1 -0
  170. package/dist/hooks/wallet/useWallet.js +206 -0
  171. package/dist/hooks/wallet/useWallet.js.map +1 -0
  172. package/dist/hooks/wallet/useWallets.js +36 -0
  173. package/dist/hooks/wallet/useWallets.js.map +1 -0
  174. package/dist/index.js +6 -17096
  175. package/dist/index.js.map +1 -1
  176. package/dist/provider/index.js +113 -0
  177. package/dist/provider/index.js.map +1 -0
  178. package/dist/services/external/ens.js +66 -0
  179. package/dist/services/external/ens.js.map +1 -0
  180. package/dist/services/external/rpcService.js +421 -0
  181. package/dist/services/external/rpcService.js.map +1 -0
  182. package/dist/{secretService-Cnn1_HQT.js → services/external/secretService.js} +8 -37
  183. package/dist/services/external/secretService.js.map +1 -0
  184. package/dist/services/external/suiRpcClient.js +80 -0
  185. package/dist/services/external/suiRpcClient.js.map +1 -0
  186. package/dist/services/external/tokenDataService.js +108 -0
  187. package/dist/services/external/tokenDataService.js.map +1 -0
  188. package/dist/services/index.js +16 -0
  189. package/dist/services/index.js.map +1 -0
  190. package/dist/services/internal/apiService.js +21 -0
  191. package/dist/services/internal/apiService.js.map +1 -0
  192. package/dist/services/internal/assetsService.js +586 -0
  193. package/dist/services/internal/assetsService.js.map +1 -0
  194. package/dist/services/internal/bitcoinService.js +51 -0
  195. package/dist/services/internal/bitcoinService.js.map +1 -0
  196. package/dist/services/internal/configService.js +218 -0
  197. package/dist/services/internal/configService.js.map +1 -0
  198. package/dist/services/internal/cosmosService.js +141 -0
  199. package/dist/services/internal/cosmosService.js.map +1 -0
  200. package/dist/services/internal/errorService.js +188 -0
  201. package/dist/services/internal/errorService.js.map +1 -0
  202. package/dist/services/internal/estimateService.js +221 -0
  203. package/dist/services/internal/estimateService.js.map +1 -0
  204. package/dist/services/internal/eventService.d.ts +5 -0
  205. package/dist/services/internal/eventService.js +163 -0
  206. package/dist/services/internal/eventService.js.map +1 -0
  207. package/dist/services/internal/evmService.js +42 -0
  208. package/dist/services/internal/evmService.js.map +1 -0
  209. package/dist/services/internal/numberService.js +171 -0
  210. package/dist/services/internal/numberService.js.map +1 -0
  211. package/dist/services/internal/priceService.js +53 -0
  212. package/dist/services/internal/priceService.js.map +1 -0
  213. package/dist/services/internal/searchService.js +98 -0
  214. package/dist/services/internal/searchService.js.map +1 -0
  215. package/dist/services/internal/solanaService.js +109 -0
  216. package/dist/services/internal/solanaService.js.map +1 -0
  217. package/dist/services/internal/suiService.js +119 -0
  218. package/dist/services/internal/suiService.js.map +1 -0
  219. package/dist/services/internal/transactionService.js +207 -0
  220. package/dist/services/internal/transactionService.js.map +1 -0
  221. package/dist/services/internal/transactionStatusService.js +315 -0
  222. package/dist/services/internal/transactionStatusService.js.map +1 -0
  223. package/dist/services/internal/walletService.js +464 -0
  224. package/dist/services/internal/walletService.js.map +1 -0
  225. package/dist/tests/apiService.test.js +40 -0
  226. package/dist/tests/apiService.test.js.map +1 -0
  227. package/dist/tests/assetsService.test.js +500 -0
  228. package/dist/tests/assetsService.test.js.map +1 -0
  229. package/dist/tests/configService.test.js +673 -0
  230. package/dist/tests/configService.test.js.map +1 -0
  231. package/dist/tests/estimateService.test.js +355 -0
  232. package/dist/tests/estimateService.test.js.map +1 -0
  233. package/dist/tests/fetchSquidData.js +36 -0
  234. package/dist/tests/fetchSquidData.js.map +1 -0
  235. package/dist/tests/jest-svg-transform.d.ts +0 -0
  236. package/dist/tests/jest-svg-transform.js +21 -0
  237. package/dist/tests/jest-svg-transform.js.map +1 -0
  238. package/dist/tests/numberService.test.js +135 -0
  239. package/dist/tests/numberService.test.js.map +1 -0
  240. package/dist/tests/priceService.test.js +38 -0
  241. package/dist/tests/priceService.test.js.map +1 -0
  242. package/dist/tests/sample.json +0 -0
  243. package/dist/tests/searchService.test.js +92 -0
  244. package/dist/tests/searchService.test.js.map +1 -0
  245. package/dist/tests/swapConfig.test.js +332 -0
  246. package/dist/tests/swapConfig.test.js.map +1 -0
  247. package/dist/tests/transactionService.test.js +53 -0
  248. package/dist/tests/transactionService.test.js.map +1 -0
  249. package/dist/tests/transactionStatusService.test.js +165 -0
  250. package/dist/tests/transactionStatusService.test.js.map +1 -0
  251. package/dist/tests/walletService.test.js +264 -0
  252. package/dist/tests/walletService.test.js.map +1 -0
  253. package/package.json +4 -18
  254. package/dist/index.esm.js +0 -16892
  255. package/dist/index.esm.js.map +0 -1
  256. package/dist/secretService-Cnn1_HQT.js.map +0 -1
  257. package/dist/secretService-DW4QetNp.js +0 -162
  258. package/dist/secretService-DW4QetNp.js.map +0 -1
@@ -0,0 +1,673 @@
1
+ import { nativeEvmTokenAddress } from "../core/constants";
2
+ import { filterTokensForDestination, getFirstAvailableChainId, getInitialChainIdFromConfig, getInitialOrDefaultTokenAddressForChain, getInitialTokenAddressForChain, getUnavailableChainIdsForDirection, } from "../services/internal/configService";
3
+ import { fetchSquidData } from "./fetchSquidData";
4
+ let squid = undefined;
5
+ let CHAINS = {};
6
+ let TOKENS = {};
7
+ describe("config service", () => {
8
+ beforeAll(async () => {
9
+ squid = await fetchSquidData();
10
+ CHAINS = squid?.chains;
11
+ TOKENS = squid?.tokens;
12
+ });
13
+ describe("getFirstAvailableChainId", () => {
14
+ test("returns chain id of first chain when no initialAssets are specified", () => {
15
+ expect(getFirstAvailableChainId({}, "from", [
16
+ CHAINS.ETHEREUM,
17
+ CHAINS.ARBITRUM,
18
+ CHAINS.POLYGON,
19
+ ])).toBe(CHAINS.ETHEREUM.chainId);
20
+ expect(getFirstAvailableChainId({
21
+ initialAssets: {},
22
+ }, "from", [CHAINS.ETHEREUM, CHAINS.ARBITRUM, CHAINS.POLYGON])).toBe(CHAINS.ETHEREUM.chainId);
23
+ });
24
+ test("returns undefined when no chains are provided", () => {
25
+ expect(getFirstAvailableChainId({}, "from", [])).toBe(undefined);
26
+ expect(getFirstAvailableChainId({}, "from", undefined)).toBe(undefined);
27
+ });
28
+ test("returns undefined if all chain ids are also disabled chains", () => {
29
+ const allChains = Object.values(CHAINS);
30
+ const disabledSourceChains = allChains.map((chain) => chain.chainId);
31
+ expect(getFirstAvailableChainId({
32
+ disabledChains: {
33
+ source: disabledSourceChains,
34
+ },
35
+ }, "from", allChains)).toBe(undefined);
36
+ });
37
+ test("returns chain id of initialAssets when its ids are present in chains provided", () => {
38
+ expect(getFirstAvailableChainId({
39
+ initialAssets: {
40
+ from: {
41
+ address: nativeEvmTokenAddress,
42
+ chainId: CHAINS.POLYGON.chainId,
43
+ },
44
+ },
45
+ }, "from", [CHAINS.OPTIMISM, CHAINS.BINANCE, CHAINS.POLYGON, CHAINS.ETHEREUM])).toBe(CHAINS.POLYGON.chainId);
46
+ expect(getFirstAvailableChainId({
47
+ initialAssets: {
48
+ to: {
49
+ address: nativeEvmTokenAddress,
50
+ chainId: CHAINS.AVALANCHE.chainId,
51
+ },
52
+ },
53
+ }, "to", [CHAINS.MANTLE, CHAINS.BASE, CHAINS.AVALANCHE, CHAINS.MOONBEAM])).toBe(CHAINS.AVALANCHE.chainId);
54
+ });
55
+ test("returns chain id of first chain when initialAssets chain ids are not present in chains provided", () => {
56
+ expect(getFirstAvailableChainId({
57
+ initialAssets: {
58
+ from: {
59
+ address: nativeEvmTokenAddress,
60
+ chainId: CHAINS.ARBITRUM.chainId,
61
+ },
62
+ },
63
+ }, "from", [CHAINS.BINANCE, CHAINS.ETHEREUM, CHAINS.POLYGON])).toBe(CHAINS.BINANCE.chainId);
64
+ expect(getFirstAvailableChainId({
65
+ initialAssets: {
66
+ to: {
67
+ address: nativeEvmTokenAddress,
68
+ chainId: CHAINS.MOONBEAM.chainId,
69
+ },
70
+ },
71
+ }, "to", [CHAINS.ARBITRUM, CHAINS.AVALANCHE, CHAINS.LINEA])).toBe(CHAINS.ARBITRUM.chainId);
72
+ });
73
+ test("returns chain id of second chain when initial asset chain is a disabled chain", () => {
74
+ expect(getFirstAvailableChainId({
75
+ initialAssets: {
76
+ from: {
77
+ address: nativeEvmTokenAddress,
78
+ chainId: CHAINS.ARBITRUM.chainId,
79
+ },
80
+ },
81
+ disabledChains: {
82
+ source: [CHAINS.ARBITRUM.chainId],
83
+ },
84
+ }, "from", [CHAINS.ARBITRUM, CHAINS.FANTOM, CHAINS.MANTLE])).toBe(CHAINS.FANTOM.chainId);
85
+ expect(getFirstAvailableChainId({
86
+ initialAssets: {
87
+ to: {
88
+ address: nativeEvmTokenAddress,
89
+ chainId: CHAINS.POLYGON.chainId,
90
+ },
91
+ },
92
+ disabledChains: {
93
+ destination: [CHAINS.POLYGON.chainId],
94
+ },
95
+ }, "to", [CHAINS.POLYGON, CHAINS.BASE, CHAINS.AVALANCHE])).toBe(CHAINS.BASE.chainId);
96
+ });
97
+ test("returns chain id of second chain when first chain is disabled", () => {
98
+ expect(getFirstAvailableChainId({
99
+ disabledChains: {
100
+ source: [CHAINS.ARBITRUM.chainId],
101
+ },
102
+ }, "from", [CHAINS.ARBITRUM, CHAINS.FANTOM, CHAINS.MANTLE])).toBe(CHAINS.FANTOM.chainId);
103
+ expect(getFirstAvailableChainId({
104
+ disabledChains: {
105
+ destination: [CHAINS.NOBLE.chainId],
106
+ },
107
+ }, "to", [CHAINS.NOBLE, CHAINS.AVALANCHE, CHAINS.SCROLL])).toBe(CHAINS.AVALANCHE.chainId);
108
+ });
109
+ test("returns chain id of second chain when initial asset chain is disabled", () => {
110
+ expect(getFirstAvailableChainId({
111
+ disabledChains: {
112
+ source: [CHAINS.OPTIMISM.chainId],
113
+ },
114
+ initialAssets: {
115
+ from: {
116
+ address: nativeEvmTokenAddress,
117
+ chainId: CHAINS.OPTIMISM.chainId,
118
+ },
119
+ },
120
+ }, "from", [CHAINS.OPTIMISM, CHAINS.MOONBEAM, CHAINS.NOBLE])).toBe(CHAINS.MOONBEAM.chainId);
121
+ expect(getFirstAvailableChainId({
122
+ disabledChains: {
123
+ destination: [CHAINS.LINEA.chainId],
124
+ },
125
+ }, "to", [CHAINS.LINEA, CHAINS.BASE, CHAINS.MANTLE])).toBe(CHAINS.BASE.chainId);
126
+ });
127
+ });
128
+ describe("getUnavailableChainIdsForDirection", () => {
129
+ test("returns all chains when no config is provided", () => {
130
+ expect(getUnavailableChainIdsForDirection({
131
+ config: {},
132
+ direction: "from",
133
+ })).toStrictEqual(new Set());
134
+ expect(getUnavailableChainIdsForDirection({
135
+ config: {},
136
+ direction: "to",
137
+ })).toStrictEqual(new Set());
138
+ });
139
+ test("filters by disabledChains", () => {
140
+ expect(getUnavailableChainIdsForDirection({
141
+ config: {
142
+ disabledChains: {
143
+ source: [CHAINS.ETHEREUM.chainId],
144
+ destination: [CHAINS.POLYGON.chainId],
145
+ },
146
+ },
147
+ direction: "from",
148
+ })).toStrictEqual(new Set([CHAINS.ETHEREUM.chainId]));
149
+ expect(getUnavailableChainIdsForDirection({
150
+ config: {
151
+ disabledChains: {
152
+ source: [CHAINS.POLYGON.chainId],
153
+ destination: [CHAINS.AVALANCHE.chainId, CHAINS.MOONBEAM.chainId],
154
+ },
155
+ },
156
+ direction: "to",
157
+ })).toStrictEqual(new Set([CHAINS.AVALANCHE.chainId, CHAINS.MOONBEAM.chainId]));
158
+ });
159
+ });
160
+ describe("getInitialOrDefaultTokenAddressForChain", () => {
161
+ test("returns first token address if no special config is specified", () => {
162
+ expect(getInitialOrDefaultTokenAddressForChain({
163
+ tokens: [
164
+ TOKENS.ETHEREUM.USDT,
165
+ TOKENS.ETHEREUM.ETH,
166
+ TOKENS.ETHEREUM.WETH,
167
+ ],
168
+ config: {},
169
+ chainId: CHAINS.ETHEREUM.chainId,
170
+ direction: "from",
171
+ })).toBe(TOKENS.ETHEREUM.USDT.address);
172
+ expect(getInitialOrDefaultTokenAddressForChain({
173
+ tokens: [
174
+ TOKENS.ETHEREUM.WBTC,
175
+ TOKENS.ETHEREUM.USDC,
176
+ TOKENS.ETHEREUM.ETH,
177
+ ],
178
+ config: {
179
+ defaultTokensPerChain: [],
180
+ },
181
+ chainId: CHAINS.ETHEREUM.chainId,
182
+ direction: "from",
183
+ })).toBe(TOKENS.ETHEREUM.WBTC.address);
184
+ });
185
+ test("returns undefined if no tokens are found for specified chain id", () => {
186
+ expect(getInitialOrDefaultTokenAddressForChain({
187
+ tokens: [
188
+ TOKENS.BASE.USDbC,
189
+ TOKENS.BASE["USDC.axl"],
190
+ TOKENS.BASE.WETH,
191
+ ],
192
+ config: {},
193
+ chainId: CHAINS.ETHEREUM.chainId,
194
+ direction: "from",
195
+ })).toBe(undefined);
196
+ });
197
+ test("filters by defaultTokensPerChain config", () => {
198
+ expect(getInitialOrDefaultTokenAddressForChain({
199
+ tokens: [TOKENS.BASE.USDC, TOKENS.BASE.WETH, TOKENS.ETHEREUM.USDT],
200
+ config: {
201
+ defaultTokensPerChain: [
202
+ {
203
+ address: TOKENS.ETHEREUM.USDT.address,
204
+ chainId: TOKENS.ETHEREUM.USDT.chainId,
205
+ },
206
+ ],
207
+ },
208
+ chainId: CHAINS.ETHEREUM.chainId,
209
+ direction: "from",
210
+ })).toBe(TOKENS.ETHEREUM.USDT.address);
211
+ expect(getInitialOrDefaultTokenAddressForChain({
212
+ tokens: [
213
+ TOKENS.ETHEREUM.WBTC,
214
+ TOKENS.BASE["USDC.axl"],
215
+ TOKENS.BASE.ETH,
216
+ ],
217
+ config: {
218
+ defaultTokensPerChain: [
219
+ {
220
+ address: TOKENS.BASE["USDC.axl"].address,
221
+ chainId: TOKENS.BASE["USDC.axl"].chainId,
222
+ },
223
+ ],
224
+ },
225
+ chainId: CHAINS.BASE.chainId,
226
+ direction: "from",
227
+ })).toBe(TOKENS.BASE["USDC.axl"].address);
228
+ });
229
+ test("filters by unavailableTokenAddress", () => {
230
+ expect(getInitialOrDefaultTokenAddressForChain({
231
+ tokens: [
232
+ TOKENS.ETHEREUM.WBTC,
233
+ TOKENS.BASE["USDC.axl"],
234
+ TOKENS.BASE.USDbC,
235
+ ],
236
+ config: {},
237
+ chainId: CHAINS.BASE.chainId,
238
+ direction: "from",
239
+ excludeToken: {
240
+ address: TOKENS.BASE["USDC.axl"].address,
241
+ chainId: CHAINS.BASE.chainId,
242
+ },
243
+ })).toBe(TOKENS.BASE.USDbC.address);
244
+ });
245
+ test("filters by initialAssets", () => {
246
+ expect(getInitialOrDefaultTokenAddressForChain({
247
+ tokens: [
248
+ TOKENS.BASE.USDC,
249
+ TOKENS.ETHEREUM.WETH,
250
+ TOKENS.ETHEREUM.USDT,
251
+ TOKENS.ETHEREUM.USDC,
252
+ ],
253
+ config: {
254
+ initialAssets: {
255
+ from: TOKENS.ETHEREUM.USDT,
256
+ },
257
+ },
258
+ chainId: CHAINS.ETHEREUM.chainId,
259
+ direction: "from",
260
+ })).toBe(TOKENS.ETHEREUM.USDT.address);
261
+ });
262
+ test("returns correct initial asset for dest even if source is set", () => {
263
+ expect(getInitialOrDefaultTokenAddressForChain({
264
+ direction: "to",
265
+ chainId: CHAINS.BASE.chainId,
266
+ tokens: [
267
+ TOKENS.BASE.ETH,
268
+ TOKENS.BASE.USDC,
269
+ TOKENS.ETHEREUM.WETH,
270
+ TOKENS.ETHEREUM.ETH,
271
+ TOKENS.ETHEREUM.USDT,
272
+ TOKENS.ETHEREUM.USDC,
273
+ ],
274
+ config: {
275
+ initialAssets: {
276
+ from: {
277
+ address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
278
+ chainId: "1",
279
+ },
280
+ to: {
281
+ address: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
282
+ chainId: "8453",
283
+ },
284
+ },
285
+ },
286
+ })).toBe(TOKENS.BASE.ETH.address);
287
+ });
288
+ test("returns correct initial asset for source even if dest is set", () => {
289
+ expect(getInitialOrDefaultTokenAddressForChain({
290
+ direction: "from",
291
+ chainId: CHAINS.ETHEREUM.chainId,
292
+ tokens: [
293
+ TOKENS.BASE.ETH,
294
+ TOKENS.BASE.USDC,
295
+ TOKENS.ETHEREUM.WETH,
296
+ TOKENS.ETHEREUM.ETH,
297
+ TOKENS.ETHEREUM.USDT,
298
+ TOKENS.ETHEREUM.USDC,
299
+ ],
300
+ config: {
301
+ initialAssets: {
302
+ from: TOKENS.ETHEREUM.ETH,
303
+ to: TOKENS.BASE.ETH,
304
+ },
305
+ },
306
+ })).toBe(TOKENS.ETHEREUM.ETH.address);
307
+ });
308
+ test("prioritizes defaultTokens over initialAssets when both are provided", () => {
309
+ expect(getInitialOrDefaultTokenAddressForChain({
310
+ tokens: [
311
+ TOKENS.BASE.USDC,
312
+ TOKENS.ETHEREUM.WETH,
313
+ TOKENS.ETHEREUM.USDT,
314
+ TOKENS.ETHEREUM.USDC,
315
+ ],
316
+ config: {
317
+ initialAssets: {
318
+ from: TOKENS.ETHEREUM.USDT,
319
+ },
320
+ defaultTokensPerChain: [
321
+ {
322
+ address: TOKENS.ETHEREUM.WETH.address,
323
+ chainId: TOKENS.ETHEREUM.WETH.chainId,
324
+ },
325
+ ],
326
+ },
327
+ chainId: CHAINS.ETHEREUM.chainId,
328
+ direction: "from",
329
+ })).toBe(TOKENS.ETHEREUM.WETH.address);
330
+ });
331
+ test("filters when unavailableTokenAddress and default token are the same", () => {
332
+ expect(getInitialOrDefaultTokenAddressForChain({
333
+ tokens: [
334
+ TOKENS.BASE.WETH,
335
+ TOKENS.ETHEREUM.ETH,
336
+ TOKENS.BASE.USDC,
337
+ TOKENS.ETHEREUM.USDT,
338
+ ],
339
+ config: {
340
+ defaultTokensPerChain: [
341
+ {
342
+ address: TOKENS.ETHEREUM.ETH.address,
343
+ chainId: TOKENS.ETHEREUM.ETH.chainId,
344
+ },
345
+ ],
346
+ },
347
+ chainId: CHAINS.ETHEREUM.chainId,
348
+ direction: "from",
349
+ excludeToken: {
350
+ address: TOKENS.ETHEREUM.ETH.address,
351
+ chainId: CHAINS.ETHEREUM.chainId,
352
+ },
353
+ })).toBe(TOKENS.ETHEREUM.USDT.address);
354
+ });
355
+ test("returns undefined when chain is disabled", () => {
356
+ expect(getInitialOrDefaultTokenAddressForChain({
357
+ tokens: [
358
+ TOKENS.BASE["USDC.axl"],
359
+ TOKENS.ETHEREUM.WBTC,
360
+ TOKENS.BASE.USDbC,
361
+ TOKENS.ETHEREUM.USDC,
362
+ ],
363
+ config: {
364
+ disabledChains: {
365
+ source: [CHAINS.ETHEREUM.chainId],
366
+ },
367
+ },
368
+ chainId: CHAINS.ETHEREUM.chainId,
369
+ direction: "from",
370
+ excludeToken: undefined,
371
+ })).toBe(undefined);
372
+ expect(getInitialOrDefaultTokenAddressForChain({
373
+ tokens: [
374
+ TOKENS.ETHEREUM.USDC,
375
+ TOKENS.AVALANCHE.USDC,
376
+ TOKENS.ETHEREUM.WETH,
377
+ TOKENS.AVALANCHE.AVAX,
378
+ ],
379
+ config: {
380
+ disabledChains: { destination: [CHAINS.AVALANCHE.chainId] },
381
+ },
382
+ chainId: CHAINS.AVALANCHE.chainId,
383
+ direction: "to",
384
+ })).toBe(undefined);
385
+ });
386
+ test("ignores case when comparing token address", () => {
387
+ expect(getInitialOrDefaultTokenAddressForChain({
388
+ tokens: [TOKENS.SOLANA.SOL, TOKENS.SOLANA.USDC, TOKENS.SOLANA.USDT],
389
+ config: {
390
+ initialAssets: {
391
+ from: {
392
+ chainId: "42161",
393
+ address: "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
394
+ },
395
+ to: {
396
+ chainId: "solana-mainnet-beta",
397
+ address: "epjfwdd5aufqssqem2qn1xzybapc8g4weggkzwytdt1v",
398
+ },
399
+ },
400
+ },
401
+ chainId: "solana-mainnet-beta",
402
+ direction: "to",
403
+ excludeToken: {
404
+ address: "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
405
+ chainId: "42161",
406
+ },
407
+ })).toBe("epjfwdd5aufqssqem2qn1xzybapc8g4weggkzwytdt1v");
408
+ });
409
+ });
410
+ describe("filterTokensForDestination", () => {
411
+ test("returns different tokens than source token when from and to chains are the same", () => {
412
+ expect(filterTokensForDestination({
413
+ tokens: [
414
+ TOKENS.ETHEREUM.ETH,
415
+ TOKENS.ETHEREUM.USDC,
416
+ TOKENS.ETHEREUM.WETH,
417
+ ],
418
+ selectedDestinationChain: CHAINS.ETHEREUM,
419
+ selectedSourceToken: TOKENS.ETHEREUM.ETH,
420
+ removeSourceToken: true,
421
+ })).toStrictEqual([TOKENS.ETHEREUM.USDC, TOKENS.ETHEREUM.WETH]);
422
+ expect(filterTokensForDestination({
423
+ tokens: [
424
+ TOKENS.BASE.USDbC,
425
+ TOKENS.BASE.WETH,
426
+ TOKENS.BASE["USDC.axl"],
427
+ ],
428
+ selectedDestinationChain: CHAINS.BASE,
429
+ selectedSourceToken: TOKENS.BASE["USDC.axl"],
430
+ removeSourceToken: true,
431
+ })).toStrictEqual([TOKENS.BASE.USDbC, TOKENS.BASE.WETH]);
432
+ });
433
+ test("returns only tokens of same chain as destination chain", () => {
434
+ expect(filterTokensForDestination({
435
+ tokens: [
436
+ TOKENS.ETHEREUM.USDC,
437
+ TOKENS.BASE.USDbC,
438
+ TOKENS.ETHEREUM.WETH,
439
+ TOKENS.BASE.ETH,
440
+ ],
441
+ selectedDestinationChain: CHAINS.ETHEREUM,
442
+ selectedSourceToken: TOKENS.BASE.USDC,
443
+ removeSourceToken: false,
444
+ })).toStrictEqual([TOKENS.ETHEREUM.USDC, TOKENS.ETHEREUM.WETH]);
445
+ });
446
+ test("returns all tokens if destination chain is not provided", () => {
447
+ expect(filterTokensForDestination({
448
+ tokens: [
449
+ TOKENS.AVALANCHE.AVAX,
450
+ TOKENS.ETHEREUM.WETH,
451
+ TOKENS.CELO["USDC.axl"],
452
+ TOKENS.BASE.ETH,
453
+ TOKENS.ETHEREUM.USDC,
454
+ TOKENS.BASE.USDbC,
455
+ ],
456
+ selectedDestinationChain: undefined,
457
+ selectedSourceToken: TOKENS.BASE.ETH,
458
+ removeSourceToken: true,
459
+ })).toStrictEqual([
460
+ TOKENS.AVALANCHE.AVAX,
461
+ TOKENS.ETHEREUM.WETH,
462
+ TOKENS.CELO["USDC.axl"],
463
+ TOKENS.ETHEREUM.USDC,
464
+ TOKENS.BASE.USDbC,
465
+ ]);
466
+ });
467
+ test("selecting a non-native Osmosis token on destination should be possible", () => {
468
+ expect(filterTokensForDestination({
469
+ tokens: [
470
+ TOKENS.OSMOSIS.USDC,
471
+ TOKENS.OSMOSIS.ATOM,
472
+ TOKENS.OSMOSIS.OSMO,
473
+ ],
474
+ selectedDestinationChain: CHAINS.OSMOSIS,
475
+ selectedSourceToken: TOKENS.OSMOSIS.ATOM,
476
+ removeSourceToken: true,
477
+ })).toStrictEqual([TOKENS.OSMOSIS.USDC, TOKENS.OSMOSIS.OSMO]);
478
+ });
479
+ });
480
+ describe("getInitialTokenAddressForChain", () => {
481
+ test("returns initial assets when chain id matches", () => {
482
+ const fromInitialAsset = TOKENS.ETHEREUM.WETH;
483
+ expect(getInitialTokenAddressForChain({
484
+ chainId: CHAINS.ETHEREUM.chainId,
485
+ config: {
486
+ initialAssets: {
487
+ from: fromInitialAsset,
488
+ },
489
+ },
490
+ direction: "from",
491
+ tokens: [TOKENS.ETHEREUM.USDT, fromInitialAsset],
492
+ })).toBe(fromInitialAsset.address);
493
+ const toInitialAsset = TOKENS.AVALANCHE.MAI;
494
+ expect(getInitialTokenAddressForChain({
495
+ chainId: CHAINS.AVALANCHE.chainId,
496
+ config: {
497
+ initialAssets: {
498
+ to: toInitialAsset,
499
+ },
500
+ },
501
+ direction: "to",
502
+ tokens: [TOKENS.AVALANCHE["USDC.axl"], toInitialAsset],
503
+ })).toBe(toInitialAsset.address);
504
+ });
505
+ test("returns undefined when initial asset does not match chain id", () => {
506
+ expect(getInitialTokenAddressForChain({
507
+ chainId: CHAINS.ETHEREUM.chainId,
508
+ config: {
509
+ initialAssets: {
510
+ from: TOKENS.BASE.USDbC, // initial asset is a Base token, but we want to get Ethereum tokens
511
+ },
512
+ },
513
+ direction: "from",
514
+ tokens: [TOKENS.ETHEREUM.USDT, TOKENS.ETHEREUM.WETH, TOKENS.BASE.ETH],
515
+ })).toBe(undefined);
516
+ expect(getInitialTokenAddressForChain({
517
+ chainId: CHAINS.BASE.chainId,
518
+ config: {
519
+ initialAssets: {
520
+ to: TOKENS.AVALANCHE.AVAX, // initial asset is an Avalanche token, but we want to get Base tokens
521
+ },
522
+ },
523
+ direction: "from",
524
+ tokens: [
525
+ TOKENS.BASE.ETH,
526
+ TOKENS.AVALANCHE.USDC,
527
+ TOKENS.BASE["USDC.axl"],
528
+ ],
529
+ })).toBe(undefined);
530
+ });
531
+ test("returns undefined when chain is not available", () => {
532
+ expect(getInitialTokenAddressForChain({
533
+ tokens: [
534
+ TOKENS.AVALANCHE.AVAX,
535
+ TOKENS.ETHEREUM.WETH,
536
+ TOKENS.CELO["USDC.axl"],
537
+ TOKENS.BASE.ETH,
538
+ TOKENS.ETHEREUM.USDC,
539
+ TOKENS.BASE.USDbC,
540
+ ],
541
+ config: {},
542
+ chainId: CHAINS.BASE.chainId,
543
+ direction: "from",
544
+ })).toBe(undefined);
545
+ });
546
+ test("returns undefined when no initialAssets are provided", () => {
547
+ expect(getInitialTokenAddressForChain({
548
+ tokens: [
549
+ TOKENS.AVALANCHE.AVAX,
550
+ TOKENS.ETHEREUM.WETH,
551
+ TOKENS.CELO["USDC.axl"],
552
+ TOKENS.BASE.ETH,
553
+ TOKENS.ETHEREUM.USDC,
554
+ TOKENS.BASE.USDbC,
555
+ ],
556
+ config: {},
557
+ direction: "from",
558
+ chainId: CHAINS.BASE.chainId,
559
+ })).toBe(undefined);
560
+ });
561
+ test("returns undefined when initial asset doesn't exist in tokens array", () => {
562
+ expect(getInitialTokenAddressForChain({
563
+ tokens: [
564
+ TOKENS.BASE.USDbC,
565
+ TOKENS.ETHEREUM.WETH,
566
+ TOKENS.BASE["USDC.axl"],
567
+ TOKENS.ETHEREUM.USDC,
568
+ ],
569
+ config: {
570
+ initialAssets: {
571
+ from: TOKENS.ETHEREUM.USDT,
572
+ },
573
+ },
574
+ direction: "from",
575
+ chainId: CHAINS.ETHEREUM.chainId,
576
+ })).toBe(undefined);
577
+ });
578
+ test("returns undefined when initial asset is unavailable token", () => {
579
+ expect(getInitialTokenAddressForChain({
580
+ tokens: [
581
+ TOKENS.AVALANCHE.USDC,
582
+ TOKENS.ETHEREUM.WETH,
583
+ TOKENS.AVALANCHE.AVAX,
584
+ TOKENS.ETHEREUM.USDC,
585
+ ],
586
+ chainId: CHAINS.AVALANCHE.chainId,
587
+ config: {
588
+ initialAssets: {
589
+ from: TOKENS.AVALANCHE.AVAX,
590
+ },
591
+ },
592
+ direction: "from",
593
+ unavailableTokenAddress: TOKENS.AVALANCHE.AVAX.address,
594
+ })).toBe(undefined);
595
+ });
596
+ });
597
+ describe("getInitialChainIdFromConfig", () => {
598
+ test("returns undefined when no initialAssets are provided", () => {
599
+ expect(getInitialChainIdFromConfig({
600
+ config: {},
601
+ direction: "from",
602
+ chains: [CHAINS.ETHEREUM, CHAINS.ARBITRUM, CHAINS.POLYGON],
603
+ })).toBe(undefined);
604
+ });
605
+ test("returns the correct initial chain ID when initial assets are provided", () => {
606
+ expect(getInitialChainIdFromConfig({
607
+ config: {
608
+ initialAssets: {
609
+ from: TOKENS.ETHEREUM.USDT,
610
+ },
611
+ },
612
+ chains: [CHAINS.ARBITRUM, CHAINS.ETHEREUM, CHAINS.POLYGON],
613
+ direction: "from",
614
+ })).toBe(CHAINS.ETHEREUM.chainId);
615
+ expect(getInitialChainIdFromConfig({
616
+ config: {
617
+ initialAssets: {
618
+ to: TOKENS.AVALANCHE.USDC,
619
+ },
620
+ },
621
+ direction: "to",
622
+ chains: [CHAINS.MOONBEAM, CHAINS.ETHEREUM, CHAINS.AVALANCHE],
623
+ })).toBe(CHAINS.AVALANCHE.chainId);
624
+ });
625
+ test("returns undefined when no chains are provided", () => {
626
+ expect(getInitialChainIdFromConfig({
627
+ config: {
628
+ initialAssets: {
629
+ from: TOKENS.ETHEREUM.USDT,
630
+ },
631
+ },
632
+ chains: [],
633
+ direction: "from",
634
+ })).toBe(undefined);
635
+ expect(getInitialChainIdFromConfig({
636
+ config: {
637
+ initialAssets: {
638
+ to: TOKENS.AVALANCHE.USDC,
639
+ },
640
+ },
641
+ direction: "to",
642
+ chains: [],
643
+ })).toBe(undefined);
644
+ });
645
+ test("returns undefined when chains in initial assets are disabled", () => {
646
+ expect(getInitialChainIdFromConfig({
647
+ config: {
648
+ initialAssets: {
649
+ from: TOKENS.ETHEREUM.USDT,
650
+ },
651
+ disabledChains: {
652
+ source: [CHAINS.ETHEREUM.chainId],
653
+ },
654
+ },
655
+ chains: [CHAINS.ETHEREUM, CHAINS.POLYGON],
656
+ direction: "from",
657
+ })).toBe(undefined);
658
+ expect(getInitialChainIdFromConfig({
659
+ config: {
660
+ initialAssets: {
661
+ to: TOKENS.AVALANCHE.USDT,
662
+ },
663
+ disabledChains: {
664
+ destination: [CHAINS.CELO.chainId, CHAINS.AVALANCHE.chainId],
665
+ },
666
+ },
667
+ chains: [CHAINS.ETHEREUM, CHAINS.AVALANCHE],
668
+ direction: "to",
669
+ })).toBe(undefined);
670
+ });
671
+ });
672
+ });
673
+ //# sourceMappingURL=configService.test.js.map