@riverbankcms/sdk 0.91.0 → 0.92.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 (104) hide show
  1. package/dist/{PreviewEditorSidebar-3TT47WCF.mjs → PreviewEditorSidebar-3CI5MKV3.mjs} +2 -2
  2. package/dist/{PreviewEditorUI-ORCLLUNZ.mjs → PreviewEditorUI-DKEP636I.mjs} +2 -2
  3. package/dist/SdkPreviewModeRuntime-BRGRDQFH.mjs +8 -0
  4. package/dist/_dts/api/src/bookingConfig.d.ts +13 -1
  5. package/dist/_dts/api/src/bookingOperations.d.ts +1 -0
  6. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +6 -6
  7. package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +4 -4
  8. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +6 -0
  9. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +32 -0
  10. package/dist/_dts/blocks/src/system/blocks/courses/shared/pricing.d.ts +12 -1
  11. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +12 -0
  12. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +4 -1
  13. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +44 -0
  14. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +7 -0
  15. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +8 -1
  16. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -1
  17. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +1 -0
  18. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +4 -0
  19. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +40 -0
  20. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.reserved-fields.d.ts +1 -1
  21. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +29 -0
  22. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +1 -0
  23. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/components.d.ts +6 -0
  24. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationWizard.d.ts +8 -0
  25. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +8 -0
  26. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +1 -0
  27. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +1 -1
  28. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +1 -0
  29. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +9 -0
  30. package/dist/_dts/content-model/src/entry-slots/types.d.ts +110 -2
  31. package/dist/_dts/core/src/branded.d.ts +3 -0
  32. package/dist/_dts/core/src/event-pricing.d.ts +18 -1
  33. package/dist/_dts/core/src/money-input.d.ts +34 -4
  34. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +70 -0
  35. package/dist/_dts/media-core/src/fileAssetCompatibility.d.ts +1 -1
  36. package/dist/_dts/media-core/src/filePersistence.d.ts +5 -1
  37. package/dist/_dts/media-core/src/fileStorage.d.ts +1 -0
  38. package/dist/_dts/media-core/src/videoPrep.d.ts +15 -6
  39. package/dist/_dts/media-core/src/videoSlotPolicy.d.ts +5 -5
  40. package/dist/_dts/sdk/src/cli/commands/push/execute/diff.d.ts +2 -0
  41. package/dist/_dts/sdk/src/cli/commands/push/execute/localMediaReporting.d.ts +23 -0
  42. package/dist/_dts/sdk/src/cli/commands/push/scopes/commandBackedDatedOfferingScope.d.ts +54 -0
  43. package/dist/_dts/sdk/src/cli/commands/push/scopes/mediaPrep.d.ts +7 -2
  44. package/dist/_dts/sdk/src/cli/commands/push/scopes/types.d.ts +6 -0
  45. package/dist/_dts/sdk/src/cli/media/local-sync.d.ts +35 -0
  46. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +23 -1
  47. package/dist/_dts/sdk/src/version.d.ts +1 -1
  48. package/dist/{chunk-AFPMCLS7.mjs → chunk-6D7PLF4M.mjs} +1 -1
  49. package/dist/{chunk-RQUZYSES.mjs → chunk-I6EOKV6B.mjs} +520 -40
  50. package/dist/{chunk-S3YHJWEU.mjs → chunk-LERKJM3E.mjs} +5 -5
  51. package/dist/{chunk-GDT2QGIL.mjs → chunk-UOMTCHZD.mjs} +1 -1
  52. package/dist/cli/index.mjs +552 -80
  53. package/dist/client/{accordion-AFX37652.mjs → accordion-BUDH2G3S.mjs} +2 -2
  54. package/dist/client/{bookingForm-32V5QCOW.mjs → bookingForm-NQMCELVB.mjs} +89 -14
  55. package/dist/client/bookings.mjs +243 -17
  56. package/dist/client/{carousel-TJGQJ7ER.mjs → carousel-ONCEW6IJ.mjs} +3 -3
  57. package/dist/client/{cart-JUU2JEW4.mjs → cart-V2TCK2GI.mjs} +7 -7
  58. package/dist/client/{checkout-RD6BTFX4.mjs → checkout-ZI7SWNCS.mjs} +7 -7
  59. package/dist/client/{chunk-FMZZHAIR.mjs → chunk-AUMRQ242.mjs} +52 -5
  60. package/dist/client/{chunk-PMNAV6LO.mjs → chunk-B5UC2D6X.mjs} +7 -6
  61. package/dist/client/{chunk-6RN62XBV.mjs → chunk-ERQDHUS2.mjs} +1 -1
  62. package/dist/client/{chunk-RWYFG625.mjs → chunk-GH6IIOOE.mjs} +30 -2
  63. package/dist/client/{chunk-C4LP6BPG.mjs → chunk-HQWIJLYN.mjs} +1 -1
  64. package/dist/client/{chunk-RMOFBBNA.mjs → chunk-JXY6NHG6.mjs} +6 -6
  65. package/dist/client/{chunk-6QZIBNGV.mjs → chunk-KXYEKEV6.mjs} +154 -16
  66. package/dist/client/{chunk-E6VIWZUG.mjs → chunk-N2WJPTF7.mjs} +3 -3
  67. package/dist/client/{chunk-ISAUXU5R.mjs → chunk-QQNVQ62W.mjs} +1 -1
  68. package/dist/client/{chunk-MLBNVN4H.mjs → chunk-R3CZQLXF.mjs} +67 -4
  69. package/dist/client/{chunk-WHZQDPBZ.mjs → chunk-TNGL2WJF.mjs} +1 -0
  70. package/dist/client/{chunk-CKXEUWWA.mjs → chunk-ZJDBOLX7.mjs} +3 -3
  71. package/dist/client/client.mjs +515 -38
  72. package/dist/client/{courseRegistration-X63QAIVV.mjs → courseRegistration-JPWAQ6KM.mjs} +111 -11
  73. package/dist/client/{eventCalendar-5T24GCZL.mjs → eventCalendar-QDOCHBBV.mjs} +9 -9
  74. package/dist/client/{eventCombined-AZVTF22X.mjs → eventCombined-ZS2CXSIE.mjs} +9 -9
  75. package/dist/client/{eventDetails-7GPFNLGF.mjs → eventDetails-5LOBMPLN.mjs} +9 -9
  76. package/dist/client/{eventListing-QEUMTMUM.mjs → eventListing-SBGY4I3L.mjs} +9 -9
  77. package/dist/client/{eventRegistration-P2EDKCQZ.mjs → eventRegistration-XGPIU3Z2.mjs} +9 -9
  78. package/dist/client/{form-NUJ7H4IN.mjs → form-R7D4LZWW.mjs} +3 -3
  79. package/dist/client/{headerSection-JB7LECPL.mjs → headerSection-RRLYUCGC.mjs} +3 -3
  80. package/dist/client/hooks.mjs +22 -2
  81. package/dist/client/{locationMap-UEYWUCSW.mjs → locationMap-35ZJMRBZ.mjs} +3 -3
  82. package/dist/client/{newsletterForm-S2YZQ2X7.mjs → newsletterForm-MJ2VCFUT.mjs} +3 -3
  83. package/dist/client/{productDetail-H5MADGG7.mjs → productDetail-2O7YQNBX.mjs} +7 -7
  84. package/dist/client/{productList-DK7YON7H.mjs → productList-FDP5BH7W.mjs} +7 -7
  85. package/dist/client/rendering/client.mjs +495 -36
  86. package/dist/client/rendering/islands.mjs +19 -19
  87. package/dist/client/rendering.mjs +514 -37
  88. package/dist/client/{shop-6PA7RDRJ.mjs → shop-BGYJ3LDT.mjs} +7 -7
  89. package/dist/preview-next/client/runtime.mjs +3 -3
  90. package/dist/{sdk-runtime-JP5347OB.mjs → sdk-runtime-B3TFXRXZ.mjs} +4 -4
  91. package/dist/server/components.mjs +166 -7
  92. package/dist/server/config-validation.mjs +23 -2
  93. package/dist/server/config.mjs +23 -2
  94. package/dist/server/data.mjs +22 -2
  95. package/dist/server/index.mjs +1 -1
  96. package/dist/server/next.mjs +167 -8
  97. package/dist/server/page-converter.mjs +19 -2
  98. package/dist/server/prebuild.mjs +1 -1
  99. package/dist/server/rendering/server.mjs +166 -7
  100. package/dist/server/rendering.mjs +166 -7
  101. package/dist/server/routing.mjs +29 -5
  102. package/dist/server/server.mjs +23 -3
  103. package/package.json +1 -1
  104. package/dist/SdkPreviewModeRuntime-GMCDQPZZ.mjs +0 -8
@@ -6481,6 +6481,8 @@ function err(error) {
6481
6481
 
6482
6482
  // ../core/src/branded.ts
6483
6483
  var unsafeAsMediaAssetId = (id) => id;
6484
+ var unsafeAsStorageBucketName = (value) => value;
6485
+ var unsafeAsStoragePath = (value) => value;
6484
6486
 
6485
6487
  // ../core/src/assert-never.ts
6486
6488
  function assertNever(value, message = "Unexpected variant") {
@@ -6535,6 +6537,7 @@ function publicEventPricingType(pricing) {
6535
6537
  return "free";
6536
6538
  case "single_paid":
6537
6539
  case "ticket_types":
6540
+ case "sliding_scale":
6538
6541
  case "course":
6539
6542
  return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
6540
6543
  case "external":
@@ -6547,6 +6550,7 @@ function publicEventPricingCurrency(pricing) {
6547
6550
  case "free_registration":
6548
6551
  case "single_paid":
6549
6552
  case "ticket_types":
6553
+ case "sliding_scale":
6550
6554
  return pricing.currency;
6551
6555
  case "course":
6552
6556
  return pricing.display.display.currency;
@@ -6578,6 +6582,8 @@ function formatCoursePriceDisplayLabel(display, options) {
6578
6582
  return `Course (${formatCurrencyAmount(display.amount, display.currency, options)})`;
6579
6583
  case "from":
6580
6584
  return `Course (From ${formatCurrencyAmount(display.amount, display.currency, options)})`;
6585
+ case "range":
6586
+ return `Course (${formatCurrencyAmount(display.minAmount, display.currency, options)} - ${formatCurrencyAmount(display.maxAmount, display.currency, options)})`;
6581
6587
  default:
6582
6588
  return assertNever(display);
6583
6589
  }
@@ -7087,6 +7093,77 @@ var linkSchema = z3.union([
7087
7093
  // ../blocks/src/system/manifest/schema.ts
7088
7094
  import { z as z5 } from "zod";
7089
7095
 
7096
+ // ../media-core/src/fileSafety.ts
7097
+ var CONTROL_CHARACTER_PATTERN = /[\u0000-\u001f\u007f]/u;
7098
+ function containsUnsafePathSegmentCharacter(value) {
7099
+ return value.includes("/") || value.includes("\\") || CONTROL_CHARACTER_PATTERN.test(value);
7100
+ }
7101
+ function isReservedPathSegment(value) {
7102
+ return value === "." || value === "..";
7103
+ }
7104
+ function isUnsafePathSegment(segment) {
7105
+ return segment.trim().length === 0 || segment !== segment.trim() || isReservedPathSegment(segment) || containsUnsafePathSegmentCharacter(segment);
7106
+ }
7107
+
7108
+ // ../media-core/src/fileStorage.ts
7109
+ var FILE_STORAGE_BUCKETS = {
7110
+ publicSite: unsafeAsStorageBucketName("media"),
7111
+ privateSite: unsafeAsStorageBucketName("site-files-private"),
7112
+ temporary: unsafeAsStorageBucketName("temp-uploads")
7113
+ };
7114
+ var PUBLIC_SITE_FILE_STORAGE_BUCKETS = [
7115
+ FILE_STORAGE_BUCKETS.publicSite,
7116
+ // Existing site logo and font uploads predate the unified file buckets.
7117
+ unsafeAsStorageBucketName("site-assets"),
7118
+ unsafeAsStorageBucketName("site-fonts")
7119
+ ];
7120
+ var PRIVATE_SITE_FILE_BUCKET_MIME_TYPES = [
7121
+ "application/pdf",
7122
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
7123
+ "text/plain",
7124
+ "application/rtf",
7125
+ "text/rtf",
7126
+ "image/jpeg",
7127
+ "image/png",
7128
+ "image/webp",
7129
+ "image/gif",
7130
+ "image/avif",
7131
+ "image/heic",
7132
+ "image/heif",
7133
+ "image/svg+xml",
7134
+ "text/csv",
7135
+ "application/csv",
7136
+ "application/vnd.ms-excel",
7137
+ "application/zip",
7138
+ "application/x-zip-compressed",
7139
+ "audio/mpeg",
7140
+ "audio/mp4",
7141
+ "audio/wav",
7142
+ "audio/x-wav",
7143
+ "audio/ogg",
7144
+ "audio/webm",
7145
+ "audio/flac",
7146
+ "video/mp4",
7147
+ "video/webm",
7148
+ "video/quicktime"
7149
+ ];
7150
+ var TEMP_UPLOAD_BUCKET_MIME_TYPES = [
7151
+ ...PRIVATE_SITE_FILE_BUCKET_MIME_TYPES,
7152
+ "font/woff2",
7153
+ "application/font-woff2",
7154
+ "application/x-font-woff2",
7155
+ "application/octet-stream"
7156
+ ];
7157
+ function parseStoragePath(value) {
7158
+ return joinStoragePathSegments(value.split("/"));
7159
+ }
7160
+ function joinStoragePathSegments(segments) {
7161
+ if (segments.some(isUnsafePathSegment)) {
7162
+ return err("unsafe-path-segment");
7163
+ }
7164
+ return ok(unsafeAsStoragePath(segments.join("/")));
7165
+ }
7166
+
7090
7167
  // ../media-core/src/typeGuards.ts
7091
7168
  function isRecord(value) {
7092
7169
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
@@ -7103,10 +7180,10 @@ var RELATIVE_STORAGE_PATH_PREFIXES = [
7103
7180
  "imports/"
7104
7181
  ];
7105
7182
  function isRelativeDirectImageStoragePath(storagePath) {
7106
- return RELATIVE_STORAGE_PATH_PREFIXES.some((prefix) => storagePath.startsWith(prefix));
7183
+ return RELATIVE_STORAGE_PATH_PREFIXES.some((prefix) => storagePath.startsWith(prefix)) && parseStoragePath(storagePath).ok;
7107
7184
  }
7108
7185
  function isSiteScopedDirectImageStoragePath(storagePath) {
7109
- return storagePath.startsWith("sites/");
7186
+ return storagePath.startsWith("sites/") && parseStoragePath(storagePath).ok;
7110
7187
  }
7111
7188
  function encodeStoragePath(storagePath) {
7112
7189
  return storagePath.split("/").map((segment) => encodeURIComponent(segment)).join("/");
@@ -9579,6 +9656,21 @@ function fieldPlanToZod(plan, options = {}) {
9579
9656
  }
9580
9657
  });
9581
9658
  }
9659
+ function fieldPresenceForPlan(plan) {
9660
+ return plan.required ? { kind: "required" } : { kind: "optional" };
9661
+ }
9662
+ function fieldPlanToObjectPropertyZod(plan, options = {}) {
9663
+ const schema = fieldPlanToZod(plan, options);
9664
+ const presence = fieldPresenceForPlan(plan);
9665
+ switch (presence.kind) {
9666
+ case "required":
9667
+ return schema;
9668
+ case "optional":
9669
+ return schema.optional();
9670
+ default:
9671
+ return assertNever2(presence);
9672
+ }
9673
+ }
9582
9674
  function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
9583
9675
  const message = fieldIssueToMessage(validationIssue);
9584
9676
  const path = relativeZodIssuePath(validationIssue.path, rootPath);
@@ -9791,7 +9883,7 @@ function createManifestValidator(manifestOrFields, options = {}) {
9791
9883
  function deriveContentZodFromPlans(plans, options) {
9792
9884
  const shape = {};
9793
9885
  for (const plan of plans) {
9794
- shape[plan.fieldId] = fieldPlanToZod(plan, options);
9886
+ shape[plan.fieldId] = fieldPlanToObjectPropertyZod(plan, options);
9795
9887
  }
9796
9888
  return z7.object(shape).catchall(z7.unknown()).passthrough();
9797
9889
  }
@@ -32900,9 +32992,12 @@ var coursePricingOptionSchema = z45.object({
32900
32992
  });
32901
32993
  var coursePricingSchema = z45.object({
32902
32994
  bookingRequirement: z45.enum(["none", "required"]),
32903
- pricingStrategy: z45.enum(["free", "single", "tiered"]),
32995
+ pricingStrategy: z45.enum(["free", "single", "tiered", "sliding_scale"]),
32904
32996
  currency: z45.string(),
32905
32997
  singlePriceAmount: z45.number().nullable(),
32998
+ slidingMinAmount: z45.number().nullable().optional(),
32999
+ slidingMaxAmount: z45.number().nullable().optional(),
33000
+ slidingSuggestedAmount: z45.number().nullable().optional(),
32906
33001
  paymentTerms: blockBookingPaymentTermsSchema,
32907
33002
  options: z45.array(coursePricingOptionSchema)
32908
33003
  });
@@ -33056,6 +33151,19 @@ var publicEventPricingSchema = z46.discriminatedUnion("kind", [
33056
33151
  ticketTypes: z46.array(publicEventTicketTypeSchema),
33057
33152
  display: publicEventTicketTypePriceDisplaySchema
33058
33153
  }),
33154
+ z46.object({
33155
+ kind: z46.literal("sliding_scale"),
33156
+ minAmount: z46.number(),
33157
+ maxAmount: z46.number(),
33158
+ suggestedAmount: z46.number().nullable(),
33159
+ currency: z46.string(),
33160
+ display: z46.object({
33161
+ kind: z46.literal("range"),
33162
+ minAmount: z46.number(),
33163
+ maxAmount: z46.number(),
33164
+ currency: z46.string()
33165
+ })
33166
+ }),
33059
33167
  z46.object({
33060
33168
  kind: z46.literal("course"),
33061
33169
  display: z46.object({ kind: z46.literal("course"), display: publicCoursePriceDisplaySchema })
@@ -33472,7 +33580,7 @@ function isRecord6(value) {
33472
33580
  }
33473
33581
  function isPublicEventPricing(value) {
33474
33582
  if (!isRecord6(value) || typeof value.kind !== "string") return false;
33475
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
33583
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "sliding_scale" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
33476
33584
  }
33477
33585
  function isPublicEventTicketType(value) {
33478
33586
  return isRecord6(value) && typeof value.id === "string";
@@ -34089,7 +34197,9 @@ function getSelectableCoursePricingOptionsForNow(course, now) {
34089
34197
  return left.name.localeCompare(right.name);
34090
34198
  });
34091
34199
  }
34092
- function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {}) {
34200
+ function resolveCoursePricingState(course, selectedPricingOptionId, selectedSlidingAmountOrNowInput, nowInput = {}) {
34201
+ const selectedSlidingAmount = typeof selectedSlidingAmountOrNowInput === "number" || selectedSlidingAmountOrNowInput === null ? selectedSlidingAmountOrNowInput : null;
34202
+ const effectiveNowInput = typeof selectedSlidingAmountOrNowInput === "object" && selectedSlidingAmountOrNowInput !== null ? selectedSlidingAmountOrNowInput : nowInput;
34093
34203
  const currency = course.pricing?.currency ?? course.currency;
34094
34204
  if (!course.pricing) {
34095
34205
  const legacyAmount = course.priceCents ?? 0;
@@ -34099,6 +34209,8 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
34099
34209
  selectableOptions: [],
34100
34210
  requiresSelection: false,
34101
34211
  selectedOption: null,
34212
+ slidingScale: null,
34213
+ selectedSlidingAmount: null,
34102
34214
  selectedPriceAmount: legacyAmount,
34103
34215
  selectedRequiresPayment: legacyAmount > 0,
34104
34216
  hasPaidSelection: legacyAmount > 0,
@@ -34113,6 +34225,8 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
34113
34225
  selectableOptions: [],
34114
34226
  requiresSelection: false,
34115
34227
  selectedOption: null,
34228
+ slidingScale: null,
34229
+ selectedSlidingAmount: null,
34116
34230
  selectedPriceAmount: 0,
34117
34231
  selectedRequiresPayment: false,
34118
34232
  hasPaidSelection: false,
@@ -34126,6 +34240,8 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
34126
34240
  selectableOptions: [],
34127
34241
  requiresSelection: false,
34128
34242
  selectedOption: null,
34243
+ slidingScale: null,
34244
+ selectedSlidingAmount: null,
34129
34245
  selectedPriceAmount: amount,
34130
34246
  selectedRequiresPayment: amount > 0,
34131
34247
  hasPaidSelection: amount > 0,
@@ -34135,7 +34251,7 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
34135
34251
  case "tiered": {
34136
34252
  const selectableOptions = getSelectableCoursePricingOptionsForNow(
34137
34253
  course,
34138
- resolvePlanningDateInput(nowInput)
34254
+ resolvePlanningDateInput(effectiveNowInput)
34139
34255
  );
34140
34256
  const selectedOption = (selectedPricingOptionId ? selectableOptions.find((option) => option.id === selectedPricingOptionId) : null) ?? (selectableOptions.length === 1 ? selectableOptions[0] ?? null : null);
34141
34257
  const lowestAmount = selectableOptions.reduce((lowest, option) => {
@@ -34151,12 +34267,51 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
34151
34267
  selectableOptions,
34152
34268
  requiresSelection: selectableOptions.length > 1,
34153
34269
  selectedOption,
34270
+ slidingScale: null,
34271
+ selectedSlidingAmount: null,
34154
34272
  selectedPriceAmount: selectedOption?.priceAmount ?? null,
34155
34273
  selectedRequiresPayment: (selectedOption?.priceAmount ?? 0) > 0,
34156
34274
  hasPaidSelection: selectableOptions.some((option) => option.priceAmount > 0),
34157
34275
  hasFreeSelection: selectableOptions.some((option) => option.priceAmount === 0)
34158
34276
  };
34159
34277
  }
34278
+ case "sliding_scale": {
34279
+ const minAmount = course.pricing.slidingMinAmount ?? null;
34280
+ const maxAmount = course.pricing.slidingMaxAmount ?? null;
34281
+ if (minAmount === null || maxAmount === null || minAmount < 0 || maxAmount < minAmount) {
34282
+ return {
34283
+ currency,
34284
+ display: { kind: "unavailable", currency },
34285
+ selectableOptions: [],
34286
+ requiresSelection: true,
34287
+ selectedOption: null,
34288
+ slidingScale: null,
34289
+ selectedSlidingAmount: null,
34290
+ selectedPriceAmount: null,
34291
+ selectedRequiresPayment: false,
34292
+ hasPaidSelection: false,
34293
+ hasFreeSelection: false
34294
+ };
34295
+ }
34296
+ const normalizedSelectedAmount = typeof selectedSlidingAmount === "number" && Number.isFinite(selectedSlidingAmount) ? selectedSlidingAmount : null;
34297
+ return {
34298
+ currency,
34299
+ display: { kind: "range", minAmount, maxAmount, currency },
34300
+ selectableOptions: [],
34301
+ requiresSelection: normalizedSelectedAmount === null,
34302
+ selectedOption: null,
34303
+ slidingScale: {
34304
+ minAmount,
34305
+ maxAmount,
34306
+ suggestedAmount: course.pricing.slidingSuggestedAmount ?? null
34307
+ },
34308
+ selectedSlidingAmount: normalizedSelectedAmount,
34309
+ selectedPriceAmount: normalizedSelectedAmount,
34310
+ selectedRequiresPayment: (normalizedSelectedAmount ?? 0) > 0,
34311
+ hasPaidSelection: maxAmount > 0,
34312
+ hasFreeSelection: minAmount === 0
34313
+ };
34314
+ }
34160
34315
  }
34161
34316
  }
34162
34317
  function formatCoursePriceDisplay(display, locale) {
@@ -46636,6 +46791,7 @@ var bookingServiceSchema = z66.object({
46636
46791
  title: z66.string(),
46637
46792
  description: z66.string().nullable().optional().transform((value) => value ?? void 0),
46638
46793
  durationMinutes: z66.number().optional(),
46794
+ pricing: z66.custom().optional(),
46639
46795
  priceAmount: z66.number().nullable().optional(),
46640
46796
  priceCurrency: z66.string().nullable().optional(),
46641
46797
  paymentTerms: blockBookingPaymentTermsSchema.optional(),
@@ -67808,6 +67964,7 @@ var CANONICAL_REFUND_CONFLICT_CODES = [
67808
67964
  ];
67809
67965
  var CANONICAL_REFUND_PLANNER_ERROR_CODES = [
67810
67966
  ...CANONICAL_REFUND_CONFLICT_CODES,
67967
+ "invalid_amount",
67811
67968
  "amount_exceeds_remaining",
67812
67969
  "pass_revoke_requires_full_refund",
67813
67970
  "refund_failed"
@@ -67834,6 +67991,7 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
67834
67991
  // ../api/src/bookingRefundOutcomes.ts
67835
67992
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
67836
67993
  "missing_amount",
67994
+ "invalid_amount",
67837
67995
  "amount_exceeds_remaining",
67838
67996
  "credit_refunds_disabled",
67839
67997
  "missing_credit_customer",
@@ -67848,6 +68006,7 @@ var EVENT_ATTENDEE_REFUND_INVALID_CODES = [
67848
68006
  var MANAGED_PRODUCT_REFUND_INVALID_CODES = [
67849
68007
  "credit_refunds_disabled",
67850
68008
  "not_refundable",
68009
+ "invalid_amount",
67851
68010
  "amount_exceeds_remaining"
67852
68011
  ];
67853
68012
  var CUSTOMER_PASS_REFUND_INVALID_CODES = [
@@ -70879,7 +71038,7 @@ var CircuitOpenError = class extends Error {
70879
71038
  };
70880
71039
 
70881
71040
  // src/version.ts
70882
- var SDK_VERSION = "0.91.0";
71041
+ var SDK_VERSION = "0.92.0";
70883
71042
 
70884
71043
  // src/next/content-load-failure.ts
70885
71044
  var SdkContentLoadError = RiverbankContentLoadError;
@@ -101,6 +101,7 @@ function publicEventPricingType(pricing) {
101
101
  return "free";
102
102
  case "single_paid":
103
103
  case "ticket_types":
104
+ case "sliding_scale":
104
105
  case "course":
105
106
  return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
106
107
  case "external":
@@ -19282,9 +19283,12 @@ var coursePricingOptionSchema = z35.object({
19282
19283
  });
19283
19284
  var coursePricingSchema = z35.object({
19284
19285
  bookingRequirement: z35.enum(["none", "required"]),
19285
- pricingStrategy: z35.enum(["free", "single", "tiered"]),
19286
+ pricingStrategy: z35.enum(["free", "single", "tiered", "sliding_scale"]),
19286
19287
  currency: z35.string(),
19287
19288
  singlePriceAmount: z35.number().nullable(),
19289
+ slidingMinAmount: z35.number().nullable().optional(),
19290
+ slidingMaxAmount: z35.number().nullable().optional(),
19291
+ slidingSuggestedAmount: z35.number().nullable().optional(),
19288
19292
  paymentTerms: blockBookingPaymentTermsSchema,
19289
19293
  options: z35.array(coursePricingOptionSchema)
19290
19294
  });
@@ -19438,6 +19442,19 @@ var publicEventPricingSchema = z36.discriminatedUnion("kind", [
19438
19442
  ticketTypes: z36.array(publicEventTicketTypeSchema),
19439
19443
  display: publicEventTicketTypePriceDisplaySchema
19440
19444
  }),
19445
+ z36.object({
19446
+ kind: z36.literal("sliding_scale"),
19447
+ minAmount: z36.number(),
19448
+ maxAmount: z36.number(),
19449
+ suggestedAmount: z36.number().nullable(),
19450
+ currency: z36.string(),
19451
+ display: z36.object({
19452
+ kind: z36.literal("range"),
19453
+ minAmount: z36.number(),
19454
+ maxAmount: z36.number(),
19455
+ currency: z36.string()
19456
+ })
19457
+ }),
19441
19458
  z36.object({
19442
19459
  kind: z36.literal("course"),
19443
19460
  display: z36.object({ kind: z36.literal("course"), display: publicCoursePriceDisplaySchema })
@@ -19854,7 +19871,7 @@ function isRecord3(value) {
19854
19871
  }
19855
19872
  function isPublicEventPricing(value) {
19856
19873
  if (!isRecord3(value) || typeof value.kind !== "string") return false;
19857
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
19874
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "sliding_scale" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
19858
19875
  }
19859
19876
  function isPublicEventTicketType(value) {
19860
19877
  return isRecord3(value) && typeof value.id === "string";
@@ -4,7 +4,7 @@ import * as path from "path";
4
4
  import * as crypto from "crypto";
5
5
 
6
6
  // src/version.ts
7
- var SDK_VERSION = "0.91.0";
7
+ var SDK_VERSION = "0.92.0";
8
8
 
9
9
  // src/constants.ts
10
10
  var PREBUILD_PAGE_SIZE = 50;