@01.software/sdk 0.48.0 → 0.49.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 +27 -0
- package/README.md +64 -7
- package/dist/client.cjs +189 -26
- 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 +189 -26
- package/dist/client.js.map +1 -1
- package/dist/{collection-client-D3ExJU-7.d.ts → collection-client-DnDt6EQz.d.ts} +4 -4
- package/dist/{collection-client-CBup9yOx.d.cts → collection-client-XfGLPuTf.d.cts} +4 -4
- package/dist/{const-BXEi1Kix.d.cts → const-CBba4lDo.d.cts} +1 -1
- package/dist/{const-k9gHylYa.d.ts → const-DCNV5Kq7.d.ts} +1 -1
- package/dist/errors.cjs +63 -15
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +10 -1
- package/dist/errors.d.ts +10 -1
- package/dist/errors.js +63 -15
- package/dist/errors.js.map +1 -1
- package/dist/{index-BCM9CTL7.d.cts → index-CbKyoEzy.d.cts} +3 -3
- package/dist/{index-CHGGkcLj.d.ts → index-DUuIqUS8.d.ts} +3 -3
- package/dist/index.cjs +152 -48
- 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 +152 -48
- package/dist/index.js.map +1 -1
- package/dist/{payload-types-B6AZQcB7.d.cts → payload-types-MKbx5MuJ.d.cts} +133 -3
- package/dist/{payload-types-B6AZQcB7.d.ts → payload-types-MKbx5MuJ.d.ts} +133 -3
- package/dist/query.cjs +21 -0
- 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 +21 -0
- 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 +189 -26
- 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 +189 -26
- package/dist/server.js.map +1 -1
- package/dist/storefront-cache.cjs +21 -0
- package/dist/storefront-cache.cjs.map +1 -1
- package/dist/storefront-cache.js +21 -0
- package/dist/storefront-cache.js.map +1 -1
- package/dist/{types-DbA5V3mt.d.ts → types-1UeOk1Uy.d.cts} +31 -6
- package/dist/{types-8us-_C-Q.d.cts → types-BKr_2avj.d.cts} +2 -2
- package/dist/{types-CM2je9Kw.d.cts → types-Du4s5anw.d.ts} +31 -6
- package/dist/{types-ByD2zii1.d.ts → types-L_nh-ED7.d.ts} +2 -2
- package/dist/ui/form.d.cts +1 -1
- package/dist/ui/form.d.ts +1 -1
- package/dist/ui/video.d.cts +1 -1
- package/dist/ui/video.d.ts +1 -1
- package/dist/webhook.d.cts +4 -4
- package/dist/webhook.d.ts +4 -4
- package/package.json +5 -4
package/dist/index.cjs
CHANGED
|
@@ -89,6 +89,7 @@ __export(src_exports, {
|
|
|
89
89
|
getImageSrcSet: () => getImageSrcSet,
|
|
90
90
|
getImageUrl: () => getImageUrl,
|
|
91
91
|
getProductSelectionImages: () => getProductSelectionImages,
|
|
92
|
+
getSDKErrorReason: () => getSDKErrorReason,
|
|
92
93
|
getSelectedValueByOptionId: () => getSelectedValueByOptionId,
|
|
93
94
|
getVariantAvailableForSale: () => getVariantAvailableForSale,
|
|
94
95
|
getVariantAvailableStock: () => getVariantAvailableStock,
|
|
@@ -147,6 +148,24 @@ module.exports = __toCommonJS(src_exports);
|
|
|
147
148
|
var import_qs_esm = require("qs-esm");
|
|
148
149
|
|
|
149
150
|
// src/core/errors.ts
|
|
151
|
+
var SDK_ERROR_BRAND = /* @__PURE__ */ Symbol.for("@01.software/sdk/SDKError");
|
|
152
|
+
var SDK_ERROR_TYPE_BRAND = /* @__PURE__ */ Symbol.for("@01.software/sdk/SDKError.type");
|
|
153
|
+
function defineSDKErrorBrand(error) {
|
|
154
|
+
Object.defineProperty(error, SDK_ERROR_BRAND, {
|
|
155
|
+
value: true,
|
|
156
|
+
enumerable: false,
|
|
157
|
+
configurable: false,
|
|
158
|
+
writable: false
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function defineSDKErrorType(error, type) {
|
|
162
|
+
Object.defineProperty(error, SDK_ERROR_TYPE_BRAND, {
|
|
163
|
+
value: type,
|
|
164
|
+
enumerable: false,
|
|
165
|
+
configurable: false,
|
|
166
|
+
writable: false
|
|
167
|
+
});
|
|
168
|
+
}
|
|
150
169
|
var SDKError = class extends Error {
|
|
151
170
|
constructor(code, message, status, details, userMessage, suggestion, requestId) {
|
|
152
171
|
super(message);
|
|
@@ -157,6 +176,7 @@ var SDKError = class extends Error {
|
|
|
157
176
|
this.userMessage = userMessage;
|
|
158
177
|
this.suggestion = suggestion;
|
|
159
178
|
this.requestId = requestId;
|
|
179
|
+
defineSDKErrorBrand(this);
|
|
160
180
|
if (Error.captureStackTrace) {
|
|
161
181
|
Error.captureStackTrace(this, new.target);
|
|
162
182
|
}
|
|
@@ -177,6 +197,7 @@ var SDKError = class extends Error {
|
|
|
177
197
|
...this.kind !== void 0 && { kind: this.kind },
|
|
178
198
|
...this.reason !== void 0 && { reason: this.reason },
|
|
179
199
|
...this.rawReason !== void 0 && { rawReason: this.rawReason },
|
|
200
|
+
...this.apiReason !== void 0 && { apiReason: this.apiReason },
|
|
180
201
|
...this.retryable !== void 0 && { retryable: this.retryable },
|
|
181
202
|
...this.retryAfter !== void 0 && { retryAfter: this.retryAfter }
|
|
182
203
|
};
|
|
@@ -350,8 +371,16 @@ function enhanceCommerceError(error, body, headerRequestId) {
|
|
|
350
371
|
});
|
|
351
372
|
return error;
|
|
352
373
|
}
|
|
374
|
+
function enhanceNonCommerceError(error, reason) {
|
|
375
|
+
if (typeof reason === "string") Object.assign(error, { apiReason: reason });
|
|
376
|
+
return error;
|
|
377
|
+
}
|
|
378
|
+
function getSDKErrorReason(error) {
|
|
379
|
+
if (error.kind !== "commerce") return error.apiReason;
|
|
380
|
+
return error.reason === "unknown_commerce_error" ? error.rawReason : error.reason;
|
|
381
|
+
}
|
|
353
382
|
function isCommerceSDKError(error) {
|
|
354
|
-
if (!(error
|
|
383
|
+
if (!isSDKError(error) || error.kind !== "commerce") return false;
|
|
355
384
|
if (typeof error.requestId !== "string" || typeof error.retryable !== "boolean" || error.retryAfter !== void 0 && (!Number.isSafeInteger(error.retryAfter) || error.retryAfter < 0) || typeof error.reason !== "string") {
|
|
356
385
|
return false;
|
|
357
386
|
}
|
|
@@ -361,12 +390,14 @@ var NetworkError = class extends SDKError {
|
|
|
361
390
|
constructor(message, status, details, userMessage, suggestion) {
|
|
362
391
|
super("NETWORK_ERROR", message, status, details, userMessage, suggestion);
|
|
363
392
|
this.name = "NetworkError";
|
|
393
|
+
defineSDKErrorType(this, "NetworkError");
|
|
364
394
|
}
|
|
365
395
|
};
|
|
366
396
|
var ValidationError = class extends SDKError {
|
|
367
397
|
constructor(message, details, userMessage, suggestion, status = 400) {
|
|
368
398
|
super("VALIDATION_ERROR", message, status, details, userMessage, suggestion);
|
|
369
399
|
this.name = "ValidationError";
|
|
400
|
+
defineSDKErrorType(this, "ValidationError");
|
|
370
401
|
}
|
|
371
402
|
};
|
|
372
403
|
var ApiError = class extends SDKError {
|
|
@@ -381,24 +412,28 @@ var ApiError = class extends SDKError {
|
|
|
381
412
|
requestId
|
|
382
413
|
);
|
|
383
414
|
this.name = "ApiError";
|
|
415
|
+
defineSDKErrorType(this, "ApiError");
|
|
384
416
|
}
|
|
385
417
|
};
|
|
386
418
|
var ConfigError = class extends SDKError {
|
|
387
419
|
constructor(message, details, userMessage, suggestion) {
|
|
388
420
|
super("CONFIG_ERROR", message, void 0, details, userMessage, suggestion);
|
|
389
421
|
this.name = "ConfigError";
|
|
422
|
+
defineSDKErrorType(this, "ConfigError");
|
|
390
423
|
}
|
|
391
424
|
};
|
|
392
425
|
var TimeoutError = class extends SDKError {
|
|
393
426
|
constructor(message = "Request timed out.", details, userMessage, suggestion) {
|
|
394
427
|
super("TIMEOUT_ERROR", message, 408, details, userMessage, suggestion);
|
|
395
428
|
this.name = "TimeoutError";
|
|
429
|
+
defineSDKErrorType(this, "TimeoutError");
|
|
396
430
|
}
|
|
397
431
|
};
|
|
398
432
|
var GoneError = class extends SDKError {
|
|
399
433
|
constructor(message = "The requested resource is no longer available.", details, userMessage, suggestion) {
|
|
400
434
|
super("GONE_ERROR", message, 410, details, userMessage, suggestion);
|
|
401
435
|
this.name = "GoneError";
|
|
436
|
+
defineSDKErrorType(this, "GoneError");
|
|
402
437
|
}
|
|
403
438
|
};
|
|
404
439
|
var ServiceUnavailableError = class extends SDKError {
|
|
@@ -413,6 +448,7 @@ var ServiceUnavailableError = class extends SDKError {
|
|
|
413
448
|
);
|
|
414
449
|
this.name = "ServiceUnavailableError";
|
|
415
450
|
this.retryAfter = retryAfter;
|
|
451
|
+
defineSDKErrorType(this, "ServiceUnavailableError");
|
|
416
452
|
}
|
|
417
453
|
};
|
|
418
454
|
var UsageLimitError = class extends SDKError {
|
|
@@ -420,6 +456,7 @@ var UsageLimitError = class extends SDKError {
|
|
|
420
456
|
super("USAGE_LIMIT_ERROR", message, 429, details, userMessage, suggestion);
|
|
421
457
|
this.name = "UsageLimitError";
|
|
422
458
|
this.usage = usage;
|
|
459
|
+
defineSDKErrorType(this, "UsageLimitError");
|
|
423
460
|
}
|
|
424
461
|
toJSON() {
|
|
425
462
|
return {
|
|
@@ -440,6 +477,7 @@ var AuthError = class extends SDKError {
|
|
|
440
477
|
requestId
|
|
441
478
|
);
|
|
442
479
|
this.name = "AuthError";
|
|
480
|
+
defineSDKErrorType(this, "AuthError");
|
|
443
481
|
}
|
|
444
482
|
};
|
|
445
483
|
var PermissionError = class extends SDKError {
|
|
@@ -454,6 +492,7 @@ var PermissionError = class extends SDKError {
|
|
|
454
492
|
requestId
|
|
455
493
|
);
|
|
456
494
|
this.name = "PermissionError";
|
|
495
|
+
defineSDKErrorType(this, "PermissionError");
|
|
457
496
|
}
|
|
458
497
|
};
|
|
459
498
|
var NotFoundError = class extends SDKError {
|
|
@@ -468,12 +507,14 @@ var NotFoundError = class extends SDKError {
|
|
|
468
507
|
requestId
|
|
469
508
|
);
|
|
470
509
|
this.name = "NotFoundError";
|
|
510
|
+
defineSDKErrorType(this, "NotFoundError");
|
|
471
511
|
}
|
|
472
512
|
};
|
|
473
513
|
var ConflictError = class extends SDKError {
|
|
474
514
|
constructor(message, details, userMessage, suggestion, requestId) {
|
|
475
515
|
super("conflict", message, 409, details, userMessage, suggestion, requestId);
|
|
476
516
|
this.name = "ConflictError";
|
|
517
|
+
defineSDKErrorType(this, "ConflictError");
|
|
477
518
|
}
|
|
478
519
|
};
|
|
479
520
|
var RateLimitError = class extends SDKError {
|
|
@@ -489,52 +530,63 @@ var RateLimitError = class extends SDKError {
|
|
|
489
530
|
);
|
|
490
531
|
this.name = "RateLimitError";
|
|
491
532
|
this.retryAfter = retryAfter;
|
|
533
|
+
defineSDKErrorType(this, "RateLimitError");
|
|
492
534
|
}
|
|
493
535
|
};
|
|
536
|
+
function hasBrandedSDKErrorShape(error) {
|
|
537
|
+
if (error === null || typeof error !== "object") return false;
|
|
538
|
+
const candidate = error;
|
|
539
|
+
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";
|
|
540
|
+
}
|
|
541
|
+
function hasSDKErrorType(error, type) {
|
|
542
|
+
return hasBrandedSDKErrorShape(error) && error[SDK_ERROR_TYPE_BRAND] === type;
|
|
543
|
+
}
|
|
494
544
|
function isSDKError(error) {
|
|
495
|
-
return error instanceof SDKError;
|
|
545
|
+
return error instanceof SDKError || hasBrandedSDKErrorShape(error);
|
|
496
546
|
}
|
|
497
547
|
function isNetworkError(error) {
|
|
498
|
-
return error instanceof NetworkError;
|
|
548
|
+
return error instanceof NetworkError || hasSDKErrorType(error, "NetworkError");
|
|
499
549
|
}
|
|
500
550
|
function isValidationError(error) {
|
|
501
|
-
if (error instanceof ValidationError)
|
|
551
|
+
if (error instanceof ValidationError || hasSDKErrorType(error, "ValidationError")) {
|
|
552
|
+
return true;
|
|
553
|
+
}
|
|
502
554
|
if (error == null || typeof error !== "object") return false;
|
|
503
555
|
const candidate = error;
|
|
504
556
|
return candidate.name === "ValidationError" && candidate.code === "VALIDATION_ERROR" && typeof candidate.message === "string" && typeof candidate.getUserMessage === "function" && typeof candidate.toJSON === "function";
|
|
505
557
|
}
|
|
506
558
|
function isApiError(error) {
|
|
507
|
-
return error instanceof ApiError;
|
|
559
|
+
return error instanceof ApiError || hasSDKErrorType(error, "ApiError");
|
|
508
560
|
}
|
|
509
561
|
function isConfigError(error) {
|
|
510
|
-
return error instanceof ConfigError;
|
|
562
|
+
return error instanceof ConfigError || hasSDKErrorType(error, "ConfigError");
|
|
511
563
|
}
|
|
512
564
|
function isTimeoutError(error) {
|
|
513
|
-
return error instanceof TimeoutError;
|
|
565
|
+
return error instanceof TimeoutError || hasSDKErrorType(error, "TimeoutError");
|
|
514
566
|
}
|
|
515
567
|
function isGoneError(error) {
|
|
516
|
-
return error instanceof GoneError;
|
|
568
|
+
return error instanceof GoneError || hasSDKErrorType(error, "GoneError");
|
|
517
569
|
}
|
|
518
570
|
function isServiceUnavailableError(error) {
|
|
519
|
-
return error instanceof ServiceUnavailableError;
|
|
571
|
+
return error instanceof ServiceUnavailableError || hasSDKErrorType(error, "ServiceUnavailableError");
|
|
520
572
|
}
|
|
521
573
|
function isUsageLimitError(error) {
|
|
522
|
-
return error instanceof UsageLimitError;
|
|
574
|
+
return error instanceof UsageLimitError || hasSDKErrorType(error, "UsageLimitError");
|
|
523
575
|
}
|
|
524
576
|
function isAuthError(error) {
|
|
525
|
-
return error instanceof AuthError;
|
|
577
|
+
return error instanceof AuthError || hasSDKErrorType(error, "AuthError");
|
|
526
578
|
}
|
|
527
579
|
function isPermissionError(error) {
|
|
528
|
-
return error instanceof PermissionError;
|
|
580
|
+
return error instanceof PermissionError || hasSDKErrorType(error, "PermissionError");
|
|
529
581
|
}
|
|
530
582
|
function isNotFoundError(error) {
|
|
531
|
-
return error instanceof NotFoundError;
|
|
583
|
+
return error instanceof NotFoundError || hasSDKErrorType(error, "NotFoundError");
|
|
532
584
|
}
|
|
533
585
|
function isConflictError(error) {
|
|
534
|
-
return error instanceof ConflictError;
|
|
586
|
+
return error instanceof ConflictError || hasSDKErrorType(error, "ConflictError");
|
|
535
587
|
}
|
|
536
588
|
function isRateLimitError(error) {
|
|
537
|
-
return error instanceof RateLimitError;
|
|
589
|
+
return error instanceof RateLimitError || hasSDKErrorType(error, "RateLimitError");
|
|
538
590
|
}
|
|
539
591
|
var createNetworkError = (message, status, details, userMessage, suggestion) => new NetworkError(message, status, details, userMessage, suggestion);
|
|
540
592
|
var createValidationError = (message, details, userMessage, suggestion, status) => new ValidationError(message, details, userMessage, suggestion, status);
|
|
@@ -745,7 +797,7 @@ function mapResponseToError(status, parsed, details, requestId, retryAfter, erro
|
|
|
745
797
|
if (retryAfter !== void 0) {
|
|
746
798
|
Object.assign(withRequestId, { retryAfter });
|
|
747
799
|
}
|
|
748
|
-
return errorFamily === "commerce" ? enhanceCommerceError(withRequestId, parsed.body, requestId) : withRequestId;
|
|
800
|
+
return errorFamily === "commerce" ? enhanceCommerceError(withRequestId, parsed.body, requestId) : enhanceNonCommerceError(withRequestId, parsed.reason);
|
|
749
801
|
};
|
|
750
802
|
if (status === 400 || status === 422) {
|
|
751
803
|
return finalize(
|
|
@@ -932,7 +984,7 @@ async function httpFetch(url, options) {
|
|
|
932
984
|
),
|
|
933
985
|
requestId
|
|
934
986
|
);
|
|
935
|
-
throw errorFamily === "commerce" ? enhanceCommerceError(usageError, parsed.body, requestId) : usageError;
|
|
987
|
+
throw errorFamily === "commerce" ? enhanceCommerceError(usageError, parsed.body, requestId) : enhanceNonCommerceError(usageError, parsed.reason);
|
|
936
988
|
}
|
|
937
989
|
if (response.status === 401 && onUnauthorized && customerToken && !hasRetried401 && (commerceEnvelope?.reason ?? parsed.reason) === "token_expired") {
|
|
938
990
|
hasRetried401 = true;
|
|
@@ -1386,7 +1438,7 @@ async function parseApiResponse(response, endpoint2, options = {}) {
|
|
|
1386
1438
|
}
|
|
1387
1439
|
const withRequestId = attachRequestId(error, requestId);
|
|
1388
1440
|
if (retryAfter !== void 0) Object.assign(withRequestId, { retryAfter });
|
|
1389
|
-
throw options.errorFamily === "commerce" ? enhanceCommerceError(withRequestId, data, requestId) : withRequestId;
|
|
1441
|
+
throw options.errorFamily === "commerce" ? enhanceCommerceError(withRequestId, data, requestId) : enhanceNonCommerceError(withRequestId, reason);
|
|
1390
1442
|
}
|
|
1391
1443
|
return data;
|
|
1392
1444
|
}
|
|
@@ -1810,13 +1862,7 @@ function unwrapPayloadDoc(value) {
|
|
|
1810
1862
|
return value;
|
|
1811
1863
|
}
|
|
1812
1864
|
function hasCanonicalNotFoundReason(error) {
|
|
1813
|
-
|
|
1814
|
-
if (typeof details !== "object" || details === null) return false;
|
|
1815
|
-
if ("reason" in details && details.reason === "not_found") return true;
|
|
1816
|
-
if (!("body" in details) || typeof details.body !== "object" || details.body === null) {
|
|
1817
|
-
return false;
|
|
1818
|
-
}
|
|
1819
|
-
return "reason" in details.body && details.body.reason === "not_found";
|
|
1865
|
+
return getSDKErrorReason(error) === "not_found";
|
|
1820
1866
|
}
|
|
1821
1867
|
var CommunityClient = class extends RawCustomerScopedApi {
|
|
1822
1868
|
constructor(options) {
|
|
@@ -3422,9 +3468,77 @@ function validateRequiredReconciliation(value, allowed, resource, path) {
|
|
|
3422
3468
|
function validateNextAction(value, provider, resource, path) {
|
|
3423
3469
|
const action = record(value, resource, path);
|
|
3424
3470
|
if (provider === "portone") {
|
|
3471
|
+
if (action.type === "portone_sdk") {
|
|
3472
|
+
exact(
|
|
3473
|
+
action,
|
|
3474
|
+
[
|
|
3475
|
+
"type",
|
|
3476
|
+
"version",
|
|
3477
|
+
"storeId",
|
|
3478
|
+
"channelKey",
|
|
3479
|
+
"paymentId",
|
|
3480
|
+
"orderName",
|
|
3481
|
+
"totalAmount",
|
|
3482
|
+
"currency",
|
|
3483
|
+
"payMethod",
|
|
3484
|
+
"redirectUrl"
|
|
3485
|
+
],
|
|
3486
|
+
[],
|
|
3487
|
+
resource,
|
|
3488
|
+
path
|
|
3489
|
+
);
|
|
3490
|
+
if (action.version !== "v2") fail(resource, `${path}.version`, "v2");
|
|
3491
|
+
for (const key of ["storeId", "channelKey"]) {
|
|
3492
|
+
boundedString(action[key], 255, resource, `${path}.${key}`);
|
|
3493
|
+
}
|
|
3494
|
+
const paymentId = boundedString(
|
|
3495
|
+
action.paymentId,
|
|
3496
|
+
40,
|
|
3497
|
+
resource,
|
|
3498
|
+
`${path}.paymentId`
|
|
3499
|
+
);
|
|
3500
|
+
if (!/^[A-Za-z0-9]{6,40}$/.test(paymentId)) {
|
|
3501
|
+
fail(
|
|
3502
|
+
resource,
|
|
3503
|
+
`${path}.paymentId`,
|
|
3504
|
+
"6-40 ASCII alphanumeric characters"
|
|
3505
|
+
);
|
|
3506
|
+
}
|
|
3507
|
+
boundedString(
|
|
3508
|
+
action.orderName,
|
|
3509
|
+
MAX_COMMERCE_SHORT_TEXT_LENGTH,
|
|
3510
|
+
resource,
|
|
3511
|
+
`${path}.orderName`
|
|
3512
|
+
);
|
|
3513
|
+
positiveInteger(action.totalAmount, resource, `${path}.totalAmount`);
|
|
3514
|
+
if (action.currency !== "CURRENCY_KRW") {
|
|
3515
|
+
fail(resource, `${path}.currency`, "CURRENCY_KRW");
|
|
3516
|
+
}
|
|
3517
|
+
if (action.payMethod !== "CARD")
|
|
3518
|
+
fail(resource, `${path}.payMethod`, "CARD");
|
|
3519
|
+
const redirectUrl = boundedString(
|
|
3520
|
+
action.redirectUrl,
|
|
3521
|
+
2048,
|
|
3522
|
+
resource,
|
|
3523
|
+
`${path}.redirectUrl`
|
|
3524
|
+
);
|
|
3525
|
+
try {
|
|
3526
|
+
const parsed = new URL(redirectUrl);
|
|
3527
|
+
const loopback = parsed.protocol === "http:" && (parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1");
|
|
3528
|
+
if (!loopback && parsed.protocol !== "https:" || parsed.username || parsed.password)
|
|
3529
|
+
throw new Error("unsafe redirect URL");
|
|
3530
|
+
} catch {
|
|
3531
|
+
fail(
|
|
3532
|
+
resource,
|
|
3533
|
+
`${path}.redirectUrl`,
|
|
3534
|
+
"HTTPS or loopback URL without embedded credentials"
|
|
3535
|
+
);
|
|
3536
|
+
}
|
|
3537
|
+
return;
|
|
3538
|
+
}
|
|
3425
3539
|
exact(action, ["type", "checkoutUrl"], [], resource, path);
|
|
3426
3540
|
if (action.type !== "portone_checkout") {
|
|
3427
|
-
fail(resource, `${path}.type`, "portone_checkout");
|
|
3541
|
+
fail(resource, `${path}.type`, "portone_checkout | portone_sdk");
|
|
3428
3542
|
}
|
|
3429
3543
|
const checkoutUrl = boundedString(
|
|
3430
3544
|
action.checkoutUrl,
|
|
@@ -6099,21 +6213,11 @@ var PRODUCT_DETAIL_UNAVAILABLE_REASONS = /* @__PURE__ */ new Set([
|
|
|
6099
6213
|
"not_published",
|
|
6100
6214
|
"feature_disabled"
|
|
6101
6215
|
]);
|
|
6102
|
-
function isRecord(value) {
|
|
6103
|
-
return typeof value === "object" && value !== null;
|
|
6104
|
-
}
|
|
6105
|
-
function readProductDetailUnavailableReason(value) {
|
|
6106
|
-
if (!isRecord(value)) return void 0;
|
|
6107
|
-
const directReason = value.reason ?? value.code;
|
|
6108
|
-
if (typeof directReason === "string" && PRODUCT_DETAIL_UNAVAILABLE_REASONS.has(directReason)) {
|
|
6109
|
-
return directReason;
|
|
6110
|
-
}
|
|
6111
|
-
return readProductDetailUnavailableReason(value.body);
|
|
6112
|
-
}
|
|
6113
6216
|
function productDetailResultFromError(error) {
|
|
6114
6217
|
if (!(error instanceof SDKError) || error.status !== 404) return void 0;
|
|
6115
|
-
const reason =
|
|
6116
|
-
if (!reason
|
|
6218
|
+
const reason = getSDKErrorReason(error);
|
|
6219
|
+
if (!reason || !PRODUCT_DETAIL_UNAVAILABLE_REASONS.has(reason))
|
|
6220
|
+
return void 0;
|
|
6117
6221
|
return { found: false, reason };
|
|
6118
6222
|
}
|
|
6119
6223
|
var MARKET_PRICE_QUERY_UNSUPPORTED_MESSAGE = "Market listing pages do not support base price filters or price sorts.";
|
|
@@ -6710,7 +6814,7 @@ function isStringOrNumber(value) {
|
|
|
6710
6814
|
return typeof value === "string" || typeof value === "number";
|
|
6711
6815
|
}
|
|
6712
6816
|
function isWebhookOrderScope(value) {
|
|
6713
|
-
if (!
|
|
6817
|
+
if (!isRecord(value)) return false;
|
|
6714
6818
|
if (value.kind === "collection") {
|
|
6715
6819
|
return typeof value.collection === "string";
|
|
6716
6820
|
}
|
|
@@ -6720,14 +6824,14 @@ function isWebhookOrderScope(value) {
|
|
|
6720
6824
|
return false;
|
|
6721
6825
|
}
|
|
6722
6826
|
function isWebhookOrderMoved(value) {
|
|
6723
|
-
if (!
|
|
6827
|
+
if (!isRecord(value)) return false;
|
|
6724
6828
|
return typeof value.collection === "string" && isStringOrNumber(value.id) && (value.relatedCollection === void 0 || typeof value.relatedCollection === "string") && (value.relatedId === void 0 || isStringOrNumber(value.relatedId));
|
|
6725
6829
|
}
|
|
6726
6830
|
function hasOptionalOrderValue(value, key) {
|
|
6727
6831
|
return value[key] === void 0 || value[key] === null || typeof value[key] === "string";
|
|
6728
6832
|
}
|
|
6729
6833
|
function isWebhookOrderChange(value) {
|
|
6730
|
-
if (!
|
|
6834
|
+
if (!isRecord(value)) return false;
|
|
6731
6835
|
return value.type === "order" && value.source === "payload-orderable" && (value.orderableFieldName === void 0 || typeof value.orderableFieldName === "string") && hasOptionalOrderValue(value, "previousOrder") && hasOptionalOrderValue(value, "nextOrder") && isWebhookOrderScope(value.scope) && isWebhookOrderMoved(value.moved);
|
|
6732
6836
|
}
|
|
6733
6837
|
function isCommerceNotificationEventName(value) {
|
|
@@ -6737,18 +6841,18 @@ function isCommerceNotificationSourceCollection(value) {
|
|
|
6737
6841
|
return value === "orders" || value === "fulfillments" || value === "returns";
|
|
6738
6842
|
}
|
|
6739
6843
|
function isCommerceNotificationData(value) {
|
|
6740
|
-
if (!
|
|
6741
|
-
if (value.source !== void 0 && (!
|
|
6844
|
+
if (!isRecord(value)) return false;
|
|
6845
|
+
if (value.source !== void 0 && (!isRecord(value.source) || !isCommerceNotificationSourceCollection(value.source.collection) || !isStringOrNumber(value.source.id))) {
|
|
6742
6846
|
return false;
|
|
6743
6847
|
}
|
|
6744
6848
|
return (value.orderId === void 0 || isStringOrNumber(value.orderId)) && (value.orderNumber === void 0 || typeof value.orderNumber === "string") && (value.status === void 0 || typeof value.status === "string") && (value.totalAmount === void 0 || typeof value.totalAmount === "number") && (value.currency === void 0 || typeof value.currency === "string") && (value.fulfillmentId === void 0 || isStringOrNumber(value.fulfillmentId)) && (value.fulfillmentStatus === void 0 || typeof value.fulfillmentStatus === "string") && (value.shippedAt === void 0 || typeof value.shippedAt === "string") && (value.returnId === void 0 || isStringOrNumber(value.returnId)) && (value.returnStatus === void 0 || typeof value.returnStatus === "string") && (value.refundAmount === void 0 || typeof value.refundAmount === "number") && (value.completedAt === void 0 || typeof value.completedAt === "string");
|
|
6745
6849
|
}
|
|
6746
6850
|
function isCommerceNotification(value) {
|
|
6747
|
-
if (!
|
|
6851
|
+
if (!isRecord(value)) return false;
|
|
6748
6852
|
return isCommerceNotificationEventName(value.event) && typeof value.intentId === "string" && value.intentId.length > 0 && typeof value.dedupeKey === "string" && value.dedupeKey.length > 0 && (value.orderId === void 0 || typeof value.orderId === "string") && (value.fulfillmentId === void 0 || typeof value.fulfillmentId === "string") && (value.returnId === void 0 || typeof value.returnId === "string");
|
|
6749
6853
|
}
|
|
6750
6854
|
function isWebhookCommerceNotificationChange(value) {
|
|
6751
|
-
if (!
|
|
6855
|
+
if (!isRecord(value)) return false;
|
|
6752
6856
|
return value.type === "notification" && value.source === "commerce-notifications" && isCommerceNotificationEventName(value.event) && isCommerceNotificationSourceCollection(value.sourceCollection) && isStringOrNumber(value.sourceId);
|
|
6753
6857
|
}
|
|
6754
6858
|
function matchesOptionalId(actual, expected) {
|
|
@@ -6830,7 +6934,7 @@ function isWebhookOperation(event, operation2) {
|
|
|
6830
6934
|
return isValidWebhookEvent(event) && event.operation === operation2;
|
|
6831
6935
|
}
|
|
6832
6936
|
var CUSTOMER_PASSWORD_RESET_OPERATION = "password-reset";
|
|
6833
|
-
function
|
|
6937
|
+
function isRecord(value) {
|
|
6834
6938
|
return typeof value === "object" && value !== null;
|
|
6835
6939
|
}
|
|
6836
6940
|
function hasString(value, key) {
|
|
@@ -6840,7 +6944,7 @@ function hasStringOrNumber(value, key) {
|
|
|
6840
6944
|
return typeof value[key] === "string" || typeof value[key] === "number";
|
|
6841
6945
|
}
|
|
6842
6946
|
function isCustomerPasswordResetWebhookEvent(event) {
|
|
6843
|
-
if (event.collection !== "customers" || event.operation !== CUSTOMER_PASSWORD_RESET_OPERATION || !
|
|
6947
|
+
if (event.collection !== "customers" || event.operation !== CUSTOMER_PASSWORD_RESET_OPERATION || !isRecord(event.data)) {
|
|
6844
6948
|
return false;
|
|
6845
6949
|
}
|
|
6846
6950
|
return hasStringOrNumber(event.data, "customerId") && hasString(event.data, "email") && hasString(event.data, "name") && hasString(event.data, "resetPasswordToken") && hasString(event.data, "resetPasswordExpiresAt");
|