siteplane 0.1.51 → 0.1.52
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 +11 -0
- package/dist/bin/siteplane.js +153 -60
- package/dist/index.js +71 -48
- package/dist/next.js +70 -47
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,6 +10,17 @@ policies and check real rendered images after the change. This preparation does
|
|
|
10
10
|
Public Siteplane CLI for connected-site setup, field synchronization, Analytics
|
|
11
11
|
instrumentation and Booking integration.
|
|
12
12
|
|
|
13
|
+
## Controlled guest review
|
|
14
|
+
|
|
15
|
+
After a controlled accountless setup reaches `ready_for_review`, run `siteplane setup review`
|
|
16
|
+
in the same website repository. Its protected local installation key opens access to that project's
|
|
17
|
+
saved review without creating another site or deployment. Give the one-time link to the user;
|
|
18
|
+
they choose **Open review** in their own browser. Do not consume the link on their behalf.
|
|
19
|
+
Issue a fresh link only when needed. The URL fragment is a short-lived credential, so do not
|
|
20
|
+
write it to source, documentation, analytics or shared logs. Guest review can organize and finish
|
|
21
|
+
the setup; activation and account ownership require the later claim step. This entry remains
|
|
22
|
+
controlled while Batch 3 is being completed.
|
|
23
|
+
|
|
13
24
|
## Initial setup
|
|
14
25
|
|
|
15
26
|
Copy the setup prompt in Siteplane, then run its exact one-time command in the
|
package/dist/bin/siteplane.js
CHANGED
|
@@ -1934,6 +1934,18 @@ var fieldBridgeIdentitySchema = z17.object({
|
|
|
1934
1934
|
fieldContractHash: canonicalFieldContractHashSchema,
|
|
1935
1935
|
deploymentRevision: z17.string().trim().min(1).max(256)
|
|
1936
1936
|
}).strict();
|
|
1937
|
+
var setupPreviewAccessSchema = z17.object({
|
|
1938
|
+
capability: z17.string().regex(/^v1\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]{43}$/u).max(4096),
|
|
1939
|
+
expiresAt: z17.string().datetime()
|
|
1940
|
+
}).strict();
|
|
1941
|
+
var setupPreviewReadSchema = fieldBridgeIdentitySchema.extend({
|
|
1942
|
+
scope: z17.literal("setup_preview"),
|
|
1943
|
+
siteId: z17.string().uuid(),
|
|
1944
|
+
runId: z17.string().uuid(),
|
|
1945
|
+
bridgeSessionId: z17.string().min(1),
|
|
1946
|
+
expiresAt: z17.string().datetime(),
|
|
1947
|
+
contract: siteFieldContractV1Schema
|
|
1948
|
+
}).strict();
|
|
1937
1949
|
var fieldBridgeBaseSchema = z17.object({
|
|
1938
1950
|
version: z17.literal(BRIDGE_PROTOCOL_VERSION),
|
|
1939
1951
|
type: z17.enum(FIELD_BRIDGE_MESSAGE_TYPES),
|
|
@@ -1961,7 +1973,8 @@ var fieldBridgeInitMessageSchema = fieldBridgeBaseSchema.extend({
|
|
|
1961
1973
|
payload: z17.object({
|
|
1962
1974
|
adminOrigin: z17.string().url(),
|
|
1963
1975
|
customerOrigin: z17.string().url(),
|
|
1964
|
-
renderedPath: realRenderedPathSchema
|
|
1976
|
+
renderedPath: realRenderedPathSchema,
|
|
1977
|
+
setupPreview: setupPreviewAccessSchema.optional()
|
|
1965
1978
|
}).strict()
|
|
1966
1979
|
});
|
|
1967
1980
|
var fieldBridgeReadyMessageSchema = fieldBridgeBaseSchema.extend({
|
|
@@ -1974,7 +1987,7 @@ var fieldBridgeReadyMessageSchema = fieldBridgeBaseSchema.extend({
|
|
|
1974
1987
|
z17.literal("preview_values"),
|
|
1975
1988
|
z17.literal("field_evidence"),
|
|
1976
1989
|
z17.literal("visual_field_control")
|
|
1977
|
-
]).rest(z17.
|
|
1990
|
+
]).rest(z17.enum(["analytics_preview_readiness", "setup_preview"])).refine((capabilities) => capabilities.length <= 6)
|
|
1978
1991
|
}).strict()
|
|
1979
1992
|
});
|
|
1980
1993
|
var fieldBridgeFieldsMessageSchema = fieldBridgeBaseSchema.extend({
|
|
@@ -5296,6 +5309,79 @@ async function exists2(path) {
|
|
|
5296
5309
|
}
|
|
5297
5310
|
}
|
|
5298
5311
|
|
|
5312
|
+
// ../cli/dist/commands/setup-review.js
|
|
5313
|
+
import { z as z36 } from "zod";
|
|
5314
|
+
var responseSchema2 = z36.object({
|
|
5315
|
+
ok: z36.literal(true),
|
|
5316
|
+
data: z36.object({
|
|
5317
|
+
reviewUrl: z36.string().url(),
|
|
5318
|
+
expiresAt: z36.string().datetime({ offset: true })
|
|
5319
|
+
}).strict()
|
|
5320
|
+
}).strict();
|
|
5321
|
+
async function setupReviewCommand(input) {
|
|
5322
|
+
const [config, credentials] = await Promise.all([
|
|
5323
|
+
readProjectConfig(input.projectDir),
|
|
5324
|
+
readLocalCredentials(input.projectDir)
|
|
5325
|
+
]);
|
|
5326
|
+
if (!credentials.installation)
|
|
5327
|
+
return {
|
|
5328
|
+
status: "action_required",
|
|
5329
|
+
code: "local_installation_missing",
|
|
5330
|
+
message: "Open this project's review from your Siteplane workspace. Guest review requires the original local installation credentials."
|
|
5331
|
+
};
|
|
5332
|
+
if (new URL(config.apiBaseUrl).origin !== new URL(credentials.installation.apiBaseUrl).origin)
|
|
5333
|
+
return {
|
|
5334
|
+
status: "action_required",
|
|
5335
|
+
code: "installation_origin_mismatch",
|
|
5336
|
+
message: "The project and its local installation refer to different Siteplane origins. Restore the matching local configuration."
|
|
5337
|
+
};
|
|
5338
|
+
try {
|
|
5339
|
+
const response = await (input.fetcher ?? fetch)(new URL("/api/cli/setup/review", config.apiBaseUrl), {
|
|
5340
|
+
method: "POST",
|
|
5341
|
+
signal: AbortSignal.timeout(2e4),
|
|
5342
|
+
headers: {
|
|
5343
|
+
authorization: `Bearer ${credentials.installation.key}`,
|
|
5344
|
+
"content-type": "application/json",
|
|
5345
|
+
...input.vercelAutomationBypassSecret ? {
|
|
5346
|
+
"x-vercel-protection-bypass": input.vercelAutomationBypassSecret
|
|
5347
|
+
} : {}
|
|
5348
|
+
},
|
|
5349
|
+
body: JSON.stringify({ siteId: config.siteId, runId: config.runId })
|
|
5350
|
+
});
|
|
5351
|
+
const payload = await response.json();
|
|
5352
|
+
const parsed = responseSchema2.safeParse(payload);
|
|
5353
|
+
if (response.ok && parsed.success) {
|
|
5354
|
+
const url = new URL(parsed.data.data.reviewUrl);
|
|
5355
|
+
if (url.origin !== new URL(config.apiBaseUrl).origin || url.pathname !== "/setup/review" || url.search || !/^#token=[A-Za-z0-9_-]{43}$/u.test(url.hash))
|
|
5356
|
+
throw new Error("Invalid review destination.");
|
|
5357
|
+
return { status: "ready", ...parsed.data.data };
|
|
5358
|
+
}
|
|
5359
|
+
const denied = z36.object({
|
|
5360
|
+
error: z36.object({
|
|
5361
|
+
code: z36.enum([
|
|
5362
|
+
"invalid_installation",
|
|
5363
|
+
"already_claimed",
|
|
5364
|
+
"project_expired",
|
|
5365
|
+
"review_not_ready",
|
|
5366
|
+
"rate_limited",
|
|
5367
|
+
"review_access_unavailable"
|
|
5368
|
+
])
|
|
5369
|
+
})
|
|
5370
|
+
}).safeParse(payload);
|
|
5371
|
+
return {
|
|
5372
|
+
status: "action_required",
|
|
5373
|
+
code: denied.success ? denied.data.error.code : "review_access_unavailable",
|
|
5374
|
+
message: "The review link is unavailable. Check the existing setup status; do not create another project."
|
|
5375
|
+
};
|
|
5376
|
+
} catch {
|
|
5377
|
+
return {
|
|
5378
|
+
status: "action_required",
|
|
5379
|
+
code: "review_access_unavailable",
|
|
5380
|
+
message: "The review link request was not acknowledged. Run setup review again when the connection is available."
|
|
5381
|
+
};
|
|
5382
|
+
}
|
|
5383
|
+
}
|
|
5384
|
+
|
|
5299
5385
|
// ../cli/dist/commands/setup-prepare.js
|
|
5300
5386
|
import { access as access5, lstat as lstat2, mkdir as mkdir6, open as open3, readFile as readFile10, rename as rename3, rm as rm3 } from "fs/promises";
|
|
5301
5387
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
@@ -5570,8 +5656,8 @@ async function assertSourcePath(root, target) {
|
|
|
5570
5656
|
import { randomUUID as randomUUID6 } from "crypto";
|
|
5571
5657
|
import { lstat as lstat3, mkdir as mkdir7, open as open4, readFile as readFile11, rm as rm4, rmdir } from "fs/promises";
|
|
5572
5658
|
import { resolve as resolve2 } from "path";
|
|
5573
|
-
import { z as
|
|
5574
|
-
var ownerSchema =
|
|
5659
|
+
import { z as z37 } from "zod";
|
|
5660
|
+
var ownerSchema = z37.object({ pid: z37.number().int().positive(), nonce: z37.string().uuid() }).strict();
|
|
5575
5661
|
async function withSetupLock(projectDir, work) {
|
|
5576
5662
|
const gitPath = (await setupProcess("git", ["rev-parse", "--git-path", "siteplane-setup.lock"], { cwd: projectDir })).trim();
|
|
5577
5663
|
const path = resolve2(projectDir, gitPath);
|
|
@@ -5635,23 +5721,23 @@ import { execFile as execFile3 } from "child_process";
|
|
|
5635
5721
|
import { lstat as lstat4, readFile as readFile12, writeFile as writeFile5, mkdir as mkdir8 } from "fs/promises";
|
|
5636
5722
|
import { dirname as dirname8, isAbsolute as isAbsolute2, join as join11, relative as relative7, resolve as resolve3, sep as sep3 } from "path";
|
|
5637
5723
|
import { isDeepStrictEqual, promisify as promisify3 } from "util";
|
|
5638
|
-
import { z as
|
|
5724
|
+
import { z as z38 } from "zod";
|
|
5639
5725
|
var execute = promisify3(execFile3);
|
|
5640
5726
|
var name = ".siteplane/build-source.json";
|
|
5641
|
-
var oid =
|
|
5642
|
-
var entrySchema =
|
|
5643
|
-
path:
|
|
5644
|
-
mode:
|
|
5727
|
+
var oid = z38.string().regex(/^[0-9a-f]{40}$/u);
|
|
5728
|
+
var entrySchema = z38.object({
|
|
5729
|
+
path: z38.string().min(1).max(4096),
|
|
5730
|
+
mode: z38.enum(["100644", "100755", "120000"]),
|
|
5645
5731
|
oid
|
|
5646
5732
|
}).strict();
|
|
5647
|
-
var schema =
|
|
5648
|
-
version:
|
|
5733
|
+
var schema = z38.object({
|
|
5734
|
+
version: z38.literal(2),
|
|
5649
5735
|
revision: oid,
|
|
5650
|
-
commit:
|
|
5651
|
-
entries:
|
|
5652
|
-
providerConfigurations:
|
|
5653
|
-
path:
|
|
5654
|
-
source:
|
|
5736
|
+
commit: z38.string().min(1).max(1048576),
|
|
5737
|
+
entries: z38.array(entrySchema).min(1).max(1e5),
|
|
5738
|
+
providerConfigurations: z38.array(z38.object({
|
|
5739
|
+
path: z38.string().max(4096).regex(/(?:^|\/)vercel\.json$/u),
|
|
5740
|
+
source: z38.string().max(1048576)
|
|
5655
5741
|
}).strict()).max(1e3)
|
|
5656
5742
|
}).strict();
|
|
5657
5743
|
async function writeBuildProvenance(checkout, revision) {
|
|
@@ -5700,38 +5786,38 @@ import { createHash as createHash4, randomBytes as randomBytes2, randomUUID as r
|
|
|
5700
5786
|
import { access as access6, mkdir as mkdir9, mkdtemp, rm as rm5, writeFile as writeFile6 } from "fs/promises";
|
|
5701
5787
|
import { tmpdir } from "os";
|
|
5702
5788
|
import { join as join12 } from "path";
|
|
5703
|
-
import { z as
|
|
5704
|
-
var envSchema =
|
|
5705
|
-
id:
|
|
5706
|
-
key:
|
|
5707
|
-
target:
|
|
5708
|
-
type:
|
|
5709
|
-
comment:
|
|
5710
|
-
updatedAt:
|
|
5789
|
+
import { z as z39 } from "zod";
|
|
5790
|
+
var envSchema = z39.object({
|
|
5791
|
+
id: z39.string(),
|
|
5792
|
+
key: z39.string(),
|
|
5793
|
+
target: z39.array(z39.string()),
|
|
5794
|
+
type: z39.string(),
|
|
5795
|
+
comment: z39.string().optional(),
|
|
5796
|
+
updatedAt: z39.number().optional()
|
|
5711
5797
|
});
|
|
5712
|
-
var deploymentSchema =
|
|
5713
|
-
id:
|
|
5714
|
-
projectId:
|
|
5715
|
-
ownerId:
|
|
5716
|
-
target:
|
|
5717
|
-
readyState:
|
|
5718
|
-
createdAt:
|
|
5719
|
-
url:
|
|
5720
|
-
meta:
|
|
5721
|
-
gitSource:
|
|
5798
|
+
var deploymentSchema = z39.object({
|
|
5799
|
+
id: z39.string(),
|
|
5800
|
+
projectId: z39.string(),
|
|
5801
|
+
ownerId: z39.string().optional(),
|
|
5802
|
+
target: z39.string().nullable(),
|
|
5803
|
+
readyState: z39.string(),
|
|
5804
|
+
createdAt: z39.number(),
|
|
5805
|
+
url: z39.string(),
|
|
5806
|
+
meta: z39.record(z39.string(), z39.unknown()).optional(),
|
|
5807
|
+
gitSource: z39.object({ sha: z39.string().optional() }).nullable().optional()
|
|
5722
5808
|
});
|
|
5723
|
-
var buildProofSchema =
|
|
5724
|
-
node:
|
|
5725
|
-
packageManager:
|
|
5726
|
-
packageManagerVersion:
|
|
5727
|
-
lockfileHash:
|
|
5728
|
-
revision:
|
|
5729
|
-
fieldContractHash:
|
|
5730
|
-
siteplane:
|
|
5731
|
-
runtimeNext:
|
|
5732
|
-
analytics:
|
|
5733
|
-
next:
|
|
5734
|
-
react:
|
|
5809
|
+
var buildProofSchema = z39.object({
|
|
5810
|
+
node: z39.string(),
|
|
5811
|
+
packageManager: z39.enum(["npm", "pnpm"]),
|
|
5812
|
+
packageManagerVersion: z39.string(),
|
|
5813
|
+
lockfileHash: z39.string(),
|
|
5814
|
+
revision: z39.string(),
|
|
5815
|
+
fieldContractHash: z39.string(),
|
|
5816
|
+
siteplane: z39.string(),
|
|
5817
|
+
runtimeNext: z39.string(),
|
|
5818
|
+
analytics: z39.string().optional(),
|
|
5819
|
+
next: z39.string(),
|
|
5820
|
+
react: z39.string()
|
|
5735
5821
|
}).strict();
|
|
5736
5822
|
var digest = (value) => `sha256:${createHash4("sha256").update(stableJsonStringify(value)).digest("hex")}`;
|
|
5737
5823
|
function fail2(code, message) {
|
|
@@ -5816,12 +5902,12 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5816
5902
|
remaining();
|
|
5817
5903
|
return result2;
|
|
5818
5904
|
};
|
|
5819
|
-
const domains =
|
|
5820
|
-
domains:
|
|
5821
|
-
name:
|
|
5822
|
-
verified:
|
|
5823
|
-
redirect:
|
|
5824
|
-
gitBranch:
|
|
5905
|
+
const domains = z39.object({
|
|
5906
|
+
domains: z39.array(z39.object({
|
|
5907
|
+
name: z39.string(),
|
|
5908
|
+
verified: z39.boolean(),
|
|
5909
|
+
redirect: z39.string().nullable().optional(),
|
|
5910
|
+
gitBranch: z39.string().nullable().optional()
|
|
5825
5911
|
}))
|
|
5826
5912
|
}).parse(await api(`/v9/projects/${provider.projectId}/domains?${scope}`)).domains.filter((domain) => domain.verified && !domain.redirect && !domain.gitBranch);
|
|
5827
5913
|
const origin = record?.origin ?? (domains.length === 1 ? `https://${domains[0].name}` : null);
|
|
@@ -5829,7 +5915,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5829
5915
|
fail2("production_origin_ambiguous", "The linked project needs one verified canonical Production domain, or the existing setup domain must still belong to it.");
|
|
5830
5916
|
if (record && (record.projectId !== provider.projectId || record.teamId !== provider.teamId))
|
|
5831
5917
|
fail2("deployment_target_conflict", "This setup already belongs to a different provider project/team. Restore its original local link.");
|
|
5832
|
-
const listEnv = async () =>
|
|
5918
|
+
const listEnv = async () => z39.object({ envs: z39.array(envSchema) }).parse(await api(`/v10/projects/${provider.projectId}/env?${scope}`)).envs;
|
|
5833
5919
|
let env = await listEnv();
|
|
5834
5920
|
const owned = (key) => {
|
|
5835
5921
|
const matches2 = env.filter((item) => item.key === key && item.target.includes("production"));
|
|
@@ -5902,9 +5988,9 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5902
5988
|
expectedOperationId: record?.operationId ?? null,
|
|
5903
5989
|
record: next
|
|
5904
5990
|
});
|
|
5905
|
-
const parsed =
|
|
5906
|
-
ok:
|
|
5907
|
-
data:
|
|
5991
|
+
const parsed = z39.object({
|
|
5992
|
+
ok: z39.literal(true),
|
|
5993
|
+
data: z39.object({ record: setupDeploymentRecordSchema }).strict()
|
|
5908
5994
|
}).strict().safeParse(result2.payload);
|
|
5909
5995
|
if (!result2.ok || !parsed.success || stableJsonStringify(parsed.data.data.record) !== stableJsonStringify(next))
|
|
5910
5996
|
fail2("deployment_record_unconfirmed", "The setup deployment record was not acknowledged. Reload context before continuing; no deployment is blindly repeated.");
|
|
@@ -5954,7 +6040,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5954
6040
|
const item = owned(key);
|
|
5955
6041
|
if (key === "SITEPLANE_ADMIN_SESSION_SECRET" && item && record.phase === "verified")
|
|
5956
6042
|
continue;
|
|
5957
|
-
const current = item ?
|
|
6043
|
+
const current = item ? z39.object({ key: z39.literal(key), value: z39.string() }).parse(await api(`/v1/projects/${provider.projectId}/env/${encodeURIComponent(item.id)}?${scope}`)).value : null;
|
|
5958
6044
|
if (current !== value)
|
|
5959
6045
|
pending.push({
|
|
5960
6046
|
key,
|
|
@@ -5979,7 +6065,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5979
6065
|
const item = owned(key);
|
|
5980
6066
|
if (!item)
|
|
5981
6067
|
fail2("environment_write_unconfirmed", "A Siteplane Production binding was not persisted; retry the same configuration.");
|
|
5982
|
-
const observed =
|
|
6068
|
+
const observed = z39.object({ key: z39.literal(key), value: z39.string() }).parse(await api(`/v1/projects/${provider.projectId}/env/${encodeURIComponent(item.id)}?${scope}`));
|
|
5983
6069
|
if (observed.value !== value)
|
|
5984
6070
|
fail2("environment_write_unconfirmed", "The provider readback does not match the authorized Siteplane value; no deployment was started.");
|
|
5985
6071
|
}
|
|
@@ -5992,7 +6078,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
5992
6078
|
const detail = async (id) => deploymentSchema.parse(await api(`/v13/deployments/${encodeURIComponent(id)}?${scope}&withGitRepoInfo=true`));
|
|
5993
6079
|
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);
|
|
5994
6080
|
const discover = async () => {
|
|
5995
|
-
const result2 =
|
|
6081
|
+
const result2 = z39.object({ deployments: z39.array(z39.object({ uid: z39.string() })) }).parse(await api(`/v6/deployments?${scope}&projectId=${provider.projectId}&target=production&since=${Date.parse(record.environmentWrittenAt)}&limit=100`));
|
|
5996
6082
|
const candidates = [];
|
|
5997
6083
|
for (const item of result2.deployments) {
|
|
5998
6084
|
const found = await detail(item.uid);
|
|
@@ -6149,6 +6235,7 @@ async function setupDeployCommand(input, deps = defaults) {
|
|
|
6149
6235
|
});
|
|
6150
6236
|
return {
|
|
6151
6237
|
status: "ready_for_review",
|
|
6238
|
+
...task.assignment === "provisional" ? { reviewCommand: `npx -y siteplane@${task.packages.siteplane} setup review` } : {},
|
|
6152
6239
|
deploymentId: deployment.id,
|
|
6153
6240
|
origin,
|
|
6154
6241
|
configurationFingerprint: fingerprint,
|
|
@@ -6399,6 +6486,11 @@ async function runSetupCommand(args, dependencies) {
|
|
|
6399
6486
|
dependencies.stdout(JSON.stringify(result2, null, 2));
|
|
6400
6487
|
return { exitCode: result2.status === "action_required" ? 1 : 0 };
|
|
6401
6488
|
}
|
|
6489
|
+
if (area === "review") {
|
|
6490
|
+
const result2 = await dependencies.commands.setupReviewCommand({ projectDir, ...connectionOptions });
|
|
6491
|
+
dependencies.stdout(JSON.stringify(result2, null, 2));
|
|
6492
|
+
return { exitCode: result2.status === "ready" ? 0 : 1 };
|
|
6493
|
+
}
|
|
6402
6494
|
if (area === "context") {
|
|
6403
6495
|
const result2 = await dependencies.commands.siteSetupContextCommand({
|
|
6404
6496
|
projectDir,
|
|
@@ -6445,7 +6537,7 @@ async function runSetupCommand(args, dependencies) {
|
|
|
6445
6537
|
return { exitCode: result2.status === "ready_for_review" ? 0 : 1 };
|
|
6446
6538
|
}
|
|
6447
6539
|
dependencies.stdout(
|
|
6448
|
-
"Usage: siteplane setup <start|preflight|prepare|context|activity|apply|deploy|verify>"
|
|
6540
|
+
"Usage: siteplane setup <start|preflight|prepare|context|activity|apply|deploy|verify|review>"
|
|
6449
6541
|
);
|
|
6450
6542
|
return { exitCode: 1 };
|
|
6451
6543
|
}
|
|
@@ -6585,6 +6677,7 @@ function createDefaultDependencies() {
|
|
|
6585
6677
|
siteSetupVerifyCommand,
|
|
6586
6678
|
setupPreflightCommand,
|
|
6587
6679
|
setupStartCommand,
|
|
6680
|
+
setupReviewCommand,
|
|
6588
6681
|
setupPrepareCommand,
|
|
6589
6682
|
setupDeployCommand,
|
|
6590
6683
|
initCommand,
|
package/dist/index.js
CHANGED
|
@@ -1662,6 +1662,18 @@ var fieldBridgeIdentitySchema = z17.object({
|
|
|
1662
1662
|
fieldContractHash: canonicalFieldContractHashSchema,
|
|
1663
1663
|
deploymentRevision: z17.string().trim().min(1).max(256)
|
|
1664
1664
|
}).strict();
|
|
1665
|
+
var setupPreviewAccessSchema = z17.object({
|
|
1666
|
+
capability: z17.string().regex(/^v1\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]{43}$/u).max(4096),
|
|
1667
|
+
expiresAt: z17.string().datetime()
|
|
1668
|
+
}).strict();
|
|
1669
|
+
var setupPreviewReadSchema = fieldBridgeIdentitySchema.extend({
|
|
1670
|
+
scope: z17.literal("setup_preview"),
|
|
1671
|
+
siteId: z17.string().uuid(),
|
|
1672
|
+
runId: z17.string().uuid(),
|
|
1673
|
+
bridgeSessionId: z17.string().min(1),
|
|
1674
|
+
expiresAt: z17.string().datetime(),
|
|
1675
|
+
contract: siteFieldContractV1Schema
|
|
1676
|
+
}).strict();
|
|
1665
1677
|
var fieldBridgeBaseSchema = z17.object({
|
|
1666
1678
|
version: z17.literal(BRIDGE_PROTOCOL_VERSION),
|
|
1667
1679
|
type: z17.enum(FIELD_BRIDGE_MESSAGE_TYPES),
|
|
@@ -1689,7 +1701,8 @@ var fieldBridgeInitMessageSchema = fieldBridgeBaseSchema.extend({
|
|
|
1689
1701
|
payload: z17.object({
|
|
1690
1702
|
adminOrigin: z17.string().url(),
|
|
1691
1703
|
customerOrigin: z17.string().url(),
|
|
1692
|
-
renderedPath: realRenderedPathSchema
|
|
1704
|
+
renderedPath: realRenderedPathSchema,
|
|
1705
|
+
setupPreview: setupPreviewAccessSchema.optional()
|
|
1693
1706
|
}).strict()
|
|
1694
1707
|
});
|
|
1695
1708
|
var fieldBridgeReadyMessageSchema = fieldBridgeBaseSchema.extend({
|
|
@@ -1702,7 +1715,7 @@ var fieldBridgeReadyMessageSchema = fieldBridgeBaseSchema.extend({
|
|
|
1702
1715
|
z17.literal("preview_values"),
|
|
1703
1716
|
z17.literal("field_evidence"),
|
|
1704
1717
|
z17.literal("visual_field_control")
|
|
1705
|
-
]).rest(z17.
|
|
1718
|
+
]).rest(z17.enum(["analytics_preview_readiness", "setup_preview"])).refine((capabilities) => capabilities.length <= 6)
|
|
1706
1719
|
}).strict()
|
|
1707
1720
|
});
|
|
1708
1721
|
var fieldBridgeFieldsMessageSchema = fieldBridgeBaseSchema.extend({
|
|
@@ -3476,6 +3489,16 @@ var bootstrapResponseSchema2 = z35.object({
|
|
|
3476
3489
|
data: siteSetupBootstrapDataSchema
|
|
3477
3490
|
}).strict();
|
|
3478
3491
|
|
|
3492
|
+
// ../cli/dist/commands/setup-review.js
|
|
3493
|
+
import { z as z36 } from "zod";
|
|
3494
|
+
var responseSchema2 = z36.object({
|
|
3495
|
+
ok: z36.literal(true),
|
|
3496
|
+
data: z36.object({
|
|
3497
|
+
reviewUrl: z36.string().url(),
|
|
3498
|
+
expiresAt: z36.string().datetime({ offset: true })
|
|
3499
|
+
}).strict()
|
|
3500
|
+
}).strict();
|
|
3501
|
+
|
|
3479
3502
|
// ../cli/dist/commands/setup-prepare.js
|
|
3480
3503
|
import { access as access5, lstat as lstat2, mkdir as mkdir6, open as open3, readFile as readFile10, rename as rename3, rm as rm3 } from "fs/promises";
|
|
3481
3504
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
@@ -3486,8 +3509,8 @@ import ts3 from "typescript";
|
|
|
3486
3509
|
import { randomUUID as randomUUID6 } from "crypto";
|
|
3487
3510
|
import { lstat as lstat3, mkdir as mkdir7, open as open4, readFile as readFile11, rm as rm4, rmdir } from "fs/promises";
|
|
3488
3511
|
import { resolve as resolve2 } from "path";
|
|
3489
|
-
import { z as
|
|
3490
|
-
var ownerSchema =
|
|
3512
|
+
import { z as z37 } from "zod";
|
|
3513
|
+
var ownerSchema = z37.object({ pid: z37.number().int().positive(), nonce: z37.string().uuid() }).strict();
|
|
3491
3514
|
|
|
3492
3515
|
// ../cli/dist/config/build-provenance.js
|
|
3493
3516
|
import { createHash as createHash3 } from "crypto";
|
|
@@ -3495,23 +3518,23 @@ import { execFile as execFile3 } from "child_process";
|
|
|
3495
3518
|
import { lstat as lstat4, readFile as readFile12, writeFile as writeFile5, mkdir as mkdir8 } from "fs/promises";
|
|
3496
3519
|
import { dirname as dirname8, isAbsolute as isAbsolute2, join as join11, relative as relative7, resolve as resolve3, sep as sep3 } from "path";
|
|
3497
3520
|
import { isDeepStrictEqual, promisify as promisify3 } from "util";
|
|
3498
|
-
import { z as
|
|
3521
|
+
import { z as z38 } from "zod";
|
|
3499
3522
|
var execute = promisify3(execFile3);
|
|
3500
3523
|
var name = ".siteplane/build-source.json";
|
|
3501
|
-
var oid =
|
|
3502
|
-
var entrySchema =
|
|
3503
|
-
path:
|
|
3504
|
-
mode:
|
|
3524
|
+
var oid = z38.string().regex(/^[0-9a-f]{40}$/u);
|
|
3525
|
+
var entrySchema = z38.object({
|
|
3526
|
+
path: z38.string().min(1).max(4096),
|
|
3527
|
+
mode: z38.enum(["100644", "100755", "120000"]),
|
|
3505
3528
|
oid
|
|
3506
3529
|
}).strict();
|
|
3507
|
-
var schema =
|
|
3508
|
-
version:
|
|
3530
|
+
var schema = z38.object({
|
|
3531
|
+
version: z38.literal(2),
|
|
3509
3532
|
revision: oid,
|
|
3510
|
-
commit:
|
|
3511
|
-
entries:
|
|
3512
|
-
providerConfigurations:
|
|
3513
|
-
path:
|
|
3514
|
-
source:
|
|
3533
|
+
commit: z38.string().min(1).max(1048576),
|
|
3534
|
+
entries: z38.array(entrySchema).min(1).max(1e5),
|
|
3535
|
+
providerConfigurations: z38.array(z38.object({
|
|
3536
|
+
path: z38.string().max(4096).regex(/(?:^|\/)vercel\.json$/u),
|
|
3537
|
+
source: z38.string().max(1048576)
|
|
3515
3538
|
}).strict()).max(1e3)
|
|
3516
3539
|
}).strict();
|
|
3517
3540
|
async function writeBuildProvenance(checkout, revision) {
|
|
@@ -3560,38 +3583,38 @@ import { createHash as createHash4, randomBytes as randomBytes2, randomUUID as r
|
|
|
3560
3583
|
import { access as access6, mkdir as mkdir9, mkdtemp, rm as rm5, writeFile as writeFile6 } from "fs/promises";
|
|
3561
3584
|
import { tmpdir } from "os";
|
|
3562
3585
|
import { join as join12 } from "path";
|
|
3563
|
-
import { z as
|
|
3564
|
-
var envSchema =
|
|
3565
|
-
id:
|
|
3566
|
-
key:
|
|
3567
|
-
target:
|
|
3568
|
-
type:
|
|
3569
|
-
comment:
|
|
3570
|
-
updatedAt:
|
|
3571
|
-
});
|
|
3572
|
-
var deploymentSchema =
|
|
3573
|
-
id:
|
|
3574
|
-
projectId:
|
|
3575
|
-
ownerId:
|
|
3576
|
-
target:
|
|
3577
|
-
readyState:
|
|
3578
|
-
createdAt:
|
|
3579
|
-
url:
|
|
3580
|
-
meta:
|
|
3581
|
-
gitSource:
|
|
3582
|
-
});
|
|
3583
|
-
var buildProofSchema =
|
|
3584
|
-
node:
|
|
3585
|
-
packageManager:
|
|
3586
|
-
packageManagerVersion:
|
|
3587
|
-
lockfileHash:
|
|
3588
|
-
revision:
|
|
3589
|
-
fieldContractHash:
|
|
3590
|
-
siteplane:
|
|
3591
|
-
runtimeNext:
|
|
3592
|
-
analytics:
|
|
3593
|
-
next:
|
|
3594
|
-
react:
|
|
3586
|
+
import { z as z39 } from "zod";
|
|
3587
|
+
var envSchema = z39.object({
|
|
3588
|
+
id: z39.string(),
|
|
3589
|
+
key: z39.string(),
|
|
3590
|
+
target: z39.array(z39.string()),
|
|
3591
|
+
type: z39.string(),
|
|
3592
|
+
comment: z39.string().optional(),
|
|
3593
|
+
updatedAt: z39.number().optional()
|
|
3594
|
+
});
|
|
3595
|
+
var deploymentSchema = z39.object({
|
|
3596
|
+
id: z39.string(),
|
|
3597
|
+
projectId: z39.string(),
|
|
3598
|
+
ownerId: z39.string().optional(),
|
|
3599
|
+
target: z39.string().nullable(),
|
|
3600
|
+
readyState: z39.string(),
|
|
3601
|
+
createdAt: z39.number(),
|
|
3602
|
+
url: z39.string(),
|
|
3603
|
+
meta: z39.record(z39.string(), z39.unknown()).optional(),
|
|
3604
|
+
gitSource: z39.object({ sha: z39.string().optional() }).nullable().optional()
|
|
3605
|
+
});
|
|
3606
|
+
var buildProofSchema = z39.object({
|
|
3607
|
+
node: z39.string(),
|
|
3608
|
+
packageManager: z39.enum(["npm", "pnpm"]),
|
|
3609
|
+
packageManagerVersion: z39.string(),
|
|
3610
|
+
lockfileHash: z39.string(),
|
|
3611
|
+
revision: z39.string(),
|
|
3612
|
+
fieldContractHash: z39.string(),
|
|
3613
|
+
siteplane: z39.string(),
|
|
3614
|
+
runtimeNext: z39.string(),
|
|
3615
|
+
analytics: z39.string().optional(),
|
|
3616
|
+
next: z39.string(),
|
|
3617
|
+
react: z39.string()
|
|
3595
3618
|
}).strict();
|
|
3596
3619
|
var defaults = {
|
|
3597
3620
|
preflight: setupPreflightCommand,
|
package/dist/next.js
CHANGED
|
@@ -1865,6 +1865,18 @@ var fieldBridgeIdentitySchema = z17.object({
|
|
|
1865
1865
|
fieldContractHash: canonicalFieldContractHashSchema,
|
|
1866
1866
|
deploymentRevision: z17.string().trim().min(1).max(256)
|
|
1867
1867
|
}).strict();
|
|
1868
|
+
var setupPreviewAccessSchema = z17.object({
|
|
1869
|
+
capability: z17.string().regex(/^v1\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]{43}$/u).max(4096),
|
|
1870
|
+
expiresAt: z17.string().datetime()
|
|
1871
|
+
}).strict();
|
|
1872
|
+
var setupPreviewReadSchema = fieldBridgeIdentitySchema.extend({
|
|
1873
|
+
scope: z17.literal("setup_preview"),
|
|
1874
|
+
siteId: z17.string().uuid(),
|
|
1875
|
+
runId: z17.string().uuid(),
|
|
1876
|
+
bridgeSessionId: z17.string().min(1),
|
|
1877
|
+
expiresAt: z17.string().datetime(),
|
|
1878
|
+
contract: siteFieldContractV1Schema
|
|
1879
|
+
}).strict();
|
|
1868
1880
|
var fieldBridgeBaseSchema = z17.object({
|
|
1869
1881
|
version: z17.literal(BRIDGE_PROTOCOL_VERSION),
|
|
1870
1882
|
type: z17.enum(FIELD_BRIDGE_MESSAGE_TYPES),
|
|
@@ -1892,7 +1904,8 @@ var fieldBridgeInitMessageSchema = fieldBridgeBaseSchema.extend({
|
|
|
1892
1904
|
payload: z17.object({
|
|
1893
1905
|
adminOrigin: z17.string().url(),
|
|
1894
1906
|
customerOrigin: z17.string().url(),
|
|
1895
|
-
renderedPath: realRenderedPathSchema
|
|
1907
|
+
renderedPath: realRenderedPathSchema,
|
|
1908
|
+
setupPreview: setupPreviewAccessSchema.optional()
|
|
1896
1909
|
}).strict()
|
|
1897
1910
|
});
|
|
1898
1911
|
var fieldBridgeReadyMessageSchema = fieldBridgeBaseSchema.extend({
|
|
@@ -1905,7 +1918,7 @@ var fieldBridgeReadyMessageSchema = fieldBridgeBaseSchema.extend({
|
|
|
1905
1918
|
z17.literal("preview_values"),
|
|
1906
1919
|
z17.literal("field_evidence"),
|
|
1907
1920
|
z17.literal("visual_field_control")
|
|
1908
|
-
]).rest(z17.
|
|
1921
|
+
]).rest(z17.enum(["analytics_preview_readiness", "setup_preview"])).refine((capabilities) => capabilities.length <= 6)
|
|
1909
1922
|
}).strict()
|
|
1910
1923
|
});
|
|
1911
1924
|
var fieldBridgeFieldsMessageSchema = fieldBridgeBaseSchema.extend({
|
|
@@ -3836,6 +3849,16 @@ var bootstrapResponseSchema2 = z35.object({
|
|
|
3836
3849
|
data: siteSetupBootstrapDataSchema
|
|
3837
3850
|
}).strict();
|
|
3838
3851
|
|
|
3852
|
+
// ../cli/dist/commands/setup-review.js
|
|
3853
|
+
import { z as z36 } from "zod";
|
|
3854
|
+
var responseSchema2 = z36.object({
|
|
3855
|
+
ok: z36.literal(true),
|
|
3856
|
+
data: z36.object({
|
|
3857
|
+
reviewUrl: z36.string().url(),
|
|
3858
|
+
expiresAt: z36.string().datetime({ offset: true })
|
|
3859
|
+
}).strict()
|
|
3860
|
+
}).strict();
|
|
3861
|
+
|
|
3839
3862
|
// ../cli/dist/commands/setup-prepare.js
|
|
3840
3863
|
import { access as access5, lstat as lstat2, mkdir as mkdir6, open as open3, readFile as readFile10, rename as rename3, rm as rm3 } from "fs/promises";
|
|
3841
3864
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
@@ -3846,8 +3869,8 @@ import ts3 from "typescript";
|
|
|
3846
3869
|
import { randomUUID as randomUUID6 } from "crypto";
|
|
3847
3870
|
import { lstat as lstat3, mkdir as mkdir7, open as open4, readFile as readFile11, rm as rm4, rmdir } from "fs/promises";
|
|
3848
3871
|
import { resolve as resolve2 } from "path";
|
|
3849
|
-
import { z as
|
|
3850
|
-
var ownerSchema =
|
|
3872
|
+
import { z as z37 } from "zod";
|
|
3873
|
+
var ownerSchema = z37.object({ pid: z37.number().int().positive(), nonce: z37.string().uuid() }).strict();
|
|
3851
3874
|
|
|
3852
3875
|
// ../cli/dist/config/build-provenance.js
|
|
3853
3876
|
import { createHash as createHash3 } from "crypto";
|
|
@@ -3855,23 +3878,23 @@ import { execFile as execFile3 } from "child_process";
|
|
|
3855
3878
|
import { lstat as lstat4, readFile as readFile12, writeFile as writeFile5, mkdir as mkdir8 } from "fs/promises";
|
|
3856
3879
|
import { dirname as dirname8, isAbsolute as isAbsolute2, join as join11, relative as relative7, resolve as resolve3, sep as sep3 } from "path";
|
|
3857
3880
|
import { isDeepStrictEqual, promisify as promisify3 } from "util";
|
|
3858
|
-
import { z as
|
|
3881
|
+
import { z as z38 } from "zod";
|
|
3859
3882
|
var execute = promisify3(execFile3);
|
|
3860
3883
|
var name = ".siteplane/build-source.json";
|
|
3861
|
-
var oid =
|
|
3862
|
-
var entrySchema =
|
|
3863
|
-
path:
|
|
3864
|
-
mode:
|
|
3884
|
+
var oid = z38.string().regex(/^[0-9a-f]{40}$/u);
|
|
3885
|
+
var entrySchema = z38.object({
|
|
3886
|
+
path: z38.string().min(1).max(4096),
|
|
3887
|
+
mode: z38.enum(["100644", "100755", "120000"]),
|
|
3865
3888
|
oid
|
|
3866
3889
|
}).strict();
|
|
3867
|
-
var schema =
|
|
3868
|
-
version:
|
|
3890
|
+
var schema = z38.object({
|
|
3891
|
+
version: z38.literal(2),
|
|
3869
3892
|
revision: oid,
|
|
3870
|
-
commit:
|
|
3871
|
-
entries:
|
|
3872
|
-
providerConfigurations:
|
|
3873
|
-
path:
|
|
3874
|
-
source:
|
|
3893
|
+
commit: z38.string().min(1).max(1048576),
|
|
3894
|
+
entries: z38.array(entrySchema).min(1).max(1e5),
|
|
3895
|
+
providerConfigurations: z38.array(z38.object({
|
|
3896
|
+
path: z38.string().max(4096).regex(/(?:^|\/)vercel\.json$/u),
|
|
3897
|
+
source: z38.string().max(1048576)
|
|
3875
3898
|
}).strict()).max(1e3)
|
|
3876
3899
|
}).strict();
|
|
3877
3900
|
var gitHash = (type, content) => createHash3("sha1").update(`${type} ${content.length}\0`).update(content).digest("hex");
|
|
@@ -3971,7 +3994,7 @@ async function readBuildProvenance(projectDirectory) {
|
|
|
3971
3994
|
const original = configurations.get(entry.path);
|
|
3972
3995
|
if (contents && original && entry.mode !== "120000") {
|
|
3973
3996
|
try {
|
|
3974
|
-
const object =
|
|
3997
|
+
const object = z38.record(z38.string(), z38.unknown());
|
|
3975
3998
|
const actual = object.parse(JSON.parse(contents.toString("utf8")));
|
|
3976
3999
|
const expected = object.parse(JSON.parse(original));
|
|
3977
4000
|
if (!Object.hasOwn(expected, "version") && actual.version === 2)
|
|
@@ -4025,38 +4048,38 @@ import { createHash as createHash4, randomBytes as randomBytes2, randomUUID as r
|
|
|
4025
4048
|
import { access as access6, mkdir as mkdir9, mkdtemp, rm as rm5, writeFile as writeFile6 } from "fs/promises";
|
|
4026
4049
|
import { tmpdir } from "os";
|
|
4027
4050
|
import { join as join12 } from "path";
|
|
4028
|
-
import { z as
|
|
4029
|
-
var envSchema =
|
|
4030
|
-
id:
|
|
4031
|
-
key:
|
|
4032
|
-
target:
|
|
4033
|
-
type:
|
|
4034
|
-
comment:
|
|
4035
|
-
updatedAt:
|
|
4051
|
+
import { z as z39 } from "zod";
|
|
4052
|
+
var envSchema = z39.object({
|
|
4053
|
+
id: z39.string(),
|
|
4054
|
+
key: z39.string(),
|
|
4055
|
+
target: z39.array(z39.string()),
|
|
4056
|
+
type: z39.string(),
|
|
4057
|
+
comment: z39.string().optional(),
|
|
4058
|
+
updatedAt: z39.number().optional()
|
|
4036
4059
|
});
|
|
4037
|
-
var deploymentSchema =
|
|
4038
|
-
id:
|
|
4039
|
-
projectId:
|
|
4040
|
-
ownerId:
|
|
4041
|
-
target:
|
|
4042
|
-
readyState:
|
|
4043
|
-
createdAt:
|
|
4044
|
-
url:
|
|
4045
|
-
meta:
|
|
4046
|
-
gitSource:
|
|
4060
|
+
var deploymentSchema = z39.object({
|
|
4061
|
+
id: z39.string(),
|
|
4062
|
+
projectId: z39.string(),
|
|
4063
|
+
ownerId: z39.string().optional(),
|
|
4064
|
+
target: z39.string().nullable(),
|
|
4065
|
+
readyState: z39.string(),
|
|
4066
|
+
createdAt: z39.number(),
|
|
4067
|
+
url: z39.string(),
|
|
4068
|
+
meta: z39.record(z39.string(), z39.unknown()).optional(),
|
|
4069
|
+
gitSource: z39.object({ sha: z39.string().optional() }).nullable().optional()
|
|
4047
4070
|
});
|
|
4048
|
-
var buildProofSchema =
|
|
4049
|
-
node:
|
|
4050
|
-
packageManager:
|
|
4051
|
-
packageManagerVersion:
|
|
4052
|
-
lockfileHash:
|
|
4053
|
-
revision:
|
|
4054
|
-
fieldContractHash:
|
|
4055
|
-
siteplane:
|
|
4056
|
-
runtimeNext:
|
|
4057
|
-
analytics:
|
|
4058
|
-
next:
|
|
4059
|
-
react:
|
|
4071
|
+
var buildProofSchema = z39.object({
|
|
4072
|
+
node: z39.string(),
|
|
4073
|
+
packageManager: z39.enum(["npm", "pnpm"]),
|
|
4074
|
+
packageManagerVersion: z39.string(),
|
|
4075
|
+
lockfileHash: z39.string(),
|
|
4076
|
+
revision: z39.string(),
|
|
4077
|
+
fieldContractHash: z39.string(),
|
|
4078
|
+
siteplane: z39.string(),
|
|
4079
|
+
runtimeNext: z39.string(),
|
|
4080
|
+
analytics: z39.string().optional(),
|
|
4081
|
+
next: z39.string(),
|
|
4082
|
+
react: z39.string()
|
|
4060
4083
|
}).strict();
|
|
4061
4084
|
var defaults = {
|
|
4062
4085
|
preflight: setupPreflightCommand,
|