@01.software/sdk 0.30.1 → 0.31.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 (46) hide show
  1. package/README.md +74 -20
  2. package/dist/client.cjs +81 -16
  3. package/dist/client.cjs.map +1 -1
  4. package/dist/client.d.cts +6 -6
  5. package/dist/client.d.ts +6 -6
  6. package/dist/client.js +81 -16
  7. package/dist/client.js.map +1 -1
  8. package/dist/{collection-client-B9d9kr1d.d.ts → collection-client-ByzY3hWK.d.ts} +3 -3
  9. package/dist/{collection-client-QPbwimkU.d.cts → collection-client-DFXXz0vk.d.cts} +3 -3
  10. package/dist/{const-VZuk2tWc.d.cts → const-AytzliEu.d.cts} +4 -4
  11. package/dist/{const-B75IFDRi.d.ts → const-BGCP-OJL.d.ts} +4 -4
  12. package/dist/{index-B2WbhEgT.d.cts → index-BGEhoDUs.d.cts} +1 -1
  13. package/dist/{index-B2WbhEgT.d.ts → index-BGEhoDUs.d.ts} +1 -1
  14. package/dist/index.cjs +156 -19
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.cts +8 -8
  17. package/dist/index.d.ts +8 -8
  18. package/dist/index.js +156 -19
  19. package/dist/index.js.map +1 -1
  20. package/dist/{payload-types-DPjO_IbQ.d.cts → payload-types-Wa4-eC6x.d.cts} +790 -534
  21. package/dist/{payload-types-DPjO_IbQ.d.ts → payload-types-Wa4-eC6x.d.ts} +790 -534
  22. package/dist/query.cjs +63 -13
  23. package/dist/query.cjs.map +1 -1
  24. package/dist/query.d.cts +6 -6
  25. package/dist/query.d.ts +6 -6
  26. package/dist/query.js +63 -13
  27. package/dist/query.js.map +1 -1
  28. package/dist/realtime.d.cts +2 -2
  29. package/dist/realtime.d.ts +2 -2
  30. package/dist/server.cjs +142 -17
  31. package/dist/server.cjs.map +1 -1
  32. package/dist/server.d.cts +32 -7
  33. package/dist/server.d.ts +32 -7
  34. package/dist/server.js +142 -17
  35. package/dist/server.js.map +1 -1
  36. package/dist/{types-Dlb2mwpX.d.cts → types-BX2mqDf6.d.ts} +46 -6
  37. package/dist/{types-1fBLrYU7.d.ts → types-CVA10VC-.d.ts} +6 -2
  38. package/dist/{types-BwT0eeaz.d.cts → types-CmLG-7RL.d.cts} +6 -2
  39. package/dist/{types-DuSKPiY5.d.ts → types-DChFjQGz.d.cts} +46 -6
  40. package/dist/ui/form.d.cts +1 -1
  41. package/dist/ui/form.d.ts +1 -1
  42. package/dist/ui/video.d.cts +1 -1
  43. package/dist/ui/video.d.ts +1 -1
  44. package/dist/webhook.d.cts +3 -3
  45. package/dist/webhook.d.ts +3 -3
  46. package/package.json +1 -1
package/dist/server.d.cts CHANGED
@@ -1,10 +1,10 @@
1
- import { S as ServerCollectionClient } from './collection-client-QPbwimkU.cjs';
2
- export { C as CollectionClient } from './collection-client-QPbwimkU.cjs';
3
- import { B as BaseApi, aJ as ServerApiOptions, aM as StockCheckParams, aN as StockCheckResponse, Y as ListingGroupsParams, am as ProductListingGroupsResponse, ab as ProductDetailParams, a2 as ProductDetail, bc as ProductUpsertParams, bd as ProductUpsertResponse, k as AddItemParams, aQ as UpdateItemParams, aE as RemoveItemParams, l as ApplyDiscountParams, aD as RemoveDiscountParams, t as ClearCartParams, s as CheckoutParams, G as CreateOrderParams, aR as UpdateOrderParams, aU as UpdateTransactionParams, y as ConfirmPaymentParams, z as ConfirmPaymentResponse, F as CreateFulfillmentParams, aP as UpdateFulfillmentParams, m as BulkImportFulfillmentsParams, n as BulkImportFulfillmentsResponse, H as CreateReturnParams, aT as UpdateReturnParams, aI as ReturnWithRefundParams, aV as ValidateDiscountParams, aW as ValidateDiscountResult, o as CalculateShippingParams, p as CalculateShippingResult, a as CommunityClient, c as ClientState, be as ClientServerConfig } from './types-Dlb2mwpX.cjs';
4
- import { h as Cart, i as CartItem, O as Order, m as Transaction, n as Fulfillment, o as Return } from './payload-types-DPjO_IbQ.cjs';
1
+ import { S as ServerCollectionClient } from './collection-client-DFXXz0vk.cjs';
2
+ export { C as CollectionClient } from './collection-client-DFXXz0vk.cjs';
3
+ import { B as BaseApi, aN as ServerApiOptions, aQ as StockCheckParams, aR as StockCheckResponse, Y as ListingGroupsParams, ap as ProductListingGroupsResponse, ab as ProductDetailParams, a2 as ProductDetail, bh as ProductDetailPreviewParams, bi as ProductDetailPreviewOptions, bj as ProductUpsertParams, bk as ProductUpsertResponse, k as AddItemParams, aU as UpdateItemParams, aI as RemoveItemParams, l as ApplyDiscountParams, aH as RemoveDiscountParams, t as ClearCartParams, s as CheckoutParams, G as CreateOrderParams, aV as UpdateOrderParams, aY as UpdateTransactionParams, y as ConfirmPaymentParams, z as ConfirmPaymentResponse, F as CreateFulfillmentParams, aT as UpdateFulfillmentParams, m as BulkImportFulfillmentsParams, n as BulkImportFulfillmentsResponse, H as CreateReturnParams, aX as UpdateReturnParams, aM as ReturnWithRefundParams, aZ as ValidateDiscountParams, a_ as ValidateDiscountResult, o as CalculateShippingParams, p as CalculateShippingResult, a as CommunityClient, c as ClientState, bl as ClientServerConfig } from './types-DChFjQGz.cjs';
4
+ import { i as Cart, j as CartItem, O as Order, n as Transaction, o as Fulfillment, p as Return } from './payload-types-Wa4-eC6x.cjs';
5
5
  import './metadata.cjs';
6
- import './const-VZuk2tWc.cjs';
7
- import './types-BwT0eeaz.cjs';
6
+ import './const-AytzliEu.cjs';
7
+ import './types-CmLG-7RL.cjs';
8
8
 
9
9
  type ModerationApiOptions = ServerApiOptions;
10
10
  interface CommunityBan {
@@ -45,6 +45,7 @@ declare class ServerCommerceClient {
45
45
  stockCheck: (params: StockCheckParams) => Promise<StockCheckResponse>;
46
46
  listingGroups: (params: ListingGroupsParams) => Promise<ProductListingGroupsResponse>;
47
47
  detail: (params: ProductDetailParams) => Promise<ProductDetail | null>;
48
+ previewDetail: (params: ProductDetailPreviewParams, options: ProductDetailPreviewOptions) => Promise<ProductDetail | null>;
48
49
  upsert: (params: ProductUpsertParams) => Promise<ProductUpsertResponse>;
49
50
  };
50
51
  readonly cart: {
@@ -85,6 +86,27 @@ declare class ServerCommerceClient {
85
86
  constructor(options: ServerCommerceClientOptions);
86
87
  }
87
88
 
89
+ type PreviewDetailParams = {
90
+ collection: string;
91
+ id: string;
92
+ };
93
+ type PreviewDetailOptions = {
94
+ previewToken: string;
95
+ };
96
+ /**
97
+ * Server-side client for the generic preview detail endpoint
98
+ * (`POST /api/preview/detail`). Returns `null` on 404 so callers can
99
+ * branch on missing previews without try/catch noise.
100
+ *
101
+ * Auth uses the standard server credentials (`secretKey` +
102
+ * `publishableKey`) plus the short-lived `X-Preview-Token` header issued
103
+ * by the Console preview start endpoint.
104
+ */
105
+ declare class ServerPreviewClient extends BaseApi {
106
+ constructor(options: ServerApiOptions);
107
+ detail<T = unknown>(params: PreviewDetailParams, options: PreviewDetailOptions): Promise<T | null>;
108
+ }
109
+
88
110
  declare class ServerClient {
89
111
  commerce: ServerCommerceClient;
90
112
  community: CommunityClient & {
@@ -95,6 +117,9 @@ declare class ServerClient {
95
117
  }>;
96
118
  };
97
119
  };
120
+ preview: {
121
+ detail: <T = unknown>(params: PreviewDetailParams, options: PreviewDetailOptions) => Promise<T | null>;
122
+ };
98
123
  collections: ServerCollectionClient;
99
124
  lastRequestId: string | null;
100
125
  protected state: ClientState;
@@ -109,4 +134,4 @@ declare class ServerClient {
109
134
  */
110
135
  declare function createServerClient(options: ClientServerConfig): ServerClient;
111
136
 
112
- export { ClientServerConfig, CommunityClient, ModerationApi, ServerClient, ServerCollectionClient, ServerCommerceClient, createServerClient };
137
+ export { ClientServerConfig, CommunityClient, ModerationApi, type PreviewDetailOptions, type PreviewDetailParams, ServerClient, ServerCollectionClient, ServerCommerceClient, ServerPreviewClient, createServerClient };
package/dist/server.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { S as ServerCollectionClient } from './collection-client-B9d9kr1d.js';
2
- export { C as CollectionClient } from './collection-client-B9d9kr1d.js';
3
- import { B as BaseApi, aJ as ServerApiOptions, aM as StockCheckParams, aN as StockCheckResponse, Y as ListingGroupsParams, am as ProductListingGroupsResponse, ab as ProductDetailParams, a2 as ProductDetail, bc as ProductUpsertParams, bd as ProductUpsertResponse, k as AddItemParams, aQ as UpdateItemParams, aE as RemoveItemParams, l as ApplyDiscountParams, aD as RemoveDiscountParams, t as ClearCartParams, s as CheckoutParams, G as CreateOrderParams, aR as UpdateOrderParams, aU as UpdateTransactionParams, y as ConfirmPaymentParams, z as ConfirmPaymentResponse, F as CreateFulfillmentParams, aP as UpdateFulfillmentParams, m as BulkImportFulfillmentsParams, n as BulkImportFulfillmentsResponse, H as CreateReturnParams, aT as UpdateReturnParams, aI as ReturnWithRefundParams, aV as ValidateDiscountParams, aW as ValidateDiscountResult, o as CalculateShippingParams, p as CalculateShippingResult, a as CommunityClient, c as ClientState, be as ClientServerConfig } from './types-DuSKPiY5.js';
4
- import { h as Cart, i as CartItem, O as Order, m as Transaction, n as Fulfillment, o as Return } from './payload-types-DPjO_IbQ.js';
1
+ import { S as ServerCollectionClient } from './collection-client-ByzY3hWK.js';
2
+ export { C as CollectionClient } from './collection-client-ByzY3hWK.js';
3
+ import { B as BaseApi, aN as ServerApiOptions, aQ as StockCheckParams, aR as StockCheckResponse, Y as ListingGroupsParams, ap as ProductListingGroupsResponse, ab as ProductDetailParams, a2 as ProductDetail, bh as ProductDetailPreviewParams, bi as ProductDetailPreviewOptions, bj as ProductUpsertParams, bk as ProductUpsertResponse, k as AddItemParams, aU as UpdateItemParams, aI as RemoveItemParams, l as ApplyDiscountParams, aH as RemoveDiscountParams, t as ClearCartParams, s as CheckoutParams, G as CreateOrderParams, aV as UpdateOrderParams, aY as UpdateTransactionParams, y as ConfirmPaymentParams, z as ConfirmPaymentResponse, F as CreateFulfillmentParams, aT as UpdateFulfillmentParams, m as BulkImportFulfillmentsParams, n as BulkImportFulfillmentsResponse, H as CreateReturnParams, aX as UpdateReturnParams, aM as ReturnWithRefundParams, aZ as ValidateDiscountParams, a_ as ValidateDiscountResult, o as CalculateShippingParams, p as CalculateShippingResult, a as CommunityClient, c as ClientState, bl as ClientServerConfig } from './types-BX2mqDf6.js';
4
+ import { i as Cart, j as CartItem, O as Order, n as Transaction, o as Fulfillment, p as Return } from './payload-types-Wa4-eC6x.js';
5
5
  import './metadata.js';
6
- import './const-B75IFDRi.js';
7
- import './types-1fBLrYU7.js';
6
+ import './const-BGCP-OJL.js';
7
+ import './types-CVA10VC-.js';
8
8
 
9
9
  type ModerationApiOptions = ServerApiOptions;
10
10
  interface CommunityBan {
@@ -45,6 +45,7 @@ declare class ServerCommerceClient {
45
45
  stockCheck: (params: StockCheckParams) => Promise<StockCheckResponse>;
46
46
  listingGroups: (params: ListingGroupsParams) => Promise<ProductListingGroupsResponse>;
47
47
  detail: (params: ProductDetailParams) => Promise<ProductDetail | null>;
48
+ previewDetail: (params: ProductDetailPreviewParams, options: ProductDetailPreviewOptions) => Promise<ProductDetail | null>;
48
49
  upsert: (params: ProductUpsertParams) => Promise<ProductUpsertResponse>;
49
50
  };
50
51
  readonly cart: {
@@ -85,6 +86,27 @@ declare class ServerCommerceClient {
85
86
  constructor(options: ServerCommerceClientOptions);
86
87
  }
87
88
 
89
+ type PreviewDetailParams = {
90
+ collection: string;
91
+ id: string;
92
+ };
93
+ type PreviewDetailOptions = {
94
+ previewToken: string;
95
+ };
96
+ /**
97
+ * Server-side client for the generic preview detail endpoint
98
+ * (`POST /api/preview/detail`). Returns `null` on 404 so callers can
99
+ * branch on missing previews without try/catch noise.
100
+ *
101
+ * Auth uses the standard server credentials (`secretKey` +
102
+ * `publishableKey`) plus the short-lived `X-Preview-Token` header issued
103
+ * by the Console preview start endpoint.
104
+ */
105
+ declare class ServerPreviewClient extends BaseApi {
106
+ constructor(options: ServerApiOptions);
107
+ detail<T = unknown>(params: PreviewDetailParams, options: PreviewDetailOptions): Promise<T | null>;
108
+ }
109
+
88
110
  declare class ServerClient {
89
111
  commerce: ServerCommerceClient;
90
112
  community: CommunityClient & {
@@ -95,6 +117,9 @@ declare class ServerClient {
95
117
  }>;
96
118
  };
97
119
  };
120
+ preview: {
121
+ detail: <T = unknown>(params: PreviewDetailParams, options: PreviewDetailOptions) => Promise<T | null>;
122
+ };
98
123
  collections: ServerCollectionClient;
99
124
  lastRequestId: string | null;
100
125
  protected state: ClientState;
@@ -109,4 +134,4 @@ declare class ServerClient {
109
134
  */
110
135
  declare function createServerClient(options: ClientServerConfig): ServerClient;
111
136
 
112
- export { ClientServerConfig, CommunityClient, ModerationApi, ServerClient, ServerCollectionClient, ServerCommerceClient, createServerClient };
137
+ export { ClientServerConfig, CommunityClient, ModerationApi, type PreviewDetailOptions, type PreviewDetailParams, ServerClient, ServerCollectionClient, ServerCommerceClient, ServerPreviewClient, createServerClient };
package/dist/server.js CHANGED
@@ -45,8 +45,16 @@ var ValidationError = class extends SDKError {
45
45
  }
46
46
  };
47
47
  var ApiError = class extends SDKError {
48
- constructor(message, status, details, userMessage, suggestion) {
49
- super("API_ERROR", message, status, details, userMessage, suggestion);
48
+ constructor(message, status, details, userMessage, suggestion, requestId) {
49
+ super(
50
+ "API_ERROR",
51
+ message,
52
+ status,
53
+ details,
54
+ userMessage,
55
+ suggestion,
56
+ requestId
57
+ );
50
58
  this.name = "ApiError";
51
59
  }
52
60
  };
@@ -77,19 +85,43 @@ var UsageLimitError = class extends SDKError {
77
85
  };
78
86
  var AuthError = class extends SDKError {
79
87
  constructor(message, details, userMessage, suggestion, requestId) {
80
- super("auth_error", message, 401, details, userMessage, suggestion, requestId);
88
+ super(
89
+ "auth_error",
90
+ message,
91
+ 401,
92
+ details,
93
+ userMessage,
94
+ suggestion,
95
+ requestId
96
+ );
81
97
  this.name = "AuthError";
82
98
  }
83
99
  };
84
100
  var PermissionError = class extends SDKError {
85
101
  constructor(message, details, userMessage, suggestion, requestId) {
86
- super("permission_error", message, 403, details, userMessage, suggestion, requestId);
102
+ super(
103
+ "permission_error",
104
+ message,
105
+ 403,
106
+ details,
107
+ userMessage,
108
+ suggestion,
109
+ requestId
110
+ );
87
111
  this.name = "PermissionError";
88
112
  }
89
113
  };
90
114
  var NotFoundError = class extends SDKError {
91
115
  constructor(message, details, userMessage, suggestion, requestId) {
92
- super("not_found", message, 404, details, userMessage, suggestion, requestId);
116
+ super(
117
+ "not_found",
118
+ message,
119
+ 404,
120
+ details,
121
+ userMessage,
122
+ suggestion,
123
+ requestId
124
+ );
93
125
  this.name = "NotFoundError";
94
126
  }
95
127
  };
@@ -101,14 +133,22 @@ var ConflictError = class extends SDKError {
101
133
  };
102
134
  var RateLimitError = class extends SDKError {
103
135
  constructor(message, retryAfter, details, userMessage, suggestion, requestId) {
104
- super("rate_limit_exceeded", message, 429, details, userMessage, suggestion, requestId);
136
+ super(
137
+ "rate_limit_exceeded",
138
+ message,
139
+ 429,
140
+ details,
141
+ userMessage,
142
+ suggestion,
143
+ requestId
144
+ );
105
145
  this.name = "RateLimitError";
106
146
  this.retryAfter = retryAfter;
107
147
  }
108
148
  };
109
149
  var createNetworkError = (message, status, details, userMessage, suggestion) => new NetworkError(message, status, details, userMessage, suggestion);
110
150
  var createValidationError = (message, details, userMessage, suggestion, status) => new ValidationError(message, details, userMessage, suggestion, status);
111
- var createApiError = (message, status, details, userMessage, suggestion) => new ApiError(message, status, details, userMessage, suggestion);
151
+ var createApiError = (message, status, details, userMessage, suggestion, requestId) => new ApiError(message, status, details, userMessage, suggestion, requestId);
112
152
  var createConfigError = (message, details, userMessage, suggestion) => new ConfigError(message, details, userMessage, suggestion);
113
153
  var createTimeoutError = (message, details, userMessage, suggestion) => new TimeoutError(message, details, userMessage, suggestion);
114
154
  var createUsageLimitError = (message, usage, details, userMessage, suggestion) => new UsageLimitError(message, usage, details, userMessage, suggestion);
@@ -116,7 +156,14 @@ var createAuthError = (message, details, userMessage, suggestion, requestId) =>
116
156
  var createPermissionError = (message, details, userMessage, suggestion, requestId) => new PermissionError(message, details, userMessage, suggestion, requestId);
117
157
  var createNotFoundError = (message, details, userMessage, suggestion, requestId) => new NotFoundError(message, details, userMessage, suggestion, requestId);
118
158
  var createConflictError = (message, details, userMessage, suggestion, requestId) => new ConflictError(message, details, userMessage, suggestion, requestId);
119
- var createRateLimitError = (message, retryAfter, details, userMessage, suggestion, requestId) => new RateLimitError(message, retryAfter, details, userMessage, suggestion, requestId);
159
+ var createRateLimitError = (message, retryAfter, details, userMessage, suggestion, requestId) => new RateLimitError(
160
+ message,
161
+ retryAfter,
162
+ details,
163
+ userMessage,
164
+ suggestion,
165
+ requestId
166
+ );
120
167
 
121
168
  // src/core/internal/utils/credentials.ts
122
169
  function requirePublishableKeyForSecret(apiName, publishableKey, secretKey) {
@@ -156,6 +203,22 @@ function debugLog(debug, type, message, data) {
156
203
  console.groupEnd();
157
204
  }
158
205
  }
206
+ function redactSensitiveHeader(value) {
207
+ const prefix = value.toLowerCase().startsWith("bearer ") ? "Bearer " : "";
208
+ return value.length > 20 ? `${prefix}...****${value.slice(-8)}` : "****";
209
+ }
210
+ function redactSensitiveHeaders(headers) {
211
+ const redacted = Object.fromEntries(headers.entries());
212
+ if (redacted.authorization) {
213
+ redacted.authorization = redactSensitiveHeader(redacted.authorization);
214
+ }
215
+ if (redacted["x-preview-token"]) {
216
+ redacted["x-preview-token"] = redactSensitiveHeader(
217
+ redacted["x-preview-token"]
218
+ );
219
+ }
220
+ return redacted;
221
+ }
159
222
  function getErrorSuggestion(status) {
160
223
  if (status === 400)
161
224
  return "The request data failed validation. Check field values and types.";
@@ -230,6 +293,12 @@ async function parseErrorBody(response) {
230
293
  return fallback;
231
294
  }
232
295
  }
296
+ function getParsedErrorSuggestion(status, parsed) {
297
+ if (status === 403 && parsed.reason === "origin_not_allowed") {
298
+ return "Add the request origin to the tenant Browser API origins, then retry the browser request.";
299
+ }
300
+ return getErrorSuggestion(status);
301
+ }
233
302
  async function delay(ms) {
234
303
  return new Promise((resolve) => setTimeout(resolve, ms));
235
304
  }
@@ -243,7 +312,7 @@ function createHttpStatusError(status, parsed, details, requestId) {
243
312
  ...parsed.errors && { errors: parsed.errors },
244
313
  ...parsed.body && { body: parsed.body }
245
314
  };
246
- const suggestion = getErrorSuggestion(status);
315
+ const suggestion = getParsedErrorSuggestion(status, parsed);
247
316
  if (status === 400 || status === 422) {
248
317
  return attachRequestId(
249
318
  createValidationError(
@@ -349,11 +418,7 @@ async function httpFetch(url, options) {
349
418
  if (!headers.has("Content-Type") && requestInit.body && !(requestInit.body instanceof FormData)) {
350
419
  headers.set("Content-Type", "application/json");
351
420
  }
352
- const redactedHeaders = Object.fromEntries(headers.entries());
353
- if (redactedHeaders["authorization"]) {
354
- const token = redactedHeaders["authorization"];
355
- redactedHeaders["authorization"] = token.length > 20 ? `Bearer ...****${token.slice(-8)}` : "****";
356
- }
421
+ const redactedHeaders = redactSensitiveHeaders(headers);
357
422
  debugLog(debug, "request", url, {
358
423
  method: requestInit.method || "GET",
359
424
  headers: redactedHeaders,
@@ -371,7 +436,7 @@ async function httpFetch(url, options) {
371
436
  debugLog(debug, "response", url, {
372
437
  status: response.status,
373
438
  statusText: response.statusText,
374
- headers: Object.fromEntries(response.headers.entries())
439
+ headers: redactSensitiveHeaders(response.headers)
375
440
  });
376
441
  if (!response.ok) {
377
442
  if (isUsageLimitExceededResponse(response)) {
@@ -1020,7 +1085,7 @@ async function parseApiResponse(response, endpoint) {
1020
1085
  if (reason === "validation_failed") {
1021
1086
  throw attachRequestId(createValidationError(errorMessage, data, errorMessage), requestId);
1022
1087
  }
1023
- if (reason === "token_expired" || reason === "token_invalid" || reason === "key_invalid" || reason === "key_revoked") {
1088
+ if (reason === "token_expired" || reason === "token_invalid" || reason === "preview_token_invalid" || reason === "preview_token_required" || reason === "key_invalid" || reason === "key_revoked") {
1024
1089
  throw attachRequestId(createAuthError(errorMessage, data, errorMessage), requestId);
1025
1090
  }
1026
1091
  if (reason === "forbidden") {
@@ -1449,7 +1514,61 @@ var OrderApi = class extends BaseApi {
1449
1514
  }
1450
1515
  };
1451
1516
 
1517
+ // src/core/preview/server-preview-client.ts
1518
+ var ServerPreviewClient = class extends BaseApi {
1519
+ constructor(options) {
1520
+ super("ServerPreviewClient", options);
1521
+ }
1522
+ async detail(params, options) {
1523
+ let response;
1524
+ try {
1525
+ response = await httpFetch("/api/preview/detail", {
1526
+ method: "POST",
1527
+ apiUrl: this.apiUrl,
1528
+ publishableKey: this.publishableKey,
1529
+ secretKey: this.secretKey,
1530
+ body: JSON.stringify(params),
1531
+ headers: { "X-Preview-Token": options.previewToken }
1532
+ });
1533
+ } catch (err) {
1534
+ const id = err instanceof SDKError ? err.requestId ?? null : null;
1535
+ this.onRequestId?.(id);
1536
+ if (err instanceof NotFoundError) return null;
1537
+ throw err;
1538
+ }
1539
+ const requestId = response.headers.get("x-request-id") ?? null;
1540
+ this.onRequestId?.(requestId);
1541
+ try {
1542
+ return await response.json();
1543
+ } catch (err) {
1544
+ if (err instanceof SyntaxError) {
1545
+ throw createApiError(
1546
+ "Invalid JSON response from /api/preview/detail",
1547
+ 200,
1548
+ void 0,
1549
+ "Server returned an invalid response.",
1550
+ "Check if the API endpoint is available.",
1551
+ requestId ?? void 0
1552
+ );
1553
+ }
1554
+ throw err;
1555
+ }
1556
+ }
1557
+ };
1558
+
1452
1559
  // src/core/commerce/server-commerce-client.ts
1560
+ var PreviewProductApi = class extends ProductApi {
1561
+ constructor(options) {
1562
+ super(options);
1563
+ this.previewApi = new ServerPreviewClient(options);
1564
+ }
1565
+ async previewDetail(params, options) {
1566
+ return this.previewApi.detail(
1567
+ { collection: "products", id: params.id },
1568
+ options
1569
+ );
1570
+ }
1571
+ };
1453
1572
  var ServerCommerceClient = class {
1454
1573
  constructor(options) {
1455
1574
  const publishableKey = requirePublishableKeyForSecret(
@@ -1463,7 +1582,7 @@ var ServerCommerceClient = class {
1463
1582
  apiUrl: options.apiUrl,
1464
1583
  onRequestId: options.onRequestId
1465
1584
  };
1466
- const productApi = new ProductApi(serverOptions);
1585
+ const productApi = new PreviewProductApi(serverOptions);
1467
1586
  const cartApi = new CartApi(serverOptions);
1468
1587
  const discountApi = new DiscountApi(serverOptions);
1469
1588
  const shippingApi = new ShippingApi(serverOptions);
@@ -1472,6 +1591,7 @@ var ServerCommerceClient = class {
1472
1591
  stockCheck: productApi.stockCheck.bind(productApi),
1473
1592
  listingGroups: productApi.listingGroups.bind(productApi),
1474
1593
  detail: productApi.detail.bind(productApi),
1594
+ previewDetail: productApi.previewDetail.bind(productApi),
1475
1595
  upsert: productApi.upsert.bind(productApi)
1476
1596
  };
1477
1597
  this.cart = {
@@ -1538,6 +1658,10 @@ var ServerClient = class {
1538
1658
  onRequestId
1539
1659
  };
1540
1660
  this.commerce = new ServerCommerceClient(serverOptions);
1661
+ const previewApi = new ServerPreviewClient(serverOptions);
1662
+ this.preview = {
1663
+ detail: previewApi.detail.bind(previewApi)
1664
+ };
1541
1665
  const communityClient = new CommunityClient(serverOptions);
1542
1666
  const moderationApi = new ModerationApi(serverOptions);
1543
1667
  this.community = Object.assign(communityClient, {
@@ -1573,6 +1697,7 @@ export {
1573
1697
  ServerClient,
1574
1698
  ServerCollectionClient,
1575
1699
  ServerCommerceClient,
1700
+ ServerPreviewClient,
1576
1701
  createServerClient
1577
1702
  };
1578
1703
  //# sourceMappingURL=server.js.map