@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,121 @@
1
+ import { getRandomInt } from '../../../helpers/misc';
2
+ import type { Address, APIVersion } from '../../../types';
3
+ import {
4
+ Domain,
5
+ name,
6
+ version,
7
+ ZERO_ADDRESS,
8
+ } from '../../common/orders/buildOrderData';
9
+
10
+ const Order = [
11
+ { name: 'nonceAndMeta', type: 'uint256' },
12
+ { name: 'expiry', type: 'uint128' },
13
+ { name: 'makerAsset', type: 'address' },
14
+ { name: 'takerAsset', type: 'address' },
15
+ { name: 'maker', type: 'address' },
16
+ { name: 'taker', type: 'address' },
17
+ { name: 'makerAmount', type: 'uint256' },
18
+ { name: 'takerAmount', type: 'uint256' },
19
+ ];
20
+
21
+ export interface BuildOrderDataInput {
22
+ chainId: number;
23
+ verifyingContract: Address;
24
+ nonce?: number;
25
+ expiry: number;
26
+ makerAsset: Address;
27
+ takerAsset: Address;
28
+ makerAmount: string;
29
+ takerAmount: string;
30
+ maker: Address;
31
+ // OrderData.taker must be Augustus (or other Executor) for p2p limitOrders to involve swap through Augustus
32
+ /** @description actual user taker which will go into nonceAndMeta */
33
+ taker?: Address;
34
+ /** @description contract executor (Augustus or similar) that is allowed to execute the order, gois in Order.taker */
35
+ contractTaker?: Address;
36
+
37
+ AugustusAddress: Address;
38
+ AppVersion: APIVersion;
39
+ }
40
+
41
+ export type SignableOrderData = {
42
+ types: { Order: typeof Order };
43
+ domain: Domain;
44
+ data: OrderData;
45
+ };
46
+
47
+ export type OrderData = {
48
+ nonceAndMeta: string;
49
+ expiry: number;
50
+ makerAsset: string;
51
+ takerAsset: string;
52
+ maker: string;
53
+ taker: string;
54
+ makerAmount: string;
55
+ takerAmount: string;
56
+ };
57
+
58
+ export function buildOrderData({
59
+ chainId,
60
+ verifyingContract,
61
+ nonce = getRandomInt(),
62
+ expiry,
63
+ makerAsset,
64
+ takerAsset,
65
+ makerAmount,
66
+ takerAmount,
67
+ maker,
68
+ AugustusAddress,
69
+ // if taker is specified -- p2p order for that taker only to fill through Augustus (v5) or directly (v6)-- taker = Augustus | _taker, takerInNonce = _taker
70
+ // if taker is not specified -- limitOrder for anyone to fill through Augustus or not -- taker = Zero, takerInNonce = Zero
71
+ taker: takerInNonce = ZERO_ADDRESS,
72
+ // if given, overrides the above choices made based on `taker`
73
+ contractTaker,
74
+ // for v6 only support taker=_taker for OTC orders
75
+ AppVersion,
76
+ }: BuildOrderDataInput): SignableOrderData {
77
+ // first 160 bits is taker address (for p2p orders),
78
+ // or 0 for limitOrders, so that anyone can be the taker of the Order
79
+ const nonceAndMeta = (
80
+ BigInt(takerInNonce) +
81
+ (BigInt(nonce) << BigInt(160))
82
+ ).toString(10);
83
+
84
+ let taker: string;
85
+ // contractTaker overrides always
86
+ if (contractTaker) {
87
+ taker = contractTaker;
88
+ } else if (takerInNonce === ZERO_ADDRESS) {
89
+ // no takerInNonce -> not p2p order -> allow anyone to fill (not only Augustus)
90
+ taker = ZERO_ADDRESS;
91
+ } else {
92
+ // otherwise for p2p order ->
93
+ if (AppVersion.startsWith('6.')) {
94
+ //support 6.1+ versions
95
+
96
+ // limit taker to EOA for v6 version (no Arbitrary Token Swaps + OTC Fill, or OTC Fill through AugustusSwapper)
97
+ taker = takerInNonce;
98
+ } else {
99
+ // on v5
100
+ // -> fill through Augustus only
101
+ taker = AugustusAddress;
102
+ }
103
+ }
104
+
105
+ const order: OrderData = {
106
+ nonceAndMeta,
107
+ expiry,
108
+ makerAsset,
109
+ takerAsset,
110
+ maker,
111
+ taker,
112
+ makerAmount,
113
+ takerAmount,
114
+ };
115
+
116
+ return {
117
+ types: { Order },
118
+ domain: { name, version, chainId, verifyingContract },
119
+ data: order,
120
+ };
121
+ }
@@ -0,0 +1,64 @@
1
+ import {
2
+ BaseFetchUrl,
3
+ baseFetchUrlGetterFactory,
4
+ BaseFetchUrlInputConstructor,
5
+ MinFetchUrl,
6
+ OrderFillableBalanceFetchUrl,
7
+ } from '../../common/orders/misc';
8
+ import type { OrderData } from './buildOrderData';
9
+
10
+ export function sanitizeOrderData({
11
+ nonceAndMeta,
12
+ expiry,
13
+ makerAsset,
14
+ takerAsset,
15
+ maker,
16
+ taker,
17
+ makerAmount,
18
+ takerAmount,
19
+ }: OrderData & Record<string, any>): OrderData {
20
+ return {
21
+ nonceAndMeta,
22
+ expiry,
23
+ makerAsset,
24
+ takerAsset,
25
+ maker,
26
+ taker,
27
+ makerAmount,
28
+ takerAmount,
29
+ };
30
+ }
31
+
32
+ /*
33
+ GET
34
+ /ft/orders/:chainId/maker/:walletAddress
35
+ /ft/orders/:chainId/taker/:walletAddress
36
+ /ft/p2p/:chainId/maker/:walletAddress
37
+ /ft/p2p/:chainId/taker/:walletAddress
38
+ */
39
+ export type GetOrdersURLs = `${BaseFetchUrl<'ft'>}/${
40
+ | 'taker'
41
+ | 'maker'}/${string}`;
42
+
43
+ /*
44
+ GET
45
+ /ft/fillablebalance/:chainId/:walletAddress/:makerAsset?
46
+ */
47
+ export type GetRequiredAllowanceURL =
48
+ `${OrderFillableBalanceFetchUrl<'ft'>}/${string}${`/${string}` | ''}`;
49
+
50
+ /*
51
+ GET
52
+ /ft/order/:orderHash (get you p2p or orders)
53
+ */
54
+ export type GetOrderURL = `${MinFetchUrl<'ft'>}/${string}`;
55
+
56
+ /*
57
+ POST create order
58
+ /ft/orders/:chainId/
59
+ /ft/p2p/:chainId/
60
+ */
61
+ export type PostOrderURLs = BaseFetchUrl<'ft'>;
62
+
63
+ export const constructBaseFetchUrlGetter: BaseFetchUrlInputConstructor<'ft'> =
64
+ baseFetchUrlGetterFactory('ft');
@@ -0,0 +1,70 @@
1
+ import type { OrderData } from './buildOrderData';
2
+
3
+ export type LimitOrderType = 'LIMIT' | 'P2P';
4
+
5
+ export type LimitOrder = LimitOrderFromApi;
6
+
7
+ export type LimitOrderToSend = OrderData & {
8
+ permitMakerAsset?: string;
9
+ signature: string;
10
+ };
11
+
12
+ export type LimitOrdersApiResponse = {
13
+ limit: number;
14
+ offset: number;
15
+ total: number;
16
+ hasMore: boolean;
17
+ orders: LimitOrderFromApi[];
18
+ };
19
+ export type LimitOrderApiResponse = {
20
+ order: LimitOrderFromApi;
21
+ };
22
+
23
+ // display states such as EXPIRED and PARTIALLY_FILLLED derived on client side
24
+ // returned by API but can be calculated too, EXPIRED == order.expiry < Date.now()/1000
25
+ // PARTIALLY_FILLED == order.fillableBalance < order.makerAmount && order.fillableBalance !== '0'
26
+ // SUSPENDED status was introduced for Limit orders to indicate that orders where makers lacked sufficient funds
27
+ // to fulfill them would no longer be tracked. This status is similar to CANCELLED, but it reduces any ambiguity that might
28
+ // arise when debugging or when users view their CANCELLED orders.
29
+ export type LimitOrderState =
30
+ | 'DRAFT'
31
+ | 'PENDING'
32
+ | 'FULFILLED'
33
+ | 'CANCELLED'
34
+ | 'SUSPENDED'
35
+ | 'EXPIRED';
36
+
37
+ export type LimitOrderEvent = '';
38
+
39
+ export type LimitOrderTransaction = {
40
+ hash: string;
41
+ event_type: 'OrderFilled' | 'OrderCancelled';
42
+ };
43
+
44
+ export type LimitOrderFromApi = {
45
+ chainId: number;
46
+ nonceAndMeta: string; // uiint
47
+ expiry: number; // timestamp
48
+ maker: string; // address
49
+ taker: string; // address
50
+ makerAsset: string; // address
51
+ takerAsset: string; // address
52
+ makerAmount: string; // wei
53
+ takerAmount: string; // wei
54
+ makerBalance: string; // min(fillableBalance, allowance(maker), balance(maker)]
55
+ signature: string; // supplied by FE
56
+ permitMakerAsset: null | string; // address
57
+ orderHash: string; // hex string
58
+ createdAt: number; // timestamp
59
+ updatedAt: number; // timestamp
60
+ state: LimitOrderState;
61
+ /** @description transaction with the last event pertaining to the order: OrderFilled or OrderCancelled */
62
+ transactionHash: null | string;
63
+ // not yet returned
64
+ // transactions: LimitOrderTransaction[];
65
+ type: LimitOrderType;
66
+ takerFromMeta: string; // the intended receiver, eg receiving address of p2p order where `taker` would be augustus
67
+ fillableBalance: string; // amount that remains to be filled
68
+ reservedBalance: string; // amount that is currently reserved in this order
69
+ swappableBalance: string; // actual amount that can be filled at this time
70
+ };
@@ -0,0 +1,154 @@
1
+ import type {
2
+ ConstructProviderFetchInput,
3
+ RequestParameters,
4
+ } from '../../types';
5
+ import type { LimitOrderToSend, LimitOrderFromApi } from './helpers/types';
6
+ import {
7
+ BuildLimitOrderFunctions,
8
+ BuildLimitOrderInput,
9
+ constructBuildLimitOrder,
10
+ } from './buildOrder';
11
+ import {
12
+ CancelLimitOrderFunctions,
13
+ constructCancelLimitOrder,
14
+ } from './cancelOrder';
15
+ import { constructGetLimitOrders, GetLimitOrdersFunctions } from './getOrders';
16
+ import { constructPostLimitOrder, PostLimitOrderFunctions } from './postOrder';
17
+ import { constructSignLimitOrder, SignLimitOrderFunctions } from './signOrder';
18
+ import {
19
+ constructApproveTokenForLimitOrder,
20
+ ApproveTokenForLimitOrderFunctions,
21
+ } from './approveForOrder';
22
+ import {
23
+ GetLimitOrdersContractFunctions,
24
+ constructGetLimitOrdersContract,
25
+ } from './getOrdersContract';
26
+ import {
27
+ BuildLimitOrdersTxFunctions,
28
+ constructBuildLimitOrderTx,
29
+ } from './transaction';
30
+ import type { Address } from '@paraswap/core';
31
+ import {
32
+ FillOrderDirectlyFunctions,
33
+ constructFillOrderDirectly,
34
+ } from './fillOrderDirectly';
35
+
36
+ type SubmitLimitOrder = (
37
+ buildLimitOrderParams: BuildLimitOrderInput,
38
+ extra?: { permitMakerAsset?: string },
39
+ requestParams?: RequestParameters
40
+ ) => Promise<LimitOrderFromApi>;
41
+
42
+ type SubmitP2POrder = (
43
+ buildLimitOrderParams: BuildLimitOrderInput & { taker: Address },
44
+ extra?: { permitMakerAsset?: string },
45
+ requestParams?: RequestParameters
46
+ ) => Promise<LimitOrderFromApi>;
47
+
48
+ export type SubmitLimitOrderFuncs = {
49
+ submitLimitOrder: SubmitLimitOrder;
50
+ submitP2POrder: SubmitP2POrder;
51
+ };
52
+
53
+ export const constructSubmitLimitOrder = (
54
+ options: ConstructProviderFetchInput<any, 'signTypedDataCall'>
55
+ ): SubmitLimitOrderFuncs => {
56
+ const { buildLimitOrder } = constructBuildLimitOrder(options);
57
+ const { signLimitOrder } = constructSignLimitOrder(options);
58
+ const { postLimitOrder, postP2POrder } = constructPostLimitOrder(options);
59
+
60
+ const prepareLimitOrder = async (
61
+ buildLimitOrderParams: BuildLimitOrderInput,
62
+ extra?: { permitMakerAsset?: string }
63
+ ): Promise<LimitOrderToSend> => {
64
+ const orderData = await buildLimitOrder(buildLimitOrderParams);
65
+ const signature = await signLimitOrder(orderData);
66
+
67
+ const orderWithSignature: LimitOrderToSend = {
68
+ ...orderData.data,
69
+ ...extra,
70
+ signature,
71
+ };
72
+
73
+ return orderWithSignature;
74
+ };
75
+
76
+ const submitLimitOrder: SubmitLimitOrder = async (
77
+ buildLimitOrderParams,
78
+ extra = {},
79
+ requestParams
80
+ ) => {
81
+ const orderWithSignature: LimitOrderToSend = await prepareLimitOrder(
82
+ buildLimitOrderParams,
83
+ extra
84
+ );
85
+
86
+ const newOrder = await postLimitOrder(orderWithSignature, requestParams);
87
+
88
+ return newOrder;
89
+ };
90
+
91
+ const submitP2POrder: SubmitP2POrder = async (
92
+ buildLimitOrderParams,
93
+ extra = {},
94
+ requestParams
95
+ ) => {
96
+ const orderWithSignature: LimitOrderToSend = await prepareLimitOrder(
97
+ buildLimitOrderParams,
98
+ extra
99
+ );
100
+
101
+ const newOrder = await postP2POrder(orderWithSignature, requestParams);
102
+
103
+ return newOrder;
104
+ };
105
+
106
+ return { submitLimitOrder, submitP2POrder };
107
+ };
108
+
109
+ export type LimitOrderHandlers<T> = SubmitLimitOrderFuncs &
110
+ BuildLimitOrderFunctions &
111
+ SignLimitOrderFunctions &
112
+ PostLimitOrderFunctions &
113
+ GetLimitOrdersFunctions &
114
+ GetLimitOrdersContractFunctions &
115
+ BuildLimitOrdersTxFunctions &
116
+ CancelLimitOrderFunctions<T> &
117
+ ApproveTokenForLimitOrderFunctions<T> &
118
+ FillOrderDirectlyFunctions<T>;
119
+
120
+ /** @description construct SDK with every LimitOrders-related method, fetching from API and contract calls */
121
+ export const constructAllLimitOrdersHandlers = <TxResponse>(
122
+ options: ConstructProviderFetchInput<
123
+ TxResponse,
124
+ 'signTypedDataCall' | 'transactCall' | 'staticCall'
125
+ >
126
+ ): LimitOrderHandlers<TxResponse> => {
127
+ const limitOrdersGetters = constructGetLimitOrders(options);
128
+ const limitOrdersContractGetter = constructGetLimitOrdersContract(options);
129
+
130
+ const limitOrdersSubmit = constructSubmitLimitOrder(options);
131
+ const limitOrdersBuild = constructBuildLimitOrder(options);
132
+ const limitOrdersSign = constructSignLimitOrder(options);
133
+ const limitOrdersPost = constructPostLimitOrder(options);
134
+
135
+ const limitOrdersCancel = constructCancelLimitOrder(options);
136
+ const limitOrdersApproveToken = constructApproveTokenForLimitOrder(options);
137
+
138
+ const limitOrdersFillOrderDirectly = constructFillOrderDirectly(options);
139
+
140
+ const limitOrdersBuildTx = constructBuildLimitOrderTx(options);
141
+
142
+ return {
143
+ ...limitOrdersGetters,
144
+ ...limitOrdersContractGetter,
145
+ ...limitOrdersSubmit,
146
+ ...limitOrdersBuild,
147
+ ...limitOrdersSign,
148
+ ...limitOrdersPost,
149
+ ...limitOrdersCancel,
150
+ ...limitOrdersApproveToken,
151
+ ...limitOrdersFillOrderDirectly,
152
+ ...limitOrdersBuildTx,
153
+ };
154
+ };
@@ -0,0 +1,74 @@
1
+ import { API_URL } from '../../constants';
2
+ import type { ConstructFetchInput, RequestParameters } from '../../types';
3
+ import { constructBaseFetchUrlGetter, PostOrderURLs } from './helpers/misc';
4
+ import type {
5
+ LimitOrderApiResponse,
6
+ LimitOrderToSend,
7
+ LimitOrderFromApi,
8
+ LimitOrderType,
9
+ } from './helpers/types';
10
+
11
+ type PostLimitOrder = (
12
+ limitOrderWithSignatureAndPermit: LimitOrderToSend,
13
+ requestParams?: RequestParameters
14
+ ) => Promise<LimitOrderFromApi>;
15
+
16
+ export type PostLimitOrderFunctions = {
17
+ postLimitOrder: PostLimitOrder;
18
+ postP2POrder: PostLimitOrder;
19
+ };
20
+
21
+ export const constructPostLimitOrder = ({
22
+ apiURL = API_URL,
23
+ chainId,
24
+ fetcher,
25
+ }: ConstructFetchInput): PostLimitOrderFunctions => {
26
+ const getBaseFetchURLByOrderType = constructBaseFetchUrlGetter({
27
+ apiURL,
28
+ chainId,
29
+ });
30
+
31
+ const postTypedOrder = async (
32
+ limitOrderWithSignatureAndPermit: LimitOrderToSend,
33
+ type: LimitOrderType,
34
+ requestParams?: RequestParameters
35
+ ): Promise<LimitOrderFromApi> => {
36
+ const fetchURL = getBaseFetchURLByOrderType(type);
37
+
38
+ const { order: newOrder } = await fetcher<
39
+ LimitOrderApiResponse,
40
+ PostOrderURLs
41
+ >({
42
+ url: fetchURL,
43
+ method: 'POST',
44
+ data: limitOrderWithSignatureAndPermit,
45
+ requestParams,
46
+ });
47
+
48
+ return newOrder;
49
+ };
50
+
51
+ const postLimitOrder: PostLimitOrder = (
52
+ limitOrderWithSignatureAndPermit,
53
+ requestParams
54
+ ) => {
55
+ return postTypedOrder(
56
+ limitOrderWithSignatureAndPermit,
57
+ 'LIMIT',
58
+ requestParams
59
+ );
60
+ };
61
+
62
+ const postP2POrder: PostLimitOrder = (
63
+ limitOrderWithSignatureAndPermit,
64
+ requestParams
65
+ ) => {
66
+ return postTypedOrder(
67
+ limitOrderWithSignatureAndPermit,
68
+ 'P2P',
69
+ requestParams
70
+ );
71
+ };
72
+
73
+ return { postLimitOrder, postP2POrder };
74
+ };
@@ -0,0 +1,29 @@
1
+ import type { ConstructProviderFetchInput } from '../../types';
2
+ import type { SignableOrderData } from './buildOrder';
3
+ import { sanitizeOrderData } from './helpers/misc';
4
+
5
+ export type SignLimitOrderFunctions = {
6
+ signLimitOrder: (signableOrderData: SignableOrderData) => Promise<string>;
7
+ };
8
+
9
+ // returns whatever `contractCaller` returns
10
+ // to allow for better versatility
11
+ export const constructSignLimitOrder = (
12
+ options: Pick<
13
+ ConstructProviderFetchInput<any, 'signTypedDataCall'>,
14
+ 'contractCaller'
15
+ >
16
+ ): SignLimitOrderFunctions => {
17
+ const signLimitOrder: SignLimitOrderFunctions['signLimitOrder'] = (
18
+ typedData
19
+ ) => {
20
+ // types allow to pass OrderData & extra_stuff, but tx will break like that
21
+ const typedDataOnly: SignableOrderData = {
22
+ ...typedData,
23
+ data: sanitizeOrderData(typedData.data),
24
+ };
25
+ return options.contractCaller.signTypedDataCall(typedDataOnly);
26
+ };
27
+
28
+ return { signLimitOrder };
29
+ };