packages/widget/src/utils/routeMaker/generateRoutePossibilities.ts
import _ from 'lodash'
import { BridgeableToken } from 'types'
import { flattenPausedTokens } from '@/utils/flattenPausedTokens'
import { getToChainIds } from '@/utils/routeMaker/getToChainIds'
import { getFromChainIds } from '@/utils/routeMaker/getFromChainIds'
import { getFromTokens } from '@/utils/routeMaker/getFromTokens'
import { getToTokens } from '@/utils/routeMaker/getToTokens'
import { findTokenByRouteSymbol } from '@/utils/findTokenByRouteSymbol'
export const PAUSED_TO_CHAIN_IDS = [2000]
export interface RouteQueryFields {
fromChainId?: number
fromTokenRouteSymbol?: string
toChainId?: number
toTokenRouteSymbol?: string
}
export const getRoutePossibilities = ({
fromChainId,
fromToken,
toChainId,
toToken,
}: {
fromChainId?: number
fromToken?: BridgeableToken
toChainId?: number
toToken?: BridgeableToken
}) => {
const fromTokenRouteSymbol = fromToken && fromToken.routeSymbol
const toTokenRouteSymbol = toToken && toToken.routeSymbol
const fromChainIds: number[] = getFromChainIds({
fromChainId,
fromTokenRouteSymbol,
toChainId,
toTokenRouteSymbol,
})
const fromTokens: BridgeableToken[] = _(
getFromTokens({
fromChainId,
fromTokenRouteSymbol,
toChainId,
toTokenRouteSymbol,
})
)
.difference(flattenPausedTokens())
.map(getSymbol)
.uniq()
.map((symbol) => findTokenByRouteSymbol(symbol))
.compact()
.value()
const toChainIds: number[] = getToChainIds({
fromChainId,
fromTokenRouteSymbol,
toChainId,
toTokenRouteSymbol,
})
?.filter((chainId) => !PAUSED_TO_CHAIN_IDS.includes(chainId))
.filter((chainId) => chainId !== fromChainId)
const toTokens: BridgeableToken[] = _(
getToTokens({
fromChainId,
fromTokenRouteSymbol,
toChainId,
toTokenRouteSymbol,
})
)
.difference(flattenPausedTokens())
.filter((token) => {
return !PAUSED_TO_CHAIN_IDS.some((value) => token.endsWith(`-${value}`))
})
.map(getSymbol)
.uniq()
.map((symbol) => findTokenByRouteSymbol(symbol))
.compact()
.value()
return {
fromChainId,
fromToken,
toChainId,
toToken,
fromChainIds,
fromTokens,
toChainIds,
toTokens,
}
}
export const getSymbol = (tokenAndChainId: string): string => {
return tokenAndChainId.split('-')[0]
}