riverbankcms 0.26.0 → 0.27.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.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { $n as slugifyMediaIdentifier, $t as asFooterLookId, A as getSiteCommandMetadata, B as eventBookingOfferIntentSchema, E as parseAndPlanCommandBatchForTypes, J as createCommandRef, O as evaluateSiteCommandBatchExposure, P as entryIdentifierForCommand, Qn as resolveMediaIdentifier, Rr as parseSurfaceTree, T as createDryRunReport, Y as createContentEntryRef, Yn as buildMediaIdentifierFromFilename, _r as asAppearancePresetId, an as buttonStyleSelectionSchema, ar as normalizeAmbiguousStoragePathForSite, at as slugPart, br as asPageFlowPresetId, cr as MAX_MANAGEMENT_MEDIA_UPLOAD_BYTES, dn as footerPreferencesSchema, dt as headerPreferencesSchema, en as footerLookIdValues, in as headerStyleIdValues, k as evaluateSiteCommandExposure, kt as themeSchema, ln as pageDesignBoundaryTreatmentSchema, m as isInternalResolvedLinkValue, n as sdkCourseBookingSettingsSchema, nn as asHeaderStyleId, nr as getExtensionForMimeType, nt as createSiteCommandSiteRef, r as sdkEventOccurrenceInputSchema, rn as headerLayoutIdValues, rr as getMimeType, s as RESOLVED_INTERNAL_LINK_ENTITY_TYPES, sr as FILE_SIZE_LIMITS, tn as asHeaderLayoutId, un as pageDesignIntentSchemaVersion, w as stableStringify, x as resolvePageUpsertSeo, xr as asSiteStyleId, y as eventVisibilitySchema, zn as getDirectImageUrlForSiteScopedPath } from "./sdk-event-upsert-CH3xwzuX.mjs";
3
- import { $n as ok, C as exposeSecret, Cn as unsafeAsAppointmentResourceId, In as unsafeAsOccurrenceId, K as locationValueSchema, Mn as unsafeAsEventOfferingId, N as parseFooterCompositionV1, Nn as unsafeAsEventSeriesId, Qn as err, S as createSecret, _t as parseBookingLocalDate, bn as parseSiteId, c as parseVerticalId, cn as assertNever, d as DEFAULT_EVENT_TYPE_PRESETS, f as EVENT_PRESET_VALUES, g as publicReadFreshnessSeconds, l as parseVerticalPresetId, o as areConfiguredBookingVerticalConfigsEqual, qn as unsafeAsStaffMemberId, r as resolveEventCatalogue, s as canonicalizeConfiguredBookingVerticalConfig, t as committedWriteProofSchema, tt as formatDate, u as resolveSiteVerticalBookingConfig, vn as parsePageId, w as parseManagementKey, xt as resolveBookingTimeZoneId } from "./src-DsR6-gBQ.mjs";
4
- import { n as CliSdkPeerError, t as loadConfigFile } from "./load-config-C7Ght4_r.mjs";
2
+ import { A as evaluateSiteCommandExposure, Cr as asPageFlowPresetId, E as parseAndPlanCommandBatchForTypes, F as entryIdentifierForCommand, Hn as getDirectImageUrlForSiteScopedPath, Qn as buildMediaIdentifierFromFilename, T as createDryRunReport, V as eventBookingOfferIntentSchema, Vr as parseSurfaceTree, X as createContentEntryRef, Y as createCommandRef, an as headerLayoutIdValues, ar as getExtensionForMimeType, br as asAppearancePresetId, cr as normalizeAmbiguousStoragePathForSite, dn as pageDesignBoundaryTreatmentSchema, dr as MAX_MANAGEMENT_MEDIA_UPLOAD_BYTES, fn as pageDesignIntentSchemaVersion, in as asHeaderStyleId, j as getSiteCommandMetadata, jt as themeSchema, k as evaluateSiteCommandBatchExposure, m as isInternalResolvedLinkValue, n as sdkCourseBookingSettingsSchema, nn as footerLookIdValues, nr as slugifyMediaIdentifier, on as headerStyleIdValues, or as getMimeType, ot as slugPart, pn as footerPreferencesSchema, pt as headerPreferencesSchema, r as sdkEventOccurrenceInputSchema, rn as asHeaderLayoutId, rt as createSiteCommandSiteRef, s as RESOLVED_INTERNAL_LINK_ENTITY_TYPES, sn as buttonStyleSelectionSchema, tn as asFooterLookId, tr as resolveMediaIdentifier, ur as FILE_SIZE_LIMITS, w as stableStringify, wr as asSiteStyleId, x as resolvePageUpsertSeo, y as eventVisibilitySchema } from "./sdk-event-upsert-CnvVuQJy.mjs";
3
+ import { $n as err, C as createSecret, Jn as unsafeAsStaffMemberId, Ln as unsafeAsOccurrenceId, Nn as unsafeAsEventOfferingId, P as parseFooterCompositionV1, Pn as unsafeAsEventSeriesId, St as resolveBookingTimeZoneId, T as parseManagementKey, _ as publicReadFreshnessSeconds, c as parseVerticalId, d as DEFAULT_EVENT_TYPE_PRESETS, er as ok, f as EVENT_PRESET_VALUES, g as getPublicReadCachePolicy, l as parseVerticalPresetId, ln as assertNever, nt as formatDate, o as areConfiguredBookingVerticalConfigsEqual, q as locationValueSchema, r as resolveEventCatalogue, s as canonicalizeConfiguredBookingVerticalConfig, t as committedWriteProofSchema, u as resolveSiteVerticalBookingConfig, vt as parseBookingLocalDate, w as exposeSecret, wn as unsafeAsAppointmentResourceId, xn as parseSiteId, yn as parsePageId } from "./src-DqoU7zKs.mjs";
4
+ import { n as CliSdkPeerError, t as loadConfigFile } from "./load-config-DsPKn5yN.mjs";
5
5
  import { Command } from "commander";
6
6
  import { AsyncLocalStorage } from "node:async_hooks";
7
7
  import * as fs$1 from "fs/promises";
@@ -473,19 +473,39 @@ const retentionPolicyRegistry = {
473
473
  },
474
474
  email_audit_metadata: {
475
475
  dataClass: "email_audit_metadata",
476
- policyKind: "documented_manual",
476
+ policyKind: "platform_auto_delete",
477
477
  trigger: "created_at",
478
478
  window: {
479
479
  kind: "relative",
480
480
  unit: "months",
481
481
  value: 12
482
482
  },
483
- action: "retain",
483
+ action: "hard_delete",
484
484
  automation: {
485
- kind: "documented_manual",
486
- deferredReason: "depends_on_secondary_copy_minimization"
485
+ kind: "scheduled",
486
+ jobKind: "email_audit_metadata_cleanup",
487
+ executionModes: ["dry_run", "scheduled"],
488
+ executionSubstrate: "vercel_cron"
487
489
  },
488
- rationale: "Email metadata has some support value but the exact long-lived shape should be implemented alongside secondary-copy minimization work."
490
+ rationale: "Sent email records are kept for twelve months; send jobs and delivery receipts preserve their independent history."
491
+ },
492
+ transactional_email_job_payload: {
493
+ dataClass: "transactional_email_job_payload",
494
+ policyKind: "platform_auto_delete",
495
+ trigger: "delivery_finished_at",
496
+ window: {
497
+ kind: "relative",
498
+ unit: "days",
499
+ value: 90
500
+ },
501
+ action: "hard_delete",
502
+ automation: {
503
+ kind: "scheduled",
504
+ jobKind: "transactional_email_payload_cleanup",
505
+ executionModes: ["dry_run", "scheduled"],
506
+ executionSubstrate: "vercel_cron"
507
+ },
508
+ rationale: "Finished email jobs lose copied content after ninety days once completion work is settled; delivery and replay evidence remain."
489
509
  },
490
510
  dsar_run_metadata: {
491
511
  dataClass: "dsar_run_metadata",
@@ -1452,6 +1472,26 @@ function normalizeSiteCacheId(id) {
1452
1472
  const parsed = parseSiteId(id);
1453
1473
  return parsed.ok ? parsed.value : id;
1454
1474
  }
1475
+ /** Memory caches follow the same public-read policy as HTTP and batch readers. */
1476
+ function buildPublicReadMemoryCacheTags(endpoint, params) {
1477
+ const policy = getPublicReadCachePolicy(endpoint);
1478
+ if (policy.kind === "live") return [];
1479
+ const templates = {
1480
+ published_content: TAG_TEMPLATES.siteRoutableContent,
1481
+ public_team_members: TAG_TEMPLATES.publicTeamMembers,
1482
+ public_products: TAG_TEMPLATES.publicShop,
1483
+ site_forms: TAG_TEMPLATES.siteForms
1484
+ };
1485
+ return buildCacheReadTags([
1486
+ ...policy.tags.map((kind) => templates[kind]),
1487
+ ...endpoint === "checkRedirect" ? [
1488
+ TAG_TEMPLATES.siteRedirects,
1489
+ TAG_TEMPLATES.siteBySlug,
1490
+ TAG_TEMPLATES.siteById
1491
+ ] : [],
1492
+ ...endpoint === "getPublicFormById" ? [TAG_TEMPLATES.formById] : []
1493
+ ], params);
1494
+ }
1455
1495
 
1456
1496
  //#endregion
1457
1497
  //#region ../api/src/sdkEntryReadEndpoints.ts
@@ -5603,6 +5643,29 @@ const ENDPOINT_DEFINITIONS = {
5603
5643
  auth: "user",
5604
5644
  responseKind: "json"
5605
5645
  },
5646
+ previewSiteBrandingOperation: {
5647
+ path: "/sites/{siteId}/settings/general/preview",
5648
+ method: "POST",
5649
+ auth: "user",
5650
+ responseKind: "json",
5651
+ errors: [
5652
+ "validation:invalid_input",
5653
+ "auth:insufficient_permissions",
5654
+ "server:internal_error"
5655
+ ]
5656
+ },
5657
+ confirmSiteBrandingOperation: {
5658
+ path: "/sites/{siteId}/settings/general/confirm",
5659
+ method: "POST",
5660
+ auth: "user",
5661
+ responseKind: "json",
5662
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
5663
+ errors: [
5664
+ "validation:invalid_input",
5665
+ "auth:insufficient_permissions",
5666
+ "server:internal_error"
5667
+ ]
5668
+ },
5606
5669
  getSiteFooterBlocks: {
5607
5670
  path: "/sites/{siteId}/content/footer-blocks",
5608
5671
  method: "GET",
@@ -6683,48 +6746,6 @@ const ENDPOINT_DEFINITIONS = {
6683
6746
  auth: "user",
6684
6747
  responseKind: "json"
6685
6748
  },
6686
- classifyMediaAsset: {
6687
- path: "/media/{assetId}/classify",
6688
- method: "POST",
6689
- tags: ["media", "media-{assetId}"],
6690
- auth: "user",
6691
- responseKind: "json"
6692
- },
6693
- classifyMediaBatch: {
6694
- path: "/media/classify",
6695
- method: "POST",
6696
- tags: ["media"],
6697
- auth: "user",
6698
- responseKind: "json"
6699
- },
6700
- mediaJobsStatus: {
6701
- path: "/media/jobs/status",
6702
- method: "GET",
6703
- tags: ["media"],
6704
- auth: "user",
6705
- responseKind: "json"
6706
- },
6707
- enqueueMediaClassifyJob: {
6708
- path: "/media/jobs",
6709
- method: "POST",
6710
- tags: ["media"],
6711
- auth: "user",
6712
- responseKind: "json"
6713
- },
6714
- runMediaClassifyJob: {
6715
- path: "/media/jobs/run",
6716
- method: "POST",
6717
- tags: ["media"],
6718
- auth: "user",
6719
- responseKind: "json"
6720
- },
6721
- runAllMediaClassifyJobs: {
6722
- path: "/media/jobs/run-all",
6723
- method: "POST",
6724
- tags: ["media"],
6725
- auth: "user",
6726
- responseKind: "json"
6727
- },
6728
6749
  initSiteContent: {
6729
6750
  path: "/sites/{siteId}/content/init",
6730
6751
  method: "POST",
@@ -7615,6 +7636,14 @@ const ENDPOINT_DEFINITIONS = {
7615
7636
  auth: "admin",
7616
7637
  responseKind: "json"
7617
7638
  },
7639
+ adminClearSitePublicCache: {
7640
+ path: "/admin/sites/{siteId}/cache/clear",
7641
+ method: "POST",
7642
+ tags: ["admin", "sites"],
7643
+ auth: "admin",
7644
+ errors: [],
7645
+ responseKind: "json"
7646
+ },
7618
7647
  adminDeleteSite: {
7619
7648
  path: "/admin/sites/{siteId}",
7620
7649
  method: "DELETE",
@@ -10763,7 +10792,6 @@ function authoredThemeJournalValue(input) {
10763
10792
  preferences: input.preferences
10764
10793
  };
10765
10794
  }
10766
- /** Shared request/value wire contract: authored theme bytes exclude compiled chrome. */
10767
10795
  const chromelessBodyThemeSchema = themeSchema.omit({
10768
10796
  header: true,
10769
10797
  footer: true
@@ -10780,22 +10808,24 @@ const themeSaveBodySchema = z.object({
10780
10808
  }).strict().optional(),
10781
10809
  footerLookId: z.enum(footerLookIdValues).transform(asFooterLookId).nullable().optional()
10782
10810
  }).strict();
10783
- const themeJournalValueSchema = z.object({
10811
+ const themeJournalValueShape = {
10784
10812
  snapshot: themeSchema,
10785
10813
  body: themeSaveBodySchema,
10786
10814
  preferences: z.object({
10787
10815
  header: headerPreferencesSchema.nullable(),
10788
10816
  footer: footerPreferencesSchema
10789
10817
  }).strict()
10790
- }).strict();
10791
- const themeJournalEvidenceSchema = z.object({
10818
+ };
10819
+ const themeJournalValueSchema = z.object(themeJournalValueShape).strict();
10820
+ const themeJournalEvidenceShape = {
10792
10821
  siteId: z.string().uuid(),
10793
10822
  selectionId: z.string().uuid(),
10794
10823
  expectedRevision: z.number().int().nonnegative(),
10795
10824
  revision: z.number().int().nonnegative(),
10796
10825
  before: themeJournalValueSchema,
10797
10826
  after: themeJournalValueSchema
10798
- }).strict();
10827
+ };
10828
+ const themeJournalEvidenceSchema = z.object(themeJournalEvidenceShape).strict();
10799
10829
 
10800
10830
  //#endregion
10801
10831
  //#region ../api/src/bookingSettingsSections.ts
@@ -10849,13 +10879,8 @@ const BOOKING_SETTINGS_SECTION_KEYS = {
10849
10879
  * Whether each email is sent, and when. No section owns these: the command
10850
10880
  * behind an email's own screen (`updateEmailSendSetting`) is their only writer,
10851
10881
  * so a section save can neither send them nor overwrite them.
10852
- *
10853
- * `remindersEnabled` is the old shared reminders switch. Nothing writes it any
10854
- * more. It's read only as the fallback for a reminder switch that hasn't been
10855
- * set, until stored settings are backfilled and the key is removed.
10856
10882
  */
10857
10883
  const BOOKING_SETTINGS_EMAIL_SEND_KEYS = [
10858
- "remindersEnabled",
10859
10884
  "eventRemindersEnabled",
10860
10885
  "eventReminderHours",
10861
10886
  "appointmentRemindersEnabled",
@@ -14370,6 +14395,25 @@ function parsePublicProductCategorySelector(value) {
14370
14395
  return undefined;
14371
14396
  }
14372
14397
 
14398
+ //#endregion
14399
+ //#region ../api/src/request-error.ts
14400
+ var ApiRequestError = class extends Error {
14401
+ constructor(message, options) {
14402
+ super(message);
14403
+ this.name = "ApiRequestError";
14404
+ this.endpoint = options.endpoint;
14405
+ this.status = options.status;
14406
+ this.method = options.method;
14407
+ this.auth = options.auth;
14408
+ this.requestId = options.requestId;
14409
+ this.body = options.body;
14410
+ this.cause = options.cause;
14411
+ this.errorCode = options.errorCode;
14412
+ this.tag = options.tag;
14413
+ this.retryAfterMs = options.retryAfterMs;
14414
+ }
14415
+ };
14416
+
14373
14417
  //#endregion
14374
14418
  //#region ../api/src/token.ts
14375
14419
  async function getAuthHeaders(supabase) {
@@ -14885,22 +14929,6 @@ function setSdkVersion(version) {
14885
14929
  function getSdkVersion() {
14886
14930
  return sdkVersion;
14887
14931
  }
14888
- var ApiRequestError = class extends Error {
14889
- constructor(message, options) {
14890
- super(message);
14891
- this.name = "ApiRequestError";
14892
- this.endpoint = options.endpoint;
14893
- this.status = options.status;
14894
- this.method = options.method;
14895
- this.auth = options.auth;
14896
- this.requestId = options.requestId;
14897
- this.body = options.body;
14898
- this.cause = options.cause;
14899
- this.errorCode = options.errorCode;
14900
- this.tag = options.tag;
14901
- this.retryAfterMs = options.retryAfterMs;
14902
- }
14903
- };
14904
14932
  /**
14905
14933
  * Parse the Retry-After header value to milliseconds.
14906
14934
  * The header can be either:
@@ -16605,6 +16633,268 @@ function linkPayloadKindToNavigationUrlType(kind) {
16605
16633
  return LINK_PAYLOAD_NAVIGATION_URL_TYPES[kind];
16606
16634
  }
16607
16635
 
16636
+ //#endregion
16637
+ //#region ../api/src/admin.ts
16638
+ async function startImpersonation(apiClient, body, options) {
16639
+ try {
16640
+ return unwrapResponse(await apiClient({
16641
+ endpoint: "adminStartImpersonation",
16642
+ body,
16643
+ options
16644
+ }));
16645
+ } catch (error) {
16646
+ return normalizeApiError(error, "Failed to start impersonation session");
16647
+ }
16648
+ }
16649
+ async function stopImpersonation(apiClient, body, options) {
16650
+ try {
16651
+ return unwrapResponse(await apiClient({
16652
+ endpoint: "adminStopImpersonation",
16653
+ body,
16654
+ options
16655
+ }));
16656
+ } catch (error) {
16657
+ return normalizeApiError(error, "Failed to stop impersonation session");
16658
+ }
16659
+ }
16660
+ async function assignAdminRole(apiClient, body, options) {
16661
+ try {
16662
+ return unwrapResponse(await apiClient({
16663
+ endpoint: "adminAssignRole",
16664
+ body,
16665
+ options
16666
+ }));
16667
+ } catch (error) {
16668
+ return normalizeApiError(error, "Failed to assign admin role");
16669
+ }
16670
+ }
16671
+ async function revokeAdminRole(apiClient, body, options) {
16672
+ try {
16673
+ return unwrapResponse(await apiClient({
16674
+ endpoint: "adminRevokeRole",
16675
+ body,
16676
+ options
16677
+ }));
16678
+ } catch (error) {
16679
+ return normalizeApiError(error, "Failed to revoke admin role");
16680
+ }
16681
+ }
16682
+ async function adminChangePlan(apiClient, body, options) {
16683
+ try {
16684
+ return unwrapResponse(await apiClient({
16685
+ endpoint: "adminChangePlan",
16686
+ body: {
16687
+ ...body,
16688
+ attemptId: body.attemptId ?? crypto.randomUUID()
16689
+ },
16690
+ options
16691
+ }));
16692
+ } catch (error) {
16693
+ return normalizeApiError(error, "Failed to update billing plan");
16694
+ }
16695
+ }
16696
+ async function listAdminInvites(apiClient, params = {}, options) {
16697
+ try {
16698
+ return unwrapResponse(await apiClient({
16699
+ endpoint: "adminListInvites",
16700
+ params,
16701
+ options
16702
+ }));
16703
+ } catch (error) {
16704
+ return normalizeApiError(error, "Failed to load invites");
16705
+ }
16706
+ }
16707
+ async function createAdminInvite(apiClient, body, options) {
16708
+ try {
16709
+ return unwrapResponse(await apiClient({
16710
+ endpoint: "adminCreateInvite",
16711
+ body,
16712
+ options
16713
+ }));
16714
+ } catch (error) {
16715
+ return normalizeApiError(error, "Failed to create invite");
16716
+ }
16717
+ }
16718
+ async function revokeAdminInvite(apiClient, inviteId, options) {
16719
+ try {
16720
+ return unwrapResponse(await apiClient({
16721
+ endpoint: "adminRevokeInvite",
16722
+ params: { inviteId },
16723
+ options
16724
+ }));
16725
+ } catch (error) {
16726
+ return normalizeApiError(error, "Failed to revoke invite");
16727
+ }
16728
+ }
16729
+ async function createAdminUser(apiClient, body, options) {
16730
+ try {
16731
+ return unwrapResponse(await apiClient({
16732
+ endpoint: "adminCreateUser",
16733
+ body,
16734
+ options
16735
+ }));
16736
+ } catch (error) {
16737
+ return normalizeApiError(error, "Failed to create user");
16738
+ }
16739
+ }
16740
+ async function adminDeleteSite(apiClient, siteId, options) {
16741
+ try {
16742
+ return unwrapResponse(await apiClient({
16743
+ endpoint: "adminDeleteSite",
16744
+ params: { siteId },
16745
+ options
16746
+ }));
16747
+ } catch (error) {
16748
+ return normalizeApiError(error, "Failed to delete site");
16749
+ }
16750
+ }
16751
+ async function adminDeleteUser(apiClient, userId, params = {}, options) {
16752
+ const forceQuery = params.force ? { force: "true" } : {};
16753
+ try {
16754
+ return unwrapResponse(await apiClient({
16755
+ endpoint: "adminDeleteUser",
16756
+ params: {
16757
+ userId,
16758
+ ...forceQuery
16759
+ },
16760
+ options
16761
+ }));
16762
+ } catch (error) {
16763
+ return normalizeApiError(error, "Failed to delete user");
16764
+ }
16765
+ }
16766
+ async function listAllowedDomains(apiClient, params = {}, options) {
16767
+ try {
16768
+ return unwrapResponse(await apiClient({
16769
+ endpoint: "adminListAllowedDomains",
16770
+ params,
16771
+ options
16772
+ }));
16773
+ } catch (error) {
16774
+ return normalizeApiError(error, "Failed to load allowed domains");
16775
+ }
16776
+ }
16777
+ async function addAllowedDomain(apiClient, body, options) {
16778
+ try {
16779
+ return unwrapResponse(await apiClient({
16780
+ endpoint: "adminAddAllowedDomain",
16781
+ body,
16782
+ options
16783
+ }));
16784
+ } catch (error) {
16785
+ return normalizeApiError(error, "Failed to add domain");
16786
+ }
16787
+ }
16788
+ async function deleteAllowedDomain(apiClient, domainId, options) {
16789
+ try {
16790
+ return unwrapResponse(await apiClient({
16791
+ endpoint: "adminDeleteAllowedDomain",
16792
+ params: { domainId },
16793
+ options
16794
+ }));
16795
+ } catch (error) {
16796
+ return normalizeApiError(error, "Failed to remove domain");
16797
+ }
16798
+ }
16799
+ async function listGscPropertiesAdmin(apiClient, options) {
16800
+ try {
16801
+ return unwrapResponse(await apiClient({
16802
+ endpoint: "listGscPropertiesAdmin",
16803
+ options
16804
+ }));
16805
+ } catch (error) {
16806
+ return normalizeApiError(error, "Failed to load GSC properties");
16807
+ }
16808
+ }
16809
+ async function setGscPersistEnabled(apiClient, body, options) {
16810
+ try {
16811
+ return unwrapResponse(await apiClient({
16812
+ endpoint: "adminGscMetaPersist",
16813
+ body,
16814
+ options
16815
+ }));
16816
+ } catch (error) {
16817
+ return normalizeApiError(error, "Failed to update GSC persist toggle");
16818
+ }
16819
+ }
16820
+ async function startGscVerification(apiClient, body, options) {
16821
+ try {
16822
+ return unwrapResponse(await apiClient({
16823
+ endpoint: "adminGscVerifyStart",
16824
+ body,
16825
+ options
16826
+ }));
16827
+ } catch (error) {
16828
+ return normalizeApiError(error, "Failed to start GSC verification");
16829
+ }
16830
+ }
16831
+ async function confirmGscVerification(apiClient, body, options) {
16832
+ try {
16833
+ return unwrapResponse(await apiClient({
16834
+ endpoint: "adminGscVerifyConfirm",
16835
+ body,
16836
+ options
16837
+ }));
16838
+ } catch (error) {
16839
+ return normalizeApiError(error, "Failed to confirm GSC verification");
16840
+ }
16841
+ }
16842
+ async function runGscIngestionForSite(apiClient, body, options) {
16843
+ try {
16844
+ return unwrapResponse(await apiClient({
16845
+ endpoint: "adminSeoIngestRun",
16846
+ body,
16847
+ options
16848
+ }));
16849
+ } catch (error) {
16850
+ return normalizeApiError(error, "Failed to run GSC ingestion");
16851
+ }
16852
+ }
16853
+ async function getPriceOverride(apiClient, params, options) {
16854
+ try {
16855
+ return unwrapResponse(await apiClient({
16856
+ endpoint: "adminGetPriceOverride",
16857
+ params,
16858
+ options
16859
+ }));
16860
+ } catch (error) {
16861
+ return normalizeApiError(error, "Failed to get price override");
16862
+ }
16863
+ }
16864
+ async function upsertPriceOverride(apiClient, body, options) {
16865
+ try {
16866
+ return unwrapResponse(await apiClient({
16867
+ endpoint: "adminUpsertPriceOverride",
16868
+ body,
16869
+ options
16870
+ }));
16871
+ } catch (error) {
16872
+ return normalizeApiError(error, "Failed to set custom price");
16873
+ }
16874
+ }
16875
+ async function deletePriceOverride(apiClient, body, options) {
16876
+ try {
16877
+ return unwrapResponse(await apiClient({
16878
+ endpoint: "adminDeletePriceOverride",
16879
+ body,
16880
+ options
16881
+ }));
16882
+ } catch (error) {
16883
+ return normalizeApiError(error, "Failed to clear custom price");
16884
+ }
16885
+ }
16886
+ async function adminClearSitePublicCache(apiClient, siteId, options) {
16887
+ try {
16888
+ return unwrapResponse(await apiClient({
16889
+ endpoint: "adminClearSitePublicCache",
16890
+ params: { siteId },
16891
+ options
16892
+ }));
16893
+ } catch (error) {
16894
+ return normalizeApiError(error, "The public page cache could not be cleared.");
16895
+ }
16896
+ }
16897
+
16608
16898
  //#endregion
16609
16899
  //#region ../api/src/accessAdmin.ts
16610
16900
  const STAFF_OPERATIONAL_CAPABILITIES = ["appointments", "event_ops"];
@@ -17270,8 +17560,8 @@ const SETTINGS_SURFACE_POLICIES = {
17270
17560
  },
17271
17561
  "settings.emails.sent": {
17272
17562
  surfaceId: "settings.emails.sent",
17273
- navVisibilityPolicy: administratorPolicy,
17274
- pageAccessPolicy: administratorPolicy,
17563
+ navVisibilityPolicy: editorPolicy,
17564
+ pageAccessPolicy: editorPolicy,
17275
17565
  actionIds: []
17276
17566
  },
17277
17567
  "settings.ai.siteProfile": {
@@ -24614,4 +24904,4 @@ function optionalTitle(data) {
24614
24904
  }
24615
24905
 
24616
24906
  //#endregion
24617
- export { normalizeMediaValueToIdentifierOnly as $, createCommandContext as $t, formatDiffDetail as A, getEnvPrefix as An, navigationIdentity as At, buildFieldChanges as B, portablePageDesignSchema as Bn, preparePushConfigTarget as Bt, reportFromOutcomes as C, requireEnvironmentWriteAuthorization as Cn, fileExists$1 as Ct, normalizeRemoteHomepageReference as D, transportSuggestion as Dn, writeJsonFileAtomic as Dt, createEmptySyncResult as E, formatError as En, writeJsonFile$1 as Et, calculatePullDiff as F, createManagementClient as Fn, navigationCommandItemToManagementInput as Ft, syncLocalMediaForPull as G, APPOINTMENT_SERVICE_VISIBILITY_VALUES as Gt, formatFieldPath as H, API_ENDPOINTS as Hn, extractApiErrorMessage as Ht, buildJsonDiff as I, ManagementApiError as In, normalizeNavigationConfigItemForCommand as It, admitBinaryWriteDestination as J, deriveCmsApiUrlFromDashboardUrl as Jt, applyLocalMediaPush as K, ApiRequestError as Kt, hasPageOperations as L, sdkEventScheduleSchema as Ln, applyPushConfigPlan as Lt, hasPendingChanges as M, isLocalConfigured as Mn, convertPulledFooterToLocal as Mt, findChangedFieldsWithValues as N, isRemoteConfigured as Nn, convertPulledNavigationToLocal as Nt, calculateDiff as O, CliExit as On, isMediaValue as Ot, formatHumanDiff as P, loadSdkEnvironment as Pn, convertPulledPagesToLocal as Pt, normalizeMediaIdentifierInput as Q, createClientForEnv as Qt, pageMetadataForUpsert as R, sdkSettingsUpdateSchema as Rn, createPushConfigCommand as Rt, planCliCommandBatchForBindings as S, planEnvironmentWriteAuthorization as Sn, ensureDir$1 as St, executeResidualSettingsSyncPlan as T, ErrorCodes as Tn, readJsonFile as Tt, revalidateLocalMediaPushPlan as U, ApiEnvelopeError as Un, normalizeApiError as Ut, formatFieldChange as V, sdkConfiguredBookingVerticalConfigSchema as Vn, revalidatePushConfigPlan as Vt, syncLocalMediaForPush as W, unwrapResponse as Wn, isRecord$5 as Wt, writeBinaryFileAtomic as X, bindRequestTimeout as Xt, readStableBinaryFile as Y, mapEnvironmentExecutionOutcomesJson as Yt, sha256 as Z, confirmAction as Zt, commandExecutionToReport as _, withErrorHandling as _n, metadataFilePath as _t, executeEntryCommandPlanAsReport as a, getOutputContext as an, readEntries as at, executeCompiledCliCommandPlanAsReport as b, parseEnvironmentSelection as bn, writeMetadataFile as bt, titleFromEntryData as c, managementClientConfigFor as cn, readEventsMeta as ct, unsafeAsCliEntryIdentifier as d, parseJsonData as dn, readNavigationMeta as dt, createGetCommand as en, walkLocalContentMedia as et, unsafeAsCliFormSlug as f, parsePaginationOptions as fn, readPagesMeta as ft, commandCompileFailureToReport as g, withConfirmation as gn, ensureMetadataDir as gt, mutationCounterForEffect as h, withCommandContext as hn, writeMediaManifest as ht, entrySiteCommandTypes as i, formatDateShort as in, findLegacyEntryFiles as it, formatDiffSummary as j, getEnvironmentDebugInfo as jn, navigationIdentityMap as jt, calculateFooterDiff as k, createOutput as kn, duplicateNavigationIdentityMessage as kt, unsafeAsCliBlockIdentifier as l, mapEntryForOutput as ln, readFooterMeta as lt, commandReportToSyncResult as m, runWithInvocation as mn, readVenuesMeta as mt, entryCommandCompileErrorToReport as n, createOutputForCommand as nn, downloadMedia as nt, executeEntryCommandPlanAsSyncResult as o, getOutputOnlyContext as on, readAllMeta as ot, unsafeAsCliPageIdentifier as p, resolveCommandPath as pn, readSettingsMeta as pt, prepareLocalMediaForPush as q, createBearerAPIClient as qt, entryCommandReportToSyncResult as r, currentInvocationEnvelope as rn, extractMediaIdentifiers as rt, syncResultForEntryCommandCompileError as s, handleCommandError as sn, readEventCategoriesMeta as st, compileEntryPushCommands as t, createListCommand as tn, buildStorageUrl as tt, unsafeAsCliContentTypeKey as u, parseJsonArray as un, readFormsMeta as ut, commandReportHasFailures as v, withOutputOnlyErrorHandling as vn, metadataTargetFromEnvironment as vt, mergeManySyncResults as w, withRiverbankEnv as wn, listFiles as wt, formatManagementError as x, planEnvironmentExecution as xn, writeMetadataRecordMap as xt, executeCliCommandPlan as y, executeEnvironmentPlan as yn, readMetadataFile as yt, calculateEntryDiffs as z, linkPayloadSchema as zn, loadPushConfigTarget as zt };
24907
+ export { normalizeMediaValueToIdentifierOnly as $, createCommandContext as $t, formatDiffDetail as A, getEnvPrefix as An, navigationIdentity as At, buildFieldChanges as B, portablePageDesignSchema as Bn, preparePushConfigTarget as Bt, reportFromOutcomes as C, requireEnvironmentWriteAuthorization as Cn, fileExists$1 as Ct, normalizeRemoteHomepageReference as D, transportSuggestion as Dn, writeJsonFileAtomic as Dt, createEmptySyncResult as E, formatError as En, writeJsonFile$1 as Et, calculatePullDiff as F, createManagementClient as Fn, navigationCommandItemToManagementInput as Ft, syncLocalMediaForPull as G, APPOINTMENT_SERVICE_VISIBILITY_VALUES as Gt, formatFieldPath as H, API_ENDPOINTS as Hn, extractApiErrorMessage as Ht, buildJsonDiff as I, ManagementApiError as In, normalizeNavigationConfigItemForCommand as It, admitBinaryWriteDestination as J, ApiRequestError as Jt, applyLocalMediaPush as K, createBearerAPIClient as Kt, hasPageOperations as L, sdkEventScheduleSchema as Ln, applyPushConfigPlan as Lt, hasPendingChanges as M, isLocalConfigured as Mn, convertPulledFooterToLocal as Mt, findChangedFieldsWithValues as N, isRemoteConfigured as Nn, convertPulledNavigationToLocal as Nt, calculateDiff as O, CliExit as On, isMediaValue as Ot, formatHumanDiff as P, loadSdkEnvironment as Pn, convertPulledPagesToLocal as Pt, normalizeMediaIdentifierInput as Q, createClientForEnv as Qt, pageMetadataForUpsert as R, sdkSettingsUpdateSchema as Rn, createPushConfigCommand as Rt, planCliCommandBatchForBindings as S, planEnvironmentWriteAuthorization as Sn, ensureDir$1 as St, executeResidualSettingsSyncPlan as T, ErrorCodes as Tn, readJsonFile as Tt, revalidateLocalMediaPushPlan as U, ApiEnvelopeError as Un, normalizeApiError as Ut, formatFieldChange as V, sdkConfiguredBookingVerticalConfigSchema as Vn, revalidatePushConfigPlan as Vt, syncLocalMediaForPush as W, unwrapResponse as Wn, isRecord$5 as Wt, writeBinaryFileAtomic as X, bindRequestTimeout as Xt, readStableBinaryFile as Y, mapEnvironmentExecutionOutcomesJson as Yt, sha256 as Z, confirmAction as Zt, commandExecutionToReport as _, withErrorHandling as _n, metadataFilePath as _t, executeEntryCommandPlanAsReport as a, getOutputContext as an, readEntries as at, executeCompiledCliCommandPlanAsReport as b, parseEnvironmentSelection as bn, writeMetadataFile as bt, titleFromEntryData as c, managementClientConfigFor as cn, readEventsMeta as ct, unsafeAsCliEntryIdentifier as d, parseJsonData as dn, readNavigationMeta as dt, createGetCommand as en, walkLocalContentMedia as et, unsafeAsCliFormSlug as f, parsePaginationOptions as fn, readPagesMeta as ft, commandCompileFailureToReport as g, withConfirmation as gn, ensureMetadataDir as gt, mutationCounterForEffect as h, withCommandContext as hn, writeMediaManifest as ht, entrySiteCommandTypes as i, formatDateShort as in, findLegacyEntryFiles as it, formatDiffSummary as j, getEnvironmentDebugInfo as jn, navigationIdentityMap as jt, calculateFooterDiff as k, createOutput as kn, duplicateNavigationIdentityMessage as kt, unsafeAsCliBlockIdentifier as l, mapEntryForOutput as ln, readFooterMeta as lt, commandReportToSyncResult as m, runWithInvocation as mn, readVenuesMeta as mt, entryCommandCompileErrorToReport as n, createOutputForCommand as nn, downloadMedia as nt, executeEntryCommandPlanAsSyncResult as o, getOutputOnlyContext as on, readAllMeta as ot, unsafeAsCliPageIdentifier as p, resolveCommandPath as pn, readSettingsMeta as pt, prepareLocalMediaForPush as q, deriveCmsApiUrlFromDashboardUrl as qt, entryCommandReportToSyncResult as r, currentInvocationEnvelope as rn, extractMediaIdentifiers as rt, syncResultForEntryCommandCompileError as s, handleCommandError as sn, readEventCategoriesMeta as st, compileEntryPushCommands as t, createListCommand as tn, buildStorageUrl as tt, unsafeAsCliContentTypeKey as u, parseJsonArray as un, readFormsMeta as ut, commandReportHasFailures as v, withOutputOnlyErrorHandling as vn, metadataTargetFromEnvironment as vt, mergeManySyncResults as w, withRiverbankEnv as wn, listFiles as wt, formatManagementError as x, planEnvironmentExecution as xn, writeMetadataRecordMap as xt, executeCliCommandPlan as y, executeEnvironmentPlan as yn, readMetadataFile as yt, calculateEntryDiffs as z, linkPayloadSchema as zn, loadPushConfigTarget as zt };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { _ as normalizeLinkValue, a as classifySdkEventSchedule, g as linkSchema, i as sdkEventUpsertOptionalFieldSchemas, n as sdkCourseBookingSettingsSchema, o as classifySdkEventBookingOffer } from "./sdk-event-upsert-CH3xwzuX.mjs";
3
- import { f as EVENT_PRESET_VALUES } from "./src-DsR6-gBQ.mjs";
2
+ import { _ as normalizeLinkValue, a as classifySdkEventSchedule, g as linkSchema, i as sdkEventUpsertOptionalFieldSchemas, n as sdkCourseBookingSettingsSchema, o as classifySdkEventBookingOffer } from "./sdk-event-upsert-CnvVuQJy.mjs";
3
+ import { f as EVENT_PRESET_VALUES } from "./src-DqoU7zKs.mjs";
4
4
  import { z } from "zod";
5
5
 
6
6
  //#region ../blocks/src/lib/typeGuards.ts
@@ -4817,6 +4817,7 @@ const eventRunCommonInputSchema = z.object({
4817
4817
  eventRef: z.string().min(1),
4818
4818
  status: sdkEventUpsertOptionalFieldSchemas.status,
4819
4819
  visibility: sdkEventUpsertOptionalFieldSchemas.visibility,
4820
+ waitlistMode: sdkEventUpsertOptionalFieldSchemas.waitlistMode,
4820
4821
  occurrences: sdkEventUpsertOptionalFieldSchemas.occurrences.unwrap(),
4821
4822
  schedule: eventScheduleInputSchema.optional(),
4822
4823
  attendeeMigration: sdkEventUpsertOptionalFieldSchemas.attendeeMigration,
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { t as loadConfigFile } from "./load-config-DsPKn5yN.mjs";
3
+
4
+ export { loadConfigFile };
@@ -7,7 +7,7 @@ import { existsSync as existsSync$1 } from "fs";
7
7
  import { fileURLToPath } from "url";
8
8
 
9
9
  //#region package.json
10
- var version = "0.26.0";
10
+ var version = "0.27.0";
11
11
  var peerDependencies = { "@riverbankcms/sdk": ">=0.157.0 <1.0.0" };
12
12
  var package_default = {
13
13
  name: "riverbankcms",
@@ -83,7 +83,7 @@ var package_default = {
83
83
  //#endregion
84
84
  //#region src/version.ts
85
85
  /** The package manifest is the source-run fallback; builds inject this value. */
86
- const CLI_VERSION = typeof "0.26.0" === "string" ? "0.26.0" : version;
86
+ const CLI_VERSION = typeof "0.27.0" === "string" ? "0.27.0" : version;
87
87
  /**
88
88
  * The CLI's SDK peer range is bundled from the CLI manifest alongside its
89
89
  * version. Runtime config loading uses this value as the single compatibility
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { $n as ok, Qn as err, bn as parseSiteId } from "./src-DsR6-gBQ.mjs";
2
+ import { $n as err, er as ok, xn as parseSiteId } from "./src-DqoU7zKs.mjs";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { dirname, isAbsolute, join, parse, relative, resolve, sep } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import "../src-DsR6-gBQ.mjs";
3
- import { a as prepareScaffoldExecution, d as loadGeneratedPackageRanges, i as preflightScaffoldTargets, l as deriveGeneratedPackageRanges, o as writeScaffoldFiles, r as preflightScaffoldPlan, s as deriveScaffoldLocalManifest, t as deriveScaffoldPlan, u as findPackageManifestPath } from "../plan-DB3FQqwH.mjs";
2
+ import "../src-DqoU7zKs.mjs";
3
+ import { a as prepareScaffoldExecution, d as loadGeneratedPackageRanges, i as preflightScaffoldTargets, l as deriveGeneratedPackageRanges, o as writeScaffoldFiles, r as preflightScaffoldPlan, s as deriveScaffoldLocalManifest, t as deriveScaffoldPlan, u as findPackageManifestPath } from "../plan-oltx4aO0.mjs";
4
4
 
5
5
  export { deriveGeneratedPackageRanges, deriveScaffoldLocalManifest, deriveScaffoldPlan, findPackageManifestPath, loadGeneratedPackageRanges, preflightScaffoldPlan, preflightScaffoldTargets, prepareScaffoldExecution, writeScaffoldFiles };