@imtbl/orderbook 2.18.1-alpha.1 → 2.20.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.
@@ -30,6 +30,6 @@ export declare class ImmutableApiClient {
30
30
  createListing({ orderHash, orderComponents, orderSignature, makerFees, }: CreateListingParams): Promise<ListingResult>;
31
31
  createBid({ orderHash, orderComponents, orderSignature, makerFees, }: CreateBidParams): Promise<BidResult>;
32
32
  createCollectionBid({ orderHash, orderComponents, orderSignature, makerFees, }: CreateCollectionBidParams): Promise<CollectionBidResult>;
33
- createMetadataBid({ orderHash, orderComponents, orderSignature, makerFees, metadataId, }: CreateMetadataBidParams): Promise<MetadataBidResult>;
33
+ createMetadataBid(params: CreateMetadataBidParams): Promise<MetadataBidResult>;
34
34
  createTraitBid({ orderHash, orderComponents, orderSignature, makerFees, traitCriteria, }: CreateTraitBidParams): Promise<TraitBidResult>;
35
35
  }
@@ -56,5 +56,6 @@ export type { TradeResult } from './models/TradeResult';
56
56
  export type { TraitBidResult } from './models/TraitBidResult';
57
57
  export type { MetadataBidResult } from './models/MetadataBidResult';
58
58
  export type { TraitFilter } from './models/TraitFilter';
59
+ export type { MetadataFieldFilter } from './models/MetadataFieldFilter';
59
60
  export type { UnfulfillableOrder } from './models/UnfulfillableOrder';
60
61
  export { OrdersService } from './services/OrdersService';
@@ -1,6 +1,7 @@
1
1
  import type { AssetCollectionItem } from './AssetCollectionItem';
2
2
  import type { ERC20Item } from './ERC20Item';
3
3
  import type { Fee } from './Fee';
4
+ import type { MetadataFieldFilter } from './MetadataFieldFilter';
4
5
  import type { ProtocolData } from './ProtocolData';
5
6
  export type CreateMetadataBidRequestBody = {
6
7
  account_address: string;
@@ -35,7 +36,13 @@ export type CreateMetadataBidRequestBody = {
35
36
  */
36
37
  start_at: string;
37
38
  /**
38
- * The metadata_id (stack_id) that NFTs must have to fulfil this bid
39
+ * The metadata_id (stack_id) that NFTs must have to fulfil this bid.
40
+ * Mutually exclusive with `metadata_criteria`; exactly one must be set.
39
41
  */
40
- metadata_id: string;
42
+ metadata_id?: string;
43
+ /**
44
+ * Field-level metadata filters that NFTs must satisfy to fulfil this bid.
45
+ * Mutually exclusive with `metadata_id`; exactly one must be set.
46
+ */
47
+ metadata_criteria?: Array<MetadataFieldFilter>;
41
48
  };
@@ -0,0 +1,14 @@
1
+ export type MetadataFieldFilter = {
2
+ /**
3
+ * The metadata field name. Either a top-level NFT metadata field
4
+ * (`name`, `image`, `description`, `animation_url`, `external_url`,
5
+ * `youtube_url`) or an attribute identified by the `attribute:<trait_type>`
6
+ * prefix (e.g. `attribute:Background`).
7
+ */
8
+ field_name: string;
9
+ /**
10
+ * The metadata field values to match against. Matching is case-insensitive
11
+ * and OR-style within a single filter; multiple filters on a bid AND.
12
+ */
13
+ values: Array<string>;
14
+ };
@@ -2,6 +2,7 @@ import type { Chain } from './Chain';
2
2
  import type { Fee } from './Fee';
3
3
  import type { FillStatus } from './FillStatus';
4
4
  import type { Item } from './Item';
5
+ import type { MetadataFieldFilter } from './MetadataFieldFilter';
5
6
  import type { OrderStatus } from './OrderStatus';
6
7
  import type { ProtocolData } from './ProtocolData';
7
8
  import type { TraitFilter } from './TraitFilter';
@@ -52,9 +53,16 @@ export type Order = {
52
53
  */
53
54
  trait_criteria?: Array<TraitFilter>;
54
55
  /**
55
- * Metadata ID (stack ID) for metadata bids when returned by the API
56
+ * Metadata ID (stack ID) for metadata bids created with a single metadata
57
+ * stack. Omitted for metadata bids created with `metadata_criteria`.
56
58
  */
57
59
  metadata_id?: string;
60
+ /**
61
+ * Field-level metadata filters for metadata bids created with criteria
62
+ * instead of a `metadata_id`. Omitted for metadata bids created with a
63
+ * `metadata_id`.
64
+ */
65
+ metadata_criteria?: Array<MetadataFieldFilter>;
58
66
  };
59
67
  export declare namespace Order {
60
68
  /**
@@ -191,8 +191,14 @@ export declare class Orderbook {
191
191
  */
192
192
  prepareMetadataBid({ makerAddress, sell, buy, orderStart, orderExpiry, }: PrepareMetadataBidParams): Promise<PrepareMetadataBidResponse>;
193
193
  /**
194
- * Create a metadata bid (collection criteria offer plus metadata ID submitted to the API).
195
- * @param {CreateMetadataBidParams} createMetadataBidParams - Signed order and metadata ID.
194
+ * Create a metadata bid (collection criteria offer plus a metadata matching
195
+ * spec submitted to the API). The matching spec is either a single
196
+ * `metadataId` (NFTs whose indexed metadata stack ID equals this UUID) or
197
+ * a `metadataCriteria` array of field-level filters (NFTs whose metadata
198
+ * satisfies every filter; AND across filters, OR within a filter's
199
+ * `values`, case-insensitive). Exactly one of the two must be provided.
200
+ * @param {CreateMetadataBidParams} createMetadataBidParams - Signed order and
201
+ * metadata ID or criteria.
196
202
  * @return {MetadataBidResult} The created metadata bid.
197
203
  */
198
204
  createMetadataBid(createMetadataBidParams: CreateMetadataBidParams): Promise<MetadataBidResult>;
@@ -64,14 +64,46 @@ export interface TraitBid extends OrderFields {
64
64
  */
65
65
  traitCriteria: TraitFilter[];
66
66
  }
67
+ /**
68
+ * Top-level NFT metadata fields a metadata bid criterion may target.
69
+ * Mirrors the ERC-721 / OpenSea metadata schema indexed by Immutable.
70
+ */
71
+ export type MetadataTopLevelField = 'name' | 'image' | 'description' | 'animation_url' | 'external_url' | 'youtube_url';
72
+ /**
73
+ * An attribute-style field name. The portion after `attribute:` is the
74
+ * attribute's `trait_type` (e.g. `attribute:Background`).
75
+ */
76
+ export type MetadataAttributeField = `attribute:${string}`;
77
+ /**
78
+ * Field name a single metadata bid criterion can target. Either a known
79
+ * top-level metadata field, or an attribute-prefixed name.
80
+ */
81
+ export type MetadataFieldName = MetadataTopLevelField | MetadataAttributeField;
82
+ /**
83
+ * A single metadata bid criterion: a field name plus the acceptable values
84
+ * for that field. Within a filter values are OR'd; across filters they AND.
85
+ * Comparisons are case-insensitive.
86
+ */
87
+ export interface MetadataFieldFilter {
88
+ fieldName: MetadataFieldName;
89
+ values: string[];
90
+ }
67
91
  export interface MetadataBid extends OrderFields {
68
92
  type: 'METADATA_BID';
69
93
  sell: ERC20Item[];
70
94
  buy: (ERC721CollectionItem | ERC1155CollectionItem)[];
71
95
  /**
72
96
  * The metadata ID (stack ID) that NFTs must match to fulfil this bid.
97
+ * Set when the bid was created with a single metadata stack identifier.
98
+ * Mutually exclusive with `metadataCriteria`.
73
99
  */
74
- metadataId: string;
100
+ metadataId?: string;
101
+ /**
102
+ * Field-level metadata filters that NFTs must match to fulfil this bid.
103
+ * Set when the bid was created with criteria instead of a metadata ID.
104
+ * Empty when the bid was created with a `metadataId`.
105
+ */
106
+ metadataCriteria: MetadataFieldFilter[];
75
107
  }
76
108
  interface OrderFields {
77
109
  id: string;
@@ -304,9 +336,23 @@ export interface ListMetadataBidsResult {
304
336
  }
305
337
  export type PrepareMetadataBidParams = PrepareCollectionBidParams;
306
338
  export type PrepareMetadataBidResponse = PrepareOrderResponse;
307
- export interface CreateMetadataBidParams extends CreateCollectionBidParams {
339
+ /**
340
+ * Parameters for creating a metadata bid. Exactly one of `metadataId` or
341
+ * `metadataCriteria` must be provided.
342
+ *
343
+ * - `metadataId` mode: matches NFTs whose indexed metadata stack ID equals
344
+ * the supplied UUID.
345
+ * - `metadataCriteria` mode: matches NFTs whose metadata satisfies every
346
+ * filter (AND across filters, OR within a filter's `values`,
347
+ * case-insensitive).
348
+ */
349
+ export type CreateMetadataBidParams = CreateCollectionBidParams & ({
308
350
  metadataId: string;
309
- }
351
+ metadataCriteria?: never;
352
+ } | {
353
+ metadataId?: never;
354
+ metadataCriteria: MetadataFieldFilter[];
355
+ });
310
356
  export interface FulfillmentOrder {
311
357
  orderId: string;
312
358
  takerFees: FeeValue[];
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@imtbl/orderbook",
3
- "version": "2.18.1-alpha.1",
3
+ "version": "2.20.0",
4
4
  "author": "Immutable",
5
5
  "bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
6
6
  "dependencies": {
7
- "@imtbl/config": "2.18.1-alpha.1",
8
- "@imtbl/metrics": "2.18.1-alpha.1",
7
+ "@imtbl/config": "2.20.0",
8
+ "@imtbl/metrics": "2.20.0",
9
9
  "@opensea/seaport-js": "4.0.3",
10
10
  "axios": "^1.6.5",
11
11
  "ethers": "^6.13.4",