@purveyors/sdk 0.5.0 → 0.7.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 +892 -22
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1271,6 +1271,205 @@ interface paths {
|
|
|
1271
1271
|
patch?: never;
|
|
1272
1272
|
trace?: never;
|
|
1273
1273
|
};
|
|
1274
|
+
"/v1/market/signals": {
|
|
1275
|
+
parameters: {
|
|
1276
|
+
query?: never;
|
|
1277
|
+
header?: never;
|
|
1278
|
+
path?: never;
|
|
1279
|
+
cookie?: never;
|
|
1280
|
+
};
|
|
1281
|
+
/**
|
|
1282
|
+
* Market value signals (actionable buy signals)
|
|
1283
|
+
* @description Daily actionable value signals over market_signals. The unfiltered summary slice is public; item rows and filtered queries require Parchment Intelligence (ppiAccess).
|
|
1284
|
+
*/
|
|
1285
|
+
get: {
|
|
1286
|
+
parameters: {
|
|
1287
|
+
query?: {
|
|
1288
|
+
page?: number;
|
|
1289
|
+
limit?: number;
|
|
1290
|
+
summary?: "true" | "false";
|
|
1291
|
+
type?: string | string[];
|
|
1292
|
+
origin?: string;
|
|
1293
|
+
process?: string;
|
|
1294
|
+
market?: "retail" | "wholesale" | "all";
|
|
1295
|
+
min_discount_pct?: number | null;
|
|
1296
|
+
min_score?: number | null;
|
|
1297
|
+
window?: "7d" | "30d";
|
|
1298
|
+
};
|
|
1299
|
+
header?: never;
|
|
1300
|
+
path?: never;
|
|
1301
|
+
cookie?: never;
|
|
1302
|
+
};
|
|
1303
|
+
requestBody?: never;
|
|
1304
|
+
responses: {
|
|
1305
|
+
/** @description A page of market value signals (or a public summary) */
|
|
1306
|
+
200: {
|
|
1307
|
+
headers: {
|
|
1308
|
+
[name: string]: unknown;
|
|
1309
|
+
};
|
|
1310
|
+
content: {
|
|
1311
|
+
"application/json": components["schemas"]["MarketSignalsResponse"];
|
|
1312
|
+
};
|
|
1313
|
+
};
|
|
1314
|
+
/** @description Authentication required */
|
|
1315
|
+
401: {
|
|
1316
|
+
headers: {
|
|
1317
|
+
[name: string]: unknown;
|
|
1318
|
+
};
|
|
1319
|
+
content: {
|
|
1320
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1321
|
+
};
|
|
1322
|
+
};
|
|
1323
|
+
/** @description Insufficient entitlement (plan or role) */
|
|
1324
|
+
403: {
|
|
1325
|
+
headers: {
|
|
1326
|
+
[name: string]: unknown;
|
|
1327
|
+
};
|
|
1328
|
+
content: {
|
|
1329
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1330
|
+
};
|
|
1331
|
+
};
|
|
1332
|
+
};
|
|
1333
|
+
};
|
|
1334
|
+
put?: never;
|
|
1335
|
+
post?: never;
|
|
1336
|
+
delete?: never;
|
|
1337
|
+
options?: never;
|
|
1338
|
+
head?: never;
|
|
1339
|
+
patch?: never;
|
|
1340
|
+
trace?: never;
|
|
1341
|
+
};
|
|
1342
|
+
"/v1/price-index/stats": {
|
|
1343
|
+
parameters: {
|
|
1344
|
+
query?: never;
|
|
1345
|
+
header?: never;
|
|
1346
|
+
path?: never;
|
|
1347
|
+
cookie?: never;
|
|
1348
|
+
};
|
|
1349
|
+
/**
|
|
1350
|
+
* Price movement significance stats
|
|
1351
|
+
* @description Precomputed movement-significance stats over price_index_move_stats. The unfiltered retail slice is public; origin/process/wholesale filters require Parchment Intelligence (ppiAccess).
|
|
1352
|
+
*/
|
|
1353
|
+
get: {
|
|
1354
|
+
parameters: {
|
|
1355
|
+
query?: {
|
|
1356
|
+
page?: number;
|
|
1357
|
+
limit?: number;
|
|
1358
|
+
origin?: string;
|
|
1359
|
+
process?: string;
|
|
1360
|
+
market?: "retail" | "wholesale" | "all";
|
|
1361
|
+
window?: "7d" | "30d";
|
|
1362
|
+
baseline_weeks?: number;
|
|
1363
|
+
};
|
|
1364
|
+
header?: never;
|
|
1365
|
+
path?: never;
|
|
1366
|
+
cookie?: never;
|
|
1367
|
+
};
|
|
1368
|
+
requestBody?: never;
|
|
1369
|
+
responses: {
|
|
1370
|
+
/** @description A page of price movement significance stats */
|
|
1371
|
+
200: {
|
|
1372
|
+
headers: {
|
|
1373
|
+
[name: string]: unknown;
|
|
1374
|
+
};
|
|
1375
|
+
content: {
|
|
1376
|
+
"application/json": components["schemas"]["PriceIndexStatsResponse"];
|
|
1377
|
+
};
|
|
1378
|
+
};
|
|
1379
|
+
/** @description Authentication required */
|
|
1380
|
+
401: {
|
|
1381
|
+
headers: {
|
|
1382
|
+
[name: string]: unknown;
|
|
1383
|
+
};
|
|
1384
|
+
content: {
|
|
1385
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1386
|
+
};
|
|
1387
|
+
};
|
|
1388
|
+
/** @description Insufficient entitlement (plan or role) */
|
|
1389
|
+
403: {
|
|
1390
|
+
headers: {
|
|
1391
|
+
[name: string]: unknown;
|
|
1392
|
+
};
|
|
1393
|
+
content: {
|
|
1394
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1395
|
+
};
|
|
1396
|
+
};
|
|
1397
|
+
};
|
|
1398
|
+
};
|
|
1399
|
+
put?: never;
|
|
1400
|
+
post?: never;
|
|
1401
|
+
delete?: never;
|
|
1402
|
+
options?: never;
|
|
1403
|
+
head?: never;
|
|
1404
|
+
patch?: never;
|
|
1405
|
+
trace?: never;
|
|
1406
|
+
};
|
|
1407
|
+
"/v1/market/metadata-index": {
|
|
1408
|
+
parameters: {
|
|
1409
|
+
query?: never;
|
|
1410
|
+
header?: never;
|
|
1411
|
+
path?: never;
|
|
1412
|
+
cookie?: never;
|
|
1413
|
+
};
|
|
1414
|
+
/**
|
|
1415
|
+
* Metadata-trend index (process/disclosure/score over time)
|
|
1416
|
+
* @description Metadata-trend index over metadata_index_snapshots. The process/retail/month slice is public; other dimensions, origins, and grains require Parchment Intelligence (ppiAccess).
|
|
1417
|
+
*/
|
|
1418
|
+
get: {
|
|
1419
|
+
parameters: {
|
|
1420
|
+
query?: {
|
|
1421
|
+
page?: number;
|
|
1422
|
+
limit?: number;
|
|
1423
|
+
dimension?: "process" | "disclosure" | "score";
|
|
1424
|
+
origin?: string;
|
|
1425
|
+
market?: "retail" | "wholesale" | "all";
|
|
1426
|
+
grain?: "week" | "month";
|
|
1427
|
+
from?: string;
|
|
1428
|
+
to?: string;
|
|
1429
|
+
};
|
|
1430
|
+
header?: never;
|
|
1431
|
+
path?: never;
|
|
1432
|
+
cookie?: never;
|
|
1433
|
+
};
|
|
1434
|
+
requestBody?: never;
|
|
1435
|
+
responses: {
|
|
1436
|
+
/** @description A metadata-trend series */
|
|
1437
|
+
200: {
|
|
1438
|
+
headers: {
|
|
1439
|
+
[name: string]: unknown;
|
|
1440
|
+
};
|
|
1441
|
+
content: {
|
|
1442
|
+
"application/json": components["schemas"]["MetadataIndexResponse"];
|
|
1443
|
+
};
|
|
1444
|
+
};
|
|
1445
|
+
/** @description Authentication required */
|
|
1446
|
+
401: {
|
|
1447
|
+
headers: {
|
|
1448
|
+
[name: string]: unknown;
|
|
1449
|
+
};
|
|
1450
|
+
content: {
|
|
1451
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1452
|
+
};
|
|
1453
|
+
};
|
|
1454
|
+
/** @description Insufficient entitlement (plan or role) */
|
|
1455
|
+
403: {
|
|
1456
|
+
headers: {
|
|
1457
|
+
[name: string]: unknown;
|
|
1458
|
+
};
|
|
1459
|
+
content: {
|
|
1460
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
1461
|
+
};
|
|
1462
|
+
};
|
|
1463
|
+
};
|
|
1464
|
+
};
|
|
1465
|
+
put?: never;
|
|
1466
|
+
post?: never;
|
|
1467
|
+
delete?: never;
|
|
1468
|
+
options?: never;
|
|
1469
|
+
head?: never;
|
|
1470
|
+
patch?: never;
|
|
1471
|
+
trace?: never;
|
|
1472
|
+
};
|
|
1274
1473
|
"/v1/catalog/{id}/similar": {
|
|
1275
1474
|
parameters: {
|
|
1276
1475
|
query?: never;
|
|
@@ -2601,7 +2800,77 @@ interface paths {
|
|
|
2601
2800
|
};
|
|
2602
2801
|
};
|
|
2603
2802
|
post?: never;
|
|
2604
|
-
|
|
2803
|
+
/**
|
|
2804
|
+
* Clear a roast's Artisan import
|
|
2805
|
+
* @description Remove import-derived temperature samples, event markers, and artisan_import_log rows from one of the caller's existing roasts without deleting the roast profile. Import-derived profile metrics are reset to manual/null values. Requires an authenticated session, or an owner-bound API key carrying the exact roast:write scope.
|
|
2806
|
+
*/
|
|
2807
|
+
delete: {
|
|
2808
|
+
parameters: {
|
|
2809
|
+
query?: never;
|
|
2810
|
+
header?: never;
|
|
2811
|
+
path: {
|
|
2812
|
+
id: number;
|
|
2813
|
+
};
|
|
2814
|
+
cookie?: never;
|
|
2815
|
+
};
|
|
2816
|
+
requestBody?: never;
|
|
2817
|
+
responses: {
|
|
2818
|
+
/** @description The cleared roast id plus deleted row counts */
|
|
2819
|
+
200: {
|
|
2820
|
+
headers: {
|
|
2821
|
+
[name: string]: unknown;
|
|
2822
|
+
};
|
|
2823
|
+
content: {
|
|
2824
|
+
"application/json": components["schemas"]["RoastArtisanImportClearResponse"];
|
|
2825
|
+
};
|
|
2826
|
+
};
|
|
2827
|
+
/** @description Authentication required */
|
|
2828
|
+
401: {
|
|
2829
|
+
headers: {
|
|
2830
|
+
[name: string]: unknown;
|
|
2831
|
+
};
|
|
2832
|
+
content: {
|
|
2833
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2834
|
+
};
|
|
2835
|
+
};
|
|
2836
|
+
/** @description Insufficient entitlement (plan or role) */
|
|
2837
|
+
403: {
|
|
2838
|
+
headers: {
|
|
2839
|
+
[name: string]: unknown;
|
|
2840
|
+
};
|
|
2841
|
+
content: {
|
|
2842
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2843
|
+
};
|
|
2844
|
+
};
|
|
2845
|
+
/** @description No such roast profile owned by the caller */
|
|
2846
|
+
404: {
|
|
2847
|
+
headers: {
|
|
2848
|
+
[name: string]: unknown;
|
|
2849
|
+
};
|
|
2850
|
+
content: {
|
|
2851
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2852
|
+
};
|
|
2853
|
+
};
|
|
2854
|
+
/** @description Per-user mutation throttle exceeded; retry after a short wait */
|
|
2855
|
+
429: {
|
|
2856
|
+
headers: {
|
|
2857
|
+
[name: string]: unknown;
|
|
2858
|
+
};
|
|
2859
|
+
content: {
|
|
2860
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2861
|
+
};
|
|
2862
|
+
};
|
|
2863
|
+
/** @description Roast writes are not enabled in this environment */
|
|
2864
|
+
503: {
|
|
2865
|
+
headers: {
|
|
2866
|
+
[name: string]: unknown;
|
|
2867
|
+
};
|
|
2868
|
+
content: {
|
|
2869
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2870
|
+
};
|
|
2871
|
+
};
|
|
2872
|
+
};
|
|
2873
|
+
};
|
|
2605
2874
|
options?: never;
|
|
2606
2875
|
head?: never;
|
|
2607
2876
|
patch?: never;
|
|
@@ -2778,6 +3047,7 @@ interface components {
|
|
|
2778
3047
|
health: string;
|
|
2779
3048
|
docs: string;
|
|
2780
3049
|
openapi: string;
|
|
3050
|
+
llms: string;
|
|
2781
3051
|
};
|
|
2782
3052
|
MeResponse: {
|
|
2783
3053
|
authenticated: boolean;
|
|
@@ -2926,6 +3196,14 @@ interface components {
|
|
|
2926
3196
|
limited: boolean;
|
|
2927
3197
|
totalAvailable: number;
|
|
2928
3198
|
};
|
|
3199
|
+
/** @description Freshness contract. `generatedAt` (ISO 8601) is the authoritative time this body was generated. `cacheStatus`/`ttlSeconds` are the resolved cache policy (ttl 0 for private/no-store); ttl is policy, not a promise — stale-while-revalidate may serve an older body, so trust `generatedAt` for actual age. */
|
|
3200
|
+
freshness: {
|
|
3201
|
+
/** Format: date-time */
|
|
3202
|
+
generatedAt: string;
|
|
3203
|
+
/** @enum {string} */
|
|
3204
|
+
cacheStatus: "public" | "private";
|
|
3205
|
+
ttlSeconds: number;
|
|
3206
|
+
};
|
|
2929
3207
|
/** @description Present only when requested filters/sorts were stripped because the caller lacked the capability. The request still returns 200 with the entitled subset applied. */
|
|
2930
3208
|
notices?: {
|
|
2931
3209
|
status: 401 | 403;
|
|
@@ -3045,6 +3323,14 @@ interface components {
|
|
|
3045
3323
|
stocked: boolean | null;
|
|
3046
3324
|
premiumMetadata: boolean;
|
|
3047
3325
|
};
|
|
3326
|
+
/** @description Freshness contract. `generatedAt` (ISO 8601) is the authoritative time this body was generated. `cacheStatus`/`ttlSeconds` are the resolved cache policy (ttl 0 for private/no-store); ttl is policy, not a promise — stale-while-revalidate may serve an older body, so trust `generatedAt` for actual age. */
|
|
3327
|
+
freshness: {
|
|
3328
|
+
/** Format: date-time */
|
|
3329
|
+
generatedAt: string;
|
|
3330
|
+
/** @enum {string} */
|
|
3331
|
+
cacheStatus: "public" | "private";
|
|
3332
|
+
ttlSeconds: number;
|
|
3333
|
+
};
|
|
3048
3334
|
notices?: {
|
|
3049
3335
|
status: 401 | 403;
|
|
3050
3336
|
/** @enum {string} */
|
|
@@ -3088,6 +3374,14 @@ interface components {
|
|
|
3088
3374
|
scope: "retail" | "wholesale" | "all";
|
|
3089
3375
|
totalAvailable: number;
|
|
3090
3376
|
};
|
|
3377
|
+
/** @description Freshness contract. `generatedAt` (ISO 8601) is the authoritative time this body was generated. `cacheStatus`/`ttlSeconds` are the resolved cache policy (ttl 0 for private/no-store); ttl is policy, not a promise — stale-while-revalidate may serve an older body, so trust `generatedAt` for actual age. */
|
|
3378
|
+
freshness: {
|
|
3379
|
+
/** Format: date-time */
|
|
3380
|
+
generatedAt: string;
|
|
3381
|
+
/** @enum {string} */
|
|
3382
|
+
cacheStatus: "public" | "private";
|
|
3383
|
+
ttlSeconds: number;
|
|
3384
|
+
};
|
|
3091
3385
|
};
|
|
3092
3386
|
};
|
|
3093
3387
|
CatalogStatsResponse: {
|
|
@@ -3127,6 +3421,14 @@ interface components {
|
|
|
3127
3421
|
stocked: boolean | null;
|
|
3128
3422
|
totalAvailable: number;
|
|
3129
3423
|
};
|
|
3424
|
+
/** @description Freshness contract. `generatedAt` (ISO 8601) is the authoritative time this body was generated. `cacheStatus`/`ttlSeconds` are the resolved cache policy (ttl 0 for private/no-store); ttl is policy, not a promise — stale-while-revalidate may serve an older body, so trust `generatedAt` for actual age. */
|
|
3425
|
+
freshness: {
|
|
3426
|
+
/** Format: date-time */
|
|
3427
|
+
generatedAt: string;
|
|
3428
|
+
/** @enum {string} */
|
|
3429
|
+
cacheStatus: "public" | "private";
|
|
3430
|
+
ttlSeconds: number;
|
|
3431
|
+
};
|
|
3130
3432
|
};
|
|
3131
3433
|
};
|
|
3132
3434
|
CatalogRankedItem: {
|
|
@@ -3371,6 +3673,14 @@ interface components {
|
|
|
3371
3673
|
sampled: number;
|
|
3372
3674
|
totalAvailable: number;
|
|
3373
3675
|
};
|
|
3676
|
+
/** @description Freshness contract. `generatedAt` (ISO 8601) is the authoritative time this body was generated. `cacheStatus`/`ttlSeconds` are the resolved cache policy (ttl 0 for private/no-store); ttl is policy, not a promise — stale-while-revalidate may serve an older body, so trust `generatedAt` for actual age. */
|
|
3677
|
+
freshness: {
|
|
3678
|
+
/** Format: date-time */
|
|
3679
|
+
generatedAt: string;
|
|
3680
|
+
/** @enum {string} */
|
|
3681
|
+
cacheStatus: "public" | "private";
|
|
3682
|
+
ttlSeconds: number;
|
|
3683
|
+
};
|
|
3374
3684
|
};
|
|
3375
3685
|
coverage: {
|
|
3376
3686
|
overall: {
|
|
@@ -3421,8 +3731,264 @@ interface components {
|
|
|
3421
3731
|
synthetic: boolean;
|
|
3422
3732
|
};
|
|
3423
3733
|
};
|
|
3424
|
-
PriceIndexResponse: {
|
|
3425
|
-
data: components["schemas"]["PriceIndexItem"][];
|
|
3734
|
+
PriceIndexResponse: {
|
|
3735
|
+
data: components["schemas"]["PriceIndexItem"][];
|
|
3736
|
+
pagination: {
|
|
3737
|
+
page: number;
|
|
3738
|
+
limit: number;
|
|
3739
|
+
total: number;
|
|
3740
|
+
totalPages: number;
|
|
3741
|
+
hasNext: boolean;
|
|
3742
|
+
hasPrev: boolean;
|
|
3743
|
+
};
|
|
3744
|
+
meta: {
|
|
3745
|
+
/** @enum {string} */
|
|
3746
|
+
resource: "price-index";
|
|
3747
|
+
/** @enum {string} */
|
|
3748
|
+
namespace: "/v1/price-index";
|
|
3749
|
+
/** @enum {string} */
|
|
3750
|
+
version: "v1";
|
|
3751
|
+
auth: {
|
|
3752
|
+
/** @enum {string} */
|
|
3753
|
+
kind: "api-key";
|
|
3754
|
+
/** @enum {string|null} */
|
|
3755
|
+
apiPlan: "viewer" | "member" | "enterprise" | null;
|
|
3756
|
+
/** @enum {boolean} */
|
|
3757
|
+
ppiAccess: true;
|
|
3758
|
+
};
|
|
3759
|
+
filters: {
|
|
3760
|
+
origin: string | null;
|
|
3761
|
+
process: string | null;
|
|
3762
|
+
grade: string | null;
|
|
3763
|
+
from: string | null;
|
|
3764
|
+
to: string | null;
|
|
3765
|
+
wholesale: boolean | null;
|
|
3766
|
+
};
|
|
3767
|
+
access: {
|
|
3768
|
+
rowLimit: number | null;
|
|
3769
|
+
limited: boolean;
|
|
3770
|
+
totalAvailable: number;
|
|
3771
|
+
};
|
|
3772
|
+
source: {
|
|
3773
|
+
/** @enum {string} */
|
|
3774
|
+
table: "price_index_snapshots";
|
|
3775
|
+
/** @enum {boolean} */
|
|
3776
|
+
aggregateOnly: true;
|
|
3777
|
+
};
|
|
3778
|
+
};
|
|
3779
|
+
};
|
|
3780
|
+
MarketSignalEvidence: {
|
|
3781
|
+
segment: {
|
|
3782
|
+
origin: string | null;
|
|
3783
|
+
process: string;
|
|
3784
|
+
/** @enum {string} */
|
|
3785
|
+
market: "retail" | "wholesale";
|
|
3786
|
+
};
|
|
3787
|
+
segment_median: number | null;
|
|
3788
|
+
segment_p25: number | null;
|
|
3789
|
+
discount_vs_median_pct: number | null;
|
|
3790
|
+
price_percentile_in_segment: number | null;
|
|
3791
|
+
/** @enum {string|null} */
|
|
3792
|
+
own_trailing_window: "7d" | "30d" | null;
|
|
3793
|
+
own_trailing_median: number | null;
|
|
3794
|
+
drop_vs_own_median_pct: number | null;
|
|
3795
|
+
score_value: number | null;
|
|
3796
|
+
value_ratio: number | null;
|
|
3797
|
+
origin_market_value_ratio_mean: number | null;
|
|
3798
|
+
origin_market_value_ratio_stddev: number | null;
|
|
3799
|
+
value_z_score: number | null;
|
|
3800
|
+
as_of: string;
|
|
3801
|
+
};
|
|
3802
|
+
MarketSignalItem: {
|
|
3803
|
+
/** @enum {string} */
|
|
3804
|
+
signalType: "price_drop" | "below_market" | "value_quality";
|
|
3805
|
+
/** @enum {string} */
|
|
3806
|
+
signalWindow: "7d" | "30d" | "n/a";
|
|
3807
|
+
catalogId: number;
|
|
3808
|
+
source: string | null;
|
|
3809
|
+
origin: string | null;
|
|
3810
|
+
process: string;
|
|
3811
|
+
/** @enum {string} */
|
|
3812
|
+
market: "retail" | "wholesale";
|
|
3813
|
+
scoreValue: number | null;
|
|
3814
|
+
currentPriceLb: number;
|
|
3815
|
+
rankScore: number;
|
|
3816
|
+
/** @enum {string} */
|
|
3817
|
+
rankScoreInput: "drop_vs_own_median_pct" | "discount_vs_median_pct" | "value_z_score";
|
|
3818
|
+
rankSignalMagnitude: number;
|
|
3819
|
+
evidence: components["schemas"]["MarketSignalEvidence"];
|
|
3820
|
+
catalogUrl: string;
|
|
3821
|
+
};
|
|
3822
|
+
MarketSignalsResponse: {
|
|
3823
|
+
data: components["schemas"]["MarketSignalItem"][];
|
|
3824
|
+
pagination: {
|
|
3825
|
+
page: number;
|
|
3826
|
+
limit: number;
|
|
3827
|
+
total: number;
|
|
3828
|
+
totalPages: number;
|
|
3829
|
+
hasNext: boolean;
|
|
3830
|
+
hasPrev: boolean;
|
|
3831
|
+
};
|
|
3832
|
+
meta: {
|
|
3833
|
+
/** @enum {string} */
|
|
3834
|
+
resource: "market-signals";
|
|
3835
|
+
/** @enum {string} */
|
|
3836
|
+
namespace: "/v1/market/signals";
|
|
3837
|
+
/** @enum {string} */
|
|
3838
|
+
version: "v1";
|
|
3839
|
+
auth: {
|
|
3840
|
+
/** @enum {string} */
|
|
3841
|
+
kind: "anonymous" | "session" | "api-key";
|
|
3842
|
+
role: string | null;
|
|
3843
|
+
/** @enum {string|null} */
|
|
3844
|
+
apiPlan: "viewer" | "member" | "enterprise" | null;
|
|
3845
|
+
ppiAccess: boolean;
|
|
3846
|
+
};
|
|
3847
|
+
filters: {
|
|
3848
|
+
summary: boolean;
|
|
3849
|
+
types: ("price_drop" | "below_market" | "value_quality")[];
|
|
3850
|
+
origin: string | null;
|
|
3851
|
+
process: string | null;
|
|
3852
|
+
/** @enum {string} */
|
|
3853
|
+
market: "retail" | "wholesale" | "all";
|
|
3854
|
+
minDiscountPct: number | null;
|
|
3855
|
+
minScore: number | null;
|
|
3856
|
+
/** @enum {string} */
|
|
3857
|
+
window: "7d" | "30d";
|
|
3858
|
+
};
|
|
3859
|
+
access: {
|
|
3860
|
+
publicSlice: boolean;
|
|
3861
|
+
rowLimit: number | null;
|
|
3862
|
+
limited: boolean;
|
|
3863
|
+
totalAvailable: number;
|
|
3864
|
+
};
|
|
3865
|
+
asOf: string | null;
|
|
3866
|
+
computedAt: string | null;
|
|
3867
|
+
thresholds: {
|
|
3868
|
+
dropThresholdPct: number;
|
|
3869
|
+
valueZThreshold: number;
|
|
3870
|
+
benchmarkMinLots: number;
|
|
3871
|
+
benchmarkMinSuppliers: number;
|
|
3872
|
+
};
|
|
3873
|
+
summary: {
|
|
3874
|
+
total: number;
|
|
3875
|
+
byType: {
|
|
3876
|
+
price_drop: number;
|
|
3877
|
+
below_market: number;
|
|
3878
|
+
value_quality: number;
|
|
3879
|
+
};
|
|
3880
|
+
} | null;
|
|
3881
|
+
source: {
|
|
3882
|
+
/** @enum {string} */
|
|
3883
|
+
table: "market_signals";
|
|
3884
|
+
/** @enum {boolean} */
|
|
3885
|
+
aggregateOnly: true;
|
|
3886
|
+
};
|
|
3887
|
+
};
|
|
3888
|
+
};
|
|
3889
|
+
PriceMoveStatsItem: {
|
|
3890
|
+
segment: {
|
|
3891
|
+
origin: string | null;
|
|
3892
|
+
process: string | null;
|
|
3893
|
+
/** @enum {string} */
|
|
3894
|
+
market: "retail" | "wholesale" | "all";
|
|
3895
|
+
};
|
|
3896
|
+
/** @enum {string} */
|
|
3897
|
+
window: "7d" | "30d";
|
|
3898
|
+
latestMovePct: number | null;
|
|
3899
|
+
baselineMeanMovePct: number | null;
|
|
3900
|
+
baselineStddev: number | null;
|
|
3901
|
+
zScore: number | null;
|
|
3902
|
+
movePercentile: number | null;
|
|
3903
|
+
weeksSinceLargerMove: number | null;
|
|
3904
|
+
/** @enum {string|null} */
|
|
3905
|
+
classification: "quiet" | "normal" | "notable" | "exceptional" | null;
|
|
3906
|
+
matchedLotMovePct: number | null;
|
|
3907
|
+
matchedLotCount: number;
|
|
3908
|
+
/** @enum {string|null} */
|
|
3909
|
+
moveDriver: "repricing" | "mix_shift" | "mixed" | "insufficient_overlap" | null;
|
|
3910
|
+
sampleSize: number;
|
|
3911
|
+
supplierCount: number;
|
|
3912
|
+
availableBaselineWeeks: number;
|
|
3913
|
+
note: string | null;
|
|
3914
|
+
};
|
|
3915
|
+
PriceIndexStatsResponse: {
|
|
3916
|
+
data: components["schemas"]["PriceMoveStatsItem"][];
|
|
3917
|
+
pagination: {
|
|
3918
|
+
page: number;
|
|
3919
|
+
limit: number;
|
|
3920
|
+
total: number;
|
|
3921
|
+
totalPages: number;
|
|
3922
|
+
hasNext: boolean;
|
|
3923
|
+
hasPrev: boolean;
|
|
3924
|
+
};
|
|
3925
|
+
meta: {
|
|
3926
|
+
/** @enum {string} */
|
|
3927
|
+
resource: "price-index-stats";
|
|
3928
|
+
/** @enum {string} */
|
|
3929
|
+
namespace: "/v1/price-index/stats";
|
|
3930
|
+
/** @enum {string} */
|
|
3931
|
+
version: "v1";
|
|
3932
|
+
auth: {
|
|
3933
|
+
/** @enum {string} */
|
|
3934
|
+
kind: "anonymous" | "session" | "api-key";
|
|
3935
|
+
role: string | null;
|
|
3936
|
+
/** @enum {string|null} */
|
|
3937
|
+
apiPlan: "viewer" | "member" | "enterprise" | null;
|
|
3938
|
+
ppiAccess: boolean;
|
|
3939
|
+
};
|
|
3940
|
+
filters: {
|
|
3941
|
+
origin: string | null;
|
|
3942
|
+
process: string | null;
|
|
3943
|
+
/** @enum {string} */
|
|
3944
|
+
market: "retail" | "wholesale" | "all";
|
|
3945
|
+
/** @enum {string} */
|
|
3946
|
+
window: "7d" | "30d";
|
|
3947
|
+
baselineWeeks: number;
|
|
3948
|
+
};
|
|
3949
|
+
access: {
|
|
3950
|
+
publicSlice: boolean;
|
|
3951
|
+
rowLimit: number | null;
|
|
3952
|
+
limited: boolean;
|
|
3953
|
+
totalAvailable: number;
|
|
3954
|
+
};
|
|
3955
|
+
asOf: string | null;
|
|
3956
|
+
computedAt: string | null;
|
|
3957
|
+
thresholds: {
|
|
3958
|
+
baselineWeeks: number;
|
|
3959
|
+
minimumBaselineWeeks: number;
|
|
3960
|
+
quietPercentile: number;
|
|
3961
|
+
normalPercentile: number;
|
|
3962
|
+
notablePercentile: number;
|
|
3963
|
+
matchedLotMinimum: number;
|
|
3964
|
+
};
|
|
3965
|
+
source: {
|
|
3966
|
+
/** @enum {string} */
|
|
3967
|
+
table: "price_index_move_stats";
|
|
3968
|
+
/** @enum {boolean} */
|
|
3969
|
+
aggregateOnly: true;
|
|
3970
|
+
};
|
|
3971
|
+
};
|
|
3972
|
+
};
|
|
3973
|
+
MetadataSeriesItem: {
|
|
3974
|
+
period: string;
|
|
3975
|
+
lotCount: number;
|
|
3976
|
+
supplierCount: number;
|
|
3977
|
+
buckets: ({
|
|
3978
|
+
key: string;
|
|
3979
|
+
share: number | null;
|
|
3980
|
+
count: number;
|
|
3981
|
+
supplierCount: number;
|
|
3982
|
+
} | {
|
|
3983
|
+
/** @enum {string} */
|
|
3984
|
+
key: "p25" | "p50" | "p75";
|
|
3985
|
+
value: number | null;
|
|
3986
|
+
count: number;
|
|
3987
|
+
supplierCount: number;
|
|
3988
|
+
})[];
|
|
3989
|
+
};
|
|
3990
|
+
MetadataIndexResponse: {
|
|
3991
|
+
data: components["schemas"]["MetadataSeriesItem"][];
|
|
3426
3992
|
pagination: {
|
|
3427
3993
|
page: number;
|
|
3428
3994
|
limit: number;
|
|
@@ -3433,35 +3999,53 @@ interface components {
|
|
|
3433
3999
|
};
|
|
3434
4000
|
meta: {
|
|
3435
4001
|
/** @enum {string} */
|
|
3436
|
-
resource: "
|
|
4002
|
+
resource: "market-metadata-index";
|
|
3437
4003
|
/** @enum {string} */
|
|
3438
|
-
namespace: "/v1/
|
|
4004
|
+
namespace: "/v1/market/metadata-index";
|
|
3439
4005
|
/** @enum {string} */
|
|
3440
4006
|
version: "v1";
|
|
3441
4007
|
auth: {
|
|
3442
4008
|
/** @enum {string} */
|
|
3443
|
-
kind: "api-key";
|
|
4009
|
+
kind: "anonymous" | "session" | "api-key";
|
|
4010
|
+
role: string | null;
|
|
3444
4011
|
/** @enum {string|null} */
|
|
3445
4012
|
apiPlan: "viewer" | "member" | "enterprise" | null;
|
|
3446
|
-
|
|
3447
|
-
ppiAccess: true;
|
|
4013
|
+
ppiAccess: boolean;
|
|
3448
4014
|
};
|
|
3449
4015
|
filters: {
|
|
4016
|
+
/** @enum {string} */
|
|
4017
|
+
dimension: "process" | "disclosure" | "score";
|
|
3450
4018
|
origin: string | null;
|
|
3451
|
-
|
|
3452
|
-
|
|
4019
|
+
/** @enum {string} */
|
|
4020
|
+
market: "retail" | "wholesale" | "all";
|
|
4021
|
+
/** @enum {string} */
|
|
4022
|
+
grain: "week" | "month";
|
|
3453
4023
|
from: string | null;
|
|
3454
4024
|
to: string | null;
|
|
3455
|
-
wholesale: boolean | null;
|
|
3456
4025
|
};
|
|
3457
4026
|
access: {
|
|
4027
|
+
publicSlice: boolean;
|
|
3458
4028
|
rowLimit: number | null;
|
|
3459
4029
|
limited: boolean;
|
|
3460
4030
|
totalAvailable: number;
|
|
3461
4031
|
};
|
|
4032
|
+
asOf: string | null;
|
|
4033
|
+
computedAt: string | null;
|
|
4034
|
+
thresholds: {
|
|
4035
|
+
originSuppressionMinLots: number;
|
|
4036
|
+
publicSlice: {
|
|
4037
|
+
/** @enum {string} */
|
|
4038
|
+
dimension: "process";
|
|
4039
|
+
origin: null;
|
|
4040
|
+
/** @enum {string} */
|
|
4041
|
+
market: "retail";
|
|
4042
|
+
/** @enum {string} */
|
|
4043
|
+
grain: "month";
|
|
4044
|
+
};
|
|
4045
|
+
};
|
|
3462
4046
|
source: {
|
|
3463
4047
|
/** @enum {string} */
|
|
3464
|
-
table: "
|
|
4048
|
+
table: "metadata_index_snapshots";
|
|
3465
4049
|
/** @enum {boolean} */
|
|
3466
4050
|
aggregateOnly: true;
|
|
3467
4051
|
};
|
|
@@ -4185,6 +4769,34 @@ interface components {
|
|
|
4185
4769
|
/** @description Reported source size in bytes for import-log metadata; defaults to the content length. */
|
|
4186
4770
|
fileSize?: number;
|
|
4187
4771
|
};
|
|
4772
|
+
RoastArtisanImportClearCounts: {
|
|
4773
|
+
artisan_import_log: number;
|
|
4774
|
+
roast_events: number;
|
|
4775
|
+
roast_temperatures: number;
|
|
4776
|
+
};
|
|
4777
|
+
RoastArtisanImportClearResponse: {
|
|
4778
|
+
data: {
|
|
4779
|
+
id: number;
|
|
4780
|
+
deletedCounts: components["schemas"]["RoastArtisanImportClearCounts"];
|
|
4781
|
+
batchName: string | null;
|
|
4782
|
+
};
|
|
4783
|
+
meta: {
|
|
4784
|
+
/** @enum {string} */
|
|
4785
|
+
resource: "roasts";
|
|
4786
|
+
/** @enum {string} */
|
|
4787
|
+
namespace: "/v1/roasts";
|
|
4788
|
+
/** @enum {string} */
|
|
4789
|
+
version: "v1";
|
|
4790
|
+
auth: {
|
|
4791
|
+
/** @enum {string} */
|
|
4792
|
+
kind: "session" | "api-key";
|
|
4793
|
+
/** @enum {string|null} */
|
|
4794
|
+
role: "admin" | "member" | "viewer" | null;
|
|
4795
|
+
/** @enum {string|null} */
|
|
4796
|
+
apiPlan: "viewer" | "member" | "enterprise" | null;
|
|
4797
|
+
};
|
|
4798
|
+
};
|
|
4799
|
+
};
|
|
4188
4800
|
RoastListResource: {
|
|
4189
4801
|
roast_id: number;
|
|
4190
4802
|
batch_name: string | null;
|
|
@@ -4377,6 +4989,12 @@ type CatalogSupplierHeaders = NonNullable<paths["/v1/catalog/suppliers"]["get"][
|
|
|
4377
4989
|
type CatalogSimilarQuery = NonNullable<paths["/v1/catalog/{id}/similar"]["get"]["parameters"]["query"]>;
|
|
4378
4990
|
/** Query parameters for {@link ParchmentClient.priceIndex.list}. */
|
|
4379
4991
|
type PriceIndexQuery = NonNullable<paths["/v1/price-index"]["get"]["parameters"]["query"]>;
|
|
4992
|
+
/** Query parameters for {@link ParchmentClient.market.signals}. */
|
|
4993
|
+
type MarketSignalsQuery = NonNullable<paths["/v1/market/signals"]["get"]["parameters"]["query"]>;
|
|
4994
|
+
/** Query parameters for {@link ParchmentClient.priceIndex.stats}. */
|
|
4995
|
+
type PriceIndexStatsQuery = NonNullable<paths["/v1/price-index/stats"]["get"]["parameters"]["query"]>;
|
|
4996
|
+
/** Query parameters for {@link ParchmentClient.market.metadataIndex}. */
|
|
4997
|
+
type MetadataIndexQuery = NonNullable<paths["/v1/market/metadata-index"]["get"]["parameters"]["query"]>;
|
|
4380
4998
|
/** Query parameters for {@link ParchmentClient.procurement.briefs.matches}. */
|
|
4381
4999
|
type BriefMatchesQuery = NonNullable<paths["/v1/procurement/briefs/{id}/matches"]["get"]["parameters"]["query"]>;
|
|
4382
5000
|
/** Request body for {@link ParchmentClient.procurement.briefs.create}. */
|
|
@@ -4673,7 +5291,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
4673
5291
|
[name: string]: unknown;
|
|
4674
5292
|
};
|
|
4675
5293
|
content: {
|
|
4676
|
-
"application/json": components["schemas"]["ErrorResponse"];
|
|
5294
|
+
"application/json": components["schemas"] /** Rotate an API key and return the replacement secret once. */["ErrorResponse"];
|
|
4677
5295
|
};
|
|
4678
5296
|
};
|
|
4679
5297
|
};
|
|
@@ -4792,12 +5410,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
4792
5410
|
[name: string]: unknown;
|
|
4793
5411
|
};
|
|
4794
5412
|
content: {
|
|
4795
|
-
"application/json":
|
|
4796
|
-
/**
|
|
4797
|
-
* Delete one of the caller's own inventory rows. Returns 409 if dependent
|
|
4798
|
-
* roast profiles or sales exist (no force-cascade).
|
|
4799
|
-
*/
|
|
4800
|
-
components["schemas"]["ErrorResponse"];
|
|
5413
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
4801
5414
|
};
|
|
4802
5415
|
};
|
|
4803
5416
|
404: {
|
|
@@ -4906,7 +5519,12 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
4906
5519
|
page?: number;
|
|
4907
5520
|
limit?: number;
|
|
4908
5521
|
stocked?: "true" | "false" | "all";
|
|
4909
|
-
sort
|
|
5522
|
+
sort? /**
|
|
5523
|
+
* Replace the Artisan import data on one of the caller's existing roasts,
|
|
5524
|
+
* re-deriving its curve, events, and computed metrics while preserving the
|
|
5525
|
+
* roast's identity. Pass `ifMatch` (the roast's `last_updated`) to enable
|
|
5526
|
+
* optimistic concurrency (409 on mismatch).
|
|
5527
|
+
*/: string;
|
|
4910
5528
|
order?: "asc" | "desc";
|
|
4911
5529
|
showWholesale?: "true" | "false";
|
|
4912
5530
|
wholesaleOnly?: "true" | "false";
|
|
@@ -4923,7 +5541,10 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
4923
5541
|
appearance?: string;
|
|
4924
5542
|
supplier?: string;
|
|
4925
5543
|
dryingMethod?: string;
|
|
4926
|
-
flavorKeywords
|
|
5544
|
+
flavorKeywords? /**
|
|
5545
|
+
* Clear import-derived curve, events, metrics, and provenance data from
|
|
5546
|
+
* one of the caller's existing roasts without deleting the roast profile.
|
|
5547
|
+
*/: string | string[];
|
|
4927
5548
|
arrivalDate?: string;
|
|
4928
5549
|
stockedDate?: string;
|
|
4929
5550
|
stockedDays?: number;
|
|
@@ -5764,6 +6385,184 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
5764
6385
|
} | undefined;
|
|
5765
6386
|
};
|
|
5766
6387
|
}, `${string}/${string}`>>;
|
|
6388
|
+
/** Price movement significance stats (precomputed). */
|
|
6389
|
+
stats: (query?: PriceIndexStatsQuery) => Promise<openapi_fetch.FetchResponse<{
|
|
6390
|
+
parameters: {
|
|
6391
|
+
query?: {
|
|
6392
|
+
page?: number;
|
|
6393
|
+
limit?: number;
|
|
6394
|
+
origin?: string;
|
|
6395
|
+
process?: string;
|
|
6396
|
+
market?: "retail" | "wholesale" | "all";
|
|
6397
|
+
window?: "7d" | "30d";
|
|
6398
|
+
baseline_weeks?: number;
|
|
6399
|
+
};
|
|
6400
|
+
header?: never;
|
|
6401
|
+
path?: never;
|
|
6402
|
+
cookie?: never;
|
|
6403
|
+
};
|
|
6404
|
+
requestBody?: never;
|
|
6405
|
+
responses: {
|
|
6406
|
+
200: {
|
|
6407
|
+
headers: {
|
|
6408
|
+
[name: string]: unknown;
|
|
6409
|
+
};
|
|
6410
|
+
content: {
|
|
6411
|
+
"application/json": components["schemas"]["PriceIndexStatsResponse"];
|
|
6412
|
+
};
|
|
6413
|
+
};
|
|
6414
|
+
401: {
|
|
6415
|
+
headers: {
|
|
6416
|
+
[name: string]: unknown;
|
|
6417
|
+
};
|
|
6418
|
+
content: {
|
|
6419
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
6420
|
+
};
|
|
6421
|
+
};
|
|
6422
|
+
403: {
|
|
6423
|
+
headers: {
|
|
6424
|
+
[name: string]: unknown;
|
|
6425
|
+
};
|
|
6426
|
+
content: {
|
|
6427
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
6428
|
+
};
|
|
6429
|
+
};
|
|
6430
|
+
};
|
|
6431
|
+
}, {
|
|
6432
|
+
params: {
|
|
6433
|
+
query: {
|
|
6434
|
+
page?: number;
|
|
6435
|
+
limit?: number;
|
|
6436
|
+
origin?: string;
|
|
6437
|
+
process?: string;
|
|
6438
|
+
market?: "retail" | "wholesale" | "all";
|
|
6439
|
+
window?: "7d" | "30d";
|
|
6440
|
+
baseline_weeks?: number;
|
|
6441
|
+
} | undefined;
|
|
6442
|
+
};
|
|
6443
|
+
}, `${string}/${string}`>>;
|
|
6444
|
+
};
|
|
6445
|
+
market: {
|
|
6446
|
+
/** Actionable market value signals. */
|
|
6447
|
+
signals: (query?: MarketSignalsQuery) => Promise<openapi_fetch.FetchResponse<{
|
|
6448
|
+
parameters: {
|
|
6449
|
+
query?: {
|
|
6450
|
+
page?: number;
|
|
6451
|
+
limit?: number;
|
|
6452
|
+
summary?: "true" | "false";
|
|
6453
|
+
type?: string | string[];
|
|
6454
|
+
origin?: string;
|
|
6455
|
+
process?: string;
|
|
6456
|
+
market?: "retail" | "wholesale" | "all";
|
|
6457
|
+
min_discount_pct?: number | null;
|
|
6458
|
+
min_score?: number | null;
|
|
6459
|
+
window?: "7d" | "30d";
|
|
6460
|
+
};
|
|
6461
|
+
header?: never;
|
|
6462
|
+
path?: never;
|
|
6463
|
+
cookie?: never;
|
|
6464
|
+
};
|
|
6465
|
+
requestBody?: never;
|
|
6466
|
+
responses: {
|
|
6467
|
+
200: {
|
|
6468
|
+
headers: {
|
|
6469
|
+
[name: string]: unknown;
|
|
6470
|
+
};
|
|
6471
|
+
content: {
|
|
6472
|
+
"application/json": components["schemas"]["MarketSignalsResponse"];
|
|
6473
|
+
};
|
|
6474
|
+
};
|
|
6475
|
+
401: {
|
|
6476
|
+
headers: {
|
|
6477
|
+
[name: string]: unknown;
|
|
6478
|
+
};
|
|
6479
|
+
content: {
|
|
6480
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
6481
|
+
};
|
|
6482
|
+
};
|
|
6483
|
+
403: {
|
|
6484
|
+
headers: {
|
|
6485
|
+
[name: string]: unknown;
|
|
6486
|
+
};
|
|
6487
|
+
content: {
|
|
6488
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
6489
|
+
};
|
|
6490
|
+
};
|
|
6491
|
+
};
|
|
6492
|
+
}, {
|
|
6493
|
+
params: {
|
|
6494
|
+
query: {
|
|
6495
|
+
page?: number;
|
|
6496
|
+
limit?: number;
|
|
6497
|
+
summary?: "true" | "false";
|
|
6498
|
+
type?: string | string[];
|
|
6499
|
+
origin?: string;
|
|
6500
|
+
process?: string;
|
|
6501
|
+
market?: "retail" | "wholesale" | "all";
|
|
6502
|
+
min_discount_pct?: number | null;
|
|
6503
|
+
min_score?: number | null;
|
|
6504
|
+
window?: "7d" | "30d";
|
|
6505
|
+
} | undefined;
|
|
6506
|
+
};
|
|
6507
|
+
}, `${string}/${string}`>>;
|
|
6508
|
+
/** Metadata-trend index (process/disclosure/score over time). */
|
|
6509
|
+
metadataIndex: (query?: MetadataIndexQuery) => Promise<openapi_fetch.FetchResponse<{
|
|
6510
|
+
parameters: {
|
|
6511
|
+
query?: {
|
|
6512
|
+
page?: number;
|
|
6513
|
+
limit?: number;
|
|
6514
|
+
dimension?: "process" | "disclosure" | "score";
|
|
6515
|
+
origin?: string;
|
|
6516
|
+
market?: "retail" | "wholesale" | "all";
|
|
6517
|
+
grain?: "week" | "month";
|
|
6518
|
+
from?: string;
|
|
6519
|
+
to?: string;
|
|
6520
|
+
};
|
|
6521
|
+
header?: never;
|
|
6522
|
+
path?: never;
|
|
6523
|
+
cookie?: never;
|
|
6524
|
+
};
|
|
6525
|
+
requestBody?: never;
|
|
6526
|
+
responses: {
|
|
6527
|
+
200: {
|
|
6528
|
+
headers: {
|
|
6529
|
+
[name: string]: unknown;
|
|
6530
|
+
};
|
|
6531
|
+
content: {
|
|
6532
|
+
"application/json": components["schemas"]["MetadataIndexResponse"];
|
|
6533
|
+
};
|
|
6534
|
+
};
|
|
6535
|
+
401: {
|
|
6536
|
+
headers: {
|
|
6537
|
+
[name: string]: unknown;
|
|
6538
|
+
};
|
|
6539
|
+
content: {
|
|
6540
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
6541
|
+
};
|
|
6542
|
+
};
|
|
6543
|
+
403: {
|
|
6544
|
+
headers: {
|
|
6545
|
+
[name: string]: unknown;
|
|
6546
|
+
};
|
|
6547
|
+
content: {
|
|
6548
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
6549
|
+
};
|
|
6550
|
+
};
|
|
6551
|
+
};
|
|
6552
|
+
}, {
|
|
6553
|
+
params: {
|
|
6554
|
+
query: {
|
|
6555
|
+
page?: number;
|
|
6556
|
+
limit?: number;
|
|
6557
|
+
dimension?: "process" | "disclosure" | "score";
|
|
6558
|
+
origin?: string;
|
|
6559
|
+
market?: "retail" | "wholesale" | "all";
|
|
6560
|
+
grain?: "week" | "month";
|
|
6561
|
+
from?: string;
|
|
6562
|
+
to?: string;
|
|
6563
|
+
} | undefined;
|
|
6564
|
+
};
|
|
6565
|
+
}, `${string}/${string}`>>;
|
|
5767
6566
|
};
|
|
5768
6567
|
procurement: {
|
|
5769
6568
|
briefs: {
|
|
@@ -7060,6 +7859,77 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
7060
7859
|
fileSize?: number;
|
|
7061
7860
|
};
|
|
7062
7861
|
}, `${string}/${string}`>>;
|
|
7862
|
+
/**
|
|
7863
|
+
* Clear import-derived curve, events, metrics, and provenance data from
|
|
7864
|
+
* one of the caller's existing roasts without deleting the roast profile.
|
|
7865
|
+
*/
|
|
7866
|
+
clearArtisanImport: (id: number) => Promise<openapi_fetch.FetchResponse<{
|
|
7867
|
+
parameters: {
|
|
7868
|
+
query?: never;
|
|
7869
|
+
header?: never;
|
|
7870
|
+
path: {
|
|
7871
|
+
id: number;
|
|
7872
|
+
};
|
|
7873
|
+
cookie?: never;
|
|
7874
|
+
};
|
|
7875
|
+
requestBody?: never;
|
|
7876
|
+
responses: {
|
|
7877
|
+
200: {
|
|
7878
|
+
headers: {
|
|
7879
|
+
[name: string]: unknown;
|
|
7880
|
+
};
|
|
7881
|
+
content: {
|
|
7882
|
+
"application/json": components["schemas"]["RoastArtisanImportClearResponse"];
|
|
7883
|
+
};
|
|
7884
|
+
};
|
|
7885
|
+
401: {
|
|
7886
|
+
headers: {
|
|
7887
|
+
[name: string]: unknown;
|
|
7888
|
+
};
|
|
7889
|
+
content: {
|
|
7890
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
7891
|
+
};
|
|
7892
|
+
};
|
|
7893
|
+
403: {
|
|
7894
|
+
headers: {
|
|
7895
|
+
[name: string]: unknown;
|
|
7896
|
+
};
|
|
7897
|
+
content: {
|
|
7898
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
7899
|
+
};
|
|
7900
|
+
};
|
|
7901
|
+
404: {
|
|
7902
|
+
headers: {
|
|
7903
|
+
[name: string]: unknown;
|
|
7904
|
+
};
|
|
7905
|
+
content: {
|
|
7906
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
7907
|
+
};
|
|
7908
|
+
};
|
|
7909
|
+
429: {
|
|
7910
|
+
headers: {
|
|
7911
|
+
[name: string]: unknown;
|
|
7912
|
+
};
|
|
7913
|
+
content: {
|
|
7914
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
7915
|
+
};
|
|
7916
|
+
};
|
|
7917
|
+
503: {
|
|
7918
|
+
headers: {
|
|
7919
|
+
[name: string]: unknown;
|
|
7920
|
+
};
|
|
7921
|
+
content: {
|
|
7922
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
7923
|
+
};
|
|
7924
|
+
};
|
|
7925
|
+
};
|
|
7926
|
+
}, {
|
|
7927
|
+
params: {
|
|
7928
|
+
path: {
|
|
7929
|
+
id: number;
|
|
7930
|
+
};
|
|
7931
|
+
};
|
|
7932
|
+
}, `${string}/${string}`>>;
|
|
7063
7933
|
};
|
|
7064
7934
|
sales: {
|
|
7065
7935
|
/** List the caller's own sales (owner-scoped). */
|
|
@@ -7195,4 +8065,4 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
|
|
|
7195
8065
|
};
|
|
7196
8066
|
type ParchmentClient = ReturnType<typeof createParchmentClient>;
|
|
7197
8067
|
|
|
7198
|
-
export { type BriefMatchesQuery, type CatalogListQuery, type CatalogSimilarQuery, type InventoryCreateRequest, type InventoryUpdateRequest, type ParchmentClient, type ParchmentClientOptions, type PriceIndexQuery, type SourcingBriefCreateRequest, type components, createParchmentClient, type paths };
|
|
8068
|
+
export { type BriefMatchesQuery, type CatalogListQuery, type CatalogSimilarQuery, type InventoryCreateRequest, type InventoryUpdateRequest, type MarketSignalsQuery, type MetadataIndexQuery, type ParchmentClient, type ParchmentClientOptions, type PriceIndexQuery, type PriceIndexStatsQuery, type SourcingBriefCreateRequest, type components, createParchmentClient, type paths };
|
package/dist/index.js
CHANGED
|
@@ -76,7 +76,15 @@ function createParchmentClient(options) {
|
|
|
76
76
|
},
|
|
77
77
|
priceIndex: {
|
|
78
78
|
/** Parchment Price Index (aggregate snapshots). */
|
|
79
|
-
list: (query) => client.GET("/v1/price-index", { params: { query } })
|
|
79
|
+
list: (query) => client.GET("/v1/price-index", { params: { query } }),
|
|
80
|
+
/** Price movement significance stats (precomputed). */
|
|
81
|
+
stats: (query) => client.GET("/v1/price-index/stats", { params: { query } })
|
|
82
|
+
},
|
|
83
|
+
market: {
|
|
84
|
+
/** Actionable market value signals. */
|
|
85
|
+
signals: (query) => client.GET("/v1/market/signals", { params: { query } }),
|
|
86
|
+
/** Metadata-trend index (process/disclosure/score over time). */
|
|
87
|
+
metadataIndex: (query) => client.GET("/v1/market/metadata-index", { params: { query } })
|
|
80
88
|
},
|
|
81
89
|
procurement: {
|
|
82
90
|
briefs: {
|
|
@@ -177,6 +185,13 @@ function createParchmentClient(options) {
|
|
|
177
185
|
header: options2?.ifMatch ? { "if-match": options2.ifMatch } : void 0
|
|
178
186
|
},
|
|
179
187
|
body
|
|
188
|
+
}),
|
|
189
|
+
/**
|
|
190
|
+
* Clear import-derived curve, events, metrics, and provenance data from
|
|
191
|
+
* one of the caller's existing roasts without deleting the roast profile.
|
|
192
|
+
*/
|
|
193
|
+
clearArtisanImport: (id) => client.DELETE("/v1/roasts/{id}/artisan-import", {
|
|
194
|
+
params: { path: { id } }
|
|
180
195
|
})
|
|
181
196
|
},
|
|
182
197
|
sales: {
|
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 or, later, an API key). Sent as\n * `Authorization: Bearer <token>`. Auth is resolved server-side against the\n * unified principal model; 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/** 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.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.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/** 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/** 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.tasting.get}. */\nexport type TastingGetQuery = NonNullable<\n paths[\"/v1/tasting/{catalogId}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.apiKeys.create}. */\nexport type ApiKeyCreateRequest = NonNullable<\n paths[\"/v1/api-keys\"][\"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 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 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 },\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 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. Pass `idempotencyKey`\n * to make retries safe: the same key replays the original result, and a\n * concurrent duplicate gets 409 while the first is in flight.\n */\n create: (\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 * 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 /** 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 /**\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 sales: {\n /** List the caller's own sales (owner-scoped). */\n list: (query?: SalesListQuery) =>\n client.GET(\"/v1/sales\", { 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 },\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 or, later, an API key). Sent as\n * `Authorization: Bearer <token>`. Auth is resolved server-side against the\n * unified principal model; 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/** 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.market.signals}. */\nexport type MarketSignalsQuery = NonNullable<\n paths[\"/v1/market/signals\"][\"get\"][\"parameters\"][\"query\"]\n>;\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.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/** 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/** 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.tasting.get}. */\nexport type TastingGetQuery = NonNullable<\n paths[\"/v1/tasting/{catalogId}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.apiKeys.create}. */\nexport type ApiKeyCreateRequest = NonNullable<\n paths[\"/v1/api-keys\"][\"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 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 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 /** Price movement significance stats (precomputed). */\n stats: (query?: PriceIndexStatsQuery) =>\n client.GET(\"/v1/price-index/stats\", { params: { query } }),\n },\n market: {\n /** Actionable market value signals. */\n signals: (query?: MarketSignalsQuery) =>\n client.GET(\"/v1/market/signals\", { params: { query } }),\n /** Metadata-trend index (process/disclosure/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 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. Pass `idempotencyKey`\n * to make retries safe: the same key replays the original result, and a\n * concurrent duplicate gets 409 while the first is in flight.\n */\n create: (\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 * 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 /** 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 /**\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 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 },\n };\n}\n\nexport type ParchmentClient = ReturnType<typeof createParchmentClient>;\n"],"mappings":";AAAA,OAAO,kBAA0C;AAiK1C,SAAS,sBAAsB,SAAiC;AACrE,QAAM,EAAE,SAAS,OAAO,OAAO,UAAU,IAAI;AAE7C,QAAM,SAAS,aAAoB;AAAA,IACjC;AAAA,IACA,OAAO;AAAA,IACP,SAAS,QAAQ,EAAE,eAAe,UAAU,KAAK,GAAG,IAAI;AAAA,EAC1D,CAAC;AAED,SAAO;AAAA;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,QAAQ,MAAM,OAAO,IAAI,SAAS;AAAA;AAAA,IAElC,IAAI,MAAM,OAAO,IAAI,QAAQ;AAAA,IAC7B,SAAS;AAAA;AAAA,MAEP,MAAM,MAAM,OAAO,IAAI,cAAc;AAAA;AAAA,MAErC,QAAQ,CAAC,SACP,OAAO,KAAK,gBAAgB,EAAE,KAAK,CAAC;AAAA;AAAA,MAEtC,QAAQ,CAAC,OACP,OAAO,OAAO,qBAAqB;AAAA,QACjC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE;AAAA,MACzB,CAAC;AAAA;AAAA,MAEH,QAAQ,CAAC,OACP,OAAO,KAAK,4BAA4B;AAAA,QACtC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE;AAAA,MACzB,CAAC;AAAA,IACL;AAAA,IACA,SAAS;AAAA;AAAA,MAEP,QAAQ,MAAM,OAAO,IAAI,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7C,MAAM,CAAC,OAA0B,YAC/B,OAAO,IAAI,eAAe,EAAE,QAAQ,EAAE,OAAO,QAAQ,QAAQ,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKlE,QAAQ,CAAC,OAA4B,YACnC,OAAO,IAAI,sBAAsB;AAAA,QAC/B,QAAQ,EAAE,OAAO,QAAQ,QAAQ;AAAA,MACnC,CAAC;AAAA;AAAA,MAEH,kBAAkB,CAAC,UACjB,OAAO,IAAI,kCAAkC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA;AAAA,MAEpE,OAAO,CAAC,UACN,OAAO,IAAI,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA;AAAA,MAEvD,MAAM,CAAC,OAA0B,YAC/B,OAAO,IAAI,oBAAoB;AAAA,QAC7B,QAAQ,EAAE,OAAO,QAAQ,QAAQ;AAAA,MACnC,CAAC;AAAA;AAAA,MAEH,aAAa,CACX,OACA,YAEA,OAAO,IAAI,4BAA4B;AAAA,QACrC,QAAQ,EAAE,OAAO,QAAQ,QAAQ;AAAA,MACnC,CAAC;AAAA;AAAA,MAEH,WAAW,CACT,OACA,YAEA,OAAO,IAAI,yBAAyB;AAAA,QAClC,QAAQ,EAAE,OAAO,QAAQ,QAAQ;AAAA,MACnC,CAAC;AAAA;AAAA,MAEH,gBAAgB,CACd,OACA,YAEA,OAAO,IAAI,gCAAgC;AAAA,QACzC,QAAQ,EAAE,OAAO,QAAQ,QAAQ;AAAA,MACnC,CAAC;AAAA;AAAA,MAEH,cAAc,CACZ,OACA,YAEA,OAAO,IAAI,8BAA8B;AAAA,QACvC,QAAQ,EAAE,OAAO,QAAQ,QAAQ;AAAA,MACnC,CAAC;AAAA;AAAA,MAEH,eAAe,MAAM,OAAO,IAAI,4BAA4B;AAAA;AAAA,MAE5D,SAAS,CAAC,IAAY,UACpB,OAAO,IAAI,4BAA4B;AAAA,QACrC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM;AAAA,MAChC,CAAC;AAAA,IACL;AAAA,IACA,YAAY;AAAA;AAAA,MAEV,MAAM,CAAC,UACL,OAAO,IAAI,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA;AAAA,MAErD,OAAO,CAAC,UACN,OAAO,IAAI,yBAAyB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA,IAC7D;AAAA,IACA,QAAQ;AAAA;AAAA,MAEN,SAAS,CAAC,UACR,OAAO,IAAI,sBAAsB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA;AAAA,MAExD,eAAe,CAAC,UACd,OAAO,IAAI,6BAA6B,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA,IACjE;AAAA,IACA,aAAa;AAAA,MACX,QAAQ;AAAA;AAAA,QAEN,MAAM,MAAM,OAAO,IAAI,wBAAwB;AAAA;AAAA,QAE/C,QAAQ,CAAC,SACP,OAAO,KAAK,0BAA0B,EAAE,KAAK,CAAC;AAAA;AAAA,QAEhD,KAAK,CAAC,OACJ,OAAO,IAAI,+BAA+B;AAAA,UACxC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE;AAAA,QACzB,CAAC;AAAA;AAAA,QAEH,SAAS,CAAC,IAAY,UACpB,OAAO,IAAI,uCAAuC;AAAA,UAChD,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM;AAAA,QAChC,CAAC;AAAA,MACL;AAAA,IACF;AAAA,IACA,WAAW;AAAA;AAAA,MAET,MAAM,CAAC,UACL,OAAO,IAAI,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOnD,QAAQ,CACN,MACAA,aAEA,OAAO,KAAK,iBAAiB;AAAA,QAC3B;AAAA,QACA,QAAQA,UAAS,iBACb,EAAE,QAAQ,EAAE,mBAAmBA,SAAQ,eAAe,EAAE,IACxD;AAAA,MACN,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKH,QAAQ,CACN,IACA,MACAA,aAEA,OAAO,MAAM,sBAAsB;AAAA,QACjC,QAAQ;AAAA,UACN,MAAM,EAAE,GAAG;AAAA,UACX,QAAQA,UAAS,UACb,EAAE,YAAYA,SAAQ,QAAQ,IAC9B;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKH,QAAQ,CAAC,OACP,OAAO,OAAO,sBAAsB,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;AAAA,IACpE;AAAA,IACA,QAAQ;AAAA;AAAA,MAEN,MAAM,CAAC,UACL,OAAO,IAAI,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKhD,KAAK,CAAC,IAAY,UAChB,OAAO,IAAI,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMnE,QAAQ,CACN,MACAA,aAEA,OAAO,KAAK,cAAc;AAAA,QACxB;AAAA,QACA,QAAQA,UAAS,iBACb,EAAE,QAAQ,EAAE,mBAAmBA,SAAQ,eAAe,EAAE,IACxD;AAAA,MACN,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKH,QAAQ,CACN,IACA,MACAA,aAEA,OAAO,MAAM,mBAAmB;AAAA,QAC9B,QAAQ;AAAA,UACN,MAAM,EAAE,GAAG;AAAA,UACX,QAAQA,UAAS,UACb,EAAE,YAAYA,SAAQ,QAAQ,IAC9B;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA;AAAA,MAEH,QAAQ,CAAC,OACP,OAAO,OAAO,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQ/D,QAAQ,CACN,MACAA,aAEA,OAAO,KAAK,sBAAsB;AAAA,QAChC;AAAA,QACA,QAAQA,UAAS,iBACb,EAAE,QAAQ,EAAE,mBAAmBA,SAAQ,eAAe,EAAE,IACxD;AAAA,MACN,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOH,sBAAsB,CACpB,IACA,MACAA,aAEA,OAAO,IAAI,kCAAkC;AAAA,QAC3C,QAAQ;AAAA,UACN,MAAM,EAAE,GAAG;AAAA,UACX,QAAQA,UAAS,UACb,EAAE,YAAYA,SAAQ,QAAQ,IAC9B;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKH,oBAAoB,CAAC,OACnB,OAAO,OAAO,kCAAkC;AAAA,QAC9C,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE;AAAA,MACzB,CAAC;AAAA,IACL;AAAA,IACA,OAAO;AAAA;AAAA,MAEL,MAAM,CAAC,UACL,OAAO,IAAI,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAAA,IACjD;AAAA,IACA,SAAS;AAAA;AAAA,MAEP,KAAK,CAAC,WAAmB,UACvB,OAAO,IAAI,2BAA2B;AAAA,QACpC,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;AAAA,MACvC,CAAC;AAAA,IACL;AAAA,EACF;AACF;","names":["options"]}
|