@riverbankcms/sdk 0.138.0 → 0.139.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 (208) hide show
  1. package/README.md +11 -15
  2. package/dist/{PreviewEditorSidebar-BVPur_CU.mjs → PreviewEditorSidebar-BDeenhi3.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DLhWX8oh.mjs → PreviewEditorUI-DSRhgjF5.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BguJY1SW.mjs → PreviewQueryProvider-D2K8GLUG.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-Tda6qw4z.mjs → SdkPreviewModeRuntime-CL7wSnYu.mjs} +47 -27
  6. package/dist/{SiteChromeCustomizeContext-BHFgMjde.mjs → SiteChromeCustomizeContext-BhDn-5ir.mjs} +7771 -5863
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +99 -330
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +9 -30
  9. package/dist/_dts/api/src/billing.d.ts +10 -3
  10. package/dist/_dts/api/src/contentRuntime.d.ts +8 -1
  11. package/dist/_dts/api/src/endpoints.d.ts +182 -103
  12. package/dist/_dts/api/src/footerSettings.d.ts +2 -5
  13. package/dist/_dts/api/src/index.d.ts +11 -9
  14. package/dist/_dts/api/src/mailchimpIntegration.d.ts +2 -59
  15. package/dist/_dts/api/src/mailingListIntegration.d.ts +117 -0
  16. package/dist/_dts/api/src/navigation/locations.d.ts +1 -0
  17. package/dist/_dts/api/src/navigation.d.ts +1 -26
  18. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +109 -2
  19. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +185 -0
  20. package/dist/_dts/api/src/privacyPolicy.d.ts +74 -2
  21. package/dist/_dts/api/src/publicBookingAvailabilityEndpointDefinitions.d.ts +6 -6
  22. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +1 -1
  23. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +2 -4
  24. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +10 -24
  25. package/dist/_dts/api/src/publicReadEndpointDefinitions.d.ts +73 -0
  26. package/dist/_dts/api/src/schemas/site-api-keys.d.ts +1 -1
  27. package/dist/_dts/api/src/sdkContracts.d.ts +2 -10
  28. package/dist/_dts/api/src/sdkThemeWire.d.ts +2 -2
  29. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +0 -29
  30. package/dist/_dts/api/src/siteOnboarding.d.ts +91 -228
  31. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -9
  32. package/dist/_dts/api/src/siteSettings.d.ts +20 -1
  33. package/dist/_dts/api/src/types.d.ts +5 -4
  34. package/dist/_dts/billing/src/membership/index.d.ts +14 -7
  35. package/dist/_dts/billing/src/plans/display.d.ts +15 -0
  36. package/dist/_dts/billing/src/plans/registry.d.ts +2 -0
  37. package/dist/_dts/billing/src/plans/standing.d.ts +19 -0
  38. package/dist/_dts/billing/src/plans/types.d.ts +1 -7
  39. package/dist/_dts/billing/src/subscriptions/evidence.d.ts +12 -0
  40. package/dist/_dts/billing/src/subscriptions/standingEvidence.d.ts +31 -0
  41. package/dist/_dts/billing/src/subscriptions/store.d.ts +23 -5
  42. package/dist/_dts/blocks/src/PageRenderer.d.ts +6 -15
  43. package/dist/_dts/blocks/src/client.d.ts +1 -1
  44. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +32 -16
  45. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +4 -0
  46. package/dist/_dts/blocks/src/pageRenderingMode.d.ts +12 -6
  47. package/dist/_dts/blocks/src/system/blocks/appointment-services.d.ts +11 -0
  48. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +39 -66
  49. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +39 -114
  50. package/dist/_dts/blocks/src/system/blocks/offerings-preview/catalogue.d.ts +18 -0
  51. package/dist/_dts/blocks/src/system/blocks/offerings-preview/fields.d.ts +2 -0
  52. package/dist/_dts/blocks/src/system/blocks/offerings-preview/index.d.ts +4 -0
  53. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +7 -13
  54. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -2
  56. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  57. package/dist/_dts/blocks/src/system/data/publicLoaderCachePolicy.d.ts +2 -74
  58. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +33 -100
  59. package/dist/_dts/blocks/src/system/runtime/api/types/newsletter.d.ts +5 -15
  60. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +48 -24
  61. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -12
  62. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +3 -0
  63. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +1 -1
  64. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarToday.d.ts +22 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +51 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +2 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +0 -1
  68. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +28 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/bookability.d.ts +9 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +14 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/duration.d.ts +2 -0
  72. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/index.d.ts +4 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/location.d.ts +2 -0
  74. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/quickDates.d.ts +16 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/AgendaEventCard.d.ts +9 -1
  76. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayCell.d.ts +2 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayHeaders.d.ts +4 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DayEventsModal.d.ts +2 -1
  79. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +5 -0
  80. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModals.d.ts +2 -1
  81. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventQuickDates.d.ts +15 -0
  82. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +7 -3
  83. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekTimetableView.d.ts +1 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/index.d.ts +2 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/timetableModel.d.ts +1 -0
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/useHydrationReady.d.ts +6 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.state.d.ts +3 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +56 -33
  89. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +3 -3
  90. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +13 -31
  91. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview-catalogue.d.ts +14 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview-content.d.ts +23 -0
  93. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +4 -2
  94. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +5 -0
  95. package/dist/_dts/commerce/src/purchase/index.d.ts +1 -0
  96. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +5 -12
  97. package/dist/_dts/commerce/src/purchase/stripeCommissionMetadata.d.ts +34 -0
  98. package/dist/_dts/content-editor/src/footerEngagementDraft.d.ts +6 -24
  99. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +1 -2
  100. package/dist/_dts/core/src/footer-engagement.d.ts +2 -6
  101. package/dist/_dts/core/src/index.d.ts +9 -1
  102. package/dist/_dts/core/src/mailing-list-identifiers.d.ts +21 -0
  103. package/dist/_dts/core/src/mailing-list-runtime.d.ts +42 -0
  104. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +14 -0
  105. package/dist/_dts/core/src/mailing-list-setup.d.ts +129 -0
  106. package/dist/_dts/core/src/mailing-list-submission.d.ts +244 -0
  107. package/dist/_dts/core/src/mailing-list-targeting-parser.d.ts +12 -0
  108. package/dist/_dts/core/src/mailing-list-targeting.d.ts +93 -0
  109. package/dist/_dts/core/src/navigation-locations.d.ts +28 -0
  110. package/dist/_dts/core/src/public-profile.d.ts +9 -1
  111. package/dist/_dts/core/src/public-read-cache-contract.d.ts +45 -0
  112. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +529 -373
  113. package/dist/_dts/editor-blocks/src/widgets/index.d.ts +1 -0
  114. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +11 -0
  115. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/context.d.ts +13 -0
  116. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/index.d.ts +3 -0
  117. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +6 -0
  118. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +1 -0
  119. package/dist/_dts/sdk/src/client/publicAppointmentReadOperations.d.ts +12 -0
  120. package/dist/_dts/sdk/src/client/publicEventReadOperations.d.ts +2 -1
  121. package/dist/_dts/sdk/src/client/publicLoaderCacheAccess.d.ts +11 -4
  122. package/dist/_dts/sdk/src/config/content-types.d.ts +3 -13
  123. package/dist/_dts/sdk/src/config/content-validation.d.ts +5 -8
  124. package/dist/_dts/sdk/src/constants.d.ts +3 -3
  125. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  126. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +12 -31
  127. package/dist/_dts/sdk/src/navigation/index.d.ts +11 -29
  128. package/dist/_dts/sdk/src/next/index.d.ts +4 -4
  129. package/dist/_dts/sdk/src/prebuild/types.d.ts +1 -5
  130. package/dist/_dts/sdk/src/public-api/contracts.d.ts +33 -16
  131. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +3 -0
  132. package/dist/_dts/sdk/src/rendering/client.d.ts +3 -20
  133. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -0
  134. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +4 -0
  135. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +1 -0
  136. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -1
  137. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  138. package/dist/_dts/sdk/src/version.d.ts +1 -1
  139. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  140. package/dist/_dts/theme-core/src/hosted-booking-appearance.d.ts +41 -0
  141. package/dist/_dts/theme-core/src/index.d.ts +1 -0
  142. package/dist/_dts/theme-core/src/runtime/buildThemeRuntime.d.ts +0 -1
  143. package/dist/_dts/theme-core/src/tokens/tokens.d.ts +7 -0
  144. package/dist/_dts/ui/src/badge.d.ts +1 -1
  145. package/dist/_dts/ui/src/callout.d.ts +1 -1
  146. package/dist/client/{BookingConsentAgreement-DQUik1Mx.mjs → BookingConsentAgreement-CZvTDtsK.mjs} +2 -2
  147. package/dist/client/{DiscountCodeDisclosure-CU67Q4vH.mjs → DiscountCodeDisclosure-D-DsLCMU.mjs} +1 -1
  148. package/dist/client/{EventCombined.client-a02TXUgg.mjs → EventCombined.client-dWqgd5ZO.mjs} +443 -199
  149. package/dist/client/{EventListing.client-99qx7jFl.mjs → EventListing.client-BMRa9IYp.mjs} +2 -2
  150. package/dist/client/{LeafletStaticMap-CWzcq73L.mjs → LeafletStaticMap-D21W9kBZ.mjs} +1 -1
  151. package/dist/client/{accordion-D1nb3-Oj.mjs → accordion-FxF_ta47.mjs} +1 -1
  152. package/dist/client/{bookingForm-BGrmLhaO.mjs → bookingForm-YnwW4TGw.mjs} +5 -5
  153. package/dist/client/bookings.mjs +43 -2
  154. package/dist/client/{carousel-DSmOx3ad.mjs → carousel-vng7fFT5.mjs} +1 -1
  155. package/dist/client/{cart-COWeOIUk.mjs → cart-DEPDsjNk.mjs} +3 -3
  156. package/dist/client/{checkout-CeysaIJK.mjs → checkout-CZRWu9rW.mjs} +3 -3
  157. package/dist/client/client.mjs +3331 -1407
  158. package/dist/client/{context-DBzX85Xc.mjs → context-DvU_WUmd.mjs} +4 -3
  159. package/dist/client/{dates-DCYhZBlW.mjs → dates-wnPMiRl5.mjs} +21 -3
  160. package/dist/client/{eventCalendar-BgsN73Ul.mjs → eventCalendar-BA3Q5L15.mjs} +80 -78
  161. package/dist/client/{eventCombined-DcZQAMQP.mjs → eventCombined-51wgR-1R.mjs} +3 -3
  162. package/dist/client/{eventDetails-BWwGJ54l.mjs → eventDetails-modaetpm.mjs} +4 -4
  163. package/dist/client/{eventListing-DqYqV8vp.mjs → eventListing-D8t2J3Kv.mjs} +3 -3
  164. package/dist/client/{eventRegistration-DQGDgu_e.mjs → eventRegistration-CYqtkCE_.mjs} +49 -9
  165. package/dist/client/{form-ClfpasVT.mjs → form-CBKXN5In.mjs} +2 -2
  166. package/dist/client/{headerSection-BuOMe98N.mjs → headerSection-DylDqNrs.mjs} +2 -2
  167. package/dist/client/hooks.mjs +1259 -555
  168. package/dist/client/{locationMap-CEqu_sfa.mjs → locationMap-CvWrG0vZ.mjs} +2 -2
  169. package/dist/client/{newsletterForm-IbrHjMxy.mjs → newsletterForm-Btwk70zw.mjs} +117 -38
  170. package/dist/client/{pricing-xj7MPZlK.mjs → pricing-Uzw-GQ6Y.mjs} +1 -1
  171. package/dist/client/{productDetail-vxqTt5Xj.mjs → productDetail-JLcUYKnd.mjs} +3 -3
  172. package/dist/client/{productList-OTdZu8sb.mjs → productList-FM0cbUzj.mjs} +3 -3
  173. package/dist/client/{propsDecoder-CY9gGEF7.mjs → propsDecoder-DYzafZb2.mjs} +592 -152
  174. package/dist/client/rendering/client.mjs +2259 -835
  175. package/dist/client/rendering/islands.mjs +17 -17
  176. package/dist/client/rendering.mjs +3308 -1236
  177. package/dist/client/{scrollToBlock--BFV6kl-.mjs → scrollToBlock-CvXszexS.mjs} +1 -1
  178. package/dist/client/{shop-CP4YbDL9.mjs → shop-BIcjvy5a.mjs} +6 -6
  179. package/dist/client/{shop-commerce-APs4XBXE.mjs → shop-commerce-BZQsy7xw.mjs} +5 -5
  180. package/dist/client/{shop-commerce-store-CAVLxLFr.mjs → shop-commerce-store-D5V7XAb5.mjs} +1 -1
  181. package/dist/client/{shopShared-BnSRrwXI.mjs → shopShared-DowkXevB.mjs} +3 -3
  182. package/dist/client/{useEventFilters-1a1by4c8.mjs → useEventFilters-oMoTw_JE.mjs} +56 -9
  183. package/dist/preview-next/before-render.mjs +238 -111
  184. package/dist/preview-next/client/runtime.mjs +4 -4
  185. package/dist/preview-next/keepAlive.mjs +238 -111
  186. package/dist/preview-next/middleware.mjs +238 -111
  187. package/dist/{previewAuthStore-BkEgnYPP.mjs → previewAuthStore-COUyAKaX.mjs} +238 -111
  188. package/dist/{sdk-runtime-DwGfsT0S.mjs → sdk-runtime-D4k2LSGF.mjs} +2 -2
  189. package/dist/{separator-BeqDLneQ.mjs → separator-UGtpag4Z.mjs} +1 -1
  190. package/dist/server/components.mjs +2697 -1023
  191. package/dist/server/config-validation.mjs +2424 -1720
  192. package/dist/server/config.mjs +2429 -1724
  193. package/dist/server/data.mjs +1164 -454
  194. package/dist/server/index.mjs +364 -280
  195. package/dist/server/navigation.mjs +16 -47
  196. package/dist/server/next.mjs +2915 -1380
  197. package/dist/server/page-converter.mjs +969 -522
  198. package/dist/server/prebuild.mjs +2 -3
  199. package/dist/server/rendering/server.mjs +2704 -1030
  200. package/dist/server/rendering.mjs +2742 -1063
  201. package/dist/server/routing.mjs +1386 -595
  202. package/dist/server/server.mjs +2878 -2324
  203. package/dist/server/theme-bridge.mjs +292 -24
  204. package/dist/styles/index.css +289 -25
  205. package/package.json +1 -1
  206. package/dist/_dts/api/src/navigation/identity.d.ts +0 -59
  207. package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +0 -291
  208. package/dist/_dts/core/src/newsletter-signup-destination.d.ts +0 -38
@@ -0,0 +1,21 @@
1
+ import type { Brand } from './branded';
2
+ export type NewsletterListId = Brand<string, 'NewsletterListId'>;
3
+ export type MailchimpConnectionId = Brand<string, 'MailchimpConnectionId'>;
4
+ export type MailchimpAccountId = Brand<string, 'MailchimpAccountId'>;
5
+ export type MailchimpAudienceId = Brand<string, 'MailchimpAudienceId'>;
6
+ export type MailchimpInterestId = Brand<string, 'MailchimpInterestId'>;
7
+ export type MailchimpTagName = Brand<string, 'MailchimpTagName'>;
8
+ export type BrevoConnectionId = Brand<string, 'BrevoConnectionId'>;
9
+ export type BrevoAccountId = Brand<string, 'BrevoAccountId'>;
10
+ export type BrevoListId = Brand<number, 'BrevoListId'>;
11
+ export type BrevoConfirmationTemplateId = Brand<number, 'BrevoConfirmationTemplateId'>;
12
+ export declare function parseNewsletterListId(value: unknown): NewsletterListId | null;
13
+ export declare function parseMailchimpConnectionId(value: unknown): MailchimpConnectionId | null;
14
+ export declare function parseMailchimpAccountId(value: unknown): MailchimpAccountId | null;
15
+ export declare function parseMailchimpAudienceId(value: unknown): MailchimpAudienceId | null;
16
+ export declare function parseMailchimpInterestId(value: unknown): MailchimpInterestId | null;
17
+ export declare function parseMailchimpTagName(value: unknown): MailchimpTagName | null;
18
+ export declare function parseBrevoConnectionId(value: unknown): BrevoConnectionId | null;
19
+ export declare function parseBrevoAccountId(value: unknown): BrevoAccountId | null;
20
+ export declare function parseBrevoListId(value: unknown): BrevoListId | null;
21
+ export declare function parseBrevoConfirmationTemplateId(value: unknown): BrevoConfirmationTemplateId | null;
@@ -0,0 +1,42 @@
1
+ import type { BrevoListId, MailchimpAudienceId, MailchimpInterestId } from './mailing-list-identifiers';
2
+ import { type Result } from './result';
3
+ import type { MailingListGlobalForm, MailingListSetupRevision, NativeMailingListTopicId } from './mailing-list-setup';
4
+ export type MailingListRuntimeContext = Readonly<{
5
+ tag: 'not_configured';
6
+ }> | Readonly<{
7
+ tag: 'configured';
8
+ revision: MailingListSetupRevision;
9
+ form: MailingListGlobalForm;
10
+ provider: MailingListRuntimeProvider;
11
+ }>;
12
+ export type MailingListRuntimeProvider = Readonly<{
13
+ provider: 'native';
14
+ defaultTopicId: NativeMailingListTopicId;
15
+ topics: readonly Readonly<{
16
+ id: NativeMailingListTopicId;
17
+ name: string;
18
+ }>[];
19
+ }> | Readonly<{
20
+ provider: 'brevo';
21
+ defaultListId: BrevoListId;
22
+ lists: readonly Readonly<{
23
+ id: BrevoListId;
24
+ name: string;
25
+ }>[];
26
+ }> | Readonly<{
27
+ provider: 'mailchimp';
28
+ defaultAudienceId: MailchimpAudienceId;
29
+ audiences: readonly Readonly<{
30
+ id: MailchimpAudienceId;
31
+ name: string;
32
+ interests: readonly Readonly<{
33
+ id: MailchimpInterestId;
34
+ name: string;
35
+ categoryName: string;
36
+ }>[];
37
+ }>[];
38
+ }>;
39
+ export type MailingListRuntimeContextParseError = Readonly<{
40
+ tag: 'invalid_mailing_list_runtime_context';
41
+ }>;
42
+ export declare function parseMailingListRuntimeContext(value: unknown): Result<MailingListRuntimeContext, MailingListRuntimeContextParseError>;
@@ -0,0 +1,14 @@
1
+ import type { ConfiguredMailingListProvider, MailingListGlobalForm, MailingListSetupRevision, MailingListSiteSetup } from './mailing-list-setup';
2
+ import { type Result } from './result';
3
+ export type MailingListSetupParseError = Readonly<{
4
+ tag: 'invalid_mailing_list_setup';
5
+ field: 'shape' | 'tag' | 'siteId' | 'revision' | 'form' | 'provider' | 'connectionId' | 'accountId' | 'defaultTargetId' | 'confirmation';
6
+ }>;
7
+ export type MailingListGlobalFormParseError = Readonly<{
8
+ tag: 'invalid_mailing_list_global_form';
9
+ field: 'shape' | 'fields' | 'includeOptionalPhone' | 'buttonLabel' | 'privacyNote';
10
+ }>;
11
+ export declare function parseMailingListGlobalForm(value: unknown): Result<MailingListGlobalForm, MailingListGlobalFormParseError>;
12
+ export declare function parseMailingListSiteSetup(value: unknown): Result<MailingListSiteSetup, MailingListSetupParseError>;
13
+ export declare function parseConfiguredMailingListProvider(value: unknown): Result<ConfiguredMailingListProvider, MailingListSetupParseError>;
14
+ export declare function parseMailingListSetupRevision(value: unknown): MailingListSetupRevision | null;
@@ -0,0 +1,129 @@
1
+ import type { Brand, SiteId } from './branded';
2
+ import type { BrevoAccountId, BrevoConfirmationTemplateId, BrevoConnectionId, BrevoListId, MailchimpAccountId, MailchimpAudienceId, MailchimpConnectionId, NewsletterListId } from './mailing-list-identifiers';
3
+ export type MailingListProvider = 'native' | 'mailchimp' | 'brevo';
4
+ export type NativeMailingListTopicId = NewsletterListId;
5
+ export type MailingListSetupRevision = Brand<number, 'MailingListSetupRevision'>;
6
+ export type MailingListProfileField = 'name' | 'first_name' | 'last_name' | 'company' | 'phone';
7
+ export type MailingListGlobalFields = Readonly<{
8
+ preset: 'emailOnly';
9
+ }> | Readonly<{
10
+ preset: 'emailName';
11
+ name: 'required' | 'optional';
12
+ }> | Readonly<{
13
+ preset: 'emailFirstLast';
14
+ firstName: 'required' | 'optional';
15
+ lastName: 'required' | 'optional';
16
+ }> | Readonly<{
17
+ preset: 'emailNameCompany';
18
+ name: 'required' | 'optional';
19
+ company: 'required' | 'optional';
20
+ }>;
21
+ export type MailingListGlobalForm = Readonly<{
22
+ fields: MailingListGlobalFields;
23
+ includeOptionalPhone: boolean;
24
+ buttonLabel: string;
25
+ privacyNote: string | null;
26
+ }>;
27
+ export type ToggleConfirmation = Readonly<{
28
+ tag: 'off';
29
+ }> | Readonly<{
30
+ tag: 'on';
31
+ }>;
32
+ export type BrevoConfirmation = Readonly<{
33
+ tag: 'off';
34
+ }> | Readonly<{
35
+ tag: 'on';
36
+ templateId: BrevoConfirmationTemplateId;
37
+ redirectUrl: string;
38
+ }>;
39
+ export type NativeMailingListSetup = Readonly<{
40
+ provider: 'native';
41
+ defaultTopicId: NativeMailingListTopicId;
42
+ confirmation: ToggleConfirmation;
43
+ }>;
44
+ export type MailchimpMailingListSetup = Readonly<{
45
+ provider: 'mailchimp';
46
+ connectionId: MailchimpConnectionId;
47
+ accountId: MailchimpAccountId;
48
+ defaultAudienceId: MailchimpAudienceId;
49
+ confirmation: ToggleConfirmation;
50
+ }>;
51
+ export type BrevoMailingListSetup = Readonly<{
52
+ provider: 'brevo';
53
+ connectionId: BrevoConnectionId;
54
+ accountId: BrevoAccountId;
55
+ defaultListId: BrevoListId;
56
+ confirmation: BrevoConfirmation;
57
+ }>;
58
+ export type ConfiguredMailingListProvider = NativeMailingListSetup | MailchimpMailingListSetup | BrevoMailingListSetup;
59
+ export type MailingListSiteSetup = Readonly<{
60
+ tag: 'not_configured';
61
+ siteId: SiteId;
62
+ }> | Readonly<{
63
+ tag: 'configured';
64
+ siteId: SiteId;
65
+ revision: MailingListSetupRevision;
66
+ form: MailingListGlobalForm;
67
+ provider: ConfiguredMailingListProvider;
68
+ }>;
69
+ export type MailingListDestinationFieldRequirements = Readonly<{
70
+ destinationKey: string;
71
+ requiredFields: readonly MailingListProfileField[];
72
+ acceptedFields: readonly MailingListProfileField[];
73
+ }>;
74
+ export type MailingListFieldCompatibilityIssue = Readonly<{
75
+ tag: 'destination_requires_uncollected_field';
76
+ destinationKey: string;
77
+ field: MailingListProfileField;
78
+ }> | Readonly<{
79
+ tag: 'destination_requires_site_required_field';
80
+ destinationKey: string;
81
+ field: MailingListProfileField;
82
+ }> | Readonly<{
83
+ tag: 'destination_rejects_required_site_field';
84
+ destinationKey: string;
85
+ field: MailingListProfileField;
86
+ }> | Readonly<{
87
+ tag: 'destination_rejects_collected_site_field';
88
+ destinationKey: string;
89
+ field: MailingListProfileField;
90
+ }>;
91
+ export type MailingListFieldCompatibilityPlan = Readonly<{
92
+ tag: 'compatible';
93
+ }> | Readonly<{
94
+ tag: 'blocked';
95
+ issues: readonly [
96
+ MailingListFieldCompatibilityIssue,
97
+ ...MailingListFieldCompatibilityIssue[]
98
+ ];
99
+ }>;
100
+ export declare function planMailingListFieldCompatibility(input: Readonly<{
101
+ form: MailingListGlobalForm;
102
+ destinations: readonly MailingListDestinationFieldRequirements[];
103
+ }>): MailingListFieldCompatibilityPlan;
104
+ export type MailingListSetupSwitchPlan = Readonly<{
105
+ tag: 'activate';
106
+ affectedPlacementCount: 0;
107
+ }> | Readonly<{
108
+ tag: 'update_same_scope';
109
+ affectedPlacementCount: number;
110
+ }> | Readonly<{
111
+ tag: 'replace_scope';
112
+ affectedPlacementCount: number;
113
+ }>;
114
+ export declare function planMailingListSetupSwitch(input: Readonly<{
115
+ previousScope: MailingListProviderScope | null;
116
+ nextScope: MailingListProviderScope;
117
+ placementModes: readonly ('default' | 'custom')[];
118
+ defaultChanged: boolean;
119
+ }>): MailingListSetupSwitchPlan;
120
+ export type MailingListProviderScope = Readonly<{
121
+ provider: 'native';
122
+ }> | Readonly<{
123
+ provider: 'mailchimp';
124
+ accountId: MailchimpAccountId;
125
+ }> | Readonly<{
126
+ provider: 'brevo';
127
+ accountId: BrevoAccountId;
128
+ }>;
129
+ export declare function countDefaultMailingListPlacements(placementModes: readonly ('default' | 'custom')[]): number;
@@ -0,0 +1,244 @@
1
+ import { type Brand, type ContentVersionId, type SiteId } from './branded';
2
+ import type { FooterModuleId } from './footer-composition-types';
3
+ import type { BrevoConfirmation, MailingListGlobalForm, MailingListProvider, MailingListSetupRevision, ToggleConfirmation } from './mailing-list-setup';
4
+ import type { ResolvedMailingListTarget } from './mailing-list-targeting';
5
+ import type { BrevoConnectionId, MailchimpConnectionId } from './mailing-list-identifiers';
6
+ export declare const MAILING_LIST_SUBMISSION_BUDGET_MS = 10000;
7
+ export type MailingListBlockId = Brand<string, 'MailingListBlockId'>;
8
+ export type MailingListSignedSourceToken = Brand<string, 'MailingListSignedSourceToken'>;
9
+ export type MailingListSdkFooterBlockId = Brand<string, 'MailingListSdkFooterBlockId'>;
10
+ export type MailingListSdkContentHash = Brand<string, 'MailingListSdkContentHash'>;
11
+ export type MailingListFooterRevision = Brand<number, 'MailingListFooterRevision'>;
12
+ export type ExternalSignupConsentId = Brand<string, 'ExternalSignupConsentId'>;
13
+ export type NormalizedSubscriberEmail = Brand<string, 'NormalizedSubscriberEmail'>;
14
+ export declare function parseMailingListBlockId(value: unknown): MailingListBlockId | null;
15
+ export declare function parseMailingListSignedSourceToken(value: unknown): MailingListSignedSourceToken | null;
16
+ export declare function parseMailingListSdkFooterBlockId(value: unknown): MailingListSdkFooterBlockId | null;
17
+ export declare function parseMailingListSdkContentHash(value: unknown): MailingListSdkContentHash | null;
18
+ export declare function parseMailingListContentVersionId(value: unknown): ContentVersionId | null;
19
+ export declare function parseMailingListFooterRevision(value: unknown): MailingListFooterRevision | null;
20
+ export type MailingListSignupSource = Readonly<{
21
+ tag: 'published_block';
22
+ blockId: MailingListBlockId;
23
+ contentVersionId: ContentVersionId;
24
+ }> | Readonly<{
25
+ tag: 'applied_footer';
26
+ sectionId: FooterModuleId;
27
+ revision: MailingListFooterRevision;
28
+ }> | Readonly<{
29
+ tag: 'sdk_footer_block';
30
+ blockId: MailingListSdkFooterBlockId;
31
+ contentHash: MailingListSdkContentHash;
32
+ }>;
33
+ /** Public proof of which published placement owns a signup request. */
34
+ export type MailingListSignupSourceRef = Readonly<{
35
+ tag: 'block_ref';
36
+ blockId: MailingListBlockId;
37
+ }> | Readonly<{
38
+ tag: 'signed_source_ref';
39
+ token: MailingListSignedSourceToken;
40
+ }>;
41
+ /** Source identity signed into managed-footer and SDK-footer form tokens. */
42
+ export type MailingListSignupTokenSource = Readonly<{
43
+ kind: 'block';
44
+ blockId: MailingListBlockId;
45
+ }> | Readonly<{
46
+ kind: 'footer-composition';
47
+ sectionId: FooterModuleId;
48
+ }> | Readonly<{
49
+ kind: 'sdk-footer-block';
50
+ blockId: MailingListSdkFooterBlockId;
51
+ contentHash: MailingListSdkContentHash;
52
+ }>;
53
+ export declare function buildMailingListSignupBlockSourceRef(blockId: unknown): MailingListSignupSourceRef | null;
54
+ type MailingListSignupProfileBase = Readonly<{
55
+ email: NormalizedSubscriberEmail;
56
+ phone: Readonly<{
57
+ tag: 'not_collected';
58
+ }> | Readonly<{
59
+ tag: 'collected';
60
+ value: string | null;
61
+ }>;
62
+ }>;
63
+ export type ResolvedMailingListProfileField = Readonly<{
64
+ requirement: 'required';
65
+ value: string;
66
+ }> | Readonly<{
67
+ requirement: 'optional';
68
+ value: string | null;
69
+ }>;
70
+ export type MailingListSignupProfile = (MailingListSignupProfileBase & Readonly<{
71
+ preset: 'emailOnly';
72
+ }>) | (MailingListSignupProfileBase & Readonly<{
73
+ preset: 'emailName';
74
+ name: ResolvedMailingListProfileField;
75
+ }>) | (MailingListSignupProfileBase & Readonly<{
76
+ preset: 'emailFirstLast';
77
+ firstName: ResolvedMailingListProfileField;
78
+ lastName: ResolvedMailingListProfileField;
79
+ }>) | (MailingListSignupProfileBase & Readonly<{
80
+ preset: 'emailNameCompany';
81
+ name: ResolvedMailingListProfileField;
82
+ company: ResolvedMailingListProfileField;
83
+ }>);
84
+ export type MailingListSignupProfileInput = Readonly<{
85
+ email: string;
86
+ name?: string | null;
87
+ firstName?: string | null;
88
+ lastName?: string | null;
89
+ company?: string | null;
90
+ phone?: string | null;
91
+ }>;
92
+ export type MailingListSignupProfileParseError = Readonly<{
93
+ tag: 'invalid_email';
94
+ }> | Readonly<{
95
+ tag: 'required_field_missing';
96
+ field: 'name' | 'first_name' | 'last_name' | 'company';
97
+ }>;
98
+ export declare function parseMailingListSignupProfile(form: MailingListGlobalForm, input: MailingListSignupProfileInput): Readonly<{
99
+ ok: true;
100
+ value: MailingListSignupProfile;
101
+ }> | Readonly<{
102
+ ok: false;
103
+ error: MailingListSignupProfileParseError;
104
+ }>;
105
+ type ResolvedMailingListSignupIntentBase = Readonly<{
106
+ siteId: SiteId;
107
+ setupRevision: MailingListSetupRevision;
108
+ source: MailingListSignupSource;
109
+ consentedAt: string;
110
+ }>;
111
+ type ResolvedMailingListFormProfile = Readonly<{
112
+ formPreset: 'emailOnly';
113
+ profile: Extract<MailingListSignupProfile, {
114
+ preset: 'emailOnly';
115
+ }>;
116
+ }> | Readonly<{
117
+ formPreset: 'emailName';
118
+ profile: Extract<MailingListSignupProfile, {
119
+ preset: 'emailName';
120
+ }>;
121
+ }> | Readonly<{
122
+ formPreset: 'emailFirstLast';
123
+ profile: Extract<MailingListSignupProfile, {
124
+ preset: 'emailFirstLast';
125
+ }>;
126
+ }> | Readonly<{
127
+ formPreset: 'emailNameCompany';
128
+ profile: Extract<MailingListSignupProfile, {
129
+ preset: 'emailNameCompany';
130
+ }>;
131
+ }>;
132
+ type ResolvedMailingListProviderIntent = Readonly<{
133
+ provider: 'native';
134
+ target: Extract<ResolvedMailingListTarget, {
135
+ provider: 'native';
136
+ }>;
137
+ confirmation: ToggleConfirmation;
138
+ }> | Readonly<{
139
+ provider: 'mailchimp';
140
+ connectionId: MailchimpConnectionId;
141
+ target: Extract<ResolvedMailingListTarget, {
142
+ provider: 'mailchimp';
143
+ }>;
144
+ confirmation: ToggleConfirmation;
145
+ }> | Readonly<{
146
+ provider: 'brevo';
147
+ connectionId: BrevoConnectionId;
148
+ target: Extract<ResolvedMailingListTarget, {
149
+ provider: 'brevo';
150
+ }>;
151
+ confirmation: BrevoConfirmation;
152
+ }>;
153
+ export type ResolvedMailingListSignupIntent = ResolvedMailingListSignupIntentBase & ResolvedMailingListFormProfile & ResolvedMailingListProviderIntent;
154
+ export type MailingListProviderAcknowledgement = Readonly<{
155
+ tag: 'subscribed';
156
+ }> | Readonly<{
157
+ tag: 'confirmation_requested';
158
+ }>;
159
+ export type MailingListProviderFailure = Readonly<{
160
+ tag: 'configuration_unavailable';
161
+ }> | Readonly<{
162
+ tag: 'authentication_failed';
163
+ }> | Readonly<{
164
+ tag: 'target_unavailable';
165
+ }> | Readonly<{
166
+ tag: 'profile_rejected';
167
+ }> | Readonly<{
168
+ tag: 'subscriber_suppressed';
169
+ }> | Readonly<{
170
+ tag: 'rate_limited';
171
+ }> | Readonly<{
172
+ tag: 'temporarily_unavailable';
173
+ }> | Readonly<{
174
+ tag: 'uncertain';
175
+ reason: 'deadline_exceeded' | 'network_interrupted';
176
+ }>;
177
+ export type MailingListProviderSubmissionResult = Readonly<{
178
+ ok: true;
179
+ acknowledgement: MailingListProviderAcknowledgement;
180
+ }> | Readonly<{
181
+ ok: false;
182
+ error: MailingListProviderFailure;
183
+ }>;
184
+ export type MailingListSubmissionDeadline = Readonly<{
185
+ deadlineEpochMs: number;
186
+ signal: AbortSignal;
187
+ }>;
188
+ export type MailingListProviderPort<TProvider extends MailingListProvider> = Readonly<{
189
+ submit: (intent: Extract<ResolvedMailingListSignupIntent, {
190
+ provider: TProvider;
191
+ }>, deadline: MailingListSubmissionDeadline) => Promise<MailingListProviderSubmissionResult>;
192
+ }>;
193
+ export type MailingListPublicSignupResponse = Readonly<{
194
+ tag: 'subscribed';
195
+ }> | Readonly<{
196
+ tag: 'confirmation_required';
197
+ }> | Readonly<{
198
+ tag: 'invalid_input';
199
+ reason: 'profile_rejected';
200
+ }> | Readonly<{
201
+ tag: 'unavailable';
202
+ reason: 'configuration_unavailable' | 'stale_configuration' | 'authentication_failed' | 'target_unavailable' | 'subscriber_suppressed' | 'rate_limited' | 'temporarily_unavailable';
203
+ }> | Readonly<{
204
+ tag: 'uncertain';
205
+ reason: 'deadline_exceeded' | 'network_interrupted';
206
+ }>;
207
+ export declare function toMailingListPublicSignupResponse(result: MailingListProviderSubmissionResult): MailingListPublicSignupResponse;
208
+ export type ExternalSignupConsentAttemptOutcome = Readonly<{
209
+ tag: 'consent_recorded';
210
+ }> | Readonly<{
211
+ tag: 'provider_acknowledged';
212
+ acknowledgement: MailingListProviderAcknowledgement;
213
+ }> | Readonly<{
214
+ tag: 'provider_failed';
215
+ failure: MailingListProviderFailure;
216
+ }>;
217
+ type ExternalSignupConsentRecordBase = Readonly<{
218
+ id: ExternalSignupConsentId;
219
+ siteId: SiteId;
220
+ normalizedEmail: NormalizedSubscriberEmail;
221
+ consentedAt: string;
222
+ source: MailingListSignupSource;
223
+ setupRevision: MailingListSetupRevision;
224
+ ipAddress: string | null;
225
+ userAgent: string | null;
226
+ referer: string | null;
227
+ outcome: ExternalSignupConsentAttemptOutcome;
228
+ }>;
229
+ export type ExternalSignupConsentRecord = (ExternalSignupConsentRecordBase & Readonly<{
230
+ provider: 'mailchimp';
231
+ connectionId: MailchimpConnectionId;
232
+ target: Extract<ResolvedMailingListTarget, {
233
+ provider: 'mailchimp';
234
+ }>;
235
+ confirmation: ToggleConfirmation;
236
+ }>) | (ExternalSignupConsentRecordBase & Readonly<{
237
+ provider: 'brevo';
238
+ connectionId: BrevoConnectionId;
239
+ target: Extract<ResolvedMailingListTarget, {
240
+ provider: 'brevo';
241
+ }>;
242
+ confirmation: BrevoConfirmation;
243
+ }>);
244
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { MailingListPlacementTargeting, MailingListVisitorSelection } from './mailing-list-targeting';
2
+ import { type Result } from './result';
3
+ export type MailingListTargetingParseError = Readonly<{
4
+ tag: 'invalid_mailing_list_targeting';
5
+ field: 'shape' | 'mode' | 'provider' | 'selection' | 'audienceId' | 'targets' | 'duplicate_target';
6
+ }>;
7
+ export type MailingListVisitorSelectionParseError = Readonly<{
8
+ tag: 'invalid_mailing_list_visitor_selection';
9
+ field: 'shape' | 'provider' | 'targets';
10
+ }>;
11
+ export declare function parseMailingListPlacementTargeting(value: unknown): Result<MailingListPlacementTargeting, MailingListTargetingParseError>;
12
+ export declare function parseMailingListVisitorSelection(value: unknown): Result<MailingListVisitorSelection, MailingListVisitorSelectionParseError>;
@@ -0,0 +1,93 @@
1
+ import type { ReadonlyNonEmptyArray } from './non-empty-array';
2
+ import type { BrevoListId, MailchimpInterestId, MailchimpAudienceId } from './mailing-list-identifiers';
3
+ import type { ConfiguredMailingListProvider, MailingListProvider, NativeMailingListTopicId } from './mailing-list-setup';
4
+ import { type Result } from './result';
5
+ export type MailingListDefaultTargeting = Readonly<{
6
+ mode: 'default';
7
+ }>;
8
+ export type NativeMailingListCustomTargeting = Readonly<{
9
+ mode: 'custom';
10
+ provider: 'native';
11
+ selection: Readonly<{
12
+ tag: 'fixed';
13
+ topicIds: ReadonlyNonEmptyArray<NativeMailingListTopicId>;
14
+ }> | Readonly<{
15
+ tag: 'visitor_choice';
16
+ offeredTopicIds: ReadonlyNonEmptyArray<NativeMailingListTopicId>;
17
+ }>;
18
+ }>;
19
+ export type BrevoMailingListCustomTargeting = Readonly<{
20
+ mode: 'custom';
21
+ provider: 'brevo';
22
+ selection: Readonly<{
23
+ tag: 'fixed';
24
+ listIds: ReadonlyNonEmptyArray<BrevoListId>;
25
+ }> | Readonly<{
26
+ tag: 'visitor_choice';
27
+ offeredListIds: ReadonlyNonEmptyArray<BrevoListId>;
28
+ }>;
29
+ }>;
30
+ export type MailchimpMailingListCustomTargeting = Readonly<{
31
+ mode: 'custom';
32
+ provider: 'mailchimp';
33
+ audienceId: MailchimpAudienceId;
34
+ selection: Readonly<{
35
+ tag: 'fixed';
36
+ interestIds: readonly MailchimpInterestId[];
37
+ }> | Readonly<{
38
+ tag: 'visitor_choice';
39
+ offeredInterestIds: ReadonlyNonEmptyArray<MailchimpInterestId>;
40
+ }>;
41
+ }>;
42
+ export type MailingListPlacementTargeting = MailingListDefaultTargeting | NativeMailingListCustomTargeting | BrevoMailingListCustomTargeting | MailchimpMailingListCustomTargeting;
43
+ export declare function sameMailingListPlacementTargeting(left: MailingListPlacementTargeting, right: MailingListPlacementTargeting): boolean;
44
+ export type MailingListVisitorSelection = Readonly<{
45
+ provider: 'native';
46
+ topicIds: readonly NativeMailingListTopicId[];
47
+ }> | Readonly<{
48
+ provider: 'brevo';
49
+ listIds: readonly BrevoListId[];
50
+ }> | Readonly<{
51
+ provider: 'mailchimp';
52
+ interestIds: readonly MailchimpInterestId[];
53
+ }>;
54
+ export type ResolvedMailingListTarget = Readonly<{
55
+ provider: 'native';
56
+ topicIds: ReadonlyNonEmptyArray<NativeMailingListTopicId>;
57
+ }> | Readonly<{
58
+ provider: 'brevo';
59
+ listIds: ReadonlyNonEmptyArray<BrevoListId>;
60
+ }> | Readonly<{
61
+ provider: 'mailchimp';
62
+ audienceId: MailchimpAudienceId;
63
+ interestIds: readonly MailchimpInterestId[];
64
+ }>;
65
+ export type MailingListTargetResolutionError = Readonly<{
66
+ tag: 'targeting_provider_mismatch';
67
+ setupProvider: MailingListProvider;
68
+ targetingProvider: MailingListProvider;
69
+ }> | Readonly<{
70
+ tag: 'visitor_selection_not_allowed';
71
+ }> | Readonly<{
72
+ tag: 'visitor_selection_required';
73
+ }> | Readonly<{
74
+ tag: 'visitor_selection_provider_mismatch';
75
+ }> | Readonly<{
76
+ tag: 'visitor_selection_outside_offer';
77
+ }>;
78
+ export declare function resolveMailingListTarget(input: Readonly<{
79
+ setup: ConfiguredMailingListProvider;
80
+ targeting: MailingListPlacementTargeting;
81
+ visitorSelection?: MailingListVisitorSelection;
82
+ }>): Result<ResolvedMailingListTarget, MailingListTargetResolutionError>;
83
+ export type MailingListChoicePresentation = Readonly<{
84
+ tag: 'hidden';
85
+ }> | Readonly<{
86
+ tag: 'automatic';
87
+ selection: MailingListVisitorSelection;
88
+ }> | Readonly<{
89
+ tag: 'visitor_choice';
90
+ provider: MailingListProvider;
91
+ optionCount: number;
92
+ }>;
93
+ export declare function planMailingListChoicePresentation(targeting: MailingListPlacementTargeting): MailingListChoicePresentation;
@@ -0,0 +1,28 @@
1
+ import { type Result } from './result';
2
+ /** The only places a site's navigation can be displayed. */
3
+ export declare const NAVIGATION_LOCATIONS: readonly ["main", "footer", "legal"];
4
+ export type NavigationLocation = (typeof NAVIGATION_LOCATIONS)[number];
5
+ export type NavigationLocationDescriptor = Readonly<{
6
+ location: NavigationLocation;
7
+ label: string;
8
+ description: string;
9
+ }>;
10
+ export declare const NAVIGATION_LOCATION_DESCRIPTORS: Readonly<Record<NavigationLocation, NavigationLocationDescriptor>>;
11
+ export type SiteNavigationLocationRow<T = unknown> = Readonly<{
12
+ location: unknown;
13
+ value: T;
14
+ }>;
15
+ export type SiteNavigationLocationsError = Readonly<{
16
+ kind: 'invalid_location';
17
+ index: number;
18
+ value: unknown;
19
+ }> | Readonly<{
20
+ kind: 'duplicate_location';
21
+ location: NavigationLocation;
22
+ }> | Readonly<{
23
+ kind: 'missing_location';
24
+ location: NavigationLocation;
25
+ }>;
26
+ export type SiteNavigationLocations<T> = Readonly<Record<NavigationLocation, T>>;
27
+ /** Parse all rows for one site into a complete fixed-location record. */
28
+ export declare function parseSiteNavigationLocations<T>(rows: readonly SiteNavigationLocationRow<T>[]): Result<SiteNavigationLocations<T>, SiteNavigationLocationsError>;
@@ -55,13 +55,21 @@ export type PublicSocialLink = Readonly<{
55
55
  label: string;
56
56
  url: string;
57
57
  }>;
58
+ /**
59
+ * Whether the site shows its business address publicly. Absent on every
60
+ * profile saved before this field existed, and the footer has always shown
61
+ * the address whenever its composition selected one, so absent reads as
62
+ * `shown`.
63
+ */
64
+ export type PublicAddressVisibility = 'shown' | 'hidden';
58
65
  export type PublicProfile = Readonly<{
59
66
  contact: PublicContactDetails | null;
60
67
  openingHours: WeeklyOpeningHours | null;
61
68
  socialLinks: readonly PublicSocialLink[];
69
+ addressVisibility: PublicAddressVisibility;
62
70
  }>;
63
71
  export type PublicProfileParseError = Readonly<{
64
- code: 'invalid_shape' | 'contact_method_required' | 'invalid_email' | 'invalid_phone' | 'invalid_timezone' | 'invalid_weekdays' | 'invalid_time' | 'invalid_interval' | 'overlapping_intervals' | 'invalid_social_link' | 'duplicate_social_link_id';
72
+ code: 'invalid_shape' | 'contact_method_required' | 'invalid_email' | 'invalid_phone' | 'invalid_timezone' | 'invalid_weekdays' | 'invalid_time' | 'invalid_interval' | 'overlapping_intervals' | 'invalid_social_link' | 'invalid_address_visibility' | 'duplicate_social_link_id';
65
73
  path: string;
66
74
  message: string;
67
75
  }>;
@@ -0,0 +1,45 @@
1
+ export type PublicReadEndpoint = 'listPublishedEntries' | 'getPublishedEntryPreview' | 'listPublicEvents' | 'listPublicEventCalendarWindow' | 'listPublicRecurringSchedule' | 'getPublicEventDetails' | 'resolveEventSubroute' | 'listPublicRouteCandidates' | 'listPublicTeamMembers' | 'listPublicProducts' | 'listPublicPasses' | 'listPublicMemberships' | 'getPublicFormById' | 'getPublicBookingServices' | 'getPublicBookingService' | 'getPublicBookingResourcesReference' | 'getPublicBookingAvailableDates' | 'getPublicBookingAvailableSlots' | 'getPublicWeeklySlotAvailability' | 'listPublicForms' | 'checkRedirect' | 'getPublicRoutableContent' | 'getPublicSitemapRoutes';
2
+ export type PublicReadCacheTagKind = 'published_content' | 'public_team_members' | 'public_products' | 'site_forms';
3
+ export type PublicReadTransport = 'direct' | 'batch_only';
4
+ export type PublicReadCachePolicy = Readonly<{
5
+ kind: 'live';
6
+ reason: 'booking_correctness';
7
+ freshness: 'availability';
8
+ transport: PublicReadTransport;
9
+ }> | Readonly<{
10
+ kind: 'tagged';
11
+ tags: readonly PublicReadCacheTagKind[];
12
+ freshness: 'content';
13
+ transport: PublicReadTransport;
14
+ }>;
15
+ export declare const PUBLIC_AVAILABILITY_FRESHNESS_SECONDS = 60;
16
+ export declare const PUBLIC_CONTENT_FRESHNESS_SECONDS = 3600;
17
+ /** The single classification authority for cacheable public reads. */
18
+ export declare const PUBLIC_READ_CACHE_POLICIES: {
19
+ readonly listPublishedEntries: PublicReadCachePolicy;
20
+ readonly getPublishedEntryPreview: PublicReadCachePolicy;
21
+ readonly listPublicEvents: PublicReadCachePolicy;
22
+ readonly listPublicEventCalendarWindow: PublicReadCachePolicy;
23
+ readonly listPublicRecurringSchedule: PublicReadCachePolicy;
24
+ readonly getPublicEventDetails: PublicReadCachePolicy;
25
+ readonly resolveEventSubroute: PublicReadCachePolicy;
26
+ readonly listPublicRouteCandidates: PublicReadCachePolicy;
27
+ readonly listPublicTeamMembers: PublicReadCachePolicy;
28
+ readonly listPublicProducts: PublicReadCachePolicy;
29
+ readonly listPublicPasses: PublicReadCachePolicy;
30
+ readonly listPublicMemberships: PublicReadCachePolicy;
31
+ readonly getPublicFormById: PublicReadCachePolicy;
32
+ readonly getPublicBookingServices: PublicReadCachePolicy;
33
+ readonly getPublicBookingService: PublicReadCachePolicy;
34
+ readonly getPublicBookingResourcesReference: PublicReadCachePolicy;
35
+ readonly getPublicBookingAvailableDates: PublicReadCachePolicy;
36
+ readonly getPublicBookingAvailableSlots: PublicReadCachePolicy;
37
+ readonly getPublicWeeklySlotAvailability: PublicReadCachePolicy;
38
+ readonly listPublicForms: PublicReadCachePolicy;
39
+ readonly checkRedirect: PublicReadCachePolicy;
40
+ readonly getPublicRoutableContent: PublicReadCachePolicy;
41
+ readonly getPublicSitemapRoutes: PublicReadCachePolicy;
42
+ };
43
+ export declare function isPublicReadEndpoint(endpoint: string): endpoint is PublicReadEndpoint;
44
+ export declare function getPublicReadCachePolicy(endpoint: PublicReadEndpoint): PublicReadCachePolicy;
45
+ export declare function publicReadFreshnessSeconds(endpoint: PublicReadEndpoint): number;