riverbankcms 0.26.0 → 0.28.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, E as parseAndPlanCommandBatchForTypes, F as entryIdentifierForCommand, It as themeSchema, K as bookingQuestionAttachmentSchema, Mr as asPageFlowPresetId, Nr as asSiteStyleId, T as createDryRunReport, V as eventBookingOfferIntentSchema, X as createCommandRef, Xr as parseSurfaceTree, Z as createContentEntryRef, Zn as getDirectImageUrlForSiteScopedPath, _n as pageDesignIntentSchemaVersion, _r as normalizeAmbiguousStoragePathForSite, br as MAX_MANAGEMENT_MEDIA_UPLOAD_BYTES, cn as asHeaderLayoutId, ct as require_dist, dn as headerStyleIdValues, dr as slugifyMediaIdentifier, fn as buttonStyleSelectionSchema, gn as pageDesignBoundaryTreatmentSchema, gt as headerPreferencesSchema, hr as getMimeType, it as createSiteCommandSiteRef, j as getSiteCommandMetadata, k as evaluateSiteCommandBatchExposure, kr as asAppearancePresetId, ln as asHeaderStyleId, m as isInternalResolvedLinkValue, mr as getExtensionForMimeType, n as sdkCourseBookingSettingsSchema, on as asFooterLookId, r as sdkEventOccurrenceInputSchema, s as RESOLVED_INTERNAL_LINK_ENTITY_TYPES, sn as footerLookIdValues, sr as buildMediaIdentifierFromFilename, st as slugPart, un as headerLayoutIdValues, ur as resolveMediaIdentifier, vn as footerPreferencesSchema, w as stableStringify, x as resolvePageUpsertSeo, y as eventVisibilitySchema, yr as FILE_SIZE_LIMITS } from "./sdk-event-upsert-BrJvTQ-D.mjs";
3
+ import { C as createSecret, Cn as parsePageId, Et as resolveBookingTimeZoneId, L as parseFooterCompositionV1, Ln as unsafeAsEventOfferingId, On as unsafeAsAppointmentResourceId, Qn as unsafeAsStaffMemberId, Rn as unsafeAsEventSeriesId, St as parseBookingLocalDate, T as parseManagementKey, Tn as parseSiteId, Vn as unsafeAsOccurrenceId, Z as locationValueSchema, _ as publicReadFreshnessSeconds, c as parseVerticalId, d as DEFAULT_EVENT_TYPE_PRESETS, f as EVENT_PRESET_VALUES, g as getPublicReadCachePolicy, ir as ok, l as parseVerticalPresetId, o as areConfiguredBookingVerticalConfigsEqual, ot as formatDate, pn as assertNever, r as resolveEventCatalogue, rr as err, s as canonicalizeConfiguredBookingVerticalConfig, t as committedWriteProofSchema, u as resolveSiteVerticalBookingConfig, w as exposeSecret } from "./src-D9-RAM-l.mjs";
4
+ import { n as CliSdkPeerError, t as loadConfigFile } from "./load-config-9DBnYiBm.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",
@@ -914,6 +934,13 @@ function pageCommitReasonFromTag(tag) {
914
934
  //#endregion
915
935
  //#region ../api/src/pageJournalEndpoints.ts
916
936
  const PAGE_JOURNAL_ENDPOINT_DEFINITIONS = {
937
+ getPagePublishReadinessFacts: {
938
+ path: "/sites/{siteId}/pages/readiness-facts",
939
+ method: "POST",
940
+ auth: "user",
941
+ responseKind: "json",
942
+ errors: ["validation:invalid_input", "server:internal_error"]
943
+ },
917
944
  replayThemeJournalChange: {
918
945
  path: "/sites/{siteId}/theme/journal",
919
946
  method: "POST",
@@ -1452,6 +1479,26 @@ function normalizeSiteCacheId(id) {
1452
1479
  const parsed = parseSiteId(id);
1453
1480
  return parsed.ok ? parsed.value : id;
1454
1481
  }
1482
+ /** Memory caches follow the same public-read policy as HTTP and batch readers. */
1483
+ function buildPublicReadMemoryCacheTags(endpoint, params) {
1484
+ const policy = getPublicReadCachePolicy(endpoint);
1485
+ if (policy.kind === "live") return [];
1486
+ const templates = {
1487
+ published_content: TAG_TEMPLATES.siteRoutableContent,
1488
+ public_team_members: TAG_TEMPLATES.publicTeamMembers,
1489
+ public_products: TAG_TEMPLATES.publicShop,
1490
+ site_forms: TAG_TEMPLATES.siteForms
1491
+ };
1492
+ return buildCacheReadTags([
1493
+ ...policy.tags.map((kind) => templates[kind]),
1494
+ ...endpoint === "checkRedirect" ? [
1495
+ TAG_TEMPLATES.siteRedirects,
1496
+ TAG_TEMPLATES.siteBySlug,
1497
+ TAG_TEMPLATES.siteById
1498
+ ] : [],
1499
+ ...endpoint === "getPublicFormById" ? [TAG_TEMPLATES.formById] : []
1500
+ ], params);
1501
+ }
1455
1502
 
1456
1503
  //#endregion
1457
1504
  //#region ../api/src/sdkEntryReadEndpoints.ts
@@ -3057,6 +3104,7 @@ const SDK_APPOINTMENT_SERVICE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3057
3104
  errors: [
3058
3105
  "validation:invalid_input",
3059
3106
  "resource:not_found",
3107
+ "resource:conflict",
3060
3108
  "server:internal_error"
3061
3109
  ]
3062
3110
  },
@@ -3075,6 +3123,7 @@ const SDK_APPOINTMENT_SERVICE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3075
3123
  errors: [
3076
3124
  "validation:invalid_input",
3077
3125
  "resource:not_found",
3126
+ "resource:conflict",
3078
3127
  "server:internal_error"
3079
3128
  ]
3080
3129
  }
@@ -5281,6 +5330,7 @@ const ENDPOINT_DEFINITIONS = {
5281
5330
  responseKind: "json"
5282
5331
  },
5283
5332
  createContentEntry: {
5333
+ editLease: "unleased-editor",
5284
5334
  path: "/sites/{siteId}/content/{type}",
5285
5335
  method: "POST",
5286
5336
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
@@ -5603,6 +5653,29 @@ const ENDPOINT_DEFINITIONS = {
5603
5653
  auth: "user",
5604
5654
  responseKind: "json"
5605
5655
  },
5656
+ previewSiteBrandingOperation: {
5657
+ path: "/sites/{siteId}/settings/general/preview",
5658
+ method: "POST",
5659
+ auth: "user",
5660
+ responseKind: "json",
5661
+ errors: [
5662
+ "validation:invalid_input",
5663
+ "auth:insufficient_permissions",
5664
+ "server:internal_error"
5665
+ ]
5666
+ },
5667
+ confirmSiteBrandingOperation: {
5668
+ path: "/sites/{siteId}/settings/general/confirm",
5669
+ method: "POST",
5670
+ auth: "user",
5671
+ responseKind: "json",
5672
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
5673
+ errors: [
5674
+ "validation:invalid_input",
5675
+ "auth:insufficient_permissions",
5676
+ "server:internal_error"
5677
+ ]
5678
+ },
5606
5679
  getSiteFooterBlocks: {
5607
5680
  path: "/sites/{siteId}/content/footer-blocks",
5608
5681
  method: "GET",
@@ -5625,6 +5698,7 @@ const ENDPOINT_DEFINITIONS = {
5625
5698
  errors: [
5626
5699
  "validation:invalid_input",
5627
5700
  "resource:not_found",
5701
+ "resource:conflict",
5628
5702
  "auth:forbidden",
5629
5703
  "server:internal_error"
5630
5704
  ]
@@ -6683,48 +6757,6 @@ const ENDPOINT_DEFINITIONS = {
6683
6757
  auth: "user",
6684
6758
  responseKind: "json"
6685
6759
  },
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
6760
  initSiteContent: {
6729
6761
  path: "/sites/{siteId}/content/init",
6730
6762
  method: "POST",
@@ -6990,14 +7022,6 @@ const ENDPOINT_DEFINITIONS = {
6990
7022
  auth: "user",
6991
7023
  responseKind: "json"
6992
7024
  },
6993
- getPageDesignEditorState: {
6994
- path: "/sites/{siteId}/pages/{pageId}/design",
6995
- method: "GET",
6996
- tags: [TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById],
6997
- auth: "user",
6998
- responseKind: "json",
6999
- errors: ["resource:not_found", "server:internal_error"]
7000
- },
7001
7025
  savePageDesignState: {
7002
7026
  editLease: "managed",
7003
7027
  path: "/sites/{siteId}/pages/{pageId}/design-state",
@@ -7615,6 +7639,14 @@ const ENDPOINT_DEFINITIONS = {
7615
7639
  auth: "admin",
7616
7640
  responseKind: "json"
7617
7641
  },
7642
+ adminClearSitePublicCache: {
7643
+ path: "/admin/sites/{siteId}/cache/clear",
7644
+ method: "POST",
7645
+ tags: ["admin", "sites"],
7646
+ auth: "admin",
7647
+ errors: [],
7648
+ responseKind: "json"
7649
+ },
7618
7650
  adminDeleteSite: {
7619
7651
  path: "/admin/sites/{siteId}",
7620
7652
  method: "DELETE",
@@ -10433,6 +10465,7 @@ function normalizeSdkThemeWire(theme) {
10433
10465
 
10434
10466
  //#endregion
10435
10467
  //#region ../api/src/sdkPullResponseSchemas.ts
10468
+ var import_dist = require_dist();
10436
10469
  const sdkIdentifierSchema$1 = z.string().min(1);
10437
10470
  const sdkTimestampSchema$2 = z.string().min(1);
10438
10471
  const sdkJsonObjectSchema$1 = z.record(z.string(), z.unknown());
@@ -10548,29 +10581,16 @@ const sdkPullSettingsSchema = sdkSettingsUpdateSchema.extend({
10548
10581
  seoDefaults: sdkSeoDefaultsSchema.nullable(),
10549
10582
  verticalConfig: sdkConfiguredBookingVerticalConfigSchema.optional()
10550
10583
  });
10551
- /** A form's schema as the SDK pulls it; the push route extends it. */
10552
- const sdkPullFormSchema = z.object({
10584
+ /** Existing flat form wire shape; detailed questionnaires retain their canonical sections. */
10585
+ const sdkPullFlatFormSchema = z.object({
10586
+ schemaVersion: z.undefined().optional(),
10553
10587
  version: z.string().optional(),
10554
- fields: z.array(z.object({
10555
- id: sdkIdentifierSchema$1,
10556
- label: z.string(),
10557
- type: z.string(),
10558
- required: z.boolean().optional(),
10559
- placeholder: z.string().optional(),
10560
- helpText: z.string().optional(),
10561
- layout: z.object({ width: z.enum(["full", "half"]).optional() }).optional(),
10562
- options: z.array(z.object({
10563
- value: z.string(),
10564
- label: z.string()
10565
- })).optional(),
10566
- multiple: z.boolean().optional(),
10567
- minLength: z.number().optional(),
10568
- maxLength: z.number().optional(),
10569
- pattern: z.string().optional(),
10570
- min: z.number().optional(),
10571
- max: z.number().optional()
10572
- }))
10588
+ sections: z.never().optional(),
10589
+ fields: z.array(import_dist.formFieldTransportSchema)
10573
10590
  });
10591
+ const sdkPullFormSchema = z.discriminatedUnion("schemaVersion", [sdkPullFlatFormSchema, import_dist.bookingQuestionsDetailedSchemaSchema]);
10592
+ /** The same pulled definition, with nonempty fields required on a flat write. */
10593
+ const sdkFormDefinitionInputSchema = z.discriminatedUnion("schemaVersion", [sdkPullFlatFormSchema.extend({ fields: sdkPullFlatFormSchema.shape.fields.min(1, "Form must have at least one field") }), import_dist.bookingQuestionsDetailedSchemaSchema]);
10574
10594
  const sdkPullFormSchemaWithId = z.object({
10575
10595
  id: sdkIdentifierSchema$1,
10576
10596
  slug: sdkIdentifierSchema$1,
@@ -10654,6 +10674,7 @@ const sdkPullEventRunCommonSchema = z.object({
10654
10674
  bookingOffer: eventBookingOfferIntentSchema,
10655
10675
  venueRef: z.string().nullable(),
10656
10676
  formRef: z.string().nullable(),
10677
+ bookingQuestions: bookingQuestionAttachmentSchema.nullable().optional(),
10657
10678
  settings: sdkJsonObjectSchema$1,
10658
10679
  presentation: z.unknown().optional(),
10659
10680
  tags: z.array(z.string()),
@@ -10756,14 +10777,11 @@ function authoredThemeJournalValue(input) {
10756
10777
  body: {
10757
10778
  ...input.selections,
10758
10779
  theme,
10759
- themeId: input.themeId,
10760
- selectionId: input.selectionId,
10761
10780
  overrides: input.overrides
10762
10781
  },
10763
10782
  preferences: input.preferences
10764
10783
  };
10765
10784
  }
10766
- /** Shared request/value wire contract: authored theme bytes exclude compiled chrome. */
10767
10785
  const chromelessBodyThemeSchema = themeSchema.omit({
10768
10786
  header: true,
10769
10787
  footer: true
@@ -10780,22 +10798,27 @@ const themeSaveBodySchema = z.object({
10780
10798
  }).strict().optional(),
10781
10799
  footerLookId: z.enum(footerLookIdValues).transform(asFooterLookId).nullable().optional()
10782
10800
  }).strict();
10783
- const themeJournalValueSchema = z.object({
10801
+ const themeJournalValueShape = {
10784
10802
  snapshot: themeSchema,
10785
- body: themeSaveBodySchema,
10803
+ body: themeSaveBodySchema.omit({
10804
+ themeId: true,
10805
+ selectionId: true
10806
+ }),
10786
10807
  preferences: z.object({
10787
10808
  header: headerPreferencesSchema.nullable(),
10788
10809
  footer: footerPreferencesSchema
10789
10810
  }).strict()
10790
- }).strict();
10791
- const themeJournalEvidenceSchema = z.object({
10811
+ };
10812
+ const themeJournalValueSchema = z.object(themeJournalValueShape).strict();
10813
+ const themeJournalEvidenceShape = {
10792
10814
  siteId: z.string().uuid(),
10793
10815
  selectionId: z.string().uuid(),
10794
10816
  expectedRevision: z.number().int().nonnegative(),
10795
10817
  revision: z.number().int().nonnegative(),
10796
10818
  before: themeJournalValueSchema,
10797
10819
  after: themeJournalValueSchema
10798
- }).strict();
10820
+ };
10821
+ const themeJournalEvidenceSchema = z.object(themeJournalEvidenceShape).strict();
10799
10822
 
10800
10823
  //#endregion
10801
10824
  //#region ../api/src/bookingSettingsSections.ts
@@ -10849,13 +10872,8 @@ const BOOKING_SETTINGS_SECTION_KEYS = {
10849
10872
  * Whether each email is sent, and when. No section owns these: the command
10850
10873
  * behind an email's own screen (`updateEmailSendSetting`) is their only writer,
10851
10874
  * 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
10875
  */
10857
10876
  const BOOKING_SETTINGS_EMAIL_SEND_KEYS = [
10858
- "remindersEnabled",
10859
10877
  "eventRemindersEnabled",
10860
10878
  "eventReminderHours",
10861
10879
  "appointmentRemindersEnabled",
@@ -14370,6 +14388,25 @@ function parsePublicProductCategorySelector(value) {
14370
14388
  return undefined;
14371
14389
  }
14372
14390
 
14391
+ //#endregion
14392
+ //#region ../api/src/request-error.ts
14393
+ var ApiRequestError = class extends Error {
14394
+ constructor(message, options) {
14395
+ super(message);
14396
+ this.name = "ApiRequestError";
14397
+ this.endpoint = options.endpoint;
14398
+ this.status = options.status;
14399
+ this.method = options.method;
14400
+ this.auth = options.auth;
14401
+ this.requestId = options.requestId;
14402
+ this.body = options.body;
14403
+ this.cause = options.cause;
14404
+ this.errorCode = options.errorCode;
14405
+ this.tag = options.tag;
14406
+ this.retryAfterMs = options.retryAfterMs;
14407
+ }
14408
+ };
14409
+
14373
14410
  //#endregion
14374
14411
  //#region ../api/src/token.ts
14375
14412
  async function getAuthHeaders(supabase) {
@@ -14885,22 +14922,6 @@ function setSdkVersion(version) {
14885
14922
  function getSdkVersion() {
14886
14923
  return sdkVersion;
14887
14924
  }
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
14925
  /**
14905
14926
  * Parse the Retry-After header value to milliseconds.
14906
14927
  * The header can be either:
@@ -15360,6 +15381,7 @@ function normalizeApiError(error, fallback) {
15360
15381
  body: error.body,
15361
15382
  cause: error,
15362
15383
  errorCode: error.errorCode,
15384
+ tag: error.tag,
15363
15385
  retryAfterMs: error.retryAfterMs
15364
15386
  });
15365
15387
  }
@@ -16605,6 +16627,268 @@ function linkPayloadKindToNavigationUrlType(kind) {
16605
16627
  return LINK_PAYLOAD_NAVIGATION_URL_TYPES[kind];
16606
16628
  }
16607
16629
 
16630
+ //#endregion
16631
+ //#region ../api/src/admin.ts
16632
+ async function startImpersonation(apiClient, body, options) {
16633
+ try {
16634
+ return unwrapResponse(await apiClient({
16635
+ endpoint: "adminStartImpersonation",
16636
+ body,
16637
+ options
16638
+ }));
16639
+ } catch (error) {
16640
+ return normalizeApiError(error, "Failed to start impersonation session");
16641
+ }
16642
+ }
16643
+ async function stopImpersonation(apiClient, body, options) {
16644
+ try {
16645
+ return unwrapResponse(await apiClient({
16646
+ endpoint: "adminStopImpersonation",
16647
+ body,
16648
+ options
16649
+ }));
16650
+ } catch (error) {
16651
+ return normalizeApiError(error, "Failed to stop impersonation session");
16652
+ }
16653
+ }
16654
+ async function assignAdminRole(apiClient, body, options) {
16655
+ try {
16656
+ return unwrapResponse(await apiClient({
16657
+ endpoint: "adminAssignRole",
16658
+ body,
16659
+ options
16660
+ }));
16661
+ } catch (error) {
16662
+ return normalizeApiError(error, "Failed to assign admin role");
16663
+ }
16664
+ }
16665
+ async function revokeAdminRole(apiClient, body, options) {
16666
+ try {
16667
+ return unwrapResponse(await apiClient({
16668
+ endpoint: "adminRevokeRole",
16669
+ body,
16670
+ options
16671
+ }));
16672
+ } catch (error) {
16673
+ return normalizeApiError(error, "Failed to revoke admin role");
16674
+ }
16675
+ }
16676
+ async function adminChangePlan(apiClient, body, options) {
16677
+ try {
16678
+ return unwrapResponse(await apiClient({
16679
+ endpoint: "adminChangePlan",
16680
+ body: {
16681
+ ...body,
16682
+ attemptId: body.attemptId ?? crypto.randomUUID()
16683
+ },
16684
+ options
16685
+ }));
16686
+ } catch (error) {
16687
+ return normalizeApiError(error, "Failed to update billing plan");
16688
+ }
16689
+ }
16690
+ async function listAdminInvites(apiClient, params = {}, options) {
16691
+ try {
16692
+ return unwrapResponse(await apiClient({
16693
+ endpoint: "adminListInvites",
16694
+ params,
16695
+ options
16696
+ }));
16697
+ } catch (error) {
16698
+ return normalizeApiError(error, "Failed to load invites");
16699
+ }
16700
+ }
16701
+ async function createAdminInvite(apiClient, body, options) {
16702
+ try {
16703
+ return unwrapResponse(await apiClient({
16704
+ endpoint: "adminCreateInvite",
16705
+ body,
16706
+ options
16707
+ }));
16708
+ } catch (error) {
16709
+ return normalizeApiError(error, "Failed to create invite");
16710
+ }
16711
+ }
16712
+ async function revokeAdminInvite(apiClient, inviteId, options) {
16713
+ try {
16714
+ return unwrapResponse(await apiClient({
16715
+ endpoint: "adminRevokeInvite",
16716
+ params: { inviteId },
16717
+ options
16718
+ }));
16719
+ } catch (error) {
16720
+ return normalizeApiError(error, "Failed to revoke invite");
16721
+ }
16722
+ }
16723
+ async function createAdminUser(apiClient, body, options) {
16724
+ try {
16725
+ return unwrapResponse(await apiClient({
16726
+ endpoint: "adminCreateUser",
16727
+ body,
16728
+ options
16729
+ }));
16730
+ } catch (error) {
16731
+ return normalizeApiError(error, "Failed to create user");
16732
+ }
16733
+ }
16734
+ async function adminDeleteSite(apiClient, siteId, options) {
16735
+ try {
16736
+ return unwrapResponse(await apiClient({
16737
+ endpoint: "adminDeleteSite",
16738
+ params: { siteId },
16739
+ options
16740
+ }));
16741
+ } catch (error) {
16742
+ return normalizeApiError(error, "Failed to delete site");
16743
+ }
16744
+ }
16745
+ async function adminDeleteUser(apiClient, userId, params = {}, options) {
16746
+ const forceQuery = params.force ? { force: "true" } : {};
16747
+ try {
16748
+ return unwrapResponse(await apiClient({
16749
+ endpoint: "adminDeleteUser",
16750
+ params: {
16751
+ userId,
16752
+ ...forceQuery
16753
+ },
16754
+ options
16755
+ }));
16756
+ } catch (error) {
16757
+ return normalizeApiError(error, "Failed to delete user");
16758
+ }
16759
+ }
16760
+ async function listAllowedDomains(apiClient, params = {}, options) {
16761
+ try {
16762
+ return unwrapResponse(await apiClient({
16763
+ endpoint: "adminListAllowedDomains",
16764
+ params,
16765
+ options
16766
+ }));
16767
+ } catch (error) {
16768
+ return normalizeApiError(error, "Failed to load allowed domains");
16769
+ }
16770
+ }
16771
+ async function addAllowedDomain(apiClient, body, options) {
16772
+ try {
16773
+ return unwrapResponse(await apiClient({
16774
+ endpoint: "adminAddAllowedDomain",
16775
+ body,
16776
+ options
16777
+ }));
16778
+ } catch (error) {
16779
+ return normalizeApiError(error, "Failed to add domain");
16780
+ }
16781
+ }
16782
+ async function deleteAllowedDomain(apiClient, domainId, options) {
16783
+ try {
16784
+ return unwrapResponse(await apiClient({
16785
+ endpoint: "adminDeleteAllowedDomain",
16786
+ params: { domainId },
16787
+ options
16788
+ }));
16789
+ } catch (error) {
16790
+ return normalizeApiError(error, "Failed to remove domain");
16791
+ }
16792
+ }
16793
+ async function listGscPropertiesAdmin(apiClient, options) {
16794
+ try {
16795
+ return unwrapResponse(await apiClient({
16796
+ endpoint: "listGscPropertiesAdmin",
16797
+ options
16798
+ }));
16799
+ } catch (error) {
16800
+ return normalizeApiError(error, "Failed to load GSC properties");
16801
+ }
16802
+ }
16803
+ async function setGscPersistEnabled(apiClient, body, options) {
16804
+ try {
16805
+ return unwrapResponse(await apiClient({
16806
+ endpoint: "adminGscMetaPersist",
16807
+ body,
16808
+ options
16809
+ }));
16810
+ } catch (error) {
16811
+ return normalizeApiError(error, "Failed to update GSC persist toggle");
16812
+ }
16813
+ }
16814
+ async function startGscVerification(apiClient, body, options) {
16815
+ try {
16816
+ return unwrapResponse(await apiClient({
16817
+ endpoint: "adminGscVerifyStart",
16818
+ body,
16819
+ options
16820
+ }));
16821
+ } catch (error) {
16822
+ return normalizeApiError(error, "Failed to start GSC verification");
16823
+ }
16824
+ }
16825
+ async function confirmGscVerification(apiClient, body, options) {
16826
+ try {
16827
+ return unwrapResponse(await apiClient({
16828
+ endpoint: "adminGscVerifyConfirm",
16829
+ body,
16830
+ options
16831
+ }));
16832
+ } catch (error) {
16833
+ return normalizeApiError(error, "Failed to confirm GSC verification");
16834
+ }
16835
+ }
16836
+ async function runGscIngestionForSite(apiClient, body, options) {
16837
+ try {
16838
+ return unwrapResponse(await apiClient({
16839
+ endpoint: "adminSeoIngestRun",
16840
+ body,
16841
+ options
16842
+ }));
16843
+ } catch (error) {
16844
+ return normalizeApiError(error, "Failed to run GSC ingestion");
16845
+ }
16846
+ }
16847
+ async function getPriceOverride(apiClient, params, options) {
16848
+ try {
16849
+ return unwrapResponse(await apiClient({
16850
+ endpoint: "adminGetPriceOverride",
16851
+ params,
16852
+ options
16853
+ }));
16854
+ } catch (error) {
16855
+ return normalizeApiError(error, "Failed to get price override");
16856
+ }
16857
+ }
16858
+ async function upsertPriceOverride(apiClient, body, options) {
16859
+ try {
16860
+ return unwrapResponse(await apiClient({
16861
+ endpoint: "adminUpsertPriceOverride",
16862
+ body,
16863
+ options
16864
+ }));
16865
+ } catch (error) {
16866
+ return normalizeApiError(error, "Failed to set custom price");
16867
+ }
16868
+ }
16869
+ async function deletePriceOverride(apiClient, body, options) {
16870
+ try {
16871
+ return unwrapResponse(await apiClient({
16872
+ endpoint: "adminDeletePriceOverride",
16873
+ body,
16874
+ options
16875
+ }));
16876
+ } catch (error) {
16877
+ return normalizeApiError(error, "Failed to clear custom price");
16878
+ }
16879
+ }
16880
+ async function adminClearSitePublicCache(apiClient, siteId, options) {
16881
+ try {
16882
+ return unwrapResponse(await apiClient({
16883
+ endpoint: "adminClearSitePublicCache",
16884
+ params: { siteId },
16885
+ options
16886
+ }));
16887
+ } catch (error) {
16888
+ return normalizeApiError(error, "The public page cache could not be cleared.");
16889
+ }
16890
+ }
16891
+
16608
16892
  //#endregion
16609
16893
  //#region ../api/src/accessAdmin.ts
16610
16894
  const STAFF_OPERATIONAL_CAPABILITIES = ["appointments", "event_ops"];
@@ -17270,8 +17554,8 @@ const SETTINGS_SURFACE_POLICIES = {
17270
17554
  },
17271
17555
  "settings.emails.sent": {
17272
17556
  surfaceId: "settings.emails.sent",
17273
- navVisibilityPolicy: administratorPolicy,
17274
- pageAccessPolicy: administratorPolicy,
17557
+ navVisibilityPolicy: editorPolicy,
17558
+ pageAccessPolicy: editorPolicy,
17275
17559
  actionIds: []
17276
17560
  },
17277
17561
  "settings.ai.siteProfile": {
@@ -24614,4 +24898,4 @@ function optionalTitle(data) {
24614
24898
  }
24615
24899
 
24616
24900
  //#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 };
24901
+ 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 };