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,23 @@
1
+ import { type TargetResourceReceipt } from "./contracts.js";
2
+ import { type TargetJournalStore } from "./journal.js";
3
+ import { type OrganizationAttachmentResolver } from "./organizationAttachmentAuthority.js";
4
+ import { type DockerOrganizationAttachmentExecutor } from "./organizationAttachmentProvider.js";
5
+ import { type OrganizationAttachmentAuthorityStore } from "./organizationAttachmentStore.js";
6
+ type OperationResult = {
7
+ readonly receipt: TargetResourceReceipt;
8
+ readonly receiptBytes: string;
9
+ };
10
+ export interface DockerOrganizationAttachmentOperationsOptions {
11
+ readonly authorityStore: OrganizationAttachmentAuthorityStore;
12
+ readonly context: unknown;
13
+ readonly executor: DockerOrganizationAttachmentExecutor;
14
+ readonly journal: TargetJournalStore;
15
+ readonly resolver: OrganizationAttachmentResolver;
16
+ readonly signal?: AbortSignal;
17
+ readonly timeoutMs?: unknown;
18
+ }
19
+ export interface DockerOrganizationAttachmentOperations {
20
+ execute(raw: unknown): Promise<OperationResult>;
21
+ }
22
+ export declare const createDockerOrganizationAttachmentOperations: (options: DockerOrganizationAttachmentOperationsOptions) => DockerOrganizationAttachmentOperations;
23
+ export {};
@@ -0,0 +1,263 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ import { parseTargetResourceRequest } from "./contracts.js";
3
+ import { createDockerResourceSpec } from "./dockerResourcesProvider.js";
4
+ import { selectTarget } from "./dockerTarget.js";
5
+ import { createTargetReceiptDigest } from "./handles.js";
6
+ import { createOrganizationAttachmentAuthorization, parseOrganizationAttachmentResolution } from "./organizationAttachmentAuthority.js";
7
+ import { ORGANIZATION_ATTACHMENT_ERROR, createDockerOrganizationAttachmentSpec } from "./organizationAttachmentProvider.js";
8
+ import { executeOrganizationAttachmentCommand, inspectContainer, inspectNetwork, mutate } from "./organizationAttachmentLifecycle.js";
9
+ import { createOrganizationAttachmentBinding, createOrganizationAttachmentMutationAdmission } from "./organizationAttachmentStore.js";
10
+ const CONTEXT_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/u;
11
+ const fail = () => {
12
+ throw new SpawnfileError("runtime_error", ORGANIZATION_ATTACHMENT_ERROR);
13
+ };
14
+ const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
15
+ const validOptions = (raw) => {
16
+ if (!raw.authorityStore
17
+ || typeof raw.authorityStore.bindAttachment !== "function"
18
+ || typeof raw.authorityStore.bindMutationAdmission !== "function"
19
+ || typeof raw.authorityStore.bindResolution !== "function"
20
+ || typeof raw.authorityStore.loadAttachment !== "function"
21
+ || typeof raw.authorityStore.requireMutationAdmission !== "function"
22
+ || typeof raw.context !== "string" || !CONTEXT_PATTERN.test(raw.context)
23
+ || typeof raw.executor !== "function" || !raw.journal
24
+ || !raw.resolver || typeof raw.resolver.resolve !== "function"
25
+ || raw.timeoutMs !== undefined && (typeof raw.timeoutMs !== "number"
26
+ || !Number.isSafeInteger(raw.timeoutMs) || raw.timeoutMs < 1
27
+ || raw.timeoutMs > 120_000))
28
+ return fail();
29
+ return {
30
+ authorityStore: raw.authorityStore,
31
+ context: raw.context,
32
+ executor: raw.executor,
33
+ journal: raw.journal,
34
+ resolver: raw.resolver,
35
+ signal: raw.signal,
36
+ timeoutMs: raw.timeoutMs ?? 10_000
37
+ };
38
+ };
39
+ const parseRequest = (raw) => {
40
+ const request = parseTargetResourceRequest(raw);
41
+ if (request.operation !== "attach_organization"
42
+ && request.operation !== "detach_organization")
43
+ return fail();
44
+ return request;
45
+ };
46
+ const selectedContextMatches = async (request, options) => {
47
+ const selected = await selectTarget({
48
+ context: options.context,
49
+ dockerCommand: "docker",
50
+ execFile: async (_file, args, execution) => executeOrganizationAttachmentCommand(args, {
51
+ ...options,
52
+ signal: execution.signal,
53
+ timeoutMs: execution.timeout
54
+ }),
55
+ signal: options.signal,
56
+ timeoutMs: options.timeoutMs
57
+ });
58
+ if (!same({ fingerprint: selected.fingerprint, handle: selected.handle }, request.selected_target))
59
+ return fail();
60
+ };
61
+ const dataNetworkClaim = async (request, options) => {
62
+ const journal = await options.journal.read();
63
+ const matches = journal.entries
64
+ .filter((entry) => entry.operation === "create_data_network" && entry.state === "completed")
65
+ .filter((entry) => createDockerResourceSpec({
66
+ kind: "data_network",
67
+ operationHandle: entry.operation_handle,
68
+ requestDigest: entry.request_digest,
69
+ runId: request.run_id,
70
+ selectedTargetHandle: request.selected_target.handle
71
+ }).resultHandle === request.data_network_handle);
72
+ if (matches.length !== 1)
73
+ return fail();
74
+ return {
75
+ operationHandle: matches[0].operation_handle,
76
+ requestDigest: matches[0].request_digest
77
+ };
78
+ };
79
+ const resolveAttach = async (request, claim, options) => {
80
+ const authorization = createOrganizationAttachmentAuthorization({
81
+ descriptorDigest: request.descriptor_digest,
82
+ operationHandle: claim.operationHandle,
83
+ organizationHandoffHandle: request.organization_handoff_handle,
84
+ requestDigest: claim.requestDigest,
85
+ runId: request.run_id,
86
+ selectedTarget: request.selected_target
87
+ });
88
+ const resolution = parseOrganizationAttachmentResolution(await options.resolver.resolve({ authorization, signal: options.signal }));
89
+ if (!same(resolution.authorization, authorization))
90
+ return fail();
91
+ await options.authorityStore.bindResolution(resolution);
92
+ return resolution;
93
+ };
94
+ const receiptFor = (input) => {
95
+ const raw = {
96
+ cleanup_state: "not_requested",
97
+ descriptor_digest: input.request.descriptor_digest,
98
+ export_state: "not_requested",
99
+ labels: Object.entries(input.labels).map(([key, value]) => ({ key, value })),
100
+ operation: input.request.operation,
101
+ operation_handle: input.claim.operationHandle,
102
+ receipt_digest: `sha256:${"0".repeat(64)}`,
103
+ request_digest: input.claim.requestDigest,
104
+ result_handle: input.resultHandle,
105
+ resulting_revision: input.request.expected_revision + 1,
106
+ run_id: input.request.run_id,
107
+ selected_target: input.request.selected_target,
108
+ version: "spawnfile.target-resource.receipt.v1"
109
+ };
110
+ return { ...raw, receipt_digest: createTargetReceiptDigest(raw) };
111
+ };
112
+ class DockerOrganizationAttachmentOperationsImpl {
113
+ #live = new Map();
114
+ #options;
115
+ constructor(options) { this.#options = options; }
116
+ execute(raw) {
117
+ let request;
118
+ try {
119
+ request = parseRequest(raw);
120
+ }
121
+ catch {
122
+ return Promise.reject(new SpawnfileError("runtime_error", ORGANIZATION_ATTACHMENT_ERROR));
123
+ }
124
+ const active = this.#live.get(request.idempotency_key);
125
+ if (active)
126
+ return same(active.request, request)
127
+ ? active.promise
128
+ : Promise.reject(new SpawnfileError("runtime_error", ORGANIZATION_ATTACHMENT_ERROR));
129
+ const promise = this.executeOwner(request);
130
+ this.#live.set(request.idempotency_key, { promise, request });
131
+ void promise.finally(() => {
132
+ if (this.#live.get(request.idempotency_key)?.promise === promise) {
133
+ this.#live.delete(request.idempotency_key);
134
+ }
135
+ }).catch(() => undefined);
136
+ return promise;
137
+ }
138
+ async executeOwner(request) {
139
+ try {
140
+ const reservation = await this.#options.journal.reserve(request);
141
+ if (reservation.kind === "replay") {
142
+ return { receipt: reservation.receipt, receiptBytes: reservation.receiptBytes };
143
+ }
144
+ if (request.operation === "attach_organization") {
145
+ return await this.attach(request, reservation.kind, reservation.claim);
146
+ }
147
+ return await this.detach(request, reservation.kind, reservation.claim);
148
+ }
149
+ catch {
150
+ return fail();
151
+ }
152
+ }
153
+ async attach(request, reservation, claim) {
154
+ const networkClaim = await dataNetworkClaim(request, this.#options);
155
+ const resolution = await resolveAttach(request, claim, this.#options);
156
+ await selectedContextMatches(request, this.#options);
157
+ const spec = createDockerOrganizationAttachmentSpec({
158
+ containerId: resolution.network_attachment.container_id,
159
+ dataNetworkOperationHandle: networkClaim.operationHandle,
160
+ dataNetworkRequestDigest: networkClaim.requestDigest,
161
+ deploymentLabels: resolution.network_attachment.deployment_labels,
162
+ operationHandle: claim.operationHandle,
163
+ organizationHandoffHandle: request.organization_handoff_handle,
164
+ requestDigest: claim.requestDigest,
165
+ runId: request.run_id,
166
+ selectedTargetHandle: request.selected_target.handle
167
+ });
168
+ if (spec.network.resultHandle !== request.data_network_handle)
169
+ return fail();
170
+ const networkId = await inspectNetwork(spec, this.#options);
171
+ const binding = createOrganizationAttachmentBinding({
172
+ dataNetworkOperationHandle: networkClaim.operationHandle,
173
+ dataNetworkRequestDigest: networkClaim.requestDigest,
174
+ networkId,
175
+ resolution,
176
+ spec
177
+ });
178
+ await this.#options.authorityStore.bindAttachment(binding);
179
+ const admission = createOrganizationAttachmentMutationAdmission({
180
+ binding, operation: request.operation,
181
+ operationHandle: claim.operationHandle, requestDigest: claim.requestDigest
182
+ });
183
+ if (reservation === "pending")
184
+ await this.#options.authorityStore
185
+ .requireMutationAdmission(admission);
186
+ const before = await inspectContainer(spec, this.#options);
187
+ if (reservation === "owner" && before.attached)
188
+ return fail();
189
+ if (reservation === "owner")
190
+ await this.#options.authorityStore
191
+ .bindMutationAdmission(admission);
192
+ if (!before.attached) {
193
+ await mutate("connect", binding.data_network.id, spec.containerId, this.#options);
194
+ }
195
+ if (!(await inspectContainer(spec, this.#options)).attached)
196
+ return fail();
197
+ if (await inspectNetwork(spec, this.#options) !== binding.data_network.id)
198
+ return fail();
199
+ const receipt = receiptFor({
200
+ claim,
201
+ labels: binding.receipt_labels,
202
+ request,
203
+ resultHandle: binding.attachment_handle
204
+ });
205
+ return await this.#options.journal.complete(claim, receipt);
206
+ }
207
+ async detach(request, reservation, claim) {
208
+ const binding = await this.#options.authorityStore.loadAttachment(request.organization_attachment_handle);
209
+ if (binding.attachment_handle !== request.organization_attachment_handle
210
+ || binding.data_network.handle !== request.data_network_handle
211
+ || binding.resolution.authorization.run_id !== request.run_id
212
+ || binding.resolution.authorization.descriptor_digest !== request.descriptor_digest
213
+ || !same(binding.resolution.authorization.selected_target, request.selected_target))
214
+ return fail();
215
+ const networkClaim = await dataNetworkClaim(request, this.#options);
216
+ if (networkClaim.operationHandle !== binding.data_network.operation_handle
217
+ || networkClaim.requestDigest !== binding.data_network.request_digest)
218
+ return fail();
219
+ await selectedContextMatches(request, this.#options);
220
+ const spec = createDockerOrganizationAttachmentSpec({
221
+ containerId: binding.resolution.network_attachment.container_id,
222
+ dataNetworkOperationHandle: networkClaim.operationHandle,
223
+ dataNetworkRequestDigest: networkClaim.requestDigest,
224
+ deploymentLabels: binding.resolution.network_attachment.deployment_labels,
225
+ operationHandle: binding.resolution.authorization.operation_handle,
226
+ organizationHandoffHandle: binding.resolution.authorization.organization_handoff_handle,
227
+ requestDigest: binding.resolution.authorization.request_digest,
228
+ runId: binding.resolution.authorization.run_id,
229
+ selectedTargetHandle: binding.resolution.authorization.selected_target.handle
230
+ });
231
+ if (spec.resultHandle !== binding.attachment_handle
232
+ || await inspectNetwork(spec, this.#options) !== binding.data_network.id)
233
+ return fail();
234
+ const admission = createOrganizationAttachmentMutationAdmission({
235
+ binding, operation: request.operation,
236
+ operationHandle: claim.operationHandle, requestDigest: claim.requestDigest
237
+ });
238
+ if (reservation === "pending")
239
+ await this.#options.authorityStore
240
+ .requireMutationAdmission(admission);
241
+ const before = await inspectContainer(spec, this.#options);
242
+ if (reservation === "owner" && !before.attached)
243
+ return fail();
244
+ if (reservation === "owner")
245
+ await this.#options.authorityStore
246
+ .bindMutationAdmission(admission);
247
+ if (before.attached) {
248
+ await mutate("disconnect", binding.data_network.id, spec.containerId, this.#options);
249
+ }
250
+ if ((await inspectContainer(spec, this.#options)).attached)
251
+ return fail();
252
+ if (await inspectNetwork(spec, this.#options) !== binding.data_network.id)
253
+ return fail();
254
+ const receipt = receiptFor({
255
+ claim,
256
+ labels: binding.receipt_labels,
257
+ request,
258
+ resultHandle: null
259
+ });
260
+ return await this.#options.journal.complete(claim, receipt);
261
+ }
262
+ }
263
+ export const createDockerOrganizationAttachmentOperations = (options) => new DockerOrganizationAttachmentOperationsImpl(validOptions(options));
@@ -0,0 +1,65 @@
1
+ import { type OpaqueTargetHandle, type SelectedTargetReceipt } from "./contracts.js";
2
+ import { type OrganizationDeploymentLabels } from "./organizationAttachmentProvider.js";
3
+ export declare const ORGANIZATION_ATTACHMENT_AUTHORIZATION_VERSION: "spawnfile.target-organization-attachment.authorization.v1";
4
+ export declare const ORGANIZATION_HANDOFF_VERSION: "spawnfile.organization-handoff.v1";
5
+ export interface OrganizationAttachmentAuthorization {
6
+ readonly descriptor_digest: string;
7
+ readonly operation_handle: OpaqueTargetHandle;
8
+ readonly organization_handoff_handle: OpaqueTargetHandle;
9
+ readonly request_digest: string;
10
+ readonly run_id: string;
11
+ readonly selected_target: {
12
+ readonly fingerprint: string;
13
+ readonly handle: OpaqueTargetHandle;
14
+ };
15
+ readonly version: typeof ORGANIZATION_ATTACHMENT_AUTHORIZATION_VERSION;
16
+ }
17
+ export interface ResolvedOrganizationHandoff {
18
+ readonly binding_digest: string;
19
+ readonly deployment_handle: string;
20
+ readonly lifecycle_receipts: {
21
+ readonly down: "spawnfile.down-receipt.v1";
22
+ readonly export: "spawnfile.export-index.v1";
23
+ readonly up: "spawnfile.up-receipt.v1";
24
+ };
25
+ readonly network_attachment_handle: OpaqueTargetHandle;
26
+ readonly run_id: string;
27
+ readonly selected_target_receipt_digest: string;
28
+ readonly version: typeof ORGANIZATION_HANDOFF_VERSION;
29
+ }
30
+ export interface OrganizationAttachmentResolution {
31
+ readonly authorization: OrganizationAttachmentAuthorization;
32
+ readonly descriptor_binding: {
33
+ readonly binding_digest: string;
34
+ readonly descriptor_digest: string;
35
+ };
36
+ readonly handoff: ResolvedOrganizationHandoff;
37
+ readonly network_attachment: {
38
+ readonly container_id: string;
39
+ readonly deployment_labels: OrganizationDeploymentLabels;
40
+ readonly network_attachment_handle: OpaqueTargetHandle;
41
+ };
42
+ readonly selected_target_binding: {
43
+ readonly receipt: SelectedTargetReceipt;
44
+ readonly receipt_digest: string;
45
+ };
46
+ }
47
+ export interface OrganizationAttachmentResolverInput {
48
+ readonly authorization: OrganizationAttachmentAuthorization;
49
+ readonly signal?: AbortSignal;
50
+ }
51
+ /** Trusted operator seam from one opaque handoff capability to exact private identity. */
52
+ export interface OrganizationAttachmentResolver {
53
+ resolve(input: OrganizationAttachmentResolverInput): Promise<unknown>;
54
+ }
55
+ export declare const createOrganizationAttachmentAuthorization: (input: {
56
+ readonly descriptorDigest: unknown;
57
+ readonly operationHandle: unknown;
58
+ readonly organizationHandoffHandle: unknown;
59
+ readonly requestDigest: unknown;
60
+ readonly runId: unknown;
61
+ readonly selectedTarget: unknown;
62
+ }) => OrganizationAttachmentAuthorization;
63
+ export declare const parseOrganizationAttachmentAuthorization: (raw: unknown) => OrganizationAttachmentAuthorization;
64
+ export declare const parseResolvedOrganizationHandoff: (raw: unknown) => ResolvedOrganizationHandoff;
65
+ export declare const parseOrganizationAttachmentResolution: (raw: unknown) => OrganizationAttachmentResolution;
@@ -0,0 +1,161 @@
1
+ import { createHash } from "node:crypto";
2
+ import { assertOrdinaryJsonGraph, parseOpaqueTargetHandle, parseRunId, parseSelectedTargetReceipt } from "./contracts.js";
3
+ import { ORGANIZATION_ATTACHMENT_ERROR, parseOrganizationContainerId, parseOrganizationDeploymentLabels } from "./organizationAttachmentProvider.js";
4
+ export const ORGANIZATION_ATTACHMENT_AUTHORIZATION_VERSION = "spawnfile.target-organization-attachment.authorization.v1";
5
+ export const ORGANIZATION_HANDOFF_VERSION = "spawnfile.organization-handoff.v1";
6
+ const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/u;
7
+ const FINGERPRINT_PATTERN = /^sha256:[a-f0-9]{32}$/u;
8
+ const DEPLOYMENT_HANDLE_PATTERN = /^sf-oh1-[a-f0-9]{64}$/u;
9
+ const fail = () => { throw new Error(ORGANIZATION_ATTACHMENT_ERROR); };
10
+ const ordinary = (raw) => {
11
+ try {
12
+ assertOrdinaryJsonGraph(raw);
13
+ }
14
+ catch {
15
+ return fail();
16
+ }
17
+ };
18
+ const exactRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value)
19
+ && Object.getPrototypeOf(value) === Object.prototype;
20
+ const exactKeys = (value, expected) => {
21
+ const actual = Object.keys(value).sort();
22
+ const sorted = [...expected].sort();
23
+ return actual.length === sorted.length
24
+ && actual.every((key, index) => key === sorted[index]);
25
+ };
26
+ const digest = (value) => {
27
+ if (typeof value !== "string" || !DIGEST_PATTERN.test(value))
28
+ return fail();
29
+ return value;
30
+ };
31
+ const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
32
+ export const createOrganizationAttachmentAuthorization = (input) => {
33
+ const selected = parseSelectedTargetReceipt({
34
+ ...(exactRecord(input.selectedTarget) ? input.selectedTarget : {}),
35
+ version: "spawnfile.target-resource.selected-target.v1"
36
+ });
37
+ return Object.freeze({
38
+ descriptor_digest: digest(input.descriptorDigest),
39
+ operation_handle: parseOpaqueTargetHandle(input.operationHandle),
40
+ organization_handoff_handle: parseOpaqueTargetHandle(input.organizationHandoffHandle),
41
+ request_digest: digest(input.requestDigest),
42
+ run_id: parseRunId(input.runId),
43
+ selected_target: Object.freeze({ fingerprint: selected.fingerprint, handle: selected.handle }),
44
+ version: ORGANIZATION_ATTACHMENT_AUTHORIZATION_VERSION
45
+ });
46
+ };
47
+ export const parseOrganizationAttachmentAuthorization = (raw) => {
48
+ ordinary(raw);
49
+ if (!exactRecord(raw) || !exactKeys(raw, [
50
+ "descriptor_digest", "operation_handle", "organization_handoff_handle",
51
+ "request_digest", "run_id", "selected_target", "version"
52
+ ]) || raw.version !== ORGANIZATION_ATTACHMENT_AUTHORIZATION_VERSION
53
+ || !exactRecord(raw.selected_target)
54
+ || !exactKeys(raw.selected_target, ["fingerprint", "handle"])
55
+ || typeof raw.selected_target.fingerprint !== "string"
56
+ || !FINGERPRINT_PATTERN.test(raw.selected_target.fingerprint))
57
+ return fail();
58
+ return createOrganizationAttachmentAuthorization({
59
+ descriptorDigest: raw.descriptor_digest,
60
+ operationHandle: raw.operation_handle,
61
+ organizationHandoffHandle: raw.organization_handoff_handle,
62
+ requestDigest: raw.request_digest,
63
+ runId: raw.run_id,
64
+ selectedTarget: raw.selected_target
65
+ });
66
+ };
67
+ const handoffHandle = (input) => {
68
+ const canonical = [
69
+ "spawnfile.organization-handoff.v1\0",
70
+ input.run_id,
71
+ input.selected_target_receipt_digest,
72
+ input.network_attachment_handle,
73
+ input.binding_digest,
74
+ input.lifecycle_receipts.up,
75
+ input.lifecycle_receipts.export,
76
+ input.lifecycle_receipts.down
77
+ ].join("\n");
78
+ return `sf-oh1-${createHash("sha256").update(canonical, "utf8").digest("hex")}`;
79
+ };
80
+ export const parseResolvedOrganizationHandoff = (raw) => {
81
+ ordinary(raw);
82
+ if (!exactRecord(raw) || !exactKeys(raw, [
83
+ "binding_digest", "deployment_handle", "lifecycle_receipts",
84
+ "network_attachment_handle", "run_id", "selected_target_receipt_digest", "version"
85
+ ]) || raw.version !== ORGANIZATION_HANDOFF_VERSION
86
+ || typeof raw.deployment_handle !== "string"
87
+ || !DEPLOYMENT_HANDLE_PATTERN.test(raw.deployment_handle)
88
+ || !exactRecord(raw.lifecycle_receipts)
89
+ || !exactKeys(raw.lifecycle_receipts, ["down", "export", "up"])
90
+ || raw.lifecycle_receipts.down !== "spawnfile.down-receipt.v1"
91
+ || raw.lifecycle_receipts.export !== "spawnfile.export-index.v1"
92
+ || raw.lifecycle_receipts.up !== "spawnfile.up-receipt.v1")
93
+ return fail();
94
+ const body = {
95
+ binding_digest: digest(raw.binding_digest),
96
+ lifecycle_receipts: Object.freeze({
97
+ down: "spawnfile.down-receipt.v1",
98
+ export: "spawnfile.export-index.v1",
99
+ up: "spawnfile.up-receipt.v1"
100
+ }),
101
+ network_attachment_handle: parseOpaqueTargetHandle(raw.network_attachment_handle),
102
+ run_id: parseRunId(raw.run_id),
103
+ selected_target_receipt_digest: digest(raw.selected_target_receipt_digest)
104
+ };
105
+ if (raw.deployment_handle !== handoffHandle(body))
106
+ return fail();
107
+ return Object.freeze({
108
+ ...body,
109
+ deployment_handle: raw.deployment_handle,
110
+ version: ORGANIZATION_HANDOFF_VERSION
111
+ });
112
+ };
113
+ export const parseOrganizationAttachmentResolution = (raw) => {
114
+ ordinary(raw);
115
+ if (!exactRecord(raw) || !exactKeys(raw, [
116
+ "authorization", "descriptor_binding", "handoff",
117
+ "network_attachment", "selected_target_binding"
118
+ ]) || !exactRecord(raw.descriptor_binding)
119
+ || !exactKeys(raw.descriptor_binding, ["binding_digest", "descriptor_digest"])
120
+ || !exactRecord(raw.network_attachment)
121
+ || !exactKeys(raw.network_attachment, [
122
+ "container_id", "deployment_labels", "network_attachment_handle"
123
+ ]) || !exactRecord(raw.selected_target_binding)
124
+ || !exactKeys(raw.selected_target_binding, ["receipt", "receipt_digest"]))
125
+ return fail();
126
+ const authorization = parseOrganizationAttachmentAuthorization(raw.authorization);
127
+ const handoff = parseResolvedOrganizationHandoff(raw.handoff);
128
+ const receipt = parseSelectedTargetReceipt(raw.selected_target_binding.receipt);
129
+ const resolution = Object.freeze({
130
+ authorization,
131
+ descriptor_binding: Object.freeze({
132
+ binding_digest: digest(raw.descriptor_binding.binding_digest),
133
+ descriptor_digest: digest(raw.descriptor_binding.descriptor_digest)
134
+ }),
135
+ handoff,
136
+ network_attachment: Object.freeze({
137
+ container_id: parseOrganizationContainerId(raw.network_attachment.container_id),
138
+ deployment_labels: parseOrganizationDeploymentLabels(raw.network_attachment.deployment_labels),
139
+ network_attachment_handle: parseOpaqueTargetHandle(raw.network_attachment.network_attachment_handle)
140
+ }),
141
+ selected_target_binding: Object.freeze({
142
+ receipt,
143
+ receipt_digest: digest(raw.selected_target_binding.receipt_digest)
144
+ })
145
+ });
146
+ if (resolution.descriptor_binding.descriptor_digest !== authorization.descriptor_digest
147
+ || resolution.descriptor_binding.binding_digest !== handoff.binding_digest
148
+ || handoff.run_id !== authorization.run_id
149
+ || resolution.network_attachment.network_attachment_handle
150
+ !== handoff.network_attachment_handle
151
+ || resolution.network_attachment.deployment_labels["com.spawnfile.run_id"]
152
+ !== authorization.run_id
153
+ || resolution.selected_target_binding.receipt_digest
154
+ !== handoff.selected_target_receipt_digest
155
+ || !same({
156
+ fingerprint: resolution.selected_target_binding.receipt.fingerprint,
157
+ handle: resolution.selected_target_binding.receipt.handle
158
+ }, authorization.selected_target))
159
+ return fail();
160
+ return resolution;
161
+ };
@@ -0,0 +1,17 @@
1
+ import { type DockerOrganizationAttachmentExecutor, type DockerOrganizationAttachmentSpec } from "./organizationAttachmentProvider.js";
2
+ export interface OrganizationAttachmentLifecycleOptions {
3
+ readonly context: string;
4
+ readonly executor: DockerOrganizationAttachmentExecutor;
5
+ readonly signal?: AbortSignal;
6
+ readonly timeoutMs: number;
7
+ }
8
+ export declare const executeOrganizationAttachmentCommand: (args: string[], options: OrganizationAttachmentLifecycleOptions) => Promise<{
9
+ stderr: string;
10
+ stdout: string;
11
+ }>;
12
+ export declare const inspectNetwork: (spec: DockerOrganizationAttachmentSpec, options: OrganizationAttachmentLifecycleOptions) => Promise<string>;
13
+ export declare const inspectContainer: (spec: DockerOrganizationAttachmentSpec, options: OrganizationAttachmentLifecycleOptions) => Promise<{
14
+ readonly attached: boolean;
15
+ }>;
16
+ export declare const mutate: (operation: "connect" | "disconnect", networkId: string, containerId: string, options: OrganizationAttachmentLifecycleOptions) => Promise<void>;
17
+ export declare const detachExactOrganizationAttachment: (rawBinding: unknown, options: OrganizationAttachmentLifecycleOptions) => Promise<void>;
@@ -0,0 +1,101 @@
1
+ import { SpawnfileError } from "../shared/index.js";
2
+ import { ORGANIZATION_ATTACHMENT_ERROR, ORGANIZATION_NETWORK_INSPECTION_FORMAT, DockerOrganizationAttachmentProviderError, createDockerOrganizationAttachmentSpec, executeDockerOrganizationAttachment, parseExpectedOrganizationContainer, parseExpectedOrganizationNetwork } from "./organizationAttachmentProvider.js";
3
+ import { parseOrganizationAttachmentBinding } from "./organizationAttachmentStore.js";
4
+ const CONTEXT_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/u;
5
+ const fail = () => {
6
+ throw new SpawnfileError("runtime_error", ORGANIZATION_ATTACHMENT_ERROR);
7
+ };
8
+ const validOptions = (raw) => {
9
+ if (!raw || typeof raw.context !== "string" || !CONTEXT_PATTERN.test(raw.context)
10
+ || typeof raw.executor !== "function" || typeof raw.timeoutMs !== "number"
11
+ || !Number.isSafeInteger(raw.timeoutMs) || raw.timeoutMs < 1
12
+ || raw.timeoutMs > 120_000)
13
+ return fail();
14
+ return raw;
15
+ };
16
+ export const executeOrganizationAttachmentCommand = async (args, options) => executeDockerOrganizationAttachment({
17
+ args,
18
+ executor: options.executor,
19
+ signal: options.signal,
20
+ timeoutMs: options.timeoutMs
21
+ });
22
+ export const inspectNetwork = async (spec, options) => {
23
+ const result = await executeOrganizationAttachmentCommand([
24
+ "--context", options.context, "network", "inspect", "--format",
25
+ ORGANIZATION_NETWORK_INSPECTION_FORMAT, spec.network.name
26
+ ], options);
27
+ const id = parseExpectedOrganizationNetwork(result.stdout, spec);
28
+ if (result.stderr !== "" || id === null)
29
+ return fail();
30
+ return id;
31
+ };
32
+ export const inspectContainer = async (spec, options) => {
33
+ const result = await executeOrganizationAttachmentCommand([
34
+ "--context", options.context, "container", "inspect", "--format",
35
+ spec.containerInspectionFormat, spec.containerId
36
+ ], options);
37
+ const inspection = parseExpectedOrganizationContainer(result.stdout, spec);
38
+ if (result.stderr !== "" || inspection === null)
39
+ return fail();
40
+ return inspection;
41
+ };
42
+ const networkMutation = (operation, networkId, containerId, options) => executeOrganizationAttachmentCommand([
43
+ "--context", options.context, "network", operation, networkId, containerId
44
+ ], options);
45
+ export const mutate = async (operation, networkId, containerId, options) => {
46
+ const result = await networkMutation(operation, networkId, containerId, options);
47
+ if (result.stdout !== "" || result.stderr !== "")
48
+ return fail();
49
+ };
50
+ const specFor = (binding) => createDockerOrganizationAttachmentSpec({
51
+ containerId: binding.resolution.network_attachment.container_id,
52
+ dataNetworkOperationHandle: binding.data_network.operation_handle,
53
+ dataNetworkRequestDigest: binding.data_network.request_digest,
54
+ deploymentLabels: binding.resolution.network_attachment.deployment_labels,
55
+ operationHandle: binding.resolution.authorization.operation_handle,
56
+ organizationHandoffHandle: binding.resolution.authorization.organization_handoff_handle,
57
+ requestDigest: binding.resolution.authorization.request_digest,
58
+ runId: binding.resolution.authorization.run_id,
59
+ selectedTargetHandle: binding.resolution.authorization.selected_target.handle
60
+ });
61
+ const inspectContainerOrAbsent = async (spec, options) => {
62
+ try {
63
+ return await inspectContainer(spec, options);
64
+ }
65
+ catch (error) {
66
+ if (error instanceof DockerOrganizationAttachmentProviderError
67
+ && error.kind === "not_found")
68
+ return null;
69
+ throw error;
70
+ }
71
+ };
72
+ const proveNetwork = async (binding, spec, options) => {
73
+ if (await inspectNetwork(spec, options) !== binding.data_network.id)
74
+ return fail();
75
+ };
76
+ export const detachExactOrganizationAttachment = async (rawBinding, options) => {
77
+ // Parse the complete immutable authority record before any provider call.
78
+ const binding = parseOrganizationAttachmentBinding(rawBinding);
79
+ const checkedOptions = validOptions(options);
80
+ const spec = specFor(binding);
81
+ if (spec.resultHandle !== binding.attachment_handle)
82
+ return fail();
83
+ await proveNetwork(binding, spec, checkedOptions);
84
+ const before = await inspectContainerOrAbsent(spec, checkedOptions);
85
+ if (before === null || !before.attached)
86
+ return;
87
+ let mutationResult;
88
+ try {
89
+ mutationResult = await networkMutation("disconnect", binding.data_network.id, spec.containerId, checkedOptions);
90
+ }
91
+ catch {
92
+ // A thrown mutation is ambiguous. Reconciliation below is the only retry-like action.
93
+ }
94
+ if (mutationResult
95
+ && (mutationResult.stdout !== "" || mutationResult.stderr !== ""))
96
+ return fail();
97
+ const after = await inspectContainerOrAbsent(spec, checkedOptions);
98
+ if (after?.attached === true)
99
+ return fail();
100
+ await proveNetwork(binding, spec, checkedOptions);
101
+ };