@purveyors/sdk 0.46.0 → 0.48.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
@@ -5148,7 +5148,7 @@ interface paths {
5148
5148
  };
5149
5149
  /**
5150
5150
  * Available 30-day price changes
5151
- * @description Automatically discovers usable origins for an exact 30-day comparison ending on the latest completed observation day within the last seven UTC dates. Returns only available comparisons, or an empty list. Actual dates are explicit; no shortened window, freshness backfill, or historical continuity is implied. Requires Parchment Intelligence.
5151
+ * @description Automatically discovers usable origins for an exact 30-day comparison ending on the latest completed observation day within the last seven UTC dates. Returns only available comparisons, or an empty list. Actual dates are explicit; no shortened window, freshness backfill, or historical continuity is implied. Each comparison carries a significance read against the same origin and market's previous twelve weekly 30-day matched moves; classification stays null until eight baseline windows exist. Requires Parchment Intelligence.
5152
5152
  */
5153
5153
  get: {
5154
5154
  parameters: {
@@ -11723,6 +11723,163 @@ interface paths {
11723
11723
  };
11724
11724
  trace?: never;
11725
11725
  };
11726
+ "/v1/conversation/workspaces/{workspaceId}/messages/history": {
11727
+ parameters: {
11728
+ query?: never;
11729
+ header?: never;
11730
+ path?: never;
11731
+ cookie?: never;
11732
+ };
11733
+ /**
11734
+ * Read older workspace messages
11735
+ * @description Session-only owner conversation state. API keys are not accepted; owner identity is derived from the authenticated session.
11736
+ */
11737
+ get: {
11738
+ parameters: {
11739
+ query: {
11740
+ expectedResetEpoch: number;
11741
+ beforeSequence: number;
11742
+ messageLimit?: number;
11743
+ };
11744
+ header?: never;
11745
+ path: {
11746
+ workspaceId: string;
11747
+ };
11748
+ cookie?: never;
11749
+ };
11750
+ requestBody?: never;
11751
+ responses: {
11752
+ /** @description Conversation-state result */
11753
+ 200: {
11754
+ headers: {
11755
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11756
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11757
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11758
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11759
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11760
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11761
+ [name: string]: unknown;
11762
+ };
11763
+ content: {
11764
+ "application/json": components["schemas"]["ConversationMessageHistoryResponse"];
11765
+ };
11766
+ };
11767
+ /** @description Invalid conversation-state request */
11768
+ 400: {
11769
+ headers: {
11770
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11771
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11772
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11773
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11774
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11775
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11776
+ [name: string]: unknown;
11777
+ };
11778
+ content: {
11779
+ "application/json": components["schemas"]["ErrorResponse"];
11780
+ };
11781
+ };
11782
+ /** @description Authentication required */
11783
+ 401: {
11784
+ headers: {
11785
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11786
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11787
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11788
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11789
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11790
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11791
+ [name: string]: unknown;
11792
+ };
11793
+ content: {
11794
+ "application/json": components["schemas"]["ErrorResponse"];
11795
+ };
11796
+ };
11797
+ /** @description Insufficient entitlement (plan or role) */
11798
+ 403: {
11799
+ headers: {
11800
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11801
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11802
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11803
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11804
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11805
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11806
+ [name: string]: unknown;
11807
+ };
11808
+ content: {
11809
+ "application/json": components["schemas"]["ErrorResponse"];
11810
+ };
11811
+ };
11812
+ /** @description Workspace not found for the authenticated owner */
11813
+ 404: {
11814
+ headers: {
11815
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11816
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11817
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11818
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11819
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11820
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11821
+ [name: string]: unknown;
11822
+ };
11823
+ content: {
11824
+ "application/json": components["schemas"]["ErrorResponse"];
11825
+ };
11826
+ };
11827
+ /** @description Reset epoch, version, replay payload, or high-water conflict */
11828
+ 409: {
11829
+ headers: {
11830
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11831
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11832
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11833
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11834
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11835
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11836
+ [name: string]: unknown;
11837
+ };
11838
+ content: {
11839
+ "application/json": components["schemas"]["ErrorResponse"];
11840
+ };
11841
+ };
11842
+ /** @description Conversation-state request body exceeds 1 MiB */
11843
+ 413: {
11844
+ headers: {
11845
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11846
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11847
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11848
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11849
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11850
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11851
+ [name: string]: unknown;
11852
+ };
11853
+ content: {
11854
+ "application/json": components["schemas"]["ErrorResponse"];
11855
+ };
11856
+ };
11857
+ 429: components["responses"]["ApiRateLimitExceeded"];
11858
+ /** @description Conversation-state persistence is temporarily unavailable */
11859
+ 503: {
11860
+ headers: {
11861
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
11862
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
11863
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
11864
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
11865
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
11866
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
11867
+ [name: string]: unknown;
11868
+ };
11869
+ content: {
11870
+ "application/json": components["schemas"]["ErrorResponse"];
11871
+ };
11872
+ };
11873
+ };
11874
+ };
11875
+ put?: never;
11876
+ post?: never;
11877
+ delete?: never;
11878
+ options?: never;
11879
+ head?: never;
11880
+ patch?: never;
11881
+ trace?: never;
11882
+ };
11726
11883
  "/v1/conversation/workspaces/{workspaceId}/messages": {
11727
11884
  parameters: {
11728
11885
  query?: never;
@@ -14656,6 +14813,27 @@ interface components {
14656
14813
  limitations: string[];
14657
14814
  };
14658
14815
  };
14816
+ /**
14817
+ * @description How this move compares with the same origin and market's recent matched moves. Null only before the significance migration is applied.
14818
+ * @default null
14819
+ */
14820
+ MatchedComparisonSignificance: {
14821
+ /** @enum {string} */
14822
+ method: "matched-30d-weekly-abs-percentile-v1";
14823
+ /** @description Previous weekly-stepped 30-day windows for the same origin and market that passed the matching and coverage rules. */
14824
+ baselineWindows: number;
14825
+ /** @enum {number} */
14826
+ requiredBaselineWindows: 8;
14827
+ /** @description Median absolute change across the baseline windows. */
14828
+ baselineMedianAbsChangePercent: number | null;
14829
+ /** @description Percentile of the current absolute change within the baseline, ties counted half. Null below the required baseline. */
14830
+ movePercentile: number | null;
14831
+ /**
14832
+ * @description quiet < 40th percentile, normal < 85th, notable < 97th, otherwise exceptional; the same thresholds as /v1/price-index/stats. Null means there is not enough history to judge, never that the move is quiet.
14833
+ * @enum {string|null}
14834
+ */
14835
+ classification: "quiet" | "normal" | "notable" | "exceptional" | null;
14836
+ } | null;
14659
14837
  MatchedPriceComparison: {
14660
14838
  from: string;
14661
14839
  to: string;
@@ -14688,6 +14866,7 @@ interface components {
14688
14866
  /** @enum {string} */
14689
14867
  status?: "available";
14690
14868
  changePercent?: number;
14869
+ significance?: components["schemas"]["MatchedComparisonSignificance"];
14691
14870
  })[];
14692
14871
  };
14693
14872
  PriceIndexItem: {
@@ -14854,6 +15033,28 @@ interface components {
14854
15033
  origin_market_value_ratio_mean: number | null;
14855
15034
  origin_market_value_ratio_stddev: number | null;
14856
15035
  value_z_score: number | null;
15036
+ /**
15037
+ * @description Signal method. Null for signals computed before comparable sets and tier-ladder checks.
15038
+ * @enum {string|null}
15039
+ */
15040
+ method: "comparable-signals-v2" | null;
15041
+ /** @description below_market only: the comparable lots benchmarked (origin, process, market and lot class; decaf, blends and non-bean products excluded). */
15042
+ comparable_set: {
15043
+ /** @enum {string} */
15044
+ lot_class: "standard" | "premium" | "robusta";
15045
+ lots: number;
15046
+ suppliers: number;
15047
+ p75: number | null;
15048
+ iqr_ratio: number | null;
15049
+ } | null;
15050
+ /** @description below_market only: 0-1 evidence confidence from comparable-set size, supplier count and listing completeness. */
15051
+ confidence: number | null;
15052
+ /** @description below_market only: when the lot was first stocked. */
15053
+ first_stocked: string | null;
15054
+ purveyor_score: number | null;
15055
+ /** @description price_drop only: smallest tier compared; every trailing point shares the same tier ladder. */
15056
+ tier_min_lbs: number | null;
15057
+ trailing_points: number | null;
14857
15058
  as_of: string;
14858
15059
  };
14859
15060
  MarketSignalItem: {
@@ -14925,6 +15126,10 @@ interface components {
14925
15126
  computedAt: string | null;
14926
15127
  thresholds: {
14927
15128
  dropThresholdPct: number;
15129
+ minDiscountPct: number;
15130
+ maxComparableIqrRatio: number;
15131
+ newArrivalDays: number;
15132
+ maxSignalsPerSupplier: number;
14928
15133
  valueZThreshold: number;
14929
15134
  benchmarkMinLots: number;
14930
15135
  benchmarkMinSuppliers: number;
@@ -17196,6 +17401,15 @@ interface components {
17196
17401
  };
17197
17402
  meta: components["schemas"]["ConversationResponseMeta"];
17198
17403
  };
17404
+ ConversationMessageHistory: {
17405
+ messages: components["schemas"]["ConversationWorkspaceMessage"][];
17406
+ nextBeforeSequence: number | null;
17407
+ resetEpoch: number;
17408
+ };
17409
+ ConversationMessageHistoryResponse: {
17410
+ data: components["schemas"]["ConversationMessageHistory"];
17411
+ meta: components["schemas"]["ConversationResponseMeta"];
17412
+ };
17199
17413
  ConversationWorkspaceMetadataResponse: {
17200
17414
  data: components["schemas"]["ConversationWorkspace"];
17201
17415
  meta: components["schemas"]["ConversationResponseMeta"];
@@ -23483,6 +23697,148 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
23483
23697
  };
23484
23698
  }, `${string}/${string}`>>;
23485
23699
  messages: {
23700
+ /** Read older messages before a canonical sequence cursor. */
23701
+ history: (workspaceId: string, expectedResetEpoch: number, beforeSequence: number, messageLimit?: number) => Promise<openapi_fetch.FetchResponse<{
23702
+ parameters: {
23703
+ query: {
23704
+ expectedResetEpoch: number;
23705
+ beforeSequence: number;
23706
+ messageLimit?: number;
23707
+ };
23708
+ header?: never;
23709
+ path: {
23710
+ workspaceId: string;
23711
+ };
23712
+ cookie?: never;
23713
+ };
23714
+ requestBody?: never;
23715
+ responses: {
23716
+ 200: {
23717
+ headers: {
23718
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
23719
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
23720
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
23721
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
23722
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
23723
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
23724
+ [name: string]: unknown;
23725
+ };
23726
+ content: {
23727
+ "application/json": components["schemas"]["ConversationMessageHistoryResponse"];
23728
+ };
23729
+ };
23730
+ 400: {
23731
+ headers: {
23732
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
23733
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
23734
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
23735
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
23736
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
23737
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
23738
+ [name: string]: unknown;
23739
+ };
23740
+ content: {
23741
+ "application/json": components["schemas"]["ErrorResponse"];
23742
+ };
23743
+ };
23744
+ 401: {
23745
+ headers: {
23746
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
23747
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
23748
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
23749
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
23750
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
23751
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
23752
+ [name: string]: unknown;
23753
+ };
23754
+ content: {
23755
+ "application/json": components["schemas"]["ErrorResponse"];
23756
+ };
23757
+ };
23758
+ 403: {
23759
+ headers: {
23760
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
23761
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
23762
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
23763
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
23764
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
23765
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
23766
+ [name: string]: unknown;
23767
+ };
23768
+ content: {
23769
+ "application/json": components["schemas"]["ErrorResponse"];
23770
+ };
23771
+ };
23772
+ 404: {
23773
+ headers: {
23774
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
23775
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
23776
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
23777
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
23778
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
23779
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
23780
+ [name: string]: unknown;
23781
+ };
23782
+ content: {
23783
+ "application/json": components["schemas"]["ErrorResponse"];
23784
+ };
23785
+ };
23786
+ 409: {
23787
+ headers: {
23788
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
23789
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
23790
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
23791
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
23792
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
23793
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
23794
+ [name: string]: unknown;
23795
+ };
23796
+ content: {
23797
+ "application/json": components["schemas"]["ErrorResponse"];
23798
+ };
23799
+ };
23800
+ 413: {
23801
+ headers: {
23802
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
23803
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
23804
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
23805
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
23806
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
23807
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
23808
+ [name: string]: unknown;
23809
+ };
23810
+ content: {
23811
+ "application/json": components["schemas"]["ErrorResponse"];
23812
+ };
23813
+ };
23814
+ 429: components["responses"]["ApiRateLimitExceeded"];
23815
+ 503: {
23816
+ headers: {
23817
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
23818
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
23819
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
23820
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
23821
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
23822
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
23823
+ [name: string]: unknown;
23824
+ };
23825
+ content: {
23826
+ "application/json": components["schemas"]["ErrorResponse"];
23827
+ };
23828
+ };
23829
+ };
23830
+ }, {
23831
+ params: {
23832
+ path: {
23833
+ workspaceId: string;
23834
+ };
23835
+ query: {
23836
+ expectedResetEpoch: number;
23837
+ beforeSequence: number;
23838
+ messageLimit: number;
23839
+ };
23840
+ };
23841
+ }, `${string}/${string}`>>;
23486
23842
  /** Append or replay payload-bound messages under a reset epoch. */
23487
23843
  append: (workspaceId: string, body: ConversationMessageAppendRequest) => Promise<openapi_fetch.FetchResponse<{
23488
23844
  parameters: {
@@ -28745,11 +29101,11 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
28745
29101
  };
28746
29102
  404: {
28747
29103
  headers: {
28748
- "X-RateLimit-Limit": components["headers"] /** Reflect bounded recent messages into versioned session-owner memory. */["X-RateLimit-Limit"];
29104
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
28749
29105
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
28750
29106
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
28751
29107
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
28752
- "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
29108
+ "X-RateLimit-Burst-Remaining": components["headers"] /** Optimistically update session-owner memory. */["X-RateLimit-Burst-Remaining"];
28753
29109
  "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
28754
29110
  [name: string]: unknown;
28755
29111
  };
@@ -28763,12 +29119,11 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
28763
29119
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
28764
29120
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
28765
29121
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
28766
- "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
28767
- "X-RateLimit-Burst-Reset": components["headers"] /**
28768
- * Atomically create owner-private manual inventory lots. The required
28769
- * idempotency UUID is the stable batch identity and can be reconciled
28770
- * with `getManualBatch` after an uncertain response.
28771
- */["X-RateLimit-Burst-Reset"];
29122
+ "X-RateLimit-Burst-Remaining": components["headers"] /**
29123
+ * Redeem a capability supplied in JSON (never in a URL). This helper
29124
+ * does not require the client to be configured with a bearer token.
29125
+ */["X-RateLimit-Burst-Remaining"];
29126
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
28772
29127
  [name: string]: unknown;
28773
29128
  };
28774
29129
  content: {
@@ -28835,10 +29190,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
28835
29190
  };
28836
29191
  400: {
28837
29192
  headers: {
28838
- "X-RateLimit-Limit": components["headers"] /**
28839
- * Update one of the caller's own inventory rows. Pass `ifMatch` (the
28840
- * row's `last_updated`) to enable optimistic concurrency (409 on mismatch).
28841
- */["X-RateLimit-Limit"];
29193
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
28842
29194
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
28843
29195
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
28844
29196
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
@@ -28853,8 +29205,11 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
28853
29205
  401: {
28854
29206
  headers: {
28855
29207
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
28856
- "X-RateLimit-Remaining": components["headers"] /** List the caller's own roast profiles (owner-scoped). */["X-RateLimit-Remaining"];
28857
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
29208
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
29209
+ "X-RateLimit-Reset": components["headers"] /**
29210
+ * Delete one of the caller's own inventory rows. Returns 409 if dependent
29211
+ * roast profiles or sales exist (no force-cascade).
29212
+ */["X-RateLimit-Reset"];
28858
29213
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
28859
29214
  "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
28860
29215
  "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
@@ -28885,7 +29240,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
28885
29240
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
28886
29241
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
28887
29242
  "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
28888
- "X-RateLimit-Burst-Reset": components["headers"] /** Delete one of the caller's own roast profiles. */["X-RateLimit-Burst-Reset"];
29243
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
28889
29244
  [name: string]: unknown;
28890
29245
  };
28891
29246
  content: {
@@ -28965,7 +29320,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
28965
29320
  headers: {
28966
29321
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
28967
29322
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
28968
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
29323
+ "X-RateLimit-Reset": components["headers"] /** List Studio reference profiles without mixing them into roast history. */["X-RateLimit-Reset"];
28969
29324
  "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
28970
29325
  "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
28971
29326
  "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
package/dist/index.js CHANGED
@@ -260,6 +260,16 @@ function createParchmentClient(options) {
260
260
  body
261
261
  }),
262
262
  messages: {
263
+ /** Read older messages before a canonical sequence cursor. */
264
+ history: (workspaceId, expectedResetEpoch, beforeSequence, messageLimit = 100) => client.GET(
265
+ "/v1/conversation/workspaces/{workspaceId}/messages/history",
266
+ {
267
+ params: {
268
+ path: { workspaceId },
269
+ query: { expectedResetEpoch, beforeSequence, messageLimit }
270
+ }
271
+ }
272
+ ),
263
273
  /** Append or replay payload-bound messages under a reset epoch. */
264
274
  append: (workspaceId, body) => client.POST("/v1/conversation/workspaces/{workspaceId}/messages", {
265
275
  params: { path: { workspaceId } },
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\"];\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/** Typed chart payload returned by {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartData =\n components[\"schemas\"][\"RoastChartDataResponse\"][\"data\"];\n/** One sampled primary or auxiliary series in a roast chart payload. */\nexport type RoastChartSeries = components[\"schemas\"][\"RoastChartSeries\"];\n/** One discrete milestone or control event in a roast chart payload. */\nexport type RoastChartEvent = components[\"schemas\"][\"RoastChartEvent\"];\nexport type ReferenceProfile =\n components[\"schemas\"][\"ReferenceProfileResponse\"][\"data\"];\nexport type ReferenceProfileSummary =\n components[\"schemas\"][\"ReferenceProfileSummary\"];\nexport type ReferenceProfileChart =\n components[\"schemas\"][\"ReferenceProfileChart\"];\nexport type ReferenceProfileImportRequest = NonNullable<\n paths[\"/v1/reference-profiles/imports\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileFromRoastRequest = NonNullable<\n paths[\"/v1/reference-profiles/from-roast\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileUpdateRequest = NonNullable<\n paths[\"/v1/reference-profiles/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileGenerationRequest = NonNullable<\n paths[\"/v1/reference-profiles/{id}/revisions/{revisionId}/preview\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ProfileComparisonRequest = NonNullable<\n paths[\"/v1/profile-comparisons\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\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 referenceProfiles: {\n /** List Studio reference profiles without mixing them into roast history. */\n list: (includeArchived = false) =>\n client.GET(\"/v1/reference-profiles\", {\n params: { query: { includeArchived } },\n }),\n get: (id: string) =>\n client.GET(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n }),\n chart: (id: string, revisionId: string) =>\n client.GET(\"/v1/reference-profiles/{id}/revisions/{revisionId}/chart\", {\n params: { path: { id, revisionId } },\n }),\n /** Preview explicit changes without saving or changing the parent. */\n preview: (\n id: string,\n revisionId: string,\n body: ReferenceProfileGenerationRequest,\n ) =>\n client.POST(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/preview\",\n {\n params: { path: { id, revisionId } },\n body,\n },\n ),\n /** Save an immutable generated reference with parent lineage. */\n generate: (\n id: string,\n revisionId: string,\n body: ReferenceProfileGenerationRequest,\n idempotencyKey: string,\n ) =>\n client.POST(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/generated\",\n {\n params: {\n path: { id, revisionId },\n header: { \"idempotency-key\": idempotencyKey },\n },\n body,\n },\n ),\n /** Retrieve only a saved unsigned generated background profile. */\n exportGenerated: (id: string, revisionId: string) =>\n client.GET(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/export\",\n {\n params: { path: { id, revisionId } },\n },\n ),\n import: (body: ReferenceProfileImportRequest, idempotencyKey: string) =>\n client.POST(\"/v1/reference-profiles/imports\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n fromRoast: (\n body: ReferenceProfileFromRoastRequest,\n idempotencyKey: string,\n ) =>\n client.POST(\"/v1/reference-profiles/from-roast\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n update: (id: string, body: ReferenceProfileUpdateRequest) =>\n client.PATCH(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n body,\n }),\n delete: (id: string) =>\n client.DELETE(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n }),\n linkRoast: (id: string, roastId: number) =>\n client.PUT(\"/v1/reference-profiles/{id}/roast-links/{roastId}\", {\n params: { path: { id, roastId } },\n }),\n unlinkRoast: (id: string, roastId: number) =>\n client.DELETE(\"/v1/reference-profiles/{id}/roast-links/{roastId}\", {\n params: { path: { id, roastId } },\n }),\n compare: (body: ProfileComparisonRequest) =>\n client.POST(\"/v1/profile-comparisons\", { body }),\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/** Typed chart payload returned by {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartData =\n components[\"schemas\"][\"RoastChartDataResponse\"][\"data\"];\n/** One sampled primary or auxiliary series in a roast chart payload. */\nexport type RoastChartSeries = components[\"schemas\"][\"RoastChartSeries\"];\n/** One discrete milestone or control event in a roast chart payload. */\nexport type RoastChartEvent = components[\"schemas\"][\"RoastChartEvent\"];\nexport type ReferenceProfile =\n components[\"schemas\"][\"ReferenceProfileResponse\"][\"data\"];\nexport type ReferenceProfileSummary =\n components[\"schemas\"][\"ReferenceProfileSummary\"];\nexport type ReferenceProfileChart =\n components[\"schemas\"][\"ReferenceProfileChart\"];\nexport type ReferenceProfileImportRequest = NonNullable<\n paths[\"/v1/reference-profiles/imports\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileFromRoastRequest = NonNullable<\n paths[\"/v1/reference-profiles/from-roast\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileUpdateRequest = NonNullable<\n paths[\"/v1/reference-profiles/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileGenerationRequest = NonNullable<\n paths[\"/v1/reference-profiles/{id}/revisions/{revisionId}/preview\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ProfileComparisonRequest = NonNullable<\n paths[\"/v1/profile-comparisons\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\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 /** Read older messages before a canonical sequence cursor. */\n history: (\n workspaceId: string,\n expectedResetEpoch: number,\n beforeSequence: number,\n messageLimit = 100,\n ) =>\n client.GET(\n \"/v1/conversation/workspaces/{workspaceId}/messages/history\",\n {\n params: {\n path: { workspaceId },\n query: { expectedResetEpoch, beforeSequence, messageLimit },\n },\n },\n ),\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 referenceProfiles: {\n /** List Studio reference profiles without mixing them into roast history. */\n list: (includeArchived = false) =>\n client.GET(\"/v1/reference-profiles\", {\n params: { query: { includeArchived } },\n }),\n get: (id: string) =>\n client.GET(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n }),\n chart: (id: string, revisionId: string) =>\n client.GET(\"/v1/reference-profiles/{id}/revisions/{revisionId}/chart\", {\n params: { path: { id, revisionId } },\n }),\n /** Preview explicit changes without saving or changing the parent. */\n preview: (\n id: string,\n revisionId: string,\n body: ReferenceProfileGenerationRequest,\n ) =>\n client.POST(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/preview\",\n {\n params: { path: { id, revisionId } },\n body,\n },\n ),\n /** Save an immutable generated reference with parent lineage. */\n generate: (\n id: string,\n revisionId: string,\n body: ReferenceProfileGenerationRequest,\n idempotencyKey: string,\n ) =>\n client.POST(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/generated\",\n {\n params: {\n path: { id, revisionId },\n header: { \"idempotency-key\": idempotencyKey },\n },\n body,\n },\n ),\n /** Retrieve only a saved unsigned generated background profile. */\n exportGenerated: (id: string, revisionId: string) =>\n client.GET(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/export\",\n {\n params: { path: { id, revisionId } },\n },\n ),\n import: (body: ReferenceProfileImportRequest, idempotencyKey: string) =>\n client.POST(\"/v1/reference-profiles/imports\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n fromRoast: (\n body: ReferenceProfileFromRoastRequest,\n idempotencyKey: string,\n ) =>\n client.POST(\"/v1/reference-profiles/from-roast\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n update: (id: string, body: ReferenceProfileUpdateRequest) =>\n client.PATCH(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n body,\n }),\n delete: (id: string) =>\n client.DELETE(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n }),\n linkRoast: (id: string, roastId: number) =>\n client.PUT(\"/v1/reference-profiles/{id}/roast-links/{roastId}\", {\n params: { path: { id, roastId } },\n }),\n unlinkRoast: (id: string, roastId: number) =>\n client.DELETE(\"/v1/reference-profiles/{id}/roast-links/{roastId}\", {\n params: { path: { id, roastId } },\n }),\n compare: (body: ProfileComparisonRequest) =>\n client.POST(\"/v1/profile-comparisons\", { body }),\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.46.0",
3
+ "version": "0.48.0",
4
4
  "description": "Typed client for the Purveyors Parchment API, generated from its OpenAPI spec.",
5
5
  "license": "MIT",
6
6
  "type": "module",