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