@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.
- package/README.md +160 -48
- package/dist/analytics/react.cjs.map +1 -1
- package/dist/analytics/react.js.map +1 -1
- package/dist/analytics.cjs.map +1 -1
- package/dist/analytics.js.map +1 -1
- package/dist/client.cjs +91 -62
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +6 -6
- package/dist/client.d.ts +6 -6
- package/dist/client.js +91 -62
- package/dist/client.js.map +1 -1
- package/dist/{collection-client-QPbwimkU.d.cts → collection-client-CORhppPb.d.cts} +3 -3
- package/dist/{collection-client-B9d9kr1d.d.ts → collection-client-DPGXnhoF.d.ts} +3 -3
- package/dist/{const-VZuk2tWc.d.cts → const-Brk2Ff0q.d.cts} +4 -4
- package/dist/{const-B75IFDRi.d.ts → const-DcY2_z9O.d.ts} +4 -4
- package/dist/{index-B2WbhEgT.d.cts → index-BGEhoDUs.d.cts} +1 -1
- package/dist/{index-B2WbhEgT.d.ts → index-BGEhoDUs.d.ts} +1 -1
- package/dist/index.cjs +214 -66
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +214 -66
- package/dist/index.js.map +1 -1
- package/dist/{payload-types-DPjO_IbQ.d.cts → payload-types-DVK1QCeU.d.cts} +793 -531
- package/dist/{payload-types-DPjO_IbQ.d.ts → payload-types-DVK1QCeU.d.ts} +793 -531
- package/dist/query.cjs +63 -13
- package/dist/query.cjs.map +1 -1
- package/dist/query.d.cts +17 -17
- package/dist/query.d.ts +17 -17
- package/dist/query.js +63 -13
- package/dist/query.js.map +1 -1
- package/dist/realtime.cjs.map +1 -1
- package/dist/realtime.d.cts +2 -2
- package/dist/realtime.d.ts +2 -2
- package/dist/realtime.js.map +1 -1
- package/dist/server.cjs +176 -18
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +124 -7
- package/dist/server.d.ts +124 -7
- package/dist/server.js +176 -18
- package/dist/server.js.map +1 -1
- package/dist/{types-BwT0eeaz.d.cts → types-ByMrR_Z_.d.cts} +6 -2
- package/dist/{types-DuSKPiY5.d.ts → types-CAkWqIr6.d.cts} +82 -9
- package/dist/{types-Dlb2mwpX.d.cts → types-CYMSBkJC.d.ts} +82 -9
- package/dist/{types-1fBLrYU7.d.ts → types-DUPC7Xn6.d.ts} +6 -2
- package/dist/ui/form.d.cts +1 -1
- package/dist/ui/form.d.ts +1 -1
- package/dist/ui/video.d.cts +1 -1
- package/dist/ui/video.d.ts +1 -1
- package/dist/webhook.cjs +48 -1
- package/dist/webhook.cjs.map +1 -1
- package/dist/webhook.d.cts +73 -4
- package/dist/webhook.d.ts +73 -4
- package/dist/webhook.js +48 -1
- package/dist/webhook.js.map +1 -1
- 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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
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:
|
|
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
|
|
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
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
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
|
|