@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,44 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import axios from 'axios';
3
+ import { ethers, Wallet } from 'ethersV5';
4
+ import {
5
+ constructSimpleSDK,
6
+ ContractMethod,
7
+ SwapSide,
8
+ SimpleSDKProviderOptions,
9
+ } from '..';
10
+
11
+ const provider = ethers.getDefaultProvider(1);
12
+ const signer = Wallet.createRandom().connect(provider);
13
+ // only methods that fetch from API
14
+ const simpleFetchOnlySDK = constructSimpleSDK({ chainId: 1, axios });
15
+
16
+ const DAI_TOKEN = '0x6b175474e89094c44da98b954eedeac495271d0f';
17
+ const USDC_TOKEN = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
18
+
19
+ const account = signer.address;
20
+
21
+ // type Promise<OptimalRate>
22
+ const rateRes = simpleFetchOnlySDK.swap.getRate({
23
+ srcToken: DAI_TOKEN,
24
+ destToken: USDC_TOKEN,
25
+ amount: '1000000000000',
26
+ userAddress: account,
27
+ side: SwapSide.SELL,
28
+ });
29
+
30
+ const providerOptions: SimpleSDKProviderOptions = {
31
+ ethersProviderOrSigner: signer,
32
+ EthersContract: ethers.Contract,
33
+ account,
34
+ };
35
+
36
+ const SDKwithApprove = constructSimpleSDK(
37
+ { chainId: 1, axios },
38
+ providerOptions
39
+ );
40
+
41
+ const approveTxHash = SDKwithApprove.swap.approveToken(
42
+ '1000000000000',
43
+ DAI_TOKEN
44
+ );
@@ -0,0 +1,98 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import axios from 'axios';
3
+ import { ethers } from 'ethersV5';
4
+ import { constructSimpleSDK } from '..';
5
+
6
+ const DAI_TOKEN = '0x6b175474e89094c44da98b954eedeac495271d0f';
7
+ const USDC_TOKEN = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
8
+
9
+ async function allQuote() {
10
+ // @ts-expect-error assume window.ethereum is available
11
+ const ethersProvider = new ethers.providers.Web3Provider(window.ethereum);
12
+
13
+ const accounts = await ethersProvider.listAccounts();
14
+ const account = accounts[0]!;
15
+ const signer = ethersProvider.getSigner(account);
16
+
17
+ const simpleSDK = constructSimpleSDK(
18
+ { chainId: 1, axios },
19
+ {
20
+ ethersProviderOrSigner: signer,
21
+ EthersContract: ethers.Contract,
22
+ account,
23
+ }
24
+ );
25
+
26
+ const amount = '1000000000000'; // wei
27
+
28
+ const quote = await simpleSDK.quote.getQuote({
29
+ srcToken: DAI_TOKEN,
30
+ destToken: USDC_TOKEN,
31
+ amount,
32
+ userAddress: account,
33
+ srcDecimals: 18,
34
+ destDecimals: 18,
35
+ mode: 'all', // Delta quote if possible, with fallback to Market price
36
+ side: 'SELL',
37
+ // partner: "..." // if available
38
+ });
39
+
40
+ if ('delta' in quote) {
41
+ const deltaPrice = quote.delta;
42
+
43
+ const DeltaContract = await simpleSDK.delta.getDeltaContract();
44
+
45
+ // or sign a Permit1 or Permit2 TransferFrom for DeltaContract
46
+ const approveTxHash = await simpleSDK.delta.approveTokenForDelta(
47
+ amount,
48
+ DAI_TOKEN
49
+ );
50
+
51
+ const slippagePercent = 0.5;
52
+ const destAmountAfterSlippage = BigInt(
53
+ // get rid of exponential notation
54
+
55
+ +(+deltaPrice.destAmount * (1 - slippagePercent / 100)).toFixed(0)
56
+ // get rid of decimals
57
+ ).toString(10);
58
+
59
+ const deltaAuction = await simpleSDK.delta.submitDeltaOrder({
60
+ deltaPrice,
61
+ owner: account,
62
+ // beneficiary: anotherAccount, // if need to send destToken to another account
63
+ // permit: "0x1234...", // if signed a Permit1 or Permit2 TransferFrom for DeltaContract
64
+ srcToken: DAI_TOKEN,
65
+ destToken: USDC_TOKEN,
66
+ srcAmount: amount,
67
+ destAmount: destAmountAfterSlippage, // minimum acceptable destAmount
68
+ });
69
+
70
+ // poll if necessary
71
+ const auction = await simpleSDK.delta.getDeltaOrderById(deltaAuction.id);
72
+ if (auction?.status === 'EXECUTED') {
73
+ console.log('Auction was executed');
74
+ }
75
+ } else {
76
+ console.log(
77
+ `Delta Quote failed: ${quote.fallbackReason.errorType} - ${quote.fallbackReason.details}`
78
+ );
79
+ const priceRoute = quote.market;
80
+
81
+ const TokenTransferProxy = await simpleSDK.swap.getSpender();
82
+
83
+ // or sign a Permit1 or Permit2 TransferFrom for TokenTransferProxy
84
+ const approveTxHash = simpleSDK.swap.approveToken(amount, DAI_TOKEN);
85
+
86
+ const txParams = await simpleSDK.swap.buildTx({
87
+ srcToken: DAI_TOKEN,
88
+ destToken: USDC_TOKEN,
89
+ srcAmount: amount,
90
+ slippage: 250, // 2.5%
91
+ priceRoute,
92
+ userAddress: account,
93
+ // partner: '...' // if available
94
+ });
95
+
96
+ const swapTx = await signer.sendTransaction(txParams);
97
+ }
98
+ }
@@ -0,0 +1,120 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import { createWalletClient, custom } from 'viem';
3
+ import { mainnet } from 'viem/chains';
4
+
5
+ // declares types for window.ethereum
6
+ import 'viem/window';
7
+ import axios from 'axios';
8
+ import {
9
+ constructViemContractCaller,
10
+ constructAxiosFetcher,
11
+ constructPartialSDK,
12
+ constructSimpleSDK,
13
+ constructSubmitLimitOrder,
14
+ type BuildLimitOrderInput,
15
+ } from '../';
16
+ import { assert } from 'ts-essentials';
17
+ import { txParamsToViemTxParams } from '../helpers/providers/viem';
18
+
19
+ /**
20
+ * necessary when using write methods from SDK:
21
+ * transactions: approve Token, Fill or Cancel Order,
22
+ * signTypedData: signing Orders.
23
+ */
24
+ const walletClient = createWalletClient({
25
+ // either `viemClient` has account assigned to it at creation time,
26
+ // or the provider `viemClient` was created with must control `account` (viemClient.getAddresses()[0]===account);
27
+ // otherwise breaks with ` ProviderError: Unknown account 0x...`
28
+ chain: mainnet,
29
+ transport: custom(window.ethereum!),
30
+ });
31
+
32
+ // example of a minimal SDK for submitting Limit Orders only
33
+ async function limitOrderSDKExample() {
34
+ const [account] = await walletClient.getAddresses();
35
+ assert(account, 'account is necessary for Order signing');
36
+
37
+ const contractCaller = constructViemContractCaller(
38
+ walletClient,
39
+ account // pass account to enable write methods (tx signing, signTypedData)
40
+ );
41
+ const fetcher = constructAxiosFetcher(axios);
42
+ // SDK with `submitLimitOrder` and `submitP2POrder` methods only
43
+ const LOrderSDK = constructPartialSDK(
44
+ {
45
+ contractCaller,
46
+ fetcher,
47
+ chainId: 1, // same chain as for walletClient
48
+ },
49
+ constructSubmitLimitOrder
50
+ );
51
+
52
+ /*
53
+ // alternatively, SDK with all Order methods: `submitLimitOrder`, `cancelLimitOrder`, `fillLimitOrder`, `getLimitOrders`, etc. methods
54
+ const LOrderSDK = constructPartialSDK(
55
+ {
56
+ contractCaller,
57
+ fetcher,
58
+ chainId: 1, // same chain as for walletClient
59
+ },
60
+ constructAllLimitOrdersHandlers
61
+ ); */
62
+
63
+ const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
64
+ const HEX = '0x2b591e99afe9f32eaa6214f7b7629768c40eeb39';
65
+
66
+ const orderInput: BuildLimitOrderInput = {
67
+ nonce: 1,
68
+ expiry: Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7, // week from now, in sec
69
+ makerAsset: DAI,
70
+ takerAsset: HEX,
71
+ makerAmount: (1e18).toString(10),
72
+ takerAmount: (8e18).toString(10),
73
+ maker: account,
74
+ };
75
+
76
+ // submitted Order if successful
77
+ const orderFromAPI = LOrderSDK.submitLimitOrder(orderInput);
78
+ }
79
+
80
+ async function simpleSDKExample() {
81
+ const [account] = await walletClient.getAddresses();
82
+ assert(account, 'account is necessary for Order signing');
83
+
84
+ const simpleSDK = constructSimpleSDK(
85
+ {
86
+ axios,
87
+ chainId: 1, // same chain as for walletClient
88
+ },
89
+ { viemClient: walletClient, account }
90
+ );
91
+
92
+ const ETH = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
93
+ const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
94
+ const srcAmount = (1 * 1e18).toString();
95
+
96
+ const destToken = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
97
+ const priceRoute = await simpleSDK.swap.getRate({
98
+ srcToken: ETH,
99
+ destToken: DAI,
100
+ amount: srcAmount,
101
+ userAddress: account,
102
+ side: 'SELL',
103
+ srcDecimals: 18,
104
+ destDecimals: 18,
105
+ });
106
+
107
+ const txParams = await simpleSDK.swap.buildTx({
108
+ srcToken: ETH,
109
+ destToken,
110
+ srcAmount,
111
+ slippage: 250, // 2.5%
112
+ priceRoute,
113
+ userAddress: account,
114
+ });
115
+
116
+ // helper to cast all relevant string values to BigInt
117
+ const vTxParams = txParamsToViemTxParams(txParams);
118
+
119
+ const txHash = await walletClient.sendTransaction({ ...vTxParams, account });
120
+ }
@@ -0,0 +1,68 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import axios from 'axios';
3
+ import { mainnet } from '@wagmi/core/chains';
4
+ import {
5
+ getAccount,
6
+ getWalletClient,
7
+ sendTransaction,
8
+ waitForTransactionReceipt,
9
+ http,
10
+ createConfig,
11
+ } from '@wagmi/core';
12
+ import { injected } from '@wagmi/connectors';
13
+ import { constructSimpleSDK, txParamsToViemTxParams } from '../';
14
+ import { assert } from 'ts-essentials';
15
+
16
+ export const config = createConfig({
17
+ chains: [mainnet],
18
+ connectors: [injected()],
19
+ transports: {
20
+ [mainnet.id]: http(),
21
+ },
22
+ });
23
+
24
+ async function simpleSDKExample() {
25
+ const walletClient = await getWalletClient(config, { chainId: mainnet.id });
26
+ const account = getAccount(config).address; // make sure wallet is connected at this point
27
+ assert(account, 'account is necessary for Order signing');
28
+
29
+ const simpleSDK = constructSimpleSDK(
30
+ {
31
+ axios,
32
+ chainId: mainnet.id, // same chain as for walletClient
33
+ },
34
+ { viemClient: walletClient, account }
35
+ );
36
+
37
+ const ETH = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
38
+ const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F';
39
+ const srcAmount = (1 * 1e18).toString();
40
+
41
+ const destToken = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
42
+ const priceRoute = await simpleSDK.swap.getRate({
43
+ srcToken: ETH,
44
+ destToken: DAI,
45
+ amount: srcAmount,
46
+ userAddress: account,
47
+ side: 'SELL',
48
+ srcDecimals: 18,
49
+ destDecimals: 18,
50
+ });
51
+
52
+ const txParams = await simpleSDK.swap.buildTx({
53
+ srcToken: ETH,
54
+ destToken,
55
+ srcAmount,
56
+ slippage: 250, // 2.5%
57
+ priceRoute,
58
+ userAddress: account,
59
+ });
60
+
61
+ const vTxParams = txParamsToViemTxParams(txParams);
62
+
63
+ const txHash = await sendTransaction(config, vTxParams);
64
+
65
+ const txReceipt = waitForTransactionReceipt(config, { hash: txHash });
66
+ }
67
+
68
+ // Look at examples/viem for more examples
@@ -0,0 +1,32 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import axios from 'axios';
3
+ import Web3 from 'web3';
4
+ import {
5
+ constructFullSDK,
6
+ constructAxiosFetcher,
7
+ constructWeb3ContractCaller,
8
+ } from '..';
9
+
10
+ const fetcher = constructAxiosFetcher(axios);
11
+ const web3 = new Web3(Web3.givenProvider);
12
+ const contractCaller = constructWeb3ContractCaller(web3);
13
+
14
+ const sdk = constructFullSDK({
15
+ chainId: 1,
16
+ fetcher,
17
+ contractCaller,
18
+ });
19
+
20
+ async function main() {
21
+ // type Web3UnpromiEvent
22
+ const eventfulTxResponse = await sdk.swap.approveToken(
23
+ '1000000000000000000',
24
+ '0xcafe001067cDEF266AfB7Eb5A286dCFD277f3dE5'
25
+ );
26
+
27
+ eventfulTxResponse.once('transactionHash', (txHash) =>
28
+ console.log('watch for tx', txHash)
29
+ );
30
+ }
31
+
32
+ main();
package/src/gas.ts ADDED
@@ -0,0 +1,7 @@
1
+ export type WithGasPrice = {
2
+ gasPrice: string;
3
+ };
4
+ export type WithMaxFee = {
5
+ maxFeePerGas: string;
6
+ maxPriorityFeePerGas: string;
7
+ };
@@ -0,0 +1,60 @@
1
+ import type {
2
+ ConstructProviderFetchInput,
3
+ RequestParameters,
4
+ TxSendOverrides,
5
+ } from '../types';
6
+ import type { ExtractAbiMethodNames } from '../helpers/misc';
7
+ import type { Address, PriceString } from './token';
8
+
9
+ // much smaller than the whole ERC20_ABI
10
+ const MinERC20Abi = [
11
+ {
12
+ constant: false,
13
+ inputs: [
14
+ { name: '_spender', type: 'address' },
15
+ { name: '_value', type: 'uint256' },
16
+ ],
17
+ name: 'approve',
18
+ outputs: [{ name: '', type: 'bool' }],
19
+ payable: false,
20
+ stateMutability: 'nonpayable',
21
+ type: 'function',
22
+ },
23
+ ] as const;
24
+
25
+ type ApprovalMethods = ExtractAbiMethodNames<typeof MinERC20Abi>;
26
+
27
+ type ApproveContractCaller<T> = ConstructProviderFetchInput<
28
+ T,
29
+ 'transactCall'
30
+ >['contractCaller'];
31
+
32
+ export type ApproveToken<T> = (
33
+ amount: PriceString,
34
+ tokenAddress: Address,
35
+ overrides?: TxSendOverrides,
36
+ requestParams?: RequestParameters
37
+ ) => Promise<T>;
38
+
39
+ export type GetSpenderAsyncOrSync = (
40
+ requestParams?: RequestParameters
41
+ ) => Address | Promise<Address>;
42
+
43
+ export function approveTokenMethodFactory<T>(
44
+ contractCaller: ApproveContractCaller<T>,
45
+ getSpender: GetSpenderAsyncOrSync
46
+ ): ApproveToken<T> {
47
+ return async (amount, tokenAddress, overrides = {}, requestParams) => {
48
+ const spender = await getSpender(requestParams);
49
+
50
+ const res = await contractCaller.transactCall<ApprovalMethods>({
51
+ address: tokenAddress,
52
+ abi: MinERC20Abi,
53
+ contractMethod: 'approve',
54
+ args: [spender, amount],
55
+ overrides,
56
+ });
57
+
58
+ return res;
59
+ };
60
+ }
@@ -0,0 +1,34 @@
1
+ import type { ExtraFetchParams, FetcherFunction } from '../../types';
2
+ import type { AxiosStatic } from 'axios';
3
+ import { FetcherError } from '../misc';
4
+
5
+ export type AxiosRequirement = Pick<AxiosStatic, 'request' | 'isAxiosError'>;
6
+
7
+ export const constructFetcher =
8
+ (axios: AxiosRequirement, extra?: ExtraFetchParams): FetcherFunction =>
9
+ async (params) => {
10
+ try {
11
+ const { requestParams, ...rest } = params;
12
+ // adding apiKey to headers if it's provided
13
+ const headers = extra?.apiKey
14
+ ? {
15
+ 'X-API-KEY': extra.apiKey,
16
+ ...rest.headers,
17
+ ...requestParams?.headers,
18
+ }
19
+ : { ...rest.headers, ...requestParams?.headers };
20
+
21
+ const allParams = { ...rest, ...requestParams, headers };
22
+
23
+ const { data } = await axios.request(allParams);
24
+
25
+ return data;
26
+ } catch (error: any) {
27
+ if (axios.isAxiosError(error)) {
28
+ // attach a more meaningful message and other props
29
+ throw new FetcherError(error);
30
+ }
31
+
32
+ throw error;
33
+ }
34
+ };
@@ -0,0 +1,67 @@
1
+ import type { ExtraFetchParams, FetcherFunction } from '../../types';
2
+ import { FetcherError } from '../misc';
3
+
4
+ // @TODO may not work with node-fetch
5
+ type Fetch = typeof fetch;
6
+
7
+ export const constructFetcher =
8
+ (fetch: Fetch, extra?: ExtraFetchParams): FetcherFunction =>
9
+ async (params) => {
10
+ try {
11
+ const { url, method, requestParams } = params;
12
+ const body = method === 'POST' ? JSON.stringify(params.data) : null;
13
+ // Only JSON response for POST requests
14
+ const POSTheaders =
15
+ method === 'POST' && body
16
+ ? {
17
+ 'Content-Type': 'application/json',
18
+ }
19
+ : undefined;
20
+
21
+ // adding apiKey to headers if it's provided
22
+ const apiHeaders = extra?.apiKey
23
+ ? { 'X-API-KEY': extra.apiKey }
24
+ : undefined;
25
+
26
+ // all headers combined
27
+ const headers =
28
+ POSTheaders || apiHeaders || params.headers || requestParams?.headers
29
+ ? {
30
+ ...apiHeaders,
31
+ ...POSTheaders,
32
+ ...params.headers,
33
+ ...requestParams?.headers,
34
+ }
35
+ : undefined;
36
+
37
+ const response = await fetch(url, {
38
+ method,
39
+ body,
40
+ ...requestParams,
41
+ headers,
42
+ });
43
+
44
+ const data = await response.json();
45
+
46
+ if (!response.ok) {
47
+ // @TODO figure out if this works analogous to AxiosError, especially code ==? status
48
+ throw new FetcherError({
49
+ code: String(response.status),
50
+ response: {
51
+ data,
52
+ status: response.status,
53
+ statusText: response.statusText,
54
+ headers: Object.fromEntries(response.headers.entries()),
55
+ config: { url, method },
56
+ },
57
+ message: response.statusText,
58
+ isAxiosError: false,
59
+ });
60
+ }
61
+
62
+ return data;
63
+ } catch (error: any) {
64
+ if (error instanceof FetcherError) throw error;
65
+ throw new FetcherError(error);
66
+ }
67
+ };
@@ -0,0 +1,27 @@
1
+ import { EthersV5ProviderDeps } from './providers/ethers';
2
+ import { EthersV6ProviderDeps } from './providers/ethersV6';
3
+ export { constructFetcher as constructAxiosFetcher } from './fetchers/axios';
4
+ export { constructFetcher as constructFetchFetcher } from './fetchers/fetch';
5
+ export {
6
+ constructEthersV5ContractCaller as constructEthersContractCaller,
7
+ constructEthersV5ContractCaller,
8
+ EthersV5ProviderDeps,
9
+ } from './providers/ethers';
10
+ export {
11
+ constructContractCaller as constructEthersV6ContractCaller,
12
+ EthersV6ProviderDeps,
13
+ } from './providers/ethersV6';
14
+ export type EthersProviderDeps = EthersV5ProviderDeps | EthersV6ProviderDeps;
15
+
16
+ export {
17
+ constructContractCaller as constructWeb3ContractCaller,
18
+ Web3UnpromiEvent,
19
+ } from './providers/web3';
20
+ export {
21
+ constructContractCaller as constructViemContractCaller,
22
+ MinViemClient,
23
+ txParamsToViemTxParams,
24
+ } from './providers/viem';
25
+ export { constructToken } from './token';
26
+ export { isFetcherError } from './misc';
27
+ export type { FetcherError, FetcherErrorInterface } from './misc';