siteplane 0.1.58 → 0.1.60
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/README.md +10 -6
- package/dist/bin/siteplane.js +99 -2184
- package/dist/index.js +72 -73
- package/dist/next.js +217 -2462
- 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
|
+
// ../cli/dist/analytics/manifest.js
|
|
9
9
|
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
10
10
|
import { dirname } from "path";
|
|
11
11
|
|
|
12
|
-
//
|
|
12
|
+
// ../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
|
+
// ../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
|
+
// ../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
|
+
// ../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
|
+
// ../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,9 +129,10 @@ var analyticsMeasurementConfigSchema = z4.object({
|
|
|
129
129
|
}
|
|
130
130
|
});
|
|
131
131
|
|
|
132
|
-
//
|
|
132
|
+
// ../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}$/;
|
|
135
136
|
var analyticsSessionIdSchema = z5.string().regex(/^cpa_s_[a-f0-9]{32}$/u);
|
|
136
137
|
var analyticsVisitorIdSchema = z5.string().regex(/^cpa_v_[a-f0-9]{32}$/u);
|
|
137
138
|
var analyticsPersistedIdentityHashSchema = z5.string().regex(/^[a-f0-9]{64}$/u);
|
|
@@ -326,6 +327,10 @@ var analyticsNormalizedEventSchema = analyticsNormalizedEventBaseSchema.extend({
|
|
|
326
327
|
function isServerOnlyAnalyticsEvent(eventName) {
|
|
327
328
|
return serverOnlyAnalyticsEvents.includes(eventName);
|
|
328
329
|
}
|
|
330
|
+
function getAnalyticsKeyLookup(rawKey) {
|
|
331
|
+
const match = ANALYTICS_KEY_PATTERN.exec(rawKey);
|
|
332
|
+
return match ? `${match[1]}_siteplane_${match[2]}` : null;
|
|
333
|
+
}
|
|
329
334
|
function expandAnalyticsDataAttributeEvent(event) {
|
|
330
335
|
if (event === "form") {
|
|
331
336
|
return ["form_start", "form_submit", "form_error"];
|
|
@@ -333,7 +338,7 @@ function expandAnalyticsDataAttributeEvent(event) {
|
|
|
333
338
|
return [event];
|
|
334
339
|
}
|
|
335
340
|
|
|
336
|
-
//
|
|
341
|
+
// ../shared/dist/analytics-manifest.js
|
|
337
342
|
import { z as z6 } from "zod";
|
|
338
343
|
var analyticsTargetIdSchema = z6.string().min(1).max(120).regex(/^[a-zA-Z][a-zA-Z0-9]*(?:[._-][a-zA-Z0-9]+)*$/u, {
|
|
339
344
|
message: "Analytics target IDs must be stable identifiers without whitespace or visible copy."
|
|
@@ -486,7 +491,7 @@ function isPlainRecord(value) {
|
|
|
486
491
|
return typeof value === "object" && value !== null;
|
|
487
492
|
}
|
|
488
493
|
|
|
489
|
-
//
|
|
494
|
+
// ../shared/dist/analytics-metrics.js
|
|
490
495
|
import { z as z7 } from "zod";
|
|
491
496
|
var analyticsVisitorQualities = ["exact", "estimated"];
|
|
492
497
|
var analyticsVisitorQualitySchema = z7.enum(analyticsVisitorQualities);
|
|
@@ -503,7 +508,7 @@ var analyticsKpiKeys = [
|
|
|
503
508
|
];
|
|
504
509
|
var analyticsKpiKeySchema = z7.enum(analyticsKpiKeys);
|
|
505
510
|
|
|
506
|
-
//
|
|
511
|
+
// ../shared/dist/analytics-privacy.js
|
|
507
512
|
var serverPropertySchemas = {
|
|
508
513
|
lead_created: {
|
|
509
514
|
conversionId: "identifier",
|
|
@@ -538,7 +543,7 @@ function revenuePropertySchema() {
|
|
|
538
543
|
};
|
|
539
544
|
}
|
|
540
545
|
|
|
541
|
-
//
|
|
546
|
+
// ../shared/dist/assets.js
|
|
542
547
|
import { z as z8 } from "zod";
|
|
543
548
|
var ASSET_STAGES = ["staging", "final", "deleted"];
|
|
544
549
|
var ASSET_VISIBILITIES = ["private", "public", "deleted"];
|
|
@@ -553,7 +558,7 @@ var assetVisibilitySchema = z8.enum(ASSET_VISIBILITIES);
|
|
|
553
558
|
var assetUsageEntityTypeSchema = z8.enum(ASSET_USAGE_ENTITY_TYPES);
|
|
554
559
|
var brandingAccentColorSchema = z8.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/);
|
|
555
560
|
|
|
556
|
-
//
|
|
561
|
+
// ../shared/dist/booking-contracts.js
|
|
557
562
|
import { z as z9 } from "zod";
|
|
558
563
|
var bookingStatuses = [
|
|
559
564
|
"pending_payment",
|
|
@@ -914,13 +919,13 @@ function redactBookingManifest(value) {
|
|
|
914
919
|
return value;
|
|
915
920
|
}
|
|
916
921
|
|
|
917
|
-
//
|
|
922
|
+
// ../shared/dist/booking-defaults.js
|
|
918
923
|
var BOOKING_CREATE_PAYLOAD_LIMIT_BYTES = 16 * 1024;
|
|
919
924
|
|
|
920
|
-
//
|
|
925
|
+
// ../shared/dist/bridge-protocol.js
|
|
921
926
|
import { z as z17 } from "zod";
|
|
922
927
|
|
|
923
|
-
//
|
|
928
|
+
// ../shared/dist/field-id.js
|
|
924
929
|
import { z as z10 } from "zod";
|
|
925
930
|
var FIELD_ID_PATTERN = /^[a-z][a-z0-9_-]*(\.[a-z][a-z0-9_-]*)+$/;
|
|
926
931
|
var fieldIdSchema = z10.string().regex(FIELD_ID_PATTERN, "Invalid field id");
|
|
@@ -928,12 +933,12 @@ function isFieldId(value) {
|
|
|
928
933
|
return typeof value === "string" && fieldIdSchema.safeParse(value).success;
|
|
929
934
|
}
|
|
930
935
|
|
|
931
|
-
//
|
|
936
|
+
// ../shared/dist/field-types.js
|
|
932
937
|
import { z as z11 } from "zod";
|
|
933
938
|
var FIELD_TYPES = ["text", "longText", "image", "link"];
|
|
934
939
|
var fieldTypeSchema = z11.enum(FIELD_TYPES);
|
|
935
940
|
|
|
936
|
-
//
|
|
941
|
+
// ../shared/dist/image-value.js
|
|
937
942
|
import { z as z12 } from "zod";
|
|
938
943
|
var SUPPORTED_IMAGE_CONTENT_TYPES = [
|
|
939
944
|
"image/jpeg",
|
|
@@ -965,7 +970,7 @@ var imageValueSchema = z12.object({
|
|
|
965
970
|
]).optional()
|
|
966
971
|
});
|
|
967
972
|
|
|
968
|
-
//
|
|
973
|
+
// ../shared/dist/setup-deployment.js
|
|
969
974
|
import { z as z13 } from "zod";
|
|
970
975
|
var version = z13.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u);
|
|
971
976
|
var siteSetupPackagesSchema = z13.object({
|
|
@@ -1019,13 +1024,13 @@ var setupDeploymentInputSchema = z13.discriminatedUnion("action", [
|
|
|
1019
1024
|
}).strict()
|
|
1020
1025
|
]);
|
|
1021
1026
|
|
|
1022
|
-
//
|
|
1027
|
+
// ../shared/dist/site-setup.js
|
|
1023
1028
|
import { z as z16 } from "zod";
|
|
1024
1029
|
|
|
1025
|
-
//
|
|
1030
|
+
// ../shared/dist/site-field-contract.js
|
|
1026
1031
|
import { z as z15 } from "zod";
|
|
1027
1032
|
|
|
1028
|
-
//
|
|
1033
|
+
// ../shared/dist/fallback-hash.js
|
|
1029
1034
|
import { z as z14 } from "zod";
|
|
1030
1035
|
var SAFE_REPRESENTATION_REASONS = [
|
|
1031
1036
|
"asset_import_rewritten",
|
|
@@ -1247,7 +1252,7 @@ var SHA256_CONSTANTS = [
|
|
|
1247
1252
|
3329325298
|
|
1248
1253
|
];
|
|
1249
1254
|
|
|
1250
|
-
//
|
|
1255
|
+
// ../shared/dist/site-field-contract.js
|
|
1251
1256
|
var fieldContractVersion = "1.0.0";
|
|
1252
1257
|
var scannerContractVersion = "1.0.0";
|
|
1253
1258
|
var siteFieldStatusSchema = z15.enum(["hidden", "active"]);
|
|
@@ -1336,7 +1341,7 @@ function createSiteFieldContractHash(input) {
|
|
|
1336
1341
|
return `sha256:${sha256Hex(payload)}`;
|
|
1337
1342
|
}
|
|
1338
1343
|
|
|
1339
|
-
//
|
|
1344
|
+
// ../shared/dist/site-setup.js
|
|
1340
1345
|
var SITE_SETUP_RUN_STATUSES = [
|
|
1341
1346
|
"waiting_for_agent",
|
|
1342
1347
|
"working",
|
|
@@ -1811,6 +1816,7 @@ var siteSetupEvidenceInputSchema = z16.object({
|
|
|
1811
1816
|
bridgeSessionId: normalizedSafeTextSchema(256, "bridgeSessionId"),
|
|
1812
1817
|
observations: z16.array(z16.object({
|
|
1813
1818
|
fieldId: fieldIdSchema,
|
|
1819
|
+
fieldType: fieldTypeSchema,
|
|
1814
1820
|
routeKey: siteFieldRouteKeySchema,
|
|
1815
1821
|
renderedPath: renderedPathSchema,
|
|
1816
1822
|
targetResolved: z16.boolean(),
|
|
@@ -1879,7 +1885,7 @@ var activateSetupModulesInputSchema = activateSiteSetupInputSchema.extend({
|
|
|
1879
1885
|
])
|
|
1880
1886
|
}).strict();
|
|
1881
1887
|
|
|
1882
|
-
//
|
|
1888
|
+
// ../shared/dist/bridge-protocol.js
|
|
1883
1889
|
var BRIDGE_PROTOCOL_VERSION = 2;
|
|
1884
1890
|
var bridgeRectSchema = z17.object({
|
|
1885
1891
|
x: z17.number(),
|
|
@@ -2117,10 +2123,10 @@ var fieldBridgeMessageSchema = z17.discriminatedUnion("type", [
|
|
|
2117
2123
|
fieldBridgeAnalyticsProbeResultSchema
|
|
2118
2124
|
]);
|
|
2119
2125
|
|
|
2120
|
-
//
|
|
2126
|
+
// ../shared/dist/commands.js
|
|
2121
2127
|
import { z as z19 } from "zod";
|
|
2122
2128
|
|
|
2123
|
-
//
|
|
2129
|
+
// ../shared/dist/errors.js
|
|
2124
2130
|
import { z as z18 } from "zod";
|
|
2125
2131
|
var UI_ERROR_CATEGORIES = [
|
|
2126
2132
|
"site_member",
|
|
@@ -2135,7 +2141,7 @@ var commandErrorPayloadSchema = z18.object({
|
|
|
2135
2141
|
details: z18.record(z18.string(), z18.unknown()).optional()
|
|
2136
2142
|
});
|
|
2137
2143
|
|
|
2138
|
-
//
|
|
2144
|
+
// ../shared/dist/commands.js
|
|
2139
2145
|
var commandSuccessSchema = z19.object({
|
|
2140
2146
|
ok: z19.literal(true),
|
|
2141
2147
|
data: z19.unknown()
|
|
@@ -2149,7 +2155,7 @@ var commandResultSchema = z19.discriminatedUnion("ok", [
|
|
|
2149
2155
|
commandErrorSchema
|
|
2150
2156
|
]);
|
|
2151
2157
|
|
|
2152
|
-
//
|
|
2158
|
+
// ../shared/dist/editor-settings.js
|
|
2153
2159
|
import { z as z20 } from "zod";
|
|
2154
2160
|
var editorColorSchemeSchema = z20.enum([
|
|
2155
2161
|
"paper",
|
|
@@ -2161,7 +2167,7 @@ var editorColorSchemes = editorColorSchemeSchema.options;
|
|
|
2161
2167
|
var editorColorModeSchema = z20.enum(["light", "dark"]);
|
|
2162
2168
|
var editorColorModes = editorColorModeSchema.options;
|
|
2163
2169
|
|
|
2164
|
-
//
|
|
2170
|
+
// ../shared/dist/site-slug.js
|
|
2165
2171
|
import { z as z21 } from "zod";
|
|
2166
2172
|
var SITE_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
2167
2173
|
var RESERVED_SITE_SLUGS = /* @__PURE__ */ new Set([
|
|
@@ -2181,7 +2187,7 @@ var RESERVED_SITE_SLUGS = /* @__PURE__ */ new Set([
|
|
|
2181
2187
|
]);
|
|
2182
2188
|
var siteSlugSchema = z21.string().regex(SITE_SLUG_PATTERN, "Invalid site slug").refine((value) => !RESERVED_SITE_SLUGS.has(value), "Reserved site slug");
|
|
2183
2189
|
|
|
2184
|
-
//
|
|
2190
|
+
// ../shared/dist/entitlements.js
|
|
2185
2191
|
import { z as z22 } from "zod";
|
|
2186
2192
|
var entitlementSnapshotSchema = z22.object({
|
|
2187
2193
|
planKey: z22.string().trim().min(1),
|
|
@@ -2228,10 +2234,10 @@ var EARLY_ACCESS_PLAN = {
|
|
|
2228
2234
|
bookingRemindersEnabled: true
|
|
2229
2235
|
};
|
|
2230
2236
|
|
|
2231
|
-
//
|
|
2237
|
+
// ../shared/dist/first-party-image-upload.js
|
|
2232
2238
|
var maxFirstPartyImageUploadBytes = 4 * 1024 * 1024;
|
|
2233
2239
|
|
|
2234
|
-
//
|
|
2240
|
+
// ../shared/dist/readiness.js
|
|
2235
2241
|
import { z as z23 } from "zod";
|
|
2236
2242
|
var READINESS_CHECK_KEYS = [
|
|
2237
2243
|
"agent_instructions_installed",
|
|
@@ -2250,7 +2256,7 @@ var READINESS_STATUSES = [
|
|
|
2250
2256
|
var readinessCheckKeySchema = z23.enum(READINESS_CHECK_KEYS);
|
|
2251
2257
|
var readinessStatusSchema = z23.enum(READINESS_STATUSES);
|
|
2252
2258
|
|
|
2253
|
-
//
|
|
2259
|
+
// ../shared/dist/site.js
|
|
2254
2260
|
import { z as z24 } from "zod";
|
|
2255
2261
|
var SITE_STATUSES = [
|
|
2256
2262
|
"setup",
|
|
@@ -2261,7 +2267,7 @@ var SITE_STATUSES = [
|
|
|
2261
2267
|
var siteStatusSchema = z24.enum(SITE_STATUSES);
|
|
2262
2268
|
var websiteUrlSchema = z24.string().trim().url().refine((value) => value.startsWith("https://") || value.startsWith("http://"), "Website URL must use http or https");
|
|
2263
2269
|
|
|
2264
|
-
//
|
|
2270
|
+
// ../shared/dist/setup-assets.js
|
|
2265
2271
|
import { z as z25 } from "zod";
|
|
2266
2272
|
var configureSetupAssetTargetInputSchema = z25.object({
|
|
2267
2273
|
siteId: z25.string().uuid(),
|
|
@@ -2322,7 +2328,7 @@ var checkSetupAssetTargetInputSchema = z25.object({
|
|
|
2322
2328
|
intent: z25.enum(["start", "poll"])
|
|
2323
2329
|
}).strict();
|
|
2324
2330
|
|
|
2325
|
-
//
|
|
2331
|
+
// ../shared/dist/setup-installation.js
|
|
2326
2332
|
import { z as z26 } from "zod";
|
|
2327
2333
|
var setupInstallationRequestSchema = z26.object({
|
|
2328
2334
|
modules: siteSetupModulesSchema,
|
|
@@ -2333,7 +2339,7 @@ var setupInstallationRequestSchema = z26.object({
|
|
|
2333
2339
|
}).strict()
|
|
2334
2340
|
}).strict();
|
|
2335
2341
|
|
|
2336
|
-
//
|
|
2342
|
+
// ../shared/dist/setup-claim.js
|
|
2337
2343
|
import { z as z27 } from "zod";
|
|
2338
2344
|
var setupClaimCodeSchema = z27.string().regex(/^[0-9A-HJKMNP-TV-Z]{8}$/u);
|
|
2339
2345
|
var setupClaimBindingSchema = z27.object({
|
|
@@ -2374,7 +2380,7 @@ var setupClaimDenialSchema = z27.object({
|
|
|
2374
2380
|
])
|
|
2375
2381
|
}).strict();
|
|
2376
2382
|
|
|
2377
|
-
//
|
|
2383
|
+
// ../cli/dist/analytics/manifest.js
|
|
2378
2384
|
async function readAnalyticsManifestFile(manifestPath) {
|
|
2379
2385
|
return validateAnalyticsManifestInput(JSON.parse(await readFile(manifestPath, "utf8")));
|
|
2380
2386
|
}
|
|
@@ -2389,10 +2395,10 @@ function validateAnalyticsManifestInput(input) {
|
|
|
2389
2395
|
return redactAnalyticsManifest(analyticsManifestSchema.parse(input));
|
|
2390
2396
|
}
|
|
2391
2397
|
|
|
2392
|
-
//
|
|
2398
|
+
// ../cli/dist/analytics/static-scan.js
|
|
2393
2399
|
import ts from "typescript";
|
|
2394
2400
|
|
|
2395
|
-
//
|
|
2401
|
+
// ../cli/dist/analytics/booking-providers.js
|
|
2396
2402
|
function buildBookingProviderHintFromHref(href, mode, options = {}) {
|
|
2397
2403
|
const url = parseStaticHttpUrl(href);
|
|
2398
2404
|
if (!url) {
|
|
@@ -2452,7 +2458,7 @@ function normalizeHost(host) {
|
|
|
2452
2458
|
return host.toLowerCase().replace(/\.$/u, "");
|
|
2453
2459
|
}
|
|
2454
2460
|
|
|
2455
|
-
//
|
|
2461
|
+
// ../cli/dist/analytics/static-scan.js
|
|
2456
2462
|
function scanAnalyticsSourceFiles(files, input) {
|
|
2457
2463
|
const targets = [];
|
|
2458
2464
|
const hardErrors = [];
|
|
@@ -2739,7 +2745,7 @@ function inferRoute(filePath) {
|
|
|
2739
2745
|
return route ? `/${route}` : "/";
|
|
2740
2746
|
}
|
|
2741
2747
|
|
|
2742
|
-
//
|
|
2748
|
+
// ../cli/dist/booking/manifest.js
|
|
2743
2749
|
import { mkdir as mkdir2, readFile as readFile2, writeFile as writeFile2 } from "fs/promises";
|
|
2744
2750
|
import { dirname as dirname2 } from "path";
|
|
2745
2751
|
async function readBookingManifestFile(manifestPath) {
|
|
@@ -2782,7 +2788,7 @@ function collectRedactedBookingKeys(input, prefix = "") {
|
|
|
2782
2788
|
});
|
|
2783
2789
|
}
|
|
2784
2790
|
|
|
2785
|
-
//
|
|
2791
|
+
// ../cli/dist/booking/static-scan.js
|
|
2786
2792
|
function scanBookingSourceFiles(files, input) {
|
|
2787
2793
|
const embeds = files.flatMap(scanBookingEmbedFile);
|
|
2788
2794
|
const findings = embeds.map(createEmbedFoundIssue);
|
|
@@ -2896,7 +2902,7 @@ function escapeRegExp(value) {
|
|
|
2896
2902
|
return value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
|
|
2897
2903
|
}
|
|
2898
2904
|
|
|
2899
|
-
//
|
|
2905
|
+
// ../cli/dist/commands/analytics/check.js
|
|
2900
2906
|
import { readFile as readFile3 } from "fs/promises";
|
|
2901
2907
|
async function analyticsCheckCommand(input) {
|
|
2902
2908
|
const validatedManifest = await readAnalyticsManifestFile(input.manifestPath);
|
|
@@ -3035,7 +3041,7 @@ async function readCspWarnings(filePaths) {
|
|
|
3035
3041
|
return warnings;
|
|
3036
3042
|
}
|
|
3037
3043
|
|
|
3038
|
-
//
|
|
3044
|
+
// ../cli/dist/commands/analytics/init.js
|
|
3039
3045
|
import { mkdir as mkdir3, writeFile as writeFile3 } from "fs/promises";
|
|
3040
3046
|
import { dirname as dirname3, join } from "path";
|
|
3041
3047
|
async function analyticsInitCommand(input) {
|
|
@@ -3132,10 +3138,10 @@ alwaysApply: true
|
|
|
3132
3138
|
|
|
3133
3139
|
${analyticsRulesTemplate}`;
|
|
3134
3140
|
|
|
3135
|
-
//
|
|
3141
|
+
// ../cli/dist/commands/analytics/import.js
|
|
3136
3142
|
import { createHash } from "crypto";
|
|
3137
3143
|
|
|
3138
|
-
//
|
|
3144
|
+
// ../cli/dist/commands/analytics/sync.js
|
|
3139
3145
|
async function analyticsSyncCommand(input) {
|
|
3140
3146
|
const redacted = validateAnalyticsManifestInput(input.manifest);
|
|
3141
3147
|
const fetcher = input.fetchImpl ?? fetch;
|
|
@@ -3161,7 +3167,7 @@ function createAnalyticsCliRequestHeaders(config) {
|
|
|
3161
3167
|
return headers;
|
|
3162
3168
|
}
|
|
3163
3169
|
|
|
3164
|
-
//
|
|
3170
|
+
// ../cli/dist/commands/analytics/import.js
|
|
3165
3171
|
async function analyticsImportCommand(input) {
|
|
3166
3172
|
const payload = analyticsProviderImportSchema.parse(input.payload);
|
|
3167
3173
|
const payloadHash = hashAnalyticsProviderImport(payload);
|
|
@@ -3187,7 +3193,7 @@ function hashAnalyticsProviderImport(payload) {
|
|
|
3187
3193
|
return `sha256:${createHash("sha256").update(JSON.stringify(payload)).digest("hex")}`;
|
|
3188
3194
|
}
|
|
3189
3195
|
|
|
3190
|
-
//
|
|
3196
|
+
// ../cli/dist/commands/analytics/readiness.js
|
|
3191
3197
|
async function analyticsReadinessCommand(input) {
|
|
3192
3198
|
const fetcher = input.fetchImpl ?? fetch;
|
|
3193
3199
|
return fetcher(`${input.config.apiBaseUrl.replace(/\/$/u, "")}/api/cli/analytics/readiness`, {
|
|
@@ -3197,7 +3203,7 @@ async function analyticsReadinessCommand(input) {
|
|
|
3197
3203
|
});
|
|
3198
3204
|
}
|
|
3199
3205
|
|
|
3200
|
-
//
|
|
3206
|
+
// ../cli/dist/commands/analytics/public-key.js
|
|
3201
3207
|
import { z as z28 } from "zod";
|
|
3202
3208
|
var responseSchema = z28.object({
|
|
3203
3209
|
ok: z28.literal(true),
|
|
@@ -3228,7 +3234,7 @@ async function analyticsPublicKeyCommand(input) {
|
|
|
3228
3234
|
return parsed.data.data.rawPublicKey;
|
|
3229
3235
|
}
|
|
3230
3236
|
|
|
3231
|
-
//
|
|
3237
|
+
// ../cli/dist/commands/analytics/prepare.js
|
|
3232
3238
|
import { z as z29 } from "zod";
|
|
3233
3239
|
var resultSchema = z29.object({
|
|
3234
3240
|
ok: z29.literal(true),
|
|
@@ -3265,7 +3271,7 @@ async function analyticsPrepareCommand(input) {
|
|
|
3265
3271
|
return parsed.data.data;
|
|
3266
3272
|
}
|
|
3267
3273
|
|
|
3268
|
-
//
|
|
3274
|
+
// ../cli/dist/commands/analytics/test.js
|
|
3269
3275
|
import { randomUUID } from "crypto";
|
|
3270
3276
|
async function analyticsTestCommand(input) {
|
|
3271
3277
|
const fetcher = input.fetchImpl ?? fetch;
|
|
@@ -3298,7 +3304,7 @@ async function analyticsTestCommand(input) {
|
|
|
3298
3304
|
});
|
|
3299
3305
|
}
|
|
3300
3306
|
|
|
3301
|
-
//
|
|
3307
|
+
// ../cli/dist/commands/booking/check.js
|
|
3302
3308
|
import { readFile as readFile4 } from "fs/promises";
|
|
3303
3309
|
async function bookingCheckCommand(input) {
|
|
3304
3310
|
const validatedManifest = await readBookingManifestFile(input.manifestPath);
|
|
@@ -3341,7 +3347,7 @@ function createBoundaryErrors2(validation) {
|
|
|
3341
3347
|
}));
|
|
3342
3348
|
}
|
|
3343
3349
|
|
|
3344
|
-
//
|
|
3350
|
+
// ../cli/dist/commands/booking/init.js
|
|
3345
3351
|
import { mkdir as mkdir4, writeFile as writeFile4 } from "fs/promises";
|
|
3346
3352
|
import { dirname as dirname4, join as join2 } from "path";
|
|
3347
3353
|
async function bookingInitCommand(input) {
|
|
@@ -3420,7 +3426,7 @@ alwaysApply: true
|
|
|
3420
3426
|
|
|
3421
3427
|
${bookingRulesTemplate}`;
|
|
3422
3428
|
|
|
3423
|
-
//
|
|
3429
|
+
// ../cli/dist/commands/booking/sync.js
|
|
3424
3430
|
async function bookingSyncCommand(input) {
|
|
3425
3431
|
const redacted = validateBookingManifestInput(input.manifest);
|
|
3426
3432
|
const fetcher = input.fetchImpl ?? fetch;
|
|
@@ -3446,7 +3452,7 @@ function createBookingCliRequestHeaders(config) {
|
|
|
3446
3452
|
return headers;
|
|
3447
3453
|
}
|
|
3448
3454
|
|
|
3449
|
-
//
|
|
3455
|
+
// ../cli/dist/commands/booking/test.js
|
|
3450
3456
|
async function bookingTestCommand(input) {
|
|
3451
3457
|
const fetcher = input.fetchImpl ?? fetch;
|
|
3452
3458
|
const booking = bookingCreateRequestSchema.parse(input.booking);
|
|
@@ -3462,7 +3468,7 @@ async function bookingTestCommand(input) {
|
|
|
3462
3468
|
});
|
|
3463
3469
|
}
|
|
3464
3470
|
|
|
3465
|
-
//
|
|
3471
|
+
// ../cli/dist/config/project-config.js
|
|
3466
3472
|
import { access, chmod, open, readFile as readFile5, rename, rm } from "fs/promises";
|
|
3467
3473
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
3468
3474
|
import { join as join3 } from "path";
|
|
@@ -3532,7 +3538,7 @@ async function writeJsonAtomically(path, value, mode) {
|
|
|
3532
3538
|
}
|
|
3533
3539
|
}
|
|
3534
3540
|
|
|
3535
|
-
//
|
|
3541
|
+
// ../cli/dist/config/credentials.js
|
|
3536
3542
|
import { execFile } from "child_process";
|
|
3537
3543
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
3538
3544
|
import { chmod as chmod2, lstat, mkdir as mkdir5, open as open2, readFile as readFile6, rename as rename2, rm as rm2 } from "fs/promises";
|
|
@@ -3653,18 +3659,18 @@ async function gitPathMatches(projectDir, path, command) {
|
|
|
3653
3659
|
}
|
|
3654
3660
|
}
|
|
3655
3661
|
|
|
3656
|
-
//
|
|
3662
|
+
// ../cli/dist/commands/init.js
|
|
3657
3663
|
import { access as access3 } from "fs/promises";
|
|
3658
3664
|
import { join as join7, relative as relative3 } from "path";
|
|
3659
3665
|
import { z as z34 } from "zod";
|
|
3660
3666
|
|
|
3661
|
-
//
|
|
3667
|
+
// ../cli/dist/commands/setup-preflight.js
|
|
3662
3668
|
import { createHash as createHash2 } from "crypto";
|
|
3663
3669
|
import semver from "semver";
|
|
3664
3670
|
import { minimatch } from "minimatch";
|
|
3665
3671
|
import { parse as parseYaml } from "yaml";
|
|
3666
3672
|
|
|
3667
|
-
//
|
|
3673
|
+
// ../cli/dist/config/installed-package.js
|
|
3668
3674
|
import { createRequire } from "module";
|
|
3669
3675
|
import { readFile as readFile7 } from "fs/promises";
|
|
3670
3676
|
import { join as join5 } from "path";
|
|
@@ -3691,24 +3697,24 @@ async function assertExactSetupPackages(projectDir, packages) {
|
|
|
3691
3697
|
dependencies: z32.record(z32.string(), z32.string()).optional(),
|
|
3692
3698
|
devDependencies: z32.record(z32.string(), z32.string()).optional()
|
|
3693
3699
|
}).parse(JSON.parse(await readFile7(join5(projectDir, "package.json"), "utf8")));
|
|
3694
|
-
for (const [name2,
|
|
3700
|
+
for (const [name2, version2] of [
|
|
3695
3701
|
["siteplane", packages.siteplane],
|
|
3696
3702
|
["@siteplane/runtime-next", packages.runtimeNext],
|
|
3697
3703
|
...packages.analytics ? [["@siteplane/analytics", packages.analytics]] : []
|
|
3698
3704
|
]) {
|
|
3699
3705
|
const declared = manifest.dependencies?.[name2] ?? manifest.devDependencies?.[name2];
|
|
3700
3706
|
const installed = await readInstalledPackage(projectDir, name2);
|
|
3701
|
-
if (declared !==
|
|
3707
|
+
if (declared !== version2 || installed.version !== version2)
|
|
3702
3708
|
throw new Error("The installed Siteplane packages must match the current task's exact pins.");
|
|
3703
3709
|
}
|
|
3704
3710
|
}
|
|
3705
3711
|
|
|
3706
|
-
//
|
|
3712
|
+
// ../cli/dist/commands/setup-preflight.js
|
|
3707
3713
|
import { access as access2, readFile as readFile8, realpath, readdir, readlink } from "fs/promises";
|
|
3708
3714
|
import { dirname as dirname6, join as join6, relative as relative2, resolve, sep } from "path";
|
|
3709
3715
|
import { z as z33 } from "zod";
|
|
3710
3716
|
|
|
3711
|
-
//
|
|
3717
|
+
// ../cli/dist/commands/setup-process.js
|
|
3712
3718
|
import { spawn } from "child_process";
|
|
3713
3719
|
var SetupFailure = class extends Error {
|
|
3714
3720
|
code;
|
|
@@ -3806,7 +3812,7 @@ async function setupVercelApi(cwd, endpoint, body, method, options) {
|
|
|
3806
3812
|
}
|
|
3807
3813
|
}
|
|
3808
3814
|
|
|
3809
|
-
//
|
|
3815
|
+
// ../cli/dist/commands/setup-preflight.js
|
|
3810
3816
|
var manifestSchema = z33.object({
|
|
3811
3817
|
packageManager: z33.string().optional(),
|
|
3812
3818
|
engines: z33.object({ node: z33.string().optional() }).optional(),
|
|
@@ -3836,7 +3842,7 @@ var exists = async (path) => access2(path).then(() => true, () => false);
|
|
|
3836
3842
|
var fail = (code, message) => {
|
|
3837
3843
|
throw new SetupFailure(code, message);
|
|
3838
3844
|
};
|
|
3839
|
-
var stable = (
|
|
3845
|
+
var stable = (version2, major) => new RegExp(`^${major}\\.\\d+\\.\\d+$`, "u").test(version2);
|
|
3840
3846
|
async function inspectSetupLocalProject(projectDir) {
|
|
3841
3847
|
const projectDirectory = await realpath(resolve(projectDir));
|
|
3842
3848
|
const manifest = manifestSchema.parse(JSON.parse(await readFile8(join6(projectDirectory, "package.json"), "utf8")));
|
|
@@ -3909,7 +3915,7 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3909
3915
|
peerDependencies: z33.record(z33.string(), z33.string()).optional()
|
|
3910
3916
|
})).optional()
|
|
3911
3917
|
}).parse(JSON.parse(lockText)) : null;
|
|
3912
|
-
async function
|
|
3918
|
+
async function version2(name3) {
|
|
3913
3919
|
try {
|
|
3914
3920
|
return (await readInstalledPackage(projectDirectory, name3)).version;
|
|
3915
3921
|
} catch {
|
|
@@ -3920,9 +3926,9 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3920
3926
|
}
|
|
3921
3927
|
}
|
|
3922
3928
|
const [nextVersion, reactVersion, reactDomVersion] = await Promise.all([
|
|
3923
|
-
|
|
3924
|
-
|
|
3925
|
-
|
|
3929
|
+
version2("next"),
|
|
3930
|
+
version2("react"),
|
|
3931
|
+
version2("react-dom")
|
|
3926
3932
|
]);
|
|
3927
3933
|
if (!stable(nextVersion, 16))
|
|
3928
3934
|
fail("unsupported_next_version", "Setup supports stable Next.js 16 App Router projects. Framework migration requires a separate owner decision.");
|
|
@@ -3963,8 +3969,6 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3963
3969
|
sourceConflicts.push("base_path");
|
|
3964
3970
|
if (/\bloaderFile\s*:|\bloader\s*:\s*['"](?:custom|imgix|cloudinary|akamai)['"]/u.test(source))
|
|
3965
3971
|
sourceConflicts.push(`inspect_image_loader:${file}`);
|
|
3966
|
-
if (/\bmaximumRedirects\s*:\s*[1-9]/u.test(source))
|
|
3967
|
-
sourceConflicts.push(`inspect_image_redirects:${file}`);
|
|
3968
3972
|
}
|
|
3969
3973
|
if (sourceConflicts.some((conflict) => conflict === "static_export" || conflict === "base_path"))
|
|
3970
3974
|
fail("unsupported_server_configuration", "Resolve static export/basePath configuration explicitly; Siteplane requires its server-side admin and revalidation handlers.");
|
|
@@ -4127,7 +4131,7 @@ function safeGitRemote(value) {
|
|
|
4127
4131
|
}
|
|
4128
4132
|
}
|
|
4129
4133
|
|
|
4130
|
-
//
|
|
4134
|
+
// ../cli/dist/commands/init.js
|
|
4131
4135
|
async function initCommand(input) {
|
|
4132
4136
|
if (!input.setupToken.trim()) {
|
|
4133
4137
|
throw new Error("A Siteplane setup token is required.");
|
|
@@ -4290,7 +4294,7 @@ function readErrorMessage(payload) {
|
|
|
4290
4294
|
return null;
|
|
4291
4295
|
}
|
|
4292
4296
|
|
|
4293
|
-
//
|
|
4297
|
+
// ../cli/dist/commands/scan.js
|
|
4294
4298
|
import { readdir as readdir2 } from "fs/promises";
|
|
4295
4299
|
import { extname, join as join8 } from "path";
|
|
4296
4300
|
var defaultScanRoots = ["app", "src", "pages", "components", "lib"];
|
|
@@ -4331,13 +4335,13 @@ async function collectSourceFiles(directory) {
|
|
|
4331
4335
|
return files;
|
|
4332
4336
|
}
|
|
4333
4337
|
|
|
4334
|
-
//
|
|
4338
|
+
// ../cli/dist/commands/site-setup.js
|
|
4335
4339
|
import { execFile as execFile2 } from "child_process";
|
|
4336
4340
|
import { readFile as readFile9 } from "fs/promises";
|
|
4337
4341
|
import { promisify as promisify2 } from "util";
|
|
4338
4342
|
import { z as z35 } from "zod";
|
|
4339
4343
|
|
|
4340
|
-
//
|
|
4344
|
+
// ../cli/dist/scan/next-source-scan.js
|
|
4341
4345
|
import ts2 from "typescript";
|
|
4342
4346
|
import { isAbsolute, relative as relative4 } from "path";
|
|
4343
4347
|
var eventPreviewHandlerMissingMessage = "Event preview fields must consume preview values with useSiteplanePreviewText from @siteplane/runtime-next/client or a siteplane:preview-value-applied listener.";
|
|
@@ -5038,7 +5042,7 @@ function isPositionalFieldReference(value) {
|
|
|
5038
5042
|
return value ? /\[\d+\]|\.\d+(?:\.|$)/.test(value) : false;
|
|
5039
5043
|
}
|
|
5040
5044
|
|
|
5041
|
-
//
|
|
5045
|
+
// ../cli/dist/commands/site-setup.js
|
|
5042
5046
|
var execFileAsync2 = promisify2(execFile2);
|
|
5043
5047
|
var safeErrorSchema = z35.object({
|
|
5044
5048
|
code: z35.string().trim().min(1),
|
|
@@ -5236,7 +5240,7 @@ async function siteSetupActivityCommand(input) {
|
|
|
5236
5240
|
return response.ok && parsed.success ? parsed.data.data : actionRequired(response.payload, "Setup activity could not be recorded.");
|
|
5237
5241
|
}
|
|
5238
5242
|
|
|
5239
|
-
//
|
|
5243
|
+
// ../cli/dist/commands/setup-start.js
|
|
5240
5244
|
import { randomBytes, randomUUID as randomUUID4 } from "crypto";
|
|
5241
5245
|
import { access as access4 } from "fs/promises";
|
|
5242
5246
|
import { join as join9, relative as relative5 } from "path";
|
|
@@ -5369,7 +5373,7 @@ async function exists2(path) {
|
|
|
5369
5373
|
}
|
|
5370
5374
|
}
|
|
5371
5375
|
|
|
5372
|
-
//
|
|
5376
|
+
// ../cli/dist/commands/setup-review.js
|
|
5373
5377
|
import { z as z37 } from "zod";
|
|
5374
5378
|
var responseSchema2 = z37.object({
|
|
5375
5379
|
ok: z37.literal(true),
|
|
@@ -5454,7 +5458,7 @@ async function setupReviewCommand(input) {
|
|
|
5454
5458
|
}
|
|
5455
5459
|
}
|
|
5456
5460
|
|
|
5457
|
-
//
|
|
5461
|
+
// ../cli/dist/commands/setup-prepare.js
|
|
5458
5462
|
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";
|
|
5459
5463
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
5460
5464
|
import { dirname as dirname7, join as join10, relative as relative6, sep as sep2 } from "path";
|
|
@@ -5601,7 +5605,7 @@ ${task.goal}
|
|
|
5601
5605
|
|
|
5602
5606
|
${task.discovery.rules.map((rule) => `- ${rule}`).join("\n")}
|
|
5603
5607
|
|
|
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
|
|
5608
|
+
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. If a requested deploy passes its provider deadline, rerun the same command for a bounded readback of that operation; do not start a replacement while its outcome is unresolved. For image fields, withSiteplane adds only the exact Siteplane asset route and website /siteplane-assets/ pattern while preserving existing sources, loaders, and redirect policy. This grants no hosting permission. If the website uses a global or component image loader, keep it and verify Siteplane image delivery explicitly. Inspect CSP written by middleware/proxy/meta tags before deployment. Use the provider-selected public SITEPLANE_SITE_ORIGIN for local builds.
|
|
5605
5609
|
`);
|
|
5606
5610
|
for (const [path, content] of files) {
|
|
5607
5611
|
if (path === layoutPath || path === nextPath || path === guidePath)
|
|
@@ -5727,7 +5731,7 @@ async function assertSourcePath(root, target) {
|
|
|
5727
5731
|
}
|
|
5728
5732
|
}
|
|
5729
5733
|
|
|
5730
|
-
//
|
|
5734
|
+
// ../cli/dist/commands/setup-lock.js
|
|
5731
5735
|
import { randomUUID as randomUUID6 } from "crypto";
|
|
5732
5736
|
import { lstat as lstat3, mkdir as mkdir7, open as open4, readFile as readFile11, rm as rm4, rmdir } from "fs/promises";
|
|
5733
5737
|
import { resolve as resolve2 } from "path";
|
|
@@ -5790,7 +5794,7 @@ function locked() {
|
|
|
5790
5794
|
return new SetupFailure("setup_process_active", "Another setup process owns this repository. Wait for it to finish; a live lock is never replaced.");
|
|
5791
5795
|
}
|
|
5792
5796
|
|
|
5793
|
-
//
|
|
5797
|
+
// ../cli/dist/config/build-provenance.js
|
|
5794
5798
|
import { createHash as createHash3 } from "crypto";
|
|
5795
5799
|
import { execFile as execFile3 } from "child_process";
|
|
5796
5800
|
import { lstat as lstat4, readFile as readFile12, writeFile as writeFile5, mkdir as mkdir8 } from "fs/promises";
|
|
@@ -5856,7 +5860,7 @@ async function writeBuildProvenance(checkout, revision) {
|
|
|
5856
5860
|
await writeFile5(target, JSON.stringify(record), { flag: "wx", mode: 384 });
|
|
5857
5861
|
}
|
|
5858
5862
|
|
|
5859
|
-
//
|
|
5863
|
+
// ../cli/dist/commands/setup-deploy.js
|
|
5860
5864
|
import { createHash as createHash4, randomBytes as randomBytes2, randomUUID as randomUUID7 } from "crypto";
|
|
5861
5865
|
import { access as access6, mkdir as mkdir9, mkdtemp, rm as rm5, writeFile as writeFile6 } from "fs/promises";
|
|
5862
5866
|
import { tmpdir } from "os";
|
|
@@ -5910,6 +5914,8 @@ var defaults = {
|
|
|
5910
5914
|
now: Date.now,
|
|
5911
5915
|
pause: (milliseconds) => new Promise((resolve5) => setTimeout(resolve5, milliseconds))
|
|
5912
5916
|
};
|
|
5917
|
+
var PROVIDER_OPERATION_TIMEOUT_MS = 9e5;
|
|
5918
|
+
var PROVIDER_RESUME_READBACK_TIMEOUT_MS = 12e4;
|
|
5913
5919
|
async function setupDeployCommand(input, deps = defaults) {
|
|
5914
5920
|
let record = null;
|
|
5915
5921
|
try {
|
|
@@ -5955,11 +5961,14 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5955
5961
|
} catch {
|
|
5956
5962
|
fail2("siteplane_package_pin_conflict", "Install the exact Siteplane package versions from the current task and commit their canonical lockfile.");
|
|
5957
5963
|
}
|
|
5958
|
-
|
|
5964
|
+
const recordedOperationDeadline = record && !["verified", "deployed", "failed"].includes(record.phase) ? Date.parse(record.deadline) : null;
|
|
5965
|
+
const isExpiredDeployReadback = record?.phase === "deploy_requested" && recordedOperationDeadline !== null && recordedOperationDeadline <= deps.now();
|
|
5966
|
+
let operationDeadline = isExpiredDeployReadback ? deps.now() + PROVIDER_RESUME_READBACK_TIMEOUT_MS : recordedOperationDeadline ?? deps.now() + PROVIDER_OPERATION_TIMEOUT_MS;
|
|
5967
|
+
const deadlineExceededMessage = isExpiredDeployReadback ? "The bounded provider readback ended while the existing deployment is still unresolved. Retry later to read the same operation; setup will not start a second deployment." : "The 15-minute provider deadline expired. Inspect the recorded operation; setup will not start a second deployment on resume.";
|
|
5959
5968
|
const remaining = () => {
|
|
5960
5969
|
const milliseconds = operationDeadline - deps.now();
|
|
5961
5970
|
if (milliseconds <= 0)
|
|
5962
|
-
fail2("provider_deadline_exceeded",
|
|
5971
|
+
fail2("provider_deadline_exceeded", deadlineExceededMessage);
|
|
5963
5972
|
return milliseconds;
|
|
5964
5973
|
};
|
|
5965
5974
|
const processCommand = async (binary, args, options) => {
|
|
@@ -6090,7 +6099,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
6090
6099
|
startedAt: new Date(deps.now()).toISOString(),
|
|
6091
6100
|
environmentWrittenAt: null,
|
|
6092
6101
|
deployRequestedAt: null,
|
|
6093
|
-
deadline: new Date(deps.now() +
|
|
6102
|
+
deadline: new Date(deps.now() + PROVIDER_OPERATION_TIMEOUT_MS).toISOString(),
|
|
6094
6103
|
phase: "planned",
|
|
6095
6104
|
build: null
|
|
6096
6105
|
});
|
|
@@ -6260,9 +6269,9 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
6260
6269
|
let poll = 0;
|
|
6261
6270
|
while (!deployment || !["READY", "ERROR", "CANCELED", "BLOCKED"].includes(deployment.readyState)) {
|
|
6262
6271
|
progress();
|
|
6263
|
-
const remaining2 =
|
|
6272
|
+
const remaining2 = operationDeadline - deps.now();
|
|
6264
6273
|
if (remaining2 <= 0)
|
|
6265
|
-
fail2("provider_deadline_exceeded",
|
|
6274
|
+
fail2("provider_deadline_exceeded", deadlineExceededMessage);
|
|
6266
6275
|
await deps.pause(Math.min(remaining2, Math.min(15e3, 2e3 * 2 ** Math.min(poll++, 3)) + Math.floor(Math.random() * 500)));
|
|
6267
6276
|
deployment = deployment ? await detail(deployment.id) : await discover();
|
|
6268
6277
|
if (deployment && !matches(deployment))
|
|
@@ -6327,7 +6336,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
6327
6336
|
}
|
|
6328
6337
|
}
|
|
6329
6338
|
|
|
6330
|
-
//
|
|
6339
|
+
// ../cli/dist/commands/setup-claim.js
|
|
6331
6340
|
import { z as z41 } from "zod";
|
|
6332
6341
|
async function setupClaimCommand(input) {
|
|
6333
6342
|
const code = setupClaimCodeSchema.safeParse(input.code);
|
|
@@ -6409,2100 +6418,6 @@ function required(code, message) {
|
|
|
6409
6418
|
return { status: "action_required", code, message };
|
|
6410
6419
|
}
|
|
6411
6420
|
|
|
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
|
-
|
|
8506
6421
|
// src/bin/run-siteplane.ts
|
|
8507
6422
|
async function runSiteplaneCli(args, dependencies = createDefaultDependencies()) {
|
|
8508
6423
|
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");
|