@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.
- package/dist/cjs/erc20/handler.d.ts +3 -1
- package/dist/cjs/erc20/handler.d.ts.map +1 -1
- package/dist/cjs/erc20/handler.js +1 -4
- package/dist/cjs/erc20/handler.js.map +1 -1
- package/dist/cjs/erc721/handler.d.ts +2 -1
- package/dist/cjs/erc721/handler.d.ts.map +1 -1
- package/dist/cjs/erc721/handler.js +2 -5
- package/dist/cjs/erc721/handler.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/marketplaces/index.d.ts +2 -0
- package/dist/cjs/marketplaces/index.d.ts.map +1 -0
- package/dist/cjs/marketplaces/index.js +18 -0
- package/dist/cjs/marketplaces/index.js.map +1 -0
- package/dist/cjs/marketplaces/opensea.d.ts +14 -5
- package/dist/cjs/marketplaces/opensea.d.ts.map +1 -1
- package/dist/cjs/marketplaces/opensea.js +30 -27
- package/dist/cjs/marketplaces/opensea.js.map +1 -1
- package/dist/cjs/marketplaces/types.d.ts +15 -5
- package/dist/cjs/marketplaces/types.d.ts.map +1 -1
- package/dist/cjs/marketplaces/types.js +2 -3
- package/dist/cjs/marketplaces/types.js.map +1 -1
- package/dist/esm/erc20/handler.d.ts +3 -1
- package/dist/esm/erc20/handler.d.ts.map +1 -1
- package/dist/esm/erc20/handler.js +1 -0
- package/dist/esm/erc20/handler.js.map +1 -1
- package/dist/esm/erc721/handler.d.ts +2 -1
- package/dist/esm/erc721/handler.d.ts.map +1 -1
- package/dist/esm/erc721/handler.js +1 -0
- package/dist/esm/erc721/handler.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/marketplaces/index.d.ts +2 -0
- package/dist/esm/marketplaces/index.d.ts.map +1 -0
- package/dist/esm/marketplaces/index.js +2 -0
- package/dist/esm/marketplaces/index.js.map +1 -0
- package/dist/esm/marketplaces/opensea.d.ts +14 -5
- package/dist/esm/marketplaces/opensea.d.ts.map +1 -1
- package/dist/esm/marketplaces/opensea.js +36 -20
- package/dist/esm/marketplaces/opensea.js.map +1 -1
- package/dist/esm/marketplaces/types.d.ts +15 -5
- package/dist/esm/marketplaces/types.d.ts.map +1 -1
- package/dist/esm/marketplaces/types.js +1 -3
- package/dist/esm/marketplaces/types.js.map +1 -1
- package/package.json +4 -4
- package/src/erc20/handler.ts +4 -1
- package/src/erc721/handler.ts +3 -1
- package/src/index.ts +2 -0
- package/src/marketplaces/index.ts +1 -0
- package/src/marketplaces/opensea.ts +60 -27
- 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
|
|
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.
|
|
267
|
+
side: OrderSide.OFFER
|
|
264
268
|
});
|
|
265
269
|
return this.convertOsOrder(osOrder);
|
|
266
270
|
}
|
|
267
271
|
|
|
268
|
-
public async buildAdvancedOrder(
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
withWrapper =
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
527
|
+
if (side === OrderSide.OFFER && !nftBid) {
|
|
517
528
|
console.warn(`NFT not found in order consideration`);
|
|
518
529
|
}
|
|
519
|
-
if (side === OrderSide.
|
|
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.
|
|
535
|
+
side = OrderSide.OFFER;
|
|
525
536
|
} else if (!nftBid && nftAsk) {
|
|
526
|
-
side = OrderSide.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
85
|
+
public abstract getOrders(
|
|
79
86
|
asset: {
|
|
80
87
|
contract: string;
|
|
81
|
-
|
|
88
|
+
tokenIds: string[];
|
|
82
89
|
},
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
90
|
+
side: Side,
|
|
91
|
+
filter?: OrderFilterOptions
|
|
92
|
+
): Promise<SignedOrder[]>;
|
|
93
|
+
public abstract generateFulfilmentData(asset: {
|
|
86
94
|
contract: string;
|
|
87
95
|
tokenId: string;
|
|
88
|
-
|
|
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[]
|