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,133 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ import { parseOpaqueTargetHandle, parseRunId } from "./contracts.js";
3
+ import { DOCKER_SECRET_ERROR, DockerSecretProviderError, createExistingDockerSecretSpec, executeDockerSecretCommand, isExpectedDockerSecretVolume, parseExpectedDockerSecretWriter } from "./dockerSecretsProvider.js";
4
+ const CONTEXT_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/u;
5
+ const fail = () => { throw new SpawnfileError("runtime_error", DOCKER_SECRET_ERROR); };
6
+ const exactOrdinary = (raw, keys) => {
7
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)
8
+ || Object.getPrototypeOf(raw) !== Object.prototype)
9
+ return false;
10
+ const actual = Reflect.ownKeys(raw);
11
+ if (actual.length !== keys.length || actual.some((key) => typeof key !== "string" || !keys.includes(key)))
12
+ return false;
13
+ return actual.every((key) => {
14
+ const descriptor = Object.getOwnPropertyDescriptor(raw, key);
15
+ return descriptor !== undefined && "value" in descriptor && descriptor.enumerable;
16
+ });
17
+ };
18
+ const parseAuthority = (raw) => {
19
+ if (!exactOrdinary(raw, ["bindingsHandle", "runId", "selectedTargetHandle"]))
20
+ return fail();
21
+ return {
22
+ bindingsHandle: parseOpaqueTargetHandle(raw.bindingsHandle),
23
+ runId: parseRunId(raw.runId),
24
+ selectedTargetHandle: parseOpaqueTargetHandle(raw.selectedTargetHandle)
25
+ };
26
+ };
27
+ export const validateDockerSecretLifecycleOptions = (raw) => {
28
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)
29
+ || typeof raw.context !== "string" || !CONTEXT_PATTERN.test(raw.context)
30
+ || typeof raw.executor !== "function" || !Number.isSafeInteger(raw.timeoutMs)
31
+ || raw.timeoutMs < 1 || raw.timeoutMs > 120_000
32
+ || raw.signal !== undefined && !(raw.signal instanceof AbortSignal))
33
+ return fail();
34
+ return raw;
35
+ };
36
+ export const executeSecretLifecycleCommand = (args, options, input) => executeDockerSecretCommand({
37
+ args,
38
+ executor: options.executor,
39
+ requireSilent: input?.requireSilent,
40
+ signal: options.signal,
41
+ stdin: input?.stdin,
42
+ timeoutMs: options.timeoutMs
43
+ });
44
+ export const inspectExactSecretVolume = async (spec, options) => {
45
+ try {
46
+ const result = await executeSecretLifecycleCommand([
47
+ "--context", options.context, "volume", "inspect", "--format",
48
+ spec.volumeInspectionFormat, spec.volumeName
49
+ ], options);
50
+ if (result.stderr !== "" || !isExpectedDockerSecretVolume(result.stdout, spec))
51
+ return fail();
52
+ return "present";
53
+ }
54
+ catch (error) {
55
+ if (error instanceof DockerSecretProviderError && error.kind === "not_found")
56
+ return "absent";
57
+ throw error;
58
+ }
59
+ };
60
+ export const inspectExactSecretWriter = async (spec, options) => {
61
+ try {
62
+ const result = await executeSecretLifecycleCommand([
63
+ "--context", options.context, "container", "inspect", "--format",
64
+ spec.writerInspectionFormat, spec.writerName
65
+ ], options);
66
+ const state = parseExpectedDockerSecretWriter(result.stdout, spec);
67
+ if (result.stderr !== "" || state === null)
68
+ return fail();
69
+ return state;
70
+ }
71
+ catch (error) {
72
+ if (error instanceof DockerSecretProviderError && error.kind === "not_found")
73
+ return "absent";
74
+ throw error;
75
+ }
76
+ };
77
+ const acknowledged = (result, name) => {
78
+ if (result.stderr !== "" || result.stdout !== `${name}\n`)
79
+ fail();
80
+ };
81
+ const mutateAndReconcile = async (args, name, proveAbsent, options) => {
82
+ let result;
83
+ let error;
84
+ try {
85
+ result = await executeSecretLifecycleCommand(args, options);
86
+ }
87
+ catch (caught) {
88
+ error = caught;
89
+ }
90
+ if (result)
91
+ acknowledged(result, name);
92
+ if (!await proveAbsent()) {
93
+ if (error)
94
+ throw error;
95
+ fail();
96
+ }
97
+ };
98
+ /** Journal-free exact cleanup for one already-authorized secret binding. */
99
+ export const cleanupExactDockerSecretBindings = async (rawAuthority, rawOptions) => {
100
+ try {
101
+ // Parse every caller-controlled value before the first provider call.
102
+ const authority = parseAuthority(rawAuthority);
103
+ const options = validateDockerSecretLifecycleOptions(rawOptions);
104
+ const spec = createExistingDockerSecretSpec(authority);
105
+ const writer = await inspectExactSecretWriter(spec, options);
106
+ const initialVolume = await inspectExactSecretVolume(spec, options);
107
+ if (writer !== "absent") {
108
+ if (writer.status === "running" || writer.status === "paused" || writer.status === "restarting") {
109
+ await mutateAndReconcile([
110
+ "--context", options.context, "container", "stop",
111
+ "--timeout", "10", spec.writerName
112
+ ], spec.writerName, async () => {
113
+ const state = await inspectExactSecretWriter(spec, options);
114
+ return state === "absent" || !["running", "paused", "restarting"].includes(state.status);
115
+ }, options);
116
+ }
117
+ else if (writer.status === "removing")
118
+ return fail();
119
+ if (await inspectExactSecretWriter(spec, options) !== "absent") {
120
+ await mutateAndReconcile(["--context", options.context, "container", "rm", spec.writerName], spec.writerName, async () => await inspectExactSecretWriter(spec, options) === "absent", options);
121
+ }
122
+ }
123
+ const volumeBeforeRemoval = writer === "absent"
124
+ ? initialVolume
125
+ : await inspectExactSecretVolume(spec, options);
126
+ if (volumeBeforeRemoval === "absent")
127
+ return;
128
+ await mutateAndReconcile(["--context", options.context, "volume", "rm", spec.volumeName], spec.volumeName, async () => await inspectExactSecretVolume(spec, options) === "absent", options);
129
+ }
130
+ catch {
131
+ return fail();
132
+ }
133
+ };
@@ -0,0 +1,68 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { type OpaqueTargetHandle } from "./contracts.js";
3
+ export declare const DOCKER_SECRET_ERROR = "Docker secret materialization failed";
4
+ export declare const DOCKER_SECRET_WRITER_IMAGE = "docker.io/library/busybox@sha256:222ad6d973c0d198014546a65cd02c5fdedcc172123c5b4c2bf0af636550bd94";
5
+ export declare const MAX_SECRET_VALUE_BYTES = 1048576;
6
+ export declare const MAX_SECRET_ARCHIVE_BYTES = 4194304;
7
+ export type DockerSecretFailureKind = "collision" | "not_found";
8
+ export interface DockerSecretExecutorOptions {
9
+ readonly signal?: AbortSignal;
10
+ readonly stdin?: Uint8Array;
11
+ readonly timeout: number;
12
+ }
13
+ export interface DockerSecretExecutor {
14
+ (file: string, args: string[], options: DockerSecretExecutorOptions): Promise<{
15
+ stderr: string;
16
+ stdout: string;
17
+ }>;
18
+ }
19
+ /** A fixed, non-reflective classification supplied by the trusted Docker bridge. */
20
+ export declare class DockerSecretProviderError extends Error {
21
+ readonly kind: DockerSecretFailureKind;
22
+ constructor(kind: DockerSecretFailureKind);
23
+ }
24
+ export interface DockerSecretSpec {
25
+ readonly labels: Readonly<Record<string, string>>;
26
+ readonly resultHandle: OpaqueTargetHandle;
27
+ readonly volumeInspectionFormat: string;
28
+ readonly volumeName: string;
29
+ readonly writerInspectionFormat: string;
30
+ readonly writerEnv: readonly string[];
31
+ readonly writerLabels: Readonly<Record<string, string>>;
32
+ readonly writerName: string;
33
+ readonly writerRunArgs: readonly string[];
34
+ }
35
+ export interface ResolvedSecretBinding {
36
+ readonly name: string;
37
+ readonly scope: string;
38
+ readonly value: Uint8Array;
39
+ }
40
+ export interface DockerSecretWriterState {
41
+ readonly exitCode: number;
42
+ readonly status: "created" | "dead" | "exited" | "paused" | "removing" | "restarting" | "running";
43
+ }
44
+ export declare const createPreparedDockerSecretSpec: (input: {
45
+ operationHandle: OpaqueTargetHandle;
46
+ requestDigest: string;
47
+ runId: string;
48
+ selectedTargetHandle: OpaqueTargetHandle;
49
+ }) => DockerSecretSpec;
50
+ export declare const createExistingDockerSecretSpec: (input: {
51
+ bindingsHandle: OpaqueTargetHandle;
52
+ runId: string;
53
+ selectedTargetHandle: OpaqueTargetHandle;
54
+ }) => DockerSecretSpec;
55
+ export declare const executeDockerSecretCommand: (input: {
56
+ args: string[];
57
+ executor: DockerSecretExecutor;
58
+ requireSilent?: boolean;
59
+ signal?: AbortSignal;
60
+ stdin?: Uint8Array;
61
+ timeoutMs: number;
62
+ }) => Promise<{
63
+ stderr: string;
64
+ stdout: string;
65
+ }>;
66
+ export declare const isExpectedDockerSecretVolume: (stdout: string, spec: DockerSecretSpec) => boolean;
67
+ export declare const parseExpectedDockerSecretWriter: (stdout: string, spec: DockerSecretSpec) => DockerSecretWriterState | null;
68
+ export declare const createDockerSecretArchive: (bindings: readonly ResolvedSecretBinding[]) => Buffer;
@@ -0,0 +1,329 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { createHash } from "node:crypto";
3
+ import { assertOrdinaryJsonGraph, parseOpaqueTargetHandle, parseRunId } from "./contracts.js";
4
+ export const DOCKER_SECRET_ERROR = "Docker secret materialization failed";
5
+ export const DOCKER_SECRET_WRITER_IMAGE = "docker.io/library/busybox@sha256:222ad6d973c0d198014546a65cd02c5fdedcc172123c5b4c2bf0af636550bd94";
6
+ export const MAX_SECRET_VALUE_BYTES = 1_048_576;
7
+ export const MAX_SECRET_ARCHIVE_BYTES = 4_194_304;
8
+ const MAX_OUTPUT_BYTES = 32_768;
9
+ const MAX_NAME_LENGTH = 63;
10
+ const TAR_BLOCK_BYTES = 512;
11
+ const SECRET_ROOT = "/run/spawnfile-secrets";
12
+ const WRITER_SCRIPT = `umask 077
13
+ root=${SECRET_ROOT}
14
+ find "$root" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} \\;
15
+ tar -xpf - -C "$root"
16
+ test -f "$root/.spawnfile-complete"`;
17
+ /** A fixed, non-reflective classification supplied by the trusted Docker bridge. */
18
+ export class DockerSecretProviderError extends Error {
19
+ kind;
20
+ constructor(kind) { super(DOCKER_SECRET_ERROR); this.kind = kind; }
21
+ }
22
+ const digest = (domain, value) => createHash("sha256")
23
+ .update(`spawnfile.target-secret.${domain}.v1\0`, "utf8").update(value, "utf8").digest("hex");
24
+ const labelValue = (prefix, value) => `${prefix}${digest("docker-label", value).slice(0, 63)}`;
25
+ const resourceLabelValue = (prefix, value) => `${prefix}${createHash("sha256")
26
+ .update("spawnfile.target-resource.docker-resource-label.v1\0", "utf8").update(value, "utf8")
27
+ .digest("hex").slice(0, 63)}`;
28
+ const validDigest = (value) => typeof value === "string" && /^sha256:[a-f0-9]{64}$/u.test(value);
29
+ const createSpec = (input) => {
30
+ const runId = parseRunId(input.runId);
31
+ const authority = input.bindingsHandle;
32
+ const volumeName = `spfs_${digest("volume-name", authority).slice(0, MAX_NAME_LENGTH - 5)}`;
33
+ const writerName = `spfw_${digest("writer-name", authority).slice(0, MAX_NAME_LENGTH - 5)}`;
34
+ const labels = Object.freeze({
35
+ spawnfile_resource_v1_binding: labelValue("b", authority),
36
+ spawnfile_resource_v1_kind: "secret_bindings",
37
+ spawnfile_resource_v1_run: resourceLabelValue("r", runId),
38
+ spawnfile_resource_v1_target: resourceLabelValue("t", input.selectedTargetHandle),
39
+ spawnfile_resource_v1_version: "v1"
40
+ });
41
+ const writerLabels = Object.freeze({
42
+ spawnfile_secret_writer_v1_binding: labelValue("b", authority),
43
+ spawnfile_secret_writer_v1_run: labelValue("r", runId),
44
+ spawnfile_secret_writer_v1_target: labelValue("t", input.selectedTargetHandle),
45
+ spawnfile_secret_writer_v1_version: "v1"
46
+ });
47
+ const writerEnv = Object.freeze([
48
+ "PATH=/bin:/usr/bin",
49
+ `HOSTNAME=${writerName}`,
50
+ "HOME=/root"
51
+ ]);
52
+ const labelArgs = Object.entries(writerLabels).flatMap(([key, value]) => ["--label", `${key}=${value}`]);
53
+ const envArgs = writerEnv.flatMap((value) => ["--env", value]);
54
+ const writerRunArgs = [
55
+ "run", "--rm", "--interactive", "--quiet", "--pull", "missing", "--name", writerName,
56
+ "--hostname", writerName, "--network", "none", "--ipc", "none", "--cgroupns", "private",
57
+ "--restart", "no", "--privileged=false", "--publish-all=false", "--log-driver", "none", "--read-only",
58
+ "--cap-drop", "ALL", "--security-opt", "no-new-privileges=true",
59
+ "--user", "0:0", "--pids-limit", "32", "--memory", "32m", "--cpus", "0.25",
60
+ ...envArgs, ...labelArgs,
61
+ "--mount", `type=volume,src=${volumeName},dst=${SECRET_ROOT},volume-nocopy`,
62
+ "--entrypoint", "/bin/sh", DOCKER_SECRET_WRITER_IMAGE, "-ceu", WRITER_SCRIPT
63
+ ];
64
+ const volumeInspectionFormat = "[{\"Name\":{{json .Name}},\"Labels\":{{json .Labels}},\"Driver\":{{json .Driver}},\"Scope\":{{json .Scope}},\"Options\":{{json .Options}}}]";
65
+ const writerInspectionFormat = "[{\"Name\":{{json .Name}},\"Image\":{{json .Config.Image}},\"Entrypoint\":{{json .Config.Entrypoint}},\"Cmd\":{{json .Config.Cmd}},\"User\":{{json .Config.User}},\"OpenStdin\":{{json .Config.OpenStdin}},\"Env\":{{json .Config.Env}},\"Hostname\":{{json .Config.Hostname}},\"Domainname\":{{json .Config.Domainname}},\"Labels\":{{json .Config.Labels}},\"AutoRemove\":{{json .HostConfig.AutoRemove}},\"ReadonlyRootfs\":{{json .HostConfig.ReadonlyRootfs}},\"NetworkMode\":{{json .HostConfig.NetworkMode}},\"NetworkAttachmentCount\":{{len .NetworkSettings.Networks}}{{range $name, $_ := .NetworkSettings.Networks}},\"NetworkAttachmentName\":{{json $name}}{{end}},\"PidMode\":{{json .HostConfig.PidMode}},\"IpcMode\":{{json .HostConfig.IpcMode}},\"UTSMode\":{{json .HostConfig.UTSMode}},\"UsernsMode\":{{json .HostConfig.UsernsMode}},\"CgroupnsMode\":{{json .HostConfig.CgroupnsMode}},\"RestartPolicyName\":{{json .HostConfig.RestartPolicy.Name}},\"RestartMaximumRetryCount\":{{json .HostConfig.RestartPolicy.MaximumRetryCount}},\"Privileged\":{{json .HostConfig.Privileged}},\"CapDrop\":{{json .HostConfig.CapDrop}},\"CapAddCount\":{{len .HostConfig.CapAdd}},\"DeviceCount\":{{len .HostConfig.Devices}},\"DeviceRequestCount\":{{len .HostConfig.DeviceRequests}},\"PortBindingCount\":{{len .HostConfig.PortBindings}},\"ExposedPortCount\":{{len .Config.ExposedPorts}},\"PublishAllPorts\":{{json .HostConfig.PublishAllPorts}},\"BindCount\":{{len .HostConfig.Binds}},\"VolumesFromCount\":{{len .HostConfig.VolumesFrom}},\"ExtraHostCount\":{{len .HostConfig.ExtraHosts}},\"DnsCount\":{{len .HostConfig.Dns}},\"GroupAddCount\":{{len .HostConfig.GroupAdd}},\"LinkCount\":{{len .HostConfig.Links}},\"SecurityOpt\":{{json .HostConfig.SecurityOpt}},\"LogType\":{{json .HostConfig.LogConfig.Type}},\"PidsLimit\":{{json .HostConfig.PidsLimit}},\"Memory\":{{json .HostConfig.Memory}},\"NanoCpus\":{{json .HostConfig.NanoCpus}},\"MountCount\":{{len .Mounts}}{{range .Mounts}},\"MountType\":{{json .Type}},\"MountName\":{{json .Name}},\"MountDestination\":{{json .Destination}},\"MountRW\":{{json .RW}}{{end}},\"Status\":{{json .State.Status}},\"ExitCode\":{{json .State.ExitCode}}}]";
66
+ return { labels, resultHandle: input.bindingsHandle, volumeInspectionFormat, volumeName, writerEnv, writerInspectionFormat, writerLabels, writerName, writerRunArgs };
67
+ };
68
+ export const createPreparedDockerSecretSpec = (input) => {
69
+ if (!validDigest(input.requestDigest))
70
+ throw new TypeError(DOCKER_SECRET_ERROR);
71
+ const operationHandle = parseOpaqueTargetHandle(input.operationHandle);
72
+ const bindingsHandle = parseOpaqueTargetHandle(`opaque_${digest("bindings-handle", `${operationHandle}\0${input.requestDigest}`)}`);
73
+ return createSpec({ bindingsHandle, runId: input.runId, selectedTargetHandle: parseOpaqueTargetHandle(input.selectedTargetHandle) });
74
+ };
75
+ export const createExistingDockerSecretSpec = (input) => createSpec({
76
+ bindingsHandle: parseOpaqueTargetHandle(input.bindingsHandle),
77
+ runId: input.runId,
78
+ selectedTargetHandle: parseOpaqueTargetHandle(input.selectedTargetHandle)
79
+ });
80
+ const isUtf8 = (value) => Buffer.from(value, "utf8").toString("utf8") === value;
81
+ const boundedText = (value) => typeof value === "string" && isUtf8(value) && Buffer.byteLength(value, "utf8") <= MAX_OUTPUT_BYTES;
82
+ export const executeDockerSecretCommand = async (input) => {
83
+ try {
84
+ const options = input.stdin === undefined
85
+ ? { signal: input.signal, timeout: input.timeoutMs }
86
+ : { signal: input.signal, stdin: input.stdin, timeout: input.timeoutMs };
87
+ const result = await input.executor("docker", input.args, options);
88
+ if (!result || !boundedText(result.stdout) || !boundedText(result.stderr)
89
+ || input.requireSilent && (result.stdout !== "" || result.stderr !== ""))
90
+ throw new Error();
91
+ return result;
92
+ }
93
+ catch (error) {
94
+ if (error instanceof DockerSecretProviderError)
95
+ throw error;
96
+ throw new Error(DOCKER_SECRET_ERROR);
97
+ }
98
+ };
99
+ const skipWhitespace = (source, index) => {
100
+ while (index < source.length && /[\t\n\r ]/u.test(source[index]))
101
+ index += 1;
102
+ return index;
103
+ };
104
+ const stringEnd = (source, start) => {
105
+ let index = start + 1;
106
+ while (index < source.length) {
107
+ if (source[index] === "\\") {
108
+ index += 2;
109
+ continue;
110
+ }
111
+ if (source[index] === "\"")
112
+ return index + 1;
113
+ index += 1;
114
+ }
115
+ throw new Error();
116
+ };
117
+ const duplicateFreeValue = (source, start) => {
118
+ let index = skipWhitespace(source, start);
119
+ const token = source[index];
120
+ if (token === "\"")
121
+ return stringEnd(source, index);
122
+ if (token === "{") {
123
+ index = skipWhitespace(source, index + 1);
124
+ const keys = new Set();
125
+ if (source[index] === "}")
126
+ return index + 1;
127
+ while (true) {
128
+ if (source[index] !== "\"")
129
+ throw new Error();
130
+ const end = stringEnd(source, index);
131
+ const key = JSON.parse(source.slice(index, end));
132
+ if (keys.has(key))
133
+ throw new Error();
134
+ keys.add(key);
135
+ index = skipWhitespace(source, end);
136
+ if (source[index] !== ":")
137
+ throw new Error();
138
+ index = duplicateFreeValue(source, index + 1);
139
+ index = skipWhitespace(source, index);
140
+ if (source[index] === "}")
141
+ return index + 1;
142
+ if (source[index] !== ",")
143
+ throw new Error();
144
+ index = skipWhitespace(source, index + 1);
145
+ }
146
+ }
147
+ if (token === "[") {
148
+ index = skipWhitespace(source, index + 1);
149
+ if (source[index] === "]")
150
+ return index + 1;
151
+ while (true) {
152
+ index = duplicateFreeValue(source, index);
153
+ index = skipWhitespace(source, index);
154
+ if (source[index] === "]")
155
+ return index + 1;
156
+ if (source[index] !== ",")
157
+ throw new Error();
158
+ index = skipWhitespace(source, index + 1);
159
+ }
160
+ }
161
+ while (index < source.length && !/[\t\n\r ,}\]]/u.test(source[index]))
162
+ index += 1;
163
+ if (index === start)
164
+ throw new Error();
165
+ return index;
166
+ };
167
+ const parseInspection = (stdout) => {
168
+ if (!boundedText(stdout))
169
+ throw new Error();
170
+ const end = duplicateFreeValue(stdout, 0);
171
+ if (skipWhitespace(stdout, end) !== stdout.length)
172
+ throw new Error();
173
+ const parsed = JSON.parse(stdout);
174
+ assertOrdinaryJsonGraph(parsed);
175
+ return parsed;
176
+ };
177
+ const exactRecord = (value, keys) => {
178
+ if (!value || typeof value !== "object" || Array.isArray(value) || Object.getPrototypeOf(value) !== Object.prototype)
179
+ return false;
180
+ const actual = Object.keys(value).sort();
181
+ const expected = [...keys].sort();
182
+ return actual.length === expected.length && actual.every((key, index) => key === expected[index]);
183
+ };
184
+ const exactLabels = (actual, expected) => exactRecord(actual, Object.keys(expected))
185
+ && Object.entries(expected).every(([key, value]) => actual[key] === value);
186
+ export const isExpectedDockerSecretVolume = (stdout, spec) => {
187
+ try {
188
+ const parsed = parseInspection(stdout);
189
+ if (!Array.isArray(parsed) || parsed.length !== 1)
190
+ return false;
191
+ const resource = parsed[0];
192
+ return exactRecord(resource, ["Driver", "Labels", "Name", "Options", "Scope"])
193
+ && resource.Name === spec.volumeName && exactLabels(resource.Labels, spec.labels)
194
+ && resource.Driver === "local" && resource.Scope === "local" && resource.Options === null;
195
+ }
196
+ catch {
197
+ return false;
198
+ }
199
+ };
200
+ export const parseExpectedDockerSecretWriter = (stdout, spec) => {
201
+ try {
202
+ const parsed = parseInspection(stdout);
203
+ if (!Array.isArray(parsed) || parsed.length !== 1)
204
+ return null;
205
+ const value = parsed[0];
206
+ if (!exactRecord(value, [
207
+ "AutoRemove", "BindCount", "CapAddCount", "CapDrop", "CgroupnsMode", "Cmd", "DeviceCount",
208
+ "DeviceRequestCount", "DnsCount", "Domainname", "Entrypoint", "Env", "ExitCode", "ExposedPortCount",
209
+ "ExtraHostCount", "GroupAddCount", "Hostname", "Image", "IpcMode", "Labels", "LinkCount", "LogType",
210
+ "Memory", "MountCount", "MountDestination", "MountName", "MountRW", "MountType", "Name", "NanoCpus",
211
+ "NetworkAttachmentCount", "NetworkAttachmentName", "NetworkMode", "OpenStdin", "PidMode", "PidsLimit",
212
+ "PortBindingCount", "Privileged", "PublishAllPorts",
213
+ "ReadonlyRootfs", "RestartMaximumRetryCount", "RestartPolicyName", "SecurityOpt", "Status", "User",
214
+ "UsernsMode", "UTSMode", "VolumesFromCount"
215
+ ]))
216
+ return null;
217
+ const status = value.Status;
218
+ if (status !== "created" && status !== "dead" && status !== "exited" && status !== "paused"
219
+ && status !== "removing" && status !== "restarting" && status !== "running")
220
+ return null;
221
+ if (!Number.isSafeInteger(value.ExitCode) || value.ExitCode < 0 || value.ExitCode > 255)
222
+ return null;
223
+ return value.Name === `/${spec.writerName}` && value.Image === DOCKER_SECRET_WRITER_IMAGE
224
+ && JSON.stringify(value.Entrypoint) === JSON.stringify(["/bin/sh"])
225
+ && JSON.stringify(value.Cmd) === JSON.stringify(["-ceu", WRITER_SCRIPT])
226
+ && value.User === "0:0" && value.OpenStdin === true
227
+ && JSON.stringify(value.Env) === JSON.stringify(spec.writerEnv)
228
+ && value.Hostname === spec.writerName && value.Domainname === "" && exactLabels(value.Labels, spec.writerLabels)
229
+ && value.AutoRemove === true && value.ReadonlyRootfs === true && value.NetworkMode === "none"
230
+ && value.NetworkAttachmentCount === 1 && value.NetworkAttachmentName === "none"
231
+ && value.PidMode === "" && value.IpcMode === "none" && value.UTSMode === ""
232
+ && value.UsernsMode === "" && value.CgroupnsMode === "private"
233
+ && value.RestartPolicyName === "no" && value.RestartMaximumRetryCount === 0 && value.Privileged === false
234
+ && JSON.stringify(value.CapDrop) === JSON.stringify(["ALL"])
235
+ && value.CapAddCount === 0 && value.DeviceCount === 0 && value.DeviceRequestCount === 0
236
+ && value.PortBindingCount === 0 && value.ExposedPortCount === 0 && value.PublishAllPorts === false
237
+ && value.BindCount === 0 && value.VolumesFromCount === 0 && value.ExtraHostCount === 0
238
+ && value.DnsCount === 0 && value.GroupAddCount === 0 && value.LinkCount === 0
239
+ && JSON.stringify(value.SecurityOpt) === JSON.stringify(["no-new-privileges=true"])
240
+ && value.LogType === "none" && value.PidsLimit === 32 && value.Memory === 33_554_432
241
+ && value.NanoCpus === 250_000_000 && value.MountCount === 1 && value.MountType === "volume"
242
+ && value.MountName === spec.volumeName && value.MountDestination === SECRET_ROOT && value.MountRW === true
243
+ ? { exitCode: value.ExitCode, status } : null;
244
+ }
245
+ catch {
246
+ return null;
247
+ }
248
+ };
249
+ const writeText = (block, offset, length, value) => {
250
+ const bytes = Buffer.from(value, "ascii");
251
+ if (bytes.length > length)
252
+ throw new TypeError(DOCKER_SECRET_ERROR);
253
+ bytes.copy(block, offset);
254
+ };
255
+ const writeOctal = (block, offset, length, value) => {
256
+ const text = value.toString(8);
257
+ if (text.length > length - 1)
258
+ throw new TypeError(DOCKER_SECRET_ERROR);
259
+ writeText(block, offset, length, `${text.padStart(length - 1, "0")}\0`);
260
+ };
261
+ const tarHeader = (path, mode, size, type) => {
262
+ const directory = path.endsWith("/");
263
+ const normalized = directory ? path.slice(0, -1) : path;
264
+ const parts = normalized.split("/");
265
+ let name = normalized;
266
+ let prefix = "";
267
+ if (Buffer.byteLength(`${name}${directory ? "/" : ""}`, "ascii") > 100) {
268
+ name = parts.pop();
269
+ prefix = parts.join("/");
270
+ }
271
+ else if (directory)
272
+ name += "/";
273
+ const block = Buffer.alloc(TAR_BLOCK_BYTES);
274
+ writeText(block, 0, 100, name);
275
+ writeOctal(block, 100, 8, mode);
276
+ writeOctal(block, 108, 8, 0);
277
+ writeOctal(block, 116, 8, 0);
278
+ writeOctal(block, 124, 12, size);
279
+ writeOctal(block, 136, 12, 0);
280
+ block.fill(0x20, 148, 156);
281
+ writeText(block, 156, 1, type);
282
+ writeText(block, 257, 6, "ustar\0");
283
+ writeText(block, 263, 2, "00");
284
+ writeText(block, 345, 155, prefix);
285
+ const checksum = block.reduce((sum, byte) => sum + byte, 0);
286
+ const encoded = checksum.toString(8).padStart(6, "0");
287
+ writeText(block, 148, 8, `${encoded}\0 `);
288
+ return block;
289
+ };
290
+ const paddedSize = (size) => Math.ceil(size / TAR_BLOCK_BYTES) * TAR_BLOCK_BYTES;
291
+ export const createDockerSecretArchive = (bindings) => {
292
+ if (bindings.length < 1 || bindings.length > 32)
293
+ throw new TypeError(DOCKER_SECRET_ERROR);
294
+ const sorted = [...bindings].sort((left, right) => left.scope.localeCompare(right.scope) || left.name.localeCompare(right.name));
295
+ const keys = new Set();
296
+ let valueBytes = 0;
297
+ const scopes = new Set();
298
+ for (const binding of sorted) {
299
+ if (!/^[a-z][a-z0-9_-]{0,63}$/u.test(binding.name) || !/^[a-z][a-z0-9_-]{0,63}$/u.test(binding.scope)
300
+ || !(binding.value instanceof Uint8Array) || binding.value.byteLength < 1 || binding.value.byteLength > MAX_SECRET_VALUE_BYTES)
301
+ throw new TypeError(DOCKER_SECRET_ERROR);
302
+ const key = `${binding.scope}\0${binding.name}`;
303
+ if (keys.has(key))
304
+ throw new TypeError(DOCKER_SECRET_ERROR);
305
+ keys.add(key);
306
+ scopes.add(binding.scope);
307
+ valueBytes += binding.value.byteLength;
308
+ if (valueBytes > MAX_SECRET_ARCHIVE_BYTES)
309
+ throw new TypeError(DOCKER_SECRET_ERROR);
310
+ }
311
+ const chunks = [];
312
+ for (const scope of [...scopes].sort())
313
+ chunks.push(tarHeader(`${scope}/`, 0o700, 0, "5"));
314
+ for (const binding of sorted) {
315
+ chunks.push(tarHeader(`${binding.scope}/${binding.name}`, 0o400, binding.value.byteLength, "0"));
316
+ const content = Buffer.alloc(paddedSize(binding.value.byteLength));
317
+ content.set(binding.value);
318
+ chunks.push(content);
319
+ }
320
+ chunks.push(tarHeader(".spawnfile-complete", 0o400, 0, "0"), Buffer.alloc(TAR_BLOCK_BYTES * 2));
321
+ const archive = Buffer.concat(chunks);
322
+ for (const chunk of chunks)
323
+ chunk.fill(0);
324
+ if (archive.byteLength > MAX_SECRET_ARCHIVE_BYTES) {
325
+ archive.fill(0);
326
+ throw new TypeError(DOCKER_SECRET_ERROR);
327
+ }
328
+ return archive;
329
+ };
@@ -0,0 +1,52 @@
1
+ export type DockerDeploymentTarget = {
2
+ endpoint_fingerprint: string;
3
+ kind: "context";
4
+ name: string;
5
+ } | {
6
+ endpoint_fingerprint: string;
7
+ kind: "docker-context";
8
+ context: string;
9
+ } | {
10
+ kind: "host";
11
+ value: string;
12
+ };
13
+ export type DockerTargetExecFile = (file: string, args: string[], options: {
14
+ signal?: AbortSignal;
15
+ timeout: number;
16
+ }) => Promise<{
17
+ stderr: string;
18
+ stdout: string;
19
+ }>;
20
+ export interface ResolveDockerDeploymentTargetOptions {
21
+ context?: string | null;
22
+ dockerCommand?: string;
23
+ dockerHost?: string | null;
24
+ execFile?: DockerTargetExecFile;
25
+ signal?: AbortSignal;
26
+ timeoutMs?: number;
27
+ }
28
+ /** Inputs for the named-context-only target-resource selection operation. */
29
+ export interface SelectTargetOptions {
30
+ DOCKER_HOST?: unknown;
31
+ context?: unknown;
32
+ dockerCommand?: unknown;
33
+ dockerHost?: unknown;
34
+ endpoint?: unknown;
35
+ execFile?: DockerTargetExecFile;
36
+ host?: unknown;
37
+ signal?: AbortSignal;
38
+ timeoutMs?: unknown;
39
+ }
40
+ export { createEndpointFingerprint } from "./dockerEndpointFingerprint.js";
41
+ export declare const createDockerDeploymentTarget: (input: {
42
+ context?: string;
43
+ endpoint?: string;
44
+ host?: string;
45
+ }) => DockerDeploymentTarget;
46
+ export declare const dockerContextNameForTarget: (target: DockerDeploymentTarget) => string | null;
47
+ export declare const dockerHostValueForTarget: (target: DockerDeploymentTarget) => string | null;
48
+ export declare const resolveDockerDeploymentTarget: (input?: ResolveDockerDeploymentTargetOptions) => Promise<DockerDeploymentTarget>;
49
+ export declare const verifyDockerDeploymentTarget: (target: DockerDeploymentTarget, options?: Omit<ResolveDockerDeploymentTargetOptions, "context" | "dockerHost">) => Promise<string | null>;
50
+ /** Resolves one explicit named Docker context without exposing private selector data. */
51
+ export declare const selectTarget: (input?: SelectTargetOptions) => Promise<import("./contracts.js").SelectedTargetReceipt>;
52
+ export declare const select_target: (input?: SelectTargetOptions) => Promise<import("./contracts.js").SelectedTargetReceipt>;
@@ -0,0 +1,48 @@
1
+ import { createEndpointFingerprint } from "./dockerEndpointFingerprint.js";
2
+ import { SpawnfileError } from "../shared/index.js";
3
+ import { defaultDockerTargetExecFile, resolveDockerContextEndpoint, selectTarget as selectTargetInternal } from "./dockerTargetBinding.js";
4
+ export { createEndpointFingerprint } from "./dockerEndpointFingerprint.js";
5
+ export const createDockerDeploymentTarget = (input) => {
6
+ const host = input.host?.trim();
7
+ if (host)
8
+ return { kind: "host", value: host };
9
+ const context = input.context?.trim();
10
+ const endpoint = input.endpoint?.trim();
11
+ if (!context || !endpoint) {
12
+ throw new SpawnfileError("validation_error", "Docker context deployment targets require both context and endpoint");
13
+ }
14
+ return { name: context, endpoint_fingerprint: createEndpointFingerprint(endpoint), kind: "context" };
15
+ };
16
+ export const dockerContextNameForTarget = (target) => target.kind === "context" ? target.name : target.kind === "docker-context" ? target.context : null;
17
+ export const dockerHostValueForTarget = (target) => target.kind === "host" ? target.value : null;
18
+ export const resolveDockerDeploymentTarget = async (input = {}) => {
19
+ const explicitContext = input.context?.trim();
20
+ const host = explicitContext ? undefined : input.dockerHost?.trim() ?? process.env.DOCKER_HOST?.trim();
21
+ if (host)
22
+ return createDockerDeploymentTarget({ host });
23
+ const resolvedOptions = {
24
+ dockerCommand: input.dockerCommand ?? "docker",
25
+ execFile: input.execFile ?? defaultDockerTargetExecFile,
26
+ signal: input.signal,
27
+ timeoutMs: input.timeoutMs ?? 10_000
28
+ };
29
+ const context = explicitContext || "default";
30
+ const endpoint = await resolveDockerContextEndpoint(context, resolvedOptions);
31
+ return createDockerDeploymentTarget({ context, endpoint });
32
+ };
33
+ export const verifyDockerDeploymentTarget = async (target, options = {}) => {
34
+ if (target.kind === "host")
35
+ return null;
36
+ const context = dockerContextNameForTarget(target);
37
+ if (!context)
38
+ return null;
39
+ const current = await resolveDockerDeploymentTarget({ ...options, context });
40
+ const currentFingerprint = current.kind === "host" ? null : current.endpoint_fingerprint;
41
+ if (currentFingerprint !== target.endpoint_fingerprint) {
42
+ throw new SpawnfileError("runtime_error", `Docker context "${context}" endpoint changed since deployment`);
43
+ }
44
+ return context;
45
+ };
46
+ /** Resolves one explicit named Docker context without exposing private selector data. */
47
+ export const selectTarget = selectTargetInternal;
48
+ export const select_target = selectTarget;
@@ -0,0 +1,14 @@
1
+ import { execFile as execFileCallback } from "node:child_process";
2
+ import { type SelectedTargetReceipt } from "./contracts.js";
3
+ import type { ResolveDockerDeploymentTargetOptions, SelectTargetOptions } from "./dockerTarget.js";
4
+ export declare const defaultDockerTargetExecFile: typeof execFileCallback.__promisify__;
5
+ /** Private owner-only endpoint binding. Never export this module through the target barrel. */
6
+ export interface ResolvedSelectedTargetBinding {
7
+ readonly endpoint: string;
8
+ readonly selected: SelectedTargetReceipt;
9
+ }
10
+ export declare const resolveDockerContextEndpoint: (context: string, options: Required<Pick<ResolveDockerDeploymentTargetOptions, "dockerCommand" | "execFile" | "timeoutMs">> & Pick<ResolveDockerDeploymentTargetOptions, "signal">) => Promise<string>;
11
+ export declare const selectedTargetForContextEndpoint: (context: string, endpoint: string) => SelectedTargetReceipt;
12
+ export declare const resolveSelectedTargetBinding: (input?: SelectTargetOptions) => Promise<ResolvedSelectedTargetBinding>;
13
+ /** Resolves one explicit named Docker context without exposing private selector data. */
14
+ export declare const selectTarget: (input?: SelectTargetOptions) => Promise<SelectedTargetReceipt>;