@proveanything/smartlinks 1.10.0 → 1.10.1

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.
@@ -1,4 +1,4 @@
1
- import type { AppCase, CreateCaseInput, UpdateCaseInput, AppendHistoryInput, CaseSummaryRequest, CaseSummaryResponse, CaseListQueryParams, AppThread, CreateThreadInput, UpdateThreadInput, ReplyInput, ThreadListQueryParams, AppRecord, CreateRecordInput, CreateRecordResponse, UpdateRecordInput, UpsertRecordInput, UpsertRecordResponse, MatchRecordsInput, MatchResult, BulkUpsertItem, BulkUpsertResult, BulkDeleteResult, BulkDeleteInput, RecordListQueryParams, PaginatedResponse, AggregateRequest, AggregateResponse, RelatedResponse } from '../types/appObjects';
1
+ import type { AppCase, CreateCaseInput, UpdateCaseInput, AppendHistoryInput, CaseSummaryRequest, CaseSummaryResponse, CaseListQueryParams, AppThread, CreateThreadInput, UpdateThreadInput, ReplyInput, ThreadListQueryParams, AppRecord, CreateRecordInput, CreateRecordResponse, UpdateRecordInput, UpsertRecordInput, UpsertRecordResponse, MatchRecordsInput, MatchResult, BulkUpsertItem, BulkUpsertResult, BulkDeleteResult, BulkDeleteInput, RecordListQueryParams, ResolveAllParams, ResolveAllResult, PreviewRuleParams, PreviewRuleResult, PaginatedResponse, AggregateRequest, AggregateResponse, RelatedResponse } from '../types/appObjects';
2
2
  export declare namespace app {
3
3
  namespace cases {
4
4
  /**
@@ -239,5 +239,20 @@ export declare namespace app {
239
239
  * ```
240
240
  */
241
241
  function bulkDelete(collectionId: string, appId: string, input: BulkDeleteInput): Promise<BulkDeleteResult>;
242
+ /**
243
+ * Resolve every applicable record for a product context in one call.
244
+ * Returns records across all tiers (proof, batch, variant, product, rule, facet, collection)
245
+ * deduplicated and sorted by specificity descending.
246
+ * POST /records/resolve-all
247
+ *
248
+ * @param admin - false for public (visibility-filtered), true for admin (all records)
249
+ */
250
+ function resolveAll(collectionId: string, appId: string, input: ResolveAllParams, admin?: boolean): Promise<ResolveAllResult>;
251
+ /**
252
+ * Preview which products in the collection match a given facetRule.
253
+ * Admin only. Use for live "matches N products" feedback while authoring a rule.
254
+ * POST /records/preview-rule
255
+ */
256
+ function previewRule(collectionId: string, appId: string, input: PreviewRuleParams): Promise<PreviewRuleResult>;
242
257
  }
243
258
  }
@@ -378,6 +378,29 @@ export var app;
378
378
  return post(path, input);
379
379
  }
380
380
  records_1.bulkDelete = bulkDelete;
381
+ /**
382
+ * Resolve every applicable record for a product context in one call.
383
+ * Returns records across all tiers (proof, batch, variant, product, rule, facet, collection)
384
+ * deduplicated and sorted by specificity descending.
385
+ * POST /records/resolve-all
386
+ *
387
+ * @param admin - false for public (visibility-filtered), true for admin (all records)
388
+ */
389
+ async function resolveAll(collectionId, appId, input, admin = false) {
390
+ const path = `${basePath(collectionId, appId, admin)}/resolve-all`;
391
+ return post(path, input);
392
+ }
393
+ records_1.resolveAll = resolveAll;
394
+ /**
395
+ * Preview which products in the collection match a given facetRule.
396
+ * Admin only. Use for live "matches N products" feedback while authoring a rule.
397
+ * POST /records/preview-rule
398
+ */
399
+ async function previewRule(collectionId, appId, input) {
400
+ const path = `${basePath(collectionId, appId, true)}/preview-rule`;
401
+ return post(path, input);
402
+ }
403
+ records_1.previewRule = previewRule;
381
404
  })(records = app.records || (app.records = {}));
382
405
  })(app || (app = {})); // end namespace app
383
406
  // ==================== HELPERS ====================
@@ -1,6 +1,6 @@
1
1
  # Smartlinks API Summary
2
2
 
3
- Version: 1.10.0 | Generated: 2026-04-25T13:26:09.113Z
3
+ Version: 1.10.1 | Generated: 2026-04-25T15:35:27.893Z
4
4
 
5
5
  This is a concise summary of all available API functions and types.
6
6
 
@@ -1880,6 +1880,27 @@ interface ReplyInput {
1880
1880
  }
1881
1881
  ```
1882
1882
 
1883
+ **FacetRuleClause** (interface)
1884
+ ```typescript
1885
+ interface FacetRuleClause {
1886
+ * Facet key this clause tests, e.g. "brand", "type", "bread-type".
1887
+ * Must reference a defined facet on the collection.
1888
+ facetKey: string
1889
+ * One or more facet value keys that satisfy the clause (OR semantics).
1890
+ * At least one value required. Server deduplicates and sorts.
1891
+ anyOf: string[]
1892
+ }
1893
+ ```
1894
+
1895
+ **FacetRule** (interface)
1896
+ ```typescript
1897
+ interface FacetRule {
1898
+ * All clauses must be satisfied (AND semantics).
1899
+ * Must be non-empty; no duplicate facetKey entries.
1900
+ all: FacetRuleClause[]
1901
+ }
1902
+ ```
1903
+
1883
1904
  **ScopeFacetClause** (interface)
1884
1905
  ```typescript
1885
1906
  interface ScopeFacetClause {
@@ -1927,6 +1948,7 @@ interface BulkUpsertItem {
1927
1948
  scope?: RecordScope
1928
1949
  data?: Record<string, unknown> | null
1929
1950
  metadata?: Record<string, unknown> | null
1951
+ facetRule?: FacetRule | null
1930
1952
  }
1931
1953
  ```
1932
1954
 
@@ -1950,13 +1972,26 @@ interface BulkDeleteResult {
1950
1972
  }
1951
1973
  ```
1952
1974
 
1975
+ **MatchEntry** (interface)
1976
+ ```typescript
1977
+ interface MatchEntry {
1978
+ record: AppRecord
1979
+ matchedAt: MatchedAt
1980
+ matchedRule?: FacetRule
1981
+ * Number of clauses in the rule that fired.
1982
+ * Present only when matchedAt === 'rule'.
1983
+ matchedClauseCount?: number
1984
+ specificity: number
1985
+ }
1986
+ ```
1987
+
1953
1988
  **MatchResult** (interface)
1954
1989
  ```typescript
1955
1990
  interface MatchResult {
1956
- records: MatchedRecord[]
1991
+ records: MatchEntry[]
1957
1992
  * Only present when strategy is 'best'.
1958
1993
  * The single highest-specificity record per recordType.
1959
- best?: Record<string, MatchedRecord>
1994
+ best?: Record<string, MatchEntry>
1960
1995
  }
1961
1996
  ```
1962
1997
 
@@ -1973,6 +2008,7 @@ interface UpsertRecordInput {
1973
2008
  scope?: RecordScope
1974
2009
  data?: Record<string, unknown> | null
1975
2010
  metadata?: Record<string, unknown> | null
2011
+ facetRule?: FacetRule | null
1976
2012
  }
1977
2013
  ```
1978
2014
 
@@ -2022,6 +2058,10 @@ interface AppRecord {
2022
2058
  * Numeric specificity score computed from scope.
2023
2059
  * Higher = more specific. 0 = universal scope.
2024
2060
  specificity: number
2061
+ * Facet rule for rule records (ref starts with "rule:").
2062
+ * null on all other record types. Mutually exclusive with scope.
2063
+ * SDK 1.10.
2064
+ facetRule: FacetRule | null
2025
2065
  data: Record<string, unknown>
2026
2066
  owner: Record<string, unknown>
2027
2067
  admin: Record<string, unknown> // admin only
@@ -2052,6 +2092,7 @@ interface CreateRecordInput {
2052
2092
  owner?: Record<string, unknown>
2053
2093
  admin?: Record<string, unknown> // admin only
2054
2094
  metadata?: Record<string, unknown>
2095
+ facetRule?: FacetRule | null
2055
2096
  }
2056
2097
  ```
2057
2098
 
@@ -2071,6 +2112,57 @@ interface UpdateRecordInput {
2071
2112
  customId?: string
2072
2113
  sourceSystem?: string
2073
2114
  metadata?: Record<string, unknown>
2115
+ facetRule?: FacetRule | null
2116
+ }
2117
+ ```
2118
+
2119
+ **ResolveAllParams** (interface)
2120
+ ```typescript
2121
+ interface ResolveAllParams {
2122
+ context: {
2123
+ productId?: string
2124
+ variantId?: string
2125
+ batchId?: string
2126
+ proofId?: string
2127
+ * Facet assignments for the product — used for both legacy facet-ref matching
2128
+ * and facetRule evaluation.
2129
+ * e.g. { "brand": "samsung", "type": ["tv", "laptop"] }
2130
+ facets?: Record<string, string | string[]>
2131
+ }
2132
+ recordType?: string
2133
+ tiers?: Array<'proof' | 'batch' | 'variant' | 'product' | 'rule' | 'facet' | 'collection'>
2134
+ limit?: number
2135
+ at?: string
2136
+ includeScheduled?: boolean
2137
+ includeExpired?: boolean
2138
+ }
2139
+ ```
2140
+
2141
+ **ResolveAllResult** (interface)
2142
+ ```typescript
2143
+ interface ResolveAllResult {
2144
+ * Every applicable record for the given product context, sorted by precedence
2145
+ * (most-specific first). Each record appears at most once.
2146
+ records: MatchEntry[]
2147
+ * true if the result was truncated at the safety cap.
2148
+ * Default cap: 500 records. Use `limit` to raise it (max 5000).
2149
+ truncated?: boolean
2150
+ }
2151
+ ```
2152
+
2153
+ **PreviewRuleParams** (interface)
2154
+ ```typescript
2155
+ interface PreviewRuleParams {
2156
+ facetRule: FacetRule
2157
+ limit?: number
2158
+ }
2159
+ ```
2160
+
2161
+ **PreviewRuleResult** (interface)
2162
+ ```typescript
2163
+ interface PreviewRuleResult {
2164
+ sampleProductIds: string[]
2165
+ totalMatches: number
2074
2166
  }
2075
2167
  ```
2076
2168
 
@@ -2140,7 +2232,7 @@ interface PublicCreateBranch {
2140
2232
 
2141
2233
  **BulkDeleteInput** = ``
2142
2234
 
2143
- **MatchedAtLevel** = ``
2235
+ **MatchedAt** = ``
2144
2236
 
2145
2237
  ### asset
2146
2238
 
@@ -7306,6 +7398,17 @@ Upsert up to 500 records in a single transaction. Each row is individually error
7306
7398
  input: BulkDeleteInput) → `Promise<BulkDeleteResult>`
7307
7399
  Soft-delete records in bulk. Supports two modes: - **refs mode**: explicit list of refs (max 1000) - **scope mode**: delete by scope anchor (productId / variantId / etc.) POST /records/bulk-delete (admin only) ```ts // Refs mode await app.records.bulkDelete(collectionId, appId, { refs: ['product:prod_abc', 'product:prod_xyz'], recordType: 'nutrition', }); // Scope mode await app.records.bulkDelete(collectionId, appId, { scope: { productId: 'prod_abc' }, }); ```
7308
7400
 
7401
+ **resolveAll**(collectionId: string,
7402
+ appId: string,
7403
+ input: ResolveAllParams,
7404
+ admin: boolean = false) → `Promise<ResolveAllResult>`
7405
+ Resolve every applicable record for a product context in one call. Returns records across all tiers (proof, batch, variant, product, rule, facet, collection) deduplicated and sorted by specificity descending. POST /records/resolve-all
7406
+
7407
+ **previewRule**(collectionId: string,
7408
+ appId: string,
7409
+ input: PreviewRuleParams) → `Promise<PreviewRuleResult>`
7410
+ Preview which products in the collection match a given facetRule. Admin only. Use for live "matches N products" feedback while authoring a rule. POST /records/preview-rule
7411
+
7309
7412
  ### app.threads
7310
7413
 
7311
7414
  Conversation-oriented app objects for comments, discussions, Q&A, and reply-driven experiences.
@@ -545,24 +545,94 @@ Every record in the response includes a `matchedAt` field indicating **which sco
545
545
  ```typescript
546
546
  const { records } = await app.records.match(collectionId, appId, { target, recordType: 'nutrition' }, true);
547
547
 
548
- for (const record of records) {
549
- switch (record.matchedAt) {
550
- case 'proof': /* "Scan-specific" */ break;
551
- case 'batch': /* "Batch-specific" */ break;
552
- case 'variant': /* "Size-specific" */ break;
553
- case 'product': /* "Inherited from product" */ break;
554
- case 'facet': /* "Tier-specific" */ break;
555
- case 'universal': /* "Default" */ break;
548
+ for (const entry of records) {
549
+ switch (entry.matchedAt) {
550
+ case 'proof': /* "Scan-specific" */ break;
551
+ case 'batch': /* "Batch-specific" */ break;
552
+ case 'variant': /* "Size-specific" */ break;
553
+ case 'product': /* "Inherited from product" */ break;
554
+ case 'rule': /* "Matches rule" */ break;
555
+ case 'facet': /* "Tier-specific" */ break;
556
+ case 'collection': /* "Collection default" */ break;
557
+ case 'universal': /* "Default" */ break;
556
558
  }
557
559
  }
558
560
  ```
559
561
 
560
- Precedence follows specificity order: `proof > batch > variant > product > facet > universal`.
562
+ Precedence follows: `proof > batch > variant > product > rule > facet > collection > universal`.
561
563
 
562
564
  #### React — `useResolvedRecord`
563
565
 
564
566
  For React consumers, the `useResolvedRecord` hook in `@proveanything/smartlinks-utils-ui` wraps `records.match()` and returns the best-matching record with loading and error states. The raw `records.match()` API exists for non-React consumers and custom resolution logic.
565
567
 
568
+ ### Facet-Rule Records
569
+
570
+ A record can declare a **multi-clause boolean rule** (`facetRule`) describing which products it applies to, instead of a single `scope.facets` entry. The rule is AND across facet keys, OR within values of each key:
571
+
572
+ ```typescript
573
+ // Create a record that matches all Samsung TVs and laptops
574
+ await app.records.create(collectionId, appId, {
575
+ recordType: 'warranty',
576
+ facetRule: {
577
+ all: [
578
+ { facetKey: 'brand', anyOf: ['samsung'] },
579
+ { facetKey: 'type', anyOf: ['tv', 'laptop'] },
580
+ ],
581
+ },
582
+ data: { warrantyYears: 2 },
583
+ }, true);
584
+ ```
585
+
586
+ `facetRule` is **mutually exclusive with `scope`**. A record has either a structured scope or a facetRule, never both. The server assigns `ref: 'rule:<ulid>'` automatically.
587
+
588
+ Specificity for rule records: `Σ (50 + clause.anyOf.length)` across all clauses. A 2-clause rule with 1 value each scores `(50+1)+(50+1) = 102`, which ranks above a plain product-scoped record (100) in `resolveAll()` results.
589
+
590
+ Use `records.previewRule()` to see which products a rule would match before creating it:
591
+
592
+ ```typescript
593
+ const { sampleProductIds, totalMatches } = await app.records.previewRule(collectionId, appId, {
594
+ facetRule: {
595
+ all: [{ facetKey: 'brand', anyOf: ['samsung'] }],
596
+ },
597
+ });
598
+ // totalMatches: 42, sampleProductIds: ['prod_001', 'prod_002', ...]
599
+ ```
600
+
601
+ ### Resolve All
602
+
603
+ Use `app.records.resolveAll()` to fetch **every applicable record for a product context** in one request—across all tiers (proof, batch, variant, product, rule, facet, collection defaults), deduplicated and sorted by specificity:
604
+
605
+ ```typescript
606
+ // All records that apply to this product context (admin)
607
+ const { records, truncated } = await app.records.resolveAll(collectionId, appId, {
608
+ context: {
609
+ productId: 'prod_001',
610
+ facets: { brand: 'samsung', type: 'tv' },
611
+ },
612
+ recordType: 'warranty',
613
+ }, true);
614
+
615
+ for (const entry of records) {
616
+ console.log(entry.matchedAt, entry.specificity, entry.record.id);
617
+ if (entry.matchedAt === 'rule') {
618
+ console.log('rule fired:', entry.matchedRule, 'clauses:', entry.matchedClauseCount);
619
+ }
620
+ }
621
+
622
+ // Public endpoint — visibility-filtered (admin records excluded)
623
+ const { records: publicRecords } = await app.records.resolveAll(collectionId, appId, {
624
+ context: { productId: 'prod_001', facets: { brand: 'samsung' } },
625
+ }, false);
626
+
627
+ // Filter to specific tiers
628
+ const { records: ruleRecords } = await app.records.resolveAll(collectionId, appId, {
629
+ context: { productId: 'prod_001', facets: { brand: 'samsung', type: 'tv' } },
630
+ tiers: ['product', 'rule', 'collection'],
631
+ }, true);
632
+ ```
633
+
634
+ `truncated: true` means the result hit the safety cap (default 500). Raise it with `limit` (max 5000).
635
+
566
636
  ### Upsert
567
637
 
568
638
  Create-or-update a record by `ref` in a single call:
package/dist/openapi.yaml CHANGED
@@ -12404,6 +12404,90 @@ paths:
12404
12404
  application/json:
12405
12405
  schema:
12406
12406
  $ref: "#/components/schemas/MatchRecordsInput"
12407
+ /{zone}/collection/{collectionId}/app/{appId}/records/preview-rule:
12408
+ post:
12409
+ tags:
12410
+ - records
12411
+ summary: Preview which products in the collection match a given facetRule.
12412
+ operationId: records_previewRule
12413
+ security: []
12414
+ parameters:
12415
+ - name: zone
12416
+ in: path
12417
+ required: true
12418
+ schema:
12419
+ type: string
12420
+ - name: collectionId
12421
+ in: path
12422
+ required: true
12423
+ schema:
12424
+ type: string
12425
+ - name: appId
12426
+ in: path
12427
+ required: true
12428
+ schema:
12429
+ type: string
12430
+ responses:
12431
+ 200:
12432
+ description: Success
12433
+ content:
12434
+ application/json:
12435
+ schema:
12436
+ $ref: "#/components/schemas/PreviewRuleResult"
12437
+ 400:
12438
+ description: Bad request
12439
+ 401:
12440
+ description: Unauthorized
12441
+ 404:
12442
+ description: Not found
12443
+ requestBody:
12444
+ required: true
12445
+ content:
12446
+ application/json:
12447
+ schema:
12448
+ $ref: "#/components/schemas/PreviewRuleParams"
12449
+ /{zone}/collection/{collectionId}/app/{appId}/records/resolve-all:
12450
+ post:
12451
+ tags:
12452
+ - records
12453
+ summary: Resolve every applicable record for a product context in one call.
12454
+ operationId: records_resolveAll
12455
+ security: []
12456
+ parameters:
12457
+ - name: zone
12458
+ in: path
12459
+ required: true
12460
+ schema:
12461
+ type: string
12462
+ - name: collectionId
12463
+ in: path
12464
+ required: true
12465
+ schema:
12466
+ type: string
12467
+ - name: appId
12468
+ in: path
12469
+ required: true
12470
+ schema:
12471
+ type: string
12472
+ responses:
12473
+ 200:
12474
+ description: Success
12475
+ content:
12476
+ application/json:
12477
+ schema:
12478
+ $ref: "#/components/schemas/ResolveAllResult"
12479
+ 400:
12480
+ description: Bad request
12481
+ 401:
12482
+ description: Unauthorized
12483
+ 404:
12484
+ description: Not found
12485
+ requestBody:
12486
+ required: true
12487
+ content:
12488
+ application/json:
12489
+ schema:
12490
+ $ref: "#/components/schemas/ResolveAllParams"
12407
12491
  /{zone}/collection/{collectionId}/app/{appId}/records/upsert:
12408
12492
  post:
12409
12493
  tags:
@@ -15514,6 +15598,27 @@ components:
15514
15598
  type: string
15515
15599
  contactId:
15516
15600
  type: string
15601
+ FacetRuleClause:
15602
+ type: object
15603
+ properties:
15604
+ facetKey:
15605
+ type: string
15606
+ anyOf:
15607
+ type: array
15608
+ items:
15609
+ type: string
15610
+ required:
15611
+ - facetKey
15612
+ - anyOf
15613
+ FacetRule:
15614
+ type: object
15615
+ properties:
15616
+ all:
15617
+ type: array
15618
+ items:
15619
+ $ref: "#/components/schemas/FacetRuleClause"
15620
+ required:
15621
+ - all
15517
15622
  ScopeFacetClause:
15518
15623
  type: object
15519
15624
  properties:
@@ -15583,6 +15688,8 @@ components:
15583
15688
  metadata:
15584
15689
  type: object
15585
15690
  additionalProperties: true
15691
+ facetRule:
15692
+ $ref: "#/components/schemas/FacetRule"
15586
15693
  required:
15587
15694
  - ref
15588
15695
  BulkUpsertResult:
@@ -15610,20 +15717,37 @@ components:
15610
15717
  type: object
15611
15718
  properties:
15612
15719
  matchedAt:
15613
- $ref: "#/components/schemas/MatchedAtLevel"
15720
+ $ref: "#/components/schemas/MatchedAt"
15721
+ required:
15722
+ - matchedAt
15723
+ MatchEntry:
15724
+ type: object
15725
+ properties:
15726
+ record:
15727
+ $ref: "#/components/schemas/AppRecord"
15728
+ matchedAt:
15729
+ $ref: "#/components/schemas/MatchedAt"
15730
+ matchedRule:
15731
+ $ref: "#/components/schemas/FacetRule"
15732
+ matchedClauseCount:
15733
+ type: number
15734
+ specificity:
15735
+ type: number
15614
15736
  required:
15737
+ - record
15615
15738
  - matchedAt
15739
+ - specificity
15616
15740
  MatchResult:
15617
15741
  type: object
15618
15742
  properties:
15619
15743
  records:
15620
15744
  type: array
15621
15745
  items:
15622
- $ref: "#/components/schemas/MatchedRecord"
15746
+ $ref: "#/components/schemas/MatchEntry"
15623
15747
  best:
15624
15748
  type: object
15625
15749
  additionalProperties:
15626
- $ref: "#/components/schemas/MatchedRecord"
15750
+ $ref: "#/components/schemas/MatchEntry"
15627
15751
  required:
15628
15752
  - records
15629
15753
  UpsertRecordInput:
@@ -15651,6 +15775,8 @@ components:
15651
15775
  metadata:
15652
15776
  type: object
15653
15777
  additionalProperties: true
15778
+ facetRule:
15779
+ $ref: "#/components/schemas/FacetRule"
15654
15780
  required:
15655
15781
  - ref
15656
15782
  UpsertRecordResponse:
@@ -15733,6 +15859,8 @@ components:
15733
15859
  $ref: "#/components/schemas/RecordScope"
15734
15860
  specificity:
15735
15861
  type: number
15862
+ facetRule:
15863
+ $ref: "#/components/schemas/FacetRule"
15736
15864
  data:
15737
15865
  type: object
15738
15866
  additionalProperties: true
@@ -15770,6 +15898,7 @@ components:
15770
15898
  - deletedAt
15771
15899
  - scope
15772
15900
  - specificity
15901
+ - facetRule
15773
15902
  - data
15774
15903
  - owner
15775
15904
  - admin
@@ -15821,6 +15950,8 @@ components:
15821
15950
  metadata:
15822
15951
  type: object
15823
15952
  additionalProperties: true
15953
+ facetRule:
15954
+ $ref: "#/components/schemas/FacetRule"
15824
15955
  required:
15825
15956
  - recordType
15826
15957
  UpdateRecordInput:
@@ -15856,6 +15987,8 @@ components:
15856
15987
  metadata:
15857
15988
  type: object
15858
15989
  additionalProperties: true
15990
+ facetRule:
15991
+ $ref: "#/components/schemas/FacetRule"
15859
15992
  RecordListQueryParams:
15860
15993
  type: object
15861
15994
  properties:
@@ -15897,6 +16030,83 @@ components:
15897
16030
  type: string
15898
16031
  includeDeleted:
15899
16032
  type: boolean
16033
+ ResolveAllParams:
16034
+ type: object
16035
+ properties:
16036
+ context:
16037
+ type: object
16038
+ additionalProperties: true
16039
+ productId:
16040
+ type: string
16041
+ variantId:
16042
+ type: string
16043
+ batchId:
16044
+ type: string
16045
+ proofId:
16046
+ type: string
16047
+ facets:
16048
+ type: object
16049
+ additionalProperties:
16050
+ type: array
16051
+ items:
16052
+ type: object
16053
+ additionalProperties: true
16054
+ recordType:
16055
+ type: string
16056
+ tiers:
16057
+ type: array
16058
+ items:
16059
+ type: string
16060
+ enum:
16061
+ - proof
16062
+ - batch
16063
+ - variant
16064
+ - product
16065
+ - rule
16066
+ - facet
16067
+ - collection
16068
+ limit:
16069
+ type: number
16070
+ at:
16071
+ type: string
16072
+ includeScheduled:
16073
+ type: boolean
16074
+ includeExpired:
16075
+ type: boolean
16076
+ required:
16077
+ - context
16078
+ ResolveAllResult:
16079
+ type: object
16080
+ properties:
16081
+ records:
16082
+ type: array
16083
+ items:
16084
+ $ref: "#/components/schemas/MatchEntry"
16085
+ truncated:
16086
+ type: boolean
16087
+ required:
16088
+ - records
16089
+ PreviewRuleParams:
16090
+ type: object
16091
+ properties:
16092
+ facetRule:
16093
+ $ref: "#/components/schemas/FacetRule"
16094
+ limit:
16095
+ type: number
16096
+ required:
16097
+ - facetRule
16098
+ PreviewRuleResult:
16099
+ type: object
16100
+ properties:
16101
+ sampleProductIds:
16102
+ type: array
16103
+ items:
16104
+ type: string
16105
+ totalMatches:
16106
+ type: number
16107
+ required:
16108
+ - sampleProductIds
16109
+ - totalMatches
15900
16110
  RelatedResponse:
15901
16111
  type: object
15902
16112
  properties: