add redirects

This commit is contained in:
2026-05-28 20:24:56 +03:00
parent 2e6ed487fd
commit 2026230ff6
10 changed files with 506 additions and 168 deletions

View File

@@ -195,6 +195,136 @@ export async function getTokensList(): Promise<TokenInfo[]> {
return res.data
}
export interface JumperToken {
address: string
chainId: number
symbol: string
decimals: number
name: string
coinKey?: string
logoURI?: string
priceUSD: string
}
export type JumperTokensMap = Record<string, JumperToken[]>
export async function getJumperTokens(): Promise<JumperTokensMap> {
const res = await walletGet<{ tokens?: JumperTokensMap; data?: { tokens: JumperTokensMap } }>(
'/api/jumper/tokens?chains=1,56,1151111081099710,728126428,20000000000001'
)
return res.data?.tokens ?? res.tokens ?? {}
}
export interface JumperQuotePayload {
fromChain: string
toChain: string
fromToken: string
toToken: string
fromAmount: string
fromAddress: string
toAddress: string
slippage: number
}
export interface JumperQuoteToken {
address: string
chainId: number
symbol: string
decimals: number
name: string
logoURI?: string
priceUSD: string
}
export interface JumperFeeCost {
name: string
description?: string
token: JumperQuoteToken
amount: string
amountUSD: string
percentage?: string
included?: boolean
}
export interface JumperQuote {
type: string
id: string
tool: string
toolDetails: { key: string; name: string; logoURI?: string }
action: {
fromToken: JumperQuoteToken
fromAmount: string
toToken: JumperQuoteToken
fromChainId: number
toChainId: number
slippage: number
fromAddress: string
toAddress: string
}
estimate: {
tool: string
approvalAddress?: string
toAmountMin: string
toAmount: string
fromAmount: string
feeCosts?: JumperFeeCost[]
}
}
export async function getJumperQuote(payload: JumperQuotePayload): Promise<JumperQuote> {
const qs = new URLSearchParams({
fromChain: payload.fromChain,
toChain: payload.toChain,
fromToken: payload.fromToken,
toToken: payload.toToken,
fromAmount: payload.fromAmount,
fromAddress: payload.fromAddress,
toAddress: payload.toAddress,
slippage: String(payload.slippage),
}).toString()
const res = await walletGet<{ body?: JumperQuote; data?: { body?: JumperQuote } }>(
`/api/jumper/quote-best?${qs}`
)
return (res.data?.body ?? res.body) as JumperQuote
}
export interface BridgeExecutePayload {
provider: string
fromChain: number
toChain: number
fromToken: string
toToken: string
fromAmount: string
fromAddress: string
toAddress: string
acceptedMinOut?: string
}
export interface BridgeExecuteResult {
provider: string
fromChain: number
toChain: number
toolName: string
feeTxid?: string
feeAmount?: string
bridgeTxid: string
fromAmount: string
toAmountMin: string
fromAmountUSD?: string
toAmountUSD?: string
trackerUrl?: string
}
export async function executeBridge(payload: BridgeExecutePayload): Promise<BridgeExecuteResult> {
const res = await walletPost<{ data?: { success: boolean; data: BridgeExecuteResult } }>(
'/api/bridge/execute',
payload,
true,
{ 'Idempotency-Key': crypto.randomUUID() }
)
return (res.data?.data ?? res) as BridgeExecuteResult
}
export async function getRelayQuote(payload: RelayQuotePayload): Promise<RelayQuoteResponse> {
return walletPost<RelayQuoteResponse>('/api/relay/quote', payload)
}