siteplane 0.1.45 → 0.1.46
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 +7 -0
- package/dist/bin/siteplane.js +1069 -809
- package/dist/index.js +1016 -785
- package/dist/next.d.ts +25 -0
- package/dist/next.js +1113 -790
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -93,12 +93,41 @@ var analyticsProviderImportSchema = z3.object({
|
|
|
93
93
|
rows: z3.array(analyticsProviderImportRowSchema).min(1).max(1e3)
|
|
94
94
|
}).strict();
|
|
95
95
|
|
|
96
|
-
// ../shared/dist/analytics-
|
|
96
|
+
// ../shared/dist/analytics-config.js
|
|
97
97
|
import { z as z4 } from "zod";
|
|
98
|
+
var ANALYTICS_CONFIG_LEASE_MS = 6e4;
|
|
99
|
+
var analyticsMeasurementConfigSchema = z4.object({
|
|
100
|
+
version: z4.literal(1),
|
|
101
|
+
installationGeneration: z4.number().int().positive(),
|
|
102
|
+
configRevision: z4.number().int().positive(),
|
|
103
|
+
effectiveSiteMode: z4.enum(["disabled", "session_only", "full_analytics"]),
|
|
104
|
+
measurementEnabled: z4.boolean(),
|
|
105
|
+
issuedAt: z4.string().datetime({ offset: true }),
|
|
106
|
+
expiresAt: z4.string().datetime({ offset: true })
|
|
107
|
+
}).strict().superRefine((config, context) => {
|
|
108
|
+
const lifetime = Date.parse(config.expiresAt) - Date.parse(config.issuedAt);
|
|
109
|
+
if (lifetime <= 0 || lifetime > ANALYTICS_CONFIG_LEASE_MS) {
|
|
110
|
+
context.addIssue({
|
|
111
|
+
code: "custom",
|
|
112
|
+
path: ["expiresAt"],
|
|
113
|
+
message: "Measurement permission must expire within 60 seconds."
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (config.measurementEnabled !== (config.effectiveSiteMode !== "disabled")) {
|
|
117
|
+
context.addIssue({
|
|
118
|
+
code: "custom",
|
|
119
|
+
path: ["measurementEnabled"],
|
|
120
|
+
message: "Measurement permission must match the effective site mode."
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// ../shared/dist/analytics-events.js
|
|
126
|
+
import { z as z5 } from "zod";
|
|
98
127
|
var ANALYTICS_SCHEMA_VERSION = "analytics.v1";
|
|
99
|
-
var analyticsSessionIdSchema =
|
|
100
|
-
var analyticsVisitorIdSchema =
|
|
101
|
-
var analyticsPersistedIdentityHashSchema =
|
|
128
|
+
var analyticsSessionIdSchema = z5.string().regex(/^cpa_s_[a-f0-9]{32}$/u);
|
|
129
|
+
var analyticsVisitorIdSchema = z5.string().regex(/^cpa_v_[a-f0-9]{32}$/u);
|
|
130
|
+
var analyticsPersistedIdentityHashSchema = z5.string().regex(/^[a-f0-9]{64}$/u);
|
|
102
131
|
var analyticsEventNames = [
|
|
103
132
|
"page_view",
|
|
104
133
|
"section_view",
|
|
@@ -178,41 +207,43 @@ var analyticsValidityStatuses = [
|
|
|
178
207
|
"rejected",
|
|
179
208
|
"ignored"
|
|
180
209
|
];
|
|
181
|
-
var analyticsEventNameSchema =
|
|
182
|
-
var serverOnlyAnalyticsEventSchema =
|
|
183
|
-
var analyticsEventSourceSchema =
|
|
184
|
-
var analyticsIngestionChannelSchema =
|
|
185
|
-
var analyticsTargetTypeSchema =
|
|
186
|
-
var analyticsDataAttributeEventSchema =
|
|
187
|
-
var analyticsDeviceTypeSchema =
|
|
188
|
-
var analyticsBotClassificationSchema =
|
|
189
|
-
var analyticsValidityStatusSchema =
|
|
190
|
-
var analyticsPropertiesSchema =
|
|
191
|
-
var analyticsTimestampSchema =
|
|
192
|
-
var analyticsBrowserEventSchema =
|
|
193
|
-
eventId:
|
|
210
|
+
var analyticsEventNameSchema = z5.enum(analyticsEventNames);
|
|
211
|
+
var serverOnlyAnalyticsEventSchema = z5.enum(serverOnlyAnalyticsEvents);
|
|
212
|
+
var analyticsEventSourceSchema = z5.enum(analyticsEventSources);
|
|
213
|
+
var analyticsIngestionChannelSchema = z5.enum(analyticsIngestionChannels);
|
|
214
|
+
var analyticsTargetTypeSchema = z5.enum(analyticsTargetTypes);
|
|
215
|
+
var analyticsDataAttributeEventSchema = z5.enum(analyticsDataAttributeEvents);
|
|
216
|
+
var analyticsDeviceTypeSchema = z5.enum(analyticsDeviceTypes);
|
|
217
|
+
var analyticsBotClassificationSchema = z5.enum(analyticsBotClassifications);
|
|
218
|
+
var analyticsValidityStatusSchema = z5.enum(analyticsValidityStatuses);
|
|
219
|
+
var analyticsPropertiesSchema = z5.record(z5.string(), z5.unknown());
|
|
220
|
+
var analyticsTimestampSchema = z5.string().datetime({ offset: true });
|
|
221
|
+
var analyticsBrowserEventSchema = z5.object({
|
|
222
|
+
eventId: z5.string().min(1).max(160),
|
|
223
|
+
installationGeneration: z5.number().int().positive().optional(),
|
|
224
|
+
measurementMode: z5.enum(["session_only", "full_analytics"]).optional(),
|
|
194
225
|
eventName: analyticsEventNameSchema,
|
|
195
226
|
eventSource: analyticsEventSourceSchema.optional().default("browser"),
|
|
196
|
-
targetId:
|
|
227
|
+
targetId: z5.string().min(1).max(160).optional(),
|
|
197
228
|
targetType: analyticsTargetTypeSchema.optional(),
|
|
198
229
|
visitorId: analyticsVisitorIdSchema.optional(),
|
|
199
230
|
sessionId: analyticsSessionIdSchema,
|
|
200
|
-
idempotencyKey:
|
|
231
|
+
idempotencyKey: z5.string().min(1).max(240).optional(),
|
|
201
232
|
occurredAt: analyticsTimestampSchema,
|
|
202
|
-
pageUrl:
|
|
203
|
-
pagePath:
|
|
204
|
-
routeTemplate:
|
|
205
|
-
referrer:
|
|
206
|
-
utmSource:
|
|
207
|
-
utmMedium:
|
|
208
|
-
utmCampaign:
|
|
209
|
-
utmContent:
|
|
210
|
-
utmTerm:
|
|
233
|
+
pageUrl: z5.string().url().max(2048).optional(),
|
|
234
|
+
pagePath: z5.string().min(1).max(1024).optional(),
|
|
235
|
+
routeTemplate: z5.string().min(1).max(1024).optional(),
|
|
236
|
+
referrer: z5.string().url().max(2048).optional(),
|
|
237
|
+
utmSource: z5.string().min(1).max(200).optional(),
|
|
238
|
+
utmMedium: z5.string().min(1).max(200).optional(),
|
|
239
|
+
utmCampaign: z5.string().min(1).max(200).optional(),
|
|
240
|
+
utmContent: z5.string().min(1).max(200).optional(),
|
|
241
|
+
utmTerm: z5.string().min(1).max(200).optional(),
|
|
211
242
|
deviceType: analyticsDeviceTypeSchema.optional(),
|
|
212
|
-
browserName:
|
|
213
|
-
osName:
|
|
214
|
-
country:
|
|
215
|
-
region:
|
|
243
|
+
browserName: z5.string().min(1).max(120).optional(),
|
|
244
|
+
osName: z5.string().min(1).max(120).optional(),
|
|
245
|
+
country: z5.string().min(1).max(80).optional(),
|
|
246
|
+
region: z5.string().min(1).max(120).optional(),
|
|
216
247
|
properties: analyticsPropertiesSchema.optional().default({})
|
|
217
248
|
}).superRefine((event, context) => {
|
|
218
249
|
if (isServerOnlyAnalyticsEvent(event.eventName)) {
|
|
@@ -237,44 +268,44 @@ var analyticsBrowserEventSchema = z4.object({
|
|
|
237
268
|
});
|
|
238
269
|
}
|
|
239
270
|
});
|
|
240
|
-
var analyticsBrowserEventPayloadSchema =
|
|
241
|
-
siteKey:
|
|
242
|
-
schemaVersion:
|
|
243
|
-
mode:
|
|
244
|
-
events:
|
|
271
|
+
var analyticsBrowserEventPayloadSchema = z5.object({
|
|
272
|
+
siteKey: z5.string().min(1),
|
|
273
|
+
schemaVersion: z5.literal(ANALYTICS_SCHEMA_VERSION),
|
|
274
|
+
mode: z5.enum(["live", "test"]).optional().default("live"),
|
|
275
|
+
events: z5.array(analyticsBrowserEventSchema).min(1).max(50)
|
|
245
276
|
});
|
|
246
|
-
var analyticsNormalizedEventBaseSchema =
|
|
247
|
-
site_id:
|
|
248
|
-
event_id:
|
|
249
|
-
schema_version:
|
|
277
|
+
var analyticsNormalizedEventBaseSchema = z5.object({
|
|
278
|
+
site_id: z5.string().uuid(),
|
|
279
|
+
event_id: z5.string().min(1).max(160),
|
|
280
|
+
schema_version: z5.literal(ANALYTICS_SCHEMA_VERSION),
|
|
250
281
|
event_name: analyticsEventNameSchema,
|
|
251
282
|
event_source: analyticsEventSourceSchema,
|
|
252
283
|
ingestion_channel: analyticsIngestionChannelSchema,
|
|
253
|
-
target_id:
|
|
284
|
+
target_id: z5.string().min(1).max(160).nullable().optional(),
|
|
254
285
|
target_type: analyticsTargetTypeSchema.nullable().optional(),
|
|
255
|
-
dedupe_key:
|
|
256
|
-
idempotency_key:
|
|
286
|
+
dedupe_key: z5.string().regex(/^analytics_dedupe_v1_[a-f0-9]{64}$/u).nullable().optional(),
|
|
287
|
+
idempotency_key: z5.string().min(1).max(240).nullable().optional(),
|
|
257
288
|
bot_classification: analyticsBotClassificationSchema,
|
|
258
289
|
validity_status: analyticsValidityStatusSchema,
|
|
259
|
-
rejection_reason:
|
|
290
|
+
rejection_reason: z5.string().min(1).max(240).nullable().optional(),
|
|
260
291
|
occurred_at: analyticsTimestampSchema,
|
|
261
292
|
received_at: analyticsTimestampSchema,
|
|
262
|
-
page_url:
|
|
263
|
-
page_path:
|
|
264
|
-
route_template:
|
|
265
|
-
referrer:
|
|
266
|
-
utm_source:
|
|
267
|
-
utm_medium:
|
|
268
|
-
utm_campaign:
|
|
269
|
-
utm_content:
|
|
270
|
-
utm_term:
|
|
271
|
-
country:
|
|
272
|
-
region:
|
|
293
|
+
page_url: z5.string().url().max(2048).nullable().optional(),
|
|
294
|
+
page_path: z5.string().min(1).max(1024).nullable().optional(),
|
|
295
|
+
route_template: z5.string().min(1).max(1024).nullable().optional(),
|
|
296
|
+
referrer: z5.string().url().max(2048).nullable().optional(),
|
|
297
|
+
utm_source: z5.string().min(1).max(200).nullable().optional(),
|
|
298
|
+
utm_medium: z5.string().min(1).max(200).nullable().optional(),
|
|
299
|
+
utm_campaign: z5.string().min(1).max(200).nullable().optional(),
|
|
300
|
+
utm_content: z5.string().min(1).max(200).nullable().optional(),
|
|
301
|
+
utm_term: z5.string().min(1).max(200).nullable().optional(),
|
|
302
|
+
country: z5.string().min(1).max(80).nullable().optional(),
|
|
303
|
+
region: z5.string().min(1).max(120).nullable().optional(),
|
|
273
304
|
device_type: analyticsDeviceTypeSchema,
|
|
274
|
-
browser_name:
|
|
275
|
-
os_name:
|
|
276
|
-
provider:
|
|
277
|
-
provider_event_id:
|
|
305
|
+
browser_name: z5.string().min(1).max(120).nullable().optional(),
|
|
306
|
+
os_name: z5.string().min(1).max(120).nullable().optional(),
|
|
307
|
+
provider: z5.string().min(1).max(120).nullable().optional(),
|
|
308
|
+
provider_event_id: z5.string().min(1).max(240).nullable().optional(),
|
|
278
309
|
properties: analyticsPropertiesSchema
|
|
279
310
|
});
|
|
280
311
|
var analyticsRawNormalizedEventSchema = analyticsNormalizedEventBaseSchema.extend({
|
|
@@ -290,11 +321,11 @@ function isServerOnlyAnalyticsEvent(eventName) {
|
|
|
290
321
|
}
|
|
291
322
|
|
|
292
323
|
// ../shared/dist/analytics-manifest.js
|
|
293
|
-
import { z as
|
|
294
|
-
var analyticsTargetIdSchema =
|
|
324
|
+
import { z as z6 } from "zod";
|
|
325
|
+
var analyticsTargetIdSchema = z6.string().min(1).max(120).regex(/^[a-zA-Z][a-zA-Z0-9]*(?:[._-][a-zA-Z0-9]+)*$/u, {
|
|
295
326
|
message: "Analytics target IDs must be stable identifiers without whitespace or visible copy."
|
|
296
327
|
});
|
|
297
|
-
var analyticsManifestRecordSchema =
|
|
328
|
+
var analyticsManifestRecordSchema = z6.record(z6.string(), z6.unknown());
|
|
298
329
|
var analyticsFormPurposes = [
|
|
299
330
|
"contact",
|
|
300
331
|
"lead",
|
|
@@ -303,21 +334,21 @@ var analyticsFormPurposes = [
|
|
|
303
334
|
"login",
|
|
304
335
|
"other"
|
|
305
336
|
];
|
|
306
|
-
var analyticsFormPurposeSchema =
|
|
307
|
-
var analyticsManifestRouteSchema =
|
|
308
|
-
path:
|
|
309
|
-
pageType:
|
|
310
|
-
label:
|
|
337
|
+
var analyticsFormPurposeSchema = z6.enum(analyticsFormPurposes);
|
|
338
|
+
var analyticsManifestRouteSchema = z6.object({
|
|
339
|
+
path: z6.string().min(1).max(1024),
|
|
340
|
+
pageType: z6.string().min(1).max(120).optional(),
|
|
341
|
+
label: z6.string().min(1).max(200).optional()
|
|
311
342
|
}).passthrough();
|
|
312
|
-
var analyticsManifestTargetSchema =
|
|
343
|
+
var analyticsManifestTargetSchema = z6.object({
|
|
313
344
|
id: analyticsTargetIdSchema,
|
|
314
345
|
type: analyticsTargetTypeSchema,
|
|
315
346
|
event: analyticsEventNameSchema.optional(),
|
|
316
|
-
events:
|
|
317
|
-
route:
|
|
318
|
-
label:
|
|
319
|
-
description:
|
|
320
|
-
autoActive:
|
|
347
|
+
events: z6.array(analyticsEventNameSchema).min(1).max(20).optional(),
|
|
348
|
+
route: z6.string().min(1).max(1024).optional(),
|
|
349
|
+
label: z6.string().min(1).max(200).optional(),
|
|
350
|
+
description: z6.string().min(1).max(1e3).optional(),
|
|
351
|
+
autoActive: z6.boolean().optional(),
|
|
321
352
|
sourceHints: analyticsManifestRecordSchema.optional()
|
|
322
353
|
}).passthrough().superRefine((target, context) => {
|
|
323
354
|
if (target.event === void 0 && target.events === void 0) {
|
|
@@ -342,21 +373,21 @@ var analyticsManifestTargetSchema = z5.object({
|
|
|
342
373
|
});
|
|
343
374
|
}
|
|
344
375
|
});
|
|
345
|
-
var analyticsManifestSchema =
|
|
346
|
-
schemaVersion:
|
|
347
|
-
siteId:
|
|
348
|
-
siteKeyRef:
|
|
376
|
+
var analyticsManifestSchema = z6.object({
|
|
377
|
+
schemaVersion: z6.literal(ANALYTICS_SCHEMA_VERSION),
|
|
378
|
+
siteId: z6.string().min(1),
|
|
379
|
+
siteKeyRef: z6.string().regex(/^env:[A-Z][A-Z0-9_]*$/u, {
|
|
349
380
|
message: "siteKeyRef must be an environment-variable reference."
|
|
350
381
|
}),
|
|
351
|
-
siteKeyLookup:
|
|
352
|
-
routes:
|
|
353
|
-
targets:
|
|
382
|
+
siteKeyLookup: z6.string().regex(/^pk_siteplane_[A-Za-z0-9_-]{16}$/),
|
|
383
|
+
routes: z6.array(analyticsManifestRouteSchema),
|
|
384
|
+
targets: z6.array(analyticsManifestTargetSchema),
|
|
354
385
|
metadata: analyticsManifestRecordSchema.optional(),
|
|
355
|
-
siteKey:
|
|
356
|
-
secretKey:
|
|
357
|
-
rawKey:
|
|
358
|
-
token:
|
|
359
|
-
accessToken:
|
|
386
|
+
siteKey: z6.string().optional(),
|
|
387
|
+
secretKey: z6.string().optional(),
|
|
388
|
+
rawKey: z6.string().optional(),
|
|
389
|
+
token: z6.string().optional(),
|
|
390
|
+
accessToken: z6.string().optional()
|
|
360
391
|
}).passthrough().superRefine((manifest, context) => {
|
|
361
392
|
const targetIds = /* @__PURE__ */ new Set();
|
|
362
393
|
for (const [index, target] of manifest.targets.entries()) {
|
|
@@ -400,9 +431,9 @@ function isPlainRecord(value) {
|
|
|
400
431
|
}
|
|
401
432
|
|
|
402
433
|
// ../shared/dist/analytics-metrics.js
|
|
403
|
-
import { z as
|
|
434
|
+
import { z as z7 } from "zod";
|
|
404
435
|
var analyticsVisitorQualities = ["exact", "estimated"];
|
|
405
|
-
var analyticsVisitorQualitySchema =
|
|
436
|
+
var analyticsVisitorQualitySchema = z7.enum(analyticsVisitorQualities);
|
|
406
437
|
var analyticsKpiKeys = [
|
|
407
438
|
"pageViews",
|
|
408
439
|
"sessions",
|
|
@@ -414,7 +445,7 @@ var analyticsKpiKeys = [
|
|
|
414
445
|
"conversionRate",
|
|
415
446
|
"inquiryRate"
|
|
416
447
|
];
|
|
417
|
-
var analyticsKpiKeySchema =
|
|
448
|
+
var analyticsKpiKeySchema = z7.enum(analyticsKpiKeys);
|
|
418
449
|
|
|
419
450
|
// ../shared/dist/analytics-privacy.js
|
|
420
451
|
var serverPropertySchemas = {
|
|
@@ -452,7 +483,7 @@ function revenuePropertySchema() {
|
|
|
452
483
|
}
|
|
453
484
|
|
|
454
485
|
// ../shared/dist/assets.js
|
|
455
|
-
import { z as
|
|
486
|
+
import { z as z8 } from "zod";
|
|
456
487
|
var ASSET_STAGES = ["staging", "final", "deleted"];
|
|
457
488
|
var ASSET_VISIBILITIES = ["private", "public", "deleted"];
|
|
458
489
|
var ASSET_USAGE_ENTITY_TYPES = [
|
|
@@ -461,13 +492,13 @@ var ASSET_USAGE_ENTITY_TYPES = [
|
|
|
461
492
|
"change_set",
|
|
462
493
|
"published_value"
|
|
463
494
|
];
|
|
464
|
-
var assetStageSchema =
|
|
465
|
-
var assetVisibilitySchema =
|
|
466
|
-
var assetUsageEntityTypeSchema =
|
|
467
|
-
var brandingAccentColorSchema =
|
|
495
|
+
var assetStageSchema = z8.enum(ASSET_STAGES);
|
|
496
|
+
var assetVisibilitySchema = z8.enum(ASSET_VISIBILITIES);
|
|
497
|
+
var assetUsageEntityTypeSchema = z8.enum(ASSET_USAGE_ENTITY_TYPES);
|
|
498
|
+
var brandingAccentColorSchema = z8.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/);
|
|
468
499
|
|
|
469
500
|
// ../shared/dist/booking-contracts.js
|
|
470
|
-
import { z as
|
|
501
|
+
import { z as z9 } from "zod";
|
|
471
502
|
var bookingStatuses = [
|
|
472
503
|
"pending_payment",
|
|
473
504
|
"confirmed",
|
|
@@ -522,30 +553,30 @@ var bookingResourceKinds = [
|
|
|
522
553
|
"equipment",
|
|
523
554
|
"other"
|
|
524
555
|
];
|
|
525
|
-
var bookingStatusSchema =
|
|
526
|
-
var bookingPaymentStatusSchema =
|
|
527
|
-
var bookingAccountReadinessStatusSchema =
|
|
528
|
-
var bookingRefundStatusSchema =
|
|
529
|
-
var bookingDisputeStatusSchema =
|
|
530
|
-
var bookingPaymentModeSchema =
|
|
531
|
-
var bookingPaymentCollectionTypeSchema =
|
|
532
|
-
var bookingPaymentCollectionSchema =
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
type:
|
|
536
|
-
depositPercent:
|
|
556
|
+
var bookingStatusSchema = z9.enum(bookingStatuses);
|
|
557
|
+
var bookingPaymentStatusSchema = z9.enum(bookingPaymentStatuses);
|
|
558
|
+
var bookingAccountReadinessStatusSchema = z9.enum(bookingAccountReadinessStatuses);
|
|
559
|
+
var bookingRefundStatusSchema = z9.enum(bookingRefundStatuses);
|
|
560
|
+
var bookingDisputeStatusSchema = z9.enum(bookingDisputeStatuses);
|
|
561
|
+
var bookingPaymentModeSchema = z9.enum(bookingPaymentModes);
|
|
562
|
+
var bookingPaymentCollectionTypeSchema = z9.enum(bookingPaymentCollectionTypes);
|
|
563
|
+
var bookingPaymentCollectionSchema = z9.discriminatedUnion("type", [
|
|
564
|
+
z9.object({ type: z9.literal("full_amount") }).strict(),
|
|
565
|
+
z9.object({
|
|
566
|
+
type: z9.literal("deposit_percent"),
|
|
567
|
+
depositPercent: z9.number().int().min(10).max(90)
|
|
537
568
|
}).strict()
|
|
538
569
|
]);
|
|
539
570
|
var bookingPaymentChoices = ["onsite", "online"];
|
|
540
|
-
var bookingPaymentChoiceSchema =
|
|
541
|
-
var bookingPaymentSnapshotSchema =
|
|
542
|
-
snapshotId:
|
|
543
|
-
snapshotVersion:
|
|
544
|
-
currency:
|
|
545
|
-
totalAmountCents:
|
|
546
|
-
onlineAmountCents:
|
|
547
|
-
onsiteRemainderCents:
|
|
548
|
-
maxStripeRefundAmountCents:
|
|
571
|
+
var bookingPaymentChoiceSchema = z9.enum(bookingPaymentChoices);
|
|
572
|
+
var bookingPaymentSnapshotSchema = z9.object({
|
|
573
|
+
snapshotId: z9.string().uuid(),
|
|
574
|
+
snapshotVersion: z9.number().int().positive(),
|
|
575
|
+
currency: z9.literal("EUR"),
|
|
576
|
+
totalAmountCents: z9.number().int().min(0),
|
|
577
|
+
onlineAmountCents: z9.number().int().min(0),
|
|
578
|
+
onsiteRemainderCents: z9.number().int().min(0),
|
|
579
|
+
maxStripeRefundAmountCents: z9.number().int().min(0)
|
|
549
580
|
}).strict().superRefine((snapshot, context) => {
|
|
550
581
|
if (snapshot.onlineAmountCents + snapshot.onsiteRemainderCents !== snapshot.totalAmountCents) {
|
|
551
582
|
context.addIssue({
|
|
@@ -560,17 +591,17 @@ var bookingPaymentSnapshotSchema = z8.object({
|
|
|
560
591
|
});
|
|
561
592
|
}
|
|
562
593
|
});
|
|
563
|
-
var bookingServiceVariantSchema =
|
|
564
|
-
id:
|
|
565
|
-
name:
|
|
566
|
-
durationMinutes:
|
|
567
|
-
priceCents:
|
|
594
|
+
var bookingServiceVariantSchema = z9.object({
|
|
595
|
+
id: z9.string().uuid(),
|
|
596
|
+
name: z9.string().trim().min(1).max(120),
|
|
597
|
+
durationMinutes: z9.number().int().min(1).max(1440),
|
|
598
|
+
priceCents: z9.number().int().min(0).nullable()
|
|
568
599
|
}).strict();
|
|
569
|
-
var bookingServiceVariantsSchema =
|
|
570
|
-
var isoDateSchema =
|
|
571
|
-
var utcDateTimeSchema =
|
|
572
|
-
var bookingLocalTimeSchema =
|
|
573
|
-
var bookingAvailabilityIntervalsSchema =
|
|
600
|
+
var bookingServiceVariantsSchema = z9.array(bookingServiceVariantSchema).min(1).max(20);
|
|
601
|
+
var isoDateSchema = z9.string().regex(/^\d{4}-\d{2}-\d{2}$/);
|
|
602
|
+
var utcDateTimeSchema = z9.string().datetime();
|
|
603
|
+
var bookingLocalTimeSchema = z9.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d$/);
|
|
604
|
+
var bookingAvailabilityIntervalsSchema = z9.array(z9.object({
|
|
574
605
|
start: bookingLocalTimeSchema,
|
|
575
606
|
end: bookingLocalTimeSchema
|
|
576
607
|
}).strict().refine((interval) => interval.end > interval.start)).superRefine((intervals, context) => {
|
|
@@ -585,75 +616,75 @@ var bookingAvailabilityIntervalsSchema = z8.array(z8.object({
|
|
|
585
616
|
}
|
|
586
617
|
}
|
|
587
618
|
});
|
|
588
|
-
var bookingPublicConfigSchema =
|
|
589
|
-
site:
|
|
590
|
-
displayName:
|
|
591
|
-
timezone:
|
|
592
|
-
locale:
|
|
593
|
-
bookingPageSlug:
|
|
594
|
-
privacyUrl:
|
|
619
|
+
var bookingPublicConfigSchema = z9.object({
|
|
620
|
+
site: z9.object({
|
|
621
|
+
displayName: z9.string().trim().min(1),
|
|
622
|
+
timezone: z9.string().trim().min(1),
|
|
623
|
+
locale: z9.string().trim().min(2),
|
|
624
|
+
bookingPageSlug: z9.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).min(2).max(64),
|
|
625
|
+
privacyUrl: z9.string().url().nullable()
|
|
595
626
|
}),
|
|
596
|
-
branding:
|
|
597
|
-
logoUrl:
|
|
598
|
-
accentColor:
|
|
627
|
+
branding: z9.object({
|
|
628
|
+
logoUrl: z9.string().url().nullable(),
|
|
629
|
+
accentColor: z9.string().trim().min(1).nullable()
|
|
599
630
|
}),
|
|
600
|
-
settings:
|
|
601
|
-
slotIntervalMinutes:
|
|
602
|
-
minLeadMinutes:
|
|
603
|
-
maxAdvanceDays:
|
|
604
|
-
requirePhone:
|
|
605
|
-
collectNote:
|
|
606
|
-
confirmationMessage:
|
|
631
|
+
settings: z9.object({
|
|
632
|
+
slotIntervalMinutes: z9.number().int().positive(),
|
|
633
|
+
minLeadMinutes: z9.number().int().min(0),
|
|
634
|
+
maxAdvanceDays: z9.number().int().min(1),
|
|
635
|
+
requirePhone: z9.boolean(),
|
|
636
|
+
collectNote: z9.boolean(),
|
|
637
|
+
confirmationMessage: z9.string().nullable()
|
|
607
638
|
}),
|
|
608
639
|
/** Freitexte des Salons, im Kassen-Schritt vor der Bestaetigung sichtbar. */
|
|
609
|
-
policies:
|
|
610
|
-
cancellation:
|
|
611
|
-
lateArrival:
|
|
640
|
+
policies: z9.object({
|
|
641
|
+
cancellation: z9.string().nullable(),
|
|
642
|
+
lateArrival: z9.string().nullable()
|
|
612
643
|
}),
|
|
613
|
-
payment:
|
|
644
|
+
payment: z9.object({
|
|
614
645
|
mode: bookingPaymentModeSchema,
|
|
615
646
|
collection: bookingPaymentCollectionSchema,
|
|
616
|
-
onlinePaymentsReady:
|
|
647
|
+
onlinePaymentsReady: z9.boolean()
|
|
617
648
|
}).strict(),
|
|
618
|
-
serviceCategories:
|
|
619
|
-
id:
|
|
620
|
-
name:
|
|
621
|
-
sortOrder:
|
|
649
|
+
serviceCategories: z9.array(z9.object({
|
|
650
|
+
id: z9.string().uuid(),
|
|
651
|
+
name: z9.string().trim().min(1),
|
|
652
|
+
sortOrder: z9.number().int()
|
|
622
653
|
})),
|
|
623
|
-
serviceSubcategories:
|
|
624
|
-
id:
|
|
625
|
-
categoryId:
|
|
626
|
-
name:
|
|
627
|
-
sortOrder:
|
|
654
|
+
serviceSubcategories: z9.array(z9.object({
|
|
655
|
+
id: z9.string().uuid(),
|
|
656
|
+
categoryId: z9.string().uuid(),
|
|
657
|
+
name: z9.string().trim().min(1),
|
|
658
|
+
sortOrder: z9.number().int()
|
|
628
659
|
})),
|
|
629
|
-
services:
|
|
630
|
-
id:
|
|
631
|
-
name:
|
|
632
|
-
durationMinutes:
|
|
633
|
-
priceCents:
|
|
634
|
-
currency:
|
|
635
|
-
description:
|
|
636
|
-
categoryId:
|
|
637
|
-
subcategoryId:
|
|
660
|
+
services: z9.array(z9.object({
|
|
661
|
+
id: z9.string().trim().min(1),
|
|
662
|
+
name: z9.string().trim().min(1),
|
|
663
|
+
durationMinutes: z9.number().int().positive(),
|
|
664
|
+
priceCents: z9.number().int().min(0).nullable(),
|
|
665
|
+
currency: z9.string().regex(/^[A-Z]{3}$/),
|
|
666
|
+
description: z9.string().nullable(),
|
|
667
|
+
categoryId: z9.string().uuid(),
|
|
668
|
+
subcategoryId: z9.string().uuid().nullable(),
|
|
638
669
|
variants: bookingServiceVariantsSchema,
|
|
639
|
-
allowsAnyResource:
|
|
640
|
-
sortOrder:
|
|
670
|
+
allowsAnyResource: z9.boolean(),
|
|
671
|
+
sortOrder: z9.number().int()
|
|
641
672
|
})),
|
|
642
|
-
resources:
|
|
643
|
-
id:
|
|
644
|
-
name:
|
|
645
|
-
kind:
|
|
673
|
+
resources: z9.array(z9.object({
|
|
674
|
+
id: z9.string().trim().min(1),
|
|
675
|
+
name: z9.string().trim().min(1),
|
|
676
|
+
kind: z9.enum(bookingResourceKinds)
|
|
646
677
|
})),
|
|
647
|
-
serviceResources:
|
|
648
|
-
serviceId:
|
|
649
|
-
resourceId:
|
|
678
|
+
serviceResources: z9.array(z9.object({
|
|
679
|
+
serviceId: z9.string().trim().min(1),
|
|
680
|
+
resourceId: z9.string().trim().min(1)
|
|
650
681
|
}))
|
|
651
682
|
});
|
|
652
|
-
var bookingItemSchema =
|
|
653
|
-
serviceId:
|
|
654
|
-
variantId:
|
|
683
|
+
var bookingItemSchema = z9.object({
|
|
684
|
+
serviceId: z9.string().trim().min(1),
|
|
685
|
+
variantId: z9.string().trim().min(1)
|
|
655
686
|
}).strict();
|
|
656
|
-
var bookingItemsSchema =
|
|
687
|
+
var bookingItemsSchema = z9.array(bookingItemSchema).min(1).max(10);
|
|
657
688
|
function parseBookingItemsParam(value) {
|
|
658
689
|
const items = value.split(",").map((entry) => entry.trim()).filter((entry) => entry !== "").map((entry) => {
|
|
659
690
|
const [serviceId, variantId, ...rest] = entry.split(":");
|
|
@@ -661,36 +692,36 @@ function parseBookingItemsParam(value) {
|
|
|
661
692
|
});
|
|
662
693
|
return items.every((item) => item !== null) ? items : null;
|
|
663
694
|
}
|
|
664
|
-
var bookingSlotsQuerySchema =
|
|
665
|
-
items:
|
|
666
|
-
resourceId:
|
|
695
|
+
var bookingSlotsQuerySchema = z9.object({
|
|
696
|
+
items: z9.preprocess((value) => typeof value === "string" ? parseBookingItemsParam(value) : value, bookingItemsSchema),
|
|
697
|
+
resourceId: z9.string().trim().min(1).optional(),
|
|
667
698
|
fromDate: isoDateSchema,
|
|
668
699
|
toDate: isoDateSchema
|
|
669
700
|
});
|
|
670
|
-
var bookingSlotsResponseSchema =
|
|
671
|
-
timezone:
|
|
701
|
+
var bookingSlotsResponseSchema = z9.object({
|
|
702
|
+
timezone: z9.string().trim().min(1),
|
|
672
703
|
items: bookingItemsSchema,
|
|
673
704
|
// Reine Behandlungsdauer ohne Puffer: das UI zeigt damit die Terminspanne,
|
|
674
705
|
// ohne selbst rechnen zu muessen.
|
|
675
|
-
totalDurationMinutes:
|
|
676
|
-
mode:
|
|
677
|
-
slots:
|
|
706
|
+
totalDurationMinutes: z9.number().int().min(1),
|
|
707
|
+
mode: z9.enum(["any", "resource"]),
|
|
708
|
+
slots: z9.array(z9.object({
|
|
678
709
|
startUtc: utcDateTimeSchema,
|
|
679
|
-
resourceId:
|
|
710
|
+
resourceId: z9.string().trim().min(1).optional()
|
|
680
711
|
}))
|
|
681
712
|
});
|
|
682
|
-
var bookingAvailabilityQuerySchema =
|
|
683
|
-
items:
|
|
684
|
-
resourceId:
|
|
713
|
+
var bookingAvailabilityQuerySchema = z9.object({
|
|
714
|
+
items: z9.preprocess((value) => typeof value === "string" ? parseBookingItemsParam(value) : value, bookingItemsSchema),
|
|
715
|
+
resourceId: z9.string().trim().min(1).optional(),
|
|
685
716
|
fromDate: isoDateSchema,
|
|
686
717
|
toDate: isoDateSchema
|
|
687
718
|
});
|
|
688
|
-
var bookingAvailabilityResponseSchema =
|
|
689
|
-
timezone:
|
|
690
|
-
totalDurationMinutes:
|
|
691
|
-
days:
|
|
719
|
+
var bookingAvailabilityResponseSchema = z9.object({
|
|
720
|
+
timezone: z9.string().trim().min(1),
|
|
721
|
+
totalDurationMinutes: z9.number().int().min(1),
|
|
722
|
+
days: z9.array(z9.object({
|
|
692
723
|
date: isoDateSchema,
|
|
693
|
-
hasSlots:
|
|
724
|
+
hasSlots: z9.boolean()
|
|
694
725
|
})),
|
|
695
726
|
/** Erster Tag mit Slot ab `fromDate`, auch ausserhalb des Fensters. */
|
|
696
727
|
nextAvailableDate: isoDateSchema.nullable()
|
|
@@ -708,72 +739,72 @@ var bookingPublicErrorCodes = [
|
|
|
708
739
|
"too_late",
|
|
709
740
|
"not_found"
|
|
710
741
|
];
|
|
711
|
-
var bookingPublicErrorSchema =
|
|
712
|
-
error:
|
|
713
|
-
message:
|
|
714
|
-
requestId:
|
|
742
|
+
var bookingPublicErrorSchema = z9.object({
|
|
743
|
+
error: z9.enum(bookingPublicErrorCodes),
|
|
744
|
+
message: z9.string().optional(),
|
|
745
|
+
requestId: z9.string().optional()
|
|
715
746
|
}).strict();
|
|
716
|
-
var bookingCreateRequestSchema =
|
|
747
|
+
var bookingCreateRequestSchema = z9.object({
|
|
717
748
|
items: bookingItemsSchema,
|
|
718
|
-
resourceId:
|
|
749
|
+
resourceId: z9.string().min(1).nullable(),
|
|
719
750
|
startUtc: utcDateTimeSchema,
|
|
720
|
-
customer:
|
|
721
|
-
name:
|
|
722
|
-
email:
|
|
723
|
-
phone:
|
|
724
|
-
note:
|
|
751
|
+
customer: z9.object({
|
|
752
|
+
name: z9.string().min(1).max(120),
|
|
753
|
+
email: z9.string().email().max(254),
|
|
754
|
+
phone: z9.string().max(32).optional(),
|
|
755
|
+
note: z9.string().max(1e3).optional()
|
|
725
756
|
}).strict(),
|
|
726
|
-
hp:
|
|
727
|
-
clientToken:
|
|
757
|
+
hp: z9.string().optional(),
|
|
758
|
+
clientToken: z9.string().uuid(),
|
|
728
759
|
paymentChoice: bookingPaymentChoiceSchema,
|
|
729
760
|
// Werbe-Einwilligung. Bestaetigung, Erinnerung und Storno-Link sind davon
|
|
730
761
|
// unabhaengig und werden immer versendet.
|
|
731
|
-
consent:
|
|
732
|
-
marketingEmail:
|
|
733
|
-
marketingSms:
|
|
762
|
+
consent: z9.object({
|
|
763
|
+
marketingEmail: z9.boolean(),
|
|
764
|
+
marketingSms: z9.boolean()
|
|
734
765
|
}).strict().optional()
|
|
735
766
|
}).strict();
|
|
736
|
-
var bookingPublicPaymentResponseSchema =
|
|
737
|
-
clientSecret:
|
|
738
|
-
stripeAccountId:
|
|
767
|
+
var bookingPublicPaymentResponseSchema = z9.object({
|
|
768
|
+
clientSecret: z9.string().min(1),
|
|
769
|
+
stripeAccountId: z9.string().startsWith("acct_")
|
|
739
770
|
}).strict();
|
|
740
|
-
var bookingCreateResponseSchema =
|
|
741
|
-
|
|
742
|
-
status:
|
|
743
|
-
booking:
|
|
744
|
-
id:
|
|
771
|
+
var bookingCreateResponseSchema = z9.union([
|
|
772
|
+
z9.object({
|
|
773
|
+
status: z9.literal("confirmed"),
|
|
774
|
+
booking: z9.object({
|
|
775
|
+
id: z9.string().min(1),
|
|
745
776
|
startUtc: utcDateTimeSchema,
|
|
746
777
|
endUtc: utcDateTimeSchema,
|
|
747
|
-
timezone:
|
|
748
|
-
serviceName:
|
|
749
|
-
resourceName:
|
|
778
|
+
timezone: z9.string().trim().min(1),
|
|
779
|
+
serviceName: z9.string().trim().min(1),
|
|
780
|
+
resourceName: z9.string().trim().min(1)
|
|
750
781
|
}).strict(),
|
|
751
|
-
manageUrl:
|
|
752
|
-
confirmationMessage:
|
|
782
|
+
manageUrl: z9.string().url(),
|
|
783
|
+
confirmationMessage: z9.string().nullable()
|
|
753
784
|
}).strict(),
|
|
754
|
-
|
|
755
|
-
status:
|
|
756
|
-
bookingId:
|
|
785
|
+
z9.object({
|
|
786
|
+
status: z9.literal("pending_payment"),
|
|
787
|
+
bookingId: z9.string().min(1),
|
|
757
788
|
holdExpiresAt: utcDateTimeSchema,
|
|
758
789
|
payment: bookingPublicPaymentResponseSchema,
|
|
759
|
-
statusToken:
|
|
760
|
-
manageUrl:
|
|
790
|
+
statusToken: z9.string().min(20),
|
|
791
|
+
manageUrl: z9.string().url().optional()
|
|
761
792
|
}).strict(),
|
|
762
793
|
bookingPublicErrorSchema
|
|
763
794
|
]);
|
|
764
|
-
var bookingStatusResponseSchema =
|
|
795
|
+
var bookingStatusResponseSchema = z9.object({
|
|
765
796
|
bookingStatus: bookingStatusSchema,
|
|
766
797
|
paymentStatus: bookingPaymentStatusSchema,
|
|
767
798
|
refundStatus: bookingRefundStatusSchema,
|
|
768
799
|
disputeStatus: bookingDisputeStatusSchema,
|
|
769
800
|
holdExpiresAt: utcDateTimeSchema.nullable()
|
|
770
801
|
}).strict();
|
|
771
|
-
var bookingCancelRequestSchema =
|
|
772
|
-
token:
|
|
802
|
+
var bookingCancelRequestSchema = z9.object({
|
|
803
|
+
token: z9.string().min(20)
|
|
773
804
|
});
|
|
774
|
-
var bookingCancelResponseSchema =
|
|
775
|
-
|
|
776
|
-
status:
|
|
805
|
+
var bookingCancelResponseSchema = z9.union([
|
|
806
|
+
z9.object({
|
|
807
|
+
status: z9.enum(["cancelled", "already_cancelled", "too_late", "not_found"])
|
|
777
808
|
}),
|
|
778
809
|
bookingPublicErrorSchema
|
|
779
810
|
]);
|
|
@@ -782,34 +813,34 @@ var bookingMoveErrorCodes = [
|
|
|
782
813
|
"booking_not_movable",
|
|
783
814
|
"not_found"
|
|
784
815
|
];
|
|
785
|
-
var bookingMoveRequestSchema =
|
|
786
|
-
bookingId:
|
|
816
|
+
var bookingMoveRequestSchema = z9.object({
|
|
817
|
+
bookingId: z9.string().uuid(),
|
|
787
818
|
newStartUtc: utcDateTimeSchema,
|
|
788
|
-
newResourceId:
|
|
789
|
-
notifyCustomer:
|
|
790
|
-
reason:
|
|
791
|
-
});
|
|
792
|
-
var bookingMoveResponseSchema =
|
|
793
|
-
|
|
794
|
-
status:
|
|
795
|
-
bookingId:
|
|
819
|
+
newResourceId: z9.string().uuid().optional(),
|
|
820
|
+
notifyCustomer: z9.boolean().default(false),
|
|
821
|
+
reason: z9.string().max(500).optional()
|
|
822
|
+
});
|
|
823
|
+
var bookingMoveResponseSchema = z9.union([
|
|
824
|
+
z9.object({
|
|
825
|
+
status: z9.literal("moved"),
|
|
826
|
+
bookingId: z9.string().uuid(),
|
|
796
827
|
startUtc: utcDateTimeSchema,
|
|
797
828
|
endUtc: utcDateTimeSchema,
|
|
798
|
-
resourceId:
|
|
829
|
+
resourceId: z9.string().uuid()
|
|
799
830
|
}),
|
|
800
|
-
|
|
801
|
-
error:
|
|
802
|
-
message:
|
|
803
|
-
requestId:
|
|
831
|
+
z9.object({
|
|
832
|
+
error: z9.enum(bookingMoveErrorCodes),
|
|
833
|
+
message: z9.string().optional(),
|
|
834
|
+
requestId: z9.string().optional()
|
|
804
835
|
})
|
|
805
836
|
]);
|
|
806
|
-
var bookingManifestSchema =
|
|
807
|
-
schemaVersion:
|
|
808
|
-
siteId:
|
|
809
|
-
siteKeyPrefix:
|
|
810
|
-
bookingPageSlug:
|
|
811
|
-
embedMode:
|
|
812
|
-
productionOrigin:
|
|
837
|
+
var bookingManifestSchema = z9.object({
|
|
838
|
+
schemaVersion: z9.number().int().positive(),
|
|
839
|
+
siteId: z9.string().trim().min(1),
|
|
840
|
+
siteKeyPrefix: z9.string().startsWith("bk_pub_"),
|
|
841
|
+
bookingPageSlug: z9.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).min(2).max(64),
|
|
842
|
+
embedMode: z9.enum(["script", "web_component", "iframe"]).optional(),
|
|
843
|
+
productionOrigin: z9.string().url().optional()
|
|
813
844
|
}).passthrough();
|
|
814
845
|
var secretManifestKeys = /* @__PURE__ */ new Set([
|
|
815
846
|
"siteKey",
|
|
@@ -831,20 +862,20 @@ function redactBookingManifest(value) {
|
|
|
831
862
|
var BOOKING_CREATE_PAYLOAD_LIMIT_BYTES = 16 * 1024;
|
|
832
863
|
|
|
833
864
|
// ../shared/dist/bridge-protocol.js
|
|
834
|
-
import { z as
|
|
865
|
+
import { z as z17 } from "zod";
|
|
835
866
|
|
|
836
867
|
// ../shared/dist/field-id.js
|
|
837
|
-
import { z as
|
|
868
|
+
import { z as z10 } from "zod";
|
|
838
869
|
var FIELD_ID_PATTERN = /^[a-z][a-z0-9_-]*(\.[a-z][a-z0-9_-]*)+$/;
|
|
839
|
-
var fieldIdSchema =
|
|
870
|
+
var fieldIdSchema = z10.string().regex(FIELD_ID_PATTERN, "Invalid field id");
|
|
840
871
|
|
|
841
872
|
// ../shared/dist/field-types.js
|
|
842
|
-
import { z as
|
|
873
|
+
import { z as z11 } from "zod";
|
|
843
874
|
var FIELD_TYPES = ["text", "longText", "image", "link"];
|
|
844
|
-
var fieldTypeSchema =
|
|
875
|
+
var fieldTypeSchema = z11.enum(FIELD_TYPES);
|
|
845
876
|
|
|
846
877
|
// ../shared/dist/image-value.js
|
|
847
|
-
import { z as
|
|
878
|
+
import { z as z12 } from "zod";
|
|
848
879
|
var SUPPORTED_IMAGE_CONTENT_TYPES = [
|
|
849
880
|
"image/jpeg",
|
|
850
881
|
"image/png",
|
|
@@ -853,21 +884,21 @@ var SUPPORTED_IMAGE_CONTENT_TYPES = [
|
|
|
853
884
|
];
|
|
854
885
|
var maxImageUploadBytes = 10 * 1024 * 1024;
|
|
855
886
|
var largeImageWarningBytes = 2 * 1024 * 1024;
|
|
856
|
-
var imageContentTypeSchema =
|
|
857
|
-
var imageCropSchema =
|
|
858
|
-
x:
|
|
859
|
-
y:
|
|
860
|
-
zoom:
|
|
861
|
-
aspectRatio:
|
|
862
|
-
});
|
|
863
|
-
var imageValueSchema =
|
|
864
|
-
src:
|
|
865
|
-
alt:
|
|
866
|
-
width:
|
|
867
|
-
height:
|
|
887
|
+
var imageContentTypeSchema = z12.enum(SUPPORTED_IMAGE_CONTENT_TYPES);
|
|
888
|
+
var imageCropSchema = z12.object({
|
|
889
|
+
x: z12.number().min(0).max(100),
|
|
890
|
+
y: z12.number().min(0).max(100),
|
|
891
|
+
zoom: z12.number().min(1).max(4),
|
|
892
|
+
aspectRatio: z12.number().positive().max(10)
|
|
893
|
+
});
|
|
894
|
+
var imageValueSchema = z12.object({
|
|
895
|
+
src: z12.string().trim().min(1),
|
|
896
|
+
alt: z12.string().trim().min(1).max(300),
|
|
897
|
+
width: z12.number().int().positive().optional(),
|
|
898
|
+
height: z12.number().int().positive().optional(),
|
|
868
899
|
crop: imageCropSchema.optional(),
|
|
869
|
-
assetId:
|
|
870
|
-
finalStorageProvider:
|
|
900
|
+
assetId: z12.string().uuid().optional(),
|
|
901
|
+
finalStorageProvider: z12.enum([
|
|
871
902
|
"repo_static_assets",
|
|
872
903
|
"repo_handoff",
|
|
873
904
|
"site_owned_storage",
|
|
@@ -876,31 +907,36 @@ var imageValueSchema = z11.object({
|
|
|
876
907
|
});
|
|
877
908
|
|
|
878
909
|
// ../shared/dist/setup-deployment.js
|
|
879
|
-
import { z as
|
|
880
|
-
var version =
|
|
881
|
-
var
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
910
|
+
import { z as z13 } from "zod";
|
|
911
|
+
var version = z13.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u);
|
|
912
|
+
var siteSetupPackagesSchema = z13.object({
|
|
913
|
+
siteplane: version,
|
|
914
|
+
runtimeNext: version,
|
|
915
|
+
analytics: version.optional()
|
|
916
|
+
}).strict();
|
|
917
|
+
var hash = z13.string().regex(/^sha256:[0-9a-f]{64}$/u);
|
|
918
|
+
var setupDeploymentRecordSchema = z13.object({
|
|
919
|
+
version: z13.literal(1),
|
|
920
|
+
operationId: z13.string().uuid(),
|
|
921
|
+
provider: z13.literal("vercel"),
|
|
922
|
+
projectId: z13.string().regex(/^prj_[A-Za-z0-9]+$/u),
|
|
923
|
+
teamId: z13.string().regex(/^(?:team|user)_[A-Za-z0-9]+$/u),
|
|
924
|
+
origin: z13.string().url().refine((value) => {
|
|
889
925
|
const url = new URL(value);
|
|
890
926
|
return url.protocol === "https:" && url.origin === value && !url.username && !url.password;
|
|
891
927
|
}),
|
|
892
|
-
deploymentId:
|
|
893
|
-
revision:
|
|
928
|
+
deploymentId: z13.string().regex(/^dpl_[A-Za-z0-9]+$/u).nullable(),
|
|
929
|
+
revision: z13.string().regex(/^[0-9a-f]{40}$/u),
|
|
894
930
|
fieldContractHash: hash,
|
|
895
|
-
packages:
|
|
931
|
+
packages: siteSetupPackagesSchema,
|
|
896
932
|
configurationFingerprint: hash,
|
|
897
|
-
adminSecretGeneration:
|
|
898
|
-
revalidationGeneration:
|
|
899
|
-
startedAt:
|
|
900
|
-
environmentWrittenAt:
|
|
901
|
-
deployRequestedAt:
|
|
902
|
-
deadline:
|
|
903
|
-
phase:
|
|
933
|
+
adminSecretGeneration: z13.string().uuid(),
|
|
934
|
+
revalidationGeneration: z13.number().int().positive(),
|
|
935
|
+
startedAt: z13.string().datetime(),
|
|
936
|
+
environmentWrittenAt: z13.string().datetime().nullable(),
|
|
937
|
+
deployRequestedAt: z13.string().datetime().nullable(),
|
|
938
|
+
deadline: z13.string().datetime(),
|
|
939
|
+
phase: z13.enum([
|
|
904
940
|
"planned",
|
|
905
941
|
"environment_written",
|
|
906
942
|
"deploy_requested",
|
|
@@ -908,41 +944,41 @@ var setupDeploymentRecordSchema = z12.object({
|
|
|
908
944
|
"verified",
|
|
909
945
|
"failed"
|
|
910
946
|
]),
|
|
911
|
-
build:
|
|
947
|
+
build: z13.object({
|
|
912
948
|
node: version,
|
|
913
|
-
packageManager:
|
|
949
|
+
packageManager: z13.enum(["npm", "pnpm"]),
|
|
914
950
|
packageManagerVersion: version,
|
|
915
951
|
lockfileHash: hash
|
|
916
952
|
}).strict().nullable()
|
|
917
953
|
}).strict();
|
|
918
|
-
var setupDeploymentInputSchema =
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
action:
|
|
922
|
-
expectedOperationId:
|
|
954
|
+
var setupDeploymentInputSchema = z13.discriminatedUnion("action", [
|
|
955
|
+
z13.object({ action: z13.literal("read") }).strict(),
|
|
956
|
+
z13.object({
|
|
957
|
+
action: z13.literal("record"),
|
|
958
|
+
expectedOperationId: z13.string().uuid().nullable(),
|
|
923
959
|
record: setupDeploymentRecordSchema
|
|
924
960
|
}).strict()
|
|
925
961
|
]);
|
|
926
962
|
|
|
927
963
|
// ../shared/dist/site-setup.js
|
|
928
|
-
import { z as
|
|
964
|
+
import { z as z16 } from "zod";
|
|
929
965
|
|
|
930
966
|
// ../shared/dist/site-field-contract.js
|
|
931
|
-
import { z as
|
|
967
|
+
import { z as z15 } from "zod";
|
|
932
968
|
|
|
933
969
|
// ../shared/dist/fallback-hash.js
|
|
934
|
-
import { z as
|
|
970
|
+
import { z as z14 } from "zod";
|
|
935
971
|
var SAFE_REPRESENTATION_REASONS = [
|
|
936
972
|
"asset_import_rewritten",
|
|
937
973
|
"relative_url_normalized",
|
|
938
974
|
"line_endings_normalized",
|
|
939
975
|
"image_value_serialized"
|
|
940
976
|
];
|
|
941
|
-
var safeRepresentationReasonSchema =
|
|
942
|
-
var linkFallbackSchema =
|
|
943
|
-
href:
|
|
944
|
-
label:
|
|
945
|
-
target:
|
|
977
|
+
var safeRepresentationReasonSchema = z14.enum(SAFE_REPRESENTATION_REASONS);
|
|
978
|
+
var linkFallbackSchema = z14.object({
|
|
979
|
+
href: z14.string().trim().min(1),
|
|
980
|
+
label: z14.string().trim().min(1).optional(),
|
|
981
|
+
target: z14.enum(["_self", "_blank"]).optional()
|
|
946
982
|
}).passthrough();
|
|
947
983
|
function stableJsonStringify(value) {
|
|
948
984
|
return JSON.stringify(sortObjectKeys(value));
|
|
@@ -958,67 +994,67 @@ function sortObjectKeys(value) {
|
|
|
958
994
|
}
|
|
959
995
|
|
|
960
996
|
// ../shared/dist/site-field-contract.js
|
|
961
|
-
var siteFieldStatusSchema =
|
|
962
|
-
var semanticVersionSchema =
|
|
963
|
-
var siteFieldRouteKeySchema =
|
|
964
|
-
var repositoryRelativePosixPathSchema =
|
|
965
|
-
var sourceMappingSchema =
|
|
966
|
-
kind:
|
|
997
|
+
var siteFieldStatusSchema = z15.enum(["hidden", "active"]);
|
|
998
|
+
var semanticVersionSchema = z15.string().regex(/^\d+\.\d+\.\d+$/u);
|
|
999
|
+
var siteFieldRouteKeySchema = z15.string().trim().refine((value) => value === "$global" || value.startsWith("/") && !value.includes("?") && !value.includes("#") && (value === "/" || !value.endsWith("/")), "Route keys must be canonical paths or $global.");
|
|
1000
|
+
var repositoryRelativePosixPathSchema = z15.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.");
|
|
1001
|
+
var sourceMappingSchema = z15.object({
|
|
1002
|
+
kind: z15.literal("function"),
|
|
967
1003
|
filePath: repositoryRelativePosixPathSchema,
|
|
968
|
-
exportName:
|
|
969
|
-
sourcePath:
|
|
1004
|
+
exportName: z15.string().trim().min(1).optional(),
|
|
1005
|
+
sourcePath: z15.string().trim().min(1).optional(),
|
|
970
1006
|
editTarget: fieldIdSchema.optional()
|
|
971
1007
|
}).strict();
|
|
972
|
-
var domMappingSchema =
|
|
973
|
-
attribute:
|
|
974
|
-
previewStrategy:
|
|
1008
|
+
var domMappingSchema = z15.object({
|
|
1009
|
+
attribute: z15.literal("data-siteplane-field-id"),
|
|
1010
|
+
previewStrategy: z15.enum(["dom", "event"])
|
|
975
1011
|
}).strict();
|
|
976
|
-
var fieldBaseSchema =
|
|
1012
|
+
var fieldBaseSchema = z15.object({
|
|
977
1013
|
fieldId: fieldIdSchema,
|
|
978
1014
|
routeKey: siteFieldRouteKeySchema,
|
|
979
1015
|
source: sourceMappingSchema,
|
|
980
1016
|
dom: domMappingSchema.optional()
|
|
981
1017
|
}).strict();
|
|
982
|
-
var linkFallbackSchema2 =
|
|
983
|
-
href:
|
|
984
|
-
label:
|
|
985
|
-
target:
|
|
1018
|
+
var linkFallbackSchema2 = z15.object({
|
|
1019
|
+
href: z15.string().trim().min(1),
|
|
1020
|
+
label: z15.string().trim().min(1).optional(),
|
|
1021
|
+
target: z15.enum(["_self", "_blank"]).optional()
|
|
986
1022
|
}).strict();
|
|
987
|
-
var imageFallbackSchema =
|
|
988
|
-
src:
|
|
989
|
-
alt:
|
|
990
|
-
width:
|
|
991
|
-
height:
|
|
992
|
-
crop:
|
|
993
|
-
x:
|
|
994
|
-
y:
|
|
995
|
-
zoom:
|
|
996
|
-
aspectRatio:
|
|
1023
|
+
var imageFallbackSchema = z15.object({
|
|
1024
|
+
src: z15.string().trim().min(1),
|
|
1025
|
+
alt: z15.string().trim().max(300),
|
|
1026
|
+
width: z15.number().int().positive().optional(),
|
|
1027
|
+
height: z15.number().int().positive().optional(),
|
|
1028
|
+
crop: z15.object({
|
|
1029
|
+
x: z15.number().min(0).max(100),
|
|
1030
|
+
y: z15.number().min(0).max(100),
|
|
1031
|
+
zoom: z15.number().min(1).max(4),
|
|
1032
|
+
aspectRatio: z15.number().positive().max(10)
|
|
997
1033
|
}).strict().optional()
|
|
998
1034
|
}).strict();
|
|
999
|
-
var siteFieldContractFieldSchema =
|
|
1035
|
+
var siteFieldContractFieldSchema = z15.discriminatedUnion("fieldType", [
|
|
1000
1036
|
fieldBaseSchema.extend({
|
|
1001
|
-
fieldType:
|
|
1002
|
-
fallback:
|
|
1037
|
+
fieldType: z15.literal("text"),
|
|
1038
|
+
fallback: z15.string()
|
|
1003
1039
|
}),
|
|
1004
1040
|
fieldBaseSchema.extend({
|
|
1005
|
-
fieldType:
|
|
1006
|
-
fallback:
|
|
1041
|
+
fieldType: z15.literal("longText"),
|
|
1042
|
+
fallback: z15.string()
|
|
1007
1043
|
}),
|
|
1008
1044
|
fieldBaseSchema.extend({
|
|
1009
|
-
fieldType:
|
|
1045
|
+
fieldType: z15.literal("link"),
|
|
1010
1046
|
fallback: linkFallbackSchema2
|
|
1011
1047
|
}),
|
|
1012
1048
|
fieldBaseSchema.extend({
|
|
1013
|
-
fieldType:
|
|
1049
|
+
fieldType: z15.literal("image"),
|
|
1014
1050
|
fallback: imageFallbackSchema
|
|
1015
1051
|
})
|
|
1016
1052
|
]);
|
|
1017
|
-
var siteFieldContractV1Schema =
|
|
1018
|
-
version:
|
|
1053
|
+
var siteFieldContractV1Schema = z15.object({
|
|
1054
|
+
version: z15.literal(1),
|
|
1019
1055
|
fieldContractVersion: semanticVersionSchema,
|
|
1020
1056
|
scannerContractVersion: semanticVersionSchema,
|
|
1021
|
-
fields:
|
|
1057
|
+
fields: z15.array(siteFieldContractFieldSchema)
|
|
1022
1058
|
}).strict().superRefine((contract, context) => {
|
|
1023
1059
|
const seen = /* @__PURE__ */ new Set();
|
|
1024
1060
|
for (const [index, field] of contract.fields.entries()) {
|
|
@@ -1067,20 +1103,20 @@ var SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_LENGTH = 2e3;
|
|
|
1067
1103
|
var SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES = 8e3;
|
|
1068
1104
|
var CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES = 32 * 1024;
|
|
1069
1105
|
var CONTINUE_SITE_SETUP_HTTP_BODY_MAX_BYTES = 64 * 1024;
|
|
1070
|
-
var siteSetupRunStatusSchema =
|
|
1071
|
-
var siteSetupRunModeSchema =
|
|
1072
|
-
var siteSetupErrorCodeSchema =
|
|
1073
|
-
var editorFieldSchema =
|
|
1106
|
+
var siteSetupRunStatusSchema = z16.enum(SITE_SETUP_RUN_STATUSES);
|
|
1107
|
+
var siteSetupRunModeSchema = z16.enum(SITE_SETUP_RUN_MODES);
|
|
1108
|
+
var siteSetupErrorCodeSchema = z16.enum(SITE_SETUP_ERROR_CODES);
|
|
1109
|
+
var editorFieldSchema = z16.object({
|
|
1074
1110
|
fieldId: fieldIdSchema,
|
|
1075
|
-
label:
|
|
1076
|
-
subsection:
|
|
1077
|
-
description:
|
|
1078
|
-
required:
|
|
1079
|
-
maxLength:
|
|
1111
|
+
label: z16.string().trim().min(1),
|
|
1112
|
+
subsection: z16.string().trim().min(1).optional(),
|
|
1113
|
+
description: z16.string().trim().min(1).optional(),
|
|
1114
|
+
required: z16.boolean().optional(),
|
|
1115
|
+
maxLength: z16.number().int().positive().optional()
|
|
1080
1116
|
}).strict();
|
|
1081
|
-
var editorSectionSchema =
|
|
1082
|
-
label:
|
|
1083
|
-
fields:
|
|
1117
|
+
var editorSectionSchema = z16.object({
|
|
1118
|
+
label: z16.string().trim().min(1),
|
|
1119
|
+
fields: z16.array(editorFieldSchema).min(1)
|
|
1084
1120
|
}).strict().superRefine((section, context) => {
|
|
1085
1121
|
const closedSubsections = /* @__PURE__ */ new Set();
|
|
1086
1122
|
let currentSubsection;
|
|
@@ -1099,10 +1135,10 @@ var editorSectionSchema = z15.object({
|
|
|
1099
1135
|
}
|
|
1100
1136
|
}
|
|
1101
1137
|
});
|
|
1102
|
-
var editorRouteSchema =
|
|
1138
|
+
var editorRouteSchema = z16.object({
|
|
1103
1139
|
routeKey: siteFieldRouteKeySchema,
|
|
1104
|
-
label:
|
|
1105
|
-
sections:
|
|
1140
|
+
label: z16.string().trim().min(1),
|
|
1141
|
+
sections: z16.array(editorSectionSchema).min(1)
|
|
1106
1142
|
}).strict().superRefine((route, context) => {
|
|
1107
1143
|
const sections = /* @__PURE__ */ new Set();
|
|
1108
1144
|
for (const [index, section] of route.sections.entries()) {
|
|
@@ -1116,9 +1152,9 @@ var editorRouteSchema = z15.object({
|
|
|
1116
1152
|
sections.add(section.label);
|
|
1117
1153
|
}
|
|
1118
1154
|
});
|
|
1119
|
-
var editorDefinitionV1Schema =
|
|
1120
|
-
version:
|
|
1121
|
-
routes:
|
|
1155
|
+
var editorDefinitionV1Schema = z16.object({
|
|
1156
|
+
version: z16.literal(1),
|
|
1157
|
+
routes: z16.array(editorRouteSchema).min(1)
|
|
1122
1158
|
}).strict().superRefine((definition, context) => {
|
|
1123
1159
|
const routes = /* @__PURE__ */ new Set();
|
|
1124
1160
|
const fields = /* @__PURE__ */ new Set();
|
|
@@ -1156,7 +1192,7 @@ var editorDefinitionV1Schema = z15.object({
|
|
|
1156
1192
|
var forbiddenControlOrBidi = /[\u0000-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
|
|
1157
1193
|
var forbiddenOwnerNoteControlOrBidi = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
|
|
1158
1194
|
var unsafeLocator = /<\/?[a-z][^>]*>|\b(?:javascript|data:text\/html)\s*:|\bon[a-z]+\s*=/iu;
|
|
1159
|
-
var renderedPathSchema =
|
|
1195
|
+
var renderedPathSchema = z16.string().trim().transform((value) => value !== "/" ? value.replace(/\/+$/u, "") : value).superRefine((value, context) => {
|
|
1160
1196
|
if (!value.startsWith("/") || value === "$global" || value.includes("?") || value.includes("#")) {
|
|
1161
1197
|
context.addIssue({
|
|
1162
1198
|
code: "custom",
|
|
@@ -1166,7 +1202,7 @@ var renderedPathSchema = z15.string().trim().transform((value) => value !== "/"
|
|
|
1166
1202
|
addSafeByteIssues(value, CONTINUE_SITE_SETUP_RENDERED_PATH_MAX_BYTES, "renderedPath", context);
|
|
1167
1203
|
});
|
|
1168
1204
|
function normalizedSafeTextSchema(maxBytes, label) {
|
|
1169
|
-
return
|
|
1205
|
+
return z16.string().transform((value) => value.trim().replace(new RegExp("\\p{White_Space}+", "gu"), " ")).pipe(z16.string().min(1)).superRefine((value, context) => {
|
|
1170
1206
|
addSafeByteIssues(value, maxBytes, label, context);
|
|
1171
1207
|
if (label === "locatorHint" && unsafeLocator.test(value)) {
|
|
1172
1208
|
context.addIssue({
|
|
@@ -1183,12 +1219,12 @@ var correctionItemBase = {
|
|
|
1183
1219
|
requestedLabel: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_REQUESTED_LABEL_MAX_BYTES, "requestedLabel").optional(),
|
|
1184
1220
|
requestedSection: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_REQUESTED_SECTION_MAX_BYTES, "requestedSection").optional(),
|
|
1185
1221
|
requestedSubsection: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_REQUESTED_SUBSECTION_MAX_BYTES, "requestedSubsection").optional(),
|
|
1186
|
-
requestedSortOrder:
|
|
1222
|
+
requestedSortOrder: z16.number().int().nonnegative().optional()
|
|
1187
1223
|
};
|
|
1188
|
-
var setupCorrectionItemSchema =
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1224
|
+
var setupCorrectionItemSchema = z16.discriminatedUnion("kind", [
|
|
1225
|
+
z16.object({ kind: z16.literal("text"), ...correctionItemBase }).strict(),
|
|
1226
|
+
z16.object({ kind: z16.literal("link"), ...correctionItemBase }).strict(),
|
|
1227
|
+
z16.object({ kind: z16.literal("image"), ...correctionItemBase }).strict()
|
|
1192
1228
|
]).superRefine((item, context) => {
|
|
1193
1229
|
if (item.requestedSubsection && !item.requestedSection) {
|
|
1194
1230
|
context.addIssue({
|
|
@@ -1198,7 +1234,7 @@ var setupCorrectionItemSchema = z15.discriminatedUnion("kind", [
|
|
|
1198
1234
|
});
|
|
1199
1235
|
}
|
|
1200
1236
|
});
|
|
1201
|
-
var setupCorrectionItemsSchema =
|
|
1237
|
+
var setupCorrectionItemsSchema = z16.array(setupCorrectionItemSchema).max(CONTINUE_SITE_SETUP_MAX_ITEMS).superRefine((items, context) => {
|
|
1202
1238
|
const bytes = utf8Bytes(stableJsonStringify(items));
|
|
1203
1239
|
if (bytes > CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES) {
|
|
1204
1240
|
context.addIssue({
|
|
@@ -1207,7 +1243,7 @@ var setupCorrectionItemsSchema = z15.array(setupCorrectionItemSchema).max(CONTIN
|
|
|
1207
1243
|
});
|
|
1208
1244
|
}
|
|
1209
1245
|
});
|
|
1210
|
-
var siteSetupOwnerEditabilityNoteSchema =
|
|
1246
|
+
var siteSetupOwnerEditabilityNoteSchema = z16.string().max(SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_LENGTH).superRefine((value, context) => {
|
|
1211
1247
|
if (utf8Bytes(value) > SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES) {
|
|
1212
1248
|
context.addIssue({
|
|
1213
1249
|
code: "custom",
|
|
@@ -1232,7 +1268,7 @@ var SITE_SETUP_MODULE_SCOPES = {
|
|
|
1232
1268
|
"analytics:public_key_read"
|
|
1233
1269
|
]
|
|
1234
1270
|
};
|
|
1235
|
-
var siteSetupModulesSchema =
|
|
1271
|
+
var siteSetupModulesSchema = z16.array(z16.enum(["editing", "analytics"])).min(1).max(2).refine((modules) => modules[0] === "editing" && (modules.length === 1 || modules[1] === "analytics"), "Choose Editing with optional Analytics.");
|
|
1236
1272
|
function siteSetupScopes(modules) {
|
|
1237
1273
|
return modules.flatMap((module) => [...SITE_SETUP_MODULE_SCOPES[module]]);
|
|
1238
1274
|
}
|
|
@@ -1240,15 +1276,15 @@ function hasExactSiteSetupScopes(scopes, modules) {
|
|
|
1240
1276
|
const matches = (expected) => scopes.length === expected.length && expected.every((scope) => scopes.includes(scope));
|
|
1241
1277
|
return modules ? matches(siteSetupScopes(modules)) : matches(siteSetupScopes(["editing"])) || matches(siteSetupScopes(["editing", "analytics"]));
|
|
1242
1278
|
}
|
|
1243
|
-
var siteSetupActivityInputSchema =
|
|
1244
|
-
phase:
|
|
1279
|
+
var siteSetupActivityInputSchema = z16.object({
|
|
1280
|
+
phase: z16.enum([
|
|
1245
1281
|
"inspecting",
|
|
1246
1282
|
"integrating",
|
|
1247
1283
|
"deploying",
|
|
1248
1284
|
"verifying",
|
|
1249
1285
|
"repairing"
|
|
1250
1286
|
]),
|
|
1251
|
-
textId:
|
|
1287
|
+
textId: z16.enum([
|
|
1252
1288
|
"inspecting",
|
|
1253
1289
|
"integrating",
|
|
1254
1290
|
"deploying",
|
|
@@ -1257,8 +1293,8 @@ var siteSetupActivityInputSchema = z15.object({
|
|
|
1257
1293
|
])
|
|
1258
1294
|
}).strict().refine((value) => value.phase === value.textId, "Activity text must describe its phase.");
|
|
1259
1295
|
var nextActionFields = {
|
|
1260
|
-
actor:
|
|
1261
|
-
boundary:
|
|
1296
|
+
actor: z16.enum(["agent", "user", "siteplane"]),
|
|
1297
|
+
boundary: z16.enum([
|
|
1262
1298
|
"source",
|
|
1263
1299
|
"environment",
|
|
1264
1300
|
"deployment",
|
|
@@ -1266,33 +1302,33 @@ var nextActionFields = {
|
|
|
1266
1302
|
"authorization",
|
|
1267
1303
|
"review"
|
|
1268
1304
|
]),
|
|
1269
|
-
precondition:
|
|
1270
|
-
instruction:
|
|
1271
|
-
expectedEvidence:
|
|
1305
|
+
precondition: z16.string().min(1).max(1e3),
|
|
1306
|
+
instruction: z16.string().min(1).max(2e3),
|
|
1307
|
+
expectedEvidence: z16.string().min(1).max(1e3)
|
|
1272
1308
|
};
|
|
1273
|
-
var siteSetupNextActionSchema =
|
|
1274
|
-
|
|
1309
|
+
var siteSetupNextActionSchema = z16.discriminatedUnion("kind", [
|
|
1310
|
+
z16.object({
|
|
1275
1311
|
...nextActionFields,
|
|
1276
|
-
kind:
|
|
1277
|
-
command:
|
|
1312
|
+
kind: z16.literal("run_command"),
|
|
1313
|
+
command: z16.string().min(1).max(500)
|
|
1278
1314
|
}).strict(),
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1315
|
+
z16.object({ ...nextActionFields, kind: z16.literal("agent_edit") }).strict(),
|
|
1316
|
+
z16.object({ ...nextActionFields, kind: z16.literal("needs_user_action") }).strict(),
|
|
1317
|
+
z16.object({ ...nextActionFields, kind: z16.literal("wait") }).strict(),
|
|
1318
|
+
z16.object({ ...nextActionFields, kind: z16.literal("done") }).strict()
|
|
1283
1319
|
]);
|
|
1284
|
-
var siteSetupTaskRunSchema =
|
|
1285
|
-
runId:
|
|
1320
|
+
var siteSetupTaskRunSchema = z16.object({
|
|
1321
|
+
runId: z16.string().uuid(),
|
|
1286
1322
|
mode: siteSetupRunModeSchema,
|
|
1287
1323
|
status: siteSetupRunStatusSchema,
|
|
1288
|
-
fieldContractHash:
|
|
1289
|
-
deploymentOrigin:
|
|
1290
|
-
deploymentRevision:
|
|
1291
|
-
publicRuntimeKeyId:
|
|
1292
|
-
reviewVersion:
|
|
1324
|
+
fieldContractHash: z16.string().nullable(),
|
|
1325
|
+
deploymentOrigin: z16.string().url().nullable(),
|
|
1326
|
+
deploymentRevision: z16.string().nullable(),
|
|
1327
|
+
publicRuntimeKeyId: z16.string().uuid().nullable(),
|
|
1328
|
+
reviewVersion: z16.number().int().positive()
|
|
1293
1329
|
}).strict();
|
|
1294
|
-
var siteSetupTaskProgressSchema =
|
|
1295
|
-
progressStage:
|
|
1330
|
+
var siteSetupTaskProgressSchema = z16.object({
|
|
1331
|
+
progressStage: z16.enum([
|
|
1296
1332
|
"waiting_for_connection",
|
|
1297
1333
|
"agent_connected",
|
|
1298
1334
|
"project_context_loaded",
|
|
@@ -1302,73 +1338,70 @@ var siteSetupTaskProgressSchema = z15.object({
|
|
|
1302
1338
|
"action_required",
|
|
1303
1339
|
"completed"
|
|
1304
1340
|
]),
|
|
1305
|
-
lastVerifiedAt:
|
|
1306
|
-
lastActivityAt:
|
|
1307
|
-
activitySource:
|
|
1341
|
+
lastVerifiedAt: z16.string().datetime().nullable(),
|
|
1342
|
+
lastActivityAt: z16.string().datetime(),
|
|
1343
|
+
activitySource: z16.enum(["user", "server", "agent"]),
|
|
1308
1344
|
activityPhase: siteSetupActivityInputSchema.shape.phase.nullable(),
|
|
1309
1345
|
activityTextId: siteSetupActivityInputSchema.shape.textId.nullable()
|
|
1310
1346
|
}).strict();
|
|
1311
|
-
var siteSetupTaskSchema =
|
|
1312
|
-
contractVersion:
|
|
1313
|
-
workflow:
|
|
1314
|
-
goal:
|
|
1347
|
+
var siteSetupTaskSchema = z16.object({
|
|
1348
|
+
contractVersion: z16.literal("siteplane.setup-task.v2"),
|
|
1349
|
+
workflow: z16.enum(["initial_setup", "structure_update"]),
|
|
1350
|
+
goal: z16.string().min(1),
|
|
1315
1351
|
modules: siteSetupModulesSchema,
|
|
1316
|
-
authorizationVersion:
|
|
1317
|
-
authorizedScopes:
|
|
1318
|
-
site:
|
|
1319
|
-
siteId:
|
|
1320
|
-
portalPath:
|
|
1321
|
-
adminOrigin:
|
|
1352
|
+
authorizationVersion: z16.number().int().positive(),
|
|
1353
|
+
authorizedScopes: z16.array(z16.string()).min(2),
|
|
1354
|
+
site: z16.object({
|
|
1355
|
+
siteId: z16.string().uuid(),
|
|
1356
|
+
portalPath: z16.string(),
|
|
1357
|
+
adminOrigin: z16.string().url()
|
|
1322
1358
|
}).strict().nullable(),
|
|
1323
1359
|
run: siteSetupTaskRunSchema.nullable(),
|
|
1324
1360
|
progress: siteSetupTaskProgressSchema.nullable(),
|
|
1325
1361
|
deployment: setupDeploymentRecordSchema.nullable(),
|
|
1326
|
-
revalidationGeneration:
|
|
1327
|
-
assignment:
|
|
1328
|
-
deadline:
|
|
1329
|
-
userInstructions:
|
|
1362
|
+
revalidationGeneration: z16.number().int().positive(),
|
|
1363
|
+
assignment: z16.literal("owned"),
|
|
1364
|
+
deadline: z16.string().datetime().nullable(),
|
|
1365
|
+
userInstructions: z16.object({
|
|
1330
1366
|
text: siteSetupOwnerEditabilityNoteSchema,
|
|
1331
|
-
source:
|
|
1332
|
-
trust:
|
|
1367
|
+
source: z16.literal("user"),
|
|
1368
|
+
trust: z16.literal("untrusted")
|
|
1333
1369
|
}).strict(),
|
|
1334
1370
|
corrections: setupCorrectionItemsSchema,
|
|
1335
|
-
contentSelectionSummary:
|
|
1371
|
+
contentSelectionSummary: z16.object({
|
|
1336
1372
|
text: siteSetupOwnerEditabilityNoteSchema,
|
|
1337
|
-
source:
|
|
1338
|
-
trust:
|
|
1373
|
+
source: z16.literal("agent"),
|
|
1374
|
+
trust: z16.literal("untrusted")
|
|
1339
1375
|
}).strict().nullable(),
|
|
1340
|
-
environmentBindings:
|
|
1341
|
-
name:
|
|
1342
|
-
source:
|
|
1343
|
-
sensitivity:
|
|
1344
|
-
usage:
|
|
1345
|
-
evidence:
|
|
1376
|
+
environmentBindings: z16.array(z16.object({
|
|
1377
|
+
name: z16.string().regex(/^[A-Z][A-Z0-9_]+$/u),
|
|
1378
|
+
source: z16.string().min(1),
|
|
1379
|
+
sensitivity: z16.enum(["public", "secret"]),
|
|
1380
|
+
usage: z16.enum(["build", "server", "build_and_server"]),
|
|
1381
|
+
evidence: z16.string().min(1)
|
|
1346
1382
|
}).strict()),
|
|
1347
1383
|
nextAction: siteSetupNextActionSchema,
|
|
1348
|
-
error:
|
|
1349
|
-
code:
|
|
1384
|
+
error: z16.object({
|
|
1385
|
+
code: z16.string().regex(/^[a-z0-9_.]+$/u).max(160),
|
|
1350
1386
|
boundary: nextActionFields.boundary,
|
|
1351
1387
|
responsibleActor: nextActionFields.actor,
|
|
1352
|
-
retryable:
|
|
1353
|
-
retryAfter:
|
|
1354
|
-
requestId:
|
|
1388
|
+
retryable: z16.boolean(),
|
|
1389
|
+
retryAfter: z16.number().int().nonnegative().nullable(),
|
|
1390
|
+
requestId: z16.string().regex(/^[A-Za-z0-9_-]+$/u).max(128)
|
|
1355
1391
|
}).strict().nullable(),
|
|
1356
|
-
packages:
|
|
1357
|
-
|
|
1358
|
-
|
|
1392
|
+
packages: siteSetupPackagesSchema,
|
|
1393
|
+
communication: z16.object({
|
|
1394
|
+
beforeSourceChanges: z16.string().min(1),
|
|
1395
|
+
updates: z16.array(z16.string().min(1)).min(1),
|
|
1396
|
+
blocker: z16.string().min(1)
|
|
1359
1397
|
}).strict(),
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1398
|
+
discovery: z16.object({
|
|
1399
|
+
inspectPublicRoutes: z16.boolean(),
|
|
1400
|
+
contentKinds: z16.array(z16.enum(["text", "longText", "link", "image"])).min(1),
|
|
1401
|
+
rules: z16.array(z16.string().min(1)).min(1)
|
|
1364
1402
|
}).strict(),
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
contentKinds: z15.array(z15.enum(["text", "longText", "link", "image"])).min(1),
|
|
1368
|
-
rules: z15.array(z15.string().min(1)).min(1)
|
|
1369
|
-
}).strict(),
|
|
1370
|
-
steps: z15.array(z15.object({
|
|
1371
|
-
id: z15.enum([
|
|
1403
|
+
steps: z16.array(z16.object({
|
|
1404
|
+
id: z16.enum([
|
|
1372
1405
|
"inspect_repository",
|
|
1373
1406
|
"install_packages",
|
|
1374
1407
|
"instrument_fields",
|
|
@@ -1376,32 +1409,52 @@ var siteSetupTaskSchema = z15.object({
|
|
|
1376
1409
|
"deploy_production",
|
|
1377
1410
|
"verify_deployment"
|
|
1378
1411
|
]),
|
|
1379
|
-
instruction:
|
|
1412
|
+
instruction: z16.string().min(1)
|
|
1380
1413
|
}).strict()).length(6),
|
|
1381
|
-
completion:
|
|
1382
|
-
verifiedStatus:
|
|
1383
|
-
instruction:
|
|
1414
|
+
completion: z16.object({
|
|
1415
|
+
verifiedStatus: z16.literal("ready_for_review"),
|
|
1416
|
+
instruction: z16.string().min(1)
|
|
1384
1417
|
}).strict()
|
|
1385
|
-
}).strict().refine((task) => hasExactSiteSetupScopes(task.authorizedScopes, task.modules), "Task scopes must exactly match its modules.");
|
|
1386
|
-
var canonicalHashSchema =
|
|
1418
|
+
}).strict().refine((task) => hasExactSiteSetupScopes(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.");
|
|
1419
|
+
var canonicalHashSchema = z16.string().regex(/^sha256:[0-9a-f]{64}$/iu);
|
|
1387
1420
|
var deploymentRevisionSchema = normalizedSafeTextSchema(256, "deploymentRevision");
|
|
1388
|
-
var continueSiteSetupInputSchema =
|
|
1389
|
-
siteId:
|
|
1390
|
-
runId:
|
|
1421
|
+
var continueSiteSetupInputSchema = z16.object({
|
|
1422
|
+
siteId: z16.string().uuid(),
|
|
1423
|
+
runId: z16.string().uuid(),
|
|
1424
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1425
|
+
mutationId: z16.string().uuid(),
|
|
1426
|
+
intent: z16.enum(["continue_review", "correct_completed_review"]),
|
|
1391
1427
|
expectedFieldContractHash: canonicalHashSchema,
|
|
1392
1428
|
expectedDeploymentRevision: deploymentRevisionSchema,
|
|
1393
1429
|
correctionItems: setupCorrectionItemsSchema,
|
|
1394
1430
|
ownerEditabilityNote: siteSetupOwnerEditabilityNoteSchema.optional()
|
|
1395
1431
|
}).strict();
|
|
1396
|
-
var saveSiteSetupOwnerNoteInputSchema =
|
|
1397
|
-
siteId:
|
|
1398
|
-
runId:
|
|
1432
|
+
var saveSiteSetupOwnerNoteInputSchema = z16.object({
|
|
1433
|
+
siteId: z16.string().uuid(),
|
|
1434
|
+
runId: z16.string().uuid(),
|
|
1435
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1399
1436
|
expectedFieldContractHash: canonicalHashSchema,
|
|
1400
1437
|
expectedDeploymentRevision: deploymentRevisionSchema,
|
|
1401
1438
|
ownerEditabilityNote: siteSetupOwnerEditabilityNoteSchema
|
|
1402
1439
|
}).strict();
|
|
1403
|
-
var
|
|
1404
|
-
|
|
1440
|
+
var setupReviewPreferenceSelectionSchema = z16.object({
|
|
1441
|
+
analyticsMode: z16.enum(["disabled", "session_only"]).nullable(),
|
|
1442
|
+
assetTargetType: z16.enum(["repo_static_assets", "siteplane_managed_fallback"]).nullable(),
|
|
1443
|
+
assetTargetId: z16.string().uuid().nullable()
|
|
1444
|
+
}).strict().refine((value) => value.assetTargetType !== null || value.assetTargetId === null, {
|
|
1445
|
+
message: "An asset target requires its delivery type."
|
|
1446
|
+
});
|
|
1447
|
+
var setupReviewPreferencesSchema = setupReviewPreferenceSelectionSchema.safeExtend({
|
|
1448
|
+
managedHostingApproved: z16.boolean()
|
|
1449
|
+
});
|
|
1450
|
+
var saveSetupReviewPreferencesInputSchema = z16.object({
|
|
1451
|
+
siteId: z16.string().uuid(),
|
|
1452
|
+
runId: z16.string().uuid(),
|
|
1453
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1454
|
+
preferences: setupReviewPreferenceSelectionSchema
|
|
1455
|
+
}).strict();
|
|
1456
|
+
var siteSetupContextInputSchema = z16.object({}).strict();
|
|
1457
|
+
var siteSetupApplyInputSchema = z16.object({
|
|
1405
1458
|
fieldContract: siteFieldContractV1Schema,
|
|
1406
1459
|
editorDefinition: editorDefinitionV1Schema,
|
|
1407
1460
|
contentSelectionSummary: siteSetupOwnerEditabilityNoteSchema.refine((text) => text.trim().length > 0, "Describe the selected content, important exclusions and any open gaps.")
|
|
@@ -1468,37 +1521,44 @@ var siteSetupApplyInputSchema = z15.object({
|
|
|
1468
1521
|
}
|
|
1469
1522
|
}
|
|
1470
1523
|
});
|
|
1471
|
-
var siteSetupVerifyInputSchema =
|
|
1472
|
-
deploymentUrl:
|
|
1524
|
+
var siteSetupVerifyInputSchema = z16.object({
|
|
1525
|
+
deploymentUrl: z16.string().url().refine((value) => value.startsWith("https://")),
|
|
1473
1526
|
deploymentRevision: deploymentRevisionSchema,
|
|
1474
|
-
wait:
|
|
1527
|
+
wait: z16.boolean().optional()
|
|
1475
1528
|
}).strict();
|
|
1476
|
-
var siteSetupEvidenceInputSchema =
|
|
1477
|
-
siteId:
|
|
1478
|
-
runId:
|
|
1529
|
+
var siteSetupEvidenceInputSchema = z16.object({
|
|
1530
|
+
siteId: z16.string().uuid(),
|
|
1531
|
+
runId: z16.string().uuid(),
|
|
1479
1532
|
expectedFieldContractHash: canonicalHashSchema,
|
|
1480
|
-
expectedDeploymentOrigin:
|
|
1533
|
+
expectedDeploymentOrigin: z16.string().url().refine((value) => value.startsWith("https://")),
|
|
1481
1534
|
expectedDeploymentRevision: deploymentRevisionSchema,
|
|
1482
|
-
publicRuntimeKeyId:
|
|
1535
|
+
publicRuntimeKeyId: z16.string().uuid(),
|
|
1483
1536
|
bridgeSessionId: normalizedSafeTextSchema(256, "bridgeSessionId"),
|
|
1484
|
-
observations:
|
|
1537
|
+
observations: z16.array(z16.object({
|
|
1485
1538
|
fieldId: fieldIdSchema,
|
|
1486
1539
|
routeKey: siteFieldRouteKeySchema,
|
|
1487
1540
|
renderedPath: renderedPathSchema,
|
|
1488
|
-
targetResolved:
|
|
1489
|
-
previewAck:
|
|
1541
|
+
targetResolved: z16.boolean(),
|
|
1542
|
+
previewAck: z16.boolean()
|
|
1490
1543
|
}).strict().refine((value) => !value.previewAck || value.targetResolved, "Preview ACK requires a resolved target.")).min(1).max(200)
|
|
1491
1544
|
}).strict();
|
|
1492
|
-
var
|
|
1493
|
-
siteId:
|
|
1494
|
-
runId:
|
|
1545
|
+
var completeSetupReviewInputSchema = z16.object({
|
|
1546
|
+
siteId: z16.string().uuid(),
|
|
1547
|
+
runId: z16.string().uuid(),
|
|
1548
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1495
1549
|
expectedFieldContractHash: canonicalHashSchema,
|
|
1496
1550
|
expectedDeploymentRevision: deploymentRevisionSchema,
|
|
1497
1551
|
expectedReadyFingerprint: canonicalHashSchema
|
|
1498
1552
|
}).strict();
|
|
1499
|
-
var
|
|
1500
|
-
siteId:
|
|
1501
|
-
|
|
1553
|
+
var activateSiteSetupInputSchema = z16.object({
|
|
1554
|
+
siteId: z16.string().uuid(),
|
|
1555
|
+
runId: z16.string().uuid(),
|
|
1556
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1557
|
+
expectedSnapshotHash: canonicalHashSchema
|
|
1558
|
+
}).strict();
|
|
1559
|
+
var refreshSiteSetupDeploymentInputSchema = z16.object({
|
|
1560
|
+
siteId: z16.string().uuid(),
|
|
1561
|
+
deploymentUrl: z16.string().url().refine((value) => value.startsWith("https://")),
|
|
1502
1562
|
deploymentRevision: deploymentRevisionSchema
|
|
1503
1563
|
}).strict();
|
|
1504
1564
|
function addSafeByteIssues(value, maxBytes, label, context) {
|
|
@@ -1518,37 +1578,61 @@ function addSafeByteIssues(value, maxBytes, label, context) {
|
|
|
1518
1578
|
function utf8Bytes(value) {
|
|
1519
1579
|
return new TextEncoder().encode(value).byteLength;
|
|
1520
1580
|
}
|
|
1581
|
+
var setupActivationApprovalSchema = z16.object({
|
|
1582
|
+
reviewVersion: z16.number().int().positive(),
|
|
1583
|
+
snapshotHash: canonicalHashSchema,
|
|
1584
|
+
analytics: z16.object({
|
|
1585
|
+
status: z16.enum(["active", "skipped"]),
|
|
1586
|
+
reviewVersion: z16.number().int().positive(),
|
|
1587
|
+
generation: z16.number().int().nonnegative()
|
|
1588
|
+
}).optional()
|
|
1589
|
+
});
|
|
1590
|
+
var activateSetupModulesInputSchema = activateSiteSetupInputSchema.extend({
|
|
1591
|
+
analytics: z16.discriminatedUnion("decision", [
|
|
1592
|
+
z16.object({ decision: z16.literal("pending") }).strict(),
|
|
1593
|
+
z16.object({
|
|
1594
|
+
decision: z16.literal("enable"),
|
|
1595
|
+
expectedInstallationGeneration: z16.number().int().positive(),
|
|
1596
|
+
measurementApproved: z16.literal(true)
|
|
1597
|
+
}).strict(),
|
|
1598
|
+
z16.object({
|
|
1599
|
+
decision: z16.literal("skip"),
|
|
1600
|
+
expectedInstallationGeneration: z16.number().int().nonnegative(),
|
|
1601
|
+
continueWithoutAnalytics: z16.literal(true)
|
|
1602
|
+
}).strict()
|
|
1603
|
+
])
|
|
1604
|
+
}).strict();
|
|
1521
1605
|
|
|
1522
1606
|
// ../shared/dist/bridge-protocol.js
|
|
1523
1607
|
var BRIDGE_PROTOCOL_VERSION = 2;
|
|
1524
|
-
var bridgeRectSchema =
|
|
1525
|
-
x:
|
|
1526
|
-
y:
|
|
1527
|
-
width:
|
|
1528
|
-
height:
|
|
1529
|
-
});
|
|
1530
|
-
var previewTextValueSchema =
|
|
1531
|
-
fieldType:
|
|
1532
|
-
value:
|
|
1533
|
-
});
|
|
1534
|
-
var previewLinkValueSchema =
|
|
1535
|
-
fieldType:
|
|
1536
|
-
value:
|
|
1537
|
-
href:
|
|
1538
|
-
label:
|
|
1608
|
+
var bridgeRectSchema = z17.object({
|
|
1609
|
+
x: z17.number(),
|
|
1610
|
+
y: z17.number(),
|
|
1611
|
+
width: z17.number().nonnegative(),
|
|
1612
|
+
height: z17.number().nonnegative()
|
|
1613
|
+
});
|
|
1614
|
+
var previewTextValueSchema = z17.object({
|
|
1615
|
+
fieldType: z17.enum(["text", "longText"]),
|
|
1616
|
+
value: z17.string()
|
|
1617
|
+
});
|
|
1618
|
+
var previewLinkValueSchema = z17.object({
|
|
1619
|
+
fieldType: z17.literal("link"),
|
|
1620
|
+
value: z17.object({
|
|
1621
|
+
href: z17.string().trim().min(1),
|
|
1622
|
+
label: z17.string().trim().min(1).optional()
|
|
1539
1623
|
})
|
|
1540
1624
|
});
|
|
1541
|
-
var previewImageValueSchema =
|
|
1542
|
-
fieldType:
|
|
1625
|
+
var previewImageValueSchema = z17.object({
|
|
1626
|
+
fieldType: z17.literal("image"),
|
|
1543
1627
|
value: imageValueSchema
|
|
1544
1628
|
});
|
|
1545
|
-
var bridgePreviewValueSchema =
|
|
1629
|
+
var bridgePreviewValueSchema = z17.discriminatedUnion("fieldType", [
|
|
1546
1630
|
previewTextValueSchema,
|
|
1547
1631
|
previewLinkValueSchema,
|
|
1548
1632
|
previewImageValueSchema
|
|
1549
1633
|
]);
|
|
1550
|
-
var fieldSelectionModeSchema =
|
|
1551
|
-
var fieldBridgeMissingContentActionSchema =
|
|
1634
|
+
var fieldSelectionModeSchema = z17.enum(["replace", "range", "toggle"]);
|
|
1635
|
+
var fieldBridgeMissingContentActionSchema = z17.enum([
|
|
1552
1636
|
"add",
|
|
1553
1637
|
"select",
|
|
1554
1638
|
"remove"
|
|
@@ -1565,79 +1649,81 @@ var FIELD_BRIDGE_MESSAGE_TYPES = [
|
|
|
1565
1649
|
"siteplane:field-bridge:set-visual-control-state",
|
|
1566
1650
|
"siteplane:field-bridge:missing-content",
|
|
1567
1651
|
"siteplane:field-bridge:preview-scrolled",
|
|
1652
|
+
"siteplane:field-bridge:analytics-probe",
|
|
1653
|
+
"siteplane:field-bridge:analytics-probe-result",
|
|
1568
1654
|
"siteplane:field-bridge:error"
|
|
1569
1655
|
];
|
|
1570
|
-
var canonicalFieldContractHashSchema =
|
|
1571
|
-
var bridgeSectionSchema =
|
|
1572
|
-
var realRenderedPathSchema =
|
|
1573
|
-
var fieldBridgeIdentitySchema =
|
|
1574
|
-
publicRuntimeKeyId:
|
|
1656
|
+
var canonicalFieldContractHashSchema = z17.string().regex(/^sha256:[0-9a-f]{64}$/u);
|
|
1657
|
+
var bridgeSectionSchema = z17.string().trim().min(1).max(256);
|
|
1658
|
+
var realRenderedPathSchema = z17.string().trim().refine((value) => value.startsWith("/") && value !== "$global" && !value.includes("?") && !value.includes("#"), "A field bridge rendered path must be a real canonical path.");
|
|
1659
|
+
var fieldBridgeIdentitySchema = z17.object({
|
|
1660
|
+
publicRuntimeKeyId: z17.string().uuid(),
|
|
1575
1661
|
fieldContractHash: canonicalFieldContractHashSchema,
|
|
1576
|
-
deploymentRevision:
|
|
1662
|
+
deploymentRevision: z17.string().trim().min(1).max(256)
|
|
1577
1663
|
}).strict();
|
|
1578
|
-
var fieldBridgeBaseSchema =
|
|
1579
|
-
version:
|
|
1580
|
-
type:
|
|
1581
|
-
siteId:
|
|
1582
|
-
sessionId:
|
|
1583
|
-
publicRuntimeKeyId:
|
|
1664
|
+
var fieldBridgeBaseSchema = z17.object({
|
|
1665
|
+
version: z17.literal(BRIDGE_PROTOCOL_VERSION),
|
|
1666
|
+
type: z17.enum(FIELD_BRIDGE_MESSAGE_TYPES),
|
|
1667
|
+
siteId: z17.string().uuid(),
|
|
1668
|
+
sessionId: z17.string().trim().min(1),
|
|
1669
|
+
publicRuntimeKeyId: z17.string().uuid(),
|
|
1584
1670
|
fieldContractHash: canonicalFieldContractHashSchema,
|
|
1585
|
-
deploymentRevision:
|
|
1586
|
-
requestId:
|
|
1587
|
-
sentAt:
|
|
1671
|
+
deploymentRevision: z17.string().trim().min(1).max(256),
|
|
1672
|
+
requestId: z17.string().trim().min(1),
|
|
1673
|
+
sentAt: z17.string().datetime()
|
|
1588
1674
|
}).strict();
|
|
1589
|
-
var fieldBridgeFieldSchema =
|
|
1675
|
+
var fieldBridgeFieldSchema = z17.object({
|
|
1590
1676
|
fieldId: fieldIdSchema,
|
|
1591
1677
|
fieldType: fieldTypeSchema,
|
|
1592
1678
|
routeKey: siteFieldRouteKeySchema,
|
|
1593
1679
|
renderedPath: realRenderedPathSchema,
|
|
1594
|
-
sourcePath:
|
|
1680
|
+
sourcePath: z17.string().trim().min(1).optional(),
|
|
1595
1681
|
editTarget: fieldIdSchema,
|
|
1596
1682
|
rect: bridgeRectSchema,
|
|
1597
|
-
targetResolved:
|
|
1683
|
+
targetResolved: z17.literal(true),
|
|
1598
1684
|
currentValue: bridgePreviewValueSchema.optional()
|
|
1599
1685
|
}).strict();
|
|
1600
1686
|
var fieldBridgeInitMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1601
|
-
type:
|
|
1602
|
-
payload:
|
|
1603
|
-
adminOrigin:
|
|
1604
|
-
customerOrigin:
|
|
1687
|
+
type: z17.literal("siteplane:field-bridge:init"),
|
|
1688
|
+
payload: z17.object({
|
|
1689
|
+
adminOrigin: z17.string().url(),
|
|
1690
|
+
customerOrigin: z17.string().url(),
|
|
1605
1691
|
renderedPath: realRenderedPathSchema
|
|
1606
1692
|
}).strict()
|
|
1607
1693
|
});
|
|
1608
1694
|
var fieldBridgeReadyMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1609
|
-
type:
|
|
1610
|
-
payload:
|
|
1695
|
+
type: z17.literal("siteplane:field-bridge:ready"),
|
|
1696
|
+
payload: z17.object({
|
|
1611
1697
|
renderedPath: realRenderedPathSchema,
|
|
1612
|
-
fieldCount:
|
|
1613
|
-
capabilities:
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
])
|
|
1698
|
+
fieldCount: z17.number().int().nonnegative(),
|
|
1699
|
+
capabilities: z17.tuple([
|
|
1700
|
+
z17.literal("field_selection"),
|
|
1701
|
+
z17.literal("preview_values"),
|
|
1702
|
+
z17.literal("field_evidence"),
|
|
1703
|
+
z17.literal("visual_field_control")
|
|
1704
|
+
]).rest(z17.literal("analytics_preview_readiness")).refine((capabilities) => capabilities.length <= 5)
|
|
1619
1705
|
}).strict()
|
|
1620
1706
|
});
|
|
1621
1707
|
var fieldBridgeFieldsMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1622
|
-
type:
|
|
1623
|
-
payload:
|
|
1708
|
+
type: z17.literal("siteplane:field-bridge:fields"),
|
|
1709
|
+
payload: z17.object({
|
|
1624
1710
|
renderedPath: realRenderedPathSchema,
|
|
1625
|
-
fields:
|
|
1711
|
+
fields: z17.array(fieldBridgeFieldSchema)
|
|
1626
1712
|
}).strict()
|
|
1627
1713
|
});
|
|
1628
1714
|
var fieldBridgeSelectFieldMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1629
|
-
type:
|
|
1630
|
-
payload:
|
|
1715
|
+
type: z17.literal("siteplane:field-bridge:select-field"),
|
|
1716
|
+
payload: z17.object({
|
|
1631
1717
|
fieldId: fieldIdSchema,
|
|
1632
1718
|
selectionMode: fieldSelectionModeSchema
|
|
1633
1719
|
}).strict()
|
|
1634
1720
|
});
|
|
1635
1721
|
var fieldBridgeSetSelectedFieldMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1636
|
-
type:
|
|
1637
|
-
payload:
|
|
1638
|
-
fieldIds:
|
|
1722
|
+
type: z17.literal("siteplane:field-bridge:set-selected-field"),
|
|
1723
|
+
payload: z17.object({
|
|
1724
|
+
fieldIds: z17.array(fieldIdSchema).max(200),
|
|
1639
1725
|
primaryFieldId: fieldIdSchema.nullable(),
|
|
1640
|
-
scrollIntoView:
|
|
1726
|
+
scrollIntoView: z17.boolean().optional()
|
|
1641
1727
|
}).strict().superRefine((value, context) => {
|
|
1642
1728
|
if (value.fieldIds.length > 0 && value.primaryFieldId === null) {
|
|
1643
1729
|
context.addIssue({
|
|
@@ -1656,58 +1742,76 @@ var fieldBridgeSetSelectedFieldMessageSchema = fieldBridgeBaseSchema.extend({
|
|
|
1656
1742
|
})
|
|
1657
1743
|
});
|
|
1658
1744
|
var fieldBridgeApplyPreviewValuesMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1659
|
-
type:
|
|
1660
|
-
payload:
|
|
1745
|
+
type: z17.literal("siteplane:field-bridge:apply-preview-values"),
|
|
1746
|
+
payload: z17.object({ values: z17.record(fieldIdSchema, bridgePreviewValueSchema) }).strict()
|
|
1661
1747
|
});
|
|
1662
1748
|
var fieldBridgeTestPreviewValuesMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1663
|
-
type:
|
|
1664
|
-
payload:
|
|
1749
|
+
type: z17.literal("siteplane:field-bridge:test-preview-values"),
|
|
1750
|
+
payload: z17.object({ fieldIds: z17.array(fieldIdSchema).min(1).max(200) }).strict()
|
|
1665
1751
|
});
|
|
1666
1752
|
var fieldBridgePreviewAckMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1667
|
-
type:
|
|
1668
|
-
payload:
|
|
1669
|
-
ackRequestId:
|
|
1670
|
-
kind:
|
|
1753
|
+
type: z17.literal("siteplane:field-bridge:preview-ack"),
|
|
1754
|
+
payload: z17.object({
|
|
1755
|
+
ackRequestId: z17.string().trim().min(1),
|
|
1756
|
+
kind: z17.enum(["apply", "test"]),
|
|
1671
1757
|
renderedPath: realRenderedPathSchema,
|
|
1672
|
-
fieldIds:
|
|
1758
|
+
fieldIds: z17.array(fieldIdSchema).max(200)
|
|
1673
1759
|
}).strict()
|
|
1674
1760
|
});
|
|
1675
1761
|
var fieldBridgeSetVisualControlStateMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1676
|
-
type:
|
|
1677
|
-
payload:
|
|
1678
|
-
enabled:
|
|
1679
|
-
fieldProximityEnabled:
|
|
1680
|
-
pendingKeys:
|
|
1681
|
-
activeFieldIds:
|
|
1682
|
-
fieldSections:
|
|
1683
|
-
selectedPending:
|
|
1684
|
-
key:
|
|
1685
|
-
locatorHint:
|
|
1762
|
+
type: z17.literal("siteplane:field-bridge:set-visual-control-state"),
|
|
1763
|
+
payload: z17.object({
|
|
1764
|
+
enabled: z17.boolean(),
|
|
1765
|
+
fieldProximityEnabled: z17.boolean(),
|
|
1766
|
+
pendingKeys: z17.array(z17.string().trim().min(1).max(2048)).max(50),
|
|
1767
|
+
activeFieldIds: z17.array(fieldIdSchema),
|
|
1768
|
+
fieldSections: z17.record(fieldIdSchema, bridgeSectionSchema),
|
|
1769
|
+
selectedPending: z17.array(z17.object({
|
|
1770
|
+
key: z17.string().trim().min(1).max(2048),
|
|
1771
|
+
locatorHint: z17.string().trim().min(1).max(2048)
|
|
1686
1772
|
}).strict()).max(50),
|
|
1687
|
-
scrollPendingIntoView:
|
|
1773
|
+
scrollPendingIntoView: z17.boolean().optional()
|
|
1688
1774
|
}).strict()
|
|
1689
1775
|
});
|
|
1690
1776
|
var fieldBridgeMissingContentMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1691
|
-
type:
|
|
1692
|
-
payload:
|
|
1777
|
+
type: z17.literal("siteplane:field-bridge:missing-content"),
|
|
1778
|
+
payload: z17.object({
|
|
1693
1779
|
action: fieldBridgeMissingContentActionSchema,
|
|
1694
1780
|
item: setupCorrectionItemSchema,
|
|
1695
1781
|
suggestedSection: bridgeSectionSchema.optional()
|
|
1696
1782
|
}).strict()
|
|
1697
1783
|
});
|
|
1698
1784
|
var fieldBridgePreviewScrolledMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1699
|
-
type:
|
|
1700
|
-
payload:
|
|
1785
|
+
type: z17.literal("siteplane:field-bridge:preview-scrolled"),
|
|
1786
|
+
payload: z17.object({ renderedPath: realRenderedPathSchema }).strict()
|
|
1787
|
+
});
|
|
1788
|
+
var analyticsPreviewChallengeSchema = z17.object({
|
|
1789
|
+
bridgeSessionId: z17.string().uuid(),
|
|
1790
|
+
challenge: z17.string().min(32).max(512),
|
|
1791
|
+
testRunId: z17.string().trim().min(1).max(160),
|
|
1792
|
+
expiresAt: z17.string().datetime()
|
|
1793
|
+
}).strict();
|
|
1794
|
+
var fieldBridgeAnalyticsProbeSchema = fieldBridgeBaseSchema.extend({
|
|
1795
|
+
type: z17.literal("siteplane:field-bridge:analytics-probe"),
|
|
1796
|
+
requestId: z17.string().min(1).max(256),
|
|
1797
|
+
payload: analyticsPreviewChallengeSchema
|
|
1798
|
+
});
|
|
1799
|
+
var fieldBridgeAnalyticsProbeResultSchema = fieldBridgeBaseSchema.extend({
|
|
1800
|
+
type: z17.literal("siteplane:field-bridge:analytics-probe-result"),
|
|
1801
|
+
payload: z17.object({
|
|
1802
|
+
ackRequestId: z17.string().min(1).max(256),
|
|
1803
|
+
status: z17.enum(["recorded", "failed"])
|
|
1804
|
+
}).strict()
|
|
1701
1805
|
});
|
|
1702
1806
|
var fieldBridgeErrorMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1703
|
-
type:
|
|
1704
|
-
payload:
|
|
1705
|
-
code:
|
|
1706
|
-
message:
|
|
1707
|
-
recoverable:
|
|
1807
|
+
type: z17.literal("siteplane:field-bridge:error"),
|
|
1808
|
+
payload: z17.object({
|
|
1809
|
+
code: z17.string().trim().min(1),
|
|
1810
|
+
message: z17.string().trim().min(1),
|
|
1811
|
+
recoverable: z17.boolean().default(false)
|
|
1708
1812
|
}).strict()
|
|
1709
1813
|
});
|
|
1710
|
-
var fieldBridgeMessageSchema =
|
|
1814
|
+
var fieldBridgeMessageSchema = z17.discriminatedUnion("type", [
|
|
1711
1815
|
fieldBridgeInitMessageSchema,
|
|
1712
1816
|
fieldBridgeReadyMessageSchema,
|
|
1713
1817
|
fieldBridgeFieldsMessageSchema,
|
|
@@ -1719,55 +1823,57 @@ var fieldBridgeMessageSchema = z16.discriminatedUnion("type", [
|
|
|
1719
1823
|
fieldBridgeSetVisualControlStateMessageSchema,
|
|
1720
1824
|
fieldBridgeMissingContentMessageSchema,
|
|
1721
1825
|
fieldBridgePreviewScrolledMessageSchema,
|
|
1722
|
-
fieldBridgeErrorMessageSchema
|
|
1826
|
+
fieldBridgeErrorMessageSchema,
|
|
1827
|
+
fieldBridgeAnalyticsProbeSchema,
|
|
1828
|
+
fieldBridgeAnalyticsProbeResultSchema
|
|
1723
1829
|
]);
|
|
1724
1830
|
|
|
1725
1831
|
// ../shared/dist/commands.js
|
|
1726
|
-
import { z as
|
|
1832
|
+
import { z as z19 } from "zod";
|
|
1727
1833
|
|
|
1728
1834
|
// ../shared/dist/errors.js
|
|
1729
|
-
import { z as
|
|
1835
|
+
import { z as z18 } from "zod";
|
|
1730
1836
|
var UI_ERROR_CATEGORIES = [
|
|
1731
1837
|
"site_member",
|
|
1732
1838
|
"workspace_member",
|
|
1733
1839
|
"internal"
|
|
1734
1840
|
];
|
|
1735
|
-
var uiErrorCategorySchema =
|
|
1736
|
-
var commandErrorPayloadSchema =
|
|
1737
|
-
code:
|
|
1738
|
-
message:
|
|
1841
|
+
var uiErrorCategorySchema = z18.enum(UI_ERROR_CATEGORIES);
|
|
1842
|
+
var commandErrorPayloadSchema = z18.object({
|
|
1843
|
+
code: z18.string().min(1),
|
|
1844
|
+
message: z18.string().min(1),
|
|
1739
1845
|
category: uiErrorCategorySchema,
|
|
1740
|
-
details:
|
|
1846
|
+
details: z18.record(z18.string(), z18.unknown()).optional()
|
|
1741
1847
|
});
|
|
1742
1848
|
|
|
1743
1849
|
// ../shared/dist/commands.js
|
|
1744
|
-
var commandSuccessSchema =
|
|
1745
|
-
ok:
|
|
1746
|
-
data:
|
|
1850
|
+
var commandSuccessSchema = z19.object({
|
|
1851
|
+
ok: z19.literal(true),
|
|
1852
|
+
data: z19.unknown()
|
|
1747
1853
|
});
|
|
1748
|
-
var commandErrorSchema =
|
|
1749
|
-
ok:
|
|
1854
|
+
var commandErrorSchema = z19.object({
|
|
1855
|
+
ok: z19.literal(false),
|
|
1750
1856
|
error: commandErrorPayloadSchema
|
|
1751
1857
|
});
|
|
1752
|
-
var commandResultSchema =
|
|
1858
|
+
var commandResultSchema = z19.discriminatedUnion("ok", [
|
|
1753
1859
|
commandSuccessSchema,
|
|
1754
1860
|
commandErrorSchema
|
|
1755
1861
|
]);
|
|
1756
1862
|
|
|
1757
1863
|
// ../shared/dist/editor-settings.js
|
|
1758
|
-
import { z as
|
|
1759
|
-
var editorColorSchemeSchema =
|
|
1864
|
+
import { z as z20 } from "zod";
|
|
1865
|
+
var editorColorSchemeSchema = z20.enum([
|
|
1760
1866
|
"paper",
|
|
1761
1867
|
"slate",
|
|
1762
1868
|
"siteplane",
|
|
1763
1869
|
"bloom"
|
|
1764
1870
|
]);
|
|
1765
1871
|
var editorColorSchemes = editorColorSchemeSchema.options;
|
|
1766
|
-
var editorColorModeSchema =
|
|
1872
|
+
var editorColorModeSchema = z20.enum(["light", "dark"]);
|
|
1767
1873
|
var editorColorModes = editorColorModeSchema.options;
|
|
1768
1874
|
|
|
1769
1875
|
// ../shared/dist/site-slug.js
|
|
1770
|
-
import { z as
|
|
1876
|
+
import { z as z21 } from "zod";
|
|
1771
1877
|
var SITE_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
1772
1878
|
var RESERVED_SITE_SLUGS = /* @__PURE__ */ new Set([
|
|
1773
1879
|
"account",
|
|
@@ -1784,31 +1890,31 @@ var RESERVED_SITE_SLUGS = /* @__PURE__ */ new Set([
|
|
|
1784
1890
|
"support",
|
|
1785
1891
|
"workspace"
|
|
1786
1892
|
]);
|
|
1787
|
-
var siteSlugSchema =
|
|
1893
|
+
var siteSlugSchema = z21.string().regex(SITE_SLUG_PATTERN, "Invalid site slug").refine((value) => !RESERVED_SITE_SLUGS.has(value), "Reserved site slug");
|
|
1788
1894
|
|
|
1789
1895
|
// ../shared/dist/entitlements.js
|
|
1790
|
-
import { z as
|
|
1791
|
-
var entitlementSnapshotSchema =
|
|
1792
|
-
planKey:
|
|
1793
|
-
sitesLimit:
|
|
1794
|
-
siteMembersPerSiteLimit:
|
|
1795
|
-
customAdminDomainsEnabled:
|
|
1796
|
-
agentMcpEnabled:
|
|
1797
|
-
emailNotificationsEnabled:
|
|
1798
|
-
analyticsEnabled:
|
|
1799
|
-
analyticsSitesLimit:
|
|
1800
|
-
analyticsPortalPerformanceEnabled:
|
|
1801
|
-
analyticsMonthlyReportsEnabled:
|
|
1802
|
-
analyticsAiSummaryEnabled:
|
|
1803
|
-
analyticsRawEventRetentionDays:
|
|
1804
|
-
analyticsMonthlyEventLimit:
|
|
1805
|
-
bookingEnabled:
|
|
1806
|
-
bookingSitesLimit:
|
|
1807
|
-
bookingPortalManagementEnabled:
|
|
1808
|
-
bookingResourcesPerSiteLimit:
|
|
1809
|
-
bookingServicesPerSiteLimit:
|
|
1810
|
-
bookingMonthlyBookingsLimit:
|
|
1811
|
-
bookingRemindersEnabled:
|
|
1896
|
+
import { z as z22 } from "zod";
|
|
1897
|
+
var entitlementSnapshotSchema = z22.object({
|
|
1898
|
+
planKey: z22.string().trim().min(1),
|
|
1899
|
+
sitesLimit: z22.number().int().positive(),
|
|
1900
|
+
siteMembersPerSiteLimit: z22.number().int().positive(),
|
|
1901
|
+
customAdminDomainsEnabled: z22.boolean(),
|
|
1902
|
+
agentMcpEnabled: z22.boolean(),
|
|
1903
|
+
emailNotificationsEnabled: z22.boolean(),
|
|
1904
|
+
analyticsEnabled: z22.boolean(),
|
|
1905
|
+
analyticsSitesLimit: z22.number().int().min(0),
|
|
1906
|
+
analyticsPortalPerformanceEnabled: z22.boolean(),
|
|
1907
|
+
analyticsMonthlyReportsEnabled: z22.boolean(),
|
|
1908
|
+
analyticsAiSummaryEnabled: z22.boolean(),
|
|
1909
|
+
analyticsRawEventRetentionDays: z22.number().int().min(1).max(ANALYTICS_RETENTION_DEFAULTS.maxRawEventRetentionDaysWithoutAdr),
|
|
1910
|
+
analyticsMonthlyEventLimit: z22.number().int().min(0),
|
|
1911
|
+
bookingEnabled: z22.boolean().default(false),
|
|
1912
|
+
bookingSitesLimit: z22.number().int().min(0).default(0),
|
|
1913
|
+
bookingPortalManagementEnabled: z22.boolean().default(false),
|
|
1914
|
+
bookingResourcesPerSiteLimit: z22.number().int().min(0).default(0),
|
|
1915
|
+
bookingServicesPerSiteLimit: z22.number().int().min(0).default(0),
|
|
1916
|
+
bookingMonthlyBookingsLimit: z22.number().int().min(0).default(0),
|
|
1917
|
+
bookingRemindersEnabled: z22.boolean().default(false)
|
|
1812
1918
|
});
|
|
1813
1919
|
var EARLY_ACCESS_PLAN = {
|
|
1814
1920
|
planKey: "early_access_2026",
|
|
@@ -1834,7 +1940,7 @@ var EARLY_ACCESS_PLAN = {
|
|
|
1834
1940
|
};
|
|
1835
1941
|
|
|
1836
1942
|
// ../shared/dist/readiness.js
|
|
1837
|
-
import { z as
|
|
1943
|
+
import { z as z23 } from "zod";
|
|
1838
1944
|
var READINESS_CHECK_KEYS = [
|
|
1839
1945
|
"agent_instructions_installed",
|
|
1840
1946
|
"runtime_package_connected",
|
|
@@ -1849,19 +1955,80 @@ var READINESS_STATUSES = [
|
|
|
1849
1955
|
"failing",
|
|
1850
1956
|
"warning"
|
|
1851
1957
|
];
|
|
1852
|
-
var readinessCheckKeySchema =
|
|
1853
|
-
var readinessStatusSchema =
|
|
1958
|
+
var readinessCheckKeySchema = z23.enum(READINESS_CHECK_KEYS);
|
|
1959
|
+
var readinessStatusSchema = z23.enum(READINESS_STATUSES);
|
|
1854
1960
|
|
|
1855
1961
|
// ../shared/dist/site.js
|
|
1856
|
-
import { z as
|
|
1962
|
+
import { z as z24 } from "zod";
|
|
1857
1963
|
var SITE_STATUSES = [
|
|
1858
1964
|
"setup",
|
|
1859
1965
|
"active",
|
|
1860
1966
|
"disabled",
|
|
1861
1967
|
"archived"
|
|
1862
1968
|
];
|
|
1863
|
-
var siteStatusSchema =
|
|
1864
|
-
var websiteUrlSchema =
|
|
1969
|
+
var siteStatusSchema = z24.enum(SITE_STATUSES);
|
|
1970
|
+
var websiteUrlSchema = z24.string().trim().url().refine((value) => value.startsWith("https://") || value.startsWith("http://"), "Website URL must use http or https");
|
|
1971
|
+
|
|
1972
|
+
// ../shared/dist/setup-assets.js
|
|
1973
|
+
import { z as z25 } from "zod";
|
|
1974
|
+
var configureSetupAssetTargetInputSchema = z25.object({
|
|
1975
|
+
siteId: z25.string().uuid(),
|
|
1976
|
+
runId: z25.string().uuid(),
|
|
1977
|
+
expectedReviewVersion: z25.number().int().positive(),
|
|
1978
|
+
expectedSnapshotHash: z25.string().regex(/^sha256:[0-9a-f]{64}$/u),
|
|
1979
|
+
mutationId: z25.string().uuid(),
|
|
1980
|
+
expectedApprovalId: z25.string().uuid().nullable(),
|
|
1981
|
+
targetId: z25.string().uuid().nullable(),
|
|
1982
|
+
targetType: z25.enum(["repo_static_assets", "siteplane_managed_fallback"]),
|
|
1983
|
+
approveManagedHosting: z25.boolean()
|
|
1984
|
+
}).strict().refine((value) => value.targetType === "siteplane_managed_fallback" || !value.approveManagedHosting);
|
|
1985
|
+
var setupAssetTargetApprovalSchema = z25.object({
|
|
1986
|
+
id: z25.string().uuid(),
|
|
1987
|
+
runId: z25.string().uuid(),
|
|
1988
|
+
reviewVersion: z25.number().int().positive(),
|
|
1989
|
+
snapshotHash: z25.string().regex(/^sha256:[0-9a-f]{64}$/u),
|
|
1990
|
+
targetId: z25.string().uuid(),
|
|
1991
|
+
targetType: z25.enum(["repo_static_assets", "siteplane_managed_fallback"]),
|
|
1992
|
+
targetRevision: z25.number().int().positive(),
|
|
1993
|
+
deploymentOrigin: z25.string().url(),
|
|
1994
|
+
gitConnectionId: z25.string().uuid().nullable(),
|
|
1995
|
+
gitRevision: z25.number().int().positive().nullable(),
|
|
1996
|
+
managedHostingApproved: z25.boolean(),
|
|
1997
|
+
actorUserId: z25.string().uuid(),
|
|
1998
|
+
approvedAt: z25.string().datetime({ offset: true })
|
|
1999
|
+
}).strict();
|
|
2000
|
+
var setupAssetReadinessSchema = z25.union([
|
|
2001
|
+
z25.object({
|
|
2002
|
+
status: z25.enum([
|
|
2003
|
+
"not_required",
|
|
2004
|
+
"needs_choice",
|
|
2005
|
+
"stale_setup_review",
|
|
2006
|
+
"permission_denied"
|
|
2007
|
+
])
|
|
2008
|
+
}).strict(),
|
|
2009
|
+
z25.object({
|
|
2010
|
+
status: z25.literal("stale_approval"),
|
|
2011
|
+
approval: setupAssetTargetApprovalSchema.optional()
|
|
2012
|
+
}).strict(),
|
|
2013
|
+
z25.object({
|
|
2014
|
+
status: z25.literal("not_verified"),
|
|
2015
|
+
approval: setupAssetTargetApprovalSchema,
|
|
2016
|
+
jobId: z25.string().uuid().optional(),
|
|
2017
|
+
checkedAt: z25.string().datetime({ offset: true }).nullable().optional()
|
|
2018
|
+
}).strict(),
|
|
2019
|
+
z25.object({
|
|
2020
|
+
status: z25.enum(["ready", "checking", "retrying"]),
|
|
2021
|
+
approval: setupAssetTargetApprovalSchema,
|
|
2022
|
+
jobId: z25.string().uuid(),
|
|
2023
|
+
checkedAt: z25.string().datetime({ offset: true }).nullable()
|
|
2024
|
+
}).strict().refine((value) => value.status !== "ready" || value.checkedAt !== null)
|
|
2025
|
+
]);
|
|
2026
|
+
var checkSetupAssetTargetInputSchema = z25.object({
|
|
2027
|
+
siteId: z25.string().uuid(),
|
|
2028
|
+
runId: z25.string().uuid(),
|
|
2029
|
+
approvalId: z25.string().uuid(),
|
|
2030
|
+
intent: z25.enum(["start", "poll"])
|
|
2031
|
+
}).strict();
|
|
1865
2032
|
|
|
1866
2033
|
// ../cli/dist/analytics/static-scan.js
|
|
1867
2034
|
import ts from "typescript";
|
|
@@ -2038,6 +2205,9 @@ Analytics contract hash: ${ANALYTICS_CONTRACT_HASH}
|
|
|
2038
2205
|
- Use stable data-siteplane-target-id values that do not depend on visible copy.
|
|
2039
2206
|
- Use public site keys only through environment references.
|
|
2040
2207
|
- Do not write secret analytics keys, setup tokens or project CLI tokens into source files.
|
|
2208
|
+
- Mount the SDK once in the existing client lifecycle. Wire installDataAttributeTracking and createNextAppRouterNavigationAdapter to analytics.track/getRouteViewId/setPageContext, feed initial and subsequent Next.js pathname changes, and refresh attribute targets after navigation. Dispose attribute tracking and the SDK on unmount.
|
|
2209
|
+
- Inspect existing consent management. Pass consentAdapter with getConsent and subscribe to initSiteplaneAnalytics for an existing CMP; return unknown while unresolved, disabled for denial and a permitted mode only for its actual visitor grant. Subscribe returns cleanup. Do not mirror CMP snapshots with setConsent or replace stored opt-outs.
|
|
2210
|
+
- Omit consentAdapter only after confirming no existing CMP. An unrecognized CMP blocks Analytics with a concrete repair diagnostic; do not invent a grant or a no-op adapter to pass a check.
|
|
2041
2211
|
- Suppress editor-preview traffic from live analytics.
|
|
2042
2212
|
- Run npx siteplane analytics check, npx siteplane analytics sync and npx siteplane analytics test after setup.
|
|
2043
2213
|
`;
|
|
@@ -2051,19 +2221,70 @@ ${analyticsRulesTemplate}`;
|
|
|
2051
2221
|
// ../cli/dist/commands/analytics/import.js
|
|
2052
2222
|
import { createHash } from "crypto";
|
|
2053
2223
|
|
|
2224
|
+
// ../cli/dist/commands/analytics/sync.js
|
|
2225
|
+
function createAnalyticsCliRequestHeaders(config) {
|
|
2226
|
+
const headers = {
|
|
2227
|
+
authorization: `Bearer ${config.accessToken}`,
|
|
2228
|
+
"content-type": "application/json"
|
|
2229
|
+
};
|
|
2230
|
+
const bypassSecret = config.vercelAutomationBypassSecret?.trim();
|
|
2231
|
+
if (bypassSecret) {
|
|
2232
|
+
headers["x-vercel-protection-bypass"] = bypassSecret;
|
|
2233
|
+
}
|
|
2234
|
+
return headers;
|
|
2235
|
+
}
|
|
2236
|
+
|
|
2054
2237
|
// ../cli/dist/commands/analytics/public-key.js
|
|
2055
|
-
import { z as
|
|
2056
|
-
var responseSchema =
|
|
2057
|
-
ok:
|
|
2058
|
-
data:
|
|
2059
|
-
rawPublicKey:
|
|
2238
|
+
import { z as z26 } from "zod";
|
|
2239
|
+
var responseSchema = z26.object({
|
|
2240
|
+
ok: z26.literal(true),
|
|
2241
|
+
data: z26.object({
|
|
2242
|
+
rawPublicKey: z26.string().regex(/^pk_siteplane_[A-Za-z0-9_-]{16}_[A-Za-z0-9_-]{43}$/)
|
|
2060
2243
|
})
|
|
2061
2244
|
});
|
|
2062
|
-
var errorResponseSchema =
|
|
2063
|
-
error:
|
|
2064
|
-
code:
|
|
2245
|
+
var errorResponseSchema = z26.object({
|
|
2246
|
+
error: z26.object({
|
|
2247
|
+
code: z26.string().regex(/^[a-z][a-z0-9_.-]+$/u)
|
|
2065
2248
|
})
|
|
2066
2249
|
});
|
|
2250
|
+
async function analyticsPublicKeyCommand(input) {
|
|
2251
|
+
const fetcher = input.fetchImpl ?? fetch;
|
|
2252
|
+
const response = await fetcher(`${input.config.apiBaseUrl.replace(/\/$/u, "")}/api/cli/analytics/public-key`, {
|
|
2253
|
+
method: "POST",
|
|
2254
|
+
redirect: "error",
|
|
2255
|
+
signal: AbortSignal.timeout(2e4),
|
|
2256
|
+
headers: createAnalyticsCliRequestHeaders(input.config),
|
|
2257
|
+
body: JSON.stringify({ siteId: input.config.siteId })
|
|
2258
|
+
});
|
|
2259
|
+
const payload = await response.json().catch(() => null);
|
|
2260
|
+
const parsed = responseSchema.safeParse(payload);
|
|
2261
|
+
if (!response.ok || !parsed.success) {
|
|
2262
|
+
const error = errorResponseSchema.safeParse(payload);
|
|
2263
|
+
throw new Error(`${error.success ? error.data.error.code : "analytics_public_key.invalid_response"}: Unable to read the active Analytics public key.`);
|
|
2264
|
+
}
|
|
2265
|
+
return parsed.data.data.rawPublicKey;
|
|
2266
|
+
}
|
|
2267
|
+
|
|
2268
|
+
// ../cli/dist/commands/analytics/prepare.js
|
|
2269
|
+
import { z as z27 } from "zod";
|
|
2270
|
+
var resultSchema = z27.object({
|
|
2271
|
+
ok: z27.literal(true),
|
|
2272
|
+
data: z27.object({
|
|
2273
|
+
rawPublicKey: z27.string().regex(/^pk_siteplane_[A-Za-z0-9_-]{16}_[A-Za-z0-9_-]{43}$/u),
|
|
2274
|
+
generation: z27.number().int().positive(),
|
|
2275
|
+
status: z27.enum([
|
|
2276
|
+
"setup_started",
|
|
2277
|
+
"test_mode",
|
|
2278
|
+
"active",
|
|
2279
|
+
"paused",
|
|
2280
|
+
"error",
|
|
2281
|
+
"deleting"
|
|
2282
|
+
])
|
|
2283
|
+
}).strict()
|
|
2284
|
+
}).strict();
|
|
2285
|
+
var errorSchema = z27.object({
|
|
2286
|
+
error: z27.object({ code: z27.string().regex(/^[a-z][a-z0-9_.-]+$/u) })
|
|
2287
|
+
});
|
|
2067
2288
|
|
|
2068
2289
|
// ../cli/dist/commands/analytics/test.js
|
|
2069
2290
|
import { randomUUID } from "crypto";
|
|
@@ -2257,22 +2478,19 @@ function requireContentExportScope(scopes) {
|
|
|
2257
2478
|
import { access, chmod, open, readFile as readFile5, rename, rm } from "fs/promises";
|
|
2258
2479
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
2259
2480
|
import { join as join3 } from "path";
|
|
2260
|
-
import { z as
|
|
2261
|
-
var siteplaneProjectConfigSchema =
|
|
2262
|
-
version:
|
|
2263
|
-
apiBaseUrl:
|
|
2264
|
-
siteId:
|
|
2265
|
-
publicSiteKeyId:
|
|
2266
|
-
publicSiteKey:
|
|
2267
|
-
runId:
|
|
2268
|
-
appDirectory:
|
|
2269
|
-
taskContractVersion:
|
|
2270
|
-
adminProtocolVersion:
|
|
2271
|
-
packages:
|
|
2272
|
-
|
|
2273
|
-
runtimeNext: z25.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u)
|
|
2274
|
-
}).strict(),
|
|
2275
|
-
fieldContractHash: z25.string().regex(/^sha256:[0-9a-f]{64}$/iu).optional()
|
|
2481
|
+
import { z as z28 } from "zod";
|
|
2482
|
+
var siteplaneProjectConfigSchema = z28.object({
|
|
2483
|
+
version: z28.literal(2),
|
|
2484
|
+
apiBaseUrl: z28.string().url(),
|
|
2485
|
+
siteId: z28.string().uuid(),
|
|
2486
|
+
publicSiteKeyId: z28.string().uuid(),
|
|
2487
|
+
publicSiteKey: z28.string().trim().min(1),
|
|
2488
|
+
runId: z28.string().uuid(),
|
|
2489
|
+
appDirectory: z28.string().min(1),
|
|
2490
|
+
taskContractVersion: z28.literal("siteplane.setup-task.v2"),
|
|
2491
|
+
adminProtocolVersion: z28.literal(2),
|
|
2492
|
+
packages: siteSetupPackagesSchema,
|
|
2493
|
+
fieldContractHash: z28.string().regex(/^sha256:[0-9a-f]{64}$/iu).optional()
|
|
2276
2494
|
}).strict();
|
|
2277
2495
|
async function readProjectPackageJson(projectDir) {
|
|
2278
2496
|
return JSON.parse(await readFile5(join3(projectDir, "package.json"), "utf8"));
|
|
@@ -2332,13 +2550,13 @@ import { randomUUID as randomUUID3 } from "crypto";
|
|
|
2332
2550
|
import { chmod as chmod2, lstat, mkdir as mkdir5, open as open2, readFile as readFile6, rename as rename2, rm as rm2 } from "fs/promises";
|
|
2333
2551
|
import { dirname as dirname5, join as join4, relative } from "path";
|
|
2334
2552
|
import { promisify } from "util";
|
|
2335
|
-
import { z as
|
|
2336
|
-
var siteplaneCredentialsSchema =
|
|
2337
|
-
accessToken:
|
|
2338
|
-
siteRevalidationSecret:
|
|
2339
|
-
adminSession:
|
|
2340
|
-
secret:
|
|
2341
|
-
generation:
|
|
2553
|
+
import { z as z29 } from "zod";
|
|
2554
|
+
var siteplaneCredentialsSchema = z29.object({
|
|
2555
|
+
accessToken: z29.string().trim().min(1),
|
|
2556
|
+
siteRevalidationSecret: z29.string().trim().min(1),
|
|
2557
|
+
adminSession: z29.object({
|
|
2558
|
+
secret: z29.string().regex(/^[A-Za-z0-9_-]{43}$/u),
|
|
2559
|
+
generation: z29.string().uuid()
|
|
2342
2560
|
}).strict().optional()
|
|
2343
2561
|
}).strict();
|
|
2344
2562
|
async function assertLocalCredentialsPathSafe(projectDir, options = {}) {
|
|
@@ -2421,7 +2639,7 @@ async function gitPathMatches(projectDir, path, command) {
|
|
|
2421
2639
|
// ../cli/dist/commands/init.js
|
|
2422
2640
|
import { access as access3 } from "fs/promises";
|
|
2423
2641
|
import { join as join7, relative as relative3 } from "path";
|
|
2424
|
-
import { z as
|
|
2642
|
+
import { z as z32 } from "zod";
|
|
2425
2643
|
|
|
2426
2644
|
// ../cli/dist/commands/setup-preflight.js
|
|
2427
2645
|
import { createHash as createHash2 } from "crypto";
|
|
@@ -2433,11 +2651,11 @@ import { parse as parseYaml } from "yaml";
|
|
|
2433
2651
|
import { createRequire } from "module";
|
|
2434
2652
|
import { readFile as readFile7 } from "fs/promises";
|
|
2435
2653
|
import { join as join5 } from "path";
|
|
2436
|
-
import { z as
|
|
2437
|
-
var packageSchema =
|
|
2438
|
-
name:
|
|
2439
|
-
version:
|
|
2440
|
-
peerDependencies:
|
|
2654
|
+
import { z as z30 } from "zod";
|
|
2655
|
+
var packageSchema = z30.object({
|
|
2656
|
+
name: z30.string().optional(),
|
|
2657
|
+
version: z30.string(),
|
|
2658
|
+
peerDependencies: z30.record(z30.string(), z30.string()).optional()
|
|
2441
2659
|
});
|
|
2442
2660
|
async function readInstalledPackage(projectDir, name2) {
|
|
2443
2661
|
const require2 = createRequire(join5(projectDir, "package.json"));
|
|
@@ -2455,7 +2673,7 @@ async function readInstalledPackage(projectDir, name2) {
|
|
|
2455
2673
|
// ../cli/dist/commands/setup-preflight.js
|
|
2456
2674
|
import { access as access2, readFile as readFile8, realpath, readdir, readlink } from "fs/promises";
|
|
2457
2675
|
import { dirname as dirname6, join as join6, relative as relative2, resolve, sep } from "path";
|
|
2458
|
-
import { z as
|
|
2676
|
+
import { z as z31 } from "zod";
|
|
2459
2677
|
|
|
2460
2678
|
// ../cli/dist/commands/setup-process.js
|
|
2461
2679
|
import { spawn } from "child_process";
|
|
@@ -2556,29 +2774,29 @@ async function setupVercelApi(cwd, endpoint, body, method, options) {
|
|
|
2556
2774
|
}
|
|
2557
2775
|
|
|
2558
2776
|
// ../cli/dist/commands/setup-preflight.js
|
|
2559
|
-
var manifestSchema =
|
|
2560
|
-
packageManager:
|
|
2561
|
-
engines:
|
|
2562
|
-
dependencies:
|
|
2563
|
-
devDependencies:
|
|
2564
|
-
scripts:
|
|
2565
|
-
workspaces:
|
|
2566
|
-
});
|
|
2567
|
-
var vercelProjectSchema =
|
|
2568
|
-
id:
|
|
2569
|
-
accountId:
|
|
2570
|
-
name:
|
|
2571
|
-
nodeVersion:
|
|
2572
|
-
rootDirectory:
|
|
2573
|
-
framework:
|
|
2574
|
-
installCommand:
|
|
2575
|
-
buildCommand:
|
|
2576
|
-
link:
|
|
2577
|
-
type:
|
|
2578
|
-
repo:
|
|
2579
|
-
repoId:
|
|
2580
|
-
org:
|
|
2581
|
-
productionBranch:
|
|
2777
|
+
var manifestSchema = z31.object({
|
|
2778
|
+
packageManager: z31.string().optional(),
|
|
2779
|
+
engines: z31.object({ node: z31.string().optional() }).optional(),
|
|
2780
|
+
dependencies: z31.record(z31.string(), z31.string()).optional(),
|
|
2781
|
+
devDependencies: z31.record(z31.string(), z31.string()).optional(),
|
|
2782
|
+
scripts: z31.record(z31.string(), z31.string()).optional(),
|
|
2783
|
+
workspaces: z31.unknown().optional()
|
|
2784
|
+
});
|
|
2785
|
+
var vercelProjectSchema = z31.object({
|
|
2786
|
+
id: z31.string(),
|
|
2787
|
+
accountId: z31.string(),
|
|
2788
|
+
name: z31.string(),
|
|
2789
|
+
nodeVersion: z31.string().nullable().optional(),
|
|
2790
|
+
rootDirectory: z31.string().nullable().optional(),
|
|
2791
|
+
framework: z31.string().nullable().optional(),
|
|
2792
|
+
installCommand: z31.string().nullable().optional(),
|
|
2793
|
+
buildCommand: z31.string().nullable().optional(),
|
|
2794
|
+
link: z31.object({
|
|
2795
|
+
type: z31.string(),
|
|
2796
|
+
repo: z31.string().optional(),
|
|
2797
|
+
repoId: z31.union([z31.string(), z31.number()]).optional(),
|
|
2798
|
+
org: z31.string().optional(),
|
|
2799
|
+
productionBranch: z31.string().optional()
|
|
2582
2800
|
}).nullable().optional()
|
|
2583
2801
|
});
|
|
2584
2802
|
var exists = async (path) => access2(path).then(() => true, () => false);
|
|
@@ -2635,9 +2853,9 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
2635
2853
|
const rootManifest = manifestSchema.parse(JSON.parse(await readFile8(join6(lockfileRoot, "package.json"), "utf8")));
|
|
2636
2854
|
if (lockfileRoot !== projectDirectory) {
|
|
2637
2855
|
const workspaceFile = join6(lockfileRoot, "pnpm-workspace.yaml");
|
|
2638
|
-
const workspace = lockName === "pnpm-lock.yaml" && await exists(workspaceFile) ?
|
|
2639
|
-
|
|
2640
|
-
|
|
2856
|
+
const workspace = lockName === "pnpm-lock.yaml" && await exists(workspaceFile) ? z31.object({ packages: z31.array(z31.string()) }).parse(parseYaml(await readFile8(workspaceFile, "utf8"))).packages : z31.union([
|
|
2857
|
+
z31.array(z31.string()),
|
|
2858
|
+
z31.object({ packages: z31.array(z31.string()) }).transform((value) => value.packages)
|
|
2641
2859
|
]).parse(rootManifest.workspaces);
|
|
2642
2860
|
const selected = relative2(lockfileRoot, projectDirectory).split(sep).join("/");
|
|
2643
2861
|
if (!workspace.some((pattern) => !pattern.startsWith("!") && minimatch(selected, pattern)) || workspace.some((pattern) => pattern.startsWith("!") && minimatch(selected, pattern.slice(1))))
|
|
@@ -2651,11 +2869,11 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
2651
2869
|
break;
|
|
2652
2870
|
}
|
|
2653
2871
|
const lockText = await readFile8(join6(lockfileRoot, lockName), "utf8");
|
|
2654
|
-
const npmLock = lockName === "package-lock.json" ?
|
|
2655
|
-
lockfileVersion:
|
|
2656
|
-
packages:
|
|
2657
|
-
version:
|
|
2658
|
-
peerDependencies:
|
|
2872
|
+
const npmLock = lockName === "package-lock.json" ? z31.object({
|
|
2873
|
+
lockfileVersion: z31.number(),
|
|
2874
|
+
packages: z31.record(z31.string(), z31.object({
|
|
2875
|
+
version: z31.string().optional(),
|
|
2876
|
+
peerDependencies: z31.record(z31.string(), z31.string()).optional()
|
|
2659
2877
|
})).optional()
|
|
2660
2878
|
}).parse(JSON.parse(lockText)) : null;
|
|
2661
2879
|
async function version2(name3) {
|
|
@@ -2710,8 +2928,12 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
2710
2928
|
sourceConflicts.push("static_export");
|
|
2711
2929
|
if (/\bbasePath\s*:/u.test(source))
|
|
2712
2930
|
sourceConflicts.push("base_path");
|
|
2931
|
+
if (/\bloaderFile\s*:|\bloader\s*:\s*['"](?:custom|imgix|cloudinary|akamai)['"]/u.test(source))
|
|
2932
|
+
sourceConflicts.push(`inspect_image_loader:${file}`);
|
|
2933
|
+
if (/\bmaximumRedirects\s*:\s*[1-9]/u.test(source))
|
|
2934
|
+
sourceConflicts.push(`inspect_image_redirects:${file}`);
|
|
2713
2935
|
}
|
|
2714
|
-
if (sourceConflicts.
|
|
2936
|
+
if (sourceConflicts.some((conflict) => conflict === "static_export" || conflict === "base_path"))
|
|
2715
2937
|
fail("unsupported_server_configuration", "Resolve static export/basePath configuration explicitly; Siteplane requires its server-side admin and revalidation handlers.");
|
|
2716
2938
|
for (const name3 of [
|
|
2717
2939
|
"middleware.ts",
|
|
@@ -2723,8 +2945,14 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
2723
2945
|
"src/proxy.ts",
|
|
2724
2946
|
"src/proxy.js"
|
|
2725
2947
|
]) {
|
|
2726
|
-
if (await exists(join6(projectDirectory, name3)))
|
|
2948
|
+
if (await exists(join6(projectDirectory, name3))) {
|
|
2727
2949
|
sourceConflicts.push(`inspect_routing:${name3}`);
|
|
2950
|
+
if (await readlink(join6(projectDirectory, name3)).catch(() => null))
|
|
2951
|
+
continue;
|
|
2952
|
+
const policySource = await readFile8(join6(projectDirectory, name3), "utf8");
|
|
2953
|
+
if (/Content-Security-Policy|img-src|default-src/iu.test(policySource))
|
|
2954
|
+
sourceConflicts.push(`inspect_image_csp:${name3}`);
|
|
2955
|
+
}
|
|
2728
2956
|
}
|
|
2729
2957
|
async function inspectSource(directory) {
|
|
2730
2958
|
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
@@ -2738,6 +2966,8 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
2738
2966
|
if (!/\.[cm]?[jt]sx?$/u.test(entry.name))
|
|
2739
2967
|
continue;
|
|
2740
2968
|
const source = await readFile8(path, "utf8");
|
|
2969
|
+
if (/Content-Security-Policy|img-src|default-src/iu.test(source))
|
|
2970
|
+
sourceConflicts.push(`inspect_image_csp:${relative2(projectDirectory, path)}`);
|
|
2741
2971
|
if (/from\s*["']next\/image["']/u.test(source))
|
|
2742
2972
|
sourceConflicts.push(`inspect_image_policy:${relative2(projectDirectory, path)}`);
|
|
2743
2973
|
if (/\b(?:Cookiebot|OneTrust|cookieyes|consentManager|cookieConsent)\b/iu.test(source))
|
|
@@ -2783,9 +3013,9 @@ async function setupPreflightCommand(input) {
|
|
|
2783
3013
|
linkDirectory = dirname6(linkDirectory);
|
|
2784
3014
|
if (!await exists(join6(linkDirectory, ".vercel/project.json")))
|
|
2785
3015
|
fail("vercel_project_not_linked", "Link this application to its intended Vercel project before setup; Siteplane will not guess a target.");
|
|
2786
|
-
const linked =
|
|
2787
|
-
projectId:
|
|
2788
|
-
orgId:
|
|
3016
|
+
const linked = z31.object({
|
|
3017
|
+
projectId: z31.string().regex(/^prj_[A-Za-z0-9]+$/u),
|
|
3018
|
+
orgId: z31.string().regex(/^(?:team|user)_[A-Za-z0-9]+$/u)
|
|
2789
3019
|
}).parse(JSON.parse(await readFile8(join6(linkDirectory, ".vercel/project.json"), "utf8")));
|
|
2790
3020
|
const project = vercelProjectSchema.parse(await setupVercelApi(linkDirectory, `/v9/projects/${linked.projectId}?teamId=${linked.orgId}`));
|
|
2791
3021
|
if (project.id !== linked.projectId || project.accountId !== linked.orgId)
|
|
@@ -2799,11 +3029,11 @@ async function setupPreflightCommand(input) {
|
|
|
2799
3029
|
fail("vercel_production_branch_conflict", "The local branch differs from the bound Vercel Production branch.");
|
|
2800
3030
|
if (project.link?.repo && project.link.org && !local.git.remote?.replace(/\.git$/u, "").endsWith(`${project.link.org}/${project.link.repo}`))
|
|
2801
3031
|
fail("vercel_git_conflict", "The local origin repository differs from the Vercel Git connection.");
|
|
2802
|
-
const env =
|
|
2803
|
-
envs:
|
|
2804
|
-
key:
|
|
2805
|
-
value:
|
|
2806
|
-
target:
|
|
3032
|
+
const env = z31.object({
|
|
3033
|
+
envs: z31.array(z31.object({
|
|
3034
|
+
key: z31.string(),
|
|
3035
|
+
value: z31.string().optional(),
|
|
3036
|
+
target: z31.array(z31.string()).optional()
|
|
2807
3037
|
}))
|
|
2808
3038
|
}).parse(await setupVercelApi(linkDirectory, `/v10/projects/${linked.projectId}/env?teamId=${linked.orgId}`));
|
|
2809
3039
|
const corepack = env.envs.some((item) => item.key === "ENABLE_EXPERIMENTAL_COREPACK" && item.value === "1" && item.target?.includes("production"));
|
|
@@ -2893,29 +3123,26 @@ async function initCommand(input) {
|
|
|
2893
3123
|
]
|
|
2894
3124
|
};
|
|
2895
3125
|
}
|
|
2896
|
-
var siteSetupBootstrapDataSchema =
|
|
2897
|
-
credentialPurpose:
|
|
2898
|
-
apiBaseUrl:
|
|
2899
|
-
siteId:
|
|
2900
|
-
publicSiteKeyId:
|
|
2901
|
-
publicSiteKey:
|
|
2902
|
-
accessToken:
|
|
2903
|
-
siteRevalidationSecret:
|
|
2904
|
-
runId:
|
|
2905
|
-
packages:
|
|
2906
|
-
siteplane: z29.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u),
|
|
2907
|
-
runtimeNext: z29.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u)
|
|
2908
|
-
}).strict()
|
|
3126
|
+
var siteSetupBootstrapDataSchema = z32.object({
|
|
3127
|
+
credentialPurpose: z32.literal("site_setup"),
|
|
3128
|
+
apiBaseUrl: z32.string().url(),
|
|
3129
|
+
siteId: z32.string().uuid(),
|
|
3130
|
+
publicSiteKeyId: z32.string().uuid(),
|
|
3131
|
+
publicSiteKey: z32.string().trim().min(1),
|
|
3132
|
+
accessToken: z32.string().trim().min(1),
|
|
3133
|
+
siteRevalidationSecret: z32.string().regex(/^[A-Za-z0-9_-]{43}$/u),
|
|
3134
|
+
runId: z32.string().uuid(),
|
|
3135
|
+
packages: siteSetupPackagesSchema
|
|
2909
3136
|
}).strict();
|
|
2910
|
-
var featureBootstrapDataSchema =
|
|
2911
|
-
credentialPurpose:
|
|
2912
|
-
apiBaseUrl:
|
|
2913
|
-
siteId:
|
|
2914
|
-
accessToken:
|
|
3137
|
+
var featureBootstrapDataSchema = z32.object({
|
|
3138
|
+
credentialPurpose: z32.enum(["analytics", "booking"]),
|
|
3139
|
+
apiBaseUrl: z32.string().url(),
|
|
3140
|
+
siteId: z32.string().uuid(),
|
|
3141
|
+
accessToken: z32.string().trim().min(1)
|
|
2915
3142
|
}).strict();
|
|
2916
|
-
var bootstrapResponseSchema =
|
|
2917
|
-
ok:
|
|
2918
|
-
data:
|
|
3143
|
+
var bootstrapResponseSchema = z32.object({
|
|
3144
|
+
ok: z32.literal(true),
|
|
3145
|
+
data: z32.discriminatedUnion("credentialPurpose", [
|
|
2919
3146
|
siteSetupBootstrapDataSchema,
|
|
2920
3147
|
featureBootstrapDataSchema
|
|
2921
3148
|
])
|
|
@@ -2982,7 +3209,7 @@ async function persistSiteSetupBootstrap(input, bootstrap, appDirectory) {
|
|
|
2982
3209
|
readLocalCredentials(input.projectDir),
|
|
2983
3210
|
readProjectConfig(input.projectDir)
|
|
2984
3211
|
]);
|
|
2985
|
-
if (credentials.accessToken !== bootstrap.accessToken || credentials.siteRevalidationSecret !== bootstrap.siteRevalidationSecret || config.runId !== bootstrap.runId || config.packages.siteplane !== bootstrap.packages.siteplane || config.packages.runtimeNext !== bootstrap.packages.runtimeNext || config.apiBaseUrl !== bootstrap.apiBaseUrl || config.siteId !== bootstrap.siteId || config.publicSiteKeyId !== bootstrap.publicSiteKeyId || config.publicSiteKey !== bootstrap.publicSiteKey) {
|
|
3212
|
+
if (credentials.accessToken !== bootstrap.accessToken || credentials.siteRevalidationSecret !== bootstrap.siteRevalidationSecret || config.runId !== bootstrap.runId || config.packages.siteplane !== bootstrap.packages.siteplane || config.packages.runtimeNext !== bootstrap.packages.runtimeNext || config.packages.analytics !== bootstrap.packages.analytics || config.apiBaseUrl !== bootstrap.apiBaseUrl || config.siteId !== bootstrap.siteId || config.publicSiteKeyId !== bootstrap.publicSiteKeyId || config.publicSiteKey !== bootstrap.publicSiteKey) {
|
|
2986
3213
|
throw new Error("Siteplane setup files could not be verified.");
|
|
2987
3214
|
}
|
|
2988
3215
|
return { configPath, credentialsPath };
|
|
@@ -3073,7 +3300,7 @@ async function collectSourceFiles(directory) {
|
|
|
3073
3300
|
import { execFile as execFile2 } from "child_process";
|
|
3074
3301
|
import { readFile as readFile9 } from "fs/promises";
|
|
3075
3302
|
import { promisify as promisify2 } from "util";
|
|
3076
|
-
import { z as
|
|
3303
|
+
import { z as z33 } from "zod";
|
|
3077
3304
|
|
|
3078
3305
|
// ../cli/dist/scan/next-source-scan.js
|
|
3079
3306
|
import ts2 from "typescript";
|
|
@@ -3083,30 +3310,32 @@ var editableComponentNames = new Set(["Image", "Text", "LongText", "Link"].map((
|
|
|
3083
3310
|
|
|
3084
3311
|
// ../cli/dist/commands/site-setup.js
|
|
3085
3312
|
var execFileAsync2 = promisify2(execFile2);
|
|
3086
|
-
var safeErrorSchema =
|
|
3087
|
-
code:
|
|
3088
|
-
message:
|
|
3313
|
+
var safeErrorSchema = z33.object({
|
|
3314
|
+
code: z33.string().trim().min(1),
|
|
3315
|
+
message: z33.string().trim().min(1)
|
|
3089
3316
|
}).passthrough();
|
|
3090
|
-
var errorResponseSchema2 =
|
|
3091
|
-
var contextDataSchema =
|
|
3092
|
-
|
|
3093
|
-
var applyDataSchema = z30.object({
|
|
3094
|
-
status: z30.enum(["applied", "ready_for_review"]),
|
|
3095
|
-
runId: z30.string().uuid().optional(),
|
|
3096
|
-
contractVersionId: z30.string().uuid().optional(),
|
|
3097
|
-
fieldContractHash: z30.string().regex(/^sha256:[0-9a-f]{64}$/u),
|
|
3098
|
-
editorDefinitionHash: z30.string().regex(/^sha256:[0-9a-f]{64}$/u).optional(),
|
|
3099
|
-
fieldCount: z30.number().int().nonnegative().optional(),
|
|
3100
|
-
routeCount: z30.number().int().nonnegative().optional()
|
|
3317
|
+
var errorResponseSchema2 = z33.object({ ok: z33.literal(false), error: safeErrorSchema }).passthrough();
|
|
3318
|
+
var contextDataSchema = z33.object({
|
|
3319
|
+
task: siteSetupTaskSchema.refine((task) => task.run !== null)
|
|
3101
3320
|
}).strict();
|
|
3102
|
-
var
|
|
3103
|
-
var
|
|
3104
|
-
status:
|
|
3105
|
-
runId:
|
|
3106
|
-
|
|
3107
|
-
|
|
3321
|
+
var contextResponseSchema = z33.object({ ok: z33.literal(true), data: contextDataSchema }).strict();
|
|
3322
|
+
var applyDataSchema = z33.object({
|
|
3323
|
+
status: z33.enum(["applied", "ready_for_review"]),
|
|
3324
|
+
runId: z33.string().uuid().optional(),
|
|
3325
|
+
contractVersionId: z33.string().uuid().optional(),
|
|
3326
|
+
fieldContractHash: z33.string().regex(/^sha256:[0-9a-f]{64}$/u),
|
|
3327
|
+
editorDefinitionHash: z33.string().regex(/^sha256:[0-9a-f]{64}$/u).optional(),
|
|
3328
|
+
fieldCount: z33.number().int().nonnegative().optional(),
|
|
3329
|
+
routeCount: z33.number().int().nonnegative().optional()
|
|
3108
3330
|
}).strict();
|
|
3109
|
-
var
|
|
3331
|
+
var applyResponseSchema = z33.object({ ok: z33.literal(true), data: applyDataSchema }).strict();
|
|
3332
|
+
var verifyDataSchema = z33.object({
|
|
3333
|
+
status: z33.literal("ready_for_review"),
|
|
3334
|
+
runId: z33.string().uuid().optional(),
|
|
3335
|
+
deploymentOrigin: z33.string().url().optional(),
|
|
3336
|
+
deploymentRevision: z33.string().optional()
|
|
3337
|
+
}).strict();
|
|
3338
|
+
var verifyResponseSchema = z33.object({ ok: z33.literal(true), data: verifyDataSchema }).strict();
|
|
3110
3339
|
async function siteSetupContextCommand(input) {
|
|
3111
3340
|
const response = await postSiteSetup(input, "context", {});
|
|
3112
3341
|
const parsed = contextResponseSchema.safeParse(response.payload);
|
|
@@ -3209,8 +3438,8 @@ import ts3 from "typescript";
|
|
|
3209
3438
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
3210
3439
|
import { lstat as lstat3, mkdir as mkdir7, open as open4, readFile as readFile11, rm as rm4, rmdir } from "fs/promises";
|
|
3211
3440
|
import { resolve as resolve2 } from "path";
|
|
3212
|
-
import { z as
|
|
3213
|
-
var ownerSchema =
|
|
3441
|
+
import { z as z34 } from "zod";
|
|
3442
|
+
var ownerSchema = z34.object({ pid: z34.number().int().positive(), nonce: z34.string().uuid() }).strict();
|
|
3214
3443
|
|
|
3215
3444
|
// ../cli/dist/config/build-provenance.js
|
|
3216
3445
|
import { createHash as createHash3 } from "crypto";
|
|
@@ -3218,23 +3447,23 @@ import { execFile as execFile3 } from "child_process";
|
|
|
3218
3447
|
import { lstat as lstat4, readFile as readFile12, writeFile as writeFile5, mkdir as mkdir8 } from "fs/promises";
|
|
3219
3448
|
import { dirname as dirname8, isAbsolute as isAbsolute2, join as join10, relative as relative6, resolve as resolve3, sep as sep3 } from "path";
|
|
3220
3449
|
import { isDeepStrictEqual, promisify as promisify3 } from "util";
|
|
3221
|
-
import { z as
|
|
3450
|
+
import { z as z35 } from "zod";
|
|
3222
3451
|
var execute = promisify3(execFile3);
|
|
3223
3452
|
var name = ".siteplane/build-source.json";
|
|
3224
|
-
var oid =
|
|
3225
|
-
var entrySchema =
|
|
3226
|
-
path:
|
|
3227
|
-
mode:
|
|
3453
|
+
var oid = z35.string().regex(/^[0-9a-f]{40}$/u);
|
|
3454
|
+
var entrySchema = z35.object({
|
|
3455
|
+
path: z35.string().min(1).max(4096),
|
|
3456
|
+
mode: z35.enum(["100644", "100755", "120000"]),
|
|
3228
3457
|
oid
|
|
3229
3458
|
}).strict();
|
|
3230
|
-
var schema =
|
|
3231
|
-
version:
|
|
3459
|
+
var schema = z35.object({
|
|
3460
|
+
version: z35.literal(2),
|
|
3232
3461
|
revision: oid,
|
|
3233
|
-
commit:
|
|
3234
|
-
entries:
|
|
3235
|
-
providerConfigurations:
|
|
3236
|
-
path:
|
|
3237
|
-
source:
|
|
3462
|
+
commit: z35.string().min(1).max(1048576),
|
|
3463
|
+
entries: z35.array(entrySchema).min(1).max(1e5),
|
|
3464
|
+
providerConfigurations: z35.array(z35.object({
|
|
3465
|
+
path: z35.string().max(4096).regex(/(?:^|\/)vercel\.json$/u),
|
|
3466
|
+
source: z35.string().max(1048576)
|
|
3238
3467
|
}).strict()).max(1e3)
|
|
3239
3468
|
}).strict();
|
|
3240
3469
|
async function writeBuildProvenance(checkout, revision) {
|
|
@@ -3283,37 +3512,38 @@ import { createHash as createHash4, randomBytes, randomUUID as randomUUID6 } fro
|
|
|
3283
3512
|
import { access as access5, mkdir as mkdir9, mkdtemp, rm as rm5, writeFile as writeFile6 } from "fs/promises";
|
|
3284
3513
|
import { tmpdir } from "os";
|
|
3285
3514
|
import { join as join11 } from "path";
|
|
3286
|
-
import { z as
|
|
3287
|
-
var envSchema =
|
|
3288
|
-
id:
|
|
3289
|
-
key:
|
|
3290
|
-
target:
|
|
3291
|
-
type:
|
|
3292
|
-
comment:
|
|
3293
|
-
updatedAt:
|
|
3294
|
-
});
|
|
3295
|
-
var deploymentSchema =
|
|
3296
|
-
id:
|
|
3297
|
-
projectId:
|
|
3298
|
-
ownerId:
|
|
3299
|
-
target:
|
|
3300
|
-
readyState:
|
|
3301
|
-
createdAt:
|
|
3302
|
-
url:
|
|
3303
|
-
meta:
|
|
3304
|
-
gitSource:
|
|
3305
|
-
});
|
|
3306
|
-
var buildProofSchema =
|
|
3307
|
-
node:
|
|
3308
|
-
packageManager:
|
|
3309
|
-
packageManagerVersion:
|
|
3310
|
-
lockfileHash:
|
|
3311
|
-
revision:
|
|
3312
|
-
fieldContractHash:
|
|
3313
|
-
siteplane:
|
|
3314
|
-
runtimeNext:
|
|
3315
|
-
|
|
3316
|
-
|
|
3515
|
+
import { z as z36 } from "zod";
|
|
3516
|
+
var envSchema = z36.object({
|
|
3517
|
+
id: z36.string(),
|
|
3518
|
+
key: z36.string(),
|
|
3519
|
+
target: z36.array(z36.string()),
|
|
3520
|
+
type: z36.string(),
|
|
3521
|
+
comment: z36.string().optional(),
|
|
3522
|
+
updatedAt: z36.number().optional()
|
|
3523
|
+
});
|
|
3524
|
+
var deploymentSchema = z36.object({
|
|
3525
|
+
id: z36.string(),
|
|
3526
|
+
projectId: z36.string(),
|
|
3527
|
+
ownerId: z36.string().optional(),
|
|
3528
|
+
target: z36.string().nullable(),
|
|
3529
|
+
readyState: z36.string(),
|
|
3530
|
+
createdAt: z36.number(),
|
|
3531
|
+
url: z36.string(),
|
|
3532
|
+
meta: z36.record(z36.string(), z36.unknown()).optional(),
|
|
3533
|
+
gitSource: z36.object({ sha: z36.string().optional() }).nullable().optional()
|
|
3534
|
+
});
|
|
3535
|
+
var buildProofSchema = z36.object({
|
|
3536
|
+
node: z36.string(),
|
|
3537
|
+
packageManager: z36.enum(["npm", "pnpm"]),
|
|
3538
|
+
packageManagerVersion: z36.string(),
|
|
3539
|
+
lockfileHash: z36.string(),
|
|
3540
|
+
revision: z36.string(),
|
|
3541
|
+
fieldContractHash: z36.string(),
|
|
3542
|
+
siteplane: z36.string(),
|
|
3543
|
+
runtimeNext: z36.string(),
|
|
3544
|
+
analytics: z36.string().optional(),
|
|
3545
|
+
next: z36.string(),
|
|
3546
|
+
react: z36.string()
|
|
3317
3547
|
}).strict();
|
|
3318
3548
|
var defaults = {
|
|
3319
3549
|
preflight: setupPreflightCommand,
|
|
@@ -3323,6 +3553,7 @@ var defaults = {
|
|
|
3323
3553
|
verify: siteSetupVerifyCommand,
|
|
3324
3554
|
post: postSiteSetup,
|
|
3325
3555
|
writeBuildProvenance,
|
|
3556
|
+
analyticsPublicKey: analyticsPublicKeyCommand,
|
|
3326
3557
|
now: Date.now,
|
|
3327
3558
|
pause: (milliseconds) => new Promise((resolve4) => setTimeout(resolve4, milliseconds))
|
|
3328
3559
|
};
|