UNPKG

@openocean.finance/widget

Version:

Openocean Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.

66 lines (59 loc) 2.05 kB
// import { isEvmChain } from 'utils' import type { // NearQuoteParams, NormalizedQuote, // QuoteParams, SwapProvider, } from './adapters/BaseSwapAdapter.js' export interface Quote { adapter?: SwapProvider quote: NormalizedQuote } export class CrossChainSwapAdapterRegistry { private adapters: Map<string, SwapProvider> = new Map() registerAdapter(adapter: SwapProvider): void { this.adapters.set(adapter.getName().toLowerCase(), adapter) } getAdapter(name: string): SwapProvider | undefined { return this.adapters.get(name.toLowerCase()) } getAllAdapters(): SwapProvider[] { return Array.from(this.adapters.values()) } // get quotes from all adapters and sort them by output amount // async getQuotes(params: QuoteParams | NearQuoteParams): Promise<Quote[]> { // const quotes: { adapter: SwapProvider; quote: NormalizedQuote }[] = [] // // const adapters = // params.fromChain === params.toChain && isEvmChain(params.fromChain) // ? ([this.getAdapter('KyberSwap')] as SwapProvider[]) // : this.getAllAdapters().filter( // adapter => // adapter.getSupportedChains().includes(params.fromChain) && // adapter.getSupportedChains().includes(params.toChain), // ) // // console.log( // 'Available adapters', // params, // adapters.map(ad => ad.getName()), // ) // // Get quotes from all compatible adapters // const quotePromises = adapters.map(async adapter => { // try { // const quote = await adapter.getQuote(params) // quotes.push({ adapter, quote }) // } catch (err) { // console.error(`Failed to get quote from ${adapter.getName()}:`, err) // } // }) // // await Promise.all(quotePromises) // // if (quotes.length === 0) { // throw new Error('No valid quotes found for the requested swap') // } // // quotes.sort((a, b) => (a.quote.outputAmount < b.quote.outputAmount ? 1 : -1)) // return quotes // } }