{"version":3,"file":"static/chunks/6532-e551cf692afc7929.js","mappings":"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","sources":["webpack://_N_E/./helper/fetchHelper/getAllChainInfo.ts","webpack://_N_E/./helper/liquiditySelectorHelper.ts","webpack://_N_E/./hooks/globalState/useOnNetworkAccountChange.ts","webpack://_N_E/./hooks/globalState/useWarningTokens.ts","webpack://_N_E/./hooks/useCurrentChainPositions.ts","webpack://_N_E/./hooks/useFetch/useChainsWithNonEmptyPositions.ts","webpack://_N_E/./hooks/useFetchAllChainUserTriggers.ts","webpack://_N_E/./hooks/useFetchAllChainsPositions.ts","webpack://_N_E/./hooks/useFetchMarketPrice.ts","webpack://_N_E/<anon>"],"sourcesContent":["import { ApertureSupportedChainId } from \"@aperture_finance/uniswap-v3-automation-sdk\";\n\nexport async function fetchInfoForAllChains<T>(\n chains: Iterable<number | string>,\n fetchPositionCallback: (chainId: ApertureSupportedChainId) => Promise<T>\n): Promise<{ [chainId: number]: T }> {\n const allInfo: { [chainId: number]: T } = {};\n await Promise.all(\n Array.from(chains).map(async (chainId) => {\n const parsedChainId = parseInt(chainId.toString());\n try {\n allInfo[parsedChainId] = await fetchPositionCallback(\n parsedChainId as ApertureSupportedChainId\n );\n } catch (e) {\n console.error(\n `Error: Failed to fetch data for chain ${parsedChainId}:`,\n (e as Error).message\n );\n }\n })\n );\n return allInfo;\n}\n","import { Pool, TickMath } from \"@aperture_finance/uniswap-v3-sdk\";\n\nexport type plusOrMinusType =\n | \"getDecrementLower\"\n | \"getIncrementLower\"\n | \"getDecrementUpper\"\n | \"getIncrementUpper\";\n\nexport function plusOrMinusTick(\n actionType: plusOrMinusType,\n tickLower: number | undefined | null,\n tickUpper: number | undefined | null,\n invert: boolean,\n tickSpacing: number | undefined,\n pool?: Pool | undefined | null\n) {\n switch (actionType) {\n case \"getDecrementLower\":\n return invert\n ? getNewTick(tickUpper, \"Increment\", tickSpacing, pool)\n : getNewTick(tickLower, \"Decrement\", tickSpacing, pool);\n case \"getIncrementLower\":\n return invert\n ? getNewTick(tickUpper, \"Decrement\", tickSpacing, pool)\n : getNewTick(tickLower, \"Increment\", tickSpacing, pool);\n case \"getDecrementUpper\":\n return invert\n ? getNewTick(tickLower, \"Increment\", tickSpacing, pool)\n : getNewTick(tickUpper, \"Decrement\", tickSpacing, pool);\n case \"getIncrementUpper\":\n return invert\n ? getNewTick(tickLower, \"Decrement\", tickSpacing, pool)\n : getNewTick(tickUpper, \"Increment\", tickSpacing, pool);\n default:\n return null;\n }\n}\n\nexport function getNewTick(\n tickValue: number | undefined | null,\n type: \"Decrement\" | \"Increment\",\n tickSpacing: number | undefined,\n pool?: Pool | undefined | null,\n rangeWidth: number = 1\n) {\n if (pool && tickSpacing) {\n const startingTick =\n typeof tickValue === \"number\" ? tickValue : pool.tickCurrent;\n let newTick =\n startingTick +\n (type === \"Decrement\" ? -1 : 1) * tickSpacing * Math.ceil(rangeWidth / 2);\n\n if (newTick < TickMath.MIN_TICK) newTick += tickSpacing;\n else if (newTick > TickMath.MAX_TICK) newTick -= tickSpacing;\n\n return newTick;\n }\n return null;\n}\n\nexport const TICK_MULTIPLIER = 1.0001;\n\nexport function percentageToOffsetTick(\n percentage: number,\n minPercentage: number,\n maxPercentage?: number\n) {\n percentage = Math.round(percentage * 100) / 100;\n let target = 0;\n if (percentage <= minPercentage) {\n target = Math.round((100 + minPercentage) * 100) / 1e4 + 1 / 10e6;\n } else if (maxPercentage !== undefined && percentage >= maxPercentage) {\n target = Math.round((100 + maxPercentage) * 100) / 1e4;\n } else {\n target = Math.round((100 + percentage) * 100) / 1e4;\n }\n\n return Math.round(Math.log(target) / Math.log(TICK_MULTIPLIER));\n}\n\nexport function offsetTickToPercentage(offsetTick: number, abs?: boolean) {\n let target = TICK_MULTIPLIER ** offsetTick * 1e4 - 1e4;\n if (abs) {\n target = Math.abs(target);\n }\n return (Math.round(target) / 100).toFixed(2);\n}\n","import { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { useEventCallback } from \"@/hooks/useEventCallback\";\nimport { useUpdateEffect } from \"ahooks\";\nimport { useEffect } from \"react\";\nimport { useAccount } from \"wagmi\";\n\nexport const useOnNetworkAccountChange = (callback: () => void) => {\n const { address } = useAccount();\n const { ammEnum, networkId, isChainSupported } = useNetwork();\n const cb = useEventCallback(callback);\n useUpdateEffect(() => {\n cb();\n }, [address, networkId, ammEnum]);\n\n useEffect(() => {\n if (!isChainSupported) {\n cb();\n }\n }, [cb, isChainSupported]);\n};\n","import { useAllChainStateStore } from \"@/components/GlobalStore\";\nimport { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { getPublicClient } from \"@/helper/getPublicClient\";\nimport { viem } from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { Token } from \"@uniswap/sdk-core\";\nimport { Address } from \"viem\";\nimport { useEventCallback } from \"../useEventCallback\";\nimport { useFetchUserTokensBalance } from \"../useFetchUserTokensBalance\";\n\nexport type TMutateWarningTokens = (\n chainId: number,\n warningTokens: Token | Token[]\n) => Promise<void>;\n\nexport const useMutateWarningTokens = () => {\n const { networkId } = useNetwork();\n const { mutate: tokenBalanceMutate } = useFetchUserTokensBalance();\n const { updateTokenMap } = useAllChainStateStore();\n\n const mutateWarningTokens: TMutateWarningTokens = useEventCallback(\n async (chainId, token) => {\n const tokens = Array.isArray(token) ? token : [token];\n\n updateTokenMap({\n chainId: chainId,\n tokens,\n });\n\n if (chainId === networkId) {\n await tokenBalanceMutate();\n }\n }\n );\n\n const mutateWarningTokensByAddress = useEventCallback(\n async (chainId: number, tokenAddress: Address | Address[]) => {\n const addresses = Array.isArray(tokenAddress)\n ? tokenAddress\n : [tokenAddress];\n\n const tokens = await viem.getBulkTokens(\n addresses,\n chainId,\n getPublicClient(chainId),\n undefined,\n true\n );\n\n return mutateWarningTokens(chainId, tokens);\n }\n );\n\n return {\n mutateWarningTokens,\n mutateWarningTokensByAddress,\n };\n};\n","import { useAllChainStateStore } from \"@/components/GlobalStore\";\nimport { IRawTokenMap } from \"@/components/GlobalStore/allChain/types\";\nimport { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { sortActivePositions } from \"@/helper/positionHelper\";\nimport { AmmEnum } from \"@ui/index\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { Address } from \"viem\";\nimport { useAccount } from \"wagmi\";\nimport { useCurrentChainToken } from \"./globalState/useCurrentChainToken\";\nimport { useMutateWarningTokens } from \"./globalState/useWarningTokens\";\nimport { getMissingTokens } from \"./useFetchAllChainsPositions\";\n\nexport const useCurrentChainPositions = (walletAddress: Address) => {\n const { networkId, ammEnum } = useNetwork();\n const { currentTokenMap } = useCurrentChainToken();\n\n const {\n state: { activePositionMap },\n } = useAllChainStateStore();\n\n const currentActivePositionMap = activePositionMap[networkId];\n\n const { positionInitializer } = usePositionInitializer();\n\n // initialize current position map\n useEffect(() => {\n positionInitializer(ammEnum, networkId, walletAddress, currentTokenMap);\n }, [networkId, ammEnum, walletAddress, positionInitializer, currentTokenMap]);\n\n return useMemo(() => {\n if (!currentActivePositionMap)\n return {\n positionMap: {},\n positionList: [],\n isLoading: true,\n };\n\n const positionList = sortActivePositions(\n Object.values(currentActivePositionMap)\n );\n return {\n positionMap: currentActivePositionMap,\n positionList,\n isLoading: false,\n };\n }, [currentActivePositionMap]);\n};\n\nexport const useMutatePositionMap = () => {\n const { networkId, ammEnum } = useNetwork();\n const { address: walletAddress } = useAccount();\n const { updatePositionMap } = useAllChainStateStore();\n\n const mutatePositionMap = useCallback(() => {\n updatePositionMap({\n amm: ammEnum,\n chainId: networkId,\n walletAddress,\n });\n }, [ammEnum, networkId, updatePositionMap, walletAddress]);\n\n return {\n mutatePositionMap,\n };\n};\n\nexport const usePositionInitializer = () => {\n const { mutateWarningTokensByAddress } = useMutateWarningTokens();\n const { updatePositionMap } = useAllChainStateStore();\n\n const positionInitializer = useCallback(\n async (\n amm: AmmEnum,\n chainId: number,\n walletAddress: Address,\n currentTokenMap: IRawTokenMap\n ) => {\n if (!amm || !chainId || !walletAddress || !currentTokenMap) return;\n\n const positionMap = await updatePositionMap({\n amm,\n chainId,\n walletAddress,\n isInitialization: true,\n });\n\n if (!positionMap) return; // already initialized\n\n const missingTokenAddresses = getMissingTokens(\n positionMap,\n currentTokenMap\n );\n\n if (missingTokenAddresses.length > 0) {\n mutateWarningTokensByAddress(chainId, missingTokenAddresses);\n }\n },\n [mutateWarningTokensByAddress, updatePositionMap]\n );\n\n return {\n positionInitializer,\n };\n};\n","import { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\n\nimport { fetchInfoForAllChains } from \"@/helper/fetchHelper/getAllChainInfo\";\nimport { getNetworkId, getValidChains } from \"@/utils/networkHelper\";\nimport {\n ApertureSupportedChainId,\n viem,\n} from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { getAmmEnum, getSupportedChainsByAmm } from \"@ui/utils\";\nimport useSWR from \"swr/immutable\";\nimport { Address } from \"viem\";\n\nexport function useChainsWithNonEmptyPositions(walletAddress: Address) {\n const { data, isLoading } = useFetchAllChainsNumberOfPositions(walletAddress);\n const validChains = getValidChains();\n const chainsWithPositions: ApertureSupportedChainId[] =\n !isLoading && data\n ? Object.entries(data)\n .reduce((acc, [chainId, positionNumber]) => {\n if (validChains.includes(parseInt(chainId)) && positionNumber > 0)\n acc.push(parseInt(chainId));\n return acc;\n }, [])\n .flat()\n : undefined;\n return {\n data: chainsWithPositions,\n isLoading: isLoading || !chainsWithPositions,\n };\n}\n\nfunction useFetchAllChainsNumberOfPositions(walletAddress: Address) {\n const { amm, isChainSupported } = useNetwork();\n const showFetch = amm && walletAddress && isChainSupported;\n\n return useSWR(\n showFetch\n ? `user-chains-with-positions-number-${amm.name}-${walletAddress}`\n : null,\n () => {\n const chainIdsList = getSupportedChainsByAmm(amm).map((chain) =>\n getNetworkId(chain)\n );\n\n return fetchInfoForAllChains(chainIdsList, async (chainId) => {\n return viem.getNumberOfPositionsOwnedByOwner(\n walletAddress,\n chainId,\n getAmmEnum(amm)\n );\n });\n }\n );\n}\n","import { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { getTriggers } from \"@/helper/triggerHelper\";\nimport {\n ApertureSupportedChainId,\n ListTriggerResponse,\n} from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { BasicInfo, getAmmEnum } from \"@ui/utils\";\nimport useSWR from \"swr/immutable\";\nimport { Address } from \"viem\";\nimport { useAccount } from \"wagmi\";\nimport { useChainsWithNonEmptyPositions } from \"./useFetch/useChainsWithNonEmptyPositions\";\n\nexport function useFetchAllChainUserTriggers(limitOrder?: boolean) {\n const { address: walletAddress, isConnected } = useAccount();\n const { amm, isChainSupported, networkId } = useNetwork();\n const { data: chainsWithPositions } =\n useChainsWithNonEmptyPositions(walletAddress);\n\n const showFetch =\n isConnected &&\n amm &&\n walletAddress &&\n isChainSupported &&\n chainsWithPositions?.length > 0;\n\n const key = showFetch\n ? `user-all-chains-triggers-${\n amm.name\n }-${walletAddress}-${chainsWithPositions.join(\"-\")}-lo:${!!limitOrder}`\n : null;\n\n return useSWR(\n key,\n async () => {\n // First fetch current chain data\n let initialData: { [chainId: number]: ListTriggerResponse } = {};\n\n if (\n networkId &&\n chainsWithPositions?.includes(networkId as ApertureSupportedChainId)\n ) {\n try {\n const currentChainTriggers = await getTriggers(\n getAmmEnum(amm),\n walletAddress!,\n networkId as ApertureSupportedChainId,\n !!limitOrder\n );\n initialData[networkId] = currentChainTriggers;\n } catch (e) {\n console.log(\n \"Error: Failed to fetch current chain triggers \",\n (e as Error).message\n );\n }\n }\n\n // Return current chain data immediately\n const otherChainIds =\n chainsWithPositions?.filter((id) => id !== networkId) ?? [];\n\n // Fetch other chains in the background\n getAllOtherChainTriggers(\n amm,\n walletAddress!,\n otherChainIds,\n !!limitOrder,\n key,\n initialData\n );\n\n return initialData;\n },\n {\n // Keep previous data while revalidating\n keepPreviousData: true,\n }\n );\n}\n\nconst getAllOtherChainTriggers = async (\n amm: BasicInfo,\n walletAddress: Address,\n chainIds: ApertureSupportedChainId[],\n isLimitOrder: boolean,\n cacheKey: string,\n initialData: { [chainId: number]: ListTriggerResponse }\n) => {\n try {\n const otherChainsData = await Promise.all(\n chainIds.map(async (chainId) => {\n try {\n const triggers = await getTriggers(\n getAmmEnum(amm),\n walletAddress,\n chainId,\n isLimitOrder\n );\n return { chainId, triggers };\n } catch (e) {\n console.log(\n \"Error: Failed to fetch triggers for chain\",\n chainId,\n (e as Error).message\n );\n return { chainId, triggers: null };\n }\n })\n );\n\n // Merge current chain data with other chains data\n const allData = { ...initialData };\n otherChainsData.forEach(({ chainId, triggers }) => {\n if (triggers) {\n allData[chainId] = triggers;\n }\n });\n\n // Update the SWR cache with all data\n if (typeof window !== \"undefined\") {\n const { cache } = require(\"swr\");\n cache?.set(cacheKey, allData);\n }\n } catch (e) {\n console.log(\n \"Error: Failed to fetch other chain triggers \",\n (e as Error).message\n );\n }\n};\n","import { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\n\nimport { useAllChainStateStore } from \"@/components/GlobalStore\";\nimport {\n IActivePositionMap,\n IPositionMap,\n IRawTokenMap,\n} from \"@/components/GlobalStore/allChain/types\";\nimport { AmmEnum } from \"@ui/utils\";\nimport { useEffect } from \"react\";\nimport { Address } from \"viem\";\nimport {\n useCurrentChainPositions,\n usePositionInitializer,\n} from \"./useCurrentChainPositions\";\nimport { useChainsWithNonEmptyPositions } from \"./useFetch/useChainsWithNonEmptyPositions\";\n\nexport function useFetchAllChainsPositions(walletAddress: Address): {\n data: IActivePositionMap;\n isLoading: boolean;\n isAllLoaded: boolean;\n} {\n const { ammEnum } = useNetwork();\n const { data: chainIdList } = useChainsWithNonEmptyPositions(walletAddress);\n const { isLoading: currentPositionLoading } =\n useCurrentChainPositions(walletAddress);\n\n const {\n state: { rawAllPositionMap, rawAllTokenMap, activePositionMap },\n } = useAllChainStateStore();\n\n useInitializeChainPositions(ammEnum, walletAddress, !currentPositionLoading);\n\n const allChainsPositionMap = rawAllPositionMap?.[walletAddress]?.[ammEnum];\n\n // if confirmed no position, then don't show loading\n const hasNoPosition = chainIdList ? chainIdList.length === 0 : false;\n const isLoading =\n currentPositionLoading ||\n (!hasNoPosition && (!allChainsPositionMap || !rawAllTokenMap));\n\n const isAllLoaded = !!chainIdList?.every(\n (chainId) => activePositionMap?.[chainId]\n );\n\n return {\n data: activePositionMap,\n isLoading,\n isAllLoaded,\n };\n}\n\nconst useInitializeChainPositions = (\n amm: AmmEnum,\n walletAddress: Address,\n isCriticalDataLoaded: boolean = false\n) => {\n const {\n state: { rawAllTokenMap },\n } = useAllChainStateStore();\n const { data: chainIdList } = useChainsWithNonEmptyPositions(walletAddress);\n const { positionInitializer } = usePositionInitializer();\n\n useEffect(() => {\n if (\n !amm ||\n !walletAddress ||\n !isCriticalDataLoaded ||\n !rawAllTokenMap ||\n !chainIdList\n ) {\n return;\n }\n\n chainIdList.forEach((chainId) => {\n positionInitializer(amm, chainId, walletAddress, rawAllTokenMap[chainId]);\n });\n }, [\n amm,\n chainIdList,\n walletAddress,\n isCriticalDataLoaded,\n rawAllTokenMap,\n positionInitializer,\n ]);\n};\n\nexport const getMissingTokens = (\n positionMap: IPositionMap,\n tokenMap: IRawTokenMap\n) => {\n const missingAddresses = new Set<string>();\n\n for (const position of Object.values(positionMap)) {\n const { token0, token1 } = position.pool;\n [token0.address, token1.address].forEach((address) => {\n if (!tokenMap?.[address] && !missingAddresses.has(address)) {\n missingAddresses.add(address);\n }\n });\n }\n\n return Array.from(missingAddresses) as Address[];\n};\n","import { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { useRpcSettings } from \"@/config/feature_flags\";\nimport { getPublicClient } from \"@/helper/getPublicClient\";\nimport { AmmEnum, SupportedFeeAmount } from \"@aperture/uikitv2\";\nimport {\n ApertureSupportedChainId,\n viem,\n} from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport useSWR from \"swr/immutable\";\nimport { PublicClient } from \"viem\";\n\ntype BatchRequest = {\n tokenA: string;\n tokenB: string;\n poolKeys: number[];\n};\n\ntype BatchResult = Record<string, { tokenA: string; tokenB: string }>;\n\nexport function useFetchCurrentChainMarketPrice(\n tokenAAddress: string | null,\n tokenBAddress: string | null,\n poolKeys: number[] = [],\n isSupported: boolean = true\n) {\n const { ammEnum, networkId, publicClient } = useNetwork();\n if (ammEnum !== \"SLIPSTREAM\") {\n poolKeys = SupportedFeeAmount[ammEnum];\n }\n const shouldFetch =\n tokenAAddress &&\n tokenBAddress &&\n ammEnum &&\n isSupported &&\n networkId === publicClient.chain?.id;\n\n return useSWR(\n shouldFetch\n ? `tokens-market-price-${ammEnum}-${networkId}-${tokenAAddress}-${tokenBAddress}`\n : null,\n () =>\n getFetchMarketPrice(\n ammEnum,\n networkId,\n tokenAAddress!,\n tokenBAddress!,\n poolKeys,\n publicClient\n ),\n { refreshInterval: 30_000 }\n );\n}\n\nexport function useFetchMarketPrice(\n ammEnum: AmmEnum,\n networkId: ApertureSupportedChainId,\n tokenAAddress: string | null,\n tokenBAddress: string | null,\n poolKeys: number[] = [],\n isSupported: boolean = true\n) {\n const rpcSetting = useRpcSettings();\n const publicClient = getPublicClient(networkId, rpcSetting);\n\n if (ammEnum !== \"SLIPSTREAM\") {\n poolKeys = SupportedFeeAmount[ammEnum];\n }\n const shouldFetch =\n tokenAAddress &&\n tokenBAddress &&\n ammEnum &&\n isSupported &&\n networkId === publicClient.chain?.id;\n\n return useSWR(\n shouldFetch\n ? `calc-tokens-market-price-${ammEnum}-${networkId}-${tokenAAddress}-${tokenBAddress}`\n : null,\n () =>\n getFetchMarketPrice(\n ammEnum,\n networkId,\n tokenAAddress!,\n tokenBAddress!,\n poolKeys,\n publicClient\n ),\n { refreshInterval: 30_000 }\n );\n}\n\nasync function getFetchMarketPrice(\n ammEnum: AmmEnum,\n chainId: ApertureSupportedChainId,\n tokenAAddress: string,\n tokenBAddress: string,\n poolKeys: number[],\n client: PublicClient\n) {\n if (poolKeys.length === 0) return {};\n\n const batchProcessor = MarketPriceBatchProcessor.getInstance();\n return batchProcessor.addRequest(ammEnum, chainId, client, {\n tokenA: tokenAAddress,\n tokenB: tokenBAddress,\n poolKeys,\n });\n}\n\nclass MarketPriceBatchProcessor {\n private static instance: MarketPriceBatchProcessor;\n private batchQueues: Map<\n string,\n {\n ammEnum: AmmEnum;\n chainId: ApertureSupportedChainId;\n client: PublicClient;\n requests: BatchRequest[];\n timer?: NodeJS.Timeout;\n pendingPromises: { resolve: (result: BatchResult) => void }[];\n }\n >;\n private readonly BATCH_SIZE = 10;\n private readonly BATCH_TIMEOUT = 500; // ms\n\n private constructor() {\n this.batchQueues = new Map();\n }\n\n static getInstance(): MarketPriceBatchProcessor {\n if (!MarketPriceBatchProcessor.instance) {\n MarketPriceBatchProcessor.instance = new MarketPriceBatchProcessor();\n }\n return MarketPriceBatchProcessor.instance;\n }\n\n async addRequest(\n ammEnum: AmmEnum,\n chainId: ApertureSupportedChainId,\n client: PublicClient,\n request: BatchRequest\n ): Promise<BatchResult> {\n const queueKey = `${ammEnum}-${chainId}`;\n\n // Create queue if it doesn't exist\n if (!this.batchQueues.has(queueKey)) {\n this.batchQueues.set(queueKey, {\n ammEnum,\n chainId,\n client,\n requests: [],\n pendingPromises: [],\n });\n }\n\n const queue = this.batchQueues.get(queueKey)!;\n queue.requests.push(request);\n\n return new Promise((resolve) => {\n queue.pendingPromises.push({ resolve });\n\n if (queue.requests.length >= this.BATCH_SIZE) {\n this.processBatchQueue(queueKey);\n } else if (!queue.timer) {\n queue.timer = setTimeout(() => {\n this.processBatchQueue(queueKey);\n }, this.BATCH_TIMEOUT);\n }\n });\n }\n\n private async processBatchQueue(queueKey: string): Promise<void> {\n const queue = this.batchQueues.get(queueKey);\n if (!queue || queue.requests.length === 0) return;\n\n // Clear timeout if it exists\n if (queue.timer) {\n clearTimeout(queue.timer);\n queue.timer = undefined;\n }\n\n const { ammEnum, chainId, client, requests, pendingPromises } = queue;\n this.batchQueues.delete(queueKey);\n\n const poolRequests = requests.flatMap((request) =>\n request.poolKeys.map((poolKey) => ({\n tokenA: request.tokenA,\n tokenB: request.tokenB,\n feeOrTickSpacing: poolKey,\n }))\n );\n\n try {\n const pools = await viem.getBulkPools(\n poolRequests,\n chainId,\n ammEnum,\n client\n );\n const pricesList: Record<\n string,\n Record<string, { tokenA: string; tokenB: string }>\n > = {};\n\n pools.forEach((pool, index) => {\n if (!pool) return;\n\n const request = poolRequests[index];\n const tokenKey = `${poolRequests[index].tokenA}-${poolRequests[index].tokenB}`;\n const prices =\n pool.token0.address === request.tokenA\n ? {\n tokenA: pool.token0Price.toFixed(18),\n tokenB: pool.token1Price.toFixed(18),\n }\n : {\n tokenA: pool.token1Price.toFixed(18),\n tokenB: pool.token0Price.toFixed(18),\n };\n const key = ammEnum === \"SLIPSTREAM\" ? pool.tickSpacing : pool.fee;\n if (!pricesList[tokenKey]) {\n pricesList[tokenKey] = {};\n }\n pricesList[tokenKey][key] = prices;\n });\n\n // Resolve all pending promises with the result\n pendingPromises.forEach(({ resolve }, index) => {\n const tokenKey = `${requests[index].tokenA}-${requests[index].tokenB}`;\n resolve(pricesList[tokenKey]);\n });\n } catch (error) {\n console.warn(\"Error fetching market price\", error);\n pendingPromises.forEach(({ resolve }) => resolve({}));\n }\n }\n}\n"],"names":["fetchInfoForAllChains","chains","fetchPositionCallback","allInfo","Promise","all","Array","from","map","chainId","parsedChainId","parseInt","toString","e","console","error","concat","message","plusOrMinusTick","actionType","tickLower","tickUpper","invert","tickSpacing","pool","getNewTick","tickValue","type","rangeWidth","startingTick","tickCurrent","newTick","Math","ceil","TickMath","percentageToOffsetTick","percentage","minPercentage","maxPercentage","round","log","undefined","offsetTickToPercentage","offsetTick","abs","target","TICK_MULTIPLIER","toFixed","useOnNetworkAccountChange","address","useAccount","ammEnum","networkId","isChainSupported","useNetwork","cb","useEventCallback","callback","useUpdateEffect","useEffect","useMutateWarningTokens","mutate","tokenBalanceMutate","useFetchUserTokensBalance","updateTokenMap","useAllChainStateStore","mutateWarningTokens","token","tokens","isArray","mutateWarningTokensByAddress","tokenAddress","addresses","viem","getPublicClient","useCurrentChainPositions","currentTokenMap","useCurrentChainToken","state","activePositionMap","currentActivePositionMap","positionInitializer","usePositionInitializer","walletAddress","useMemo","positionMap","positionList","isLoading","sortActivePositions","Object","values","useMutatePositionMap","updatePositionMap","mutatePositionMap","useCallback","amm","isInitialization","missingTokenAddresses","getMissingTokens","length","useChainsWithNonEmptyPositions","data","useFetchAllChainsNumberOfPositions","useSWR","showFetch","name","chainIdsList","getSupportedChainsByAmm","getNetworkId","chain","getAmmEnum","validChains","getValidChains","chainsWithPositions","entries","reduce","acc","positionNumber","param","includes","push","flat","useFetchAllChainUserTriggers","limitOrder","isConnected","key","join","initialData","currentChainTriggers","getTriggers","otherChainIds","filter","id","getAllOtherChainTriggers","keepPreviousData","chainIds","isLimitOrder","cacheKey","otherChainsData","triggers","allData","forEach","cache","require","set","useFetchAllChainsPositions","rawAllPositionMap","chainIdList","currentPositionLoading","rawAllTokenMap","useInitializeChainPositions","allChainsPositionMap","hasNoPosition","isAllLoaded","every","isCriticalDataLoaded","tokenMap","missingAddresses","Set","position","token0","token1","has","add","useFetchCurrentChainMarketPrice","tokenAAddress","tokenBAddress","publicClient","poolKeys","isSupported","SupportedFeeAmount","shouldFetch","getFetchMarketPrice","refreshInterval","useFetchMarketPrice","rpcSetting","useRpcSettings","client","batchProcessor","MarketPriceBatchProcessor","getInstance","addRequest","tokenA","tokenB","instance","request","queueKey","batchQueues","requests","pendingPromises","queue","get","resolve","BATCH_SIZE","processBatchQueue","timer","setTimeout","BATCH_TIMEOUT","clearTimeout","delete","poolRequests","flatMap","feeOrTickSpacing","poolKey","pools","pricesList","index","tokenKey","prices","token0Price","token1Price","fee","warn","constructor","Map"],"sourceRoot":""}