@01.software/sdk 0.48.0 → 0.51.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 +157 -1
- package/MIGRATION.md +56 -0
- package/README.md +276 -49
- package/dist/client.cjs +375 -161
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +7 -6
- package/dist/client.d.ts +7 -6
- package/dist/client.js +375 -161
- package/dist/client.js.map +1 -1
- package/dist/{collection-client-CBup9yOx.d.cts → collection-client-CWAeuzV4.d.cts} +6 -4
- package/dist/{collection-client-D3ExJU-7.d.ts → collection-client-hYvVfHIm.d.ts} +6 -4
- package/dist/{const-k9gHylYa.d.ts → const-D8LixhAJ.d.cts} +5 -5
- package/dist/{const-BXEi1Kix.d.cts → const-JD8obaKg.d.ts} +5 -5
- package/dist/embedded-admin/server.cjs +306 -0
- package/dist/embedded-admin/server.cjs.map +1 -0
- package/dist/embedded-admin/server.d.cts +33 -0
- package/dist/embedded-admin/server.d.ts +33 -0
- package/dist/embedded-admin/server.js +288 -0
- package/dist/embedded-admin/server.js.map +1 -0
- package/dist/embedded-admin.cjs +400 -0
- package/dist/embedded-admin.cjs.map +1 -0
- package/dist/embedded-admin.d.cts +61 -0
- package/dist/embedded-admin.d.ts +61 -0
- package/dist/embedded-admin.js +377 -0
- package/dist/embedded-admin.js.map +1 -0
- package/dist/errors.cjs +64 -15
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +13 -4
- package/dist/errors.d.ts +13 -4
- package/dist/errors.js +64 -15
- package/dist/errors.js.map +1 -1
- package/dist/{index-BCM9CTL7.d.cts → index-B0Hjh3Ey.d.ts} +72 -10
- package/dist/{index-CHGGkcLj.d.ts → index-Bu0kCc6o.d.cts} +72 -10
- package/dist/index.cjs +470 -429
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -67
- package/dist/index.d.ts +9 -67
- package/dist/index.js +470 -429
- package/dist/index.js.map +1 -1
- package/dist/{payload-types-B6AZQcB7.d.cts → payload-types-BOsckg8B.d.cts} +396 -57
- package/dist/{payload-types-B6AZQcB7.d.ts → payload-types-BOsckg8B.d.ts} +396 -57
- package/dist/query.cjs +115 -70
- package/dist/query.cjs.map +1 -1
- package/dist/query.d.cts +5 -5
- package/dist/query.d.ts +5 -5
- package/dist/query.js +115 -70
- 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 +591 -186
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +8 -7
- package/dist/server.d.ts +8 -7
- package/dist/server.js +591 -186
- package/dist/server.js.map +1 -1
- package/dist/storefront-cache.cjs +22 -0
- package/dist/storefront-cache.cjs.map +1 -1
- package/dist/storefront-cache.js +22 -0
- package/dist/storefront-cache.js.map +1 -1
- package/dist/{types-ByD2zii1.d.ts → types-5ZlcAFuU.d.ts} +2 -2
- package/dist/{types-8us-_C-Q.d.cts → types-B14sEt1z.d.cts} +2 -2
- package/dist/{types-CM2je9Kw.d.cts → types-Bj8j7VHU.d.ts} +107 -26
- package/dist/{types-DbA5V3mt.d.ts → types-CM5qiR2k.d.cts} +107 -26
- 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 +124 -80
- package/dist/webhook.cjs.map +1 -1
- package/dist/webhook.d.cts +21 -5
- package/dist/webhook.d.ts +21 -5
- package/dist/webhook.js +124 -80
- package/dist/webhook.js.map +1 -1
- package/package.json +27 -5
package/dist/errors.js
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
// src/core/errors.ts
|
|
2
|
+
var SDK_ERROR_BRAND = /* @__PURE__ */ Symbol.for("@01.software/sdk/SDKError");
|
|
3
|
+
var SDK_ERROR_TYPE_BRAND = /* @__PURE__ */ Symbol.for("@01.software/sdk/SDKError.type");
|
|
4
|
+
function defineSDKErrorBrand(error) {
|
|
5
|
+
Object.defineProperty(error, SDK_ERROR_BRAND, {
|
|
6
|
+
value: true,
|
|
7
|
+
enumerable: false,
|
|
8
|
+
configurable: false,
|
|
9
|
+
writable: false
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function defineSDKErrorType(error, type) {
|
|
13
|
+
Object.defineProperty(error, SDK_ERROR_TYPE_BRAND, {
|
|
14
|
+
value: type,
|
|
15
|
+
enumerable: false,
|
|
16
|
+
configurable: false,
|
|
17
|
+
writable: false
|
|
18
|
+
});
|
|
19
|
+
}
|
|
2
20
|
var SDKError = class extends Error {
|
|
3
21
|
constructor(code, message, status, details, userMessage, suggestion, requestId) {
|
|
4
22
|
super(message);
|
|
@@ -9,6 +27,7 @@ var SDKError = class extends Error {
|
|
|
9
27
|
this.userMessage = userMessage;
|
|
10
28
|
this.suggestion = suggestion;
|
|
11
29
|
this.requestId = requestId;
|
|
30
|
+
defineSDKErrorBrand(this);
|
|
12
31
|
if (Error.captureStackTrace) {
|
|
13
32
|
Error.captureStackTrace(this, new.target);
|
|
14
33
|
}
|
|
@@ -29,6 +48,7 @@ var SDKError = class extends Error {
|
|
|
29
48
|
...this.kind !== void 0 && { kind: this.kind },
|
|
30
49
|
...this.reason !== void 0 && { reason: this.reason },
|
|
31
50
|
...this.rawReason !== void 0 && { rawReason: this.rawReason },
|
|
51
|
+
...this.apiReason !== void 0 && { apiReason: this.apiReason },
|
|
32
52
|
...this.retryable !== void 0 && { retryable: this.retryable },
|
|
33
53
|
...this.retryAfter !== void 0 && { retryAfter: this.retryAfter }
|
|
34
54
|
};
|
|
@@ -74,6 +94,7 @@ var COMMERCE_ERROR_CODES = [
|
|
|
74
94
|
"payment_session_not_cancelable",
|
|
75
95
|
"payment_session_conflict",
|
|
76
96
|
"provider_identity_mismatch",
|
|
97
|
+
"managed_refund_attestation_forbidden",
|
|
77
98
|
"payment_method_unavailable",
|
|
78
99
|
"provider_unavailable",
|
|
79
100
|
"lock_timeout",
|
|
@@ -141,8 +162,12 @@ var COMMERCE_ERROR_CODES = [
|
|
|
141
162
|
var COMMERCE_ERROR_CODE_SET = new Set(
|
|
142
163
|
COMMERCE_ERROR_CODES
|
|
143
164
|
);
|
|
165
|
+
function getSDKErrorReason(error) {
|
|
166
|
+
if (error.kind !== "commerce") return error.apiReason;
|
|
167
|
+
return error.reason === "unknown_commerce_error" ? error.rawReason : error.reason;
|
|
168
|
+
}
|
|
144
169
|
function isCommerceSDKError(error) {
|
|
145
|
-
if (!(error
|
|
170
|
+
if (!isSDKError(error) || error.kind !== "commerce") return false;
|
|
146
171
|
if (typeof error.requestId !== "string" || typeof error.retryable !== "boolean" || error.retryAfter !== void 0 && (!Number.isSafeInteger(error.retryAfter) || error.retryAfter < 0) || typeof error.reason !== "string") {
|
|
147
172
|
return false;
|
|
148
173
|
}
|
|
@@ -152,12 +177,14 @@ var NetworkError = class extends SDKError {
|
|
|
152
177
|
constructor(message, status, details, userMessage, suggestion) {
|
|
153
178
|
super("NETWORK_ERROR", message, status, details, userMessage, suggestion);
|
|
154
179
|
this.name = "NetworkError";
|
|
180
|
+
defineSDKErrorType(this, "NetworkError");
|
|
155
181
|
}
|
|
156
182
|
};
|
|
157
183
|
var ValidationError = class extends SDKError {
|
|
158
184
|
constructor(message, details, userMessage, suggestion, status = 400) {
|
|
159
185
|
super("VALIDATION_ERROR", message, status, details, userMessage, suggestion);
|
|
160
186
|
this.name = "ValidationError";
|
|
187
|
+
defineSDKErrorType(this, "ValidationError");
|
|
161
188
|
}
|
|
162
189
|
};
|
|
163
190
|
var ApiError = class extends SDKError {
|
|
@@ -172,24 +199,28 @@ var ApiError = class extends SDKError {
|
|
|
172
199
|
requestId
|
|
173
200
|
);
|
|
174
201
|
this.name = "ApiError";
|
|
202
|
+
defineSDKErrorType(this, "ApiError");
|
|
175
203
|
}
|
|
176
204
|
};
|
|
177
205
|
var ConfigError = class extends SDKError {
|
|
178
206
|
constructor(message, details, userMessage, suggestion) {
|
|
179
207
|
super("CONFIG_ERROR", message, void 0, details, userMessage, suggestion);
|
|
180
208
|
this.name = "ConfigError";
|
|
209
|
+
defineSDKErrorType(this, "ConfigError");
|
|
181
210
|
}
|
|
182
211
|
};
|
|
183
212
|
var TimeoutError = class extends SDKError {
|
|
184
213
|
constructor(message = "Request timed out.", details, userMessage, suggestion) {
|
|
185
214
|
super("TIMEOUT_ERROR", message, 408, details, userMessage, suggestion);
|
|
186
215
|
this.name = "TimeoutError";
|
|
216
|
+
defineSDKErrorType(this, "TimeoutError");
|
|
187
217
|
}
|
|
188
218
|
};
|
|
189
219
|
var GoneError = class extends SDKError {
|
|
190
220
|
constructor(message = "The requested resource is no longer available.", details, userMessage, suggestion) {
|
|
191
221
|
super("GONE_ERROR", message, 410, details, userMessage, suggestion);
|
|
192
222
|
this.name = "GoneError";
|
|
223
|
+
defineSDKErrorType(this, "GoneError");
|
|
193
224
|
}
|
|
194
225
|
};
|
|
195
226
|
var ServiceUnavailableError = class extends SDKError {
|
|
@@ -204,6 +235,7 @@ var ServiceUnavailableError = class extends SDKError {
|
|
|
204
235
|
);
|
|
205
236
|
this.name = "ServiceUnavailableError";
|
|
206
237
|
this.retryAfter = retryAfter;
|
|
238
|
+
defineSDKErrorType(this, "ServiceUnavailableError");
|
|
207
239
|
}
|
|
208
240
|
};
|
|
209
241
|
var UsageLimitError = class extends SDKError {
|
|
@@ -211,6 +243,7 @@ var UsageLimitError = class extends SDKError {
|
|
|
211
243
|
super("USAGE_LIMIT_ERROR", message, 429, details, userMessage, suggestion);
|
|
212
244
|
this.name = "UsageLimitError";
|
|
213
245
|
this.usage = usage;
|
|
246
|
+
defineSDKErrorType(this, "UsageLimitError");
|
|
214
247
|
}
|
|
215
248
|
toJSON() {
|
|
216
249
|
return {
|
|
@@ -231,6 +264,7 @@ var AuthError = class extends SDKError {
|
|
|
231
264
|
requestId
|
|
232
265
|
);
|
|
233
266
|
this.name = "AuthError";
|
|
267
|
+
defineSDKErrorType(this, "AuthError");
|
|
234
268
|
}
|
|
235
269
|
};
|
|
236
270
|
var PermissionError = class extends SDKError {
|
|
@@ -245,6 +279,7 @@ var PermissionError = class extends SDKError {
|
|
|
245
279
|
requestId
|
|
246
280
|
);
|
|
247
281
|
this.name = "PermissionError";
|
|
282
|
+
defineSDKErrorType(this, "PermissionError");
|
|
248
283
|
}
|
|
249
284
|
};
|
|
250
285
|
var NotFoundError = class extends SDKError {
|
|
@@ -259,12 +294,14 @@ var NotFoundError = class extends SDKError {
|
|
|
259
294
|
requestId
|
|
260
295
|
);
|
|
261
296
|
this.name = "NotFoundError";
|
|
297
|
+
defineSDKErrorType(this, "NotFoundError");
|
|
262
298
|
}
|
|
263
299
|
};
|
|
264
300
|
var ConflictError = class extends SDKError {
|
|
265
301
|
constructor(message, details, userMessage, suggestion, requestId) {
|
|
266
302
|
super("conflict", message, 409, details, userMessage, suggestion, requestId);
|
|
267
303
|
this.name = "ConflictError";
|
|
304
|
+
defineSDKErrorType(this, "ConflictError");
|
|
268
305
|
}
|
|
269
306
|
};
|
|
270
307
|
var RateLimitError = class extends SDKError {
|
|
@@ -280,52 +317,63 @@ var RateLimitError = class extends SDKError {
|
|
|
280
317
|
);
|
|
281
318
|
this.name = "RateLimitError";
|
|
282
319
|
this.retryAfter = retryAfter;
|
|
320
|
+
defineSDKErrorType(this, "RateLimitError");
|
|
283
321
|
}
|
|
284
322
|
};
|
|
323
|
+
function hasBrandedSDKErrorShape(error) {
|
|
324
|
+
if (error === null || typeof error !== "object") return false;
|
|
325
|
+
const candidate = error;
|
|
326
|
+
return candidate[SDK_ERROR_BRAND] === true && typeof candidate.name === "string" && typeof candidate.code === "string" && typeof candidate.message === "string" && (candidate.status === void 0 || typeof candidate.status === "number") && (candidate.userMessage === void 0 || typeof candidate.userMessage === "string") && (candidate.suggestion === void 0 || typeof candidate.suggestion === "string") && (candidate.requestId === void 0 || typeof candidate.requestId === "string") && (candidate.kind === void 0 || candidate.kind === "commerce") && (candidate.reason === void 0 || typeof candidate.reason === "string") && (candidate.rawReason === void 0 || typeof candidate.rawReason === "string") && (candidate.apiReason === void 0 || typeof candidate.apiReason === "string") && (candidate.retryable === void 0 || typeof candidate.retryable === "boolean") && (candidate.retryAfter === void 0 || typeof candidate.retryAfter === "number") && typeof candidate.getUserMessage === "function" && typeof candidate.toJSON === "function";
|
|
327
|
+
}
|
|
328
|
+
function hasSDKErrorType(error, type) {
|
|
329
|
+
return hasBrandedSDKErrorShape(error) && error[SDK_ERROR_TYPE_BRAND] === type;
|
|
330
|
+
}
|
|
285
331
|
function isSDKError(error) {
|
|
286
|
-
return error instanceof SDKError;
|
|
332
|
+
return error instanceof SDKError || hasBrandedSDKErrorShape(error);
|
|
287
333
|
}
|
|
288
334
|
function isNetworkError(error) {
|
|
289
|
-
return error instanceof NetworkError;
|
|
335
|
+
return error instanceof NetworkError || hasSDKErrorType(error, "NetworkError");
|
|
290
336
|
}
|
|
291
337
|
function isValidationError(error) {
|
|
292
|
-
if (error instanceof ValidationError)
|
|
338
|
+
if (error instanceof ValidationError || hasSDKErrorType(error, "ValidationError")) {
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
293
341
|
if (error == null || typeof error !== "object") return false;
|
|
294
342
|
const candidate = error;
|
|
295
343
|
return candidate.name === "ValidationError" && candidate.code === "VALIDATION_ERROR" && typeof candidate.message === "string" && typeof candidate.getUserMessage === "function" && typeof candidate.toJSON === "function";
|
|
296
344
|
}
|
|
297
345
|
function isApiError(error) {
|
|
298
|
-
return error instanceof ApiError;
|
|
346
|
+
return error instanceof ApiError || hasSDKErrorType(error, "ApiError");
|
|
299
347
|
}
|
|
300
348
|
function isConfigError(error) {
|
|
301
|
-
return error instanceof ConfigError;
|
|
349
|
+
return error instanceof ConfigError || hasSDKErrorType(error, "ConfigError");
|
|
302
350
|
}
|
|
303
351
|
function isTimeoutError(error) {
|
|
304
|
-
return error instanceof TimeoutError;
|
|
352
|
+
return error instanceof TimeoutError || hasSDKErrorType(error, "TimeoutError");
|
|
305
353
|
}
|
|
306
354
|
function isGoneError(error) {
|
|
307
|
-
return error instanceof GoneError;
|
|
355
|
+
return error instanceof GoneError || hasSDKErrorType(error, "GoneError");
|
|
308
356
|
}
|
|
309
357
|
function isServiceUnavailableError(error) {
|
|
310
|
-
return error instanceof ServiceUnavailableError;
|
|
358
|
+
return error instanceof ServiceUnavailableError || hasSDKErrorType(error, "ServiceUnavailableError");
|
|
311
359
|
}
|
|
312
360
|
function isUsageLimitError(error) {
|
|
313
|
-
return error instanceof UsageLimitError;
|
|
361
|
+
return error instanceof UsageLimitError || hasSDKErrorType(error, "UsageLimitError");
|
|
314
362
|
}
|
|
315
363
|
function isAuthError(error) {
|
|
316
|
-
return error instanceof AuthError;
|
|
364
|
+
return error instanceof AuthError || hasSDKErrorType(error, "AuthError");
|
|
317
365
|
}
|
|
318
366
|
function isPermissionError(error) {
|
|
319
|
-
return error instanceof PermissionError;
|
|
367
|
+
return error instanceof PermissionError || hasSDKErrorType(error, "PermissionError");
|
|
320
368
|
}
|
|
321
369
|
function isNotFoundError(error) {
|
|
322
|
-
return error instanceof NotFoundError;
|
|
370
|
+
return error instanceof NotFoundError || hasSDKErrorType(error, "NotFoundError");
|
|
323
371
|
}
|
|
324
372
|
function isConflictError(error) {
|
|
325
|
-
return error instanceof ConflictError;
|
|
373
|
+
return error instanceof ConflictError || hasSDKErrorType(error, "ConflictError");
|
|
326
374
|
}
|
|
327
375
|
function isRateLimitError(error) {
|
|
328
|
-
return error instanceof RateLimitError;
|
|
376
|
+
return error instanceof RateLimitError || hasSDKErrorType(error, "RateLimitError");
|
|
329
377
|
}
|
|
330
378
|
var createNetworkError = (message, status, details, userMessage, suggestion) => new NetworkError(message, status, details, userMessage, suggestion);
|
|
331
379
|
var createValidationError = (message, details, userMessage, suggestion, status) => new ValidationError(message, details, userMessage, suggestion, status);
|
|
@@ -382,6 +430,7 @@ export {
|
|
|
382
430
|
createTimeoutError,
|
|
383
431
|
createUsageLimitError,
|
|
384
432
|
createValidationError,
|
|
433
|
+
getSDKErrorReason,
|
|
385
434
|
isApiError,
|
|
386
435
|
isAuthError,
|
|
387
436
|
isCommerceSDKError,
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/errors.ts"],"sourcesContent":["export class SDKError extends Error {\n readonly code: string\n readonly status?: number\n readonly details?: unknown\n readonly userMessage?: string\n readonly suggestion?: string\n readonly requestId?: string\n readonly kind?: 'commerce'\n readonly reason?: CommerceErrorCode | 'unknown_commerce_error'\n readonly rawReason?: string\n readonly retryable?: boolean\n readonly retryAfter?: number\n\n constructor(\n code: string,\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(message)\n this.name = 'SDKError'\n this.code = code\n this.status = status\n this.details = details\n this.userMessage = userMessage\n this.suggestion = suggestion\n this.requestId = requestId\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, new.target)\n }\n }\n\n getUserMessage(): string {\n return this.userMessage || this.message\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this.status,\n details: this.details,\n userMessage: this.userMessage,\n suggestion: this.suggestion,\n ...(this.requestId !== undefined && { requestId: this.requestId }),\n ...(this.kind !== undefined && { kind: this.kind }),\n ...(this.reason !== undefined && { reason: this.reason }),\n ...(this.rawReason !== undefined && { rawReason: this.rawReason }),\n ...(this.retryable !== undefined && { retryable: this.retryable }),\n ...(this.retryAfter !== undefined && { retryAfter: this.retryAfter }),\n }\n }\n}\n\n/**\n * Canonical Cart/Checkout/PaymentSession error reasons. This public SDK mirror\n * intentionally does not import the private contracts package; parity is\n * enforced by a type test.\n */\nexport const COMMERCE_ERROR_CODES = [\n 'validation_failed',\n 'bad_request',\n 'unauthorized',\n 'forbidden',\n 'account_suspended',\n 'key_invalid',\n 'pat_tenant_header_forbidden',\n 'tenant_mismatch',\n 'test_tenant_expired',\n 'token_invalid',\n 'token_expired',\n 'origin_not_allowed',\n 'server_credentials_required',\n 'role_denied',\n 'scope_denied',\n 'feature_disabled',\n 'not_found',\n 'conflict',\n 'locked',\n 'cart_revision_conflict',\n 'rate_limit_exceeded',\n 'usage_limit_exceeded',\n 'service_unavailable',\n 'idempotency_conflict',\n 'idempotency_in_progress',\n 'idempotency_key_required',\n 'invalid_idempotency_key',\n 'cart_not_active',\n 'cart_locked',\n 'cart_empty',\n 'cart_market_unavailable',\n 'cart_market_mismatch',\n 'checkout_not_open',\n 'checkout_already_open',\n 'payment_slot_held',\n 'reservation_expired',\n 'payment_session_not_cancelable',\n 'payment_session_conflict',\n 'provider_identity_mismatch',\n 'payment_method_unavailable',\n 'provider_unavailable',\n 'lock_timeout',\n 'price_changed',\n 'pricing_fact_in_use',\n 'insufficient_stock',\n 'reservation_conflict',\n 'stock_lock_unavailable',\n 'variant_not_found',\n 'variant_stock_write_failed',\n 'stock_invariant_violation',\n 'payment_confirmation_in_flight',\n 'checkout_reservation_release_requires_transaction',\n 'admission_metadata_invalid',\n 'admission_metadata_required',\n 'capacity_exceeded',\n 'occurrence_lock_unavailable',\n 'occurrence_not_open',\n 'admission_type_capacity_exceeded',\n 'admission_type_occurrence_mismatch',\n 'admission_hold_expired',\n 'admission_hold_checkout_item_conflict',\n 'admission_hold_checkout_conflict',\n 'admission_hold_quantity_mismatch',\n 'admission_hold_unbound',\n 'admission_hold_missing',\n 'admission_hold_checkout_item_missing',\n 'admission_hold_expiry_failed',\n 'admission_hold_expiry_requires_transaction',\n 'admission_hold_line_item_mismatch',\n 'admission_materialization_failed',\n 'variant_inactive',\n 'variant_product_mismatch',\n 'product_not_public',\n 'market_not_found',\n 'market_shipping_currency_unsupported',\n 'missing_market_rate',\n 'missing_shipping_amount',\n 'no_enabled_payment_provider',\n 'product_market_unavailable',\n 'unsupported_currency',\n 'missing_price_row',\n 'payment_provider_currency_unsupported',\n 'discount_code_not_found',\n 'discount_not_started',\n 'discount_expired',\n 'discount_usage_limit',\n 'discount_per_customer_limit',\n 'discount_customer_required',\n 'discount_first_order_only',\n 'discount_customer_not_eligible',\n 'discount_customer_excluded',\n 'discount_items_required',\n 'discount_product_not_eligible',\n 'discount_product_excluded',\n 'discount_min_order_amount',\n 'discount_currency_scope_required',\n 'discount_allocation_method_unsupported',\n 'currency_mismatch',\n 'customer_token_required',\n 'market_required',\n 'server_derived',\n 'internal_error',\n] as const\n\nexport type CommerceErrorCode = (typeof COMMERCE_ERROR_CODES)[number]\n\ntype CommerceSDKErrorBase = SDKError & {\n readonly kind: 'commerce'\n readonly requestId: string\n readonly retryable: boolean\n readonly retryAfter?: number\n readonly details?: Record<string, unknown>\n}\n\nexport type CommerceSDKError = CommerceSDKErrorBase &\n (\n | { readonly reason: CommerceErrorCode; readonly rawReason?: never }\n | {\n readonly reason: 'unknown_commerce_error'\n readonly rawReason: string\n }\n )\n\nconst COMMERCE_ERROR_CODE_SET: ReadonlySet<string> = new Set(\n COMMERCE_ERROR_CODES,\n)\nconst COMMERCE_ERROR_ENVELOPE_KEYS = new Set([\n 'error',\n 'reason',\n 'requestId',\n 'retryable',\n 'details',\n])\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport type CommerceErrorEnvelope = {\n error: string\n reason: string\n requestId: string\n retryable: boolean\n details?: Record<string, unknown>\n}\n\nfunction commerceProtocolError(\n issue: string,\n trustedRequestId?: string,\n): SDKError {\n return createApiError(\n 'Invalid canonical commerce error response.',\n 502,\n { protocol: 'commerce-error-envelope', issue },\n 'The server returned an incompatible commerce error response.',\n 'Verify that the Console commerce contract is deployed before using this SDK version.',\n trustedRequestId,\n )\n}\n\n/** @internal Strictly parse a canonical commerce error without retaining its raw body. */\nexport function parseCommerceErrorEnvelope(\n body: unknown,\n headerRequestId?: string,\n): CommerceErrorEnvelope {\n if (headerRequestId === undefined) {\n throw commerceProtocolError('missing_request_id_header')\n }\n if (headerRequestId.length === 0) {\n throw commerceProtocolError('empty_request_id_header')\n }\n if (!isPlainRecord(body)) {\n throw commerceProtocolError('expected_object', headerRequestId)\n }\n if (Object.keys(body).some((key) => !COMMERCE_ERROR_ENVELOPE_KEYS.has(key))) {\n throw commerceProtocolError('unexpected_field', headerRequestId)\n }\n if (\n typeof body.error !== 'string' ||\n body.error.length === 0 ||\n typeof body.reason !== 'string' ||\n body.reason.length === 0 ||\n typeof body.requestId !== 'string' ||\n body.requestId.length === 0 ||\n (body.retryable !== undefined && typeof body.retryable !== 'boolean') ||\n (body.details !== undefined && !isPlainRecord(body.details))\n ) {\n throw commerceProtocolError('invalid_field', headerRequestId)\n }\n\n if (headerRequestId !== undefined && headerRequestId !== body.requestId) {\n throw commerceProtocolError('request_id_mismatch', headerRequestId)\n }\n\n return {\n error: body.error,\n reason: body.reason,\n requestId: body.requestId,\n retryable: body.retryable === true,\n ...(body.details === undefined ? {} : { details: body.details }),\n }\n}\n\n/** @internal Validate and apply the canonical commerce error envelope. */\nexport function enhanceCommerceError(\n error: SDKError,\n body: unknown,\n headerRequestId?: string,\n): SDKError {\n const envelope = parseCommerceErrorEnvelope(body, headerRequestId)\n\n const known = COMMERCE_ERROR_CODE_SET.has(envelope.reason)\n Object.assign(error, {\n code: envelope.reason,\n kind: 'commerce' as const,\n reason: known\n ? (envelope.reason as CommerceErrorCode)\n : 'unknown_commerce_error',\n ...(known ? {} : { rawReason: envelope.reason }),\n requestId: envelope.requestId,\n retryable: envelope.retryable,\n details: envelope.details,\n })\n return error\n}\n\nexport function isCommerceSDKError(error: unknown): error is CommerceSDKError {\n if (!(error instanceof SDKError) || error.kind !== 'commerce') return false\n if (\n typeof error.requestId !== 'string' ||\n typeof error.retryable !== 'boolean' ||\n (error.retryAfter !== undefined &&\n (!Number.isSafeInteger(error.retryAfter) || error.retryAfter < 0)) ||\n typeof error.reason !== 'string'\n ) {\n return false\n }\n return error.reason === 'unknown_commerce_error'\n ? typeof error.rawReason === 'string'\n : COMMERCE_ERROR_CODE_SET.has(error.reason) && error.rawReason === undefined\n}\n\nexport class NetworkError extends SDKError {\n constructor(\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('NETWORK_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'NetworkError'\n }\n}\n\nexport class ValidationError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n status = 400,\n ) {\n super('VALIDATION_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'ValidationError'\n }\n}\n\nexport class ApiError extends SDKError {\n constructor(\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'API_ERROR',\n message,\n status,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'ApiError'\n }\n}\n\nexport class ConfigError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('CONFIG_ERROR', message, undefined, details, userMessage, suggestion)\n this.name = 'ConfigError'\n }\n}\n\nexport class TimeoutError extends SDKError {\n constructor(\n message = 'Request timed out.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('TIMEOUT_ERROR', message, 408, details, userMessage, suggestion)\n this.name = 'TimeoutError'\n }\n}\n\nexport class GoneError extends SDKError {\n constructor(\n message = 'The requested resource is no longer available.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('GONE_ERROR', message, 410, details, userMessage, suggestion)\n this.name = 'GoneError'\n }\n}\n\nexport class ServiceUnavailableError extends SDKError {\n readonly retryAfter?: number\n\n constructor(\n message = 'Service temporarily unavailable.',\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super(\n 'SERVICE_UNAVAILABLE_ERROR',\n message,\n 503,\n details,\n userMessage,\n suggestion,\n )\n this.name = 'ServiceUnavailableError'\n this.retryAfter = retryAfter\n }\n}\n\nexport class UsageLimitError extends SDKError {\n readonly usage: { limit: number; current: number; remaining: number }\n\n constructor(\n message: string,\n usage: { limit: number; current: number; remaining: number },\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('USAGE_LIMIT_ERROR', message, 429, details, userMessage, suggestion)\n this.name = 'UsageLimitError'\n this.usage = usage\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n usage: this.usage,\n }\n }\n}\n\nexport class AuthError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'auth_error',\n message,\n 401,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'AuthError'\n }\n}\n\nexport class PermissionError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'permission_error',\n message,\n 403,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'PermissionError'\n }\n}\n\nexport class NotFoundError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'not_found',\n message,\n 404,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'NotFoundError'\n }\n}\n\nexport class ConflictError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super('conflict', message, 409, details, userMessage, suggestion, requestId)\n this.name = 'ConflictError'\n }\n}\n\nexport class RateLimitError extends SDKError {\n readonly retryAfter?: number\n\n constructor(\n message: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'rate_limit_exceeded',\n message,\n 429,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'RateLimitError'\n this.retryAfter = retryAfter\n }\n}\n\nexport function isSDKError(error: unknown): error is SDKError {\n return error instanceof SDKError\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n if (error instanceof ValidationError) return true\n if (error == null || typeof error !== 'object') return false\n\n const candidate = error as {\n code?: unknown\n name?: unknown\n message?: unknown\n getUserMessage?: unknown\n toJSON?: unknown\n }\n return (\n candidate.name === 'ValidationError' &&\n candidate.code === 'VALIDATION_ERROR' &&\n typeof candidate.message === 'string' &&\n typeof candidate.getUserMessage === 'function' &&\n typeof candidate.toJSON === 'function'\n )\n}\n\nexport function isApiError(error: unknown): error is ApiError {\n return error instanceof ApiError\n}\n\nexport function isConfigError(error: unknown): error is ConfigError {\n return error instanceof ConfigError\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError\n}\n\nexport function isGoneError(error: unknown): error is GoneError {\n return error instanceof GoneError\n}\n\nexport function isServiceUnavailableError(\n error: unknown,\n): error is ServiceUnavailableError {\n return error instanceof ServiceUnavailableError\n}\n\nexport function isUsageLimitError(error: unknown): error is UsageLimitError {\n return error instanceof UsageLimitError\n}\n\nexport function isAuthError(error: unknown): error is AuthError {\n return error instanceof AuthError\n}\n\nexport function isPermissionError(error: unknown): error is PermissionError {\n return error instanceof PermissionError\n}\n\nexport function isNotFoundError(error: unknown): error is NotFoundError {\n return error instanceof NotFoundError\n}\n\nexport function isConflictError(error: unknown): error is ConflictError {\n return error instanceof ConflictError\n}\n\nexport function isRateLimitError(error: unknown): error is RateLimitError {\n return error instanceof RateLimitError\n}\n\nexport const createNetworkError = (\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new NetworkError(message, status, details, userMessage, suggestion)\n\nexport const createValidationError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n status?: number,\n) => new ValidationError(message, details, userMessage, suggestion, status)\n\nexport const createApiError = (\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new ApiError(message, status, details, userMessage, suggestion, requestId)\n\nexport const createConfigError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ConfigError(message, details, userMessage, suggestion)\n\nexport const createTimeoutError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new TimeoutError(message, details, userMessage, suggestion)\n\nexport const createGoneError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new GoneError(message, details, userMessage, suggestion)\n\nexport const createServiceUnavailableError = (\n message?: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) =>\n new ServiceUnavailableError(\n message,\n retryAfter,\n details,\n userMessage,\n suggestion,\n )\n\nexport const createUsageLimitError = (\n message: string,\n usage: { limit: number; current: number; remaining: number },\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new UsageLimitError(message, usage, details, userMessage, suggestion)\n\nexport const createAuthError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new AuthError(message, details, userMessage, suggestion, requestId)\n\nexport const createPermissionError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new PermissionError(message, details, userMessage, suggestion, requestId)\n\nexport const createNotFoundError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new NotFoundError(message, details, userMessage, suggestion, requestId)\n\nexport const createConflictError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new ConflictError(message, details, userMessage, suggestion, requestId)\n\nexport const createRateLimitError = (\n message: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) =>\n new RateLimitError(\n message,\n retryAfter,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n"],"mappings":";AAAO,IAAM,WAAN,cAAuB,MAAM;AAAA,EAalC,YACE,MACA,SACA,QACA,SACA,aACA,YACA,WACA;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,YAAY;AAEjB,QAAI,MAAM,mBAAmB;AAC3B,YAAM,kBAAkB,MAAM,UAAU;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,iBAAyB;AACvB,WAAO,KAAK,eAAe,KAAK;AAAA,EAClC;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB,GAAI,KAAK,cAAc,UAAa,EAAE,WAAW,KAAK,UAAU;AAAA,MAChE,GAAI,KAAK,SAAS,UAAa,EAAE,MAAM,KAAK,KAAK;AAAA,MACjD,GAAI,KAAK,WAAW,UAAa,EAAE,QAAQ,KAAK,OAAO;AAAA,MACvD,GAAI,KAAK,cAAc,UAAa,EAAE,WAAW,KAAK,UAAU;AAAA,MAChE,GAAI,KAAK,cAAc,UAAa,EAAE,WAAW,KAAK,UAAU;AAAA,MAChE,GAAI,KAAK,eAAe,UAAa,EAAE,YAAY,KAAK,WAAW;AAAA,IACrE;AAAA,EACF;AACF;AAOO,IAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAqBA,IAAM,0BAA+C,IAAI;AAAA,EACvD;AACF;AAqGO,SAAS,mBAAmB,OAA2C;AAC5E,MAAI,EAAE,iBAAiB,aAAa,MAAM,SAAS,WAAY,QAAO;AACtE,MACE,OAAO,MAAM,cAAc,YAC3B,OAAO,MAAM,cAAc,aAC1B,MAAM,eAAe,WACnB,CAAC,OAAO,cAAc,MAAM,UAAU,KAAK,MAAM,aAAa,MACjE,OAAO,MAAM,WAAW,UACxB;AACA,WAAO;AAAA,EACT;AACA,SAAO,MAAM,WAAW,2BACpB,OAAO,MAAM,cAAc,WAC3B,wBAAwB,IAAI,MAAM,MAAM,KAAK,MAAM,cAAc;AACvE;AAEO,IAAM,eAAN,cAA2B,SAAS;AAAA,EACzC,YACE,SACA,QACA,SACA,aACA,YACA;AACA,UAAM,iBAAiB,SAAS,QAAQ,SAAS,aAAa,UAAU;AACxE,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,kBAAN,cAA8B,SAAS;AAAA,EAC5C,YACE,SACA,SACA,aACA,YACA,SAAS,KACT;AACA,UAAM,oBAAoB,SAAS,QAAQ,SAAS,aAAa,UAAU;AAC3E,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,WAAN,cAAuB,SAAS;AAAA,EACrC,YACE,SACA,QACA,SACA,aACA,YACA,WACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,cAAN,cAA0B,SAAS;AAAA,EACxC,YACE,SACA,SACA,aACA,YACA;AACA,UAAM,gBAAgB,SAAS,QAAW,SAAS,aAAa,UAAU;AAC1E,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,eAAN,cAA2B,SAAS;AAAA,EACzC,YACE,UAAU,sBACV,SACA,aACA,YACA;AACA,UAAM,iBAAiB,SAAS,KAAK,SAAS,aAAa,UAAU;AACrE,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,YAAN,cAAwB,SAAS;AAAA,EACtC,YACE,UAAU,kDACV,SACA,aACA,YACA;AACA,UAAM,cAAc,SAAS,KAAK,SAAS,aAAa,UAAU;AAClE,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,0BAAN,cAAsC,SAAS;AAAA,EAGpD,YACE,UAAU,oCACV,YACA,SACA,aACA,YACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,OAAO;AACZ,SAAK,aAAa;AAAA,EACpB;AACF;AAEO,IAAM,kBAAN,cAA8B,SAAS;AAAA,EAG5C,YACE,SACA,OACA,SACA,aACA,YACA;AACA,UAAM,qBAAqB,SAAS,KAAK,SAAS,aAAa,UAAU;AACzE,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,MACL,GAAG,MAAM,OAAO;AAAA,MAChB,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;AAEO,IAAM,YAAN,cAAwB,SAAS;AAAA,EACtC,YACE,SACA,SACA,aACA,YACA,WACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,kBAAN,cAA8B,SAAS;AAAA,EAC5C,YACE,SACA,SACA,aACA,YACA,WACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,cAA4B,SAAS;AAAA,EAC1C,YACE,SACA,SACA,aACA,YACA,WACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,cAA4B,SAAS;AAAA,EAC1C,YACE,SACA,SACA,aACA,YACA,WACA;AACA,UAAM,YAAY,SAAS,KAAK,SAAS,aAAa,YAAY,SAAS;AAC3E,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,iBAAN,cAA6B,SAAS;AAAA,EAG3C,YACE,SACA,YACA,SACA,aACA,YACA,WACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,OAAO;AACZ,SAAK,aAAa;AAAA,EACpB;AACF;AAEO,SAAS,WAAW,OAAmC;AAC5D,SAAO,iBAAiB;AAC1B;AAEO,SAAS,eAAe,OAAuC;AACpE,SAAO,iBAAiB;AAC1B;AAEO,SAAS,kBAAkB,OAA0C;AAC1E,MAAI,iBAAiB,gBAAiB,QAAO;AAC7C,MAAI,SAAS,QAAQ,OAAO,UAAU,SAAU,QAAO;AAEvD,QAAM,YAAY;AAOlB,SACE,UAAU,SAAS,qBACnB,UAAU,SAAS,sBACnB,OAAO,UAAU,YAAY,YAC7B,OAAO,UAAU,mBAAmB,cACpC,OAAO,UAAU,WAAW;AAEhC;AAEO,SAAS,WAAW,OAAmC;AAC5D,SAAO,iBAAiB;AAC1B;AAEO,SAAS,cAAc,OAAsC;AAClE,SAAO,iBAAiB;AAC1B;AAEO,SAAS,eAAe,OAAuC;AACpE,SAAO,iBAAiB;AAC1B;AAEO,SAAS,YAAY,OAAoC;AAC9D,SAAO,iBAAiB;AAC1B;AAEO,SAAS,0BACd,OACkC;AAClC,SAAO,iBAAiB;AAC1B;AAEO,SAAS,kBAAkB,OAA0C;AAC1E,SAAO,iBAAiB;AAC1B;AAEO,SAAS,YAAY,OAAoC;AAC9D,SAAO,iBAAiB;AAC1B;AAEO,SAAS,kBAAkB,OAA0C;AAC1E,SAAO,iBAAiB;AAC1B;AAEO,SAAS,gBAAgB,OAAwC;AACtE,SAAO,iBAAiB;AAC1B;AAEO,SAAS,gBAAgB,OAAwC;AACtE,SAAO,iBAAiB;AAC1B;AAEO,SAAS,iBAAiB,OAAyC;AACxE,SAAO,iBAAiB;AAC1B;AAEO,IAAM,qBAAqB,CAChC,SACA,QACA,SACA,aACA,eACG,IAAI,aAAa,SAAS,QAAQ,SAAS,aAAa,UAAU;AAEhE,IAAM,wBAAwB,CACnC,SACA,SACA,aACA,YACA,WACG,IAAI,gBAAgB,SAAS,SAAS,aAAa,YAAY,MAAM;AAEnE,IAAM,iBAAiB,CAC5B,SACA,QACA,SACA,aACA,YACA,cACG,IAAI,SAAS,SAAS,QAAQ,SAAS,aAAa,YAAY,SAAS;AAEvE,IAAM,oBAAoB,CAC/B,SACA,SACA,aACA,eACG,IAAI,YAAY,SAAS,SAAS,aAAa,UAAU;AAEvD,IAAM,qBAAqB,CAChC,SACA,SACA,aACA,eACG,IAAI,aAAa,SAAS,SAAS,aAAa,UAAU;AAExD,IAAM,kBAAkB,CAC7B,SACA,SACA,aACA,eACG,IAAI,UAAU,SAAS,SAAS,aAAa,UAAU;AAErD,IAAM,gCAAgC,CAC3C,SACA,YACA,SACA,aACA,eAEA,IAAI;AAAA,EACF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEK,IAAM,wBAAwB,CACnC,SACA,OACA,SACA,aACA,eACG,IAAI,gBAAgB,SAAS,OAAO,SAAS,aAAa,UAAU;AAElE,IAAM,kBAAkB,CAC7B,SACA,SACA,aACA,YACA,cACG,IAAI,UAAU,SAAS,SAAS,aAAa,YAAY,SAAS;AAEhE,IAAM,wBAAwB,CACnC,SACA,SACA,aACA,YACA,cACG,IAAI,gBAAgB,SAAS,SAAS,aAAa,YAAY,SAAS;AAEtE,IAAM,sBAAsB,CACjC,SACA,SACA,aACA,YACA,cACG,IAAI,cAAc,SAAS,SAAS,aAAa,YAAY,SAAS;AAEpE,IAAM,sBAAsB,CACjC,SACA,SACA,aACA,YACA,cACG,IAAI,cAAc,SAAS,SAAS,aAAa,YAAY,SAAS;AAEpE,IAAM,uBAAuB,CAClC,SACA,YACA,SACA,aACA,YACA,cAEA,IAAI;AAAA,EACF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/core/errors.ts"],"sourcesContent":["const SDK_ERROR_BRAND = Symbol.for('@01.software/sdk/SDKError')\nconst SDK_ERROR_TYPE_BRAND = Symbol.for('@01.software/sdk/SDKError.type')\n\ntype SDKErrorType =\n | 'NetworkError'\n | 'ValidationError'\n | 'ApiError'\n | 'ConfigError'\n | 'TimeoutError'\n | 'GoneError'\n | 'ServiceUnavailableError'\n | 'UsageLimitError'\n | 'AuthError'\n | 'PermissionError'\n | 'NotFoundError'\n | 'ConflictError'\n | 'RateLimitError'\n\nfunction defineSDKErrorBrand(error: SDKError): void {\n Object.defineProperty(error, SDK_ERROR_BRAND, {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n })\n}\n\nfunction defineSDKErrorType(error: SDKError, type: SDKErrorType): void {\n Object.defineProperty(error, SDK_ERROR_TYPE_BRAND, {\n value: type,\n enumerable: false,\n configurable: false,\n writable: false,\n })\n}\n\nexport class SDKError extends Error {\n readonly code: string\n readonly status?: number\n readonly details?: unknown\n readonly userMessage?: string\n readonly suggestion?: string\n readonly requestId?: string\n readonly kind?: 'commerce'\n readonly reason?: CommerceErrorCode | 'unknown_commerce_error'\n readonly rawReason?: string\n /** Machine-readable reason from a non-commerce API response. */\n readonly apiReason?: string\n readonly retryable?: boolean\n readonly retryAfter?: number\n\n constructor(\n code: string,\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(message)\n this.name = 'SDKError'\n this.code = code\n this.status = status\n this.details = details\n this.userMessage = userMessage\n this.suggestion = suggestion\n this.requestId = requestId\n defineSDKErrorBrand(this)\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, new.target)\n }\n }\n\n getUserMessage(): string {\n return this.userMessage || this.message\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this.status,\n details: this.details,\n userMessage: this.userMessage,\n suggestion: this.suggestion,\n ...(this.requestId !== undefined && { requestId: this.requestId }),\n ...(this.kind !== undefined && { kind: this.kind }),\n ...(this.reason !== undefined && { reason: this.reason }),\n ...(this.rawReason !== undefined && { rawReason: this.rawReason }),\n ...(this.apiReason !== undefined && { apiReason: this.apiReason }),\n ...(this.retryable !== undefined && { retryable: this.retryable }),\n ...(this.retryAfter !== undefined && { retryAfter: this.retryAfter }),\n }\n }\n}\n\n/**\n * Canonical Cart/Checkout/PaymentSession error reasons. This public SDK mirror\n * intentionally does not import the private contracts package; parity is\n * enforced by a type test.\n */\nexport const COMMERCE_ERROR_CODES = [\n 'validation_failed',\n 'bad_request',\n 'unauthorized',\n 'forbidden',\n 'account_suspended',\n 'key_invalid',\n 'pat_tenant_header_forbidden',\n 'tenant_mismatch',\n 'test_tenant_expired',\n 'token_invalid',\n 'token_expired',\n 'origin_not_allowed',\n 'server_credentials_required',\n 'role_denied',\n 'scope_denied',\n 'feature_disabled',\n 'not_found',\n 'conflict',\n 'locked',\n 'cart_revision_conflict',\n 'rate_limit_exceeded',\n 'usage_limit_exceeded',\n 'service_unavailable',\n 'idempotency_conflict',\n 'idempotency_in_progress',\n 'idempotency_key_required',\n 'invalid_idempotency_key',\n 'cart_not_active',\n 'cart_locked',\n 'cart_empty',\n 'cart_market_unavailable',\n 'cart_market_mismatch',\n 'checkout_not_open',\n 'checkout_already_open',\n 'payment_slot_held',\n 'reservation_expired',\n 'payment_session_not_cancelable',\n 'payment_session_conflict',\n 'provider_identity_mismatch',\n 'managed_refund_attestation_forbidden',\n 'payment_method_unavailable',\n 'provider_unavailable',\n 'lock_timeout',\n 'price_changed',\n 'pricing_fact_in_use',\n 'insufficient_stock',\n 'reservation_conflict',\n 'stock_lock_unavailable',\n 'variant_not_found',\n 'variant_stock_write_failed',\n 'stock_invariant_violation',\n 'payment_confirmation_in_flight',\n 'checkout_reservation_release_requires_transaction',\n 'admission_metadata_invalid',\n 'admission_metadata_required',\n 'capacity_exceeded',\n 'occurrence_lock_unavailable',\n 'occurrence_not_open',\n 'admission_type_capacity_exceeded',\n 'admission_type_occurrence_mismatch',\n 'admission_hold_expired',\n 'admission_hold_checkout_item_conflict',\n 'admission_hold_checkout_conflict',\n 'admission_hold_quantity_mismatch',\n 'admission_hold_unbound',\n 'admission_hold_missing',\n 'admission_hold_checkout_item_missing',\n 'admission_hold_expiry_failed',\n 'admission_hold_expiry_requires_transaction',\n 'admission_hold_line_item_mismatch',\n 'admission_materialization_failed',\n 'variant_inactive',\n 'variant_product_mismatch',\n 'product_not_public',\n 'market_not_found',\n 'market_shipping_currency_unsupported',\n 'missing_market_rate',\n 'missing_shipping_amount',\n 'no_enabled_payment_provider',\n 'product_market_unavailable',\n 'unsupported_currency',\n 'missing_price_row',\n 'payment_provider_currency_unsupported',\n 'discount_code_not_found',\n 'discount_not_started',\n 'discount_expired',\n 'discount_usage_limit',\n 'discount_per_customer_limit',\n 'discount_customer_required',\n 'discount_first_order_only',\n 'discount_customer_not_eligible',\n 'discount_customer_excluded',\n 'discount_items_required',\n 'discount_product_not_eligible',\n 'discount_product_excluded',\n 'discount_min_order_amount',\n 'discount_currency_scope_required',\n 'discount_allocation_method_unsupported',\n 'currency_mismatch',\n 'customer_token_required',\n 'market_required',\n 'server_derived',\n 'internal_error',\n] as const\n\nexport type CommerceErrorCode = (typeof COMMERCE_ERROR_CODES)[number]\n\ntype CommerceSDKErrorBase = SDKError & {\n readonly kind: 'commerce'\n readonly requestId: string\n readonly retryable: boolean\n readonly retryAfter?: number\n readonly details?: Record<string, unknown>\n}\n\nexport type CommerceSDKError = CommerceSDKErrorBase &\n (\n | { readonly reason: CommerceErrorCode; readonly rawReason?: never }\n | {\n readonly reason: 'unknown_commerce_error'\n readonly rawReason: string\n }\n )\n\nconst COMMERCE_ERROR_CODE_SET: ReadonlySet<string> = new Set(\n COMMERCE_ERROR_CODES,\n)\nconst COMMERCE_ERROR_ENVELOPE_KEYS = new Set([\n 'error',\n 'reason',\n 'requestId',\n 'retryable',\n 'details',\n])\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport type CommerceErrorEnvelope = {\n error: string\n reason: string\n requestId: string\n retryable: boolean\n details?: Record<string, unknown>\n}\n\nfunction commerceProtocolError(\n issue: string,\n trustedRequestId?: string,\n): SDKError {\n return createApiError(\n 'Invalid canonical commerce error response.',\n 502,\n { protocol: 'commerce-error-envelope', issue },\n 'The server returned an incompatible commerce error response.',\n 'Verify that the Console commerce contract is deployed before using this SDK version.',\n trustedRequestId,\n )\n}\n\n/** @internal Strictly parse a canonical commerce error without retaining its raw body. */\nexport function parseCommerceErrorEnvelope(\n body: unknown,\n headerRequestId?: string,\n): CommerceErrorEnvelope {\n if (headerRequestId === undefined) {\n throw commerceProtocolError('missing_request_id_header')\n }\n if (headerRequestId.length === 0) {\n throw commerceProtocolError('empty_request_id_header')\n }\n if (!isPlainRecord(body)) {\n throw commerceProtocolError('expected_object', headerRequestId)\n }\n if (Object.keys(body).some((key) => !COMMERCE_ERROR_ENVELOPE_KEYS.has(key))) {\n throw commerceProtocolError('unexpected_field', headerRequestId)\n }\n if (\n typeof body.error !== 'string' ||\n body.error.length === 0 ||\n typeof body.reason !== 'string' ||\n body.reason.length === 0 ||\n typeof body.requestId !== 'string' ||\n body.requestId.length === 0 ||\n (body.retryable !== undefined && typeof body.retryable !== 'boolean') ||\n (body.details !== undefined && !isPlainRecord(body.details))\n ) {\n throw commerceProtocolError('invalid_field', headerRequestId)\n }\n\n if (headerRequestId !== undefined && headerRequestId !== body.requestId) {\n throw commerceProtocolError('request_id_mismatch', headerRequestId)\n }\n\n return {\n error: body.error,\n reason: body.reason,\n requestId: body.requestId,\n retryable: body.retryable === true,\n ...(body.details === undefined ? {} : { details: body.details }),\n }\n}\n\n/** @internal Validate and apply the canonical commerce error envelope. */\nexport function enhanceCommerceError(\n error: SDKError,\n body: unknown,\n headerRequestId?: string,\n): SDKError {\n const envelope = parseCommerceErrorEnvelope(body, headerRequestId)\n\n const known = COMMERCE_ERROR_CODE_SET.has(envelope.reason)\n Object.assign(error, {\n code: envelope.reason,\n kind: 'commerce' as const,\n reason: known\n ? (envelope.reason as CommerceErrorCode)\n : 'unknown_commerce_error',\n ...(known ? {} : { rawReason: envelope.reason }),\n requestId: envelope.requestId,\n retryable: envelope.retryable,\n details: envelope.details,\n })\n return error\n}\n\n/** @internal Apply a non-commerce reason without canonical-commerce validation. */\nexport function enhanceNonCommerceError(\n error: SDKError,\n reason: unknown,\n): SDKError {\n if (typeof reason === 'string') Object.assign(error, { apiReason: reason })\n return error\n}\n\n/**\n * Read the server-provided machine reason across strict commerce and\n * non-commerce SDK errors. Unknown commerce reasons are returned verbatim.\n */\nexport function getSDKErrorReason(error: SDKError): string | undefined {\n if (error.kind !== 'commerce') return error.apiReason\n return error.reason === 'unknown_commerce_error'\n ? error.rawReason\n : error.reason\n}\n\nexport function isCommerceSDKError(error: unknown): error is CommerceSDKError {\n if (!isSDKError(error) || error.kind !== 'commerce') return false\n if (\n typeof error.requestId !== 'string' ||\n typeof error.retryable !== 'boolean' ||\n (error.retryAfter !== undefined &&\n (!Number.isSafeInteger(error.retryAfter) || error.retryAfter < 0)) ||\n typeof error.reason !== 'string'\n ) {\n return false\n }\n return error.reason === 'unknown_commerce_error'\n ? typeof error.rawReason === 'string'\n : COMMERCE_ERROR_CODE_SET.has(error.reason) && error.rawReason === undefined\n}\n\nexport class NetworkError extends SDKError {\n constructor(\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('NETWORK_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'NetworkError'\n defineSDKErrorType(this, 'NetworkError')\n }\n}\n\nexport class ValidationError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n status = 400,\n ) {\n super('VALIDATION_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'ValidationError'\n defineSDKErrorType(this, 'ValidationError')\n }\n}\n\nexport class ApiError extends SDKError {\n constructor(\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'API_ERROR',\n message,\n status,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'ApiError'\n defineSDKErrorType(this, 'ApiError')\n }\n}\n\nexport class ConfigError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('CONFIG_ERROR', message, undefined, details, userMessage, suggestion)\n this.name = 'ConfigError'\n defineSDKErrorType(this, 'ConfigError')\n }\n}\n\nexport class TimeoutError extends SDKError {\n constructor(\n message = 'Request timed out.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('TIMEOUT_ERROR', message, 408, details, userMessage, suggestion)\n this.name = 'TimeoutError'\n defineSDKErrorType(this, 'TimeoutError')\n }\n}\n\nexport class GoneError extends SDKError {\n constructor(\n message = 'The requested resource is no longer available.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('GONE_ERROR', message, 410, details, userMessage, suggestion)\n this.name = 'GoneError'\n defineSDKErrorType(this, 'GoneError')\n }\n}\n\nexport class ServiceUnavailableError extends SDKError {\n readonly retryAfter?: number\n\n constructor(\n message = 'Service temporarily unavailable.',\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super(\n 'SERVICE_UNAVAILABLE_ERROR',\n message,\n 503,\n details,\n userMessage,\n suggestion,\n )\n this.name = 'ServiceUnavailableError'\n this.retryAfter = retryAfter\n defineSDKErrorType(this, 'ServiceUnavailableError')\n }\n}\n\nexport class UsageLimitError extends SDKError {\n readonly usage: { limit: number; current: number; remaining: number }\n\n constructor(\n message: string,\n usage: { limit: number; current: number; remaining: number },\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('USAGE_LIMIT_ERROR', message, 429, details, userMessage, suggestion)\n this.name = 'UsageLimitError'\n this.usage = usage\n defineSDKErrorType(this, 'UsageLimitError')\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n usage: this.usage,\n }\n }\n}\n\nexport class AuthError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'auth_error',\n message,\n 401,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'AuthError'\n defineSDKErrorType(this, 'AuthError')\n }\n}\n\nexport class PermissionError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'permission_error',\n message,\n 403,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'PermissionError'\n defineSDKErrorType(this, 'PermissionError')\n }\n}\n\nexport class NotFoundError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'not_found',\n message,\n 404,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'NotFoundError'\n defineSDKErrorType(this, 'NotFoundError')\n }\n}\n\nexport class ConflictError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super('conflict', message, 409, details, userMessage, suggestion, requestId)\n this.name = 'ConflictError'\n defineSDKErrorType(this, 'ConflictError')\n }\n}\n\nexport class RateLimitError extends SDKError {\n readonly retryAfter?: number\n\n constructor(\n message: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n ) {\n super(\n 'rate_limit_exceeded',\n message,\n 429,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n this.name = 'RateLimitError'\n this.retryAfter = retryAfter\n defineSDKErrorType(this, 'RateLimitError')\n }\n}\n\nfunction hasBrandedSDKErrorShape(error: unknown): error is SDKError {\n if (error === null || typeof error !== 'object') return false\n\n const candidate = error as Record<PropertyKey, unknown>\n return (\n candidate[SDK_ERROR_BRAND] === true &&\n typeof candidate.name === 'string' &&\n typeof candidate.code === 'string' &&\n typeof candidate.message === 'string' &&\n (candidate.status === undefined || typeof candidate.status === 'number') &&\n (candidate.userMessage === undefined ||\n typeof candidate.userMessage === 'string') &&\n (candidate.suggestion === undefined ||\n typeof candidate.suggestion === 'string') &&\n (candidate.requestId === undefined ||\n typeof candidate.requestId === 'string') &&\n (candidate.kind === undefined || candidate.kind === 'commerce') &&\n (candidate.reason === undefined || typeof candidate.reason === 'string') &&\n (candidate.rawReason === undefined ||\n typeof candidate.rawReason === 'string') &&\n (candidate.apiReason === undefined ||\n typeof candidate.apiReason === 'string') &&\n (candidate.retryable === undefined ||\n typeof candidate.retryable === 'boolean') &&\n (candidate.retryAfter === undefined ||\n typeof candidate.retryAfter === 'number') &&\n typeof candidate.getUserMessage === 'function' &&\n typeof candidate.toJSON === 'function'\n )\n}\n\nfunction hasSDKErrorType(error: unknown, type: SDKErrorType): boolean {\n return (\n hasBrandedSDKErrorShape(error) &&\n (error as unknown as Record<PropertyKey, unknown>)[SDK_ERROR_TYPE_BRAND] ===\n type\n )\n}\n\nexport function isSDKError(error: unknown): error is SDKError {\n return error instanceof SDKError || hasBrandedSDKErrorShape(error)\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError || hasSDKErrorType(error, 'NetworkError')\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n if (\n error instanceof ValidationError ||\n hasSDKErrorType(error, 'ValidationError')\n ) {\n return true\n }\n if (error == null || typeof error !== 'object') return false\n\n const candidate = error as {\n code?: unknown\n name?: unknown\n message?: unknown\n getUserMessage?: unknown\n toJSON?: unknown\n }\n return (\n candidate.name === 'ValidationError' &&\n candidate.code === 'VALIDATION_ERROR' &&\n typeof candidate.message === 'string' &&\n typeof candidate.getUserMessage === 'function' &&\n typeof candidate.toJSON === 'function'\n )\n}\n\nexport function isApiError(error: unknown): error is ApiError {\n return error instanceof ApiError || hasSDKErrorType(error, 'ApiError')\n}\n\nexport function isConfigError(error: unknown): error is ConfigError {\n return error instanceof ConfigError || hasSDKErrorType(error, 'ConfigError')\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError || hasSDKErrorType(error, 'TimeoutError')\n}\n\nexport function isGoneError(error: unknown): error is GoneError {\n return error instanceof GoneError || hasSDKErrorType(error, 'GoneError')\n}\n\nexport function isServiceUnavailableError(\n error: unknown,\n): error is ServiceUnavailableError {\n return (\n error instanceof ServiceUnavailableError ||\n hasSDKErrorType(error, 'ServiceUnavailableError')\n )\n}\n\nexport function isUsageLimitError(error: unknown): error is UsageLimitError {\n return (\n error instanceof UsageLimitError ||\n hasSDKErrorType(error, 'UsageLimitError')\n )\n}\n\nexport function isAuthError(error: unknown): error is AuthError {\n return error instanceof AuthError || hasSDKErrorType(error, 'AuthError')\n}\n\nexport function isPermissionError(error: unknown): error is PermissionError {\n return (\n error instanceof PermissionError ||\n hasSDKErrorType(error, 'PermissionError')\n )\n}\n\nexport function isNotFoundError(error: unknown): error is NotFoundError {\n return (\n error instanceof NotFoundError || hasSDKErrorType(error, 'NotFoundError')\n )\n}\n\nexport function isConflictError(error: unknown): error is ConflictError {\n return (\n error instanceof ConflictError || hasSDKErrorType(error, 'ConflictError')\n )\n}\n\nexport function isRateLimitError(error: unknown): error is RateLimitError {\n return (\n error instanceof RateLimitError || hasSDKErrorType(error, 'RateLimitError')\n )\n}\n\nexport const createNetworkError = (\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new NetworkError(message, status, details, userMessage, suggestion)\n\nexport const createValidationError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n status?: number,\n) => new ValidationError(message, details, userMessage, suggestion, status)\n\nexport const createApiError = (\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new ApiError(message, status, details, userMessage, suggestion, requestId)\n\nexport const createConfigError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ConfigError(message, details, userMessage, suggestion)\n\nexport const createTimeoutError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new TimeoutError(message, details, userMessage, suggestion)\n\nexport const createGoneError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new GoneError(message, details, userMessage, suggestion)\n\nexport const createServiceUnavailableError = (\n message?: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) =>\n new ServiceUnavailableError(\n message,\n retryAfter,\n details,\n userMessage,\n suggestion,\n )\n\nexport const createUsageLimitError = (\n message: string,\n usage: { limit: number; current: number; remaining: number },\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new UsageLimitError(message, usage, details, userMessage, suggestion)\n\nexport const createAuthError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new AuthError(message, details, userMessage, suggestion, requestId)\n\nexport const createPermissionError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new PermissionError(message, details, userMessage, suggestion, requestId)\n\nexport const createNotFoundError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new NotFoundError(message, details, userMessage, suggestion, requestId)\n\nexport const createConflictError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) => new ConflictError(message, details, userMessage, suggestion, requestId)\n\nexport const createRateLimitError = (\n message: string,\n retryAfter?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n requestId?: string,\n) =>\n new RateLimitError(\n message,\n retryAfter,\n details,\n userMessage,\n suggestion,\n requestId,\n )\n"],"mappings":";AAAA,IAAM,kBAAkB,uBAAO,IAAI,2BAA2B;AAC9D,IAAM,uBAAuB,uBAAO,IAAI,gCAAgC;AAiBxE,SAAS,oBAAoB,OAAuB;AAClD,SAAO,eAAe,OAAO,iBAAiB;AAAA,IAC5C,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACZ,CAAC;AACH;AAEA,SAAS,mBAAmB,OAAiB,MAA0B;AACrE,SAAO,eAAe,OAAO,sBAAsB;AAAA,IACjD,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,IAAM,WAAN,cAAuB,MAAM;AAAA,EAelC,YACE,MACA,SACA,QACA,SACA,aACA,YACA,WACA;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,wBAAoB,IAAI;AAExB,QAAI,MAAM,mBAAmB;AAC3B,YAAM,kBAAkB,MAAM,UAAU;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,iBAAyB;AACvB,WAAO,KAAK,eAAe,KAAK;AAAA,EAClC;AAAA,EAEA,SAAS;AACP,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB,GAAI,KAAK,cAAc,UAAa,EAAE,WAAW,KAAK,UAAU;AAAA,MAChE,GAAI,KAAK,SAAS,UAAa,EAAE,MAAM,KAAK,KAAK;AAAA,MACjD,GAAI,KAAK,WAAW,UAAa,EAAE,QAAQ,KAAK,OAAO;AAAA,MACvD,GAAI,KAAK,cAAc,UAAa,EAAE,WAAW,KAAK,UAAU;AAAA,MAChE,GAAI,KAAK,cAAc,UAAa,EAAE,WAAW,KAAK,UAAU;AAAA,MAChE,GAAI,KAAK,cAAc,UAAa,EAAE,WAAW,KAAK,UAAU;AAAA,MAChE,GAAI,KAAK,eAAe,UAAa,EAAE,YAAY,KAAK,WAAW;AAAA,IACrE;AAAA,EACF;AACF;AAOO,IAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAqBA,IAAM,0BAA+C,IAAI;AAAA,EACvD;AACF;AAkHO,SAAS,kBAAkB,OAAqC;AACrE,MAAI,MAAM,SAAS,WAAY,QAAO,MAAM;AAC5C,SAAO,M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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as Collection } from './const-
|
|
2
|
-
import { C as CollectionType } from './types-
|
|
3
|
-
import './payload-types-
|
|
1
|
+
import { C as Collection } from './const-JD8obaKg.js';
|
|
2
|
+
import { C as CollectionType } from './types-5ZlcAFuU.js';
|
|
3
|
+
import './payload-types-BOsckg8B.js';
|
|
4
4
|
|
|
5
5
|
type WebhookOperation = string;
|
|
6
6
|
/**
|
|
@@ -61,8 +61,10 @@ interface WebhookEvent<T extends Collection | string = Collection, TData = T ext
|
|
|
61
61
|
deliveryId?: string;
|
|
62
62
|
}
|
|
63
63
|
type WebhookHandler<T extends Collection | string = Collection, TData = T extends Collection ? CollectionType<T> : Record<string, unknown>> = (event: WebhookEvent<T, TData>) => Promise<void> | void;
|
|
64
|
+
/** @deprecated Use the signed receiver options from `@01.software/sdk/webhook`. */
|
|
64
65
|
interface WebhookOptions {
|
|
65
|
-
secret
|
|
66
|
+
/** Nonblank HMAC-SHA256 signing secret for this receiver. */
|
|
67
|
+
secret: string;
|
|
66
68
|
/** Max accepted skew for signed webhook delivery timestamps. Default: 300s. */
|
|
67
69
|
toleranceSeconds?: number;
|
|
68
70
|
}
|
|
@@ -74,13 +76,57 @@ type OrderChangedWebhookEvent<T extends Collection | string = Collection, TData
|
|
|
74
76
|
change: WebhookOrderChange;
|
|
75
77
|
};
|
|
76
78
|
declare const COMMERCE_NOTIFICATION_OPERATION: "notification";
|
|
77
|
-
declare const COMMERCE_NOTIFICATION_EVENTS: readonly ["orderPaid", "orderCanceled", "fulfillmentShipped", "orderDelivered", "returnRequested", "returnApproved", "returnRejected", "returnCanceled", "returnCompleted"];
|
|
79
|
+
declare const COMMERCE_NOTIFICATION_EVENTS: readonly ["orderPaid", "orderCanceled", "fulfillmentShipped", "orderDelivered", "returnRequested", "returnApproved", "returnRejected", "returnCanceled", "returnCompleted", "paymentReconciliationRequired", "paymentRefundRequiresAttention"];
|
|
78
80
|
type CommerceNotificationEventName = (typeof COMMERCE_NOTIFICATION_EVENTS)[number];
|
|
79
|
-
type
|
|
81
|
+
type CustomerCommerceNotificationEventName = Exclude<CommerceNotificationEventName, PaymentIncidentNotificationEventName>;
|
|
82
|
+
type CommerceNotificationSourceCollection = 'orders' | 'fulfillments' | 'returns' | 'payment-sessions' | 'payment-refund-attempts';
|
|
80
83
|
type CommerceNotificationSource = {
|
|
81
84
|
collection: CommerceNotificationSourceCollection;
|
|
82
85
|
id: string | number;
|
|
83
86
|
};
|
|
87
|
+
type PaymentIncidentNotificationEventName = 'paymentReconciliationRequired' | 'paymentRefundRequiresAttention';
|
|
88
|
+
type PaymentIncidentNotificationSourceCollection = 'payment-sessions' | 'payment-refund-attempts';
|
|
89
|
+
type PaymentIncidentNotificationReason = 'orderless_capture' | 'local_commit_ambiguous';
|
|
90
|
+
type PaymentIncidentNotificationStatus = 'reconciliation_required' | 'requires_attention';
|
|
91
|
+
type PaymentIncidentProviderObject = {
|
|
92
|
+
provider: string;
|
|
93
|
+
kind: 'payment' | 'refund';
|
|
94
|
+
id: string;
|
|
95
|
+
};
|
|
96
|
+
type PaymentIncidentMoney = {
|
|
97
|
+
amountMinor: number;
|
|
98
|
+
currency: string;
|
|
99
|
+
};
|
|
100
|
+
type PaymentIncidentNotificationBase = {
|
|
101
|
+
paymentSessionId: string;
|
|
102
|
+
checkoutId?: string;
|
|
103
|
+
orderId?: string;
|
|
104
|
+
providerObject: PaymentIncidentProviderObject;
|
|
105
|
+
money: PaymentIncidentMoney;
|
|
106
|
+
observedAt: string;
|
|
107
|
+
};
|
|
108
|
+
type PaymentReconciliationRequiredNotificationData = PaymentIncidentNotificationBase & {
|
|
109
|
+
source: {
|
|
110
|
+
collection: 'payment-sessions';
|
|
111
|
+
id: string;
|
|
112
|
+
};
|
|
113
|
+
providerObject: PaymentIncidentProviderObject & {
|
|
114
|
+
kind: 'payment';
|
|
115
|
+
};
|
|
116
|
+
status: 'reconciliation_required';
|
|
117
|
+
reason: 'orderless_capture';
|
|
118
|
+
refundAttemptId?: never;
|
|
119
|
+
};
|
|
120
|
+
type PaymentRefundRequiresAttentionNotificationData = PaymentIncidentNotificationBase & {
|
|
121
|
+
source: {
|
|
122
|
+
collection: 'payment-refund-attempts';
|
|
123
|
+
id: string;
|
|
124
|
+
};
|
|
125
|
+
refundAttemptId: string;
|
|
126
|
+
status: 'requires_attention';
|
|
127
|
+
reason: 'local_commit_ambiguous';
|
|
128
|
+
};
|
|
129
|
+
type PaymentIncidentNotificationData = PaymentReconciliationRequiredNotificationData | PaymentRefundRequiresAttentionNotificationData;
|
|
84
130
|
type CommerceNotificationData = {
|
|
85
131
|
source?: CommerceNotificationSource;
|
|
86
132
|
orderId?: string | number;
|
|
@@ -95,6 +141,13 @@ type CommerceNotificationData = {
|
|
|
95
141
|
returnStatus?: string;
|
|
96
142
|
refundAmount?: number;
|
|
97
143
|
completedAt?: string;
|
|
144
|
+
paymentSessionId?: string;
|
|
145
|
+
checkoutId?: string;
|
|
146
|
+
refundAttemptId?: string;
|
|
147
|
+
providerObject?: PaymentIncidentProviderObject;
|
|
148
|
+
money?: PaymentIncidentMoney;
|
|
149
|
+
reason?: PaymentIncidentNotificationReason;
|
|
150
|
+
observedAt?: string;
|
|
98
151
|
};
|
|
99
152
|
type CommerceNotification = {
|
|
100
153
|
event: CommerceNotificationEventName;
|
|
@@ -103,6 +156,8 @@ type CommerceNotification = {
|
|
|
103
156
|
orderId?: string;
|
|
104
157
|
fulfillmentId?: string;
|
|
105
158
|
returnId?: string;
|
|
159
|
+
paymentSessionId?: string;
|
|
160
|
+
refundAttemptId?: string;
|
|
106
161
|
};
|
|
107
162
|
type WebhookCommerceNotificationChange = {
|
|
108
163
|
type: 'notification';
|
|
@@ -126,7 +181,7 @@ type CommerceEmailEventConfig = {
|
|
|
126
181
|
};
|
|
127
182
|
type CommerceEmailConfig = {
|
|
128
183
|
version: 1;
|
|
129
|
-
commerceNotifications: Partial<Record<
|
|
184
|
+
commerceNotifications: Partial<Record<CustomerCommerceNotificationEventName, CommerceEmailEventConfig>>;
|
|
130
185
|
};
|
|
131
186
|
type CommerceNotificationHandlerContext = {
|
|
132
187
|
event: CommerceNotificationWebhookEvent;
|
|
@@ -137,7 +192,9 @@ type CommerceNotificationEventHandlers = Partial<Record<CommerceNotificationEven
|
|
|
137
192
|
unhandled?: (event: WebhookEvent<string, unknown>) => MaybePromise<void>;
|
|
138
193
|
};
|
|
139
194
|
type CommerceEmailHandlerContext = CommerceNotificationHandlerContext;
|
|
140
|
-
type CommerceEmailEventHandlers =
|
|
195
|
+
type CommerceEmailEventHandlers = Partial<Record<CustomerCommerceNotificationEventName, (context: CommerceEmailHandlerContext) => MaybePromise<void>>> & {
|
|
196
|
+
unhandled?: (event: WebhookEvent<string, unknown>) => MaybePromise<void>;
|
|
197
|
+
};
|
|
141
198
|
/**
|
|
142
199
|
* Returns true for semantic order-change webhooks emitted as update events.
|
|
143
200
|
*
|
|
@@ -183,7 +240,12 @@ interface CustomerAuthWebhookHandlers {
|
|
|
183
240
|
}
|
|
184
241
|
declare function isCustomerPasswordResetWebhookEvent(event: WebhookEvent<string, unknown>): event is CustomerPasswordResetWebhookEvent;
|
|
185
242
|
declare function createCustomerAuthWebhookHandler(handlers: CustomerAuthWebhookHandlers): WebhookHandler<string, unknown>;
|
|
186
|
-
|
|
243
|
+
/**
|
|
244
|
+
* @deprecated Import `handleSignedWebhook()` from `@01.software/sdk/webhook`.
|
|
245
|
+
* This compatibility alias is signed and fails closed when its required secret
|
|
246
|
+
* is missing or blank.
|
|
247
|
+
*/
|
|
248
|
+
declare function handleWebhook<T extends Collection | string = Collection, TData = T extends Collection ? CollectionType<T> : Record<string, unknown>>(request: Request, handler: WebhookHandler<T, TData>, options: WebhookOptions): Promise<Response>;
|
|
187
249
|
declare function createTypedWebhookHandler<T extends Collection>(collection: T, handler: (event: WebhookEvent<T>) => Promise<void> | void): WebhookHandler<T>;
|
|
188
250
|
|
|
189
|
-
export { type
|
|
251
|
+
export { isWebhookOperation as $, type PaymentIncidentNotificationStatus as A, type PaymentIncidentProviderObject as B, COMMERCE_NOTIFICATION_EVENTS as C, type WebhookChange as D, type WebhookCommerceNotificationChange as E, type WebhookEvent as F, type WebhookKnownOperation as G, type WebhookOperation as H, type WebhookOptions as I, type WebhookOrderChange as J, type WebhookOrderMoved as K, type WebhookOrderScope as L, createCommerceEmailWebhookHandler as M, createCommerceNotificationWebhookHandler as N, ORDER_CHANGED_EVENT_TYPE as O, type PaymentIncidentMoney as P, createCustomerAuthWebhookHandler as Q, createTypedWebhookHandler as R, defineCommerceEmailConfig as S, getCommerceNotificationIdempotencyKey as T, handleWebhook as U, isCommerceNotificationWebhookEvent as V, type WebhookHandler as W, isCustomerPasswordResetWebhookEvent as X, isOrderChangedWebhookEvent as Y, isValidWebhookEvent as Z, isWebhookCollection as _, COMMERCE_NOTIFICATION_EVENT_TYPE as a, type CustomerCommerceNotificationEventName as a0, type PaymentReconciliationRequiredNotificationData as a1, type PaymentRefundRequiresAttentionNotificationData as a2, COMMERCE_NOTIFICATION_OPERATION as b, CUSTOMER_PASSWORD_RESET_OPERATION as c, type CollectionWebhookOperation as d, type CommerceEmailChannel as e, type CommerceEmailConfig as f, type CommerceEmailEventConfig as g, type CommerceEmailEventHandlers as h, type CommerceEmailHandlerContext as i, type CommerceNotification as j, type CommerceNotificationData as k, type CommerceNotificationEventHandlers as l, type CommerceNotificationEventName as m, type CommerceNotificationHandlerContext as n, type CommerceNotificationSource as o, type CommerceNotificationSourceCollection as p, type CommerceNotificationWebhookEvent as q, type CustomerAuthWebhookEvent as r, type CustomerAuthWebhookHandlers as s, type CustomerPasswordResetWebhookData as t, type CustomerPasswordResetWebhookEvent as u, type OrderChangedWebhookEvent as v, type PaymentIncidentNotificationData as w, type PaymentIncidentNotificationEventName as x, type PaymentIncidentNotificationReason as y, type PaymentIncidentNotificationSourceCollection as z };
|