@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,586 @@
1
+ import { ChainType, } from "@0xsquid/squid-types";
2
+ import BigNumber from "bignumber.js";
3
+ import { CHAIN_IDS, destinationAddressResetValue, fallbackAddressResetValue, nativeEvmTokenAddress, } from "../../core/constants";
4
+ import { filterTokensForDestination, getInitialOrDefaultTokenAddressForChain, getTokensForChain, } from "./configService";
5
+ import { convertTokenAmountToUSD } from "./priceService";
6
+ import { isWalletAddressValid } from "./walletService";
7
+ export const assetsBaseUrl = "https://raw.githubusercontent.com/0xsquid/assets/main";
8
+ export const shareSubgraphId = (token1, token2) => {
9
+ return Boolean(token1?.subGraphIds?.some((sgi) => !!token2?.subGraphIds?.includes(sgi)) ||
10
+ token2?.subGraphIds?.some((sgi) => !!token1?.subGraphIds?.includes(sgi)));
11
+ };
12
+ /**
13
+ * Check if `tokenToCheck` shares any subgraph id with the tokens being compared
14
+ * If any of the tokens being compared shares a subgraph id with `tokenToCheck`, it will be sorted first
15
+ * @param a first token being compared
16
+ * @param b second token being compared
17
+ * @param tokenToCheck the token to check subgraph ids against
18
+ */
19
+ export const sortTokensBySharedSubgraphIds = ({ a, b, tokenToCheck, }) => {
20
+ const tokenToCheckSharesIdsWithA = shareSubgraphId(a, tokenToCheck);
21
+ const tokenToCheckSharesIdsWithB = shareSubgraphId(b, tokenToCheck);
22
+ if (tokenToCheckSharesIdsWithA && !tokenToCheckSharesIdsWithB) {
23
+ return -1;
24
+ }
25
+ if (!tokenToCheckSharesIdsWithA && tokenToCheckSharesIdsWithB) {
26
+ return 1;
27
+ }
28
+ return 0;
29
+ };
30
+ /**
31
+ * Filter chains based on provided config
32
+ * - removes disabled chains
33
+ */
34
+ export const filterChains = ({ chains, config, direction, }) => {
35
+ const disabledChainsOnDirection = getDisabledChainsIds({
36
+ config,
37
+ direction,
38
+ });
39
+ if (disabledChainsOnDirection.length === 0)
40
+ return chains;
41
+ // filter chains that are not disabled
42
+ const availableChains = chains.filter((c) => !disabledChainsOnDirection?.includes(c.chainId));
43
+ return availableChains;
44
+ };
45
+ /**
46
+ * Filter tokens based on provided config
47
+ * - removes tokens from disabled chains
48
+ */
49
+ export const filterTokens = ({ tokens, config, direction, }) => {
50
+ const disabledChainsOnDirection = getDisabledChainsIds({
51
+ config,
52
+ direction,
53
+ });
54
+ if (disabledChainsOnDirection.length === 0)
55
+ return tokens;
56
+ // filter tokens that are not disabled
57
+ const availableTokens = tokens.filter((t) => !disabledChainsOnDirection?.includes(t.chainId));
58
+ return availableTokens;
59
+ };
60
+ /**
61
+ * Get disabled chains based on the provided config
62
+ * @returns array of disabled chain ids
63
+ */
64
+ export function getDisabledChainsIds({ config, direction, }) {
65
+ if (!direction)
66
+ return [];
67
+ const parsedDirection = direction === "from" ? "source" : "destination";
68
+ // If we don't have a direction, assume that we won't care about "config.disabledChains"
69
+ const disabledChainsOnDirection = direction
70
+ ? config.disabledChains?.[parsedDirection] ?? []
71
+ : [];
72
+ return Array.from(new Set(disabledChainsOnDirection));
73
+ }
74
+ export function getTokenImage(token) {
75
+ return `${assetsBaseUrl}/images/migration/webp/${getTokenAssetsKey(token)}.webp`;
76
+ }
77
+ /**
78
+ * Destination token address has different logic
79
+ * Some tokens are not available based on the source chain/token
80
+ */
81
+ const handleDestinationAddressOnSwapChange = ({ fromChainId, fromTokenAddress, toTokenAddress, toChainId, swapRoute, chains, tokens, config, }) => {
82
+ const srcToken = tokens.find((t) => t.address === (fromTokenAddress ?? swapRoute?.fromTokenAddress) &&
83
+ t.chainId === fromChainId);
84
+ const destChain = chains.find((c) => c.chainId === (toChainId ?? swapRoute?.toChainId));
85
+ const removeSourceToken = fromChainId === toChainId;
86
+ const destinationTokensFiltered = filterTokensForDestination({
87
+ tokens: getTokensForChain(tokens, toChainId ?? swapRoute?.toChainId),
88
+ selectedDestinationChain: destChain,
89
+ selectedSourceToken: srcToken,
90
+ removeSourceToken,
91
+ });
92
+ const defaultToAddress = getInitialOrDefaultTokenAddressForChain({
93
+ tokens: destinationTokensFiltered,
94
+ config,
95
+ chainId: toChainId ?? swapRoute?.toChainId,
96
+ direction: "to",
97
+ });
98
+ let destinationTokenAddress = toChainId && !toTokenAddress
99
+ ? defaultToAddress
100
+ : toTokenAddress ?? swapRoute?.toTokenAddress;
101
+ const lowerCaseDestinationTokenAddress = destinationTokenAddress?.toLowerCase();
102
+ if (destinationTokensFiltered.find((t) => t.address === lowerCaseDestinationTokenAddress) === undefined) {
103
+ destinationTokenAddress = defaultToAddress;
104
+ }
105
+ return lowerCaseDestinationTokenAddress;
106
+ };
107
+ /**
108
+ * When user changes something from the SwapView
109
+ * param changed can be chains, tokens, or destination address
110
+ *
111
+ * If source chain is changed but source token is undefined, need to find a default token
112
+ * If destination chain is changed but destination token is undefined, need to find a default token
113
+ * If only source token is changed, and destination token is not, and they were the same, then destination token becomes undefined
114
+ * If only destination token is changed but source is not, and they were the same, then source token updates to something else
115
+ *
116
+ */
117
+ export const getNewSwapParamsFromInput = ({ inputParams, initialSwapRoute, tokens, chains, config, queryClient, connectedSourceAddress, }) => {
118
+ const { fromChainId, fromTokenAddress, toChainId, toTokenAddress, destinationAddress, fallbackAddress, depositRefundAddress, } = inputParams;
119
+ const srcChainId = fromChainId ?? initialSwapRoute?.fromChainId;
120
+ const destinationChainId = toChainId ?? initialSwapRoute?.toChainId;
121
+ const defaultFromAddress = getInitialOrDefaultTokenAddressForChain({
122
+ tokens,
123
+ config,
124
+ chainId: srcChainId,
125
+ direction: "from",
126
+ excludeToken: toTokenAddress
127
+ ? {
128
+ address: toTokenAddress,
129
+ chainId: destinationChainId ?? "",
130
+ }
131
+ : undefined,
132
+ fetchCachedBalance: {
133
+ address: connectedSourceAddress,
134
+ queryClient,
135
+ },
136
+ });
137
+ // Source token has been changed but not destination
138
+ const onlySourceChanged = (!!fromChainId || !!fromTokenAddress) && !toChainId && !toTokenAddress;
139
+ const onlySourceChainIdChanged = onlySourceChanged && !fromTokenAddress;
140
+ // Source is set to the same token as previous destination
141
+ const sameNewSourceAndInitialDest = onlySourceChanged &&
142
+ srcChainId === initialSwapRoute?.toChainId &&
143
+ fromTokenAddress === initialSwapRoute?.toTokenAddress;
144
+ // Destination token has been changed but not source
145
+ const onlyDestChanged = (!!toChainId || !!toTokenAddress) && !fromChainId && !fromTokenAddress;
146
+ // Destination is set to the same token as previous source
147
+ const sameNewDestAndInitialSource = onlyDestChanged &&
148
+ destinationChainId === initialSwapRoute?.fromChainId &&
149
+ toTokenAddress === initialSwapRoute?.fromTokenAddress;
150
+ const sourceTokenAddress = sameNewDestAndInitialSource || onlySourceChainIdChanged
151
+ ? defaultFromAddress
152
+ : fromTokenAddress ?? initialSwapRoute?.fromTokenAddress;
153
+ let destinationTokenAddress = undefined;
154
+ if (!sameNewSourceAndInitialDest) {
155
+ if (onlySourceChainIdChanged) {
156
+ // Preserve the destination token when only the source chain is changed
157
+ destinationTokenAddress =
158
+ toTokenAddress ?? initialSwapRoute?.toTokenAddress;
159
+ }
160
+ else {
161
+ destinationTokenAddress = handleDestinationAddressOnSwapChange({
162
+ fromChainId,
163
+ fromTokenAddress,
164
+ toTokenAddress,
165
+ toChainId,
166
+ swapRoute: initialSwapRoute,
167
+ chains,
168
+ tokens,
169
+ config,
170
+ });
171
+ }
172
+ }
173
+ let newDestinationAddress;
174
+ if (destinationAddress?.address === destinationAddressResetValue) {
175
+ newDestinationAddress = undefined;
176
+ }
177
+ else {
178
+ const destAddress = destinationAddress ?? initialSwapRoute?.destinationAddress;
179
+ const isNewDestAddressValid = isWalletAddressValid(chains.find((c) => c.chainId === destinationChainId), destAddress?.address);
180
+ if (isNewDestAddressValid) {
181
+ newDestinationAddress = destAddress;
182
+ }
183
+ }
184
+ let newFallbackAddress;
185
+ if (destinationAddress?.address === destinationAddressResetValue ||
186
+ fallbackAddress === fallbackAddressResetValue) {
187
+ newFallbackAddress = undefined;
188
+ }
189
+ else {
190
+ newFallbackAddress = fallbackAddress ?? initialSwapRoute?.fallbackAddress;
191
+ }
192
+ const newDepositRefundAddress = depositRefundAddress || initialSwapRoute?.depositRefundAddress;
193
+ return {
194
+ fromChainId: srcChainId,
195
+ fromTokenAddress: sourceTokenAddress,
196
+ toChainId: destinationChainId,
197
+ toTokenAddress: destinationTokenAddress,
198
+ destinationAddress: newDestinationAddress,
199
+ fallbackAddress: newFallbackAddress,
200
+ depositRefundAddress: newDepositRefundAddress,
201
+ };
202
+ };
203
+ /* Sorts tokens based on the following order:
204
+ * 1. Native token on chain ID "1" (Ethereum) comes first.
205
+ * 2. Other native tokens are sorted by their chain ID priority based on market cap:
206
+ * - Ethereum (1)
207
+ * - BNB (56)
208
+ * - AVAX (43114)
209
+ * - Polygon (137)
210
+ * - Filecoin (314)
211
+ * - Arbitrum (42161)
212
+ * - Optimism (10)
213
+ * - Fantom (250)
214
+ * 3. Tokens with symbols "USDC", "USDT", and "axlUSDC" are sorted in that order.
215
+ * 4. If none of the above conditions are met, tokens are sorted by their symbol names.
216
+ */
217
+ export const sortAllTokens = (tokenA, tokenB) => {
218
+ const chainIdMcapPriority = [
219
+ "1",
220
+ "56",
221
+ "43114",
222
+ "137",
223
+ "314",
224
+ "42161",
225
+ "10",
226
+ "250", // Fantom
227
+ ];
228
+ const getChainIdPriority = (chainId) => {
229
+ const index = chainIdMcapPriority.indexOf(chainId);
230
+ return index === -1 ? Number.MAX_SAFE_INTEGER : index;
231
+ };
232
+ const isNative = (token) => {
233
+ return token.address.toLowerCase() === nativeEvmTokenAddress;
234
+ };
235
+ if (isNative(tokenA) && isNative(tokenB)) {
236
+ return (getChainIdPriority(tokenA.chainId) - getChainIdPriority(tokenB.chainId));
237
+ }
238
+ if (isNative(tokenA)) {
239
+ return -1;
240
+ }
241
+ if (isNative(tokenB)) {
242
+ return 1;
243
+ }
244
+ const tokenPriority = ["USDC", "USDT", "axlUSDC"];
245
+ const indexA = tokenPriority.indexOf(tokenA.symbol);
246
+ const indexB = tokenPriority.indexOf(tokenB.symbol);
247
+ if (indexA !== -1 && indexB !== -1) {
248
+ return indexA - indexB;
249
+ }
250
+ if (indexA !== -1) {
251
+ return -1;
252
+ }
253
+ if (indexB !== -1) {
254
+ return 1;
255
+ }
256
+ return 0;
257
+ };
258
+ export const findToken = (tokens, chainId, address) => tokens.find((t) => t.chainId === chainId && t.address === address);
259
+ export const findNativeToken = (tokens, chain) => tokens.find((t) => t.symbol.toUpperCase() === chain?.nativeCurrency.symbol.toUpperCase() &&
260
+ t.chainId == chain?.chainId);
261
+ export const normalizeIbcAddress = (address) => {
262
+ if (!address.toLowerCase().startsWith("ibc/")) {
263
+ return address;
264
+ }
265
+ const [prefix, denom] = address.split("/");
266
+ return `${prefix.toLowerCase()}/${denom.toUpperCase()}`;
267
+ };
268
+ export const areSameCosmosAddress = (addressA, addressB) => {
269
+ const normalizedAddressA = normalizeIbcAddress(addressA);
270
+ const normalizedAddressB = normalizeIbcAddress(addressB);
271
+ return normalizedAddressA === normalizedAddressB;
272
+ };
273
+ // Native tokens that can have wrapped versions
274
+ const nativeWrappedPairs = [
275
+ "ETH",
276
+ "BTC",
277
+ "FIL",
278
+ "BNB",
279
+ "AVAX",
280
+ "POL",
281
+ "FTM",
282
+ "IMX",
283
+ "KAVA",
284
+ "GLMR",
285
+ "CELO",
286
+ ];
287
+ /**
288
+ * Selects the default information for a group of tokens.
289
+ * Prioritizes native tokens (EVM or Cosmos), then falls back to the first unique token symbol.
290
+ */
291
+ function selectGroupDefaultInfo(tokens) {
292
+ // Check for native EVM token
293
+ const nativeToken = tokens.find((token) => token.address.toLowerCase() === nativeEvmTokenAddress.toLowerCase());
294
+ if (nativeToken) {
295
+ return {
296
+ symbol: nativeToken.symbol.split(".")[0],
297
+ logoURI: getTokenImage(nativeToken) || "",
298
+ name: nativeToken.name.split(".")[0],
299
+ };
300
+ }
301
+ // Check for native Cosmos token
302
+ // Example ATOM address is "uatom"
303
+ const cosmosNativeToken = tokens.find((token) => !token.address.startsWith("0x") && !token.address.startsWith("ibc/"));
304
+ if (cosmosNativeToken) {
305
+ return {
306
+ symbol: cosmosNativeToken.symbol.split(".")[0],
307
+ logoURI: getTokenImage(cosmosNativeToken) || "",
308
+ name: cosmosNativeToken.name.split(".")[0],
309
+ };
310
+ }
311
+ // Sanitize token symbols by removing everything after the first dot
312
+ const sanitizedTokens = tokens.map((token) => ({
313
+ ...token,
314
+ symbol: token.symbol.split(".")[0],
315
+ }));
316
+ // Find the first token with a unique sanitized symbol
317
+ const firstUniqueToken = sanitizedTokens.find((token, index, self) => self.findIndex((t) => t.symbol === token.symbol) === index);
318
+ return {
319
+ symbol: firstUniqueToken?.symbol || "",
320
+ logoURI: getTokenImage(firstUniqueToken) || "",
321
+ name: firstUniqueToken?.name.split(".")[0] || "",
322
+ };
323
+ }
324
+ /**
325
+ * Groups tokens based on their properties (symbol, coingeckoId)
326
+ * Some custom logic to handle native/wrapped pairs
327
+ *
328
+ * @param tokens - Array of TokenWithBalance objects to be grouped
329
+ * @param chainType - Optional parameter to filter tokens by chain type ('evm' or 'cosmos')
330
+ * @returns Object containing grouped tokens and ungrouped tokens
331
+ */
332
+ export const groupTokensBySymbol = (tokens, chainType) => {
333
+ const groups = {};
334
+ // Filter tokens by chain type if specified
335
+ const filteredTokens = chainType
336
+ ? tokens.filter((token) => token.type === chainType)
337
+ : tokens;
338
+ // First pass: group by coingeckoId or symbol
339
+ filteredTokens.forEach((token) => {
340
+ const groupKey = token.coingeckoId || token.symbol.split(".")[0];
341
+ if (!groups[groupKey]) {
342
+ groups[groupKey] = {
343
+ symbol: "",
344
+ logoURI: "",
345
+ name: "",
346
+ tokens: [],
347
+ totalBalance: "0",
348
+ totalBalanceUsd: "0",
349
+ balance: "0",
350
+ chainId: "",
351
+ chainLogoURI: "",
352
+ };
353
+ }
354
+ groups[groupKey].tokens.push(token);
355
+ groups[groupKey].totalBalance = new BigNumber(groups[groupKey].totalBalance)
356
+ .plus(token.balance)
357
+ .toString();
358
+ const tokenUsdValue = convertTokenAmountToUSD(token.balance, token.usdPrice || 0);
359
+ groups[groupKey].totalBalanceUsd = new BigNumber(groups[groupKey].totalBalanceUsd ?? "0")
360
+ .plus(tokenUsdValue)
361
+ .toString();
362
+ });
363
+ // Second pass: merge groups based on native/wrapped pairs
364
+ const mergedGroups = {};
365
+ Object.entries(groups).forEach(([key, group]) => {
366
+ const baseSymbol = group.tokens[0].symbol.split(".")[0];
367
+ let mergeKey = key;
368
+ // Handle native/wrapped pairs
369
+ if (nativeWrappedPairs.includes(baseSymbol) ||
370
+ (baseSymbol.startsWith("W") &&
371
+ nativeWrappedPairs.includes(baseSymbol.slice(1)))) {
372
+ mergeKey = baseSymbol.replace(/^W/, "");
373
+ }
374
+ // Merge groups or create a new one if it doesn't exist
375
+ if (!mergedGroups[mergeKey]) {
376
+ mergedGroups[mergeKey] = { ...group };
377
+ }
378
+ else {
379
+ // Combine tokens and sum up total balance for existing groups
380
+ mergedGroups[mergeKey].tokens.push(...group.tokens);
381
+ mergedGroups[mergeKey].totalBalance = new BigNumber(mergedGroups[mergeKey].totalBalance)
382
+ .plus(group.totalBalance)
383
+ .toString();
384
+ // Add this line to properly merge USD values
385
+ mergedGroups[mergeKey].totalBalanceUsd = new BigNumber(mergedGroups[mergeKey].totalBalanceUsd ?? "0")
386
+ .plus(group.totalBalanceUsd ?? "0")
387
+ .toString();
388
+ }
389
+ });
390
+ // Final pass: set group info and separate single-token groups
391
+ const finalGroups = [];
392
+ const ungrouped = [];
393
+ Object.values(mergedGroups).forEach((group) => {
394
+ if (group.tokens.length === 1) {
395
+ ungrouped.push(group.tokens[0]);
396
+ }
397
+ else {
398
+ const defaultInfo = selectGroupDefaultInfo(group.tokens);
399
+ finalGroups.push({ ...group, ...defaultInfo });
400
+ }
401
+ });
402
+ return { grouped: finalGroups, ungrouped };
403
+ };
404
+ /**
405
+ * Groups tokens based on their chainId
406
+ *
407
+ * @param tokens - Array of TokenWithBalance objects to be grouped
408
+ * @param chains - Array of ChainData objects to find chain information
409
+ * @returns Array of TokenGroup objects
410
+ */
411
+ export const groupTokensByChainId = (tokens, chains) => {
412
+ const groups = {};
413
+ tokens.forEach((token) => {
414
+ const chainData = chains.find((chain) => chain.chainId === token.chainId);
415
+ const groupKey = token.chainId;
416
+ if (!groups[groupKey]) {
417
+ groups[groupKey] = {
418
+ symbol: chainData?.nativeCurrency.symbol || "",
419
+ logoURI: chainData?.chainIconURI || "",
420
+ name: chainData?.networkName || "",
421
+ tokens: [],
422
+ totalBalance: "0",
423
+ totalBalanceUsd: "0",
424
+ balance: "0",
425
+ chainId: token.chainId,
426
+ chainLogoURI: chainData?.chainIconURI || "",
427
+ };
428
+ }
429
+ groups[groupKey].tokens.push(token);
430
+ groups[groupKey].totalBalance = new BigNumber(groups[groupKey].totalBalance)
431
+ .plus(token.balance)
432
+ .toString();
433
+ // Only add to USD total if token has a valid price
434
+ if (token.usdPrice && token.usdPrice > 0) {
435
+ const tokenUsdValue = convertTokenAmountToUSD(token.balance, token.usdPrice);
436
+ groups[groupKey].totalBalanceUsd = new BigNumber(groups[groupKey].totalBalanceUsd ?? "0")
437
+ .plus(tokenUsdValue)
438
+ .toString();
439
+ }
440
+ });
441
+ return Object.values(groups);
442
+ };
443
+ const CELO_CHAIN_ID = "42220";
444
+ // remove some tokens based on address & chainid
445
+ // Some tokens will be returned by backend but should be hidden
446
+ // For example for celo, native token & custom address tokens are returned, so we should hide the native one but keep receiving it to use gas balance
447
+ export const filterViewableTokens = (tokens) => {
448
+ const disabledTokens = [
449
+ { chainId: CELO_CHAIN_ID, address: nativeEvmTokenAddress },
450
+ ];
451
+ return (tokens.filter((token) => !disabledTokens.some((disabledToken) => disabledToken.chainId === token.chainId &&
452
+ disabledToken.address.toLowerCase() === token.address.toLowerCase())) ?? []);
453
+ };
454
+ export const getSecretNetworkBalances = async (chainData, cosmosAddress, squidTokens, keplrTypeWallet) => {
455
+ const squidSecretTokens = squidTokens.filter((t) => t.chainId === CHAIN_IDS.SECRET);
456
+ const { fetchAllSecretBalances } = await import("../external/secretService");
457
+ return fetchAllSecretBalances(chainData, cosmosAddress, squidSecretTokens, keplrTypeWallet);
458
+ };
459
+ export function getTokenAssetsKey(token) {
460
+ // Remove slashes and colons and lowercase token address
461
+ return `${token?.chainId}_${token?.address?.replace(/[/\:]/g, "").toLowerCase()}`;
462
+ }
463
+ export async function fetchAssetsColors() {
464
+ try {
465
+ const response = await fetch(`${assetsBaseUrl}/scripts/update-tokens/colors.json`);
466
+ const assetsColors = await response.json();
467
+ const isValidResponse = typeof assetsColors === "object" &&
468
+ typeof assetsColors.chains === "object" &&
469
+ typeof assetsColors.tokens === "object";
470
+ if (!isValidResponse) {
471
+ throw new Error("Invalid assets colors response");
472
+ }
473
+ return assetsColors;
474
+ }
475
+ catch (error) {
476
+ console.error("Error fetching colors file:", error);
477
+ return {
478
+ chains: {},
479
+ tokens: {},
480
+ };
481
+ }
482
+ }
483
+ export function initializeSquidWithAssetsColors(squid, assetsColors) {
484
+ const evmosChainIds = squid.chains.filter(isEvmosChain).map((c) => c.chainId);
485
+ squid.tokens = squid.tokens.map((token) => {
486
+ const isEvmosToken = evmosChainIds.includes(token.chainId);
487
+ return {
488
+ ...token,
489
+ address: isEvmosToken
490
+ ? // We need evm standard addresses to fetch balances and other things
491
+ evmosAddressToEvmAddress(token.address)
492
+ : token.address,
493
+ originalAddress: isEvmosToken
494
+ ? // when getting a route we need to send the original evmos address to the backend
495
+ // so here we use token.address as fallback,
496
+ // to avoid sending the parsed address (evmosAddressToEvmAddress(token.address))
497
+ // TODO: this will be fixed in the backend
498
+ token.originalAddress || token.address
499
+ : token.originalAddress,
500
+ type: isEvmosToken ? ChainType.EVM : token.type,
501
+ bgColor: assetsColors.tokens[getTokenAssetsKey(token)]?.bgColor,
502
+ textColor: assetsColors.tokens[getTokenAssetsKey(token)]?.textColor,
503
+ };
504
+ });
505
+ squid.chains = squid.chains.map((chain) => {
506
+ const bgColor = assetsColors.chains[chain.chainId]?.bgColor;
507
+ // convert evmos cosmos chains to evm chains
508
+ // TODO: this will be fixed in the backend
509
+ if (isEvmosChain(chain)) {
510
+ const evmChain = convertEvmosToEvmChain(chain);
511
+ return {
512
+ ...evmChain,
513
+ bgColor,
514
+ };
515
+ }
516
+ return {
517
+ ...chain,
518
+ bgColor,
519
+ };
520
+ });
521
+ }
522
+ export function isEmptyObject(obj) {
523
+ if (!obj)
524
+ return true;
525
+ return Object.values(obj).every((value) => value === undefined);
526
+ }
527
+ export function isEvmosChain(chain) {
528
+ return chain?.isEvmos || false;
529
+ }
530
+ const evmosNativeTokenAddressesMap = {
531
+ nir: nativeEvmTokenAddress,
532
+ mar: nativeEvmTokenAddress,
533
+ gas: nativeEvmTokenAddress,
534
+ };
535
+ /**
536
+ * Converts an evmos address (erc20/0x123...abc)
537
+ * to an evm standard address (0x123...abc)
538
+ *
539
+ * Also gas tokens on evmos chains have non-standard EVM addresses
540
+ * so we need to map them to the native EVM token address
541
+ */
542
+ export function evmosAddressToEvmAddress(address) {
543
+ if (evmosNativeTokenAddressesMap[address]) {
544
+ return evmosNativeTokenAddressesMap[address];
545
+ }
546
+ return address.replace(/^erc20\//, "");
547
+ }
548
+ function convertEvmosToEvmChain(cosmosChain) {
549
+ return {
550
+ // @ts-expect-error - isEvmos is not a property on EvmChain
551
+ // We still need this attribute in evmos chains
552
+ // even after they are converted to evm chains, to perform certain checks
553
+ // e.g checking ics20 allowance instead of erc20 allowance
554
+ isEvmos: true,
555
+ chainType: ChainType.EVM,
556
+ axelarChainName: cosmosChain.axelarChainName,
557
+ blockExplorerUrls: cosmosChain.blockExplorerUrls,
558
+ chainId: cosmosChain.chainId,
559
+ bridges: cosmosChain.bridges,
560
+ chainIconURI: cosmosChain.chainIconURI,
561
+ enableBoostByDefault: cosmosChain.enableBoostByDefault,
562
+ chainNativeContracts: {
563
+ ensRegistry: "",
564
+ multicall: "",
565
+ usdcToken: "",
566
+ wrappedNativeToken: "",
567
+ },
568
+ internalRpc: cosmosChain.internalRpc,
569
+ nativeCurrency: {
570
+ decimals: cosmosChain.nativeCurrency.decimals,
571
+ name: cosmosChain.nativeCurrency.name,
572
+ symbol: cosmosChain.nativeCurrency.symbol,
573
+ icon: cosmosChain.nativeCurrency.icon,
574
+ },
575
+ networkName: cosmosChain.networkName,
576
+ rpc: cosmosChain.rpc,
577
+ networkIdentifier: cosmosChain.networkIdentifier,
578
+ sameChainSwapsSupported: cosmosChain.sameChainSwapsSupported,
579
+ squidContracts: cosmosChain.squidContracts,
580
+ swapAmountForGas: cosmosChain.swapAmountForGas,
581
+ boostSupported: cosmosChain.boostSupported,
582
+ compliance: cosmosChain.compliance,
583
+ interchainService: cosmosChain.interchainService,
584
+ };
585
+ }
586
+ //# sourceMappingURL=assetsService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetsService.js","sourceRoot":"","sources":["../../../src/services/internal/assetsService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { address as btcAddressLib } from "bitcoinjs-lib";
2
+ import { KeplrConnector, PhantomConnector, UnisatConnector, } from "../../core/connectors/bitcoin/wallets";
3
+ export const connectBitcoinWallet = async (wallet) => {
4
+ switch (wallet.connectorId) {
5
+ case "phantom": {
6
+ const phantom = new PhantomConnector();
7
+ const { address } = await phantom.requestAccount();
8
+ return {
9
+ address,
10
+ wallet,
11
+ };
12
+ }
13
+ case "unisat": {
14
+ const unisat = new UnisatConnector();
15
+ const { address } = await unisat.requestAccount();
16
+ return {
17
+ address,
18
+ wallet,
19
+ };
20
+ }
21
+ case "keplr": {
22
+ const keplr = new KeplrConnector();
23
+ const { address } = await keplr.requestAccount();
24
+ return {
25
+ address,
26
+ wallet,
27
+ };
28
+ }
29
+ default:
30
+ throw new Error("Invalid Bitcoin wallet");
31
+ }
32
+ };
33
+ // Validation taken from Squid API repo
34
+ export const isBitcoinAddressValid = (address) => {
35
+ try {
36
+ if (address.startsWith("bc1p")) {
37
+ // this is a bitcoin taproot address type, it has different encoding than other 3 address types
38
+ // and requires different validation logic
39
+ const decoded = btcAddressLib.fromBech32(address);
40
+ return decoded.prefix === "bc" && decoded.version === 1;
41
+ }
42
+ else {
43
+ btcAddressLib.toOutputScript(address);
44
+ return true;
45
+ }
46
+ }
47
+ catch (e) {
48
+ return false;
49
+ }
50
+ };
51
+ //# sourceMappingURL=bitcoinService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitcoinService.js","sourceRoot":"","sources":["../../../src/services/internal/bitcoinService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,uCAAuC,CAAC;AAG/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,MAAqB,EAC+B,EAAE;IACtD,QAAQ,MAAM,CAAC,WAAW,EAAE;QAC1B,KAAK,SAAS,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACvC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAEnD,OAAO;gBACL,OAAO;gBACP,MAAM;aACP,CAAC;SACH;QACD,KAAK,QAAQ,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAElD,OAAO;gBACL,OAAO;gBACP,MAAM;aACP,CAAC;SACH;QACD,KAAK,OAAO,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;YAEjD,OAAO;gBACL,OAAO;gBACP,MAAM;aACP,CAAC;SACH;QACD;YACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;KAC7C;AACH,CAAC,CAAC;AAEF,uCAAuC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAW,EAAE;IAChE,IAAI;QACF,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YAC9B,+FAA+F;YAC/F,0CAA0C;YAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAClD,OAAO,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;SACzD;aAAM;YACL,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC;SACb;KACF;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,KAAK,CAAC;KACd;AACH,CAAC,CAAC"}