@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
@@ -1,7 +1,7 @@
1
1
  import { R as RealtimeEvent } from './realtime-D7HtUpqt.cjs';
2
2
  export { a as RealtimeConnection, b as RealtimeListener } from './realtime-D7HtUpqt.cjs';
3
- import { P as PublicCollection } from './const-VZuk2tWc.cjs';
4
- import './payload-types-DPjO_IbQ.cjs';
3
+ import { P as PublicCollection } from './const-AytzliEu.cjs';
4
+ import './payload-types-Wa4-eC6x.cjs';
5
5
 
6
6
  interface UseRealtimeQueryOptions {
7
7
  /** Filter events to specific collections. Empty/undefined = all collections. */
@@ -1,7 +1,7 @@
1
1
  import { R as RealtimeEvent } from './realtime-D7HtUpqt.js';
2
2
  export { a as RealtimeConnection, b as RealtimeListener } from './realtime-D7HtUpqt.js';
3
- import { P as PublicCollection } from './const-B75IFDRi.js';
4
- import './payload-types-DPjO_IbQ.js';
3
+ import { P as PublicCollection } from './const-BGCP-OJL.js';
4
+ import './payload-types-Wa4-eC6x.js';
5
5
 
6
6
  interface UseRealtimeQueryOptions {
7
7
  /** Filter events to specific collections. Empty/undefined = all collections. */
package/dist/server.cjs CHANGED
@@ -26,6 +26,7 @@ __export(server_exports, {
26
26
  ServerClient: () => ServerClient,
27
27
  ServerCollectionClient: () => ServerCollectionClient,
28
28
  ServerCommerceClient: () => ServerCommerceClient,
29
+ ServerPreviewClient: () => ServerPreviewClient,
29
30
  createServerClient: () => createServerClient
30
31
  });
31
32
  module.exports = __toCommonJS(server_exports);
@@ -77,8 +78,16 @@ var ValidationError = class extends SDKError {
77
78
  }
78
79
  };
79
80
  var ApiError = class extends SDKError {
80
- constructor(message, status, details, userMessage, suggestion) {
81
- super("API_ERROR", message, status, details, userMessage, suggestion);
81
+ constructor(message, status, details, userMessage, suggestion, requestId) {
82
+ super(
83
+ "API_ERROR",
84
+ message,
85
+ status,
86
+ details,
87
+ userMessage,
88
+ suggestion,
89
+ requestId
90
+ );
82
91
  this.name = "ApiError";
83
92
  }
84
93
  };
@@ -109,19 +118,43 @@ var UsageLimitError = class extends SDKError {
109
118
  };
110
119
  var AuthError = class extends SDKError {
111
120
  constructor(message, details, userMessage, suggestion, requestId) {
112
- super("auth_error", message, 401, details, userMessage, suggestion, requestId);
121
+ super(
122
+ "auth_error",
123
+ message,
124
+ 401,
125
+ details,
126
+ userMessage,
127
+ suggestion,
128
+ requestId
129
+ );
113
130
  this.name = "AuthError";
114
131
  }
115
132
  };
116
133
  var PermissionError = class extends SDKError {
117
134
  constructor(message, details, userMessage, suggestion, requestId) {
118
- super("permission_error", message, 403, details, userMessage, suggestion, requestId);
135
+ super(
136
+ "permission_error",
137
+ message,
138
+ 403,
139
+ details,
140
+ userMessage,
141
+ suggestion,
142
+ requestId
143
+ );
119
144
  this.name = "PermissionError";
120
145
  }
121
146
  };
122
147
  var NotFoundError = class extends SDKError {
123
148
  constructor(message, details, userMessage, suggestion, requestId) {
124
- super("not_found", message, 404, details, userMessage, suggestion, requestId);
149
+ super(
150
+ "not_found",
151
+ message,
152
+ 404,
153
+ details,
154
+ userMessage,
155
+ suggestion,
156
+ requestId
157
+ );
125
158
  this.name = "NotFoundError";
126
159
  }
127
160
  };
@@ -133,14 +166,22 @@ var ConflictError = class extends SDKError {
133
166
  };
134
167
  var RateLimitError = class extends SDKError {
135
168
  constructor(message, retryAfter, details, userMessage, suggestion, requestId) {
136
- super("rate_limit_exceeded", message, 429, details, userMessage, suggestion, requestId);
169
+ super(
170
+ "rate_limit_exceeded",
171
+ message,
172
+ 429,
173
+ details,
174
+ userMessage,
175
+ suggestion,
176
+ requestId
177
+ );
137
178
  this.name = "RateLimitError";
138
179
  this.retryAfter = retryAfter;
139
180
  }
140
181
  };
141
182
  var createNetworkError = (message, status, details, userMessage, suggestion) => new NetworkError(message, status, details, userMessage, suggestion);
142
183
  var createValidationError = (message, details, userMessage, suggestion, status) => new ValidationError(message, details, userMessage, suggestion, status);
143
- var createApiError = (message, status, details, userMessage, suggestion) => new ApiError(message, status, details, userMessage, suggestion);
184
+ var createApiError = (message, status, details, userMessage, suggestion, requestId) => new ApiError(message, status, details, userMessage, suggestion, requestId);
144
185
  var createConfigError = (message, details, userMessage, suggestion) => new ConfigError(message, details, userMessage, suggestion);
145
186
  var createTimeoutError = (message, details, userMessage, suggestion) => new TimeoutError(message, details, userMessage, suggestion);
146
187
  var createUsageLimitError = (message, usage, details, userMessage, suggestion) => new UsageLimitError(message, usage, details, userMessage, suggestion);
@@ -148,7 +189,14 @@ var createAuthError = (message, details, userMessage, suggestion, requestId) =>
148
189
  var createPermissionError = (message, details, userMessage, suggestion, requestId) => new PermissionError(message, details, userMessage, suggestion, requestId);
149
190
  var createNotFoundError = (message, details, userMessage, suggestion, requestId) => new NotFoundError(message, details, userMessage, suggestion, requestId);
150
191
  var createConflictError = (message, details, userMessage, suggestion, requestId) => new ConflictError(message, details, userMessage, suggestion, requestId);
151
- var createRateLimitError = (message, retryAfter, details, userMessage, suggestion, requestId) => new RateLimitError(message, retryAfter, details, userMessage, suggestion, requestId);
192
+ var createRateLimitError = (message, retryAfter, details, userMessage, suggestion, requestId) => new RateLimitError(
193
+ message,
194
+ retryAfter,
195
+ details,
196
+ userMessage,
197
+ suggestion,
198
+ requestId
199
+ );
152
200
 
153
201
  // src/core/internal/utils/credentials.ts
154
202
  function requirePublishableKeyForSecret(apiName, publishableKey, secretKey) {
@@ -188,6 +236,22 @@ function debugLog(debug, type, message, data) {
188
236
  console.groupEnd();
189
237
  }
190
238
  }
239
+ function redactSensitiveHeader(value) {
240
+ const prefix = value.toLowerCase().startsWith("bearer ") ? "Bearer " : "";
241
+ return value.length > 20 ? `${prefix}...****${value.slice(-8)}` : "****";
242
+ }
243
+ function redactSensitiveHeaders(headers) {
244
+ const redacted = Object.fromEntries(headers.entries());
245
+ if (redacted.authorization) {
246
+ redacted.authorization = redactSensitiveHeader(redacted.authorization);
247
+ }
248
+ if (redacted["x-preview-token"]) {
249
+ redacted["x-preview-token"] = redactSensitiveHeader(
250
+ redacted["x-preview-token"]
251
+ );
252
+ }
253
+ return redacted;
254
+ }
191
255
  function getErrorSuggestion(status) {
192
256
  if (status === 400)
193
257
  return "The request data failed validation. Check field values and types.";
@@ -262,6 +326,12 @@ async function parseErrorBody(response) {
262
326
  return fallback;
263
327
  }
264
328
  }
329
+ function getParsedErrorSuggestion(status, parsed) {
330
+ if (status === 403 && parsed.reason === "origin_not_allowed") {
331
+ return "Add the request origin to the tenant Browser API origins, then retry the browser request.";
332
+ }
333
+ return getErrorSuggestion(status);
334
+ }
265
335
  async function delay(ms) {
266
336
  return new Promise((resolve) => setTimeout(resolve, ms));
267
337
  }
@@ -275,7 +345,7 @@ function createHttpStatusError(status, parsed, details, requestId) {
275
345
  ...parsed.errors && { errors: parsed.errors },
276
346
  ...parsed.body && { body: parsed.body }
277
347
  };
278
- const suggestion = getErrorSuggestion(status);
348
+ const suggestion = getParsedErrorSuggestion(status, parsed);
279
349
  if (status === 400 || status === 422) {
280
350
  return attachRequestId(
281
351
  createValidationError(
@@ -381,11 +451,7 @@ async function httpFetch(url, options) {
381
451
  if (!headers.has("Content-Type") && requestInit.body && !(requestInit.body instanceof FormData)) {
382
452
  headers.set("Content-Type", "application/json");
383
453
  }
384
- const redactedHeaders = Object.fromEntries(headers.entries());
385
- if (redactedHeaders["authorization"]) {
386
- const token = redactedHeaders["authorization"];
387
- redactedHeaders["authorization"] = token.length > 20 ? `Bearer ...****${token.slice(-8)}` : "****";
388
- }
454
+ const redactedHeaders = redactSensitiveHeaders(headers);
389
455
  debugLog(debug, "request", url, {
390
456
  method: requestInit.method || "GET",
391
457
  headers: redactedHeaders,
@@ -403,7 +469,7 @@ async function httpFetch(url, options) {
403
469
  debugLog(debug, "response", url, {
404
470
  status: response.status,
405
471
  statusText: response.statusText,
406
- headers: Object.fromEntries(response.headers.entries())
472
+ headers: redactSensitiveHeaders(response.headers)
407
473
  });
408
474
  if (!response.ok) {
409
475
  if (isUsageLimitExceededResponse(response)) {
@@ -1052,7 +1118,7 @@ async function parseApiResponse(response, endpoint) {
1052
1118
  if (reason === "validation_failed") {
1053
1119
  throw attachRequestId(createValidationError(errorMessage, data, errorMessage), requestId);
1054
1120
  }
1055
- if (reason === "token_expired" || reason === "token_invalid" || reason === "key_invalid" || reason === "key_revoked") {
1121
+ if (reason === "token_expired" || reason === "token_invalid" || reason === "preview_token_invalid" || reason === "preview_token_required" || reason === "key_invalid" || reason === "key_revoked") {
1056
1122
  throw attachRequestId(createAuthError(errorMessage, data, errorMessage), requestId);
1057
1123
  }
1058
1124
  if (reason === "forbidden") {
@@ -1481,7 +1547,61 @@ var OrderApi = class extends BaseApi {
1481
1547
  }
1482
1548
  };
1483
1549
 
1550
+ // src/core/preview/server-preview-client.ts
1551
+ var ServerPreviewClient = class extends BaseApi {
1552
+ constructor(options) {
1553
+ super("ServerPreviewClient", options);
1554
+ }
1555
+ async detail(params, options) {
1556
+ let response;
1557
+ try {
1558
+ response = await httpFetch("/api/preview/detail", {
1559
+ method: "POST",
1560
+ apiUrl: this.apiUrl,
1561
+ publishableKey: this.publishableKey,
1562
+ secretKey: this.secretKey,
1563
+ body: JSON.stringify(params),
1564
+ headers: { "X-Preview-Token": options.previewToken }
1565
+ });
1566
+ } catch (err) {
1567
+ const id = err instanceof SDKError ? err.requestId ?? null : null;
1568
+ this.onRequestId?.(id);
1569
+ if (err instanceof NotFoundError) return null;
1570
+ throw err;
1571
+ }
1572
+ const requestId = response.headers.get("x-request-id") ?? null;
1573
+ this.onRequestId?.(requestId);
1574
+ try {
1575
+ return await response.json();
1576
+ } catch (err) {
1577
+ if (err instanceof SyntaxError) {
1578
+ throw createApiError(
1579
+ "Invalid JSON response from /api/preview/detail",
1580
+ 200,
1581
+ void 0,
1582
+ "Server returned an invalid response.",
1583
+ "Check if the API endpoint is available.",
1584
+ requestId ?? void 0
1585
+ );
1586
+ }
1587
+ throw err;
1588
+ }
1589
+ }
1590
+ };
1591
+
1484
1592
  // src/core/commerce/server-commerce-client.ts
1593
+ var PreviewProductApi = class extends ProductApi {
1594
+ constructor(options) {
1595
+ super(options);
1596
+ this.previewApi = new ServerPreviewClient(options);
1597
+ }
1598
+ async previewDetail(params, options) {
1599
+ return this.previewApi.detail(
1600
+ { collection: "products", id: params.id },
1601
+ options
1602
+ );
1603
+ }
1604
+ };
1485
1605
  var ServerCommerceClient = class {
1486
1606
  constructor(options) {
1487
1607
  const publishableKey = requirePublishableKeyForSecret(
@@ -1495,7 +1615,7 @@ var ServerCommerceClient = class {
1495
1615
  apiUrl: options.apiUrl,
1496
1616
  onRequestId: options.onRequestId
1497
1617
  };
1498
- const productApi = new ProductApi(serverOptions);
1618
+ const productApi = new PreviewProductApi(serverOptions);
1499
1619
  const cartApi = new CartApi(serverOptions);
1500
1620
  const discountApi = new DiscountApi(serverOptions);
1501
1621
  const shippingApi = new ShippingApi(serverOptions);
@@ -1504,6 +1624,7 @@ var ServerCommerceClient = class {
1504
1624
  stockCheck: productApi.stockCheck.bind(productApi),
1505
1625
  listingGroups: productApi.listingGroups.bind(productApi),
1506
1626
  detail: productApi.detail.bind(productApi),
1627
+ previewDetail: productApi.previewDetail.bind(productApi),
1507
1628
  upsert: productApi.upsert.bind(productApi)
1508
1629
  };
1509
1630
  this.cart = {
@@ -1570,6 +1691,10 @@ var ServerClient = class {
1570
1691
  onRequestId
1571
1692
  };
1572
1693
  this.commerce = new ServerCommerceClient(serverOptions);
1694
+ const previewApi = new ServerPreviewClient(serverOptions);
1695
+ this.preview = {
1696
+ detail: previewApi.detail.bind(previewApi)
1697
+ };
1573
1698
  const communityClient = new CommunityClient(serverOptions);
1574
1699
  const moderationApi = new ModerationApi(serverOptions);
1575
1700
  this.community = Object.assign(communityClient, {