@bosonprotocol/core-sdk 1.41.0-alpha.2 → 1.41.0-alpha.21

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 (55) hide show
  1. package/dist/cjs/erc20/handler.d.ts +3 -1
  2. package/dist/cjs/erc20/handler.d.ts.map +1 -1
  3. package/dist/cjs/erc20/handler.js +1 -4
  4. package/dist/cjs/erc20/handler.js.map +1 -1
  5. package/dist/cjs/erc721/handler.d.ts +2 -1
  6. package/dist/cjs/erc721/handler.d.ts.map +1 -1
  7. package/dist/cjs/erc721/handler.js +2 -5
  8. package/dist/cjs/erc721/handler.js.map +1 -1
  9. package/dist/cjs/index.d.ts +2 -1
  10. package/dist/cjs/index.d.ts.map +1 -1
  11. package/dist/cjs/index.js +2 -1
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/marketplaces/index.d.ts +2 -0
  14. package/dist/cjs/marketplaces/index.d.ts.map +1 -0
  15. package/dist/cjs/marketplaces/index.js +18 -0
  16. package/dist/cjs/marketplaces/index.js.map +1 -0
  17. package/dist/cjs/marketplaces/opensea.d.ts +14 -5
  18. package/dist/cjs/marketplaces/opensea.d.ts.map +1 -1
  19. package/dist/cjs/marketplaces/opensea.js +30 -27
  20. package/dist/cjs/marketplaces/opensea.js.map +1 -1
  21. package/dist/cjs/marketplaces/types.d.ts +15 -5
  22. package/dist/cjs/marketplaces/types.d.ts.map +1 -1
  23. package/dist/cjs/marketplaces/types.js +2 -3
  24. package/dist/cjs/marketplaces/types.js.map +1 -1
  25. package/dist/esm/erc20/handler.d.ts +3 -1
  26. package/dist/esm/erc20/handler.d.ts.map +1 -1
  27. package/dist/esm/erc20/handler.js +1 -0
  28. package/dist/esm/erc20/handler.js.map +1 -1
  29. package/dist/esm/erc721/handler.d.ts +2 -1
  30. package/dist/esm/erc721/handler.d.ts.map +1 -1
  31. package/dist/esm/erc721/handler.js +1 -0
  32. package/dist/esm/erc721/handler.js.map +1 -1
  33. package/dist/esm/index.d.ts +2 -1
  34. package/dist/esm/index.d.ts.map +1 -1
  35. package/dist/esm/index.js +1 -0
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/marketplaces/index.d.ts +2 -0
  38. package/dist/esm/marketplaces/index.d.ts.map +1 -0
  39. package/dist/esm/marketplaces/index.js +2 -0
  40. package/dist/esm/marketplaces/index.js.map +1 -0
  41. package/dist/esm/marketplaces/opensea.d.ts +14 -5
  42. package/dist/esm/marketplaces/opensea.d.ts.map +1 -1
  43. package/dist/esm/marketplaces/opensea.js +36 -20
  44. package/dist/esm/marketplaces/opensea.js.map +1 -1
  45. package/dist/esm/marketplaces/types.d.ts +15 -5
  46. package/dist/esm/marketplaces/types.d.ts.map +1 -1
  47. package/dist/esm/marketplaces/types.js +1 -3
  48. package/dist/esm/marketplaces/types.js.map +1 -1
  49. package/package.json +4 -4
  50. package/src/erc20/handler.ts +4 -1
  51. package/src/erc721/handler.ts +3 -1
  52. package/src/index.ts +2 -0
  53. package/src/marketplaces/index.ts +1 -0
  54. package/src/marketplaces/opensea.ts +60 -27
  55. package/src/marketplaces/types.ts +25 -8
@@ -4,7 +4,6 @@ import {
4
4
  FulfillmentDataResponse,
5
5
  GetNFTResponse,
6
6
  OrderAPIOptions,
7
- OrderSide,
8
7
  OrderV2,
9
8
  OrdersQueryOptions,
10
9
  ProtocolData
@@ -18,6 +17,8 @@ import {
18
17
  Marketplace,
19
18
  MarketplaceType,
20
19
  Order,
20
+ OrderFilterOptions,
21
+ OrderSide,
21
22
  SignedOrder,
22
23
  Wrapper
23
24
  } from "./types";
@@ -68,6 +69,9 @@ export type OpenSeaSDKHandler = {
68
69
  api: {
69
70
  apiBaseUrl: string;
70
71
  getOrder(order: Omit<OrdersQueryOptions, "limit">): Promise<OrderV2>;
72
+ getOrders(
73
+ order: Omit<OrdersQueryOptions, "limit">
74
+ ): Promise<{ orders: OrderV2[] }>;
71
75
  generateFulfillmentData(
72
76
  fulfillerAddress: string,
73
77
  orderHash: string,
@@ -253,30 +257,38 @@ export class OpenSeaMarketplace extends Marketplace {
253
257
  const protocolAddress = listing.protocolAddress || this._contracts.seaport;
254
258
  if (!protocolAddress) {
255
259
  throw new Error(
256
- `Seaport protocol address must be specified in Lsiting or CoreSDK config`
260
+ `Seaport protocol address must be specified in Listing or CoreSDK config`
257
261
  );
258
262
  }
259
263
 
260
264
  const osOrder = await this._handler.api.postOrder(order, {
261
265
  protocol: "seaport",
262
266
  protocolAddress,
263
- side: OrderSide.BID
267
+ side: OrderSide.OFFER
264
268
  });
265
269
  return this.convertOsOrder(osOrder);
266
270
  }
267
271
 
268
- public async buildAdvancedOrder(asset: {
269
- contract: string;
270
- tokenId: string;
271
- }): Promise<AdvancedOrder> {
272
- // Asumption: we're fulfilling a Bid Order (don't know if it makes sense with an Ask order)
272
+ public async buildAdvancedOrder(
273
+ asset: {
274
+ contract: string;
275
+ tokenId: string;
276
+ withWrapper?: boolean;
277
+ },
278
+ filter: OrderFilterOptions = {}
279
+ ): Promise<AdvancedOrder> {
280
+ // Assumption: we're fulfilling a Bid Order (don't know if it makes sense with an Ask order)
273
281
  const osOrder = await this._handler.api.getOrder({
274
282
  assetContractAddress: asset.contract,
275
283
  tokenId: asset.tokenId,
276
- side: OrderSide.BID
284
+ side: OrderSide.OFFER,
285
+ ...filter
277
286
  });
287
+ const fulfillerAddress = asset.withWrapper
288
+ ? asset.contract // If the token is wrapped, the fulfiller is the wrapper contract itself
289
+ : this._contracts.priceDiscoveryClient; // otherwise the address of the PriceDiscoveryClient contract
278
290
  const ffd = await this._handler.api.generateFulfillmentData(
279
- this._contracts.priceDiscoveryClient, // the address of the PriceDiscoveryClient contract, which will call the fulfilment method
291
+ fulfillerAddress,
280
292
  osOrder.orderHash,
281
293
  osOrder.protocolAddress,
282
294
  osOrder.side
@@ -291,13 +303,12 @@ export class OpenSeaMarketplace extends Marketplace {
291
303
  return inputData.orders[0];
292
304
  }
293
305
 
294
- public async generateFulfilmentData(
295
- asset: {
296
- contract: string;
297
- tokenId: string;
298
- },
299
- withWrapper = false
300
- ): Promise<PriceDiscoveryStruct> {
306
+ public async generateFulfilmentData(asset: {
307
+ contract: string;
308
+ tokenId: string;
309
+ withWrapper?: boolean;
310
+ }): Promise<PriceDiscoveryStruct> {
311
+ const withWrapper = !!asset.withWrapper;
301
312
  const wrapper = withWrapper
302
313
  ? await this.getOrCreateVouchersWrapper(asset.contract)
303
314
  : undefined;
@@ -305,7 +316,7 @@ export class OpenSeaMarketplace extends Marketplace {
305
316
  const osOrder = await this._handler.api.getOrder({
306
317
  assetContractAddress: withWrapper ? wrapper.address : asset.contract,
307
318
  tokenId: asset.tokenId,
308
- side: OrderSide.BID
319
+ side: OrderSide.OFFER
309
320
  });
310
321
  const ffd = await this._handler.api.generateFulfillmentData(
311
322
  withWrapper
@@ -438,7 +449,7 @@ export class OpenSeaMarketplace extends Marketplace {
438
449
  const osOrder = await this._handler.api.getOrder({
439
450
  assetContractAddress: wrapper.address, // Bid Order must be for the wrapped token
440
451
  tokenId: asset.tokenId,
441
- side: OrderSide.BID
452
+ side: OrderSide.OFFER
442
453
  });
443
454
  const ffd = await this._handler.api.generateFulfillmentData(
444
455
  this._contracts.priceDiscoveryClient, // the address of the PriceDiscoveryClient contract, which will call the fulfilment method
@@ -473,7 +484,7 @@ export class OpenSeaMarketplace extends Marketplace {
473
484
  return undefined;
474
485
  }
475
486
  const orderInfo = this.extractOrderInfo(osOrder.protocolData.parameters);
476
- const side = orderInfo.side === OrderSide.ASK ? Side.Ask : Side.Bid;
487
+ const side = orderInfo.side === OrderSide.LISTING ? Side.Ask : Side.Bid;
477
488
  return {
478
489
  offerer: orderInfo.offerer,
479
490
  side,
@@ -513,17 +524,17 @@ export class OpenSeaMarketplace extends Marketplace {
513
524
  (c) => c.itemType === ItemType.ERC721
514
525
  );
515
526
  const nftAsk = parameters.offer.find((c) => c.itemType === ItemType.ERC721);
516
- if (side === OrderSide.BID && !nftBid) {
527
+ if (side === OrderSide.OFFER && !nftBid) {
517
528
  console.warn(`NFT not found in order consideration`);
518
529
  }
519
- if (side === OrderSide.ASK && !nftAsk) {
530
+ if (side === OrderSide.LISTING && !nftAsk) {
520
531
  console.warn(`NFT not found in order offer`);
521
532
  }
522
533
  if (!side) {
523
534
  if (nftBid && !nftAsk) {
524
- side = OrderSide.BID;
535
+ side = OrderSide.OFFER;
525
536
  } else if (!nftBid && nftAsk) {
526
- side = OrderSide.ASK;
537
+ side = OrderSide.LISTING;
527
538
  } else if (nftBid && nftAsk) {
528
539
  console.warn(
529
540
  `NFT found in both consideration and offer. Unable to detect the order side`
@@ -534,7 +545,7 @@ export class OpenSeaMarketplace extends Marketplace {
534
545
  );
535
546
  }
536
547
  }
537
- if (side === OrderSide.BID) {
548
+ if (side === OrderSide.OFFER) {
538
549
  price = parameters.offer
539
550
  .filter((c) => c.itemType === ItemType.ERC20)
540
551
  .reduce(
@@ -583,12 +594,14 @@ export class OpenSeaMarketplace extends Marketplace {
583
594
  contract: string;
584
595
  tokenId: string;
585
596
  },
586
- side: Side
597
+ side: Side,
598
+ filter: OrderFilterOptions = {}
587
599
  ): Promise<SignedOrder> {
588
600
  const osOrder = await this._handler.api.getOrder({
589
601
  assetContractAddress: asset.contract,
590
602
  tokenId: asset.tokenId,
591
- side: side === Side.Ask ? OrderSide.ASK : OrderSide.BID
603
+ side: side === Side.Ask ? OrderSide.LISTING : OrderSide.OFFER,
604
+ ...filter
592
605
  });
593
606
  return osOrder
594
607
  ? {
@@ -597,4 +610,24 @@ export class OpenSeaMarketplace extends Marketplace {
597
610
  }
598
611
  : undefined;
599
612
  }
613
+
614
+ public async getOrders(
615
+ asset: {
616
+ contract: string;
617
+ tokenIds: string[];
618
+ },
619
+ side: Side,
620
+ filter: OrderFilterOptions = {}
621
+ ): Promise<SignedOrder[]> {
622
+ const { orders } = await this._handler.api.getOrders({
623
+ assetContractAddress: asset.contract,
624
+ tokenIds: asset.tokenIds,
625
+ side: side === Side.Ask ? OrderSide.LISTING : OrderSide.OFFER,
626
+ ...filter
627
+ });
628
+ return orders.map((osOrder) => ({
629
+ ...this.convertOsOrder(osOrder),
630
+ signature: osOrder.protocolData?.signature
631
+ }));
632
+ }
600
633
  }
@@ -16,7 +16,7 @@ export enum MarketplaceType {
16
16
  OPENSEA
17
17
  }
18
18
 
19
- export enum OrderSide {}
19
+ export { OrderSide } from "opensea-js";
20
20
 
21
21
  export type MarketplaceHandler = OpenSeaSDKHandler | DefaultHandler;
22
22
 
@@ -64,6 +64,12 @@ export abstract class Wrapper {
64
64
  public abstract get address(): string;
65
65
  }
66
66
 
67
+ export type OrderFilterOptions = {
68
+ maker?: string;
69
+ listedAfter?: number | string;
70
+ listedBefore?: number | string;
71
+ };
72
+
67
73
  export abstract class Marketplace {
68
74
  constructor(protected _type: MarketplaceType) {}
69
75
  public abstract createListing(listing: Listing): Promise<Order>;
@@ -73,19 +79,30 @@ export abstract class Marketplace {
73
79
  contract: string;
74
80
  tokenId: string;
75
81
  },
76
- side: Side
82
+ side: Side,
83
+ filter?: OrderFilterOptions
77
84
  ): Promise<SignedOrder>;
78
- public abstract generateFulfilmentData(
85
+ public abstract getOrders(
79
86
  asset: {
80
87
  contract: string;
81
- tokenId: string;
88
+ tokenIds: string[];
82
89
  },
83
- withWrapper?: boolean
84
- ): Promise<PriceDiscoveryStruct>;
85
- public abstract buildAdvancedOrder(asset: {
90
+ side: Side,
91
+ filter?: OrderFilterOptions
92
+ ): Promise<SignedOrder[]>;
93
+ public abstract generateFulfilmentData(asset: {
86
94
  contract: string;
87
95
  tokenId: string;
88
- }): Promise<AdvancedOrder>;
96
+ withWrapper?: boolean;
97
+ }): Promise<PriceDiscoveryStruct>;
98
+ public abstract buildAdvancedOrder(
99
+ asset: {
100
+ contract: string;
101
+ tokenId: string;
102
+ withWrapper?: boolean;
103
+ },
104
+ filter?: OrderFilterOptions
105
+ ): Promise<AdvancedOrder>;
89
106
  public abstract wrapVouchers(
90
107
  contract: string,
91
108
  tokenIds: string[]