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.
Files changed (598) hide show
  1. package/README.md +50 -11
  2. package/dist/audit/auditCli.d.ts +19 -0
  3. package/dist/audit/auditCli.js +63 -0
  4. package/dist/audit/checks.d.ts +100 -0
  5. package/dist/audit/checks.js +279 -0
  6. package/dist/audit/checksShared.d.ts +74 -0
  7. package/dist/audit/checksShared.js +37 -0
  8. package/dist/audit/generateAudit.d.ts +19 -0
  9. package/dist/audit/generateAudit.js +122 -0
  10. package/dist/audit/index.d.ts +4 -0
  11. package/dist/audit/index.js +4 -0
  12. package/dist/audit/readAudit.d.ts +50 -0
  13. package/dist/audit/readAudit.js +59 -0
  14. package/dist/audit/types.d.ts +40 -0
  15. package/dist/audit/types.js +8 -0
  16. package/dist/auth/credentialEnvFile.d.ts +11 -0
  17. package/dist/auth/credentialEnvFile.js +60 -0
  18. package/dist/auth/credentialProvisioning.d.ts +15 -0
  19. package/dist/auth/credentialProvisioning.js +75 -0
  20. package/dist/auth/credentialProvisioningReceipt.d.ts +28 -0
  21. package/dist/auth/credentialProvisioningReceipt.js +70 -0
  22. package/dist/auth/credentialProvisioningRequest.d.ts +51 -0
  23. package/dist/auth/credentialProvisioningRequest.js +169 -0
  24. package/dist/auth/credentialWorldBindings.d.ts +21 -0
  25. package/dist/auth/credentialWorldBindings.js +104 -0
  26. package/dist/auth/index.d.ts +7 -0
  27. package/dist/auth/index.js +7 -0
  28. package/dist/auth/paths.d.ts +11 -0
  29. package/dist/auth/paths.js +21 -0
  30. package/dist/auth/targetSecretSourceAuthor.d.ts +18 -0
  31. package/dist/auth/targetSecretSourceAuthor.js +52 -0
  32. package/dist/auth/targetSecretSourceFsPublish.d.ts +15 -0
  33. package/dist/auth/targetSecretSourceFsPublish.js +49 -0
  34. package/dist/auth/targetSecretSourceFsPublishImmutable.d.ts +16 -0
  35. package/dist/auth/targetSecretSourceFsPublishImmutable.js +435 -0
  36. package/dist/auth/targetSecretSourceFsRead.d.ts +14 -0
  37. package/dist/auth/targetSecretSourceFsRead.js +198 -0
  38. package/dist/auth/targetSecretSourceGrant.d.ts +16 -0
  39. package/dist/auth/targetSecretSourceGrant.js +99 -0
  40. package/dist/auth/targetSecretSourceGrantRecords.d.ts +84 -0
  41. package/dist/auth/targetSecretSourceGrantRecords.js +214 -0
  42. package/dist/auth/targetSecretSourceLifecycle.d.ts +30 -0
  43. package/dist/auth/targetSecretSourceLifecycle.js +52 -0
  44. package/dist/auth/targetSecretSourceOwnerEntropy.d.ts +6 -0
  45. package/dist/auth/targetSecretSourceOwnerEntropy.js +28 -0
  46. package/dist/auth/targetSecretSourceRecordCommon.d.ts +14 -0
  47. package/dist/auth/targetSecretSourceRecordCommon.js +100 -0
  48. package/dist/auth/targetSecretSourceRecordPublish.d.ts +10 -0
  49. package/dist/auth/targetSecretSourceRecordPublish.js +104 -0
  50. package/dist/auth/targetSecretSourceResolver.d.ts +10 -0
  51. package/dist/auth/targetSecretSourceResolver.js +137 -0
  52. package/dist/auth/targetSecretSourceRevoke.d.ts +20 -0
  53. package/dist/auth/targetSecretSourceRevoke.js +92 -0
  54. package/dist/auth/targetSecretSourceRotate.d.ts +19 -0
  55. package/dist/auth/targetSecretSourceRotate.js +121 -0
  56. package/dist/auth/targetSecretSourceVersionRecords.d.ts +49 -0
  57. package/dist/auth/targetSecretSourceVersionRecords.js +166 -0
  58. package/dist/cli/artifactsCommands.d.ts +27 -0
  59. package/dist/cli/artifactsCommands.js +132 -0
  60. package/dist/cli/authCommands.d.ts +5 -0
  61. package/dist/cli/authCommands.js +221 -0
  62. package/dist/cli/compileBuildCommands.d.ts +3 -0
  63. package/dist/cli/compileBuildCommands.js +35 -0
  64. package/dist/cli/containerBundleCommand.d.ts +6 -0
  65. package/dist/cli/containerBundleCommand.js +116 -0
  66. package/dist/cli/downCommand.d.ts +25 -0
  67. package/dist/cli/downCommand.js +134 -0
  68. package/dist/cli/index.js +6 -3
  69. package/dist/cli/lifecycleCommands.d.ts +1 -1
  70. package/dist/cli/lifecycleCommands.js +11 -181
  71. package/dist/cli/lifecycleMachine.d.ts +19 -0
  72. package/dist/cli/lifecycleMachine.js +78 -0
  73. package/dist/cli/lifecyclePlan.d.ts +35 -0
  74. package/dist/cli/lifecyclePlan.js +240 -0
  75. package/dist/cli/lifecyclePlanningCommands.d.ts +3 -0
  76. package/dist/cli/lifecyclePlanningCommands.js +30 -0
  77. package/dist/cli/runCli.d.ts +9 -2
  78. package/dist/cli/runCli.js +27 -71
  79. package/dist/cli/runPublishCommands.d.ts +3 -0
  80. package/dist/cli/runPublishCommands.js +70 -0
  81. package/dist/cli/statusCommand.d.ts +3 -33
  82. package/dist/cli/statusCommand.js +19 -249
  83. package/dist/cli/statusCommandLive.d.ts +20 -0
  84. package/dist/cli/statusCommandLive.js +188 -0
  85. package/dist/cli/statusCommandOptions.d.ts +40 -0
  86. package/dist/cli/statusCommandOptions.js +42 -0
  87. package/dist/cli/targetCliRoute.d.ts +2 -0
  88. package/dist/cli/targetCliRoute.js +30 -0
  89. package/dist/cli/targetCommands.d.ts +33 -0
  90. package/dist/cli/targetCommands.js +257 -0
  91. package/dist/cli/targetComposedPreparationCommand.d.ts +6 -0
  92. package/dist/cli/targetComposedPreparationCommand.js +39 -0
  93. package/dist/cli/targetDefaultArtifactAuthority.d.ts +5 -0
  94. package/dist/cli/targetDefaultArtifactAuthority.js +28 -0
  95. package/dist/cli/targetDefaultAuthorities.d.ts +53 -0
  96. package/dist/cli/targetDefaultAuthorities.js +210 -0
  97. package/dist/cli/targetDefaultConfig.d.ts +68 -0
  98. package/dist/cli/targetDefaultConfig.js +317 -0
  99. package/dist/cli/targetDefaultConfigStdin.d.ts +13 -0
  100. package/dist/cli/targetDefaultConfigStdin.js +215 -0
  101. package/dist/cli/targetDefaultEnvelope.d.ts +1 -0
  102. package/dist/cli/targetDefaultEnvelope.js +13 -0
  103. package/dist/cli/targetDefaultHandlerFactory.d.ts +28 -0
  104. package/dist/cli/targetDefaultHandlerFactory.js +247 -0
  105. package/dist/cli/targetDefaultHandlers.d.ts +21 -0
  106. package/dist/cli/targetDefaultHandlers.js +72 -0
  107. package/dist/cli/targetDefaultJournalAuthority.d.ts +35 -0
  108. package/dist/cli/targetDefaultJournalAuthority.js +135 -0
  109. package/dist/cli/targetDefaultWorldClock.d.ts +4 -0
  110. package/dist/cli/targetDefaultWorldClock.js +14 -0
  111. package/dist/cli/targetDefaultWorldQueries.d.ts +5 -0
  112. package/dist/cli/targetDefaultWorldQueries.js +11 -0
  113. package/dist/cli/targetDefaultWorldReadiness.d.ts +4 -0
  114. package/dist/cli/targetDefaultWorldReadiness.js +17 -0
  115. package/dist/cli/targetEvidenceHelperResolution.d.ts +14 -0
  116. package/dist/cli/targetEvidenceHelperResolution.js +23 -0
  117. package/dist/cli/targetLookupCli.d.ts +3 -0
  118. package/dist/cli/targetLookupCli.js +31 -0
  119. package/dist/cli/targetLookupCommands.d.ts +12 -0
  120. package/dist/cli/targetLookupCommands.js +69 -0
  121. package/dist/cli/targetOperationDispatch.d.ts +58 -0
  122. package/dist/cli/targetOperationDispatch.js +21 -0
  123. package/dist/cli/targetReceiptOutput.d.ts +14 -0
  124. package/dist/cli/targetReceiptOutput.js +21 -0
  125. package/dist/cli/targetRequestFile.d.ts +14 -0
  126. package/dist/cli/targetRequestFile.js +63 -0
  127. package/dist/cli/targetSecretSourceInput.d.ts +28 -0
  128. package/dist/cli/targetSecretSourceInput.js +121 -0
  129. package/dist/cli/targetWorldClockCommand.d.ts +10 -0
  130. package/dist/cli/targetWorldClockCommand.js +42 -0
  131. package/dist/cli/targetWorldClockCrossProcess.test-helper.d.ts +13 -0
  132. package/dist/cli/targetWorldClockCrossProcess.test-helper.js +109 -0
  133. package/dist/cli/targetWorldReadinessCommand.d.ts +10 -0
  134. package/dist/cli/targetWorldReadinessCommand.js +43 -0
  135. package/dist/cli/upCommand.d.ts +3 -0
  136. package/dist/cli/upCommand.js +133 -0
  137. package/dist/cli/upImageCommand.d.ts +11 -0
  138. package/dist/cli/upImageCommand.js +41 -0
  139. package/dist/cli/upLifecycleInvocation.d.ts +41 -0
  140. package/dist/cli/upLifecycleInvocation.js +48 -0
  141. package/dist/cli/upLifecycleRecovery.d.ts +4 -0
  142. package/dist/cli/upLifecycleRecovery.js +53 -0
  143. package/dist/compiler/agentNodeMerge.d.ts +2 -0
  144. package/dist/compiler/agentNodeMerge.js +79 -0
  145. package/dist/compiler/agentSurfaces.js +11 -1
  146. package/dist/compiler/buildCompilePlan.js +17 -0
  147. package/dist/compiler/buildCompilePlanAgent.d.ts +11 -0
  148. package/dist/compiler/buildCompilePlanAgent.js +56 -0
  149. package/dist/compiler/buildCompilePlanTeams.d.ts +1 -0
  150. package/dist/compiler/buildCompilePlanTeams.js +4 -1
  151. package/dist/compiler/buildCompilePlanTraversal.js +75 -82
  152. package/dist/compiler/buildProject.d.ts +11 -0
  153. package/dist/compiler/buildProject.js +77 -2
  154. package/dist/compiler/compilePlanHelpers.js +2 -0
  155. package/dist/compiler/compileProject.d.ts +13 -0
  156. package/dist/compiler/compileProject.js +26 -74
  157. package/dist/compiler/compileProjectPolicy.d.ts +5 -0
  158. package/dist/compiler/compileProjectPolicy.js +21 -0
  159. package/dist/compiler/compileProjectReports.d.ts +9 -0
  160. package/dist/compiler/compileProjectReports.js +52 -0
  161. package/dist/compiler/containerArtifactSummaries.d.ts +7 -0
  162. package/dist/compiler/containerArtifactSummaries.js +138 -0
  163. package/dist/compiler/containerArtifacts.d.ts +10 -0
  164. package/dist/compiler/containerArtifacts.js +126 -125
  165. package/dist/compiler/containerArtifactsPlans.d.ts +5 -3
  166. package/dist/compiler/containerArtifactsPlans.js +31 -118
  167. package/dist/compiler/containerArtifactsRender.d.ts +3 -1
  168. package/dist/compiler/containerArtifactsRender.js +15 -12
  169. package/dist/compiler/containerArtifactsTypes.d.ts +12 -0
  170. package/dist/compiler/containerConfigEnvRender.d.ts +3 -0
  171. package/dist/compiler/containerConfigEnvRender.js +54 -0
  172. package/dist/compiler/containerEntrypointRender.d.ts +1 -0
  173. package/dist/compiler/containerEntrypointRender.js +56 -52
  174. package/dist/compiler/containerEntrypointShell.d.ts +5 -0
  175. package/dist/compiler/containerEntrypointShell.js +29 -0
  176. package/dist/compiler/containerPackageOverrides.d.ts +27 -0
  177. package/dist/compiler/containerPackageOverrides.js +63 -0
  178. package/dist/compiler/containerTargetPlanResolution.d.ts +20 -0
  179. package/dist/compiler/containerTargetPlanResolution.js +97 -0
  180. package/dist/compiler/daimonTelemetryArtifacts.d.ts +22 -0
  181. package/dist/compiler/daimonTelemetryArtifacts.js +61 -0
  182. package/dist/compiler/dockerBuildContext.d.ts +16 -0
  183. package/dist/compiler/dockerBuildContext.js +159 -0
  184. package/dist/compiler/dockerBuildSkip.d.ts +30 -0
  185. package/dist/compiler/dockerBuildSkip.js +81 -0
  186. package/dist/compiler/index.d.ts +4 -0
  187. package/dist/compiler/index.js +4 -0
  188. package/dist/compiler/memoryArtifacts.d.ts +26 -0
  189. package/dist/compiler/memoryArtifacts.js +134 -0
  190. package/dist/compiler/memoryResolution.d.ts +4 -0
  191. package/dist/compiler/memoryResolution.js +147 -0
  192. package/dist/compiler/modelEnv.d.ts +2 -0
  193. package/dist/compiler/modelEnv.js +6 -0
  194. package/dist/compiler/moltnetAllowedWakeSendersValidation.d.ts +2 -0
  195. package/dist/compiler/moltnetAllowedWakeSendersValidation.js +42 -0
  196. package/dist/compiler/moltnetArtifactPaths.d.ts +26 -0
  197. package/dist/compiler/moltnetArtifactPaths.js +49 -0
  198. package/dist/compiler/moltnetArtifactTypes.d.ts +46 -0
  199. package/dist/compiler/moltnetArtifactTypes.js +1 -0
  200. package/dist/compiler/moltnetArtifacts.d.ts +2 -40
  201. package/dist/compiler/moltnetArtifacts.js +43 -97
  202. package/dist/compiler/moltnetBinaries.d.ts +21 -4
  203. package/dist/compiler/moltnetBinaries.js +134 -27
  204. package/dist/compiler/moltnetClientConfig.js +7 -2
  205. package/dist/compiler/moltnetConfigLowering.d.ts +16 -1
  206. package/dist/compiler/moltnetConfigLowering.js +67 -5
  207. package/dist/compiler/moltnetExternalParticipantArtifact.d.ts +38 -0
  208. package/dist/compiler/moltnetExternalParticipantArtifact.js +188 -0
  209. package/dist/compiler/moltnetNodeConfig.js +7 -2
  210. package/dist/compiler/moltnetReleaseAuthority.d.ts +17 -0
  211. package/dist/compiler/moltnetReleaseAuthority.js +73 -0
  212. package/dist/compiler/moltnetReleaseDownload.d.ts +12 -0
  213. package/dist/compiler/moltnetReleaseDownload.js +85 -0
  214. package/dist/compiler/moltnetRepresentativeResolution.d.ts +1 -0
  215. package/dist/compiler/moltnetRepresentativeResolution.js +16 -2
  216. package/dist/compiler/moltnetResolution.js +72 -20
  217. package/dist/compiler/moltnetRoomMemberships.js +37 -9
  218. package/dist/compiler/moltnetServerPlans.d.ts +9 -0
  219. package/dist/compiler/moltnetServerPlans.js +132 -0
  220. package/dist/compiler/organizationIdentity.d.ts +27 -0
  221. package/dist/compiler/organizationIdentity.js +297 -0
  222. package/dist/compiler/organizationReadyEvidence.d.ts +49 -0
  223. package/dist/compiler/organizationReadyEvidence.js +261 -0
  224. package/dist/compiler/projectManifestGraph.d.ts +4 -0
  225. package/dist/compiler/projectManifestGraph.js +24 -0
  226. package/dist/compiler/runProject.d.ts +4 -0
  227. package/dist/compiler/runProject.js +30 -21
  228. package/dist/compiler/runProjectAuth.d.ts +7 -1
  229. package/dist/compiler/runProjectAuth.js +87 -9
  230. package/dist/compiler/runProjectDocker.d.ts +7 -0
  231. package/dist/compiler/runProjectDocker.js +31 -8
  232. package/dist/compiler/runProjectLifecycle.d.ts +7 -0
  233. package/dist/compiler/runProjectLifecycle.js +40 -0
  234. package/dist/compiler/syncProjectAuth.js +4 -1
  235. package/dist/compiler/teamContextActiveEnvironments.d.ts +13 -0
  236. package/dist/compiler/teamContextActiveEnvironments.js +255 -0
  237. package/dist/compiler/teamContextSupport.js +32 -40
  238. package/dist/compiler/teamContextTypes.d.ts +2 -0
  239. package/dist/compiler/types.d.ts +82 -1
  240. package/dist/compiler/upProject.d.ts +5 -0
  241. package/dist/compiler/upProject.js +256 -20
  242. package/dist/compiler/upReceipt.d.ts +36 -0
  243. package/dist/compiler/upReceipt.js +82 -0
  244. package/dist/compiler/updateProjectModels.js +42 -60
  245. package/dist/compiler/updateProjectRuntime.js +22 -35
  246. package/dist/compiler/updateProjectSurfaces.js +53 -47
  247. package/dist/compiler/worldBindings.d.ts +39 -0
  248. package/dist/compiler/worldBindings.js +247 -0
  249. package/dist/compiler/worldBindingsFile.d.ts +5 -0
  250. package/dist/compiler/worldBindingsFile.js +162 -0
  251. package/dist/deployment/artifactsExport.d.ts +49 -0
  252. package/dist/deployment/artifactsExport.js +217 -0
  253. package/dist/deployment/artifactsExportDocker.d.ts +48 -0
  254. package/dist/deployment/artifactsExportDocker.js +91 -0
  255. package/dist/deployment/artifactsExportPlan.d.ts +24 -0
  256. package/dist/deployment/artifactsExportPlan.js +135 -0
  257. package/dist/deployment/artifactsExportTypes.d.ts +50 -0
  258. package/dist/deployment/artifactsExportTypes.js +52 -0
  259. package/dist/deployment/buildImageCacheStore.d.ts +23 -0
  260. package/dist/deployment/buildImageCacheStore.js +54 -0
  261. package/dist/deployment/deploymentLifecycleCorrelation.d.ts +11 -0
  262. package/dist/deployment/deploymentLifecycleCorrelation.js +33 -0
  263. package/dist/deployment/dockerInspect.d.ts +9 -0
  264. package/dist/deployment/dockerInspect.js +24 -1
  265. package/dist/deployment/dockerLabels.d.ts +2 -0
  266. package/dist/deployment/dockerLabels.js +2 -0
  267. package/dist/deployment/dockerLogs.js +2 -10
  268. package/dist/deployment/dockerManager.d.ts +51 -0
  269. package/dist/deployment/dockerManager.js +118 -1
  270. package/dist/deployment/dockerProbeGateway.js +64 -5
  271. package/dist/deployment/dockerRecover.js +9 -1
  272. package/dist/deployment/dockerTeardown.d.ts +32 -0
  273. package/dist/deployment/dockerTeardown.js +61 -0
  274. package/dist/deployment/downDeployment.d.ts +34 -0
  275. package/dist/deployment/downDeployment.js +147 -0
  276. package/dist/deployment/downReceiptTypes.d.ts +21 -0
  277. package/dist/deployment/downReceiptTypes.js +30 -0
  278. package/dist/deployment/index.d.ts +16 -0
  279. package/dist/deployment/index.js +17 -0
  280. package/dist/deployment/lifecycleCompletion.d.ts +37 -0
  281. package/dist/deployment/lifecycleCompletion.js +236 -0
  282. package/dist/deployment/lifecycleCompletionContracts.d.ts +158 -0
  283. package/dist/deployment/lifecycleCompletionContracts.js +106 -0
  284. package/dist/deployment/lifecycleCompletionHeartbeat.d.ts +2 -0
  285. package/dist/deployment/lifecycleCompletionHeartbeat.js +50 -0
  286. package/dist/deployment/lifecycleCompletionLookup.d.ts +18 -0
  287. package/dist/deployment/lifecycleCompletionLookup.js +88 -0
  288. package/dist/deployment/lifecycleCompletionOwner.d.ts +8 -0
  289. package/dist/deployment/lifecycleCompletionOwner.js +31 -0
  290. package/dist/deployment/lifecycleCompletionParsing.d.ts +12 -0
  291. package/dist/deployment/lifecycleCompletionParsing.js +108 -0
  292. package/dist/deployment/lifecycleCompletionPaths.d.ts +9 -0
  293. package/dist/deployment/lifecycleCompletionPaths.js +16 -0
  294. package/dist/deployment/lifecycleCompletionPublication.d.ts +5 -0
  295. package/dist/deployment/lifecycleCompletionPublication.js +35 -0
  296. package/dist/deployment/lifecycleCompletionRecovery.d.ts +21 -0
  297. package/dist/deployment/lifecycleCompletionRecovery.js +56 -0
  298. package/dist/deployment/lifecycleCompletionRoot.d.ts +21 -0
  299. package/dist/deployment/lifecycleCompletionRoot.js +243 -0
  300. package/dist/deployment/lifecycleCompletionStore.d.ts +6 -0
  301. package/dist/deployment/lifecycleCompletionStore.js +151 -0
  302. package/dist/deployment/organizationHandoffAuthorityFsClient.d.ts +17 -0
  303. package/dist/deployment/organizationHandoffAuthorityFsClient.js +132 -0
  304. package/dist/deployment/organizationHandoffAuthorityFsWorker.d.ts +1 -0
  305. package/dist/deployment/organizationHandoffAuthorityFsWorker.js +285 -0
  306. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.d.ts +1 -0
  307. package/dist/deployment/organizationHandoffAuthorityFsWorkerParent.fixture.js +26 -0
  308. package/dist/deployment/organizationHandoffAuthorityStore.d.ts +41 -0
  309. package/dist/deployment/organizationHandoffAuthorityStore.js +348 -0
  310. package/dist/deployment/organizationHandoffAuthorityTypes.d.ts +76 -0
  311. package/dist/deployment/organizationHandoffAuthorityTypes.js +148 -0
  312. package/dist/deployment/organizationHandoffTypes.d.ts +29 -0
  313. package/dist/deployment/organizationHandoffTypes.js +80 -0
  314. package/dist/deployment/organizationReady.d.ts +52 -0
  315. package/dist/deployment/organizationReady.js +200 -0
  316. package/dist/deployment/privateArtifactsExport.d.ts +18 -0
  317. package/dist/deployment/privateArtifactsExport.js +80 -0
  318. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.d.ts +8 -0
  319. package/dist/deployment/providerRuntimeBoundaryScanner.test-helper.js +60 -0
  320. package/dist/deployment/record.d.ts +26 -1
  321. package/dist/deployment/record.js +49 -4
  322. package/dist/deployment/simfileFixtureBoundary.test-helper.d.ts +8 -0
  323. package/dist/deployment/simfileFixtureBoundary.test-helper.js +103 -0
  324. package/dist/deployment/target.d.ts +1 -35
  325. package/dist/deployment/target.js +1 -96
  326. package/dist/deployment/upReceiptTypes.d.ts +111 -0
  327. package/dist/deployment/upReceiptTypes.js +164 -0
  328. package/dist/dev/project.js +15 -9
  329. package/dist/distribution/buildDistributionReport.d.ts +2 -1
  330. package/dist/distribution/buildDistributionReport.js +2 -1
  331. package/dist/distribution/distributionReportSchema.d.ts +5 -0
  332. package/dist/distribution/distributionReportSchema.js +7 -2
  333. package/dist/distribution/index.d.ts +2 -2
  334. package/dist/distribution/index.js +1 -1
  335. package/dist/distribution/types.d.ts +7 -0
  336. package/dist/distribution/types.js +1 -0
  337. package/dist/filesystem/paths.js +10 -1
  338. package/dist/ledger/causalConformanceCli.d.ts +1 -0
  339. package/dist/ledger/causalConformanceCli.js +41 -0
  340. package/dist/ledger/causeNamespace.d.ts +8 -0
  341. package/dist/ledger/causeNamespace.js +24 -0
  342. package/dist/ledger/conformance.d.ts +83 -0
  343. package/dist/ledger/conformance.js +259 -0
  344. package/dist/ledger/emitters.d.ts +76 -0
  345. package/dist/ledger/emitters.js +188 -0
  346. package/dist/ledger/index.d.ts +4 -0
  347. package/dist/ledger/index.js +4 -0
  348. package/dist/ledger/principal.d.ts +96 -0
  349. package/dist/ledger/principal.js +121 -0
  350. package/dist/manifest/externalParticipantSchemas.d.ts +18 -0
  351. package/dist/manifest/externalParticipantSchemas.js +17 -0
  352. package/dist/manifest/index.d.ts +1 -0
  353. package/dist/manifest/index.js +1 -0
  354. package/dist/manifest/inlineAgentMember.d.ts +2 -0
  355. package/dist/manifest/inlineAgentMember.js +9 -0
  356. package/dist/manifest/loadManifest.js +14 -8
  357. package/dist/manifest/mcpSchemas.d.ts +17 -0
  358. package/dist/manifest/mcpSchemas.js +41 -0
  359. package/dist/manifest/memorySchemas.d.ts +245 -0
  360. package/dist/manifest/memorySchemas.js +148 -0
  361. package/dist/manifest/renderSpawnfile.js +22 -131
  362. package/dist/manifest/renderSpawnfileNetworks.js +9 -2
  363. package/dist/manifest/renderSpawnfileSurfaces.d.ts +2 -0
  364. package/dist/manifest/renderSpawnfileSurfaces.js +134 -0
  365. package/dist/manifest/schemas.d.ts +1868 -99
  366. package/dist/manifest/schemas.js +78 -32
  367. package/dist/manifest/surfaceSchemas.d.ts +17 -0
  368. package/dist/manifest/surfaceSchemas.js +24 -1
  369. package/dist/manifest/teamNetworkAccessSchemas.d.ts +1 -1
  370. package/dist/manifest/teamNetworkAuthSchemas.d.ts +48 -0
  371. package/dist/manifest/teamNetworkAuthSchemas.js +103 -0
  372. package/dist/manifest/teamNetworkSchemas.d.ts +8 -187
  373. package/dist/manifest/teamNetworkSchemas.js +3 -317
  374. package/dist/manifest/teamNetworkServerSchemas.d.ts +150 -0
  375. package/dist/manifest/teamNetworkServerSchemas.js +199 -0
  376. package/dist/ownership/siblingBuildFreshness.d.ts +20 -0
  377. package/dist/ownership/siblingBuildFreshness.js +20 -0
  378. package/dist/ownership/simfileRunOperatorInputs.d.ts +103 -0
  379. package/dist/ownership/simfileRunOperatorInputs.js +139 -0
  380. package/dist/report/types.d.ts +142 -0
  381. package/dist/runtime/common.d.ts +35 -0
  382. package/dist/runtime/common.js +55 -0
  383. package/dist/runtime/container.d.ts +28 -1
  384. package/dist/runtime/container.js +38 -5
  385. package/dist/runtime/containerPackageOverrides.d.ts +37 -0
  386. package/dist/runtime/containerPackageOverrides.js +33 -0
  387. package/dist/runtime/index.d.ts +2 -0
  388. package/dist/runtime/index.js +2 -0
  389. package/dist/runtime/mnemeMcp.d.ts +15 -0
  390. package/dist/runtime/mnemeMcp.js +109 -0
  391. package/dist/runtime/openclaw/adapter.js +15 -4
  392. package/dist/runtime/openclaw/mcp.d.ts +10 -0
  393. package/dist/runtime/openclaw/mcp.js +69 -0
  394. package/dist/runtime/openclaw/runAuth.js +2 -2
  395. package/dist/runtime/openclaw/scaffold.js +1 -1
  396. package/dist/runtime/openclaw/schedules.d.ts +38 -0
  397. package/dist/runtime/openclaw/schedules.js +74 -0
  398. package/dist/runtime/pi/adapter.d.ts +1 -1
  399. package/dist/runtime/pi/adapter.js +86 -53
  400. package/dist/runtime/pi/appActivitySource.js +114 -2
  401. package/dist/runtime/pi/appAgentConfig.d.ts +11 -0
  402. package/dist/runtime/pi/appAgentConfig.js +264 -0
  403. package/dist/runtime/pi/appCliEnginesSource.d.ts +1 -0
  404. package/dist/runtime/pi/appCliEnginesSource.js +183 -0
  405. package/dist/runtime/pi/appCliSource.d.ts +1 -0
  406. package/dist/runtime/pi/appCliSource.js +353 -0
  407. package/dist/runtime/pi/appControlSource.d.ts +1 -0
  408. package/dist/runtime/pi/appControlSource.js +390 -0
  409. package/dist/runtime/pi/appControlWakeIdentitySource.d.ts +1 -0
  410. package/dist/runtime/pi/appControlWakeIdentitySource.js +19 -0
  411. package/dist/runtime/pi/appCoreSource.d.ts +4 -1
  412. package/dist/runtime/pi/appCoreSource.js +104 -214
  413. package/dist/runtime/pi/appPreludeSource.js +140 -52
  414. package/dist/runtime/pi/appScheduleSource.d.ts +1 -0
  415. package/dist/runtime/pi/appScheduleSource.js +80 -0
  416. package/dist/runtime/pi/appScriptedEngine.d.ts +31 -0
  417. package/dist/runtime/pi/appScriptedEngine.js +42 -0
  418. package/dist/runtime/pi/appSource.d.ts +4 -1
  419. package/dist/runtime/pi/appSource.js +6 -2
  420. package/dist/runtime/pi/appTemplate.d.ts +8 -22
  421. package/dist/runtime/pi/appTemplate.js +9 -126
  422. package/dist/runtime/pi/appTemplateTypes.d.ts +64 -0
  423. package/dist/runtime/pi/appTemplateTypes.js +18 -0
  424. package/dist/runtime/pi/appWakeContextSource.d.ts +1 -0
  425. package/dist/runtime/pi/appWakeContextSource.js +398 -0
  426. package/dist/runtime/pi/containerTargets.d.ts +4 -0
  427. package/dist/runtime/pi/containerTargets.js +57 -0
  428. package/dist/runtime/pi/runAuth.js +126 -9
  429. package/dist/runtime/pi/testHelpers.d.ts +2 -0
  430. package/dist/runtime/pi/testHelpers.js +40 -0
  431. package/dist/runtime/picoclaw/adapter.js +23 -27
  432. package/dist/runtime/picoclaw/mcp.d.ts +4 -0
  433. package/dist/runtime/picoclaw/mcp.js +43 -0
  434. package/dist/runtime/picoclaw/memory.d.ts +7 -0
  435. package/dist/runtime/picoclaw/memory.js +17 -0
  436. package/dist/runtime/picoclaw/runAuth.js +1 -1
  437. package/dist/runtime/picoclaw/scaffold.js +1 -1
  438. package/dist/runtime/picoclaw/schedules.d.ts +26 -0
  439. package/dist/runtime/picoclaw/schedules.js +62 -3
  440. package/dist/runtime/scheduleUtils.d.ts +2 -0
  441. package/dist/runtime/scheduleUtils.js +15 -0
  442. package/dist/runtime/types.d.ts +25 -2
  443. package/dist/shared/errors.d.ts +1 -1
  444. package/dist/shared/errors.js +2 -2
  445. package/dist/shared/index.d.ts +1 -0
  446. package/dist/shared/index.js +1 -0
  447. package/dist/shared/redaction.d.ts +2 -0
  448. package/dist/shared/redaction.js +10 -0
  449. package/dist/status/buildStatus.d.ts +1 -0
  450. package/dist/status/buildStatus.js +2 -0
  451. package/dist/status/compileReport.d.ts +22 -0
  452. package/dist/status/compileReport.js +16 -2
  453. package/dist/status/compiledProbeCollection.d.ts +21 -0
  454. package/dist/status/compiledProbeCollection.js +27 -0
  455. package/dist/status/imageStatusReport.js +6 -0
  456. package/dist/status/index.d.ts +3 -0
  457. package/dist/status/index.js +3 -0
  458. package/dist/status/lifecycleProbes.d.ts +19 -0
  459. package/dist/status/lifecycleProbes.js +174 -0
  460. package/dist/status/moltnetProbes.d.ts +7 -8
  461. package/dist/status/moltnetProbes.js +27 -198
  462. package/dist/status/moltnetWiringProbes.d.ts +19 -0
  463. package/dist/status/moltnetWiringProbes.js +178 -0
  464. package/dist/target/cleanupRun.d.ts +41 -0
  465. package/dist/target/cleanupRun.js +139 -0
  466. package/dist/target/cleanupRunDocker.d.ts +16 -0
  467. package/dist/target/cleanupRunDocker.js +66 -0
  468. package/dist/target/cleanupRunDocker.test-helper.d.ts +67 -0
  469. package/dist/target/cleanupRunDocker.test-helper.js +238 -0
  470. package/dist/target/cleanupRunDockerPreflight.d.ts +17 -0
  471. package/dist/target/cleanupRunDockerPreflight.js +224 -0
  472. package/dist/target/composedPreparation.d.ts +205 -0
  473. package/dist/target/composedPreparation.js +223 -0
  474. package/dist/target/containerBundle.d.ts +82 -0
  475. package/dist/target/containerBundle.js +243 -0
  476. package/dist/target/containerBundleArchive.d.ts +31 -0
  477. package/dist/target/containerBundleArchive.js +140 -0
  478. package/dist/target/containerBundleAuthority.d.ts +25 -0
  479. package/dist/target/containerBundleAuthority.js +65 -0
  480. package/dist/target/containerBundleContracts.d.ts +114 -0
  481. package/dist/target/containerBundleContracts.js +173 -0
  482. package/dist/target/containerBundleFilesystemStore.d.ts +3 -0
  483. package/dist/target/containerBundleFilesystemStore.js +247 -0
  484. package/dist/target/containerBundlePolicy.d.ts +33 -0
  485. package/dist/target/containerBundlePolicy.js +64 -0
  486. package/dist/target/containerBundleStore.d.ts +127 -0
  487. package/dist/target/containerBundleStore.js +284 -0
  488. package/dist/target/contracts.d.ts +538 -0
  489. package/dist/target/contracts.js +373 -0
  490. package/dist/target/dockerArtifactIdentityTypes.d.ts +56 -0
  491. package/dist/target/dockerArtifactIdentityTypes.js +1 -0
  492. package/dist/target/dockerArtifactInspection.d.ts +40 -0
  493. package/dist/target/dockerArtifactInspection.js +125 -0
  494. package/dist/target/dockerArtifacts.d.ts +21 -0
  495. package/dist/target/dockerArtifacts.js +110 -0
  496. package/dist/target/dockerArtifactsProvider.d.ts +41 -0
  497. package/dist/target/dockerArtifactsProvider.js +449 -0
  498. package/dist/target/dockerCommandExecutor.d.ts +27 -0
  499. package/dist/target/dockerCommandExecutor.js +200 -0
  500. package/dist/target/dockerCommandExecutorCore.d.ts +34 -0
  501. package/dist/target/dockerCommandExecutorCore.js +273 -0
  502. package/dist/target/dockerContainerBundleBuilder.d.ts +8 -0
  503. package/dist/target/dockerContainerBundleBuilder.js +256 -0
  504. package/dist/target/dockerContextSnapshot.d.ts +21 -0
  505. package/dist/target/dockerContextSnapshot.js +158 -0
  506. package/dist/target/dockerEndpointFingerprint.d.ts +1 -0
  507. package/dist/target/dockerEndpointFingerprint.js +9 -0
  508. package/dist/target/dockerPreparedArtifact.d.ts +48 -0
  509. package/dist/target/dockerPreparedArtifact.js +131 -0
  510. package/dist/target/dockerProjectionJson.d.ts +1 -0
  511. package/dist/target/dockerProjectionJson.js +80 -0
  512. package/dist/target/dockerPublicArtifactSnapshot.d.ts +17 -0
  513. package/dist/target/dockerPublicArtifactSnapshot.js +99 -0
  514. package/dist/target/dockerResources.d.ts +26 -0
  515. package/dist/target/dockerResources.js +162 -0
  516. package/dist/target/dockerResourcesProvider.d.ts +44 -0
  517. package/dist/target/dockerResourcesProvider.js +207 -0
  518. package/dist/target/dockerSecrets.d.ts +39 -0
  519. package/dist/target/dockerSecrets.js +249 -0
  520. package/dist/target/dockerSecretsAuthority.d.ts +26 -0
  521. package/dist/target/dockerSecretsAuthority.js +216 -0
  522. package/dist/target/dockerSecretsLifecycle.d.ts +25 -0
  523. package/dist/target/dockerSecretsLifecycle.js +133 -0
  524. package/dist/target/dockerSecretsProvider.d.ts +68 -0
  525. package/dist/target/dockerSecretsProvider.js +329 -0
  526. package/dist/target/dockerTarget.d.ts +52 -0
  527. package/dist/target/dockerTarget.js +48 -0
  528. package/dist/target/dockerTargetBinding.d.ts +14 -0
  529. package/dist/target/dockerTargetBinding.js +96 -0
  530. package/dist/target/dockerWorldClock.d.ts +17 -0
  531. package/dist/target/dockerWorldClock.js +111 -0
  532. package/dist/target/dockerWorldReadiness.d.ts +17 -0
  533. package/dist/target/dockerWorldReadiness.js +119 -0
  534. package/dist/target/dockerWorldService.d.ts +23 -0
  535. package/dist/target/dockerWorldService.js +216 -0
  536. package/dist/target/dockerWorldServiceAuthority.d.ts +80 -0
  537. package/dist/target/dockerWorldServiceAuthority.js +182 -0
  538. package/dist/target/dockerWorldServiceLifecycle.d.ts +41 -0
  539. package/dist/target/dockerWorldServiceLifecycle.js +275 -0
  540. package/dist/target/dockerWorldServiceProvider.d.ts +60 -0
  541. package/dist/target/dockerWorldServiceProvider.js +318 -0
  542. package/dist/target/dockerWorldServiceStore.d.ts +73 -0
  543. package/dist/target/dockerWorldServiceStore.js +367 -0
  544. package/dist/target/evidenceExport.d.ts +55 -0
  545. package/dist/target/evidenceExport.js +518 -0
  546. package/dist/target/evidenceExportArchive.d.ts +10 -0
  547. package/dist/target/evidenceExportArchive.js +302 -0
  548. package/dist/target/evidenceExportContract.d.ts +27 -0
  549. package/dist/target/evidenceExportContract.js +40 -0
  550. package/dist/target/evidenceExportOperationsTestKit.d.ts +87 -0
  551. package/dist/target/evidenceExportOperationsTestKit.js +312 -0
  552. package/dist/target/evidenceExportProvider.d.ts +85 -0
  553. package/dist/target/evidenceExportProvider.js +187 -0
  554. package/dist/target/evidenceExportPublicationTypes.d.ts +16 -0
  555. package/dist/target/evidenceExportPublicationTypes.js +1 -0
  556. package/dist/target/evidenceExportStore.d.ts +70 -0
  557. package/dist/target/evidenceExportStore.js +498 -0
  558. package/dist/target/evidenceExportStorePublication.d.ts +7 -0
  559. package/dist/target/evidenceExportStorePublication.js +395 -0
  560. package/dist/target/handles.d.ts +20 -0
  561. package/dist/target/handles.js +56 -0
  562. package/dist/target/index.d.ts +12 -0
  563. package/dist/target/index.js +11 -0
  564. package/dist/target/journal.d.ts +59 -0
  565. package/dist/target/journal.js +529 -0
  566. package/dist/target/journalFilesystem.d.ts +3 -0
  567. package/dist/target/journalFilesystem.js +111 -0
  568. package/dist/target/journalRoot.d.ts +4 -0
  569. package/dist/target/journalRoot.js +6 -0
  570. package/dist/target/organizationAttachment.d.ts +23 -0
  571. package/dist/target/organizationAttachment.js +263 -0
  572. package/dist/target/organizationAttachmentAuthority.d.ts +65 -0
  573. package/dist/target/organizationAttachmentAuthority.js +161 -0
  574. package/dist/target/organizationAttachmentLifecycle.d.ts +17 -0
  575. package/dist/target/organizationAttachmentLifecycle.js +101 -0
  576. package/dist/target/organizationAttachmentProvider.d.ts +76 -0
  577. package/dist/target/organizationAttachmentProvider.js +289 -0
  578. package/dist/target/organizationAttachmentStore.d.ts +51 -0
  579. package/dist/target/organizationAttachmentStore.js +316 -0
  580. package/dist/target/publicArtifactSnapshot.d.ts +41 -0
  581. package/dist/target/publicArtifactSnapshot.js +150 -0
  582. package/dist/target/topologyActivation.d.ts +51 -0
  583. package/dist/target/topologyActivation.js +149 -0
  584. package/dist/target/topologyAttestation.d.ts +37 -0
  585. package/dist/target/topologyAttestation.js +300 -0
  586. package/dist/target/topologyAttestationErrors.d.ts +1 -0
  587. package/dist/target/topologyAttestationErrors.js +1 -0
  588. package/dist/target/worldClock.d.ts +60 -0
  589. package/dist/target/worldClock.js +129 -0
  590. package/dist/target/worldReadiness.d.ts +103 -0
  591. package/dist/target/worldReadiness.js +153 -0
  592. package/moltnet-releases.json +20 -0
  593. package/package.json +27 -11
  594. package/runtimes.yaml +8 -23
  595. package/dist/runtime/openclaw/scaffold-assets/CLAUDE.md +0 -5
  596. package/dist/runtime/picoclaw/scaffold-assets/CLAUDE.md +0 -5
  597. /package/dist/runtime/openclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
  598. /package/dist/runtime/picoclaw/scaffold-assets/{AGENTS.md → WORKSPACE_AGENTS.md} +0 -0
@@ -0,0 +1,256 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { createHash } from "node:crypto";
3
+ import { DockerArtifactProviderError } from "./dockerArtifactsProvider.js";
4
+ import { selectTarget } from "./dockerTarget.js";
5
+ const ERROR = "Target-local container bundle preparation failed";
6
+ const BLOCK = 512;
7
+ const ID = /^sha256:[a-f0-9]{64}$/u;
8
+ const BASE_LABEL = "spawnfile_target_bundle_v1_base";
9
+ const ENTRYPOINT_LABEL = "spawnfile_target_bundle_v1_entrypoint";
10
+ const fail = () => { throw new Error(ERROR); };
11
+ const canonical = (value) => {
12
+ if (Array.isArray(value))
13
+ return `[${value.map(canonical).join(",")}]`;
14
+ if (value !== null && typeof value === "object") {
15
+ const record = value;
16
+ return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonical(record[key])}`).join(",")}}`;
17
+ }
18
+ return JSON.stringify(value);
19
+ };
20
+ const exact = (left, right) => canonical(left) === canonical(right);
21
+ const strings = (value) => Array.isArray(value) && value.every((item) => typeof item === "string") ? value : null;
22
+ const labels = (value) => {
23
+ if (!value || typeof value !== "object" || Array.isArray(value))
24
+ return null;
25
+ const result = value;
26
+ return Object.values(result).every((item) => typeof item === "string") ? Object.freeze({ ...result }) : null;
27
+ };
28
+ const octal = (value, width) => Buffer.from(`${value.toString(8).padStart(width - 1, "0")}\0`, "ascii");
29
+ const checksum = (header) => {
30
+ header.fill(0x20, 148, 156);
31
+ let sum = 0;
32
+ for (const byte of header)
33
+ sum += byte;
34
+ header.set(Buffer.from(`${sum.toString(8).padStart(6, "0")}\0 `, "ascii"), 148);
35
+ };
36
+ const ustarPath = (value) => {
37
+ const bytes = Buffer.from(value, "utf8");
38
+ if (bytes.byteLength <= 100)
39
+ return { name: bytes, prefix: Buffer.alloc(0) };
40
+ const slash = value.lastIndexOf("/");
41
+ if (slash < 1)
42
+ fail();
43
+ const prefix = Buffer.from(value.slice(0, slash), "utf8");
44
+ const name = Buffer.from(value.slice(slash + 1), "utf8");
45
+ if (prefix.byteLength > 155 || name.byteLength > 100)
46
+ fail();
47
+ return { name, prefix };
48
+ };
49
+ /** A canonical, uncompressed USTAR stream. The archive parser has already admitted the bundle paths. */
50
+ const tar = (entries) => {
51
+ const output = [];
52
+ for (const entry of entries) {
53
+ const { name, prefix } = ustarPath(entry.path);
54
+ const header = Buffer.alloc(BLOCK);
55
+ header.set(name);
56
+ header.set(octal(0o644, 8), 100);
57
+ header.set(octal(0, 8), 108);
58
+ header.set(octal(0, 8), 116);
59
+ header.set(octal(entry.bytes.byteLength, 12), 124);
60
+ header.set(octal(0, 12), 136);
61
+ header[156] = 48;
62
+ header.set(Buffer.from("ustar\x00", "ascii"), 257);
63
+ header.set(Buffer.from("00", "ascii"), 263);
64
+ header.set(prefix, 345);
65
+ checksum(header);
66
+ output.push(header, Buffer.from(entry.bytes));
67
+ const pad = (BLOCK - entry.bytes.byteLength % BLOCK) % BLOCK;
68
+ if (pad)
69
+ output.push(Buffer.alloc(pad));
70
+ }
71
+ output.push(Buffer.alloc(BLOCK), Buffer.alloc(BLOCK));
72
+ return Buffer.concat(output);
73
+ };
74
+ const safeEntrypoint = (value) => typeof value === "string" && /^[A-Za-z0-9][A-Za-z0-9._/-]{0,239}$/u.test(value)
75
+ && !value.includes("//") && !value.split("/").some((part) => part === "." || part === "..");
76
+ const dockerfile = (base, entrypoint) => {
77
+ if (!/^spfb_base_[a-f0-9]{53}$/u.test(base) || !safeEntrypoint(entrypoint))
78
+ fail();
79
+ return Buffer.from(`FROM ${base}\nWORKDIR /opt/bundle\nCOPY bundle/ /opt/bundle/\nENTRYPOINT ["node","/opt/bundle/${entrypoint}"]\nCMD []\n`, "utf8");
80
+ };
81
+ /* Docker 29 errors when a nil Labels map is dereferenced in a Go template.
82
+ * Project Config as one JSON value, then validate its exact security-relevant
83
+ * fields locally; this remains a private Docker inspection. */
84
+ const projectionFormat = "[{\"Id\":{{json .Id}},\"Config\":{{json .Config}},\"RootFSType\":{{json .RootFS.Type}},\"RootFSLayers\":{{json .RootFS.Layers}},\"Os\":{{json .Os}},\"Architecture\":{{json .Architecture}}}]";
85
+ const parseProjection = (raw) => {
86
+ try {
87
+ const value = JSON.parse(raw);
88
+ if (!Array.isArray(value) || value.length !== 1 || !value[0] || typeof value[0] !== "object")
89
+ return null;
90
+ const item = value[0];
91
+ if (Object.keys(item).sort().join("\0") !== "Architecture\0Config\0Id\0Os\0RootFSLayers\0RootFSType")
92
+ return null;
93
+ const config = item.Config;
94
+ if (!config || typeof config !== "object" || Array.isArray(config))
95
+ return null;
96
+ const source = config;
97
+ const itemLabels = source.Labels === undefined || source.Labels === null ? Object.freeze({}) : labels(source.Labels);
98
+ const entrypoint = source.Entrypoint === undefined || source.Entrypoint === null ? null : strings(source.Entrypoint);
99
+ const cmd = source.Cmd === undefined || source.Cmd === null ? null : strings(source.Cmd);
100
+ const env = source.Env === undefined || source.Env === null ? Object.freeze([]) : strings(source.Env);
101
+ const rootfs = strings(item.RootFSLayers);
102
+ if (!ID.test(item.Id) || !itemLabels || entrypoint === null && source.Entrypoint !== undefined && source.Entrypoint !== null || cmd === null && source.Cmd !== undefined && source.Cmd !== null || !env || !rootfs
103
+ || rootfs.length < 1 || item.RootFSType !== "layers" || (item.Architecture !== "amd64" && item.Architecture !== "arm64") || item.Os !== "linux"
104
+ || source.User !== undefined && source.User !== null && typeof source.User !== "string"
105
+ || source.WorkingDir !== undefined && source.WorkingDir !== null && typeof source.WorkingDir !== "string"
106
+ || source.OnBuild !== undefined && source.OnBuild !== null || source.Volumes !== undefined && source.Volumes !== null
107
+ || source.ExposedPorts !== undefined && source.ExposedPorts !== null || source.Healthcheck !== undefined && source.Healthcheck !== null)
108
+ return null;
109
+ return Object.freeze({ configId: item.Id, cmd, entrypoint, env, labels: itemLabels,
110
+ platform: Object.freeze({ architecture: item.Architecture, os: "linux" }), rootfs: Object.freeze([...rootfs]), user: source.User ?? "", workdir: source.WorkingDir ?? "" });
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ };
116
+ const isSafeBase = (value, expectedId, platform) =>
117
+ /* Dockerfile deterministically replaces the inherited workdir, entrypoint,
118
+ * and command. Those base defaults therefore cannot affect the output or
119
+ * execute during this COPY-only build; rejecting them would exclude the
120
+ * reviewed node base. OnBuild remains forbidden because it can execute
121
+ * while building, and labels/user remain constrained because they persist. */
122
+ value.configId === expectedId && exact(value.labels, {}) && value.user === ""
123
+ && exact(value.platform, platform);
124
+ const expectedEntrypoint = (value) => {
125
+ const entrypoint = value[ENTRYPOINT_LABEL];
126
+ return safeEntrypoint(entrypoint) ? Object.freeze(["node", `/opt/bundle/${entrypoint}`]) : null;
127
+ };
128
+ const isOutput = (value, input) => {
129
+ const entrypoint = expectedEntrypoint(input.labels);
130
+ return (!input.configId || value.configId === input.configId) && entrypoint !== null && exact(value.labels, input.labels)
131
+ // Docker normalizes the explicit `CMD []` in the generated Dockerfile to
132
+ // a null Config.Cmd. Null is therefore the exact no-inherited-command
133
+ // representation we attest on real daemons.
134
+ && exact(value.entrypoint, entrypoint) && exact(value.cmd, null) && exact(value.env, input.base.env)
135
+ && value.user === "" && value.workdir === "/opt/bundle" && exact(value.platform, input.platform)
136
+ && value.rootfs.length > input.base.rootfs.length && input.base.rootfs.every((layer, index) => value.rootfs[index] === layer);
137
+ };
138
+ const daemonEpoch = (id) => `sha256:${createHash("sha256")
139
+ .update("spawnfile.target-local-container-bundle.daemon-epoch.v1\0", "utf8").update(id, "utf8").digest("hex")}`;
140
+ /* Bound to both output request and base config: no other operation can safely inherit this scratch tag. */
141
+ const baseTag = (configId, gcTag) => `spfb_base_${createHash("sha256")
142
+ .update("spawnfile.target-local-container-bundle.base-tag.v2\0", "utf8").update(`${configId}\0${gcTag}`, "utf8").digest("hex").slice(0, 53)}`;
143
+ /** Private Docker lowering. It refuses tag adoption; durable post-build recovery uses inspect() instead. */
144
+ export const createDockerTargetLocalBundleBuilder = (input) => {
145
+ if (!/^[a-z][a-z0-9_-]{0,63}$/u.test(input.context) || typeof input.executor !== "function")
146
+ fail();
147
+ const timeout = input.timeoutMs ?? 30_000;
148
+ const execute = async (args, stdin) => {
149
+ const result = await input.executor("docker", args, { timeout, ...(stdin ? { stdin } : {}) });
150
+ if (!result || Buffer.byteLength(result.stdout, "utf8") > 65_536 || Buffer.byteLength(result.stderr, "utf8") > 65_536)
151
+ fail();
152
+ return result.stdout;
153
+ };
154
+ const read = async (reference) => {
155
+ const value = parseProjection(await execute(["--context", input.context, "image", "inspect", "--format", projectionFormat, reference]));
156
+ return value ?? fail();
157
+ };
158
+ const readMaybe = async (reference) => {
159
+ try {
160
+ return await read(reference);
161
+ }
162
+ catch (error) {
163
+ if (error instanceof DockerArtifactProviderError && error.kind === "image_not_found")
164
+ return "missing";
165
+ throw error;
166
+ }
167
+ };
168
+ const absent = async (reference) => (await readMaybe(reference)) === "missing";
169
+ const base = async (configId, platform) => {
170
+ if (!ID.test(configId))
171
+ fail();
172
+ const result = await read(configId);
173
+ if (!isSafeBase(result, configId, platform))
174
+ fail();
175
+ return result;
176
+ };
177
+ const inspect = async (configId, gcTag, expected) => {
178
+ const baseId = expected.labels[BASE_LABEL];
179
+ if (!ID.test(baseId))
180
+ return null;
181
+ const baseImage = await base(baseId, expected.platform).catch(() => null);
182
+ if (!baseImage)
183
+ return null;
184
+ const byId = await readMaybe(configId);
185
+ const byTag = await readMaybe(gcTag);
186
+ if (byId === "missing" || byTag === "missing")
187
+ return null;
188
+ if (byId.configId !== byTag.configId || !isOutput(byId, { base: baseImage, ...(ID.test(configId) ? { configId } : {}), ...expected }))
189
+ return null;
190
+ return Object.freeze({ config_id: byId.configId, labels: Object.freeze({ ...expected.labels }), platform: expected.platform });
191
+ };
192
+ const inspectAnchor = async (gcTag, expected) => {
193
+ const byTag = await readMaybe(gcTag);
194
+ if (byTag === "missing")
195
+ return "missing";
196
+ return inspect(byTag.configId, gcTag, expected);
197
+ };
198
+ const builder = {
199
+ attestTarget: async ({ selected_target }) => {
200
+ const selected = await selectTarget({ context: input.context, execFile: async (_file, args) => ({ stderr: "", stdout: await execute(args) }), timeoutMs: timeout });
201
+ if (!exact({ fingerprint: selected.fingerprint, handle: selected.handle }, selected_target))
202
+ return null;
203
+ const raw = (await execute(["--context", input.context, "info", "--format", "{{json .ID}}"])).trim();
204
+ let id;
205
+ try {
206
+ id = JSON.parse(raw);
207
+ }
208
+ catch {
209
+ return null;
210
+ }
211
+ return typeof id === "string" && id.length > 0 ? Object.freeze({ daemon_epoch: daemonEpoch(id) }) : null;
212
+ },
213
+ build: async ({ archive, base_image_config_digest, entrypoint, gc_tag, labels: expectedLabels, platform }) => {
214
+ if (!/^spfb_[a-f0-9]{58}$/u.test(gc_tag) || !safeEntrypoint(entrypoint) || expectedLabels[ENTRYPOINT_LABEL] !== entrypoint
215
+ || expectedLabels[BASE_LABEL] !== base_image_config_digest)
216
+ fail();
217
+ const baseImage = await base(base_image_config_digest, platform);
218
+ /* Any output tag, even a seemingly matching one, belongs to recovery rather than a new build. */
219
+ if (!await absent(gc_tag))
220
+ fail();
221
+ const scratch = baseTag(base_image_config_digest, gc_tag);
222
+ if (!await absent(scratch))
223
+ fail();
224
+ let ownScratch = false;
225
+ try {
226
+ const tagResult = await execute(["--context", input.context, "image", "tag", base_image_config_digest, scratch]);
227
+ if (tagResult.trim() !== "")
228
+ fail();
229
+ ownScratch = true;
230
+ const pinned = await read(scratch);
231
+ if (!isSafeBase(pinned, base_image_config_digest, platform))
232
+ fail();
233
+ const context = tar([{ path: "Dockerfile", bytes: dockerfile(scratch, entrypoint) }, ...archive.entries.map((entry) => ({ path: `bundle/${entry.path}`, bytes: entry.bytes }))]);
234
+ const labelArgs = Object.entries(expectedLabels).flatMap(([key, value]) => ["--label", `${key}=${value}`]);
235
+ await execute(["--context", input.context, "build", "--pull=false", "--network=none", "--platform", `${platform.os}/${platform.architecture}`, "--tag", gc_tag, ...labelArgs, "-"], context);
236
+ const result = await inspect(gc_tag, gc_tag, { labels: expectedLabels, platform });
237
+ if (!result)
238
+ fail();
239
+ return result;
240
+ }
241
+ finally {
242
+ if (ownScratch) {
243
+ const pinned = await read(scratch);
244
+ if (!isSafeBase(pinned, base_image_config_digest, platform))
245
+ fail();
246
+ const removed = await execute(["--context", input.context, "image", "rm", scratch]);
247
+ if (removed.trim().length > 4_096)
248
+ fail();
249
+ }
250
+ }
251
+ },
252
+ inspect: async ({ config_id, gc_tag, labels: expectedLabels, platform }) => inspect(config_id, gc_tag, { labels: expectedLabels, platform }),
253
+ inspectAnchor: async ({ gc_tag, labels: expectedLabels, platform }) => inspectAnchor(gc_tag, { labels: expectedLabels, platform })
254
+ };
255
+ return Object.freeze(builder);
256
+ };
@@ -0,0 +1,21 @@
1
+ import { rm } from "node:fs/promises";
2
+ import type { SelectedTargetReceipt } from "./contracts.js";
3
+ import type { DockerResourceExecutor } from "./dockerResourcesProvider.js";
4
+ type SnapshotRemove = typeof rm;
5
+ /** Test-only seam for deterministic cleanup failure coverage. */
6
+ export declare const setDockerContextSnapshotRemoveForTests: (replacement: SnapshotRemove) => (() => void);
7
+ export interface DockerContextSnapshot {
8
+ readonly args: readonly ["--config", string, "--context", string];
9
+ dispose(): Promise<void>;
10
+ }
11
+ /**
12
+ * Privately recreates one named Docker context without placing its endpoint or
13
+ * TLS options in argv. The synthetic config is short-lived and never exported.
14
+ */
15
+ export declare const createDockerContextSnapshot: (input: {
16
+ readonly context: string;
17
+ readonly executor: DockerResourceExecutor;
18
+ readonly selectedTarget: Pick<SelectedTargetReceipt, "fingerprint" | "handle">;
19
+ readonly timeoutMs: number;
20
+ }) => Promise<DockerContextSnapshot>;
21
+ export {};
@@ -0,0 +1,158 @@
1
+ import { constants } from "node:fs";
2
+ import { lstat, mkdtemp, mkdir, open, rm, writeFile } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { createHash, randomUUID } from "node:crypto";
6
+ import { SpawnfileError } from "../shared/index.js";
7
+ import { selectedTargetForContextEndpoint } from "./dockerTargetBinding.js";
8
+ const ERROR = "Docker context snapshot failed";
9
+ const MAX_INSPECTION_BYTES = 32_768;
10
+ const CONTEXT_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/u;
11
+ const TLS_FILE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/u;
12
+ let snapshotRemove = rm;
13
+ /** Test-only seam for deterministic cleanup failure coverage. */
14
+ export const setDockerContextSnapshotRemoveForTests = (replacement) => {
15
+ const previous = snapshotRemove;
16
+ snapshotRemove = replacement;
17
+ return () => { snapshotRemove = previous; };
18
+ };
19
+ const fail = () => { throw new SpawnfileError("runtime_error", ERROR); };
20
+ const exactRecord = (raw) => raw !== null && typeof raw === "object" && !Array.isArray(raw)
21
+ && Object.getPrototypeOf(raw) === Object.prototype;
22
+ const exactKeys = (value, expected) => {
23
+ const actual = Object.keys(value).sort();
24
+ const sorted = [...expected].sort();
25
+ return actual.length === sorted.length && actual.every((key, index) => key === sorted[index]);
26
+ };
27
+ const bounded = (value) => typeof value === "string"
28
+ && Buffer.byteLength(value, "utf8") <= MAX_INSPECTION_BYTES;
29
+ const parseContextInspection = (stdout, context) => {
30
+ if (!bounded(stdout))
31
+ return fail();
32
+ let raw;
33
+ try {
34
+ raw = JSON.parse(stdout);
35
+ }
36
+ catch {
37
+ return fail();
38
+ }
39
+ if (!Array.isArray(raw) || raw.length !== 1 || !exactRecord(raw[0]))
40
+ return fail();
41
+ const value = raw[0];
42
+ if (!exactKeys(value, ["Endpoints", "Metadata", "Name", "Storage", "TLSMaterial"])
43
+ || value.Name !== context || !exactRecord(value.Endpoints) || !exactRecord(value.Metadata)
44
+ || !exactRecord(value.Storage) || !exactRecord(value.TLSMaterial)
45
+ || !exactKeys(value.Endpoints, ["docker"])
46
+ || !(exactKeys(value.TLSMaterial, []) || exactKeys(value.TLSMaterial, ["docker"]))
47
+ || !exactKeys(value.Storage, ["MetadataPath", "TLSPath"]))
48
+ return fail();
49
+ const endpoint = value.Endpoints.docker;
50
+ const tlsFiles = value.TLSMaterial.docker ?? [];
51
+ if (!exactRecord(endpoint) || !exactKeys(endpoint, ["Host", "SkipTLSVerify"])
52
+ || typeof endpoint.Host !== "string" || typeof endpoint.SkipTLSVerify !== "boolean"
53
+ || !Array.isArray(tlsFiles) || tlsFiles.length > 8
54
+ || new Set(tlsFiles).size !== tlsFiles.length
55
+ || tlsFiles.some((item) => typeof item !== "string" || !TLS_FILE_PATTERN.test(item)))
56
+ return fail();
57
+ const exactEndpoint = Object.freeze({ Host: endpoint.Host, SkipTLSVerify: endpoint.SkipTLSVerify });
58
+ const tlsPath = value.Storage.TLSPath;
59
+ if (tlsFiles.length === 0)
60
+ return Object.freeze({ endpoint: exactEndpoint, tlsFiles: Object.freeze([]), tlsPath: null });
61
+ if (typeof tlsPath !== "string" || tlsPath.length === 0 || Buffer.byteLength(tlsPath, "utf8") > 4_096)
62
+ return fail();
63
+ return Object.freeze({ endpoint: exactEndpoint, tlsFiles: Object.freeze([...tlsFiles]), tlsPath });
64
+ };
65
+ const copyStableTlsFile = async (source, destination) => {
66
+ let handle;
67
+ try {
68
+ handle = await open(source, constants.O_RDONLY | constants.O_NOFOLLOW);
69
+ const initial = await handle.stat();
70
+ if (!initial.isFile() || initial.size > 65_536)
71
+ return fail();
72
+ const bytes = await handle.readFile();
73
+ const current = await handle.stat();
74
+ if (!current.isFile() || current.size !== initial.size || bytes.length !== initial.size)
75
+ return fail();
76
+ await writeFile(destination, bytes, { encoding: undefined, flag: "wx", mode: 0o600 });
77
+ }
78
+ catch {
79
+ return fail();
80
+ }
81
+ finally {
82
+ await handle?.close().catch(() => undefined);
83
+ }
84
+ };
85
+ const requirePrivateDirectory = async (directory) => {
86
+ try {
87
+ const stats = await lstat(directory);
88
+ if (!stats.isDirectory() || stats.isSymbolicLink())
89
+ return fail();
90
+ }
91
+ catch {
92
+ return fail();
93
+ }
94
+ };
95
+ const removeSnapshotRoot = async (root) => {
96
+ for (let attempt = 0; attempt < 3; attempt += 1) {
97
+ try {
98
+ await snapshotRemove(root, { force: true, recursive: true });
99
+ return;
100
+ }
101
+ catch {
102
+ if (attempt === 2)
103
+ return fail();
104
+ await new Promise((resolve) => setImmediate(resolve));
105
+ }
106
+ }
107
+ };
108
+ /**
109
+ * Privately recreates one named Docker context without placing its endpoint or
110
+ * TLS options in argv. The synthetic config is short-lived and never exported.
111
+ */
112
+ export const createDockerContextSnapshot = async (input) => {
113
+ if (!CONTEXT_PATTERN.test(input.context) || !Number.isSafeInteger(input.timeoutMs)
114
+ || input.timeoutMs < 1 || input.timeoutMs > 120_000)
115
+ return fail();
116
+ let root;
117
+ try {
118
+ const result = await input.executor("docker", ["context", "inspect", input.context], { timeout: input.timeoutMs });
119
+ if (!result || result.stderr !== "" || !bounded(result.stdout))
120
+ return fail();
121
+ const source = parseContextInspection(result.stdout, input.context);
122
+ const selected = selectedTargetForContextEndpoint(input.context, source.endpoint.Host);
123
+ if (selected.fingerprint !== input.selectedTarget.fingerprint || selected.handle !== input.selectedTarget.handle)
124
+ return fail();
125
+ root = await mkdtemp(path.join(os.tmpdir(), "spawnfile-docker-context-"));
126
+ const synthetic = `spfn_${randomUUID().replaceAll("-", "")}`;
127
+ const contextId = createHash("sha256").update(synthetic, "utf8").digest("hex");
128
+ const metaDirectory = path.join(root, "contexts", "meta", contextId);
129
+ const tlsDirectory = path.join(root, "contexts", "tls", contextId, "docker");
130
+ await mkdir(metaDirectory, { recursive: true, mode: 0o700 });
131
+ await mkdir(tlsDirectory, { recursive: true, mode: 0o700 });
132
+ const meta = JSON.stringify({ Endpoints: { docker: source.endpoint }, Metadata: {}, Name: synthetic });
133
+ await writeFile(path.join(metaDirectory, "meta.json"), meta, { encoding: "utf8", flag: "wx", mode: 0o600 });
134
+ if (source.tlsPath) {
135
+ await requirePrivateDirectory(source.tlsPath);
136
+ await requirePrivateDirectory(path.join(source.tlsPath, "docker"));
137
+ for (const file of source.tlsFiles) {
138
+ await copyStableTlsFile(path.join(source.tlsPath, "docker", file), path.join(tlsDirectory, file));
139
+ }
140
+ }
141
+ const args = Object.freeze(["--config", root, "--context", synthetic]);
142
+ let disposed = false;
143
+ return Object.freeze({
144
+ args,
145
+ dispose: async () => {
146
+ if (disposed)
147
+ return;
148
+ await removeSnapshotRoot(root);
149
+ disposed = true;
150
+ }
151
+ });
152
+ }
153
+ catch {
154
+ if (root)
155
+ await removeSnapshotRoot(root);
156
+ return fail();
157
+ }
158
+ };
@@ -0,0 +1 @@
1
+ export declare const createEndpointFingerprint: (endpoint: string) => string;
@@ -0,0 +1,9 @@
1
+ import { createHash } from "node:crypto";
2
+ import { SpawnfileError } from "../shared/index.js";
3
+ export const createEndpointFingerprint = (endpoint) => {
4
+ const normalized = endpoint.trim();
5
+ if (normalized.length === 0) {
6
+ throw new SpawnfileError("validation_error", "Deployment target endpoint must not be empty");
7
+ }
8
+ return `sha256:${createHash("sha256").update(normalized).digest("hex").slice(0, 32)}`;
9
+ };
@@ -0,0 +1,48 @@
1
+ import { type TargetResourceReceipt, type TargetResourceRequest } from "./contracts.js";
2
+ import { type TargetLocalBundlePrivateMapping, type TargetLocalBundleStore } from "./containerBundleStore.js";
3
+ import { type DockerTargetLocalBundleBuilder } from "./containerBundle.js";
4
+ import { type DockerConfigArtifactIdentityBinding, type DockerArtifactIdentityStore } from "./dockerArtifactsProvider.js";
5
+ import { type TargetJournalStore } from "./journal.js";
6
+ export declare const DOCKER_PREPARED_ARTIFACT_ERROR = "Docker artifact resolution failed";
7
+ type ArtifactRequest = Extract<TargetResourceRequest, {
8
+ operation: "resolve_world_artifact";
9
+ }>;
10
+ type ArtifactResult = {
11
+ readonly receipt: TargetResourceReceipt;
12
+ readonly receiptBytes: string;
13
+ };
14
+ export interface PreparedArtifactAuthorityMapping {
15
+ readonly archive_digest: string;
16
+ readonly artifact_manifest_digest: string;
17
+ readonly base_image_config_digest: string;
18
+ readonly build_policy_digest: string;
19
+ readonly bundle_digest: string;
20
+ readonly entrypoint: string;
21
+ readonly launcher_digest: string;
22
+ readonly network_alias: string;
23
+ readonly platform: {
24
+ readonly architecture: "amd64" | "arm64";
25
+ readonly os: "linux";
26
+ };
27
+ readonly platform_digest: string;
28
+ }
29
+ export interface DockerPreparedArtifactOperations {
30
+ execute(raw: unknown): Promise<ArtifactResult>;
31
+ }
32
+ /**
33
+ * Reconstructs the prepared-image authority without ever substituting the
34
+ * later resolution claim for the preparation claim that minted its GC anchor.
35
+ */
36
+ export declare const attestPreparedArtifactIdentity: (builder: DockerTargetLocalBundleBuilder, binding: DockerConfigArtifactIdentityBinding, prepared: TargetLocalBundlePrivateMapping, selectedTarget: ArtifactRequest["selected_target"]) => Promise<void>;
37
+ /**
38
+ * Private target-default lowering. It admits an already prepared local image
39
+ * only through the bundle store's exact selected-target/correlation lookup.
40
+ */
41
+ export declare const createDockerPreparedArtifactOperations: (input: {
42
+ readonly identityStore: DockerArtifactIdentityStore;
43
+ readonly builder: DockerTargetLocalBundleBuilder;
44
+ readonly journal: TargetJournalStore;
45
+ readonly mapping: PreparedArtifactAuthorityMapping;
46
+ readonly store: TargetLocalBundleStore;
47
+ }) => DockerPreparedArtifactOperations;
48
+ export {};
@@ -0,0 +1,131 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ import { parseTargetResourceRequest } from "./contracts.js";
3
+ import { attestTargetLocalBundleMapping } from "./containerBundle.js";
4
+ import { createDockerConfigArtifactSpec } from "./dockerArtifactsProvider.js";
5
+ import { createTargetReceiptDigest } from "./handles.js";
6
+ export const DOCKER_PREPARED_ARTIFACT_ERROR = "Docker artifact resolution failed";
7
+ const fail = () => { throw new SpawnfileError("runtime_error", DOCKER_PREPARED_ARTIFACT_ERROR); };
8
+ /**
9
+ * Reconstructs the prepared-image authority without ever substituting the
10
+ * later resolution claim for the preparation claim that minted its GC anchor.
11
+ */
12
+ export const attestPreparedArtifactIdentity = async (builder, binding, prepared, selectedTarget) => {
13
+ const expected = {
14
+ archive_digest: binding.archiveDigest,
15
+ artifact_digest: binding.artifactManifestDigest,
16
+ base_image_config_digest: binding.baseImageConfigDigest,
17
+ build_policy_digest: binding.buildPolicyDigest,
18
+ bundle_digest: binding.bundleDigest,
19
+ config_id: binding.configId,
20
+ daemon_epoch: binding.daemonEpoch,
21
+ entrypoint: binding.entrypoint,
22
+ gc_tag: binding.gcTag,
23
+ identity_kind: binding.identityKind,
24
+ launcher_digest: binding.launcherDigest,
25
+ network_alias: binding.networkAlias,
26
+ operation_handle: binding.preparedOperationHandle,
27
+ platform: binding.platform,
28
+ platform_digest: binding.platformDigest,
29
+ request_digest: binding.preparedRequestDigest,
30
+ selected_target: selectedTarget
31
+ };
32
+ if (JSON.stringify(prepared) !== JSON.stringify(expected))
33
+ return fail();
34
+ await attestTargetLocalBundleMapping(builder, prepared);
35
+ };
36
+ const request = (raw) => {
37
+ const parsed = parseTargetResourceRequest(raw);
38
+ if (parsed.operation !== "resolve_world_artifact")
39
+ return fail();
40
+ return parsed;
41
+ };
42
+ const receipt = async (input) => {
43
+ const raw = {
44
+ cleanup_state: "not_requested", descriptor_digest: input.request.descriptor_digest,
45
+ export_state: "not_requested", labels: Object.entries(input.labels).map(([key, value]) => ({ key, value })),
46
+ operation: input.request.operation, operation_handle: input.claim.operationHandle,
47
+ receipt_digest: `sha256:${"0".repeat(64)}`, request_digest: input.claim.requestDigest,
48
+ result_handle: input.resultHandle, resulting_revision: (await input.journal.read()).revision + 1,
49
+ run_id: input.request.run_id, selected_target: input.request.selected_target,
50
+ version: "spawnfile.target-resource.receipt.v1"
51
+ };
52
+ return { ...raw, receipt_digest: createTargetReceiptDigest(raw) };
53
+ };
54
+ /**
55
+ * Private target-default lowering. It admits an already prepared local image
56
+ * only through the bundle store's exact selected-target/correlation lookup.
57
+ */
58
+ export const createDockerPreparedArtifactOperations = (input) => {
59
+ if (!input?.identityStore || !input.builder || !input.journal || !input.mapping || !input.store)
60
+ fail();
61
+ const execute = async (raw) => {
62
+ try {
63
+ const value = request(raw);
64
+ if (value.artifact_manifest_digest !== input.mapping.artifact_manifest_digest)
65
+ return fail();
66
+ const reservation = await input.journal.reserve(value);
67
+ if (reservation.kind === "replay")
68
+ return { receipt: reservation.receipt, receiptBytes: reservation.receiptBytes };
69
+ const prepared = await input.store.resolvePrepared({
70
+ artifact_digest: value.artifact_manifest_digest,
71
+ build_policy_digest: input.mapping.build_policy_digest,
72
+ bundle_digest: input.mapping.bundle_digest,
73
+ selected_target: value.selected_target
74
+ });
75
+ if (!prepared || prepared.request.selected_target.handle !== value.selected_target.handle
76
+ || prepared.request.selected_target.fingerprint !== value.selected_target.fingerprint
77
+ || prepared.request.artifact_digest !== value.artifact_manifest_digest
78
+ || prepared.mapping.archive_digest !== input.mapping.archive_digest
79
+ || prepared.mapping.base_image_config_digest !== input.mapping.base_image_config_digest
80
+ || prepared.request.bundle_digest !== input.mapping.bundle_digest
81
+ || prepared.request.build_policy_digest !== input.mapping.build_policy_digest
82
+ || prepared.mapping.entrypoint !== input.mapping.entrypoint
83
+ || prepared.request.launcher_digest !== input.mapping.launcher_digest
84
+ || prepared.request.network_alias !== input.mapping.network_alias
85
+ || prepared.request.platform_digest !== input.mapping.platform_digest
86
+ || JSON.stringify(prepared.request.platform) !== JSON.stringify(input.mapping.platform)
87
+ || prepared.mapping.artifact_digest !== value.artifact_manifest_digest
88
+ || prepared.mapping.build_policy_digest !== input.mapping.build_policy_digest
89
+ || prepared.mapping.bundle_digest !== input.mapping.bundle_digest
90
+ || prepared.mapping.launcher_digest !== input.mapping.launcher_digest
91
+ || prepared.mapping.network_alias !== input.mapping.network_alias
92
+ || prepared.mapping.platform_digest !== input.mapping.platform_digest
93
+ || JSON.stringify(prepared.mapping.platform) !== JSON.stringify(input.mapping.platform))
94
+ return fail();
95
+ await attestTargetLocalBundleMapping(input.builder, prepared.mapping);
96
+ const spec = createDockerConfigArtifactSpec({
97
+ archiveDigest: input.mapping.archive_digest,
98
+ artifactManifestDigest: value.artifact_manifest_digest,
99
+ baseImageConfigDigest: input.mapping.base_image_config_digest,
100
+ buildPolicyDigest: input.mapping.build_policy_digest,
101
+ bundleDigest: input.mapping.bundle_digest, configId: prepared.mapping.config_id,
102
+ daemonEpoch: prepared.mapping.daemon_epoch, entrypoint: input.mapping.entrypoint,
103
+ launcherDigest: input.mapping.launcher_digest, networkAlias: input.mapping.network_alias,
104
+ operationHandle: reservation.claim.operationHandle, requestDigest: reservation.claim.requestDigest,
105
+ selectedTargetHandle: value.selected_target.handle, platform: input.mapping.platform,
106
+ platformDigest: input.mapping.platform_digest
107
+ });
108
+ await input.identityStore.bind({
109
+ archiveDigest: input.mapping.archive_digest,
110
+ artifactManifestDigest: value.artifact_manifest_digest,
111
+ baseImageConfigDigest: input.mapping.base_image_config_digest,
112
+ buildPolicyDigest: input.mapping.build_policy_digest,
113
+ bundleDigest: input.mapping.bundle_digest, configId: prepared.mapping.config_id,
114
+ daemonEpoch: prepared.mapping.daemon_epoch, entrypoint: input.mapping.entrypoint, gcTag: prepared.mapping.gc_tag,
115
+ identityKind: "docker_image_config_digest", operationHandle: reservation.claim.operationHandle,
116
+ launcherDigest: input.mapping.launcher_digest, networkAlias: input.mapping.network_alias,
117
+ preparedOperationHandle: prepared.mapping.operation_handle,
118
+ preparedRequestDigest: prepared.mapping.request_digest,
119
+ requestDigest: reservation.claim.requestDigest, resultHandle: spec.resultHandle,
120
+ selectedTargetHandle: value.selected_target.handle, platform: input.mapping.platform,
121
+ platformDigest: input.mapping.platform_digest
122
+ });
123
+ return input.journal.complete(reservation.claim, await receipt({ claim: reservation.claim,
124
+ journal: input.journal, labels: spec.labels, request: value, resultHandle: spec.resultHandle }));
125
+ }
126
+ catch {
127
+ return fail();
128
+ }
129
+ };
130
+ return Object.freeze({ execute });
131
+ };
@@ -0,0 +1 @@
1
+ export declare const parseDuplicateFreeDockerProjection: (source: string) => unknown | null;