@drift-labs/sdk
Version:
SDK for Drift Protocol
278 lines • 6.45 kB
TypeScript
/// <reference types="bn.js" />
import { AddressLookupTableAccount, Connection, PublicKey, TransactionInstruction, TransactionMessage, VersionedTransaction } from '@solana/web3.js';
import { BN } from '@coral-xyz/anchor';
export type SwapMode = 'ExactIn' | 'ExactOut';
export interface MarketInfo {
id: string;
inAmount: number;
inputMint: string;
label: string;
lpFee: Fee;
notEnoughLiquidity: boolean;
outAmount: number;
outputMint: string;
platformFee: Fee;
priceImpactPct: number;
}
export interface Fee {
amount: number;
mint: string;
pct: number;
}
export interface Route {
amount: number;
inAmount: number;
marketInfos: MarketInfo[];
otherAmountThreshold: number;
outAmount: number;
priceImpactPct: number;
slippageBps: number;
swapMode: SwapMode;
}
/**
*
* @export
* @interface RoutePlanStep
*/
export interface RoutePlanStep {
/**
*
* @type {SwapInfo}
* @memberof RoutePlanStep
*/
swapInfo: SwapInfo;
/**
*
* @type {number}
* @memberof RoutePlanStep
*/
percent: number;
}
export interface SwapInfo {
/**
*
* @type {string}
* @memberof SwapInfo
*/
ammKey: string;
/**
*
* @type {string}
* @memberof SwapInfo
*/
label?: string;
/**
*
* @type {string}
* @memberof SwapInfo
*/
inputMint: string;
/**
*
* @type {string}
* @memberof SwapInfo
*/
outputMint: string;
/**
*
* @type {string}
* @memberof SwapInfo
*/
inAmount: string;
/**
*
* @type {string}
* @memberof SwapInfo
*/
outAmount: string;
/**
*
* @type {string}
* @memberof SwapInfo
*/
feeAmount: string;
/**
*
* @type {string}
* @memberof SwapInfo
*/
feeMint: string;
}
/**
*
* @export
* @interface PlatformFee
*/
export interface PlatformFee {
/**
*
* @type {string}
* @memberof PlatformFee
*/
amount?: string;
/**
*
* @type {number}
* @memberof PlatformFee
*/
feeBps?: number;
}
/**
*
* @export
* @interface QuoteResponse
*/
export interface QuoteResponse {
/**
*
* @type {string}
* @memberof QuoteResponse
*/
inputMint: string;
/**
*
* @type {string}
* @memberof QuoteResponse
*/
inAmount: string;
/**
*
* @type {string}
* @memberof QuoteResponse
*/
outputMint: string;
/**
*
* @type {string}
* @memberof QuoteResponse
*/
outAmount: string;
/**
*
* @type {string}
* @memberof QuoteResponse
*/
otherAmountThreshold: string;
/**
*
* @type {SwapMode}
* @memberof QuoteResponse
*/
swapMode: SwapMode;
/**
*
* @type {number}
* @memberof QuoteResponse
*/
slippageBps: number;
/**
*
* @type {PlatformFee}
* @memberof QuoteResponse
*/
platformFee?: PlatformFee;
/**
*
* @type {string}
* @memberof QuoteResponse
*/
priceImpactPct: string;
/**
*
* @type {Array<RoutePlanStep>}
* @memberof QuoteResponse
*/
routePlan: Array<RoutePlanStep>;
/**
*
* @type {number}
* @memberof QuoteResponse
*/
contextSlot?: number;
/**
*
* @type {number}
* @memberof QuoteResponse
*/
timeTaken?: number;
/**
*
* @type {string}
* @memberof QuoteResponse
*/
error?: string;
/**
*
* @type {string}
* @memberof QuoteResponse
*/
errorCode?: string;
}
export declare const RECOMMENDED_JUPITER_API_VERSION = "/v1";
export declare const RECOMMENDED_JUPITER_API = "https://lite-api.jup.ag/swap";
export declare class JupiterClient {
url: string;
connection: Connection;
lookupTableCahce: Map<string, AddressLookupTableAccount>;
constructor({ connection, url }: {
connection: Connection;
url?: string;
});
/**
* Get routes for a swap
* @param inputMint the mint of the input token
* @param outputMint the mint of the output token
* @param amount the amount of the input token
* @param slippageBps the slippage tolerance in basis points
* @param swapMode the swap mode (ExactIn or ExactOut)
* @param onlyDirectRoutes whether to only return direct routes
*/
getQuote({ inputMint, outputMint, amount, maxAccounts, // 50 is an estimated amount with buffer
slippageBps, swapMode, onlyDirectRoutes, excludeDexes, autoSlippage, maxAutoSlippageBps, usdEstimate, }: {
inputMint: PublicKey;
outputMint: PublicKey;
amount: BN;
maxAccounts?: number;
slippageBps?: number;
swapMode?: SwapMode;
onlyDirectRoutes?: boolean;
excludeDexes?: string[];
autoSlippage?: boolean;
maxAutoSlippageBps?: number;
usdEstimate?: number;
}): Promise<QuoteResponse>;
/**
* Get a swap transaction for quote
* @param quoteResponse quote to perform swap
* @param userPublicKey the signer's wallet public key
* @param slippageBps the slippage tolerance in basis points
*/
getSwap({ quote, userPublicKey, slippageBps, }: {
quote: QuoteResponse;
userPublicKey: PublicKey;
slippageBps?: number;
}): Promise<VersionedTransaction>;
/**
* Get the transaction message and lookup tables for a transaction
* @param transaction
*/
getTransactionMessageAndLookupTables({ transaction, }: {
transaction: VersionedTransaction;
}): Promise<{
transactionMessage: TransactionMessage;
lookupTables: AddressLookupTableAccount[];
}>;
getLookupTable(accountKey: PublicKey): Promise<AddressLookupTableAccount>;
/**
* Get the jupiter instructions from transaction by filtering out instructions to compute budget and associated token programs
* @param transactionMessage the transaction message
* @param inputMint the input mint
* @param outputMint the output mint
*/
getJupiterInstructions({ transactionMessage, inputMint, outputMint, }: {
transactionMessage: TransactionMessage;
inputMint: PublicKey;
outputMint: PublicKey;
}): TransactionInstruction[];
}
//# sourceMappingURL=jupiterClient.d.ts.map