packages/synapse-interface/utils/routeMaker/getToChainIds.ts
import _ from 'lodash'
import { EXISTING_BRIDGE_ROUTES } from '@/constants/existingBridgeRoutes'
import { RouteQueryFields } from './generateRoutePossibilities'
import { getTokenAndChainId } from './getTokenAndChainId'
export const getAllToChainIds = () => {
return _(EXISTING_BRIDGE_ROUTES)
.values()
.flatten()
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
export const getToChainIds = ({
fromChainId,
fromTokenRouteSymbol,
toChainId,
toTokenRouteSymbol,
}: RouteQueryFields) => {
if (
fromChainId === null &&
fromTokenRouteSymbol === null &&
toChainId === null &&
toTokenRouteSymbol === null
) {
return _(EXISTING_BRIDGE_ROUTES)
.values()
.flatten()
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId &&
fromTokenRouteSymbol === null &&
toChainId === null &&
toTokenRouteSymbol === null
) {
return _(EXISTING_BRIDGE_ROUTES)
.entries()
.filter(([key, _values]) => {
const { chainId } = getTokenAndChainId(key)
return chainId === fromChainId
})
.map(([_key, values]) => values)
.flatten()
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId === null &&
fromTokenRouteSymbol &&
toChainId === null &&
toTokenRouteSymbol === null
) {
return _(EXISTING_BRIDGE_ROUTES)
.entries()
.filter(([key, _values]) => {
const { symbol } = getTokenAndChainId(key)
return symbol === fromTokenRouteSymbol
})
.map(([_key, values]) => values)
.flatten()
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId &&
fromTokenRouteSymbol &&
toChainId === null &&
toTokenRouteSymbol === null
) {
return _.uniq(
EXISTING_BRIDGE_ROUTES[`${fromTokenRouteSymbol}-${fromChainId}`]?.map(
(token) => getTokenAndChainId(token).chainId
)
)
}
if (
fromChainId === null &&
fromTokenRouteSymbol === null &&
toChainId &&
toTokenRouteSymbol === null
) {
return _(EXISTING_BRIDGE_ROUTES)
.values()
.flatten()
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId &&
fromTokenRouteSymbol === null &&
toChainId &&
toTokenRouteSymbol === null
) {
return _(EXISTING_BRIDGE_ROUTES)
.entries()
.filter(([key, _values]) => key.endsWith(`-${fromChainId}`))
.map(([_key, values]) => values)
.flatten()
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId === null &&
fromTokenRouteSymbol &&
toChainId &&
toTokenRouteSymbol === null
) {
return _(EXISTING_BRIDGE_ROUTES)
.entries()
.filter(([key, _values]) => key.startsWith(`${fromTokenRouteSymbol}-`))
.filter(([_key, values]) =>
values.some((v) => getTokenAndChainId(v).chainId === toChainId)
)
.map(([_key, values]) => values)
.flatten()
.filter((token) => token.endsWith(`-${toChainId}`))
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId &&
fromTokenRouteSymbol &&
toChainId &&
toTokenRouteSymbol === null
) {
return _.uniq(
EXISTING_BRIDGE_ROUTES[`${fromTokenRouteSymbol}-${fromChainId}`]?.map(
(token) => getTokenAndChainId(token).chainId
)
)
}
if (
fromChainId === null &&
fromTokenRouteSymbol === null &&
toChainId === null &&
toTokenRouteSymbol
) {
return _(EXISTING_BRIDGE_ROUTES)
.values()
.flatten()
.filter((token) => token.startsWith(`${toTokenRouteSymbol}-`))
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId &&
fromTokenRouteSymbol === null &&
toChainId === null &&
toTokenRouteSymbol
) {
return _(EXISTING_BRIDGE_ROUTES)
.entries()
.filter(([key, _values]) => key.endsWith(`-${fromChainId}`))
.map(([_key, values]) => values)
.flatten()
.filter((token) => token.startsWith(`${toTokenRouteSymbol}-`))
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId === null &&
fromTokenRouteSymbol &&
toChainId === null &&
toTokenRouteSymbol
) {
return _(EXISTING_BRIDGE_ROUTES)
.entries()
.filter(([key, _values]) => key.startsWith(`${fromTokenRouteSymbol}-`))
.map(([_key, values]) => values)
.flatten()
.filter((token) => token.startsWith(`${toTokenRouteSymbol}-`))
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId &&
fromTokenRouteSymbol &&
toChainId === null &&
toTokenRouteSymbol
) {
return _.uniq(
EXISTING_BRIDGE_ROUTES[`${fromTokenRouteSymbol}-${fromChainId}`]
?.filter((token) => token.startsWith(`${toTokenRouteSymbol}-`))
.map((token) => getTokenAndChainId(token).chainId)
)
}
if (
fromChainId === null &&
fromTokenRouteSymbol === null &&
toChainId &&
toTokenRouteSymbol
) {
return _(EXISTING_BRIDGE_ROUTES)
.mapValues((values) =>
values.filter((token) => token.startsWith(`${toTokenRouteSymbol}`))
)
.values()
.flatten()
.uniq()
.map((token) => getTokenAndChainId(token).chainId)
.value()
}
if (
fromChainId &&
fromTokenRouteSymbol === null &&
toChainId &&
toTokenRouteSymbol
) {
return _(EXISTING_BRIDGE_ROUTES)
.entries()
.filter(([key, _values]) => key.endsWith(`-${fromChainId}`))
.map(([_key, values]) => values)
.flatten()
.filter((token) => token === `${toTokenRouteSymbol}-${toChainId}`)
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (
fromChainId === null &&
fromTokenRouteSymbol &&
toChainId &&
toTokenRouteSymbol
) {
return _(EXISTING_BRIDGE_ROUTES)
.entries()
.filter(([key, _values]) => key.startsWith(`${fromTokenRouteSymbol}-`))
.map(([_key, values]) => values)
.flatten()
.filter((token) => token === `${toTokenRouteSymbol}-${toChainId}`)
.map((token) => getTokenAndChainId(token).chainId)
.uniq()
.value()
}
if (fromChainId && fromTokenRouteSymbol && toChainId && toTokenRouteSymbol) {
return _(EXISTING_BRIDGE_ROUTES)
.pickBy((values, _key) =>
values.some((token) => token.startsWith(`${toTokenRouteSymbol}-`))
)
.keys()
.map((t) => getTokenAndChainId(t).chainId)
.uniq()
.value()
}
}