spawnfile 0.1.13 → 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 +50 -11
- 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/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/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 -181
- 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 +9 -2
- package/dist/cli/runCli.js +27 -71
- package/dist/cli/runPublishCommands.d.ts +3 -0
- package/dist/cli/runPublishCommands.js +70 -0
- package/dist/cli/statusCommand.d.ts +3 -33
- package/dist/cli/statusCommand.js +19 -249
- 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 +11 -0
- package/dist/compiler/buildProject.js +77 -2
- package/dist/compiler/compilePlanHelpers.js +2 -0
- package/dist/compiler/compileProject.d.ts +13 -0
- package/dist/compiler/compileProject.js +26 -74
- 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 +15 -12
- 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 +56 -52
- 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/containerTargetPlanResolution.d.ts +20 -0
- package/dist/compiler/containerTargetPlanResolution.js +97 -0
- 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 +43 -97
- package/dist/compiler/moltnetBinaries.d.ts +21 -4
- package/dist/compiler/moltnetBinaries.js +134 -27
- package/dist/compiler/moltnetClientConfig.js +7 -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/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 +30 -21
- 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 +31 -8
- 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 +256 -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.js +9 -1
- 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 +16 -0
- package/dist/deployment/index.js +17 -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/project.js +15 -9
- 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 +35 -0
- package/dist/runtime/common.js +55 -0
- package/dist/runtime/container.d.ts +28 -1
- package/dist/runtime/container.js +38 -5
- 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/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 +1 -1
- package/dist/runtime/pi/adapter.js +86 -53
- package/dist/runtime/pi/appActivitySource.js +114 -2
- 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 -1
- package/dist/runtime/pi/appCoreSource.js +104 -214
- package/dist/runtime/pi/appPreludeSource.js +140 -52
- 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 -1
- package/dist/runtime/pi/appSource.js +6 -2
- package/dist/runtime/pi/appTemplate.d.ts +8 -22
- package/dist/runtime/pi/appTemplate.js +9 -126
- 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.js +126 -9
- 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/scheduleUtils.d.ts +2 -0
- package/dist/runtime/scheduleUtils.js +15 -0
- package/dist/runtime/types.d.ts +25 -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/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 +27 -11
- package/runtimes.yaml +8 -23
- 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,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
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TargetDefaultConfig, TargetDefaultWorldReadinessConfig } from "./targetDefaultConfig.js";
|
|
2
|
+
export declare const TARGET_DEFAULT_CONFIG_STDIN_ERROR = "Invalid target configuration";
|
|
3
|
+
export declare const TARGET_DEFAULT_CONFIG_STDIN_VERSION = "spawnfile.target-default-config.v1";
|
|
4
|
+
export declare const TARGET_LOOKUP_CONFIG_STDIN_VERSION = "spawnfile.target-lookup-config.v1";
|
|
5
|
+
export declare const MAX_TARGET_DEFAULT_CONFIG_STDIN_BYTES = 262144;
|
|
6
|
+
export interface TargetLookupConfig {
|
|
7
|
+
readonly context: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const readTargetDefaultConfigStdin: (input: AsyncIterable<unknown>) => Promise<TargetDefaultConfig>;
|
|
10
|
+
/** Parses the normal config envelope but resolves only the read-only readiness path. */
|
|
11
|
+
export declare const readTargetWorldReadinessConfigStdin: (input: AsyncIterable<unknown>) => Promise<TargetDefaultWorldReadinessConfig>;
|
|
12
|
+
/** Parses only the read-only lookup authority; it performs no filesystem work. */
|
|
13
|
+
export declare const readTargetLookupConfigStdin: (input: AsyncIterable<unknown>) => Promise<TargetLookupConfig>;
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { TextDecoder } from "node:util";
|
|
2
|
+
export const TARGET_DEFAULT_CONFIG_STDIN_ERROR = "Invalid target configuration";
|
|
3
|
+
export const TARGET_DEFAULT_CONFIG_STDIN_VERSION = "spawnfile.target-default-config.v1";
|
|
4
|
+
export const TARGET_LOOKUP_CONFIG_STDIN_VERSION = "spawnfile.target-lookup-config.v1";
|
|
5
|
+
export const MAX_TARGET_DEFAULT_CONFIG_STDIN_BYTES = 262_144;
|
|
6
|
+
const TARGET_CONTEXT_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/u;
|
|
7
|
+
const fail = () => { throw new TypeError(TARGET_DEFAULT_CONFIG_STDIN_ERROR); };
|
|
8
|
+
const assertNoDuplicateJsonKeys = (source) => {
|
|
9
|
+
let offset = 0;
|
|
10
|
+
const whitespace = () => { while (/\s/u.test(source[offset] ?? ""))
|
|
11
|
+
offset += 1; };
|
|
12
|
+
const string = () => {
|
|
13
|
+
const start = offset;
|
|
14
|
+
offset += 1;
|
|
15
|
+
while (offset < source.length) {
|
|
16
|
+
if (source[offset] === "\\")
|
|
17
|
+
offset += 2;
|
|
18
|
+
else if (source[offset] === "\"") {
|
|
19
|
+
offset += 1;
|
|
20
|
+
return JSON.parse(source.slice(start, offset));
|
|
21
|
+
}
|
|
22
|
+
else
|
|
23
|
+
offset += 1;
|
|
24
|
+
}
|
|
25
|
+
return fail();
|
|
26
|
+
};
|
|
27
|
+
const value = () => {
|
|
28
|
+
whitespace();
|
|
29
|
+
if (source[offset] === "{")
|
|
30
|
+
return object();
|
|
31
|
+
if (source[offset] === "[")
|
|
32
|
+
return array();
|
|
33
|
+
if (source[offset] === "\"") {
|
|
34
|
+
string();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
while (offset < source.length && !/[\s,\]}]/u.test(source[offset] ?? ""))
|
|
38
|
+
offset += 1;
|
|
39
|
+
};
|
|
40
|
+
const object = () => {
|
|
41
|
+
offset += 1;
|
|
42
|
+
whitespace();
|
|
43
|
+
const keys = new Set();
|
|
44
|
+
if (source[offset] === "}") {
|
|
45
|
+
offset += 1;
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
while (offset < source.length) {
|
|
49
|
+
const key = string();
|
|
50
|
+
if (keys.has(key))
|
|
51
|
+
return fail();
|
|
52
|
+
keys.add(key);
|
|
53
|
+
whitespace();
|
|
54
|
+
offset += 1;
|
|
55
|
+
value();
|
|
56
|
+
whitespace();
|
|
57
|
+
if (source[offset] === "}") {
|
|
58
|
+
offset += 1;
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
offset += 1;
|
|
62
|
+
whitespace();
|
|
63
|
+
}
|
|
64
|
+
return fail();
|
|
65
|
+
};
|
|
66
|
+
const array = () => {
|
|
67
|
+
offset += 1;
|
|
68
|
+
whitespace();
|
|
69
|
+
if (source[offset] === "]") {
|
|
70
|
+
offset += 1;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
while (offset < source.length) {
|
|
74
|
+
value();
|
|
75
|
+
whitespace();
|
|
76
|
+
if (source[offset] === "]") {
|
|
77
|
+
offset += 1;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
offset += 1;
|
|
81
|
+
whitespace();
|
|
82
|
+
}
|
|
83
|
+
return fail();
|
|
84
|
+
};
|
|
85
|
+
value();
|
|
86
|
+
whitespace();
|
|
87
|
+
if (offset !== source.length)
|
|
88
|
+
fail();
|
|
89
|
+
};
|
|
90
|
+
const exactDefaultConfigObject = (raw) => {
|
|
91
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)
|
|
92
|
+
|| Object.getPrototypeOf(raw) !== Object.prototype)
|
|
93
|
+
return fail();
|
|
94
|
+
const expected = [
|
|
95
|
+
"artifactMappings", "container_bundle_store_root", "context", "dockerCommand", "evidenceDestination",
|
|
96
|
+
"helperArtifactManifestDigest", "preparedArtifactMappings", "timeoutMs", "version"
|
|
97
|
+
];
|
|
98
|
+
const required = ["context", "dockerCommand", "evidenceDestination", "timeoutMs", "version"];
|
|
99
|
+
const keys = Object.keys(raw);
|
|
100
|
+
if (keys.some((key) => !expected.includes(key))
|
|
101
|
+
|| required.some((key) => !keys.includes(key)))
|
|
102
|
+
return fail();
|
|
103
|
+
const value = raw;
|
|
104
|
+
if (value.version !== TARGET_DEFAULT_CONFIG_STDIN_VERSION
|
|
105
|
+
|| Object.hasOwn(value, "artifactMappings") !== Object.hasOwn(value, "helperArtifactManifestDigest"))
|
|
106
|
+
return fail();
|
|
107
|
+
return value;
|
|
108
|
+
};
|
|
109
|
+
const exactLookupConfigObject = (raw) => {
|
|
110
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)
|
|
111
|
+
|| Object.getPrototypeOf(raw) !== Object.prototype)
|
|
112
|
+
return fail();
|
|
113
|
+
const keys = Object.keys(raw);
|
|
114
|
+
if (keys.length !== 2 || !keys.includes("context") || !keys.includes("version"))
|
|
115
|
+
return fail();
|
|
116
|
+
const value = raw;
|
|
117
|
+
if (value.version !== TARGET_LOOKUP_CONFIG_STDIN_VERSION
|
|
118
|
+
|| typeof value.context !== "string"
|
|
119
|
+
|| !TARGET_CONTEXT_PATTERN.test(value.context))
|
|
120
|
+
return fail();
|
|
121
|
+
return Object.freeze({ context: value.context });
|
|
122
|
+
};
|
|
123
|
+
const readBytes = async (input) => {
|
|
124
|
+
const chunks = [];
|
|
125
|
+
let total = 0;
|
|
126
|
+
try {
|
|
127
|
+
if (!input || typeof input[Symbol.asyncIterator] !== "function")
|
|
128
|
+
return fail();
|
|
129
|
+
for await (const raw of input) {
|
|
130
|
+
const chunk = typeof raw === "string" ? new TextEncoder().encode(raw)
|
|
131
|
+
: raw instanceof Uint8Array ? Uint8Array.from(raw) : fail();
|
|
132
|
+
// A non-empty chunk consumes at least one byte, so the byte ceiling also
|
|
133
|
+
// bounds iteration. Rejecting empty chunks prevents an unbounded stream
|
|
134
|
+
// from evading that ceiling forever.
|
|
135
|
+
if (chunk.byteLength === 0)
|
|
136
|
+
return fail();
|
|
137
|
+
if (chunk.byteLength > MAX_TARGET_DEFAULT_CONFIG_STDIN_BYTES - total)
|
|
138
|
+
return fail();
|
|
139
|
+
chunks.push(chunk);
|
|
140
|
+
total += chunk.byteLength;
|
|
141
|
+
}
|
|
142
|
+
if (total === 0)
|
|
143
|
+
return fail();
|
|
144
|
+
const bytes = new Uint8Array(total);
|
|
145
|
+
let offset = 0;
|
|
146
|
+
for (const chunk of chunks) {
|
|
147
|
+
bytes.set(chunk, offset);
|
|
148
|
+
offset += chunk.byteLength;
|
|
149
|
+
}
|
|
150
|
+
return bytes;
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return fail();
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
const readRawConfigStdin = async (input) => {
|
|
157
|
+
const bytes = await readBytes(input);
|
|
158
|
+
let source;
|
|
159
|
+
try {
|
|
160
|
+
source = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return fail();
|
|
164
|
+
}
|
|
165
|
+
if (source.startsWith("\uFEFF"))
|
|
166
|
+
return fail();
|
|
167
|
+
try {
|
|
168
|
+
assertNoDuplicateJsonKeys(source);
|
|
169
|
+
return JSON.parse(source);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return fail();
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
export const readTargetDefaultConfigStdin = async (input) => {
|
|
176
|
+
const raw = exactDefaultConfigObject(await readRawConfigStdin(input));
|
|
177
|
+
const inputs = defaultConfigInputs(raw);
|
|
178
|
+
try {
|
|
179
|
+
const { loadTargetDefaultConfig } = await import("./targetDefaultConfig.js");
|
|
180
|
+
return await loadTargetDefaultConfig(inputs);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return fail();
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
const defaultConfigInputs = (raw) => ({
|
|
187
|
+
...(Object.hasOwn(raw, "artifactMappings") ? {
|
|
188
|
+
artifactMappings: raw.artifactMappings
|
|
189
|
+
} : {}),
|
|
190
|
+
...(Object.hasOwn(raw, "container_bundle_store_root") ? {
|
|
191
|
+
containerBundleStoreRoot: raw.container_bundle_store_root
|
|
192
|
+
} : {}),
|
|
193
|
+
context: raw.context,
|
|
194
|
+
dockerCommand: raw.dockerCommand,
|
|
195
|
+
evidenceDestination: raw.evidenceDestination,
|
|
196
|
+
...(Object.hasOwn(raw, "helperArtifactManifestDigest") ? {
|
|
197
|
+
helperArtifactManifestDigest: raw.helperArtifactManifestDigest
|
|
198
|
+
} : {}),
|
|
199
|
+
preparedArtifactMappings: raw.preparedArtifactMappings,
|
|
200
|
+
timeoutMs: raw.timeoutMs
|
|
201
|
+
});
|
|
202
|
+
/** Parses the normal config envelope but resolves only the read-only readiness path. */
|
|
203
|
+
export const readTargetWorldReadinessConfigStdin = async (input) => {
|
|
204
|
+
const raw = exactDefaultConfigObject(await readRawConfigStdin(input));
|
|
205
|
+
const inputs = defaultConfigInputs(raw);
|
|
206
|
+
try {
|
|
207
|
+
const { resolveTargetDefaultWorldReadinessConfig } = await import("./targetDefaultConfig.js");
|
|
208
|
+
return resolveTargetDefaultWorldReadinessConfig(inputs);
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return fail();
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
/** Parses only the read-only lookup authority; it performs no filesystem work. */
|
|
215
|
+
export const readTargetLookupConfigStdin = async (input) => exactLookupConfigObject(await readRawConfigStdin(input));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const targetDefaultEnvelope: (raw: unknown, required: readonly string[], optional?: readonly string[]) => Record<string, unknown>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { types as nodeTypes } from "node:util";
|
|
2
|
+
export const targetDefaultEnvelope = (raw, required, optional = []) => {
|
|
3
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw) || nodeTypes.isProxy(raw) || Object.getPrototypeOf(raw) !== Object.prototype)
|
|
4
|
+
throw new Error("Target authority initialization failed");
|
|
5
|
+
const keys = Reflect.ownKeys(raw);
|
|
6
|
+
const allowed = [...required, ...optional];
|
|
7
|
+
if (keys.length < required.length || keys.length > allowed.length || keys.some((key) => typeof key !== "string" || !allowed.includes(key)) || required.some((key) => !keys.includes(key)))
|
|
8
|
+
throw new Error("Target authority initialization failed");
|
|
9
|
+
const descriptors = Object.getOwnPropertyDescriptors(raw);
|
|
10
|
+
if (Object.values(descriptors).some((descriptor) => !descriptor.enumerable || !("value" in descriptor)))
|
|
11
|
+
throw new Error("Target authority initialization failed");
|
|
12
|
+
return Object.fromEntries(keys.map((key) => [key, descriptors[key].value]));
|
|
13
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type SelectTargetOptions } from "../target/dockerTarget.js";
|
|
2
|
+
import type { SelectedTargetReceipt } from "../target/contracts.js";
|
|
3
|
+
import type { TargetDefaultAuthorities } from "./targetDefaultAuthorities.js";
|
|
4
|
+
import type { TargetDefaultConfig } from "./targetDefaultConfig.js";
|
|
5
|
+
import type { TargetCommandHandlers } from "./targetCommands.js";
|
|
6
|
+
type Result = Awaited<ReturnType<TargetCommandHandlers["cleanup_run"]>>;
|
|
7
|
+
interface Operations {
|
|
8
|
+
execute(raw: unknown): Promise<Result>;
|
|
9
|
+
}
|
|
10
|
+
interface EvidenceOperations {
|
|
11
|
+
recover(raw: unknown, destination: unknown): Promise<Result>;
|
|
12
|
+
execute(raw: unknown, destination: unknown): Promise<Result>;
|
|
13
|
+
}
|
|
14
|
+
type Factory = (options: Record<string, unknown>) => Operations;
|
|
15
|
+
type EvidenceFactory = (options: Record<string, unknown>) => EvidenceOperations;
|
|
16
|
+
export interface TargetDefaultHandlerFactories {
|
|
17
|
+
readonly artifact: Factory;
|
|
18
|
+
readonly attachment: Factory;
|
|
19
|
+
readonly cleanup: Factory;
|
|
20
|
+
readonly evidence: EvidenceFactory;
|
|
21
|
+
readonly resource: Factory;
|
|
22
|
+
readonly secret: Factory;
|
|
23
|
+
readonly select: (options: SelectTargetOptions) => Promise<SelectedTargetReceipt>;
|
|
24
|
+
readonly world: Factory;
|
|
25
|
+
}
|
|
26
|
+
export declare const targetDefaultHandlerFactories: TargetDefaultHandlerFactories;
|
|
27
|
+
export declare const createTargetDefaultHandlers: (config: TargetDefaultConfig, rawFactories: TargetDefaultHandlerFactories, rawAuthorities: TargetDefaultAuthorities) => Promise<TargetCommandHandlers>;
|
|
28
|
+
export {};
|