@riverbankcms/sdk 0.144.0 → 0.146.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 (228) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{PreviewEditorSidebar-CQZNnFiM.mjs → PreviewEditorSidebar-kg2r2Fyi.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DCNxnmI0.mjs → PreviewEditorUI-sWMLp5dT.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BCYICImX.mjs → PreviewQueryProvider-Cg51xq1w.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-BJolUbr1.mjs → SdkPreviewModeRuntime-h2ti3Hch.mjs} +688 -519
  6. package/dist/{SiteChromeCustomizeContext-CKgEpoxi.mjs → SiteChromeCustomizeContext-DEACFH9m.mjs} +3381 -2017
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +5643 -66
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +513 -6
  9. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +49 -0
  10. package/dist/_dts/api/src/appointmentServiceCategoryEndpoints.d.ts +75 -0
  11. package/dist/_dts/api/src/appointmentServiceContracts.d.ts +80 -0
  12. package/dist/_dts/api/src/appointmentSetup.d.ts +8 -1
  13. package/dist/_dts/api/src/bookingConfig.d.ts +8 -1
  14. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +10 -26
  15. package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +45 -1
  16. package/dist/_dts/api/src/clientErrorReporting.d.ts +50 -0
  17. package/dist/_dts/api/src/communications.d.ts +32 -24
  18. package/dist/_dts/api/src/contentRuntime.d.ts +3 -5
  19. package/dist/_dts/api/src/endpoints.d.ts +316 -134
  20. package/dist/_dts/api/src/event-visibility.d.ts +20 -0
  21. package/dist/_dts/api/src/eventManagementContracts.d.ts +56 -3
  22. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +24 -0
  23. package/dist/_dts/api/src/eventPageWords.d.ts +19 -0
  24. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +14 -0
  25. package/dist/_dts/api/src/index.d.ts +7 -1
  26. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  27. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  28. package/dist/_dts/api/src/launchReadiness.d.ts +22 -2
  29. package/dist/_dts/api/src/launchRequirementPriority.d.ts +3 -0
  30. package/dist/_dts/api/src/newsletterCampaignCommandEndpoints.d.ts +13 -0
  31. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +30 -11
  32. package/dist/_dts/api/src/occurrenceScheduling.d.ts +10 -0
  33. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +3 -0
  34. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +44 -0
  35. package/dist/_dts/api/src/participantMessaging.d.ts +11 -1
  36. package/dist/_dts/api/src/publicBookingService.d.ts +35 -1
  37. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +13 -0
  38. package/dist/_dts/api/src/publicNewsletterEndpointDefinitions.d.ts +58 -0
  39. package/dist/_dts/api/src/schemas/admin-observability-logs.d.ts +3 -3
  40. package/dist/_dts/api/src/sdk-event-upsert.d.ts +40 -1
  41. package/dist/_dts/api/src/sdkContracts.d.ts +3 -42
  42. package/dist/_dts/api/src/sdkCourseBooking.d.ts +30 -0
  43. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +76 -0
  44. package/dist/_dts/api/src/sdkEventLifecycle.d.ts +37 -0
  45. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +18 -0
  46. package/dist/_dts/api/src/sdkPageDesign.d.ts +388 -0
  47. package/dist/_dts/api/src/sdkPageDesignEndpointDefinitions.d.ts +22 -0
  48. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +46 -0
  49. package/dist/_dts/api/src/siteAddressEndpoints.d.ts +29 -0
  50. package/dist/_dts/api/src/siteManagementEndpointDefinitions.d.ts +49 -0
  51. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +4 -38
  52. package/dist/_dts/api/src/siteOnboarding.d.ts +75 -9
  53. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -1
  54. package/dist/_dts/api/src/types.d.ts +8 -1
  55. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +14 -0
  56. package/dist/_dts/blocks/src/PageRenderer.d.ts +4 -4
  57. package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
  58. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +24 -0
  59. package/dist/_dts/blocks/src/index.d.ts +3 -1
  60. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +10 -0
  61. package/dist/_dts/blocks/src/pageRenderJoins.d.ts +68 -0
  62. package/dist/_dts/blocks/src/pageRenderPlan.d.ts +8 -27
  63. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +7 -4
  64. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +40 -23
  65. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +3 -1
  66. package/dist/_dts/blocks/src/server.d.ts +1 -1
  67. package/dist/_dts/blocks/src/system/blocks/appointment-services.d.ts +2 -0
  68. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +2 -2
  69. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +1 -1
  70. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +27 -5
  71. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +14 -1
  72. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  73. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -47
  74. package/dist/_dts/blocks/src/system/icons/social.d.ts +1 -1
  75. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +29 -3
  76. package/dist/_dts/blocks/src/system/registry.d.ts +1 -1
  77. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -1
  78. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +22 -2
  79. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -1
  80. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +57 -2
  81. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-categories.d.ts +29 -0
  82. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-choices.d.ts +13 -0
  83. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +3 -3
  84. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +13 -1
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +2 -1
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +23 -7
  87. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +36 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.d.ts +1 -1
  90. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -1
  91. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +46 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +20 -1
  93. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
  94. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -1
  95. package/dist/_dts/blocks/src/system/runtime/shared/components/CheckboxChoice.d.ts +18 -0
  96. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  97. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  98. package/dist/_dts/content-editor/src/primitives/previewEditableOutline.d.ts +2 -0
  99. package/dist/_dts/content-editor/src/ui/editorBlockEquality.d.ts +3 -0
  100. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +3 -3
  101. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  102. package/dist/_dts/core/src/appointment-service-categories.d.ts +108 -0
  103. package/dist/_dts/core/src/block-content-identity.d.ts +5 -0
  104. package/dist/_dts/core/src/editor-state.d.ts +2 -1
  105. package/dist/_dts/core/src/index.d.ts +2 -0
  106. package/dist/_dts/core/src/mailing-list-submission.d.ts +3 -1
  107. package/dist/_dts/core/src/public-event-booking-availability.d.ts +20 -1
  108. package/dist/_dts/core/src/public-profile.d.ts +12 -1
  109. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +711 -242
  110. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
  111. package/dist/_dts/editor-blocks/src/block-editor/EmptyState.d.ts +13 -1
  112. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +2 -2
  113. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  114. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +16 -1
  115. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/types.d.ts +13 -0
  116. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/utils.d.ts +29 -0
  117. package/dist/_dts/preview-next/src/client/blocks/BoundaryControl.d.ts +7 -2
  118. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +1 -1
  119. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +3 -3
  120. package/dist/_dts/preview-next/src/client/blocks/previewProjection/applyPreviewProjections.d.ts +1 -3
  121. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  122. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +2 -2
  123. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -1
  124. package/dist/_dts/sdk/src/client/runtimeCacheKeys.d.ts +8 -0
  125. package/dist/_dts/sdk/src/client/types.d.ts +1 -1
  126. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  127. package/dist/_dts/sdk/src/contracts/page.d.ts +7 -2
  128. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +5 -0
  129. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +2 -2
  130. package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +0 -1
  131. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -8
  132. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +4 -4
  133. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -4
  134. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +7 -2
  135. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +5 -2
  136. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +6 -1
  137. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +2 -0
  138. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +6 -2
  139. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +5 -1
  140. package/dist/_dts/sdk/src/version.d.ts +1 -1
  141. package/dist/_dts/surfaces/src/index.d.ts +10 -0
  142. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  143. package/dist/_dts/theme-core/src/inputs/checkable.d.ts +42 -0
  144. package/dist/_dts/theme-core/src/inputs/inputGroup.d.ts +19 -0
  145. package/dist/_dts/theme-core/src/layout/boundaryCss.d.ts +3 -0
  146. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +8 -0
  147. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +3 -2
  148. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +1 -3
  149. package/dist/_dts/theme-core/src/site-styles/generatedDesignPipeline.d.ts +3 -0
  150. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  151. package/dist/_dts/theme-core/src/site-styles/joinTreatment.d.ts +132 -0
  152. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorBoundaries.d.ts +31 -0
  153. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +33 -29
  154. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +4 -4
  155. package/dist/_dts/theme-core/src/site-styles/pageFlowPresets.d.ts +36 -0
  156. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -10
  157. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +17 -4
  158. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +20 -74
  159. package/dist/_dts/theme-core/src/site-styles/sectionBoundaryComposition.d.ts +95 -0
  160. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +80 -518
  161. package/dist/_dts/theme-core/src/site-styles/siteStyleBlockPolicies.d.ts +9 -4
  162. package/dist/_dts/theme-core/src/site-styles/transitionCatalogue.d.ts +320 -0
  163. package/dist/_dts/theme-core/src/site-styles/types.d.ts +3 -18
  164. package/dist/_dts/ui/src/navigation-tabs.d.ts +2 -1
  165. package/dist/client/{BookingConsentAgreement-DoAILrkN.mjs → BookingConsentAgreement-BQKL045f.mjs} +2 -2
  166. package/dist/client/CheckboxChoice--W2n6yKs.mjs +24 -0
  167. package/dist/client/{DiscountCodeDisclosure-X528hUTf.mjs → DiscountCodeDisclosure-CsOtjFY7.mjs} +1 -1
  168. package/dist/client/{EventCombined.client-DSBVwq5m.mjs → EventCombined.client-BdRjVbhH.mjs} +6 -6
  169. package/dist/client/{EventListing.client-DmFAX7Vb.mjs → EventListing.client-DBxC6xOU.mjs} +2 -2
  170. package/dist/client/{LeafletStaticMap-BAqXdfhq.mjs → LeafletStaticMap-mHEJKrTs.mjs} +1 -1
  171. package/dist/client/{ThemedButton-BwNFVwi4.mjs → ThemedButton-CE5KYT6z.mjs} +1 -1
  172. package/dist/client/{accordion-DRhMdkbd.mjs → accordion-BEQNSptH.mjs} +1 -1
  173. package/dist/client/{bookingForm-iJ_nCsNF.mjs → bookingForm-AMr-s5vw.mjs} +168 -95
  174. package/dist/client/bookings.mjs +239 -110
  175. package/dist/client/{carousel-D8zuffZr.mjs → carousel-Bbt_QgJy.mjs} +1 -1
  176. package/dist/client/{cart-DeMGJViN.mjs → cart-CnWi30zJ.mjs} +3 -3
  177. package/dist/client/{checkout-DXc06Km2.mjs → checkout-f3nkWgd4.mjs} +3 -3
  178. package/dist/client/client.mjs +3222 -1612
  179. package/dist/client/{context-CDLCfDep.mjs → context-Bc8T6pCe.mjs} +1 -1
  180. package/dist/client/{dates-ClFx7Epy.mjs → dates-DUsCEzLb.mjs} +2 -3
  181. package/dist/client/{eventCalendar-BaGpnOGN.mjs → eventCalendar-CKwgXui5.mjs} +9 -9
  182. package/dist/client/{eventCombined-ywONOx2m.mjs → eventCombined-CBAOSTGR.mjs} +4 -4
  183. package/dist/client/{eventDetails-B2LlOTYY.mjs → eventDetails-Dh-_WiBD.mjs} +4 -4
  184. package/dist/client/{eventListing-CMgxWpqP.mjs → eventListing-CA3frIH5.mjs} +4 -4
  185. package/dist/client/{eventRegistration-BarLDNHR.mjs → eventRegistration-BHtsgdcg.mjs} +21 -22
  186. package/dist/client/{form-BjqKaBJ7.mjs → form-C2h3YAcg.mjs} +135 -104
  187. package/dist/client/{headerSection-CP4XDwz1.mjs → headerSection-lwMuMTH9.mjs} +3 -3
  188. package/dist/client/hooks.mjs +1023 -148
  189. package/dist/client/{locationMap-C5gW-d-w.mjs → locationMap-DJ2bLODV.mjs} +3 -3
  190. package/dist/client/{newsletterForm-afXlVSA0.mjs → newsletterForm-8Pu5K32g.mjs} +225 -102
  191. package/dist/client/{pricing-Bl1CAl28.mjs → pricing-HHx3IgBz.mjs} +1 -1
  192. package/dist/client/{productDetail-CvQ3jWQe.mjs → productDetail-C_1odnAf.mjs} +3 -3
  193. package/dist/client/{productList-U874PGO7.mjs → productList-CtCv-Nmx.mjs} +3 -3
  194. package/dist/client/{propsDecoder-DPXtCZWP.mjs → propsDecoder-Dcgsncxb.mjs} +111 -55
  195. package/dist/client/rendering/client.mjs +1389 -722
  196. package/dist/client/rendering/islands.mjs +17 -17
  197. package/dist/client/rendering.mjs +3136 -1400
  198. package/dist/client/{routeIslandApiConfig-NGYiUWXu.mjs → routeIslandApiConfig-CWLP7wu3.mjs} +1 -1
  199. package/dist/client/{scrollToBlock-0-C3DVhK.mjs → scrollToBlock-BNgaEUpo.mjs} +1 -1
  200. package/dist/client/{shop-BXjXhM9P.mjs → shop-DQXrQ8kJ.mjs} +7 -7
  201. package/dist/client/{shop-commerce-BZ6UlWJ7.mjs → shop-commerce-B88zmWWo.mjs} +6 -6
  202. package/dist/client/{shop-commerce-store-DlSBXb3D.mjs → shop-commerce-store-DtSfkKuX.mjs} +1 -1
  203. package/dist/client/{shopShared-kkEOiLPA.mjs → shopShared-cuaONpkJ.mjs} +4 -4
  204. package/dist/client/{useEventFilters-zvnnE1ro.mjs → useEventFilters-Bukew6Gb.mjs} +6 -6
  205. package/dist/preview-next/before-render.mjs +500 -165
  206. package/dist/preview-next/client/runtime.mjs +4 -4
  207. package/dist/preview-next/editor-base.css +11 -0
  208. package/dist/preview-next/keepAlive.mjs +460 -165
  209. package/dist/preview-next/middleware.mjs +461 -165
  210. package/dist/{previewAuthStore-JA6-I_sL.mjs → previewAuthStore-h5IgbSp4.mjs} +485 -165
  211. package/dist/{sdk-runtime-DFJlQt3q.mjs → sdk-runtime-DTc1uIXn.mjs} +2 -2
  212. package/dist/{separator-o8GHb1xh.mjs → separator-BpHS1KZK.mjs} +1 -1
  213. package/dist/server/components.mjs +3088 -1307
  214. package/dist/server/config-validation.mjs +927 -109
  215. package/dist/server/config.mjs +927 -109
  216. package/dist/server/data.mjs +939 -110
  217. package/dist/server/index.mjs +513 -169
  218. package/dist/server/next.mjs +2874 -1195
  219. package/dist/server/page-converter.mjs +420 -79
  220. package/dist/server/prebuild.mjs +1 -1
  221. package/dist/server/rendering/server.mjs +3071 -1289
  222. package/dist/server/rendering.mjs +3169 -1350
  223. package/dist/server/routing.mjs +1085 -159
  224. package/dist/server/server.mjs +1042 -291
  225. package/dist/server/theme-bridge.mjs +1658 -137
  226. package/dist/server/theme.mjs +6 -4
  227. package/dist/styles/index.css +186 -65
  228. package/package.json +2 -1
@@ -432,4 +432,53 @@ export declare const APPOINTMENT_ENDPOINT_DEFINITIONS: {
432
432
  responseKind: "json";
433
433
  errors: ("auth:forbidden" | "validation:invalid_input" | "resource:not_found" | "resource:conflict" | "server:internal_error")[];
434
434
  };
435
+ listGroupedAppointmentServices: {
436
+ path: "/sites/{siteId}/bookings/services/grouped";
437
+ method: "GET";
438
+ auth: "user";
439
+ responseKind: "json";
440
+ errors: "server:internal_error"[];
441
+ };
442
+ reorderAppointmentServices: {
443
+ path: "/sites/{siteId}/bookings/services/order";
444
+ method: "PUT";
445
+ auth: "user";
446
+ responseKind: "json";
447
+ errors: ("auth:forbidden" | "validation:invalid_input" | "resource:not_found" | "resource:conflict" | "server:internal_error")[];
448
+ };
449
+ listAppointmentServiceCategories: {
450
+ path: "/sites/{siteId}/bookings/service-categories";
451
+ method: "GET";
452
+ auth: "user";
453
+ responseKind: "json";
454
+ errors: "server:internal_error"[];
455
+ };
456
+ createAppointmentServiceCategory: {
457
+ path: "/sites/{siteId}/bookings/service-categories";
458
+ method: "POST";
459
+ auth: "user";
460
+ responseKind: "json";
461
+ errors: ("auth:forbidden" | "validation:invalid_input" | "resource:conflict" | "server:internal_error")[];
462
+ };
463
+ updateAppointmentServiceCategory: {
464
+ path: "/sites/{siteId}/bookings/service-categories/{categoryId}";
465
+ method: "PUT";
466
+ auth: "user";
467
+ responseKind: "json";
468
+ errors: ("auth:forbidden" | "validation:invalid_input" | "resource:not_found" | "resource:conflict" | "server:internal_error")[];
469
+ };
470
+ deleteAppointmentServiceCategory: {
471
+ path: "/sites/{siteId}/bookings/service-categories/{categoryId}";
472
+ method: "DELETE";
473
+ auth: "user";
474
+ responseKind: "json";
475
+ errors: ("auth:forbidden" | "resource:not_found" | "server:internal_error")[];
476
+ };
477
+ reorderAppointmentServiceCategories: {
478
+ path: "/sites/{siteId}/bookings/service-categories/order";
479
+ method: "PUT";
480
+ auth: "user";
481
+ responseKind: "json";
482
+ errors: ("auth:forbidden" | "validation:invalid_input" | "resource:conflict" | "server:internal_error")[];
483
+ };
435
484
  };
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Appointment-service categories and the manual order of categories and of
3
+ * services within a group (issue 1403): the endpoint contracts and their
4
+ * descriptors, composed into `APIEndpoints` and `API_ENDPOINTS`.
5
+ */
6
+ import type { APIEndpoint } from './apiEndpointTypes';
7
+ import type { AppointmentServiceCategoryResponse, AppointmentServiceOrderResponse, CreateAppointmentServiceCategoryRequest, DeleteAppointmentServiceCategoryResponse, ListAppointmentServiceCategoriesResponse, ListGroupedAppointmentServicesResponse, ReorderAppointmentServiceCategoriesRequest, ReorderAppointmentServicesRequest, UpdateAppointmentServiceCategoryRequest } from './appointmentServiceContracts';
8
+ type SiteParams = {
9
+ siteId: string;
10
+ };
11
+ type CategoryParams = {
12
+ siteId: string;
13
+ categoryId: string;
14
+ };
15
+ export type AppointmentServiceCategoryAPIEndpoints = {
16
+ listGroupedAppointmentServices: APIEndpoint<never, SiteParams, ListGroupedAppointmentServicesResponse>;
17
+ reorderAppointmentServices: APIEndpoint<ReorderAppointmentServicesRequest, SiteParams, AppointmentServiceOrderResponse>;
18
+ listAppointmentServiceCategories: APIEndpoint<never, SiteParams, ListAppointmentServiceCategoriesResponse>;
19
+ createAppointmentServiceCategory: APIEndpoint<CreateAppointmentServiceCategoryRequest, SiteParams, AppointmentServiceCategoryResponse>;
20
+ updateAppointmentServiceCategory: APIEndpoint<UpdateAppointmentServiceCategoryRequest, CategoryParams, AppointmentServiceCategoryResponse>;
21
+ deleteAppointmentServiceCategory: APIEndpoint<never, CategoryParams, DeleteAppointmentServiceCategoryResponse>;
22
+ reorderAppointmentServiceCategories: APIEndpoint<ReorderAppointmentServiceCategoriesRequest, SiteParams, AppointmentServiceOrderResponse>;
23
+ };
24
+ export declare const APPOINTMENT_SERVICE_CATEGORY_ENDPOINT_DEFINITIONS: {
25
+ listGroupedAppointmentServices: {
26
+ path: "/sites/{siteId}/bookings/services/grouped";
27
+ method: "GET";
28
+ auth: "user";
29
+ responseKind: "json";
30
+ errors: "server:internal_error"[];
31
+ };
32
+ reorderAppointmentServices: {
33
+ path: "/sites/{siteId}/bookings/services/order";
34
+ method: "PUT";
35
+ auth: "user";
36
+ responseKind: "json";
37
+ errors: ("auth:forbidden" | "validation:invalid_input" | "resource:not_found" | "resource:conflict" | "server:internal_error")[];
38
+ };
39
+ listAppointmentServiceCategories: {
40
+ path: "/sites/{siteId}/bookings/service-categories";
41
+ method: "GET";
42
+ auth: "user";
43
+ responseKind: "json";
44
+ errors: "server:internal_error"[];
45
+ };
46
+ createAppointmentServiceCategory: {
47
+ path: "/sites/{siteId}/bookings/service-categories";
48
+ method: "POST";
49
+ auth: "user";
50
+ responseKind: "json";
51
+ errors: ("auth:forbidden" | "validation:invalid_input" | "resource:conflict" | "server:internal_error")[];
52
+ };
53
+ updateAppointmentServiceCategory: {
54
+ path: "/sites/{siteId}/bookings/service-categories/{categoryId}";
55
+ method: "PUT";
56
+ auth: "user";
57
+ responseKind: "json";
58
+ errors: ("auth:forbidden" | "validation:invalid_input" | "resource:not_found" | "resource:conflict" | "server:internal_error")[];
59
+ };
60
+ deleteAppointmentServiceCategory: {
61
+ path: "/sites/{siteId}/bookings/service-categories/{categoryId}";
62
+ method: "DELETE";
63
+ auth: "user";
64
+ responseKind: "json";
65
+ errors: ("auth:forbidden" | "resource:not_found" | "server:internal_error")[];
66
+ };
67
+ reorderAppointmentServiceCategories: {
68
+ path: "/sites/{siteId}/bookings/service-categories/order";
69
+ method: "PUT";
70
+ auth: "user";
71
+ responseKind: "json";
72
+ errors: ("auth:forbidden" | "validation:invalid_input" | "resource:conflict" | "server:internal_error")[];
73
+ };
74
+ };
75
+ export {};
@@ -40,6 +40,8 @@ export type AppointmentService = {
40
40
  cutoffHours?: number;
41
41
  };
42
42
  };
43
+ /** The service's category, or null for the trailing "Other" group (issue 1403). */
44
+ categoryId: string | null;
43
45
  createdAt: string;
44
46
  updatedAt: string;
45
47
  };
@@ -73,6 +75,14 @@ export type CreateAppointmentServiceRequest = {
73
75
  onlineDetails?: AppointmentServiceOnlineDetailsInput | null;
74
76
  formId?: string | null;
75
77
  cancellationPolicy?: AppointmentService['cancellationPolicy'];
78
+ /**
79
+ * The category to put the service in, or null for "Other". On create the
80
+ * service goes to the end of that group. On update, omitting it leaves the
81
+ * category alone, and changing it moves the service to the end of its new
82
+ * group. A category that is not the site's is rejected with
83
+ * `CATEGORY_NOT_FOUND`.
84
+ */
85
+ categoryId?: string | null;
76
86
  };
77
87
  export type UpdateAppointmentServiceRequest = Partial<CreateAppointmentServiceRequest>;
78
88
  export type AppointmentServiceResponse = {
@@ -81,3 +91,73 @@ export type AppointmentServiceResponse = {
81
91
  export type ListAppointmentServicesResponse = {
82
92
  services: AppointmentService[];
83
93
  };
94
+ /**
95
+ * A category as the dashboard manages it. Order is carried by position in
96
+ * the list responses, never by a stored number. `identifier` is the internal,
97
+ * rename-safe key site commands use. It is generated from the name on create
98
+ * and never shown to a site admin.
99
+ */
100
+ export type AppointmentServiceCategory = {
101
+ id: string;
102
+ siteId: string;
103
+ name: string;
104
+ identifier: string;
105
+ description: string | null;
106
+ createdAt: string;
107
+ updatedAt: string;
108
+ };
109
+ /** Every category the site has, in its manual order. */
110
+ export type ListAppointmentServiceCategoriesResponse = {
111
+ categories: AppointmentServiceCategory[];
112
+ };
113
+ /** Names are trimmed. The name must be unique on the site, ignoring case. */
114
+ export type CreateAppointmentServiceCategoryRequest = {
115
+ name: string;
116
+ description?: string | null;
117
+ };
118
+ export type UpdateAppointmentServiceCategoryRequest = {
119
+ name?: string;
120
+ description?: string | null;
121
+ };
122
+ export type AppointmentServiceCategoryResponse = {
123
+ category: AppointmentServiceCategory;
124
+ };
125
+ /** Deleting a category moves its services to the end of "Other". */
126
+ export type DeleteAppointmentServiceCategoryResponse = {
127
+ success: true;
128
+ };
129
+ /**
130
+ * A compare-and-swap reorder. `expectedOrder` is the order the client last
131
+ * read and `nextOrder` the order it wants. The server answers
132
+ * `ORDER_CHANGED` when `expectedOrder` is no longer current (the client
133
+ * should refetch), and `ORDER_INVALID` when `nextOrder` is not an exact
134
+ * permutation of the current members.
135
+ */
136
+ export type ReorderAppointmentServiceCategoriesRequest = {
137
+ expectedOrder: string[];
138
+ nextOrder: string[];
139
+ };
140
+ /**
141
+ * Reorders the services within one group: a category, or "Other" when
142
+ * `categoryId` is null. Moving a service between groups is not a reorder.
143
+ * It goes through the service's `categoryId`.
144
+ */
145
+ export type ReorderAppointmentServicesRequest = {
146
+ categoryId: string | null;
147
+ expectedOrder: string[];
148
+ nextOrder: string[];
149
+ };
150
+ export type AppointmentServiceOrderResponse = {
151
+ success: true;
152
+ };
153
+ /**
154
+ * The Services page read: every category in order and every service (paused
155
+ * and unlisted included) in display order, so
156
+ * `layoutServicesByCategory(categories, services, { keepEmptyGroups: true })`
157
+ * gives the page's groups, and a group's service ids are the `expectedOrder`
158
+ * for a reorder. `listAppointmentServices` stays alphabetical for pickers.
159
+ */
160
+ export type ListGroupedAppointmentServicesResponse = {
161
+ categories: AppointmentServiceCategory[];
162
+ services: AppointmentService[];
163
+ };
@@ -1,6 +1,6 @@
1
1
  import type { AvailabilityScheduleSettings } from "./availability";
2
2
  import type { VenueRecord } from "./bookingRecords";
3
- import type { DashboardAppointmentResource, AppointmentService } from "./bookingOperations";
3
+ import type { DashboardAppointmentResource, AppointmentService, AppointmentServiceCategory } from "./bookingOperations";
4
4
  import type { ApiClient } from "./request";
5
5
  import { z } from "zod";
6
6
  export type AppointmentSetupTargetStep = "services" | "people" | "assignments" | "availability" | "review";
@@ -73,6 +73,11 @@ export type AppointmentSetupResponse = Readonly<{
73
73
  seedSelection: AppointmentSetupSeedSelection;
74
74
  readiness: AppointmentSetupReadiness;
75
75
  services: readonly AppointmentService[];
76
+ /**
77
+ * The site's appointment-service categories in order, for the new-service
78
+ * wizard's Category field (issue 1403).
79
+ */
80
+ serviceCategories: readonly AppointmentServiceCategory[];
76
81
  resources: readonly DashboardAppointmentResource[];
77
82
  venues: readonly VenueRecord[];
78
83
  serviceResourceLinks: readonly AppointmentSetupServiceResourceLink[];
@@ -183,6 +188,7 @@ export declare const appointmentSetupServiceDraftSchema: z.ZodObject<{
183
188
  draftId: z.ZodString;
184
189
  }, z.core.$strip>], "kind">>;
185
190
  }, z.core.$strip>], "kind">;
191
+ categoryId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
186
192
  }, z.core.$strip>;
187
193
  export type AppointmentSetupServiceDraft = z.infer<typeof appointmentSetupServiceDraftSchema>;
188
194
  export declare const appointmentSetupPractitionerDraftSchema: z.ZodObject<{
@@ -318,6 +324,7 @@ export declare const applyAppointmentSetupRequestSchema: z.ZodObject<{
318
324
  draftId: z.ZodString;
319
325
  }, z.core.$strip>], "kind">>;
320
326
  }, z.core.$strip>], "kind">;
327
+ categoryId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
321
328
  }, z.core.$strip>>;
322
329
  practitioners: z.ZodArray<z.ZodObject<{
323
330
  ref: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -1,4 +1,6 @@
1
1
  import type { EventOnlineDetails } from './bookingRecords';
2
+ import type { AttendeeNotificationIntent } from './occurrenceScheduling';
3
+ import type { EventVisibility } from './event-visibility';
2
4
  import type { CreateEventRequest } from './eventManagementContracts';
3
5
  import { BOOKING_SETTINGS_SECTION_KEYS } from './bookingSettingsSections';
4
6
  import { type ResolvedEventCatalogue, type EventPreset } from '../../core/src/index';
@@ -153,7 +155,7 @@ export type EventSeriesRecord = {
153
155
  capacity: number | null;
154
156
  deliveryMode: EventDeliveryMode;
155
157
  capacityByAttendanceMode: EventCapacityByAttendanceMode;
156
- visibility: 'public' | 'private' | 'unlisted';
158
+ visibility: EventVisibility;
157
159
  status: 'active' | 'draft' | 'archived' | 'cancelled' | 'completed';
158
160
  recurrenceRule: string | null;
159
161
  exceptionsJson: string[];
@@ -190,6 +192,11 @@ export type UpdateEventSeriesRequest = Partial<Omit<CreateEventRequest, 'creatio
190
192
  migrationPricingOptionIndex?: number | null;
191
193
  /** If true, regenerate future occurrences based on updated schedule */
192
194
  regenerateSchedule?: boolean;
195
+ /**
196
+ * The "let everyone booked know" tick. Only a change of the event's usual
197
+ * venue can notify; the server decides whether there is anything to send.
198
+ */
199
+ attendeeNotification?: AttendeeNotificationIntent;
193
200
  };
194
201
  export type BookingModuleToggles = {
195
202
  appointments: boolean;
@@ -6,14 +6,15 @@ import type { BookingClosureConflictResponse, CreateBookingClosureRequest, Creat
6
6
  import type { BookingSettingsResponse, UpdateBookingSettingsRequest } from './bookingConfig';
7
7
  import type * as Events from './eventManagementContracts';
8
8
  import type * as EventEndpoints from './bookingManagementEventEndpointTypes';
9
+ import type { WholeSeriesEndpoints } from './bookingManagementEventEndpointTypes';
9
10
  import type { AdjustCustomerPassDetailsRequest, AdjustCustomerPassDetailsResponse, AssignCustomerMembershipRequest, AssignCustomerMembershipResponse, AssignCustomerPassRequest, AssignCustomerPassResponse, CancelCustomerMembershipAtPeriodEndRequest, CancelCustomerMembershipAtPeriodEndResponse, ConvertCreditRefundToCashRequest, ConvertCreditRefundToCashResponse, ListCustomerMembershipPaymentRefundsResponse, ListCustomerMembershipPaymentsResponse, ListCustomerPassRefundsResponse, RefundCustomerMembershipPaymentRequest, RefundCustomerMembershipPaymentResponse, RefundCustomerPassRequest, RefundCustomerPassResponse } from './bookingAdjustments';
10
11
  import type { AppointmentResourceResponse, AppointmentReservationLifecycleRequest, AppointmentReservationResponse, AppointmentServiceResponse, BookingAppointmentWithDetails, CreateAppointmentResourceRequest, CreateAppointmentResourceWithAccountAccessRequest, CreateAppointmentResourceWithAccountAccessResponse, CreateAppointmentReservationRequest, CreateAppointmentReservationRunRequest, CreateAppointmentReservationRunResponse, CreateAppointmentServiceRequest, CreateTeamMemberProfileResponse, DiscardTeamMemberProfileDraftResponse, DeleteServiceResponse, EndAppointmentReservationRequest, ListAppointmentResourcesResponse, ListAppointmentReservationsRequest, ListAppointmentReservationsResponse, ListAppointmentServicesResponse, ListEventSeriesRegistrationRefundsResponse, ListEventAttendeeRefundsResponse, ListEventAttendeeTransfersResponse, OpsCancelEventAttendeeRequest, OpsCancelEventAttendeeResponse, OpsEventAttendeeDetailsResponse, OpsListUpcomingEventOccurrencesResponse, OpsOccurrenceAttendeesResponse, OpsRefundEventAttendeeResponse, OpsUpdateEventAttendeeCheckinRequest, OpsUpdateEventAttendeeCheckinResponse, OpsValidateEventTicketRequest, OpsValidateEventTicketResponse, PreviewAppointmentReservationRunRequest, PreviewAppointmentReservationRunResponse, ReferenceOptionsResponse, RemoveAppointmentResourceResponse, RefundEventSeriesRegistrationRequest, RefundEventSeriesRegistrationResponse, RefundEventAttendeeRequest, RefundEventAttendeeResponse, TransferEventAttendeeRequest, TransferEventAttendeeResponse, UpdateAppointmentResourceRequest, UpdateAppointmentReservationRequest, UpdateAppointmentServiceRequest, PublishTeamMemberProfileRequest, PublishTeamMemberProfileResponse, CancelScheduledTeamMemberProfileResponse, ScheduleTeamMemberProfileRequest, ScheduleTeamMemberProfileResponse, TeamMemberProfileContentResponse, UnpublishTeamMemberProfileResponse, UpdateTeamMemberProfileContentRequest, UpdateTeamMemberProfilePolicyRequest, UpdateTeamMemberProfilePolicyResponse, UpdateTeamMemberProfileRouteMetadataRequest, UpdateTeamMemberProfileRouteMetadataResponse } from './bookingOperations';
11
12
  import type { AddEventOccurrenceAttendeeRequest, AddEventOccurrenceAttendeeResponse, AdjustCustomerCreditRequest, AdjustCustomerCreditResponse, BookingEventSeriesAttendee, BookingMembershipResponse, BookingPassResponse, CheckEventAdminEligibilityRequest, CheckEventAdminEligibilityResponse, CreateBookingCustomerRequest, CreateBookingCustomerResponse, RectifyBookingCustomerProfileRequest, RectifyBookingCustomerProfileResponse, RectifyBookingParticipantIdentityRequest, RectifyBookingParticipantIdentityResponse, CreateBookingMembershipRequest, CreateBookingPassRequest, CreateDiscountCodeRequest, CreateEventCategoryRequest, CreateOccurrenceRequest, CreateVenueRequest, DeleteDiscountCodeResponse, DeleteVenueResponse, DiscountCodeResponse, EventCategoryResponse, EventOccurrenceRecord, GeocodeVenueRequest, GeocodeVenueResponse, GetCustomerCreditResponse, GetMoneyReportRequest, GetMoneyReportResponse, ExportBookingQuestionAnswersCsvRequest, ExportBookingLedgerCsvRequest, ListBookingActivityRequest, ListBookingActivityResponse, ListBookingCustomersRequest, ListBookingCustomersResponse, ListBookingMembershipsRequest, ListBookingMembershipsResponse, ListBookingPassesRequest, ListBookingPassesResponse, ListCustomerAttendancesRequest, ListCustomerAttendancesResponse, ListCustomerMembershipsResponse, ListCustomerPassesResponse, CreatePersonRecordEntryRequest, CreatePersonRecordEntryResponse, ListDiscountCodesResponse, ListDiscountRedemptionsRequest, ListDiscountRedemptionsResponse, ListEventCategoriesResponse, ListMoneyPaymentsRequest, ListMoneyPaymentsResponse, ListSiteCustomerMembershipsRequest, ListSiteCustomerMembershipsResponse, ListSiteCustomerPassesRequest, ListSiteCustomerPassesResponse, UpdateBookingMembershipRequest, UpdateBookingPassRequest, UpdateDiscountCodeRequest, UpdateEventCategoryRequest, UpdateVenueRequest, VenueRecord } from './bookingRecords';
12
13
  import type * as OccurrenceScheduling from './occurrenceScheduling';
13
14
  import type { ApplyAppointmentSetupRequest, ApplyAppointmentSetupResponse, AppointmentSetupResponse } from './appointmentSetup';
14
- import type { AddEventSeriesRegistrationRequest, AddEventSeriesRegistrationResponse, EventSeriesContentOwnershipRequest, EventSeriesContentOwnershipResponse, DashboardWaitlistListResponse, DeleteEventOfferingResponse, ListEventSeriesRegistrationsResponse, UpdateEventSeriesRegistrationRequest, UpdateEventSeriesRegistrationResponse, WaitlistDashboardActionResponse } from './wholeSeriesRuns';
15
+ import type { AddEventSeriesRegistrationRequest, AddEventSeriesRegistrationResponse, EventSeriesContentOwnershipRequest, EventSeriesContentOwnershipResponse, DashboardWaitlistListResponse, DeleteEventOfferingResponse, ListEventSeriesRegistrationsResponse, WaitlistDashboardActionResponse } from './wholeSeriesRuns';
15
16
  import type { GetParticipantMessageRecipientsRequest, ListParticipantMessageHistoryRequest, ParticipantMessageHistoryResponse, ParticipantMessageRecipientsResponse, ParticipantMessageSendResponse, SendParticipantMessageRequest, TestParticipantMessageRequest, TestParticipantMessageResponse } from './participantMessaging';
16
- import type { GetEmailSettingsResponse, GetEventSeriesEmailTemplatesResponse, GetNewsletterCampaignRecipientsSummaryResponse, GetNewsletterCampaignResponse, GetNewsletterCampaignStatsResponse, GetNewsletterSettingsResponse, GetNewsletterSubscriberResponse, GetNewsletterTemplateResponse, ListNewsletterCampaignsResponse, ListNewsletterListMembersQuery, ListNewsletterListMembersResponse, ListNewsletterListsResponse, ListNewsletterSendJobsQuery, ListNewsletterSendJobsResponse, ListNewsletterSubscribersQuery, ListNewsletterSubscribersResponse, ListNewsletterTagsResponse, ListNewsletterTemplatesResponse, PreviewEmailTemplateRequest, PreviewEmailTemplateResponse, PreviewNewsletterTemplateRequest, PreviewNewsletterTemplateResponse, RectifyNewsletterSubscriberRequest, RectifyNewsletterSubscriberResponse, SendTestEmailRequest, SendTestEmailResponse, UpdateEmailSettingsRequest, UpdateEmailSettingsResponse, UpdateEventSeriesEmailTemplatesRequest, UpdateEventSeriesEmailTemplatesResponse, UpdateNewsletterCampaignRequest, UpdateNewsletterCampaignResponse, UpdateNewsletterListMembershipsRequest, UpdateNewsletterListMembershipsResponse, UpdateNewsletterListRequest, UpdateNewsletterListResponse, UpdateNewsletterSettingsRequest, UpdateNewsletterSettingsResponse, UpdateNewsletterSubscriberRequest, UpdateNewsletterSubscriberResponse, UpdateNewsletterTemplateRequest, UpdateNewsletterTemplateResponse, UpsertNewsletterSubscriberRequest, UpsertNewsletterSubscriberResponse, ImportNewsletterSubscribersCsvResponse, ExportNewsletterSubscribersCsvResponse, DeleteNewsletterSubscriberResponse, AnonymizeNewsletterSubscriberResponse, ExportNewsletterSubscriberDataResponse, CreateNewsletterListRequest, CreateNewsletterListResponse, DeleteNewsletterListResponse, CreateNewsletterTemplateRequest, CreateNewsletterTemplateResponse, DeleteNewsletterTemplateResponse, CreateNewsletterCampaignRequest, CreateNewsletterCampaignResponse, DeleteNewsletterCampaignResponse, SendNewsletterCampaignNowRequest, SendNewsletterCampaignNowResponse, TestSendNewsletterCampaignRequest, TestSendNewsletterCampaignResponse, RetryNewsletterSendJobResponse, CancelNewsletterSendJobResponse } from './communications';
17
+ import type { GetEmailSettingsResponse, GetEventSeriesEmailTemplatesResponse, GetNewsletterCampaignRecipientsSummaryResponse, GetNewsletterCampaignResponse, GetNewsletterCampaignStatsResponse, GetNewsletterSettingsResponse, GetNewsletterSubscriberResponse, GetNewsletterTemplateResponse, ListNewsletterCampaignsResponse, ListNewsletterListMembersQuery, ListNewsletterListMembersResponse, ListNewsletterListsResponse, ListNewsletterSubscribersQuery, ListNewsletterSubscribersResponse, ListNewsletterTagsResponse, ListNewsletterTemplatesResponse, PreviewEmailTemplateRequest, PreviewEmailTemplateResponse, PreviewNewsletterTemplateRequest, PreviewNewsletterTemplateResponse, RectifyNewsletterSubscriberRequest, RectifyNewsletterSubscriberResponse, SendTestEmailRequest, SendTestEmailResponse, UpdateEmailSettingsRequest, UpdateEmailSettingsResponse, UpdateEventSeriesEmailTemplatesRequest, UpdateEventSeriesEmailTemplatesResponse, UpdateNewsletterCampaignRequest, UpdateNewsletterCampaignResponse, UpdateNewsletterListMembershipsRequest, UpdateNewsletterListMembershipsResponse, UpdateNewsletterListRequest, UpdateNewsletterListResponse, UpdateNewsletterSettingsRequest, UpdateNewsletterSettingsResponse, UpdateNewsletterSubscriberRequest, UpdateNewsletterSubscriberResponse, UpdateNewsletterTemplateRequest, UpdateNewsletterTemplateResponse, UpsertNewsletterSubscriberRequest, UpsertNewsletterSubscriberResponse, ImportNewsletterSubscribersCsvResponse, ExportNewsletterSubscribersCsvResponse, DeleteNewsletterSubscriberResponse, AnonymizeNewsletterSubscriberResponse, ExportNewsletterSubscriberDataResponse, CreateNewsletterListRequest, CreateNewsletterListResponse, DeleteNewsletterListResponse, CreateNewsletterTemplateRequest, CreateNewsletterTemplateResponse, DeleteNewsletterTemplateResponse, CreateNewsletterCampaignRequest, CreateNewsletterCampaignResponse, DeleteNewsletterCampaignResponse, SendNewsletterCampaignNowRequest, SendNewsletterCampaignNowResponse, TestSendNewsletterCampaignRequest, TestSendNewsletterCampaignResponse } from './communications';
17
18
  import type { CreateNewsletterSubscribersImportUploadUrlRequest, CreateNewsletterSubscribersImportUploadUrlResponse, ImportNewsletterSubscribersCsvRequest } from './siteInfrastructure';
18
19
  import type { ListSiteActivityLogsResponse, ListSiteEmailEventLogsResponse, ListSiteEmailLogsResponse, ListSitePublicErrorLogsResponse } from './siteOperations';
19
20
  import type { SchedulePreviewRequest, SchedulePreviewResponse } from './aiPlayground';
@@ -21,7 +22,7 @@ import type { SchedulePreviewRequest, SchedulePreviewResponse } from './aiPlaygr
21
22
  * Booking-management endpoints group scheduler, operational bookings admin, course,
22
23
  * newsletter, and customer-ledger APIs that are tightly coupled in dashboard flows.
23
24
  */
24
- export type BookingManagementAPIEndpoints = {
25
+ export type BookingManagementAPIEndpoints = WholeSeriesEndpoints & {
25
26
  getBookingSettings: APIEndpoint<never, {
26
27
  siteId: string;
27
28
  }, BookingSettingsResponse>;
@@ -209,17 +210,6 @@ export type BookingManagementAPIEndpoints = {
209
210
  siteId: string;
210
211
  campaignId: string;
211
212
  }, TestSendNewsletterCampaignResponse>;
212
- listNewsletterSendJobs: APIEndpoint<never, {
213
- siteId: string;
214
- } & ListNewsletterSendJobsQuery, ListNewsletterSendJobsResponse>;
215
- retryNewsletterSendJob: APIEndpoint<never, {
216
- siteId: string;
217
- jobId: string;
218
- }, RetryNewsletterSendJobResponse>;
219
- cancelNewsletterSendJob: APIEndpoint<never, {
220
- siteId: string;
221
- jobId: string;
222
- }, CancelNewsletterSendJobResponse>;
223
213
  listAppointmentResources: APIEndpoint<never, {
224
214
  siteId: string;
225
215
  }, ListAppointmentResourcesResponse>;
@@ -530,30 +520,24 @@ export type BookingManagementAPIEndpoints = {
530
520
  status?: string;
531
521
  excludeCancelled?: string;
532
522
  }, Blob>;
533
- updateEventSeriesRegistration: APIEndpoint<UpdateEventSeriesRegistrationRequest, {
534
- siteId: string;
535
- seriesId: string;
536
- registrationId: string;
537
- }, UpdateEventSeriesRegistrationResponse>;
523
+ updateEventSeriesRegistration: EventEndpoints.UpdateRegistration;
524
+ saveEventSeriesRegistrationAnswers: EventEndpoints.SaveRegistrationAnswers;
538
525
  listEvents: APIEndpoint<never, {
539
526
  siteId: string;
540
527
  status?: 'draft' | 'active' | 'archived' | 'cancelled' | 'completed';
541
- visibility?: 'public' | 'private' | 'unlisted';
528
+ visibility?: 'public' | 'unlisted';
542
529
  }, Events.EventRecord[]>;
543
- createEvent: APIEndpoint<Events.CreateEventRequest, {
544
- siteId: string;
545
- }, Events.CreateEventRecord>;
530
+ createEvent: EventEndpoints.Create;
546
531
  transitionEventLifecycle: EventEndpoints.Lifecycle;
547
532
  updateEventIdentity: EventEndpoints.UpdateIdentity;
548
- createWholeSeriesRun: EventEndpoints.CreateWholeSeriesRun;
549
- updateWholeSeriesRun: EventEndpoints.UpdateWholeSeriesRun;
550
- cancelWholeSeriesRun: EventEndpoints.CancelWholeSeriesRun;
533
+ updateEventAddress: EventEndpoints.UpdateAddress;
551
534
  getEventSeries: EventEndpoints.GetSeries;
552
535
  updateEventSeries: EventEndpoints.UpdateSeries;
553
536
  deleteEventSeries: EventEndpoints.DeleteSeries;
554
537
  listEventSeriesAttendees: APIEndpoint<never, {
555
538
  siteId: string;
556
539
  seriesId: string;
540
+ occurrenceId?: string;
557
541
  }, BookingEventSeriesAttendee[]>;
558
542
  exportEventSeriesAttendeesCsv: APIEndpoint<never, {
559
543
  siteId: string;
@@ -1,8 +1,13 @@
1
1
  import type { EventOfferingId, EventSeriesId } from '../../core/src/index';
2
2
  import type { APIEndpoint } from './apiEndpointTypes';
3
+ import type * as Events from './eventManagementContracts';
3
4
  import type { EventSeriesRecord, UpdateEventSeriesRequest } from './bookingConfig';
4
5
  import type { EventOccurrenceListRecord } from './bookingRecords';
5
- import type { CancelWholeSeriesRunRequest, CancelWholeSeriesRunResponse, CreateWholeSeriesRunRequest, EventLifecycleTransitionRequest, EventLifecycleTransitionResponse, UpdateEventIdentityRequest, UpdateEventIdentityResponse, UpdateWholeSeriesRunRequest, WholeSeriesRunMutationResponse } from './eventManagementContracts';
6
+ import type { SaveEventSeriesRegistrationAnswersRequest, SaveEventSeriesRegistrationAnswersResponse, UpdateEventSeriesRegistrationRequest, UpdateEventSeriesRegistrationResponse } from './wholeSeriesRuns';
7
+ import type { CancelWholeSeriesRunRequest, CancelWholeSeriesRunResponse, CourseBookingSettingsRequest, CourseBookingSettingsResponse, CreateWholeSeriesRunRequest, EventLifecycleTransitionRequest, EventLifecycleTransitionResponse, UpdateEventAddressRequest, UpdateEventAddressResponse, UpdateEventIdentityRequest, UpdateEventIdentityResponse, UpdateWholeSeriesRunRequest, WholeSeriesRunMutationResponse } from './eventManagementContracts';
8
+ export type Create = APIEndpoint<Events.CreateEventRequest, {
9
+ siteId: string;
10
+ }, Events.CreateEventRecord>;
6
11
  export type Lifecycle = APIEndpoint<EventLifecycleTransitionRequest, {
7
12
  siteId: string;
8
13
  eventId: EventOfferingId;
@@ -11,6 +16,10 @@ export type UpdateIdentity = APIEndpoint<UpdateEventIdentityRequest, {
11
16
  siteId: string;
12
17
  eventId: EventOfferingId;
13
18
  }, UpdateEventIdentityResponse>;
19
+ export type UpdateAddress = APIEndpoint<UpdateEventAddressRequest, {
20
+ siteId: string;
21
+ eventId: EventOfferingId;
22
+ }, UpdateEventAddressResponse>;
14
23
  export type CancelWholeSeriesRun = APIEndpoint<CancelWholeSeriesRunRequest, {
15
24
  siteId: string;
16
25
  eventId: EventOfferingId;
@@ -26,6 +35,21 @@ export type CreateWholeSeriesRun = APIEndpoint<CreateWholeSeriesRunRequest, {
26
35
  eventId: EventOfferingId;
27
36
  }, WholeSeriesRunMutationResponse>;
28
37
  export type UpdateWholeSeriesRun = APIEndpoint<UpdateWholeSeriesRunRequest, RunParams, WholeSeriesRunMutationResponse>;
38
+ /** The course-wide booking settings, written onto every run in one go. */
39
+ export type UpdateCourseBookingSettings = APIEndpoint<CourseBookingSettingsRequest, {
40
+ siteId: string;
41
+ eventId: EventOfferingId;
42
+ }, CourseBookingSettingsResponse>;
43
+ /**
44
+ * Every booking on every run of one course, as one CSV, narrowed to the run
45
+ * and status the Attendees tab is filtered by.
46
+ */
47
+ export type ExportEventOfferingRegistrationsCsv = APIEndpoint<never, {
48
+ siteId: string;
49
+ eventOfferingId: string;
50
+ runId?: string;
51
+ status?: string;
52
+ }, Blob>;
29
53
  type SeriesParams = Omit<RunParams, 'runId'> & {
30
54
  seriesId: EventSeriesId;
31
55
  };
@@ -41,4 +65,24 @@ export type OccurrenceList = APIEndpoint<never, {
41
65
  limit?: number;
42
66
  offset?: number;
43
67
  }, EventOccurrenceListRecord[]>;
68
+ /**
69
+ * The whole-series run and course commands, grouped so the booking endpoint map
70
+ * can spread them in one line. Adding the course Booking tab's writer pushed
71
+ * that map past its `max-lines` baseline, the same reason the public checkout
72
+ * block was extracted from `endpoints.ts`.
73
+ */
74
+ export type WholeSeriesEndpoints = {
75
+ createWholeSeriesRun: CreateWholeSeriesRun;
76
+ updateWholeSeriesRun: UpdateWholeSeriesRun;
77
+ cancelWholeSeriesRun: CancelWholeSeriesRun;
78
+ updateCourseBookingSettings: UpdateCourseBookingSettings;
79
+ exportEventOfferingRegistrationsCsv: ExportEventOfferingRegistrationsCsv;
80
+ };
81
+ type ScopedRegistrationParams = Readonly<{
82
+ siteId: string;
83
+ seriesId: string;
84
+ registrationId: string;
85
+ }>;
86
+ export type UpdateRegistration = APIEndpoint<UpdateEventSeriesRegistrationRequest, ScopedRegistrationParams, UpdateEventSeriesRegistrationResponse>;
87
+ export type SaveRegistrationAnswers = APIEndpoint<SaveEventSeriesRegistrationAnswersRequest, ScopedRegistrationParams, SaveEventSeriesRegistrationAnswersResponse>;
44
88
  export {};
@@ -0,0 +1,50 @@
1
+ import { z } from 'zod';
2
+ import type { APIEndpoint } from './apiEndpointTypes';
3
+ export declare const CLIENT_ERROR_REPORT_ENDPOINT_DEFINITIONS: {
4
+ reportClientError: {
5
+ path: "/client/error-report";
6
+ method: "POST";
7
+ auth: "user";
8
+ errors: never[];
9
+ responseKind: "json";
10
+ };
11
+ };
12
+ export declare const CLIENT_ERROR_REPORT_LIMITS: {
13
+ readonly pathname: 1024;
14
+ readonly name: 120;
15
+ readonly message: 2000;
16
+ readonly stack: 8000;
17
+ readonly digest: 128;
18
+ readonly componentStack: 8000;
19
+ readonly sourceLocation: 1024;
20
+ };
21
+ export declare const clientErrorEventSchema: z.ZodEnum<{
22
+ "dashboard:route-error": "dashboard:route-error";
23
+ "dashboard:app-error": "dashboard:app-error";
24
+ "client:error-boundary": "client:error-boundary";
25
+ "client:window-error": "client:window-error";
26
+ "client:unhandled-rejection": "client:unhandled-rejection";
27
+ }>;
28
+ export declare const clientErrorReportSchema: z.ZodObject<{
29
+ event: z.ZodEnum<{
30
+ "dashboard:route-error": "dashboard:route-error";
31
+ "dashboard:app-error": "dashboard:app-error";
32
+ "client:error-boundary": "client:error-boundary";
33
+ "client:window-error": "client:window-error";
34
+ "client:unhandled-rejection": "client:unhandled-rejection";
35
+ }>;
36
+ pathname: z.ZodString;
37
+ name: z.ZodString;
38
+ message: z.ZodString;
39
+ stack: z.ZodNullable<z.ZodString>;
40
+ digest: z.ZodNullable<z.ZodString>;
41
+ componentStack: z.ZodNullable<z.ZodString>;
42
+ sourceLocation: z.ZodNullable<z.ZodString>;
43
+ }, z.core.$strict>;
44
+ export type ClientErrorEvent = z.infer<typeof clientErrorEventSchema>;
45
+ export type ClientErrorReportRequest = z.infer<typeof clientErrorReportSchema>;
46
+ export type ClientErrorReportingAPIEndpoints = {
47
+ reportClientError: APIEndpoint<ClientErrorReportRequest, never, {
48
+ ok: true;
49
+ }>;
50
+ };
@@ -1,4 +1,4 @@
1
- import type { CamelizeKeys, DbRow } from "../../db/src/index";
1
+ import type { CamelizeKeys, DbDatabase, DbRow } from "../../db/src/index";
2
2
  import type { ListNewsletterListMembersQueryInput, UpdateNewsletterListMembershipsBodyInput } from "./schemas/newsletter-memberships";
3
3
  /**
4
4
  * Communications Contracts
@@ -78,7 +78,7 @@ export type SendTestEmailRequest = {
78
78
  };
79
79
  };
80
80
  export type SendTestEmailResponse = {
81
- delivery: 'sent' | 'queued';
81
+ delivery: "sent" | "queued";
82
82
  email: string;
83
83
  };
84
84
  export type PreviewEmailTemplateRequest = {
@@ -99,9 +99,10 @@ export type NewsletterSettingsRecord = CamelizeKeys<DbRow<"newsletter_settings">
99
99
  export type NewsletterSubscriberRecord = CamelizeKeys<DbRow<"newsletter_subscribers">>;
100
100
  export type NewsletterListRecord = CamelizeKeys<DbRow<"newsletter_lists">>;
101
101
  export type NewsletterTemplateRecord = CamelizeKeys<DbRow<"newsletter_templates">>;
102
- export type NewsletterCampaignRecord = CamelizeKeys<DbRow<"newsletter_campaigns">>;
103
- export type NewsletterSendJobRecord = CamelizeKeys<DbRow<"newsletter_send_jobs">>;
104
- export type NewsletterSendJobStatus = "pending" | "processing" | "completed" | "failed" | "cancelled";
102
+ export type NewsletterCampaignRecord = Omit<CamelizeKeys<DbRow<"newsletter_campaigns">>, "status" | "finishReason" | "lastClaimedAt"> & {
103
+ status: "draft" | "scheduled" | "sending" | "finished";
104
+ finishReason: "completed" | "stopped_by_owner" | "deadline_reached" | "campaign_blocked" | null;
105
+ };
105
106
  export type GetNewsletterSettingsResponse = {
106
107
  settings: NewsletterSettingsRecord | null;
107
108
  };
@@ -199,6 +200,7 @@ export type ExportNewsletterSubscriberDataResponse = {
199
200
  id: string;
200
201
  name: string;
201
202
  }>;
203
+ deliveries: Array<Pick<DbRow<'newsletter_campaign_deliveries'>, 'id' | 'campaign_id' | 'captured_email' | 'state' | 'reason' | 'accepted_at' | 'delivered_at' | 'bounced_at' | 'complained_at' | 'unsubscribed_at' | 'opened_at' | 'clicked_at' | 'created_at'>>;
202
204
  };
203
205
  };
204
206
  export type ListNewsletterListsResponse = {
@@ -310,7 +312,6 @@ export type PreviewNewsletterTemplateResponse = {
310
312
  issues: NewsletterTemplatePreviewIssue[];
311
313
  };
312
314
  };
313
- export type NewsletterCampaignAudienceMode = "and" | "or";
314
315
  export type ListNewsletterCampaignsResponse = {
315
316
  campaigns: NewsletterCampaignRecord[];
316
317
  };
@@ -324,29 +325,43 @@ export type CreateNewsletterCampaignResponse = {
324
325
  export type GetNewsletterCampaignResponse = {
325
326
  campaign: NewsletterCampaignRecord;
326
327
  };
328
+ /** Draft edits only. Scheduling, unscheduling and stopping are their own commands below. */
327
329
  export type UpdateNewsletterCampaignRequest = Partial<{
328
330
  name: string;
329
331
  templateId: string | null;
330
332
  subject: string | null;
331
333
  preheader: string | null;
332
- audienceMode: NewsletterCampaignAudienceMode;
333
334
  audienceListIds: string[];
334
335
  audienceTags: string[];
335
336
  scheduledAt: string | null;
336
337
  timezone: string | null;
337
- status: "draft" | "scheduled" | "sending" | "sent" | "cancelled" | "failed";
338
- confirmLargeAudience: boolean;
339
338
  }>;
340
339
  export type UpdateNewsletterCampaignResponse = {
341
340
  campaign: NewsletterCampaignRecord;
342
341
  };
342
+ /** Freeze a draft's content and targeting and book its sending window. */
343
+ export type ScheduleNewsletterCampaignRequest = {
344
+ scheduledAt: string;
345
+ timezone: string;
346
+ confirmLargeAudience?: boolean;
347
+ };
348
+ export type ScheduleNewsletterCampaignResponse = {
349
+ campaign: NewsletterCampaignRecord;
350
+ };
351
+ /** Return a scheduled campaign to draft; fails once sending has started. */
352
+ export type UnscheduleNewsletterCampaignResponse = {
353
+ campaign: NewsletterCampaignRecord;
354
+ };
355
+ /** Stop the remaining sends of a scheduled or sending campaign. Final. */
356
+ export type StopNewsletterCampaignResponse = {
357
+ campaign: NewsletterCampaignRecord;
358
+ };
343
359
  export type DeleteNewsletterCampaignResponse = {
344
360
  deleted: boolean;
345
361
  };
346
362
  export type NewsletterCampaignRecipientsSummary = {
347
363
  count: number;
348
364
  filters: {
349
- audienceMode: NewsletterCampaignAudienceMode;
350
365
  audienceListIds: string[];
351
366
  audienceTags: string[];
352
367
  };
@@ -354,7 +369,13 @@ export type NewsletterCampaignRecipientsSummary = {
354
369
  export type GetNewsletterCampaignRecipientsSummaryResponse = {
355
370
  summary: NewsletterCampaignRecipientsSummary;
356
371
  };
372
+ export type NewsletterNotSentReason = DbDatabase["public"]["Enums"]["newsletter_delivery_reason"];
357
373
  export type NewsletterCampaignStats = {
374
+ selectedCount: number;
375
+ notSentCount: number;
376
+ unknownCount: number;
377
+ remainingCount: number;
378
+ notSentReasons: Partial<Record<NewsletterNotSentReason, number>>;
358
379
  sentCount: number;
359
380
  deliveredCount: number;
360
381
  openedCount: number;
@@ -372,7 +393,7 @@ export type SendNewsletterCampaignNowRequest = {
372
393
  };
373
394
  export type SendNewsletterCampaignNowResponse = {
374
395
  campaign: NewsletterCampaignRecord;
375
- jobsCreated: number;
396
+ recipientsCaptured: number;
376
397
  recipients: NewsletterCampaignRecipientsSummary;
377
398
  };
378
399
  export type TestSendNewsletterCampaignRequest = {
@@ -383,16 +404,3 @@ export type TestSendNewsletterCampaignResponse = {
383
404
  queued: number;
384
405
  failed: number;
385
406
  };
386
- export type ListNewsletterSendJobsQuery = Partial<{
387
- campaignId: string;
388
- status: NewsletterSendJobStatus;
389
- }>;
390
- export type ListNewsletterSendJobsResponse = {
391
- jobs: NewsletterSendJobRecord[];
392
- };
393
- export type RetryNewsletterSendJobResponse = {
394
- job: NewsletterSendJobRecord;
395
- };
396
- export type CancelNewsletterSendJobResponse = {
397
- job: NewsletterSendJobRecord;
398
- };