riverbankcms 0.24.0 → 0.26.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.
@@ -52,7 +52,7 @@ const unsafeAsPageId = (id) => id;
52
52
  const unsafeAsPageSurfaceId = (id) => id;
53
53
  const unsafeAsEditLeaseToken = (id) => id;
54
54
  const unsafeAsEditorClientId = (id) => id;
55
- const unsafeAsPageDocumentCheckpointId = (id) => id;
55
+ const unsafeAsEditorSessionGeneration = (id) => id;
56
56
  const unsafeAsOccurrenceId = (id) => id;
57
57
  const unsafeAsEventOfferingId = (id) => id;
58
58
  const unsafeAsEventSeriesId = (id) => id;
@@ -167,7 +167,7 @@ const parsePageId = (value) => parseUuidBrand(value, unsafeAsPageId);
167
167
  const parsePageSurfaceId = (value) => parseUuidBrand(value, unsafeAsPageSurfaceId);
168
168
  const parseEditLeaseToken = (value) => parseUuidBrand(value, unsafeAsEditLeaseToken);
169
169
  const parseEditorClientId = (value) => parseUuidBrand(value, unsafeAsEditorClientId);
170
- const parsePageDocumentCheckpointId = (value) => parseUuidBrand(value, unsafeAsPageDocumentCheckpointId);
170
+ const parseEditorSessionGeneration = (value) => parseUuidBrand(value, unsafeAsEditorSessionGeneration);
171
171
  const parseOccurrenceId = (value) => parseUuidBrand(value, unsafeAsOccurrenceId);
172
172
  const parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
173
173
  const parseEventAttendeeTicketLineId = (value) => parseUuidBrand(value, unsafeAsEventAttendeeTicketLineId);
@@ -4094,16 +4094,8 @@ function syncStateOf(sync) {
4094
4094
  const EDIT_LEASE_TTL_SECONDS = 60;
4095
4095
  /** One-use navigation transport for the same previous-client acquire contract. */
4096
4096
  const EDIT_LEASE_HANDOVER_QUERY_PARAM = "edit_lease_handover";
4097
- /** Frozen at editor mount; reacquiring a lease never advances this session's admission stamp. */
4098
- const PAGE_DOCUMENT_SESSION_CHECKPOINT_HEADER = "X-Riverbank-Page-Checkpoint";
4099
- function parsePageDocumentSessionCheckpoint(value) {
4100
- if (value === "legacy") return { kind: "legacy" };
4101
- const parsed = parsePageDocumentCheckpointId(value);
4102
- return parsed.ok ? {
4103
- kind: "document",
4104
- checkpointId: parsed.value
4105
- } : undefined;
4106
- }
4097
+ /** Frozen at editor mount; reacquiring a lease never advances the server-issued generation. */
4098
+ const EDITOR_SESSION_GENERATION_HEADER = "X-Riverbank-Editor-Session-Generation";
4107
4099
  function parseEditLeaseScope(input) {
4108
4100
  switch (input.nodeType) {
4109
4101
  case "page": {
@@ -6537,6 +6529,36 @@ function planMailingListSetupSwitch(input) {
6537
6529
  affectedPlacementCount: input.placementModes.length
6538
6530
  };
6539
6531
  }
6532
+ const preparedSetupWrite = Symbol("prepared-mailing-list-setup-write");
6533
+ /** The current setup and real placement census decide the only permitted write shape. */
6534
+ function prepareMailingListSetupWrite(input, current, placementModes) {
6535
+ const revision = current.tag === "not_configured" ? null : current.revision;
6536
+ if (revision !== input.expectedRevision || current.siteId !== input.siteId) return { kind: "revision-conflict" };
6537
+ const switchPlan = planMailingListSetupSwitch({
6538
+ previousScope: current.tag === "configured" ? mailingListProviderScopeFromConfigured(current.provider) : null,
6539
+ nextScope: mailingListProviderScopeFromConfigured(input.provider),
6540
+ placementModes,
6541
+ defaultChanged: current.tag !== "configured" || !sameMailingListProviderDefault(current.provider, input.provider)
6542
+ });
6543
+ const plan = {
6544
+ ...input,
6545
+ expectedRevision: revision ?? 0,
6546
+ kind: switchPlan.tag === "replace_scope" ? "reset" : "update",
6547
+ [preparedSetupWrite]: true
6548
+ };
6549
+ Object.defineProperty(plan, preparedSetupWrite, { enumerable: false });
6550
+ return {
6551
+ kind: "prepared",
6552
+ plan
6553
+ };
6554
+ }
6555
+ function sameMailingListProviderDefault(previous, next) {
6556
+ switch (previous.provider) {
6557
+ case "native": return next.provider === "native" && sameNewsletterAudience(previous.defaultAudience, next.defaultAudience);
6558
+ case "brevo": return next.provider === "brevo" && previous.defaultListId === next.defaultListId;
6559
+ case "mailchimp": return next.provider === "mailchimp" && previous.defaultAudienceId === next.defaultAudienceId;
6560
+ }
6561
+ }
6540
6562
  function mailingListProviderScopeFromConfigured(provider) {
6541
6563
  switch (provider.provider) {
6542
6564
  case "native": return { provider: "native" };
@@ -6877,10 +6899,14 @@ function assessCustomTargeting(catalog, targeting) {
6877
6899
  }
6878
6900
  }
6879
6901
  }
6902
+ /** Shared choice availability decision for both runtime catalogues and captured document facts. */
6903
+ function missingMailingListTargetingChoiceIds(targeting, choices) {
6904
+ const available = new Set(choices.map((choice) => choice.id));
6905
+ return mailingListTargetingChoiceIds(targeting).filter((id) => !available.has(id));
6906
+ }
6880
6907
  function assessMatchedChoices(matched, choices) {
6881
6908
  const selected = new Set(mailingListTargetingChoiceIds(matched.targeting));
6882
- const available = new Set(choices.map((item) => item.id));
6883
- const missingIds = [...selected].filter((id) => !available.has(id));
6909
+ const missingIds = missingMailingListTargetingChoiceIds(matched.targeting, choices);
6884
6910
  const value = {
6885
6911
  mode: "custom",
6886
6912
  ...matched,
@@ -9814,4 +9840,468 @@ function isPlainRecord(value) {
9814
9840
  }
9815
9841
 
9816
9842
  //#endregion
9817
- export { selectCategoryView as $, parseNonNegativeCents as $t, DEFAULT_MAILING_LIST_SUCCESS_MESSAGE as A, unsafeAsEventOfferingId as An, clampConfiguredAmount as At, parseWeeklyOpeningHours as B, unsafeAsProductId as Bn, formatBookingPriceDisplay as Bt, parseManagementKey as C, unsafeAsBookingSessionId as Cn, toUtcIsoDateTimeString as Ct, parseMailingListSignedSourceToken as D, unsafeAsDetectedMimeType as Dn, isSettleableFlexibleBalanceContractStatus as Dt, parseMailingListContentVersionId as E, unsafeAsDemoCapability as En, isLiveOrderInstalmentPlanStatus as Et, DEFAULT_MAILING_LIST_TARGETING as F, unsafeAsOriginalFilename as Fn, splitAmountWithRemainderInFirst as Ft, locationValueSchema as G, unsafeAsStaffMemberId as Gn, publicEventPricingOptions as Gt, decideLocationSave as H, unsafeAsSiteFontId as Hn, isPublicEventPricingOptionDisplayable as Ht, planMailingListChoicePresentation as I, unsafeAsPassId as In, resolveFlexibleBalanceDueAt as It, projectPublicLocation as J, unsafeAsUploadSessionId as Jn, resolvePricingOptionsPriceDisplay as Jt, normalizeLocationAddressText as K, unsafeAsStorageBucketName as Kn, publicEventPricingType as Kt, isCanonicalRichTextDoc as L, unsafeAsPositiveByteCount as Ln, resolveFlexibleBalanceInitialPaymentCents as Lt, parseFooterCompositionV1 as M, unsafeAsFileChecksumSha256 as Mn, getBookingInstalmentPlanIntervalCount as Mt, footerNavigationLayouts as N, unsafeAsMediaAssetId as Nn, getBookingInstalmentProtectedDepositAmountCents as Nt, parseMailingListRuntimeContext as O, unsafeAsEntitlementId as On, isSettleableOrderInstalmentPlanStatus as Ot, parseMailingListPlacementTargeting as P, unsafeAsOccurrenceId as Pn, omitZeroAmountFutureRows as Pt, mapDrawingSchema as Q, isNonNegativeWholeCents as Qt, formatOpeningHoursRows as R, unsafeAsPositiveSeconds as Rn, deriveTotalTicketQuantity as Rt, exposeSecret as S, unsafeAsBookingRequirementId as Sn, toScheduledBookingDateTime as St, parseMailingListBlockId as T, unsafeAsDeclaredMimeType as Tn, validateBookingPaymentOptionKinds as Tt, stableJsonStringify as U, unsafeAsSiteId as Un, publicEventPricingCurrency as Ut, assertAllowedPublicUrl as V, unsafeAsSafeDownloadFilename as Vn, formatEventPricing as Vt, locationMapLinks as W, unsafeAsSiteScopedStoragePath as Wn, publicEventPricingDisplay as Wt, toLocationCoordinates as X, err as Xn, mapNonEmptyArray as Xt, publicLocationSchema as Y, unsafeAsUserId as Yn, fromArray as Yt, isPresent as Z, ok as Zn, mapReadonlyNonEmptyArray as Zt, nextLiveRunSessionStartMs as _, parseRetiredCourseId as _n, parseLocalScheduleTime as _t, areConfiguredBookingVerticalConfigsEqual as a, formatCurrencyAmount as an, formatTimeRange as at, resolveWholeSeriesRunLifecycle as b, parseUserId as bn, resolveBookingTimeZoneId as bt, parseVerticalPresetId as c, formatDurationUnitLabel as cn, buildBookingUtcDateWindow as ct, EVENT_PRESET_VALUES as d, parseDatedOfferingCapacityHoldAuditRef as dn, formatLocalScheduleTime as dt, parsePositiveCents as en, formatDate as et, ORDINARY_EVENT_PRESET_VALUES as f, parseDatedOfferingCapacityHoldId as fn, getBookingLocalDateKey as ft, CANCELLED_SESSION_STATUS as g, parsePageId as gn, parseBookingLocalDate as gt, publicReadFreshnessSeconds as h, parseMembershipId as hn, localScheduleTimePattern as ht, NAVIGATION_LOCATIONS as i, unsafeAsPositiveCents as in, formatTime as it, parseMailingListProviderScope as j, unsafeAsEventSeriesId as jn, getBookingInstalmentDepositRefundability as jt, assessMailingListTargeting as k, unsafeAsEventInstanceId as kn, addIntervalPreservingMonthAnchor as kt, resolveSiteVerticalBookingConfig as l, parseApiKeyId as ln, compareLocalScheduleDates as lt, WHOLE_SERIES_EVENT_PRESET_VALUES as m, parseMediaAssetId as mn, getLocalScheduleTime as mt, resolveEventCatalogue as n, toNonNegativeCents as nn, formatDateTime as nt, canonicalizeConfiguredBookingVerticalConfig as o, parseCurrencyCode as on, inferSiteDateLocale as ot, SURFACE_EVENT_PRESET_VALUES as p, parseEventSeriesId as pn, getLocalScheduleDate as pt, parseLocationValue as q, unsafeAsStoragePath as qn, resolveExactOrFreePriceDisplay as qt, EVENT_PRESET_VOCABULARY as r, unsafeAsNonNegativeCents as rn, formatDateTimeRange as rt, parseVerticalId as s, assertNever as sn, resolveBookingDisplayContext as st, authoredValuesEqual as t, toCents as tn, formatDateRange as tt, DEFAULT_EVENT_TYPE_PRESETS as u, parseCustomerId as un, formatLocalScheduleDate as ut, orderedLiveRunSessions as v, parseSiteId as vn, parseUtcIsoDateTimeString as vt, slugify as w, unsafeAsCheckoutLineId as wn, parseBookingTimeZone as wt, createSecret as x, unsafeAsAppointmentResourceId as xn, toBookingTimeZone as xt, resolveWholeSeriesBookingPhase as y, parseSiteTermsVersionId as yn, resolveBookingBusinessTimeZone as yt, parsePublicContactDetails as z, unsafeAsPricingOptionId as zn, parseEventPageSurfaceSubject as zt };
9843
+ //#region ../core/src/journal-receipt.ts
9844
+ /** Owners pass captured preimages and committed results; callers never fetch a replacement inverse. */
9845
+ function journalCommitReceipt(target, inverse, revisions) {
9846
+ return {
9847
+ ...target,
9848
+ ...inverse,
9849
+ ...revisions
9850
+ };
9851
+ }
9852
+ function journalReplayValue(inverse, direction) {
9853
+ return direction === "undo" ? inverse.before : inverse.after;
9854
+ }
9855
+ /** Composition keeps the first inverse only when every committed link belongs to the same target. */
9856
+ function composeJournalCommitReceipts(receipts, targetKey) {
9857
+ const first = receipts[0], last = receipts[receipts.length - 1];
9858
+ if (first === undefined || last === undefined) return null;
9859
+ const continuous = receipts.every((receipt, index) => {
9860
+ const previous = receipts[index - 1];
9861
+ return previous === undefined || targetKey(previous) === targetKey(receipt) && previous.revision === receipt.expectedRevision && authoredValuesEqual(previous.after, receipt.before);
9862
+ });
9863
+ return continuous ? journalCommitReceipt(last, {
9864
+ before: first.before,
9865
+ after: last.after
9866
+ }, {
9867
+ expectedRevision: first.expectedRevision,
9868
+ revision: last.revision
9869
+ }) : null;
9870
+ }
9871
+
9872
+ //#endregion
9873
+ //#region ../core/src/committed-write-proof.ts
9874
+ /** Positive atomic storage evidence survives a failed response projection. */
9875
+ const committedWriteProofSchema = z.object({
9876
+ operationId: z.string().uuid(),
9877
+ committedAt: z.string(),
9878
+ resultingRevision: z.number().int().nonnegative()
9879
+ });
9880
+
9881
+ //#endregion
9882
+ //#region ../core/src/site-deployment-mode.ts
9883
+ /** Only Riverbank-owned themes supply persisted styling facts. */
9884
+ function usesPersistedRiverbankTheme(mode) {
9885
+ return mode !== "headless_full";
9886
+ }
9887
+
9888
+ //#endregion
9889
+ //#region ../core/src/email-vocabulary.ts
9890
+ /** Shared email identities. No renderer, dashboard or private email-package dependency. */
9891
+ const EMAIL_DEFINITIONS = {
9892
+ event_confirmation: {
9893
+ wording: "editable",
9894
+ perEvent: true,
9895
+ templateStorage: true
9896
+ },
9897
+ event_reminder: {
9898
+ wording: "editable",
9899
+ perEvent: true,
9900
+ templateStorage: true
9901
+ },
9902
+ event_feedback_request: {
9903
+ wording: "editable",
9904
+ perEvent: false,
9905
+ templateStorage: true
9906
+ },
9907
+ event_cancellation_customer: {
9908
+ wording: "editable",
9909
+ perEvent: false,
9910
+ templateStorage: true
9911
+ },
9912
+ event_cancellation_admin: {
9913
+ wording: "editable",
9914
+ perEvent: false,
9915
+ templateStorage: true
9916
+ },
9917
+ event_refund_customer: {
9918
+ wording: "editable",
9919
+ perEvent: false,
9920
+ templateStorage: true
9921
+ },
9922
+ event_refund_admin: {
9923
+ wording: "editable",
9924
+ perEvent: false,
9925
+ templateStorage: true
9926
+ },
9927
+ event_transfer_customer: {
9928
+ wording: "editable",
9929
+ perEvent: false,
9930
+ templateStorage: true
9931
+ },
9932
+ event_transfer_admin: {
9933
+ wording: "editable",
9934
+ perEvent: false,
9935
+ templateStorage: true
9936
+ },
9937
+ event_booking_rescheduled_customer: {
9938
+ wording: "editable",
9939
+ perEvent: false,
9940
+ templateStorage: true
9941
+ },
9942
+ event_booking_moved_admin: {
9943
+ wording: "editable",
9944
+ perEvent: false,
9945
+ templateStorage: true
9946
+ },
9947
+ pass_purchase_confirmation: {
9948
+ wording: "editable",
9949
+ perEvent: false,
9950
+ templateStorage: true
9951
+ },
9952
+ membership_purchase_confirmation: {
9953
+ wording: "editable",
9954
+ perEvent: false,
9955
+ templateStorage: true
9956
+ },
9957
+ membership_cancel_at_period_end: {
9958
+ wording: "editable",
9959
+ perEvent: false,
9960
+ templateStorage: true
9961
+ },
9962
+ membership_payment_refund: {
9963
+ wording: "editable",
9964
+ perEvent: false,
9965
+ templateStorage: true
9966
+ },
9967
+ appointment_confirmation: {
9968
+ wording: "editable",
9969
+ perEvent: false,
9970
+ templateStorage: true
9971
+ },
9972
+ appointment_reminder: {
9973
+ wording: "editable",
9974
+ perEvent: false,
9975
+ templateStorage: true
9976
+ },
9977
+ appointment_follow_up: {
9978
+ wording: "editable",
9979
+ perEvent: false,
9980
+ templateStorage: true
9981
+ },
9982
+ site_credit_adjustment: {
9983
+ wording: "editable",
9984
+ perEvent: false,
9985
+ templateStorage: true
9986
+ },
9987
+ site_credit_refund_conversion: {
9988
+ wording: "editable",
9989
+ perEvent: false,
9990
+ templateStorage: true
9991
+ },
9992
+ order_refund: {
9993
+ wording: "editable",
9994
+ perEvent: false,
9995
+ templateStorage: true
9996
+ },
9997
+ pass_refund: {
9998
+ wording: "editable",
9999
+ perEvent: false,
10000
+ templateStorage: true
10001
+ },
10002
+ event_series_registration_confirmation: {
10003
+ wording: "editable",
10004
+ perEvent: false,
10005
+ templateStorage: true
10006
+ },
10007
+ event_series_registration_cancellation_customer: {
10008
+ wording: "editable",
10009
+ perEvent: false,
10010
+ templateStorage: true
10011
+ },
10012
+ event_series_registration_cancellation_admin: {
10013
+ wording: "editable",
10014
+ perEvent: false,
10015
+ templateStorage: true
10016
+ },
10017
+ event_series_registration_refund_customer: {
10018
+ wording: "editable",
10019
+ perEvent: false,
10020
+ templateStorage: true
10021
+ },
10022
+ event_series_registration_refund_admin: {
10023
+ wording: "editable",
10024
+ perEvent: false,
10025
+ templateStorage: true
10026
+ },
10027
+ event_update: {
10028
+ wording: "editable",
10029
+ perEvent: false,
10030
+ templateStorage: true
10031
+ },
10032
+ event_cancelled_by_organizer: {
10033
+ wording: "editable",
10034
+ perEvent: true,
10035
+ templateStorage: true
10036
+ },
10037
+ digital_product_fulfillment: {
10038
+ wording: "editable",
10039
+ perEvent: false,
10040
+ templateStorage: true
10041
+ },
10042
+ order_confirmation: {
10043
+ wording: "editable",
10044
+ perEvent: false,
10045
+ templateStorage: true
10046
+ },
10047
+ order_shipment: {
10048
+ wording: "editable",
10049
+ perEvent: false,
10050
+ templateStorage: true
10051
+ },
10052
+ order_cancellation: {
10053
+ wording: "editable",
10054
+ perEvent: false,
10055
+ templateStorage: true
10056
+ },
10057
+ order_payment_reminder_customer: {
10058
+ wording: "editable",
10059
+ perEvent: false,
10060
+ templateStorage: true
10061
+ },
10062
+ order_balance_due_customer: {
10063
+ wording: "editable",
10064
+ perEvent: false,
10065
+ templateStorage: true
10066
+ },
10067
+ order_balance_overdue_customer: {
10068
+ wording: "editable",
10069
+ perEvent: false,
10070
+ templateStorage: true
10071
+ },
10072
+ order_balance_overdue_admin: {
10073
+ wording: "fixed",
10074
+ perEvent: false,
10075
+ templateStorage: true
10076
+ },
10077
+ form_submitter_auto_reply: {
10078
+ wording: "editable",
10079
+ perEvent: false,
10080
+ templateStorage: true
10081
+ },
10082
+ appointment_request_received: {
10083
+ wording: "editable",
10084
+ perEvent: false,
10085
+ templateStorage: true
10086
+ },
10087
+ appointment_request_declined: {
10088
+ wording: "editable",
10089
+ perEvent: false,
10090
+ templateStorage: true
10091
+ },
10092
+ booking_questions_reminder: {
10093
+ wording: "editable",
10094
+ perEvent: false,
10095
+ templateStorage: true
10096
+ },
10097
+ bundle_booking_confirmation: {
10098
+ wording: "shared",
10099
+ sharesWordingWith: "event_confirmation",
10100
+ perEvent: false,
10101
+ templateStorage: true
10102
+ },
10103
+ appointment_rescheduled_customer: {
10104
+ wording: "editable",
10105
+ perEvent: false,
10106
+ templateStorage: true
10107
+ },
10108
+ appointment_rescheduled_team: {
10109
+ wording: "fixed",
10110
+ perEvent: false,
10111
+ templateStorage: false
10112
+ },
10113
+ event_venue_changed: {
10114
+ wording: "editable",
10115
+ perEvent: false,
10116
+ templateStorage: true
10117
+ },
10118
+ course_session_added: {
10119
+ wording: "editable",
10120
+ perEvent: false,
10121
+ templateStorage: true
10122
+ },
10123
+ appointment_cancellation: {
10124
+ wording: "editable",
10125
+ perEvent: false,
10126
+ templateStorage: true
10127
+ },
10128
+ course_session_dropped: {
10129
+ wording: "editable",
10130
+ perEvent: false,
10131
+ templateStorage: true
10132
+ },
10133
+ event_series_waitlist_joined: {
10134
+ wording: "editable",
10135
+ perEvent: false,
10136
+ templateStorage: true
10137
+ },
10138
+ event_waitlist_join_confirmation: {
10139
+ wording: "editable",
10140
+ perEvent: false,
10141
+ templateStorage: true
10142
+ },
10143
+ waitlist_claim: {
10144
+ wording: "editable",
10145
+ perEvent: false,
10146
+ templateStorage: true
10147
+ },
10148
+ gift_card_delivery: {
10149
+ wording: "editable",
10150
+ perEvent: false,
10151
+ templateStorage: true
10152
+ },
10153
+ voucher_delivery: {
10154
+ wording: "editable",
10155
+ perEvent: false,
10156
+ templateStorage: true
10157
+ },
10158
+ event_team_new_booking: {
10159
+ wording: "fixed",
10160
+ perEvent: false,
10161
+ templateStorage: false
10162
+ },
10163
+ event_team_cancellation: {
10164
+ wording: "fixed",
10165
+ perEvent: false,
10166
+ templateStorage: false
10167
+ },
10168
+ event_team_transfer: {
10169
+ wording: "fixed",
10170
+ perEvent: false,
10171
+ templateStorage: false
10172
+ },
10173
+ course_team_new_booking: {
10174
+ wording: "fixed",
10175
+ perEvent: false,
10176
+ templateStorage: false
10177
+ },
10178
+ course_team_cancellation: {
10179
+ wording: "fixed",
10180
+ perEvent: false,
10181
+ templateStorage: false
10182
+ },
10183
+ appointment_team_new_booking: {
10184
+ wording: "fixed",
10185
+ perEvent: false,
10186
+ templateStorage: false
10187
+ },
10188
+ appointment_team_new_request: {
10189
+ wording: "fixed",
10190
+ perEvent: false,
10191
+ templateStorage: false
10192
+ },
10193
+ appointment_team_cancellation: {
10194
+ wording: "fixed",
10195
+ perEvent: false,
10196
+ templateStorage: false
10197
+ },
10198
+ appointment_team_staff_change: {
10199
+ wording: "fixed",
10200
+ perEvent: false,
10201
+ templateStorage: false
10202
+ },
10203
+ appointment_staff_daily_digest: {
10204
+ wording: "fixed",
10205
+ perEvent: false,
10206
+ templateStorage: false
10207
+ },
10208
+ form_owner_notification: {
10209
+ wording: "fixed",
10210
+ perEvent: false,
10211
+ templateStorage: false
10212
+ },
10213
+ support_ticket_notification: {
10214
+ wording: "fixed",
10215
+ perEvent: false,
10216
+ templateStorage: false
10217
+ },
10218
+ support_ticket_customer_reply: {
10219
+ wording: "fixed",
10220
+ perEvent: false,
10221
+ templateStorage: false
10222
+ },
10223
+ support_ticket_reply: {
10224
+ wording: "fixed",
10225
+ perEvent: false,
10226
+ templateStorage: false
10227
+ },
10228
+ auth_confirmation: {
10229
+ wording: "fixed",
10230
+ perEvent: false,
10231
+ templateStorage: false
10232
+ },
10233
+ password_reset: {
10234
+ wording: "fixed",
10235
+ perEvent: false,
10236
+ templateStorage: false
10237
+ },
10238
+ portal_magic_link: {
10239
+ wording: "fixed",
10240
+ perEvent: false,
10241
+ templateStorage: true
10242
+ },
10243
+ site_invitation: {
10244
+ wording: "fixed",
10245
+ perEvent: false,
10246
+ templateStorage: false
10247
+ },
10248
+ demo_claim_preparation_failed: {
10249
+ wording: "fixed",
10250
+ perEvent: false,
10251
+ templateStorage: false
10252
+ },
10253
+ billing_payment_issue: {
10254
+ wording: "fixed",
10255
+ perEvent: false,
10256
+ templateStorage: false
10257
+ },
10258
+ order_instalment_payment_failed: {
10259
+ wording: "fixed",
10260
+ perEvent: false,
10261
+ templateStorage: true
10262
+ },
10263
+ macadamia_contact_inquiry: {
10264
+ wording: "fixed",
10265
+ perEvent: false,
10266
+ templateStorage: false
10267
+ },
10268
+ newsletter_confirmation: {
10269
+ wording: "fixed",
10270
+ perEvent: false,
10271
+ templateStorage: true
10272
+ },
10273
+ newsletter_campaign_test_send: {
10274
+ wording: "written_each_time",
10275
+ perEvent: false,
10276
+ templateStorage: false
10277
+ },
10278
+ newsletter_campaign_delivery: {
10279
+ wording: "written_each_time",
10280
+ perEvent: false,
10281
+ templateStorage: false
10282
+ },
10283
+ site_email_template_test_send: {
10284
+ wording: "written_each_time",
10285
+ perEvent: false,
10286
+ templateStorage: false
10287
+ },
10288
+ participant_message: {
10289
+ wording: "written_each_time",
10290
+ perEvent: false,
10291
+ templateStorage: false
10292
+ }
10293
+ };
10294
+ const EMAIL_KEYS = Object.keys(EMAIL_DEFINITIONS);
10295
+ const EMAIL_TEMPLATE_TYPES = EMAIL_KEYS.filter((key) => EMAIL_DEFINITIONS[key].wording === "editable");
10296
+ const EVENT_EMAIL_TEMPLATE_TYPES = EMAIL_TEMPLATE_TYPES.filter((key) => EMAIL_DEFINITIONS[key].perEvent);
10297
+ /** Includes upcoming wording conversions; storage admission doesn't expose an editor. */
10298
+ const EMAIL_TEMPLATE_STORAGE_KEYS = EMAIL_KEYS.filter((key) => EMAIL_DEFINITIONS[key].templateStorage);
10299
+ function isEmailKey(value) {
10300
+ return Object.prototype.hasOwnProperty.call(EMAIL_DEFINITIONS, value);
10301
+ }
10302
+ function isEventEmailTemplateType(value) {
10303
+ return EVENT_EMAIL_TEMPLATE_TYPES.some((key) => key === value);
10304
+ }
10305
+
10306
+ //#endregion
10307
+ export { mapDrawingSchema as $, ok as $n, isNonNegativeWholeCents as $t, assessMailingListTargeting as A, unsafeAsEntitlementId as An, addIntervalPreservingMonthAnchor as At, parsePublicContactDetails as B, unsafeAsPositiveSeconds as Bn, parseEventPageSurfaceSubject as Bt, exposeSecret as C, unsafeAsAppointmentResourceId as Cn, toScheduledBookingDateTime as Ct, parseMailingListContentVersionId as D, unsafeAsDeclaredMimeType as Dn, isLiveOrderInstalmentPlanStatus as Dt, parseMailingListBlockId as E, unsafeAsCheckoutLineId as En, validateBookingPaymentOptionKinds as Et, parseMailingListPlacementTargeting as F, unsafeAsMediaAssetId as Fn, omitZeroAmountFutureRows as Ft, locationMapLinks as G, unsafeAsSiteId as Gn, publicEventPricingDisplay as Gt, assertAllowedPublicUrl as H, unsafeAsProductId as Hn, formatEventPricing as Ht, DEFAULT_MAILING_LIST_TARGETING as I, unsafeAsOccurrenceId as In, splitAmountWithRemainderInFirst as It, parseLocationValue as J, unsafeAsStorageBucketName as Jn, resolveExactOrFreePriceDisplay as Jt, locationValueSchema as K, unsafeAsSiteScopedStoragePath as Kn, publicEventPricingOptions as Kt, planMailingListChoicePresentation as L, unsafeAsOriginalFilename as Ln, resolveFlexibleBalanceDueAt as Lt, parseMailingListProviderScope as M, unsafeAsEventOfferingId as Mn, getBookingInstalmentDepositRefundability as Mt, parseFooterCompositionV1 as N, unsafeAsEventSeriesId as Nn, getBookingInstalmentPlanIntervalCount as Nt, parseMailingListSignedSourceToken as O, unsafeAsDemoCapability as On, isSettleableFlexibleBalanceContractStatus as Ot, footerNavigationLayouts as P, unsafeAsFileChecksumSha256 as Pn, getBookingInstalmentProtectedDepositAmountCents as Pt, isPresent as Q, err as Qn, mapReadonlyNonEmptyArray as Qt, isCanonicalRichTextDoc as R, unsafeAsPassId as Rn, resolveFlexibleBalanceInitialPaymentCents as Rt, createSecret as S, parseUserId as Sn, toBookingTimeZone as St, slugify as T, unsafeAsBookingSessionId as Tn, parseBookingTimeZone as Tt, decideLocationSave as U, unsafeAsSafeDownloadFilename as Un, isPublicEventPricingOptionDisplayable as Ut, parseWeeklyOpeningHours as V, unsafeAsPricingOptionId as Vn, formatBookingPriceDisplay as Vt, stableJsonStringify as W, unsafeAsSiteFontId as Wn, publicEventPricingCurrency as Wt, publicLocationSchema as X, unsafeAsUploadSessionId as Xn, fromArray as Xt, projectPublicLocation as Y, unsafeAsStoragePath as Yn, resolvePricingOptionsPriceDisplay as Yt, toLocationCoordinates as Z, unsafeAsUserId as Zn, mapNonEmptyArray as Zt, CANCELLED_SESSION_STATUS as _, parseMembershipId as _n, parseBookingLocalDate as _t, NAVIGATION_LOCATIONS as a, unsafeAsPositiveCents as an, formatTime as at, resolveWholeSeriesBookingPhase as b, parseSiteId as bn, resolveBookingBusinessTimeZone as bt, parseVerticalId as c, assertNever as cn, resolveBookingDisplayContext as ct, DEFAULT_EVENT_TYPE_PRESETS as d, parseCustomerId as dn, formatLocalScheduleDate as dt, parseNonNegativeCents as en, selectCategoryView as et, EVENT_PRESET_VALUES as f, parseDatedOfferingCapacityHoldAuditRef as fn, formatLocalScheduleTime as ft, publicReadFreshnessSeconds as g, parseMediaAssetId as gn, localScheduleTimePattern as gt, WHOLE_SERIES_EVENT_PRESET_VALUES as h, parseEventSeriesId as hn, getLocalScheduleTime as ht, EVENT_PRESET_VOCABULARY as i, unsafeAsNonNegativeCents as in, formatDateTimeRange as it, DEFAULT_MAILING_LIST_SUCCESS_MESSAGE as j, unsafeAsEventInstanceId as jn, clampConfiguredAmount as jt, parseMailingListRuntimeContext as k, unsafeAsDetectedMimeType as kn, isSettleableOrderInstalmentPlanStatus as kt, parseVerticalPresetId as l, formatDurationUnitLabel as ln, buildBookingUtcDateWindow as lt, SURFACE_EVENT_PRESET_VALUES as m, parseEditorSessionGeneration as mn, getLocalScheduleDate as mt, authoredValuesEqual as n, toCents as nn, formatDateRange as nt, areConfiguredBookingVerticalConfigsEqual as o, formatCurrencyAmount as on, formatTimeRange as ot, ORDINARY_EVENT_PRESET_VALUES as p, parseDatedOfferingCapacityHoldId as pn, getBookingLocalDateKey as pt, normalizeLocationAddressText as q, unsafeAsStaffMemberId as qn, publicEventPricingType as qt, resolveEventCatalogue as r, toNonNegativeCents as rn, formatDateTime as rt, canonicalizeConfiguredBookingVerticalConfig as s, parseCurrencyCode as sn, inferSiteDateLocale as st, committedWriteProofSchema as t, parsePositiveCents as tn, formatDate as tt, resolveSiteVerticalBookingConfig as u, parseApiKeyId as un, compareLocalScheduleDates as ut, nextLiveRunSessionStartMs as v, parsePageId as vn, parseLocalScheduleTime as vt, parseManagementKey as w, unsafeAsBookingRequirementId as wn, toUtcIsoDateTimeString as wt, resolveWholeSeriesRunLifecycle as x, parseSiteTermsVersionId as xn, resolveBookingTimeZoneId as xt, orderedLiveRunSessions as y, parseRetiredCourseId as yn, parseUtcIsoDateTimeString as yt, formatOpeningHoursRows as z, unsafeAsPositiveByteCount as zn, deriveTotalTicketQuantity as zt };
package/dist/testing.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import "./sdk-event-upsert-DmNSeHgP.mjs";
3
- import "./src-B03aw4Tv.mjs";
4
- import { Bt as preparePushConfigTarget, G as syncLocalMediaForPull, Lt as applyPushConfigPlan, Mn as createOutput, W as syncLocalMediaForPush, at as readEntries, ht as writeMediaManifest, o as executeEntryCommandPlanAsSyncResult, t as compileEntryPushCommands, z as calculateEntryDiffs } from "./entryCommands-C0xbLW5L.mjs";
5
- import "./load-config-h2Ri_tDO.mjs";
2
+ import "./sdk-event-upsert-CH3xwzuX.mjs";
3
+ import "./src-DsR6-gBQ.mjs";
4
+ import { Bt as preparePushConfigTarget, G as syncLocalMediaForPull, Lt as applyPushConfigPlan, W as syncLocalMediaForPush, at as readEntries, ht as writeMediaManifest, kn as createOutput, o as executeEntryCommandPlanAsSyncResult, t as compileEntryPushCommands, z as calculateEntryDiffs } from "./entryCommands-61TwBBCA.mjs";
5
+ import "./load-config-C7Ght4_r.mjs";
6
6
 
7
7
  export { applyPushConfigPlan, calculateEntryDiffs, compileEntryPushCommands, createOutput, executeEntryCommandPlanAsSyncResult, preparePushConfigTarget, readEntries, syncLocalMediaForPull, syncLocalMediaForPush, writeMediaManifest };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "riverbankcms",
3
- "version": "0.24.0",
3
+ "version": "0.26.0",
4
4
  "description": "Riverbank CMS command-line tools for SDK site developers",
5
5
  "bin": {
6
6
  "riverbankcms": "dist/cli/index.mjs"
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import { t as loadConfigFile } from "./load-config-h2Ri_tDO.mjs";
3
-
4
- export { loadConfigFile };