@01.software/sdk 0.30.1 → 0.32.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 (56) hide show
  1. package/README.md +160 -48
  2. package/dist/analytics/react.cjs.map +1 -1
  3. package/dist/analytics/react.js.map +1 -1
  4. package/dist/analytics.cjs.map +1 -1
  5. package/dist/analytics.js.map +1 -1
  6. package/dist/client.cjs +91 -62
  7. package/dist/client.cjs.map +1 -1
  8. package/dist/client.d.cts +6 -6
  9. package/dist/client.d.ts +6 -6
  10. package/dist/client.js +91 -62
  11. package/dist/client.js.map +1 -1
  12. package/dist/{collection-client-QPbwimkU.d.cts → collection-client-CORhppPb.d.cts} +3 -3
  13. package/dist/{collection-client-B9d9kr1d.d.ts → collection-client-DPGXnhoF.d.ts} +3 -3
  14. package/dist/{const-VZuk2tWc.d.cts → const-Brk2Ff0q.d.cts} +4 -4
  15. package/dist/{const-B75IFDRi.d.ts → const-DcY2_z9O.d.ts} +4 -4
  16. package/dist/{index-B2WbhEgT.d.cts → index-BGEhoDUs.d.cts} +1 -1
  17. package/dist/{index-B2WbhEgT.d.ts → index-BGEhoDUs.d.ts} +1 -1
  18. package/dist/index.cjs +214 -66
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +9 -9
  21. package/dist/index.d.ts +9 -9
  22. package/dist/index.js +214 -66
  23. package/dist/index.js.map +1 -1
  24. package/dist/{payload-types-DPjO_IbQ.d.cts → payload-types-DVK1QCeU.d.cts} +793 -531
  25. package/dist/{payload-types-DPjO_IbQ.d.ts → payload-types-DVK1QCeU.d.ts} +793 -531
  26. package/dist/query.cjs +63 -13
  27. package/dist/query.cjs.map +1 -1
  28. package/dist/query.d.cts +17 -17
  29. package/dist/query.d.ts +17 -17
  30. package/dist/query.js +63 -13
  31. package/dist/query.js.map +1 -1
  32. package/dist/realtime.cjs.map +1 -1
  33. package/dist/realtime.d.cts +2 -2
  34. package/dist/realtime.d.ts +2 -2
  35. package/dist/realtime.js.map +1 -1
  36. package/dist/server.cjs +176 -18
  37. package/dist/server.cjs.map +1 -1
  38. package/dist/server.d.cts +124 -7
  39. package/dist/server.d.ts +124 -7
  40. package/dist/server.js +176 -18
  41. package/dist/server.js.map +1 -1
  42. package/dist/{types-BwT0eeaz.d.cts → types-ByMrR_Z_.d.cts} +6 -2
  43. package/dist/{types-DuSKPiY5.d.ts → types-CAkWqIr6.d.cts} +82 -9
  44. package/dist/{types-Dlb2mwpX.d.cts → types-CYMSBkJC.d.ts} +82 -9
  45. package/dist/{types-1fBLrYU7.d.ts → types-DUPC7Xn6.d.ts} +6 -2
  46. package/dist/ui/form.d.cts +1 -1
  47. package/dist/ui/form.d.ts +1 -1
  48. package/dist/ui/video.d.cts +1 -1
  49. package/dist/ui/video.d.ts +1 -1
  50. package/dist/webhook.cjs +48 -1
  51. package/dist/webhook.cjs.map +1 -1
  52. package/dist/webhook.d.cts +73 -4
  53. package/dist/webhook.d.ts +73 -4
  54. package/dist/webhook.js +48 -1
  55. package/dist/webhook.js.map +1 -1
  56. package/package.json +3 -3
package/dist/client.cjs CHANGED
@@ -72,8 +72,16 @@ var ValidationError = class extends SDKError {
72
72
  }
73
73
  };
74
74
  var ApiError = class extends SDKError {
75
- constructor(message, status, details, userMessage, suggestion) {
76
- super("API_ERROR", message, status, details, userMessage, suggestion);
75
+ constructor(message, status, details, userMessage, suggestion, requestId) {
76
+ super(
77
+ "API_ERROR",
78
+ message,
79
+ status,
80
+ details,
81
+ userMessage,
82
+ suggestion,
83
+ requestId
84
+ );
77
85
  this.name = "ApiError";
78
86
  }
79
87
  };
@@ -104,19 +112,43 @@ var UsageLimitError = class extends SDKError {
104
112
  };
105
113
  var AuthError = class extends SDKError {
106
114
  constructor(message, details, userMessage, suggestion, requestId) {
107
- super("auth_error", message, 401, details, userMessage, suggestion, requestId);
115
+ super(
116
+ "auth_error",
117
+ message,
118
+ 401,
119
+ details,
120
+ userMessage,
121
+ suggestion,
122
+ requestId
123
+ );
108
124
  this.name = "AuthError";
109
125
  }
110
126
  };
111
127
  var PermissionError = class extends SDKError {
112
128
  constructor(message, details, userMessage, suggestion, requestId) {
113
- super("permission_error", message, 403, details, userMessage, suggestion, requestId);
129
+ super(
130
+ "permission_error",
131
+ message,
132
+ 403,
133
+ details,
134
+ userMessage,
135
+ suggestion,
136
+ requestId
137
+ );
114
138
  this.name = "PermissionError";
115
139
  }
116
140
  };
117
141
  var NotFoundError = class extends SDKError {
118
142
  constructor(message, details, userMessage, suggestion, requestId) {
119
- super("not_found", message, 404, details, userMessage, suggestion, requestId);
143
+ super(
144
+ "not_found",
145
+ message,
146
+ 404,
147
+ details,
148
+ userMessage,
149
+ suggestion,
150
+ requestId
151
+ );
120
152
  this.name = "NotFoundError";
121
153
  }
122
154
  };
@@ -128,14 +160,22 @@ var ConflictError = class extends SDKError {
128
160
  };
129
161
  var RateLimitError = class extends SDKError {
130
162
  constructor(message, retryAfter, details, userMessage, suggestion, requestId) {
131
- super("rate_limit_exceeded", message, 429, details, userMessage, suggestion, requestId);
163
+ super(
164
+ "rate_limit_exceeded",
165
+ message,
166
+ 429,
167
+ details,
168
+ userMessage,
169
+ suggestion,
170
+ requestId
171
+ );
132
172
  this.name = "RateLimitError";
133
173
  this.retryAfter = retryAfter;
134
174
  }
135
175
  };
136
176
  var createNetworkError = (message, status, details, userMessage, suggestion) => new NetworkError(message, status, details, userMessage, suggestion);
137
177
  var createValidationError = (message, details, userMessage, suggestion, status) => new ValidationError(message, details, userMessage, suggestion, status);
138
- var createApiError = (message, status, details, userMessage, suggestion) => new ApiError(message, status, details, userMessage, suggestion);
178
+ var createApiError = (message, status, details, userMessage, suggestion, requestId) => new ApiError(message, status, details, userMessage, suggestion, requestId);
139
179
  var createConfigError = (message, details, userMessage, suggestion) => new ConfigError(message, details, userMessage, suggestion);
140
180
  var createTimeoutError = (message, details, userMessage, suggestion) => new TimeoutError(message, details, userMessage, suggestion);
141
181
  var createUsageLimitError = (message, usage, details, userMessage, suggestion) => new UsageLimitError(message, usage, details, userMessage, suggestion);
@@ -143,7 +183,14 @@ var createAuthError = (message, details, userMessage, suggestion, requestId) =>
143
183
  var createPermissionError = (message, details, userMessage, suggestion, requestId) => new PermissionError(message, details, userMessage, suggestion, requestId);
144
184
  var createNotFoundError = (message, details, userMessage, suggestion, requestId) => new NotFoundError(message, details, userMessage, suggestion, requestId);
145
185
  var createConflictError = (message, details, userMessage, suggestion, requestId) => new ConflictError(message, details, userMessage, suggestion, requestId);
146
- var createRateLimitError = (message, retryAfter, details, userMessage, suggestion, requestId) => new RateLimitError(message, retryAfter, details, userMessage, suggestion, requestId);
186
+ var createRateLimitError = (message, retryAfter, details, userMessage, suggestion, requestId) => new RateLimitError(
187
+ message,
188
+ retryAfter,
189
+ details,
190
+ userMessage,
191
+ suggestion,
192
+ requestId
193
+ );
147
194
 
148
195
  // src/core/internal/utils/credentials.ts
149
196
  function requirePublishableKeyForSecret(apiName, publishableKey, secretKey) {
@@ -183,6 +230,22 @@ function debugLog(debug, type, message, data) {
183
230
  console.groupEnd();
184
231
  }
185
232
  }
233
+ function redactSensitiveHeader(value) {
234
+ const prefix = value.toLowerCase().startsWith("bearer ") ? "Bearer " : "";
235
+ return value.length > 20 ? `${prefix}...****${value.slice(-8)}` : "****";
236
+ }
237
+ function redactSensitiveHeaders(headers) {
238
+ const redacted = Object.fromEntries(headers.entries());
239
+ if (redacted.authorization) {
240
+ redacted.authorization = redactSensitiveHeader(redacted.authorization);
241
+ }
242
+ if (redacted["x-preview-token"]) {
243
+ redacted["x-preview-token"] = redactSensitiveHeader(
244
+ redacted["x-preview-token"]
245
+ );
246
+ }
247
+ return redacted;
248
+ }
186
249
  function getErrorSuggestion(status) {
187
250
  if (status === 400)
188
251
  return "The request data failed validation. Check field values and types.";
@@ -257,6 +320,12 @@ async function parseErrorBody(response) {
257
320
  return fallback;
258
321
  }
259
322
  }
323
+ function getParsedErrorSuggestion(status, parsed) {
324
+ if (status === 403 && parsed.reason === "origin_not_allowed") {
325
+ return "Add the request origin to the tenant Browser API origins, then retry the browser request.";
326
+ }
327
+ return getErrorSuggestion(status);
328
+ }
260
329
  async function delay(ms) {
261
330
  return new Promise((resolve) => setTimeout(resolve, ms));
262
331
  }
@@ -270,7 +339,7 @@ function createHttpStatusError(status, parsed, details, requestId) {
270
339
  ...parsed.errors && { errors: parsed.errors },
271
340
  ...parsed.body && { body: parsed.body }
272
341
  };
273
- const suggestion = getErrorSuggestion(status);
342
+ const suggestion = getParsedErrorSuggestion(status, parsed);
274
343
  if (status === 400 || status === 422) {
275
344
  return attachRequestId(
276
345
  createValidationError(
@@ -376,11 +445,7 @@ async function httpFetch(url, options) {
376
445
  if (!headers.has("Content-Type") && requestInit.body && !(requestInit.body instanceof FormData)) {
377
446
  headers.set("Content-Type", "application/json");
378
447
  }
379
- const redactedHeaders = Object.fromEntries(headers.entries());
380
- if (redactedHeaders["authorization"]) {
381
- const token = redactedHeaders["authorization"];
382
- redactedHeaders["authorization"] = token.length > 20 ? `Bearer ...****${token.slice(-8)}` : "****";
383
- }
448
+ const redactedHeaders = redactSensitiveHeaders(headers);
384
449
  debugLog(debug, "request", url, {
385
450
  method: requestInit.method || "GET",
386
451
  headers: redactedHeaders,
@@ -398,7 +463,7 @@ async function httpFetch(url, options) {
398
463
  debugLog(debug, "response", url, {
399
464
  status: response.status,
400
465
  statusText: response.statusText,
401
- headers: Object.fromEntries(response.headers.entries())
466
+ headers: redactSensitiveHeaders(response.headers)
402
467
  });
403
468
  if (!response.ok) {
404
469
  if (isUsageLimitExceededResponse(response)) {
@@ -831,7 +896,7 @@ async function parseApiResponse(response, endpoint) {
831
896
  if (reason === "validation_failed") {
832
897
  throw attachRequestId(createValidationError(errorMessage, data, errorMessage), requestId);
833
898
  }
834
- if (reason === "token_expired" || reason === "token_invalid" || reason === "key_invalid" || reason === "key_revoked") {
899
+ if (reason === "token_expired" || reason === "token_invalid" || reason === "preview_token_invalid" || reason === "preview_token_required" || reason === "key_invalid" || reason === "key_revoked") {
835
900
  throw attachRequestId(createAuthError(errorMessage, data, errorMessage), requestId);
836
901
  }
837
902
  if (reason === "forbidden") {
@@ -1126,7 +1191,7 @@ var CustomerAuth = class {
1126
1191
  );
1127
1192
  return data.customer ?? null;
1128
1193
  } catch (error) {
1129
- if (error instanceof ApiError && error.status === 401) {
1194
+ if (error instanceof SDKError && error.status === 401) {
1130
1195
  this.setToken(null);
1131
1196
  return null;
1132
1197
  }
@@ -1221,51 +1286,15 @@ var CustomerAuth = class {
1221
1286
  if (!headers.has("Content-Type") && init.body) {
1222
1287
  headers.set("Content-Type", "application/json");
1223
1288
  }
1224
- const controller = new AbortController();
1225
- const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT2);
1226
- let res;
1227
- try {
1228
- res = await fetch(`${this.baseUrl}${path}`, {
1229
- ...init,
1230
- headers,
1231
- signal: controller.signal
1232
- });
1233
- } catch (error) {
1234
- clearTimeout(timeoutId);
1235
- if (error instanceof Error && error.name === "AbortError") {
1236
- throw new TimeoutError(`Request timed out after ${DEFAULT_TIMEOUT2}ms`, {
1237
- url: path,
1238
- timeout: DEFAULT_TIMEOUT2
1239
- });
1240
- }
1241
- throw new NetworkError(
1242
- error instanceof Error ? error.message : "Network request failed",
1243
- void 0,
1244
- { url: path },
1245
- "Network connection failed.",
1246
- "Please check your internet connection and try again."
1247
- );
1248
- }
1249
- clearTimeout(timeoutId);
1250
- if (!res.ok) {
1251
- const body = await res.json().catch(() => ({}));
1252
- throw new ApiError(
1253
- body.error || `HTTP ${res.status}`,
1254
- res.status,
1255
- body.details,
1256
- body.error
1257
- );
1258
- }
1259
- try {
1260
- return await res.json();
1261
- } catch {
1262
- throw new ApiError(
1263
- "Invalid JSON response from server",
1264
- res.status,
1265
- void 0,
1266
- "INVALID_RESPONSE"
1267
- );
1268
- }
1289
+ const response = await httpFetch(path, {
1290
+ ...init,
1291
+ apiUrl: this.baseUrl,
1292
+ publishableKey: this.publishableKey,
1293
+ headers,
1294
+ timeout: DEFAULT_TIMEOUT2,
1295
+ retry: { maxRetries: 0 }
1296
+ });
1297
+ return parseApiResponse(response, path);
1269
1298
  }
1270
1299
  };
1271
1300