@usethrottle/catalog 1.3.0 → 1.4.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +105 -9
  3. package/dist/admin.cjs +16 -16
  4. package/dist/admin.d.cts +14 -2
  5. package/dist/admin.d.ts +14 -2
  6. package/dist/admin.js +1 -1
  7. package/dist/{catalog-error-BOaSKgY3.d.cts → catalog-error-BKN5hNWP.d.cts} +1 -1
  8. package/dist/{catalog-error-CSoPS0-d.d.ts → catalog-error-BnabMMEy.d.ts} +1 -1
  9. package/dist/{chunk-CADIHOIR.js → chunk-3FX2HISB.js} +89 -2
  10. package/dist/{chunk-2YQNMBDI.cjs → chunk-J2GHGQY6.cjs} +274 -38
  11. package/dist/{chunk-GU63WFXI.cjs → chunk-OKWXS3FD.cjs} +102 -15
  12. package/dist/chunk-PZ3SFYH4.cjs +192 -0
  13. package/dist/chunk-SN6STYPW.js +192 -0
  14. package/dist/{chunk-3DLH56OX.js → chunk-VJHA7J7B.js} +258 -22
  15. package/dist/{client-B3mL2-xJ.d.ts → client-B6CsU_v9.d.ts} +1 -1
  16. package/dist/{client-6j1Iz-iJ.d.cts → client-terkEl6u.d.cts} +1 -1
  17. package/dist/{contract-types-BRyonOYH.d.cts → contract-types-D2-SSPM9.d.cts} +230 -2
  18. package/dist/{contract-types-BRyonOYH.d.ts → contract-types-D2-SSPM9.d.ts} +230 -2
  19. package/dist/index.cjs +12 -2
  20. package/dist/index.d.cts +53 -7
  21. package/dist/index.d.ts +53 -7
  22. package/dist/index.js +11 -1
  23. package/dist/next.cjs +180 -0
  24. package/dist/next.d.cts +60 -0
  25. package/dist/next.d.ts +60 -0
  26. package/dist/next.js +180 -0
  27. package/dist/react-extras.cjs +27 -9
  28. package/dist/react-extras.d.cts +6 -4
  29. package/dist/react-extras.d.ts +6 -4
  30. package/dist/react-extras.js +20 -2
  31. package/dist/react.cjs +18 -14
  32. package/dist/react.d.cts +22 -5
  33. package/dist/react.d.ts +22 -5
  34. package/dist/react.js +6 -2
  35. package/dist/server.cjs +58 -66
  36. package/dist/server.d.cts +57 -10
  37. package/dist/server.d.ts +57 -10
  38. package/dist/server.js +52 -60
  39. package/dist/{types-D0PywKnN.d.cts → types-jNpOwEUw.d.cts} +40 -3
  40. package/dist/{types-BfveENg1.d.ts → types-z57bkjjB.d.ts} +40 -3
  41. package/dist/url.d.cts +1 -1
  42. package/dist/url.d.ts +1 -1
  43. package/dist/{use-query-CR7r5tam.d.ts → use-query-COqRZJnC.d.ts} +1 -1
  44. package/dist/{use-query-UWf6Pi5g.d.cts → use-query-H1xgL3_e.d.cts} +1 -1
  45. package/package.json +15 -1
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-PKBMQBKP.js";
4
4
 
5
5
  // src/version.ts
6
- var SDK_VERSION = true ? "1.3.0" : "0.0.0-dev";
6
+ var SDK_VERSION = true ? "1.4.0" : "0.0.0-dev";
7
7
 
8
8
  // src/index.ts
9
9
  import * as money from "@usethrottle/money";
@@ -140,7 +140,6 @@ var SUGGEST_MIN_CHARS = 2;
140
140
  var INDEXING_REVALIDATE_MS = 3e4;
141
141
  var CACHE_TAG = "throttle-catalog";
142
142
  var TAG_MAX_CHARS = 256;
143
- var DEFAULT_REVALIDATE_S = 60;
144
143
  var LIST_PAGE_SIZE = 100;
145
144
  var LIST_MAX_HANDLES = 5e4;
146
145
  var CATEGORY_TREE_MAX_DEPTH = 10;
@@ -182,6 +181,8 @@ var ERROR_KINDS = Object.freeze({
182
181
  ALREADY_REVIEWED: "base",
183
182
  REVIEW_QUEUE_FULL: "rateLimited",
184
183
  REVIEW_VERIFICATION_UNAVAILABLE: "base",
184
+ PAGE_NOT_FOUND: "base",
185
+ PREVIEW_EXPIRED: "base",
185
186
  // Throttle cart-session codes.
186
187
  price_locked: "base",
187
188
  quantity_unavailable: "cartLine",
@@ -388,7 +389,8 @@ var RESERVED_HEADERS = /* @__PURE__ */ new Set([
388
389
  "x-customer-token",
389
390
  "if-none-match",
390
391
  "idempotency-key",
391
- "content-type"
392
+ "content-type",
393
+ "x-storefront-preview"
392
394
  ]);
393
395
  var MAX_TIMEOUT_MS = 2147483647;
394
396
  function optionError(code, message) {
@@ -439,6 +441,16 @@ function checkTimeout(timeoutMs) {
439
441
  }
440
442
  return Math.min(timeoutMs, MAX_TIMEOUT_MS);
441
443
  }
444
+ function checkPreviewToken(token) {
445
+ if (token === void 0 || token === "") return void 0;
446
+ if (typeof token !== "string" || !/^[\x21-\x7e]+$/u.test(token)) {
447
+ throw optionError(
448
+ "INVALID_REQUEST",
449
+ "previewToken must be a string of visible ASCII characters."
450
+ );
451
+ }
452
+ return token;
453
+ }
442
454
  function checkBaseUrl(baseUrl) {
443
455
  if (!isHttpUrl(baseUrl)) {
444
456
  throw optionError(
@@ -473,7 +485,8 @@ function resolveOptions(options) {
473
485
  cacheScope: options.cacheScope,
474
486
  indexingMaxWaitSeconds: retry === false ? null : retry?.maxWaitSeconds ?? INDEXING_MAX_WAIT_S,
475
487
  headers: checkHeaders(options.headers),
476
- keyInQuery: keyInQuery === true
488
+ keyInQuery: keyInQuery === true,
489
+ previewToken: checkPreviewToken(options.previewToken)
477
490
  };
478
491
  }
479
492
 
@@ -635,7 +648,8 @@ function createTransport(o) {
635
648
  }
636
649
  let cacheKey;
637
650
  let cached;
638
- const bypassCache = spec.tokenFree === true && keyInUrl;
651
+ const previewToken = spec.preview === true ? o.previewToken : void 0;
652
+ const bypassCache = spec.tokenFree === true && keyInUrl || previewToken !== void 0;
639
653
  if (isGet && !bypassCache && o.cache !== void 0 && spec.ifNoneMatch === void 0) {
640
654
  try {
641
655
  const scope = o.cacheScope === void 0 || spec.tokenFree === true ? "" : o.cacheScope();
@@ -653,6 +667,8 @@ function createTransport(o) {
653
667
  if (!keyInUrl) headers["x-catalog-key"] = o.publishableKey;
654
668
  if (!isGet) headers["content-type"] = "application/json";
655
669
  if (ifNoneMatch !== void 0) headers["if-none-match"] = ifNoneMatch;
670
+ if (previewToken !== void 0)
671
+ headers["x-storefront-preview"] = previewToken;
656
672
  if (spec.idempotencyKey !== void 0)
657
673
  headers["idempotency-key"] = spec.idempotencyKey;
658
674
  const body = isGet ? void 0 : JSON.stringify(spec.body ?? {});
@@ -677,7 +693,7 @@ function createTransport(o) {
677
693
  method: spec.method,
678
694
  headers: token === null ? headers : { ...headers, "x-customer-token": token }
679
695
  };
680
- if (token !== null) {
696
+ if (token !== null || previewToken !== void 0) {
681
697
  delete init.next;
682
698
  init.cache = "no-store";
683
699
  } else if (call.next !== void 0) init.next = call.next;
@@ -915,8 +931,47 @@ function createCarts(transport, options) {
915
931
  };
916
932
  }
917
933
 
918
- // src/core/products.ts
934
+ // src/core/pages.ts
919
935
  var SF = "/v1/storefront";
936
+ function createPages(transport) {
937
+ return {
938
+ list: (call) => read(
939
+ transport,
940
+ {
941
+ method: "GET",
942
+ path: `${SF}/pages`,
943
+ query: buildQuery({ minGeneration: call?.minGeneration }, [
944
+ "minGeneration"
945
+ ]),
946
+ customerToken: "none",
947
+ tokenFallback: "anonymous",
948
+ featureRoute: true,
949
+ context: "locale",
950
+ preview: true
951
+ },
952
+ call
953
+ ),
954
+ get: (handle, call) => read(
955
+ transport,
956
+ {
957
+ method: "GET",
958
+ path: `${SF}/pages/${pathSegment(handle)}`,
959
+ query: buildQuery({ minGeneration: call?.minGeneration }, [
960
+ "minGeneration"
961
+ ]),
962
+ customerToken: "none",
963
+ tokenFallback: "anonymous",
964
+ featureRoute: false,
965
+ context: "locale",
966
+ preview: true
967
+ },
968
+ call
969
+ )
970
+ };
971
+ }
972
+
973
+ // src/core/products.ts
974
+ var SF2 = "/v1/storefront";
920
975
  var LIST_ORDER = [
921
976
  "q",
922
977
  "category",
@@ -978,7 +1033,7 @@ function createProducts(transport) {
978
1033
  transport,
979
1034
  {
980
1035
  method: "GET",
981
- path: `${SF}/products`,
1036
+ path: `${SF2}/products`,
982
1037
  query: productsQuery(query),
983
1038
  customerToken: "optional",
984
1039
  tokenFallback: "anonymous",
@@ -991,7 +1046,7 @@ function createProducts(transport) {
991
1046
  transport,
992
1047
  {
993
1048
  method: "GET",
994
- path: `${SF}/products/${pathSegment(handle)}`,
1049
+ path: `${SF2}/products/${pathSegment(handle)}`,
995
1050
  // Always the full product (P6-R18).
996
1051
  query: buildQuery(
997
1052
  { fields: "full", include: commaList(opts?.include) },
@@ -1008,7 +1063,7 @@ function createProducts(transport) {
1008
1063
  transport,
1009
1064
  {
1010
1065
  method: "GET",
1011
- path: `${SF}/products/${pathSegment(handle)}/related`,
1066
+ path: `${SF2}/products/${pathSegment(handle)}/related`,
1012
1067
  query: buildQuery(
1013
1068
  { limit: opts?.limit, fields: commaList(opts?.fields) },
1014
1069
  ["limit", "fields"]
@@ -1028,7 +1083,7 @@ function createFilters(transport) {
1028
1083
  transport,
1029
1084
  {
1030
1085
  method: "GET",
1031
- path: `${SF}/filters/${pathSegment(key)}/values`,
1086
+ path: `${SF2}/filters/${pathSegment(key)}/values`,
1032
1087
  query: productsQuery(query),
1033
1088
  customerToken: "none",
1034
1089
  tokenFallback: "anonymous",
@@ -1045,7 +1100,7 @@ function createSuggest(transport) {
1045
1100
  transport,
1046
1101
  {
1047
1102
  method: "GET",
1048
- path: `${SF}/suggest`,
1103
+ path: `${SF2}/suggest`,
1049
1104
  query: buildQuery({ q, limit: opts?.limit }, ["q", "limit"]),
1050
1105
  // Never a customer token (P8-R22): list prices for everyone.
1051
1106
  customerToken: "none",
@@ -1113,15 +1168,184 @@ function createReviews(transport) {
1113
1168
  };
1114
1169
  }
1115
1170
 
1171
+ // src/core/settings.ts
1172
+ var DEFAULT_STRINGS = {
1173
+ "shop.title": "Shop",
1174
+ "shop.description": "Browse the full catalog.",
1175
+ "search.title": "Search",
1176
+ "search.placeholder": "Search products",
1177
+ "search.results": 'Results for "{q}"',
1178
+ "empty.search": "No results found. Try a different search.",
1179
+ "empty.listing": "No products match your filters.",
1180
+ "empty.category": "No products in this category yet.",
1181
+ "empty.collection": "No products in this collection yet.",
1182
+ "empty.cart": "Your cart is empty.",
1183
+ "cart.title": "Cart",
1184
+ "cart.checkout": "Checkout",
1185
+ "cart.continueShopping": "Continue shopping",
1186
+ "filters.title": "Filters",
1187
+ "filters.clearAll": "Clear all",
1188
+ "filters.apply": "Apply",
1189
+ "filters.showMore": "Show more",
1190
+ "filters.showLess": "Show less",
1191
+ "filters.priceMin": "Min",
1192
+ "filters.priceMax": "Max",
1193
+ "boolean.yes": "Yes",
1194
+ "boolean.no": "No",
1195
+ "sort.label": "Sort by",
1196
+ "listing.count": "{count} products",
1197
+ "listing.loadMore": "Load more",
1198
+ "listing.loading": "Loading\u2026",
1199
+ "listing.previous": "Previous",
1200
+ "listing.next": "Next",
1201
+ "product.addToCart": "Add to cart",
1202
+ "product.quantity": "Quantity",
1203
+ "product.selectOption": "Select {option}",
1204
+ "product.sku": "SKU",
1205
+ "product.description": "Description",
1206
+ "product.specs": "Specifications",
1207
+ "product.shipping": "Shipping",
1208
+ "product.tags": "Tags",
1209
+ "product.categories": "Categories",
1210
+ "product.related": "You may also like",
1211
+ "product.reviews": "Reviews",
1212
+ "product.noReviews": "No reviews yet.",
1213
+ "product.writeReview": "Write a review",
1214
+ "home.shopAll": "Shop all",
1215
+ "home.featured": "Featured",
1216
+ "home.newest": "New arrivals",
1217
+ "home.bestRated": "Best rated",
1218
+ "home.categories": "Shop by category",
1219
+ "footer.copyright": "\xA9 {year} {store}. All rights reserved.",
1220
+ "nav.menu": "Menu",
1221
+ "nav.account": "Account",
1222
+ "nav.cart": "Cart",
1223
+ "error.notFound": "Page not found",
1224
+ "error.generic": "Something went wrong. Please try again."
1225
+ };
1226
+ function t(settings, key, vars) {
1227
+ const text = settings?.strings?.[key] || DEFAULT_STRINGS[key];
1228
+ return vars === void 0 ? text : text.replace(
1229
+ /\{(\w+)\}/gu,
1230
+ (whole, name) => Object.hasOwn(vars, name) ? String(vars[name]) : whole
1231
+ );
1232
+ }
1233
+ function fill(pattern, name, value) {
1234
+ return pattern.split(`{${name}}`).join(encodeURIComponent(value));
1235
+ }
1236
+ var SAFE_HREF = /^(?:https?:\/\/[^\s]|\/(?![/\\]))/iu;
1237
+ var UNSAFE_CHARACTER2 = /[\u0000-\u0020\u007f\s]/u;
1238
+ function resolveMenuTarget(settings, target) {
1239
+ const { routes } = settings;
1240
+ const { kind, handle, q, href } = target;
1241
+ switch (kind) {
1242
+ case "product":
1243
+ case "category":
1244
+ case "collection":
1245
+ case "page":
1246
+ return handle === void 0 ? null : fill(routes[kind], "handle", handle);
1247
+ case "search":
1248
+ return q === void 0 ? null : fill(routes.search, "q", q);
1249
+ case "url":
1250
+ return href !== void 0 && !UNSAFE_CHARACTER2.test(href) && SAFE_HREF.test(href) ? href : null;
1251
+ default:
1252
+ return null;
1253
+ }
1254
+ }
1255
+ var SERIF = /* @__PURE__ */ new Set([
1256
+ "Instrument Serif",
1257
+ "Playfair Display",
1258
+ "Lora",
1259
+ "Merriweather",
1260
+ "Cormorant Garamond",
1261
+ "EB Garamond",
1262
+ "Libre Baskerville",
1263
+ "Source Serif 4",
1264
+ "Fraunces",
1265
+ "DM Serif Display"
1266
+ ]);
1267
+ var MONO = /* @__PURE__ */ new Set([
1268
+ "DM Mono",
1269
+ "JetBrains Mono",
1270
+ "IBM Plex Mono",
1271
+ "Space Mono"
1272
+ ]);
1273
+ var WEIGHTS_OF = {
1274
+ "Instrument Serif": [400],
1275
+ "DM Serif Display": [400],
1276
+ "Bebas Neue": [400],
1277
+ "Archivo Black": [400],
1278
+ Merriweather: [400, 700],
1279
+ "Libre Baskerville": [400, 700],
1280
+ Lato: [400, 700],
1281
+ "Space Mono": [400, 700],
1282
+ "DM Mono": [400, 500]
1283
+ };
1284
+ var STACKS = {
1285
+ sans: "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
1286
+ serif: "Georgia, 'Times New Roman', serif",
1287
+ mono: "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
1288
+ };
1289
+ function fontStylesheetHref(theme) {
1290
+ const families = /* @__PURE__ */ new Set();
1291
+ for (const family of [
1292
+ theme.fonts.heading,
1293
+ theme.fonts.body,
1294
+ theme.fonts.mono
1295
+ ])
1296
+ if (!family.startsWith("system-")) families.add(family);
1297
+ if (families.size === 0) return null;
1298
+ let href = "https://fonts.googleapis.com/css2?";
1299
+ for (const family of families) {
1300
+ const weights = WEIGHTS_OF[family] ?? [400, 500, 600, 700];
1301
+ href += `family=${family.replace(/ /gu, "+")}:wght@${weights.join(";")}&`;
1302
+ }
1303
+ return `${href}display=swap`;
1304
+ }
1305
+ function fontStack(family) {
1306
+ if (family.startsWith("system-"))
1307
+ return STACKS[family.slice(7)] ?? STACKS.sans;
1308
+ const kind = SERIF.has(family) ? "serif" : MONO.has(family) ? "mono" : "sans";
1309
+ return `'${family}', ${STACKS[kind]}`;
1310
+ }
1311
+ function toAuthAppearance(theme, scheme) {
1312
+ const p = theme[scheme];
1313
+ return {
1314
+ theme: scheme,
1315
+ variables: {
1316
+ colorPrimary: p.colorPrimary,
1317
+ colorPrimaryForeground: p.colorPrimaryForeground,
1318
+ colorBackground: p.colorBackground,
1319
+ colorSurface: p.colorSurface,
1320
+ colorForeground: p.colorForeground,
1321
+ colorMuted: p.colorMuted,
1322
+ colorMutedForeground: p.colorMutedForeground,
1323
+ colorBorder: p.colorBorder,
1324
+ colorBorderControl: p.colorBorderControl,
1325
+ colorDanger: p.colorDanger,
1326
+ colorSuccess: p.colorSuccess,
1327
+ colorWarning: p.colorWarning,
1328
+ fontFamily: fontStack(theme.fonts.body),
1329
+ borderRadius: `${theme.radius}px`
1330
+ }
1331
+ };
1332
+ }
1333
+ function createSettings(config) {
1334
+ return async (call) => {
1335
+ const { settings, settingsVersion, generation } = await config(call);
1336
+ return { settings, settingsVersion, generation };
1337
+ };
1338
+ }
1339
+
1116
1340
  // src/core/taxonomy.ts
1117
- var SF2 = "/v1/storefront";
1341
+ var SF3 = "/v1/storefront";
1118
1342
  function createCategories(transport) {
1119
1343
  return {
1120
1344
  tree: (opts) => read(
1121
1345
  transport,
1122
1346
  {
1123
1347
  method: "GET",
1124
- path: `${SF2}/categories`,
1348
+ path: `${SF3}/categories`,
1125
1349
  query: buildQuery({ depth: opts?.depth }, ["depth"]),
1126
1350
  customerToken: "none",
1127
1351
  tokenFallback: "anonymous",
@@ -1134,7 +1358,7 @@ function createCategories(transport) {
1134
1358
  transport,
1135
1359
  {
1136
1360
  method: "GET",
1137
- path: `${SF2}/categories/${pathSegment(handle)}`,
1361
+ path: `${SF3}/categories/${pathSegment(handle)}`,
1138
1362
  customerToken: "none",
1139
1363
  tokenFallback: "anonymous",
1140
1364
  featureRoute: false,
@@ -1150,7 +1374,7 @@ function createTags(transport) {
1150
1374
  transport,
1151
1375
  {
1152
1376
  method: "GET",
1153
- path: `${SF2}/tags`,
1377
+ path: `${SF3}/tags`,
1154
1378
  query: buildQuery({ q: opts?.q, limit: opts?.limit }, ["q", "limit"]),
1155
1379
  customerToken: "none",
1156
1380
  tokenFallback: "anonymous",
@@ -1166,7 +1390,7 @@ function createCollections(transport) {
1166
1390
  transport,
1167
1391
  {
1168
1392
  method: "GET",
1169
- path: `${SF2}/collections`,
1393
+ path: `${SF3}/collections`,
1170
1394
  query: buildQuery({ limit: opts?.limit, cursor: opts?.cursor }, [
1171
1395
  "limit",
1172
1396
  "cursor"
@@ -1182,7 +1406,7 @@ function createCollections(transport) {
1182
1406
  transport,
1183
1407
  {
1184
1408
  method: "GET",
1185
- path: `${SF2}/collections/${pathSegment(handle)}`,
1409
+ path: `${SF3}/collections/${pathSegment(handle)}`,
1186
1410
  customerToken: "none",
1187
1411
  tokenFallback: "anonymous",
1188
1412
  featureRoute: false,
@@ -1197,10 +1421,15 @@ function createConfig(transport) {
1197
1421
  transport,
1198
1422
  {
1199
1423
  method: "GET",
1200
- path: `${SF2}/config`,
1424
+ path: `${SF3}/config`,
1425
+ query: buildQuery({ minGeneration: call?.minGeneration }, [
1426
+ "minGeneration"
1427
+ ]),
1201
1428
  customerToken: "none",
1202
1429
  tokenFallback: "anonymous",
1203
- featureRoute: true
1430
+ featureRoute: true,
1431
+ context: "locale",
1432
+ preview: true
1204
1433
  },
1205
1434
  call
1206
1435
  );
@@ -1213,6 +1442,7 @@ var TRANSPORT = Symbol.for(
1213
1442
  function createCatalogClient(options) {
1214
1443
  const resolved = resolveOptions(options);
1215
1444
  const transport = createTransport(resolved);
1445
+ const config = createConfig(transport);
1216
1446
  return {
1217
1447
  [TRANSPORT]: transport,
1218
1448
  products: createProducts(transport),
@@ -1221,7 +1451,9 @@ function createCatalogClient(options) {
1221
1451
  tags: createTags(transport),
1222
1452
  collections: createCollections(transport),
1223
1453
  suggest: createSuggest(transport),
1224
- config: createConfig(transport),
1454
+ config,
1455
+ settings: createSettings(config),
1456
+ pages: createPages(transport),
1225
1457
  reviews: createReviews(transport),
1226
1458
  carts: createCarts(transport, resolved)
1227
1459
  };
@@ -1248,10 +1480,14 @@ export {
1248
1480
  INDEXING_REVALIDATE_MS,
1249
1481
  CACHE_TAG,
1250
1482
  TAG_MAX_CHARS,
1251
- DEFAULT_REVALIDATE_S,
1252
1483
  LIST_PAGE_SIZE,
1253
1484
  LIST_MAX_HANDLES,
1254
1485
  CATEGORY_TREE_MAX_DEPTH,
1486
+ DEFAULT_STRINGS,
1487
+ t,
1488
+ resolveMenuTarget,
1489
+ fontStylesheetHref,
1490
+ toAuthAppearance,
1255
1491
  createCatalogClient,
1256
1492
  money,
1257
1493
  CURRENCIES,
@@ -1,4 +1,4 @@
1
- import { y as RequestSpec, c as CallOptions, o as CatalogNamespaces, l as CatalogClientOptions } from './types-BfveENg1.js';
1
+ import { D as RequestSpec, c as CallOptions, o as CatalogNamespaces, l as CatalogClientOptions } from './types-z57bkjjB.js';
2
2
 
3
3
  /** A `304` is possible only when `ifNoneMatch` (not the client cache) sent `If-None-Match`. */
4
4
  type TransportResult<T> = {
@@ -1,4 +1,4 @@
1
- import { y as RequestSpec, c as CallOptions, o as CatalogNamespaces, l as CatalogClientOptions } from './types-D0PywKnN.cjs';
1
+ import { D as RequestSpec, c as CallOptions, o as CatalogNamespaces, l as CatalogClientOptions } from './types-jNpOwEUw.cjs';
2
2
 
3
3
  /** A `304` is possible only when `ifNoneMatch` (not the client cache) sent `If-None-Match`. */
4
4
  type TransportResult<T> = {