@purveyors/sdk 0.30.0 → 0.32.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 +747 -45
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2221,6 +2221,8 @@ interface paths {
|
|
|
2221
2221
|
scoreValueMax?: number | null;
|
|
2222
2222
|
pricePerLbMin?: number | null;
|
|
2223
2223
|
pricePerLbMax?: number | null;
|
|
2224
|
+
elevationMinMasl?: number | null;
|
|
2225
|
+
elevationMaxMasl?: number | null;
|
|
2224
2226
|
processing_base_method?: string;
|
|
2225
2227
|
fermentation_type?: string;
|
|
2226
2228
|
process_additive?: string;
|
|
@@ -2282,7 +2284,7 @@ interface paths {
|
|
|
2282
2284
|
};
|
|
2283
2285
|
/**
|
|
2284
2286
|
* Catalog filter metadata and counted facets
|
|
2285
|
-
* @description Returns access-aware catalog filter metadata. Values are computed after visibility and entitled content filters are applied; importer, elevation, appearance, and premium process metadata are included only for member sessions and paid API tiers. These catalog routes require a Supabase session JWT or Parchment API key. For entitlement-gated params, strict callers (non-demo API keys, bearer-session JWTs) receive a 401/403; lenient callers (first-party cookie-session and the configured public-demo API key) get the params stripped with a `meta.notices` entry. Send `Prefer: handling=strict` to opt into strict enforcement; `Prefer: handling=lenient` is honored only for callers already lenient-eligible and cannot downgrade a strict caller's enforcement.
|
|
2287
|
+
* @description Returns access-aware catalog filter metadata. Values are computed after visibility and entitled content filters are applied; importer, legacy elevation/grade, appearance, and premium process metadata are included only for member sessions and paid API tiers. Raw fine-grained geography remains display-only until canonical place-ID filtering lands. These catalog routes require a Supabase session JWT or Parchment API key. For entitlement-gated params, strict callers (non-demo API keys, bearer-session JWTs) receive a 401/403; lenient callers (first-party cookie-session and the configured public-demo API key) get the params stripped with a `meta.notices` entry. Send `Prefer: handling=strict` to opt into strict enforcement; `Prefer: handling=lenient` is honored only for callers already lenient-eligible and cannot downgrade a strict caller's enforcement.
|
|
2286
2288
|
*/
|
|
2287
2289
|
get: {
|
|
2288
2290
|
parameters: {
|
|
@@ -2312,6 +2314,8 @@ interface paths {
|
|
|
2312
2314
|
scoreValueMax?: number | null;
|
|
2313
2315
|
pricePerLbMin?: number | null;
|
|
2314
2316
|
pricePerLbMax?: number | null;
|
|
2317
|
+
elevationMinMasl?: number | null;
|
|
2318
|
+
elevationMaxMasl?: number | null;
|
|
2315
2319
|
processing_base_method?: string;
|
|
2316
2320
|
fermentation_type?: string;
|
|
2317
2321
|
process_additive?: string;
|
|
@@ -3177,6 +3181,72 @@ interface paths {
|
|
|
3177
3181
|
patch?: never;
|
|
3178
3182
|
trace?: never;
|
|
3179
3183
|
};
|
|
3184
|
+
"/v1/market/evidence": {
|
|
3185
|
+
parameters: {
|
|
3186
|
+
query?: never;
|
|
3187
|
+
header?: never;
|
|
3188
|
+
path?: never;
|
|
3189
|
+
cookie?: never;
|
|
3190
|
+
};
|
|
3191
|
+
/**
|
|
3192
|
+
* Entitled market and supplier evidence
|
|
3193
|
+
* @description Returns named public-catalog arrivals, delistings, comparable lots, and supplier health and price-range projections. Requires both Parchment Intelligence and catalog public-read access; direct anonymous and public-demo calls are rejected before catalog work.
|
|
3194
|
+
*/
|
|
3195
|
+
get: {
|
|
3196
|
+
parameters: {
|
|
3197
|
+
query?: never;
|
|
3198
|
+
header?: never;
|
|
3199
|
+
path?: never;
|
|
3200
|
+
cookie?: never;
|
|
3201
|
+
};
|
|
3202
|
+
requestBody?: never;
|
|
3203
|
+
responses: {
|
|
3204
|
+
/** @description Entitled public-catalog market evidence */
|
|
3205
|
+
200: {
|
|
3206
|
+
headers: {
|
|
3207
|
+
[name: string]: unknown;
|
|
3208
|
+
};
|
|
3209
|
+
content: {
|
|
3210
|
+
"application/json": components["schemas"]["MarketEvidenceResponse"];
|
|
3211
|
+
};
|
|
3212
|
+
};
|
|
3213
|
+
/** @description Authentication required */
|
|
3214
|
+
401: {
|
|
3215
|
+
headers: {
|
|
3216
|
+
[name: string]: unknown;
|
|
3217
|
+
};
|
|
3218
|
+
content: {
|
|
3219
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
3220
|
+
};
|
|
3221
|
+
};
|
|
3222
|
+
/** @description Insufficient entitlement (plan or role) */
|
|
3223
|
+
403: {
|
|
3224
|
+
headers: {
|
|
3225
|
+
[name: string]: unknown;
|
|
3226
|
+
};
|
|
3227
|
+
content: {
|
|
3228
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
3229
|
+
};
|
|
3230
|
+
};
|
|
3231
|
+
/** @description Market evidence capacity exceeded */
|
|
3232
|
+
503: {
|
|
3233
|
+
headers: {
|
|
3234
|
+
[name: string]: unknown;
|
|
3235
|
+
};
|
|
3236
|
+
content: {
|
|
3237
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
3238
|
+
};
|
|
3239
|
+
};
|
|
3240
|
+
};
|
|
3241
|
+
};
|
|
3242
|
+
put?: never;
|
|
3243
|
+
post?: never;
|
|
3244
|
+
delete?: never;
|
|
3245
|
+
options?: never;
|
|
3246
|
+
head?: never;
|
|
3247
|
+
patch?: never;
|
|
3248
|
+
trace?: never;
|
|
3249
|
+
};
|
|
3180
3250
|
"/v1/price-index/stats": {
|
|
3181
3251
|
parameters: {
|
|
3182
3252
|
query?: never;
|
|
@@ -4057,6 +4127,168 @@ interface paths {
|
|
|
4057
4127
|
patch?: never;
|
|
4058
4128
|
trace?: never;
|
|
4059
4129
|
};
|
|
4130
|
+
"/v1/inventory/share-grants": {
|
|
4131
|
+
parameters: {
|
|
4132
|
+
query?: never;
|
|
4133
|
+
header?: never;
|
|
4134
|
+
path?: never;
|
|
4135
|
+
cookie?: never;
|
|
4136
|
+
};
|
|
4137
|
+
get?: never;
|
|
4138
|
+
put?: never;
|
|
4139
|
+
/**
|
|
4140
|
+
* Create or replay an inventory share grant
|
|
4141
|
+
* @description Create a time-bounded bearer capability for all current owner inventory or one owned inventory row. Only entitled session principals may create grants; anonymous callers and API keys are rejected. The raw token appears only in the create response or an operation replay.
|
|
4142
|
+
*/
|
|
4143
|
+
post: {
|
|
4144
|
+
parameters: {
|
|
4145
|
+
query?: never;
|
|
4146
|
+
header?: never;
|
|
4147
|
+
path?: never;
|
|
4148
|
+
cookie?: never;
|
|
4149
|
+
};
|
|
4150
|
+
requestBody: {
|
|
4151
|
+
content: {
|
|
4152
|
+
"application/json": components["schemas"]["InventoryShareGrantCreateRequest"];
|
|
4153
|
+
};
|
|
4154
|
+
};
|
|
4155
|
+
responses: {
|
|
4156
|
+
/** @description The created grant, or the original same-operation replay */
|
|
4157
|
+
201: {
|
|
4158
|
+
headers: {
|
|
4159
|
+
/** @description Prevents caching of the raw bearer capability. */
|
|
4160
|
+
"Cache-Control"?: "no-store";
|
|
4161
|
+
[name: string]: unknown;
|
|
4162
|
+
};
|
|
4163
|
+
content: {
|
|
4164
|
+
"application/json": components["schemas"]["InventoryShareGrantCreateResponse"];
|
|
4165
|
+
};
|
|
4166
|
+
};
|
|
4167
|
+
/** @description Invalid grant request */
|
|
4168
|
+
400: {
|
|
4169
|
+
headers: {
|
|
4170
|
+
[name: string]: unknown;
|
|
4171
|
+
};
|
|
4172
|
+
content: {
|
|
4173
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
4174
|
+
};
|
|
4175
|
+
};
|
|
4176
|
+
/** @description Authentication required */
|
|
4177
|
+
401: {
|
|
4178
|
+
headers: {
|
|
4179
|
+
[name: string]: unknown;
|
|
4180
|
+
};
|
|
4181
|
+
content: {
|
|
4182
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
4183
|
+
};
|
|
4184
|
+
};
|
|
4185
|
+
/** @description Insufficient entitlement (plan or role) */
|
|
4186
|
+
403: {
|
|
4187
|
+
headers: {
|
|
4188
|
+
[name: string]: unknown;
|
|
4189
|
+
};
|
|
4190
|
+
content: {
|
|
4191
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
4192
|
+
};
|
|
4193
|
+
};
|
|
4194
|
+
/** @description The requested inventory row is not owned by the caller */
|
|
4195
|
+
404: {
|
|
4196
|
+
headers: {
|
|
4197
|
+
[name: string]: unknown;
|
|
4198
|
+
};
|
|
4199
|
+
content: {
|
|
4200
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
4201
|
+
};
|
|
4202
|
+
};
|
|
4203
|
+
/** @description Operation is in flight or bound to another payload */
|
|
4204
|
+
409: {
|
|
4205
|
+
headers: {
|
|
4206
|
+
[name: string]: unknown;
|
|
4207
|
+
};
|
|
4208
|
+
content: {
|
|
4209
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
4210
|
+
};
|
|
4211
|
+
};
|
|
4212
|
+
/** @description Inventory mutation rate limit exceeded */
|
|
4213
|
+
429: {
|
|
4214
|
+
headers: {
|
|
4215
|
+
[name: string]: unknown;
|
|
4216
|
+
};
|
|
4217
|
+
content: {
|
|
4218
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
4219
|
+
};
|
|
4220
|
+
};
|
|
4221
|
+
/** @description Replay state could not be completed */
|
|
4222
|
+
503: {
|
|
4223
|
+
headers: {
|
|
4224
|
+
[name: string]: unknown;
|
|
4225
|
+
};
|
|
4226
|
+
content: {
|
|
4227
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
4228
|
+
};
|
|
4229
|
+
};
|
|
4230
|
+
};
|
|
4231
|
+
};
|
|
4232
|
+
delete?: never;
|
|
4233
|
+
options?: never;
|
|
4234
|
+
head?: never;
|
|
4235
|
+
patch?: never;
|
|
4236
|
+
trace?: never;
|
|
4237
|
+
};
|
|
4238
|
+
"/v1/inventory/share-grants/redeem": {
|
|
4239
|
+
parameters: {
|
|
4240
|
+
query?: never;
|
|
4241
|
+
header?: never;
|
|
4242
|
+
path?: never;
|
|
4243
|
+
cookie?: never;
|
|
4244
|
+
};
|
|
4245
|
+
get?: never;
|
|
4246
|
+
put?: never;
|
|
4247
|
+
/**
|
|
4248
|
+
* Redeem an inventory share capability
|
|
4249
|
+
* @description Redeem a bearer capability without a user session. Every invalid, malformed, expired, inactive, unauthorized, deleted-owner, or entitlement-failure case returns the same empty response.
|
|
4250
|
+
*/
|
|
4251
|
+
post: {
|
|
4252
|
+
parameters: {
|
|
4253
|
+
query?: never;
|
|
4254
|
+
header?: never;
|
|
4255
|
+
path?: never;
|
|
4256
|
+
cookie?: never;
|
|
4257
|
+
};
|
|
4258
|
+
requestBody: {
|
|
4259
|
+
content: {
|
|
4260
|
+
"application/json": components["schemas"]["InventoryShareGrantRedeemRequest"];
|
|
4261
|
+
};
|
|
4262
|
+
};
|
|
4263
|
+
responses: {
|
|
4264
|
+
/** @description The shared inventory projection, or the indistinguishable empty result for an invalid capability */
|
|
4265
|
+
200: {
|
|
4266
|
+
headers: {
|
|
4267
|
+
/** @description Capability redemption responses are never cacheable. */
|
|
4268
|
+
"Cache-Control"?: "no-store";
|
|
4269
|
+
[name: string]: unknown;
|
|
4270
|
+
};
|
|
4271
|
+
content: {
|
|
4272
|
+
"application/json": components["schemas"]["InventoryShareGrantRedeemResponse"];
|
|
4273
|
+
};
|
|
4274
|
+
};
|
|
4275
|
+
/** @description Anonymous redemption rate limit exceeded */
|
|
4276
|
+
429: {
|
|
4277
|
+
headers: {
|
|
4278
|
+
[name: string]: unknown;
|
|
4279
|
+
};
|
|
4280
|
+
content: {
|
|
4281
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
4282
|
+
};
|
|
4283
|
+
};
|
|
4284
|
+
};
|
|
4285
|
+
};
|
|
4286
|
+
delete?: never;
|
|
4287
|
+
options?: never;
|
|
4288
|
+
head?: never;
|
|
4289
|
+
patch?: never;
|
|
4290
|
+
trace?: never;
|
|
4291
|
+
};
|
|
4060
4292
|
"/v1/inventory/manual-batches": {
|
|
4061
4293
|
parameters: {
|
|
4062
4294
|
query?: never;
|
|
@@ -6699,6 +6931,16 @@ interface components {
|
|
|
6699
6931
|
continent?: string | null;
|
|
6700
6932
|
country?: string | null;
|
|
6701
6933
|
region?: string | null;
|
|
6934
|
+
/** @description Raw source geography for display; not a canonical place identity or filter value */
|
|
6935
|
+
subregion?: string | null;
|
|
6936
|
+
/** @description Raw source geography for display; not a canonical place identity or filter value */
|
|
6937
|
+
locality?: string | null;
|
|
6938
|
+
/** @description Raw cultivation-site label for display; not a canonical place identity or filter value */
|
|
6939
|
+
site?: string | null;
|
|
6940
|
+
/** @description Reported minimum elevation in meters above sea level (member sessions and paid API tiers only) */
|
|
6941
|
+
elevation_min_masl?: number | null;
|
|
6942
|
+
/** @description Reported maximum elevation in meters above sea level (member sessions and paid API tiers only) */
|
|
6943
|
+
elevation_max_masl?: number | null;
|
|
6702
6944
|
processing?: string | null;
|
|
6703
6945
|
cultivar_detail?: string | null;
|
|
6704
6946
|
type?: string | null;
|
|
@@ -7473,6 +7715,8 @@ interface components {
|
|
|
7473
7715
|
rankSignalMagnitude: number;
|
|
7474
7716
|
evidence: components["schemas"]["MarketSignalEvidence"];
|
|
7475
7717
|
catalogUrl: string;
|
|
7718
|
+
name: string | null;
|
|
7719
|
+
coffee: components["schemas"]["CatalogItem"] | null;
|
|
7476
7720
|
};
|
|
7477
7721
|
MarketSignalsResponse: {
|
|
7478
7722
|
data: components["schemas"]["MarketSignalItem"][];
|
|
@@ -7536,8 +7780,10 @@ interface components {
|
|
|
7536
7780
|
source: {
|
|
7537
7781
|
/** @enum {string} */
|
|
7538
7782
|
table: "market_signals";
|
|
7539
|
-
/** @enum {
|
|
7540
|
-
|
|
7783
|
+
/** @enum {string} */
|
|
7784
|
+
catalogTable: "coffee_catalog";
|
|
7785
|
+
aggregateOnly: boolean;
|
|
7786
|
+
catalogHydrated: boolean;
|
|
7541
7787
|
};
|
|
7542
7788
|
};
|
|
7543
7789
|
};
|
|
@@ -7670,6 +7916,117 @@ interface components {
|
|
|
7670
7916
|
};
|
|
7671
7917
|
};
|
|
7672
7918
|
};
|
|
7919
|
+
MarketEvidenceResponse: {
|
|
7920
|
+
data: {
|
|
7921
|
+
referenceDate: string;
|
|
7922
|
+
recentArrivals: {
|
|
7923
|
+
catalogId: number;
|
|
7924
|
+
name: string | null;
|
|
7925
|
+
origin: string | null;
|
|
7926
|
+
process: string | null;
|
|
7927
|
+
pricePerLb: number | null;
|
|
7928
|
+
supplier: string;
|
|
7929
|
+
/** @enum {string} */
|
|
7930
|
+
market: "retail" | "wholesale";
|
|
7931
|
+
bagSize: string | null;
|
|
7932
|
+
stockedDate: string | null;
|
|
7933
|
+
unstockedDate: string | null;
|
|
7934
|
+
}[];
|
|
7935
|
+
recentDelistings: {
|
|
7936
|
+
catalogId: number;
|
|
7937
|
+
name: string | null;
|
|
7938
|
+
origin: string | null;
|
|
7939
|
+
process: string | null;
|
|
7940
|
+
pricePerLb: number | null;
|
|
7941
|
+
supplier: string;
|
|
7942
|
+
/** @enum {string} */
|
|
7943
|
+
market: "retail" | "wholesale";
|
|
7944
|
+
bagSize: string | null;
|
|
7945
|
+
stockedDate: string | null;
|
|
7946
|
+
unstockedDate: string | null;
|
|
7947
|
+
}[];
|
|
7948
|
+
comparisonLots: {
|
|
7949
|
+
catalogId: number;
|
|
7950
|
+
name: string | null;
|
|
7951
|
+
origin: string | null;
|
|
7952
|
+
process: string | null;
|
|
7953
|
+
pricePerLb: number | null;
|
|
7954
|
+
supplier: string;
|
|
7955
|
+
/** @enum {string} */
|
|
7956
|
+
market: "retail" | "wholesale";
|
|
7957
|
+
bagSize: string | null;
|
|
7958
|
+
stockedDate: string | null;
|
|
7959
|
+
unstockedDate: string | null;
|
|
7960
|
+
}[];
|
|
7961
|
+
supplierHealth: {
|
|
7962
|
+
supplier: string;
|
|
7963
|
+
stockedCount: number;
|
|
7964
|
+
originsCount: number;
|
|
7965
|
+
retailAverage: number | null;
|
|
7966
|
+
retailMin: number | null;
|
|
7967
|
+
retailMax: number | null;
|
|
7968
|
+
wholesaleCount: number;
|
|
7969
|
+
retailCount: number;
|
|
7970
|
+
}[];
|
|
7971
|
+
supplierPriceRanges: {
|
|
7972
|
+
supplier: string;
|
|
7973
|
+
/** @enum {string} */
|
|
7974
|
+
market: "retail" | "wholesale" | "all";
|
|
7975
|
+
lotCount: number;
|
|
7976
|
+
priceMin: number;
|
|
7977
|
+
priceMedian: number;
|
|
7978
|
+
priceMax: number;
|
|
7979
|
+
}[];
|
|
7980
|
+
};
|
|
7981
|
+
meta: {
|
|
7982
|
+
/** @enum {string} */
|
|
7983
|
+
resource: "market-evidence";
|
|
7984
|
+
/** @enum {string} */
|
|
7985
|
+
namespace: "/v1/market/evidence";
|
|
7986
|
+
/** @enum {string} */
|
|
7987
|
+
version: "v1";
|
|
7988
|
+
auth: {
|
|
7989
|
+
/** @enum {string} */
|
|
7990
|
+
kind: "anonymous" | "session" | "api-key";
|
|
7991
|
+
/** @enum {string|null} */
|
|
7992
|
+
role: "viewer" | "member" | "admin" | null;
|
|
7993
|
+
/** @enum {string|null} */
|
|
7994
|
+
apiPlan: "viewer" | "member" | "enterprise" | null;
|
|
7995
|
+
ppiAccess: boolean;
|
|
7996
|
+
};
|
|
7997
|
+
access: {
|
|
7998
|
+
/** @enum {boolean} */
|
|
7999
|
+
publicCatalogOnly: true;
|
|
8000
|
+
/** @enum {boolean} */
|
|
8001
|
+
intelligenceRequired: true;
|
|
8002
|
+
catalogRowsScanned: number;
|
|
8003
|
+
catalogRowLimit: number;
|
|
8004
|
+
comparisonTotalAvailable: number;
|
|
8005
|
+
comparisonLimited: boolean;
|
|
8006
|
+
supplierHealthTotalAvailable: number;
|
|
8007
|
+
supplierHealthLimited: boolean;
|
|
8008
|
+
};
|
|
8009
|
+
freshness: {
|
|
8010
|
+
/** Format: date-time */
|
|
8011
|
+
generatedAt: string;
|
|
8012
|
+
referenceDate: string;
|
|
8013
|
+
};
|
|
8014
|
+
thresholds: {
|
|
8015
|
+
/** @enum {number} */
|
|
8016
|
+
movementWindowDays: 30;
|
|
8017
|
+
recentLimitPerMarket: number;
|
|
8018
|
+
comparisonLimit: number;
|
|
8019
|
+
};
|
|
8020
|
+
source: {
|
|
8021
|
+
tables: [
|
|
8022
|
+
"market_daily_summary",
|
|
8023
|
+
"coffee_catalog"
|
|
8024
|
+
];
|
|
8025
|
+
/** @enum {boolean} */
|
|
8026
|
+
aggregateOnly: false;
|
|
8027
|
+
};
|
|
8028
|
+
};
|
|
8029
|
+
};
|
|
7673
8030
|
PriceMoveStatsItem: {
|
|
7674
8031
|
segment: {
|
|
7675
8032
|
origin: string | null;
|
|
@@ -8177,13 +8534,123 @@ interface components {
|
|
|
8177
8534
|
};
|
|
8178
8535
|
};
|
|
8179
8536
|
};
|
|
8180
|
-
InventoryCatalog: {
|
|
8181
|
-
id: number;
|
|
8537
|
+
InventoryCatalog: {
|
|
8538
|
+
id: number;
|
|
8539
|
+
name: string | null;
|
|
8540
|
+
score_value: number | null;
|
|
8541
|
+
arrival_date: string | null;
|
|
8542
|
+
continent: string | null;
|
|
8543
|
+
source: string | null;
|
|
8544
|
+
country: string | null;
|
|
8545
|
+
region: string | null;
|
|
8546
|
+
processing: string | null;
|
|
8547
|
+
drying_method: string | null;
|
|
8548
|
+
lot_size: string | null;
|
|
8549
|
+
bag_size: string | null;
|
|
8550
|
+
packaging: string | null;
|
|
8551
|
+
cultivar_detail: string | null;
|
|
8552
|
+
grade: string | null;
|
|
8553
|
+
appearance: string | null;
|
|
8554
|
+
roast_recs: string | null;
|
|
8555
|
+
type: string | null;
|
|
8556
|
+
cost_lb: number | null;
|
|
8557
|
+
price_per_lb: number | null;
|
|
8558
|
+
price_tiers: {
|
|
8559
|
+
min_lbs: number;
|
|
8560
|
+
price: number;
|
|
8561
|
+
}[] | null;
|
|
8562
|
+
description_short: string | null;
|
|
8563
|
+
description_long: string | null;
|
|
8564
|
+
farm_notes: string | null;
|
|
8565
|
+
link: string | null;
|
|
8566
|
+
stocked: boolean | null;
|
|
8567
|
+
cupping_notes: string | null;
|
|
8568
|
+
stocked_date: string | null;
|
|
8569
|
+
unstocked_date: string | null;
|
|
8570
|
+
ai_description: string | null;
|
|
8571
|
+
ai_tasting_notes?: unknown;
|
|
8572
|
+
public_coffee: boolean | null;
|
|
8573
|
+
wholesale: boolean | null;
|
|
8574
|
+
} | null;
|
|
8575
|
+
InventoryResource: {
|
|
8576
|
+
id: number;
|
|
8577
|
+
rank: number | null;
|
|
8578
|
+
notes: string | null;
|
|
8579
|
+
cupping_notes: string | number | boolean | unknown[] | {
|
|
8580
|
+
[key: string]: unknown;
|
|
8581
|
+
} | null;
|
|
8582
|
+
purchase_date: string | null;
|
|
8583
|
+
purchased_qty_lbs: number | null;
|
|
8584
|
+
bean_cost: number | null;
|
|
8585
|
+
tax_ship_cost: number | null;
|
|
8586
|
+
last_updated: string;
|
|
8587
|
+
user: string;
|
|
8588
|
+
catalog_id: number | null;
|
|
8589
|
+
stocked: boolean | null;
|
|
8590
|
+
coffee_catalog: components["schemas"]["InventoryCatalog"];
|
|
8591
|
+
};
|
|
8592
|
+
InventoryListResponse: {
|
|
8593
|
+
data: components["schemas"]["InventoryResource"][];
|
|
8594
|
+
meta: {
|
|
8595
|
+
/** @enum {string} */
|
|
8596
|
+
resource: "inventory";
|
|
8597
|
+
/** @enum {string} */
|
|
8598
|
+
namespace: "/v1/inventory";
|
|
8599
|
+
/** @enum {string} */
|
|
8600
|
+
version: "v1";
|
|
8601
|
+
auth: {
|
|
8602
|
+
/** @enum {string} */
|
|
8603
|
+
kind: "session" | "api-key";
|
|
8604
|
+
/** @enum {string|null} */
|
|
8605
|
+
role: "admin" | "member" | "viewer" | null;
|
|
8606
|
+
/** @enum {string|null} */
|
|
8607
|
+
apiPlan: "viewer" | "member" | "enterprise" | null;
|
|
8608
|
+
};
|
|
8609
|
+
};
|
|
8610
|
+
};
|
|
8611
|
+
InventoryShareGrantScope: {
|
|
8612
|
+
/** @enum {string} */
|
|
8613
|
+
type: "all";
|
|
8614
|
+
} | {
|
|
8615
|
+
/** @enum {string} */
|
|
8616
|
+
type: "inventory";
|
|
8617
|
+
inventoryId: number;
|
|
8618
|
+
};
|
|
8619
|
+
InventoryShareGrant: {
|
|
8620
|
+
/** Format: uuid */
|
|
8621
|
+
id: string;
|
|
8622
|
+
/** @description 256-bit bearer capability returned only when the grant is created or replayed with the same operation and payload. */
|
|
8623
|
+
token: string;
|
|
8624
|
+
scope: components["schemas"]["InventoryShareGrantScope"];
|
|
8625
|
+
/** Format: date-time */
|
|
8626
|
+
expiresAt: string;
|
|
8627
|
+
};
|
|
8628
|
+
InventoryShareGrantCreateResponse: {
|
|
8629
|
+
data: components["schemas"]["InventoryShareGrant"];
|
|
8630
|
+
meta: {
|
|
8631
|
+
/** @enum {string} */
|
|
8632
|
+
resource: "inventory-share-grant";
|
|
8633
|
+
/** @enum {string} */
|
|
8634
|
+
namespace: "/v1/inventory/share-grants";
|
|
8635
|
+
/** @enum {string} */
|
|
8636
|
+
version: "v1";
|
|
8637
|
+
};
|
|
8638
|
+
};
|
|
8639
|
+
InventoryShareGrantCreateRequest: {
|
|
8640
|
+
/**
|
|
8641
|
+
* Format: uuid
|
|
8642
|
+
* @description Stable owner-scoped operation identity. Reusing it with the same normalized request replays the original grant and token; changing the request conflicts.
|
|
8643
|
+
*/
|
|
8644
|
+
operationId: string;
|
|
8645
|
+
scope: components["schemas"]["InventoryShareGrantScope"];
|
|
8646
|
+
/** @description Grant lifetime in whole days (default 7, maximum 30). */
|
|
8647
|
+
expiresInDays?: number;
|
|
8648
|
+
};
|
|
8649
|
+
InventoryShareCatalog: {
|
|
8182
8650
|
name: string | null;
|
|
8183
8651
|
score_value: number | null;
|
|
8184
8652
|
arrival_date: string | null;
|
|
8185
8653
|
continent: string | null;
|
|
8186
|
-
source: string | null;
|
|
8187
8654
|
country: string | null;
|
|
8188
8655
|
region: string | null;
|
|
8189
8656
|
processing: string | null;
|
|
@@ -8196,26 +8663,35 @@ interface components {
|
|
|
8196
8663
|
appearance: string | null;
|
|
8197
8664
|
roast_recs: string | null;
|
|
8198
8665
|
type: string | null;
|
|
8199
|
-
cost_lb: number | null;
|
|
8200
|
-
price_per_lb: number | null;
|
|
8201
|
-
price_tiers: {
|
|
8202
|
-
min_lbs: number;
|
|
8203
|
-
price: number;
|
|
8204
|
-
}[] | null;
|
|
8205
8666
|
description_short: string | null;
|
|
8206
8667
|
description_long: string | null;
|
|
8207
8668
|
farm_notes: string | null;
|
|
8208
8669
|
link: string | null;
|
|
8670
|
+
cost_lb: number | null;
|
|
8671
|
+
price_per_lb: number | null;
|
|
8672
|
+
source: string | null;
|
|
8209
8673
|
stocked: boolean | null;
|
|
8210
8674
|
cupping_notes: string | null;
|
|
8211
8675
|
stocked_date: string | null;
|
|
8212
8676
|
unstocked_date: string | null;
|
|
8213
8677
|
ai_description: string | null;
|
|
8214
|
-
ai_tasting_notes
|
|
8678
|
+
ai_tasting_notes: string | null;
|
|
8215
8679
|
public_coffee: boolean | null;
|
|
8216
8680
|
wholesale: boolean | null;
|
|
8681
|
+
price_tiers: {
|
|
8682
|
+
min_lbs: number;
|
|
8683
|
+
price: number;
|
|
8684
|
+
}[] | null;
|
|
8217
8685
|
} | null;
|
|
8218
|
-
|
|
8686
|
+
InventoryShareRoastSummary: {
|
|
8687
|
+
oz_in: number | null;
|
|
8688
|
+
oz_out: number | null;
|
|
8689
|
+
weight_loss_percent: number | null;
|
|
8690
|
+
roast_id: number;
|
|
8691
|
+
batch_name: string | null;
|
|
8692
|
+
roast_date: string | null;
|
|
8693
|
+
};
|
|
8694
|
+
InventoryShareInventory: {
|
|
8219
8695
|
id: number;
|
|
8220
8696
|
rank: number | null;
|
|
8221
8697
|
notes: string | null;
|
|
@@ -8226,30 +8702,18 @@ interface components {
|
|
|
8226
8702
|
purchased_qty_lbs: number | null;
|
|
8227
8703
|
bean_cost: number | null;
|
|
8228
8704
|
tax_ship_cost: number | null;
|
|
8229
|
-
last_updated: string;
|
|
8230
|
-
user: string;
|
|
8705
|
+
last_updated: string | null;
|
|
8231
8706
|
catalog_id: number | null;
|
|
8232
8707
|
stocked: boolean | null;
|
|
8233
|
-
|
|
8708
|
+
ai_tasting_notes: string | null;
|
|
8709
|
+
coffee_catalog: components["schemas"]["InventoryShareCatalog"];
|
|
8710
|
+
roast_profiles: components["schemas"]["InventoryShareRoastSummary"][];
|
|
8234
8711
|
};
|
|
8235
|
-
|
|
8236
|
-
data: components["schemas"]["
|
|
8237
|
-
|
|
8238
|
-
|
|
8239
|
-
|
|
8240
|
-
/** @enum {string} */
|
|
8241
|
-
namespace: "/v1/inventory";
|
|
8242
|
-
/** @enum {string} */
|
|
8243
|
-
version: "v1";
|
|
8244
|
-
auth: {
|
|
8245
|
-
/** @enum {string} */
|
|
8246
|
-
kind: "session" | "api-key";
|
|
8247
|
-
/** @enum {string|null} */
|
|
8248
|
-
role: "admin" | "member" | "viewer" | null;
|
|
8249
|
-
/** @enum {string|null} */
|
|
8250
|
-
apiPlan: "viewer" | "member" | "enterprise" | null;
|
|
8251
|
-
};
|
|
8252
|
-
};
|
|
8712
|
+
InventoryShareGrantRedeemResponse: {
|
|
8713
|
+
data: components["schemas"]["InventoryShareInventory"][];
|
|
8714
|
+
};
|
|
8715
|
+
InventoryShareGrantRedeemRequest: {
|
|
8716
|
+
token: string;
|
|
8253
8717
|
};
|
|
8254
8718
|
ManualInventoryBatchResult: {
|
|
8255
8719
|
/** Format: uuid */
|
|
@@ -9299,6 +9763,18 @@ type TrackedLotMutation = components["schemas"]["TrackedLotMutationResponse"];
|
|
|
9299
9763
|
type InventoryListQuery = NonNullable<paths["/v1/inventory"]["get"]["parameters"]["query"]>;
|
|
9300
9764
|
/** Request body for {@link ParchmentClient.inventory.create}. */
|
|
9301
9765
|
type InventoryCreateRequest = NonNullable<paths["/v1/inventory"]["post"]["requestBody"]>["content"]["application/json"];
|
|
9766
|
+
/** Stable-operation request for {@link ParchmentClient.inventory.shareGrants.create}. */
|
|
9767
|
+
type InventoryShareGrantCreateRequest = NonNullable<paths["/v1/inventory/share-grants"]["post"]["requestBody"]>["content"]["application/json"];
|
|
9768
|
+
/** The one-time raw-token grant returned by create or same-operation replay. */
|
|
9769
|
+
type InventoryShareGrant = components["schemas"]["InventoryShareGrant"];
|
|
9770
|
+
/** Anonymous capability body for {@link ParchmentClient.inventory.shareGrants.redeem}. */
|
|
9771
|
+
type InventoryShareGrantRedeemRequest = NonNullable<paths["/v1/inventory/share-grants/redeem"]["post"]["requestBody"]>["content"]["application/json"];
|
|
9772
|
+
/** Safe legacy-oriented inventory row returned by capability redemption. */
|
|
9773
|
+
type InventoryShareInventory = components["schemas"]["InventoryShareInventory"];
|
|
9774
|
+
/** Catalog allowlist nested in a shared inventory row. */
|
|
9775
|
+
type InventoryShareCatalog = components["schemas"]["InventoryShareCatalog"];
|
|
9776
|
+
/** Six-field roast summary nested in member/admin shares. */
|
|
9777
|
+
type InventoryShareRoastSummary = components["schemas"]["InventoryShareRoastSummary"];
|
|
9302
9778
|
type CatalogInventoryCreateRequest = components["schemas"]["CatalogInventoryCreateRequest"];
|
|
9303
9779
|
type ManualInventoryCreateRequest = components["schemas"]["ManualInventoryCreateRequest"];
|
|
9304
9780
|
/** Request body for {@link ParchmentClient.inventory.createManualBatch}. */
|
|
@@ -10056,7 +10532,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
10056
10532
|
/** Accept, create, or recover one immutable deployed edition version. */
|
|
10057
10533
|
create: (body: MarketBriefDraftCreateRequest) => Promise<openapi_fetch.FetchResponse<{
|
|
10058
10534
|
parameters: {
|
|
10059
|
-
query
|
|
10535
|
+
query?: never;
|
|
10060
10536
|
header?: never;
|
|
10061
10537
|
path?: never;
|
|
10062
10538
|
cookie?: never;
|
|
@@ -10104,7 +10580,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
10104
10580
|
[name: string]: unknown;
|
|
10105
10581
|
};
|
|
10106
10582
|
content: {
|
|
10107
|
-
"application/json": components["schemas"]
|
|
10583
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
10108
10584
|
};
|
|
10109
10585
|
};
|
|
10110
10586
|
413: {
|
|
@@ -10584,12 +11060,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
10584
11060
|
[name: string]: unknown;
|
|
10585
11061
|
};
|
|
10586
11062
|
content: {
|
|
10587
|
-
"application/json":
|
|
10588
|
-
/**
|
|
10589
|
-
* Delete one of the caller's own inventory rows. Returns 409 if dependent
|
|
10590
|
-
* roast profiles or sales exist (no force-cascade).
|
|
10591
|
-
*/
|
|
10592
|
-
components["schemas"]["ErrorResponse"];
|
|
11063
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
10593
11064
|
};
|
|
10594
11065
|
};
|
|
10595
11066
|
404: {
|
|
@@ -10805,7 +11276,11 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
10805
11276
|
[name: string]: unknown;
|
|
10806
11277
|
};
|
|
10807
11278
|
content: {
|
|
10808
|
-
"application/json": components["schemas"]
|
|
11279
|
+
"application/json": components["schemas"] /**
|
|
11280
|
+
* Update one of the caller's own sales. The sales table carries no
|
|
11281
|
+
* `last_updated` column, so no If-Match optimistic concurrency is
|
|
11282
|
+
* offered.
|
|
11283
|
+
*/["ErrorResponse"];
|
|
10809
11284
|
};
|
|
10810
11285
|
};
|
|
10811
11286
|
};
|
|
@@ -11308,6 +11783,8 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
11308
11783
|
scoreValueMax?: number | null;
|
|
11309
11784
|
pricePerLbMin?: number | null;
|
|
11310
11785
|
pricePerLbMax?: number | null;
|
|
11786
|
+
elevationMinMasl?: number | null;
|
|
11787
|
+
elevationMaxMasl?: number | null;
|
|
11311
11788
|
processing_base_method?: string;
|
|
11312
11789
|
fermentation_type?: string;
|
|
11313
11790
|
process_additive?: string;
|
|
@@ -11381,6 +11858,8 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
11381
11858
|
scoreValueMax?: number | null;
|
|
11382
11859
|
pricePerLbMin?: number | null;
|
|
11383
11860
|
pricePerLbMax?: number | null;
|
|
11861
|
+
elevationMinMasl?: number | null;
|
|
11862
|
+
elevationMaxMasl?: number | null;
|
|
11384
11863
|
processing_base_method?: string;
|
|
11385
11864
|
fermentation_type?: string;
|
|
11386
11865
|
process_additive?: string;
|
|
@@ -11425,6 +11904,8 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
11425
11904
|
scoreValueMax?: number | null;
|
|
11426
11905
|
pricePerLbMin?: number | null;
|
|
11427
11906
|
pricePerLbMax?: number | null;
|
|
11907
|
+
elevationMinMasl?: number | null;
|
|
11908
|
+
elevationMaxMasl?: number | null;
|
|
11428
11909
|
processing_base_method?: string;
|
|
11429
11910
|
fermentation_type?: string;
|
|
11430
11911
|
process_additive?: string;
|
|
@@ -11493,6 +11974,8 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
11493
11974
|
scoreValueMax?: number | null;
|
|
11494
11975
|
pricePerLbMin?: number | null;
|
|
11495
11976
|
pricePerLbMax?: number | null;
|
|
11977
|
+
elevationMinMasl?: number | null;
|
|
11978
|
+
elevationMaxMasl?: number | null;
|
|
11496
11979
|
processing_base_method?: string;
|
|
11497
11980
|
fermentation_type?: string;
|
|
11498
11981
|
process_additive?: string;
|
|
@@ -12363,6 +12846,92 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
12363
12846
|
};
|
|
12364
12847
|
};
|
|
12365
12848
|
}> | undefined, `${string}/${string}`>>;
|
|
12849
|
+
/** Entitled named-lot and supplier evidence over the public catalog. */
|
|
12850
|
+
evidence: () => Promise<openapi_fetch.FetchResponse<{
|
|
12851
|
+
parameters: {
|
|
12852
|
+
query?: never;
|
|
12853
|
+
header?: never;
|
|
12854
|
+
path?: never;
|
|
12855
|
+
cookie?: never;
|
|
12856
|
+
};
|
|
12857
|
+
requestBody?: never;
|
|
12858
|
+
responses: {
|
|
12859
|
+
200: {
|
|
12860
|
+
headers: {
|
|
12861
|
+
[name: string]: unknown;
|
|
12862
|
+
};
|
|
12863
|
+
content: {
|
|
12864
|
+
"application/json": components["schemas"]["MarketEvidenceResponse"];
|
|
12865
|
+
};
|
|
12866
|
+
};
|
|
12867
|
+
401: {
|
|
12868
|
+
headers: {
|
|
12869
|
+
[name: string]: unknown;
|
|
12870
|
+
};
|
|
12871
|
+
content: {
|
|
12872
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
12873
|
+
};
|
|
12874
|
+
};
|
|
12875
|
+
403: {
|
|
12876
|
+
headers: {
|
|
12877
|
+
[name: string]: unknown;
|
|
12878
|
+
};
|
|
12879
|
+
content: {
|
|
12880
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
12881
|
+
};
|
|
12882
|
+
};
|
|
12883
|
+
503: {
|
|
12884
|
+
headers: {
|
|
12885
|
+
[name: string]: unknown;
|
|
12886
|
+
};
|
|
12887
|
+
content: {
|
|
12888
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
12889
|
+
};
|
|
12890
|
+
};
|
|
12891
|
+
};
|
|
12892
|
+
}, openapi_fetch.FetchOptions<{
|
|
12893
|
+
parameters: {
|
|
12894
|
+
query?: never;
|
|
12895
|
+
header?: never;
|
|
12896
|
+
path?: never;
|
|
12897
|
+
cookie?: never;
|
|
12898
|
+
};
|
|
12899
|
+
requestBody?: never;
|
|
12900
|
+
responses: {
|
|
12901
|
+
200: {
|
|
12902
|
+
headers: {
|
|
12903
|
+
[name: string]: unknown;
|
|
12904
|
+
};
|
|
12905
|
+
content: {
|
|
12906
|
+
"application/json": components["schemas"]["MarketEvidenceResponse"];
|
|
12907
|
+
};
|
|
12908
|
+
};
|
|
12909
|
+
401: {
|
|
12910
|
+
headers: {
|
|
12911
|
+
[name: string]: unknown;
|
|
12912
|
+
};
|
|
12913
|
+
content: {
|
|
12914
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
12915
|
+
};
|
|
12916
|
+
};
|
|
12917
|
+
403: {
|
|
12918
|
+
headers: {
|
|
12919
|
+
[name: string]: unknown;
|
|
12920
|
+
};
|
|
12921
|
+
content: {
|
|
12922
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
12923
|
+
};
|
|
12924
|
+
};
|
|
12925
|
+
503: {
|
|
12926
|
+
headers: {
|
|
12927
|
+
[name: string]: unknown;
|
|
12928
|
+
};
|
|
12929
|
+
content: {
|
|
12930
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
12931
|
+
};
|
|
12932
|
+
};
|
|
12933
|
+
};
|
|
12934
|
+
}> | undefined, `${string}/${string}`>>;
|
|
12366
12935
|
/** Actionable market value signals. */
|
|
12367
12936
|
signals: (query?: MarketSignalsQuery) => Promise<openapi_fetch.FetchResponse<{
|
|
12368
12937
|
parameters: {
|
|
@@ -13007,6 +13576,139 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
13007
13576
|
} | undefined;
|
|
13008
13577
|
};
|
|
13009
13578
|
}, `${string}/${string}`>>;
|
|
13579
|
+
shareGrants: {
|
|
13580
|
+
/**
|
|
13581
|
+
* Mint or replay a bounded cross-principal inventory capability. The
|
|
13582
|
+
* operation UUID is payload-bound and the raw token is returned only
|
|
13583
|
+
* by this response.
|
|
13584
|
+
*/
|
|
13585
|
+
create: (body: InventoryShareGrantCreateRequest) => Promise<openapi_fetch.FetchResponse<{
|
|
13586
|
+
parameters: {
|
|
13587
|
+
query?: never;
|
|
13588
|
+
header?: never;
|
|
13589
|
+
path?: never;
|
|
13590
|
+
cookie?: never;
|
|
13591
|
+
};
|
|
13592
|
+
requestBody: {
|
|
13593
|
+
content: {
|
|
13594
|
+
"application/json": components["schemas"]["InventoryShareGrantCreateRequest"];
|
|
13595
|
+
};
|
|
13596
|
+
};
|
|
13597
|
+
responses: {
|
|
13598
|
+
201: {
|
|
13599
|
+
headers: {
|
|
13600
|
+
"Cache-Control"?: "no-store";
|
|
13601
|
+
[name: string]: unknown;
|
|
13602
|
+
};
|
|
13603
|
+
content: {
|
|
13604
|
+
"application/json": components["schemas"]["InventoryShareGrantCreateResponse"];
|
|
13605
|
+
};
|
|
13606
|
+
};
|
|
13607
|
+
400: {
|
|
13608
|
+
headers: {
|
|
13609
|
+
[name: string]: unknown;
|
|
13610
|
+
};
|
|
13611
|
+
content: {
|
|
13612
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
13613
|
+
};
|
|
13614
|
+
};
|
|
13615
|
+
401: {
|
|
13616
|
+
headers: {
|
|
13617
|
+
[name: string]: unknown;
|
|
13618
|
+
};
|
|
13619
|
+
content: {
|
|
13620
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
13621
|
+
};
|
|
13622
|
+
};
|
|
13623
|
+
403: {
|
|
13624
|
+
headers: {
|
|
13625
|
+
[name: string]: unknown;
|
|
13626
|
+
};
|
|
13627
|
+
content: {
|
|
13628
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
13629
|
+
};
|
|
13630
|
+
};
|
|
13631
|
+
404: {
|
|
13632
|
+
headers: {
|
|
13633
|
+
[name: string]: unknown;
|
|
13634
|
+
};
|
|
13635
|
+
content: {
|
|
13636
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
13637
|
+
};
|
|
13638
|
+
};
|
|
13639
|
+
409: {
|
|
13640
|
+
headers: {
|
|
13641
|
+
[name: string]: unknown;
|
|
13642
|
+
};
|
|
13643
|
+
content: {
|
|
13644
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
13645
|
+
};
|
|
13646
|
+
};
|
|
13647
|
+
429: {
|
|
13648
|
+
headers: {
|
|
13649
|
+
[name: string]: unknown;
|
|
13650
|
+
};
|
|
13651
|
+
content: {
|
|
13652
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
13653
|
+
};
|
|
13654
|
+
};
|
|
13655
|
+
503: {
|
|
13656
|
+
headers: {
|
|
13657
|
+
[name: string]: unknown;
|
|
13658
|
+
};
|
|
13659
|
+
content: {
|
|
13660
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
13661
|
+
};
|
|
13662
|
+
};
|
|
13663
|
+
};
|
|
13664
|
+
}, {
|
|
13665
|
+
body: {
|
|
13666
|
+
operationId: string;
|
|
13667
|
+
scope: components["schemas"]["InventoryShareGrantScope"];
|
|
13668
|
+
expiresInDays?: number;
|
|
13669
|
+
};
|
|
13670
|
+
}, `${string}/${string}`>>;
|
|
13671
|
+
/**
|
|
13672
|
+
* Redeem a capability supplied in JSON (never in a URL). This helper
|
|
13673
|
+
* does not require the client to be configured with a bearer token.
|
|
13674
|
+
*/
|
|
13675
|
+
redeem: (body: InventoryShareGrantRedeemRequest) => Promise<openapi_fetch.FetchResponse<{
|
|
13676
|
+
parameters: {
|
|
13677
|
+
query?: never;
|
|
13678
|
+
header?: never;
|
|
13679
|
+
path?: never;
|
|
13680
|
+
cookie?: never;
|
|
13681
|
+
};
|
|
13682
|
+
requestBody: {
|
|
13683
|
+
content: {
|
|
13684
|
+
"application/json": components["schemas"]["InventoryShareGrantRedeemRequest"];
|
|
13685
|
+
};
|
|
13686
|
+
};
|
|
13687
|
+
responses: {
|
|
13688
|
+
200: {
|
|
13689
|
+
headers: {
|
|
13690
|
+
"Cache-Control"?: "no-store";
|
|
13691
|
+
[name: string]: unknown;
|
|
13692
|
+
};
|
|
13693
|
+
content: {
|
|
13694
|
+
"application/json": components["schemas"]["InventoryShareGrantRedeemResponse"];
|
|
13695
|
+
};
|
|
13696
|
+
};
|
|
13697
|
+
429: {
|
|
13698
|
+
headers: {
|
|
13699
|
+
[name: string]: unknown;
|
|
13700
|
+
};
|
|
13701
|
+
content: {
|
|
13702
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
13703
|
+
};
|
|
13704
|
+
};
|
|
13705
|
+
};
|
|
13706
|
+
}, {
|
|
13707
|
+
body: {
|
|
13708
|
+
token: string;
|
|
13709
|
+
};
|
|
13710
|
+
}, `${string}/${string}`>>;
|
|
13711
|
+
};
|
|
13010
13712
|
/**
|
|
13011
13713
|
* Create an owner inventory lot. Requires a session or an owner-bound API
|
|
13012
13714
|
* key carrying the exact `inventory:write` scope. Manual coffee creates
|
|
@@ -15441,4 +16143,4 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
15441
16143
|
};
|
|
15442
16144
|
type ParchmentClient = ReturnType<typeof createParchmentClient>;
|
|
15443
16145
|
|
|
15444
|
-
export { type AccountDeletionOperation, type AccountDeletionRequest, type BillingCheckoutCreateRequest, type BillingCheckoutSession, type BillingManualEntitlementsRequest, type BillingSubscriptionMutationRequest, type BillingSubscriptionOperation, type BriefMatchesQuery, type CatalogInventoryBatchLifecycle, type CatalogInventoryBatchReserveRequest, type CatalogInventoryBatchResult, type CatalogItem, type CatalogListQuery, type CatalogProofSummary, type CatalogSimilarQuery, type InventoryCreateRequest, type InventoryUpdateRequest, type MarketOverview, type MarketSignalsQuery, type MetadataIndexQuery, type OwnerApiUsage, type OwnerApiUsageQuery, type ParchmentClient, type ParchmentClientOptions, type PriceIndexQuery, type PriceIndexStatsQuery, type ProfitItem, type ProfitListQuery, type RoastChartDataQuery, type SalesCreateRequest, type SalesListQuery, type SalesUpdateRequest, type SourcingBriefCreateRequest, type TrackedLotMutation, type TrackedLotSummary, type TrackedLotsListQuery, type components, createParchmentClient, type paths };
|
|
16146
|
+
export { type AccountDeletionOperation, type AccountDeletionRequest, type BillingCheckoutCreateRequest, type BillingCheckoutSession, type BillingManualEntitlementsRequest, type BillingSubscriptionMutationRequest, type BillingSubscriptionOperation, type BriefMatchesQuery, type CatalogInventoryBatchLifecycle, type CatalogInventoryBatchReserveRequest, type CatalogInventoryBatchResult, type CatalogItem, type CatalogListQuery, type CatalogProofSummary, type CatalogSimilarQuery, type InventoryCreateRequest, type InventoryShareCatalog, type InventoryShareGrant, type InventoryShareGrantCreateRequest, type InventoryShareGrantRedeemRequest, type InventoryShareInventory, type InventoryShareRoastSummary, type InventoryUpdateRequest, type MarketOverview, type MarketSignalsQuery, type MetadataIndexQuery, type OwnerApiUsage, type OwnerApiUsageQuery, type ParchmentClient, type ParchmentClientOptions, type PriceIndexQuery, type PriceIndexStatsQuery, type ProfitItem, type ProfitListQuery, type RoastChartDataQuery, type SalesCreateRequest, type SalesListQuery, type SalesUpdateRequest, type SourcingBriefCreateRequest, type TrackedLotMutation, type TrackedLotSummary, type TrackedLotsListQuery, type components, createParchmentClient, type paths };
|
package/dist/index.js
CHANGED
|
@@ -167,6 +167,8 @@ function createParchmentClient(options) {
|
|
|
167
167
|
market: {
|
|
168
168
|
/** Aggregate daily changes, catalog coverage, movement, processing, and origin prices. */
|
|
169
169
|
overview: () => client.GET("/v1/market/overview"),
|
|
170
|
+
/** Entitled named-lot and supplier evidence over the public catalog. */
|
|
171
|
+
evidence: () => client.GET("/v1/market/evidence"),
|
|
170
172
|
/** Actionable market value signals. */
|
|
171
173
|
signals: (query) => client.GET("/v1/market/signals", { params: { query } }),
|
|
172
174
|
/** Metadata-trend index (process/disclosure/Purveyor Score over time). */
|
|
@@ -210,6 +212,19 @@ function createParchmentClient(options) {
|
|
|
210
212
|
inventory: {
|
|
211
213
|
/** List the caller's own green-coffee inventory (owner-scoped). */
|
|
212
214
|
list: (query) => client.GET("/v1/inventory", { params: { query } }),
|
|
215
|
+
shareGrants: {
|
|
216
|
+
/**
|
|
217
|
+
* Mint or replay a bounded cross-principal inventory capability. The
|
|
218
|
+
* operation UUID is payload-bound and the raw token is returned only
|
|
219
|
+
* by this response.
|
|
220
|
+
*/
|
|
221
|
+
create: (body) => client.POST("/v1/inventory/share-grants", { body }),
|
|
222
|
+
/**
|
|
223
|
+
* Redeem a capability supplied in JSON (never in a URL). This helper
|
|
224
|
+
* does not require the client to be configured with a bearer token.
|
|
225
|
+
*/
|
|
226
|
+
redeem: (body) => client.POST("/v1/inventory/share-grants/redeem", { body })
|
|
227
|
+
},
|
|
213
228
|
/**
|
|
214
229
|
* Create an owner inventory lot. Requires a session or an owner-bound API
|
|
215
230
|
* key carrying the exact `inventory:write` scope. Manual coffee creates
|
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/** 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/** 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/** 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\"];\ntype CatalogInventoryCreateRequest =\n components[\"schemas\"][\"CatalogInventoryCreateRequest\"];\ntype ManualInventoryCreateRequest =\n components[\"schemas\"][\"ManualInventoryCreateRequest\"];\n/** Request body for {@link ParchmentClient.inventory.createManualBatch}. */\nexport type ManualInventoryBatchCreateRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for reserving durable server-owned manual-batch intent. */\nexport type ManualInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Complete canonical intent accepted by the catalog-batch reservation lane. */\nexport type CatalogInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/catalog-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable catalog-batch state returned by reserve, commit, and status. */\nexport type CatalogInventoryBatchLifecycle =\n components[\"schemas\"][\"CatalogInventoryBatchLifecycle\"];\n/** Identity-only terminal result; catalog resources remain a separate read. */\nexport type CatalogInventoryBatchResult =\n components[\"schemas\"][\"CatalogInventoryBatchResult\"];\n/** Request body for {@link ParchmentClient.inventory.update}. */\nexport type InventoryUpdateRequest = NonNullable<\n paths[\"/v1/inventory/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.roasts.list}. */\nexport type RoastListQuery = NonNullable<\n paths[\"/v1/roasts\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.get}. */\nexport type RoastGetQuery = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartDataQuery = NonNullable<\n paths[\"/v1/roasts/{id}/chart-data\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.roasts.classify}. */\nexport type RoastClassificationRequest = NonNullable<\n paths[\"/v1/roasts/classify\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.create}. */\nexport type RoastCreateRequest = NonNullable<\n paths[\"/v1/roasts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.update}. */\nexport type RoastUpdateRequest = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"patch\"][\"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\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 /**\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 /** 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 /** 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 the caller's complete tracked catalog-id set and bounded recent\n * summaries enriched with live catalog state.\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 inventory: {\n /** List the caller's own green-coffee inventory (owner-scoped). */\n list: (query?: InventoryListQuery) =>\n client.GET(\"/v1/inventory\", { params: { query } }),\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. Pass `idempotencyKey` to make retries safe.\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 * 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 /**\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. Pass\n * `idempotencyKey` to make retries safe.\n */\n import: (\n body: RoastImportRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts/imports\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Replace the Artisan import data on one of the caller's existing roasts,\n * re-deriving its curve, events, and computed metrics while preserving the\n * roast's identity. Pass `ifMatch` (the roast's `last_updated`) to enable\n * optimistic concurrency (409 on mismatch).\n */\n replaceArtisanImport: (\n id: number,\n body: RoastArtisanImportReplaceRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/artisan-import\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Clear import-derived curve, events, metrics, and provenance data from\n * one of the caller's existing roasts without deleting the roast profile.\n */\n clearArtisanImport: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}/artisan-import\", {\n params: { path: { id } },\n }),\n },\n sales: {\n /** List the caller's own sales (owner-scoped). */\n list: (query?: SalesListQuery) =>\n client.GET(\"/v1/sales\", { params: { query } }),\n /**\n * Record a sale against one of the caller's own green-coffee inventory\n * lots. Requires a session or an owner-bound API key carrying the exact\n * `sales:write` scope. Pass `idempotencyKey` to make retries safe: the\n * same key replays the original result, and a concurrent duplicate gets\n * 409 while the first is in flight.\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/** 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/** Query parameters for {@link ParchmentClient.inventory.list}. */\nexport type InventoryListQuery = NonNullable<\n paths[\"/v1/inventory\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.inventory.create}. */\nexport type InventoryCreateRequest = NonNullable<\n paths[\"/v1/inventory\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Stable-operation request for {@link ParchmentClient.inventory.shareGrants.create}. */\nexport type InventoryShareGrantCreateRequest = NonNullable<\n paths[\"/v1/inventory/share-grants\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** The one-time raw-token grant returned by create or same-operation replay. */\nexport type InventoryShareGrant = components[\"schemas\"][\"InventoryShareGrant\"];\n/** Anonymous capability body for {@link ParchmentClient.inventory.shareGrants.redeem}. */\nexport type InventoryShareGrantRedeemRequest = NonNullable<\n paths[\"/v1/inventory/share-grants/redeem\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Safe legacy-oriented inventory row returned by capability redemption. */\nexport type InventoryShareInventory =\n components[\"schemas\"][\"InventoryShareInventory\"];\n/** Catalog allowlist nested in a shared inventory row. */\nexport type InventoryShareCatalog =\n components[\"schemas\"][\"InventoryShareCatalog\"];\n/** Six-field roast summary nested in member/admin shares. */\nexport type InventoryShareRoastSummary =\n components[\"schemas\"][\"InventoryShareRoastSummary\"];\ntype CatalogInventoryCreateRequest =\n components[\"schemas\"][\"CatalogInventoryCreateRequest\"];\ntype ManualInventoryCreateRequest =\n components[\"schemas\"][\"ManualInventoryCreateRequest\"];\n/** Request body for {@link ParchmentClient.inventory.createManualBatch}. */\nexport type ManualInventoryBatchCreateRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for reserving durable server-owned manual-batch intent. */\nexport type ManualInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Complete canonical intent accepted by the catalog-batch reservation lane. */\nexport type CatalogInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/catalog-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable catalog-batch state returned by reserve, commit, and status. */\nexport type CatalogInventoryBatchLifecycle =\n components[\"schemas\"][\"CatalogInventoryBatchLifecycle\"];\n/** Identity-only terminal result; catalog resources remain a separate read. */\nexport type CatalogInventoryBatchResult =\n components[\"schemas\"][\"CatalogInventoryBatchResult\"];\n/** Request body for {@link ParchmentClient.inventory.update}. */\nexport type InventoryUpdateRequest = NonNullable<\n paths[\"/v1/inventory/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.roasts.list}. */\nexport type RoastListQuery = NonNullable<\n paths[\"/v1/roasts\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.get}. */\nexport type RoastGetQuery = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartDataQuery = NonNullable<\n paths[\"/v1/roasts/{id}/chart-data\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.roasts.classify}. */\nexport type RoastClassificationRequest = NonNullable<\n paths[\"/v1/roasts/classify\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.create}. */\nexport type RoastCreateRequest = NonNullable<\n paths[\"/v1/roasts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.update}. */\nexport type RoastUpdateRequest = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"patch\"][\"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\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 /**\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 /** 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 the caller's complete tracked catalog-id set and bounded recent\n * summaries enriched with live catalog state.\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 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. Pass `idempotencyKey` to make retries safe.\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 * 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 /**\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. Pass\n * `idempotencyKey` to make retries safe.\n */\n import: (\n body: RoastImportRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts/imports\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Replace the Artisan import data on one of the caller's existing roasts,\n * re-deriving its curve, events, and computed metrics while preserving the\n * roast's identity. Pass `ifMatch` (the roast's `last_updated`) to enable\n * optimistic concurrency (409 on mismatch).\n */\n replaceArtisanImport: (\n id: number,\n body: RoastArtisanImportReplaceRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/artisan-import\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Clear import-derived curve, events, metrics, and provenance data from\n * one of the caller's existing roasts without deleting the roast profile.\n */\n clearArtisanImport: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}/artisan-import\", {\n params: { path: { id } },\n }),\n },\n sales: {\n /** List the caller's own sales (owner-scoped). */\n list: (query?: SalesListQuery) =>\n client.GET(\"/v1/sales\", { params: { query } }),\n /**\n * Record a sale against one of the caller's own green-coffee inventory\n * lots. Requires a session or an owner-bound API key carrying the exact\n * `sales:write` scope. Pass `idempotencyKey` to make retries safe: the\n * same key replays the original result, and a concurrent duplicate gets\n * 409 while the first is in flight.\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"]}
|