@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,92 @@
1
+ import {
2
+ BaseFetchUrl,
3
+ baseFetchUrlGetterFactory,
4
+ BaseFetchUrlInputConstructor,
5
+ MinFetchUrl,
6
+ } from '../../common/orders/misc';
7
+ import {
8
+ assetAddressToUint,
9
+ BuildNFTOrderDataInput,
10
+ NFTOrderData,
11
+ } from './buildOrderData';
12
+
13
+ // any number can be assigned to AssetType enum
14
+ // https://github.com/Microsoft/TypeScript/issues/22311
15
+ // export enum AssetType {
16
+ // ERC20 = 0,
17
+ // ERC1155 = 1,
18
+ // ERC721 = 2,
19
+ // }
20
+
21
+ export const AssetType = {
22
+ ERC20: 0,
23
+ ERC1155: 1,
24
+ ERC721: 2,
25
+ } as const;
26
+
27
+ export function sanitizeOrderData({
28
+ nonceAndMeta,
29
+ expiry,
30
+ makerAsset: _makerAsset,
31
+ takerAsset: _takerAsset,
32
+ maker,
33
+ taker,
34
+ makerAmount,
35
+ takerAmount,
36
+ makerAssetId,
37
+ takerAssetId,
38
+ // asset types provided when Order has them ,e.g. got Order by hash from API
39
+ makerAssetType,
40
+ takerAssetType,
41
+ }: NFTOrderData &
42
+ Partial<Pick<BuildNFTOrderDataInput, 'makerAssetType' | 'takerAssetType'>> &
43
+ Record<string, any>): NFTOrderData {
44
+ const makerAsset =
45
+ makerAssetType !== undefined && _makerAsset.startsWith('0x')
46
+ ? assetAddressToUint(_makerAsset, makerAssetType)
47
+ : _makerAsset;
48
+ const takerAsset =
49
+ takerAssetType !== undefined && _takerAsset.startsWith('0x')
50
+ ? assetAddressToUint(_takerAsset, takerAssetType)
51
+ : _takerAsset;
52
+
53
+ return {
54
+ nonceAndMeta,
55
+ expiry,
56
+ makerAsset,
57
+ takerAsset,
58
+ maker,
59
+ taker,
60
+ makerAmount,
61
+ takerAmount,
62
+ makerAssetId,
63
+ takerAssetId,
64
+ };
65
+ }
66
+
67
+ /*
68
+ GET
69
+ /nft/orders/:chainId/maker/:walletAddress
70
+ /nft/orders/:chainId/taker/:walletAddress
71
+ /nft/p2p/:chainId/maker/:walletAddress
72
+ /nft/p2p/:chainId/taker/:walletAddress
73
+ */
74
+ export type GetOrdersURLs = `${BaseFetchUrl<'nft'>}/${
75
+ | 'taker'
76
+ | 'maker'}/${string}`;
77
+
78
+ /*
79
+ GET
80
+ /nft/order/:orderHash (get you p2p or orders)
81
+ */
82
+ export type GetOrderURL = `${MinFetchUrl<'nft'>}/${string}`;
83
+
84
+ /*
85
+ POST create order
86
+ /nft/orders/:chainId/
87
+ /nft/p2p/:chainId/
88
+ */
89
+ export type PostOrderURLs = BaseFetchUrl<'nft'>;
90
+
91
+ export const constructBaseFetchUrlGetter: BaseFetchUrlInputConstructor<'nft'> =
92
+ baseFetchUrlGetterFactory('nft');
@@ -0,0 +1,50 @@
1
+ import type { Address } from '../../../types';
2
+ import type { NFTOrderData } from './buildOrderData';
3
+ import type { AssetType } from './misc';
4
+
5
+ export type NFTOrderTransaction = {
6
+ hash: string;
7
+ event_type: 'OrderFilled' | 'OrderCancelled';
8
+ };
9
+
10
+ export type NFTOrderType = 'LIMIT' | 'P2P';
11
+
12
+ export type NFTOrderToSend = NFTOrderData & {
13
+ signature: string;
14
+ permitMakerAsset?: string;
15
+ };
16
+
17
+ // display states such as EXPIRED and PARTIALLY_FILLLED derived on client side
18
+ // returned by API but can be calculated too, EXPIRED == order.expiry < Date.now()/1000
19
+ // PARTIALLY_FILLED == order.fillableBalance < order.makerAmount && order.fillableBalance !== '0'
20
+ export type NFTOrderState = 'PENDING' | 'FULFILLED' | 'CANCELLED' | 'EXPIRED';
21
+
22
+ export type NFTOrderFromAPI = NFTOrderToSend & {
23
+ chainId: number;
24
+ makerAsset: Address;
25
+ takerAsset: Address;
26
+ createdAt: number; // timestamp
27
+ updatedAt: number; // timestamp
28
+ makerAssetType: AssetTypeVariant;
29
+ takerAssetType: AssetTypeVariant;
30
+ makerBalance: string; // min(fillableBalance, allowance(maker), balance(maker)]
31
+ fillableBalance: string; // amount that remains to be filled
32
+ orderHash: string;
33
+ permitMakerAsset: null | string;
34
+ state: NFTOrderState;
35
+ takerFromMeta: string; // the intended receiver, eg receiving address of p2p order where `taker` would be augustus
36
+ type: NFTOrderType;
37
+ /** @description transaction with the last event pertaining to the order: OrderFilled or OrderCancelled */
38
+ transactionHash: null | string;
39
+ // not yet returned
40
+ // transactions: NftOrderTransaction[];
41
+ };
42
+
43
+ export type NFTOrdersApiResponse = {
44
+ orders: NFTOrderFromAPI[];
45
+ };
46
+ export type NFTOrderApiResponse = {
47
+ order: NFTOrderFromAPI;
48
+ };
49
+
50
+ export type AssetTypeVariant = (typeof AssetType)[keyof typeof AssetType];
@@ -0,0 +1,139 @@
1
+ import type {
2
+ ConstructProviderFetchInput,
3
+ RequestParameters,
4
+ } from '../../types';
5
+ import type { NFTOrderToSend, NFTOrderFromAPI } from './helpers/types';
6
+ import {
7
+ BuildNFTOrderFunctions,
8
+ BuildNFTOrderInput,
9
+ constructBuildNFTOrder,
10
+ } from './buildOrder';
11
+ import {
12
+ CancelNFTOrderFunctions,
13
+ constructCancelNFTOrder,
14
+ } from './cancelOrder';
15
+ import { constructGetNFTOrders, GetNFTOrdersFunctions } from './getOrders';
16
+ import { constructPostNFTOrder, PostNFTOrderFunctions } from './postOrder';
17
+ import { constructSignNFTOrder, SignNFTOrderFunctions } from './signOrder';
18
+ import {
19
+ constructApproveTokenForNFTOrder,
20
+ ApproveTokenForNFTOrderFunctions,
21
+ } from './approveForOrder';
22
+ import {
23
+ GetNFTOrdersContractFunctions,
24
+ constructGetNFTOrdersContract,
25
+ } from './getOrdersContract';
26
+ import {
27
+ BuildNFTOrdersTxFunctions,
28
+ constructBuildNFTOrderTx,
29
+ } from './transaction';
30
+
31
+ type SubmitNFTOrder = (
32
+ buildNFTOrderParams: BuildNFTOrderInput,
33
+ extra?: { permitMakerAsset?: string },
34
+ requestParams?: RequestParameters
35
+ ) => Promise<NFTOrderFromAPI>;
36
+
37
+ export type SubmitNFTOrderFuncs = {
38
+ submitNFTOrder: SubmitNFTOrder;
39
+ submitP2POrder: SubmitNFTOrder;
40
+ };
41
+
42
+ export const constructSubmitNFTOrder = (
43
+ options: ConstructProviderFetchInput<any, 'signTypedDataCall'>
44
+ ): SubmitNFTOrderFuncs => {
45
+ const { buildNFTOrder } = constructBuildNFTOrder(options);
46
+ const { signNFTOrder } = constructSignNFTOrder(options);
47
+ const { postNFTLimitOrder, postNFTP2POrder } = constructPostNFTOrder(options);
48
+
49
+ const prepareNFTOrder = async (
50
+ buildNFTOrderParams: BuildNFTOrderInput,
51
+ extra?: { permitMakerAsset?: string }
52
+ ): Promise<NFTOrderToSend> => {
53
+ const orderData = await buildNFTOrder(buildNFTOrderParams);
54
+ const signature = await signNFTOrder(orderData);
55
+
56
+ const orderWithSignature: NFTOrderToSend = {
57
+ ...orderData.data,
58
+ ...extra,
59
+ signature,
60
+ };
61
+
62
+ return orderWithSignature;
63
+ };
64
+
65
+ const submitNFTOrder: SubmitNFTOrder = async (
66
+ buildNFTOrderParams,
67
+ extra = {},
68
+ requestParams
69
+ ) => {
70
+ const orderWithSignature: NFTOrderToSend = await prepareNFTOrder(
71
+ buildNFTOrderParams,
72
+ extra
73
+ );
74
+
75
+ const newOrder = await postNFTLimitOrder(orderWithSignature, requestParams);
76
+
77
+ return newOrder;
78
+ };
79
+
80
+ const submitP2POrder: SubmitNFTOrder = async (
81
+ buildNFTOrderParams,
82
+ extra = {},
83
+ requestParams
84
+ ) => {
85
+ const orderWithSignature: NFTOrderToSend = await prepareNFTOrder(
86
+ buildNFTOrderParams,
87
+ extra
88
+ );
89
+
90
+ const newOrder = await postNFTP2POrder(orderWithSignature, requestParams);
91
+
92
+ return newOrder;
93
+ };
94
+
95
+ return { submitNFTOrder, submitP2POrder };
96
+ };
97
+
98
+ export type NFTOrderHandlers<T> = SubmitNFTOrderFuncs &
99
+ BuildNFTOrderFunctions &
100
+ SignNFTOrderFunctions &
101
+ PostNFTOrderFunctions &
102
+ GetNFTOrdersFunctions &
103
+ GetNFTOrdersContractFunctions &
104
+ BuildNFTOrdersTxFunctions &
105
+ CancelNFTOrderFunctions<T> &
106
+ ApproveTokenForNFTOrderFunctions<T>;
107
+
108
+ /** @description construct SDK with every NFTOrders-related method, fetching from API and contract calls */
109
+ export const constructAllNFTOrdersHandlers = <TxResponse>(
110
+ options: ConstructProviderFetchInput<
111
+ TxResponse,
112
+ 'signTypedDataCall' | 'transactCall' | 'staticCall'
113
+ >
114
+ ): NFTOrderHandlers<TxResponse> => {
115
+ const NFTOrdersGetters = constructGetNFTOrders(options);
116
+ const NFTOrdersContractGetter = constructGetNFTOrdersContract(options);
117
+
118
+ const NFTOrdersSubmit = constructSubmitNFTOrder(options);
119
+ const NFTOrdersBuild = constructBuildNFTOrder(options);
120
+ const NFTOrdersSign = constructSignNFTOrder(options);
121
+ const NFTOrdersPost = constructPostNFTOrder(options);
122
+
123
+ const NFTOrdersCancel = constructCancelNFTOrder(options);
124
+ const NFTOrdersApproveToken = constructApproveTokenForNFTOrder(options);
125
+
126
+ const NFTOrdersBuildTx = constructBuildNFTOrderTx(options);
127
+
128
+ return {
129
+ ...NFTOrdersGetters,
130
+ ...NFTOrdersContractGetter,
131
+ ...NFTOrdersSubmit,
132
+ ...NFTOrdersBuild,
133
+ ...NFTOrdersSign,
134
+ ...NFTOrdersPost,
135
+ ...NFTOrdersCancel,
136
+ ...NFTOrdersApproveToken,
137
+ ...NFTOrdersBuildTx,
138
+ };
139
+ };
@@ -0,0 +1,71 @@
1
+ import { API_URL } from '../../constants';
2
+ import type { ConstructFetchInput, RequestParameters } from '../../types';
3
+ import { constructBaseFetchUrlGetter, PostOrderURLs } from './helpers/misc';
4
+ import type {
5
+ NFTOrderToSend,
6
+ NFTOrderType,
7
+ NFTOrderFromAPI,
8
+ NFTOrderApiResponse,
9
+ } from './helpers/types';
10
+
11
+ type PostNFTOrder = (
12
+ NFTOrderWithSignatureAndPermit: NFTOrderToSend,
13
+ requestParams?: RequestParameters
14
+ ) => Promise<NFTOrderFromAPI>;
15
+
16
+ export type PostNFTOrderFunctions = {
17
+ postNFTLimitOrder: PostNFTOrder;
18
+ postNFTP2POrder: PostNFTOrder;
19
+ };
20
+
21
+ export const constructPostNFTOrder = ({
22
+ apiURL = API_URL,
23
+ chainId,
24
+ fetcher,
25
+ }: ConstructFetchInput): PostNFTOrderFunctions => {
26
+ const getBaseFetchURLByOrderType = constructBaseFetchUrlGetter({
27
+ apiURL,
28
+ chainId,
29
+ });
30
+
31
+ const postTypedOrder = async (
32
+ NFTOrderWithSignatureAndPermit: NFTOrderToSend,
33
+ type: NFTOrderType,
34
+ requestParams?: RequestParameters
35
+ ): Promise<NFTOrderFromAPI> => {
36
+ const fetchURL = getBaseFetchURLByOrderType(type);
37
+
38
+ // @TODO check API return matches
39
+ const { order: newOrder } = await fetcher<
40
+ NFTOrderApiResponse,
41
+ PostOrderURLs
42
+ >({
43
+ url: fetchURL,
44
+ method: 'POST',
45
+ data: NFTOrderWithSignatureAndPermit,
46
+ requestParams,
47
+ });
48
+
49
+ return { ...newOrder };
50
+ };
51
+
52
+ const postNFTLimitOrder: PostNFTOrder = (
53
+ NFTOrderWithSignatureAndPermit,
54
+ requestParams
55
+ ) => {
56
+ return postTypedOrder(
57
+ NFTOrderWithSignatureAndPermit,
58
+ 'LIMIT',
59
+ requestParams
60
+ );
61
+ };
62
+
63
+ const postNFTP2POrder: PostNFTOrder = (
64
+ NFTOrderWithSignatureAndPermit,
65
+ requestParams
66
+ ) => {
67
+ return postTypedOrder(NFTOrderWithSignatureAndPermit, 'P2P', requestParams);
68
+ };
69
+
70
+ return { postNFTLimitOrder, postNFTP2POrder };
71
+ };
@@ -0,0 +1,29 @@
1
+ import type { ConstructProviderFetchInput } from '../../types';
2
+ import type { SignableNFTOrderData } from './buildOrder';
3
+ import { sanitizeOrderData } from './helpers/misc';
4
+
5
+ export type SignNFTOrderFunctions = {
6
+ signNFTOrder: (signableOrderData: SignableNFTOrderData) => Promise<string>;
7
+ };
8
+
9
+ // returns whatever `contractCaller` returns
10
+ // to allow for better versatility
11
+ export const constructSignNFTOrder = (
12
+ options: Pick<
13
+ ConstructProviderFetchInput<any, 'signTypedDataCall'>,
14
+ 'contractCaller'
15
+ >
16
+ ): SignNFTOrderFunctions => {
17
+ const signNFTOrder: SignNFTOrderFunctions['signNFTOrder'] = (typedData) => {
18
+ // types allow to pass OrderData & extra_stuff, but tx will break like that
19
+ const typedDataOnly: SignableNFTOrderData = {
20
+ ...typedData,
21
+ // here assetType isn't provided, SignableData must already have corrent BigIntAsString
22
+ // @TODO consider using `template_${types}` for Address, likely bad idea when considering 3rd-party code
23
+ data: sanitizeOrderData(typedData.data),
24
+ };
25
+ return options.contractCaller.signTypedDataCall(typedDataOnly);
26
+ };
27
+
28
+ return { signNFTOrder };
29
+ };
@@ -0,0 +1,234 @@
1
+ import type { Address, ConstructFetchInput, OptimalRate } from '../../types';
2
+
3
+ import { assert } from 'ts-essentials';
4
+ import {
5
+ API_URL,
6
+ SwapSide,
7
+ ContractMethod,
8
+ DEFAULT_VERSION,
9
+ } from '../../constants';
10
+ import {
11
+ BuildNFTOrderTxInput,
12
+ BuildOptions,
13
+ BuildSwapAndNFTOrderTxInput,
14
+ TransactionParams,
15
+ constructBuildTx,
16
+ } from '../swap/transaction';
17
+ import { constructGetRate, GetRateInput, RateOptions } from '../swap/rates';
18
+ import type { BigIntAsString, NFTOrderData } from './buildOrder';
19
+ import { isFilledArray } from '../../helpers/misc';
20
+ import type { RequestParameters } from '../../types';
21
+ type MinBuildSwapAndNFTOrderTxInput = Omit<
22
+ // these are derived from `orders`
23
+ BuildSwapAndNFTOrderTxInput,
24
+ 'srcToken' | 'srcAmount' | 'destToken' | 'destDecimals'
25
+ >;
26
+
27
+ type BuildSwapAndNFTOrdersTx = (
28
+ params: MinBuildSwapAndNFTOrderTxInput,
29
+ options?: BuildOptions,
30
+ requestParams?: RequestParameters
31
+ ) => Promise<TransactionParams>;
32
+
33
+ type MinBuildNFTOrderTxInput = Omit<
34
+ BuildNFTOrderTxInput,
35
+ // these are derived from `orders`
36
+ 'srcToken' | 'srcAmount' | 'destToken' | 'slippage'
37
+ // `slippage` doesn't participate as we derive `srcAmount` already
38
+ >;
39
+
40
+ type BuildNFTOrdersTx = (
41
+ params: MinBuildNFTOrderTxInput,
42
+ options?: BuildOptions,
43
+ requestParams?: RequestParameters
44
+ ) => Promise<TransactionParams>;
45
+
46
+ export type BuildNFTOrdersTxFunctions = {
47
+ getNFTOrdersRate: GetNFTOrdersRate;
48
+ buildNFTOrderTx: BuildNFTOrdersTx;
49
+ buildSwapAndNFTOrderTx: BuildSwapAndNFTOrdersTx;
50
+ };
51
+
52
+ type GetNFTOrdersRate = (
53
+ // `amount`, if given, must equal the total of the orders' `takerAmounts`
54
+ options: Omit<GetRateInput, 'amount' | 'side'> & { amount?: string },
55
+ orders: CheckableOrderData[],
56
+ requestParams?: RequestParameters
57
+ ) => Promise<OptimalRate>;
58
+
59
+ export const constructBuildNFTOrderTx = ({
60
+ apiURL = API_URL,
61
+ version = DEFAULT_VERSION,
62
+ chainId,
63
+ fetcher,
64
+ }: ConstructFetchInput): BuildNFTOrdersTxFunctions => {
65
+ const { buildTx: buildSwapTx } = constructBuildTx({
66
+ apiURL,
67
+ version,
68
+ chainId,
69
+ fetcher,
70
+ });
71
+
72
+ const { getRate: getSwapAndNFTOrderRate } = constructGetRate({
73
+ apiURL,
74
+ version,
75
+ chainId,
76
+ fetcher,
77
+ });
78
+
79
+ // returns priceRoute that would allow from swap from srcToken to destToken(=order.takerAsset) followed by filling NFT orders
80
+ const getNFTOrdersRate: GetNFTOrdersRate = async (
81
+ { srcToken, destToken, amount, options: _options = {}, ...rest },
82
+ orders,
83
+ requestParams
84
+ ) => {
85
+ assert(orders.length > 0, 'must pass at least 1 order');
86
+
87
+ const { totalTakerAmount, takerAsset } = checkAndParseOrders(orders);
88
+
89
+ assert(
90
+ takerAsset.toLowerCase() === destToken.toLowerCase(),
91
+ 'All orders must have the same takerAsset as destToken'
92
+ );
93
+
94
+ const takerAmountString = totalTakerAmount.toString(10);
95
+
96
+ if (amount) {
97
+ assert(
98
+ amount === takerAmountString,
99
+ "`amount` must equal the total of the orders' `takerAmounts`"
100
+ );
101
+ }
102
+
103
+ // The pricing must use includeContractMethods=simpleBuy and side=BUY
104
+ const options: RateOptions = {
105
+ ..._options,
106
+ includeContractMethods: [ContractMethod.simpleBuy],
107
+ };
108
+
109
+ const side = SwapSide.BUY;
110
+
111
+ const rateInput: GetRateInput = {
112
+ ...rest,
113
+ srcToken,
114
+ destToken,
115
+ amount: takerAmountString,
116
+ side,
117
+ options,
118
+ };
119
+
120
+ // priceRoute
121
+ const optimalRate = await getSwapAndNFTOrderRate(rateInput, requestParams);
122
+ return optimalRate;
123
+ };
124
+
125
+ // derive srcToken, destToken and srcAmount from orders[]
126
+ const buildNFTOrderTx: BuildNFTOrdersTx = (
127
+ params,
128
+ options,
129
+ requestParams
130
+ ) => {
131
+ const { takerAsset, totalTakerAmount } = checkAndParseOrders(params.orders);
132
+
133
+ const fillParams: BuildNFTOrderTxInput = {
134
+ ...params,
135
+ // taker supplies takerAsset
136
+ srcToken: takerAsset,
137
+ srcAmount: totalTakerAmount.toString(10),
138
+ // taker gets makerAsset in the end
139
+ destToken: 'NFT', // support any NFT
140
+ };
141
+
142
+ return buildSwapTx(fillParams, options, requestParams);
143
+ };
144
+ const buildSwapAndNFTOrderTx: BuildSwapAndNFTOrdersTx = (
145
+ params,
146
+ options,
147
+ requestParams
148
+ ) => {
149
+ checkAndParseOrders(params.orders);
150
+
151
+ const fillParams: BuildSwapAndNFTOrderTxInput = {
152
+ ...params,
153
+ // taker supplies srcToken
154
+ srcToken: params.priceRoute.srcToken,
155
+ // one or the other
156
+ ...(params.slippage
157
+ ? { slippage: params.slippage }
158
+ : // may sneak in as part of `params`
159
+ { srcAmount: params.priceRoute.srcAmount, slippage: undefined }),
160
+ destToken: 'NFT', // support any NFT,
161
+ destDecimals: params.priceRoute.destDecimals,
162
+ };
163
+ return buildSwapTx(fillParams, options, requestParams);
164
+ };
165
+
166
+ return {
167
+ getNFTOrdersRate,
168
+ buildNFTOrderTx,
169
+ buildSwapAndNFTOrderTx,
170
+ };
171
+ };
172
+
173
+ type CheckAndParseOrdersResult = Omit<CheckableOrderData, 'takerAmount'> & {
174
+ totalTakerAmount: bigint;
175
+ };
176
+
177
+ type CheckableOrderData = Pick<
178
+ NFTOrderData,
179
+ 'takerAsset' | 'makerAsset' | 'takerAmount' | 'maker'
180
+ > & { taker?: NFTOrderData['taker'] };
181
+
182
+ function checkAndParseOrders(
183
+ orders: CheckableOrderData[]
184
+ ): CheckAndParseOrdersResult {
185
+ assert(isFilledArray(orders), 'must pass at least 1 order');
186
+
187
+ const { takerAssetsSet, makerAssetsSet, totalTakerAmount } = orders.reduce<
188
+ Record<'takerAssetsSet' | 'makerAssetsSet', Set<string>> & {
189
+ totalTakerAmount: bigint;
190
+ }
191
+ >(
192
+ (accum, order) => {
193
+ accum.takerAssetsSet.add(order.takerAsset.toLowerCase());
194
+ accum.makerAssetsSet.add(order.makerAsset.toLowerCase());
195
+
196
+ accum.totalTakerAmount =
197
+ accum.totalTakerAmount + BigInt(order.takerAmount);
198
+ return accum;
199
+ },
200
+ {
201
+ takerAssetsSet: new Set(),
202
+ makerAssetsSet: new Set(),
203
+ totalTakerAmount: BigInt(0),
204
+ }
205
+ );
206
+
207
+ assert(
208
+ takerAssetsSet.size === 1,
209
+ 'All orders must have the same takerAsset as destToken'
210
+ );
211
+ assert(makerAssetsSet.size === 1, 'All orders must have the same makerAsset');
212
+
213
+ const [{ maker, taker, makerAsset, takerAsset }] = orders;
214
+
215
+ return {
216
+ totalTakerAmount,
217
+ maker,
218
+ taker,
219
+ makerAsset: makerAsset.startsWith('0x')
220
+ ? makerAsset
221
+ : uintToAssetAddress(makerAsset),
222
+ takerAsset: takerAsset.startsWith('0x')
223
+ ? takerAsset
224
+ : uintToAssetAddress(takerAsset),
225
+ };
226
+ }
227
+
228
+ // extract asset address from makerAsset or takerAsset packed number encoded to contain AssetType
229
+ function uintToAssetAddress(assetUint: BigIntAsString): Address {
230
+ return (
231
+ '0x' +
232
+ (BigInt(assetUint) & ((BigInt(1) << BigInt(160)) - BigInt(1))).toString(16)
233
+ );
234
+ }