@riverbankcms/sdk 0.92.0 → 0.94.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 (74) hide show
  1. package/dist/{PreviewEditorSidebar-3CI5MKV3.mjs → PreviewEditorSidebar-D3PAF7NW.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-DKEP636I.mjs → PreviewEditorUI-G5JVJEIJ.mjs} +3 -3
  3. package/dist/SdkPreviewModeRuntime-NHTLRNQD.mjs +8 -0
  4. package/dist/_dts/api/src/common/envelope.d.ts +10 -0
  5. package/dist/_dts/api/src/index.d.ts +2 -2
  6. package/dist/_dts/api/src/request.d.ts +1 -1
  7. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +1 -0
  8. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +14 -14
  9. package/dist/_dts/content-editor/src/controller/useEntrySyncHelpers.d.ts +1 -1
  10. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +5 -15
  11. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +46 -0
  12. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +43 -36
  13. package/dist/_dts/media-core/src/fileUploadFinalization.d.ts +29 -1
  14. package/dist/_dts/media-core/src/index.d.ts +1 -0
  15. package/dist/_dts/media-core/src/legacyMediaValue.d.ts +11 -0
  16. package/dist/_dts/media-react/src/hooks/useApiMediaUploader.d.ts +2 -1
  17. package/dist/_dts/sdk/src/version.d.ts +1 -1
  18. package/dist/{chunk-UOMTCHZD.mjs → chunk-A63UXN3P.mjs} +21 -19
  19. package/dist/{chunk-U5YM4AWE.mjs → chunk-AJZGT6YG.mjs} +1 -1
  20. package/dist/{chunk-6D7PLF4M.mjs → chunk-AQ6RT6LZ.mjs} +2 -2
  21. package/dist/{chunk-ZA2S7H34.mjs → chunk-NT76QGIJ.mjs} +98 -1
  22. package/dist/{chunk-I6EOKV6B.mjs → chunk-PCNCETBI.mjs} +676 -386
  23. package/dist/{chunk-LERKJM3E.mjs → chunk-XIK2HYI3.mjs} +7 -7
  24. package/dist/cli/index.mjs +198 -87
  25. package/dist/client/{accordion-BUDH2G3S.mjs → accordion-RNQIPG55.mjs} +2 -2
  26. package/dist/client/{bookingForm-NQMCELVB.mjs → bookingForm-HYEEVRLP.mjs} +5 -5
  27. package/dist/client/{carousel-ONCEW6IJ.mjs → carousel-W7DQ3YPU.mjs} +3 -3
  28. package/dist/client/{cart-V2TCK2GI.mjs → cart-PXJ3SXXO.mjs} +6 -6
  29. package/dist/client/{checkout-ZI7SWNCS.mjs → checkout-X3JYSOXI.mjs} +6 -6
  30. package/dist/client/{chunk-R3CZQLXF.mjs → chunk-6SYGVVWA.mjs} +1 -1
  31. package/dist/client/{chunk-N2WJPTF7.mjs → chunk-DUOHLWLF.mjs} +3 -3
  32. package/dist/client/{chunk-KXYEKEV6.mjs → chunk-IXDSXF2D.mjs} +7 -7
  33. package/dist/client/{chunk-ZJDBOLX7.mjs → chunk-J6TMMMXW.mjs} +2 -2
  34. package/dist/client/{chunk-B5UC2D6X.mjs → chunk-JNE6UI6U.mjs} +1 -1
  35. package/dist/client/{chunk-QQNVQ62W.mjs → chunk-OLAOAZEO.mjs} +1 -1
  36. package/dist/client/{chunk-AUMRQ242.mjs → chunk-PICR3NTQ.mjs} +2 -2
  37. package/dist/client/{chunk-ERQDHUS2.mjs → chunk-Q47XGAGS.mjs} +1 -1
  38. package/dist/client/{chunk-HQWIJLYN.mjs → chunk-WERRJXNJ.mjs} +1 -1
  39. package/dist/client/{chunk-JXY6NHG6.mjs → chunk-YYVGSYBO.mjs} +5 -5
  40. package/dist/client/client.mjs +127 -17
  41. package/dist/client/{courseRegistration-JPWAQ6KM.mjs → courseRegistration-QZ67PVHO.mjs} +5 -5
  42. package/dist/client/{eventCalendar-QDOCHBBV.mjs → eventCalendar-V3BDHQNT.mjs} +8 -8
  43. package/dist/client/{eventCombined-ZS2CXSIE.mjs → eventCombined-XYFRN2RG.mjs} +8 -8
  44. package/dist/client/{eventDetails-5LOBMPLN.mjs → eventDetails-TFE5TWKV.mjs} +8 -8
  45. package/dist/client/{eventListing-SBGY4I3L.mjs → eventListing-IQ6AGWZ6.mjs} +8 -8
  46. package/dist/client/{eventRegistration-XGPIU3Z2.mjs → eventRegistration-WGJVFKQJ.mjs} +8 -8
  47. package/dist/client/{form-R7D4LZWW.mjs → form-6UZY6RUA.mjs} +2 -2
  48. package/dist/client/{headerSection-RRLYUCGC.mjs → headerSection-RSFXY6V3.mjs} +3 -3
  49. package/dist/client/hooks.mjs +35 -3
  50. package/dist/client/{locationMap-35ZJMRBZ.mjs → locationMap-24FH67I4.mjs} +3 -3
  51. package/dist/client/{newsletterForm-MJ2VCFUT.mjs → newsletterForm-QVL3MLTN.mjs} +2 -2
  52. package/dist/client/{productDetail-2O7YQNBX.mjs → productDetail-ZDYN3G4T.mjs} +6 -6
  53. package/dist/client/{productList-FDP5BH7W.mjs → productList-4BMJLQHZ.mjs} +6 -6
  54. package/dist/client/rendering/client.mjs +8 -0
  55. package/dist/client/rendering/islands.mjs +19 -19
  56. package/dist/client/rendering.mjs +69 -2
  57. package/dist/client/{shop-BGYJ3LDT.mjs → shop-U5C634FF.mjs} +6 -6
  58. package/dist/preview-next/client/runtime.mjs +5 -5
  59. package/dist/{sdk-runtime-B3TFXRXZ.mjs → sdk-runtime-VGV46WVB.mjs} +6 -6
  60. package/dist/server/components.mjs +121 -61
  61. package/dist/server/config-validation.mjs +35 -3
  62. package/dist/server/config.mjs +35 -3
  63. package/dist/server/data.mjs +35 -3
  64. package/dist/server/index.mjs +104 -29
  65. package/dist/server/next.mjs +183 -80
  66. package/dist/server/page-converter.mjs +3 -3
  67. package/dist/server/prebuild.mjs +1 -1
  68. package/dist/server/rendering/server.mjs +121 -61
  69. package/dist/server/rendering.mjs +121 -61
  70. package/dist/server/routing.mjs +102 -62
  71. package/dist/server/server.mjs +167 -92
  72. package/package.json +1 -1
  73. package/dist/SdkPreviewModeRuntime-BRGRDQFH.mjs +0 -8
  74. /package/dist/client/{chunk-GH6IIOOE.mjs → chunk-PCHACQEB.mjs} +0 -0
@@ -57,65 +57,6 @@ function formatKeyAsLabel(key) {
57
57
  // ../blocks/src/system/manifest/fieldValidation/index.ts
58
58
  import { z as z4 } from "zod";
59
59
 
60
- // ../blocks/src/system/types/link.ts
61
- import { z } from "zod";
62
- var nullableString = z.union([z.string().min(1), z.null()]);
63
- var resolvedInternalLinkKeys = ["entityId", "entityType", "href", "title", "typeLabel"];
64
- var internalRouteOnlyLinkSchema = z.object({
65
- kind: z.literal("internal"),
66
- routeId: z.string().min(1)
67
- }).passthrough().superRefine((value, ctx) => {
68
- const hasResolvedMetadata = resolvedInternalLinkKeys.some((key) => value[key] != null);
69
- if (!hasResolvedMetadata) return;
70
- ctx.addIssue({
71
- code: "custom",
72
- message: "Internal links with resolved metadata must include entityId, entityType, href, title, and typeLabel"
73
- });
74
- });
75
- var internalResolvedLinkSchema = z.object({
76
- kind: z.literal("internal"),
77
- routeId: z.string().min(1),
78
- entityId: z.string().min(1),
79
- entityType: z.enum(["page", "content"]),
80
- href: z.string().min(1),
81
- title: z.string().min(1),
82
- typeLabel: z.string().min(1),
83
- contentTypeKey: nullableString.optional(),
84
- contentTypeName: nullableString.optional(),
85
- updatedAt: nullableString.optional()
86
- }).passthrough();
87
- var internalLinkSchema = z.union([
88
- internalResolvedLinkSchema,
89
- internalRouteOnlyLinkSchema
90
- ]);
91
- var externalLinkSchema = z.object({
92
- kind: z.literal("external"),
93
- href: z.string().min(1)
94
- }).passthrough();
95
- var customLinkSchema = z.object({
96
- kind: z.literal("url"),
97
- href: z.string().min(1)
98
- }).passthrough();
99
- var pageLinkSchema = z.object({
100
- kind: z.literal("page"),
101
- identifier: z.string().min(1)
102
- }).passthrough();
103
- var entryLinkSchema = z.object({
104
- kind: z.literal("entry"),
105
- contentType: z.string().min(1),
106
- identifier: z.string().min(1)
107
- }).passthrough();
108
- var linkSchema = z.union([
109
- internalLinkSchema,
110
- externalLinkSchema,
111
- customLinkSchema,
112
- pageLinkSchema,
113
- entryLinkSchema
114
- ]);
115
-
116
- // ../blocks/src/system/manifest/schema.ts
117
- import { z as z3 } from "zod";
118
-
119
60
  // ../core/src/result.ts
120
61
  function ok(value) {
121
62
  return { ok: true, value };
@@ -866,6 +807,82 @@ function mediaIdentifierOrFallback(current, fallback2) {
866
807
  return fallback2 ?? (typeof current === "string" ? current : void 0);
867
808
  }
868
809
 
810
+ // ../media-core/src/legacyMediaValue.ts
811
+ function legacyStringMediaTypeForField(field) {
812
+ if (field.type === "file") {
813
+ return field.fileKinds?.[0] ?? "document";
814
+ }
815
+ return field.mediaKinds?.[0] ?? "image";
816
+ }
817
+ function normalizeLegacyStringMediaValueForField(value, field) {
818
+ if (typeof value !== "string") return value;
819
+ const src = value.trim();
820
+ if (!src) return value;
821
+ return {
822
+ type: legacyStringMediaTypeForField(field),
823
+ src
824
+ };
825
+ }
826
+
827
+ // ../blocks/src/system/types/link.ts
828
+ import { z } from "zod";
829
+ var nullableString = z.union([z.string().min(1), z.null()]);
830
+ var resolvedInternalLinkKeys = ["entityId", "entityType", "href", "title", "typeLabel"];
831
+ var internalRouteOnlyLinkSchema = z.object({
832
+ kind: z.literal("internal"),
833
+ routeId: z.string().min(1)
834
+ }).passthrough().superRefine((value, ctx) => {
835
+ const hasResolvedMetadata = resolvedInternalLinkKeys.some((key) => value[key] != null);
836
+ if (!hasResolvedMetadata) return;
837
+ ctx.addIssue({
838
+ code: "custom",
839
+ message: "Internal links with resolved metadata must include entityId, entityType, href, title, and typeLabel"
840
+ });
841
+ });
842
+ var internalResolvedLinkSchema = z.object({
843
+ kind: z.literal("internal"),
844
+ routeId: z.string().min(1),
845
+ entityId: z.string().min(1),
846
+ entityType: z.enum(["page", "content"]),
847
+ href: z.string().min(1),
848
+ title: z.string().min(1),
849
+ typeLabel: z.string().min(1),
850
+ contentTypeKey: nullableString.optional(),
851
+ contentTypeName: nullableString.optional(),
852
+ updatedAt: nullableString.optional()
853
+ }).passthrough();
854
+ var internalLinkSchema = z.union([
855
+ internalResolvedLinkSchema,
856
+ internalRouteOnlyLinkSchema
857
+ ]);
858
+ var externalLinkSchema = z.object({
859
+ kind: z.literal("external"),
860
+ href: z.string().min(1)
861
+ }).passthrough();
862
+ var customLinkSchema = z.object({
863
+ kind: z.literal("url"),
864
+ href: z.string().min(1)
865
+ }).passthrough();
866
+ var pageLinkSchema = z.object({
867
+ kind: z.literal("page"),
868
+ identifier: z.string().min(1)
869
+ }).passthrough();
870
+ var entryLinkSchema = z.object({
871
+ kind: z.literal("entry"),
872
+ contentType: z.string().min(1),
873
+ identifier: z.string().min(1)
874
+ }).passthrough();
875
+ var linkSchema = z.union([
876
+ internalLinkSchema,
877
+ externalLinkSchema,
878
+ customLinkSchema,
879
+ pageLinkSchema,
880
+ entryLinkSchema
881
+ ]);
882
+
883
+ // ../blocks/src/system/manifest/schema.ts
884
+ import { z as z3 } from "zod";
885
+
869
886
  // ../blocks/src/system/node/schema.ts
870
887
  import { z as z2 } from "zod";
871
888
  var transformStepSchema = z2.object({
@@ -2626,7 +2643,10 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
2626
2643
  return makePlan("richText", "object", field, path, required, commonConstraints(required, { kind: "richTextDoc" }));
2627
2644
  case "media":
2628
2645
  case "file":
2629
- return makePlan("media", "object", field, path, required, commonConstraints(required, { kind: "mediaObject" }));
2646
+ return {
2647
+ ...makePlan("media", "object", field, path, required, commonConstraints(required, { kind: "mediaObject" })),
2648
+ legacyStringType: legacyStringMediaTypeForField(field)
2649
+ };
2630
2650
  case "link":
2631
2651
  return makePlan("link", "object", field, path, required, commonConstraints(required, { kind: "linkObject" }));
2632
2652
  case "boolean":
@@ -2811,15 +2831,23 @@ function normalizeFieldValue(plan, value, ctx) {
2811
2831
  return normalizeRepeaterItems(plan, value, ctx);
2812
2832
  case "boolean":
2813
2833
  case "richText":
2814
- case "media":
2815
2834
  case "link":
2816
2835
  case "select":
2817
2836
  case "passthrough":
2818
2837
  return value;
2838
+ case "media":
2839
+ return normalizeMediaInput(plan, value);
2819
2840
  default:
2820
2841
  return assertNever2(plan);
2821
2842
  }
2822
2843
  }
2844
+ function normalizeMediaInput(plan, value) {
2845
+ return normalizeLegacyStringMediaValueForField(value, {
2846
+ type: plan.fieldType,
2847
+ mediaKinds: plan.fieldType === "media" ? [plan.legacyStringType] : void 0,
2848
+ fileKinds: plan.fieldType === "file" ? [plan.legacyStringType] : void 0
2849
+ });
2850
+ }
2823
2851
  function normalizeObjectChildren(children, value, ctx) {
2824
2852
  if (!value || typeof value !== "object" || Array.isArray(value)) return value;
2825
2853
  const normalized = {
@@ -67861,6 +67889,38 @@ var NAMED_SURFACE_IDS = SURFACE_IDS.filter(
67861
67889
  (surfaceId) => surfaceId !== DEFAULT_SURFACE_ID
67862
67890
  );
67863
67891
 
67892
+ // ../api/src/common/envelope.ts
67893
+ var API_ERROR_CODES = [
67894
+ "auth:unauthenticated",
67895
+ "auth:token_expired",
67896
+ "auth:token_invalid",
67897
+ "auth:forbidden",
67898
+ "auth:mfa_required",
67899
+ "auth:sudo_required",
67900
+ "auth:insufficient_permissions",
67901
+ "auth:impersonation_restricted",
67902
+ "validation:invalid_input",
67903
+ "validation:missing_field",
67904
+ "validation:invalid_format",
67905
+ "validation:payload_too_large",
67906
+ "resource:not_found",
67907
+ "resource:already_exists",
67908
+ "resource:conflict",
67909
+ "resource:gone",
67910
+ "rate_limit:exceeded",
67911
+ "billing:payment_required",
67912
+ "billing:plan_limit_exceeded",
67913
+ "billing:pass_redemption_failed",
67914
+ "server:internal_error",
67915
+ "server:unavailable",
67916
+ "external:service_error",
67917
+ "external:registrar_orphaned_contact_profile",
67918
+ "network:connection_error",
67919
+ "network:timeout",
67920
+ "network:dns_error"
67921
+ ];
67922
+ var API_ERROR_CODE_SET = new Set(API_ERROR_CODES);
67923
+
67864
67924
  // ../api/src/customerMembershipOutcomes.ts
67865
67925
  var CANONICAL_REFUND_CONFLICT_CODES = [
67866
67926
  "already_refunded",
@@ -6821,9 +6821,6 @@ function formatKeyAsLabel(key) {
6821
6821
  return key.replace(/([A-Z])/g, " $1").replace(/[-_]/g, " ").trim().split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
6822
6822
  }
6823
6823
 
6824
- // ../blocks/src/system/manifest/schema.ts
6825
- import { z as z4 } from "zod";
6826
-
6827
6824
  // ../media-core/src/transformRect.ts
6828
6825
  function isValidTransformRectStructure(rect) {
6829
6826
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -6917,6 +6914,9 @@ function rotateNormalizedPoint(point, rotation) {
6917
6914
  }
6918
6915
  }
6919
6916
 
6917
+ // ../blocks/src/system/manifest/schema.ts
6918
+ import { z as z4 } from "zod";
6919
+
6920
6920
  // ../blocks/src/system/node/schema.ts
6921
6921
  import { z as z3 } from "zod";
6922
6922
  var transformStepSchema = z3.object({
@@ -38400,6 +38400,38 @@ var NAMED_SURFACE_IDS = SURFACE_IDS.filter(
38400
38400
  (surfaceId) => surfaceId !== DEFAULT_SURFACE_ID
38401
38401
  );
38402
38402
 
38403
+ // ../api/src/common/envelope.ts
38404
+ var API_ERROR_CODES = [
38405
+ "auth:unauthenticated",
38406
+ "auth:token_expired",
38407
+ "auth:token_invalid",
38408
+ "auth:forbidden",
38409
+ "auth:mfa_required",
38410
+ "auth:sudo_required",
38411
+ "auth:insufficient_permissions",
38412
+ "auth:impersonation_restricted",
38413
+ "validation:invalid_input",
38414
+ "validation:missing_field",
38415
+ "validation:invalid_format",
38416
+ "validation:payload_too_large",
38417
+ "resource:not_found",
38418
+ "resource:already_exists",
38419
+ "resource:conflict",
38420
+ "resource:gone",
38421
+ "rate_limit:exceeded",
38422
+ "billing:payment_required",
38423
+ "billing:plan_limit_exceeded",
38424
+ "billing:pass_redemption_failed",
38425
+ "server:internal_error",
38426
+ "server:unavailable",
38427
+ "external:service_error",
38428
+ "external:registrar_orphaned_contact_profile",
38429
+ "network:connection_error",
38430
+ "network:timeout",
38431
+ "network:dns_error"
38432
+ ];
38433
+ var API_ERROR_CODE_SET = new Set(API_ERROR_CODES);
38434
+
38403
38435
  // ../api/src/customerMembershipOutcomes.ts
38404
38436
  var CANONICAL_REFUND_CONFLICT_CODES = [
38405
38437
  "already_refunded",
@@ -6866,9 +6866,6 @@ function formatKeyAsLabel(key) {
6866
6866
  return key.replace(/([A-Z])/g, " $1").replace(/[-_]/g, " ").trim().split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
6867
6867
  }
6868
6868
 
6869
- // ../blocks/src/system/manifest/schema.ts
6870
- import { z as z4 } from "zod";
6871
-
6872
6869
  // ../media-core/src/transformRect.ts
6873
6870
  function isValidTransformRectStructure(rect) {
6874
6871
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -6962,6 +6959,9 @@ function rotateNormalizedPoint(point, rotation) {
6962
6959
  }
6963
6960
  }
6964
6961
 
6962
+ // ../blocks/src/system/manifest/schema.ts
6963
+ import { z as z4 } from "zod";
6964
+
6965
6965
  // ../blocks/src/system/node/schema.ts
6966
6966
  import { z as z3 } from "zod";
6967
6967
  var transformStepSchema = z3.object({
@@ -38445,6 +38445,38 @@ var NAMED_SURFACE_IDS = SURFACE_IDS.filter(
38445
38445
  (surfaceId) => surfaceId !== DEFAULT_SURFACE_ID
38446
38446
  );
38447
38447
 
38448
+ // ../api/src/common/envelope.ts
38449
+ var API_ERROR_CODES = [
38450
+ "auth:unauthenticated",
38451
+ "auth:token_expired",
38452
+ "auth:token_invalid",
38453
+ "auth:forbidden",
38454
+ "auth:mfa_required",
38455
+ "auth:sudo_required",
38456
+ "auth:insufficient_permissions",
38457
+ "auth:impersonation_restricted",
38458
+ "validation:invalid_input",
38459
+ "validation:missing_field",
38460
+ "validation:invalid_format",
38461
+ "validation:payload_too_large",
38462
+ "resource:not_found",
38463
+ "resource:already_exists",
38464
+ "resource:conflict",
38465
+ "resource:gone",
38466
+ "rate_limit:exceeded",
38467
+ "billing:payment_required",
38468
+ "billing:plan_limit_exceeded",
38469
+ "billing:pass_redemption_failed",
38470
+ "server:internal_error",
38471
+ "server:unavailable",
38472
+ "external:service_error",
38473
+ "external:registrar_orphaned_contact_profile",
38474
+ "network:connection_error",
38475
+ "network:timeout",
38476
+ "network:dns_error"
38477
+ ];
38478
+ var API_ERROR_CODE_SET = new Set(API_ERROR_CODES);
38479
+
38448
38480
  // ../api/src/customerMembershipOutcomes.ts
38449
38481
  var CANONICAL_REFUND_CONFLICT_CODES = [
38450
38482
  "already_refunded",
@@ -6823,9 +6823,6 @@ function formatKeyAsLabel(key) {
6823
6823
  return key.replace(/([A-Z])/g, " $1").replace(/[-_]/g, " ").trim().split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
6824
6824
  }
6825
6825
 
6826
- // ../blocks/src/system/manifest/schema.ts
6827
- import { z as z4 } from "zod";
6828
-
6829
6826
  // ../media-core/src/transformRect.ts
6830
6827
  function isValidTransformRectStructure(rect) {
6831
6828
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -6919,6 +6916,9 @@ function rotateNormalizedPoint(point, rotation) {
6919
6916
  }
6920
6917
  }
6921
6918
 
6919
+ // ../blocks/src/system/manifest/schema.ts
6920
+ import { z as z4 } from "zod";
6921
+
6922
6922
  // ../blocks/src/system/node/schema.ts
6923
6923
  import { z as z3 } from "zod";
6924
6924
  var transformStepSchema = z3.object({
@@ -38832,6 +38832,38 @@ var NAMED_SURFACE_IDS = SURFACE_IDS.filter(
38832
38832
  (surfaceId) => surfaceId !== DEFAULT_SURFACE_ID
38833
38833
  );
38834
38834
 
38835
+ // ../api/src/common/envelope.ts
38836
+ var API_ERROR_CODES = [
38837
+ "auth:unauthenticated",
38838
+ "auth:token_expired",
38839
+ "auth:token_invalid",
38840
+ "auth:forbidden",
38841
+ "auth:mfa_required",
38842
+ "auth:sudo_required",
38843
+ "auth:insufficient_permissions",
38844
+ "auth:impersonation_restricted",
38845
+ "validation:invalid_input",
38846
+ "validation:missing_field",
38847
+ "validation:invalid_format",
38848
+ "validation:payload_too_large",
38849
+ "resource:not_found",
38850
+ "resource:already_exists",
38851
+ "resource:conflict",
38852
+ "resource:gone",
38853
+ "rate_limit:exceeded",
38854
+ "billing:payment_required",
38855
+ "billing:plan_limit_exceeded",
38856
+ "billing:pass_redemption_failed",
38857
+ "server:internal_error",
38858
+ "server:unavailable",
38859
+ "external:service_error",
38860
+ "external:registrar_orphaned_contact_profile",
38861
+ "network:connection_error",
38862
+ "network:timeout",
38863
+ "network:dns_error"
38864
+ ];
38865
+ var API_ERROR_CODE_SET = new Set(API_ERROR_CODES);
38866
+
38835
38867
  // ../api/src/customerMembershipOutcomes.ts
38836
38868
  var CANONICAL_REFUND_CONFLICT_CODES = [
38837
38869
  "already_refunded",
@@ -6512,6 +6512,104 @@ function resolveApiBaseUrl() {
6512
6512
  return getCmsApiUrl();
6513
6513
  }
6514
6514
 
6515
+ // ../api/src/common/envelope.ts
6516
+ var API_ERROR_CODES = [
6517
+ "auth:unauthenticated",
6518
+ "auth:token_expired",
6519
+ "auth:token_invalid",
6520
+ "auth:forbidden",
6521
+ "auth:mfa_required",
6522
+ "auth:sudo_required",
6523
+ "auth:insufficient_permissions",
6524
+ "auth:impersonation_restricted",
6525
+ "validation:invalid_input",
6526
+ "validation:missing_field",
6527
+ "validation:invalid_format",
6528
+ "validation:payload_too_large",
6529
+ "resource:not_found",
6530
+ "resource:already_exists",
6531
+ "resource:conflict",
6532
+ "resource:gone",
6533
+ "rate_limit:exceeded",
6534
+ "billing:payment_required",
6535
+ "billing:plan_limit_exceeded",
6536
+ "billing:pass_redemption_failed",
6537
+ "server:internal_error",
6538
+ "server:unavailable",
6539
+ "external:service_error",
6540
+ "external:registrar_orphaned_contact_profile",
6541
+ "network:connection_error",
6542
+ "network:timeout",
6543
+ "network:dns_error"
6544
+ ];
6545
+ var API_ERROR_CODE_SET = new Set(API_ERROR_CODES);
6546
+ function isApiErrorCode(value) {
6547
+ return typeof value === "string" && API_ERROR_CODE_SET.has(value);
6548
+ }
6549
+ function isApiError(result) {
6550
+ return result.success === false;
6551
+ }
6552
+ function isApiSuccess(result) {
6553
+ return result.success === true;
6554
+ }
6555
+ function isRecord(value) {
6556
+ return typeof value === "object" && value !== null && !Array.isArray(value);
6557
+ }
6558
+ function isFieldError(value) {
6559
+ return isRecord(value) && typeof value.field === "string" && typeof value.code === "string" && typeof value.message === "string";
6560
+ }
6561
+ function fieldErrorsFromUnknown(value) {
6562
+ if (!Array.isArray(value)) return null;
6563
+ return value.every(isFieldError) ? value : null;
6564
+ }
6565
+ function extractEnvelopeErrorObject(body) {
6566
+ if (!isRecord(body)) return null;
6567
+ const error = body.error;
6568
+ if (!isRecord(error)) return null;
6569
+ if ("success" in body && body.success !== false) {
6570
+ return null;
6571
+ }
6572
+ return error;
6573
+ }
6574
+ function extractApiEnvelopeErrorDetails(body) {
6575
+ const error = extractEnvelopeErrorObject(body);
6576
+ if (!error) {
6577
+ return {
6578
+ rawCode: null,
6579
+ code: null,
6580
+ message: null,
6581
+ status: null,
6582
+ fieldErrors: null
6583
+ };
6584
+ }
6585
+ const rawCode = typeof error.code === "string" ? error.code : null;
6586
+ const message = typeof error.message === "string" && error.message.trim().length > 0 ? error.message : null;
6587
+ return {
6588
+ rawCode,
6589
+ code: isApiErrorCode(rawCode) ? rawCode : null,
6590
+ message,
6591
+ status: typeof error.status === "number" && Number.isFinite(error.status) ? error.status : null,
6592
+ fieldErrors: fieldErrorsFromUnknown(error.fieldErrors)
6593
+ };
6594
+ }
6595
+ var ApiEnvelopeError = class extends Error {
6596
+ constructor(error) {
6597
+ super(error.message);
6598
+ this.name = "ApiEnvelopeError";
6599
+ this.code = error.code;
6600
+ this.requestId = error.requestId;
6601
+ this.timestamp = error.timestamp;
6602
+ this.status = error.status;
6603
+ this.fieldErrors = error.fieldErrors;
6604
+ }
6605
+ };
6606
+ function unwrapResponse(result) {
6607
+ if (isApiSuccess(result)) {
6608
+ return result.data;
6609
+ }
6610
+ throw new ApiEnvelopeError(result.error);
6611
+ }
6612
+
6515
6613
  // ../api/src/request.ts
6516
6614
  var revalidateTag = null;
6517
6615
  var revalidateTagResolved = false;
@@ -6890,6 +6988,7 @@ function createParsedClient(rawClient) {
6890
6988
  const auth = config.auth ?? "user";
6891
6989
  if (!response.ok) {
6892
6990
  const body = await parseErrorBody(response);
6991
+ const envelopeError = extractApiEnvelopeErrorDetails(body);
6893
6992
  const requestId = response.headers.get("x-request-id") ?? void 0;
6894
6993
  const retryAfterMs = parseRetryAfterHeader(response.headers.get("retry-after"));
6895
6994
  throw new ApiRequestError(
@@ -6901,6 +7000,7 @@ function createParsedClient(rawClient) {
6901
7000
  auth,
6902
7001
  requestId,
6903
7002
  body,
7003
+ errorCode: envelopeError.code ?? void 0,
6904
7004
  retryAfterMs
6905
7005
  }
6906
7006
  );
@@ -6921,31 +7021,6 @@ function createBearerAPIClient(token, baseUrl) {
6921
7021
  return createCMSClient(authHeaders, baseUrl);
6922
7022
  }
6923
7023
 
6924
- // ../api/src/common/envelope.ts
6925
- function isApiError(result) {
6926
- return result.success === false;
6927
- }
6928
- function isApiSuccess(result) {
6929
- return result.success === true;
6930
- }
6931
- var ApiEnvelopeError = class extends Error {
6932
- constructor(error) {
6933
- super(error.message);
6934
- this.name = "ApiEnvelopeError";
6935
- this.code = error.code;
6936
- this.requestId = error.requestId;
6937
- this.timestamp = error.timestamp;
6938
- this.status = error.status;
6939
- this.fieldErrors = error.fieldErrors;
6940
- }
6941
- };
6942
- function unwrapResponse(result) {
6943
- if (isApiSuccess(result)) {
6944
- return result.data;
6945
- }
6946
- throw new ApiEnvelopeError(result.error);
6947
- }
6948
-
6949
7024
  // src/client/cache.ts
6950
7025
  var SimpleCache = class {
6951
7026
  constructor(options = {}) {
@@ -7062,7 +7137,7 @@ var SimpleCache = class {
7062
7137
  };
7063
7138
 
7064
7139
  // src/version.ts
7065
- var SDK_VERSION = "0.92.0";
7140
+ var SDK_VERSION = "0.94.0";
7066
7141
 
7067
7142
  // src/client/error.ts
7068
7143
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -9636,20 +9711,20 @@ async function prebuildCache(options) {
9636
9711
  // src/prebuild/loader.ts
9637
9712
  import * as fs2 from "fs";
9638
9713
  import * as path2 from "path";
9639
- function isRecord(value) {
9714
+ function isRecord2(value) {
9640
9715
  return Boolean(value && typeof value === "object" && !Array.isArray(value));
9641
9716
  }
9642
9717
  function isStringArray(value) {
9643
9718
  return Array.isArray(value) && value.every((item) => typeof item === "string");
9644
9719
  }
9645
9720
  function isPrebuildManifest(value) {
9646
- if (!isRecord(value)) return false;
9721
+ if (!isRecord2(value)) return false;
9647
9722
  if (typeof value.version !== "string") return false;
9648
9723
  if (typeof value.generatedAt !== "string") return false;
9649
9724
  if (typeof value.checksum !== "string") return false;
9650
9725
  if (typeof value.siteId !== "string") return false;
9651
9726
  if (typeof value.sdkVersion !== "string") return false;
9652
- if (!isRecord(value.keyToFile)) return false;
9727
+ if (!isRecord2(value.keyToFile)) return false;
9653
9728
  if (!isStringArray(value.includedTypes)) return false;
9654
9729
  if (typeof value.fileCount !== "number") return false;
9655
9730
  if (typeof value.totalSize !== "number") return false;