UNPKG

ndtr-dexter

Version:

Customizable Typescript SDK for interacting with Cardano DEXs

89 lines (88 loc) 2.95 kB
import { Minswap } from './dex/minswap'; import { SundaeSwap } from './dex/sundaeswap'; import { MuesliSwap } from './dex/muesliswap'; import { WingRiders } from './dex/wingriders'; import { SwapRequest } from './requests/swap-request'; import { VyFinance } from './dex/vyfinance'; import { TokenRegistryProvider } from './providers/asset-metadata/token-registry-provider'; import { CancelSwapRequest } from './requests/cancel-swap-request'; import { FetchRequest } from './requests/fetch-request'; import axios from "axios"; import axiosRetry from "axios-retry"; export class Dexter { constructor(config = {}, requestConfig = {}) { this.config = Object.assign({}, { shouldFetchMetadata: true, shouldFallbackToApi: true, shouldSubmitOrders: false, metadataMsgBranding: 'Dexter', }, config); this.requestConfig = Object.assign({}, { timeout: 5000, proxyUrl: '', retries: 3, }, requestConfig); // Axios configurations axiosRetry(axios, { retries: this.requestConfig.retries }); axios.defaults.timeout = this.requestConfig.timeout; this.metadataProvider = new TokenRegistryProvider(this.requestConfig); this.availableDexs = { [Minswap.name]: new Minswap(this.requestConfig), [SundaeSwap.name]: new SundaeSwap(this.requestConfig), [MuesliSwap.name]: new MuesliSwap(this.requestConfig), [WingRiders.name]: new WingRiders(this.requestConfig), [VyFinance.name]: new VyFinance(this.requestConfig), }; } /** * Retrieve DEX instance from unique name. */ dexByName(name) { return this.availableDexs[name]; } /** * Switch to a new data provider. */ withDataProvider(dataProvider) { this.dataProvider = dataProvider; return this; } /** * Switch to a new wallet provider. */ withWalletProvider(walletProvider) { this.walletProvider = walletProvider; return this; } /** * Switch to a new asset metadata provider. */ withMetadataProvider(metadataProvider) { this.metadataProvider = metadataProvider; return this; } /** * New request for data fetching. */ newFetchRequest() { return new FetchRequest(this); } /** * New request for a swap order. */ newSwapRequest() { return new SwapRequest(this); } /** * New request for cancelling a swap order. */ newCancelSwapRequest() { if (!this.walletProvider) { throw new Error('Wallet provider must be set before requesting a cancel order.'); } if (!this.walletProvider.isWalletLoaded) { throw new Error('Wallet must be loaded before requesting a cancel order.'); } return new CancelSwapRequest(this); } }