@riverbankcms/sdk 0.90.0 → 0.90.1

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 (80) hide show
  1. package/dist/{PreviewEditorSidebar-KVXNF3VW.mjs → PreviewEditorSidebar-FNFRVSIM.mjs} +2 -2
  2. package/dist/{PreviewEditorUI-J3JN5Z7T.mjs → PreviewEditorUI-3WXJFQXG.mjs} +2 -2
  3. package/dist/SdkPreviewModeRuntime-2UCIMKUB.mjs +8 -0
  4. package/dist/_dts/api/src/bookingConfig.d.ts +3 -0
  5. package/dist/_dts/api/src/event-listing-destination.d.ts +59 -0
  6. package/dist/_dts/api/src/index.d.ts +4 -0
  7. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +0 -1
  8. package/dist/_dts/api/src/navigation.d.ts +2 -0
  9. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +3 -1
  10. package/dist/_dts/api/src/settings/permissions.d.ts +273 -0
  11. package/dist/_dts/api/src/types.d.ts +1 -0
  12. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +60 -2
  13. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +12 -1
  14. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +9 -9
  15. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +1 -1
  16. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +5 -0
  17. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +24 -0
  18. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/destination.d.ts +8 -0
  19. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +3 -0
  20. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +7 -0
  21. package/dist/_dts/core/src/event-pricing.d.ts +12 -2
  22. package/dist/_dts/sdk/src/public-api/contracts.d.ts +11 -1
  23. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +11 -1
  24. package/dist/_dts/sdk/src/version.d.ts +1 -1
  25. package/dist/{chunk-PMBB6MQ7.mjs → chunk-CR2VX432.mjs} +297 -117
  26. package/dist/{chunk-AEOYWPE4.mjs → chunk-FA6LVZ7C.mjs} +5 -5
  27. package/dist/{chunk-RQ3XZ4SJ.mjs → chunk-H6TT5ZXI.mjs} +1 -1
  28. package/dist/{chunk-GSPFFUVB.mjs → chunk-SYYJZPKU.mjs} +1 -1
  29. package/dist/cli/index.mjs +160 -103
  30. package/dist/client/{accordion-GXQNWQ6O.mjs → accordion-4K7VGZ3I.mjs} +2 -2
  31. package/dist/client/{bookingForm-STLUJ36H.mjs → bookingForm-3QXA3CIS.mjs} +5 -5
  32. package/dist/client/bookings.mjs +1154 -556
  33. package/dist/client/{carousel-CVRN6EPP.mjs → carousel-BEJKNGQ7.mjs} +3 -3
  34. package/dist/client/{cart-IYIBA5CL.mjs → cart-44BBM6XG.mjs} +6 -6
  35. package/dist/client/{checkout-O3BGM4GS.mjs → checkout-THMHEYKF.mjs} +6 -6
  36. package/dist/client/{chunk-25W2EQUN.mjs → chunk-3H5CLFKT.mjs} +8 -0
  37. package/dist/client/{chunk-MFPKS6QS.mjs → chunk-4COPESPO.mjs} +5 -5
  38. package/dist/client/{chunk-4RTFGHZN.mjs → chunk-5AJIMWKS.mjs} +6 -3
  39. package/dist/client/{chunk-6DPXDOIL.mjs → chunk-B4H6QMPY.mjs} +93 -22
  40. package/dist/client/{chunk-VFHZLZAC.mjs → chunk-DQIRKNZE.mjs} +1 -1
  41. package/dist/client/{chunk-7DH35FGA.mjs → chunk-EJBHK74Y.mjs} +1 -1
  42. package/dist/client/{chunk-DAS5CIER.mjs → chunk-JV7ZNAOU.mjs} +118 -20
  43. package/dist/client/{chunk-FHU6PFPM.mjs → chunk-KNTLBQ3N.mjs} +1 -1
  44. package/dist/client/{chunk-Z62JYS5O.mjs → chunk-PEDNDLPB.mjs} +2 -2
  45. package/dist/client/{chunk-NBFRJ5NB.mjs → chunk-SLY6UDAS.mjs} +2 -2
  46. package/dist/client/{chunk-D3ETC2SU.mjs → chunk-ZIAF2DA4.mjs} +1 -1
  47. package/dist/client/client.mjs +272 -83
  48. package/dist/client/{courseRegistration-2D3ACMJR.mjs → courseRegistration-URX7RCCK.mjs} +5 -5
  49. package/dist/client/{eventCalendar-QY4UZUFF.mjs → eventCalendar-GTENOQCE.mjs} +8 -8
  50. package/dist/client/{eventCombined-RRCDKJC2.mjs → eventCombined-EZVB72MF.mjs} +8 -8
  51. package/dist/client/{eventDetails-YO335BUT.mjs → eventDetails-CH4BJR5Z.mjs} +8 -8
  52. package/dist/client/{eventListing-PXA6GFQ3.mjs → eventListing-4BVOI5HS.mjs} +8 -8
  53. package/dist/client/{eventRegistration-2ZHEDDXO.mjs → eventRegistration-37LPIKIE.mjs} +8 -8
  54. package/dist/client/{form-ZS6KX4U2.mjs → form-FX3Y54YK.mjs} +2 -2
  55. package/dist/client/{headerSection-QK5SLIIB.mjs → headerSection-UOZZGVYL.mjs} +3 -3
  56. package/dist/client/hooks.mjs +86 -35
  57. package/dist/client/{locationMap-GFNIUD2X.mjs → locationMap-VSIPKV35.mjs} +3 -3
  58. package/dist/client/{newsletterForm-PGLTTCUG.mjs → newsletterForm-6FRJKNAF.mjs} +2 -2
  59. package/dist/client/{productDetail-OPBE5ZPI.mjs → productDetail-6AHMLXCO.mjs} +6 -6
  60. package/dist/client/{productList-NI72Q62Z.mjs → productList-M2CYIZVH.mjs} +6 -6
  61. package/dist/client/rendering/client.mjs +231 -42
  62. package/dist/client/rendering/islands.mjs +19 -19
  63. package/dist/client/rendering.mjs +273 -84
  64. package/dist/client/{shop-3ZQPEWYI.mjs → shop-AUOT6GEX.mjs} +6 -6
  65. package/dist/preview-next/client/runtime.mjs +3 -3
  66. package/dist/{sdk-runtime-FSHXCWDS.mjs → sdk-runtime-6GPJNLU6.mjs} +4 -4
  67. package/dist/server/components.mjs +136 -58
  68. package/dist/server/config-validation.mjs +78 -27
  69. package/dist/server/config.mjs +78 -27
  70. package/dist/server/data.mjs +86 -35
  71. package/dist/server/index.mjs +1 -1
  72. package/dist/server/next.mjs +157 -79
  73. package/dist/server/page-converter.mjs +72 -21
  74. package/dist/server/prebuild.mjs +1 -1
  75. package/dist/server/rendering/server.mjs +148 -70
  76. package/dist/server/rendering.mjs +152 -74
  77. package/dist/server/routing.mjs +121 -44
  78. package/dist/server/server.mjs +95 -44
  79. package/package.json +2 -2
  80. package/dist/SdkPreviewModeRuntime-UBL6MSNP.mjs +0 -8
@@ -170,6 +170,8 @@ function publicEventPricingType(pricing) {
170
170
  case "ticket_types":
171
171
  case "course":
172
172
  return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
173
+ case "external":
174
+ return "external";
173
175
  }
174
176
  }
175
177
  function isFreePublicEventPriceDisplay(display) {
@@ -183,6 +185,7 @@ function isFreePublicEventPriceDisplay(display) {
183
185
  case "range":
184
186
  case "mixed":
185
187
  case "unavailable":
188
+ case "external":
186
189
  return false;
187
190
  }
188
191
  }
@@ -18822,7 +18825,7 @@ var init_schemas = __esm({
18822
18825
  publicCoursesArraySchema = z.array(publicCourseSchema);
18823
18826
  }
18824
18827
  });
18825
- var eventPresetSchema, eventScheduleScopeSchema, eventDestinationModeSchema, eventVenueSchema, eventCategorySchema, accessRestrictionSchema, publicCoursePriceDisplaySchema, publicEventTicketTypePriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
18828
+ var eventPresetSchema, eventScheduleScopeSchema, eventDestinationModeSchema, publicEventDestinationSchema, eventVenueSchema, eventCategorySchema, accessRestrictionSchema, publicCoursePriceDisplaySchema, publicEventTicketTypePriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
18826
18829
  var init_schemas2 = __esm({
18827
18830
  "../blocks/src/system/blocks/events/shared/schemas.ts"() {
18828
18831
  init_media2();
@@ -18832,6 +18835,18 @@ var init_schemas2 = __esm({
18832
18835
  eventPresetSchema = z.enum(["event", "class", "workshop", "retreat", "performance"]);
18833
18836
  eventScheduleScopeSchema = z.enum(["recurring", "oneOff"]);
18834
18837
  eventDestinationModeSchema = z.enum(["cms-managed", "system-managed"]);
18838
+ publicEventDestinationSchema = z.discriminatedUnion("kind", [
18839
+ z.object({
18840
+ kind: z.literal("native"),
18841
+ mode: eventDestinationModeSchema,
18842
+ path: z.string()
18843
+ }),
18844
+ z.object({
18845
+ kind: z.literal("external"),
18846
+ url: z.string(),
18847
+ label: z.string()
18848
+ })
18849
+ ]);
18835
18850
  eventVenueSchema = z.object({
18836
18851
  id: z.string(),
18837
18852
  name: z.string(),
@@ -18846,7 +18861,7 @@ var init_schemas2 = __esm({
18846
18861
  name: z.string(),
18847
18862
  color: z.string().nullable()
18848
18863
  });
18849
- z.enum(["free", "paid"]);
18864
+ z.enum(["free", "paid", "external"]);
18850
18865
  accessRestrictionSchema = z.enum(["none", "category"]);
18851
18866
  z.enum(["single", "ticket_types"]);
18852
18867
  publicCoursePriceDisplaySchema = z.discriminatedUnion("kind", [
@@ -18867,6 +18882,7 @@ var init_schemas2 = __esm({
18867
18882
  currency: z.string()
18868
18883
  }),
18869
18884
  z.object({ kind: z.literal("unavailable"), currency: z.string() }),
18885
+ z.object({ kind: z.literal("external"), label: z.string() }),
18870
18886
  z.object({ kind: z.literal("course"), display: publicCoursePriceDisplaySchema })
18871
18887
  ]);
18872
18888
  publicEventTicketTypePriceDisplaySchema = z.union([
@@ -18945,6 +18961,10 @@ var init_schemas2 = __esm({
18945
18961
  z.object({
18946
18962
  kind: z.literal("course"),
18947
18963
  display: z.object({ kind: z.literal("course"), display: publicCoursePriceDisplaySchema })
18964
+ }),
18965
+ z.object({
18966
+ kind: z.literal("external"),
18967
+ display: z.object({ kind: z.literal("external"), label: z.string() })
18948
18968
  })
18949
18969
  ]);
18950
18970
  publicTeamMemberSummarySchema = z.object({
@@ -18973,7 +18993,8 @@ var init_schemas2 = __esm({
18973
18993
  image: mediaSchema2.nullable().optional()
18974
18994
  }).optional(),
18975
18995
  slug: z.string(),
18976
- path: z.string(),
18996
+ path: z.string().nullable(),
18997
+ destination: publicEventDestinationSchema,
18977
18998
  requiresRegistration: z.boolean(),
18978
18999
  deliveryMode: z.enum(["in_person", "online", "hybrid"]),
18979
19000
  attendanceModes: z.array(publicEventAttendanceModeAvailabilitySchema),
@@ -19312,11 +19333,44 @@ var init_events = __esm({
19312
19333
  }
19313
19334
  });
19314
19335
 
19336
+ // ../blocks/src/system/runtime/nodes/events/shared/destination.ts
19337
+ function isRecord4(value) {
19338
+ return typeof value === "object" && value !== null && !Array.isArray(value);
19339
+ }
19340
+ function isRuntimeEventDestination(value) {
19341
+ if (!isRecord4(value) || typeof value.kind !== "string") return false;
19342
+ if (value.kind === "native") {
19343
+ return (value.mode === "cms-managed" || value.mode === "system-managed") && typeof value.path === "string";
19344
+ }
19345
+ return value.kind === "external" && typeof value.url === "string" && typeof value.label === "string";
19346
+ }
19347
+ function resolveRuntimeEventDestination(event) {
19348
+ if (isRuntimeEventDestination(event.destination)) {
19349
+ return event.destination;
19350
+ }
19351
+ return {
19352
+ kind: "native",
19353
+ mode: event.eventDestinationMode === "system-managed" ? "system-managed" : "cms-managed",
19354
+ path: typeof event.path === "string" ? event.path : ""
19355
+ };
19356
+ }
19357
+ var init_destination = __esm({
19358
+ "../blocks/src/system/runtime/nodes/events/shared/destination.ts"() {
19359
+ }
19360
+ });
19361
+
19315
19362
  // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
19316
19363
  function resolveRuntimeEventPricing(event) {
19317
19364
  if (isPublicEventPricing(event.pricing)) {
19318
19365
  return event.pricing;
19319
19366
  }
19367
+ const destination = resolveRuntimeEventDestination(event);
19368
+ if (destination.kind === "external") {
19369
+ return {
19370
+ kind: "external",
19371
+ display: { kind: "external", label: "External registration" }
19372
+ };
19373
+ }
19320
19374
  const legacy = event;
19321
19375
  const currency = readCurrency(legacy.currency);
19322
19376
  if (event.requiresRegistration === false) {
@@ -19353,22 +19407,22 @@ function resolveRuntimeEventPricing(event) {
19353
19407
  function readCurrency(value) {
19354
19408
  return typeof value === "string" && value.trim().length > 0 ? value : DEFAULT_EVENT_CURRENCY;
19355
19409
  }
19356
- function isRecord4(value) {
19410
+ function isRecord5(value) {
19357
19411
  return typeof value === "object" && value !== null && !Array.isArray(value);
19358
19412
  }
19359
19413
  function isPublicEventPricing(value) {
19360
- if (!isRecord4(value) || typeof value.kind !== "string") return false;
19361
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course";
19414
+ if (!isRecord5(value) || typeof value.kind !== "string") return false;
19415
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
19362
19416
  }
19363
19417
  function isPublicEventTicketType(value) {
19364
- return isRecord4(value) && typeof value.id === "string";
19418
+ return isRecord5(value) && typeof value.id === "string";
19365
19419
  }
19366
19420
  function readTicketTypePriceDisplay(value, currency) {
19367
19421
  const display = readLegacyPriceDisplay(value, currency);
19368
- return display.kind === "course" ? { kind: "unavailable", currency } : display;
19422
+ return display.kind === "course" || display.kind === "external" ? { kind: "unavailable", currency } : display;
19369
19423
  }
19370
19424
  function readLegacyPriceDisplay(value, currency) {
19371
- if (!isRecord4(value) || typeof value.kind !== "string") {
19425
+ if (!isRecord5(value) || typeof value.kind !== "string") {
19372
19426
  return { kind: "unavailable", currency };
19373
19427
  }
19374
19428
  const displayCurrency = readCurrency(value.currency);
@@ -19407,7 +19461,7 @@ function readLegacyPriceDisplay(value, currency) {
19407
19461
  case "unavailable":
19408
19462
  return { kind: "unavailable", currency: displayCurrency };
19409
19463
  case "course":
19410
- return isRecord4(value.display) ? {
19464
+ return isRecord5(value.display) ? {
19411
19465
  kind: "course",
19412
19466
  display: readCoursePriceDisplay(value.display, displayCurrency)
19413
19467
  } : {
@@ -19444,6 +19498,7 @@ function readAmount(value) {
19444
19498
  var DEFAULT_EVENT_CURRENCY;
19445
19499
  var init_pricing = __esm({
19446
19500
  "../blocks/src/system/runtime/nodes/events/shared/pricing.ts"() {
19501
+ init_destination();
19447
19502
  DEFAULT_EVENT_CURRENCY = "USD";
19448
19503
  }
19449
19504
  });
@@ -19504,7 +19559,7 @@ function resolveEventRequiresPayment(input) {
19504
19559
  if (!input.event) {
19505
19560
  return false;
19506
19561
  }
19507
- return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
19562
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) === "paid";
19508
19563
  }
19509
19564
  var init_registrationDerivations = __esm({
19510
19565
  "../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts"() {
@@ -19606,15 +19661,16 @@ function buildEventRegistrationShellBodyText(stepLabels) {
19606
19661
  return "Preparing dates, tickets, and booking details.";
19607
19662
  }
19608
19663
  function normalizeEventRegistrationEventInput(value) {
19609
- if (!isRecord5(value)) {
19664
+ if (!isRecord6(value)) {
19610
19665
  return value;
19611
19666
  }
19612
19667
  return {
19613
19668
  ...value,
19669
+ destination: resolveRuntimeEventDestination(value),
19614
19670
  pricing: resolveRuntimeEventPricing(value)
19615
19671
  };
19616
19672
  }
19617
- function isRecord5(value) {
19673
+ function isRecord6(value) {
19618
19674
  return typeof value === "object" && value !== null && !Array.isArray(value);
19619
19675
  }
19620
19676
  var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS, EVENT_REGISTRATION_SHELL_STEP_LABELS, contentEntrySchema, eventRegistrationPublicEventSchema, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationBlockRuntime;
@@ -19625,6 +19681,7 @@ var init_event_registration_interactive = __esm({
19625
19681
  init_event_registration_shared();
19626
19682
  init_events();
19627
19683
  init_pricing();
19684
+ init_destination();
19628
19685
  init_islands();
19629
19686
  init_runtime();
19630
19687
  init_contract_schemas();
@@ -37075,7 +37132,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
37075
37132
  return keys.length >= 2 ? keys : [];
37076
37133
  }
37077
37134
  function normalizeOfferingsPreviewContentForWrite(value) {
37078
- if (!isRecord6(value)) return null;
37135
+ if (!isRecord7(value)) return null;
37079
37136
  const groupOrderValue = value.groupOrder;
37080
37137
  if (Array.isArray(groupOrderValue)) {
37081
37138
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -37088,7 +37145,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
37088
37145
  return { ...value, groupOrder: [] };
37089
37146
  }
37090
37147
  const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(
37091
- Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord6) : []
37148
+ Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord7) : []
37092
37149
  );
37093
37150
  return legacyOrder.length > 0 ? { ...value, groupOrder: legacyOrder } : value;
37094
37151
  }
@@ -37102,7 +37159,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
37102
37159
  }
37103
37160
  return keys;
37104
37161
  }
37105
- function isRecord6(value) {
37162
+ function isRecord7(value) {
37106
37163
  return typeof value === "object" && value !== null && !Array.isArray(value);
37107
37164
  }
37108
37165
 
@@ -37469,7 +37526,7 @@ function isOfferingsPreviewItemLimit(value) {
37469
37526
  return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
37470
37527
  }
37471
37528
  function normalizeOfferingsPreviewGroupOverride(value) {
37472
- if (!isRecord7(value)) return [];
37529
+ if (!isRecord8(value)) return [];
37473
37530
  const override = {};
37474
37531
  if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) {
37475
37532
  override.sourceKey = value.sourceKey;
@@ -37501,12 +37558,12 @@ function isButtonVariant(value) {
37501
37558
  return value === "primary" || value === "secondary" || value === "outline" || value === "link" || value === null;
37502
37559
  }
37503
37560
  function normalizeCardStylesContent(value) {
37504
- return isRecord7(value) || value === null ? value : void 0;
37561
+ return isRecord8(value) || value === null ? value : void 0;
37505
37562
  }
37506
37563
  function normalizeSectionStylesContent(value) {
37507
- return isRecord7(value) || value === null ? value : void 0;
37564
+ return isRecord8(value) || value === null ? value : void 0;
37508
37565
  }
37509
- function isRecord7(value) {
37566
+ function isRecord8(value) {
37510
37567
  return typeof value === "object" && value !== null && !Array.isArray(value);
37511
37568
  }
37512
37569
 
@@ -43321,7 +43378,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
43321
43378
  }
43322
43379
 
43323
43380
  // ../api/src/utils/isRecord.ts
43324
- function isRecord8(value) {
43381
+ function isRecord9(value) {
43325
43382
  return typeof value === "object" && value !== null && !Array.isArray(value);
43326
43383
  }
43327
43384
  var APPOINTMENT_SETUP_MAX_MINUTES = 1440;
@@ -43594,7 +43651,7 @@ function sanitizeMarks(marks) {
43594
43651
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
43595
43652
  return [{ type: mark.type }];
43596
43653
  }
43597
- if (mark.type === "link" && isRecord8(mark.attrs) && typeof mark.attrs.href === "string") {
43654
+ if (mark.type === "link" && isRecord9(mark.attrs) && typeof mark.attrs.href === "string") {
43598
43655
  const attrs = { href: mark.attrs.href };
43599
43656
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
43600
43657
  attrs.target = mark.attrs.target;
@@ -43609,10 +43666,10 @@ function sanitizeMarks(marks) {
43609
43666
  return sanitized.length > 0 ? sanitized : void 0;
43610
43667
  }
43611
43668
  function unwrapRichTextValue(value) {
43612
- if (isRecord8(value) && isRecord8(value.doc)) {
43669
+ if (isRecord9(value) && isRecord9(value.doc)) {
43613
43670
  return unwrapRichTextValue(value.doc);
43614
43671
  }
43615
- if (isRecord8(value) && value.type === "doc") {
43672
+ if (isRecord9(value) && value.type === "doc") {
43616
43673
  return {
43617
43674
  type: "doc",
43618
43675
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -43621,7 +43678,7 @@ function unwrapRichTextValue(value) {
43621
43678
  return EMPTY_SITE_BANNER_BODY;
43622
43679
  }
43623
43680
  function isTipTapNodeLike(value) {
43624
- return isRecord8(value) && typeof value.type === "string";
43681
+ return isRecord9(value) && typeof value.type === "string";
43625
43682
  }
43626
43683
  function coerceTipTapNode(value) {
43627
43684
  return {
@@ -43629,9 +43686,9 @@ function coerceTipTapNode(value) {
43629
43686
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
43630
43687
  ...typeof value.text === "string" ? { text: value.text } : {},
43631
43688
  ...Array.isArray(value.marks) ? {
43632
- marks: value.marks.filter((mark) => isRecord8(mark) && typeof mark.type === "string").map((mark) => ({
43689
+ marks: value.marks.filter((mark) => isRecord9(mark) && typeof mark.type === "string").map((mark) => ({
43633
43690
  type: mark.type,
43634
- ...isRecord8(mark.attrs) ? { attrs: mark.attrs } : {}
43691
+ ...isRecord9(mark.attrs) ? { attrs: mark.attrs } : {}
43635
43692
  }))
43636
43693
  } : {}
43637
43694
  };
@@ -43747,7 +43804,7 @@ function collectCartLinkStats(items, depth = 0) {
43747
43804
  return result;
43748
43805
  }
43749
43806
  function isNavigationMenuValidationItem(value) {
43750
- if (!isRecord8(value)) return false;
43807
+ if (!isRecord9(value)) return false;
43751
43808
  return typeof value.label === "string";
43752
43809
  }
43753
43810
 
@@ -45000,20 +45057,20 @@ var ManagementApiError = class extends Error {
45000
45057
  function is404Error(error) {
45001
45058
  return error instanceof ManagementApiError && error.statusCode === 404;
45002
45059
  }
45003
- function isRecord9(value) {
45060
+ function isRecord10(value) {
45004
45061
  return Boolean(value && typeof value === "object" && !Array.isArray(value));
45005
45062
  }
45006
45063
  function isFieldError(value) {
45007
- return isRecord9(value) && typeof value.field === "string" && typeof value.code === "string" && typeof value.message === "string";
45064
+ return isRecord10(value) && typeof value.field === "string" && typeof value.code === "string" && typeof value.message === "string";
45008
45065
  }
45009
45066
  function parseApiResponse(value) {
45010
- if (!isRecord9(value)) return null;
45067
+ if (!isRecord10(value)) return null;
45011
45068
  if (value.success === true) {
45012
45069
  return { success: true, data: value.data };
45013
45070
  }
45014
45071
  if (value.success === false) {
45015
45072
  const error = value.error;
45016
- if (!isRecord9(error) || typeof error.code !== "string" || typeof error.message !== "string") {
45073
+ if (!isRecord10(error) || typeof error.code !== "string" || typeof error.message !== "string") {
45017
45074
  return { success: false, error: { code: "sdk:http-error", message: "Request failed", details: error } };
45018
45075
  }
45019
45076
  const fieldErrorsRaw = error.fieldErrors;
@@ -46542,7 +46599,7 @@ function createListCommand(config2) {
46542
46599
 
46543
46600
  // src/cli/push-config.ts
46544
46601
  var DEFAULT_CONFIG_PATH = "./riverbank.config.ts";
46545
- function isRecord10(value) {
46602
+ function isRecord11(value) {
46546
46603
  return typeof value === "object" && value !== null;
46547
46604
  }
46548
46605
  function parseErrorDetails(value) {
@@ -46550,10 +46607,10 @@ function parseErrorDetails(value) {
46550
46607
  if (typeof value === "string") {
46551
46608
  return { message: value };
46552
46609
  }
46553
- if (!isRecord10(value)) return {};
46610
+ if (!isRecord11(value)) return {};
46554
46611
  const message = typeof value.message === "string" ? value.message : void 0;
46555
46612
  const fieldErrorsRaw = value.fieldErrors;
46556
- const fieldErrors = Array.isArray(fieldErrorsRaw) ? fieldErrorsRaw.filter(isRecord10).map((d) => ({
46613
+ const fieldErrors = Array.isArray(fieldErrorsRaw) ? fieldErrorsRaw.filter(isRecord11).map((d) => ({
46557
46614
  field: typeof d.field === "string" ? d.field : "",
46558
46615
  message: typeof d.message === "string" ? d.message : ""
46559
46616
  })).filter((d) => d.field.length > 0 && d.message.length > 0) : void 0;
@@ -46565,12 +46622,12 @@ function formatFieldErrors(fieldErrors) {
46565
46622
  }
46566
46623
  function getDashboardErrorMessage(responseJson, fallback) {
46567
46624
  if (!responseJson) return fallback;
46568
- if (isRecord10(responseJson) && responseJson.success === false && "error" in responseJson) {
46625
+ if (isRecord11(responseJson) && responseJson.success === false && "error" in responseJson) {
46569
46626
  const parsed = parseErrorDetails(responseJson.error);
46570
46627
  const msg = parsed.message ?? fallback;
46571
46628
  return msg + formatFieldErrors(parsed.fieldErrors);
46572
46629
  }
46573
- if (isRecord10(responseJson) && "error" in responseJson) {
46630
+ if (isRecord11(responseJson) && "error" in responseJson) {
46574
46631
  const parsed = parseErrorDetails(responseJson.error);
46575
46632
  const msg = parsed.message ?? fallback;
46576
46633
  return msg + formatFieldErrors(parsed.fieldErrors);
@@ -46895,7 +46952,7 @@ function duplicateNavigationIdentityMessage(error) {
46895
46952
 
46896
46953
  // src/cli/media/portable.ts
46897
46954
  var ENV_SPECIFIC_MEDIA_KEYS = ["assetId", "storagePath", "storageBucket"];
46898
- var isRecord11 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
46955
+ var isRecord12 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
46899
46956
  var isMediaObject = (value) => value.type === "image" || value.type === "video";
46900
46957
  function stripEnvSpecificMediaFieldsInPlace(value) {
46901
46958
  if (value === null || value === void 0) return;
@@ -46905,7 +46962,7 @@ function stripEnvSpecificMediaFieldsInPlace(value) {
46905
46962
  }
46906
46963
  return;
46907
46964
  }
46908
- if (!isRecord11(value)) return;
46965
+ if (!isRecord12(value)) return;
46909
46966
  if (isMediaObject(value)) {
46910
46967
  const hasCmsRef = typeof value.identifier === "string" || typeof value.assetId === "string" || typeof value.storagePath === "string" || typeof value.storageBucket === "string";
46911
46968
  for (const key of ENV_SPECIFIC_MEDIA_KEYS) {
@@ -46916,7 +46973,7 @@ function stripEnvSpecificMediaFieldsInPlace(value) {
46916
46973
  }
46917
46974
  delete value.mimeType;
46918
46975
  }
46919
- if (value.type === "image" && isRecord11(value.attrs)) {
46976
+ if (value.type === "image" && isRecord12(value.attrs)) {
46920
46977
  const attrs = value.attrs;
46921
46978
  const hasIdentifier = typeof attrs.identifier === "string" && attrs.identifier.trim().length > 0;
46922
46979
  if (hasIdentifier) {
@@ -47088,11 +47145,11 @@ function entryFilePath(input) {
47088
47145
  }
47089
47146
 
47090
47147
  // src/cli/content/writer.ts
47091
- function isRecord12(value) {
47148
+ function isRecord13(value) {
47092
47149
  return typeof value === "object" && value !== null && !Array.isArray(value);
47093
47150
  }
47094
47151
  function parseThemeMeta(value) {
47095
- if (!isRecord12(value) || typeof value.pulledAt !== "string" || !isRecord12(value.themes)) {
47152
+ if (!isRecord13(value) || typeof value.pulledAt !== "string" || !isRecord13(value.themes)) {
47096
47153
  return null;
47097
47154
  }
47098
47155
  return { pulledAt: value.pulledAt, themes: value.themes };
@@ -48515,9 +48572,9 @@ async function localMediaFileExists(filePath) {
48515
48572
  }
48516
48573
 
48517
48574
  // src/cli/media/identifiers.ts
48518
- var isRecord13 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
48575
+ var isRecord14 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
48519
48576
  var isMediaValue = (value) => {
48520
- if (!isRecord13(value)) return false;
48577
+ if (!isRecord14(value)) return false;
48521
48578
  const type = value.type;
48522
48579
  if (type !== "image" && type !== "video" && type !== "audio" && type !== "document" && type !== "spreadsheet" && type !== "archive") return false;
48523
48580
  return typeof value.identifier === "string" || typeof value.assetId === "string" || typeof value.storagePath === "string" || typeof value.src === "string";
@@ -48532,7 +48589,7 @@ var walkMediaValues = (value, location2, handler) => {
48532
48589
  });
48533
48590
  return;
48534
48591
  }
48535
- if (isRecord13(value)) {
48592
+ if (isRecord14(value)) {
48536
48593
  Object.entries(value).forEach(([key, entry]) => {
48537
48594
  walkMediaValues(entry, location2 ? `${location2}.${key}` : key, handler);
48538
48595
  });
@@ -48658,7 +48715,7 @@ var normalizeMediaValueToIdentifierOnly = (value, identifier, asset) => {
48658
48715
  };
48659
48716
 
48660
48717
  // src/cli/media/rich-text.ts
48661
- var isRecord14 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
48718
+ var isRecord15 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
48662
48719
  function collectRichTextImageAttrs(value, out = [], location2 = "") {
48663
48720
  if (Array.isArray(value)) {
48664
48721
  value.forEach(
@@ -48666,8 +48723,8 @@ function collectRichTextImageAttrs(value, out = [], location2 = "") {
48666
48723
  );
48667
48724
  return out;
48668
48725
  }
48669
- if (!isRecord14(value)) return out;
48670
- if (value.type === "image" && isRecord14(value.attrs)) {
48726
+ if (!isRecord15(value)) return out;
48727
+ if (value.type === "image" && isRecord15(value.attrs)) {
48671
48728
  out.push({ attrs: value.attrs, location: location2 ? `${location2}.attrs` : "attrs" });
48672
48729
  }
48673
48730
  for (const [key, child] of Object.entries(value)) {
@@ -52805,7 +52862,7 @@ var isoDateTimeRegex = /^\d{4}-\d{2}-\d{2}T.+/;
52805
52862
  function issue2(path28, message) {
52806
52863
  return { path: path28, message };
52807
52864
  }
52808
- function isRecord15(value) {
52865
+ function isRecord16(value) {
52809
52866
  return typeof value === "object" && value !== null && !Array.isArray(value);
52810
52867
  }
52811
52868
  function isCurrency(value) {
@@ -52821,7 +52878,7 @@ function isWholeMinuteIsoDateTime(value) {
52821
52878
  }
52822
52879
  function validateTicketType(raw, index, currency) {
52823
52880
  const path28 = ["ticketTypes", String(index)];
52824
- if (!isRecord15(raw)) return [issue2(path28, "Ticket type must be an object")];
52881
+ if (!isRecord16(raw)) return [issue2(path28, "Ticket type must be an object")];
52825
52882
  const issues = [];
52826
52883
  const identifier = raw.identifier;
52827
52884
  if (typeof identifier !== "string" || !identifierRegex.test(identifier)) {
@@ -52944,7 +53001,7 @@ function validateTicketTypes(rawTicketTypes, currency) {
52944
53001
  const ticketTypes = [];
52945
53002
  const seenIdentifiers = /* @__PURE__ */ new Set();
52946
53003
  rawTicketTypes.forEach((rawTicketType, index) => {
52947
- const rawIdentifier = isRecord15(rawTicketType) ? rawTicketType.identifier : void 0;
53004
+ const rawIdentifier = isRecord16(rawTicketType) ? rawTicketType.identifier : void 0;
52948
53005
  const hasValidIdentifier = typeof rawIdentifier === "string" && identifierRegex.test(rawIdentifier);
52949
53006
  const isDuplicateIdentifier = hasValidIdentifier && seenIdentifiers.has(rawIdentifier);
52950
53007
  if (isDuplicateIdentifier) {
@@ -52988,7 +53045,7 @@ function classifySdkEventPricing(rawInput) {
52988
53045
  if (rawInput === void 0 || rawInput === null) {
52989
53046
  return { ok: true, pricing: { kind: "free" } };
52990
53047
  }
52991
- if (!isRecord15(rawInput)) {
53048
+ if (!isRecord16(rawInput)) {
52992
53049
  return { ok: false, issues: [issue2([], "Pricing must be an object")] };
52993
53050
  }
52994
53051
  const record = rawInput;
@@ -53098,7 +53155,7 @@ var supportedKinds = /* @__PURE__ */ new Set([
53098
53155
  function issue3(path28, message) {
53099
53156
  return { path: path28, message };
53100
53157
  }
53101
- function isRecord16(value) {
53158
+ function isRecord17(value) {
53102
53159
  return typeof value === "object" && value !== null && !Array.isArray(value);
53103
53160
  }
53104
53161
  function isWholeNumber2(value) {
@@ -53114,7 +53171,7 @@ function isSupportedOptionKind(value) {
53114
53171
  return typeof value === "string" && supportedKinds.has(value);
53115
53172
  }
53116
53173
  function validateFlexibleBalanceDueDateRule(raw, path28) {
53117
- if (!isRecord16(raw)) {
53174
+ if (!isRecord17(raw)) {
53118
53175
  return [issue3(path28, "Flexible balance dueDateRule must be an object")];
53119
53176
  }
53120
53177
  if (raw.kind === "relative_to_start_date") {
@@ -53153,7 +53210,7 @@ function validateFlexibleBalanceDueDateRule(raw, path28) {
53153
53210
  ];
53154
53211
  }
53155
53212
  function validateFlexibleBalanceConfig(raw, path28) {
53156
- if (!isRecord16(raw)) {
53213
+ if (!isRecord17(raw)) {
53157
53214
  return [issue3(path28, "Flexible balance config must be an object")];
53158
53215
  }
53159
53216
  const issues = [];
@@ -53199,7 +53256,7 @@ function validateFlexibleBalanceConfig(raw, path28) {
53199
53256
  }
53200
53257
  function validateCollectionOption(raw, index) {
53201
53258
  const path28 = ["allowedOptions", String(index)];
53202
- if (!isRecord16(raw)) {
53259
+ if (!isRecord17(raw)) {
53203
53260
  return [issue3(path28, "Payment option must be an object")];
53204
53261
  }
53205
53262
  if (raw.kind === "instalment_plan") {
@@ -53270,7 +53327,7 @@ function classifySdkEventPaymentTerms(rawInput) {
53270
53327
  if (rawInput === void 0 || rawInput === null) {
53271
53328
  return { ok: true, paymentTerms: void 0 };
53272
53329
  }
53273
- if (!isRecord16(rawInput)) {
53330
+ if (!isRecord17(rawInput)) {
53274
53331
  return {
53275
53332
  ok: false,
53276
53333
  issues: [issue3([], "Event paymentTerms must be an object")]
@@ -53321,7 +53378,7 @@ function classifySdkEventPaymentTerms(rawInput) {
53321
53378
  function nullishToNull(value) {
53322
53379
  return value == null ? null : value;
53323
53380
  }
53324
- function isRecord17(value) {
53381
+ function isRecord18(value) {
53325
53382
  return typeof value === "object" && value !== null && !Array.isArray(value);
53326
53383
  }
53327
53384
  function stringValue(value, fallback) {
@@ -53342,7 +53399,7 @@ function normalizeEventPaymentTermsForCompare(paymentTerms) {
53342
53399
  return void 0;
53343
53400
  }
53344
53401
  function normalizeVenueAddress(value) {
53345
- const obj = isRecord17(value) ? value : {};
53402
+ const obj = isRecord18(value) ? value : {};
53346
53403
  return {
53347
53404
  line1: nullishToNull(typeof obj.line1 === "string" ? obj.line1 : void 0),
53348
53405
  line2: nullishToNull(typeof obj.line2 === "string" ? obj.line2 : void 0),
@@ -53359,7 +53416,7 @@ function normalizeVenueAddress(value) {
53359
53416
  };
53360
53417
  }
53361
53418
  function normalizeVenueLocation(value) {
53362
- if (!isRecord17(value)) return null;
53419
+ if (!isRecord18(value)) return null;
53363
53420
  const obj = value;
53364
53421
  const lat = typeof obj.lat === "number" ? obj.lat : null;
53365
53422
  const lng = typeof obj.lng === "number" ? obj.lng : null;
@@ -53367,7 +53424,7 @@ function normalizeVenueLocation(value) {
53367
53424
  return { lat, lng };
53368
53425
  }
53369
53426
  function normalizeVenueForCompare(venue) {
53370
- const obj = isRecord17(venue) ? venue : {};
53427
+ const obj = isRecord18(venue) ? venue : {};
53371
53428
  return {
53372
53429
  slug: String(obj.slug),
53373
53430
  title: String(obj.title),
@@ -53388,7 +53445,7 @@ function normalizeVenueForCompare(venue) {
53388
53445
  };
53389
53446
  }
53390
53447
  function normalizeEventCategoryForCompare(category) {
53391
- const obj = isRecord17(category) ? category : {};
53448
+ const obj = isRecord18(category) ? category : {};
53392
53449
  return {
53393
53450
  identifier: String(obj.identifier),
53394
53451
  name: String(obj.name),
@@ -53400,8 +53457,8 @@ function normalizeEventCategoryForCompare(category) {
53400
53457
  };
53401
53458
  }
53402
53459
  function normalizeRemoteEventForCompare(event) {
53403
- const obj = isRecord17(event) ? event : {};
53404
- const schedule = isRecord17(obj.schedule) ? obj.schedule : {};
53460
+ const obj = isRecord18(event) ? event : {};
53461
+ const schedule = isRecord18(obj.schedule) ? obj.schedule : {};
53405
53462
  return {
53406
53463
  identifier: String(obj.identifier),
53407
53464
  title: String(obj.title),
@@ -53430,14 +53487,14 @@ function normalizeRemoteEventForCompare(event) {
53430
53487
  formRef: nullishToNull(
53431
53488
  typeof obj.formRef === "string" ? obj.formRef : void 0
53432
53489
  ),
53433
- content: isRecord17(obj.content) ? obj.content : {},
53434
- settings: isRecord17(obj.settings) ? obj.settings : {},
53435
- presentation: isRecord17(obj.presentation) ? obj.presentation : null,
53490
+ content: isRecord18(obj.content) ? obj.content : {},
53491
+ settings: isRecord18(obj.settings) ? obj.settings : {},
53492
+ presentation: isRecord18(obj.presentation) ? obj.presentation : null,
53436
53493
  tags: Array.isArray(obj.tags) ? obj.tags : []
53437
53494
  };
53438
53495
  }
53439
53496
  function normalizeLocalEventAgainstRemoteForCompare(localEvent, remoteEvent) {
53440
- const local = isRecord17(localEvent) ? localEvent : {};
53497
+ const local = isRecord18(localEvent) ? localEvent : {};
53441
53498
  const base = remoteEvent ? normalizeRemoteEventForCompare(remoteEvent) : normalizeRemoteEventForCompare({
53442
53499
  identifier: local.identifier,
53443
53500
  title: local.title,
@@ -53456,7 +53513,7 @@ function normalizeLocalEventAgainstRemoteForCompare(localEvent, remoteEvent) {
53456
53513
  presentation: local.presentation ?? null,
53457
53514
  tags: local.tags ?? []
53458
53515
  });
53459
- const schedule = isRecord17(local.schedule) ? local.schedule : {};
53516
+ const schedule = isRecord18(local.schedule) ? local.schedule : {};
53460
53517
  return {
53461
53518
  ...base,
53462
53519
  identifier: stringValue(local.identifier, base.identifier),
@@ -53487,9 +53544,9 @@ function normalizeLocalEventAgainstRemoteForCompare(localEvent, remoteEvent) {
53487
53544
  formRef: local.formRef === void 0 ? base.formRef : nullishToNull(
53488
53545
  typeof local.formRef === "string" ? local.formRef : void 0
53489
53546
  ),
53490
- content: local.content === void 0 ? base.content : isRecord17(local.content) ? local.content : {},
53491
- settings: local.settings === void 0 ? base.settings : isRecord17(local.settings) ? local.settings : {},
53492
- presentation: local.presentation === void 0 ? base.presentation : isRecord17(local.presentation) ? local.presentation : null,
53547
+ content: local.content === void 0 ? base.content : isRecord18(local.content) ? local.content : {},
53548
+ settings: local.settings === void 0 ? base.settings : isRecord18(local.settings) ? local.settings : {},
53549
+ presentation: local.presentation === void 0 ? base.presentation : isRecord18(local.presentation) ? local.presentation : null,
53493
53550
  tags: local.tags === void 0 ? base.tags : Array.isArray(local.tags) ? local.tags : []
53494
53551
  };
53495
53552
  }
@@ -53501,7 +53558,7 @@ function toIsoStringOrOriginal(value) {
53501
53558
  function normalizeCourseSessions(value) {
53502
53559
  if (!Array.isArray(value)) return [];
53503
53560
  return value.map((session) => {
53504
- const obj = isRecord17(session) ? session : {};
53561
+ const obj = isRecord18(session) ? session : {};
53505
53562
  return {
53506
53563
  startsAt: toIsoStringOrOriginal(obj.startsAt),
53507
53564
  endsAt: toIsoStringOrOriginal(obj.endsAt)
@@ -53513,18 +53570,18 @@ function normalizeCourseSessions(value) {
53513
53570
  }
53514
53571
  function normalizeCourseProgram(value) {
53515
53572
  if (value == null) return null;
53516
- if (!isRecord17(value)) {
53573
+ if (!isRecord18(value)) {
53517
53574
  return { identifier: null, data: {} };
53518
53575
  }
53519
53576
  return {
53520
53577
  identifier: nullishToNull(
53521
53578
  typeof value.identifier === "string" ? value.identifier : void 0
53522
53579
  ),
53523
- data: isRecord17(value.data) ? value.data : {}
53580
+ data: isRecord18(value.data) ? value.data : {}
53524
53581
  };
53525
53582
  }
53526
53583
  function normalizeRemoteCourseForCompare(course) {
53527
- const obj = isRecord17(course) ? course : {};
53584
+ const obj = isRecord18(course) ? course : {};
53528
53585
  return {
53529
53586
  identifier: String(obj.identifier),
53530
53587
  title: String(obj.title),
@@ -53559,7 +53616,7 @@ function normalizeRemoteCourseForCompare(course) {
53559
53616
  };
53560
53617
  }
53561
53618
  function normalizeLocalCourseAgainstRemoteForCompare(localCourse, remoteCourse) {
53562
- const local = isRecord17(localCourse) ? localCourse : {};
53619
+ const local = isRecord18(localCourse) ? localCourse : {};
53563
53620
  const base = remoteCourse ? normalizeRemoteCourseForCompare(remoteCourse) : normalizeRemoteCourseForCompare({
53564
53621
  identifier: local.identifier,
53565
53622
  title: local.title,
@@ -53580,11 +53637,11 @@ function normalizeLocalCourseAgainstRemoteForCompare(localCourse, remoteCourse)
53580
53637
  });
53581
53638
  const status = local.status === void 0 ? base.status : local.status === "active" || local.status === "cancelled" || local.status === "completed" ? local.status : "draft";
53582
53639
  const visibility = local.visibility === void 0 ? base.visibility : local.visibility === "public" || local.visibility === "private" || local.visibility === "unlisted" ? local.visibility : "public";
53583
- const program2 = local.program === void 0 ? base.program : local.program === null ? null : isRecord17(local.program) ? {
53640
+ const program2 = local.program === void 0 ? base.program : local.program === null ? null : isRecord18(local.program) ? {
53584
53641
  identifier: local.program.identifier === void 0 ? base.program?.identifier ?? null : nullishToNull(
53585
53642
  typeof local.program.identifier === "string" ? local.program.identifier : void 0
53586
53643
  ),
53587
- data: isRecord17(local.program.data) ? local.program.data : base.program?.data ?? {}
53644
+ data: isRecord18(local.program.data) ? local.program.data : base.program?.data ?? {}
53588
53645
  } : base.program;
53589
53646
  return {
53590
53647
  ...base,
@@ -55837,7 +55894,7 @@ function getSiteCommandLifecycleIntent(command) {
55837
55894
  init_src();
55838
55895
 
55839
55896
  // ../site-commands/src/guards.ts
55840
- function isRecord18(value) {
55897
+ function isRecord19(value) {
55841
55898
  return typeof value === "object" && value !== null;
55842
55899
  }
55843
55900
 
@@ -56102,7 +56159,7 @@ function collectVenueRefsFromIntervals(intervals, path28) {
56102
56159
  }
56103
56160
  function collectNavigationRefs(items, path28) {
56104
56161
  return items.flatMap((item, index) => {
56105
- if (!isRecord18(item)) return [];
56162
+ if (!isRecord19(item)) return [];
56106
56163
  const itemPath = `${path28}[${index}]`;
56107
56164
  const refs = [];
56108
56165
  if (typeof item.pageRef === "string") {
@@ -56119,7 +56176,7 @@ function collectNavigationRefs(items, path28) {
56119
56176
  }
56120
56177
  function collectBlockRefs(blocks, path28) {
56121
56178
  return blocks.flatMap((block, index) => {
56122
- if (!isRecord18(block)) return [];
56179
+ if (!isRecord19(block)) return [];
56123
56180
  const blockPath = `${path28}[${index}]`;
56124
56181
  return [
56125
56182
  ...collectNestedRefs(block.props, `${blockPath}.props`),
@@ -56135,7 +56192,7 @@ function collectNestedRefs(value, path28) {
56135
56192
  if (Array.isArray(value)) {
56136
56193
  return value.flatMap((item, index) => collectNestedRefs(item, `${path28}[${index}]`));
56137
56194
  }
56138
- if (!isRecord18(value)) return [];
56195
+ if (!isRecord19(value)) return [];
56139
56196
  return Object.entries(value).flatMap(([key, child]) => collectNestedRefs(child, `${path28}.${key}`));
56140
56197
  }
56141
56198
 
@@ -56391,9 +56448,9 @@ function deriveIdempotencyKey(input) {
56391
56448
  ].join("|"));
56392
56449
  }
56393
56450
  function findUnknownCommandTypes(input) {
56394
- if (!isRecord18(input) || !Array.isArray(input.commands)) return [];
56451
+ if (!isRecord19(input) || !Array.isArray(input.commands)) return [];
56395
56452
  return input.commands.flatMap((command, commandIndex) => {
56396
- if (!isRecord18(command) || typeof command.type !== "string") return [];
56453
+ if (!isRecord19(command) || typeof command.type !== "string") return [];
56397
56454
  if (commandTypeSet.has(command.type)) return [];
56398
56455
  return [{
56399
56456
  code: "unknown_command_type",
@@ -56419,9 +56476,9 @@ function commandIndexForIssuePath(path28) {
56419
56476
  return path28[0] === "commands" && typeof path28[1] === "number" ? path28[1] : -1;
56420
56477
  }
56421
56478
  function commandTypeForIssue(input, commandIndex) {
56422
- if (!isRecord18(input) || !isUnknownArray3(input.commands)) return null;
56479
+ if (!isRecord19(input) || !isUnknownArray3(input.commands)) return null;
56423
56480
  const command = input.commands[commandIndex];
56424
- return isRecord18(command) && typeof command.type === "string" ? command.type : null;
56481
+ return isRecord19(command) && typeof command.type === "string" ? command.type : null;
56425
56482
  }
56426
56483
  function isUnknownArray3(value) {
56427
56484
  return Array.isArray(value);
@@ -57735,8 +57792,8 @@ function eventContentInput(content) {
57735
57792
  if (!content) return void 0;
57736
57793
  return {
57737
57794
  ...content.summary ? { summary: content.summary } : {},
57738
- ...typeof content.body === "string" || isRecord19(content.body) ? { body: content.body } : {},
57739
- ...typeof content.image === "string" || isRecord19(content.image) ? { image: content.image } : {}
57795
+ ...typeof content.body === "string" || isRecord20(content.body) ? { body: content.body } : {},
57796
+ ...typeof content.image === "string" || isRecord20(content.image) ? { image: content.image } : {}
57740
57797
  };
57741
57798
  }
57742
57799
  function courseUpsertInput(command) {
@@ -57917,7 +57974,7 @@ function toUtcIso(date, time) {
57917
57974
  const normalizedTime = time.length === 5 ? `${time}:00` : time;
57918
57975
  return (/* @__PURE__ */ new Date(`${date}T${normalizedTime}Z`)).toISOString();
57919
57976
  }
57920
- function isRecord19(value) {
57977
+ function isRecord20(value) {
57921
57978
  return Boolean(value && typeof value === "object" && !Array.isArray(value));
57922
57979
  }
57923
57980
  function unsupported(identifier, message) {
@@ -64119,7 +64176,7 @@ var THEME_FIELD_CATEGORY_MAP = {
64119
64176
  };
64120
64177
 
64121
64178
  // src/cli/init-docs/zod-to-markdown.ts
64122
- function isRecord20(value) {
64179
+ function isRecord21(value) {
64123
64180
  return typeof value === "object" && value !== null && !Array.isArray(value);
64124
64181
  }
64125
64182
  function isZodTypeAny(value) {
@@ -64247,7 +64304,7 @@ function extractLiteralValue(schema) {
64247
64304
  const typeName = getTypeName(schema);
64248
64305
  if (typeName !== ZodTypeName.ZodLiteral) return void 0;
64249
64306
  const def = schema._def;
64250
- if (!isRecord20(def)) return void 0;
64307
+ if (!isRecord21(def)) return void 0;
64251
64308
  return String(def.value);
64252
64309
  }
64253
64310
  function extractSchemaInfo(schema, skipFields = []) {
@@ -64317,7 +64374,7 @@ function extractFieldInfo(name, schema) {
64317
64374
  }
64318
64375
  if (typeName === ZodTypeName.ZodRecord) {
64319
64376
  const def = inner._def;
64320
- const valueSchema = isRecord20(def) ? def.valueType : void 0;
64377
+ const valueSchema = isRecord21(def) ? def.valueType : void 0;
64321
64378
  if (!isZodTypeAny(valueSchema)) {
64322
64379
  info.recordValueType = "unknown";
64323
64380
  return info;
@@ -64332,7 +64389,7 @@ function extractFieldInfo(name, schema) {
64332
64389
  }
64333
64390
  } else if (getTypeName(valueInner) === ZodTypeName.ZodRecord) {
64334
64391
  const nestedDef = valueInner._def;
64335
- const nestedValueSchema = isRecord20(nestedDef) ? nestedDef.valueType : void 0;
64392
+ const nestedValueSchema = isRecord21(nestedDef) ? nestedDef.valueType : void 0;
64336
64393
  if (!isZodTypeAny(nestedValueSchema)) {
64337
64394
  info.recordValueType = "record<string, unknown>";
64338
64395
  return info;
@@ -64343,7 +64400,7 @@ function extractFieldInfo(name, schema) {
64343
64400
  }
64344
64401
  if (typeName === ZodTypeName.ZodUnion || typeName === ZodTypeName.ZodDiscriminatedUnion) {
64345
64402
  const def = inner._def;
64346
- const optionsValue = isRecord20(def) ? def.options : void 0;
64403
+ const optionsValue = isRecord21(def) ? def.options : void 0;
64347
64404
  const options = Array.isArray(optionsValue) ? optionsValue.filter(isZodTypeAny) : [];
64348
64405
  const optionTypes = options.map((opt) => {
64349
64406
  const { inner: optInner } = unwrapSchema(opt);
@@ -65508,7 +65565,7 @@ var SimpleCache = class {
65508
65565
  };
65509
65566
 
65510
65567
  // src/version.ts
65511
- var SDK_VERSION = "0.90.0";
65568
+ var SDK_VERSION = "0.90.1";
65512
65569
 
65513
65570
  // src/client/error.ts
65514
65571
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -73219,20 +73276,20 @@ var LEGACY_DATA_FIELDS = /* @__PURE__ */ new Set([
73219
73276
  "cardTitleOverride",
73220
73277
  "presentation"
73221
73278
  ]);
73222
- function isRecord21(value) {
73279
+ function isRecord22(value) {
73223
73280
  return typeof value === "object" && value !== null && !Array.isArray(value);
73224
73281
  }
73225
73282
  function hasMeaningfulValue(value) {
73226
73283
  if (value === void 0 || value === null) return false;
73227
73284
  if (typeof value === "string") return value.trim().length > 0;
73228
73285
  if (Array.isArray(value)) return value.length > 0;
73229
- if (isRecord21(value)) return Object.keys(value).length > 0;
73286
+ if (isRecord22(value)) return Object.keys(value).length > 0;
73230
73287
  return true;
73231
73288
  }
73232
73289
  function normalizeComparable(value) {
73233
73290
  if (value === void 0 || value === null) return null;
73234
73291
  if (Array.isArray(value)) return value.map(normalizeComparable);
73235
- if (!isRecord21(value)) return value;
73292
+ if (!isRecord22(value)) return value;
73236
73293
  const normalized = {};
73237
73294
  for (const key of Object.keys(value).sort()) {
73238
73295
  const normalizedValue = normalizeComparable(value[key]);
@@ -73252,7 +73309,7 @@ function slugFromPath(value) {
73252
73309
  }
73253
73310
  function legacySlugCandidates(legacy) {
73254
73311
  const candidates = /* @__PURE__ */ new Set();
73255
- const data = isRecord21(legacy.entry.data) ? legacy.entry.data : {};
73312
+ const data = isRecord22(legacy.entry.data) ? legacy.entry.data : {};
73256
73313
  for (const value of [
73257
73314
  legacy.entry.slug,
73258
73315
  data.slug,
@@ -73273,7 +73330,7 @@ async function readLegacyEventEntries(contentDir) {
73273
73330
  const entries = [];
73274
73331
  for (const filePath of files) {
73275
73332
  const raw = await readJsonFile(filePath);
73276
- if (!isRecord21(raw)) {
73333
+ if (!isRecord22(raw)) {
73277
73334
  entries.push({
73278
73335
  tag: "invalid",
73279
73336
  filePath,
@@ -73281,7 +73338,7 @@ async function readLegacyEventEntries(contentDir) {
73281
73338
  });
73282
73339
  continue;
73283
73340
  }
73284
- if (!isRecord21(raw.data)) {
73341
+ if (!isRecord22(raw.data)) {
73285
73342
  entries.push({
73286
73343
  tag: "invalid",
73287
73344
  filePath,
@@ -73419,7 +73476,7 @@ function mergeLegacyEventIntoCanonical(legacy, event) {
73419
73476
  conflicts.push(...blocksResult.fields);
73420
73477
  }
73421
73478
  if (hasMeaningfulValue(data.presentation)) {
73422
- if (!isRecord21(data.presentation)) {
73479
+ if (!isRecord22(data.presentation)) {
73423
73480
  return { tag: "unmappable", fields: ["data.presentation"] };
73424
73481
  }
73425
73482
  for (const [key, value] of Object.entries(data.presentation)) {