@rango-dev/widget-embedded 0.1.11-next.4 → 0.1.11-next.6
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/App.d.ts.map +1 -1
- package/dist/components/Layout.d.ts.map +1 -1
- package/dist/components/TokenInfo.d.ts.map +1 -1
- package/dist/components/TokenPreview.d.ts.map +1 -1
- package/dist/hooks/useTheme.d.ts.map +1 -1
- package/dist/widget-embedded.cjs.development.js +27 -24
- package/dist/widget-embedded.cjs.development.js.map +1 -1
- package/dist/widget-embedded.cjs.production.min.js +27 -24
- package/dist/widget-embedded.cjs.production.min.js.map +1 -1
- package/dist/widget-embedded.esm.js +28 -25
- package/dist/widget-embedded.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/App.tsx +7 -1
- package/src/components/HeaderButtons.tsx +1 -1
- package/src/components/Layout.tsx +5 -4
- package/src/components/TokenInfo.tsx +4 -8
- package/src/components/TokenPreview.tsx +3 -7
- package/src/hooks/useTheme.ts +6 -0
|
@@ -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/PercentageChange.tsx","../src/components/TokenInfo.tsx","../src/components/BottomLogo.tsx","../src/components/SwitchFromAndTo.tsx","../src/components/Footer.tsx","../src/constants/errors.ts","../src/components/HeaderButtons.tsx","../src/pages/Home.tsx","../src/components/AppRouter.tsx","../src/hooks/useNavigateBack.ts","../src/components/TokenPreview.tsx","../src/components/RoutesOverview.tsx","../src/types/routing.ts","../src/hooks/useConfirmSwap.ts","../src/components/ChangeSlippageButton.tsx","../src/components/warnings/MinRequiredSlippage.tsx","../src/components/ConfirmSwapErrors.tsx","../src/components/warnings/BalanceWarnings.tsx","../src/components/ConfirmSwapWarnings.tsx","../src/components/warnings/HighSlippageWarning.tsx","../src/components/warnings/ConfirmSwapExtraMessages.tsx","../src/pages/ConfirmSwapPage.tsx","../src/utils/queue.ts","../src/utils/date.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/hooks/useCopyToClipboard.ts","../src/utils/time.ts","../src/components/SwapDetailsPlaceholder.tsx","../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 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\nexport function debounce(fn: Function, time: number) {\n let timeoutId: ReturnType<typeof setTimeout> | null;\n return wrapper;\n function wrapper(...args: any) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = null;\n fn(...args);\n }, time);\n }\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(\n tokenA: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null,\n tokenB: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null\n) {\n return (\n tokenA?.blockchain === tokenB?.blockchain &&\n tokenA?.symbol === tokenB?.symbol &&\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(\n b.state === WalletStatus.DISCONNECTED ||\n b.state === WalletStatus.CONNECTING\n ) -\n Number(\n a.state === WalletStatus.DISCONNECTED ||\n a.state === WalletStatus.CONNECTING\n )\n );\n}\n","import BigNumber from 'bignumber.js';\nimport {\n BestRouteRequest,\n BestRouteResponse,\n RecommendedSlippage,\n SwapResult,\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 { ConvertedToken, SwapButtonState } from '../types';\nimport {\n PendingSwapNetworkStatus,\n PendingSwapStep,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\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 inputIsZero: 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 (inputIsZero) return { title: 'Enter an amount', disabled: true };\n else if (!bestRoute || !bestRoute.result)\n 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 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): string | null {\n const slippages = route.result?.swaps.map(\n (slippage) => slippage.recommendedSlippage\n );\n return (\n slippages\n ?.map((s) => s?.slippage || '0')\n ?.filter((s) => parseFloat(s) > 0)\n ?.sort((a, b) => parseFloat(b) - parseFloat(a))\n ?.find(() => true) || null\n );\n}\n\nexport function hasProperSlippage(\n userSlippage: string,\n minRequiredSlippage: string | null\n) {\n if (!minRequiredSlippage) return true;\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: string | 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 affiliateRef: string | null\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 filteredBlockchains = selectedWallets.map((wallet) => wallet.chain);\n\n const requestBody: BestRouteRequest = {\n amount: inputAmount.toString(),\n affiliateRef,\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 slippage: slippage.toString(),\n ...(checkPrerequisites && { blockchains: filteredBlockchains }),\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\nexport function calcOutputUsdValue(\n outputAmount?: string,\n tokenPrice?: number | null\n) {\n const amount = !!outputAmount ? new BigNumber(outputAmount) : ZERO;\n\n return amount.multipliedBy(tokenPrice || 0);\n}\n\nexport function isNetworkStatusInWarningState(\n pendingSwapStep: PendingSwapStep | null\n): boolean {\n return (\n !!pendingSwapStep &&\n pendingSwapStep.networkStatus !== null &&\n pendingSwapStep.networkStatus !== PendingSwapNetworkStatus.NetworkChanged\n );\n}\n\nexport function getSwapMessages(\n pendingSwap: PendingSwap,\n currentStep: PendingSwapStep | null\n): {\n shortMessage: string;\n detailedMessage: { content: string; long: boolean };\n} {\n const textForRemove = 'bellow button or';\n let message = pendingSwap.extraMessage;\n let detailedMessage = pendingSwap.extraMessageDetail;\n\n if (pendingSwap.networkStatusExtraMessageDetail?.includes(textForRemove)) {\n pendingSwap.networkStatusExtraMessageDetail =\n pendingSwap.networkStatusExtraMessageDetail.replace(textForRemove, '');\n }\n\n const networkWarningState = isNetworkStatusInWarningState(currentStep);\n\n if (networkWarningState) {\n message = pendingSwap.networkStatusExtraMessage || '';\n detailedMessage = pendingSwap.networkStatusExtraMessageDetail || '';\n switch (currentStep?.networkStatus) {\n case PendingSwapNetworkStatus.WaitingForConnectingWallet:\n message = message || 'Waiting for connecting wallet';\n break;\n case PendingSwapNetworkStatus.WaitingForQueue:\n message = message || 'Waiting for other running tasks to be finished';\n break;\n case PendingSwapNetworkStatus.WaitingForNetworkChange:\n message = message || 'Waiting for changing wallet network';\n break;\n }\n }\n detailedMessage = detailedMessage || '';\n message = message || '';\n const isRpc =\n message?.indexOf('code') !== -1 && message?.indexOf('reason') !== -1;\n\n return {\n shortMessage: message,\n detailedMessage: { content: detailedMessage, long: isRpc },\n };\n}\n\nexport function getLastConvertedTokenInFailedSwap(\n pendingSwap: PendingSwap\n): ConvertedToken {\n let resultToken: ConvertedToken = null;\n if (pendingSwap.status === 'failed') {\n const lastSuccessStep = pendingSwap.steps\n .slice()\n .reverse()\n .filter((step) => step.status === 'success')[0];\n\n if (lastSuccessStep) {\n resultToken = {\n blockchain: lastSuccessStep.toBlockchain,\n symbol: lastSuccessStep.toSymbol,\n outputAmount: lastSuccessStep.outputAmount,\n address: lastSuccessStep.toSymbolAddress,\n };\n }\n }\n return resultToken;\n}\n\nexport function shouldRetrySwap(pendingSwap: PendingSwap) {\n return (\n pendingSwap.status === 'failed' &&\n !!pendingSwap.finishTime &&\n new Date().getTime() - parseInt(pendingSwap.finishTime) < 4 * 3600 * 1000\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 { BestRouteEqualityParams } 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(params: BestRouteEqualityParams) {\n if (params.store === 'bestRoute') {\n const { prevState, currentState } = params;\n return (\n !!currentState.fromToken &&\n !!currentState.toToken &&\n (prevState.fromChain?.name !== currentState.fromChain?.name ||\n prevState.toChain?.name !== currentState.toChain?.name ||\n prevState.fromToken?.symbol !== currentState.fromToken?.symbol ||\n prevState.toToken?.symbol !== currentState.toToken?.symbol ||\n prevState.fromToken?.blockchain !== prevState.fromToken?.blockchain ||\n prevState.toToken?.blockchain !== currentState.toToken?.blockchain ||\n prevState.fromToken?.address !== currentState.fromToken?.address ||\n prevState.toToken?.address !== currentState.toToken?.address ||\n prevState.inputAmount !== currentState.inputAmount)\n );\n } else if (params.store === 'settings') {\n const { prevState, currentState } = params;\n return (\n prevState.slippage !== currentState.slippage ||\n prevState.customSlippage !== currentState.customSlippage ||\n prevState.disabledLiquiditySources?.length !==\n currentState.disabledLiquiditySources?.length ||\n prevState.infiniteApprove ||\n currentState.infiniteApprove\n );\n }\n return false;\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\n//todo: refactor bestRoute store and add loadingStatus\nexport const getBestRouteStatus = (loading: boolean, error: boolean) => {\n if (loading) return 'loading';\n if (error) return 'failed';\n else return 'success';\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 affiliateRef: string | null;\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 setAffiliateRef: (affiliateRef: string | null) => 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 affiliateRef: null,\n disabledLiquiditySources: [],\n theme: 'auto',\n setSlippage: (slippage) =>\n set(() => ({\n slippage: slippage,\n })),\n setCustomSlippage: (customSlippage) =>\n set(() => ({\n customSlippage: customSlippage,\n })),\n setAffiliateRef: (affiliateRef) =>\n set(() => ({\n affiliateRef,\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: 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\nexport const fetchingBalanceSelector = (state: WalletsStore) =>\n !!state.balances.find((wallet) => wallet.loading);\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 { calcOutputUsdValue, createBestRouteRequestBody } from '../utils/swap';\nimport { useMetaStore } from './meta';\nimport {\n getDefaultToken,\n getSortedTokens,\n tokensAreEqual,\n} from '../utils/wallets';\nimport { useWalletsStore } from './wallets';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset/dist/shared';\nimport { debounce } from '../utils/common';\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 retry: (pendingSwap: PendingSwap) => void;\n switchFromAndTo: () => 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 (!state.inputAmount || state.inputAmount === '0') return {};\n if (!!bestRoute) {\n outputAmount = !!bestRoute.result?.outputAmount\n ? new BigNumber(bestRoute.result?.outputAmount)\n : null;\n outputUsdValue = calcOutputUsdValue(\n bestRoute.result?.outputAmount,\n getBestRouteToTokenUsdPrice(bestRoute) || state.toToken?.usdPrice\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 retry: (pendingSwap) => {\n const { tokens, blockchains } = useMetaStore.getState().meta;\n const balances = useWalletsStore.getState().balances;\n const failedIndex =\n pendingSwap.status === 'failed'\n ? pendingSwap.steps.findIndex((s) => s.status === 'failed')\n : null;\n\n if (failedIndex === null || failedIndex < 0) return;\n\n const firstStep = pendingSwap.steps[0];\n const lastStep = pendingSwap.steps[pendingSwap.steps.length - 1];\n const fromChain =\n blockchains.find(\n (blockchain) => blockchain.name === firstStep.fromBlockchain\n ) || null;\n const toChain =\n blockchains.find(\n (blockchain) => blockchain.name === lastStep.toBlockchain\n ) || null;\n\n const fromToken = tokens.find((token) =>\n tokensAreEqual(token, {\n blockchain: firstStep.fromBlockchain,\n symbol: firstStep.fromSymbol,\n address: firstStep.fromSymbolAddress,\n })\n );\n\n const toToken = tokens.find((token) =>\n tokensAreEqual(token, {\n blockchain: lastStep.toBlockchain,\n symbol: lastStep.toSymbol,\n address: lastStep.toSymbolAddress,\n })\n );\n const sortedSourceTokens = getSortedTokens(\n fromChain,\n tokens,\n balances,\n []\n );\n const sortedDestinationTokens = getSortedTokens(\n toChain,\n tokens,\n balances,\n []\n );\n const inputAmount = pendingSwap.inputAmount;\n set({\n fromChain,\n fromToken,\n inputAmount,\n outputAmount: null,\n inputUsdValue: getUsdValue(fromToken || null, inputAmount),\n outputUsdValue: new BigNumber(0),\n toChain,\n toToken,\n bestRoute: null,\n loading: false,\n error: '',\n sourceTokens: sortedSourceTokens,\n destinationTokens: sortedDestinationTokens,\n });\n },\n switchFromAndTo: () =>\n set((state) => ({\n fromChain: state.toChain,\n fromToken: state.toToken,\n toChain: state.fromChain,\n toToken: state.fromToken,\n sourceTokens: state.destinationTokens,\n destinationTokens: state.sourceTokens,\n inputAmount: state.outputAmount?.toString() || '',\n inputUsdValue: getUsdValue(\n state.toToken,\n state.outputAmount?.toString() || ''\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, affiliateRef } =\n settingsStore.getState();\n if (!fromToken || !toToken || !inputAmount || inputAmount === '0') 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 affiliateRef\n );\n if (!bestRouteStore.getState().loading)\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 const debouncedFetchBestRoute = debounce(fetchBestRoute, 600);\n\n const bestRouteParamsListener = () => {\n const { fromToken, toToken, inputAmount, inputUsdValue } =\n useBestRouteStore.getState();\n if (!inputAmount || inputAmount === '0' || inputUsdValue.eq(0)) return;\n\n if (tokensAreEqual(fromToken, toToken))\n return bestRouteStore.setState({\n loading: false,\n bestRoute: null,\n outputAmount: new BigNumber(inputAmount),\n outputUsdValue: inputUsdValue,\n });\n\n if (!bestRouteStore.getState().loading)\n bestRouteStore.setState({\n loading: true,\n bestRoute: null,\n outputAmount: null,\n outputUsdValue: new BigNumber(0),\n });\n debouncedFetchBestRoute();\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 bestRouteParamsListener,\n {\n equalityFn: (prevState, currentState) => {\n if (\n isRouteParametersChanged({\n store: 'bestRoute',\n prevState,\n currentState,\n })\n )\n 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 infiniteApprove: state.infiniteApprove,\n }),\n bestRouteParamsListener,\n {\n equalityFn: (prevState, currentState) => {\n if (\n isRouteParametersChanged({\n store: 'settings',\n prevState,\n currentState,\n })\n )\n 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 currentPage: string;\n toggleConnectWalletsButton: () => void;\n setSelectedSwap: (requestId: string | null) => void;\n setCurrentPage: (path: string) => void;\n}\n\nexport const useUiStore = createSelectors(\n create<UiState>()((set) => ({\n connectWalletsButtonDisabled: false,\n selectedSwapRequestId: null,\n currentPage: '',\n toggleConnectWalletsButton: () =>\n set((state) => ({\n connectWalletsButtonDisabled: !state.connectWalletsButtonDisabled,\n })),\n setSelectedSwap: (requestId) => set({ selectedSwapRequestId: requestId }),\n setCurrentPage: (path) => set({ currentPage: path }),\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 location.pathname != navigationRoutes.confirmSwap\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 BigNumber from 'bignumber.js';\nimport React from 'react';\nimport { getPercentageChange } from '../utils/swap';\nimport { Typography } from '@rango-dev/ui';\nimport { numberToString } from '../utils/numbers';\n\ninterface PropTypes {\n inputUsdValue: BigNumber | null;\n outputUsdValue: BigNumber | null;\n}\n\nexport function PercentageChange(props: PropTypes) {\n const { inputUsdValue, outputUsdValue } = props;\n\n if (!inputUsdValue || !outputUsdValue || !outputUsdValue.gt(0)) return null;\n\n const percentageChange = getPercentageChange(\n inputUsdValue.toNumber(),\n outputUsdValue.toNumber()\n );\n\n const showPercentageChange = percentageChange?.lt(0);\n\n return (\n <>\n {showPercentageChange && (\n <Typography variant=\"caption\" color=\"$error500\">\n {`(${numberToString(percentageChange, 0, 2)}%)`}\n </Typography>\n )}\n </>\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';\nimport { Spacer } from '@rango-dev/ui';\nimport { PercentageChange } from './PercentageChange';\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 borderRadius: '$5',\n padding: '$8 $16 $16 $16',\n\n variants: {\n type: {\n filled: {\n backgroundColor: '$neutrals300',\n },\n outlined: {\n border: '1px solid $neutrals300',\n },\n },\n },\n\n defaultVariants: {\n type: 'filled',\n },\n\n '.head': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '32px',\n },\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$2 0',\n '.selectors': {\n width: '35%',\n\n '._text': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n },\n '.amount': {\n width: '30%',\n },\n },\n '.output-usd': {\n display: 'flex',\n div: {\n display: 'flex',\n paddingLeft: '$8',\n },\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\n '.balance': {\n display: 'flex',\n alignItems: 'center',\n },\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 windth: '100%',\n height: '$48',\n borderRadius: '$5',\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 <Container type={props.type === 'From' ? 'filled' : 'outlined'}>\n <div className=\"head\">\n <Typography variant=\"body2\" color=\"neutrals800\">\n {t(type)}\n </Typography>\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 <Typography variant=\"body3\" color=\"neutrals600\">{`${t(\n 'Balance'\n )}: ${tokenBalance} ${fromToken?.symbol || ''}`}</Typography>\n <Spacer size={4} />\n <Button type=\"primary\" variant=\"ghost\" size=\"compact\">\n {t('Max')}\n </Button>\n </div>\n </Options>\n ) : (\n <div className=\"output-usd\">\n <PercentageChange\n inputUsdValue={inputUsdValue}\n outputUsdValue={props.outputUsdValue}\n />\n <div>\n <Typography\n variant=\"caption\"\n color=\"neutrals600\"\n >{`$${numberToString(props.outputUsdValue)}`}</Typography>\n </div>\n </div>\n )}\n </div>\n <div className=\"form\">\n <Button\n className=\"selectors\"\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 >\n {loadingStatus === 'success' && chain\n ? chain.displayName\n : t('Chain')}\n </Button>\n <Spacer size={12} />\n <Button\n className=\"selectors\"\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 >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n <Spacer size={12} />\n <div className=\"amount\">\n {props.type === 'From' ? (\n <TextField\n type=\"number\"\n size=\"large\"\n autoFocus\n placeholder=\"0\"\n style={{\n position: 'relative',\n backgroundColor: '$background !important',\n }}\n suffix={\n <span\n style={{\n position: 'absolute',\n right: '4px',\n bottom: '2px',\n }}\n >\n <Typography\n variant=\"caption\"\n color=\"neutrals800\"\n >{`$${numberToString(inputUsdValue)}`}</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=\"h4\">\n {bestRoute\n ? `≈ ${numberToString(props.outputAmount)}`\n : inputAmount\n ? '?'\n : '0'}\n </Typography>\n </OutputContainer>\n )}\n </div>\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 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';\n\nconst ButtonsContainer = styled('div', {\n display: 'flex',\n});\n\ninterface PropTypes {\n onClickRefresh?: () => void;\n}\n\nexport function HeaderButtons(props: PropTypes) {\n const { onClickRefresh } = props;\n const navigate = useNavigate();\n\n return (\n <ButtonsContainer>\n <Tooltip content=\"Refresh\">\n <Button\n variant=\"ghost\"\n onClick={onClickRefresh}\n disabled={!onClickRefresh}\n >\n <RetryIcon size={24} />\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 {\n Alert,\n BestRoute,\n Button,\n styled,\n Typography,\n VerticalSwapIcon,\n Header,\n} from '@rango-dev/ui';\nimport React, { useEffect, useState } from 'react';\nimport { useInRouterContext, useNavigate } from 'react-router-dom';\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';\nimport BigNumber from 'bignumber.js';\nimport { HeaderButtons } from '../components/HeaderButtons';\nimport { useUiStore } from '../store/ui';\n\nconst Container = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst FromContainer = styled('div', {\n position: 'relative',\n paddingBottom: '$12',\n});\n\nconst SwitchButtonContainer = styled('div', {\n position: 'absolute',\n bottom: '-12px',\n left: '50%',\n transform: 'translate(-50%, 10%)',\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});\n\nexport function Home() {\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 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 const setCurrentPage = useUiStore.use.setCurrentPage();\n const switchFromAndTo = useBestRouteStore.use.switchFromAndTo();\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 inputIsZero = inputAmount === '0';\n const swapButtonState = getSwapButtonState(\n loadingMetaStatus,\n accounts,\n fetchingBestRoute,\n bestRoute,\n hasLimitError(bestRoute),\n highValueLoss,\n priceImpactCanNotBeComputed,\n needsToWarnEthOnPath,\n inputIsZero\n );\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n const highFee = hasHighFee(totalFeeInUsd);\n\n useEffect(() => {\n setCurrentPage(navigationRoutes.home);\n\n return setCurrentPage.bind(null, '');\n }, []);\n\n return (\n <Container>\n <Header\n title=\"SWAP\"\n suffix={\n <HeaderButtons\n onClickRefresh={!!bestRoute ? fetchBestRoute : undefined}\n />\n }\n />\n <FromContainer>\n <TokenInfo\n type=\"From\"\n chain={fromChain}\n token={fromToken}\n onAmountChange={setInputAmount}\n inputAmount={inputAmount}\n />\n <SwitchButtonContainer>\n <Button\n variant=\"ghost\"\n onClick={() => {\n switchFromAndTo();\n setCount((prev) => prev + 1);\n }}\n >\n <VerticalSwapIcon size={32} />\n {isRouterInContext && <SwithFromAndTo count={count} />}\n </Button>\n </SwitchButtonContainer>\n </FromContainer>\n <TokenInfo\n type=\"To\"\n chain={toChain}\n token={toToken}\n outputAmount={\n outputAmount ? new BigNumber(outputAmount) : new BigNumber(0)\n }\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 || hasLimitError(bestRoute)) && (\n <Alerts>\n {errorMessage && <Alert type=\"error\">{errorMessage}</Alert>}\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 </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.confirmSwap, { 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 { useQueueManager } from '@rango-dev/queue-manager-rango-preset';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { isEvmBlockchain } from 'rango-types';\nimport { UpdateUrl } from './UpdateUrl';\nimport { Home } from '../pages/Home';\nimport { useMetaStore } from '../store/meta';\n\nconst Route: React.FC = ({ children }: PropsWithChildren) => {\n const location = useLocation();\n const navigate = useNavigate();\n const ref = useRef(true);\n\n useEffect(() => {\n if (location.pathname === navigationRoutes.confirmSwap && ref.current)\n navigate(navigationRoutes.home + location.search, { state: 'redirect' });\n\n ref.current = false;\n }, []);\n\n if (location.pathname === navigationRoutes.confirmSwap && ref.current)\n return <Home />;\n\n return <> {children}</>;\n};\n\nexport function AppRouter({\n children,\n ...props\n}: PropsWithChildren & {\n lastConnectedWallet: string;\n disconnectedWallet: WalletType | undefined;\n clearDisconnectedWallet: () => void;\n}) {\n const isRouterInContext = useInRouterContext();\n const Router = isRouterInContext ? Route : MemoryRouter;\n const { blockchains } = useMetaStore.use.meta();\n\n const evmChains = blockchains.filter(isEvmBlockchain);\n\n useQueueManager({\n lastConnectedWallet: props.lastConnectedWallet,\n clearDisconnectedWallet: props.clearDisconnectedWallet,\n disconnectedWallet: props.disconnectedWallet,\n evmChains,\n notifier: () => {},\n });\n\n return (\n <>\n <Router {...props}>{children}</Router>\n {isRouterInContext && <UpdateUrl />}\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 (currentRoute === navigationRoutes.swapDetails)\n return navigate(navigationRoutes.swaps, { replace: true });\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.confirmSwap,\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 }\n };\n\n return { navigateBackFrom };\n}\n","import React, { ReactNode } from 'react';\nimport { Button, InfoCircleIcon, styled, Typography } from '@rango-dev/ui';\nimport { LoadingStatus } from '../store/meta';\nimport { useTranslation } from 'react-i18next';\nimport { Spacer } from '@rango-dev/ui';\nimport BigNumber from 'bignumber.js';\nimport { numberToString } from '../utils/numbers';\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 borderRadius: '$5',\n padding: '$8 $16 $16 $16',\n\n variants: {\n type: {\n filled: {\n backgroundColor: '$neutrals300',\n },\n outlined: {\n border: '1px solid $neutrals300',\n },\n },\n },\n\n defaultVariants: {\n type: 'filled',\n },\n\n '.head': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '32px',\n '.usd-value': {\n paddingLeft: '$8',\n },\n },\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$2 0',\n '.selectors': {\n width: '35%',\n\n '._text': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n },\n '.amount': {\n width: '30%',\n },\n },\n});\n\nconst StyledImage = styled('img', {\n width: '$24',\n maxHeight: '$24',\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 windth: '100%',\n height: '$48',\n borderRadius: '$5',\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\ninterface PropTypes {\n label: string;\n amount: string;\n usdValue?: BigNumber;\n loadingStatus: LoadingStatus;\n chain: {\n displayName: string;\n logo: string;\n };\n token: {\n symbol: string;\n image: string;\n };\n percentageChange?: ReactNode;\n}\n\nexport function TokenPreview(props: PropTypes) {\n const { chain, token, loadingStatus, percentageChange } = props;\n const { t } = useTranslation();\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 </div>\n );\n\n return (\n <Box>\n <Container type={'outlined'}>\n <div className=\"head\">\n <Typography variant=\"body2\" color=\"neutrals800\">\n {props.label}\n </Typography>\n <div>\n {percentageChange}\n {props.usdValue && (\n <Typography\n variant=\"caption\"\n color=\"neutrals600\"\n className=\"usd-value\"\n >{`$${numberToString(props.usdValue)}`}</Typography>\n )}\n </div>\n </div>\n <div className=\"form\">\n <Button\n className=\"selectors\"\n variant=\"outlined\"\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 >\n {loadingStatus === 'success' && chain\n ? chain.displayName\n : t('Chain')}\n </Button>\n <Spacer size={12} />\n <Button\n className=\"selectors\"\n variant=\"outlined\"\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 >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n <Spacer size={12} />\n <div className=\"amount\">\n <OutputContainer>\n <Typography variant=\"h4\">{props.amount}</Typography>\n </OutputContainer>\n </div>\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled } from '@rango-dev/ui';\nimport { BestRouteResponse } from 'rango-sdk';\nimport { ChevronRightIcon } from '@rango-dev/ui';\nimport { GasIcon } from '@rango-dev/ui';\nimport { Spacer } from '@rango-dev/ui';\n\nexport const Container = styled('div', {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '$8',\n borderRadius: '$5',\n backgroundColor: '$neutrals300',\n color: '$neutrals800',\n fontSize: '$12',\n\n '.routes': {\n display: 'flex',\n alignItems: 'center',\n },\n '.fee': {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\ninterface PropTypes {\n routes: BestRouteResponse | null;\n totalFee?: string;\n}\nfunction RoutesOverview(props: PropTypes) {\n if (!props.routes) return null;\n\n const swaps = props.routes.result?.swaps;\n return (\n <Container>\n <div className=\"routes\">\n {swaps?.map((swap, idx) => {\n const isLast = idx + 1 == swaps.length;\n return (\n <>\n <div className=\"route\">{swap.from.symbol}</div>\n <ChevronRightIcon size={12} />\n {isLast ? <div className=\"route\">{swap.to.symbol}</div> : null}\n </>\n );\n })}\n </div>\n {props.totalFee ? (\n <div className=\"fee\">\n <GasIcon size={12} />\n <Spacer size={4} />${props.totalFee}\n </div>\n ) : null}\n </Container>\n );\n}\n\nexport default RoutesOverview;\n","import { RouteState } from '../store/bestRoute';\nimport { SettingsState } from '../store/settings';\n\ninterface BestRouteStoreParams {\n fromChain?: RouteState['fromChain'];\n toChain?: RouteState['toChain'];\n fromToken?: RouteState['fromToken'];\n toToken?: RouteState['toToken'];\n inputAmount?: RouteState['inputAmount'];\n}\n\ninterface SettingsStoreParams {\n slippage?: SettingsState['slippage'];\n customSlippage?: SettingsState['customSlippage'];\n disabledLiquiditySources?: SettingsState['disabledLiquiditySources'];\n infiniteApprove?: SettingsState['infiniteApprove'];\n}\n\nexport type BestRouteEqualityParams =\n | {\n store: 'bestRoute';\n prevState: BestRouteStoreParams;\n currentState: BestRouteStoreParams;\n }\n | {\n store: 'settings';\n prevState: SettingsStoreParams;\n currentState: SettingsStoreParams;\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: string | 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 { 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 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';\nimport { calculatePendingSwap } from '@rango-dev/queue-manager-rango-preset';\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 affiliateRef = useSettingsStore.use.affiliateRef();\n\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 affiliateRef\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 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 { Button } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function ChangeSlippageButton() {\n const navigate = useNavigate();\n\n return (\n <Button\n type=\"primary\"\n variant=\"outlined\"\n size=\"small\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n Change Slippage\n </Button>\n );\n}\n","import { Spacer, Typography, styled } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n minRequiredSlippage: string | null;\n}\n\nconst StyledMessage = styled(Typography, {\n color: '$error500 !important',\n});\n\nexport function MinRequiredSlippage({ minRequiredSlippage }: PropTypes) {\n return (\n <StyledMessage variant=\"body2\">\n We recommend you to increase slippage to at least \n {minRequiredSlippage}\n for this route.\n <Spacer size={8} direction=\"vertical\" />\n <ChangeSlippageButton />\n </StyledMessage>\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 color: '$warning500 !important',\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 { Alert } 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\" footer={<ChangeSlippageButton />}>\n Caution, your slippage is high (=\n {selectedSlippage}). Your trade may be front run.\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 React, { useEffect } from 'react';\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 { getTotalFeeInUsd, requiredWallets } from '../utils/swap';\nimport { decimalNumber, numberToString } from '../utils/numbers';\nimport { useMetaStore } from '../store/meta';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { TokenPreview } from '../components/TokenPreview';\n// @ts-ignore // TODO: fix error in tsc build\nimport { t } from 'i18next';\nimport { Spacer, ConfirmSwap } from '@rango-dev/ui';\nimport RoutesOverview from '../components/RoutesOverview';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useConfirmSwap } from '../hooks/useConfirmSwap';\nimport { useSettingsStore } from '../store/settings';\nimport { useUiStore } from '../store/ui';\nimport { ConfirmSwapErrorTypes } from '../types';\nimport { ConfirmSwapErrors } from '../components/ConfirmSwapErrors';\nimport { ConfirmSwapWarnings } from '../components/ConfirmSwapWarnings';\nimport { ConfirmSwapExtraMessages } from '../components/warnings/ConfirmSwapExtraMessages';\nimport { getBestRouteStatus } from '../utils/routing';\nimport { PercentageChange } from '../components/PercentageChange';\n\nexport function ConfirmSwapPage() {\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const fetchingBestRouteError = useBestRouteStore.use.error();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const { blockchains, tokens } = 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 const slippage = useSettingsStore.use.slippage();\n const customSlippage = useSettingsStore.use.customSlippage();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n\n const bestRouteloadingStatus = getBestRouteStatus(\n fetchingBestRoute,\n !!fetchingBestRouteError\n );\n\n const { manager } = useManager();\n const { loading, errors, warnings, confirmSwap } = useConfirmSwap();\n\n const selectedSlippage = customSlippage || slippage;\n\n const showHighSlippageWarning = !errors.find(\n (error) => error.type === ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n );\n\n const { getWalletInfo, connect } = useWallets();\n const confirmDisabled =\n fetchingBestRoute ||\n !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 const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n return (\n <ConfirmSwap\n // @ts-ignore\n requiredWallets={getRequiredChains(bestRoute)}\n selectableWallets={selectableWallets}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmSwap)}\n onConfirm={() => {\n confirmSwap?.().then((swap) => {\n if (swap) {\n manager?.create(\n 'swap',\n { swapDetails: swap },\n // @ts-ignore\n { id: swap.requestId }\n );\n setSelectedSwap(swap.requestId);\n navigate(navigationRoutes.swaps + `/${swap.requestId}`, {\n replace: true,\n });\n }\n });\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 previewInputs={\n <>\n <TokenPreview\n chain={{\n displayName: firstStep?.from.blockchain || '',\n logo: firstStep?.from.blockchainLogo || '',\n }}\n token={{\n symbol: firstStep?.from.symbol || '',\n image: firstStep?.from.logo || '',\n }}\n usdValue={inputUsdValue}\n amount={fromAmount}\n label={t('From')}\n loadingStatus={bestRouteloadingStatus}\n />\n <Spacer size={12} direction=\"vertical\" />\n <TokenPreview\n chain={{\n displayName: lastStep?.to.blockchain || '',\n logo: lastStep?.to.blockchainLogo || '',\n }}\n token={{\n symbol: lastStep?.to.symbol || '',\n image: lastStep?.to.logo || '',\n }}\n usdValue={outputUsdValue}\n amount={toAmount}\n label={t('To')}\n loadingStatus={bestRouteloadingStatus}\n percentageChange={\n <PercentageChange\n inputUsdValue={inputUsdValue}\n outputUsdValue={outputUsdValue}\n />\n }\n />\n </>\n }\n previewRoutes={\n <RoutesOverview\n routes={bestRoute}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n />\n }\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 />\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 { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\nimport dayjs from 'dayjs';\nimport { GroupBy } from '@rango-dev/ui';\n\nexport const groupSwapsByDate: GroupBy = swaps => {\n const output: Map<\n string,\n {\n title: string;\n swaps: PendingSwap[];\n }\n > = new Map([\n [\n 'today',\n {\n title: 'Today',\n swaps: [],\n },\n ],\n [\n 'week',\n {\n title: 'This week',\n swaps: [],\n },\n ],\n [\n 'month',\n {\n title: 'This month',\n swaps: [],\n },\n ],\n [\n 'year',\n {\n title: 'This year',\n swaps: [],\n },\n ],\n [\n 'history',\n {\n title: 'History',\n swaps: [],\n },\n ],\n ]);\n\n const now = dayjs();\n swaps.forEach(swap => {\n const swapDate = dayjs(Number(swap.creationTime));\n if (now.isSame(swapDate, 'day')) output.get('today')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'week')) output.get('week')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'month'))\n output.get('month')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'year')) output.get('year')?.swaps.push(swap);\n else output.get('history')?.swaps.push(swap);\n });\n\n return Array.from(output.values());\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';\nimport { groupSwapsByDate } from '../utils/date';\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 list={pendingSwaps}\n groupBy={groupSwapsByDate}\n onSwapClick={requestId => {\n setSelectedSwap(requestId);\n navigate(navigationRoutes.swaps + `/${requestId}`, { replace: true });\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 { removeDuplicateFrom } from '../utils/common';\ninterface PropTypes {\n supportedSwappers?: string[];\n}\nexport function LiquiditySourcePage({ supportedSwappers }: PropTypes) {\n const swappers = useMetaStore.use.meta().swappers;\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\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\n ? uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter((s) => s === item.title).length > 0\n )\n : uniqueSwappersGroups\n }\n onChange={(liquiditySource) =>\n toggleLiquiditySource(liquiditySource.title)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.liquiditySources)}\n loadingStatus={loadingMetaStatus}\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';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedChains?: string[];\n}\n\nexport function SelectChainPage(props: PropTypes) {\n const { type, supportedChains } = props;\n const blockchains = supportedChains\n ? useMetaStore.use\n .meta()\n .blockchains.filter((chain) => supportedChains.includes(chain.name))\n : useMetaStore.use.meta().blockchains;\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 { Asset, Token } from 'rango-sdk';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { tokensAreEqual } from '../utils/wallets';\nimport { useMetaStore } from '../store/meta';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedTokens?: Asset[];\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 = supportedTokens\n ? sourceTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n )\n : sourceTokens;\n\n const supportedDestinationTokens = supportedTokens\n ? destinationTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n )\n : destinationTokens;\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 const loadingMetaStatus = useMetaStore.use.loadingStatus();\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 loadingStatus={loadingMetaStatus}\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 {\n MAX_SLIPPAGE,\n MIN_SLIPPGAE,\n SLIPPAGES,\n} from '../constants/swapSettings';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\ninterface PropTypes {\n supportedSwappers?: string[];\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 loadingMetaStatus = useMetaStore.use.loadingStatus();\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 supportedSwappers &&\n uniqueSwappersGroups.filter(\n (item) => supportedSwappers.filter((s) => s === item.title).length > 0\n );\n\n const supportedUniqueSwappersGroups = supportedSwappers\n ? uniqueSwappersGroups.filter(\n (item) => supportedSwappers.filter((s) => s === item.title).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 loadingStatus={loadingMetaStatus}\n />\n );\n}\n","import {\n Alert,\n SecondaryPage,\n styled,\n Wallet,\n WalletState,\n WalletInfo,\n} from '@rango-dev/ui';\nimport React, { useEffect, useRef, 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';\nimport { useMetaStore } from '../store/meta';\nimport { Spinner } from '@rango-dev/ui';\nimport { LoadingFailedAlert } from '@rango-dev/ui';\n\ninterface PropTypes {\n supportedWallets?: WalletType[];\n multiWallets: boolean;\n}\n\nconst ListContainer = styled('div', {\n display: 'grid',\n gap: '.5rem',\n gridTemplateColumns: ' repeat(2, minmax(0, 1fr))',\n alignContent: 'baseline',\n padding: '0.5rem',\n overflowY: 'auto',\n});\n\nexport const LoaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n position: 'absolute',\n top: '50%',\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 || Object.values(WalletType)\n );\n const walletsRef = useRef<WalletInfo[]>();\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 loadingMetaStatus = useMetaStore.use.loadingStatus();\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 const disconnectConnectingWallets = () => {\n const connectingWallets =\n walletsRef.current?.filter(\n (wallet) => wallet.state === WalletState.CONNECTING\n ) || [];\n for (const wallet of connectingWallets) {\n disconnect(wallet.type);\n }\n };\n useEffect(() => {\n toggleConnectWalletsButton();\n return () => {\n disconnectConnectingWallets();\n toggleConnectWalletsButton();\n };\n }, []);\n\n useEffect(() => {\n walletsRef.current = wallets;\n }, [wallets]);\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\">{walletErrorMessage}</Alert>\n </AlertContainer>\n )}\n {loadingMetaStatus === 'loading' && (\n <LoaderContainer className=\"loader\">\n <Spinner size={24} />\n </LoaderContainer>\n )}\n {loadingMetaStatus === 'failed' && <LoadingFailedAlert />}\n <ListContainer>\n {loadingMetaStatus === 'success' &&\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 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 { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\n\nexport function timeSince(timeMillis: number): string {\n const seconds = Math.floor((new Date().getTime() - timeMillis) / 1000);\n let intervalType: string;\n\n let interval = Math.floor(seconds / 31536000);\n if (interval >= 1) {\n intervalType = 'year';\n } else {\n interval = Math.floor(seconds / 2592000);\n if (interval >= 1) {\n intervalType = 'month';\n } else {\n interval = Math.floor(seconds / 86400);\n if (interval >= 1) {\n intervalType = 'day';\n } else {\n interval = Math.floor(seconds / 3600);\n if (interval >= 1) {\n intervalType = 'hour';\n } else {\n interval = Math.floor(seconds / 60);\n if (interval >= 1) {\n intervalType = 'minute';\n } else {\n interval = seconds;\n intervalType = 'second';\n }\n }\n }\n }\n }\n\n if (interval > 1 || interval === 0) {\n intervalType += 's';\n }\n\n return interval + ' ' + intervalType;\n}\n\nexport function getSwapDate(pendingSwap: PendingSwap) {\n return pendingSwap.finishTime\n ? `Finished ${timeSince(parseInt(pendingSwap.finishTime))} ago @ ${new Date(\n parseInt(pendingSwap.finishTime)\n ).toLocaleString()}`\n : `Started ${timeSince(\n parseInt(pendingSwap.creationTime)\n )} ago @ ${new Date(\n parseInt(pendingSwap.creationTime)\n ).toLocaleString()}`;\n}\n","import React from 'react';\nimport { SecondaryPage, Spinner, Alert, styled } from '@rango-dev/ui';\nimport { LoaderContainer } from '../pages/WalletsPage';\n\nconst PlaceholderContainer = styled('div', { height: '450px' });\n\ninterface PropTypes {\n requestId: string;\n loading: boolean;\n onBack: () => void;\n}\n\nexport function SwapDetailsPlaceholder(props: PropTypes) {\n const { requestId, loading, onBack } = props;\n\n return (\n <SecondaryPage title=\"Swap Details\" textField={false} onBack={onBack}>\n <PlaceholderContainer>\n {loading ? (\n <LoaderContainer>\n <Spinner size={24} />\n </LoaderContainer>\n ) : (\n <Alert\n type=\"secondary\"\n title={`Swap with request ID = ${requestId} not found.`}\n />\n )}\n </PlaceholderContainer>\n </SecondaryPage>\n );\n}\n","import React, { useEffect, useState } 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, Spacer } from '@rango-dev/ui';\nimport { useUiStore } from '../store/ui';\nimport {\n cancelSwap,\n PendingSwapNetworkStatus,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport {\n getCurrentBlockchainOfOrNull,\n getCurrentStep,\n getRelatedWalletOrNull,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { getSwapDate } from '../utils/time';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport {\n getLastConvertedTokenInFailedSwap,\n getSwapMessages,\n isNetworkStatusInWarningState,\n shouldRetrySwap,\n} from '../utils/swap';\nimport { TokenPreview } from '../components/TokenPreview';\nimport { numberToString } from '../utils/numbers';\n//@ts-ignore\nimport { t } from 'i18next';\nimport { SwapDetailsPlaceholder } from '../components/SwapDetailsPlaceholder';\n\nexport function SwapDetailsPage() {\n const selectedSwapRequestId = useUiStore.use.selectedSwapRequestId();\n const { canSwitchNetworkTo, connect } = useWallets();\n const retry = useBestRouteStore.use.retry();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const [isCopied, handleCopy] = useCopyToClipboard(2000);\n const { manager } = useManager();\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n setTimeout(() => {\n setLoading(false);\n }, 5000);\n }, []);\n\n const pendingSwaps = getPendingSwaps(manager);\n const selectedSwap = pendingSwaps.find(\n ({ swap }) => swap.requestId === selectedSwapRequestId\n );\n\n const onCancel = () => {\n const swap = manager?.get(selectedSwap?.id!);\n if (swap) cancelSwap(swap);\n };\n const swap = selectedSwap?.swap;\n\n if (!swap)\n return (\n <SwapDetailsPlaceholder\n requestId={selectedSwapRequestId || ''}\n loading={loading}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n />\n );\n\n const firstStep = swap.steps[0];\n const lastStep = swap.steps[swap.steps.length - 1];\n const fromAmount = numberToString(swap.inputAmount);\n const toAmount = numberToString(swap.simulationResult.outputAmount);\n\n const currentStep = getCurrentStep(swap);\n\n const currentStepBlockchain = currentStep\n ? getCurrentBlockchainOfOrNull(swap, currentStep)\n : null;\n const currentStepWallet = currentStep\n ? getRelatedWalletOrNull(swap, currentStep)\n : null;\n const currentStepNetworkStatus = currentStep?.networkStatus;\n\n const swapMessages = getSwapMessages(swap, currentStep);\n\n const networkWarningState = isNetworkStatusInWarningState(currentStep);\n\n const swapDate = getSwapDate(swap);\n\n const shouldRetry = shouldRetrySwap(swap);\n\n const switchNetwork =\n !!currentStepBlockchain &&\n !!currentStepWallet?.walletType &&\n currentStepNetworkStatus ===\n PendingSwapNetworkStatus.WaitingForNetworkChange &&\n canSwitchNetworkTo(currentStepWallet?.walletType, currentStepBlockchain)\n ? connect.bind(null, currentStepWallet.walletType, currentStepBlockchain)\n : undefined;\n\n const lastConvertedTokenInFailedSwap =\n getLastConvertedTokenInFailedSwap(swap);\n\n return (\n <SwapHistory\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n previewInputs={\n <>\n <TokenPreview\n chain={{\n displayName: firstStep?.fromBlockchain || '',\n // @ts-ignore\n logo: firstStep?.fromBlockchainLogo || '',\n }}\n token={{\n symbol: firstStep?.fromSymbol || '',\n image: firstStep?.fromLogo || '',\n }}\n amount={fromAmount}\n label={t('From')}\n loadingStatus={'success'}\n />\n <Spacer size={12} direction=\"vertical\" />\n <TokenPreview\n chain={{\n displayName: lastStep?.toBlockchain || '',\n //@ts-ignore\n logo: lastStep?.toBlockchainLogo || '',\n }}\n token={{\n symbol: lastStep?.toSymbol || '',\n image: lastStep?.toLogo || '',\n }}\n amount={toAmount}\n label={t('To')}\n loadingStatus={'success'}\n />\n </>\n }\n //todo: move PendingSwap type to rango-types\n pendingSwap={swap}\n onCopy={handleCopy}\n isCopied={isCopied}\n onCancel={onCancel}\n shortMessage={swapMessages.shortMessage}\n detailedMessage={swapMessages.detailedMessage}\n currentStepBlockchain={currentStepBlockchain || ''}\n switchNetwork={switchNetwork}\n type={\n networkWarningState ? 'warning' : swap.extraMessageSeverity || undefined\n }\n date={swapDate}\n {...(shouldRetry && {\n onRetry: () => {\n retry(swap);\n setTimeout(() => {\n navigate(navigationRoutes.home);\n }, 0);\n },\n })}\n {...(lastConvertedTokenInFailedSwap && {\n lastConvertedTokenInFailedSwap: {\n blockchain: lastConvertedTokenInFailedSwap.blockchain,\n outputAmount: lastConvertedTokenInFailedSwap.outputAmount || '',\n symbol: lastConvertedTokenInFailedSwap.symbol,\n },\n })}\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 { SwapDetailsPage } from '../pages/SwapDetailsPage';\nimport { WidgetConfig } from '../types';\n\nconst getAbsolutePath = (path: string) => path.replace('/', '');\n\ninterface PropTypes {\n config?: WidgetConfig;\n}\n\nexport function AppRoutes(props: PropTypes) {\n const { config } = props;\n\n return useRoutes([\n {\n path: getAbsolutePath(navigationRoutes.home),\n element: <Home />,\n },\n {\n path: getAbsolutePath(navigationRoutes.fromChain),\n element: (\n <SelectChainPage\n type=\"from\"\n supportedChains={config?.from?.blockchains}\n />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.toChain),\n element: (\n <SelectChainPage type=\"to\" supportedChains={config?.to?.blockchains} />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.fromToken),\n element: (\n <SelectTokenPage type=\"from\" supportedTokens={config?.from?.tokens} />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.toToken),\n element: (\n <SelectTokenPage type=\"to\" supportedTokens={config?.to?.tokens} />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.settings),\n element: <SettingsPage supportedSwappers={config?.liquiditySources} />,\n },\n {\n path: getAbsolutePath(navigationRoutes.liquiditySources),\n element: (\n <LiquiditySourcePage supportedSwappers={config?.liquiditySources} />\n ),\n },\n { path: getAbsolutePath(navigationRoutes.swaps), element: <HistoryPage /> },\n {\n path: navigationRoutes.swapDetails,\n element: <SwapDetailsPage />,\n },\n {\n path: getAbsolutePath(navigationRoutes.wallets),\n element: (\n <WalletsPage\n supportedWallets={config?.wallets}\n multiWallets={\n typeof config?.multiWallets === 'undefined'\n ? true\n : config.multiWallets\n }\n />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.confirmSwap),\n element: <ConfirmSwapPage />,\n },\n ]);\n}\n","import {\n Button,\n AddWalletIcon,\n Typography,\n styled,\n Spinner,\n} 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 { fetchingBalanceSelector, useWalletsStore } from '../store/wallets';\nimport {\n calculateWalletUsdValue,\n getSelectableWallets,\n tokensAreEqual,\n} from '../utils/wallets';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { WidgetConfig } from '../types';\nimport { useTranslation } from 'react-i18next';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\n\nconst Header = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n '.balance': {\n display: 'flex',\n },\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 config?: WidgetConfig;\n};\n\nexport function Layout({ config }: 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 const { blockchains, tokens } = useMetaStore.use.meta();\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 setAffiliateRef = useSettingsStore.use.setAffiliateRef();\n\n const totalBalance = calculateWalletUsdValue(balances);\n const connectWalletsButtonDisabled =\n useUiStore.use.connectWalletsButtonDisabled();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const fetchingBalance = useWalletsStore(fetchingBalanceSelector);\n\n const { t } = useTranslation();\n useEffect(() => {\n const chain = blockchains.find(\n (chain) => chain.name === config?.to?.blockchain\n );\n const token = tokens.find((t) =>\n tokensAreEqual(t, config?.to?.token || null)\n );\n setToChain(chain || null);\n setToToken(token || null);\n }, [config?.to?.token, config?.to?.blockchain]);\n\n useEffect(() => {\n setInputAmount(config?.amount?.toString() || '');\n }, [config?.amount]);\n\n useEffect(() => {\n const chain = blockchains.find(\n (chain) => chain.name === config?.from?.blockchain\n );\n const token = tokens.find((t) =>\n tokensAreEqual(t, config?.from?.token || null)\n );\n\n setFromChain(chain || null);\n setFromToken(token || null);\n }, [config?.from?.token, config?.from?.blockchain]);\n\n useEffect(() => {\n setAffiliateRef(config?.affiliateRef || null);\n }, [config?.affiliateRef]);\n return (\n <>\n <Header>\n <Button\n size=\"small\"\n suffix={<AddWalletIcon size={20} />}\n variant=\"ghost\"\n flexContent\n loading={loadingMetaStatus === 'loading'}\n disabled={loadingMetaStatus === 'failed'}\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 <div className=\"balance\">\n <Typography variant=\"body2\">\n {!accounts?.length\n ? t('Connect Wallet')\n : `$${totalBalance || 0}`}\n </Typography>\n {fetchingBalance && <Spinner />}\n </div>\n </Button>\n </Header>\n <AppRoutes config={config} />\n </>\n );\n}\n","import { globalCss } from '@rango-dev/ui';\n\nexport const globalStyles = globalCss({\n '*': {\n '&::-webkit-scrollbar': { width: '$8', height: '$8' },\n '&::-webkit-scrollbar-thumb': {\n backgroundColor: '$neutrals400',\n borderRadius: '$10',\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 body: {\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 { Theme } from '../types';\nimport { shadeColor } from '../utils/common';\nimport usePrevious from './usePrevious';\n\nexport function useTheme({\n colors: themeColors,\n fontFamily = 'Robot',\n borderRadius = 8,\n mode = 'auto',\n}: Theme) {\n const theme = useSettingsStore.use.theme();\n const fetchMeta = useMetaStore.use.fetchMeta();\n const setTheme = useSettingsStore.use.setTheme();\n\n const primary = themeColors?.primary || '#5FA425',\n background = themeColors?.background || '#fff',\n foreground = themeColors?.foreground || '#000',\n error = themeColors?.error || '#FF0000',\n warning = themeColors?.warning || '#F5A623',\n success = themeColors?.success || '#0070F3';\n const colors = {\n neutrals200: '#FAFAFA',\n neutrals300: '#f2f2f2',\n neutrals400: '#dedede',\n neutrals500: '#cccccc',\n neutrals600: '#acacac',\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: '#acacac',\n neutrals600: '#cccccc',\n neutrals700: '#dedede',\n neutrals800: '#f2f2f2',\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 useEffect(() => {\n if (mode !== 'auto') setTheme(mode);\n }, [mode]);\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 checkWaitingForNetworkChange,\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 checkWaitingForNetworkChange(manager);\n }}\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, useState } 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, WalletType } 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 { WidgetConfig } from './types';\nimport useSelectLanguage from './hooks/useSelectLanguage';\nimport './i18n';\nimport QueueManager from './QueueManager';\nimport { useUiStore } from './store/ui';\nimport { navigationRoutes } from './constants/navigationRoutes';\n\nexport type WidgetProps = {\n config?: WidgetConfig;\n};\n\nexport const SwapBox: React.FC<WidgetProps> = ({ config }) => {\n globalStyles();\n globalFont(config?.theme?.fontFamily || 'Roboto');\n\n const { activeTheme } = useTheme({ ...config?.theme });\n const { blockchains } = useMetaStore.use.meta();\n const disconnectWallet = useWalletsStore.use.disconnectWallet();\n const connectWallet = useWalletsStore.use.connectWallet();\n const { changeLanguage } = useSelectLanguage();\n const clearConnectedWallet = useWalletsStore.use.clearConnectedWallet();\n const [lastConnectedWalletWithNetwork, setLastConnectedWalletWithNetwork] =\n useState<string>('');\n const [disconnectedWallet, setDisconnectedWallet] = useState<WalletType>();\n const currentPage = useUiStore.use.currentPage();\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 state,\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 if (event === Events.ACCOUNTS && state.connected) {\n const key = `${type}-${state.network}-${value}`;\n\n if (state.connected) {\n setLastConnectedWalletWithNetwork(key);\n }\n }\n\n if (event === Events.NETWORK && state.network) {\n const key = `${type}-${state.network}`;\n setLastConnectedWalletWithNetwork(key);\n }\n };\n let providers = allProviders();\n\n useEffect(() => {\n const wallets = config?.wallets;\n clearConnectedWallet();\n providers = !wallets\n ? allProviders()\n : allProviders().filter((provider) => {\n const type = provider.config.type;\n return wallets.find((w) => w === type);\n });\n }, [config?.wallets]);\n\n useEffect(() => {\n changeLanguage(config?.language || 'en');\n }, [config?.language]);\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 fixedHeight={currentPage !== navigationRoutes.home}\n // style={\n // currentPage !== navigationRoutes.home && config?.theme?.height\n // ? {\n // height: config?.theme?.height,\n // width: config?.theme?.width || 'auto',\n // }\n // : {\n // width: config?.theme?.width || 'auto',\n // }\n // }\n >\n <AppRouter\n lastConnectedWallet={lastConnectedWalletWithNetwork}\n disconnectedWallet={disconnectedWallet}\n clearDisconnectedWallet={() => {\n setDisconnectedWallet(undefined);\n }}\n >\n <Layout config={config} />\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","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","debounce","fn","time","timeoutId","wrapper","args","_len","_key","arguments","clearTimeout","setTimeout","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","inputIsZero","title","disabled","hasWarning","canComputePriceImpact","inputAmount","requiredWallets","getUsdFeeOfStep","step","totalFeeInUsd","fee","expenseType","unitPrice","getTotalFeeInUsd","totalFee","hasHighFee","getMinRequiredSlippage","slippages","slippage","recommendedSlippage","hasProperSlippage","userSlippage","minRequiredSlippage","createBestRouteRequestBody","disabledLiquiditySources","checkPrerequisites","affiliateRef","selectedWalletsMap","selectedWallet","chainAndAccounts","connectedWallet","addresses","filteredBlockchains","requestBody","swapperGroups","swappersGroupsExclude","getWalletsForNewSwap","getRouteOutputAmount","outputAmount","getPercentageChange","oldValue","newValue","isOutputAmountChangedALot","oldRoute","newRoute","oldOutputAmount","newOutputAmount","percentageChange","toNumber","getBalanceWarnings","validationStatus","walletsSortedByRequiredWallets","selectedWallet1","selectedWallet2","indexOf","getRequiredBalanceOfWallet","ok","currentAmount","requiredAmount","reason","warningMessage","calcOutputUsdValue","tokenPrice","isNetworkStatusInWarningState","pendingSwapStep","networkStatus","PendingSwapNetworkStatus","NetworkChanged","getSwapMessages","pendingSwap","currentStep","textForRemove","message","extraMessage","detailedMessage","extraMessageDetail","networkStatusExtraMessageDetail","networkWarningState","networkStatusExtraMessage","WaitingForConnectingWallet","WaitingForQueue","WaitingForNetworkChange","isRpc","shortMessage","content","long","getLastConvertedTokenInFailedSwap","resultToken","status","lastSuccessStep","steps","slice","reverse","toBlockchain","toSymbol","toSymbolAddress","shouldRetrySwap","finishTime","Date","getTime","searchParamsToToken","searchParams","symbolAndAddress","getBestRouteToTokenUsdPrice","isNumberOfSwapsChanged","route1","route2","route1Swaps","route2Swaps","isRouteSwappersUpdated","route1Swappers","swapperId","route2Swappers","isRouteInternalCoinsUpdated","route1InternalCoins","route2InternalCoins","isRouteChanged","relatedFeeStatus","item","requiredAssets","isRouteParametersChanged","params","store","prevState","currentState","customSlippage","infiniteApprove","getBestRouteStatus","createSelectors","_store","use","k","keys","httpService","RangoClient","process","env","REACT_APP_API_KEY","SLIPPAGES","DEFAULT_SLIPPAGE","HIGH_SLIPPAGE","MAX_SLIPPAGE","MIN_SLIPPGAE","useMetaStore","create","set","meta","popularTokens","swappers","loadingStatus","fetchMeta","response","getAllMetadata","chainThatHasTokenInMetaResponse","enabledChains","enabled","useSettingsStore","persist","subscribeWithSelector","theme","setSlippage","setCustomSlippage","setAffiliateRef","toggleAllLiquiditySources","swappersGroup","swapper","swapperGroup","toggleInfiniteApprove","toggleLiquiditySource","liquiditySource","setTheme","useWalletsStore","connectWallet","getWalletsDetails","Error","disconnectWallet","initSelectedWallets","requiredChains","useBestRouteStore","anyWalletSelected","firstWalletWithMatchedChain","setSelectedWallet","clearConnectedWallet","subscribe","setState","sourceTokens","destinationTokens","sourceTokensWithBalance","destinationTokensWithBalance","equalityFn","shallow","fetchingBalanceSelector","getUsdValue","setBestRoute","setFromChain","setDefaultToken","setFromToken","setToChain","setToToken","setInputAmount","retry","failedIndex","firstStep","lastStep","fromBlockchain","fromSymbol","fromSymbolAddress","sortedSourceTokens","sortedDestinationTokens","switchFromAndTo","bestRouteStore","settingsStore","abortController","fetchBestRoute","abort","AbortController","getBestRoute","signal","then","res","catch","code","debouncedFetchBestRoute","bestRouteParamsListener","SearchParams","useUiStore","connectWalletsButtonDisabled","selectedSwapRequestId","currentPage","toggleConnectWalletsButton","setSelectedSwap","requestId","setCurrentPage","path","UpdateUrl","firstRender","useRef","setSearchParams","useSearchParams","location","useLocation","firstRenderSearchParams","search","searchParamsRef","useEffect","createSearchParams","value","key","pathname","fromChainString","fromTokenString","toChainString","toTokenString","FROM_CHAIN","FROM_TOKEN","TO_CHAIN","TO_TOKEN","FROM_AMOUNT","get","PercentageChange","props","showPercentageChange","React","Typography","variant","Box","styled","display","flexDirection","width","Container","boxSizing","borderRadius","padding","variants","filled","backgroundColor","outlined","border","defaultVariants","justifyContent","alignItems","minHeight","whiteSpace","overflow","textOverflow","paddingLeft","StyledImage","maxHeight","Options","ImagePlaceholder","height","OutputContainer","windth","position","paddingRight","TokenInfo","navigate","useNavigate","useTranslation","tokenBalanceReal","ItemSuffix","style","InfoCircleIcon","size","AngleDownIcon","className","onClick","Spacer","Button","prefix","src","suffix","align","displayName","TextField","autoFocus","placeholder","right","bottom","onChange","event","onAmountChange","target","undefined","paddingTop","Logo","fill","margin","StyledAnchor","textDecoration","BottomLogo","href","xmlns","viewBox","id","d","SwithFromAndTo","count","Footer","errorMessages","genericServerError","ButtonsContainer","HeaderButtons","onClickRefresh","Tooltip","RetryIcon","HistoryIcon","SettingsIcon","FromContainer","paddingBottom","SwitchButtonContainer","left","transform","BestRouteContainer","Alerts","Home","isRouterInContext","useInRouterContext","setCount","useState","fetchingBestRoute","bestRouteError","errorMessage","showBestRoute","outToInRatio","swapButtonState","highFee","bind","Header","prev","VerticalSwapIcon","BestRoute","feeWarning","totalTime","Alert","Route","children","ref","AppRouter","Router","MemoryRouter","evmChains","isEvmBlockchain","useQueueManager","lastConnectedWallet","clearDisconnectedWallet","disconnectedWallet","notifier","useNavigateBack","navigateBackFrom","currentRoute","window","history","idx","TokenPreview","label","fontSize","RoutesOverview","routes","isLast","ChevronRightIcon","GasIcon","ConfirmSwapErrorTypes","ConfirmSwapWarningTypes","useConfirmSwap","initialRoute","proceedAnywayRef","confiremedRouteRef","abortControllerRef","setLoading","errors","setErrors","warnings","setWarnings","swapSettings","disabledSwappersGroups","newSwap","calculatePendingSwap","confiremedRoute","requestAmount","NO_ROUTE","confirmSwapState","routeChanged","newRouteOutputUsdValue","ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS","ROUTE_AND_OUTPUT_AMOUNT_UPDATED","ROUTE_COINS_UPDATED","ROUTE_UPDATED","ROUTE_SWAPPERS_UPDATED","balanceWarnings","enoughBalance","INSUFFICIENT_BALANCE","messages","INSUFFICIENT_SLIPPAGE","noErrors","noWarnings","REQUEST_FAILED","ChangeSlippageButton","StyledMessage","MinRequiredSlippage","direction","ConfirmSwapErrors","List","showListStyle","true","ListItem","listStyleType","listStylePosition","Message","BalanceWarnings","warning","ConfirmSwapWarnings","HighSlippageWarning","selectedSlippage","footer","ConfirmSwapExtraMessages","highSlippage","ConfirmSwapPage","fetchingBestRouteError","bestRouteloadingStatus","manager","useManager","showHighSlippageWarning","connect","useWallets","confirmDisabled","toAmount","handleConnectChain","ConfirmSwap","onBack","onConfirm","previewInputs","blockchainLogo","previewRoutes","extraMessages","confirmButtonTitle","getPendingSwaps","getAll","q","storage","getStorage","creationTime","groupSwapsByDate","output","Map","now","dayjs","swapDate","isSame","values","HistoryPage","pendingSwaps","History","groupBy","onSwapClick","LiquiditySourcePage","supportedSwappers","uniqueSwappersGroups","types","LiquiditySourcesSelector","toggleAll","SelectChainPage","BlockchainSelector","SelectTokenPage","supportedTokens","supportedSourceTokens","supportedToken","supportedDestinationTokens","TokenSelector","SettingsPage","supportedUniqueSwappersGroups","Settings","onSlippageChange","onLiquiditySourcesClick","selectedLiquiditySources","NaN","onCustomSlippageChange","minSlippage","maxSlippage","selectedTheme","onThemeChange","ListContainer","gap","gridTemplateColumns","alignContent","overflowY","LoaderContainer","top","AlertContainer","WalletsPage","supportedWallets","multiWallets","disconnect","walletsRef","sortedWallets","detectMobileScreens","walletErrorMessage","setWalletErrorMessage","onSelectWallet","w","WalletState","e","disconnectConnectingWallets","connectingWallets","SecondaryPage","textField","Spinner","LoadingFailedAlert","index","Wallet","useCopyToClipboard","resetInterval","isCopied","setCopied","handleCopy","useCallback","text","copy","timeout","timeSince","timeMillis","floor","intervalType","interval","getSwapDate","toLocaleString","PlaceholderContainer","SwapDetailsPlaceholder","SwapDetailsPage","canSwitchNetworkTo","selectedSwap","onCancel","cancelSwap","simulationResult","getCurrentStep","currentStepBlockchain","getCurrentBlockchainOfOrNull","currentStepWallet","getRelatedWalletOrNull","currentStepNetworkStatus","swapMessages","shouldRetry","switchNetwork","lastConvertedTokenInFailedSwap","SwapHistory","fromBlockchainLogo","fromLogo","toBlockchainLogo","toLogo","onCopy","extraMessageSeverity","date","onRetry","getAbsolutePath","AppRoutes","config","useRoutes","element","WalletImage","marginLeft","marginRight","Layout","connectedWalletsImages","totalBalance","fetchingBalance","AddWalletIcon","flexContent","walletImage","globalStyles","globalCss","globalFont","fontFamily","body","usePrevious","useTheme","colors","themeColors","mode","primary","background","foreground","success","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","remove","getActiveTheme","activeTheme","useSelectLanguage","i18n","currentLanguage","language","changeLanguage","languages","Backend","LanguageDetector","initReactI18next","init","resources","en","translation","tr","fallbackLng","debug","whitelist","QueueManager","providers","getSigners","allBlockchains","blockchainsObj","getSupportedChainNames","allProviders","context","evmNetworkChainInfo","convertEvmBlockchainMetaToEvmChainInfo","console","log","ManagerProvider","queuesDefs","swapQueueDef","onPersistedDataLoaded","checkWaitingForNetworkChange","isPaused","SwapBox","lastConnectedWalletWithNetwork","setLastConnectedWalletWithNetwork","setDisconnectedWallet","evmBasedChainNames","onUpdateState","Events","ACCOUNTS","NETWORK","provider","Provider","allBlockChains","SwapContainer","fixedHeight"],"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/PercentageChange.tsx","../src/components/TokenInfo.tsx","../src/components/BottomLogo.tsx","../src/components/SwitchFromAndTo.tsx","../src/components/Footer.tsx","../src/constants/errors.ts","../src/components/HeaderButtons.tsx","../src/pages/Home.tsx","../src/components/AppRouter.tsx","../src/hooks/useNavigateBack.ts","../src/components/TokenPreview.tsx","../src/components/RoutesOverview.tsx","../src/types/routing.ts","../src/hooks/useConfirmSwap.ts","../src/components/ChangeSlippageButton.tsx","../src/components/warnings/MinRequiredSlippage.tsx","../src/components/ConfirmSwapErrors.tsx","../src/components/warnings/BalanceWarnings.tsx","../src/components/ConfirmSwapWarnings.tsx","../src/components/warnings/HighSlippageWarning.tsx","../src/components/warnings/ConfirmSwapExtraMessages.tsx","../src/pages/ConfirmSwapPage.tsx","../src/utils/queue.ts","../src/utils/date.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/hooks/useCopyToClipboard.ts","../src/utils/time.ts","../src/components/SwapDetailsPlaceholder.tsx","../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 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\nexport function debounce(fn: Function, time: number) {\n let timeoutId: ReturnType<typeof setTimeout> | null;\n return wrapper;\n function wrapper(...args: any) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = null;\n fn(...args);\n }, time);\n }\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(\n tokenA: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null,\n tokenB: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null\n) {\n return (\n tokenA?.blockchain === tokenB?.blockchain &&\n tokenA?.symbol === tokenB?.symbol &&\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(\n b.state === WalletStatus.DISCONNECTED ||\n b.state === WalletStatus.CONNECTING\n ) -\n Number(\n a.state === WalletStatus.DISCONNECTED ||\n a.state === WalletStatus.CONNECTING\n )\n );\n}\n","import BigNumber from 'bignumber.js';\nimport {\n BestRouteRequest,\n BestRouteResponse,\n RecommendedSlippage,\n SwapResult,\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 { ConvertedToken, SwapButtonState } from '../types';\nimport {\n PendingSwapNetworkStatus,\n PendingSwapStep,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\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 inputIsZero: 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 (inputIsZero) return { title: 'Enter an amount', disabled: true };\n else if (!bestRoute || !bestRoute.result)\n 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 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): string | null {\n const slippages = route.result?.swaps.map(\n (slippage) => slippage.recommendedSlippage\n );\n return (\n slippages\n ?.map((s) => s?.slippage || '0')\n ?.filter((s) => parseFloat(s) > 0)\n ?.sort((a, b) => parseFloat(b) - parseFloat(a))\n ?.find(() => true) || null\n );\n}\n\nexport function hasProperSlippage(\n userSlippage: string,\n minRequiredSlippage: string | null\n) {\n if (!minRequiredSlippage) return true;\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: string | 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 affiliateRef: string | null\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 filteredBlockchains = selectedWallets.map((wallet) => wallet.chain);\n\n const requestBody: BestRouteRequest = {\n amount: inputAmount.toString(),\n affiliateRef,\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 slippage: slippage.toString(),\n ...(checkPrerequisites && { blockchains: filteredBlockchains }),\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\nexport function calcOutputUsdValue(\n outputAmount?: string,\n tokenPrice?: number | null\n) {\n const amount = !!outputAmount ? new BigNumber(outputAmount) : ZERO;\n\n return amount.multipliedBy(tokenPrice || 0);\n}\n\nexport function isNetworkStatusInWarningState(\n pendingSwapStep: PendingSwapStep | null\n): boolean {\n return (\n !!pendingSwapStep &&\n pendingSwapStep.networkStatus !== null &&\n pendingSwapStep.networkStatus !== PendingSwapNetworkStatus.NetworkChanged\n );\n}\n\nexport function getSwapMessages(\n pendingSwap: PendingSwap,\n currentStep: PendingSwapStep | null\n): {\n shortMessage: string;\n detailedMessage: { content: string; long: boolean };\n} {\n const textForRemove = 'bellow button or';\n let message = pendingSwap.extraMessage;\n let detailedMessage = pendingSwap.extraMessageDetail;\n\n if (pendingSwap.networkStatusExtraMessageDetail?.includes(textForRemove)) {\n pendingSwap.networkStatusExtraMessageDetail =\n pendingSwap.networkStatusExtraMessageDetail.replace(textForRemove, '');\n }\n\n const networkWarningState = isNetworkStatusInWarningState(currentStep);\n\n if (networkWarningState) {\n message = pendingSwap.networkStatusExtraMessage || '';\n detailedMessage = pendingSwap.networkStatusExtraMessageDetail || '';\n switch (currentStep?.networkStatus) {\n case PendingSwapNetworkStatus.WaitingForConnectingWallet:\n message = message || 'Waiting for connecting wallet';\n break;\n case PendingSwapNetworkStatus.WaitingForQueue:\n message = message || 'Waiting for other running tasks to be finished';\n break;\n case PendingSwapNetworkStatus.WaitingForNetworkChange:\n message = message || 'Waiting for changing wallet network';\n break;\n }\n }\n detailedMessage = detailedMessage || '';\n message = message || '';\n const isRpc =\n message?.indexOf('code') !== -1 && message?.indexOf('reason') !== -1;\n\n return {\n shortMessage: message,\n detailedMessage: { content: detailedMessage, long: isRpc },\n };\n}\n\nexport function getLastConvertedTokenInFailedSwap(\n pendingSwap: PendingSwap\n): ConvertedToken {\n let resultToken: ConvertedToken = null;\n if (pendingSwap.status === 'failed') {\n const lastSuccessStep = pendingSwap.steps\n .slice()\n .reverse()\n .filter((step) => step.status === 'success')[0];\n\n if (lastSuccessStep) {\n resultToken = {\n blockchain: lastSuccessStep.toBlockchain,\n symbol: lastSuccessStep.toSymbol,\n outputAmount: lastSuccessStep.outputAmount,\n address: lastSuccessStep.toSymbolAddress,\n };\n }\n }\n return resultToken;\n}\n\nexport function shouldRetrySwap(pendingSwap: PendingSwap) {\n return (\n pendingSwap.status === 'failed' &&\n !!pendingSwap.finishTime &&\n new Date().getTime() - parseInt(pendingSwap.finishTime) < 4 * 3600 * 1000\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 { BestRouteEqualityParams } 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(params: BestRouteEqualityParams) {\n if (params.store === 'bestRoute') {\n const { prevState, currentState } = params;\n return (\n !!currentState.fromToken &&\n !!currentState.toToken &&\n (prevState.fromChain?.name !== currentState.fromChain?.name ||\n prevState.toChain?.name !== currentState.toChain?.name ||\n prevState.fromToken?.symbol !== currentState.fromToken?.symbol ||\n prevState.toToken?.symbol !== currentState.toToken?.symbol ||\n prevState.fromToken?.blockchain !== prevState.fromToken?.blockchain ||\n prevState.toToken?.blockchain !== currentState.toToken?.blockchain ||\n prevState.fromToken?.address !== currentState.fromToken?.address ||\n prevState.toToken?.address !== currentState.toToken?.address ||\n prevState.inputAmount !== currentState.inputAmount)\n );\n } else if (params.store === 'settings') {\n const { prevState, currentState } = params;\n return (\n prevState.slippage !== currentState.slippage ||\n prevState.customSlippage !== currentState.customSlippage ||\n prevState.disabledLiquiditySources?.length !==\n currentState.disabledLiquiditySources?.length ||\n prevState.infiniteApprove ||\n currentState.infiniteApprove\n );\n }\n return false;\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\n//todo: refactor bestRoute store and add loadingStatus\nexport const getBestRouteStatus = (loading: boolean, error: boolean) => {\n if (loading) return 'loading';\n if (error) return 'failed';\n else return 'success';\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 affiliateRef: string | null;\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 setAffiliateRef: (affiliateRef: string | null) => 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 affiliateRef: null,\n disabledLiquiditySources: [],\n theme: 'auto',\n setSlippage: (slippage) =>\n set(() => ({\n slippage: slippage,\n })),\n setCustomSlippage: (customSlippage) =>\n set(() => ({\n customSlippage: customSlippage,\n })),\n setAffiliateRef: (affiliateRef) =>\n set(() => ({\n affiliateRef,\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: 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\nexport const fetchingBalanceSelector = (state: WalletsStore) =>\n !!state.balances.find((wallet) => wallet.loading);\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 { calcOutputUsdValue, createBestRouteRequestBody } from '../utils/swap';\nimport { useMetaStore } from './meta';\nimport {\n getDefaultToken,\n getSortedTokens,\n tokensAreEqual,\n} from '../utils/wallets';\nimport { useWalletsStore } from './wallets';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset/dist/shared';\nimport { debounce } from '../utils/common';\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 retry: (pendingSwap: PendingSwap) => void;\n switchFromAndTo: () => 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 (!state.inputAmount || state.inputAmount === '0') return {};\n if (!!bestRoute) {\n outputAmount = !!bestRoute.result?.outputAmount\n ? new BigNumber(bestRoute.result?.outputAmount)\n : null;\n outputUsdValue = calcOutputUsdValue(\n bestRoute.result?.outputAmount,\n getBestRouteToTokenUsdPrice(bestRoute) || state.toToken?.usdPrice\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 retry: (pendingSwap) => {\n const { tokens, blockchains } = useMetaStore.getState().meta;\n const balances = useWalletsStore.getState().balances;\n const failedIndex =\n pendingSwap.status === 'failed'\n ? pendingSwap.steps.findIndex((s) => s.status === 'failed')\n : null;\n\n if (failedIndex === null || failedIndex < 0) return;\n\n const firstStep = pendingSwap.steps[0];\n const lastStep = pendingSwap.steps[pendingSwap.steps.length - 1];\n const fromChain =\n blockchains.find(\n (blockchain) => blockchain.name === firstStep.fromBlockchain\n ) || null;\n const toChain =\n blockchains.find(\n (blockchain) => blockchain.name === lastStep.toBlockchain\n ) || null;\n\n const fromToken = tokens.find((token) =>\n tokensAreEqual(token, {\n blockchain: firstStep.fromBlockchain,\n symbol: firstStep.fromSymbol,\n address: firstStep.fromSymbolAddress,\n })\n );\n\n const toToken = tokens.find((token) =>\n tokensAreEqual(token, {\n blockchain: lastStep.toBlockchain,\n symbol: lastStep.toSymbol,\n address: lastStep.toSymbolAddress,\n })\n );\n const sortedSourceTokens = getSortedTokens(\n fromChain,\n tokens,\n balances,\n []\n );\n const sortedDestinationTokens = getSortedTokens(\n toChain,\n tokens,\n balances,\n []\n );\n const inputAmount = pendingSwap.inputAmount;\n set({\n fromChain,\n fromToken,\n inputAmount,\n outputAmount: null,\n inputUsdValue: getUsdValue(fromToken || null, inputAmount),\n outputUsdValue: new BigNumber(0),\n toChain,\n toToken,\n bestRoute: null,\n loading: false,\n error: '',\n sourceTokens: sortedSourceTokens,\n destinationTokens: sortedDestinationTokens,\n });\n },\n switchFromAndTo: () =>\n set((state) => ({\n fromChain: state.toChain,\n fromToken: state.toToken,\n toChain: state.fromChain,\n toToken: state.fromToken,\n sourceTokens: state.destinationTokens,\n destinationTokens: state.sourceTokens,\n inputAmount: state.outputAmount?.toString() || '',\n inputUsdValue: getUsdValue(\n state.toToken,\n state.outputAmount?.toString() || ''\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, affiliateRef } =\n settingsStore.getState();\n if (!fromToken || !toToken || !inputAmount || inputAmount === '0') 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 affiliateRef\n );\n if (!bestRouteStore.getState().loading)\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 const debouncedFetchBestRoute = debounce(fetchBestRoute, 600);\n\n const bestRouteParamsListener = () => {\n const { fromToken, toToken, inputAmount, inputUsdValue } =\n useBestRouteStore.getState();\n if (!inputAmount || inputAmount === '0' || inputUsdValue.eq(0)) return;\n\n if (tokensAreEqual(fromToken, toToken))\n return bestRouteStore.setState({\n loading: false,\n bestRoute: null,\n outputAmount: new BigNumber(inputAmount),\n outputUsdValue: inputUsdValue,\n });\n\n if (!bestRouteStore.getState().loading)\n bestRouteStore.setState({\n loading: true,\n bestRoute: null,\n outputAmount: null,\n outputUsdValue: new BigNumber(0),\n });\n debouncedFetchBestRoute();\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 bestRouteParamsListener,\n {\n equalityFn: (prevState, currentState) => {\n if (\n isRouteParametersChanged({\n store: 'bestRoute',\n prevState,\n currentState,\n })\n )\n 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 infiniteApprove: state.infiniteApprove,\n }),\n bestRouteParamsListener,\n {\n equalityFn: (prevState, currentState) => {\n if (\n isRouteParametersChanged({\n store: 'settings',\n prevState,\n currentState,\n })\n )\n 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 currentPage: string;\n toggleConnectWalletsButton: () => void;\n setSelectedSwap: (requestId: string | null) => void;\n setCurrentPage: (path: string) => void;\n}\n\nexport const useUiStore = createSelectors(\n create<UiState>()((set) => ({\n connectWalletsButtonDisabled: false,\n selectedSwapRequestId: null,\n currentPage: '',\n toggleConnectWalletsButton: () =>\n set((state) => ({\n connectWalletsButtonDisabled: !state.connectWalletsButtonDisabled,\n })),\n setSelectedSwap: (requestId) => set({ selectedSwapRequestId: requestId }),\n setCurrentPage: (path) => set({ currentPage: path }),\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 location.pathname != navigationRoutes.confirmSwap\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 BigNumber from 'bignumber.js';\nimport React from 'react';\nimport { getPercentageChange } from '../utils/swap';\nimport { Typography } from '@rango-dev/ui';\nimport { numberToString } from '../utils/numbers';\n\ninterface PropTypes {\n inputUsdValue: BigNumber | null;\n outputUsdValue: BigNumber | null;\n}\n\nexport function PercentageChange(props: PropTypes) {\n const { inputUsdValue, outputUsdValue } = props;\n\n if (!inputUsdValue || !outputUsdValue || !outputUsdValue.gt(0)) return null;\n\n const percentageChange = getPercentageChange(\n inputUsdValue.toNumber(),\n outputUsdValue.toNumber()\n );\n\n const showPercentageChange = percentageChange?.lt(0);\n\n return (\n <>\n {showPercentageChange && (\n <Typography variant=\"caption\" color=\"$error500\">\n {`(${numberToString(percentageChange, 0, 2)}%)`}\n </Typography>\n )}\n </>\n );\n}\n","import React from 'react';\nimport {\n AngleDownIcon,\n Button,\n InfoCircleIcon,\n styled,\n TextField,\n Typography,\n Image,\n Spacer,\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';\nimport { PercentageChange } from './PercentageChange';\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 borderRadius: '$5',\n padding: '$8 $16 $16 $16',\n\n variants: {\n type: {\n filled: {\n backgroundColor: '$neutrals300',\n },\n outlined: {\n border: '1px solid $neutrals300',\n },\n },\n },\n\n defaultVariants: {\n type: 'filled',\n },\n\n '.head': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '32px',\n },\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$2 0',\n '.selectors': {\n width: '35%',\n\n '._text': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n },\n '.amount': {\n width: '30%',\n },\n },\n '.output-usd': {\n display: 'flex',\n div: {\n display: 'flex',\n paddingLeft: '$8',\n },\n },\n});\n\nconst Options = styled('div', {\n display: 'flex',\n justifyContent: 'flex-end',\n\n '.balance': {\n display: 'flex',\n alignItems: 'center',\n },\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 windth: '100%',\n height: '$48',\n borderRadius: '$5',\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 <Container type={props.type === 'From' ? 'filled' : 'outlined'}>\n <div className=\"head\">\n <Typography variant=\"body2\" color=\"neutrals800\">\n {t(type)}\n </Typography>\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 <Typography variant=\"body3\" color=\"neutrals600\">{`${t(\n 'Balance'\n )}: ${tokenBalance} ${fromToken?.symbol || ''}`}</Typography>\n <Spacer size={4} />\n <Button type=\"primary\" variant=\"ghost\" size=\"compact\">\n {t('Max')}\n </Button>\n </div>\n </Options>\n ) : (\n <div className=\"output-usd\">\n <PercentageChange\n inputUsdValue={inputUsdValue}\n outputUsdValue={props.outputUsdValue}\n />\n <div>\n <Typography\n variant=\"caption\"\n color=\"neutrals600\"\n >{`$${numberToString(props.outputUsdValue)}`}</Typography>\n </div>\n </div>\n )}\n </div>\n <div className=\"form\">\n <Button\n className=\"selectors\"\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 <Image src={chain.logo} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n >\n {loadingStatus === 'success' && chain\n ? chain.displayName\n : t('Chain')}\n </Button>\n <Spacer size={12} />\n <Button\n className=\"selectors\"\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 <Image src={token.image} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n <Spacer size={12} />\n <div className=\"amount\">\n {props.type === 'From' ? (\n <TextField\n type=\"number\"\n size=\"large\"\n autoFocus\n placeholder=\"0\"\n style={{\n position: 'relative',\n backgroundColor: '$background !important',\n }}\n suffix={\n <span\n style={{\n position: 'absolute',\n right: '4px',\n bottom: '2px',\n }}\n >\n <Typography\n variant=\"caption\"\n color=\"neutrals800\"\n >{`$${numberToString(inputUsdValue)}`}</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=\"h4\">\n {bestRoute\n ? `≈ ${numberToString(props.outputAmount)}`\n : inputAmount\n ? '?'\n : '0'}\n </Typography>\n </OutputContainer>\n )}\n </div>\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 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';\n\nconst ButtonsContainer = styled('div', {\n display: 'flex',\n});\n\ninterface PropTypes {\n onClickRefresh?: () => void;\n}\n\nexport function HeaderButtons(props: PropTypes) {\n const { onClickRefresh } = props;\n const navigate = useNavigate();\n\n return (\n <ButtonsContainer>\n <Tooltip content=\"Refresh\">\n <Button\n variant=\"ghost\"\n onClick={onClickRefresh}\n disabled={!onClickRefresh}\n >\n <RetryIcon size={24} disabled={!onClickRefresh} />\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 {\n Alert,\n BestRoute,\n Button,\n styled,\n Typography,\n VerticalSwapIcon,\n Header,\n} from '@rango-dev/ui';\nimport React, { useEffect, useState } from 'react';\nimport { useInRouterContext, useNavigate } from 'react-router-dom';\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';\nimport BigNumber from 'bignumber.js';\nimport { HeaderButtons } from '../components/HeaderButtons';\nimport { useUiStore } from '../store/ui';\n\nconst Container = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst FromContainer = styled('div', {\n position: 'relative',\n paddingBottom: '$12',\n});\n\nconst SwitchButtonContainer = styled('div', {\n position: 'absolute',\n bottom: '-12px',\n left: '50%',\n transform: 'translate(-50%, 10%)',\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});\n\nexport function Home() {\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 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 const setCurrentPage = useUiStore.use.setCurrentPage();\n const switchFromAndTo = useBestRouteStore.use.switchFromAndTo();\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 inputIsZero = inputAmount === '0';\n const swapButtonState = getSwapButtonState(\n loadingMetaStatus,\n accounts,\n fetchingBestRoute,\n bestRoute,\n hasLimitError(bestRoute),\n highValueLoss,\n priceImpactCanNotBeComputed,\n needsToWarnEthOnPath,\n inputIsZero\n );\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n const highFee = hasHighFee(totalFeeInUsd);\n\n useEffect(() => {\n setCurrentPage(navigationRoutes.home);\n\n return setCurrentPage.bind(null, '');\n }, []);\n\n return (\n <Container>\n <Header\n title=\"SWAP\"\n suffix={\n <HeaderButtons\n onClickRefresh={!!bestRoute ? fetchBestRoute : undefined}\n />\n }\n />\n <FromContainer>\n <TokenInfo\n type=\"From\"\n chain={fromChain}\n token={fromToken}\n onAmountChange={setInputAmount}\n inputAmount={inputAmount}\n />\n <SwitchButtonContainer>\n <Button\n variant=\"ghost\"\n onClick={() => {\n switchFromAndTo();\n setCount((prev) => prev + 1);\n }}\n >\n <VerticalSwapIcon size={32} />\n {isRouterInContext && <SwithFromAndTo count={count} />}\n </Button>\n </SwitchButtonContainer>\n </FromContainer>\n <TokenInfo\n type=\"To\"\n chain={toChain}\n token={toToken}\n outputAmount={\n outputAmount ? new BigNumber(outputAmount) : new BigNumber(0)\n }\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 || hasLimitError(bestRoute)) && (\n <Alerts>\n {errorMessage && <Alert type=\"error\">{errorMessage}</Alert>}\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 </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.confirmSwap, { 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 { useQueueManager } from '@rango-dev/queue-manager-rango-preset';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { isEvmBlockchain } from 'rango-types';\nimport { UpdateUrl } from './UpdateUrl';\nimport { Home } from '../pages/Home';\nimport { useMetaStore } from '../store/meta';\n\nconst Route: React.FC = ({ children }: PropsWithChildren) => {\n const location = useLocation();\n const navigate = useNavigate();\n const ref = useRef(true);\n\n useEffect(() => {\n if (location.pathname === navigationRoutes.confirmSwap && ref.current)\n navigate(navigationRoutes.home + location.search, { state: 'redirect' });\n\n ref.current = false;\n }, []);\n\n if (location.pathname === navigationRoutes.confirmSwap && ref.current)\n return <Home />;\n\n return <> {children}</>;\n};\n\nexport function AppRouter({\n children,\n ...props\n}: PropsWithChildren & {\n lastConnectedWallet: string;\n disconnectedWallet: WalletType | undefined;\n clearDisconnectedWallet: () => void;\n}) {\n const isRouterInContext = useInRouterContext();\n const Router = isRouterInContext ? Route : MemoryRouter;\n const { blockchains } = useMetaStore.use.meta();\n\n const evmChains = blockchains.filter(isEvmBlockchain);\n\n useQueueManager({\n lastConnectedWallet: props.lastConnectedWallet,\n clearDisconnectedWallet: props.clearDisconnectedWallet,\n disconnectedWallet: props.disconnectedWallet,\n evmChains,\n notifier: () => {},\n });\n\n return (\n <>\n <Router {...props}>{children}</Router>\n {isRouterInContext && <UpdateUrl />}\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 (currentRoute === navigationRoutes.swapDetails)\n return navigate(navigationRoutes.swaps, { replace: true });\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.confirmSwap,\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 }\n };\n\n return { navigateBackFrom };\n}\n","import React, { ReactNode } from 'react';\nimport { Button, InfoCircleIcon, styled, Typography } from '@rango-dev/ui';\nimport { LoadingStatus } from '../store/meta';\nimport { useTranslation } from 'react-i18next';\nimport { Spacer } from '@rango-dev/ui';\nimport BigNumber from 'bignumber.js';\nimport { numberToString } from '../utils/numbers';\nimport { Image } from '@rango-dev/ui';\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 borderRadius: '$5',\n padding: '$8 $16 $16 $16',\n\n variants: {\n type: {\n filled: {\n backgroundColor: '$neutrals300',\n },\n outlined: {\n border: '1px solid $neutrals300',\n },\n },\n },\n\n defaultVariants: {\n type: 'filled',\n },\n\n '.head': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '32px',\n '.usd-value': {\n paddingLeft: '$8',\n },\n },\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$2 0',\n '.selectors': {\n width: '35%',\n\n '._text': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n },\n '.amount': {\n width: '30%',\n },\n },\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 windth: '100%',\n height: '$48',\n borderRadius: '$5',\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\ninterface PropTypes {\n label: string;\n amount: string;\n usdValue?: BigNumber;\n loadingStatus: LoadingStatus;\n chain: {\n displayName: string;\n logo: string;\n };\n token: {\n symbol: string;\n image: string;\n };\n percentageChange?: ReactNode;\n}\n\nexport function TokenPreview(props: PropTypes) {\n const { chain, token, loadingStatus, percentageChange } = props;\n const { t } = useTranslation();\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 </div>\n );\n\n return (\n <Box>\n <Container type={'outlined'}>\n <div className=\"head\">\n <Typography variant=\"body2\" color=\"neutrals800\">\n {props.label}\n </Typography>\n <div>\n {percentageChange}\n {props.usdValue && (\n <Typography\n variant=\"caption\"\n color=\"neutrals600\"\n className=\"usd-value\"\n >{`$${numberToString(props.usdValue)}`}</Typography>\n )}\n </div>\n </div>\n <div className=\"form\">\n <Button\n className=\"selectors\"\n variant=\"outlined\"\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && chain ? (\n <Image src={chain.logo} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n >\n {loadingStatus === 'success' && chain\n ? chain.displayName\n : t('Chain')}\n </Button>\n <Spacer size={12} />\n <Button\n className=\"selectors\"\n variant=\"outlined\"\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && token ? (\n <Image src={token.image} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n <Spacer size={12} />\n <div className=\"amount\">\n <OutputContainer>\n <Typography variant=\"h4\">{props.amount}</Typography>\n </OutputContainer>\n </div>\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled } from '@rango-dev/ui';\nimport { BestRouteResponse } from 'rango-sdk';\nimport { ChevronRightIcon } from '@rango-dev/ui';\nimport { GasIcon } from '@rango-dev/ui';\nimport { Spacer } from '@rango-dev/ui';\n\nexport const Container = styled('div', {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '$8',\n borderRadius: '$5',\n backgroundColor: '$neutrals300',\n color: '$neutrals800',\n fontSize: '$12',\n\n '.routes': {\n display: 'flex',\n alignItems: 'center',\n },\n '.fee': {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\ninterface PropTypes {\n routes: BestRouteResponse | null;\n totalFee?: string;\n}\nfunction RoutesOverview(props: PropTypes) {\n if (!props.routes) return null;\n\n const swaps = props.routes.result?.swaps;\n return (\n <Container>\n <div className=\"routes\">\n {swaps?.map((swap, idx) => {\n const isLast = idx + 1 == swaps.length;\n return (\n <>\n <div className=\"route\">{swap.from.symbol}</div>\n <ChevronRightIcon size={12} />\n {isLast ? <div className=\"route\">{swap.to.symbol}</div> : null}\n </>\n );\n })}\n </div>\n {props.totalFee ? (\n <div className=\"fee\">\n <GasIcon size={12} />\n <Spacer size={4} />${props.totalFee}\n </div>\n ) : null}\n </Container>\n );\n}\n\nexport default RoutesOverview;\n","import { RouteState } from '../store/bestRoute';\nimport { SettingsState } from '../store/settings';\n\ninterface BestRouteStoreParams {\n fromChain?: RouteState['fromChain'];\n toChain?: RouteState['toChain'];\n fromToken?: RouteState['fromToken'];\n toToken?: RouteState['toToken'];\n inputAmount?: RouteState['inputAmount'];\n}\n\ninterface SettingsStoreParams {\n slippage?: SettingsState['slippage'];\n customSlippage?: SettingsState['customSlippage'];\n disabledLiquiditySources?: SettingsState['disabledLiquiditySources'];\n infiniteApprove?: SettingsState['infiniteApprove'];\n}\n\nexport type BestRouteEqualityParams =\n | {\n store: 'bestRoute';\n prevState: BestRouteStoreParams;\n currentState: BestRouteStoreParams;\n }\n | {\n store: 'settings';\n prevState: SettingsStoreParams;\n currentState: SettingsStoreParams;\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: string | 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 { 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 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';\nimport { calculatePendingSwap } from '@rango-dev/queue-manager-rango-preset';\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 affiliateRef = useSettingsStore.use.affiliateRef();\n\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 affiliateRef\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 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 { Button } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function ChangeSlippageButton() {\n const navigate = useNavigate();\n\n return (\n <Button\n type=\"primary\"\n variant=\"outlined\"\n size=\"small\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n Change Slippage\n </Button>\n );\n}\n","import { Spacer, Typography, styled } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n minRequiredSlippage: string | null;\n}\n\nconst StyledMessage = styled(Typography, {\n color: '$error500 !important',\n});\n\nexport function MinRequiredSlippage({ minRequiredSlippage }: PropTypes) {\n return (\n <StyledMessage variant=\"body2\">\n We recommend you to increase slippage to at least \n {minRequiredSlippage}\n for this route.\n <Spacer size={8} direction=\"vertical\" />\n <ChangeSlippageButton />\n </StyledMessage>\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 color: '$warning500 !important',\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 { Alert } 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\" footer={<ChangeSlippageButton />}>\n Caution, your slippage is high (=\n {selectedSlippage}). Your trade may be front run.\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 React, { useEffect } from 'react';\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 { getTotalFeeInUsd, requiredWallets } from '../utils/swap';\nimport { decimalNumber, numberToString } from '../utils/numbers';\nimport { useMetaStore } from '../store/meta';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { TokenPreview } from '../components/TokenPreview';\n// @ts-ignore // TODO: fix error in tsc build\nimport { t } from 'i18next';\nimport { Spacer, ConfirmSwap } from '@rango-dev/ui';\nimport RoutesOverview from '../components/RoutesOverview';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useConfirmSwap } from '../hooks/useConfirmSwap';\nimport { useSettingsStore } from '../store/settings';\nimport { useUiStore } from '../store/ui';\nimport { ConfirmSwapErrorTypes } from '../types';\nimport { ConfirmSwapErrors } from '../components/ConfirmSwapErrors';\nimport { ConfirmSwapWarnings } from '../components/ConfirmSwapWarnings';\nimport { ConfirmSwapExtraMessages } from '../components/warnings/ConfirmSwapExtraMessages';\nimport { getBestRouteStatus } from '../utils/routing';\nimport { PercentageChange } from '../components/PercentageChange';\n\nexport function ConfirmSwapPage() {\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const fetchingBestRouteError = useBestRouteStore.use.error();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const { blockchains, tokens } = 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 const slippage = useSettingsStore.use.slippage();\n const customSlippage = useSettingsStore.use.customSlippage();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n\n const bestRouteloadingStatus = getBestRouteStatus(\n fetchingBestRoute,\n !!fetchingBestRouteError\n );\n\n const { manager } = useManager();\n const { loading, errors, warnings, confirmSwap } = useConfirmSwap();\n\n const selectedSlippage = customSlippage || slippage;\n\n const showHighSlippageWarning = !errors.find(\n (error) => error.type === ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n );\n\n const { getWalletInfo, connect } = useWallets();\n const confirmDisabled =\n fetchingBestRoute ||\n !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 const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n return (\n <ConfirmSwap\n // @ts-ignore\n requiredWallets={getRequiredChains(bestRoute)}\n selectableWallets={selectableWallets}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmSwap)}\n onConfirm={() => {\n confirmSwap?.().then((swap) => {\n if (swap) {\n manager?.create(\n 'swap',\n { swapDetails: swap },\n // @ts-ignore\n { id: swap.requestId }\n );\n setSelectedSwap(swap.requestId);\n navigate(navigationRoutes.swaps + `/${swap.requestId}`, {\n replace: true,\n });\n }\n });\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 previewInputs={\n <>\n <TokenPreview\n chain={{\n displayName: firstStep?.from.blockchain || '',\n logo: firstStep?.from.blockchainLogo || '',\n }}\n token={{\n symbol: firstStep?.from.symbol || '',\n image: firstStep?.from.logo || '',\n }}\n usdValue={inputUsdValue}\n amount={fromAmount}\n label={t('From')}\n loadingStatus={bestRouteloadingStatus}\n />\n <Spacer size={12} direction=\"vertical\" />\n <TokenPreview\n chain={{\n displayName: lastStep?.to.blockchain || '',\n logo: lastStep?.to.blockchainLogo || '',\n }}\n token={{\n symbol: lastStep?.to.symbol || '',\n image: lastStep?.to.logo || '',\n }}\n usdValue={outputUsdValue}\n amount={toAmount}\n label={t('To')}\n loadingStatus={bestRouteloadingStatus}\n percentageChange={\n <PercentageChange\n inputUsdValue={inputUsdValue}\n outputUsdValue={outputUsdValue}\n />\n }\n />\n </>\n }\n previewRoutes={\n <RoutesOverview\n routes={bestRoute}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n />\n }\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 />\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 { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\nimport dayjs from 'dayjs';\nimport { GroupBy } from '@rango-dev/ui';\n\nexport const groupSwapsByDate: GroupBy = swaps => {\n const output: Map<\n string,\n {\n title: string;\n swaps: PendingSwap[];\n }\n > = new Map([\n [\n 'today',\n {\n title: 'Today',\n swaps: [],\n },\n ],\n [\n 'week',\n {\n title: 'This week',\n swaps: [],\n },\n ],\n [\n 'month',\n {\n title: 'This month',\n swaps: [],\n },\n ],\n [\n 'year',\n {\n title: 'This year',\n swaps: [],\n },\n ],\n [\n 'history',\n {\n title: 'History',\n swaps: [],\n },\n ],\n ]);\n\n const now = dayjs();\n swaps.forEach(swap => {\n const swapDate = dayjs(Number(swap.creationTime));\n if (now.isSame(swapDate, 'day')) output.get('today')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'week')) output.get('week')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'month'))\n output.get('month')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'year')) output.get('year')?.swaps.push(swap);\n else output.get('history')?.swaps.push(swap);\n });\n\n return Array.from(output.values());\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';\nimport { groupSwapsByDate } from '../utils/date';\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 list={pendingSwaps}\n groupBy={groupSwapsByDate}\n onSwapClick={requestId => {\n setSelectedSwap(requestId);\n navigate(navigationRoutes.swaps + `/${requestId}`, { replace: true });\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 { removeDuplicateFrom } from '../utils/common';\ninterface PropTypes {\n supportedSwappers?: string[];\n}\nexport function LiquiditySourcePage({ supportedSwappers }: PropTypes) {\n const swappers = useMetaStore.use.meta().swappers;\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\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\n ? uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter((s) => s === item.title).length > 0\n )\n : uniqueSwappersGroups\n }\n onChange={(liquiditySource) =>\n toggleLiquiditySource(liquiditySource.title)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.liquiditySources)}\n loadingStatus={loadingMetaStatus}\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';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedChains?: string[];\n}\n\nexport function SelectChainPage(props: PropTypes) {\n const { type, supportedChains } = props;\n const blockchains = supportedChains\n ? useMetaStore.use\n .meta()\n .blockchains.filter((chain) => supportedChains.includes(chain.name))\n : useMetaStore.use.meta().blockchains;\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 { Asset, Token } from 'rango-sdk';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { tokensAreEqual } from '../utils/wallets';\nimport { useMetaStore } from '../store/meta';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedTokens?: Asset[];\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 = supportedTokens\n ? sourceTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n )\n : sourceTokens;\n\n const supportedDestinationTokens = supportedTokens\n ? destinationTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n )\n : destinationTokens;\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 const loadingMetaStatus = useMetaStore.use.loadingStatus();\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 loadingStatus={loadingMetaStatus}\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 {\n MAX_SLIPPAGE,\n MIN_SLIPPGAE,\n SLIPPAGES,\n} from '../constants/swapSettings';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\ninterface PropTypes {\n supportedSwappers?: string[];\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 loadingMetaStatus = useMetaStore.use.loadingStatus();\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 supportedSwappers &&\n uniqueSwappersGroups.filter(\n (item) => supportedSwappers.filter((s) => s === item.title).length > 0\n );\n\n const supportedUniqueSwappersGroups = supportedSwappers\n ? uniqueSwappersGroups.filter(\n (item) => supportedSwappers.filter((s) => s === item.title).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 loadingStatus={loadingMetaStatus}\n />\n );\n}\n","import {\n Alert,\n SecondaryPage,\n styled,\n Wallet,\n WalletState,\n WalletInfo,\n} from '@rango-dev/ui';\nimport React, { useEffect, useRef, 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';\nimport { useMetaStore } from '../store/meta';\nimport { Spinner } from '@rango-dev/ui';\nimport { LoadingFailedAlert } from '@rango-dev/ui';\n\ninterface PropTypes {\n supportedWallets?: WalletType[];\n multiWallets: boolean;\n}\n\nconst ListContainer = styled('div', {\n display: 'grid',\n gap: '.5rem',\n gridTemplateColumns: ' repeat(2, minmax(0, 1fr))',\n alignContent: 'baseline',\n padding: '0.5rem',\n overflowY: 'auto',\n});\n\nexport const LoaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n position: 'absolute',\n top: '50%',\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 || Object.values(WalletType)\n );\n const walletsRef = useRef<WalletInfo[]>();\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 loadingMetaStatus = useMetaStore.use.loadingStatus();\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 const disconnectConnectingWallets = () => {\n const connectingWallets =\n walletsRef.current?.filter(\n (wallet) => wallet.state === WalletState.CONNECTING\n ) || [];\n for (const wallet of connectingWallets) {\n disconnect(wallet.type);\n }\n };\n useEffect(() => {\n toggleConnectWalletsButton();\n return () => {\n disconnectConnectingWallets();\n toggleConnectWalletsButton();\n };\n }, []);\n\n useEffect(() => {\n walletsRef.current = wallets;\n }, [wallets]);\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\">{walletErrorMessage}</Alert>\n </AlertContainer>\n )}\n {loadingMetaStatus === 'loading' && (\n <LoaderContainer className=\"loader\">\n <Spinner size={24} />\n </LoaderContainer>\n )}\n {loadingMetaStatus === 'failed' && <LoadingFailedAlert />}\n <ListContainer>\n {loadingMetaStatus === 'success' &&\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 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 { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\n\nexport function timeSince(timeMillis: number): string {\n const seconds = Math.floor((new Date().getTime() - timeMillis) / 1000);\n let intervalType: string;\n\n let interval = Math.floor(seconds / 31536000);\n if (interval >= 1) {\n intervalType = 'year';\n } else {\n interval = Math.floor(seconds / 2592000);\n if (interval >= 1) {\n intervalType = 'month';\n } else {\n interval = Math.floor(seconds / 86400);\n if (interval >= 1) {\n intervalType = 'day';\n } else {\n interval = Math.floor(seconds / 3600);\n if (interval >= 1) {\n intervalType = 'hour';\n } else {\n interval = Math.floor(seconds / 60);\n if (interval >= 1) {\n intervalType = 'minute';\n } else {\n interval = seconds;\n intervalType = 'second';\n }\n }\n }\n }\n }\n\n if (interval > 1 || interval === 0) {\n intervalType += 's';\n }\n\n return interval + ' ' + intervalType;\n}\n\nexport function getSwapDate(pendingSwap: PendingSwap) {\n return pendingSwap.finishTime\n ? `Finished ${timeSince(parseInt(pendingSwap.finishTime))} ago @ ${new Date(\n parseInt(pendingSwap.finishTime)\n ).toLocaleString()}`\n : `Started ${timeSince(\n parseInt(pendingSwap.creationTime)\n )} ago @ ${new Date(\n parseInt(pendingSwap.creationTime)\n ).toLocaleString()}`;\n}\n","import React from 'react';\nimport { SecondaryPage, Spinner, Alert, styled } from '@rango-dev/ui';\nimport { LoaderContainer } from '../pages/WalletsPage';\n\nconst PlaceholderContainer = styled('div', { height: '450px' });\n\ninterface PropTypes {\n requestId: string;\n loading: boolean;\n onBack: () => void;\n}\n\nexport function SwapDetailsPlaceholder(props: PropTypes) {\n const { requestId, loading, onBack } = props;\n\n return (\n <SecondaryPage title=\"Swap Details\" textField={false} onBack={onBack}>\n <PlaceholderContainer>\n {loading ? (\n <LoaderContainer>\n <Spinner size={24} />\n </LoaderContainer>\n ) : (\n <Alert\n type=\"secondary\"\n title={`Swap with request ID = ${requestId} not found.`}\n />\n )}\n </PlaceholderContainer>\n </SecondaryPage>\n );\n}\n","import React, { useEffect, useState } 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, Spacer } from '@rango-dev/ui';\nimport { useUiStore } from '../store/ui';\nimport {\n cancelSwap,\n PendingSwapNetworkStatus,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport {\n getCurrentBlockchainOfOrNull,\n getCurrentStep,\n getRelatedWalletOrNull,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { getSwapDate } from '../utils/time';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport {\n getLastConvertedTokenInFailedSwap,\n getSwapMessages,\n isNetworkStatusInWarningState,\n shouldRetrySwap,\n} from '../utils/swap';\nimport { TokenPreview } from '../components/TokenPreview';\nimport { numberToString } from '../utils/numbers';\n//@ts-ignore\nimport { t } from 'i18next';\nimport { SwapDetailsPlaceholder } from '../components/SwapDetailsPlaceholder';\n\nexport function SwapDetailsPage() {\n const selectedSwapRequestId = useUiStore.use.selectedSwapRequestId();\n const { canSwitchNetworkTo, connect } = useWallets();\n const retry = useBestRouteStore.use.retry();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const [isCopied, handleCopy] = useCopyToClipboard(2000);\n const { manager } = useManager();\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n setTimeout(() => {\n setLoading(false);\n }, 5000);\n }, []);\n\n const pendingSwaps = getPendingSwaps(manager);\n const selectedSwap = pendingSwaps.find(\n ({ swap }) => swap.requestId === selectedSwapRequestId\n );\n\n const onCancel = () => {\n const swap = manager?.get(selectedSwap?.id!);\n if (swap) cancelSwap(swap);\n };\n const swap = selectedSwap?.swap;\n\n if (!swap)\n return (\n <SwapDetailsPlaceholder\n requestId={selectedSwapRequestId || ''}\n loading={loading}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n />\n );\n\n const firstStep = swap.steps[0];\n const lastStep = swap.steps[swap.steps.length - 1];\n const fromAmount = numberToString(swap.inputAmount);\n const toAmount = numberToString(swap.simulationResult.outputAmount);\n\n const currentStep = getCurrentStep(swap);\n\n const currentStepBlockchain = currentStep\n ? getCurrentBlockchainOfOrNull(swap, currentStep)\n : null;\n const currentStepWallet = currentStep\n ? getRelatedWalletOrNull(swap, currentStep)\n : null;\n const currentStepNetworkStatus = currentStep?.networkStatus;\n\n const swapMessages = getSwapMessages(swap, currentStep);\n\n const networkWarningState = isNetworkStatusInWarningState(currentStep);\n\n const swapDate = getSwapDate(swap);\n\n const shouldRetry = shouldRetrySwap(swap);\n\n const switchNetwork =\n !!currentStepBlockchain &&\n !!currentStepWallet?.walletType &&\n currentStepNetworkStatus ===\n PendingSwapNetworkStatus.WaitingForNetworkChange &&\n canSwitchNetworkTo(currentStepWallet?.walletType, currentStepBlockchain)\n ? connect.bind(null, currentStepWallet.walletType, currentStepBlockchain)\n : undefined;\n\n const lastConvertedTokenInFailedSwap =\n getLastConvertedTokenInFailedSwap(swap);\n\n return (\n <SwapHistory\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n previewInputs={\n <>\n <TokenPreview\n chain={{\n displayName: firstStep?.fromBlockchain || '',\n // @ts-ignore\n logo: firstStep?.fromBlockchainLogo || '',\n }}\n token={{\n symbol: firstStep?.fromSymbol || '',\n image: firstStep?.fromLogo || '',\n }}\n amount={fromAmount}\n label={t('From')}\n loadingStatus={'success'}\n />\n <Spacer size={12} direction=\"vertical\" />\n <TokenPreview\n chain={{\n displayName: lastStep?.toBlockchain || '',\n //@ts-ignore\n logo: lastStep?.toBlockchainLogo || '',\n }}\n token={{\n symbol: lastStep?.toSymbol || '',\n image: lastStep?.toLogo || '',\n }}\n amount={toAmount}\n label={t('To')}\n loadingStatus={'success'}\n />\n </>\n }\n //todo: move PendingSwap type to rango-types\n pendingSwap={swap}\n onCopy={handleCopy}\n isCopied={isCopied}\n onCancel={onCancel}\n shortMessage={swapMessages.shortMessage}\n detailedMessage={swapMessages.detailedMessage}\n currentStepBlockchain={currentStepBlockchain || ''}\n switchNetwork={switchNetwork}\n type={\n networkWarningState ? 'warning' : swap.extraMessageSeverity || undefined\n }\n date={swapDate}\n {...(shouldRetry && {\n onRetry: () => {\n retry(swap);\n setTimeout(() => {\n navigate(navigationRoutes.home);\n }, 0);\n },\n })}\n {...(lastConvertedTokenInFailedSwap && {\n lastConvertedTokenInFailedSwap: {\n blockchain: lastConvertedTokenInFailedSwap.blockchain,\n outputAmount: lastConvertedTokenInFailedSwap.outputAmount || '',\n symbol: lastConvertedTokenInFailedSwap.symbol,\n },\n })}\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 { SwapDetailsPage } from '../pages/SwapDetailsPage';\nimport { WidgetConfig } from '../types';\n\nconst getAbsolutePath = (path: string) => path.replace('/', '');\n\ninterface PropTypes {\n config?: WidgetConfig;\n}\n\nexport function AppRoutes(props: PropTypes) {\n const { config } = props;\n\n return useRoutes([\n {\n path: getAbsolutePath(navigationRoutes.home),\n element: <Home />,\n },\n {\n path: getAbsolutePath(navigationRoutes.fromChain),\n element: (\n <SelectChainPage\n type=\"from\"\n supportedChains={config?.from?.blockchains}\n />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.toChain),\n element: (\n <SelectChainPage type=\"to\" supportedChains={config?.to?.blockchains} />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.fromToken),\n element: (\n <SelectTokenPage type=\"from\" supportedTokens={config?.from?.tokens} />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.toToken),\n element: (\n <SelectTokenPage type=\"to\" supportedTokens={config?.to?.tokens} />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.settings),\n element: <SettingsPage supportedSwappers={config?.liquiditySources} />,\n },\n {\n path: getAbsolutePath(navigationRoutes.liquiditySources),\n element: (\n <LiquiditySourcePage supportedSwappers={config?.liquiditySources} />\n ),\n },\n { path: getAbsolutePath(navigationRoutes.swaps), element: <HistoryPage /> },\n {\n path: navigationRoutes.swapDetails,\n element: <SwapDetailsPage />,\n },\n {\n path: getAbsolutePath(navigationRoutes.wallets),\n element: (\n <WalletsPage\n supportedWallets={config?.wallets}\n multiWallets={\n typeof config?.multiWallets === 'undefined'\n ? true\n : config.multiWallets\n }\n />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.confirmSwap),\n element: <ConfirmSwapPage />,\n },\n ]);\n}\n","import {\n Button,\n AddWalletIcon,\n Typography,\n styled,\n Spinner,\n} 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 { fetchingBalanceSelector, useWalletsStore } from '../store/wallets';\nimport {\n calculateWalletUsdValue,\n getSelectableWallets,\n tokensAreEqual,\n} from '../utils/wallets';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { WidgetConfig } from '../types';\nimport { useTranslation } from 'react-i18next';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { Image } from '@rango-dev/ui';\n\nconst Header = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n '.balance': {\n display: 'flex',\n },\n});\n\nconst WalletImageContainer = styled('div', {\n marginLeft: -15,\n marginRight: '$6',\n borderRadius: '99999px',\n});\n\nexport type LayoutProps = {\n config?: WidgetConfig;\n};\n\nexport function Layout({ config }: 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 const { blockchains, tokens } = useMetaStore.use.meta();\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 setAffiliateRef = useSettingsStore.use.setAffiliateRef();\n\n const totalBalance = calculateWalletUsdValue(balances);\n const connectWalletsButtonDisabled =\n useUiStore.use.connectWalletsButtonDisabled();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const fetchingBalance = useWalletsStore(fetchingBalanceSelector);\n\n const { t } = useTranslation();\n useEffect(() => {\n const chain = blockchains.find(\n (chain) => chain.name === config?.to?.blockchain\n );\n const token = tokens.find((t) =>\n tokensAreEqual(t, config?.to?.token || null)\n );\n setToChain(chain || null);\n setToToken(token || null);\n }, [config?.to?.token, config?.to?.blockchain]);\n\n useEffect(() => {\n setInputAmount(config?.amount?.toString() || '');\n }, [config?.amount]);\n\n useEffect(() => {\n const chain = blockchains.find(\n (chain) => chain.name === config?.from?.blockchain\n );\n const token = tokens.find((t) =>\n tokensAreEqual(t, config?.from?.token || null)\n );\n\n setFromChain(chain || null);\n setFromToken(token || null);\n }, [config?.from?.token, config?.from?.blockchain]);\n\n useEffect(() => {\n setAffiliateRef(config?.affiliateRef || null);\n }, [config?.affiliateRef]);\n return (\n <>\n <Header>\n <Button\n size=\"small\"\n suffix={<AddWalletIcon size={20} />}\n variant=\"ghost\"\n flexContent\n loading={loadingMetaStatus === 'loading'}\n disabled={loadingMetaStatus === 'failed'}\n onClick={() => {\n if (!connectWalletsButtonDisabled)\n navigate(navigationRoutes.wallets);\n }}\n >\n {connectedWalletsImages?.length ? (\n connectedWalletsImages.map((walletImage, index) => (\n <WalletImageContainer key={index}>\n <Image src={walletImage} size={24} />\n </WalletImageContainer>\n ))\n ) : (\n <></>\n )}\n <div className=\"balance\">\n <Typography variant=\"body2\">\n {!accounts?.length\n ? t('Connect Wallet')\n : `$${totalBalance || 0}`}\n </Typography>\n {fetchingBalance && <Spinner />}\n </div>\n </Button>\n </Header>\n <AppRoutes config={config} />\n </>\n );\n}\n","import { globalCss } from '@rango-dev/ui';\n\nexport const globalStyles = globalCss({\n '*': {\n '&::-webkit-scrollbar': { width: '$8', height: '$8' },\n '&::-webkit-scrollbar-thumb': {\n backgroundColor: '$neutrals400',\n borderRadius: '$10',\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 body: {\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 { Theme } from '../types';\nimport { shadeColor } from '../utils/common';\nimport usePrevious from './usePrevious';\n\nexport function useTheme({\n colors: themeColors,\n fontFamily = 'Robot',\n borderRadius = 8,\n mode = 'auto',\n}: Theme) {\n const theme = useSettingsStore.use.theme();\n const fetchMeta = useMetaStore.use.fetchMeta();\n const setTheme = useSettingsStore.use.setTheme();\n\n const primary = themeColors?.primary || '#5FA425',\n background = themeColors?.background || '#fff',\n foreground = themeColors?.foreground || '#000',\n error = themeColors?.error || '#FF0000',\n warning = themeColors?.warning || '#F5A623',\n success = themeColors?.success || '#0070F3';\n const colors = {\n neutrals200: '#FAFAFA',\n neutrals300: '#f2f2f2',\n neutrals400: '#dedede',\n neutrals500: '#cccccc',\n neutrals600: '#acacac',\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 shadows: {\n s: '0px 3px 5px 3px #f0f2f5, 0px 6px 10px 3px #f0f2f5, 0px 1px 18px 3px #f0f2f5',\n },\n });\n\n const customeDarkTheme = createTheme({\n colors: {\n ...colors,\n neutrals200: '#111111',\n neutrals300: '#333333',\n neutrals400: '#444444',\n neutrals500: '#acacac',\n neutrals600: '#cccccc',\n neutrals700: '#dedede',\n neutrals800: '#f2f2f2',\n neutrals900: '#FAFAFA',\n foreground: background,\n background: foreground,\n },\n radii: {\n 5: `${borderRadius}px`,\n },\n shadows: {\n s: '0px 3px 5px 3px #222, 0px 6px 10px 3px #222, 0px 1px 18px 3px #222',\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 useEffect(() => {\n if (mode !== 'auto') setTheme(mode);\n }, [mode]);\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 checkWaitingForNetworkChange,\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 checkWaitingForNetworkChange(manager);\n }}\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, useState } 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, WalletType } 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 { WidgetConfig } from './types';\nimport useSelectLanguage from './hooks/useSelectLanguage';\nimport './i18n';\nimport QueueManager from './QueueManager';\nimport { useUiStore } from './store/ui';\nimport { navigationRoutes } from './constants/navigationRoutes';\n\nexport type WidgetProps = {\n config?: WidgetConfig;\n};\n\nexport const SwapBox: React.FC<WidgetProps> = ({ config }) => {\n globalStyles();\n globalFont(config?.theme?.fontFamily || 'Roboto');\n\n const { activeTheme } = useTheme({ ...config?.theme });\n const { blockchains } = useMetaStore.use.meta();\n const disconnectWallet = useWalletsStore.use.disconnectWallet();\n const connectWallet = useWalletsStore.use.connectWallet();\n const { changeLanguage } = useSelectLanguage();\n const clearConnectedWallet = useWalletsStore.use.clearConnectedWallet();\n const [lastConnectedWalletWithNetwork, setLastConnectedWalletWithNetwork] =\n useState<string>('');\n const [disconnectedWallet, setDisconnectedWallet] = useState<WalletType>();\n const currentPage = useUiStore.use.currentPage();\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 state,\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 if (event === Events.ACCOUNTS && state.connected) {\n const key = `${type}-${state.network}-${value}`;\n\n if (state.connected) {\n setLastConnectedWalletWithNetwork(key);\n }\n }\n\n if (event === Events.NETWORK && state.network) {\n const key = `${type}-${state.network}`;\n setLastConnectedWalletWithNetwork(key);\n }\n };\n let providers = allProviders();\n\n useEffect(() => {\n const wallets = config?.wallets;\n clearConnectedWallet();\n providers = !wallets\n ? allProviders()\n : allProviders().filter((provider) => {\n const type = provider.config.type;\n return wallets.find((w) => w === type);\n });\n }, [config?.wallets]);\n\n useEffect(() => {\n changeLanguage(config?.language || 'en');\n }, [config?.language]);\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 fixedHeight={currentPage !== navigationRoutes.home}\n // style={\n // currentPage !== navigationRoutes.home && config?.theme?.height\n // ? {\n // height: config?.theme?.height,\n // width: config?.theme?.width || 'auto',\n // }\n // : {\n // width: config?.theme?.width || 'auto',\n // }\n // }\n >\n <AppRouter\n lastConnectedWallet={lastConnectedWalletWithNetwork}\n disconnectedWallet={disconnectedWallet}\n clearDisconnectedWallet={() => {\n setDisconnectedWallet(undefined);\n }}\n >\n <Layout config={config} />\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","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","debounce","fn","time","timeoutId","wrapper","args","_len","_key","arguments","clearTimeout","setTimeout","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","inputIsZero","title","disabled","hasWarning","canComputePriceImpact","inputAmount","requiredWallets","getUsdFeeOfStep","step","totalFeeInUsd","fee","expenseType","unitPrice","getTotalFeeInUsd","totalFee","hasHighFee","getMinRequiredSlippage","slippages","slippage","recommendedSlippage","hasProperSlippage","userSlippage","minRequiredSlippage","createBestRouteRequestBody","disabledLiquiditySources","checkPrerequisites","affiliateRef","selectedWalletsMap","selectedWallet","chainAndAccounts","connectedWallet","addresses","filteredBlockchains","requestBody","swapperGroups","swappersGroupsExclude","getWalletsForNewSwap","getRouteOutputAmount","outputAmount","getPercentageChange","oldValue","newValue","isOutputAmountChangedALot","oldRoute","newRoute","oldOutputAmount","newOutputAmount","percentageChange","toNumber","getBalanceWarnings","validationStatus","walletsSortedByRequiredWallets","selectedWallet1","selectedWallet2","indexOf","getRequiredBalanceOfWallet","ok","currentAmount","requiredAmount","reason","warningMessage","calcOutputUsdValue","tokenPrice","isNetworkStatusInWarningState","pendingSwapStep","networkStatus","PendingSwapNetworkStatus","NetworkChanged","getSwapMessages","pendingSwap","currentStep","textForRemove","message","extraMessage","detailedMessage","extraMessageDetail","networkStatusExtraMessageDetail","networkWarningState","networkStatusExtraMessage","WaitingForConnectingWallet","WaitingForQueue","WaitingForNetworkChange","isRpc","shortMessage","content","long","getLastConvertedTokenInFailedSwap","resultToken","status","lastSuccessStep","steps","slice","reverse","toBlockchain","toSymbol","toSymbolAddress","shouldRetrySwap","finishTime","Date","getTime","searchParamsToToken","searchParams","symbolAndAddress","getBestRouteToTokenUsdPrice","isNumberOfSwapsChanged","route1","route2","route1Swaps","route2Swaps","isRouteSwappersUpdated","route1Swappers","swapperId","route2Swappers","isRouteInternalCoinsUpdated","route1InternalCoins","route2InternalCoins","isRouteChanged","relatedFeeStatus","item","requiredAssets","isRouteParametersChanged","params","store","prevState","currentState","customSlippage","infiniteApprove","getBestRouteStatus","createSelectors","_store","use","k","keys","httpService","RangoClient","process","env","REACT_APP_API_KEY","SLIPPAGES","DEFAULT_SLIPPAGE","HIGH_SLIPPAGE","MAX_SLIPPAGE","MIN_SLIPPGAE","useMetaStore","create","set","meta","popularTokens","swappers","loadingStatus","fetchMeta","response","getAllMetadata","chainThatHasTokenInMetaResponse","enabledChains","enabled","useSettingsStore","persist","subscribeWithSelector","theme","setSlippage","setCustomSlippage","setAffiliateRef","toggleAllLiquiditySources","swappersGroup","swapper","swapperGroup","toggleInfiniteApprove","toggleLiquiditySource","liquiditySource","setTheme","useWalletsStore","connectWallet","getWalletsDetails","Error","disconnectWallet","initSelectedWallets","requiredChains","useBestRouteStore","anyWalletSelected","firstWalletWithMatchedChain","setSelectedWallet","clearConnectedWallet","subscribe","setState","sourceTokens","destinationTokens","sourceTokensWithBalance","destinationTokensWithBalance","equalityFn","shallow","fetchingBalanceSelector","getUsdValue","setBestRoute","setFromChain","setDefaultToken","setFromToken","setToChain","setToToken","setInputAmount","retry","failedIndex","firstStep","lastStep","fromBlockchain","fromSymbol","fromSymbolAddress","sortedSourceTokens","sortedDestinationTokens","switchFromAndTo","bestRouteStore","settingsStore","abortController","fetchBestRoute","abort","AbortController","getBestRoute","signal","then","res","catch","code","debouncedFetchBestRoute","bestRouteParamsListener","SearchParams","useUiStore","connectWalletsButtonDisabled","selectedSwapRequestId","currentPage","toggleConnectWalletsButton","setSelectedSwap","requestId","setCurrentPage","path","UpdateUrl","firstRender","useRef","setSearchParams","useSearchParams","location","useLocation","firstRenderSearchParams","search","searchParamsRef","useEffect","createSearchParams","value","key","pathname","fromChainString","fromTokenString","toChainString","toTokenString","FROM_CHAIN","FROM_TOKEN","TO_CHAIN","TO_TOKEN","FROM_AMOUNT","get","PercentageChange","props","showPercentageChange","React","Typography","variant","Box","styled","display","flexDirection","width","Container","boxSizing","borderRadius","padding","variants","filled","backgroundColor","outlined","border","defaultVariants","justifyContent","alignItems","minHeight","whiteSpace","overflow","textOverflow","paddingLeft","Options","ImagePlaceholder","height","OutputContainer","windth","position","paddingRight","TokenInfo","navigate","useNavigate","useTranslation","tokenBalanceReal","ItemSuffix","style","InfoCircleIcon","size","AngleDownIcon","className","onClick","Spacer","Button","prefix","Image","src","suffix","align","displayName","TextField","autoFocus","placeholder","right","bottom","onChange","event","onAmountChange","target","undefined","paddingTop","Logo","fill","margin","StyledAnchor","textDecoration","BottomLogo","href","xmlns","viewBox","id","d","SwithFromAndTo","count","Footer","errorMessages","genericServerError","ButtonsContainer","HeaderButtons","onClickRefresh","Tooltip","RetryIcon","HistoryIcon","SettingsIcon","FromContainer","paddingBottom","SwitchButtonContainer","left","transform","BestRouteContainer","Alerts","Home","isRouterInContext","useInRouterContext","setCount","useState","fetchingBestRoute","bestRouteError","errorMessage","showBestRoute","outToInRatio","swapButtonState","highFee","bind","Header","prev","VerticalSwapIcon","BestRoute","feeWarning","totalTime","Alert","Route","children","ref","AppRouter","Router","MemoryRouter","evmChains","isEvmBlockchain","useQueueManager","lastConnectedWallet","clearDisconnectedWallet","disconnectedWallet","notifier","useNavigateBack","navigateBackFrom","currentRoute","window","history","idx","TokenPreview","label","fontSize","RoutesOverview","routes","isLast","ChevronRightIcon","GasIcon","ConfirmSwapErrorTypes","ConfirmSwapWarningTypes","useConfirmSwap","initialRoute","proceedAnywayRef","confiremedRouteRef","abortControllerRef","setLoading","errors","setErrors","warnings","setWarnings","swapSettings","disabledSwappersGroups","newSwap","calculatePendingSwap","confiremedRoute","requestAmount","NO_ROUTE","confirmSwapState","routeChanged","newRouteOutputUsdValue","ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS","ROUTE_AND_OUTPUT_AMOUNT_UPDATED","ROUTE_COINS_UPDATED","ROUTE_UPDATED","ROUTE_SWAPPERS_UPDATED","balanceWarnings","enoughBalance","INSUFFICIENT_BALANCE","messages","INSUFFICIENT_SLIPPAGE","noErrors","noWarnings","REQUEST_FAILED","ChangeSlippageButton","StyledMessage","MinRequiredSlippage","direction","ConfirmSwapErrors","List","showListStyle","true","ListItem","listStyleType","listStylePosition","Message","BalanceWarnings","warning","ConfirmSwapWarnings","HighSlippageWarning","selectedSlippage","footer","ConfirmSwapExtraMessages","highSlippage","ConfirmSwapPage","fetchingBestRouteError","bestRouteloadingStatus","manager","useManager","showHighSlippageWarning","connect","useWallets","confirmDisabled","toAmount","handleConnectChain","ConfirmSwap","onBack","onConfirm","previewInputs","blockchainLogo","previewRoutes","extraMessages","confirmButtonTitle","getPendingSwaps","getAll","q","storage","getStorage","creationTime","groupSwapsByDate","output","Map","now","dayjs","swapDate","isSame","values","HistoryPage","pendingSwaps","History","groupBy","onSwapClick","LiquiditySourcePage","supportedSwappers","uniqueSwappersGroups","types","LiquiditySourcesSelector","toggleAll","SelectChainPage","BlockchainSelector","SelectTokenPage","supportedTokens","supportedSourceTokens","supportedToken","supportedDestinationTokens","TokenSelector","SettingsPage","supportedUniqueSwappersGroups","Settings","onSlippageChange","onLiquiditySourcesClick","selectedLiquiditySources","NaN","onCustomSlippageChange","minSlippage","maxSlippage","selectedTheme","onThemeChange","ListContainer","gap","gridTemplateColumns","alignContent","overflowY","LoaderContainer","top","AlertContainer","WalletsPage","supportedWallets","multiWallets","disconnect","walletsRef","sortedWallets","detectMobileScreens","walletErrorMessage","setWalletErrorMessage","onSelectWallet","w","WalletState","e","disconnectConnectingWallets","connectingWallets","SecondaryPage","textField","Spinner","LoadingFailedAlert","index","Wallet","useCopyToClipboard","resetInterval","isCopied","setCopied","handleCopy","useCallback","text","copy","timeout","timeSince","timeMillis","floor","intervalType","interval","getSwapDate","toLocaleString","PlaceholderContainer","SwapDetailsPlaceholder","SwapDetailsPage","canSwitchNetworkTo","selectedSwap","onCancel","cancelSwap","simulationResult","getCurrentStep","currentStepBlockchain","getCurrentBlockchainOfOrNull","currentStepWallet","getRelatedWalletOrNull","currentStepNetworkStatus","swapMessages","shouldRetry","switchNetwork","lastConvertedTokenInFailedSwap","SwapHistory","fromBlockchainLogo","fromLogo","toBlockchainLogo","toLogo","onCopy","extraMessageSeverity","date","onRetry","getAbsolutePath","AppRoutes","config","useRoutes","element","WalletImageContainer","marginLeft","marginRight","Layout","connectedWalletsImages","totalBalance","fetchingBalance","AddWalletIcon","flexContent","walletImage","globalStyles","globalCss","globalFont","fontFamily","body","usePrevious","useTheme","colors","themeColors","mode","primary","background","foreground","success","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","shadows","customeDarkTheme","OSTheme","setOSTheme","switchTheme","matches","matchMedia","addEventListener","removeEventListener","prevFont","useLayoutEffect","classList","document","remove","getActiveTheme","activeTheme","useSelectLanguage","i18n","currentLanguage","language","changeLanguage","languages","Backend","LanguageDetector","initReactI18next","init","resources","en","translation","tr","fallbackLng","debug","whitelist","QueueManager","providers","getSigners","allBlockchains","blockchainsObj","getSupportedChainNames","allProviders","context","evmNetworkChainInfo","convertEvmBlockchainMetaToEvmChainInfo","console","log","ManagerProvider","queuesDefs","swapQueueDef","onPersistedDataLoaded","checkWaitingForNetworkChange","isPaused","SwapBox","lastConnectedWalletWithNetwork","setLastConnectedWalletWithNetwork","setDisconnectedWallet","evmBasedChainNames","onUpdateState","Events","ACCOUNTS","NETWORK","provider","Provider","allBlockChains","SwapContainer","fixedHeight"],"mappings":"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"}
|