@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.
Files changed (57) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +64 -7
  3. package/dist/client.cjs +189 -26
  4. package/dist/client.cjs.map +1 -1
  5. package/dist/client.d.cts +7 -6
  6. package/dist/client.d.ts +7 -6
  7. package/dist/client.js +189 -26
  8. package/dist/client.js.map +1 -1
  9. package/dist/{collection-client-D3ExJU-7.d.ts → collection-client-DnDt6EQz.d.ts} +4 -4
  10. package/dist/{collection-client-CBup9yOx.d.cts → collection-client-XfGLPuTf.d.cts} +4 -4
  11. package/dist/{const-BXEi1Kix.d.cts → const-CBba4lDo.d.cts} +1 -1
  12. package/dist/{const-k9gHylYa.d.ts → const-DCNV5Kq7.d.ts} +1 -1
  13. package/dist/errors.cjs +63 -15
  14. package/dist/errors.cjs.map +1 -1
  15. package/dist/errors.d.cts +10 -1
  16. package/dist/errors.d.ts +10 -1
  17. package/dist/errors.js +63 -15
  18. package/dist/errors.js.map +1 -1
  19. package/dist/{index-BCM9CTL7.d.cts → index-CbKyoEzy.d.cts} +3 -3
  20. package/dist/{index-CHGGkcLj.d.ts → index-DUuIqUS8.d.ts} +3 -3
  21. package/dist/index.cjs +152 -48
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +8 -8
  24. package/dist/index.d.ts +8 -8
  25. package/dist/index.js +152 -48
  26. package/dist/index.js.map +1 -1
  27. package/dist/{payload-types-B6AZQcB7.d.cts → payload-types-MKbx5MuJ.d.cts} +133 -3
  28. package/dist/{payload-types-B6AZQcB7.d.ts → payload-types-MKbx5MuJ.d.ts} +133 -3
  29. package/dist/query.cjs +21 -0
  30. package/dist/query.cjs.map +1 -1
  31. package/dist/query.d.cts +5 -5
  32. package/dist/query.d.ts +5 -5
  33. package/dist/query.js +21 -0
  34. package/dist/query.js.map +1 -1
  35. package/dist/realtime.d.cts +2 -2
  36. package/dist/realtime.d.ts +2 -2
  37. package/dist/server.cjs +189 -26
  38. package/dist/server.cjs.map +1 -1
  39. package/dist/server.d.cts +8 -7
  40. package/dist/server.d.ts +8 -7
  41. package/dist/server.js +189 -26
  42. package/dist/server.js.map +1 -1
  43. package/dist/storefront-cache.cjs +21 -0
  44. package/dist/storefront-cache.cjs.map +1 -1
  45. package/dist/storefront-cache.js +21 -0
  46. package/dist/storefront-cache.js.map +1 -1
  47. package/dist/{types-DbA5V3mt.d.ts → types-1UeOk1Uy.d.cts} +31 -6
  48. package/dist/{types-8us-_C-Q.d.cts → types-BKr_2avj.d.cts} +2 -2
  49. package/dist/{types-CM2je9Kw.d.cts → types-Du4s5anw.d.ts} +31 -6
  50. package/dist/{types-ByD2zii1.d.ts → types-L_nh-ED7.d.ts} +2 -2
  51. package/dist/ui/form.d.cts +1 -1
  52. package/dist/ui/form.d.ts +1 -1
  53. package/dist/ui/video.d.cts +1 -1
  54. package/dist/ui/video.d.ts +1 -1
  55. package/dist/webhook.d.cts +4 -4
  56. package/dist/webhook.d.ts +4 -4
  57. 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 instanceof SDKError) || error.kind !== "commerce") return false;
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) return true;
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
- const details = error.details;
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 = readProductDetailUnavailableReason(error.details);
6116
- if (!reason) return void 0;
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 (!isRecord2(value)) return false;
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 (!isRecord2(value)) return false;
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 (!isRecord2(value)) return false;
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 (!isRecord2(value)) return false;
6741
- if (value.source !== void 0 && (!isRecord2(value.source) || !isCommerceNotificationSourceCollection(value.source.collection) || !isStringOrNumber(value.source.id))) {
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 (!isRecord2(value)) return false;
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 (!isRecord2(value)) return false;
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 isRecord2(value) {
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 || !isRecord2(event.data)) {
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");