@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,346 @@
1
+ import type { OrderComponents } from "@opensea/seaport-js/lib/types"
2
+ import type { Overrides, Signer } from "ethers"
3
+ import type { Listing, Offer } from "../api/types"
4
+ import type { OrderV2 } from "../orders/types"
5
+ import { DEFAULT_SEAPORT_CONTRACT_ADDRESS } from "../orders/utils"
6
+ import { type Chain, EventType } from "../types"
7
+ import {
8
+ getChainId,
9
+ getSeaportInstance,
10
+ getSeaportVersion,
11
+ requireValidProtocol,
12
+ } from "../utils/utils"
13
+ import type { SDKContext } from "./context"
14
+
15
+ /**
16
+ * Order cancellation operations
17
+ */
18
+ export class CancellationManager {
19
+ constructor(private context: SDKContext) {}
20
+
21
+ /**
22
+ * Cancel an order onchain, preventing it from ever being fulfilled.
23
+ * This method accepts either a full OrderV2 object or an order hash with protocol address.
24
+ *
25
+ * @param options
26
+ * @param options.order The order to cancel (OrderV2 object)
27
+ * @param options.orderHash Optional order hash to cancel. Must provide protocolAddress if using this.
28
+ * @param options.accountAddress The account address that will be cancelling the order.
29
+ * @param options.protocolAddress Required when using orderHash. The Seaport protocol address for the order.
30
+ * @param options.domain An optional domain to be hashed and included at the end of fulfillment calldata. This can be used for onchain order attribution to assist with analytics.
31
+ *
32
+ * @throws Error if neither order nor orderHash is provided.
33
+ * @throws Error if the accountAddress is not available through wallet or provider.
34
+ * @throws Error if the order's protocol address is not supported by OpenSea. See {@link isValidProtocol}.
35
+ */
36
+ async cancelOrder({
37
+ order,
38
+ orderHash,
39
+ accountAddress,
40
+ protocolAddress = DEFAULT_SEAPORT_CONTRACT_ADDRESS,
41
+ domain,
42
+ }: {
43
+ order?: OrderV2
44
+ orderHash?: string
45
+ accountAddress: string
46
+ protocolAddress?: string
47
+ domain?: string
48
+ }) {
49
+ // Validate input
50
+ if (!order && !orderHash) {
51
+ throw new Error(
52
+ "Either order or orderHash must be provided to cancel order",
53
+ )
54
+ }
55
+
56
+ // Check account availability after parameter validation
57
+ await this.context.requireAccountIsAvailable(accountAddress)
58
+
59
+ let orderComponents: OrderComponents
60
+ let effectiveProtocolAddress: string
61
+
62
+ if (order) {
63
+ // Using OrderV2 object directly
64
+ requireValidProtocol(order.protocolAddress)
65
+ effectiveProtocolAddress = order.protocolAddress
66
+ orderComponents = order.protocolData.parameters
67
+ this.context.dispatch(EventType.CancelOrder, {
68
+ orderV2: order,
69
+ accountAddress,
70
+ })
71
+ } else if (orderHash) {
72
+ // Fetch order from API using order hash
73
+ requireValidProtocol(protocolAddress)
74
+ const fetchedOrder = await this.context.api.getOrderByHash(
75
+ orderHash,
76
+ protocolAddress,
77
+ this.context.chain,
78
+ )
79
+ requireValidProtocol(fetchedOrder.protocol_address)
80
+ effectiveProtocolAddress = fetchedOrder.protocol_address
81
+ orderComponents = fetchedOrder.protocol_data.parameters
82
+ this.context.dispatch(EventType.CancelOrder, {
83
+ order: fetchedOrder,
84
+ accountAddress,
85
+ })
86
+ } else {
87
+ // Should never reach here due to earlier validation
88
+ throw new Error("Invalid input")
89
+ }
90
+
91
+ // Transact and get the transaction hash
92
+ const transactionHash = await this.cancelSeaportOrders({
93
+ orders: [orderComponents],
94
+ accountAddress,
95
+ domain,
96
+ protocolAddress: effectiveProtocolAddress,
97
+ })
98
+
99
+ // Await transaction confirmation
100
+ await this.context.confirmTransaction(
101
+ transactionHash,
102
+ EventType.CancelOrder,
103
+ "Cancelling order",
104
+ )
105
+ }
106
+
107
+ /**
108
+ * Cancel multiple orders onchain, preventing them from being fulfilled.
109
+ * This method accepts either full OrderV2 objects, OrderComponents, or order hashes with protocol address.
110
+ *
111
+ * **Event Behavior**: For backwards compatibility with the singular `cancelOrder` method,
112
+ * this method dispatches a `CancelOrder` event for the first order only, and only when
113
+ * an OrderV2 object is available (either provided directly or fetched via orderHashes).
114
+ * No event is dispatched when using OrderComponents directly, as they lack the full order data.
115
+ *
116
+ * @param options
117
+ * @param options.orders Array of orders to cancel. Can be OrderV2 objects or OrderComponents.
118
+ * @param options.orderHashes Optional array of order hashes to cancel. Must provide protocolAddress if using this.
119
+ * @param options.accountAddress The account address cancelling the orders.
120
+ * @param options.protocolAddress Required when using orderHashes. The Seaport protocol address for the orders.
121
+ * @param options.domain An optional domain to be hashed and included at the end of fulfillment calldata.
122
+ * @param options.overrides Transaction overrides, ignored if not set.
123
+ * @returns Transaction hash of the cancellation.
124
+ *
125
+ * @throws Error if orderHashes is provided without protocolAddress.
126
+ * @throws Error if neither orders nor orderHashes is provided.
127
+ * @throws Error if the accountAddress is not available through wallet or provider.
128
+ * @throws Error if the order's protocol address is not supported by OpenSea. See {@link isValidProtocol}.
129
+ */
130
+ async cancelOrders({
131
+ orders,
132
+ orderHashes,
133
+ accountAddress,
134
+ protocolAddress = DEFAULT_SEAPORT_CONTRACT_ADDRESS,
135
+ domain,
136
+ overrides,
137
+ }: {
138
+ orders?: Array<OrderV2 | OrderComponents>
139
+ orderHashes?: string[]
140
+ accountAddress: string
141
+ protocolAddress?: string
142
+ domain?: string
143
+ overrides?: Overrides
144
+ }): Promise<string> {
145
+ // Validate input before making any external calls
146
+ if (!orders && !orderHashes) {
147
+ throw new Error(
148
+ "Either orders or orderHashes must be provided to cancel orders",
149
+ )
150
+ }
151
+
152
+ if (orders && orderHashes) {
153
+ throw new Error(
154
+ "Cannot provide both orders and orderHashes. Please use one or the other.",
155
+ )
156
+ }
157
+
158
+ if (orders && orders.length === 0) {
159
+ throw new Error("At least one order must be provided")
160
+ }
161
+
162
+ if (orderHashes && orderHashes.length === 0) {
163
+ throw new Error("At least one order hash must be provided")
164
+ }
165
+
166
+ requireValidProtocol(protocolAddress)
167
+
168
+ // Check account availability after parameter validation
169
+ await this.context.requireAccountIsAvailable(accountAddress)
170
+
171
+ let orderComponents: OrderComponents[]
172
+ let effectiveProtocolAddress = protocolAddress
173
+
174
+ if (orders) {
175
+ // Extract OrderComponents from either OrderV2 objects or use OrderComponents directly
176
+ let firstOrderV2: OrderV2 | undefined
177
+ orderComponents = orders.map(order => {
178
+ if ("protocolData" in order) {
179
+ // It's an OrderV2 object
180
+ const orderV2 = order as OrderV2
181
+ requireValidProtocol(orderV2.protocolAddress)
182
+ effectiveProtocolAddress = orderV2.protocolAddress
183
+ if (!firstOrderV2) {
184
+ firstOrderV2 = orderV2
185
+ }
186
+ return orderV2.protocolData.parameters
187
+ } else {
188
+ // It's already OrderComponents
189
+ return order as OrderComponents
190
+ }
191
+ })
192
+ // Dispatch event for the first OrderV2 if available
193
+ if (firstOrderV2) {
194
+ this.context.dispatch(EventType.CancelOrder, {
195
+ orderV2: firstOrderV2,
196
+ accountAddress,
197
+ })
198
+ }
199
+ } else if (orderHashes) {
200
+ // Fetch orders from the API using order hashes
201
+ const fetchedOrders: (Offer | Listing)[] = []
202
+ for (const hash of orderHashes) {
203
+ const fetched = await this.context.api.getOrderByHash(
204
+ hash,
205
+ protocolAddress,
206
+ this.context.chain,
207
+ )
208
+ fetchedOrders.push(fetched)
209
+ }
210
+
211
+ // Extract OrderComponents from the fetched orders
212
+ orderComponents = fetchedOrders.map(fetched => {
213
+ requireValidProtocol(fetched.protocol_address)
214
+ effectiveProtocolAddress = fetched.protocol_address
215
+ return fetched.protocol_data.parameters
216
+ })
217
+
218
+ // Dispatch event for the first fetched order
219
+ if (fetchedOrders.length > 0) {
220
+ this.context.dispatch(EventType.CancelOrder, {
221
+ order: fetchedOrders[0],
222
+ accountAddress,
223
+ })
224
+ }
225
+ } else {
226
+ // Should never reach here due to earlier validation
227
+ throw new Error("Invalid input")
228
+ }
229
+
230
+ // Transact and get the transaction hash
231
+ const transactionHash = await this.cancelSeaportOrders({
232
+ orders: orderComponents,
233
+ accountAddress,
234
+ domain,
235
+ protocolAddress: effectiveProtocolAddress,
236
+ overrides,
237
+ })
238
+
239
+ // Await transaction confirmation
240
+ await this.context.confirmTransaction(
241
+ transactionHash,
242
+ EventType.CancelOrder,
243
+ `Cancelling ${orderComponents.length} order(s)`,
244
+ )
245
+
246
+ return transactionHash
247
+ }
248
+
249
+ /**
250
+ * Cancel orders onchain, preventing them from being fulfilled.
251
+ * @param options
252
+ * @param options.orders The orders to cancel
253
+ * @param options.accountAddress The account address cancelling the orders.
254
+ * @param options.domain An optional domain to be hashed and included at the end of fulfillment calldata.
255
+ * This can be used for onchain order attribution to assist with analytics.
256
+ * @param options.overrides Transaction overrides, ignored if not set.
257
+ * @returns Transaction hash of the order.
258
+ */
259
+ private async cancelSeaportOrders({
260
+ orders,
261
+ accountAddress,
262
+ domain,
263
+ protocolAddress = DEFAULT_SEAPORT_CONTRACT_ADDRESS,
264
+ overrides,
265
+ }: {
266
+ orders: OrderComponents[]
267
+ accountAddress: string
268
+ domain?: string
269
+ protocolAddress?: string
270
+ overrides?: Overrides
271
+ }): Promise<string> {
272
+ const seaport = getSeaportInstance(protocolAddress, this.context.seaport)
273
+
274
+ const transaction = await seaport
275
+ .cancelOrders(orders, accountAddress, domain, overrides)
276
+ .transact()
277
+
278
+ return transaction.hash
279
+ }
280
+
281
+ /**
282
+ * Get the offerer signature for canceling an order offchain.
283
+ * The signature will only be valid if the signer address is the address of the order's offerer.
284
+ */
285
+ async getOffererSignature(
286
+ protocolAddress: string,
287
+ orderHash: string,
288
+ chain: Chain,
289
+ ) {
290
+ const chainId = getChainId(chain)
291
+ const name = "Seaport"
292
+ const version = getSeaportVersion(protocolAddress)
293
+
294
+ if (
295
+ typeof (this.context.signerOrProvider as Signer).signTypedData ===
296
+ "undefined"
297
+ ) {
298
+ throw new Error(
299
+ "Please pass an ethers Signer into this sdk to derive an offerer signature",
300
+ )
301
+ }
302
+
303
+ return (this.context.signerOrProvider as Signer).signTypedData(
304
+ { chainId, name, version, verifyingContract: protocolAddress },
305
+ { OrderHash: [{ name: "orderHash", type: "bytes32" }] },
306
+ { orderHash },
307
+ )
308
+ }
309
+
310
+ /**
311
+ * Offchain cancel an order, offer or listing, by its order hash when protected by the SignedZone.
312
+ * Protocol and Chain are required to prevent hash collisions.
313
+ * Please note cancellation is only assured if a fulfillment signature was not vended prior to cancellation.
314
+ * @param protocolAddress The Seaport address for the order.
315
+ * @param orderHash The order hash, or external identifier, of the order.
316
+ * @param chain The chain where the order is located.
317
+ * @param offererSignature An EIP-712 signature from the offerer of the order.
318
+ * If this is not provided, the API key used to initialize the SDK must belong to the order's offerer.
319
+ * The signature must be a EIP-712 signature consisting of the order's Seaport contract's
320
+ * name, version, address, and chain. The struct to sign is `OrderHash` containing a
321
+ * single bytes32 field.
322
+ * @param useSignerToDeriveOffererSignature Derive the offererSignature from the Ethers signer passed into this sdk.
323
+ * @returns The response from the API.
324
+ */
325
+ async offchainCancelOrder(
326
+ protocolAddress: string,
327
+ orderHash: string,
328
+ chain: Chain = this.context.chain,
329
+ offererSignature?: string,
330
+ useSignerToDeriveOffererSignature?: boolean,
331
+ ) {
332
+ if (useSignerToDeriveOffererSignature) {
333
+ offererSignature = await this.getOffererSignature(
334
+ protocolAddress,
335
+ orderHash,
336
+ chain,
337
+ )
338
+ }
339
+ return this.context.api.offchainCancelOrder(
340
+ protocolAddress,
341
+ orderHash,
342
+ chain,
343
+ offererSignature,
344
+ )
345
+ }
346
+ }
@@ -0,0 +1,33 @@
1
+ import type { Seaport } from "@opensea/seaport-js"
2
+ import type { JsonRpcProvider, Signer } from "ethers"
3
+ import type { OpenSeaAPI } from "../api/api"
4
+ import type { Chain, EventData, EventType } from "../types"
5
+
6
+ /**
7
+ * Shared context passed to all SDK managers.
8
+ * Contains common dependencies and utilities needed across managers.
9
+ */
10
+ export interface SDKContext {
11
+ /** The blockchain chain being used */
12
+ chain: Chain
13
+ /** Signer or provider for blockchain interactions */
14
+ signerOrProvider: Signer | JsonRpcProvider
15
+ /** JSON-RPC provider for read operations */
16
+ provider: JsonRpcProvider
17
+ /** OpenSea API client */
18
+ api: OpenSeaAPI
19
+ /** Seaport client instance */
20
+ seaport: Seaport
21
+ /** Logger function for debugging */
22
+ logger: (msg: string) => void
23
+ /** Event dispatcher */
24
+ dispatch: (event: EventType, data: EventData) => void
25
+ /** Transaction confirmation helper */
26
+ confirmTransaction: (
27
+ hash: string,
28
+ event: EventType,
29
+ description: string,
30
+ ) => Promise<void>
31
+ /** Account availability checker */
32
+ requireAccountIsAvailable: (address: string) => Promise<void>
33
+ }