@01.software/sdk 0.41.1 → 0.42.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/CHANGELOG.md +208 -0
- package/README.md +81 -18
- package/dist/analytics/react.cjs +71 -3
- package/dist/analytics/react.cjs.map +1 -1
- package/dist/analytics/react.d.cts +18 -2
- package/dist/analytics/react.d.ts +18 -2
- package/dist/analytics/react.js +67 -3
- package/dist/analytics/react.js.map +1 -1
- package/dist/analytics.cjs +6 -2
- package/dist/analytics.cjs.map +1 -1
- package/dist/analytics.d.cts +17 -4
- package/dist/analytics.d.ts +17 -4
- package/dist/analytics.js +6 -2
- package/dist/analytics.js.map +1 -1
- package/dist/client.cjs +176 -32
- 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 +176 -32
- package/dist/client.js.map +1 -1
- package/dist/{collection-client-Bk--pNzW.d.cts → collection-client-B-qVIBnJ.d.cts} +3 -3
- package/dist/{collection-client-BdcxkW7l.d.ts → collection-client-BhCMwIus.d.ts} +3 -3
- package/dist/{const-qGGI7Uii.d.cts → const-BiDujixF.d.cts} +1 -1
- package/dist/{const-HwdntWtG.d.ts → const-pmHlwm3E.d.ts} +1 -1
- package/dist/{index-B1oW50RY.d.ts → index-B1UBDaKz.d.ts} +3 -3
- package/dist/{index-DiXtjVab.d.cts → index-D78ki6Ij.d.cts} +3 -3
- package/dist/index.cjs +156 -339
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +156 -339
- package/dist/index.js.map +1 -1
- package/dist/{payload-types-CqJOgON7.d.cts → payload-types-C7Ul4ElL.d.cts} +181 -115
- package/dist/{payload-types-CqJOgON7.d.ts → payload-types-C7Ul4ElL.d.ts} +181 -115
- package/dist/query.d.cts +5 -5
- package/dist/query.d.ts +5 -5
- package/dist/realtime.cjs +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 +1 -1
- package/dist/realtime.js.map +1 -1
- package/dist/server.cjs +230 -46
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +7 -7
- package/dist/server.d.ts +7 -7
- package/dist/server.js +230 -46
- package/dist/server.js.map +1 -1
- package/dist/{types-DgfXb7iV.d.ts → types-BL7M-EUV.d.cts} +138 -13
- package/dist/{types-BMI3M0nb.d.ts → types-Bf2iCjy8.d.ts} +1 -1
- package/dist/{types-ByLSG-O3.d.cts → types-ChV1t4ei.d.cts} +1 -1
- package/dist/{types-BKa9z9s2.d.cts → types-D5dSNIGs.d.ts} +138 -13
- package/dist/ui/canvas.cjs.map +1 -1
- package/dist/ui/canvas.js.map +1 -1
- 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 +4 -4
- package/dist/webhook.d.ts +4 -4
- package/package.json +1 -1
package/dist/client.cjs
CHANGED
|
@@ -98,6 +98,26 @@ var TimeoutError = class extends SDKError {
|
|
|
98
98
|
this.name = "TimeoutError";
|
|
99
99
|
}
|
|
100
100
|
};
|
|
101
|
+
var GoneError = class extends SDKError {
|
|
102
|
+
constructor(message = "The requested resource is no longer available.", details, userMessage, suggestion) {
|
|
103
|
+
super("GONE_ERROR", message, 410, details, userMessage, suggestion);
|
|
104
|
+
this.name = "GoneError";
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
var ServiceUnavailableError = class extends SDKError {
|
|
108
|
+
constructor(message = "Service temporarily unavailable.", retryAfter, details, userMessage, suggestion) {
|
|
109
|
+
super(
|
|
110
|
+
"SERVICE_UNAVAILABLE_ERROR",
|
|
111
|
+
message,
|
|
112
|
+
503,
|
|
113
|
+
details,
|
|
114
|
+
userMessage,
|
|
115
|
+
suggestion
|
|
116
|
+
);
|
|
117
|
+
this.name = "ServiceUnavailableError";
|
|
118
|
+
this.retryAfter = retryAfter;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
101
121
|
var UsageLimitError = class extends SDKError {
|
|
102
122
|
constructor(message, usage, details, userMessage, suggestion) {
|
|
103
123
|
super("USAGE_LIMIT_ERROR", message, 429, details, userMessage, suggestion);
|
|
@@ -179,6 +199,14 @@ var createValidationError = (message, details, userMessage, suggestion, status)
|
|
|
179
199
|
var createApiError = (message, status, details, userMessage, suggestion, requestId) => new ApiError(message, status, details, userMessage, suggestion, requestId);
|
|
180
200
|
var createConfigError = (message, details, userMessage, suggestion) => new ConfigError(message, details, userMessage, suggestion);
|
|
181
201
|
var createTimeoutError = (message, details, userMessage, suggestion) => new TimeoutError(message, details, userMessage, suggestion);
|
|
202
|
+
var createGoneError = (message, details, userMessage, suggestion) => new GoneError(message, details, userMessage, suggestion);
|
|
203
|
+
var createServiceUnavailableError = (message, retryAfter, details, userMessage, suggestion) => new ServiceUnavailableError(
|
|
204
|
+
message,
|
|
205
|
+
retryAfter,
|
|
206
|
+
details,
|
|
207
|
+
userMessage,
|
|
208
|
+
suggestion
|
|
209
|
+
);
|
|
182
210
|
var createUsageLimitError = (message, usage, details, userMessage, suggestion) => new UsageLimitError(message, usage, details, userMessage, suggestion);
|
|
183
211
|
var createAuthError = (message, details, userMessage, suggestion, requestId) => new AuthError(message, details, userMessage, suggestion, requestId);
|
|
184
212
|
var createPermissionError = (message, details, userMessage, suggestion, requestId) => new PermissionError(message, details, userMessage, suggestion, requestId);
|
|
@@ -203,7 +231,7 @@ function requirePublishableKeyForSecret(apiName, publishableKey, secretKey) {
|
|
|
203
231
|
return publishableKey ?? "";
|
|
204
232
|
}
|
|
205
233
|
|
|
206
|
-
// src/core/
|
|
234
|
+
// src/core/internal/utils/api-url.ts
|
|
207
235
|
function resolveApiUrl(apiUrl) {
|
|
208
236
|
if (apiUrl) {
|
|
209
237
|
return apiUrl.replace(/\/$/, "");
|
|
@@ -220,7 +248,7 @@ function resolveApiUrl(apiUrl) {
|
|
|
220
248
|
// src/core/internal/utils/http.ts
|
|
221
249
|
var DEFAULT_TIMEOUT = 3e4;
|
|
222
250
|
var STOREFRONT_BROWSER_TIMEOUT = 15e3;
|
|
223
|
-
var DEFAULT_RETRYABLE_STATUSES = [408,
|
|
251
|
+
var DEFAULT_RETRYABLE_STATUSES = [408, 500, 502, 503, 504];
|
|
224
252
|
var NON_RETRYABLE_STATUSES = [400, 401, 403, 404, 409, 422];
|
|
225
253
|
var SAFE_METHODS = ["GET", "HEAD", "OPTIONS"];
|
|
226
254
|
var DEFAULT_MAX_RETRIES = 3;
|
|
@@ -337,7 +365,12 @@ function attachRequestId(err, id) {
|
|
|
337
365
|
if (id) err.requestId = id;
|
|
338
366
|
return err;
|
|
339
367
|
}
|
|
340
|
-
function
|
|
368
|
+
function parseRetryAfter(response) {
|
|
369
|
+
const raw = response.headers.get("Retry-After");
|
|
370
|
+
if (!raw) return void 0;
|
|
371
|
+
return parseInt(raw, 10) || void 0;
|
|
372
|
+
}
|
|
373
|
+
function mapResponseToError(status, parsed, details, requestId, retryAfter) {
|
|
341
374
|
const errorDetails = {
|
|
342
375
|
...details,
|
|
343
376
|
...parsed.errors && { errors: parsed.errors },
|
|
@@ -400,6 +433,41 @@ function createHttpStatusError(status, parsed, details, requestId) {
|
|
|
400
433
|
requestId
|
|
401
434
|
);
|
|
402
435
|
}
|
|
436
|
+
if (status === 410) {
|
|
437
|
+
return attachRequestId(
|
|
438
|
+
createGoneError(
|
|
439
|
+
parsed.errorMessage,
|
|
440
|
+
errorDetails,
|
|
441
|
+
parsed.userMessage,
|
|
442
|
+
suggestion
|
|
443
|
+
),
|
|
444
|
+
requestId
|
|
445
|
+
);
|
|
446
|
+
}
|
|
447
|
+
if (status === 429) {
|
|
448
|
+
return attachRequestId(
|
|
449
|
+
createRateLimitError(
|
|
450
|
+
parsed.errorMessage,
|
|
451
|
+
retryAfter,
|
|
452
|
+
errorDetails,
|
|
453
|
+
parsed.userMessage,
|
|
454
|
+
suggestion
|
|
455
|
+
),
|
|
456
|
+
requestId
|
|
457
|
+
);
|
|
458
|
+
}
|
|
459
|
+
if (status === 503) {
|
|
460
|
+
return attachRequestId(
|
|
461
|
+
createServiceUnavailableError(
|
|
462
|
+
parsed.errorMessage,
|
|
463
|
+
retryAfter,
|
|
464
|
+
errorDetails,
|
|
465
|
+
parsed.userMessage,
|
|
466
|
+
suggestion
|
|
467
|
+
),
|
|
468
|
+
requestId
|
|
469
|
+
);
|
|
470
|
+
}
|
|
403
471
|
return attachRequestId(
|
|
404
472
|
createNetworkError(
|
|
405
473
|
parsed.errorMessage,
|
|
@@ -518,26 +586,17 @@ async function httpFetch(url, options) {
|
|
|
518
586
|
method: requestInit.method || "GET",
|
|
519
587
|
attempt: attempt + 1
|
|
520
588
|
};
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
}
|
|
529
|
-
const error = attachRequestId(
|
|
530
|
-
createNetworkError(
|
|
531
|
-
parsed.errorMessage,
|
|
532
|
-
response.status,
|
|
533
|
-
details,
|
|
534
|
-
parsed.userMessage,
|
|
535
|
-
getErrorSuggestion(response.status)
|
|
536
|
-
),
|
|
537
|
-
requestId
|
|
589
|
+
const retryAfter = parseRetryAfter(response);
|
|
590
|
+
const error = mapResponseToError(
|
|
591
|
+
response.status,
|
|
592
|
+
parsed,
|
|
593
|
+
details,
|
|
594
|
+
requestId,
|
|
595
|
+
retryAfter
|
|
538
596
|
);
|
|
539
597
|
const method2 = (requestInit.method || "GET").toUpperCase();
|
|
540
|
-
|
|
598
|
+
const isTerminal = error instanceof RateLimitError || error instanceof UsageLimitError;
|
|
599
|
+
if (attempt < retryConfig.maxRetries && SAFE_METHODS.includes(method2) && !isTerminal && !NON_RETRYABLE_STATUSES.includes(response.status) && retryConfig.retryableStatuses.includes(response.status)) {
|
|
541
600
|
lastError = error;
|
|
542
601
|
const retryDelay = retryConfig.retryDelay(attempt);
|
|
543
602
|
debugLog(debug, "error", `Retrying in ${retryDelay}ms...`, error);
|
|
@@ -1547,42 +1606,123 @@ var CustomerNamespace = class {
|
|
|
1547
1606
|
}
|
|
1548
1607
|
};
|
|
1549
1608
|
|
|
1609
|
+
// src/core/api/endpoints.ts
|
|
1610
|
+
var COMMERCE_ENDPOINTS = {
|
|
1611
|
+
orders: {
|
|
1612
|
+
create: "/api/orders/create",
|
|
1613
|
+
update: "/api/orders/update",
|
|
1614
|
+
confirmPayment: "/api/orders/confirm-payment",
|
|
1615
|
+
byPayment: "/api/orders/by-payment",
|
|
1616
|
+
cancel: "/api/orders/cancel",
|
|
1617
|
+
resolveCancelRefund: "/api/orders/resolve-cancel-refund",
|
|
1618
|
+
checkout: "/api/orders/checkout",
|
|
1619
|
+
createFulfillment: "/api/orders/create-fulfillment",
|
|
1620
|
+
updateFulfillment: "/api/orders/update-fulfillment"
|
|
1621
|
+
},
|
|
1622
|
+
transactions: {
|
|
1623
|
+
update: "/api/transactions/update"
|
|
1624
|
+
},
|
|
1625
|
+
returns: {
|
|
1626
|
+
create: "/api/returns/create",
|
|
1627
|
+
update: "/api/returns/update",
|
|
1628
|
+
returnRefund: "/api/returns/return-refund"
|
|
1629
|
+
},
|
|
1630
|
+
fulfillmentOrders: {
|
|
1631
|
+
prepare: "/api/fulfillment-orders/prepare-fulfillment-order"
|
|
1632
|
+
},
|
|
1633
|
+
fulfillments: {
|
|
1634
|
+
bulkImport: "/api/fulfillments/bulk-import"
|
|
1635
|
+
},
|
|
1636
|
+
carts: {
|
|
1637
|
+
mine: "/api/carts/mine",
|
|
1638
|
+
merge: "/api/carts/merge",
|
|
1639
|
+
addItem: "/api/carts/add-item",
|
|
1640
|
+
updateItem: "/api/carts/update-item",
|
|
1641
|
+
removeItem: "/api/carts/remove-item",
|
|
1642
|
+
applyDiscount: "/api/carts/apply-discount",
|
|
1643
|
+
removeDiscount: "/api/carts/remove-discount",
|
|
1644
|
+
clear: "/api/carts/clear"
|
|
1645
|
+
}
|
|
1646
|
+
};
|
|
1647
|
+
var COMMERCE_ENDPOINT_PATHS = Object.values(
|
|
1648
|
+
COMMERCE_ENDPOINTS
|
|
1649
|
+
).flatMap((group) => Object.values(group));
|
|
1650
|
+
|
|
1550
1651
|
// src/core/api/cart-api.ts
|
|
1551
1652
|
var CartApi = class extends CustomerScopedApi {
|
|
1552
1653
|
constructor(options) {
|
|
1553
|
-
super("CartApi", options);
|
|
1654
|
+
super("CartApi", { ...options, requiresCredential: false });
|
|
1554
1655
|
}
|
|
1555
1656
|
async execute(endpoint, method, body) {
|
|
1556
1657
|
return this.request(endpoint, { method, body });
|
|
1557
1658
|
}
|
|
1558
|
-
|
|
1659
|
+
/**
|
|
1660
|
+
* Create a cart and receive its `cartToken`. Store the token and pass it to
|
|
1661
|
+
* every subsequent cart operation.
|
|
1662
|
+
*/
|
|
1663
|
+
createCart(params = {}) {
|
|
1664
|
+
return this.execute("/api/carts/create", "POST", params);
|
|
1665
|
+
}
|
|
1666
|
+
getCart(cartToken) {
|
|
1667
|
+
return this.execute("/api/carts/get", "POST", { cartToken });
|
|
1668
|
+
}
|
|
1669
|
+
merge(params) {
|
|
1559
1670
|
return this.execute(
|
|
1560
|
-
|
|
1561
|
-
"
|
|
1671
|
+
COMMERCE_ENDPOINTS.carts.merge,
|
|
1672
|
+
"POST",
|
|
1673
|
+
params
|
|
1674
|
+
);
|
|
1675
|
+
}
|
|
1676
|
+
/**
|
|
1677
|
+
* Resolve the authenticated customer's active cart by JWT (no `cartToken`
|
|
1678
|
+
* required). Returns the cart and its capability handle, or both `null` when
|
|
1679
|
+
* the customer has no active cart. Requires a customer token.
|
|
1680
|
+
*/
|
|
1681
|
+
mine() {
|
|
1682
|
+
return this.execute(
|
|
1683
|
+
COMMERCE_ENDPOINTS.carts.mine,
|
|
1684
|
+
"POST",
|
|
1685
|
+
{}
|
|
1562
1686
|
);
|
|
1563
1687
|
}
|
|
1564
1688
|
addItem(params) {
|
|
1565
|
-
return this.execute(
|
|
1689
|
+
return this.execute(
|
|
1690
|
+
COMMERCE_ENDPOINTS.carts.addItem,
|
|
1691
|
+
"POST",
|
|
1692
|
+
params
|
|
1693
|
+
);
|
|
1566
1694
|
}
|
|
1567
1695
|
updateItem(params) {
|
|
1568
|
-
return this.execute(
|
|
1696
|
+
return this.execute(
|
|
1697
|
+
COMMERCE_ENDPOINTS.carts.updateItem,
|
|
1698
|
+
"POST",
|
|
1699
|
+
params
|
|
1700
|
+
);
|
|
1569
1701
|
}
|
|
1570
1702
|
removeItem(params) {
|
|
1571
1703
|
return this.execute(
|
|
1572
|
-
|
|
1704
|
+
COMMERCE_ENDPOINTS.carts.removeItem,
|
|
1573
1705
|
"POST",
|
|
1574
1706
|
params
|
|
1575
1707
|
);
|
|
1576
1708
|
}
|
|
1577
1709
|
applyDiscount(params) {
|
|
1578
|
-
return this.execute(
|
|
1710
|
+
return this.execute(
|
|
1711
|
+
COMMERCE_ENDPOINTS.carts.applyDiscount,
|
|
1712
|
+
"POST",
|
|
1713
|
+
params
|
|
1714
|
+
);
|
|
1579
1715
|
}
|
|
1580
1716
|
removeDiscount(params) {
|
|
1581
|
-
return this.execute(
|
|
1717
|
+
return this.execute(
|
|
1718
|
+
COMMERCE_ENDPOINTS.carts.removeDiscount,
|
|
1719
|
+
"POST",
|
|
1720
|
+
params
|
|
1721
|
+
);
|
|
1582
1722
|
}
|
|
1583
1723
|
clearCart(params) {
|
|
1584
1724
|
return this.execute(
|
|
1585
|
-
|
|
1725
|
+
COMMERCE_ENDPOINTS.carts.clear,
|
|
1586
1726
|
"POST",
|
|
1587
1727
|
params
|
|
1588
1728
|
);
|
|
@@ -2393,6 +2533,7 @@ function compareVariantOrder(a, b) {
|
|
|
2393
2533
|
function getVariantAvailableForSale(variant) {
|
|
2394
2534
|
if (variant.isActive === false) return false;
|
|
2395
2535
|
if (variant.isUnlimited) return true;
|
|
2536
|
+
if (variant.inventoryPolicy === "continue") return true;
|
|
2396
2537
|
return (variant.stock ?? 0) - (variant.reservedStock ?? 0) > 0;
|
|
2397
2538
|
}
|
|
2398
2539
|
function isVariantAvailableForSale(variant) {
|
|
@@ -2770,13 +2911,16 @@ var CommerceClient = class {
|
|
|
2770
2911
|
}
|
|
2771
2912
|
};
|
|
2772
2913
|
this.cart = {
|
|
2914
|
+
create: cartApi.createCart.bind(cartApi),
|
|
2773
2915
|
get: cartApi.getCart.bind(cartApi),
|
|
2774
2916
|
addItem: cartApi.addItem.bind(cartApi),
|
|
2775
2917
|
updateItem: cartApi.updateItem.bind(cartApi),
|
|
2776
2918
|
removeItem: cartApi.removeItem.bind(cartApi),
|
|
2777
2919
|
applyDiscount: cartApi.applyDiscount.bind(cartApi),
|
|
2778
2920
|
removeDiscount: cartApi.removeDiscount.bind(cartApi),
|
|
2779
|
-
clear: cartApi.clearCart.bind(cartApi)
|
|
2921
|
+
clear: cartApi.clearCart.bind(cartApi),
|
|
2922
|
+
merge: cartApi.merge.bind(cartApi),
|
|
2923
|
+
mine: cartApi.mine.bind(cartApi)
|
|
2780
2924
|
};
|
|
2781
2925
|
this.orders = {
|
|
2782
2926
|
checkout: (params) => {
|