@rango-dev/widget-embedded 0.1.10-next.95 → 0.1.10-next.98
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.
- package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
- package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
- package/dist/widget-embedded.cjs.development.js +11 -5
- package/dist/widget-embedded.cjs.development.js.map +1 -1
- package/dist/widget-embedded.cjs.production.min.js +11 -5
- package/dist/widget-embedded.cjs.production.min.js.map +1 -1
- package/dist/widget-embedded.esm.js +11 -5
- package/dist/widget-embedded.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/pages/ConfirmSwapPage.tsx +5 -1
- package/src/pages/SwapDetailsPage.tsx +12 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-embedded.cjs.development.js","sources":["../src/constants/navigationRoutes.ts","../src/constants/numbers.ts","../src/utils/common.ts","../src/utils/numbers.ts","../src/utils/wallets.ts","../src/utils/swap.ts","../src/utils/routing.ts","../src/store/selectors.ts","../src/services/httpService.ts","../src/constants/swapSettings.ts","../src/store/meta.ts","../src/store/settings.ts","../src/store/wallets.ts","../src/store/bestRoute.ts","../src/constants/searchParams.ts","../src/store/ui.ts","../src/components/UpdateUrl.tsx","../src/components/HeaderButtons.tsx","../src/components/Header.tsx","../src/components/TokenInfo.tsx","../src/components/BottomLogo.tsx","../src/components/SwitchFromAndTo.tsx","../src/components/Footer.tsx","../src/constants/errors.ts","../src/pages/Home.tsx","../src/components/AppRouter.tsx","../src/components/ChangeSlippageButton.tsx","../src/components/warnings/HighSlippageWarning.tsx","../src/components/warnings/ConfirmSwapExtraMessages.tsx","../src/hooks/useNavigateBack.ts","../src/types/routing.ts","../src/components/warnings/MinRequiredSlippage.tsx","../src/components/ConfirmSwapErrors.tsx","../src/components/warnings/BalanceWarnings.tsx","../src/components/ConfirmSwapWarnings.tsx","../src/hooks/useConfirmSwap.ts","../src/pages/ConfirmSwapPage.tsx","../src/utils/queue.ts","../src/pages/HistoryPage.tsx","../src/pages/LiquiditySourcesPage.tsx","../src/pages/SelectChainPage.tsx","../src/pages/SelectTokenPage.tsx","../src/pages/SettingsPage.tsx","../src/pages/WalletsPage.tsx","../src/pages/ConfirmWalletsPage.tsx","../src/hooks/useCopyToClipboard.ts","../src/pages/SwapDetailsPage.tsx","../src/components/AppRoutes.tsx","../src/components/Layout.tsx","../src/globalStyles.ts","../src/hooks/usePrevious.ts","../src/hooks/useTheme.ts","../src/hooks/useSelectLanguage.ts","../src/i18n.js","../src/QueueManager.tsx","../src/lib.tsx"],"sourcesContent":["export const navigationRoutes = {\n home: '/',\n fromChain: '/from-chain',\n fromToken: '/from-token',\n toChain: '/to-chain',\n toToken: '/to-token',\n settings: '/settings',\n liquiditySources: '/settings/liquidity-sources',\n swaps: '/swaps',\n wallets: '/wallets',\n confirmSwap: '/confirm-swap',\n confirmWallets: '/confirm-wallets',\n swapDetails: '/swaps/:requestId',\n};\n","import BigNumber from 'bignumber.js';\n\nexport const ZERO = new BigNumber(0);\n","export function removeDuplicateFrom<T>(array: T[]): T[] {\n return Array.from(new Set(array));\n}\n\nexport function areEqual(\n array1: (number | string)[],\n array2: (number | string)[]\n) {\n return (\n array1.length === array2.length && array1.every((v, i) => v === array2[i])\n );\n}\nexport function shadeColor(color: string, percent: number) {\n var R = parseInt(color.substring(1, 3), 16);\n var G = parseInt(color.substring(3, 5), 16);\n var B = parseInt(color.substring(5, 7), 16);\n\n R = (R * (100 + percent)) / 100;\n G = (G * (100 + percent)) / 100;\n B = (B * (100 + percent)) / 100;\n\n R = R < 255 ? R : 255;\n G = G < 255 ? G : 255;\n B = B < 255 ? B : 255;\n\n R = Math.round(R);\n G = Math.round(G);\n B = Math.round(B);\n\n var RR = R.toString(16).length == 1 ? '0' + R.toString(16) : R.toString(16);\n var GG = G.toString(16).length == 1 ? '0' + G.toString(16) : G.toString(16);\n var BB = B.toString(16).length == 1 ? '0' + B.toString(16) : B.toString(16);\n\n return '#' + RR + GG + BB;\n}\n","import { BigNumber } from 'bignumber.js';\nimport { BestRouteResponse } from 'rango-sdk';\n\nexport const percentToString = (p: number, fractions = 0): string =>\n (p * 100).toFixed(fractions);\nexport const secondsToString = (s: number): string => {\n const seconds = (s % 60).toString().padStart(2, '0');\n const minutes = parseInt((s / 60).toString())\n .toString()\n .padStart(2, '0');\n return `${minutes}:${seconds}`;\n};\n\nexport const numberToString = (\n number: BigNumber | string | null,\n minDecimals: number | null = null,\n maxDecimals: number | null = null\n): string => {\n if (number === null) return '';\n if (number === '') return '';\n const n = new BigNumber(number);\n const roundingMode = 1;\n let maxI = 1000;\n for (let i = 0; i < 60; i++) {\n if (new BigNumber(n.toFixed(i, roundingMode)).eq(n)) {\n maxI = i;\n break;\n }\n }\n\n if (n.gte(10000)) return n.toFormat(0, roundingMode);\n if (n.gte(1000))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))\n ),\n roundingMode\n );\n if (n.gte(100))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))\n ),\n roundingMode\n );\n if (n.gte(1))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 2))\n ),\n roundingMode\n );\n if (n.gte(0.01))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 4))\n ),\n roundingMode\n );\n for (let i = minDecimals || 4; i < 17; i++)\n if (n.gte(Math.pow(10, -i)))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, i))\n ),\n roundingMode\n );\n if (n.isEqualTo(0)) return '0';\n\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 8))),\n roundingMode\n );\n};\n\nexport const convertBigNumberToHex = (\n value: BigNumber,\n decimals: number\n): string => {\n return '0x' + value.shiftedBy(decimals).toString(16);\n};\n\nexport const uint8ArrayToHex = (buffer: Uint8Array): string => {\n // buffer is an ArrayBuffer\n // @ts-ignore\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n};\n\nexport function dollarToConciseString(num: number | undefined): string {\n if (!num) return '-';\n if (num < 1) return ' < 1$';\n if (num < 1000) return numberToString(new BigNumber(num)) + '$';\n if (num < 10_000) return parseInt((num / 100).toString()) / 10 + 'K';\n if (num < 1_000_000) return parseInt((num / 1000).toString()) + 'K';\n if (num < 100_000_000) return parseInt((num / 100000).toString()) / 10 + 'M';\n return parseInt((num / 1000000).toString()) + 'M';\n}\n\nexport function removeExtraDecimals(num: string, maxDecimals: number): string {\n try {\n if (!num.includes('.')) return num;\n const [b, f] = num.split('.');\n if (f && f.length > maxDecimals) {\n return `${b}.${f.substring(0, maxDecimals)}`;\n }\n return num;\n } catch (e) {\n return num;\n }\n}\n\nexport const totalArrivalTime = (data: BestRouteResponse | null) =>\n data?.result?.swaps?.reduce((a, b) => a + b.estimatedTimeInSeconds, 0) || 0;\n\nexport const rawFees = (data: BestRouteResponse): string =>\n (\n data?.result?.swaps?.flatMap((s) =>\n s.fee.map((f) => ({ swapperId: s.swapperId, fee: f }))\n ) || []\n )\n .reduce((partialSum, a) => partialSum + parseFloat(a.fee.amount), 0)\n .toFixed(3);\n\nexport const decimalNumber = (number = '0', toFixed: number) =>\n parseFloat(number).toFixed(toFixed);\n\nexport const containsText = (text: string, searchText: string) =>\n text.toLowerCase().indexOf(searchText.toLowerCase()) > -1;\n","import {\n getCosmosExperimentalChainInfo,\n isEvmAddress,\n KEPLR_COMPATIBLE_WALLETS,\n Network,\n WalletState,\n WalletType,\n detectInstallLink,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\n\nimport {\n WalletInfo as ModalWalletInfo,\n WalletState as WalletStatus,\n SelectableWallet,\n} from '@rango-dev/ui';\nimport {\n BestRouteResponse,\n BlockchainMeta,\n Token,\n WalletDetail,\n} from 'rango-sdk';\nimport { isCosmosBlockchain } from 'rango-types';\nimport { readAccountAddress } from '@rango-dev/wallets-core';\nimport { Account, Balance, TokenBalance } from '../store/wallets';\nimport { numberToString } from './numbers';\nimport BigNumber from 'bignumber.js';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { ZERO } from '../constants/numbers';\n\nexport function getStateWallet(state: WalletState): WalletStatus {\n switch (true) {\n case state.connected:\n return WalletStatus.CONNECTED;\n case state.connecting:\n return WalletStatus.CONNECTING;\n case !state.installed:\n return WalletStatus.NOT_INSTALLED;\n default:\n return WalletStatus.DISCONNECTED;\n }\n}\n\nexport const excludedWallets = [\n WalletType.UNKNOWN,\n WalletType.TERRA_STATION,\n WalletType.LEAP,\n];\n\nexport function getlistWallet(\n getState: (type: WalletType) => WalletState,\n getWalletInfo: (type: WalletType) => WalletInfo,\n list: WalletType[]\n): ModalWalletInfo[] {\n const excludedWallets = [\n WalletType.UNKNOWN,\n WalletType.TERRA_STATION,\n WalletType.LEAP,\n ];\n\n return list\n .filter((wallet) => !excludedWallets.includes(wallet))\n .map((type) => {\n const {\n name,\n img: image,\n installLink,\n showOnMobile,\n } = getWalletInfo(type);\n const state = getStateWallet(getState(type));\n return {\n name,\n image,\n installLink: detectInstallLink(installLink),\n state,\n type,\n showOnMobile: typeof showOnMobile === 'undefined' ? false : true,\n };\n });\n}\n\nexport function walletAndSupportedChainsNames(\n supportedChains: BlockchainMeta[]\n): Network[] | null {\n if (!supportedChains) return null;\n let walletAndSupportedChainsNames: Network[] = [];\n walletAndSupportedChainsNames = supportedChains.map(\n (blockchainMeta) => blockchainMeta.name as Network\n );\n\n return walletAndSupportedChainsNames;\n}\n\nexport function prepareAccountsForWalletStore(\n wallet: WalletType,\n accounts: string[],\n evmBasedChains: string[],\n supportedChainNames: Network[] | null\n): Account[] {\n const result: Account[] = [];\n\n function addAccount(network: Network, address: string) {\n const newAccount: Account = {\n address,\n chain: network,\n walletType: wallet,\n };\n\n result.push(newAccount);\n }\n\n const supportedChains = supportedChainNames || [];\n\n accounts.forEach((account) => {\n const { address, network } = readAccountAddress(account);\n\n const hasLimitation = supportedChains.length > 0;\n const isSupported = supportedChains.includes(network);\n const isUnknown = network === Network.Unknown;\n const notSupportedNetworkByWallet =\n hasLimitation && !isSupported && !isUnknown;\n\n // Here we check given `network` is not supported by wallet\n // And also the network is known.\n if (notSupportedNetworkByWallet) return;\n\n // In some cases we can handle unknown network by checking its address\n // pattern and act on it.\n // Example: showing our evm compatible netwrok when the uknown network is evem.\n // Otherwise, we stop executing this function.\n const isUknownAndEvmBased =\n network === Network.Unknown && isEvmAddress(address);\n if (isUnknown && !isUknownAndEvmBased) return;\n\n const isEvmBasedChain = evmBasedChains.includes(network);\n\n // If it's an evm network, we will add the address to all the evm chains.\n if (isEvmBasedChain || isUknownAndEvmBased) {\n // all evm chains are not supported in wallets, so we are adding\n // only to those that are supported by wallet.\n const evmChainsSupportedByWallet = supportedChains.filter((chain) =>\n evmBasedChains.includes(chain)\n );\n\n evmChainsSupportedByWallet.forEach((network) => {\n // EVM addresses are not case sensetive.\n // Some wallets like Binance-chain return some letters in uppercase which produces bugs in our wallet state.\n addAccount(network, address.toLowerCase());\n });\n } else {\n addAccount(network, address);\n }\n });\n\n return result;\n}\n\nexport function getRequiredChains(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport interface SelectedWallet extends Account {}\ntype Blockchain = { name: string; accounts: Balance[] };\n\nexport function getSelectableWallets(\n accounts: Account[],\n selectedWallets: SelectedWallet[],\n getWalletInfo: (type: WalletType) => WalletInfo\n): SelectableWallet[] {\n const connectedWallets: SelectableWallet[] = accounts.map((account) => ({\n address: account.address,\n walletType: account.walletType,\n chain: account.chain,\n image: getWalletInfo(account.walletType).img,\n name: getWalletInfo(account.walletType).name,\n selected: !!selectedWallets.find(\n (wallet) =>\n wallet.chain === account.chain &&\n wallet.walletType === account.walletType\n ),\n }));\n\n return connectedWallets;\n}\n\nexport function getBalanceFromWallet(\n balances: Balance[],\n chain: string,\n symbol: string,\n address: string | null\n): TokenBalance | null {\n if (balances.length === 0) return null;\n\n const selectedChainBalances = balances.filter(\n (balance) => balance.chain === chain\n );\n if (selectedChainBalances.length === 0) return null;\n\n return (\n selectedChainBalances\n .map(\n (a) =>\n a.balances?.find(\n (bl) =>\n (address !== null && bl.address === address) ||\n (address === null &&\n bl.address === address &&\n bl.symbol === symbol)\n ) || null\n )\n .filter((b) => b !== null)\n .sort(\n (a, b) => parseFloat(b?.amount || '0') - parseFloat(a?.amount || '1')\n )\n .find(() => true) || null\n );\n}\n\nexport function isAccountAndBalanceMatched(account: Account, balance: Balance) {\n return (\n account.address === balance.address &&\n account.chain === balance.chain &&\n account.walletType === balance.walletType\n );\n}\n\nexport function makeBalanceFor(\n account: Account,\n retrivedBalance: WalletDetail,\n tokens: Token[]\n): Balance {\n const {\n address,\n blockChain: chain,\n explorerUrl,\n balances = [],\n } = retrivedBalance;\n return {\n address,\n chain,\n loading: false,\n error: false,\n explorerUrl,\n walletType: account.walletType,\n balances:\n balances?.map((tokenBalance) => ({\n chain,\n symbol: tokenBalance.asset.symbol,\n ticker: tokenBalance.asset.symbol,\n address: tokenBalance.asset.address || null,\n rawAmount: tokenBalance.amount.amount,\n decimal: tokenBalance.amount.decimals,\n amount: new BigNumber(tokenBalance.amount.amount)\n .shiftedBy(-tokenBalance.amount.decimals)\n .toFixed(),\n logo: '',\n usdPrice:\n getUsdPrice(\n chain,\n tokenBalance.asset.symbol,\n tokenBalance.asset.address,\n tokens\n ) || null,\n })) || [],\n };\n}\n\nexport function resetBalanceState(balance: Balance): Balance {\n return { ...balance, loading: false, error: true };\n}\n\nexport const calculateWalletUsdValue = (balance: Balance[]) => {\n const uniqueAccountAddresses = new Set<string | null>();\n const uniqueBalane: Balance[] = balance?.reduce(\n (acc: Balance[], current: Balance) => {\n return acc.findIndex(\n (i) => i.address === current.address && i.chain === current.chain\n ) === -1\n ? [...acc, current]\n : acc;\n },\n []\n );\n\n const modifiedWalletBlockchains = uniqueBalane?.map((chain) => {\n const modifiedWalletBlockchain: Blockchain = {\n name: chain.chain,\n accounts: [],\n };\n if (!uniqueAccountAddresses.has(chain.address)) {\n uniqueAccountAddresses.add(chain.address);\n }\n uniqueAccountAddresses.forEach((accountAddress) => {\n if (chain.address === accountAddress)\n modifiedWalletBlockchain.accounts.push(chain);\n });\n return modifiedWalletBlockchain;\n });\n const total = numberToString(\n modifiedWalletBlockchains\n ?.flatMap((b) => b.accounts)\n ?.flatMap((a) => a?.balances)\n ?.map((b) =>\n new BigNumber(b?.amount || ZERO).multipliedBy(b?.usdPrice || 0)\n )\n ?.reduce((a, b) => a.plus(b), ZERO) || ZERO\n ).toString();\n\n return numberWithThousandSeperator(total);\n};\n\nfunction numberWithThousandSeperator(number: string | number): string {\n var parts = number.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n}\n\nexport const sortTokens = (tokens: TokenWithBalance[]): TokenWithBalance[] => {\n let walletConnected = !!tokens.some((token) => token.balance);\n if (!walletConnected) {\n return tokens\n .filter((token) => !token.address)\n .concat(\n tokens.filter((token) => token.address && !token.isSecondaryCoin),\n tokens.filter((token) => token.isSecondaryCoin)\n );\n }\n\n return tokens\n .filter((token) => !!token.balance)\n .sort(\n (tokenA, tokenB) =>\n parseFloat(tokenB.balance?.usdValue || '0') -\n parseFloat(tokenA.balance?.usdValue || '0')\n )\n .concat(\n tokens.filter((token) => !token.balance && !token.isSecondaryCoin),\n tokens.filter((token) => !token.balance && token.isSecondaryCoin)\n );\n};\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\nexport const isExperimentalChain = (\n blockchains: BlockchainMeta[],\n wallet: string\n): boolean => {\n const cosmosExperimentalChainInfo = getCosmosExperimentalChainInfo(\n Object.entries(blockchains)\n .map(([, blockchainMeta]) => blockchainMeta)\n .filter(isCosmosBlockchain)\n );\n return cosmosExperimentalChainInfo && !!cosmosExperimentalChainInfo[wallet];\n};\n\nexport const getKeplrCompatibleConnectedWallets = (\n selectableWallets: SelectableWallet[]\n): WalletType[] => {\n const connectedWalletTypes = new Set(\n selectableWallets.map((a: any) => a.walletType.toString())\n );\n\n return KEPLR_COMPATIBLE_WALLETS.filter((compatibleWallet) =>\n connectedWalletTypes.has(compatibleWallet)\n );\n};\n\nexport function getTokensWithBalance(\n tokens: TokenWithBalance[],\n balances: Balance[]\n): TokenWithBalance[] {\n return tokens.map(({ balance, ...otherProps }) => {\n const tokenAmount = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n balances,\n otherProps.blockchain,\n otherProps.symbol,\n otherProps.address\n )?.amount || ZERO\n )\n );\n\n let tokenUsdValue = '';\n if (otherProps.usdPrice)\n tokenUsdValue = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n balances,\n otherProps.blockchain,\n otherProps.symbol,\n otherProps.address\n )?.amount || ZERO\n ).multipliedBy(otherProps.usdPrice)\n );\n\n return {\n ...otherProps,\n ...(tokenAmount !== '0' && {\n balance: { amount: tokenAmount, usdValue: tokenUsdValue },\n }),\n };\n });\n}\n\nexport function getSortedTokens(\n chain: BlockchainMeta | null,\n tokens: Token[],\n balances: Balance[],\n otherChainTokens: TokenWithBalance[]\n): TokenWithBalance[] {\n const fromChainEqueulsToToChain = chain?.name === otherChainTokens[0]?.name;\n if (fromChainEqueulsToToChain) return otherChainTokens;\n const filteredTokens = tokens.filter(\n (token) => token.blockchain === chain?.name\n );\n return sortTokens(getTokensWithBalance(filteredTokens, balances));\n}\n\nexport function tokensAreEqual(tokenA: Token | null, tokenB: Token | null) {\n return (\n tokenA?.blockchain === tokenB?.blockchain &&\n tokenA?.name === tokenB?.name &&\n tokenA?.address === tokenB?.address\n );\n}\n\nexport function getDefaultToken(\n sortedTokens: TokenWithBalance[],\n otherToken: TokenWithBalance | null\n): TokenWithBalance {\n let selectedToken: TokenWithBalance;\n const firstToken = sortedTokens[0];\n const secondToken = sortedTokens[1];\n if (sortedTokens.length === 1) selectedToken = firstToken;\n else if (tokensAreEqual(firstToken, otherToken)) selectedToken = secondToken;\n else selectedToken = firstToken;\n return selectedToken;\n}\n\nexport function sortWalletsBasedOnState(\n wallets: ModalWalletInfo[]\n): ModalWalletInfo[] {\n return wallets.sort(\n (a, b) =>\n Number(b.state === WalletStatus.CONNECTED) -\n Number(a.state === WalletStatus.CONNECTED) ||\n Number(b.state === WalletStatus.DISCONNECTED) -\n Number(a.state === WalletStatus.DISCONNECTED)\n );\n}\n","import { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\nimport {\n WalletTypeAndAddress,\n SwapSavedSettings,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport {\n BestRouteRequest,\n BestRouteResponse,\n RecommendedSlippage,\n SwapResult,\n MetaResponse,\n Token,\n} from 'rango-sdk';\nimport { Account } from '../store/wallets';\nimport { ZERO } from '../constants/numbers';\nimport { numberToString } from './numbers';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { getRequiredBalanceOfWallet } from './routing';\nimport { getRequiredChains, SelectedWallet } from './wallets';\nimport { LoadingStatus } from '../store/meta';\nimport { SwapButtonState } from '../types';\n\nexport function getOutputRatio(\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n if (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) return 0;\n return outputUsdValue.div(inputUsdValue).minus(1).multipliedBy(100);\n}\n\nexport function outputRatioHasWarning(\n inputUsdValue: BigNumber,\n outputRatio: BigNumber | 0\n) {\n return (\n (parseInt(outputRatio.toFixed(2) || '0') <= -10 &&\n inputUsdValue.gte(new BigNumber(400))) ||\n (parseInt(outputRatio.toFixed(2) || '0') <= -5 &&\n inputUsdValue.gte(new BigNumber(1000)))\n );\n}\n\nexport function hasLimitError(bestRoute: BestRouteResponse | null): boolean {\n return (\n (bestRoute?.result?.swaps || []).filter((swap) => {\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n if (isExclusive) {\n return minimum?.gte(swap.fromAmount) || maximum?.lte(swap.fromAmount);\n } else {\n return minimum?.gt(swap.fromAmount) || maximum?.lt(swap.fromAmount);\n }\n }).length > 0\n );\n}\n\nexport function LimitErrorMessage(bestRoute: BestRouteResponse | null): {\n swap: SwapResult | null;\n fromAmountRangeError: string;\n recommendation: string;\n} {\n if (!bestRoute)\n return { swap: null, fromAmountRangeError: '', recommendation: '' };\n const swap = (bestRoute?.result?.swaps || []).filter((swap) => {\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n if (isExclusive) {\n return minimum?.gte(swap.fromAmount) || maximum?.lte(swap.fromAmount);\n } else {\n return minimum?.gt(swap.fromAmount) || maximum?.lt(swap.fromAmount);\n }\n })[0];\n if (!swap)\n return { swap: null, fromAmountRangeError: '', recommendation: '' };\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n\n let fromAmountRangeError = '';\n let recommendation = '';\n if (!isExclusive && !!minimum && minimum.gt(swap.fromAmount)) {\n fromAmountRangeError = `Required: >= ${numberToString(minimum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Increase your swap amount';\n } else if (isExclusive && !!minimum && minimum.gte(swap.fromAmount)) {\n fromAmountRangeError = `Required: > ${numberToString(minimum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Increase your swap amount';\n }\n\n if (!isExclusive && !!maximum && maximum.lt(swap.fromAmount)) {\n fromAmountRangeError = `Required: <= ${numberToString(maximum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Decrease your swap amount';\n } else if (isExclusive && !!maximum && maximum.lte(swap.fromAmount)) {\n fromAmountRangeError = `Required: < ${numberToString(maximum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Decrease your swap amount';\n }\n\n return { swap, fromAmountRangeError, recommendation };\n}\n\nexport function getSwapButtonState(\n loadingMetaStatus: LoadingStatus,\n accounts: Account[],\n loading: boolean,\n bestRoute: BestRouteResponse | null,\n hasLimitError: boolean,\n highValueLoss: boolean,\n priceImpactCanNotBeComputed: boolean,\n needsToWarnEthOnPath: boolean\n): SwapButtonState {\n if (loadingMetaStatus !== 'success')\n return { title: 'Connect Wallet', disabled: true };\n if (accounts.length == 0) return { title: 'Connect Wallet', disabled: false };\n if (loading) return { title: 'Finding Best Route...', disabled: true };\n else if (!bestRoute) return { title: 'Swap', disabled: true };\n else if (hasLimitError) return { title: 'Limit Error', disabled: true };\n else if (highValueLoss)\n return { title: 'Price impact is too high!', disabled: true };\n else if (priceImpactCanNotBeComputed)\n return {\n title: 'USD price is unknown, price impact might be high!',\n disabled: false,\n hasWarning: true,\n };\n else if (needsToWarnEthOnPath)\n return {\n title: 'The route goes through Ethereum. Continue?',\n disabled: false,\n hasWarning: true,\n };\n else return { title: 'Swap', disabled: false };\n}\n\nexport function canComputePriceImpact(\n bestRoute: BestRouteResponse | null,\n inputAmount: string,\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n return !(\n (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) &&\n !!bestRoute?.result &&\n !!inputAmount &&\n inputAmount !== '0' &&\n parseFloat(inputAmount || '0') !== 0 &&\n !!bestRoute.result\n );\n}\n\nexport function calculatePendingSwap(\n inputAmount: string,\n bestRoute: BestRouteResponse,\n wallets: { [p: string]: WalletTypeAndAddress },\n settings: Omit<SwapSavedSettings, 'disabledSwappersIds'>,\n validateBalanceOrFee: boolean,\n meta: MetaResponse\n): PendingSwap {\n const simulationResult = bestRoute.result;\n if (!simulationResult) throw Error('Simulation result should not be null');\n\n return {\n creationTime: new Date().getTime().toString(),\n finishTime: null,\n requestId: bestRoute.requestId || '',\n inputAmount: inputAmount,\n wallets,\n status: 'running',\n isPaused: false,\n extraMessage: null,\n extraMessageSeverity: null,\n extraMessageDetail: null,\n extraMessageErrorCode: null,\n networkStatusExtraMessage: null,\n networkStatusExtraMessageDetail: null,\n lastNotificationTime: null,\n //@ts-ignore\n settings: settings,\n simulationResult: simulationResult,\n validateBalanceOrFee,\n steps:\n bestRoute.result?.swaps?.map((swap, index) => {\n const swapper = meta.swappers.find(\n (swapper) => swapper.id === swap.swapperId\n );\n const swapperType = swapper?.types[0];\n const fromBlockchain = meta.blockchains.find(\n (blockchain) => blockchain.name === swap.from.blockchain\n );\n const toBlockchain = meta.blockchains.find(\n (blockchain) => blockchain.name === swap.to.blockchain\n );\n return {\n id: index + 1,\n fromBlockchain: swap.from.blockchain,\n fromSymbol: swap.from.symbol,\n fromSymbolAddress: swap.from.address,\n fromDecimals: swap.from.decimals,\n fromAmountPrecision: swap.fromAmountPrecision,\n fromAmountMinValue: swap.fromAmountMinValue,\n fromAmountMaxValue: swap.fromAmountMaxValue,\n toBlockchain: swap.to.blockchain,\n fromLogo: swap.from.logo,\n toSymbol: swap.to.symbol,\n toSymbolAddress: swap.to.address,\n toDecimals: swap.to.decimals,\n toLogo: swap.to.logo,\n startTransactionTime: new Date().getTime(),\n swapperId: swap.swapperId,\n feeInUsd: numberToString(getUsdFeeOfStep(swap, meta.tokens), null, 2),\n expectedOutputAmountHumanReadable: swap.toAmount,\n outputAmount: '',\n status: 'created',\n networkStatus: null,\n executedTransactionId: null,\n externalTransactionId: null,\n explorerUrl: null,\n trackingCode: null,\n cosmosTransaction: null,\n solanaTransaction: null,\n starknetTransaction: null,\n starknetApprovalTransaction: null,\n tronTransaction: null,\n tronApprovalTransaction: null,\n evmTransaction: null,\n evmApprovalTransaction: null,\n transferTransaction: null,\n diagnosisUrl: null,\n internalSteps: null,\n fromBlockchainLogo: fromBlockchain?.logo || '',\n toBlockchainLogo: toBlockchain?.logo || '',\n swapperLogo: swapper?.logo || '',\n swapperType: swapperType || '',\n };\n }) || [],\n };\n}\n\nexport function requiredWallets(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\n\nexport function getUsdFeeOfStep(\n step: SwapResult,\n allTokens: Token[]\n): BigNumber {\n let totalFeeInUsd = ZERO;\n for (let i = 0; i < step.fee.length; i++) {\n const fee = step.fee[i];\n if (fee.expenseType === 'DECREASE_FROM_OUTPUT') continue;\n\n const unitPrice = getUsdPrice(\n fee.asset.blockchain,\n fee.asset.symbol,\n fee.asset.address,\n allTokens\n );\n totalFeeInUsd = totalFeeInUsd.plus(\n new BigNumber(fee.amount).multipliedBy(unitPrice || 0)\n );\n }\n\n return totalFeeInUsd;\n}\n\nexport function getTotalFeeInUsd(\n bestRoute: BestRouteResponse | null,\n allTokens: Token[]\n): BigNumber | null {\n return (\n bestRoute?.result?.swaps.reduce(\n (totalFee: BigNumber, step) =>\n totalFee.plus(getUsdFeeOfStep(step, allTokens)),\n ZERO\n ) || null\n );\n}\n\nexport function hasHighFee(totalFeeInUsd: BigNumber | null) {\n if (!totalFeeInUsd) return false;\n return !totalFeeInUsd.lt(new BigNumber(30));\n}\n\nexport function hasSlippageError(\n slippages: (RecommendedSlippage | null)[] | undefined\n) {\n return (slippages?.filter((s) => !!s?.error)?.length || 0) > 0;\n}\n\nexport function getMinRequiredSlippage(\n route: BestRouteResponse\n): number | null {\n const slippages = route.result?.swaps.map(\n (slippage) => slippage.recommendedSlippage\n );\n return (\n slippages\n ?.map((s) => parseFloat(s?.slippage || '0'))\n ?.filter((s) => s > 0)\n ?.sort((a, b) => b - a)\n ?.find(() => true) || null\n );\n}\n\nexport function hasProperSlippage(\n userSlippage: string,\n minRequiredSlippage: number | null\n) {\n if (!minRequiredSlippage) return true;\n //@ts-ignore\n return parseFloat(userSlippage) >= parseFloat(minRequiredSlippage);\n}\n\nexport function hasEnoughBalance(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[]\n) {\n const fee = route.validationStatus;\n\n if (fee === null || fee.length === 0) return true;\n\n for (const wallet of selectedWallets) {\n const requiredAssets = getRequiredBalanceOfWallet(wallet, fee);\n if (!requiredAssets) continue;\n\n const enoughBalanceInWallet = requiredAssets\n .map((asset) => asset.ok)\n .reduce((previous, current) => previous && current);\n if (!enoughBalanceInWallet) return false;\n }\n\n return true;\n}\n\nexport function hasEnoughBalanceAndProperSlippage(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[],\n userSlippage: string,\n minRequiredSlippage: number | null\n): boolean {\n return (\n hasEnoughBalance(route, selectedWallets) &&\n hasProperSlippage(userSlippage, minRequiredSlippage)\n );\n}\n\nexport function createBestRouteRequestBody(\n fromToken: Token,\n toToken: Token,\n inputAmount: string,\n wallets: Account[],\n selectedWallets: SelectedWallet[],\n disabledLiquiditySources: string[],\n slippage: number,\n checkPrerequisites: boolean\n): BestRouteRequest {\n const selectedWalletsMap = selectedWallets.reduce(\n (\n selectedWalletsMap: BestRouteRequest['selectedWallets'],\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = selectedWallet.address),\n selectedWalletsMap\n ),\n {}\n );\n\n const connectedWallets: BestRouteRequest['connectedWallets'] = [];\n\n wallets.forEach((wallet) => {\n const chainAndAccounts = connectedWallets.find(\n (connectedWallet) => connectedWallet.blockchain === wallet.chain\n );\n if (!!chainAndAccounts) chainAndAccounts.addresses.push(wallet.address);\n else\n connectedWallets.push({\n blockchain: wallet.chain,\n addresses: [wallet.address],\n });\n });\n\n const requestBody: BestRouteRequest = {\n amount: inputAmount.toString(),\n checkPrerequisites,\n from: {\n address: fromToken.address,\n blockchain: fromToken.blockchain,\n symbol: fromToken.symbol,\n },\n to: {\n address: toToken.address,\n blockchain: toToken.blockchain,\n symbol: toToken.symbol,\n },\n connectedWallets,\n selectedWallets: selectedWalletsMap,\n swapperGroups: disabledLiquiditySources,\n swappersGroupsExclude: true,\n //@ts-ignore\n slippage: slippage.toString(),\n };\n\n return requestBody;\n}\n\nexport function getWalletsForNewSwap(selectedWallets: SelectedWallet[]) {\n const wallets = selectedWallets.reduce(\n (\n selectedWalletsMap: {\n [p: string]: { address: string; walletType: WalletType };\n },\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = {\n address: selectedWallet.address,\n walletType: selectedWallet.walletType,\n }),\n selectedWalletsMap\n ),\n {}\n );\n\n return wallets;\n}\n\nexport function getRouteOutputAmount(route: BestRouteResponse | null) {\n return route?.result?.outputAmount || null;\n}\n\nexport function getPercentageChange(\n oldValue: string | number | null,\n newValue: string | number | null\n) {\n if (!oldValue || !newValue) return null;\n return new BigNumber(newValue)\n .div(new BigNumber(oldValue))\n .minus(1)\n .multipliedBy(100);\n}\n\nexport function isOutputAmountChangedALot(\n oldRoute: BestRouteResponse,\n newRoute: BestRouteResponse\n) {\n const oldOutputAmount = getRouteOutputAmount(oldRoute);\n const newOutputAmount = getRouteOutputAmount(newRoute);\n if (!oldOutputAmount || !newOutputAmount) return false;\n const percentageChange = getPercentageChange(\n oldOutputAmount,\n newOutputAmount\n );\n if (!percentageChange) return true;\n\n return percentageChange.toNumber() <= -1;\n}\n\nexport function getBalanceWarnings(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[]\n) {\n const fee = route.validationStatus;\n const requiredWallets = getRequiredChains(route);\n const walletsSortedByRequiredWallets = selectedWallets.sort(\n (selectedWallet1, selectedWallet2) =>\n requiredWallets.indexOf(selectedWallet1.chain) -\n requiredWallets.indexOf(selectedWallet2.chain)\n );\n return walletsSortedByRequiredWallets\n .flatMap((wallet) => getRequiredBalanceOfWallet(wallet, fee) || [])\n .filter((asset) => !asset.ok)\n .map((asset) => {\n const symbol = asset.asset.symbol;\n const currentAmount = numberToString(\n new BigNumber(asset.currentAmount.amount).shiftedBy(\n -asset.currentAmount.decimals\n ),\n 8\n );\n const requiredAmount = numberToString(\n new BigNumber(asset.requiredAmount.amount).shiftedBy(\n -asset.requiredAmount.decimals\n ),\n 8\n );\n let reason = '';\n if (asset.reason === 'FEE') reason = ' for network fee';\n if (asset.reason === 'INPUT_ASSET') reason = ' for swap';\n if (asset.reason === 'FEE_AND_INPUT_ASSET')\n reason = ' for input and network fee';\n const warningMessage = `Needs ≈ ${requiredAmount} ${symbol}${reason}, but you have ${currentAmount} ${symbol} in your ${asset.asset.blockchain} wallet.`;\n return warningMessage;\n });\n}\n","import {\n SimulationAssetAndAmount,\n SimulationValidationStatus,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport { BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';\nimport { areEqual } from './common';\nimport { SelectedWallet } from './wallets';\nimport { BestRouteParams } from '../types';\nimport { TokenMeta } from '@rango-dev/ui/dist/types/meta';\nimport { numberToString } from './numbers';\nimport { getUsdFeeOfStep } from './swap';\nimport { BestRouteWithFee } from '@rango-dev/ui';\n\nexport function searchParamsToToken(\n tokens: Token[],\n searchParams: string | null,\n chain: BlockchainMeta | null\n): Token | null {\n if (!chain) return null;\n return (\n tokens.find((token) => {\n const symbolAndAddress = searchParams?.split('--');\n if (symbolAndAddress?.length === 1)\n return (\n token.symbol === symbolAndAddress[0] &&\n token.address === null &&\n token.blockchain === chain.name\n );\n return (\n token.symbol === symbolAndAddress?.[0] &&\n token.address === symbolAndAddress?.[1] &&\n token.blockchain === chain.name\n );\n }) || null\n );\n}\n\nexport function getBestRouteToTokenUsdPrice(\n bestRoute: BestRouteResponse | null\n): number | null | undefined {\n return bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1].to\n .usdPrice;\n}\n\nexport function isNumberOfSwapsChanged(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1Swaps = route1.result?.swaps || [];\n const route2Swaps = route2.result?.swaps || [];\n return route1Swaps.length !== route2Swaps.length;\n}\n\nexport function isRouteSwappersUpdated(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1Swappers =\n route1.result?.swaps.map((swap) => swap.swapperId) || [];\n const route2Swappers =\n route2.result?.swaps.map((swap) => swap.swapperId) || [];\n return !areEqual(route1Swappers, route2Swappers);\n}\n\nexport function isRouteInternalCoinsUpdated(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1InternalCoins =\n route1.result?.swaps.map((swap) => swap.to.symbol) || [];\n const route2InternalCoins =\n route2.result?.swaps.map((swap) => swap.to.symbol) || [];\n return !areEqual(route1InternalCoins, route2InternalCoins);\n}\n\nexport function isRouteChanged(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n): boolean {\n return (\n isNumberOfSwapsChanged(route1, route2) ||\n isRouteSwappersUpdated(route1, route2) ||\n isRouteInternalCoinsUpdated(route1, route2)\n );\n}\n\nexport function outToRatioHasWarning(\n fromUsdValue: BigNumber | null,\n outToInRatio: BigNumber | 0\n) {\n return (\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -10 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(200)))) ||\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -5 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(1000))))\n );\n}\n\nexport function getRequiredBalanceOfWallet(\n selectedWallet: SelectedWallet,\n fee: SimulationValidationStatus[] | null\n): SimulationAssetAndAmount[] | null {\n if (fee === null) return null;\n const relatedFeeStatus = fee\n ?.find((item) => item.blockchain === selectedWallet.chain)\n ?.wallets.find(\n (wallet) =>\n wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase()\n );\n if (!relatedFeeStatus) return null;\n return relatedFeeStatus.requiredAssets;\n}\n\nexport function isRouteParametersChanged(\n prevParams: BestRouteParams,\n currentParams: BestRouteParams\n) {\n return (\n prevParams.fromChain?.name !== currentParams.fromChain?.name ||\n prevParams.toChain?.name !== currentParams.toChain?.name ||\n prevParams.fromToken?.symbol !== currentParams.fromToken?.symbol ||\n prevParams.toToken?.symbol !== currentParams.toToken?.symbol ||\n prevParams.fromToken?.blockchain !== currentParams.fromToken?.blockchain ||\n prevParams.toToken?.blockchain !== currentParams.toToken?.blockchain ||\n prevParams.fromToken?.address !== currentParams.fromToken?.address ||\n prevParams.toToken?.address !== currentParams.toToken?.address ||\n prevParams.inputAmount !== currentParams.inputAmount ||\n prevParams.slippage !== currentParams.slippage ||\n prevParams.customSlippage !== currentParams.customSlippage ||\n prevParams.disabledLiquiditySources?.length !==\n currentParams.disabledLiquiditySources?.length\n );\n}\n\nexport function getBestRouteWithCalculatedFees(\n bestRoute: BestRouteResponse | null,\n tokens: TokenMeta[]\n): BestRouteWithFee | null {\n if (!bestRoute || !bestRoute.result) return null;\n const swapsWithFee = (bestRoute?.result?.swaps || []).map((swap) => ({\n ...swap,\n feeInUsd: numberToString(getUsdFeeOfStep(swap, tokens), 0, 2),\n }));\n\n return {\n ...bestRoute,\n result: { ...bestRoute.result, swaps: swapsWithFee },\n };\n}\n","import { StoreApi, UseBoundStore } from 'zustand';\n\ntype State = object;\n\ntype WithSelectors<S> = S extends { getState: () => infer T }\n ? S & { use: { [K in keyof T]: () => T[K] } }\n : never;\n\nconst createSelectors = <S extends UseBoundStore<StoreApi<State>>>(_store: S) => {\n let store = _store as WithSelectors<typeof _store>;\n store.use = {};\n for (let k of Object.keys(store.getState())) {\n (store.use as any)[k] = () => store((s) => s[k as keyof typeof s]);\n }\n\n return store;\n};\n\nexport default createSelectors;\n","import { RangoClient } from 'rango-sdk';\n\nexport const httpService = new RangoClient(\n process.env.REACT_APP_API_KEY as string\n);\n","export const SLIPPAGES = [0.5, 1, 3, 5, 8, 13, 20];\n\nexport const DEFAULT_SLIPPAGE = 1;\n\nexport const HIGH_SLIPPAGE = 5;\n\nexport const MAX_SLIPPAGE = 100;\n\nexport const MIN_SLIPPGAE = 0;\n","import { create } from 'zustand';\nimport { MetaResponse } from 'rango-sdk';\nimport { httpService } from '../services/httpService';\nimport createSelectors from './selectors';\nimport { removeDuplicateFrom } from '../utils/common';\n\nexport type LoadingStatus = 'loading' | 'success' | 'failed';\n\nexport interface MetaState {\n meta: MetaResponse;\n loadingStatus: LoadingStatus;\n fetchMeta: () => Promise<void>;\n}\n\nexport const useMetaStore = createSelectors(\n create<MetaState>()((set) => ({\n meta: { blockchains: [], popularTokens: [], swappers: [], tokens: [] },\n loadingStatus: 'loading',\n fetchMeta: async () => {\n try {\n const response = await httpService.getAllMetadata();\n const chainThatHasTokenInMetaResponse = removeDuplicateFrom(\n response.tokens.map((t) => t.blockchain),\n );\n const enabledChains = response.blockchains.filter(\n (chain) => chain.enabled && chainThatHasTokenInMetaResponse.includes(chain.name),\n );\n response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);\n set({ meta: response, loadingStatus: 'success' });\n } catch (error) {\n set({ loadingStatus: 'failed' });\n }\n },\n })),\n);\n","import { create } from 'zustand';\nimport { persist, subscribeWithSelector } from 'zustand/middleware';\nimport { DEFAULT_SLIPPAGE } from '../constants/swapSettings';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\n\ntype Theme = 'auto' | 'dark' | 'light';\n\nexport interface SettingsState {\n slippage: number;\n customSlippage: number | null;\n infiniteApprove: boolean;\n disabledLiquiditySources: string[];\n theme: Theme;\n setSlippage: (slippage: number) => void;\n setCustomSlippage: (customSlippage: number | null) => void;\n toggleInfiniteApprove: () => void;\n toggleLiquiditySource: (name: string) => void;\n setTheme: (theme: Theme) => void;\n toggleAllLiquiditySources: () => void;\n}\n\nexport const useSettingsStore = createSelectors(\n create<SettingsState>()(\n persist(\n subscribeWithSelector((set) => ({\n slippage: DEFAULT_SLIPPAGE,\n customSlippage: null,\n infiniteApprove: false,\n disabledLiquiditySources: [],\n theme: 'auto',\n setSlippage: (slippage) =>\n set(() => ({\n slippage: slippage,\n })),\n setCustomSlippage: (customSlippage) =>\n set(() => ({\n customSlippage: customSlippage,\n })),\n toggleAllLiquiditySources: () =>\n set((state) => {\n const { swappers } = useMetaStore.getState().meta;\n const swappersGroup = removeDuplicateFrom(\n swappers.map((swapper) => swapper.swapperGroup)\n );\n\n if (swappersGroup.length === state.disabledLiquiditySources.length)\n return { disabledLiquiditySources: [] };\n else {\n return {\n disabledLiquiditySources: swappersGroup,\n };\n }\n }),\n toggleInfiniteApprove: () =>\n set((state) => ({\n infiniteApprove: !state.infiniteApprove,\n })),\n toggleLiquiditySource: (name) =>\n set((state) => {\n if (state.disabledLiquiditySources.includes(name))\n return {\n disabledLiquiditySources: state.disabledLiquiditySources.filter(\n (liquiditySource) => liquiditySource != name\n ),\n };\n else\n return {\n disabledLiquiditySources:\n state.disabledLiquiditySources.concat(name),\n };\n }),\n setTheme: (theme) =>\n set(() => ({\n theme,\n })),\n })),\n {\n name: 'user-settings',\n }\n )\n )\n);\n","import { SelectableWallet } from '@rango-dev/ui';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport {\n getRequiredChains,\n getTokensWithBalance,\n isAccountAndBalanceMatched,\n makeBalanceFor,\n resetBalanceState,\n SelectedWallet,\n sortTokens,\n} from '../utils/wallets';\nimport { useBestRouteStore } from './bestRoute';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\nimport { shallow } from 'zustand/shallow';\n\nexport interface Account {\n chain: string;\n address: string;\n walletType: WalletType;\n}\n\nexport type TokenBalance = {\n chain: string;\n symbol: string;\n ticker: string;\n address: string | null;\n rawAmount: string;\n decimal: number | null;\n amount: string;\n logo: string | null;\n usdPrice: number | null;\n};\n\nexport interface Balance {\n balances: TokenBalance[] | null;\n address: string;\n chain: string;\n loading: boolean;\n walletType: WalletType;\n error: boolean;\n explorerUrl: string | null;\n}\n\ninterface WalletsStore {\n accounts: Account[];\n balances: Balance[];\n selectedWallets: SelectedWallet[];\n connectWallet: (accounts: Account[]) => void;\n disconnectWallet: (walletType: WalletType) => void;\n initSelectedWallets: () => void;\n setSelectedWallet: (wallet: SelectableWallet) => void;\n clearConnectedWallet: () => void;\n}\n\nexport const useWalletsStore = createSelectors(\n create<WalletsStore>()(\n subscribeWithSelector((set) => ({\n accounts: [],\n balances: [],\n selectedWallets: [],\n connectWallet: (accounts) => {\n const tokens = useMetaStore.getState().meta.tokens;\n\n set((state) => ({\n accounts: state.accounts.concat(accounts),\n balances: state.balances.concat(\n accounts.map((account) => ({\n balances: [],\n address: account.address,\n chain: account.chain,\n loading: true,\n walletType: account.walletType,\n error: false,\n explorerUrl: null,\n }))\n ),\n }));\n accounts.forEach(async (account) => {\n try {\n const response = await httpService.getWalletsDetails([\n { address: account.address, blockchain: account.chain },\n ]);\n const retrivedBalance = response.wallets[0];\n if (retrivedBalance) {\n set((state) => ({\n balances: state.balances.map((balance) => {\n return isAccountAndBalanceMatched(account, balance)\n ? makeBalanceFor(account, retrivedBalance, tokens)\n : balance;\n }),\n }));\n } else throw new Error('Wallet not found');\n } catch (error) {\n set((state) => ({\n balances: state.balances.map((balance) => {\n return isAccountAndBalanceMatched(account, balance)\n ? resetBalanceState(balance)\n : balance;\n }),\n }));\n }\n });\n },\n disconnectWallet: (walletType) => {\n set((state) => ({\n accounts: state.accounts.filter(\n (account) => account.walletType !== walletType\n ),\n balances: state.balances.filter(\n (balance) => balance.walletType !== walletType\n ),\n selectedWallets: state.selectedWallets.filter(\n (wallet) => wallet.walletType != walletType\n ),\n }));\n },\n initSelectedWallets: () =>\n set((state) => {\n const requiredChains = getRequiredChains(\n useBestRouteStore.getState().bestRoute\n );\n const connectedWallets = state.accounts;\n const selectedWallets: SelectedWallet[] = [];\n requiredChains.forEach((chain) => {\n const anyWalletSelected = !!state.selectedWallets.find(\n (wallet) => wallet.chain === chain\n );\n if (!anyWalletSelected) {\n const firstWalletWithMatchedChain = connectedWallets.find(\n (wallet) => wallet.chain === chain\n );\n if (!!firstWalletWithMatchedChain)\n selectedWallets.push({\n address: firstWalletWithMatchedChain.address,\n chain: firstWalletWithMatchedChain.chain,\n walletType: firstWalletWithMatchedChain.walletType,\n });\n }\n });\n return {\n selectedWallets: state.selectedWallets.concat(selectedWallets),\n };\n }),\n setSelectedWallet: (wallet) =>\n set((state) => ({\n selectedWallets: state.selectedWallets\n .filter((selectedWallet) => selectedWallet.chain !== wallet.chain)\n .concat({\n chain: wallet.chain,\n address: wallet.address,\n walletType: wallet.walletType,\n }),\n })),\n\n clearConnectedWallet: () =>\n set(() => ({\n accounts: [],\n balances: [],\n selectedWallets: [],\n })),\n }))\n )\n);\n\nuseWalletsStore.subscribe(\n (state) => state.balances,\n (balances) => {\n useBestRouteStore.setState(({ sourceTokens, destinationTokens }) => {\n const sourceTokensWithBalance = getTokensWithBalance(\n sourceTokens,\n balances\n );\n const destinationTokensWithBalance = getTokensWithBalance(\n destinationTokens,\n balances\n );\n return {\n sourceTokens: sortTokens(sourceTokensWithBalance),\n destinationTokens: sortTokens(destinationTokensWithBalance),\n };\n });\n },\n {\n equalityFn: shallow,\n }\n);\n","import { BestRouteResponse, BlockchainMeta } from 'rango-sdk';\nimport { Token } from 'rango-sdk';\nimport { create } from 'zustand';\nimport BigNumber from 'bignumber.js';\nimport { ZERO } from '../constants/numbers';\nimport {\n getBestRouteToTokenUsdPrice,\n isRouteParametersChanged,\n} from '../utils/routing';\nimport createSelectors from './selectors';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport { useSettingsStore } from './settings';\nimport { createBestRouteRequestBody } from '../utils/swap';\nimport { useMetaStore } from './meta';\nimport { getDefaultToken, getSortedTokens } from '../utils/wallets';\nimport { useWalletsStore } from './wallets';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\n\nconst getUsdValue = (token: Token | null, amount: string) =>\n new BigNumber(amount || ZERO).multipliedBy(token?.usdPrice || 0);\n\nexport interface RouteState {\n fromChain: BlockchainMeta | null;\n toChain: BlockchainMeta | null;\n inputAmount: string;\n inputUsdValue: BigNumber;\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber;\n fromToken: TokenWithBalance | null;\n toToken: TokenWithBalance | null;\n loading: boolean;\n error: string;\n sourceTokens: Token[];\n destinationTokens: Token[];\n setFromChain: (\n chain: BlockchainMeta | null,\n setDefaultToken?: boolean\n ) => void;\n setToChain: (chian: BlockchainMeta | null, setDefaultToken?: boolean) => void;\n setFromToken: (token: Token | null) => void;\n setToToken: (token: Token | null) => void;\n setInputAmount: (amount: string) => void;\n bestRoute: BestRouteResponse | null;\n setBestRoute: (bestRoute: BestRouteResponse | null) => void;\n}\n\nexport const useBestRouteStore = createSelectors(\n create<RouteState>()(\n subscribeWithSelector((set) => ({\n fromChain: null,\n fromToken: null,\n inputAmount: '',\n outputAmount: null,\n inputUsdValue: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n toChain: null,\n toToken: null,\n bestRoute: null,\n loading: false,\n error: '',\n sourceTokens: [],\n destinationTokens: [],\n setBestRoute: (bestRoute) =>\n set((state) => {\n let outputAmount: BigNumber | null = null;\n let outputUsdValue: BigNumber = ZERO;\n if (!!bestRoute) {\n outputAmount = !!bestRoute.result?.outputAmount\n ? new BigNumber(bestRoute.result?.outputAmount)\n : null;\n outputUsdValue = new BigNumber(outputAmount || ZERO).multipliedBy(\n getBestRouteToTokenUsdPrice(bestRoute) ||\n state.toToken?.usdPrice ||\n 0\n );\n }\n return {\n bestRoute,\n ...(!!bestRoute && {\n outputAmount,\n outputUsdValue,\n }),\n };\n }),\n setFromChain: (chain, setDefaultToken) => {\n set((state) => {\n if (state.fromChain?.name === chain?.name) return {};\n const tokens = useMetaStore.getState().meta.tokens;\n const balances = useWalletsStore.getState().balances;\n const sortedTokens = getSortedTokens(\n chain,\n tokens,\n balances,\n state.destinationTokens\n );\n const fromToken = getDefaultToken(sortedTokens, state.toToken);\n return {\n fromChain: chain,\n sourceTokens: sortedTokens,\n ...(setDefaultToken && {\n fromToken,\n }),\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(fromToken, state.inputAmount),\n }),\n };\n });\n },\n setFromToken: (token) =>\n set((state) => ({\n fromToken: token,\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(token, state.inputAmount),\n }),\n })),\n setToChain: (chain, setDefaultToken) => {\n set((state) => {\n if (state.toChain?.name === chain?.name) return {};\n const tokens = useMetaStore.getState().meta.tokens;\n const balances = useWalletsStore.getState().balances;\n const sortedTokens = getSortedTokens(\n chain,\n tokens,\n balances,\n state.destinationTokens\n );\n\n return {\n toChain: chain,\n destinationTokens: sortedTokens,\n ...(setDefaultToken && {\n toToken: getDefaultToken(sortedTokens, state.fromToken),\n }),\n };\n });\n },\n setToToken: (token) =>\n set(() => ({\n toToken: token,\n })),\n setInputAmount: (amount) => {\n set((state) => ({\n inputAmount: amount,\n ...(!amount && {\n outputAmount: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n bestRoute: null,\n }),\n ...(!!state.fromToken && {\n inputUsdValue: getUsdValue(state.fromToken, amount),\n }),\n }));\n },\n }))\n )\n);\n\nconst bestRoute = (\n bestRouteStore: typeof useBestRouteStore,\n settingsStore: typeof useSettingsStore\n) => {\n let abortController: AbortController | null = null;\n const fetchBestRoute = () => {\n const { fromToken, toToken, inputAmount } = bestRouteStore.getState();\n const { slippage, customSlippage, disabledLiquiditySources } =\n settingsStore.getState();\n if (!fromToken || !toToken || !inputAmount) return;\n abortController?.abort();\n abortController = new AbortController();\n const userSlippage = !!customSlippage ? customSlippage : slippage;\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n [],\n [],\n disabledLiquiditySources,\n userSlippage,\n false\n );\n bestRouteStore.setState({\n loading: true,\n bestRoute: null,\n outputAmount: null,\n outputUsdValue: new BigNumber(0),\n });\n httpService\n .getBestRoute(requestBody, {\n signal: abortController.signal,\n })\n .then((res) => {\n const { setBestRoute } = bestRouteStore.getState();\n setBestRoute(res);\n bestRouteStore.setState({ loading: false });\n abortController = null;\n })\n .catch((error) => {\n if (error.code === 'ERR_CANCELED') return;\n bestRouteStore.setState({\n error: error.message,\n loading: false,\n });\n });\n };\n\n useBestRouteStore.subscribe(\n (state) => ({\n fromChain: state.fromChain,\n fromToken: state.fromToken,\n toChain: state.toChain,\n toToken: state.toToken,\n inputAmount: state.inputAmount,\n }),\n\n fetchBestRoute.bind(null),\n {\n equalityFn: (prevState, state) => {\n if (isRouteParametersChanged(prevState, state)) return false;\n else return true;\n },\n }\n );\n\n useSettingsStore.subscribe(\n (state) => ({\n slippage: state.slippage,\n customSlippage: state.customSlippage,\n disabledLiquiditySources: state.disabledLiquiditySources,\n }),\n fetchBestRoute.bind(null),\n {\n equalityFn: (prevState, state) => {\n if (isRouteParametersChanged(prevState, state)) return false;\n else return true;\n },\n }\n );\n\n return { fetchBestRoute };\n};\n\nexport const { fetchBestRoute } = bestRoute(\n useBestRouteStore,\n useSettingsStore\n);\n","export enum SearchParams {\n 'FROM_CHAIN' = 'fromChain',\n 'FROM_TOKEN' = 'fromToken',\n 'TO_CHAIN' = 'toChain',\n 'TO_TOKEN' = 'toToken',\n 'FROM_AMOUNT' = 'fromAmount',\n}\n","import { create } from 'zustand';\nimport createSelectors from './selectors';\n\ninterface UiState {\n connectWalletsButtonDisabled: boolean;\n selectedSwapRequestId: string | null;\n toggleConnectWalletsButton: () => void;\n setSelectedSwap: (requestId: string | null) => void;\n}\n\nexport const useUiStore = createSelectors(\n create<UiState>()((set) => ({\n connectWalletsButtonDisabled: false,\n selectedSwapRequestId: null,\n toggleConnectWalletsButton: () =>\n set((state) => ({\n connectWalletsButtonDisabled: !state.connectWalletsButtonDisabled,\n })),\n setSelectedSwap: (requestId) => set({ selectedSwapRequestId: requestId }),\n }))\n);\n","import { useEffect, useRef } from 'react';\nimport {\n createSearchParams,\n useLocation,\n useSearchParams,\n} from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { SearchParams } from '../constants/searchParams';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { searchParamsToToken } from '../utils/routing';\n\nexport function UpdateUrl() {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const location = useLocation();\n const firstRenderSearchParams = useRef(location.search);\n const searchParamsRef = useRef<Record<string, string>>({});\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const loadingStatus = useMetaStore.use.loadingStatus();\n const { blockchains, tokens } = useMetaStore.use.meta();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n\n useEffect(() => {\n const params: Record<string, string> = {};\n createSearchParams(firstRenderSearchParams.current).forEach(\n (value, key) => {\n params[key] = value;\n }\n );\n searchParamsRef.current = params;\n const requestId =\n location.pathname.split(navigationRoutes.swaps + '/')[1] || null;\n if (requestId) setSelectedSwap(requestId);\n }, []);\n\n useEffect(() => {\n let fromChainString = '',\n fromTokenString = '',\n toChainString = '',\n toTokenString = '',\n fromAmount = '';\n if (\n loadingStatus !== 'success' &&\n ![navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n )\n ) {\n fromChainString = searchParamsRef.current[SearchParams.FROM_CHAIN];\n fromTokenString = searchParamsRef.current[SearchParams.FROM_TOKEN];\n toChainString = searchParamsRef.current[SearchParams.TO_CHAIN];\n toTokenString = searchParamsRef.current[SearchParams.TO_TOKEN];\n fromAmount = searchParamsRef.current[SearchParams.FROM_AMOUNT];\n setSearchParams(\n {\n ...(fromChainString && {\n [SearchParams.FROM_CHAIN]: fromChainString,\n }),\n ...(fromTokenString && {\n [SearchParams.FROM_TOKEN]: fromTokenString,\n }),\n ...(toChainString && { [SearchParams.TO_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.TO_TOKEN]: toTokenString }),\n ...(fromAmount && {\n [SearchParams.FROM_AMOUNT]: fromAmount.toString(),\n }),\n },\n { replace: true }\n );\n }\n if (!firstRender.current) {\n let fromChainString = '',\n fromTokenString = '',\n toChainString = '',\n toTokenString = '',\n fromAmount = '';\n if (loadingStatus !== 'success') {\n fromChainString = searchParamsRef.current[SearchParams.FROM_CHAIN];\n fromTokenString = searchParamsRef.current[SearchParams.FROM_TOKEN];\n toChainString = searchParamsRef.current[SearchParams.TO_CHAIN];\n toTokenString = searchParamsRef.current[SearchParams.TO_TOKEN];\n fromAmount = searchParamsRef.current[SearchParams.FROM_AMOUNT];\n } else {\n if (location.state === 'redirect') return;\n fromChainString = fromChain?.name || '';\n fromTokenString =\n (fromToken?.symbol || '') +\n (fromToken?.address ? `--${fromToken?.address}` : '');\n toChainString = toChain?.name || '';\n toTokenString =\n (toToken?.symbol || '') +\n (toToken?.address ? `--${toToken?.address}` : '');\n fromAmount = inputAmount;\n\n setSearchParams(\n {\n ...(fromChainString && {\n [SearchParams.FROM_CHAIN]: fromChainString,\n }),\n ...(fromTokenString && {\n [SearchParams.FROM_TOKEN]: fromTokenString,\n }),\n ...(toChainString && { [SearchParams.TO_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.TO_TOKEN]: toTokenString }),\n ...(fromAmount && {\n [SearchParams.FROM_AMOUNT]: fromAmount.toString(),\n }),\n },\n { replace: true }\n );\n }\n }\n firstRender.current = false;\n }, [location.pathname, inputAmount]);\n\n useEffect(() => {\n if (loadingStatus === 'success') {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n const fromAmount = searchParams.get(SearchParams.FROM_AMOUNT);\n const fromChain = blockchains.find(\n (blockchain) => blockchain.name === fromChainString\n );\n const fromToken = searchParamsToToken(\n tokens,\n fromTokenString,\n fromChain || null\n );\n const toChain = blockchains.find(\n (blockchain) => blockchain.name === toChainString\n );\n const toToken = searchParamsToToken(\n tokens,\n toTokenString,\n toChain || null\n );\n if (!!fromChain) {\n setFromChain(fromChain);\n if (!!fromToken) setFromToken(fromToken);\n }\n if (!!toChain) {\n setToChain(toChain);\n if (!!toToken) setToToken(toToken);\n }\n if (fromAmount) setInputAmount(fromAmount);\n }\n }, [loadingStatus]);\n\n return null;\n}\n","import React from 'react';\nimport {\n SettingsIcon,\n Tooltip,\n styled,\n Button,\n HistoryIcon,\n RetryIcon,\n} from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { PropTypes } from './Header';\n\nconst ButtonsContainer = styled('div', {\n display: 'flex',\n});\n\nexport function HeaderButtons(props: PropTypes) {\n const { onClickRefresh } = props;\n const navigate = useNavigate();\n\n return (\n <ButtonsContainer>\n <Tooltip content=\"Retry\">\n <Button variant=\"ghost\" onClick={onClickRefresh}>\n <RetryIcon size={28} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Transactions History\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.swaps)}\n >\n <HistoryIcon size={24} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Settings\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n <SettingsIcon size={24} />\n </Button>\n </Tooltip>\n </ButtonsContainer>\n );\n}\n","import React from 'react';\nimport { css, styled, Typography } from '@rango-dev/ui';\nimport { HeaderButtons } from './HeaderButtons';\nimport { useTranslation } from 'react-i18next';\n\nexport const HeaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n padding: '$16 0',\n});\n\nexport interface PropTypes {\n onClickRefresh: () => void;\n title?: string;\n titleSize?: number;\n titleWeight?: number;\n}\n\nexport function Header(props: PropTypes) {\n const { onClickRefresh, title, titleSize, titleWeight } = props;\n const { t } = useTranslation();\n const titleStyle = css({\n fontSize: `${titleSize}px !important`,\n fontWeight: `${titleWeight} !important`,\n });\n\n return (\n <HeaderContainer>\n <Typography variant=\"h4\" className={titleStyle()}>\n {title ? t(title.toLocaleLowerCase()) : ''}\n </Typography>\n <HeaderButtons onClickRefresh={onClickRefresh} />\n </HeaderContainer>\n );\n}\n","import React from 'react';\nimport {\n AngleDownIcon,\n Button,\n InfoCircleIcon,\n styled,\n TextField,\n Typography,\n} from '@rango-dev/ui';\nimport { useMetaStore } from '../store/meta';\nimport { BlockchainMeta, Token } from 'rango-sdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { numberToString } from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { getBalanceFromWallet } from '../utils/wallets';\nimport { useWalletsStore } from '../store/wallets';\nimport { useTranslation } from 'react-i18next';\n\ntype PropTypes = (\n | {\n type: 'From';\n inputAmount: string;\n onAmountChange: (amount: string) => void;\n }\n | {\n type: 'To';\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber | null;\n }\n) & { chain: BlockchainMeta | null; token: Token | null };\n\nconst Box = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n});\n\nconst Container = styled('div', {\n boxSizing: 'border-box',\n backgroundColor: '$neutrals300',\n borderRadius: '$5',\n padding: '$8 0',\n\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$8 $16',\n },\n});\n\nconst StyledImage = styled('img', {\n width: '$24',\n maxHeight: '$24',\n});\n\nconst Options = styled('div', {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '0 $8',\n});\n\nconst ImagePlaceholder = styled('span', {\n width: '24px',\n height: '24px',\n backgroundColor: '$neutrals300',\n borderRadius: '99999px',\n});\n\nconst OutputContainer = styled('div', {\n height: '$48',\n borderRadius: '$5',\n flexGrow: 1,\n width: '70%',\n backgroundColor: '$background',\n border: '1px solid transparent',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '$8',\n paddingRight: '$8',\n});\n\nexport function TokenInfo(props: PropTypes) {\n const { type, chain, token } = props;\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const fromToken = useBestRouteStore.use.fromToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const balances = useWalletsStore.use.balances();\n const navigate = useNavigate();\n const { t } = useTranslation();\n\n const tokenBalance =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(\n balances,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.amount || '0',\n 8\n )\n : '0';\n\n const tokenBalanceReal =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(\n balances,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.amount || '0',\n getBalanceFromWallet(\n balances,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.decimal\n )\n : '0';\n\n const ItemSuffix = (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n {loadingStatus === 'failed' && <InfoCircleIcon color=\"error\" size={24} />}\n <AngleDownIcon />\n </div>\n );\n\n return (\n <Box>\n <div>\n <Typography variant=\"body2\">{t(type)}</Typography>\n </div>\n <Container>\n {props.type === 'From' && (\n <Options>\n <div\n className=\"balance\"\n onClick={() => {\n if (tokenBalance !== '0')\n setInputAmount(tokenBalanceReal.split(',').join(''));\n }}\n >\n <Button variant=\"ghost\" size=\"small\">\n <Typography variant=\"body2\">{`${t('Max')}: ${tokenBalance} ${\n fromToken?.symbol || ''\n }`}</Typography>\n </Button>\n </div>\n </Options>\n )}\n <div className=\"form\">\n <Button\n onClick={() => {\n navigate(`/${props.type.toLowerCase()}-chain`);\n }}\n variant=\"outlined\"\n disabled={loadingStatus === 'failed'}\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && chain ? (\n <StyledImage src={chain.logo} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n style={{ marginRight: '.5rem' }}\n >\n {loadingStatus === 'success' && chain ? chain.displayName : t('Chain')}\n </Button>\n <Button\n onClick={() => {\n navigate(`/${props.type.toLowerCase()}-token`);\n }}\n variant=\"outlined\"\n disabled={\n loadingStatus === 'failed' ||\n (type === 'From' && !fromChain) ||\n (type === 'To' && !toChain)\n }\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && token ? (\n <StyledImage src={token.image} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n style={{ marginRight: '.5rem' }}\n >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n {props.type === 'From' ? (\n <TextField\n type=\"number\"\n size=\"large\"\n autoFocus\n placeholder=\"0\"\n style={{\n width: '70%',\n position: 'relative',\n backgroundColor: '$background !important',\n }}\n suffix={\n <span\n style={{ position: 'absolute', right: '4px', bottom: '2px' }}\n >\n <Typography variant=\"caption\">{`$${numberToString(\n inputUsdValue\n )}`}</Typography>\n </span>\n }\n value={props.inputAmount || ''}\n onChange={\n props.type === 'From'\n ? (event) => {\n props.onAmountChange(event.target.value);\n }\n : undefined\n }\n />\n ) : (\n <OutputContainer>\n <Typography variant=\"body1\">\n {bestRoute\n ? `≈ ${numberToString(props.outputAmount)}`\n : inputAmount\n ? '?'\n : '0'}\n </Typography>\n <span\n style={{ position: 'absolute', right: '4px', bottom: '2px' }}\n >\n <Typography variant=\"caption\">{`$${numberToString(\n props.outputUsdValue\n )}`}</Typography>\n </span>\n </OutputContainer>\n )}\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled } from '@rango-dev/ui/src/theme';\nimport { Typography } from '@rango-dev/ui';\nimport { useTranslation } from 'react-i18next';\n\nconst Container = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n alignItems: 'center',\n paddingTop: '$16',\n});\n\nconst Logo = styled('svg', {\n fill: '$foreground',\n width: '$24',\n margin: '0 $8 0 $16',\n});\n\nconst StyledAnchor = styled('a', {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n textDecoration: 'none',\n});\n\nexport function BottomLogo() {\n const { t } = useTranslation();\n\n return (\n <Container>\n <Typography variant=\"caption\">{t('Powered By')}</Typography>\n <StyledAnchor href=\"https://rango.exchange\" target=\"_blank\">\n <Logo xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 33.68 29\">\n <defs></defs>\n <g id=\"Layer_2\" data-name=\"Layer 2\">\n <g id=\"Layer_1-2\" data-name=\"Layer 1\">\n <path d=\"M33.68,18.05A17.93,17.93,0,0,0,28.34,5.29,18.31,18.31,0,0,0,15.45,0H13.54V7.41L6.07,0H.69L9.83,9.07H0V11A17.93,17.93,0,0,0,5.34,23.71,18.32,18.32,0,0,0,18.24,29h1.9V21.59l7.38,7.31h5.39l-9-9h9.82ZM17.37,16.16H12.49a1.93,1.93,0,0,0-1.35.55,1.89,1.89,0,0,0-.56,1.34,1.85,1.85,0,0,0,.56,1.33,1.93,1.93,0,0,0,1.35.55h3.84V25.1A14.43,14.43,0,0,1,8,21a14.21,14.21,0,0,1-4.1-8.2H21.2a1.86,1.86,0,0,0,.74-.13,1.92,1.92,0,0,0,.64-.4,2,2,0,0,0,.43-.62,1.88,1.88,0,0,0,0-1.47,2,2,0,0,0-.43-.62,1.92,1.92,0,0,0-.64-.4,1.86,1.86,0,0,0-.74-.13H17.35V3.9A14.43,14.43,0,0,1,25.64,8a14.19,14.19,0,0,1,4.11,8.2Zm2.12-5.27a1.43,1.43,0,0,1,.26-.83,1.52,1.52,0,0,1,.67-.56,1.55,1.55,0,0,1,.88-.08,1.51,1.51,0,0,1,.77.4,1.54,1.54,0,0,1,.42.77,1.41,1.41,0,0,1-.09.86,1.47,1.47,0,0,1-.55.68,1.56,1.56,0,0,1-.84.25,1.52,1.52,0,0,1-1.52-1.49Z\" />\n <path d=\"M21.7,11.57a.68.68,0,0,0-.12-.38.64.64,0,0,0-.31-.25.68.68,0,0,0-.75.15.61.61,0,0,0-.19.35.62.62,0,0,0,0,.4.67.67,0,0,0,.25.3.69.69,0,0,0,.39.12.7.7,0,0,0,.49-.2A.68.68,0,0,0,21.7,11.57Z\" />\n </g>\n </g>\n </Logo>\n <Typography variant=\"body2\">RANGO</Typography>\n </StyledAnchor>\n </Container>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { SearchParams } from '../constants/searchParams';\nimport { useBestRouteStore } from '../store/bestRoute';\n\nexport function SwithFromAndTo({ count }: { count: number }) {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const outputAmount = useBestRouteStore.use.outputAmount();\n\n useEffect(() => {\n if (!firstRender.current) {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n setSearchParams({\n ...(toChainString && { [SearchParams.FROM_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.FROM_TOKEN]: toTokenString }),\n ...(fromChainString && { [SearchParams.TO_CHAIN]: fromChainString }),\n ...(fromTokenString && { [SearchParams.TO_TOKEN]: fromTokenString }),\n ...(outputAmount && { [SearchParams.FROM_AMOUNT]: outputAmount.toString() }),\n });\n } else {\n firstRender.current = false;\n }\n }, [count]);\n\n return null;\n}\n","import { styled } from '@rango-dev/ui';\n\nexport const Footer = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n paddingTop: '$16',\n});\n","export const errorMessages = {\n genericServerError: 'Error connecting server, please reload the app and try again',\n};\n","import {\n Alert,\n BestRoute,\n Button,\n styled,\n Typography,\n VerticalSwapIcon,\n} from '@rango-dev/ui';\nimport React, { useState } from 'react';\nimport { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { Header } from '../components/Header';\nimport { TokenInfo } from '../components/TokenInfo';\nimport { fetchBestRoute, useBestRouteStore } from '../store/bestRoute';\nimport { BottomLogo } from '../components/BottomLogo';\nimport { SwithFromAndTo } from '../components/SwitchFromAndTo';\nimport { Footer } from '../components/Footer';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useMetaStore } from '../store/meta';\nimport { useWalletsStore } from '../store/wallets';\nimport { errorMessages } from '../constants/errors';\nimport {\n getSwapButtonState,\n getOutputRatio,\n hasLimitError,\n outputRatioHasWarning,\n canComputePriceImpact,\n LimitErrorMessage,\n getTotalFeeInUsd,\n hasHighFee,\n} from '../utils/swap';\nimport {\n numberToString,\n secondsToString,\n totalArrivalTime,\n} from '../utils/numbers';\n\nconst Container = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n});\n\nconst SwitchButtonContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'relative',\n top: '11px',\n});\n\nconst BestRouteContainer = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nconst Alerts = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\ninterface PropTypes {\n title?: string;\n titleSize?: number;\n titleWeight?: number;\n}\nexport function Home(props: PropTypes) {\n const { title = 'SWAP', titleSize = 18, titleWeight = 600 } = props;\n\n const waningMessage = '';\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n const [count, setCount] = useState(0);\n const fromChain = useBestRouteStore.use.fromChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toChain = useBestRouteStore.use.toChain();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const outputAmount = useBestRouteStore.use.outputAmount();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const tokens = useMetaStore.use.meta().tokens;\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const bestRouteError = useBestRouteStore.use.error();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const accounts = useWalletsStore.use.accounts();\n\n const swithFromAndTo = () => {\n setFromChain(toChain);\n setFromToken(toToken);\n setToChain(fromChain);\n setToToken(fromToken);\n setInputAmount(outputAmount?.toString() || '');\n setCount((prev) => prev + 1);\n };\n\n const errorMessage =\n loadingMetaStatus === 'failed'\n ? errorMessages.genericServerError\n : bestRouteError;\n\n const needsToWarnEthOnPath = false;\n\n const showBestRoute =\n inputAmount && (!!bestRoute || fetchingBestRoute || bestRouteError);\n\n const outToInRatio = getOutputRatio(inputUsdValue, outputUsdValue);\n\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outToInRatio);\n\n const { fromAmountRangeError, recommendation, swap } =\n LimitErrorMessage(bestRoute);\n\n const priceImpactCanNotBeComputed = !canComputePriceImpact(\n bestRoute,\n inputAmount,\n inputUsdValue,\n outputUsdValue\n );\n\n const swapButtonState = getSwapButtonState(\n loadingMetaStatus,\n accounts,\n fetchingBestRoute,\n bestRoute,\n hasLimitError(bestRoute),\n highValueLoss,\n priceImpactCanNotBeComputed,\n needsToWarnEthOnPath\n );\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n const highFee = hasHighFee(totalFeeInUsd);\n\n \n return (\n <Container>\n <Header\n title={title}\n titleSize={titleSize}\n titleWeight={titleWeight}\n onClickRefresh={fetchBestRoute}\n />\n <TokenInfo\n type=\"From\"\n chain={fromChain}\n token={fromToken}\n onAmountChange={setInputAmount}\n inputAmount={inputAmount}\n />\n <SwitchButtonContainer>\n <Button variant=\"ghost\" onClick={swithFromAndTo}>\n <VerticalSwapIcon size={36} />\n {isRouterInContext && <SwithFromAndTo count={count} />}\n </Button>\n </SwitchButtonContainer>\n <TokenInfo\n type=\"To\"\n chain={toChain}\n token={toToken}\n outputAmount={outputAmount}\n outputUsdValue={outputUsdValue}\n />\n {showBestRoute && (\n <BestRouteContainer>\n <BestRoute\n error={bestRouteError}\n loading={fetchingBestRoute}\n data={bestRoute}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n feeWarning={highFee}\n totalTime={secondsToString(totalArrivalTime(bestRoute))}\n />\n </BestRouteContainer>\n )}\n {(errorMessage || waningMessage || hasLimitError(bestRoute)) && (\n <Alerts>\n {errorMessage && (\n <Alert type=\"error\">\n {<Typography variant=\"body2\">{errorMessage}</Typography>}\n </Alert>\n )}\n {hasLimitError(bestRoute) && (\n <Alert type=\"error\" title={`${swap?.swapperId} Limit`}>\n <>\n <Typography variant=\"body2\">{fromAmountRangeError}</Typography>\n <br />\n <Typography variant=\"body2\">\n Yours: {numberToString(swap?.fromAmount || null)}\n {swap?.from.symbol}\n </Typography>\n <br />\n <Typography variant=\"body2\">{recommendation}</Typography>\n </>\n </Alert>\n )}\n {waningMessage && (\n <Alert type=\"warning\">\n <Typography variant=\"body2\">{waningMessage}</Typography>\n </Alert>\n )}\n </Alerts>\n )}\n <Footer>\n <Button\n type=\"primary\"\n align=\"grow\"\n size=\"large\"\n disabled={swapButtonState.disabled}\n onClick={() => {\n if (swapButtonState.title === 'Connect Wallet')\n navigate(navigationRoutes.wallets);\n else {\n navigate(navigationRoutes.confirmWallets, { replace: true });\n }\n }}\n >\n {swapButtonState.title}\n </Button>\n <BottomLogo />\n </Footer>\n </Container>\n );\n}\n","import React, { PropsWithChildren, useEffect, useRef } from 'react';\nimport {\n MemoryRouter,\n useInRouterContext,\n useLocation,\n useNavigate,\n} from 'react-router';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { UpdateUrl } from './UpdateUrl';\nimport { Home } from '../pages/Home';\ninterface PropTypes {\n title?: string;\n titleSize?: number;\n titleWeight?: number;\n}\nconst Route: React.FC = ({\n children,\n ...props\n}: PropTypes & PropsWithChildren) => {\n const location = useLocation();\n const navigate = useNavigate();\n const ref = useRef(true);\n\n useEffect(() => {\n if (\n [navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n ) &&\n ref.current\n )\n navigate(navigationRoutes.home + location.search, { state: 'redirect' });\n\n ref.current = false;\n }, []);\n\n if (\n [navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n ) &&\n ref.current\n )\n return <Home {...props} />;\n\n return <> {children}</>;\n};\n\nexport function AppRouter({\n children,\n ...props\n}: PropTypes & PropsWithChildren) {\n const isRouterInContext = useInRouterContext();\n const Router = isRouterInContext ? Route : MemoryRouter;\n\n return (\n <>\n <Router {...props}>{children}</Router>\n {isRouterInContext && <UpdateUrl />}\n </>\n );\n}\n","import React from 'react';\nimport { Button, styled } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nconst StyledButton = styled(Button, {\n marginTop: '$8',\n});\n\nexport function ChangeSlippageButton() {\n const navigate = useNavigate();\n\n return (\n <StyledButton\n type=\"primary\"\n variant=\"contained\"\n size=\"small\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n Change Slippage\n </StyledButton>\n );\n}\n","import { Alert, Typography } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function HighSlippageWarning(props: PropTypes) {\n const { selectedSlippage } = props;\n\n return (\n <Alert type=\"warning\">\n <Typography variant=\"body2\">\n Caution, your slippage is high (=\n {selectedSlippage}). Your trade may be front run.\n <ChangeSlippageButton />\n </Typography>\n </Alert>\n );\n}\n","import React from 'react';\nimport { HIGH_SLIPPAGE } from '../../constants/swapSettings';\nimport { HighSlippageWarning } from './HighSlippageWarning';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function ConfirmSwapExtraMessages(props: PropTypes) {\n const { selectedSlippage } = props;\n const highSlippage = selectedSlippage >= HIGH_SLIPPAGE;\n\n return (\n <>\n {highSlippage && (\n <HighSlippageWarning selectedSlippage={selectedSlippage} />\n )}\n </>\n );\n}\n","import { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function useNavigateBack() {\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n\n navigationRoutes;\n\n const navigateBackFrom = (currentRoute: string) => {\n if (\n !isRouterInContext ||\n (window.history.state && window.history.state.idx > 0)\n )\n navigate(-1);\n else {\n if (\n [\n navigationRoutes.fromChain,\n navigationRoutes.fromToken,\n navigationRoutes.toChain,\n navigationRoutes.toToken,\n navigationRoutes.settings,\n navigationRoutes.wallets,\n navigationRoutes.swaps,\n navigationRoutes.confirmWallets,\n ].includes(currentRoute)\n )\n navigate(navigationRoutes.home, { replace: true });\n else if (currentRoute === navigationRoutes.liquiditySources)\n navigate(navigationRoutes.settings, { replace: true });\n else if (currentRoute === navigationRoutes.swapDetails)\n navigate(navigationRoutes.swaps, { replace: true });\n else if (currentRoute === navigationRoutes.confirmSwap)\n navigate(navigationRoutes.confirmWallets, { replace: true });\n }\n };\n\n return { navigateBackFrom };\n}\n","import { RouteState } from '../store/bestRoute';\nimport { SettingsState } from '../store/settings';\n\nexport interface BestRouteParams {\n fromChain?: RouteState['fromChain'];\n toChain?: RouteState['toChain'];\n fromToken?: RouteState['fromToken'];\n toToken?: RouteState['toToken'];\n inputAmount?: RouteState['inputAmount'];\n slippage?: SettingsState['slippage'];\n customSlippage?: SettingsState['customSlippage'];\n disabledLiquiditySources?: SettingsState['disabledLiquiditySources'];\n}\n\nexport enum ConfirmSwapErrorTypes {\n NO_ROUTE,\n ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n REQUEST_FAILED,\n INSUFFICIENT_SLIPPAGE,\n}\n\nexport type ConfirmSwapError =\n | {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED;\n status?: number;\n }\n | {\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE;\n minRequiredSlippage: number | null;\n }\n | {\n type: Exclude<\n ConfirmSwapErrorTypes,\n | ConfirmSwapErrorTypes.REQUEST_FAILED\n | ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n >;\n };\n\nexport type ConfirmSwapWarnings =\n | {\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED;\n newOutputAmount: string;\n percentageChange: string;\n }\n | { type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE; messages: string[] }\n | {\n type: Exclude<\n ConfirmSwapWarningTypes,\n | ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED\n | ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE\n >;\n };\n\nexport enum ConfirmSwapWarningTypes {\n ROUTE_UPDATED,\n ROUTE_SWAPPERS_UPDATED,\n ROUTE_COINS_UPDATED,\n ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n INSUFFICIENT_BALANCE,\n}\n","import { Typography } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n minRequiredSlippage: number | null;\n}\n\nexport function MinRequiredSlippage({ minRequiredSlippage }: PropTypes) {\n return (\n <Typography variant=\"body2\">\n We recommend you to increase slippage to at least \n {minRequiredSlippage}\n for this route.\n <ChangeSlippageButton />\n </Typography>\n );\n}\n","import React from 'react';\nimport { Typography } from '@rango-dev/ui';\nimport { ConfirmSwapError, ConfirmSwapErrorTypes } from '../types';\nimport { MinRequiredSlippage } from './warnings/MinRequiredSlippage';\n\nexport function ConfirmSwapErrors(errors: ConfirmSwapError[]) {\n return errors.flatMap((error) => {\n switch (error.type) {\n case ConfirmSwapErrorTypes.NO_ROUTE:\n return (\n <Typography variant=\"body2\">\n No routes found. Please try again later.\n </Typography>\n );\n case ConfirmSwapErrorTypes.REQUEST_FAILED:\n return (\n <Typography variant=\"body2\">{`Failed to confirm swap ${\n error.status ? `'status': ${error.status})` : ''\n }, please try again.`}</Typography>\n );\n\n case ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS:\n return (\n <Typography variant=\"body2\">\n Route updated and price impact is too high, try again later!\n </Typography>\n );\n case ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE:\n return (\n <MinRequiredSlippage\n minRequiredSlippage={error.minRequiredSlippage}\n />\n );\n default:\n return [];\n }\n });\n}\n","import { styled, Typography } from '@rango-dev/ui';\nimport React from 'react';\n\ninterface PropTypes {\n messages: string[];\n}\n\nconst List = styled('ul', {\n variants: {\n showListStyle: {\n true: { paddingLeft: '$24' },\n },\n },\n});\n\nconst ListItem = styled('li', {\n variants: {\n showListStyle: {\n true: { listStyleType: 'disc', listStylePosition: 'outside' },\n },\n },\n});\n\nconst Message = styled(Typography, {\n display: 'block',\n});\n\nexport function BalanceWarnings({ messages }: PropTypes) {\n const showListStyle = messages.length > 1;\n return (\n <List showListStyle={showListStyle}>\n {messages.map((warning) => (\n <ListItem showListStyle={showListStyle}>\n <Message variant=\"body2\">{warning}</Message>\n </ListItem>\n ))}\n </List>\n );\n}\n","import React from 'react';\nimport { Typography } from '@rango-dev/ui';\nimport { ConfirmSwapWarningTypes, ConfirmSwapWarnings } from '../types';\nimport { BalanceWarnings } from './warnings/BalanceWarnings';\n\nexport function ConfirmSwapWarnings(warnings: ConfirmSwapWarnings[]) {\n return warnings.flatMap((warning) => {\n switch (warning.type) {\n case ConfirmSwapWarningTypes.ROUTE_UPDATED:\n return <Typography variant=\"body2\">Route has been updated.</Typography>;\n case ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED:\n return (\n <Typography variant=\"body2\">{`Output amount changed to ${warning.newOutputAmount} \n (${warning.percentageChange}% change).`}</Typography>\n );\n\n case ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED:\n return (\n <Typography variant=\"body2\">\n Route swappers has been updated.\n </Typography>\n );\n case ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED:\n return (\n <Typography variant=\"body2\">\n Route internal coins has been updated.\n </Typography>\n );\n case ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE:\n return <BalanceWarnings messages={warning.messages} />;\n default:\n return [];\n }\n });\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { useWalletsStore } from '../store/wallets';\nimport {\n ConfirmSwapError,\n ConfirmSwapErrorTypes,\n ConfirmSwapWarningTypes,\n ConfirmSwapWarnings,\n PendingSwapSettings,\n} from '../types';\nimport { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\nimport {\n calculatePendingSwap,\n createBestRouteRequestBody,\n getBalanceWarnings,\n getMinRequiredSlippage,\n getOutputRatio,\n getPercentageChange,\n getRouteOutputAmount,\n getWalletsForNewSwap,\n hasProperSlippage,\n isOutputAmountChangedALot,\n outputRatioHasWarning,\n} from '../utils/swap';\nimport { httpService } from '../services/httpService';\nimport BigNumber from 'bignumber.js';\nimport {\n isNumberOfSwapsChanged,\n isRouteChanged,\n isRouteInternalCoinsUpdated,\n isRouteSwappersUpdated,\n} from '../utils/routing';\nimport { numberToString } from '../utils/numbers';\nimport { BestRouteResponse } from 'rango-sdk';\n\ntype ConfirmSwap = {\n loading: boolean;\n errors: ConfirmSwapError[];\n warnings: ConfirmSwapWarnings[];\n confirmSwap: (() => Promise<PendingSwap | undefined>) | null;\n};\n\nexport function useConfirmSwap(): ConfirmSwap {\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const initialRoute = useBestRouteStore.use.bestRoute();\n const setBestRoute = useBestRouteStore.use.setBestRoute();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const accounts = useWalletsStore.use.accounts();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const meta = useMetaStore.use.meta();\n const customSlippage = useSettingsStore.use.customSlippage();\n const slippage = useSettingsStore.use.slippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const userSlippage = customSlippage || slippage;\n const proceedAnywayRef = useRef(false);\n const confiremedRouteRef = useRef<BestRouteResponse | null>(null);\n let abortControllerRef = useRef<AbortController | null>(null);\n\n const [loading, setLoading] = useState(false);\n const [errors, setErrors] = useState<ConfirmSwapError[]>([]);\n const [warnings, setWarnings] = useState<ConfirmSwapWarnings[]>([]);\n\n useEffect(() => {\n return () => abortControllerRef.current?.abort();\n }, []);\n\n if (!fromToken || !toToken || !inputAmount || !initialRoute)\n return { loading: false, warnings: [], errors: [], confirmSwap: null };\n\n const confirmSwap = async (): Promise<PendingSwap | undefined> => {\n if (proceedAnywayRef.current) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n if (errors.length > 0) setErrors([]);\n if (warnings.length > 0) setWarnings([]);\n proceedAnywayRef.current = false;\n\n if (confiremedRouteRef.current) {\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRouteRef.current,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n return newSwap;\n }\n return;\n }\n\n abortControllerRef.current = new AbortController();\n\n setLoading(true);\n\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n accounts,\n selectedWallets,\n disabledLiquiditySources,\n userSlippage,\n true\n );\n\n try {\n const confiremedRoute = await httpService.getBestRoute(requestBody, {\n signal: abortControllerRef.current?.signal,\n });\n\n abortControllerRef.current = null;\n\n setLoading(false);\n\n if (\n !confiremedRoute.result ||\n !new BigNumber(confiremedRoute.requestAmount).isEqualTo(\n new BigNumber(inputAmount || '-1')\n )\n ) {\n setErrors((prevState) =>\n prevState.concat({\n type: ConfirmSwapErrorTypes.NO_ROUTE,\n })\n );\n return;\n }\n\n const confirmSwapState: Omit<ConfirmSwap, 'confirmSwap' | 'loading'> = {\n errors: [],\n warnings: [],\n };\n\n const routeChanged = isRouteChanged(initialRoute, confiremedRoute!);\n\n if (routeChanged) {\n setBestRoute(confiremedRoute);\n const newRouteOutputUsdValue = new BigNumber(\n confiremedRoute.result?.outputAmount || '0'\n ).multipliedBy(toToken.usdPrice || 0);\n\n const outputRatio = getOutputRatio(\n inputUsdValue,\n newRouteOutputUsdValue\n );\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outputRatio);\n\n if (highValueLoss)\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n });\n else if (isOutputAmountChangedALot(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n newOutputAmount: numberToString(\n getRouteOutputAmount(confiremedRoute)\n ),\n percentageChange: numberToString(\n getPercentageChange(\n getRouteOutputAmount(initialRoute),\n getRouteOutputAmount(confiremedRoute)\n ),\n null,\n 2\n ),\n });\n else if (isRouteInternalCoinsUpdated(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED,\n });\n else if (isNumberOfSwapsChanged(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_UPDATED,\n });\n else if (isRouteSwappersUpdated(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED,\n });\n }\n\n const balanceWarnings = getBalanceWarnings(\n confiremedRoute,\n selectedWallets\n );\n const enoughBalance = balanceWarnings.length === 0;\n\n if (!enoughBalance)\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE,\n messages: balanceWarnings,\n });\n\n const minRequiredSlippage = getMinRequiredSlippage(initialRoute);\n\n if (!hasProperSlippage(userSlippage.toString(), minRequiredSlippage))\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE,\n minRequiredSlippage,\n });\n\n const noErrors = confirmSwapState.errors.length === 0;\n const noWarnings = confirmSwapState.warnings.length === 0;\n\n if (\n (noErrors || (!noErrors && proceedAnywayRef.current)) &&\n (noWarnings || (!noWarnings && proceedAnywayRef.current))\n ) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRoute,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n return newSwap;\n } else if (!proceedAnywayRef.current) {\n proceedAnywayRef.current = true;\n setErrors(confirmSwapState.errors);\n setWarnings(confirmSwapState.warnings);\n confiremedRouteRef.current = confiremedRoute;\n }\n return;\n } catch (error) {\n if ((error as any)?.code === 'ERR_CANCELED') {\n return;\n }\n\n const status = (error as any)?.response?.status;\n\n setLoading(false);\n setErrors([\n {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED,\n status,\n },\n ]);\n\n return;\n }\n };\n\n return { loading, warnings, errors, confirmSwap };\n}\n","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ConfirmSwap } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useSettingsStore } from '../store/settings';\nimport { ConfirmSwapExtraMessages } from '../components/warnings/ConfirmSwapExtraMessages';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { ConfirmSwapErrors } from '../components/ConfirmSwapErrors';\nimport { ConfirmSwapWarnings } from '../components/ConfirmSwapWarnings';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useUiStore } from '../store/ui';\nimport { useConfirmSwap } from '../hooks/useConfirmSwap';\nimport { ConfirmSwapErrorTypes } from '../types';\nimport { useMetaStore } from '../store/meta';\nimport { getBestRouteWithCalculatedFees } from '../utils/routing';\n\nexport function ConfirmSwapPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const navigate = useNavigate();\n\n const bestRoute = useBestRouteStore.use.bestRoute();\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const { tokens } = useMetaStore.use.meta();\n\n const slippage = useSettingsStore.use.slippage();\n const customSlippage = useSettingsStore.use.customSlippage();\n const selectedSlippage = customSlippage || slippage;\n const { loading, errors, warnings, confirmSwap } = useConfirmSwap();\n\n const showHighSlippageWarning = !errors.find(\n (error) => error.type === ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n );\n\n return (\n <ConfirmSwap\n onConfirm={() => {\n confirmSwap?.().then((swap) => {\n if (swap) {\n manager?.create('swap', { swapDetails: swap });\n setSelectedSwap(swap.requestId);\n navigate(navigationRoutes.swaps + `/${swap.requestId}`, {\n replace: true,\n });\n }\n });\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmSwap)}\n bestRoute={getBestRouteWithCalculatedFees(bestRoute, tokens)}\n loading={loading}\n errors={ConfirmSwapErrors(errors)}\n warnings={ConfirmSwapWarnings(warnings)}\n extraMessages={\n showHighSlippageWarning && (\n <ConfirmSwapExtraMessages selectedSlippage={selectedSlippage} />\n )\n }\n confirmButtonTitle={\n warnings.length > 0 || errors.length > 0\n ? 'Proceed anyway!'\n : 'Confirm swap!'\n }\n confirmButtonDisabled={fetchingBestRoute}\n />\n );\n}\n","import { Manager } from '@rango-dev/queue-manager-core';\nimport {\n PendingSwapWithQueueID,\n SwapStorage,\n} from '@rango-dev/queue-manager-rango-preset';\n\nexport const getPendingSwaps = (manager: Manager | undefined) => {\n const result: PendingSwapWithQueueID[] = [];\n\n manager?.getAll().forEach((q, id) => {\n const storage = q.list.getStorage() as SwapStorage;\n\n if (storage?.swapDetails) {\n result.push({\n id,\n swap: storage?.swapDetails,\n });\n }\n });\n\n return result.sort(\n (a, b) => Number(b.swap.creationTime) - Number(a.swap.creationTime)\n );\n};\n","import { History } from '@rango-dev/ui';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { useUiStore } from '../store/ui';\n\nexport function HistoryPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const pendingSwaps = getPendingSwaps(manager).map(({ swap }) => swap);\n\n return (\n <History\n //todo: move PendingSwap type to rango-types\n //@ts-ignore\n list={pendingSwaps}\n onSwapClick={(requestId) => {\n setSelectedSwap(requestId);\n navigate(navigationRoutes.swaps + `/${requestId}`);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swaps)}\n />\n );\n}\n","import { LiquiditySourcesSelector } from '@rango-dev/ui';\nimport React from 'react';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { Source } from '../types';\nimport { removeDuplicateFrom } from '../utils/common';\ninterface PropTypes {\n supportedSwappers: 'all' | Source[];\n}\nexport function LiquiditySourcePage({ supportedSwappers }: PropTypes) {\n const swappers = useMetaStore.use.meta().swappers;\n const toggleLiquiditySource = useSettingsStore.use.toggleLiquiditySource();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const toggleAllLiquiditySources =\n useSettingsStore.use.toggleAllLiquiditySources();\n\n const { navigateBackFrom } = useNavigateBack();\n\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n\n return (\n <LiquiditySourcesSelector\n toggleAll={toggleAllLiquiditySources}\n list={\n supportedSwappers !== 'all'\n ? uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter(\n (s) => s.title === item.title && s.type === item.type\n ).length > 0\n )\n : uniqueSwappersGroups\n }\n onChange={(liquiditySource) =>\n toggleLiquiditySource(liquiditySource.title)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.liquiditySources)}\n />\n );\n}\n","import React from 'react';\nimport { BlockchainSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { BlockchainMeta } from 'rango-sdk';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedChains: 'all' | BlockchainMeta[];\n}\n\nexport function SelectChainPage(props: PropTypes) {\n const { type, supportedChains } = props;\n const blockchains =\n supportedChains === 'all'\n ? useMetaStore.use.meta().blockchains\n : supportedChains;\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setToChain = useBestRouteStore.use.setToChain();\n\n const { navigateBackFrom } = useNavigateBack();\n\n return (\n <BlockchainSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={blockchains}\n selected={type === 'from' ? fromChain : toChain}\n loadingStatus={loadingStatus}\n onChange={(chain) => {\n if (type === 'from') setFromChain(chain, true);\n else setToChain(chain, true);\n navigateBackFrom(navigationRoutes.fromChain);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromChain)}\n />\n );\n}\n","import React from 'react';\nimport { TokenSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { Token } from 'rango-sdk';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { tokensAreEqual } from '../utils/wallets';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedTokens: 'all' | Token[];\n}\n\nexport interface TokenWithBalance extends Token {\n balance?: {\n amount: string;\n usdValue: string;\n };\n}\n\nexport function SelectTokenPage(props: PropTypes) {\n const { navigateBackFrom } = useNavigateBack();\n\n const { type, supportedTokens } = props;\n const sourceTokens = useBestRouteStore.use.sourceTokens();\n const destinationTokens = useBestRouteStore.use.destinationTokens();\n const supportedSourceTokens =\n supportedTokens === 'all'\n ? sourceTokens\n : sourceTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n );\n\n const supportedDestinationTokens =\n supportedTokens === 'all'\n ? destinationTokens\n : destinationTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n );\n console.log(supportedSourceTokens);\n\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToToken = useBestRouteStore.use.setToToken();\n\n return (\n <TokenSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={type == 'from' ? supportedSourceTokens : supportedDestinationTokens}\n selected={type === 'from' ? fromToken : toToken}\n onChange={(token) => {\n if (type === 'from') setFromToken(token);\n else setToToken(token);\n navigateBackFrom(navigationRoutes.fromToken);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromToken)}\n />\n );\n}\n","import React from 'react';\nimport { Settings } from '@rango-dev/ui';\nimport { useSettingsStore } from '../store/settings';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { Source } from '../types';\nimport {\n MAX_SLIPPAGE,\n MIN_SLIPPGAE,\n SLIPPAGES,\n} from '../constants/swapSettings';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\ninterface PropTypes {\n supportedSwappers: 'all' | Source[];\n}\nexport function SettingsPage({ supportedSwappers }: PropTypes) {\n const slippage = useSettingsStore.use.slippage();\n const setSlippage = useSettingsStore.use.setSlippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const customSlippage = useSettingsStore.use.customSlippage();\n const setCustomSlippage = useSettingsStore.use.setCustomSlippage();\n const theme = useSettingsStore.use.theme();\n const setTheme = useSettingsStore.use.setTheme();\n const swappers = useMetaStore.use.meta().swappers;\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n\n const infiniteApprove = useSettingsStore.use.infiniteApprove();\n const toggleInfiniteApprove = useSettingsStore.use.toggleInfiniteApprove();\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n if (supportedSwappers !== 'all') {\n }\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n supportedSwappers !== 'all' &&\n uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter(\n (s) => s.title === item.title && s.type === item.type\n ).length > 0\n );\n\n const supportedUniqueSwappersGroups =\n supportedSwappers !== 'all'\n ? uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter(\n (s) => s.title === item.title && s.type === item.type\n ).length > 0\n )\n : uniqueSwappersGroups;\n\n return (\n <Settings\n slippages={SLIPPAGES}\n selectedSlippage={slippage}\n onSlippageChange={(slippage) => setSlippage(slippage)}\n onLiquiditySourcesClick={() =>\n navigate(navigationRoutes.liquiditySources)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.settings)}\n liquiditySources={supportedUniqueSwappersGroups}\n selectedLiquiditySources={supportedUniqueSwappersGroups.filter(\n (s) => s.selected\n )}\n customSlippage={customSlippage || NaN}\n onCustomSlippageChange={setCustomSlippage}\n minSlippage={MIN_SLIPPGAE}\n maxSlippage={MAX_SLIPPAGE}\n selectedTheme={theme}\n onThemeChange={setTheme}\n infiniteApprove={infiniteApprove}\n toggleInfiniteApprove={toggleInfiniteApprove}\n />\n );\n}\n","import {\n Alert,\n SecondaryPage,\n styled,\n Wallet,\n Typography,\n WalletState,\n} from '@rango-dev/ui';\nimport React, { useEffect, useState } from 'react';\nimport { getlistWallet, sortWalletsBasedOnState } from '../utils/wallets';\nimport { WalletType, detectMobileScreens } from '@rango-dev/wallets-shared';\nimport { useWallets } from '@rango-dev/wallets-core';\n\nimport { useUiStore } from '../store/ui';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useTranslation } from 'react-i18next';\n\ninterface PropTypes {\n supportedWallets: 'all' | WalletType[];\n multiWallets: boolean;\n}\n\nconst ListContainer = styled('div', {\n display: 'grid',\n gap: '.5rem',\n gridTemplateColumns: ' repeat(2, minmax(0, 1fr))',\n height: '450px',\n alignContent: 'baseline',\n padding: '0 0.5rem',\n});\n\nconst AlertContainer = styled('div', {\n paddingBottom: '$16',\n});\nexport function WalletsPage({ supportedWallets, multiWallets }: PropTypes) {\n const { navigateBackFrom } = useNavigateBack();\n const { state, disconnect, getWalletInfo, connect } = useWallets();\n const wallets = getlistWallet(\n state,\n getWalletInfo,\n supportedWallets === 'all' ? Object.values(WalletType) : supportedWallets\n );\n\n let sortedWallets = detectMobileScreens()\n ? wallets.filter((wallet) => wallet.showOnMobile)\n : wallets;\n sortedWallets = sortWalletsBasedOnState(sortedWallets);\n const [walletErrorMessage, setWalletErrorMessage] = useState('');\n const toggleConnectWalletsButton =\n useUiStore.use.toggleConnectWalletsButton();\n const { t } = useTranslation();\n\n const onSelectWallet = async (type: WalletType) => {\n const wallet = state(type);\n try {\n if (walletErrorMessage) setWalletErrorMessage('');\n if (wallet.connected) {\n await disconnect(type);\n } else {\n if (\n !multiWallets &&\n !!wallets.find((w) => w.state === WalletState.CONNECTED)\n ) {\n return;\n }\n await connect(type);\n }\n } catch (e) {\n setWalletErrorMessage('Error: ' + (e as any)?.message);\n }\n };\n\n useEffect(() => {\n toggleConnectWalletsButton();\n return () => toggleConnectWalletsButton();\n }, []);\n\n return (\n <SecondaryPage\n title={t('Select Wallet') || ''}\n textField={false}\n onBack={navigateBackFrom.bind(null, navigationRoutes.wallets)}\n >\n <>\n {walletErrorMessage && (\n <AlertContainer>\n <Alert type=\"error\">\n <Typography variant=\"body2\">{walletErrorMessage}</Typography>\n </Alert>\n </AlertContainer>\n )}\n <ListContainer>\n {sortedWallets.map((wallet, index) => (\n <Wallet\n {...wallet}\n key={`${index}-${wallet.type}`}\n onClick={onSelectWallet}\n />\n ))}\n </ListContainer>\n </>\n </SecondaryPage>\n );\n}\n","import React, { useEffect } from 'react';\nimport { ConfirmWallets } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useWalletsStore } from '../store/wallets';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport {\n getKeplrCompatibleConnectedWallets,\n getRequiredChains,\n getSelectableWallets,\n isExperimentalChain,\n} from '../utils/wallets';\nimport { requiredWallets } from '../utils/swap';\nimport { decimalNumber } from '../utils/numbers';\nimport { useMetaStore } from '../store/meta';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\n\nexport function ConfirmWalletsPage() {\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const bestRoute = useBestRouteStore.use.bestRoute();\n\n const { blockchains } = useMetaStore.use.meta();\n const accounts = useWalletsStore.use.accounts();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const initSelectedWallets = useWalletsStore.use.initSelectedWallets();\n const setSelectedWallet = useWalletsStore.use.setSelectedWallet();\n\n const { getWalletInfo, connect } = useWallets();\n const confirmDisabled = !requiredWallets(bestRoute).every((chain) =>\n selectedWallets.map((wallet) => wallet.chain).includes(chain)\n );\n\n const firstStep = bestRoute?.result?.swaps[0];\n const lastStep =\n bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1];\n\n const fromAmount = decimalNumber(firstStep?.fromAmount, 3);\n const toAmount = decimalNumber(lastStep?.toAmount, 3);\n useEffect(() => {\n initSelectedWallets();\n }, []);\n\n const selectableWallets = getSelectableWallets(\n accounts,\n selectedWallets,\n getWalletInfo\n );\n\n const handleConnectChain = (wallet: string) => {\n const network = wallet as Network;\n getKeplrCompatibleConnectedWallets(selectableWallets).forEach(\n (compatibleWallet: WalletType) => connect?.(compatibleWallet, network)\n );\n };\n\n return (\n <ConfirmWallets\n requiredWallets={getRequiredChains(bestRoute)}\n selectableWallets={selectableWallets}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmWallets)}\n swap={bestRoute}\n fromAmount={fromAmount}\n toAmount={toAmount}\n onConfirm={() =>\n navigate(navigationRoutes.confirmSwap, { replace: true })\n }\n onChange={(wallet) => setSelectedWallet(wallet)}\n confirmDisabled={confirmDisabled}\n handleConnectChain={(wallet) => handleConnectChain(wallet)}\n isExperimentalChain={(wallet) =>\n getKeplrCompatibleConnectedWallets(selectableWallets).length > 0\n ? isExperimentalChain(blockchains, wallet)\n : false\n }\n />\n );\n}\n","import React from 'react';\nimport copy from 'copy-to-clipboard';\n\nexport default function useCopyToClipboard(resetInterval?: number) {\n const [isCopied, setCopied] = React.useState(false);\n\n const handleCopy = React.useCallback((text: string | number) => {\n copy(text.toString());\n setCopied(true);\n }, []);\n\n React.useEffect(() => {\n let timeout: NodeJS.Timeout;\n if (isCopied && resetInterval) {\n timeout = setTimeout(() => setCopied(false), resetInterval);\n }\n return () => {\n clearTimeout(timeout);\n };\n }, [isCopied, resetInterval]);\n\n return [isCopied, handleCopy] as const;\n}\n","import React from 'react';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { SwapHistory } from '@rango-dev/ui';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { useUiStore } from '../store/ui';\nimport useCopyToClipboard from '../hooks/useCopyToClipboard';\n\nexport function SwapDetailsPage() {\n const selectedSwapRequestId = useUiStore.use.selectedSwapRequestId();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const [isCopied, handleCopy] = useCopyToClipboard(2000);\n\n const pendingSwaps = getPendingSwaps(manager);\n const selectedSwap = pendingSwaps.find(\n ({ swap }) => swap.requestId === selectedSwapRequestId\n )?.swap;\n\n return (\n <SwapHistory\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n //todo: move PendingSwap type to rango-types\n //@ts-ignore\n pendingSwap={selectedSwap}\n onCopy={handleCopy}\n isCopied={isCopied}\n //todo: implement swap cancellation (move queueManager logic to queueManager/rango-preset)\n onCancel={(requestId) => console.log(requestId)}\n />\n );\n}\n","import React from 'react';\nimport { useRoutes } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { ConfirmSwapPage } from '../pages/ConfirmSwapPage';\nimport { HistoryPage } from '../pages/HistoryPage';\nimport { Home } from '../pages/Home';\nimport { LiquiditySourcePage } from '../pages/LiquiditySourcesPage';\nimport { SelectChainPage } from '../pages/SelectChainPage';\nimport { SelectTokenPage } from '../pages/SelectTokenPage';\nimport { SettingsPage } from '../pages/SettingsPage';\nimport { WalletsPage } from '../pages/WalletsPage';\nimport { ConfirmWalletsPage } from '../pages/ConfirmWalletsPage';\nimport { SwapDetailsPage } from '../pages/SwapDetailsPage';\nimport { Configs } from '../types';\n\ninterface PropTypes {\n configs?: Configs;\n}\n\nexport function AppRoutes(props: PropTypes) {\n const { configs } = props;\n\n return useRoutes([\n {\n path: navigationRoutes.home,\n element: (\n <Home\n title={configs?.title}\n titleSize={configs?.titleSize}\n titleWeight={configs?.titleWeight}\n />\n ),\n },\n {\n path: navigationRoutes.fromChain,\n element: (\n <SelectChainPage\n type=\"from\"\n supportedChains={configs?.fromChains || 'all'}\n />\n ),\n },\n {\n path: navigationRoutes.toChain,\n element: (\n <SelectChainPage\n type=\"to\"\n supportedChains={configs?.toChains || 'all'}\n />\n ),\n },\n {\n path: navigationRoutes.fromToken + '/*',\n element: (\n <SelectTokenPage\n type=\"from\"\n supportedTokens={configs?.fromTokens || 'all'}\n />\n ),\n },\n {\n path: navigationRoutes.toToken,\n element: (\n <SelectTokenPage\n type=\"to\"\n supportedTokens={configs?.toTokens || 'all'}\n />\n ),\n },\n {\n path: navigationRoutes.settings,\n element: (\n <SettingsPage supportedSwappers={configs?.liquiditySources || 'all'} />\n ),\n },\n {\n path: navigationRoutes.liquiditySources,\n element: (\n <LiquiditySourcePage\n supportedSwappers={configs?.liquiditySources || 'all'}\n />\n ),\n },\n { path: navigationRoutes.swaps, element: <HistoryPage /> },\n {\n path: navigationRoutes.swapDetails,\n element: <SwapDetailsPage />,\n },\n {\n path: navigationRoutes.wallets,\n element: (\n <WalletsPage\n supportedWallets={configs?.wallets || 'all'}\n multiWallets={\n typeof configs?.multiWallets === 'undefined'\n ? true\n : configs.multiWallets\n }\n />\n ),\n },\n { path: navigationRoutes.confirmSwap, element: <ConfirmSwapPage /> },\n { path: navigationRoutes.confirmWallets, element: <ConfirmWalletsPage /> },\n ]);\n}\n","import { Button, AddWalletIcon, Typography, styled } from '@rango-dev/ui';\nimport React, { useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { AppRoutes } from './AppRoutes';\nimport { useWalletsStore } from '../store/wallets';\nimport {\n calculateWalletUsdValue,\n getSelectableWallets,\n} from '../utils/wallets';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { Configs } from '../types';\nimport { useTranslation } from 'react-i18next';\nimport { useBestRouteStore } from '../store/bestRoute';\n\nconst Header = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n});\n\nconst WalletImage = styled('img', {\n width: '$24',\n height: '$24',\n marginLeft: -15,\n marginRight: '$6',\n borderRadius: '99999px',\n});\n\nexport type LayoutProps = {\n configs?: Configs;\n};\n\nexport function Layout({ configs }: LayoutProps) {\n const navigate = useNavigate();\n const { balances, accounts, selectedWallets } = useWalletsStore();\n const { getWalletInfo } = useWallets();\n const connectedWalletsImages = removeDuplicateFrom(\n getSelectableWallets(accounts, selectedWallets, getWalletInfo).map(\n (w) => w.image\n )\n );\n\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n\n const totalBalance = calculateWalletUsdValue(balances);\n const connectWalletsButtonDisabled =\n useUiStore.use.connectWalletsButtonDisabled();\n const { t } = useTranslation();\n useEffect(() => {\n setToChain(configs?.toChain || null);\n setToToken(configs?.toToken || null);\n }, [configs?.toChain, configs?.toToken]);\n useEffect(() => {\n setInputAmount(configs?.fromAmount?.toString() || '');\n }, [configs?.fromAmount]);\n\n useEffect(() => {\n setFromToken(configs?.fromToken || null);\n setFromChain(configs?.fromChain || null);\n }, [configs?.fromToken, configs?.fromChain]);\n return (\n <>\n <Header>\n <Button\n size=\"small\"\n suffix={<AddWalletIcon size={20} />}\n variant=\"ghost\"\n flexContent\n onClick={() => {\n if (!connectWalletsButtonDisabled)\n navigate(navigationRoutes.wallets);\n }}\n >\n {connectedWalletsImages?.length ? (\n connectedWalletsImages.map((walletImage, index) => (\n <WalletImage key={index} src={walletImage} />\n ))\n ) : (\n <></>\n )}\n <Typography variant=\"body2\">\n {!accounts?.length ? t('Connect Wallet') : `$${totalBalance || 0}`}\n </Typography>\n </Button>\n </Header>\n <AppRoutes configs={configs} />\n </>\n );\n}\n","import { globalCss } from '@rango-dev/ui';\n\nexport const globalStyles = globalCss({\n '*': {\n '&::-webkit-scrollbar': { width: '$8' },\n '&::-webkit-scrollbar-thumb': {\n backgroundColor: '$neutrals400',\n },\n '&::-webkit-scrollbar-thumb:hover': {\n backgroundColor: '$neutrals500',\n },\n '&::-webkit-scrollbar-track': {\n backgroundColor: '$neutrals300',\n },\n },\n});\nexport const globalFont = (fontFamily: string) =>\n globalCss({\n '@import': [\n \"url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap')\",\n \"url('https://fonts.cdnfonts.com/css/times-new-roman')\",\n ],\n [`.font_${fontFamily.replace(/ /g, '')} ._text`]: {\n fontFamily,\n },\n })();\n","import { useEffect, useRef } from 'react';\n\nexport default function usePrevious(value: string) {\n // The ref object is a generic container whose current property is mutable ...\n // ... and can hold any value, similar to an instance property on a class\n const ref = useRef<string>();\n // Store current value in ref\n useEffect(() => {\n ref.current = value;\n }, [value]); // Only re-run if value changes\n // Return previous value (happens before update in useEffect above)\n return ref.current;\n}\n","import { createTheme } from '@rango-dev/ui';\nimport { useState, useEffect, useLayoutEffect } from 'react';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { Colors } from '../types';\nimport { shadeColor } from '../utils/common';\nimport usePrevious from './usePrevious';\n\nexport function useTheme({\n primary = '#5FA425',\n background = '#fff',\n foreground = '#000',\n error = '#FF0000',\n warning = '#F5A623',\n success = '#0070F3',\n fontFamily = 'Robot',\n borderRadius = 5,\n}: Colors & { borderRadius?: number; fontFamily?: string }) {\n const theme = useSettingsStore.use.theme();\n const fetchMeta = useMetaStore.use.fetchMeta();\n const colors = {\n neutrals200: '#FAFAFA',\n neutrals300: '#EAEAEA',\n neutrals400: '#999999',\n neutrals500: '#888888',\n neutrals600: '#666666',\n neutrals700: '#444444',\n neutrals800: '#333333',\n neutrals900: '#111111',\n primary,\n primary100: shadeColor(primary, 15),\n primary200: shadeColor(primary, -10),\n primary300: shadeColor(primary, -15),\n primary400: shadeColor(primary, -20),\n primary500: shadeColor(primary, -25),\n primary600: shadeColor(primary, -30),\n primary700: shadeColor(primary, -35),\n primary800: shadeColor(primary, -40),\n primary900: shadeColor(primary, -45),\n background,\n foreground,\n error,\n error100: shadeColor(error, 50),\n error300: shadeColor(error, -10),\n error500: shadeColor(error, -20),\n error700: shadeColor(error, -30),\n warning,\n warning100: shadeColor(warning, 50),\n warning300: shadeColor(warning, -10),\n warning500: shadeColor(warning, -20),\n warning700: shadeColor(warning, -30),\n success,\n success100: shadeColor(success, 50),\n success300: shadeColor(success, -10),\n success500: shadeColor(success, -20),\n success700: shadeColor(success, -30),\n };\n\n const customeLightTheme = createTheme({\n colors,\n radii: {\n 5: `${borderRadius}px`,\n },\n });\n\n const customeDarkTheme = createTheme({\n colors: {\n ...colors,\n neutrals200: '#111111',\n neutrals300: '#333333',\n neutrals400: '#444444',\n neutrals500: '#666666',\n neutrals600: '#888888',\n neutrals700: '#999999',\n neutrals800: '#EAEAEA',\n neutrals900: '#FAFAFA',\n foreground: background,\n background: foreground,\n },\n radii: {\n 5: `${borderRadius}px`,\n },\n });\n const [OSTheme, setOSTheme] = useState(customeLightTheme);\n useEffect(() => {\n (async () => {\n await fetchMeta();\n })();\n\n const switchTheme = (event: MediaQueryListEvent) => {\n if (event.matches) setOSTheme(customeDarkTheme);\n else setOSTheme(customeLightTheme);\n };\n\n if (\n window.matchMedia &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ) {\n setOSTheme(customeDarkTheme);\n }\n\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .addEventListener('change', switchTheme);\n return () => {\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .removeEventListener('change', switchTheme);\n };\n }, []);\n\n const prevFont = usePrevious(fontFamily);\n\n useLayoutEffect(() => {\n const { classList } = document.body;\n\n if (prevFont) classList.remove(`font_${prevFont.replace(/ /g, '')}`);\n classList.add(`font_${fontFamily.replace(/ /g, '')}`);\n }, [fontFamily]);\n\n const getActiveTheme = () => {\n if (theme === 'auto') return OSTheme;\n else return theme === 'dark' ? customeDarkTheme : customeLightTheme;\n };\n\n return { activeTheme: getActiveTheme() };\n}\n","import { useTranslation } from 'react-i18next';\n\nexport default function useSelectLanguage() {\n const { i18n } = useTranslation();\n // @ts-ignore\n const currentLanguage = i18n?.language || 'en';\n const changeLanguage = (value: string) => {\n if (currentLanguage !== value) {\n // @ts-ignore\n i18n.changeLanguage(value);\n }\n };\n\n return { changeLanguage, currentLanguage };\n}\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport en from './languages/en.json';\nimport tr from './languages/tr.json';\nimport Backend from 'i18next-http-backend';\nimport LanguageDetector from 'i18next-browser-languagedetector';\n\nconst languages = ['en', 'tr'];\n\ni18n\n .use(Backend)\n // detect user language\n .use(LanguageDetector)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n .init({\n resources: {\n en: {\n translation: en,\n },\n tr: {\n translation: tr,\n },\n },\n fallbackLng: 'en',\n debug: true,\n whitelist: languages,\n });\n\nexport default i18n;","import React, { PropsWithChildren } from 'react';\nimport { Provider as ManagerProvider } from '@rango-dev/queue-manager-react';\nimport {\n swapQueueDef,\n SwapQueueContext,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport {\n convertEvmBlockchainMetaToEvmChainInfo,\n Network,\n WalletType,\n} from '@rango-dev/wallets-shared';\nimport { useMetaStore } from './store/meta';\nimport { useWalletsStore } from './store/wallets';\nimport { walletAndSupportedChainsNames } from './utils/wallets';\nimport { isEvmBlockchain } from 'rango-sdk';\n\nfunction QueueManager(props: PropsWithChildren<{}>) {\n const {\n providers,\n getSigners,\n state,\n connect,\n canSwitchNetworkTo,\n getWalletInfo,\n } = useWallets();\n\n const { blockchains } = useMetaStore.use.meta();\n const balances = useWalletsStore.use.balances();\n\n const wallets = {\n blockchains: balances.map((wallet) => ({\n accounts: [wallet],\n name: wallet.chain,\n })),\n };\n\n const switchNetwork = (wallet: WalletType, network: Network) => {\n if (!canSwitchNetworkTo(wallet, network)) {\n return undefined;\n }\n return connect(wallet, network);\n };\n\n // TODO: this code copy & pasted from rango, should be refactored.\n const allBlockchains = blockchains\n .filter((blockchain) => blockchain.enabled)\n .reduce(\n (blockchainsObj, blockchain) => (\n (blockchainsObj[blockchain.name] = blockchain), blockchainsObj\n ),\n {}\n );\n const evmBasedChains = blockchains.filter(isEvmBlockchain);\n const getSupportedChainNames = (type: WalletType) => {\n const { supportedChains } = getWalletInfo(type);\n return walletAndSupportedChainsNames(supportedChains);\n };\n const allProviders = providers();\n const context: SwapQueueContext = {\n meta: {\n blockchains: allBlockchains,\n evmBasedChains: evmBasedChains,\n evmNetworkChainInfo:\n convertEvmBlockchainMetaToEvmChainInfo(evmBasedChains),\n getSupportedChainNames,\n },\n getSigners,\n //todo: remove Network type\n //@ts-ignore\n wallets,\n providers: allProviders,\n switchNetwork,\n connect,\n state,\n notifier: (message) => {\n console.log('[notifier]', message);\n },\n };\n\n return (\n <ManagerProvider\n //@ts-ignore\n queuesDefs={[swapQueueDef]}\n context={context}\n onPersistedDataLoaded={(_manager) => {}}\n isPaused={false}\n >\n {props.children}\n </ManagerProvider>\n );\n}\n\nexport default QueueManager;\n","import { SwapContainer } from '@rango-dev/ui';\nimport React, { useEffect } from 'react';\nimport { AppRouter } from './components/AppRouter';\nimport { useMetaStore } from './store/meta';\nimport { Events, Provider } from '@rango-dev/wallets-core';\nimport { allProviders } from '@rango-dev/provider-all';\nimport { EventHandler } from '@rango-dev/wallets-core/dist/wallet';\nimport { Network } from '@rango-dev/wallets-shared';\nimport {\n prepareAccountsForWalletStore,\n walletAndSupportedChainsNames,\n} from './utils/wallets';\nimport { useWalletsStore } from './store/wallets';\nimport { Layout } from './components/Layout';\nimport { globalFont, globalStyles } from './globalStyles';\nimport { useTheme } from './hooks/useTheme';\nimport { isEvmBlockchain } from 'rango-sdk';\nimport { Configs } from './types';\nimport { useSettingsStore } from './store/settings';\nimport useSelectLanguage from './hooks/useSelectLanguage';\nimport './i18n';\nimport QueueManager from './QueueManager';\n\nexport type WidgetProps = {\n configs: Configs;\n};\n\nexport const SwapBox: React.FC<WidgetProps> = ({ configs }) => {\n globalStyles();\n globalFont(configs?.fontFamily || 'Roboto');\n\n const { activeTheme } = useTheme({\n ...configs.colors,\n borderRadius: configs?.borderRadius,\n fontFamily: configs?.fontFamily,\n });\n const { blockchains } = useMetaStore.use.meta();\n const disconnectWallet = useWalletsStore.use.disconnectWallet();\n const connectWallet = useWalletsStore.use.connectWallet();\n const setTheme = useSettingsStore.use.setTheme();\n const { changeLanguage } = useSelectLanguage();\n const clearConnectedWallet = useWalletsStore.use.clearConnectedWallet();\n\n const evmBasedChainNames = blockchains\n .filter(isEvmBlockchain)\n .map((chain) => chain.name);\n\n const onUpdateState: EventHandler = (\n type,\n event,\n value,\n _,\n supportedChains\n ) => {\n if (event === Events.ACCOUNTS) {\n if (value) {\n const supportedChainNames: Network[] | null =\n walletAndSupportedChainsNames(supportedChains);\n const data = prepareAccountsForWalletStore(\n type,\n value,\n evmBasedChainNames,\n supportedChainNames\n );\n connectWallet(data);\n } else {\n disconnectWallet(type);\n }\n }\n };\n let providers = allProviders();\n\n useEffect(() => {\n if (configs.theme !== 'auto') setTheme(configs.theme);\n }, [configs.theme]);\n\n useEffect(() => {\n const wallets = configs.wallets;\n clearConnectedWallet();\n providers =\n wallets === 'all'\n ? allProviders()\n : allProviders().filter((provider) => {\n const type = provider.config.type;\n return wallets.find((w) => w === type);\n });\n }, [configs?.wallets]);\n\n useEffect(() => {\n changeLanguage(configs?.languege);\n }, [configs?.languege]);\n\n return (\n <Provider\n allBlockChains={blockchains}\n providers={providers}\n onUpdateState={onUpdateState}\n >\n <div id=\"pageContainer\" className={activeTheme}>\n <QueueManager>\n <SwapContainer\n style={{\n width: configs?.width || 'auto',\n height: configs?.height || 'auto',\n }}\n >\n <AppRouter\n title={configs.title}\n titleSize={configs.titleSize}\n titleWeight={configs.titleWeight}\n >\n <Layout configs={configs} />\n </AppRouter>\n </SwapContainer>\n </QueueManager>\n </div>\n </Provider>\n );\n};\n"],"names":["navigationRoutes","home","fromChain","fromToken","toChain","toToken","settings","liquiditySources","swaps","wallets","confirmSwap","confirmWallets","swapDetails","ZERO","BigNumber","removeDuplicateFrom","array","Array","from","Set","areEqual","array1","array2","length","every","v","i","shadeColor","color","percent","R","parseInt","substring","G","B","Math","round","RR","toString","GG","BB","secondsToString","s","seconds","padStart","minutes","numberToString","number","minDecimals","maxDecimals","n","roundingMode","maxI","toFixed","eq","gte","toFormat","min","max","pow","isEqualTo","totalArrivalTime","data","result","reduce","a","b","estimatedTimeInSeconds","decimalNumber","parseFloat","getStateWallet","state","connected","WalletStatus","CONNECTED","connecting","CONNECTING","installed","NOT_INSTALLED","DISCONNECTED","getlistWallet","getState","getWalletInfo","list","excludedWallets","WalletType","UNKNOWN","TERRA_STATION","LEAP","filter","wallet","includes","map","type","name","img","image","installLink","showOnMobile","detectInstallLink","walletAndSupportedChainsNames","supportedChains","blockchainMeta","prepareAccountsForWalletStore","accounts","evmBasedChains","supportedChainNames","addAccount","network","address","newAccount","chain","walletType","push","forEach","account","readAccountAddress","hasLimitation","isSupported","isUnknown","Network","Unknown","notSupportedNetworkByWallet","isUknownAndEvmBased","isEvmAddress","isEvmBasedChain","evmChainsSupportedByWallet","toLowerCase","getRequiredChains","route","swap","currentStepFromBlockchain","blockchain","currentStepToBlockchain","to","lastAddedWallet","getSelectableWallets","selectedWallets","connectedWallets","selected","find","getBalanceFromWallet","balances","symbol","selectedChainBalances","balance","bl","sort","amount","isAccountAndBalanceMatched","makeBalanceFor","retrivedBalance","tokens","blockChain","explorerUrl","loading","error","tokenBalance","asset","ticker","rawAmount","decimal","decimals","shiftedBy","logo","usdPrice","getUsdPrice","resetBalanceState","calculateWalletUsdValue","uniqueAccountAddresses","uniqueBalane","acc","current","findIndex","modifiedWalletBlockchains","modifiedWalletBlockchain","has","add","accountAddress","total","flatMap","multipliedBy","plus","numberWithThousandSeperator","parts","split","replace","join","sortTokens","walletConnected","some","token","concat","isSecondaryCoin","tokenA","tokenB","usdValue","allTokens","t","toUpperCase","isExperimentalChain","blockchains","cosmosExperimentalChainInfo","getCosmosExperimentalChainInfo","Object","entries","_ref","isCosmosBlockchain","getKeplrCompatibleConnectedWallets","selectableWallets","connectedWalletTypes","KEPLR_COMPATIBLE_WALLETS","compatibleWallet","getTokensWithBalance","_ref2","otherProps","tokenAmount","tokenUsdValue","getSortedTokens","otherChainTokens","fromChainEqueulsToToChain","filteredTokens","tokensAreEqual","getDefaultToken","sortedTokens","otherToken","selectedToken","firstToken","secondToken","sortWalletsBasedOnState","Number","getOutputRatio","inputUsdValue","outputUsdValue","lte","div","minus","outputRatioHasWarning","outputRatio","hasLimitError","bestRoute","minimum","fromAmountMinValue","maximum","fromAmountMaxValue","isExclusive","fromAmountRestrictionType","fromAmount","gt","lt","LimitErrorMessage","fromAmountRangeError","recommendation","getSwapButtonState","loadingMetaStatus","highValueLoss","priceImpactCanNotBeComputed","needsToWarnEthOnPath","title","disabled","hasWarning","canComputePriceImpact","inputAmount","calculatePendingSwap","validateBalanceOrFee","meta","simulationResult","Error","creationTime","Date","getTime","finishTime","requestId","status","isPaused","extraMessage","extraMessageSeverity","extraMessageDetail","extraMessageErrorCode","networkStatusExtraMessage","networkStatusExtraMessageDetail","lastNotificationTime","steps","index","swapper","swappers","id","swapperId","swapperType","types","fromBlockchain","toBlockchain","fromSymbol","fromSymbolAddress","fromDecimals","fromAmountPrecision","fromLogo","toSymbol","toSymbolAddress","toDecimals","toLogo","startTransactionTime","feeInUsd","getUsdFeeOfStep","expectedOutputAmountHumanReadable","toAmount","outputAmount","networkStatus","executedTransactionId","externalTransactionId","trackingCode","cosmosTransaction","solanaTransaction","starknetTransaction","starknetApprovalTransaction","tronTransaction","tronApprovalTransaction","evmTransaction","evmApprovalTransaction","transferTransaction","diagnosisUrl","internalSteps","fromBlockchainLogo","toBlockchainLogo","swapperLogo","requiredWallets","step","totalFeeInUsd","fee","expenseType","unitPrice","getTotalFeeInUsd","totalFee","hasHighFee","getMinRequiredSlippage","slippages","slippage","recommendedSlippage","hasProperSlippage","userSlippage","minRequiredSlippage","createBestRouteRequestBody","disabledLiquiditySources","checkPrerequisites","selectedWalletsMap","selectedWallet","chainAndAccounts","connectedWallet","addresses","requestBody","swapperGroups","swappersGroupsExclude","getWalletsForNewSwap","getRouteOutputAmount","getPercentageChange","oldValue","newValue","isOutputAmountChangedALot","oldRoute","newRoute","oldOutputAmount","newOutputAmount","percentageChange","toNumber","getBalanceWarnings","validationStatus","walletsSortedByRequiredWallets","selectedWallet1","selectedWallet2","indexOf","getRequiredBalanceOfWallet","ok","currentAmount","requiredAmount","reason","warningMessage","searchParamsToToken","searchParams","symbolAndAddress","getBestRouteToTokenUsdPrice","isNumberOfSwapsChanged","route1","route2","route1Swaps","route2Swaps","isRouteSwappersUpdated","route1Swappers","route2Swappers","isRouteInternalCoinsUpdated","route1InternalCoins","route2InternalCoins","isRouteChanged","relatedFeeStatus","item","requiredAssets","isRouteParametersChanged","prevParams","currentParams","customSlippage","getBestRouteWithCalculatedFees","swapsWithFee","createSelectors","_store","store","use","k","keys","httpService","RangoClient","process","env","REACT_APP_API_KEY","SLIPPAGES","DEFAULT_SLIPPAGE","HIGH_SLIPPAGE","MAX_SLIPPAGE","MIN_SLIPPGAE","useMetaStore","create","set","popularTokens","loadingStatus","fetchMeta","response","getAllMetadata","chainThatHasTokenInMetaResponse","enabledChains","enabled","useSettingsStore","persist","subscribeWithSelector","infiniteApprove","theme","setSlippage","setCustomSlippage","toggleAllLiquiditySources","swappersGroup","swapperGroup","toggleInfiniteApprove","toggleLiquiditySource","liquiditySource","setTheme","useWalletsStore","connectWallet","getWalletsDetails","disconnectWallet","initSelectedWallets","requiredChains","useBestRouteStore","anyWalletSelected","firstWalletWithMatchedChain","setSelectedWallet","clearConnectedWallet","subscribe","setState","sourceTokens","destinationTokens","sourceTokensWithBalance","destinationTokensWithBalance","equalityFn","shallow","getUsdValue","setBestRoute","setFromChain","setDefaultToken","setFromToken","setToChain","setToToken","setInputAmount","bestRouteStore","settingsStore","abortController","fetchBestRoute","abort","AbortController","getBestRoute","signal","then","res","catch","code","message","bind","prevState","SearchParams","useUiStore","connectWalletsButtonDisabled","selectedSwapRequestId","toggleConnectWalletsButton","setSelectedSwap","UpdateUrl","firstRender","useRef","setSearchParams","useSearchParams","location","useLocation","firstRenderSearchParams","search","searchParamsRef","useEffect","params","createSearchParams","value","key","pathname","fromChainString","fromTokenString","toChainString","toTokenString","FROM_CHAIN","FROM_TOKEN","TO_CHAIN","TO_TOKEN","FROM_AMOUNT","get","ButtonsContainer","styled","display","HeaderButtons","props","onClickRefresh","navigate","useNavigate","React","Tooltip","content","Button","variant","onClick","RetryIcon","size","HistoryIcon","SettingsIcon","HeaderContainer","justifyContent","alignItems","width","padding","Header","titleSize","titleWeight","useTranslation","titleStyle","css","fontSize","fontWeight","Typography","className","toLocaleLowerCase","Box","flexDirection","Container","boxSizing","backgroundColor","borderRadius","StyledImage","maxHeight","Options","ImagePlaceholder","height","OutputContainer","flexGrow","border","position","paddingLeft","paddingRight","TokenInfo","tokenBalanceReal","ItemSuffix","style","InfoCircleIcon","AngleDownIcon","prefix","src","suffix","align","marginRight","displayName","TextField","autoFocus","placeholder","right","bottom","onChange","event","onAmountChange","target","undefined","paddingTop","Logo","fill","margin","StyledAnchor","textDecoration","BottomLogo","href","xmlns","viewBox","d","SwithFromAndTo","count","Footer","errorMessages","genericServerError","SwitchButtonContainer","top","BestRouteContainer","Alerts","Home","waningMessage","isRouterInContext","useInRouterContext","setCount","useState","fetchingBestRoute","bestRouteError","swithFromAndTo","prev","errorMessage","showBestRoute","outToInRatio","swapButtonState","highFee","VerticalSwapIcon","BestRoute","feeWarning","totalTime","Alert","Route","children","ref","AppRouter","Router","MemoryRouter","StyledButton","marginTop","ChangeSlippageButton","HighSlippageWarning","selectedSlippage","ConfirmSwapExtraMessages","highSlippage","useNavigateBack","navigateBackFrom","currentRoute","window","history","idx","ConfirmSwapErrorTypes","ConfirmSwapWarningTypes","MinRequiredSlippage","ConfirmSwapErrors","errors","NO_ROUTE","REQUEST_FAILED","ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS","INSUFFICIENT_SLIPPAGE","List","variants","showListStyle","true","ListItem","listStyleType","listStylePosition","Message","BalanceWarnings","messages","warning","ConfirmSwapWarnings","warnings","ROUTE_UPDATED","ROUTE_AND_OUTPUT_AMOUNT_UPDATED","ROUTE_SWAPPERS_UPDATED","ROUTE_COINS_UPDATED","INSUFFICIENT_BALANCE","useConfirmSwap","initialRoute","proceedAnywayRef","confiremedRouteRef","abortControllerRef","setLoading","setErrors","setWarnings","swapSettings","disabledSwappersGroups","newSwap","confiremedRoute","requestAmount","confirmSwapState","routeChanged","newRouteOutputUsdValue","balanceWarnings","enoughBalance","noErrors","noWarnings","ConfirmSwapPage","manager","useManager","showHighSlippageWarning","ConfirmSwap","onConfirm","onBack","extraMessages","confirmButtonTitle","confirmButtonDisabled","getPendingSwaps","getAll","q","storage","getStorage","HistoryPage","pendingSwaps","History","onSwapClick","LiquiditySourcePage","supportedSwappers","uniqueSwappersGroups","LiquiditySourcesSelector","toggleAll","SelectChainPage","BlockchainSelector","SelectTokenPage","supportedTokens","supportedSourceTokens","supportedToken","supportedDestinationTokens","console","log","TokenSelector","SettingsPage","supportedUniqueSwappersGroups","Settings","onSlippageChange","onLiquiditySourcesClick","selectedLiquiditySources","NaN","onCustomSlippageChange","minSlippage","maxSlippage","selectedTheme","onThemeChange","ListContainer","gap","gridTemplateColumns","alignContent","AlertContainer","paddingBottom","WalletsPage","supportedWallets","multiWallets","disconnect","connect","useWallets","values","sortedWallets","detectMobileScreens","walletErrorMessage","setWalletErrorMessage","onSelectWallet","w","WalletState","e","SecondaryPage","textField","Wallet","ConfirmWalletsPage","confirmDisabled","firstStep","lastStep","handleConnectChain","ConfirmWallets","useCopyToClipboard","resetInterval","isCopied","setCopied","handleCopy","useCallback","text","copy","timeout","setTimeout","clearTimeout","SwapDetailsPage","selectedSwap","SwapHistory","pendingSwap","onCopy","onCancel","AppRoutes","configs","useRoutes","path","element","fromChains","toChains","fromTokens","toTokens","WalletImage","marginLeft","Layout","connectedWalletsImages","totalBalance","AddWalletIcon","flexContent","walletImage","globalStyles","globalCss","globalFont","fontFamily","usePrevious","useTheme","primary","background","foreground","success","colors","neutrals200","neutrals300","neutrals400","neutrals500","neutrals600","neutrals700","neutrals800","neutrals900","primary100","primary200","primary300","primary400","primary500","primary600","primary700","primary800","primary900","error100","error300","error500","error700","warning100","warning300","warning500","warning700","success100","success300","success500","success700","customeLightTheme","createTheme","radii","customeDarkTheme","OSTheme","setOSTheme","switchTheme","matches","matchMedia","addEventListener","removeEventListener","prevFont","useLayoutEffect","classList","document","body","remove","getActiveTheme","activeTheme","useSelectLanguage","i18n","currentLanguage","language","changeLanguage","languages","Backend","LanguageDetector","initReactI18next","init","resources","en","translation","tr","fallbackLng","debug","whitelist","QueueManager","providers","getSigners","canSwitchNetworkTo","switchNetwork","allBlockchains","blockchainsObj","isEvmBlockchain","getSupportedChainNames","allProviders","context","evmNetworkChainInfo","convertEvmBlockchainMetaToEvmChainInfo","notifier","ManagerProvider","queuesDefs","swapQueueDef","onPersistedDataLoaded","_manager","SwapBox","evmBasedChainNames","onUpdateState","_","Events","ACCOUNTS","provider","config","languege","Provider","allBlockChains","SwapContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"widget-embedded.cjs.development.js","sources":["../src/constants/navigationRoutes.ts","../src/constants/numbers.ts","../src/utils/common.ts","../src/utils/numbers.ts","../src/utils/wallets.ts","../src/utils/swap.ts","../src/utils/routing.ts","../src/store/selectors.ts","../src/services/httpService.ts","../src/constants/swapSettings.ts","../src/store/meta.ts","../src/store/settings.ts","../src/store/wallets.ts","../src/store/bestRoute.ts","../src/constants/searchParams.ts","../src/store/ui.ts","../src/components/UpdateUrl.tsx","../src/components/HeaderButtons.tsx","../src/components/Header.tsx","../src/components/TokenInfo.tsx","../src/components/BottomLogo.tsx","../src/components/SwitchFromAndTo.tsx","../src/components/Footer.tsx","../src/constants/errors.ts","../src/pages/Home.tsx","../src/components/AppRouter.tsx","../src/components/ChangeSlippageButton.tsx","../src/components/warnings/HighSlippageWarning.tsx","../src/components/warnings/ConfirmSwapExtraMessages.tsx","../src/hooks/useNavigateBack.ts","../src/types/routing.ts","../src/components/warnings/MinRequiredSlippage.tsx","../src/components/ConfirmSwapErrors.tsx","../src/components/warnings/BalanceWarnings.tsx","../src/components/ConfirmSwapWarnings.tsx","../src/hooks/useConfirmSwap.ts","../src/pages/ConfirmSwapPage.tsx","../src/utils/queue.ts","../src/pages/HistoryPage.tsx","../src/pages/LiquiditySourcesPage.tsx","../src/pages/SelectChainPage.tsx","../src/pages/SelectTokenPage.tsx","../src/pages/SettingsPage.tsx","../src/pages/WalletsPage.tsx","../src/pages/ConfirmWalletsPage.tsx","../src/hooks/useCopyToClipboard.ts","../src/pages/SwapDetailsPage.tsx","../src/components/AppRoutes.tsx","../src/components/Layout.tsx","../src/globalStyles.ts","../src/hooks/usePrevious.ts","../src/hooks/useTheme.ts","../src/hooks/useSelectLanguage.ts","../src/i18n.js","../src/QueueManager.tsx","../src/lib.tsx"],"sourcesContent":["export const navigationRoutes = {\n home: '/',\n fromChain: '/from-chain',\n fromToken: '/from-token',\n toChain: '/to-chain',\n toToken: '/to-token',\n settings: '/settings',\n liquiditySources: '/settings/liquidity-sources',\n swaps: '/swaps',\n wallets: '/wallets',\n confirmSwap: '/confirm-swap',\n confirmWallets: '/confirm-wallets',\n swapDetails: '/swaps/:requestId',\n};\n","import BigNumber from 'bignumber.js';\n\nexport const ZERO = new BigNumber(0);\n","export function removeDuplicateFrom<T>(array: T[]): T[] {\n return Array.from(new Set(array));\n}\n\nexport function areEqual(\n array1: (number | string)[],\n array2: (number | string)[]\n) {\n return (\n array1.length === array2.length && array1.every((v, i) => v === array2[i])\n );\n}\nexport function shadeColor(color: string, percent: number) {\n var R = parseInt(color.substring(1, 3), 16);\n var G = parseInt(color.substring(3, 5), 16);\n var B = parseInt(color.substring(5, 7), 16);\n\n R = (R * (100 + percent)) / 100;\n G = (G * (100 + percent)) / 100;\n B = (B * (100 + percent)) / 100;\n\n R = R < 255 ? R : 255;\n G = G < 255 ? G : 255;\n B = B < 255 ? B : 255;\n\n R = Math.round(R);\n G = Math.round(G);\n B = Math.round(B);\n\n var RR = R.toString(16).length == 1 ? '0' + R.toString(16) : R.toString(16);\n var GG = G.toString(16).length == 1 ? '0' + G.toString(16) : G.toString(16);\n var BB = B.toString(16).length == 1 ? '0' + B.toString(16) : B.toString(16);\n\n return '#' + RR + GG + BB;\n}\n","import { BigNumber } from 'bignumber.js';\nimport { BestRouteResponse } from 'rango-sdk';\n\nexport const percentToString = (p: number, fractions = 0): string =>\n (p * 100).toFixed(fractions);\nexport const secondsToString = (s: number): string => {\n const seconds = (s % 60).toString().padStart(2, '0');\n const minutes = parseInt((s / 60).toString())\n .toString()\n .padStart(2, '0');\n return `${minutes}:${seconds}`;\n};\n\nexport const numberToString = (\n number: BigNumber | string | null,\n minDecimals: number | null = null,\n maxDecimals: number | null = null\n): string => {\n if (number === null) return '';\n if (number === '') return '';\n const n = new BigNumber(number);\n const roundingMode = 1;\n let maxI = 1000;\n for (let i = 0; i < 60; i++) {\n if (new BigNumber(n.toFixed(i, roundingMode)).eq(n)) {\n maxI = i;\n break;\n }\n }\n\n if (n.gte(10000)) return n.toFormat(0, roundingMode);\n if (n.gte(1000))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))\n ),\n roundingMode\n );\n if (n.gte(100))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))\n ),\n roundingMode\n );\n if (n.gte(1))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 2))\n ),\n roundingMode\n );\n if (n.gte(0.01))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 4))\n ),\n roundingMode\n );\n for (let i = minDecimals || 4; i < 17; i++)\n if (n.gte(Math.pow(10, -i)))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, i))\n ),\n roundingMode\n );\n if (n.isEqualTo(0)) return '0';\n\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 8))),\n roundingMode\n );\n};\n\nexport const convertBigNumberToHex = (\n value: BigNumber,\n decimals: number\n): string => {\n return '0x' + value.shiftedBy(decimals).toString(16);\n};\n\nexport const uint8ArrayToHex = (buffer: Uint8Array): string => {\n // buffer is an ArrayBuffer\n // @ts-ignore\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n};\n\nexport function dollarToConciseString(num: number | undefined): string {\n if (!num) return '-';\n if (num < 1) return ' < 1$';\n if (num < 1000) return numberToString(new BigNumber(num)) + '$';\n if (num < 10_000) return parseInt((num / 100).toString()) / 10 + 'K';\n if (num < 1_000_000) return parseInt((num / 1000).toString()) + 'K';\n if (num < 100_000_000) return parseInt((num / 100000).toString()) / 10 + 'M';\n return parseInt((num / 1000000).toString()) + 'M';\n}\n\nexport function removeExtraDecimals(num: string, maxDecimals: number): string {\n try {\n if (!num.includes('.')) return num;\n const [b, f] = num.split('.');\n if (f && f.length > maxDecimals) {\n return `${b}.${f.substring(0, maxDecimals)}`;\n }\n return num;\n } catch (e) {\n return num;\n }\n}\n\nexport const totalArrivalTime = (data: BestRouteResponse | null) =>\n data?.result?.swaps?.reduce((a, b) => a + b.estimatedTimeInSeconds, 0) || 0;\n\nexport const rawFees = (data: BestRouteResponse): string =>\n (\n data?.result?.swaps?.flatMap((s) =>\n s.fee.map((f) => ({ swapperId: s.swapperId, fee: f }))\n ) || []\n )\n .reduce((partialSum, a) => partialSum + parseFloat(a.fee.amount), 0)\n .toFixed(3);\n\nexport const decimalNumber = (number = '0', toFixed: number) =>\n parseFloat(number).toFixed(toFixed);\n\nexport const containsText = (text: string, searchText: string) =>\n text.toLowerCase().indexOf(searchText.toLowerCase()) > -1;\n","import {\n getCosmosExperimentalChainInfo,\n isEvmAddress,\n KEPLR_COMPATIBLE_WALLETS,\n Network,\n WalletState,\n WalletType,\n detectInstallLink,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\n\nimport {\n WalletInfo as ModalWalletInfo,\n WalletState as WalletStatus,\n SelectableWallet,\n} from '@rango-dev/ui';\nimport {\n BestRouteResponse,\n BlockchainMeta,\n Token,\n WalletDetail,\n} from 'rango-sdk';\nimport { isCosmosBlockchain } from 'rango-types';\nimport { readAccountAddress } from '@rango-dev/wallets-core';\nimport { Account, Balance, TokenBalance } from '../store/wallets';\nimport { numberToString } from './numbers';\nimport BigNumber from 'bignumber.js';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { ZERO } from '../constants/numbers';\n\nexport function getStateWallet(state: WalletState): WalletStatus {\n switch (true) {\n case state.connected:\n return WalletStatus.CONNECTED;\n case state.connecting:\n return WalletStatus.CONNECTING;\n case !state.installed:\n return WalletStatus.NOT_INSTALLED;\n default:\n return WalletStatus.DISCONNECTED;\n }\n}\n\nexport const excludedWallets = [\n WalletType.UNKNOWN,\n WalletType.TERRA_STATION,\n WalletType.LEAP,\n];\n\nexport function getlistWallet(\n getState: (type: WalletType) => WalletState,\n getWalletInfo: (type: WalletType) => WalletInfo,\n list: WalletType[]\n): ModalWalletInfo[] {\n const excludedWallets = [\n WalletType.UNKNOWN,\n WalletType.TERRA_STATION,\n WalletType.LEAP,\n ];\n\n return list\n .filter((wallet) => !excludedWallets.includes(wallet))\n .map((type) => {\n const {\n name,\n img: image,\n installLink,\n showOnMobile,\n } = getWalletInfo(type);\n const state = getStateWallet(getState(type));\n return {\n name,\n image,\n installLink: detectInstallLink(installLink),\n state,\n type,\n showOnMobile: typeof showOnMobile === 'undefined' ? false : true,\n };\n });\n}\n\nexport function walletAndSupportedChainsNames(\n supportedChains: BlockchainMeta[]\n): Network[] | null {\n if (!supportedChains) return null;\n let walletAndSupportedChainsNames: Network[] = [];\n walletAndSupportedChainsNames = supportedChains.map(\n (blockchainMeta) => blockchainMeta.name as Network\n );\n\n return walletAndSupportedChainsNames;\n}\n\nexport function prepareAccountsForWalletStore(\n wallet: WalletType,\n accounts: string[],\n evmBasedChains: string[],\n supportedChainNames: Network[] | null\n): Account[] {\n const result: Account[] = [];\n\n function addAccount(network: Network, address: string) {\n const newAccount: Account = {\n address,\n chain: network,\n walletType: wallet,\n };\n\n result.push(newAccount);\n }\n\n const supportedChains = supportedChainNames || [];\n\n accounts.forEach((account) => {\n const { address, network } = readAccountAddress(account);\n\n const hasLimitation = supportedChains.length > 0;\n const isSupported = supportedChains.includes(network);\n const isUnknown = network === Network.Unknown;\n const notSupportedNetworkByWallet =\n hasLimitation && !isSupported && !isUnknown;\n\n // Here we check given `network` is not supported by wallet\n // And also the network is known.\n if (notSupportedNetworkByWallet) return;\n\n // In some cases we can handle unknown network by checking its address\n // pattern and act on it.\n // Example: showing our evm compatible netwrok when the uknown network is evem.\n // Otherwise, we stop executing this function.\n const isUknownAndEvmBased =\n network === Network.Unknown && isEvmAddress(address);\n if (isUnknown && !isUknownAndEvmBased) return;\n\n const isEvmBasedChain = evmBasedChains.includes(network);\n\n // If it's an evm network, we will add the address to all the evm chains.\n if (isEvmBasedChain || isUknownAndEvmBased) {\n // all evm chains are not supported in wallets, so we are adding\n // only to those that are supported by wallet.\n const evmChainsSupportedByWallet = supportedChains.filter((chain) =>\n evmBasedChains.includes(chain)\n );\n\n evmChainsSupportedByWallet.forEach((network) => {\n // EVM addresses are not case sensetive.\n // Some wallets like Binance-chain return some letters in uppercase which produces bugs in our wallet state.\n addAccount(network, address.toLowerCase());\n });\n } else {\n addAccount(network, address);\n }\n });\n\n return result;\n}\n\nexport function getRequiredChains(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport interface SelectedWallet extends Account {}\ntype Blockchain = { name: string; accounts: Balance[] };\n\nexport function getSelectableWallets(\n accounts: Account[],\n selectedWallets: SelectedWallet[],\n getWalletInfo: (type: WalletType) => WalletInfo\n): SelectableWallet[] {\n const connectedWallets: SelectableWallet[] = accounts.map((account) => ({\n address: account.address,\n walletType: account.walletType,\n chain: account.chain,\n image: getWalletInfo(account.walletType).img,\n name: getWalletInfo(account.walletType).name,\n selected: !!selectedWallets.find(\n (wallet) =>\n wallet.chain === account.chain &&\n wallet.walletType === account.walletType\n ),\n }));\n\n return connectedWallets;\n}\n\nexport function getBalanceFromWallet(\n balances: Balance[],\n chain: string,\n symbol: string,\n address: string | null\n): TokenBalance | null {\n if (balances.length === 0) return null;\n\n const selectedChainBalances = balances.filter(\n (balance) => balance.chain === chain\n );\n if (selectedChainBalances.length === 0) return null;\n\n return (\n selectedChainBalances\n .map(\n (a) =>\n a.balances?.find(\n (bl) =>\n (address !== null && bl.address === address) ||\n (address === null &&\n bl.address === address &&\n bl.symbol === symbol)\n ) || null\n )\n .filter((b) => b !== null)\n .sort(\n (a, b) => parseFloat(b?.amount || '0') - parseFloat(a?.amount || '1')\n )\n .find(() => true) || null\n );\n}\n\nexport function isAccountAndBalanceMatched(account: Account, balance: Balance) {\n return (\n account.address === balance.address &&\n account.chain === balance.chain &&\n account.walletType === balance.walletType\n );\n}\n\nexport function makeBalanceFor(\n account: Account,\n retrivedBalance: WalletDetail,\n tokens: Token[]\n): Balance {\n const {\n address,\n blockChain: chain,\n explorerUrl,\n balances = [],\n } = retrivedBalance;\n return {\n address,\n chain,\n loading: false,\n error: false,\n explorerUrl,\n walletType: account.walletType,\n balances:\n balances?.map((tokenBalance) => ({\n chain,\n symbol: tokenBalance.asset.symbol,\n ticker: tokenBalance.asset.symbol,\n address: tokenBalance.asset.address || null,\n rawAmount: tokenBalance.amount.amount,\n decimal: tokenBalance.amount.decimals,\n amount: new BigNumber(tokenBalance.amount.amount)\n .shiftedBy(-tokenBalance.amount.decimals)\n .toFixed(),\n logo: '',\n usdPrice:\n getUsdPrice(\n chain,\n tokenBalance.asset.symbol,\n tokenBalance.asset.address,\n tokens\n ) || null,\n })) || [],\n };\n}\n\nexport function resetBalanceState(balance: Balance): Balance {\n return { ...balance, loading: false, error: true };\n}\n\nexport const calculateWalletUsdValue = (balance: Balance[]) => {\n const uniqueAccountAddresses = new Set<string | null>();\n const uniqueBalane: Balance[] = balance?.reduce(\n (acc: Balance[], current: Balance) => {\n return acc.findIndex(\n (i) => i.address === current.address && i.chain === current.chain\n ) === -1\n ? [...acc, current]\n : acc;\n },\n []\n );\n\n const modifiedWalletBlockchains = uniqueBalane?.map((chain) => {\n const modifiedWalletBlockchain: Blockchain = {\n name: chain.chain,\n accounts: [],\n };\n if (!uniqueAccountAddresses.has(chain.address)) {\n uniqueAccountAddresses.add(chain.address);\n }\n uniqueAccountAddresses.forEach((accountAddress) => {\n if (chain.address === accountAddress)\n modifiedWalletBlockchain.accounts.push(chain);\n });\n return modifiedWalletBlockchain;\n });\n const total = numberToString(\n modifiedWalletBlockchains\n ?.flatMap((b) => b.accounts)\n ?.flatMap((a) => a?.balances)\n ?.map((b) =>\n new BigNumber(b?.amount || ZERO).multipliedBy(b?.usdPrice || 0)\n )\n ?.reduce((a, b) => a.plus(b), ZERO) || ZERO\n ).toString();\n\n return numberWithThousandSeperator(total);\n};\n\nfunction numberWithThousandSeperator(number: string | number): string {\n var parts = number.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n}\n\nexport const sortTokens = (tokens: TokenWithBalance[]): TokenWithBalance[] => {\n let walletConnected = !!tokens.some((token) => token.balance);\n if (!walletConnected) {\n return tokens\n .filter((token) => !token.address)\n .concat(\n tokens.filter((token) => token.address && !token.isSecondaryCoin),\n tokens.filter((token) => token.isSecondaryCoin)\n );\n }\n\n return tokens\n .filter((token) => !!token.balance)\n .sort(\n (tokenA, tokenB) =>\n parseFloat(tokenB.balance?.usdValue || '0') -\n parseFloat(tokenA.balance?.usdValue || '0')\n )\n .concat(\n tokens.filter((token) => !token.balance && !token.isSecondaryCoin),\n tokens.filter((token) => !token.balance && token.isSecondaryCoin)\n );\n};\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\nexport const isExperimentalChain = (\n blockchains: BlockchainMeta[],\n wallet: string\n): boolean => {\n const cosmosExperimentalChainInfo = getCosmosExperimentalChainInfo(\n Object.entries(blockchains)\n .map(([, blockchainMeta]) => blockchainMeta)\n .filter(isCosmosBlockchain)\n );\n return cosmosExperimentalChainInfo && !!cosmosExperimentalChainInfo[wallet];\n};\n\nexport const getKeplrCompatibleConnectedWallets = (\n selectableWallets: SelectableWallet[]\n): WalletType[] => {\n const connectedWalletTypes = new Set(\n selectableWallets.map((a: any) => a.walletType.toString())\n );\n\n return KEPLR_COMPATIBLE_WALLETS.filter((compatibleWallet) =>\n connectedWalletTypes.has(compatibleWallet)\n );\n};\n\nexport function getTokensWithBalance(\n tokens: TokenWithBalance[],\n balances: Balance[]\n): TokenWithBalance[] {\n return tokens.map(({ balance, ...otherProps }) => {\n const tokenAmount = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n balances,\n otherProps.blockchain,\n otherProps.symbol,\n otherProps.address\n )?.amount || ZERO\n )\n );\n\n let tokenUsdValue = '';\n if (otherProps.usdPrice)\n tokenUsdValue = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n balances,\n otherProps.blockchain,\n otherProps.symbol,\n otherProps.address\n )?.amount || ZERO\n ).multipliedBy(otherProps.usdPrice)\n );\n\n return {\n ...otherProps,\n ...(tokenAmount !== '0' && {\n balance: { amount: tokenAmount, usdValue: tokenUsdValue },\n }),\n };\n });\n}\n\nexport function getSortedTokens(\n chain: BlockchainMeta | null,\n tokens: Token[],\n balances: Balance[],\n otherChainTokens: TokenWithBalance[]\n): TokenWithBalance[] {\n const fromChainEqueulsToToChain = chain?.name === otherChainTokens[0]?.name;\n if (fromChainEqueulsToToChain) return otherChainTokens;\n const filteredTokens = tokens.filter(\n (token) => token.blockchain === chain?.name\n );\n return sortTokens(getTokensWithBalance(filteredTokens, balances));\n}\n\nexport function tokensAreEqual(tokenA: Token | null, tokenB: Token | null) {\n return (\n tokenA?.blockchain === tokenB?.blockchain &&\n tokenA?.name === tokenB?.name &&\n tokenA?.address === tokenB?.address\n );\n}\n\nexport function getDefaultToken(\n sortedTokens: TokenWithBalance[],\n otherToken: TokenWithBalance | null\n): TokenWithBalance {\n let selectedToken: TokenWithBalance;\n const firstToken = sortedTokens[0];\n const secondToken = sortedTokens[1];\n if (sortedTokens.length === 1) selectedToken = firstToken;\n else if (tokensAreEqual(firstToken, otherToken)) selectedToken = secondToken;\n else selectedToken = firstToken;\n return selectedToken;\n}\n\nexport function sortWalletsBasedOnState(\n wallets: ModalWalletInfo[]\n): ModalWalletInfo[] {\n return wallets.sort(\n (a, b) =>\n Number(b.state === WalletStatus.CONNECTED) -\n Number(a.state === WalletStatus.CONNECTED) ||\n Number(b.state === WalletStatus.DISCONNECTED) -\n Number(a.state === WalletStatus.DISCONNECTED)\n );\n}\n","import { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\nimport {\n WalletTypeAndAddress,\n SwapSavedSettings,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport {\n BestRouteRequest,\n BestRouteResponse,\n RecommendedSlippage,\n SwapResult,\n MetaResponse,\n Token,\n} from 'rango-sdk';\nimport { Account } from '../store/wallets';\nimport { ZERO } from '../constants/numbers';\nimport { numberToString } from './numbers';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { getRequiredBalanceOfWallet } from './routing';\nimport { getRequiredChains, SelectedWallet } from './wallets';\nimport { LoadingStatus } from '../store/meta';\nimport { SwapButtonState } from '../types';\n\nexport function getOutputRatio(\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n if (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) return 0;\n return outputUsdValue.div(inputUsdValue).minus(1).multipliedBy(100);\n}\n\nexport function outputRatioHasWarning(\n inputUsdValue: BigNumber,\n outputRatio: BigNumber | 0\n) {\n return (\n (parseInt(outputRatio.toFixed(2) || '0') <= -10 &&\n inputUsdValue.gte(new BigNumber(400))) ||\n (parseInt(outputRatio.toFixed(2) || '0') <= -5 &&\n inputUsdValue.gte(new BigNumber(1000)))\n );\n}\n\nexport function hasLimitError(bestRoute: BestRouteResponse | null): boolean {\n return (\n (bestRoute?.result?.swaps || []).filter((swap) => {\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n if (isExclusive) {\n return minimum?.gte(swap.fromAmount) || maximum?.lte(swap.fromAmount);\n } else {\n return minimum?.gt(swap.fromAmount) || maximum?.lt(swap.fromAmount);\n }\n }).length > 0\n );\n}\n\nexport function LimitErrorMessage(bestRoute: BestRouteResponse | null): {\n swap: SwapResult | null;\n fromAmountRangeError: string;\n recommendation: string;\n} {\n if (!bestRoute)\n return { swap: null, fromAmountRangeError: '', recommendation: '' };\n const swap = (bestRoute?.result?.swaps || []).filter((swap) => {\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n if (isExclusive) {\n return minimum?.gte(swap.fromAmount) || maximum?.lte(swap.fromAmount);\n } else {\n return minimum?.gt(swap.fromAmount) || maximum?.lt(swap.fromAmount);\n }\n })[0];\n if (!swap)\n return { swap: null, fromAmountRangeError: '', recommendation: '' };\n const minimum = !!swap.fromAmountMinValue\n ? new BigNumber(swap.fromAmountMinValue)\n : null;\n const maximum = !!swap.fromAmountMaxValue\n ? new BigNumber(swap.fromAmountMaxValue)\n : null;\n const isExclusive = swap.fromAmountRestrictionType === 'EXCLUSIVE';\n\n let fromAmountRangeError = '';\n let recommendation = '';\n if (!isExclusive && !!minimum && minimum.gt(swap.fromAmount)) {\n fromAmountRangeError = `Required: >= ${numberToString(minimum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Increase your swap amount';\n } else if (isExclusive && !!minimum && minimum.gte(swap.fromAmount)) {\n fromAmountRangeError = `Required: > ${numberToString(minimum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Increase your swap amount';\n }\n\n if (!isExclusive && !!maximum && maximum.lt(swap.fromAmount)) {\n fromAmountRangeError = `Required: <= ${numberToString(maximum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Decrease your swap amount';\n } else if (isExclusive && !!maximum && maximum.lte(swap.fromAmount)) {\n fromAmountRangeError = `Required: < ${numberToString(maximum)} ${\n swap.from.symbol\n }`;\n recommendation = 'Decrease your swap amount';\n }\n\n return { swap, fromAmountRangeError, recommendation };\n}\n\nexport function getSwapButtonState(\n loadingMetaStatus: LoadingStatus,\n accounts: Account[],\n loading: boolean,\n bestRoute: BestRouteResponse | null,\n hasLimitError: boolean,\n highValueLoss: boolean,\n priceImpactCanNotBeComputed: boolean,\n needsToWarnEthOnPath: boolean\n): SwapButtonState {\n if (loadingMetaStatus !== 'success')\n return { title: 'Connect Wallet', disabled: true };\n if (accounts.length == 0) return { title: 'Connect Wallet', disabled: false };\n if (loading) return { title: 'Finding Best Route...', disabled: true };\n else if (!bestRoute) return { title: 'Swap', disabled: true };\n else if (hasLimitError) return { title: 'Limit Error', disabled: true };\n else if (highValueLoss)\n return { title: 'Price impact is too high!', disabled: true };\n else if (priceImpactCanNotBeComputed)\n return {\n title: 'USD price is unknown, price impact might be high!',\n disabled: false,\n hasWarning: true,\n };\n else if (needsToWarnEthOnPath)\n return {\n title: 'The route goes through Ethereum. Continue?',\n disabled: false,\n hasWarning: true,\n };\n else return { title: 'Swap', disabled: false };\n}\n\nexport function canComputePriceImpact(\n bestRoute: BestRouteResponse | null,\n inputAmount: string,\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n return !(\n (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) &&\n !!bestRoute?.result &&\n !!inputAmount &&\n inputAmount !== '0' &&\n parseFloat(inputAmount || '0') !== 0 &&\n !!bestRoute.result\n );\n}\n\nexport function calculatePendingSwap(\n inputAmount: string,\n bestRoute: BestRouteResponse,\n wallets: { [p: string]: WalletTypeAndAddress },\n settings: Omit<SwapSavedSettings, 'disabledSwappersIds'>,\n validateBalanceOrFee: boolean,\n meta: MetaResponse\n): PendingSwap {\n const simulationResult = bestRoute.result;\n if (!simulationResult) throw Error('Simulation result should not be null');\n\n return {\n creationTime: new Date().getTime().toString(),\n finishTime: null,\n requestId: bestRoute.requestId || '',\n inputAmount: inputAmount,\n wallets,\n status: 'running',\n isPaused: false,\n extraMessage: null,\n extraMessageSeverity: null,\n extraMessageDetail: null,\n extraMessageErrorCode: null,\n networkStatusExtraMessage: null,\n networkStatusExtraMessageDetail: null,\n lastNotificationTime: null,\n //@ts-ignore\n settings: settings,\n simulationResult: simulationResult,\n validateBalanceOrFee,\n steps:\n bestRoute.result?.swaps?.map((swap, index) => {\n const swapper = meta.swappers.find(\n (swapper) => swapper.id === swap.swapperId\n );\n const swapperType = swapper?.types[0];\n const fromBlockchain = meta.blockchains.find(\n (blockchain) => blockchain.name === swap.from.blockchain\n );\n const toBlockchain = meta.blockchains.find(\n (blockchain) => blockchain.name === swap.to.blockchain\n );\n return {\n id: index + 1,\n fromBlockchain: swap.from.blockchain,\n fromSymbol: swap.from.symbol,\n fromSymbolAddress: swap.from.address,\n fromDecimals: swap.from.decimals,\n fromAmountPrecision: swap.fromAmountPrecision,\n fromAmountMinValue: swap.fromAmountMinValue,\n fromAmountMaxValue: swap.fromAmountMaxValue,\n toBlockchain: swap.to.blockchain,\n fromLogo: swap.from.logo,\n toSymbol: swap.to.symbol,\n toSymbolAddress: swap.to.address,\n toDecimals: swap.to.decimals,\n toLogo: swap.to.logo,\n startTransactionTime: new Date().getTime(),\n swapperId: swap.swapperId,\n feeInUsd: numberToString(getUsdFeeOfStep(swap, meta.tokens), null, 2),\n expectedOutputAmountHumanReadable: swap.toAmount,\n outputAmount: '',\n status: 'created',\n networkStatus: null,\n executedTransactionId: null,\n externalTransactionId: null,\n explorerUrl: null,\n trackingCode: null,\n cosmosTransaction: null,\n solanaTransaction: null,\n starknetTransaction: null,\n starknetApprovalTransaction: null,\n tronTransaction: null,\n tronApprovalTransaction: null,\n evmTransaction: null,\n evmApprovalTransaction: null,\n transferTransaction: null,\n diagnosisUrl: null,\n internalSteps: null,\n fromBlockchainLogo: fromBlockchain?.logo || '',\n toBlockchainLogo: toBlockchain?.logo || '',\n swapperLogo: swapper?.logo || '',\n swapperType: swapperType || '',\n };\n }) || [],\n };\n}\n\nexport function requiredWallets(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\n\nexport function getUsdFeeOfStep(\n step: SwapResult,\n allTokens: Token[]\n): BigNumber {\n let totalFeeInUsd = ZERO;\n for (let i = 0; i < step.fee.length; i++) {\n const fee = step.fee[i];\n if (fee.expenseType === 'DECREASE_FROM_OUTPUT') continue;\n\n const unitPrice = getUsdPrice(\n fee.asset.blockchain,\n fee.asset.symbol,\n fee.asset.address,\n allTokens\n );\n totalFeeInUsd = totalFeeInUsd.plus(\n new BigNumber(fee.amount).multipliedBy(unitPrice || 0)\n );\n }\n\n return totalFeeInUsd;\n}\n\nexport function getTotalFeeInUsd(\n bestRoute: BestRouteResponse | null,\n allTokens: Token[]\n): BigNumber | null {\n return (\n bestRoute?.result?.swaps.reduce(\n (totalFee: BigNumber, step) =>\n totalFee.plus(getUsdFeeOfStep(step, allTokens)),\n ZERO\n ) || null\n );\n}\n\nexport function hasHighFee(totalFeeInUsd: BigNumber | null) {\n if (!totalFeeInUsd) return false;\n return !totalFeeInUsd.lt(new BigNumber(30));\n}\n\nexport function hasSlippageError(\n slippages: (RecommendedSlippage | null)[] | undefined\n) {\n return (slippages?.filter((s) => !!s?.error)?.length || 0) > 0;\n}\n\nexport function getMinRequiredSlippage(\n route: BestRouteResponse\n): number | null {\n const slippages = route.result?.swaps.map(\n (slippage) => slippage.recommendedSlippage\n );\n return (\n slippages\n ?.map((s) => parseFloat(s?.slippage || '0'))\n ?.filter((s) => s > 0)\n ?.sort((a, b) => b - a)\n ?.find(() => true) || null\n );\n}\n\nexport function hasProperSlippage(\n userSlippage: string,\n minRequiredSlippage: number | null\n) {\n if (!minRequiredSlippage) return true;\n //@ts-ignore\n return parseFloat(userSlippage) >= parseFloat(minRequiredSlippage);\n}\n\nexport function hasEnoughBalance(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[]\n) {\n const fee = route.validationStatus;\n\n if (fee === null || fee.length === 0) return true;\n\n for (const wallet of selectedWallets) {\n const requiredAssets = getRequiredBalanceOfWallet(wallet, fee);\n if (!requiredAssets) continue;\n\n const enoughBalanceInWallet = requiredAssets\n .map((asset) => asset.ok)\n .reduce((previous, current) => previous && current);\n if (!enoughBalanceInWallet) return false;\n }\n\n return true;\n}\n\nexport function hasEnoughBalanceAndProperSlippage(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[],\n userSlippage: string,\n minRequiredSlippage: number | null\n): boolean {\n return (\n hasEnoughBalance(route, selectedWallets) &&\n hasProperSlippage(userSlippage, minRequiredSlippage)\n );\n}\n\nexport function createBestRouteRequestBody(\n fromToken: Token,\n toToken: Token,\n inputAmount: string,\n wallets: Account[],\n selectedWallets: SelectedWallet[],\n disabledLiquiditySources: string[],\n slippage: number,\n checkPrerequisites: boolean\n): BestRouteRequest {\n const selectedWalletsMap = selectedWallets.reduce(\n (\n selectedWalletsMap: BestRouteRequest['selectedWallets'],\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = selectedWallet.address),\n selectedWalletsMap\n ),\n {}\n );\n\n const connectedWallets: BestRouteRequest['connectedWallets'] = [];\n\n wallets.forEach((wallet) => {\n const chainAndAccounts = connectedWallets.find(\n (connectedWallet) => connectedWallet.blockchain === wallet.chain\n );\n if (!!chainAndAccounts) chainAndAccounts.addresses.push(wallet.address);\n else\n connectedWallets.push({\n blockchain: wallet.chain,\n addresses: [wallet.address],\n });\n });\n\n const requestBody: BestRouteRequest = {\n amount: inputAmount.toString(),\n checkPrerequisites,\n from: {\n address: fromToken.address,\n blockchain: fromToken.blockchain,\n symbol: fromToken.symbol,\n },\n to: {\n address: toToken.address,\n blockchain: toToken.blockchain,\n symbol: toToken.symbol,\n },\n connectedWallets,\n selectedWallets: selectedWalletsMap,\n swapperGroups: disabledLiquiditySources,\n swappersGroupsExclude: true,\n //@ts-ignore\n slippage: slippage.toString(),\n };\n\n return requestBody;\n}\n\nexport function getWalletsForNewSwap(selectedWallets: SelectedWallet[]) {\n const wallets = selectedWallets.reduce(\n (\n selectedWalletsMap: {\n [p: string]: { address: string; walletType: WalletType };\n },\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = {\n address: selectedWallet.address,\n walletType: selectedWallet.walletType,\n }),\n selectedWalletsMap\n ),\n {}\n );\n\n return wallets;\n}\n\nexport function getRouteOutputAmount(route: BestRouteResponse | null) {\n return route?.result?.outputAmount || null;\n}\n\nexport function getPercentageChange(\n oldValue: string | number | null,\n newValue: string | number | null\n) {\n if (!oldValue || !newValue) return null;\n return new BigNumber(newValue)\n .div(new BigNumber(oldValue))\n .minus(1)\n .multipliedBy(100);\n}\n\nexport function isOutputAmountChangedALot(\n oldRoute: BestRouteResponse,\n newRoute: BestRouteResponse\n) {\n const oldOutputAmount = getRouteOutputAmount(oldRoute);\n const newOutputAmount = getRouteOutputAmount(newRoute);\n if (!oldOutputAmount || !newOutputAmount) return false;\n const percentageChange = getPercentageChange(\n oldOutputAmount,\n newOutputAmount\n );\n if (!percentageChange) return true;\n\n return percentageChange.toNumber() <= -1;\n}\n\nexport function getBalanceWarnings(\n route: BestRouteResponse,\n selectedWallets: SelectedWallet[]\n) {\n const fee = route.validationStatus;\n const requiredWallets = getRequiredChains(route);\n const walletsSortedByRequiredWallets = selectedWallets.sort(\n (selectedWallet1, selectedWallet2) =>\n requiredWallets.indexOf(selectedWallet1.chain) -\n requiredWallets.indexOf(selectedWallet2.chain)\n );\n return walletsSortedByRequiredWallets\n .flatMap((wallet) => getRequiredBalanceOfWallet(wallet, fee) || [])\n .filter((asset) => !asset.ok)\n .map((asset) => {\n const symbol = asset.asset.symbol;\n const currentAmount = numberToString(\n new BigNumber(asset.currentAmount.amount).shiftedBy(\n -asset.currentAmount.decimals\n ),\n 8\n );\n const requiredAmount = numberToString(\n new BigNumber(asset.requiredAmount.amount).shiftedBy(\n -asset.requiredAmount.decimals\n ),\n 8\n );\n let reason = '';\n if (asset.reason === 'FEE') reason = ' for network fee';\n if (asset.reason === 'INPUT_ASSET') reason = ' for swap';\n if (asset.reason === 'FEE_AND_INPUT_ASSET')\n reason = ' for input and network fee';\n const warningMessage = `Needs ≈ ${requiredAmount} ${symbol}${reason}, but you have ${currentAmount} ${symbol} in your ${asset.asset.blockchain} wallet.`;\n return warningMessage;\n });\n}\n","import {\n SimulationAssetAndAmount,\n SimulationValidationStatus,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport { BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';\nimport { areEqual } from './common';\nimport { SelectedWallet } from './wallets';\nimport { BestRouteParams } from '../types';\nimport { TokenMeta } from '@rango-dev/ui/dist/types/meta';\nimport { numberToString } from './numbers';\nimport { getUsdFeeOfStep } from './swap';\nimport { BestRouteWithFee } from '@rango-dev/ui';\n\nexport function searchParamsToToken(\n tokens: Token[],\n searchParams: string | null,\n chain: BlockchainMeta | null\n): Token | null {\n if (!chain) return null;\n return (\n tokens.find((token) => {\n const symbolAndAddress = searchParams?.split('--');\n if (symbolAndAddress?.length === 1)\n return (\n token.symbol === symbolAndAddress[0] &&\n token.address === null &&\n token.blockchain === chain.name\n );\n return (\n token.symbol === symbolAndAddress?.[0] &&\n token.address === symbolAndAddress?.[1] &&\n token.blockchain === chain.name\n );\n }) || null\n );\n}\n\nexport function getBestRouteToTokenUsdPrice(\n bestRoute: BestRouteResponse | null\n): number | null | undefined {\n return bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1].to\n .usdPrice;\n}\n\nexport function isNumberOfSwapsChanged(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1Swaps = route1.result?.swaps || [];\n const route2Swaps = route2.result?.swaps || [];\n return route1Swaps.length !== route2Swaps.length;\n}\n\nexport function isRouteSwappersUpdated(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1Swappers =\n route1.result?.swaps.map((swap) => swap.swapperId) || [];\n const route2Swappers =\n route2.result?.swaps.map((swap) => swap.swapperId) || [];\n return !areEqual(route1Swappers, route2Swappers);\n}\n\nexport function isRouteInternalCoinsUpdated(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1InternalCoins =\n route1.result?.swaps.map((swap) => swap.to.symbol) || [];\n const route2InternalCoins =\n route2.result?.swaps.map((swap) => swap.to.symbol) || [];\n return !areEqual(route1InternalCoins, route2InternalCoins);\n}\n\nexport function isRouteChanged(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n): boolean {\n return (\n isNumberOfSwapsChanged(route1, route2) ||\n isRouteSwappersUpdated(route1, route2) ||\n isRouteInternalCoinsUpdated(route1, route2)\n );\n}\n\nexport function outToRatioHasWarning(\n fromUsdValue: BigNumber | null,\n outToInRatio: BigNumber | 0\n) {\n return (\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -10 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(200)))) ||\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -5 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(1000))))\n );\n}\n\nexport function getRequiredBalanceOfWallet(\n selectedWallet: SelectedWallet,\n fee: SimulationValidationStatus[] | null\n): SimulationAssetAndAmount[] | null {\n if (fee === null) return null;\n const relatedFeeStatus = fee\n ?.find((item) => item.blockchain === selectedWallet.chain)\n ?.wallets.find(\n (wallet) =>\n wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase()\n );\n if (!relatedFeeStatus) return null;\n return relatedFeeStatus.requiredAssets;\n}\n\nexport function isRouteParametersChanged(\n prevParams: BestRouteParams,\n currentParams: BestRouteParams\n) {\n return (\n prevParams.fromChain?.name !== currentParams.fromChain?.name ||\n prevParams.toChain?.name !== currentParams.toChain?.name ||\n prevParams.fromToken?.symbol !== currentParams.fromToken?.symbol ||\n prevParams.toToken?.symbol !== currentParams.toToken?.symbol ||\n prevParams.fromToken?.blockchain !== currentParams.fromToken?.blockchain ||\n prevParams.toToken?.blockchain !== currentParams.toToken?.blockchain ||\n prevParams.fromToken?.address !== currentParams.fromToken?.address ||\n prevParams.toToken?.address !== currentParams.toToken?.address ||\n prevParams.inputAmount !== currentParams.inputAmount ||\n prevParams.slippage !== currentParams.slippage ||\n prevParams.customSlippage !== currentParams.customSlippage ||\n prevParams.disabledLiquiditySources?.length !==\n currentParams.disabledLiquiditySources?.length\n );\n}\n\nexport function getBestRouteWithCalculatedFees(\n bestRoute: BestRouteResponse | null,\n tokens: TokenMeta[]\n): BestRouteWithFee | null {\n if (!bestRoute || !bestRoute.result) return null;\n const swapsWithFee = (bestRoute?.result?.swaps || []).map((swap) => ({\n ...swap,\n feeInUsd: numberToString(getUsdFeeOfStep(swap, tokens), 0, 2),\n }));\n\n return {\n ...bestRoute,\n result: { ...bestRoute.result, swaps: swapsWithFee },\n };\n}\n","import { StoreApi, UseBoundStore } from 'zustand';\n\ntype State = object;\n\ntype WithSelectors<S> = S extends { getState: () => infer T }\n ? S & { use: { [K in keyof T]: () => T[K] } }\n : never;\n\nconst createSelectors = <S extends UseBoundStore<StoreApi<State>>>(_store: S) => {\n let store = _store as WithSelectors<typeof _store>;\n store.use = {};\n for (let k of Object.keys(store.getState())) {\n (store.use as any)[k] = () => store((s) => s[k as keyof typeof s]);\n }\n\n return store;\n};\n\nexport default createSelectors;\n","import { RangoClient } from 'rango-sdk';\n\nexport const httpService = new RangoClient(\n process.env.REACT_APP_API_KEY as string\n);\n","export const SLIPPAGES = [0.5, 1, 3, 5, 8, 13, 20];\n\nexport const DEFAULT_SLIPPAGE = 1;\n\nexport const HIGH_SLIPPAGE = 5;\n\nexport const MAX_SLIPPAGE = 100;\n\nexport const MIN_SLIPPGAE = 0;\n","import { create } from 'zustand';\nimport { MetaResponse } from 'rango-sdk';\nimport { httpService } from '../services/httpService';\nimport createSelectors from './selectors';\nimport { removeDuplicateFrom } from '../utils/common';\n\nexport type LoadingStatus = 'loading' | 'success' | 'failed';\n\nexport interface MetaState {\n meta: MetaResponse;\n loadingStatus: LoadingStatus;\n fetchMeta: () => Promise<void>;\n}\n\nexport const useMetaStore = createSelectors(\n create<MetaState>()((set) => ({\n meta: { blockchains: [], popularTokens: [], swappers: [], tokens: [] },\n loadingStatus: 'loading',\n fetchMeta: async () => {\n try {\n const response = await httpService.getAllMetadata();\n const chainThatHasTokenInMetaResponse = removeDuplicateFrom(\n response.tokens.map((t) => t.blockchain),\n );\n const enabledChains = response.blockchains.filter(\n (chain) => chain.enabled && chainThatHasTokenInMetaResponse.includes(chain.name),\n );\n response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);\n set({ meta: response, loadingStatus: 'success' });\n } catch (error) {\n set({ loadingStatus: 'failed' });\n }\n },\n })),\n);\n","import { create } from 'zustand';\nimport { persist, subscribeWithSelector } from 'zustand/middleware';\nimport { DEFAULT_SLIPPAGE } from '../constants/swapSettings';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\n\ntype Theme = 'auto' | 'dark' | 'light';\n\nexport interface SettingsState {\n slippage: number;\n customSlippage: number | null;\n infiniteApprove: boolean;\n disabledLiquiditySources: string[];\n theme: Theme;\n setSlippage: (slippage: number) => void;\n setCustomSlippage: (customSlippage: number | null) => void;\n toggleInfiniteApprove: () => void;\n toggleLiquiditySource: (name: string) => void;\n setTheme: (theme: Theme) => void;\n toggleAllLiquiditySources: () => void;\n}\n\nexport const useSettingsStore = createSelectors(\n create<SettingsState>()(\n persist(\n subscribeWithSelector((set) => ({\n slippage: DEFAULT_SLIPPAGE,\n customSlippage: null,\n infiniteApprove: false,\n disabledLiquiditySources: [],\n theme: 'auto',\n setSlippage: (slippage) =>\n set(() => ({\n slippage: slippage,\n })),\n setCustomSlippage: (customSlippage) =>\n set(() => ({\n customSlippage: customSlippage,\n })),\n toggleAllLiquiditySources: () =>\n set((state) => {\n const { swappers } = useMetaStore.getState().meta;\n const swappersGroup = removeDuplicateFrom(\n swappers.map((swapper) => swapper.swapperGroup)\n );\n\n if (swappersGroup.length === state.disabledLiquiditySources.length)\n return { disabledLiquiditySources: [] };\n else {\n return {\n disabledLiquiditySources: swappersGroup,\n };\n }\n }),\n toggleInfiniteApprove: () =>\n set((state) => ({\n infiniteApprove: !state.infiniteApprove,\n })),\n toggleLiquiditySource: (name) =>\n set((state) => {\n if (state.disabledLiquiditySources.includes(name))\n return {\n disabledLiquiditySources: state.disabledLiquiditySources.filter(\n (liquiditySource) => liquiditySource != name\n ),\n };\n else\n return {\n disabledLiquiditySources:\n state.disabledLiquiditySources.concat(name),\n };\n }),\n setTheme: (theme) =>\n set(() => ({\n theme,\n })),\n })),\n {\n name: 'user-settings',\n }\n )\n )\n);\n","import { SelectableWallet } from '@rango-dev/ui';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport {\n getRequiredChains,\n getTokensWithBalance,\n isAccountAndBalanceMatched,\n makeBalanceFor,\n resetBalanceState,\n SelectedWallet,\n sortTokens,\n} from '../utils/wallets';\nimport { useBestRouteStore } from './bestRoute';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\nimport { shallow } from 'zustand/shallow';\n\nexport interface Account {\n chain: string;\n address: string;\n walletType: WalletType;\n}\n\nexport type TokenBalance = {\n chain: string;\n symbol: string;\n ticker: string;\n address: string | null;\n rawAmount: string;\n decimal: number | null;\n amount: string;\n logo: string | null;\n usdPrice: number | null;\n};\n\nexport interface Balance {\n balances: TokenBalance[] | null;\n address: string;\n chain: string;\n loading: boolean;\n walletType: WalletType;\n error: boolean;\n explorerUrl: string | null;\n}\n\ninterface WalletsStore {\n accounts: Account[];\n balances: Balance[];\n selectedWallets: SelectedWallet[];\n connectWallet: (accounts: Account[]) => void;\n disconnectWallet: (walletType: WalletType) => void;\n initSelectedWallets: () => void;\n setSelectedWallet: (wallet: SelectableWallet) => void;\n clearConnectedWallet: () => void;\n}\n\nexport const useWalletsStore = createSelectors(\n create<WalletsStore>()(\n subscribeWithSelector((set) => ({\n accounts: [],\n balances: [],\n selectedWallets: [],\n connectWallet: (accounts) => {\n const tokens = useMetaStore.getState().meta.tokens;\n\n set((state) => ({\n accounts: state.accounts.concat(accounts),\n balances: state.balances.concat(\n accounts.map((account) => ({\n balances: [],\n address: account.address,\n chain: account.chain,\n loading: true,\n walletType: account.walletType,\n error: false,\n explorerUrl: null,\n }))\n ),\n }));\n accounts.forEach(async (account) => {\n try {\n const response = await httpService.getWalletsDetails([\n { address: account.address, blockchain: account.chain },\n ]);\n const retrivedBalance = response.wallets[0];\n if (retrivedBalance) {\n set((state) => ({\n balances: state.balances.map((balance) => {\n return isAccountAndBalanceMatched(account, balance)\n ? makeBalanceFor(account, retrivedBalance, tokens)\n : balance;\n }),\n }));\n } else throw new Error('Wallet not found');\n } catch (error) {\n set((state) => ({\n balances: state.balances.map((balance) => {\n return isAccountAndBalanceMatched(account, balance)\n ? resetBalanceState(balance)\n : balance;\n }),\n }));\n }\n });\n },\n disconnectWallet: (walletType) => {\n set((state) => ({\n accounts: state.accounts.filter(\n (account) => account.walletType !== walletType\n ),\n balances: state.balances.filter(\n (balance) => balance.walletType !== walletType\n ),\n selectedWallets: state.selectedWallets.filter(\n (wallet) => wallet.walletType != walletType\n ),\n }));\n },\n initSelectedWallets: () =>\n set((state) => {\n const requiredChains = getRequiredChains(\n useBestRouteStore.getState().bestRoute\n );\n const connectedWallets = state.accounts;\n const selectedWallets: SelectedWallet[] = [];\n requiredChains.forEach((chain) => {\n const anyWalletSelected = !!state.selectedWallets.find(\n (wallet) => wallet.chain === chain\n );\n if (!anyWalletSelected) {\n const firstWalletWithMatchedChain = connectedWallets.find(\n (wallet) => wallet.chain === chain\n );\n if (!!firstWalletWithMatchedChain)\n selectedWallets.push({\n address: firstWalletWithMatchedChain.address,\n chain: firstWalletWithMatchedChain.chain,\n walletType: firstWalletWithMatchedChain.walletType,\n });\n }\n });\n return {\n selectedWallets: state.selectedWallets.concat(selectedWallets),\n };\n }),\n setSelectedWallet: (wallet) =>\n set((state) => ({\n selectedWallets: state.selectedWallets\n .filter((selectedWallet) => selectedWallet.chain !== wallet.chain)\n .concat({\n chain: wallet.chain,\n address: wallet.address,\n walletType: wallet.walletType,\n }),\n })),\n\n clearConnectedWallet: () =>\n set(() => ({\n accounts: [],\n balances: [],\n selectedWallets: [],\n })),\n }))\n )\n);\n\nuseWalletsStore.subscribe(\n (state) => state.balances,\n (balances) => {\n useBestRouteStore.setState(({ sourceTokens, destinationTokens }) => {\n const sourceTokensWithBalance = getTokensWithBalance(\n sourceTokens,\n balances\n );\n const destinationTokensWithBalance = getTokensWithBalance(\n destinationTokens,\n balances\n );\n return {\n sourceTokens: sortTokens(sourceTokensWithBalance),\n destinationTokens: sortTokens(destinationTokensWithBalance),\n };\n });\n },\n {\n equalityFn: shallow,\n }\n);\n","import { BestRouteResponse, BlockchainMeta } from 'rango-sdk';\nimport { Token } from 'rango-sdk';\nimport { create } from 'zustand';\nimport BigNumber from 'bignumber.js';\nimport { ZERO } from '../constants/numbers';\nimport {\n getBestRouteToTokenUsdPrice,\n isRouteParametersChanged,\n} from '../utils/routing';\nimport createSelectors from './selectors';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport { useSettingsStore } from './settings';\nimport { createBestRouteRequestBody } from '../utils/swap';\nimport { useMetaStore } from './meta';\nimport { getDefaultToken, getSortedTokens } from '../utils/wallets';\nimport { useWalletsStore } from './wallets';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\n\nconst getUsdValue = (token: Token | null, amount: string) =>\n new BigNumber(amount || ZERO).multipliedBy(token?.usdPrice || 0);\n\nexport interface RouteState {\n fromChain: BlockchainMeta | null;\n toChain: BlockchainMeta | null;\n inputAmount: string;\n inputUsdValue: BigNumber;\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber;\n fromToken: TokenWithBalance | null;\n toToken: TokenWithBalance | null;\n loading: boolean;\n error: string;\n sourceTokens: Token[];\n destinationTokens: Token[];\n setFromChain: (\n chain: BlockchainMeta | null,\n setDefaultToken?: boolean\n ) => void;\n setToChain: (chian: BlockchainMeta | null, setDefaultToken?: boolean) => void;\n setFromToken: (token: Token | null) => void;\n setToToken: (token: Token | null) => void;\n setInputAmount: (amount: string) => void;\n bestRoute: BestRouteResponse | null;\n setBestRoute: (bestRoute: BestRouteResponse | null) => void;\n}\n\nexport const useBestRouteStore = createSelectors(\n create<RouteState>()(\n subscribeWithSelector((set) => ({\n fromChain: null,\n fromToken: null,\n inputAmount: '',\n outputAmount: null,\n inputUsdValue: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n toChain: null,\n toToken: null,\n bestRoute: null,\n loading: false,\n error: '',\n sourceTokens: [],\n destinationTokens: [],\n setBestRoute: (bestRoute) =>\n set((state) => {\n let outputAmount: BigNumber | null = null;\n let outputUsdValue: BigNumber = ZERO;\n if (!!bestRoute) {\n outputAmount = !!bestRoute.result?.outputAmount\n ? new BigNumber(bestRoute.result?.outputAmount)\n : null;\n outputUsdValue = new BigNumber(outputAmount || ZERO).multipliedBy(\n getBestRouteToTokenUsdPrice(bestRoute) ||\n state.toToken?.usdPrice ||\n 0\n );\n }\n return {\n bestRoute,\n ...(!!bestRoute && {\n outputAmount,\n outputUsdValue,\n }),\n };\n }),\n setFromChain: (chain, setDefaultToken) => {\n set((state) => {\n if (state.fromChain?.name === chain?.name) return {};\n const tokens = useMetaStore.getState().meta.tokens;\n const balances = useWalletsStore.getState().balances;\n const sortedTokens = getSortedTokens(\n chain,\n tokens,\n balances,\n state.destinationTokens\n );\n const fromToken = getDefaultToken(sortedTokens, state.toToken);\n return {\n fromChain: chain,\n sourceTokens: sortedTokens,\n ...(setDefaultToken && {\n fromToken,\n }),\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(fromToken, state.inputAmount),\n }),\n };\n });\n },\n setFromToken: (token) =>\n set((state) => ({\n fromToken: token,\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(token, state.inputAmount),\n }),\n })),\n setToChain: (chain, setDefaultToken) => {\n set((state) => {\n if (state.toChain?.name === chain?.name) return {};\n const tokens = useMetaStore.getState().meta.tokens;\n const balances = useWalletsStore.getState().balances;\n const sortedTokens = getSortedTokens(\n chain,\n tokens,\n balances,\n state.destinationTokens\n );\n\n return {\n toChain: chain,\n destinationTokens: sortedTokens,\n ...(setDefaultToken && {\n toToken: getDefaultToken(sortedTokens, state.fromToken),\n }),\n };\n });\n },\n setToToken: (token) =>\n set(() => ({\n toToken: token,\n })),\n setInputAmount: (amount) => {\n set((state) => ({\n inputAmount: amount,\n ...(!amount && {\n outputAmount: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n bestRoute: null,\n }),\n ...(!!state.fromToken && {\n inputUsdValue: getUsdValue(state.fromToken, amount),\n }),\n }));\n },\n }))\n )\n);\n\nconst bestRoute = (\n bestRouteStore: typeof useBestRouteStore,\n settingsStore: typeof useSettingsStore\n) => {\n let abortController: AbortController | null = null;\n const fetchBestRoute = () => {\n const { fromToken, toToken, inputAmount } = bestRouteStore.getState();\n const { slippage, customSlippage, disabledLiquiditySources } =\n settingsStore.getState();\n if (!fromToken || !toToken || !inputAmount) return;\n abortController?.abort();\n abortController = new AbortController();\n const userSlippage = !!customSlippage ? customSlippage : slippage;\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n [],\n [],\n disabledLiquiditySources,\n userSlippage,\n false\n );\n bestRouteStore.setState({\n loading: true,\n bestRoute: null,\n outputAmount: null,\n outputUsdValue: new BigNumber(0),\n });\n httpService\n .getBestRoute(requestBody, {\n signal: abortController.signal,\n })\n .then((res) => {\n const { setBestRoute } = bestRouteStore.getState();\n setBestRoute(res);\n bestRouteStore.setState({ loading: false });\n abortController = null;\n })\n .catch((error) => {\n if (error.code === 'ERR_CANCELED') return;\n bestRouteStore.setState({\n error: error.message,\n loading: false,\n });\n });\n };\n\n useBestRouteStore.subscribe(\n (state) => ({\n fromChain: state.fromChain,\n fromToken: state.fromToken,\n toChain: state.toChain,\n toToken: state.toToken,\n inputAmount: state.inputAmount,\n }),\n\n fetchBestRoute.bind(null),\n {\n equalityFn: (prevState, state) => {\n if (isRouteParametersChanged(prevState, state)) return false;\n else return true;\n },\n }\n );\n\n useSettingsStore.subscribe(\n (state) => ({\n slippage: state.slippage,\n customSlippage: state.customSlippage,\n disabledLiquiditySources: state.disabledLiquiditySources,\n }),\n fetchBestRoute.bind(null),\n {\n equalityFn: (prevState, state) => {\n if (isRouteParametersChanged(prevState, state)) return false;\n else return true;\n },\n }\n );\n\n return { fetchBestRoute };\n};\n\nexport const { fetchBestRoute } = bestRoute(\n useBestRouteStore,\n useSettingsStore\n);\n","export enum SearchParams {\n 'FROM_CHAIN' = 'fromChain',\n 'FROM_TOKEN' = 'fromToken',\n 'TO_CHAIN' = 'toChain',\n 'TO_TOKEN' = 'toToken',\n 'FROM_AMOUNT' = 'fromAmount',\n}\n","import { create } from 'zustand';\nimport createSelectors from './selectors';\n\ninterface UiState {\n connectWalletsButtonDisabled: boolean;\n selectedSwapRequestId: string | null;\n toggleConnectWalletsButton: () => void;\n setSelectedSwap: (requestId: string | null) => void;\n}\n\nexport const useUiStore = createSelectors(\n create<UiState>()((set) => ({\n connectWalletsButtonDisabled: false,\n selectedSwapRequestId: null,\n toggleConnectWalletsButton: () =>\n set((state) => ({\n connectWalletsButtonDisabled: !state.connectWalletsButtonDisabled,\n })),\n setSelectedSwap: (requestId) => set({ selectedSwapRequestId: requestId }),\n }))\n);\n","import { useEffect, useRef } from 'react';\nimport {\n createSearchParams,\n useLocation,\n useSearchParams,\n} from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { SearchParams } from '../constants/searchParams';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { searchParamsToToken } from '../utils/routing';\n\nexport function UpdateUrl() {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const location = useLocation();\n const firstRenderSearchParams = useRef(location.search);\n const searchParamsRef = useRef<Record<string, string>>({});\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const loadingStatus = useMetaStore.use.loadingStatus();\n const { blockchains, tokens } = useMetaStore.use.meta();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n\n useEffect(() => {\n const params: Record<string, string> = {};\n createSearchParams(firstRenderSearchParams.current).forEach(\n (value, key) => {\n params[key] = value;\n }\n );\n searchParamsRef.current = params;\n const requestId =\n location.pathname.split(navigationRoutes.swaps + '/')[1] || null;\n if (requestId) setSelectedSwap(requestId);\n }, []);\n\n useEffect(() => {\n let fromChainString = '',\n fromTokenString = '',\n toChainString = '',\n toTokenString = '',\n fromAmount = '';\n if (\n loadingStatus !== 'success' &&\n ![navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n )\n ) {\n fromChainString = searchParamsRef.current[SearchParams.FROM_CHAIN];\n fromTokenString = searchParamsRef.current[SearchParams.FROM_TOKEN];\n toChainString = searchParamsRef.current[SearchParams.TO_CHAIN];\n toTokenString = searchParamsRef.current[SearchParams.TO_TOKEN];\n fromAmount = searchParamsRef.current[SearchParams.FROM_AMOUNT];\n setSearchParams(\n {\n ...(fromChainString && {\n [SearchParams.FROM_CHAIN]: fromChainString,\n }),\n ...(fromTokenString && {\n [SearchParams.FROM_TOKEN]: fromTokenString,\n }),\n ...(toChainString && { [SearchParams.TO_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.TO_TOKEN]: toTokenString }),\n ...(fromAmount && {\n [SearchParams.FROM_AMOUNT]: fromAmount.toString(),\n }),\n },\n { replace: true }\n );\n }\n if (!firstRender.current) {\n let fromChainString = '',\n fromTokenString = '',\n toChainString = '',\n toTokenString = '',\n fromAmount = '';\n if (loadingStatus !== 'success') {\n fromChainString = searchParamsRef.current[SearchParams.FROM_CHAIN];\n fromTokenString = searchParamsRef.current[SearchParams.FROM_TOKEN];\n toChainString = searchParamsRef.current[SearchParams.TO_CHAIN];\n toTokenString = searchParamsRef.current[SearchParams.TO_TOKEN];\n fromAmount = searchParamsRef.current[SearchParams.FROM_AMOUNT];\n } else {\n if (location.state === 'redirect') return;\n fromChainString = fromChain?.name || '';\n fromTokenString =\n (fromToken?.symbol || '') +\n (fromToken?.address ? `--${fromToken?.address}` : '');\n toChainString = toChain?.name || '';\n toTokenString =\n (toToken?.symbol || '') +\n (toToken?.address ? `--${toToken?.address}` : '');\n fromAmount = inputAmount;\n\n setSearchParams(\n {\n ...(fromChainString && {\n [SearchParams.FROM_CHAIN]: fromChainString,\n }),\n ...(fromTokenString && {\n [SearchParams.FROM_TOKEN]: fromTokenString,\n }),\n ...(toChainString && { [SearchParams.TO_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.TO_TOKEN]: toTokenString }),\n ...(fromAmount && {\n [SearchParams.FROM_AMOUNT]: fromAmount.toString(),\n }),\n },\n { replace: true }\n );\n }\n }\n firstRender.current = false;\n }, [location.pathname, inputAmount]);\n\n useEffect(() => {\n if (loadingStatus === 'success') {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n const fromAmount = searchParams.get(SearchParams.FROM_AMOUNT);\n const fromChain = blockchains.find(\n (blockchain) => blockchain.name === fromChainString\n );\n const fromToken = searchParamsToToken(\n tokens,\n fromTokenString,\n fromChain || null\n );\n const toChain = blockchains.find(\n (blockchain) => blockchain.name === toChainString\n );\n const toToken = searchParamsToToken(\n tokens,\n toTokenString,\n toChain || null\n );\n if (!!fromChain) {\n setFromChain(fromChain);\n if (!!fromToken) setFromToken(fromToken);\n }\n if (!!toChain) {\n setToChain(toChain);\n if (!!toToken) setToToken(toToken);\n }\n if (fromAmount) setInputAmount(fromAmount);\n }\n }, [loadingStatus]);\n\n return null;\n}\n","import React from 'react';\nimport {\n SettingsIcon,\n Tooltip,\n styled,\n Button,\n HistoryIcon,\n RetryIcon,\n} from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { PropTypes } from './Header';\n\nconst ButtonsContainer = styled('div', {\n display: 'flex',\n});\n\nexport function HeaderButtons(props: PropTypes) {\n const { onClickRefresh } = props;\n const navigate = useNavigate();\n\n return (\n <ButtonsContainer>\n <Tooltip content=\"Retry\">\n <Button variant=\"ghost\" onClick={onClickRefresh}>\n <RetryIcon size={28} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Transactions History\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.swaps)}\n >\n <HistoryIcon size={24} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Settings\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n <SettingsIcon size={24} />\n </Button>\n </Tooltip>\n </ButtonsContainer>\n );\n}\n","import React from 'react';\nimport { css, styled, Typography } from '@rango-dev/ui';\nimport { HeaderButtons } from './HeaderButtons';\nimport { useTranslation } from 'react-i18next';\n\nexport const HeaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n padding: '$16 0',\n});\n\nexport interface PropTypes {\n onClickRefresh: () => void;\n title?: string;\n titleSize?: number;\n titleWeight?: number;\n}\n\nexport function Header(props: PropTypes) {\n const { onClickRefresh, title, titleSize, titleWeight } = props;\n const { t } = useTranslation();\n const titleStyle = css({\n fontSize: `${titleSize}px !important`,\n fontWeight: `${titleWeight} !important`,\n });\n\n return (\n <HeaderContainer>\n <Typography variant=\"h4\" className={titleStyle()}>\n {title ? t(title.toLocaleLowerCase()) : ''}\n </Typography>\n <HeaderButtons onClickRefresh={onClickRefresh} />\n </HeaderContainer>\n );\n}\n","import React from 'react';\nimport {\n AngleDownIcon,\n Button,\n InfoCircleIcon,\n styled,\n TextField,\n Typography,\n} from '@rango-dev/ui';\nimport { useMetaStore } from '../store/meta';\nimport { BlockchainMeta, Token } from 'rango-sdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { numberToString } from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { getBalanceFromWallet } from '../utils/wallets';\nimport { useWalletsStore } from '../store/wallets';\nimport { useTranslation } from 'react-i18next';\n\ntype PropTypes = (\n | {\n type: 'From';\n inputAmount: string;\n onAmountChange: (amount: string) => void;\n }\n | {\n type: 'To';\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber | null;\n }\n) & { chain: BlockchainMeta | null; token: Token | null };\n\nconst Box = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n});\n\nconst Container = styled('div', {\n boxSizing: 'border-box',\n backgroundColor: '$neutrals300',\n borderRadius: '$5',\n padding: '$8 0',\n\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$8 $16',\n },\n});\n\nconst StyledImage = styled('img', {\n width: '$24',\n maxHeight: '$24',\n});\n\nconst Options = styled('div', {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '0 $8',\n});\n\nconst ImagePlaceholder = styled('span', {\n width: '24px',\n height: '24px',\n backgroundColor: '$neutrals300',\n borderRadius: '99999px',\n});\n\nconst OutputContainer = styled('div', {\n height: '$48',\n borderRadius: '$5',\n flexGrow: 1,\n width: '70%',\n backgroundColor: '$background',\n border: '1px solid transparent',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '$8',\n paddingRight: '$8',\n});\n\nexport function TokenInfo(props: PropTypes) {\n const { type, chain, token } = props;\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const fromToken = useBestRouteStore.use.fromToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const balances = useWalletsStore.use.balances();\n const navigate = useNavigate();\n const { t } = useTranslation();\n\n const tokenBalance =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(\n balances,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.amount || '0',\n 8\n )\n : '0';\n\n const tokenBalanceReal =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(\n balances,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.amount || '0',\n getBalanceFromWallet(\n balances,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.decimal\n )\n : '0';\n\n const ItemSuffix = (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n {loadingStatus === 'failed' && <InfoCircleIcon color=\"error\" size={24} />}\n <AngleDownIcon />\n </div>\n );\n\n return (\n <Box>\n <div>\n <Typography variant=\"body2\">{t(type)}</Typography>\n </div>\n <Container>\n {props.type === 'From' && (\n <Options>\n <div\n className=\"balance\"\n onClick={() => {\n if (tokenBalance !== '0')\n setInputAmount(tokenBalanceReal.split(',').join(''));\n }}\n >\n <Button variant=\"ghost\" size=\"small\">\n <Typography variant=\"body2\">{`${t('Max')}: ${tokenBalance} ${\n fromToken?.symbol || ''\n }`}</Typography>\n </Button>\n </div>\n </Options>\n )}\n <div className=\"form\">\n <Button\n onClick={() => {\n navigate(`/${props.type.toLowerCase()}-chain`);\n }}\n variant=\"outlined\"\n disabled={loadingStatus === 'failed'}\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && chain ? (\n <StyledImage src={chain.logo} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n style={{ marginRight: '.5rem' }}\n >\n {loadingStatus === 'success' && chain ? chain.displayName : t('Chain')}\n </Button>\n <Button\n onClick={() => {\n navigate(`/${props.type.toLowerCase()}-token`);\n }}\n variant=\"outlined\"\n disabled={\n loadingStatus === 'failed' ||\n (type === 'From' && !fromChain) ||\n (type === 'To' && !toChain)\n }\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && token ? (\n <StyledImage src={token.image} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n style={{ marginRight: '.5rem' }}\n >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n {props.type === 'From' ? (\n <TextField\n type=\"number\"\n size=\"large\"\n autoFocus\n placeholder=\"0\"\n style={{\n width: '70%',\n position: 'relative',\n backgroundColor: '$background !important',\n }}\n suffix={\n <span\n style={{ position: 'absolute', right: '4px', bottom: '2px' }}\n >\n <Typography variant=\"caption\">{`$${numberToString(\n inputUsdValue\n )}`}</Typography>\n </span>\n }\n value={props.inputAmount || ''}\n onChange={\n props.type === 'From'\n ? (event) => {\n props.onAmountChange(event.target.value);\n }\n : undefined\n }\n />\n ) : (\n <OutputContainer>\n <Typography variant=\"body1\">\n {bestRoute\n ? `≈ ${numberToString(props.outputAmount)}`\n : inputAmount\n ? '?'\n : '0'}\n </Typography>\n <span\n style={{ position: 'absolute', right: '4px', bottom: '2px' }}\n >\n <Typography variant=\"caption\">{`$${numberToString(\n props.outputUsdValue\n )}`}</Typography>\n </span>\n </OutputContainer>\n )}\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled } from '@rango-dev/ui/src/theme';\nimport { Typography } from '@rango-dev/ui';\nimport { useTranslation } from 'react-i18next';\n\nconst Container = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n alignItems: 'center',\n paddingTop: '$16',\n});\n\nconst Logo = styled('svg', {\n fill: '$foreground',\n width: '$24',\n margin: '0 $8 0 $16',\n});\n\nconst StyledAnchor = styled('a', {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n textDecoration: 'none',\n});\n\nexport function BottomLogo() {\n const { t } = useTranslation();\n\n return (\n <Container>\n <Typography variant=\"caption\">{t('Powered By')}</Typography>\n <StyledAnchor href=\"https://rango.exchange\" target=\"_blank\">\n <Logo xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 33.68 29\">\n <defs></defs>\n <g id=\"Layer_2\" data-name=\"Layer 2\">\n <g id=\"Layer_1-2\" data-name=\"Layer 1\">\n <path d=\"M33.68,18.05A17.93,17.93,0,0,0,28.34,5.29,18.31,18.31,0,0,0,15.45,0H13.54V7.41L6.07,0H.69L9.83,9.07H0V11A17.93,17.93,0,0,0,5.34,23.71,18.32,18.32,0,0,0,18.24,29h1.9V21.59l7.38,7.31h5.39l-9-9h9.82ZM17.37,16.16H12.49a1.93,1.93,0,0,0-1.35.55,1.89,1.89,0,0,0-.56,1.34,1.85,1.85,0,0,0,.56,1.33,1.93,1.93,0,0,0,1.35.55h3.84V25.1A14.43,14.43,0,0,1,8,21a14.21,14.21,0,0,1-4.1-8.2H21.2a1.86,1.86,0,0,0,.74-.13,1.92,1.92,0,0,0,.64-.4,2,2,0,0,0,.43-.62,1.88,1.88,0,0,0,0-1.47,2,2,0,0,0-.43-.62,1.92,1.92,0,0,0-.64-.4,1.86,1.86,0,0,0-.74-.13H17.35V3.9A14.43,14.43,0,0,1,25.64,8a14.19,14.19,0,0,1,4.11,8.2Zm2.12-5.27a1.43,1.43,0,0,1,.26-.83,1.52,1.52,0,0,1,.67-.56,1.55,1.55,0,0,1,.88-.08,1.51,1.51,0,0,1,.77.4,1.54,1.54,0,0,1,.42.77,1.41,1.41,0,0,1-.09.86,1.47,1.47,0,0,1-.55.68,1.56,1.56,0,0,1-.84.25,1.52,1.52,0,0,1-1.52-1.49Z\" />\n <path d=\"M21.7,11.57a.68.68,0,0,0-.12-.38.64.64,0,0,0-.31-.25.68.68,0,0,0-.75.15.61.61,0,0,0-.19.35.62.62,0,0,0,0,.4.67.67,0,0,0,.25.3.69.69,0,0,0,.39.12.7.7,0,0,0,.49-.2A.68.68,0,0,0,21.7,11.57Z\" />\n </g>\n </g>\n </Logo>\n <Typography variant=\"body2\">RANGO</Typography>\n </StyledAnchor>\n </Container>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { SearchParams } from '../constants/searchParams';\nimport { useBestRouteStore } from '../store/bestRoute';\n\nexport function SwithFromAndTo({ count }: { count: number }) {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const outputAmount = useBestRouteStore.use.outputAmount();\n\n useEffect(() => {\n if (!firstRender.current) {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n setSearchParams({\n ...(toChainString && { [SearchParams.FROM_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.FROM_TOKEN]: toTokenString }),\n ...(fromChainString && { [SearchParams.TO_CHAIN]: fromChainString }),\n ...(fromTokenString && { [SearchParams.TO_TOKEN]: fromTokenString }),\n ...(outputAmount && { [SearchParams.FROM_AMOUNT]: outputAmount.toString() }),\n });\n } else {\n firstRender.current = false;\n }\n }, [count]);\n\n return null;\n}\n","import { styled } from '@rango-dev/ui';\n\nexport const Footer = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n paddingTop: '$16',\n});\n","export const errorMessages = {\n genericServerError: 'Error connecting server, please reload the app and try again',\n};\n","import {\n Alert,\n BestRoute,\n Button,\n styled,\n Typography,\n VerticalSwapIcon,\n} from '@rango-dev/ui';\nimport React, { useState } from 'react';\nimport { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { Header } from '../components/Header';\nimport { TokenInfo } from '../components/TokenInfo';\nimport { fetchBestRoute, useBestRouteStore } from '../store/bestRoute';\nimport { BottomLogo } from '../components/BottomLogo';\nimport { SwithFromAndTo } from '../components/SwitchFromAndTo';\nimport { Footer } from '../components/Footer';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useMetaStore } from '../store/meta';\nimport { useWalletsStore } from '../store/wallets';\nimport { errorMessages } from '../constants/errors';\nimport {\n getSwapButtonState,\n getOutputRatio,\n hasLimitError,\n outputRatioHasWarning,\n canComputePriceImpact,\n LimitErrorMessage,\n getTotalFeeInUsd,\n hasHighFee,\n} from '../utils/swap';\nimport {\n numberToString,\n secondsToString,\n totalArrivalTime,\n} from '../utils/numbers';\n\nconst Container = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n});\n\nconst SwitchButtonContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'relative',\n top: '11px',\n});\n\nconst BestRouteContainer = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nconst Alerts = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\ninterface PropTypes {\n title?: string;\n titleSize?: number;\n titleWeight?: number;\n}\nexport function Home(props: PropTypes) {\n const { title = 'SWAP', titleSize = 18, titleWeight = 600 } = props;\n\n const waningMessage = '';\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n const [count, setCount] = useState(0);\n const fromChain = useBestRouteStore.use.fromChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toChain = useBestRouteStore.use.toChain();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const outputAmount = useBestRouteStore.use.outputAmount();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const tokens = useMetaStore.use.meta().tokens;\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const bestRouteError = useBestRouteStore.use.error();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const accounts = useWalletsStore.use.accounts();\n\n const swithFromAndTo = () => {\n setFromChain(toChain);\n setFromToken(toToken);\n setToChain(fromChain);\n setToToken(fromToken);\n setInputAmount(outputAmount?.toString() || '');\n setCount((prev) => prev + 1);\n };\n\n const errorMessage =\n loadingMetaStatus === 'failed'\n ? errorMessages.genericServerError\n : bestRouteError;\n\n const needsToWarnEthOnPath = false;\n\n const showBestRoute =\n inputAmount && (!!bestRoute || fetchingBestRoute || bestRouteError);\n\n const outToInRatio = getOutputRatio(inputUsdValue, outputUsdValue);\n\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outToInRatio);\n\n const { fromAmountRangeError, recommendation, swap } =\n LimitErrorMessage(bestRoute);\n\n const priceImpactCanNotBeComputed = !canComputePriceImpact(\n bestRoute,\n inputAmount,\n inputUsdValue,\n outputUsdValue\n );\n\n const swapButtonState = getSwapButtonState(\n loadingMetaStatus,\n accounts,\n fetchingBestRoute,\n bestRoute,\n hasLimitError(bestRoute),\n highValueLoss,\n priceImpactCanNotBeComputed,\n needsToWarnEthOnPath\n );\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n const highFee = hasHighFee(totalFeeInUsd);\n\n \n return (\n <Container>\n <Header\n title={title}\n titleSize={titleSize}\n titleWeight={titleWeight}\n onClickRefresh={fetchBestRoute}\n />\n <TokenInfo\n type=\"From\"\n chain={fromChain}\n token={fromToken}\n onAmountChange={setInputAmount}\n inputAmount={inputAmount}\n />\n <SwitchButtonContainer>\n <Button variant=\"ghost\" onClick={swithFromAndTo}>\n <VerticalSwapIcon size={36} />\n {isRouterInContext && <SwithFromAndTo count={count} />}\n </Button>\n </SwitchButtonContainer>\n <TokenInfo\n type=\"To\"\n chain={toChain}\n token={toToken}\n outputAmount={outputAmount}\n outputUsdValue={outputUsdValue}\n />\n {showBestRoute && (\n <BestRouteContainer>\n <BestRoute\n error={bestRouteError}\n loading={fetchingBestRoute}\n data={bestRoute}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n feeWarning={highFee}\n totalTime={secondsToString(totalArrivalTime(bestRoute))}\n />\n </BestRouteContainer>\n )}\n {(errorMessage || waningMessage || hasLimitError(bestRoute)) && (\n <Alerts>\n {errorMessage && (\n <Alert type=\"error\">\n {<Typography variant=\"body2\">{errorMessage}</Typography>}\n </Alert>\n )}\n {hasLimitError(bestRoute) && (\n <Alert type=\"error\" title={`${swap?.swapperId} Limit`}>\n <>\n <Typography variant=\"body2\">{fromAmountRangeError}</Typography>\n <br />\n <Typography variant=\"body2\">\n Yours: {numberToString(swap?.fromAmount || null)}\n {swap?.from.symbol}\n </Typography>\n <br />\n <Typography variant=\"body2\">{recommendation}</Typography>\n </>\n </Alert>\n )}\n {waningMessage && (\n <Alert type=\"warning\">\n <Typography variant=\"body2\">{waningMessage}</Typography>\n </Alert>\n )}\n </Alerts>\n )}\n <Footer>\n <Button\n type=\"primary\"\n align=\"grow\"\n size=\"large\"\n disabled={swapButtonState.disabled}\n onClick={() => {\n if (swapButtonState.title === 'Connect Wallet')\n navigate(navigationRoutes.wallets);\n else {\n navigate(navigationRoutes.confirmWallets, { replace: true });\n }\n }}\n >\n {swapButtonState.title}\n </Button>\n <BottomLogo />\n </Footer>\n </Container>\n );\n}\n","import React, { PropsWithChildren, useEffect, useRef } from 'react';\nimport {\n MemoryRouter,\n useInRouterContext,\n useLocation,\n useNavigate,\n} from 'react-router';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { UpdateUrl } from './UpdateUrl';\nimport { Home } from '../pages/Home';\ninterface PropTypes {\n title?: string;\n titleSize?: number;\n titleWeight?: number;\n}\nconst Route: React.FC = ({\n children,\n ...props\n}: PropTypes & PropsWithChildren) => {\n const location = useLocation();\n const navigate = useNavigate();\n const ref = useRef(true);\n\n useEffect(() => {\n if (\n [navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n ) &&\n ref.current\n )\n navigate(navigationRoutes.home + location.search, { state: 'redirect' });\n\n ref.current = false;\n }, []);\n\n if (\n [navigationRoutes.confirmWallets, navigationRoutes.confirmSwap].includes(\n location.pathname\n ) &&\n ref.current\n )\n return <Home {...props} />;\n\n return <> {children}</>;\n};\n\nexport function AppRouter({\n children,\n ...props\n}: PropTypes & PropsWithChildren) {\n const isRouterInContext = useInRouterContext();\n const Router = isRouterInContext ? Route : MemoryRouter;\n\n return (\n <>\n <Router {...props}>{children}</Router>\n {isRouterInContext && <UpdateUrl />}\n </>\n );\n}\n","import React from 'react';\nimport { Button, styled } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nconst StyledButton = styled(Button, {\n marginTop: '$8',\n});\n\nexport function ChangeSlippageButton() {\n const navigate = useNavigate();\n\n return (\n <StyledButton\n type=\"primary\"\n variant=\"contained\"\n size=\"small\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n Change Slippage\n </StyledButton>\n );\n}\n","import { Alert, Typography } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function HighSlippageWarning(props: PropTypes) {\n const { selectedSlippage } = props;\n\n return (\n <Alert type=\"warning\">\n <Typography variant=\"body2\">\n Caution, your slippage is high (=\n {selectedSlippage}). Your trade may be front run.\n <ChangeSlippageButton />\n </Typography>\n </Alert>\n );\n}\n","import React from 'react';\nimport { HIGH_SLIPPAGE } from '../../constants/swapSettings';\nimport { HighSlippageWarning } from './HighSlippageWarning';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function ConfirmSwapExtraMessages(props: PropTypes) {\n const { selectedSlippage } = props;\n const highSlippage = selectedSlippage >= HIGH_SLIPPAGE;\n\n return (\n <>\n {highSlippage && (\n <HighSlippageWarning selectedSlippage={selectedSlippage} />\n )}\n </>\n );\n}\n","import { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function useNavigateBack() {\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n\n navigationRoutes;\n\n const navigateBackFrom = (currentRoute: string) => {\n if (\n !isRouterInContext ||\n (window.history.state && window.history.state.idx > 0)\n )\n navigate(-1);\n else {\n if (\n [\n navigationRoutes.fromChain,\n navigationRoutes.fromToken,\n navigationRoutes.toChain,\n navigationRoutes.toToken,\n navigationRoutes.settings,\n navigationRoutes.wallets,\n navigationRoutes.swaps,\n navigationRoutes.confirmWallets,\n ].includes(currentRoute)\n )\n navigate(navigationRoutes.home, { replace: true });\n else if (currentRoute === navigationRoutes.liquiditySources)\n navigate(navigationRoutes.settings, { replace: true });\n else if (currentRoute === navigationRoutes.swapDetails)\n navigate(navigationRoutes.swaps, { replace: true });\n else if (currentRoute === navigationRoutes.confirmSwap)\n navigate(navigationRoutes.confirmWallets, { replace: true });\n }\n };\n\n return { navigateBackFrom };\n}\n","import { RouteState } from '../store/bestRoute';\nimport { SettingsState } from '../store/settings';\n\nexport interface BestRouteParams {\n fromChain?: RouteState['fromChain'];\n toChain?: RouteState['toChain'];\n fromToken?: RouteState['fromToken'];\n toToken?: RouteState['toToken'];\n inputAmount?: RouteState['inputAmount'];\n slippage?: SettingsState['slippage'];\n customSlippage?: SettingsState['customSlippage'];\n disabledLiquiditySources?: SettingsState['disabledLiquiditySources'];\n}\n\nexport enum ConfirmSwapErrorTypes {\n NO_ROUTE,\n ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n REQUEST_FAILED,\n INSUFFICIENT_SLIPPAGE,\n}\n\nexport type ConfirmSwapError =\n | {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED;\n status?: number;\n }\n | {\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE;\n minRequiredSlippage: number | null;\n }\n | {\n type: Exclude<\n ConfirmSwapErrorTypes,\n | ConfirmSwapErrorTypes.REQUEST_FAILED\n | ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n >;\n };\n\nexport type ConfirmSwapWarnings =\n | {\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED;\n newOutputAmount: string;\n percentageChange: string;\n }\n | { type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE; messages: string[] }\n | {\n type: Exclude<\n ConfirmSwapWarningTypes,\n | ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED\n | ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE\n >;\n };\n\nexport enum ConfirmSwapWarningTypes {\n ROUTE_UPDATED,\n ROUTE_SWAPPERS_UPDATED,\n ROUTE_COINS_UPDATED,\n ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n INSUFFICIENT_BALANCE,\n}\n","import { Typography } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n minRequiredSlippage: number | null;\n}\n\nexport function MinRequiredSlippage({ minRequiredSlippage }: PropTypes) {\n return (\n <Typography variant=\"body2\">\n We recommend you to increase slippage to at least \n {minRequiredSlippage}\n for this route.\n <ChangeSlippageButton />\n </Typography>\n );\n}\n","import React from 'react';\nimport { Typography } from '@rango-dev/ui';\nimport { ConfirmSwapError, ConfirmSwapErrorTypes } from '../types';\nimport { MinRequiredSlippage } from './warnings/MinRequiredSlippage';\n\nexport function ConfirmSwapErrors(errors: ConfirmSwapError[]) {\n return errors.flatMap((error) => {\n switch (error.type) {\n case ConfirmSwapErrorTypes.NO_ROUTE:\n return (\n <Typography variant=\"body2\">\n No routes found. Please try again later.\n </Typography>\n );\n case ConfirmSwapErrorTypes.REQUEST_FAILED:\n return (\n <Typography variant=\"body2\">{`Failed to confirm swap ${\n error.status ? `'status': ${error.status})` : ''\n }, please try again.`}</Typography>\n );\n\n case ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS:\n return (\n <Typography variant=\"body2\">\n Route updated and price impact is too high, try again later!\n </Typography>\n );\n case ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE:\n return (\n <MinRequiredSlippage\n minRequiredSlippage={error.minRequiredSlippage}\n />\n );\n default:\n return [];\n }\n });\n}\n","import { styled, Typography } from '@rango-dev/ui';\nimport React from 'react';\n\ninterface PropTypes {\n messages: string[];\n}\n\nconst List = styled('ul', {\n variants: {\n showListStyle: {\n true: { paddingLeft: '$24' },\n },\n },\n});\n\nconst ListItem = styled('li', {\n variants: {\n showListStyle: {\n true: { listStyleType: 'disc', listStylePosition: 'outside' },\n },\n },\n});\n\nconst Message = styled(Typography, {\n display: 'block',\n});\n\nexport function BalanceWarnings({ messages }: PropTypes) {\n const showListStyle = messages.length > 1;\n return (\n <List showListStyle={showListStyle}>\n {messages.map((warning) => (\n <ListItem showListStyle={showListStyle}>\n <Message variant=\"body2\">{warning}</Message>\n </ListItem>\n ))}\n </List>\n );\n}\n","import React from 'react';\nimport { Typography } from '@rango-dev/ui';\nimport { ConfirmSwapWarningTypes, ConfirmSwapWarnings } from '../types';\nimport { BalanceWarnings } from './warnings/BalanceWarnings';\n\nexport function ConfirmSwapWarnings(warnings: ConfirmSwapWarnings[]) {\n return warnings.flatMap((warning) => {\n switch (warning.type) {\n case ConfirmSwapWarningTypes.ROUTE_UPDATED:\n return <Typography variant=\"body2\">Route has been updated.</Typography>;\n case ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED:\n return (\n <Typography variant=\"body2\">{`Output amount changed to ${warning.newOutputAmount} \n (${warning.percentageChange}% change).`}</Typography>\n );\n\n case ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED:\n return (\n <Typography variant=\"body2\">\n Route swappers has been updated.\n </Typography>\n );\n case ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED:\n return (\n <Typography variant=\"body2\">\n Route internal coins has been updated.\n </Typography>\n );\n case ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE:\n return <BalanceWarnings messages={warning.messages} />;\n default:\n return [];\n }\n });\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { useWalletsStore } from '../store/wallets';\nimport {\n ConfirmSwapError,\n ConfirmSwapErrorTypes,\n ConfirmSwapWarningTypes,\n ConfirmSwapWarnings,\n PendingSwapSettings,\n} from '../types';\nimport { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\nimport {\n calculatePendingSwap,\n createBestRouteRequestBody,\n getBalanceWarnings,\n getMinRequiredSlippage,\n getOutputRatio,\n getPercentageChange,\n getRouteOutputAmount,\n getWalletsForNewSwap,\n hasProperSlippage,\n isOutputAmountChangedALot,\n outputRatioHasWarning,\n} from '../utils/swap';\nimport { httpService } from '../services/httpService';\nimport BigNumber from 'bignumber.js';\nimport {\n isNumberOfSwapsChanged,\n isRouteChanged,\n isRouteInternalCoinsUpdated,\n isRouteSwappersUpdated,\n} from '../utils/routing';\nimport { numberToString } from '../utils/numbers';\nimport { BestRouteResponse } from 'rango-sdk';\n\ntype ConfirmSwap = {\n loading: boolean;\n errors: ConfirmSwapError[];\n warnings: ConfirmSwapWarnings[];\n confirmSwap: (() => Promise<PendingSwap | undefined>) | null;\n};\n\nexport function useConfirmSwap(): ConfirmSwap {\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const initialRoute = useBestRouteStore.use.bestRoute();\n const setBestRoute = useBestRouteStore.use.setBestRoute();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const accounts = useWalletsStore.use.accounts();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const meta = useMetaStore.use.meta();\n const customSlippage = useSettingsStore.use.customSlippage();\n const slippage = useSettingsStore.use.slippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const userSlippage = customSlippage || slippage;\n const proceedAnywayRef = useRef(false);\n const confiremedRouteRef = useRef<BestRouteResponse | null>(null);\n let abortControllerRef = useRef<AbortController | null>(null);\n\n const [loading, setLoading] = useState(false);\n const [errors, setErrors] = useState<ConfirmSwapError[]>([]);\n const [warnings, setWarnings] = useState<ConfirmSwapWarnings[]>([]);\n\n useEffect(() => {\n return () => abortControllerRef.current?.abort();\n }, []);\n\n if (!fromToken || !toToken || !inputAmount || !initialRoute)\n return { loading: false, warnings: [], errors: [], confirmSwap: null };\n\n const confirmSwap = async (): Promise<PendingSwap | undefined> => {\n if (proceedAnywayRef.current) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n if (errors.length > 0) setErrors([]);\n if (warnings.length > 0) setWarnings([]);\n proceedAnywayRef.current = false;\n\n if (confiremedRouteRef.current) {\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRouteRef.current,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n return newSwap;\n }\n return;\n }\n\n abortControllerRef.current = new AbortController();\n\n setLoading(true);\n\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n accounts,\n selectedWallets,\n disabledLiquiditySources,\n userSlippage,\n true\n );\n\n try {\n const confiremedRoute = await httpService.getBestRoute(requestBody, {\n signal: abortControllerRef.current?.signal,\n });\n\n abortControllerRef.current = null;\n\n setLoading(false);\n\n if (\n !confiremedRoute.result ||\n !new BigNumber(confiremedRoute.requestAmount).isEqualTo(\n new BigNumber(inputAmount || '-1')\n )\n ) {\n setErrors((prevState) =>\n prevState.concat({\n type: ConfirmSwapErrorTypes.NO_ROUTE,\n })\n );\n return;\n }\n\n const confirmSwapState: Omit<ConfirmSwap, 'confirmSwap' | 'loading'> = {\n errors: [],\n warnings: [],\n };\n\n const routeChanged = isRouteChanged(initialRoute, confiremedRoute!);\n\n if (routeChanged) {\n setBestRoute(confiremedRoute);\n const newRouteOutputUsdValue = new BigNumber(\n confiremedRoute.result?.outputAmount || '0'\n ).multipliedBy(toToken.usdPrice || 0);\n\n const outputRatio = getOutputRatio(\n inputUsdValue,\n newRouteOutputUsdValue\n );\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outputRatio);\n\n if (highValueLoss)\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n });\n else if (isOutputAmountChangedALot(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n newOutputAmount: numberToString(\n getRouteOutputAmount(confiremedRoute)\n ),\n percentageChange: numberToString(\n getPercentageChange(\n getRouteOutputAmount(initialRoute),\n getRouteOutputAmount(confiremedRoute)\n ),\n null,\n 2\n ),\n });\n else if (isRouteInternalCoinsUpdated(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED,\n });\n else if (isNumberOfSwapsChanged(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_UPDATED,\n });\n else if (isRouteSwappersUpdated(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED,\n });\n }\n\n const balanceWarnings = getBalanceWarnings(\n confiremedRoute,\n selectedWallets\n );\n const enoughBalance = balanceWarnings.length === 0;\n\n if (!enoughBalance)\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE,\n messages: balanceWarnings,\n });\n\n const minRequiredSlippage = getMinRequiredSlippage(initialRoute);\n\n if (!hasProperSlippage(userSlippage.toString(), minRequiredSlippage))\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE,\n minRequiredSlippage,\n });\n\n const noErrors = confirmSwapState.errors.length === 0;\n const noWarnings = confirmSwapState.warnings.length === 0;\n\n if (\n (noErrors || (!noErrors && proceedAnywayRef.current)) &&\n (noWarnings || (!noWarnings && proceedAnywayRef.current))\n ) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRoute,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n return newSwap;\n } else if (!proceedAnywayRef.current) {\n proceedAnywayRef.current = true;\n setErrors(confirmSwapState.errors);\n setWarnings(confirmSwapState.warnings);\n confiremedRouteRef.current = confiremedRoute;\n }\n return;\n } catch (error) {\n if ((error as any)?.code === 'ERR_CANCELED') {\n return;\n }\n\n const status = (error as any)?.response?.status;\n\n setLoading(false);\n setErrors([\n {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED,\n status,\n },\n ]);\n\n return;\n }\n };\n\n return { loading, warnings, errors, confirmSwap };\n}\n","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ConfirmSwap } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useSettingsStore } from '../store/settings';\nimport { ConfirmSwapExtraMessages } from '../components/warnings/ConfirmSwapExtraMessages';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { ConfirmSwapErrors } from '../components/ConfirmSwapErrors';\nimport { ConfirmSwapWarnings } from '../components/ConfirmSwapWarnings';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useUiStore } from '../store/ui';\nimport { useConfirmSwap } from '../hooks/useConfirmSwap';\nimport { ConfirmSwapErrorTypes } from '../types';\nimport { useMetaStore } from '../store/meta';\nimport { getBestRouteWithCalculatedFees } from '../utils/routing';\n\nexport function ConfirmSwapPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const navigate = useNavigate();\n\n const bestRoute = useBestRouteStore.use.bestRoute();\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const { tokens } = useMetaStore.use.meta();\n\n const slippage = useSettingsStore.use.slippage();\n const customSlippage = useSettingsStore.use.customSlippage();\n const selectedSlippage = customSlippage || slippage;\n const { loading, errors, warnings, confirmSwap } = useConfirmSwap();\n\n const showHighSlippageWarning = !errors.find(\n (error) => error.type === ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n );\n\n return (\n <ConfirmSwap\n onConfirm={() => {\n confirmSwap?.().then((swap) => {\n if (swap) {\n manager?.create(\n 'swap',\n { swapDetails: swap },\n { id: swap.requestId }\n );\n setSelectedSwap(swap.requestId);\n navigate(navigationRoutes.swaps + `/${swap.requestId}`, {\n replace: true,\n });\n }\n });\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmSwap)}\n bestRoute={getBestRouteWithCalculatedFees(bestRoute, tokens)}\n loading={loading}\n errors={ConfirmSwapErrors(errors)}\n warnings={ConfirmSwapWarnings(warnings)}\n extraMessages={\n showHighSlippageWarning && (\n <ConfirmSwapExtraMessages selectedSlippage={selectedSlippage} />\n )\n }\n confirmButtonTitle={\n warnings.length > 0 || errors.length > 0\n ? 'Proceed anyway!'\n : 'Confirm swap!'\n }\n confirmButtonDisabled={fetchingBestRoute}\n />\n );\n}\n","import { Manager } from '@rango-dev/queue-manager-core';\nimport {\n PendingSwapWithQueueID,\n SwapStorage,\n} from '@rango-dev/queue-manager-rango-preset';\n\nexport const getPendingSwaps = (manager: Manager | undefined) => {\n const result: PendingSwapWithQueueID[] = [];\n\n manager?.getAll().forEach((q, id) => {\n const storage = q.list.getStorage() as SwapStorage;\n\n if (storage?.swapDetails) {\n result.push({\n id,\n swap: storage?.swapDetails,\n });\n }\n });\n\n return result.sort(\n (a, b) => Number(b.swap.creationTime) - Number(a.swap.creationTime)\n );\n};\n","import { History } from '@rango-dev/ui';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { useUiStore } from '../store/ui';\n\nexport function HistoryPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const pendingSwaps = getPendingSwaps(manager).map(({ swap }) => swap);\n\n return (\n <History\n //todo: move PendingSwap type to rango-types\n //@ts-ignore\n list={pendingSwaps}\n onSwapClick={(requestId) => {\n setSelectedSwap(requestId);\n navigate(navigationRoutes.swaps + `/${requestId}`);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swaps)}\n />\n );\n}\n","import { LiquiditySourcesSelector } from '@rango-dev/ui';\nimport React from 'react';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { Source } from '../types';\nimport { removeDuplicateFrom } from '../utils/common';\ninterface PropTypes {\n supportedSwappers: 'all' | Source[];\n}\nexport function LiquiditySourcePage({ supportedSwappers }: PropTypes) {\n const swappers = useMetaStore.use.meta().swappers;\n const toggleLiquiditySource = useSettingsStore.use.toggleLiquiditySource();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const toggleAllLiquiditySources =\n useSettingsStore.use.toggleAllLiquiditySources();\n\n const { navigateBackFrom } = useNavigateBack();\n\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n\n return (\n <LiquiditySourcesSelector\n toggleAll={toggleAllLiquiditySources}\n list={\n supportedSwappers !== 'all'\n ? uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter(\n (s) => s.title === item.title && s.type === item.type\n ).length > 0\n )\n : uniqueSwappersGroups\n }\n onChange={(liquiditySource) =>\n toggleLiquiditySource(liquiditySource.title)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.liquiditySources)}\n />\n );\n}\n","import React from 'react';\nimport { BlockchainSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { BlockchainMeta } from 'rango-sdk';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedChains: 'all' | BlockchainMeta[];\n}\n\nexport function SelectChainPage(props: PropTypes) {\n const { type, supportedChains } = props;\n const blockchains =\n supportedChains === 'all'\n ? useMetaStore.use.meta().blockchains\n : supportedChains;\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setToChain = useBestRouteStore.use.setToChain();\n\n const { navigateBackFrom } = useNavigateBack();\n\n return (\n <BlockchainSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={blockchains}\n selected={type === 'from' ? fromChain : toChain}\n loadingStatus={loadingStatus}\n onChange={(chain) => {\n if (type === 'from') setFromChain(chain, true);\n else setToChain(chain, true);\n navigateBackFrom(navigationRoutes.fromChain);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromChain)}\n />\n );\n}\n","import React from 'react';\nimport { TokenSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { Token } from 'rango-sdk';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { tokensAreEqual } from '../utils/wallets';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedTokens: 'all' | Token[];\n}\n\nexport interface TokenWithBalance extends Token {\n balance?: {\n amount: string;\n usdValue: string;\n };\n}\n\nexport function SelectTokenPage(props: PropTypes) {\n const { navigateBackFrom } = useNavigateBack();\n\n const { type, supportedTokens } = props;\n const sourceTokens = useBestRouteStore.use.sourceTokens();\n const destinationTokens = useBestRouteStore.use.destinationTokens();\n const supportedSourceTokens =\n supportedTokens === 'all'\n ? sourceTokens\n : sourceTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n );\n\n const supportedDestinationTokens =\n supportedTokens === 'all'\n ? destinationTokens\n : destinationTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n );\n console.log(supportedSourceTokens);\n\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToToken = useBestRouteStore.use.setToToken();\n\n return (\n <TokenSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={type == 'from' ? supportedSourceTokens : supportedDestinationTokens}\n selected={type === 'from' ? fromToken : toToken}\n onChange={(token) => {\n if (type === 'from') setFromToken(token);\n else setToToken(token);\n navigateBackFrom(navigationRoutes.fromToken);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromToken)}\n />\n );\n}\n","import React from 'react';\nimport { Settings } from '@rango-dev/ui';\nimport { useSettingsStore } from '../store/settings';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { Source } from '../types';\nimport {\n MAX_SLIPPAGE,\n MIN_SLIPPGAE,\n SLIPPAGES,\n} from '../constants/swapSettings';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\ninterface PropTypes {\n supportedSwappers: 'all' | Source[];\n}\nexport function SettingsPage({ supportedSwappers }: PropTypes) {\n const slippage = useSettingsStore.use.slippage();\n const setSlippage = useSettingsStore.use.setSlippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const customSlippage = useSettingsStore.use.customSlippage();\n const setCustomSlippage = useSettingsStore.use.setCustomSlippage();\n const theme = useSettingsStore.use.theme();\n const setTheme = useSettingsStore.use.setTheme();\n const swappers = useMetaStore.use.meta().swappers;\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n\n const infiniteApprove = useSettingsStore.use.infiniteApprove();\n const toggleInfiniteApprove = useSettingsStore.use.toggleInfiniteApprove();\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n if (supportedSwappers !== 'all') {\n }\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n supportedSwappers !== 'all' &&\n uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter(\n (s) => s.title === item.title && s.type === item.type\n ).length > 0\n );\n\n const supportedUniqueSwappersGroups =\n supportedSwappers !== 'all'\n ? uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter(\n (s) => s.title === item.title && s.type === item.type\n ).length > 0\n )\n : uniqueSwappersGroups;\n\n return (\n <Settings\n slippages={SLIPPAGES}\n selectedSlippage={slippage}\n onSlippageChange={(slippage) => setSlippage(slippage)}\n onLiquiditySourcesClick={() =>\n navigate(navigationRoutes.liquiditySources)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.settings)}\n liquiditySources={supportedUniqueSwappersGroups}\n selectedLiquiditySources={supportedUniqueSwappersGroups.filter(\n (s) => s.selected\n )}\n customSlippage={customSlippage || NaN}\n onCustomSlippageChange={setCustomSlippage}\n minSlippage={MIN_SLIPPGAE}\n maxSlippage={MAX_SLIPPAGE}\n selectedTheme={theme}\n onThemeChange={setTheme}\n infiniteApprove={infiniteApprove}\n toggleInfiniteApprove={toggleInfiniteApprove}\n />\n );\n}\n","import {\n Alert,\n SecondaryPage,\n styled,\n Wallet,\n Typography,\n WalletState,\n} from '@rango-dev/ui';\nimport React, { useEffect, useState } from 'react';\nimport { getlistWallet, sortWalletsBasedOnState } from '../utils/wallets';\nimport { WalletType, detectMobileScreens } from '@rango-dev/wallets-shared';\nimport { useWallets } from '@rango-dev/wallets-core';\n\nimport { useUiStore } from '../store/ui';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useTranslation } from 'react-i18next';\n\ninterface PropTypes {\n supportedWallets: 'all' | WalletType[];\n multiWallets: boolean;\n}\n\nconst ListContainer = styled('div', {\n display: 'grid',\n gap: '.5rem',\n gridTemplateColumns: ' repeat(2, minmax(0, 1fr))',\n height: '450px',\n alignContent: 'baseline',\n padding: '0 0.5rem',\n});\n\nconst AlertContainer = styled('div', {\n paddingBottom: '$16',\n});\nexport function WalletsPage({ supportedWallets, multiWallets }: PropTypes) {\n const { navigateBackFrom } = useNavigateBack();\n const { state, disconnect, getWalletInfo, connect } = useWallets();\n const wallets = getlistWallet(\n state,\n getWalletInfo,\n supportedWallets === 'all' ? Object.values(WalletType) : supportedWallets\n );\n\n let sortedWallets = detectMobileScreens()\n ? wallets.filter((wallet) => wallet.showOnMobile)\n : wallets;\n sortedWallets = sortWalletsBasedOnState(sortedWallets);\n const [walletErrorMessage, setWalletErrorMessage] = useState('');\n const toggleConnectWalletsButton =\n useUiStore.use.toggleConnectWalletsButton();\n const { t } = useTranslation();\n\n const onSelectWallet = async (type: WalletType) => {\n const wallet = state(type);\n try {\n if (walletErrorMessage) setWalletErrorMessage('');\n if (wallet.connected) {\n await disconnect(type);\n } else {\n if (\n !multiWallets &&\n !!wallets.find((w) => w.state === WalletState.CONNECTED)\n ) {\n return;\n }\n await connect(type);\n }\n } catch (e) {\n setWalletErrorMessage('Error: ' + (e as any)?.message);\n }\n };\n\n useEffect(() => {\n toggleConnectWalletsButton();\n return () => toggleConnectWalletsButton();\n }, []);\n\n return (\n <SecondaryPage\n title={t('Select Wallet') || ''}\n textField={false}\n onBack={navigateBackFrom.bind(null, navigationRoutes.wallets)}\n >\n <>\n {walletErrorMessage && (\n <AlertContainer>\n <Alert type=\"error\">\n <Typography variant=\"body2\">{walletErrorMessage}</Typography>\n </Alert>\n </AlertContainer>\n )}\n <ListContainer>\n {sortedWallets.map((wallet, index) => (\n <Wallet\n {...wallet}\n key={`${index}-${wallet.type}`}\n onClick={onSelectWallet}\n />\n ))}\n </ListContainer>\n </>\n </SecondaryPage>\n );\n}\n","import React, { useEffect } from 'react';\nimport { ConfirmWallets } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useWalletsStore } from '../store/wallets';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport {\n getKeplrCompatibleConnectedWallets,\n getRequiredChains,\n getSelectableWallets,\n isExperimentalChain,\n} from '../utils/wallets';\nimport { requiredWallets } from '../utils/swap';\nimport { decimalNumber } from '../utils/numbers';\nimport { useMetaStore } from '../store/meta';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\n\nexport function ConfirmWalletsPage() {\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const bestRoute = useBestRouteStore.use.bestRoute();\n\n const { blockchains } = useMetaStore.use.meta();\n const accounts = useWalletsStore.use.accounts();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const initSelectedWallets = useWalletsStore.use.initSelectedWallets();\n const setSelectedWallet = useWalletsStore.use.setSelectedWallet();\n\n const { getWalletInfo, connect } = useWallets();\n const confirmDisabled = !requiredWallets(bestRoute).every((chain) =>\n selectedWallets.map((wallet) => wallet.chain).includes(chain)\n );\n\n const firstStep = bestRoute?.result?.swaps[0];\n const lastStep =\n bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1];\n\n const fromAmount = decimalNumber(firstStep?.fromAmount, 3);\n const toAmount = decimalNumber(lastStep?.toAmount, 3);\n useEffect(() => {\n initSelectedWallets();\n }, []);\n\n const selectableWallets = getSelectableWallets(\n accounts,\n selectedWallets,\n getWalletInfo\n );\n\n const handleConnectChain = (wallet: string) => {\n const network = wallet as Network;\n getKeplrCompatibleConnectedWallets(selectableWallets).forEach(\n (compatibleWallet: WalletType) => connect?.(compatibleWallet, network)\n );\n };\n\n return (\n <ConfirmWallets\n requiredWallets={getRequiredChains(bestRoute)}\n selectableWallets={selectableWallets}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmWallets)}\n swap={bestRoute}\n fromAmount={fromAmount}\n toAmount={toAmount}\n onConfirm={() =>\n navigate(navigationRoutes.confirmSwap, { replace: true })\n }\n onChange={(wallet) => setSelectedWallet(wallet)}\n confirmDisabled={confirmDisabled}\n handleConnectChain={(wallet) => handleConnectChain(wallet)}\n isExperimentalChain={(wallet) =>\n getKeplrCompatibleConnectedWallets(selectableWallets).length > 0\n ? isExperimentalChain(blockchains, wallet)\n : false\n }\n />\n );\n}\n","import React from 'react';\nimport copy from 'copy-to-clipboard';\n\nexport default function useCopyToClipboard(resetInterval?: number) {\n const [isCopied, setCopied] = React.useState(false);\n\n const handleCopy = React.useCallback((text: string | number) => {\n copy(text.toString());\n setCopied(true);\n }, []);\n\n React.useEffect(() => {\n let timeout: NodeJS.Timeout;\n if (isCopied && resetInterval) {\n timeout = setTimeout(() => setCopied(false), resetInterval);\n }\n return () => {\n clearTimeout(timeout);\n };\n }, [isCopied, resetInterval]);\n\n return [isCopied, handleCopy] as const;\n}\n","import React from 'react';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport useCopyToClipboard from '../hooks/useCopyToClipboard';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { SwapHistory } from '@rango-dev/ui';\nimport { useUiStore } from '../store/ui';\nimport { cancelSwap } from '@rango-dev/queue-manager-rango-preset';\n\nexport function SwapDetailsPage() {\n const selectedSwapRequestId = useUiStore.use.selectedSwapRequestId();\n const { navigateBackFrom } = useNavigateBack();\n const { manager } = useManager();\n const [isCopied, handleCopy] = useCopyToClipboard(2000);\n\n const pendingSwaps = getPendingSwaps(manager);\n const selectedSwap = pendingSwaps.find(\n ({ swap }) => swap.requestId === selectedSwapRequestId\n );\n\n //TODO: implement swap cancellation (move queueManager logic to queueManager/rango-preset)\n const onCancel = () => {\n const swap = selectedSwap ? manager?.get(selectedSwap.id) : undefined;\n if (swap) cancelSwap(swap);\n };\n return (\n <SwapHistory\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n //todo: move PendingSwap type to rango-types\n //@ts-ignore\n pendingSwap={selectedSwap?.swap}\n onCopy={handleCopy}\n isCopied={isCopied}\n onCancel={onCancel}\n />\n );\n}\n","import React from 'react';\nimport { useRoutes } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { ConfirmSwapPage } from '../pages/ConfirmSwapPage';\nimport { HistoryPage } from '../pages/HistoryPage';\nimport { Home } from '../pages/Home';\nimport { LiquiditySourcePage } from '../pages/LiquiditySourcesPage';\nimport { SelectChainPage } from '../pages/SelectChainPage';\nimport { SelectTokenPage } from '../pages/SelectTokenPage';\nimport { SettingsPage } from '../pages/SettingsPage';\nimport { WalletsPage } from '../pages/WalletsPage';\nimport { ConfirmWalletsPage } from '../pages/ConfirmWalletsPage';\nimport { SwapDetailsPage } from '../pages/SwapDetailsPage';\nimport { Configs } from '../types';\n\ninterface PropTypes {\n configs?: Configs;\n}\n\nexport function AppRoutes(props: PropTypes) {\n const { configs } = props;\n\n return useRoutes([\n {\n path: navigationRoutes.home,\n element: (\n <Home\n title={configs?.title}\n titleSize={configs?.titleSize}\n titleWeight={configs?.titleWeight}\n />\n ),\n },\n {\n path: navigationRoutes.fromChain,\n element: (\n <SelectChainPage\n type=\"from\"\n supportedChains={configs?.fromChains || 'all'}\n />\n ),\n },\n {\n path: navigationRoutes.toChain,\n element: (\n <SelectChainPage\n type=\"to\"\n supportedChains={configs?.toChains || 'all'}\n />\n ),\n },\n {\n path: navigationRoutes.fromToken + '/*',\n element: (\n <SelectTokenPage\n type=\"from\"\n supportedTokens={configs?.fromTokens || 'all'}\n />\n ),\n },\n {\n path: navigationRoutes.toToken,\n element: (\n <SelectTokenPage\n type=\"to\"\n supportedTokens={configs?.toTokens || 'all'}\n />\n ),\n },\n {\n path: navigationRoutes.settings,\n element: (\n <SettingsPage supportedSwappers={configs?.liquiditySources || 'all'} />\n ),\n },\n {\n path: navigationRoutes.liquiditySources,\n element: (\n <LiquiditySourcePage\n supportedSwappers={configs?.liquiditySources || 'all'}\n />\n ),\n },\n { path: navigationRoutes.swaps, element: <HistoryPage /> },\n {\n path: navigationRoutes.swapDetails,\n element: <SwapDetailsPage />,\n },\n {\n path: navigationRoutes.wallets,\n element: (\n <WalletsPage\n supportedWallets={configs?.wallets || 'all'}\n multiWallets={\n typeof configs?.multiWallets === 'undefined'\n ? true\n : configs.multiWallets\n }\n />\n ),\n },\n { path: navigationRoutes.confirmSwap, element: <ConfirmSwapPage /> },\n { path: navigationRoutes.confirmWallets, element: <ConfirmWalletsPage /> },\n ]);\n}\n","import { Button, AddWalletIcon, Typography, styled } from '@rango-dev/ui';\nimport React, { useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { AppRoutes } from './AppRoutes';\nimport { useWalletsStore } from '../store/wallets';\nimport {\n calculateWalletUsdValue,\n getSelectableWallets,\n} from '../utils/wallets';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { Configs } from '../types';\nimport { useTranslation } from 'react-i18next';\nimport { useBestRouteStore } from '../store/bestRoute';\n\nconst Header = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n});\n\nconst WalletImage = styled('img', {\n width: '$24',\n height: '$24',\n marginLeft: -15,\n marginRight: '$6',\n borderRadius: '99999px',\n});\n\nexport type LayoutProps = {\n configs?: Configs;\n};\n\nexport function Layout({ configs }: LayoutProps) {\n const navigate = useNavigate();\n const { balances, accounts, selectedWallets } = useWalletsStore();\n const { getWalletInfo } = useWallets();\n const connectedWalletsImages = removeDuplicateFrom(\n getSelectableWallets(accounts, selectedWallets, getWalletInfo).map(\n (w) => w.image\n )\n );\n\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n\n const totalBalance = calculateWalletUsdValue(balances);\n const connectWalletsButtonDisabled =\n useUiStore.use.connectWalletsButtonDisabled();\n const { t } = useTranslation();\n useEffect(() => {\n setToChain(configs?.toChain || null);\n setToToken(configs?.toToken || null);\n }, [configs?.toChain, configs?.toToken]);\n useEffect(() => {\n setInputAmount(configs?.fromAmount?.toString() || '');\n }, [configs?.fromAmount]);\n\n useEffect(() => {\n setFromToken(configs?.fromToken || null);\n setFromChain(configs?.fromChain || null);\n }, [configs?.fromToken, configs?.fromChain]);\n return (\n <>\n <Header>\n <Button\n size=\"small\"\n suffix={<AddWalletIcon size={20} />}\n variant=\"ghost\"\n flexContent\n onClick={() => {\n if (!connectWalletsButtonDisabled)\n navigate(navigationRoutes.wallets);\n }}\n >\n {connectedWalletsImages?.length ? (\n connectedWalletsImages.map((walletImage, index) => (\n <WalletImage key={index} src={walletImage} />\n ))\n ) : (\n <></>\n )}\n <Typography variant=\"body2\">\n {!accounts?.length ? t('Connect Wallet') : `$${totalBalance || 0}`}\n </Typography>\n </Button>\n </Header>\n <AppRoutes configs={configs} />\n </>\n );\n}\n","import { globalCss } from '@rango-dev/ui';\n\nexport const globalStyles = globalCss({\n '*': {\n '&::-webkit-scrollbar': { width: '$8' },\n '&::-webkit-scrollbar-thumb': {\n backgroundColor: '$neutrals400',\n },\n '&::-webkit-scrollbar-thumb:hover': {\n backgroundColor: '$neutrals500',\n },\n '&::-webkit-scrollbar-track': {\n backgroundColor: '$neutrals300',\n },\n },\n});\nexport const globalFont = (fontFamily: string) =>\n globalCss({\n '@import': [\n \"url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap')\",\n \"url('https://fonts.cdnfonts.com/css/times-new-roman')\",\n ],\n [`.font_${fontFamily.replace(/ /g, '')} ._text`]: {\n fontFamily,\n },\n })();\n","import { useEffect, useRef } from 'react';\n\nexport default function usePrevious(value: string) {\n // The ref object is a generic container whose current property is mutable ...\n // ... and can hold any value, similar to an instance property on a class\n const ref = useRef<string>();\n // Store current value in ref\n useEffect(() => {\n ref.current = value;\n }, [value]); // Only re-run if value changes\n // Return previous value (happens before update in useEffect above)\n return ref.current;\n}\n","import { createTheme } from '@rango-dev/ui';\nimport { useState, useEffect, useLayoutEffect } from 'react';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { Colors } from '../types';\nimport { shadeColor } from '../utils/common';\nimport usePrevious from './usePrevious';\n\nexport function useTheme({\n primary = '#5FA425',\n background = '#fff',\n foreground = '#000',\n error = '#FF0000',\n warning = '#F5A623',\n success = '#0070F3',\n fontFamily = 'Robot',\n borderRadius = 5,\n}: Colors & { borderRadius?: number; fontFamily?: string }) {\n const theme = useSettingsStore.use.theme();\n const fetchMeta = useMetaStore.use.fetchMeta();\n const colors = {\n neutrals200: '#FAFAFA',\n neutrals300: '#EAEAEA',\n neutrals400: '#999999',\n neutrals500: '#888888',\n neutrals600: '#666666',\n neutrals700: '#444444',\n neutrals800: '#333333',\n neutrals900: '#111111',\n primary,\n primary100: shadeColor(primary, 15),\n primary200: shadeColor(primary, -10),\n primary300: shadeColor(primary, -15),\n primary400: shadeColor(primary, -20),\n primary500: shadeColor(primary, -25),\n primary600: shadeColor(primary, -30),\n primary700: shadeColor(primary, -35),\n primary800: shadeColor(primary, -40),\n primary900: shadeColor(primary, -45),\n background,\n foreground,\n error,\n error100: shadeColor(error, 50),\n error300: shadeColor(error, -10),\n error500: shadeColor(error, -20),\n error700: shadeColor(error, -30),\n warning,\n warning100: shadeColor(warning, 50),\n warning300: shadeColor(warning, -10),\n warning500: shadeColor(warning, -20),\n warning700: shadeColor(warning, -30),\n success,\n success100: shadeColor(success, 50),\n success300: shadeColor(success, -10),\n success500: shadeColor(success, -20),\n success700: shadeColor(success, -30),\n };\n\n const customeLightTheme = createTheme({\n colors,\n radii: {\n 5: `${borderRadius}px`,\n },\n });\n\n const customeDarkTheme = createTheme({\n colors: {\n ...colors,\n neutrals200: '#111111',\n neutrals300: '#333333',\n neutrals400: '#444444',\n neutrals500: '#666666',\n neutrals600: '#888888',\n neutrals700: '#999999',\n neutrals800: '#EAEAEA',\n neutrals900: '#FAFAFA',\n foreground: background,\n background: foreground,\n },\n radii: {\n 5: `${borderRadius}px`,\n },\n });\n const [OSTheme, setOSTheme] = useState(customeLightTheme);\n useEffect(() => {\n (async () => {\n await fetchMeta();\n })();\n\n const switchTheme = (event: MediaQueryListEvent) => {\n if (event.matches) setOSTheme(customeDarkTheme);\n else setOSTheme(customeLightTheme);\n };\n\n if (\n window.matchMedia &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ) {\n setOSTheme(customeDarkTheme);\n }\n\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .addEventListener('change', switchTheme);\n return () => {\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .removeEventListener('change', switchTheme);\n };\n }, []);\n\n const prevFont = usePrevious(fontFamily);\n\n useLayoutEffect(() => {\n const { classList } = document.body;\n\n if (prevFont) classList.remove(`font_${prevFont.replace(/ /g, '')}`);\n classList.add(`font_${fontFamily.replace(/ /g, '')}`);\n }, [fontFamily]);\n\n const getActiveTheme = () => {\n if (theme === 'auto') return OSTheme;\n else return theme === 'dark' ? customeDarkTheme : customeLightTheme;\n };\n\n return { activeTheme: getActiveTheme() };\n}\n","import { useTranslation } from 'react-i18next';\n\nexport default function useSelectLanguage() {\n const { i18n } = useTranslation();\n // @ts-ignore\n const currentLanguage = i18n?.language || 'en';\n const changeLanguage = (value: string) => {\n if (currentLanguage !== value) {\n // @ts-ignore\n i18n.changeLanguage(value);\n }\n };\n\n return { changeLanguage, currentLanguage };\n}\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport en from './languages/en.json';\nimport tr from './languages/tr.json';\nimport Backend from 'i18next-http-backend';\nimport LanguageDetector from 'i18next-browser-languagedetector';\n\nconst languages = ['en', 'tr'];\n\ni18n\n .use(Backend)\n // detect user language\n .use(LanguageDetector)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n .init({\n resources: {\n en: {\n translation: en,\n },\n tr: {\n translation: tr,\n },\n },\n fallbackLng: 'en',\n debug: true,\n whitelist: languages,\n });\n\nexport default i18n;","import React, { PropsWithChildren } from 'react';\nimport { Provider as ManagerProvider } from '@rango-dev/queue-manager-react';\nimport {\n swapQueueDef,\n SwapQueueContext,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport {\n convertEvmBlockchainMetaToEvmChainInfo,\n Network,\n WalletType,\n} from '@rango-dev/wallets-shared';\nimport { useMetaStore } from './store/meta';\nimport { useWalletsStore } from './store/wallets';\nimport { walletAndSupportedChainsNames } from './utils/wallets';\nimport { isEvmBlockchain } from 'rango-sdk';\n\nfunction QueueManager(props: PropsWithChildren<{}>) {\n const {\n providers,\n getSigners,\n state,\n connect,\n canSwitchNetworkTo,\n getWalletInfo,\n } = useWallets();\n\n const { blockchains } = useMetaStore.use.meta();\n const balances = useWalletsStore.use.balances();\n\n const wallets = {\n blockchains: balances.map((wallet) => ({\n accounts: [wallet],\n name: wallet.chain,\n })),\n };\n\n const switchNetwork = (wallet: WalletType, network: Network) => {\n if (!canSwitchNetworkTo(wallet, network)) {\n return undefined;\n }\n return connect(wallet, network);\n };\n\n // TODO: this code copy & pasted from rango, should be refactored.\n const allBlockchains = blockchains\n .filter((blockchain) => blockchain.enabled)\n .reduce(\n (blockchainsObj, blockchain) => (\n (blockchainsObj[blockchain.name] = blockchain), blockchainsObj\n ),\n {}\n );\n const evmBasedChains = blockchains.filter(isEvmBlockchain);\n const getSupportedChainNames = (type: WalletType) => {\n const { supportedChains } = getWalletInfo(type);\n return walletAndSupportedChainsNames(supportedChains);\n };\n const allProviders = providers();\n const context: SwapQueueContext = {\n meta: {\n blockchains: allBlockchains,\n evmBasedChains: evmBasedChains,\n evmNetworkChainInfo:\n convertEvmBlockchainMetaToEvmChainInfo(evmBasedChains),\n getSupportedChainNames,\n },\n getSigners,\n //todo: remove Network type\n //@ts-ignore\n wallets,\n providers: allProviders,\n switchNetwork,\n connect,\n state,\n notifier: (message) => {\n console.log('[notifier]', message);\n },\n };\n\n return (\n <ManagerProvider\n //@ts-ignore\n queuesDefs={[swapQueueDef]}\n context={context}\n onPersistedDataLoaded={(_manager) => {}}\n isPaused={false}\n >\n {props.children}\n </ManagerProvider>\n );\n}\n\nexport default QueueManager;\n","import { SwapContainer } from '@rango-dev/ui';\nimport React, { useEffect } from 'react';\nimport { AppRouter } from './components/AppRouter';\nimport { useMetaStore } from './store/meta';\nimport { Events, Provider } from '@rango-dev/wallets-core';\nimport { allProviders } from '@rango-dev/provider-all';\nimport { EventHandler } from '@rango-dev/wallets-core/dist/wallet';\nimport { Network } from '@rango-dev/wallets-shared';\nimport {\n prepareAccountsForWalletStore,\n walletAndSupportedChainsNames,\n} from './utils/wallets';\nimport { useWalletsStore } from './store/wallets';\nimport { Layout } from './components/Layout';\nimport { globalFont, globalStyles } from './globalStyles';\nimport { useTheme } from './hooks/useTheme';\nimport { isEvmBlockchain } from 'rango-sdk';\nimport { Configs } from './types';\nimport { useSettingsStore } from './store/settings';\nimport useSelectLanguage from './hooks/useSelectLanguage';\nimport './i18n';\nimport QueueManager from './QueueManager';\n\nexport type WidgetProps = {\n configs: Configs;\n};\n\nexport const SwapBox: React.FC<WidgetProps> = ({ configs }) => {\n globalStyles();\n globalFont(configs?.fontFamily || 'Roboto');\n\n const { activeTheme } = useTheme({\n ...configs.colors,\n borderRadius: configs?.borderRadius,\n fontFamily: configs?.fontFamily,\n });\n const { blockchains } = useMetaStore.use.meta();\n const disconnectWallet = useWalletsStore.use.disconnectWallet();\n const connectWallet = useWalletsStore.use.connectWallet();\n const setTheme = useSettingsStore.use.setTheme();\n const { changeLanguage } = useSelectLanguage();\n const clearConnectedWallet = useWalletsStore.use.clearConnectedWallet();\n\n const evmBasedChainNames = blockchains\n .filter(isEvmBlockchain)\n .map((chain) => chain.name);\n\n const onUpdateState: EventHandler = (\n type,\n event,\n value,\n _,\n supportedChains\n ) => {\n if (event === Events.ACCOUNTS) {\n if (value) {\n const supportedChainNames: Network[] | null =\n walletAndSupportedChainsNames(supportedChains);\n const data = prepareAccountsForWalletStore(\n type,\n value,\n evmBasedChainNames,\n supportedChainNames\n );\n connectWallet(data);\n } else {\n disconnectWallet(type);\n }\n }\n };\n let providers = allProviders();\n\n useEffect(() => {\n if (configs.theme !== 'auto') setTheme(configs.theme);\n }, [configs.theme]);\n\n useEffect(() => {\n const wallets = configs.wallets;\n clearConnectedWallet();\n providers =\n wallets === 'all'\n ? allProviders()\n : allProviders().filter((provider) => {\n const type = provider.config.type;\n return wallets.find((w) => w === type);\n });\n }, [configs?.wallets]);\n\n useEffect(() => {\n changeLanguage(configs?.languege);\n }, [configs?.languege]);\n\n return (\n <Provider\n allBlockChains={blockchains}\n providers={providers}\n onUpdateState={onUpdateState}\n >\n <div id=\"pageContainer\" className={activeTheme}>\n <QueueManager>\n <SwapContainer\n style={{\n width: configs?.width || 'auto',\n height: configs?.height || 'auto',\n }}\n >\n <AppRouter\n title={configs.title}\n titleSize={configs.titleSize}\n titleWeight={configs.titleWeight}\n >\n <Layout configs={configs} />\n </AppRouter>\n </SwapContainer>\n </QueueManager>\n </div>\n </Provider>\n );\n};\n"],"names":["navigationRoutes","home","fromChain","fromToken","toChain","toToken","settings","liquiditySources","swaps","wallets","confirmSwap","confirmWallets","swapDetails","ZERO","BigNumber","removeDuplicateFrom","array","Array","from","Set","areEqual","array1","array2","length","every","v","i","shadeColor","color","percent","R","parseInt","substring","G","B","Math","round","RR","toString","GG","BB","secondsToString","s","seconds","padStart","minutes","numberToString","number","minDecimals","maxDecimals","n","roundingMode","maxI","toFixed","eq","gte","toFormat","min","max","pow","isEqualTo","totalArrivalTime","data","result","reduce","a","b","estimatedTimeInSeconds","decimalNumber","parseFloat","getStateWallet","state","connected","WalletStatus","CONNECTED","connecting","CONNECTING","installed","NOT_INSTALLED","DISCONNECTED","getlistWallet","getState","getWalletInfo","list","excludedWallets","WalletType","UNKNOWN","TERRA_STATION","LEAP","filter","wallet","includes","map","type","name","img","image","installLink","showOnMobile","detectInstallLink","walletAndSupportedChainsNames","supportedChains","blockchainMeta","prepareAccountsForWalletStore","accounts","evmBasedChains","supportedChainNames","addAccount","network","address","newAccount","chain","walletType","push","forEach","account","readAccountAddress","hasLimitation","isSupported","isUnknown","Network","Unknown","notSupportedNetworkByWallet","isUknownAndEvmBased","isEvmAddress","isEvmBasedChain","evmChainsSupportedByWallet","toLowerCase","getRequiredChains","route","swap","currentStepFromBlockchain","blockchain","currentStepToBlockchain","to","lastAddedWallet","getSelectableWallets","selectedWallets","connectedWallets","selected","find","getBalanceFromWallet","balances","symbol","selectedChainBalances","balance","bl","sort","amount","isAccountAndBalanceMatched","makeBalanceFor","retrivedBalance","tokens","blockChain","explorerUrl","loading","error","tokenBalance","asset","ticker","rawAmount","decimal","decimals","shiftedBy","logo","usdPrice","getUsdPrice","resetBalanceState","calculateWalletUsdValue","uniqueAccountAddresses","uniqueBalane","acc","current","findIndex","modifiedWalletBlockchains","modifiedWalletBlockchain","has","add","accountAddress","total","flatMap","multipliedBy","plus","numberWithThousandSeperator","parts","split","replace","join","sortTokens","walletConnected","some","token","concat","isSecondaryCoin","tokenA","tokenB","usdValue","allTokens","t","toUpperCase","isExperimentalChain","blockchains","cosmosExperimentalChainInfo","getCosmosExperimentalChainInfo","Object","entries","_ref","isCosmosBlockchain","getKeplrCompatibleConnectedWallets","selectableWallets","connectedWalletTypes","KEPLR_COMPATIBLE_WALLETS","compatibleWallet","getTokensWithBalance","_ref2","otherProps","tokenAmount","tokenUsdValue","getSortedTokens","otherChainTokens","fromChainEqueulsToToChain","filteredTokens","tokensAreEqual","getDefaultToken","sortedTokens","otherToken","selectedToken","firstToken","secondToken","sortWalletsBasedOnState","Number","getOutputRatio","inputUsdValue","outputUsdValue","lte","div","minus","outputRatioHasWarning","outputRatio","hasLimitError","bestRoute","minimum","fromAmountMinValue","maximum","fromAmountMaxValue","isExclusive","fromAmountRestrictionType","fromAmount","gt","lt","LimitErrorMessage","fromAmountRangeError","recommendation","getSwapButtonState","loadingMetaStatus","highValueLoss","priceImpactCanNotBeComputed","needsToWarnEthOnPath","title","disabled","hasWarning","canComputePriceImpact","inputAmount","calculatePendingSwap","validateBalanceOrFee","meta","simulationResult","Error","creationTime","Date","getTime","finishTime","requestId","status","isPaused","extraMessage","extraMessageSeverity","extraMessageDetail","extraMessageErrorCode","networkStatusExtraMessage","networkStatusExtraMessageDetail","lastNotificationTime","steps","index","swapper","swappers","id","swapperId","swapperType","types","fromBlockchain","toBlockchain","fromSymbol","fromSymbolAddress","fromDecimals","fromAmountPrecision","fromLogo","toSymbol","toSymbolAddress","toDecimals","toLogo","startTransactionTime","feeInUsd","getUsdFeeOfStep","expectedOutputAmountHumanReadable","toAmount","outputAmount","networkStatus","executedTransactionId","externalTransactionId","trackingCode","cosmosTransaction","solanaTransaction","starknetTransaction","starknetApprovalTransaction","tronTransaction","tronApprovalTransaction","evmTransaction","evmApprovalTransaction","transferTransaction","diagnosisUrl","internalSteps","fromBlockchainLogo","toBlockchainLogo","swapperLogo","requiredWallets","step","totalFeeInUsd","fee","expenseType","unitPrice","getTotalFeeInUsd","totalFee","hasHighFee","getMinRequiredSlippage","slippages","slippage","recommendedSlippage","hasProperSlippage","userSlippage","minRequiredSlippage","createBestRouteRequestBody","disabledLiquiditySources","checkPrerequisites","selectedWalletsMap","selectedWallet","chainAndAccounts","connectedWallet","addresses","requestBody","swapperGroups","swappersGroupsExclude","getWalletsForNewSwap","getRouteOutputAmount","getPercentageChange","oldValue","newValue","isOutputAmountChangedALot","oldRoute","newRoute","oldOutputAmount","newOutputAmount","percentageChange","toNumber","getBalanceWarnings","validationStatus","walletsSortedByRequiredWallets","selectedWallet1","selectedWallet2","indexOf","getRequiredBalanceOfWallet","ok","currentAmount","requiredAmount","reason","warningMessage","searchParamsToToken","searchParams","symbolAndAddress","getBestRouteToTokenUsdPrice","isNumberOfSwapsChanged","route1","route2","route1Swaps","route2Swaps","isRouteSwappersUpdated","route1Swappers","route2Swappers","isRouteInternalCoinsUpdated","route1InternalCoins","route2InternalCoins","isRouteChanged","relatedFeeStatus","item","requiredAssets","isRouteParametersChanged","prevParams","currentParams","customSlippage","getBestRouteWithCalculatedFees","swapsWithFee","createSelectors","_store","store","use","k","keys","httpService","RangoClient","process","env","REACT_APP_API_KEY","SLIPPAGES","DEFAULT_SLIPPAGE","HIGH_SLIPPAGE","MAX_SLIPPAGE","MIN_SLIPPGAE","useMetaStore","create","set","popularTokens","loadingStatus","fetchMeta","response","getAllMetadata","chainThatHasTokenInMetaResponse","enabledChains","enabled","useSettingsStore","persist","subscribeWithSelector","infiniteApprove","theme","setSlippage","setCustomSlippage","toggleAllLiquiditySources","swappersGroup","swapperGroup","toggleInfiniteApprove","toggleLiquiditySource","liquiditySource","setTheme","useWalletsStore","connectWallet","getWalletsDetails","disconnectWallet","initSelectedWallets","requiredChains","useBestRouteStore","anyWalletSelected","firstWalletWithMatchedChain","setSelectedWallet","clearConnectedWallet","subscribe","setState","sourceTokens","destinationTokens","sourceTokensWithBalance","destinationTokensWithBalance","equalityFn","shallow","getUsdValue","setBestRoute","setFromChain","setDefaultToken","setFromToken","setToChain","setToToken","setInputAmount","bestRouteStore","settingsStore","abortController","fetchBestRoute","abort","AbortController","getBestRoute","signal","then","res","catch","code","message","bind","prevState","SearchParams","useUiStore","connectWalletsButtonDisabled","selectedSwapRequestId","toggleConnectWalletsButton","setSelectedSwap","UpdateUrl","firstRender","useRef","setSearchParams","useSearchParams","location","useLocation","firstRenderSearchParams","search","searchParamsRef","useEffect","params","createSearchParams","value","key","pathname","fromChainString","fromTokenString","toChainString","toTokenString","FROM_CHAIN","FROM_TOKEN","TO_CHAIN","TO_TOKEN","FROM_AMOUNT","get","ButtonsContainer","styled","display","HeaderButtons","props","onClickRefresh","navigate","useNavigate","React","Tooltip","content","Button","variant","onClick","RetryIcon","size","HistoryIcon","SettingsIcon","HeaderContainer","justifyContent","alignItems","width","padding","Header","titleSize","titleWeight","useTranslation","titleStyle","css","fontSize","fontWeight","Typography","className","toLocaleLowerCase","Box","flexDirection","Container","boxSizing","backgroundColor","borderRadius","StyledImage","maxHeight","Options","ImagePlaceholder","height","OutputContainer","flexGrow","border","position","paddingLeft","paddingRight","TokenInfo","tokenBalanceReal","ItemSuffix","style","InfoCircleIcon","AngleDownIcon","prefix","src","suffix","align","marginRight","displayName","TextField","autoFocus","placeholder","right","bottom","onChange","event","onAmountChange","target","undefined","paddingTop","Logo","fill","margin","StyledAnchor","textDecoration","BottomLogo","href","xmlns","viewBox","d","SwithFromAndTo","count","Footer","errorMessages","genericServerError","SwitchButtonContainer","top","BestRouteContainer","Alerts","Home","waningMessage","isRouterInContext","useInRouterContext","setCount","useState","fetchingBestRoute","bestRouteError","swithFromAndTo","prev","errorMessage","showBestRoute","outToInRatio","swapButtonState","highFee","VerticalSwapIcon","BestRoute","feeWarning","totalTime","Alert","Route","children","ref","AppRouter","Router","MemoryRouter","StyledButton","marginTop","ChangeSlippageButton","HighSlippageWarning","selectedSlippage","ConfirmSwapExtraMessages","highSlippage","useNavigateBack","navigateBackFrom","currentRoute","window","history","idx","ConfirmSwapErrorTypes","ConfirmSwapWarningTypes","MinRequiredSlippage","ConfirmSwapErrors","errors","NO_ROUTE","REQUEST_FAILED","ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS","INSUFFICIENT_SLIPPAGE","List","variants","showListStyle","true","ListItem","listStyleType","listStylePosition","Message","BalanceWarnings","messages","warning","ConfirmSwapWarnings","warnings","ROUTE_UPDATED","ROUTE_AND_OUTPUT_AMOUNT_UPDATED","ROUTE_SWAPPERS_UPDATED","ROUTE_COINS_UPDATED","INSUFFICIENT_BALANCE","useConfirmSwap","initialRoute","proceedAnywayRef","confiremedRouteRef","abortControllerRef","setLoading","setErrors","setWarnings","swapSettings","disabledSwappersGroups","newSwap","confiremedRoute","requestAmount","confirmSwapState","routeChanged","newRouteOutputUsdValue","balanceWarnings","enoughBalance","noErrors","noWarnings","ConfirmSwapPage","manager","useManager","showHighSlippageWarning","ConfirmSwap","onConfirm","onBack","extraMessages","confirmButtonTitle","confirmButtonDisabled","getPendingSwaps","getAll","q","storage","getStorage","HistoryPage","pendingSwaps","History","onSwapClick","LiquiditySourcePage","supportedSwappers","uniqueSwappersGroups","LiquiditySourcesSelector","toggleAll","SelectChainPage","BlockchainSelector","SelectTokenPage","supportedTokens","supportedSourceTokens","supportedToken","supportedDestinationTokens","console","log","TokenSelector","SettingsPage","supportedUniqueSwappersGroups","Settings","onSlippageChange","onLiquiditySourcesClick","selectedLiquiditySources","NaN","onCustomSlippageChange","minSlippage","maxSlippage","selectedTheme","onThemeChange","ListContainer","gap","gridTemplateColumns","alignContent","AlertContainer","paddingBottom","WalletsPage","supportedWallets","multiWallets","disconnect","connect","useWallets","values","sortedWallets","detectMobileScreens","walletErrorMessage","setWalletErrorMessage","onSelectWallet","w","WalletState","e","SecondaryPage","textField","Wallet","ConfirmWalletsPage","confirmDisabled","firstStep","lastStep","handleConnectChain","ConfirmWallets","useCopyToClipboard","resetInterval","isCopied","setCopied","handleCopy","useCallback","text","copy","timeout","setTimeout","clearTimeout","SwapDetailsPage","selectedSwap","onCancel","cancelSwap","SwapHistory","pendingSwap","onCopy","AppRoutes","configs","useRoutes","path","element","fromChains","toChains","fromTokens","toTokens","WalletImage","marginLeft","Layout","connectedWalletsImages","totalBalance","AddWalletIcon","flexContent","walletImage","globalStyles","globalCss","globalFont","fontFamily","usePrevious","useTheme","primary","background","foreground","success","colors","neutrals200","neutrals300","neutrals400","neutrals500","neutrals600","neutrals700","neutrals800","neutrals900","primary100","primary200","primary300","primary400","primary500","primary600","primary700","primary800","primary900","error100","error300","error500","error700","warning100","warning300","warning500","warning700","success100","success300","success500","success700","customeLightTheme","createTheme","radii","customeDarkTheme","OSTheme","setOSTheme","switchTheme","matches","matchMedia","addEventListener","removeEventListener","prevFont","useLayoutEffect","classList","document","body","remove","getActiveTheme","activeTheme","useSelectLanguage","i18n","currentLanguage","language","changeLanguage","languages","Backend","LanguageDetector","initReactI18next","init","resources","en","translation","tr","fallbackLng","debug","whitelist","QueueManager","providers","getSigners","canSwitchNetworkTo","switchNetwork","allBlockchains","blockchainsObj","isEvmBlockchain","getSupportedChainNames","allProviders","context","evmNetworkChainInfo","convertEvmBlockchainMetaToEvmChainInfo","notifier","ManagerProvider","queuesDefs","swapQueueDef","onPersistedDataLoaded","_manager","SwapBox","evmBasedChainNames","onUpdateState","_","Events","ACCOUNTS","provider","config","languege","Provider","allBlockChains","SwapContainer"],"mappings":"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"}
|