spawnfile 0.1.12 → 0.1.14
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 +58 -12
- package/dist/audit/auditCli.d.ts +19 -0
- package/dist/audit/auditCli.js +63 -0
- package/dist/audit/checks.d.ts +100 -0
- package/dist/audit/checks.js +279 -0
- package/dist/audit/checksShared.d.ts +74 -0
- package/dist/audit/checksShared.js +37 -0
- package/dist/audit/generateAudit.d.ts +19 -0
- package/dist/audit/generateAudit.js +122 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.js +4 -0
- package/dist/audit/readAudit.d.ts +50 -0
- package/dist/audit/readAudit.js +59 -0
- package/dist/audit/types.d.ts +40 -0
- package/dist/audit/types.js +8 -0
- package/dist/auth/credentialEnvFile.d.ts +11 -0
- package/dist/auth/credentialEnvFile.js +60 -0
- package/dist/auth/credentialProvisioning.d.ts +15 -0
- package/dist/auth/credentialProvisioning.js +75 -0
- package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
- package/dist/auth/credentialProvisioningReceipt.js +70 -0
- package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
- package/dist/auth/credentialProvisioningRequest.js +169 -0
- package/dist/auth/credentialWorldBindings.d.ts +21 -0
- package/dist/auth/credentialWorldBindings.js +104 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/paths.d.ts +11 -0
- package/dist/auth/paths.js +21 -0
- package/dist/auth/runtimeCredentials.js +18 -2
- package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
- package/dist/auth/targetSecretSourceAuthor.js +52 -0
- package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
- package/dist/auth/targetSecretSourceFsPublish.js +49 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
- package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
- package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
- package/dist/auth/targetSecretSourceFsRead.js +198 -0
- package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
- package/dist/auth/targetSecretSourceGrant.js +99 -0
- package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
- package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
- package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
- package/dist/auth/targetSecretSourceLifecycle.js +52 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
- package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
- package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
- package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
- package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
- package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
- package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
- package/dist/auth/targetSecretSourceResolver.js +137 -0
- package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
- package/dist/auth/targetSecretSourceRevoke.js +92 -0
- package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
- package/dist/auth/targetSecretSourceRotate.js +121 -0
- package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
- package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
- package/dist/cli/artifactsCommands.d.ts +27 -0
- package/dist/cli/artifactsCommands.js +132 -0
- package/dist/cli/authCommands.d.ts +5 -0
- package/dist/cli/authCommands.js +221 -0
- package/dist/cli/compileBuildCommands.d.ts +3 -0
- package/dist/cli/compileBuildCommands.js +35 -0
- package/dist/cli/containerBundleCommand.d.ts +6 -0
- package/dist/cli/containerBundleCommand.js +116 -0
- package/dist/cli/devCommands.d.ts +3 -0
- package/dist/cli/devCommands.js +115 -0
- package/dist/cli/downCommand.d.ts +25 -0
- package/dist/cli/downCommand.js +134 -0
- package/dist/cli/index.js +6 -3
- package/dist/cli/lifecycleCommands.d.ts +1 -1
- package/dist/cli/lifecycleCommands.js +11 -179
- package/dist/cli/lifecycleMachine.d.ts +19 -0
- package/dist/cli/lifecycleMachine.js +78 -0
- package/dist/cli/lifecyclePlan.d.ts +35 -0
- package/dist/cli/lifecyclePlan.js +240 -0
- package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
- package/dist/cli/lifecyclePlanningCommands.js +30 -0
- package/dist/cli/runCli.d.ts +15 -2
- package/dist/cli/runCli.js +31 -71
- package/dist/cli/runPublishCommands.d.ts +3 -0
- package/dist/cli/runPublishCommands.js +70 -0
- package/dist/cli/statusCommand.d.ts +3 -32
- package/dist/cli/statusCommand.js +37 -233
- package/dist/cli/statusCommandLive.d.ts +20 -0
- package/dist/cli/statusCommandLive.js +188 -0
- package/dist/cli/statusCommandOptions.d.ts +40 -0
- package/dist/cli/statusCommandOptions.js +42 -0
- package/dist/cli/targetCliRoute.d.ts +2 -0
- package/dist/cli/targetCliRoute.js +30 -0
- package/dist/cli/targetCommands.d.ts +33 -0
- package/dist/cli/targetCommands.js +257 -0
- package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
- package/dist/cli/targetComposedPreparationCommand.js +39 -0
- package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
- package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
- package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
- package/dist/cli/targetDefaultAuthorities.js +210 -0
- package/dist/cli/targetDefaultConfig.d.ts +68 -0
- package/dist/cli/targetDefaultConfig.js +317 -0
- package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
- package/dist/cli/targetDefaultConfigStdin.js +215 -0
- package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
- package/dist/cli/targetDefaultEnvelope.js +13 -0
- package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
- package/dist/cli/targetDefaultHandlerFactory.js +247 -0
- package/dist/cli/targetDefaultHandlers.d.ts +21 -0
- package/dist/cli/targetDefaultHandlers.js +72 -0
- package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
- package/dist/cli/targetDefaultJournalAuthority.js +135 -0
- package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
- package/dist/cli/targetDefaultWorldClock.js +14 -0
- package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
- package/dist/cli/targetDefaultWorldQueries.js +11 -0
- package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
- package/dist/cli/targetDefaultWorldReadiness.js +17 -0
- package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
- package/dist/cli/targetEvidenceHelperResolution.js +23 -0
- package/dist/cli/targetLookupCli.d.ts +3 -0
- package/dist/cli/targetLookupCli.js +31 -0
- package/dist/cli/targetLookupCommands.d.ts +12 -0
- package/dist/cli/targetLookupCommands.js +69 -0
- package/dist/cli/targetOperationDispatch.d.ts +58 -0
- package/dist/cli/targetOperationDispatch.js +21 -0
- package/dist/cli/targetReceiptOutput.d.ts +14 -0
- package/dist/cli/targetReceiptOutput.js +21 -0
- package/dist/cli/targetRequestFile.d.ts +14 -0
- package/dist/cli/targetRequestFile.js +63 -0
- package/dist/cli/targetSecretSourceInput.d.ts +28 -0
- package/dist/cli/targetSecretSourceInput.js +121 -0
- package/dist/cli/targetWorldClockCommand.d.ts +10 -0
- package/dist/cli/targetWorldClockCommand.js +42 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
- package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
- package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
- package/dist/cli/targetWorldReadinessCommand.js +43 -0
- package/dist/cli/upCommand.d.ts +3 -0
- package/dist/cli/upCommand.js +133 -0
- package/dist/cli/upImageCommand.d.ts +11 -0
- package/dist/cli/upImageCommand.js +41 -0
- package/dist/cli/upLifecycleInvocation.d.ts +41 -0
- package/dist/cli/upLifecycleInvocation.js +48 -0
- package/dist/cli/upLifecycleRecovery.d.ts +4 -0
- package/dist/cli/upLifecycleRecovery.js +53 -0
- package/dist/compiler/agentNodeMerge.d.ts +2 -0
- package/dist/compiler/agentNodeMerge.js +79 -0
- package/dist/compiler/agentSurfaces.js +11 -1
- package/dist/compiler/buildCompilePlan.js +17 -0
- package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
- package/dist/compiler/buildCompilePlanAgent.js +56 -0
- package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
- package/dist/compiler/buildCompilePlanTeams.js +4 -1
- package/dist/compiler/buildCompilePlanTraversal.js +75 -82
- package/dist/compiler/buildProject.d.ts +20 -1
- package/dist/compiler/buildProject.js +121 -7
- package/dist/compiler/compilePlanHelpers.js +2 -0
- package/dist/compiler/compileProject.d.ts +15 -0
- package/dist/compiler/compileProject.js +29 -75
- package/dist/compiler/compileProjectPolicy.d.ts +5 -0
- package/dist/compiler/compileProjectPolicy.js +21 -0
- package/dist/compiler/compileProjectReports.d.ts +9 -0
- package/dist/compiler/compileProjectReports.js +52 -0
- package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
- package/dist/compiler/containerArtifactSummaries.js +138 -0
- package/dist/compiler/containerArtifacts.d.ts +10 -0
- package/dist/compiler/containerArtifacts.js +126 -125
- package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
- package/dist/compiler/containerArtifactsPlans.js +31 -118
- package/dist/compiler/containerArtifactsRender.d.ts +3 -1
- package/dist/compiler/containerArtifactsRender.js +40 -81
- package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
- package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
- package/dist/compiler/containerConfigEnvRender.js +54 -0
- package/dist/compiler/containerEntrypointRender.d.ts +1 -0
- package/dist/compiler/containerEntrypointRender.js +60 -53
- package/dist/compiler/containerEntrypointShell.d.ts +5 -0
- package/dist/compiler/containerEntrypointShell.js +29 -0
- package/dist/compiler/containerPackageOverrides.d.ts +27 -0
- package/dist/compiler/containerPackageOverrides.js +63 -0
- package/dist/compiler/containerPackageRender.d.ts +15 -0
- package/dist/compiler/containerPackageRender.js +63 -0
- package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -0
- package/dist/compiler/containerTargetResources.js +3 -1
- package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
- package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
- package/dist/compiler/dockerBuildContext.d.ts +16 -0
- package/dist/compiler/dockerBuildContext.js +159 -0
- package/dist/compiler/dockerBuildSkip.d.ts +30 -0
- package/dist/compiler/dockerBuildSkip.js +81 -0
- package/dist/compiler/index.d.ts +4 -0
- package/dist/compiler/index.js +4 -0
- package/dist/compiler/memoryArtifacts.d.ts +26 -0
- package/dist/compiler/memoryArtifacts.js +134 -0
- package/dist/compiler/memoryResolution.d.ts +4 -0
- package/dist/compiler/memoryResolution.js +147 -0
- package/dist/compiler/modelEnv.d.ts +2 -0
- package/dist/compiler/modelEnv.js +6 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
- package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
- package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
- package/dist/compiler/moltnetArtifactPaths.js +49 -0
- package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
- package/dist/compiler/moltnetArtifactTypes.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +2 -40
- package/dist/compiler/moltnetArtifacts.js +56 -95
- package/dist/compiler/moltnetBinaries.d.ts +21 -1
- package/dist/compiler/moltnetBinaries.js +156 -28
- package/dist/compiler/moltnetClientConfig.js +18 -2
- package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
- package/dist/compiler/moltnetConfigLowering.js +67 -5
- package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
- package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
- package/dist/compiler/moltnetNodeConfig.js +7 -2
- package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
- package/dist/compiler/moltnetReleaseAuthority.js +73 -0
- package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
- package/dist/compiler/moltnetReleaseDownload.js +85 -0
- package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
- package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
- package/dist/compiler/moltnetResolution.js +72 -20
- package/dist/compiler/moltnetRoomMemberships.js +37 -9
- package/dist/compiler/moltnetRuntimeConfig.js +11 -0
- package/dist/compiler/moltnetServerPlans.d.ts +9 -0
- package/dist/compiler/moltnetServerPlans.js +132 -0
- package/dist/compiler/organizationIdentity.d.ts +27 -0
- package/dist/compiler/organizationIdentity.js +297 -0
- package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
- package/dist/compiler/organizationReadyEvidence.js +261 -0
- package/dist/compiler/projectManifestGraph.d.ts +4 -0
- package/dist/compiler/projectManifestGraph.js +24 -0
- package/dist/compiler/runProject.d.ts +4 -0
- package/dist/compiler/runProject.js +37 -22
- package/dist/compiler/runProjectAuth.d.ts +7 -1
- package/dist/compiler/runProjectAuth.js +87 -9
- package/dist/compiler/runProjectDocker.d.ts +7 -0
- package/dist/compiler/runProjectDocker.js +187 -19
- package/dist/compiler/runProjectLifecycle.d.ts +7 -0
- package/dist/compiler/runProjectLifecycle.js +40 -0
- package/dist/compiler/syncProjectAuth.js +4 -1
- package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
- package/dist/compiler/teamContextActiveEnvironments.js +255 -0
- package/dist/compiler/teamContextSupport.js +32 -40
- package/dist/compiler/teamContextTypes.d.ts +2 -0
- package/dist/compiler/types.d.ts +82 -1
- package/dist/compiler/upProject.d.ts +5 -0
- package/dist/compiler/upProject.js +257 -20
- package/dist/compiler/upReceipt.d.ts +36 -0
- package/dist/compiler/upReceipt.js +82 -0
- package/dist/compiler/updateProjectModels.js +42 -60
- package/dist/compiler/updateProjectRuntime.js +22 -35
- package/dist/compiler/updateProjectSurfaces.js +53 -47
- package/dist/compiler/worldBindings.d.ts +39 -0
- package/dist/compiler/worldBindings.js +247 -0
- package/dist/compiler/worldBindingsFile.d.ts +5 -0
- package/dist/compiler/worldBindingsFile.js +162 -0
- package/dist/deployment/artifactsExport.d.ts +49 -0
- package/dist/deployment/artifactsExport.js +217 -0
- package/dist/deployment/artifactsExportDocker.d.ts +48 -0
- package/dist/deployment/artifactsExportDocker.js +91 -0
- package/dist/deployment/artifactsExportPlan.d.ts +24 -0
- package/dist/deployment/artifactsExportPlan.js +135 -0
- package/dist/deployment/artifactsExportTypes.d.ts +50 -0
- package/dist/deployment/artifactsExportTypes.js +52 -0
- package/dist/deployment/buildImageCacheStore.d.ts +23 -0
- package/dist/deployment/buildImageCacheStore.js +54 -0
- package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
- package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
- package/dist/deployment/dockerInspect.d.ts +9 -0
- package/dist/deployment/dockerInspect.js +24 -1
- package/dist/deployment/dockerLabels.d.ts +2 -0
- package/dist/deployment/dockerLabels.js +2 -0
- package/dist/deployment/dockerLogs.js +2 -10
- package/dist/deployment/dockerManager.d.ts +51 -0
- package/dist/deployment/dockerManager.js +118 -1
- package/dist/deployment/dockerProbeGateway.js +64 -5
- package/dist/deployment/dockerRecover.d.ts +17 -0
- package/dist/deployment/dockerRecover.js +137 -0
- package/dist/deployment/dockerTeardown.d.ts +32 -0
- package/dist/deployment/dockerTeardown.js +61 -0
- package/dist/deployment/downDeployment.d.ts +34 -0
- package/dist/deployment/downDeployment.js +147 -0
- package/dist/deployment/downReceiptTypes.d.ts +21 -0
- package/dist/deployment/downReceiptTypes.js +30 -0
- package/dist/deployment/index.d.ts +17 -0
- package/dist/deployment/index.js +18 -0
- package/dist/deployment/lifecycleCompletion.d.ts +37 -0
- package/dist/deployment/lifecycleCompletion.js +236 -0
- package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
- package/dist/deployment/lifecycleCompletionContracts.js +106 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
- package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
- package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
- package/dist/deployment/lifecycleCompletionLookup.js +88 -0
- package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
- package/dist/deployment/lifecycleCompletionOwner.js +31 -0
- package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
- package/dist/deployment/lifecycleCompletionParsing.js +108 -0
- package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
- package/dist/deployment/lifecycleCompletionPaths.js +16 -0
- package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
- package/dist/deployment/lifecycleCompletionPublication.js +35 -0
- package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
- package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
- package/dist/deployment/lifecycleCompletionRoot.js +243 -0
- package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
- package/dist/deployment/lifecycleCompletionStore.js +151 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
- package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
- package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
- package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
- package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
- package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
- package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
- package/dist/deployment/organizationHandoffTypes.js +80 -0
- package/dist/deployment/organizationReady.d.ts +52 -0
- package/dist/deployment/organizationReady.js +200 -0
- package/dist/deployment/privateArtifactsExport.d.ts +18 -0
- package/dist/deployment/privateArtifactsExport.js +80 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
- package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
- package/dist/deployment/record.d.ts +26 -1
- package/dist/deployment/record.js +49 -4
- package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
- package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
- package/dist/deployment/target.d.ts +1 -35
- package/dist/deployment/target.js +1 -96
- package/dist/deployment/upReceiptTypes.d.ts +111 -0
- package/dist/deployment/upReceiptTypes.js +164 -0
- package/dist/dev/activity.d.ts +14 -0
- package/dist/dev/activity.js +48 -0
- package/dist/dev/docker.d.ts +16 -0
- package/dist/dev/docker.js +71 -0
- package/dist/dev/index.d.ts +2 -0
- package/dist/dev/index.js +2 -0
- package/dist/dev/project.d.ts +35 -0
- package/dist/dev/project.js +170 -0
- package/dist/distribution/buildDistributionReport.d.ts +2 -1
- package/dist/distribution/buildDistributionReport.js +2 -1
- package/dist/distribution/distributionReportSchema.d.ts +5 -0
- package/dist/distribution/distributionReportSchema.js +7 -2
- package/dist/distribution/index.d.ts +2 -2
- package/dist/distribution/index.js +1 -1
- package/dist/distribution/types.d.ts +7 -0
- package/dist/distribution/types.js +1 -0
- package/dist/filesystem/paths.js +10 -1
- package/dist/ledger/causalConformanceCli.d.ts +1 -0
- package/dist/ledger/causalConformanceCli.js +41 -0
- package/dist/ledger/causeNamespace.d.ts +8 -0
- package/dist/ledger/causeNamespace.js +24 -0
- package/dist/ledger/conformance.d.ts +83 -0
- package/dist/ledger/conformance.js +259 -0
- package/dist/ledger/emitters.d.ts +76 -0
- package/dist/ledger/emitters.js +188 -0
- package/dist/ledger/index.d.ts +4 -0
- package/dist/ledger/index.js +4 -0
- package/dist/ledger/principal.d.ts +96 -0
- package/dist/ledger/principal.js +121 -0
- package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
- package/dist/manifest/externalParticipantSchemas.js +17 -0
- package/dist/manifest/index.d.ts +1 -0
- package/dist/manifest/index.js +1 -0
- package/dist/manifest/inlineAgentMember.d.ts +2 -0
- package/dist/manifest/inlineAgentMember.js +9 -0
- package/dist/manifest/loadManifest.js +14 -8
- package/dist/manifest/mcpSchemas.d.ts +17 -0
- package/dist/manifest/mcpSchemas.js +41 -0
- package/dist/manifest/memorySchemas.d.ts +245 -0
- package/dist/manifest/memorySchemas.js +148 -0
- package/dist/manifest/renderSpawnfile.js +22 -131
- package/dist/manifest/renderSpawnfileNetworks.js +9 -2
- package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
- package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
- package/dist/manifest/schemas.d.ts +1868 -99
- package/dist/manifest/schemas.js +78 -32
- package/dist/manifest/surfaceSchemas.d.ts +17 -0
- package/dist/manifest/surfaceSchemas.js +24 -1
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
- package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
- package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
- package/dist/manifest/teamNetworkSchemas.js +3 -317
- package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
- package/dist/manifest/teamNetworkServerSchemas.js +199 -0
- package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
- package/dist/ownership/siblingBuildFreshness.js +20 -0
- package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
- package/dist/ownership/simfileRunOperatorInputs.js +139 -0
- package/dist/report/types.d.ts +142 -0
- package/dist/runtime/common.d.ts +37 -0
- package/dist/runtime/common.js +56 -1
- package/dist/runtime/container.d.ts +29 -1
- package/dist/runtime/container.js +127 -11
- package/dist/runtime/containerPackageOverrides.d.ts +37 -0
- package/dist/runtime/containerPackageOverrides.js +33 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/install.d.ts +1 -1
- package/dist/runtime/install.js +43 -1
- package/dist/runtime/mnemeMcp.d.ts +15 -0
- package/dist/runtime/mnemeMcp.js +109 -0
- package/dist/runtime/openclaw/adapter.js +15 -4
- package/dist/runtime/openclaw/mcp.d.ts +10 -0
- package/dist/runtime/openclaw/mcp.js +69 -0
- package/dist/runtime/openclaw/runAuth.js +2 -2
- package/dist/runtime/openclaw/scaffold.js +1 -1
- package/dist/runtime/openclaw/schedules.d.ts +38 -0
- package/dist/runtime/openclaw/schedules.js +74 -0
- package/dist/runtime/pi/adapter.d.ts +4 -0
- package/dist/runtime/pi/adapter.js +231 -0
- package/dist/runtime/pi/appActivitySource.d.ts +1 -0
- package/dist/runtime/pi/appActivitySource.js +199 -0
- package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
- package/dist/runtime/pi/appAgentConfig.js +264 -0
- package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
- package/dist/runtime/pi/appCliEnginesSource.js +183 -0
- package/dist/runtime/pi/appCliSource.d.ts +1 -0
- package/dist/runtime/pi/appCliSource.js +353 -0
- package/dist/runtime/pi/appControlSource.d.ts +1 -0
- package/dist/runtime/pi/appControlSource.js +390 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
- package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
- package/dist/runtime/pi/appCoreSource.d.ts +4 -0
- package/dist/runtime/pi/appCoreSource.js +244 -0
- package/dist/runtime/pi/appPreludeSource.d.ts +1 -0
- package/dist/runtime/pi/appPreludeSource.js +191 -0
- package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
- package/dist/runtime/pi/appScheduleSource.js +80 -0
- package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
- package/dist/runtime/pi/appScriptedEngine.js +42 -0
- package/dist/runtime/pi/appSource.d.ts +4 -0
- package/dist/runtime/pi/appSource.js +12 -0
- package/dist/runtime/pi/appTemplate.d.ts +14 -0
- package/dist/runtime/pi/appTemplate.js +27 -0
- package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
- package/dist/runtime/pi/appTemplateTypes.js +18 -0
- package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
- package/dist/runtime/pi/appWakeContextSource.js +398 -0
- package/dist/runtime/pi/containerTargets.d.ts +4 -0
- package/dist/runtime/pi/containerTargets.js +57 -0
- package/dist/runtime/pi/runAuth.d.ts +2 -0
- package/dist/runtime/pi/runAuth.js +185 -0
- package/dist/runtime/pi/testHelpers.d.ts +2 -0
- package/dist/runtime/pi/testHelpers.js +40 -0
- package/dist/runtime/picoclaw/adapter.js +23 -27
- package/dist/runtime/picoclaw/mcp.d.ts +4 -0
- package/dist/runtime/picoclaw/mcp.js +43 -0
- package/dist/runtime/picoclaw/memory.d.ts +7 -0
- package/dist/runtime/picoclaw/memory.js +17 -0
- package/dist/runtime/picoclaw/runAuth.js +1 -1
- package/dist/runtime/picoclaw/scaffold.js +1 -1
- package/dist/runtime/picoclaw/schedules.d.ts +26 -0
- package/dist/runtime/picoclaw/schedules.js +62 -3
- package/dist/runtime/registry.js +3 -0
- package/dist/runtime/scheduleUtils.d.ts +2 -0
- package/dist/runtime/scheduleUtils.js +15 -0
- package/dist/runtime/types.d.ts +26 -2
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.js +2 -2
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/redaction.d.ts +2 -0
- package/dist/shared/redaction.js +10 -0
- package/dist/status/buildStatus.d.ts +1 -0
- package/dist/status/buildStatus.js +2 -0
- package/dist/status/compileReport.d.ts +22 -0
- package/dist/status/compileReport.js +16 -2
- package/dist/status/compiledProbeCollection.d.ts +21 -0
- package/dist/status/compiledProbeCollection.js +27 -0
- package/dist/status/deployments.js +5 -12
- package/dist/status/imageStatusReport.js +6 -0
- package/dist/status/index.d.ts +3 -0
- package/dist/status/index.js +3 -0
- package/dist/status/lifecycleProbes.d.ts +19 -0
- package/dist/status/lifecycleProbes.js +174 -0
- package/dist/status/moltnetProbes.d.ts +7 -8
- package/dist/status/moltnetProbes.js +27 -198
- package/dist/status/moltnetWiringProbes.d.ts +19 -0
- package/dist/status/moltnetWiringProbes.js +178 -0
- package/dist/target/cleanupRun.d.ts +41 -0
- package/dist/target/cleanupRun.js +139 -0
- package/dist/target/cleanupRunDocker.d.ts +16 -0
- package/dist/target/cleanupRunDocker.js +66 -0
- package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
- package/dist/target/cleanupRunDocker.test-helper.js +238 -0
- package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
- package/dist/target/cleanupRunDockerPreflight.js +224 -0
- package/dist/target/composedPreparation.d.ts +205 -0
- package/dist/target/composedPreparation.js +223 -0
- package/dist/target/containerBundle.d.ts +82 -0
- package/dist/target/containerBundle.js +243 -0
- package/dist/target/containerBundleArchive.d.ts +31 -0
- package/dist/target/containerBundleArchive.js +140 -0
- package/dist/target/containerBundleAuthority.d.ts +25 -0
- package/dist/target/containerBundleAuthority.js +65 -0
- package/dist/target/containerBundleContracts.d.ts +114 -0
- package/dist/target/containerBundleContracts.js +173 -0
- package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
- package/dist/target/containerBundleFilesystemStore.js +247 -0
- package/dist/target/containerBundlePolicy.d.ts +33 -0
- package/dist/target/containerBundlePolicy.js +64 -0
- package/dist/target/containerBundleStore.d.ts +127 -0
- package/dist/target/containerBundleStore.js +284 -0
- package/dist/target/contracts.d.ts +538 -0
- package/dist/target/contracts.js +373 -0
- package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
- package/dist/target/dockerArtifactIdentityTypes.js +1 -0
- package/dist/target/dockerArtifactInspection.d.ts +40 -0
- package/dist/target/dockerArtifactInspection.js +125 -0
- package/dist/target/dockerArtifacts.d.ts +21 -0
- package/dist/target/dockerArtifacts.js +110 -0
- package/dist/target/dockerArtifactsProvider.d.ts +41 -0
- package/dist/target/dockerArtifactsProvider.js +449 -0
- package/dist/target/dockerCommandExecutor.d.ts +27 -0
- package/dist/target/dockerCommandExecutor.js +200 -0
- package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
- package/dist/target/dockerCommandExecutorCore.js +273 -0
- package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
- package/dist/target/dockerContainerBundleBuilder.js +256 -0
- package/dist/target/dockerContextSnapshot.d.ts +21 -0
- package/dist/target/dockerContextSnapshot.js +158 -0
- package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
- package/dist/target/dockerEndpointFingerprint.js +9 -0
- package/dist/target/dockerPreparedArtifact.d.ts +48 -0
- package/dist/target/dockerPreparedArtifact.js +131 -0
- package/dist/target/dockerProjectionJson.d.ts +1 -0
- package/dist/target/dockerProjectionJson.js +80 -0
- package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
- package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
- package/dist/target/dockerResources.d.ts +26 -0
- package/dist/target/dockerResources.js +162 -0
- package/dist/target/dockerResourcesProvider.d.ts +44 -0
- package/dist/target/dockerResourcesProvider.js +207 -0
- package/dist/target/dockerSecrets.d.ts +39 -0
- package/dist/target/dockerSecrets.js +249 -0
- package/dist/target/dockerSecretsAuthority.d.ts +26 -0
- package/dist/target/dockerSecretsAuthority.js +216 -0
- package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
- package/dist/target/dockerSecretsLifecycle.js +133 -0
- package/dist/target/dockerSecretsProvider.d.ts +68 -0
- package/dist/target/dockerSecretsProvider.js +329 -0
- package/dist/target/dockerTarget.d.ts +52 -0
- package/dist/target/dockerTarget.js +48 -0
- package/dist/target/dockerTargetBinding.d.ts +14 -0
- package/dist/target/dockerTargetBinding.js +96 -0
- package/dist/target/dockerWorldClock.d.ts +17 -0
- package/dist/target/dockerWorldClock.js +111 -0
- package/dist/target/dockerWorldReadiness.d.ts +17 -0
- package/dist/target/dockerWorldReadiness.js +119 -0
- package/dist/target/dockerWorldService.d.ts +23 -0
- package/dist/target/dockerWorldService.js +216 -0
- package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
- package/dist/target/dockerWorldServiceAuthority.js +182 -0
- package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
- package/dist/target/dockerWorldServiceLifecycle.js +275 -0
- package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
- package/dist/target/dockerWorldServiceProvider.js +318 -0
- package/dist/target/dockerWorldServiceStore.d.ts +73 -0
- package/dist/target/dockerWorldServiceStore.js +367 -0
- package/dist/target/evidenceExport.d.ts +55 -0
- package/dist/target/evidenceExport.js +518 -0
- package/dist/target/evidenceExportArchive.d.ts +10 -0
- package/dist/target/evidenceExportArchive.js +302 -0
- package/dist/target/evidenceExportContract.d.ts +27 -0
- package/dist/target/evidenceExportContract.js +40 -0
- package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
- package/dist/target/evidenceExportOperationsTestKit.js +312 -0
- package/dist/target/evidenceExportProvider.d.ts +85 -0
- package/dist/target/evidenceExportProvider.js +187 -0
- package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
- package/dist/target/evidenceExportPublicationTypes.js +1 -0
- package/dist/target/evidenceExportStore.d.ts +70 -0
- package/dist/target/evidenceExportStore.js +498 -0
- package/dist/target/evidenceExportStorePublication.d.ts +7 -0
- package/dist/target/evidenceExportStorePublication.js +395 -0
- package/dist/target/handles.d.ts +20 -0
- package/dist/target/handles.js +56 -0
- package/dist/target/index.d.ts +12 -0
- package/dist/target/index.js +11 -0
- package/dist/target/journal.d.ts +59 -0
- package/dist/target/journal.js +529 -0
- package/dist/target/journalFilesystem.d.ts +3 -0
- package/dist/target/journalFilesystem.js +111 -0
- package/dist/target/journalRoot.d.ts +4 -0
- package/dist/target/journalRoot.js +6 -0
- package/dist/target/organizationAttachment.d.ts +23 -0
- package/dist/target/organizationAttachment.js +263 -0
- package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
- package/dist/target/organizationAttachmentAuthority.js +161 -0
- package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
- package/dist/target/organizationAttachmentLifecycle.js +101 -0
- package/dist/target/organizationAttachmentProvider.d.ts +76 -0
- package/dist/target/organizationAttachmentProvider.js +289 -0
- package/dist/target/organizationAttachmentStore.d.ts +51 -0
- package/dist/target/organizationAttachmentStore.js +316 -0
- package/dist/target/publicArtifactSnapshot.d.ts +41 -0
- package/dist/target/publicArtifactSnapshot.js +150 -0
- package/dist/target/topologyActivation.d.ts +51 -0
- package/dist/target/topologyActivation.js +149 -0
- package/dist/target/topologyAttestation.d.ts +37 -0
- package/dist/target/topologyAttestation.js +300 -0
- package/dist/target/topologyAttestationErrors.d.ts +1 -0
- package/dist/target/topologyAttestationErrors.js +1 -0
- package/dist/target/worldClock.d.ts +60 -0
- package/dist/target/worldClock.js +129 -0
- package/dist/target/worldReadiness.d.ts +103 -0
- package/dist/target/worldReadiness.js +153 -0
- package/moltnet-releases.json +20 -0
- package/package.json +29 -8
- package/runtimes.yaml +28 -27
- package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
- package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
- /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
- /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const fail = () => { throw new Error("Target authority initialization failed"); };
|
|
2
|
+
export const completedTargetArtifacts = async (journal, identities) => {
|
|
3
|
+
const snapshot = await journal.read();
|
|
4
|
+
const bindings = [];
|
|
5
|
+
for (const entry of snapshot.entries) {
|
|
6
|
+
if (entry.operation !== "resolve_world_artifact" || entry.state !== "completed")
|
|
7
|
+
continue;
|
|
8
|
+
const completed = await journal.resolveCompletedReceipt({ operationHandle: entry.operation_handle, requestDigest: entry.request_digest });
|
|
9
|
+
if (!completed || completed.receipt.operation !== "resolve_world_artifact" || completed.receipt.operation_handle !== entry.operation_handle
|
|
10
|
+
|| completed.receipt.request_digest !== entry.request_digest || completed.receipt.result_handle === null)
|
|
11
|
+
return fail();
|
|
12
|
+
const binding = await identities.resolveOperation(entry.operation_handle, entry.request_digest);
|
|
13
|
+
if (!binding || binding.operationHandle !== entry.operation_handle || binding.requestDigest !== entry.request_digest
|
|
14
|
+
|| binding.resultHandle !== completed.receipt.result_handle || binding.selectedTargetHandle !== snapshot.selected_target.handle)
|
|
15
|
+
return fail();
|
|
16
|
+
bindings.push(binding);
|
|
17
|
+
}
|
|
18
|
+
return Object.freeze(bindings);
|
|
19
|
+
};
|
|
20
|
+
export const exactTargetArtifactMapping = (config, binding) => {
|
|
21
|
+
if (binding.identityKind !== "oci_image_manifest")
|
|
22
|
+
return fail();
|
|
23
|
+
const matches = config.artifactMappings.filter((mapping) => mapping.artifact_manifest_digest === binding.artifactManifestDigest
|
|
24
|
+
&& mapping.image_digest === binding.imageDigest && mapping.image_reference === binding.imageReference);
|
|
25
|
+
if (matches.length !== 1)
|
|
26
|
+
return fail();
|
|
27
|
+
return matches[0];
|
|
28
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type DockerArtifactIdentityBinding, type DockerArtifactIdentityStore, type DockerArtifactMapping } from "../target/dockerArtifactsProvider.js";
|
|
2
|
+
import { type DockerTargetExecutors } from "../target/dockerCommandExecutor.js";
|
|
3
|
+
import { type TargetSecretVersionAuthorityStore } from "../target/dockerSecretsAuthority.js";
|
|
4
|
+
import { type WorldServiceResolver } from "../target/dockerWorldServiceAuthority.js";
|
|
5
|
+
import { type WorldServiceAuthorityStore } from "../target/dockerWorldServiceStore.js";
|
|
6
|
+
import { type EvidenceExportAuthorityStore } from "../target/evidenceExportStore.js";
|
|
7
|
+
import { type OrganizationAttachmentAuthorityStore } from "../target/organizationAttachmentStore.js";
|
|
8
|
+
import { type TargetTopologyAttestor } from "../target/topologyAttestation.js";
|
|
9
|
+
import type { TargetSecretSourceResolver } from "../target/dockerSecrets.js";
|
|
10
|
+
import type { OrganizationAttachmentResolver } from "../target/organizationAttachmentAuthority.js";
|
|
11
|
+
import type { TargetDefaultConfig } from "./targetDefaultConfig.js";
|
|
12
|
+
import { type TargetJournalResolver } from "./targetDefaultJournalAuthority.js";
|
|
13
|
+
export { TARGET_DEFAULT_AUTHORITIES_ERROR, type TargetJournalResolver, type TargetMutationAuthority } from "./targetDefaultJournalAuthority.js";
|
|
14
|
+
export interface HelperArtifactAuthority {
|
|
15
|
+
readonly artifactIdentity: DockerArtifactIdentityBinding;
|
|
16
|
+
readonly bundle: {
|
|
17
|
+
readonly operation_handle: DockerArtifactIdentityBinding["operationHandle"];
|
|
18
|
+
readonly request_digest: string;
|
|
19
|
+
readonly result_handle: DockerArtifactIdentityBinding["resultHandle"];
|
|
20
|
+
};
|
|
21
|
+
readonly mapping: DockerArtifactMapping;
|
|
22
|
+
}
|
|
23
|
+
export interface HelperArtifactResolver {
|
|
24
|
+
resolve(input: {
|
|
25
|
+
readonly context: unknown;
|
|
26
|
+
readonly request: unknown;
|
|
27
|
+
}): Promise<HelperArtifactAuthority>;
|
|
28
|
+
}
|
|
29
|
+
export interface TargetDefaultAuthorities {
|
|
30
|
+
readonly artifactIdentityStore: DockerArtifactIdentityStore;
|
|
31
|
+
readonly attachmentAuthorityStore: OrganizationAttachmentAuthorityStore;
|
|
32
|
+
readonly evidenceExportAuthorityStore: EvidenceExportAuthorityStore;
|
|
33
|
+
readonly executors: DockerTargetExecutors;
|
|
34
|
+
readonly handoffResolver: OrganizationAttachmentResolver;
|
|
35
|
+
/** Omitted when this invocation cannot export evidence. */
|
|
36
|
+
readonly helperArtifactResolver?: HelperArtifactResolver;
|
|
37
|
+
readonly journals: TargetJournalResolver;
|
|
38
|
+
readonly secretAuthorityStore: TargetSecretVersionAuthorityStore;
|
|
39
|
+
readonly secretResolver: TargetSecretSourceResolver;
|
|
40
|
+
readonly topologyAttestor: TargetTopologyAttestor;
|
|
41
|
+
readonly worldAuthorityStore: WorldServiceAuthorityStore;
|
|
42
|
+
readonly worldResolver: WorldServiceResolver;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The production authority graph owns B114 worker clients and directory file
|
|
46
|
+
* handles. It is therefore deliberately a session, rather than an ambient
|
|
47
|
+
* process singleton: the caller that starts the graph must close it.
|
|
48
|
+
*/
|
|
49
|
+
export interface TargetDefaultAuthoritySession {
|
|
50
|
+
readonly authorities: TargetDefaultAuthorities;
|
|
51
|
+
dispose(): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
export declare const initializeTargetDefaultAuthoritySession: (config: TargetDefaultConfig) => Promise<TargetDefaultAuthoritySession>;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { initializeDockerArtifactIdentityStore } from "../target/dockerArtifactsProvider.js";
|
|
2
|
+
import { createDockerTargetExecutors } from "../target/dockerCommandExecutor.js";
|
|
3
|
+
import { initializeTargetSecretVersionAuthorityStore } from "../target/dockerSecretsAuthority.js";
|
|
4
|
+
import { parseWorldServiceAuthorization, parseWorldServiceResolution } from "../target/dockerWorldServiceAuthority.js";
|
|
5
|
+
import { initializeWorldServiceAuthorityStore } from "../target/dockerWorldServiceStore.js";
|
|
6
|
+
import { initializeEvidenceExportAuthorityStore } from "../target/evidenceExportStore.js";
|
|
7
|
+
import { initializeOrganizationAttachmentAuthorityStore } from "../target/organizationAttachmentStore.js";
|
|
8
|
+
import { createTargetTopologyAttestor } from "../target/topologyAttestation.js";
|
|
9
|
+
import { initializeTargetSecretSourceResolver } from "../auth/targetSecretSourceResolver.js";
|
|
10
|
+
import { initializeOrganizationHandoffAuthorityStore } from "../deployment/organizationHandoffAuthorityStore.js";
|
|
11
|
+
import { completedTargetArtifacts, exactTargetArtifactMapping } from "./targetDefaultArtifactAuthority.js";
|
|
12
|
+
import { targetDefaultEnvelope as envelope } from "./targetDefaultEnvelope.js";
|
|
13
|
+
import { createDockerTargetLocalBundleBuilder } from "../target/dockerContainerBundleBuilder.js";
|
|
14
|
+
import { attestPreparedArtifactIdentity } from "../target/dockerPreparedArtifact.js";
|
|
15
|
+
import { initializeFilesystemTargetLocalBundleStore } from "../target/containerBundleFilesystemStore.js";
|
|
16
|
+
import { createTargetJournalAccess, TARGET_DEFAULT_AUTHORITIES_ERROR } from "./targetDefaultJournalAuthority.js";
|
|
17
|
+
export { TARGET_DEFAULT_AUTHORITIES_ERROR } from "./targetDefaultJournalAuthority.js";
|
|
18
|
+
const fail = () => { throw new Error(TARGET_DEFAULT_AUTHORITIES_ERROR); };
|
|
19
|
+
const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
|
|
20
|
+
export const initializeTargetDefaultAuthoritySession = async (config) => {
|
|
21
|
+
let handoffAuthority;
|
|
22
|
+
try {
|
|
23
|
+
const journalAccess = createTargetJournalAccess(config);
|
|
24
|
+
const journals = journalAccess.resolver;
|
|
25
|
+
const [artifactIdentityStore, secretAuthorityStore, attachmentAuthorityStore, worldAuthorityStore, evidenceExportAuthorityStore, secretResolver] = await Promise.all([
|
|
26
|
+
initializeDockerArtifactIdentityStore(config.paths.artifactIdentities),
|
|
27
|
+
initializeTargetSecretVersionAuthorityStore(config.paths.secretAuthority),
|
|
28
|
+
initializeOrganizationAttachmentAuthorityStore(config.paths.attachmentAuthority),
|
|
29
|
+
initializeWorldServiceAuthorityStore(config.paths.worldAuthority),
|
|
30
|
+
initializeEvidenceExportAuthorityStore(config.paths.evidenceExport),
|
|
31
|
+
// Production always resolves grants from the B113 host-local authority
|
|
32
|
+
// store. It deliberately has no configuration or ambient override seam.
|
|
33
|
+
initializeTargetSecretSourceResolver()
|
|
34
|
+
]);
|
|
35
|
+
// The B114 store owns its anchored filesystem workers. Keep the store
|
|
36
|
+
// alive through its resolver rather than accepting a caller-provided one.
|
|
37
|
+
handoffAuthority = await initializeOrganizationHandoffAuthorityStore();
|
|
38
|
+
const handoffResolver = handoffAuthority.resolver;
|
|
39
|
+
const executors = createDockerTargetExecutors({ dockerCommand: config.dockerCommand });
|
|
40
|
+
const preparedBuilder = createDockerTargetLocalBundleBuilder({ context: config.context,
|
|
41
|
+
executor: executors.artifact, timeoutMs: config.timeoutMs });
|
|
42
|
+
const preparedStore = await initializeFilesystemTargetLocalBundleStore(config.paths.containerBundles);
|
|
43
|
+
const worldResolver = Object.freeze({
|
|
44
|
+
resolve: async (raw) => {
|
|
45
|
+
const input = envelope(raw, ["authorization"], ["signal"]);
|
|
46
|
+
let authorization;
|
|
47
|
+
try {
|
|
48
|
+
authorization = parseWorldServiceAuthorization(input.authorization);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return fail();
|
|
52
|
+
}
|
|
53
|
+
const journal = await journalAccess.resolveIdentity({
|
|
54
|
+
context: config.context,
|
|
55
|
+
descriptorDigest: authorization.descriptor_digest,
|
|
56
|
+
runId: authorization.run_id,
|
|
57
|
+
selectedTarget: authorization.selected_target
|
|
58
|
+
});
|
|
59
|
+
const bindings = (await completedTargetArtifacts(journal, artifactIdentityStore))
|
|
60
|
+
.filter((binding) => binding.resultHandle === authorization.world_artifact_handle);
|
|
61
|
+
if (bindings.length !== 1)
|
|
62
|
+
return fail();
|
|
63
|
+
const binding = bindings[0];
|
|
64
|
+
try {
|
|
65
|
+
let artifact;
|
|
66
|
+
if (binding.identityKind === "oci_image_manifest") {
|
|
67
|
+
artifact = {
|
|
68
|
+
artifact_manifest_digest: binding.artifactManifestDigest,
|
|
69
|
+
identity_kind: binding.identityKind,
|
|
70
|
+
image_digest: binding.imageDigest,
|
|
71
|
+
image_reference: binding.imageReference,
|
|
72
|
+
operation_handle: binding.operationHandle,
|
|
73
|
+
request_digest: binding.requestDigest,
|
|
74
|
+
result_handle: binding.resultHandle
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
else if (binding.identityKind === "docker_image_config_digest") {
|
|
78
|
+
const prepared = await preparedStore.resolve({
|
|
79
|
+
operation_handle: binding.preparedOperationHandle,
|
|
80
|
+
request_digest: binding.preparedRequestDigest
|
|
81
|
+
});
|
|
82
|
+
if (!prepared || !same(prepared, {
|
|
83
|
+
archive_digest: binding.archiveDigest,
|
|
84
|
+
artifact_digest: binding.artifactManifestDigest,
|
|
85
|
+
base_image_config_digest: binding.baseImageConfigDigest,
|
|
86
|
+
build_policy_digest: binding.buildPolicyDigest,
|
|
87
|
+
bundle_digest: binding.bundleDigest,
|
|
88
|
+
config_id: binding.configId,
|
|
89
|
+
daemon_epoch: binding.daemonEpoch,
|
|
90
|
+
entrypoint: binding.entrypoint,
|
|
91
|
+
gc_tag: binding.gcTag,
|
|
92
|
+
identity_kind: binding.identityKind,
|
|
93
|
+
launcher_digest: binding.launcherDigest,
|
|
94
|
+
network_alias: binding.networkAlias,
|
|
95
|
+
operation_handle: binding.preparedOperationHandle,
|
|
96
|
+
platform: binding.platform,
|
|
97
|
+
platform_digest: binding.platformDigest,
|
|
98
|
+
request_digest: binding.preparedRequestDigest,
|
|
99
|
+
selected_target: authorization.selected_target
|
|
100
|
+
}))
|
|
101
|
+
return fail();
|
|
102
|
+
await attestPreparedArtifactIdentity(preparedBuilder, binding, prepared, authorization.selected_target);
|
|
103
|
+
artifact = {
|
|
104
|
+
archive_digest: binding.archiveDigest,
|
|
105
|
+
artifact_manifest_digest: binding.artifactManifestDigest,
|
|
106
|
+
base_image_config_digest: binding.baseImageConfigDigest,
|
|
107
|
+
build_policy_digest: binding.buildPolicyDigest,
|
|
108
|
+
bundle_digest: binding.bundleDigest,
|
|
109
|
+
config_id: binding.configId,
|
|
110
|
+
daemon_epoch: binding.daemonEpoch,
|
|
111
|
+
entrypoint: binding.entrypoint,
|
|
112
|
+
gc_tag: binding.gcTag,
|
|
113
|
+
identity_kind: binding.identityKind,
|
|
114
|
+
image_digest: binding.configId,
|
|
115
|
+
image_reference: binding.configId,
|
|
116
|
+
launcher_digest: binding.launcherDigest,
|
|
117
|
+
network_alias: binding.networkAlias,
|
|
118
|
+
operation_handle: binding.operationHandle,
|
|
119
|
+
platform: binding.platform,
|
|
120
|
+
platform_digest: binding.platformDigest,
|
|
121
|
+
prepared_operation_handle: binding.preparedOperationHandle,
|
|
122
|
+
prepared_request_digest: binding.preparedRequestDigest,
|
|
123
|
+
request_digest: binding.requestDigest,
|
|
124
|
+
result_handle: binding.resultHandle
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
else
|
|
128
|
+
return fail();
|
|
129
|
+
return parseWorldServiceResolution({
|
|
130
|
+
artifact,
|
|
131
|
+
authorization
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return fail();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
const helperArtifactResolver = config.helperArtifact
|
|
140
|
+
? Object.freeze({
|
|
141
|
+
resolve: async (raw) => {
|
|
142
|
+
const input = envelope(raw, ["context", "request"]);
|
|
143
|
+
const authority = await journals.resolve({
|
|
144
|
+
context: input.context,
|
|
145
|
+
request: input.request
|
|
146
|
+
});
|
|
147
|
+
const bindings = (await completedTargetArtifacts(authority.journal, artifactIdentityStore))
|
|
148
|
+
.filter((binding) => binding.identityKind === "oci_image_manifest"
|
|
149
|
+
&& binding.artifactManifestDigest === config.helperArtifact.artifact_manifest_digest);
|
|
150
|
+
if (bindings.length !== 1)
|
|
151
|
+
return fail();
|
|
152
|
+
const artifactIdentity = bindings[0];
|
|
153
|
+
if (artifactIdentity.identityKind !== "oci_image_manifest")
|
|
154
|
+
return fail();
|
|
155
|
+
const mapping = exactTargetArtifactMapping(config, artifactIdentity);
|
|
156
|
+
return Object.freeze({
|
|
157
|
+
artifactIdentity,
|
|
158
|
+
bundle: Object.freeze({
|
|
159
|
+
operation_handle: artifactIdentity.operationHandle,
|
|
160
|
+
request_digest: artifactIdentity.requestDigest,
|
|
161
|
+
result_handle: artifactIdentity.resultHandle
|
|
162
|
+
}),
|
|
163
|
+
mapping
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}) : undefined;
|
|
167
|
+
const topologyAttestor = createTargetTopologyAttestor({
|
|
168
|
+
attachmentExecutor: executors.attachment,
|
|
169
|
+
attachmentStore: attachmentAuthorityStore,
|
|
170
|
+
context: config.context,
|
|
171
|
+
resolveJournal: async (input) => journalAccess.resolveExistingIdentity({
|
|
172
|
+
context: config.context,
|
|
173
|
+
descriptorDigest: input.descriptorDigest,
|
|
174
|
+
runId: input.runId,
|
|
175
|
+
selectedTarget: input.selectedTarget
|
|
176
|
+
}),
|
|
177
|
+
resourceExecutor: executors.resource,
|
|
178
|
+
timeoutMs: config.timeoutMs,
|
|
179
|
+
worldExecutor: executors.world,
|
|
180
|
+
worldStore: worldAuthorityStore
|
|
181
|
+
});
|
|
182
|
+
const authorities = Object.freeze({
|
|
183
|
+
artifactIdentityStore,
|
|
184
|
+
attachmentAuthorityStore,
|
|
185
|
+
evidenceExportAuthorityStore,
|
|
186
|
+
executors,
|
|
187
|
+
handoffResolver,
|
|
188
|
+
...(helperArtifactResolver ? { helperArtifactResolver } : {}),
|
|
189
|
+
journals,
|
|
190
|
+
secretAuthorityStore,
|
|
191
|
+
secretResolver,
|
|
192
|
+
topologyAttestor,
|
|
193
|
+
worldAuthorityStore,
|
|
194
|
+
worldResolver
|
|
195
|
+
});
|
|
196
|
+
let disposal;
|
|
197
|
+
const dispose = async () => {
|
|
198
|
+
disposal ??= handoffAuthority.dispose();
|
|
199
|
+
await disposal;
|
|
200
|
+
};
|
|
201
|
+
return Object.freeze({ authorities, dispose });
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// Do not orphan B114's worker clients if a later authority fails to
|
|
205
|
+
// initialize. A successfully-created session transfers that ownership
|
|
206
|
+
// to its explicit disposer instead.
|
|
207
|
+
await handoffAuthority?.dispose().catch(() => undefined);
|
|
208
|
+
return fail();
|
|
209
|
+
}
|
|
210
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type DockerArtifactMapping } from "../target/dockerArtifactsProvider.js";
|
|
2
|
+
export { resolveTargetDefaultJournalRoot } from "../target/journalRoot.js";
|
|
3
|
+
export declare const TARGET_DEFAULT_CONFIG_ERROR = "Target configuration failed";
|
|
4
|
+
export interface TargetDefaultConfigInputs {
|
|
5
|
+
/**
|
|
6
|
+
* Immutable artifact identities are configuration, not a late-bound provider
|
|
7
|
+
* input. Keeping them here makes the complete production input JSON data.
|
|
8
|
+
*/
|
|
9
|
+
readonly artifactMappings?: readonly DockerArtifactMapping[];
|
|
10
|
+
/**
|
|
11
|
+
* Optional durable authority for immutable target-local container bundles.
|
|
12
|
+
* It is deliberately independent from per-run lifecycle and secret roots.
|
|
13
|
+
*/
|
|
14
|
+
readonly containerBundleStoreRoot?: string;
|
|
15
|
+
readonly context: string;
|
|
16
|
+
readonly dockerCommand: string;
|
|
17
|
+
readonly evidenceDestination: string;
|
|
18
|
+
readonly helperArtifactManifestDigest?: string;
|
|
19
|
+
/** Local-Daemon prepared images, admitted only by manifest/bundle/policy. */
|
|
20
|
+
readonly preparedArtifactMappings?: readonly PreparedArtifactMapping[];
|
|
21
|
+
readonly timeoutMs: number;
|
|
22
|
+
}
|
|
23
|
+
export interface PreparedArtifactMapping {
|
|
24
|
+
readonly archive_digest: string;
|
|
25
|
+
readonly artifact_manifest_digest: string;
|
|
26
|
+
readonly base_image_config_digest: string;
|
|
27
|
+
readonly build_policy_digest: string;
|
|
28
|
+
readonly bundle_digest: string;
|
|
29
|
+
readonly entrypoint: string;
|
|
30
|
+
readonly launcher_digest: string;
|
|
31
|
+
readonly network_alias: string;
|
|
32
|
+
readonly platform: {
|
|
33
|
+
readonly architecture: "amd64" | "arm64";
|
|
34
|
+
readonly os: "linux";
|
|
35
|
+
};
|
|
36
|
+
readonly platform_digest: string;
|
|
37
|
+
}
|
|
38
|
+
export interface TargetDefaultConfig {
|
|
39
|
+
readonly artifactMappings: readonly DockerArtifactMapping[];
|
|
40
|
+
readonly context: string;
|
|
41
|
+
readonly dockerCommand: string;
|
|
42
|
+
readonly evidenceDestination: string;
|
|
43
|
+
/** Present only when the private evidence-export helper was configured. */
|
|
44
|
+
readonly helperArtifact?: DockerArtifactMapping;
|
|
45
|
+
readonly preparedArtifactMappings: readonly PreparedArtifactMapping[];
|
|
46
|
+
readonly paths: {
|
|
47
|
+
readonly artifactIdentities: string;
|
|
48
|
+
readonly attachmentAuthority: string;
|
|
49
|
+
readonly evidenceExport: string;
|
|
50
|
+
readonly containerBundles: string;
|
|
51
|
+
readonly journals: string;
|
|
52
|
+
readonly root: string;
|
|
53
|
+
readonly secretAuthority: string;
|
|
54
|
+
readonly worldAuthority: string;
|
|
55
|
+
};
|
|
56
|
+
readonly timeoutMs: number;
|
|
57
|
+
}
|
|
58
|
+
export interface TargetDefaultWorldReadinessConfig {
|
|
59
|
+
readonly context: string;
|
|
60
|
+
readonly dockerCommand: string;
|
|
61
|
+
readonly paths: {
|
|
62
|
+
readonly worldAuthority: string;
|
|
63
|
+
};
|
|
64
|
+
readonly timeoutMs: number;
|
|
65
|
+
}
|
|
66
|
+
export declare const loadTargetDefaultConfig: (raw: TargetDefaultConfigInputs) => Promise<TargetDefaultConfig>;
|
|
67
|
+
/** Resolves only the paths required by a world-readiness query; performs no I/O. */
|
|
68
|
+
export declare const resolveTargetDefaultWorldReadinessConfig: (raw: TargetDefaultConfigInputs) => TargetDefaultWorldReadinessConfig;
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { lstat, mkdir, open, realpath } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { types as nodeTypes } from "node:util";
|
|
5
|
+
import { resolveSpawnfileHome } from "../auth/index.js";
|
|
6
|
+
import { parseDockerArtifactMappings } from "../target/dockerArtifactsProvider.js";
|
|
7
|
+
export { resolveTargetDefaultJournalRoot } from "../target/journalRoot.js";
|
|
8
|
+
export const TARGET_DEFAULT_CONFIG_ERROR = "Target configuration failed";
|
|
9
|
+
const MAX_PATH_BYTES = 4_096;
|
|
10
|
+
const CONTEXT = /^[a-z][a-z0-9_-]{0,63}$/u;
|
|
11
|
+
const DIGEST = /^sha256:[0-9a-f]{64}$/u;
|
|
12
|
+
const COMMAND_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;
|
|
13
|
+
const CHILD_ROOTS = Object.freeze([
|
|
14
|
+
"journals",
|
|
15
|
+
"artifact-identities",
|
|
16
|
+
"secret-authority",
|
|
17
|
+
"attachment-authority",
|
|
18
|
+
"world-authority",
|
|
19
|
+
"evidence-export"
|
|
20
|
+
]);
|
|
21
|
+
const fail = () => { throw new Error(TARGET_DEFAULT_CONFIG_ERROR); };
|
|
22
|
+
const byteLength = (value) => Buffer.byteLength(value, "utf8");
|
|
23
|
+
const descriptorValues = (raw) => {
|
|
24
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw) || nodeTypes.isProxy(raw)
|
|
25
|
+
|| Object.getPrototypeOf(raw) !== Object.prototype)
|
|
26
|
+
return fail();
|
|
27
|
+
const expected = [
|
|
28
|
+
"artifactMappings", "containerBundleStoreRoot", "context", "dockerCommand", "evidenceDestination",
|
|
29
|
+
"helperArtifactManifestDigest", "preparedArtifactMappings", "timeoutMs"
|
|
30
|
+
];
|
|
31
|
+
const required = ["context", "dockerCommand", "evidenceDestination", "timeoutMs"];
|
|
32
|
+
const keys = Reflect.ownKeys(raw);
|
|
33
|
+
if (keys.some((key) => typeof key !== "string" || !expected.includes(key))
|
|
34
|
+
|| required.some((key) => !keys.includes(key)))
|
|
35
|
+
return fail();
|
|
36
|
+
const descriptors = Object.getOwnPropertyDescriptors(raw);
|
|
37
|
+
if (Object.values(descriptors).some((item) => !item.enumerable || !("value" in item)))
|
|
38
|
+
return fail();
|
|
39
|
+
return Object.fromEntries(expected.filter((key) => Object.hasOwn(descriptors, key)).map((key) => [key, descriptors[key].value]));
|
|
40
|
+
};
|
|
41
|
+
const preparedMappings = (raw) => {
|
|
42
|
+
if (raw === undefined)
|
|
43
|
+
return Object.freeze([]);
|
|
44
|
+
if (!Array.isArray(raw) || raw.length > 32)
|
|
45
|
+
return fail();
|
|
46
|
+
const manifests = new Set();
|
|
47
|
+
const mappings = raw.map((item) => {
|
|
48
|
+
if (!item || typeof item !== "object" || Array.isArray(item) || nodeTypes.isProxy(item)
|
|
49
|
+
|| Object.getPrototypeOf(item) !== Object.prototype)
|
|
50
|
+
return fail();
|
|
51
|
+
const descriptors = Object.getOwnPropertyDescriptors(item);
|
|
52
|
+
if (Object.values(descriptors).some((descriptor) => !descriptor.enumerable || !("value" in descriptor)))
|
|
53
|
+
return fail();
|
|
54
|
+
const value = Object.fromEntries(Object.entries(descriptors).map(([key, descriptor]) => [key, descriptor.value]));
|
|
55
|
+
if (Object.keys(value).sort().join("\0") !== "archive_digest\0artifact_manifest_digest\0base_image_config_digest\0build_policy_digest\0bundle_digest\0entrypoint\0launcher_digest\0network_alias\0platform\0platform_digest"
|
|
56
|
+
|| typeof value.artifact_manifest_digest !== "string" || !DIGEST.test(value.artifact_manifest_digest)
|
|
57
|
+
|| typeof value.archive_digest !== "string" || !DIGEST.test(value.archive_digest)
|
|
58
|
+
|| typeof value.base_image_config_digest !== "string" || !DIGEST.test(value.base_image_config_digest)
|
|
59
|
+
|| typeof value.bundle_digest !== "string" || !DIGEST.test(value.bundle_digest)
|
|
60
|
+
|| typeof value.build_policy_digest !== "string" || !DIGEST.test(value.build_policy_digest)
|
|
61
|
+
|| typeof value.launcher_digest !== "string" || !DIGEST.test(value.launcher_digest)
|
|
62
|
+
|| typeof value.platform_digest !== "string" || !DIGEST.test(value.platform_digest)
|
|
63
|
+
|| typeof value.entrypoint !== "string" || !/^[A-Za-z0-9][A-Za-z0-9._/-]{0,239}$/u.test(value.entrypoint)
|
|
64
|
+
|| value.entrypoint.includes("//") || value.entrypoint.split("/").some((part) => part === "." || part === "..")
|
|
65
|
+
|| typeof value.network_alias !== "string" || !/^[a-z][a-z0-9-]{0,62}$/u.test(value.network_alias)
|
|
66
|
+
|| !value.platform || typeof value.platform !== "object" || Array.isArray(value.platform) || nodeTypes.isProxy(value.platform)
|
|
67
|
+
|| Object.getPrototypeOf(value.platform) !== Object.prototype
|
|
68
|
+
|| Object.keys(value.platform).sort().join("\0") !== "architecture\0os"
|
|
69
|
+
|| Object.values(Object.getOwnPropertyDescriptors(value.platform)).some((descriptor) => !descriptor.enumerable || !("value" in descriptor))
|
|
70
|
+
|| value.platform.os !== "linux"
|
|
71
|
+
|| !["amd64", "arm64"].includes(value.platform.architecture)
|
|
72
|
+
|| manifests.has(value.artifact_manifest_digest))
|
|
73
|
+
return fail();
|
|
74
|
+
manifests.add(value.artifact_manifest_digest);
|
|
75
|
+
return Object.freeze({ archive_digest: value.archive_digest, artifact_manifest_digest: value.artifact_manifest_digest,
|
|
76
|
+
base_image_config_digest: value.base_image_config_digest, build_policy_digest: value.build_policy_digest,
|
|
77
|
+
bundle_digest: value.bundle_digest, entrypoint: value.entrypoint, launcher_digest: value.launcher_digest,
|
|
78
|
+
network_alias: value.network_alias, platform: Object.freeze({ ...value.platform }),
|
|
79
|
+
platform_digest: value.platform_digest });
|
|
80
|
+
});
|
|
81
|
+
return Object.freeze(mappings);
|
|
82
|
+
};
|
|
83
|
+
const exactPath = (raw) => {
|
|
84
|
+
if (typeof raw !== "string" || raw.length < 1 || raw.includes("\0")
|
|
85
|
+
|| byteLength(raw) > MAX_PATH_BYTES || !path.isAbsolute(raw)
|
|
86
|
+
|| path.normalize(raw) !== raw)
|
|
87
|
+
return fail();
|
|
88
|
+
return raw;
|
|
89
|
+
};
|
|
90
|
+
const command = (raw) => {
|
|
91
|
+
if (typeof raw !== "string" || raw.includes("\0") || byteLength(raw) > 1_024)
|
|
92
|
+
return fail();
|
|
93
|
+
if (COMMAND_NAME.test(raw))
|
|
94
|
+
return raw;
|
|
95
|
+
if (!path.isAbsolute(raw) || path.normalize(raw) !== raw)
|
|
96
|
+
return fail();
|
|
97
|
+
return raw;
|
|
98
|
+
};
|
|
99
|
+
const ensureOwnedRoot = async (root) => {
|
|
100
|
+
let info;
|
|
101
|
+
try {
|
|
102
|
+
info = await lstat(root);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error.code !== "ENOENT")
|
|
106
|
+
return fail();
|
|
107
|
+
try {
|
|
108
|
+
await mkdir(root, { mode: 0o700 });
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return fail();
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
info = await lstat(root);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return fail();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const owner = process.getuid?.();
|
|
121
|
+
if (!info.isDirectory() || info.isSymbolicLink()
|
|
122
|
+
|| owner !== undefined && info.uid !== owner)
|
|
123
|
+
return fail();
|
|
124
|
+
let handle;
|
|
125
|
+
try {
|
|
126
|
+
handle = await open(root, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
|
|
127
|
+
await handle.chmod(0o700);
|
|
128
|
+
info = await handle.stat();
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return fail();
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
await handle?.close().catch(() => undefined);
|
|
135
|
+
}
|
|
136
|
+
if (!info.isDirectory() || (info.mode & 0o777) !== 0o700
|
|
137
|
+
|| owner !== undefined && info.uid !== owner)
|
|
138
|
+
return fail();
|
|
139
|
+
return root;
|
|
140
|
+
};
|
|
141
|
+
const isWithin = (candidate, root) => candidate === root || candidate.startsWith(`${root}${path.sep}`);
|
|
142
|
+
const prepareExplicitContainerBundleRoot = async (raw, lifecycleRoot) => {
|
|
143
|
+
const requested = exactPath(raw);
|
|
144
|
+
if (path.parse(requested).root === requested
|
|
145
|
+
|| isWithin(requested, lifecycleRoot)
|
|
146
|
+
|| isWithin(lifecycleRoot, requested))
|
|
147
|
+
return fail();
|
|
148
|
+
try {
|
|
149
|
+
const existing = await lstat(requested);
|
|
150
|
+
if (!existing.isDirectory() || existing.isSymbolicLink()
|
|
151
|
+
|| await realpath(requested) !== requested)
|
|
152
|
+
return fail();
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (error.code !== "ENOENT")
|
|
156
|
+
return fail();
|
|
157
|
+
const parent = path.dirname(requested);
|
|
158
|
+
let parentInfo;
|
|
159
|
+
try {
|
|
160
|
+
parentInfo = await lstat(parent);
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return fail();
|
|
164
|
+
}
|
|
165
|
+
const owner = process.getuid?.();
|
|
166
|
+
if (!parentInfo.isDirectory() || parentInfo.isSymbolicLink()
|
|
167
|
+
|| owner !== undefined && parentInfo.uid !== owner)
|
|
168
|
+
return fail();
|
|
169
|
+
try {
|
|
170
|
+
if (await realpath(parent) !== parent)
|
|
171
|
+
return fail();
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return fail();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
const root = await ensureOwnedRoot(requested);
|
|
178
|
+
try {
|
|
179
|
+
if (await realpath(root) !== root)
|
|
180
|
+
return fail();
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return fail();
|
|
184
|
+
}
|
|
185
|
+
return root;
|
|
186
|
+
};
|
|
187
|
+
const prepareRoots = async (containerBundleStoreRoot) => {
|
|
188
|
+
const home = resolveSpawnfileHome();
|
|
189
|
+
let homeInfo;
|
|
190
|
+
try {
|
|
191
|
+
homeInfo = await lstat(home);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return fail();
|
|
195
|
+
}
|
|
196
|
+
if (!homeInfo.isDirectory() || homeInfo.isSymbolicLink())
|
|
197
|
+
return fail();
|
|
198
|
+
const owner = process.getuid?.();
|
|
199
|
+
if (owner !== undefined && homeInfo.uid !== owner)
|
|
200
|
+
return fail();
|
|
201
|
+
try {
|
|
202
|
+
if (await realpath(home) !== home)
|
|
203
|
+
return fail();
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return fail();
|
|
207
|
+
}
|
|
208
|
+
const root = await ensureOwnedRoot(path.join(home, "target"));
|
|
209
|
+
const childRoots = containerBundleStoreRoot === undefined
|
|
210
|
+
? [...CHILD_ROOTS, "container-bundles"]
|
|
211
|
+
: CHILD_ROOTS;
|
|
212
|
+
const created = await Promise.all(childRoots.map((name) => ensureOwnedRoot(path.join(root, name))));
|
|
213
|
+
const containerBundles = containerBundleStoreRoot === undefined
|
|
214
|
+
? created[6]
|
|
215
|
+
: await prepareExplicitContainerBundleRoot(containerBundleStoreRoot, root);
|
|
216
|
+
return Object.freeze({
|
|
217
|
+
root,
|
|
218
|
+
journals: created[0],
|
|
219
|
+
artifactIdentities: created[1],
|
|
220
|
+
secretAuthority: created[2],
|
|
221
|
+
attachmentAuthority: created[3],
|
|
222
|
+
worldAuthority: created[4],
|
|
223
|
+
evidenceExport: created[5],
|
|
224
|
+
containerBundles
|
|
225
|
+
});
|
|
226
|
+
};
|
|
227
|
+
const validateDestination = async (raw) => {
|
|
228
|
+
const destination = exactPath(raw);
|
|
229
|
+
const parent = path.dirname(destination);
|
|
230
|
+
let parentInfo;
|
|
231
|
+
try {
|
|
232
|
+
parentInfo = await lstat(parent);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return fail();
|
|
236
|
+
}
|
|
237
|
+
const owner = process.getuid?.();
|
|
238
|
+
if (!parentInfo.isDirectory() || parentInfo.isSymbolicLink()
|
|
239
|
+
|| (parentInfo.mode & 0o777) !== 0o700
|
|
240
|
+
|| owner !== undefined && parentInfo.uid !== owner)
|
|
241
|
+
return fail();
|
|
242
|
+
try {
|
|
243
|
+
if (await realpath(parent) !== parent)
|
|
244
|
+
return fail();
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return fail();
|
|
248
|
+
}
|
|
249
|
+
try {
|
|
250
|
+
const existing = await lstat(destination);
|
|
251
|
+
if (!existing.isFile() || existing.isSymbolicLink()
|
|
252
|
+
|| owner !== undefined && existing.uid !== owner
|
|
253
|
+
|| (existing.mode & 0o777) !== 0o600)
|
|
254
|
+
return fail();
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
if (error.code !== "ENOENT")
|
|
258
|
+
return fail();
|
|
259
|
+
}
|
|
260
|
+
return destination;
|
|
261
|
+
};
|
|
262
|
+
export const loadTargetDefaultConfig = async (raw) => {
|
|
263
|
+
const value = descriptorValues(raw);
|
|
264
|
+
if (typeof value.context !== "string" || !CONTEXT.test(value.context)
|
|
265
|
+
|| !Number.isSafeInteger(value.timeoutMs) || value.timeoutMs < 1
|
|
266
|
+
|| value.timeoutMs > 120_000
|
|
267
|
+
|| (Object.hasOwn(value, "artifactMappings") !== Object.hasOwn(value, "helperArtifactManifestDigest"))
|
|
268
|
+
|| (Object.hasOwn(value, "helperArtifactManifestDigest") &&
|
|
269
|
+
(typeof value.helperArtifactManifestDigest !== "string"
|
|
270
|
+
|| !DIGEST.test(value.helperArtifactManifestDigest))))
|
|
271
|
+
return fail();
|
|
272
|
+
const dockerCommand = command(value.dockerCommand);
|
|
273
|
+
let artifactMappings;
|
|
274
|
+
try {
|
|
275
|
+
artifactMappings = value.artifactMappings === undefined
|
|
276
|
+
? Object.freeze([]) : parseDockerArtifactMappings(value.artifactMappings);
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return fail();
|
|
280
|
+
}
|
|
281
|
+
const preparedArtifactMappings = preparedMappings(value.preparedArtifactMappings);
|
|
282
|
+
if (preparedArtifactMappings.some((prepared) => artifactMappings.some((artifact) => artifact.artifact_manifest_digest === prepared.artifact_manifest_digest)))
|
|
283
|
+
return fail();
|
|
284
|
+
const evidenceDestination = await validateDestination(value.evidenceDestination);
|
|
285
|
+
const matches = value.helperArtifactManifestDigest === undefined ? [] : artifactMappings.filter((mapping) => mapping.artifact_manifest_digest === value.helperArtifactManifestDigest);
|
|
286
|
+
if (value.helperArtifactManifestDigest !== undefined && matches.length !== 1)
|
|
287
|
+
return fail();
|
|
288
|
+
const paths = await prepareRoots(value.containerBundleStoreRoot);
|
|
289
|
+
const config = {
|
|
290
|
+
artifactMappings,
|
|
291
|
+
context: value.context,
|
|
292
|
+
dockerCommand,
|
|
293
|
+
evidenceDestination,
|
|
294
|
+
...(matches.length === 1 ? { helperArtifact: matches[0] } : {}),
|
|
295
|
+
preparedArtifactMappings,
|
|
296
|
+
paths,
|
|
297
|
+
timeoutMs: value.timeoutMs
|
|
298
|
+
};
|
|
299
|
+
return Object.freeze(config);
|
|
300
|
+
};
|
|
301
|
+
/** Resolves only the paths required by a world-readiness query; performs no I/O. */
|
|
302
|
+
export const resolveTargetDefaultWorldReadinessConfig = (raw) => {
|
|
303
|
+
const value = descriptorValues(raw);
|
|
304
|
+
if (typeof value.context !== "string" || !CONTEXT.test(value.context)
|
|
305
|
+
|| !Number.isSafeInteger(value.timeoutMs) || value.timeoutMs < 1
|
|
306
|
+
|| value.timeoutMs > 120_000)
|
|
307
|
+
return fail();
|
|
308
|
+
const home = resolveSpawnfileHome();
|
|
309
|
+
return Object.freeze({
|
|
310
|
+
context: value.context,
|
|
311
|
+
dockerCommand: command(value.dockerCommand),
|
|
312
|
+
paths: Object.freeze({
|
|
313
|
+
worldAuthority: path.join(home, "target", "world-authority")
|
|
314
|
+
}),
|
|
315
|
+
timeoutMs: value.timeoutMs
|
|
316
|
+
});
|
|
317
|
+
};
|