@indigo-labs/dexter
Version:
Customizable Typescript SDK for interacting with Cardano DEXs
117 lines (116 loc) • 4.21 kB
JavaScript
import { Minswap } from './dex/minswap';
import { SundaeSwapV1 } from './dex/sundaeswap-v1';
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';
import { SplitSwapRequest } from './requests/split-swap-request';
import { SplitCancelSwapRequest } from './requests/split-cancel-swap-request';
import { SundaeSwapV3 } from './dex/sundaeswap-v3';
import { MinswapV2 } from './dex/minswap-v2';
import { WingRidersV2 } from './dex/wingriders-v2';
import { Splash } from './dex/splash';
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.identifier]: new Minswap(this.requestConfig),
[SundaeSwapV1.identifier]: new SundaeSwapV1(this.requestConfig),
[SundaeSwapV3.identifier]: new SundaeSwapV3(this.requestConfig),
[MinswapV2.identifier]: new MinswapV2(this.requestConfig),
[MuesliSwap.identifier]: new MuesliSwap(this.requestConfig),
[WingRiders.identifier]: new WingRiders(this.requestConfig),
[WingRidersV2.identifier]: new WingRidersV2(this.requestConfig),
[VyFinance.identifier]: new VyFinance(this.requestConfig),
[Splash.identifier]: new Splash(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 a split swap order.
*/
newSplitSwapRequest() {
return new SplitSwapRequest(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);
}
/**
* New request for a split cancel swap order.
*/
newSplitCancelSwapRequest() {
if (!this.walletProvider) {
throw new Error('Wallet provider must be set before requesting a split cancel order.');
}
if (!this.walletProvider.isWalletLoaded) {
throw new Error('Wallet must be loaded before requesting a split cancel order.');
}
return new SplitCancelSwapRequest(this);
}
}