@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
@@ -1,15 +1,15 @@
1
- import { mountShopBlockIsland, ShopClient } from './chunk-RMOFBBNA.mjs';
2
- import './chunk-6RN62XBV.mjs';
3
- import './chunk-PMNAV6LO.mjs';
1
+ import { mountShopBlockIsland, ShopClient } from './chunk-JXY6NHG6.mjs';
2
+ import './chunk-ERQDHUS2.mjs';
3
+ import './chunk-B5UC2D6X.mjs';
4
4
  import './chunk-6N7YRNYU.mjs';
5
5
  import './chunk-L4J5Y62O.mjs';
6
- import './chunk-CKXEUWWA.mjs';
6
+ import './chunk-ZJDBOLX7.mjs';
7
7
  import './chunk-3DCJ45Z2.mjs';
8
8
  import './chunk-WBQG7VJA.mjs';
9
- import './chunk-WHZQDPBZ.mjs';
9
+ import './chunk-TNGL2WJF.mjs';
10
10
  import './chunk-N7PBWBWQ.mjs';
11
- import { defineIslandPropsDecoder } from './chunk-MLBNVN4H.mjs';
12
- import './chunk-RWYFG625.mjs';
11
+ import { defineIslandPropsDecoder } from './chunk-R3CZQLXF.mjs';
12
+ import './chunk-GH6IIOOE.mjs';
13
13
 
14
14
  // src/rendering/islands/enhancers/shop.tsx
15
15
  var decode = defineIslandPropsDecoder("shop");
@@ -6,19 +6,19 @@ import React from 'react';
6
6
  import { jsx } from 'react/jsx-runtime';
7
7
 
8
8
  var LazySdkPreviewMode = React.lazy(async () => {
9
- const mod = await import('../../SdkPreviewModeRuntime-GMCDQPZZ.mjs');
9
+ const mod = await import('../../SdkPreviewModeRuntime-BRGRDQFH.mjs');
10
10
  return {
11
11
  default: mod.SdkPreviewModeRuntime
12
12
  };
13
13
  });
14
14
  var LazyPreviewShell = React.lazy(async () => {
15
- const mod = await import('../../sdk-runtime-JP5347OB.mjs');
15
+ const mod = await import('../../sdk-runtime-B3TFXRXZ.mjs');
16
16
  return {
17
17
  default: mod.PreviewShell
18
18
  };
19
19
  });
20
20
  var LazyPreviewShellLayout = React.lazy(async () => {
21
- const mod = await import('../../sdk-runtime-JP5347OB.mjs');
21
+ const mod = await import('../../sdk-runtime-B3TFXRXZ.mjs');
22
22
  return {
23
23
  default: mod.PreviewShellLayout
24
24
  };
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- export { PreviewShell, PreviewShellLayout, SdkPreviewModeRuntime as SdkPreviewMode } from './chunk-S3YHJWEU.mjs';
2
+ export { PreviewShell, PreviewShellLayout, SdkPreviewModeRuntime as SdkPreviewMode } from './chunk-LERKJM3E.mjs';
3
3
  export { PreviewLayoutProvider, PreviewQueryProvider, createPreviewQueryClient, useOptionalPreviewLayout, usePreviewLayout } from './chunk-U5YM4AWE.mjs';
4
- import './chunk-GDT2QGIL.mjs';
5
- import './chunk-AFPMCLS7.mjs';
6
- import './chunk-RQUZYSES.mjs';
4
+ import './chunk-UOMTCHZD.mjs';
5
+ import './chunk-6D7PLF4M.mjs';
6
+ import './chunk-I6EOKV6B.mjs';
7
7
  import './chunk-ZA2S7H34.mjs';
8
8
  import './chunk-R7POPVJR.mjs';
@@ -126,6 +126,8 @@ function err(error) {
126
126
 
127
127
  // ../core/src/branded.ts
128
128
  var unsafeAsMediaAssetId = (id) => id;
129
+ var unsafeAsStorageBucketName = (value) => value;
130
+ var unsafeAsStoragePath = (value) => value;
129
131
 
130
132
  // ../core/src/assert-never.ts
131
133
  function assertNever(value, message = "Unexpected variant") {
@@ -180,6 +182,7 @@ function publicEventPricingType(pricing) {
180
182
  return "free";
181
183
  case "single_paid":
182
184
  case "ticket_types":
185
+ case "sliding_scale":
183
186
  case "course":
184
187
  return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
185
188
  case "external":
@@ -192,6 +195,7 @@ function publicEventPricingCurrency(pricing) {
192
195
  case "free_registration":
193
196
  case "single_paid":
194
197
  case "ticket_types":
198
+ case "sliding_scale":
195
199
  return pricing.currency;
196
200
  case "course":
197
201
  return pricing.display.display.currency;
@@ -223,6 +227,8 @@ function formatCoursePriceDisplayLabel(display, options) {
223
227
  return `Course (${formatCurrencyAmount(display.amount, display.currency, options)})`;
224
228
  case "from":
225
229
  return `Course (From ${formatCurrencyAmount(display.amount, display.currency, options)})`;
230
+ case "range":
231
+ return `Course (${formatCurrencyAmount(display.minAmount, display.currency, options)} - ${formatCurrencyAmount(display.maxAmount, display.currency, options)})`;
226
232
  default:
227
233
  return assertNever(display);
228
234
  }
@@ -514,6 +520,77 @@ function resolvePlanningDateInput(input = {}) {
514
520
  return resolvePlanningNowDate(input);
515
521
  }
516
522
 
523
+ // ../media-core/src/fileSafety.ts
524
+ var CONTROL_CHARACTER_PATTERN = /[\u0000-\u001f\u007f]/u;
525
+ function containsUnsafePathSegmentCharacter(value) {
526
+ return value.includes("/") || value.includes("\\") || CONTROL_CHARACTER_PATTERN.test(value);
527
+ }
528
+ function isReservedPathSegment(value) {
529
+ return value === "." || value === "..";
530
+ }
531
+ function isUnsafePathSegment(segment) {
532
+ return segment.trim().length === 0 || segment !== segment.trim() || isReservedPathSegment(segment) || containsUnsafePathSegmentCharacter(segment);
533
+ }
534
+
535
+ // ../media-core/src/fileStorage.ts
536
+ var FILE_STORAGE_BUCKETS = {
537
+ publicSite: unsafeAsStorageBucketName("media"),
538
+ privateSite: unsafeAsStorageBucketName("site-files-private"),
539
+ temporary: unsafeAsStorageBucketName("temp-uploads")
540
+ };
541
+ var PUBLIC_SITE_FILE_STORAGE_BUCKETS = [
542
+ FILE_STORAGE_BUCKETS.publicSite,
543
+ // Existing site logo and font uploads predate the unified file buckets.
544
+ unsafeAsStorageBucketName("site-assets"),
545
+ unsafeAsStorageBucketName("site-fonts")
546
+ ];
547
+ var PRIVATE_SITE_FILE_BUCKET_MIME_TYPES = [
548
+ "application/pdf",
549
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
550
+ "text/plain",
551
+ "application/rtf",
552
+ "text/rtf",
553
+ "image/jpeg",
554
+ "image/png",
555
+ "image/webp",
556
+ "image/gif",
557
+ "image/avif",
558
+ "image/heic",
559
+ "image/heif",
560
+ "image/svg+xml",
561
+ "text/csv",
562
+ "application/csv",
563
+ "application/vnd.ms-excel",
564
+ "application/zip",
565
+ "application/x-zip-compressed",
566
+ "audio/mpeg",
567
+ "audio/mp4",
568
+ "audio/wav",
569
+ "audio/x-wav",
570
+ "audio/ogg",
571
+ "audio/webm",
572
+ "audio/flac",
573
+ "video/mp4",
574
+ "video/webm",
575
+ "video/quicktime"
576
+ ];
577
+ var TEMP_UPLOAD_BUCKET_MIME_TYPES = [
578
+ ...PRIVATE_SITE_FILE_BUCKET_MIME_TYPES,
579
+ "font/woff2",
580
+ "application/font-woff2",
581
+ "application/x-font-woff2",
582
+ "application/octet-stream"
583
+ ];
584
+ function parseStoragePath(value) {
585
+ return joinStoragePathSegments(value.split("/"));
586
+ }
587
+ function joinStoragePathSegments(segments) {
588
+ if (segments.some(isUnsafePathSegment)) {
589
+ return err("unsafe-path-segment");
590
+ }
591
+ return ok(unsafeAsStoragePath(segments.join("/")));
592
+ }
593
+
517
594
  // ../media-core/src/typeGuards.ts
518
595
  function isRecord(value) {
519
596
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
@@ -530,10 +607,10 @@ var RELATIVE_STORAGE_PATH_PREFIXES = [
530
607
  "imports/"
531
608
  ];
532
609
  function isRelativeDirectImageStoragePath(storagePath) {
533
- return RELATIVE_STORAGE_PATH_PREFIXES.some((prefix) => storagePath.startsWith(prefix));
610
+ return RELATIVE_STORAGE_PATH_PREFIXES.some((prefix) => storagePath.startsWith(prefix)) && parseStoragePath(storagePath).ok;
534
611
  }
535
612
  function isSiteScopedDirectImageStoragePath(storagePath) {
536
- return storagePath.startsWith("sites/");
613
+ return storagePath.startsWith("sites/") && parseStoragePath(storagePath).ok;
537
614
  }
538
615
  function encodeStoragePath(storagePath) {
539
616
  return storagePath.split("/").map((segment) => encodeURIComponent(segment)).join("/");
@@ -3006,6 +3083,21 @@ function fieldPlanToZod(plan, options = {}) {
3006
3083
  }
3007
3084
  });
3008
3085
  }
3086
+ function fieldPresenceForPlan(plan) {
3087
+ return plan.required ? { kind: "required" } : { kind: "optional" };
3088
+ }
3089
+ function fieldPlanToObjectPropertyZod(plan, options = {}) {
3090
+ const schema = fieldPlanToZod(plan, options);
3091
+ const presence = fieldPresenceForPlan(plan);
3092
+ switch (presence.kind) {
3093
+ case "required":
3094
+ return schema;
3095
+ case "optional":
3096
+ return schema.optional();
3097
+ default:
3098
+ return assertNever2(presence);
3099
+ }
3100
+ }
3009
3101
  function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
3010
3102
  const message = fieldIssueToMessage(validationIssue);
3011
3103
  const path = relativeZodIssuePath(validationIssue.path, rootPath);
@@ -3218,7 +3310,7 @@ function createManifestValidator(manifestOrFields, options = {}) {
3218
3310
  function deriveContentZodFromPlans(plans, options) {
3219
3311
  const shape = {};
3220
3312
  for (const plan of plans) {
3221
- shape[plan.fieldId] = fieldPlanToZod(plan, options);
3313
+ shape[plan.fieldId] = fieldPlanToObjectPropertyZod(plan, options);
3222
3314
  }
3223
3315
  return z5.object(shape).catchall(z5.unknown()).passthrough();
3224
3316
  }
@@ -26327,9 +26419,12 @@ var coursePricingOptionSchema = z43.object({
26327
26419
  });
26328
26420
  var coursePricingSchema = z43.object({
26329
26421
  bookingRequirement: z43.enum(["none", "required"]),
26330
- pricingStrategy: z43.enum(["free", "single", "tiered"]),
26422
+ pricingStrategy: z43.enum(["free", "single", "tiered", "sliding_scale"]),
26331
26423
  currency: z43.string(),
26332
26424
  singlePriceAmount: z43.number().nullable(),
26425
+ slidingMinAmount: z43.number().nullable().optional(),
26426
+ slidingMaxAmount: z43.number().nullable().optional(),
26427
+ slidingSuggestedAmount: z43.number().nullable().optional(),
26333
26428
  paymentTerms: blockBookingPaymentTermsSchema,
26334
26429
  options: z43.array(coursePricingOptionSchema)
26335
26430
  });
@@ -26483,6 +26578,19 @@ var publicEventPricingSchema = z44.discriminatedUnion("kind", [
26483
26578
  ticketTypes: z44.array(publicEventTicketTypeSchema),
26484
26579
  display: publicEventTicketTypePriceDisplaySchema
26485
26580
  }),
26581
+ z44.object({
26582
+ kind: z44.literal("sliding_scale"),
26583
+ minAmount: z44.number(),
26584
+ maxAmount: z44.number(),
26585
+ suggestedAmount: z44.number().nullable(),
26586
+ currency: z44.string(),
26587
+ display: z44.object({
26588
+ kind: z44.literal("range"),
26589
+ minAmount: z44.number(),
26590
+ maxAmount: z44.number(),
26591
+ currency: z44.string()
26592
+ })
26593
+ }),
26486
26594
  z44.object({
26487
26595
  kind: z44.literal("course"),
26488
26596
  display: z44.object({ kind: z44.literal("course"), display: publicCoursePriceDisplaySchema })
@@ -26899,7 +27007,7 @@ function isRecord6(value) {
26899
27007
  }
26900
27008
  function isPublicEventPricing(value) {
26901
27009
  if (!isRecord6(value) || typeof value.kind !== "string") return false;
26902
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
27010
+ 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";
26903
27011
  }
26904
27012
  function isPublicEventTicketType(value) {
26905
27013
  return isRecord6(value) && typeof value.id === "string";
@@ -27516,7 +27624,9 @@ function getSelectableCoursePricingOptionsForNow(course, now) {
27516
27624
  return left.name.localeCompare(right.name);
27517
27625
  });
27518
27626
  }
27519
- function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {}) {
27627
+ function resolveCoursePricingState(course, selectedPricingOptionId, selectedSlidingAmountOrNowInput, nowInput = {}) {
27628
+ const selectedSlidingAmount = typeof selectedSlidingAmountOrNowInput === "number" || selectedSlidingAmountOrNowInput === null ? selectedSlidingAmountOrNowInput : null;
27629
+ const effectiveNowInput = typeof selectedSlidingAmountOrNowInput === "object" && selectedSlidingAmountOrNowInput !== null ? selectedSlidingAmountOrNowInput : nowInput;
27520
27630
  const currency = course.pricing?.currency ?? course.currency;
27521
27631
  if (!course.pricing) {
27522
27632
  const legacyAmount = course.priceCents ?? 0;
@@ -27526,6 +27636,8 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
27526
27636
  selectableOptions: [],
27527
27637
  requiresSelection: false,
27528
27638
  selectedOption: null,
27639
+ slidingScale: null,
27640
+ selectedSlidingAmount: null,
27529
27641
  selectedPriceAmount: legacyAmount,
27530
27642
  selectedRequiresPayment: legacyAmount > 0,
27531
27643
  hasPaidSelection: legacyAmount > 0,
@@ -27540,6 +27652,8 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
27540
27652
  selectableOptions: [],
27541
27653
  requiresSelection: false,
27542
27654
  selectedOption: null,
27655
+ slidingScale: null,
27656
+ selectedSlidingAmount: null,
27543
27657
  selectedPriceAmount: 0,
27544
27658
  selectedRequiresPayment: false,
27545
27659
  hasPaidSelection: false,
@@ -27553,6 +27667,8 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
27553
27667
  selectableOptions: [],
27554
27668
  requiresSelection: false,
27555
27669
  selectedOption: null,
27670
+ slidingScale: null,
27671
+ selectedSlidingAmount: null,
27556
27672
  selectedPriceAmount: amount,
27557
27673
  selectedRequiresPayment: amount > 0,
27558
27674
  hasPaidSelection: amount > 0,
@@ -27562,7 +27678,7 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
27562
27678
  case "tiered": {
27563
27679
  const selectableOptions = getSelectableCoursePricingOptionsForNow(
27564
27680
  course,
27565
- resolvePlanningDateInput(nowInput)
27681
+ resolvePlanningDateInput(effectiveNowInput)
27566
27682
  );
27567
27683
  const selectedOption = (selectedPricingOptionId ? selectableOptions.find((option) => option.id === selectedPricingOptionId) : null) ?? (selectableOptions.length === 1 ? selectableOptions[0] ?? null : null);
27568
27684
  const lowestAmount = selectableOptions.reduce((lowest, option) => {
@@ -27578,12 +27694,51 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
27578
27694
  selectableOptions,
27579
27695
  requiresSelection: selectableOptions.length > 1,
27580
27696
  selectedOption,
27697
+ slidingScale: null,
27698
+ selectedSlidingAmount: null,
27581
27699
  selectedPriceAmount: selectedOption?.priceAmount ?? null,
27582
27700
  selectedRequiresPayment: (selectedOption?.priceAmount ?? 0) > 0,
27583
27701
  hasPaidSelection: selectableOptions.some((option) => option.priceAmount > 0),
27584
27702
  hasFreeSelection: selectableOptions.some((option) => option.priceAmount === 0)
27585
27703
  };
27586
27704
  }
27705
+ case "sliding_scale": {
27706
+ const minAmount = course.pricing.slidingMinAmount ?? null;
27707
+ const maxAmount = course.pricing.slidingMaxAmount ?? null;
27708
+ if (minAmount === null || maxAmount === null || minAmount < 0 || maxAmount < minAmount) {
27709
+ return {
27710
+ currency,
27711
+ display: { kind: "unavailable", currency },
27712
+ selectableOptions: [],
27713
+ requiresSelection: true,
27714
+ selectedOption: null,
27715
+ slidingScale: null,
27716
+ selectedSlidingAmount: null,
27717
+ selectedPriceAmount: null,
27718
+ selectedRequiresPayment: false,
27719
+ hasPaidSelection: false,
27720
+ hasFreeSelection: false
27721
+ };
27722
+ }
27723
+ const normalizedSelectedAmount = typeof selectedSlidingAmount === "number" && Number.isFinite(selectedSlidingAmount) ? selectedSlidingAmount : null;
27724
+ return {
27725
+ currency,
27726
+ display: { kind: "range", minAmount, maxAmount, currency },
27727
+ selectableOptions: [],
27728
+ requiresSelection: normalizedSelectedAmount === null,
27729
+ selectedOption: null,
27730
+ slidingScale: {
27731
+ minAmount,
27732
+ maxAmount,
27733
+ suggestedAmount: course.pricing.slidingSuggestedAmount ?? null
27734
+ },
27735
+ selectedSlidingAmount: normalizedSelectedAmount,
27736
+ selectedPriceAmount: normalizedSelectedAmount,
27737
+ selectedRequiresPayment: (normalizedSelectedAmount ?? 0) > 0,
27738
+ hasPaidSelection: maxAmount > 0,
27739
+ hasFreeSelection: minAmount === 0
27740
+ };
27741
+ }
27587
27742
  }
27588
27743
  }
27589
27744
  function formatCoursePriceDisplay(display, locale) {
@@ -39901,6 +40056,7 @@ var bookingServiceSchema = z64.object({
39901
40056
  title: z64.string(),
39902
40057
  description: z64.string().nullable().optional().transform((value) => value ?? void 0),
39903
40058
  durationMinutes: z64.number().optional(),
40059
+ pricing: z64.custom().optional(),
39904
40060
  priceAmount: z64.number().nullable().optional(),
39905
40061
  priceCurrency: z64.string().nullable().optional(),
39906
40062
  paymentTerms: blockBookingPaymentTermsSchema.optional(),
@@ -67714,6 +67870,7 @@ var CANONICAL_REFUND_CONFLICT_CODES = [
67714
67870
  ];
67715
67871
  var CANONICAL_REFUND_PLANNER_ERROR_CODES = [
67716
67872
  ...CANONICAL_REFUND_CONFLICT_CODES,
67873
+ "invalid_amount",
67717
67874
  "amount_exceeds_remaining",
67718
67875
  "pass_revoke_requires_full_refund",
67719
67876
  "refund_failed"
@@ -67740,6 +67897,7 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
67740
67897
  // ../api/src/bookingRefundOutcomes.ts
67741
67898
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
67742
67899
  "missing_amount",
67900
+ "invalid_amount",
67743
67901
  "amount_exceeds_remaining",
67744
67902
  "credit_refunds_disabled",
67745
67903
  "missing_credit_customer",
@@ -67754,6 +67912,7 @@ var EVENT_ATTENDEE_REFUND_INVALID_CODES = [
67754
67912
  var MANAGED_PRODUCT_REFUND_INVALID_CODES = [
67755
67913
  "credit_refunds_disabled",
67756
67914
  "not_refundable",
67915
+ "invalid_amount",
67757
67916
  "amount_exceeds_remaining"
67758
67917
  ];
67759
67918
  var CUSTOMER_PASS_REFUND_INVALID_CODES = [
@@ -6493,6 +6493,7 @@ function publicEventPricingType(pricing) {
6493
6493
  return "free";
6494
6494
  case "single_paid":
6495
6495
  case "ticket_types":
6496
+ case "sliding_scale":
6496
6497
  case "course":
6497
6498
  return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
6498
6499
  case "external":
@@ -28058,9 +28059,12 @@ var coursePricingOptionSchema = z42.object({
28058
28059
  });
28059
28060
  var coursePricingSchema = z42.object({
28060
28061
  bookingRequirement: z42.enum(["none", "required"]),
28061
- pricingStrategy: z42.enum(["free", "single", "tiered"]),
28062
+ pricingStrategy: z42.enum(["free", "single", "tiered", "sliding_scale"]),
28062
28063
  currency: z42.string(),
28063
28064
  singlePriceAmount: z42.number().nullable(),
28065
+ slidingMinAmount: z42.number().nullable().optional(),
28066
+ slidingMaxAmount: z42.number().nullable().optional(),
28067
+ slidingSuggestedAmount: z42.number().nullable().optional(),
28064
28068
  paymentTerms: blockBookingPaymentTermsSchema,
28065
28069
  options: z42.array(coursePricingOptionSchema)
28066
28070
  });
@@ -28214,6 +28218,19 @@ var publicEventPricingSchema = z43.discriminatedUnion("kind", [
28214
28218
  ticketTypes: z43.array(publicEventTicketTypeSchema),
28215
28219
  display: publicEventTicketTypePriceDisplaySchema
28216
28220
  }),
28221
+ z43.object({
28222
+ kind: z43.literal("sliding_scale"),
28223
+ minAmount: z43.number(),
28224
+ maxAmount: z43.number(),
28225
+ suggestedAmount: z43.number().nullable(),
28226
+ currency: z43.string(),
28227
+ display: z43.object({
28228
+ kind: z43.literal("range"),
28229
+ minAmount: z43.number(),
28230
+ maxAmount: z43.number(),
28231
+ currency: z43.string()
28232
+ })
28233
+ }),
28217
28234
  z43.object({
28218
28235
  kind: z43.literal("course"),
28219
28236
  display: z43.object({ kind: z43.literal("course"), display: publicCoursePriceDisplaySchema })
@@ -28630,7 +28647,7 @@ function isRecord4(value) {
28630
28647
  }
28631
28648
  function isPublicEventPricing(value) {
28632
28649
  if (!isRecord4(value) || typeof value.kind !== "string") return false;
28633
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
28650
+ 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";
28634
28651
  }
28635
28652
  function isPublicEventTicketType(value) {
28636
28653
  return isRecord4(value) && typeof value.id === "string";
@@ -37210,6 +37227,7 @@ var BOOKING_FORM_DATA_RESERVED_KEY_VALUES = [
37210
37227
  "selectedDate",
37211
37228
  "selectedSlot",
37212
37229
  "discountCode",
37230
+ "selectedSlidingAmountInput",
37213
37231
  "selectedCollectionOptionKind",
37214
37232
  "selectedAppointmentPackageId"
37215
37233
  ];
@@ -38391,6 +38409,7 @@ var CANONICAL_REFUND_CONFLICT_CODES = [
38391
38409
  ];
38392
38410
  var CANONICAL_REFUND_PLANNER_ERROR_CODES = [
38393
38411
  ...CANONICAL_REFUND_CONFLICT_CODES,
38412
+ "invalid_amount",
38394
38413
  "amount_exceeds_remaining",
38395
38414
  "pass_revoke_requires_full_refund",
38396
38415
  "refund_failed"
@@ -38417,6 +38436,7 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
38417
38436
  // ../api/src/bookingRefundOutcomes.ts
38418
38437
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
38419
38438
  "missing_amount",
38439
+ "invalid_amount",
38420
38440
  "amount_exceeds_remaining",
38421
38441
  "credit_refunds_disabled",
38422
38442
  "missing_credit_customer",
@@ -38431,6 +38451,7 @@ var EVENT_ATTENDEE_REFUND_INVALID_CODES = [
38431
38451
  var MANAGED_PRODUCT_REFUND_INVALID_CODES = [
38432
38452
  "credit_refunds_disabled",
38433
38453
  "not_refundable",
38454
+ "invalid_amount",
38434
38455
  "amount_exceeds_remaining"
38435
38456
  ];
38436
38457
  var CUSTOMER_PASS_REFUND_INVALID_CODES = [
@@ -6538,6 +6538,7 @@ function publicEventPricingType(pricing) {
6538
6538
  return "free";
6539
6539
  case "single_paid":
6540
6540
  case "ticket_types":
6541
+ case "sliding_scale":
6541
6542
  case "course":
6542
6543
  return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
6543
6544
  case "external":
@@ -28103,9 +28104,12 @@ var coursePricingOptionSchema = z42.object({
28103
28104
  });
28104
28105
  var coursePricingSchema = z42.object({
28105
28106
  bookingRequirement: z42.enum(["none", "required"]),
28106
- pricingStrategy: z42.enum(["free", "single", "tiered"]),
28107
+ pricingStrategy: z42.enum(["free", "single", "tiered", "sliding_scale"]),
28107
28108
  currency: z42.string(),
28108
28109
  singlePriceAmount: z42.number().nullable(),
28110
+ slidingMinAmount: z42.number().nullable().optional(),
28111
+ slidingMaxAmount: z42.number().nullable().optional(),
28112
+ slidingSuggestedAmount: z42.number().nullable().optional(),
28109
28113
  paymentTerms: blockBookingPaymentTermsSchema,
28110
28114
  options: z42.array(coursePricingOptionSchema)
28111
28115
  });
@@ -28259,6 +28263,19 @@ var publicEventPricingSchema = z43.discriminatedUnion("kind", [
28259
28263
  ticketTypes: z43.array(publicEventTicketTypeSchema),
28260
28264
  display: publicEventTicketTypePriceDisplaySchema
28261
28265
  }),
28266
+ z43.object({
28267
+ kind: z43.literal("sliding_scale"),
28268
+ minAmount: z43.number(),
28269
+ maxAmount: z43.number(),
28270
+ suggestedAmount: z43.number().nullable(),
28271
+ currency: z43.string(),
28272
+ display: z43.object({
28273
+ kind: z43.literal("range"),
28274
+ minAmount: z43.number(),
28275
+ maxAmount: z43.number(),
28276
+ currency: z43.string()
28277
+ })
28278
+ }),
28262
28279
  z43.object({
28263
28280
  kind: z43.literal("course"),
28264
28281
  display: z43.object({ kind: z43.literal("course"), display: publicCoursePriceDisplaySchema })
@@ -28675,7 +28692,7 @@ function isRecord4(value) {
28675
28692
  }
28676
28693
  function isPublicEventPricing(value) {
28677
28694
  if (!isRecord4(value) || typeof value.kind !== "string") return false;
28678
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
28695
+ 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";
28679
28696
  }
28680
28697
  function isPublicEventTicketType(value) {
28681
28698
  return isRecord4(value) && typeof value.id === "string";
@@ -37255,6 +37272,7 @@ var BOOKING_FORM_DATA_RESERVED_KEY_VALUES = [
37255
37272
  "selectedDate",
37256
37273
  "selectedSlot",
37257
37274
  "discountCode",
37275
+ "selectedSlidingAmountInput",
37258
37276
  "selectedCollectionOptionKind",
37259
37277
  "selectedAppointmentPackageId"
37260
37278
  ];
@@ -38436,6 +38454,7 @@ var CANONICAL_REFUND_CONFLICT_CODES = [
38436
38454
  ];
38437
38455
  var CANONICAL_REFUND_PLANNER_ERROR_CODES = [
38438
38456
  ...CANONICAL_REFUND_CONFLICT_CODES,
38457
+ "invalid_amount",
38439
38458
  "amount_exceeds_remaining",
38440
38459
  "pass_revoke_requires_full_refund",
38441
38460
  "refund_failed"
@@ -38462,6 +38481,7 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
38462
38481
  // ../api/src/bookingRefundOutcomes.ts
38463
38482
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
38464
38483
  "missing_amount",
38484
+ "invalid_amount",
38465
38485
  "amount_exceeds_remaining",
38466
38486
  "credit_refunds_disabled",
38467
38487
  "missing_credit_customer",
@@ -38476,6 +38496,7 @@ var EVENT_ATTENDEE_REFUND_INVALID_CODES = [
38476
38496
  var MANAGED_PRODUCT_REFUND_INVALID_CODES = [
38477
38497
  "credit_refunds_disabled",
38478
38498
  "not_refundable",
38499
+ "invalid_amount",
38479
38500
  "amount_exceeds_remaining"
38480
38501
  ];
38481
38502
  var CUSTOMER_PASS_REFUND_INVALID_CODES = [
@@ -6495,6 +6495,7 @@ function publicEventPricingType(pricing) {
6495
6495
  return "free";
6496
6496
  case "single_paid":
6497
6497
  case "ticket_types":
6498
+ case "sliding_scale":
6498
6499
  case "course":
6499
6500
  return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
6500
6501
  case "external":
@@ -28042,9 +28043,12 @@ var coursePricingOptionSchema = z42.object({
28042
28043
  });
28043
28044
  var coursePricingSchema = z42.object({
28044
28045
  bookingRequirement: z42.enum(["none", "required"]),
28045
- pricingStrategy: z42.enum(["free", "single", "tiered"]),
28046
+ pricingStrategy: z42.enum(["free", "single", "tiered", "sliding_scale"]),
28046
28047
  currency: z42.string(),
28047
28048
  singlePriceAmount: z42.number().nullable(),
28049
+ slidingMinAmount: z42.number().nullable().optional(),
28050
+ slidingMaxAmount: z42.number().nullable().optional(),
28051
+ slidingSuggestedAmount: z42.number().nullable().optional(),
28048
28052
  paymentTerms: blockBookingPaymentTermsSchema,
28049
28053
  options: z42.array(coursePricingOptionSchema)
28050
28054
  });
@@ -28198,6 +28202,19 @@ var publicEventPricingSchema = z43.discriminatedUnion("kind", [
28198
28202
  ticketTypes: z43.array(publicEventTicketTypeSchema),
28199
28203
  display: publicEventTicketTypePriceDisplaySchema
28200
28204
  }),
28205
+ z43.object({
28206
+ kind: z43.literal("sliding_scale"),
28207
+ minAmount: z43.number(),
28208
+ maxAmount: z43.number(),
28209
+ suggestedAmount: z43.number().nullable(),
28210
+ currency: z43.string(),
28211
+ display: z43.object({
28212
+ kind: z43.literal("range"),
28213
+ minAmount: z43.number(),
28214
+ maxAmount: z43.number(),
28215
+ currency: z43.string()
28216
+ })
28217
+ }),
28201
28218
  z43.object({
28202
28219
  kind: z43.literal("course"),
28203
28220
  display: z43.object({ kind: z43.literal("course"), display: publicCoursePriceDisplaySchema })
@@ -28614,7 +28631,7 @@ function isRecord4(value) {
28614
28631
  }
28615
28632
  function isPublicEventPricing(value) {
28616
28633
  if (!isRecord4(value) || typeof value.kind !== "string") return false;
28617
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
28634
+ 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";
28618
28635
  }
28619
28636
  function isPublicEventTicketType(value) {
28620
28637
  return isRecord4(value) && typeof value.id === "string";
@@ -38824,6 +38841,7 @@ var CANONICAL_REFUND_CONFLICT_CODES = [
38824
38841
  ];
38825
38842
  var CANONICAL_REFUND_PLANNER_ERROR_CODES = [
38826
38843
  ...CANONICAL_REFUND_CONFLICT_CODES,
38844
+ "invalid_amount",
38827
38845
  "amount_exceeds_remaining",
38828
38846
  "pass_revoke_requires_full_refund",
38829
38847
  "refund_failed"
@@ -38850,6 +38868,7 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
38850
38868
  // ../api/src/bookingRefundOutcomes.ts
38851
38869
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
38852
38870
  "missing_amount",
38871
+ "invalid_amount",
38853
38872
  "amount_exceeds_remaining",
38854
38873
  "credit_refunds_disabled",
38855
38874
  "missing_credit_customer",
@@ -38864,6 +38883,7 @@ var EVENT_ATTENDEE_REFUND_INVALID_CODES = [
38864
38883
  var MANAGED_PRODUCT_REFUND_INVALID_CODES = [
38865
38884
  "credit_refunds_disabled",
38866
38885
  "not_refundable",
38886
+ "invalid_amount",
38867
38887
  "amount_exceeds_remaining"
38868
38888
  ];
38869
38889
  var CUSTOMER_PASS_REFUND_INVALID_CODES = [
@@ -7062,7 +7062,7 @@ var SimpleCache = class {
7062
7062
  };
7063
7063
 
7064
7064
  // src/version.ts
7065
- var SDK_VERSION = "0.91.0";
7065
+ var SDK_VERSION = "0.92.0";
7066
7066
 
7067
7067
  // src/client/error.ts
7068
7068
  var RiverbankApiError = class _RiverbankApiError extends Error {