@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 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
- delete?: never;
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: "price-index";
4002
+ resource: "market-metadata-index";
3437
4003
  /** @enum {string} */
3438
- namespace: "/v1/price-index";
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
- /** @enum {boolean} */
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
- process: string | null;
3452
- grade: string | null;
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: "price_index_snapshots";
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?: string;
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?: string | string[];
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":"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","names":["options"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purveyors/sdk",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Typed client for the Purveyors Parchment API, generated from its OpenAPI spec.",
5
5
  "license": "MIT",
6
6
  "type": "module",