@velora-dex/sdk 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +494 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/examples/customFetcher.d.ts +3 -0
- package/dist/examples/customFetcher.d.ts.map +1 -0
- package/dist/examples/delta.d.ts +2 -0
- package/dist/examples/delta.d.ts.map +1 -0
- package/dist/examples/ethersV6.d.ts +2 -0
- package/dist/examples/ethersV6.d.ts.map +1 -0
- package/dist/examples/limitOrders_all.d.ts +2 -0
- package/dist/examples/limitOrders_all.d.ts.map +1 -0
- package/dist/examples/limitOrders_partial.d.ts +2 -0
- package/dist/examples/limitOrders_partial.d.ts.map +1 -0
- package/dist/examples/limitOrders_postOrder.d.ts +2 -0
- package/dist/examples/limitOrders_postOrder.d.ts.map +1 -0
- package/dist/examples/partial.d.ts +2 -0
- package/dist/examples/partial.d.ts.map +1 -0
- package/dist/examples/quote.d.ts +2 -0
- package/dist/examples/quote.d.ts.map +1 -0
- package/dist/examples/sdk.d.ts +2 -0
- package/dist/examples/sdk.d.ts.map +1 -0
- package/dist/examples/simple.d.ts +2 -0
- package/dist/examples/simple.d.ts.map +1 -0
- package/dist/examples/simpleQuote.d.ts +2 -0
- package/dist/examples/simpleQuote.d.ts.map +1 -0
- package/dist/examples/viem.d.ts +2 -0
- package/dist/examples/viem.d.ts.map +1 -0
- package/dist/examples/wagmi.d.ts +43 -0
- package/dist/examples/wagmi.d.ts.map +1 -0
- package/dist/examples/web3.d.ts +2 -0
- package/dist/examples/web3.d.ts.map +1 -0
- package/dist/gas.d.ts +8 -0
- package/dist/gas.d.ts.map +1 -0
- package/dist/helpers/approve.d.ts +8 -0
- package/dist/helpers/approve.d.ts.map +1 -0
- package/dist/helpers/fetchers/axios.d.ts +5 -0
- package/dist/helpers/fetchers/axios.d.ts.map +1 -0
- package/dist/helpers/fetchers/fetch.d.ts +5 -0
- package/dist/helpers/fetchers/fetch.d.ts.map +1 -0
- package/dist/helpers/index.d.ts +13 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/misc.d.ts +48 -0
- package/dist/helpers/misc.d.ts.map +1 -0
- package/dist/helpers/providers/ethers.d.ts +10 -0
- package/dist/helpers/providers/ethers.d.ts.map +1 -0
- package/dist/helpers/providers/ethersV6.d.ts +8 -0
- package/dist/helpers/providers/ethersV6.d.ts.map +1 -0
- package/dist/helpers/providers/helpers.d.ts +3 -0
- package/dist/helpers/providers/helpers.d.ts.map +1 -0
- package/dist/helpers/providers/viem.d.ts +23 -0
- package/dist/helpers/providers/viem.d.ts.map +1 -0
- package/dist/helpers/providers/web3.d.ts +9 -0
- package/dist/helpers/providers/web3.d.ts.map +1 -0
- package/dist/helpers/token.d.ts +38 -0
- package/dist/helpers/token.d.ts.map +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/methods/common/orders/buildOrderData.d.ts +27 -0
- package/dist/methods/common/orders/buildOrderData.d.ts.map +1 -0
- package/dist/methods/common/orders/encoding.d.ts +23 -0
- package/dist/methods/common/orders/encoding.d.ts.map +1 -0
- package/dist/methods/common/orders/misc.d.ts +27 -0
- package/dist/methods/common/orders/misc.d.ts.map +1 -0
- package/dist/methods/common/orders/signature.d.ts +9 -0
- package/dist/methods/common/orders/signature.d.ts.map +1 -0
- package/dist/methods/common/orders/types.d.ts +8 -0
- package/dist/methods/common/orders/types.d.ts.map +1 -0
- package/dist/methods/delta/approveForDelta.d.ts +8 -0
- package/dist/methods/delta/approveForDelta.d.ts.map +1 -0
- package/dist/methods/delta/buildCrosschainOrderBridge.d.ts +23 -0
- package/dist/methods/delta/buildCrosschainOrderBridge.d.ts.map +1 -0
- package/dist/methods/delta/buildDeltaOrder.d.ts +49 -0
- package/dist/methods/delta/buildDeltaOrder.d.ts.map +1 -0
- package/dist/methods/delta/getBridgeInfo.d.ts +9 -0
- package/dist/methods/delta/getBridgeInfo.d.ts.map +1 -0
- package/dist/methods/delta/getDeltaContract.d.ts +9 -0
- package/dist/methods/delta/getDeltaContract.d.ts.map +1 -0
- package/dist/methods/delta/getDeltaOrders.d.ts +22 -0
- package/dist/methods/delta/getDeltaOrders.d.ts.map +1 -0
- package/dist/methods/delta/getDeltaPrice.d.ts +58 -0
- package/dist/methods/delta/getDeltaPrice.d.ts.map +1 -0
- package/dist/methods/delta/getMulticallHandlers.d.ts +9 -0
- package/dist/methods/delta/getMulticallHandlers.d.ts.map +1 -0
- package/dist/methods/delta/getPartnerFee.d.ts +16 -0
- package/dist/methods/delta/getPartnerFee.d.ts.map +1 -0
- package/dist/methods/delta/helpers/across.d.ts +22 -0
- package/dist/methods/delta/helpers/across.d.ts.map +1 -0
- package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts +35 -0
- package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts.map +1 -0
- package/dist/methods/delta/helpers/composePermit.d.ts +5 -0
- package/dist/methods/delta/helpers/composePermit.d.ts.map +1 -0
- package/dist/methods/delta/helpers/misc.d.ts +3 -0
- package/dist/methods/delta/helpers/misc.d.ts.map +1 -0
- package/dist/methods/delta/helpers/types.d.ts +96 -0
- package/dist/methods/delta/helpers/types.d.ts.map +1 -0
- package/dist/methods/delta/index.d.ts +28 -0
- package/dist/methods/delta/index.d.ts.map +1 -0
- package/dist/methods/delta/isTokenSupportedInDelta.d.ts +8 -0
- package/dist/methods/delta/isTokenSupportedInDelta.d.ts.map +1 -0
- package/dist/methods/delta/postDeltaOrder.d.ts +23 -0
- package/dist/methods/delta/postDeltaOrder.d.ts.map +1 -0
- package/dist/methods/delta/signDeltaOrder.d.ts +12 -0
- package/dist/methods/delta/signDeltaOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/approveForOrder.d.ts +12 -0
- package/dist/methods/limitOrders/approveForOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/buildOrder.d.ts +11 -0
- package/dist/methods/limitOrders/buildOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/cancelOrder.d.ts +9 -0
- package/dist/methods/limitOrders/cancelOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/fillOrderDirectly.d.ts +30 -0
- package/dist/methods/limitOrders/fillOrderDirectly.d.ts.map +1 -0
- package/dist/methods/limitOrders/getOrders.d.ts +39 -0
- package/dist/methods/limitOrders/getOrders.d.ts.map +1 -0
- package/dist/methods/limitOrders/getOrdersContract.d.ts +8 -0
- package/dist/methods/limitOrders/getOrdersContract.d.ts.map +1 -0
- package/dist/methods/limitOrders/helpers/buildOrderData.d.ts +43 -0
- package/dist/methods/limitOrders/helpers/buildOrderData.d.ts.map +1 -0
- package/dist/methods/limitOrders/helpers/misc.d.ts +9 -0
- package/dist/methods/limitOrders/helpers/misc.d.ts.map +1 -0
- package/dist/methods/limitOrders/helpers/types.d.ts +49 -0
- package/dist/methods/limitOrders/helpers/types.d.ts.map +1 -0
- package/dist/methods/limitOrders/index.d.ts +30 -0
- package/dist/methods/limitOrders/index.d.ts.map +1 -0
- package/dist/methods/limitOrders/postOrder.d.ts +10 -0
- package/dist/methods/limitOrders/postOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/signOrder.d.ts +7 -0
- package/dist/methods/limitOrders/signOrder.d.ts.map +1 -0
- package/dist/methods/limitOrders/transaction.d.ts +23 -0
- package/dist/methods/limitOrders/transaction.d.ts.map +1 -0
- package/dist/methods/nftOrders/approveForOrder.d.ts +12 -0
- package/dist/methods/nftOrders/approveForOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/buildOrder.d.ts +11 -0
- package/dist/methods/nftOrders/buildOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/cancelOrder.d.ts +8 -0
- package/dist/methods/nftOrders/cancelOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/getOrders.d.ts +18 -0
- package/dist/methods/nftOrders/getOrders.d.ts.map +1 -0
- package/dist/methods/nftOrders/getOrdersContract.d.ts +8 -0
- package/dist/methods/nftOrders/getOrdersContract.d.ts.map +1 -0
- package/dist/methods/nftOrders/helpers/buildOrderData.d.ts +52 -0
- package/dist/methods/nftOrders/helpers/buildOrderData.d.ts.map +1 -0
- package/dist/methods/nftOrders/helpers/misc.d.ts +13 -0
- package/dist/methods/nftOrders/helpers/misc.d.ts.map +1 -0
- package/dist/methods/nftOrders/helpers/types.d.ts +39 -0
- package/dist/methods/nftOrders/helpers/types.d.ts.map +1 -0
- package/dist/methods/nftOrders/index.d.ts +23 -0
- package/dist/methods/nftOrders/index.d.ts.map +1 -0
- package/dist/methods/nftOrders/postOrder.d.ts +10 -0
- package/dist/methods/nftOrders/postOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/signOrder.d.ts +7 -0
- package/dist/methods/nftOrders/signOrder.d.ts.map +1 -0
- package/dist/methods/nftOrders/transaction.d.ts +23 -0
- package/dist/methods/nftOrders/transaction.d.ts.map +1 -0
- package/dist/methods/quote/getQuote.d.ts +51 -0
- package/dist/methods/quote/getQuote.d.ts.map +1 -0
- package/dist/methods/swap/adapters.d.ts +8 -0
- package/dist/methods/swap/adapters.d.ts.map +1 -0
- package/dist/methods/swap/approve.d.ts +10 -0
- package/dist/methods/swap/approve.d.ts.map +1 -0
- package/dist/methods/swap/balance.d.ts +23 -0
- package/dist/methods/swap/balance.d.ts.map +1 -0
- package/dist/methods/swap/helpers/normalizeRateOptions.d.ts +12 -0
- package/dist/methods/swap/helpers/normalizeRateOptions.d.ts.map +1 -0
- package/dist/methods/swap/index.d.ts +13 -0
- package/dist/methods/swap/index.d.ts.map +1 -0
- package/dist/methods/swap/rates.d.ts +52 -0
- package/dist/methods/swap/rates.d.ts.map +1 -0
- package/dist/methods/swap/spender.d.ts +21 -0
- package/dist/methods/swap/spender.d.ts.map +1 -0
- package/dist/methods/swap/swapTx.d.ts +158 -0
- package/dist/methods/swap/swapTx.d.ts.map +1 -0
- package/dist/methods/swap/token.d.ts +8 -0
- package/dist/methods/swap/token.d.ts.map +1 -0
- package/dist/methods/swap/transaction.d.ts +115 -0
- package/dist/methods/swap/transaction.d.ts.map +1 -0
- package/dist/sdk/full.d.ts +17 -0
- package/dist/sdk/full.d.ts.map +1 -0
- package/dist/sdk/partial.d.ts +31 -0
- package/dist/sdk/partial.d.ts.map +1 -0
- package/dist/sdk/simple.d.ts +75 -0
- package/dist/sdk/simple.d.ts.map +1 -0
- package/dist/sdk.cjs.development.js +5182 -0
- package/dist/sdk.cjs.development.js.map +1 -0
- package/dist/sdk.cjs.production.min.js +2 -0
- package/dist/sdk.cjs.production.min.js.map +1 -0
- package/dist/sdk.esm.js +5102 -0
- package/dist/sdk.esm.js.map +1 -0
- package/dist/types.d.ts +161 -0
- package/dist/types.d.ts.map +1 -0
- package/docs/DELTA.md +207 -0
- package/package.json +126 -0
- package/src/constants.ts +16 -0
- package/src/examples/customFetcher.ts +44 -0
- package/src/examples/delta.ts +127 -0
- package/src/examples/ethersV6.ts +38 -0
- package/src/examples/limitOrders_all.ts +135 -0
- package/src/examples/limitOrders_partial.ts +171 -0
- package/src/examples/limitOrders_postOrder.ts +77 -0
- package/src/examples/partial.ts +34 -0
- package/src/examples/quote.ts +205 -0
- package/src/examples/sdk.ts +39 -0
- package/src/examples/simple.ts +44 -0
- package/src/examples/simpleQuote.ts +98 -0
- package/src/examples/viem.ts +120 -0
- package/src/examples/wagmi.ts +68 -0
- package/src/examples/web3.ts +32 -0
- package/src/gas.ts +7 -0
- package/src/helpers/approve.ts +60 -0
- package/src/helpers/fetchers/axios.ts +34 -0
- package/src/helpers/fetchers/fetch.ts +67 -0
- package/src/helpers/index.ts +27 -0
- package/src/helpers/misc.ts +160 -0
- package/src/helpers/providers/ethers.ts +192 -0
- package/src/helpers/providers/ethersV6.ts +121 -0
- package/src/helpers/providers/helpers.ts +36 -0
- package/src/helpers/providers/viem.ts +205 -0
- package/src/helpers/providers/web3.ts +154 -0
- package/src/helpers/token.ts +75 -0
- package/src/index.ts +425 -0
- package/src/methods/common/orders/buildOrderData.ts +29 -0
- package/src/methods/common/orders/encoding.ts +216 -0
- package/src/methods/common/orders/misc.ts +86 -0
- package/src/methods/common/orders/signature.ts +68 -0
- package/src/methods/common/orders/types.ts +13 -0
- package/src/methods/delta/approveForDelta.ts +38 -0
- package/src/methods/delta/buildCrosschainOrderBridge.ts +84 -0
- package/src/methods/delta/buildDeltaOrder.ts +192 -0
- package/src/methods/delta/getBridgeInfo.ts +38 -0
- package/src/methods/delta/getDeltaContract.ts +29 -0
- package/src/methods/delta/getDeltaOrders.ts +102 -0
- package/src/methods/delta/getDeltaPrice.ts +122 -0
- package/src/methods/delta/getMulticallHandlers.ts +44 -0
- package/src/methods/delta/getPartnerFee.ts +58 -0
- package/src/methods/delta/helpers/across.ts +255 -0
- package/src/methods/delta/helpers/buildDeltaOrderData.ts +153 -0
- package/src/methods/delta/helpers/composePermit.ts +76 -0
- package/src/methods/delta/helpers/misc.ts +32 -0
- package/src/methods/delta/helpers/types.ts +110 -0
- package/src/methods/delta/index.ts +146 -0
- package/src/methods/delta/isTokenSupportedInDelta.ts +54 -0
- package/src/methods/delta/postDeltaOrder.ts +50 -0
- package/src/methods/delta/signDeltaOrder.ts +41 -0
- package/src/methods/limitOrders/approveForOrder.ts +36 -0
- package/src/methods/limitOrders/buildOrder.ts +56 -0
- package/src/methods/limitOrders/cancelOrder.ts +111 -0
- package/src/methods/limitOrders/fillOrderDirectly.ts +277 -0
- package/src/methods/limitOrders/getOrders.ts +151 -0
- package/src/methods/limitOrders/getOrdersContract.ts +20 -0
- package/src/methods/limitOrders/helpers/buildOrderData.ts +121 -0
- package/src/methods/limitOrders/helpers/misc.ts +64 -0
- package/src/methods/limitOrders/helpers/types.ts +70 -0
- package/src/methods/limitOrders/index.ts +154 -0
- package/src/methods/limitOrders/postOrder.ts +74 -0
- package/src/methods/limitOrders/signOrder.ts +29 -0
- package/src/methods/limitOrders/transaction.ts +231 -0
- package/src/methods/nftOrders/approveForOrder.ts +79 -0
- package/src/methods/nftOrders/buildOrder.ts +52 -0
- package/src/methods/nftOrders/cancelOrder.ts +23 -0
- package/src/methods/nftOrders/getOrders.ts +84 -0
- package/src/methods/nftOrders/getOrdersContract.ts +24 -0
- package/src/methods/nftOrders/helpers/buildOrderData.ts +131 -0
- package/src/methods/nftOrders/helpers/misc.ts +92 -0
- package/src/methods/nftOrders/helpers/types.ts +50 -0
- package/src/methods/nftOrders/index.ts +139 -0
- package/src/methods/nftOrders/postOrder.ts +71 -0
- package/src/methods/nftOrders/signOrder.ts +29 -0
- package/src/methods/nftOrders/transaction.ts +234 -0
- package/src/methods/quote/getQuote.ts +131 -0
- package/src/methods/swap/adapters.ts +49 -0
- package/src/methods/swap/approve.ts +51 -0
- package/src/methods/swap/balance.ts +147 -0
- package/src/methods/swap/helpers/normalizeRateOptions.ts +55 -0
- package/src/methods/swap/index.ts +38 -0
- package/src/methods/swap/rates.ts +276 -0
- package/src/methods/swap/spender.ts +76 -0
- package/src/methods/swap/swapTx.ts +266 -0
- package/src/methods/swap/token.ts +35 -0
- package/src/methods/swap/transaction.ts +310 -0
- package/src/sdk/full.ts +54 -0
- package/src/sdk/partial.ts +107 -0
- package/src/sdk/simple.ts +429 -0
- package/src/types.ts +240 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import type { WithGasPrice, WithMaxFee } from '../../gas';
|
|
2
|
+
import type {
|
|
3
|
+
ConstructFetchInput,
|
|
4
|
+
Address,
|
|
5
|
+
FetcherPostInput,
|
|
6
|
+
PriceString,
|
|
7
|
+
OptimalRate,
|
|
8
|
+
RequestParameters,
|
|
9
|
+
} from '../../types';
|
|
10
|
+
|
|
11
|
+
import { assert } from 'ts-essentials';
|
|
12
|
+
import { API_URL, SwapSide } from '../../constants';
|
|
13
|
+
import { constructSearchString } from '../../helpers/misc';
|
|
14
|
+
import type { OrderData } from '../limitOrders/buildOrder';
|
|
15
|
+
import { sanitizeOrderData as sanitizeLimitOrderData } from '../limitOrders/helpers/misc';
|
|
16
|
+
import { sanitizeOrderData as sanitizeNFTOrderData } from '../nftOrders/helpers/misc';
|
|
17
|
+
import { AssetTypeVariant } from '../nftOrders/helpers/types';
|
|
18
|
+
|
|
19
|
+
export interface TransactionParams {
|
|
20
|
+
to: string;
|
|
21
|
+
from: string;
|
|
22
|
+
value: string;
|
|
23
|
+
data: string;
|
|
24
|
+
gas?: string;
|
|
25
|
+
chainId: number;
|
|
26
|
+
// either gasPrice or maxFeePerGas & maxPriorityFeePerGas will be present
|
|
27
|
+
gasPrice?: string;
|
|
28
|
+
maxFeePerGas?: string;
|
|
29
|
+
maxPriorityFeePerGas?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type SwappableOrder = OrderData & {
|
|
33
|
+
permitMakerAsset?: string;
|
|
34
|
+
signature: string;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export type SwappableNFTOrder = SwappableOrder & {
|
|
38
|
+
makerAssetId: string;
|
|
39
|
+
takerAssetId: string;
|
|
40
|
+
makerAssetType: AssetTypeVariant;
|
|
41
|
+
takerAssetType: AssetTypeVariant;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// when priceRoute with side=SELL, slippage can replace destAmount
|
|
45
|
+
export type TxInputAmountsPartSell = {
|
|
46
|
+
slippage: number;
|
|
47
|
+
srcAmount: PriceString;
|
|
48
|
+
destAmount?: never; // disallowed
|
|
49
|
+
};
|
|
50
|
+
// when priceRoute with side=BUY, slippage can replace srcAmount
|
|
51
|
+
export type TxInputAmountsPartBuy = {
|
|
52
|
+
slippage: number;
|
|
53
|
+
srcAmount?: never; // disallowed
|
|
54
|
+
destAmount: PriceString;
|
|
55
|
+
};
|
|
56
|
+
// both srcAmount and destAmount can be present in absence of slippage
|
|
57
|
+
export type TxInputAmountsPartBuyOrSell = {
|
|
58
|
+
slippage?: never; // disallowed
|
|
59
|
+
srcAmount: PriceString;
|
|
60
|
+
destAmount: PriceString;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// more details in the docs https://developers.velora.xyz/api/velora-api/velora-market-api/build-parameters-for-transaction#request-body
|
|
64
|
+
export type BuildTxInputBase = {
|
|
65
|
+
srcToken: Address;
|
|
66
|
+
destToken: Address;
|
|
67
|
+
userAddress: Address;
|
|
68
|
+
/** @description Whenever msg.sender (`userAddress`) i.e. address calling the Velora contract is different than the address sending the transaction, `txOrigin` must be passed along with `userAddress` */
|
|
69
|
+
txOrigin?: string;
|
|
70
|
+
/** @description used with referral link */
|
|
71
|
+
referrer?: string;
|
|
72
|
+
partner?: string;
|
|
73
|
+
partnerAddress?: string;
|
|
74
|
+
partnerFeeBps?: number;
|
|
75
|
+
/** @description If user should receive surplus instead of partner. Default: false */
|
|
76
|
+
isSurplusToUser?: boolean;
|
|
77
|
+
/** @description If fees should be sent directly to the partner instead of registering them on FeeClaimer. v6 only. Default: false */
|
|
78
|
+
isDirectFeeTransfer?: boolean;
|
|
79
|
+
/** @deprecated Use "takeSurplus" instead. Positive slippage goes to user, true by default */
|
|
80
|
+
positiveSlippageToUser?: boolean;
|
|
81
|
+
/** @description Set to true to take positive slippage. Works with partnerAddress. Default: false */
|
|
82
|
+
takeSurplus?: boolean;
|
|
83
|
+
/** @description Cap the surplus at 1% maximum. Default: true */
|
|
84
|
+
isCapSurplus?: boolean;
|
|
85
|
+
receiver?: Address;
|
|
86
|
+
srcDecimals?: number;
|
|
87
|
+
destDecimals?: number;
|
|
88
|
+
permit?: string;
|
|
89
|
+
deadline?: string;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// for Swap transaction
|
|
93
|
+
export type BuildSwapTxInput = BuildTxInputBase & {
|
|
94
|
+
priceRoute: OptimalRate;
|
|
95
|
+
} & (
|
|
96
|
+
| TxInputAmountsPartSell
|
|
97
|
+
| TxInputAmountsPartBuy
|
|
98
|
+
| TxInputAmountsPartBuyOrSell
|
|
99
|
+
); // this union doesn't allow to mix srcAmount & destAmount & slippage together
|
|
100
|
+
|
|
101
|
+
// building block for LimitOrders and NFT Orders swaps
|
|
102
|
+
// can only use priceRoute.side=BUY and related TxInputAmountsPart*
|
|
103
|
+
type BuildTxInputBaseBUYForOrders<
|
|
104
|
+
// to Omit extra keys
|
|
105
|
+
// can't do Omit<> around union, breaks discriminated union
|
|
106
|
+
K extends keyof TxInputAmountsPartBuy | keyof BuildTxInputBase = never
|
|
107
|
+
> = Omit<BuildTxInputBase, K> &
|
|
108
|
+
// destAmount is sum(orders[].makerAmount)
|
|
109
|
+
(| Omit<TxInputAmountsPartBuy, 'destAmount' | K>
|
|
110
|
+
| Omit<TxInputAmountsPartBuyOrSell, 'destAmount' | K>
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
// for LimitOrder Fill, without swap
|
|
114
|
+
export type BuildLimitOrderTxInput = BuildTxInputBaseBUYForOrders & {
|
|
115
|
+
orders: SwappableOrder[];
|
|
116
|
+
srcDecimals: number;
|
|
117
|
+
destDecimals: number;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// for NFT Order Fill, without swap
|
|
121
|
+
export type BuildNFTOrderTxInput =
|
|
122
|
+
// @TODO if NFT can ever be srcToken, change logic
|
|
123
|
+
// for NFT token destDecimals = 0 is acceptable
|
|
124
|
+
BuildTxInputBaseBUYForOrders<'destDecimals'> & {
|
|
125
|
+
orders: SwappableNFTOrder[];
|
|
126
|
+
srcDecimals: number;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
export interface BuildSwapAndLimitOrderTxInput0
|
|
130
|
+
// destAmount is sum(orders[].makerAmount)
|
|
131
|
+
extends Omit<BuildTxInputBase, 'destAmount'> {
|
|
132
|
+
priceRoute: OptimalRate; // priceRoute.side=BUY
|
|
133
|
+
orders: SwappableOrder[];
|
|
134
|
+
destDecimals: number;
|
|
135
|
+
}
|
|
136
|
+
// for Swap + LimitOrder, priceRoute must have side=BUY
|
|
137
|
+
export type BuildSwapAndLimitOrderTxInput =
|
|
138
|
+
// destAmount is sum(orders[].makerAmount)
|
|
139
|
+
BuildTxInputBaseBUYForOrders & {
|
|
140
|
+
priceRoute: OptimalRate; // priceRoute.side=BUY & priceRoute.contractMethod=simpleBuy
|
|
141
|
+
orders: SwappableOrder[];
|
|
142
|
+
destDecimals: number;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
// with slippage for a swap and fill - p2p - order, without to fill a p2p order directly with the intended taker asset
|
|
146
|
+
|
|
147
|
+
// for Swap + NFT Order, priceRoute must have side=BUY
|
|
148
|
+
export type BuildSwapAndNFTOrderTxInput =
|
|
149
|
+
// destAmount is sum(orders[].makerAmount)
|
|
150
|
+
BuildTxInputBaseBUYForOrders & {
|
|
151
|
+
priceRoute: OptimalRate; // priceRoute.side=BUY & priceRoute.contractMethod=simpleBuy
|
|
152
|
+
orders: SwappableNFTOrder[];
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export type BuildTxInput =
|
|
156
|
+
| BuildSwapTxInput
|
|
157
|
+
| BuildLimitOrderTxInput
|
|
158
|
+
| BuildNFTOrderTxInput
|
|
159
|
+
| BuildSwapAndLimitOrderTxInput
|
|
160
|
+
| BuildSwapAndNFTOrderTxInput;
|
|
161
|
+
|
|
162
|
+
export type BuildOptionsBase = {
|
|
163
|
+
/** @description Allows the API to skip performing onchain checks such as balances, allowances, as well as transaction simulations. The response does not contain `gas` parameter when set to `true` */
|
|
164
|
+
ignoreChecks?: boolean;
|
|
165
|
+
/** @description Allows the API to skip gas checks. The response does not contain `gas` parameter when set to `true` */
|
|
166
|
+
ignoreGasEstimate?: boolean;
|
|
167
|
+
/** @description Allows the API to skip performing onchain allowance checks. */
|
|
168
|
+
ignoreAllowance?: boolean;
|
|
169
|
+
/** @description Allows the API to return the contract parameters only. */
|
|
170
|
+
onlyParams?: boolean;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
export type BuildOptionsWithGasPrice = BuildOptionsBase & Partial<WithGasPrice>;
|
|
174
|
+
export type BuildOptionsWitWithMaxFee = BuildOptionsBase & Partial<WithMaxFee>;
|
|
175
|
+
|
|
176
|
+
export type BuildOptions = BuildOptionsWithGasPrice | BuildOptionsWitWithMaxFee;
|
|
177
|
+
|
|
178
|
+
type BuildTx = (
|
|
179
|
+
params: BuildTxInput,
|
|
180
|
+
options?: BuildOptions,
|
|
181
|
+
requestParams?: RequestParameters
|
|
182
|
+
) => Promise<TransactionParams>;
|
|
183
|
+
|
|
184
|
+
export type BuildTxFunctions = {
|
|
185
|
+
buildTx: BuildTx;
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
type SearchStringParams = BuildOptions;
|
|
189
|
+
|
|
190
|
+
export const constructBuildTx = ({
|
|
191
|
+
apiURL = API_URL,
|
|
192
|
+
chainId,
|
|
193
|
+
fetcher,
|
|
194
|
+
}: ConstructFetchInput): BuildTxFunctions => {
|
|
195
|
+
const transactionsURL = `${apiURL}/transactions/${chainId}` as const;
|
|
196
|
+
|
|
197
|
+
const buildTx: BuildTx = async (params, options = {}, requestParams) => {
|
|
198
|
+
if (
|
|
199
|
+
'priceRoute' in params &&
|
|
200
|
+
'destAmount' in params && // isn't provided together with `orders`
|
|
201
|
+
!('orders' in params) // when present, destAmount becomes sum(orders[].makerAmount)
|
|
202
|
+
) {
|
|
203
|
+
const {
|
|
204
|
+
priceRoute,
|
|
205
|
+
priceRoute: { side },
|
|
206
|
+
} = params;
|
|
207
|
+
const AmountMismatchError =
|
|
208
|
+
side === SwapSide.SELL
|
|
209
|
+
? 'Source Amount Mismatch'
|
|
210
|
+
: 'Destination Amount Mismatch';
|
|
211
|
+
|
|
212
|
+
// user provides srcAmount or slippage but not both. so we only validate accordingly.
|
|
213
|
+
assert(
|
|
214
|
+
areAmountsCorrect({
|
|
215
|
+
queryParams: params,
|
|
216
|
+
side,
|
|
217
|
+
priceRoute,
|
|
218
|
+
}),
|
|
219
|
+
AmountMismatchError
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// always pass explicit type to make sure UrlSearchParams are correct
|
|
224
|
+
const search = constructSearchString<SearchStringParams>(options);
|
|
225
|
+
|
|
226
|
+
const fetchURL = `${transactionsURL}/${search}` as const;
|
|
227
|
+
|
|
228
|
+
const sanitizedParams =
|
|
229
|
+
'orders' in params && params.orders.length > 0
|
|
230
|
+
? {
|
|
231
|
+
...params,
|
|
232
|
+
// make sure we don't pass more with orders than API expects
|
|
233
|
+
orders: params.orders.map((order) => {
|
|
234
|
+
const sanitizedOrderData =
|
|
235
|
+
'makerAssetId' in order
|
|
236
|
+
? sanitizeNFTOrderData(order) // assetType is provided here, because Order.*Asset may be address
|
|
237
|
+
: // if Order received from API by hash
|
|
238
|
+
sanitizeLimitOrderData(order);
|
|
239
|
+
|
|
240
|
+
const sanitizedOrder: SwappableOrder = {
|
|
241
|
+
...sanitizedOrderData,
|
|
242
|
+
signature: order.signature,
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
if (order.permitMakerAsset) {
|
|
246
|
+
sanitizedOrder.permitMakerAsset = order.permitMakerAsset;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return sanitizedOrder;
|
|
250
|
+
}),
|
|
251
|
+
}
|
|
252
|
+
: params;
|
|
253
|
+
|
|
254
|
+
const takeSurplus =
|
|
255
|
+
params.takeSurplus ??
|
|
256
|
+
(params.positiveSlippageToUser !== undefined
|
|
257
|
+
? !params.positiveSlippageToUser
|
|
258
|
+
: undefined);
|
|
259
|
+
|
|
260
|
+
if ('positiveSlippageToUser' in sanitizedParams) {
|
|
261
|
+
// positiveSlippageToUser & takeSurplus together will Error in API
|
|
262
|
+
delete sanitizedParams.positiveSlippageToUser;
|
|
263
|
+
}
|
|
264
|
+
if (takeSurplus !== undefined) {
|
|
265
|
+
sanitizedParams.takeSurplus = takeSurplus;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
const fetchParams: FetcherPostInput = {
|
|
269
|
+
url: fetchURL,
|
|
270
|
+
method: 'POST',
|
|
271
|
+
data: sanitizedParams,
|
|
272
|
+
requestParams,
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
const builtTx = await fetcher<TransactionParams>(fetchParams);
|
|
276
|
+
|
|
277
|
+
return builtTx;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
return { buildTx };
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
interface AreAmountsCorrectInput {
|
|
284
|
+
queryParams: { srcAmount?: string; destAmount?: string; slippage?: number };
|
|
285
|
+
side: SwapSide;
|
|
286
|
+
priceRoute: OptimalRate;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function areAmountsCorrect({
|
|
290
|
+
queryParams,
|
|
291
|
+
side,
|
|
292
|
+
priceRoute,
|
|
293
|
+
}: AreAmountsCorrectInput): boolean {
|
|
294
|
+
// return early after a simpler check if the user was swapping before filling
|
|
295
|
+
if (queryParams.slippage) {
|
|
296
|
+
return (
|
|
297
|
+
(side === SwapSide.BUY &&
|
|
298
|
+
queryParams.destAmount === priceRoute.destAmount) ||
|
|
299
|
+
(side === SwapSide.SELL && queryParams.srcAmount === priceRoute.srcAmount)
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// provided amounts match the previously queried price route
|
|
304
|
+
const [inputAmount, priceRouteAmount] =
|
|
305
|
+
side === SwapSide.SELL
|
|
306
|
+
? [queryParams.srcAmount, priceRoute.srcAmount]
|
|
307
|
+
: [queryParams.destAmount, priceRoute.destAmount];
|
|
308
|
+
|
|
309
|
+
return inputAmount === priceRouteAmount;
|
|
310
|
+
}
|
package/src/sdk/full.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { SDKConfig } from './partial';
|
|
2
|
+
import { constructSwapSDK, SwapSDKMethods } from '../methods/swap';
|
|
3
|
+
import {
|
|
4
|
+
constructAllLimitOrdersHandlers,
|
|
5
|
+
LimitOrderHandlers,
|
|
6
|
+
} from '../methods/limitOrders';
|
|
7
|
+
import {
|
|
8
|
+
constructAllNFTOrdersHandlers,
|
|
9
|
+
NFTOrderHandlers,
|
|
10
|
+
} from '../methods/nftOrders';
|
|
11
|
+
import {
|
|
12
|
+
constructAllDeltaOrdersHandlers,
|
|
13
|
+
DeltaOrderHandlers,
|
|
14
|
+
} from '../methods/delta';
|
|
15
|
+
import {
|
|
16
|
+
constructGetQuote,
|
|
17
|
+
GetQuoteFunctions,
|
|
18
|
+
} from '../methods/quote/getQuote';
|
|
19
|
+
import { ConstructBaseInput } from '../types';
|
|
20
|
+
import { API_URL, DEFAULT_VERSION } from '../constants';
|
|
21
|
+
|
|
22
|
+
export type AllSDKMethods<TxResponse> = {
|
|
23
|
+
swap: SwapSDKMethods<TxResponse>;
|
|
24
|
+
limitOrders: LimitOrderHandlers<TxResponse>;
|
|
25
|
+
nftOrders: NFTOrderHandlers<TxResponse>;
|
|
26
|
+
delta: DeltaOrderHandlers<TxResponse>;
|
|
27
|
+
quote: GetQuoteFunctions;
|
|
28
|
+
} & Required<ConstructBaseInput>;
|
|
29
|
+
|
|
30
|
+
/** @description construct SDK with every method, for swap and limitOrders */
|
|
31
|
+
export const constructFullSDK = <TxResponse = any>(
|
|
32
|
+
config: SDKConfig<TxResponse>
|
|
33
|
+
): AllSDKMethods<TxResponse> => {
|
|
34
|
+
// include all available functions
|
|
35
|
+
const swap: SwapSDKMethods<TxResponse> = constructSwapSDK(config);
|
|
36
|
+
const limitOrders: LimitOrderHandlers<TxResponse> =
|
|
37
|
+
constructAllLimitOrdersHandlers(config);
|
|
38
|
+
const nftOrders: NFTOrderHandlers<TxResponse> =
|
|
39
|
+
constructAllNFTOrdersHandlers(config);
|
|
40
|
+
const delta: DeltaOrderHandlers<TxResponse> =
|
|
41
|
+
constructAllDeltaOrdersHandlers(config);
|
|
42
|
+
const quote = constructGetQuote(config);
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
swap,
|
|
46
|
+
limitOrders,
|
|
47
|
+
nftOrders,
|
|
48
|
+
delta,
|
|
49
|
+
quote,
|
|
50
|
+
apiURL: config.apiURL ?? API_URL,
|
|
51
|
+
chainId: config.chainId,
|
|
52
|
+
version: config.version ?? DEFAULT_VERSION,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnyFunction,
|
|
3
|
+
ConstructBaseInput,
|
|
4
|
+
ConstructFetchInput,
|
|
5
|
+
ConstructProviderFetchInput,
|
|
6
|
+
} from '../types';
|
|
7
|
+
import type { Merge, UnionToIntersection } from 'ts-essentials';
|
|
8
|
+
import type { ApproveTokenFunctions } from '../methods/swap/approve';
|
|
9
|
+
import type { CancelLimitOrderFunctions } from '../methods/limitOrders/cancelOrder';
|
|
10
|
+
import type { ApproveTokenForLimitOrderFunctions } from '../methods/limitOrders/approveForOrder';
|
|
11
|
+
import type { CancelNFTOrderFunctions } from '../methods/nftOrders/cancelOrder';
|
|
12
|
+
import type { ApproveTokenForNFTOrderFunctions } from '../methods/nftOrders/approveForOrder';
|
|
13
|
+
import type { FillOrderDirectlyFunctions } from '../methods/limitOrders/fillOrderDirectly';
|
|
14
|
+
import type { ApproveTokenForDeltaFunctions } from '../methods/delta/approveForDelta';
|
|
15
|
+
import { API_URL, DEFAULT_VERSION } from '../constants';
|
|
16
|
+
|
|
17
|
+
export type SDKConfig<TxResponse = any> = ConstructProviderFetchInput<
|
|
18
|
+
TxResponse,
|
|
19
|
+
'staticCall' | 'transactCall' | 'signTypedDataCall'
|
|
20
|
+
> &
|
|
21
|
+
ConstructFetchInput;
|
|
22
|
+
|
|
23
|
+
type SDKFunction<T extends ConstructBaseInput> = (
|
|
24
|
+
config: T
|
|
25
|
+
) => Record<string, AnyFunction | Record<string, AnyFunction>>;
|
|
26
|
+
|
|
27
|
+
type IntersectionOfReturns<Funcs extends AnyFunction[]> = UnionToIntersection<
|
|
28
|
+
ReturnType<Funcs[number]>
|
|
29
|
+
>;
|
|
30
|
+
|
|
31
|
+
type PartialSDKResult<
|
|
32
|
+
Config extends ConstructBaseInput,
|
|
33
|
+
Funcs extends [SDKFunction<Config>, ...SDKFunction<Config>[]]
|
|
34
|
+
> = InferWithTxResponse<Config, Funcs>;
|
|
35
|
+
|
|
36
|
+
type InferWithTxResponse<
|
|
37
|
+
Config extends ConstructBaseInput,
|
|
38
|
+
Funcs extends [SDKFunction<Config>, ...SDKFunction<Config>[]]
|
|
39
|
+
> = Config extends SDKConfig<infer TxResponse> // if can infer TxResponse inside Config
|
|
40
|
+
? // and if returns can be successfully intersected
|
|
41
|
+
IntersectionOfReturns<Funcs> extends Record<string, any>
|
|
42
|
+
? MergeExtendableRecursively<
|
|
43
|
+
IntersectionOfReturns<Funcs>,
|
|
44
|
+
[
|
|
45
|
+
// if there are ApproveTokenFunctions or CancelLimitOrderFunctions in the intersection
|
|
46
|
+
// which means constructApproveToken or constructCancelLimitOrder was passed in Funcs
|
|
47
|
+
ApproveTokenFunctions<TxResponse>,
|
|
48
|
+
CancelLimitOrderFunctions<TxResponse>,
|
|
49
|
+
FillOrderDirectlyFunctions<TxResponse>,
|
|
50
|
+
ApproveTokenForLimitOrderFunctions<TxResponse>,
|
|
51
|
+
CancelNFTOrderFunctions<TxResponse>,
|
|
52
|
+
ApproveTokenForNFTOrderFunctions<TxResponse>,
|
|
53
|
+
ApproveTokenForDeltaFunctions<TxResponse>
|
|
54
|
+
]
|
|
55
|
+
// then merge IntersectionOfReturns<Funcs> with them recursively
|
|
56
|
+
>
|
|
57
|
+
: IntersectionOfReturns<Funcs>
|
|
58
|
+
: IntersectionOfReturns<Funcs>;
|
|
59
|
+
|
|
60
|
+
// merges Accum with Replacement
|
|
61
|
+
// if Accum has keys of Replacement
|
|
62
|
+
type MergeExtendableOnce<
|
|
63
|
+
Accum extends Record<string, any>,
|
|
64
|
+
Replacement extends Record<string, any>
|
|
65
|
+
> = Accum extends Record<keyof Replacement, any>
|
|
66
|
+
? Merge<Accum, Replacement>
|
|
67
|
+
: Accum;
|
|
68
|
+
|
|
69
|
+
// recursively merges Accum with each Replacement
|
|
70
|
+
// if Accum has keys of Replacement
|
|
71
|
+
type MergeExtendableRecursively<
|
|
72
|
+
Accum extends Record<string, any>,
|
|
73
|
+
Replacements extends Record<string, any>[]
|
|
74
|
+
> = Replacements extends [
|
|
75
|
+
head: infer Head extends Record<string, any>,
|
|
76
|
+
...tail: infer Tail
|
|
77
|
+
]
|
|
78
|
+
? Tail extends Record<string, any>[]
|
|
79
|
+
? MergeExtendableRecursively<MergeExtendableOnce<Accum, Head>, Tail>
|
|
80
|
+
: MergeExtendableOnce<Accum, Head>
|
|
81
|
+
: Accum;
|
|
82
|
+
|
|
83
|
+
/** @description construct composable SDK with methods you choose yourself */
|
|
84
|
+
export const constructPartialSDK = <
|
|
85
|
+
Config extends ConstructBaseInput,
|
|
86
|
+
Funcs extends [SDKFunction<Config>, ...SDKFunction<Config>[]]
|
|
87
|
+
>(
|
|
88
|
+
config: Config, // config is auto-inferred to cover the used functions
|
|
89
|
+
...funcs: Funcs
|
|
90
|
+
): PartialSDKResult<Config, Funcs> & Required<ConstructBaseInput> => {
|
|
91
|
+
const sdkFuncs = funcs.reduce<Partial<IntersectionOfReturns<Funcs>>>(
|
|
92
|
+
(accum, func) => {
|
|
93
|
+
const sdkSlice = func(config);
|
|
94
|
+
return Object.assign(accum, sdkSlice);
|
|
95
|
+
},
|
|
96
|
+
{}
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
const sdk = {
|
|
100
|
+
...sdkFuncs,
|
|
101
|
+
apiURL: config.apiURL ?? API_URL,
|
|
102
|
+
version: config.version ?? DEFAULT_VERSION,
|
|
103
|
+
chainId: config.chainId,
|
|
104
|
+
} as PartialSDKResult<Config, Funcs> & Required<ConstructBaseInput>;
|
|
105
|
+
|
|
106
|
+
return sdk;
|
|
107
|
+
};
|