siteplane 0.1.45 → 0.1.47
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 +12 -0
- package/dist/bin/siteplane.js +1094 -813
- package/dist/index.js +1018 -787
- package/dist/next.d.ts +25 -0
- package/dist/next.js +1138 -794
- package/package.json +1 -1
package/dist/bin/siteplane.js
CHANGED
|
@@ -100,13 +100,42 @@ var analyticsProviderImportSchema = z3.object({
|
|
|
100
100
|
rows: z3.array(analyticsProviderImportRowSchema).min(1).max(1e3)
|
|
101
101
|
}).strict();
|
|
102
102
|
|
|
103
|
-
// ../shared/dist/analytics-
|
|
103
|
+
// ../shared/dist/analytics-config.js
|
|
104
104
|
import { z as z4 } from "zod";
|
|
105
|
+
var ANALYTICS_CONFIG_LEASE_MS = 6e4;
|
|
106
|
+
var analyticsMeasurementConfigSchema = z4.object({
|
|
107
|
+
version: z4.literal(1),
|
|
108
|
+
installationGeneration: z4.number().int().positive(),
|
|
109
|
+
configRevision: z4.number().int().positive(),
|
|
110
|
+
effectiveSiteMode: z4.enum(["disabled", "session_only", "full_analytics"]),
|
|
111
|
+
measurementEnabled: z4.boolean(),
|
|
112
|
+
issuedAt: z4.string().datetime({ offset: true }),
|
|
113
|
+
expiresAt: z4.string().datetime({ offset: true })
|
|
114
|
+
}).strict().superRefine((config, context) => {
|
|
115
|
+
const lifetime = Date.parse(config.expiresAt) - Date.parse(config.issuedAt);
|
|
116
|
+
if (lifetime <= 0 || lifetime > ANALYTICS_CONFIG_LEASE_MS) {
|
|
117
|
+
context.addIssue({
|
|
118
|
+
code: "custom",
|
|
119
|
+
path: ["expiresAt"],
|
|
120
|
+
message: "Measurement permission must expire within 60 seconds."
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (config.measurementEnabled !== (config.effectiveSiteMode !== "disabled")) {
|
|
124
|
+
context.addIssue({
|
|
125
|
+
code: "custom",
|
|
126
|
+
path: ["measurementEnabled"],
|
|
127
|
+
message: "Measurement permission must match the effective site mode."
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// ../shared/dist/analytics-events.js
|
|
133
|
+
import { z as z5 } from "zod";
|
|
105
134
|
var ANALYTICS_SCHEMA_VERSION = "analytics.v1";
|
|
106
135
|
var ANALYTICS_KEY_PATTERN = /^(pk|sk)_siteplane_([A-Za-z0-9_-]{16})_[A-Za-z0-9_-]{43}$/;
|
|
107
|
-
var analyticsSessionIdSchema =
|
|
108
|
-
var analyticsVisitorIdSchema =
|
|
109
|
-
var analyticsPersistedIdentityHashSchema =
|
|
136
|
+
var analyticsSessionIdSchema = z5.string().regex(/^cpa_s_[a-f0-9]{32}$/u);
|
|
137
|
+
var analyticsVisitorIdSchema = z5.string().regex(/^cpa_v_[a-f0-9]{32}$/u);
|
|
138
|
+
var analyticsPersistedIdentityHashSchema = z5.string().regex(/^[a-f0-9]{64}$/u);
|
|
110
139
|
var analyticsEventNames = [
|
|
111
140
|
"page_view",
|
|
112
141
|
"section_view",
|
|
@@ -186,41 +215,43 @@ var analyticsValidityStatuses = [
|
|
|
186
215
|
"rejected",
|
|
187
216
|
"ignored"
|
|
188
217
|
];
|
|
189
|
-
var analyticsEventNameSchema =
|
|
190
|
-
var serverOnlyAnalyticsEventSchema =
|
|
191
|
-
var analyticsEventSourceSchema =
|
|
192
|
-
var analyticsIngestionChannelSchema =
|
|
193
|
-
var analyticsTargetTypeSchema =
|
|
194
|
-
var analyticsDataAttributeEventSchema =
|
|
195
|
-
var analyticsDeviceTypeSchema =
|
|
196
|
-
var analyticsBotClassificationSchema =
|
|
197
|
-
var analyticsValidityStatusSchema =
|
|
198
|
-
var analyticsPropertiesSchema =
|
|
199
|
-
var analyticsTimestampSchema =
|
|
200
|
-
var analyticsBrowserEventSchema =
|
|
201
|
-
eventId:
|
|
218
|
+
var analyticsEventNameSchema = z5.enum(analyticsEventNames);
|
|
219
|
+
var serverOnlyAnalyticsEventSchema = z5.enum(serverOnlyAnalyticsEvents);
|
|
220
|
+
var analyticsEventSourceSchema = z5.enum(analyticsEventSources);
|
|
221
|
+
var analyticsIngestionChannelSchema = z5.enum(analyticsIngestionChannels);
|
|
222
|
+
var analyticsTargetTypeSchema = z5.enum(analyticsTargetTypes);
|
|
223
|
+
var analyticsDataAttributeEventSchema = z5.enum(analyticsDataAttributeEvents);
|
|
224
|
+
var analyticsDeviceTypeSchema = z5.enum(analyticsDeviceTypes);
|
|
225
|
+
var analyticsBotClassificationSchema = z5.enum(analyticsBotClassifications);
|
|
226
|
+
var analyticsValidityStatusSchema = z5.enum(analyticsValidityStatuses);
|
|
227
|
+
var analyticsPropertiesSchema = z5.record(z5.string(), z5.unknown());
|
|
228
|
+
var analyticsTimestampSchema = z5.string().datetime({ offset: true });
|
|
229
|
+
var analyticsBrowserEventSchema = z5.object({
|
|
230
|
+
eventId: z5.string().min(1).max(160),
|
|
231
|
+
installationGeneration: z5.number().int().positive().optional(),
|
|
232
|
+
measurementMode: z5.enum(["session_only", "full_analytics"]).optional(),
|
|
202
233
|
eventName: analyticsEventNameSchema,
|
|
203
234
|
eventSource: analyticsEventSourceSchema.optional().default("browser"),
|
|
204
|
-
targetId:
|
|
235
|
+
targetId: z5.string().min(1).max(160).optional(),
|
|
205
236
|
targetType: analyticsTargetTypeSchema.optional(),
|
|
206
237
|
visitorId: analyticsVisitorIdSchema.optional(),
|
|
207
238
|
sessionId: analyticsSessionIdSchema,
|
|
208
|
-
idempotencyKey:
|
|
239
|
+
idempotencyKey: z5.string().min(1).max(240).optional(),
|
|
209
240
|
occurredAt: analyticsTimestampSchema,
|
|
210
|
-
pageUrl:
|
|
211
|
-
pagePath:
|
|
212
|
-
routeTemplate:
|
|
213
|
-
referrer:
|
|
214
|
-
utmSource:
|
|
215
|
-
utmMedium:
|
|
216
|
-
utmCampaign:
|
|
217
|
-
utmContent:
|
|
218
|
-
utmTerm:
|
|
241
|
+
pageUrl: z5.string().url().max(2048).optional(),
|
|
242
|
+
pagePath: z5.string().min(1).max(1024).optional(),
|
|
243
|
+
routeTemplate: z5.string().min(1).max(1024).optional(),
|
|
244
|
+
referrer: z5.string().url().max(2048).optional(),
|
|
245
|
+
utmSource: z5.string().min(1).max(200).optional(),
|
|
246
|
+
utmMedium: z5.string().min(1).max(200).optional(),
|
|
247
|
+
utmCampaign: z5.string().min(1).max(200).optional(),
|
|
248
|
+
utmContent: z5.string().min(1).max(200).optional(),
|
|
249
|
+
utmTerm: z5.string().min(1).max(200).optional(),
|
|
219
250
|
deviceType: analyticsDeviceTypeSchema.optional(),
|
|
220
|
-
browserName:
|
|
221
|
-
osName:
|
|
222
|
-
country:
|
|
223
|
-
region:
|
|
251
|
+
browserName: z5.string().min(1).max(120).optional(),
|
|
252
|
+
osName: z5.string().min(1).max(120).optional(),
|
|
253
|
+
country: z5.string().min(1).max(80).optional(),
|
|
254
|
+
region: z5.string().min(1).max(120).optional(),
|
|
224
255
|
properties: analyticsPropertiesSchema.optional().default({})
|
|
225
256
|
}).superRefine((event, context) => {
|
|
226
257
|
if (isServerOnlyAnalyticsEvent(event.eventName)) {
|
|
@@ -245,44 +276,44 @@ var analyticsBrowserEventSchema = z4.object({
|
|
|
245
276
|
});
|
|
246
277
|
}
|
|
247
278
|
});
|
|
248
|
-
var analyticsBrowserEventPayloadSchema =
|
|
249
|
-
siteKey:
|
|
250
|
-
schemaVersion:
|
|
251
|
-
mode:
|
|
252
|
-
events:
|
|
279
|
+
var analyticsBrowserEventPayloadSchema = z5.object({
|
|
280
|
+
siteKey: z5.string().min(1),
|
|
281
|
+
schemaVersion: z5.literal(ANALYTICS_SCHEMA_VERSION),
|
|
282
|
+
mode: z5.enum(["live", "test"]).optional().default("live"),
|
|
283
|
+
events: z5.array(analyticsBrowserEventSchema).min(1).max(50)
|
|
253
284
|
});
|
|
254
|
-
var analyticsNormalizedEventBaseSchema =
|
|
255
|
-
site_id:
|
|
256
|
-
event_id:
|
|
257
|
-
schema_version:
|
|
285
|
+
var analyticsNormalizedEventBaseSchema = z5.object({
|
|
286
|
+
site_id: z5.string().uuid(),
|
|
287
|
+
event_id: z5.string().min(1).max(160),
|
|
288
|
+
schema_version: z5.literal(ANALYTICS_SCHEMA_VERSION),
|
|
258
289
|
event_name: analyticsEventNameSchema,
|
|
259
290
|
event_source: analyticsEventSourceSchema,
|
|
260
291
|
ingestion_channel: analyticsIngestionChannelSchema,
|
|
261
|
-
target_id:
|
|
292
|
+
target_id: z5.string().min(1).max(160).nullable().optional(),
|
|
262
293
|
target_type: analyticsTargetTypeSchema.nullable().optional(),
|
|
263
|
-
dedupe_key:
|
|
264
|
-
idempotency_key:
|
|
294
|
+
dedupe_key: z5.string().regex(/^analytics_dedupe_v1_[a-f0-9]{64}$/u).nullable().optional(),
|
|
295
|
+
idempotency_key: z5.string().min(1).max(240).nullable().optional(),
|
|
265
296
|
bot_classification: analyticsBotClassificationSchema,
|
|
266
297
|
validity_status: analyticsValidityStatusSchema,
|
|
267
|
-
rejection_reason:
|
|
298
|
+
rejection_reason: z5.string().min(1).max(240).nullable().optional(),
|
|
268
299
|
occurred_at: analyticsTimestampSchema,
|
|
269
300
|
received_at: analyticsTimestampSchema,
|
|
270
|
-
page_url:
|
|
271
|
-
page_path:
|
|
272
|
-
route_template:
|
|
273
|
-
referrer:
|
|
274
|
-
utm_source:
|
|
275
|
-
utm_medium:
|
|
276
|
-
utm_campaign:
|
|
277
|
-
utm_content:
|
|
278
|
-
utm_term:
|
|
279
|
-
country:
|
|
280
|
-
region:
|
|
301
|
+
page_url: z5.string().url().max(2048).nullable().optional(),
|
|
302
|
+
page_path: z5.string().min(1).max(1024).nullable().optional(),
|
|
303
|
+
route_template: z5.string().min(1).max(1024).nullable().optional(),
|
|
304
|
+
referrer: z5.string().url().max(2048).nullable().optional(),
|
|
305
|
+
utm_source: z5.string().min(1).max(200).nullable().optional(),
|
|
306
|
+
utm_medium: z5.string().min(1).max(200).nullable().optional(),
|
|
307
|
+
utm_campaign: z5.string().min(1).max(200).nullable().optional(),
|
|
308
|
+
utm_content: z5.string().min(1).max(200).nullable().optional(),
|
|
309
|
+
utm_term: z5.string().min(1).max(200).nullable().optional(),
|
|
310
|
+
country: z5.string().min(1).max(80).nullable().optional(),
|
|
311
|
+
region: z5.string().min(1).max(120).nullable().optional(),
|
|
281
312
|
device_type: analyticsDeviceTypeSchema,
|
|
282
|
-
browser_name:
|
|
283
|
-
os_name:
|
|
284
|
-
provider:
|
|
285
|
-
provider_event_id:
|
|
313
|
+
browser_name: z5.string().min(1).max(120).nullable().optional(),
|
|
314
|
+
os_name: z5.string().min(1).max(120).nullable().optional(),
|
|
315
|
+
provider: z5.string().min(1).max(120).nullable().optional(),
|
|
316
|
+
provider_event_id: z5.string().min(1).max(240).nullable().optional(),
|
|
286
317
|
properties: analyticsPropertiesSchema
|
|
287
318
|
});
|
|
288
319
|
var analyticsRawNormalizedEventSchema = analyticsNormalizedEventBaseSchema.extend({
|
|
@@ -308,11 +339,11 @@ function expandAnalyticsDataAttributeEvent(event) {
|
|
|
308
339
|
}
|
|
309
340
|
|
|
310
341
|
// ../shared/dist/analytics-manifest.js
|
|
311
|
-
import { z as
|
|
312
|
-
var analyticsTargetIdSchema =
|
|
342
|
+
import { z as z6 } from "zod";
|
|
343
|
+
var analyticsTargetIdSchema = z6.string().min(1).max(120).regex(/^[a-zA-Z][a-zA-Z0-9]*(?:[._-][a-zA-Z0-9]+)*$/u, {
|
|
313
344
|
message: "Analytics target IDs must be stable identifiers without whitespace or visible copy."
|
|
314
345
|
});
|
|
315
|
-
var analyticsManifestRecordSchema =
|
|
346
|
+
var analyticsManifestRecordSchema = z6.record(z6.string(), z6.unknown());
|
|
316
347
|
var analyticsFormPurposes = [
|
|
317
348
|
"contact",
|
|
318
349
|
"lead",
|
|
@@ -321,21 +352,21 @@ var analyticsFormPurposes = [
|
|
|
321
352
|
"login",
|
|
322
353
|
"other"
|
|
323
354
|
];
|
|
324
|
-
var analyticsFormPurposeSchema =
|
|
325
|
-
var analyticsManifestRouteSchema =
|
|
326
|
-
path:
|
|
327
|
-
pageType:
|
|
328
|
-
label:
|
|
355
|
+
var analyticsFormPurposeSchema = z6.enum(analyticsFormPurposes);
|
|
356
|
+
var analyticsManifestRouteSchema = z6.object({
|
|
357
|
+
path: z6.string().min(1).max(1024),
|
|
358
|
+
pageType: z6.string().min(1).max(120).optional(),
|
|
359
|
+
label: z6.string().min(1).max(200).optional()
|
|
329
360
|
}).passthrough();
|
|
330
|
-
var analyticsManifestTargetSchema =
|
|
361
|
+
var analyticsManifestTargetSchema = z6.object({
|
|
331
362
|
id: analyticsTargetIdSchema,
|
|
332
363
|
type: analyticsTargetTypeSchema,
|
|
333
364
|
event: analyticsEventNameSchema.optional(),
|
|
334
|
-
events:
|
|
335
|
-
route:
|
|
336
|
-
label:
|
|
337
|
-
description:
|
|
338
|
-
autoActive:
|
|
365
|
+
events: z6.array(analyticsEventNameSchema).min(1).max(20).optional(),
|
|
366
|
+
route: z6.string().min(1).max(1024).optional(),
|
|
367
|
+
label: z6.string().min(1).max(200).optional(),
|
|
368
|
+
description: z6.string().min(1).max(1e3).optional(),
|
|
369
|
+
autoActive: z6.boolean().optional(),
|
|
339
370
|
sourceHints: analyticsManifestRecordSchema.optional()
|
|
340
371
|
}).passthrough().superRefine((target, context) => {
|
|
341
372
|
if (target.event === void 0 && target.events === void 0) {
|
|
@@ -360,21 +391,21 @@ var analyticsManifestTargetSchema = z5.object({
|
|
|
360
391
|
});
|
|
361
392
|
}
|
|
362
393
|
});
|
|
363
|
-
var analyticsManifestSchema =
|
|
364
|
-
schemaVersion:
|
|
365
|
-
siteId:
|
|
366
|
-
siteKeyRef:
|
|
394
|
+
var analyticsManifestSchema = z6.object({
|
|
395
|
+
schemaVersion: z6.literal(ANALYTICS_SCHEMA_VERSION),
|
|
396
|
+
siteId: z6.string().min(1),
|
|
397
|
+
siteKeyRef: z6.string().regex(/^env:[A-Z][A-Z0-9_]*$/u, {
|
|
367
398
|
message: "siteKeyRef must be an environment-variable reference."
|
|
368
399
|
}),
|
|
369
|
-
siteKeyLookup:
|
|
370
|
-
routes:
|
|
371
|
-
targets:
|
|
400
|
+
siteKeyLookup: z6.string().regex(/^pk_siteplane_[A-Za-z0-9_-]{16}$/),
|
|
401
|
+
routes: z6.array(analyticsManifestRouteSchema),
|
|
402
|
+
targets: z6.array(analyticsManifestTargetSchema),
|
|
372
403
|
metadata: analyticsManifestRecordSchema.optional(),
|
|
373
|
-
siteKey:
|
|
374
|
-
secretKey:
|
|
375
|
-
rawKey:
|
|
376
|
-
token:
|
|
377
|
-
accessToken:
|
|
404
|
+
siteKey: z6.string().optional(),
|
|
405
|
+
secretKey: z6.string().optional(),
|
|
406
|
+
rawKey: z6.string().optional(),
|
|
407
|
+
token: z6.string().optional(),
|
|
408
|
+
accessToken: z6.string().optional()
|
|
378
409
|
}).passthrough().superRefine((manifest, context) => {
|
|
379
410
|
const targetIds = /* @__PURE__ */ new Set();
|
|
380
411
|
for (const [index, target] of manifest.targets.entries()) {
|
|
@@ -461,9 +492,9 @@ function isPlainRecord(value) {
|
|
|
461
492
|
}
|
|
462
493
|
|
|
463
494
|
// ../shared/dist/analytics-metrics.js
|
|
464
|
-
import { z as
|
|
495
|
+
import { z as z7 } from "zod";
|
|
465
496
|
var analyticsVisitorQualities = ["exact", "estimated"];
|
|
466
|
-
var analyticsVisitorQualitySchema =
|
|
497
|
+
var analyticsVisitorQualitySchema = z7.enum(analyticsVisitorQualities);
|
|
467
498
|
var analyticsKpiKeys = [
|
|
468
499
|
"pageViews",
|
|
469
500
|
"sessions",
|
|
@@ -475,7 +506,7 @@ var analyticsKpiKeys = [
|
|
|
475
506
|
"conversionRate",
|
|
476
507
|
"inquiryRate"
|
|
477
508
|
];
|
|
478
|
-
var analyticsKpiKeySchema =
|
|
509
|
+
var analyticsKpiKeySchema = z7.enum(analyticsKpiKeys);
|
|
479
510
|
|
|
480
511
|
// ../shared/dist/analytics-privacy.js
|
|
481
512
|
var serverPropertySchemas = {
|
|
@@ -513,7 +544,7 @@ function revenuePropertySchema() {
|
|
|
513
544
|
}
|
|
514
545
|
|
|
515
546
|
// ../shared/dist/assets.js
|
|
516
|
-
import { z as
|
|
547
|
+
import { z as z8 } from "zod";
|
|
517
548
|
var ASSET_STAGES = ["staging", "final", "deleted"];
|
|
518
549
|
var ASSET_VISIBILITIES = ["private", "public", "deleted"];
|
|
519
550
|
var ASSET_USAGE_ENTITY_TYPES = [
|
|
@@ -522,13 +553,13 @@ var ASSET_USAGE_ENTITY_TYPES = [
|
|
|
522
553
|
"change_set",
|
|
523
554
|
"published_value"
|
|
524
555
|
];
|
|
525
|
-
var assetStageSchema =
|
|
526
|
-
var assetVisibilitySchema =
|
|
527
|
-
var assetUsageEntityTypeSchema =
|
|
528
|
-
var brandingAccentColorSchema =
|
|
556
|
+
var assetStageSchema = z8.enum(ASSET_STAGES);
|
|
557
|
+
var assetVisibilitySchema = z8.enum(ASSET_VISIBILITIES);
|
|
558
|
+
var assetUsageEntityTypeSchema = z8.enum(ASSET_USAGE_ENTITY_TYPES);
|
|
559
|
+
var brandingAccentColorSchema = z8.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/);
|
|
529
560
|
|
|
530
561
|
// ../shared/dist/booking-contracts.js
|
|
531
|
-
import { z as
|
|
562
|
+
import { z as z9 } from "zod";
|
|
532
563
|
var bookingStatuses = [
|
|
533
564
|
"pending_payment",
|
|
534
565
|
"confirmed",
|
|
@@ -583,30 +614,30 @@ var bookingResourceKinds = [
|
|
|
583
614
|
"equipment",
|
|
584
615
|
"other"
|
|
585
616
|
];
|
|
586
|
-
var bookingStatusSchema =
|
|
587
|
-
var bookingPaymentStatusSchema =
|
|
588
|
-
var bookingAccountReadinessStatusSchema =
|
|
589
|
-
var bookingRefundStatusSchema =
|
|
590
|
-
var bookingDisputeStatusSchema =
|
|
591
|
-
var bookingPaymentModeSchema =
|
|
592
|
-
var bookingPaymentCollectionTypeSchema =
|
|
593
|
-
var bookingPaymentCollectionSchema =
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
type:
|
|
597
|
-
depositPercent:
|
|
617
|
+
var bookingStatusSchema = z9.enum(bookingStatuses);
|
|
618
|
+
var bookingPaymentStatusSchema = z9.enum(bookingPaymentStatuses);
|
|
619
|
+
var bookingAccountReadinessStatusSchema = z9.enum(bookingAccountReadinessStatuses);
|
|
620
|
+
var bookingRefundStatusSchema = z9.enum(bookingRefundStatuses);
|
|
621
|
+
var bookingDisputeStatusSchema = z9.enum(bookingDisputeStatuses);
|
|
622
|
+
var bookingPaymentModeSchema = z9.enum(bookingPaymentModes);
|
|
623
|
+
var bookingPaymentCollectionTypeSchema = z9.enum(bookingPaymentCollectionTypes);
|
|
624
|
+
var bookingPaymentCollectionSchema = z9.discriminatedUnion("type", [
|
|
625
|
+
z9.object({ type: z9.literal("full_amount") }).strict(),
|
|
626
|
+
z9.object({
|
|
627
|
+
type: z9.literal("deposit_percent"),
|
|
628
|
+
depositPercent: z9.number().int().min(10).max(90)
|
|
598
629
|
}).strict()
|
|
599
630
|
]);
|
|
600
631
|
var bookingPaymentChoices = ["onsite", "online"];
|
|
601
|
-
var bookingPaymentChoiceSchema =
|
|
602
|
-
var bookingPaymentSnapshotSchema =
|
|
603
|
-
snapshotId:
|
|
604
|
-
snapshotVersion:
|
|
605
|
-
currency:
|
|
606
|
-
totalAmountCents:
|
|
607
|
-
onlineAmountCents:
|
|
608
|
-
onsiteRemainderCents:
|
|
609
|
-
maxStripeRefundAmountCents:
|
|
632
|
+
var bookingPaymentChoiceSchema = z9.enum(bookingPaymentChoices);
|
|
633
|
+
var bookingPaymentSnapshotSchema = z9.object({
|
|
634
|
+
snapshotId: z9.string().uuid(),
|
|
635
|
+
snapshotVersion: z9.number().int().positive(),
|
|
636
|
+
currency: z9.literal("EUR"),
|
|
637
|
+
totalAmountCents: z9.number().int().min(0),
|
|
638
|
+
onlineAmountCents: z9.number().int().min(0),
|
|
639
|
+
onsiteRemainderCents: z9.number().int().min(0),
|
|
640
|
+
maxStripeRefundAmountCents: z9.number().int().min(0)
|
|
610
641
|
}).strict().superRefine((snapshot, context) => {
|
|
611
642
|
if (snapshot.onlineAmountCents + snapshot.onsiteRemainderCents !== snapshot.totalAmountCents) {
|
|
612
643
|
context.addIssue({
|
|
@@ -621,17 +652,17 @@ var bookingPaymentSnapshotSchema = z8.object({
|
|
|
621
652
|
});
|
|
622
653
|
}
|
|
623
654
|
});
|
|
624
|
-
var bookingServiceVariantSchema =
|
|
625
|
-
id:
|
|
626
|
-
name:
|
|
627
|
-
durationMinutes:
|
|
628
|
-
priceCents:
|
|
655
|
+
var bookingServiceVariantSchema = z9.object({
|
|
656
|
+
id: z9.string().uuid(),
|
|
657
|
+
name: z9.string().trim().min(1).max(120),
|
|
658
|
+
durationMinutes: z9.number().int().min(1).max(1440),
|
|
659
|
+
priceCents: z9.number().int().min(0).nullable()
|
|
629
660
|
}).strict();
|
|
630
|
-
var bookingServiceVariantsSchema =
|
|
631
|
-
var isoDateSchema =
|
|
632
|
-
var utcDateTimeSchema =
|
|
633
|
-
var bookingLocalTimeSchema =
|
|
634
|
-
var bookingAvailabilityIntervalsSchema =
|
|
661
|
+
var bookingServiceVariantsSchema = z9.array(bookingServiceVariantSchema).min(1).max(20);
|
|
662
|
+
var isoDateSchema = z9.string().regex(/^\d{4}-\d{2}-\d{2}$/);
|
|
663
|
+
var utcDateTimeSchema = z9.string().datetime();
|
|
664
|
+
var bookingLocalTimeSchema = z9.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d$/);
|
|
665
|
+
var bookingAvailabilityIntervalsSchema = z9.array(z9.object({
|
|
635
666
|
start: bookingLocalTimeSchema,
|
|
636
667
|
end: bookingLocalTimeSchema
|
|
637
668
|
}).strict().refine((interval) => interval.end > interval.start)).superRefine((intervals, context) => {
|
|
@@ -646,75 +677,75 @@ var bookingAvailabilityIntervalsSchema = z8.array(z8.object({
|
|
|
646
677
|
}
|
|
647
678
|
}
|
|
648
679
|
});
|
|
649
|
-
var bookingPublicConfigSchema =
|
|
650
|
-
site:
|
|
651
|
-
displayName:
|
|
652
|
-
timezone:
|
|
653
|
-
locale:
|
|
654
|
-
bookingPageSlug:
|
|
655
|
-
privacyUrl:
|
|
680
|
+
var bookingPublicConfigSchema = z9.object({
|
|
681
|
+
site: z9.object({
|
|
682
|
+
displayName: z9.string().trim().min(1),
|
|
683
|
+
timezone: z9.string().trim().min(1),
|
|
684
|
+
locale: z9.string().trim().min(2),
|
|
685
|
+
bookingPageSlug: z9.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).min(2).max(64),
|
|
686
|
+
privacyUrl: z9.string().url().nullable()
|
|
656
687
|
}),
|
|
657
|
-
branding:
|
|
658
|
-
logoUrl:
|
|
659
|
-
accentColor:
|
|
688
|
+
branding: z9.object({
|
|
689
|
+
logoUrl: z9.string().url().nullable(),
|
|
690
|
+
accentColor: z9.string().trim().min(1).nullable()
|
|
660
691
|
}),
|
|
661
|
-
settings:
|
|
662
|
-
slotIntervalMinutes:
|
|
663
|
-
minLeadMinutes:
|
|
664
|
-
maxAdvanceDays:
|
|
665
|
-
requirePhone:
|
|
666
|
-
collectNote:
|
|
667
|
-
confirmationMessage:
|
|
692
|
+
settings: z9.object({
|
|
693
|
+
slotIntervalMinutes: z9.number().int().positive(),
|
|
694
|
+
minLeadMinutes: z9.number().int().min(0),
|
|
695
|
+
maxAdvanceDays: z9.number().int().min(1),
|
|
696
|
+
requirePhone: z9.boolean(),
|
|
697
|
+
collectNote: z9.boolean(),
|
|
698
|
+
confirmationMessage: z9.string().nullable()
|
|
668
699
|
}),
|
|
669
700
|
/** Freitexte des Salons, im Kassen-Schritt vor der Bestaetigung sichtbar. */
|
|
670
|
-
policies:
|
|
671
|
-
cancellation:
|
|
672
|
-
lateArrival:
|
|
701
|
+
policies: z9.object({
|
|
702
|
+
cancellation: z9.string().nullable(),
|
|
703
|
+
lateArrival: z9.string().nullable()
|
|
673
704
|
}),
|
|
674
|
-
payment:
|
|
705
|
+
payment: z9.object({
|
|
675
706
|
mode: bookingPaymentModeSchema,
|
|
676
707
|
collection: bookingPaymentCollectionSchema,
|
|
677
|
-
onlinePaymentsReady:
|
|
708
|
+
onlinePaymentsReady: z9.boolean()
|
|
678
709
|
}).strict(),
|
|
679
|
-
serviceCategories:
|
|
680
|
-
id:
|
|
681
|
-
name:
|
|
682
|
-
sortOrder:
|
|
710
|
+
serviceCategories: z9.array(z9.object({
|
|
711
|
+
id: z9.string().uuid(),
|
|
712
|
+
name: z9.string().trim().min(1),
|
|
713
|
+
sortOrder: z9.number().int()
|
|
683
714
|
})),
|
|
684
|
-
serviceSubcategories:
|
|
685
|
-
id:
|
|
686
|
-
categoryId:
|
|
687
|
-
name:
|
|
688
|
-
sortOrder:
|
|
715
|
+
serviceSubcategories: z9.array(z9.object({
|
|
716
|
+
id: z9.string().uuid(),
|
|
717
|
+
categoryId: z9.string().uuid(),
|
|
718
|
+
name: z9.string().trim().min(1),
|
|
719
|
+
sortOrder: z9.number().int()
|
|
689
720
|
})),
|
|
690
|
-
services:
|
|
691
|
-
id:
|
|
692
|
-
name:
|
|
693
|
-
durationMinutes:
|
|
694
|
-
priceCents:
|
|
695
|
-
currency:
|
|
696
|
-
description:
|
|
697
|
-
categoryId:
|
|
698
|
-
subcategoryId:
|
|
721
|
+
services: z9.array(z9.object({
|
|
722
|
+
id: z9.string().trim().min(1),
|
|
723
|
+
name: z9.string().trim().min(1),
|
|
724
|
+
durationMinutes: z9.number().int().positive(),
|
|
725
|
+
priceCents: z9.number().int().min(0).nullable(),
|
|
726
|
+
currency: z9.string().regex(/^[A-Z]{3}$/),
|
|
727
|
+
description: z9.string().nullable(),
|
|
728
|
+
categoryId: z9.string().uuid(),
|
|
729
|
+
subcategoryId: z9.string().uuid().nullable(),
|
|
699
730
|
variants: bookingServiceVariantsSchema,
|
|
700
|
-
allowsAnyResource:
|
|
701
|
-
sortOrder:
|
|
731
|
+
allowsAnyResource: z9.boolean(),
|
|
732
|
+
sortOrder: z9.number().int()
|
|
702
733
|
})),
|
|
703
|
-
resources:
|
|
704
|
-
id:
|
|
705
|
-
name:
|
|
706
|
-
kind:
|
|
734
|
+
resources: z9.array(z9.object({
|
|
735
|
+
id: z9.string().trim().min(1),
|
|
736
|
+
name: z9.string().trim().min(1),
|
|
737
|
+
kind: z9.enum(bookingResourceKinds)
|
|
707
738
|
})),
|
|
708
|
-
serviceResources:
|
|
709
|
-
serviceId:
|
|
710
|
-
resourceId:
|
|
739
|
+
serviceResources: z9.array(z9.object({
|
|
740
|
+
serviceId: z9.string().trim().min(1),
|
|
741
|
+
resourceId: z9.string().trim().min(1)
|
|
711
742
|
}))
|
|
712
743
|
});
|
|
713
|
-
var bookingItemSchema =
|
|
714
|
-
serviceId:
|
|
715
|
-
variantId:
|
|
744
|
+
var bookingItemSchema = z9.object({
|
|
745
|
+
serviceId: z9.string().trim().min(1),
|
|
746
|
+
variantId: z9.string().trim().min(1)
|
|
716
747
|
}).strict();
|
|
717
|
-
var bookingItemsSchema =
|
|
748
|
+
var bookingItemsSchema = z9.array(bookingItemSchema).min(1).max(10);
|
|
718
749
|
function parseBookingItemsParam(value) {
|
|
719
750
|
const items = value.split(",").map((entry) => entry.trim()).filter((entry) => entry !== "").map((entry) => {
|
|
720
751
|
const [serviceId, variantId, ...rest] = entry.split(":");
|
|
@@ -722,36 +753,36 @@ function parseBookingItemsParam(value) {
|
|
|
722
753
|
});
|
|
723
754
|
return items.every((item) => item !== null) ? items : null;
|
|
724
755
|
}
|
|
725
|
-
var bookingSlotsQuerySchema =
|
|
726
|
-
items:
|
|
727
|
-
resourceId:
|
|
756
|
+
var bookingSlotsQuerySchema = z9.object({
|
|
757
|
+
items: z9.preprocess((value) => typeof value === "string" ? parseBookingItemsParam(value) : value, bookingItemsSchema),
|
|
758
|
+
resourceId: z9.string().trim().min(1).optional(),
|
|
728
759
|
fromDate: isoDateSchema,
|
|
729
760
|
toDate: isoDateSchema
|
|
730
761
|
});
|
|
731
|
-
var bookingSlotsResponseSchema =
|
|
732
|
-
timezone:
|
|
762
|
+
var bookingSlotsResponseSchema = z9.object({
|
|
763
|
+
timezone: z9.string().trim().min(1),
|
|
733
764
|
items: bookingItemsSchema,
|
|
734
765
|
// Reine Behandlungsdauer ohne Puffer: das UI zeigt damit die Terminspanne,
|
|
735
766
|
// ohne selbst rechnen zu muessen.
|
|
736
|
-
totalDurationMinutes:
|
|
737
|
-
mode:
|
|
738
|
-
slots:
|
|
767
|
+
totalDurationMinutes: z9.number().int().min(1),
|
|
768
|
+
mode: z9.enum(["any", "resource"]),
|
|
769
|
+
slots: z9.array(z9.object({
|
|
739
770
|
startUtc: utcDateTimeSchema,
|
|
740
|
-
resourceId:
|
|
771
|
+
resourceId: z9.string().trim().min(1).optional()
|
|
741
772
|
}))
|
|
742
773
|
});
|
|
743
|
-
var bookingAvailabilityQuerySchema =
|
|
744
|
-
items:
|
|
745
|
-
resourceId:
|
|
774
|
+
var bookingAvailabilityQuerySchema = z9.object({
|
|
775
|
+
items: z9.preprocess((value) => typeof value === "string" ? parseBookingItemsParam(value) : value, bookingItemsSchema),
|
|
776
|
+
resourceId: z9.string().trim().min(1).optional(),
|
|
746
777
|
fromDate: isoDateSchema,
|
|
747
778
|
toDate: isoDateSchema
|
|
748
779
|
});
|
|
749
|
-
var bookingAvailabilityResponseSchema =
|
|
750
|
-
timezone:
|
|
751
|
-
totalDurationMinutes:
|
|
752
|
-
days:
|
|
780
|
+
var bookingAvailabilityResponseSchema = z9.object({
|
|
781
|
+
timezone: z9.string().trim().min(1),
|
|
782
|
+
totalDurationMinutes: z9.number().int().min(1),
|
|
783
|
+
days: z9.array(z9.object({
|
|
753
784
|
date: isoDateSchema,
|
|
754
|
-
hasSlots:
|
|
785
|
+
hasSlots: z9.boolean()
|
|
755
786
|
})),
|
|
756
787
|
/** Erster Tag mit Slot ab `fromDate`, auch ausserhalb des Fensters. */
|
|
757
788
|
nextAvailableDate: isoDateSchema.nullable()
|
|
@@ -769,72 +800,72 @@ var bookingPublicErrorCodes = [
|
|
|
769
800
|
"too_late",
|
|
770
801
|
"not_found"
|
|
771
802
|
];
|
|
772
|
-
var bookingPublicErrorSchema =
|
|
773
|
-
error:
|
|
774
|
-
message:
|
|
775
|
-
requestId:
|
|
803
|
+
var bookingPublicErrorSchema = z9.object({
|
|
804
|
+
error: z9.enum(bookingPublicErrorCodes),
|
|
805
|
+
message: z9.string().optional(),
|
|
806
|
+
requestId: z9.string().optional()
|
|
776
807
|
}).strict();
|
|
777
|
-
var bookingCreateRequestSchema =
|
|
808
|
+
var bookingCreateRequestSchema = z9.object({
|
|
778
809
|
items: bookingItemsSchema,
|
|
779
|
-
resourceId:
|
|
810
|
+
resourceId: z9.string().min(1).nullable(),
|
|
780
811
|
startUtc: utcDateTimeSchema,
|
|
781
|
-
customer:
|
|
782
|
-
name:
|
|
783
|
-
email:
|
|
784
|
-
phone:
|
|
785
|
-
note:
|
|
812
|
+
customer: z9.object({
|
|
813
|
+
name: z9.string().min(1).max(120),
|
|
814
|
+
email: z9.string().email().max(254),
|
|
815
|
+
phone: z9.string().max(32).optional(),
|
|
816
|
+
note: z9.string().max(1e3).optional()
|
|
786
817
|
}).strict(),
|
|
787
|
-
hp:
|
|
788
|
-
clientToken:
|
|
818
|
+
hp: z9.string().optional(),
|
|
819
|
+
clientToken: z9.string().uuid(),
|
|
789
820
|
paymentChoice: bookingPaymentChoiceSchema,
|
|
790
821
|
// Werbe-Einwilligung. Bestaetigung, Erinnerung und Storno-Link sind davon
|
|
791
822
|
// unabhaengig und werden immer versendet.
|
|
792
|
-
consent:
|
|
793
|
-
marketingEmail:
|
|
794
|
-
marketingSms:
|
|
823
|
+
consent: z9.object({
|
|
824
|
+
marketingEmail: z9.boolean(),
|
|
825
|
+
marketingSms: z9.boolean()
|
|
795
826
|
}).strict().optional()
|
|
796
827
|
}).strict();
|
|
797
|
-
var bookingPublicPaymentResponseSchema =
|
|
798
|
-
clientSecret:
|
|
799
|
-
stripeAccountId:
|
|
828
|
+
var bookingPublicPaymentResponseSchema = z9.object({
|
|
829
|
+
clientSecret: z9.string().min(1),
|
|
830
|
+
stripeAccountId: z9.string().startsWith("acct_")
|
|
800
831
|
}).strict();
|
|
801
|
-
var bookingCreateResponseSchema =
|
|
802
|
-
|
|
803
|
-
status:
|
|
804
|
-
booking:
|
|
805
|
-
id:
|
|
832
|
+
var bookingCreateResponseSchema = z9.union([
|
|
833
|
+
z9.object({
|
|
834
|
+
status: z9.literal("confirmed"),
|
|
835
|
+
booking: z9.object({
|
|
836
|
+
id: z9.string().min(1),
|
|
806
837
|
startUtc: utcDateTimeSchema,
|
|
807
838
|
endUtc: utcDateTimeSchema,
|
|
808
|
-
timezone:
|
|
809
|
-
serviceName:
|
|
810
|
-
resourceName:
|
|
839
|
+
timezone: z9.string().trim().min(1),
|
|
840
|
+
serviceName: z9.string().trim().min(1),
|
|
841
|
+
resourceName: z9.string().trim().min(1)
|
|
811
842
|
}).strict(),
|
|
812
|
-
manageUrl:
|
|
813
|
-
confirmationMessage:
|
|
843
|
+
manageUrl: z9.string().url(),
|
|
844
|
+
confirmationMessage: z9.string().nullable()
|
|
814
845
|
}).strict(),
|
|
815
|
-
|
|
816
|
-
status:
|
|
817
|
-
bookingId:
|
|
846
|
+
z9.object({
|
|
847
|
+
status: z9.literal("pending_payment"),
|
|
848
|
+
bookingId: z9.string().min(1),
|
|
818
849
|
holdExpiresAt: utcDateTimeSchema,
|
|
819
850
|
payment: bookingPublicPaymentResponseSchema,
|
|
820
|
-
statusToken:
|
|
821
|
-
manageUrl:
|
|
851
|
+
statusToken: z9.string().min(20),
|
|
852
|
+
manageUrl: z9.string().url().optional()
|
|
822
853
|
}).strict(),
|
|
823
854
|
bookingPublicErrorSchema
|
|
824
855
|
]);
|
|
825
|
-
var bookingStatusResponseSchema =
|
|
856
|
+
var bookingStatusResponseSchema = z9.object({
|
|
826
857
|
bookingStatus: bookingStatusSchema,
|
|
827
858
|
paymentStatus: bookingPaymentStatusSchema,
|
|
828
859
|
refundStatus: bookingRefundStatusSchema,
|
|
829
860
|
disputeStatus: bookingDisputeStatusSchema,
|
|
830
861
|
holdExpiresAt: utcDateTimeSchema.nullable()
|
|
831
862
|
}).strict();
|
|
832
|
-
var bookingCancelRequestSchema =
|
|
833
|
-
token:
|
|
863
|
+
var bookingCancelRequestSchema = z9.object({
|
|
864
|
+
token: z9.string().min(20)
|
|
834
865
|
});
|
|
835
|
-
var bookingCancelResponseSchema =
|
|
836
|
-
|
|
837
|
-
status:
|
|
866
|
+
var bookingCancelResponseSchema = z9.union([
|
|
867
|
+
z9.object({
|
|
868
|
+
status: z9.enum(["cancelled", "already_cancelled", "too_late", "not_found"])
|
|
838
869
|
}),
|
|
839
870
|
bookingPublicErrorSchema
|
|
840
871
|
]);
|
|
@@ -843,34 +874,34 @@ var bookingMoveErrorCodes = [
|
|
|
843
874
|
"booking_not_movable",
|
|
844
875
|
"not_found"
|
|
845
876
|
];
|
|
846
|
-
var bookingMoveRequestSchema =
|
|
847
|
-
bookingId:
|
|
877
|
+
var bookingMoveRequestSchema = z9.object({
|
|
878
|
+
bookingId: z9.string().uuid(),
|
|
848
879
|
newStartUtc: utcDateTimeSchema,
|
|
849
|
-
newResourceId:
|
|
850
|
-
notifyCustomer:
|
|
851
|
-
reason:
|
|
880
|
+
newResourceId: z9.string().uuid().optional(),
|
|
881
|
+
notifyCustomer: z9.boolean().default(false),
|
|
882
|
+
reason: z9.string().max(500).optional()
|
|
852
883
|
});
|
|
853
|
-
var bookingMoveResponseSchema =
|
|
854
|
-
|
|
855
|
-
status:
|
|
856
|
-
bookingId:
|
|
884
|
+
var bookingMoveResponseSchema = z9.union([
|
|
885
|
+
z9.object({
|
|
886
|
+
status: z9.literal("moved"),
|
|
887
|
+
bookingId: z9.string().uuid(),
|
|
857
888
|
startUtc: utcDateTimeSchema,
|
|
858
889
|
endUtc: utcDateTimeSchema,
|
|
859
|
-
resourceId:
|
|
890
|
+
resourceId: z9.string().uuid()
|
|
860
891
|
}),
|
|
861
|
-
|
|
862
|
-
error:
|
|
863
|
-
message:
|
|
864
|
-
requestId:
|
|
892
|
+
z9.object({
|
|
893
|
+
error: z9.enum(bookingMoveErrorCodes),
|
|
894
|
+
message: z9.string().optional(),
|
|
895
|
+
requestId: z9.string().optional()
|
|
865
896
|
})
|
|
866
897
|
]);
|
|
867
|
-
var bookingManifestSchema =
|
|
868
|
-
schemaVersion:
|
|
869
|
-
siteId:
|
|
870
|
-
siteKeyPrefix:
|
|
871
|
-
bookingPageSlug:
|
|
872
|
-
embedMode:
|
|
873
|
-
productionOrigin:
|
|
898
|
+
var bookingManifestSchema = z9.object({
|
|
899
|
+
schemaVersion: z9.number().int().positive(),
|
|
900
|
+
siteId: z9.string().trim().min(1),
|
|
901
|
+
siteKeyPrefix: z9.string().startsWith("bk_pub_"),
|
|
902
|
+
bookingPageSlug: z9.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).min(2).max(64),
|
|
903
|
+
embedMode: z9.enum(["script", "web_component", "iframe"]).optional(),
|
|
904
|
+
productionOrigin: z9.string().url().optional()
|
|
874
905
|
}).passthrough();
|
|
875
906
|
var secretManifestKeys = /* @__PURE__ */ new Set([
|
|
876
907
|
"siteKey",
|
|
@@ -892,23 +923,23 @@ function redactBookingManifest(value) {
|
|
|
892
923
|
var BOOKING_CREATE_PAYLOAD_LIMIT_BYTES = 16 * 1024;
|
|
893
924
|
|
|
894
925
|
// ../shared/dist/bridge-protocol.js
|
|
895
|
-
import { z as
|
|
926
|
+
import { z as z17 } from "zod";
|
|
896
927
|
|
|
897
928
|
// ../shared/dist/field-id.js
|
|
898
|
-
import { z as
|
|
929
|
+
import { z as z10 } from "zod";
|
|
899
930
|
var FIELD_ID_PATTERN = /^[a-z][a-z0-9_-]*(\.[a-z][a-z0-9_-]*)+$/;
|
|
900
|
-
var fieldIdSchema =
|
|
931
|
+
var fieldIdSchema = z10.string().regex(FIELD_ID_PATTERN, "Invalid field id");
|
|
901
932
|
function isFieldId(value) {
|
|
902
933
|
return typeof value === "string" && fieldIdSchema.safeParse(value).success;
|
|
903
934
|
}
|
|
904
935
|
|
|
905
936
|
// ../shared/dist/field-types.js
|
|
906
|
-
import { z as
|
|
937
|
+
import { z as z11 } from "zod";
|
|
907
938
|
var FIELD_TYPES = ["text", "longText", "image", "link"];
|
|
908
|
-
var fieldTypeSchema =
|
|
939
|
+
var fieldTypeSchema = z11.enum(FIELD_TYPES);
|
|
909
940
|
|
|
910
941
|
// ../shared/dist/image-value.js
|
|
911
|
-
import { z as
|
|
942
|
+
import { z as z12 } from "zod";
|
|
912
943
|
var SUPPORTED_IMAGE_CONTENT_TYPES = [
|
|
913
944
|
"image/jpeg",
|
|
914
945
|
"image/png",
|
|
@@ -917,21 +948,21 @@ var SUPPORTED_IMAGE_CONTENT_TYPES = [
|
|
|
917
948
|
];
|
|
918
949
|
var maxImageUploadBytes = 10 * 1024 * 1024;
|
|
919
950
|
var largeImageWarningBytes = 2 * 1024 * 1024;
|
|
920
|
-
var imageContentTypeSchema =
|
|
921
|
-
var imageCropSchema =
|
|
922
|
-
x:
|
|
923
|
-
y:
|
|
924
|
-
zoom:
|
|
925
|
-
aspectRatio:
|
|
951
|
+
var imageContentTypeSchema = z12.enum(SUPPORTED_IMAGE_CONTENT_TYPES);
|
|
952
|
+
var imageCropSchema = z12.object({
|
|
953
|
+
x: z12.number().min(0).max(100),
|
|
954
|
+
y: z12.number().min(0).max(100),
|
|
955
|
+
zoom: z12.number().min(1).max(4),
|
|
956
|
+
aspectRatio: z12.number().positive().max(10)
|
|
926
957
|
});
|
|
927
|
-
var imageValueSchema =
|
|
928
|
-
src:
|
|
929
|
-
alt:
|
|
930
|
-
width:
|
|
931
|
-
height:
|
|
958
|
+
var imageValueSchema = z12.object({
|
|
959
|
+
src: z12.string().trim().min(1),
|
|
960
|
+
alt: z12.string().trim().min(1).max(300),
|
|
961
|
+
width: z12.number().int().positive().optional(),
|
|
962
|
+
height: z12.number().int().positive().optional(),
|
|
932
963
|
crop: imageCropSchema.optional(),
|
|
933
|
-
assetId:
|
|
934
|
-
finalStorageProvider:
|
|
964
|
+
assetId: z12.string().uuid().optional(),
|
|
965
|
+
finalStorageProvider: z12.enum([
|
|
935
966
|
"repo_static_assets",
|
|
936
967
|
"repo_handoff",
|
|
937
968
|
"site_owned_storage",
|
|
@@ -940,31 +971,36 @@ var imageValueSchema = z11.object({
|
|
|
940
971
|
});
|
|
941
972
|
|
|
942
973
|
// ../shared/dist/setup-deployment.js
|
|
943
|
-
import { z as
|
|
944
|
-
var version =
|
|
945
|
-
var
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
974
|
+
import { z as z13 } from "zod";
|
|
975
|
+
var version = z13.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u);
|
|
976
|
+
var siteSetupPackagesSchema = z13.object({
|
|
977
|
+
siteplane: version,
|
|
978
|
+
runtimeNext: version,
|
|
979
|
+
analytics: version.optional()
|
|
980
|
+
}).strict();
|
|
981
|
+
var hash = z13.string().regex(/^sha256:[0-9a-f]{64}$/u);
|
|
982
|
+
var setupDeploymentRecordSchema = z13.object({
|
|
983
|
+
version: z13.literal(1),
|
|
984
|
+
operationId: z13.string().uuid(),
|
|
985
|
+
provider: z13.literal("vercel"),
|
|
986
|
+
projectId: z13.string().regex(/^prj_[A-Za-z0-9]+$/u),
|
|
987
|
+
teamId: z13.string().regex(/^(?:team|user)_[A-Za-z0-9]+$/u),
|
|
988
|
+
origin: z13.string().url().refine((value) => {
|
|
953
989
|
const url = new URL(value);
|
|
954
990
|
return url.protocol === "https:" && url.origin === value && !url.username && !url.password;
|
|
955
991
|
}),
|
|
956
|
-
deploymentId:
|
|
957
|
-
revision:
|
|
992
|
+
deploymentId: z13.string().regex(/^dpl_[A-Za-z0-9]+$/u).nullable(),
|
|
993
|
+
revision: z13.string().regex(/^[0-9a-f]{40}$/u),
|
|
958
994
|
fieldContractHash: hash,
|
|
959
|
-
packages:
|
|
995
|
+
packages: siteSetupPackagesSchema,
|
|
960
996
|
configurationFingerprint: hash,
|
|
961
|
-
adminSecretGeneration:
|
|
962
|
-
revalidationGeneration:
|
|
963
|
-
startedAt:
|
|
964
|
-
environmentWrittenAt:
|
|
965
|
-
deployRequestedAt:
|
|
966
|
-
deadline:
|
|
967
|
-
phase:
|
|
997
|
+
adminSecretGeneration: z13.string().uuid(),
|
|
998
|
+
revalidationGeneration: z13.number().int().positive(),
|
|
999
|
+
startedAt: z13.string().datetime(),
|
|
1000
|
+
environmentWrittenAt: z13.string().datetime().nullable(),
|
|
1001
|
+
deployRequestedAt: z13.string().datetime().nullable(),
|
|
1002
|
+
deadline: z13.string().datetime(),
|
|
1003
|
+
phase: z13.enum([
|
|
968
1004
|
"planned",
|
|
969
1005
|
"environment_written",
|
|
970
1006
|
"deploy_requested",
|
|
@@ -972,37 +1008,37 @@ var setupDeploymentRecordSchema = z12.object({
|
|
|
972
1008
|
"verified",
|
|
973
1009
|
"failed"
|
|
974
1010
|
]),
|
|
975
|
-
build:
|
|
1011
|
+
build: z13.object({
|
|
976
1012
|
node: version,
|
|
977
|
-
packageManager:
|
|
1013
|
+
packageManager: z13.enum(["npm", "pnpm"]),
|
|
978
1014
|
packageManagerVersion: version,
|
|
979
1015
|
lockfileHash: hash
|
|
980
1016
|
}).strict().nullable()
|
|
981
1017
|
}).strict();
|
|
982
|
-
var setupDeploymentInputSchema =
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
action:
|
|
986
|
-
expectedOperationId:
|
|
1018
|
+
var setupDeploymentInputSchema = z13.discriminatedUnion("action", [
|
|
1019
|
+
z13.object({ action: z13.literal("read") }).strict(),
|
|
1020
|
+
z13.object({
|
|
1021
|
+
action: z13.literal("record"),
|
|
1022
|
+
expectedOperationId: z13.string().uuid().nullable(),
|
|
987
1023
|
record: setupDeploymentRecordSchema
|
|
988
1024
|
}).strict()
|
|
989
1025
|
]);
|
|
990
1026
|
|
|
991
1027
|
// ../shared/dist/site-setup.js
|
|
992
|
-
import { z as
|
|
1028
|
+
import { z as z16 } from "zod";
|
|
993
1029
|
|
|
994
1030
|
// ../shared/dist/site-field-contract.js
|
|
995
|
-
import { z as
|
|
1031
|
+
import { z as z15 } from "zod";
|
|
996
1032
|
|
|
997
1033
|
// ../shared/dist/fallback-hash.js
|
|
998
|
-
import { z as
|
|
1034
|
+
import { z as z14 } from "zod";
|
|
999
1035
|
var SAFE_REPRESENTATION_REASONS = [
|
|
1000
1036
|
"asset_import_rewritten",
|
|
1001
1037
|
"relative_url_normalized",
|
|
1002
1038
|
"line_endings_normalized",
|
|
1003
1039
|
"image_value_serialized"
|
|
1004
1040
|
];
|
|
1005
|
-
var safeRepresentationReasonSchema =
|
|
1041
|
+
var safeRepresentationReasonSchema = z14.enum(SAFE_REPRESENTATION_REASONS);
|
|
1006
1042
|
function canonicalizeFallbackValue(input) {
|
|
1007
1043
|
const fieldType = fieldTypeSchema.parse(input.fieldType);
|
|
1008
1044
|
if (input.safeRepresentationReason !== void 0) {
|
|
@@ -1038,10 +1074,10 @@ function createCanonicalFallbackHash(input) {
|
|
|
1038
1074
|
const payload = stableJsonStringify(canonical);
|
|
1039
1075
|
return `sha256:${sha256Hex(payload)}`;
|
|
1040
1076
|
}
|
|
1041
|
-
var linkFallbackSchema =
|
|
1042
|
-
href:
|
|
1043
|
-
label:
|
|
1044
|
-
target:
|
|
1077
|
+
var linkFallbackSchema = z14.object({
|
|
1078
|
+
href: z14.string().trim().min(1),
|
|
1079
|
+
label: z14.string().trim().min(1).optional(),
|
|
1080
|
+
target: z14.enum(["_self", "_blank"]).optional()
|
|
1045
1081
|
}).passthrough();
|
|
1046
1082
|
function normalizeLineEndings(value) {
|
|
1047
1083
|
return value.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
@@ -1219,67 +1255,67 @@ var SHA256_CONSTANTS = [
|
|
|
1219
1255
|
// ../shared/dist/site-field-contract.js
|
|
1220
1256
|
var fieldContractVersion = "1.0.0";
|
|
1221
1257
|
var scannerContractVersion = "1.0.0";
|
|
1222
|
-
var siteFieldStatusSchema =
|
|
1223
|
-
var semanticVersionSchema =
|
|
1224
|
-
var siteFieldRouteKeySchema =
|
|
1225
|
-
var repositoryRelativePosixPathSchema =
|
|
1226
|
-
var sourceMappingSchema =
|
|
1227
|
-
kind:
|
|
1258
|
+
var siteFieldStatusSchema = z15.enum(["hidden", "active"]);
|
|
1259
|
+
var semanticVersionSchema = z15.string().regex(/^\d+\.\d+\.\d+$/u);
|
|
1260
|
+
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.");
|
|
1261
|
+
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.");
|
|
1262
|
+
var sourceMappingSchema = z15.object({
|
|
1263
|
+
kind: z15.literal("function"),
|
|
1228
1264
|
filePath: repositoryRelativePosixPathSchema,
|
|
1229
|
-
exportName:
|
|
1230
|
-
sourcePath:
|
|
1265
|
+
exportName: z15.string().trim().min(1).optional(),
|
|
1266
|
+
sourcePath: z15.string().trim().min(1).optional(),
|
|
1231
1267
|
editTarget: fieldIdSchema.optional()
|
|
1232
1268
|
}).strict();
|
|
1233
|
-
var domMappingSchema =
|
|
1234
|
-
attribute:
|
|
1235
|
-
previewStrategy:
|
|
1269
|
+
var domMappingSchema = z15.object({
|
|
1270
|
+
attribute: z15.literal("data-siteplane-field-id"),
|
|
1271
|
+
previewStrategy: z15.enum(["dom", "event"])
|
|
1236
1272
|
}).strict();
|
|
1237
|
-
var fieldBaseSchema =
|
|
1273
|
+
var fieldBaseSchema = z15.object({
|
|
1238
1274
|
fieldId: fieldIdSchema,
|
|
1239
1275
|
routeKey: siteFieldRouteKeySchema,
|
|
1240
1276
|
source: sourceMappingSchema,
|
|
1241
1277
|
dom: domMappingSchema.optional()
|
|
1242
1278
|
}).strict();
|
|
1243
|
-
var linkFallbackSchema2 =
|
|
1244
|
-
href:
|
|
1245
|
-
label:
|
|
1246
|
-
target:
|
|
1279
|
+
var linkFallbackSchema2 = z15.object({
|
|
1280
|
+
href: z15.string().trim().min(1),
|
|
1281
|
+
label: z15.string().trim().min(1).optional(),
|
|
1282
|
+
target: z15.enum(["_self", "_blank"]).optional()
|
|
1247
1283
|
}).strict();
|
|
1248
|
-
var imageFallbackSchema =
|
|
1249
|
-
src:
|
|
1250
|
-
alt:
|
|
1251
|
-
width:
|
|
1252
|
-
height:
|
|
1253
|
-
crop:
|
|
1254
|
-
x:
|
|
1255
|
-
y:
|
|
1256
|
-
zoom:
|
|
1257
|
-
aspectRatio:
|
|
1284
|
+
var imageFallbackSchema = z15.object({
|
|
1285
|
+
src: z15.string().trim().min(1),
|
|
1286
|
+
alt: z15.string().trim().max(300),
|
|
1287
|
+
width: z15.number().int().positive().optional(),
|
|
1288
|
+
height: z15.number().int().positive().optional(),
|
|
1289
|
+
crop: z15.object({
|
|
1290
|
+
x: z15.number().min(0).max(100),
|
|
1291
|
+
y: z15.number().min(0).max(100),
|
|
1292
|
+
zoom: z15.number().min(1).max(4),
|
|
1293
|
+
aspectRatio: z15.number().positive().max(10)
|
|
1258
1294
|
}).strict().optional()
|
|
1259
1295
|
}).strict();
|
|
1260
|
-
var siteFieldContractFieldSchema =
|
|
1296
|
+
var siteFieldContractFieldSchema = z15.discriminatedUnion("fieldType", [
|
|
1261
1297
|
fieldBaseSchema.extend({
|
|
1262
|
-
fieldType:
|
|
1263
|
-
fallback:
|
|
1298
|
+
fieldType: z15.literal("text"),
|
|
1299
|
+
fallback: z15.string()
|
|
1264
1300
|
}),
|
|
1265
1301
|
fieldBaseSchema.extend({
|
|
1266
|
-
fieldType:
|
|
1267
|
-
fallback:
|
|
1302
|
+
fieldType: z15.literal("longText"),
|
|
1303
|
+
fallback: z15.string()
|
|
1268
1304
|
}),
|
|
1269
1305
|
fieldBaseSchema.extend({
|
|
1270
|
-
fieldType:
|
|
1306
|
+
fieldType: z15.literal("link"),
|
|
1271
1307
|
fallback: linkFallbackSchema2
|
|
1272
1308
|
}),
|
|
1273
1309
|
fieldBaseSchema.extend({
|
|
1274
|
-
fieldType:
|
|
1310
|
+
fieldType: z15.literal("image"),
|
|
1275
1311
|
fallback: imageFallbackSchema
|
|
1276
1312
|
})
|
|
1277
1313
|
]);
|
|
1278
|
-
var siteFieldContractV1Schema =
|
|
1279
|
-
version:
|
|
1314
|
+
var siteFieldContractV1Schema = z15.object({
|
|
1315
|
+
version: z15.literal(1),
|
|
1280
1316
|
fieldContractVersion: semanticVersionSchema,
|
|
1281
1317
|
scannerContractVersion: semanticVersionSchema,
|
|
1282
|
-
fields:
|
|
1318
|
+
fields: z15.array(siteFieldContractFieldSchema)
|
|
1283
1319
|
}).strict().superRefine((contract, context) => {
|
|
1284
1320
|
const seen = /* @__PURE__ */ new Set();
|
|
1285
1321
|
for (const [index, field] of contract.fields.entries()) {
|
|
@@ -1339,20 +1375,20 @@ var SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_LENGTH = 2e3;
|
|
|
1339
1375
|
var SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES = 8e3;
|
|
1340
1376
|
var CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES = 32 * 1024;
|
|
1341
1377
|
var CONTINUE_SITE_SETUP_HTTP_BODY_MAX_BYTES = 64 * 1024;
|
|
1342
|
-
var siteSetupRunStatusSchema =
|
|
1343
|
-
var siteSetupRunModeSchema =
|
|
1344
|
-
var siteSetupErrorCodeSchema =
|
|
1345
|
-
var editorFieldSchema =
|
|
1378
|
+
var siteSetupRunStatusSchema = z16.enum(SITE_SETUP_RUN_STATUSES);
|
|
1379
|
+
var siteSetupRunModeSchema = z16.enum(SITE_SETUP_RUN_MODES);
|
|
1380
|
+
var siteSetupErrorCodeSchema = z16.enum(SITE_SETUP_ERROR_CODES);
|
|
1381
|
+
var editorFieldSchema = z16.object({
|
|
1346
1382
|
fieldId: fieldIdSchema,
|
|
1347
|
-
label:
|
|
1348
|
-
subsection:
|
|
1349
|
-
description:
|
|
1350
|
-
required:
|
|
1351
|
-
maxLength:
|
|
1383
|
+
label: z16.string().trim().min(1),
|
|
1384
|
+
subsection: z16.string().trim().min(1).optional(),
|
|
1385
|
+
description: z16.string().trim().min(1).optional(),
|
|
1386
|
+
required: z16.boolean().optional(),
|
|
1387
|
+
maxLength: z16.number().int().positive().optional()
|
|
1352
1388
|
}).strict();
|
|
1353
|
-
var editorSectionSchema =
|
|
1354
|
-
label:
|
|
1355
|
-
fields:
|
|
1389
|
+
var editorSectionSchema = z16.object({
|
|
1390
|
+
label: z16.string().trim().min(1),
|
|
1391
|
+
fields: z16.array(editorFieldSchema).min(1)
|
|
1356
1392
|
}).strict().superRefine((section, context) => {
|
|
1357
1393
|
const closedSubsections = /* @__PURE__ */ new Set();
|
|
1358
1394
|
let currentSubsection;
|
|
@@ -1371,10 +1407,10 @@ var editorSectionSchema = z15.object({
|
|
|
1371
1407
|
}
|
|
1372
1408
|
}
|
|
1373
1409
|
});
|
|
1374
|
-
var editorRouteSchema =
|
|
1410
|
+
var editorRouteSchema = z16.object({
|
|
1375
1411
|
routeKey: siteFieldRouteKeySchema,
|
|
1376
|
-
label:
|
|
1377
|
-
sections:
|
|
1412
|
+
label: z16.string().trim().min(1),
|
|
1413
|
+
sections: z16.array(editorSectionSchema).min(1)
|
|
1378
1414
|
}).strict().superRefine((route, context) => {
|
|
1379
1415
|
const sections = /* @__PURE__ */ new Set();
|
|
1380
1416
|
for (const [index, section] of route.sections.entries()) {
|
|
@@ -1388,9 +1424,9 @@ var editorRouteSchema = z15.object({
|
|
|
1388
1424
|
sections.add(section.label);
|
|
1389
1425
|
}
|
|
1390
1426
|
});
|
|
1391
|
-
var editorDefinitionV1Schema =
|
|
1392
|
-
version:
|
|
1393
|
-
routes:
|
|
1427
|
+
var editorDefinitionV1Schema = z16.object({
|
|
1428
|
+
version: z16.literal(1),
|
|
1429
|
+
routes: z16.array(editorRouteSchema).min(1)
|
|
1394
1430
|
}).strict().superRefine((definition, context) => {
|
|
1395
1431
|
const routes = /* @__PURE__ */ new Set();
|
|
1396
1432
|
const fields = /* @__PURE__ */ new Set();
|
|
@@ -1428,7 +1464,7 @@ var editorDefinitionV1Schema = z15.object({
|
|
|
1428
1464
|
var forbiddenControlOrBidi = /[\u0000-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
|
|
1429
1465
|
var forbiddenOwnerNoteControlOrBidi = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
|
|
1430
1466
|
var unsafeLocator = /<\/?[a-z][^>]*>|\b(?:javascript|data:text\/html)\s*:|\bon[a-z]+\s*=/iu;
|
|
1431
|
-
var renderedPathSchema =
|
|
1467
|
+
var renderedPathSchema = z16.string().trim().transform((value) => value !== "/" ? value.replace(/\/+$/u, "") : value).superRefine((value, context) => {
|
|
1432
1468
|
if (!value.startsWith("/") || value === "$global" || value.includes("?") || value.includes("#")) {
|
|
1433
1469
|
context.addIssue({
|
|
1434
1470
|
code: "custom",
|
|
@@ -1438,7 +1474,7 @@ var renderedPathSchema = z15.string().trim().transform((value) => value !== "/"
|
|
|
1438
1474
|
addSafeByteIssues(value, CONTINUE_SITE_SETUP_RENDERED_PATH_MAX_BYTES, "renderedPath", context);
|
|
1439
1475
|
});
|
|
1440
1476
|
function normalizedSafeTextSchema(maxBytes, label) {
|
|
1441
|
-
return
|
|
1477
|
+
return z16.string().transform((value) => value.trim().replace(new RegExp("\\p{White_Space}+", "gu"), " ")).pipe(z16.string().min(1)).superRefine((value, context) => {
|
|
1442
1478
|
addSafeByteIssues(value, maxBytes, label, context);
|
|
1443
1479
|
if (label === "locatorHint" && unsafeLocator.test(value)) {
|
|
1444
1480
|
context.addIssue({
|
|
@@ -1455,12 +1491,12 @@ var correctionItemBase = {
|
|
|
1455
1491
|
requestedLabel: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_REQUESTED_LABEL_MAX_BYTES, "requestedLabel").optional(),
|
|
1456
1492
|
requestedSection: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_REQUESTED_SECTION_MAX_BYTES, "requestedSection").optional(),
|
|
1457
1493
|
requestedSubsection: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_REQUESTED_SUBSECTION_MAX_BYTES, "requestedSubsection").optional(),
|
|
1458
|
-
requestedSortOrder:
|
|
1494
|
+
requestedSortOrder: z16.number().int().nonnegative().optional()
|
|
1459
1495
|
};
|
|
1460
|
-
var setupCorrectionItemSchema =
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1496
|
+
var setupCorrectionItemSchema = z16.discriminatedUnion("kind", [
|
|
1497
|
+
z16.object({ kind: z16.literal("text"), ...correctionItemBase }).strict(),
|
|
1498
|
+
z16.object({ kind: z16.literal("link"), ...correctionItemBase }).strict(),
|
|
1499
|
+
z16.object({ kind: z16.literal("image"), ...correctionItemBase }).strict()
|
|
1464
1500
|
]).superRefine((item, context) => {
|
|
1465
1501
|
if (item.requestedSubsection && !item.requestedSection) {
|
|
1466
1502
|
context.addIssue({
|
|
@@ -1470,7 +1506,7 @@ var setupCorrectionItemSchema = z15.discriminatedUnion("kind", [
|
|
|
1470
1506
|
});
|
|
1471
1507
|
}
|
|
1472
1508
|
});
|
|
1473
|
-
var setupCorrectionItemsSchema =
|
|
1509
|
+
var setupCorrectionItemsSchema = z16.array(setupCorrectionItemSchema).max(CONTINUE_SITE_SETUP_MAX_ITEMS).superRefine((items, context) => {
|
|
1474
1510
|
const bytes = utf8Bytes(stableJsonStringify(items));
|
|
1475
1511
|
if (bytes > CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES) {
|
|
1476
1512
|
context.addIssue({
|
|
@@ -1479,7 +1515,7 @@ var setupCorrectionItemsSchema = z15.array(setupCorrectionItemSchema).max(CONTIN
|
|
|
1479
1515
|
});
|
|
1480
1516
|
}
|
|
1481
1517
|
});
|
|
1482
|
-
var siteSetupOwnerEditabilityNoteSchema =
|
|
1518
|
+
var siteSetupOwnerEditabilityNoteSchema = z16.string().max(SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_LENGTH).superRefine((value, context) => {
|
|
1483
1519
|
if (utf8Bytes(value) > SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES) {
|
|
1484
1520
|
context.addIssue({
|
|
1485
1521
|
code: "custom",
|
|
@@ -1504,7 +1540,7 @@ var SITE_SETUP_MODULE_SCOPES = {
|
|
|
1504
1540
|
"analytics:public_key_read"
|
|
1505
1541
|
]
|
|
1506
1542
|
};
|
|
1507
|
-
var siteSetupModulesSchema =
|
|
1543
|
+
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.");
|
|
1508
1544
|
function siteSetupScopes(modules) {
|
|
1509
1545
|
return modules.flatMap((module) => [...SITE_SETUP_MODULE_SCOPES[module]]);
|
|
1510
1546
|
}
|
|
@@ -1512,15 +1548,15 @@ function hasExactSiteSetupScopes(scopes, modules) {
|
|
|
1512
1548
|
const matches = (expected) => scopes.length === expected.length && expected.every((scope) => scopes.includes(scope));
|
|
1513
1549
|
return modules ? matches(siteSetupScopes(modules)) : matches(siteSetupScopes(["editing"])) || matches(siteSetupScopes(["editing", "analytics"]));
|
|
1514
1550
|
}
|
|
1515
|
-
var siteSetupActivityInputSchema =
|
|
1516
|
-
phase:
|
|
1551
|
+
var siteSetupActivityInputSchema = z16.object({
|
|
1552
|
+
phase: z16.enum([
|
|
1517
1553
|
"inspecting",
|
|
1518
1554
|
"integrating",
|
|
1519
1555
|
"deploying",
|
|
1520
1556
|
"verifying",
|
|
1521
1557
|
"repairing"
|
|
1522
1558
|
]),
|
|
1523
|
-
textId:
|
|
1559
|
+
textId: z16.enum([
|
|
1524
1560
|
"inspecting",
|
|
1525
1561
|
"integrating",
|
|
1526
1562
|
"deploying",
|
|
@@ -1529,8 +1565,8 @@ var siteSetupActivityInputSchema = z15.object({
|
|
|
1529
1565
|
])
|
|
1530
1566
|
}).strict().refine((value) => value.phase === value.textId, "Activity text must describe its phase.");
|
|
1531
1567
|
var nextActionFields = {
|
|
1532
|
-
actor:
|
|
1533
|
-
boundary:
|
|
1568
|
+
actor: z16.enum(["agent", "user", "siteplane"]),
|
|
1569
|
+
boundary: z16.enum([
|
|
1534
1570
|
"source",
|
|
1535
1571
|
"environment",
|
|
1536
1572
|
"deployment",
|
|
@@ -1538,33 +1574,33 @@ var nextActionFields = {
|
|
|
1538
1574
|
"authorization",
|
|
1539
1575
|
"review"
|
|
1540
1576
|
]),
|
|
1541
|
-
precondition:
|
|
1542
|
-
instruction:
|
|
1543
|
-
expectedEvidence:
|
|
1577
|
+
precondition: z16.string().min(1).max(1e3),
|
|
1578
|
+
instruction: z16.string().min(1).max(2e3),
|
|
1579
|
+
expectedEvidence: z16.string().min(1).max(1e3)
|
|
1544
1580
|
};
|
|
1545
|
-
var siteSetupNextActionSchema =
|
|
1546
|
-
|
|
1581
|
+
var siteSetupNextActionSchema = z16.discriminatedUnion("kind", [
|
|
1582
|
+
z16.object({
|
|
1547
1583
|
...nextActionFields,
|
|
1548
|
-
kind:
|
|
1549
|
-
command:
|
|
1584
|
+
kind: z16.literal("run_command"),
|
|
1585
|
+
command: z16.string().min(1).max(500)
|
|
1550
1586
|
}).strict(),
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1587
|
+
z16.object({ ...nextActionFields, kind: z16.literal("agent_edit") }).strict(),
|
|
1588
|
+
z16.object({ ...nextActionFields, kind: z16.literal("needs_user_action") }).strict(),
|
|
1589
|
+
z16.object({ ...nextActionFields, kind: z16.literal("wait") }).strict(),
|
|
1590
|
+
z16.object({ ...nextActionFields, kind: z16.literal("done") }).strict()
|
|
1555
1591
|
]);
|
|
1556
|
-
var siteSetupTaskRunSchema =
|
|
1557
|
-
runId:
|
|
1592
|
+
var siteSetupTaskRunSchema = z16.object({
|
|
1593
|
+
runId: z16.string().uuid(),
|
|
1558
1594
|
mode: siteSetupRunModeSchema,
|
|
1559
1595
|
status: siteSetupRunStatusSchema,
|
|
1560
|
-
fieldContractHash:
|
|
1561
|
-
deploymentOrigin:
|
|
1562
|
-
deploymentRevision:
|
|
1563
|
-
publicRuntimeKeyId:
|
|
1564
|
-
reviewVersion:
|
|
1596
|
+
fieldContractHash: z16.string().nullable(),
|
|
1597
|
+
deploymentOrigin: z16.string().url().nullable(),
|
|
1598
|
+
deploymentRevision: z16.string().nullable(),
|
|
1599
|
+
publicRuntimeKeyId: z16.string().uuid().nullable(),
|
|
1600
|
+
reviewVersion: z16.number().int().positive()
|
|
1565
1601
|
}).strict();
|
|
1566
|
-
var siteSetupTaskProgressSchema =
|
|
1567
|
-
progressStage:
|
|
1602
|
+
var siteSetupTaskProgressSchema = z16.object({
|
|
1603
|
+
progressStage: z16.enum([
|
|
1568
1604
|
"waiting_for_connection",
|
|
1569
1605
|
"agent_connected",
|
|
1570
1606
|
"project_context_loaded",
|
|
@@ -1574,73 +1610,70 @@ var siteSetupTaskProgressSchema = z15.object({
|
|
|
1574
1610
|
"action_required",
|
|
1575
1611
|
"completed"
|
|
1576
1612
|
]),
|
|
1577
|
-
lastVerifiedAt:
|
|
1578
|
-
lastActivityAt:
|
|
1579
|
-
activitySource:
|
|
1613
|
+
lastVerifiedAt: z16.string().datetime().nullable(),
|
|
1614
|
+
lastActivityAt: z16.string().datetime(),
|
|
1615
|
+
activitySource: z16.enum(["user", "server", "agent"]),
|
|
1580
1616
|
activityPhase: siteSetupActivityInputSchema.shape.phase.nullable(),
|
|
1581
1617
|
activityTextId: siteSetupActivityInputSchema.shape.textId.nullable()
|
|
1582
1618
|
}).strict();
|
|
1583
|
-
var siteSetupTaskSchema =
|
|
1584
|
-
contractVersion:
|
|
1585
|
-
workflow:
|
|
1586
|
-
goal:
|
|
1619
|
+
var siteSetupTaskSchema = z16.object({
|
|
1620
|
+
contractVersion: z16.literal("siteplane.setup-task.v2"),
|
|
1621
|
+
workflow: z16.enum(["initial_setup", "structure_update"]),
|
|
1622
|
+
goal: z16.string().min(1),
|
|
1587
1623
|
modules: siteSetupModulesSchema,
|
|
1588
|
-
authorizationVersion:
|
|
1589
|
-
authorizedScopes:
|
|
1590
|
-
site:
|
|
1591
|
-
siteId:
|
|
1592
|
-
portalPath:
|
|
1593
|
-
adminOrigin:
|
|
1624
|
+
authorizationVersion: z16.number().int().positive(),
|
|
1625
|
+
authorizedScopes: z16.array(z16.string()).min(2),
|
|
1626
|
+
site: z16.object({
|
|
1627
|
+
siteId: z16.string().uuid(),
|
|
1628
|
+
portalPath: z16.string(),
|
|
1629
|
+
adminOrigin: z16.string().url()
|
|
1594
1630
|
}).strict().nullable(),
|
|
1595
1631
|
run: siteSetupTaskRunSchema.nullable(),
|
|
1596
1632
|
progress: siteSetupTaskProgressSchema.nullable(),
|
|
1597
1633
|
deployment: setupDeploymentRecordSchema.nullable(),
|
|
1598
|
-
revalidationGeneration:
|
|
1599
|
-
assignment:
|
|
1600
|
-
deadline:
|
|
1601
|
-
userInstructions:
|
|
1634
|
+
revalidationGeneration: z16.number().int().positive(),
|
|
1635
|
+
assignment: z16.literal("owned"),
|
|
1636
|
+
deadline: z16.string().datetime().nullable(),
|
|
1637
|
+
userInstructions: z16.object({
|
|
1602
1638
|
text: siteSetupOwnerEditabilityNoteSchema,
|
|
1603
|
-
source:
|
|
1604
|
-
trust:
|
|
1639
|
+
source: z16.literal("user"),
|
|
1640
|
+
trust: z16.literal("untrusted")
|
|
1605
1641
|
}).strict(),
|
|
1606
1642
|
corrections: setupCorrectionItemsSchema,
|
|
1607
|
-
contentSelectionSummary:
|
|
1643
|
+
contentSelectionSummary: z16.object({
|
|
1608
1644
|
text: siteSetupOwnerEditabilityNoteSchema,
|
|
1609
|
-
source:
|
|
1610
|
-
trust:
|
|
1645
|
+
source: z16.literal("agent"),
|
|
1646
|
+
trust: z16.literal("untrusted")
|
|
1611
1647
|
}).strict().nullable(),
|
|
1612
|
-
environmentBindings:
|
|
1613
|
-
name:
|
|
1614
|
-
source:
|
|
1615
|
-
sensitivity:
|
|
1616
|
-
usage:
|
|
1617
|
-
evidence:
|
|
1648
|
+
environmentBindings: z16.array(z16.object({
|
|
1649
|
+
name: z16.string().regex(/^[A-Z][A-Z0-9_]+$/u),
|
|
1650
|
+
source: z16.string().min(1),
|
|
1651
|
+
sensitivity: z16.enum(["public", "secret"]),
|
|
1652
|
+
usage: z16.enum(["build", "server", "build_and_server"]),
|
|
1653
|
+
evidence: z16.string().min(1)
|
|
1618
1654
|
}).strict()),
|
|
1619
1655
|
nextAction: siteSetupNextActionSchema,
|
|
1620
|
-
error:
|
|
1621
|
-
code:
|
|
1656
|
+
error: z16.object({
|
|
1657
|
+
code: z16.string().regex(/^[a-z0-9_.]+$/u).max(160),
|
|
1622
1658
|
boundary: nextActionFields.boundary,
|
|
1623
1659
|
responsibleActor: nextActionFields.actor,
|
|
1624
|
-
retryable:
|
|
1625
|
-
retryAfter:
|
|
1626
|
-
requestId:
|
|
1660
|
+
retryable: z16.boolean(),
|
|
1661
|
+
retryAfter: z16.number().int().nonnegative().nullable(),
|
|
1662
|
+
requestId: z16.string().regex(/^[A-Za-z0-9_-]+$/u).max(128)
|
|
1627
1663
|
}).strict().nullable(),
|
|
1628
|
-
packages:
|
|
1629
|
-
|
|
1630
|
-
|
|
1664
|
+
packages: siteSetupPackagesSchema,
|
|
1665
|
+
communication: z16.object({
|
|
1666
|
+
beforeSourceChanges: z16.string().min(1),
|
|
1667
|
+
updates: z16.array(z16.string().min(1)).min(1),
|
|
1668
|
+
blocker: z16.string().min(1)
|
|
1631
1669
|
}).strict(),
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1670
|
+
discovery: z16.object({
|
|
1671
|
+
inspectPublicRoutes: z16.boolean(),
|
|
1672
|
+
contentKinds: z16.array(z16.enum(["text", "longText", "link", "image"])).min(1),
|
|
1673
|
+
rules: z16.array(z16.string().min(1)).min(1)
|
|
1636
1674
|
}).strict(),
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
contentKinds: z15.array(z15.enum(["text", "longText", "link", "image"])).min(1),
|
|
1640
|
-
rules: z15.array(z15.string().min(1)).min(1)
|
|
1641
|
-
}).strict(),
|
|
1642
|
-
steps: z15.array(z15.object({
|
|
1643
|
-
id: z15.enum([
|
|
1675
|
+
steps: z16.array(z16.object({
|
|
1676
|
+
id: z16.enum([
|
|
1644
1677
|
"inspect_repository",
|
|
1645
1678
|
"install_packages",
|
|
1646
1679
|
"instrument_fields",
|
|
@@ -1648,32 +1681,52 @@ var siteSetupTaskSchema = z15.object({
|
|
|
1648
1681
|
"deploy_production",
|
|
1649
1682
|
"verify_deployment"
|
|
1650
1683
|
]),
|
|
1651
|
-
instruction:
|
|
1684
|
+
instruction: z16.string().min(1)
|
|
1652
1685
|
}).strict()).length(6),
|
|
1653
|
-
completion:
|
|
1654
|
-
verifiedStatus:
|
|
1655
|
-
instruction:
|
|
1686
|
+
completion: z16.object({
|
|
1687
|
+
verifiedStatus: z16.literal("ready_for_review"),
|
|
1688
|
+
instruction: z16.string().min(1)
|
|
1656
1689
|
}).strict()
|
|
1657
|
-
}).strict().refine((task) => hasExactSiteSetupScopes(task.authorizedScopes, task.modules), "Task scopes must exactly match its modules.");
|
|
1658
|
-
var canonicalHashSchema =
|
|
1690
|
+
}).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.");
|
|
1691
|
+
var canonicalHashSchema = z16.string().regex(/^sha256:[0-9a-f]{64}$/iu);
|
|
1659
1692
|
var deploymentRevisionSchema = normalizedSafeTextSchema(256, "deploymentRevision");
|
|
1660
|
-
var continueSiteSetupInputSchema =
|
|
1661
|
-
siteId:
|
|
1662
|
-
runId:
|
|
1693
|
+
var continueSiteSetupInputSchema = z16.object({
|
|
1694
|
+
siteId: z16.string().uuid(),
|
|
1695
|
+
runId: z16.string().uuid(),
|
|
1696
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1697
|
+
mutationId: z16.string().uuid(),
|
|
1698
|
+
intent: z16.enum(["continue_review", "correct_completed_review"]),
|
|
1663
1699
|
expectedFieldContractHash: canonicalHashSchema,
|
|
1664
1700
|
expectedDeploymentRevision: deploymentRevisionSchema,
|
|
1665
1701
|
correctionItems: setupCorrectionItemsSchema,
|
|
1666
1702
|
ownerEditabilityNote: siteSetupOwnerEditabilityNoteSchema.optional()
|
|
1667
1703
|
}).strict();
|
|
1668
|
-
var saveSiteSetupOwnerNoteInputSchema =
|
|
1669
|
-
siteId:
|
|
1670
|
-
runId:
|
|
1704
|
+
var saveSiteSetupOwnerNoteInputSchema = z16.object({
|
|
1705
|
+
siteId: z16.string().uuid(),
|
|
1706
|
+
runId: z16.string().uuid(),
|
|
1707
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1671
1708
|
expectedFieldContractHash: canonicalHashSchema,
|
|
1672
1709
|
expectedDeploymentRevision: deploymentRevisionSchema,
|
|
1673
1710
|
ownerEditabilityNote: siteSetupOwnerEditabilityNoteSchema
|
|
1674
1711
|
}).strict();
|
|
1675
|
-
var
|
|
1676
|
-
|
|
1712
|
+
var setupReviewPreferenceSelectionSchema = z16.object({
|
|
1713
|
+
analyticsMode: z16.enum(["disabled", "session_only"]).nullable(),
|
|
1714
|
+
assetTargetType: z16.enum(["repo_static_assets", "siteplane_managed_fallback"]).nullable(),
|
|
1715
|
+
assetTargetId: z16.string().uuid().nullable()
|
|
1716
|
+
}).strict().refine((value) => value.assetTargetType !== null || value.assetTargetId === null, {
|
|
1717
|
+
message: "An asset target requires its delivery type."
|
|
1718
|
+
});
|
|
1719
|
+
var setupReviewPreferencesSchema = setupReviewPreferenceSelectionSchema.safeExtend({
|
|
1720
|
+
managedHostingApproved: z16.boolean()
|
|
1721
|
+
});
|
|
1722
|
+
var saveSetupReviewPreferencesInputSchema = z16.object({
|
|
1723
|
+
siteId: z16.string().uuid(),
|
|
1724
|
+
runId: z16.string().uuid(),
|
|
1725
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1726
|
+
preferences: setupReviewPreferenceSelectionSchema
|
|
1727
|
+
}).strict();
|
|
1728
|
+
var siteSetupContextInputSchema = z16.object({}).strict();
|
|
1729
|
+
var siteSetupApplyInputSchema = z16.object({
|
|
1677
1730
|
fieldContract: siteFieldContractV1Schema,
|
|
1678
1731
|
editorDefinition: editorDefinitionV1Schema,
|
|
1679
1732
|
contentSelectionSummary: siteSetupOwnerEditabilityNoteSchema.refine((text) => text.trim().length > 0, "Describe the selected content, important exclusions and any open gaps.")
|
|
@@ -1740,37 +1793,44 @@ var siteSetupApplyInputSchema = z15.object({
|
|
|
1740
1793
|
}
|
|
1741
1794
|
}
|
|
1742
1795
|
});
|
|
1743
|
-
var siteSetupVerifyInputSchema =
|
|
1744
|
-
deploymentUrl:
|
|
1796
|
+
var siteSetupVerifyInputSchema = z16.object({
|
|
1797
|
+
deploymentUrl: z16.string().url().refine((value) => value.startsWith("https://")),
|
|
1745
1798
|
deploymentRevision: deploymentRevisionSchema,
|
|
1746
|
-
wait:
|
|
1799
|
+
wait: z16.boolean().optional()
|
|
1747
1800
|
}).strict();
|
|
1748
|
-
var siteSetupEvidenceInputSchema =
|
|
1749
|
-
siteId:
|
|
1750
|
-
runId:
|
|
1801
|
+
var siteSetupEvidenceInputSchema = z16.object({
|
|
1802
|
+
siteId: z16.string().uuid(),
|
|
1803
|
+
runId: z16.string().uuid(),
|
|
1751
1804
|
expectedFieldContractHash: canonicalHashSchema,
|
|
1752
|
-
expectedDeploymentOrigin:
|
|
1805
|
+
expectedDeploymentOrigin: z16.string().url().refine((value) => value.startsWith("https://")),
|
|
1753
1806
|
expectedDeploymentRevision: deploymentRevisionSchema,
|
|
1754
|
-
publicRuntimeKeyId:
|
|
1807
|
+
publicRuntimeKeyId: z16.string().uuid(),
|
|
1755
1808
|
bridgeSessionId: normalizedSafeTextSchema(256, "bridgeSessionId"),
|
|
1756
|
-
observations:
|
|
1809
|
+
observations: z16.array(z16.object({
|
|
1757
1810
|
fieldId: fieldIdSchema,
|
|
1758
1811
|
routeKey: siteFieldRouteKeySchema,
|
|
1759
1812
|
renderedPath: renderedPathSchema,
|
|
1760
|
-
targetResolved:
|
|
1761
|
-
previewAck:
|
|
1813
|
+
targetResolved: z16.boolean(),
|
|
1814
|
+
previewAck: z16.boolean()
|
|
1762
1815
|
}).strict().refine((value) => !value.previewAck || value.targetResolved, "Preview ACK requires a resolved target.")).min(1).max(200)
|
|
1763
1816
|
}).strict();
|
|
1764
|
-
var
|
|
1765
|
-
siteId:
|
|
1766
|
-
runId:
|
|
1817
|
+
var completeSetupReviewInputSchema = z16.object({
|
|
1818
|
+
siteId: z16.string().uuid(),
|
|
1819
|
+
runId: z16.string().uuid(),
|
|
1820
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1767
1821
|
expectedFieldContractHash: canonicalHashSchema,
|
|
1768
1822
|
expectedDeploymentRevision: deploymentRevisionSchema,
|
|
1769
1823
|
expectedReadyFingerprint: canonicalHashSchema
|
|
1770
1824
|
}).strict();
|
|
1771
|
-
var
|
|
1772
|
-
siteId:
|
|
1773
|
-
|
|
1825
|
+
var activateSiteSetupInputSchema = z16.object({
|
|
1826
|
+
siteId: z16.string().uuid(),
|
|
1827
|
+
runId: z16.string().uuid(),
|
|
1828
|
+
expectedReviewVersion: z16.number().int().positive(),
|
|
1829
|
+
expectedSnapshotHash: canonicalHashSchema
|
|
1830
|
+
}).strict();
|
|
1831
|
+
var refreshSiteSetupDeploymentInputSchema = z16.object({
|
|
1832
|
+
siteId: z16.string().uuid(),
|
|
1833
|
+
deploymentUrl: z16.string().url().refine((value) => value.startsWith("https://")),
|
|
1774
1834
|
deploymentRevision: deploymentRevisionSchema
|
|
1775
1835
|
}).strict();
|
|
1776
1836
|
function addSafeByteIssues(value, maxBytes, label, context) {
|
|
@@ -1790,37 +1850,61 @@ function addSafeByteIssues(value, maxBytes, label, context) {
|
|
|
1790
1850
|
function utf8Bytes(value) {
|
|
1791
1851
|
return new TextEncoder().encode(value).byteLength;
|
|
1792
1852
|
}
|
|
1853
|
+
var setupActivationApprovalSchema = z16.object({
|
|
1854
|
+
reviewVersion: z16.number().int().positive(),
|
|
1855
|
+
snapshotHash: canonicalHashSchema,
|
|
1856
|
+
analytics: z16.object({
|
|
1857
|
+
status: z16.enum(["active", "skipped"]),
|
|
1858
|
+
reviewVersion: z16.number().int().positive(),
|
|
1859
|
+
generation: z16.number().int().nonnegative()
|
|
1860
|
+
}).optional()
|
|
1861
|
+
});
|
|
1862
|
+
var activateSetupModulesInputSchema = activateSiteSetupInputSchema.extend({
|
|
1863
|
+
analytics: z16.discriminatedUnion("decision", [
|
|
1864
|
+
z16.object({ decision: z16.literal("pending") }).strict(),
|
|
1865
|
+
z16.object({
|
|
1866
|
+
decision: z16.literal("enable"),
|
|
1867
|
+
expectedInstallationGeneration: z16.number().int().positive(),
|
|
1868
|
+
measurementApproved: z16.literal(true)
|
|
1869
|
+
}).strict(),
|
|
1870
|
+
z16.object({
|
|
1871
|
+
decision: z16.literal("skip"),
|
|
1872
|
+
expectedInstallationGeneration: z16.number().int().nonnegative(),
|
|
1873
|
+
continueWithoutAnalytics: z16.literal(true)
|
|
1874
|
+
}).strict()
|
|
1875
|
+
])
|
|
1876
|
+
}).strict();
|
|
1793
1877
|
|
|
1794
1878
|
// ../shared/dist/bridge-protocol.js
|
|
1795
1879
|
var BRIDGE_PROTOCOL_VERSION = 2;
|
|
1796
|
-
var bridgeRectSchema =
|
|
1797
|
-
x:
|
|
1798
|
-
y:
|
|
1799
|
-
width:
|
|
1800
|
-
height:
|
|
1880
|
+
var bridgeRectSchema = z17.object({
|
|
1881
|
+
x: z17.number(),
|
|
1882
|
+
y: z17.number(),
|
|
1883
|
+
width: z17.number().nonnegative(),
|
|
1884
|
+
height: z17.number().nonnegative()
|
|
1801
1885
|
});
|
|
1802
|
-
var previewTextValueSchema =
|
|
1803
|
-
fieldType:
|
|
1804
|
-
value:
|
|
1886
|
+
var previewTextValueSchema = z17.object({
|
|
1887
|
+
fieldType: z17.enum(["text", "longText"]),
|
|
1888
|
+
value: z17.string()
|
|
1805
1889
|
});
|
|
1806
|
-
var previewLinkValueSchema =
|
|
1807
|
-
fieldType:
|
|
1808
|
-
value:
|
|
1809
|
-
href:
|
|
1810
|
-
label:
|
|
1890
|
+
var previewLinkValueSchema = z17.object({
|
|
1891
|
+
fieldType: z17.literal("link"),
|
|
1892
|
+
value: z17.object({
|
|
1893
|
+
href: z17.string().trim().min(1),
|
|
1894
|
+
label: z17.string().trim().min(1).optional()
|
|
1811
1895
|
})
|
|
1812
1896
|
});
|
|
1813
|
-
var previewImageValueSchema =
|
|
1814
|
-
fieldType:
|
|
1897
|
+
var previewImageValueSchema = z17.object({
|
|
1898
|
+
fieldType: z17.literal("image"),
|
|
1815
1899
|
value: imageValueSchema
|
|
1816
1900
|
});
|
|
1817
|
-
var bridgePreviewValueSchema =
|
|
1901
|
+
var bridgePreviewValueSchema = z17.discriminatedUnion("fieldType", [
|
|
1818
1902
|
previewTextValueSchema,
|
|
1819
1903
|
previewLinkValueSchema,
|
|
1820
1904
|
previewImageValueSchema
|
|
1821
1905
|
]);
|
|
1822
|
-
var fieldSelectionModeSchema =
|
|
1823
|
-
var fieldBridgeMissingContentActionSchema =
|
|
1906
|
+
var fieldSelectionModeSchema = z17.enum(["replace", "range", "toggle"]);
|
|
1907
|
+
var fieldBridgeMissingContentActionSchema = z17.enum([
|
|
1824
1908
|
"add",
|
|
1825
1909
|
"select",
|
|
1826
1910
|
"remove"
|
|
@@ -1837,79 +1921,81 @@ var FIELD_BRIDGE_MESSAGE_TYPES = [
|
|
|
1837
1921
|
"siteplane:field-bridge:set-visual-control-state",
|
|
1838
1922
|
"siteplane:field-bridge:missing-content",
|
|
1839
1923
|
"siteplane:field-bridge:preview-scrolled",
|
|
1924
|
+
"siteplane:field-bridge:analytics-probe",
|
|
1925
|
+
"siteplane:field-bridge:analytics-probe-result",
|
|
1840
1926
|
"siteplane:field-bridge:error"
|
|
1841
1927
|
];
|
|
1842
|
-
var canonicalFieldContractHashSchema =
|
|
1843
|
-
var bridgeSectionSchema =
|
|
1844
|
-
var realRenderedPathSchema =
|
|
1845
|
-
var fieldBridgeIdentitySchema =
|
|
1846
|
-
publicRuntimeKeyId:
|
|
1928
|
+
var canonicalFieldContractHashSchema = z17.string().regex(/^sha256:[0-9a-f]{64}$/u);
|
|
1929
|
+
var bridgeSectionSchema = z17.string().trim().min(1).max(256);
|
|
1930
|
+
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.");
|
|
1931
|
+
var fieldBridgeIdentitySchema = z17.object({
|
|
1932
|
+
publicRuntimeKeyId: z17.string().uuid(),
|
|
1847
1933
|
fieldContractHash: canonicalFieldContractHashSchema,
|
|
1848
|
-
deploymentRevision:
|
|
1934
|
+
deploymentRevision: z17.string().trim().min(1).max(256)
|
|
1849
1935
|
}).strict();
|
|
1850
|
-
var fieldBridgeBaseSchema =
|
|
1851
|
-
version:
|
|
1852
|
-
type:
|
|
1853
|
-
siteId:
|
|
1854
|
-
sessionId:
|
|
1855
|
-
publicRuntimeKeyId:
|
|
1936
|
+
var fieldBridgeBaseSchema = z17.object({
|
|
1937
|
+
version: z17.literal(BRIDGE_PROTOCOL_VERSION),
|
|
1938
|
+
type: z17.enum(FIELD_BRIDGE_MESSAGE_TYPES),
|
|
1939
|
+
siteId: z17.string().uuid(),
|
|
1940
|
+
sessionId: z17.string().trim().min(1),
|
|
1941
|
+
publicRuntimeKeyId: z17.string().uuid(),
|
|
1856
1942
|
fieldContractHash: canonicalFieldContractHashSchema,
|
|
1857
|
-
deploymentRevision:
|
|
1858
|
-
requestId:
|
|
1859
|
-
sentAt:
|
|
1943
|
+
deploymentRevision: z17.string().trim().min(1).max(256),
|
|
1944
|
+
requestId: z17.string().trim().min(1),
|
|
1945
|
+
sentAt: z17.string().datetime()
|
|
1860
1946
|
}).strict();
|
|
1861
|
-
var fieldBridgeFieldSchema =
|
|
1947
|
+
var fieldBridgeFieldSchema = z17.object({
|
|
1862
1948
|
fieldId: fieldIdSchema,
|
|
1863
1949
|
fieldType: fieldTypeSchema,
|
|
1864
1950
|
routeKey: siteFieldRouteKeySchema,
|
|
1865
1951
|
renderedPath: realRenderedPathSchema,
|
|
1866
|
-
sourcePath:
|
|
1952
|
+
sourcePath: z17.string().trim().min(1).optional(),
|
|
1867
1953
|
editTarget: fieldIdSchema,
|
|
1868
1954
|
rect: bridgeRectSchema,
|
|
1869
|
-
targetResolved:
|
|
1955
|
+
targetResolved: z17.literal(true),
|
|
1870
1956
|
currentValue: bridgePreviewValueSchema.optional()
|
|
1871
1957
|
}).strict();
|
|
1872
1958
|
var fieldBridgeInitMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1873
|
-
type:
|
|
1874
|
-
payload:
|
|
1875
|
-
adminOrigin:
|
|
1876
|
-
customerOrigin:
|
|
1959
|
+
type: z17.literal("siteplane:field-bridge:init"),
|
|
1960
|
+
payload: z17.object({
|
|
1961
|
+
adminOrigin: z17.string().url(),
|
|
1962
|
+
customerOrigin: z17.string().url(),
|
|
1877
1963
|
renderedPath: realRenderedPathSchema
|
|
1878
1964
|
}).strict()
|
|
1879
1965
|
});
|
|
1880
1966
|
var fieldBridgeReadyMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1881
|
-
type:
|
|
1882
|
-
payload:
|
|
1967
|
+
type: z17.literal("siteplane:field-bridge:ready"),
|
|
1968
|
+
payload: z17.object({
|
|
1883
1969
|
renderedPath: realRenderedPathSchema,
|
|
1884
|
-
fieldCount:
|
|
1885
|
-
capabilities:
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
])
|
|
1970
|
+
fieldCount: z17.number().int().nonnegative(),
|
|
1971
|
+
capabilities: z17.tuple([
|
|
1972
|
+
z17.literal("field_selection"),
|
|
1973
|
+
z17.literal("preview_values"),
|
|
1974
|
+
z17.literal("field_evidence"),
|
|
1975
|
+
z17.literal("visual_field_control")
|
|
1976
|
+
]).rest(z17.literal("analytics_preview_readiness")).refine((capabilities) => capabilities.length <= 5)
|
|
1891
1977
|
}).strict()
|
|
1892
1978
|
});
|
|
1893
1979
|
var fieldBridgeFieldsMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1894
|
-
type:
|
|
1895
|
-
payload:
|
|
1980
|
+
type: z17.literal("siteplane:field-bridge:fields"),
|
|
1981
|
+
payload: z17.object({
|
|
1896
1982
|
renderedPath: realRenderedPathSchema,
|
|
1897
|
-
fields:
|
|
1983
|
+
fields: z17.array(fieldBridgeFieldSchema)
|
|
1898
1984
|
}).strict()
|
|
1899
1985
|
});
|
|
1900
1986
|
var fieldBridgeSelectFieldMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1901
|
-
type:
|
|
1902
|
-
payload:
|
|
1987
|
+
type: z17.literal("siteplane:field-bridge:select-field"),
|
|
1988
|
+
payload: z17.object({
|
|
1903
1989
|
fieldId: fieldIdSchema,
|
|
1904
1990
|
selectionMode: fieldSelectionModeSchema
|
|
1905
1991
|
}).strict()
|
|
1906
1992
|
});
|
|
1907
1993
|
var fieldBridgeSetSelectedFieldMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1908
|
-
type:
|
|
1909
|
-
payload:
|
|
1910
|
-
fieldIds:
|
|
1994
|
+
type: z17.literal("siteplane:field-bridge:set-selected-field"),
|
|
1995
|
+
payload: z17.object({
|
|
1996
|
+
fieldIds: z17.array(fieldIdSchema).max(200),
|
|
1911
1997
|
primaryFieldId: fieldIdSchema.nullable(),
|
|
1912
|
-
scrollIntoView:
|
|
1998
|
+
scrollIntoView: z17.boolean().optional()
|
|
1913
1999
|
}).strict().superRefine((value, context) => {
|
|
1914
2000
|
if (value.fieldIds.length > 0 && value.primaryFieldId === null) {
|
|
1915
2001
|
context.addIssue({
|
|
@@ -1928,58 +2014,76 @@ var fieldBridgeSetSelectedFieldMessageSchema = fieldBridgeBaseSchema.extend({
|
|
|
1928
2014
|
})
|
|
1929
2015
|
});
|
|
1930
2016
|
var fieldBridgeApplyPreviewValuesMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1931
|
-
type:
|
|
1932
|
-
payload:
|
|
2017
|
+
type: z17.literal("siteplane:field-bridge:apply-preview-values"),
|
|
2018
|
+
payload: z17.object({ values: z17.record(fieldIdSchema, bridgePreviewValueSchema) }).strict()
|
|
1933
2019
|
});
|
|
1934
2020
|
var fieldBridgeTestPreviewValuesMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1935
|
-
type:
|
|
1936
|
-
payload:
|
|
2021
|
+
type: z17.literal("siteplane:field-bridge:test-preview-values"),
|
|
2022
|
+
payload: z17.object({ fieldIds: z17.array(fieldIdSchema).min(1).max(200) }).strict()
|
|
1937
2023
|
});
|
|
1938
2024
|
var fieldBridgePreviewAckMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1939
|
-
type:
|
|
1940
|
-
payload:
|
|
1941
|
-
ackRequestId:
|
|
1942
|
-
kind:
|
|
2025
|
+
type: z17.literal("siteplane:field-bridge:preview-ack"),
|
|
2026
|
+
payload: z17.object({
|
|
2027
|
+
ackRequestId: z17.string().trim().min(1),
|
|
2028
|
+
kind: z17.enum(["apply", "test"]),
|
|
1943
2029
|
renderedPath: realRenderedPathSchema,
|
|
1944
|
-
fieldIds:
|
|
2030
|
+
fieldIds: z17.array(fieldIdSchema).max(200)
|
|
1945
2031
|
}).strict()
|
|
1946
2032
|
});
|
|
1947
2033
|
var fieldBridgeSetVisualControlStateMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1948
|
-
type:
|
|
1949
|
-
payload:
|
|
1950
|
-
enabled:
|
|
1951
|
-
fieldProximityEnabled:
|
|
1952
|
-
pendingKeys:
|
|
1953
|
-
activeFieldIds:
|
|
1954
|
-
fieldSections:
|
|
1955
|
-
selectedPending:
|
|
1956
|
-
key:
|
|
1957
|
-
locatorHint:
|
|
2034
|
+
type: z17.literal("siteplane:field-bridge:set-visual-control-state"),
|
|
2035
|
+
payload: z17.object({
|
|
2036
|
+
enabled: z17.boolean(),
|
|
2037
|
+
fieldProximityEnabled: z17.boolean(),
|
|
2038
|
+
pendingKeys: z17.array(z17.string().trim().min(1).max(2048)).max(50),
|
|
2039
|
+
activeFieldIds: z17.array(fieldIdSchema),
|
|
2040
|
+
fieldSections: z17.record(fieldIdSchema, bridgeSectionSchema),
|
|
2041
|
+
selectedPending: z17.array(z17.object({
|
|
2042
|
+
key: z17.string().trim().min(1).max(2048),
|
|
2043
|
+
locatorHint: z17.string().trim().min(1).max(2048)
|
|
1958
2044
|
}).strict()).max(50),
|
|
1959
|
-
scrollPendingIntoView:
|
|
2045
|
+
scrollPendingIntoView: z17.boolean().optional()
|
|
1960
2046
|
}).strict()
|
|
1961
2047
|
});
|
|
1962
2048
|
var fieldBridgeMissingContentMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1963
|
-
type:
|
|
1964
|
-
payload:
|
|
2049
|
+
type: z17.literal("siteplane:field-bridge:missing-content"),
|
|
2050
|
+
payload: z17.object({
|
|
1965
2051
|
action: fieldBridgeMissingContentActionSchema,
|
|
1966
2052
|
item: setupCorrectionItemSchema,
|
|
1967
2053
|
suggestedSection: bridgeSectionSchema.optional()
|
|
1968
2054
|
}).strict()
|
|
1969
2055
|
});
|
|
1970
2056
|
var fieldBridgePreviewScrolledMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1971
|
-
type:
|
|
1972
|
-
payload:
|
|
2057
|
+
type: z17.literal("siteplane:field-bridge:preview-scrolled"),
|
|
2058
|
+
payload: z17.object({ renderedPath: realRenderedPathSchema }).strict()
|
|
2059
|
+
});
|
|
2060
|
+
var analyticsPreviewChallengeSchema = z17.object({
|
|
2061
|
+
bridgeSessionId: z17.string().uuid(),
|
|
2062
|
+
challenge: z17.string().min(32).max(512),
|
|
2063
|
+
testRunId: z17.string().trim().min(1).max(160),
|
|
2064
|
+
expiresAt: z17.string().datetime()
|
|
2065
|
+
}).strict();
|
|
2066
|
+
var fieldBridgeAnalyticsProbeSchema = fieldBridgeBaseSchema.extend({
|
|
2067
|
+
type: z17.literal("siteplane:field-bridge:analytics-probe"),
|
|
2068
|
+
requestId: z17.string().min(1).max(256),
|
|
2069
|
+
payload: analyticsPreviewChallengeSchema
|
|
2070
|
+
});
|
|
2071
|
+
var fieldBridgeAnalyticsProbeResultSchema = fieldBridgeBaseSchema.extend({
|
|
2072
|
+
type: z17.literal("siteplane:field-bridge:analytics-probe-result"),
|
|
2073
|
+
payload: z17.object({
|
|
2074
|
+
ackRequestId: z17.string().min(1).max(256),
|
|
2075
|
+
status: z17.enum(["recorded", "failed"])
|
|
2076
|
+
}).strict()
|
|
1973
2077
|
});
|
|
1974
2078
|
var fieldBridgeErrorMessageSchema = fieldBridgeBaseSchema.extend({
|
|
1975
|
-
type:
|
|
1976
|
-
payload:
|
|
1977
|
-
code:
|
|
1978
|
-
message:
|
|
1979
|
-
recoverable:
|
|
2079
|
+
type: z17.literal("siteplane:field-bridge:error"),
|
|
2080
|
+
payload: z17.object({
|
|
2081
|
+
code: z17.string().trim().min(1),
|
|
2082
|
+
message: z17.string().trim().min(1),
|
|
2083
|
+
recoverable: z17.boolean().default(false)
|
|
1980
2084
|
}).strict()
|
|
1981
2085
|
});
|
|
1982
|
-
var fieldBridgeMessageSchema =
|
|
2086
|
+
var fieldBridgeMessageSchema = z17.discriminatedUnion("type", [
|
|
1983
2087
|
fieldBridgeInitMessageSchema,
|
|
1984
2088
|
fieldBridgeReadyMessageSchema,
|
|
1985
2089
|
fieldBridgeFieldsMessageSchema,
|
|
@@ -1991,55 +2095,57 @@ var fieldBridgeMessageSchema = z16.discriminatedUnion("type", [
|
|
|
1991
2095
|
fieldBridgeSetVisualControlStateMessageSchema,
|
|
1992
2096
|
fieldBridgeMissingContentMessageSchema,
|
|
1993
2097
|
fieldBridgePreviewScrolledMessageSchema,
|
|
1994
|
-
fieldBridgeErrorMessageSchema
|
|
2098
|
+
fieldBridgeErrorMessageSchema,
|
|
2099
|
+
fieldBridgeAnalyticsProbeSchema,
|
|
2100
|
+
fieldBridgeAnalyticsProbeResultSchema
|
|
1995
2101
|
]);
|
|
1996
2102
|
|
|
1997
2103
|
// ../shared/dist/commands.js
|
|
1998
|
-
import { z as
|
|
2104
|
+
import { z as z19 } from "zod";
|
|
1999
2105
|
|
|
2000
2106
|
// ../shared/dist/errors.js
|
|
2001
|
-
import { z as
|
|
2107
|
+
import { z as z18 } from "zod";
|
|
2002
2108
|
var UI_ERROR_CATEGORIES = [
|
|
2003
2109
|
"site_member",
|
|
2004
2110
|
"workspace_member",
|
|
2005
2111
|
"internal"
|
|
2006
2112
|
];
|
|
2007
|
-
var uiErrorCategorySchema =
|
|
2008
|
-
var commandErrorPayloadSchema =
|
|
2009
|
-
code:
|
|
2010
|
-
message:
|
|
2113
|
+
var uiErrorCategorySchema = z18.enum(UI_ERROR_CATEGORIES);
|
|
2114
|
+
var commandErrorPayloadSchema = z18.object({
|
|
2115
|
+
code: z18.string().min(1),
|
|
2116
|
+
message: z18.string().min(1),
|
|
2011
2117
|
category: uiErrorCategorySchema,
|
|
2012
|
-
details:
|
|
2118
|
+
details: z18.record(z18.string(), z18.unknown()).optional()
|
|
2013
2119
|
});
|
|
2014
2120
|
|
|
2015
2121
|
// ../shared/dist/commands.js
|
|
2016
|
-
var commandSuccessSchema =
|
|
2017
|
-
ok:
|
|
2018
|
-
data:
|
|
2122
|
+
var commandSuccessSchema = z19.object({
|
|
2123
|
+
ok: z19.literal(true),
|
|
2124
|
+
data: z19.unknown()
|
|
2019
2125
|
});
|
|
2020
|
-
var commandErrorSchema =
|
|
2021
|
-
ok:
|
|
2126
|
+
var commandErrorSchema = z19.object({
|
|
2127
|
+
ok: z19.literal(false),
|
|
2022
2128
|
error: commandErrorPayloadSchema
|
|
2023
2129
|
});
|
|
2024
|
-
var commandResultSchema =
|
|
2130
|
+
var commandResultSchema = z19.discriminatedUnion("ok", [
|
|
2025
2131
|
commandSuccessSchema,
|
|
2026
2132
|
commandErrorSchema
|
|
2027
2133
|
]);
|
|
2028
2134
|
|
|
2029
2135
|
// ../shared/dist/editor-settings.js
|
|
2030
|
-
import { z as
|
|
2031
|
-
var editorColorSchemeSchema =
|
|
2136
|
+
import { z as z20 } from "zod";
|
|
2137
|
+
var editorColorSchemeSchema = z20.enum([
|
|
2032
2138
|
"paper",
|
|
2033
2139
|
"slate",
|
|
2034
2140
|
"siteplane",
|
|
2035
2141
|
"bloom"
|
|
2036
2142
|
]);
|
|
2037
2143
|
var editorColorSchemes = editorColorSchemeSchema.options;
|
|
2038
|
-
var editorColorModeSchema =
|
|
2144
|
+
var editorColorModeSchema = z20.enum(["light", "dark"]);
|
|
2039
2145
|
var editorColorModes = editorColorModeSchema.options;
|
|
2040
2146
|
|
|
2041
2147
|
// ../shared/dist/site-slug.js
|
|
2042
|
-
import { z as
|
|
2148
|
+
import { z as z21 } from "zod";
|
|
2043
2149
|
var SITE_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
2044
2150
|
var RESERVED_SITE_SLUGS = /* @__PURE__ */ new Set([
|
|
2045
2151
|
"account",
|
|
@@ -2056,31 +2162,31 @@ var RESERVED_SITE_SLUGS = /* @__PURE__ */ new Set([
|
|
|
2056
2162
|
"support",
|
|
2057
2163
|
"workspace"
|
|
2058
2164
|
]);
|
|
2059
|
-
var siteSlugSchema =
|
|
2165
|
+
var siteSlugSchema = z21.string().regex(SITE_SLUG_PATTERN, "Invalid site slug").refine((value) => !RESERVED_SITE_SLUGS.has(value), "Reserved site slug");
|
|
2060
2166
|
|
|
2061
2167
|
// ../shared/dist/entitlements.js
|
|
2062
|
-
import { z as
|
|
2063
|
-
var entitlementSnapshotSchema =
|
|
2064
|
-
planKey:
|
|
2065
|
-
sitesLimit:
|
|
2066
|
-
siteMembersPerSiteLimit:
|
|
2067
|
-
customAdminDomainsEnabled:
|
|
2068
|
-
agentMcpEnabled:
|
|
2069
|
-
emailNotificationsEnabled:
|
|
2070
|
-
analyticsEnabled:
|
|
2071
|
-
analyticsSitesLimit:
|
|
2072
|
-
analyticsPortalPerformanceEnabled:
|
|
2073
|
-
analyticsMonthlyReportsEnabled:
|
|
2074
|
-
analyticsAiSummaryEnabled:
|
|
2075
|
-
analyticsRawEventRetentionDays:
|
|
2076
|
-
analyticsMonthlyEventLimit:
|
|
2077
|
-
bookingEnabled:
|
|
2078
|
-
bookingSitesLimit:
|
|
2079
|
-
bookingPortalManagementEnabled:
|
|
2080
|
-
bookingResourcesPerSiteLimit:
|
|
2081
|
-
bookingServicesPerSiteLimit:
|
|
2082
|
-
bookingMonthlyBookingsLimit:
|
|
2083
|
-
bookingRemindersEnabled:
|
|
2168
|
+
import { z as z22 } from "zod";
|
|
2169
|
+
var entitlementSnapshotSchema = z22.object({
|
|
2170
|
+
planKey: z22.string().trim().min(1),
|
|
2171
|
+
sitesLimit: z22.number().int().positive(),
|
|
2172
|
+
siteMembersPerSiteLimit: z22.number().int().positive(),
|
|
2173
|
+
customAdminDomainsEnabled: z22.boolean(),
|
|
2174
|
+
agentMcpEnabled: z22.boolean(),
|
|
2175
|
+
emailNotificationsEnabled: z22.boolean(),
|
|
2176
|
+
analyticsEnabled: z22.boolean(),
|
|
2177
|
+
analyticsSitesLimit: z22.number().int().min(0),
|
|
2178
|
+
analyticsPortalPerformanceEnabled: z22.boolean(),
|
|
2179
|
+
analyticsMonthlyReportsEnabled: z22.boolean(),
|
|
2180
|
+
analyticsAiSummaryEnabled: z22.boolean(),
|
|
2181
|
+
analyticsRawEventRetentionDays: z22.number().int().min(1).max(ANALYTICS_RETENTION_DEFAULTS.maxRawEventRetentionDaysWithoutAdr),
|
|
2182
|
+
analyticsMonthlyEventLimit: z22.number().int().min(0),
|
|
2183
|
+
bookingEnabled: z22.boolean().default(false),
|
|
2184
|
+
bookingSitesLimit: z22.number().int().min(0).default(0),
|
|
2185
|
+
bookingPortalManagementEnabled: z22.boolean().default(false),
|
|
2186
|
+
bookingResourcesPerSiteLimit: z22.number().int().min(0).default(0),
|
|
2187
|
+
bookingServicesPerSiteLimit: z22.number().int().min(0).default(0),
|
|
2188
|
+
bookingMonthlyBookingsLimit: z22.number().int().min(0).default(0),
|
|
2189
|
+
bookingRemindersEnabled: z22.boolean().default(false)
|
|
2084
2190
|
});
|
|
2085
2191
|
var EARLY_ACCESS_PLAN = {
|
|
2086
2192
|
planKey: "early_access_2026",
|
|
@@ -2089,8 +2195,8 @@ var EARLY_ACCESS_PLAN = {
|
|
|
2089
2195
|
customAdminDomainsEnabled: true,
|
|
2090
2196
|
agentMcpEnabled: true,
|
|
2091
2197
|
emailNotificationsEnabled: true,
|
|
2092
|
-
analyticsEnabled:
|
|
2093
|
-
analyticsSitesLimit:
|
|
2198
|
+
analyticsEnabled: true,
|
|
2199
|
+
analyticsSitesLimit: 3,
|
|
2094
2200
|
analyticsPortalPerformanceEnabled: false,
|
|
2095
2201
|
analyticsMonthlyReportsEnabled: false,
|
|
2096
2202
|
analyticsAiSummaryEnabled: false,
|
|
@@ -2106,7 +2212,7 @@ var EARLY_ACCESS_PLAN = {
|
|
|
2106
2212
|
};
|
|
2107
2213
|
|
|
2108
2214
|
// ../shared/dist/readiness.js
|
|
2109
|
-
import { z as
|
|
2215
|
+
import { z as z23 } from "zod";
|
|
2110
2216
|
var READINESS_CHECK_KEYS = [
|
|
2111
2217
|
"agent_instructions_installed",
|
|
2112
2218
|
"runtime_package_connected",
|
|
@@ -2121,19 +2227,80 @@ var READINESS_STATUSES = [
|
|
|
2121
2227
|
"failing",
|
|
2122
2228
|
"warning"
|
|
2123
2229
|
];
|
|
2124
|
-
var readinessCheckKeySchema =
|
|
2125
|
-
var readinessStatusSchema =
|
|
2230
|
+
var readinessCheckKeySchema = z23.enum(READINESS_CHECK_KEYS);
|
|
2231
|
+
var readinessStatusSchema = z23.enum(READINESS_STATUSES);
|
|
2126
2232
|
|
|
2127
2233
|
// ../shared/dist/site.js
|
|
2128
|
-
import { z as
|
|
2234
|
+
import { z as z24 } from "zod";
|
|
2129
2235
|
var SITE_STATUSES = [
|
|
2130
2236
|
"setup",
|
|
2131
2237
|
"active",
|
|
2132
2238
|
"disabled",
|
|
2133
2239
|
"archived"
|
|
2134
2240
|
];
|
|
2135
|
-
var siteStatusSchema =
|
|
2136
|
-
var websiteUrlSchema =
|
|
2241
|
+
var siteStatusSchema = z24.enum(SITE_STATUSES);
|
|
2242
|
+
var websiteUrlSchema = z24.string().trim().url().refine((value) => value.startsWith("https://") || value.startsWith("http://"), "Website URL must use http or https");
|
|
2243
|
+
|
|
2244
|
+
// ../shared/dist/setup-assets.js
|
|
2245
|
+
import { z as z25 } from "zod";
|
|
2246
|
+
var configureSetupAssetTargetInputSchema = z25.object({
|
|
2247
|
+
siteId: z25.string().uuid(),
|
|
2248
|
+
runId: z25.string().uuid(),
|
|
2249
|
+
expectedReviewVersion: z25.number().int().positive(),
|
|
2250
|
+
expectedSnapshotHash: z25.string().regex(/^sha256:[0-9a-f]{64}$/u),
|
|
2251
|
+
mutationId: z25.string().uuid(),
|
|
2252
|
+
expectedApprovalId: z25.string().uuid().nullable(),
|
|
2253
|
+
targetId: z25.string().uuid().nullable(),
|
|
2254
|
+
targetType: z25.enum(["repo_static_assets", "siteplane_managed_fallback"]),
|
|
2255
|
+
approveManagedHosting: z25.boolean()
|
|
2256
|
+
}).strict().refine((value) => value.targetType === "siteplane_managed_fallback" || !value.approveManagedHosting);
|
|
2257
|
+
var setupAssetTargetApprovalSchema = z25.object({
|
|
2258
|
+
id: z25.string().uuid(),
|
|
2259
|
+
runId: z25.string().uuid(),
|
|
2260
|
+
reviewVersion: z25.number().int().positive(),
|
|
2261
|
+
snapshotHash: z25.string().regex(/^sha256:[0-9a-f]{64}$/u),
|
|
2262
|
+
targetId: z25.string().uuid(),
|
|
2263
|
+
targetType: z25.enum(["repo_static_assets", "siteplane_managed_fallback"]),
|
|
2264
|
+
targetRevision: z25.number().int().positive(),
|
|
2265
|
+
deploymentOrigin: z25.string().url(),
|
|
2266
|
+
gitConnectionId: z25.string().uuid().nullable(),
|
|
2267
|
+
gitRevision: z25.number().int().positive().nullable(),
|
|
2268
|
+
managedHostingApproved: z25.boolean(),
|
|
2269
|
+
actorUserId: z25.string().uuid(),
|
|
2270
|
+
approvedAt: z25.string().datetime({ offset: true })
|
|
2271
|
+
}).strict();
|
|
2272
|
+
var setupAssetReadinessSchema = z25.union([
|
|
2273
|
+
z25.object({
|
|
2274
|
+
status: z25.enum([
|
|
2275
|
+
"not_required",
|
|
2276
|
+
"needs_choice",
|
|
2277
|
+
"stale_setup_review",
|
|
2278
|
+
"permission_denied"
|
|
2279
|
+
])
|
|
2280
|
+
}).strict(),
|
|
2281
|
+
z25.object({
|
|
2282
|
+
status: z25.literal("stale_approval"),
|
|
2283
|
+
approval: setupAssetTargetApprovalSchema.optional()
|
|
2284
|
+
}).strict(),
|
|
2285
|
+
z25.object({
|
|
2286
|
+
status: z25.literal("not_verified"),
|
|
2287
|
+
approval: setupAssetTargetApprovalSchema,
|
|
2288
|
+
jobId: z25.string().uuid().optional(),
|
|
2289
|
+
checkedAt: z25.string().datetime({ offset: true }).nullable().optional()
|
|
2290
|
+
}).strict(),
|
|
2291
|
+
z25.object({
|
|
2292
|
+
status: z25.enum(["ready", "checking", "retrying"]),
|
|
2293
|
+
approval: setupAssetTargetApprovalSchema,
|
|
2294
|
+
jobId: z25.string().uuid(),
|
|
2295
|
+
checkedAt: z25.string().datetime({ offset: true }).nullable()
|
|
2296
|
+
}).strict().refine((value) => value.status !== "ready" || value.checkedAt !== null)
|
|
2297
|
+
]);
|
|
2298
|
+
var checkSetupAssetTargetInputSchema = z25.object({
|
|
2299
|
+
siteId: z25.string().uuid(),
|
|
2300
|
+
runId: z25.string().uuid(),
|
|
2301
|
+
approvalId: z25.string().uuid(),
|
|
2302
|
+
intent: z25.enum(["start", "poll"])
|
|
2303
|
+
}).strict();
|
|
2137
2304
|
|
|
2138
2305
|
// ../cli/dist/analytics/manifest.js
|
|
2139
2306
|
async function readAnalyticsManifestFile(manifestPath) {
|
|
@@ -2714,6 +2881,13 @@ function createIntegrationErrors(manifest, sourceFiles, manifestPath) {
|
|
|
2714
2881
|
filePath: manifestPath
|
|
2715
2882
|
});
|
|
2716
2883
|
}
|
|
2884
|
+
if (/\b(?:Cookiebot|OneTrust|cookieyes|consentManager|cookieConsent)\b/iu.test(sourceText) && !sourceText.includes("consentAdapter")) {
|
|
2885
|
+
issues.push({
|
|
2886
|
+
code: "analytics_check.consent_adapter_missing",
|
|
2887
|
+
message: "Existing consent management was detected without a Siteplane consentAdapter. Bind its current choice and change callbacks; unknown or denied consent must block Analytics. Verify the actual visitor flow in the browser.",
|
|
2888
|
+
filePath: manifestPath
|
|
2889
|
+
});
|
|
2890
|
+
}
|
|
2717
2891
|
if (manifest.metadata?.siteplanePreviewSuppression !== true) {
|
|
2718
2892
|
issues.push({
|
|
2719
2893
|
code: "analytics_check.preview_suppression_unverified",
|
|
@@ -2793,7 +2967,19 @@ async function readCspWarnings(filePaths) {
|
|
|
2793
2967
|
import { mkdir as mkdir3, writeFile as writeFile3 } from "fs/promises";
|
|
2794
2968
|
import { dirname as dirname3, join } from "path";
|
|
2795
2969
|
async function analyticsInitCommand(input) {
|
|
2796
|
-
const
|
|
2970
|
+
const manifestPath = join(input.projectDir, "siteplane.analytics.json");
|
|
2971
|
+
const existing = await readAnalyticsManifestFile(manifestPath).catch((error) => {
|
|
2972
|
+
if (error.code === "ENOENT")
|
|
2973
|
+
return null;
|
|
2974
|
+
throw error;
|
|
2975
|
+
});
|
|
2976
|
+
if (existing && existing.manifest.siteId !== input.siteId)
|
|
2977
|
+
throw new Error("The Analytics manifest belongs to a different site. The existing manifest was preserved.");
|
|
2978
|
+
const manifest = existing ? {
|
|
2979
|
+
...existing.manifest,
|
|
2980
|
+
siteKeyRef: input.siteKeyRef,
|
|
2981
|
+
siteKeyLookup: input.siteKeyLookup
|
|
2982
|
+
} : {
|
|
2797
2983
|
schemaVersion: ANALYTICS_SCHEMA_VERSION,
|
|
2798
2984
|
siteId: input.siteId,
|
|
2799
2985
|
siteKeyRef: input.siteKeyRef,
|
|
@@ -2802,7 +2988,6 @@ async function analyticsInitCommand(input) {
|
|
|
2802
2988
|
targets: [],
|
|
2803
2989
|
metadata: { siteplanePreviewSuppression: true }
|
|
2804
2990
|
};
|
|
2805
|
-
const manifestPath = join(input.projectDir, "siteplane.analytics.json");
|
|
2806
2991
|
const artifacts = createAnalyticsArtifacts(input.agentClient);
|
|
2807
2992
|
await writeAnalyticsManifestFile(manifestPath, manifest);
|
|
2808
2993
|
for (const artifact of artifacts) {
|
|
@@ -2855,6 +3040,9 @@ Analytics contract hash: ${ANALYTICS_CONTRACT_HASH}
|
|
|
2855
3040
|
- Use stable data-siteplane-target-id values that do not depend on visible copy.
|
|
2856
3041
|
- Use public site keys only through environment references.
|
|
2857
3042
|
- Do not write secret analytics keys, setup tokens or project CLI tokens into source files.
|
|
3043
|
+
- 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.
|
|
3044
|
+
- 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.
|
|
3045
|
+
- 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.
|
|
2858
3046
|
- Suppress editor-preview traffic from live analytics.
|
|
2859
3047
|
- Run npx siteplane analytics check, npx siteplane analytics sync and npx siteplane analytics test after setup.
|
|
2860
3048
|
`;
|
|
@@ -2938,26 +3126,28 @@ async function analyticsReadinessCommand(input) {
|
|
|
2938
3126
|
}
|
|
2939
3127
|
|
|
2940
3128
|
// ../cli/dist/commands/analytics/public-key.js
|
|
2941
|
-
import { z as
|
|
2942
|
-
var responseSchema =
|
|
2943
|
-
ok:
|
|
2944
|
-
data:
|
|
2945
|
-
rawPublicKey:
|
|
3129
|
+
import { z as z26 } from "zod";
|
|
3130
|
+
var responseSchema = z26.object({
|
|
3131
|
+
ok: z26.literal(true),
|
|
3132
|
+
data: z26.object({
|
|
3133
|
+
rawPublicKey: z26.string().regex(/^pk_siteplane_[A-Za-z0-9_-]{16}_[A-Za-z0-9_-]{43}$/)
|
|
2946
3134
|
})
|
|
2947
3135
|
});
|
|
2948
|
-
var errorResponseSchema =
|
|
2949
|
-
error:
|
|
2950
|
-
code:
|
|
3136
|
+
var errorResponseSchema = z26.object({
|
|
3137
|
+
error: z26.object({
|
|
3138
|
+
code: z26.string().regex(/^[a-z][a-z0-9_.-]+$/u)
|
|
2951
3139
|
})
|
|
2952
3140
|
});
|
|
2953
3141
|
async function analyticsPublicKeyCommand(input) {
|
|
2954
3142
|
const fetcher = input.fetchImpl ?? fetch;
|
|
2955
3143
|
const response = await fetcher(`${input.config.apiBaseUrl.replace(/\/$/u, "")}/api/cli/analytics/public-key`, {
|
|
2956
3144
|
method: "POST",
|
|
3145
|
+
redirect: "error",
|
|
3146
|
+
signal: AbortSignal.timeout(2e4),
|
|
2957
3147
|
headers: createAnalyticsCliRequestHeaders(input.config),
|
|
2958
3148
|
body: JSON.stringify({ siteId: input.config.siteId })
|
|
2959
3149
|
});
|
|
2960
|
-
const payload = await response.json();
|
|
3150
|
+
const payload = await response.json().catch(() => null);
|
|
2961
3151
|
const parsed = responseSchema.safeParse(payload);
|
|
2962
3152
|
if (!response.ok || !parsed.success) {
|
|
2963
3153
|
const error = errorResponseSchema.safeParse(payload);
|
|
@@ -2966,6 +3156,43 @@ async function analyticsPublicKeyCommand(input) {
|
|
|
2966
3156
|
return parsed.data.data.rawPublicKey;
|
|
2967
3157
|
}
|
|
2968
3158
|
|
|
3159
|
+
// ../cli/dist/commands/analytics/prepare.js
|
|
3160
|
+
import { z as z27 } from "zod";
|
|
3161
|
+
var resultSchema = z27.object({
|
|
3162
|
+
ok: z27.literal(true),
|
|
3163
|
+
data: z27.object({
|
|
3164
|
+
rawPublicKey: z27.string().regex(/^pk_siteplane_[A-Za-z0-9_-]{16}_[A-Za-z0-9_-]{43}$/u),
|
|
3165
|
+
generation: z27.number().int().positive(),
|
|
3166
|
+
status: z27.enum([
|
|
3167
|
+
"setup_started",
|
|
3168
|
+
"test_mode",
|
|
3169
|
+
"active",
|
|
3170
|
+
"paused",
|
|
3171
|
+
"error",
|
|
3172
|
+
"deleting"
|
|
3173
|
+
])
|
|
3174
|
+
}).strict()
|
|
3175
|
+
}).strict();
|
|
3176
|
+
var errorSchema = z27.object({
|
|
3177
|
+
error: z27.object({ code: z27.string().regex(/^[a-z][a-z0-9_.-]+$/u) })
|
|
3178
|
+
});
|
|
3179
|
+
async function analyticsPrepareCommand(input) {
|
|
3180
|
+
const response = await (input.fetchImpl ?? fetch)(`${input.config.apiBaseUrl.replace(/\/$/u, "")}/api/cli/analytics/prepare`, {
|
|
3181
|
+
method: "POST",
|
|
3182
|
+
redirect: "error",
|
|
3183
|
+
headers: createAnalyticsCliRequestHeaders(input.config),
|
|
3184
|
+
body: JSON.stringify({ siteId: input.config.siteId }),
|
|
3185
|
+
signal: AbortSignal.timeout(2e4)
|
|
3186
|
+
});
|
|
3187
|
+
const payload = await response.json().catch(() => null);
|
|
3188
|
+
const parsed = resultSchema.safeParse(payload);
|
|
3189
|
+
if (!response.ok || !parsed.success) {
|
|
3190
|
+
const error = errorSchema.safeParse(payload);
|
|
3191
|
+
throw new Error(`${error.success ? error.data.error.code : "analytics_prepare.invalid_response"}: Analytics preparation failed. Use the current setup context; the existing connection is unchanged.`);
|
|
3192
|
+
}
|
|
3193
|
+
return parsed.data.data;
|
|
3194
|
+
}
|
|
3195
|
+
|
|
2969
3196
|
// ../cli/dist/commands/analytics/test.js
|
|
2970
3197
|
import { randomUUID } from "crypto";
|
|
2971
3198
|
async function analyticsTestCommand(input) {
|
|
@@ -3167,22 +3394,19 @@ async function bookingTestCommand(input) {
|
|
|
3167
3394
|
import { access, chmod, open, readFile as readFile5, rename, rm } from "fs/promises";
|
|
3168
3395
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
3169
3396
|
import { join as join3 } from "path";
|
|
3170
|
-
import { z as
|
|
3171
|
-
var siteplaneProjectConfigSchema =
|
|
3172
|
-
version:
|
|
3173
|
-
apiBaseUrl:
|
|
3174
|
-
siteId:
|
|
3175
|
-
publicSiteKeyId:
|
|
3176
|
-
publicSiteKey:
|
|
3177
|
-
runId:
|
|
3178
|
-
appDirectory:
|
|
3179
|
-
taskContractVersion:
|
|
3180
|
-
adminProtocolVersion:
|
|
3181
|
-
packages:
|
|
3182
|
-
|
|
3183
|
-
runtimeNext: z25.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u)
|
|
3184
|
-
}).strict(),
|
|
3185
|
-
fieldContractHash: z25.string().regex(/^sha256:[0-9a-f]{64}$/iu).optional()
|
|
3397
|
+
import { z as z28 } from "zod";
|
|
3398
|
+
var siteplaneProjectConfigSchema = z28.object({
|
|
3399
|
+
version: z28.literal(2),
|
|
3400
|
+
apiBaseUrl: z28.string().url(),
|
|
3401
|
+
siteId: z28.string().uuid(),
|
|
3402
|
+
publicSiteKeyId: z28.string().uuid(),
|
|
3403
|
+
publicSiteKey: z28.string().trim().min(1),
|
|
3404
|
+
runId: z28.string().uuid(),
|
|
3405
|
+
appDirectory: z28.string().min(1),
|
|
3406
|
+
taskContractVersion: z28.literal("siteplane.setup-task.v2"),
|
|
3407
|
+
adminProtocolVersion: z28.literal(2),
|
|
3408
|
+
packages: siteSetupPackagesSchema,
|
|
3409
|
+
fieldContractHash: z28.string().regex(/^sha256:[0-9a-f]{64}$/iu).optional()
|
|
3186
3410
|
}).strict();
|
|
3187
3411
|
async function readProjectPackageJson(projectDir) {
|
|
3188
3412
|
return JSON.parse(await readFile5(join3(projectDir, "package.json"), "utf8"));
|
|
@@ -3242,13 +3466,13 @@ import { randomUUID as randomUUID3 } from "crypto";
|
|
|
3242
3466
|
import { chmod as chmod2, lstat, mkdir as mkdir5, open as open2, readFile as readFile6, rename as rename2, rm as rm2 } from "fs/promises";
|
|
3243
3467
|
import { dirname as dirname5, join as join4, relative } from "path";
|
|
3244
3468
|
import { promisify } from "util";
|
|
3245
|
-
import { z as
|
|
3246
|
-
var siteplaneCredentialsSchema =
|
|
3247
|
-
accessToken:
|
|
3248
|
-
siteRevalidationSecret:
|
|
3249
|
-
adminSession:
|
|
3250
|
-
secret:
|
|
3251
|
-
generation:
|
|
3469
|
+
import { z as z29 } from "zod";
|
|
3470
|
+
var siteplaneCredentialsSchema = z29.object({
|
|
3471
|
+
accessToken: z29.string().trim().min(1),
|
|
3472
|
+
siteRevalidationSecret: z29.string().trim().min(1),
|
|
3473
|
+
adminSession: z29.object({
|
|
3474
|
+
secret: z29.string().regex(/^[A-Za-z0-9_-]{43}$/u),
|
|
3475
|
+
generation: z29.string().uuid()
|
|
3252
3476
|
}).strict().optional()
|
|
3253
3477
|
}).strict();
|
|
3254
3478
|
async function assertLocalCredentialsPathSafe(projectDir, options = {}) {
|
|
@@ -3331,7 +3555,7 @@ async function gitPathMatches(projectDir, path, command) {
|
|
|
3331
3555
|
// ../cli/dist/commands/init.js
|
|
3332
3556
|
import { access as access3 } from "fs/promises";
|
|
3333
3557
|
import { join as join7, relative as relative3 } from "path";
|
|
3334
|
-
import { z as
|
|
3558
|
+
import { z as z32 } from "zod";
|
|
3335
3559
|
|
|
3336
3560
|
// ../cli/dist/commands/setup-preflight.js
|
|
3337
3561
|
import { createHash as createHash2 } from "crypto";
|
|
@@ -3343,11 +3567,11 @@ import { parse as parseYaml } from "yaml";
|
|
|
3343
3567
|
import { createRequire } from "module";
|
|
3344
3568
|
import { readFile as readFile7 } from "fs/promises";
|
|
3345
3569
|
import { join as join5 } from "path";
|
|
3346
|
-
import { z as
|
|
3347
|
-
var packageSchema =
|
|
3348
|
-
name:
|
|
3349
|
-
version:
|
|
3350
|
-
peerDependencies:
|
|
3570
|
+
import { z as z30 } from "zod";
|
|
3571
|
+
var packageSchema = z30.object({
|
|
3572
|
+
name: z30.string().optional(),
|
|
3573
|
+
version: z30.string(),
|
|
3574
|
+
peerDependencies: z30.record(z30.string(), z30.string()).optional()
|
|
3351
3575
|
});
|
|
3352
3576
|
async function readInstalledPackage(projectDir, name2) {
|
|
3353
3577
|
const require2 = createRequire(join5(projectDir, "package.json"));
|
|
@@ -3362,13 +3586,14 @@ async function readInstalledPackage(projectDir, name2) {
|
|
|
3362
3586
|
throw new Error(`Install ${name2} with the canonical package manager before setup.`);
|
|
3363
3587
|
}
|
|
3364
3588
|
async function assertExactSetupPackages(projectDir, packages) {
|
|
3365
|
-
const manifest =
|
|
3366
|
-
dependencies:
|
|
3367
|
-
devDependencies:
|
|
3589
|
+
const manifest = z30.object({
|
|
3590
|
+
dependencies: z30.record(z30.string(), z30.string()).optional(),
|
|
3591
|
+
devDependencies: z30.record(z30.string(), z30.string()).optional()
|
|
3368
3592
|
}).parse(JSON.parse(await readFile7(join5(projectDir, "package.json"), "utf8")));
|
|
3369
3593
|
for (const [name2, version2] of [
|
|
3370
3594
|
["siteplane", packages.siteplane],
|
|
3371
|
-
["@siteplane/runtime-next", packages.runtimeNext]
|
|
3595
|
+
["@siteplane/runtime-next", packages.runtimeNext],
|
|
3596
|
+
...packages.analytics ? [["@siteplane/analytics", packages.analytics]] : []
|
|
3372
3597
|
]) {
|
|
3373
3598
|
const declared = manifest.dependencies?.[name2] ?? manifest.devDependencies?.[name2];
|
|
3374
3599
|
const installed = await readInstalledPackage(projectDir, name2);
|
|
@@ -3380,7 +3605,7 @@ async function assertExactSetupPackages(projectDir, packages) {
|
|
|
3380
3605
|
// ../cli/dist/commands/setup-preflight.js
|
|
3381
3606
|
import { access as access2, readFile as readFile8, realpath, readdir, readlink } from "fs/promises";
|
|
3382
3607
|
import { dirname as dirname6, join as join6, relative as relative2, resolve, sep } from "path";
|
|
3383
|
-
import { z as
|
|
3608
|
+
import { z as z31 } from "zod";
|
|
3384
3609
|
|
|
3385
3610
|
// ../cli/dist/commands/setup-process.js
|
|
3386
3611
|
import { spawn } from "child_process";
|
|
@@ -3481,29 +3706,29 @@ async function setupVercelApi(cwd, endpoint, body, method, options) {
|
|
|
3481
3706
|
}
|
|
3482
3707
|
|
|
3483
3708
|
// ../cli/dist/commands/setup-preflight.js
|
|
3484
|
-
var manifestSchema =
|
|
3485
|
-
packageManager:
|
|
3486
|
-
engines:
|
|
3487
|
-
dependencies:
|
|
3488
|
-
devDependencies:
|
|
3489
|
-
scripts:
|
|
3490
|
-
workspaces:
|
|
3709
|
+
var manifestSchema = z31.object({
|
|
3710
|
+
packageManager: z31.string().optional(),
|
|
3711
|
+
engines: z31.object({ node: z31.string().optional() }).optional(),
|
|
3712
|
+
dependencies: z31.record(z31.string(), z31.string()).optional(),
|
|
3713
|
+
devDependencies: z31.record(z31.string(), z31.string()).optional(),
|
|
3714
|
+
scripts: z31.record(z31.string(), z31.string()).optional(),
|
|
3715
|
+
workspaces: z31.unknown().optional()
|
|
3491
3716
|
});
|
|
3492
|
-
var vercelProjectSchema =
|
|
3493
|
-
id:
|
|
3494
|
-
accountId:
|
|
3495
|
-
name:
|
|
3496
|
-
nodeVersion:
|
|
3497
|
-
rootDirectory:
|
|
3498
|
-
framework:
|
|
3499
|
-
installCommand:
|
|
3500
|
-
buildCommand:
|
|
3501
|
-
link:
|
|
3502
|
-
type:
|
|
3503
|
-
repo:
|
|
3504
|
-
repoId:
|
|
3505
|
-
org:
|
|
3506
|
-
productionBranch:
|
|
3717
|
+
var vercelProjectSchema = z31.object({
|
|
3718
|
+
id: z31.string(),
|
|
3719
|
+
accountId: z31.string(),
|
|
3720
|
+
name: z31.string(),
|
|
3721
|
+
nodeVersion: z31.string().nullable().optional(),
|
|
3722
|
+
rootDirectory: z31.string().nullable().optional(),
|
|
3723
|
+
framework: z31.string().nullable().optional(),
|
|
3724
|
+
installCommand: z31.string().nullable().optional(),
|
|
3725
|
+
buildCommand: z31.string().nullable().optional(),
|
|
3726
|
+
link: z31.object({
|
|
3727
|
+
type: z31.string(),
|
|
3728
|
+
repo: z31.string().optional(),
|
|
3729
|
+
repoId: z31.union([z31.string(), z31.number()]).optional(),
|
|
3730
|
+
org: z31.string().optional(),
|
|
3731
|
+
productionBranch: z31.string().optional()
|
|
3507
3732
|
}).nullable().optional()
|
|
3508
3733
|
});
|
|
3509
3734
|
var exists = async (path) => access2(path).then(() => true, () => false);
|
|
@@ -3560,9 +3785,9 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3560
3785
|
const rootManifest = manifestSchema.parse(JSON.parse(await readFile8(join6(lockfileRoot, "package.json"), "utf8")));
|
|
3561
3786
|
if (lockfileRoot !== projectDirectory) {
|
|
3562
3787
|
const workspaceFile = join6(lockfileRoot, "pnpm-workspace.yaml");
|
|
3563
|
-
const workspace = lockName === "pnpm-lock.yaml" && await exists(workspaceFile) ?
|
|
3564
|
-
|
|
3565
|
-
|
|
3788
|
+
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([
|
|
3789
|
+
z31.array(z31.string()),
|
|
3790
|
+
z31.object({ packages: z31.array(z31.string()) }).transform((value) => value.packages)
|
|
3566
3791
|
]).parse(rootManifest.workspaces);
|
|
3567
3792
|
const selected = relative2(lockfileRoot, projectDirectory).split(sep).join("/");
|
|
3568
3793
|
if (!workspace.some((pattern) => !pattern.startsWith("!") && minimatch(selected, pattern)) || workspace.some((pattern) => pattern.startsWith("!") && minimatch(selected, pattern.slice(1))))
|
|
@@ -3576,11 +3801,11 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3576
3801
|
break;
|
|
3577
3802
|
}
|
|
3578
3803
|
const lockText = await readFile8(join6(lockfileRoot, lockName), "utf8");
|
|
3579
|
-
const npmLock = lockName === "package-lock.json" ?
|
|
3580
|
-
lockfileVersion:
|
|
3581
|
-
packages:
|
|
3582
|
-
version:
|
|
3583
|
-
peerDependencies:
|
|
3804
|
+
const npmLock = lockName === "package-lock.json" ? z31.object({
|
|
3805
|
+
lockfileVersion: z31.number(),
|
|
3806
|
+
packages: z31.record(z31.string(), z31.object({
|
|
3807
|
+
version: z31.string().optional(),
|
|
3808
|
+
peerDependencies: z31.record(z31.string(), z31.string()).optional()
|
|
3584
3809
|
})).optional()
|
|
3585
3810
|
}).parse(JSON.parse(lockText)) : null;
|
|
3586
3811
|
async function version2(name3) {
|
|
@@ -3635,8 +3860,12 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3635
3860
|
sourceConflicts.push("static_export");
|
|
3636
3861
|
if (/\bbasePath\s*:/u.test(source))
|
|
3637
3862
|
sourceConflicts.push("base_path");
|
|
3863
|
+
if (/\bloaderFile\s*:|\bloader\s*:\s*['"](?:custom|imgix|cloudinary|akamai)['"]/u.test(source))
|
|
3864
|
+
sourceConflicts.push(`inspect_image_loader:${file}`);
|
|
3865
|
+
if (/\bmaximumRedirects\s*:\s*[1-9]/u.test(source))
|
|
3866
|
+
sourceConflicts.push(`inspect_image_redirects:${file}`);
|
|
3638
3867
|
}
|
|
3639
|
-
if (sourceConflicts.
|
|
3868
|
+
if (sourceConflicts.some((conflict) => conflict === "static_export" || conflict === "base_path"))
|
|
3640
3869
|
fail("unsupported_server_configuration", "Resolve static export/basePath configuration explicitly; Siteplane requires its server-side admin and revalidation handlers.");
|
|
3641
3870
|
for (const name3 of [
|
|
3642
3871
|
"middleware.ts",
|
|
@@ -3648,8 +3877,14 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3648
3877
|
"src/proxy.ts",
|
|
3649
3878
|
"src/proxy.js"
|
|
3650
3879
|
]) {
|
|
3651
|
-
if (await exists(join6(projectDirectory, name3)))
|
|
3880
|
+
if (await exists(join6(projectDirectory, name3))) {
|
|
3652
3881
|
sourceConflicts.push(`inspect_routing:${name3}`);
|
|
3882
|
+
if (await readlink(join6(projectDirectory, name3)).catch(() => null))
|
|
3883
|
+
continue;
|
|
3884
|
+
const policySource = await readFile8(join6(projectDirectory, name3), "utf8");
|
|
3885
|
+
if (/Content-Security-Policy|img-src|default-src/iu.test(policySource))
|
|
3886
|
+
sourceConflicts.push(`inspect_image_csp:${name3}`);
|
|
3887
|
+
}
|
|
3653
3888
|
}
|
|
3654
3889
|
async function inspectSource(directory) {
|
|
3655
3890
|
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
@@ -3663,6 +3898,8 @@ async function inspectSetupLocalProject(projectDir) {
|
|
|
3663
3898
|
if (!/\.[cm]?[jt]sx?$/u.test(entry.name))
|
|
3664
3899
|
continue;
|
|
3665
3900
|
const source = await readFile8(path, "utf8");
|
|
3901
|
+
if (/Content-Security-Policy|img-src|default-src/iu.test(source))
|
|
3902
|
+
sourceConflicts.push(`inspect_image_csp:${relative2(projectDirectory, path)}`);
|
|
3666
3903
|
if (/from\s*["']next\/image["']/u.test(source))
|
|
3667
3904
|
sourceConflicts.push(`inspect_image_policy:${relative2(projectDirectory, path)}`);
|
|
3668
3905
|
if (/\b(?:Cookiebot|OneTrust|cookieyes|consentManager|cookieConsent)\b/iu.test(source))
|
|
@@ -3708,9 +3945,9 @@ async function setupPreflightCommand(input) {
|
|
|
3708
3945
|
linkDirectory = dirname6(linkDirectory);
|
|
3709
3946
|
if (!await exists(join6(linkDirectory, ".vercel/project.json")))
|
|
3710
3947
|
fail("vercel_project_not_linked", "Link this application to its intended Vercel project before setup; Siteplane will not guess a target.");
|
|
3711
|
-
const linked =
|
|
3712
|
-
projectId:
|
|
3713
|
-
orgId:
|
|
3948
|
+
const linked = z31.object({
|
|
3949
|
+
projectId: z31.string().regex(/^prj_[A-Za-z0-9]+$/u),
|
|
3950
|
+
orgId: z31.string().regex(/^(?:team|user)_[A-Za-z0-9]+$/u)
|
|
3714
3951
|
}).parse(JSON.parse(await readFile8(join6(linkDirectory, ".vercel/project.json"), "utf8")));
|
|
3715
3952
|
const project = vercelProjectSchema.parse(await setupVercelApi(linkDirectory, `/v9/projects/${linked.projectId}?teamId=${linked.orgId}`));
|
|
3716
3953
|
if (project.id !== linked.projectId || project.accountId !== linked.orgId)
|
|
@@ -3724,11 +3961,11 @@ async function setupPreflightCommand(input) {
|
|
|
3724
3961
|
fail("vercel_production_branch_conflict", "The local branch differs from the bound Vercel Production branch.");
|
|
3725
3962
|
if (project.link?.repo && project.link.org && !local.git.remote?.replace(/\.git$/u, "").endsWith(`${project.link.org}/${project.link.repo}`))
|
|
3726
3963
|
fail("vercel_git_conflict", "The local origin repository differs from the Vercel Git connection.");
|
|
3727
|
-
const env =
|
|
3728
|
-
envs:
|
|
3729
|
-
key:
|
|
3730
|
-
value:
|
|
3731
|
-
target:
|
|
3964
|
+
const env = z31.object({
|
|
3965
|
+
envs: z31.array(z31.object({
|
|
3966
|
+
key: z31.string(),
|
|
3967
|
+
value: z31.string().optional(),
|
|
3968
|
+
target: z31.array(z31.string()).optional()
|
|
3732
3969
|
}))
|
|
3733
3970
|
}).parse(await setupVercelApi(linkDirectory, `/v10/projects/${linked.projectId}/env?teamId=${linked.orgId}`));
|
|
3734
3971
|
const corepack = env.envs.some((item) => item.key === "ENABLE_EXPERIMENTAL_COREPACK" && item.value === "1" && item.target?.includes("production"));
|
|
@@ -3818,29 +4055,26 @@ async function initCommand(input) {
|
|
|
3818
4055
|
]
|
|
3819
4056
|
};
|
|
3820
4057
|
}
|
|
3821
|
-
var siteSetupBootstrapDataSchema =
|
|
3822
|
-
credentialPurpose:
|
|
3823
|
-
apiBaseUrl:
|
|
3824
|
-
siteId:
|
|
3825
|
-
publicSiteKeyId:
|
|
3826
|
-
publicSiteKey:
|
|
3827
|
-
accessToken:
|
|
3828
|
-
siteRevalidationSecret:
|
|
3829
|
-
runId:
|
|
3830
|
-
packages:
|
|
3831
|
-
siteplane: z29.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u),
|
|
3832
|
-
runtimeNext: z29.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u)
|
|
3833
|
-
}).strict()
|
|
4058
|
+
var siteSetupBootstrapDataSchema = z32.object({
|
|
4059
|
+
credentialPurpose: z32.literal("site_setup"),
|
|
4060
|
+
apiBaseUrl: z32.string().url(),
|
|
4061
|
+
siteId: z32.string().uuid(),
|
|
4062
|
+
publicSiteKeyId: z32.string().uuid(),
|
|
4063
|
+
publicSiteKey: z32.string().trim().min(1),
|
|
4064
|
+
accessToken: z32.string().trim().min(1),
|
|
4065
|
+
siteRevalidationSecret: z32.string().regex(/^[A-Za-z0-9_-]{43}$/u),
|
|
4066
|
+
runId: z32.string().uuid(),
|
|
4067
|
+
packages: siteSetupPackagesSchema
|
|
3834
4068
|
}).strict();
|
|
3835
|
-
var featureBootstrapDataSchema =
|
|
3836
|
-
credentialPurpose:
|
|
3837
|
-
apiBaseUrl:
|
|
3838
|
-
siteId:
|
|
3839
|
-
accessToken:
|
|
4069
|
+
var featureBootstrapDataSchema = z32.object({
|
|
4070
|
+
credentialPurpose: z32.enum(["analytics", "booking"]),
|
|
4071
|
+
apiBaseUrl: z32.string().url(),
|
|
4072
|
+
siteId: z32.string().uuid(),
|
|
4073
|
+
accessToken: z32.string().trim().min(1)
|
|
3840
4074
|
}).strict();
|
|
3841
|
-
var bootstrapResponseSchema =
|
|
3842
|
-
ok:
|
|
3843
|
-
data:
|
|
4075
|
+
var bootstrapResponseSchema = z32.object({
|
|
4076
|
+
ok: z32.literal(true),
|
|
4077
|
+
data: z32.discriminatedUnion("credentialPurpose", [
|
|
3844
4078
|
siteSetupBootstrapDataSchema,
|
|
3845
4079
|
featureBootstrapDataSchema
|
|
3846
4080
|
])
|
|
@@ -3907,7 +4141,7 @@ async function persistSiteSetupBootstrap(input, bootstrap, appDirectory) {
|
|
|
3907
4141
|
readLocalCredentials(input.projectDir),
|
|
3908
4142
|
readProjectConfig(input.projectDir)
|
|
3909
4143
|
]);
|
|
3910
|
-
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) {
|
|
4144
|
+
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) {
|
|
3911
4145
|
throw new Error("Siteplane setup files could not be verified.");
|
|
3912
4146
|
}
|
|
3913
4147
|
return { configPath, credentialsPath };
|
|
@@ -3998,7 +4232,7 @@ async function collectSourceFiles(directory) {
|
|
|
3998
4232
|
import { execFile as execFile2 } from "child_process";
|
|
3999
4233
|
import { readFile as readFile9 } from "fs/promises";
|
|
4000
4234
|
import { promisify as promisify2 } from "util";
|
|
4001
|
-
import { z as
|
|
4235
|
+
import { z as z33 } from "zod";
|
|
4002
4236
|
|
|
4003
4237
|
// ../cli/dist/scan/next-source-scan.js
|
|
4004
4238
|
import ts2 from "typescript";
|
|
@@ -4075,6 +4309,7 @@ function scanSourceFacts(files) {
|
|
|
4075
4309
|
const hardErrors = [];
|
|
4076
4310
|
const warnings = [];
|
|
4077
4311
|
const suggestions = [];
|
|
4312
|
+
const directAttrs = [];
|
|
4078
4313
|
const eventPreviewAttrs = [];
|
|
4079
4314
|
const eventPreviewComponentPropConsumers = [];
|
|
4080
4315
|
const eventPreviewComponentPropUsages = [];
|
|
@@ -4082,6 +4317,7 @@ function scanSourceFacts(files) {
|
|
|
4082
4317
|
let hasGenericEventPreviewConsumer = false;
|
|
4083
4318
|
for (const file of files) {
|
|
4084
4319
|
const facts = scanSourceFile2(file, fields, hardErrors);
|
|
4320
|
+
directAttrs.push(...facts.directAttrs);
|
|
4085
4321
|
eventPreviewAttrs.push(...facts.eventPreviewAttrs);
|
|
4086
4322
|
eventPreviewComponentPropConsumers.push(...facts.eventPreviewComponentPropConsumers);
|
|
4087
4323
|
eventPreviewComponentPropUsages.push(...facts.eventPreviewComponentPropUsages);
|
|
@@ -4095,6 +4331,18 @@ function scanSourceFacts(files) {
|
|
|
4095
4331
|
eventPreviewConsumerFieldIds.add(usage.fieldId);
|
|
4096
4332
|
}
|
|
4097
4333
|
}
|
|
4334
|
+
for (const attr of directAttrs) {
|
|
4335
|
+
const field = fields.find((candidate) => candidate.fieldId === attr.fieldId);
|
|
4336
|
+
const expectedRoute = field?.technicalRouteKey ?? field?.routeHint;
|
|
4337
|
+
if (!attr.routeKey || expectedRoute && attr.routeKey !== expectedRoute) {
|
|
4338
|
+
hardErrors.push({
|
|
4339
|
+
code: attr.routeKey ? "field_scan.attrs_route_key_mismatch" : "field_scan.attrs_route_key_missing",
|
|
4340
|
+
message: `DOM attrs for ${attr.fieldId} must include the same canonical routeKey as its value call${expectedRoute ? ` (${expectedRoute})` : ""}. Pass it explicitly to siteplane.attrs(fieldId, { routeKey }); the value call does not attach DOM metadata.`,
|
|
4341
|
+
fieldId: attr.fieldId,
|
|
4342
|
+
filePath: attr.filePath
|
|
4343
|
+
});
|
|
4344
|
+
}
|
|
4345
|
+
}
|
|
4098
4346
|
markMissingEventPreviewHandlerErrors(eventPreviewAttrs, eventPreviewConsumerFieldIds, hasGenericEventPreviewConsumer, hardErrors);
|
|
4099
4347
|
validateScannedFields(fields, hardErrors, warnings, suggestions);
|
|
4100
4348
|
return {
|
|
@@ -4120,6 +4368,7 @@ function scanSourceFile2(file, fields, hardErrors) {
|
|
|
4120
4368
|
const fieldsInFile = [];
|
|
4121
4369
|
const attrFieldIds = /* @__PURE__ */ new Set();
|
|
4122
4370
|
const attrRouteRefs = /* @__PURE__ */ new Set();
|
|
4371
|
+
const directAttrs = [];
|
|
4123
4372
|
const eventPreviewAttrs = [];
|
|
4124
4373
|
const eventPreviewAttrVariables = /* @__PURE__ */ new Map();
|
|
4125
4374
|
const eventPreviewComponentPropConsumers = [];
|
|
@@ -4141,7 +4390,7 @@ function scanSourceFile2(file, fields, hardErrors) {
|
|
|
4141
4390
|
collectEventPreviewComponentPropUsages(node, eventPreviewAttrVariables, eventPreviewComponentPropUsages, file);
|
|
4142
4391
|
}
|
|
4143
4392
|
if (ts2.isCallExpression(node)) {
|
|
4144
|
-
collectAttrsCall(node, attrFieldIds, attrRouteRefs, eventPreviewAttrs, eventPreviewAttrVariables, file);
|
|
4393
|
+
collectAttrsCall(node, attrFieldIds, attrRouteRefs, eventPreviewAttrs, eventPreviewAttrVariables, directAttrs, file);
|
|
4145
4394
|
collectUnusedValueCallError(node, hardErrors, file);
|
|
4146
4395
|
const extractedFields = extractFunctionFields(node, file);
|
|
4147
4396
|
for (const field of extractedFields) {
|
|
@@ -4169,6 +4418,7 @@ function scanSourceFile2(file, fields, hardErrors) {
|
|
|
4169
4418
|
visit(sourceFile);
|
|
4170
4419
|
markMissingAttrsWarnings(fieldsInFile, attrFieldIds, attrRouteRefs);
|
|
4171
4420
|
return {
|
|
4421
|
+
directAttrs,
|
|
4172
4422
|
eventPreviewAttrs,
|
|
4173
4423
|
eventPreviewComponentPropConsumers,
|
|
4174
4424
|
eventPreviewComponentPropUsages,
|
|
@@ -4349,7 +4599,7 @@ function createFallbackHash(fieldType, fallback) {
|
|
|
4349
4599
|
return void 0;
|
|
4350
4600
|
}
|
|
4351
4601
|
}
|
|
4352
|
-
function collectAttrsCall(node, attrFieldIds, attrRouteRefs, eventPreviewAttrs, eventPreviewAttrVariables, file) {
|
|
4602
|
+
function collectAttrsCall(node, attrFieldIds, attrRouteRefs, eventPreviewAttrs, eventPreviewAttrVariables, directAttrs, file) {
|
|
4353
4603
|
if (!ts2.isPropertyAccessExpression(node.expression)) {
|
|
4354
4604
|
return;
|
|
4355
4605
|
}
|
|
@@ -4361,6 +4611,11 @@ function collectAttrsCall(node, attrFieldIds, attrRouteRefs, eventPreviewAttrs,
|
|
|
4361
4611
|
const directFieldId = staticExpressionValue2(firstArg);
|
|
4362
4612
|
if (typeof directFieldId === "string") {
|
|
4363
4613
|
attrFieldIds.add(directFieldId);
|
|
4614
|
+
directAttrs.push({
|
|
4615
|
+
fieldId: directFieldId,
|
|
4616
|
+
routeKey: secondArg && typeof secondArg === "object" && "routeKey" in secondArg ? stringValue2(secondArg.routeKey) : void 0,
|
|
4617
|
+
filePath: file.filePath
|
|
4618
|
+
});
|
|
4364
4619
|
if (hasEventPreviewStrategy(secondArg)) {
|
|
4365
4620
|
eventPreviewAttrs.push({
|
|
4366
4621
|
fieldId: directFieldId,
|
|
@@ -4665,30 +4920,32 @@ function isPositionalFieldReference(value) {
|
|
|
4665
4920
|
|
|
4666
4921
|
// ../cli/dist/commands/site-setup.js
|
|
4667
4922
|
var execFileAsync2 = promisify2(execFile2);
|
|
4668
|
-
var safeErrorSchema =
|
|
4669
|
-
code:
|
|
4670
|
-
message:
|
|
4923
|
+
var safeErrorSchema = z33.object({
|
|
4924
|
+
code: z33.string().trim().min(1),
|
|
4925
|
+
message: z33.string().trim().min(1)
|
|
4671
4926
|
}).passthrough();
|
|
4672
|
-
var errorResponseSchema2 =
|
|
4673
|
-
var contextDataSchema =
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
|
|
4678
|
-
|
|
4679
|
-
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4927
|
+
var errorResponseSchema2 = z33.object({ ok: z33.literal(false), error: safeErrorSchema }).passthrough();
|
|
4928
|
+
var contextDataSchema = z33.object({
|
|
4929
|
+
task: siteSetupTaskSchema.refine((task) => task.run !== null)
|
|
4930
|
+
}).strict();
|
|
4931
|
+
var contextResponseSchema = z33.object({ ok: z33.literal(true), data: contextDataSchema }).strict();
|
|
4932
|
+
var applyDataSchema = z33.object({
|
|
4933
|
+
status: z33.enum(["applied", "ready_for_review"]),
|
|
4934
|
+
runId: z33.string().uuid().optional(),
|
|
4935
|
+
contractVersionId: z33.string().uuid().optional(),
|
|
4936
|
+
fieldContractHash: z33.string().regex(/^sha256:[0-9a-f]{64}$/u),
|
|
4937
|
+
editorDefinitionHash: z33.string().regex(/^sha256:[0-9a-f]{64}$/u).optional(),
|
|
4938
|
+
fieldCount: z33.number().int().nonnegative().optional(),
|
|
4939
|
+
routeCount: z33.number().int().nonnegative().optional()
|
|
4683
4940
|
}).strict();
|
|
4684
|
-
var applyResponseSchema =
|
|
4685
|
-
var verifyDataSchema =
|
|
4686
|
-
status:
|
|
4687
|
-
runId:
|
|
4688
|
-
deploymentOrigin:
|
|
4689
|
-
deploymentRevision:
|
|
4941
|
+
var applyResponseSchema = z33.object({ ok: z33.literal(true), data: applyDataSchema }).strict();
|
|
4942
|
+
var verifyDataSchema = z33.object({
|
|
4943
|
+
status: z33.literal("ready_for_review"),
|
|
4944
|
+
runId: z33.string().uuid().optional(),
|
|
4945
|
+
deploymentOrigin: z33.string().url().optional(),
|
|
4946
|
+
deploymentRevision: z33.string().optional()
|
|
4690
4947
|
}).strict();
|
|
4691
|
-
var verifyResponseSchema =
|
|
4948
|
+
var verifyResponseSchema = z33.object({ ok: z33.literal(true), data: verifyDataSchema }).strict();
|
|
4692
4949
|
async function siteSetupContextCommand(input) {
|
|
4693
4950
|
const response = await postSiteSetup(input, "context", {});
|
|
4694
4951
|
const parsed = contextResponseSchema.safeParse(response.payload);
|
|
@@ -4844,9 +5101,9 @@ async function siteSetupActivityCommand(input) {
|
|
|
4844
5101
|
message: "Choose inspecting, integrating, deploying, verifying or repairing."
|
|
4845
5102
|
};
|
|
4846
5103
|
const response = await postSiteSetup(input, "activity", activity.data);
|
|
4847
|
-
const parsed =
|
|
4848
|
-
ok:
|
|
4849
|
-
data:
|
|
5104
|
+
const parsed = z33.object({
|
|
5105
|
+
ok: z33.literal(true),
|
|
5106
|
+
data: z33.object({ status: z33.enum(["recorded", "rate_limited"]) }).strict()
|
|
4850
5107
|
}).strict().safeParse(response.payload);
|
|
4851
5108
|
return response.ok && parsed.success ? parsed.data.data : actionRequired(response.payload, "Setup activity could not be recorded.");
|
|
4852
5109
|
}
|
|
@@ -4871,7 +5128,7 @@ async function setupPrepareCommand(input) {
|
|
|
4871
5128
|
if (context.status !== "ok")
|
|
4872
5129
|
return context;
|
|
4873
5130
|
const task = context.task;
|
|
4874
|
-
if (task.site?.siteId !== config.siteId || task.run?.runId !== config.runId || task.packages.siteplane !== config.packages.siteplane || task.packages.runtimeNext !== config.packages.runtimeNext) {
|
|
5131
|
+
if (task.site?.siteId !== config.siteId || task.run?.runId !== config.runId || task.packages.siteplane !== config.packages.siteplane || task.packages.analytics !== config.packages.analytics || task.packages.runtimeNext !== config.packages.runtimeNext) {
|
|
4875
5132
|
throw new SetupFailure("setup_contract_conflict", "The local configuration does not match this server task and its exact package versions.");
|
|
4876
5133
|
}
|
|
4877
5134
|
if (task.run.status === "completed" || task.run.status === "ready_for_review")
|
|
@@ -4951,7 +5208,7 @@ export default function SiteplaneBridge() {
|
|
|
4951
5208
|
const session = query.get("siteplaneSessionId");
|
|
4952
5209
|
if (query.get("siteplanePreview") === "1" && query.get("siteplaneAdminOrigin") === new URL(config.apiBaseUrl).origin && session && /^[A-Za-z0-9_-]{1,128}$/.test(session)) setSessionId(session);
|
|
4953
5210
|
}, []);
|
|
4954
|
-
return sessionId ? <FieldRuntimeBridge siteId={config.siteId} adminOrigin={new URL(config.apiBaseUrl).origin} sessionId={sessionId} /> : null;
|
|
5211
|
+
return sessionId ? <FieldRuntimeBridge siteId={config.siteId} adminOrigin={new URL(config.apiBaseUrl).origin} sessionId={sessionId}${task.modules.includes("analytics") ? " analyticsSiteKey={process.env.NEXT_PUBLIC_SITEPLANE_ANALYTICS_SITE_KEY}" : ""} /> : null;
|
|
4955
5212
|
}
|
|
4956
5213
|
`;
|
|
4957
5214
|
const files = /* @__PURE__ */ new Map([
|
|
@@ -4997,7 +5254,7 @@ ${task.goal}
|
|
|
4997
5254
|
|
|
4998
5255
|
${task.discovery.rules.map((rule) => `- ${rule}`).join("\n")}
|
|
4999
5256
|
|
|
5000
|
-
Run setup context for the current user instructions and authorized modules. Keep the user instructions distinct from your selection summary. Use setup deploy --wait for environment transfer and deployment; never read or print credential values.
|
|
5257
|
+
Run setup context for the current user instructions and authorized modules. Keep the user instructions distinct from your selection summary. Use setup deploy --wait for environment transfer and deployment; never read or print credential values. For image fields, withSiteplane prepares the exact Siteplane asset route and the website /siteplane-assets/ path in Next Image and existing img-src policies at build time. This grants no hosting permission. Preserve existing image sources; explicitly resolve custom loaders, redirect dependencies, or CSP written by middleware/proxy/meta tags before deployment. Use the provider-selected public SITEPLANE_SITE_ORIGIN for local builds.
|
|
5001
5258
|
`);
|
|
5002
5259
|
for (const [path, content] of files) {
|
|
5003
5260
|
if (path === layoutPath || path === nextPath)
|
|
@@ -5042,6 +5299,12 @@ Run setup context for the current user instructions and authorized modules. Keep
|
|
|
5042
5299
|
"--save-exact",
|
|
5043
5300
|
`@siteplane/runtime-next@${task.packages.runtimeNext}`
|
|
5044
5301
|
]);
|
|
5302
|
+
if (task.packages.analytics && packageManifest.dependencies?.["@siteplane/analytics"] !== task.packages.analytics)
|
|
5303
|
+
await command([
|
|
5304
|
+
pm.name === "npm" ? "install" : "add",
|
|
5305
|
+
"--save-exact",
|
|
5306
|
+
`@siteplane/analytics@${task.packages.analytics}`
|
|
5307
|
+
]);
|
|
5045
5308
|
try {
|
|
5046
5309
|
await assertExactSetupPackages(directory, task.packages);
|
|
5047
5310
|
} catch {
|
|
@@ -5119,8 +5382,8 @@ async function assertSourcePath(root, target) {
|
|
|
5119
5382
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
5120
5383
|
import { lstat as lstat3, mkdir as mkdir7, open as open4, readFile as readFile11, rm as rm4, rmdir } from "fs/promises";
|
|
5121
5384
|
import { resolve as resolve2 } from "path";
|
|
5122
|
-
import { z as
|
|
5123
|
-
var ownerSchema =
|
|
5385
|
+
import { z as z34 } from "zod";
|
|
5386
|
+
var ownerSchema = z34.object({ pid: z34.number().int().positive(), nonce: z34.string().uuid() }).strict();
|
|
5124
5387
|
async function withSetupLock(projectDir, work) {
|
|
5125
5388
|
const gitPath = (await setupProcess("git", ["rev-parse", "--git-path", "siteplane-setup.lock"], { cwd: projectDir })).trim();
|
|
5126
5389
|
const path = resolve2(projectDir, gitPath);
|
|
@@ -5184,23 +5447,23 @@ import { execFile as execFile3 } from "child_process";
|
|
|
5184
5447
|
import { lstat as lstat4, readFile as readFile12, writeFile as writeFile5, mkdir as mkdir8 } from "fs/promises";
|
|
5185
5448
|
import { dirname as dirname8, isAbsolute as isAbsolute2, join as join10, relative as relative6, resolve as resolve3, sep as sep3 } from "path";
|
|
5186
5449
|
import { isDeepStrictEqual, promisify as promisify3 } from "util";
|
|
5187
|
-
import { z as
|
|
5450
|
+
import { z as z35 } from "zod";
|
|
5188
5451
|
var execute = promisify3(execFile3);
|
|
5189
5452
|
var name = ".siteplane/build-source.json";
|
|
5190
|
-
var oid =
|
|
5191
|
-
var entrySchema =
|
|
5192
|
-
path:
|
|
5193
|
-
mode:
|
|
5453
|
+
var oid = z35.string().regex(/^[0-9a-f]{40}$/u);
|
|
5454
|
+
var entrySchema = z35.object({
|
|
5455
|
+
path: z35.string().min(1).max(4096),
|
|
5456
|
+
mode: z35.enum(["100644", "100755", "120000"]),
|
|
5194
5457
|
oid
|
|
5195
5458
|
}).strict();
|
|
5196
|
-
var schema =
|
|
5197
|
-
version:
|
|
5459
|
+
var schema = z35.object({
|
|
5460
|
+
version: z35.literal(2),
|
|
5198
5461
|
revision: oid,
|
|
5199
|
-
commit:
|
|
5200
|
-
entries:
|
|
5201
|
-
providerConfigurations:
|
|
5202
|
-
path:
|
|
5203
|
-
source:
|
|
5462
|
+
commit: z35.string().min(1).max(1048576),
|
|
5463
|
+
entries: z35.array(entrySchema).min(1).max(1e5),
|
|
5464
|
+
providerConfigurations: z35.array(z35.object({
|
|
5465
|
+
path: z35.string().max(4096).regex(/(?:^|\/)vercel\.json$/u),
|
|
5466
|
+
source: z35.string().max(1048576)
|
|
5204
5467
|
}).strict()).max(1e3)
|
|
5205
5468
|
}).strict();
|
|
5206
5469
|
async function writeBuildProvenance(checkout, revision) {
|
|
@@ -5249,37 +5512,38 @@ import { createHash as createHash4, randomBytes, randomUUID as randomUUID6 } fro
|
|
|
5249
5512
|
import { access as access5, mkdir as mkdir9, mkdtemp, rm as rm5, writeFile as writeFile6 } from "fs/promises";
|
|
5250
5513
|
import { tmpdir } from "os";
|
|
5251
5514
|
import { join as join11 } from "path";
|
|
5252
|
-
import { z as
|
|
5253
|
-
var envSchema =
|
|
5254
|
-
id:
|
|
5255
|
-
key:
|
|
5256
|
-
target:
|
|
5257
|
-
type:
|
|
5258
|
-
comment:
|
|
5259
|
-
updatedAt:
|
|
5515
|
+
import { z as z36 } from "zod";
|
|
5516
|
+
var envSchema = z36.object({
|
|
5517
|
+
id: z36.string(),
|
|
5518
|
+
key: z36.string(),
|
|
5519
|
+
target: z36.array(z36.string()),
|
|
5520
|
+
type: z36.string(),
|
|
5521
|
+
comment: z36.string().optional(),
|
|
5522
|
+
updatedAt: z36.number().optional()
|
|
5260
5523
|
});
|
|
5261
|
-
var deploymentSchema =
|
|
5262
|
-
id:
|
|
5263
|
-
projectId:
|
|
5264
|
-
ownerId:
|
|
5265
|
-
target:
|
|
5266
|
-
readyState:
|
|
5267
|
-
createdAt:
|
|
5268
|
-
url:
|
|
5269
|
-
meta:
|
|
5270
|
-
gitSource:
|
|
5524
|
+
var deploymentSchema = z36.object({
|
|
5525
|
+
id: z36.string(),
|
|
5526
|
+
projectId: z36.string(),
|
|
5527
|
+
ownerId: z36.string().optional(),
|
|
5528
|
+
target: z36.string().nullable(),
|
|
5529
|
+
readyState: z36.string(),
|
|
5530
|
+
createdAt: z36.number(),
|
|
5531
|
+
url: z36.string(),
|
|
5532
|
+
meta: z36.record(z36.string(), z36.unknown()).optional(),
|
|
5533
|
+
gitSource: z36.object({ sha: z36.string().optional() }).nullable().optional()
|
|
5271
5534
|
});
|
|
5272
|
-
var buildProofSchema =
|
|
5273
|
-
node:
|
|
5274
|
-
packageManager:
|
|
5275
|
-
packageManagerVersion:
|
|
5276
|
-
lockfileHash:
|
|
5277
|
-
revision:
|
|
5278
|
-
fieldContractHash:
|
|
5279
|
-
siteplane:
|
|
5280
|
-
runtimeNext:
|
|
5281
|
-
|
|
5282
|
-
|
|
5535
|
+
var buildProofSchema = z36.object({
|
|
5536
|
+
node: z36.string(),
|
|
5537
|
+
packageManager: z36.enum(["npm", "pnpm"]),
|
|
5538
|
+
packageManagerVersion: z36.string(),
|
|
5539
|
+
lockfileHash: z36.string(),
|
|
5540
|
+
revision: z36.string(),
|
|
5541
|
+
fieldContractHash: z36.string(),
|
|
5542
|
+
siteplane: z36.string(),
|
|
5543
|
+
runtimeNext: z36.string(),
|
|
5544
|
+
analytics: z36.string().optional(),
|
|
5545
|
+
next: z36.string(),
|
|
5546
|
+
react: z36.string()
|
|
5283
5547
|
}).strict();
|
|
5284
5548
|
var digest = (value) => `sha256:${createHash4("sha256").update(stableJsonStringify(value)).digest("hex")}`;
|
|
5285
5549
|
function fail2(code, message) {
|
|
@@ -5293,6 +5557,7 @@ var defaults = {
|
|
|
5293
5557
|
verify: siteSetupVerifyCommand,
|
|
5294
5558
|
post: postSiteSetup,
|
|
5295
5559
|
writeBuildProvenance,
|
|
5560
|
+
analyticsPublicKey: analyticsPublicKeyCommand,
|
|
5296
5561
|
now: Date.now,
|
|
5297
5562
|
pause: (milliseconds) => new Promise((resolve5) => setTimeout(resolve5, milliseconds))
|
|
5298
5563
|
};
|
|
@@ -5308,11 +5573,22 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5308
5573
|
if (context.status !== "ok")
|
|
5309
5574
|
return context;
|
|
5310
5575
|
const task = context.task;
|
|
5311
|
-
if (task.run?.runId !== config.runId || task.site?.siteId !== config.siteId || task.packages.siteplane !== config.packages.siteplane || task.packages.runtimeNext !== config.packages.runtimeNext || task.run.fieldContractHash !== config.fieldContractHash)
|
|
5576
|
+
if (task.run?.runId !== config.runId || task.site?.siteId !== config.siteId || task.packages.siteplane !== config.packages.siteplane || task.packages.analytics !== config.packages.analytics || task.packages.runtimeNext !== config.packages.runtimeNext || task.run.fieldContractHash !== config.fieldContractHash)
|
|
5312
5577
|
fail2("setup_contract_conflict", "Local configuration and the current applied setup task must match before deployment.");
|
|
5313
5578
|
if (!config.fieldContractHash)
|
|
5314
5579
|
fail2("setup_apply_required", "Instrument the agreed content and run setup apply before deployment.");
|
|
5315
5580
|
record = task.deployment;
|
|
5581
|
+
let analyticsPublicKey;
|
|
5582
|
+
if (task.modules.includes("analytics")) {
|
|
5583
|
+
try {
|
|
5584
|
+
analyticsPublicKey = await deps.analyticsPublicKey({
|
|
5585
|
+
config: { ...config, ...credentials },
|
|
5586
|
+
...input.fetcher ? { fetchImpl: input.fetcher } : {}
|
|
5587
|
+
});
|
|
5588
|
+
} catch {
|
|
5589
|
+
fail2("analytics_public_key_unavailable", "Read Analytics setup readiness with the existing connection and run analytics init before retrying setup deploy. The Analytics public key could not be read.");
|
|
5590
|
+
}
|
|
5591
|
+
}
|
|
5316
5592
|
const preflight = await deps.preflight(input);
|
|
5317
5593
|
if (preflight.status !== "ready")
|
|
5318
5594
|
return {
|
|
@@ -5352,12 +5628,12 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5352
5628
|
remaining();
|
|
5353
5629
|
return result;
|
|
5354
5630
|
};
|
|
5355
|
-
const domains =
|
|
5356
|
-
domains:
|
|
5357
|
-
name:
|
|
5358
|
-
verified:
|
|
5359
|
-
redirect:
|
|
5360
|
-
gitBranch:
|
|
5631
|
+
const domains = z36.object({
|
|
5632
|
+
domains: z36.array(z36.object({
|
|
5633
|
+
name: z36.string(),
|
|
5634
|
+
verified: z36.boolean(),
|
|
5635
|
+
redirect: z36.string().nullable().optional(),
|
|
5636
|
+
gitBranch: z36.string().nullable().optional()
|
|
5361
5637
|
}))
|
|
5362
5638
|
}).parse(await api(`/v9/projects/${provider.projectId}/domains?${scope}`)).domains.filter((domain) => domain.verified && !domain.redirect && !domain.gitBranch);
|
|
5363
5639
|
const origin = record?.origin ?? (domains.length === 1 ? `https://${domains[0].name}` : null);
|
|
@@ -5365,7 +5641,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5365
5641
|
fail2("production_origin_ambiguous", "The linked project needs one verified canonical Production domain, or the existing setup domain must still belong to it.");
|
|
5366
5642
|
if (record && (record.projectId !== provider.projectId || record.teamId !== provider.teamId))
|
|
5367
5643
|
fail2("deployment_target_conflict", "This setup already belongs to a different provider project/team. Restore its original local link.");
|
|
5368
|
-
const listEnv = async () =>
|
|
5644
|
+
const listEnv = async () => z36.object({ envs: z36.array(envSchema) }).parse(await api(`/v10/projects/${provider.projectId}/env?${scope}`)).envs;
|
|
5369
5645
|
let env = await listEnv();
|
|
5370
5646
|
const owned = (key) => {
|
|
5371
5647
|
const matches2 = env.filter((item) => item.key === key && item.target.includes("production"));
|
|
@@ -5403,7 +5679,11 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5403
5679
|
SITEPLANE_SETUP_RUN_ID: config.runId,
|
|
5404
5680
|
SITEPLANE_PORTAL_PATH: task.site.portalPath,
|
|
5405
5681
|
SITEPLANE_BUILD_FIELD_CONTRACT_HASH: config.fieldContractHash,
|
|
5406
|
-
SITEPLANE_BUILD_REVISION: revision
|
|
5682
|
+
SITEPLANE_BUILD_REVISION: revision,
|
|
5683
|
+
...analyticsPublicKey ? {
|
|
5684
|
+
NEXT_PUBLIC_SITEPLANE_ANALYTICS_SITE_KEY: analyticsPublicKey,
|
|
5685
|
+
NEXT_PUBLIC_SITEPLANE_ANALYTICS_ENDPOINT: `${config.apiBaseUrl.replace(/\/$/u, "")}/api/analytics/collect`
|
|
5686
|
+
} : {}
|
|
5407
5687
|
};
|
|
5408
5688
|
const fingerprint = digest({
|
|
5409
5689
|
publicBindings,
|
|
@@ -5434,9 +5714,9 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5434
5714
|
expectedOperationId: record?.operationId ?? null,
|
|
5435
5715
|
record: next
|
|
5436
5716
|
});
|
|
5437
|
-
const parsed =
|
|
5438
|
-
ok:
|
|
5439
|
-
data:
|
|
5717
|
+
const parsed = z36.object({
|
|
5718
|
+
ok: z36.literal(true),
|
|
5719
|
+
data: z36.object({ record: setupDeploymentRecordSchema }).strict()
|
|
5440
5720
|
}).strict().safeParse(result.payload);
|
|
5441
5721
|
if (!result.ok || !parsed.success || stableJsonStringify(parsed.data.data.record) !== stableJsonStringify(next))
|
|
5442
5722
|
fail2("deployment_record_unconfirmed", "The setup deployment record was not acknowledged. Reload context before continuing; no deployment is blindly repeated.");
|
|
@@ -5486,7 +5766,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5486
5766
|
const item = owned(key);
|
|
5487
5767
|
if (key === "SITEPLANE_ADMIN_SESSION_SECRET" && item && record.phase === "verified")
|
|
5488
5768
|
continue;
|
|
5489
|
-
const current = item ?
|
|
5769
|
+
const current = item ? z36.object({ key: z36.literal(key), value: z36.string() }).parse(await api(`/v1/projects/${provider.projectId}/env/${encodeURIComponent(item.id)}?${scope}`)).value : null;
|
|
5490
5770
|
if (current !== value)
|
|
5491
5771
|
pending.push({
|
|
5492
5772
|
key,
|
|
@@ -5511,7 +5791,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5511
5791
|
const item = owned(key);
|
|
5512
5792
|
if (!item)
|
|
5513
5793
|
fail2("environment_write_unconfirmed", "A Siteplane Production binding was not persisted; retry the same configuration.");
|
|
5514
|
-
const observed =
|
|
5794
|
+
const observed = z36.object({ key: z36.literal(key), value: z36.string() }).parse(await api(`/v1/projects/${provider.projectId}/env/${encodeURIComponent(item.id)}?${scope}`));
|
|
5515
5795
|
if (observed.value !== value)
|
|
5516
5796
|
fail2("environment_write_unconfirmed", "The provider readback does not match the authorized Siteplane value; no deployment was started.");
|
|
5517
5797
|
}
|
|
@@ -5524,7 +5804,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5524
5804
|
const detail = async (id) => deploymentSchema.parse(await api(`/v13/deployments/${encodeURIComponent(id)}?${scope}&withGitRepoInfo=true`));
|
|
5525
5805
|
const matches = (deployment2) => deployment2.projectId === provider.projectId && deployment2.target === "production" && (!deployment2.ownerId || deployment2.ownerId === provider.teamId) && deployment2.createdAt >= Date.parse(record.environmentWrittenAt) && (deployment2.meta?.siteplaneOperationId === record.operationId || provider.git && (deployment2.gitSource?.sha ?? deployment2.meta?.githubCommitSha ?? deployment2.meta?.gitlabCommitSha ?? deployment2.meta?.bitbucketCommitSha ?? deployment2.meta?.gitCommitSha) === revision);
|
|
5526
5806
|
const discover = async () => {
|
|
5527
|
-
const result =
|
|
5807
|
+
const result = z36.object({ deployments: z36.array(z36.object({ uid: z36.string() })) }).parse(await api(`/v6/deployments?${scope}&projectId=${provider.projectId}&target=production&since=${Date.parse(record.environmentWrittenAt)}&limit=100`));
|
|
5528
5808
|
const candidates = [];
|
|
5529
5809
|
for (const item of result.deployments) {
|
|
5530
5810
|
const found = await detail(item.uid);
|
|
@@ -5656,7 +5936,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5656
5936
|
...logs.matchAll(/SITEPLANE_BUILD_PROOF=(\{[^\n]+\})/gu)
|
|
5657
5937
|
].map((match) => buildProofSchema.parse(JSON.parse(match[1])));
|
|
5658
5938
|
const proof = markers.find((item) => item.revision === revision && item.fieldContractHash === config.fieldContractHash);
|
|
5659
|
-
if (!proof || !/^22\.\d+\.\d+$/u.test(proof.node) || proof.siteplane !== config.packages.siteplane || proof.runtimeNext !== config.packages.runtimeNext || proof.lockfileHash !== `sha256:${local.lockfile.sha256}` || proof.next !== local.nextVersion || proof.react !== local.reactVersion || !(proof.packageManager === "npm" ? /^10\./u : /^(9|10)\./u).test(proof.packageManagerVersion) || local.packageManager.declared && `${proof.packageManager}@${proof.packageManagerVersion}` !== local.packageManager.declared)
|
|
5939
|
+
if (!proof || !/^22\.\d+\.\d+$/u.test(proof.node) || proof.siteplane !== config.packages.siteplane || proof.runtimeNext !== config.packages.runtimeNext || proof.analytics !== config.packages.analytics || proof.lockfileHash !== `sha256:${local.lockfile.sha256}` || proof.next !== local.nextVersion || proof.react !== local.reactVersion || !(proof.packageManager === "npm" ? /^10\./u : /^(9|10)\./u).test(proof.packageManagerVersion) || local.packageManager.declared && `${proof.packageManager}@${proof.packageManagerVersion}` !== local.packageManager.declared)
|
|
5660
5940
|
fail2("provider_build_identity_missing", "The actual provider build did not prove the expected Node, package manager, lockfile, package pins and applied source. Inspect its install/build configuration.");
|
|
5661
5941
|
const canonical = await detail(new URL(origin).hostname);
|
|
5662
5942
|
if (canonical.id !== deployment.id)
|
|
@@ -5699,7 +5979,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5699
5979
|
|
|
5700
5980
|
// src/bin/run-siteplane.ts
|
|
5701
5981
|
async function runSiteplaneCli(args, dependencies = createDefaultDependencies()) {
|
|
5702
|
-
const writes = args[0] === "init" || args[0] === "setup" && ["apply", "prepare", "deploy"].includes(args[1] ?? "");
|
|
5982
|
+
const writes = args[0] === "init" || args[0] === "analytics" && args[1] === "init" || args[0] === "setup" && ["apply", "prepare", "deploy"].includes(args[1] ?? "");
|
|
5703
5983
|
const missingDeploy = args[0] === "setup" && args[1] === "deploy" && !await access6(join12(dependencies.cwd(), "siteplane.config.json")).then(
|
|
5704
5984
|
() => true,
|
|
5705
5985
|
() => false
|
|
@@ -5784,7 +6064,7 @@ async function runAnalyticsCommand(args, dependencies) {
|
|
|
5784
6064
|
};
|
|
5785
6065
|
const manifestPath = join12(projectDir, "siteplane.analytics.json");
|
|
5786
6066
|
if (subcommand === "init") {
|
|
5787
|
-
const rawPublicKey = await dependencies.commands.
|
|
6067
|
+
const { rawPublicKey } = await dependencies.commands.analyticsPrepareCommand({
|
|
5788
6068
|
config
|
|
5789
6069
|
});
|
|
5790
6070
|
const siteKeyLookup = getAnalyticsKeyLookup(rawPublicKey);
|
|
@@ -6111,6 +6391,7 @@ function createDefaultDependencies() {
|
|
|
6111
6391
|
analyticsImportCommand,
|
|
6112
6392
|
analyticsInitCommand,
|
|
6113
6393
|
analyticsPublicKeyCommand,
|
|
6394
|
+
analyticsPrepareCommand,
|
|
6114
6395
|
analyticsReadinessCommand,
|
|
6115
6396
|
analyticsSyncCommand,
|
|
6116
6397
|
analyticsTestCommand,
|