@cowprotocol/cow-sdk
Version:
<p align="center"> <img width="400" src="https://github.com/cowprotocol/cow-sdk/raw/main/docs/images/CoW.png" /> </p>
140 lines (139 loc) • 4.41 kB
TypeScript
import type { AppDataParams, latest, LatestAppDataDocVersion } from '@cowprotocol/app-data';
import { AppData, AppDataHash, OrderKind, OrderParameters, OrderQuoteRequest, OrderQuoteResponse, QuoteAmountsAndCosts, TokenAmount } from '../order-book';
import type { Signer } from '@ethersproject/abstract-signer';
import type { CowEnv, SupportedChainId } from '../common';
import type { ExternalProvider } from '@ethersproject/providers';
import type { UnsignedOrder } from '../order-signing';
export type PrivateKey = string;
export type AccountAddress = `0x${string}`;
export declare const ORDER_PRIMARY_TYPE: "Order";
/**
* EIP-712 typed data domain.
*/
interface TypedDataDomain {
name: string;
version: string;
chainId: number;
verifyingContract: string;
}
/**
* EIP-712 typed data field.
*/
interface TypedDataField {
name: string;
type: string;
}
/**
* EIP-712 typed data for an order.
*/
export interface OrderTypedData {
domain: TypedDataDomain;
primaryType: typeof ORDER_PRIMARY_TYPE;
types: Record<string, TypedDataField[]>;
message: UnsignedOrder;
}
/**
* Minimal set of parameters to create a trade.
*/
export interface TradeBaseParameters {
kind: OrderKind;
sellToken: OrderParameters['sellToken'];
sellTokenDecimals: number;
buyToken: OrderParameters['buyToken'];
buyTokenDecimals: number;
amount: TokenAmount;
}
/**
* Optional parameters to create a trade.
*/
export interface TradeOptionalParameters {
env?: CowEnv;
partiallyFillable?: OrderParameters['partiallyFillable'];
slippageBps?: latest.SlippageBips;
receiver?: OrderParameters['receiver'];
validFor?: OrderParameters['validTo'];
partnerFee?: latest.PartnerFee;
}
/**
* Information about the trader.
*/
export interface TraderParameters {
chainId: SupportedChainId;
appCode: latest.AppCode;
signer: Signer | ExternalProvider | PrivateKey;
}
export type QuoterParameters = Omit<TraderParameters, 'signer'> & {
account: AccountAddress;
};
/**
* Trade type, assets, amounts, and optional parameters.
*/
export interface TradeParameters extends TradeBaseParameters, TradeOptionalParameters {
}
export interface SwapParameters extends TradeParameters, TraderParameters {
}
export interface LimitTradeParameters extends Omit<TradeParameters, 'amount'> {
sellAmount: OrderParameters['sellAmount'];
buyAmount: OrderParameters['buyAmount'];
/**
* Id of the quote to be used for the limit order.
*/
quoteId?: number;
validTo?: OrderParameters['validTo'];
}
export interface LimitTradeParametersFromQuote extends LimitTradeParameters {
quoteId: number;
}
export interface LimitOrderParameters extends TraderParameters, LimitTradeParameters {
}
export interface SwapAdvancedSettings {
quoteRequest?: Partial<Omit<OrderQuoteRequest, 'kind'>>;
appData?: AppDataParams;
}
export interface LimitOrderAdvancedSettings {
appData?: AppDataParams;
}
/**
* Exhaustive set of data which includes information about trade, quote, order, "app-data", and more.
* This data is used to create a trade, sign an order, and post it to the order book.
*/
export interface QuoteResults {
tradeParameters: TradeParameters;
amountsAndCosts: QuoteAmountsAndCosts;
orderToSign: UnsignedOrder;
quoteResponse: OrderQuoteResponse;
appDataInfo: AppDataInfo;
orderTypedData: OrderTypedData;
}
export interface QuoteResultsSerialized extends Omit<QuoteResults, 'amountsAndCosts'> {
amountsAndCosts: QuoteAmountsAndCosts<string>;
}
export interface QuoteAndPost {
quoteResults: QuoteResults;
postSwapOrderFromQuote(): Promise<string>;
}
export type AppDataRootSchema = latest.AppDataRootSchema;
export interface BuildAppDataParams {
appCode: latest.AppCode;
slippageBps: latest.SlippageBips;
orderClass: latest.OrderClass['orderClass'];
partnerFee?: latest.PartnerFee;
}
/**
* https://github.com/cowprotocol/app-data
*/
export interface AppDataInfo {
doc: LatestAppDataDocVersion;
fullAppData: AppData;
appDataKeccak256: AppDataHash;
}
/**
* A standard Ethereum transaction object
*/
export interface TransactionParams {
data: string;
gasLimit: string;
to: string;
value: string;
}
export {};