@riverbankcms/sdk 0.123.0 → 0.124.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 (259) hide show
  1. package/README.md +14 -9
  2. package/dist/{PreviewEditorSidebar-DvJFmC29.mjs → PreviewEditorSidebar-DBmAJJkQ.mjs} +22 -39
  3. package/dist/{PreviewEditorUI-DVHP4bCo.mjs → PreviewEditorUI-CfGaz9cY.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-07EE4uWL.mjs → PreviewQueryProvider-BH-3-jSj.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-BE5eFayo.mjs → SdkPreviewModeRuntime-BW9Z8j8T.mjs} +1020 -1234
  6. package/dist/{SiteChromeCustomizeContext-4hn4A0HX.mjs → SiteChromeCustomizeContext-2z8moxYf.mjs} +1900 -1959
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +1236 -4152
  8. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +435 -0
  9. package/dist/_dts/api/src/bookingClosures.d.ts +3 -3
  10. package/dist/_dts/api/src/bookingConfig.d.ts +72 -73
  11. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +26 -35
  12. package/dist/_dts/api/src/bookingRecords.d.ts +4 -15
  13. package/dist/_dts/api/src/bookingVerticalCatalog.d.ts +746 -0
  14. package/dist/_dts/api/src/bookingVerticalPreset.d.ts +38 -0
  15. package/dist/_dts/api/src/bookingVerticals.d.ts +11 -652
  16. package/dist/_dts/api/src/bookings.d.ts +11 -9
  17. package/dist/_dts/api/src/cache-tags.d.ts +2 -2
  18. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +10 -10
  19. package/dist/_dts/api/src/common/envelope.d.ts +2 -0
  20. package/dist/_dts/api/src/contentRuntime.d.ts +0 -17
  21. package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +99 -0
  22. package/dist/_dts/api/src/courses.d.ts +22 -33
  23. package/dist/_dts/api/src/defineEndpointDefinitions.d.ts +14 -0
  24. package/dist/_dts/api/src/demoMutationPolicies.d.ts +4 -0
  25. package/dist/_dts/api/src/endpoints.d.ts +3740 -3733
  26. package/dist/_dts/api/src/event-destination-policy.d.ts +1 -1
  27. package/dist/_dts/api/src/event-presentation.d.ts +4 -9
  28. package/dist/_dts/api/src/index.d.ts +9 -11
  29. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +376 -0
  30. package/dist/_dts/api/src/participantMessaging.d.ts +2 -2
  31. package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
  32. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +272 -0
  33. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +274 -0
  34. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +31 -0
  35. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +152 -0
  36. package/dist/_dts/api/src/publicExperience/siteEndpoints.d.ts +95 -0
  37. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +154 -0
  38. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +10 -962
  39. package/dist/_dts/api/src/publicWholeSeriesEndpointDefinitions.d.ts +52 -0
  40. package/dist/_dts/api/src/sdkContracts.d.ts +0 -51
  41. package/dist/_dts/api/src/sdkEntryReadEndpoints.d.ts +23 -0
  42. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -38
  43. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +3 -4
  44. package/dist/_dts/blocks/src/PageRenderer.d.ts +4 -15
  45. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  46. package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +0 -16
  47. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +6 -222
  48. package/dist/_dts/blocks/src/portal/types.d.ts +3 -3
  49. package/dist/_dts/blocks/src/subroutes/fold.d.ts +1 -14
  50. package/dist/_dts/blocks/src/subroutes/index.d.ts +1 -1
  51. package/dist/_dts/blocks/src/subroutes/kinds.d.ts +3 -3
  52. package/dist/_dts/blocks/src/system/blocks/course-details.d.ts +0 -11
  53. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +3 -4
  54. package/dist/_dts/blocks/src/system/blocks/courses/shared/pricing.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +401 -12
  56. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +9 -10
  57. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +14 -13
  58. package/dist/_dts/blocks/src/system/blocks/events/event-listing.d.ts +1 -2
  59. package/dist/_dts/blocks/src/system/blocks/events/shared/filtering.d.ts +1 -4
  60. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +19 -18
  61. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +9 -11
  62. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +2 -2
  63. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  64. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +10 -10
  65. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +10 -10
  66. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  67. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +162 -0
  68. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +59 -0
  69. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +134 -0
  70. package/dist/_dts/blocks/src/system/runtime/api/types/discounts.d.ts +85 -0
  71. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +241 -0
  72. package/dist/_dts/blocks/src/system/runtime/api/types/forms.d.ts +53 -0
  73. package/dist/_dts/blocks/src/system/runtime/api/types/newsletter.d.ts +32 -0
  74. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +220 -0
  75. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +176 -0
  76. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +12 -1121
  77. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +19 -583
  78. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +9 -276
  79. package/dist/_dts/blocks/src/system/runtime/hooks/useEventFilters.d.ts +1 -12
  80. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +0 -1
  81. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +0 -1
  82. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +2 -3
  83. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +1 -18
  84. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/runs.d.ts +0 -2
  85. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +1 -5
  86. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/courseRegistrationViewState.d.ts +21 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/index.d.ts +1 -1
  88. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/pricing.d.ts +14 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +0 -25
  90. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseEligibility.d.ts +24 -0
  91. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCoursePaymentVerification.d.ts +9 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationActions.d.ts +35 -0
  93. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationPortal.d.ts +7 -0
  94. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationSelection.d.ts +31 -0
  95. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationWizard.d.ts +80 -55
  96. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseWaitlistSelection.d.ts +14 -0
  97. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/whole-series-registration.headless.contract.d.ts +4 -5
  98. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +0 -38
  99. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +1 -1
  100. package/dist/_dts/blocks/src/system/runtime/nodes/event-details.client.d.ts +1 -2
  101. package/dist/_dts/blocks/src/system/runtime/nodes/event-details.server.d.ts +0 -1
  102. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardActions.d.ts +12 -0
  103. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +0 -4
  104. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +0 -9
  105. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +0 -5
  106. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +0 -11
  107. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +13 -0
  108. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +0 -21
  109. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +1 -1
  110. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +24 -433
  111. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +1 -2
  112. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +52 -266
  113. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +5 -15
  114. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventFilters.d.ts +0 -8
  115. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +1573 -0
  116. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listOptions.d.ts +1 -3
  117. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +2 -3
  118. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +2 -2
  119. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +0 -5
  120. package/dist/_dts/content-model/src/content-types/builtins.d.ts +0 -5
  121. package/dist/_dts/content-model/src/templates/defaults.d.ts +6 -3
  122. package/dist/_dts/core/src/editor-state.d.ts +1 -13
  123. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +1580 -120
  124. package/dist/_dts/preview-next/src/client/preview/siteChromeBrandPreferences.d.ts +6 -6
  125. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +6 -1
  126. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +27 -4
  127. package/dist/_dts/sdk/src/cli/commands/audit.d.ts +1 -2
  128. package/dist/_dts/sdk/src/cli/commands/pull-dated-offering-scope.d.ts +1 -1
  129. package/dist/_dts/sdk/src/cli/commands/pull-dry-run.d.ts +4 -6
  130. package/dist/_dts/sdk/src/cli/commands/push/consts.d.ts +1 -1
  131. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +1 -1
  132. package/dist/_dts/sdk/src/cli/commands/push/pushAllExtras.d.ts +0 -1
  133. package/dist/_dts/sdk/src/cli/commands/push/verification.d.ts +1 -1
  134. package/dist/_dts/sdk/src/cli/content/collectionWriters.d.ts +23 -0
  135. package/dist/_dts/sdk/src/cli/content/metadataAfterPush.d.ts +25 -0
  136. package/dist/_dts/sdk/src/cli/content/reader.d.ts +0 -52
  137. package/dist/_dts/sdk/src/cli/content/writer.d.ts +3 -81
  138. package/dist/_dts/sdk/src/cli/site-commands/datedOfferingCommands.d.ts +6 -9
  139. package/dist/_dts/sdk/src/client/contentReadOperations.d.ts +40 -0
  140. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -3
  141. package/dist/_dts/sdk/src/client/management/types.d.ts +3 -91
  142. package/dist/_dts/sdk/src/client/runtimeCacheKeys.d.ts +72 -0
  143. package/dist/_dts/sdk/src/client/runtimeCachePolicy.d.ts +10 -75
  144. package/dist/_dts/sdk/src/client/types.d.ts +7 -33
  145. package/dist/_dts/sdk/src/components.d.ts +1 -1
  146. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  147. package/dist/_dts/sdk/src/config/validation.d.ts +3 -6
  148. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  149. package/dist/_dts/sdk/src/contracts/page.d.ts +0 -8
  150. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +1 -34
  151. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +4 -3
  152. package/dist/_dts/sdk/src/next/catch-all-utils.d.ts +0 -11
  153. package/dist/_dts/sdk/src/next/catch-all.d.ts +1 -76
  154. package/dist/_dts/sdk/src/next/types.d.ts +0 -19
  155. package/dist/_dts/sdk/src/public-api/contracts.d.ts +7 -207
  156. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  157. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -1
  158. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -2
  159. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +0 -7
  160. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +81 -0
  161. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -1
  162. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -51
  163. package/dist/_dts/sdk/src/rendering/overrides.d.ts +2 -1
  164. package/dist/_dts/sdk/src/routing/entrySubroutes.d.ts +6 -6
  165. package/dist/_dts/sdk/src/routing/index.d.ts +0 -2
  166. package/dist/_dts/sdk/src/routing/resolveOccurrence.d.ts +3 -3
  167. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +10 -39
  168. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  169. package/dist/_dts/sdk/src/version.d.ts +1 -1
  170. package/dist/_dts/site-commands/src/adapter.d.ts +1 -1
  171. package/dist/_dts/site-commands/src/appointmentCommandSchemas.d.ts +100 -0
  172. package/dist/_dts/site-commands/src/capabilityGaps.d.ts +2 -2
  173. package/dist/_dts/site-commands/src/commandContract.d.ts +1242 -0
  174. package/dist/_dts/site-commands/src/commandDomain.d.ts +20 -0
  175. package/dist/_dts/site-commands/src/commandIdentifiers.d.ts +7 -0
  176. package/dist/_dts/site-commands/src/commandValidation.d.ts +10 -0
  177. package/dist/_dts/site-commands/src/commands.d.ts +729 -2659
  178. package/dist/_dts/site-commands/src/domain.d.ts +1 -1
  179. package/dist/_dts/site-commands/src/eventCommandContent.d.ts +11 -0
  180. package/dist/_dts/site-commands/src/exposure.d.ts +1 -1
  181. package/dist/_dts/site-commands/src/index.d.ts +6 -0
  182. package/dist/_dts/site-commands/src/metadata.d.ts +1 -27
  183. package/dist/_dts/site-commands/src/planner.d.ts +1 -1
  184. package/dist/_dts/site-commands/src/refContributions.d.ts +1 -1
  185. package/dist/_dts/site-commands/src/refs.d.ts +1 -4
  186. package/dist/_dts/site-commands/src/siteStyleCommandSchema.d.ts +378 -0
  187. package/dist/_dts/site-commands/src/siteStyleSelectionSchemaBuilder.d.ts +46 -0
  188. package/dist/_dts/site-commands/src/staticExecutionGaps.d.ts +2 -2
  189. package/dist/_dts/site-commands/src/venueCommandMapping.d.ts +21 -0
  190. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +58 -0
  191. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +1 -0
  192. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  193. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +47 -24
  194. package/dist/cli/index.mjs +7250 -8478
  195. package/dist/cli/init-docs/content/cli-reference.md +5 -21
  196. package/dist/cli/init-docs/content/content-management.md +4 -5
  197. package/dist/client/{DiscountCodeDisclosure-DIWj-P9v.mjs → DiscountCodeDisclosure-DxvjKvck.mjs} +2 -2
  198. package/dist/client/{EventCombined.client-De8YWBSr.mjs → EventCombined.client-BydMGc4c.mjs} +5 -16
  199. package/dist/client/{EventListing.client-seHTjimY.mjs → EventListing.client-vpzhhysN.mjs} +3 -10
  200. package/dist/client/{LeafletStaticMap-BmQxFcJW.mjs → LeafletStaticMap-CB07rpf8.mjs} +1 -1
  201. package/dist/client/{MagicLinkForm-OoJAIUIj.mjs → MagicLinkForm-BzyRJ8VF.mjs} +2 -2
  202. package/dist/client/{StepIndicator-CiZ8kdPk.mjs → StepIndicator-CTcGf8Be.mjs} +2 -2
  203. package/dist/client/{accordion-6lnN__XJ.mjs → accordion-B-DUDLRD.mjs} +1 -1
  204. package/dist/client/{bookingForm-5uyqhONU.mjs → bookingForm-DSbClLcZ.mjs} +6 -6
  205. package/dist/client/bookings.mjs +753 -818
  206. package/dist/client/{carousel-Dtnifil_.mjs → carousel-B6Ccdx8M.mjs} +1 -1
  207. package/dist/client/{cart-5Tc5S7NV.mjs → cart-BZh8G8wM.mjs} +3 -3
  208. package/dist/client/{checkout-CYKKN5Hr.mjs → checkout-o6zaC-kM.mjs} +3 -3
  209. package/dist/client/client.mjs +6859 -7149
  210. package/dist/client/{context-BGZNlGXB.mjs → context-CJz1Vlsz.mjs} +40 -43
  211. package/dist/client/{courseRegistration-CxCBybB4.mjs → courseRegistration-Cf11pNDs.mjs} +606 -621
  212. package/dist/client/{eventCalendar-Xj2jZS9X.mjs → eventCalendar-BeXrdsSE.mjs} +5 -13
  213. package/dist/client/{eventCombined-CgcMoOgM.mjs → eventCombined-DA76PZgG.mjs} +3 -3
  214. package/dist/client/{eventDetails-CEAH8Edc.mjs → eventDetails-BLxg0rok.mjs} +140 -116
  215. package/dist/client/{eventListing-qyPVQ0wP.mjs → eventListing-tO9LheBX.mjs} +3 -3
  216. package/dist/client/{eventRegistration-DDu79CtL.mjs → eventRegistration-Cnene9D9.mjs} +165 -68
  217. package/dist/client/{form-Bc7JKI7I.mjs → form-DZf72CHB.mjs} +2 -2
  218. package/dist/client/{headerSection-vTku_LEl.mjs → headerSection-Hioja5Cr.mjs} +2 -2
  219. package/dist/client/hooks.mjs +3452 -2365
  220. package/dist/client/{locationMap-Bg7X4Jna.mjs → locationMap-DwhUXEix.mjs} +2 -2
  221. package/dist/client/{newsletterForm-lpylVdp5.mjs → newsletterForm-C350bEQf.mjs} +2 -2
  222. package/dist/client/{pricing-DE8fjJiT.mjs → pricing-BYWN_ATa.mjs} +3 -19
  223. package/dist/client/{productDetail-D7Bo2RMH.mjs → productDetail-CCqCyXgU.mjs} +3 -3
  224. package/dist/client/{productList-VjnZqiqN.mjs → productList-BAiNJrOU.mjs} +3 -3
  225. package/dist/client/{propsDecoder-DreFXjNP.mjs → propsDecoder-DeunRj6m.mjs} +210 -378
  226. package/dist/client/rendering/client.mjs +2541 -2813
  227. package/dist/client/rendering/islands.mjs +18 -18
  228. package/dist/client/rendering.mjs +5622 -4734
  229. package/dist/client/{shop-IRsHHbf7.mjs → shop-DUmCdBtw.mjs} +6 -6
  230. package/dist/client/{shop-commerce-gnI8PieZ.mjs → shop-commerce-CY27mEUr.mjs} +5 -5
  231. package/dist/client/{shop-commerce-store-BTbrhObn.mjs → shop-commerce-store-ChXPbWfa.mjs} +1 -1
  232. package/dist/client/{shopShared-D6KS2_qk.mjs → shopShared-q0kin1cv.mjs} +3 -3
  233. package/dist/client/{useDiscountCodeUi-DCccGCxV.mjs → useDiscountCodeUi-I-92-x2V.mjs} +2 -2
  234. package/dist/client/{useEventFilters-eGs3rPZQ.mjs → useEventFilters-DlcVluZh.mjs} +59 -124
  235. package/dist/client/{usePolling-CvSU2sur.mjs → usePolling-Bz7GFV_a.mjs} +2 -2
  236. package/dist/preview-next/before-render.mjs +1115 -1044
  237. package/dist/preview-next/client/runtime.mjs +4 -4
  238. package/dist/preview-next/middleware.mjs +1118 -1047
  239. package/dist/{previewAuthStore-ShY26RNz.mjs → previewAuthStore-CJX21dGi.mjs} +1121 -1047
  240. package/dist/{sdk-runtime-CJxkFq2B.mjs → sdk-runtime-OnPM8Z69.mjs} +2 -2
  241. package/dist/{separator-CoFmo8uA.mjs → separator-CPtfzHqA.mjs} +1 -1
  242. package/dist/server/components.mjs +4560 -3672
  243. package/dist/server/config-validation.mjs +3454 -2356
  244. package/dist/server/config.mjs +3454 -2356
  245. package/dist/server/data.mjs +3452 -2367
  246. package/dist/server/index.mjs +1501 -1491
  247. package/dist/server/next.mjs +7524 -8067
  248. package/dist/server/page-converter.mjs +1898 -2040
  249. package/dist/server/prebuild.mjs +1 -1
  250. package/dist/server/rendering/server.mjs +4258 -3373
  251. package/dist/server/rendering.mjs +6228 -5393
  252. package/dist/server/routing.mjs +3614 -2509
  253. package/dist/server/server.mjs +3298 -3479
  254. package/package.json +1 -1
  255. package/dist/_dts/api/src/previewContentContract.d.ts +0 -4
  256. package/dist/_dts/sdk/src/cli/commands/course.d.ts +0 -6
  257. package/dist/_dts/sdk/src/cli/commands/push/scopes/courses.d.ts +0 -4
  258. package/dist/_dts/sdk/src/client/management/courses.d.ts +0 -10
  259. package/dist/_dts/sdk/src/routing/resolveEntrySubroute.d.ts +0 -36
@@ -33,6 +33,12 @@ function blockedDemoMutationPolicy(classification, publicMessage) {
33
33
  };
34
34
  }
35
35
  //#endregion
36
+ //#region ../api/src/demoMutationPolicies.ts
37
+ const DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
38
+ const DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
39
+ const DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
40
+ const DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
41
+ //#endregion
36
42
  //#region ../api/src/cache-tags.ts
37
43
  /**
38
44
  * Tag templates for endpoint definitions (support `{param}` placeholders).
@@ -59,7 +65,7 @@ const TAG_TEMPLATES = {
59
65
  formSubmissionsBySlug: "riverbank:form-submissions:{slug}",
60
66
  publicEvents: "riverbank:site:{siteId}:public-events",
61
67
  publicEventFilters: "riverbank:site:{siteId}:public-event-filters",
62
- publicCourses: "riverbank:site:{siteId}:public-courses",
68
+ publicWholeSeriesOfferings: "riverbank:site:{siteId}:public-whole-series-offerings",
63
69
  publicTeamMembers: "riverbank:site:{siteId}:public-team-members",
64
70
  publicProducts: "riverbank:site:{siteId}:public-products",
65
71
  publicPasses: "riverbank:site:{siteId}:public-passes",
@@ -74,525 +80,506 @@ const TAG_TEMPLATES = {
74
80
  siteTheme: "riverbank:site:{siteId}:theme"
75
81
  };
76
82
  //#endregion
77
- //#region ../api/src/endpoints.ts
78
- const DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
79
- const DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
80
- const DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
81
- const DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
82
- const API_ENDPOINTS$1 = {
83
- aiContentUpdateChat: {
84
- path: "/ai/content-update-chat",
85
- method: "POST",
86
- auth: "user",
87
- responseKind: "stream"
88
- },
89
- aiChat: {
90
- path: "/ai/chat",
91
- method: "POST",
92
- auth: "user",
93
- responseKind: "stream"
94
- },
95
- aiDesignerThemeApply: {
96
- path: "/sites/{siteId}/ai/designer/theme/apply",
97
- method: "POST",
98
- tags: [TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme],
99
- auth: "user",
100
- responseKind: "json"
101
- },
102
- aiDesignerPageOpsApply: {
103
- path: "/sites/{siteId}/ai/designer/page/apply",
104
- method: "POST",
105
- tags: [TAG_TEMPLATES.siteCollection],
106
- auth: "user",
83
+ //#region ../api/src/sdkEntryReadEndpoints.ts
84
+ const SDK_ENTRY_READ_ENDPOINTS = {
85
+ sdkPullEntriesByType: {
86
+ path: "/sdk/{siteId}/pull/entries/{type}",
87
+ method: "GET",
88
+ errors: ["validation:invalid_input", "server:internal_error"],
89
+ auth: "service",
107
90
  responseKind: "json"
108
91
  },
109
- applySeoChanges: {
110
- path: "/seo/apply",
111
- method: "POST",
112
- auth: "user",
92
+ sdkListEntries: {
93
+ path: "/sdk/{siteId}/entries/{contentType}",
94
+ method: "GET",
95
+ errors: ["validation:invalid_input", "server:internal_error"],
96
+ auth: "service",
113
97
  responseKind: "json"
114
98
  },
115
- aiCreateBriefChat: {
116
- path: "/ai/chat/create-brief",
117
- method: "POST",
118
- auth: "user",
99
+ sdkGetEntry: {
100
+ path: "/sdk/{siteId}/entries/{contentType}/{identifier}",
101
+ method: "GET",
102
+ errors: [
103
+ "validation:invalid_input",
104
+ "resource:not_found",
105
+ "server:internal_error"
106
+ ],
107
+ auth: "service",
119
108
  responseKind: "json"
120
- },
121
- aiPatchDryRun: {
122
- path: "/ai/patch/dry-run",
123
- method: "POST",
109
+ }
110
+ };
111
+ //#endregion
112
+ //#region ../api/src/defineEndpointDefinitions.ts
113
+ /**
114
+ * Validates extracted endpoint descriptors while preserving each literal path,
115
+ * method, and parameter contract for the typed URL builders.
116
+ */
117
+ function defineEndpointDefinitions(definitions) {
118
+ return definitions;
119
+ }
120
+ //#endregion
121
+ //#region ../api/src/appointmentEndpointDefinitions.ts
122
+ const APPOINTMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
123
+ listAppointmentResources: {
124
+ path: "/sites/{siteId}/bookings/resources",
125
+ method: "GET",
124
126
  auth: "user",
125
127
  responseKind: "json"
126
128
  },
127
- aiPatchApply: {
128
- path: "/ai/patch/apply",
129
+ createAppointmentResource: {
130
+ path: "/sites/{siteId}/bookings/resources",
129
131
  method: "POST",
130
132
  auth: "user",
131
- responseKind: "json"
133
+ responseKind: "json",
134
+ errors: [
135
+ "validation:invalid_input",
136
+ "billing:plan_limit_exceeded",
137
+ "server:internal_error"
138
+ ]
132
139
  },
133
- aiPlaygroundProposeMulti: {
134
- path: "/sites/{siteId}/ai/playground/propose-multi",
140
+ createAppointmentResourceWithAccountAccess: {
141
+ path: "/sites/{siteId}/bookings/resources/account-access",
135
142
  method: "POST",
136
143
  auth: "user",
137
- responseKind: "stream"
144
+ responseKind: "json",
145
+ errors: [
146
+ "validation:invalid_input",
147
+ "auth:forbidden",
148
+ "billing:plan_limit_exceeded",
149
+ "resource:conflict",
150
+ "resource:not_found",
151
+ "server:internal_error"
152
+ ]
138
153
  },
139
- aiPlaygroundProposeMultiGet: {
140
- path: "/sites/{siteId}/ai/playground/propose-multi",
154
+ getAppointmentResource: {
155
+ path: "/sites/{siteId}/bookings/resources/{resourceId}",
141
156
  method: "GET",
142
157
  auth: "user",
143
- responseKind: "stream"
158
+ responseKind: "json"
144
159
  },
145
- aiAssistantChatSite: {
146
- path: "/sites/{siteId}/ai/assistant/chat",
147
- method: "POST",
160
+ updateAppointmentResource: {
161
+ path: "/sites/{siteId}/bookings/resources/{resourceId}",
162
+ method: "PUT",
148
163
  auth: "user",
149
- responseKind: "stream"
164
+ responseKind: "json",
165
+ errors: [
166
+ "validation:invalid_input",
167
+ "resource:not_found",
168
+ "server:internal_error"
169
+ ]
150
170
  },
151
- aiDesignerChat: {
152
- path: "/sites/{siteId}/ai/designer/chat",
153
- method: "POST",
171
+ removeAppointmentResource: {
172
+ path: "/sites/{siteId}/bookings/resources/{resourceId}",
173
+ method: "DELETE",
154
174
  auth: "user",
155
- responseKind: "stream"
175
+ responseKind: "json",
176
+ errors: ["resource:not_found", "server:internal_error"]
156
177
  },
157
- aiPlaygroundPageConvert: {
158
- path: "/sites/{siteId}/ai/playground/page-convert",
159
- method: "POST",
178
+ listAppointmentReservations: {
179
+ path: "/sites/{siteId}/bookings/appointment-reservations",
180
+ method: "GET",
160
181
  auth: "user",
161
- responseKind: "json"
182
+ responseKind: "json",
183
+ errors: []
162
184
  },
163
- aiPlaygroundPageConvertJobsCreate: {
164
- path: "/sites/{siteId}/ai/playground/page-convert/jobs",
185
+ createAppointmentReservation: {
186
+ path: "/sites/{siteId}/bookings/appointment-reservations",
165
187
  method: "POST",
166
188
  auth: "user",
167
- responseKind: "json"
189
+ responseKind: "json",
190
+ errors: [
191
+ "validation:invalid_input",
192
+ "resource:not_found",
193
+ "resource:conflict",
194
+ "server:internal_error"
195
+ ]
168
196
  },
169
- aiPlaygroundPageConvertJobsList: {
170
- path: "/sites/{siteId}/ai/playground/page-convert/jobs",
197
+ getAppointmentReservation: {
198
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}",
171
199
  method: "GET",
172
200
  auth: "user",
173
- responseKind: "json"
201
+ responseKind: "json",
202
+ errors: ["resource:not_found", "server:internal_error"]
174
203
  },
175
- aiPlaygroundPageConvertJobGet: {
176
- path: "/sites/{siteId}/ai/playground/page-convert/jobs/{jobId}",
177
- method: "GET",
204
+ updateAppointmentReservation: {
205
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}",
206
+ method: "PUT",
178
207
  auth: "user",
179
- responseKind: "json"
208
+ responseKind: "json",
209
+ errors: [
210
+ "validation:invalid_input",
211
+ "resource:not_found",
212
+ "resource:conflict",
213
+ "server:internal_error"
214
+ ]
180
215
  },
181
- aiPlaygroundPageConvertJobRun: {
182
- path: "/sites/{siteId}/ai/playground/page-convert/jobs/{jobId}/run",
216
+ pauseAppointmentReservation: {
217
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/pause",
183
218
  method: "POST",
184
219
  auth: "user",
185
- responseKind: "json"
186
- },
187
- aiPlaygroundPageConvertJobEvents: {
188
- path: "/sites/{siteId}/ai/playground/page-convert/jobs/{jobId}/events",
189
- method: "GET",
190
- auth: "user",
191
- responseKind: "json"
220
+ responseKind: "json",
221
+ errors: [
222
+ "resource:not_found",
223
+ "resource:conflict",
224
+ "server:internal_error"
225
+ ]
192
226
  },
193
- aiGenerateSite: {
194
- path: "/sites/{siteId}/ai/generate",
227
+ resumeAppointmentReservation: {
228
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/resume",
195
229
  method: "POST",
196
230
  auth: "user",
197
231
  responseKind: "json",
198
- demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
199
- },
200
- getOnboardingPreviewStatus: {
201
- path: "/public/sites/{siteId}/onboarding/preview-status",
202
- method: "GET",
203
- auth: "public",
204
- errors: [],
205
- responseKind: "json"
206
- },
207
- listOnboardingPreviewThemes: {
208
- path: "/public/sites/{siteId}/onboarding/themes",
209
- method: "GET",
210
- auth: "public",
211
- errors: [],
212
- responseKind: "json"
232
+ errors: [
233
+ "resource:not_found",
234
+ "resource:conflict",
235
+ "server:internal_error"
236
+ ]
213
237
  },
214
- acknowledgeLaunchRequirement: {
215
- path: "/sites/{siteId}/launch/acknowledge-requirement",
238
+ endAppointmentReservation: {
239
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/end",
216
240
  method: "POST",
217
241
  auth: "user",
218
- errors: [],
219
242
  responseKind: "json",
220
- demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
243
+ errors: [
244
+ "validation:invalid_input",
245
+ "resource:not_found",
246
+ "resource:conflict",
247
+ "server:internal_error"
248
+ ]
221
249
  },
222
- goLiveSite: {
223
- path: "/sites/{siteId}/launch/go-live",
250
+ previewAppointmentReservationRun: {
251
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/run-preview",
224
252
  method: "POST",
225
253
  auth: "user",
226
- errors: [],
227
- responseKind: "json"
254
+ responseKind: "json",
255
+ errors: [
256
+ "validation:invalid_input",
257
+ "resource:not_found",
258
+ "resource:conflict",
259
+ "server:internal_error"
260
+ ]
228
261
  },
229
- resendOnboardingPreviewConfirmation: {
230
- path: "/public/sites/{siteId}/onboarding/resend-confirmation",
262
+ createAppointmentReservationRun: {
263
+ path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/runs",
231
264
  method: "POST",
232
- auth: "public",
233
- errors: [],
234
- responseKind: "json"
265
+ auth: "user",
266
+ responseKind: "json",
267
+ errors: [
268
+ "validation:invalid_input",
269
+ "resource:not_found",
270
+ "resource:conflict",
271
+ "server:internal_error"
272
+ ]
235
273
  },
236
- createPublicOnboardingAttempt: {
237
- path: "/public/onboarding/attempts",
274
+ createTeamMemberProfile: {
275
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
238
276
  method: "POST",
239
- auth: "public",
240
- errors: [],
241
- responseKind: "json"
242
- },
243
- createPublicOnboardingLogoUploadUrl: {
244
- path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
245
- method: "POST",
246
- auth: "public",
247
- errors: [],
248
- responseKind: "json"
249
- },
250
- uploadPublicOnboardingLogo: {
251
- path: "/public/onboarding/attempts/{attemptToken}/logo",
252
- method: "POST",
253
- auth: "public",
254
- errors: [],
255
- responseKind: "json"
256
- },
257
- getPublicOnboardingAttempt: {
258
- path: "/public/onboarding/attempts/{attemptToken}",
259
- method: "GET",
260
- auth: "public",
261
- errors: [],
262
- responseKind: "json"
277
+ auth: "user",
278
+ responseKind: "json",
279
+ errors: [
280
+ "validation:invalid_input",
281
+ "resource:not_found",
282
+ "resource:conflict",
283
+ "server:internal_error"
284
+ ]
263
285
  },
264
- getPublicOnboardingAttemptProgress: {
265
- path: "/public/onboarding/attempts/{attemptToken}/status",
266
- method: "GET",
267
- auth: "public",
268
- errors: [],
269
- responseKind: "json"
286
+ updateTeamMemberProfilePolicy: {
287
+ path: "/sites/{siteId}/bookings/resources/profile-policy",
288
+ method: "PUT",
289
+ auth: "user",
290
+ responseKind: "json",
291
+ errors: ["validation:invalid_input", "server:internal_error"]
270
292
  },
271
- updatePublicOnboardingAttempt: {
272
- path: "/public/onboarding/attempts/{attemptToken}",
273
- method: "PATCH",
274
- auth: "public",
275
- errors: [],
276
- responseKind: "json"
293
+ updateTeamMemberProfileContent: {
294
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
295
+ method: "PUT",
296
+ tags: [
297
+ "site-{siteId}",
298
+ "content-{siteId}-team-member",
299
+ "content-entry-{entryId}"
300
+ ],
301
+ auth: "user",
302
+ responseKind: "json",
303
+ errors: [
304
+ "validation:invalid_input",
305
+ "resource:not_found",
306
+ "resource:conflict",
307
+ "server:internal_error"
308
+ ]
277
309
  },
278
- runPublicOnboardingAttempt: {
279
- path: "/public/onboarding/attempts/{attemptToken}/run",
310
+ publishTeamMemberProfile: {
311
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
280
312
  method: "POST",
281
- auth: "public",
282
- errors: [],
283
- responseKind: "json"
313
+ tags: [
314
+ "site-{siteId}",
315
+ "content-{siteId}-team-member",
316
+ "content-entry-{entryId}"
317
+ ],
318
+ auth: "user",
319
+ responseKind: "json",
320
+ errors: [
321
+ "validation:invalid_input",
322
+ "resource:not_found",
323
+ "server:internal_error"
324
+ ]
284
325
  },
285
- aiSiteWizardSuggestGoals: {
286
- path: "/sites/{siteId}/ai/site-wizard/goals",
326
+ discardTeamMemberProfileDraft: {
327
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
287
328
  method: "POST",
329
+ tags: [
330
+ "site-{siteId}",
331
+ "content-{siteId}-team-member",
332
+ "content-entry-{entryId}"
333
+ ],
288
334
  auth: "user",
289
335
  responseKind: "json",
290
- demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
336
+ errors: [
337
+ "validation:invalid_input",
338
+ "resource:not_found",
339
+ "resource:conflict",
340
+ "server:internal_error"
341
+ ]
291
342
  },
292
- aiSiteWizardIntakeTriage: {
293
- path: "/sites/{siteId}/ai/site-wizard/intake-triage",
343
+ unpublishTeamMemberProfile: {
344
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
294
345
  method: "POST",
346
+ tags: [
347
+ "site-{siteId}",
348
+ "content-{siteId}-team-member",
349
+ "content-entry-{entryId}"
350
+ ],
295
351
  auth: "user",
296
352
  responseKind: "json",
297
- demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
353
+ errors: [
354
+ "validation:invalid_input",
355
+ "resource:not_found",
356
+ "resource:conflict",
357
+ "server:internal_error"
358
+ ]
298
359
  },
299
- aiSiteWizardTelemetry: {
300
- path: "/sites/{siteId}/ai/site-wizard/telemetry",
360
+ scheduleTeamMemberProfile: {
361
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
301
362
  method: "POST",
363
+ tags: [
364
+ "site-{siteId}",
365
+ "content-{siteId}-team-member",
366
+ "content-entry-{entryId}"
367
+ ],
302
368
  auth: "user",
303
- errors: [],
304
369
  responseKind: "json",
305
- demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
370
+ errors: [
371
+ "validation:invalid_input",
372
+ "resource:not_found",
373
+ "resource:conflict",
374
+ "server:internal_error"
375
+ ]
306
376
  },
307
- listGscPropertiesAdmin: {
308
- path: "/admin/seo/gsc/properties",
377
+ cancelScheduledTeamMemberProfile: {
378
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
379
+ method: "DELETE",
380
+ tags: [
381
+ "site-{siteId}",
382
+ "content-{siteId}-team-member",
383
+ "content-entry-{entryId}"
384
+ ],
385
+ auth: "user",
386
+ responseKind: "json",
387
+ errors: [
388
+ "validation:invalid_input",
389
+ "resource:not_found",
390
+ "resource:conflict",
391
+ "server:internal_error"
392
+ ]
393
+ },
394
+ updateTeamMemberProfileRouteMetadata: {
395
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
396
+ method: "PATCH",
397
+ tags: [
398
+ TAG_TEMPLATES.siteCollection,
399
+ TAG_TEMPLATES.siteRoutableContent,
400
+ TAG_TEMPLATES.routeById
401
+ ],
402
+ auth: "user",
403
+ responseKind: "json",
404
+ errors: [
405
+ "validation:invalid_input",
406
+ "resource:not_found",
407
+ "resource:conflict",
408
+ "server:internal_error"
409
+ ]
410
+ },
411
+ listAppointmentServices: {
412
+ path: "/sites/{siteId}/bookings/services",
309
413
  method: "GET",
310
- auth: "admin",
311
- errors: [],
414
+ auth: "user",
312
415
  responseKind: "json"
313
416
  },
314
- getPublicChallenge: {
315
- path: "/public/challenge",
417
+ exportAppointmentServicesCsv: {
418
+ path: "/sites/{siteId}/bookings/services/export.csv",
316
419
  method: "GET",
317
- auth: "public",
420
+ tags: [
421
+ "site-{siteId}",
422
+ "bookings",
423
+ "appointment-services-{siteId}"
424
+ ],
318
425
  errors: [],
319
- responseKind: "text"
426
+ auth: "user",
427
+ responseKind: "blob"
320
428
  },
321
- checkRedirect: {
322
- path: "/public/content/redirect",
323
- method: "GET",
324
- revalidate: 86400,
325
- tags: ["redirect"],
326
- errors: [],
327
- auth: "public",
328
- responseKind: "json"
429
+ createAppointmentService: {
430
+ path: "/sites/{siteId}/bookings/services",
431
+ method: "POST",
432
+ auth: "user",
433
+ responseKind: "json",
434
+ errors: ["validation:invalid_input", "server:internal_error"]
329
435
  },
330
- listRedirectRules: {
331
- path: "/sites/{siteId}/redirects",
436
+ getAppointmentService: {
437
+ path: "/sites/{siteId}/bookings/services/{serviceId}",
332
438
  method: "GET",
333
439
  auth: "user",
334
440
  responseKind: "json"
335
441
  },
336
- createRedirectRule: {
337
- path: "/sites/{siteId}/redirects",
338
- method: "POST",
339
- errors: ["validation:invalid_input", "resource:not_found"],
442
+ updateAppointmentService: {
443
+ path: "/sites/{siteId}/bookings/services/{serviceId}",
444
+ method: "PUT",
340
445
  auth: "user",
341
- responseKind: "json"
446
+ responseKind: "json",
447
+ errors: [
448
+ "validation:invalid_input",
449
+ "resource:not_found",
450
+ "server:internal_error"
451
+ ]
342
452
  },
343
- deleteRedirectRule: {
344
- path: "/sites/{siteId}/redirects/{ruleId}",
453
+ deleteAppointmentService: {
454
+ path: "/sites/{siteId}/bookings/services/{serviceId}",
345
455
  method: "DELETE",
346
- errors: ["resource:not_found"],
347
456
  auth: "user",
348
- responseKind: "json"
457
+ responseKind: "json",
458
+ errors: ["resource:not_found", "server:internal_error"]
349
459
  },
350
- listWebhooks: {
351
- path: "/sites/{siteId}/webhooks",
460
+ getAppointmentSetup: {
461
+ path: "/sites/{siteId}/bookings/appointment-setup",
352
462
  method: "GET",
353
- tags: ["site-{siteId}", "webhooks"],
354
463
  auth: "user",
355
- responseKind: "json"
464
+ responseKind: "json",
465
+ errors: ["server:internal_error"]
356
466
  },
357
- createWebhook: {
358
- path: "/sites/{siteId}/webhooks",
467
+ applyAppointmentSetup: {
468
+ path: "/sites/{siteId}/bookings/appointment-setup",
359
469
  method: "POST",
360
- tags: ["site-{siteId}", "webhooks"],
361
470
  auth: "user",
362
- responseKind: "json"
471
+ responseKind: "json",
472
+ errors: ["validation:invalid_input", "server:internal_error"]
363
473
  },
364
- getWebhook: {
365
- path: "/sites/{siteId}/webhooks/{webhookId}",
474
+ getAppointmentServicesReference: {
475
+ path: "/sites/{siteId}/bookings/services/reference",
366
476
  method: "GET",
367
- tags: ["site-{siteId}", "webhooks"],
368
477
  auth: "user",
369
478
  responseKind: "json"
370
479
  },
371
- updateWebhook: {
372
- path: "/sites/{siteId}/webhooks/{webhookId}",
373
- method: "PATCH",
374
- tags: ["site-{siteId}", "webhooks"],
480
+ getAppointmentResourcesReference: {
481
+ path: "/sites/{siteId}/bookings/resources/reference",
482
+ method: "GET",
375
483
  auth: "user",
376
484
  responseKind: "json"
377
485
  },
378
- deleteWebhook: {
379
- path: "/sites/{siteId}/webhooks/{webhookId}",
380
- method: "DELETE",
381
- tags: ["site-{siteId}", "webhooks"],
382
- auth: "user",
383
- responseKind: "json"
384
- },
385
- getSdkDeploymentHealth: {
386
- path: "/sites/{siteId}/sdk-deployment/health",
387
- method: "GET",
388
- tags: ["site-{siteId}", "webhooks"],
389
- auth: "user",
390
- errors: [],
391
- responseKind: "json"
392
- },
393
- setupSdkDeploymentRevalidationWebhook: {
394
- path: "/sites/{siteId}/sdk-deployment/revalidation-webhook",
395
- method: "POST",
396
- tags: ["site-{siteId}", "webhooks"],
397
- auth: "user",
398
- errors: ["validation:invalid_input", "resource:conflict"],
399
- responseKind: "json",
400
- demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
401
- },
402
- listSiteApiKeys: {
403
- path: "/sites/{siteId}/api-keys",
486
+ getResourceServices: {
487
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/services",
404
488
  method: "GET",
405
489
  auth: "user",
406
- tags: ["site-{siteId}", "api-keys"],
407
- responseKind: "json"
408
- },
409
- createSiteApiKey: {
410
- path: "/sites/{siteId}/api-keys",
411
- method: "POST",
412
- auth: "user",
413
- tags: ["site-{siteId}", "api-keys"],
414
490
  responseKind: "json"
415
491
  },
416
- revokeSiteApiKey: {
417
- path: "/sites/{siteId}/api-keys/{keyId}",
418
- method: "DELETE",
492
+ updateResourceServices: {
493
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/services",
494
+ method: "PUT",
419
495
  auth: "user",
420
- tags: ["site-{siteId}", "api-keys"],
421
496
  responseKind: "json"
422
497
  },
423
- getSitePreviewKey: {
424
- path: "/sites/{siteId}/api-keys/preview",
498
+ getServiceResources: {
499
+ path: "/sites/{siteId}/bookings/services/{serviceId}/resources",
425
500
  method: "GET",
426
501
  auth: "user",
427
- tags: [
428
- "site-{siteId}",
429
- "api-keys",
430
- "preview-key"
431
- ],
432
- responseKind: "json"
433
- },
434
- createSitePreviewKey: {
435
- path: "/sites/{siteId}/api-keys/preview",
436
- method: "POST",
437
- auth: "user",
438
- tags: [
439
- "site-{siteId}",
440
- "api-keys",
441
- "preview-key"
442
- ],
443
502
  responseKind: "json"
444
503
  },
445
- getSiteApiKeyAccessLogs: {
446
- path: "/sites/{siteId}/api-keys/access-logs",
447
- method: "GET",
504
+ updateServiceResources: {
505
+ path: "/sites/{siteId}/bookings/services/{serviceId}/resources",
506
+ method: "PUT",
448
507
  auth: "user",
449
- tags: [
450
- "site-{siteId}",
451
- "api-keys",
452
- "access-logs"
453
- ],
454
508
  responseKind: "json"
455
509
  },
456
- listManagementKeys: {
457
- path: "/sites/{siteId}/api-keys/management",
510
+ listAvailabilityRules: {
511
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/availability",
458
512
  method: "GET",
459
513
  auth: "user",
460
- tags: [
461
- "site-{siteId}",
462
- "api-keys",
463
- "management-keys"
464
- ],
465
- responseKind: "json"
466
- },
467
- createManagementKey: {
468
- path: "/sites/{siteId}/api-keys/management",
469
- method: "POST",
470
- auth: "user",
471
- tags: [
472
- "site-{siteId}",
473
- "api-keys",
474
- "management-keys"
475
- ],
476
- responseKind: "json"
477
- },
478
- revokeManagementKey: {
479
- path: "/sites/{siteId}/api-keys/management",
480
- method: "DELETE",
481
- auth: "user",
482
- tags: [
483
- "site-{siteId}",
484
- "api-keys",
485
- "management-keys"
486
- ],
487
- responseKind: "json"
514
+ responseKind: "json",
515
+ errors: ["resource:not_found", "server:internal_error"]
488
516
  },
489
- getBookingSettings: {
490
- path: "/sites/{siteId}/bookings/settings",
491
- method: "GET",
517
+ setWeeklyAvailability: {
518
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/weekly-availability",
519
+ method: "PUT",
492
520
  auth: "user",
493
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings],
494
- responseKind: "json"
521
+ responseKind: "json",
522
+ errors: [
523
+ "validation:invalid_input",
524
+ "resource:not_found",
525
+ "server:internal_error"
526
+ ]
495
527
  },
496
- updateBookingSettings: {
497
- path: "/sites/{siteId}/bookings/settings",
528
+ setServiceSpecificAvailability: {
529
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/service-availability",
498
530
  method: "PUT",
499
531
  auth: "user",
500
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings],
501
532
  responseKind: "json",
502
533
  errors: [
503
534
  "validation:invalid_input",
504
- "auth:forbidden",
505
- "resource:conflict",
535
+ "resource:not_found",
506
536
  "server:internal_error"
507
537
  ]
508
538
  },
509
- listBookingClosures: {
510
- path: "/sites/{siteId}/bookings/closures",
511
- method: "GET",
539
+ deleteServiceSpecificAvailability: {
540
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/service-availability/{scheduleId}",
541
+ method: "DELETE",
512
542
  auth: "user",
513
- tags: [
514
- "site-{siteId}",
515
- "bookings",
516
- "closures-{siteId}"
517
- ],
518
543
  responseKind: "json",
519
- errors: ["auth:forbidden", "server:internal_error"]
544
+ errors: ["resource:not_found", "server:internal_error"]
520
545
  },
521
- previewBookingClosure: {
522
- path: "/sites/{siteId}/bookings/closures/preview",
523
- method: "POST",
546
+ listBlackouts: {
547
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts",
548
+ method: "GET",
524
549
  auth: "user",
525
- tags: [
526
- "site-{siteId}",
527
- "bookings",
528
- "closures-{siteId}"
529
- ],
530
550
  responseKind: "json",
531
- errors: [
532
- "validation:invalid_input",
533
- "auth:forbidden",
534
- "server:internal_error"
535
- ]
551
+ errors: ["resource:not_found", "server:internal_error"]
536
552
  },
537
- createBookingClosure: {
538
- path: "/sites/{siteId}/bookings/closures",
553
+ createBlackout: {
554
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts",
539
555
  method: "POST",
540
556
  auth: "user",
541
- tags: [
542
- "site-{siteId}",
543
- "bookings",
544
- "closures-{siteId}"
545
- ],
546
557
  responseKind: "json",
547
558
  errors: [
548
559
  "validation:invalid_input",
549
- "resource:conflict",
550
- "auth:forbidden",
560
+ "resource:not_found",
551
561
  "server:internal_error"
552
562
  ]
553
563
  },
554
- getBookingClosure: {
555
- path: "/sites/{siteId}/bookings/closures/{closureId}",
556
- method: "GET",
557
- auth: "user",
558
- tags: [
559
- "site-{siteId}",
560
- "bookings",
561
- "closures-{siteId}"
562
- ],
563
- responseKind: "json",
564
- errors: ["resource:not_found", "server:internal_error"]
565
- },
566
- deleteBookingClosure: {
567
- path: "/sites/{siteId}/bookings/closures/{closureId}",
564
+ deleteBlackout: {
565
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts/{blackoutId}",
568
566
  method: "DELETE",
569
567
  auth: "user",
570
- tags: [
571
- "site-{siteId}",
572
- "bookings",
573
- "closures-{siteId}"
574
- ],
575
568
  responseKind: "json",
576
569
  errors: ["resource:not_found", "server:internal_error"]
577
570
  },
578
- opsListUpcomingEventOccurrences: {
579
- path: "/ops/sites/{siteId}/events",
580
- method: "GET",
581
- auth: "user",
582
- responseKind: "json"
583
- },
584
- opsListOccurrenceAttendees: {
585
- path: "/ops/sites/{siteId}/events/{occurrenceId}/attendees",
571
+ getCalendarStatus: {
572
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
586
573
  method: "GET",
587
574
  auth: "user",
588
- responseKind: "json"
575
+ responseKind: "json",
576
+ errors: ["auth:forbidden", "server:internal_error"]
589
577
  },
590
- opsValidateEventTicket: {
591
- path: "/ops/sites/{siteId}/events/tickets/validate",
592
- method: "POST",
578
+ updateCalendarPreferences: {
579
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
580
+ method: "PUT",
593
581
  auth: "user",
594
582
  responseKind: "json",
595
- demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
596
583
  errors: [
597
584
  "validation:invalid_input",
598
585
  "auth:forbidden",
@@ -600,102 +587,303 @@ const API_ENDPOINTS$1 = {
600
587
  "server:internal_error"
601
588
  ]
602
589
  },
603
- opsUpdateEventAttendeeCheckin: {
604
- path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/checkin",
605
- method: "POST",
590
+ disconnectCalendar: {
591
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
592
+ method: "DELETE",
606
593
  auth: "user",
607
594
  responseKind: "json",
608
- demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
609
595
  errors: [
610
- "validation:invalid_input",
611
596
  "auth:forbidden",
612
597
  "resource:not_found",
613
598
  "server:internal_error"
614
599
  ]
615
600
  },
616
- opsGetEventAttendeeDetails: {
617
- path: "/ops/sites/{siteId}/events/attendees/{attendeeId}",
601
+ getResourceCalendarFeed: {
602
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
618
603
  method: "GET",
619
604
  auth: "user",
620
- responseKind: "json"
621
- },
622
- opsCancelEventAttendee: {
623
- path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/cancel",
624
- method: "POST",
625
- auth: "user",
626
605
  responseKind: "json",
627
- demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
628
606
  errors: [
629
- "validation:invalid_input",
630
607
  "auth:forbidden",
631
608
  "resource:not_found",
632
- "resource:conflict",
633
609
  "server:internal_error"
634
610
  ]
635
611
  },
636
- getEventAttendeeDetails: {
637
- path: "/sites/{siteId}/bookings/event-attendees/{attendeeId}",
638
- method: "GET",
639
- auth: "user",
640
- responseKind: "json",
641
- errors: []
642
- },
643
- cancelEventAttendee: {
644
- path: "/sites/{siteId}/bookings/event-attendees/{attendeeId}/cancel",
612
+ regenerateResourceCalendarFeed: {
613
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
645
614
  method: "POST",
646
615
  auth: "user",
647
616
  responseKind: "json",
648
617
  errors: [
649
- "validation:invalid_input",
650
618
  "auth:forbidden",
651
619
  "resource:not_found",
652
- "resource:conflict",
653
620
  "server:internal_error"
654
621
  ]
655
622
  },
656
- opsRefundEventAttendee: {
657
- path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/refund",
658
- method: "POST",
623
+ revokeResourceCalendarFeed: {
624
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
625
+ method: "DELETE",
659
626
  auth: "user",
660
627
  responseKind: "json",
661
- demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
662
628
  errors: [
663
- "validation:invalid_input",
664
629
  "auth:forbidden",
665
630
  "resource:not_found",
666
- "resource:conflict",
667
631
  "server:internal_error"
668
632
  ]
669
633
  },
670
- getEmailSettings: {
671
- path: "/sites/{siteId}/settings/emails",
672
- method: "GET",
673
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
634
+ getVenueCalendarFeed: {
635
+ path: "/sites/{siteId}/bookings/venues/{venueId}/calendar/feed",
636
+ method: "GET",
637
+ auth: "user",
638
+ responseKind: "json",
639
+ errors: [
640
+ "auth:forbidden",
641
+ "resource:not_found",
642
+ "server:internal_error"
643
+ ]
644
+ },
645
+ regenerateVenueCalendarFeed: {
646
+ path: "/sites/{siteId}/bookings/venues/{venueId}/calendar/feed",
647
+ method: "POST",
648
+ auth: "user",
649
+ responseKind: "json",
650
+ errors: [
651
+ "auth:forbidden",
652
+ "resource:not_found",
653
+ "server:internal_error"
654
+ ]
655
+ },
656
+ revokeVenueCalendarFeed: {
657
+ path: "/sites/{siteId}/bookings/venues/{venueId}/calendar/feed",
658
+ method: "DELETE",
659
+ auth: "user",
660
+ responseKind: "json",
661
+ errors: [
662
+ "auth:forbidden",
663
+ "resource:not_found",
664
+ "server:internal_error"
665
+ ]
666
+ },
667
+ googleCalendarAuthorize: {
668
+ path: "/sites/{siteId}/bookings/calendar/google/authorize",
669
+ method: "GET",
670
+ auth: "user",
671
+ responseKind: "void"
672
+ },
673
+ googleCalendarCallback: {
674
+ path: "/bookings/calendar/google/callback",
675
+ method: "GET",
676
+ auth: "user",
677
+ responseKind: "void"
678
+ },
679
+ getAvailableSlots: {
680
+ path: "/sites/{siteId}/bookings/availability/slots",
681
+ method: "GET",
674
682
  auth: "user",
675
683
  responseKind: "json"
676
684
  },
677
- updateEmailSettings: {
678
- path: "/sites/{siteId}/settings/emails",
685
+ listAppointments: {
686
+ path: "/sites/{siteId}/bookings/appointments",
687
+ method: "GET",
688
+ auth: "user",
689
+ responseKind: "json"
690
+ },
691
+ exportBookingAppointmentsCsv: {
692
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
693
+ method: "GET",
694
+ auth: "user",
695
+ errors: [],
696
+ responseKind: "blob"
697
+ },
698
+ createAppointment: {
699
+ path: "/sites/{siteId}/bookings/appointments",
700
+ method: "POST",
701
+ auth: "user",
702
+ responseKind: "json"
703
+ },
704
+ upsertBookingRequirementConfig: {
705
+ path: "/sites/{siteId}/bookings/requirements/config",
679
706
  method: "PUT",
680
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
707
+ auth: "user",
708
+ responseKind: "json",
709
+ errors: [
710
+ "validation:invalid_input",
711
+ "resource:not_found",
712
+ "server:internal_error"
713
+ ]
714
+ },
715
+ cancelAppointment: {
716
+ path: "/sites/{siteId}/bookings/appointments/{appointmentId}/cancel",
717
+ method: "POST",
681
718
  auth: "user",
682
719
  responseKind: "json"
683
720
  },
684
- sendTestEmail: {
685
- path: "/sites/{siteId}/settings/emails/test",
721
+ rescheduleAppointment: {
722
+ path: "/sites/{siteId}/bookings/appointments/{appointmentId}/reschedule",
686
723
  method: "POST",
687
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
688
724
  auth: "user",
689
725
  responseKind: "json",
690
- demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
726
+ errors: [
727
+ "validation:invalid_input",
728
+ "resource:not_found",
729
+ "auth:forbidden",
730
+ "resource:conflict",
731
+ "server:internal_error"
732
+ ]
733
+ }
734
+ });
735
+ //#endregion
736
+ //#region ../api/src/courseEndpointDefinitions.ts
737
+ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
738
+ listCourses: {
739
+ path: "/sites/{siteId}/bookings/courses",
740
+ method: "GET",
741
+ auth: "user",
742
+ responseKind: "json"
691
743
  },
692
- previewEmailTemplate: {
693
- path: "/sites/{siteId}/settings/emails/preview",
744
+ exportCoursesCsv: {
745
+ path: "/sites/{siteId}/bookings/courses/export.csv",
746
+ method: "GET",
747
+ tags: [
748
+ "site-{siteId}",
749
+ "bookings",
750
+ "courses-{siteId}"
751
+ ],
752
+ errors: [],
753
+ auth: "user",
754
+ responseKind: "blob"
755
+ },
756
+ createCourse: {
757
+ path: "/sites/{siteId}/bookings/courses",
694
758
  method: "POST",
695
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
759
+ auth: "user",
760
+ responseKind: "json",
761
+ errors: [
762
+ "validation:invalid_input",
763
+ "resource:not_found",
764
+ "resource:already_exists",
765
+ "resource:conflict",
766
+ "server:internal_error"
767
+ ]
768
+ },
769
+ getCourse: {
770
+ path: "/sites/{siteId}/bookings/courses/{courseId}",
771
+ method: "GET",
772
+ auth: "user",
773
+ responseKind: "json"
774
+ },
775
+ updateCourse: {
776
+ path: "/sites/{siteId}/bookings/courses/{courseId}",
777
+ method: "PATCH",
778
+ auth: "user",
779
+ responseKind: "json",
780
+ errors: [
781
+ "validation:invalid_input",
782
+ "resource:not_found",
783
+ "resource:conflict",
784
+ "server:internal_error"
785
+ ]
786
+ },
787
+ deleteCourse: {
788
+ path: "/sites/{siteId}/bookings/courses/{courseId}",
789
+ method: "DELETE",
790
+ auth: "user",
791
+ responseKind: "json",
792
+ errors: [
793
+ "validation:invalid_input",
794
+ "resource:not_found",
795
+ "resource:conflict",
796
+ "server:internal_error"
797
+ ]
798
+ },
799
+ deleteEventOffering: {
800
+ path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
801
+ method: "DELETE",
802
+ auth: "user",
803
+ responseKind: "json",
804
+ errors: [
805
+ "validation:invalid_input",
806
+ "resource:not_found",
807
+ "resource:conflict",
808
+ "server:internal_error"
809
+ ]
810
+ },
811
+ duplicateCourse: {
812
+ path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
813
+ method: "POST",
814
+ auth: "user",
815
+ responseKind: "json",
816
+ errors: [
817
+ "validation:invalid_input",
818
+ "resource:not_found",
819
+ "resource:already_exists",
820
+ "server:internal_error"
821
+ ]
822
+ },
823
+ changeCourseContentOwnership: {
824
+ path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
825
+ method: "POST",
826
+ auth: "user",
827
+ responseKind: "json",
828
+ errors: [
829
+ "validation:invalid_input",
830
+ "resource:not_found",
831
+ "resource:conflict",
832
+ "server:internal_error"
833
+ ]
834
+ },
835
+ addCourseEnrollment: {
836
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
837
+ method: "POST",
838
+ auth: "user",
839
+ responseKind: "json",
840
+ errors: [
841
+ "validation:invalid_input",
842
+ "resource:not_found",
843
+ "resource:conflict",
844
+ "server:internal_error"
845
+ ]
846
+ },
847
+ listCourseEnrollments: {
848
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
849
+ method: "GET",
696
850
  auth: "user",
697
851
  responseKind: "json"
698
852
  },
853
+ exportCourseEnrollmentsCsv: {
854
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
855
+ method: "GET",
856
+ auth: "user",
857
+ errors: [],
858
+ responseKind: "blob"
859
+ },
860
+ exportCourseWaitlistCsv: {
861
+ path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
862
+ method: "GET",
863
+ tags: [
864
+ "site-{siteId}",
865
+ "bookings",
866
+ "courses-{courseId}"
867
+ ],
868
+ auth: "user",
869
+ responseKind: "blob",
870
+ errors: []
871
+ },
872
+ updateCourseEnrollment: {
873
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
874
+ method: "PATCH",
875
+ auth: "user",
876
+ responseKind: "json",
877
+ errors: [
878
+ "validation:invalid_input",
879
+ "resource:not_found",
880
+ "server:internal_error"
881
+ ]
882
+ }
883
+ });
884
+ //#endregion
885
+ //#region ../api/src/newsletterEndpointDefinitions.ts
886
+ const NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
699
887
  getNewsletterSettings: {
700
888
  path: "/sites/{siteId}/newsletter/settings",
701
889
  method: "GET",
@@ -1048,770 +1236,701 @@ const API_ENDPOINTS$1 = {
1048
1236
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
1049
1237
  auth: "user",
1050
1238
  responseKind: "json"
1051
- },
1052
- listAppointmentResources: {
1053
- path: "/sites/{siteId}/bookings/resources",
1239
+ }
1240
+ });
1241
+ //#endregion
1242
+ //#region ../api/src/publicWholeSeriesEndpointDefinitions.ts
1243
+ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1244
+ listPublicWholeSeriesOfferings: {
1245
+ path: "/public/sites/{siteId}/dated-offerings/whole-series",
1054
1246
  method: "GET",
1055
- auth: "user",
1247
+ revalidate: 60,
1248
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings],
1249
+ errors: ["server:internal_error"],
1250
+ auth: "public",
1056
1251
  responseKind: "json"
1057
1252
  },
1058
- createAppointmentResource: {
1059
- path: "/sites/{siteId}/bookings/resources",
1060
- method: "POST",
1061
- auth: "user",
1062
- responseKind: "json",
1063
- errors: [
1064
- "validation:invalid_input",
1065
- "billing:plan_limit_exceeded",
1066
- "server:internal_error"
1067
- ]
1253
+ getPublicWholeSeriesOffering: {
1254
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/{eventSeriesId}",
1255
+ method: "GET",
1256
+ revalidate: 60,
1257
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings],
1258
+ errors: ["resource:not_found", "server:internal_error"],
1259
+ auth: "public",
1260
+ responseKind: "json"
1068
1261
  },
1069
- createAppointmentResourceWithAccountAccess: {
1070
- path: "/sites/{siteId}/bookings/resources/account-access",
1262
+ registerForWholeSeries: {
1263
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
1071
1264
  method: "POST",
1072
- auth: "user",
1073
- responseKind: "json",
1265
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1074
1266
  errors: [
1075
- "validation:invalid_input",
1267
+ "auth:unauthenticated",
1076
1268
  "auth:forbidden",
1077
- "billing:plan_limit_exceeded",
1078
- "resource:conflict",
1269
+ "validation:invalid_input",
1079
1270
  "resource:not_found",
1271
+ "resource:conflict",
1272
+ "resource:already_exists",
1080
1273
  "server:internal_error"
1081
- ]
1082
- },
1083
- getAppointmentResource: {
1084
- path: "/sites/{siteId}/bookings/resources/{resourceId}",
1085
- method: "GET",
1086
- auth: "user",
1274
+ ],
1275
+ auth: "public",
1087
1276
  responseKind: "json"
1088
1277
  },
1089
- updateAppointmentResource: {
1090
- path: "/sites/{siteId}/bookings/resources/{resourceId}",
1091
- method: "PUT",
1092
- auth: "user",
1093
- responseKind: "json",
1278
+ checkWholeSeriesEligibility: {
1279
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
1280
+ method: "POST",
1281
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1094
1282
  errors: [
1095
- "validation:invalid_input",
1283
+ "auth:unauthenticated",
1096
1284
  "resource:not_found",
1285
+ "resource:conflict",
1097
1286
  "server:internal_error"
1098
- ]
1099
- },
1100
- removeAppointmentResource: {
1101
- path: "/sites/{siteId}/bookings/resources/{resourceId}",
1102
- method: "DELETE",
1103
- auth: "user",
1104
- responseKind: "json",
1105
- errors: ["resource:not_found", "server:internal_error"]
1106
- },
1107
- listAppointmentReservations: {
1108
- path: "/sites/{siteId}/bookings/appointment-reservations",
1109
- method: "GET",
1110
- auth: "user",
1111
- responseKind: "json",
1112
- errors: []
1287
+ ],
1288
+ auth: "public",
1289
+ responseKind: "json"
1113
1290
  },
1114
- createAppointmentReservation: {
1115
- path: "/sites/{siteId}/bookings/appointment-reservations",
1291
+ createWholeSeriesCheckout: {
1292
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
1116
1293
  method: "POST",
1117
- auth: "user",
1294
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1295
+ auth: "public",
1118
1296
  responseKind: "json",
1119
1297
  errors: [
1298
+ "auth:unauthenticated",
1120
1299
  "validation:invalid_input",
1121
1300
  "resource:not_found",
1122
1301
  "resource:conflict",
1123
1302
  "server:internal_error"
1124
1303
  ]
1125
1304
  },
1126
- getAppointmentReservation: {
1127
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}",
1305
+ getWholeSeriesRegistrationStatus: {
1306
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
1128
1307
  method: "GET",
1308
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1309
+ errors: ["resource:not_found", "server:internal_error"],
1310
+ auth: "public",
1311
+ responseKind: "json"
1312
+ }
1313
+ });
1314
+ const API_ENDPOINTS$1 = {
1315
+ aiContentUpdateChat: {
1316
+ path: "/ai/content-update-chat",
1317
+ method: "POST",
1129
1318
  auth: "user",
1130
- responseKind: "json",
1131
- errors: ["resource:not_found", "server:internal_error"]
1319
+ responseKind: "stream"
1132
1320
  },
1133
- updateAppointmentReservation: {
1134
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}",
1135
- method: "PUT",
1321
+ aiChat: {
1322
+ path: "/ai/chat",
1323
+ method: "POST",
1136
1324
  auth: "user",
1137
- responseKind: "json",
1138
- errors: [
1139
- "validation:invalid_input",
1140
- "resource:not_found",
1141
- "resource:conflict",
1142
- "server:internal_error"
1143
- ]
1325
+ responseKind: "stream"
1144
1326
  },
1145
- pauseAppointmentReservation: {
1146
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/pause",
1327
+ aiDesignerThemeApply: {
1328
+ path: "/sites/{siteId}/ai/designer/theme/apply",
1147
1329
  method: "POST",
1330
+ tags: [TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme],
1148
1331
  auth: "user",
1149
- responseKind: "json",
1150
- errors: [
1151
- "resource:not_found",
1152
- "resource:conflict",
1153
- "server:internal_error"
1154
- ]
1332
+ responseKind: "json"
1155
1333
  },
1156
- resumeAppointmentReservation: {
1157
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/resume",
1334
+ aiDesignerPageOpsApply: {
1335
+ path: "/sites/{siteId}/ai/designer/page/apply",
1158
1336
  method: "POST",
1337
+ tags: [TAG_TEMPLATES.siteCollection],
1159
1338
  auth: "user",
1160
- responseKind: "json",
1161
- errors: [
1162
- "resource:not_found",
1163
- "resource:conflict",
1164
- "server:internal_error"
1165
- ]
1339
+ responseKind: "json"
1166
1340
  },
1167
- endAppointmentReservation: {
1168
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/end",
1341
+ applySeoChanges: {
1342
+ path: "/seo/apply",
1169
1343
  method: "POST",
1170
1344
  auth: "user",
1171
- responseKind: "json",
1172
- errors: [
1173
- "validation:invalid_input",
1174
- "resource:not_found",
1175
- "resource:conflict",
1176
- "server:internal_error"
1177
- ]
1345
+ responseKind: "json"
1178
1346
  },
1179
- previewAppointmentReservationRun: {
1180
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/run-preview",
1347
+ aiCreateBriefChat: {
1348
+ path: "/ai/chat/create-brief",
1181
1349
  method: "POST",
1182
1350
  auth: "user",
1183
- responseKind: "json",
1184
- errors: [
1185
- "validation:invalid_input",
1186
- "resource:not_found",
1187
- "resource:conflict",
1188
- "server:internal_error"
1189
- ]
1351
+ responseKind: "json"
1190
1352
  },
1191
- createAppointmentReservationRun: {
1192
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/runs",
1353
+ aiPatchDryRun: {
1354
+ path: "/ai/patch/dry-run",
1193
1355
  method: "POST",
1194
1356
  auth: "user",
1195
- responseKind: "json",
1196
- errors: [
1197
- "validation:invalid_input",
1198
- "resource:not_found",
1199
- "resource:conflict",
1200
- "server:internal_error"
1201
- ]
1357
+ responseKind: "json"
1202
1358
  },
1203
- createTeamMemberProfile: {
1204
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
1359
+ aiPatchApply: {
1360
+ path: "/ai/patch/apply",
1205
1361
  method: "POST",
1206
1362
  auth: "user",
1207
- responseKind: "json",
1208
- errors: [
1209
- "validation:invalid_input",
1210
- "resource:not_found",
1211
- "resource:conflict",
1212
- "server:internal_error"
1213
- ]
1363
+ responseKind: "json"
1214
1364
  },
1215
- updateTeamMemberProfilePolicy: {
1216
- path: "/sites/{siteId}/bookings/resources/profile-policy",
1217
- method: "PUT",
1365
+ aiPlaygroundProposeMulti: {
1366
+ path: "/sites/{siteId}/ai/playground/propose-multi",
1367
+ method: "POST",
1218
1368
  auth: "user",
1219
- responseKind: "json",
1220
- errors: ["validation:invalid_input", "server:internal_error"]
1369
+ responseKind: "stream"
1221
1370
  },
1222
- updateTeamMemberProfileContent: {
1223
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
1224
- method: "PUT",
1225
- tags: [
1226
- "site-{siteId}",
1227
- "content-{siteId}-team-member",
1228
- "content-entry-{entryId}"
1229
- ],
1371
+ aiPlaygroundProposeMultiGet: {
1372
+ path: "/sites/{siteId}/ai/playground/propose-multi",
1373
+ method: "GET",
1230
1374
  auth: "user",
1231
- responseKind: "json",
1232
- errors: [
1233
- "validation:invalid_input",
1234
- "resource:not_found",
1235
- "resource:conflict",
1236
- "server:internal_error"
1237
- ]
1375
+ responseKind: "stream"
1238
1376
  },
1239
- publishTeamMemberProfile: {
1240
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
1377
+ aiAssistantChatSite: {
1378
+ path: "/sites/{siteId}/ai/assistant/chat",
1241
1379
  method: "POST",
1242
- tags: [
1243
- "site-{siteId}",
1244
- "content-{siteId}-team-member",
1245
- "content-entry-{entryId}"
1246
- ],
1247
1380
  auth: "user",
1248
- responseKind: "json",
1249
- errors: [
1250
- "validation:invalid_input",
1251
- "resource:not_found",
1252
- "server:internal_error"
1253
- ]
1381
+ responseKind: "stream"
1254
1382
  },
1255
- discardTeamMemberProfileDraft: {
1256
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
1383
+ aiDesignerChat: {
1384
+ path: "/sites/{siteId}/ai/designer/chat",
1257
1385
  method: "POST",
1258
- tags: [
1259
- "site-{siteId}",
1260
- "content-{siteId}-team-member",
1261
- "content-entry-{entryId}"
1262
- ],
1263
1386
  auth: "user",
1264
- responseKind: "json",
1265
- errors: [
1266
- "validation:invalid_input",
1267
- "resource:not_found",
1268
- "resource:conflict",
1269
- "server:internal_error"
1270
- ]
1387
+ responseKind: "stream"
1271
1388
  },
1272
- unpublishTeamMemberProfile: {
1273
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
1389
+ aiPlaygroundPageConvert: {
1390
+ path: "/sites/{siteId}/ai/playground/page-convert",
1274
1391
  method: "POST",
1275
- tags: [
1276
- "site-{siteId}",
1277
- "content-{siteId}-team-member",
1278
- "content-entry-{entryId}"
1279
- ],
1280
1392
  auth: "user",
1281
- responseKind: "json",
1282
- errors: [
1283
- "validation:invalid_input",
1284
- "resource:not_found",
1285
- "resource:conflict",
1286
- "server:internal_error"
1287
- ]
1393
+ responseKind: "json"
1288
1394
  },
1289
- scheduleTeamMemberProfile: {
1290
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
1395
+ aiPlaygroundPageConvertJobsCreate: {
1396
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs",
1291
1397
  method: "POST",
1292
- tags: [
1293
- "site-{siteId}",
1294
- "content-{siteId}-team-member",
1295
- "content-entry-{entryId}"
1296
- ],
1297
1398
  auth: "user",
1298
- responseKind: "json",
1299
- errors: [
1300
- "validation:invalid_input",
1301
- "resource:not_found",
1302
- "resource:conflict",
1303
- "server:internal_error"
1304
- ]
1399
+ responseKind: "json"
1305
1400
  },
1306
- cancelScheduledTeamMemberProfile: {
1307
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
1308
- method: "DELETE",
1309
- tags: [
1310
- "site-{siteId}",
1311
- "content-{siteId}-team-member",
1312
- "content-entry-{entryId}"
1313
- ],
1401
+ aiPlaygroundPageConvertJobsList: {
1402
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs",
1403
+ method: "GET",
1314
1404
  auth: "user",
1315
- responseKind: "json",
1316
- errors: [
1317
- "validation:invalid_input",
1318
- "resource:not_found",
1319
- "resource:conflict",
1320
- "server:internal_error"
1321
- ]
1405
+ responseKind: "json"
1322
1406
  },
1323
- updateTeamMemberProfileRouteMetadata: {
1324
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
1325
- method: "PATCH",
1326
- tags: [
1327
- TAG_TEMPLATES.siteCollection,
1328
- TAG_TEMPLATES.siteRoutableContent,
1329
- TAG_TEMPLATES.routeById
1330
- ],
1407
+ aiPlaygroundPageConvertJobGet: {
1408
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs/{jobId}",
1409
+ method: "GET",
1331
1410
  auth: "user",
1332
- responseKind: "json",
1333
- errors: [
1334
- "validation:invalid_input",
1335
- "resource:not_found",
1336
- "resource:conflict",
1337
- "server:internal_error"
1338
- ]
1411
+ responseKind: "json"
1339
1412
  },
1340
- listAppointmentServices: {
1341
- path: "/sites/{siteId}/bookings/services",
1342
- method: "GET",
1413
+ aiPlaygroundPageConvertJobRun: {
1414
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs/{jobId}/run",
1415
+ method: "POST",
1343
1416
  auth: "user",
1344
1417
  responseKind: "json"
1345
1418
  },
1346
- exportAppointmentServicesCsv: {
1347
- path: "/sites/{siteId}/bookings/services/export.csv",
1419
+ aiPlaygroundPageConvertJobEvents: {
1420
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs/{jobId}/events",
1348
1421
  method: "GET",
1349
- tags: [
1350
- "site-{siteId}",
1351
- "bookings",
1352
- "appointment-services-{siteId}"
1353
- ],
1354
- errors: [],
1355
1422
  auth: "user",
1356
- responseKind: "blob"
1423
+ responseKind: "json"
1357
1424
  },
1358
- createAppointmentService: {
1359
- path: "/sites/{siteId}/bookings/services",
1425
+ aiGenerateSite: {
1426
+ path: "/sites/{siteId}/ai/generate",
1360
1427
  method: "POST",
1361
1428
  auth: "user",
1362
1429
  responseKind: "json",
1363
- errors: ["validation:invalid_input", "server:internal_error"]
1430
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1364
1431
  },
1365
- getAppointmentService: {
1366
- path: "/sites/{siteId}/bookings/services/{serviceId}",
1432
+ getOnboardingPreviewStatus: {
1433
+ path: "/public/sites/{siteId}/onboarding/preview-status",
1434
+ method: "GET",
1435
+ auth: "public",
1436
+ errors: [],
1437
+ responseKind: "json"
1438
+ },
1439
+ listOnboardingPreviewThemes: {
1440
+ path: "/public/sites/{siteId}/onboarding/themes",
1367
1441
  method: "GET",
1442
+ auth: "public",
1443
+ errors: [],
1444
+ responseKind: "json"
1445
+ },
1446
+ acknowledgeLaunchRequirement: {
1447
+ path: "/sites/{siteId}/launch/acknowledge-requirement",
1448
+ method: "POST",
1449
+ auth: "user",
1450
+ errors: [],
1451
+ responseKind: "json",
1452
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
1453
+ },
1454
+ goLiveSite: {
1455
+ path: "/sites/{siteId}/launch/go-live",
1456
+ method: "POST",
1368
1457
  auth: "user",
1458
+ errors: [],
1459
+ responseKind: "json"
1460
+ },
1461
+ resendOnboardingPreviewConfirmation: {
1462
+ path: "/public/sites/{siteId}/onboarding/resend-confirmation",
1463
+ method: "POST",
1464
+ auth: "public",
1465
+ errors: [],
1466
+ responseKind: "json"
1467
+ },
1468
+ createPublicOnboardingAttempt: {
1469
+ path: "/public/onboarding/attempts",
1470
+ method: "POST",
1471
+ auth: "public",
1472
+ errors: [],
1473
+ responseKind: "json"
1474
+ },
1475
+ createPublicOnboardingLogoUploadUrl: {
1476
+ path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
1477
+ method: "POST",
1478
+ auth: "public",
1479
+ errors: [],
1480
+ responseKind: "json"
1481
+ },
1482
+ uploadPublicOnboardingLogo: {
1483
+ path: "/public/onboarding/attempts/{attemptToken}/logo",
1484
+ method: "POST",
1485
+ auth: "public",
1486
+ errors: [],
1487
+ responseKind: "json"
1488
+ },
1489
+ getPublicOnboardingAttempt: {
1490
+ path: "/public/onboarding/attempts/{attemptToken}",
1491
+ method: "GET",
1492
+ auth: "public",
1493
+ errors: [],
1494
+ responseKind: "json"
1495
+ },
1496
+ getPublicOnboardingAttemptProgress: {
1497
+ path: "/public/onboarding/attempts/{attemptToken}/status",
1498
+ method: "GET",
1499
+ auth: "public",
1500
+ errors: [],
1501
+ responseKind: "json"
1502
+ },
1503
+ updatePublicOnboardingAttempt: {
1504
+ path: "/public/onboarding/attempts/{attemptToken}",
1505
+ method: "PATCH",
1506
+ auth: "public",
1507
+ errors: [],
1369
1508
  responseKind: "json"
1370
1509
  },
1371
- updateAppointmentService: {
1372
- path: "/sites/{siteId}/bookings/services/{serviceId}",
1373
- method: "PUT",
1374
- auth: "user",
1375
- responseKind: "json",
1376
- errors: [
1377
- "validation:invalid_input",
1378
- "resource:not_found",
1379
- "server:internal_error"
1380
- ]
1510
+ runPublicOnboardingAttempt: {
1511
+ path: "/public/onboarding/attempts/{attemptToken}/run",
1512
+ method: "POST",
1513
+ auth: "public",
1514
+ errors: [],
1515
+ responseKind: "json"
1381
1516
  },
1382
- deleteAppointmentService: {
1383
- path: "/sites/{siteId}/bookings/services/{serviceId}",
1384
- method: "DELETE",
1517
+ aiSiteWizardSuggestGoals: {
1518
+ path: "/sites/{siteId}/ai/site-wizard/goals",
1519
+ method: "POST",
1385
1520
  auth: "user",
1386
1521
  responseKind: "json",
1387
- errors: ["resource:not_found", "server:internal_error"]
1522
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1388
1523
  },
1389
- getAppointmentSetup: {
1390
- path: "/sites/{siteId}/bookings/appointment-setup",
1391
- method: "GET",
1524
+ aiSiteWizardIntakeTriage: {
1525
+ path: "/sites/{siteId}/ai/site-wizard/intake-triage",
1526
+ method: "POST",
1392
1527
  auth: "user",
1393
1528
  responseKind: "json",
1394
- errors: ["server:internal_error"]
1529
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1395
1530
  },
1396
- applyAppointmentSetup: {
1397
- path: "/sites/{siteId}/bookings/appointment-setup",
1531
+ aiSiteWizardTelemetry: {
1532
+ path: "/sites/{siteId}/ai/site-wizard/telemetry",
1398
1533
  method: "POST",
1399
1534
  auth: "user",
1535
+ errors: [],
1400
1536
  responseKind: "json",
1401
- errors: ["validation:invalid_input", "server:internal_error"]
1537
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1402
1538
  },
1403
- getAppointmentServicesReference: {
1404
- path: "/sites/{siteId}/bookings/services/reference",
1539
+ listGscPropertiesAdmin: {
1540
+ path: "/admin/seo/gsc/properties",
1405
1541
  method: "GET",
1406
- auth: "user",
1542
+ auth: "admin",
1543
+ errors: [],
1407
1544
  responseKind: "json"
1408
1545
  },
1409
- getAppointmentResourcesReference: {
1410
- path: "/sites/{siteId}/bookings/resources/reference",
1546
+ getPublicChallenge: {
1547
+ path: "/public/challenge",
1411
1548
  method: "GET",
1412
- auth: "user",
1413
- responseKind: "json"
1549
+ auth: "public",
1550
+ errors: [],
1551
+ responseKind: "text"
1414
1552
  },
1415
- getResourceServices: {
1416
- path: "/sites/{siteId}/bookings/resources/{resourceId}/services",
1553
+ checkRedirect: {
1554
+ path: "/public/content/redirect",
1417
1555
  method: "GET",
1418
- auth: "user",
1419
- responseKind: "json"
1420
- },
1421
- updateResourceServices: {
1422
- path: "/sites/{siteId}/bookings/resources/{resourceId}/services",
1423
- method: "PUT",
1424
- auth: "user",
1556
+ revalidate: 86400,
1557
+ tags: ["redirect"],
1558
+ errors: [],
1559
+ auth: "public",
1425
1560
  responseKind: "json"
1426
1561
  },
1427
- getServiceResources: {
1428
- path: "/sites/{siteId}/bookings/services/{serviceId}/resources",
1562
+ listRedirectRules: {
1563
+ path: "/sites/{siteId}/redirects",
1429
1564
  method: "GET",
1430
1565
  auth: "user",
1431
1566
  responseKind: "json"
1432
1567
  },
1433
- updateServiceResources: {
1434
- path: "/sites/{siteId}/bookings/services/{serviceId}/resources",
1435
- method: "PUT",
1568
+ createRedirectRule: {
1569
+ path: "/sites/{siteId}/redirects",
1570
+ method: "POST",
1571
+ errors: ["validation:invalid_input", "resource:not_found"],
1436
1572
  auth: "user",
1437
1573
  responseKind: "json"
1438
1574
  },
1439
- listAvailabilityRules: {
1440
- path: "/sites/{siteId}/bookings/resources/{resourceId}/availability",
1441
- method: "GET",
1442
- auth: "user",
1443
- responseKind: "json",
1444
- errors: ["resource:not_found", "server:internal_error"]
1445
- },
1446
- setWeeklyAvailability: {
1447
- path: "/sites/{siteId}/bookings/resources/{resourceId}/weekly-availability",
1448
- method: "PUT",
1449
- auth: "user",
1450
- responseKind: "json",
1451
- errors: [
1452
- "validation:invalid_input",
1453
- "resource:not_found",
1454
- "server:internal_error"
1455
- ]
1456
- },
1457
- setServiceSpecificAvailability: {
1458
- path: "/sites/{siteId}/bookings/resources/{resourceId}/service-availability",
1459
- method: "PUT",
1460
- auth: "user",
1461
- responseKind: "json",
1462
- errors: [
1463
- "validation:invalid_input",
1464
- "resource:not_found",
1465
- "server:internal_error"
1466
- ]
1467
- },
1468
- deleteServiceSpecificAvailability: {
1469
- path: "/sites/{siteId}/bookings/resources/{resourceId}/service-availability/{scheduleId}",
1575
+ deleteRedirectRule: {
1576
+ path: "/sites/{siteId}/redirects/{ruleId}",
1470
1577
  method: "DELETE",
1578
+ errors: ["resource:not_found"],
1471
1579
  auth: "user",
1472
- responseKind: "json",
1473
- errors: ["resource:not_found", "server:internal_error"]
1580
+ responseKind: "json"
1474
1581
  },
1475
- listBlackouts: {
1476
- path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts",
1582
+ listWebhooks: {
1583
+ path: "/sites/{siteId}/webhooks",
1477
1584
  method: "GET",
1585
+ tags: ["site-{siteId}", "webhooks"],
1478
1586
  auth: "user",
1479
- responseKind: "json",
1480
- errors: ["resource:not_found", "server:internal_error"]
1587
+ responseKind: "json"
1481
1588
  },
1482
- createBlackout: {
1483
- path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts",
1589
+ createWebhook: {
1590
+ path: "/sites/{siteId}/webhooks",
1484
1591
  method: "POST",
1592
+ tags: ["site-{siteId}", "webhooks"],
1485
1593
  auth: "user",
1486
- responseKind: "json",
1487
- errors: [
1488
- "validation:invalid_input",
1489
- "resource:not_found",
1490
- "server:internal_error"
1491
- ]
1492
- },
1493
- deleteBlackout: {
1494
- path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts/{blackoutId}",
1495
- method: "DELETE",
1496
- auth: "user",
1497
- responseKind: "json",
1498
- errors: ["resource:not_found", "server:internal_error"]
1594
+ responseKind: "json"
1499
1595
  },
1500
- getCalendarStatus: {
1501
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
1596
+ getWebhook: {
1597
+ path: "/sites/{siteId}/webhooks/{webhookId}",
1502
1598
  method: "GET",
1599
+ tags: ["site-{siteId}", "webhooks"],
1503
1600
  auth: "user",
1504
- responseKind: "json",
1505
- errors: ["auth:forbidden", "server:internal_error"]
1601
+ responseKind: "json"
1506
1602
  },
1507
- updateCalendarPreferences: {
1508
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
1509
- method: "PUT",
1603
+ updateWebhook: {
1604
+ path: "/sites/{siteId}/webhooks/{webhookId}",
1605
+ method: "PATCH",
1606
+ tags: ["site-{siteId}", "webhooks"],
1510
1607
  auth: "user",
1511
- responseKind: "json",
1512
- errors: [
1513
- "validation:invalid_input",
1514
- "auth:forbidden",
1515
- "resource:not_found",
1516
- "server:internal_error"
1517
- ]
1608
+ responseKind: "json"
1518
1609
  },
1519
- disconnectCalendar: {
1520
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
1610
+ deleteWebhook: {
1611
+ path: "/sites/{siteId}/webhooks/{webhookId}",
1521
1612
  method: "DELETE",
1613
+ tags: ["site-{siteId}", "webhooks"],
1522
1614
  auth: "user",
1523
- responseKind: "json",
1524
- errors: [
1525
- "auth:forbidden",
1526
- "resource:not_found",
1527
- "server:internal_error"
1528
- ]
1615
+ responseKind: "json"
1529
1616
  },
1530
- getResourceCalendarFeed: {
1531
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
1617
+ getSdkDeploymentHealth: {
1618
+ path: "/sites/{siteId}/sdk-deployment/health",
1532
1619
  method: "GET",
1620
+ tags: ["site-{siteId}", "webhooks"],
1533
1621
  auth: "user",
1534
- responseKind: "json",
1535
- errors: [
1536
- "auth:forbidden",
1537
- "resource:not_found",
1538
- "server:internal_error"
1539
- ]
1622
+ errors: [],
1623
+ responseKind: "json"
1540
1624
  },
1541
- regenerateResourceCalendarFeed: {
1542
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
1625
+ setupSdkDeploymentRevalidationWebhook: {
1626
+ path: "/sites/{siteId}/sdk-deployment/revalidation-webhook",
1543
1627
  method: "POST",
1628
+ tags: ["site-{siteId}", "webhooks"],
1544
1629
  auth: "user",
1630
+ errors: ["validation:invalid_input", "resource:conflict"],
1545
1631
  responseKind: "json",
1546
- errors: [
1547
- "auth:forbidden",
1548
- "resource:not_found",
1549
- "server:internal_error"
1550
- ]
1551
- },
1552
- revokeResourceCalendarFeed: {
1553
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
1554
- method: "DELETE",
1555
- auth: "user",
1556
- responseKind: "json",
1557
- errors: [
1558
- "auth:forbidden",
1559
- "resource:not_found",
1560
- "server:internal_error"
1561
- ]
1632
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
1562
1633
  },
1563
- getVenueCalendarFeed: {
1564
- path: "/sites/{siteId}/bookings/venues/{venueId}/calendar/feed",
1634
+ listSiteApiKeys: {
1635
+ path: "/sites/{siteId}/api-keys",
1565
1636
  method: "GET",
1566
1637
  auth: "user",
1567
- responseKind: "json",
1568
- errors: [
1569
- "auth:forbidden",
1570
- "resource:not_found",
1571
- "server:internal_error"
1572
- ]
1638
+ tags: ["site-{siteId}", "api-keys"],
1639
+ responseKind: "json"
1573
1640
  },
1574
- regenerateVenueCalendarFeed: {
1575
- path: "/sites/{siteId}/bookings/venues/{venueId}/calendar/feed",
1641
+ createSiteApiKey: {
1642
+ path: "/sites/{siteId}/api-keys",
1576
1643
  method: "POST",
1577
1644
  auth: "user",
1578
- responseKind: "json",
1579
- errors: [
1580
- "auth:forbidden",
1581
- "resource:not_found",
1582
- "server:internal_error"
1583
- ]
1645
+ tags: ["site-{siteId}", "api-keys"],
1646
+ responseKind: "json"
1584
1647
  },
1585
- revokeVenueCalendarFeed: {
1586
- path: "/sites/{siteId}/bookings/venues/{venueId}/calendar/feed",
1648
+ revokeSiteApiKey: {
1649
+ path: "/sites/{siteId}/api-keys/{keyId}",
1587
1650
  method: "DELETE",
1588
1651
  auth: "user",
1589
- responseKind: "json",
1590
- errors: [
1591
- "auth:forbidden",
1592
- "resource:not_found",
1593
- "server:internal_error"
1594
- ]
1595
- },
1596
- googleCalendarAuthorize: {
1597
- path: "/sites/{siteId}/bookings/calendar/google/authorize",
1598
- method: "GET",
1599
- auth: "user",
1600
- responseKind: "void"
1652
+ tags: ["site-{siteId}", "api-keys"],
1653
+ responseKind: "json"
1601
1654
  },
1602
- googleCalendarCallback: {
1603
- path: "/bookings/calendar/google/callback",
1655
+ getSitePreviewKey: {
1656
+ path: "/sites/{siteId}/api-keys/preview",
1604
1657
  method: "GET",
1605
1658
  auth: "user",
1606
- responseKind: "void"
1659
+ tags: [
1660
+ "site-{siteId}",
1661
+ "api-keys",
1662
+ "preview-key"
1663
+ ],
1664
+ responseKind: "json"
1607
1665
  },
1608
- getAvailableSlots: {
1609
- path: "/sites/{siteId}/bookings/availability/slots",
1610
- method: "GET",
1666
+ createSitePreviewKey: {
1667
+ path: "/sites/{siteId}/api-keys/preview",
1668
+ method: "POST",
1611
1669
  auth: "user",
1670
+ tags: [
1671
+ "site-{siteId}",
1672
+ "api-keys",
1673
+ "preview-key"
1674
+ ],
1612
1675
  responseKind: "json"
1613
1676
  },
1614
- listAppointments: {
1615
- path: "/sites/{siteId}/bookings/appointments",
1677
+ getSiteApiKeyAccessLogs: {
1678
+ path: "/sites/{siteId}/api-keys/access-logs",
1616
1679
  method: "GET",
1617
1680
  auth: "user",
1681
+ tags: [
1682
+ "site-{siteId}",
1683
+ "api-keys",
1684
+ "access-logs"
1685
+ ],
1618
1686
  responseKind: "json"
1619
1687
  },
1620
- exportBookingAppointmentsCsv: {
1621
- path: "/sites/{siteId}/bookings/appointments/export.csv",
1688
+ listManagementKeys: {
1689
+ path: "/sites/{siteId}/api-keys/management",
1622
1690
  method: "GET",
1623
1691
  auth: "user",
1624
- errors: [],
1625
- responseKind: "blob"
1692
+ tags: [
1693
+ "site-{siteId}",
1694
+ "api-keys",
1695
+ "management-keys"
1696
+ ],
1697
+ responseKind: "json"
1626
1698
  },
1627
- createAppointment: {
1628
- path: "/sites/{siteId}/bookings/appointments",
1699
+ createManagementKey: {
1700
+ path: "/sites/{siteId}/api-keys/management",
1629
1701
  method: "POST",
1630
1702
  auth: "user",
1703
+ tags: [
1704
+ "site-{siteId}",
1705
+ "api-keys",
1706
+ "management-keys"
1707
+ ],
1631
1708
  responseKind: "json"
1632
1709
  },
1633
- upsertBookingRequirementConfig: {
1634
- path: "/sites/{siteId}/bookings/requirements/config",
1635
- method: "PUT",
1710
+ revokeManagementKey: {
1711
+ path: "/sites/{siteId}/api-keys/management",
1712
+ method: "DELETE",
1636
1713
  auth: "user",
1637
- responseKind: "json",
1638
- errors: [
1639
- "validation:invalid_input",
1640
- "resource:not_found",
1641
- "server:internal_error"
1642
- ]
1714
+ tags: [
1715
+ "site-{siteId}",
1716
+ "api-keys",
1717
+ "management-keys"
1718
+ ],
1719
+ responseKind: "json"
1643
1720
  },
1644
- cancelAppointment: {
1645
- path: "/sites/{siteId}/bookings/appointments/{appointmentId}/cancel",
1646
- method: "POST",
1721
+ getBookingSettings: {
1722
+ path: "/sites/{siteId}/bookings/settings",
1723
+ method: "GET",
1647
1724
  auth: "user",
1725
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings],
1648
1726
  responseKind: "json"
1649
1727
  },
1650
- rescheduleAppointment: {
1651
- path: "/sites/{siteId}/bookings/appointments/{appointmentId}/reschedule",
1652
- method: "POST",
1728
+ updateBookingSettings: {
1729
+ path: "/sites/{siteId}/bookings/settings",
1730
+ method: "PUT",
1653
1731
  auth: "user",
1732
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings],
1654
1733
  responseKind: "json",
1655
1734
  errors: [
1656
1735
  "validation:invalid_input",
1657
- "resource:not_found",
1658
1736
  "auth:forbidden",
1659
1737
  "resource:conflict",
1660
1738
  "server:internal_error"
1661
1739
  ]
1662
1740
  },
1663
- listCourses: {
1664
- path: "/sites/{siteId}/bookings/courses",
1741
+ listBookingClosures: {
1742
+ path: "/sites/{siteId}/bookings/closures",
1665
1743
  method: "GET",
1666
1744
  auth: "user",
1667
- responseKind: "json"
1668
- },
1669
- exportCoursesCsv: {
1670
- path: "/sites/{siteId}/bookings/courses/export.csv",
1671
- method: "GET",
1672
1745
  tags: [
1673
1746
  "site-{siteId}",
1674
1747
  "bookings",
1675
- "courses-{siteId}"
1748
+ "closures-{siteId}"
1676
1749
  ],
1677
- errors: [],
1678
- auth: "user",
1679
- responseKind: "blob"
1750
+ responseKind: "json",
1751
+ errors: ["auth:forbidden", "server:internal_error"]
1680
1752
  },
1681
- createCourse: {
1682
- path: "/sites/{siteId}/bookings/courses",
1753
+ previewBookingClosure: {
1754
+ path: "/sites/{siteId}/bookings/closures/preview",
1683
1755
  method: "POST",
1684
1756
  auth: "user",
1757
+ tags: [
1758
+ "site-{siteId}",
1759
+ "bookings",
1760
+ "closures-{siteId}"
1761
+ ],
1685
1762
  responseKind: "json",
1686
1763
  errors: [
1687
1764
  "validation:invalid_input",
1688
- "resource:not_found",
1689
- "resource:already_exists",
1690
- "resource:conflict",
1765
+ "auth:forbidden",
1691
1766
  "server:internal_error"
1692
1767
  ]
1693
1768
  },
1694
- getCourse: {
1695
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1696
- method: "GET",
1697
- auth: "user",
1698
- responseKind: "json"
1699
- },
1700
- updateCourse: {
1701
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1702
- method: "PATCH",
1769
+ createBookingClosure: {
1770
+ path: "/sites/{siteId}/bookings/closures",
1771
+ method: "POST",
1703
1772
  auth: "user",
1773
+ tags: [
1774
+ "site-{siteId}",
1775
+ "bookings",
1776
+ "closures-{siteId}"
1777
+ ],
1704
1778
  responseKind: "json",
1705
1779
  errors: [
1706
1780
  "validation:invalid_input",
1707
- "resource:not_found",
1708
1781
  "resource:conflict",
1782
+ "auth:forbidden",
1709
1783
  "server:internal_error"
1710
1784
  ]
1711
1785
  },
1712
- deleteCourse: {
1713
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1786
+ getBookingClosure: {
1787
+ path: "/sites/{siteId}/bookings/closures/{closureId}",
1788
+ method: "GET",
1789
+ auth: "user",
1790
+ tags: [
1791
+ "site-{siteId}",
1792
+ "bookings",
1793
+ "closures-{siteId}"
1794
+ ],
1795
+ responseKind: "json",
1796
+ errors: ["resource:not_found", "server:internal_error"]
1797
+ },
1798
+ deleteBookingClosure: {
1799
+ path: "/sites/{siteId}/bookings/closures/{closureId}",
1714
1800
  method: "DELETE",
1715
1801
  auth: "user",
1802
+ tags: [
1803
+ "site-{siteId}",
1804
+ "bookings",
1805
+ "closures-{siteId}"
1806
+ ],
1807
+ responseKind: "json",
1808
+ errors: ["resource:not_found", "server:internal_error"]
1809
+ },
1810
+ opsListUpcomingEventOccurrences: {
1811
+ path: "/ops/sites/{siteId}/events",
1812
+ method: "GET",
1813
+ auth: "user",
1814
+ responseKind: "json"
1815
+ },
1816
+ opsListOccurrenceAttendees: {
1817
+ path: "/ops/sites/{siteId}/events/{occurrenceId}/attendees",
1818
+ method: "GET",
1819
+ auth: "user",
1820
+ responseKind: "json"
1821
+ },
1822
+ opsValidateEventTicket: {
1823
+ path: "/ops/sites/{siteId}/events/tickets/validate",
1824
+ method: "POST",
1825
+ auth: "user",
1716
1826
  responseKind: "json",
1827
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
1717
1828
  errors: [
1718
1829
  "validation:invalid_input",
1830
+ "auth:forbidden",
1719
1831
  "resource:not_found",
1720
- "resource:conflict",
1721
1832
  "server:internal_error"
1722
1833
  ]
1723
1834
  },
1724
- deleteCourseProgram: {
1725
- path: "/sites/{siteId}/bookings/courses/programs/{programId}",
1726
- method: "DELETE",
1835
+ opsUpdateEventAttendeeCheckin: {
1836
+ path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/checkin",
1837
+ method: "POST",
1727
1838
  auth: "user",
1728
1839
  responseKind: "json",
1840
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
1729
1841
  errors: [
1730
1842
  "validation:invalid_input",
1843
+ "auth:forbidden",
1731
1844
  "resource:not_found",
1732
- "resource:conflict",
1733
1845
  "server:internal_error"
1734
1846
  ]
1735
1847
  },
1736
- duplicateCourse: {
1737
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
1848
+ opsGetEventAttendeeDetails: {
1849
+ path: "/ops/sites/{siteId}/events/attendees/{attendeeId}",
1850
+ method: "GET",
1851
+ auth: "user",
1852
+ responseKind: "json"
1853
+ },
1854
+ opsCancelEventAttendee: {
1855
+ path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/cancel",
1738
1856
  method: "POST",
1739
1857
  auth: "user",
1740
1858
  responseKind: "json",
1859
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
1741
1860
  errors: [
1742
1861
  "validation:invalid_input",
1862
+ "auth:forbidden",
1743
1863
  "resource:not_found",
1744
- "resource:already_exists",
1864
+ "resource:conflict",
1745
1865
  "server:internal_error"
1746
1866
  ]
1747
1867
  },
1748
- changeCourseContentOwnership: {
1749
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
1868
+ getEventAttendeeDetails: {
1869
+ path: "/sites/{siteId}/bookings/event-attendees/{attendeeId}",
1870
+ method: "GET",
1871
+ auth: "user",
1872
+ responseKind: "json",
1873
+ errors: []
1874
+ },
1875
+ cancelEventAttendee: {
1876
+ path: "/sites/{siteId}/bookings/event-attendees/{attendeeId}/cancel",
1750
1877
  method: "POST",
1751
1878
  auth: "user",
1752
1879
  responseKind: "json",
1753
1880
  errors: [
1754
1881
  "validation:invalid_input",
1882
+ "auth:forbidden",
1755
1883
  "resource:not_found",
1756
1884
  "resource:conflict",
1757
1885
  "server:internal_error"
1758
1886
  ]
1759
1887
  },
1760
- addCourseEnrollment: {
1761
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1888
+ opsRefundEventAttendee: {
1889
+ path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/refund",
1762
1890
  method: "POST",
1763
1891
  auth: "user",
1764
1892
  responseKind: "json",
1893
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
1765
1894
  errors: [
1766
1895
  "validation:invalid_input",
1896
+ "auth:forbidden",
1767
1897
  "resource:not_found",
1768
1898
  "resource:conflict",
1769
1899
  "server:internal_error"
1770
1900
  ]
1771
1901
  },
1772
- listCourseEnrollments: {
1773
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1902
+ getEmailSettings: {
1903
+ path: "/sites/{siteId}/settings/emails",
1774
1904
  method: "GET",
1905
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
1775
1906
  auth: "user",
1776
1907
  responseKind: "json"
1777
1908
  },
1778
- exportCourseEnrollmentsCsv: {
1779
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
1780
- method: "GET",
1909
+ updateEmailSettings: {
1910
+ path: "/sites/{siteId}/settings/emails",
1911
+ method: "PUT",
1912
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
1781
1913
  auth: "user",
1782
- errors: [],
1783
- responseKind: "blob"
1914
+ responseKind: "json"
1784
1915
  },
1785
- listCourseWaitlist: {
1786
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
1787
- method: "GET",
1916
+ sendTestEmail: {
1917
+ path: "/sites/{siteId}/settings/emails/test",
1918
+ method: "POST",
1919
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
1788
1920
  auth: "user",
1789
1921
  responseKind: "json",
1790
- errors: []
1791
- },
1792
- exportCourseWaitlistCsv: {
1793
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
1794
- method: "GET",
1795
- tags: [
1796
- "site-{siteId}",
1797
- "bookings",
1798
- "courses-{courseId}"
1799
- ],
1800
- auth: "user",
1801
- responseKind: "blob",
1802
- errors: []
1803
- },
1804
- updateCourseEnrollment: {
1805
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
1806
- method: "PATCH",
1922
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1923
+ },
1924
+ previewEmailTemplate: {
1925
+ path: "/sites/{siteId}/settings/emails/preview",
1926
+ method: "POST",
1927
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
1807
1928
  auth: "user",
1808
- responseKind: "json",
1809
- errors: [
1810
- "validation:invalid_input",
1811
- "resource:not_found",
1812
- "server:internal_error"
1813
- ]
1929
+ responseKind: "json"
1814
1930
  },
1931
+ ...NEWSLETTER_ENDPOINT_DEFINITIONS,
1932
+ ...APPOINTMENT_ENDPOINT_DEFINITIONS,
1933
+ ...COURSE_ENDPOINT_DEFINITIONS,
1815
1934
  getSite: {
1816
1935
  path: "/sites",
1817
1936
  method: "GET",
@@ -2153,7 +2272,13 @@ const API_ENDPOINTS$1 = {
2153
2272
  method: "POST",
2154
2273
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
2155
2274
  auth: "user",
2156
- responseKind: "json"
2275
+ responseKind: "json",
2276
+ errors: [
2277
+ "validation:invalid_input",
2278
+ "resource:not_found",
2279
+ "resource:conflict",
2280
+ "server:internal_error"
2281
+ ]
2157
2282
  },
2158
2283
  getContentEntry: {
2159
2284
  path: "/sites/{siteId}/content/{type}/{entryId}",
@@ -2164,12 +2289,22 @@ const API_ENDPOINTS$1 = {
2164
2289
  "content-entry-{entryId}"
2165
2290
  ],
2166
2291
  auth: "user",
2167
- responseKind: "json"
2292
+ responseKind: "json",
2293
+ errors: [
2294
+ "validation:invalid_input",
2295
+ "resource:not_found",
2296
+ "resource:conflict",
2297
+ "server:internal_error"
2298
+ ]
2168
2299
  },
2169
2300
  listContentEntryVersions: {
2170
2301
  path: "/sites/{siteId}/content/{type}/{entryId}/versions",
2171
2302
  method: "GET",
2172
- errors: ["validation:invalid_input", "resource:not_found"],
2303
+ errors: [
2304
+ "validation:invalid_input",
2305
+ "resource:not_found",
2306
+ "resource:conflict"
2307
+ ],
2173
2308
  tags: [
2174
2309
  "site-{siteId}",
2175
2310
  "content-{siteId}-{type}",
@@ -2181,7 +2316,11 @@ const API_ENDPOINTS$1 = {
2181
2316
  getContentEntryVersion: {
2182
2317
  path: "/sites/{siteId}/content/{type}/{entryId}/versions/{versionId}",
2183
2318
  method: "GET",
2184
- errors: ["validation:invalid_input", "resource:not_found"],
2319
+ errors: [
2320
+ "validation:invalid_input",
2321
+ "resource:not_found",
2322
+ "resource:conflict"
2323
+ ],
2185
2324
  tags: [
2186
2325
  "site-{siteId}",
2187
2326
  "content-{siteId}-{type}",
@@ -2216,6 +2355,12 @@ const API_ENDPOINTS$1 = {
2216
2355
  "content-entry-{entryId}"
2217
2356
  ],
2218
2357
  auth: "user",
2358
+ errors: [
2359
+ "validation:invalid_input",
2360
+ "resource:not_found",
2361
+ "resource:conflict",
2362
+ "server:internal_error"
2363
+ ],
2219
2364
  responseKind: "json"
2220
2365
  },
2221
2366
  updatePageSurfaceDraftContent: {
@@ -2285,6 +2430,7 @@ const API_ENDPOINTS$1 = {
2285
2430
  errors: [
2286
2431
  "validation:invalid_input",
2287
2432
  "resource:not_found",
2433
+ "resource:conflict",
2288
2434
  "server:internal_error"
2289
2435
  ],
2290
2436
  tags: [
@@ -2301,6 +2447,7 @@ const API_ENDPOINTS$1 = {
2301
2447
  errors: [
2302
2448
  "validation:invalid_input",
2303
2449
  "resource:not_found",
2450
+ "resource:conflict",
2304
2451
  "server:internal_error"
2305
2452
  ],
2306
2453
  tags: [
@@ -2321,6 +2468,12 @@ const API_ENDPOINTS$1 = {
2321
2468
  TAG_TEMPLATES.routeById
2322
2469
  ],
2323
2470
  auth: "user",
2471
+ errors: [
2472
+ "validation:invalid_input",
2473
+ "resource:not_found",
2474
+ "resource:conflict",
2475
+ "server:internal_error"
2476
+ ],
2324
2477
  responseKind: "json"
2325
2478
  },
2326
2479
  publishContentEntry: {
@@ -2377,6 +2530,13 @@ const API_ENDPOINTS$1 = {
2377
2530
  "content-entry-{entryId}"
2378
2531
  ],
2379
2532
  auth: "user",
2533
+ errors: [
2534
+ "auth:forbidden",
2535
+ "validation:invalid_input",
2536
+ "resource:not_found",
2537
+ "resource:conflict",
2538
+ "server:internal_error"
2539
+ ],
2380
2540
  responseKind: "json"
2381
2541
  },
2382
2542
  unpublishContentEntry: {
@@ -2429,7 +2589,13 @@ const API_ENDPOINTS$1 = {
2429
2589
  "content-entry-{entryId}"
2430
2590
  ],
2431
2591
  auth: "user",
2432
- responseKind: "json"
2592
+ responseKind: "json",
2593
+ errors: [
2594
+ "validation:invalid_input",
2595
+ "resource:not_found",
2596
+ "resource:conflict",
2597
+ "server:internal_error"
2598
+ ]
2433
2599
  },
2434
2600
  bulkPublishContentEntries: {
2435
2601
  path: "/sites/{siteId}/content/{type}/bulk-publish",
@@ -2451,6 +2617,12 @@ const API_ENDPOINTS$1 = {
2451
2617
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
2452
2618
  auth: "user",
2453
2619
  responseKind: "json",
2620
+ errors: [
2621
+ "validation:invalid_input",
2622
+ "resource:not_found",
2623
+ "resource:conflict",
2624
+ "server:internal_error"
2625
+ ],
2454
2626
  demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
2455
2627
  },
2456
2628
  updateSiteGeneralSettings: {
@@ -3721,7 +3893,7 @@ const API_ENDPOINTS$1 = {
3721
3893
  ],
3722
3894
  auth: "user",
3723
3895
  responseKind: "json",
3724
- errors: ["resource:not_found"]
3896
+ errors: ["resource:not_found", "resource:conflict"]
3725
3897
  },
3726
3898
  listEntryPageContentSlots: {
3727
3899
  path: "/sites/{siteId}/content/{type}/{entryId}/slots",
@@ -3734,7 +3906,7 @@ const API_ENDPOINTS$1 = {
3734
3906
  ],
3735
3907
  auth: "user",
3736
3908
  responseKind: "json",
3737
- errors: ["resource:not_found"]
3909
+ errors: ["resource:not_found", "resource:conflict"]
3738
3910
  },
3739
3911
  createEntrySlotBlock: {
3740
3912
  path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
@@ -3747,7 +3919,11 @@ const API_ENDPOINTS$1 = {
3747
3919
  ],
3748
3920
  auth: "user",
3749
3921
  responseKind: "json",
3750
- errors: ["validation:invalid_input", "resource:not_found"]
3922
+ errors: [
3923
+ "validation:invalid_input",
3924
+ "resource:not_found",
3925
+ "resource:conflict"
3926
+ ]
3751
3927
  },
3752
3928
  reorderEntrySlotBlocks: {
3753
3929
  path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
@@ -3760,7 +3936,11 @@ const API_ENDPOINTS$1 = {
3760
3936
  ],
3761
3937
  auth: "user",
3762
3938
  responseKind: "json",
3763
- errors: ["validation:invalid_input", "resource:not_found"]
3939
+ errors: [
3940
+ "validation:invalid_input",
3941
+ "resource:not_found",
3942
+ "resource:conflict"
3943
+ ]
3764
3944
  },
3765
3945
  deleteEntrySlotBlock: {
3766
3946
  path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
@@ -3773,7 +3953,7 @@ const API_ENDPOINTS$1 = {
3773
3953
  ],
3774
3954
  auth: "user",
3775
3955
  responseKind: "json",
3776
- errors: ["resource:not_found"]
3956
+ errors: ["resource:not_found", "resource:conflict"]
3777
3957
  },
3778
3958
  listPageSurfaceContentSlots: {
3779
3959
  path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/slots",
@@ -4451,14 +4631,7 @@ const API_ENDPOINTS$1 = {
4451
4631
  auth: "public",
4452
4632
  responseKind: "json"
4453
4633
  },
4454
- listPublicCourses: {
4455
- path: "/public/sites/{siteId}/courses",
4456
- method: "GET",
4457
- revalidate: 60,
4458
- tags: [TAG_TEMPLATES.publicCourses],
4459
- auth: "public",
4460
- responseKind: "json"
4461
- },
4634
+ ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS,
4462
4635
  listPublicTeamMembers: {
4463
4636
  path: "/public/sites/{siteId}/team-members",
4464
4637
  method: "GET",
@@ -4468,33 +4641,11 @@ const API_ENDPOINTS$1 = {
4468
4641
  auth: "public",
4469
4642
  responseKind: "json"
4470
4643
  },
4471
- getPublicCourse: {
4472
- path: "/public/sites/{siteId}/courses/{courseId}",
4473
- method: "GET",
4474
- revalidate: 60,
4475
- tags: [TAG_TEMPLATES.publicCourses],
4476
- auth: "public",
4477
- responseKind: "json"
4478
- },
4479
- enrollInCourse: {
4480
- path: "/public/sites/{siteId}/courses/enroll",
4481
- method: "POST",
4482
- tags: [TAG_TEMPLATES.publicCourses, "course-enrollment"],
4483
- auth: "public",
4484
- responseKind: "json"
4485
- },
4486
- checkCourseEligibility: {
4487
- path: "/public/sites/{siteId}/courses/check-eligibility",
4488
- method: "POST",
4489
- tags: [TAG_TEMPLATES.publicCourses, "course-enrollment"],
4490
- auth: "public",
4491
- responseKind: "json"
4492
- },
4493
4644
  resolveWaitlistClaim: {
4494
4645
  path: "/public/sites/{siteId}/waitlists/claim/resolve",
4495
4646
  method: "POST",
4496
4647
  tags: [
4497
- TAG_TEMPLATES.publicCourses,
4648
+ TAG_TEMPLATES.publicWholeSeriesOfferings,
4498
4649
  TAG_TEMPLATES.publicEvents,
4499
4650
  "waitlist-claims"
4500
4651
  ],
@@ -4507,27 +4658,6 @@ const API_ENDPOINTS$1 = {
4507
4658
  "server:internal_error"
4508
4659
  ]
4509
4660
  },
4510
- createCourseCheckout: {
4511
- path: "/public/sites/{siteId}/courses/checkout",
4512
- method: "POST",
4513
- tags: [TAG_TEMPLATES.publicCourses, "course-checkout"],
4514
- auth: "public",
4515
- responseKind: "json",
4516
- errors: [
4517
- "auth:unauthenticated",
4518
- "validation:invalid_input",
4519
- "resource:not_found",
4520
- "resource:conflict",
4521
- "server:internal_error"
4522
- ]
4523
- },
4524
- getCourseRegistrationStatus: {
4525
- path: "/public/sites/{siteId}/courses/registration-status",
4526
- method: "GET",
4527
- tags: [TAG_TEMPLATES.publicCourses, "course-checkout"],
4528
- auth: "public",
4529
- responseKind: "json"
4530
- },
4531
4661
  listPublicPasses: {
4532
4662
  path: "/public/sites/{siteId}/bookings/products/passes",
4533
4663
  method: "GET",
@@ -4628,14 +4758,6 @@ const API_ENDPOINTS$1 = {
4628
4758
  responseKind: "json",
4629
4759
  errors: []
4630
4760
  },
4631
- resolveEntrySubroute: {
4632
- path: "/public/sites/{siteId}/routing/subroutes/resolve",
4633
- method: "GET",
4634
- revalidate: 60,
4635
- tags: ["site-{siteId}", "entry-subroute"],
4636
- auth: "public",
4637
- responseKind: "json"
4638
- },
4639
4761
  resolveEventOccurrence: {
4640
4762
  path: "/public/sites/{siteId}/events/occurrences/resolve",
4641
4763
  method: "GET",
@@ -4979,13 +5101,6 @@ const API_ENDPOINTS$1 = {
4979
5101
  auth: "user",
4980
5102
  responseKind: "json"
4981
5103
  },
4982
- getEventSeriesContentEditor: {
4983
- path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-editor",
4984
- method: "GET",
4985
- tags: ["site-{siteId}", "event-series-{seriesId}"],
4986
- auth: "user",
4987
- responseKind: "json"
4988
- },
4989
5104
  updateEventSeries: {
4990
5105
  path: "/sites/{siteId}/bookings/event-series/{seriesId}",
4991
5106
  method: "PATCH",
@@ -6324,6 +6439,7 @@ const API_ENDPOINTS$1 = {
6324
6439
  errors: [
6325
6440
  "validation:invalid_input",
6326
6441
  "resource:not_found",
6442
+ "resource:conflict",
6327
6443
  "server:internal_error"
6328
6444
  ],
6329
6445
  auth: "service",
@@ -6437,24 +6553,12 @@ const API_ENDPOINTS$1 = {
6437
6553
  auth: "service",
6438
6554
  responseKind: "json"
6439
6555
  },
6440
- sdkPullCourses: {
6441
- path: "/sdk/{siteId}/pull/courses",
6442
- method: "GET",
6443
- auth: "service",
6444
- responseKind: "json"
6445
- },
6446
6556
  sdkPullEntries: {
6447
6557
  path: "/sdk/{siteId}/pull/entries",
6448
6558
  method: "GET",
6449
6559
  auth: "service",
6450
6560
  responseKind: "json"
6451
6561
  },
6452
- sdkPullEntriesByType: {
6453
- path: "/sdk/{siteId}/pull/entries/{type}",
6454
- method: "GET",
6455
- auth: "service",
6456
- responseKind: "json"
6457
- },
6458
6562
  sdkPullEntriesAll: {
6459
6563
  path: "/sdk/{siteId}/pull/entries/all",
6460
6564
  method: "GET",
@@ -6720,48 +6824,13 @@ const API_ENDPOINTS$1 = {
6720
6824
  "server:internal_error"
6721
6825
  ]
6722
6826
  },
6723
- sdkListCourses: {
6724
- path: "/sdk/{siteId}/courses",
6725
- method: "GET",
6726
- auth: "service",
6727
- responseKind: "json"
6728
- },
6729
- sdkUpsertCourse: {
6730
- path: "/sdk/{siteId}/courses",
6731
- method: "POST",
6732
- auth: "service",
6733
- responseKind: "json"
6734
- },
6735
- sdkGetCourse: {
6736
- path: "/sdk/{siteId}/courses/{identifier}",
6737
- method: "GET",
6738
- auth: "service",
6739
- responseKind: "json"
6740
- },
6741
- sdkDeleteCourse: {
6742
- path: "/sdk/{siteId}/courses/{identifier}",
6743
- method: "DELETE",
6744
- auth: "service",
6745
- responseKind: "json"
6746
- },
6747
6827
  sdkUpsertEntry: {
6748
6828
  path: "/sdk/{siteId}/entries",
6749
6829
  method: "POST",
6750
6830
  auth: "service",
6751
6831
  responseKind: "json"
6752
6832
  },
6753
- sdkListEntries: {
6754
- path: "/sdk/{siteId}/entries/{contentType}",
6755
- method: "GET",
6756
- auth: "service",
6757
- responseKind: "json"
6758
- },
6759
- sdkGetEntry: {
6760
- path: "/sdk/{siteId}/entries/{contentType}/{identifier}",
6761
- method: "GET",
6762
- auth: "service",
6763
- responseKind: "json"
6764
- },
6833
+ ...SDK_ENTRY_READ_ENDPOINTS,
6765
6834
  sdkDeleteEntry: {
6766
6835
  path: "/sdk/{siteId}/entries/{contentType}/{identifier}",
6767
6836
  method: "DELETE",
@@ -6986,21 +7055,22 @@ const API_ENDPOINTS$1 = {
6986
7055
  "server:internal_error"
6987
7056
  ]
6988
7057
  },
6989
- portalGetCourses: {
6990
- path: "/portal/courses",
7058
+ portalGetWholeSeriesRegistrations: {
7059
+ path: "/portal/dated-offerings/whole-series",
6991
7060
  method: "GET",
6992
7061
  auth: "public",
6993
- responseKind: "json"
7062
+ responseKind: "json",
7063
+ errors: ["server:internal_error"]
6994
7064
  },
6995
- portalGetCourseBookingQuestions: {
6996
- path: "/portal/courses/{enrollmentId}/booking-questions",
7065
+ portalGetWholeSeriesBookingQuestions: {
7066
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
6997
7067
  method: "GET",
6998
7068
  auth: "public",
6999
7069
  responseKind: "json",
7000
7070
  errors: ["resource:not_found", "server:internal_error"]
7001
7071
  },
7002
- portalUpdateCourseBookingQuestions: {
7003
- path: "/portal/courses/{enrollmentId}/booking-questions",
7072
+ portalUpdateWholeSeriesBookingQuestions: {
7073
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
7004
7074
  method: "PUT",
7005
7075
  auth: "public",
7006
7076
  responseKind: "json",
@@ -7010,8 +7080,8 @@ const API_ENDPOINTS$1 = {
7010
7080
  "server:internal_error"
7011
7081
  ]
7012
7082
  },
7013
- portalCreateCourseBookingQuestionsUploadUrl: {
7014
- path: "/portal/courses/{enrollmentId}/booking-questions/upload-url",
7083
+ portalCreateWholeSeriesBookingQuestionsUploadUrl: {
7084
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload-url",
7015
7085
  method: "POST",
7016
7086
  auth: "public",
7017
7087
  responseKind: "json",
@@ -7021,8 +7091,8 @@ const API_ENDPOINTS$1 = {
7021
7091
  "server:internal_error"
7022
7092
  ]
7023
7093
  },
7024
- portalFinalizeCourseBookingQuestionsUpload: {
7025
- path: "/portal/courses/{enrollmentId}/booking-questions/upload",
7094
+ portalFinalizeWholeSeriesBookingQuestionsUpload: {
7095
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload",
7026
7096
  method: "POST",
7027
7097
  auth: "public",
7028
7098
  responseKind: "json",
@@ -7032,11 +7102,12 @@ const API_ENDPOINTS$1 = {
7032
7102
  "server:internal_error"
7033
7103
  ]
7034
7104
  },
7035
- portalCancelCourseEnrollment: {
7036
- path: "/portal/courses/{enrollmentId}/cancel",
7105
+ portalCancelWholeSeriesRegistration: {
7106
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/cancel",
7037
7107
  method: "POST",
7038
7108
  auth: "public",
7039
- responseKind: "json"
7109
+ responseKind: "json",
7110
+ errors: ["resource:not_found", "server:internal_error"]
7040
7111
  },
7041
7112
  portalCancelEventRegistration: {
7042
7113
  path: "/portal/events/{registrationId}/cancel",
@@ -7353,6 +7424,7 @@ function extractApiEnvelopeErrorDetails(body) {
7353
7424
  if (!error) return {
7354
7425
  rawCode: null,
7355
7426
  code: null,
7427
+ tag: null,
7356
7428
  message: null,
7357
7429
  status: null,
7358
7430
  fieldErrors: null
@@ -7362,6 +7434,7 @@ function extractApiEnvelopeErrorDetails(body) {
7362
7434
  return {
7363
7435
  rawCode,
7364
7436
  code: isApiErrorCode(rawCode) ? rawCode : null,
7437
+ tag: typeof error.tag === "string" ? error.tag : null,
7365
7438
  message,
7366
7439
  status: typeof error.status === "number" && Number.isFinite(error.status) ? error.status : null,
7367
7440
  fieldErrors: fieldErrorsFromUnknown(error.fieldErrors)
@@ -7379,6 +7452,7 @@ var ApiEnvelopeError = class extends Error {
7379
7452
  this.requestId = error.requestId;
7380
7453
  this.timestamp = error.timestamp;
7381
7454
  this.status = error.status;
7455
+ this.tag = error.tag;
7382
7456
  this.fieldErrors = error.fieldErrors;
7383
7457
  }
7384
7458
  };
@@ -7850,7 +7924,7 @@ var SimpleCache = class {
7850
7924
  * 1. This constant
7851
7925
  * 2. The "version" field in package.json
7852
7926
  */
7853
- const SDK_VERSION = "0.123.0";
7927
+ const SDK_VERSION = "0.124.0";
7854
7928
  //#endregion
7855
7929
  //#region src/client/error.ts
7856
7930
  let _Symbol$for;
@@ -8055,12 +8129,10 @@ const PUBLIC_ENDPOINT_NAMES = [
8055
8129
  "getPublicChallenge",
8056
8130
  "listPublicEvents",
8057
8131
  "batchBlockLoaders",
8058
- "listPublicCourses",
8059
8132
  "listPublicTeamMembers",
8060
8133
  "listPublicProducts",
8061
8134
  "listPublicPasses",
8062
8135
  "listPublicMemberships",
8063
- "resolveEntrySubroute",
8064
8136
  "resolveEventOccurrence",
8065
8137
  "checkRedirect",
8066
8138
  "getRoutableContent",
@@ -8178,14 +8250,6 @@ const API_ENDPOINTS = Object.freeze({
8178
8250
  auth: "public",
8179
8251
  responseKind: "json"
8180
8252
  },
8181
- listPublicCourses: {
8182
- path: "/public/sites/{siteId}/courses",
8183
- method: "GET",
8184
- revalidate: 60,
8185
- tags: ["riverbank:site:{siteId}:public-courses"],
8186
- auth: "public",
8187
- responseKind: "json"
8188
- },
8189
8253
  listPublicTeamMembers: {
8190
8254
  path: "/public/sites/{siteId}/team-members",
8191
8255
  method: "GET",
@@ -8218,14 +8282,6 @@ const API_ENDPOINTS = Object.freeze({
8218
8282
  auth: "public",
8219
8283
  responseKind: "json"
8220
8284
  },
8221
- resolveEntrySubroute: {
8222
- path: "/public/sites/{siteId}/routing/subroutes/resolve",
8223
- method: "GET",
8224
- revalidate: 60,
8225
- tags: ["site-{siteId}", "entry-subroute"],
8226
- auth: "public",
8227
- responseKind: "json"
8228
- },
8229
8285
  resolveEventOccurrence: {
8230
8286
  path: "/public/sites/{siteId}/events/occurrences/resolve",
8231
8287
  method: "GET",
@@ -8266,13 +8322,193 @@ const API_ENDPOINTS = Object.freeze({
8266
8322
  auth: "public",
8267
8323
  responseKind: "json"
8268
8324
  }
8269
- });
8270
- function buildEndpointURL(baseURL, endpoint) {
8271
- return baseURL + API_ENDPOINTS[endpoint].path;
8325
+ });
8326
+ function buildEndpointURL(baseURL, endpoint) {
8327
+ return baseURL + API_ENDPOINTS[endpoint].path;
8328
+ }
8329
+ //#endregion
8330
+ //#region src/client/runtimeCacheKeys.ts
8331
+ const DEFAULT_PUBLISHED_RUNTIME_CACHE_PAYLOAD_SCHEMA_VERSION = 1;
8332
+ function toNonEmptyString(value) {
8333
+ if (value === null || value === void 0) return null;
8334
+ if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") return null;
8335
+ const normalized = String(value).trim();
8336
+ return normalized.length > 0 ? normalized : null;
8337
+ }
8338
+ function normalizeRuntimePublicPath(value) {
8339
+ const withoutQuery = (toNonEmptyString(value) ?? "/").split(/[?#]/, 1)[0] ?? "/";
8340
+ const collapsed = (withoutQuery.startsWith("/") ? withoutQuery : `/${withoutQuery}`).replace(/\/{2,}/g, "/");
8341
+ return (collapsed.length > 1 ? collapsed.replace(/\/+$/g, "") : collapsed) || "/";
8342
+ }
8343
+ function normalizeRuntimeHostname(value) {
8344
+ const trimmed = value.trim().toLowerCase();
8345
+ return (/^[a-z][a-z0-9+.-]*:\/\//.test(trimmed) ? new URL(trimmed) : new URL(`http://${trimmed}`)).hostname.replace(/\.$/, "");
8346
+ }
8347
+ function normalizeScalar(value) {
8348
+ return value.trim().toLowerCase();
8349
+ }
8350
+ function unsafeAsPublishedRuntimeCacheKey(value) {
8351
+ return value;
8352
+ }
8353
+ function buildPublishedRuntimeCacheKey(endpoint, normalizedParams) {
8354
+ return unsafeAsPublishedRuntimeCacheKey(`published-runtime:v1:${endpoint}:${Object.entries(normalizedParams).sort(([left], [right]) => left.localeCompare(right)).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join(":")}`);
8355
+ }
8356
+ function selectSiteRuntimeIdentity(params) {
8357
+ const slug = toNonEmptyString(params.slug);
8358
+ if (slug !== null) return { slug: normalizeScalar(slug) };
8359
+ const domain = toNonEmptyString(params.domain);
8360
+ if (domain !== null) return { domain: normalizeRuntimeHostname(domain) };
8361
+ const id = toNonEmptyString(params.id);
8362
+ if (id !== null) return { id: normalizeScalar(id) };
8363
+ return null;
8364
+ }
8365
+ function deriveGetSiteKey(params) {
8366
+ const identity = selectSiteRuntimeIdentity(params);
8367
+ if (identity === null) return {
8368
+ ok: false,
8369
+ error: {
8370
+ kind: "missing_site_identity",
8371
+ acceptedParams: [
8372
+ "slug",
8373
+ "domain",
8374
+ "id"
8375
+ ]
8376
+ }
8377
+ };
8378
+ const normalizedParams = {
8379
+ ...identity,
8380
+ currentPath: normalizeRuntimePublicPath(params.currentPath)
8381
+ };
8382
+ return {
8383
+ ok: true,
8384
+ endpoint: "getSite",
8385
+ key: buildPublishedRuntimeCacheKey("getSite", normalizedParams),
8386
+ normalizedParams
8387
+ };
8388
+ }
8389
+ function deriveGetContentByPathKey(params) {
8390
+ const siteId = toNonEmptyString(params.siteId);
8391
+ if (siteId === null) return {
8392
+ ok: false,
8393
+ error: {
8394
+ kind: "missing_required_param",
8395
+ endpoint: "getContentByPath",
8396
+ param: "siteId"
8397
+ }
8398
+ };
8399
+ const normalizedParams = {
8400
+ siteId: normalizeScalar(siteId),
8401
+ path: normalizeRuntimePublicPath(params.path),
8402
+ contentContract: "native"
8403
+ };
8404
+ return {
8405
+ ok: true,
8406
+ endpoint: "getContentByPath",
8407
+ key: buildPublishedRuntimeCacheKey("getContentByPath", normalizedParams),
8408
+ normalizedParams
8409
+ };
8410
+ }
8411
+ function deriveDurableRuntimeCacheKey(input) {
8412
+ switch (input.endpoint) {
8413
+ case "getSite": return deriveGetSiteKey(input.params);
8414
+ case "getContentByPath": return deriveGetContentByPathKey(input.params);
8415
+ }
8416
+ }
8417
+ function isPublishedRuntimeCacheKeyEndpoint(value) {
8418
+ return value === "getSite" || value === "getContentByPath";
8419
+ }
8420
+ function parsePublishedRuntimeCacheKey(value) {
8421
+ const details = parsePublishedRuntimeCacheKeyDetails(value);
8422
+ if (!details.ok) return details;
8423
+ return {
8424
+ ok: true,
8425
+ key: details.key,
8426
+ endpoint: details.endpoint
8427
+ };
8428
+ }
8429
+ function parsePublishedRuntimeCacheKeyDetails(value) {
8430
+ if (typeof value !== "string") return {
8431
+ ok: false,
8432
+ error: "not_string"
8433
+ };
8434
+ const parts = value.split(":");
8435
+ if (parts[0] !== "published-runtime" || parts[1] !== "v1") return {
8436
+ ok: false,
8437
+ error: "invalid_prefix"
8438
+ };
8439
+ const endpoint = parts[2];
8440
+ if (!isPublishedRuntimeCacheKeyEndpoint(endpoint)) return {
8441
+ ok: false,
8442
+ error: "unknown_endpoint"
8443
+ };
8444
+ const normalizedParams = {};
8445
+ for (const part of parts.slice(3)) {
8446
+ const separatorIndex = part.indexOf("=");
8447
+ if (separatorIndex <= 0) return {
8448
+ ok: false,
8449
+ error: "invalid_param_encoding"
8450
+ };
8451
+ try {
8452
+ const key = decodeURIComponent(part.slice(0, separatorIndex));
8453
+ normalizedParams[key] = decodeURIComponent(part.slice(separatorIndex + 1));
8454
+ } catch {
8455
+ return {
8456
+ ok: false,
8457
+ error: "invalid_param_encoding"
8458
+ };
8459
+ }
8460
+ }
8461
+ if (!hasExpectedPublishedRuntimeCacheKeyParams(endpoint, normalizedParams)) return {
8462
+ ok: false,
8463
+ error: "invalid_param_encoding"
8464
+ };
8465
+ return {
8466
+ ok: true,
8467
+ key: unsafeAsPublishedRuntimeCacheKey(value),
8468
+ endpoint,
8469
+ normalizedParams
8470
+ };
8471
+ }
8472
+ function hasExpectedPublishedRuntimeCacheKeyParams(endpoint, normalizedParams) {
8473
+ const keys = Object.keys(normalizedParams).sort();
8474
+ switch (endpoint) {
8475
+ case "getSite": return [
8476
+ "domain",
8477
+ "id",
8478
+ "slug"
8479
+ ].filter((key) => normalizedParams[key] !== void 0).length === 1 && normalizedParams.currentPath !== void 0 && keys.every((key) => [
8480
+ "currentPath",
8481
+ "domain",
8482
+ "id",
8483
+ "slug"
8484
+ ].includes(key));
8485
+ case "getContentByPath": return normalizedParams.path !== void 0 && normalizedParams.siteId !== void 0 && normalizedParams.contentContract === "native" && keys.every((key) => [
8486
+ "contentContract",
8487
+ "path",
8488
+ "siteId"
8489
+ ].includes(key));
8490
+ }
8491
+ }
8492
+ function parsePublishedRuntimeCachePayloadSchemaVersion(value) {
8493
+ if (typeof value !== "number") return {
8494
+ ok: false,
8495
+ error: "not_number"
8496
+ };
8497
+ if (!Number.isInteger(value)) return {
8498
+ ok: false,
8499
+ error: "not_integer"
8500
+ };
8501
+ if (value <= 0) return {
8502
+ ok: false,
8503
+ error: "not_positive"
8504
+ };
8505
+ return {
8506
+ ok: true,
8507
+ value
8508
+ };
8272
8509
  }
8273
8510
  //#endregion
8274
8511
  //#region src/client/runtimeCachePolicy.ts
8275
- const DEFAULT_PUBLISHED_RUNTIME_CACHE_PAYLOAD_SCHEMA_VERSION = 1;
8276
8512
  const DEFAULT_STALE_TTL_SEC = 1440 * 60;
8277
8513
  const DEFAULT_MEMORY_TTL_SEC = 60;
8278
8514
  const RUNTIME_CACHE_DURABILITY_OVERRIDES = {
@@ -8328,10 +8564,6 @@ const RUNTIME_CACHE_DURABILITY_OVERRIDES = {
8328
8564
  kind: "live-only",
8329
8565
  reason: "opaque_batch_loader"
8330
8566
  },
8331
- listPublicCourses: {
8332
- kind: "memory-only",
8333
- reason: "durable_rollout_pending"
8334
- },
8335
8567
  listPublicTeamMembers: {
8336
8568
  kind: "memory-only",
8337
8569
  reason: "durable_rollout_pending"
@@ -8348,10 +8580,6 @@ const RUNTIME_CACHE_DURABILITY_OVERRIDES = {
8348
8580
  kind: "live-only",
8349
8581
  reason: "safety_sensitive_booking"
8350
8582
  },
8351
- resolveEntrySubroute: {
8352
- kind: "memory-only",
8353
- reason: "durable_rollout_pending"
8354
- },
8355
8583
  resolveEventOccurrence: {
8356
8584
  kind: "memory-only",
8357
8585
  reason: "durable_rollout_pending"
@@ -8382,250 +8610,71 @@ function isTruthyParam(value) {
8382
8610
  }
8383
8611
  function isPreviewRequest(endpoint, params) {
8384
8612
  if (endpoint === "getContentByPath") return isTruthyParam(params.preview);
8385
- if (endpoint === "listPublishedEntries" || endpoint === "resolveEntrySubroute" || endpoint === "resolveEventOccurrence") return params.stage === "preview";
8386
- return false;
8387
- }
8388
- function getEndpointFreshTtlSec(endpoint) {
8389
- return API_ENDPOINTS[endpoint].revalidate ?? DEFAULT_MEMORY_TTL_SEC;
8390
- }
8391
- function assertNever(value) {
8392
- throw new Error(`Unhandled runtime cache policy override: ${String(value)}`);
8393
- }
8394
- function resolveKnownEndpointPolicy(endpoint, params) {
8395
- if (isPreviewRequest(endpoint, params)) return {
8396
- kind: "live-only",
8397
- endpoint,
8398
- reason: "preview_request"
8399
- };
8400
- if (endpoint === "getSite" && isTruthyParam(params.force)) return {
8401
- kind: "live-only",
8402
- endpoint,
8403
- reason: "force_refresh"
8404
- };
8405
- const override = RUNTIME_CACHE_DURABILITY_OVERRIDES[endpoint];
8406
- if (override.kind === "live-only") return {
8407
- kind: "live-only",
8408
- endpoint,
8409
- reason: override.reason
8410
- };
8411
- const endpointDefinition = API_ENDPOINTS[endpoint];
8412
- if (endpointDefinition.method !== "GET") return {
8413
- kind: "live-only",
8414
- endpoint,
8415
- reason: "non_get_request"
8416
- };
8417
- if (endpointDefinition.auth === "user") return {
8418
- kind: "live-only",
8419
- endpoint,
8420
- reason: "auth_required"
8421
- };
8422
- switch (override.kind) {
8423
- case "durable-public-stale": return {
8424
- kind: "durable-public-stale",
8425
- endpoint,
8426
- freshTtlSec: getEndpointFreshTtlSec(endpoint),
8427
- staleTtlSec: override.staleTtlSec
8428
- };
8429
- case "memory-only": return {
8430
- kind: "memory-only",
8431
- endpoint,
8432
- freshTtlSec: getEndpointFreshTtlSec(endpoint),
8433
- reason: override.reason
8434
- };
8435
- default: return assertNever(override);
8436
- }
8437
- }
8438
- function resolveRuntimeCachePolicy(input) {
8439
- if (input.method && input.method.toUpperCase() !== "GET") return {
8440
- kind: "live-only",
8441
- endpoint: input.endpoint,
8442
- reason: "non_get_request"
8443
- };
8444
- if (!isPublicEndpointName(input.endpoint)) return {
8445
- kind: "live-only",
8446
- endpoint: input.endpoint,
8447
- reason: "unknown_endpoint"
8448
- };
8449
- return resolveKnownEndpointPolicy(input.endpoint, input.params ?? {});
8450
- }
8451
- function toNonEmptyString(value) {
8452
- if (value === null || value === void 0) return null;
8453
- if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") return null;
8454
- const normalized = String(value).trim();
8455
- return normalized.length > 0 ? normalized : null;
8456
- }
8457
- function normalizeRuntimePublicPath(value) {
8458
- const withoutQuery = (toNonEmptyString(value) ?? "/").split(/[?#]/, 1)[0] ?? "/";
8459
- const collapsed = (withoutQuery.startsWith("/") ? withoutQuery : `/${withoutQuery}`).replace(/\/{2,}/g, "/");
8460
- return (collapsed.length > 1 ? collapsed.replace(/\/+$/g, "") : collapsed) || "/";
8461
- }
8462
- function normalizeRuntimeHostname(value) {
8463
- const trimmed = value.trim().toLowerCase();
8464
- return (/^[a-z][a-z0-9+.-]*:\/\//.test(trimmed) ? new URL(trimmed) : new URL(`http://${trimmed}`)).hostname.replace(/\.$/, "");
8465
- }
8466
- function normalizeScalar(value) {
8467
- return value.trim().toLowerCase();
8468
- }
8469
- function encodeKeyPart(key, value) {
8470
- return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
8471
- }
8472
- function unsafeAsPublishedRuntimeCacheKey(value) {
8473
- return value;
8474
- }
8475
- function buildPublishedRuntimeCacheKey(endpoint, normalizedParams) {
8476
- return unsafeAsPublishedRuntimeCacheKey(`published-runtime:v1:${endpoint}:${Object.entries(normalizedParams).sort(([left], [right]) => left.localeCompare(right)).map(([key, value]) => encodeKeyPart(key, value)).join(":")}`);
8477
- }
8478
- function selectSiteRuntimeIdentity(params) {
8479
- const slug = toNonEmptyString(params.slug);
8480
- if (slug !== null) return { slug: normalizeScalar(slug) };
8481
- const domain = toNonEmptyString(params.domain);
8482
- if (domain !== null) return { domain: normalizeRuntimeHostname(domain) };
8483
- const id = toNonEmptyString(params.id);
8484
- if (id !== null) return { id: normalizeScalar(id) };
8485
- return null;
8486
- }
8487
- function deriveGetSiteKey(params) {
8488
- const identity = selectSiteRuntimeIdentity(params);
8489
- if (identity === null) return {
8490
- ok: false,
8491
- error: {
8492
- kind: "missing_site_identity",
8493
- acceptedParams: [
8494
- "slug",
8495
- "domain",
8496
- "id"
8497
- ]
8498
- }
8499
- };
8500
- const normalizedParams = {
8501
- ...identity,
8502
- currentPath: normalizeRuntimePublicPath(params.currentPath)
8503
- };
8504
- return {
8505
- ok: true,
8506
- endpoint: "getSite",
8507
- key: buildPublishedRuntimeCacheKey("getSite", normalizedParams),
8508
- normalizedParams
8509
- };
8510
- }
8511
- function deriveGetContentByPathKey(params) {
8512
- const siteId = toNonEmptyString(params.siteId);
8513
- if (siteId === null) return {
8514
- ok: false,
8515
- error: {
8516
- kind: "missing_required_param",
8517
- endpoint: "getContentByPath",
8518
- param: "siteId"
8519
- }
8520
- };
8521
- const normalizedParams = {
8522
- siteId: normalizeScalar(siteId),
8523
- path: normalizeRuntimePublicPath(params.path),
8524
- ...params.contentContract === "native" ? { contentContract: "native" } : {}
8525
- };
8526
- return {
8527
- ok: true,
8528
- endpoint: "getContentByPath",
8529
- key: buildPublishedRuntimeCacheKey("getContentByPath", normalizedParams),
8530
- normalizedParams
8531
- };
8613
+ if (endpoint === "listPublishedEntries" || endpoint === "resolveEventOccurrence") return params.stage === "preview";
8614
+ return false;
8532
8615
  }
8533
- const DURABLE_RUNTIME_CACHE_KEY_DERIVERS = {
8534
- getSite: deriveGetSiteKey,
8535
- getContentByPath: deriveGetContentByPathKey
8536
- };
8537
- function isPublishedRuntimeCacheKeyEndpoint(value) {
8538
- return typeof value === "string" && Object.prototype.hasOwnProperty.call(DURABLE_RUNTIME_CACHE_KEY_DERIVERS, value);
8616
+ function getEndpointFreshTtlSec(endpoint) {
8617
+ return API_ENDPOINTS[endpoint].revalidate ?? DEFAULT_MEMORY_TTL_SEC;
8539
8618
  }
8540
- function parsePublishedRuntimeCacheKey(value) {
8541
- const details = parsePublishedRuntimeCacheKeyDetails(value);
8542
- if (!details.ok) return details;
8543
- return {
8544
- ok: true,
8545
- key: details.key,
8546
- endpoint: details.endpoint
8547
- };
8619
+ function assertNever(value) {
8620
+ throw new Error(`Unhandled runtime cache policy override: ${String(value)}`);
8548
8621
  }
8549
- function parsePublishedRuntimeCacheKeyDetails(value) {
8550
- if (typeof value !== "string") return {
8551
- ok: false,
8552
- error: "not_string"
8622
+ function resolveKnownEndpointPolicy(endpoint, params) {
8623
+ if (isPreviewRequest(endpoint, params)) return {
8624
+ kind: "live-only",
8625
+ endpoint,
8626
+ reason: "preview_request"
8553
8627
  };
8554
- const parts = value.split(":");
8555
- if (parts[0] !== "published-runtime" || parts[1] !== "v1") return {
8556
- ok: false,
8557
- error: "invalid_prefix"
8628
+ if (endpoint === "getSite" && isTruthyParam(params.force)) return {
8629
+ kind: "live-only",
8630
+ endpoint,
8631
+ reason: "force_refresh"
8558
8632
  };
8559
- const endpoint = parts[2];
8560
- if (!isPublishedRuntimeCacheKeyEndpoint(endpoint)) return {
8561
- ok: false,
8562
- error: "unknown_endpoint"
8633
+ const override = RUNTIME_CACHE_DURABILITY_OVERRIDES[endpoint];
8634
+ if (override.kind === "live-only") return {
8635
+ kind: "live-only",
8636
+ endpoint,
8637
+ reason: override.reason
8563
8638
  };
8564
- const normalizedParams = {};
8565
- for (const part of parts.slice(3)) {
8566
- const separatorIndex = part.indexOf("=");
8567
- if (separatorIndex <= 0) return {
8568
- ok: false,
8569
- error: "invalid_param_encoding"
8570
- };
8571
- try {
8572
- const key = decodeURIComponent(part.slice(0, separatorIndex));
8573
- normalizedParams[key] = decodeURIComponent(part.slice(separatorIndex + 1));
8574
- } catch {
8575
- return {
8576
- ok: false,
8577
- error: "invalid_param_encoding"
8578
- };
8579
- }
8580
- }
8581
- if (!hasExpectedPublishedRuntimeCacheKeyParams(endpoint, normalizedParams)) return {
8582
- ok: false,
8583
- error: "invalid_param_encoding"
8639
+ const endpointDefinition = API_ENDPOINTS[endpoint];
8640
+ if (endpointDefinition.method !== "GET") return {
8641
+ kind: "live-only",
8642
+ endpoint,
8643
+ reason: "non_get_request"
8584
8644
  };
8585
- return {
8586
- ok: true,
8587
- key: unsafeAsPublishedRuntimeCacheKey(value),
8645
+ if (endpointDefinition.auth === "user") return {
8646
+ kind: "live-only",
8588
8647
  endpoint,
8589
- normalizedParams
8648
+ reason: "auth_required"
8590
8649
  };
8591
- }
8592
- function hasExpectedPublishedRuntimeCacheKeyParams(endpoint, normalizedParams) {
8593
- const keys = Object.keys(normalizedParams).sort();
8594
- switch (endpoint) {
8595
- case "getSite": return [
8596
- "domain",
8597
- "id",
8598
- "slug"
8599
- ].filter((key) => normalizedParams[key] !== void 0).length === 1 && normalizedParams.currentPath !== void 0 && keys.every((key) => [
8600
- "currentPath",
8601
- "domain",
8602
- "id",
8603
- "slug"
8604
- ].includes(key));
8605
- case "getContentByPath": return normalizedParams.path !== void 0 && normalizedParams.siteId !== void 0 && (normalizedParams.contentContract === void 0 || normalizedParams.contentContract === "native") && keys.every((key) => [
8606
- "contentContract",
8607
- "path",
8608
- "siteId"
8609
- ].includes(key));
8650
+ switch (override.kind) {
8651
+ case "durable-public-stale": return {
8652
+ kind: "durable-public-stale",
8653
+ endpoint,
8654
+ freshTtlSec: getEndpointFreshTtlSec(endpoint),
8655
+ staleTtlSec: override.staleTtlSec
8656
+ };
8657
+ case "memory-only": return {
8658
+ kind: "memory-only",
8659
+ endpoint,
8660
+ freshTtlSec: getEndpointFreshTtlSec(endpoint),
8661
+ reason: override.reason
8662
+ };
8663
+ default: return assertNever(override);
8610
8664
  }
8611
8665
  }
8612
- function parsePublishedRuntimeCachePayloadSchemaVersion(value) {
8613
- if (typeof value !== "number") return {
8614
- ok: false,
8615
- error: "not_number"
8616
- };
8617
- if (!Number.isInteger(value)) return {
8618
- ok: false,
8619
- error: "not_integer"
8620
- };
8621
- if (value <= 0) return {
8622
- ok: false,
8623
- error: "not_positive"
8666
+ function resolveRuntimeCachePolicy(input) {
8667
+ if (input.method && input.method.toUpperCase() !== "GET") return {
8668
+ kind: "live-only",
8669
+ endpoint: input.endpoint,
8670
+ reason: "non_get_request"
8624
8671
  };
8625
- return {
8626
- ok: true,
8627
- value
8672
+ if (!isPublicEndpointName(input.endpoint)) return {
8673
+ kind: "live-only",
8674
+ endpoint: input.endpoint,
8675
+ reason: "unknown_endpoint"
8628
8676
  };
8677
+ return resolveKnownEndpointPolicy(input.endpoint, input.params ?? {});
8629
8678
  }
8630
8679
  function classifyPublishedRuntimeCacheFreshness(input) {
8631
8680
  const freshUntilMs = Date.parse(input.freshUntil);
@@ -8662,10 +8711,96 @@ function derivePublishedRuntimeCacheKey(input) {
8662
8711
  policy
8663
8712
  }
8664
8713
  };
8665
- switch (input.endpoint) {
8666
- case "getSite": return DURABLE_RUNTIME_CACHE_KEY_DERIVERS.getSite(input.params);
8667
- case "getContentByPath": return DURABLE_RUNTIME_CACHE_KEY_DERIVERS.getContentByPath(input.params);
8668
- }
8714
+ return deriveDurableRuntimeCacheKey(input);
8715
+ }
8716
+ //#endregion
8717
+ //#region src/client/contentReadOperations.ts
8718
+ function planPublishedRuntimeCache(input) {
8719
+ const policy = resolveRuntimeCachePolicy({
8720
+ endpoint: input.endpoint,
8721
+ method: "GET",
8722
+ params: input.params
8723
+ });
8724
+ if (policy.kind !== "durable-public-stale") return null;
8725
+ const keyResult = derivePublishedRuntimeCacheKey(input);
8726
+ if (!keyResult.ok) return null;
8727
+ return {
8728
+ cacheKey: keyResult.key,
8729
+ endpoint: keyResult.endpoint,
8730
+ normalizedParams: keyResult.normalizedParams,
8731
+ freshTtlSec: policy.freshTtlSec,
8732
+ staleTtlSec: policy.staleTtlSec,
8733
+ siteId: input.siteId ?? null
8734
+ };
8735
+ }
8736
+ function createContentReadOperations(input) {
8737
+ return {
8738
+ async getSiteWithResilience(params) {
8739
+ const { slug, domain, id, signal, force, currentPath } = params;
8740
+ if (!slug && !domain && !id) throw new Error(`getSite() requires at least one identifier: slug, domain, or id. Received: ${JSON.stringify(params)}`);
8741
+ const siteIdentifier = slug || domain || id;
8742
+ const siteId = id || slug || domain;
8743
+ const publishedRuntimeCache = planPublishedRuntimeCache({
8744
+ endpoint: "getSite",
8745
+ params: {
8746
+ slug,
8747
+ domain,
8748
+ id,
8749
+ currentPath,
8750
+ force
8751
+ }
8752
+ });
8753
+ const cacheKey = publishedRuntimeCache?.cacheKey ?? `site:${siteIdentifier ?? "unknown"}:${currentPath ?? ""}`;
8754
+ return input.resilientFetch(cacheKey, async (requestSignal) => {
8755
+ const apiParams = {};
8756
+ if (slug) apiParams.slug = slug;
8757
+ if (domain) apiParams.domain = domain;
8758
+ if (id) apiParams.id = id;
8759
+ if (currentPath) apiParams.currentPath = currentPath;
8760
+ if (force) apiParams.force = "true";
8761
+ return input.apiClient({
8762
+ endpoint: "getSite",
8763
+ params: apiParams,
8764
+ options: {
8765
+ signal: requestSignal,
8766
+ ...force ? { cache: "no-store" } : {}
8767
+ }
8768
+ });
8769
+ }, {
8770
+ signal,
8771
+ force,
8772
+ publishedRuntimeCache,
8773
+ prebuildFallback: input.prebuildLoader && siteId ? () => input.prebuildLoader?.loadSite(siteId) ?? null : void 0
8774
+ });
8775
+ },
8776
+ async getPageWithResilience(params) {
8777
+ const { siteId, path, preview = false, signal } = params;
8778
+ const publishedRuntimeCache = planPublishedRuntimeCache({
8779
+ endpoint: "getContentByPath",
8780
+ params: {
8781
+ siteId,
8782
+ path,
8783
+ preview
8784
+ },
8785
+ siteId
8786
+ });
8787
+ const cacheKey = publishedRuntimeCache?.cacheKey ?? `page:${siteId}:${path}:${preview}`;
8788
+ return input.resilientFetch(cacheKey, (requestSignal) => input.apiClient({
8789
+ endpoint: "getContentByPath",
8790
+ params: {
8791
+ siteId,
8792
+ path,
8793
+ preview: String(preview)
8794
+ },
8795
+ options: { signal: requestSignal }
8796
+ }), {
8797
+ preview,
8798
+ signal,
8799
+ publishedRuntimeCache,
8800
+ prebuildFallback: void 0
8801
+ });
8802
+ }
8803
+ };
8669
8804
  }
8670
8805
  //#endregion
8671
8806
  //#region src/client/resilience.ts
@@ -9024,24 +9159,6 @@ function getRiverbankErrorInfo(error) {
9024
9159
  if (error instanceof Error) return { message: error.message };
9025
9160
  return { message: String(error) };
9026
9161
  }
9027
- function planPublishedRuntimeCache(input) {
9028
- const policy = resolveRuntimeCachePolicy({
9029
- endpoint: input.endpoint,
9030
- method: "GET",
9031
- params: input.params
9032
- });
9033
- if (policy.kind !== "durable-public-stale") return null;
9034
- const keyResult = derivePublishedRuntimeCacheKey(input);
9035
- if (!keyResult.ok) return null;
9036
- return {
9037
- cacheKey: keyResult.key,
9038
- endpoint: keyResult.endpoint,
9039
- normalizedParams: keyResult.normalizedParams,
9040
- freshTtlSec: policy.freshTtlSec,
9041
- staleTtlSec: policy.staleTtlSec,
9042
- siteId: input.siteId ?? null
9043
- };
9044
- }
9045
9162
  function normalizeEntryIdentifierRefs(identifiers) {
9046
9163
  const trimmed = identifiers.map((identifier) => identifier.trim()).filter((identifier) => identifier.length > 0);
9047
9164
  if (trimmed.length === 0) return { kind: "empty" };
@@ -9487,89 +9604,11 @@ function createRiverbankClientWithDeps(deps, config) {
9487
9604
  }
9488
9605
  return controller.signal;
9489
9606
  }
9490
- async function resolveEntrySubrouteInternal(args) {
9491
- const { siteId, entryId, kind, segment, stage, signal } = args;
9492
- return resilientFetchData(`entry-subroute:${siteId}:${entryId}:${kind}:${segment}:${stage ?? "published"}`, async (sig) => {
9493
- return await apiClient({
9494
- endpoint: "resolveEntrySubroute",
9495
- params: {
9496
- siteId,
9497
- entryId,
9498
- kind,
9499
- segment,
9500
- ...stage ? { stage } : {}
9501
- },
9502
- options: { signal: sig }
9503
- });
9504
- }, { signal });
9505
- }
9506
- async function getSiteWithResilienceInternal(params) {
9507
- const { slug, domain, id, signal, force, currentPath } = params;
9508
- if (!slug && !domain && !id) throw new Error(`getSite() requires at least one identifier: slug, domain, or id. Received: ${JSON.stringify(params)}`);
9509
- const siteIdentifier = slug || domain || id;
9510
- const siteId = id || slug || domain;
9511
- const publishedRuntimeCache = planPublishedRuntimeCache({
9512
- endpoint: "getSite",
9513
- params: {
9514
- slug,
9515
- domain,
9516
- id,
9517
- currentPath,
9518
- force
9519
- }
9520
- });
9521
- return resilientFetch(publishedRuntimeCache?.cacheKey ?? `site:${siteIdentifier ?? "unknown"}:${currentPath ?? ""}`, async (sig) => {
9522
- const apiParams = {};
9523
- if (params.slug) apiParams.slug = params.slug;
9524
- if (params.domain) apiParams.domain = params.domain;
9525
- if (params.id) apiParams.id = params.id;
9526
- if (currentPath) apiParams.currentPath = currentPath;
9527
- if (force) apiParams.force = "true";
9528
- return await apiClient({
9529
- endpoint: "getSite",
9530
- params: apiParams,
9531
- options: {
9532
- signal: sig,
9533
- ...force ? { cache: "no-store" } : {}
9534
- }
9535
- });
9536
- }, {
9537
- signal,
9538
- force,
9539
- publishedRuntimeCache,
9540
- prebuildFallback: prebuildLoader && siteId ? () => prebuildLoader.loadSite(siteId) : void 0
9541
- });
9542
- }
9543
- async function getPageWithResilienceInternal(params) {
9544
- const { siteId, path, preview = false, signal, contentContract = "compat" } = params;
9545
- const publishedRuntimeCache = planPublishedRuntimeCache({
9546
- endpoint: "getContentByPath",
9547
- params: {
9548
- siteId,
9549
- path,
9550
- preview,
9551
- contentContract
9552
- },
9553
- siteId
9554
- });
9555
- return resilientFetch(publishedRuntimeCache?.cacheKey ?? `page:${siteId}:${path}:${preview}:${contentContract}`, async (sig) => {
9556
- return await apiClient({
9557
- endpoint: "getContentByPath",
9558
- params: {
9559
- siteId,
9560
- path,
9561
- preview: String(preview),
9562
- ...contentContract === "native" ? { contentContract } : {}
9563
- },
9564
- options: { signal: sig }
9565
- });
9566
- }, {
9567
- preview,
9568
- signal,
9569
- publishedRuntimeCache,
9570
- prebuildFallback: prebuildLoader && !preview && contentContract !== "native" ? () => prebuildLoader.loadPage(siteId, path) : void 0
9571
- });
9572
- }
9607
+ const contentReads = createContentReadOperations({
9608
+ apiClient,
9609
+ resilientFetch,
9610
+ prebuildLoader
9611
+ });
9573
9612
  async function getEntriesInternal(params) {
9574
9613
  const { siteId, contentType, limit, offset, order, preview = false, mode, entryIds, includeMeta, signal } = params;
9575
9614
  const entryIdsCacheKey = mode === "manual" && entryIds?.length ? entryIds.join(",") : "";
@@ -9604,16 +9643,16 @@ function createRiverbankClientWithDeps(deps, config) {
9604
9643
  }
9605
9644
  return {
9606
9645
  async getSite(params) {
9607
- return (await getSiteWithResilienceInternal(params)).data;
9646
+ return (await contentReads.getSiteWithResilience(params)).data;
9608
9647
  },
9609
9648
  async getSiteWithResilience(params) {
9610
- return getSiteWithResilienceInternal(params);
9649
+ return contentReads.getSiteWithResilience(params);
9611
9650
  },
9612
9651
  async getPage(params) {
9613
- return (await getPageWithResilienceInternal(params)).data;
9652
+ return (await contentReads.getPageWithResilience(params)).data;
9614
9653
  },
9615
9654
  async getPageWithResilience(params) {
9616
- return getPageWithResilienceInternal(params);
9655
+ return contentReads.getPageWithResilience(params);
9617
9656
  },
9618
9657
  async getEntries(params) {
9619
9658
  return getEntriesInternal(params);
@@ -9729,9 +9768,9 @@ function createRiverbankClientWithDeps(deps, config) {
9729
9768
  }, { signal });
9730
9769
  },
9731
9770
  async listPublicEvents(params) {
9732
- const { siteId, limit, from, to, afterStartsAt, afterId, stage, categoryIds, venueId, staffMemberId, kind, eventSurface, eventPresets, scheduleScope, detailLevel, readProfile, entryId, seriesId, includeOccurrenceId, signal } = params;
9771
+ const { siteId, limit, from, to, afterStartsAt, afterId, stage, categoryIds, venueId, staffMemberId, kind, eventSurface, eventPresets, scheduleScope, detailLevel, readProfile, seriesId, includeOccurrenceId, signal } = params;
9733
9772
  if (!siteId) throw new Error("listPublicEvents() requires siteId");
9734
- return resilientFetchData(`public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${eventSurface ?? ""}:${eventPresets ?? ""}:${scheduleScope ?? ""}:${detailLevel ?? ""}:${readProfile ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`, async (sig) => {
9773
+ return resilientFetchData(`public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${eventSurface ?? ""}:${eventPresets ?? ""}:${scheduleScope ?? ""}:${detailLevel ?? ""}:${readProfile ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`, async (sig) => {
9735
9774
  return await apiClient({
9736
9775
  endpoint: "listPublicEvents",
9737
9776
  params: {
@@ -9751,7 +9790,6 @@ function createRiverbankClientWithDeps(deps, config) {
9751
9790
  ...scheduleScope && { scheduleScope },
9752
9791
  ...detailLevel && { detailLevel },
9753
9792
  ...readProfile && { readProfile },
9754
- ...entryId && { entryId },
9755
9793
  ...seriesId && { seriesId },
9756
9794
  ...includeOccurrenceId && { includeOccurrenceId }
9757
9795
  },
@@ -9760,9 +9798,9 @@ function createRiverbankClientWithDeps(deps, config) {
9760
9798
  }, { signal });
9761
9799
  },
9762
9800
  async getPublicEventDetails(params) {
9763
- const { siteId, limit, from, to, afterStartsAt, afterId, stage, categoryIds, venueId, staffMemberId, kind, eventSurface, eventPresets, scheduleScope, entryId, seriesId, includeOccurrenceId, signal } = params;
9801
+ const { siteId, limit, from, to, afterStartsAt, afterId, stage, categoryIds, venueId, staffMemberId, kind, eventSurface, eventPresets, scheduleScope, seriesId, includeOccurrenceId, signal } = params;
9764
9802
  if (!siteId) throw new Error("getPublicEventDetails() requires siteId");
9765
- return resilientFetchData(`public-event-details:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${eventSurface ?? ""}:${eventPresets ?? ""}:${scheduleScope ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`, async (sig) => {
9803
+ return resilientFetchData(`public-event-details:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${eventSurface ?? ""}:${eventPresets ?? ""}:${scheduleScope ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`, async (sig) => {
9766
9804
  const requestId = "eventDetails";
9767
9805
  return normalizeBatchBlockLoaderResult(await apiClient({
9768
9806
  endpoint: "batchBlockLoaders",
@@ -9786,7 +9824,6 @@ function createRiverbankClientWithDeps(deps, config) {
9786
9824
  ...eventSurface && { eventSurface },
9787
9825
  ...eventPresets && { eventPresets },
9788
9826
  ...scheduleScope && { scheduleScope },
9789
- ...entryId && { entryId },
9790
9827
  ...seriesId && { seriesId },
9791
9828
  ...includeOccurrenceId && { includeOccurrenceId }
9792
9829
  }
@@ -9795,21 +9832,6 @@ function createRiverbankClientWithDeps(deps, config) {
9795
9832
  }), requestId);
9796
9833
  }, { signal });
9797
9834
  },
9798
- async listPublicCourses(params) {
9799
- const { siteId, limit, stage, signal } = params;
9800
- if (!siteId) throw new Error("listPublicCourses() requires siteId");
9801
- return resilientFetchData(`public-courses:${siteId}:${limit ?? ""}:${stage ?? ""}`, async (sig) => {
9802
- return await apiClient({
9803
- endpoint: "listPublicCourses",
9804
- params: {
9805
- siteId,
9806
- ...typeof limit === "number" && { limit: String(limit) },
9807
- ...stage && { stage }
9808
- },
9809
- options: { signal: sig }
9810
- });
9811
- }, { signal });
9812
- },
9813
9835
  async listPublicTeamMembers(params) {
9814
9836
  const { siteId, stage, signal } = params;
9815
9837
  if (!siteId) throw new Error("listPublicTeamMembers() requires siteId");
@@ -9868,29 +9890,19 @@ function createRiverbankClientWithDeps(deps, config) {
9868
9890
  });
9869
9891
  }, { signal });
9870
9892
  },
9871
- async resolveEntrySubroute(params) {
9872
- const { siteId, entryId, kind, segment, stage, signal } = params;
9873
- if (!siteId || !entryId || !kind || !segment) throw new Error("resolveEntrySubroute() requires siteId, entryId, kind, and segment");
9874
- return resolveEntrySubrouteInternal({
9875
- siteId,
9876
- entryId,
9877
- kind,
9878
- segment,
9879
- stage,
9880
- signal
9881
- });
9882
- },
9883
9893
  async resolveEventOccurrence(params) {
9884
- const { siteId, entryId, segment, signal } = params;
9885
- if (!siteId || !entryId || !segment) throw new Error("resolveEventOccurrence() requires siteId, entryId, and segment");
9886
- const result = await resolveEntrySubrouteInternal({
9887
- siteId,
9888
- entryId,
9889
- kind: "event-occurrence",
9890
- segment,
9891
- signal
9892
- });
9893
- return { occurrence: result.subroute?.kind === "event-occurrence" ? result.subroute.occurrence : null };
9894
+ const { siteId, eventSeriesIds, segment, signal } = params;
9895
+ if (!siteId || eventSeriesIds.length === 0 || !segment) throw new Error("resolveEventOccurrence() requires siteId, eventSeriesIds, and segment");
9896
+ const seriesScope = [...new Set(eventSeriesIds)].sort();
9897
+ return resilientFetchData(`event-occurrence:${siteId}:${seriesScope.join(",")}:${segment}`, async (sig) => apiClient({
9898
+ endpoint: "resolveEventOccurrence",
9899
+ params: {
9900
+ siteId,
9901
+ eventSeriesIds: seriesScope.join(","),
9902
+ segment
9903
+ },
9904
+ options: { signal: sig }
9905
+ }), { signal });
9894
9906
  },
9895
9907
  async checkRedirect(params) {
9896
9908
  const { siteId, path, signal } = params;
@@ -10615,8 +10627,6 @@ const SYSTEM_BLOCK_KINDS = [
10615
10627
  "block.weekly-slot-availability",
10616
10628
  "block.event-registration",
10617
10629
  "block.event-details",
10618
- "block.course-registration",
10619
- "block.course-details",
10620
10630
  "block.event-spotlight",
10621
10631
  "block.event-listing",
10622
10632
  "block.event-calendar",