@rango-dev/widget-embedded 0.1.19 → 0.1.20-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/QueueManager.d.ts.map +1 -1
  2. package/dist/components/Footer.d.ts +111 -1
  3. package/dist/components/Footer.d.ts.map +1 -1
  4. package/dist/components/Layout.d.ts.map +1 -1
  5. package/dist/components/RoutesOverview.d.ts +111 -1
  6. package/dist/components/RoutesOverview.d.ts.map +1 -1
  7. package/dist/components/SwapDetailsPlaceholder.d.ts +111 -1
  8. package/dist/components/SwapDetailsPlaceholder.d.ts.map +1 -1
  9. package/dist/index.d.ts +1 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
  12. package/dist/pages/WalletsPage.d.ts.map +1 -1
  13. package/dist/utils/wallets.d.ts +2 -2
  14. package/dist/utils/wallets.d.ts.map +1 -1
  15. package/dist/widget-embedded.cjs.development.js +43 -40
  16. package/dist/widget-embedded.cjs.development.js.map +1 -1
  17. package/dist/widget-embedded.cjs.production.min.js +43 -40
  18. package/dist/widget-embedded.cjs.production.min.js.map +1 -1
  19. package/dist/widget-embedded.esm.js +45 -37
  20. package/dist/widget-embedded.esm.js.map +1 -1
  21. package/package.json +12 -10
  22. package/src/QueueManager.tsx +4 -0
  23. package/src/components/Layout.tsx +23 -17
  24. package/src/components/RoutesOverview.tsx +2 -2
  25. package/src/components/TokenInfo.tsx +4 -4
  26. package/src/components/TokenPreview.tsx +3 -3
  27. package/src/components/warnings/BalanceErrors.tsx +2 -2
  28. package/src/components/warnings/MinRequiredSlippage.tsx +2 -2
  29. package/src/index.tsx +1 -7
  30. package/src/pages/ConfirmSwapPage.tsx +14 -12
  31. package/src/pages/SwapDetailsPage.tsx +1 -1
  32. package/src/pages/WalletsPage.tsx +6 -2
  33. package/src/utils/wallets.ts +6 -3
@@ -1 +1 @@
1
- {"version":3,"file":"widget-embedded.cjs.production.min.js","sources":["../src/constants/numbers.ts","../src/utils/common.ts","../src/utils/numbers.ts","../src/utils/routing.ts","../src/store/selectors.ts","../src/utils/configs.ts","../src/services/httpService.ts","../src/constants/swapSettings.ts","../src/store/meta.ts","../src/store/settings.ts","../src/utils/wallets.ts","../src/utils/swap.ts","../src/store/wallets.ts","../src/store/bestRoute.ts","../src/constants/searchParams.ts","../src/constants/navigationRoutes.ts","../src/store/ui.ts","../src/components/UpdateUrl.tsx","../src/components/AppRouter.tsx","../src/hooks/useNavigateBack.ts","../src/components/TokenPreview.tsx","../src/components/RoutesOverview.tsx","../src/types/routing.ts","../src/hooks/useConfirmSwap.ts","../src/components/ChangeSlippageButton.tsx","../src/components/warnings/MinRequiredSlippage.tsx","../src/components/warnings/BalanceErrors.tsx","../src/components/ConfirmSwapErrors.tsx","../src/components/ConfirmSwapWarnings.tsx","../src/components/warnings/HighSlippageWarning.tsx","../src/components/warnings/ConfirmSwapExtraMessages.tsx","../src/components/PercentageChange.tsx","../src/pages/ConfirmSwapPage.tsx","../src/utils/queue.ts","../src/utils/date.ts","../src/pages/HistoryPage.tsx","../src/components/TokenInfo.tsx","../src/components/BottomLogo.tsx","../src/components/SwitchFromAndTo.tsx","../src/components/Footer.tsx","../src/constants/errors.ts","../src/components/HeaderButtons.tsx","../src/pages/Home.tsx","../src/pages/LiquiditySourcesPage.tsx","../src/pages/SelectChainPage.tsx","../src/pages/SelectTokenPage.tsx","../src/pages/SettingsPage.tsx","../src/pages/WalletsPage.tsx","../src/utils/time.ts","../src/components/SwapDetailsPlaceholder.tsx","../src/pages/SwapDetailsPage.tsx","../src/components/AppRoutes.tsx","../src/components/Layout.tsx","../src/globalStyles.ts","../src/hooks/usePrevious.ts","../src/hooks/useTheme.ts","../src/hooks/useSelectLanguage.ts","../src/i18n.js","../src/QueueManager.tsx","../src/index.tsx"],"sourcesContent":["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}\n\n\n\nexport function debounce(fn: Function, time: number) {\n let timeoutId: ReturnType<typeof setTimeout> | null;\n return wrapper;\n function wrapper(...args: any) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = null;\n fn(...args);\n }, time);\n }\n}\n","import { BigNumber } from 'bignumber.js';\nimport { BestRouteResponse } from 'rango-sdk';\n\nexport const percentToString = (p: number, fractions = 0): string =>\n (p * 100).toFixed(fractions);\nexport const secondsToString = (s: number): string => {\n const seconds = (s % 60).toString().padStart(2, '0');\n const minutes = parseInt((s / 60).toString())\n .toString()\n .padStart(2, '0');\n return `${minutes}:${seconds}`;\n};\n\nexport const numberToString = (\n number: BigNumber | string | null | undefined,\n minDecimals: number | null = null,\n maxDecimals: number | null = null\n): string => {\n if (number === null || number === undefined) return '';\n if (number === '') return '';\n const n = new BigNumber(number);\n const roundingMode = 1;\n let maxI = 1000;\n for (let i = 0; i < 60; i++) {\n if (new BigNumber(n.toFixed(i, roundingMode)).eq(n)) {\n maxI = i;\n break;\n }\n }\n\n if (n.gte(10000)) return n.toFormat(0, roundingMode);\n if (n.gte(1000))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))\n ),\n roundingMode\n );\n if (n.gte(100))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))\n ),\n roundingMode\n );\n if (n.gte(1))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 2))\n ),\n roundingMode\n );\n if (n.gte(0.01))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 4))\n ),\n roundingMode\n );\n for (let i = minDecimals || 4; i < 17; i++)\n if (n.gte(Math.pow(10, -i)))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, i))\n ),\n roundingMode\n );\n if (n.isEqualTo(0)) return '0';\n\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 8))),\n roundingMode\n );\n};\n\nexport const convertBigNumberToHex = (\n value: BigNumber,\n decimals: number\n): string => {\n return '0x' + value.shiftedBy(decimals).toString(16);\n};\n\nexport const uint8ArrayToHex = (buffer: Uint8Array): string => {\n // buffer is an ArrayBuffer\n // @ts-ignore\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n};\n\nexport function dollarToConciseString(num: number | undefined): string {\n if (!num) return '-';\n if (num < 1) return ' < 1$';\n if (num < 1000) return numberToString(new BigNumber(num)) + '$';\n if (num < 10_000) return parseInt((num / 100).toString()) / 10 + 'K';\n if (num < 1_000_000) return parseInt((num / 1000).toString()) + 'K';\n if (num < 100_000_000) return parseInt((num / 100000).toString()) / 10 + 'M';\n return parseInt((num / 1000000).toString()) + 'M';\n}\n\nexport function removeExtraDecimals(num: string, maxDecimals: number): string {\n try {\n if (!num.includes('.')) return num;\n const [b, f] = num.split('.');\n if (f && f.length > maxDecimals) {\n return `${b}.${f.substring(0, maxDecimals)}`;\n }\n return num;\n } catch (e) {\n return num;\n }\n}\n\nexport const totalArrivalTime = (data: BestRouteResponse | null) =>\n data?.result?.swaps?.reduce((a, b) => a + b.estimatedTimeInSeconds, 0) || 0;\n\nexport const rawFees = (data: BestRouteResponse): string =>\n (\n data?.result?.swaps?.flatMap((s) =>\n s.fee.map((f) => ({ swapperId: s.swapperId, fee: f }))\n ) || []\n )\n .reduce((partialSum, a) => partialSum + parseFloat(a.fee.amount), 0)\n .toFixed(3);\n\nexport const containsText = (text: string, searchText: string) =>\n text.toLowerCase().indexOf(searchText.toLowerCase()) > -1;\n\nexport const isPositiveNumber = (text?: string) =>\n !!text && parseFloat(text) > 0;\n10;\n","import {\n SimulationAssetAndAmount,\n SimulationValidationStatus,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport { BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';\nimport { areEqual } from './common';\nimport { BestRouteEqualityParams, Wallet } from '../types';\nimport { numberToString } from './numbers';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\n\nexport function searchParamsToToken(\n tokens: Token[],\n searchParams: string | null,\n chain: BlockchainMeta | null\n): Token | null {\n if (!chain) return null;\n return (\n tokens.find((token) => {\n const symbolAndAddress = searchParams?.split('--');\n if (symbolAndAddress?.length === 1)\n return (\n token.symbol === symbolAndAddress[0] &&\n token.address === null &&\n token.blockchain === chain.name\n );\n return (\n token.symbol === symbolAndAddress?.[0] &&\n token.address === symbolAndAddress?.[1] &&\n token.blockchain === chain.name\n );\n }) || null\n );\n}\n\nexport function getBestRouteToTokenUsdPrice(\n bestRoute: BestRouteResponse | null\n): number | null | undefined {\n return bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1].to\n .usdPrice;\n}\n\nexport function isNumberOfSwapsChanged(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1Swaps = route1.result?.swaps || [];\n const route2Swaps = route2.result?.swaps || [];\n return route1Swaps.length !== route2Swaps.length;\n}\n\nexport function isRouteSwappersUpdated(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1Swappers =\n route1.result?.swaps.map((swap) => swap.swapperId) || [];\n const route2Swappers =\n route2.result?.swaps.map((swap) => swap.swapperId) || [];\n return !areEqual(route1Swappers, route2Swappers);\n}\n\nexport function isRouteInternalCoinsUpdated(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1InternalCoins =\n route1.result?.swaps.map((swap) => swap.to.symbol) || [];\n const route2InternalCoins =\n route2.result?.swaps.map((swap) => swap.to.symbol) || [];\n return !areEqual(route1InternalCoins, route2InternalCoins);\n}\n\nexport function isRouteChanged(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n): boolean {\n return (\n isNumberOfSwapsChanged(route1, route2) ||\n isRouteSwappersUpdated(route1, route2) ||\n isRouteInternalCoinsUpdated(route1, route2)\n );\n}\n\nexport function outToRatioHasWarning(\n fromUsdValue: BigNumber | null,\n outToInRatio: BigNumber | 0\n) {\n return (\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -10 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(200)))) ||\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -5 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(1000))))\n );\n}\n\nexport function getRequiredBalanceOfWallet(\n selectedWallet: Wallet,\n fee: SimulationValidationStatus[] | null\n): SimulationAssetAndAmount[] | null {\n if (fee === null) return null;\n const relatedFeeStatus = fee\n ?.find((item) => item.blockchain === selectedWallet.chain)\n ?.wallets.find(\n (wallet) =>\n wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase()\n );\n if (!relatedFeeStatus) return null;\n return relatedFeeStatus.requiredAssets;\n}\n\nexport function isRouteParametersChanged(params: BestRouteEqualityParams) {\n if (params.store === 'bestRoute') {\n const { prevState, currentState } = params;\n return (\n !!currentState.fromToken &&\n !!currentState.toToken &&\n (prevState.fromChain?.name !== currentState.fromChain?.name ||\n prevState.toChain?.name !== currentState.toChain?.name ||\n prevState.fromToken?.symbol !== currentState.fromToken?.symbol ||\n prevState.toToken?.symbol !== currentState.toToken?.symbol ||\n prevState.fromToken?.blockchain !== prevState.fromToken?.blockchain ||\n prevState.toToken?.blockchain !== currentState.toToken?.blockchain ||\n prevState.fromToken?.address !== currentState.fromToken?.address ||\n prevState.toToken?.address !== currentState.toToken?.address ||\n prevState.inputAmount !== currentState.inputAmount)\n );\n } else if (params.store === 'settings') {\n const { prevState, currentState } = params;\n return (\n prevState.slippage !== currentState.slippage ||\n prevState.customSlippage !== currentState.customSlippage ||\n prevState.disabledLiquiditySources?.length !==\n currentState.disabledLiquiditySources?.length ||\n prevState.infiniteApprove ||\n currentState.infiniteApprove\n );\n }\n return false;\n}\n\nexport function getFormatedBestRoute(\n bestRoute: BestRouteResponse | null\n): BestRouteResponse | null {\n if (!bestRoute) return null;\n\n const formatedSwaps = (bestRoute.result?.swaps || []).map((swap) => ({\n ...swap,\n fromAmount: numberToString(swap.fromAmount, 6, 6),\n toAmount: numberToString(swap.toAmount, 6, 6),\n }));\n\n return {\n ...bestRoute,\n ...(bestRoute.result && {\n result: { ...bestRoute.result, swaps: formatedSwaps },\n }),\n };\n}\n\nexport function getFormatedPendingSwap(pendingSwap: PendingSwap): PendingSwap {\n const formatedSteps = pendingSwap.steps.map((step) => ({\n ...step,\n feeInUsd: numberToString(step.feeInUsd, 4, 4),\n outputAmount: numberToString(step.outputAmount, 6, 6),\n expectedOutputAmountHumanReadable: numberToString(\n step.expectedOutputAmountHumanReadable,\n 6,\n 6\n ),\n }));\n\n return {\n ...pendingSwap,\n inputAmount: numberToString(pendingSwap.inputAmount, 6, 6),\n steps: formatedSteps,\n };\n}\n\n//todo: refactor bestRoute store and add loadingStatus\nexport const getBestRouteStatus = (loading: boolean, error: boolean) => {\n if (loading) return 'loading';\n if (error) return 'failed';\n else return 'success';\n};\n","import { StoreApi, UseBoundStore } from 'zustand';\n\ntype State = object;\n\ntype WithSelectors<S> = S extends { getState: () => infer T }\n ? S & { use: { [K in keyof T]: () => T[K] } }\n : never;\n\nconst createSelectors = <S extends UseBoundStore<StoreApi<State>>>(_store: S) => {\n let store = _store as WithSelectors<typeof _store>;\n store.use = {};\n for (let k of Object.keys(store.getState())) {\n (store.use as any)[k] = () => store((s) => s[k as keyof typeof s]);\n }\n\n return store;\n};\n\nexport default createSelectors;\n","export interface Configs {\n API_KEY: string;\n}\n\nconst RANGO_PUBLIC_API_KEY = 'c6381a79-2817-4602-83bf-6a641a409e32';\n\nlet configs: Configs = {\n API_KEY: RANGO_PUBLIC_API_KEY,\n};\n\nexport function getConfig(name: keyof Configs) {\n return configs[name];\n}\n\nexport function setConfig(name: keyof Configs, value: any) {\n configs[name] = value;\n\n return value;\n}\n\nexport function initConfig(nextConfigs: Configs) {\n let clonedConfigs;\n if (typeof structuredClone === 'function') {\n clonedConfigs = structuredClone(nextConfigs);\n } else {\n clonedConfigs = JSON.parse(JSON.stringify(nextConfigs));\n }\n configs = clonedConfigs;\n return configs;\n}\n","import { RangoClient } from 'rango-sdk';\nimport { getConfig } from '../utils/configs';\n\n// this API key is limited and\n// it is only for test purpose\nexport const RANGO_PUBLIC_API_KEY = 'c6381a79-2817-4602-83bf-6a641a409e32';\n\nlet rango: RangoClient | undefined = undefined;\n\nexport const httpService = () => {\n if (rango) return rango;\n rango = new RangoClient(getConfig('API_KEY'));\n return rango;\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) =>\n chain.enabled &&\n chainThatHasTokenInMetaResponse.includes(chain.name)\n );\n response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);\n set({ meta: response, loadingStatus: 'success' });\n } catch (error) {\n set({ loadingStatus: 'failed' });\n }\n },\n }))\n);\n","import { create } from 'zustand';\nimport { persist, subscribeWithSelector } from 'zustand/middleware';\nimport { DEFAULT_SLIPPAGE } from '../constants/swapSettings';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\n\ntype Theme = 'auto' | 'dark' | 'light';\n\nexport interface SettingsState {\n slippage: number;\n customSlippage: number | null;\n infiniteApprove: boolean;\n disabledLiquiditySources: string[];\n theme: Theme;\n affiliateRef: string | null;\n setSlippage: (slippage: number) => void;\n setCustomSlippage: (customSlippage: number | null) => void;\n toggleInfiniteApprove: () => void;\n toggleLiquiditySource: (name: string) => void;\n setTheme: (theme: Theme) => void;\n toggleAllLiquiditySources: () => void;\n setAffiliateRef: (affiliateRef: string | null) => void;\n}\n\nexport const useSettingsStore = createSelectors(\n create<SettingsState>()(\n persist(\n subscribeWithSelector((set) => ({\n slippage: DEFAULT_SLIPPAGE,\n customSlippage: null,\n infiniteApprove: false,\n affiliateRef: null,\n disabledLiquiditySources: [],\n theme: 'auto',\n setSlippage: (slippage) =>\n set(() => ({\n slippage: slippage,\n })),\n setCustomSlippage: (customSlippage) =>\n set(() => ({\n customSlippage: customSlippage,\n })),\n setAffiliateRef: (affiliateRef) =>\n set(() => ({\n affiliateRef,\n })),\n toggleAllLiquiditySources: () =>\n set((state) => {\n const { swappers } = useMetaStore.getState().meta;\n const swappersGroup = removeDuplicateFrom(\n swappers.map((swapper) => swapper.swapperGroup)\n );\n\n if (swappersGroup.length === state.disabledLiquiditySources.length)\n return { disabledLiquiditySources: [] };\n else {\n return {\n disabledLiquiditySources: swappersGroup,\n };\n }\n }),\n toggleInfiniteApprove: () =>\n set((state) => ({\n infiniteApprove: !state.infiniteApprove,\n })),\n toggleLiquiditySource: (name) =>\n set((state) => {\n if (state.disabledLiquiditySources.includes(name))\n return {\n disabledLiquiditySources: state.disabledLiquiditySources.filter(\n (liquiditySource) => liquiditySource != name\n ),\n };\n else\n return {\n disabledLiquiditySources:\n state.disabledLiquiditySources.concat(name),\n };\n }),\n setTheme: (theme) =>\n set(() => ({\n theme,\n })),\n })),\n {\n name: 'user-settings',\n }\n )\n )\n);\n","import {\n getCosmosExperimentalChainInfo,\n isEvmAddress,\n KEPLR_COMPATIBLE_WALLETS,\n Network,\n WalletState,\n WalletType,\n detectInstallLink,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\n\nimport {\n WalletInfo as ModalWalletInfo,\n WalletState as WalletStatus,\n SelectableWallet,\n} from '@rango-dev/ui';\nimport {\n BestRouteResponse,\n BlockchainMeta,\n Token,\n WalletDetail,\n} from 'rango-sdk';\nimport { isCosmosBlockchain } from 'rango-types';\nimport { readAccountAddress } from '@rango-dev/wallets-core';\nimport { ConnectedWallet, TokenBalance } from '../store/wallets';\nimport { numberToString } from './numbers';\nimport BigNumber from 'bignumber.js';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { ZERO } from '../constants/numbers';\nimport { Wallet } from '../types';\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 = [WalletType.UNKNOWN, WalletType.LEAP];\n\nexport function getlistWallet(\n getState: (type: WalletType) => WalletState,\n getWalletInfo: (type: WalletType) => WalletInfo,\n list: WalletType[]\n): ModalWalletInfo[] {\n return list\n .filter((wallet) => !excludedWallets.includes(wallet))\n .map((type) => {\n const {\n name,\n img: image,\n installLink,\n showOnMobile,\n } = getWalletInfo(type);\n const state = getStateWallet(getState(type));\n return {\n name,\n image,\n installLink: detectInstallLink(installLink),\n state,\n type,\n showOnMobile: typeof showOnMobile === 'undefined' ? false : true,\n };\n });\n}\n\nexport function walletAndSupportedChainsNames(\n supportedChains: BlockchainMeta[]\n): Network[] | null {\n if (!supportedChains) return null;\n let walletAndSupportedChainsNames: Network[] = [];\n walletAndSupportedChainsNames = supportedChains.map(\n (blockchainMeta) => blockchainMeta.name as Network\n );\n\n return walletAndSupportedChainsNames;\n}\n\nexport function prepareAccountsForWalletStore(\n wallet: WalletType,\n accounts: string[],\n evmBasedChains: string[],\n supportedChainNames: Network[] | null\n): Wallet[] {\n const result: Wallet[] = [];\n\n function addAccount(network: Network, address: string) {\n const newAccount: Wallet = {\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\ntype Blockchain = { name: string; accounts: ConnectedWallet[] };\n\nexport function getSelectableWallets(\n connectedWallets: ConnectedWallet[],\n selectedWallets: Wallet[],\n getWalletInfo: (type: WalletType) => WalletInfo\n): SelectableWallet[] {\n const selectableWallets: SelectableWallet[] = connectedWallets.map(\n (connectedWallet) => ({\n address: connectedWallet.address,\n walletType: connectedWallet.walletType,\n chain: connectedWallet.chain,\n image: getWalletInfo(connectedWallet.walletType).img,\n name: getWalletInfo(connectedWallet.walletType).name,\n selected: !!selectedWallets.find(\n (selectedWallet) =>\n selectedWallet.chain === connectedWallet.chain &&\n selectedWallet.walletType === connectedWallet.walletType\n ),\n })\n );\n\n return selectableWallets;\n}\n\nexport function getBalanceFromWallet(\n connectedWallets: ConnectedWallet[],\n chain: string,\n symbol: string,\n address: string | null\n): TokenBalance | null {\n if (connectedWallets.length === 0) return null;\n\n const selectedChainWallets = connectedWallets.filter(\n (wallet) => wallet.chain === chain\n );\n if (selectedChainWallets.length === 0) return null;\n\n return (\n selectedChainWallets\n .map(\n (wallet) =>\n wallet.balances?.find(\n (balance) =>\n (address !== null && balance.address === address) ||\n (address === null &&\n balance.address === address &&\n balance.symbol === symbol)\n ) || null\n )\n .filter((balance) => balance !== null)\n .sort(\n (a, b) => parseFloat(b?.amount || '0') - parseFloat(a?.amount || '1')\n )\n .find(() => true) || null\n );\n}\n\nexport function isAccountAndWalletMatched(\n account: Wallet,\n connectedWallet: ConnectedWallet\n) {\n return (\n account.address === connectedWallet.address &&\n account.chain === connectedWallet.chain\n );\n}\n\nexport function makeBalanceFor(\n wallet: Wallet,\n retrivedBalance: WalletDetail,\n tokens: Token[]\n): ConnectedWallet {\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: wallet.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 resetConnectedWalletState(\n connectedWallet: ConnectedWallet\n): ConnectedWallet {\n return { ...connectedWallet, loading: false, error: true };\n}\n\nexport const calculateWalletUsdValue = (connectedWallet: ConnectedWallet[]) => {\n const uniqueAccountAddresses = new Set<string | null>();\n const uniqueBalane: ConnectedWallet[] = connectedWallet?.reduce(\n (acc: ConnectedWallet[], current: ConnectedWallet) => {\n return acc.findIndex(\n (i) => i.address === current.address && i.chain === current.chain\n ) === -1\n ? [...acc, current]\n : acc;\n },\n []\n );\n\n const modifiedWalletBlockchains = uniqueBalane?.map((chain) => {\n const modifiedWalletBlockchain: Blockchain = {\n name: chain.chain,\n accounts: [],\n };\n if (!uniqueAccountAddresses.has(chain.address)) {\n uniqueAccountAddresses.add(chain.address);\n }\n uniqueAccountAddresses.forEach((accountAddress) => {\n if (chain.address === accountAddress)\n modifiedWalletBlockchain.accounts.push(chain);\n });\n return modifiedWalletBlockchain;\n });\n const total = numberToString(\n modifiedWalletBlockchains\n ?.flatMap((b) => b.accounts)\n ?.flatMap((a) => a?.balances)\n ?.map((b) =>\n new BigNumber(b?.amount || ZERO).multipliedBy(b?.usdPrice || 0)\n )\n ?.reduce((a, b) => a.plus(b), ZERO) || ZERO\n ).toString();\n\n return numberWithThousandSeperator(total);\n};\n\nfunction numberWithThousandSeperator(number: string | number): string {\n var parts = number.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n}\n\nexport const sortTokens = (tokens: TokenWithBalance[]): TokenWithBalance[] => {\n let walletConnected = !!tokens.some((token) => token.balance);\n if (!walletConnected) {\n return tokens\n .filter((token) => !token.address)\n .concat(\n tokens.filter((token) => token.address && !token.isSecondaryCoin),\n tokens.filter((token) => token.isSecondaryCoin)\n );\n }\n\n return tokens\n .filter((token) => !!token.balance)\n .sort(\n (tokenA, tokenB) =>\n parseFloat(tokenB.balance?.usdValue || '0') -\n parseFloat(tokenA.balance?.usdValue || '0')\n )\n .concat(\n tokens.filter((token) => !token.balance && !token.isSecondaryCoin),\n tokens.filter((token) => !token.balance && token.isSecondaryCoin)\n );\n};\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\nexport const isExperimentalChain = (\n blockchains: BlockchainMeta[],\n wallet: string\n): boolean => {\n const cosmosExperimentalChainInfo = getCosmosExperimentalChainInfo(\n Object.entries(blockchains)\n .map(([, blockchainMeta]) => blockchainMeta)\n .filter(isCosmosBlockchain)\n );\n return cosmosExperimentalChainInfo && !!cosmosExperimentalChainInfo[wallet];\n};\n\nexport const getKeplrCompatibleConnectedWallets = (\n selectableWallets: SelectableWallet[]\n): WalletType[] => {\n const connectedWalletTypes = new Set(\n selectableWallets.map((a: any) => a.walletType.toString())\n );\n\n return KEPLR_COMPATIBLE_WALLETS.filter((compatibleWallet) =>\n connectedWalletTypes.has(compatibleWallet)\n );\n};\n\nexport function getTokensWithBalance(\n tokens: TokenWithBalance[],\n connectedWallets: ConnectedWallet[]\n): TokenWithBalance[] {\n return tokens.map(({ balance, ...otherProps }) => {\n const tokenAmount = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n connectedWallets,\n otherProps.blockchain,\n otherProps.symbol,\n otherProps.address\n )?.amount || ZERO\n )\n );\n\n let tokenUsdValue = '';\n if (otherProps.usdPrice)\n tokenUsdValue = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n connectedWallets,\n otherProps.blockchain,\n otherProps.symbol,\n otherProps.address\n )?.amount || ZERO\n ).multipliedBy(otherProps.usdPrice)\n );\n\n return {\n ...otherProps,\n ...(tokenAmount !== '0' && {\n balance: { amount: tokenAmount, usdValue: tokenUsdValue },\n }),\n };\n });\n}\n\nexport function getSortedTokens(\n chain: BlockchainMeta | null,\n tokens: Token[],\n connectedWallets: ConnectedWallet[],\n otherChainTokens: TokenWithBalance[]\n): TokenWithBalance[] {\n const fromChainEqueulsToToChain = chain?.name === otherChainTokens[0]?.name;\n if (fromChainEqueulsToToChain) return otherChainTokens;\n const filteredTokens = tokens.filter(\n (token) => token.blockchain === chain?.name\n );\n return sortTokens(getTokensWithBalance(filteredTokens, connectedWallets));\n}\n\nexport function tokensAreEqual(\n tokenA: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null,\n tokenB: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null\n) {\n return (\n tokenA?.blockchain === tokenB?.blockchain &&\n tokenA?.symbol === tokenB?.symbol &&\n tokenA?.address === tokenB?.address\n );\n}\n\nexport function getDefaultToken(\n sortedTokens: TokenWithBalance[],\n otherToken: TokenWithBalance | null\n): TokenWithBalance {\n let selectedToken: TokenWithBalance;\n const firstToken = sortedTokens[0];\n const secondToken = sortedTokens[1];\n if (sortedTokens.length === 1) selectedToken = firstToken;\n else if (tokensAreEqual(firstToken, otherToken)) selectedToken = secondToken;\n else selectedToken = firstToken;\n return selectedToken;\n}\n\nexport function sortWalletsBasedOnState(\n wallets: ModalWalletInfo[]\n): ModalWalletInfo[] {\n return wallets.sort(\n (a, b) =>\n Number(b.state === WalletStatus.CONNECTED) -\n Number(a.state === WalletStatus.CONNECTED) ||\n Number(\n b.state === WalletStatus.DISCONNECTED ||\n b.state === WalletStatus.CONNECTING\n ) -\n Number(\n a.state === WalletStatus.DISCONNECTED ||\n a.state === WalletStatus.CONNECTING\n )\n );\n}\n","import BigNumber from 'bignumber.js';\nimport {\n BestRouteRequest,\n BestRouteResponse,\n RecommendedSlippage,\n SwapResult,\n Token,\n} from 'rango-sdk';\nimport { ConnectedWallet } 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 } from './wallets';\nimport { LoadingStatus } from '../store/meta';\nimport { ConvertedToken, SwapButtonState, Wallet } from '../types';\nimport {\n PendingSwapNetworkStatus,\n PendingSwapStep,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\nimport { removeDuplicateFrom } from './common';\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 connectedWallets: ConnectedWallet[],\n loading: boolean,\n bestRoute: BestRouteResponse | null,\n hasLimitError: boolean,\n highValueLoss: boolean,\n priceImpactCanNotBeComputed: boolean,\n needsToWarnEthOnPath: boolean,\n inputAmount: string\n): SwapButtonState {\n if (loadingMetaStatus !== 'success')\n return { title: 'Connect Wallet', disabled: true };\n if (connectedWallets.length == 0)\n return { title: 'Connect Wallet', disabled: false };\n if (loading) return { title: 'Finding Best Route...', disabled: true };\n else if (!inputAmount || inputAmount === '0')\n return { title: 'Enter an amount', disabled: true };\n else if (!bestRoute || !bestRoute.result)\n return { title: 'Swap', disabled: true };\n else if (hasLimitError) return { title: 'Limit Error', disabled: true };\n else if (highValueLoss)\n return { title: 'Price impact is too high!', disabled: true };\n else if (priceImpactCanNotBeComputed)\n return {\n title: 'USD price is unknown, price impact might be high!',\n disabled: false,\n hasWarning: true,\n };\n else if (needsToWarnEthOnPath)\n return {\n title: 'The route goes through Ethereum. Continue?',\n disabled: false,\n hasWarning: true,\n };\n else return { title: 'Swap', disabled: false };\n}\n\nexport function canComputePriceImpact(\n bestRoute: BestRouteResponse | null,\n inputAmount: string,\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n return !(\n (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) &&\n !!bestRoute?.result &&\n !!inputAmount &&\n inputAmount !== '0' &&\n parseFloat(inputAmount || '0') !== 0 &&\n !!bestRoute.result\n );\n}\n\nexport function requiredWallets(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\n\nexport function getUsdFeeOfStep(\n step: SwapResult,\n allTokens: Token[]\n): BigNumber {\n let totalFeeInUsd = ZERO;\n for (let i = 0; i < step.fee.length; i++) {\n const fee = step.fee[i];\n if (fee.expenseType === 'DECREASE_FROM_OUTPUT') continue;\n\n const unitPrice = getUsdPrice(\n fee.asset.blockchain,\n fee.asset.symbol,\n fee.asset.address,\n allTokens\n );\n totalFeeInUsd = totalFeeInUsd.plus(\n new BigNumber(fee.amount).multipliedBy(unitPrice || 0)\n );\n }\n\n return totalFeeInUsd;\n}\n\nexport function getTotalFeeInUsd(\n bestRoute: BestRouteResponse | null,\n allTokens: Token[]\n): BigNumber | null {\n return (\n bestRoute?.result?.swaps.reduce(\n (totalFee: BigNumber, step) =>\n totalFee.plus(getUsdFeeOfStep(step, allTokens)),\n ZERO\n ) || null\n );\n}\n\nexport function hasHighFee(totalFeeInUsd: BigNumber | null) {\n if (!totalFeeInUsd) return false;\n return !totalFeeInUsd.lt(new BigNumber(30));\n}\n\nexport function hasSlippageError(\n slippages: (RecommendedSlippage | null)[] | undefined\n) {\n return (slippages?.filter((s) => !!s?.error)?.length || 0) > 0;\n}\n\nexport function getMinRequiredSlippage(\n route: BestRouteResponse\n): string | null {\n const slippages = route.result?.swaps.map(\n (slippage) => slippage.recommendedSlippage\n );\n return (\n slippages\n ?.map((s) => s?.slippage || '0')\n ?.filter((s) => parseFloat(s) > 0)\n ?.sort((a, b) => parseFloat(b) - parseFloat(a))\n ?.find(() => true) || null\n );\n}\n\nexport function hasProperSlippage(\n userSlippage: string,\n minRequiredSlippage: string | null\n) {\n if (!minRequiredSlippage) return true;\n return parseFloat(userSlippage) >= parseFloat(minRequiredSlippage);\n}\n\nexport function hasEnoughBalance(\n route: BestRouteResponse,\n selectedWallets: Wallet[]\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: Wallet[],\n userSlippage: string,\n minRequiredSlippage: string | null\n): boolean {\n return (\n hasEnoughBalance(route, selectedWallets) &&\n hasProperSlippage(userSlippage, minRequiredSlippage)\n );\n}\n\nexport function createBestRouteRequestBody(\n fromToken: Token,\n toToken: Token,\n inputAmount: string,\n wallets: ConnectedWallet[],\n selectedWallets: Wallet[],\n disabledLiquiditySources: string[],\n slippage: number,\n affiliateRef: string | null,\n initialRoute?: BestRouteResponse\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 checkPrerequisites = !!initialRoute;\n\n const filteredBlockchains = removeDuplicateFrom(\n (initialRoute?.result?.swaps || []).reduce(\n (blockchains: string[], swap) => (\n blockchains.push(swap.from.blockchain, swap.to.blockchain), blockchains\n ),\n []\n )\n );\n\n const requestBody: BestRouteRequest = {\n amount: inputAmount.toString(),\n affiliateRef,\n checkPrerequisites,\n from: {\n address: fromToken.address,\n blockchain: fromToken.blockchain,\n symbol: fromToken.symbol,\n },\n to: {\n address: toToken.address,\n blockchain: toToken.blockchain,\n symbol: toToken.symbol,\n },\n connectedWallets,\n selectedWallets: selectedWalletsMap,\n swapperGroups: disabledLiquiditySources,\n swappersGroupsExclude: true,\n slippage: slippage.toString(),\n ...(checkPrerequisites && { blockchains: filteredBlockchains }),\n };\n\n return requestBody;\n}\n\nexport function getWalletsForNewSwap(selectedWallets: Wallet[]) {\n const wallets = selectedWallets.reduce(\n (\n selectedWalletsMap: {\n [p: string]: { address: string; walletType: WalletType };\n },\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = {\n address: selectedWallet.address,\n walletType: selectedWallet.walletType,\n }),\n selectedWalletsMap\n ),\n {}\n );\n\n return wallets;\n}\n\nexport function getRouteOutputAmount(route: BestRouteResponse | null) {\n return route?.result?.outputAmount || null;\n}\n\nexport function getPercentageChange(\n oldValue: string | number | null,\n newValue: string | number | null\n) {\n if (!oldValue || !newValue) return null;\n return new BigNumber(newValue)\n .div(new BigNumber(oldValue))\n .minus(1)\n .multipliedBy(100);\n}\n\nexport function isOutputAmountChangedALot(\n oldRoute: BestRouteResponse,\n newRoute: BestRouteResponse\n) {\n const oldOutputAmount = getRouteOutputAmount(oldRoute);\n const newOutputAmount = getRouteOutputAmount(newRoute);\n if (!oldOutputAmount || !newOutputAmount) return false;\n const percentageChange = getPercentageChange(\n oldOutputAmount,\n newOutputAmount\n );\n if (!percentageChange) return true;\n\n return percentageChange.toNumber() <= -1;\n}\n\nexport function getBalanceWarnings(\n route: BestRouteResponse,\n selectedWallets: Wallet[]\n) {\n const fee = route.validationStatus;\n const requiredWallets = getRequiredChains(route);\n const walletsSortedByRequiredWallets = selectedWallets.sort(\n (selectedWallet1, selectedWallet2) =>\n requiredWallets.indexOf(selectedWallet1.chain) -\n requiredWallets.indexOf(selectedWallet2.chain)\n );\n return walletsSortedByRequiredWallets\n .flatMap((wallet) => getRequiredBalanceOfWallet(wallet, fee) || [])\n .filter((asset) => !asset.ok)\n .map((asset) => {\n const symbol = asset.asset.symbol;\n const currentAmount = numberToString(\n new BigNumber(asset.currentAmount.amount).shiftedBy(\n -asset.currentAmount.decimals\n ),\n 8\n );\n const requiredAmount = numberToString(\n new BigNumber(asset.requiredAmount.amount).shiftedBy(\n -asset.requiredAmount.decimals\n ),\n 8\n );\n let reason = '';\n if (asset.reason === 'FEE') reason = ' for network fee';\n if (asset.reason === 'INPUT_ASSET') reason = ' for swap';\n if (asset.reason === 'FEE_AND_INPUT_ASSET')\n reason = ' for input and network fee';\n const warningMessage = `Needs ≈ ${requiredAmount} ${symbol}${reason}, but you have ${currentAmount} ${symbol} in your ${asset.asset.blockchain} wallet.`;\n return warningMessage;\n });\n}\n\nexport function calcOutputUsdValue(\n outputAmount?: string,\n tokenPrice?: number | null\n) {\n const amount = !!outputAmount ? new BigNumber(outputAmount) : ZERO;\n\n return amount.multipliedBy(tokenPrice || 0);\n}\n\nexport function isNetworkStatusInWarningState(\n pendingSwapStep: PendingSwapStep | null\n): boolean {\n return (\n !!pendingSwapStep &&\n pendingSwapStep.networkStatus !== null &&\n pendingSwapStep.networkStatus !== PendingSwapNetworkStatus.NetworkChanged\n );\n}\n\nexport function getSwapMessages(\n pendingSwap: PendingSwap,\n currentStep: PendingSwapStep | null\n): {\n shortMessage: string;\n detailedMessage: { content: string; long: boolean };\n} {\n const textForRemove = 'bellow button or';\n let message = pendingSwap.extraMessage;\n let detailedMessage = pendingSwap.extraMessageDetail;\n\n if (pendingSwap.networkStatusExtraMessageDetail?.includes(textForRemove)) {\n pendingSwap.networkStatusExtraMessageDetail =\n pendingSwap.networkStatusExtraMessageDetail.replace(textForRemove, '');\n }\n\n const networkWarningState = isNetworkStatusInWarningState(currentStep);\n\n if (networkWarningState) {\n message = pendingSwap.networkStatusExtraMessage || '';\n detailedMessage = pendingSwap.networkStatusExtraMessageDetail || '';\n switch (currentStep?.networkStatus) {\n case PendingSwapNetworkStatus.WaitingForConnectingWallet:\n message = message || 'Waiting for connecting wallet';\n break;\n case PendingSwapNetworkStatus.WaitingForQueue:\n message = message || 'Waiting for other running tasks to be finished';\n break;\n case PendingSwapNetworkStatus.WaitingForNetworkChange:\n message = message || 'Waiting for changing wallet network';\n break;\n }\n }\n detailedMessage = detailedMessage || '';\n message = message || '';\n const isRpc =\n message?.indexOf('code') !== -1 && message?.indexOf('reason') !== -1;\n\n return {\n shortMessage: message,\n detailedMessage: { content: detailedMessage, long: isRpc },\n };\n}\n\nexport function getLastConvertedTokenInFailedSwap(\n pendingSwap: PendingSwap\n): ConvertedToken {\n let resultToken: ConvertedToken = null;\n if (pendingSwap.status === 'failed') {\n const lastSuccessStep = pendingSwap.steps\n .slice()\n .reverse()\n .filter((step) => step.status === 'success')[0];\n\n if (lastSuccessStep) {\n resultToken = {\n blockchain: lastSuccessStep.toBlockchain,\n symbol: lastSuccessStep.toSymbol,\n outputAmount: lastSuccessStep.outputAmount,\n address: lastSuccessStep.toSymbolAddress,\n };\n }\n }\n return resultToken;\n}\n\nexport function shouldRetrySwap(pendingSwap: PendingSwap) {\n return (\n pendingSwap.status === 'failed' &&\n !!pendingSwap.finishTime &&\n new Date().getTime() - parseInt(pendingSwap.finishTime) < 4 * 3600 * 1000\n );\n}\n","import { SelectableWallet } from '@rango-dev/ui';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { shallow } from 'zustand/shallow';\nimport { httpService } from '../services/httpService';\nimport {\n getRequiredChains,\n getTokensWithBalance,\n isAccountAndWalletMatched,\n makeBalanceFor,\n resetConnectedWalletState,\n sortTokens,\n} from '../utils/wallets';\nimport { useBestRouteStore } from './bestRoute';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\nimport { Wallet } from '../types';\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 ConnectedWallet extends Wallet {\n balances: TokenBalance[] | null;\n loading: boolean;\n error: boolean;\n explorerUrl: string | null;\n}\n\ninterface WalletsStore {\n connectedWallets: ConnectedWallet[];\n selectedWallets: Wallet[];\n connectWallet: (accounts: Wallet[]) => void;\n disconnectWallet: (walletType: WalletType) => void;\n initSelectedWallets: () => void;\n setSelectedWallet: (wallet: SelectableWallet) => void;\n clearConnectedWallet: () => void;\n getOneOfWalletsDetails: (account: Wallet) => void;\n}\n\nexport const useWalletsStore = createSelectors(\n create<WalletsStore>()(\n subscribeWithSelector((set, get) => ({\n connectedWallets: [],\n selectedWallets: [],\n connectWallet: (accounts) => {\n const getOneOfWalletsDetails = get().getOneOfWalletsDetails;\n set((state) => ({\n connectedWallets: state.connectedWallets\n .filter((wallet) => wallet.walletType !== accounts[0].walletType)\n .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) => getOneOfWalletsDetails(account));\n },\n disconnectWallet: (walletType) => {\n set((state) => ({\n connectedWallets: state.connectedWallets.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.connectedWallets;\n const selectedWallets: Wallet[] = [];\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 connectedWallets: [],\n selectedWallets: [],\n })),\n getOneOfWalletsDetails: async (account: Wallet) => {\n const tokens = useMetaStore.getState().meta.tokens;\n set((state) => ({\n connectedWallets: state.connectedWallets.map((balance) => {\n return balance.address === account.address &&\n balance.chain === account.chain\n ? { ...balance, loading: true }\n : balance;\n }),\n }));\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 connectedWallets: state.connectedWallets.map(\n (connectedWallet) => {\n return isAccountAndWalletMatched(account, connectedWallet)\n ? makeBalanceFor(account, retrivedBalance, tokens)\n : connectedWallet;\n }\n ),\n }));\n } else throw new Error('Wallet not found');\n } catch (error) {\n set((state) => ({\n connectedWallets: state.connectedWallets.map((balance) => {\n return isAccountAndWalletMatched(account, balance)\n ? resetConnectedWalletState(balance)\n : balance;\n }),\n }));\n }\n },\n }))\n )\n);\n\nuseWalletsStore.subscribe(\n (state) => state.connectedWallets,\n (connectedWallets) => {\n useBestRouteStore.setState(({ sourceTokens, destinationTokens }) => {\n const sourceTokensWithBalance = getTokensWithBalance(\n sourceTokens,\n connectedWallets\n );\n const destinationTokensWithBalance = getTokensWithBalance(\n destinationTokens,\n connectedWallets\n );\n return {\n sourceTokens: sortTokens(sourceTokensWithBalance),\n destinationTokens: sortTokens(destinationTokensWithBalance),\n };\n });\n },\n {\n equalityFn: shallow,\n }\n);\n\nexport const fetchingBalanceSelector = (state: WalletsStore) =>\n !!state.connectedWallets.find((wallet) => wallet.loading);\n","import { BestRouteResponse, BlockchainMeta } from 'rango-sdk';\nimport { Token } from 'rango-sdk';\nimport { create } from 'zustand';\nimport BigNumber from 'bignumber.js';\nimport { ZERO } from '../constants/numbers';\nimport {\n getBestRouteToTokenUsdPrice,\n isRouteParametersChanged,\n} from '../utils/routing';\nimport createSelectors from './selectors';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport { useSettingsStore } from './settings';\nimport { calcOutputUsdValue, createBestRouteRequestBody } from '../utils/swap';\nimport { useMetaStore } from './meta';\nimport {\n getDefaultToken,\n getSortedTokens,\n tokensAreEqual,\n} from '../utils/wallets';\nimport { useWalletsStore } from './wallets';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset/dist/shared';\nimport { debounce } from '../utils/common';\nimport { isPositiveNumber } from '../utils/numbers';\n\nconst getUsdValue = (token: Token | null, amount: string) =>\n new BigNumber(amount || ZERO).multipliedBy(token?.usdPrice || 0);\n\nexport interface RouteState {\n fromChain: BlockchainMeta | null;\n toChain: BlockchainMeta | null;\n inputAmount: string;\n inputUsdValue: BigNumber;\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber;\n fromToken: TokenWithBalance | null;\n toToken: TokenWithBalance | null;\n loading: boolean;\n error: string;\n sourceTokens: Token[];\n destinationTokens: Token[];\n resetRoute: () => void;\n setFromChain: (\n chain: BlockchainMeta | null,\n setDefaultToken?: boolean\n ) => void;\n setToChain: (chian: BlockchainMeta | null, setDefaultToken?: boolean) => void;\n setFromToken: (token: Token | null) => void;\n setToToken: (token: Token | null) => void;\n setInputAmount: (amount: string) => void;\n bestRoute: BestRouteResponse | null;\n setBestRoute: (bestRoute: BestRouteResponse | null) => void;\n retry: (pendingSwap: PendingSwap) => void;\n switchFromAndTo: () => void;\n}\n\nexport const useBestRouteStore = createSelectors(\n create<RouteState>()(\n subscribeWithSelector((set) => ({\n fromChain: null,\n fromToken: null,\n inputAmount: '',\n outputAmount: null,\n inputUsdValue: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n toChain: null,\n toToken: null,\n bestRoute: null,\n loading: false,\n error: '',\n sourceTokens: [],\n destinationTokens: [],\n setBestRoute: (bestRoute) =>\n set((state) => {\n let outputAmount: BigNumber | null = null;\n let outputUsdValue: BigNumber = ZERO;\n if (!isPositiveNumber(state.inputAmount)) return {};\n if (!!bestRoute) {\n outputAmount = !!bestRoute.result?.outputAmount\n ? new BigNumber(bestRoute.result?.outputAmount)\n : null;\n outputUsdValue = calcOutputUsdValue(\n bestRoute.result?.outputAmount,\n getBestRouteToTokenUsdPrice(bestRoute) || state.toToken?.usdPrice\n );\n }\n return {\n bestRoute,\n ...(!!bestRoute && {\n outputAmount,\n outputUsdValue,\n }),\n };\n }),\n resetRoute: () =>\n set(() => ({\n loading: true,\n error: '',\n bestRoute: null,\n outputAmount: null,\n outputUsdValue: new BigNumber(0),\n })),\n setFromChain: (chain, setDefaultToken) => {\n set((state) => {\n if (state.fromChain?.name === chain?.name) return {};\n const tokens = useMetaStore.getState().meta.tokens;\n const connectedWallets = useWalletsStore.getState().connectedWallets;\n const sortedTokens = getSortedTokens(\n chain,\n tokens,\n connectedWallets,\n state.destinationTokens\n );\n const fromToken = getDefaultToken(sortedTokens, state.toToken);\n return {\n fromChain: chain,\n sourceTokens: sortedTokens,\n ...(setDefaultToken && {\n fromToken,\n }),\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(fromToken, state.inputAmount),\n }),\n };\n });\n },\n setFromToken: (token) =>\n set((state) => ({\n fromToken: token,\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(token, state.inputAmount),\n }),\n })),\n setToChain: (chain, setDefaultToken) => {\n set((state) => {\n if (state.toChain?.name === chain?.name) return {};\n const tokens = useMetaStore.getState().meta.tokens;\n const connectedWallets = useWalletsStore.getState().connectedWallets;\n const sortedTokens = getSortedTokens(\n chain,\n tokens,\n connectedWallets,\n state.destinationTokens\n );\n\n return {\n toChain: chain,\n destinationTokens: sortedTokens,\n ...(setDefaultToken && {\n toToken: getDefaultToken(sortedTokens, state.fromToken),\n }),\n };\n });\n },\n setToToken: (token) =>\n set(() => ({\n toToken: token,\n })),\n setInputAmount: (amount) => {\n set((state) => ({\n inputAmount: amount,\n ...(!amount && {\n outputAmount: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n bestRoute: null,\n error: '',\n }),\n ...(!!state.fromToken && {\n inputUsdValue: getUsdValue(state.fromToken, amount),\n }),\n }));\n },\n retry: (pendingSwap) => {\n const { tokens, blockchains } = useMetaStore.getState().meta;\n const connectedWallets = useWalletsStore.getState().connectedWallets;\n const failedIndex =\n pendingSwap.status === 'failed'\n ? pendingSwap.steps.findIndex((s) => s.status === 'failed')\n : null;\n\n if (failedIndex === null || failedIndex < 0) return;\n\n const firstStep = pendingSwap.steps[0];\n const lastStep = pendingSwap.steps[pendingSwap.steps.length - 1];\n const fromChain =\n blockchains.find(\n (blockchain) => blockchain.name === firstStep.fromBlockchain\n ) || null;\n const toChain =\n blockchains.find(\n (blockchain) => blockchain.name === lastStep.toBlockchain\n ) || null;\n\n const fromToken = tokens.find((token) =>\n tokensAreEqual(token, {\n blockchain: firstStep.fromBlockchain,\n symbol: firstStep.fromSymbol,\n address: firstStep.fromSymbolAddress,\n })\n );\n\n const toToken = tokens.find((token) =>\n tokensAreEqual(token, {\n blockchain: lastStep.toBlockchain,\n symbol: lastStep.toSymbol,\n address: lastStep.toSymbolAddress,\n })\n );\n const sortedSourceTokens = getSortedTokens(\n fromChain,\n tokens,\n connectedWallets,\n []\n );\n const sortedDestinationTokens = getSortedTokens(\n toChain,\n tokens,\n connectedWallets,\n []\n );\n const inputAmount = pendingSwap.inputAmount;\n set({\n fromChain,\n fromToken,\n inputAmount,\n outputAmount: null,\n inputUsdValue: getUsdValue(fromToken || null, inputAmount),\n outputUsdValue: new BigNumber(0),\n toChain,\n toToken,\n bestRoute: null,\n loading: false,\n error: '',\n sourceTokens: sortedSourceTokens,\n destinationTokens: sortedDestinationTokens,\n });\n },\n switchFromAndTo: () =>\n set((state) => ({\n fromChain: state.toChain,\n fromToken: state.toToken,\n toChain: state.fromChain,\n toToken: state.fromToken,\n sourceTokens: state.destinationTokens,\n destinationTokens: state.sourceTokens,\n inputAmount: state.outputAmount?.toString() || '',\n inputUsdValue: getUsdValue(\n state.toToken,\n state.outputAmount?.toString() || ''\n ),\n })),\n }))\n )\n);\n\nconst bestRoute = (\n bestRouteStore: typeof useBestRouteStore,\n settingsStore: typeof useSettingsStore\n) => {\n let abortController: AbortController | null = null;\n const fetchBestRoute = () => {\n const { fromToken, toToken, inputAmount, resetRoute } =\n bestRouteStore.getState();\n const { slippage, customSlippage, disabledLiquiditySources, affiliateRef } =\n settingsStore.getState();\n if (!fromToken || !toToken || !isPositiveNumber(inputAmount)) return;\n abortController?.abort();\n abortController = new AbortController();\n const userSlippage = !!customSlippage ? customSlippage : slippage;\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n [],\n [],\n disabledLiquiditySources,\n userSlippage,\n affiliateRef\n );\n\n if (!bestRouteStore.getState().loading) {\n resetRoute();\n }\n httpService()\n .getBestRoute(requestBody, {\n signal: abortController.signal,\n })\n .then((res) => {\n const { setBestRoute } = bestRouteStore.getState();\n setBestRoute(res);\n bestRouteStore.setState({ loading: false });\n abortController = null;\n })\n .catch((error) => {\n if (error.code === 'ERR_CANCELED') return;\n bestRouteStore.setState({\n error: error.message,\n loading: false,\n });\n });\n };\n\n const debouncedFetchBestRoute = debounce(fetchBestRoute, 600);\n\n const bestRouteParamsListener = () => {\n const { fromToken, toToken, inputAmount, inputUsdValue, resetRoute } =\n useBestRouteStore.getState();\n if (!isPositiveNumber(inputAmount) || inputUsdValue.eq(0))\n return bestRouteStore.setState({ loading: false });\n\n if (tokensAreEqual(fromToken, toToken))\n return bestRouteStore.setState({\n loading: false,\n bestRoute: null,\n outputAmount: new BigNumber(inputAmount),\n outputUsdValue: inputUsdValue,\n });\n\n if (!bestRouteStore.getState().loading) resetRoute();\n debouncedFetchBestRoute();\n };\n\n useBestRouteStore.subscribe(\n (state) => ({\n fromChain: state.fromChain,\n fromToken: state.fromToken,\n toChain: state.toChain,\n toToken: state.toToken,\n inputAmount: state.inputAmount,\n }),\n bestRouteParamsListener,\n {\n equalityFn: (prevState, currentState) => {\n if (\n isRouteParametersChanged({\n store: 'bestRoute',\n prevState,\n currentState,\n })\n )\n return false;\n else return true;\n },\n }\n );\n\n useSettingsStore.subscribe(\n (state) => ({\n slippage: state.slippage,\n customSlippage: state.customSlippage,\n disabledLiquiditySources: state.disabledLiquiditySources,\n infiniteApprove: state.infiniteApprove,\n }),\n bestRouteParamsListener,\n {\n equalityFn: (prevState, currentState) => {\n if (\n isRouteParametersChanged({\n store: 'settings',\n prevState,\n currentState,\n })\n )\n return false;\n else return true;\n },\n }\n );\n\n return { fetchBestRoute };\n};\n\nexport const { fetchBestRoute } = bestRoute(\n useBestRouteStore,\n useSettingsStore\n);\n","export enum SearchParams {\n 'FROM_CHAIN' = 'fromChain',\n 'FROM_TOKEN' = 'fromToken',\n 'TO_CHAIN' = 'toChain',\n 'TO_TOKEN' = 'toToken',\n 'FROM_AMOUNT' = 'fromAmount',\n}\n","export const navigationRoutes = {\n home: '/',\n fromChain: 'from-chain',\n fromToken: 'from-token',\n toChain: 'to-chain',\n toToken: 'to-token',\n settings: 'settings',\n liquiditySources: '/settings/liquidity-sources',\n swaps: 'swaps',\n wallets: 'wallets',\n confirmSwap: 'confirm-swap',\n swapDetails: 'swaps/:requestId',\n};\n","import { create } from 'zustand';\nimport createSelectors from './selectors';\n\ninterface UiState {\n connectWalletsButtonDisabled: boolean;\n selectedSwapRequestId: string | null;\n currentPage: string;\n toggleConnectWalletsButton: () => void;\n setSelectedSwap: (requestId: string | null) => void;\n setCurrentPage: (path: string) => void;\n}\n\nexport const useUiStore = createSelectors(\n create<UiState>()((set) => ({\n connectWalletsButtonDisabled: false,\n selectedSwapRequestId: null,\n currentPage: '',\n toggleConnectWalletsButton: () =>\n set((state) => ({\n connectWalletsButtonDisabled: !state.connectWalletsButtonDisabled,\n })),\n setSelectedSwap: (requestId) => set({ selectedSwapRequestId: requestId }),\n setCurrentPage: (path) => set({ currentPage: path }),\n }))\n);\n","import { useEffect, useRef } from 'react';\nimport {\n createSearchParams,\n useLocation,\n useSearchParams,\n} from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { SearchParams } from '../constants/searchParams';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { searchParamsToToken } from '../utils/routing';\n\nexport function UpdateUrl() {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const location = useLocation();\n const firstRenderSearchParams = useRef(location.search);\n const searchParamsRef = useRef<Record<string, string>>({});\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const loadingStatus = useMetaStore.use.loadingStatus();\n const { blockchains, tokens } = useMetaStore.use.meta();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n\n useEffect(() => {\n const params: Record<string, string> = {};\n createSearchParams(firstRenderSearchParams.current).forEach(\n (value, key) => {\n params[key] = value;\n }\n );\n searchParamsRef.current = params;\n const requestId =\n location.pathname.split(navigationRoutes.swaps + '/')[1] || null;\n if (requestId) setSelectedSwap(requestId);\n }, []);\n\n useEffect(() => {\n 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 =\n searchParamsRef.current[SearchParams.FROM_AMOUNT] || inputAmount;\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 firstRender.current = false;\n }, [location.pathname, inputAmount, fromChain, fromToken, toChain, toToken]);\n\n useEffect(() => {\n if (loadingStatus === 'success') {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n const fromAmount = searchParams.get(SearchParams.FROM_AMOUNT);\n const fromChain = blockchains.find(\n (blockchain) => blockchain.name === fromChainString\n );\n const fromToken = searchParamsToToken(\n tokens,\n fromTokenString,\n fromChain || null\n );\n const toChain = blockchains.find(\n (blockchain) => blockchain.name === toChainString\n );\n const toToken = searchParamsToToken(\n tokens,\n toTokenString,\n toChain || null\n );\n if (!!fromChain) {\n setFromChain(fromChain);\n if (!!fromToken) setFromToken(fromToken);\n }\n if (!!toChain) {\n setToChain(toChain);\n if (!!toToken) setToToken(toToken);\n }\n if (fromAmount) setInputAmount(fromAmount);\n }\n }, [loadingStatus]);\n\n return null;\n}\n","import React, { Fragment, PropsWithChildren } from 'react';\nimport { MemoryRouter, useInRouterContext } from 'react-router';\nimport { useQueueManager } from '@rango-dev/queue-manager-rango-preset';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { isEvmBlockchain } from 'rango-types';\nimport { UpdateUrl } from './UpdateUrl';\nimport { useMetaStore } from '../store/meta';\n\nexport function AppRouter({\n children,\n ...props\n}: PropsWithChildren & {\n lastConnectedWallet: string;\n disconnectedWallet: WalletType | undefined;\n clearDisconnectedWallet: () => void;\n}) {\n const isRouterInContext = useInRouterContext();\n const Router = isRouterInContext ? Fragment : MemoryRouter;\n const { blockchains } = useMetaStore.use.meta();\n\n const evmChains = blockchains.filter(isEvmBlockchain);\n\n useQueueManager({\n lastConnectedWallet: props.lastConnectedWallet,\n clearDisconnectedWallet: props.clearDisconnectedWallet,\n disconnectedWallet: props.disconnectedWallet,\n evmChains,\n notifier: () => {},\n });\n\n return (\n <>\n <Router>{children}</Router>\n {isRouterInContext && <UpdateUrl />}\n </>\n );\n}\n","import { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function useNavigateBack() {\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n\n navigationRoutes;\n\n const navigateBackFrom = (currentRoute: string) => {\n if (currentRoute === navigationRoutes.swapDetails)\n return navigate('/' + navigationRoutes.swaps, { replace: true });\n\n if (\n !isRouterInContext ||\n (window.history.state && window.history.state.idx > 0)\n )\n navigate(-1);\n else {\n if (\n [\n navigationRoutes.fromChain,\n navigationRoutes.fromToken,\n navigationRoutes.toChain,\n navigationRoutes.toToken,\n navigationRoutes.settings,\n navigationRoutes.wallets,\n navigationRoutes.swaps,\n navigationRoutes.confirmSwap,\n ].includes(currentRoute)\n )\n navigate(navigationRoutes.home, { replace: true });\n else if (currentRoute === navigationRoutes.liquiditySources)\n navigate('/' + navigationRoutes.settings, { replace: true });\n }\n };\n\n return { navigateBackFrom };\n}\n","import React, { ReactNode } from 'react';\nimport {\n Button,\n InfoCircleIcon,\n styled,\n Typography,\n Spacer,\n Image,\n} from '@rango-dev/ui';\nimport { LoadingStatus } from '../store/meta';\nimport { useTranslation } from 'react-i18next';\nimport BigNumber from 'bignumber.js';\nimport { numberToString } from '../utils/numbers';\n\nconst Box = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n overflow: 'hidden',\n});\n\nconst Container = styled('div', {\n boxSizing: 'border-box',\n borderRadius: '$5',\n padding: '$8 $16 $16 $16',\n\n variants: {\n type: {\n filled: {\n backgroundColor: '$neutral100',\n },\n outlined: {\n border: '1px solid $neutral100',\n },\n },\n },\n\n defaultVariants: {\n type: 'filled',\n },\n\n '.head': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '32px',\n '.usd-value': {\n paddingLeft: '$8',\n },\n },\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$2 0',\n '.selectors': {\n width: '35%',\n\n '._text': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n },\n '.amount': {\n width: '30%',\n },\n },\n});\n\nconst ImagePlaceholder = styled('span', {\n width: '24px',\n height: '24px',\n backgroundColor: '$neutral100',\n borderRadius: '99999px',\n});\n\nconst OutputContainer = styled('div', {\n windth: '100%',\n height: '$48',\n borderRadius: '$5',\n backgroundColor: '$surface',\n border: '1px solid transparent',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '$8',\n paddingRight: '$8',\n});\n\ninterface PropTypes {\n label: string;\n amount: string;\n usdValue?: BigNumber;\n loadingStatus: LoadingStatus;\n chain: {\n displayName: string;\n logo: string;\n };\n token: {\n symbol: string;\n image: string;\n };\n percentageChange?: ReactNode;\n}\n\nexport function TokenPreview(props: PropTypes) {\n const { chain, token, loadingStatus, percentageChange } = props;\n const { t } = useTranslation();\n\n const ItemSuffix = (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n {loadingStatus === 'failed' && <InfoCircleIcon color=\"error\" size={24} />}\n </div>\n );\n\n return (\n <Box>\n <Container type={'outlined'}>\n <div className=\"head\">\n <Typography variant=\"body2\" color=\"neutral800\">\n {props.label}\n </Typography>\n <div>\n {percentageChange}\n {props.usdValue && (\n <Typography\n variant=\"caption\"\n color=\"neutral600\"\n className=\"usd-value\"\n >{`$${numberToString(props.usdValue)}`}</Typography>\n )}\n </div>\n </div>\n <div className=\"form\">\n <Button\n className=\"selectors\"\n variant=\"outlined\"\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && chain ? (\n <Image src={chain.logo} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n >\n {loadingStatus === 'success' && chain\n ? chain.displayName\n : t('Chain')}\n </Button>\n <Spacer size={12} />\n <Button\n className=\"selectors\"\n variant=\"outlined\"\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && token ? (\n <Image src={token.image} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n <Spacer size={12} />\n <div className=\"amount\">\n <OutputContainer>\n <Typography variant=\"h4\">{props.amount}</Typography>\n </OutputContainer>\n </div>\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled, ChevronRightIcon, GasIcon, Spacer } from '@rango-dev/ui';\nimport { BestRouteResponse } from 'rango-sdk';\n\nexport const Container = styled('div', {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '$8',\n borderRadius: '$5',\n backgroundColor: '$neutral100',\n color: '$neutral800',\n fontSize: '$12',\n\n '.routes': {\n display: 'flex',\n alignItems: 'center',\n },\n '.fee': {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\ninterface PropTypes {\n routes: BestRouteResponse | null;\n totalFee?: string;\n}\nfunction RoutesOverview(props: PropTypes) {\n if (!props.routes) return null;\n\n const swaps = props.routes.result?.swaps;\n return (\n <Container>\n <div className=\"routes\">\n {swaps?.map((swap, idx) => {\n const isLast = idx + 1 == swaps.length;\n return (\n <React.Fragment key={idx}>\n <div className=\"route\">{swap.from.symbol}</div>\n <ChevronRightIcon size={12} />\n {isLast ? <div className=\"route\">{swap.to.symbol}</div> : null}\n </React.Fragment>\n );\n })}\n </div>\n {props.totalFee ? (\n <div className=\"fee\">\n <GasIcon size={12} />\n <Spacer size={4} />${props.totalFee}\n </div>\n ) : null}\n </Container>\n );\n}\n\nexport default RoutesOverview;\n","import { RouteState } from '../store/bestRoute';\nimport { SettingsState } from '../store/settings';\n\ninterface BestRouteStoreParams {\n fromChain?: RouteState['fromChain'];\n toChain?: RouteState['toChain'];\n fromToken?: RouteState['fromToken'];\n toToken?: RouteState['toToken'];\n inputAmount?: RouteState['inputAmount'];\n}\n\ninterface SettingsStoreParams {\n slippage?: SettingsState['slippage'];\n customSlippage?: SettingsState['customSlippage'];\n disabledLiquiditySources?: SettingsState['disabledLiquiditySources'];\n infiniteApprove?: SettingsState['infiniteApprove'];\n}\n\nexport type BestRouteEqualityParams =\n | {\n store: 'bestRoute';\n prevState: BestRouteStoreParams;\n currentState: BestRouteStoreParams;\n }\n | {\n store: 'settings';\n prevState: SettingsStoreParams;\n currentState: SettingsStoreParams;\n };\n\nexport enum ConfirmSwapErrorTypes {\n NO_ROUTE,\n ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n REQUEST_FAILED,\n INSUFFICIENT_SLIPPAGE,\n INSUFFICIENT_BALANCE,\n}\n\nexport type ConfirmSwapError =\n | {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED;\n status?: number;\n }\n | {\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE;\n minRequiredSlippage: string | null;\n }\n | { type: ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE; messages: string[] }\n | {\n type: Exclude<\n ConfirmSwapErrorTypes,\n | ConfirmSwapErrorTypes.REQUEST_FAILED\n | ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n | ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE\n >;\n };\n\nexport type ConfirmSwapWarnings =\n | {\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED;\n newOutputAmount: string;\n percentageChange: string;\n }\n | {\n type: Exclude<\n ConfirmSwapWarningTypes,\n ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED\n >;\n };\n\nexport enum ConfirmSwapWarningTypes {\n ROUTE_UPDATED,\n ROUTE_SWAPPERS_UPDATED,\n ROUTE_COINS_UPDATED,\n ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { useWalletsStore } from '../store/wallets';\nimport {\n ConfirmSwapError,\n ConfirmSwapErrorTypes,\n ConfirmSwapWarningTypes,\n ConfirmSwapWarnings,\n PendingSwapSettings,\n} from '../types';\nimport { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\nimport {\n createBestRouteRequestBody,\n getBalanceWarnings,\n getMinRequiredSlippage,\n getOutputRatio,\n getPercentageChange,\n getRouteOutputAmount,\n getWalletsForNewSwap,\n hasProperSlippage,\n isOutputAmountChangedALot,\n outputRatioHasWarning,\n} from '../utils/swap';\nimport { httpService } from '../services/httpService';\nimport BigNumber from 'bignumber.js';\nimport {\n isNumberOfSwapsChanged,\n isRouteChanged,\n isRouteInternalCoinsUpdated,\n isRouteSwappersUpdated,\n} from '../utils/routing';\nimport { numberToString } from '../utils/numbers';\nimport { BestRouteResponse } from 'rango-sdk';\nimport { calculatePendingSwap } from '@rango-dev/queue-manager-rango-preset';\n\ntype ConfirmSwap = {\n loading: boolean;\n errors: ConfirmSwapError[];\n warnings: ConfirmSwapWarnings[];\n confirmSwap: (() => Promise<PendingSwap | undefined>) | null;\n};\n\nexport function useConfirmSwap(): ConfirmSwap {\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const initialRoute = useBestRouteStore.use.bestRoute();\n const setBestRoute = useBestRouteStore.use.setBestRoute();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const affiliateRef = useSettingsStore.use.affiliateRef();\n\n const connectedWallets = useWalletsStore.use.connectedWallets();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const meta = useMetaStore.use.meta();\n const customSlippage = useSettingsStore.use.customSlippage();\n const slippage = useSettingsStore.use.slippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const userSlippage = customSlippage || slippage;\n const proceedAnywayRef = useRef(false);\n const confiremedRouteRef = useRef<BestRouteResponse | null>(null);\n let abortControllerRef = useRef<AbortController | null>(null);\n\n const [loading, setLoading] = useState(false);\n const [errors, setErrors] = useState<ConfirmSwapError[]>([]);\n const [warnings, setWarnings] = useState<ConfirmSwapWarnings[]>([]);\n\n useEffect(() => {\n return () => abortControllerRef.current?.abort();\n }, []);\n\n if (!fromToken || !toToken || !inputAmount || !initialRoute)\n return { loading: false, warnings: [], errors: [], confirmSwap: null };\n\n const confirmSwap = async (): Promise<PendingSwap | undefined> => {\n if (proceedAnywayRef.current) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n if (errors.length > 0) setErrors([]);\n if (warnings.length > 0) setWarnings([]);\n proceedAnywayRef.current = false;\n\n if (confiremedRouteRef.current) {\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRouteRef.current,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n return newSwap;\n }\n return;\n }\n\n abortControllerRef.current = new AbortController();\n\n setLoading(true);\n\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n connectedWallets,\n selectedWallets,\n disabledLiquiditySources,\n userSlippage,\n affiliateRef,\n initialRoute\n );\n\n try {\n const confiremedRoute = await httpService().getBestRoute(requestBody, {\n signal: abortControllerRef.current?.signal,\n });\n\n abortControllerRef.current = null;\n\n setLoading(false);\n\n if (\n !confiremedRoute.result ||\n !new BigNumber(confiremedRoute.requestAmount).isEqualTo(\n new BigNumber(inputAmount || '-1')\n )\n ) {\n setErrors((prevState) =>\n prevState.concat({\n type: ConfirmSwapErrorTypes.NO_ROUTE,\n })\n );\n return;\n }\n\n const confirmSwapState: Omit<ConfirmSwap, 'confirmSwap' | 'loading'> = {\n errors: [],\n warnings: [],\n };\n\n const routeChanged = isRouteChanged(initialRoute, confiremedRoute!);\n\n if (routeChanged) {\n setBestRoute(confiremedRoute);\n const newRouteOutputUsdValue = new BigNumber(\n confiremedRoute.result?.outputAmount || '0'\n ).multipliedBy(toToken.usdPrice || 0);\n\n const outputRatio = getOutputRatio(\n inputUsdValue,\n newRouteOutputUsdValue\n );\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outputRatio);\n\n if (highValueLoss)\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n });\n else if (isOutputAmountChangedALot(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n newOutputAmount: numberToString(\n getRouteOutputAmount(confiremedRoute)\n ),\n percentageChange: numberToString(\n getPercentageChange(\n getRouteOutputAmount(initialRoute),\n getRouteOutputAmount(confiremedRoute)\n ),\n null,\n 2\n ),\n });\n else if (isRouteInternalCoinsUpdated(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED,\n });\n else if (isNumberOfSwapsChanged(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_UPDATED,\n });\n else if (isRouteSwappersUpdated(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED,\n });\n }\n\n const balanceWarnings = getBalanceWarnings(\n confiremedRoute,\n selectedWallets\n );\n const enoughBalance = balanceWarnings.length === 0;\n\n if (!enoughBalance)\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE,\n messages: balanceWarnings,\n });\n\n const minRequiredSlippage = getMinRequiredSlippage(initialRoute);\n\n if (!hasProperSlippage(userSlippage.toString(), minRequiredSlippage))\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE,\n minRequiredSlippage,\n });\n\n const noErrors = confirmSwapState.errors.length === 0;\n const noWarnings = confirmSwapState.warnings.length === 0;\n\n if (\n (noErrors || (!noErrors && proceedAnywayRef.current)) &&\n (noWarnings || (!noWarnings && proceedAnywayRef.current))\n ) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRoute,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n return newSwap;\n } else if (!proceedAnywayRef.current) {\n proceedAnywayRef.current = true;\n setErrors(confirmSwapState.errors);\n setWarnings(confirmSwapState.warnings);\n confiremedRouteRef.current = confiremedRoute;\n }\n return;\n } catch (error) {\n if ((error as any)?.code === 'ERR_CANCELED') {\n return;\n }\n\n const status = (error as any)?.response?.status;\n\n setLoading(false);\n setErrors([\n {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED,\n status,\n },\n ]);\n\n return;\n }\n };\n\n return { loading, warnings, errors, confirmSwap };\n}\n","import React from 'react';\nimport { Button } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function ChangeSlippageButton() {\n const navigate = useNavigate();\n\n return (\n <Button\n type=\"primary\"\n variant=\"outlined\"\n size=\"small\"\n onClick={() => navigate('/' + navigationRoutes.settings)}\n >\n Change Slippage\n </Button>\n );\n}\n","import { Spacer, Typography, styled } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n minRequiredSlippage: string | null;\n}\n\nconst StyledMessage = styled(Typography, {\n color: '$error500 !important',\n});\n\nexport function MinRequiredSlippage({ minRequiredSlippage }: PropTypes) {\n return (\n <StyledMessage variant=\"body2\">\n We recommend you to increase slippage to at least &nbsp;\n {minRequiredSlippage}\n &nbsp; for this route.\n <Spacer size={8} direction=\"vertical\" />\n <ChangeSlippageButton />\n </StyledMessage>\n );\n}\n","import { Spacer, styled, Typography } from '@rango-dev/ui';\nimport React from 'react';\n\ninterface PropTypes {\n messages: string[];\n}\n\nconst List = styled('ul', {\n padding: 0,\n margin: 0,\n variants: {\n showListStyle: {\n true: { paddingLeft: '$24' },\n },\n },\n});\n\nconst ListItem = styled('li', {\n variants: {\n showListStyle: {\n true: { listStyleType: 'disc', listStylePosition: 'outside' },\n },\n },\n});\n\nconst Message = styled(Typography, {\n display: 'block',\n});\n\nexport function BalanceErrors({ messages }: PropTypes) {\n const showListStyle = messages.length > 1;\n return (\n <>\n <Typography className=\"title\" variant=\"title\" color={'error'}>\n Insufficent Balance:\n </Typography>\n <Spacer size={8} direction=\"vertical\" />\n <List showListStyle={showListStyle}>\n {messages.map((warning, index) => (\n <ListItem showListStyle={showListStyle} key={index}>\n <Message variant=\"body2\">{warning}</Message>\n </ListItem>\n ))}\n </List>\n </>\n );\n}","import React from 'react';\nimport { ConfirmSwapError, ConfirmSwapErrorTypes } from '../types';\nimport { MinRequiredSlippage } from './warnings/MinRequiredSlippage';\nimport { BalanceErrors } from './warnings/BalanceErrors';\n\nexport function ConfirmSwapErrors(errors: ConfirmSwapError[]) {\n return errors.flatMap((error) => {\n switch (error.type) {\n case ConfirmSwapErrorTypes.NO_ROUTE:\n return 'No routes found. Please try again later.';\n case ConfirmSwapErrorTypes.REQUEST_FAILED:\n return `Failed to confirm swap ${\n error.status ? `'status': ${error.status})` : ''\n }, please try again.`;\n\n case ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS:\n return 'Route updated and price impact is too high, try again later!';\n case ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE:\n return (\n <MinRequiredSlippage\n minRequiredSlippage={error.minRequiredSlippage}\n />\n );\n case ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE:\n return <BalanceErrors messages={error.messages} />;\n default:\n return [];\n }\n });\n}\n","import { ConfirmSwapWarningTypes, ConfirmSwapWarnings } from '../types';\n\nexport function ConfirmSwapWarnings(warnings: ConfirmSwapWarnings[]) {\n return warnings.flatMap((warning) => {\n switch (warning.type) {\n case ConfirmSwapWarningTypes.ROUTE_UPDATED:\n return \"Route has been updated.\";\n case ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED:\n return (\n `Output amount changed to ${warning.newOutputAmount} (${warning.percentageChange}% change).`\n );\n\n case ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED:\n return (\n \"Route swappers has been updated.\"\n );\n case ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED:\n return (\n \"Route internal coins has been updated.\"\n );\n default:\n return [];\n }\n });\n}","import { Alert } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function HighSlippageWarning(props: PropTypes) {\n const { selectedSlippage } = props;\n\n return (\n <Alert type=\"warning\" footer={<ChangeSlippageButton />}>\n Caution, your slippage is high (=\n {selectedSlippage}). Your trade may be front run.\n </Alert>\n );\n}\n","import React from 'react';\nimport { HIGH_SLIPPAGE } from '../../constants/swapSettings';\nimport { HighSlippageWarning } from './HighSlippageWarning';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function ConfirmSwapExtraMessages(props: PropTypes) {\n const { selectedSlippage } = props;\n const highSlippage = selectedSlippage >= HIGH_SLIPPAGE;\n\n return (\n <>\n {highSlippage && (\n <HighSlippageWarning selectedSlippage={selectedSlippage} />\n )}\n </>\n );\n}\n","import BigNumber from 'bignumber.js';\nimport React from 'react';\nimport { getPercentageChange } from '../utils/swap';\nimport { Typography } from '@rango-dev/ui';\nimport { numberToString } from '../utils/numbers';\n\ninterface PropTypes {\n inputUsdValue: BigNumber | null;\n outputUsdValue: BigNumber | null;\n}\n\nexport function PercentageChange(props: PropTypes) {\n const { inputUsdValue, outputUsdValue } = props;\n\n if (!inputUsdValue || !outputUsdValue || !outputUsdValue.gt(0)) return null;\n\n const percentageChange = getPercentageChange(\n inputUsdValue.toNumber(),\n outputUsdValue.toNumber()\n );\n\n const showPercentageChange = percentageChange?.lt(0);\n\n return (\n <>\n {showPercentageChange && (\n <Typography variant=\"caption\" color=\"$error500\">\n {`(${numberToString(percentageChange, 0, 2)}%)`}\n </Typography>\n )}\n </>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useWalletsStore } from '../store/wallets';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport {\n getKeplrCompatibleConnectedWallets,\n getRequiredChains,\n getSelectableWallets,\n isExperimentalChain,\n} from '../utils/wallets';\nimport { getTotalFeeInUsd, requiredWallets } from '../utils/swap';\nimport { numberToString } from '../utils/numbers';\nimport { useMetaStore } from '../store/meta';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { TokenPreview } from '../components/TokenPreview';\n// @ts-ignore // TODO: fix error in tsc build\nimport { t } from 'i18next';\nimport { Spacer, ConfirmSwap, LoadingFailedAlert } from '@rango-dev/ui';\nimport RoutesOverview from '../components/RoutesOverview';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useConfirmSwap } from '../hooks/useConfirmSwap';\nimport { useSettingsStore } from '../store/settings';\nimport { useUiStore } from '../store/ui';\nimport { ConfirmSwapErrorTypes } from '../types';\nimport { ConfirmSwapErrors } from '../components/ConfirmSwapErrors';\nimport { ConfirmSwapWarnings } from '../components/ConfirmSwapWarnings';\nimport { ConfirmSwapExtraMessages } from '../components/warnings/ConfirmSwapExtraMessages';\nimport { getBestRouteStatus } from '../utils/routing';\nimport { PercentageChange } from '../components/PercentageChange';\n\nexport function ConfirmSwapPage() {\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const fetchingBestRouteError = useBestRouteStore.use.error();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const { blockchains, tokens } = useMetaStore.use.meta();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const connectedWallets = useWalletsStore.use.connectedWallets();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const initSelectedWallets = useWalletsStore.use.initSelectedWallets();\n const setSelectedWallet = useWalletsStore.use.setSelectedWallet();\n const slippage = useSettingsStore.use.slippage();\n const customSlippage = useSettingsStore.use.customSlippage();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const [dbErrorMessage, setDbErrorMessage] = useState<string>('');\n const bestRouteloadingStatus = getBestRouteStatus(\n fetchingBestRoute,\n !!fetchingBestRouteError\n );\n\n const { manager } = useManager();\n const {\n loading: fetchingConfirmedRoute,\n errors,\n warnings,\n confirmSwap,\n } = useConfirmSwap();\n\n const selectedSlippage = customSlippage || slippage;\n\n const showHighSlippageWarning = !errors.find(\n (error) => error.type === ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n );\n\n const { getWalletInfo, connect } = useWallets();\n const confirmDisabled =\n fetchingBestRoute ||\n !requiredWallets(bestRoute).every((chain) =>\n selectedWallets.map((wallet) => wallet.chain).includes(chain)\n );\n\n const firstStep = bestRoute?.result?.swaps[0];\n const lastStep =\n bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1];\n\n const fromAmount = numberToString(firstStep?.fromAmount, 4, 6);\n const toAmount = numberToString(lastStep?.toAmount, 4, 6);\n useEffect(() => {\n initSelectedWallets();\n }, []);\n\n const selectableWallets = getSelectableWallets(\n connectedWallets,\n selectedWallets,\n getWalletInfo\n );\n\n const handleConnectChain = (wallet: string) => {\n const network = wallet as Network;\n getKeplrCompatibleConnectedWallets(selectableWallets).forEach(\n (compatibleWallet: WalletType) => connect?.(compatibleWallet, network)\n );\n };\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n return (\n <ConfirmSwap\n requiredWallets={getRequiredChains(bestRoute)}\n selectableWallets={selectableWallets}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmSwap)}\n onConfirm={async () => {\n confirmSwap?.().then(async (swap) => {\n if (swap) {\n try {\n await manager?.create(\n 'swap',\n { swapDetails: swap },\n { id: swap.requestId }\n );\n setSelectedSwap(swap.requestId);\n navigate('/' + navigationRoutes.swaps + `/${swap.requestId}`, {\n replace: true,\n });\n setTimeout(() => {\n setInputAmount('');\n }, 0);\n } catch (e) {\n setDbErrorMessage('Error: ' + (e as any)?.message);\n }\n }\n });\n }}\n onChange={(wallet) => setSelectedWallet(wallet)}\n confirmDisabled={loadingMetaStatus !== 'success' || confirmDisabled}\n handleConnectChain={(wallet) => handleConnectChain(wallet)}\n isExperimentalChain={(wallet) =>\n getKeplrCompatibleConnectedWallets(selectableWallets).length > 0\n ? isExperimentalChain(blockchains, wallet)\n : false\n }\n previewInputs={\n <>\n <TokenPreview\n chain={{\n displayName: firstStep?.from.blockchain || '',\n logo: firstStep?.from.blockchainLogo || '',\n }}\n token={{\n symbol: firstStep?.from.symbol || '',\n image: firstStep?.from.logo || '',\n }}\n usdValue={inputUsdValue}\n amount={fromAmount}\n label={t('From')}\n loadingStatus={\n loadingMetaStatus !== 'success'\n ? loadingMetaStatus\n : bestRouteloadingStatus\n }\n />\n <Spacer size={12} direction=\"vertical\" />\n <TokenPreview\n chain={{\n displayName: lastStep?.to.blockchain || '',\n logo: lastStep?.to.blockchainLogo || '',\n }}\n token={{\n symbol: lastStep?.to.symbol || '',\n image: lastStep?.to.logo || '',\n }}\n usdValue={outputUsdValue}\n amount={toAmount}\n label={t('To')}\n loadingStatus={\n loadingMetaStatus !== 'success'\n ? loadingMetaStatus\n : bestRouteloadingStatus\n }\n percentageChange={\n <PercentageChange\n inputUsdValue={inputUsdValue}\n outputUsdValue={outputUsdValue}\n />\n }\n />\n </>\n }\n previewRoutes={\n <RoutesOverview\n routes={bestRoute}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n />\n }\n loading={fetchingConfirmedRoute}\n errors={\n dbErrorMessage\n ? [dbErrorMessage, ...ConfirmSwapErrors(errors)]\n : ConfirmSwapErrors(errors)\n }\n warnings={ConfirmSwapWarnings(warnings)}\n extraMessages={\n <>\n {loadingMetaStatus === 'failed' && <LoadingFailedAlert />}\n {loadingMetaStatus === 'failed' && showHighSlippageWarning && (\n <Spacer direction=\"vertical\" />\n )}\n {showHighSlippageWarning && (\n <ConfirmSwapExtraMessages selectedSlippage={selectedSlippage} />\n )}\n </>\n }\n confirmButtonTitle={\n warnings.length > 0 || errors.length > 0\n ? 'Proceed anyway!'\n : 'Confirm swap!'\n }\n />\n );\n}\n","import { Manager } from '@rango-dev/queue-manager-core';\nimport {\n PendingSwapWithQueueID,\n SwapStorage,\n} from '@rango-dev/queue-manager-rango-preset';\n\nexport const getPendingSwaps = (manager: Manager | undefined) => {\n const result: PendingSwapWithQueueID[] = [];\n\n manager?.getAll().forEach((q, id) => {\n const storage = q.list.getStorage() as SwapStorage;\n\n if (storage?.swapDetails) {\n result.push({\n id,\n swap: storage?.swapDetails,\n });\n }\n });\n\n return result.sort(\n (a, b) => Number(b.swap.creationTime) - Number(a.swap.creationTime)\n );\n};\n","import { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\nimport dayjs from 'dayjs';\nimport { GroupBy } from '@rango-dev/ui';\n\nexport const groupSwapsByDate: GroupBy = swaps => {\n const output: Map<\n string,\n {\n title: string;\n swaps: PendingSwap[];\n }\n > = new Map([\n [\n 'today',\n {\n title: 'Today',\n swaps: [],\n },\n ],\n [\n 'week',\n {\n title: 'This week',\n swaps: [],\n },\n ],\n [\n 'month',\n {\n title: 'This month',\n swaps: [],\n },\n ],\n [\n 'year',\n {\n title: 'This year',\n swaps: [],\n },\n ],\n [\n 'history',\n {\n title: 'History',\n swaps: [],\n },\n ],\n ]);\n\n const now = dayjs();\n swaps.forEach(swap => {\n const swapDate = dayjs(Number(swap.creationTime));\n if (now.isSame(swapDate, 'day')) output.get('today')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'week')) output.get('week')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'month'))\n output.get('month')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'year')) output.get('year')?.swaps.push(swap);\n else output.get('history')?.swaps.push(swap);\n });\n\n return Array.from(output.values());\n};\n","import { History } from '@rango-dev/ui';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { useUiStore } from '../store/ui';\nimport { groupSwapsByDate } from '../utils/date';\n\nexport function HistoryPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const { manager, state } = useManager();\n const pendingSwaps = getPendingSwaps(manager).map(({ swap }) => swap);\n\n const loading = !state.loadedFromPersistor;\n\n return (\n <History\n list={pendingSwaps}\n groupBy={groupSwapsByDate}\n loading={loading}\n onSwapClick={(requestId) => {\n setSelectedSwap(requestId);\n navigate(`${requestId}`, { replace: true });\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swaps)}\n />\n );\n}\n","import React from 'react';\nimport {\n AngleDownIcon,\n Button,\n InfoCircleIcon,\n styled,\n TextField,\n Typography,\n Image,\n Spacer,\n} from '@rango-dev/ui';\nimport { useMetaStore } from '../store/meta';\nimport { BlockchainMeta, Token } from 'rango-sdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { numberToString } from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { getBalanceFromWallet } from '../utils/wallets';\nimport { useWalletsStore } from '../store/wallets';\nimport { useTranslation } from 'react-i18next';\nimport { PercentageChange } from './PercentageChange';\n\ntype PropTypes = (\n | {\n type: 'From';\n inputAmount: string;\n onAmountChange: (amount: string) => void;\n }\n | {\n type: 'To';\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber | null;\n }\n) & { chain: BlockchainMeta | null; token: Token | null };\n\nconst Box = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n overflow: 'hidden',\n});\n\nconst Container = styled('div', {\n boxSizing: 'border-box',\n borderRadius: '$5',\n padding: '$8 $16 $16 $16',\n\n variants: {\n type: {\n filled: {\n backgroundColor: '$neutral100',\n },\n outlined: {\n border: '1px solid $neutral100',\n backgroundColor: '$surface',\n },\n },\n },\n\n defaultVariants: {\n type: 'filled',\n },\n\n '.head': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '32px',\n },\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$2 0',\n '.selectors': {\n width: '35%',\n\n '._text': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n },\n '.amount': {\n width: '30%',\n },\n },\n '.output-usd': {\n display: 'flex',\n div: {\n display: 'flex',\n paddingLeft: '$8',\n },\n },\n});\n\nconst Options = styled('div', {\n display: 'flex',\n justifyContent: 'flex-end',\n\n '.balance': {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nconst ImagePlaceholder = styled('span', {\n width: '24px',\n height: '24px',\n backgroundColor: '$neutral100',\n borderRadius: '99999px',\n});\n\nconst OutputContainer = styled('div', {\n windth: '100%',\n height: '$48',\n borderRadius: '$5',\n backgroundColor: '$surface',\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 connectedWallets = useWalletsStore.use.connectedWallets();\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const navigate = useNavigate();\n const { t } = useTranslation();\n\n const tokenBalance =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(\n connectedWallets,\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 connectedWallets,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.amount || '0',\n getBalanceFromWallet(\n connectedWallets,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.decimal\n )\n : '0';\n\n const ItemSuffix = (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n {loadingStatus === 'failed' && <InfoCircleIcon color=\"error\" size={24} />}\n <AngleDownIcon />\n </div>\n );\n\n return (\n <Box>\n <Container type={props.type === 'From' ? 'filled' : 'outlined'}>\n <div className=\"head\">\n <Typography variant=\"body2\" color=\"neutral800\">\n {t(type)}\n </Typography>\n {props.type === 'From' ? (\n <Options>\n <div\n className=\"balance\"\n onClick={() => {\n if (tokenBalance !== '0')\n setInputAmount(tokenBalanceReal.split(',').join(''));\n }}\n >\n <Typography variant=\"body3\" color=\"neutral600\">{`${t(\n 'Balance'\n )}: ${tokenBalance} ${fromToken?.symbol || ''}`}</Typography>\n <Spacer size={4} />\n <Button type=\"primary\" variant=\"ghost\" size=\"compact\">\n {t('Max')}\n </Button>\n </div>\n </Options>\n ) : (\n <div className=\"output-usd\">\n <PercentageChange\n inputUsdValue={inputUsdValue}\n outputUsdValue={props.outputUsdValue}\n />\n <div>\n <Typography\n variant=\"caption\"\n color=\"neutral600\"\n >{`$${numberToString(props.outputUsdValue)}`}</Typography>\n </div>\n </div>\n )}\n </div>\n <div className=\"form\">\n <Button\n className=\"selectors\"\n onClick={() => {\n navigate(`${props.type.toLowerCase()}-chain`);\n }}\n variant=\"outlined\"\n disabled={loadingStatus === 'failed'}\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && chain ? (\n <Image src={chain.logo} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n >\n {loadingStatus === 'success' && chain\n ? chain.displayName\n : t('Chain')}\n </Button>\n <Spacer size={12} />\n <Button\n className=\"selectors\"\n onClick={() => {\n navigate(`${props.type.toLowerCase()}-token`);\n }}\n variant=\"outlined\"\n disabled={\n loadingStatus === 'failed' ||\n (type === 'From' && !fromChain) ||\n (type === 'To' && !toChain)\n }\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && token ? (\n <Image src={token.image} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n <Spacer size={12} />\n <div className=\"amount\">\n {props.type === 'From' ? (\n <TextField\n type=\"number\"\n size=\"large\"\n autoFocus\n placeholder=\"0\"\n style={{\n position: 'relative',\n backgroundColor: '$background !important',\n }}\n suffix={\n <span\n style={{\n position: 'absolute',\n right: '4px',\n bottom: '2px',\n }}\n >\n <Typography\n variant=\"caption\"\n color=\"neutral800\"\n >{`$${numberToString(inputUsdValue)}`}</Typography>\n </span>\n }\n value={props.inputAmount || ''}\n min={0}\n onChange={\n props.type === 'From'\n ? (event) => {\n props.onAmountChange(event.target.value);\n }\n : undefined\n }\n />\n ) : (\n <OutputContainer>\n <Typography variant=\"h4\">\n {fetchingBestRoute && '?'}\n {!!bestRoute?.result &&\n `≈ ${numberToString(props.outputAmount)}`}\n {(!inputAmount || inputAmount === '0') && '0'}\n </Typography>\n </OutputContainer>\n )}\n </div>\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled } from '@rango-dev/ui/';\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\" color=\"$neutral600\">\n {t('Powered By')}\n </Typography>\n <StyledAnchor href=\"https://rango.exchange\" target=\"_blank\">\n <Logo xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 33.68 29\">\n <defs></defs>\n <g id=\"Layer_2\" data-name=\"Layer 2\">\n <g id=\"Layer_1-2\" data-name=\"Layer 1\">\n <path d=\"M33.68,18.05A17.93,17.93,0,0,0,28.34,5.29,18.31,18.31,0,0,0,15.45,0H13.54V7.41L6.07,0H.69L9.83,9.07H0V11A17.93,17.93,0,0,0,5.34,23.71,18.32,18.32,0,0,0,18.24,29h1.9V21.59l7.38,7.31h5.39l-9-9h9.82ZM17.37,16.16H12.49a1.93,1.93,0,0,0-1.35.55,1.89,1.89,0,0,0-.56,1.34,1.85,1.85,0,0,0,.56,1.33,1.93,1.93,0,0,0,1.35.55h3.84V25.1A14.43,14.43,0,0,1,8,21a14.21,14.21,0,0,1-4.1-8.2H21.2a1.86,1.86,0,0,0,.74-.13,1.92,1.92,0,0,0,.64-.4,2,2,0,0,0,.43-.62,1.88,1.88,0,0,0,0-1.47,2,2,0,0,0-.43-.62,1.92,1.92,0,0,0-.64-.4,1.86,1.86,0,0,0-.74-.13H17.35V3.9A14.43,14.43,0,0,1,25.64,8a14.19,14.19,0,0,1,4.11,8.2Zm2.12-5.27a1.43,1.43,0,0,1,.26-.83,1.52,1.52,0,0,1,.67-.56,1.55,1.55,0,0,1,.88-.08,1.51,1.51,0,0,1,.77.4,1.54,1.54,0,0,1,.42.77,1.41,1.41,0,0,1-.09.86,1.47,1.47,0,0,1-.55.68,1.56,1.56,0,0,1-.84.25,1.52,1.52,0,0,1-1.52-1.49Z\" />\n <path d=\"M21.7,11.57a.68.68,0,0,0-.12-.38.64.64,0,0,0-.31-.25.68.68,0,0,0-.75.15.61.61,0,0,0-.19.35.62.62,0,0,0,0,.4.67.67,0,0,0,.25.3.69.69,0,0,0,.39.12.7.7,0,0,0,.49-.2A.68.68,0,0,0,21.7,11.57Z\" />\n </g>\n </g>\n </Logo>\n <Typography variant=\"body2\">RANGO</Typography>\n </StyledAnchor>\n </Container>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { SearchParams } from '../constants/searchParams';\nimport { useBestRouteStore } from '../store/bestRoute';\n\nexport function SwithFromAndTo({ count }: { count: number }) {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const outputAmount = useBestRouteStore.use.outputAmount();\n\n useEffect(() => {\n if (!firstRender.current) {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n setSearchParams({\n ...(toChainString && { [SearchParams.FROM_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.FROM_TOKEN]: toTokenString }),\n ...(fromChainString && { [SearchParams.TO_CHAIN]: fromChainString }),\n ...(fromTokenString && { [SearchParams.TO_TOKEN]: fromTokenString }),\n ...(outputAmount && { [SearchParams.FROM_AMOUNT]: outputAmount.toString() }),\n });\n } else {\n firstRender.current = false;\n }\n }, [count]);\n\n return null;\n}\n","import { styled } from '@rango-dev/ui';\n\nexport const Footer = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n paddingTop: '$16',\n});\n","export const errorMessages = {\n genericServerError: 'Error connecting server, please reload the app and try again',\n};\n","import React from 'react';\nimport {\n SettingsIcon,\n Tooltip,\n styled,\n Button,\n HistoryIcon,\n RetryIcon,\n} from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nconst ButtonsContainer = styled('div', {\n display: 'flex',\n});\n\ninterface PropTypes {\n onClickRefresh?: () => void;\n}\n\nexport function HeaderButtons(props: PropTypes) {\n const { onClickRefresh } = props;\n const navigate = useNavigate();\n\n return (\n <ButtonsContainer>\n <Tooltip content=\"Refresh\">\n <Button\n variant=\"ghost\"\n onClick={onClickRefresh}\n disabled={!onClickRefresh}\n >\n <RetryIcon size={24} disabled={!onClickRefresh} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Transactions History\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.swaps)}\n >\n <HistoryIcon size={24} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Settings\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n <SettingsIcon size={24} />\n </Button>\n </Tooltip>\n </ButtonsContainer>\n );\n}\n","import {\n Alert,\n BestRoute,\n Button,\n styled,\n Typography,\n VerticalSwapIcon,\n Header,\n} from '@rango-dev/ui';\nimport React, { useEffect, useState } from 'react';\nimport { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { TokenInfo } from '../components/TokenInfo';\nimport { fetchBestRoute, useBestRouteStore } from '../store/bestRoute';\nimport { BottomLogo } from '../components/BottomLogo';\nimport { SwithFromAndTo } from '../components/SwitchFromAndTo';\nimport { Footer } from '../components/Footer';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useMetaStore } from '../store/meta';\nimport { useWalletsStore } from '../store/wallets';\nimport { errorMessages } from '../constants/errors';\nimport {\n getSwapButtonState,\n getOutputRatio,\n hasLimitError,\n outputRatioHasWarning,\n canComputePriceImpact,\n LimitErrorMessage,\n getTotalFeeInUsd,\n hasHighFee,\n} from '../utils/swap';\nimport {\n numberToString,\n secondsToString,\n totalArrivalTime,\n} from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { HeaderButtons } from '../components/HeaderButtons';\nimport { useUiStore } from '../store/ui';\nimport { getFormatedBestRoute } from '../utils/routing';\n\nconst Container = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst FromContainer = styled('div', {\n position: 'relative',\n paddingBottom: '$12',\n});\n\nconst SwitchButtonContainer = styled('div', {\n position: 'absolute',\n bottom: '-12px',\n left: '50%',\n transform: 'translate(-50%, 10%)',\n});\n\nconst BestRouteContainer = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nconst Alerts = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nexport function Home() {\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n const [count, setCount] = useState(0);\n const fromChain = useBestRouteStore.use.fromChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toChain = useBestRouteStore.use.toChain();\n const toToken = useBestRouteStore.use.toToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const outputAmount = useBestRouteStore.use.outputAmount();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const tokens = useMetaStore.use.meta().tokens;\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const bestRouteError = useBestRouteStore.use.error();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const connectedWallets = useWalletsStore.use.connectedWallets();\n const setCurrentPage = useUiStore.use.setCurrentPage();\n const switchFromAndTo = useBestRouteStore.use.switchFromAndTo();\n\n const errorMessage =\n loadingMetaStatus === 'failed'\n ? errorMessages.genericServerError\n : bestRouteError;\n\n const needsToWarnEthOnPath = false;\n\n const showBestRoute =\n inputAmount && (!!bestRoute || fetchingBestRoute || bestRouteError);\n\n const outToInRatio = getOutputRatio(inputUsdValue, outputUsdValue);\n\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outToInRatio);\n\n const { fromAmountRangeError, recommendation, swap } =\n LimitErrorMessage(bestRoute);\n\n const priceImpactCanNotBeComputed = !canComputePriceImpact(\n bestRoute,\n inputAmount,\n inputUsdValue,\n outputUsdValue\n );\n\n const swapButtonState = getSwapButtonState(\n loadingMetaStatus,\n connectedWallets,\n fetchingBestRoute,\n bestRoute,\n hasLimitError(bestRoute),\n highValueLoss,\n priceImpactCanNotBeComputed,\n needsToWarnEthOnPath,\n inputAmount\n );\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n const highFee = hasHighFee(totalFeeInUsd);\n\n useEffect(() => {\n setCurrentPage(navigationRoutes.home);\n\n return setCurrentPage.bind(null, '');\n }, []);\n\n return (\n <Container>\n <Header\n title=\"SWAP\"\n suffix={\n <HeaderButtons\n onClickRefresh={\n !!bestRoute || bestRouteError ? fetchBestRoute : undefined\n }\n />\n }\n />\n <FromContainer>\n <TokenInfo\n type=\"From\"\n chain={fromChain}\n token={fromToken}\n onAmountChange={setInputAmount}\n inputAmount={inputAmount}\n />\n <SwitchButtonContainer>\n <Button\n variant=\"ghost\"\n onClick={() => {\n switchFromAndTo();\n setCount((prev) => prev + 1);\n }}\n >\n <VerticalSwapIcon size={32} />\n {isRouterInContext && <SwithFromAndTo count={count} />}\n </Button>\n </SwitchButtonContainer>\n </FromContainer>\n <TokenInfo\n type=\"To\"\n chain={toChain}\n token={toToken}\n outputAmount={\n outputAmount ? new BigNumber(outputAmount) : new BigNumber(0)\n }\n outputUsdValue={outputUsdValue}\n />\n {showBestRoute && (\n <BestRouteContainer>\n <BestRoute\n error={bestRouteError}\n loading={fetchingBestRoute}\n data={getFormatedBestRoute(bestRoute)}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n feeWarning={highFee}\n totalTime={secondsToString(totalArrivalTime(bestRoute))}\n />\n </BestRouteContainer>\n )}\n {(errorMessage || hasLimitError(bestRoute)) && (\n <Alerts>\n {errorMessage && <Alert type=\"error\">{errorMessage}</Alert>}\n {hasLimitError(bestRoute) && (\n <Alert type=\"error\" title={`${swap?.swapperId} Limit`}>\n <>\n <Typography variant=\"body2\">\n {`${fromAmountRangeError}, Yours: ${numberToString(\n swap?.fromAmount || null\n )} ${swap?.from.symbol}`}\n </Typography>\n <Typography variant=\"body2\">{recommendation}</Typography>\n </>\n </Alert>\n )}\n </Alerts>\n )}\n <Footer>\n <Button\n type=\"primary\"\n align=\"grow\"\n size=\"large\"\n disabled={swapButtonState.disabled}\n onClick={() => {\n if (swapButtonState.title === 'Connect Wallet')\n navigate(navigationRoutes.wallets);\n else {\n navigate(navigationRoutes.confirmSwap, { replace: true });\n }\n }}\n >\n {swapButtonState.title}\n </Button>\n <BottomLogo />\n </Footer>\n </Container>\n );\n}\n","import { LiquiditySourcesSelector } from '@rango-dev/ui';\nimport React from 'react';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { removeDuplicateFrom } from '../utils/common';\ninterface PropTypes {\n supportedSwappers?: string[];\n}\nexport function LiquiditySourcePage({ supportedSwappers }: PropTypes) {\n const swappers = useMetaStore.use.meta().swappers;\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const toggleLiquiditySource = useSettingsStore.use.toggleLiquiditySource();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const toggleAllLiquiditySources =\n useSettingsStore.use.toggleAllLiquiditySources();\n\n const { navigateBackFrom } = useNavigateBack();\n\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n\n return (\n <LiquiditySourcesSelector\n toggleAll={toggleAllLiquiditySources}\n list={\n supportedSwappers\n ? uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter((s) => s === item.title).length > 0\n )\n : uniqueSwappersGroups\n }\n onChange={(liquiditySource) =>\n toggleLiquiditySource(liquiditySource.title)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.liquiditySources)}\n loadingStatus={loadingMetaStatus}\n />\n );\n}\n","import React from 'react';\nimport { BlockchainSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedChains?: string[];\n}\n\nexport function SelectChainPage(props: PropTypes) {\n const { type, supportedChains } = props;\n const blockchains = supportedChains\n ? useMetaStore.use\n .meta()\n .blockchains.filter((chain) => supportedChains.includes(chain.name))\n : useMetaStore.use.meta().blockchains;\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setToChain = useBestRouteStore.use.setToChain();\n\n const { navigateBackFrom } = useNavigateBack();\n\n return (\n <BlockchainSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={blockchains}\n selected={type === 'from' ? fromChain : toChain}\n loadingStatus={loadingStatus}\n onChange={(chain) => {\n if (type === 'from') setFromChain(chain, true);\n else setToChain(chain, true);\n navigateBackFrom(navigationRoutes.fromChain);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromChain)}\n />\n );\n}\n","import React from 'react';\nimport { TokenSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { Asset, Token } from 'rango-sdk';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { tokensAreEqual } from '../utils/wallets';\nimport { useMetaStore } from '../store/meta';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedTokens?: Asset[];\n}\n\nexport interface TokenWithBalance extends Token {\n balance?: {\n amount: string;\n usdValue: string;\n };\n}\n\nexport function SelectTokenPage(props: PropTypes) {\n const { navigateBackFrom } = useNavigateBack();\n\n const { type, supportedTokens } = props;\n const sourceTokens = useBestRouteStore.use.sourceTokens();\n const destinationTokens = useBestRouteStore.use.destinationTokens();\n const supportedSourceTokens = supportedTokens\n ? sourceTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n )\n : sourceTokens;\n\n const supportedDestinationTokens = supportedTokens\n ? destinationTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n )\n : destinationTokens;\n\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToToken = useBestRouteStore.use.setToToken();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n\n return (\n <TokenSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={type == 'from' ? supportedSourceTokens : supportedDestinationTokens}\n selected={type === 'from' ? fromToken : toToken}\n onChange={(token) => {\n if (type === 'from') setFromToken(token);\n else setToToken(token);\n navigateBackFrom(navigationRoutes.fromToken);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromToken)}\n loadingStatus={loadingMetaStatus}\n />\n );\n}\n","import React from 'react';\nimport { Settings } from '@rango-dev/ui';\nimport { useSettingsStore } from '../store/settings';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { removeDuplicateFrom } from '../utils/common';\nimport {\n MAX_SLIPPAGE,\n MIN_SLIPPGAE,\n SLIPPAGES,\n} from '../constants/swapSettings';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\ninterface PropTypes {\n supportedSwappers?: string[];\n singleTheme?: boolean;\n}\nexport function SettingsPage({ supportedSwappers, singleTheme }: PropTypes) {\n const slippage = useSettingsStore.use.slippage();\n const setSlippage = useSettingsStore.use.setSlippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const customSlippage = useSettingsStore.use.customSlippage();\n const setCustomSlippage = useSettingsStore.use.setCustomSlippage();\n const theme = useSettingsStore.use.theme();\n const setTheme = useSettingsStore.use.setTheme();\n const swappers = useMetaStore.use.meta().swappers;\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n\n const infiniteApprove = useSettingsStore.use.infiniteApprove();\n const toggleInfiniteApprove = useSettingsStore.use.toggleInfiniteApprove();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n supportedSwappers &&\n uniqueSwappersGroups.filter(\n (item) => supportedSwappers.filter((s) => s === item.title).length > 0\n );\n\n const supportedUniqueSwappersGroups = supportedSwappers\n ? uniqueSwappersGroups.filter(\n (item) => supportedSwappers.filter((s) => s === item.title).length > 0\n )\n : uniqueSwappersGroups;\n\n return (\n <Settings\n slippages={SLIPPAGES}\n selectedSlippage={slippage}\n onSlippageChange={(slippage) => setSlippage(slippage)}\n onLiquiditySourcesClick={() =>\n navigate(navigationRoutes.liquiditySources)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.settings)}\n liquiditySources={supportedUniqueSwappersGroups}\n selectedLiquiditySources={supportedUniqueSwappersGroups.filter(\n (s) => s.selected\n )}\n singleTheme={singleTheme}\n customSlippage={customSlippage}\n onCustomSlippageChange={setCustomSlippage}\n minSlippage={MIN_SLIPPGAE}\n maxSlippage={MAX_SLIPPAGE}\n selectedTheme={theme}\n onThemeChange={setTheme}\n infiniteApprove={infiniteApprove}\n toggleInfiniteApprove={toggleInfiniteApprove}\n loadingStatus={loadingMetaStatus}\n />\n );\n}\n","import {\n Alert,\n SecondaryPage,\n styled,\n Wallet,\n WalletState,\n WalletInfo,\n} from '@rango-dev/ui';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { getlistWallet, sortWalletsBasedOnState } from '../utils/wallets';\nimport { WalletType, detectMobileScreens } from '@rango-dev/wallets-shared';\nimport { useWallets } from '@rango-dev/wallets-core';\n\nimport { useUiStore } from '../store/ui';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useTranslation } from 'react-i18next';\nimport { useMetaStore } from '../store/meta';\nimport { Spinner } from '@rango-dev/ui';\nimport { LoadingFailedAlert } from '@rango-dev/ui';\n\ninterface PropTypes {\n supportedWallets?: WalletType[];\n multiWallets: boolean;\n}\n\nconst ListContainer = styled('div', {\n display: 'grid',\n gap: '.5rem',\n gridTemplateColumns: ' repeat(2, minmax(0, 1fr))',\n alignContent: 'baseline',\n padding: '0.5rem',\n overflowY: 'auto',\n});\n\nconst LoaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n position: 'absolute',\n top: '50%',\n});\n\nconst AlertContainer = styled('div', {\n paddingBottom: '$16',\n});\nexport function WalletsPage({ supportedWallets, multiWallets }: PropTypes) {\n const { navigateBackFrom } = useNavigateBack();\n const { state, disconnect, getWalletInfo, connect } = useWallets();\n const wallets = getlistWallet(\n state,\n getWalletInfo,\n supportedWallets || Object.values(WalletType)\n );\n const walletsRef = useRef<WalletInfo[]>();\n\n let sortedWallets = detectMobileScreens()\n ? wallets.filter((wallet) => wallet.showOnMobile)\n : wallets;\n sortedWallets = sortWalletsBasedOnState(sortedWallets);\n const [walletErrorMessage, setWalletErrorMessage] = useState('');\n const toggleConnectWalletsButton =\n useUiStore.use.toggleConnectWalletsButton();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const { t } = useTranslation();\n\n const onSelectWallet = async (type: WalletType) => {\n const wallet = state(type);\n try {\n if (walletErrorMessage) setWalletErrorMessage('');\n if (wallet.connected) {\n await disconnect(type);\n } else {\n if (\n !multiWallets &&\n !!wallets.find((w) => w.state === WalletState.CONNECTED)\n ) {\n return;\n }\n await connect(type);\n }\n } catch (e) {\n setWalletErrorMessage('Error: ' + (e as any)?.message);\n }\n };\n const disconnectConnectingWallets = () => {\n const connectingWallets =\n walletsRef.current?.filter(\n (wallet) => wallet.state === WalletState.CONNECTING\n ) || [];\n for (const wallet of connectingWallets) {\n disconnect(wallet.type);\n }\n };\n useEffect(() => {\n toggleConnectWalletsButton();\n return () => {\n disconnectConnectingWallets();\n toggleConnectWalletsButton();\n };\n }, []);\n\n useEffect(() => {\n walletsRef.current = wallets;\n }, [wallets]);\n\n return (\n <SecondaryPage\n title={t('Select Wallet') || ''}\n textField={false}\n onBack={navigateBackFrom.bind(null, navigationRoutes.wallets)}\n >\n <>\n {walletErrorMessage && (\n <AlertContainer>\n <Alert type=\"error\" title={walletErrorMessage} />\n </AlertContainer>\n )}\n {loadingMetaStatus === 'loading' && (\n <LoaderContainer className=\"loader\">\n <Spinner size={24} />\n </LoaderContainer>\n )}\n {loadingMetaStatus === 'failed' && <LoadingFailedAlert />}\n <ListContainer>\n {loadingMetaStatus === 'success' &&\n sortedWallets.map((wallet, index) => (\n <Wallet\n {...wallet}\n key={`${index}-${wallet.type}`}\n onClick={onSelectWallet}\n />\n ))}\n </ListContainer>\n </>\n </SecondaryPage>\n );\n}\n","import { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\n\nexport function timeSince(timeMillis: number): string {\n const seconds = Math.floor((new Date().getTime() - timeMillis) / 1000);\n let intervalType: string;\n\n let interval = Math.floor(seconds / 31536000);\n if (interval >= 1) {\n intervalType = 'year';\n } else {\n interval = Math.floor(seconds / 2592000);\n if (interval >= 1) {\n intervalType = 'month';\n } else {\n interval = Math.floor(seconds / 86400);\n if (interval >= 1) {\n intervalType = 'day';\n } else {\n interval = Math.floor(seconds / 3600);\n if (interval >= 1) {\n intervalType = 'hour';\n } else {\n interval = Math.floor(seconds / 60);\n if (interval >= 1) {\n intervalType = 'minute';\n } else {\n interval = seconds;\n intervalType = 'second';\n }\n }\n }\n }\n }\n\n if (interval > 1 || interval === 0) {\n intervalType += 's';\n }\n\n return interval + ' ' + intervalType;\n}\n\nexport function getSwapDate(pendingSwap: PendingSwap) {\n return pendingSwap.finishTime\n ? `${timeSince(parseInt(pendingSwap.finishTime))} ago`\n : `${timeSince(parseInt(pendingSwap.creationTime))} ago`;\n}\n","import React from 'react';\nimport { SecondaryPage, Spinner, Alert, styled } from '@rango-dev/ui';\n\nconst PlaceholderContainer = styled('div', { height: '450px' });\n\nexport const LoaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n paddingTop: '33%',\n flex: 1,\n});\n\ninterface PropTypes {\n requestId: string;\n loading: boolean;\n onBack: () => void;\n}\n\nexport function SwapDetailsPlaceholder(props: PropTypes) {\n const { requestId, loading, onBack } = props;\n\n return (\n <SecondaryPage title=\"Swap Details\" textField={false} onBack={onBack}>\n <PlaceholderContainer>\n {loading ? (\n <LoaderContainer>\n <Spinner size={24} />\n </LoaderContainer>\n ) : (\n <Alert\n type=\"secondary\"\n title={`Swap with request ID = ${requestId} not found.`}\n />\n )}\n </PlaceholderContainer>\n </SecondaryPage>\n );\n}\n","import React from 'react';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { SwapHistory, useCopyToClipboard } from '@rango-dev/ui';\nimport { useUiStore } from '../store/ui';\nimport {\n cancelSwap,\n PendingSwapNetworkStatus,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport {\n getCurrentBlockchainOfOrNull,\n getCurrentStep,\n getRelatedWalletOrNull,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { getSwapDate } from '../utils/time';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport {\n getLastConvertedTokenInFailedSwap,\n getSwapMessages,\n isNetworkStatusInWarningState,\n shouldRetrySwap,\n} from '../utils/swap';\n//@ts-ignore\nimport { t } from 'i18next';\nimport { SwapDetailsPlaceholder } from '../components/SwapDetailsPlaceholder';\nimport { getFormatedPendingSwap } from '../utils/routing';\n\nexport function SwapDetailsPage() {\n const selectedSwapRequestId = useUiStore.use.selectedSwapRequestId();\n const { canSwitchNetworkTo, connect } = useWallets();\n const retry = useBestRouteStore.use.retry();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const [isCopied, handleCopy] = useCopyToClipboard(2000);\n const { manager, state } = useManager();\n\n const pendingSwaps = getPendingSwaps(manager);\n const selectedSwap = pendingSwaps.find(\n ({ swap }) => swap.requestId === selectedSwapRequestId\n );\n\n const onCancel = () => {\n const swap = manager?.get(selectedSwap?.id!);\n if (swap) cancelSwap(swap);\n };\n const swap = selectedSwap?.swap;\n const loading = !state.loadedFromPersistor;\n\n if (!swap)\n return (\n <SwapDetailsPlaceholder\n requestId={selectedSwapRequestId || ''}\n loading={loading}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n />\n );\n\n const currentStep = getCurrentStep(swap);\n\n const currentStepBlockchain = currentStep\n ? getCurrentBlockchainOfOrNull(swap, currentStep)\n : null;\n const currentStepWallet = currentStep\n ? getRelatedWalletOrNull(swap, currentStep)\n : null;\n const currentStepNetworkStatus = currentStep?.networkStatus;\n\n const swapMessages = getSwapMessages(swap, currentStep);\n\n const networkWarningState = isNetworkStatusInWarningState(currentStep);\n\n const swapDate = getSwapDate(swap);\n\n const shouldRetry = shouldRetrySwap(swap);\n\n const switchNetwork =\n !!currentStepBlockchain &&\n !!currentStepWallet?.walletType &&\n currentStepNetworkStatus ===\n PendingSwapNetworkStatus.WaitingForNetworkChange &&\n canSwitchNetworkTo(currentStepWallet?.walletType, currentStepBlockchain)\n ? connect.bind(null, currentStepWallet.walletType, currentStepBlockchain)\n : undefined;\n\n const lastConvertedTokenInFailedSwap =\n getLastConvertedTokenInFailedSwap(swap);\n\n return (\n <SwapHistory\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n /* TODO: It was temporarily removed to find a better solution*/\n /*\n previewInputs={\n <>\n <TokenPreview\n chain={{\n displayName: firstStep?.fromBlockchain || '',\n logo: firstStep?.fromBlockchainLogo || '',\n }}\n token={{\n symbol: firstStep?.fromSymbol || '',\n image: firstStep?.fromLogo || '',\n }}\n amount={fromAmount}\n label={t('From')}\n loadingStatus={'success'}\n />\n <Spacer size={12} direction=\"vertical\" />\n <TokenPreview\n chain={{\n displayName: lastStep?.toBlockchain || '',\n logo: lastStep?.toBlockchainLogo || '',\n }}\n token={{\n symbol: lastStep?.toSymbol || '',\n image: lastStep?.toLogo || '',\n }}\n amount={toAmount}\n label={t('To')}\n loadingStatus={'success'}\n />\n </>\n }\n */\n pendingSwap={getFormatedPendingSwap(swap)}\n onCopy={handleCopy}\n isCopied={isCopied}\n onCancel={onCancel}\n shortMessage={swapMessages.shortMessage}\n detailedMessage={swapMessages.detailedMessage}\n currentStepBlockchain={currentStepBlockchain || ''}\n switchNetwork={switchNetwork}\n type={\n networkWarningState ? 'warning' : swap.extraMessageSeverity || undefined\n }\n date={swapDate}\n {...(shouldRetry && {\n onRetry: () => {\n retry(swap);\n setTimeout(() => {\n navigate(navigationRoutes.home);\n }, 0);\n },\n })}\n {...(lastConvertedTokenInFailedSwap && {\n lastConvertedTokenInFailedSwap: {\n blockchain: lastConvertedTokenInFailedSwap.blockchain,\n outputAmount: lastConvertedTokenInFailedSwap.outputAmount || '',\n symbol: lastConvertedTokenInFailedSwap.symbol,\n },\n })}\n />\n );\n}\n","import React from 'react';\nimport { useRoutes } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { ConfirmSwapPage } from '../pages/ConfirmSwapPage';\nimport { HistoryPage } from '../pages/HistoryPage';\nimport { Home } from '../pages/Home';\nimport { LiquiditySourcePage } from '../pages/LiquiditySourcesPage';\nimport { SelectChainPage } from '../pages/SelectChainPage';\nimport { SelectTokenPage } from '../pages/SelectTokenPage';\nimport { SettingsPage } from '../pages/SettingsPage';\nimport { WalletsPage } from '../pages/WalletsPage';\nimport { SwapDetailsPage } from '../pages/SwapDetailsPage';\nimport { WidgetConfig } from '../types';\n\nconst getAbsolutePath = (path: string) => path.replace('/', '');\n\ninterface PropTypes {\n config?: WidgetConfig;\n}\n\nexport function AppRoutes(props: PropTypes) {\n const { config } = props;\n\n return useRoutes([\n {\n path: navigationRoutes.home,\n element: <Home />,\n },\n {\n path: navigationRoutes.fromChain,\n element: (\n <SelectChainPage\n type=\"from\"\n supportedChains={config?.from?.blockchains}\n />\n ),\n },\n {\n path: navigationRoutes.toChain,\n element: (\n <SelectChainPage type=\"to\" supportedChains={config?.to?.blockchains} />\n ),\n },\n {\n path: navigationRoutes.fromToken,\n element: (\n <SelectTokenPage type=\"from\" supportedTokens={config?.from?.tokens} />\n ),\n },\n {\n path: navigationRoutes.toToken,\n element: (\n <SelectTokenPage type=\"to\" supportedTokens={config?.to?.tokens} />\n ),\n },\n {\n path: navigationRoutes.settings,\n element: <SettingsPage singleTheme= {config?.theme?.singleTheme} supportedSwappers={config?.liquiditySources} />,\n },\n {\n path: navigationRoutes.liquiditySources,\n element: (\n <LiquiditySourcePage supportedSwappers={config?.liquiditySources} />\n ),\n },\n { path: navigationRoutes.swaps, element: <HistoryPage /> },\n {\n path: navigationRoutes.swapDetails,\n element: <SwapDetailsPage />,\n },\n {\n path: navigationRoutes.wallets,\n element: (\n <WalletsPage\n supportedWallets={config?.wallets}\n multiWallets={\n typeof config?.multiWallets === 'undefined'\n ? true\n : config.multiWallets\n }\n />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.confirmSwap),\n element: <ConfirmSwapPage />,\n },\n ]);\n}\n","import {\n Button,\n AddWalletIcon,\n Typography,\n styled,\n Spinner,\n} from '@rango-dev/ui';\nimport React, { useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { AppRoutes } from './AppRoutes';\nimport { fetchingBalanceSelector, useWalletsStore } from '../store/wallets';\nimport {\n calculateWalletUsdValue,\n getSelectableWallets,\n tokensAreEqual,\n} from '../utils/wallets';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { WidgetConfig } from '../types';\nimport { useTranslation } from 'react-i18next';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { Image } from '@rango-dev/ui';\n\nconst Header = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n '.balance': {\n display: 'flex',\n },\n});\n\nconst WalletImageContainer = styled('div', {\n marginLeft: -15,\n marginRight: '$6',\n '& img': {\n borderRadius: '50%',\n },\n});\n\nexport type LayoutProps = {\n config?: WidgetConfig;\n};\n\nexport function Layout({ config }: LayoutProps) {\n const navigate = useNavigate();\n const { connectedWallets, selectedWallets } = useWalletsStore();\n const { getWalletInfo } = useWallets();\n const connectedWalletsImages = removeDuplicateFrom(\n getSelectableWallets(connectedWallets, selectedWallets, getWalletInfo).map(\n (w) => w.image\n )\n );\n const { blockchains, tokens } = useMetaStore.use.meta();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const setAffiliateRef = useSettingsStore.use.setAffiliateRef();\n\n const totalBalance = calculateWalletUsdValue(connectedWallets);\n const connectWalletsButtonDisabled =\n useUiStore.use.connectWalletsButtonDisabled();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const fetchingBalance = useWalletsStore(fetchingBalanceSelector);\n\n const { t } = useTranslation();\n useEffect(() => {\n if (loadingMetaStatus === 'success') {\n const chain = blockchains.find(\n (chain) => chain.name === config?.to?.blockchain\n );\n const token = tokens.find((t) =>\n tokensAreEqual(t, config?.to?.token || null)\n );\n setToChain(chain || null);\n setToToken(token || null);\n }\n }, [config?.to?.token, config?.to?.blockchain, loadingMetaStatus]);\n\n useEffect(() => {\n setInputAmount(config?.amount?.toString() || '');\n }, [config?.amount]);\n\n useEffect(() => {\n if (loadingMetaStatus === 'success') {\n const chain = blockchains.find(\n (chain) => chain.name === config?.from?.blockchain\n );\n const token = tokens.find((t) =>\n tokensAreEqual(t, config?.from?.token || null)\n );\n\n setFromChain(chain || null);\n setFromToken(token || null);\n }\n }, [config?.from?.token, config?.from?.blockchain, loadingMetaStatus]);\n\n useEffect(() => {\n setAffiliateRef(config?.affiliateRef || null);\n }, [config?.affiliateRef]);\n return (\n <>\n <Header>\n <Button\n size=\"small\"\n suffix={<AddWalletIcon size={20} />}\n variant=\"ghost\"\n flexContent\n loading={loadingMetaStatus === 'loading'}\n disabled={loadingMetaStatus === 'failed'}\n onClick={() => {\n if (!connectWalletsButtonDisabled)\n navigate(navigationRoutes.wallets);\n }}\n >\n {connectedWalletsImages?.length ? (\n connectedWalletsImages.map((walletImage, index) => (\n <WalletImageContainer key={index}>\n <Image src={walletImage} size={24} />\n </WalletImageContainer>\n ))\n ) : (\n <></>\n )}\n <div className=\"balance\">\n <Typography variant=\"body2\">\n {!connectedWallets?.length\n ? t('Connect Wallet')\n : `$${totalBalance || 0}`}\n </Typography>\n {fetchingBalance && <Spinner />}\n </div>\n </Button>\n </Header>\n <AppRoutes config={config} />\n </>\n );\n}\n","import { globalCss } from '@rango-dev/ui';\n\nexport const globalFont = (fontFamily: string) =>\n globalCss({\n '@import': [\n \"url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap')\",\n \"url('https://fonts.cdnfonts.com/css/times-new-roman')\",\n ],\n body: {\n fontFamily,\n },\n })();\n","import { useEffect, useRef } from 'react';\n\nexport default function usePrevious(value: string) {\n // The ref object is a generic container whose current property is mutable ...\n // ... and can hold any value, similar to an instance property on a class\n const ref = useRef<string>();\n // Store current value in ref\n useEffect(() => {\n ref.current = value;\n }, [value]); // Only re-run if value changes\n // Return previous value (happens before update in useEffect above)\n return ref.current;\n}\n","import { createTheme, generateRangeColors } from '@rango-dev/ui';\nimport { useState, useEffect, useLayoutEffect } from 'react';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { WidgetTheme } from '../types';\nimport usePrevious from './usePrevious';\n\nexport function useTheme({\n colors: themeColors,\n fontFamily = 'Roboto',\n borderRadius = 8,\n mode = 'auto',\n}: WidgetTheme) {\n const theme = useSettingsStore.use.theme();\n const fetchMeta = useMetaStore.use.fetchMeta();\n const setTheme = useSettingsStore.use.setTheme();\n const light = themeColors?.light;\n const dark = themeColors?.dark;\n const neutral = light?.neutral || '#fafafa';\n const background = light?.background || '#fff';\n const foreground = light?.foreground || '#000';\n\n const darkColors = {\n ...generateRangeColors('primary', 'dark', dark?.primary),\n ...generateRangeColors('error', 'dark', dark?.error),\n ...generateRangeColors('warning', 'dark', dark?.warning),\n ...generateRangeColors('success', 'dark', dark?.success),\n ...generateRangeColors('neutral', 'dark', dark?.neutral),\n surface: dark?.surface,\n background: dark?.background,\n foreground: dark?.foreground,\n };\n\n const lightColors = {\n surface: light?.surface || '#fff',\n ...generateRangeColors('primary', 'light', light?.primary || '#5FA425'),\n ...generateRangeColors('error', 'light', light?.error || '#FF0000'),\n ...generateRangeColors('warning', 'light', light?.warning || '#F5A623'),\n ...generateRangeColors('success', 'light', light?.success || '#0070F3'),\n ...generateRangeColors('neutral', 'light', neutral),\n background,\n foreground,\n };\n\n const customLightTheme = createTheme({\n colors: lightColors,\n radii: {\n 5: `${borderRadius}px`,\n },\n shadows: {\n s: `0px 3px 5px 3px ${light?.neutral || '#f0f2f5'} ,0px 6px 10px 3px ${\n light?.neutral || '#f0f2f5'\n }, 0px 1px 18px 3px ${light?.neutral || '#f0f2f5'}`,\n },\n });\n\n const customDarkTheme = createTheme({\n colors: {\n ...lightColors,\n ...generateRangeColors('neutral', 'dark', '#111111'),\n foreground: background,\n background: foreground,\n surface: '#000',\n ...JSON.parse(JSON.stringify(darkColors)),\n },\n radii: {\n 5: `${borderRadius}px`,\n },\n shadows: {\n s: `0px 3px 5px 3px ${dark?.neutral || '#222'}, 0px 6px 10px 3px ${\n dark?.neutral || '#222'\n }, 0px 1px 18px 3px ${dark?.neutral || '#222'}`,\n },\n });\n const [OSTheme, setOSTheme] = useState('light');\n\n useEffect(() => {\n (async () => {\n await fetchMeta();\n })();\n\n const switchTheme = (event: MediaQueryListEvent) => {\n if (event.matches) setOSTheme('dark');\n else setOSTheme('light');\n };\n\n if (\n window.matchMedia &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ) {\n setOSTheme('dark');\n }\n\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .addEventListener('change', switchTheme);\n return () => {\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .removeEventListener('change', switchTheme);\n };\n }, []);\n useEffect(() => {\n if (mode !== 'auto') setTheme(mode);\n }, [mode]);\n const prevFont = usePrevious(fontFamily);\n\n useLayoutEffect(() => {\n const { classList } = document.body;\n\n if (prevFont) classList.remove(`font_${prevFont.replace(/ /g, '')}`);\n classList.add(`font_${fontFamily.replace(/ /g, '')}`);\n }, [fontFamily]);\n\n const getActiveTheme = () => {\n if (theme === 'auto')\n return OSTheme === 'dark' ? customDarkTheme : customLightTheme;\n else return theme === 'dark' ? customDarkTheme : customLightTheme;\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, useMemo } from 'react';\nimport { Provider as ManagerProvider } from '@rango-dev/queue-manager-react';\nimport {\n makeQueueDefinition,\n SwapQueueContext,\n checkWaitingForNetworkChange,\n SwapProgressNotification,\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';\nimport { getConfig } from './utils/configs';\n\nfunction QueueManager(props: PropsWithChildren<{}>) {\n const {\n providers,\n getSigners,\n state,\n connect,\n canSwitchNetworkTo,\n getWalletInfo,\n } = useWallets();\n\n const swapQueueDef = useMemo(() => {\n return makeQueueDefinition({\n API_KEY: getConfig('API_KEY'),\n });\n }, []);\n const getOneOfWalletsDetails = useWalletsStore.use.getOneOfWalletsDetails();\n\n const { blockchains } = useMetaStore.use.meta();\n const connectedWallets = useWalletsStore.use.connectedWallets();\n\n const wallets = {\n blockchains: connectedWallets.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 notifier = (data: SwapProgressNotification) => {\n const lastStep = data.swap?.steps[data.swap.steps.length - 1];\n const outputAmount = data.step?.outputAmount || '';\n const step = data.step || lastStep;\n\n if (\n data.eventType === 'task_completed' ||\n (data.eventType === 'step_completed_with_output' &&\n lastStep?.id !== data.step?.id) ||\n !!outputAmount\n ) {\n const fromAccount = connectedWallets.find(\n (account) => account.chain === step?.fromBlockchain\n );\n const toAccount =\n step?.fromBlockchain !== step?.toBlockchain &&\n connectedWallets.find((wallet) => wallet.chain === step?.toBlockchain);\n\n fromAccount && getOneOfWalletsDetails(fromAccount);\n toAccount && getOneOfWalletsDetails(toAccount);\n }\n };\n\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,\n };\n\n return (\n <ManagerProvider\n queuesDefs={[swapQueueDef]}\n context={context}\n onPersistedDataLoaded={(manager) => {\n checkWaitingForNetworkChange(manager);\n }}\n isPaused={false}\n >\n {props.children}\n </ManagerProvider>\n );\n}\n\nexport default QueueManager;\n","import { SwapContainer } from '@rango-dev/ui';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { AppRouter } from './components/AppRouter';\nimport { useMetaStore } from './store/meta';\nimport { Events, Provider } from '@rango-dev/wallets-core';\nimport { allProviders } from '@rango-dev/provider-all';\nimport { EventHandler } from '@rango-dev/wallets-core/dist/wallet';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport {\n prepareAccountsForWalletStore,\n walletAndSupportedChainsNames,\n} from './utils/wallets';\nimport { useWalletsStore } from './store/wallets';\nimport { Layout } from './components/Layout';\nimport { globalFont } from './globalStyles';\nimport { useTheme } from './hooks/useTheme';\nimport { isEvmBlockchain } from 'rango-sdk';\nimport {\n WidgetTheme,\n WidgetConfig,\n WidgetColors,\n BlockchainAndTokenConfig,\n} from './types';\nimport useSelectLanguage from './hooks/useSelectLanguage';\nimport './i18n';\nimport QueueManager from './QueueManager';\nimport { useUiStore } from './store/ui';\nimport { navigationRoutes } from './constants/navigationRoutes';\nimport { initConfig } from './utils/configs';\n\nexport {\n WidgetConfig,\n WalletType,\n WidgetTheme,\n WidgetColors,\n BlockchainAndTokenConfig,\n};\n\nexport type WidgetProps = {\n config?: WidgetConfig;\n};\n\nexport const Widget: React.FC<WidgetProps> = ({ config }) => {\n globalFont(config?.theme?.fontFamily || 'Roboto');\n\n const { activeTheme } = useTheme({ ...config?.theme });\n const { blockchains } = useMetaStore.use.meta();\n const disconnectWallet = useWalletsStore.use.disconnectWallet();\n const connectWallet = useWalletsStore.use.connectWallet();\n const { changeLanguage } = useSelectLanguage();\n const clearConnectedWallet = useWalletsStore.use.clearConnectedWallet();\n const [lastConnectedWalletWithNetwork, setLastConnectedWalletWithNetwork] =\n useState<string>('');\n const [disconnectedWallet, setDisconnectedWallet] = useState<WalletType>();\n const currentPage = useUiStore.use.currentPage();\n\n const evmBasedChainNames = blockchains\n .filter(isEvmBlockchain)\n .map((chain) => chain.name);\n\n useMemo(() => {\n if (config?.apiKey) {\n initConfig({\n API_KEY: config?.apiKey,\n });\n }\n }, [config]);\n\n const onUpdateState: EventHandler = (\n type,\n event,\n value,\n state,\n supportedChains\n ) => {\n if (event === Events.ACCOUNTS) {\n if (value) {\n const supportedChainNames: Network[] | null =\n walletAndSupportedChainsNames(supportedChains);\n const data = prepareAccountsForWalletStore(\n type,\n value,\n evmBasedChainNames,\n supportedChainNames\n );\n connectWallet(data);\n } else {\n disconnectWallet(type);\n }\n }\n if (event === Events.ACCOUNTS && state.connected) {\n const key = `${type}-${state.network}-${value}`;\n\n if (state.connected) {\n setLastConnectedWalletWithNetwork(key);\n }\n }\n\n if (event === Events.NETWORK && state.network) {\n const key = `${type}-${state.network}`;\n setLastConnectedWalletWithNetwork(key);\n }\n };\n let providers = allProviders();\n\n useEffect(() => {\n const wallets = config?.wallets;\n clearConnectedWallet();\n providers = !wallets\n ? allProviders()\n : allProviders().filter((provider) => {\n const type = provider.config.type;\n return wallets.find((w) => w === type);\n });\n }, [config?.wallets]);\n\n useEffect(() => {\n changeLanguage(config?.language || 'en');\n }, [config?.language]);\n\n return (\n <Provider\n allBlockChains={blockchains}\n providers={providers}\n onUpdateState={onUpdateState}\n >\n <div id=\"swap-container\" className={activeTheme}>\n <QueueManager>\n <SwapContainer fixedHeight={currentPage !== navigationRoutes.home}>\n <AppRouter\n lastConnectedWallet={lastConnectedWalletWithNetwork}\n disconnectedWallet={disconnectedWallet}\n clearDisconnectedWallet={() => {\n setDisconnectedWallet(undefined);\n }}\n >\n <Layout config={config} />\n </AppRouter>\n </SwapContainer>\n </QueueManager>\n </div>\n </Provider>\n );\n};\n"],"names":["ZERO","BigNumber","removeDuplicateFrom","array","Array","from","Set","areEqual","array1","array2","length","every","v","i","debounce","fn","time","timeoutId","wrapper","args","_len","_key","arguments","clearTimeout","setTimeout","secondsToString","s","seconds","toString","padStart","minutes","parseInt","numberToString","number","minDecimals","maxDecimals","undefined","n","roundingMode","maxI","toFixed","eq","gte","toFormat","Math","min","max","pow","isEqualTo","totalArrivalTime","data","result","swaps","reduce","a","b","estimatedTimeInSeconds","isPositiveNumber","text","parseFloat","searchParamsToToken","tokens","searchParams","chain","find","token","symbolAndAddress","split","symbol","address","blockchain","name","getBestRouteToTokenUsdPrice","bestRoute","to","usdPrice","isNumberOfSwapsChanged","route1","route2","route1Swaps","route2Swaps","isRouteSwappersUpdated","route1Swappers","map","swap","swapperId","route2Swappers","isRouteInternalCoinsUpdated","route1InternalCoins","route2InternalCoins","isRouteChanged","getRequiredBalanceOfWallet","selectedWallet","fee","relatedFeeStatus","item","wallets","wallet","toLowerCase","requiredAssets","isRouteParametersChanged","params","store","prevState","currentState","fromToken","toToken","fromChain","toChain","inputAmount","slippage","customSlippage","disabledLiquiditySources","infiniteApprove","getFormatedBestRoute","formatedSwaps","fromAmount","toAmount","getFormatedPendingSwap","pendingSwap","formatedSteps","steps","step","feeInUsd","outputAmount","expectedOutputAmountHumanReadable","getBestRouteStatus","loading","error","createSelectors","_store","use","k","Object","keys","getState","RANGO_PUBLIC_API_KEY","configs","API_KEY","getConfig","initConfig","nextConfigs","clonedConfigs","structuredClone","JSON","parse","stringify","rango","httpService","RangoClient","SLIPPAGES","DEFAULT_SLIPPAGE","HIGH_SLIPPAGE","MAX_SLIPPAGE","MIN_SLIPPGAE","useMetaStore","create","set","meta","blockchains","popularTokens","swappers","loadingStatus","fetchMeta","response","getAllMetadata","chainThatHasTokenInMetaResponse","t","enabledChains","filter","enabled","includes","sort","useSettingsStore","persist","subscribeWithSelector","affiliateRef","theme","setSlippage","setCustomSlippage","setAffiliateRef","toggleAllLiquiditySources","state","swappersGroup","swapper","swapperGroup","toggleInfiniteApprove","toggleLiquiditySource","liquiditySource","concat","setTheme","getStateWallet","connected","WalletStatus","CONNECTED","connecting","CONNECTING","installed","NOT_INSTALLED","DISCONNECTED","excludedWallets","WalletType","UNKNOWN","LEAP","getlistWallet","getWalletInfo","list","type","img","image","installLink","showOnMobile","detectInstallLink","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","connectedWallets","selectedWallets","selectableWallets","connectedWallet","selected","getBalanceFromWallet","selectedChainWallets","balances","balance","amount","isAccountAndWalletMatched","makeBalanceFor","retrivedBalance","blockChain","explorerUrl","tokenBalance","asset","ticker","rawAmount","decimal","decimals","shiftedBy","logo","getUsdPrice","resetConnectedWalletState","calculateWalletUsdValue","uniqueAccountAddresses","uniqueBalane","acc","current","findIndex","modifiedWalletBlockchains","modifiedWalletBlockchain","has","add","accountAddress","total","flatMap","multipliedBy","plus","numberWithThousandSeperator","parts","replace","join","sortTokens","walletConnected","some","isSecondaryCoin","tokenA","tokenB","usdValue","allTokens","toUpperCase","isExperimentalChain","cosmosExperimentalChainInfo","getCosmosExperimentalChainInfo","entries","_ref","isCosmosBlockchain","getKeplrCompatibleConnectedWallets","connectedWalletTypes","KEPLR_COMPATIBLE_WALLETS","compatibleWallet","getTokensWithBalance","_ref2","otherProps","tokenAmount","tokenUsdValue","getSortedTokens","otherChainTokens","fromChainEqueulsToToChain","filteredTokens","tokensAreEqual","getDefaultToken","sortedTokens","otherToken","selectedToken","firstToken","secondToken","sortWalletsBasedOnState","Number","getOutputRatio","inputUsdValue","outputUsdValue","lte","div","minus","outputRatioHasWarning","outputRatio","hasLimitError","minimum","fromAmountMinValue","maximum","fromAmountMaxValue","isExclusive","fromAmountRestrictionType","gt","lt","LimitErrorMessage","fromAmountRangeError","recommendation","getSwapButtonState","loadingMetaStatus","highValueLoss","priceImpactCanNotBeComputed","needsToWarnEthOnPath","title","disabled","hasWarning","canComputePriceImpact","requiredWallets","getUsdFeeOfStep","totalFeeInUsd","expenseType","unitPrice","getTotalFeeInUsd","totalFee","hasHighFee","getMinRequiredSlippage","slippages","recommendedSlippage","hasProperSlippage","userSlippage","minRequiredSlippage","createBestRouteRequestBody","initialRoute","selectedWalletsMap","chainAndAccounts","addresses","checkPrerequisites","filteredBlockchains","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","calcOutputUsdValue","tokenPrice","isNetworkStatusInWarningState","pendingSwapStep","networkStatus","PendingSwapNetworkStatus","NetworkChanged","getSwapMessages","currentStep","textForRemove","message","extraMessage","detailedMessage","extraMessageDetail","networkStatusExtraMessageDetail","networkWarningState","networkStatusExtraMessage","WaitingForConnectingWallet","WaitingForQueue","WaitingForNetworkChange","isRpc","shortMessage","content","long","getLastConvertedTokenInFailedSwap","resultToken","status","lastSuccessStep","slice","reverse","toBlockchain","toSymbol","toSymbolAddress","shouldRetrySwap","finishTime","Date","getTime","useWalletsStore","get","connectWallet","getOneOfWalletsDetails","disconnectWallet","initSelectedWallets","requiredChains","useBestRouteStore","anyWalletSelected","firstWalletWithMatchedChain","setSelectedWallet","clearConnectedWallet","getWalletsDetails","Error","subscribe","setState","sourceTokens","destinationTokens","sourceTokensWithBalance","destinationTokensWithBalance","equalityFn","shallow","fetchingBalanceSelector","getUsdValue","setBestRoute","resetRoute","setFromChain","setDefaultToken","setFromToken","setToChain","setToToken","setInputAmount","retry","failedIndex","firstStep","lastStep","fromBlockchain","fromSymbol","fromSymbolAddress","sortedSourceTokens","sortedDestinationTokens","switchFromAndTo","bestRouteStore","settingsStore","abortController","fetchBestRoute","abort","AbortController","getBestRoute","signal","then","res","catch","code","debouncedFetchBestRoute","bestRouteParamsListener","SearchParams","navigationRoutes","home","settings","liquiditySources","confirmSwap","swapDetails","useUiStore","connectWalletsButtonDisabled","selectedSwapRequestId","currentPage","toggleConnectWalletsButton","setSelectedSwap","requestId","setCurrentPage","path","UpdateUrl","firstRender","useRef","setSearchParams","useSearchParams","location","useLocation","firstRenderSearchParams","search","searchParamsRef","useEffect","createSearchParams","value","key","pathname","fromChainString","fromTokenString","toChainString","toTokenString","FROM_CHAIN","FROM_TOKEN","TO_CHAIN","TO_TOKEN","FROM_AMOUNT","AppRouter","children","props","isRouterInContext","useInRouterContext","Router","Fragment","MemoryRouter","evmChains","isEvmBlockchain","useQueueManager","lastConnectedWallet","clearDisconnectedWallet","disconnectedWallet","notifier","React","useNavigateBack","navigate","useNavigate","navigateBackFrom","currentRoute","window","history","idx","Box","styled","display","flexDirection","width","overflow","Container","boxSizing","borderRadius","padding","variants","filled","backgroundColor","outlined","border","defaultVariants","justifyContent","alignItems","minHeight","paddingLeft","whiteSpace","textOverflow","ImagePlaceholder","height","OutputContainer","windth","position","paddingRight","TokenPreview","useTranslation","ItemSuffix","style","InfoCircleIcon","color","size","className","Typography","variant","label","Button","prefix","Image","src","suffix","align","displayName","Spacer","fontSize","RoutesOverview","routes","isLast","ChevronRightIcon","GasIcon","ConfirmSwapErrorTypes","ConfirmSwapWarningTypes","useConfirmSwap","proceedAnywayRef","confiremedRouteRef","abortControllerRef","setLoading","useState","errors","setErrors","warnings","setWarnings","swapSettings","disabledSwappersGroups","newSwap","calculatePendingSwap","confiremedRoute","requestAmount","NO_ROUTE","confirmSwapState","routeChanged","newRouteOutputUsdValue","ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS","ROUTE_AND_OUTPUT_AMOUNT_UPDATED","ROUTE_COINS_UPDATED","ROUTE_UPDATED","ROUTE_SWAPPERS_UPDATED","balanceWarnings","enoughBalance","INSUFFICIENT_BALANCE","messages","INSUFFICIENT_SLIPPAGE","noErrors","noWarnings","REQUEST_FAILED","ChangeSlippageButton","onClick","StyledMessage","MinRequiredSlippage","direction","List","margin","showListStyle","true","ListItem","listStyleType","listStylePosition","Message","BalanceErrors","warning","index","ConfirmSwapErrors","ConfirmSwapWarnings","HighSlippageWarning","selectedSlippage","Alert","footer","ConfirmSwapExtraMessages","highSlippage","PercentageChange","showPercentageChange","ConfirmSwapPage","fetchingBestRoute","fetchingBestRouteError","dbErrorMessage","setDbErrorMessage","bestRouteloadingStatus","manager","useManager","fetchingConfirmedRoute","showHighSlippageWarning","connect","useWallets","confirmDisabled","handleConnectChain","ConfirmSwap","onBack","bind","onConfirm","id","e","onChange","previewInputs","blockchainLogo","previewRoutes","extraMessages","LoadingFailedAlert","confirmButtonTitle","getPendingSwaps","getAll","q","storage","getStorage","creationTime","groupSwapsByDate","output","Map","now","dayjs","swapDate","isSame","values","HistoryPage","pendingSwaps","loadedFromPersistor","History","groupBy","onSwapClick","Options","TokenInfo","tokenBalanceReal","AngleDownIcon","TextField","autoFocus","placeholder","right","bottom","event","onAmountChange","target","paddingTop","Logo","fill","StyledAnchor","textDecoration","BottomLogo","href","xmlns","viewBox","d","SwithFromAndTo","count","Footer","errorMessages","genericServerError","ButtonsContainer","HeaderButtons","onClickRefresh","Tooltip","RetryIcon","HistoryIcon","SettingsIcon","FromContainer","paddingBottom","SwitchButtonContainer","left","transform","BestRouteContainer","Alerts","Home","setCount","bestRouteError","errorMessage","showBestRoute","outToInRatio","swapButtonState","highFee","Header","prev","VerticalSwapIcon","BestRoute","feeWarning","totalTime","LiquiditySourcePage","supportedSwappers","uniqueSwappersGroups","types","LiquiditySourcesSelector","toggleAll","SelectChainPage","BlockchainSelector","SelectTokenPage","supportedTokens","supportedSourceTokens","supportedToken","supportedDestinationTokens","TokenSelector","SettingsPage","singleTheme","supportedUniqueSwappersGroups","Settings","onSlippageChange","onLiquiditySourcesClick","selectedLiquiditySources","onCustomSlippageChange","minSlippage","maxSlippage","selectedTheme","onThemeChange","ListContainer","gap","gridTemplateColumns","alignContent","overflowY","LoaderContainer","top","AlertContainer","WalletsPage","supportedWallets","multiWallets","disconnect","walletsRef","sortedWallets","detectMobileScreens","walletErrorMessage","setWalletErrorMessage","onSelectWallet","w","WalletState","disconnectConnectingWallets","connectingWallets","SecondaryPage","textField","Spinner","Wallet","timeSince","timeMillis","floor","intervalType","interval","getSwapDate","PlaceholderContainer","flex","SwapDetailsPlaceholder","SwapDetailsPage","canSwitchNetworkTo","isCopied","handleCopy","useCopyToClipboard","selectedSwap","onCancel","cancelSwap","getCurrentStep","currentStepBlockchain","getCurrentBlockchainOfOrNull","currentStepWallet","getRelatedWalletOrNull","currentStepNetworkStatus","swapMessages","shouldRetry","switchNetwork","lastConvertedTokenInFailedSwap","SwapHistory","onCopy","extraMessageSeverity","date","onRetry","getAbsolutePath","AppRoutes","config","useRoutes","element","WalletImageContainer","marginLeft","marginRight","Layout","connectedWalletsImages","totalBalance","fetchingBalance","AddWalletIcon","flexContent","walletImage","globalFont","fontFamily","globalCss","body","usePrevious","ref","useTheme","colors","themeColors","mode","light","dark","neutral","background","foreground","darkColors","generateRangeColors","primary","success","surface","lightColors","customLightTheme","createTheme","radii","shadows","customDarkTheme","OSTheme","setOSTheme","switchTheme","matches","matchMedia","addEventListener","removeEventListener","prevFont","useLayoutEffect","classList","document","remove","getActiveTheme","activeTheme","useSelectLanguage","i18n","currentLanguage","language","changeLanguage","languages","Backend","LanguageDetector","initReactI18next","init","resources","en","translation","tr","fallbackLng","debug","whitelist","QueueManager","providers","getSigners","swapQueueDef","useMemo","makeQueueDefinition","allBlockchains","blockchainsObj","getSupportedChainNames","allProviders","eventType","fromAccount","toAccount","context","evmNetworkChainInfo","convertEvmBlockchainMetaToEvmChainInfo","ManagerProvider","queuesDefs","onPersistedDataLoaded","checkWaitingForNetworkChange","isPaused","Widget","lastConnectedWalletWithNetwork","setLastConnectedWalletWithNetwork","setDisconnectedWallet","evmBasedChainNames","apiKey","onUpdateState","Events","ACCOUNTS","NETWORK","provider","Provider","allBlockChains","SwapContainer","fixedHeight"],"mappings":"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"}
1
+ {"version":3,"file":"widget-embedded.cjs.production.min.js","sources":["../src/constants/numbers.ts","../src/utils/common.ts","../src/utils/numbers.ts","../src/utils/routing.ts","../src/store/selectors.ts","../src/utils/configs.ts","../src/services/httpService.ts","../src/constants/swapSettings.ts","../src/store/meta.ts","../src/store/settings.ts","../src/utils/wallets.ts","../src/utils/swap.ts","../src/store/wallets.ts","../src/store/bestRoute.ts","../src/constants/searchParams.ts","../src/constants/navigationRoutes.ts","../src/store/ui.ts","../src/components/UpdateUrl.tsx","../src/components/AppRouter.tsx","../src/hooks/useNavigateBack.ts","../src/components/TokenPreview.tsx","../src/components/RoutesOverview.tsx","../src/types/routing.ts","../src/hooks/useConfirmSwap.ts","../src/components/ChangeSlippageButton.tsx","../src/components/warnings/MinRequiredSlippage.tsx","../src/components/warnings/BalanceErrors.tsx","../src/components/ConfirmSwapErrors.tsx","../src/components/ConfirmSwapWarnings.tsx","../src/components/warnings/HighSlippageWarning.tsx","../src/components/warnings/ConfirmSwapExtraMessages.tsx","../src/components/PercentageChange.tsx","../src/pages/ConfirmSwapPage.tsx","../src/utils/queue.ts","../src/utils/date.ts","../src/pages/HistoryPage.tsx","../src/components/TokenInfo.tsx","../src/components/BottomLogo.tsx","../src/components/SwitchFromAndTo.tsx","../src/components/Footer.tsx","../src/constants/errors.ts","../src/components/HeaderButtons.tsx","../src/pages/Home.tsx","../src/pages/LiquiditySourcesPage.tsx","../src/pages/SelectChainPage.tsx","../src/pages/SelectTokenPage.tsx","../src/pages/SettingsPage.tsx","../src/pages/WalletsPage.tsx","../src/utils/time.ts","../src/components/SwapDetailsPlaceholder.tsx","../src/pages/SwapDetailsPage.tsx","../src/components/AppRoutes.tsx","../src/components/Layout.tsx","../src/globalStyles.ts","../src/hooks/usePrevious.ts","../src/hooks/useTheme.ts","../src/hooks/useSelectLanguage.ts","../src/i18n.js","../src/QueueManager.tsx","../src/index.tsx"],"sourcesContent":["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}\n\n\n\nexport function debounce(fn: Function, time: number) {\n let timeoutId: ReturnType<typeof setTimeout> | null;\n return wrapper;\n function wrapper(...args: any) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = null;\n fn(...args);\n }, time);\n }\n}\n","import { BigNumber } from 'bignumber.js';\nimport { BestRouteResponse } from 'rango-sdk';\n\nexport const percentToString = (p: number, fractions = 0): string =>\n (p * 100).toFixed(fractions);\nexport const secondsToString = (s: number): string => {\n const seconds = (s % 60).toString().padStart(2, '0');\n const minutes = parseInt((s / 60).toString())\n .toString()\n .padStart(2, '0');\n return `${minutes}:${seconds}`;\n};\n\nexport const numberToString = (\n number: BigNumber | string | null | undefined,\n minDecimals: number | null = null,\n maxDecimals: number | null = null\n): string => {\n if (number === null || number === undefined) return '';\n if (number === '') return '';\n const n = new BigNumber(number);\n const roundingMode = 1;\n let maxI = 1000;\n for (let i = 0; i < 60; i++) {\n if (new BigNumber(n.toFixed(i, roundingMode)).eq(n)) {\n maxI = i;\n break;\n }\n }\n\n if (n.gte(10000)) return n.toFormat(0, roundingMode);\n if (n.gte(1000))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))\n ),\n roundingMode\n );\n if (n.gte(100))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))\n ),\n roundingMode\n );\n if (n.gte(1))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 2))\n ),\n roundingMode\n );\n if (n.gte(0.01))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 4))\n ),\n roundingMode\n );\n for (let i = minDecimals || 4; i < 17; i++)\n if (n.gte(Math.pow(10, -i)))\n return n.toFormat(\n Math.min(\n maxI,\n Math.min(maxDecimals || 100, Math.max(minDecimals || 0, i))\n ),\n roundingMode\n );\n if (n.isEqualTo(0)) return '0';\n\n return n.toFormat(\n Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 8))),\n roundingMode\n );\n};\n\nexport const convertBigNumberToHex = (\n value: BigNumber,\n decimals: number\n): string => {\n return '0x' + value.shiftedBy(decimals).toString(16);\n};\n\nexport const uint8ArrayToHex = (buffer: Uint8Array): string => {\n // buffer is an ArrayBuffer\n // @ts-ignore\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n};\n\nexport function dollarToConciseString(num: number | undefined): string {\n if (!num) return '-';\n if (num < 1) return ' < 1$';\n if (num < 1000) return numberToString(new BigNumber(num)) + '$';\n if (num < 10_000) return parseInt((num / 100).toString()) / 10 + 'K';\n if (num < 1_000_000) return parseInt((num / 1000).toString()) + 'K';\n if (num < 100_000_000) return parseInt((num / 100000).toString()) / 10 + 'M';\n return parseInt((num / 1000000).toString()) + 'M';\n}\n\nexport function removeExtraDecimals(num: string, maxDecimals: number): string {\n try {\n if (!num.includes('.')) return num;\n const [b, f] = num.split('.');\n if (f && f.length > maxDecimals) {\n return `${b}.${f.substring(0, maxDecimals)}`;\n }\n return num;\n } catch (e) {\n return num;\n }\n}\n\nexport const totalArrivalTime = (data: BestRouteResponse | null) =>\n data?.result?.swaps?.reduce((a, b) => a + b.estimatedTimeInSeconds, 0) || 0;\n\nexport const rawFees = (data: BestRouteResponse): string =>\n (\n data?.result?.swaps?.flatMap((s) =>\n s.fee.map((f) => ({ swapperId: s.swapperId, fee: f }))\n ) || []\n )\n .reduce((partialSum, a) => partialSum + parseFloat(a.fee.amount), 0)\n .toFixed(3);\n\nexport const containsText = (text: string, searchText: string) =>\n text.toLowerCase().indexOf(searchText.toLowerCase()) > -1;\n\nexport const isPositiveNumber = (text?: string) =>\n !!text && parseFloat(text) > 0;\n10;\n","import {\n SimulationAssetAndAmount,\n SimulationValidationStatus,\n} from '@rango-dev/ui/dist/types/swaps';\nimport BigNumber from 'bignumber.js';\nimport { BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';\nimport { areEqual } from './common';\nimport { BestRouteEqualityParams, Wallet } from '../types';\nimport { numberToString } from './numbers';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\n\nexport function searchParamsToToken(\n tokens: Token[],\n searchParams: string | null,\n chain: BlockchainMeta | null\n): Token | null {\n if (!chain) return null;\n return (\n tokens.find((token) => {\n const symbolAndAddress = searchParams?.split('--');\n if (symbolAndAddress?.length === 1)\n return (\n token.symbol === symbolAndAddress[0] &&\n token.address === null &&\n token.blockchain === chain.name\n );\n return (\n token.symbol === symbolAndAddress?.[0] &&\n token.address === symbolAndAddress?.[1] &&\n token.blockchain === chain.name\n );\n }) || null\n );\n}\n\nexport function getBestRouteToTokenUsdPrice(\n bestRoute: BestRouteResponse | null\n): number | null | undefined {\n return bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1].to\n .usdPrice;\n}\n\nexport function isNumberOfSwapsChanged(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1Swaps = route1.result?.swaps || [];\n const route2Swaps = route2.result?.swaps || [];\n return route1Swaps.length !== route2Swaps.length;\n}\n\nexport function isRouteSwappersUpdated(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1Swappers =\n route1.result?.swaps.map((swap) => swap.swapperId) || [];\n const route2Swappers =\n route2.result?.swaps.map((swap) => swap.swapperId) || [];\n return !areEqual(route1Swappers, route2Swappers);\n}\n\nexport function isRouteInternalCoinsUpdated(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n) {\n const route1InternalCoins =\n route1.result?.swaps.map((swap) => swap.to.symbol) || [];\n const route2InternalCoins =\n route2.result?.swaps.map((swap) => swap.to.symbol) || [];\n return !areEqual(route1InternalCoins, route2InternalCoins);\n}\n\nexport function isRouteChanged(\n route1: BestRouteResponse,\n route2: BestRouteResponse\n): boolean {\n return (\n isNumberOfSwapsChanged(route1, route2) ||\n isRouteSwappersUpdated(route1, route2) ||\n isRouteInternalCoinsUpdated(route1, route2)\n );\n}\n\nexport function outToRatioHasWarning(\n fromUsdValue: BigNumber | null,\n outToInRatio: BigNumber | 0\n) {\n return (\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -10 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(200)))) ||\n (parseInt(outToInRatio?.toFixed(2) || '0') <= -5 &&\n (fromUsdValue === null || fromUsdValue.gte(new BigNumber(1000))))\n );\n}\n\nexport function getRequiredBalanceOfWallet(\n selectedWallet: Wallet,\n fee: SimulationValidationStatus[] | null\n): SimulationAssetAndAmount[] | null {\n if (fee === null) return null;\n const relatedFeeStatus = fee\n ?.find((item) => item.blockchain === selectedWallet.chain)\n ?.wallets.find(\n (wallet) =>\n wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase()\n );\n if (!relatedFeeStatus) return null;\n return relatedFeeStatus.requiredAssets;\n}\n\nexport function isRouteParametersChanged(params: BestRouteEqualityParams) {\n if (params.store === 'bestRoute') {\n const { prevState, currentState } = params;\n return (\n !!currentState.fromToken &&\n !!currentState.toToken &&\n (prevState.fromChain?.name !== currentState.fromChain?.name ||\n prevState.toChain?.name !== currentState.toChain?.name ||\n prevState.fromToken?.symbol !== currentState.fromToken?.symbol ||\n prevState.toToken?.symbol !== currentState.toToken?.symbol ||\n prevState.fromToken?.blockchain !== prevState.fromToken?.blockchain ||\n prevState.toToken?.blockchain !== currentState.toToken?.blockchain ||\n prevState.fromToken?.address !== currentState.fromToken?.address ||\n prevState.toToken?.address !== currentState.toToken?.address ||\n prevState.inputAmount !== currentState.inputAmount)\n );\n } else if (params.store === 'settings') {\n const { prevState, currentState } = params;\n return (\n prevState.slippage !== currentState.slippage ||\n prevState.customSlippage !== currentState.customSlippage ||\n prevState.disabledLiquiditySources?.length !==\n currentState.disabledLiquiditySources?.length ||\n prevState.infiniteApprove ||\n currentState.infiniteApprove\n );\n }\n return false;\n}\n\nexport function getFormatedBestRoute(\n bestRoute: BestRouteResponse | null\n): BestRouteResponse | null {\n if (!bestRoute) return null;\n\n const formatedSwaps = (bestRoute.result?.swaps || []).map((swap) => ({\n ...swap,\n fromAmount: numberToString(swap.fromAmount, 6, 6),\n toAmount: numberToString(swap.toAmount, 6, 6),\n }));\n\n return {\n ...bestRoute,\n ...(bestRoute.result && {\n result: { ...bestRoute.result, swaps: formatedSwaps },\n }),\n };\n}\n\nexport function getFormatedPendingSwap(pendingSwap: PendingSwap): PendingSwap {\n const formatedSteps = pendingSwap.steps.map((step) => ({\n ...step,\n feeInUsd: numberToString(step.feeInUsd, 4, 4),\n outputAmount: numberToString(step.outputAmount, 6, 6),\n expectedOutputAmountHumanReadable: numberToString(\n step.expectedOutputAmountHumanReadable,\n 6,\n 6\n ),\n }));\n\n return {\n ...pendingSwap,\n inputAmount: numberToString(pendingSwap.inputAmount, 6, 6),\n steps: formatedSteps,\n };\n}\n\n//todo: refactor bestRoute store and add loadingStatus\nexport const getBestRouteStatus = (loading: boolean, error: boolean) => {\n if (loading) return 'loading';\n if (error) return 'failed';\n else return 'success';\n};\n","import { StoreApi, UseBoundStore } from 'zustand';\n\ntype State = object;\n\ntype WithSelectors<S> = S extends { getState: () => infer T }\n ? S & { use: { [K in keyof T]: () => T[K] } }\n : never;\n\nconst createSelectors = <S extends UseBoundStore<StoreApi<State>>>(_store: S) => {\n let store = _store as WithSelectors<typeof _store>;\n store.use = {};\n for (let k of Object.keys(store.getState())) {\n (store.use as any)[k] = () => store((s) => s[k as keyof typeof s]);\n }\n\n return store;\n};\n\nexport default createSelectors;\n","export interface Configs {\n API_KEY: string;\n}\n\nconst RANGO_PUBLIC_API_KEY = 'c6381a79-2817-4602-83bf-6a641a409e32';\n\nlet configs: Configs = {\n API_KEY: RANGO_PUBLIC_API_KEY,\n};\n\nexport function getConfig(name: keyof Configs) {\n return configs[name];\n}\n\nexport function setConfig(name: keyof Configs, value: any) {\n configs[name] = value;\n\n return value;\n}\n\nexport function initConfig(nextConfigs: Configs) {\n let clonedConfigs;\n if (typeof structuredClone === 'function') {\n clonedConfigs = structuredClone(nextConfigs);\n } else {\n clonedConfigs = JSON.parse(JSON.stringify(nextConfigs));\n }\n configs = clonedConfigs;\n return configs;\n}\n","import { RangoClient } from 'rango-sdk';\nimport { getConfig } from '../utils/configs';\n\n// this API key is limited and\n// it is only for test purpose\nexport const RANGO_PUBLIC_API_KEY = 'c6381a79-2817-4602-83bf-6a641a409e32';\n\nlet rango: RangoClient | undefined = undefined;\n\nexport const httpService = () => {\n if (rango) return rango;\n rango = new RangoClient(getConfig('API_KEY'));\n return rango;\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) =>\n chain.enabled &&\n chainThatHasTokenInMetaResponse.includes(chain.name)\n );\n response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);\n set({ meta: response, loadingStatus: 'success' });\n } catch (error) {\n set({ loadingStatus: 'failed' });\n }\n },\n }))\n);\n","import { create } from 'zustand';\nimport { persist, subscribeWithSelector } from 'zustand/middleware';\nimport { DEFAULT_SLIPPAGE } from '../constants/swapSettings';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\n\ntype Theme = 'auto' | 'dark' | 'light';\n\nexport interface SettingsState {\n slippage: number;\n customSlippage: number | null;\n infiniteApprove: boolean;\n disabledLiquiditySources: string[];\n theme: Theme;\n affiliateRef: string | null;\n setSlippage: (slippage: number) => void;\n setCustomSlippage: (customSlippage: number | null) => void;\n toggleInfiniteApprove: () => void;\n toggleLiquiditySource: (name: string) => void;\n setTheme: (theme: Theme) => void;\n toggleAllLiquiditySources: () => void;\n setAffiliateRef: (affiliateRef: string | null) => void;\n}\n\nexport const useSettingsStore = createSelectors(\n create<SettingsState>()(\n persist(\n subscribeWithSelector((set) => ({\n slippage: DEFAULT_SLIPPAGE,\n customSlippage: null,\n infiniteApprove: false,\n affiliateRef: null,\n disabledLiquiditySources: [],\n theme: 'auto',\n setSlippage: (slippage) =>\n set(() => ({\n slippage: slippage,\n })),\n setCustomSlippage: (customSlippage) =>\n set(() => ({\n customSlippage: customSlippage,\n })),\n setAffiliateRef: (affiliateRef) =>\n set(() => ({\n affiliateRef,\n })),\n toggleAllLiquiditySources: () =>\n set((state) => {\n const { swappers } = useMetaStore.getState().meta;\n const swappersGroup = removeDuplicateFrom(\n swappers.map((swapper) => swapper.swapperGroup)\n );\n\n if (swappersGroup.length === state.disabledLiquiditySources.length)\n return { disabledLiquiditySources: [] };\n else {\n return {\n disabledLiquiditySources: swappersGroup,\n };\n }\n }),\n toggleInfiniteApprove: () =>\n set((state) => ({\n infiniteApprove: !state.infiniteApprove,\n })),\n toggleLiquiditySource: (name) =>\n set((state) => {\n if (state.disabledLiquiditySources.includes(name))\n return {\n disabledLiquiditySources: state.disabledLiquiditySources.filter(\n (liquiditySource) => liquiditySource != name\n ),\n };\n else\n return {\n disabledLiquiditySources:\n state.disabledLiquiditySources.concat(name),\n };\n }),\n setTheme: (theme) =>\n set(() => ({\n theme,\n })),\n })),\n {\n name: 'user-settings',\n }\n )\n )\n);\n","import {\n getCosmosExperimentalChainInfo,\n isEvmAddress,\n KEPLR_COMPATIBLE_WALLETS,\n Network,\n WalletState,\n WalletType,\n detectInstallLink,\n WalletInfo,\n WalletTypes,\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 { ConnectedWallet, TokenBalance } from '../store/wallets';\nimport { numberToString } from './numbers';\nimport BigNumber from 'bignumber.js';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { ZERO } from '../constants/numbers';\nimport { Wallet } from '../types';\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 = [WalletTypes.LEAP];\n\nexport function getlistWallet(\n getState: (type: WalletType) => WalletState,\n getWalletInfo: (type: WalletType) => WalletInfo,\n list: WalletType[]\n): ModalWalletInfo[] {\n return list\n .filter((wallet) => !excludedWallets.includes(wallet as WalletTypes))\n .map((type) => {\n const {\n name,\n img: image,\n installLink,\n showOnMobile,\n } = getWalletInfo(type);\n const state = getStateWallet(getState(type));\n return {\n name,\n image,\n installLink: detectInstallLink(installLink),\n state,\n type,\n showOnMobile: typeof showOnMobile === 'undefined' ? false : true,\n };\n });\n}\n\nexport function walletAndSupportedChainsNames(\n supportedChains: BlockchainMeta[]\n): Network[] | null {\n if (!supportedChains) return null;\n let walletAndSupportedChainsNames: Network[] = [];\n walletAndSupportedChainsNames = supportedChains.map(\n (blockchainMeta) => blockchainMeta.name as Network\n );\n\n return walletAndSupportedChainsNames;\n}\n\nexport function prepareAccountsForWalletStore(\n wallet: WalletType,\n accounts: string[],\n evmBasedChains: string[],\n supportedChainNames: Network[] | null\n): Wallet[] {\n const result: Wallet[] = [];\n\n function addAccount(network: Network, address: string) {\n const newAccount: Wallet = {\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\ntype Blockchain = { name: string; accounts: ConnectedWallet[] };\n\nexport function getSelectableWallets(\n connectedWallets: ConnectedWallet[],\n selectedWallets: Wallet[],\n getWalletInfo: (type: WalletType) => WalletInfo\n): SelectableWallet[] {\n const selectableWallets: SelectableWallet[] = connectedWallets.map(\n (connectedWallet) => ({\n address: connectedWallet.address,\n walletType: connectedWallet.walletType,\n chain: connectedWallet.chain,\n image: getWalletInfo(connectedWallet.walletType).img,\n name: getWalletInfo(connectedWallet.walletType).name,\n selected: !!selectedWallets.find(\n (selectedWallet) =>\n selectedWallet.chain === connectedWallet.chain &&\n selectedWallet.walletType === connectedWallet.walletType\n ),\n })\n );\n\n return selectableWallets;\n}\n\nexport function getBalanceFromWallet(\n connectedWallets: ConnectedWallet[],\n chain: string,\n symbol: string,\n address: string | null\n): TokenBalance | null {\n if (connectedWallets.length === 0) return null;\n\n const selectedChainWallets = connectedWallets.filter(\n (wallet) => wallet.chain === chain\n );\n if (selectedChainWallets.length === 0) return null;\n\n return (\n selectedChainWallets\n .map(\n (wallet) =>\n wallet.balances?.find(\n (balance) =>\n (address !== null && balance.address === address) ||\n (address === null &&\n balance.address === address &&\n balance.symbol === symbol)\n ) || null\n )\n .filter((balance) => balance !== null)\n .sort(\n (a, b) => parseFloat(b?.amount || '0') - parseFloat(a?.amount || '1')\n )\n .find(() => true) || null\n );\n}\n\nexport function isAccountAndWalletMatched(\n account: Wallet,\n connectedWallet: ConnectedWallet\n) {\n return (\n account.address === connectedWallet.address &&\n account.chain === connectedWallet.chain\n );\n}\n\nexport function makeBalanceFor(\n wallet: Wallet,\n retrivedBalance: WalletDetail,\n tokens: Token[]\n): ConnectedWallet {\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: wallet.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 resetConnectedWalletState(\n connectedWallet: ConnectedWallet\n): ConnectedWallet {\n return { ...connectedWallet, loading: false, error: true };\n}\n\nexport const calculateWalletUsdValue = (connectedWallet: ConnectedWallet[]) => {\n const uniqueAccountAddresses = new Set<string | null>();\n const uniqueBalane: ConnectedWallet[] = connectedWallet?.reduce(\n (acc: ConnectedWallet[], current: ConnectedWallet) => {\n return acc.findIndex(\n (i) => i.address === current.address && i.chain === current.chain\n ) === -1\n ? [...acc, current]\n : acc;\n },\n []\n );\n\n const modifiedWalletBlockchains = uniqueBalane?.map((chain) => {\n const modifiedWalletBlockchain: Blockchain = {\n name: chain.chain,\n accounts: [],\n };\n if (!uniqueAccountAddresses.has(chain.address)) {\n uniqueAccountAddresses.add(chain.address);\n }\n uniqueAccountAddresses.forEach((accountAddress) => {\n if (chain.address === accountAddress)\n modifiedWalletBlockchain.accounts.push(chain);\n });\n return modifiedWalletBlockchain;\n });\n const total = numberToString(\n modifiedWalletBlockchains\n ?.flatMap((b) => b.accounts)\n ?.flatMap((a) => a?.balances)\n ?.map((b) =>\n new BigNumber(b?.amount || ZERO).multipliedBy(b?.usdPrice || 0)\n )\n ?.reduce((a, b) => a.plus(b), ZERO) || ZERO\n ).toString();\n\n return numberWithThousandSeperator(total);\n};\n\nfunction numberWithThousandSeperator(number: string | number): string {\n var parts = number.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n}\n\nexport const sortTokens = (tokens: TokenWithBalance[]): TokenWithBalance[] => {\n let walletConnected = !!tokens.some((token) => token.balance);\n if (!walletConnected) {\n return tokens\n .filter((token) => !token.address)\n .concat(\n tokens.filter((token) => token.address && !token.isSecondaryCoin),\n tokens.filter((token) => token.isSecondaryCoin)\n );\n }\n\n return tokens\n .filter((token) => !!token.balance)\n .sort(\n (tokenA, tokenB) =>\n parseFloat(tokenB.balance?.usdValue || '0') -\n parseFloat(tokenA.balance?.usdValue || '0')\n )\n .concat(\n tokens.filter((token) => !token.balance && !token.isSecondaryCoin),\n tokens.filter((token) => !token.balance && token.isSecondaryCoin)\n );\n};\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\nexport const isExperimentalChain = (\n blockchains: BlockchainMeta[],\n wallet: string\n): boolean => {\n const cosmosExperimentalChainInfo = getCosmosExperimentalChainInfo(\n Object.entries(blockchains)\n .map(([, blockchainMeta]) => blockchainMeta)\n .filter(isCosmosBlockchain)\n );\n return cosmosExperimentalChainInfo && !!cosmosExperimentalChainInfo[wallet];\n};\n\nexport const getKeplrCompatibleConnectedWallets = (\n selectableWallets: SelectableWallet[]\n): WalletType[] => {\n const connectedWalletTypes = new Set(\n selectableWallets.map((wallet) => {\n return wallet.walletType;\n })\n );\n\n return KEPLR_COMPATIBLE_WALLETS.filter((compatibleWallet) =>\n connectedWalletTypes.has(compatibleWallet)\n );\n};\n\nexport function getTokensWithBalance(\n tokens: TokenWithBalance[],\n connectedWallets: ConnectedWallet[]\n): TokenWithBalance[] {\n return tokens.map(({ balance, ...otherProps }) => {\n const tokenAmount = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n connectedWallets,\n otherProps.blockchain,\n otherProps.symbol,\n otherProps.address\n )?.amount || ZERO\n )\n );\n\n let tokenUsdValue = '';\n if (otherProps.usdPrice)\n tokenUsdValue = numberToString(\n new BigNumber(\n getBalanceFromWallet(\n connectedWallets,\n otherProps.blockchain,\n otherProps.symbol,\n otherProps.address\n )?.amount || ZERO\n ).multipliedBy(otherProps.usdPrice)\n );\n\n return {\n ...otherProps,\n ...(tokenAmount !== '0' && {\n balance: { amount: tokenAmount, usdValue: tokenUsdValue },\n }),\n };\n });\n}\n\nexport function getSortedTokens(\n chain: BlockchainMeta | null,\n tokens: Token[],\n connectedWallets: ConnectedWallet[],\n otherChainTokens: TokenWithBalance[]\n): TokenWithBalance[] {\n const fromChainEqueulsToToChain = chain?.name === otherChainTokens[0]?.name;\n if (fromChainEqueulsToToChain) return otherChainTokens;\n const filteredTokens = tokens.filter(\n (token) => token.blockchain === chain?.name\n );\n return sortTokens(getTokensWithBalance(filteredTokens, connectedWallets));\n}\n\nexport function tokensAreEqual(\n tokenA: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null,\n tokenB: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null\n) {\n return (\n tokenA?.blockchain === tokenB?.blockchain &&\n tokenA?.symbol === tokenB?.symbol &&\n tokenA?.address === tokenB?.address\n );\n}\n\nexport function getDefaultToken(\n sortedTokens: TokenWithBalance[],\n otherToken: TokenWithBalance | null\n): TokenWithBalance {\n let selectedToken: TokenWithBalance;\n const firstToken = sortedTokens[0];\n const secondToken = sortedTokens[1];\n if (sortedTokens.length === 1) selectedToken = firstToken;\n else if (tokensAreEqual(firstToken, otherToken)) selectedToken = secondToken;\n else selectedToken = firstToken;\n return selectedToken;\n}\n\nexport function sortWalletsBasedOnState(\n wallets: ModalWalletInfo[]\n): ModalWalletInfo[] {\n return wallets.sort(\n (a, b) =>\n Number(b.state === WalletStatus.CONNECTED) -\n Number(a.state === WalletStatus.CONNECTED) ||\n Number(\n b.state === WalletStatus.DISCONNECTED ||\n b.state === WalletStatus.CONNECTING\n ) -\n Number(\n a.state === WalletStatus.DISCONNECTED ||\n a.state === WalletStatus.CONNECTING\n )\n );\n}\n","import BigNumber from 'bignumber.js';\nimport {\n BestRouteRequest,\n BestRouteResponse,\n RecommendedSlippage,\n SwapResult,\n Token,\n} from 'rango-sdk';\nimport { ConnectedWallet } 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 } from './wallets';\nimport { LoadingStatus } from '../store/meta';\nimport { ConvertedToken, SwapButtonState, Wallet } from '../types';\nimport {\n PendingSwapNetworkStatus,\n PendingSwapStep,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\nimport { removeDuplicateFrom } from './common';\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 connectedWallets: ConnectedWallet[],\n loading: boolean,\n bestRoute: BestRouteResponse | null,\n hasLimitError: boolean,\n highValueLoss: boolean,\n priceImpactCanNotBeComputed: boolean,\n needsToWarnEthOnPath: boolean,\n inputAmount: string\n): SwapButtonState {\n if (loadingMetaStatus !== 'success')\n return { title: 'Connect Wallet', disabled: true };\n if (connectedWallets.length == 0)\n return { title: 'Connect Wallet', disabled: false };\n if (loading) return { title: 'Finding Best Route...', disabled: true };\n else if (!inputAmount || inputAmount === '0')\n return { title: 'Enter an amount', disabled: true };\n else if (!bestRoute || !bestRoute.result)\n return { title: 'Swap', disabled: true };\n else if (hasLimitError) return { title: 'Limit Error', disabled: true };\n else if (highValueLoss)\n return { title: 'Price impact is too high!', disabled: true };\n else if (priceImpactCanNotBeComputed)\n return {\n title: 'USD price is unknown, price impact might be high!',\n disabled: false,\n hasWarning: true,\n };\n else if (needsToWarnEthOnPath)\n return {\n title: 'The route goes through Ethereum. Continue?',\n disabled: false,\n hasWarning: true,\n };\n else return { title: 'Swap', disabled: false };\n}\n\nexport function canComputePriceImpact(\n bestRoute: BestRouteResponse | null,\n inputAmount: string,\n inputUsdValue: BigNumber,\n outputUsdValue: BigNumber\n) {\n return !(\n (inputUsdValue.lte(ZERO) || outputUsdValue.lte(ZERO)) &&\n !!bestRoute?.result &&\n !!inputAmount &&\n inputAmount !== '0' &&\n parseFloat(inputAmount || '0') !== 0 &&\n !!bestRoute.result\n );\n}\n\nexport function requiredWallets(route: BestRouteResponse | null) {\n const wallets: string[] = [];\n\n route?.result?.swaps.forEach((swap) => {\n const currentStepFromBlockchain = swap.from.blockchain;\n const currentStepToBlockchain = swap.to.blockchain;\n let lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepFromBlockchain != lastAddedWallet)\n wallets.push(currentStepFromBlockchain);\n lastAddedWallet = wallets[wallets.length - 1];\n if (currentStepToBlockchain != lastAddedWallet)\n wallets.push(currentStepToBlockchain);\n });\n return wallets;\n}\n\nexport const getUsdPrice = (\n blockchain: string,\n symbol: string,\n address: string | null,\n allTokens: Token[]\n): number | null => {\n const token = allTokens?.find(\n (t) =>\n t.blockchain === blockchain &&\n t.symbol?.toUpperCase() === symbol?.toUpperCase() &&\n t.address === address\n );\n return token?.usdPrice || null;\n};\n\nexport function getUsdFeeOfStep(\n step: SwapResult,\n allTokens: Token[]\n): BigNumber {\n let totalFeeInUsd = ZERO;\n for (let i = 0; i < step.fee.length; i++) {\n const fee = step.fee[i];\n if (fee.expenseType === 'DECREASE_FROM_OUTPUT') continue;\n\n const unitPrice = getUsdPrice(\n fee.asset.blockchain,\n fee.asset.symbol,\n fee.asset.address,\n allTokens\n );\n totalFeeInUsd = totalFeeInUsd.plus(\n new BigNumber(fee.amount).multipliedBy(unitPrice || 0)\n );\n }\n\n return totalFeeInUsd;\n}\n\nexport function getTotalFeeInUsd(\n bestRoute: BestRouteResponse | null,\n allTokens: Token[]\n): BigNumber | null {\n return (\n bestRoute?.result?.swaps.reduce(\n (totalFee: BigNumber, step) =>\n totalFee.plus(getUsdFeeOfStep(step, allTokens)),\n ZERO\n ) || null\n );\n}\n\nexport function hasHighFee(totalFeeInUsd: BigNumber | null) {\n if (!totalFeeInUsd) return false;\n return !totalFeeInUsd.lt(new BigNumber(30));\n}\n\nexport function hasSlippageError(\n slippages: (RecommendedSlippage | null)[] | undefined\n) {\n return (slippages?.filter((s) => !!s?.error)?.length || 0) > 0;\n}\n\nexport function getMinRequiredSlippage(\n route: BestRouteResponse\n): string | null {\n const slippages = route.result?.swaps.map(\n (slippage) => slippage.recommendedSlippage\n );\n return (\n slippages\n ?.map((s) => s?.slippage || '0')\n ?.filter((s) => parseFloat(s) > 0)\n ?.sort((a, b) => parseFloat(b) - parseFloat(a))\n ?.find(() => true) || null\n );\n}\n\nexport function hasProperSlippage(\n userSlippage: string,\n minRequiredSlippage: string | null\n) {\n if (!minRequiredSlippage) return true;\n return parseFloat(userSlippage) >= parseFloat(minRequiredSlippage);\n}\n\nexport function hasEnoughBalance(\n route: BestRouteResponse,\n selectedWallets: Wallet[]\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: Wallet[],\n userSlippage: string,\n minRequiredSlippage: string | null\n): boolean {\n return (\n hasEnoughBalance(route, selectedWallets) &&\n hasProperSlippage(userSlippage, minRequiredSlippage)\n );\n}\n\nexport function createBestRouteRequestBody(\n fromToken: Token,\n toToken: Token,\n inputAmount: string,\n wallets: ConnectedWallet[],\n selectedWallets: Wallet[],\n disabledLiquiditySources: string[],\n slippage: number,\n affiliateRef: string | null,\n initialRoute?: BestRouteResponse\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 checkPrerequisites = !!initialRoute;\n\n const filteredBlockchains = removeDuplicateFrom(\n (initialRoute?.result?.swaps || []).reduce(\n (blockchains: string[], swap) => (\n blockchains.push(swap.from.blockchain, swap.to.blockchain), blockchains\n ),\n []\n )\n );\n\n const requestBody: BestRouteRequest = {\n amount: inputAmount.toString(),\n affiliateRef,\n checkPrerequisites,\n from: {\n address: fromToken.address,\n blockchain: fromToken.blockchain,\n symbol: fromToken.symbol,\n },\n to: {\n address: toToken.address,\n blockchain: toToken.blockchain,\n symbol: toToken.symbol,\n },\n connectedWallets,\n selectedWallets: selectedWalletsMap,\n swapperGroups: disabledLiquiditySources,\n swappersGroupsExclude: true,\n slippage: slippage.toString(),\n ...(checkPrerequisites && { blockchains: filteredBlockchains }),\n };\n\n return requestBody;\n}\n\nexport function getWalletsForNewSwap(selectedWallets: Wallet[]) {\n const wallets = selectedWallets.reduce(\n (\n selectedWalletsMap: {\n [p: string]: { address: string; walletType: WalletType };\n },\n selectedWallet\n ) => (\n (selectedWalletsMap[selectedWallet.chain] = {\n address: selectedWallet.address,\n walletType: selectedWallet.walletType,\n }),\n selectedWalletsMap\n ),\n {}\n );\n\n return wallets;\n}\n\nexport function getRouteOutputAmount(route: BestRouteResponse | null) {\n return route?.result?.outputAmount || null;\n}\n\nexport function getPercentageChange(\n oldValue: string | number | null,\n newValue: string | number | null\n) {\n if (!oldValue || !newValue) return null;\n return new BigNumber(newValue)\n .div(new BigNumber(oldValue))\n .minus(1)\n .multipliedBy(100);\n}\n\nexport function isOutputAmountChangedALot(\n oldRoute: BestRouteResponse,\n newRoute: BestRouteResponse\n) {\n const oldOutputAmount = getRouteOutputAmount(oldRoute);\n const newOutputAmount = getRouteOutputAmount(newRoute);\n if (!oldOutputAmount || !newOutputAmount) return false;\n const percentageChange = getPercentageChange(\n oldOutputAmount,\n newOutputAmount\n );\n if (!percentageChange) return true;\n\n return percentageChange.toNumber() <= -1;\n}\n\nexport function getBalanceWarnings(\n route: BestRouteResponse,\n selectedWallets: Wallet[]\n) {\n const fee = route.validationStatus;\n const requiredWallets = getRequiredChains(route);\n const walletsSortedByRequiredWallets = selectedWallets.sort(\n (selectedWallet1, selectedWallet2) =>\n requiredWallets.indexOf(selectedWallet1.chain) -\n requiredWallets.indexOf(selectedWallet2.chain)\n );\n return walletsSortedByRequiredWallets\n .flatMap((wallet) => getRequiredBalanceOfWallet(wallet, fee) || [])\n .filter((asset) => !asset.ok)\n .map((asset) => {\n const symbol = asset.asset.symbol;\n const currentAmount = numberToString(\n new BigNumber(asset.currentAmount.amount).shiftedBy(\n -asset.currentAmount.decimals\n ),\n 8\n );\n const requiredAmount = numberToString(\n new BigNumber(asset.requiredAmount.amount).shiftedBy(\n -asset.requiredAmount.decimals\n ),\n 8\n );\n let reason = '';\n if (asset.reason === 'FEE') reason = ' for network fee';\n if (asset.reason === 'INPUT_ASSET') reason = ' for swap';\n if (asset.reason === 'FEE_AND_INPUT_ASSET')\n reason = ' for input and network fee';\n const warningMessage = `Needs ≈ ${requiredAmount} ${symbol}${reason}, but you have ${currentAmount} ${symbol} in your ${asset.asset.blockchain} wallet.`;\n return warningMessage;\n });\n}\n\nexport function calcOutputUsdValue(\n outputAmount?: string,\n tokenPrice?: number | null\n) {\n const amount = !!outputAmount ? new BigNumber(outputAmount) : ZERO;\n\n return amount.multipliedBy(tokenPrice || 0);\n}\n\nexport function isNetworkStatusInWarningState(\n pendingSwapStep: PendingSwapStep | null\n): boolean {\n return (\n !!pendingSwapStep &&\n pendingSwapStep.networkStatus !== null &&\n pendingSwapStep.networkStatus !== PendingSwapNetworkStatus.NetworkChanged\n );\n}\n\nexport function getSwapMessages(\n pendingSwap: PendingSwap,\n currentStep: PendingSwapStep | null\n): {\n shortMessage: string;\n detailedMessage: { content: string; long: boolean };\n} {\n const textForRemove = 'bellow button or';\n let message = pendingSwap.extraMessage;\n let detailedMessage = pendingSwap.extraMessageDetail;\n\n if (pendingSwap.networkStatusExtraMessageDetail?.includes(textForRemove)) {\n pendingSwap.networkStatusExtraMessageDetail =\n pendingSwap.networkStatusExtraMessageDetail.replace(textForRemove, '');\n }\n\n const networkWarningState = isNetworkStatusInWarningState(currentStep);\n\n if (networkWarningState) {\n message = pendingSwap.networkStatusExtraMessage || '';\n detailedMessage = pendingSwap.networkStatusExtraMessageDetail || '';\n switch (currentStep?.networkStatus) {\n case PendingSwapNetworkStatus.WaitingForConnectingWallet:\n message = message || 'Waiting for connecting wallet';\n break;\n case PendingSwapNetworkStatus.WaitingForQueue:\n message = message || 'Waiting for other running tasks to be finished';\n break;\n case PendingSwapNetworkStatus.WaitingForNetworkChange:\n message = message || 'Waiting for changing wallet network';\n break;\n }\n }\n detailedMessage = detailedMessage || '';\n message = message || '';\n const isRpc =\n message?.indexOf('code') !== -1 && message?.indexOf('reason') !== -1;\n\n return {\n shortMessage: message,\n detailedMessage: { content: detailedMessage, long: isRpc },\n };\n}\n\nexport function getLastConvertedTokenInFailedSwap(\n pendingSwap: PendingSwap\n): ConvertedToken {\n let resultToken: ConvertedToken = null;\n if (pendingSwap.status === 'failed') {\n const lastSuccessStep = pendingSwap.steps\n .slice()\n .reverse()\n .filter((step) => step.status === 'success')[0];\n\n if (lastSuccessStep) {\n resultToken = {\n blockchain: lastSuccessStep.toBlockchain,\n symbol: lastSuccessStep.toSymbol,\n outputAmount: lastSuccessStep.outputAmount,\n address: lastSuccessStep.toSymbolAddress,\n };\n }\n }\n return resultToken;\n}\n\nexport function shouldRetrySwap(pendingSwap: PendingSwap) {\n return (\n pendingSwap.status === 'failed' &&\n !!pendingSwap.finishTime &&\n new Date().getTime() - parseInt(pendingSwap.finishTime) < 4 * 3600 * 1000\n );\n}\n","import { SelectableWallet } from '@rango-dev/ui';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { shallow } from 'zustand/shallow';\nimport { httpService } from '../services/httpService';\nimport {\n getRequiredChains,\n getTokensWithBalance,\n isAccountAndWalletMatched,\n makeBalanceFor,\n resetConnectedWalletState,\n sortTokens,\n} from '../utils/wallets';\nimport { useBestRouteStore } from './bestRoute';\nimport { useMetaStore } from './meta';\nimport createSelectors from './selectors';\nimport { Wallet } from '../types';\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 ConnectedWallet extends Wallet {\n balances: TokenBalance[] | null;\n loading: boolean;\n error: boolean;\n explorerUrl: string | null;\n}\n\ninterface WalletsStore {\n connectedWallets: ConnectedWallet[];\n selectedWallets: Wallet[];\n connectWallet: (accounts: Wallet[]) => void;\n disconnectWallet: (walletType: WalletType) => void;\n initSelectedWallets: () => void;\n setSelectedWallet: (wallet: SelectableWallet) => void;\n clearConnectedWallet: () => void;\n getOneOfWalletsDetails: (account: Wallet) => void;\n}\n\nexport const useWalletsStore = createSelectors(\n create<WalletsStore>()(\n subscribeWithSelector((set, get) => ({\n connectedWallets: [],\n selectedWallets: [],\n connectWallet: (accounts) => {\n const getOneOfWalletsDetails = get().getOneOfWalletsDetails;\n set((state) => ({\n connectedWallets: state.connectedWallets\n .filter((wallet) => wallet.walletType !== accounts[0].walletType)\n .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) => getOneOfWalletsDetails(account));\n },\n disconnectWallet: (walletType) => {\n set((state) => ({\n connectedWallets: state.connectedWallets.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.connectedWallets;\n const selectedWallets: Wallet[] = [];\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 connectedWallets: [],\n selectedWallets: [],\n })),\n getOneOfWalletsDetails: async (account: Wallet) => {\n const tokens = useMetaStore.getState().meta.tokens;\n set((state) => ({\n connectedWallets: state.connectedWallets.map((balance) => {\n return balance.address === account.address &&\n balance.chain === account.chain\n ? { ...balance, loading: true }\n : balance;\n }),\n }));\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 connectedWallets: state.connectedWallets.map(\n (connectedWallet) => {\n return isAccountAndWalletMatched(account, connectedWallet)\n ? makeBalanceFor(account, retrivedBalance, tokens)\n : connectedWallet;\n }\n ),\n }));\n } else throw new Error('Wallet not found');\n } catch (error) {\n set((state) => ({\n connectedWallets: state.connectedWallets.map((balance) => {\n return isAccountAndWalletMatched(account, balance)\n ? resetConnectedWalletState(balance)\n : balance;\n }),\n }));\n }\n },\n }))\n )\n);\n\nuseWalletsStore.subscribe(\n (state) => state.connectedWallets,\n (connectedWallets) => {\n useBestRouteStore.setState(({ sourceTokens, destinationTokens }) => {\n const sourceTokensWithBalance = getTokensWithBalance(\n sourceTokens,\n connectedWallets\n );\n const destinationTokensWithBalance = getTokensWithBalance(\n destinationTokens,\n connectedWallets\n );\n return {\n sourceTokens: sortTokens(sourceTokensWithBalance),\n destinationTokens: sortTokens(destinationTokensWithBalance),\n };\n });\n },\n {\n equalityFn: shallow,\n }\n);\n\nexport const fetchingBalanceSelector = (state: WalletsStore) =>\n !!state.connectedWallets.find((wallet) => wallet.loading);\n","import { BestRouteResponse, BlockchainMeta } from 'rango-sdk';\nimport { Token } from 'rango-sdk';\nimport { create } from 'zustand';\nimport BigNumber from 'bignumber.js';\nimport { ZERO } from '../constants/numbers';\nimport {\n getBestRouteToTokenUsdPrice,\n isRouteParametersChanged,\n} from '../utils/routing';\nimport createSelectors from './selectors';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { httpService } from '../services/httpService';\nimport { useSettingsStore } from './settings';\nimport { calcOutputUsdValue, createBestRouteRequestBody } from '../utils/swap';\nimport { useMetaStore } from './meta';\nimport {\n getDefaultToken,\n getSortedTokens,\n tokensAreEqual,\n} from '../utils/wallets';\nimport { useWalletsStore } from './wallets';\nimport { TokenWithBalance } from '../pages/SelectTokenPage';\nimport { PendingSwap } from '@rango-dev/queue-manager-rango-preset/dist/shared';\nimport { debounce } from '../utils/common';\nimport { isPositiveNumber } from '../utils/numbers';\n\nconst getUsdValue = (token: Token | null, amount: string) =>\n new BigNumber(amount || ZERO).multipliedBy(token?.usdPrice || 0);\n\nexport interface RouteState {\n fromChain: BlockchainMeta | null;\n toChain: BlockchainMeta | null;\n inputAmount: string;\n inputUsdValue: BigNumber;\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber;\n fromToken: TokenWithBalance | null;\n toToken: TokenWithBalance | null;\n loading: boolean;\n error: string;\n sourceTokens: Token[];\n destinationTokens: Token[];\n resetRoute: () => void;\n setFromChain: (\n chain: BlockchainMeta | null,\n setDefaultToken?: boolean\n ) => void;\n setToChain: (chian: BlockchainMeta | null, setDefaultToken?: boolean) => void;\n setFromToken: (token: Token | null) => void;\n setToToken: (token: Token | null) => void;\n setInputAmount: (amount: string) => void;\n bestRoute: BestRouteResponse | null;\n setBestRoute: (bestRoute: BestRouteResponse | null) => void;\n retry: (pendingSwap: PendingSwap) => void;\n switchFromAndTo: () => void;\n}\n\nexport const useBestRouteStore = createSelectors(\n create<RouteState>()(\n subscribeWithSelector((set) => ({\n fromChain: null,\n fromToken: null,\n inputAmount: '',\n outputAmount: null,\n inputUsdValue: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n toChain: null,\n toToken: null,\n bestRoute: null,\n loading: false,\n error: '',\n sourceTokens: [],\n destinationTokens: [],\n setBestRoute: (bestRoute) =>\n set((state) => {\n let outputAmount: BigNumber | null = null;\n let outputUsdValue: BigNumber = ZERO;\n if (!isPositiveNumber(state.inputAmount)) return {};\n if (!!bestRoute) {\n outputAmount = !!bestRoute.result?.outputAmount\n ? new BigNumber(bestRoute.result?.outputAmount)\n : null;\n outputUsdValue = calcOutputUsdValue(\n bestRoute.result?.outputAmount,\n getBestRouteToTokenUsdPrice(bestRoute) || state.toToken?.usdPrice\n );\n }\n return {\n bestRoute,\n ...(!!bestRoute && {\n outputAmount,\n outputUsdValue,\n }),\n };\n }),\n resetRoute: () =>\n set(() => ({\n loading: true,\n error: '',\n bestRoute: null,\n outputAmount: null,\n outputUsdValue: new BigNumber(0),\n })),\n setFromChain: (chain, setDefaultToken) => {\n set((state) => {\n if (state.fromChain?.name === chain?.name) return {};\n const tokens = useMetaStore.getState().meta.tokens;\n const connectedWallets = useWalletsStore.getState().connectedWallets;\n const sortedTokens = getSortedTokens(\n chain,\n tokens,\n connectedWallets,\n state.destinationTokens\n );\n const fromToken = getDefaultToken(sortedTokens, state.toToken);\n return {\n fromChain: chain,\n sourceTokens: sortedTokens,\n ...(setDefaultToken && {\n fromToken,\n }),\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(fromToken, state.inputAmount),\n }),\n };\n });\n },\n setFromToken: (token) =>\n set((state) => ({\n fromToken: token,\n ...(!!state.inputAmount && {\n inputUsdValue: getUsdValue(token, state.inputAmount),\n }),\n })),\n setToChain: (chain, setDefaultToken) => {\n set((state) => {\n if (state.toChain?.name === chain?.name) return {};\n const tokens = useMetaStore.getState().meta.tokens;\n const connectedWallets = useWalletsStore.getState().connectedWallets;\n const sortedTokens = getSortedTokens(\n chain,\n tokens,\n connectedWallets,\n state.destinationTokens\n );\n\n return {\n toChain: chain,\n destinationTokens: sortedTokens,\n ...(setDefaultToken && {\n toToken: getDefaultToken(sortedTokens, state.fromToken),\n }),\n };\n });\n },\n setToToken: (token) =>\n set(() => ({\n toToken: token,\n })),\n setInputAmount: (amount) => {\n set((state) => ({\n inputAmount: amount,\n ...(!amount && {\n outputAmount: new BigNumber(0),\n outputUsdValue: new BigNumber(0),\n bestRoute: null,\n error: '',\n }),\n ...(!!state.fromToken && {\n inputUsdValue: getUsdValue(state.fromToken, amount),\n }),\n }));\n },\n retry: (pendingSwap) => {\n const { tokens, blockchains } = useMetaStore.getState().meta;\n const connectedWallets = useWalletsStore.getState().connectedWallets;\n const failedIndex =\n pendingSwap.status === 'failed'\n ? pendingSwap.steps.findIndex((s) => s.status === 'failed')\n : null;\n\n if (failedIndex === null || failedIndex < 0) return;\n\n const firstStep = pendingSwap.steps[0];\n const lastStep = pendingSwap.steps[pendingSwap.steps.length - 1];\n const fromChain =\n blockchains.find(\n (blockchain) => blockchain.name === firstStep.fromBlockchain\n ) || null;\n const toChain =\n blockchains.find(\n (blockchain) => blockchain.name === lastStep.toBlockchain\n ) || null;\n\n const fromToken = tokens.find((token) =>\n tokensAreEqual(token, {\n blockchain: firstStep.fromBlockchain,\n symbol: firstStep.fromSymbol,\n address: firstStep.fromSymbolAddress,\n })\n );\n\n const toToken = tokens.find((token) =>\n tokensAreEqual(token, {\n blockchain: lastStep.toBlockchain,\n symbol: lastStep.toSymbol,\n address: lastStep.toSymbolAddress,\n })\n );\n const sortedSourceTokens = getSortedTokens(\n fromChain,\n tokens,\n connectedWallets,\n []\n );\n const sortedDestinationTokens = getSortedTokens(\n toChain,\n tokens,\n connectedWallets,\n []\n );\n const inputAmount = pendingSwap.inputAmount;\n set({\n fromChain,\n fromToken,\n inputAmount,\n outputAmount: null,\n inputUsdValue: getUsdValue(fromToken || null, inputAmount),\n outputUsdValue: new BigNumber(0),\n toChain,\n toToken,\n bestRoute: null,\n loading: false,\n error: '',\n sourceTokens: sortedSourceTokens,\n destinationTokens: sortedDestinationTokens,\n });\n },\n switchFromAndTo: () =>\n set((state) => ({\n fromChain: state.toChain,\n fromToken: state.toToken,\n toChain: state.fromChain,\n toToken: state.fromToken,\n sourceTokens: state.destinationTokens,\n destinationTokens: state.sourceTokens,\n inputAmount: state.outputAmount?.toString() || '',\n inputUsdValue: getUsdValue(\n state.toToken,\n state.outputAmount?.toString() || ''\n ),\n })),\n }))\n )\n);\n\nconst bestRoute = (\n bestRouteStore: typeof useBestRouteStore,\n settingsStore: typeof useSettingsStore\n) => {\n let abortController: AbortController | null = null;\n const fetchBestRoute = () => {\n const { fromToken, toToken, inputAmount, resetRoute } =\n bestRouteStore.getState();\n const { slippage, customSlippage, disabledLiquiditySources, affiliateRef } =\n settingsStore.getState();\n if (!fromToken || !toToken || !isPositiveNumber(inputAmount)) return;\n abortController?.abort();\n abortController = new AbortController();\n const userSlippage = !!customSlippage ? customSlippage : slippage;\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n [],\n [],\n disabledLiquiditySources,\n userSlippage,\n affiliateRef\n );\n\n if (!bestRouteStore.getState().loading) {\n resetRoute();\n }\n httpService()\n .getBestRoute(requestBody, {\n signal: abortController.signal,\n })\n .then((res) => {\n const { setBestRoute } = bestRouteStore.getState();\n setBestRoute(res);\n bestRouteStore.setState({ loading: false });\n abortController = null;\n })\n .catch((error) => {\n if (error.code === 'ERR_CANCELED') return;\n bestRouteStore.setState({\n error: error.message,\n loading: false,\n });\n });\n };\n\n const debouncedFetchBestRoute = debounce(fetchBestRoute, 600);\n\n const bestRouteParamsListener = () => {\n const { fromToken, toToken, inputAmount, inputUsdValue, resetRoute } =\n useBestRouteStore.getState();\n if (!isPositiveNumber(inputAmount) || inputUsdValue.eq(0))\n return bestRouteStore.setState({ loading: false });\n\n if (tokensAreEqual(fromToken, toToken))\n return bestRouteStore.setState({\n loading: false,\n bestRoute: null,\n outputAmount: new BigNumber(inputAmount),\n outputUsdValue: inputUsdValue,\n });\n\n if (!bestRouteStore.getState().loading) resetRoute();\n debouncedFetchBestRoute();\n };\n\n useBestRouteStore.subscribe(\n (state) => ({\n fromChain: state.fromChain,\n fromToken: state.fromToken,\n toChain: state.toChain,\n toToken: state.toToken,\n inputAmount: state.inputAmount,\n }),\n bestRouteParamsListener,\n {\n equalityFn: (prevState, currentState) => {\n if (\n isRouteParametersChanged({\n store: 'bestRoute',\n prevState,\n currentState,\n })\n )\n return false;\n else return true;\n },\n }\n );\n\n useSettingsStore.subscribe(\n (state) => ({\n slippage: state.slippage,\n customSlippage: state.customSlippage,\n disabledLiquiditySources: state.disabledLiquiditySources,\n infiniteApprove: state.infiniteApprove,\n }),\n bestRouteParamsListener,\n {\n equalityFn: (prevState, currentState) => {\n if (\n isRouteParametersChanged({\n store: 'settings',\n prevState,\n currentState,\n })\n )\n return false;\n else return true;\n },\n }\n );\n\n return { fetchBestRoute };\n};\n\nexport const { fetchBestRoute } = bestRoute(\n useBestRouteStore,\n useSettingsStore\n);\n","export enum SearchParams {\n 'FROM_CHAIN' = 'fromChain',\n 'FROM_TOKEN' = 'fromToken',\n 'TO_CHAIN' = 'toChain',\n 'TO_TOKEN' = 'toToken',\n 'FROM_AMOUNT' = 'fromAmount',\n}\n","export const navigationRoutes = {\n home: '/',\n fromChain: 'from-chain',\n fromToken: 'from-token',\n toChain: 'to-chain',\n toToken: 'to-token',\n settings: 'settings',\n liquiditySources: '/settings/liquidity-sources',\n swaps: 'swaps',\n wallets: 'wallets',\n confirmSwap: 'confirm-swap',\n swapDetails: 'swaps/:requestId',\n};\n","import { create } from 'zustand';\nimport createSelectors from './selectors';\n\ninterface UiState {\n connectWalletsButtonDisabled: boolean;\n selectedSwapRequestId: string | null;\n currentPage: string;\n toggleConnectWalletsButton: () => void;\n setSelectedSwap: (requestId: string | null) => void;\n setCurrentPage: (path: string) => void;\n}\n\nexport const useUiStore = createSelectors(\n create<UiState>()((set) => ({\n connectWalletsButtonDisabled: false,\n selectedSwapRequestId: null,\n currentPage: '',\n toggleConnectWalletsButton: () =>\n set((state) => ({\n connectWalletsButtonDisabled: !state.connectWalletsButtonDisabled,\n })),\n setSelectedSwap: (requestId) => set({ selectedSwapRequestId: requestId }),\n setCurrentPage: (path) => set({ currentPage: path }),\n }))\n);\n","import { useEffect, useRef } from 'react';\nimport {\n createSearchParams,\n useLocation,\n useSearchParams,\n} from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { SearchParams } from '../constants/searchParams';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { searchParamsToToken } from '../utils/routing';\n\nexport function UpdateUrl() {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const location = useLocation();\n const firstRenderSearchParams = useRef(location.search);\n const searchParamsRef = useRef<Record<string, string>>({});\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const loadingStatus = useMetaStore.use.loadingStatus();\n const { blockchains, tokens } = useMetaStore.use.meta();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n\n useEffect(() => {\n const params: Record<string, string> = {};\n createSearchParams(firstRenderSearchParams.current).forEach(\n (value, key) => {\n params[key] = value;\n }\n );\n searchParamsRef.current = params;\n const requestId =\n location.pathname.split(navigationRoutes.swaps + '/')[1] || null;\n if (requestId) setSelectedSwap(requestId);\n }, []);\n\n useEffect(() => {\n 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 =\n searchParamsRef.current[SearchParams.FROM_AMOUNT] || inputAmount;\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 firstRender.current = false;\n }, [location.pathname, inputAmount, fromChain, fromToken, toChain, toToken]);\n\n useEffect(() => {\n if (loadingStatus === 'success') {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n const fromAmount = searchParams.get(SearchParams.FROM_AMOUNT);\n const fromChain = blockchains.find(\n (blockchain) => blockchain.name === fromChainString\n );\n const fromToken = searchParamsToToken(\n tokens,\n fromTokenString,\n fromChain || null\n );\n const toChain = blockchains.find(\n (blockchain) => blockchain.name === toChainString\n );\n const toToken = searchParamsToToken(\n tokens,\n toTokenString,\n toChain || null\n );\n if (!!fromChain) {\n setFromChain(fromChain);\n if (!!fromToken) setFromToken(fromToken);\n }\n if (!!toChain) {\n setToChain(toChain);\n if (!!toToken) setToToken(toToken);\n }\n if (fromAmount) setInputAmount(fromAmount);\n }\n }, [loadingStatus]);\n\n return null;\n}\n","import React, { Fragment, PropsWithChildren } from 'react';\nimport { MemoryRouter, useInRouterContext } from 'react-router';\nimport { useQueueManager } from '@rango-dev/queue-manager-rango-preset';\nimport { WalletType } from '@rango-dev/wallets-shared';\nimport { isEvmBlockchain } from 'rango-types';\nimport { UpdateUrl } from './UpdateUrl';\nimport { useMetaStore } from '../store/meta';\n\nexport function AppRouter({\n children,\n ...props\n}: PropsWithChildren & {\n lastConnectedWallet: string;\n disconnectedWallet: WalletType | undefined;\n clearDisconnectedWallet: () => void;\n}) {\n const isRouterInContext = useInRouterContext();\n const Router = isRouterInContext ? Fragment : MemoryRouter;\n const { blockchains } = useMetaStore.use.meta();\n\n const evmChains = blockchains.filter(isEvmBlockchain);\n\n useQueueManager({\n lastConnectedWallet: props.lastConnectedWallet,\n clearDisconnectedWallet: props.clearDisconnectedWallet,\n disconnectedWallet: props.disconnectedWallet,\n evmChains,\n notifier: () => {},\n });\n\n return (\n <>\n <Router>{children}</Router>\n {isRouterInContext && <UpdateUrl />}\n </>\n );\n}\n","import { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function useNavigateBack() {\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n\n navigationRoutes;\n\n const navigateBackFrom = (currentRoute: string) => {\n if (currentRoute === navigationRoutes.swapDetails)\n return navigate('/' + navigationRoutes.swaps, { replace: true });\n\n if (\n !isRouterInContext ||\n (window.history.state && window.history.state.idx > 0)\n )\n navigate(-1);\n else {\n if (\n [\n navigationRoutes.fromChain,\n navigationRoutes.fromToken,\n navigationRoutes.toChain,\n navigationRoutes.toToken,\n navigationRoutes.settings,\n navigationRoutes.wallets,\n navigationRoutes.swaps,\n navigationRoutes.confirmSwap,\n ].includes(currentRoute)\n )\n navigate(navigationRoutes.home, { replace: true });\n else if (currentRoute === navigationRoutes.liquiditySources)\n navigate('/' + navigationRoutes.settings, { replace: true });\n }\n };\n\n return { navigateBackFrom };\n}\n","import React, { ReactNode } from 'react';\nimport {\n Button,\n InfoCircleIcon,\n styled,\n Typography,\n Divider,\n Image,\n} from '@rango-dev/ui';\nimport { LoadingStatus } from '../store/meta';\nimport { useTranslation } from 'react-i18next';\nimport BigNumber from 'bignumber.js';\nimport { numberToString } from '../utils/numbers';\n\nconst Box = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n overflow: 'hidden',\n});\n\nconst Container = styled('div', {\n boxSizing: 'border-box',\n borderRadius: '$5',\n padding: '$8 $16 $16 $16',\n\n variants: {\n type: {\n filled: {\n backgroundColor: '$neutral100',\n },\n outlined: {\n border: '1px solid $neutral100',\n },\n },\n },\n\n defaultVariants: {\n type: 'filled',\n },\n\n '.head': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '32px',\n '.usd-value': {\n paddingLeft: '$8',\n },\n },\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$2 0',\n '.selectors': {\n width: '35%',\n\n '._text': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n },\n '.amount': {\n width: '30%',\n },\n },\n});\n\nconst ImagePlaceholder = styled('span', {\n width: '24px',\n height: '24px',\n backgroundColor: '$neutral100',\n borderRadius: '99999px',\n});\n\nconst OutputContainer = styled('div', {\n windth: '100%',\n height: '$48',\n borderRadius: '$5',\n backgroundColor: '$surface',\n border: '1px solid transparent',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '$8',\n paddingRight: '$8',\n});\n\ninterface PropTypes {\n label: string;\n amount: string;\n usdValue?: BigNumber;\n loadingStatus: LoadingStatus;\n chain: {\n displayName: string;\n logo: string;\n };\n token: {\n symbol: string;\n image: string;\n };\n percentageChange?: ReactNode;\n}\n\nexport function TokenPreview(props: PropTypes) {\n const { chain, token, loadingStatus, percentageChange } = props;\n const { t } = useTranslation();\n\n const ItemSuffix = (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n {loadingStatus === 'failed' && <InfoCircleIcon color=\"error\" size={24} />}\n </div>\n );\n\n return (\n <Box>\n <Container type={'outlined'}>\n <div className=\"head\">\n <Typography variant=\"body2\" color=\"neutral800\">\n {props.label}\n </Typography>\n <div>\n {percentageChange}\n {props.usdValue && (\n <Typography\n variant=\"caption\"\n color=\"neutral600\"\n className=\"usd-value\"\n >{`$${numberToString(props.usdValue)}`}</Typography>\n )}\n </div>\n </div>\n <div className=\"form\">\n <Button\n className=\"selectors\"\n variant=\"outlined\"\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && chain ? (\n <Image src={chain.logo} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n >\n {loadingStatus === 'success' && chain\n ? chain.displayName\n : t('Chain')}\n </Button>\n <Divider size={12} direction=\"horizontal\" />\n <Button\n className=\"selectors\"\n variant=\"outlined\"\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && token ? (\n <Image src={token.image} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n <Divider size={12} direction=\"horizontal\" />\n <div className=\"amount\">\n <OutputContainer>\n <Typography variant=\"h4\">{props.amount}</Typography>\n </OutputContainer>\n </div>\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled, ChevronRightIcon, GasIcon, Divider } from '@rango-dev/ui';\nimport { BestRouteResponse } from 'rango-sdk';\n\nexport const Container = styled('div', {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '$8',\n borderRadius: '$5',\n backgroundColor: '$neutral100',\n color: '$neutral800',\n fontSize: '$12',\n\n '.routes': {\n display: 'flex',\n alignItems: 'center',\n },\n '.fee': {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\ninterface PropTypes {\n routes: BestRouteResponse | null;\n totalFee?: string;\n}\nfunction RoutesOverview(props: PropTypes) {\n if (!props.routes) return null;\n\n const swaps = props.routes.result?.swaps;\n return (\n <Container>\n <div className=\"routes\">\n {swaps?.map((swap, idx) => {\n const isLast = idx + 1 == swaps.length;\n return (\n <React.Fragment key={idx}>\n <div className=\"route\">{swap.from.symbol}</div>\n <ChevronRightIcon size={12} />\n {isLast ? <div className=\"route\">{swap.to.symbol}</div> : null}\n </React.Fragment>\n );\n })}\n </div>\n {props.totalFee ? (\n <div className=\"fee\">\n <GasIcon size={12} />\n <Divider size={4} direction=\"horizontal\" />${props.totalFee}\n </div>\n ) : null}\n </Container>\n );\n}\n\nexport default RoutesOverview;\n","import { RouteState } from '../store/bestRoute';\nimport { SettingsState } from '../store/settings';\n\ninterface BestRouteStoreParams {\n fromChain?: RouteState['fromChain'];\n toChain?: RouteState['toChain'];\n fromToken?: RouteState['fromToken'];\n toToken?: RouteState['toToken'];\n inputAmount?: RouteState['inputAmount'];\n}\n\ninterface SettingsStoreParams {\n slippage?: SettingsState['slippage'];\n customSlippage?: SettingsState['customSlippage'];\n disabledLiquiditySources?: SettingsState['disabledLiquiditySources'];\n infiniteApprove?: SettingsState['infiniteApprove'];\n}\n\nexport type BestRouteEqualityParams =\n | {\n store: 'bestRoute';\n prevState: BestRouteStoreParams;\n currentState: BestRouteStoreParams;\n }\n | {\n store: 'settings';\n prevState: SettingsStoreParams;\n currentState: SettingsStoreParams;\n };\n\nexport enum ConfirmSwapErrorTypes {\n NO_ROUTE,\n ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n REQUEST_FAILED,\n INSUFFICIENT_SLIPPAGE,\n INSUFFICIENT_BALANCE,\n}\n\nexport type ConfirmSwapError =\n | {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED;\n status?: number;\n }\n | {\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE;\n minRequiredSlippage: string | null;\n }\n | { type: ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE; messages: string[] }\n | {\n type: Exclude<\n ConfirmSwapErrorTypes,\n | ConfirmSwapErrorTypes.REQUEST_FAILED\n | ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n | ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE\n >;\n };\n\nexport type ConfirmSwapWarnings =\n | {\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED;\n newOutputAmount: string;\n percentageChange: string;\n }\n | {\n type: Exclude<\n ConfirmSwapWarningTypes,\n ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED\n >;\n };\n\nexport enum ConfirmSwapWarningTypes {\n ROUTE_UPDATED,\n ROUTE_SWAPPERS_UPDATED,\n ROUTE_COINS_UPDATED,\n ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { useWalletsStore } from '../store/wallets';\nimport {\n ConfirmSwapError,\n ConfirmSwapErrorTypes,\n ConfirmSwapWarningTypes,\n ConfirmSwapWarnings,\n PendingSwapSettings,\n} from '../types';\nimport { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';\nimport {\n createBestRouteRequestBody,\n getBalanceWarnings,\n getMinRequiredSlippage,\n getOutputRatio,\n getPercentageChange,\n getRouteOutputAmount,\n getWalletsForNewSwap,\n hasProperSlippage,\n isOutputAmountChangedALot,\n outputRatioHasWarning,\n} from '../utils/swap';\nimport { httpService } from '../services/httpService';\nimport BigNumber from 'bignumber.js';\nimport {\n isNumberOfSwapsChanged,\n isRouteChanged,\n isRouteInternalCoinsUpdated,\n isRouteSwappersUpdated,\n} from '../utils/routing';\nimport { numberToString } from '../utils/numbers';\nimport { BestRouteResponse } from 'rango-sdk';\nimport { calculatePendingSwap } from '@rango-dev/queue-manager-rango-preset';\n\ntype ConfirmSwap = {\n loading: boolean;\n errors: ConfirmSwapError[];\n warnings: ConfirmSwapWarnings[];\n confirmSwap: (() => Promise<PendingSwap | undefined>) | null;\n};\n\nexport function useConfirmSwap(): ConfirmSwap {\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const initialRoute = useBestRouteStore.use.bestRoute();\n const setBestRoute = useBestRouteStore.use.setBestRoute();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const affiliateRef = useSettingsStore.use.affiliateRef();\n\n const connectedWallets = useWalletsStore.use.connectedWallets();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const meta = useMetaStore.use.meta();\n const customSlippage = useSettingsStore.use.customSlippage();\n const slippage = useSettingsStore.use.slippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const userSlippage = customSlippage || slippage;\n const proceedAnywayRef = useRef(false);\n const confiremedRouteRef = useRef<BestRouteResponse | null>(null);\n let abortControllerRef = useRef<AbortController | null>(null);\n\n const [loading, setLoading] = useState(false);\n const [errors, setErrors] = useState<ConfirmSwapError[]>([]);\n const [warnings, setWarnings] = useState<ConfirmSwapWarnings[]>([]);\n\n useEffect(() => {\n return () => abortControllerRef.current?.abort();\n }, []);\n\n if (!fromToken || !toToken || !inputAmount || !initialRoute)\n return { loading: false, warnings: [], errors: [], confirmSwap: null };\n\n const confirmSwap = async (): Promise<PendingSwap | undefined> => {\n if (proceedAnywayRef.current) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n if (errors.length > 0) setErrors([]);\n if (warnings.length > 0) setWarnings([]);\n proceedAnywayRef.current = false;\n\n if (confiremedRouteRef.current) {\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRouteRef.current,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n\n return newSwap;\n }\n return;\n }\n\n abortControllerRef.current = new AbortController();\n\n setLoading(true);\n\n const requestBody = createBestRouteRequestBody(\n fromToken,\n toToken,\n inputAmount,\n connectedWallets,\n selectedWallets,\n disabledLiquiditySources,\n userSlippage,\n affiliateRef,\n initialRoute\n );\n\n try {\n const confiremedRoute = await httpService().getBestRoute(requestBody, {\n signal: abortControllerRef.current?.signal,\n });\n\n abortControllerRef.current = null;\n\n setLoading(false);\n\n if (\n !confiremedRoute.result ||\n !new BigNumber(confiremedRoute.requestAmount).isEqualTo(\n new BigNumber(inputAmount || '-1')\n )\n ) {\n setErrors((prevState) =>\n prevState.concat({\n type: ConfirmSwapErrorTypes.NO_ROUTE,\n })\n );\n return;\n }\n\n const confirmSwapState: Omit<ConfirmSwap, 'confirmSwap' | 'loading'> = {\n errors: [],\n warnings: [],\n };\n\n const routeChanged = isRouteChanged(initialRoute, confiremedRoute!);\n\n if (routeChanged) {\n setBestRoute(confiremedRoute);\n const newRouteOutputUsdValue = new BigNumber(\n confiremedRoute.result?.outputAmount || '0'\n ).multipliedBy(toToken.usdPrice || 0);\n\n const outputRatio = getOutputRatio(\n inputUsdValue,\n newRouteOutputUsdValue\n );\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outputRatio);\n\n if (highValueLoss)\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,\n });\n else if (isOutputAmountChangedALot(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED,\n newOutputAmount: numberToString(\n getRouteOutputAmount(confiremedRoute)\n ),\n percentageChange: numberToString(\n getPercentageChange(\n getRouteOutputAmount(initialRoute),\n getRouteOutputAmount(confiremedRoute)\n ),\n null,\n 2\n ),\n });\n else if (isRouteInternalCoinsUpdated(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED,\n });\n else if (isNumberOfSwapsChanged(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_UPDATED,\n });\n else if (isRouteSwappersUpdated(initialRoute, confiremedRoute))\n confirmSwapState.warnings.push({\n type: ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED,\n });\n }\n\n const balanceWarnings = getBalanceWarnings(\n confiremedRoute,\n selectedWallets\n );\n const enoughBalance = balanceWarnings.length === 0;\n\n if (!enoughBalance)\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE,\n messages: balanceWarnings,\n });\n\n const minRequiredSlippage = getMinRequiredSlippage(initialRoute);\n\n if (!hasProperSlippage(userSlippage.toString(), minRequiredSlippage))\n confirmSwapState.errors.push({\n type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE,\n minRequiredSlippage,\n });\n\n const noErrors = confirmSwapState.errors.length === 0;\n const noWarnings = confirmSwapState.warnings.length === 0;\n\n if (\n (noErrors || (!noErrors && proceedAnywayRef.current)) &&\n (noWarnings || (!noWarnings && proceedAnywayRef.current))\n ) {\n const swapSettings: PendingSwapSettings = {\n slippage: userSlippage.toString(),\n disabledSwappersGroups: disabledLiquiditySources,\n };\n\n const newSwap = calculatePendingSwap(\n inputAmount.toString(),\n confiremedRoute,\n getWalletsForNewSwap(selectedWallets),\n swapSettings,\n false,\n meta\n );\n return newSwap;\n } else if (!proceedAnywayRef.current) {\n proceedAnywayRef.current = true;\n setErrors(confirmSwapState.errors);\n setWarnings(confirmSwapState.warnings);\n confiremedRouteRef.current = confiremedRoute;\n }\n return;\n } catch (error) {\n if ((error as any)?.code === 'ERR_CANCELED') {\n return;\n }\n\n const status = (error as any)?.response?.status;\n\n setLoading(false);\n setErrors([\n {\n type: ConfirmSwapErrorTypes.REQUEST_FAILED,\n status,\n },\n ]);\n\n return;\n }\n };\n\n return { loading, warnings, errors, confirmSwap };\n}\n","import React from 'react';\nimport { Button } from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nexport function ChangeSlippageButton() {\n const navigate = useNavigate();\n\n return (\n <Button\n type=\"primary\"\n variant=\"outlined\"\n size=\"small\"\n onClick={() => navigate('/' + navigationRoutes.settings)}\n >\n Change Slippage\n </Button>\n );\n}\n","import { Divider, Typography, styled } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n minRequiredSlippage: string | null;\n}\n\nconst StyledMessage = styled(Typography, {\n color: '$error500 !important',\n});\n\nexport function MinRequiredSlippage({ minRequiredSlippage }: PropTypes) {\n return (\n <StyledMessage variant=\"body2\">\n We recommend you to increase slippage to at least &nbsp;\n {minRequiredSlippage}\n &nbsp; for this route.\n <Divider size={8}/>\n <ChangeSlippageButton />\n </StyledMessage>\n );\n}\n","import { Divider, styled, Typography } from '@rango-dev/ui';\nimport React from 'react';\n\ninterface PropTypes {\n messages: string[];\n}\n\nconst List = styled('ul', {\n padding: 0,\n margin: 0,\n variants: {\n showListStyle: {\n true: { paddingLeft: '$24' },\n },\n },\n});\n\nconst ListItem = styled('li', {\n variants: {\n showListStyle: {\n true: { listStyleType: 'disc', listStylePosition: 'outside' },\n },\n },\n});\n\nconst Message = styled(Typography, {\n display: 'block',\n});\n\nexport function BalanceErrors({ messages }: PropTypes) {\n const showListStyle = messages.length > 1;\n return (\n <>\n <Typography className=\"title\" variant=\"title\" color={'error'}>\n Insufficent Balance:\n </Typography>\n <Divider size={8} />\n <List showListStyle={showListStyle}>\n {messages.map((warning, index) => (\n <ListItem showListStyle={showListStyle} key={index}>\n <Message variant=\"body2\">{warning}</Message>\n </ListItem>\n ))}\n </List>\n </>\n );\n}","import React from 'react';\nimport { ConfirmSwapError, ConfirmSwapErrorTypes } from '../types';\nimport { MinRequiredSlippage } from './warnings/MinRequiredSlippage';\nimport { BalanceErrors } from './warnings/BalanceErrors';\n\nexport function ConfirmSwapErrors(errors: ConfirmSwapError[]) {\n return errors.flatMap((error) => {\n switch (error.type) {\n case ConfirmSwapErrorTypes.NO_ROUTE:\n return 'No routes found. Please try again later.';\n case ConfirmSwapErrorTypes.REQUEST_FAILED:\n return `Failed to confirm swap ${\n error.status ? `'status': ${error.status})` : ''\n }, please try again.`;\n\n case ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS:\n return 'Route updated and price impact is too high, try again later!';\n case ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE:\n return (\n <MinRequiredSlippage\n minRequiredSlippage={error.minRequiredSlippage}\n />\n );\n case ConfirmSwapErrorTypes.INSUFFICIENT_BALANCE:\n return <BalanceErrors messages={error.messages} />;\n default:\n return [];\n }\n });\n}\n","import { ConfirmSwapWarningTypes, ConfirmSwapWarnings } from '../types';\n\nexport function ConfirmSwapWarnings(warnings: ConfirmSwapWarnings[]) {\n return warnings.flatMap((warning) => {\n switch (warning.type) {\n case ConfirmSwapWarningTypes.ROUTE_UPDATED:\n return \"Route has been updated.\";\n case ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED:\n return (\n `Output amount changed to ${warning.newOutputAmount} (${warning.percentageChange}% change).`\n );\n\n case ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED:\n return (\n \"Route swappers has been updated.\"\n );\n case ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED:\n return (\n \"Route internal coins has been updated.\"\n );\n default:\n return [];\n }\n });\n}","import { Alert } from '@rango-dev/ui';\nimport React from 'react';\nimport { ChangeSlippageButton } from '../ChangeSlippageButton';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function HighSlippageWarning(props: PropTypes) {\n const { selectedSlippage } = props;\n\n return (\n <Alert type=\"warning\" footer={<ChangeSlippageButton />}>\n Caution, your slippage is high (=\n {selectedSlippage}). Your trade may be front run.\n </Alert>\n );\n}\n","import React from 'react';\nimport { HIGH_SLIPPAGE } from '../../constants/swapSettings';\nimport { HighSlippageWarning } from './HighSlippageWarning';\n\ninterface PropTypes {\n selectedSlippage: number;\n}\n\nexport function ConfirmSwapExtraMessages(props: PropTypes) {\n const { selectedSlippage } = props;\n const highSlippage = selectedSlippage >= HIGH_SLIPPAGE;\n\n return (\n <>\n {highSlippage && (\n <HighSlippageWarning selectedSlippage={selectedSlippage} />\n )}\n </>\n );\n}\n","import BigNumber from 'bignumber.js';\nimport React from 'react';\nimport { getPercentageChange } from '../utils/swap';\nimport { Typography } from '@rango-dev/ui';\nimport { numberToString } from '../utils/numbers';\n\ninterface PropTypes {\n inputUsdValue: BigNumber | null;\n outputUsdValue: BigNumber | null;\n}\n\nexport function PercentageChange(props: PropTypes) {\n const { inputUsdValue, outputUsdValue } = props;\n\n if (!inputUsdValue || !outputUsdValue || !outputUsdValue.gt(0)) return null;\n\n const percentageChange = getPercentageChange(\n inputUsdValue.toNumber(),\n outputUsdValue.toNumber()\n );\n\n const showPercentageChange = percentageChange?.lt(0);\n\n return (\n <>\n {showPercentageChange && (\n <Typography variant=\"caption\" color=\"$error500\">\n {`(${numberToString(percentageChange, 0, 2)}%)`}\n </Typography>\n )}\n </>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useWalletsStore } from '../store/wallets';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport {\n getKeplrCompatibleConnectedWallets,\n getRequiredChains,\n getSelectableWallets,\n isExperimentalChain,\n} from '../utils/wallets';\nimport { getTotalFeeInUsd, requiredWallets } from '../utils/swap';\nimport { numberToString } from '../utils/numbers';\nimport { useMetaStore } from '../store/meta';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { TokenPreview } from '../components/TokenPreview';\n// @ts-ignore // TODO: fix error in tsc build\nimport { t } from 'i18next';\nimport { Divider, ConfirmSwap, LoadingFailedAlert } from '@rango-dev/ui';\nimport RoutesOverview from '../components/RoutesOverview';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useConfirmSwap } from '../hooks/useConfirmSwap';\nimport { useSettingsStore } from '../store/settings';\nimport { useUiStore } from '../store/ui';\nimport { ConfirmSwapErrorTypes } from '../types';\nimport { ConfirmSwapErrors } from '../components/ConfirmSwapErrors';\nimport { ConfirmSwapWarnings } from '../components/ConfirmSwapWarnings';\nimport { ConfirmSwapExtraMessages } from '../components/warnings/ConfirmSwapExtraMessages';\nimport { getBestRouteStatus } from '../utils/routing';\nimport { PercentageChange } from '../components/PercentageChange';\n\nexport function ConfirmSwapPage() {\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const fetchingBestRouteError = useBestRouteStore.use.error();\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const { blockchains, tokens } = useMetaStore.use.meta();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const connectedWallets = useWalletsStore.use.connectedWallets();\n const selectedWallets = useWalletsStore.use.selectedWallets();\n const initSelectedWallets = useWalletsStore.use.initSelectedWallets();\n const setSelectedWallet = useWalletsStore.use.setSelectedWallet();\n const slippage = useSettingsStore.use.slippage();\n const customSlippage = useSettingsStore.use.customSlippage();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const [dbErrorMessage, setDbErrorMessage] = useState<string>('');\n const bestRouteloadingStatus = getBestRouteStatus(\n fetchingBestRoute,\n !!fetchingBestRouteError\n );\n\n const { manager } = useManager();\n const {\n loading: fetchingConfirmedRoute,\n errors,\n warnings,\n confirmSwap,\n } = useConfirmSwap();\n\n const selectedSlippage = customSlippage || slippage;\n\n const showHighSlippageWarning = !errors.find(\n error => error.type === ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE\n );\n\n const { getWalletInfo, connect } = useWallets();\n const confirmDisabled =\n fetchingBestRoute ||\n !requiredWallets(bestRoute).every(chain =>\n selectedWallets.map(wallet => wallet.chain).includes(chain)\n );\n\n const firstStep = bestRoute?.result?.swaps[0];\n const lastStep =\n bestRoute?.result?.swaps[bestRoute?.result?.swaps.length - 1];\n\n const fromAmount = numberToString(firstStep?.fromAmount, 4, 6);\n const toAmount = numberToString(lastStep?.toAmount, 4, 6);\n useEffect(() => {\n initSelectedWallets();\n }, []);\n\n const selectableWallets = getSelectableWallets(\n connectedWallets,\n selectedWallets,\n getWalletInfo\n );\n\n const handleConnectChain = (wallet: string) => {\n const network = wallet as Network;\n getKeplrCompatibleConnectedWallets(\n selectableWallets\n ).forEach((compatibleWallet: WalletType) =>\n connect?.(compatibleWallet, network)\n );\n };\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n return (\n <ConfirmSwap\n requiredWallets={getRequiredChains(bestRoute)}\n selectableWallets={selectableWallets}\n onBack={navigateBackFrom.bind(null, navigationRoutes.confirmSwap)}\n onConfirm={async () => {\n confirmSwap?.().then(async swap => {\n if (swap) {\n try {\n await manager?.create(\n 'swap',\n { swapDetails: swap },\n { id: swap.requestId }\n );\n setSelectedSwap(swap.requestId);\n navigate('/' + navigationRoutes.swaps + `/${swap.requestId}`, {\n replace: true,\n });\n setTimeout(() => {\n setInputAmount('');\n }, 0);\n } catch (e) {\n setDbErrorMessage('Error: ' + (e as any)?.message);\n }\n }\n });\n }}\n onChange={wallet => setSelectedWallet(wallet)}\n confirmDisabled={loadingMetaStatus !== 'success' || confirmDisabled}\n handleConnectChain={wallet => handleConnectChain(wallet)}\n isExperimentalChain={wallet =>\n getKeplrCompatibleConnectedWallets(selectableWallets).length > 0\n ? isExperimentalChain(blockchains, wallet)\n : false\n }\n previewInputs={\n <>\n <TokenPreview\n chain={{\n displayName: firstStep?.from.blockchain || '',\n logo: firstStep?.from.blockchainLogo || '',\n }}\n token={{\n symbol: firstStep?.from.symbol || '',\n image: firstStep?.from.logo || '',\n }}\n usdValue={inputUsdValue}\n amount={fromAmount}\n label={t('From')}\n loadingStatus={\n loadingMetaStatus !== 'success'\n ? loadingMetaStatus\n : bestRouteloadingStatus\n }\n />\n <Divider size={12} />\n <TokenPreview\n chain={{\n displayName: lastStep?.to.blockchain || '',\n logo: lastStep?.to.blockchainLogo || '',\n }}\n token={{\n symbol: lastStep?.to.symbol || '',\n image: lastStep?.to.logo || '',\n }}\n usdValue={outputUsdValue}\n amount={toAmount}\n label={t('To')}\n loadingStatus={\n loadingMetaStatus !== 'success'\n ? loadingMetaStatus\n : bestRouteloadingStatus\n }\n percentageChange={\n <PercentageChange\n inputUsdValue={inputUsdValue}\n outputUsdValue={outputUsdValue}\n />\n }\n />\n </>\n }\n previewRoutes={\n <RoutesOverview\n routes={bestRoute}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n />\n }\n loading={fetchingConfirmedRoute}\n errors={\n dbErrorMessage\n ? [dbErrorMessage, ...ConfirmSwapErrors(errors)]\n : ConfirmSwapErrors(errors)\n }\n warnings={ConfirmSwapWarnings(warnings)}\n extraMessages={\n <>\n {loadingMetaStatus === 'failed' && <LoadingFailedAlert />}\n {loadingMetaStatus === 'failed' && showHighSlippageWarning && (\n <Divider />\n )}\n {showHighSlippageWarning && (\n <ConfirmSwapExtraMessages selectedSlippage={selectedSlippage} />\n )}\n </>\n }\n confirmButtonTitle={\n warnings.length > 0 || errors.length > 0\n ? 'Proceed anyway!'\n : 'Confirm swap!'\n }\n />\n );\n}\n","import { Manager } from '@rango-dev/queue-manager-core';\nimport {\n PendingSwapWithQueueID,\n SwapStorage,\n} from '@rango-dev/queue-manager-rango-preset';\n\nexport const getPendingSwaps = (manager: Manager | undefined) => {\n const result: PendingSwapWithQueueID[] = [];\n\n manager?.getAll().forEach((q, id) => {\n const storage = q.list.getStorage() as SwapStorage;\n\n if (storage?.swapDetails) {\n result.push({\n id,\n swap: storage?.swapDetails,\n });\n }\n });\n\n return result.sort(\n (a, b) => Number(b.swap.creationTime) - Number(a.swap.creationTime)\n );\n};\n","import { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\nimport dayjs from 'dayjs';\nimport { GroupBy } from '@rango-dev/ui';\n\nexport const groupSwapsByDate: GroupBy = swaps => {\n const output: Map<\n string,\n {\n title: string;\n swaps: PendingSwap[];\n }\n > = new Map([\n [\n 'today',\n {\n title: 'Today',\n swaps: [],\n },\n ],\n [\n 'week',\n {\n title: 'This week',\n swaps: [],\n },\n ],\n [\n 'month',\n {\n title: 'This month',\n swaps: [],\n },\n ],\n [\n 'year',\n {\n title: 'This year',\n swaps: [],\n },\n ],\n [\n 'history',\n {\n title: 'History',\n swaps: [],\n },\n ],\n ]);\n\n const now = dayjs();\n swaps.forEach(swap => {\n const swapDate = dayjs(Number(swap.creationTime));\n if (now.isSame(swapDate, 'day')) output.get('today')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'week')) output.get('week')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'month'))\n output.get('month')?.swaps.push(swap);\n else if (now.isSame(swapDate, 'year')) output.get('year')?.swaps.push(swap);\n else output.get('history')?.swaps.push(swap);\n });\n\n return Array.from(output.values());\n};\n","import { History } from '@rango-dev/ui';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { useUiStore } from '../store/ui';\nimport { groupSwapsByDate } from '../utils/date';\n\nexport function HistoryPage() {\n const setSelectedSwap = useUiStore.use.setSelectedSwap();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const { manager, state } = useManager();\n const pendingSwaps = getPendingSwaps(manager).map(({ swap }) => swap);\n\n const loading = !state.loadedFromPersistor;\n\n return (\n <History\n list={pendingSwaps}\n groupBy={groupSwapsByDate}\n loading={loading}\n onSwapClick={(requestId) => {\n setSelectedSwap(requestId);\n navigate(`${requestId}`, { replace: true });\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swaps)}\n />\n );\n}\n","import React from 'react';\nimport {\n AngleDownIcon,\n Button,\n InfoCircleIcon,\n styled,\n TextField,\n Typography,\n Image,\n Divider,\n} from '@rango-dev/ui';\nimport { useMetaStore } from '../store/meta';\nimport { BlockchainMeta, Token } from 'rango-sdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { numberToString } from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { getBalanceFromWallet } from '../utils/wallets';\nimport { useWalletsStore } from '../store/wallets';\nimport { useTranslation } from 'react-i18next';\nimport { PercentageChange } from './PercentageChange';\n\ntype PropTypes = (\n | {\n type: 'From';\n inputAmount: string;\n onAmountChange: (amount: string) => void;\n }\n | {\n type: 'To';\n outputAmount: BigNumber | null;\n outputUsdValue: BigNumber | null;\n }\n) & { chain: BlockchainMeta | null; token: Token | null };\n\nconst Box = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n overflow: 'hidden',\n});\n\nconst Container = styled('div', {\n boxSizing: 'border-box',\n borderRadius: '$5',\n padding: '$8 $16 $16 $16',\n\n variants: {\n type: {\n filled: {\n backgroundColor: '$neutral100',\n },\n outlined: {\n border: '1px solid $neutral100',\n backgroundColor: '$surface',\n },\n },\n },\n\n defaultVariants: {\n type: 'filled',\n },\n\n '.head': {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n minHeight: '32px',\n },\n '.form': {\n display: 'flex',\n width: '100%',\n padding: '$2 0',\n '.selectors': {\n width: '35%',\n\n '._text': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n },\n '.amount': {\n width: '30%',\n },\n },\n '.output-usd': {\n display: 'flex',\n div: {\n display: 'flex',\n paddingLeft: '$8',\n },\n },\n});\n\nconst Options = styled('div', {\n display: 'flex',\n justifyContent: 'flex-end',\n\n '.balance': {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nconst ImagePlaceholder = styled('span', {\n width: '24px',\n height: '24px',\n backgroundColor: '$neutral100',\n borderRadius: '99999px',\n});\n\nconst OutputContainer = styled('div', {\n windth: '100%',\n height: '$48',\n borderRadius: '$5',\n backgroundColor: '$surface',\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 connectedWallets = useWalletsStore.use.connectedWallets();\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const navigate = useNavigate();\n const { t } = useTranslation();\n\n const tokenBalance =\n !!fromChain && !!fromToken\n ? numberToString(\n getBalanceFromWallet(\n connectedWallets,\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 connectedWallets,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.amount || '0',\n getBalanceFromWallet(\n connectedWallets,\n fromChain?.name,\n fromToken?.symbol,\n fromToken?.address\n )?.decimal\n )\n : '0';\n\n const ItemSuffix = (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n {loadingStatus === 'failed' && <InfoCircleIcon color=\"error\" size={24} />}\n <AngleDownIcon />\n </div>\n );\n\n return (\n <Box>\n <Container type={props.type === 'From' ? 'filled' : 'outlined'}>\n <div className=\"head\">\n <Typography variant=\"body2\" color=\"neutral800\">\n {t(type)}\n </Typography>\n {props.type === 'From' ? (\n <Options>\n <div\n className=\"balance\"\n onClick={() => {\n if (tokenBalance !== '0')\n setInputAmount(tokenBalanceReal.split(',').join(''));\n }}\n >\n <Typography variant=\"body3\" color=\"neutral600\">{`${t(\n 'Balance'\n )}: ${tokenBalance} ${fromToken?.symbol || ''}`}</Typography>\n <Divider size={4} />\n <Button type=\"primary\" variant=\"ghost\" size=\"compact\">\n {t('Max')}\n </Button>\n </div>\n </Options>\n ) : (\n <div className=\"output-usd\">\n <PercentageChange\n inputUsdValue={inputUsdValue}\n outputUsdValue={props.outputUsdValue}\n />\n <div>\n <Typography\n variant=\"caption\"\n color=\"neutral600\"\n >{`$${numberToString(props.outputUsdValue)}`}</Typography>\n </div>\n </div>\n )}\n </div>\n <div className=\"form\">\n <Button\n className=\"selectors\"\n onClick={() => {\n navigate(`${props.type.toLowerCase()}-chain`);\n }}\n variant=\"outlined\"\n disabled={loadingStatus === 'failed'}\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && chain ? (\n <Image src={chain.logo} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n align=\"start\"\n size=\"large\"\n >\n {loadingStatus === 'success' && chain\n ? chain.displayName\n : t('Chain')}\n </Button>\n <Divider size={12} direction=\"horizontal\" />\n <Button\n className=\"selectors\"\n onClick={() => {\n navigate(`${props.type.toLowerCase()}-token`);\n }}\n variant=\"outlined\"\n disabled={\n loadingStatus === 'failed' ||\n (type === 'From' && !fromChain) ||\n (type === 'To' && !toChain)\n }\n loading={loadingStatus === 'loading'}\n prefix={\n loadingStatus === 'success' && token ? (\n <Image src={token.image} size={24} />\n ) : (\n <ImagePlaceholder />\n )\n }\n suffix={ItemSuffix}\n size=\"large\"\n align=\"start\"\n >\n {loadingStatus === 'success' && token ? token.symbol : t('Token')}\n </Button>\n <Divider size={12} direction=\"horizontal\" />\n <div className=\"amount\">\n {props.type === 'From' ? (\n <TextField\n type=\"number\"\n size=\"large\"\n autoFocus\n placeholder=\"0\"\n style={{\n position: 'relative',\n backgroundColor: '$background !important',\n }}\n suffix={\n <span\n style={{\n position: 'absolute',\n right: '4px',\n bottom: '2px',\n }}\n >\n <Typography\n variant=\"caption\"\n color=\"neutral800\"\n >{`$${numberToString(inputUsdValue)}`}</Typography>\n </span>\n }\n value={props.inputAmount || ''}\n min={0}\n onChange={\n props.type === 'From'\n ? (event) => {\n props.onAmountChange(event.target.value);\n }\n : undefined\n }\n />\n ) : (\n <OutputContainer>\n <Typography variant=\"h4\">\n {fetchingBestRoute && '?'}\n {!!bestRoute?.result &&\n `≈ ${numberToString(props.outputAmount)}`}\n {(!inputAmount || inputAmount === '0') && '0'}\n </Typography>\n </OutputContainer>\n )}\n </div>\n </div>\n </Container>\n </Box>\n );\n}\n","import React from 'react';\nimport { styled } from '@rango-dev/ui/';\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\" color=\"$neutral600\">\n {t('Powered By')}\n </Typography>\n <StyledAnchor href=\"https://rango.exchange\" target=\"_blank\">\n <Logo xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 33.68 29\">\n <defs></defs>\n <g id=\"Layer_2\" data-name=\"Layer 2\">\n <g id=\"Layer_1-2\" data-name=\"Layer 1\">\n <path d=\"M33.68,18.05A17.93,17.93,0,0,0,28.34,5.29,18.31,18.31,0,0,0,15.45,0H13.54V7.41L6.07,0H.69L9.83,9.07H0V11A17.93,17.93,0,0,0,5.34,23.71,18.32,18.32,0,0,0,18.24,29h1.9V21.59l7.38,7.31h5.39l-9-9h9.82ZM17.37,16.16H12.49a1.93,1.93,0,0,0-1.35.55,1.89,1.89,0,0,0-.56,1.34,1.85,1.85,0,0,0,.56,1.33,1.93,1.93,0,0,0,1.35.55h3.84V25.1A14.43,14.43,0,0,1,8,21a14.21,14.21,0,0,1-4.1-8.2H21.2a1.86,1.86,0,0,0,.74-.13,1.92,1.92,0,0,0,.64-.4,2,2,0,0,0,.43-.62,1.88,1.88,0,0,0,0-1.47,2,2,0,0,0-.43-.62,1.92,1.92,0,0,0-.64-.4,1.86,1.86,0,0,0-.74-.13H17.35V3.9A14.43,14.43,0,0,1,25.64,8a14.19,14.19,0,0,1,4.11,8.2Zm2.12-5.27a1.43,1.43,0,0,1,.26-.83,1.52,1.52,0,0,1,.67-.56,1.55,1.55,0,0,1,.88-.08,1.51,1.51,0,0,1,.77.4,1.54,1.54,0,0,1,.42.77,1.41,1.41,0,0,1-.09.86,1.47,1.47,0,0,1-.55.68,1.56,1.56,0,0,1-.84.25,1.52,1.52,0,0,1-1.52-1.49Z\" />\n <path d=\"M21.7,11.57a.68.68,0,0,0-.12-.38.64.64,0,0,0-.31-.25.68.68,0,0,0-.75.15.61.61,0,0,0-.19.35.62.62,0,0,0,0,.4.67.67,0,0,0,.25.3.69.69,0,0,0,.39.12.7.7,0,0,0,.49-.2A.68.68,0,0,0,21.7,11.57Z\" />\n </g>\n </g>\n </Logo>\n <Typography variant=\"body2\">RANGO</Typography>\n </StyledAnchor>\n </Container>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { SearchParams } from '../constants/searchParams';\nimport { useBestRouteStore } from '../store/bestRoute';\n\nexport function SwithFromAndTo({ count }: { count: number }) {\n const firstRender = useRef(true);\n const [searchParams, setSearchParams] = useSearchParams();\n const outputAmount = useBestRouteStore.use.outputAmount();\n\n useEffect(() => {\n if (!firstRender.current) {\n const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);\n const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);\n const toChainString = searchParams.get(SearchParams.TO_CHAIN);\n const toTokenString = searchParams.get(SearchParams.TO_TOKEN);\n setSearchParams({\n ...(toChainString && { [SearchParams.FROM_CHAIN]: toChainString }),\n ...(toTokenString && { [SearchParams.FROM_TOKEN]: toTokenString }),\n ...(fromChainString && { [SearchParams.TO_CHAIN]: fromChainString }),\n ...(fromTokenString && { [SearchParams.TO_TOKEN]: fromTokenString }),\n ...(outputAmount && { [SearchParams.FROM_AMOUNT]: outputAmount.toString() }),\n });\n } else {\n firstRender.current = false;\n }\n }, [count]);\n\n return null;\n}\n","import { styled } from '@rango-dev/ui';\n\nexport const Footer = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n paddingTop: '$16',\n});\n","export const errorMessages = {\n genericServerError: 'Error connecting server, please reload the app and try again',\n};\n","import React from 'react';\nimport {\n SettingsIcon,\n Tooltip,\n styled,\n Button,\n HistoryIcon,\n RetryIcon,\n} from '@rango-dev/ui';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\nconst ButtonsContainer = styled('div', {\n display: 'flex',\n});\n\ninterface PropTypes {\n onClickRefresh?: () => void;\n}\n\nexport function HeaderButtons(props: PropTypes) {\n const { onClickRefresh } = props;\n const navigate = useNavigate();\n\n return (\n <ButtonsContainer>\n <Tooltip content=\"Refresh\">\n <Button\n variant=\"ghost\"\n onClick={onClickRefresh}\n disabled={!onClickRefresh}\n >\n <RetryIcon size={24} disabled={!onClickRefresh} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Transactions History\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.swaps)}\n >\n <HistoryIcon size={24} />\n </Button>\n </Tooltip>\n <Tooltip content=\"Settings\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(navigationRoutes.settings)}\n >\n <SettingsIcon size={24} />\n </Button>\n </Tooltip>\n </ButtonsContainer>\n );\n}\n","import {\n Alert,\n BestRoute,\n Button,\n styled,\n Typography,\n VerticalSwapIcon,\n Header,\n} from '@rango-dev/ui';\nimport React, { useEffect, useState } from 'react';\nimport { useInRouterContext, useNavigate } from 'react-router-dom';\nimport { TokenInfo } from '../components/TokenInfo';\nimport { fetchBestRoute, useBestRouteStore } from '../store/bestRoute';\nimport { BottomLogo } from '../components/BottomLogo';\nimport { SwithFromAndTo } from '../components/SwitchFromAndTo';\nimport { Footer } from '../components/Footer';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useMetaStore } from '../store/meta';\nimport { useWalletsStore } from '../store/wallets';\nimport { errorMessages } from '../constants/errors';\nimport {\n getSwapButtonState,\n getOutputRatio,\n hasLimitError,\n outputRatioHasWarning,\n canComputePriceImpact,\n LimitErrorMessage,\n getTotalFeeInUsd,\n hasHighFee,\n} from '../utils/swap';\nimport {\n numberToString,\n secondsToString,\n totalArrivalTime,\n} from '../utils/numbers';\nimport BigNumber from 'bignumber.js';\nimport { HeaderButtons } from '../components/HeaderButtons';\nimport { useUiStore } from '../store/ui';\nimport { getFormatedBestRoute } from '../utils/routing';\n\nconst Container = styled('div', {\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst FromContainer = styled('div', {\n position: 'relative',\n paddingBottom: '$12',\n});\n\nconst SwitchButtonContainer = styled('div', {\n position: 'absolute',\n bottom: '-12px',\n left: '50%',\n transform: 'translate(-50%, 10%)',\n});\n\nconst BestRouteContainer = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nconst Alerts = styled('div', {\n width: '100%',\n paddingTop: '$16',\n});\n\nexport function Home() {\n const isRouterInContext = useInRouterContext();\n const navigate = useNavigate();\n const [count, setCount] = useState(0);\n const fromChain = useBestRouteStore.use.fromChain();\n const fromToken = useBestRouteStore.use.fromToken();\n const toChain = useBestRouteStore.use.toChain();\n const toToken = useBestRouteStore.use.toToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const inputUsdValue = useBestRouteStore.use.inputUsdValue();\n const inputAmount = useBestRouteStore.use.inputAmount();\n const outputAmount = useBestRouteStore.use.outputAmount();\n const outputUsdValue = useBestRouteStore.use.outputUsdValue();\n const bestRoute = useBestRouteStore.use.bestRoute();\n const tokens = useMetaStore.use.meta().tokens;\n const fetchingBestRoute = useBestRouteStore.use.loading();\n const bestRouteError = useBestRouteStore.use.error();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const connectedWallets = useWalletsStore.use.connectedWallets();\n const setCurrentPage = useUiStore.use.setCurrentPage();\n const switchFromAndTo = useBestRouteStore.use.switchFromAndTo();\n\n const errorMessage =\n loadingMetaStatus === 'failed'\n ? errorMessages.genericServerError\n : bestRouteError;\n\n const needsToWarnEthOnPath = false;\n\n const showBestRoute =\n inputAmount && (!!bestRoute || fetchingBestRoute || bestRouteError);\n\n const outToInRatio = getOutputRatio(inputUsdValue, outputUsdValue);\n\n const highValueLoss = outputRatioHasWarning(inputUsdValue, outToInRatio);\n\n const { fromAmountRangeError, recommendation, swap } =\n LimitErrorMessage(bestRoute);\n\n const priceImpactCanNotBeComputed = !canComputePriceImpact(\n bestRoute,\n inputAmount,\n inputUsdValue,\n outputUsdValue\n );\n\n const swapButtonState = getSwapButtonState(\n loadingMetaStatus,\n connectedWallets,\n fetchingBestRoute,\n bestRoute,\n hasLimitError(bestRoute),\n highValueLoss,\n priceImpactCanNotBeComputed,\n needsToWarnEthOnPath,\n inputAmount\n );\n\n const totalFeeInUsd = getTotalFeeInUsd(bestRoute, tokens);\n\n const highFee = hasHighFee(totalFeeInUsd);\n\n useEffect(() => {\n setCurrentPage(navigationRoutes.home);\n\n return setCurrentPage.bind(null, '');\n }, []);\n\n return (\n <Container>\n <Header\n title=\"SWAP\"\n suffix={\n <HeaderButtons\n onClickRefresh={\n !!bestRoute || bestRouteError ? fetchBestRoute : undefined\n }\n />\n }\n />\n <FromContainer>\n <TokenInfo\n type=\"From\"\n chain={fromChain}\n token={fromToken}\n onAmountChange={setInputAmount}\n inputAmount={inputAmount}\n />\n <SwitchButtonContainer>\n <Button\n variant=\"ghost\"\n onClick={() => {\n switchFromAndTo();\n setCount((prev) => prev + 1);\n }}\n >\n <VerticalSwapIcon size={32} />\n {isRouterInContext && <SwithFromAndTo count={count} />}\n </Button>\n </SwitchButtonContainer>\n </FromContainer>\n <TokenInfo\n type=\"To\"\n chain={toChain}\n token={toToken}\n outputAmount={\n outputAmount ? new BigNumber(outputAmount) : new BigNumber(0)\n }\n outputUsdValue={outputUsdValue}\n />\n {showBestRoute && (\n <BestRouteContainer>\n <BestRoute\n error={bestRouteError}\n loading={fetchingBestRoute}\n data={getFormatedBestRoute(bestRoute)}\n totalFee={numberToString(totalFeeInUsd, 0, 2)}\n feeWarning={highFee}\n totalTime={secondsToString(totalArrivalTime(bestRoute))}\n />\n </BestRouteContainer>\n )}\n {(errorMessage || hasLimitError(bestRoute)) && (\n <Alerts>\n {errorMessage && <Alert type=\"error\">{errorMessage}</Alert>}\n {hasLimitError(bestRoute) && (\n <Alert type=\"error\" title={`${swap?.swapperId} Limit`}>\n <>\n <Typography variant=\"body2\">\n {`${fromAmountRangeError}, Yours: ${numberToString(\n swap?.fromAmount || null\n )} ${swap?.from.symbol}`}\n </Typography>\n <Typography variant=\"body2\">{recommendation}</Typography>\n </>\n </Alert>\n )}\n </Alerts>\n )}\n <Footer>\n <Button\n type=\"primary\"\n align=\"grow\"\n size=\"large\"\n disabled={swapButtonState.disabled}\n onClick={() => {\n if (swapButtonState.title === 'Connect Wallet')\n navigate(navigationRoutes.wallets);\n else {\n navigate(navigationRoutes.confirmSwap, { replace: true });\n }\n }}\n >\n {swapButtonState.title}\n </Button>\n <BottomLogo />\n </Footer>\n </Container>\n );\n}\n","import { LiquiditySourcesSelector } from '@rango-dev/ui';\nimport React from 'react';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { removeDuplicateFrom } from '../utils/common';\ninterface PropTypes {\n supportedSwappers?: string[];\n}\nexport function LiquiditySourcePage({ supportedSwappers }: PropTypes) {\n const swappers = useMetaStore.use.meta().swappers;\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const toggleLiquiditySource = useSettingsStore.use.toggleLiquiditySource();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const toggleAllLiquiditySources =\n useSettingsStore.use.toggleAllLiquiditySources();\n\n const { navigateBackFrom } = useNavigateBack();\n\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n\n return (\n <LiquiditySourcesSelector\n toggleAll={toggleAllLiquiditySources}\n list={\n supportedSwappers\n ? uniqueSwappersGroups.filter(\n (item) =>\n supportedSwappers.filter((s) => s === item.title).length > 0\n )\n : uniqueSwappersGroups\n }\n onChange={(liquiditySource) =>\n toggleLiquiditySource(liquiditySource.title)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.liquiditySources)}\n loadingStatus={loadingMetaStatus}\n />\n );\n}\n","import React from 'react';\nimport { BlockchainSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedChains?: string[];\n}\n\nexport function SelectChainPage(props: PropTypes) {\n const { type, supportedChains } = props;\n const blockchains = supportedChains\n ? useMetaStore.use\n .meta()\n .blockchains.filter((chain) => supportedChains.includes(chain.name))\n : useMetaStore.use.meta().blockchains;\n const loadingStatus = useMetaStore.use.loadingStatus();\n const fromChain = useBestRouteStore.use.fromChain();\n const toChain = useBestRouteStore.use.toChain();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setToChain = useBestRouteStore.use.setToChain();\n\n const { navigateBackFrom } = useNavigateBack();\n\n return (\n <BlockchainSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={blockchains}\n selected={type === 'from' ? fromChain : toChain}\n loadingStatus={loadingStatus}\n onChange={(chain) => {\n if (type === 'from') setFromChain(chain, true);\n else setToChain(chain, true);\n navigateBackFrom(navigationRoutes.fromChain);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromChain)}\n />\n );\n}\n","import React from 'react';\nimport { TokenSelector } from '@rango-dev/ui';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { Asset, Token } from 'rango-sdk';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { tokensAreEqual } from '../utils/wallets';\nimport { useMetaStore } from '../store/meta';\n\ninterface PropTypes {\n type: 'from' | 'to';\n supportedTokens?: Asset[];\n}\n\nexport interface TokenWithBalance extends Token {\n balance?: {\n amount: string;\n usdValue: string;\n };\n}\n\nexport function SelectTokenPage(props: PropTypes) {\n const { navigateBackFrom } = useNavigateBack();\n\n const { type, supportedTokens } = props;\n const sourceTokens = useBestRouteStore.use.sourceTokens();\n const destinationTokens = useBestRouteStore.use.destinationTokens();\n const supportedSourceTokens = supportedTokens\n ? sourceTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n )\n : sourceTokens;\n\n const supportedDestinationTokens = supportedTokens\n ? destinationTokens.filter((token) =>\n supportedTokens.some((supportedToken) =>\n tokensAreEqual(supportedToken, token)\n )\n )\n : destinationTokens;\n\n const fromToken = useBestRouteStore.use.fromToken();\n const toToken = useBestRouteStore.use.toToken();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToToken = useBestRouteStore.use.setToToken();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n\n return (\n <TokenSelector\n type={type === 'from' ? 'Source' : 'Destination'}\n list={type == 'from' ? supportedSourceTokens : supportedDestinationTokens}\n selected={type === 'from' ? fromToken : toToken}\n onChange={(token) => {\n if (type === 'from') setFromToken(token);\n else setToToken(token);\n navigateBackFrom(navigationRoutes.fromToken);\n }}\n onBack={navigateBackFrom.bind(null, navigationRoutes.fromToken)}\n loadingStatus={loadingMetaStatus}\n />\n );\n}\n","import React from 'react';\nimport { Settings } from '@rango-dev/ui';\nimport { useSettingsStore } from '../store/settings';\nimport { useMetaStore } from '../store/meta';\nimport { useNavigate } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { removeDuplicateFrom } from '../utils/common';\nimport {\n MAX_SLIPPAGE,\n MIN_SLIPPGAE,\n SLIPPAGES,\n} from '../constants/swapSettings';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\ninterface PropTypes {\n supportedSwappers?: string[];\n singleTheme?: boolean;\n}\nexport function SettingsPage({ supportedSwappers, singleTheme }: PropTypes) {\n const slippage = useSettingsStore.use.slippage();\n const setSlippage = useSettingsStore.use.setSlippage();\n const disabledLiquiditySources =\n useSettingsStore.use.disabledLiquiditySources();\n const customSlippage = useSettingsStore.use.customSlippage();\n const setCustomSlippage = useSettingsStore.use.setCustomSlippage();\n const theme = useSettingsStore.use.theme();\n const setTheme = useSettingsStore.use.setTheme();\n const swappers = useMetaStore.use.meta().swappers;\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n\n const infiniteApprove = useSettingsStore.use.infiniteApprove();\n const toggleInfiniteApprove = useSettingsStore.use.toggleInfiniteApprove();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n\n const uniqueSwappersGroups: Array<{\n title: string;\n logo: string;\n type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';\n selected: boolean;\n }> = [];\n removeDuplicateFrom(swappers.map((s) => s.swapperGroup))\n .map((swapperGroup) => {\n return swappers.find((s) => s.swapperGroup === swapperGroup);\n })\n .find((s) => {\n if (s) {\n for (const type of s.types) {\n uniqueSwappersGroups.push({\n title: s.swapperGroup,\n logo: s.logo,\n type,\n selected: !disabledLiquiditySources.includes(s.swapperGroup),\n });\n }\n }\n });\n supportedSwappers &&\n uniqueSwappersGroups.filter(\n (item) => supportedSwappers.filter((s) => s === item.title).length > 0\n );\n\n const supportedUniqueSwappersGroups = supportedSwappers\n ? uniqueSwappersGroups.filter(\n (item) => supportedSwappers.filter((s) => s === item.title).length > 0\n )\n : uniqueSwappersGroups;\n\n return (\n <Settings\n slippages={SLIPPAGES}\n selectedSlippage={slippage}\n onSlippageChange={(slippage) => setSlippage(slippage)}\n onLiquiditySourcesClick={() =>\n navigate(navigationRoutes.liquiditySources)\n }\n onBack={navigateBackFrom.bind(null, navigationRoutes.settings)}\n liquiditySources={supportedUniqueSwappersGroups}\n selectedLiquiditySources={supportedUniqueSwappersGroups.filter(\n (s) => s.selected\n )}\n singleTheme={singleTheme}\n customSlippage={customSlippage}\n onCustomSlippageChange={setCustomSlippage}\n minSlippage={MIN_SLIPPGAE}\n maxSlippage={MAX_SLIPPAGE}\n selectedTheme={theme}\n onThemeChange={setTheme}\n infiniteApprove={infiniteApprove}\n toggleInfiniteApprove={toggleInfiniteApprove}\n loadingStatus={loadingMetaStatus}\n />\n );\n}\n","import {\n Alert,\n SecondaryPage,\n styled,\n Wallet,\n WalletState,\n WalletInfo,\n} from '@rango-dev/ui';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { getlistWallet, sortWalletsBasedOnState } from '../utils/wallets';\nimport {\n WalletType,\n WalletTypes,\n detectMobileScreens,\n} from '@rango-dev/wallets-shared';\nimport { useWallets } from '@rango-dev/wallets-core';\n\nimport { useUiStore } from '../store/ui';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useTranslation } from 'react-i18next';\nimport { useMetaStore } from '../store/meta';\nimport { Spinner } from '@rango-dev/ui';\nimport { LoadingFailedAlert } from '@rango-dev/ui';\n\ninterface PropTypes {\n supportedWallets?: WalletType[];\n multiWallets: boolean;\n}\n\nconst ListContainer = styled('div', {\n display: 'grid',\n gap: '.5rem',\n gridTemplateColumns: ' repeat(2, minmax(0, 1fr))',\n alignContent: 'baseline',\n padding: '0.5rem',\n overflowY: 'auto',\n});\n\nconst LoaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n position: 'absolute',\n top: '50%',\n});\n\nconst AlertContainer = styled('div', {\n paddingBottom: '$16',\n});\nexport function WalletsPage({ supportedWallets, multiWallets }: PropTypes) {\n const { navigateBackFrom } = useNavigateBack();\n const { state, disconnect, getWalletInfo, connect } = useWallets();\n const wallets = getlistWallet(\n state,\n getWalletInfo,\n supportedWallets || Object.values(WalletTypes)\n );\n const walletsRef = useRef<WalletInfo[]>();\n\n let sortedWallets = detectMobileScreens()\n ? wallets.filter((wallet) => wallet.showOnMobile)\n : wallets;\n sortedWallets = sortWalletsBasedOnState(sortedWallets);\n const [walletErrorMessage, setWalletErrorMessage] = useState('');\n const toggleConnectWalletsButton =\n useUiStore.use.toggleConnectWalletsButton();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const { t } = useTranslation();\n\n const onSelectWallet = async (type: WalletType) => {\n const wallet = state(type);\n try {\n if (walletErrorMessage) setWalletErrorMessage('');\n if (wallet.connected) {\n await disconnect(type);\n } else {\n if (\n !multiWallets &&\n !!wallets.find((w) => w.state === WalletState.CONNECTED)\n ) {\n return;\n }\n await connect(type);\n }\n } catch (e) {\n setWalletErrorMessage('Error: ' + (e as any)?.message);\n }\n };\n const disconnectConnectingWallets = () => {\n const connectingWallets =\n walletsRef.current?.filter(\n (wallet) => wallet.state === WalletState.CONNECTING\n ) || [];\n for (const wallet of connectingWallets) {\n disconnect(wallet.type);\n }\n };\n useEffect(() => {\n toggleConnectWalletsButton();\n return () => {\n disconnectConnectingWallets();\n toggleConnectWalletsButton();\n };\n }, []);\n\n useEffect(() => {\n walletsRef.current = wallets;\n }, [wallets]);\n\n return (\n <SecondaryPage\n title={t('Select Wallet') || ''}\n textField={false}\n onBack={navigateBackFrom.bind(null, navigationRoutes.wallets)}\n >\n <>\n {walletErrorMessage && (\n <AlertContainer>\n <Alert type=\"error\" title={walletErrorMessage} />\n </AlertContainer>\n )}\n {loadingMetaStatus === 'loading' && (\n <LoaderContainer className=\"loader\">\n <Spinner size={24} />\n </LoaderContainer>\n )}\n {loadingMetaStatus === 'failed' && <LoadingFailedAlert />}\n <ListContainer>\n {loadingMetaStatus === 'success' &&\n sortedWallets.map((wallet, index) => (\n <Wallet\n {...wallet}\n key={`${index}-${wallet.type}`}\n onClick={onSelectWallet}\n />\n ))}\n </ListContainer>\n </>\n </SecondaryPage>\n );\n}\n","import { PendingSwap } from '@rango-dev/queue-manager-rango-preset';\n\nexport function timeSince(timeMillis: number): string {\n const seconds = Math.floor((new Date().getTime() - timeMillis) / 1000);\n let intervalType: string;\n\n let interval = Math.floor(seconds / 31536000);\n if (interval >= 1) {\n intervalType = 'year';\n } else {\n interval = Math.floor(seconds / 2592000);\n if (interval >= 1) {\n intervalType = 'month';\n } else {\n interval = Math.floor(seconds / 86400);\n if (interval >= 1) {\n intervalType = 'day';\n } else {\n interval = Math.floor(seconds / 3600);\n if (interval >= 1) {\n intervalType = 'hour';\n } else {\n interval = Math.floor(seconds / 60);\n if (interval >= 1) {\n intervalType = 'minute';\n } else {\n interval = seconds;\n intervalType = 'second';\n }\n }\n }\n }\n }\n\n if (interval > 1 || interval === 0) {\n intervalType += 's';\n }\n\n return interval + ' ' + intervalType;\n}\n\nexport function getSwapDate(pendingSwap: PendingSwap) {\n return pendingSwap.finishTime\n ? `${timeSince(parseInt(pendingSwap.finishTime))} ago`\n : `${timeSince(parseInt(pendingSwap.creationTime))} ago`;\n}\n","import React from 'react';\nimport { SecondaryPage, Spinner, Alert, styled } from '@rango-dev/ui';\n\nconst PlaceholderContainer = styled('div', { height: '450px' });\n\nexport const LoaderContainer = styled('div', {\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n paddingTop: '33%',\n flex: 1,\n});\n\ninterface PropTypes {\n requestId: string;\n loading: boolean;\n onBack: () => void;\n}\n\nexport function SwapDetailsPlaceholder(props: PropTypes) {\n const { requestId, loading, onBack } = props;\n\n return (\n <SecondaryPage title=\"Swap Details\" textField={false} onBack={onBack}>\n <PlaceholderContainer>\n {loading ? (\n <LoaderContainer>\n <Spinner size={24} />\n </LoaderContainer>\n ) : (\n <Alert\n type=\"secondary\"\n title={`Swap with request ID = ${requestId} not found.`}\n />\n )}\n </PlaceholderContainer>\n </SecondaryPage>\n );\n}\n","import React from 'react';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useManager } from '@rango-dev/queue-manager-react';\nimport { useNavigateBack } from '../hooks/useNavigateBack';\nimport { getPendingSwaps } from '../utils/queue';\nimport { SwapHistory, useCopyToClipboard } from '@rango-dev/ui';\nimport { useUiStore } from '../store/ui';\nimport {\n cancelSwap,\n PendingSwapNetworkStatus,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport {\n getCurrentBlockchainOfOrNull,\n getCurrentStep,\n getRelatedWalletOrNull,\n} from '@rango-dev/queue-manager-rango-preset';\nimport { getSwapDate } from '../utils/time';\nimport { useNavigate } from 'react-router-dom';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport {\n getLastConvertedTokenInFailedSwap,\n getSwapMessages,\n isNetworkStatusInWarningState,\n shouldRetrySwap,\n} from '../utils/swap';\n//@ts-ignore\nimport { t } from 'i18next';\nimport { SwapDetailsPlaceholder } from '../components/SwapDetailsPlaceholder';\nimport { getFormatedPendingSwap } from '../utils/routing';\n\nexport function SwapDetailsPage() {\n const selectedSwapRequestId = useUiStore.use.selectedSwapRequestId();\n const { canSwitchNetworkTo, connect } = useWallets();\n const retry = useBestRouteStore.use.retry();\n const navigate = useNavigate();\n const { navigateBackFrom } = useNavigateBack();\n const [isCopied, handleCopy] = useCopyToClipboard(2000);\n const { manager, state } = useManager();\n\n const pendingSwaps = getPendingSwaps(manager);\n const selectedSwap = pendingSwaps.find(\n ({ swap }) => swap.requestId === selectedSwapRequestId\n );\n\n const onCancel = () => {\n const swap = manager?.get(selectedSwap?.id!);\n if (swap) cancelSwap(swap);\n };\n const swap = selectedSwap?.swap;\n const loading = !state.loadedFromPersistor;\n\n if (!swap)\n return (\n <SwapDetailsPlaceholder\n requestId={selectedSwapRequestId || ''}\n loading={loading}\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n />\n );\n\n const currentStep = getCurrentStep(swap);\n\n const currentStepBlockchain = currentStep\n ? getCurrentBlockchainOfOrNull(swap, currentStep)\n : null;\n const currentStepWallet = currentStep\n ? getRelatedWalletOrNull(swap, currentStep)\n : null;\n const currentStepNetworkStatus = currentStep?.networkStatus;\n\n const swapMessages = getSwapMessages(swap, currentStep);\n\n const networkWarningState = isNetworkStatusInWarningState(currentStep);\n\n const swapDate = getSwapDate(swap);\n\n const shouldRetry = shouldRetrySwap(swap);\n\n const switchNetwork =\n !!currentStepBlockchain &&\n !!currentStepWallet?.walletType &&\n currentStepNetworkStatus ===\n PendingSwapNetworkStatus.WaitingForNetworkChange &&\n canSwitchNetworkTo(currentStepWallet?.walletType, currentStepBlockchain)\n ? connect.bind(null, currentStepWallet.walletType, currentStepBlockchain)\n : undefined;\n\n const lastConvertedTokenInFailedSwap =\n getLastConvertedTokenInFailedSwap(swap);\n\n return (\n <SwapHistory\n onBack={navigateBackFrom.bind(null, navigationRoutes.swapDetails)}\n /* TODO: It was temporarily removed to find a better solution*/\n /*\n previewInputs={\n <>\n <TokenPreview\n chain={{\n displayName: firstStep?.fromBlockchain || '',\n logo: firstStep?.fromBlockchainLogo || '',\n }}\n token={{\n symbol: firstStep?.fromSymbol || '',\n image: firstStep?.fromLogo || '',\n }}\n amount={fromAmount}\n label={t('From')}\n loadingStatus={'success'}\n />\n <Divider size={12} />\n <TokenPreview\n chain={{\n displayName: lastStep?.toBlockchain || '',\n logo: lastStep?.toBlockchainLogo || '',\n }}\n token={{\n symbol: lastStep?.toSymbol || '',\n image: lastStep?.toLogo || '',\n }}\n amount={toAmount}\n label={t('To')}\n loadingStatus={'success'}\n />\n </>\n }\n */\n pendingSwap={getFormatedPendingSwap(swap)}\n onCopy={handleCopy}\n isCopied={isCopied}\n onCancel={onCancel}\n shortMessage={swapMessages.shortMessage}\n detailedMessage={swapMessages.detailedMessage}\n currentStepBlockchain={currentStepBlockchain || ''}\n switchNetwork={switchNetwork}\n type={\n networkWarningState ? 'warning' : swap.extraMessageSeverity || undefined\n }\n date={swapDate}\n {...(shouldRetry && {\n onRetry: () => {\n retry(swap);\n setTimeout(() => {\n navigate(navigationRoutes.home);\n }, 0);\n },\n })}\n {...(lastConvertedTokenInFailedSwap && {\n lastConvertedTokenInFailedSwap: {\n blockchain: lastConvertedTokenInFailedSwap.blockchain,\n outputAmount: lastConvertedTokenInFailedSwap.outputAmount || '',\n symbol: lastConvertedTokenInFailedSwap.symbol,\n },\n })}\n />\n );\n}\n","import React from 'react';\nimport { useRoutes } from 'react-router-dom';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { ConfirmSwapPage } from '../pages/ConfirmSwapPage';\nimport { HistoryPage } from '../pages/HistoryPage';\nimport { Home } from '../pages/Home';\nimport { LiquiditySourcePage } from '../pages/LiquiditySourcesPage';\nimport { SelectChainPage } from '../pages/SelectChainPage';\nimport { SelectTokenPage } from '../pages/SelectTokenPage';\nimport { SettingsPage } from '../pages/SettingsPage';\nimport { WalletsPage } from '../pages/WalletsPage';\nimport { SwapDetailsPage } from '../pages/SwapDetailsPage';\nimport { WidgetConfig } from '../types';\n\nconst getAbsolutePath = (path: string) => path.replace('/', '');\n\ninterface PropTypes {\n config?: WidgetConfig;\n}\n\nexport function AppRoutes(props: PropTypes) {\n const { config } = props;\n\n return useRoutes([\n {\n path: navigationRoutes.home,\n element: <Home />,\n },\n {\n path: navigationRoutes.fromChain,\n element: (\n <SelectChainPage\n type=\"from\"\n supportedChains={config?.from?.blockchains}\n />\n ),\n },\n {\n path: navigationRoutes.toChain,\n element: (\n <SelectChainPage type=\"to\" supportedChains={config?.to?.blockchains} />\n ),\n },\n {\n path: navigationRoutes.fromToken,\n element: (\n <SelectTokenPage type=\"from\" supportedTokens={config?.from?.tokens} />\n ),\n },\n {\n path: navigationRoutes.toToken,\n element: (\n <SelectTokenPage type=\"to\" supportedTokens={config?.to?.tokens} />\n ),\n },\n {\n path: navigationRoutes.settings,\n element: <SettingsPage singleTheme= {config?.theme?.singleTheme} supportedSwappers={config?.liquiditySources} />,\n },\n {\n path: navigationRoutes.liquiditySources,\n element: (\n <LiquiditySourcePage supportedSwappers={config?.liquiditySources} />\n ),\n },\n { path: navigationRoutes.swaps, element: <HistoryPage /> },\n {\n path: navigationRoutes.swapDetails,\n element: <SwapDetailsPage />,\n },\n {\n path: navigationRoutes.wallets,\n element: (\n <WalletsPage\n supportedWallets={config?.wallets}\n multiWallets={\n typeof config?.multiWallets === 'undefined'\n ? true\n : config.multiWallets\n }\n />\n ),\n },\n {\n path: getAbsolutePath(navigationRoutes.confirmSwap),\n element: <ConfirmSwapPage />,\n },\n ]);\n}\n","import {\n Button,\n AddWalletIcon,\n Typography,\n styled,\n Spinner,\n Image,\n} from '@rango-dev/ui';\nimport React, { useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useWallets } from '@rango-dev/wallets-core';\nimport { navigationRoutes } from '../constants/navigationRoutes';\nimport { useUiStore } from '../store/ui';\nimport { AppRoutes } from './AppRoutes';\nimport { fetchingBalanceSelector, useWalletsStore } from '../store/wallets';\nimport {\n calculateWalletUsdValue,\n getSelectableWallets,\n tokensAreEqual,\n} from '../utils/wallets';\nimport { removeDuplicateFrom } from '../utils/common';\nimport { WidgetConfig } from '../types';\nimport { useTranslation } from 'react-i18next';\nimport { useBestRouteStore } from '../store/bestRoute';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\n\nconst Header = styled('div', {\n display: 'flex',\n width: '100%',\n justifyContent: 'end',\n '.balance': {\n display: 'flex',\n },\n});\n\nconst WalletImages = styled('div', {\n display: 'flex',\n paddingLeft: '12px',\n});\n\nconst WalletImageContainer = styled('div', {\n marginLeft: -15,\n marginRight: '$6',\n '& img': {\n borderRadius: '50%',\n },\n});\n\nexport type LayoutProps = {\n config?: WidgetConfig;\n};\n\nexport function Layout({ config }: LayoutProps) {\n const navigate = useNavigate();\n const { connectedWallets, selectedWallets } = useWalletsStore();\n const { getWalletInfo } = useWallets();\n const connectedWalletsImages = removeDuplicateFrom(\n getSelectableWallets(connectedWallets, selectedWallets, getWalletInfo).map(\n w => w.image\n )\n );\n const { blockchains, tokens } = useMetaStore.use.meta();\n const setFromChain = useBestRouteStore.use.setFromChain();\n const setFromToken = useBestRouteStore.use.setFromToken();\n const setToChain = useBestRouteStore.use.setToChain();\n const setToToken = useBestRouteStore.use.setToToken();\n const setInputAmount = useBestRouteStore.use.setInputAmount();\n const setAffiliateRef = useSettingsStore.use.setAffiliateRef();\n\n const totalBalance = calculateWalletUsdValue(connectedWallets);\n const connectWalletsButtonDisabled = useUiStore.use.connectWalletsButtonDisabled();\n const loadingMetaStatus = useMetaStore.use.loadingStatus();\n const fetchingBalance = useWalletsStore(fetchingBalanceSelector);\n\n const { t } = useTranslation();\n useEffect(() => {\n if (loadingMetaStatus === 'success') {\n const chain = blockchains.find(\n chain => chain.name === config?.to?.blockchain\n );\n const token = tokens.find(t =>\n tokensAreEqual(t, config?.to?.token || null)\n );\n setToChain(chain || null);\n setToToken(token || null);\n }\n }, [config?.to?.token, config?.to?.blockchain, loadingMetaStatus]);\n\n useEffect(() => {\n setInputAmount(config?.amount?.toString() || '');\n }, [config?.amount]);\n\n useEffect(() => {\n if (loadingMetaStatus === 'success') {\n const chain = blockchains.find(\n chain => chain.name === config?.from?.blockchain\n );\n const token = tokens.find(t =>\n tokensAreEqual(t, config?.from?.token || null)\n );\n\n setFromChain(chain || null);\n setFromToken(token || null);\n }\n }, [config?.from?.token, config?.from?.blockchain, loadingMetaStatus]);\n\n useEffect(() => {\n setAffiliateRef(config?.affiliateRef || null);\n }, [config?.affiliateRef]);\n return (\n <>\n <Header>\n <Button\n size=\"small\"\n suffix={<AddWalletIcon size={20} />}\n variant=\"ghost\"\n flexContent\n loading={loadingMetaStatus === 'loading'}\n disabled={loadingMetaStatus === 'failed'}\n onClick={() => {\n if (!connectWalletsButtonDisabled)\n navigate(navigationRoutes.wallets);\n }}\n prefix={\n connectedWalletsImages?.length ? (\n <WalletImages>\n {connectedWalletsImages.map((walletImage, index) => (\n <WalletImageContainer key={index}>\n <Image src={walletImage} size={24} />\n </WalletImageContainer>\n ))}\n </WalletImages>\n ) : null\n }\n >\n <div className=\"balance\">\n <Typography variant=\"body2\">\n {!connectedWallets?.length\n ? t('Connect Wallet')\n : `$${totalBalance || 0}`}\n </Typography>\n {fetchingBalance && <Spinner />}\n </div>\n </Button>\n </Header>\n <AppRoutes config={config} />\n </>\n );\n}\n","import { globalCss } from '@rango-dev/ui';\n\nexport const globalFont = (fontFamily: string) =>\n globalCss({\n '@import': [\n \"url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap')\",\n \"url('https://fonts.cdnfonts.com/css/times-new-roman')\",\n ],\n body: {\n fontFamily,\n },\n })();\n","import { useEffect, useRef } from 'react';\n\nexport default function usePrevious(value: string) {\n // The ref object is a generic container whose current property is mutable ...\n // ... and can hold any value, similar to an instance property on a class\n const ref = useRef<string>();\n // Store current value in ref\n useEffect(() => {\n ref.current = value;\n }, [value]); // Only re-run if value changes\n // Return previous value (happens before update in useEffect above)\n return ref.current;\n}\n","import { createTheme, generateRangeColors } from '@rango-dev/ui';\nimport { useState, useEffect, useLayoutEffect } from 'react';\nimport { useMetaStore } from '../store/meta';\nimport { useSettingsStore } from '../store/settings';\nimport { WidgetTheme } from '../types';\nimport usePrevious from './usePrevious';\n\nexport function useTheme({\n colors: themeColors,\n fontFamily = 'Roboto',\n borderRadius = 8,\n mode = 'auto',\n}: WidgetTheme) {\n const theme = useSettingsStore.use.theme();\n const fetchMeta = useMetaStore.use.fetchMeta();\n const setTheme = useSettingsStore.use.setTheme();\n const light = themeColors?.light;\n const dark = themeColors?.dark;\n const neutral = light?.neutral || '#fafafa';\n const background = light?.background || '#fff';\n const foreground = light?.foreground || '#000';\n\n const darkColors = {\n ...generateRangeColors('primary', 'dark', dark?.primary),\n ...generateRangeColors('error', 'dark', dark?.error),\n ...generateRangeColors('warning', 'dark', dark?.warning),\n ...generateRangeColors('success', 'dark', dark?.success),\n ...generateRangeColors('neutral', 'dark', dark?.neutral),\n surface: dark?.surface,\n background: dark?.background,\n foreground: dark?.foreground,\n };\n\n const lightColors = {\n surface: light?.surface || '#fff',\n ...generateRangeColors('primary', 'light', light?.primary || '#5FA425'),\n ...generateRangeColors('error', 'light', light?.error || '#FF0000'),\n ...generateRangeColors('warning', 'light', light?.warning || '#F5A623'),\n ...generateRangeColors('success', 'light', light?.success || '#0070F3'),\n ...generateRangeColors('neutral', 'light', neutral),\n background,\n foreground,\n };\n\n const customLightTheme = createTheme({\n colors: lightColors,\n radii: {\n 5: `${borderRadius}px`,\n },\n shadows: {\n s: `0px 3px 5px 3px ${light?.neutral || '#f0f2f5'} ,0px 6px 10px 3px ${\n light?.neutral || '#f0f2f5'\n }, 0px 1px 18px 3px ${light?.neutral || '#f0f2f5'}`,\n },\n });\n\n const customDarkTheme = createTheme({\n colors: {\n ...lightColors,\n ...generateRangeColors('neutral', 'dark', '#111111'),\n foreground: background,\n background: foreground,\n surface: '#000',\n ...JSON.parse(JSON.stringify(darkColors)),\n },\n radii: {\n 5: `${borderRadius}px`,\n },\n shadows: {\n s: `0px 3px 5px 3px ${dark?.neutral || '#222'}, 0px 6px 10px 3px ${\n dark?.neutral || '#222'\n }, 0px 1px 18px 3px ${dark?.neutral || '#222'}`,\n },\n });\n const [OSTheme, setOSTheme] = useState('light');\n\n useEffect(() => {\n (async () => {\n await fetchMeta();\n })();\n\n const switchTheme = (event: MediaQueryListEvent) => {\n if (event.matches) setOSTheme('dark');\n else setOSTheme('light');\n };\n\n if (\n window.matchMedia &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ) {\n setOSTheme('dark');\n }\n\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .addEventListener('change', switchTheme);\n return () => {\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .removeEventListener('change', switchTheme);\n };\n }, []);\n useEffect(() => {\n if (mode !== 'auto') setTheme(mode);\n }, [mode]);\n const prevFont = usePrevious(fontFamily);\n\n useLayoutEffect(() => {\n const { classList } = document.body;\n\n if (prevFont) classList.remove(`font_${prevFont.replace(/ /g, '')}`);\n classList.add(`font_${fontFamily.replace(/ /g, '')}`);\n }, [fontFamily]);\n\n const getActiveTheme = () => {\n if (theme === 'auto')\n return OSTheme === 'dark' ? customDarkTheme : customLightTheme;\n else return theme === 'dark' ? customDarkTheme : customLightTheme;\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, useMemo } from 'react';\nimport { Provider as ManagerProvider } from '@rango-dev/queue-manager-react';\nimport {\n makeQueueDefinition,\n SwapQueueContext,\n checkWaitingForNetworkChange,\n SwapProgressNotification,\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';\nimport { getConfig } from './utils/configs';\n\nfunction QueueManager(props: PropsWithChildren<{}>) {\n const {\n providers,\n getSigners,\n state,\n connect,\n canSwitchNetworkTo,\n getWalletInfo,\n } = useWallets();\n\n const swapQueueDef = useMemo(() => {\n return makeQueueDefinition({\n API_KEY: getConfig('API_KEY'),\n });\n }, []);\n const getOneOfWalletsDetails = useWalletsStore.use.getOneOfWalletsDetails();\n\n const { blockchains } = useMetaStore.use.meta();\n const connectedWallets = useWalletsStore.use.connectedWallets();\n\n const wallets = {\n blockchains: connectedWallets.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 const isMobileWallet = (walletType: WalletType): boolean =>\n !!getWalletInfo(walletType).mobileWallet;\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 notifier = (data: SwapProgressNotification) => {\n const lastStep = data.swap?.steps[data.swap.steps.length - 1];\n const outputAmount = data.step?.outputAmount || '';\n const step = data.step || lastStep;\n\n if (\n data.eventType === 'task_completed' ||\n (data.eventType === 'step_completed_with_output' &&\n lastStep?.id !== data.step?.id) ||\n !!outputAmount\n ) {\n const fromAccount = connectedWallets.find(\n (account) => account.chain === step?.fromBlockchain\n );\n const toAccount =\n step?.fromBlockchain !== step?.toBlockchain &&\n connectedWallets.find((wallet) => wallet.chain === step?.toBlockchain);\n\n fromAccount && getOneOfWalletsDetails(fromAccount);\n toAccount && getOneOfWalletsDetails(toAccount);\n }\n };\n\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 isMobileWallet,\n notifier,\n };\n\n return (\n <ManagerProvider\n queuesDefs={[swapQueueDef]}\n context={context}\n onPersistedDataLoaded={(manager) => {\n checkWaitingForNetworkChange(manager);\n }}\n isPaused={false}\n >\n {props.children}\n </ManagerProvider>\n );\n}\n\nexport default QueueManager;\n","import { SwapContainer } from '@rango-dev/ui';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { AppRouter } from './components/AppRouter';\nimport { useMetaStore } from './store/meta';\nimport { Events, Provider } from '@rango-dev/wallets-core';\nimport { allProviders } from '@rango-dev/provider-all';\nimport { EventHandler } from '@rango-dev/wallets-core/dist/wallet';\nimport { Network, WalletType } from '@rango-dev/wallets-shared';\nimport {\n prepareAccountsForWalletStore,\n walletAndSupportedChainsNames,\n} from './utils/wallets';\nimport { useWalletsStore } from './store/wallets';\nimport { Layout } from './components/Layout';\nimport { globalFont } from './globalStyles';\nimport { useTheme } from './hooks/useTheme';\nimport { isEvmBlockchain } from 'rango-sdk';\nimport {\n WidgetTheme,\n WidgetConfig,\n WidgetColors,\n BlockchainAndTokenConfig,\n} from './types';\nimport useSelectLanguage from './hooks/useSelectLanguage';\nimport './i18n';\nimport QueueManager from './QueueManager';\nimport { useUiStore } from './store/ui';\nimport { navigationRoutes } from './constants/navigationRoutes';\nimport { initConfig } from './utils/configs';\n\nexport { WidgetConfig, WidgetTheme, WidgetColors, BlockchainAndTokenConfig };\n\nexport type WidgetProps = {\n config?: WidgetConfig;\n};\n\nexport const Widget: React.FC<WidgetProps> = ({ config }) => {\n globalFont(config?.theme?.fontFamily || 'Roboto');\n\n const { activeTheme } = useTheme({ ...config?.theme });\n const { blockchains } = useMetaStore.use.meta();\n const disconnectWallet = useWalletsStore.use.disconnectWallet();\n const connectWallet = useWalletsStore.use.connectWallet();\n const { changeLanguage } = useSelectLanguage();\n const clearConnectedWallet = useWalletsStore.use.clearConnectedWallet();\n const [lastConnectedWalletWithNetwork, setLastConnectedWalletWithNetwork] =\n useState<string>('');\n const [disconnectedWallet, setDisconnectedWallet] = useState<WalletType>();\n const currentPage = useUiStore.use.currentPage();\n\n const evmBasedChainNames = blockchains\n .filter(isEvmBlockchain)\n .map((chain) => chain.name);\n\n useMemo(() => {\n if (config?.apiKey) {\n initConfig({\n API_KEY: config?.apiKey,\n });\n }\n }, [config]);\n\n const onUpdateState: EventHandler = (\n type,\n event,\n value,\n state,\n supportedChains\n ) => {\n if (event === Events.ACCOUNTS) {\n if (value) {\n const supportedChainNames: Network[] | null =\n walletAndSupportedChainsNames(supportedChains);\n const data = prepareAccountsForWalletStore(\n type,\n value,\n evmBasedChainNames,\n supportedChainNames\n );\n connectWallet(data);\n } else {\n disconnectWallet(type);\n }\n }\n if (event === Events.ACCOUNTS && state.connected) {\n const key = `${type}-${state.network}-${value}`;\n\n if (state.connected) {\n setLastConnectedWalletWithNetwork(key);\n }\n }\n\n if (event === Events.NETWORK && state.network) {\n const key = `${type}-${state.network}`;\n setLastConnectedWalletWithNetwork(key);\n }\n };\n let providers = allProviders();\n\n useEffect(() => {\n const wallets = config?.wallets;\n clearConnectedWallet();\n providers = !wallets\n ? allProviders()\n : allProviders().filter((provider) => {\n const type = provider.config.type;\n return wallets.find((w) => w === type);\n });\n }, [config?.wallets]);\n\n useEffect(() => {\n changeLanguage(config?.language || 'en');\n }, [config?.language]);\n\n return (\n <Provider\n allBlockChains={blockchains}\n providers={providers}\n onUpdateState={onUpdateState}\n >\n <div id=\"swap-container\" className={activeTheme}>\n <QueueManager>\n <SwapContainer fixedHeight={currentPage !== navigationRoutes.home}>\n <AppRouter\n lastConnectedWallet={lastConnectedWalletWithNetwork}\n disconnectedWallet={disconnectedWallet}\n clearDisconnectedWallet={() => {\n setDisconnectedWallet(undefined);\n }}\n >\n <Layout config={config} />\n </AppRouter>\n </SwapContainer>\n </QueueManager>\n </div>\n </Provider>\n );\n};\n"],"names":["ZERO","BigNumber","removeDuplicateFrom","array","Array","from","Set","areEqual","array1","array2","length","every","v","i","debounce","fn","time","timeoutId","wrapper","args","_len","_key","arguments","clearTimeout","setTimeout","secondsToString","s","seconds","toString","padStart","minutes","parseInt","numberToString","number","minDecimals","maxDecimals","undefined","n","roundingMode","maxI","toFixed","eq","gte","toFormat","Math","min","max","pow","isEqualTo","totalArrivalTime","data","result","swaps","reduce","a","b","estimatedTimeInSeconds","isPositiveNumber","text","parseFloat","searchParamsToToken","tokens","searchParams","chain","find","token","symbolAndAddress","split","symbol","address","blockchain","name","getBestRouteToTokenUsdPrice","bestRoute","to","usdPrice","isNumberOfSwapsChanged","route1","route2","route1Swaps","route2Swaps","isRouteSwappersUpdated","route1Swappers","map","swap","swapperId","route2Swappers","isRouteInternalCoinsUpdated","route1InternalCoins","route2InternalCoins","isRouteChanged","getRequiredBalanceOfWallet","selectedWallet","fee","relatedFeeStatus","item","wallets","wallet","toLowerCase","requiredAssets","isRouteParametersChanged","params","store","prevState","currentState","fromToken","toToken","fromChain","toChain","inputAmount","slippage","customSlippage","disabledLiquiditySources","infiniteApprove","getFormatedBestRoute","formatedSwaps","fromAmount","toAmount","getFormatedPendingSwap","pendingSwap","formatedSteps","steps","step","feeInUsd","outputAmount","expectedOutputAmountHumanReadable","getBestRouteStatus","loading","error","createSelectors","_store","use","k","Object","keys","getState","RANGO_PUBLIC_API_KEY","configs","API_KEY","getConfig","initConfig","nextConfigs","clonedConfigs","structuredClone","JSON","parse","stringify","rango","httpService","RangoClient","SLIPPAGES","DEFAULT_SLIPPAGE","HIGH_SLIPPAGE","MAX_SLIPPAGE","MIN_SLIPPGAE","useMetaStore","create","set","meta","blockchains","popularTokens","swappers","loadingStatus","fetchMeta","response","getAllMetadata","chainThatHasTokenInMetaResponse","t","enabledChains","filter","enabled","includes","sort","useSettingsStore","persist","subscribeWithSelector","affiliateRef","theme","setSlippage","setCustomSlippage","setAffiliateRef","toggleAllLiquiditySources","state","swappersGroup","swapper","swapperGroup","toggleInfiniteApprove","toggleLiquiditySource","liquiditySource","concat","setTheme","getStateWallet","connected","WalletStatus","CONNECTED","connecting","CONNECTING","installed","NOT_INSTALLED","DISCONNECTED","excludedWallets","WalletTypes","LEAP","getlistWallet","getWalletInfo","list","type","img","image","installLink","showOnMobile","detectInstallLink","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","connectedWallets","selectedWallets","selectableWallets","connectedWallet","selected","getBalanceFromWallet","selectedChainWallets","balances","balance","amount","isAccountAndWalletMatched","makeBalanceFor","retrivedBalance","blockChain","explorerUrl","tokenBalance","asset","ticker","rawAmount","decimal","decimals","shiftedBy","logo","getUsdPrice","resetConnectedWalletState","calculateWalletUsdValue","uniqueAccountAddresses","uniqueBalane","acc","current","findIndex","modifiedWalletBlockchains","modifiedWalletBlockchain","has","add","accountAddress","total","flatMap","multipliedBy","plus","numberWithThousandSeperator","parts","replace","join","sortTokens","walletConnected","some","isSecondaryCoin","tokenA","tokenB","usdValue","allTokens","toUpperCase","isExperimentalChain","cosmosExperimentalChainInfo","getCosmosExperimentalChainInfo","entries","_ref","isCosmosBlockchain","getKeplrCompatibleConnectedWallets","connectedWalletTypes","KEPLR_COMPATIBLE_WALLETS","compatibleWallet","getTokensWithBalance","_ref2","otherProps","tokenAmount","tokenUsdValue","getSortedTokens","otherChainTokens","fromChainEqueulsToToChain","filteredTokens","tokensAreEqual","getDefaultToken","sortedTokens","otherToken","selectedToken","firstToken","secondToken","sortWalletsBasedOnState","Number","getOutputRatio","inputUsdValue","outputUsdValue","lte","div","minus","outputRatioHasWarning","outputRatio","hasLimitError","minimum","fromAmountMinValue","maximum","fromAmountMaxValue","isExclusive","fromAmountRestrictionType","gt","lt","LimitErrorMessage","fromAmountRangeError","recommendation","getSwapButtonState","loadingMetaStatus","highValueLoss","priceImpactCanNotBeComputed","needsToWarnEthOnPath","title","disabled","hasWarning","canComputePriceImpact","requiredWallets","getUsdFeeOfStep","totalFeeInUsd","expenseType","unitPrice","getTotalFeeInUsd","totalFee","hasHighFee","getMinRequiredSlippage","slippages","recommendedSlippage","hasProperSlippage","userSlippage","minRequiredSlippage","createBestRouteRequestBody","initialRoute","selectedWalletsMap","chainAndAccounts","addresses","checkPrerequisites","filteredBlockchains","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","calcOutputUsdValue","tokenPrice","isNetworkStatusInWarningState","pendingSwapStep","networkStatus","PendingSwapNetworkStatus","NetworkChanged","getSwapMessages","currentStep","textForRemove","message","extraMessage","detailedMessage","extraMessageDetail","networkStatusExtraMessageDetail","networkWarningState","networkStatusExtraMessage","WaitingForConnectingWallet","WaitingForQueue","WaitingForNetworkChange","isRpc","shortMessage","content","long","getLastConvertedTokenInFailedSwap","resultToken","status","lastSuccessStep","slice","reverse","toBlockchain","toSymbol","toSymbolAddress","shouldRetrySwap","finishTime","Date","getTime","useWalletsStore","get","connectWallet","getOneOfWalletsDetails","disconnectWallet","initSelectedWallets","requiredChains","useBestRouteStore","anyWalletSelected","firstWalletWithMatchedChain","setSelectedWallet","clearConnectedWallet","getWalletsDetails","Error","subscribe","setState","sourceTokens","destinationTokens","sourceTokensWithBalance","destinationTokensWithBalance","equalityFn","shallow","fetchingBalanceSelector","getUsdValue","setBestRoute","resetRoute","setFromChain","setDefaultToken","setFromToken","setToChain","setToToken","setInputAmount","retry","failedIndex","firstStep","lastStep","fromBlockchain","fromSymbol","fromSymbolAddress","sortedSourceTokens","sortedDestinationTokens","switchFromAndTo","bestRouteStore","settingsStore","abortController","fetchBestRoute","abort","AbortController","getBestRoute","signal","then","res","catch","code","debouncedFetchBestRoute","bestRouteParamsListener","SearchParams","navigationRoutes","home","settings","liquiditySources","confirmSwap","swapDetails","useUiStore","connectWalletsButtonDisabled","selectedSwapRequestId","currentPage","toggleConnectWalletsButton","setSelectedSwap","requestId","setCurrentPage","path","UpdateUrl","firstRender","useRef","setSearchParams","useSearchParams","location","useLocation","firstRenderSearchParams","search","searchParamsRef","useEffect","createSearchParams","value","key","pathname","fromChainString","fromTokenString","toChainString","toTokenString","FROM_CHAIN","FROM_TOKEN","TO_CHAIN","TO_TOKEN","FROM_AMOUNT","AppRouter","children","props","isRouterInContext","useInRouterContext","Router","Fragment","MemoryRouter","evmChains","isEvmBlockchain","useQueueManager","lastConnectedWallet","clearDisconnectedWallet","disconnectedWallet","notifier","React","useNavigateBack","navigate","useNavigate","navigateBackFrom","currentRoute","window","history","idx","Box","styled","display","flexDirection","width","overflow","Container","boxSizing","borderRadius","padding","variants","filled","backgroundColor","outlined","border","defaultVariants","justifyContent","alignItems","minHeight","paddingLeft","whiteSpace","textOverflow","ImagePlaceholder","height","OutputContainer","windth","position","paddingRight","TokenPreview","useTranslation","ItemSuffix","style","InfoCircleIcon","color","size","className","Typography","variant","label","Button","prefix","Image","src","suffix","align","displayName","Divider","direction","fontSize","RoutesOverview","routes","isLast","ChevronRightIcon","GasIcon","ConfirmSwapErrorTypes","ConfirmSwapWarningTypes","useConfirmSwap","proceedAnywayRef","confiremedRouteRef","abortControllerRef","setLoading","useState","errors","setErrors","warnings","setWarnings","swapSettings","disabledSwappersGroups","newSwap","calculatePendingSwap","confiremedRoute","requestAmount","NO_ROUTE","confirmSwapState","routeChanged","newRouteOutputUsdValue","ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS","ROUTE_AND_OUTPUT_AMOUNT_UPDATED","ROUTE_COINS_UPDATED","ROUTE_UPDATED","ROUTE_SWAPPERS_UPDATED","balanceWarnings","enoughBalance","INSUFFICIENT_BALANCE","messages","INSUFFICIENT_SLIPPAGE","noErrors","noWarnings","REQUEST_FAILED","ChangeSlippageButton","onClick","StyledMessage","MinRequiredSlippage","List","margin","showListStyle","true","ListItem","listStyleType","listStylePosition","Message","BalanceErrors","warning","index","ConfirmSwapErrors","ConfirmSwapWarnings","HighSlippageWarning","selectedSlippage","Alert","footer","ConfirmSwapExtraMessages","highSlippage","PercentageChange","showPercentageChange","ConfirmSwapPage","fetchingBestRoute","fetchingBestRouteError","dbErrorMessage","setDbErrorMessage","bestRouteloadingStatus","manager","useManager","fetchingConfirmedRoute","showHighSlippageWarning","connect","useWallets","confirmDisabled","handleConnectChain","ConfirmSwap","onBack","bind","onConfirm","id","e","onChange","previewInputs","blockchainLogo","previewRoutes","extraMessages","LoadingFailedAlert","confirmButtonTitle","getPendingSwaps","getAll","q","storage","getStorage","creationTime","groupSwapsByDate","output","Map","now","dayjs","swapDate","isSame","values","HistoryPage","pendingSwaps","loadedFromPersistor","History","groupBy","onSwapClick","Options","TokenInfo","tokenBalanceReal","AngleDownIcon","TextField","autoFocus","placeholder","right","bottom","event","onAmountChange","target","paddingTop","Logo","fill","StyledAnchor","textDecoration","BottomLogo","href","xmlns","viewBox","d","SwithFromAndTo","count","Footer","errorMessages","genericServerError","ButtonsContainer","HeaderButtons","onClickRefresh","Tooltip","RetryIcon","HistoryIcon","SettingsIcon","FromContainer","paddingBottom","SwitchButtonContainer","left","transform","BestRouteContainer","Alerts","Home","setCount","bestRouteError","errorMessage","showBestRoute","outToInRatio","swapButtonState","highFee","Header","prev","VerticalSwapIcon","BestRoute","feeWarning","totalTime","LiquiditySourcePage","supportedSwappers","uniqueSwappersGroups","types","LiquiditySourcesSelector","toggleAll","SelectChainPage","BlockchainSelector","SelectTokenPage","supportedTokens","supportedSourceTokens","supportedToken","supportedDestinationTokens","TokenSelector","SettingsPage","singleTheme","supportedUniqueSwappersGroups","Settings","onSlippageChange","onLiquiditySourcesClick","selectedLiquiditySources","onCustomSlippageChange","minSlippage","maxSlippage","selectedTheme","onThemeChange","ListContainer","gap","gridTemplateColumns","alignContent","overflowY","LoaderContainer","top","AlertContainer","WalletsPage","supportedWallets","multiWallets","disconnect","walletsRef","sortedWallets","detectMobileScreens","walletErrorMessage","setWalletErrorMessage","onSelectWallet","w","WalletState","disconnectConnectingWallets","connectingWallets","SecondaryPage","textField","Spinner","Wallet","timeSince","timeMillis","floor","intervalType","interval","getSwapDate","PlaceholderContainer","flex","SwapDetailsPlaceholder","SwapDetailsPage","canSwitchNetworkTo","isCopied","handleCopy","useCopyToClipboard","selectedSwap","onCancel","cancelSwap","getCurrentStep","currentStepBlockchain","getCurrentBlockchainOfOrNull","currentStepWallet","getRelatedWalletOrNull","currentStepNetworkStatus","swapMessages","shouldRetry","switchNetwork","lastConvertedTokenInFailedSwap","SwapHistory","onCopy","extraMessageSeverity","date","onRetry","getAbsolutePath","AppRoutes","config","useRoutes","element","WalletImages","WalletImageContainer","marginLeft","marginRight","Layout","connectedWalletsImages","totalBalance","fetchingBalance","AddWalletIcon","flexContent","walletImage","globalFont","fontFamily","globalCss","body","usePrevious","ref","useTheme","colors","themeColors","mode","light","dark","neutral","background","foreground","darkColors","generateRangeColors","primary","success","surface","lightColors","customLightTheme","createTheme","radii","shadows","customDarkTheme","OSTheme","setOSTheme","switchTheme","matches","matchMedia","addEventListener","removeEventListener","prevFont","useLayoutEffect","classList","document","remove","getActiveTheme","activeTheme","useSelectLanguage","i18n","currentLanguage","language","changeLanguage","languages","Backend","LanguageDetector","initReactI18next","init","resources","en","translation","tr","fallbackLng","debug","whitelist","QueueManager","providers","getSigners","swapQueueDef","useMemo","makeQueueDefinition","isMobileWallet","mobileWallet","allBlockchains","blockchainsObj","getSupportedChainNames","allProviders","eventType","fromAccount","toAccount","context","evmNetworkChainInfo","convertEvmBlockchainMetaToEvmChainInfo","ManagerProvider","queuesDefs","onPersistedDataLoaded","checkWaitingForNetworkChange","isPaused","Widget","lastConnectedWalletWithNetwork","setLastConnectedWalletWithNetwork","setDisconnectedWallet","evmBasedChainNames","apiKey","onUpdateState","Events","ACCOUNTS","NETWORK","provider","Provider","allBlockChains","SwapContainer","fixedHeight"],"mappings":"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"}