@forgezero/agent 0.1.95 → 0.1.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-heartbeat.js +1 -1
- package/dist/bootstrap.js +8 -3
- package/dist/fz-agent.js +2 -2
- package/dist/fz.js +16 -6
- package/dist/metal-bootstrap.js +1 -1
- package/dist/operator-bootstrap.js +8 -3
- package/dist/platform-bootstrap-runtime.d.ts +10 -0
- package/dist/platform-bootstrap-runtime.js +6 -1
- package/dist/platform-fleet-verification.js +8 -3
- package/dist/platform-genesis-config.d.ts +1 -1
- package/dist/platform-launch-profile.d.ts +10 -0
- package/dist/provision.js +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
package/dist/agent-heartbeat.js
CHANGED
package/dist/bootstrap.js
CHANGED
|
@@ -1420,7 +1420,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
|
|
|
1420
1420
|
var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
|
|
1421
1421
|
|
|
1422
1422
|
// src/version.ts
|
|
1423
|
-
var VERSION = "0.1.
|
|
1423
|
+
var VERSION = "0.1.97";
|
|
1424
1424
|
|
|
1425
1425
|
// src/software.ts
|
|
1426
1426
|
var PINNED_BUN_VERSION = "1.3.14";
|
|
@@ -3090,7 +3090,7 @@ var httpsOrigin = (name, raw) => {
|
|
|
3090
3090
|
};
|
|
3091
3091
|
var agentTelemetryOrigin = (raw) => raw === "http://127.0.0.1:4318" ? raw : httpsOrigin("agentOtlpEndpoint", raw);
|
|
3092
3092
|
function validatePlatformInitialInventory(value) {
|
|
3093
|
-
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
3093
|
+
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "attestation", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
3094
3094
|
throw new Error("initial platform inventory coordinates are invalid");
|
|
3095
3095
|
}
|
|
3096
3096
|
safeAtom("initialInventory.region.label", value.region.label);
|
|
@@ -3098,6 +3098,8 @@ function validatePlatformInitialInventory(value) {
|
|
|
3098
3098
|
safeAtom("initialInventory.region.city", value.region.city);
|
|
3099
3099
|
if (value.deployment !== undefined && (!value.deployment || typeof value.deployment !== "object" || Array.isArray(value.deployment) || Object.keys(value.deployment).some((key) => !["source", "branch", "revision", "bundleSha256"].includes(key)) || value.deployment.source !== "bootstrap-bundle" || !["dev", "main"].includes(value.deployment.branch) || !/^[a-f0-9]{40}$/.test(value.deployment.revision) || !/^[a-f0-9]{64}$/.test(value.deployment.bundleSha256)))
|
|
3100
3100
|
throw new Error("initial platform deployment evidence is invalid");
|
|
3101
|
+
if (value.attestation !== undefined && (!value.attestation || typeof value.attestation !== "object" || Array.isArray(value.attestation) || Object.keys(value.attestation).some((key) => !["measurement", "tcbFloor"].includes(key)) || !/^[a-f0-9]{96}$/.test(value.attestation.measurement) || !value.attestation.tcbFloor || typeof value.attestation.tcbFloor !== "object" || Array.isArray(value.attestation.tcbFloor) || Object.keys(value.attestation.tcbFloor).some((key) => !["bootLoader", "tee", "snp", "microcode"].includes(key)) || Object.values(value.attestation.tcbFloor).some((component) => !Number.isSafeInteger(component) || component < 0 || component > 255)))
|
|
3102
|
+
throw new Error("initial platform attestation evidence is invalid");
|
|
3101
3103
|
const computes = validatePlatformGenesisGuests(value.computes.map((compute) => {
|
|
3102
3104
|
if (!compute || typeof compute !== "object" || Array.isArray(compute) || Object.keys(compute).some((key) => ![
|
|
3103
3105
|
"name",
|
|
@@ -3133,6 +3135,9 @@ function validatePlatformInitialInventory(value) {
|
|
|
3133
3135
|
databaseAgency: compute.databaseAgency,
|
|
3134
3136
|
confidential: true
|
|
3135
3137
|
})),
|
|
3138
|
+
...value.attestation ? {
|
|
3139
|
+
attestation: { measurement: value.attestation.measurement, tcbFloor: { ...value.attestation.tcbFloor } }
|
|
3140
|
+
} : {},
|
|
3136
3141
|
...value.deployment ? { deployment: { ...value.deployment } } : {}
|
|
3137
3142
|
};
|
|
3138
3143
|
}
|
|
@@ -5108,7 +5113,7 @@ function planBootstrapAgentInstall(config, phase, context) {
|
|
|
5108
5113
|
lifecycleProfilePath: bound && config.kind === "platform" ? LIFECYCLE_PROFILE : undefined,
|
|
5109
5114
|
enforceEgress: true,
|
|
5110
5115
|
runnerLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, config.runtime.bluePort, config.runtime.greenPort] : [],
|
|
5111
|
-
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort] : [],
|
|
5116
|
+
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, 4318] : [4318],
|
|
5112
5117
|
nodeHostname: config.nodeHostname,
|
|
5113
5118
|
telemetryEndpoint: config.kind === "platform" ? config.runtime.environment.otlpEndpoint : "http://127.0.0.1:4318",
|
|
5114
5119
|
binPath: "/usr/local/lib/forgezero/agent/fz-agent",
|
package/dist/fz-agent.js
CHANGED
|
@@ -9496,7 +9496,7 @@ async function writeAndCloseProcessInput(input, value) {
|
|
|
9496
9496
|
}
|
|
9497
9497
|
|
|
9498
9498
|
// src/version.ts
|
|
9499
|
-
var VERSION2 = "0.1.
|
|
9499
|
+
var VERSION2 = "0.1.97";
|
|
9500
9500
|
|
|
9501
9501
|
// src/ssh-bootstrap.ts
|
|
9502
9502
|
class SshBootstrapError extends Error {
|
|
@@ -16710,7 +16710,7 @@ function planBootstrapAgentInstall(config, phase, context) {
|
|
|
16710
16710
|
lifecycleProfilePath: bound && config.kind === "platform" ? LIFECYCLE_PROFILE : undefined,
|
|
16711
16711
|
enforceEgress: true,
|
|
16712
16712
|
runnerLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, config.runtime.bluePort, config.runtime.greenPort] : [],
|
|
16713
|
-
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort] : [],
|
|
16713
|
+
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, 4318] : [4318],
|
|
16714
16714
|
nodeHostname: config.nodeHostname,
|
|
16715
16715
|
telemetryEndpoint: config.kind === "platform" ? config.runtime.environment.otlpEndpoint : "http://127.0.0.1:4318",
|
|
16716
16716
|
binPath: "/usr/local/lib/forgezero/agent/fz-agent",
|
package/dist/fz.js
CHANGED
|
@@ -4841,7 +4841,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
|
|
|
4841
4841
|
var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
|
|
4842
4842
|
|
|
4843
4843
|
// src/version.ts
|
|
4844
|
-
var VERSION2 = "0.1.
|
|
4844
|
+
var VERSION2 = "0.1.97";
|
|
4845
4845
|
|
|
4846
4846
|
// src/software.ts
|
|
4847
4847
|
var PINNED_BUN_VERSION = "1.3.14";
|
|
@@ -12239,7 +12239,7 @@ var httpsOrigin = (name, raw) => {
|
|
|
12239
12239
|
};
|
|
12240
12240
|
var agentTelemetryOrigin = (raw) => raw === "http://127.0.0.1:4318" ? raw : httpsOrigin("agentOtlpEndpoint", raw);
|
|
12241
12241
|
function validatePlatformInitialInventory(value) {
|
|
12242
|
-
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
12242
|
+
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "attestation", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
12243
12243
|
throw new Error("initial platform inventory coordinates are invalid");
|
|
12244
12244
|
}
|
|
12245
12245
|
safeAtom("initialInventory.region.label", value.region.label);
|
|
@@ -12247,6 +12247,8 @@ function validatePlatformInitialInventory(value) {
|
|
|
12247
12247
|
safeAtom("initialInventory.region.city", value.region.city);
|
|
12248
12248
|
if (value.deployment !== undefined && (!value.deployment || typeof value.deployment !== "object" || Array.isArray(value.deployment) || Object.keys(value.deployment).some((key) => !["source", "branch", "revision", "bundleSha256"].includes(key)) || value.deployment.source !== "bootstrap-bundle" || !["dev", "main"].includes(value.deployment.branch) || !/^[a-f0-9]{40}$/.test(value.deployment.revision) || !/^[a-f0-9]{64}$/.test(value.deployment.bundleSha256)))
|
|
12249
12249
|
throw new Error("initial platform deployment evidence is invalid");
|
|
12250
|
+
if (value.attestation !== undefined && (!value.attestation || typeof value.attestation !== "object" || Array.isArray(value.attestation) || Object.keys(value.attestation).some((key) => !["measurement", "tcbFloor"].includes(key)) || !/^[a-f0-9]{96}$/.test(value.attestation.measurement) || !value.attestation.tcbFloor || typeof value.attestation.tcbFloor !== "object" || Array.isArray(value.attestation.tcbFloor) || Object.keys(value.attestation.tcbFloor).some((key) => !["bootLoader", "tee", "snp", "microcode"].includes(key)) || Object.values(value.attestation.tcbFloor).some((component2) => !Number.isSafeInteger(component2) || component2 < 0 || component2 > 255)))
|
|
12251
|
+
throw new Error("initial platform attestation evidence is invalid");
|
|
12250
12252
|
const computes = validatePlatformGenesisGuests(value.computes.map((compute) => {
|
|
12251
12253
|
if (!compute || typeof compute !== "object" || Array.isArray(compute) || Object.keys(compute).some((key) => ![
|
|
12252
12254
|
"name",
|
|
@@ -12282,6 +12284,9 @@ function validatePlatformInitialInventory(value) {
|
|
|
12282
12284
|
databaseAgency: compute.databaseAgency,
|
|
12283
12285
|
confidential: true
|
|
12284
12286
|
})),
|
|
12287
|
+
...value.attestation ? {
|
|
12288
|
+
attestation: { measurement: value.attestation.measurement, tcbFloor: { ...value.attestation.tcbFloor } }
|
|
12289
|
+
} : {},
|
|
12285
12290
|
...value.deployment ? { deployment: { ...value.deployment } } : {}
|
|
12286
12291
|
};
|
|
12287
12292
|
}
|
|
@@ -15493,7 +15498,7 @@ function planBootstrapAgentInstall(config, phase, context) {
|
|
|
15493
15498
|
lifecycleProfilePath: bound && config.kind === "platform" ? LIFECYCLE_PROFILE : undefined,
|
|
15494
15499
|
enforceEgress: true,
|
|
15495
15500
|
runnerLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, config.runtime.bluePort, config.runtime.greenPort] : [],
|
|
15496
|
-
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort] : [],
|
|
15501
|
+
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, 4318] : [4318],
|
|
15497
15502
|
nodeHostname: config.nodeHostname,
|
|
15498
15503
|
telemetryEndpoint: config.kind === "platform" ? config.runtime.environment.otlpEndpoint : "http://127.0.0.1:4318",
|
|
15499
15504
|
binPath: "/usr/local/lib/forgezero/agent/fz-agent",
|
|
@@ -17856,7 +17861,7 @@ async function applyAttendedPlatformBootstrap(fleetRequest, cloudflareRequest, a
|
|
|
17856
17861
|
}
|
|
17857
17862
|
|
|
17858
17863
|
// src/platform-genesis-config.ts
|
|
17859
|
-
function platformGenesisBootstrapConfigs(template, guests, nodes, metalHostname, region, deployment) {
|
|
17864
|
+
function platformGenesisBootstrapConfigs(template, guests, nodes, metalHostname, region, deployment, attestation) {
|
|
17860
17865
|
const fleet = validatePlatformGenesisGuests(guests);
|
|
17861
17866
|
if (!/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(metalHostname)) {
|
|
17862
17867
|
throw new Error("platform genesis requires the reviewed metal hostname");
|
|
@@ -17885,6 +17890,7 @@ function platformGenesisBootstrapConfigs(template, guests, nodes, metalHostname,
|
|
|
17885
17890
|
databaseRole: index === 0 ? "master" : "joiner",
|
|
17886
17891
|
databaseAgency: "member"
|
|
17887
17892
|
})),
|
|
17893
|
+
...attestation ? { attestation } : {},
|
|
17888
17894
|
...deployment ? { deployment } : {}
|
|
17889
17895
|
};
|
|
17890
17896
|
return fleet.map((guest, index) => {
|
|
@@ -17940,7 +17946,11 @@ var PROFILES = {
|
|
|
17940
17946
|
seedSyncEpoch: "development-23c19168773d69ea",
|
|
17941
17947
|
collectorExport: LOCAL_DEBUG_OTEL_EXPORT,
|
|
17942
17948
|
agentOtlpEndpoint: "http://127.0.0.1:4318",
|
|
17943
|
-
privateCidrs: ["10.42.0.0/24"]
|
|
17949
|
+
privateCidrs: ["10.42.0.0/24"],
|
|
17950
|
+
attestation: {
|
|
17951
|
+
measurement: "2d4e66719b19f00c13560e286b1e32ab724ee35d5422473fb183b7dc48a425a9afea74e6625e26911eefbbfbda59b55e",
|
|
17952
|
+
tcbFloor: { bootLoader: 4, tee: 0, snp: 29, microcode: 222 }
|
|
17953
|
+
}
|
|
17944
17954
|
},
|
|
17945
17955
|
production: {
|
|
17946
17956
|
environment: "production",
|
|
@@ -19510,7 +19520,7 @@ function writePlatformGenesisFleet(directory, preset) {
|
|
|
19510
19520
|
branch: preset.profile.branch,
|
|
19511
19521
|
revision: preset.bundle.manifest.revision,
|
|
19512
19522
|
bundleSha256: preset.bundle.manifest.sha256
|
|
19513
|
-
} : undefined).map((config) => {
|
|
19523
|
+
} : undefined, preset?.profile.attestation).map((config) => {
|
|
19514
19524
|
const path = `${output}/${config.computeReference}-platform.json`;
|
|
19515
19525
|
if (preset)
|
|
19516
19526
|
writeDerivedLaunchFile(path, (temporary) => writeBootstrapConfig(temporary, config));
|
package/dist/metal-bootstrap.js
CHANGED
|
@@ -366,7 +366,7 @@ function systemdAgentEgressDirectives(loopbackTcpPorts = []) {
|
|
|
366
366
|
}
|
|
367
367
|
|
|
368
368
|
// src/version.ts
|
|
369
|
-
var VERSION = "0.1.
|
|
369
|
+
var VERSION = "0.1.97";
|
|
370
370
|
|
|
371
371
|
// src/otel-collector.ts
|
|
372
372
|
var FORGEZERO_OTEL_COLLECTOR_UNIT = "forgezero-otel-collector.service";
|
|
@@ -1420,7 +1420,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
|
|
|
1420
1420
|
var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
|
|
1421
1421
|
|
|
1422
1422
|
// src/version.ts
|
|
1423
|
-
var VERSION = "0.1.
|
|
1423
|
+
var VERSION = "0.1.97";
|
|
1424
1424
|
|
|
1425
1425
|
// src/software.ts
|
|
1426
1426
|
var PINNED_BUN_VERSION = "1.3.14";
|
|
@@ -3090,7 +3090,7 @@ var httpsOrigin = (name, raw) => {
|
|
|
3090
3090
|
};
|
|
3091
3091
|
var agentTelemetryOrigin = (raw) => raw === "http://127.0.0.1:4318" ? raw : httpsOrigin("agentOtlpEndpoint", raw);
|
|
3092
3092
|
function validatePlatformInitialInventory(value) {
|
|
3093
|
-
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
3093
|
+
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "attestation", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
3094
3094
|
throw new Error("initial platform inventory coordinates are invalid");
|
|
3095
3095
|
}
|
|
3096
3096
|
safeAtom("initialInventory.region.label", value.region.label);
|
|
@@ -3098,6 +3098,8 @@ function validatePlatformInitialInventory(value) {
|
|
|
3098
3098
|
safeAtom("initialInventory.region.city", value.region.city);
|
|
3099
3099
|
if (value.deployment !== undefined && (!value.deployment || typeof value.deployment !== "object" || Array.isArray(value.deployment) || Object.keys(value.deployment).some((key) => !["source", "branch", "revision", "bundleSha256"].includes(key)) || value.deployment.source !== "bootstrap-bundle" || !["dev", "main"].includes(value.deployment.branch) || !/^[a-f0-9]{40}$/.test(value.deployment.revision) || !/^[a-f0-9]{64}$/.test(value.deployment.bundleSha256)))
|
|
3100
3100
|
throw new Error("initial platform deployment evidence is invalid");
|
|
3101
|
+
if (value.attestation !== undefined && (!value.attestation || typeof value.attestation !== "object" || Array.isArray(value.attestation) || Object.keys(value.attestation).some((key) => !["measurement", "tcbFloor"].includes(key)) || !/^[a-f0-9]{96}$/.test(value.attestation.measurement) || !value.attestation.tcbFloor || typeof value.attestation.tcbFloor !== "object" || Array.isArray(value.attestation.tcbFloor) || Object.keys(value.attestation.tcbFloor).some((key) => !["bootLoader", "tee", "snp", "microcode"].includes(key)) || Object.values(value.attestation.tcbFloor).some((component) => !Number.isSafeInteger(component) || component < 0 || component > 255)))
|
|
3102
|
+
throw new Error("initial platform attestation evidence is invalid");
|
|
3101
3103
|
const computes = validatePlatformGenesisGuests(value.computes.map((compute) => {
|
|
3102
3104
|
if (!compute || typeof compute !== "object" || Array.isArray(compute) || Object.keys(compute).some((key) => ![
|
|
3103
3105
|
"name",
|
|
@@ -3133,6 +3135,9 @@ function validatePlatformInitialInventory(value) {
|
|
|
3133
3135
|
databaseAgency: compute.databaseAgency,
|
|
3134
3136
|
confidential: true
|
|
3135
3137
|
})),
|
|
3138
|
+
...value.attestation ? {
|
|
3139
|
+
attestation: { measurement: value.attestation.measurement, tcbFloor: { ...value.attestation.tcbFloor } }
|
|
3140
|
+
} : {},
|
|
3136
3141
|
...value.deployment ? { deployment: { ...value.deployment } } : {}
|
|
3137
3142
|
};
|
|
3138
3143
|
}
|
|
@@ -5108,7 +5113,7 @@ function planBootstrapAgentInstall(config, phase, context) {
|
|
|
5108
5113
|
lifecycleProfilePath: bound && config.kind === "platform" ? LIFECYCLE_PROFILE : undefined,
|
|
5109
5114
|
enforceEgress: true,
|
|
5110
5115
|
runnerLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, config.runtime.bluePort, config.runtime.greenPort] : [],
|
|
5111
|
-
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort] : [],
|
|
5116
|
+
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, 4318] : [4318],
|
|
5112
5117
|
nodeHostname: config.nodeHostname,
|
|
5113
5118
|
telemetryEndpoint: config.kind === "platform" ? config.runtime.environment.otlpEndpoint : "http://127.0.0.1:4318",
|
|
5114
5119
|
binPath: "/usr/local/lib/forgezero/agent/fz-agent",
|
|
@@ -31,6 +31,16 @@ export interface PlatformInitialInventory {
|
|
|
31
31
|
PlatformInitialInventoryCompute,
|
|
32
32
|
PlatformInitialInventoryCompute
|
|
33
33
|
];
|
|
34
|
+
/** Reviewed evidence for the exact confidential image used by this fleet. */
|
|
35
|
+
attestation?: {
|
|
36
|
+
measurement: string;
|
|
37
|
+
tcbFloor: {
|
|
38
|
+
bootLoader: number;
|
|
39
|
+
tee: number;
|
|
40
|
+
snp: number;
|
|
41
|
+
microcode: number;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
34
44
|
/** Generation-one release evidence; external Git automation is connected after custody opens Vault. */
|
|
35
45
|
deployment?: {
|
|
36
46
|
source: 'bootstrap-bundle';
|
|
@@ -730,7 +730,7 @@ var httpsOrigin = (name, raw) => {
|
|
|
730
730
|
};
|
|
731
731
|
var agentTelemetryOrigin = (raw) => raw === "http://127.0.0.1:4318" ? raw : httpsOrigin("agentOtlpEndpoint", raw);
|
|
732
732
|
function validatePlatformInitialInventory(value) {
|
|
733
|
-
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
733
|
+
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "attestation", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
734
734
|
throw new Error("initial platform inventory coordinates are invalid");
|
|
735
735
|
}
|
|
736
736
|
safeAtom("initialInventory.region.label", value.region.label);
|
|
@@ -738,6 +738,8 @@ function validatePlatformInitialInventory(value) {
|
|
|
738
738
|
safeAtom("initialInventory.region.city", value.region.city);
|
|
739
739
|
if (value.deployment !== undefined && (!value.deployment || typeof value.deployment !== "object" || Array.isArray(value.deployment) || Object.keys(value.deployment).some((key) => !["source", "branch", "revision", "bundleSha256"].includes(key)) || value.deployment.source !== "bootstrap-bundle" || !["dev", "main"].includes(value.deployment.branch) || !/^[a-f0-9]{40}$/.test(value.deployment.revision) || !/^[a-f0-9]{64}$/.test(value.deployment.bundleSha256)))
|
|
740
740
|
throw new Error("initial platform deployment evidence is invalid");
|
|
741
|
+
if (value.attestation !== undefined && (!value.attestation || typeof value.attestation !== "object" || Array.isArray(value.attestation) || Object.keys(value.attestation).some((key) => !["measurement", "tcbFloor"].includes(key)) || !/^[a-f0-9]{96}$/.test(value.attestation.measurement) || !value.attestation.tcbFloor || typeof value.attestation.tcbFloor !== "object" || Array.isArray(value.attestation.tcbFloor) || Object.keys(value.attestation.tcbFloor).some((key) => !["bootLoader", "tee", "snp", "microcode"].includes(key)) || Object.values(value.attestation.tcbFloor).some((component) => !Number.isSafeInteger(component) || component < 0 || component > 255)))
|
|
742
|
+
throw new Error("initial platform attestation evidence is invalid");
|
|
741
743
|
const computes = validatePlatformGenesisGuests(value.computes.map((compute) => {
|
|
742
744
|
if (!compute || typeof compute !== "object" || Array.isArray(compute) || Object.keys(compute).some((key) => ![
|
|
743
745
|
"name",
|
|
@@ -773,6 +775,9 @@ function validatePlatformInitialInventory(value) {
|
|
|
773
775
|
databaseAgency: compute.databaseAgency,
|
|
774
776
|
confidential: true
|
|
775
777
|
})),
|
|
778
|
+
...value.attestation ? {
|
|
779
|
+
attestation: { measurement: value.attestation.measurement, tcbFloor: { ...value.attestation.tcbFloor } }
|
|
780
|
+
} : {},
|
|
776
781
|
...value.deployment ? { deployment: { ...value.deployment } } : {}
|
|
777
782
|
};
|
|
778
783
|
}
|
|
@@ -2908,7 +2908,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
|
|
|
2908
2908
|
}
|
|
2909
2909
|
|
|
2910
2910
|
// src/version.ts
|
|
2911
|
-
var VERSION3 = "0.1.
|
|
2911
|
+
var VERSION3 = "0.1.97";
|
|
2912
2912
|
|
|
2913
2913
|
// src/egress-policy.ts
|
|
2914
2914
|
import { realpathSync as realpathSync3 } from "node:fs";
|
|
@@ -4142,7 +4142,7 @@ var httpsOrigin = (name, raw) => {
|
|
|
4142
4142
|
};
|
|
4143
4143
|
var agentTelemetryOrigin = (raw) => raw === "http://127.0.0.1:4318" ? raw : httpsOrigin("agentOtlpEndpoint", raw);
|
|
4144
4144
|
function validatePlatformInitialInventory(value) {
|
|
4145
|
-
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
4145
|
+
if (!value || typeof value !== "object" || Array.isArray(value) || Object.keys(value).some((key) => !["metalHostname", "region", "computes", "attestation", "deployment"].includes(key)) || !/^[A-Za-z0-9][A-Za-z0-9.-]{1,252}$/.test(value.metalHostname) || !value.region || typeof value.region !== "object" || Array.isArray(value.region) || Object.keys(value.region).some((key) => !["key", "label", "country", "city", "confidentialCapable"].includes(key)) || !/^[a-z0-9][a-z0-9-]{0,62}$/.test(value.region.key) || !/^[A-Z]{2}$/.test(value.region.country) || value.region.confidentialCapable !== true || !Array.isArray(value.computes)) {
|
|
4146
4146
|
throw new Error("initial platform inventory coordinates are invalid");
|
|
4147
4147
|
}
|
|
4148
4148
|
safeAtom("initialInventory.region.label", value.region.label);
|
|
@@ -4150,6 +4150,8 @@ function validatePlatformInitialInventory(value) {
|
|
|
4150
4150
|
safeAtom("initialInventory.region.city", value.region.city);
|
|
4151
4151
|
if (value.deployment !== undefined && (!value.deployment || typeof value.deployment !== "object" || Array.isArray(value.deployment) || Object.keys(value.deployment).some((key) => !["source", "branch", "revision", "bundleSha256"].includes(key)) || value.deployment.source !== "bootstrap-bundle" || !["dev", "main"].includes(value.deployment.branch) || !/^[a-f0-9]{40}$/.test(value.deployment.revision) || !/^[a-f0-9]{64}$/.test(value.deployment.bundleSha256)))
|
|
4152
4152
|
throw new Error("initial platform deployment evidence is invalid");
|
|
4153
|
+
if (value.attestation !== undefined && (!value.attestation || typeof value.attestation !== "object" || Array.isArray(value.attestation) || Object.keys(value.attestation).some((key) => !["measurement", "tcbFloor"].includes(key)) || !/^[a-f0-9]{96}$/.test(value.attestation.measurement) || !value.attestation.tcbFloor || typeof value.attestation.tcbFloor !== "object" || Array.isArray(value.attestation.tcbFloor) || Object.keys(value.attestation.tcbFloor).some((key) => !["bootLoader", "tee", "snp", "microcode"].includes(key)) || Object.values(value.attestation.tcbFloor).some((component) => !Number.isSafeInteger(component) || component < 0 || component > 255)))
|
|
4154
|
+
throw new Error("initial platform attestation evidence is invalid");
|
|
4153
4155
|
const computes = validatePlatformGenesisGuests(value.computes.map((compute) => {
|
|
4154
4156
|
if (!compute || typeof compute !== "object" || Array.isArray(compute) || Object.keys(compute).some((key) => ![
|
|
4155
4157
|
"name",
|
|
@@ -4185,6 +4187,9 @@ function validatePlatformInitialInventory(value) {
|
|
|
4185
4187
|
databaseAgency: compute.databaseAgency,
|
|
4186
4188
|
confidential: true
|
|
4187
4189
|
})),
|
|
4190
|
+
...value.attestation ? {
|
|
4191
|
+
attestation: { measurement: value.attestation.measurement, tcbFloor: { ...value.attestation.tcbFloor } }
|
|
4192
|
+
} : {},
|
|
4188
4193
|
...value.deployment ? { deployment: { ...value.deployment } } : {}
|
|
4189
4194
|
};
|
|
4190
4195
|
}
|
|
@@ -5353,7 +5358,7 @@ function planBootstrapAgentInstall(config, phase, context) {
|
|
|
5353
5358
|
lifecycleProfilePath: bound && config.kind === "platform" ? LIFECYCLE_PROFILE : undefined,
|
|
5354
5359
|
enforceEgress: true,
|
|
5355
5360
|
runnerLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, config.runtime.bluePort, config.runtime.greenPort] : [],
|
|
5356
|
-
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort] : [],
|
|
5361
|
+
agentLoopbackPorts: config.kind === "platform" ? [config.runtime.environment.publicApiPort, 4318] : [4318],
|
|
5357
5362
|
nodeHostname: config.nodeHostname,
|
|
5358
5363
|
telemetryEndpoint: config.kind === "platform" ? config.runtime.environment.otlpEndpoint : "http://127.0.0.1:4318",
|
|
5359
5364
|
binPath: "/usr/local/lib/forgezero/agent/fz-agent",
|
|
@@ -15,4 +15,4 @@ export declare function platformGenesisBootstrapConfigs(template: PlatformBootst
|
|
|
15
15
|
branch: 'dev' | 'main';
|
|
16
16
|
revision: string;
|
|
17
17
|
bundleSha256: string;
|
|
18
|
-
}): readonly PlatformBootstrapConfig[];
|
|
18
|
+
}, attestation?: import('./platform-bootstrap-runtime').PlatformInitialInventory['attestation']): readonly PlatformBootstrapConfig[];
|
|
@@ -20,6 +20,16 @@ export interface ForgeZeroLaunchProfile {
|
|
|
20
20
|
agentOtlpEndpoint: string;
|
|
21
21
|
seedSyncEpoch: string;
|
|
22
22
|
privateCidrs: readonly string[];
|
|
23
|
+
/** Owner-observed, AMD-verified evidence for this exact reviewed launch image. */
|
|
24
|
+
attestation?: {
|
|
25
|
+
measurement: string;
|
|
26
|
+
tcbFloor: {
|
|
27
|
+
bootLoader: number;
|
|
28
|
+
tee: number;
|
|
29
|
+
snp: number;
|
|
30
|
+
microcode: number;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
23
33
|
nodeHostname(nodeIndex: number): string;
|
|
24
34
|
}
|
|
25
35
|
export interface ForgeZeroLaunchOwnerInput {
|
package/dist/provision.js
CHANGED
|
@@ -2908,7 +2908,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
|
|
|
2908
2908
|
}
|
|
2909
2909
|
|
|
2910
2910
|
// src/version.ts
|
|
2911
|
-
var VERSION3 = "0.1.
|
|
2911
|
+
var VERSION3 = "0.1.97";
|
|
2912
2912
|
|
|
2913
2913
|
// src/egress-policy.ts
|
|
2914
2914
|
import { realpathSync as realpathSync3 } from "node:fs";
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** One package version shared by both public binaries. Pinned to package.json by tests. */
|
|
2
|
-
export declare const VERSION = "0.1.
|
|
2
|
+
export declare const VERSION = "0.1.97";
|