siteplane 0.1.56 → 0.1.58
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.
- package/dist/bin/siteplane.js +2183 -91
- package/dist/index.js +71 -71
- package/dist/next.js +2371 -152
- package/package.json +1 -1
package/dist/bin/siteplane.js
CHANGED
|
@@ -5,16 +5,16 @@ import { randomUUID as randomUUID8 } from "crypto";
|
|
|
5
5
|
import { access as access7, readFile as readFile13 } from "fs/promises";
|
|
6
6
|
import { join as join13, resolve as resolve4 } from "path";
|
|
7
7
|
|
|
8
|
-
//
|
|
8
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/analytics/manifest.js
|
|
9
9
|
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
10
10
|
import { dirname } from "path";
|
|
11
11
|
|
|
12
|
-
//
|
|
12
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/actors.js
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
var ACTOR_TYPES = ["workspace_member", "site_member", "agent", "setup_guest", "system"];
|
|
15
15
|
var actorTypeSchema = z.enum(ACTOR_TYPES);
|
|
16
16
|
|
|
17
|
-
//
|
|
17
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/analytics-defaults.js
|
|
18
18
|
var ANALYTICS_BATCH_LIMITS = {
|
|
19
19
|
maxEventsPerRequest: 50,
|
|
20
20
|
maxJsonBodyBytes: 64 * 1024,
|
|
@@ -29,7 +29,7 @@ var ANALYTICS_RETENTION_DEFAULTS = {
|
|
|
29
29
|
lateEventWindowHours: 72
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
//
|
|
32
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/analytics-booking.js
|
|
33
33
|
import { z as z2 } from "zod";
|
|
34
34
|
var bookingProviders = ["treatwell", "beautinda", "other"];
|
|
35
35
|
var bookingAttributionModes = [
|
|
@@ -72,7 +72,7 @@ var bookingProviderHintSchema = z2.object({
|
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
74
|
|
|
75
|
-
//
|
|
75
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/analytics-contract.js
|
|
76
76
|
import { z as z3 } from "zod";
|
|
77
77
|
var ANALYTICS_CONTRACT_VERSION = "analytics-contract.v1";
|
|
78
78
|
var ANALYTICS_CONTRACT_HASH = "sha256:a91bddcc3c5e4196933b0335d03eaf41ff929cb736bdd694fe54d07ab52dada1";
|
|
@@ -100,7 +100,7 @@ var analyticsProviderImportSchema = z3.object({
|
|
|
100
100
|
rows: z3.array(analyticsProviderImportRowSchema).min(1).max(1e3)
|
|
101
101
|
}).strict();
|
|
102
102
|
|
|
103
|
-
//
|
|
103
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/analytics-config.js
|
|
104
104
|
import { z as z4 } from "zod";
|
|
105
105
|
var ANALYTICS_CONFIG_LEASE_MS = 6e4;
|
|
106
106
|
var analyticsMeasurementConfigSchema = z4.object({
|
|
@@ -129,10 +129,9 @@ var analyticsMeasurementConfigSchema = z4.object({
|
|
|
129
129
|
}
|
|
130
130
|
});
|
|
131
131
|
|
|
132
|
-
//
|
|
132
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/analytics-events.js
|
|
133
133
|
import { z as z5 } from "zod";
|
|
134
134
|
var ANALYTICS_SCHEMA_VERSION = "analytics.v1";
|
|
135
|
-
var ANALYTICS_KEY_PATTERN = /^(pk|sk)_siteplane_([A-Za-z0-9_-]{16})_[A-Za-z0-9_-]{43}$/;
|
|
136
135
|
var analyticsSessionIdSchema = z5.string().regex(/^cpa_s_[a-f0-9]{32}$/u);
|
|
137
136
|
var analyticsVisitorIdSchema = z5.string().regex(/^cpa_v_[a-f0-9]{32}$/u);
|
|
138
137
|
var analyticsPersistedIdentityHashSchema = z5.string().regex(/^[a-f0-9]{64}$/u);
|
|
@@ -327,10 +326,6 @@ var analyticsNormalizedEventSchema = analyticsNormalizedEventBaseSchema.extend({
|
|
|
327
326
|
function isServerOnlyAnalyticsEvent(eventName) {
|
|
328
327
|
return serverOnlyAnalyticsEvents.includes(eventName);
|
|
329
328
|
}
|
|
330
|
-
function getAnalyticsKeyLookup(rawKey) {
|
|
331
|
-
const match = ANALYTICS_KEY_PATTERN.exec(rawKey);
|
|
332
|
-
return match ? `${match[1]}_siteplane_${match[2]}` : null;
|
|
333
|
-
}
|
|
334
329
|
function expandAnalyticsDataAttributeEvent(event) {
|
|
335
330
|
if (event === "form") {
|
|
336
331
|
return ["form_start", "form_submit", "form_error"];
|
|
@@ -338,7 +333,7 @@ function expandAnalyticsDataAttributeEvent(event) {
|
|
|
338
333
|
return [event];
|
|
339
334
|
}
|
|
340
335
|
|
|
341
|
-
//
|
|
336
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/analytics-manifest.js
|
|
342
337
|
import { z as z6 } from "zod";
|
|
343
338
|
var analyticsTargetIdSchema = z6.string().min(1).max(120).regex(/^[a-zA-Z][a-zA-Z0-9]*(?:[._-][a-zA-Z0-9]+)*$/u, {
|
|
344
339
|
message: "Analytics target IDs must be stable identifiers without whitespace or visible copy."
|
|
@@ -491,7 +486,7 @@ function isPlainRecord(value) {
|
|
|
491
486
|
return typeof value === "object" && value !== null;
|
|
492
487
|
}
|
|
493
488
|
|
|
494
|
-
//
|
|
489
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/analytics-metrics.js
|
|
495
490
|
import { z as z7 } from "zod";
|
|
496
491
|
var analyticsVisitorQualities = ["exact", "estimated"];
|
|
497
492
|
var analyticsVisitorQualitySchema = z7.enum(analyticsVisitorQualities);
|
|
@@ -508,7 +503,7 @@ var analyticsKpiKeys = [
|
|
|
508
503
|
];
|
|
509
504
|
var analyticsKpiKeySchema = z7.enum(analyticsKpiKeys);
|
|
510
505
|
|
|
511
|
-
//
|
|
506
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/analytics-privacy.js
|
|
512
507
|
var serverPropertySchemas = {
|
|
513
508
|
lead_created: {
|
|
514
509
|
conversionId: "identifier",
|
|
@@ -543,7 +538,7 @@ function revenuePropertySchema() {
|
|
|
543
538
|
};
|
|
544
539
|
}
|
|
545
540
|
|
|
546
|
-
//
|
|
541
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/assets.js
|
|
547
542
|
import { z as z8 } from "zod";
|
|
548
543
|
var ASSET_STAGES = ["staging", "final", "deleted"];
|
|
549
544
|
var ASSET_VISIBILITIES = ["private", "public", "deleted"];
|
|
@@ -558,7 +553,7 @@ var assetVisibilitySchema = z8.enum(ASSET_VISIBILITIES);
|
|
|
558
553
|
var assetUsageEntityTypeSchema = z8.enum(ASSET_USAGE_ENTITY_TYPES);
|
|
559
554
|
var brandingAccentColorSchema = z8.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/);
|
|
560
555
|
|
|
561
|
-
//
|
|
556
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/booking-contracts.js
|
|
562
557
|
import { z as z9 } from "zod";
|
|
563
558
|
var bookingStatuses = [
|
|
564
559
|
"pending_payment",
|
|
@@ -919,13 +914,13 @@ function redactBookingManifest(value) {
|
|
|
919
914
|
return value;
|
|
920
915
|
}
|
|
921
916
|
|
|
922
|
-
//
|
|
917
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/booking-defaults.js
|
|
923
918
|
var BOOKING_CREATE_PAYLOAD_LIMIT_BYTES = 16 * 1024;
|
|
924
919
|
|
|
925
|
-
//
|
|
920
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/bridge-protocol.js
|
|
926
921
|
import { z as z17 } from "zod";
|
|
927
922
|
|
|
928
|
-
//
|
|
923
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/field-id.js
|
|
929
924
|
import { z as z10 } from "zod";
|
|
930
925
|
var FIELD_ID_PATTERN = /^[a-z][a-z0-9_-]*(\.[a-z][a-z0-9_-]*)+$/;
|
|
931
926
|
var fieldIdSchema = z10.string().regex(FIELD_ID_PATTERN, "Invalid field id");
|
|
@@ -933,12 +928,12 @@ function isFieldId(value) {
|
|
|
933
928
|
return typeof value === "string" && fieldIdSchema.safeParse(value).success;
|
|
934
929
|
}
|
|
935
930
|
|
|
936
|
-
//
|
|
931
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/field-types.js
|
|
937
932
|
import { z as z11 } from "zod";
|
|
938
933
|
var FIELD_TYPES = ["text", "longText", "image", "link"];
|
|
939
934
|
var fieldTypeSchema = z11.enum(FIELD_TYPES);
|
|
940
935
|
|
|
941
|
-
//
|
|
936
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/image-value.js
|
|
942
937
|
import { z as z12 } from "zod";
|
|
943
938
|
var SUPPORTED_IMAGE_CONTENT_TYPES = [
|
|
944
939
|
"image/jpeg",
|
|
@@ -970,7 +965,7 @@ var imageValueSchema = z12.object({
|
|
|
970
965
|
]).optional()
|
|
971
966
|
});
|
|
972
967
|
|
|
973
|
-
//
|
|
968
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/setup-deployment.js
|
|
974
969
|
import { z as z13 } from "zod";
|
|
975
970
|
var version = z13.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u);
|
|
976
971
|
var siteSetupPackagesSchema = z13.object({
|
|
@@ -1024,13 +1019,13 @@ var setupDeploymentInputSchema = z13.discriminatedUnion("action", [
|
|
|
1024
1019
|
}).strict()
|
|
1025
1020
|
]);
|
|
1026
1021
|
|
|
1027
|
-
//
|
|
1022
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/site-setup.js
|
|
1028
1023
|
import { z as z16 } from "zod";
|
|
1029
1024
|
|
|
1030
|
-
//
|
|
1025
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/site-field-contract.js
|
|
1031
1026
|
import { z as z15 } from "zod";
|
|
1032
1027
|
|
|
1033
|
-
//
|
|
1028
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/fallback-hash.js
|
|
1034
1029
|
import { z as z14 } from "zod";
|
|
1035
1030
|
var SAFE_REPRESENTATION_REASONS = [
|
|
1036
1031
|
"asset_import_rewritten",
|
|
@@ -1252,7 +1247,7 @@ var SHA256_CONSTANTS = [
|
|
|
1252
1247
|
3329325298
|
|
1253
1248
|
];
|
|
1254
1249
|
|
|
1255
|
-
//
|
|
1250
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/site-field-contract.js
|
|
1256
1251
|
var fieldContractVersion = "1.0.0";
|
|
1257
1252
|
var scannerContractVersion = "1.0.0";
|
|
1258
1253
|
var siteFieldStatusSchema = z15.enum(["hidden", "active"]);
|
|
@@ -1341,7 +1336,7 @@ function createSiteFieldContractHash(input) {
|
|
|
1341
1336
|
return `sha256:${sha256Hex(payload)}`;
|
|
1342
1337
|
}
|
|
1343
1338
|
|
|
1344
|
-
//
|
|
1339
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/site-setup.js
|
|
1345
1340
|
var SITE_SETUP_RUN_STATUSES = [
|
|
1346
1341
|
"waiting_for_agent",
|
|
1347
1342
|
"working",
|
|
@@ -1884,7 +1879,7 @@ var activateSetupModulesInputSchema = activateSiteSetupInputSchema.extend({
|
|
|
1884
1879
|
])
|
|
1885
1880
|
}).strict();
|
|
1886
1881
|
|
|
1887
|
-
//
|
|
1882
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/bridge-protocol.js
|
|
1888
1883
|
var BRIDGE_PROTOCOL_VERSION = 2;
|
|
1889
1884
|
var bridgeRectSchema = z17.object({
|
|
1890
1885
|
x: z17.number(),
|
|
@@ -2122,10 +2117,10 @@ var fieldBridgeMessageSchema = z17.discriminatedUnion("type", [
|
|
|
2122
2117
|
fieldBridgeAnalyticsProbeResultSchema
|
|
2123
2118
|
]);
|
|
2124
2119
|
|
|
2125
|
-
//
|
|
2120
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/commands.js
|
|
2126
2121
|
import { z as z19 } from "zod";
|
|
2127
2122
|
|
|
2128
|
-
//
|
|
2123
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/errors.js
|
|
2129
2124
|
import { z as z18 } from "zod";
|
|
2130
2125
|
var UI_ERROR_CATEGORIES = [
|
|
2131
2126
|
"site_member",
|
|
@@ -2140,7 +2135,7 @@ var commandErrorPayloadSchema = z18.object({
|
|
|
2140
2135
|
details: z18.record(z18.string(), z18.unknown()).optional()
|
|
2141
2136
|
});
|
|
2142
2137
|
|
|
2143
|
-
//
|
|
2138
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/commands.js
|
|
2144
2139
|
var commandSuccessSchema = z19.object({
|
|
2145
2140
|
ok: z19.literal(true),
|
|
2146
2141
|
data: z19.unknown()
|
|
@@ -2154,7 +2149,7 @@ var commandResultSchema = z19.discriminatedUnion("ok", [
|
|
|
2154
2149
|
commandErrorSchema
|
|
2155
2150
|
]);
|
|
2156
2151
|
|
|
2157
|
-
//
|
|
2152
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/editor-settings.js
|
|
2158
2153
|
import { z as z20 } from "zod";
|
|
2159
2154
|
var editorColorSchemeSchema = z20.enum([
|
|
2160
2155
|
"paper",
|
|
@@ -2166,7 +2161,7 @@ var editorColorSchemes = editorColorSchemeSchema.options;
|
|
|
2166
2161
|
var editorColorModeSchema = z20.enum(["light", "dark"]);
|
|
2167
2162
|
var editorColorModes = editorColorModeSchema.options;
|
|
2168
2163
|
|
|
2169
|
-
//
|
|
2164
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/site-slug.js
|
|
2170
2165
|
import { z as z21 } from "zod";
|
|
2171
2166
|
var SITE_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
2172
2167
|
var RESERVED_SITE_SLUGS = /* @__PURE__ */ new Set([
|
|
@@ -2186,7 +2181,7 @@ var RESERVED_SITE_SLUGS = /* @__PURE__ */ new Set([
|
|
|
2186
2181
|
]);
|
|
2187
2182
|
var siteSlugSchema = z21.string().regex(SITE_SLUG_PATTERN, "Invalid site slug").refine((value) => !RESERVED_SITE_SLUGS.has(value), "Reserved site slug");
|
|
2188
2183
|
|
|
2189
|
-
//
|
|
2184
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/entitlements.js
|
|
2190
2185
|
import { z as z22 } from "zod";
|
|
2191
2186
|
var entitlementSnapshotSchema = z22.object({
|
|
2192
2187
|
planKey: z22.string().trim().min(1),
|
|
@@ -2233,10 +2228,10 @@ var EARLY_ACCESS_PLAN = {
|
|
|
2233
2228
|
bookingRemindersEnabled: true
|
|
2234
2229
|
};
|
|
2235
2230
|
|
|
2236
|
-
//
|
|
2231
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/first-party-image-upload.js
|
|
2237
2232
|
var maxFirstPartyImageUploadBytes = 4 * 1024 * 1024;
|
|
2238
2233
|
|
|
2239
|
-
//
|
|
2234
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/readiness.js
|
|
2240
2235
|
import { z as z23 } from "zod";
|
|
2241
2236
|
var READINESS_CHECK_KEYS = [
|
|
2242
2237
|
"agent_instructions_installed",
|
|
@@ -2255,7 +2250,7 @@ var READINESS_STATUSES = [
|
|
|
2255
2250
|
var readinessCheckKeySchema = z23.enum(READINESS_CHECK_KEYS);
|
|
2256
2251
|
var readinessStatusSchema = z23.enum(READINESS_STATUSES);
|
|
2257
2252
|
|
|
2258
|
-
//
|
|
2253
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/site.js
|
|
2259
2254
|
import { z as z24 } from "zod";
|
|
2260
2255
|
var SITE_STATUSES = [
|
|
2261
2256
|
"setup",
|
|
@@ -2266,7 +2261,7 @@ var SITE_STATUSES = [
|
|
|
2266
2261
|
var siteStatusSchema = z24.enum(SITE_STATUSES);
|
|
2267
2262
|
var websiteUrlSchema = z24.string().trim().url().refine((value) => value.startsWith("https://") || value.startsWith("http://"), "Website URL must use http or https");
|
|
2268
2263
|
|
|
2269
|
-
//
|
|
2264
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/setup-assets.js
|
|
2270
2265
|
import { z as z25 } from "zod";
|
|
2271
2266
|
var configureSetupAssetTargetInputSchema = z25.object({
|
|
2272
2267
|
siteId: z25.string().uuid(),
|
|
@@ -2327,7 +2322,7 @@ var checkSetupAssetTargetInputSchema = z25.object({
|
|
|
2327
2322
|
intent: z25.enum(["start", "poll"])
|
|
2328
2323
|
}).strict();
|
|
2329
2324
|
|
|
2330
|
-
//
|
|
2325
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/setup-installation.js
|
|
2331
2326
|
import { z as z26 } from "zod";
|
|
2332
2327
|
var setupInstallationRequestSchema = z26.object({
|
|
2333
2328
|
modules: siteSetupModulesSchema,
|
|
@@ -2338,7 +2333,7 @@ var setupInstallationRequestSchema = z26.object({
|
|
|
2338
2333
|
}).strict()
|
|
2339
2334
|
}).strict();
|
|
2340
2335
|
|
|
2341
|
-
//
|
|
2336
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/shared/dist/setup-claim.js
|
|
2342
2337
|
import { z as z27 } from "zod";
|
|
2343
2338
|
var setupClaimCodeSchema = z27.string().regex(/^[0-9A-HJKMNP-TV-Z]{8}$/u);
|
|
2344
2339
|
var setupClaimBindingSchema = z27.object({
|
|
@@ -2379,7 +2374,7 @@ var setupClaimDenialSchema = z27.object({
|
|
|
2379
2374
|
])
|
|
2380
2375
|
}).strict();
|
|
2381
2376
|
|
|
2382
|
-
//
|
|
2377
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/analytics/manifest.js
|
|
2383
2378
|
async function readAnalyticsManifestFile(manifestPath) {
|
|
2384
2379
|
return validateAnalyticsManifestInput(JSON.parse(await readFile(manifestPath, "utf8")));
|
|
2385
2380
|
}
|
|
@@ -2394,10 +2389,10 @@ function validateAnalyticsManifestInput(input) {
|
|
|
2394
2389
|
return redactAnalyticsManifest(analyticsManifestSchema.parse(input));
|
|
2395
2390
|
}
|
|
2396
2391
|
|
|
2397
|
-
//
|
|
2392
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/analytics/static-scan.js
|
|
2398
2393
|
import ts from "typescript";
|
|
2399
2394
|
|
|
2400
|
-
//
|
|
2395
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/analytics/booking-providers.js
|
|
2401
2396
|
function buildBookingProviderHintFromHref(href, mode, options = {}) {
|
|
2402
2397
|
const url = parseStaticHttpUrl(href);
|
|
2403
2398
|
if (!url) {
|
|
@@ -2457,7 +2452,7 @@ function normalizeHost(host) {
|
|
|
2457
2452
|
return host.toLowerCase().replace(/\.$/u, "");
|
|
2458
2453
|
}
|
|
2459
2454
|
|
|
2460
|
-
//
|
|
2455
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/analytics/static-scan.js
|
|
2461
2456
|
function scanAnalyticsSourceFiles(files, input) {
|
|
2462
2457
|
const targets = [];
|
|
2463
2458
|
const hardErrors = [];
|
|
@@ -2744,7 +2739,7 @@ function inferRoute(filePath) {
|
|
|
2744
2739
|
return route ? `/${route}` : "/";
|
|
2745
2740
|
}
|
|
2746
2741
|
|
|
2747
|
-
//
|
|
2742
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/booking/manifest.js
|
|
2748
2743
|
import { mkdir as mkdir2, readFile as readFile2, writeFile as writeFile2 } from "fs/promises";
|
|
2749
2744
|
import { dirname as dirname2 } from "path";
|
|
2750
2745
|
async function readBookingManifestFile(manifestPath) {
|
|
@@ -2787,7 +2782,7 @@ function collectRedactedBookingKeys(input, prefix = "") {
|
|
|
2787
2782
|
});
|
|
2788
2783
|
}
|
|
2789
2784
|
|
|
2790
|
-
//
|
|
2785
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/booking/static-scan.js
|
|
2791
2786
|
function scanBookingSourceFiles(files, input) {
|
|
2792
2787
|
const embeds = files.flatMap(scanBookingEmbedFile);
|
|
2793
2788
|
const findings = embeds.map(createEmbedFoundIssue);
|
|
@@ -2901,7 +2896,7 @@ function escapeRegExp(value) {
|
|
|
2901
2896
|
return value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
|
|
2902
2897
|
}
|
|
2903
2898
|
|
|
2904
|
-
//
|
|
2899
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/analytics/check.js
|
|
2905
2900
|
import { readFile as readFile3 } from "fs/promises";
|
|
2906
2901
|
async function analyticsCheckCommand(input) {
|
|
2907
2902
|
const validatedManifest = await readAnalyticsManifestFile(input.manifestPath);
|
|
@@ -3040,7 +3035,7 @@ async function readCspWarnings(filePaths) {
|
|
|
3040
3035
|
return warnings;
|
|
3041
3036
|
}
|
|
3042
3037
|
|
|
3043
|
-
//
|
|
3038
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/analytics/init.js
|
|
3044
3039
|
import { mkdir as mkdir3, writeFile as writeFile3 } from "fs/promises";
|
|
3045
3040
|
import { dirname as dirname3, join } from "path";
|
|
3046
3041
|
async function analyticsInitCommand(input) {
|
|
@@ -3137,10 +3132,10 @@ alwaysApply: true
|
|
|
3137
3132
|
|
|
3138
3133
|
${analyticsRulesTemplate}`;
|
|
3139
3134
|
|
|
3140
|
-
//
|
|
3135
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/analytics/import.js
|
|
3141
3136
|
import { createHash } from "crypto";
|
|
3142
3137
|
|
|
3143
|
-
//
|
|
3138
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/analytics/sync.js
|
|
3144
3139
|
async function analyticsSyncCommand(input) {
|
|
3145
3140
|
const redacted = validateAnalyticsManifestInput(input.manifest);
|
|
3146
3141
|
const fetcher = input.fetchImpl ?? fetch;
|
|
@@ -3166,7 +3161,7 @@ function createAnalyticsCliRequestHeaders(config) {
|
|
|
3166
3161
|
return headers;
|
|
3167
3162
|
}
|
|
3168
3163
|
|
|
3169
|
-
//
|
|
3164
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/analytics/import.js
|
|
3170
3165
|
async function analyticsImportCommand(input) {
|
|
3171
3166
|
const payload = analyticsProviderImportSchema.parse(input.payload);
|
|
3172
3167
|
const payloadHash = hashAnalyticsProviderImport(payload);
|
|
@@ -3192,7 +3187,7 @@ function hashAnalyticsProviderImport(payload) {
|
|
|
3192
3187
|
return `sha256:${createHash("sha256").update(JSON.stringify(payload)).digest("hex")}`;
|
|
3193
3188
|
}
|
|
3194
3189
|
|
|
3195
|
-
//
|
|
3190
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/analytics/readiness.js
|
|
3196
3191
|
async function analyticsReadinessCommand(input) {
|
|
3197
3192
|
const fetcher = input.fetchImpl ?? fetch;
|
|
3198
3193
|
return fetcher(`${input.config.apiBaseUrl.replace(/\/$/u, "")}/api/cli/analytics/readiness`, {
|
|
@@ -3202,7 +3197,7 @@ async function analyticsReadinessCommand(input) {
|
|
|
3202
3197
|
});
|
|
3203
3198
|
}
|
|
3204
3199
|
|
|
3205
|
-
//
|
|
3200
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/analytics/public-key.js
|
|
3206
3201
|
import { z as z28 } from "zod";
|
|
3207
3202
|
var responseSchema = z28.object({
|
|
3208
3203
|
ok: z28.literal(true),
|
|
@@ -3233,7 +3228,7 @@ async function analyticsPublicKeyCommand(input) {
|
|
|
3233
3228
|
return parsed.data.data.rawPublicKey;
|
|
3234
3229
|
}
|
|
3235
3230
|
|
|
3236
|
-
//
|
|
3231
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/analytics/prepare.js
|
|
3237
3232
|
import { z as z29 } from "zod";
|
|
3238
3233
|
var resultSchema = z29.object({
|
|
3239
3234
|
ok: z29.literal(true),
|
|
@@ -3270,7 +3265,7 @@ async function analyticsPrepareCommand(input) {
|
|
|
3270
3265
|
return parsed.data.data;
|
|
3271
3266
|
}
|
|
3272
3267
|
|
|
3273
|
-
//
|
|
3268
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/analytics/test.js
|
|
3274
3269
|
import { randomUUID } from "crypto";
|
|
3275
3270
|
async function analyticsTestCommand(input) {
|
|
3276
3271
|
const fetcher = input.fetchImpl ?? fetch;
|
|
@@ -3303,7 +3298,7 @@ async function analyticsTestCommand(input) {
|
|
|
3303
3298
|
});
|
|
3304
3299
|
}
|
|
3305
3300
|
|
|
3306
|
-
//
|
|
3301
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/booking/check.js
|
|
3307
3302
|
import { readFile as readFile4 } from "fs/promises";
|
|
3308
3303
|
async function bookingCheckCommand(input) {
|
|
3309
3304
|
const validatedManifest = await readBookingManifestFile(input.manifestPath);
|
|
@@ -3346,7 +3341,7 @@ function createBoundaryErrors2(validation) {
|
|
|
3346
3341
|
}));
|
|
3347
3342
|
}
|
|
3348
3343
|
|
|
3349
|
-
//
|
|
3344
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/booking/init.js
|
|
3350
3345
|
import { mkdir as mkdir4, writeFile as writeFile4 } from "fs/promises";
|
|
3351
3346
|
import { dirname as dirname4, join as join2 } from "path";
|
|
3352
3347
|
async function bookingInitCommand(input) {
|
|
@@ -3425,7 +3420,7 @@ alwaysApply: true
|
|
|
3425
3420
|
|
|
3426
3421
|
${bookingRulesTemplate}`;
|
|
3427
3422
|
|
|
3428
|
-
//
|
|
3423
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/booking/sync.js
|
|
3429
3424
|
async function bookingSyncCommand(input) {
|
|
3430
3425
|
const redacted = validateBookingManifestInput(input.manifest);
|
|
3431
3426
|
const fetcher = input.fetchImpl ?? fetch;
|
|
@@ -3451,7 +3446,7 @@ function createBookingCliRequestHeaders(config) {
|
|
|
3451
3446
|
return headers;
|
|
3452
3447
|
}
|
|
3453
3448
|
|
|
3454
|
-
//
|
|
3449
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/booking/test.js
|
|
3455
3450
|
async function bookingTestCommand(input) {
|
|
3456
3451
|
const fetcher = input.fetchImpl ?? fetch;
|
|
3457
3452
|
const booking = bookingCreateRequestSchema.parse(input.booking);
|
|
@@ -3467,7 +3462,7 @@ async function bookingTestCommand(input) {
|
|
|
3467
3462
|
});
|
|
3468
3463
|
}
|
|
3469
3464
|
|
|
3470
|
-
//
|
|
3465
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/config/project-config.js
|
|
3471
3466
|
import { access, chmod, open, readFile as readFile5, rename, rm } from "fs/promises";
|
|
3472
3467
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
3473
3468
|
import { join as join3 } from "path";
|
|
@@ -3537,7 +3532,7 @@ async function writeJsonAtomically(path, value, mode) {
|
|
|
3537
3532
|
}
|
|
3538
3533
|
}
|
|
3539
3534
|
|
|
3540
|
-
//
|
|
3535
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/config/credentials.js
|
|
3541
3536
|
import { execFile } from "child_process";
|
|
3542
3537
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
3543
3538
|
import { chmod as chmod2, lstat, mkdir as mkdir5, open as open2, readFile as readFile6, rename as rename2, rm as rm2 } from "fs/promises";
|
|
@@ -3658,18 +3653,18 @@ async function gitPathMatches(projectDir, path, command) {
|
|
|
3658
3653
|
}
|
|
3659
3654
|
}
|
|
3660
3655
|
|
|
3661
|
-
//
|
|
3656
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/init.js
|
|
3662
3657
|
import { access as access3 } from "fs/promises";
|
|
3663
3658
|
import { join as join7, relative as relative3 } from "path";
|
|
3664
3659
|
import { z as z34 } from "zod";
|
|
3665
3660
|
|
|
3666
|
-
//
|
|
3661
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-preflight.js
|
|
3667
3662
|
import { createHash as createHash2 } from "crypto";
|
|
3668
3663
|
import semver from "semver";
|
|
3669
3664
|
import { minimatch } from "minimatch";
|
|
3670
3665
|
import { parse as parseYaml } from "yaml";
|
|
3671
3666
|
|
|
3672
|
-
//
|
|
3667
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/config/installed-package.js
|
|
3673
3668
|
import { createRequire } from "module";
|
|
3674
3669
|
import { readFile as readFile7 } from "fs/promises";
|
|
3675
3670
|
import { join as join5 } from "path";
|
|
@@ -3696,24 +3691,24 @@ async function assertExactSetupPackages(projectDir, packages) {
|
|
|
3696
3691
|
dependencies: z32.record(z32.string(), z32.string()).optional(),
|
|
3697
3692
|
devDependencies: z32.record(z32.string(), z32.string()).optional()
|
|
3698
3693
|
}).parse(JSON.parse(await readFile7(join5(projectDir, "package.json"), "utf8")));
|
|
3699
|
-
for (const [name2,
|
|
3694
|
+
for (const [name2, version3] of [
|
|
3700
3695
|
["siteplane", packages.siteplane],
|
|
3701
3696
|
["@siteplane/runtime-next", packages.runtimeNext],
|
|
3702
3697
|
...packages.analytics ? [["@siteplane/analytics", packages.analytics]] : []
|
|
3703
3698
|
]) {
|
|
3704
3699
|
const declared = manifest.dependencies?.[name2] ?? manifest.devDependencies?.[name2];
|
|
3705
3700
|
const installed = await readInstalledPackage(projectDir, name2);
|
|
3706
|
-
if (declared !==
|
|
3701
|
+
if (declared !== version3 || installed.version !== version3)
|
|
3707
3702
|
throw new Error("The installed Siteplane packages must match the current task's exact pins.");
|
|
3708
3703
|
}
|
|
3709
3704
|
}
|
|
3710
3705
|
|
|
3711
|
-
//
|
|
3706
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-preflight.js
|
|
3712
3707
|
import { access as access2, readFile as readFile8, realpath, readdir, readlink } from "fs/promises";
|
|
3713
3708
|
import { dirname as dirname6, join as join6, relative as relative2, resolve, sep } from "path";
|
|
3714
3709
|
import { z as z33 } from "zod";
|
|
3715
3710
|
|
|
3716
|
-
//
|
|
3711
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-process.js
|
|
3717
3712
|
import { spawn } from "child_process";
|
|
3718
3713
|
var SetupFailure = class extends Error {
|
|
3719
3714
|
code;
|
|
@@ -3811,7 +3806,7 @@ async function setupVercelApi(cwd, endpoint, body, method, options) {
|
|
|
3811
3806
|
}
|
|
3812
3807
|
}
|
|
3813
3808
|
|
|
3814
|
-
//
|
|
3809
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-preflight.js
|
|
3815
3810
|
var manifestSchema = z33.object({
|
|
3816
3811
|
packageManager: z33.string().optional(),
|
|
3817
3812
|
engines: z33.object({ node: z33.string().optional() }).optional(),
|
|
@@ -3841,7 +3836,7 @@ var exists = async (path) => access2(path).then(() => true, () => false);
|
|
|
3841
3836
|
var fail = (code, message) => {
|
|
3842
3837
|
throw new SetupFailure(code, message);
|
|
3843
3838
|
};
|
|
3844
|
-
var stable = (
|
|
3839
|
+
var stable = (version3, major) => new RegExp(`^${major}\\.\\d+\\.\\d+$`, "u").test(version3);
|
|
3845
3840
|
async function inspectSetupLocalProject(projectDir) {
|
|
3846
3841
|
const projectDirectory = await realpath(resolve(projectDir));
|
|
3847
3842
|
const manifest = manifestSchema.parse(JSON.parse(await readFile8(join6(projectDirectory, "package.json"), "utf8")));
|
|
@@ -3914,7 +3909,7 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3914
3909
|
peerDependencies: z33.record(z33.string(), z33.string()).optional()
|
|
3915
3910
|
})).optional()
|
|
3916
3911
|
}).parse(JSON.parse(lockText)) : null;
|
|
3917
|
-
async function
|
|
3912
|
+
async function version3(name3) {
|
|
3918
3913
|
try {
|
|
3919
3914
|
return (await readInstalledPackage(projectDirectory, name3)).version;
|
|
3920
3915
|
} catch {
|
|
@@ -3925,9 +3920,9 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3925
3920
|
}
|
|
3926
3921
|
}
|
|
3927
3922
|
const [nextVersion, reactVersion, reactDomVersion] = await Promise.all([
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3923
|
+
version3("next"),
|
|
3924
|
+
version3("react"),
|
|
3925
|
+
version3("react-dom")
|
|
3931
3926
|
]);
|
|
3932
3927
|
if (!stable(nextVersion, 16))
|
|
3933
3928
|
fail("unsupported_next_version", "Setup supports stable Next.js 16 App Router projects. Framework migration requires a separate owner decision.");
|
|
@@ -4132,7 +4127,7 @@ function safeGitRemote(value) {
|
|
|
4132
4127
|
}
|
|
4133
4128
|
}
|
|
4134
4129
|
|
|
4135
|
-
//
|
|
4130
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/init.js
|
|
4136
4131
|
async function initCommand(input) {
|
|
4137
4132
|
if (!input.setupToken.trim()) {
|
|
4138
4133
|
throw new Error("A Siteplane setup token is required.");
|
|
@@ -4295,7 +4290,7 @@ function readErrorMessage(payload) {
|
|
|
4295
4290
|
return null;
|
|
4296
4291
|
}
|
|
4297
4292
|
|
|
4298
|
-
//
|
|
4293
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/scan.js
|
|
4299
4294
|
import { readdir as readdir2 } from "fs/promises";
|
|
4300
4295
|
import { extname, join as join8 } from "path";
|
|
4301
4296
|
var defaultScanRoots = ["app", "src", "pages", "components", "lib"];
|
|
@@ -4336,13 +4331,13 @@ async function collectSourceFiles(directory) {
|
|
|
4336
4331
|
return files;
|
|
4337
4332
|
}
|
|
4338
4333
|
|
|
4339
|
-
//
|
|
4334
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/site-setup.js
|
|
4340
4335
|
import { execFile as execFile2 } from "child_process";
|
|
4341
4336
|
import { readFile as readFile9 } from "fs/promises";
|
|
4342
4337
|
import { promisify as promisify2 } from "util";
|
|
4343
4338
|
import { z as z35 } from "zod";
|
|
4344
4339
|
|
|
4345
|
-
//
|
|
4340
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/scan/next-source-scan.js
|
|
4346
4341
|
import ts2 from "typescript";
|
|
4347
4342
|
import { isAbsolute, relative as relative4 } from "path";
|
|
4348
4343
|
var eventPreviewHandlerMissingMessage = "Event preview fields must consume preview values with useSiteplanePreviewText from @siteplane/runtime-next/client or a siteplane:preview-value-applied listener.";
|
|
@@ -5043,7 +5038,7 @@ function isPositionalFieldReference(value) {
|
|
|
5043
5038
|
return value ? /\[\d+\]|\.\d+(?:\.|$)/.test(value) : false;
|
|
5044
5039
|
}
|
|
5045
5040
|
|
|
5046
|
-
//
|
|
5041
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/site-setup.js
|
|
5047
5042
|
var execFileAsync2 = promisify2(execFile2);
|
|
5048
5043
|
var safeErrorSchema = z35.object({
|
|
5049
5044
|
code: z35.string().trim().min(1),
|
|
@@ -5241,7 +5236,7 @@ async function siteSetupActivityCommand(input) {
|
|
|
5241
5236
|
return response.ok && parsed.success ? parsed.data.data : actionRequired(response.payload, "Setup activity could not be recorded.");
|
|
5242
5237
|
}
|
|
5243
5238
|
|
|
5244
|
-
//
|
|
5239
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-start.js
|
|
5245
5240
|
import { randomBytes, randomUUID as randomUUID4 } from "crypto";
|
|
5246
5241
|
import { access as access4 } from "fs/promises";
|
|
5247
5242
|
import { join as join9, relative as relative5 } from "path";
|
|
@@ -5374,7 +5369,7 @@ async function exists2(path) {
|
|
|
5374
5369
|
}
|
|
5375
5370
|
}
|
|
5376
5371
|
|
|
5377
|
-
//
|
|
5372
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-review.js
|
|
5378
5373
|
import { z as z37 } from "zod";
|
|
5379
5374
|
var responseSchema2 = z37.object({
|
|
5380
5375
|
ok: z37.literal(true),
|
|
@@ -5459,7 +5454,7 @@ async function setupReviewCommand(input) {
|
|
|
5459
5454
|
}
|
|
5460
5455
|
}
|
|
5461
5456
|
|
|
5462
|
-
//
|
|
5457
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-prepare.js
|
|
5463
5458
|
import { access as access5, lstat as lstat2, mkdir as mkdir6, open as open3, readFile as readFile10, rename as rename3, rm as rm3 } from "fs/promises";
|
|
5464
5459
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
5465
5460
|
import { dirname as dirname7, join as join10, relative as relative6, sep as sep2 } from "path";
|
|
@@ -5479,8 +5474,8 @@ async function setupPrepareCommand(input) {
|
|
|
5479
5474
|
if (context.status !== "ok")
|
|
5480
5475
|
return context;
|
|
5481
5476
|
const task = context.task;
|
|
5482
|
-
if (task.site?.siteId !== config.siteId || task.run?.runId !== config.runId
|
|
5483
|
-
throw new SetupFailure("setup_contract_conflict", "The local configuration does not match this server task and
|
|
5477
|
+
if (task.site?.siteId !== config.siteId || task.run?.runId !== config.runId) {
|
|
5478
|
+
throw new SetupFailure("setup_contract_conflict", "The local configuration does not match this server task's site and setup run.");
|
|
5484
5479
|
}
|
|
5485
5480
|
if (task.run.status === "completed" || task.run.status === "ready_for_review")
|
|
5486
5481
|
return {
|
|
@@ -5597,7 +5592,8 @@ ${layoutSource.slice(0, point)}<SiteplaneBridge />${layoutSource.slice(point)}`)
|
|
|
5597
5592
|
files.set(nextPath, `import { withSiteplane } from "siteplane/next";
|
|
5598
5593
|
${nextSource.slice(0, expression.getStart(ast))}withSiteplane(${expression.getText(ast)})${nextSource.slice(expression.end)}`);
|
|
5599
5594
|
}
|
|
5600
|
-
|
|
5595
|
+
const guidePath = join10(directory, ".siteplane/setup-guide-v2.md");
|
|
5596
|
+
files.set(guidePath, `# Siteplane setup task v2
|
|
5601
5597
|
|
|
5602
5598
|
${task.goal}
|
|
5603
5599
|
|
|
@@ -5608,11 +5604,13 @@ ${task.discovery.rules.map((rule) => `- ${rule}`).join("\n")}
|
|
|
5608
5604
|
Run setup context for the current user instructions and authorized modules. Keep the user instructions distinct from your selection summary. Use setup deploy --wait for environment transfer and deployment; never read or print credential values. For image fields, withSiteplane prepares the exact Siteplane asset route and the website /siteplane-assets/ path in Next Image and existing img-src policies at build time. This grants no hosting permission. Preserve existing image sources; explicitly resolve custom loaders, redirect dependencies, or CSP written by middleware/proxy/meta tags before deployment. Use the provider-selected public SITEPLANE_SITE_ORIGIN for local builds.
|
|
5609
5605
|
`);
|
|
5610
5606
|
for (const [path, content] of files) {
|
|
5611
|
-
if (path === layoutPath || path === nextPath)
|
|
5607
|
+
if (path === layoutPath || path === nextPath || path === guidePath)
|
|
5612
5608
|
continue;
|
|
5613
5609
|
if (await exists3(path) && await readFile10(path, "utf8") !== content)
|
|
5614
5610
|
throw new SetupFailure("owned_file_conflict", `Preserve the existing ${relative6(directory, path)} and reconcile its integration with the current Siteplane guide before retrying.`);
|
|
5615
5611
|
}
|
|
5612
|
+
files.set(configPath, `${JSON.stringify({ ...config, packages: task.packages }, null, 2)}
|
|
5613
|
+
`);
|
|
5616
5614
|
for (const path of files.keys())
|
|
5617
5615
|
await assertSourcePath(directory, path);
|
|
5618
5616
|
const before = /* @__PURE__ */ new Map();
|
|
@@ -5729,7 +5727,7 @@ async function assertSourcePath(root, target) {
|
|
|
5729
5727
|
}
|
|
5730
5728
|
}
|
|
5731
5729
|
|
|
5732
|
-
//
|
|
5730
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-lock.js
|
|
5733
5731
|
import { randomUUID as randomUUID6 } from "crypto";
|
|
5734
5732
|
import { lstat as lstat3, mkdir as mkdir7, open as open4, readFile as readFile11, rm as rm4, rmdir } from "fs/promises";
|
|
5735
5733
|
import { resolve as resolve2 } from "path";
|
|
@@ -5792,7 +5790,7 @@ function locked() {
|
|
|
5792
5790
|
return new SetupFailure("setup_process_active", "Another setup process owns this repository. Wait for it to finish; a live lock is never replaced.");
|
|
5793
5791
|
}
|
|
5794
5792
|
|
|
5795
|
-
//
|
|
5793
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/config/build-provenance.js
|
|
5796
5794
|
import { createHash as createHash3 } from "crypto";
|
|
5797
5795
|
import { execFile as execFile3 } from "child_process";
|
|
5798
5796
|
import { lstat as lstat4, readFile as readFile12, writeFile as writeFile5, mkdir as mkdir8 } from "fs/promises";
|
|
@@ -5858,7 +5856,7 @@ async function writeBuildProvenance(checkout, revision) {
|
|
|
5858
5856
|
await writeFile5(target, JSON.stringify(record), { flag: "wx", mode: 384 });
|
|
5859
5857
|
}
|
|
5860
5858
|
|
|
5861
|
-
//
|
|
5859
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-deploy.js
|
|
5862
5860
|
import { createHash as createHash4, randomBytes as randomBytes2, randomUUID as randomUUID7 } from "crypto";
|
|
5863
5861
|
import { access as access6, mkdir as mkdir9, mkdtemp, rm as rm5, writeFile as writeFile6 } from "fs/promises";
|
|
5864
5862
|
import { tmpdir } from "os";
|
|
@@ -6329,7 +6327,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
6329
6327
|
}
|
|
6330
6328
|
}
|
|
6331
6329
|
|
|
6332
|
-
//
|
|
6330
|
+
// ../../../../../../Web-Dev/Programme/Siteplane/packages/cli/dist/commands/setup-claim.js
|
|
6333
6331
|
import { z as z41 } from "zod";
|
|
6334
6332
|
async function setupClaimCommand(input) {
|
|
6335
6333
|
const code = setupClaimCodeSchema.safeParse(input.code);
|
|
@@ -6411,6 +6409,2100 @@ function required(code, message) {
|
|
|
6411
6409
|
return { status: "action_required", code, message };
|
|
6412
6410
|
}
|
|
6413
6411
|
|
|
6412
|
+
// ../shared/dist/actors.js
|
|
6413
|
+
import { z as z42 } from "zod";
|
|
6414
|
+
var ACTOR_TYPES2 = ["workspace_member", "site_member", "agent", "setup_guest", "system"];
|
|
6415
|
+
var actorTypeSchema2 = z42.enum(ACTOR_TYPES2);
|
|
6416
|
+
|
|
6417
|
+
// ../shared/dist/analytics-defaults.js
|
|
6418
|
+
var ANALYTICS_BATCH_LIMITS2 = {
|
|
6419
|
+
maxEventsPerRequest: 50,
|
|
6420
|
+
maxJsonBodyBytes: 64 * 1024,
|
|
6421
|
+
maxPropertiesJsonBytes: 8 * 1024
|
|
6422
|
+
};
|
|
6423
|
+
var ANALYTICS_RETENTION_DEFAULTS2 = {
|
|
6424
|
+
enabledRawEventRetentionDays: 30,
|
|
6425
|
+
higherTierRawEventRetentionDays: 90,
|
|
6426
|
+
maxRawEventRetentionDaysWithoutAdr: 180,
|
|
6427
|
+
diagnosticsRetentionDays: 30,
|
|
6428
|
+
rateLimitBucketRetentionDays: 2,
|
|
6429
|
+
lateEventWindowHours: 72
|
|
6430
|
+
};
|
|
6431
|
+
|
|
6432
|
+
// ../shared/dist/analytics-booking.js
|
|
6433
|
+
import { z as z43 } from "zod";
|
|
6434
|
+
var bookingProviders2 = ["treatwell", "beautinda", "other"];
|
|
6435
|
+
var bookingAttributionModes2 = [
|
|
6436
|
+
"outbound_click_and_utm",
|
|
6437
|
+
"provider_redirect",
|
|
6438
|
+
"provider_reported",
|
|
6439
|
+
"manual_import",
|
|
6440
|
+
"verified_webhook"
|
|
6441
|
+
];
|
|
6442
|
+
var bookingSignalSources2 = [
|
|
6443
|
+
"outbound_click",
|
|
6444
|
+
"provider_redirect",
|
|
6445
|
+
"provider_reported",
|
|
6446
|
+
"manual_import",
|
|
6447
|
+
"verified_webhook"
|
|
6448
|
+
];
|
|
6449
|
+
var bookingAttributionConfidences2 = [
|
|
6450
|
+
"provider_redirect",
|
|
6451
|
+
"provider_reported",
|
|
6452
|
+
"manual_import",
|
|
6453
|
+
"verified_webhook"
|
|
6454
|
+
];
|
|
6455
|
+
var bookingProviderSchema2 = z43.enum(bookingProviders2);
|
|
6456
|
+
var bookingAttributionModeSchema2 = z43.enum(bookingAttributionModes2);
|
|
6457
|
+
var bookingSignalSourceSchema2 = z43.enum(bookingSignalSources2);
|
|
6458
|
+
var bookingAttributionConfidenceSchema2 = z43.enum(bookingAttributionConfidences2);
|
|
6459
|
+
var bookingProviderHintSchema2 = z43.object({
|
|
6460
|
+
bookingProvider: bookingProviderSchema2,
|
|
6461
|
+
bookingUrlHost: z43.string().min(1).max(253),
|
|
6462
|
+
bookingAttributionMode: bookingAttributionModeSchema2,
|
|
6463
|
+
utmContent: z43.string().min(1).max(200).optional(),
|
|
6464
|
+
successCondition: z43.literal("redirect_status=succeeded").optional()
|
|
6465
|
+
}).superRefine((hint, context) => {
|
|
6466
|
+
if (hint.successCondition !== void 0 && hint.bookingAttributionMode !== "provider_redirect") {
|
|
6467
|
+
context.addIssue({
|
|
6468
|
+
code: "custom",
|
|
6469
|
+
message: "successCondition is allowed only for provider_redirect booking hints.",
|
|
6470
|
+
path: ["successCondition"]
|
|
6471
|
+
});
|
|
6472
|
+
}
|
|
6473
|
+
});
|
|
6474
|
+
|
|
6475
|
+
// ../shared/dist/analytics-contract.js
|
|
6476
|
+
import { z as z44 } from "zod";
|
|
6477
|
+
var ANALYTICS_IMPORT_SCHEMA_VERSION2 = "analytics-provider-import.v1";
|
|
6478
|
+
var analyticsImportTargetIdSchema2 = z44.string().min(1).max(120).regex(/^[a-zA-Z][a-zA-Z0-9]*(?:[._-][a-zA-Z0-9]+)*$/u);
|
|
6479
|
+
var analyticsProviderImportRowSchema2 = z44.object({
|
|
6480
|
+
targetId: analyticsImportTargetIdSchema2,
|
|
6481
|
+
occurredAt: z44.string().datetime({ offset: true }),
|
|
6482
|
+
attributionConfidence: z44.enum(["provider_reported", "manual_import"]),
|
|
6483
|
+
providerEventId: z44.string().trim().min(1).max(160).optional(),
|
|
6484
|
+
idempotencyKey: z44.string().trim().min(1).max(160).optional()
|
|
6485
|
+
}).strict().superRefine((row, context) => {
|
|
6486
|
+
if (!row.providerEventId && !row.idempotencyKey) {
|
|
6487
|
+
context.addIssue({
|
|
6488
|
+
code: "custom",
|
|
6489
|
+
message: "Each import row requires providerEventId or idempotencyKey.",
|
|
6490
|
+
path: ["providerEventId"]
|
|
6491
|
+
});
|
|
6492
|
+
}
|
|
6493
|
+
});
|
|
6494
|
+
var analyticsProviderImportSchema2 = z44.object({
|
|
6495
|
+
schemaVersion: z44.literal(ANALYTICS_IMPORT_SCHEMA_VERSION2),
|
|
6496
|
+
provider: z44.enum(["treatwell", "beautinda", "other"]),
|
|
6497
|
+
sourceName: z44.string().trim().min(1).max(160).optional(),
|
|
6498
|
+
rows: z44.array(analyticsProviderImportRowSchema2).min(1).max(1e3)
|
|
6499
|
+
}).strict();
|
|
6500
|
+
|
|
6501
|
+
// ../shared/dist/analytics-config.js
|
|
6502
|
+
import { z as z45 } from "zod";
|
|
6503
|
+
var ANALYTICS_CONFIG_LEASE_MS2 = 6e4;
|
|
6504
|
+
var analyticsMeasurementConfigSchema2 = z45.object({
|
|
6505
|
+
version: z45.literal(1),
|
|
6506
|
+
installationGeneration: z45.number().int().positive(),
|
|
6507
|
+
configRevision: z45.number().int().positive(),
|
|
6508
|
+
effectiveSiteMode: z45.enum(["disabled", "session_only", "full_analytics"]),
|
|
6509
|
+
measurementEnabled: z45.boolean(),
|
|
6510
|
+
issuedAt: z45.string().datetime({ offset: true }),
|
|
6511
|
+
expiresAt: z45.string().datetime({ offset: true })
|
|
6512
|
+
}).strict().superRefine((config, context) => {
|
|
6513
|
+
const lifetime = Date.parse(config.expiresAt) - Date.parse(config.issuedAt);
|
|
6514
|
+
if (lifetime <= 0 || lifetime > ANALYTICS_CONFIG_LEASE_MS2) {
|
|
6515
|
+
context.addIssue({
|
|
6516
|
+
code: "custom",
|
|
6517
|
+
path: ["expiresAt"],
|
|
6518
|
+
message: "Measurement permission must expire within 60 seconds."
|
|
6519
|
+
});
|
|
6520
|
+
}
|
|
6521
|
+
if (config.measurementEnabled !== (config.effectiveSiteMode !== "disabled")) {
|
|
6522
|
+
context.addIssue({
|
|
6523
|
+
code: "custom",
|
|
6524
|
+
path: ["measurementEnabled"],
|
|
6525
|
+
message: "Measurement permission must match the effective site mode."
|
|
6526
|
+
});
|
|
6527
|
+
}
|
|
6528
|
+
});
|
|
6529
|
+
|
|
6530
|
+
// ../shared/dist/analytics-events.js
|
|
6531
|
+
import { z as z46 } from "zod";
|
|
6532
|
+
var ANALYTICS_SCHEMA_VERSION2 = "analytics.v1";
|
|
6533
|
+
var ANALYTICS_KEY_PATTERN = /^(pk|sk)_siteplane_([A-Za-z0-9_-]{16})_[A-Za-z0-9_-]{43}$/;
|
|
6534
|
+
var analyticsSessionIdSchema2 = z46.string().regex(/^cpa_s_[a-f0-9]{32}$/u);
|
|
6535
|
+
var analyticsVisitorIdSchema2 = z46.string().regex(/^cpa_v_[a-f0-9]{32}$/u);
|
|
6536
|
+
var analyticsPersistedIdentityHashSchema2 = z46.string().regex(/^[a-f0-9]{64}$/u);
|
|
6537
|
+
var analyticsEventNames2 = [
|
|
6538
|
+
"page_view",
|
|
6539
|
+
"section_view",
|
|
6540
|
+
"cta_click",
|
|
6541
|
+
"outbound_click",
|
|
6542
|
+
"email_click",
|
|
6543
|
+
"phone_click",
|
|
6544
|
+
"file_download",
|
|
6545
|
+
"form_start",
|
|
6546
|
+
"form_submit",
|
|
6547
|
+
"form_error",
|
|
6548
|
+
"lead_created",
|
|
6549
|
+
"checkout_started",
|
|
6550
|
+
"conversion",
|
|
6551
|
+
"checkout_completed",
|
|
6552
|
+
"payment_succeeded",
|
|
6553
|
+
"subscription_started",
|
|
6554
|
+
"purchase_completed",
|
|
6555
|
+
"trial_started"
|
|
6556
|
+
];
|
|
6557
|
+
var serverOnlyAnalyticsEvents2 = [
|
|
6558
|
+
"checkout_completed",
|
|
6559
|
+
"payment_succeeded",
|
|
6560
|
+
"subscription_started",
|
|
6561
|
+
"purchase_completed",
|
|
6562
|
+
"trial_started"
|
|
6563
|
+
];
|
|
6564
|
+
var analyticsEventSources2 = [
|
|
6565
|
+
"browser",
|
|
6566
|
+
"server",
|
|
6567
|
+
"test",
|
|
6568
|
+
"editor_preview",
|
|
6569
|
+
"system"
|
|
6570
|
+
];
|
|
6571
|
+
var analyticsIngestionChannels2 = [
|
|
6572
|
+
"browser_collector",
|
|
6573
|
+
"server_sdk",
|
|
6574
|
+
"provider_endpoint",
|
|
6575
|
+
"provider_import",
|
|
6576
|
+
"test",
|
|
6577
|
+
"editor_preview",
|
|
6578
|
+
"system_job"
|
|
6579
|
+
];
|
|
6580
|
+
var analyticsTargetTypes2 = [
|
|
6581
|
+
"cta",
|
|
6582
|
+
"form",
|
|
6583
|
+
"section",
|
|
6584
|
+
"file",
|
|
6585
|
+
"link",
|
|
6586
|
+
"conversion",
|
|
6587
|
+
"server_conversion"
|
|
6588
|
+
];
|
|
6589
|
+
var analyticsDataAttributeEvents2 = [
|
|
6590
|
+
"cta_click",
|
|
6591
|
+
"outbound_click",
|
|
6592
|
+
"email_click",
|
|
6593
|
+
"phone_click",
|
|
6594
|
+
"file_download",
|
|
6595
|
+
"section_view",
|
|
6596
|
+
"checkout_started",
|
|
6597
|
+
"form"
|
|
6598
|
+
];
|
|
6599
|
+
var analyticsDeviceTypes2 = [
|
|
6600
|
+
"desktop",
|
|
6601
|
+
"tablet",
|
|
6602
|
+
"mobile",
|
|
6603
|
+
"unknown"
|
|
6604
|
+
];
|
|
6605
|
+
var analyticsBotClassifications2 = [
|
|
6606
|
+
"normal",
|
|
6607
|
+
"known_bot",
|
|
6608
|
+
"suspicious",
|
|
6609
|
+
"invalid"
|
|
6610
|
+
];
|
|
6611
|
+
var analyticsValidityStatuses2 = [
|
|
6612
|
+
"accepted",
|
|
6613
|
+
"rejected",
|
|
6614
|
+
"ignored"
|
|
6615
|
+
];
|
|
6616
|
+
var analyticsEventNameSchema2 = z46.enum(analyticsEventNames2);
|
|
6617
|
+
var serverOnlyAnalyticsEventSchema2 = z46.enum(serverOnlyAnalyticsEvents2);
|
|
6618
|
+
var analyticsEventSourceSchema2 = z46.enum(analyticsEventSources2);
|
|
6619
|
+
var analyticsIngestionChannelSchema2 = z46.enum(analyticsIngestionChannels2);
|
|
6620
|
+
var analyticsTargetTypeSchema2 = z46.enum(analyticsTargetTypes2);
|
|
6621
|
+
var analyticsDataAttributeEventSchema2 = z46.enum(analyticsDataAttributeEvents2);
|
|
6622
|
+
var analyticsDeviceTypeSchema2 = z46.enum(analyticsDeviceTypes2);
|
|
6623
|
+
var analyticsBotClassificationSchema2 = z46.enum(analyticsBotClassifications2);
|
|
6624
|
+
var analyticsValidityStatusSchema2 = z46.enum(analyticsValidityStatuses2);
|
|
6625
|
+
var analyticsPropertiesSchema2 = z46.record(z46.string(), z46.unknown());
|
|
6626
|
+
var analyticsTimestampSchema2 = z46.string().datetime({ offset: true });
|
|
6627
|
+
var analyticsBrowserEventSchema2 = z46.object({
|
|
6628
|
+
eventId: z46.string().min(1).max(160),
|
|
6629
|
+
installationGeneration: z46.number().int().positive().optional(),
|
|
6630
|
+
measurementMode: z46.enum(["session_only", "full_analytics"]).optional(),
|
|
6631
|
+
eventName: analyticsEventNameSchema2,
|
|
6632
|
+
eventSource: analyticsEventSourceSchema2.optional().default("browser"),
|
|
6633
|
+
targetId: z46.string().min(1).max(160).optional(),
|
|
6634
|
+
targetType: analyticsTargetTypeSchema2.optional(),
|
|
6635
|
+
visitorId: analyticsVisitorIdSchema2.optional(),
|
|
6636
|
+
sessionId: analyticsSessionIdSchema2,
|
|
6637
|
+
idempotencyKey: z46.string().min(1).max(240).optional(),
|
|
6638
|
+
occurredAt: analyticsTimestampSchema2,
|
|
6639
|
+
pageUrl: z46.string().url().max(2048).optional(),
|
|
6640
|
+
pagePath: z46.string().min(1).max(1024).optional(),
|
|
6641
|
+
routeTemplate: z46.string().min(1).max(1024).optional(),
|
|
6642
|
+
referrer: z46.string().url().max(2048).optional(),
|
|
6643
|
+
utmSource: z46.string().min(1).max(200).optional(),
|
|
6644
|
+
utmMedium: z46.string().min(1).max(200).optional(),
|
|
6645
|
+
utmCampaign: z46.string().min(1).max(200).optional(),
|
|
6646
|
+
utmContent: z46.string().min(1).max(200).optional(),
|
|
6647
|
+
utmTerm: z46.string().min(1).max(200).optional(),
|
|
6648
|
+
deviceType: analyticsDeviceTypeSchema2.optional(),
|
|
6649
|
+
browserName: z46.string().min(1).max(120).optional(),
|
|
6650
|
+
osName: z46.string().min(1).max(120).optional(),
|
|
6651
|
+
country: z46.string().min(1).max(80).optional(),
|
|
6652
|
+
region: z46.string().min(1).max(120).optional(),
|
|
6653
|
+
properties: analyticsPropertiesSchema2.optional().default({})
|
|
6654
|
+
}).superRefine((event, context) => {
|
|
6655
|
+
if (isServerOnlyAnalyticsEvent2(event.eventName)) {
|
|
6656
|
+
context.addIssue({
|
|
6657
|
+
code: "custom",
|
|
6658
|
+
message: "Browser analytics payloads cannot contain server-only events.",
|
|
6659
|
+
path: ["eventName"]
|
|
6660
|
+
});
|
|
6661
|
+
}
|
|
6662
|
+
if (event.eventSource === "server" || event.eventSource === "system") {
|
|
6663
|
+
context.addIssue({
|
|
6664
|
+
code: "custom",
|
|
6665
|
+
message: "Browser analytics payloads cannot use server/system sources.",
|
|
6666
|
+
path: ["eventSource"]
|
|
6667
|
+
});
|
|
6668
|
+
}
|
|
6669
|
+
if (event.targetType === "server_conversion") {
|
|
6670
|
+
context.addIssue({
|
|
6671
|
+
code: "custom",
|
|
6672
|
+
message: "Browser analytics payloads cannot use server conversion targets.",
|
|
6673
|
+
path: ["targetType"]
|
|
6674
|
+
});
|
|
6675
|
+
}
|
|
6676
|
+
});
|
|
6677
|
+
var analyticsBrowserEventPayloadSchema2 = z46.object({
|
|
6678
|
+
siteKey: z46.string().min(1),
|
|
6679
|
+
schemaVersion: z46.literal(ANALYTICS_SCHEMA_VERSION2),
|
|
6680
|
+
mode: z46.enum(["live", "test"]).optional().default("live"),
|
|
6681
|
+
events: z46.array(analyticsBrowserEventSchema2).min(1).max(50)
|
|
6682
|
+
});
|
|
6683
|
+
var analyticsNormalizedEventBaseSchema2 = z46.object({
|
|
6684
|
+
site_id: z46.string().uuid(),
|
|
6685
|
+
event_id: z46.string().min(1).max(160),
|
|
6686
|
+
schema_version: z46.literal(ANALYTICS_SCHEMA_VERSION2),
|
|
6687
|
+
event_name: analyticsEventNameSchema2,
|
|
6688
|
+
event_source: analyticsEventSourceSchema2,
|
|
6689
|
+
ingestion_channel: analyticsIngestionChannelSchema2,
|
|
6690
|
+
target_id: z46.string().min(1).max(160).nullable().optional(),
|
|
6691
|
+
target_type: analyticsTargetTypeSchema2.nullable().optional(),
|
|
6692
|
+
dedupe_key: z46.string().regex(/^analytics_dedupe_v1_[a-f0-9]{64}$/u).nullable().optional(),
|
|
6693
|
+
idempotency_key: z46.string().min(1).max(240).nullable().optional(),
|
|
6694
|
+
bot_classification: analyticsBotClassificationSchema2,
|
|
6695
|
+
validity_status: analyticsValidityStatusSchema2,
|
|
6696
|
+
rejection_reason: z46.string().min(1).max(240).nullable().optional(),
|
|
6697
|
+
occurred_at: analyticsTimestampSchema2,
|
|
6698
|
+
received_at: analyticsTimestampSchema2,
|
|
6699
|
+
page_url: z46.string().url().max(2048).nullable().optional(),
|
|
6700
|
+
page_path: z46.string().min(1).max(1024).nullable().optional(),
|
|
6701
|
+
route_template: z46.string().min(1).max(1024).nullable().optional(),
|
|
6702
|
+
referrer: z46.string().url().max(2048).nullable().optional(),
|
|
6703
|
+
utm_source: z46.string().min(1).max(200).nullable().optional(),
|
|
6704
|
+
utm_medium: z46.string().min(1).max(200).nullable().optional(),
|
|
6705
|
+
utm_campaign: z46.string().min(1).max(200).nullable().optional(),
|
|
6706
|
+
utm_content: z46.string().min(1).max(200).nullable().optional(),
|
|
6707
|
+
utm_term: z46.string().min(1).max(200).nullable().optional(),
|
|
6708
|
+
country: z46.string().min(1).max(80).nullable().optional(),
|
|
6709
|
+
region: z46.string().min(1).max(120).nullable().optional(),
|
|
6710
|
+
device_type: analyticsDeviceTypeSchema2,
|
|
6711
|
+
browser_name: z46.string().min(1).max(120).nullable().optional(),
|
|
6712
|
+
os_name: z46.string().min(1).max(120).nullable().optional(),
|
|
6713
|
+
provider: z46.string().min(1).max(120).nullable().optional(),
|
|
6714
|
+
provider_event_id: z46.string().min(1).max(240).nullable().optional(),
|
|
6715
|
+
properties: analyticsPropertiesSchema2
|
|
6716
|
+
});
|
|
6717
|
+
var analyticsRawNormalizedEventSchema2 = analyticsNormalizedEventBaseSchema2.extend({
|
|
6718
|
+
visitor_id: analyticsVisitorIdSchema2.nullable().optional(),
|
|
6719
|
+
session_id: analyticsSessionIdSchema2.nullable().optional()
|
|
6720
|
+
});
|
|
6721
|
+
var analyticsNormalizedEventSchema2 = analyticsNormalizedEventBaseSchema2.extend({
|
|
6722
|
+
visitor_id: analyticsPersistedIdentityHashSchema2.nullable().optional(),
|
|
6723
|
+
session_id: analyticsPersistedIdentityHashSchema2.nullable().optional()
|
|
6724
|
+
});
|
|
6725
|
+
function isServerOnlyAnalyticsEvent2(eventName) {
|
|
6726
|
+
return serverOnlyAnalyticsEvents2.includes(eventName);
|
|
6727
|
+
}
|
|
6728
|
+
function getAnalyticsKeyLookup(rawKey) {
|
|
6729
|
+
const match = ANALYTICS_KEY_PATTERN.exec(rawKey);
|
|
6730
|
+
return match ? `${match[1]}_siteplane_${match[2]}` : null;
|
|
6731
|
+
}
|
|
6732
|
+
|
|
6733
|
+
// ../shared/dist/analytics-manifest.js
|
|
6734
|
+
import { z as z47 } from "zod";
|
|
6735
|
+
var analyticsTargetIdSchema2 = z47.string().min(1).max(120).regex(/^[a-zA-Z][a-zA-Z0-9]*(?:[._-][a-zA-Z0-9]+)*$/u, {
|
|
6736
|
+
message: "Analytics target IDs must be stable identifiers without whitespace or visible copy."
|
|
6737
|
+
});
|
|
6738
|
+
var analyticsManifestRecordSchema2 = z47.record(z47.string(), z47.unknown());
|
|
6739
|
+
var analyticsFormPurposes2 = [
|
|
6740
|
+
"contact",
|
|
6741
|
+
"lead",
|
|
6742
|
+
"newsletter",
|
|
6743
|
+
"search",
|
|
6744
|
+
"login",
|
|
6745
|
+
"other"
|
|
6746
|
+
];
|
|
6747
|
+
var analyticsFormPurposeSchema2 = z47.enum(analyticsFormPurposes2);
|
|
6748
|
+
var analyticsManifestRouteSchema2 = z47.object({
|
|
6749
|
+
path: z47.string().min(1).max(1024),
|
|
6750
|
+
pageType: z47.string().min(1).max(120).optional(),
|
|
6751
|
+
label: z47.string().min(1).max(200).optional()
|
|
6752
|
+
}).passthrough();
|
|
6753
|
+
var analyticsManifestTargetSchema2 = z47.object({
|
|
6754
|
+
id: analyticsTargetIdSchema2,
|
|
6755
|
+
type: analyticsTargetTypeSchema2,
|
|
6756
|
+
event: analyticsEventNameSchema2.optional(),
|
|
6757
|
+
events: z47.array(analyticsEventNameSchema2).min(1).max(20).optional(),
|
|
6758
|
+
route: z47.string().min(1).max(1024).optional(),
|
|
6759
|
+
label: z47.string().min(1).max(200).optional(),
|
|
6760
|
+
description: z47.string().min(1).max(1e3).optional(),
|
|
6761
|
+
autoActive: z47.boolean().optional(),
|
|
6762
|
+
sourceHints: analyticsManifestRecordSchema2.optional()
|
|
6763
|
+
}).passthrough().superRefine((target, context) => {
|
|
6764
|
+
if (target.event === void 0 && target.events === void 0) {
|
|
6765
|
+
context.addIssue({
|
|
6766
|
+
code: "custom",
|
|
6767
|
+
message: "Analytics targets require event or events.",
|
|
6768
|
+
path: ["event"]
|
|
6769
|
+
});
|
|
6770
|
+
}
|
|
6771
|
+
if (target.event !== void 0 && target.events !== void 0) {
|
|
6772
|
+
context.addIssue({
|
|
6773
|
+
code: "custom",
|
|
6774
|
+
message: "Analytics targets must use event or events, never both.",
|
|
6775
|
+
path: ["events"]
|
|
6776
|
+
});
|
|
6777
|
+
}
|
|
6778
|
+
if (target.type === "form" && !analyticsFormPurposeSchema2.safeParse(target.sourceHints?.formPurpose).success) {
|
|
6779
|
+
context.addIssue({
|
|
6780
|
+
code: "custom",
|
|
6781
|
+
message: "Analytics form targets require a typed sourceHints.formPurpose.",
|
|
6782
|
+
path: ["sourceHints", "formPurpose"]
|
|
6783
|
+
});
|
|
6784
|
+
}
|
|
6785
|
+
});
|
|
6786
|
+
var analyticsManifestSchema2 = z47.object({
|
|
6787
|
+
schemaVersion: z47.literal(ANALYTICS_SCHEMA_VERSION2),
|
|
6788
|
+
siteId: z47.string().min(1),
|
|
6789
|
+
siteKeyRef: z47.string().regex(/^env:[A-Z][A-Z0-9_]*$/u, {
|
|
6790
|
+
message: "siteKeyRef must be an environment-variable reference."
|
|
6791
|
+
}),
|
|
6792
|
+
siteKeyLookup: z47.string().regex(/^pk_siteplane_[A-Za-z0-9_-]{16}$/),
|
|
6793
|
+
routes: z47.array(analyticsManifestRouteSchema2),
|
|
6794
|
+
targets: z47.array(analyticsManifestTargetSchema2),
|
|
6795
|
+
metadata: analyticsManifestRecordSchema2.optional(),
|
|
6796
|
+
siteKey: z47.string().optional(),
|
|
6797
|
+
secretKey: z47.string().optional(),
|
|
6798
|
+
rawKey: z47.string().optional(),
|
|
6799
|
+
token: z47.string().optional(),
|
|
6800
|
+
accessToken: z47.string().optional()
|
|
6801
|
+
}).passthrough().superRefine((manifest, context) => {
|
|
6802
|
+
const targetIds = /* @__PURE__ */ new Set();
|
|
6803
|
+
for (const [index, target] of manifest.targets.entries()) {
|
|
6804
|
+
if (targetIds.has(target.id)) {
|
|
6805
|
+
context.addIssue({
|
|
6806
|
+
code: "custom",
|
|
6807
|
+
message: `Duplicate analytics target ID: ${target.id}`,
|
|
6808
|
+
path: ["targets", index, "id"]
|
|
6809
|
+
});
|
|
6810
|
+
}
|
|
6811
|
+
targetIds.add(target.id);
|
|
6812
|
+
}
|
|
6813
|
+
for (const issue of findUnsafeSecretReferences2(manifest)) {
|
|
6814
|
+
context.addIssue({
|
|
6815
|
+
code: "custom",
|
|
6816
|
+
message: "Raw secret material is not allowed in analytics manifests.",
|
|
6817
|
+
path: issue
|
|
6818
|
+
});
|
|
6819
|
+
}
|
|
6820
|
+
});
|
|
6821
|
+
var secretValuePattern2 = /(?:\bsk_(?:live|test)_|\bcpb_|\bpmt_(?:pc|setup|cli)_|\bservice_role\b|bearer\s+[a-z0-9._~-]+)/iu;
|
|
6822
|
+
function findUnsafeSecretReferences2(value, path = []) {
|
|
6823
|
+
if (Array.isArray(value)) {
|
|
6824
|
+
return value.flatMap((item, index) => findUnsafeSecretReferences2(item, [...path, index]));
|
|
6825
|
+
}
|
|
6826
|
+
if (!isPlainRecord2(value)) {
|
|
6827
|
+
return [];
|
|
6828
|
+
}
|
|
6829
|
+
return Object.entries(value).flatMap(([key, childValue]) => {
|
|
6830
|
+
const childPath = [...path, key];
|
|
6831
|
+
const referenceLikeKey = /(?:ref|lookup|prefix)$/iu.test(key);
|
|
6832
|
+
const unsafeHere = referenceLikeKey && typeof childValue === "string" && secretValuePattern2.test(childValue);
|
|
6833
|
+
return [
|
|
6834
|
+
...unsafeHere ? [childPath] : [],
|
|
6835
|
+
...findUnsafeSecretReferences2(childValue, childPath)
|
|
6836
|
+
];
|
|
6837
|
+
});
|
|
6838
|
+
}
|
|
6839
|
+
function isPlainRecord2(value) {
|
|
6840
|
+
return typeof value === "object" && value !== null;
|
|
6841
|
+
}
|
|
6842
|
+
|
|
6843
|
+
// ../shared/dist/analytics-metrics.js
|
|
6844
|
+
import { z as z48 } from "zod";
|
|
6845
|
+
var analyticsVisitorQualities2 = ["exact", "estimated"];
|
|
6846
|
+
var analyticsVisitorQualitySchema2 = z48.enum(analyticsVisitorQualities2);
|
|
6847
|
+
var analyticsKpiKeys2 = [
|
|
6848
|
+
"pageViews",
|
|
6849
|
+
"sessions",
|
|
6850
|
+
"visitors",
|
|
6851
|
+
"estimatedVisitors",
|
|
6852
|
+
"inquiries",
|
|
6853
|
+
"leads",
|
|
6854
|
+
"conversions",
|
|
6855
|
+
"conversionRate",
|
|
6856
|
+
"inquiryRate"
|
|
6857
|
+
];
|
|
6858
|
+
var analyticsKpiKeySchema2 = z48.enum(analyticsKpiKeys2);
|
|
6859
|
+
|
|
6860
|
+
// ../shared/dist/analytics-privacy.js
|
|
6861
|
+
var serverPropertySchemas2 = {
|
|
6862
|
+
lead_created: {
|
|
6863
|
+
conversionId: "identifier",
|
|
6864
|
+
formId: "identifier",
|
|
6865
|
+
formType: "enum",
|
|
6866
|
+
customerRef: "identifier"
|
|
6867
|
+
},
|
|
6868
|
+
conversion: {
|
|
6869
|
+
conversionId: "identifier",
|
|
6870
|
+
conversionType: "enum",
|
|
6871
|
+
attributionConfidence: "enum",
|
|
6872
|
+
bookingSignalSource: "enum",
|
|
6873
|
+
bookingProvider: "enum",
|
|
6874
|
+
redirectStatus: "enum",
|
|
6875
|
+
importId: "identifier"
|
|
6876
|
+
},
|
|
6877
|
+
checkout_completed: revenuePropertySchema2(),
|
|
6878
|
+
payment_succeeded: revenuePropertySchema2(),
|
|
6879
|
+
subscription_started: revenuePropertySchema2(),
|
|
6880
|
+
purchase_completed: revenuePropertySchema2(),
|
|
6881
|
+
trial_started: revenuePropertySchema2()
|
|
6882
|
+
};
|
|
6883
|
+
function revenuePropertySchema2() {
|
|
6884
|
+
return {
|
|
6885
|
+
conversionId: "identifier",
|
|
6886
|
+
checkoutId: "identifier",
|
|
6887
|
+
customerRef: "identifier",
|
|
6888
|
+
amount: "amount",
|
|
6889
|
+
currency: "enum",
|
|
6890
|
+
planId: "identifier",
|
|
6891
|
+
productId: "identifier"
|
|
6892
|
+
};
|
|
6893
|
+
}
|
|
6894
|
+
|
|
6895
|
+
// ../shared/dist/assets.js
|
|
6896
|
+
import { z as z49 } from "zod";
|
|
6897
|
+
var ASSET_STAGES2 = ["staging", "final", "deleted"];
|
|
6898
|
+
var ASSET_VISIBILITIES2 = ["private", "public", "deleted"];
|
|
6899
|
+
var ASSET_USAGE_ENTITY_TYPES2 = [
|
|
6900
|
+
"branding",
|
|
6901
|
+
"draft",
|
|
6902
|
+
"change_set",
|
|
6903
|
+
"published_value"
|
|
6904
|
+
];
|
|
6905
|
+
var assetStageSchema2 = z49.enum(ASSET_STAGES2);
|
|
6906
|
+
var assetVisibilitySchema2 = z49.enum(ASSET_VISIBILITIES2);
|
|
6907
|
+
var assetUsageEntityTypeSchema2 = z49.enum(ASSET_USAGE_ENTITY_TYPES2);
|
|
6908
|
+
var brandingAccentColorSchema2 = z49.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/);
|
|
6909
|
+
|
|
6910
|
+
// ../shared/dist/booking-contracts.js
|
|
6911
|
+
import { z as z50 } from "zod";
|
|
6912
|
+
var bookingStatuses2 = [
|
|
6913
|
+
"pending_payment",
|
|
6914
|
+
"confirmed",
|
|
6915
|
+
"payment_expired",
|
|
6916
|
+
"cancelled",
|
|
6917
|
+
"no_show"
|
|
6918
|
+
];
|
|
6919
|
+
var bookingPaymentStatuses2 = [
|
|
6920
|
+
"payment_not_required",
|
|
6921
|
+
"checkout_open",
|
|
6922
|
+
"processing",
|
|
6923
|
+
"succeeded",
|
|
6924
|
+
"failed",
|
|
6925
|
+
"cancelled",
|
|
6926
|
+
"expired"
|
|
6927
|
+
];
|
|
6928
|
+
var bookingAccountReadinessStatuses2 = [
|
|
6929
|
+
"not_started",
|
|
6930
|
+
"setup_required",
|
|
6931
|
+
"under_review",
|
|
6932
|
+
"payments_ready",
|
|
6933
|
+
"payouts_restricted",
|
|
6934
|
+
"payments_restricted",
|
|
6935
|
+
"deactivated"
|
|
6936
|
+
];
|
|
6937
|
+
var bookingRefundStatuses2 = [
|
|
6938
|
+
"none",
|
|
6939
|
+
"pending",
|
|
6940
|
+
"partially_refunded",
|
|
6941
|
+
"refunded",
|
|
6942
|
+
"failed"
|
|
6943
|
+
];
|
|
6944
|
+
var bookingDisputeStatuses2 = [
|
|
6945
|
+
"none",
|
|
6946
|
+
"needs_response",
|
|
6947
|
+
"under_review",
|
|
6948
|
+
"won",
|
|
6949
|
+
"lost"
|
|
6950
|
+
];
|
|
6951
|
+
var bookingPaymentModes2 = [
|
|
6952
|
+
"onsite_only",
|
|
6953
|
+
"online_required",
|
|
6954
|
+
"customer_choice"
|
|
6955
|
+
];
|
|
6956
|
+
var bookingPaymentCollectionTypes2 = [
|
|
6957
|
+
"full_amount",
|
|
6958
|
+
"deposit_percent"
|
|
6959
|
+
];
|
|
6960
|
+
var bookingResourceKinds2 = [
|
|
6961
|
+
"person",
|
|
6962
|
+
"room",
|
|
6963
|
+
"equipment",
|
|
6964
|
+
"other"
|
|
6965
|
+
];
|
|
6966
|
+
var bookingStatusSchema2 = z50.enum(bookingStatuses2);
|
|
6967
|
+
var bookingPaymentStatusSchema2 = z50.enum(bookingPaymentStatuses2);
|
|
6968
|
+
var bookingAccountReadinessStatusSchema2 = z50.enum(bookingAccountReadinessStatuses2);
|
|
6969
|
+
var bookingRefundStatusSchema2 = z50.enum(bookingRefundStatuses2);
|
|
6970
|
+
var bookingDisputeStatusSchema2 = z50.enum(bookingDisputeStatuses2);
|
|
6971
|
+
var bookingPaymentModeSchema2 = z50.enum(bookingPaymentModes2);
|
|
6972
|
+
var bookingPaymentCollectionTypeSchema2 = z50.enum(bookingPaymentCollectionTypes2);
|
|
6973
|
+
var bookingPaymentCollectionSchema2 = z50.discriminatedUnion("type", [
|
|
6974
|
+
z50.object({ type: z50.literal("full_amount") }).strict(),
|
|
6975
|
+
z50.object({
|
|
6976
|
+
type: z50.literal("deposit_percent"),
|
|
6977
|
+
depositPercent: z50.number().int().min(10).max(90)
|
|
6978
|
+
}).strict()
|
|
6979
|
+
]);
|
|
6980
|
+
var bookingPaymentChoices2 = ["onsite", "online"];
|
|
6981
|
+
var bookingPaymentChoiceSchema2 = z50.enum(bookingPaymentChoices2);
|
|
6982
|
+
var bookingPaymentSnapshotSchema2 = z50.object({
|
|
6983
|
+
snapshotId: z50.string().uuid(),
|
|
6984
|
+
snapshotVersion: z50.number().int().positive(),
|
|
6985
|
+
currency: z50.literal("EUR"),
|
|
6986
|
+
totalAmountCents: z50.number().int().min(0),
|
|
6987
|
+
onlineAmountCents: z50.number().int().min(0),
|
|
6988
|
+
onsiteRemainderCents: z50.number().int().min(0),
|
|
6989
|
+
maxStripeRefundAmountCents: z50.number().int().min(0)
|
|
6990
|
+
}).strict().superRefine((snapshot, context) => {
|
|
6991
|
+
if (snapshot.onlineAmountCents + snapshot.onsiteRemainderCents !== snapshot.totalAmountCents) {
|
|
6992
|
+
context.addIssue({
|
|
6993
|
+
code: "custom",
|
|
6994
|
+
message: "Payment snapshot amounts must add up to the total amount."
|
|
6995
|
+
});
|
|
6996
|
+
}
|
|
6997
|
+
if (snapshot.maxStripeRefundAmountCents > snapshot.onlineAmountCents) {
|
|
6998
|
+
context.addIssue({
|
|
6999
|
+
code: "custom",
|
|
7000
|
+
message: "Stripe refund basis cannot exceed the online amount."
|
|
7001
|
+
});
|
|
7002
|
+
}
|
|
7003
|
+
});
|
|
7004
|
+
var bookingServiceVariantSchema2 = z50.object({
|
|
7005
|
+
id: z50.string().uuid(),
|
|
7006
|
+
name: z50.string().trim().min(1).max(120),
|
|
7007
|
+
durationMinutes: z50.number().int().min(1).max(1440),
|
|
7008
|
+
priceCents: z50.number().int().min(0).nullable()
|
|
7009
|
+
}).strict();
|
|
7010
|
+
var bookingServiceVariantsSchema2 = z50.array(bookingServiceVariantSchema2).min(1).max(20);
|
|
7011
|
+
var isoDateSchema2 = z50.string().regex(/^\d{4}-\d{2}-\d{2}$/);
|
|
7012
|
+
var utcDateTimeSchema2 = z50.string().datetime();
|
|
7013
|
+
var bookingLocalTimeSchema2 = z50.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d$/);
|
|
7014
|
+
var bookingAvailabilityIntervalsSchema2 = z50.array(z50.object({
|
|
7015
|
+
start: bookingLocalTimeSchema2,
|
|
7016
|
+
end: bookingLocalTimeSchema2
|
|
7017
|
+
}).strict().refine((interval) => interval.end > interval.start)).superRefine((intervals, context) => {
|
|
7018
|
+
const sorted = [...intervals].sort((left, right) => left.start.localeCompare(right.start));
|
|
7019
|
+
for (let index = 1; index < sorted.length; index += 1) {
|
|
7020
|
+
if (sorted[index].start < sorted[index - 1].end) {
|
|
7021
|
+
context.addIssue({
|
|
7022
|
+
code: "custom",
|
|
7023
|
+
message: "Booking availability intervals must not overlap."
|
|
7024
|
+
});
|
|
7025
|
+
return;
|
|
7026
|
+
}
|
|
7027
|
+
}
|
|
7028
|
+
});
|
|
7029
|
+
var bookingPublicConfigSchema2 = z50.object({
|
|
7030
|
+
site: z50.object({
|
|
7031
|
+
displayName: z50.string().trim().min(1),
|
|
7032
|
+
timezone: z50.string().trim().min(1),
|
|
7033
|
+
locale: z50.string().trim().min(2),
|
|
7034
|
+
bookingPageSlug: z50.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).min(2).max(64),
|
|
7035
|
+
privacyUrl: z50.string().url().nullable()
|
|
7036
|
+
}),
|
|
7037
|
+
branding: z50.object({
|
|
7038
|
+
logoUrl: z50.string().url().nullable(),
|
|
7039
|
+
accentColor: z50.string().trim().min(1).nullable()
|
|
7040
|
+
}),
|
|
7041
|
+
settings: z50.object({
|
|
7042
|
+
slotIntervalMinutes: z50.number().int().positive(),
|
|
7043
|
+
minLeadMinutes: z50.number().int().min(0),
|
|
7044
|
+
maxAdvanceDays: z50.number().int().min(1),
|
|
7045
|
+
requirePhone: z50.boolean(),
|
|
7046
|
+
collectNote: z50.boolean(),
|
|
7047
|
+
confirmationMessage: z50.string().nullable()
|
|
7048
|
+
}),
|
|
7049
|
+
/** Freitexte des Salons, im Kassen-Schritt vor der Bestaetigung sichtbar. */
|
|
7050
|
+
policies: z50.object({
|
|
7051
|
+
cancellation: z50.string().nullable(),
|
|
7052
|
+
lateArrival: z50.string().nullable()
|
|
7053
|
+
}),
|
|
7054
|
+
payment: z50.object({
|
|
7055
|
+
mode: bookingPaymentModeSchema2,
|
|
7056
|
+
collection: bookingPaymentCollectionSchema2,
|
|
7057
|
+
onlinePaymentsReady: z50.boolean()
|
|
7058
|
+
}).strict(),
|
|
7059
|
+
serviceCategories: z50.array(z50.object({
|
|
7060
|
+
id: z50.string().uuid(),
|
|
7061
|
+
name: z50.string().trim().min(1),
|
|
7062
|
+
sortOrder: z50.number().int()
|
|
7063
|
+
})),
|
|
7064
|
+
serviceSubcategories: z50.array(z50.object({
|
|
7065
|
+
id: z50.string().uuid(),
|
|
7066
|
+
categoryId: z50.string().uuid(),
|
|
7067
|
+
name: z50.string().trim().min(1),
|
|
7068
|
+
sortOrder: z50.number().int()
|
|
7069
|
+
})),
|
|
7070
|
+
services: z50.array(z50.object({
|
|
7071
|
+
id: z50.string().trim().min(1),
|
|
7072
|
+
name: z50.string().trim().min(1),
|
|
7073
|
+
durationMinutes: z50.number().int().positive(),
|
|
7074
|
+
priceCents: z50.number().int().min(0).nullable(),
|
|
7075
|
+
currency: z50.string().regex(/^[A-Z]{3}$/),
|
|
7076
|
+
description: z50.string().nullable(),
|
|
7077
|
+
categoryId: z50.string().uuid(),
|
|
7078
|
+
subcategoryId: z50.string().uuid().nullable(),
|
|
7079
|
+
variants: bookingServiceVariantsSchema2,
|
|
7080
|
+
allowsAnyResource: z50.boolean(),
|
|
7081
|
+
sortOrder: z50.number().int()
|
|
7082
|
+
})),
|
|
7083
|
+
resources: z50.array(z50.object({
|
|
7084
|
+
id: z50.string().trim().min(1),
|
|
7085
|
+
name: z50.string().trim().min(1),
|
|
7086
|
+
kind: z50.enum(bookingResourceKinds2)
|
|
7087
|
+
})),
|
|
7088
|
+
serviceResources: z50.array(z50.object({
|
|
7089
|
+
serviceId: z50.string().trim().min(1),
|
|
7090
|
+
resourceId: z50.string().trim().min(1)
|
|
7091
|
+
}))
|
|
7092
|
+
});
|
|
7093
|
+
var bookingItemSchema2 = z50.object({
|
|
7094
|
+
serviceId: z50.string().trim().min(1),
|
|
7095
|
+
variantId: z50.string().trim().min(1)
|
|
7096
|
+
}).strict();
|
|
7097
|
+
var bookingItemsSchema2 = z50.array(bookingItemSchema2).min(1).max(10);
|
|
7098
|
+
function parseBookingItemsParam2(value) {
|
|
7099
|
+
const items = value.split(",").map((entry) => entry.trim()).filter((entry) => entry !== "").map((entry) => {
|
|
7100
|
+
const [serviceId, variantId, ...rest] = entry.split(":");
|
|
7101
|
+
return serviceId && variantId && rest.length === 0 ? { serviceId, variantId } : null;
|
|
7102
|
+
});
|
|
7103
|
+
return items.every((item) => item !== null) ? items : null;
|
|
7104
|
+
}
|
|
7105
|
+
var bookingSlotsQuerySchema2 = z50.object({
|
|
7106
|
+
items: z50.preprocess((value) => typeof value === "string" ? parseBookingItemsParam2(value) : value, bookingItemsSchema2),
|
|
7107
|
+
resourceId: z50.string().trim().min(1).optional(),
|
|
7108
|
+
fromDate: isoDateSchema2,
|
|
7109
|
+
toDate: isoDateSchema2
|
|
7110
|
+
});
|
|
7111
|
+
var bookingSlotsResponseSchema2 = z50.object({
|
|
7112
|
+
timezone: z50.string().trim().min(1),
|
|
7113
|
+
items: bookingItemsSchema2,
|
|
7114
|
+
// Reine Behandlungsdauer ohne Puffer: das UI zeigt damit die Terminspanne,
|
|
7115
|
+
// ohne selbst rechnen zu muessen.
|
|
7116
|
+
totalDurationMinutes: z50.number().int().min(1),
|
|
7117
|
+
mode: z50.enum(["any", "resource"]),
|
|
7118
|
+
slots: z50.array(z50.object({
|
|
7119
|
+
startUtc: utcDateTimeSchema2,
|
|
7120
|
+
resourceId: z50.string().trim().min(1).optional()
|
|
7121
|
+
}))
|
|
7122
|
+
});
|
|
7123
|
+
var bookingAvailabilityQuerySchema2 = z50.object({
|
|
7124
|
+
items: z50.preprocess((value) => typeof value === "string" ? parseBookingItemsParam2(value) : value, bookingItemsSchema2),
|
|
7125
|
+
resourceId: z50.string().trim().min(1).optional(),
|
|
7126
|
+
fromDate: isoDateSchema2,
|
|
7127
|
+
toDate: isoDateSchema2
|
|
7128
|
+
});
|
|
7129
|
+
var bookingAvailabilityResponseSchema2 = z50.object({
|
|
7130
|
+
timezone: z50.string().trim().min(1),
|
|
7131
|
+
totalDurationMinutes: z50.number().int().min(1),
|
|
7132
|
+
days: z50.array(z50.object({
|
|
7133
|
+
date: isoDateSchema2,
|
|
7134
|
+
hasSlots: z50.boolean()
|
|
7135
|
+
})),
|
|
7136
|
+
/** Erster Tag mit Slot ab `fromDate`, auch ausserhalb des Fensters. */
|
|
7137
|
+
nextAvailableDate: isoDateSchema2.nullable()
|
|
7138
|
+
});
|
|
7139
|
+
var bookingPublicErrorCodes2 = [
|
|
7140
|
+
"slot_unavailable",
|
|
7141
|
+
"validation_error",
|
|
7142
|
+
"origin_not_allowed",
|
|
7143
|
+
"invalid_key",
|
|
7144
|
+
"rate_limited",
|
|
7145
|
+
"payment_required",
|
|
7146
|
+
"payment_unavailable",
|
|
7147
|
+
"payment_amount_too_small",
|
|
7148
|
+
"already_cancelled",
|
|
7149
|
+
"too_late",
|
|
7150
|
+
"not_found"
|
|
7151
|
+
];
|
|
7152
|
+
var bookingPublicErrorSchema2 = z50.object({
|
|
7153
|
+
error: z50.enum(bookingPublicErrorCodes2),
|
|
7154
|
+
message: z50.string().optional(),
|
|
7155
|
+
requestId: z50.string().optional()
|
|
7156
|
+
}).strict();
|
|
7157
|
+
var bookingCreateRequestSchema2 = z50.object({
|
|
7158
|
+
items: bookingItemsSchema2,
|
|
7159
|
+
resourceId: z50.string().min(1).nullable(),
|
|
7160
|
+
startUtc: utcDateTimeSchema2,
|
|
7161
|
+
customer: z50.object({
|
|
7162
|
+
name: z50.string().min(1).max(120),
|
|
7163
|
+
email: z50.string().email().max(254),
|
|
7164
|
+
phone: z50.string().max(32).optional(),
|
|
7165
|
+
note: z50.string().max(1e3).optional()
|
|
7166
|
+
}).strict(),
|
|
7167
|
+
hp: z50.string().optional(),
|
|
7168
|
+
clientToken: z50.string().uuid(),
|
|
7169
|
+
paymentChoice: bookingPaymentChoiceSchema2,
|
|
7170
|
+
// Werbe-Einwilligung. Bestaetigung, Erinnerung und Storno-Link sind davon
|
|
7171
|
+
// unabhaengig und werden immer versendet.
|
|
7172
|
+
consent: z50.object({
|
|
7173
|
+
marketingEmail: z50.boolean(),
|
|
7174
|
+
marketingSms: z50.boolean()
|
|
7175
|
+
}).strict().optional()
|
|
7176
|
+
}).strict();
|
|
7177
|
+
var bookingPublicPaymentResponseSchema2 = z50.object({
|
|
7178
|
+
clientSecret: z50.string().min(1),
|
|
7179
|
+
stripeAccountId: z50.string().startsWith("acct_")
|
|
7180
|
+
}).strict();
|
|
7181
|
+
var bookingCreateResponseSchema2 = z50.union([
|
|
7182
|
+
z50.object({
|
|
7183
|
+
status: z50.literal("confirmed"),
|
|
7184
|
+
booking: z50.object({
|
|
7185
|
+
id: z50.string().min(1),
|
|
7186
|
+
startUtc: utcDateTimeSchema2,
|
|
7187
|
+
endUtc: utcDateTimeSchema2,
|
|
7188
|
+
timezone: z50.string().trim().min(1),
|
|
7189
|
+
serviceName: z50.string().trim().min(1),
|
|
7190
|
+
resourceName: z50.string().trim().min(1)
|
|
7191
|
+
}).strict(),
|
|
7192
|
+
manageUrl: z50.string().url(),
|
|
7193
|
+
confirmationMessage: z50.string().nullable()
|
|
7194
|
+
}).strict(),
|
|
7195
|
+
z50.object({
|
|
7196
|
+
status: z50.literal("pending_payment"),
|
|
7197
|
+
bookingId: z50.string().min(1),
|
|
7198
|
+
holdExpiresAt: utcDateTimeSchema2,
|
|
7199
|
+
payment: bookingPublicPaymentResponseSchema2,
|
|
7200
|
+
statusToken: z50.string().min(20),
|
|
7201
|
+
manageUrl: z50.string().url().optional()
|
|
7202
|
+
}).strict(),
|
|
7203
|
+
bookingPublicErrorSchema2
|
|
7204
|
+
]);
|
|
7205
|
+
var bookingStatusResponseSchema2 = z50.object({
|
|
7206
|
+
bookingStatus: bookingStatusSchema2,
|
|
7207
|
+
paymentStatus: bookingPaymentStatusSchema2,
|
|
7208
|
+
refundStatus: bookingRefundStatusSchema2,
|
|
7209
|
+
disputeStatus: bookingDisputeStatusSchema2,
|
|
7210
|
+
holdExpiresAt: utcDateTimeSchema2.nullable()
|
|
7211
|
+
}).strict();
|
|
7212
|
+
var bookingCancelRequestSchema2 = z50.object({
|
|
7213
|
+
token: z50.string().min(20)
|
|
7214
|
+
});
|
|
7215
|
+
var bookingCancelResponseSchema2 = z50.union([
|
|
7216
|
+
z50.object({
|
|
7217
|
+
status: z50.enum(["cancelled", "already_cancelled", "too_late", "not_found"])
|
|
7218
|
+
}),
|
|
7219
|
+
bookingPublicErrorSchema2
|
|
7220
|
+
]);
|
|
7221
|
+
var bookingMoveErrorCodes2 = [
|
|
7222
|
+
"slot_unavailable",
|
|
7223
|
+
"booking_not_movable",
|
|
7224
|
+
"not_found"
|
|
7225
|
+
];
|
|
7226
|
+
var bookingMoveRequestSchema2 = z50.object({
|
|
7227
|
+
bookingId: z50.string().uuid(),
|
|
7228
|
+
newStartUtc: utcDateTimeSchema2,
|
|
7229
|
+
newResourceId: z50.string().uuid().optional(),
|
|
7230
|
+
notifyCustomer: z50.boolean().default(false),
|
|
7231
|
+
reason: z50.string().max(500).optional()
|
|
7232
|
+
});
|
|
7233
|
+
var bookingMoveResponseSchema2 = z50.union([
|
|
7234
|
+
z50.object({
|
|
7235
|
+
status: z50.literal("moved"),
|
|
7236
|
+
bookingId: z50.string().uuid(),
|
|
7237
|
+
startUtc: utcDateTimeSchema2,
|
|
7238
|
+
endUtc: utcDateTimeSchema2,
|
|
7239
|
+
resourceId: z50.string().uuid()
|
|
7240
|
+
}),
|
|
7241
|
+
z50.object({
|
|
7242
|
+
error: z50.enum(bookingMoveErrorCodes2),
|
|
7243
|
+
message: z50.string().optional(),
|
|
7244
|
+
requestId: z50.string().optional()
|
|
7245
|
+
})
|
|
7246
|
+
]);
|
|
7247
|
+
var bookingManifestSchema2 = z50.object({
|
|
7248
|
+
schemaVersion: z50.number().int().positive(),
|
|
7249
|
+
siteId: z50.string().trim().min(1),
|
|
7250
|
+
siteKeyPrefix: z50.string().startsWith("bk_pub_"),
|
|
7251
|
+
bookingPageSlug: z50.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).min(2).max(64),
|
|
7252
|
+
embedMode: z50.enum(["script", "web_component", "iframe"]).optional(),
|
|
7253
|
+
productionOrigin: z50.string().url().optional()
|
|
7254
|
+
}).passthrough();
|
|
7255
|
+
|
|
7256
|
+
// ../shared/dist/booking-defaults.js
|
|
7257
|
+
var BOOKING_CREATE_PAYLOAD_LIMIT_BYTES2 = 16 * 1024;
|
|
7258
|
+
|
|
7259
|
+
// ../shared/dist/bridge-protocol.js
|
|
7260
|
+
import { z as z58 } from "zod";
|
|
7261
|
+
|
|
7262
|
+
// ../shared/dist/field-id.js
|
|
7263
|
+
import { z as z51 } from "zod";
|
|
7264
|
+
var FIELD_ID_PATTERN2 = /^[a-z][a-z0-9_-]*(\.[a-z][a-z0-9_-]*)+$/;
|
|
7265
|
+
var fieldIdSchema2 = z51.string().regex(FIELD_ID_PATTERN2, "Invalid field id");
|
|
7266
|
+
|
|
7267
|
+
// ../shared/dist/field-types.js
|
|
7268
|
+
import { z as z52 } from "zod";
|
|
7269
|
+
var FIELD_TYPES2 = ["text", "longText", "image", "link"];
|
|
7270
|
+
var fieldTypeSchema2 = z52.enum(FIELD_TYPES2);
|
|
7271
|
+
|
|
7272
|
+
// ../shared/dist/image-value.js
|
|
7273
|
+
import { z as z53 } from "zod";
|
|
7274
|
+
var SUPPORTED_IMAGE_CONTENT_TYPES2 = [
|
|
7275
|
+
"image/jpeg",
|
|
7276
|
+
"image/png",
|
|
7277
|
+
"image/webp",
|
|
7278
|
+
"image/avif"
|
|
7279
|
+
];
|
|
7280
|
+
var maxImageUploadBytes2 = 10 * 1024 * 1024;
|
|
7281
|
+
var largeImageWarningBytes2 = 2 * 1024 * 1024;
|
|
7282
|
+
var imageContentTypeSchema2 = z53.enum(SUPPORTED_IMAGE_CONTENT_TYPES2);
|
|
7283
|
+
var imageCropSchema2 = z53.object({
|
|
7284
|
+
x: z53.number().min(0).max(100),
|
|
7285
|
+
y: z53.number().min(0).max(100),
|
|
7286
|
+
zoom: z53.number().min(1).max(4),
|
|
7287
|
+
aspectRatio: z53.number().positive().max(10)
|
|
7288
|
+
});
|
|
7289
|
+
var imageValueSchema2 = z53.object({
|
|
7290
|
+
src: z53.string().trim().min(1),
|
|
7291
|
+
alt: z53.string().trim().min(1).max(300),
|
|
7292
|
+
width: z53.number().int().positive().optional(),
|
|
7293
|
+
height: z53.number().int().positive().optional(),
|
|
7294
|
+
crop: imageCropSchema2.optional(),
|
|
7295
|
+
assetId: z53.string().uuid().optional(),
|
|
7296
|
+
finalStorageProvider: z53.enum([
|
|
7297
|
+
"repo_static_assets",
|
|
7298
|
+
"repo_handoff",
|
|
7299
|
+
"site_owned_storage",
|
|
7300
|
+
"siteplane_managed_fallback"
|
|
7301
|
+
]).optional()
|
|
7302
|
+
});
|
|
7303
|
+
|
|
7304
|
+
// ../shared/dist/setup-deployment.js
|
|
7305
|
+
import { z as z54 } from "zod";
|
|
7306
|
+
var version2 = z54.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u);
|
|
7307
|
+
var siteSetupPackagesSchema2 = z54.object({
|
|
7308
|
+
siteplane: version2,
|
|
7309
|
+
runtimeNext: version2,
|
|
7310
|
+
analytics: version2.optional()
|
|
7311
|
+
}).strict();
|
|
7312
|
+
var hash2 = z54.string().regex(/^sha256:[0-9a-f]{64}$/u);
|
|
7313
|
+
var setupDeploymentRecordSchema2 = z54.object({
|
|
7314
|
+
version: z54.literal(1),
|
|
7315
|
+
operationId: z54.string().uuid(),
|
|
7316
|
+
provider: z54.literal("vercel"),
|
|
7317
|
+
projectId: z54.string().regex(/^prj_[A-Za-z0-9]+$/u),
|
|
7318
|
+
teamId: z54.string().regex(/^(?:team|user)_[A-Za-z0-9]+$/u),
|
|
7319
|
+
origin: z54.string().url().refine((value) => {
|
|
7320
|
+
const url = new URL(value);
|
|
7321
|
+
return url.protocol === "https:" && url.origin === value && !url.username && !url.password;
|
|
7322
|
+
}),
|
|
7323
|
+
deploymentId: z54.string().regex(/^dpl_[A-Za-z0-9]+$/u).nullable(),
|
|
7324
|
+
revision: z54.string().regex(/^[0-9a-f]{40}$/u),
|
|
7325
|
+
fieldContractHash: hash2,
|
|
7326
|
+
packages: siteSetupPackagesSchema2,
|
|
7327
|
+
configurationFingerprint: hash2,
|
|
7328
|
+
adminSecretGeneration: z54.string().uuid(),
|
|
7329
|
+
revalidationGeneration: z54.number().int().positive(),
|
|
7330
|
+
startedAt: z54.string().datetime(),
|
|
7331
|
+
environmentWrittenAt: z54.string().datetime().nullable(),
|
|
7332
|
+
deployRequestedAt: z54.string().datetime().nullable(),
|
|
7333
|
+
deadline: z54.string().datetime(),
|
|
7334
|
+
phase: z54.enum([
|
|
7335
|
+
"planned",
|
|
7336
|
+
"environment_written",
|
|
7337
|
+
"deploy_requested",
|
|
7338
|
+
"deployed",
|
|
7339
|
+
"verified",
|
|
7340
|
+
"failed"
|
|
7341
|
+
]),
|
|
7342
|
+
build: z54.object({
|
|
7343
|
+
node: version2,
|
|
7344
|
+
packageManager: z54.enum(["npm", "pnpm"]),
|
|
7345
|
+
packageManagerVersion: version2,
|
|
7346
|
+
lockfileHash: hash2
|
|
7347
|
+
}).strict().nullable()
|
|
7348
|
+
}).strict();
|
|
7349
|
+
var setupDeploymentInputSchema2 = z54.discriminatedUnion("action", [
|
|
7350
|
+
z54.object({ action: z54.literal("read") }).strict(),
|
|
7351
|
+
z54.object({
|
|
7352
|
+
action: z54.literal("record"),
|
|
7353
|
+
expectedOperationId: z54.string().uuid().nullable(),
|
|
7354
|
+
record: setupDeploymentRecordSchema2
|
|
7355
|
+
}).strict()
|
|
7356
|
+
]);
|
|
7357
|
+
|
|
7358
|
+
// ../shared/dist/site-setup.js
|
|
7359
|
+
import { z as z57 } from "zod";
|
|
7360
|
+
|
|
7361
|
+
// ../shared/dist/site-field-contract.js
|
|
7362
|
+
import { z as z56 } from "zod";
|
|
7363
|
+
|
|
7364
|
+
// ../shared/dist/fallback-hash.js
|
|
7365
|
+
import { z as z55 } from "zod";
|
|
7366
|
+
var SAFE_REPRESENTATION_REASONS2 = [
|
|
7367
|
+
"asset_import_rewritten",
|
|
7368
|
+
"relative_url_normalized",
|
|
7369
|
+
"line_endings_normalized",
|
|
7370
|
+
"image_value_serialized"
|
|
7371
|
+
];
|
|
7372
|
+
var safeRepresentationReasonSchema2 = z55.enum(SAFE_REPRESENTATION_REASONS2);
|
|
7373
|
+
var linkFallbackSchema3 = z55.object({
|
|
7374
|
+
href: z55.string().trim().min(1),
|
|
7375
|
+
label: z55.string().trim().min(1).optional(),
|
|
7376
|
+
target: z55.enum(["_self", "_blank"]).optional()
|
|
7377
|
+
}).passthrough();
|
|
7378
|
+
function stableJsonStringify2(value) {
|
|
7379
|
+
return JSON.stringify(sortObjectKeys2(value));
|
|
7380
|
+
}
|
|
7381
|
+
function sortObjectKeys2(value) {
|
|
7382
|
+
if (Array.isArray(value)) {
|
|
7383
|
+
return value.map(sortObjectKeys2);
|
|
7384
|
+
}
|
|
7385
|
+
if (!value || typeof value !== "object") {
|
|
7386
|
+
return value;
|
|
7387
|
+
}
|
|
7388
|
+
return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entryValue]) => [key, sortObjectKeys2(entryValue)]));
|
|
7389
|
+
}
|
|
7390
|
+
|
|
7391
|
+
// ../shared/dist/site-field-contract.js
|
|
7392
|
+
var siteFieldStatusSchema2 = z56.enum(["hidden", "active"]);
|
|
7393
|
+
var semanticVersionSchema2 = z56.string().regex(/^\d+\.\d+\.\d+$/u);
|
|
7394
|
+
var siteFieldRouteKeySchema2 = z56.string().trim().refine((value) => value === "$global" || value.startsWith("/") && !value.includes("?") && !value.includes("#") && (value === "/" || !value.endsWith("/")), "Route keys must be canonical paths or $global.");
|
|
7395
|
+
var repositoryRelativePosixPathSchema2 = z56.string().trim().min(1).refine((value) => !value.startsWith("/") && !value.includes("\\") && !/^[a-z]:/iu.test(value) && !value.split("/").includes(".."), "Source paths must be repository-relative POSIX paths.");
|
|
7396
|
+
var sourceMappingSchema2 = z56.object({
|
|
7397
|
+
kind: z56.literal("function"),
|
|
7398
|
+
filePath: repositoryRelativePosixPathSchema2,
|
|
7399
|
+
exportName: z56.string().trim().min(1).optional(),
|
|
7400
|
+
sourcePath: z56.string().trim().min(1).optional(),
|
|
7401
|
+
editTarget: fieldIdSchema2.optional()
|
|
7402
|
+
}).strict();
|
|
7403
|
+
var domMappingSchema2 = z56.object({
|
|
7404
|
+
attribute: z56.literal("data-siteplane-field-id"),
|
|
7405
|
+
previewStrategy: z56.enum(["dom", "event"])
|
|
7406
|
+
}).strict();
|
|
7407
|
+
var fieldBaseSchema2 = z56.object({
|
|
7408
|
+
fieldId: fieldIdSchema2,
|
|
7409
|
+
routeKey: siteFieldRouteKeySchema2,
|
|
7410
|
+
source: sourceMappingSchema2,
|
|
7411
|
+
dom: domMappingSchema2.optional()
|
|
7412
|
+
}).strict();
|
|
7413
|
+
var linkFallbackSchema4 = z56.object({
|
|
7414
|
+
href: z56.string().trim().min(1),
|
|
7415
|
+
label: z56.string().trim().min(1).optional(),
|
|
7416
|
+
target: z56.enum(["_self", "_blank"]).optional()
|
|
7417
|
+
}).strict();
|
|
7418
|
+
var imageFallbackSchema2 = z56.object({
|
|
7419
|
+
src: z56.string().trim().min(1),
|
|
7420
|
+
alt: z56.string().trim().max(300),
|
|
7421
|
+
width: z56.number().int().positive().optional(),
|
|
7422
|
+
height: z56.number().int().positive().optional(),
|
|
7423
|
+
crop: z56.object({
|
|
7424
|
+
x: z56.number().min(0).max(100),
|
|
7425
|
+
y: z56.number().min(0).max(100),
|
|
7426
|
+
zoom: z56.number().min(1).max(4),
|
|
7427
|
+
aspectRatio: z56.number().positive().max(10)
|
|
7428
|
+
}).strict().optional()
|
|
7429
|
+
}).strict();
|
|
7430
|
+
var siteFieldContractFieldSchema2 = z56.discriminatedUnion("fieldType", [
|
|
7431
|
+
fieldBaseSchema2.extend({
|
|
7432
|
+
fieldType: z56.literal("text"),
|
|
7433
|
+
fallback: z56.string()
|
|
7434
|
+
}),
|
|
7435
|
+
fieldBaseSchema2.extend({
|
|
7436
|
+
fieldType: z56.literal("longText"),
|
|
7437
|
+
fallback: z56.string()
|
|
7438
|
+
}),
|
|
7439
|
+
fieldBaseSchema2.extend({
|
|
7440
|
+
fieldType: z56.literal("link"),
|
|
7441
|
+
fallback: linkFallbackSchema4
|
|
7442
|
+
}),
|
|
7443
|
+
fieldBaseSchema2.extend({
|
|
7444
|
+
fieldType: z56.literal("image"),
|
|
7445
|
+
fallback: imageFallbackSchema2
|
|
7446
|
+
})
|
|
7447
|
+
]);
|
|
7448
|
+
var siteFieldContractV1Schema2 = z56.object({
|
|
7449
|
+
version: z56.literal(1),
|
|
7450
|
+
fieldContractVersion: semanticVersionSchema2,
|
|
7451
|
+
scannerContractVersion: semanticVersionSchema2,
|
|
7452
|
+
fields: z56.array(siteFieldContractFieldSchema2)
|
|
7453
|
+
}).strict().superRefine((contract, context) => {
|
|
7454
|
+
const seen = /* @__PURE__ */ new Set();
|
|
7455
|
+
for (const [index, field] of contract.fields.entries()) {
|
|
7456
|
+
if (seen.has(field.fieldId)) {
|
|
7457
|
+
context.addIssue({
|
|
7458
|
+
code: "custom",
|
|
7459
|
+
message: `Duplicate field id: ${field.fieldId}`,
|
|
7460
|
+
path: ["fields", index, "fieldId"]
|
|
7461
|
+
});
|
|
7462
|
+
}
|
|
7463
|
+
seen.add(field.fieldId);
|
|
7464
|
+
}
|
|
7465
|
+
});
|
|
7466
|
+
|
|
7467
|
+
// ../shared/dist/site-setup.js
|
|
7468
|
+
var SITE_SETUP_RUN_STATUSES2 = [
|
|
7469
|
+
"waiting_for_agent",
|
|
7470
|
+
"working",
|
|
7471
|
+
"action_required",
|
|
7472
|
+
"ready_for_review",
|
|
7473
|
+
"completed"
|
|
7474
|
+
];
|
|
7475
|
+
var SITE_SETUP_RUN_MODES2 = ["initial", "update"];
|
|
7476
|
+
var SITE_SETUP_ERROR_CODES2 = [
|
|
7477
|
+
"action_required",
|
|
7478
|
+
"deployment_evidence_required",
|
|
7479
|
+
"field_contract_scan_failed",
|
|
7480
|
+
"invalid_editor_definition",
|
|
7481
|
+
"invalid_field_contract",
|
|
7482
|
+
"missing_build_revision",
|
|
7483
|
+
"missing_field_contract",
|
|
7484
|
+
"review_locked",
|
|
7485
|
+
"stale_deployment_contract",
|
|
7486
|
+
"stale_field_contract",
|
|
7487
|
+
"stale_setup_review",
|
|
7488
|
+
"update_required"
|
|
7489
|
+
];
|
|
7490
|
+
var CONTINUE_SITE_SETUP_MAX_ITEMS2 = 50;
|
|
7491
|
+
var CONTINUE_SITE_SETUP_RENDERED_PATH_MAX_BYTES2 = 512;
|
|
7492
|
+
var CONTINUE_SITE_SETUP_VISIBLE_VALUE_MAX_BYTES2 = 256;
|
|
7493
|
+
var CONTINUE_SITE_SETUP_LOCATOR_HINT_MAX_BYTES2 = 512;
|
|
7494
|
+
var CONTINUE_SITE_SETUP_REQUESTED_LABEL_MAX_BYTES2 = 120;
|
|
7495
|
+
var CONTINUE_SITE_SETUP_REQUESTED_SECTION_MAX_BYTES2 = 120;
|
|
7496
|
+
var CONTINUE_SITE_SETUP_REQUESTED_SUBSECTION_MAX_BYTES2 = 120;
|
|
7497
|
+
var SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_LENGTH2 = 2e3;
|
|
7498
|
+
var SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES2 = 8e3;
|
|
7499
|
+
var CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES2 = 32 * 1024;
|
|
7500
|
+
var CONTINUE_SITE_SETUP_HTTP_BODY_MAX_BYTES2 = 64 * 1024;
|
|
7501
|
+
var siteSetupRunStatusSchema2 = z57.enum(SITE_SETUP_RUN_STATUSES2);
|
|
7502
|
+
var siteSetupRunModeSchema2 = z57.enum(SITE_SETUP_RUN_MODES2);
|
|
7503
|
+
var siteSetupErrorCodeSchema2 = z57.enum(SITE_SETUP_ERROR_CODES2);
|
|
7504
|
+
var editorFieldSchema2 = z57.object({
|
|
7505
|
+
fieldId: fieldIdSchema2,
|
|
7506
|
+
label: z57.string().trim().min(1),
|
|
7507
|
+
subsection: z57.string().trim().min(1).optional(),
|
|
7508
|
+
description: z57.string().trim().min(1).optional(),
|
|
7509
|
+
required: z57.boolean().optional(),
|
|
7510
|
+
maxLength: z57.number().int().positive().optional()
|
|
7511
|
+
}).strict();
|
|
7512
|
+
var editorSectionSchema2 = z57.object({
|
|
7513
|
+
label: z57.string().trim().min(1),
|
|
7514
|
+
fields: z57.array(editorFieldSchema2).min(1)
|
|
7515
|
+
}).strict().superRefine((section, context) => {
|
|
7516
|
+
const closedSubsections = /* @__PURE__ */ new Set();
|
|
7517
|
+
let currentSubsection;
|
|
7518
|
+
for (const [index, field] of section.fields.entries()) {
|
|
7519
|
+
if (field.subsection === currentSubsection)
|
|
7520
|
+
continue;
|
|
7521
|
+
if (currentSubsection)
|
|
7522
|
+
closedSubsections.add(currentSubsection);
|
|
7523
|
+
currentSubsection = field.subsection;
|
|
7524
|
+
if (currentSubsection && closedSubsections.has(currentSubsection)) {
|
|
7525
|
+
context.addIssue({
|
|
7526
|
+
code: "custom",
|
|
7527
|
+
message: `Subgroup fields must stay contiguous: ${currentSubsection}`,
|
|
7528
|
+
path: ["fields", index, "subsection"]
|
|
7529
|
+
});
|
|
7530
|
+
}
|
|
7531
|
+
}
|
|
7532
|
+
});
|
|
7533
|
+
var editorRouteSchema2 = z57.object({
|
|
7534
|
+
routeKey: siteFieldRouteKeySchema2,
|
|
7535
|
+
previewPath: z57.string().trim().refine((path) => path.startsWith("/") && !path.startsWith("//") && !/[\\\[\]?#\s]/u.test(path) && (path === "/" || !path.endsWith("/")), "previewPath must be a concrete same-site path, for example /services/consultation.").optional(),
|
|
7536
|
+
label: z57.string().trim().min(1),
|
|
7537
|
+
sections: z57.array(editorSectionSchema2).min(1)
|
|
7538
|
+
}).strict().superRefine((route, context) => {
|
|
7539
|
+
if (route.routeKey.includes("[") && !route.previewPath) {
|
|
7540
|
+
context.addIssue({
|
|
7541
|
+
code: "custom",
|
|
7542
|
+
path: ["previewPath"],
|
|
7543
|
+
message: "Dynamic editor routes need a previewPath for an existing page; keep the canonical routeKey unchanged."
|
|
7544
|
+
});
|
|
7545
|
+
}
|
|
7546
|
+
const sections = /* @__PURE__ */ new Set();
|
|
7547
|
+
for (const [index, section] of route.sections.entries()) {
|
|
7548
|
+
if (sections.has(section.label)) {
|
|
7549
|
+
context.addIssue({
|
|
7550
|
+
code: "custom",
|
|
7551
|
+
message: `Duplicate section label: ${section.label}`,
|
|
7552
|
+
path: ["sections", index, "label"]
|
|
7553
|
+
});
|
|
7554
|
+
}
|
|
7555
|
+
sections.add(section.label);
|
|
7556
|
+
}
|
|
7557
|
+
});
|
|
7558
|
+
var editorDefinitionV1Schema2 = z57.object({
|
|
7559
|
+
version: z57.literal(1),
|
|
7560
|
+
routes: z57.array(editorRouteSchema2).min(1)
|
|
7561
|
+
}).strict().superRefine((definition, context) => {
|
|
7562
|
+
const routes = /* @__PURE__ */ new Set();
|
|
7563
|
+
const fields = /* @__PURE__ */ new Set();
|
|
7564
|
+
for (const [routeIndex, route] of definition.routes.entries()) {
|
|
7565
|
+
if (routes.has(route.routeKey)) {
|
|
7566
|
+
context.addIssue({
|
|
7567
|
+
code: "custom",
|
|
7568
|
+
message: `Duplicate route key: ${route.routeKey}`,
|
|
7569
|
+
path: ["routes", routeIndex, "routeKey"]
|
|
7570
|
+
});
|
|
7571
|
+
}
|
|
7572
|
+
routes.add(route.routeKey);
|
|
7573
|
+
for (const [sectionIndex, section] of route.sections.entries()) {
|
|
7574
|
+
for (const [fieldIndex, field] of section.fields.entries()) {
|
|
7575
|
+
if (fields.has(field.fieldId)) {
|
|
7576
|
+
context.addIssue({
|
|
7577
|
+
code: "custom",
|
|
7578
|
+
message: `Duplicate editor field id: ${field.fieldId}`,
|
|
7579
|
+
path: [
|
|
7580
|
+
"routes",
|
|
7581
|
+
routeIndex,
|
|
7582
|
+
"sections",
|
|
7583
|
+
sectionIndex,
|
|
7584
|
+
"fields",
|
|
7585
|
+
fieldIndex,
|
|
7586
|
+
"fieldId"
|
|
7587
|
+
]
|
|
7588
|
+
});
|
|
7589
|
+
}
|
|
7590
|
+
fields.add(field.fieldId);
|
|
7591
|
+
}
|
|
7592
|
+
}
|
|
7593
|
+
}
|
|
7594
|
+
});
|
|
7595
|
+
var forbiddenControlOrBidi2 = /[\u0000-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
|
|
7596
|
+
var forbiddenOwnerNoteControlOrBidi2 = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
|
|
7597
|
+
var unsafeLocator2 = /<\/?[a-z][^>]*>|\b(?:javascript|data:text\/html)\s*:|\bon[a-z]+\s*=/iu;
|
|
7598
|
+
var renderedPathSchema2 = z57.string().trim().transform((value) => value !== "/" ? value.replace(/\/+$/u, "") : value).superRefine((value, context) => {
|
|
7599
|
+
if (!value.startsWith("/") || value === "$global" || value.includes("?") || value.includes("#")) {
|
|
7600
|
+
context.addIssue({
|
|
7601
|
+
code: "custom",
|
|
7602
|
+
message: "renderedPath must be a canonical real path."
|
|
7603
|
+
});
|
|
7604
|
+
}
|
|
7605
|
+
addSafeByteIssues2(value, CONTINUE_SITE_SETUP_RENDERED_PATH_MAX_BYTES2, "renderedPath", context);
|
|
7606
|
+
});
|
|
7607
|
+
function normalizedSafeTextSchema2(maxBytes, label) {
|
|
7608
|
+
return z57.string().transform((value) => value.trim().replace(new RegExp("\\p{White_Space}+", "gu"), " ")).pipe(z57.string().min(1)).superRefine((value, context) => {
|
|
7609
|
+
addSafeByteIssues2(value, maxBytes, label, context);
|
|
7610
|
+
if (label === "locatorHint" && unsafeLocator2.test(value)) {
|
|
7611
|
+
context.addIssue({
|
|
7612
|
+
code: "custom",
|
|
7613
|
+
message: "locatorHint contains unsafe markup or executable content."
|
|
7614
|
+
});
|
|
7615
|
+
}
|
|
7616
|
+
});
|
|
7617
|
+
}
|
|
7618
|
+
var correctionItemBase2 = {
|
|
7619
|
+
renderedPath: renderedPathSchema2,
|
|
7620
|
+
visibleValue: normalizedSafeTextSchema2(CONTINUE_SITE_SETUP_VISIBLE_VALUE_MAX_BYTES2, "visibleValue"),
|
|
7621
|
+
locatorHint: normalizedSafeTextSchema2(CONTINUE_SITE_SETUP_LOCATOR_HINT_MAX_BYTES2, "locatorHint"),
|
|
7622
|
+
requestedLabel: normalizedSafeTextSchema2(CONTINUE_SITE_SETUP_REQUESTED_LABEL_MAX_BYTES2, "requestedLabel").optional(),
|
|
7623
|
+
requestedSection: normalizedSafeTextSchema2(CONTINUE_SITE_SETUP_REQUESTED_SECTION_MAX_BYTES2, "requestedSection").optional(),
|
|
7624
|
+
requestedSubsection: normalizedSafeTextSchema2(CONTINUE_SITE_SETUP_REQUESTED_SUBSECTION_MAX_BYTES2, "requestedSubsection").optional(),
|
|
7625
|
+
requestedSortOrder: z57.number().int().nonnegative().optional()
|
|
7626
|
+
};
|
|
7627
|
+
var setupCorrectionItemSchema2 = z57.discriminatedUnion("kind", [
|
|
7628
|
+
z57.object({ kind: z57.literal("text"), ...correctionItemBase2 }).strict(),
|
|
7629
|
+
z57.object({ kind: z57.literal("link"), ...correctionItemBase2 }).strict(),
|
|
7630
|
+
z57.object({ kind: z57.literal("image"), ...correctionItemBase2 }).strict()
|
|
7631
|
+
]).superRefine((item, context) => {
|
|
7632
|
+
if (item.requestedSubsection && !item.requestedSection) {
|
|
7633
|
+
context.addIssue({
|
|
7634
|
+
code: "custom",
|
|
7635
|
+
message: "requestedSubsection requires requestedSection.",
|
|
7636
|
+
path: ["requestedSubsection"]
|
|
7637
|
+
});
|
|
7638
|
+
}
|
|
7639
|
+
});
|
|
7640
|
+
var setupCorrectionItemsSchema2 = z57.array(setupCorrectionItemSchema2).max(CONTINUE_SITE_SETUP_MAX_ITEMS2).superRefine((items, context) => {
|
|
7641
|
+
const bytes = utf8Bytes2(stableJsonStringify2(items));
|
|
7642
|
+
if (bytes > CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES2) {
|
|
7643
|
+
context.addIssue({
|
|
7644
|
+
code: "custom",
|
|
7645
|
+
message: "Correction items exceed the 32 KiB canonical payload limit."
|
|
7646
|
+
});
|
|
7647
|
+
}
|
|
7648
|
+
});
|
|
7649
|
+
var siteSetupOwnerEditabilityNoteSchema2 = z57.string().max(SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_LENGTH2).superRefine((value, context) => {
|
|
7650
|
+
if (utf8Bytes2(value) > SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES2) {
|
|
7651
|
+
context.addIssue({
|
|
7652
|
+
code: "custom",
|
|
7653
|
+
message: `ownerEditabilityNote exceeds ${SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES2} UTF-8 bytes.`
|
|
7654
|
+
});
|
|
7655
|
+
}
|
|
7656
|
+
if (forbiddenOwnerNoteControlOrBidi2.test(value)) {
|
|
7657
|
+
context.addIssue({
|
|
7658
|
+
code: "custom",
|
|
7659
|
+
message: "ownerEditabilityNote contains a forbidden control or bidi character."
|
|
7660
|
+
});
|
|
7661
|
+
}
|
|
7662
|
+
});
|
|
7663
|
+
var SITE_SETUP_MODULE_SCOPES2 = {
|
|
7664
|
+
editing: ["setup:read", "setup:write"],
|
|
7665
|
+
analytics: [
|
|
7666
|
+
"analytics:setup",
|
|
7667
|
+
"analytics:sync",
|
|
7668
|
+
"analytics:test",
|
|
7669
|
+
"analytics:readiness",
|
|
7670
|
+
"analytics:agent_instructions",
|
|
7671
|
+
"analytics:public_key_read"
|
|
7672
|
+
]
|
|
7673
|
+
};
|
|
7674
|
+
var siteSetupModulesSchema2 = z57.array(z57.enum(["editing", "analytics"])).min(1).max(2).refine((modules) => modules[0] === "editing" && (modules.length === 1 || modules[1] === "analytics"), "Choose Editing with optional Analytics.");
|
|
7675
|
+
function siteSetupScopes2(modules) {
|
|
7676
|
+
return modules.flatMap((module) => [...SITE_SETUP_MODULE_SCOPES2[module]]);
|
|
7677
|
+
}
|
|
7678
|
+
function hasExactSiteSetupScopes2(scopes, modules) {
|
|
7679
|
+
const matches = (expected) => scopes.length === expected.length && expected.every((scope) => scopes.includes(scope));
|
|
7680
|
+
return modules ? matches(siteSetupScopes2(modules)) : matches(siteSetupScopes2(["editing"])) || matches(siteSetupScopes2(["editing", "analytics"]));
|
|
7681
|
+
}
|
|
7682
|
+
var siteSetupActivityInputSchema2 = z57.object({
|
|
7683
|
+
phase: z57.enum([
|
|
7684
|
+
"inspecting",
|
|
7685
|
+
"integrating",
|
|
7686
|
+
"deploying",
|
|
7687
|
+
"verifying",
|
|
7688
|
+
"repairing"
|
|
7689
|
+
]),
|
|
7690
|
+
textId: z57.enum([
|
|
7691
|
+
"inspecting",
|
|
7692
|
+
"integrating",
|
|
7693
|
+
"deploying",
|
|
7694
|
+
"verifying",
|
|
7695
|
+
"repairing"
|
|
7696
|
+
])
|
|
7697
|
+
}).strict().refine((value) => value.phase === value.textId, "Activity text must describe its phase.");
|
|
7698
|
+
var nextActionFields2 = {
|
|
7699
|
+
actor: z57.enum(["agent", "user", "siteplane"]),
|
|
7700
|
+
boundary: z57.enum([
|
|
7701
|
+
"source",
|
|
7702
|
+
"environment",
|
|
7703
|
+
"deployment",
|
|
7704
|
+
"verification",
|
|
7705
|
+
"authorization",
|
|
7706
|
+
"review"
|
|
7707
|
+
]),
|
|
7708
|
+
precondition: z57.string().min(1).max(1e3),
|
|
7709
|
+
instruction: z57.string().min(1).max(2e3),
|
|
7710
|
+
expectedEvidence: z57.string().min(1).max(1e3)
|
|
7711
|
+
};
|
|
7712
|
+
var siteSetupNextActionSchema2 = z57.discriminatedUnion("kind", [
|
|
7713
|
+
z57.object({
|
|
7714
|
+
...nextActionFields2,
|
|
7715
|
+
kind: z57.literal("run_command"),
|
|
7716
|
+
command: z57.string().min(1).max(500)
|
|
7717
|
+
}).strict(),
|
|
7718
|
+
z57.object({ ...nextActionFields2, kind: z57.literal("agent_edit") }).strict(),
|
|
7719
|
+
z57.object({ ...nextActionFields2, kind: z57.literal("needs_user_action") }).strict(),
|
|
7720
|
+
z57.object({ ...nextActionFields2, kind: z57.literal("wait") }).strict(),
|
|
7721
|
+
z57.object({ ...nextActionFields2, kind: z57.literal("done") }).strict()
|
|
7722
|
+
]);
|
|
7723
|
+
var siteSetupTaskRunSchema2 = z57.object({
|
|
7724
|
+
runId: z57.string().uuid(),
|
|
7725
|
+
mode: siteSetupRunModeSchema2,
|
|
7726
|
+
status: siteSetupRunStatusSchema2,
|
|
7727
|
+
fieldContractHash: z57.string().nullable(),
|
|
7728
|
+
deploymentOrigin: z57.string().url().nullable(),
|
|
7729
|
+
deploymentRevision: z57.string().nullable(),
|
|
7730
|
+
publicRuntimeKeyId: z57.string().uuid().nullable(),
|
|
7731
|
+
reviewVersion: z57.number().int().positive()
|
|
7732
|
+
}).strict();
|
|
7733
|
+
var siteSetupTaskProgressSchema2 = z57.object({
|
|
7734
|
+
progressStage: z57.enum([
|
|
7735
|
+
"waiting_for_connection",
|
|
7736
|
+
"agent_connected",
|
|
7737
|
+
"project_context_loaded",
|
|
7738
|
+
"fields_prepared",
|
|
7739
|
+
"deployment_verification",
|
|
7740
|
+
"ready_for_review",
|
|
7741
|
+
"action_required",
|
|
7742
|
+
"completed"
|
|
7743
|
+
]),
|
|
7744
|
+
lastVerifiedAt: z57.string().datetime().nullable(),
|
|
7745
|
+
lastActivityAt: z57.string().datetime(),
|
|
7746
|
+
activitySource: z57.enum(["user", "server", "agent"]),
|
|
7747
|
+
activityPhase: siteSetupActivityInputSchema2.shape.phase.nullable(),
|
|
7748
|
+
activityTextId: siteSetupActivityInputSchema2.shape.textId.nullable()
|
|
7749
|
+
}).strict();
|
|
7750
|
+
var siteSetupTaskSchema2 = z57.object({
|
|
7751
|
+
contractVersion: z57.literal("siteplane.setup-task.v2"),
|
|
7752
|
+
workflow: z57.enum(["initial_setup", "structure_update"]),
|
|
7753
|
+
goal: z57.string().min(1),
|
|
7754
|
+
modules: siteSetupModulesSchema2,
|
|
7755
|
+
authorizationVersion: z57.number().int().positive(),
|
|
7756
|
+
authorizedScopes: z57.array(z57.string()).min(2),
|
|
7757
|
+
site: z57.object({
|
|
7758
|
+
siteId: z57.string().uuid(),
|
|
7759
|
+
portalPath: z57.string(),
|
|
7760
|
+
adminOrigin: z57.string().url()
|
|
7761
|
+
}).strict().nullable(),
|
|
7762
|
+
run: siteSetupTaskRunSchema2.nullable(),
|
|
7763
|
+
progress: siteSetupTaskProgressSchema2.nullable(),
|
|
7764
|
+
deployment: setupDeploymentRecordSchema2.nullable(),
|
|
7765
|
+
revalidationGeneration: z57.number().int().positive(),
|
|
7766
|
+
assignment: z57.enum(["owned", "provisional", "claimed"]),
|
|
7767
|
+
deadline: z57.string().datetime().nullable(),
|
|
7768
|
+
userInstructions: z57.object({
|
|
7769
|
+
text: siteSetupOwnerEditabilityNoteSchema2,
|
|
7770
|
+
source: z57.literal("user"),
|
|
7771
|
+
trust: z57.literal("untrusted")
|
|
7772
|
+
}).strict(),
|
|
7773
|
+
corrections: setupCorrectionItemsSchema2,
|
|
7774
|
+
contentSelectionSummary: z57.object({
|
|
7775
|
+
text: siteSetupOwnerEditabilityNoteSchema2,
|
|
7776
|
+
source: z57.literal("agent"),
|
|
7777
|
+
trust: z57.literal("untrusted")
|
|
7778
|
+
}).strict().nullable(),
|
|
7779
|
+
environmentBindings: z57.array(z57.object({
|
|
7780
|
+
name: z57.string().regex(/^[A-Z][A-Z0-9_]+$/u),
|
|
7781
|
+
source: z57.string().min(1),
|
|
7782
|
+
sensitivity: z57.enum(["public", "secret"]),
|
|
7783
|
+
usage: z57.enum(["build", "server", "build_and_server"]),
|
|
7784
|
+
evidence: z57.string().min(1)
|
|
7785
|
+
}).strict()),
|
|
7786
|
+
nextAction: siteSetupNextActionSchema2,
|
|
7787
|
+
error: z57.object({
|
|
7788
|
+
code: z57.string().regex(/^[a-z0-9_.]+$/u).max(160),
|
|
7789
|
+
boundary: nextActionFields2.boundary,
|
|
7790
|
+
responsibleActor: nextActionFields2.actor,
|
|
7791
|
+
retryable: z57.boolean(),
|
|
7792
|
+
retryAfter: z57.number().int().nonnegative().nullable(),
|
|
7793
|
+
requestId: z57.string().regex(/^[A-Za-z0-9_-]+$/u).max(128)
|
|
7794
|
+
}).strict().nullable(),
|
|
7795
|
+
packages: siteSetupPackagesSchema2,
|
|
7796
|
+
communication: z57.object({
|
|
7797
|
+
beforeSourceChanges: z57.string().min(1),
|
|
7798
|
+
updates: z57.array(z57.string().min(1)).min(1),
|
|
7799
|
+
blocker: z57.string().min(1)
|
|
7800
|
+
}).strict(),
|
|
7801
|
+
discovery: z57.object({
|
|
7802
|
+
inspectPublicRoutes: z57.boolean(),
|
|
7803
|
+
contentKinds: z57.array(z57.enum(["text", "longText", "link", "image"])).min(1),
|
|
7804
|
+
rules: z57.array(z57.string().min(1)).min(1)
|
|
7805
|
+
}).strict(),
|
|
7806
|
+
steps: z57.array(z57.object({
|
|
7807
|
+
id: z57.enum([
|
|
7808
|
+
"inspect_repository",
|
|
7809
|
+
"install_packages",
|
|
7810
|
+
"instrument_fields",
|
|
7811
|
+
"apply_contract",
|
|
7812
|
+
"deploy_production",
|
|
7813
|
+
"verify_deployment"
|
|
7814
|
+
]),
|
|
7815
|
+
instruction: z57.string().min(1)
|
|
7816
|
+
}).strict()).length(6),
|
|
7817
|
+
completion: z57.object({
|
|
7818
|
+
verifiedStatus: z57.literal("ready_for_review"),
|
|
7819
|
+
instruction: z57.string().min(1)
|
|
7820
|
+
}).strict()
|
|
7821
|
+
}).strict().refine((task) => hasExactSiteSetupScopes2(task.authorizedScopes, task.modules), "Task scopes must exactly match its modules.").refine((task) => task.modules.includes("analytics") === (task.packages.analytics !== void 0), "The Analytics package pin must be present exactly when Analytics is selected.");
|
|
7822
|
+
var canonicalHashSchema2 = z57.string().regex(/^sha256:[0-9a-f]{64}$/iu);
|
|
7823
|
+
var deploymentRevisionSchema2 = normalizedSafeTextSchema2(256, "deploymentRevision");
|
|
7824
|
+
var continueSiteSetupInputSchema2 = z57.object({
|
|
7825
|
+
siteId: z57.string().uuid(),
|
|
7826
|
+
runId: z57.string().uuid(),
|
|
7827
|
+
expectedReviewVersion: z57.number().int().positive(),
|
|
7828
|
+
mutationId: z57.string().uuid(),
|
|
7829
|
+
intent: z57.enum(["continue_review", "correct_completed_review"]),
|
|
7830
|
+
expectedFieldContractHash: canonicalHashSchema2,
|
|
7831
|
+
expectedDeploymentRevision: deploymentRevisionSchema2,
|
|
7832
|
+
correctionItems: setupCorrectionItemsSchema2,
|
|
7833
|
+
ownerEditabilityNote: siteSetupOwnerEditabilityNoteSchema2.optional()
|
|
7834
|
+
}).strict();
|
|
7835
|
+
var saveSiteSetupOwnerNoteInputSchema2 = z57.object({
|
|
7836
|
+
siteId: z57.string().uuid(),
|
|
7837
|
+
runId: z57.string().uuid(),
|
|
7838
|
+
expectedReviewVersion: z57.number().int().positive(),
|
|
7839
|
+
expectedFieldContractHash: canonicalHashSchema2,
|
|
7840
|
+
expectedDeploymentRevision: deploymentRevisionSchema2,
|
|
7841
|
+
ownerEditabilityNote: siteSetupOwnerEditabilityNoteSchema2
|
|
7842
|
+
}).strict();
|
|
7843
|
+
var setupReviewPreferenceSelectionSchema2 = z57.object({
|
|
7844
|
+
analyticsMode: z57.enum(["disabled", "session_only"]).nullable(),
|
|
7845
|
+
assetTargetType: z57.enum(["repo_static_assets", "siteplane_managed_fallback"]).nullable(),
|
|
7846
|
+
assetTargetId: z57.string().uuid().nullable()
|
|
7847
|
+
}).strict().refine((value) => value.assetTargetType !== null || value.assetTargetId === null, {
|
|
7848
|
+
message: "An asset target requires its delivery type."
|
|
7849
|
+
});
|
|
7850
|
+
var setupReviewPreferencesSchema2 = setupReviewPreferenceSelectionSchema2.safeExtend({
|
|
7851
|
+
managedHostingApproved: z57.boolean()
|
|
7852
|
+
});
|
|
7853
|
+
var saveSetupReviewPreferencesInputSchema2 = z57.object({
|
|
7854
|
+
siteId: z57.string().uuid(),
|
|
7855
|
+
runId: z57.string().uuid(),
|
|
7856
|
+
expectedReviewVersion: z57.number().int().positive(),
|
|
7857
|
+
preferences: setupReviewPreferenceSelectionSchema2
|
|
7858
|
+
}).strict();
|
|
7859
|
+
var siteSetupContextInputSchema2 = z57.object({}).strict();
|
|
7860
|
+
var siteSetupApplyInputSchema2 = z57.object({
|
|
7861
|
+
fieldContract: siteFieldContractV1Schema2,
|
|
7862
|
+
editorDefinition: editorDefinitionV1Schema2,
|
|
7863
|
+
contentSelectionSummary: siteSetupOwnerEditabilityNoteSchema2.refine((text) => text.trim().length > 0, "Describe the selected content, important exclusions and any open gaps.")
|
|
7864
|
+
}).strict().superRefine((input, context) => {
|
|
7865
|
+
const contractRoutesByFieldId = new Map(input.fieldContract.fields.map((field) => [
|
|
7866
|
+
field.fieldId,
|
|
7867
|
+
field.routeKey
|
|
7868
|
+
]));
|
|
7869
|
+
const definitionFieldIds = /* @__PURE__ */ new Set();
|
|
7870
|
+
for (const [routeIndex, route] of input.editorDefinition.routes.entries()) {
|
|
7871
|
+
for (const [sectionIndex, section] of route.sections.entries()) {
|
|
7872
|
+
for (const [fieldIndex, field] of section.fields.entries()) {
|
|
7873
|
+
const fieldPath = [
|
|
7874
|
+
"editorDefinition",
|
|
7875
|
+
"routes",
|
|
7876
|
+
routeIndex,
|
|
7877
|
+
"sections",
|
|
7878
|
+
sectionIndex,
|
|
7879
|
+
"fields",
|
|
7880
|
+
fieldIndex,
|
|
7881
|
+
"fieldId"
|
|
7882
|
+
];
|
|
7883
|
+
const contractRouteKey = contractRoutesByFieldId.get(field.fieldId);
|
|
7884
|
+
const contractField = input.fieldContract.fields.find((candidate) => candidate.fieldId === field.fieldId);
|
|
7885
|
+
definitionFieldIds.add(field.fieldId);
|
|
7886
|
+
if (!contractRouteKey) {
|
|
7887
|
+
context.addIssue({
|
|
7888
|
+
code: "custom",
|
|
7889
|
+
message: `Unknown editor field id: ${field.fieldId}`,
|
|
7890
|
+
path: fieldPath
|
|
7891
|
+
});
|
|
7892
|
+
} else if (contractRouteKey !== route.routeKey) {
|
|
7893
|
+
context.addIssue({
|
|
7894
|
+
code: "custom",
|
|
7895
|
+
message: `Editor field ${field.fieldId} must use route ${contractRouteKey}.`,
|
|
7896
|
+
path: fieldPath
|
|
7897
|
+
});
|
|
7898
|
+
} else if (field.maxLength !== void 0 && contractField?.fieldType !== "text" && contractField?.fieldType !== "longText") {
|
|
7899
|
+
context.addIssue({
|
|
7900
|
+
code: "custom",
|
|
7901
|
+
message: `maxLength is not supported for ${contractField?.fieldType ?? "unknown"} fields.`,
|
|
7902
|
+
path: [
|
|
7903
|
+
"editorDefinition",
|
|
7904
|
+
"routes",
|
|
7905
|
+
routeIndex,
|
|
7906
|
+
"sections",
|
|
7907
|
+
sectionIndex,
|
|
7908
|
+
"fields",
|
|
7909
|
+
fieldIndex,
|
|
7910
|
+
"maxLength"
|
|
7911
|
+
]
|
|
7912
|
+
});
|
|
7913
|
+
}
|
|
7914
|
+
}
|
|
7915
|
+
}
|
|
7916
|
+
}
|
|
7917
|
+
for (const field of input.fieldContract.fields) {
|
|
7918
|
+
if (!definitionFieldIds.has(field.fieldId)) {
|
|
7919
|
+
context.addIssue({
|
|
7920
|
+
code: "custom",
|
|
7921
|
+
message: `Missing editor field id: ${field.fieldId}`,
|
|
7922
|
+
path: ["editorDefinition", "routes"]
|
|
7923
|
+
});
|
|
7924
|
+
}
|
|
7925
|
+
}
|
|
7926
|
+
});
|
|
7927
|
+
var siteSetupVerifyInputSchema2 = z57.object({
|
|
7928
|
+
deploymentUrl: z57.string().url().refine((value) => value.startsWith("https://")),
|
|
7929
|
+
deploymentRevision: deploymentRevisionSchema2,
|
|
7930
|
+
wait: z57.boolean().optional()
|
|
7931
|
+
}).strict();
|
|
7932
|
+
var siteSetupEvidenceInputSchema2 = z57.object({
|
|
7933
|
+
siteId: z57.string().uuid(),
|
|
7934
|
+
runId: z57.string().uuid(),
|
|
7935
|
+
expectedFieldContractHash: canonicalHashSchema2,
|
|
7936
|
+
expectedDeploymentOrigin: z57.string().url().refine((value) => value.startsWith("https://")),
|
|
7937
|
+
expectedDeploymentRevision: deploymentRevisionSchema2,
|
|
7938
|
+
publicRuntimeKeyId: z57.string().uuid(),
|
|
7939
|
+
bridgeSessionId: normalizedSafeTextSchema2(256, "bridgeSessionId"),
|
|
7940
|
+
observations: z57.array(z57.object({
|
|
7941
|
+
fieldId: fieldIdSchema2,
|
|
7942
|
+
fieldType: fieldTypeSchema2,
|
|
7943
|
+
routeKey: siteFieldRouteKeySchema2,
|
|
7944
|
+
renderedPath: renderedPathSchema2,
|
|
7945
|
+
targetResolved: z57.boolean(),
|
|
7946
|
+
previewAck: z57.boolean()
|
|
7947
|
+
}).strict().refine((value) => !value.previewAck || value.targetResolved, "Preview ACK requires a resolved target.")).min(1).max(200)
|
|
7948
|
+
}).strict();
|
|
7949
|
+
var completeSetupReviewInputSchema2 = z57.object({
|
|
7950
|
+
siteId: z57.string().uuid(),
|
|
7951
|
+
runId: z57.string().uuid(),
|
|
7952
|
+
expectedReviewVersion: z57.number().int().positive(),
|
|
7953
|
+
expectedFieldContractHash: canonicalHashSchema2,
|
|
7954
|
+
expectedDeploymentRevision: deploymentRevisionSchema2,
|
|
7955
|
+
expectedReadyFingerprint: canonicalHashSchema2
|
|
7956
|
+
}).strict();
|
|
7957
|
+
var activateSiteSetupInputSchema2 = z57.object({
|
|
7958
|
+
siteId: z57.string().uuid(),
|
|
7959
|
+
runId: z57.string().uuid(),
|
|
7960
|
+
expectedReviewVersion: z57.number().int().positive(),
|
|
7961
|
+
expectedSnapshotHash: canonicalHashSchema2
|
|
7962
|
+
}).strict();
|
|
7963
|
+
var refreshSiteSetupDeploymentInputSchema2 = z57.object({
|
|
7964
|
+
siteId: z57.string().uuid(),
|
|
7965
|
+
deploymentUrl: z57.string().url().refine((value) => value.startsWith("https://")),
|
|
7966
|
+
deploymentRevision: deploymentRevisionSchema2
|
|
7967
|
+
}).strict();
|
|
7968
|
+
function addSafeByteIssues2(value, maxBytes, label, context) {
|
|
7969
|
+
if (utf8Bytes2(value) > maxBytes) {
|
|
7970
|
+
context.addIssue({
|
|
7971
|
+
code: "custom",
|
|
7972
|
+
message: `${label} exceeds ${maxBytes} UTF-8 bytes.`
|
|
7973
|
+
});
|
|
7974
|
+
}
|
|
7975
|
+
if (forbiddenControlOrBidi2.test(value)) {
|
|
7976
|
+
context.addIssue({
|
|
7977
|
+
code: "custom",
|
|
7978
|
+
message: `${label} contains a forbidden control or bidi character.`
|
|
7979
|
+
});
|
|
7980
|
+
}
|
|
7981
|
+
}
|
|
7982
|
+
function utf8Bytes2(value) {
|
|
7983
|
+
return new TextEncoder().encode(value).byteLength;
|
|
7984
|
+
}
|
|
7985
|
+
var setupActivationApprovalSchema2 = z57.object({
|
|
7986
|
+
reviewVersion: z57.number().int().positive(),
|
|
7987
|
+
snapshotHash: canonicalHashSchema2,
|
|
7988
|
+
analytics: z57.object({
|
|
7989
|
+
status: z57.enum(["active", "skipped"]),
|
|
7990
|
+
reviewVersion: z57.number().int().positive(),
|
|
7991
|
+
generation: z57.number().int().nonnegative()
|
|
7992
|
+
}).optional()
|
|
7993
|
+
});
|
|
7994
|
+
var activateSetupModulesInputSchema2 = activateSiteSetupInputSchema2.extend({
|
|
7995
|
+
analytics: z57.discriminatedUnion("decision", [
|
|
7996
|
+
z57.object({ decision: z57.literal("pending") }).strict(),
|
|
7997
|
+
z57.object({
|
|
7998
|
+
decision: z57.literal("enable"),
|
|
7999
|
+
readinessTestRunId: z57.string().regex(/^analytics_owner_[0-9a-f-]{36}$/u),
|
|
8000
|
+
expectedInstallationGeneration: z57.number().int().positive(),
|
|
8001
|
+
measurementApproved: z57.literal(true)
|
|
8002
|
+
}).strict(),
|
|
8003
|
+
z57.object({
|
|
8004
|
+
decision: z57.literal("skip"),
|
|
8005
|
+
expectedInstallationGeneration: z57.number().int().nonnegative(),
|
|
8006
|
+
continueWithoutAnalytics: z57.literal(true)
|
|
8007
|
+
}).strict()
|
|
8008
|
+
])
|
|
8009
|
+
}).strict();
|
|
8010
|
+
|
|
8011
|
+
// ../shared/dist/bridge-protocol.js
|
|
8012
|
+
var BRIDGE_PROTOCOL_VERSION2 = 2;
|
|
8013
|
+
var bridgeRectSchema2 = z58.object({
|
|
8014
|
+
x: z58.number(),
|
|
8015
|
+
y: z58.number(),
|
|
8016
|
+
width: z58.number().nonnegative(),
|
|
8017
|
+
height: z58.number().nonnegative()
|
|
8018
|
+
});
|
|
8019
|
+
var previewTextValueSchema2 = z58.object({
|
|
8020
|
+
fieldType: z58.enum(["text", "longText"]),
|
|
8021
|
+
value: z58.string()
|
|
8022
|
+
});
|
|
8023
|
+
var previewLinkValueSchema2 = z58.object({
|
|
8024
|
+
fieldType: z58.literal("link"),
|
|
8025
|
+
value: z58.object({
|
|
8026
|
+
href: z58.string().trim().min(1),
|
|
8027
|
+
label: z58.string().trim().min(1).optional()
|
|
8028
|
+
})
|
|
8029
|
+
});
|
|
8030
|
+
var previewImageValueSchema2 = z58.object({
|
|
8031
|
+
fieldType: z58.literal("image"),
|
|
8032
|
+
value: imageValueSchema2
|
|
8033
|
+
});
|
|
8034
|
+
var bridgePreviewValueSchema2 = z58.discriminatedUnion("fieldType", [
|
|
8035
|
+
previewTextValueSchema2,
|
|
8036
|
+
previewLinkValueSchema2,
|
|
8037
|
+
previewImageValueSchema2
|
|
8038
|
+
]);
|
|
8039
|
+
var fieldSelectionModeSchema2 = z58.enum(["replace", "range", "toggle"]);
|
|
8040
|
+
var fieldBridgeMissingContentActionSchema2 = z58.enum([
|
|
8041
|
+
"add",
|
|
8042
|
+
"select",
|
|
8043
|
+
"remove"
|
|
8044
|
+
]);
|
|
8045
|
+
var FIELD_BRIDGE_MESSAGE_TYPES2 = [
|
|
8046
|
+
"siteplane:field-bridge:init",
|
|
8047
|
+
"siteplane:field-bridge:ready",
|
|
8048
|
+
"siteplane:field-bridge:fields",
|
|
8049
|
+
"siteplane:field-bridge:select-field",
|
|
8050
|
+
"siteplane:field-bridge:set-selected-field",
|
|
8051
|
+
"siteplane:field-bridge:apply-preview-values",
|
|
8052
|
+
"siteplane:field-bridge:test-preview-values",
|
|
8053
|
+
"siteplane:field-bridge:preview-ack",
|
|
8054
|
+
"siteplane:field-bridge:set-visual-control-state",
|
|
8055
|
+
"siteplane:field-bridge:missing-content",
|
|
8056
|
+
"siteplane:field-bridge:preview-scrolled",
|
|
8057
|
+
"siteplane:field-bridge:analytics-probe",
|
|
8058
|
+
"siteplane:field-bridge:analytics-probe-result",
|
|
8059
|
+
"siteplane:field-bridge:error"
|
|
8060
|
+
];
|
|
8061
|
+
var canonicalFieldContractHashSchema2 = z58.string().regex(/^sha256:[0-9a-f]{64}$/u);
|
|
8062
|
+
var bridgeSectionSchema2 = z58.string().trim().min(1).max(256);
|
|
8063
|
+
var realRenderedPathSchema2 = z58.string().trim().refine((value) => value.startsWith("/") && value !== "$global" && !value.includes("?") && !value.includes("#"), "A field bridge rendered path must be a real canonical path.");
|
|
8064
|
+
var fieldBridgeIdentitySchema2 = z58.object({
|
|
8065
|
+
publicRuntimeKeyId: z58.string().uuid(),
|
|
8066
|
+
fieldContractHash: canonicalFieldContractHashSchema2,
|
|
8067
|
+
deploymentRevision: z58.string().trim().min(1).max(256)
|
|
8068
|
+
}).strict();
|
|
8069
|
+
var setupPreviewAccessSchema2 = z58.object({
|
|
8070
|
+
capability: z58.string().regex(/^v1\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]{43}$/u).max(4096),
|
|
8071
|
+
expiresAt: z58.string().datetime()
|
|
8072
|
+
}).strict();
|
|
8073
|
+
var setupPreviewReadSchema2 = fieldBridgeIdentitySchema2.extend({
|
|
8074
|
+
scope: z58.literal("setup_preview"),
|
|
8075
|
+
siteId: z58.string().uuid(),
|
|
8076
|
+
runId: z58.string().uuid(),
|
|
8077
|
+
bridgeSessionId: z58.string().min(1),
|
|
8078
|
+
expiresAt: z58.string().datetime(),
|
|
8079
|
+
contract: siteFieldContractV1Schema2
|
|
8080
|
+
}).strict();
|
|
8081
|
+
var fieldBridgeBaseSchema2 = z58.object({
|
|
8082
|
+
version: z58.literal(BRIDGE_PROTOCOL_VERSION2),
|
|
8083
|
+
type: z58.enum(FIELD_BRIDGE_MESSAGE_TYPES2),
|
|
8084
|
+
siteId: z58.string().uuid(),
|
|
8085
|
+
sessionId: z58.string().trim().min(1),
|
|
8086
|
+
publicRuntimeKeyId: z58.string().uuid(),
|
|
8087
|
+
fieldContractHash: canonicalFieldContractHashSchema2,
|
|
8088
|
+
deploymentRevision: z58.string().trim().min(1).max(256),
|
|
8089
|
+
requestId: z58.string().trim().min(1),
|
|
8090
|
+
sentAt: z58.string().datetime()
|
|
8091
|
+
}).strict();
|
|
8092
|
+
var fieldBridgeFieldSchema2 = z58.object({
|
|
8093
|
+
fieldId: fieldIdSchema2,
|
|
8094
|
+
fieldType: fieldTypeSchema2,
|
|
8095
|
+
routeKey: siteFieldRouteKeySchema2,
|
|
8096
|
+
renderedPath: realRenderedPathSchema2,
|
|
8097
|
+
sourcePath: z58.string().trim().min(1).optional(),
|
|
8098
|
+
editTarget: fieldIdSchema2,
|
|
8099
|
+
rect: bridgeRectSchema2,
|
|
8100
|
+
targetResolved: z58.literal(true),
|
|
8101
|
+
currentValue: bridgePreviewValueSchema2.optional()
|
|
8102
|
+
}).strict();
|
|
8103
|
+
var fieldBridgeInitMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8104
|
+
type: z58.literal("siteplane:field-bridge:init"),
|
|
8105
|
+
payload: z58.object({
|
|
8106
|
+
adminOrigin: z58.string().url(),
|
|
8107
|
+
customerOrigin: z58.string().url(),
|
|
8108
|
+
renderedPath: realRenderedPathSchema2,
|
|
8109
|
+
setupPreview: setupPreviewAccessSchema2.optional()
|
|
8110
|
+
}).strict()
|
|
8111
|
+
});
|
|
8112
|
+
var fieldBridgeReadyMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8113
|
+
type: z58.literal("siteplane:field-bridge:ready"),
|
|
8114
|
+
payload: z58.object({
|
|
8115
|
+
renderedPath: realRenderedPathSchema2,
|
|
8116
|
+
fieldCount: z58.number().int().nonnegative(),
|
|
8117
|
+
capabilities: z58.tuple([
|
|
8118
|
+
z58.literal("field_selection"),
|
|
8119
|
+
z58.literal("preview_values"),
|
|
8120
|
+
z58.literal("field_evidence"),
|
|
8121
|
+
z58.literal("visual_field_control")
|
|
8122
|
+
]).rest(z58.enum(["analytics_preview_readiness", "setup_preview"])).refine((capabilities) => capabilities.length <= 6)
|
|
8123
|
+
}).strict()
|
|
8124
|
+
});
|
|
8125
|
+
var fieldBridgeFieldsMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8126
|
+
type: z58.literal("siteplane:field-bridge:fields"),
|
|
8127
|
+
payload: z58.object({
|
|
8128
|
+
renderedPath: realRenderedPathSchema2,
|
|
8129
|
+
fields: z58.array(fieldBridgeFieldSchema2)
|
|
8130
|
+
}).strict()
|
|
8131
|
+
});
|
|
8132
|
+
var fieldBridgeSelectFieldMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8133
|
+
type: z58.literal("siteplane:field-bridge:select-field"),
|
|
8134
|
+
payload: z58.object({
|
|
8135
|
+
fieldId: fieldIdSchema2,
|
|
8136
|
+
selectionMode: fieldSelectionModeSchema2
|
|
8137
|
+
}).strict()
|
|
8138
|
+
});
|
|
8139
|
+
var fieldBridgeSetSelectedFieldMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8140
|
+
type: z58.literal("siteplane:field-bridge:set-selected-field"),
|
|
8141
|
+
payload: z58.object({
|
|
8142
|
+
fieldIds: z58.array(fieldIdSchema2).max(200),
|
|
8143
|
+
primaryFieldId: fieldIdSchema2.nullable(),
|
|
8144
|
+
scrollIntoView: z58.boolean().optional()
|
|
8145
|
+
}).strict().superRefine((value, context) => {
|
|
8146
|
+
if (value.fieldIds.length > 0 && value.primaryFieldId === null) {
|
|
8147
|
+
context.addIssue({
|
|
8148
|
+
code: "custom",
|
|
8149
|
+
message: "A non-empty selection needs a primary field.",
|
|
8150
|
+
path: ["primaryFieldId"]
|
|
8151
|
+
});
|
|
8152
|
+
}
|
|
8153
|
+
if (value.primaryFieldId !== null && !value.fieldIds.includes(value.primaryFieldId)) {
|
|
8154
|
+
context.addIssue({
|
|
8155
|
+
code: "custom",
|
|
8156
|
+
message: "The primary field must be part of the selection.",
|
|
8157
|
+
path: ["primaryFieldId"]
|
|
8158
|
+
});
|
|
8159
|
+
}
|
|
8160
|
+
})
|
|
8161
|
+
});
|
|
8162
|
+
var fieldBridgeApplyPreviewValuesMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8163
|
+
type: z58.literal("siteplane:field-bridge:apply-preview-values"),
|
|
8164
|
+
payload: z58.object({ values: z58.record(fieldIdSchema2, bridgePreviewValueSchema2) }).strict()
|
|
8165
|
+
});
|
|
8166
|
+
var fieldBridgeTestPreviewValuesMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8167
|
+
type: z58.literal("siteplane:field-bridge:test-preview-values"),
|
|
8168
|
+
payload: z58.object({ fieldIds: z58.array(fieldIdSchema2).min(1).max(200) }).strict()
|
|
8169
|
+
});
|
|
8170
|
+
var fieldBridgePreviewAckMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8171
|
+
type: z58.literal("siteplane:field-bridge:preview-ack"),
|
|
8172
|
+
payload: z58.object({
|
|
8173
|
+
ackRequestId: z58.string().trim().min(1),
|
|
8174
|
+
kind: z58.enum(["apply", "test"]),
|
|
8175
|
+
renderedPath: realRenderedPathSchema2,
|
|
8176
|
+
fieldIds: z58.array(fieldIdSchema2).max(200)
|
|
8177
|
+
}).strict()
|
|
8178
|
+
});
|
|
8179
|
+
var fieldBridgeSetVisualControlStateMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8180
|
+
type: z58.literal("siteplane:field-bridge:set-visual-control-state"),
|
|
8181
|
+
payload: z58.object({
|
|
8182
|
+
enabled: z58.boolean(),
|
|
8183
|
+
fieldProximityEnabled: z58.boolean(),
|
|
8184
|
+
pendingKeys: z58.array(z58.string().trim().min(1).max(2048)).max(50),
|
|
8185
|
+
activeFieldIds: z58.array(fieldIdSchema2),
|
|
8186
|
+
fieldSections: z58.record(fieldIdSchema2, bridgeSectionSchema2),
|
|
8187
|
+
selectedPending: z58.array(z58.object({
|
|
8188
|
+
key: z58.string().trim().min(1).max(2048),
|
|
8189
|
+
locatorHint: z58.string().trim().min(1).max(2048)
|
|
8190
|
+
}).strict()).max(50),
|
|
8191
|
+
scrollPendingIntoView: z58.boolean().optional()
|
|
8192
|
+
}).strict()
|
|
8193
|
+
});
|
|
8194
|
+
var fieldBridgeMissingContentMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8195
|
+
type: z58.literal("siteplane:field-bridge:missing-content"),
|
|
8196
|
+
payload: z58.object({
|
|
8197
|
+
action: fieldBridgeMissingContentActionSchema2,
|
|
8198
|
+
item: setupCorrectionItemSchema2,
|
|
8199
|
+
suggestedSection: bridgeSectionSchema2.optional()
|
|
8200
|
+
}).strict()
|
|
8201
|
+
});
|
|
8202
|
+
var fieldBridgePreviewScrolledMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8203
|
+
type: z58.literal("siteplane:field-bridge:preview-scrolled"),
|
|
8204
|
+
payload: z58.object({ renderedPath: realRenderedPathSchema2 }).strict()
|
|
8205
|
+
});
|
|
8206
|
+
var analyticsPreviewChallengeSchema2 = z58.object({
|
|
8207
|
+
bridgeSessionId: z58.string().uuid(),
|
|
8208
|
+
challenge: z58.string().min(32).max(512),
|
|
8209
|
+
testRunId: z58.string().trim().min(1).max(160),
|
|
8210
|
+
expiresAt: z58.string().datetime()
|
|
8211
|
+
}).strict();
|
|
8212
|
+
var fieldBridgeAnalyticsProbeSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8213
|
+
type: z58.literal("siteplane:field-bridge:analytics-probe"),
|
|
8214
|
+
requestId: z58.string().min(1).max(256),
|
|
8215
|
+
payload: analyticsPreviewChallengeSchema2
|
|
8216
|
+
});
|
|
8217
|
+
var fieldBridgeAnalyticsProbeResultSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8218
|
+
type: z58.literal("siteplane:field-bridge:analytics-probe-result"),
|
|
8219
|
+
payload: z58.object({
|
|
8220
|
+
ackRequestId: z58.string().min(1).max(256),
|
|
8221
|
+
status: z58.enum(["recorded", "failed"])
|
|
8222
|
+
}).strict()
|
|
8223
|
+
});
|
|
8224
|
+
var fieldBridgeErrorMessageSchema2 = fieldBridgeBaseSchema2.extend({
|
|
8225
|
+
type: z58.literal("siteplane:field-bridge:error"),
|
|
8226
|
+
payload: z58.object({
|
|
8227
|
+
code: z58.string().trim().min(1),
|
|
8228
|
+
message: z58.string().trim().min(1),
|
|
8229
|
+
recoverable: z58.boolean().default(false)
|
|
8230
|
+
}).strict()
|
|
8231
|
+
});
|
|
8232
|
+
var fieldBridgeMessageSchema2 = z58.discriminatedUnion("type", [
|
|
8233
|
+
fieldBridgeInitMessageSchema2,
|
|
8234
|
+
fieldBridgeReadyMessageSchema2,
|
|
8235
|
+
fieldBridgeFieldsMessageSchema2,
|
|
8236
|
+
fieldBridgeSelectFieldMessageSchema2,
|
|
8237
|
+
fieldBridgeSetSelectedFieldMessageSchema2,
|
|
8238
|
+
fieldBridgeApplyPreviewValuesMessageSchema2,
|
|
8239
|
+
fieldBridgeTestPreviewValuesMessageSchema2,
|
|
8240
|
+
fieldBridgePreviewAckMessageSchema2,
|
|
8241
|
+
fieldBridgeSetVisualControlStateMessageSchema2,
|
|
8242
|
+
fieldBridgeMissingContentMessageSchema2,
|
|
8243
|
+
fieldBridgePreviewScrolledMessageSchema2,
|
|
8244
|
+
fieldBridgeErrorMessageSchema2,
|
|
8245
|
+
fieldBridgeAnalyticsProbeSchema2,
|
|
8246
|
+
fieldBridgeAnalyticsProbeResultSchema2
|
|
8247
|
+
]);
|
|
8248
|
+
|
|
8249
|
+
// ../shared/dist/commands.js
|
|
8250
|
+
import { z as z60 } from "zod";
|
|
8251
|
+
|
|
8252
|
+
// ../shared/dist/errors.js
|
|
8253
|
+
import { z as z59 } from "zod";
|
|
8254
|
+
var UI_ERROR_CATEGORIES2 = [
|
|
8255
|
+
"site_member",
|
|
8256
|
+
"workspace_member",
|
|
8257
|
+
"internal"
|
|
8258
|
+
];
|
|
8259
|
+
var uiErrorCategorySchema2 = z59.enum(UI_ERROR_CATEGORIES2);
|
|
8260
|
+
var commandErrorPayloadSchema2 = z59.object({
|
|
8261
|
+
code: z59.string().min(1),
|
|
8262
|
+
message: z59.string().min(1),
|
|
8263
|
+
category: uiErrorCategorySchema2,
|
|
8264
|
+
details: z59.record(z59.string(), z59.unknown()).optional()
|
|
8265
|
+
});
|
|
8266
|
+
|
|
8267
|
+
// ../shared/dist/commands.js
|
|
8268
|
+
var commandSuccessSchema2 = z60.object({
|
|
8269
|
+
ok: z60.literal(true),
|
|
8270
|
+
data: z60.unknown()
|
|
8271
|
+
});
|
|
8272
|
+
var commandErrorSchema2 = z60.object({
|
|
8273
|
+
ok: z60.literal(false),
|
|
8274
|
+
error: commandErrorPayloadSchema2
|
|
8275
|
+
});
|
|
8276
|
+
var commandResultSchema2 = z60.discriminatedUnion("ok", [
|
|
8277
|
+
commandSuccessSchema2,
|
|
8278
|
+
commandErrorSchema2
|
|
8279
|
+
]);
|
|
8280
|
+
|
|
8281
|
+
// ../shared/dist/editor-settings.js
|
|
8282
|
+
import { z as z61 } from "zod";
|
|
8283
|
+
var editorColorSchemeSchema2 = z61.enum([
|
|
8284
|
+
"paper",
|
|
8285
|
+
"slate",
|
|
8286
|
+
"siteplane",
|
|
8287
|
+
"bloom"
|
|
8288
|
+
]);
|
|
8289
|
+
var editorColorSchemes2 = editorColorSchemeSchema2.options;
|
|
8290
|
+
var editorColorModeSchema2 = z61.enum(["light", "dark"]);
|
|
8291
|
+
var editorColorModes2 = editorColorModeSchema2.options;
|
|
8292
|
+
|
|
8293
|
+
// ../shared/dist/site-slug.js
|
|
8294
|
+
import { z as z62 } from "zod";
|
|
8295
|
+
var SITE_SLUG_PATTERN2 = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
8296
|
+
var RESERVED_SITE_SLUGS2 = /* @__PURE__ */ new Set([
|
|
8297
|
+
"account",
|
|
8298
|
+
"admin",
|
|
8299
|
+
"api",
|
|
8300
|
+
"app",
|
|
8301
|
+
"auth",
|
|
8302
|
+
"book",
|
|
8303
|
+
"claim",
|
|
8304
|
+
"dev",
|
|
8305
|
+
"login",
|
|
8306
|
+
"new",
|
|
8307
|
+
"portal",
|
|
8308
|
+
"support",
|
|
8309
|
+
"workspace"
|
|
8310
|
+
]);
|
|
8311
|
+
var siteSlugSchema2 = z62.string().regex(SITE_SLUG_PATTERN2, "Invalid site slug").refine((value) => !RESERVED_SITE_SLUGS2.has(value), "Reserved site slug");
|
|
8312
|
+
|
|
8313
|
+
// ../shared/dist/entitlements.js
|
|
8314
|
+
import { z as z63 } from "zod";
|
|
8315
|
+
var entitlementSnapshotSchema2 = z63.object({
|
|
8316
|
+
planKey: z63.string().trim().min(1),
|
|
8317
|
+
sitesLimit: z63.number().int().positive(),
|
|
8318
|
+
siteMembersPerSiteLimit: z63.number().int().positive(),
|
|
8319
|
+
customAdminDomainsEnabled: z63.boolean(),
|
|
8320
|
+
agentMcpEnabled: z63.boolean(),
|
|
8321
|
+
emailNotificationsEnabled: z63.boolean(),
|
|
8322
|
+
analyticsEnabled: z63.boolean(),
|
|
8323
|
+
analyticsSitesLimit: z63.number().int().min(0),
|
|
8324
|
+
analyticsPortalPerformanceEnabled: z63.boolean(),
|
|
8325
|
+
analyticsMonthlyReportsEnabled: z63.boolean(),
|
|
8326
|
+
analyticsAiSummaryEnabled: z63.boolean(),
|
|
8327
|
+
analyticsRawEventRetentionDays: z63.number().int().min(1).max(ANALYTICS_RETENTION_DEFAULTS2.maxRawEventRetentionDaysWithoutAdr),
|
|
8328
|
+
analyticsMonthlyEventLimit: z63.number().int().min(0),
|
|
8329
|
+
bookingEnabled: z63.boolean().default(false),
|
|
8330
|
+
bookingSitesLimit: z63.number().int().min(0).default(0),
|
|
8331
|
+
bookingPortalManagementEnabled: z63.boolean().default(false),
|
|
8332
|
+
bookingResourcesPerSiteLimit: z63.number().int().min(0).default(0),
|
|
8333
|
+
bookingServicesPerSiteLimit: z63.number().int().min(0).default(0),
|
|
8334
|
+
bookingMonthlyBookingsLimit: z63.number().int().min(0).default(0),
|
|
8335
|
+
bookingRemindersEnabled: z63.boolean().default(false)
|
|
8336
|
+
});
|
|
8337
|
+
var EARLY_ACCESS_PLAN2 = {
|
|
8338
|
+
planKey: "early_access_2026",
|
|
8339
|
+
sitesLimit: 3,
|
|
8340
|
+
siteMembersPerSiteLimit: 5,
|
|
8341
|
+
customAdminDomainsEnabled: true,
|
|
8342
|
+
agentMcpEnabled: true,
|
|
8343
|
+
emailNotificationsEnabled: true,
|
|
8344
|
+
analyticsEnabled: true,
|
|
8345
|
+
analyticsSitesLimit: 3,
|
|
8346
|
+
analyticsPortalPerformanceEnabled: false,
|
|
8347
|
+
analyticsMonthlyReportsEnabled: false,
|
|
8348
|
+
analyticsAiSummaryEnabled: false,
|
|
8349
|
+
analyticsRawEventRetentionDays: ANALYTICS_RETENTION_DEFAULTS2.enabledRawEventRetentionDays,
|
|
8350
|
+
analyticsMonthlyEventLimit: 0,
|
|
8351
|
+
bookingEnabled: true,
|
|
8352
|
+
bookingSitesLimit: 3,
|
|
8353
|
+
bookingPortalManagementEnabled: true,
|
|
8354
|
+
bookingResourcesPerSiteLimit: 10,
|
|
8355
|
+
bookingServicesPerSiteLimit: 50,
|
|
8356
|
+
bookingMonthlyBookingsLimit: 0,
|
|
8357
|
+
bookingRemindersEnabled: true
|
|
8358
|
+
};
|
|
8359
|
+
|
|
8360
|
+
// ../shared/dist/first-party-image-upload.js
|
|
8361
|
+
var maxFirstPartyImageUploadBytes2 = 4 * 1024 * 1024;
|
|
8362
|
+
|
|
8363
|
+
// ../shared/dist/readiness.js
|
|
8364
|
+
import { z as z64 } from "zod";
|
|
8365
|
+
var READINESS_CHECK_KEYS2 = [
|
|
8366
|
+
"agent_instructions_installed",
|
|
8367
|
+
"runtime_package_connected",
|
|
8368
|
+
"secure_server_access_configured",
|
|
8369
|
+
"preview_bridge_working",
|
|
8370
|
+
"admin_access_url_selected",
|
|
8371
|
+
"default_publishing_mode_selected"
|
|
8372
|
+
];
|
|
8373
|
+
var READINESS_STATUSES2 = [
|
|
8374
|
+
"pending",
|
|
8375
|
+
"passing",
|
|
8376
|
+
"failing",
|
|
8377
|
+
"warning"
|
|
8378
|
+
];
|
|
8379
|
+
var readinessCheckKeySchema2 = z64.enum(READINESS_CHECK_KEYS2);
|
|
8380
|
+
var readinessStatusSchema2 = z64.enum(READINESS_STATUSES2);
|
|
8381
|
+
|
|
8382
|
+
// ../shared/dist/site.js
|
|
8383
|
+
import { z as z65 } from "zod";
|
|
8384
|
+
var SITE_STATUSES2 = [
|
|
8385
|
+
"setup",
|
|
8386
|
+
"active",
|
|
8387
|
+
"disabled",
|
|
8388
|
+
"archived"
|
|
8389
|
+
];
|
|
8390
|
+
var siteStatusSchema2 = z65.enum(SITE_STATUSES2);
|
|
8391
|
+
var websiteUrlSchema2 = z65.string().trim().url().refine((value) => value.startsWith("https://") || value.startsWith("http://"), "Website URL must use http or https");
|
|
8392
|
+
|
|
8393
|
+
// ../shared/dist/setup-assets.js
|
|
8394
|
+
import { z as z66 } from "zod";
|
|
8395
|
+
var configureSetupAssetTargetInputSchema2 = z66.object({
|
|
8396
|
+
siteId: z66.string().uuid(),
|
|
8397
|
+
runId: z66.string().uuid(),
|
|
8398
|
+
expectedReviewVersion: z66.number().int().positive(),
|
|
8399
|
+
expectedSnapshotHash: z66.string().regex(/^sha256:[0-9a-f]{64}$/u),
|
|
8400
|
+
mutationId: z66.string().uuid(),
|
|
8401
|
+
expectedApprovalId: z66.string().uuid().nullable(),
|
|
8402
|
+
targetId: z66.string().uuid().nullable(),
|
|
8403
|
+
targetType: z66.enum(["repo_static_assets", "siteplane_managed_fallback"]),
|
|
8404
|
+
approveManagedHosting: z66.boolean()
|
|
8405
|
+
}).strict().refine((value) => value.targetType === "siteplane_managed_fallback" || !value.approveManagedHosting);
|
|
8406
|
+
var setupAssetTargetApprovalSchema2 = z66.object({
|
|
8407
|
+
id: z66.string().uuid(),
|
|
8408
|
+
runId: z66.string().uuid(),
|
|
8409
|
+
reviewVersion: z66.number().int().positive(),
|
|
8410
|
+
snapshotHash: z66.string().regex(/^sha256:[0-9a-f]{64}$/u),
|
|
8411
|
+
targetId: z66.string().uuid(),
|
|
8412
|
+
targetType: z66.enum(["repo_static_assets", "siteplane_managed_fallback"]),
|
|
8413
|
+
targetRevision: z66.number().int().positive(),
|
|
8414
|
+
deploymentOrigin: z66.string().url(),
|
|
8415
|
+
gitConnectionId: z66.string().uuid().nullable(),
|
|
8416
|
+
gitRevision: z66.number().int().positive().nullable(),
|
|
8417
|
+
managedHostingApproved: z66.boolean(),
|
|
8418
|
+
actorUserId: z66.string().uuid(),
|
|
8419
|
+
approvedAt: z66.string().datetime({ offset: true })
|
|
8420
|
+
}).strict();
|
|
8421
|
+
var setupAssetReadinessSchema2 = z66.union([
|
|
8422
|
+
z66.object({
|
|
8423
|
+
status: z66.enum([
|
|
8424
|
+
"not_required",
|
|
8425
|
+
"needs_choice",
|
|
8426
|
+
"stale_setup_review",
|
|
8427
|
+
"permission_denied"
|
|
8428
|
+
])
|
|
8429
|
+
}).strict(),
|
|
8430
|
+
z66.object({
|
|
8431
|
+
status: z66.literal("stale_approval"),
|
|
8432
|
+
approval: setupAssetTargetApprovalSchema2.optional()
|
|
8433
|
+
}).strict(),
|
|
8434
|
+
z66.object({
|
|
8435
|
+
status: z66.literal("not_verified"),
|
|
8436
|
+
approval: setupAssetTargetApprovalSchema2,
|
|
8437
|
+
jobId: z66.string().uuid().optional(),
|
|
8438
|
+
checkedAt: z66.string().datetime({ offset: true }).nullable().optional()
|
|
8439
|
+
}).strict(),
|
|
8440
|
+
z66.object({
|
|
8441
|
+
status: z66.enum(["ready", "checking", "retrying"]),
|
|
8442
|
+
approval: setupAssetTargetApprovalSchema2,
|
|
8443
|
+
jobId: z66.string().uuid(),
|
|
8444
|
+
checkedAt: z66.string().datetime({ offset: true }).nullable()
|
|
8445
|
+
}).strict().refine((value) => value.status !== "ready" || value.checkedAt !== null)
|
|
8446
|
+
]);
|
|
8447
|
+
var checkSetupAssetTargetInputSchema2 = z66.object({
|
|
8448
|
+
siteId: z66.string().uuid(),
|
|
8449
|
+
runId: z66.string().uuid(),
|
|
8450
|
+
approvalId: z66.string().uuid(),
|
|
8451
|
+
intent: z66.enum(["start", "poll"])
|
|
8452
|
+
}).strict();
|
|
8453
|
+
|
|
8454
|
+
// ../shared/dist/setup-installation.js
|
|
8455
|
+
import { z as z67 } from "zod";
|
|
8456
|
+
var setupInstallationRequestSchema2 = z67.object({
|
|
8457
|
+
modules: siteSetupModulesSchema2,
|
|
8458
|
+
ownerEditabilityNote: siteSetupOwnerEditabilityNoteSchema2,
|
|
8459
|
+
provider: z67.object({
|
|
8460
|
+
projectId: z67.string().min(1).max(200),
|
|
8461
|
+
teamId: z67.string().min(1).max(200)
|
|
8462
|
+
}).strict()
|
|
8463
|
+
}).strict();
|
|
8464
|
+
|
|
8465
|
+
// ../shared/dist/setup-claim.js
|
|
8466
|
+
import { z as z68 } from "zod";
|
|
8467
|
+
var setupClaimCodeSchema2 = z68.string().regex(/^[0-9A-HJKMNP-TV-Z]{8}$/u);
|
|
8468
|
+
var setupClaimBindingSchema2 = z68.object({
|
|
8469
|
+
siteId: z68.string().uuid(),
|
|
8470
|
+
runId: z68.string().uuid()
|
|
8471
|
+
});
|
|
8472
|
+
var setupClaimReceiptSchema2 = setupClaimBindingSchema2.extend({
|
|
8473
|
+
status: z68.literal("claimed"),
|
|
8474
|
+
requestId: z68.string().uuid(),
|
|
8475
|
+
workspaceId: z68.string().uuid(),
|
|
8476
|
+
userId: z68.string().uuid(),
|
|
8477
|
+
claimedAt: z68.string().datetime({ offset: true })
|
|
8478
|
+
}).strict();
|
|
8479
|
+
var setupClaimInspectionSchema2 = setupClaimBindingSchema2.extend({
|
|
8480
|
+
status: z68.literal("pending"),
|
|
8481
|
+
requestId: z68.string().uuid(),
|
|
8482
|
+
siteName: z68.string(),
|
|
8483
|
+
userId: z68.string().uuid(),
|
|
8484
|
+
accountEmail: z68.string().email(),
|
|
8485
|
+
workspaceId: z68.string().uuid(),
|
|
8486
|
+
workspaceName: z68.string(),
|
|
8487
|
+
expiresAt: z68.string().datetime({ offset: true })
|
|
8488
|
+
}).strict();
|
|
8489
|
+
var setupClaimDenialSchema2 = z68.object({
|
|
8490
|
+
status: z68.enum([
|
|
8491
|
+
"invalid_claim_request",
|
|
8492
|
+
"invalid_installation",
|
|
8493
|
+
"already_claimed",
|
|
8494
|
+
"project_expired",
|
|
8495
|
+
"invalid_guest_session",
|
|
8496
|
+
"stale_setup_review",
|
|
8497
|
+
"verified_account_required",
|
|
8498
|
+
"workspace_access_denied",
|
|
8499
|
+
"workspace_entitlement_required",
|
|
8500
|
+
"site_limit_reached",
|
|
8501
|
+
"provisional_relationship_conflict",
|
|
8502
|
+
"rate_limited"
|
|
8503
|
+
])
|
|
8504
|
+
}).strict();
|
|
8505
|
+
|
|
6414
8506
|
// src/bin/run-siteplane.ts
|
|
6415
8507
|
async function runSiteplaneCli(args, dependencies = createDefaultDependencies()) {
|
|
6416
8508
|
const writes = args[0] === "init" || args[0] === "analytics" && args[1] === "init" || args[0] === "setup" && (["start", "apply", "prepare", "deploy"].includes(args[1] ?? "") || args[1] === "claim" && args[2] === "confirm");
|