@riverbankcms/sdk 0.121.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-lZ600tJx.mjs → PreviewEditorSidebar-DBmAJJkQ.mjs} +24 -41
  3. package/dist/{PreviewEditorUI-CTBWzLSb.mjs → PreviewEditorUI-CfGaz9cY.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BHT8CJvZ.mjs → PreviewQueryProvider-BH-3-jSj.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-DhPU58s7.mjs → SdkPreviewModeRuntime-BW9Z8j8T.mjs} +1020 -1234
  6. package/dist/{SiteChromeCustomizeContext-BkNvpzNZ.mjs → SiteChromeCustomizeContext-2z8moxYf.mjs} +1902 -1961
  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 +100 -75
  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 +10 -12
  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 +6 -7
  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 +1587 -115
  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 +7392 -10989
  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 +7398 -7687
  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 -1043
  237. package/dist/preview-next/client/runtime.mjs +4 -4
  238. package/dist/preview-next/middleware.mjs +1116 -1044
  239. package/dist/{previewAuthStore-31xH13Jc.mjs → previewAuthStore-CJX21dGi.mjs} +1119 -1044
  240. package/dist/{sdk-runtime-BE_vcGua.mjs → sdk-runtime-OnPM8Z69.mjs} +2 -2
  241. package/dist/{separator-CiffYtk3.mjs → separator-CPtfzHqA.mjs} +1 -1
  242. package/dist/server/components.mjs +11120 -12601
  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 +1499 -1488
  247. package/dist/server/next.mjs +18291 -21201
  248. package/dist/server/page-converter.mjs +1898 -2040
  249. package/dist/server/prebuild.mjs +1 -1
  250. package/dist/server/rendering/server.mjs +19666 -21153
  251. package/dist/server/rendering.mjs +17117 -18651
  252. package/dist/server/routing.mjs +3614 -2509
  253. package/dist/server/server.mjs +3298 -3478
  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,524 +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",
535
+ "resource:not_found",
505
536
  "server:internal_error"
506
537
  ]
507
538
  },
508
- listBookingClosures: {
509
- path: "/sites/{siteId}/bookings/closures",
510
- method: "GET",
539
+ deleteServiceSpecificAvailability: {
540
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/service-availability/{scheduleId}",
541
+ method: "DELETE",
511
542
  auth: "user",
512
- tags: [
513
- "site-{siteId}",
514
- "bookings",
515
- "closures-{siteId}"
516
- ],
517
543
  responseKind: "json",
518
- errors: ["auth:forbidden", "server:internal_error"]
544
+ errors: ["resource:not_found", "server:internal_error"]
519
545
  },
520
- previewBookingClosure: {
521
- path: "/sites/{siteId}/bookings/closures/preview",
522
- method: "POST",
546
+ listBlackouts: {
547
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts",
548
+ method: "GET",
523
549
  auth: "user",
524
- tags: [
525
- "site-{siteId}",
526
- "bookings",
527
- "closures-{siteId}"
528
- ],
529
550
  responseKind: "json",
530
- errors: [
531
- "validation:invalid_input",
532
- "auth:forbidden",
533
- "server:internal_error"
534
- ]
551
+ errors: ["resource:not_found", "server:internal_error"]
535
552
  },
536
- createBookingClosure: {
537
- path: "/sites/{siteId}/bookings/closures",
553
+ createBlackout: {
554
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts",
538
555
  method: "POST",
539
556
  auth: "user",
540
- tags: [
541
- "site-{siteId}",
542
- "bookings",
543
- "closures-{siteId}"
544
- ],
545
557
  responseKind: "json",
546
558
  errors: [
547
559
  "validation:invalid_input",
548
- "resource:conflict",
549
- "auth:forbidden",
560
+ "resource:not_found",
550
561
  "server:internal_error"
551
562
  ]
552
563
  },
553
- getBookingClosure: {
554
- path: "/sites/{siteId}/bookings/closures/{closureId}",
555
- method: "GET",
556
- auth: "user",
557
- tags: [
558
- "site-{siteId}",
559
- "bookings",
560
- "closures-{siteId}"
561
- ],
562
- responseKind: "json",
563
- errors: ["resource:not_found", "server:internal_error"]
564
- },
565
- deleteBookingClosure: {
566
- path: "/sites/{siteId}/bookings/closures/{closureId}",
564
+ deleteBlackout: {
565
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts/{blackoutId}",
567
566
  method: "DELETE",
568
567
  auth: "user",
569
- tags: [
570
- "site-{siteId}",
571
- "bookings",
572
- "closures-{siteId}"
573
- ],
574
568
  responseKind: "json",
575
569
  errors: ["resource:not_found", "server:internal_error"]
576
570
  },
577
- opsListUpcomingEventOccurrences: {
578
- path: "/ops/sites/{siteId}/events",
579
- method: "GET",
580
- auth: "user",
581
- responseKind: "json"
582
- },
583
- opsListOccurrenceAttendees: {
584
- path: "/ops/sites/{siteId}/events/{occurrenceId}/attendees",
571
+ getCalendarStatus: {
572
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
585
573
  method: "GET",
586
574
  auth: "user",
587
- responseKind: "json"
575
+ responseKind: "json",
576
+ errors: ["auth:forbidden", "server:internal_error"]
588
577
  },
589
- opsValidateEventTicket: {
590
- path: "/ops/sites/{siteId}/events/tickets/validate",
591
- method: "POST",
578
+ updateCalendarPreferences: {
579
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
580
+ method: "PUT",
592
581
  auth: "user",
593
582
  responseKind: "json",
594
- demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
595
583
  errors: [
596
584
  "validation:invalid_input",
597
585
  "auth:forbidden",
@@ -599,102 +587,303 @@ const API_ENDPOINTS$1 = {
599
587
  "server:internal_error"
600
588
  ]
601
589
  },
602
- opsUpdateEventAttendeeCheckin: {
603
- path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/checkin",
604
- method: "POST",
590
+ disconnectCalendar: {
591
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
592
+ method: "DELETE",
605
593
  auth: "user",
606
594
  responseKind: "json",
607
- demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
608
595
  errors: [
609
- "validation:invalid_input",
610
596
  "auth:forbidden",
611
597
  "resource:not_found",
612
598
  "server:internal_error"
613
599
  ]
614
600
  },
615
- opsGetEventAttendeeDetails: {
616
- path: "/ops/sites/{siteId}/events/attendees/{attendeeId}",
601
+ getResourceCalendarFeed: {
602
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
617
603
  method: "GET",
618
604
  auth: "user",
619
- responseKind: "json"
620
- },
621
- opsCancelEventAttendee: {
622
- path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/cancel",
623
- method: "POST",
624
- auth: "user",
625
605
  responseKind: "json",
626
- demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
627
606
  errors: [
628
- "validation:invalid_input",
629
607
  "auth:forbidden",
630
608
  "resource:not_found",
631
- "resource:conflict",
632
609
  "server:internal_error"
633
610
  ]
634
611
  },
635
- getEventAttendeeDetails: {
636
- path: "/sites/{siteId}/bookings/event-attendees/{attendeeId}",
637
- method: "GET",
638
- auth: "user",
639
- responseKind: "json",
640
- errors: []
641
- },
642
- cancelEventAttendee: {
643
- path: "/sites/{siteId}/bookings/event-attendees/{attendeeId}/cancel",
612
+ regenerateResourceCalendarFeed: {
613
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
644
614
  method: "POST",
645
615
  auth: "user",
646
616
  responseKind: "json",
647
617
  errors: [
648
- "validation:invalid_input",
649
618
  "auth:forbidden",
650
619
  "resource:not_found",
651
- "resource:conflict",
652
620
  "server:internal_error"
653
621
  ]
654
622
  },
655
- opsRefundEventAttendee: {
656
- path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/refund",
657
- method: "POST",
623
+ revokeResourceCalendarFeed: {
624
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
625
+ method: "DELETE",
658
626
  auth: "user",
659
627
  responseKind: "json",
660
- demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
661
628
  errors: [
662
- "validation:invalid_input",
663
629
  "auth:forbidden",
664
630
  "resource:not_found",
665
- "resource:conflict",
666
631
  "server:internal_error"
667
632
  ]
668
633
  },
669
- getEmailSettings: {
670
- path: "/sites/{siteId}/settings/emails",
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",
671
681
  method: "GET",
672
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
673
682
  auth: "user",
674
683
  responseKind: "json"
675
684
  },
676
- updateEmailSettings: {
677
- 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",
678
706
  method: "PUT",
679
- 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",
680
718
  auth: "user",
681
719
  responseKind: "json"
682
720
  },
683
- sendTestEmail: {
684
- path: "/sites/{siteId}/settings/emails/test",
721
+ rescheduleAppointment: {
722
+ path: "/sites/{siteId}/bookings/appointments/{appointmentId}/reschedule",
685
723
  method: "POST",
686
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
687
724
  auth: "user",
688
725
  responseKind: "json",
689
- 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"
690
743
  },
691
- previewEmailTemplate: {
692
- 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",
693
758
  method: "POST",
694
- 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",
695
850
  auth: "user",
696
851
  responseKind: "json"
697
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({
698
887
  getNewsletterSettings: {
699
888
  path: "/sites/{siteId}/newsletter/settings",
700
889
  method: "GET",
@@ -1047,770 +1236,701 @@ const API_ENDPOINTS$1 = {
1047
1236
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
1048
1237
  auth: "user",
1049
1238
  responseKind: "json"
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",
1246
+ method: "GET",
1247
+ revalidate: 60,
1248
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings],
1249
+ errors: ["server:internal_error"],
1250
+ auth: "public",
1251
+ responseKind: "json"
1050
1252
  },
1051
- listAppointmentResources: {
1052
- path: "/sites/{siteId}/bookings/resources",
1253
+ getPublicWholeSeriesOffering: {
1254
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/{eventSeriesId}",
1053
1255
  method: "GET",
1054
- auth: "user",
1256
+ revalidate: 60,
1257
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings],
1258
+ errors: ["resource:not_found", "server:internal_error"],
1259
+ auth: "public",
1055
1260
  responseKind: "json"
1056
1261
  },
1057
- createAppointmentResource: {
1058
- path: "/sites/{siteId}/bookings/resources",
1262
+ registerForWholeSeries: {
1263
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
1059
1264
  method: "POST",
1060
- auth: "user",
1061
- responseKind: "json",
1265
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1062
1266
  errors: [
1267
+ "auth:unauthenticated",
1268
+ "auth:forbidden",
1063
1269
  "validation:invalid_input",
1064
- "billing:plan_limit_exceeded",
1270
+ "resource:not_found",
1271
+ "resource:conflict",
1272
+ "resource:already_exists",
1065
1273
  "server:internal_error"
1066
- ]
1274
+ ],
1275
+ auth: "public",
1276
+ responseKind: "json"
1067
1277
  },
1068
- createAppointmentResourceWithAccountAccess: {
1069
- path: "/sites/{siteId}/bookings/resources/account-access",
1278
+ checkWholeSeriesEligibility: {
1279
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
1070
1280
  method: "POST",
1071
- auth: "user",
1072
- responseKind: "json",
1281
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1073
1282
  errors: [
1074
- "validation:invalid_input",
1075
- "auth:forbidden",
1076
- "billing:plan_limit_exceeded",
1077
- "resource:conflict",
1283
+ "auth:unauthenticated",
1078
1284
  "resource:not_found",
1285
+ "resource:conflict",
1079
1286
  "server:internal_error"
1080
- ]
1081
- },
1082
- getAppointmentResource: {
1083
- path: "/sites/{siteId}/bookings/resources/{resourceId}",
1084
- method: "GET",
1085
- auth: "user",
1287
+ ],
1288
+ auth: "public",
1086
1289
  responseKind: "json"
1087
1290
  },
1088
- updateAppointmentResource: {
1089
- path: "/sites/{siteId}/bookings/resources/{resourceId}",
1090
- method: "PUT",
1091
- auth: "user",
1291
+ createWholeSeriesCheckout: {
1292
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
1293
+ method: "POST",
1294
+ tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1295
+ auth: "public",
1092
1296
  responseKind: "json",
1093
1297
  errors: [
1298
+ "auth:unauthenticated",
1094
1299
  "validation:invalid_input",
1095
1300
  "resource:not_found",
1301
+ "resource:conflict",
1096
1302
  "server:internal_error"
1097
1303
  ]
1098
1304
  },
1099
- removeAppointmentResource: {
1100
- path: "/sites/{siteId}/bookings/resources/{resourceId}",
1101
- method: "DELETE",
1102
- auth: "user",
1103
- responseKind: "json",
1104
- errors: ["resource:not_found", "server:internal_error"]
1105
- },
1106
- listAppointmentReservations: {
1107
- path: "/sites/{siteId}/bookings/appointment-reservations",
1305
+ getWholeSeriesRegistrationStatus: {
1306
+ path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
1108
1307
  method: "GET",
1109
- auth: "user",
1110
- responseKind: "json",
1111
- errors: []
1112
- },
1113
- createAppointmentReservation: {
1114
- path: "/sites/{siteId}/bookings/appointment-reservations",
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",
1115
1317
  method: "POST",
1116
1318
  auth: "user",
1117
- responseKind: "json",
1118
- errors: [
1119
- "validation:invalid_input",
1120
- "resource:not_found",
1121
- "resource:conflict",
1122
- "server:internal_error"
1123
- ]
1319
+ responseKind: "stream"
1124
1320
  },
1125
- getAppointmentReservation: {
1126
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}",
1127
- method: "GET",
1321
+ aiChat: {
1322
+ path: "/ai/chat",
1323
+ method: "POST",
1128
1324
  auth: "user",
1129
- responseKind: "json",
1130
- errors: ["resource:not_found", "server:internal_error"]
1325
+ responseKind: "stream"
1131
1326
  },
1132
- updateAppointmentReservation: {
1133
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}",
1134
- method: "PUT",
1327
+ aiDesignerThemeApply: {
1328
+ path: "/sites/{siteId}/ai/designer/theme/apply",
1329
+ method: "POST",
1330
+ tags: [TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme],
1135
1331
  auth: "user",
1136
- responseKind: "json",
1137
- errors: [
1138
- "validation:invalid_input",
1139
- "resource:not_found",
1140
- "resource:conflict",
1141
- "server:internal_error"
1142
- ]
1332
+ responseKind: "json"
1143
1333
  },
1144
- pauseAppointmentReservation: {
1145
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/pause",
1334
+ aiDesignerPageOpsApply: {
1335
+ path: "/sites/{siteId}/ai/designer/page/apply",
1146
1336
  method: "POST",
1337
+ tags: [TAG_TEMPLATES.siteCollection],
1147
1338
  auth: "user",
1148
- responseKind: "json",
1149
- errors: [
1150
- "resource:not_found",
1151
- "resource:conflict",
1152
- "server:internal_error"
1153
- ]
1339
+ responseKind: "json"
1154
1340
  },
1155
- resumeAppointmentReservation: {
1156
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/resume",
1341
+ applySeoChanges: {
1342
+ path: "/seo/apply",
1157
1343
  method: "POST",
1158
1344
  auth: "user",
1159
- responseKind: "json",
1160
- errors: [
1161
- "resource:not_found",
1162
- "resource:conflict",
1163
- "server:internal_error"
1164
- ]
1345
+ responseKind: "json"
1165
1346
  },
1166
- endAppointmentReservation: {
1167
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/end",
1347
+ aiCreateBriefChat: {
1348
+ path: "/ai/chat/create-brief",
1168
1349
  method: "POST",
1169
1350
  auth: "user",
1170
- responseKind: "json",
1171
- errors: [
1172
- "validation:invalid_input",
1173
- "resource:not_found",
1174
- "resource:conflict",
1175
- "server:internal_error"
1176
- ]
1351
+ responseKind: "json"
1177
1352
  },
1178
- previewAppointmentReservationRun: {
1179
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/run-preview",
1353
+ aiPatchDryRun: {
1354
+ path: "/ai/patch/dry-run",
1180
1355
  method: "POST",
1181
1356
  auth: "user",
1182
- responseKind: "json",
1183
- errors: [
1184
- "validation:invalid_input",
1185
- "resource:not_found",
1186
- "resource:conflict",
1187
- "server:internal_error"
1188
- ]
1357
+ responseKind: "json"
1189
1358
  },
1190
- createAppointmentReservationRun: {
1191
- path: "/sites/{siteId}/bookings/appointment-reservations/{reservationId}/runs",
1359
+ aiPatchApply: {
1360
+ path: "/ai/patch/apply",
1192
1361
  method: "POST",
1193
1362
  auth: "user",
1194
- responseKind: "json",
1195
- errors: [
1196
- "validation:invalid_input",
1197
- "resource:not_found",
1198
- "resource:conflict",
1199
- "server:internal_error"
1200
- ]
1363
+ responseKind: "json"
1201
1364
  },
1202
- createTeamMemberProfile: {
1203
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
1365
+ aiPlaygroundProposeMulti: {
1366
+ path: "/sites/{siteId}/ai/playground/propose-multi",
1204
1367
  method: "POST",
1205
1368
  auth: "user",
1206
- responseKind: "json",
1207
- errors: [
1208
- "validation:invalid_input",
1209
- "resource:not_found",
1210
- "resource:conflict",
1211
- "server:internal_error"
1212
- ]
1369
+ responseKind: "stream"
1213
1370
  },
1214
- updateTeamMemberProfilePolicy: {
1215
- path: "/sites/{siteId}/bookings/resources/profile-policy",
1216
- method: "PUT",
1371
+ aiPlaygroundProposeMultiGet: {
1372
+ path: "/sites/{siteId}/ai/playground/propose-multi",
1373
+ method: "GET",
1217
1374
  auth: "user",
1218
- responseKind: "json",
1219
- errors: ["validation:invalid_input", "server:internal_error"]
1375
+ responseKind: "stream"
1220
1376
  },
1221
- updateTeamMemberProfileContent: {
1222
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
1223
- method: "PUT",
1224
- tags: [
1225
- "site-{siteId}",
1226
- "content-{siteId}-team-member",
1227
- "content-entry-{entryId}"
1228
- ],
1377
+ aiAssistantChatSite: {
1378
+ path: "/sites/{siteId}/ai/assistant/chat",
1379
+ method: "POST",
1229
1380
  auth: "user",
1230
- responseKind: "json",
1231
- errors: [
1232
- "validation:invalid_input",
1233
- "resource:not_found",
1234
- "resource:conflict",
1235
- "server:internal_error"
1236
- ]
1381
+ responseKind: "stream"
1237
1382
  },
1238
- publishTeamMemberProfile: {
1239
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
1383
+ aiDesignerChat: {
1384
+ path: "/sites/{siteId}/ai/designer/chat",
1240
1385
  method: "POST",
1241
- tags: [
1242
- "site-{siteId}",
1243
- "content-{siteId}-team-member",
1244
- "content-entry-{entryId}"
1245
- ],
1246
1386
  auth: "user",
1247
- responseKind: "json",
1248
- errors: [
1249
- "validation:invalid_input",
1250
- "resource:not_found",
1251
- "server:internal_error"
1252
- ]
1387
+ responseKind: "stream"
1253
1388
  },
1254
- discardTeamMemberProfileDraft: {
1255
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
1389
+ aiPlaygroundPageConvert: {
1390
+ path: "/sites/{siteId}/ai/playground/page-convert",
1256
1391
  method: "POST",
1257
- tags: [
1258
- "site-{siteId}",
1259
- "content-{siteId}-team-member",
1260
- "content-entry-{entryId}"
1261
- ],
1262
1392
  auth: "user",
1263
- responseKind: "json",
1264
- errors: [
1265
- "validation:invalid_input",
1266
- "resource:not_found",
1267
- "resource:conflict",
1268
- "server:internal_error"
1269
- ]
1393
+ responseKind: "json"
1270
1394
  },
1271
- unpublishTeamMemberProfile: {
1272
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
1395
+ aiPlaygroundPageConvertJobsCreate: {
1396
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs",
1273
1397
  method: "POST",
1274
- tags: [
1275
- "site-{siteId}",
1276
- "content-{siteId}-team-member",
1277
- "content-entry-{entryId}"
1278
- ],
1279
1398
  auth: "user",
1280
- responseKind: "json",
1281
- errors: [
1282
- "validation:invalid_input",
1283
- "resource:not_found",
1284
- "resource:conflict",
1285
- "server:internal_error"
1286
- ]
1399
+ responseKind: "json"
1287
1400
  },
1288
- scheduleTeamMemberProfile: {
1289
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
1401
+ aiPlaygroundPageConvertJobsList: {
1402
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs",
1403
+ method: "GET",
1404
+ auth: "user",
1405
+ responseKind: "json"
1406
+ },
1407
+ aiPlaygroundPageConvertJobGet: {
1408
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs/{jobId}",
1409
+ method: "GET",
1410
+ auth: "user",
1411
+ responseKind: "json"
1412
+ },
1413
+ aiPlaygroundPageConvertJobRun: {
1414
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs/{jobId}/run",
1290
1415
  method: "POST",
1291
- tags: [
1292
- "site-{siteId}",
1293
- "content-{siteId}-team-member",
1294
- "content-entry-{entryId}"
1295
- ],
1296
1416
  auth: "user",
1297
- responseKind: "json",
1298
- errors: [
1299
- "validation:invalid_input",
1300
- "resource:not_found",
1301
- "resource:conflict",
1302
- "server:internal_error"
1303
- ]
1417
+ responseKind: "json"
1304
1418
  },
1305
- cancelScheduledTeamMemberProfile: {
1306
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
1307
- method: "DELETE",
1308
- tags: [
1309
- "site-{siteId}",
1310
- "content-{siteId}-team-member",
1311
- "content-entry-{entryId}"
1312
- ],
1419
+ aiPlaygroundPageConvertJobEvents: {
1420
+ path: "/sites/{siteId}/ai/playground/page-convert/jobs/{jobId}/events",
1421
+ method: "GET",
1313
1422
  auth: "user",
1314
- responseKind: "json",
1315
- errors: [
1316
- "validation:invalid_input",
1317
- "resource:not_found",
1318
- "resource:conflict",
1319
- "server:internal_error"
1320
- ]
1423
+ responseKind: "json"
1321
1424
  },
1322
- updateTeamMemberProfileRouteMetadata: {
1323
- path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
1324
- method: "PATCH",
1325
- tags: [
1326
- TAG_TEMPLATES.siteCollection,
1327
- TAG_TEMPLATES.siteRoutableContent,
1328
- TAG_TEMPLATES.routeById
1329
- ],
1425
+ aiGenerateSite: {
1426
+ path: "/sites/{siteId}/ai/generate",
1427
+ method: "POST",
1330
1428
  auth: "user",
1331
1429
  responseKind: "json",
1332
- errors: [
1333
- "validation:invalid_input",
1334
- "resource:not_found",
1335
- "resource:conflict",
1336
- "server:internal_error"
1337
- ]
1430
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1338
1431
  },
1339
- listAppointmentServices: {
1340
- path: "/sites/{siteId}/bookings/services",
1432
+ getOnboardingPreviewStatus: {
1433
+ path: "/public/sites/{siteId}/onboarding/preview-status",
1341
1434
  method: "GET",
1342
- auth: "user",
1435
+ auth: "public",
1436
+ errors: [],
1343
1437
  responseKind: "json"
1344
1438
  },
1345
- exportAppointmentServicesCsv: {
1346
- path: "/sites/{siteId}/bookings/services/export.csv",
1439
+ listOnboardingPreviewThemes: {
1440
+ path: "/public/sites/{siteId}/onboarding/themes",
1347
1441
  method: "GET",
1348
- tags: [
1349
- "site-{siteId}",
1350
- "bookings",
1351
- "appointment-services-{siteId}"
1352
- ],
1442
+ auth: "public",
1353
1443
  errors: [],
1354
- auth: "user",
1355
- responseKind: "blob"
1444
+ responseKind: "json"
1356
1445
  },
1357
- createAppointmentService: {
1358
- path: "/sites/{siteId}/bookings/services",
1446
+ acknowledgeLaunchRequirement: {
1447
+ path: "/sites/{siteId}/launch/acknowledge-requirement",
1359
1448
  method: "POST",
1360
1449
  auth: "user",
1450
+ errors: [],
1361
1451
  responseKind: "json",
1362
- errors: ["validation:invalid_input", "server:internal_error"]
1452
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
1363
1453
  },
1364
- getAppointmentService: {
1365
- path: "/sites/{siteId}/bookings/services/{serviceId}",
1366
- method: "GET",
1454
+ goLiveSite: {
1455
+ path: "/sites/{siteId}/launch/go-live",
1456
+ method: "POST",
1367
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: [],
1368
1508
  responseKind: "json"
1369
1509
  },
1370
- updateAppointmentService: {
1371
- path: "/sites/{siteId}/bookings/services/{serviceId}",
1372
- method: "PUT",
1373
- auth: "user",
1374
- responseKind: "json",
1375
- errors: [
1376
- "validation:invalid_input",
1377
- "resource:not_found",
1378
- "server:internal_error"
1379
- ]
1510
+ runPublicOnboardingAttempt: {
1511
+ path: "/public/onboarding/attempts/{attemptToken}/run",
1512
+ method: "POST",
1513
+ auth: "public",
1514
+ errors: [],
1515
+ responseKind: "json"
1380
1516
  },
1381
- deleteAppointmentService: {
1382
- path: "/sites/{siteId}/bookings/services/{serviceId}",
1383
- method: "DELETE",
1517
+ aiSiteWizardSuggestGoals: {
1518
+ path: "/sites/{siteId}/ai/site-wizard/goals",
1519
+ method: "POST",
1384
1520
  auth: "user",
1385
1521
  responseKind: "json",
1386
- errors: ["resource:not_found", "server:internal_error"]
1522
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1387
1523
  },
1388
- getAppointmentSetup: {
1389
- path: "/sites/{siteId}/bookings/appointment-setup",
1390
- method: "GET",
1524
+ aiSiteWizardIntakeTriage: {
1525
+ path: "/sites/{siteId}/ai/site-wizard/intake-triage",
1526
+ method: "POST",
1391
1527
  auth: "user",
1392
1528
  responseKind: "json",
1393
- errors: ["server:internal_error"]
1529
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1394
1530
  },
1395
- applyAppointmentSetup: {
1396
- path: "/sites/{siteId}/bookings/appointment-setup",
1531
+ aiSiteWizardTelemetry: {
1532
+ path: "/sites/{siteId}/ai/site-wizard/telemetry",
1397
1533
  method: "POST",
1398
1534
  auth: "user",
1535
+ errors: [],
1399
1536
  responseKind: "json",
1400
- errors: ["validation:invalid_input", "server:internal_error"]
1537
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1401
1538
  },
1402
- getAppointmentServicesReference: {
1403
- path: "/sites/{siteId}/bookings/services/reference",
1539
+ listGscPropertiesAdmin: {
1540
+ path: "/admin/seo/gsc/properties",
1404
1541
  method: "GET",
1405
- auth: "user",
1542
+ auth: "admin",
1543
+ errors: [],
1406
1544
  responseKind: "json"
1407
1545
  },
1408
- getAppointmentResourcesReference: {
1409
- path: "/sites/{siteId}/bookings/resources/reference",
1546
+ getPublicChallenge: {
1547
+ path: "/public/challenge",
1410
1548
  method: "GET",
1411
- auth: "user",
1412
- responseKind: "json"
1549
+ auth: "public",
1550
+ errors: [],
1551
+ responseKind: "text"
1413
1552
  },
1414
- getResourceServices: {
1415
- path: "/sites/{siteId}/bookings/resources/{resourceId}/services",
1553
+ checkRedirect: {
1554
+ path: "/public/content/redirect",
1416
1555
  method: "GET",
1417
- auth: "user",
1418
- responseKind: "json"
1419
- },
1420
- updateResourceServices: {
1421
- path: "/sites/{siteId}/bookings/resources/{resourceId}/services",
1422
- method: "PUT",
1423
- auth: "user",
1556
+ revalidate: 86400,
1557
+ tags: ["redirect"],
1558
+ errors: [],
1559
+ auth: "public",
1424
1560
  responseKind: "json"
1425
1561
  },
1426
- getServiceResources: {
1427
- path: "/sites/{siteId}/bookings/services/{serviceId}/resources",
1562
+ listRedirectRules: {
1563
+ path: "/sites/{siteId}/redirects",
1428
1564
  method: "GET",
1429
1565
  auth: "user",
1430
1566
  responseKind: "json"
1431
1567
  },
1432
- updateServiceResources: {
1433
- path: "/sites/{siteId}/bookings/services/{serviceId}/resources",
1434
- method: "PUT",
1568
+ createRedirectRule: {
1569
+ path: "/sites/{siteId}/redirects",
1570
+ method: "POST",
1571
+ errors: ["validation:invalid_input", "resource:not_found"],
1435
1572
  auth: "user",
1436
1573
  responseKind: "json"
1437
1574
  },
1438
- listAvailabilityRules: {
1439
- path: "/sites/{siteId}/bookings/resources/{resourceId}/availability",
1440
- method: "GET",
1441
- auth: "user",
1442
- responseKind: "json",
1443
- errors: ["resource:not_found", "server:internal_error"]
1444
- },
1445
- setWeeklyAvailability: {
1446
- path: "/sites/{siteId}/bookings/resources/{resourceId}/weekly-availability",
1447
- method: "PUT",
1448
- auth: "user",
1449
- responseKind: "json",
1450
- errors: [
1451
- "validation:invalid_input",
1452
- "resource:not_found",
1453
- "server:internal_error"
1454
- ]
1455
- },
1456
- setServiceSpecificAvailability: {
1457
- path: "/sites/{siteId}/bookings/resources/{resourceId}/service-availability",
1458
- method: "PUT",
1459
- auth: "user",
1460
- responseKind: "json",
1461
- errors: [
1462
- "validation:invalid_input",
1463
- "resource:not_found",
1464
- "server:internal_error"
1465
- ]
1466
- },
1467
- deleteServiceSpecificAvailability: {
1468
- path: "/sites/{siteId}/bookings/resources/{resourceId}/service-availability/{scheduleId}",
1575
+ deleteRedirectRule: {
1576
+ path: "/sites/{siteId}/redirects/{ruleId}",
1469
1577
  method: "DELETE",
1578
+ errors: ["resource:not_found"],
1470
1579
  auth: "user",
1471
- responseKind: "json",
1472
- errors: ["resource:not_found", "server:internal_error"]
1580
+ responseKind: "json"
1473
1581
  },
1474
- listBlackouts: {
1475
- path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts",
1582
+ listWebhooks: {
1583
+ path: "/sites/{siteId}/webhooks",
1476
1584
  method: "GET",
1585
+ tags: ["site-{siteId}", "webhooks"],
1477
1586
  auth: "user",
1478
- responseKind: "json",
1479
- errors: ["resource:not_found", "server:internal_error"]
1587
+ responseKind: "json"
1480
1588
  },
1481
- createBlackout: {
1482
- path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts",
1589
+ createWebhook: {
1590
+ path: "/sites/{siteId}/webhooks",
1483
1591
  method: "POST",
1592
+ tags: ["site-{siteId}", "webhooks"],
1484
1593
  auth: "user",
1485
- responseKind: "json",
1486
- errors: [
1487
- "validation:invalid_input",
1488
- "resource:not_found",
1489
- "server:internal_error"
1490
- ]
1491
- },
1492
- deleteBlackout: {
1493
- path: "/sites/{siteId}/bookings/resources/{resourceId}/blackouts/{blackoutId}",
1494
- method: "DELETE",
1495
- auth: "user",
1496
- responseKind: "json",
1497
- errors: ["resource:not_found", "server:internal_error"]
1594
+ responseKind: "json"
1498
1595
  },
1499
- getCalendarStatus: {
1500
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
1596
+ getWebhook: {
1597
+ path: "/sites/{siteId}/webhooks/{webhookId}",
1501
1598
  method: "GET",
1599
+ tags: ["site-{siteId}", "webhooks"],
1502
1600
  auth: "user",
1503
- responseKind: "json",
1504
- errors: ["auth:forbidden", "server:internal_error"]
1601
+ responseKind: "json"
1505
1602
  },
1506
- updateCalendarPreferences: {
1507
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
1508
- method: "PUT",
1603
+ updateWebhook: {
1604
+ path: "/sites/{siteId}/webhooks/{webhookId}",
1605
+ method: "PATCH",
1606
+ tags: ["site-{siteId}", "webhooks"],
1509
1607
  auth: "user",
1510
- responseKind: "json",
1511
- errors: [
1512
- "validation:invalid_input",
1513
- "auth:forbidden",
1514
- "resource:not_found",
1515
- "server:internal_error"
1516
- ]
1608
+ responseKind: "json"
1517
1609
  },
1518
- disconnectCalendar: {
1519
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar",
1610
+ deleteWebhook: {
1611
+ path: "/sites/{siteId}/webhooks/{webhookId}",
1520
1612
  method: "DELETE",
1613
+ tags: ["site-{siteId}", "webhooks"],
1521
1614
  auth: "user",
1522
- responseKind: "json",
1523
- errors: [
1524
- "auth:forbidden",
1525
- "resource:not_found",
1526
- "server:internal_error"
1527
- ]
1615
+ responseKind: "json"
1528
1616
  },
1529
- getResourceCalendarFeed: {
1530
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
1617
+ getSdkDeploymentHealth: {
1618
+ path: "/sites/{siteId}/sdk-deployment/health",
1531
1619
  method: "GET",
1620
+ tags: ["site-{siteId}", "webhooks"],
1532
1621
  auth: "user",
1533
- responseKind: "json",
1534
- errors: [
1535
- "auth:forbidden",
1536
- "resource:not_found",
1537
- "server:internal_error"
1538
- ]
1622
+ errors: [],
1623
+ responseKind: "json"
1539
1624
  },
1540
- regenerateResourceCalendarFeed: {
1541
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
1625
+ setupSdkDeploymentRevalidationWebhook: {
1626
+ path: "/sites/{siteId}/sdk-deployment/revalidation-webhook",
1542
1627
  method: "POST",
1628
+ tags: ["site-{siteId}", "webhooks"],
1543
1629
  auth: "user",
1630
+ errors: ["validation:invalid_input", "resource:conflict"],
1544
1631
  responseKind: "json",
1545
- errors: [
1546
- "auth:forbidden",
1547
- "resource:not_found",
1548
- "server:internal_error"
1549
- ]
1550
- },
1551
- revokeResourceCalendarFeed: {
1552
- path: "/sites/{siteId}/bookings/resources/{resourceId}/calendar/feed",
1553
- method: "DELETE",
1554
- auth: "user",
1555
- responseKind: "json",
1556
- errors: [
1557
- "auth:forbidden",
1558
- "resource:not_found",
1559
- "server:internal_error"
1560
- ]
1632
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
1561
1633
  },
1562
- getVenueCalendarFeed: {
1563
- path: "/sites/{siteId}/bookings/venues/{venueId}/calendar/feed",
1634
+ listSiteApiKeys: {
1635
+ path: "/sites/{siteId}/api-keys",
1564
1636
  method: "GET",
1565
1637
  auth: "user",
1566
- responseKind: "json",
1567
- errors: [
1568
- "auth:forbidden",
1569
- "resource:not_found",
1570
- "server:internal_error"
1571
- ]
1638
+ tags: ["site-{siteId}", "api-keys"],
1639
+ responseKind: "json"
1572
1640
  },
1573
- regenerateVenueCalendarFeed: {
1574
- path: "/sites/{siteId}/bookings/venues/{venueId}/calendar/feed",
1641
+ createSiteApiKey: {
1642
+ path: "/sites/{siteId}/api-keys",
1575
1643
  method: "POST",
1576
1644
  auth: "user",
1577
- responseKind: "json",
1578
- errors: [
1579
- "auth:forbidden",
1580
- "resource:not_found",
1581
- "server:internal_error"
1582
- ]
1645
+ tags: ["site-{siteId}", "api-keys"],
1646
+ responseKind: "json"
1583
1647
  },
1584
- revokeVenueCalendarFeed: {
1585
- path: "/sites/{siteId}/bookings/venues/{venueId}/calendar/feed",
1648
+ revokeSiteApiKey: {
1649
+ path: "/sites/{siteId}/api-keys/{keyId}",
1586
1650
  method: "DELETE",
1587
1651
  auth: "user",
1588
- responseKind: "json",
1589
- errors: [
1590
- "auth:forbidden",
1591
- "resource:not_found",
1592
- "server:internal_error"
1593
- ]
1594
- },
1595
- googleCalendarAuthorize: {
1596
- path: "/sites/{siteId}/bookings/calendar/google/authorize",
1597
- method: "GET",
1598
- auth: "user",
1599
- responseKind: "void"
1652
+ tags: ["site-{siteId}", "api-keys"],
1653
+ responseKind: "json"
1600
1654
  },
1601
- googleCalendarCallback: {
1602
- path: "/bookings/calendar/google/callback",
1655
+ getSitePreviewKey: {
1656
+ path: "/sites/{siteId}/api-keys/preview",
1603
1657
  method: "GET",
1604
1658
  auth: "user",
1605
- responseKind: "void"
1659
+ tags: [
1660
+ "site-{siteId}",
1661
+ "api-keys",
1662
+ "preview-key"
1663
+ ],
1664
+ responseKind: "json"
1606
1665
  },
1607
- getAvailableSlots: {
1608
- path: "/sites/{siteId}/bookings/availability/slots",
1609
- method: "GET",
1666
+ createSitePreviewKey: {
1667
+ path: "/sites/{siteId}/api-keys/preview",
1668
+ method: "POST",
1610
1669
  auth: "user",
1670
+ tags: [
1671
+ "site-{siteId}",
1672
+ "api-keys",
1673
+ "preview-key"
1674
+ ],
1611
1675
  responseKind: "json"
1612
1676
  },
1613
- listAppointments: {
1614
- path: "/sites/{siteId}/bookings/appointments",
1677
+ getSiteApiKeyAccessLogs: {
1678
+ path: "/sites/{siteId}/api-keys/access-logs",
1615
1679
  method: "GET",
1616
1680
  auth: "user",
1681
+ tags: [
1682
+ "site-{siteId}",
1683
+ "api-keys",
1684
+ "access-logs"
1685
+ ],
1617
1686
  responseKind: "json"
1618
1687
  },
1619
- exportBookingAppointmentsCsv: {
1620
- path: "/sites/{siteId}/bookings/appointments/export.csv",
1688
+ listManagementKeys: {
1689
+ path: "/sites/{siteId}/api-keys/management",
1621
1690
  method: "GET",
1622
1691
  auth: "user",
1623
- errors: [],
1624
- responseKind: "blob"
1692
+ tags: [
1693
+ "site-{siteId}",
1694
+ "api-keys",
1695
+ "management-keys"
1696
+ ],
1697
+ responseKind: "json"
1625
1698
  },
1626
- createAppointment: {
1627
- path: "/sites/{siteId}/bookings/appointments",
1699
+ createManagementKey: {
1700
+ path: "/sites/{siteId}/api-keys/management",
1628
1701
  method: "POST",
1629
1702
  auth: "user",
1703
+ tags: [
1704
+ "site-{siteId}",
1705
+ "api-keys",
1706
+ "management-keys"
1707
+ ],
1630
1708
  responseKind: "json"
1631
1709
  },
1632
- upsertBookingRequirementConfig: {
1633
- path: "/sites/{siteId}/bookings/requirements/config",
1634
- method: "PUT",
1710
+ revokeManagementKey: {
1711
+ path: "/sites/{siteId}/api-keys/management",
1712
+ method: "DELETE",
1635
1713
  auth: "user",
1636
- responseKind: "json",
1637
- errors: [
1638
- "validation:invalid_input",
1639
- "resource:not_found",
1640
- "server:internal_error"
1641
- ]
1714
+ tags: [
1715
+ "site-{siteId}",
1716
+ "api-keys",
1717
+ "management-keys"
1718
+ ],
1719
+ responseKind: "json"
1642
1720
  },
1643
- cancelAppointment: {
1644
- path: "/sites/{siteId}/bookings/appointments/{appointmentId}/cancel",
1645
- method: "POST",
1721
+ getBookingSettings: {
1722
+ path: "/sites/{siteId}/bookings/settings",
1723
+ method: "GET",
1646
1724
  auth: "user",
1725
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings],
1647
1726
  responseKind: "json"
1648
1727
  },
1649
- rescheduleAppointment: {
1650
- path: "/sites/{siteId}/bookings/appointments/{appointmentId}/reschedule",
1651
- method: "POST",
1728
+ updateBookingSettings: {
1729
+ path: "/sites/{siteId}/bookings/settings",
1730
+ method: "PUT",
1652
1731
  auth: "user",
1732
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings],
1653
1733
  responseKind: "json",
1654
1734
  errors: [
1655
1735
  "validation:invalid_input",
1656
- "resource:not_found",
1657
1736
  "auth:forbidden",
1658
1737
  "resource:conflict",
1659
1738
  "server:internal_error"
1660
1739
  ]
1661
1740
  },
1662
- listCourses: {
1663
- path: "/sites/{siteId}/bookings/courses",
1741
+ listBookingClosures: {
1742
+ path: "/sites/{siteId}/bookings/closures",
1664
1743
  method: "GET",
1665
1744
  auth: "user",
1666
- responseKind: "json"
1667
- },
1668
- exportCoursesCsv: {
1669
- path: "/sites/{siteId}/bookings/courses/export.csv",
1670
- method: "GET",
1671
1745
  tags: [
1672
1746
  "site-{siteId}",
1673
1747
  "bookings",
1674
- "courses-{siteId}"
1748
+ "closures-{siteId}"
1675
1749
  ],
1676
- errors: [],
1677
- auth: "user",
1678
- responseKind: "blob"
1750
+ responseKind: "json",
1751
+ errors: ["auth:forbidden", "server:internal_error"]
1679
1752
  },
1680
- createCourse: {
1681
- path: "/sites/{siteId}/bookings/courses",
1753
+ previewBookingClosure: {
1754
+ path: "/sites/{siteId}/bookings/closures/preview",
1682
1755
  method: "POST",
1683
1756
  auth: "user",
1757
+ tags: [
1758
+ "site-{siteId}",
1759
+ "bookings",
1760
+ "closures-{siteId}"
1761
+ ],
1684
1762
  responseKind: "json",
1685
1763
  errors: [
1686
1764
  "validation:invalid_input",
1687
- "resource:not_found",
1688
- "resource:already_exists",
1689
- "resource:conflict",
1765
+ "auth:forbidden",
1690
1766
  "server:internal_error"
1691
1767
  ]
1692
1768
  },
1693
- getCourse: {
1694
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1695
- method: "GET",
1696
- auth: "user",
1697
- responseKind: "json"
1698
- },
1699
- updateCourse: {
1700
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1701
- method: "PATCH",
1769
+ createBookingClosure: {
1770
+ path: "/sites/{siteId}/bookings/closures",
1771
+ method: "POST",
1702
1772
  auth: "user",
1773
+ tags: [
1774
+ "site-{siteId}",
1775
+ "bookings",
1776
+ "closures-{siteId}"
1777
+ ],
1703
1778
  responseKind: "json",
1704
1779
  errors: [
1705
1780
  "validation:invalid_input",
1706
- "resource:not_found",
1707
1781
  "resource:conflict",
1782
+ "auth:forbidden",
1708
1783
  "server:internal_error"
1709
1784
  ]
1710
1785
  },
1711
- deleteCourse: {
1712
- 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}",
1713
1800
  method: "DELETE",
1714
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",
1715
1826
  responseKind: "json",
1827
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
1716
1828
  errors: [
1717
1829
  "validation:invalid_input",
1830
+ "auth:forbidden",
1718
1831
  "resource:not_found",
1719
- "resource:conflict",
1720
1832
  "server:internal_error"
1721
1833
  ]
1722
1834
  },
1723
- deleteCourseProgram: {
1724
- path: "/sites/{siteId}/bookings/courses/programs/{programId}",
1725
- method: "DELETE",
1835
+ opsUpdateEventAttendeeCheckin: {
1836
+ path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/checkin",
1837
+ method: "POST",
1726
1838
  auth: "user",
1727
1839
  responseKind: "json",
1840
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
1728
1841
  errors: [
1729
1842
  "validation:invalid_input",
1843
+ "auth:forbidden",
1730
1844
  "resource:not_found",
1731
- "resource:conflict",
1732
1845
  "server:internal_error"
1733
1846
  ]
1734
1847
  },
1735
- duplicateCourse: {
1736
- 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",
1737
1856
  method: "POST",
1738
1857
  auth: "user",
1739
1858
  responseKind: "json",
1859
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
1740
1860
  errors: [
1741
1861
  "validation:invalid_input",
1862
+ "auth:forbidden",
1742
1863
  "resource:not_found",
1743
- "resource:already_exists",
1864
+ "resource:conflict",
1744
1865
  "server:internal_error"
1745
1866
  ]
1746
1867
  },
1747
- changeCourseContentOwnership: {
1748
- 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",
1749
1877
  method: "POST",
1750
1878
  auth: "user",
1751
1879
  responseKind: "json",
1752
1880
  errors: [
1753
1881
  "validation:invalid_input",
1882
+ "auth:forbidden",
1754
1883
  "resource:not_found",
1755
1884
  "resource:conflict",
1756
1885
  "server:internal_error"
1757
1886
  ]
1758
1887
  },
1759
- addCourseEnrollment: {
1760
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1888
+ opsRefundEventAttendee: {
1889
+ path: "/ops/sites/{siteId}/events/attendees/{attendeeId}/refund",
1761
1890
  method: "POST",
1762
1891
  auth: "user",
1763
1892
  responseKind: "json",
1893
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
1764
1894
  errors: [
1765
1895
  "validation:invalid_input",
1896
+ "auth:forbidden",
1766
1897
  "resource:not_found",
1767
1898
  "resource:conflict",
1768
1899
  "server:internal_error"
1769
1900
  ]
1770
1901
  },
1771
- listCourseEnrollments: {
1772
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1902
+ getEmailSettings: {
1903
+ path: "/sites/{siteId}/settings/emails",
1773
1904
  method: "GET",
1905
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
1774
1906
  auth: "user",
1775
1907
  responseKind: "json"
1776
1908
  },
1777
- exportCourseEnrollmentsCsv: {
1778
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
1779
- method: "GET",
1909
+ updateEmailSettings: {
1910
+ path: "/sites/{siteId}/settings/emails",
1911
+ method: "PUT",
1912
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
1780
1913
  auth: "user",
1781
- errors: [],
1782
- responseKind: "blob"
1914
+ responseKind: "json"
1783
1915
  },
1784
- listCourseWaitlist: {
1785
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
1786
- method: "GET",
1916
+ sendTestEmail: {
1917
+ path: "/sites/{siteId}/settings/emails/test",
1918
+ method: "POST",
1919
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
1787
1920
  auth: "user",
1788
1921
  responseKind: "json",
1789
- errors: []
1790
- },
1791
- exportCourseWaitlistCsv: {
1792
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
1793
- method: "GET",
1794
- tags: [
1795
- "site-{siteId}",
1796
- "bookings",
1797
- "courses-{courseId}"
1798
- ],
1799
- auth: "user",
1800
- responseKind: "blob",
1801
- errors: []
1802
- },
1803
- updateCourseEnrollment: {
1804
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
1805
- 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],
1806
1928
  auth: "user",
1807
- responseKind: "json",
1808
- errors: [
1809
- "validation:invalid_input",
1810
- "resource:not_found",
1811
- "server:internal_error"
1812
- ]
1929
+ responseKind: "json"
1813
1930
  },
1931
+ ...NEWSLETTER_ENDPOINT_DEFINITIONS,
1932
+ ...APPOINTMENT_ENDPOINT_DEFINITIONS,
1933
+ ...COURSE_ENDPOINT_DEFINITIONS,
1814
1934
  getSite: {
1815
1935
  path: "/sites",
1816
1936
  method: "GET",
@@ -2152,7 +2272,13 @@ const API_ENDPOINTS$1 = {
2152
2272
  method: "POST",
2153
2273
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
2154
2274
  auth: "user",
2155
- responseKind: "json"
2275
+ responseKind: "json",
2276
+ errors: [
2277
+ "validation:invalid_input",
2278
+ "resource:not_found",
2279
+ "resource:conflict",
2280
+ "server:internal_error"
2281
+ ]
2156
2282
  },
2157
2283
  getContentEntry: {
2158
2284
  path: "/sites/{siteId}/content/{type}/{entryId}",
@@ -2163,12 +2289,22 @@ const API_ENDPOINTS$1 = {
2163
2289
  "content-entry-{entryId}"
2164
2290
  ],
2165
2291
  auth: "user",
2166
- responseKind: "json"
2292
+ responseKind: "json",
2293
+ errors: [
2294
+ "validation:invalid_input",
2295
+ "resource:not_found",
2296
+ "resource:conflict",
2297
+ "server:internal_error"
2298
+ ]
2167
2299
  },
2168
2300
  listContentEntryVersions: {
2169
2301
  path: "/sites/{siteId}/content/{type}/{entryId}/versions",
2170
2302
  method: "GET",
2171
- errors: ["validation:invalid_input", "resource:not_found"],
2303
+ errors: [
2304
+ "validation:invalid_input",
2305
+ "resource:not_found",
2306
+ "resource:conflict"
2307
+ ],
2172
2308
  tags: [
2173
2309
  "site-{siteId}",
2174
2310
  "content-{siteId}-{type}",
@@ -2180,7 +2316,11 @@ const API_ENDPOINTS$1 = {
2180
2316
  getContentEntryVersion: {
2181
2317
  path: "/sites/{siteId}/content/{type}/{entryId}/versions/{versionId}",
2182
2318
  method: "GET",
2183
- errors: ["validation:invalid_input", "resource:not_found"],
2319
+ errors: [
2320
+ "validation:invalid_input",
2321
+ "resource:not_found",
2322
+ "resource:conflict"
2323
+ ],
2184
2324
  tags: [
2185
2325
  "site-{siteId}",
2186
2326
  "content-{siteId}-{type}",
@@ -2215,6 +2355,12 @@ const API_ENDPOINTS$1 = {
2215
2355
  "content-entry-{entryId}"
2216
2356
  ],
2217
2357
  auth: "user",
2358
+ errors: [
2359
+ "validation:invalid_input",
2360
+ "resource:not_found",
2361
+ "resource:conflict",
2362
+ "server:internal_error"
2363
+ ],
2218
2364
  responseKind: "json"
2219
2365
  },
2220
2366
  updatePageSurfaceDraftContent: {
@@ -2284,6 +2430,7 @@ const API_ENDPOINTS$1 = {
2284
2430
  errors: [
2285
2431
  "validation:invalid_input",
2286
2432
  "resource:not_found",
2433
+ "resource:conflict",
2287
2434
  "server:internal_error"
2288
2435
  ],
2289
2436
  tags: [
@@ -2300,6 +2447,7 @@ const API_ENDPOINTS$1 = {
2300
2447
  errors: [
2301
2448
  "validation:invalid_input",
2302
2449
  "resource:not_found",
2450
+ "resource:conflict",
2303
2451
  "server:internal_error"
2304
2452
  ],
2305
2453
  tags: [
@@ -2320,6 +2468,12 @@ const API_ENDPOINTS$1 = {
2320
2468
  TAG_TEMPLATES.routeById
2321
2469
  ],
2322
2470
  auth: "user",
2471
+ errors: [
2472
+ "validation:invalid_input",
2473
+ "resource:not_found",
2474
+ "resource:conflict",
2475
+ "server:internal_error"
2476
+ ],
2323
2477
  responseKind: "json"
2324
2478
  },
2325
2479
  publishContentEntry: {
@@ -2376,6 +2530,13 @@ const API_ENDPOINTS$1 = {
2376
2530
  "content-entry-{entryId}"
2377
2531
  ],
2378
2532
  auth: "user",
2533
+ errors: [
2534
+ "auth:forbidden",
2535
+ "validation:invalid_input",
2536
+ "resource:not_found",
2537
+ "resource:conflict",
2538
+ "server:internal_error"
2539
+ ],
2379
2540
  responseKind: "json"
2380
2541
  },
2381
2542
  unpublishContentEntry: {
@@ -2428,7 +2589,13 @@ const API_ENDPOINTS$1 = {
2428
2589
  "content-entry-{entryId}"
2429
2590
  ],
2430
2591
  auth: "user",
2431
- responseKind: "json"
2592
+ responseKind: "json",
2593
+ errors: [
2594
+ "validation:invalid_input",
2595
+ "resource:not_found",
2596
+ "resource:conflict",
2597
+ "server:internal_error"
2598
+ ]
2432
2599
  },
2433
2600
  bulkPublishContentEntries: {
2434
2601
  path: "/sites/{siteId}/content/{type}/bulk-publish",
@@ -2450,6 +2617,12 @@ const API_ENDPOINTS$1 = {
2450
2617
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
2451
2618
  auth: "user",
2452
2619
  responseKind: "json",
2620
+ errors: [
2621
+ "validation:invalid_input",
2622
+ "resource:not_found",
2623
+ "resource:conflict",
2624
+ "server:internal_error"
2625
+ ],
2453
2626
  demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
2454
2627
  },
2455
2628
  updateSiteGeneralSettings: {
@@ -3720,7 +3893,7 @@ const API_ENDPOINTS$1 = {
3720
3893
  ],
3721
3894
  auth: "user",
3722
3895
  responseKind: "json",
3723
- errors: ["resource:not_found"]
3896
+ errors: ["resource:not_found", "resource:conflict"]
3724
3897
  },
3725
3898
  listEntryPageContentSlots: {
3726
3899
  path: "/sites/{siteId}/content/{type}/{entryId}/slots",
@@ -3733,7 +3906,7 @@ const API_ENDPOINTS$1 = {
3733
3906
  ],
3734
3907
  auth: "user",
3735
3908
  responseKind: "json",
3736
- errors: ["resource:not_found"]
3909
+ errors: ["resource:not_found", "resource:conflict"]
3737
3910
  },
3738
3911
  createEntrySlotBlock: {
3739
3912
  path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks",
@@ -3746,7 +3919,11 @@ const API_ENDPOINTS$1 = {
3746
3919
  ],
3747
3920
  auth: "user",
3748
3921
  responseKind: "json",
3749
- errors: ["validation:invalid_input", "resource:not_found"]
3922
+ errors: [
3923
+ "validation:invalid_input",
3924
+ "resource:not_found",
3925
+ "resource:conflict"
3926
+ ]
3750
3927
  },
3751
3928
  reorderEntrySlotBlocks: {
3752
3929
  path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/reorder",
@@ -3759,7 +3936,11 @@ const API_ENDPOINTS$1 = {
3759
3936
  ],
3760
3937
  auth: "user",
3761
3938
  responseKind: "json",
3762
- errors: ["validation:invalid_input", "resource:not_found"]
3939
+ errors: [
3940
+ "validation:invalid_input",
3941
+ "resource:not_found",
3942
+ "resource:conflict"
3943
+ ]
3763
3944
  },
3764
3945
  deleteEntrySlotBlock: {
3765
3946
  path: "/sites/{siteId}/content/{type}/{entryId}/slots/{slotKey}/blocks/{blockId}",
@@ -3772,7 +3953,7 @@ const API_ENDPOINTS$1 = {
3772
3953
  ],
3773
3954
  auth: "user",
3774
3955
  responseKind: "json",
3775
- errors: ["resource:not_found"]
3956
+ errors: ["resource:not_found", "resource:conflict"]
3776
3957
  },
3777
3958
  listPageSurfaceContentSlots: {
3778
3959
  path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/slots",
@@ -4450,14 +4631,7 @@ const API_ENDPOINTS$1 = {
4450
4631
  auth: "public",
4451
4632
  responseKind: "json"
4452
4633
  },
4453
- listPublicCourses: {
4454
- path: "/public/sites/{siteId}/courses",
4455
- method: "GET",
4456
- revalidate: 60,
4457
- tags: [TAG_TEMPLATES.publicCourses],
4458
- auth: "public",
4459
- responseKind: "json"
4460
- },
4634
+ ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS,
4461
4635
  listPublicTeamMembers: {
4462
4636
  path: "/public/sites/{siteId}/team-members",
4463
4637
  method: "GET",
@@ -4467,33 +4641,11 @@ const API_ENDPOINTS$1 = {
4467
4641
  auth: "public",
4468
4642
  responseKind: "json"
4469
4643
  },
4470
- getPublicCourse: {
4471
- path: "/public/sites/{siteId}/courses/{courseId}",
4472
- method: "GET",
4473
- revalidate: 60,
4474
- tags: [TAG_TEMPLATES.publicCourses],
4475
- auth: "public",
4476
- responseKind: "json"
4477
- },
4478
- enrollInCourse: {
4479
- path: "/public/sites/{siteId}/courses/enroll",
4480
- method: "POST",
4481
- tags: [TAG_TEMPLATES.publicCourses, "course-enrollment"],
4482
- auth: "public",
4483
- responseKind: "json"
4484
- },
4485
- checkCourseEligibility: {
4486
- path: "/public/sites/{siteId}/courses/check-eligibility",
4487
- method: "POST",
4488
- tags: [TAG_TEMPLATES.publicCourses, "course-enrollment"],
4489
- auth: "public",
4490
- responseKind: "json"
4491
- },
4492
4644
  resolveWaitlistClaim: {
4493
4645
  path: "/public/sites/{siteId}/waitlists/claim/resolve",
4494
4646
  method: "POST",
4495
4647
  tags: [
4496
- TAG_TEMPLATES.publicCourses,
4648
+ TAG_TEMPLATES.publicWholeSeriesOfferings,
4497
4649
  TAG_TEMPLATES.publicEvents,
4498
4650
  "waitlist-claims"
4499
4651
  ],
@@ -4506,27 +4658,6 @@ const API_ENDPOINTS$1 = {
4506
4658
  "server:internal_error"
4507
4659
  ]
4508
4660
  },
4509
- createCourseCheckout: {
4510
- path: "/public/sites/{siteId}/courses/checkout",
4511
- method: "POST",
4512
- tags: [TAG_TEMPLATES.publicCourses, "course-checkout"],
4513
- auth: "public",
4514
- responseKind: "json",
4515
- errors: [
4516
- "auth:unauthenticated",
4517
- "validation:invalid_input",
4518
- "resource:not_found",
4519
- "resource:conflict",
4520
- "server:internal_error"
4521
- ]
4522
- },
4523
- getCourseRegistrationStatus: {
4524
- path: "/public/sites/{siteId}/courses/registration-status",
4525
- method: "GET",
4526
- tags: [TAG_TEMPLATES.publicCourses, "course-checkout"],
4527
- auth: "public",
4528
- responseKind: "json"
4529
- },
4530
4661
  listPublicPasses: {
4531
4662
  path: "/public/sites/{siteId}/bookings/products/passes",
4532
4663
  method: "GET",
@@ -4627,14 +4758,6 @@ const API_ENDPOINTS$1 = {
4627
4758
  responseKind: "json",
4628
4759
  errors: []
4629
4760
  },
4630
- resolveEntrySubroute: {
4631
- path: "/public/sites/{siteId}/routing/subroutes/resolve",
4632
- method: "GET",
4633
- revalidate: 60,
4634
- tags: ["site-{siteId}", "entry-subroute"],
4635
- auth: "public",
4636
- responseKind: "json"
4637
- },
4638
4761
  resolveEventOccurrence: {
4639
4762
  path: "/public/sites/{siteId}/events/occurrences/resolve",
4640
4763
  method: "GET",
@@ -4978,13 +5101,6 @@ const API_ENDPOINTS$1 = {
4978
5101
  auth: "user",
4979
5102
  responseKind: "json"
4980
5103
  },
4981
- getEventSeriesContentEditor: {
4982
- path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-editor",
4983
- method: "GET",
4984
- tags: ["site-{siteId}", "event-series-{seriesId}"],
4985
- auth: "user",
4986
- responseKind: "json"
4987
- },
4988
5104
  updateEventSeries: {
4989
5105
  path: "/sites/{siteId}/bookings/event-series/{seriesId}",
4990
5106
  method: "PATCH",
@@ -6323,6 +6439,7 @@ const API_ENDPOINTS$1 = {
6323
6439
  errors: [
6324
6440
  "validation:invalid_input",
6325
6441
  "resource:not_found",
6442
+ "resource:conflict",
6326
6443
  "server:internal_error"
6327
6444
  ],
6328
6445
  auth: "service",
@@ -6436,24 +6553,12 @@ const API_ENDPOINTS$1 = {
6436
6553
  auth: "service",
6437
6554
  responseKind: "json"
6438
6555
  },
6439
- sdkPullCourses: {
6440
- path: "/sdk/{siteId}/pull/courses",
6441
- method: "GET",
6442
- auth: "service",
6443
- responseKind: "json"
6444
- },
6445
6556
  sdkPullEntries: {
6446
6557
  path: "/sdk/{siteId}/pull/entries",
6447
6558
  method: "GET",
6448
6559
  auth: "service",
6449
6560
  responseKind: "json"
6450
6561
  },
6451
- sdkPullEntriesByType: {
6452
- path: "/sdk/{siteId}/pull/entries/{type}",
6453
- method: "GET",
6454
- auth: "service",
6455
- responseKind: "json"
6456
- },
6457
6562
  sdkPullEntriesAll: {
6458
6563
  path: "/sdk/{siteId}/pull/entries/all",
6459
6564
  method: "GET",
@@ -6719,48 +6824,13 @@ const API_ENDPOINTS$1 = {
6719
6824
  "server:internal_error"
6720
6825
  ]
6721
6826
  },
6722
- sdkListCourses: {
6723
- path: "/sdk/{siteId}/courses",
6724
- method: "GET",
6725
- auth: "service",
6726
- responseKind: "json"
6727
- },
6728
- sdkUpsertCourse: {
6729
- path: "/sdk/{siteId}/courses",
6730
- method: "POST",
6731
- auth: "service",
6732
- responseKind: "json"
6733
- },
6734
- sdkGetCourse: {
6735
- path: "/sdk/{siteId}/courses/{identifier}",
6736
- method: "GET",
6737
- auth: "service",
6738
- responseKind: "json"
6739
- },
6740
- sdkDeleteCourse: {
6741
- path: "/sdk/{siteId}/courses/{identifier}",
6742
- method: "DELETE",
6743
- auth: "service",
6744
- responseKind: "json"
6745
- },
6746
6827
  sdkUpsertEntry: {
6747
6828
  path: "/sdk/{siteId}/entries",
6748
6829
  method: "POST",
6749
6830
  auth: "service",
6750
6831
  responseKind: "json"
6751
6832
  },
6752
- sdkListEntries: {
6753
- path: "/sdk/{siteId}/entries/{contentType}",
6754
- method: "GET",
6755
- auth: "service",
6756
- responseKind: "json"
6757
- },
6758
- sdkGetEntry: {
6759
- path: "/sdk/{siteId}/entries/{contentType}/{identifier}",
6760
- method: "GET",
6761
- auth: "service",
6762
- responseKind: "json"
6763
- },
6833
+ ...SDK_ENTRY_READ_ENDPOINTS,
6764
6834
  sdkDeleteEntry: {
6765
6835
  path: "/sdk/{siteId}/entries/{contentType}/{identifier}",
6766
6836
  method: "DELETE",
@@ -6985,21 +7055,22 @@ const API_ENDPOINTS$1 = {
6985
7055
  "server:internal_error"
6986
7056
  ]
6987
7057
  },
6988
- portalGetCourses: {
6989
- path: "/portal/courses",
7058
+ portalGetWholeSeriesRegistrations: {
7059
+ path: "/portal/dated-offerings/whole-series",
6990
7060
  method: "GET",
6991
7061
  auth: "public",
6992
- responseKind: "json"
7062
+ responseKind: "json",
7063
+ errors: ["server:internal_error"]
6993
7064
  },
6994
- portalGetCourseBookingQuestions: {
6995
- path: "/portal/courses/{enrollmentId}/booking-questions",
7065
+ portalGetWholeSeriesBookingQuestions: {
7066
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
6996
7067
  method: "GET",
6997
7068
  auth: "public",
6998
7069
  responseKind: "json",
6999
7070
  errors: ["resource:not_found", "server:internal_error"]
7000
7071
  },
7001
- portalUpdateCourseBookingQuestions: {
7002
- path: "/portal/courses/{enrollmentId}/booking-questions",
7072
+ portalUpdateWholeSeriesBookingQuestions: {
7073
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
7003
7074
  method: "PUT",
7004
7075
  auth: "public",
7005
7076
  responseKind: "json",
@@ -7009,8 +7080,8 @@ const API_ENDPOINTS$1 = {
7009
7080
  "server:internal_error"
7010
7081
  ]
7011
7082
  },
7012
- portalCreateCourseBookingQuestionsUploadUrl: {
7013
- path: "/portal/courses/{enrollmentId}/booking-questions/upload-url",
7083
+ portalCreateWholeSeriesBookingQuestionsUploadUrl: {
7084
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload-url",
7014
7085
  method: "POST",
7015
7086
  auth: "public",
7016
7087
  responseKind: "json",
@@ -7020,8 +7091,8 @@ const API_ENDPOINTS$1 = {
7020
7091
  "server:internal_error"
7021
7092
  ]
7022
7093
  },
7023
- portalFinalizeCourseBookingQuestionsUpload: {
7024
- path: "/portal/courses/{enrollmentId}/booking-questions/upload",
7094
+ portalFinalizeWholeSeriesBookingQuestionsUpload: {
7095
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload",
7025
7096
  method: "POST",
7026
7097
  auth: "public",
7027
7098
  responseKind: "json",
@@ -7031,11 +7102,12 @@ const API_ENDPOINTS$1 = {
7031
7102
  "server:internal_error"
7032
7103
  ]
7033
7104
  },
7034
- portalCancelCourseEnrollment: {
7035
- path: "/portal/courses/{enrollmentId}/cancel",
7105
+ portalCancelWholeSeriesRegistration: {
7106
+ path: "/portal/dated-offerings/whole-series/{enrollmentId}/cancel",
7036
7107
  method: "POST",
7037
7108
  auth: "public",
7038
- responseKind: "json"
7109
+ responseKind: "json",
7110
+ errors: ["resource:not_found", "server:internal_error"]
7039
7111
  },
7040
7112
  portalCancelEventRegistration: {
7041
7113
  path: "/portal/events/{registrationId}/cancel",
@@ -7352,6 +7424,7 @@ function extractApiEnvelopeErrorDetails(body) {
7352
7424
  if (!error) return {
7353
7425
  rawCode: null,
7354
7426
  code: null,
7427
+ tag: null,
7355
7428
  message: null,
7356
7429
  status: null,
7357
7430
  fieldErrors: null
@@ -7361,6 +7434,7 @@ function extractApiEnvelopeErrorDetails(body) {
7361
7434
  return {
7362
7435
  rawCode,
7363
7436
  code: isApiErrorCode(rawCode) ? rawCode : null,
7437
+ tag: typeof error.tag === "string" ? error.tag : null,
7364
7438
  message,
7365
7439
  status: typeof error.status === "number" && Number.isFinite(error.status) ? error.status : null,
7366
7440
  fieldErrors: fieldErrorsFromUnknown(error.fieldErrors)
@@ -7378,6 +7452,7 @@ var ApiEnvelopeError = class extends Error {
7378
7452
  this.requestId = error.requestId;
7379
7453
  this.timestamp = error.timestamp;
7380
7454
  this.status = error.status;
7455
+ this.tag = error.tag;
7381
7456
  this.fieldErrors = error.fieldErrors;
7382
7457
  }
7383
7458
  };
@@ -7849,7 +7924,7 @@ var SimpleCache = class {
7849
7924
  * 1. This constant
7850
7925
  * 2. The "version" field in package.json
7851
7926
  */
7852
- const SDK_VERSION = "0.121.0";
7927
+ const SDK_VERSION = "0.124.0";
7853
7928
  //#endregion
7854
7929
  //#region src/client/error.ts
7855
7930
  let _Symbol$for;
@@ -8054,12 +8129,10 @@ const PUBLIC_ENDPOINT_NAMES = [
8054
8129
  "getPublicChallenge",
8055
8130
  "listPublicEvents",
8056
8131
  "batchBlockLoaders",
8057
- "listPublicCourses",
8058
8132
  "listPublicTeamMembers",
8059
8133
  "listPublicProducts",
8060
8134
  "listPublicPasses",
8061
8135
  "listPublicMemberships",
8062
- "resolveEntrySubroute",
8063
8136
  "resolveEventOccurrence",
8064
8137
  "checkRedirect",
8065
8138
  "getRoutableContent",
@@ -8177,14 +8250,6 @@ const API_ENDPOINTS = Object.freeze({
8177
8250
  auth: "public",
8178
8251
  responseKind: "json"
8179
8252
  },
8180
- listPublicCourses: {
8181
- path: "/public/sites/{siteId}/courses",
8182
- method: "GET",
8183
- revalidate: 60,
8184
- tags: ["riverbank:site:{siteId}:public-courses"],
8185
- auth: "public",
8186
- responseKind: "json"
8187
- },
8188
8253
  listPublicTeamMembers: {
8189
8254
  path: "/public/sites/{siteId}/team-members",
8190
8255
  method: "GET",
@@ -8217,14 +8282,6 @@ const API_ENDPOINTS = Object.freeze({
8217
8282
  auth: "public",
8218
8283
  responseKind: "json"
8219
8284
  },
8220
- resolveEntrySubroute: {
8221
- path: "/public/sites/{siteId}/routing/subroutes/resolve",
8222
- method: "GET",
8223
- revalidate: 60,
8224
- tags: ["site-{siteId}", "entry-subroute"],
8225
- auth: "public",
8226
- responseKind: "json"
8227
- },
8228
8285
  resolveEventOccurrence: {
8229
8286
  path: "/public/sites/{siteId}/events/occurrences/resolve",
8230
8287
  method: "GET",
@@ -8265,13 +8322,193 @@ const API_ENDPOINTS = Object.freeze({
8265
8322
  auth: "public",
8266
8323
  responseKind: "json"
8267
8324
  }
8268
- });
8269
- function buildEndpointURL(baseURL, endpoint) {
8270
- 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
+ };
8271
8509
  }
8272
8510
  //#endregion
8273
8511
  //#region src/client/runtimeCachePolicy.ts
8274
- const DEFAULT_PUBLISHED_RUNTIME_CACHE_PAYLOAD_SCHEMA_VERSION = 1;
8275
8512
  const DEFAULT_STALE_TTL_SEC = 1440 * 60;
8276
8513
  const DEFAULT_MEMORY_TTL_SEC = 60;
8277
8514
  const RUNTIME_CACHE_DURABILITY_OVERRIDES = {
@@ -8327,10 +8564,6 @@ const RUNTIME_CACHE_DURABILITY_OVERRIDES = {
8327
8564
  kind: "live-only",
8328
8565
  reason: "opaque_batch_loader"
8329
8566
  },
8330
- listPublicCourses: {
8331
- kind: "memory-only",
8332
- reason: "durable_rollout_pending"
8333
- },
8334
8567
  listPublicTeamMembers: {
8335
8568
  kind: "memory-only",
8336
8569
  reason: "durable_rollout_pending"
@@ -8347,10 +8580,6 @@ const RUNTIME_CACHE_DURABILITY_OVERRIDES = {
8347
8580
  kind: "live-only",
8348
8581
  reason: "safety_sensitive_booking"
8349
8582
  },
8350
- resolveEntrySubroute: {
8351
- kind: "memory-only",
8352
- reason: "durable_rollout_pending"
8353
- },
8354
8583
  resolveEventOccurrence: {
8355
8584
  kind: "memory-only",
8356
8585
  reason: "durable_rollout_pending"
@@ -8381,250 +8610,71 @@ function isTruthyParam(value) {
8381
8610
  }
8382
8611
  function isPreviewRequest(endpoint, params) {
8383
8612
  if (endpoint === "getContentByPath") return isTruthyParam(params.preview);
8384
- if (endpoint === "listPublishedEntries" || endpoint === "resolveEntrySubroute" || endpoint === "resolveEventOccurrence") return params.stage === "preview";
8385
- return false;
8386
- }
8387
- function getEndpointFreshTtlSec(endpoint) {
8388
- return API_ENDPOINTS[endpoint].revalidate ?? DEFAULT_MEMORY_TTL_SEC;
8389
- }
8390
- function assertNever(value) {
8391
- throw new Error(`Unhandled runtime cache policy override: ${String(value)}`);
8392
- }
8393
- function resolveKnownEndpointPolicy(endpoint, params) {
8394
- if (isPreviewRequest(endpoint, params)) return {
8395
- kind: "live-only",
8396
- endpoint,
8397
- reason: "preview_request"
8398
- };
8399
- if (endpoint === "getSite" && isTruthyParam(params.force)) return {
8400
- kind: "live-only",
8401
- endpoint,
8402
- reason: "force_refresh"
8403
- };
8404
- const override = RUNTIME_CACHE_DURABILITY_OVERRIDES[endpoint];
8405
- if (override.kind === "live-only") return {
8406
- kind: "live-only",
8407
- endpoint,
8408
- reason: override.reason
8409
- };
8410
- const endpointDefinition = API_ENDPOINTS[endpoint];
8411
- if (endpointDefinition.method !== "GET") return {
8412
- kind: "live-only",
8413
- endpoint,
8414
- reason: "non_get_request"
8415
- };
8416
- if (endpointDefinition.auth === "user") return {
8417
- kind: "live-only",
8418
- endpoint,
8419
- reason: "auth_required"
8420
- };
8421
- switch (override.kind) {
8422
- case "durable-public-stale": return {
8423
- kind: "durable-public-stale",
8424
- endpoint,
8425
- freshTtlSec: getEndpointFreshTtlSec(endpoint),
8426
- staleTtlSec: override.staleTtlSec
8427
- };
8428
- case "memory-only": return {
8429
- kind: "memory-only",
8430
- endpoint,
8431
- freshTtlSec: getEndpointFreshTtlSec(endpoint),
8432
- reason: override.reason
8433
- };
8434
- default: return assertNever(override);
8435
- }
8436
- }
8437
- function resolveRuntimeCachePolicy(input) {
8438
- if (input.method && input.method.toUpperCase() !== "GET") return {
8439
- kind: "live-only",
8440
- endpoint: input.endpoint,
8441
- reason: "non_get_request"
8442
- };
8443
- if (!isPublicEndpointName(input.endpoint)) return {
8444
- kind: "live-only",
8445
- endpoint: input.endpoint,
8446
- reason: "unknown_endpoint"
8447
- };
8448
- return resolveKnownEndpointPolicy(input.endpoint, input.params ?? {});
8449
- }
8450
- function toNonEmptyString(value) {
8451
- if (value === null || value === void 0) return null;
8452
- if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") return null;
8453
- const normalized = String(value).trim();
8454
- return normalized.length > 0 ? normalized : null;
8455
- }
8456
- function normalizeRuntimePublicPath(value) {
8457
- const withoutQuery = (toNonEmptyString(value) ?? "/").split(/[?#]/, 1)[0] ?? "/";
8458
- const collapsed = (withoutQuery.startsWith("/") ? withoutQuery : `/${withoutQuery}`).replace(/\/{2,}/g, "/");
8459
- return (collapsed.length > 1 ? collapsed.replace(/\/+$/g, "") : collapsed) || "/";
8460
- }
8461
- function normalizeRuntimeHostname(value) {
8462
- const trimmed = value.trim().toLowerCase();
8463
- return (/^[a-z][a-z0-9+.-]*:\/\//.test(trimmed) ? new URL(trimmed) : new URL(`http://${trimmed}`)).hostname.replace(/\.$/, "");
8464
- }
8465
- function normalizeScalar(value) {
8466
- return value.trim().toLowerCase();
8467
- }
8468
- function encodeKeyPart(key, value) {
8469
- return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
8470
- }
8471
- function unsafeAsPublishedRuntimeCacheKey(value) {
8472
- return value;
8473
- }
8474
- function buildPublishedRuntimeCacheKey(endpoint, normalizedParams) {
8475
- return unsafeAsPublishedRuntimeCacheKey(`published-runtime:v1:${endpoint}:${Object.entries(normalizedParams).sort(([left], [right]) => left.localeCompare(right)).map(([key, value]) => encodeKeyPart(key, value)).join(":")}`);
8476
- }
8477
- function selectSiteRuntimeIdentity(params) {
8478
- const slug = toNonEmptyString(params.slug);
8479
- if (slug !== null) return { slug: normalizeScalar(slug) };
8480
- const domain = toNonEmptyString(params.domain);
8481
- if (domain !== null) return { domain: normalizeRuntimeHostname(domain) };
8482
- const id = toNonEmptyString(params.id);
8483
- if (id !== null) return { id: normalizeScalar(id) };
8484
- return null;
8485
- }
8486
- function deriveGetSiteKey(params) {
8487
- const identity = selectSiteRuntimeIdentity(params);
8488
- if (identity === null) return {
8489
- ok: false,
8490
- error: {
8491
- kind: "missing_site_identity",
8492
- acceptedParams: [
8493
- "slug",
8494
- "domain",
8495
- "id"
8496
- ]
8497
- }
8498
- };
8499
- const normalizedParams = {
8500
- ...identity,
8501
- currentPath: normalizeRuntimePublicPath(params.currentPath)
8502
- };
8503
- return {
8504
- ok: true,
8505
- endpoint: "getSite",
8506
- key: buildPublishedRuntimeCacheKey("getSite", normalizedParams),
8507
- normalizedParams
8508
- };
8509
- }
8510
- function deriveGetContentByPathKey(params) {
8511
- const siteId = toNonEmptyString(params.siteId);
8512
- if (siteId === null) return {
8513
- ok: false,
8514
- error: {
8515
- kind: "missing_required_param",
8516
- endpoint: "getContentByPath",
8517
- param: "siteId"
8518
- }
8519
- };
8520
- const normalizedParams = {
8521
- siteId: normalizeScalar(siteId),
8522
- path: normalizeRuntimePublicPath(params.path),
8523
- ...params.contentContract === "native" ? { contentContract: "native" } : {}
8524
- };
8525
- return {
8526
- ok: true,
8527
- endpoint: "getContentByPath",
8528
- key: buildPublishedRuntimeCacheKey("getContentByPath", normalizedParams),
8529
- normalizedParams
8530
- };
8613
+ if (endpoint === "listPublishedEntries" || endpoint === "resolveEventOccurrence") return params.stage === "preview";
8614
+ return false;
8531
8615
  }
8532
- const DURABLE_RUNTIME_CACHE_KEY_DERIVERS = {
8533
- getSite: deriveGetSiteKey,
8534
- getContentByPath: deriveGetContentByPathKey
8535
- };
8536
- function isPublishedRuntimeCacheKeyEndpoint(value) {
8537
- 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;
8538
8618
  }
8539
- function parsePublishedRuntimeCacheKey(value) {
8540
- const details = parsePublishedRuntimeCacheKeyDetails(value);
8541
- if (!details.ok) return details;
8542
- return {
8543
- ok: true,
8544
- key: details.key,
8545
- endpoint: details.endpoint
8546
- };
8619
+ function assertNever(value) {
8620
+ throw new Error(`Unhandled runtime cache policy override: ${String(value)}`);
8547
8621
  }
8548
- function parsePublishedRuntimeCacheKeyDetails(value) {
8549
- if (typeof value !== "string") return {
8550
- ok: false,
8551
- error: "not_string"
8622
+ function resolveKnownEndpointPolicy(endpoint, params) {
8623
+ if (isPreviewRequest(endpoint, params)) return {
8624
+ kind: "live-only",
8625
+ endpoint,
8626
+ reason: "preview_request"
8552
8627
  };
8553
- const parts = value.split(":");
8554
- if (parts[0] !== "published-runtime" || parts[1] !== "v1") return {
8555
- ok: false,
8556
- error: "invalid_prefix"
8628
+ if (endpoint === "getSite" && isTruthyParam(params.force)) return {
8629
+ kind: "live-only",
8630
+ endpoint,
8631
+ reason: "force_refresh"
8557
8632
  };
8558
- const endpoint = parts[2];
8559
- if (!isPublishedRuntimeCacheKeyEndpoint(endpoint)) return {
8560
- ok: false,
8561
- 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
8562
8638
  };
8563
- const normalizedParams = {};
8564
- for (const part of parts.slice(3)) {
8565
- const separatorIndex = part.indexOf("=");
8566
- if (separatorIndex <= 0) return {
8567
- ok: false,
8568
- error: "invalid_param_encoding"
8569
- };
8570
- try {
8571
- const key = decodeURIComponent(part.slice(0, separatorIndex));
8572
- normalizedParams[key] = decodeURIComponent(part.slice(separatorIndex + 1));
8573
- } catch {
8574
- return {
8575
- ok: false,
8576
- error: "invalid_param_encoding"
8577
- };
8578
- }
8579
- }
8580
- if (!hasExpectedPublishedRuntimeCacheKeyParams(endpoint, normalizedParams)) return {
8581
- ok: false,
8582
- 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"
8583
8644
  };
8584
- return {
8585
- ok: true,
8586
- key: unsafeAsPublishedRuntimeCacheKey(value),
8645
+ if (endpointDefinition.auth === "user") return {
8646
+ kind: "live-only",
8587
8647
  endpoint,
8588
- normalizedParams
8648
+ reason: "auth_required"
8589
8649
  };
8590
- }
8591
- function hasExpectedPublishedRuntimeCacheKeyParams(endpoint, normalizedParams) {
8592
- const keys = Object.keys(normalizedParams).sort();
8593
- switch (endpoint) {
8594
- case "getSite": return [
8595
- "domain",
8596
- "id",
8597
- "slug"
8598
- ].filter((key) => normalizedParams[key] !== void 0).length === 1 && normalizedParams.currentPath !== void 0 && keys.every((key) => [
8599
- "currentPath",
8600
- "domain",
8601
- "id",
8602
- "slug"
8603
- ].includes(key));
8604
- case "getContentByPath": return normalizedParams.path !== void 0 && normalizedParams.siteId !== void 0 && (normalizedParams.contentContract === void 0 || normalizedParams.contentContract === "native") && keys.every((key) => [
8605
- "contentContract",
8606
- "path",
8607
- "siteId"
8608
- ].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);
8609
8664
  }
8610
8665
  }
8611
- function parsePublishedRuntimeCachePayloadSchemaVersion(value) {
8612
- if (typeof value !== "number") return {
8613
- ok: false,
8614
- error: "not_number"
8615
- };
8616
- if (!Number.isInteger(value)) return {
8617
- ok: false,
8618
- error: "not_integer"
8619
- };
8620
- if (value <= 0) return {
8621
- ok: false,
8622
- 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"
8623
8671
  };
8624
- return {
8625
- ok: true,
8626
- value
8672
+ if (!isPublicEndpointName(input.endpoint)) return {
8673
+ kind: "live-only",
8674
+ endpoint: input.endpoint,
8675
+ reason: "unknown_endpoint"
8627
8676
  };
8677
+ return resolveKnownEndpointPolicy(input.endpoint, input.params ?? {});
8628
8678
  }
8629
8679
  function classifyPublishedRuntimeCacheFreshness(input) {
8630
8680
  const freshUntilMs = Date.parse(input.freshUntil);
@@ -8661,10 +8711,96 @@ function derivePublishedRuntimeCacheKey(input) {
8661
8711
  policy
8662
8712
  }
8663
8713
  };
8664
- switch (input.endpoint) {
8665
- case "getSite": return DURABLE_RUNTIME_CACHE_KEY_DERIVERS.getSite(input.params);
8666
- case "getContentByPath": return DURABLE_RUNTIME_CACHE_KEY_DERIVERS.getContentByPath(input.params);
8667
- }
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
+ };
8668
8804
  }
8669
8805
  //#endregion
8670
8806
  //#region src/client/resilience.ts
@@ -9023,24 +9159,6 @@ function getRiverbankErrorInfo(error) {
9023
9159
  if (error instanceof Error) return { message: error.message };
9024
9160
  return { message: String(error) };
9025
9161
  }
9026
- function planPublishedRuntimeCache(input) {
9027
- const policy = resolveRuntimeCachePolicy({
9028
- endpoint: input.endpoint,
9029
- method: "GET",
9030
- params: input.params
9031
- });
9032
- if (policy.kind !== "durable-public-stale") return null;
9033
- const keyResult = derivePublishedRuntimeCacheKey(input);
9034
- if (!keyResult.ok) return null;
9035
- return {
9036
- cacheKey: keyResult.key,
9037
- endpoint: keyResult.endpoint,
9038
- normalizedParams: keyResult.normalizedParams,
9039
- freshTtlSec: policy.freshTtlSec,
9040
- staleTtlSec: policy.staleTtlSec,
9041
- siteId: input.siteId ?? null
9042
- };
9043
- }
9044
9162
  function normalizeEntryIdentifierRefs(identifiers) {
9045
9163
  const trimmed = identifiers.map((identifier) => identifier.trim()).filter((identifier) => identifier.length > 0);
9046
9164
  if (trimmed.length === 0) return { kind: "empty" };
@@ -9486,89 +9604,11 @@ function createRiverbankClientWithDeps(deps, config) {
9486
9604
  }
9487
9605
  return controller.signal;
9488
9606
  }
9489
- async function resolveEntrySubrouteInternal(args) {
9490
- const { siteId, entryId, kind, segment, stage, signal } = args;
9491
- return resilientFetchData(`entry-subroute:${siteId}:${entryId}:${kind}:${segment}:${stage ?? "published"}`, async (sig) => {
9492
- return await apiClient({
9493
- endpoint: "resolveEntrySubroute",
9494
- params: {
9495
- siteId,
9496
- entryId,
9497
- kind,
9498
- segment,
9499
- ...stage ? { stage } : {}
9500
- },
9501
- options: { signal: sig }
9502
- });
9503
- }, { signal });
9504
- }
9505
- async function getSiteWithResilienceInternal(params) {
9506
- const { slug, domain, id, signal, force, currentPath } = params;
9507
- if (!slug && !domain && !id) throw new Error(`getSite() requires at least one identifier: slug, domain, or id. Received: ${JSON.stringify(params)}`);
9508
- const siteIdentifier = slug || domain || id;
9509
- const siteId = id || slug || domain;
9510
- const publishedRuntimeCache = planPublishedRuntimeCache({
9511
- endpoint: "getSite",
9512
- params: {
9513
- slug,
9514
- domain,
9515
- id,
9516
- currentPath,
9517
- force
9518
- }
9519
- });
9520
- return resilientFetch(publishedRuntimeCache?.cacheKey ?? `site:${siteIdentifier ?? "unknown"}:${currentPath ?? ""}`, async (sig) => {
9521
- const apiParams = {};
9522
- if (params.slug) apiParams.slug = params.slug;
9523
- if (params.domain) apiParams.domain = params.domain;
9524
- if (params.id) apiParams.id = params.id;
9525
- if (currentPath) apiParams.currentPath = currentPath;
9526
- if (force) apiParams.force = "true";
9527
- return await apiClient({
9528
- endpoint: "getSite",
9529
- params: apiParams,
9530
- options: {
9531
- signal: sig,
9532
- ...force ? { cache: "no-store" } : {}
9533
- }
9534
- });
9535
- }, {
9536
- signal,
9537
- force,
9538
- publishedRuntimeCache,
9539
- prebuildFallback: prebuildLoader && siteId ? () => prebuildLoader.loadSite(siteId) : void 0
9540
- });
9541
- }
9542
- async function getPageWithResilienceInternal(params) {
9543
- const { siteId, path, preview = false, signal, contentContract = "compat" } = params;
9544
- const publishedRuntimeCache = planPublishedRuntimeCache({
9545
- endpoint: "getContentByPath",
9546
- params: {
9547
- siteId,
9548
- path,
9549
- preview,
9550
- contentContract
9551
- },
9552
- siteId
9553
- });
9554
- return resilientFetch(publishedRuntimeCache?.cacheKey ?? `page:${siteId}:${path}:${preview}:${contentContract}`, async (sig) => {
9555
- return await apiClient({
9556
- endpoint: "getContentByPath",
9557
- params: {
9558
- siteId,
9559
- path,
9560
- preview: String(preview),
9561
- ...contentContract === "native" ? { contentContract } : {}
9562
- },
9563
- options: { signal: sig }
9564
- });
9565
- }, {
9566
- preview,
9567
- signal,
9568
- publishedRuntimeCache,
9569
- prebuildFallback: prebuildLoader && !preview && contentContract !== "native" ? () => prebuildLoader.loadPage(siteId, path) : void 0
9570
- });
9571
- }
9607
+ const contentReads = createContentReadOperations({
9608
+ apiClient,
9609
+ resilientFetch,
9610
+ prebuildLoader
9611
+ });
9572
9612
  async function getEntriesInternal(params) {
9573
9613
  const { siteId, contentType, limit, offset, order, preview = false, mode, entryIds, includeMeta, signal } = params;
9574
9614
  const entryIdsCacheKey = mode === "manual" && entryIds?.length ? entryIds.join(",") : "";
@@ -9603,16 +9643,16 @@ function createRiverbankClientWithDeps(deps, config) {
9603
9643
  }
9604
9644
  return {
9605
9645
  async getSite(params) {
9606
- return (await getSiteWithResilienceInternal(params)).data;
9646
+ return (await contentReads.getSiteWithResilience(params)).data;
9607
9647
  },
9608
9648
  async getSiteWithResilience(params) {
9609
- return getSiteWithResilienceInternal(params);
9649
+ return contentReads.getSiteWithResilience(params);
9610
9650
  },
9611
9651
  async getPage(params) {
9612
- return (await getPageWithResilienceInternal(params)).data;
9652
+ return (await contentReads.getPageWithResilience(params)).data;
9613
9653
  },
9614
9654
  async getPageWithResilience(params) {
9615
- return getPageWithResilienceInternal(params);
9655
+ return contentReads.getPageWithResilience(params);
9616
9656
  },
9617
9657
  async getEntries(params) {
9618
9658
  return getEntriesInternal(params);
@@ -9728,9 +9768,9 @@ function createRiverbankClientWithDeps(deps, config) {
9728
9768
  }, { signal });
9729
9769
  },
9730
9770
  async listPublicEvents(params) {
9731
- 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;
9732
9772
  if (!siteId) throw new Error("listPublicEvents() requires siteId");
9733
- 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) => {
9734
9774
  return await apiClient({
9735
9775
  endpoint: "listPublicEvents",
9736
9776
  params: {
@@ -9750,7 +9790,6 @@ function createRiverbankClientWithDeps(deps, config) {
9750
9790
  ...scheduleScope && { scheduleScope },
9751
9791
  ...detailLevel && { detailLevel },
9752
9792
  ...readProfile && { readProfile },
9753
- ...entryId && { entryId },
9754
9793
  ...seriesId && { seriesId },
9755
9794
  ...includeOccurrenceId && { includeOccurrenceId }
9756
9795
  },
@@ -9759,9 +9798,9 @@ function createRiverbankClientWithDeps(deps, config) {
9759
9798
  }, { signal });
9760
9799
  },
9761
9800
  async getPublicEventDetails(params) {
9762
- 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;
9763
9802
  if (!siteId) throw new Error("getPublicEventDetails() requires siteId");
9764
- 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) => {
9765
9804
  const requestId = "eventDetails";
9766
9805
  return normalizeBatchBlockLoaderResult(await apiClient({
9767
9806
  endpoint: "batchBlockLoaders",
@@ -9785,7 +9824,6 @@ function createRiverbankClientWithDeps(deps, config) {
9785
9824
  ...eventSurface && { eventSurface },
9786
9825
  ...eventPresets && { eventPresets },
9787
9826
  ...scheduleScope && { scheduleScope },
9788
- ...entryId && { entryId },
9789
9827
  ...seriesId && { seriesId },
9790
9828
  ...includeOccurrenceId && { includeOccurrenceId }
9791
9829
  }
@@ -9794,21 +9832,6 @@ function createRiverbankClientWithDeps(deps, config) {
9794
9832
  }), requestId);
9795
9833
  }, { signal });
9796
9834
  },
9797
- async listPublicCourses(params) {
9798
- const { siteId, limit, stage, signal } = params;
9799
- if (!siteId) throw new Error("listPublicCourses() requires siteId");
9800
- return resilientFetchData(`public-courses:${siteId}:${limit ?? ""}:${stage ?? ""}`, async (sig) => {
9801
- return await apiClient({
9802
- endpoint: "listPublicCourses",
9803
- params: {
9804
- siteId,
9805
- ...typeof limit === "number" && { limit: String(limit) },
9806
- ...stage && { stage }
9807
- },
9808
- options: { signal: sig }
9809
- });
9810
- }, { signal });
9811
- },
9812
9835
  async listPublicTeamMembers(params) {
9813
9836
  const { siteId, stage, signal } = params;
9814
9837
  if (!siteId) throw new Error("listPublicTeamMembers() requires siteId");
@@ -9867,29 +9890,19 @@ function createRiverbankClientWithDeps(deps, config) {
9867
9890
  });
9868
9891
  }, { signal });
9869
9892
  },
9870
- async resolveEntrySubroute(params) {
9871
- const { siteId, entryId, kind, segment, stage, signal } = params;
9872
- if (!siteId || !entryId || !kind || !segment) throw new Error("resolveEntrySubroute() requires siteId, entryId, kind, and segment");
9873
- return resolveEntrySubrouteInternal({
9874
- siteId,
9875
- entryId,
9876
- kind,
9877
- segment,
9878
- stage,
9879
- signal
9880
- });
9881
- },
9882
9893
  async resolveEventOccurrence(params) {
9883
- const { siteId, entryId, segment, signal } = params;
9884
- if (!siteId || !entryId || !segment) throw new Error("resolveEventOccurrence() requires siteId, entryId, and segment");
9885
- const result = await resolveEntrySubrouteInternal({
9886
- siteId,
9887
- entryId,
9888
- kind: "event-occurrence",
9889
- segment,
9890
- signal
9891
- });
9892
- 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 });
9893
9906
  },
9894
9907
  async checkRedirect(params) {
9895
9908
  const { siteId, path, signal } = params;
@@ -10614,8 +10627,6 @@ const SYSTEM_BLOCK_KINDS = [
10614
10627
  "block.weekly-slot-availability",
10615
10628
  "block.event-registration",
10616
10629
  "block.event-details",
10617
- "block.course-registration",
10618
- "block.course-details",
10619
10630
  "block.event-spotlight",
10620
10631
  "block.event-listing",
10621
10632
  "block.event-calendar",