@purveyors/sdk 0.39.0 → 0.41.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.
package/dist/index.d.ts CHANGED
@@ -2601,6 +2601,7 @@ interface paths {
2601
2601
  order?: "asc" | "desc";
2602
2602
  showWholesale?: "true" | "false";
2603
2603
  wholesaleOnly?: "true" | "false";
2604
+ projection?: "full" | "summary";
2604
2605
  include?: "proof";
2605
2606
  origin?: string;
2606
2607
  continent?: string;
@@ -5465,6 +5466,12 @@ interface paths {
5465
5466
  get: {
5466
5467
  parameters: {
5467
5468
  query?: {
5469
+ portfolio?: "true" | "false";
5470
+ filters?: string;
5471
+ sort_field?: string;
5472
+ sort_direction?: "asc" | "desc";
5473
+ id?: number;
5474
+ include_pagination?: "true" | "false";
5468
5475
  stocked_only?: boolean | null;
5469
5476
  catalogId?: number;
5470
5477
  purchaseDateStart?: string;
@@ -5540,6 +5547,27 @@ interface paths {
5540
5547
  };
5541
5548
  };
5542
5549
  429: components["responses"]["ApiRateLimitExceeded"];
5550
+ /** @description Portfolio query migration is not installed */
5551
+ 503: {
5552
+ headers: {
5553
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5554
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5555
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5556
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
5557
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
5558
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
5559
+ [name: string]: unknown;
5560
+ };
5561
+ content: {
5562
+ "application/json": {
5563
+ error: {
5564
+ /** @enum {string} */
5565
+ code: "portfolio_query_unavailable";
5566
+ message: string;
5567
+ };
5568
+ };
5569
+ };
5570
+ };
5543
5571
  };
5544
5572
  };
5545
5573
  put?: never;
@@ -11551,6 +11579,177 @@ interface paths {
11551
11579
  patch?: never;
11552
11580
  trace?: never;
11553
11581
  };
11582
+ "/v1/conversation/memory/dream": {
11583
+ parameters: {
11584
+ query?: never;
11585
+ header?: never;
11586
+ path?: never;
11587
+ cookie?: never;
11588
+ };
11589
+ get?: never;
11590
+ put?: never;
11591
+ /**
11592
+ * Reflect recent conversation into session-owner memory
11593
+ * @description Session-only Cherry Runtime memory reflection. Parchment owns the prompt, model, provider credential, bounds, cooldown, and optimistic commit.
11594
+ */
11595
+ post: {
11596
+ parameters: {
11597
+ query?: never;
11598
+ header?: never;
11599
+ path?: never;
11600
+ cookie?: never;
11601
+ };
11602
+ requestBody: {
11603
+ content: {
11604
+ "application/json": components["schemas"]["ConversationMemoryDreamRequest"];
11605
+ };
11606
+ };
11607
+ responses: {
11608
+ /** @description Conversation-state result */
11609
+ 200: {
11610
+ headers: {
11611
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11612
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11613
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11614
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11615
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11616
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11617
+ [name: string]: unknown;
11618
+ };
11619
+ content: {
11620
+ "application/json": components["schemas"]["ConversationMemoryDreamResponse"];
11621
+ };
11622
+ };
11623
+ /** @description Invalid conversation-state request */
11624
+ 400: {
11625
+ headers: {
11626
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11627
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11628
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11629
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11630
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11631
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11632
+ [name: string]: unknown;
11633
+ };
11634
+ content: {
11635
+ "application/json": components["schemas"]["ErrorResponse"];
11636
+ };
11637
+ };
11638
+ /** @description Authentication required */
11639
+ 401: {
11640
+ headers: {
11641
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11642
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11643
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11644
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11645
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11646
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11647
+ [name: string]: unknown;
11648
+ };
11649
+ content: {
11650
+ "application/json": components["schemas"]["ErrorResponse"];
11651
+ };
11652
+ };
11653
+ /** @description Insufficient entitlement (plan or role) */
11654
+ 403: {
11655
+ headers: {
11656
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11657
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11658
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11659
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11660
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11661
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11662
+ [name: string]: unknown;
11663
+ };
11664
+ content: {
11665
+ "application/json": components["schemas"]["ErrorResponse"];
11666
+ };
11667
+ };
11668
+ /** @description Workspace not found for the authenticated owner */
11669
+ 404: {
11670
+ headers: {
11671
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11672
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11673
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11674
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11675
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11676
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11677
+ [name: string]: unknown;
11678
+ };
11679
+ content: {
11680
+ "application/json": components["schemas"]["ErrorResponse"];
11681
+ };
11682
+ };
11683
+ /** @description Reset epoch, version, replay payload, or high-water conflict */
11684
+ 409: {
11685
+ headers: {
11686
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11687
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11688
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11689
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11690
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11691
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11692
+ [name: string]: unknown;
11693
+ };
11694
+ content: {
11695
+ "application/json": components["schemas"]["ErrorResponse"];
11696
+ };
11697
+ };
11698
+ /** @description Conversation-state request body exceeds 1 MiB */
11699
+ 413: {
11700
+ headers: {
11701
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11702
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11703
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11704
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11705
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11706
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11707
+ [name: string]: unknown;
11708
+ };
11709
+ content: {
11710
+ "application/json": components["schemas"]["ErrorResponse"];
11711
+ };
11712
+ };
11713
+ /** @description AI provider rate limit exceeded Customer API keys may also receive an account monthly or machine burst quota rejection. */
11714
+ 429: {
11715
+ headers: {
11716
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11717
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11718
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11719
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11720
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11721
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11722
+ "Retry-After": components["headers"]["Retry-After"];
11723
+ "X-RateLimit-Blocked-By": components["headers"]["X-RateLimit-Blocked-By"];
11724
+ [name: string]: unknown;
11725
+ };
11726
+ content: {
11727
+ "application/json": components["schemas"]["ErrorResponse"];
11728
+ };
11729
+ };
11730
+ /** @description Conversation-state persistence is temporarily unavailable */
11731
+ 503: {
11732
+ headers: {
11733
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11734
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11735
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11736
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11737
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11738
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11739
+ [name: string]: unknown;
11740
+ };
11741
+ content: {
11742
+ "application/json": components["schemas"]["ErrorResponse"];
11743
+ };
11744
+ };
11745
+ };
11746
+ };
11747
+ delete?: never;
11748
+ options?: never;
11749
+ head?: never;
11750
+ patch?: never;
11751
+ trace?: never;
11752
+ };
11554
11753
  }
11555
11754
  interface components {
11556
11755
  schemas: {
@@ -11583,6 +11782,11 @@ interface components {
11583
11782
  apiPlan: "viewer" | "member" | "enterprise" | null;
11584
11783
  ppiAccess: boolean;
11585
11784
  apiScopes: string[];
11785
+ /** @description Minimal live-verified identity for session callers only; absent for API keys and anonymous callers. */
11786
+ sessionIdentity?: {
11787
+ id: string;
11788
+ email: string | null;
11789
+ };
11586
11790
  };
11587
11791
  AccountDeletionOperation: {
11588
11792
  /** Format: uuid */
@@ -11932,6 +12136,13 @@ interface components {
11932
12136
  ai_description?: string | null;
11933
12137
  ai_tasting_notes?: unknown;
11934
12138
  proof?: components["schemas"]["CatalogProofSummary"];
12139
+ /** @description Entitled metadata-presence signals returned only by projection=summary; false also covers fields outside the caller projection. */
12140
+ summarySignals?: {
12141
+ farmNotes: boolean;
12142
+ roastRecommendations: boolean;
12143
+ descriptions: boolean;
12144
+ cuppingNotes: boolean;
12145
+ };
11935
12146
  };
11936
12147
  CatalogListResponse: {
11937
12148
  data: components["schemas"]["CatalogItem"][];
@@ -13824,9 +14035,37 @@ interface components {
13824
14035
  catalog_id: number | null;
13825
14036
  stocked: boolean | null;
13826
14037
  coffee_catalog: components["schemas"]["InventoryCatalog"];
14038
+ roasted_oz_in?: number | null;
13827
14039
  };
13828
14040
  InventoryListResponse: {
13829
14041
  data: components["schemas"]["InventoryResource"][];
14042
+ portfolio?: {
14043
+ summary: {
14044
+ totalCount: number;
14045
+ value: number;
14046
+ purchasedLbs: number;
14047
+ remainingLbs: number;
14048
+ stockedCount: number;
14049
+ avgCost: number;
14050
+ };
14051
+ sources: {
14052
+ [key: string]: {
14053
+ count: number;
14054
+ weight: number;
14055
+ value: number;
14056
+ };
14057
+ };
14058
+ uniqueValues: {
14059
+ [key: string]: string[];
14060
+ };
14061
+ ownerTotal: number;
14062
+ };
14063
+ pagination?: {
14064
+ offset: number;
14065
+ limit: number;
14066
+ total?: number;
14067
+ hasNext: boolean;
14068
+ };
13830
14069
  meta: {
13831
14070
  /** @enum {string} */
13832
14071
  resource: "inventory";
@@ -14679,6 +14918,17 @@ interface components {
14679
14918
  origin?: string;
14680
14919
  processing?: string;
14681
14920
  }[];
14921
+ } | {
14922
+ artisanSource: {
14923
+ fileName: string;
14924
+ fileContent: string;
14925
+ };
14926
+ inventory: {
14927
+ id: number;
14928
+ coffee_name: string;
14929
+ origin?: string;
14930
+ processing?: string;
14931
+ }[];
14682
14932
  };
14683
14933
  RoastGetResource: components["schemas"]["RoastDetailResource"] & {
14684
14934
  chart_x_min: number | null;
@@ -15210,6 +15460,22 @@ interface components {
15210
15460
  /** @enum {string} */
15211
15461
  updatedBy: "user" | "agent";
15212
15462
  };
15463
+ ConversationMemoryDreamResponse: {
15464
+ data: components["schemas"]["ConversationMemory"] & {
15465
+ skipped: boolean;
15466
+ /** @enum {string} */
15467
+ reason?: "cooldown" | "empty-response";
15468
+ retryAfterMs?: number;
15469
+ };
15470
+ meta: components["schemas"]["ConversationResponseMeta"];
15471
+ };
15472
+ ConversationMemoryDreamRequest: {
15473
+ messages: {
15474
+ /** @enum {string} */
15475
+ role: "user" | "assistant";
15476
+ content: string;
15477
+ }[];
15478
+ };
15213
15479
  };
15214
15480
  responses: {
15215
15481
  /** @description Account monthly allowance or fixed one-minute machine burst allowance exhausted. Rejected attempts are not added to usage. */
@@ -15343,6 +15609,7 @@ type ConversationWorkspaceClearRequest = NonNullable<paths["/v1/conversation/wor
15343
15609
  type ConversationCanvasUpdateRequest = NonNullable<paths["/v1/conversation/workspaces/{workspaceId}/canvas"]["put"]["requestBody"]>["content"]["application/json"];
15344
15610
  type ConversationSummaryUpdateRequest = NonNullable<paths["/v1/conversation/workspaces/{workspaceId}/summary"]["put"]["requestBody"]>["content"]["application/json"];
15345
15611
  type ConversationMemoryUpdateRequest = NonNullable<paths["/v1/conversation/memory"]["put"]["requestBody"]>["content"]["application/json"];
15612
+ type ConversationMemoryDreamRequest = NonNullable<paths["/v1/conversation/memory/dream"]["post"]["requestBody"]>["content"]["application/json"];
15346
15613
  /** Query parameters for {@link ParchmentClient.inventory.list}. */
15347
15614
  type InventoryListQuery = NonNullable<paths["/v1/inventory"]["get"]["parameters"]["query"]>;
15348
15615
  /** Request body for {@link ParchmentClient.inventory.create}. */
@@ -16449,7 +16716,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
16449
16716
  [name: string]: unknown;
16450
16717
  };
16451
16718
  content: {
16452
- "application/json": components["schemas"]["MarketBriefDraftResponse"];
16719
+ "application/json": components["schemas"] /** List canonical owner subscription snapshots. */["MarketBriefDraftResponse"];
16453
16720
  };
16454
16721
  };
16455
16722
  202: {
@@ -16811,7 +17078,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
16811
17078
  query?: never;
16812
17079
  header?: never;
16813
17080
  path?: never;
16814
- cookie? /** Live catalog price context by origin. */: never;
17081
+ cookie?: never;
16815
17082
  };
16816
17083
  requestBody?: never;
16817
17084
  responses: {
@@ -16850,7 +17117,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
16850
17117
  [name: string]: unknown;
16851
17118
  };
16852
17119
  content: {
16853
- "application/json": components["schemas"]["ErrorResponse"];
17120
+ "application/json": components["schemas"] /** Aggregate proof-coverage over the public catalog. */["ErrorResponse"];
16854
17121
  };
16855
17122
  };
16856
17123
  503: {
@@ -16867,7 +17134,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
16867
17134
  query?: never;
16868
17135
  header?: never;
16869
17136
  path?: never;
16870
- cookie? /** Live catalog price context by origin. */: never;
17137
+ cookie?: never;
16871
17138
  };
16872
17139
  requestBody?: never;
16873
17140
  responses: {
@@ -16906,7 +17173,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
16906
17173
  [name: string]: unknown;
16907
17174
  };
16908
17175
  content: {
16909
- "application/json": components["schemas"]["ErrorResponse"];
17176
+ "application/json": components["schemas"] /** Aggregate proof-coverage over the public catalog. */["ErrorResponse"];
16910
17177
  };
16911
17178
  };
16912
17179
  503: {
@@ -16922,7 +17189,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
16922
17189
  /** Durably cancel or resume the complete provider subscription. */
16923
17190
  mutate: (subscriptionId: string, body: BillingSubscriptionMutationRequest) => Promise<openapi_fetch.FetchResponse<{
16924
17191
  parameters: {
16925
- query?: never;
17192
+ query? /** Tier-one price-index chart history. */: never;
16926
17193
  header?: never;
16927
17194
  path: {
16928
17195
  subscriptionId: string;
@@ -16961,7 +17228,11 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
16961
17228
  [name: string]: unknown;
16962
17229
  };
16963
17230
  content: {
16964
- "application/json": components["schemas"]["ErrorResponse"];
17231
+ "application/json": components["schemas"] /**
17232
+ * List an owner-scoped tracked catalog-id page and bounded recent
17233
+ * summaries enriched with live catalog state. Follow nextCursor when
17234
+ * a capped response reports truncation.
17235
+ */["ErrorResponse"];
16965
17236
  };
16966
17237
  };
16967
17238
  404: {
@@ -17063,9 +17334,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17063
17334
  headers: {
17064
17335
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
17065
17336
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
17066
- "X-RateLimit-Reset":
17067
- /** Read the session owner's versioned durable memory. */
17068
- components["headers"]["X-RateLimit-Reset"];
17337
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
17069
17338
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
17070
17339
  "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
17071
17340
  "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
@@ -17087,7 +17356,12 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17087
17356
  [name: string]: unknown;
17088
17357
  };
17089
17358
  content: {
17090
- "application/json": components["schemas"]["ErrorResponse"];
17359
+ "application/json": components["schemas"] /**
17360
+ * Create an owner inventory lot. Requires a session or an owner-bound API
17361
+ * key carrying the exact `inventory:write` scope. Manual coffee creates
17362
+ * require `idempotencyKey`; catalog-backed creates accept it optionally.
17363
+ * The same key and payload replay the original result.
17364
+ */["ErrorResponse"];
17091
17365
  };
17092
17366
  };
17093
17367
  };
@@ -17142,9 +17416,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17142
17416
  headers: {
17143
17417
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
17144
17418
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
17145
- "X-RateLimit-Reset":
17146
- /** Read the session owner's versioned durable memory. */
17147
- components["headers"]["X-RateLimit-Reset"];
17419
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
17148
17420
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
17149
17421
  "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
17150
17422
  "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
@@ -17166,7 +17438,12 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17166
17438
  [name: string]: unknown;
17167
17439
  };
17168
17440
  content: {
17169
- "application/json": components["schemas"]["ErrorResponse"];
17441
+ "application/json": components["schemas"] /**
17442
+ * Create an owner inventory lot. Requires a session or an owner-bound API
17443
+ * key carrying the exact `inventory:write` scope. Manual coffee creates
17444
+ * require `idempotencyKey`; catalog-backed creates accept it optionally.
17445
+ * The same key and payload replay the original result.
17446
+ */["ErrorResponse"];
17170
17447
  };
17171
17448
  };
17172
17449
  };
@@ -17225,7 +17502,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17225
17502
  [name: string]: unknown;
17226
17503
  };
17227
17504
  content: {
17228
- "application/json": components["schemas"]["ErrorResponse"];
17505
+ "application/json": components["schemas"] /** List the caller's own roast profiles (owner-scoped). */["ErrorResponse"];
17229
17506
  };
17230
17507
  };
17231
17508
  404: {
@@ -17268,16 +17545,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17268
17545
  [name: string]: unknown;
17269
17546
  };
17270
17547
  content: {
17271
- "application/json":
17272
- /**
17273
- * Create a roast profile from an Artisan `.alog` file against one of the
17274
- * caller's green-coffee lots, persisting the imported curve, events, and
17275
- * an artisan_import_log entry atomically. Requires a session or an
17276
- * owner-bound API key carrying the exact `roast:write` scope. The
17277
- * optional `idempotencyKey` is payload-bound: same-key, same-payload
17278
- * retries replay, while changed payloads conflict.
17279
- */
17280
- components["schemas"]["ErrorResponse"];
17548
+ "application/json": components["schemas"]["ErrorResponse"];
17281
17549
  };
17282
17550
  };
17283
17551
  };
@@ -17331,7 +17599,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17331
17599
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
17332
17600
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
17333
17601
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
17334
- "X-RateLimit-Burst-Remaining": components["headers"] /** Delete one of the caller's own sales. */["X-RateLimit-Burst-Remaining"];
17602
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
17335
17603
  "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
17336
17604
  [name: string]: unknown;
17337
17605
  };
@@ -17341,7 +17609,13 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17341
17609
  };
17342
17610
  403: {
17343
17611
  headers: {
17344
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
17612
+ "X-RateLimit-Limit":
17613
+ /**
17614
+ * List the caller's owner-scoped profit summaries. API keys require
17615
+ * inventory:read, roast:read, and sales:read. Use pagination.total to
17616
+ * exhaust the complete owner result set.
17617
+ */
17618
+ components["headers"]["X-RateLimit-Limit"];
17345
17619
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
17346
17620
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
17347
17621
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
@@ -17875,6 +18149,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17875
18149
  order?: "asc" | "desc";
17876
18150
  showWholesale?: "true" | "false";
17877
18151
  wholesaleOnly?: "true" | "false";
18152
+ projection?: "full" | "summary";
17878
18153
  include?: "proof";
17879
18154
  origin?: string;
17880
18155
  continent?: string;
@@ -17970,6 +18245,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
17970
18245
  order?: "asc" | "desc";
17971
18246
  showWholesale?: "true" | "false";
17972
18247
  wholesaleOnly?: "true" | "false";
18248
+ projection?: "full" | "summary";
17973
18249
  include?: "proof";
17974
18250
  origin?: string;
17975
18251
  continent?: string;
@@ -22518,6 +22794,157 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
22518
22794
  updatedBy: "user" | "agent";
22519
22795
  };
22520
22796
  }, `${string}/${string}`>>;
22797
+ /** Reflect bounded recent messages into versioned session-owner memory. */
22798
+ dream: (body: ConversationMemoryDreamRequest) => Promise<openapi_fetch.FetchResponse<{
22799
+ parameters: {
22800
+ query?: never;
22801
+ header?: never;
22802
+ path?: never;
22803
+ cookie?: never;
22804
+ };
22805
+ requestBody: {
22806
+ content: {
22807
+ "application/json": components["schemas"]["ConversationMemoryDreamRequest"];
22808
+ };
22809
+ };
22810
+ responses: {
22811
+ 200: {
22812
+ headers: {
22813
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22814
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22815
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22816
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22817
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22818
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22819
+ [name: string]: unknown;
22820
+ };
22821
+ content: {
22822
+ "application/json": components["schemas"]["ConversationMemoryDreamResponse"];
22823
+ };
22824
+ };
22825
+ 400: {
22826
+ headers: {
22827
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22828
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22829
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22830
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22831
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22832
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22833
+ [name: string]: unknown;
22834
+ };
22835
+ content: {
22836
+ "application/json": components["schemas"]["ErrorResponse"];
22837
+ };
22838
+ };
22839
+ 401: {
22840
+ headers: {
22841
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22842
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22843
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22844
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22845
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22846
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22847
+ [name: string]: unknown;
22848
+ };
22849
+ content: {
22850
+ "application/json": components["schemas"]["ErrorResponse"];
22851
+ };
22852
+ };
22853
+ 403: {
22854
+ headers: {
22855
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22856
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22857
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22858
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22859
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22860
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22861
+ [name: string]: unknown;
22862
+ };
22863
+ content: {
22864
+ "application/json": components["schemas"]["ErrorResponse"];
22865
+ };
22866
+ };
22867
+ 404: {
22868
+ headers: {
22869
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22870
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22871
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22872
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22873
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22874
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22875
+ [name: string]: unknown;
22876
+ };
22877
+ content: {
22878
+ "application/json": components["schemas"]["ErrorResponse"];
22879
+ };
22880
+ };
22881
+ 409: {
22882
+ headers: {
22883
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22884
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22885
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22886
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22887
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22888
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22889
+ [name: string]: unknown;
22890
+ };
22891
+ content: {
22892
+ "application/json": components["schemas"]["ErrorResponse"];
22893
+ };
22894
+ };
22895
+ 413: {
22896
+ headers: {
22897
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22898
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22899
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22900
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22901
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22902
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22903
+ [name: string]: unknown;
22904
+ };
22905
+ content: {
22906
+ "application/json": components["schemas"]["ErrorResponse"];
22907
+ };
22908
+ };
22909
+ 429: {
22910
+ headers: {
22911
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22912
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22913
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22914
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22915
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22916
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22917
+ "Retry-After": components["headers"]["Retry-After"];
22918
+ "X-RateLimit-Blocked-By": components["headers"]["X-RateLimit-Blocked-By"];
22919
+ [name: string]: unknown;
22920
+ };
22921
+ content: {
22922
+ "application/json": components["schemas"]["ErrorResponse"];
22923
+ };
22924
+ };
22925
+ 503: {
22926
+ headers: {
22927
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22928
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22929
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22930
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22931
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22932
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22933
+ [name: string]: unknown;
22934
+ };
22935
+ content: {
22936
+ "application/json": components["schemas"]["ErrorResponse"];
22937
+ };
22938
+ };
22939
+ };
22940
+ }, {
22941
+ body: {
22942
+ messages: {
22943
+ role: "user" | "assistant";
22944
+ content: string;
22945
+ }[];
22946
+ };
22947
+ }, `${string}/${string}`>>;
22521
22948
  };
22522
22949
  };
22523
22950
  inventory: {
@@ -22525,6 +22952,12 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
22525
22952
  list: (query?: InventoryListQuery) => Promise<openapi_fetch.FetchResponse<{
22526
22953
  parameters: {
22527
22954
  query?: {
22955
+ portfolio?: "true" | "false";
22956
+ filters?: string;
22957
+ sort_field?: string;
22958
+ sort_direction?: "asc" | "desc";
22959
+ id?: number;
22960
+ include_pagination?: "true" | "false";
22528
22961
  stocked_only?: boolean | null;
22529
22962
  catalogId?: number;
22530
22963
  purchaseDateStart?: string;
@@ -22596,10 +23029,35 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
22596
23029
  };
22597
23030
  };
22598
23031
  429: components["responses"]["ApiRateLimitExceeded"];
23032
+ 503: {
23033
+ headers: {
23034
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
23035
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
23036
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
23037
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
23038
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
23039
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
23040
+ [name: string]: unknown;
23041
+ };
23042
+ content: {
23043
+ "application/json": {
23044
+ error: {
23045
+ code: "portfolio_query_unavailable";
23046
+ message: string;
23047
+ };
23048
+ };
23049
+ };
23050
+ };
22599
23051
  };
22600
23052
  }, {
22601
23053
  params: {
22602
23054
  query: {
23055
+ portfolio?: "true" | "false";
23056
+ filters?: string;
23057
+ sort_field?: string;
23058
+ sort_direction?: "asc" | "desc";
23059
+ id?: number;
23060
+ include_pagination?: "true" | "false";
22603
23061
  stocked_only?: boolean | null;
22604
23062
  catalogId?: number;
22605
23063
  purchaseDateStart?: string;
@@ -24363,6 +24821,17 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
24363
24821
  origin?: string;
24364
24822
  processing?: string;
24365
24823
  }[];
24824
+ } | {
24825
+ artisanSource: {
24826
+ fileName: string;
24827
+ fileContent: string;
24828
+ };
24829
+ inventory: {
24830
+ id: number;
24831
+ coffee_name: string;
24832
+ origin?: string;
24833
+ processing?: string;
24834
+ }[];
24366
24835
  };
24367
24836
  }, `${string}/${string}`>>;
24368
24837
  /** List the caller's own roast profiles (owner-scoped). */
@@ -26790,4 +27259,4 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
26790
27259
  };
26791
27260
  type ParchmentClient = ReturnType<typeof createParchmentClient>;
26792
27261
 
26793
- export { type AccountDeletionOperation, type AccountDeletionRequest, type BillingCheckoutCreateRequest, type BillingCheckoutSession, type BillingManualEntitlementsRequest, type BillingSubscriptionMutationRequest, type BillingSubscriptionOperation, type BriefMatchesQuery, type CatalogInventoryBatchLifecycle, type CatalogInventoryBatchReserveRequest, type CatalogInventoryBatchResult, type CatalogItem, type CatalogListQuery, type CatalogMapHeaders, type CatalogMapQuery, type CatalogMapResponse, type CatalogProofSummary, type CatalogSimilarQuery, type ConfirmedActionExecuteRequest, type ConversationCanvasUpdateRequest, type ConversationChatStreamRequest, type ConversationMemoryUpdateRequest, type ConversationMessageAppendRequest, type ConversationSummaryUpdateRequest, type ConversationWorkspaceClearRequest, type ConversationWorkspaceCreateRequest, type ConversationWorkspaceMetadataRequest, type InventoryCreateRequest, type InventoryShareCatalog, type InventoryShareGrant, type InventoryShareGrantCreateRequest, type InventoryShareGrantRedeemRequest, type InventoryShareInventory, type InventoryShareRoastSummary, type InventoryUpdateRequest, type MarketOverview, type MarketSignalsQuery, type MetadataIndexQuery, type OwnerApiUsage, type OwnerApiUsageQuery, type ParchmentClient, type ParchmentClientOptions, type PriceIndexQuery, type PriceIndexStatsQuery, type ProfitItem, type ProfitListQuery, type RoastBatchCreateRequest, type RoastChartDataQuery, type RoastLiveCurveRequest, type SalesCreateRequest, type SalesListQuery, type SalesUpdateRequest, type SourcingBriefCreateRequest, type TrackedLotMutation, type TrackedLotSummary, type TrackedLotsListQuery, type components, createParchmentClient, type paths };
27262
+ export { type AccountDeletionOperation, type AccountDeletionRequest, type BillingCheckoutCreateRequest, type BillingCheckoutSession, type BillingManualEntitlementsRequest, type BillingSubscriptionMutationRequest, type BillingSubscriptionOperation, type BriefMatchesQuery, type CatalogInventoryBatchLifecycle, type CatalogInventoryBatchReserveRequest, type CatalogInventoryBatchResult, type CatalogItem, type CatalogListQuery, type CatalogMapHeaders, type CatalogMapQuery, type CatalogMapResponse, type CatalogProofSummary, type CatalogSimilarQuery, type ConfirmedActionExecuteRequest, type ConversationCanvasUpdateRequest, type ConversationChatStreamRequest, type ConversationMemoryDreamRequest, type ConversationMemoryUpdateRequest, type ConversationMessageAppendRequest, type ConversationSummaryUpdateRequest, type ConversationWorkspaceClearRequest, type ConversationWorkspaceCreateRequest, type ConversationWorkspaceMetadataRequest, type InventoryCreateRequest, type InventoryShareCatalog, type InventoryShareGrant, type InventoryShareGrantCreateRequest, type InventoryShareGrantRedeemRequest, type InventoryShareInventory, type InventoryShareRoastSummary, type InventoryUpdateRequest, type MarketOverview, type MarketSignalsQuery, type MetadataIndexQuery, type OwnerApiUsage, type OwnerApiUsageQuery, type ParchmentClient, type ParchmentClientOptions, type PriceIndexQuery, type PriceIndexStatsQuery, type ProfitItem, type ProfitListQuery, type RoastBatchCreateRequest, type RoastChartDataQuery, type RoastLiveCurveRequest, type SalesCreateRequest, type SalesListQuery, type SalesUpdateRequest, type SourcingBriefCreateRequest, type TrackedLotMutation, type TrackedLotSummary, type TrackedLotsListQuery, type components, createParchmentClient, type paths };
package/dist/index.js CHANGED
@@ -298,7 +298,9 @@ function createParchmentClient(options) {
298
298
  /** Read the session owner's versioned durable memory. */
299
299
  get: () => client.GET("/v1/conversation/memory"),
300
300
  /** Optimistically update session-owner memory. */
301
- update: (body) => client.PUT("/v1/conversation/memory", { body })
301
+ update: (body) => client.PUT("/v1/conversation/memory", { body }),
302
+ /** Reflect bounded recent messages into versioned session-owner memory. */
303
+ dream: (body) => client.POST("/v1/conversation/memory/dream", { body })
302
304
  }
303
305
  },
304
306
  inventory: {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts"],"sourcesContent":["import createClient, { type ClientOptions } from \"openapi-fetch\";\nimport type { components, paths } from \"./schema\";\n\nexport interface ParchmentClientOptions {\n /** Base URL of the Parchment API, e.g. https://api.purveyors.io */\n baseUrl: string;\n /**\n * Optional bearer token (a Supabase JWT, API key, or dedicated machine\n * credential). Sent as\n * `Authorization: Bearer <token>`. Auth is resolved server-side at the route\n * boundary; the SDK only forwards the credential.\n */\n token?: string;\n /** Override the fetch implementation (useful for tests or custom runtimes). */\n fetch?: ClientOptions[\"fetch\"];\n}\n\n/** Query parameters for {@link ParchmentClient.catalog.list}. */\nexport type CatalogListQuery = NonNullable<\n paths[\"/v1/catalog\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** A catalog row returned by the canonical listing resource. */\nexport type CatalogItem = components[\"schemas\"][\"CatalogItem\"];\n/** API-owned row-level trust summary returned when `include=proof`. */\nexport type CatalogProofSummary = components[\"schemas\"][\"CatalogProofSummary\"];\n/** Query parameters for {@link ParchmentClient.catalog.facets}. */\nexport type CatalogFacetsQuery = NonNullable<\n paths[\"/v1/catalog/facets\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/**\n * Optional headers for {@link ParchmentClient.catalog.list}, notably the\n * RFC 7240 `Prefer: handling=lenient|strict` override (PADR-0013 §7). Sending\n * `handling=lenient` opts a strict caller (API key or bearer-session JWT) back\n * into strip-with-notice degradation instead of a 401/403 hard-deny.\n */\nexport type CatalogListHeaders = NonNullable<\n paths[\"/v1/catalog\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.map}. */\nexport type CatalogMapQuery = NonNullable<\n paths[\"/v1/catalog/map\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Optional handling headers for {@link ParchmentClient.catalog.map}. */\nexport type CatalogMapHeaders = NonNullable<\n paths[\"/v1/catalog/map\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Lightweight map projection over the caller-visible catalog. */\nexport type CatalogMapResponse = components[\"schemas\"][\"CatalogMapResponse\"];\n/** Optional headers for {@link ParchmentClient.catalog.facets}; see {@link CatalogListHeaders}. */\nexport type CatalogFacetsHeaders = NonNullable<\n paths[\"/v1/catalog/facets\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.originPriceStats}. */\nexport type CatalogOriginPriceStatsQuery = NonNullable<\n paths[\"/v1/catalog/origin-price-stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.stats}. */\nexport type CatalogStatsQuery = NonNullable<\n paths[\"/v1/catalog/stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.rank}. */\nexport type CatalogRankQuery = NonNullable<\n paths[\"/v1/catalog/rank\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.rankPremium}. */\nexport type CatalogRankPremiumQuery = NonNullable<\n paths[\"/v1/catalog/rank-premium\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.suppliers}. */\nexport type CatalogSuppliersQuery = NonNullable<\n paths[\"/v1/catalog/suppliers\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.supplierDetail}. */\nexport type CatalogSupplierDetailQuery = NonNullable<\n paths[\"/v1/catalog/suppliers/detail\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.supplierRank}. */\nexport type CatalogSupplierRankQuery = NonNullable<\n paths[\"/v1/catalog/suppliers/rank\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Optional headers for ranking endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogRankHeaders = NonNullable<\n paths[\"/v1/catalog/rank\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Optional headers for premium ranking endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogRankPremiumHeaders = NonNullable<\n paths[\"/v1/catalog/rank-premium\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Optional headers for supplier aggregate endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogSupplierHeaders = NonNullable<\n paths[\"/v1/catalog/suppliers\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.similar}. */\nexport type CatalogSimilarQuery = NonNullable<\n paths[\"/v1/catalog/{id}/similar\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.priceIndex.list}. */\nexport type PriceIndexQuery = NonNullable<\n paths[\"/v1/price-index\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.priceIndex.history}. */\nexport type PriceIndexHistoryQuery = NonNullable<\n paths[\"/v1/price-index/history\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.market.signals}. */\nexport type MarketSignalsQuery = NonNullable<\n paths[\"/v1/market/signals\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Aggregate-only public green-coffee market evidence. */\nexport type MarketOverview = components[\"schemas\"][\"MarketOverviewResponse\"];\n/** Named public-catalog and supplier evidence for Parchment Intelligence callers. */\nexport type MarketEvidence = components[\"schemas\"][\"MarketEvidenceResponse\"];\n/** Query parameters for {@link ParchmentClient.priceIndex.stats}. */\nexport type PriceIndexStatsQuery = NonNullable<\n paths[\"/v1/price-index/stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.market.metadataIndex}. */\nexport type MetadataIndexQuery = NonNullable<\n paths[\"/v1/market/metadata-index\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.procurement.briefs.matches}. */\nexport type BriefMatchesQuery = NonNullable<\n paths[\"/v1/procurement/briefs/{id}/matches\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.procurement.briefs.create}. */\nexport type SourcingBriefCreateRequest =\n components[\"schemas\"][\"SourcingBriefCreateRequest\"];\n/** Query parameters for {@link ParchmentClient.portfolio.trackedLots.list}. */\nexport type TrackedLotsListQuery = NonNullable<\n paths[\"/v1/portfolio/tracked-lots\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** A tracked catalog lot enriched with current catalog and price state. */\nexport type TrackedLotSummary = components[\"schemas\"][\"TrackedLotSummary\"];\n/** State returned by tracked-lot PUT and DELETE mutations. */\nexport type TrackedLotMutation =\n components[\"schemas\"][\"TrackedLotMutationResponse\"];\n/** Closed session-only command for {@link ParchmentClient.confirmedActions.execute}. */\nexport type ConfirmedActionExecuteRequest = NonNullable<\n paths[\"/v1/confirmed-actions/execute\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Create-or-get body for {@link ParchmentClient.conversation.workspaces.getOrCreate}. */\nexport type ConversationWorkspaceCreateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationWorkspaceMetadataRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMessageAppendRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/messages\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationWorkspaceClearRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/messages/clear\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationCanvasUpdateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/canvas\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationSummaryUpdateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/summary\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMemoryUpdateRequest = NonNullable<\n paths[\"/v1/conversation/memory\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.inventory.list}. */\nexport type InventoryListQuery = NonNullable<\n paths[\"/v1/inventory\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.inventory.create}. */\nexport type InventoryCreateRequest = NonNullable<\n paths[\"/v1/inventory\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Stable-operation request for {@link ParchmentClient.inventory.shareGrants.create}. */\nexport type InventoryShareGrantCreateRequest = NonNullable<\n paths[\"/v1/inventory/share-grants\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** The one-time raw-token grant returned by create or same-operation replay. */\nexport type InventoryShareGrant = components[\"schemas\"][\"InventoryShareGrant\"];\n/** Anonymous capability body for {@link ParchmentClient.inventory.shareGrants.redeem}. */\nexport type InventoryShareGrantRedeemRequest = NonNullable<\n paths[\"/v1/inventory/share-grants/redeem\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Safe legacy-oriented inventory row returned by capability redemption. */\nexport type InventoryShareInventory =\n components[\"schemas\"][\"InventoryShareInventory\"];\n/** Catalog allowlist nested in a shared inventory row. */\nexport type InventoryShareCatalog =\n components[\"schemas\"][\"InventoryShareCatalog\"];\n/** Six-field roast summary nested in member/admin shares. */\nexport type InventoryShareRoastSummary =\n components[\"schemas\"][\"InventoryShareRoastSummary\"];\ntype CatalogInventoryCreateRequest =\n components[\"schemas\"][\"CatalogInventoryCreateRequest\"];\ntype ManualInventoryCreateRequest =\n components[\"schemas\"][\"ManualInventoryCreateRequest\"];\n/** Request body for {@link ParchmentClient.inventory.createManualBatch}. */\nexport type ManualInventoryBatchCreateRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for reserving durable server-owned manual-batch intent. */\nexport type ManualInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Complete canonical intent accepted by the catalog-batch reservation lane. */\nexport type CatalogInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/catalog-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable catalog-batch state returned by reserve, commit, and status. */\nexport type CatalogInventoryBatchLifecycle =\n components[\"schemas\"][\"CatalogInventoryBatchLifecycle\"];\n/** Identity-only terminal result; catalog resources remain a separate read. */\nexport type CatalogInventoryBatchResult =\n components[\"schemas\"][\"CatalogInventoryBatchResult\"];\n/** Request body for {@link ParchmentClient.inventory.update}. */\nexport type InventoryUpdateRequest = NonNullable<\n paths[\"/v1/inventory/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.roasts.list}. */\nexport type RoastListQuery = NonNullable<\n paths[\"/v1/roasts\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.get}. */\nexport type RoastGetQuery = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartDataQuery = NonNullable<\n paths[\"/v1/roasts/{id}/chart-data\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.roasts.classify}. */\nexport type RoastClassificationRequest = NonNullable<\n paths[\"/v1/roasts/classify\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.create}. */\nexport type RoastCreateRequest = NonNullable<\n paths[\"/v1/roasts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Atomic named-batch body for {@link ParchmentClient.roasts.createBatch}. */\nexport type RoastBatchCreateRequest = NonNullable<\n paths[\"/v1/roasts/batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.update}. */\nexport type RoastUpdateRequest = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Source-aware live curve body for {@link ParchmentClient.roasts.replaceLiveCurve}. */\nexport type RoastLiveCurveRequest = NonNullable<\n paths[\"/v1/roasts/{id}/live-curve\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.import}. */\nexport type RoastImportRequest = NonNullable<\n paths[\"/v1/roasts/imports\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.replaceArtisanImport}. */\nexport type RoastArtisanImportReplaceRequest = NonNullable<\n paths[\"/v1/roasts/{id}/artisan-import\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.sales.list}. */\nexport type SalesListQuery = NonNullable<\n paths[\"/v1/sales\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.profit.list}. */\nexport type ProfitListQuery = NonNullable<\n paths[\"/v1/profit\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** One owner inventory lot's canonical cost, revenue, and roast summary. */\nexport type ProfitItem = components[\"schemas\"][\"ProfitItem\"];\n/** Request body for {@link ParchmentClient.sales.create}. */\nexport type SalesCreateRequest = NonNullable<\n paths[\"/v1/sales\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.sales.update}. */\nexport type SalesUpdateRequest = NonNullable<\n paths[\"/v1/sales/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.tasting.get}. */\nexport type TastingGetQuery = NonNullable<\n paths[\"/v1/tasting/{catalogId}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.tasting.rate}. */\nexport type TastingRateRequest = NonNullable<\n paths[\"/v1/tasting/inventory/{inventoryId}\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.apiKeys.create}. */\nexport type ApiKeyCreateRequest = NonNullable<\n paths[\"/v1/api-keys\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for the session owner's API-key traffic analytics. */\nexport type OwnerApiUsageQuery = NonNullable<\n paths[\"/v1/api-usage\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Bounded owner API-key traffic analytics (not session or billing usage). */\nexport type OwnerApiUsage = components[\"schemas\"][\"OwnerApiUsageResponse\"];\n/** Request body for {@link ParchmentClient.emailSubscriptions.setMarketRead}. */\nexport type MarketReadPreferenceRequest = NonNullable<\n paths[\"/v1/email-subscriptions/market-read\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.emailSubscriptions.unsubscribeMarketRead}. */\nexport type MarketReadUnsubscribeRequest = NonNullable<\n paths[\"/v1/email-subscriptions/market-read/unsubscribe\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Immutable deployed projection accepted by {@link ParchmentClient.marketBrief.drafts.create}. */\nexport type MarketBriefDraftCreateRequest = NonNullable<\n paths[\"/v1/market-brief/drafts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable Parchment-owned provider-draft state. */\nexport type MarketBriefDraftState =\n components[\"schemas\"][\"MarketBriefDraftState\"];\n/** Account-owned Market Read email preference. */\nexport type EmailSubscriptionPreference =\n components[\"schemas\"][\"EmailSubscriptionPreference\"];\n/** Durable state returned by an account-deletion request. */\nexport type AccountDeletionOperation =\n components[\"schemas\"][\"AccountDeletionOperation\"];\n/** Purpose-bound recent-reauthentication assertion for account deletion. */\nexport type AccountDeletionRequest = NonNullable<\n paths[\"/v1/account-deletion\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Purchase-key request for dormant direct Parchment Checkout creation/replay. */\nexport type BillingCheckoutCreateRequest = NonNullable<\n paths[\"/v1/billing/checkout-sessions\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable Checkout admission state; provider Session id stays server-side. */\nexport type BillingCheckoutSession =\n components[\"schemas\"][\"BillingCheckoutSession\"];\n/** Durable cancellation/resume request. */\nexport type BillingSubscriptionMutationRequest = NonNullable<\n paths[\"/v1/billing/subscriptions/{subscriptionId}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable provider subscription-operation state. */\nexport type BillingSubscriptionOperation =\n components[\"schemas\"][\"BillingSubscriptionOperation\"];\n/** Manual entitlement baseline update for administrators. */\nexport type BillingManualEntitlementsRequest = NonNullable<\n paths[\"/v1/admin/billing-entitlements/{ownerId}/manual\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthRequestCreate = NonNullable<\n paths[\"/v1/cli-auth/requests\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthInspectRequest = NonNullable<\n paths[\"/v1/cli-auth/inspect\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthApproveRequest = NonNullable<\n paths[\"/v1/cli-auth/approve\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthExchangeRequest = NonNullable<\n paths[\"/v1/cli-auth/token\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Browser-compatible AI SDK UI-message stream request. */\nexport type ConversationChatStreamRequest =\n components[\"schemas\"][\"ConversationChatStreamRequest\"];\n\n/**\n * Create a typed Parchment API client.\n *\n * The generated core (openapi-fetch over the generated `paths` types) is the\n * contract truth; the named helpers below are the hand-maintained ergonomic\n * layer and grow as endpoints land. `raw` always exposes the underlying typed\n * client for direct path access to anything not yet wrapped.\n */\nexport function createParchmentClient(options: ParchmentClientOptions) {\n const { baseUrl, token, fetch: fetchImpl } = options;\n\n const client = createClient<paths>({\n baseUrl,\n fetch: fetchImpl,\n headers: token ? { Authorization: `Bearer ${token}` } : undefined,\n });\n\n const postInventory = (\n body: InventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/inventory\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n });\n\n function createInventory(\n body: ManualInventoryCreateRequest,\n options: { idempotencyKey: string },\n ): ReturnType<typeof postInventory>;\n function createInventory(\n body: CatalogInventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ): ReturnType<typeof postInventory>;\n function createInventory(\n body: InventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ): ReturnType<typeof postInventory> {\n return postInventory(body, options);\n }\n\n return {\n /** The underlying typed openapi-fetch client for direct path access. */\n raw: client,\n /** Liveness and service identity. */\n health: () => client.GET(\"/health\"),\n /** Resolved principal and entitlements for the caller. */\n me: () => client.GET(\"/v1/me\"),\n apiKeys: {\n /** List API keys owned by the authenticated session user. */\n list: () => client.GET(\"/v1/api-keys\"),\n /** Create an API key. The raw secret is returned only once. */\n create: (body: ApiKeyCreateRequest) =>\n client.POST(\"/v1/api-keys\", { body }),\n /** Revoke an API key owned by the authenticated session user. */\n revoke: (id: string) =>\n client.DELETE(\"/v1/api-keys/{id}\", {\n params: { path: { id } },\n }),\n /** Rotate an API key and return the replacement secret once. */\n rotate: (id: string) =>\n client.POST(\"/v1/api-keys/{id}/rotate\", {\n params: { path: { id } },\n }),\n },\n apiUsage: {\n /**\n * Read bounded API-key traffic analytics for the authenticated session\n * owner. Headline monthly/hourly counts are exact; daily/per-key series\n * carry explicit truncation metadata.\n */\n get: (query?: OwnerApiUsageQuery) =>\n client.GET(\"/v1/api-usage\", { params: { query } }),\n },\n emailSubscriptions: {\n /** Get the authenticated session user's Market Read preference. */\n get: () => client.GET(\"/v1/email-subscriptions\"),\n /** Idempotently set the authenticated session user's Market Read preference. */\n setMarketRead: (body: MarketReadPreferenceRequest) =>\n client.PUT(\"/v1/email-subscriptions/market-read\", { body }),\n /** Idempotently unsubscribe using an opaque capability without requiring a session. */\n unsubscribeMarketRead: (body: MarketReadUnsubscribeRequest) =>\n client.POST(\"/v1/email-subscriptions/market-read/unsubscribe\", {\n body,\n }),\n },\n marketBrief: {\n drafts: {\n /** Accept, create, or recover one immutable deployed edition version. */\n create: (body: MarketBriefDraftCreateRequest) =>\n client.POST(\"/v1/market-brief/drafts\", { body }),\n },\n },\n accountDeletion: {\n /** Accept or replay deletion using a purpose-bound reauthentication assertion. */\n request: (body: AccountDeletionRequest) =>\n client.POST(\"/v1/account-deletion\", { body }),\n },\n billing: {\n checkout: {\n /** Create or replay an embedded Checkout Session after activation. */\n create: (body: BillingCheckoutCreateRequest) =>\n client.POST(\"/v1/billing/checkout-sessions\", { body }),\n /** Read owner-bound durable admission state. */\n get: (admissionId: string) =>\n client.GET(\"/v1/billing/checkout-sessions/{admissionId}\", {\n params: { path: { admissionId } },\n }),\n /** Authoritatively reconcile an admission with Stripe. */\n reconcile: (admissionId: string) =>\n client.POST(\"/v1/billing/checkout-sessions/{admissionId}/reconcile\", {\n params: { path: { admissionId } },\n }),\n },\n subscriptions: {\n /** List canonical owner subscription snapshots. */\n list: () => client.GET(\"/v1/billing/subscriptions\"),\n /** Durably cancel or resume the complete provider subscription. */\n mutate: (\n subscriptionId: string,\n body: BillingSubscriptionMutationRequest,\n ) =>\n client.PATCH(\"/v1/billing/subscriptions/{subscriptionId}\", {\n params: { path: { subscriptionId } },\n body,\n }),\n },\n },\n billingAdministration: {\n /** Read bounded canonical-entitlement discrepancies. */\n discrepancies: () =>\n client.GET(\"/v1/admin/billing-entitlement-discrepancies\"),\n /** Recompute billing contribution without changing manual grants. */\n recompute: (ownerId: string) =>\n client.POST(\n \"/v1/admin/billing-entitlement-discrepancies/{ownerId}/recompute\",\n { params: { path: { ownerId } } },\n ),\n /** Update the preserved manual entitlement baseline. */\n setManual: (ownerId: string, body: BillingManualEntitlementsRequest) =>\n client.PATCH(\"/v1/admin/billing-entitlements/{ownerId}/manual\", {\n params: { path: { ownerId } },\n body,\n }),\n },\n cliAuth: {\n /** Create a signed, short-lived login request bound to a PKCE challenge. */\n create: (body: CliAuthRequestCreate) =>\n client.POST(\"/v1/cli-auth/requests\", { body }),\n /** Inspect a signed request before displaying the web consent screen. */\n inspect: (body: CliAuthInspectRequest) =>\n client.POST(\"/v1/cli-auth/inspect\", { body }),\n /** Approve a request using the client's authenticated user session. */\n approve: (body: CliAuthApproveRequest) =>\n client.POST(\"/v1/cli-auth/approve\", { body }),\n /** Exchange an approved request and verifier for the one-time raw key. */\n exchange: (body: CliAuthExchangeRequest) =>\n client.POST(\"/v1/cli-auth/token\", { body }),\n },\n catalog: {\n /** Catalog capabilities and visibility for the caller. */\n access: () => client.GET(\"/v1/catalog/access\"),\n /**\n * List public catalog coffees (paginated). Pass `headers` to send the\n * `Prefer: handling=lenient|strict` override (see {@link CatalogListHeaders}).\n */\n list: (query?: CatalogListQuery, headers?: CatalogListHeaders) =>\n client.GET(\"/v1/catalog\", { params: { query, header: headers } }),\n /** Deterministic clusters, canonical place features, and elevation profile. */\n map: (query?: CatalogMapQuery, headers?: CatalogMapHeaders) =>\n client.GET(\"/v1/catalog/map\", {\n params: { query, header: headers },\n }),\n /**\n * Catalog filter metadata and counted facets. Pass `headers` to send the\n * `Prefer: handling=lenient|strict` override (see {@link CatalogFacetsHeaders}).\n */\n facets: (query?: CatalogFacetsQuery, headers?: CatalogFacetsHeaders) =>\n client.GET(\"/v1/catalog/facets\", {\n params: { query, header: headers },\n }),\n /** Live catalog price context by origin. */\n originPriceStats: (query?: CatalogOriginPriceStatsQuery) =>\n client.GET(\"/v1/catalog/origin-price-stats\", { params: { query } }),\n /** Aggregate stats over the caller-visible catalog. */\n stats: (query?: CatalogStatsQuery) =>\n client.GET(\"/v1/catalog/stats\", { params: { query } }),\n /** Rank caller-visible catalog coffees by deterministic objectives. */\n rank: (query?: CatalogRankQuery, headers?: CatalogRankHeaders) =>\n client.GET(\"/v1/catalog/rank\", {\n params: { query, header: headers },\n }),\n /** Rank premium catalog candidates by Purveyor Score. */\n rankPremium: (\n query?: CatalogRankPremiumQuery,\n headers?: CatalogRankPremiumHeaders,\n ) =>\n client.GET(\"/v1/catalog/rank-premium\", {\n params: { query, header: headers },\n }),\n /** List supplier aggregates over caller-visible catalog coffees. */\n suppliers: (\n query?: CatalogSuppliersQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers\", {\n params: { query, header: headers },\n }),\n /** Return aggregate detail for a supplier query. */\n supplierDetail: (\n query: CatalogSupplierDetailQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers/detail\", {\n params: { query, header: headers },\n }),\n /** Rank suppliers by catalog score and availability. */\n supplierRank: (\n query?: CatalogSupplierRankQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers/rank\", {\n params: { query, header: headers },\n }),\n /** Aggregate proof-coverage over the public catalog. */\n proofCoverage: () => client.GET(\"/v1/catalog/proof-coverage\"),\n /** Find catalog coffees similar to a target coffee. */\n similar: (id: string, query?: CatalogSimilarQuery) =>\n client.GET(\"/v1/catalog/{id}/similar\", {\n params: { path: { id }, query },\n }),\n },\n priceIndex: {\n /** Available exact 30-day comparisons, with no empty-origin search. */\n comparisons: (query?: { wholesale?: \"true\" | \"false\" | \"all\" }) =>\n client.GET(\"/v1/price-index/comparisons\", { params: { query } }),\n /** Fresh matched-listing movement, not catalog composition or a canonical publication. */\n comparison: (query: {\n from: string;\n to: string;\n origin: string;\n wholesale?: \"true\" | \"false\";\n }) => client.GET(\"/v1/price-index/comparison\", { params: { query } }),\n /** Parchment Price Index (aggregate snapshots). */\n list: (query?: PriceIndexQuery) =>\n client.GET(\"/v1/price-index\", { params: { query } }),\n /** Tier-one price-index chart history. */\n history: (query?: PriceIndexHistoryQuery) =>\n client.GET(\"/v1/price-index/history\", { params: { query } }),\n /** Price movement significance stats (precomputed). */\n stats: (query?: PriceIndexStatsQuery) =>\n client.GET(\"/v1/price-index/stats\", { params: { query } }),\n },\n market: {\n /** Aggregate daily changes, catalog coverage, movement, processing, and origin prices. */\n overview: () => client.GET(\"/v1/market/overview\"),\n /** Entitled named-lot and supplier evidence over the public catalog. */\n evidence: () => client.GET(\"/v1/market/evidence\"),\n /** Actionable market value signals. */\n signals: (query?: MarketSignalsQuery) =>\n client.GET(\"/v1/market/signals\", { params: { query } }),\n /** Metadata-trend index (process/disclosure/Purveyor Score over time). */\n metadataIndex: (query?: MetadataIndexQuery) =>\n client.GET(\"/v1/market/metadata-index\", { params: { query } }),\n },\n procurement: {\n briefs: {\n /** List the caller's saved sourcing briefs. */\n list: () => client.GET(\"/v1/procurement/briefs\"),\n /** Create a saved sourcing brief. */\n create: (body: SourcingBriefCreateRequest) =>\n client.POST(\"/v1/procurement/briefs\", { body }),\n /** Fetch one of the caller's sourcing briefs by id. */\n get: (id: string) =>\n client.GET(\"/v1/procurement/briefs/{id}\", {\n params: { path: { id } },\n }),\n /** Run a saved brief against the catalog (paginated matches). */\n matches: (id: string, query?: BriefMatchesQuery) =>\n client.GET(\"/v1/procurement/briefs/{id}/matches\", {\n params: { path: { id }, query },\n }),\n },\n },\n portfolio: {\n trackedLots: {\n /**\n * List an owner-scoped tracked catalog-id page and bounded recent\n * summaries enriched with live catalog state. Follow nextCursor when\n * a capped response reports truncation.\n */\n list: (query?: TrackedLotsListQuery) =>\n client.GET(\"/v1/portfolio/tracked-lots\", {\n params: { query },\n }),\n /** Idempotently set a visible catalog lot to tracked. */\n track: (catalogId: number) =>\n client.PUT(\"/v1/portfolio/tracked-lots/{catalogId}\", {\n params: { path: { catalogId } },\n }),\n /** Idempotently set an owner catalog lot to untracked. */\n untrack: (catalogId: number) =>\n client.DELETE(\"/v1/portfolio/tracked-lots/{catalogId}\", {\n params: { path: { catalogId } },\n }),\n },\n },\n confirmedActions: {\n /**\n * Execute or replay one user-confirmed product action. Session-only;\n * executionId is the durable payload-bound replay key.\n */\n execute: (body: ConfirmedActionExecuteRequest) =>\n client.POST(\"/v1/confirmed-actions/execute\", { body }),\n },\n conversation: {\n chat: {\n /**\n * Open a raw AI SDK UI-message stream. The response body is deliberately\n * left unread so BFFs and browser transports can forward chunks without\n * buffering. Aborting the supplied signal cancels the upstream request.\n */\n stream: (\n body: ConversationChatStreamRequest,\n init: { signal?: AbortSignal } = {},\n ): Promise<Response> => {\n const requestFetch = fetchImpl ?? globalThis.fetch;\n return requestFetch(\n new Request(`${baseUrl.replace(/\\/$/, \"\")}/v1/conversation/chat`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify(body),\n signal: init.signal,\n }),\n );\n },\n },\n workspaces: {\n /** Get or create the session owner's singleton workspace. */\n getOrCreate: (body: ConversationWorkspaceCreateRequest) =>\n client.POST(\"/v1/conversation/workspaces\", { body }),\n /** Read the bounded canonical workspace and message state. */\n get: (workspaceId: string, messageLimit = 50) =>\n client.GET(\"/v1/conversation/workspaces/{workspaceId}\", {\n params: { path: { workspaceId }, query: { messageLimit } },\n }),\n /** Update owner workspace title or type. */\n update: (\n workspaceId: string,\n body: ConversationWorkspaceMetadataRequest,\n ) =>\n client.PATCH(\"/v1/conversation/workspaces/{workspaceId}\", {\n params: { path: { workspaceId } },\n body,\n }),\n messages: {\n /** Append or replay payload-bound messages under a reset epoch. */\n append: (\n workspaceId: string,\n body: ConversationMessageAppendRequest,\n ) =>\n client.POST(\"/v1/conversation/workspaces/{workspaceId}/messages\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Clear messages and advance the workspace reset epoch. */\n clear: (\n workspaceId: string,\n body: ConversationWorkspaceClearRequest,\n ) =>\n client.POST(\n \"/v1/conversation/workspaces/{workspaceId}/messages/clear\",\n { params: { path: { workspaceId } }, body },\n ),\n },\n /** Optimistically replace canvas state. */\n updateCanvas: (\n workspaceId: string,\n body: ConversationCanvasUpdateRequest,\n ) =>\n client.PUT(\"/v1/conversation/workspaces/{workspaceId}/canvas\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Read bounded inputs for summary compaction. */\n getCompactionInputs: (workspaceId: string, messageLimit = 30) =>\n client.GET(\n \"/v1/conversation/workspaces/{workspaceId}/compaction-inputs\",\n {\n params: { path: { workspaceId }, query: { messageLimit } },\n },\n ),\n /** Commit a summary only if epoch, version, and high-water still match. */\n updateSummary: (\n workspaceId: string,\n body: ConversationSummaryUpdateRequest,\n ) =>\n client.PUT(\"/v1/conversation/workspaces/{workspaceId}/summary\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Generate and CAS-commit a Parchment-owned workspace summary. */\n compactSummary: (workspaceId: string) =>\n client.POST(\n \"/v1/conversation/workspaces/{workspaceId}/summary/compact\",\n { params: { path: { workspaceId } } },\n ),\n },\n memory: {\n /** Read the session owner's versioned durable memory. */\n get: () => client.GET(\"/v1/conversation/memory\"),\n /** Optimistically update session-owner memory. */\n update: (body: ConversationMemoryUpdateRequest) =>\n client.PUT(\"/v1/conversation/memory\", { body }),\n },\n },\n inventory: {\n /** List the caller's own green-coffee inventory (owner-scoped). */\n list: (query?: InventoryListQuery) =>\n client.GET(\"/v1/inventory\", { params: { query } }),\n shareGrants: {\n /**\n * Mint or replay a bounded cross-principal inventory capability. The\n * operation UUID is payload-bound and the raw token is returned only\n * by this response.\n */\n create: (body: InventoryShareGrantCreateRequest) =>\n client.POST(\"/v1/inventory/share-grants\", { body }),\n /**\n * Redeem a capability supplied in JSON (never in a URL). This helper\n * does not require the client to be configured with a bearer token.\n */\n redeem: (body: InventoryShareGrantRedeemRequest) =>\n client.POST(\"/v1/inventory/share-grants/redeem\", { body }),\n },\n /**\n * Create an owner inventory lot. Requires a session or an owner-bound API\n * key carrying the exact `inventory:write` scope. Manual coffee creates\n * require `idempotencyKey`; catalog-backed creates accept it optionally.\n * The same key and payload replay the original result.\n */\n create: createInventory,\n /**\n * Atomically create owner-private manual inventory lots. The required\n * idempotency UUID is the stable batch identity and can be reconciled\n * with `getManualBatch` after an uncertain response.\n */\n createManualBatch: (\n body: ManualInventoryBatchCreateRequest,\n options: { idempotencyKey: string },\n ) =>\n client.POST(\"/v1/inventory/manual-batches\", {\n params: {\n header: { \"idempotency-key\": options.idempotencyKey },\n },\n body,\n }),\n /** Return the durable terminal result for a manual inventory batch. */\n getManualBatch: (batchId: string) =>\n client.GET(\"/v1/inventory/manual-batches/{batchId}\", {\n params: { path: { batchId } },\n }),\n /**\n * Durably reserve a complete manual-batch request. Once accepted, clients\n * only need to persist the batch UUID.\n */\n reserveManualBatch: (body: ManualInventoryBatchReserveRequest) =>\n client.POST(\"/v1/inventory/manual-batches/reservations\", { body }),\n /** Commit a reserved batch by UUID with no request body. */\n commitManualBatch: (batchId: string) =>\n client.POST(\"/v1/inventory/manual-batches/{batchId}/commit\", {\n params: { path: { batchId } },\n }),\n /**\n * Get unknown, accepted, in-progress, completed, or terminal-rejected\n * state. Unknown is explicitly nonterminal, including missing or\n * cross-tenant UUIDs, so clients retain the UUID and retry.\n */\n getManualBatchStatus: (batchId: string) =>\n client.GET(\"/v1/inventory/manual-batches/{batchId}/status\", {\n params: { path: { batchId } },\n }),\n /** Durably reserve canonical catalog-backed inventory intent. */\n reserveCatalogBatch: (body: CatalogInventoryBatchReserveRequest) =>\n client.POST(\"/v1/inventory/catalog-batches/reservations\", { body }),\n /** Atomically commit a reserved catalog batch by UUID, with no body. */\n commitCatalogBatch: (batchId: string) =>\n client.POST(\"/v1/inventory/catalog-batches/{batchId}/commit\", {\n params: { path: { batchId } },\n }),\n /** Recover the owner-scoped lifecycle; missing batches remain unknown. */\n getCatalogBatchStatus: (batchId: string) =>\n client.GET(\"/v1/inventory/catalog-batches/{batchId}/status\", {\n params: { path: { batchId } },\n }),\n /**\n * Update one of the caller's own inventory rows. Pass `ifMatch` (the\n * row's `last_updated`) to enable optimistic concurrency (409 on mismatch).\n */\n update: (\n id: number,\n body: InventoryUpdateRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PATCH(\"/v1/inventory/{id}\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Delete one of the caller's own inventory rows. Returns 409 if dependent\n * roast profiles or sales exist (no force-cascade).\n */\n delete: (id: number) =>\n client.DELETE(\"/v1/inventory/{id}\", { params: { path: { id } } }),\n },\n roasts: {\n /** Match Artisan roast metadata to one of the supplied inventory rows. */\n classify: (body: RoastClassificationRequest) =>\n client.POST(\"/v1/roasts/classify\", { body }),\n /** List the caller's own roast profiles (owner-scoped). */\n list: (query?: RoastListQuery) =>\n client.GET(\"/v1/roasts\", { params: { query } }),\n /**\n * Fetch one of the caller's roast profiles by id, optionally with its\n * temperature curve (`includeTemps`) and event markers (`includeEvents`).\n */\n get: (id: string, query?: RoastGetQuery) =>\n client.GET(\"/v1/roasts/{id}\", { params: { path: { id }, query } }),\n /** Fetch an owner roast's adaptively sampled chart curve and metadata. */\n chartData: (id: string, query?: RoastChartDataQuery) =>\n client.GET(\"/v1/roasts/{id}/chart-data\", {\n params: { path: { id }, query },\n }),\n /**\n * Create an owner roast profile, optionally with nested temperature/event\n * rows. Requires a session or an owner-bound API key carrying the exact\n * `roast:write` scope. The optional `idempotencyKey` is payload-bound:\n * same-key, same-payload retries replay, while changed payloads conflict.\n */\n create: (\n body: RoastCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Create every profile in one named batch atomically. The required\n * payload-bound idempotency key makes transport retries safe.\n */\n createBatch: (body: RoastBatchCreateRequest, idempotencyKey: string) =>\n client.POST(\"/v1/roasts/batches\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n /**\n * Update one of the caller's own roast profiles. Pass `ifMatch` (the\n * row's `last_updated`) to enable optimistic concurrency (409 on mismatch).\n */\n update: (\n id: number,\n body: RoastUpdateRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PATCH(\"/v1/roasts/{id}\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /** Delete one of the caller's own roast profiles. */\n delete: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}\", { params: { path: { id } } }),\n /** Delete every owner roast carrying one exact batch name. Session-only. */\n deleteBatch: (batchName: string) =>\n client.DELETE(\"/v1/roasts/batches/{batchName}\", {\n params: { path: { batchName } },\n }),\n /**\n * Replace live temperature samples and all event markers atomically,\n * while preserving non-live temperatures and deriving milestone fields.\n */\n replaceLiveCurve: (\n id: number,\n body: RoastLiveCurveRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/live-curve\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Create a roast profile from an Artisan `.alog` file against one of the\n * caller's green-coffee lots, persisting the imported curve, events, and\n * an artisan_import_log entry atomically. Requires a session or an\n * owner-bound API key carrying the exact `roast:write` scope. The\n * optional `idempotencyKey` is payload-bound: same-key, same-payload\n * retries replay, while changed payloads conflict.\n */\n import: (\n body: RoastImportRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts/imports\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Replace the Artisan import data on one of the caller's existing roasts,\n * re-deriving its curve, events, and computed metrics while preserving the\n * roast's identity. Pass `ifMatch` (the roast's `last_updated`) to enable\n * optimistic concurrency (409 on mismatch).\n */\n replaceArtisanImport: (\n id: number,\n body: RoastArtisanImportReplaceRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/artisan-import\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Clear import-derived curve, events, metrics, and provenance data from\n * one of the caller's existing roasts without deleting the roast profile.\n */\n clearArtisanImport: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}/artisan-import\", {\n params: { path: { id } },\n }),\n },\n sales: {\n /** List the caller's own sales (owner-scoped). */\n list: (query?: SalesListQuery) =>\n client.GET(\"/v1/sales\", { params: { query } }),\n /**\n * Record a sale against one of the caller's own green-coffee inventory\n * lots. Requires a session or an owner-bound API key carrying the exact\n * `sales:write` scope. The optional `idempotencyKey` is payload-bound:\n * same-key, same-payload retries replay, while changed payloads or a\n * concurrent duplicate return 409.\n */\n create: (\n body: SalesCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/sales\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Update one of the caller's own sales. The sales table carries no\n * `last_updated` column, so no If-Match optimistic concurrency is\n * offered.\n */\n update: (id: number, body: SalesUpdateRequest) =>\n client.PATCH(\"/v1/sales/{id}\", {\n params: { path: { id } },\n body,\n }),\n /** Delete one of the caller's own sales. */\n delete: (id: number) =>\n client.DELETE(\"/v1/sales/{id}\", { params: { path: { id } } }),\n },\n profit: {\n /**\n * List the caller's owner-scoped profit summaries. API keys require\n * inventory:read, roast:read, and sales:read. Use pagination.total to\n * exhaust the complete owner result set.\n */\n list: (query?: ProfitListQuery) =>\n client.GET(\"/v1/profit\", { params: { query } }),\n },\n tasting: {\n /** Fetch supplier notes plus the caller's own latest tasting notes. */\n get: (catalogId: string, query?: TastingGetQuery) =>\n client.GET(\"/v1/tasting/{catalogId}\", {\n params: { path: { catalogId }, query },\n }),\n /** Replace the caller's rating for one owned inventory lot. */\n rate: (inventoryId: number, body: TastingRateRequest) =>\n client.PUT(\"/v1/tasting/inventory/{inventoryId}\", {\n params: { path: { inventoryId } },\n body,\n }),\n },\n };\n}\n\nexport type ParchmentClient = ReturnType<typeof createParchmentClient>;\n"],"mappings":"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","names":["options"]}
1
+ {"version":3,"sources":["../src/client.ts"],"sourcesContent":["import createClient, { type ClientOptions } from \"openapi-fetch\";\nimport type { components, paths } from \"./schema\";\n\nexport interface ParchmentClientOptions {\n /** Base URL of the Parchment API, e.g. https://api.purveyors.io */\n baseUrl: string;\n /**\n * Optional bearer token (a Supabase JWT, API key, or dedicated machine\n * credential). Sent as\n * `Authorization: Bearer <token>`. Auth is resolved server-side at the route\n * boundary; the SDK only forwards the credential.\n */\n token?: string;\n /** Override the fetch implementation (useful for tests or custom runtimes). */\n fetch?: ClientOptions[\"fetch\"];\n}\n\n/** Query parameters for {@link ParchmentClient.catalog.list}. */\nexport type CatalogListQuery = NonNullable<\n paths[\"/v1/catalog\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** A catalog row returned by the canonical listing resource. */\nexport type CatalogItem = components[\"schemas\"][\"CatalogItem\"];\n/** API-owned row-level trust summary returned when `include=proof`. */\nexport type CatalogProofSummary = components[\"schemas\"][\"CatalogProofSummary\"];\n/** Query parameters for {@link ParchmentClient.catalog.facets}. */\nexport type CatalogFacetsQuery = NonNullable<\n paths[\"/v1/catalog/facets\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/**\n * Optional headers for {@link ParchmentClient.catalog.list}, notably the\n * RFC 7240 `Prefer: handling=lenient|strict` override (PADR-0013 §7). Sending\n * `handling=lenient` opts a strict caller (API key or bearer-session JWT) back\n * into strip-with-notice degradation instead of a 401/403 hard-deny.\n */\nexport type CatalogListHeaders = NonNullable<\n paths[\"/v1/catalog\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.map}. */\nexport type CatalogMapQuery = NonNullable<\n paths[\"/v1/catalog/map\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Optional handling headers for {@link ParchmentClient.catalog.map}. */\nexport type CatalogMapHeaders = NonNullable<\n paths[\"/v1/catalog/map\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Lightweight map projection over the caller-visible catalog. */\nexport type CatalogMapResponse = components[\"schemas\"][\"CatalogMapResponse\"];\n/** Optional headers for {@link ParchmentClient.catalog.facets}; see {@link CatalogListHeaders}. */\nexport type CatalogFacetsHeaders = NonNullable<\n paths[\"/v1/catalog/facets\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.originPriceStats}. */\nexport type CatalogOriginPriceStatsQuery = NonNullable<\n paths[\"/v1/catalog/origin-price-stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.stats}. */\nexport type CatalogStatsQuery = NonNullable<\n paths[\"/v1/catalog/stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.rank}. */\nexport type CatalogRankQuery = NonNullable<\n paths[\"/v1/catalog/rank\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.rankPremium}. */\nexport type CatalogRankPremiumQuery = NonNullable<\n paths[\"/v1/catalog/rank-premium\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.suppliers}. */\nexport type CatalogSuppliersQuery = NonNullable<\n paths[\"/v1/catalog/suppliers\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.supplierDetail}. */\nexport type CatalogSupplierDetailQuery = NonNullable<\n paths[\"/v1/catalog/suppliers/detail\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.supplierRank}. */\nexport type CatalogSupplierRankQuery = NonNullable<\n paths[\"/v1/catalog/suppliers/rank\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Optional headers for ranking endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogRankHeaders = NonNullable<\n paths[\"/v1/catalog/rank\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Optional headers for premium ranking endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogRankPremiumHeaders = NonNullable<\n paths[\"/v1/catalog/rank-premium\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Optional headers for supplier aggregate endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogSupplierHeaders = NonNullable<\n paths[\"/v1/catalog/suppliers\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.similar}. */\nexport type CatalogSimilarQuery = NonNullable<\n paths[\"/v1/catalog/{id}/similar\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.priceIndex.list}. */\nexport type PriceIndexQuery = NonNullable<\n paths[\"/v1/price-index\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.priceIndex.history}. */\nexport type PriceIndexHistoryQuery = NonNullable<\n paths[\"/v1/price-index/history\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.market.signals}. */\nexport type MarketSignalsQuery = NonNullable<\n paths[\"/v1/market/signals\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Aggregate-only public green-coffee market evidence. */\nexport type MarketOverview = components[\"schemas\"][\"MarketOverviewResponse\"];\n/** Named public-catalog and supplier evidence for Parchment Intelligence callers. */\nexport type MarketEvidence = components[\"schemas\"][\"MarketEvidenceResponse\"];\n/** Query parameters for {@link ParchmentClient.priceIndex.stats}. */\nexport type PriceIndexStatsQuery = NonNullable<\n paths[\"/v1/price-index/stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.market.metadataIndex}. */\nexport type MetadataIndexQuery = NonNullable<\n paths[\"/v1/market/metadata-index\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.procurement.briefs.matches}. */\nexport type BriefMatchesQuery = NonNullable<\n paths[\"/v1/procurement/briefs/{id}/matches\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.procurement.briefs.create}. */\nexport type SourcingBriefCreateRequest =\n components[\"schemas\"][\"SourcingBriefCreateRequest\"];\n/** Query parameters for {@link ParchmentClient.portfolio.trackedLots.list}. */\nexport type TrackedLotsListQuery = NonNullable<\n paths[\"/v1/portfolio/tracked-lots\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** A tracked catalog lot enriched with current catalog and price state. */\nexport type TrackedLotSummary = components[\"schemas\"][\"TrackedLotSummary\"];\n/** State returned by tracked-lot PUT and DELETE mutations. */\nexport type TrackedLotMutation =\n components[\"schemas\"][\"TrackedLotMutationResponse\"];\n/** Closed session-only command for {@link ParchmentClient.confirmedActions.execute}. */\nexport type ConfirmedActionExecuteRequest = NonNullable<\n paths[\"/v1/confirmed-actions/execute\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Create-or-get body for {@link ParchmentClient.conversation.workspaces.getOrCreate}. */\nexport type ConversationWorkspaceCreateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationWorkspaceMetadataRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMessageAppendRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/messages\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationWorkspaceClearRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/messages/clear\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationCanvasUpdateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/canvas\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationSummaryUpdateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/summary\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMemoryUpdateRequest = NonNullable<\n paths[\"/v1/conversation/memory\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMemoryDreamRequest = NonNullable<\n paths[\"/v1/conversation/memory/dream\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.inventory.list}. */\nexport type InventoryListQuery = NonNullable<\n paths[\"/v1/inventory\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.inventory.create}. */\nexport type InventoryCreateRequest = NonNullable<\n paths[\"/v1/inventory\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Stable-operation request for {@link ParchmentClient.inventory.shareGrants.create}. */\nexport type InventoryShareGrantCreateRequest = NonNullable<\n paths[\"/v1/inventory/share-grants\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** The one-time raw-token grant returned by create or same-operation replay. */\nexport type InventoryShareGrant = components[\"schemas\"][\"InventoryShareGrant\"];\n/** Anonymous capability body for {@link ParchmentClient.inventory.shareGrants.redeem}. */\nexport type InventoryShareGrantRedeemRequest = NonNullable<\n paths[\"/v1/inventory/share-grants/redeem\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Safe legacy-oriented inventory row returned by capability redemption. */\nexport type InventoryShareInventory =\n components[\"schemas\"][\"InventoryShareInventory\"];\n/** Catalog allowlist nested in a shared inventory row. */\nexport type InventoryShareCatalog =\n components[\"schemas\"][\"InventoryShareCatalog\"];\n/** Six-field roast summary nested in member/admin shares. */\nexport type InventoryShareRoastSummary =\n components[\"schemas\"][\"InventoryShareRoastSummary\"];\ntype CatalogInventoryCreateRequest =\n components[\"schemas\"][\"CatalogInventoryCreateRequest\"];\ntype ManualInventoryCreateRequest =\n components[\"schemas\"][\"ManualInventoryCreateRequest\"];\n/** Request body for {@link ParchmentClient.inventory.createManualBatch}. */\nexport type ManualInventoryBatchCreateRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for reserving durable server-owned manual-batch intent. */\nexport type ManualInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Complete canonical intent accepted by the catalog-batch reservation lane. */\nexport type CatalogInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/catalog-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable catalog-batch state returned by reserve, commit, and status. */\nexport type CatalogInventoryBatchLifecycle =\n components[\"schemas\"][\"CatalogInventoryBatchLifecycle\"];\n/** Identity-only terminal result; catalog resources remain a separate read. */\nexport type CatalogInventoryBatchResult =\n components[\"schemas\"][\"CatalogInventoryBatchResult\"];\n/** Request body for {@link ParchmentClient.inventory.update}. */\nexport type InventoryUpdateRequest = NonNullable<\n paths[\"/v1/inventory/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.roasts.list}. */\nexport type RoastListQuery = NonNullable<\n paths[\"/v1/roasts\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.get}. */\nexport type RoastGetQuery = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartDataQuery = NonNullable<\n paths[\"/v1/roasts/{id}/chart-data\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.roasts.classify}. */\nexport type RoastClassificationRequest = NonNullable<\n paths[\"/v1/roasts/classify\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.create}. */\nexport type RoastCreateRequest = NonNullable<\n paths[\"/v1/roasts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Atomic named-batch body for {@link ParchmentClient.roasts.createBatch}. */\nexport type RoastBatchCreateRequest = NonNullable<\n paths[\"/v1/roasts/batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.update}. */\nexport type RoastUpdateRequest = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Source-aware live curve body for {@link ParchmentClient.roasts.replaceLiveCurve}. */\nexport type RoastLiveCurveRequest = NonNullable<\n paths[\"/v1/roasts/{id}/live-curve\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.import}. */\nexport type RoastImportRequest = NonNullable<\n paths[\"/v1/roasts/imports\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.replaceArtisanImport}. */\nexport type RoastArtisanImportReplaceRequest = NonNullable<\n paths[\"/v1/roasts/{id}/artisan-import\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.sales.list}. */\nexport type SalesListQuery = NonNullable<\n paths[\"/v1/sales\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.profit.list}. */\nexport type ProfitListQuery = NonNullable<\n paths[\"/v1/profit\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** One owner inventory lot's canonical cost, revenue, and roast summary. */\nexport type ProfitItem = components[\"schemas\"][\"ProfitItem\"];\n/** Request body for {@link ParchmentClient.sales.create}. */\nexport type SalesCreateRequest = NonNullable<\n paths[\"/v1/sales\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.sales.update}. */\nexport type SalesUpdateRequest = NonNullable<\n paths[\"/v1/sales/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.tasting.get}. */\nexport type TastingGetQuery = NonNullable<\n paths[\"/v1/tasting/{catalogId}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.tasting.rate}. */\nexport type TastingRateRequest = NonNullable<\n paths[\"/v1/tasting/inventory/{inventoryId}\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.apiKeys.create}. */\nexport type ApiKeyCreateRequest = NonNullable<\n paths[\"/v1/api-keys\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for the session owner's API-key traffic analytics. */\nexport type OwnerApiUsageQuery = NonNullable<\n paths[\"/v1/api-usage\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Bounded owner API-key traffic analytics (not session or billing usage). */\nexport type OwnerApiUsage = components[\"schemas\"][\"OwnerApiUsageResponse\"];\n/** Request body for {@link ParchmentClient.emailSubscriptions.setMarketRead}. */\nexport type MarketReadPreferenceRequest = NonNullable<\n paths[\"/v1/email-subscriptions/market-read\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.emailSubscriptions.unsubscribeMarketRead}. */\nexport type MarketReadUnsubscribeRequest = NonNullable<\n paths[\"/v1/email-subscriptions/market-read/unsubscribe\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Immutable deployed projection accepted by {@link ParchmentClient.marketBrief.drafts.create}. */\nexport type MarketBriefDraftCreateRequest = NonNullable<\n paths[\"/v1/market-brief/drafts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable Parchment-owned provider-draft state. */\nexport type MarketBriefDraftState =\n components[\"schemas\"][\"MarketBriefDraftState\"];\n/** Account-owned Market Read email preference. */\nexport type EmailSubscriptionPreference =\n components[\"schemas\"][\"EmailSubscriptionPreference\"];\n/** Durable state returned by an account-deletion request. */\nexport type AccountDeletionOperation =\n components[\"schemas\"][\"AccountDeletionOperation\"];\n/** Purpose-bound recent-reauthentication assertion for account deletion. */\nexport type AccountDeletionRequest = NonNullable<\n paths[\"/v1/account-deletion\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Purchase-key request for dormant direct Parchment Checkout creation/replay. */\nexport type BillingCheckoutCreateRequest = NonNullable<\n paths[\"/v1/billing/checkout-sessions\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable Checkout admission state; provider Session id stays server-side. */\nexport type BillingCheckoutSession =\n components[\"schemas\"][\"BillingCheckoutSession\"];\n/** Durable cancellation/resume request. */\nexport type BillingSubscriptionMutationRequest = NonNullable<\n paths[\"/v1/billing/subscriptions/{subscriptionId}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable provider subscription-operation state. */\nexport type BillingSubscriptionOperation =\n components[\"schemas\"][\"BillingSubscriptionOperation\"];\n/** Manual entitlement baseline update for administrators. */\nexport type BillingManualEntitlementsRequest = NonNullable<\n paths[\"/v1/admin/billing-entitlements/{ownerId}/manual\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthRequestCreate = NonNullable<\n paths[\"/v1/cli-auth/requests\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthInspectRequest = NonNullable<\n paths[\"/v1/cli-auth/inspect\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthApproveRequest = NonNullable<\n paths[\"/v1/cli-auth/approve\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthExchangeRequest = NonNullable<\n paths[\"/v1/cli-auth/token\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Browser-compatible AI SDK UI-message stream request. */\nexport type ConversationChatStreamRequest =\n components[\"schemas\"][\"ConversationChatStreamRequest\"];\n\n/**\n * Create a typed Parchment API client.\n *\n * The generated core (openapi-fetch over the generated `paths` types) is the\n * contract truth; the named helpers below are the hand-maintained ergonomic\n * layer and grow as endpoints land. `raw` always exposes the underlying typed\n * client for direct path access to anything not yet wrapped.\n */\nexport function createParchmentClient(options: ParchmentClientOptions) {\n const { baseUrl, token, fetch: fetchImpl } = options;\n\n const client = createClient<paths>({\n baseUrl,\n fetch: fetchImpl,\n headers: token ? { Authorization: `Bearer ${token}` } : undefined,\n });\n\n const postInventory = (\n body: InventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/inventory\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n });\n\n function createInventory(\n body: ManualInventoryCreateRequest,\n options: { idempotencyKey: string },\n ): ReturnType<typeof postInventory>;\n function createInventory(\n body: CatalogInventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ): ReturnType<typeof postInventory>;\n function createInventory(\n body: InventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ): ReturnType<typeof postInventory> {\n return postInventory(body, options);\n }\n\n return {\n /** The underlying typed openapi-fetch client for direct path access. */\n raw: client,\n /** Liveness and service identity. */\n health: () => client.GET(\"/health\"),\n /** Resolved principal and entitlements for the caller. */\n me: () => client.GET(\"/v1/me\"),\n apiKeys: {\n /** List API keys owned by the authenticated session user. */\n list: () => client.GET(\"/v1/api-keys\"),\n /** Create an API key. The raw secret is returned only once. */\n create: (body: ApiKeyCreateRequest) =>\n client.POST(\"/v1/api-keys\", { body }),\n /** Revoke an API key owned by the authenticated session user. */\n revoke: (id: string) =>\n client.DELETE(\"/v1/api-keys/{id}\", {\n params: { path: { id } },\n }),\n /** Rotate an API key and return the replacement secret once. */\n rotate: (id: string) =>\n client.POST(\"/v1/api-keys/{id}/rotate\", {\n params: { path: { id } },\n }),\n },\n apiUsage: {\n /**\n * Read bounded API-key traffic analytics for the authenticated session\n * owner. Headline monthly/hourly counts are exact; daily/per-key series\n * carry explicit truncation metadata.\n */\n get: (query?: OwnerApiUsageQuery) =>\n client.GET(\"/v1/api-usage\", { params: { query } }),\n },\n emailSubscriptions: {\n /** Get the authenticated session user's Market Read preference. */\n get: () => client.GET(\"/v1/email-subscriptions\"),\n /** Idempotently set the authenticated session user's Market Read preference. */\n setMarketRead: (body: MarketReadPreferenceRequest) =>\n client.PUT(\"/v1/email-subscriptions/market-read\", { body }),\n /** Idempotently unsubscribe using an opaque capability without requiring a session. */\n unsubscribeMarketRead: (body: MarketReadUnsubscribeRequest) =>\n client.POST(\"/v1/email-subscriptions/market-read/unsubscribe\", {\n body,\n }),\n },\n marketBrief: {\n drafts: {\n /** Accept, create, or recover one immutable deployed edition version. */\n create: (body: MarketBriefDraftCreateRequest) =>\n client.POST(\"/v1/market-brief/drafts\", { body }),\n },\n },\n accountDeletion: {\n /** Accept or replay deletion using a purpose-bound reauthentication assertion. */\n request: (body: AccountDeletionRequest) =>\n client.POST(\"/v1/account-deletion\", { body }),\n },\n billing: {\n checkout: {\n /** Create or replay an embedded Checkout Session after activation. */\n create: (body: BillingCheckoutCreateRequest) =>\n client.POST(\"/v1/billing/checkout-sessions\", { body }),\n /** Read owner-bound durable admission state. */\n get: (admissionId: string) =>\n client.GET(\"/v1/billing/checkout-sessions/{admissionId}\", {\n params: { path: { admissionId } },\n }),\n /** Authoritatively reconcile an admission with Stripe. */\n reconcile: (admissionId: string) =>\n client.POST(\"/v1/billing/checkout-sessions/{admissionId}/reconcile\", {\n params: { path: { admissionId } },\n }),\n },\n subscriptions: {\n /** List canonical owner subscription snapshots. */\n list: () => client.GET(\"/v1/billing/subscriptions\"),\n /** Durably cancel or resume the complete provider subscription. */\n mutate: (\n subscriptionId: string,\n body: BillingSubscriptionMutationRequest,\n ) =>\n client.PATCH(\"/v1/billing/subscriptions/{subscriptionId}\", {\n params: { path: { subscriptionId } },\n body,\n }),\n },\n },\n billingAdministration: {\n /** Read bounded canonical-entitlement discrepancies. */\n discrepancies: () =>\n client.GET(\"/v1/admin/billing-entitlement-discrepancies\"),\n /** Recompute billing contribution without changing manual grants. */\n recompute: (ownerId: string) =>\n client.POST(\n \"/v1/admin/billing-entitlement-discrepancies/{ownerId}/recompute\",\n { params: { path: { ownerId } } },\n ),\n /** Update the preserved manual entitlement baseline. */\n setManual: (ownerId: string, body: BillingManualEntitlementsRequest) =>\n client.PATCH(\"/v1/admin/billing-entitlements/{ownerId}/manual\", {\n params: { path: { ownerId } },\n body,\n }),\n },\n cliAuth: {\n /** Create a signed, short-lived login request bound to a PKCE challenge. */\n create: (body: CliAuthRequestCreate) =>\n client.POST(\"/v1/cli-auth/requests\", { body }),\n /** Inspect a signed request before displaying the web consent screen. */\n inspect: (body: CliAuthInspectRequest) =>\n client.POST(\"/v1/cli-auth/inspect\", { body }),\n /** Approve a request using the client's authenticated user session. */\n approve: (body: CliAuthApproveRequest) =>\n client.POST(\"/v1/cli-auth/approve\", { body }),\n /** Exchange an approved request and verifier for the one-time raw key. */\n exchange: (body: CliAuthExchangeRequest) =>\n client.POST(\"/v1/cli-auth/token\", { body }),\n },\n catalog: {\n /** Catalog capabilities and visibility for the caller. */\n access: () => client.GET(\"/v1/catalog/access\"),\n /**\n * List public catalog coffees (paginated). Pass `headers` to send the\n * `Prefer: handling=lenient|strict` override (see {@link CatalogListHeaders}).\n */\n list: (query?: CatalogListQuery, headers?: CatalogListHeaders) =>\n client.GET(\"/v1/catalog\", { params: { query, header: headers } }),\n /** Deterministic clusters, canonical place features, and elevation profile. */\n map: (query?: CatalogMapQuery, headers?: CatalogMapHeaders) =>\n client.GET(\"/v1/catalog/map\", {\n params: { query, header: headers },\n }),\n /**\n * Catalog filter metadata and counted facets. Pass `headers` to send the\n * `Prefer: handling=lenient|strict` override (see {@link CatalogFacetsHeaders}).\n */\n facets: (query?: CatalogFacetsQuery, headers?: CatalogFacetsHeaders) =>\n client.GET(\"/v1/catalog/facets\", {\n params: { query, header: headers },\n }),\n /** Live catalog price context by origin. */\n originPriceStats: (query?: CatalogOriginPriceStatsQuery) =>\n client.GET(\"/v1/catalog/origin-price-stats\", { params: { query } }),\n /** Aggregate stats over the caller-visible catalog. */\n stats: (query?: CatalogStatsQuery) =>\n client.GET(\"/v1/catalog/stats\", { params: { query } }),\n /** Rank caller-visible catalog coffees by deterministic objectives. */\n rank: (query?: CatalogRankQuery, headers?: CatalogRankHeaders) =>\n client.GET(\"/v1/catalog/rank\", {\n params: { query, header: headers },\n }),\n /** Rank premium catalog candidates by Purveyor Score. */\n rankPremium: (\n query?: CatalogRankPremiumQuery,\n headers?: CatalogRankPremiumHeaders,\n ) =>\n client.GET(\"/v1/catalog/rank-premium\", {\n params: { query, header: headers },\n }),\n /** List supplier aggregates over caller-visible catalog coffees. */\n suppliers: (\n query?: CatalogSuppliersQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers\", {\n params: { query, header: headers },\n }),\n /** Return aggregate detail for a supplier query. */\n supplierDetail: (\n query: CatalogSupplierDetailQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers/detail\", {\n params: { query, header: headers },\n }),\n /** Rank suppliers by catalog score and availability. */\n supplierRank: (\n query?: CatalogSupplierRankQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers/rank\", {\n params: { query, header: headers },\n }),\n /** Aggregate proof-coverage over the public catalog. */\n proofCoverage: () => client.GET(\"/v1/catalog/proof-coverage\"),\n /** Find catalog coffees similar to a target coffee. */\n similar: (id: string, query?: CatalogSimilarQuery) =>\n client.GET(\"/v1/catalog/{id}/similar\", {\n params: { path: { id }, query },\n }),\n },\n priceIndex: {\n /** Available exact 30-day comparisons, with no empty-origin search. */\n comparisons: (query?: { wholesale?: \"true\" | \"false\" | \"all\" }) =>\n client.GET(\"/v1/price-index/comparisons\", { params: { query } }),\n /** Fresh matched-listing movement, not catalog composition or a canonical publication. */\n comparison: (query: {\n from: string;\n to: string;\n origin: string;\n wholesale?: \"true\" | \"false\";\n }) => client.GET(\"/v1/price-index/comparison\", { params: { query } }),\n /** Parchment Price Index (aggregate snapshots). */\n list: (query?: PriceIndexQuery) =>\n client.GET(\"/v1/price-index\", { params: { query } }),\n /** Tier-one price-index chart history. */\n history: (query?: PriceIndexHistoryQuery) =>\n client.GET(\"/v1/price-index/history\", { params: { query } }),\n /** Price movement significance stats (precomputed). */\n stats: (query?: PriceIndexStatsQuery) =>\n client.GET(\"/v1/price-index/stats\", { params: { query } }),\n },\n market: {\n /** Aggregate daily changes, catalog coverage, movement, processing, and origin prices. */\n overview: () => client.GET(\"/v1/market/overview\"),\n /** Entitled named-lot and supplier evidence over the public catalog. */\n evidence: () => client.GET(\"/v1/market/evidence\"),\n /** Actionable market value signals. */\n signals: (query?: MarketSignalsQuery) =>\n client.GET(\"/v1/market/signals\", { params: { query } }),\n /** Metadata-trend index (process/disclosure/Purveyor Score over time). */\n metadataIndex: (query?: MetadataIndexQuery) =>\n client.GET(\"/v1/market/metadata-index\", { params: { query } }),\n },\n procurement: {\n briefs: {\n /** List the caller's saved sourcing briefs. */\n list: () => client.GET(\"/v1/procurement/briefs\"),\n /** Create a saved sourcing brief. */\n create: (body: SourcingBriefCreateRequest) =>\n client.POST(\"/v1/procurement/briefs\", { body }),\n /** Fetch one of the caller's sourcing briefs by id. */\n get: (id: string) =>\n client.GET(\"/v1/procurement/briefs/{id}\", {\n params: { path: { id } },\n }),\n /** Run a saved brief against the catalog (paginated matches). */\n matches: (id: string, query?: BriefMatchesQuery) =>\n client.GET(\"/v1/procurement/briefs/{id}/matches\", {\n params: { path: { id }, query },\n }),\n },\n },\n portfolio: {\n trackedLots: {\n /**\n * List an owner-scoped tracked catalog-id page and bounded recent\n * summaries enriched with live catalog state. Follow nextCursor when\n * a capped response reports truncation.\n */\n list: (query?: TrackedLotsListQuery) =>\n client.GET(\"/v1/portfolio/tracked-lots\", {\n params: { query },\n }),\n /** Idempotently set a visible catalog lot to tracked. */\n track: (catalogId: number) =>\n client.PUT(\"/v1/portfolio/tracked-lots/{catalogId}\", {\n params: { path: { catalogId } },\n }),\n /** Idempotently set an owner catalog lot to untracked. */\n untrack: (catalogId: number) =>\n client.DELETE(\"/v1/portfolio/tracked-lots/{catalogId}\", {\n params: { path: { catalogId } },\n }),\n },\n },\n confirmedActions: {\n /**\n * Execute or replay one user-confirmed product action. Session-only;\n * executionId is the durable payload-bound replay key.\n */\n execute: (body: ConfirmedActionExecuteRequest) =>\n client.POST(\"/v1/confirmed-actions/execute\", { body }),\n },\n conversation: {\n chat: {\n /**\n * Open a raw AI SDK UI-message stream. The response body is deliberately\n * left unread so BFFs and browser transports can forward chunks without\n * buffering. Aborting the supplied signal cancels the upstream request.\n */\n stream: (\n body: ConversationChatStreamRequest,\n init: { signal?: AbortSignal } = {},\n ): Promise<Response> => {\n const requestFetch = fetchImpl ?? globalThis.fetch;\n return requestFetch(\n new Request(`${baseUrl.replace(/\\/$/, \"\")}/v1/conversation/chat`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify(body),\n signal: init.signal,\n }),\n );\n },\n },\n workspaces: {\n /** Get or create the session owner's singleton workspace. */\n getOrCreate: (body: ConversationWorkspaceCreateRequest) =>\n client.POST(\"/v1/conversation/workspaces\", { body }),\n /** Read the bounded canonical workspace and message state. */\n get: (workspaceId: string, messageLimit = 50) =>\n client.GET(\"/v1/conversation/workspaces/{workspaceId}\", {\n params: { path: { workspaceId }, query: { messageLimit } },\n }),\n /** Update owner workspace title or type. */\n update: (\n workspaceId: string,\n body: ConversationWorkspaceMetadataRequest,\n ) =>\n client.PATCH(\"/v1/conversation/workspaces/{workspaceId}\", {\n params: { path: { workspaceId } },\n body,\n }),\n messages: {\n /** Append or replay payload-bound messages under a reset epoch. */\n append: (\n workspaceId: string,\n body: ConversationMessageAppendRequest,\n ) =>\n client.POST(\"/v1/conversation/workspaces/{workspaceId}/messages\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Clear messages and advance the workspace reset epoch. */\n clear: (\n workspaceId: string,\n body: ConversationWorkspaceClearRequest,\n ) =>\n client.POST(\n \"/v1/conversation/workspaces/{workspaceId}/messages/clear\",\n { params: { path: { workspaceId } }, body },\n ),\n },\n /** Optimistically replace canvas state. */\n updateCanvas: (\n workspaceId: string,\n body: ConversationCanvasUpdateRequest,\n ) =>\n client.PUT(\"/v1/conversation/workspaces/{workspaceId}/canvas\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Read bounded inputs for summary compaction. */\n getCompactionInputs: (workspaceId: string, messageLimit = 30) =>\n client.GET(\n \"/v1/conversation/workspaces/{workspaceId}/compaction-inputs\",\n {\n params: { path: { workspaceId }, query: { messageLimit } },\n },\n ),\n /** Commit a summary only if epoch, version, and high-water still match. */\n updateSummary: (\n workspaceId: string,\n body: ConversationSummaryUpdateRequest,\n ) =>\n client.PUT(\"/v1/conversation/workspaces/{workspaceId}/summary\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Generate and CAS-commit a Parchment-owned workspace summary. */\n compactSummary: (workspaceId: string) =>\n client.POST(\n \"/v1/conversation/workspaces/{workspaceId}/summary/compact\",\n { params: { path: { workspaceId } } },\n ),\n },\n memory: {\n /** Read the session owner's versioned durable memory. */\n get: () => client.GET(\"/v1/conversation/memory\"),\n /** Optimistically update session-owner memory. */\n update: (body: ConversationMemoryUpdateRequest) =>\n client.PUT(\"/v1/conversation/memory\", { body }),\n /** Reflect bounded recent messages into versioned session-owner memory. */\n dream: (body: ConversationMemoryDreamRequest) =>\n client.POST(\"/v1/conversation/memory/dream\", { body }),\n },\n },\n inventory: {\n /** List the caller's own green-coffee inventory (owner-scoped). */\n list: (query?: InventoryListQuery) =>\n client.GET(\"/v1/inventory\", { params: { query } }),\n shareGrants: {\n /**\n * Mint or replay a bounded cross-principal inventory capability. The\n * operation UUID is payload-bound and the raw token is returned only\n * by this response.\n */\n create: (body: InventoryShareGrantCreateRequest) =>\n client.POST(\"/v1/inventory/share-grants\", { body }),\n /**\n * Redeem a capability supplied in JSON (never in a URL). This helper\n * does not require the client to be configured with a bearer token.\n */\n redeem: (body: InventoryShareGrantRedeemRequest) =>\n client.POST(\"/v1/inventory/share-grants/redeem\", { body }),\n },\n /**\n * Create an owner inventory lot. Requires a session or an owner-bound API\n * key carrying the exact `inventory:write` scope. Manual coffee creates\n * require `idempotencyKey`; catalog-backed creates accept it optionally.\n * The same key and payload replay the original result.\n */\n create: createInventory,\n /**\n * Atomically create owner-private manual inventory lots. The required\n * idempotency UUID is the stable batch identity and can be reconciled\n * with `getManualBatch` after an uncertain response.\n */\n createManualBatch: (\n body: ManualInventoryBatchCreateRequest,\n options: { idempotencyKey: string },\n ) =>\n client.POST(\"/v1/inventory/manual-batches\", {\n params: {\n header: { \"idempotency-key\": options.idempotencyKey },\n },\n body,\n }),\n /** Return the durable terminal result for a manual inventory batch. */\n getManualBatch: (batchId: string) =>\n client.GET(\"/v1/inventory/manual-batches/{batchId}\", {\n params: { path: { batchId } },\n }),\n /**\n * Durably reserve a complete manual-batch request. Once accepted, clients\n * only need to persist the batch UUID.\n */\n reserveManualBatch: (body: ManualInventoryBatchReserveRequest) =>\n client.POST(\"/v1/inventory/manual-batches/reservations\", { body }),\n /** Commit a reserved batch by UUID with no request body. */\n commitManualBatch: (batchId: string) =>\n client.POST(\"/v1/inventory/manual-batches/{batchId}/commit\", {\n params: { path: { batchId } },\n }),\n /**\n * Get unknown, accepted, in-progress, completed, or terminal-rejected\n * state. Unknown is explicitly nonterminal, including missing or\n * cross-tenant UUIDs, so clients retain the UUID and retry.\n */\n getManualBatchStatus: (batchId: string) =>\n client.GET(\"/v1/inventory/manual-batches/{batchId}/status\", {\n params: { path: { batchId } },\n }),\n /** Durably reserve canonical catalog-backed inventory intent. */\n reserveCatalogBatch: (body: CatalogInventoryBatchReserveRequest) =>\n client.POST(\"/v1/inventory/catalog-batches/reservations\", { body }),\n /** Atomically commit a reserved catalog batch by UUID, with no body. */\n commitCatalogBatch: (batchId: string) =>\n client.POST(\"/v1/inventory/catalog-batches/{batchId}/commit\", {\n params: { path: { batchId } },\n }),\n /** Recover the owner-scoped lifecycle; missing batches remain unknown. */\n getCatalogBatchStatus: (batchId: string) =>\n client.GET(\"/v1/inventory/catalog-batches/{batchId}/status\", {\n params: { path: { batchId } },\n }),\n /**\n * Update one of the caller's own inventory rows. Pass `ifMatch` (the\n * row's `last_updated`) to enable optimistic concurrency (409 on mismatch).\n */\n update: (\n id: number,\n body: InventoryUpdateRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PATCH(\"/v1/inventory/{id}\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Delete one of the caller's own inventory rows. Returns 409 if dependent\n * roast profiles or sales exist (no force-cascade).\n */\n delete: (id: number) =>\n client.DELETE(\"/v1/inventory/{id}\", { params: { path: { id } } }),\n },\n roasts: {\n /** Match Artisan roast metadata to one of the supplied inventory rows. */\n classify: (body: RoastClassificationRequest) =>\n client.POST(\"/v1/roasts/classify\", { body }),\n /** List the caller's own roast profiles (owner-scoped). */\n list: (query?: RoastListQuery) =>\n client.GET(\"/v1/roasts\", { params: { query } }),\n /**\n * Fetch one of the caller's roast profiles by id, optionally with its\n * temperature curve (`includeTemps`) and event markers (`includeEvents`).\n */\n get: (id: string, query?: RoastGetQuery) =>\n client.GET(\"/v1/roasts/{id}\", { params: { path: { id }, query } }),\n /** Fetch an owner roast's adaptively sampled chart curve and metadata. */\n chartData: (id: string, query?: RoastChartDataQuery) =>\n client.GET(\"/v1/roasts/{id}/chart-data\", {\n params: { path: { id }, query },\n }),\n /**\n * Create an owner roast profile, optionally with nested temperature/event\n * rows. Requires a session or an owner-bound API key carrying the exact\n * `roast:write` scope. The optional `idempotencyKey` is payload-bound:\n * same-key, same-payload retries replay, while changed payloads conflict.\n */\n create: (\n body: RoastCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Create every profile in one named batch atomically. The required\n * payload-bound idempotency key makes transport retries safe.\n */\n createBatch: (body: RoastBatchCreateRequest, idempotencyKey: string) =>\n client.POST(\"/v1/roasts/batches\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n /**\n * Update one of the caller's own roast profiles. Pass `ifMatch` (the\n * row's `last_updated`) to enable optimistic concurrency (409 on mismatch).\n */\n update: (\n id: number,\n body: RoastUpdateRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PATCH(\"/v1/roasts/{id}\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /** Delete one of the caller's own roast profiles. */\n delete: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}\", { params: { path: { id } } }),\n /** Delete every owner roast carrying one exact batch name. Session-only. */\n deleteBatch: (batchName: string) =>\n client.DELETE(\"/v1/roasts/batches/{batchName}\", {\n params: { path: { batchName } },\n }),\n /**\n * Replace live temperature samples and all event markers atomically,\n * while preserving non-live temperatures and deriving milestone fields.\n */\n replaceLiveCurve: (\n id: number,\n body: RoastLiveCurveRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/live-curve\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Create a roast profile from an Artisan `.alog` file against one of the\n * caller's green-coffee lots, persisting the imported curve, events, and\n * an artisan_import_log entry atomically. Requires a session or an\n * owner-bound API key carrying the exact `roast:write` scope. The\n * optional `idempotencyKey` is payload-bound: same-key, same-payload\n * retries replay, while changed payloads conflict.\n */\n import: (\n body: RoastImportRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts/imports\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Replace the Artisan import data on one of the caller's existing roasts,\n * re-deriving its curve, events, and computed metrics while preserving the\n * roast's identity. Pass `ifMatch` (the roast's `last_updated`) to enable\n * optimistic concurrency (409 on mismatch).\n */\n replaceArtisanImport: (\n id: number,\n body: RoastArtisanImportReplaceRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/artisan-import\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Clear import-derived curve, events, metrics, and provenance data from\n * one of the caller's existing roasts without deleting the roast profile.\n */\n clearArtisanImport: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}/artisan-import\", {\n params: { path: { id } },\n }),\n },\n sales: {\n /** List the caller's own sales (owner-scoped). */\n list: (query?: SalesListQuery) =>\n client.GET(\"/v1/sales\", { params: { query } }),\n /**\n * Record a sale against one of the caller's own green-coffee inventory\n * lots. Requires a session or an owner-bound API key carrying the exact\n * `sales:write` scope. The optional `idempotencyKey` is payload-bound:\n * same-key, same-payload retries replay, while changed payloads or a\n * concurrent duplicate return 409.\n */\n create: (\n body: SalesCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/sales\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Update one of the caller's own sales. The sales table carries no\n * `last_updated` column, so no If-Match optimistic concurrency is\n * offered.\n */\n update: (id: number, body: SalesUpdateRequest) =>\n client.PATCH(\"/v1/sales/{id}\", {\n params: { path: { id } },\n body,\n }),\n /** Delete one of the caller's own sales. */\n delete: (id: number) =>\n client.DELETE(\"/v1/sales/{id}\", { params: { path: { id } } }),\n },\n profit: {\n /**\n * List the caller's owner-scoped profit summaries. API keys require\n * inventory:read, roast:read, and sales:read. Use pagination.total to\n * exhaust the complete owner result set.\n */\n list: (query?: ProfitListQuery) =>\n client.GET(\"/v1/profit\", { params: { query } }),\n },\n tasting: {\n /** Fetch supplier notes plus the caller's own latest tasting notes. */\n get: (catalogId: string, query?: TastingGetQuery) =>\n client.GET(\"/v1/tasting/{catalogId}\", {\n params: { path: { catalogId }, query },\n }),\n /** Replace the caller's rating for one owned inventory lot. */\n rate: (inventoryId: number, body: TastingRateRequest) =>\n client.PUT(\"/v1/tasting/inventory/{inventoryId}\", {\n params: { path: { inventoryId } },\n body,\n }),\n },\n };\n}\n\nexport type ParchmentClient = ReturnType<typeof createParchmentClient>;\n"],"mappings":"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","names":["options"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purveyors/sdk",
3
- "version": "0.39.0",
3
+ "version": "0.41.0",
4
4
  "description": "Typed client for the Purveyors Parchment API, generated from its OpenAPI spec.",
5
5
  "license": "MIT",
6
6
  "type": "module",