@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.
- package/README.md +74 -20
- package/dist/client.cjs +81 -16
- 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 +81 -16
- package/dist/client.js.map +1 -1
- package/dist/{collection-client-B9d9kr1d.d.ts → collection-client-ByzY3hWK.d.ts} +3 -3
- package/dist/{collection-client-QPbwimkU.d.cts → collection-client-DFXXz0vk.d.cts} +3 -3
- package/dist/{const-VZuk2tWc.d.cts → const-AytzliEu.d.cts} +4 -4
- package/dist/{const-B75IFDRi.d.ts → const-BGCP-OJL.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 +156 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +156 -19
- package/dist/index.js.map +1 -1
- package/dist/{payload-types-DPjO_IbQ.d.cts → payload-types-Wa4-eC6x.d.cts} +790 -534
- package/dist/{payload-types-DPjO_IbQ.d.ts → payload-types-Wa4-eC6x.d.ts} +790 -534
- package/dist/query.cjs +63 -13
- package/dist/query.cjs.map +1 -1
- package/dist/query.d.cts +6 -6
- package/dist/query.d.ts +6 -6
- package/dist/query.js +63 -13
- package/dist/query.js.map +1 -1
- package/dist/realtime.d.cts +2 -2
- package/dist/realtime.d.ts +2 -2
- package/dist/server.cjs +142 -17
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +32 -7
- package/dist/server.d.ts +32 -7
- package/dist/server.js +142 -17
- package/dist/server.js.map +1 -1
- package/dist/{types-Dlb2mwpX.d.cts → types-BX2mqDf6.d.ts} +46 -6
- package/dist/{types-1fBLrYU7.d.ts → types-CVA10VC-.d.ts} +6 -2
- package/dist/{types-BwT0eeaz.d.cts → types-CmLG-7RL.d.cts} +6 -2
- package/dist/{types-DuSKPiY5.d.ts → types-DChFjQGz.d.cts} +46 -6
- 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.d.cts +3 -3
- package/dist/webhook.d.ts +3 -3
- package/package.json +1 -1
package/dist/realtime.d.cts
CHANGED
|
@@ -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-
|
|
4
|
-
import './payload-types-
|
|
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. */
|
package/dist/realtime.d.ts
CHANGED
|
@@ -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-
|
|
4
|
-
import './payload-types-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
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:
|
|
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
|
|
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, {
|