@opensea/sdk 9.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 (363) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +70 -0
  3. package/lib/api/accounts.d.ts +27 -0
  4. package/lib/api/accounts.js +46 -0
  5. package/lib/api/accounts.js.map +1 -0
  6. package/lib/api/api.d.ts +489 -0
  7. package/lib/api/api.js +754 -0
  8. package/lib/api/api.js.map +1 -0
  9. package/lib/api/apiPaths.d.ts +46 -0
  10. package/lib/api/apiPaths.js +176 -0
  11. package/lib/api/apiPaths.js.map +1 -0
  12. package/lib/api/chains.d.ts +13 -0
  13. package/lib/api/chains.js +22 -0
  14. package/lib/api/chains.js.map +1 -0
  15. package/lib/api/collections.d.ts +34 -0
  16. package/lib/api/collections.js +80 -0
  17. package/lib/api/collections.js.map +1 -0
  18. package/lib/api/drops.d.ts +21 -0
  19. package/lib/api/drops.js +39 -0
  20. package/lib/api/drops.js.map +1 -0
  21. package/lib/api/events.d.ts +26 -0
  22. package/lib/api/events.js +43 -0
  23. package/lib/api/events.js.map +1 -0
  24. package/lib/api/fetcher.d.ts +24 -0
  25. package/lib/api/fetcher.js +3 -0
  26. package/lib/api/fetcher.js.map +1 -0
  27. package/lib/api/index.d.ts +2 -0
  28. package/lib/api/index.js +19 -0
  29. package/lib/api/index.js.map +1 -0
  30. package/lib/api/listings.d.ts +44 -0
  31. package/lib/api/listings.js +88 -0
  32. package/lib/api/listings.js.map +1 -0
  33. package/lib/api/nfts.d.ts +39 -0
  34. package/lib/api/nfts.js +79 -0
  35. package/lib/api/nfts.js.map +1 -0
  36. package/lib/api/offers.d.ts +54 -0
  37. package/lib/api/offers.js +124 -0
  38. package/lib/api/offers.js.map +1 -0
  39. package/lib/api/orders.d.ts +50 -0
  40. package/lib/api/orders.js +153 -0
  41. package/lib/api/orders.js.map +1 -0
  42. package/lib/api/search.d.ts +13 -0
  43. package/lib/api/search.js +22 -0
  44. package/lib/api/search.js.map +1 -0
  45. package/lib/api/tokens.d.ts +25 -0
  46. package/lib/api/tokens.js +43 -0
  47. package/lib/api/tokens.js.map +1 -0
  48. package/lib/api/types.d.ts +1113 -0
  49. package/lib/api/types.js +65 -0
  50. package/lib/api/types.js.map +1 -0
  51. package/lib/constants.d.ts +22 -0
  52. package/lib/constants.js +52 -0
  53. package/lib/constants.js.map +1 -0
  54. package/lib/index.d.ts +18 -0
  55. package/lib/index.js +24 -0
  56. package/lib/index.js.map +1 -0
  57. package/lib/orders/privateListings.d.ts +12 -0
  58. package/lib/orders/privateListings.js +130 -0
  59. package/lib/orders/privateListings.js.map +1 -0
  60. package/lib/orders/types.d.ts +160 -0
  61. package/lib/orders/types.js +10 -0
  62. package/lib/orders/types.js.map +1 -0
  63. package/lib/orders/utils.d.ts +89 -0
  64. package/lib/orders/utils.js +177 -0
  65. package/lib/orders/utils.js.map +1 -0
  66. package/lib/sdk/assets.d.ts +104 -0
  67. package/lib/sdk/assets.js +398 -0
  68. package/lib/sdk/assets.js.map +1 -0
  69. package/lib/sdk/cancellation.d.ts +97 -0
  70. package/lib/sdk/cancellation.js +235 -0
  71. package/lib/sdk/cancellation.js.map +1 -0
  72. package/lib/sdk/context.d.ts +28 -0
  73. package/lib/sdk/context.js +3 -0
  74. package/lib/sdk/context.js.map +1 -0
  75. package/lib/sdk/fulfillment.d.ts +153 -0
  76. package/lib/sdk/fulfillment.js +298 -0
  77. package/lib/sdk/fulfillment.js.map +1 -0
  78. package/lib/sdk/orders.d.ts +253 -0
  79. package/lib/sdk/orders.js +679 -0
  80. package/lib/sdk/orders.js.map +1 -0
  81. package/lib/sdk/tokens.d.ts +31 -0
  82. package/lib/sdk/tokens.js +65 -0
  83. package/lib/sdk/tokens.js.map +1 -0
  84. package/lib/sdk.d.ts +560 -0
  85. package/lib/sdk.js +693 -0
  86. package/lib/sdk.js.map +1 -0
  87. package/lib/src/api/accounts.d.ts +18 -0
  88. package/lib/src/api/accounts.js +30 -0
  89. package/lib/src/api/accounts.js.map +1 -0
  90. package/lib/src/api/api.d.ts +429 -0
  91. package/lib/src/api/api.js +652 -0
  92. package/lib/src/api/api.js.map +1 -0
  93. package/lib/src/api/apiPaths.d.ts +37 -0
  94. package/lib/src/api/apiPaths.js +140 -0
  95. package/lib/src/api/apiPaths.js.map +1 -0
  96. package/lib/src/api/collections.d.ts +26 -0
  97. package/lib/src/api/collections.js +57 -0
  98. package/lib/src/api/collections.js.map +1 -0
  99. package/lib/src/api/events.d.ts +26 -0
  100. package/lib/src/api/events.js +42 -0
  101. package/lib/src/api/events.js.map +1 -0
  102. package/lib/src/api/fetcher.d.ts +24 -0
  103. package/lib/src/api/fetcher.js +3 -0
  104. package/lib/src/api/fetcher.js.map +1 -0
  105. package/lib/src/api/index.d.ts +2 -0
  106. package/lib/src/api/index.js +19 -0
  107. package/lib/src/api/index.js.map +1 -0
  108. package/lib/src/api/listings.d.ts +44 -0
  109. package/lib/src/api/listings.js +86 -0
  110. package/lib/src/api/listings.js.map +1 -0
  111. package/lib/src/api/nfts.d.ts +35 -0
  112. package/lib/src/api/nfts.js +66 -0
  113. package/lib/src/api/nfts.js.map +1 -0
  114. package/lib/src/api/offers.d.ts +54 -0
  115. package/lib/src/api/offers.js +122 -0
  116. package/lib/src/api/offers.js.map +1 -0
  117. package/lib/src/api/orders.d.ts +50 -0
  118. package/lib/src/api/orders.js +151 -0
  119. package/lib/src/api/orders.js.map +1 -0
  120. package/lib/src/api/search.d.ts +13 -0
  121. package/lib/src/api/search.js +21 -0
  122. package/lib/src/api/search.js.map +1 -0
  123. package/lib/src/api/tokens.d.ts +25 -0
  124. package/lib/src/api/tokens.js +42 -0
  125. package/lib/src/api/tokens.js.map +1 -0
  126. package/lib/src/api/types.d.ts +840 -0
  127. package/lib/src/api/types.js +65 -0
  128. package/lib/src/api/types.js.map +1 -0
  129. package/lib/src/constants.d.ts +22 -0
  130. package/lib/src/constants.js +52 -0
  131. package/lib/src/constants.js.map +1 -0
  132. package/lib/src/index.d.ts +18 -0
  133. package/lib/src/index.js +24 -0
  134. package/lib/src/index.js.map +1 -0
  135. package/lib/src/orders/privateListings.d.ts +12 -0
  136. package/lib/src/orders/privateListings.js +130 -0
  137. package/lib/src/orders/privateListings.js.map +1 -0
  138. package/lib/src/orders/types.d.ts +160 -0
  139. package/lib/src/orders/types.js +10 -0
  140. package/lib/src/orders/types.js.map +1 -0
  141. package/lib/src/orders/utils.d.ts +89 -0
  142. package/lib/src/orders/utils.js +177 -0
  143. package/lib/src/orders/utils.js.map +1 -0
  144. package/lib/src/sdk/assets.d.ts +104 -0
  145. package/lib/src/sdk/assets.js +397 -0
  146. package/lib/src/sdk/assets.js.map +1 -0
  147. package/lib/src/sdk/cancellation.d.ts +97 -0
  148. package/lib/src/sdk/cancellation.js +234 -0
  149. package/lib/src/sdk/cancellation.js.map +1 -0
  150. package/lib/src/sdk/context.d.ts +28 -0
  151. package/lib/src/sdk/context.js +3 -0
  152. package/lib/src/sdk/context.js.map +1 -0
  153. package/lib/src/sdk/fulfillment.d.ts +153 -0
  154. package/lib/src/sdk/fulfillment.js +296 -0
  155. package/lib/src/sdk/fulfillment.js.map +1 -0
  156. package/lib/src/sdk/orders.d.ts +253 -0
  157. package/lib/src/sdk/orders.js +677 -0
  158. package/lib/src/sdk/orders.js.map +1 -0
  159. package/lib/src/sdk/tokens.d.ts +31 -0
  160. package/lib/src/sdk/tokens.js +64 -0
  161. package/lib/src/sdk/tokens.js.map +1 -0
  162. package/lib/src/sdk.d.ts +560 -0
  163. package/lib/src/sdk.js +675 -0
  164. package/lib/src/sdk.js.map +1 -0
  165. package/lib/src/typechain/contracts/ERC1155.d.ts +236 -0
  166. package/lib/src/typechain/contracts/ERC1155.js +3 -0
  167. package/lib/src/typechain/contracts/ERC1155.js.map +1 -0
  168. package/lib/src/typechain/contracts/ERC20.d.ts +141 -0
  169. package/lib/src/typechain/contracts/ERC20.js +3 -0
  170. package/lib/src/typechain/contracts/ERC20.js.map +1 -0
  171. package/lib/src/typechain/contracts/ERC721.d.ts +213 -0
  172. package/lib/src/typechain/contracts/ERC721.js +3 -0
  173. package/lib/src/typechain/contracts/ERC721.js.map +1 -0
  174. package/lib/src/typechain/contracts/Multicall3.d.ts +57 -0
  175. package/lib/src/typechain/contracts/Multicall3.js +3 -0
  176. package/lib/src/typechain/contracts/Multicall3.js.map +1 -0
  177. package/lib/src/typechain/contracts/TransferHelper.d.ts +55 -0
  178. package/lib/src/typechain/contracts/TransferHelper.js +3 -0
  179. package/lib/src/typechain/contracts/TransferHelper.js.map +1 -0
  180. package/lib/src/typechain/contracts/common.d.ts +50 -0
  181. package/lib/src/typechain/contracts/common.js +3 -0
  182. package/lib/src/typechain/contracts/common.js.map +1 -0
  183. package/lib/src/typechain/contracts/factories/ERC1155__factory.d.ts +250 -0
  184. package/lib/src/typechain/contracts/factories/ERC1155__factory.js +332 -0
  185. package/lib/src/typechain/contracts/factories/ERC1155__factory.js.map +1 -0
  186. package/lib/src/typechain/contracts/factories/ERC20__factory.d.ts +174 -0
  187. package/lib/src/typechain/contracts/factories/ERC20__factory.js +240 -0
  188. package/lib/src/typechain/contracts/factories/ERC20__factory.js.map +1 -0
  189. package/lib/src/typechain/contracts/factories/ERC721__factory.d.ts +268 -0
  190. package/lib/src/typechain/contracts/factories/ERC721__factory.js +351 -0
  191. package/lib/src/typechain/contracts/factories/ERC721__factory.js.map +1 -0
  192. package/lib/src/typechain/contracts/factories/Multicall3__factory.d.ts +43 -0
  193. package/lib/src/typechain/contracts/factories/Multicall3__factory.js +68 -0
  194. package/lib/src/typechain/contracts/factories/Multicall3__factory.js.map +1 -0
  195. package/lib/src/typechain/contracts/factories/TransferHelper__factory.d.ts +46 -0
  196. package/lib/src/typechain/contracts/factories/TransferHelper__factory.js +71 -0
  197. package/lib/src/typechain/contracts/factories/TransferHelper__factory.js.map +1 -0
  198. package/lib/src/typechain/contracts/factories/index.d.ts +5 -0
  199. package/lib/src/typechain/contracts/factories/index.js +17 -0
  200. package/lib/src/typechain/contracts/factories/index.js.map +1 -0
  201. package/lib/src/typechain/contracts/index.d.ts +11 -0
  202. package/lib/src/typechain/contracts/index.js +48 -0
  203. package/lib/src/typechain/contracts/index.js.map +1 -0
  204. package/lib/src/types.d.ts +387 -0
  205. package/lib/src/types.js +127 -0
  206. package/lib/src/types.js.map +1 -0
  207. package/lib/src/utils/chain.d.ts +60 -0
  208. package/lib/src/utils/chain.js +248 -0
  209. package/lib/src/utils/chain.js.map +1 -0
  210. package/lib/src/utils/converters.d.ts +37 -0
  211. package/lib/src/utils/converters.js +137 -0
  212. package/lib/src/utils/converters.js.map +1 -0
  213. package/lib/src/utils/dateHelper.d.ts +38 -0
  214. package/lib/src/utils/dateHelper.js +52 -0
  215. package/lib/src/utils/dateHelper.js.map +1 -0
  216. package/lib/src/utils/fees.d.ts +13 -0
  217. package/lib/src/utils/fees.js +29 -0
  218. package/lib/src/utils/fees.js.map +1 -0
  219. package/lib/src/utils/index.d.ts +2 -0
  220. package/lib/src/utils/index.js +19 -0
  221. package/lib/src/utils/index.js.map +1 -0
  222. package/lib/src/utils/protocol.d.ts +75 -0
  223. package/lib/src/utils/protocol.js +161 -0
  224. package/lib/src/utils/protocol.js.map +1 -0
  225. package/lib/src/utils/rateLimit.d.ts +34 -0
  226. package/lib/src/utils/rateLimit.js +97 -0
  227. package/lib/src/utils/rateLimit.js.map +1 -0
  228. package/lib/src/utils/stringHelper.d.ts +18 -0
  229. package/lib/src/utils/stringHelper.js +24 -0
  230. package/lib/src/utils/stringHelper.js.map +1 -0
  231. package/lib/src/utils/utils.d.ts +18 -0
  232. package/lib/src/utils/utils.js +45 -0
  233. package/lib/src/utils/utils.js.map +1 -0
  234. package/lib/typechain/contracts/ERC1155.d.ts +236 -0
  235. package/lib/typechain/contracts/ERC1155.js +3 -0
  236. package/lib/typechain/contracts/ERC1155.js.map +1 -0
  237. package/lib/typechain/contracts/ERC20.d.ts +141 -0
  238. package/lib/typechain/contracts/ERC20.js +3 -0
  239. package/lib/typechain/contracts/ERC20.js.map +1 -0
  240. package/lib/typechain/contracts/ERC721.d.ts +213 -0
  241. package/lib/typechain/contracts/ERC721.js +3 -0
  242. package/lib/typechain/contracts/ERC721.js.map +1 -0
  243. package/lib/typechain/contracts/Multicall3.d.ts +57 -0
  244. package/lib/typechain/contracts/Multicall3.js +3 -0
  245. package/lib/typechain/contracts/Multicall3.js.map +1 -0
  246. package/lib/typechain/contracts/TransferHelper.d.ts +55 -0
  247. package/lib/typechain/contracts/TransferHelper.js +3 -0
  248. package/lib/typechain/contracts/TransferHelper.js.map +1 -0
  249. package/lib/typechain/contracts/common.d.ts +50 -0
  250. package/lib/typechain/contracts/common.js +3 -0
  251. package/lib/typechain/contracts/common.js.map +1 -0
  252. package/lib/typechain/contracts/factories/ERC1155__factory.d.ts +250 -0
  253. package/lib/typechain/contracts/factories/ERC1155__factory.js +332 -0
  254. package/lib/typechain/contracts/factories/ERC1155__factory.js.map +1 -0
  255. package/lib/typechain/contracts/factories/ERC20__factory.d.ts +174 -0
  256. package/lib/typechain/contracts/factories/ERC20__factory.js +240 -0
  257. package/lib/typechain/contracts/factories/ERC20__factory.js.map +1 -0
  258. package/lib/typechain/contracts/factories/ERC721__factory.d.ts +268 -0
  259. package/lib/typechain/contracts/factories/ERC721__factory.js +351 -0
  260. package/lib/typechain/contracts/factories/ERC721__factory.js.map +1 -0
  261. package/lib/typechain/contracts/factories/Multicall3__factory.d.ts +43 -0
  262. package/lib/typechain/contracts/factories/Multicall3__factory.js +68 -0
  263. package/lib/typechain/contracts/factories/Multicall3__factory.js.map +1 -0
  264. package/lib/typechain/contracts/factories/TransferHelper__factory.d.ts +46 -0
  265. package/lib/typechain/contracts/factories/TransferHelper__factory.js +71 -0
  266. package/lib/typechain/contracts/factories/TransferHelper__factory.js.map +1 -0
  267. package/lib/typechain/contracts/factories/index.d.ts +5 -0
  268. package/lib/typechain/contracts/factories/index.js +17 -0
  269. package/lib/typechain/contracts/factories/index.js.map +1 -0
  270. package/lib/typechain/contracts/index.d.ts +11 -0
  271. package/lib/typechain/contracts/index.js +48 -0
  272. package/lib/typechain/contracts/index.js.map +1 -0
  273. package/lib/types.d.ts +389 -0
  274. package/lib/types.js +129 -0
  275. package/lib/types.js.map +1 -0
  276. package/lib/utils/chain.d.ts +64 -0
  277. package/lib/utils/chain.js +211 -0
  278. package/lib/utils/chain.js.map +1 -0
  279. package/lib/utils/chainIds.generated.d.ts +7 -0
  280. package/lib/utils/chainIds.generated.js +37 -0
  281. package/lib/utils/chainIds.generated.js.map +1 -0
  282. package/lib/utils/converters.d.ts +37 -0
  283. package/lib/utils/converters.js +137 -0
  284. package/lib/utils/converters.js.map +1 -0
  285. package/lib/utils/dateHelper.d.ts +38 -0
  286. package/lib/utils/dateHelper.js +52 -0
  287. package/lib/utils/dateHelper.js.map +1 -0
  288. package/lib/utils/fees.d.ts +13 -0
  289. package/lib/utils/fees.js +29 -0
  290. package/lib/utils/fees.js.map +1 -0
  291. package/lib/utils/index.d.ts +2 -0
  292. package/lib/utils/index.js +19 -0
  293. package/lib/utils/index.js.map +1 -0
  294. package/lib/utils/protocol.d.ts +75 -0
  295. package/lib/utils/protocol.js +161 -0
  296. package/lib/utils/protocol.js.map +1 -0
  297. package/lib/utils/rateLimit.d.ts +34 -0
  298. package/lib/utils/rateLimit.js +97 -0
  299. package/lib/utils/rateLimit.js.map +1 -0
  300. package/lib/utils/stringHelper.d.ts +18 -0
  301. package/lib/utils/stringHelper.js +24 -0
  302. package/lib/utils/stringHelper.js.map +1 -0
  303. package/lib/utils/utils.d.ts +18 -0
  304. package/lib/utils/utils.js +45 -0
  305. package/lib/utils/utils.js.map +1 -0
  306. package/package.json +72 -0
  307. package/src/abi/ERC1155.json +314 -0
  308. package/src/abi/ERC20.json +222 -0
  309. package/src/abi/ERC721.json +333 -0
  310. package/src/abi/Multicall3.json +50 -0
  311. package/src/abi/TransferHelper.json +53 -0
  312. package/src/api/accounts.ts +69 -0
  313. package/src/api/api.ts +1152 -0
  314. package/src/api/apiPaths.ts +208 -0
  315. package/src/api/chains.ts +18 -0
  316. package/src/api/collections.ts +120 -0
  317. package/src/api/drops.ts +49 -0
  318. package/src/api/events.ts +71 -0
  319. package/src/api/fetcher.ts +31 -0
  320. package/src/api/index.ts +2 -0
  321. package/src/api/listings.ts +126 -0
  322. package/src/api/nfts.ts +144 -0
  323. package/src/api/offers.ts +242 -0
  324. package/src/api/orders.ts +283 -0
  325. package/src/api/search.ts +21 -0
  326. package/src/api/tokens.ts +67 -0
  327. package/src/api/types.ts +1210 -0
  328. package/src/constants.ts +90 -0
  329. package/src/index.ts +22 -0
  330. package/src/orders/privateListings.ts +173 -0
  331. package/src/orders/types.ts +191 -0
  332. package/src/orders/utils.ts +253 -0
  333. package/src/sdk/assets.ts +591 -0
  334. package/src/sdk/cancellation.ts +346 -0
  335. package/src/sdk/context.ts +33 -0
  336. package/src/sdk/fulfillment.ts +478 -0
  337. package/src/sdk/orders.ts +1149 -0
  338. package/src/sdk/tokens.ts +95 -0
  339. package/src/sdk.ts +1051 -0
  340. package/src/typechain/contracts/ERC1155.ts +440 -0
  341. package/src/typechain/contracts/ERC20.ts +286 -0
  342. package/src/typechain/contracts/ERC721.ts +412 -0
  343. package/src/typechain/contracts/Multicall3.ts +117 -0
  344. package/src/typechain/contracts/TransferHelper.ts +122 -0
  345. package/src/typechain/contracts/common.ts +131 -0
  346. package/src/typechain/contracts/factories/ERC1155__factory.ts +331 -0
  347. package/src/typechain/contracts/factories/ERC20__factory.ts +239 -0
  348. package/src/typechain/contracts/factories/ERC721__factory.ts +350 -0
  349. package/src/typechain/contracts/factories/Multicall3__factory.ts +67 -0
  350. package/src/typechain/contracts/factories/TransferHelper__factory.ts +76 -0
  351. package/src/typechain/contracts/factories/index.ts +8 -0
  352. package/src/typechain/contracts/index.ts +14 -0
  353. package/src/types.ts +413 -0
  354. package/src/utils/chain.ts +224 -0
  355. package/src/utils/chainIds.generated.ts +34 -0
  356. package/src/utils/converters.ts +145 -0
  357. package/src/utils/dateHelper.ts +48 -0
  358. package/src/utils/fees.ts +31 -0
  359. package/src/utils/index.ts +2 -0
  360. package/src/utils/protocol.ts +185 -0
  361. package/src/utils/rateLimit.ts +147 -0
  362. package/src/utils/stringHelper.ts +25 -0
  363. package/src/utils/utils.ts +36 -0
@@ -0,0 +1,677 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.OrdersManager = void 0;
37
+ const ethers_1 = require("ethers");
38
+ const constants_1 = require("../constants");
39
+ const types_1 = require("../types");
40
+ const dateHelper_1 = require("../utils/dateHelper");
41
+ const stringHelper_1 = require("../utils/stringHelper");
42
+ const utils_1 = require("../utils/utils");
43
+ /**
44
+ * Manager for order building and creation operations.
45
+ * Handles listing creation, offer creation, and collection offers.
46
+ */
47
+ class OrdersManager {
48
+ constructor(context, getPriceParametersCallback) {
49
+ this.context = context;
50
+ this.getPriceParametersCallback = getPriceParametersCallback;
51
+ }
52
+ getAmountWithBasisPointsApplied(amount, basisPoints) {
53
+ return ((amount * basisPoints) / constants_1.INVERSE_BASIS_POINT).toString();
54
+ }
55
+ isNotMarketplaceFee(fee) {
56
+ return (fee.recipient.toLowerCase() !==
57
+ (0, utils_1.getFeeRecipient)(this.context.chain).toLowerCase());
58
+ }
59
+ getNFTItems(nfts, quantities = []) {
60
+ return nfts.map((nft, index) => ({
61
+ itemType: (0, utils_1.getAssetItemType)(nft.token_standard.toUpperCase()),
62
+ token: (0, utils_1.remapSharedStorefrontAddress)(nft.contract),
63
+ identifier: nft.identifier ?? undefined,
64
+ amount: quantities[index]?.toString() ?? "1",
65
+ }));
66
+ }
67
+ async getFees({ collection, seller, paymentTokenAddress, amount, includeOptionalCreatorFees = false, isPrivateListing = false, }) {
68
+ let collectionFees = includeOptionalCreatorFees
69
+ ? collection.fees
70
+ : collection.fees.filter(fee => fee.required);
71
+ if (isPrivateListing) {
72
+ collectionFees = collectionFees.filter(fee => this.isNotMarketplaceFee(fee));
73
+ }
74
+ const collectionFeesBasisPoints = (0, utils_1.totalBasisPointsForFees)(collectionFees);
75
+ const sellerBasisPoints = constants_1.INVERSE_BASIS_POINT - collectionFeesBasisPoints;
76
+ const getConsiderationItem = (basisPoints, recipient) => {
77
+ return {
78
+ token: paymentTokenAddress,
79
+ amount: this.getAmountWithBasisPointsApplied(amount, basisPoints),
80
+ recipient,
81
+ };
82
+ };
83
+ const considerationItems = [];
84
+ if (seller) {
85
+ considerationItems.push(getConsiderationItem(sellerBasisPoints, seller));
86
+ }
87
+ if (collectionFeesBasisPoints > 0) {
88
+ for (const fee of collectionFees) {
89
+ considerationItems.push(getConsiderationItem((0, utils_1.basisPointsForFee)(fee), fee.recipient));
90
+ }
91
+ }
92
+ return considerationItems;
93
+ }
94
+ /**
95
+ * Build listing order without submitting to API
96
+ * @param options Listing parameters
97
+ * @returns OrderWithCounter ready for API submission or onchain validation
98
+ */
99
+ async _buildListingOrder({ asset, accountAddress, amount, quantity = 1, domain, salt, listingTime, expirationTime, buyerAddress, includeOptionalCreatorFees = false, zone = ethers_1.ZeroAddress, }) {
100
+ await this.context.requireAccountIsAvailable(accountAddress);
101
+ const { nft } = await this.context.api.getNFT(asset.tokenAddress, asset.tokenId);
102
+ const offerAssetItems = this.getNFTItems([nft], [BigInt(quantity ?? 1)]);
103
+ const collection = await this.context.api.getCollection(nft.collection);
104
+ const paymentTokenAddress = collection.pricingCurrencies?.listingCurrency?.address ??
105
+ (0, utils_1.getListingPaymentToken)(this.context.chain);
106
+ const { basePrice } = await this.getPriceParametersCallback(types_1.OrderSide.LISTING, paymentTokenAddress, amount);
107
+ const considerationFeeItems = await this.getFees({
108
+ collection,
109
+ seller: accountAddress,
110
+ paymentTokenAddress,
111
+ amount: basePrice,
112
+ includeOptionalCreatorFees,
113
+ isPrivateListing: !!buyerAddress,
114
+ });
115
+ if (buyerAddress) {
116
+ const { getPrivateListingConsiderations } = await Promise.resolve().then(() => __importStar(require("../orders/privateListings")));
117
+ considerationFeeItems.push(...getPrivateListingConsiderations(offerAssetItems, buyerAddress));
118
+ }
119
+ if (collection.requiredZone) {
120
+ zone = collection.requiredZone;
121
+ }
122
+ const { executeAllActions } = await this.context.seaport.createOrder({
123
+ offer: offerAssetItems,
124
+ consideration: considerationFeeItems,
125
+ startTime: listingTime?.toString(),
126
+ endTime: expirationTime?.toString() ?? (0, dateHelper_1.oneMonthFromNowInSeconds)().toString(),
127
+ zone,
128
+ domain,
129
+ salt: BigInt(salt ?? 0).toString(),
130
+ restrictedByZone: zone !== ethers_1.ZeroAddress,
131
+ allowPartialFills: true,
132
+ }, accountAddress);
133
+ return executeAllActions();
134
+ }
135
+ /**
136
+ * Build listing order components without submitting to API
137
+ * @param options Listing parameters
138
+ * @returns OrderComponents ready for onchain validation
139
+ */
140
+ async buildListingOrderComponents({ asset, accountAddress, amount, quantity = 1, domain, salt, listingTime, expirationTime, buyerAddress, includeOptionalCreatorFees = false, zone = ethers_1.ZeroAddress, }) {
141
+ const order = await this._buildListingOrder({
142
+ asset,
143
+ accountAddress,
144
+ amount,
145
+ quantity,
146
+ domain,
147
+ salt,
148
+ listingTime,
149
+ expirationTime,
150
+ buyerAddress,
151
+ includeOptionalCreatorFees,
152
+ zone,
153
+ });
154
+ return order.parameters;
155
+ }
156
+ /**
157
+ * Build offer order without submitting to API
158
+ * @param options Offer parameters
159
+ * @returns OrderWithCounter ready for API submission or onchain validation
160
+ */
161
+ async _buildOfferOrder({ asset, accountAddress, amount, quantity = 1, domain, salt, expirationTime, zone = (0, utils_1.getSignedZone)(this.context.chain), }) {
162
+ await this.context.requireAccountIsAvailable(accountAddress);
163
+ const { nft } = await this.context.api.getNFT(asset.tokenAddress, asset.tokenId);
164
+ const considerationAssetItems = this.getNFTItems([nft], [BigInt(quantity ?? 1)]);
165
+ const collection = await this.context.api.getCollection(nft.collection);
166
+ const paymentTokenAddress = collection.pricingCurrencies?.offerCurrency?.address ??
167
+ (0, utils_1.getOfferPaymentToken)(this.context.chain);
168
+ const { basePrice } = await this.getPriceParametersCallback(types_1.OrderSide.OFFER, paymentTokenAddress, amount);
169
+ const considerationFeeItems = await this.getFees({
170
+ collection,
171
+ paymentTokenAddress,
172
+ amount: basePrice,
173
+ });
174
+ if (collection.requiredZone) {
175
+ zone = collection.requiredZone;
176
+ }
177
+ const { executeAllActions } = await this.context.seaport.createOrder({
178
+ offer: [
179
+ {
180
+ token: paymentTokenAddress,
181
+ amount: basePrice.toString(),
182
+ },
183
+ ],
184
+ consideration: [...considerationAssetItems, ...considerationFeeItems],
185
+ endTime: expirationTime !== undefined
186
+ ? BigInt(expirationTime).toString()
187
+ : (0, dateHelper_1.oneMonthFromNowInSeconds)().toString(),
188
+ zone,
189
+ domain,
190
+ salt: BigInt(salt ?? 0).toString(),
191
+ restrictedByZone: zone !== ethers_1.ZeroAddress,
192
+ allowPartialFills: true,
193
+ }, accountAddress);
194
+ return executeAllActions();
195
+ }
196
+ /**
197
+ * Build offer order components without submitting to API
198
+ * @param options Offer parameters
199
+ * @returns OrderComponents ready for onchain validation
200
+ */
201
+ async buildOfferOrderComponents({ asset, accountAddress, amount, quantity = 1, domain, salt, expirationTime, zone = (0, utils_1.getSignedZone)(this.context.chain), }) {
202
+ const order = await this._buildOfferOrder({
203
+ asset,
204
+ accountAddress,
205
+ amount,
206
+ quantity,
207
+ domain,
208
+ salt,
209
+ expirationTime,
210
+ zone,
211
+ });
212
+ return order.parameters;
213
+ }
214
+ /**
215
+ * Create and submit an offer on an asset.
216
+ * @param options
217
+ * @param options.asset The asset to trade. tokenAddress and tokenId must be defined.
218
+ * @param options.accountAddress Address of the wallet making the offer.
219
+ * @param options.amount Amount in decimal format (e.g., "1.5" for 1.5 ETH, not wei). Automatically converted to base units.
220
+ * @param options.quantity Number of assets to bid for. Defaults to 1.
221
+ * @param options.domain Optional domain for on-chain attribution. Hashed and included in salt.
222
+ * @param options.salt Arbitrary salt. Auto-generated if not provided.
223
+ * @param options.expirationTime Expiration time for the order, in UTC seconds
224
+ * @param options.zone Zone for order protection. Defaults to chain's signed zone.
225
+ *
226
+ * @returns The {@link OrderV2} that was created.
227
+ *
228
+ * @throws Error if the asset does not contain a token id.
229
+ * @throws Error if the accountAddress is not available through wallet or provider.
230
+ * @throws Error if the amount is not greater than 0.
231
+ */
232
+ async createOffer({ asset, accountAddress, amount, quantity = 1, domain, salt, expirationTime, zone = (0, utils_1.getSignedZone)(this.context.chain), }) {
233
+ const order = await this._buildOfferOrder({
234
+ asset,
235
+ accountAddress,
236
+ amount,
237
+ quantity,
238
+ domain,
239
+ salt,
240
+ expirationTime,
241
+ zone,
242
+ });
243
+ return this.context.api.postOrder(order, {
244
+ protocol: "seaport",
245
+ protocolAddress: this.context.seaport.contract.target,
246
+ side: types_1.OrderSide.OFFER,
247
+ });
248
+ }
249
+ /**
250
+ * Create and submit a listing for an asset.
251
+ * @param options
252
+ * @param options.asset The asset to trade. tokenAddress and tokenId must be defined.
253
+ * @param options.accountAddress Address of the wallet making the listing
254
+ * @param options.amount Amount in decimal format (e.g., "1.5" for 1.5 ETH, not wei). Automatically converted to base units.
255
+ * @param options.quantity Number of assets to list. Defaults to 1.
256
+ * @param options.domain Optional domain for on-chain attribution. Hashed and included in salt. This can be used for on-chain order attribution to assist with analytics.
257
+ * @param options.salt Arbitrary salt. Auto-generated if not provided.
258
+ * @param options.listingTime Optional time when the order will become fulfillable, in UTC seconds. Undefined means it will start now.
259
+ * @param options.expirationTime Expiration time for the order, in UTC seconds.
260
+ * @param options.buyerAddress Optional address that's allowed to purchase this item. If specified, no other address will be able to take the order, unless its value is the null address.
261
+ * @param options.includeOptionalCreatorFees If true, optional creator fees will be included in the listing. Default: false.
262
+ * @param options.zone Zone for order protection. Defaults to no zone.
263
+ * @returns The {@link OrderV2} that was created.
264
+ *
265
+ * @throws Error if the asset does not contain a token id.
266
+ * @throws Error if the accountAddress is not available through wallet or provider.
267
+ * @throws Error if the amount is not greater than 0.
268
+ */
269
+ async createListing({ asset, accountAddress, amount, quantity = 1, domain, salt, listingTime, expirationTime, buyerAddress, includeOptionalCreatorFees = false, zone = ethers_1.ZeroAddress, }) {
270
+ const order = await this._buildListingOrder({
271
+ asset,
272
+ accountAddress,
273
+ amount,
274
+ quantity,
275
+ domain,
276
+ salt,
277
+ listingTime,
278
+ expirationTime,
279
+ buyerAddress,
280
+ includeOptionalCreatorFees,
281
+ zone,
282
+ });
283
+ return this.context.api.postOrder(order, {
284
+ protocol: "seaport",
285
+ protocolAddress: this.context.seaport.contract.target,
286
+ side: types_1.OrderSide.LISTING,
287
+ });
288
+ }
289
+ /**
290
+ * Create and submit multiple listings using Seaport's bulk order creation.
291
+ * This method uses a single signature for all listings and submits them individually to the OpenSea API with rate limit handling.
292
+ * All listings must be from the same account address.
293
+ *
294
+ * Note: If only one listing is provided, this method will use a normal order signature instead of a bulk signature,
295
+ * as bulk signatures are more expensive to decode on-chain due to the merkle proof verification.
296
+ *
297
+ * @param options
298
+ * @param options.listings Array of listing parameters. Each listing requires asset, amount, and optionally other listing parameters.
299
+ * @param options.accountAddress Address of the wallet making the listings
300
+ * @param options.continueOnError If true, continue submitting remaining listings even if some fail. Default: false (throw on first error).
301
+ * @param options.onProgress Optional callback for progress updates. Called after each listing is submitted (successfully or not).
302
+ * @returns {@link BulkOrderResult} containing successful orders and any failures.
303
+ *
304
+ * @throws Error if listings array is empty
305
+ * @throws Error if the accountAddress is not available through wallet or provider.
306
+ * @throws Error if any asset does not contain a token id.
307
+ * @throws Error if continueOnError is false and any submission fails.
308
+ */
309
+ async createBulkListings({ listings, accountAddress, continueOnError = false, onProgress, }) {
310
+ if (listings.length === 0) {
311
+ throw new Error("Listings array cannot be empty");
312
+ }
313
+ // If only one listing, use normal signature to avoid bulk signature overhead
314
+ if (listings.length === 1) {
315
+ try {
316
+ const order = await this.createListing({
317
+ ...listings[0],
318
+ accountAddress,
319
+ });
320
+ return {
321
+ successful: [order],
322
+ failed: [],
323
+ };
324
+ }
325
+ catch (error) {
326
+ if (continueOnError) {
327
+ return {
328
+ successful: [],
329
+ failed: [
330
+ {
331
+ index: 0,
332
+ order: {}, // Order wasn't created
333
+ error: error,
334
+ },
335
+ ],
336
+ };
337
+ }
338
+ throw error;
339
+ }
340
+ }
341
+ await this.context.requireAccountIsAvailable(accountAddress);
342
+ // Build metadata array for each listing
343
+ const listingMetadata = [];
344
+ // Build all order inputs
345
+ for (const listing of listings) {
346
+ const { asset, amount, quantity = 1, domain, salt, listingTime, expirationTime, buyerAddress, includeOptionalCreatorFees = false, zone = ethers_1.ZeroAddress, } = listing;
347
+ // Fetch NFT and collection data
348
+ const { nft } = await this.context.api.getNFT(asset.tokenAddress, asset.tokenId);
349
+ const collection = await this.context.api.getCollection(nft.collection);
350
+ const paymentTokenAddress = collection.pricingCurrencies?.listingCurrency?.address ??
351
+ (0, utils_1.getListingPaymentToken)(this.context.chain);
352
+ const offerAssetItems = this.getNFTItems([nft], [BigInt(quantity ?? 1)]);
353
+ const { basePrice } = await this.getPriceParametersCallback(types_1.OrderSide.LISTING, paymentTokenAddress, amount);
354
+ const considerationFeeItems = await this.getFees({
355
+ collection,
356
+ seller: accountAddress,
357
+ paymentTokenAddress,
358
+ amount: basePrice,
359
+ includeOptionalCreatorFees,
360
+ isPrivateListing: !!buyerAddress,
361
+ });
362
+ if (buyerAddress) {
363
+ const { getPrivateListingConsiderations } = await Promise.resolve().then(() => __importStar(require("../orders/privateListings")));
364
+ considerationFeeItems.push(...getPrivateListingConsiderations(offerAssetItems, buyerAddress));
365
+ }
366
+ let finalZone = zone;
367
+ if (collection.requiredZone) {
368
+ finalZone = collection.requiredZone;
369
+ }
370
+ listingMetadata.push({
371
+ nft,
372
+ collection,
373
+ paymentTokenAddress,
374
+ zone: finalZone,
375
+ domain,
376
+ salt,
377
+ listingTime,
378
+ expirationTime,
379
+ });
380
+ }
381
+ // Create the bulk orders using seaport's createBulkOrders method
382
+ const createOrderInputsForSeaport = listings.map((listing, index) => {
383
+ const { amount, quantity = 1, listingTime, expirationTime, buyerAddress, includeOptionalCreatorFees = false, } = listing;
384
+ const metadata = listingMetadata[index];
385
+ const offerAssetItems = this.getNFTItems([metadata.nft], [BigInt(quantity ?? 1)]);
386
+ return this.getPriceParametersCallback(types_1.OrderSide.LISTING, metadata.paymentTokenAddress, amount).then(async ({ basePrice }) => {
387
+ const considerationFeeItems = await this.getFees({
388
+ collection: metadata.collection,
389
+ seller: accountAddress,
390
+ paymentTokenAddress: metadata.paymentTokenAddress,
391
+ amount: basePrice,
392
+ includeOptionalCreatorFees,
393
+ isPrivateListing: !!buyerAddress,
394
+ });
395
+ if (buyerAddress) {
396
+ const { getPrivateListingConsiderations } = await Promise.resolve().then(() => __importStar(require("../orders/privateListings")));
397
+ considerationFeeItems.push(...getPrivateListingConsiderations(offerAssetItems, buyerAddress));
398
+ }
399
+ return {
400
+ offer: offerAssetItems,
401
+ consideration: considerationFeeItems,
402
+ startTime: listingTime?.toString(),
403
+ endTime: expirationTime?.toString() ?? (0, dateHelper_1.oneMonthFromNowInSeconds)().toString(),
404
+ zone: metadata.zone,
405
+ domain: metadata.domain,
406
+ salt: metadata.salt
407
+ ? BigInt(metadata.salt ?? 0).toString()
408
+ : undefined,
409
+ restrictedByZone: metadata.zone !== ethers_1.ZeroAddress,
410
+ allowPartialFills: true,
411
+ };
412
+ });
413
+ });
414
+ const resolvedInputs = await Promise.all(createOrderInputsForSeaport);
415
+ const { executeAllActions } = await this.context.seaport.createBulkOrders(resolvedInputs, accountAddress);
416
+ const orders = await executeAllActions();
417
+ // Submit each order individually to the OpenSea API
418
+ // Rate limiting is handled automatically by the API client
419
+ this.context.logger(`Starting submission of ${orders.length} bulk-signed ${(0, stringHelper_1.pluralize)(orders.length, "listing")} to OpenSea API...`);
420
+ const submittedOrders = [];
421
+ const failedOrders = [];
422
+ for (let i = 0; i < orders.length; i++) {
423
+ this.context.logger(`Submitting listing ${i + 1}/${orders.length}...`);
424
+ try {
425
+ const submittedOrder = await this.context.api.postOrder(orders[i], {
426
+ protocol: "seaport",
427
+ protocolAddress: this.context.seaport.contract.target,
428
+ side: types_1.OrderSide.LISTING,
429
+ });
430
+ submittedOrders.push(submittedOrder);
431
+ this.context.logger(`Completed listing ${i + 1}/${orders.length}`);
432
+ }
433
+ catch (error) {
434
+ const errorMessage = error.message;
435
+ this.context.logger(`Failed listing ${i + 1}/${orders.length}: ${errorMessage}`);
436
+ failedOrders.push({
437
+ index: i,
438
+ order: orders[i],
439
+ error: error,
440
+ });
441
+ // If not continuing on error, throw immediately
442
+ if (!continueOnError) {
443
+ throw error;
444
+ }
445
+ }
446
+ // Call progress callback after each listing (successful or failed)
447
+ onProgress?.(i + 1, orders.length);
448
+ }
449
+ if (submittedOrders.length > 0) {
450
+ this.context.logger(`Successfully submitted ${submittedOrders.length}/${orders.length} ${(0, stringHelper_1.pluralize)(submittedOrders.length, "listing")}`);
451
+ }
452
+ if (failedOrders.length > 0) {
453
+ this.context.logger(`Failed to submit ${failedOrders.length}/${orders.length} ${(0, stringHelper_1.pluralize)(failedOrders.length, "listing")}`);
454
+ }
455
+ return {
456
+ successful: submittedOrders,
457
+ failed: failedOrders,
458
+ };
459
+ }
460
+ /**
461
+ * Create and submit multiple offers using Seaport's bulk order creation.
462
+ * This method uses a single signature for all offers and submits them individually to the OpenSea API with rate limit handling.
463
+ * All offers must be from the same account address.
464
+ *
465
+ * Note: If only one offer is provided, this method will use a normal order signature instead of a bulk signature,
466
+ * as bulk signatures are more expensive to decode on-chain due to the merkle proof verification.
467
+ *
468
+ * @param options
469
+ * @param options.offers Array of offer parameters. Each offer requires asset, amount, and optionally other offer parameters.
470
+ * @param options.accountAddress Address of the wallet making the offers
471
+ * @param options.continueOnError If true, continue submitting remaining offers even if some fail. Default: false (throw on first error).
472
+ * @param options.onProgress Optional callback for progress updates. Called after each offer is submitted (successfully or not).
473
+ * @returns {@link BulkOrderResult} containing successful orders and any failures.
474
+ *
475
+ * @throws Error if offers array is empty
476
+ * @throws Error if the accountAddress is not available through wallet or provider.
477
+ * @throws Error if any asset does not contain a token id.
478
+ * @throws Error if continueOnError is false and any submission fails.
479
+ */
480
+ async createBulkOffers({ offers, accountAddress, continueOnError = false, onProgress, }) {
481
+ if (offers.length === 0) {
482
+ throw new Error("Offers array cannot be empty");
483
+ }
484
+ // If only one offer, use normal signature to avoid bulk signature overhead
485
+ if (offers.length === 1) {
486
+ try {
487
+ const order = await this.createOffer({
488
+ ...offers[0],
489
+ accountAddress,
490
+ });
491
+ return {
492
+ successful: [order],
493
+ failed: [],
494
+ };
495
+ }
496
+ catch (error) {
497
+ if (continueOnError) {
498
+ return {
499
+ successful: [],
500
+ failed: [
501
+ {
502
+ index: 0,
503
+ order: {}, // Order wasn't created
504
+ error: error,
505
+ },
506
+ ],
507
+ };
508
+ }
509
+ throw error;
510
+ }
511
+ }
512
+ await this.context.requireAccountIsAvailable(accountAddress);
513
+ // Build metadata array for each offer
514
+ const offerMetadata = [];
515
+ // Build all order inputs
516
+ for (const offer of offers) {
517
+ const { asset, domain, salt, expirationTime, zone = (0, utils_1.getSignedZone)(this.context.chain), } = offer;
518
+ // Fetch NFT and collection data
519
+ const { nft } = await this.context.api.getNFT(asset.tokenAddress, asset.tokenId);
520
+ const collection = await this.context.api.getCollection(nft.collection);
521
+ const paymentTokenAddress = collection.pricingCurrencies?.offerCurrency?.address ??
522
+ (0, utils_1.getOfferPaymentToken)(this.context.chain);
523
+ let finalZone = zone;
524
+ if (collection.requiredZone) {
525
+ finalZone = collection.requiredZone;
526
+ }
527
+ offerMetadata.push({
528
+ nft,
529
+ collection,
530
+ paymentTokenAddress,
531
+ zone: finalZone,
532
+ domain,
533
+ salt,
534
+ expirationTime,
535
+ });
536
+ }
537
+ // Create the bulk orders using seaport's createBulkOrders method
538
+ const createOrderInputsForSeaport = offers.map((offer, index) => {
539
+ const { amount, quantity = 1 } = offer;
540
+ const metadata = offerMetadata[index];
541
+ const considerationAssetItems = this.getNFTItems([metadata.nft], [BigInt(quantity ?? 1)]);
542
+ return this.getPriceParametersCallback(types_1.OrderSide.OFFER, metadata.paymentTokenAddress, amount).then(async ({ basePrice }) => {
543
+ const considerationFeeItems = await this.getFees({
544
+ collection: metadata.collection,
545
+ paymentTokenAddress: metadata.paymentTokenAddress,
546
+ amount: basePrice,
547
+ });
548
+ return {
549
+ offer: [
550
+ {
551
+ token: metadata.paymentTokenAddress,
552
+ amount: basePrice.toString(),
553
+ },
554
+ ],
555
+ consideration: [...considerationAssetItems, ...considerationFeeItems],
556
+ endTime: metadata.expirationTime !== undefined
557
+ ? BigInt(metadata.expirationTime).toString()
558
+ : (0, dateHelper_1.oneMonthFromNowInSeconds)().toString(),
559
+ zone: metadata.zone,
560
+ domain: metadata.domain,
561
+ salt: metadata.salt
562
+ ? BigInt(metadata.salt ?? 0).toString()
563
+ : undefined,
564
+ restrictedByZone: metadata.zone !== ethers_1.ZeroAddress,
565
+ allowPartialFills: true,
566
+ };
567
+ });
568
+ });
569
+ const resolvedInputs = await Promise.all(createOrderInputsForSeaport);
570
+ const { executeAllActions } = await this.context.seaport.createBulkOrders(resolvedInputs, accountAddress);
571
+ const orders = await executeAllActions();
572
+ // Submit each order individually to the OpenSea API
573
+ // Rate limiting is handled automatically by the API client
574
+ this.context.logger(`Starting submission of ${orders.length} bulk-signed ${(0, stringHelper_1.pluralize)(orders.length, "offer")} to OpenSea API...`);
575
+ const submittedOrders = [];
576
+ const failedOrders = [];
577
+ for (let i = 0; i < orders.length; i++) {
578
+ this.context.logger(`Submitting offer ${i + 1}/${orders.length}...`);
579
+ try {
580
+ const submittedOrder = await this.context.api.postOrder(orders[i], {
581
+ protocol: "seaport",
582
+ protocolAddress: this.context.seaport.contract.target,
583
+ side: types_1.OrderSide.OFFER,
584
+ });
585
+ submittedOrders.push(submittedOrder);
586
+ this.context.logger(`Completed offer ${i + 1}/${orders.length}`);
587
+ }
588
+ catch (error) {
589
+ const errorMessage = error.message;
590
+ this.context.logger(`Failed offer ${i + 1}/${orders.length}: ${errorMessage}`);
591
+ failedOrders.push({
592
+ index: i,
593
+ order: orders[i],
594
+ error: error,
595
+ });
596
+ // If not continuing on error, throw immediately
597
+ if (!continueOnError) {
598
+ throw error;
599
+ }
600
+ }
601
+ // Call progress callback after each offer (successful or failed)
602
+ onProgress?.(i + 1, orders.length);
603
+ }
604
+ if (submittedOrders.length > 0) {
605
+ this.context.logger(`Successfully submitted ${submittedOrders.length}/${orders.length} ${(0, stringHelper_1.pluralize)(submittedOrders.length, "offer")}`);
606
+ }
607
+ if (failedOrders.length > 0) {
608
+ this.context.logger(`Failed to submit ${failedOrders.length}/${orders.length} ${(0, stringHelper_1.pluralize)(failedOrders.length, "offer")}`);
609
+ }
610
+ return {
611
+ successful: submittedOrders,
612
+ failed: failedOrders,
613
+ };
614
+ }
615
+ /**
616
+ * Create and submit a collection offer.
617
+ * @param options
618
+ * @param options.collectionSlug Identifier for the collection.
619
+ * @param options.accountAddress Address of the wallet making the offer.
620
+ * @param options.amount Amount in decimal format (e.g., "1.5" for 1.5 ETH, not wei). Automatically converted to base units.
621
+ * @param options.quantity Number of assets to bid for.
622
+ * @param options.domain Optional domain for on-chain attribution. Hashed and included in salt. This can be used for on-chain order attribution to assist with analytics.
623
+ * @param options.salt Arbitrary salt. Auto-generated if not provided.
624
+ * @param options.expirationTime Expiration time for the order, in UTC seconds.
625
+ * @param options.offerProtectionEnabled Use signed zone for protection against disabled items. Default: true.
626
+ * @param options.traitType If defined, the trait name to create the collection offer for.
627
+ * @param options.traitValue If defined, the trait value to create the collection offer for.
628
+ * @param options.traits If defined, an array of traits to create the multi-trait collection offer for.
629
+ * @param options.numericTraits If defined, an array of numeric trait criteria with min/max ranges.
630
+ * @returns The {@link CollectionOffer} that was created.
631
+ */
632
+ async createCollectionOffer({ collectionSlug, accountAddress, amount, quantity, domain, salt, expirationTime, offerProtectionEnabled = true, traitType, traitValue, traits, numericTraits, }) {
633
+ await this.context.requireAccountIsAvailable(accountAddress);
634
+ const collection = await this.context.api.getCollection(collectionSlug);
635
+ const paymentTokenAddress = collection.pricingCurrencies?.offerCurrency?.address ??
636
+ (0, utils_1.getOfferPaymentToken)(this.context.chain);
637
+ const buildOfferResult = await this.context.api.buildOffer(accountAddress, quantity, collectionSlug, offerProtectionEnabled, traitType, traitValue, traits, numericTraits);
638
+ const item = buildOfferResult.partialParameters.consideration[0];
639
+ const convertedConsiderationItem = {
640
+ itemType: item.itemType,
641
+ token: item.token,
642
+ identifier: item.identifierOrCriteria,
643
+ amount: item.startAmount,
644
+ };
645
+ const { basePrice } = await this.getPriceParametersCallback(types_1.OrderSide.OFFER, paymentTokenAddress, amount);
646
+ const considerationFeeItems = await this.getFees({
647
+ collection,
648
+ paymentTokenAddress,
649
+ amount: basePrice,
650
+ });
651
+ const considerationItems = [
652
+ convertedConsiderationItem,
653
+ ...considerationFeeItems,
654
+ ];
655
+ const payload = {
656
+ offerer: accountAddress,
657
+ offer: [
658
+ {
659
+ token: paymentTokenAddress,
660
+ amount: basePrice.toString(),
661
+ },
662
+ ],
663
+ consideration: considerationItems,
664
+ endTime: expirationTime?.toString() ?? (0, dateHelper_1.oneMonthFromNowInSeconds)().toString(),
665
+ zone: buildOfferResult.partialParameters.zone,
666
+ domain,
667
+ salt: BigInt(salt ?? 0).toString(),
668
+ restrictedByZone: true,
669
+ allowPartialFills: true,
670
+ };
671
+ const { executeAllActions } = await this.context.seaport.createOrder(payload, accountAddress);
672
+ const order = await executeAllActions();
673
+ return this.context.api.postCollectionOffer(order, collectionSlug, traitType, traitValue, traits, numericTraits);
674
+ }
675
+ }
676
+ exports.OrdersManager = OrdersManager;
677
+ //# sourceMappingURL=orders.js.map