@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.
Files changed (284) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +494 -0
  3. package/dist/constants.d.ts +7 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/examples/customFetcher.d.ts +3 -0
  6. package/dist/examples/customFetcher.d.ts.map +1 -0
  7. package/dist/examples/delta.d.ts +2 -0
  8. package/dist/examples/delta.d.ts.map +1 -0
  9. package/dist/examples/ethersV6.d.ts +2 -0
  10. package/dist/examples/ethersV6.d.ts.map +1 -0
  11. package/dist/examples/limitOrders_all.d.ts +2 -0
  12. package/dist/examples/limitOrders_all.d.ts.map +1 -0
  13. package/dist/examples/limitOrders_partial.d.ts +2 -0
  14. package/dist/examples/limitOrders_partial.d.ts.map +1 -0
  15. package/dist/examples/limitOrders_postOrder.d.ts +2 -0
  16. package/dist/examples/limitOrders_postOrder.d.ts.map +1 -0
  17. package/dist/examples/partial.d.ts +2 -0
  18. package/dist/examples/partial.d.ts.map +1 -0
  19. package/dist/examples/quote.d.ts +2 -0
  20. package/dist/examples/quote.d.ts.map +1 -0
  21. package/dist/examples/sdk.d.ts +2 -0
  22. package/dist/examples/sdk.d.ts.map +1 -0
  23. package/dist/examples/simple.d.ts +2 -0
  24. package/dist/examples/simple.d.ts.map +1 -0
  25. package/dist/examples/simpleQuote.d.ts +2 -0
  26. package/dist/examples/simpleQuote.d.ts.map +1 -0
  27. package/dist/examples/viem.d.ts +2 -0
  28. package/dist/examples/viem.d.ts.map +1 -0
  29. package/dist/examples/wagmi.d.ts +43 -0
  30. package/dist/examples/wagmi.d.ts.map +1 -0
  31. package/dist/examples/web3.d.ts +2 -0
  32. package/dist/examples/web3.d.ts.map +1 -0
  33. package/dist/gas.d.ts +8 -0
  34. package/dist/gas.d.ts.map +1 -0
  35. package/dist/helpers/approve.d.ts +8 -0
  36. package/dist/helpers/approve.d.ts.map +1 -0
  37. package/dist/helpers/fetchers/axios.d.ts +5 -0
  38. package/dist/helpers/fetchers/axios.d.ts.map +1 -0
  39. package/dist/helpers/fetchers/fetch.d.ts +5 -0
  40. package/dist/helpers/fetchers/fetch.d.ts.map +1 -0
  41. package/dist/helpers/index.d.ts +13 -0
  42. package/dist/helpers/index.d.ts.map +1 -0
  43. package/dist/helpers/misc.d.ts +48 -0
  44. package/dist/helpers/misc.d.ts.map +1 -0
  45. package/dist/helpers/providers/ethers.d.ts +10 -0
  46. package/dist/helpers/providers/ethers.d.ts.map +1 -0
  47. package/dist/helpers/providers/ethersV6.d.ts +8 -0
  48. package/dist/helpers/providers/ethersV6.d.ts.map +1 -0
  49. package/dist/helpers/providers/helpers.d.ts +3 -0
  50. package/dist/helpers/providers/helpers.d.ts.map +1 -0
  51. package/dist/helpers/providers/viem.d.ts +23 -0
  52. package/dist/helpers/providers/viem.d.ts.map +1 -0
  53. package/dist/helpers/providers/web3.d.ts +9 -0
  54. package/dist/helpers/providers/web3.d.ts.map +1 -0
  55. package/dist/helpers/token.d.ts +38 -0
  56. package/dist/helpers/token.d.ts.map +1 -0
  57. package/dist/index.d.ts +64 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +8 -0
  60. package/dist/methods/common/orders/buildOrderData.d.ts +27 -0
  61. package/dist/methods/common/orders/buildOrderData.d.ts.map +1 -0
  62. package/dist/methods/common/orders/encoding.d.ts +23 -0
  63. package/dist/methods/common/orders/encoding.d.ts.map +1 -0
  64. package/dist/methods/common/orders/misc.d.ts +27 -0
  65. package/dist/methods/common/orders/misc.d.ts.map +1 -0
  66. package/dist/methods/common/orders/signature.d.ts +9 -0
  67. package/dist/methods/common/orders/signature.d.ts.map +1 -0
  68. package/dist/methods/common/orders/types.d.ts +8 -0
  69. package/dist/methods/common/orders/types.d.ts.map +1 -0
  70. package/dist/methods/delta/approveForDelta.d.ts +8 -0
  71. package/dist/methods/delta/approveForDelta.d.ts.map +1 -0
  72. package/dist/methods/delta/buildCrosschainOrderBridge.d.ts +23 -0
  73. package/dist/methods/delta/buildCrosschainOrderBridge.d.ts.map +1 -0
  74. package/dist/methods/delta/buildDeltaOrder.d.ts +49 -0
  75. package/dist/methods/delta/buildDeltaOrder.d.ts.map +1 -0
  76. package/dist/methods/delta/getBridgeInfo.d.ts +9 -0
  77. package/dist/methods/delta/getBridgeInfo.d.ts.map +1 -0
  78. package/dist/methods/delta/getDeltaContract.d.ts +9 -0
  79. package/dist/methods/delta/getDeltaContract.d.ts.map +1 -0
  80. package/dist/methods/delta/getDeltaOrders.d.ts +22 -0
  81. package/dist/methods/delta/getDeltaOrders.d.ts.map +1 -0
  82. package/dist/methods/delta/getDeltaPrice.d.ts +58 -0
  83. package/dist/methods/delta/getDeltaPrice.d.ts.map +1 -0
  84. package/dist/methods/delta/getMulticallHandlers.d.ts +9 -0
  85. package/dist/methods/delta/getMulticallHandlers.d.ts.map +1 -0
  86. package/dist/methods/delta/getPartnerFee.d.ts +16 -0
  87. package/dist/methods/delta/getPartnerFee.d.ts.map +1 -0
  88. package/dist/methods/delta/helpers/across.d.ts +22 -0
  89. package/dist/methods/delta/helpers/across.d.ts.map +1 -0
  90. package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts +35 -0
  91. package/dist/methods/delta/helpers/buildDeltaOrderData.d.ts.map +1 -0
  92. package/dist/methods/delta/helpers/composePermit.d.ts +5 -0
  93. package/dist/methods/delta/helpers/composePermit.d.ts.map +1 -0
  94. package/dist/methods/delta/helpers/misc.d.ts +3 -0
  95. package/dist/methods/delta/helpers/misc.d.ts.map +1 -0
  96. package/dist/methods/delta/helpers/types.d.ts +96 -0
  97. package/dist/methods/delta/helpers/types.d.ts.map +1 -0
  98. package/dist/methods/delta/index.d.ts +28 -0
  99. package/dist/methods/delta/index.d.ts.map +1 -0
  100. package/dist/methods/delta/isTokenSupportedInDelta.d.ts +8 -0
  101. package/dist/methods/delta/isTokenSupportedInDelta.d.ts.map +1 -0
  102. package/dist/methods/delta/postDeltaOrder.d.ts +23 -0
  103. package/dist/methods/delta/postDeltaOrder.d.ts.map +1 -0
  104. package/dist/methods/delta/signDeltaOrder.d.ts +12 -0
  105. package/dist/methods/delta/signDeltaOrder.d.ts.map +1 -0
  106. package/dist/methods/limitOrders/approveForOrder.d.ts +12 -0
  107. package/dist/methods/limitOrders/approveForOrder.d.ts.map +1 -0
  108. package/dist/methods/limitOrders/buildOrder.d.ts +11 -0
  109. package/dist/methods/limitOrders/buildOrder.d.ts.map +1 -0
  110. package/dist/methods/limitOrders/cancelOrder.d.ts +9 -0
  111. package/dist/methods/limitOrders/cancelOrder.d.ts.map +1 -0
  112. package/dist/methods/limitOrders/fillOrderDirectly.d.ts +30 -0
  113. package/dist/methods/limitOrders/fillOrderDirectly.d.ts.map +1 -0
  114. package/dist/methods/limitOrders/getOrders.d.ts +39 -0
  115. package/dist/methods/limitOrders/getOrders.d.ts.map +1 -0
  116. package/dist/methods/limitOrders/getOrdersContract.d.ts +8 -0
  117. package/dist/methods/limitOrders/getOrdersContract.d.ts.map +1 -0
  118. package/dist/methods/limitOrders/helpers/buildOrderData.d.ts +43 -0
  119. package/dist/methods/limitOrders/helpers/buildOrderData.d.ts.map +1 -0
  120. package/dist/methods/limitOrders/helpers/misc.d.ts +9 -0
  121. package/dist/methods/limitOrders/helpers/misc.d.ts.map +1 -0
  122. package/dist/methods/limitOrders/helpers/types.d.ts +49 -0
  123. package/dist/methods/limitOrders/helpers/types.d.ts.map +1 -0
  124. package/dist/methods/limitOrders/index.d.ts +30 -0
  125. package/dist/methods/limitOrders/index.d.ts.map +1 -0
  126. package/dist/methods/limitOrders/postOrder.d.ts +10 -0
  127. package/dist/methods/limitOrders/postOrder.d.ts.map +1 -0
  128. package/dist/methods/limitOrders/signOrder.d.ts +7 -0
  129. package/dist/methods/limitOrders/signOrder.d.ts.map +1 -0
  130. package/dist/methods/limitOrders/transaction.d.ts +23 -0
  131. package/dist/methods/limitOrders/transaction.d.ts.map +1 -0
  132. package/dist/methods/nftOrders/approveForOrder.d.ts +12 -0
  133. package/dist/methods/nftOrders/approveForOrder.d.ts.map +1 -0
  134. package/dist/methods/nftOrders/buildOrder.d.ts +11 -0
  135. package/dist/methods/nftOrders/buildOrder.d.ts.map +1 -0
  136. package/dist/methods/nftOrders/cancelOrder.d.ts +8 -0
  137. package/dist/methods/nftOrders/cancelOrder.d.ts.map +1 -0
  138. package/dist/methods/nftOrders/getOrders.d.ts +18 -0
  139. package/dist/methods/nftOrders/getOrders.d.ts.map +1 -0
  140. package/dist/methods/nftOrders/getOrdersContract.d.ts +8 -0
  141. package/dist/methods/nftOrders/getOrdersContract.d.ts.map +1 -0
  142. package/dist/methods/nftOrders/helpers/buildOrderData.d.ts +52 -0
  143. package/dist/methods/nftOrders/helpers/buildOrderData.d.ts.map +1 -0
  144. package/dist/methods/nftOrders/helpers/misc.d.ts +13 -0
  145. package/dist/methods/nftOrders/helpers/misc.d.ts.map +1 -0
  146. package/dist/methods/nftOrders/helpers/types.d.ts +39 -0
  147. package/dist/methods/nftOrders/helpers/types.d.ts.map +1 -0
  148. package/dist/methods/nftOrders/index.d.ts +23 -0
  149. package/dist/methods/nftOrders/index.d.ts.map +1 -0
  150. package/dist/methods/nftOrders/postOrder.d.ts +10 -0
  151. package/dist/methods/nftOrders/postOrder.d.ts.map +1 -0
  152. package/dist/methods/nftOrders/signOrder.d.ts +7 -0
  153. package/dist/methods/nftOrders/signOrder.d.ts.map +1 -0
  154. package/dist/methods/nftOrders/transaction.d.ts +23 -0
  155. package/dist/methods/nftOrders/transaction.d.ts.map +1 -0
  156. package/dist/methods/quote/getQuote.d.ts +51 -0
  157. package/dist/methods/quote/getQuote.d.ts.map +1 -0
  158. package/dist/methods/swap/adapters.d.ts +8 -0
  159. package/dist/methods/swap/adapters.d.ts.map +1 -0
  160. package/dist/methods/swap/approve.d.ts +10 -0
  161. package/dist/methods/swap/approve.d.ts.map +1 -0
  162. package/dist/methods/swap/balance.d.ts +23 -0
  163. package/dist/methods/swap/balance.d.ts.map +1 -0
  164. package/dist/methods/swap/helpers/normalizeRateOptions.d.ts +12 -0
  165. package/dist/methods/swap/helpers/normalizeRateOptions.d.ts.map +1 -0
  166. package/dist/methods/swap/index.d.ts +13 -0
  167. package/dist/methods/swap/index.d.ts.map +1 -0
  168. package/dist/methods/swap/rates.d.ts +52 -0
  169. package/dist/methods/swap/rates.d.ts.map +1 -0
  170. package/dist/methods/swap/spender.d.ts +21 -0
  171. package/dist/methods/swap/spender.d.ts.map +1 -0
  172. package/dist/methods/swap/swapTx.d.ts +158 -0
  173. package/dist/methods/swap/swapTx.d.ts.map +1 -0
  174. package/dist/methods/swap/token.d.ts +8 -0
  175. package/dist/methods/swap/token.d.ts.map +1 -0
  176. package/dist/methods/swap/transaction.d.ts +115 -0
  177. package/dist/methods/swap/transaction.d.ts.map +1 -0
  178. package/dist/sdk/full.d.ts +17 -0
  179. package/dist/sdk/full.d.ts.map +1 -0
  180. package/dist/sdk/partial.d.ts +31 -0
  181. package/dist/sdk/partial.d.ts.map +1 -0
  182. package/dist/sdk/simple.d.ts +75 -0
  183. package/dist/sdk/simple.d.ts.map +1 -0
  184. package/dist/sdk.cjs.development.js +5182 -0
  185. package/dist/sdk.cjs.development.js.map +1 -0
  186. package/dist/sdk.cjs.production.min.js +2 -0
  187. package/dist/sdk.cjs.production.min.js.map +1 -0
  188. package/dist/sdk.esm.js +5102 -0
  189. package/dist/sdk.esm.js.map +1 -0
  190. package/dist/types.d.ts +161 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/docs/DELTA.md +207 -0
  193. package/package.json +126 -0
  194. package/src/constants.ts +16 -0
  195. package/src/examples/customFetcher.ts +44 -0
  196. package/src/examples/delta.ts +127 -0
  197. package/src/examples/ethersV6.ts +38 -0
  198. package/src/examples/limitOrders_all.ts +135 -0
  199. package/src/examples/limitOrders_partial.ts +171 -0
  200. package/src/examples/limitOrders_postOrder.ts +77 -0
  201. package/src/examples/partial.ts +34 -0
  202. package/src/examples/quote.ts +205 -0
  203. package/src/examples/sdk.ts +39 -0
  204. package/src/examples/simple.ts +44 -0
  205. package/src/examples/simpleQuote.ts +98 -0
  206. package/src/examples/viem.ts +120 -0
  207. package/src/examples/wagmi.ts +68 -0
  208. package/src/examples/web3.ts +32 -0
  209. package/src/gas.ts +7 -0
  210. package/src/helpers/approve.ts +60 -0
  211. package/src/helpers/fetchers/axios.ts +34 -0
  212. package/src/helpers/fetchers/fetch.ts +67 -0
  213. package/src/helpers/index.ts +27 -0
  214. package/src/helpers/misc.ts +160 -0
  215. package/src/helpers/providers/ethers.ts +192 -0
  216. package/src/helpers/providers/ethersV6.ts +121 -0
  217. package/src/helpers/providers/helpers.ts +36 -0
  218. package/src/helpers/providers/viem.ts +205 -0
  219. package/src/helpers/providers/web3.ts +154 -0
  220. package/src/helpers/token.ts +75 -0
  221. package/src/index.ts +425 -0
  222. package/src/methods/common/orders/buildOrderData.ts +29 -0
  223. package/src/methods/common/orders/encoding.ts +216 -0
  224. package/src/methods/common/orders/misc.ts +86 -0
  225. package/src/methods/common/orders/signature.ts +68 -0
  226. package/src/methods/common/orders/types.ts +13 -0
  227. package/src/methods/delta/approveForDelta.ts +38 -0
  228. package/src/methods/delta/buildCrosschainOrderBridge.ts +84 -0
  229. package/src/methods/delta/buildDeltaOrder.ts +192 -0
  230. package/src/methods/delta/getBridgeInfo.ts +38 -0
  231. package/src/methods/delta/getDeltaContract.ts +29 -0
  232. package/src/methods/delta/getDeltaOrders.ts +102 -0
  233. package/src/methods/delta/getDeltaPrice.ts +122 -0
  234. package/src/methods/delta/getMulticallHandlers.ts +44 -0
  235. package/src/methods/delta/getPartnerFee.ts +58 -0
  236. package/src/methods/delta/helpers/across.ts +255 -0
  237. package/src/methods/delta/helpers/buildDeltaOrderData.ts +153 -0
  238. package/src/methods/delta/helpers/composePermit.ts +76 -0
  239. package/src/methods/delta/helpers/misc.ts +32 -0
  240. package/src/methods/delta/helpers/types.ts +110 -0
  241. package/src/methods/delta/index.ts +146 -0
  242. package/src/methods/delta/isTokenSupportedInDelta.ts +54 -0
  243. package/src/methods/delta/postDeltaOrder.ts +50 -0
  244. package/src/methods/delta/signDeltaOrder.ts +41 -0
  245. package/src/methods/limitOrders/approveForOrder.ts +36 -0
  246. package/src/methods/limitOrders/buildOrder.ts +56 -0
  247. package/src/methods/limitOrders/cancelOrder.ts +111 -0
  248. package/src/methods/limitOrders/fillOrderDirectly.ts +277 -0
  249. package/src/methods/limitOrders/getOrders.ts +151 -0
  250. package/src/methods/limitOrders/getOrdersContract.ts +20 -0
  251. package/src/methods/limitOrders/helpers/buildOrderData.ts +121 -0
  252. package/src/methods/limitOrders/helpers/misc.ts +64 -0
  253. package/src/methods/limitOrders/helpers/types.ts +70 -0
  254. package/src/methods/limitOrders/index.ts +154 -0
  255. package/src/methods/limitOrders/postOrder.ts +74 -0
  256. package/src/methods/limitOrders/signOrder.ts +29 -0
  257. package/src/methods/limitOrders/transaction.ts +231 -0
  258. package/src/methods/nftOrders/approveForOrder.ts +79 -0
  259. package/src/methods/nftOrders/buildOrder.ts +52 -0
  260. package/src/methods/nftOrders/cancelOrder.ts +23 -0
  261. package/src/methods/nftOrders/getOrders.ts +84 -0
  262. package/src/methods/nftOrders/getOrdersContract.ts +24 -0
  263. package/src/methods/nftOrders/helpers/buildOrderData.ts +131 -0
  264. package/src/methods/nftOrders/helpers/misc.ts +92 -0
  265. package/src/methods/nftOrders/helpers/types.ts +50 -0
  266. package/src/methods/nftOrders/index.ts +139 -0
  267. package/src/methods/nftOrders/postOrder.ts +71 -0
  268. package/src/methods/nftOrders/signOrder.ts +29 -0
  269. package/src/methods/nftOrders/transaction.ts +234 -0
  270. package/src/methods/quote/getQuote.ts +131 -0
  271. package/src/methods/swap/adapters.ts +49 -0
  272. package/src/methods/swap/approve.ts +51 -0
  273. package/src/methods/swap/balance.ts +147 -0
  274. package/src/methods/swap/helpers/normalizeRateOptions.ts +55 -0
  275. package/src/methods/swap/index.ts +38 -0
  276. package/src/methods/swap/rates.ts +276 -0
  277. package/src/methods/swap/spender.ts +76 -0
  278. package/src/methods/swap/swapTx.ts +266 -0
  279. package/src/methods/swap/token.ts +35 -0
  280. package/src/methods/swap/transaction.ts +310 -0
  281. package/src/sdk/full.ts +54 -0
  282. package/src/sdk/partial.ts +107 -0
  283. package/src/sdk/simple.ts +429 -0
  284. 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
+ }
@@ -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
+ };