UNPKG

0xtrails

Version:

SDK for Trails

67 lines (62 loc) 1.77 kB
import { getSequenceApiUrl, getSequenceProjectAccessKey } from "./config.js" import type { SequenceAPIClient } from "@0xsequence/trails-api" // Narrow API client to one that supports queueing CCTP transfers without using 'any' type CctpQueueCapable = { queueCCTPTransfer: ( args: { sourceTxHash?: string metaTxHash?: string sourceChainId: number destinationChainId: number }, headers?: object, signal?: AbortSignal, ) => Promise<unknown> } const fallbackQueueCCTPTransfer = async (args: { sourceTxHash?: string metaTxHash?: string sourceChainId: number destinationChainId: number }): Promise<void> => { const apiUrl = getSequenceApiUrl() const accessKey = getSequenceProjectAccessKey() const headers: { [key: string]: string } = { "Content-Type": "application/json", } if (accessKey) headers["X-Access-Key"] = accessKey await fetch(`${apiUrl.replace(/\/*$/, "")}/rpc/API/QueueCCTPTransfer`, { method: "POST", headers, body: JSON.stringify(args), }) } export function hasCctpQueue(client: unknown): client is CctpQueueCapable { const maybe = client as { queueCCTPTransfer?: unknown } | null | undefined return typeof maybe?.queueCCTPTransfer === "function" } export async function queueCCTPTransfer({ apiClient, sourceTxHash, sourceChainId, destinationChainId, }: { apiClient: SequenceAPIClient sourceTxHash: string sourceChainId: number destinationChainId: number }): Promise<void> { if (hasCctpQueue(apiClient)) { await apiClient.queueCCTPTransfer({ sourceTxHash, sourceChainId, destinationChainId, }) } else { await fallbackQueueCCTPTransfer({ sourceTxHash, sourceChainId, destinationChainId, }) } }