@omnitron-dev/omnitron 0.3.0 → 0.3.1

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 (374) hide show
  1. package/README.md +4 -0
  2. package/dist/BUILD.json +2 -2
  3. package/dist/cli/omnitron.js +26 -2
  4. package/dist/cli/omnitron.js.map +1 -1
  5. package/dist/cluster/mesh-link.js +1 -1
  6. package/dist/cluster/slave-connector.d.ts +2 -2
  7. package/dist/cluster/slave-connector.js +1 -1
  8. package/dist/commands/deploy.d.ts +4 -4
  9. package/dist/commands/deploy.js +4 -4
  10. package/dist/commands/discover.d.ts +2 -2
  11. package/dist/commands/discover.js +2 -2
  12. package/dist/commands/fleet-asking.d.ts +2 -2
  13. package/dist/commands/fleet-asking.js +2 -2
  14. package/dist/commands/fleet-recover.d.ts +2 -0
  15. package/dist/commands/fleet-recover.d.ts.map +1 -0
  16. package/dist/commands/fleet-recover.js +30 -0
  17. package/dist/commands/fleet-recover.js.map +1 -0
  18. package/dist/commands/host-ingress.d.ts +3 -0
  19. package/dist/commands/host-ingress.d.ts.map +1 -0
  20. package/dist/commands/host-ingress.js +31 -0
  21. package/dist/commands/host-ingress.js.map +1 -0
  22. package/dist/commands/infra.d.ts +2 -2
  23. package/dist/commands/infra.js +7 -7
  24. package/dist/commands/infra.js.map +1 -1
  25. package/dist/commands/logs.d.ts +1 -1
  26. package/dist/commands/logs.js +3 -3
  27. package/dist/commands/logs.js.map +1 -1
  28. package/dist/commands/node.d.ts +2 -14
  29. package/dist/commands/node.d.ts.map +1 -1
  30. package/dist/commands/node.js +33 -22
  31. package/dist/commands/node.js.map +1 -1
  32. package/dist/commands/pipeline.d.ts.map +1 -1
  33. package/dist/commands/pipeline.js +8 -1
  34. package/dist/commands/pipeline.js.map +1 -1
  35. package/dist/commands/project.d.ts +2 -2
  36. package/dist/commands/project.js +2 -2
  37. package/dist/commands/release.d.ts +1 -1
  38. package/dist/commands/release.js +4 -4
  39. package/dist/commands/release.js.map +1 -1
  40. package/dist/commands/remote.d.ts +3 -3
  41. package/dist/commands/remote.js +3 -3
  42. package/dist/commands/tor.d.ts +1 -1
  43. package/dist/commands/tor.js +2 -2
  44. package/dist/config/types.d.ts +9 -6
  45. package/dist/config/types.d.ts.map +1 -1
  46. package/dist/daemon/daemon-entry.js +1 -1
  47. package/dist/daemon/daemon-entry.js.map +1 -1
  48. package/dist/daemon/daemon.d.ts +5 -19
  49. package/dist/daemon/daemon.d.ts.map +1 -1
  50. package/dist/daemon/daemon.js +54 -51
  51. package/dist/daemon/daemon.js.map +1 -1
  52. package/dist/daemon/daemon.module.d.ts.map +1 -1
  53. package/dist/daemon/daemon.module.js +3 -5
  54. package/dist/daemon/daemon.module.js.map +1 -1
  55. package/dist/daemon/daemon.rpc-service.d.ts +2 -2
  56. package/dist/daemon/daemon.rpc-service.js +6 -6
  57. package/dist/daemon/daemon.rpc-service.js.map +1 -1
  58. package/dist/execution/data-channel.d.ts +1 -1
  59. package/dist/execution/data-channel.js +1 -1
  60. package/dist/execution/execution.service.d.ts +10 -3
  61. package/dist/execution/execution.service.d.ts.map +1 -1
  62. package/dist/execution/execution.service.js +101 -44
  63. package/dist/execution/execution.service.js.map +1 -1
  64. package/dist/infrastructure/bare-metal-plan.js +1 -1
  65. package/dist/infrastructure/bare-metal-plan.js.map +1 -1
  66. package/dist/infrastructure/config-payload.d.ts +4 -4
  67. package/dist/infrastructure/config-payload.js +4 -4
  68. package/dist/infrastructure/container-runtime.d.ts +2 -10
  69. package/dist/infrastructure/container-runtime.d.ts.map +1 -1
  70. package/dist/infrastructure/container-runtime.js +41 -20
  71. package/dist/infrastructure/container-runtime.js.map +1 -1
  72. package/dist/infrastructure/gateway-redis-db.d.ts +2 -2
  73. package/dist/infrastructure/gateway-redis-db.js +2 -2
  74. package/dist/infrastructure/host-ingress-config.d.ts +12 -0
  75. package/dist/infrastructure/host-ingress-config.d.ts.map +1 -0
  76. package/dist/infrastructure/host-ingress-config.js +197 -0
  77. package/dist/infrastructure/host-ingress-config.js.map +1 -0
  78. package/dist/infrastructure/host-ingress-lock.d.ts +4 -0
  79. package/dist/infrastructure/host-ingress-lock.d.ts.map +1 -0
  80. package/dist/infrastructure/host-ingress-lock.js +36 -0
  81. package/dist/infrastructure/host-ingress-lock.js.map +1 -0
  82. package/dist/infrastructure/host-ingress-runtime.d.ts +25 -0
  83. package/dist/infrastructure/host-ingress-runtime.d.ts.map +1 -0
  84. package/dist/infrastructure/host-ingress-runtime.js +114 -0
  85. package/dist/infrastructure/host-ingress-runtime.js.map +1 -0
  86. package/dist/infrastructure/host-ingress-takeover.d.ts +18 -0
  87. package/dist/infrastructure/host-ingress-takeover.d.ts.map +1 -0
  88. package/dist/infrastructure/host-ingress-takeover.js +142 -0
  89. package/dist/infrastructure/host-ingress-takeover.js.map +1 -0
  90. package/dist/infrastructure/host-ingress-types.d.ts +173 -0
  91. package/dist/infrastructure/host-ingress-types.d.ts.map +1 -0
  92. package/dist/infrastructure/host-ingress-types.js +2 -0
  93. package/dist/infrastructure/host-ingress-types.js.map +1 -0
  94. package/dist/infrastructure/host-ingress.service.d.ts +47 -0
  95. package/dist/infrastructure/host-ingress.service.d.ts.map +1 -0
  96. package/dist/infrastructure/host-ingress.service.js +514 -0
  97. package/dist/infrastructure/host-ingress.service.js.map +1 -0
  98. package/dist/infrastructure/infrastructure.service.d.ts +21 -5
  99. package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
  100. package/dist/infrastructure/infrastructure.service.js +91 -10
  101. package/dist/infrastructure/infrastructure.service.js.map +1 -1
  102. package/dist/infrastructure/orphan-containers.d.ts +7 -7
  103. package/dist/infrastructure/orphan-containers.js +6 -6
  104. package/dist/infrastructure/presets/minio.js +1 -1
  105. package/dist/infrastructure/presets/minio.js.map +1 -1
  106. package/dist/infrastructure/provisioning-outcome.d.ts +1 -1
  107. package/dist/infrastructure/provisioning-outcome.js +1 -1
  108. package/dist/infrastructure/service-binding.js +1 -1
  109. package/dist/infrastructure/service-resolver.d.ts +10 -4
  110. package/dist/infrastructure/service-resolver.d.ts.map +1 -1
  111. package/dist/infrastructure/service-resolver.js +88 -45
  112. package/dist/infrastructure/service-resolver.js.map +1 -1
  113. package/dist/infrastructure/shipped-config.js +4 -4
  114. package/dist/infrastructure/stack-infra-manager.d.ts +10 -1
  115. package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
  116. package/dist/infrastructure/stack-infra-manager.js +53 -43
  117. package/dist/infrastructure/stack-infra-manager.js.map +1 -1
  118. package/dist/infrastructure/types.d.ts +8 -6
  119. package/dist/infrastructure/types.d.ts.map +1 -1
  120. package/dist/monitoring/log-line.d.ts +3 -3
  121. package/dist/monitoring/log-line.js +3 -3
  122. package/dist/monitoring/log-manager.d.ts +3 -3
  123. package/dist/monitoring/log-manager.js +3 -3
  124. package/dist/operations.d.ts +16 -0
  125. package/dist/operations.d.ts.map +1 -0
  126. package/dist/operations.js +13 -0
  127. package/dist/operations.js.map +1 -0
  128. package/dist/orchestrator/app-handle.d.ts +3 -3
  129. package/dist/orchestrator/app-handle.js +3 -3
  130. package/dist/orchestrator/bootstrap-loader.d.ts +2 -2
  131. package/dist/orchestrator/bootstrap-loader.js +3 -3
  132. package/dist/orchestrator/bootstrap-loader.js.map +1 -1
  133. package/dist/orchestrator/bootstrap-process.d.ts +1 -1
  134. package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
  135. package/dist/orchestrator/bootstrap-process.js +3 -2
  136. package/dist/orchestrator/bootstrap-process.js.map +1 -1
  137. package/dist/orchestrator/build-service.d.ts +6 -12
  138. package/dist/orchestrator/build-service.d.ts.map +1 -1
  139. package/dist/orchestrator/build-service.js +120 -83
  140. package/dist/orchestrator/build-service.js.map +1 -1
  141. package/dist/orchestrator/call-exposed-service.js +1 -1
  142. package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
  143. package/dist/orchestrator/classic-launcher.js +6 -1
  144. package/dist/orchestrator/classic-launcher.js.map +1 -1
  145. package/dist/orchestrator/file-watcher.d.ts +1 -0
  146. package/dist/orchestrator/file-watcher.d.ts.map +1 -1
  147. package/dist/orchestrator/file-watcher.js +14 -3
  148. package/dist/orchestrator/file-watcher.js.map +1 -1
  149. package/dist/orchestrator/http-routes.d.ts +4 -0
  150. package/dist/orchestrator/http-routes.d.ts.map +1 -0
  151. package/dist/orchestrator/http-routes.js +19 -0
  152. package/dist/orchestrator/http-routes.js.map +1 -0
  153. package/dist/orchestrator/orchestrator.service.d.ts +18 -4
  154. package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
  155. package/dist/orchestrator/orchestrator.service.js +151 -110
  156. package/dist/orchestrator/orchestrator.service.js.map +1 -1
  157. package/dist/orchestrator/service-router.d.ts +1 -1
  158. package/dist/orchestrator/service-router.js +1 -1
  159. package/dist/orchestrator/topology-query.d.ts +1 -1
  160. package/dist/orchestrator/topology-query.js +1 -1
  161. package/dist/project/artifact-builder.js +2 -2
  162. package/dist/project/artifact-builder.js.map +1 -1
  163. package/dist/project/build-decision.d.ts +1 -1
  164. package/dist/project/build-decision.js +1 -1
  165. package/dist/project/config-resolver.js +1 -1
  166. package/dist/project/config-resolver.js.map +1 -1
  167. package/dist/project/declared-config.d.ts +2 -2
  168. package/dist/project/declared-config.js +2 -2
  169. package/dist/project/deploy-phases.d.ts +1 -1
  170. package/dist/project/deploy-phases.js +1 -1
  171. package/dist/project/exec-in-group.d.ts +1 -1
  172. package/dist/project/exec-in-group.js +1 -1
  173. package/dist/project/node-app-config.d.ts +2 -2
  174. package/dist/project/node-app-config.js +2 -2
  175. package/dist/project/node-app-config.js.map +1 -1
  176. package/dist/project/node-app-health.d.ts +1 -1
  177. package/dist/project/node-app-health.js +1 -1
  178. package/dist/project/operator-account.d.ts +9 -3
  179. package/dist/project/operator-account.d.ts.map +1 -1
  180. package/dist/project/operator-account.js +9 -9
  181. package/dist/project/operator-account.js.map +1 -1
  182. package/dist/project/registry.d.ts.map +1 -1
  183. package/dist/project/registry.js +4 -22
  184. package/dist/project/registry.js.map +1 -1
  185. package/dist/project/stack-env.d.ts +1 -1
  186. package/dist/project/stack-env.js +1 -1
  187. package/dist/project/stand-containers.d.ts +9 -2
  188. package/dist/project/stand-containers.d.ts.map +1 -1
  189. package/dist/project/stand-containers.js +17 -17
  190. package/dist/project/stand-containers.js.map +1 -1
  191. package/dist/release/artifact-store.d.ts +1 -1
  192. package/dist/release/artifact-store.d.ts.map +1 -1
  193. package/dist/release/artifact-store.js +1 -1
  194. package/dist/release/artifact-store.js.map +1 -1
  195. package/dist/release/attest-on-node.d.ts +3 -2
  196. package/dist/release/attest-on-node.d.ts.map +1 -1
  197. package/dist/release/attest-on-node.js +6 -6
  198. package/dist/release/attest-on-node.js.map +1 -1
  199. package/dist/release/attest.d.ts +3 -3
  200. package/dist/release/attest.js +1 -1
  201. package/dist/release/build-run.d.ts +2 -2
  202. package/dist/release/build-run.js +4 -4
  203. package/dist/release/build-run.js.map +1 -1
  204. package/dist/release/builder.d.ts +1 -1
  205. package/dist/release/builder.d.ts.map +1 -1
  206. package/dist/release/builder.js +1 -1
  207. package/dist/release/builder.js.map +1 -1
  208. package/dist/release/daemon-omni.d.ts +1 -1
  209. package/dist/release/daemon-omni.js +1 -1
  210. package/dist/release/definition-inputs.d.ts +1 -1
  211. package/dist/release/definition-inputs.js +1 -1
  212. package/dist/release/layout.d.ts +2 -2
  213. package/dist/release/layout.js +2 -2
  214. package/dist/release/manifest.d.ts +1 -1
  215. package/dist/release/manifest.js +1 -1
  216. package/dist/release/publish.d.ts +1 -1
  217. package/dist/release/publish.js +1 -1
  218. package/dist/release/store.d.ts +1 -1
  219. package/dist/release/store.d.ts.map +1 -1
  220. package/dist/release/store.js +3 -3
  221. package/dist/release/store.js.map +1 -1
  222. package/dist/services/alert.service.d.ts +2 -2
  223. package/dist/services/alert.service.js +2 -2
  224. package/dist/services/backup-pipeline.d.ts +1 -1
  225. package/dist/services/backup-pipeline.js +1 -1
  226. package/dist/services/backup.service.d.ts +3 -3
  227. package/dist/services/backup.service.js +3 -3
  228. package/dist/services/bundle-builder.d.ts +15 -12
  229. package/dist/services/bundle-builder.d.ts.map +1 -1
  230. package/dist/services/bundle-builder.js +124 -48
  231. package/dist/services/bundle-builder.js.map +1 -1
  232. package/dist/services/discovery.service.d.ts +1 -1
  233. package/dist/services/discovery.service.js +1 -1
  234. package/dist/services/host-operation-barrier.d.ts +8 -0
  235. package/dist/services/host-operation-barrier.d.ts.map +1 -0
  236. package/dist/services/host-operation-barrier.js +44 -0
  237. package/dist/services/host-operation-barrier.js.map +1 -0
  238. package/dist/services/host-upgrade.d.ts +129 -0
  239. package/dist/services/host-upgrade.d.ts.map +1 -0
  240. package/dist/services/host-upgrade.js +352 -0
  241. package/dist/services/host-upgrade.js.map +1 -0
  242. package/dist/services/infrastructure.rpc-service.d.ts +16 -1
  243. package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
  244. package/dist/services/infrastructure.rpc-service.js +71 -10
  245. package/dist/services/infrastructure.rpc-service.js.map +1 -1
  246. package/dist/services/local-bundle.d.ts +9 -0
  247. package/dist/services/local-bundle.d.ts.map +1 -1
  248. package/dist/services/local-bundle.js +11 -2
  249. package/dist/services/local-bundle.js.map +1 -1
  250. package/dist/services/log-collector.service.d.ts +1 -1
  251. package/dist/services/log-collector.service.js +1 -1
  252. package/dist/services/maintenance-lock.d.ts +2 -2
  253. package/dist/services/maintenance-lock.d.ts.map +1 -1
  254. package/dist/services/maintenance-lock.js +1 -1
  255. package/dist/services/migration-output.d.ts +2 -2
  256. package/dist/services/migration-output.js +2 -2
  257. package/dist/services/node-deploy-lease.d.ts +19 -2
  258. package/dist/services/node-deploy-lease.d.ts.map +1 -1
  259. package/dist/services/node-deploy-lease.js +84 -10
  260. package/dist/services/node-deploy-lease.js.map +1 -1
  261. package/dist/services/node-manager.rpc-service.d.ts +6 -1
  262. package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
  263. package/dist/services/node-manager.rpc-service.js +25 -1
  264. package/dist/services/node-manager.rpc-service.js.map +1 -1
  265. package/dist/services/node-manager.service.d.ts +1 -1
  266. package/dist/services/node-manager.service.js +1 -1
  267. package/dist/services/node-upgrade.d.ts +1 -1
  268. package/dist/services/pipeline.rpc-service.d.ts +4 -0
  269. package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
  270. package/dist/services/pipeline.rpc-service.js +9 -0
  271. package/dist/services/pipeline.rpc-service.js.map +1 -1
  272. package/dist/services/pipeline.service.d.ts +2 -0
  273. package/dist/services/pipeline.service.d.ts.map +1 -1
  274. package/dist/services/pipeline.service.js +12 -0
  275. package/dist/services/pipeline.service.js.map +1 -1
  276. package/dist/services/project.rpc-service.d.ts +7 -0
  277. package/dist/services/project.rpc-service.d.ts.map +1 -1
  278. package/dist/services/project.rpc-service.js +11 -0
  279. package/dist/services/project.rpc-service.js.map +1 -1
  280. package/dist/services/project.service.d.ts +21 -11
  281. package/dist/services/project.service.d.ts.map +1 -1
  282. package/dist/services/project.service.js +74 -59
  283. package/dist/services/project.service.js.map +1 -1
  284. package/dist/services/redeploy-decision.d.ts +2 -2
  285. package/dist/services/redeploy-decision.js +1 -1
  286. package/dist/services/release.rpc-service.d.ts +1 -1
  287. package/dist/services/release.rpc-service.js +1 -1
  288. package/dist/services/remote-deployer.service.d.ts +27 -16
  289. package/dist/services/remote-deployer.service.d.ts.map +1 -1
  290. package/dist/services/remote-deployer.service.js +269 -101
  291. package/dist/services/remote-deployer.service.js.map +1 -1
  292. package/dist/services/remote-provisioner.d.ts +2 -0
  293. package/dist/services/remote-provisioner.d.ts.map +1 -1
  294. package/dist/services/remote-provisioner.js +1 -1
  295. package/dist/services/remote-provisioner.js.map +1 -1
  296. package/dist/services/static-carry-forward.d.ts +26 -1
  297. package/dist/services/static-carry-forward.d.ts.map +1 -1
  298. package/dist/services/static-carry-forward.js +275 -1
  299. package/dist/services/static-carry-forward.js.map +1 -1
  300. package/dist/shared/dto/nodes.d.ts +2 -2
  301. package/dist/shared/dto/services.d.ts +27 -0
  302. package/dist/shared/dto/services.d.ts.map +1 -1
  303. package/dist/shared/local-infra-host.d.ts +2 -2
  304. package/dist/shared/local-infra-host.js +2 -2
  305. package/dist/shared/release-reading.d.ts +1 -1
  306. package/dist/shared/release-reading.js +1 -1
  307. package/package.json +16 -12
  308. package/webapp/dist/BUILD.json +2 -2
  309. package/webapp/dist/assets/FormControlLabel-BbSxpQwN.js +1 -0
  310. package/webapp/dist/assets/{Grid-BZ7xhoHQ.js → Grid-DizFZYue.js} +1 -1
  311. package/webapp/dist/assets/{Switch-DGSAxQPM.js → Switch-Bfiqzx8l.js} +1 -1
  312. package/webapp/dist/assets/alerts-DH_RVRS3.js +1 -0
  313. package/webapp/dist/assets/apps-B96355sz.js +1 -0
  314. package/webapp/dist/assets/audit-CYGtbi4k.js +1 -0
  315. package/webapp/dist/assets/client-BmqFExWT.js +1 -0
  316. package/webapp/dist/assets/containers-B_TpThln.js +2 -0
  317. package/webapp/dist/assets/dashboard-DHf2_65N.js +1 -0
  318. package/webapp/dist/assets/dashboard-builder-CWY2pjeG.js +1 -0
  319. package/webapp/dist/assets/{deploy-release-dialog-D6C-XcKY.js → deploy-release-dialog-Dp-zpSAd.js} +1 -1
  320. package/webapp/dist/assets/deployments-tJI6O3fK.js +1 -0
  321. package/webapp/dist/assets/detail-B2zP1Hto.js +8 -0
  322. package/webapp/dist/assets/detail-CoIrwmsy.js +1 -0
  323. package/webapp/dist/assets/detail-DWaGaOtL.js +2 -0
  324. package/webapp/dist/assets/index-Dvo0iprx.css +1 -0
  325. package/webapp/dist/assets/index-vMnY_4jR.js +412 -0
  326. package/webapp/dist/assets/logs-DTRjOfX8.js +12 -0
  327. package/webapp/dist/assets/maplibre-gl-DowHoZAx.js +814 -0
  328. package/webapp/dist/assets/{metrics-CQgjz2Lz.js → metrics-UCajtdox.js} +2 -2
  329. package/webapp/dist/assets/nodes-DuTVU0f6.js +7 -0
  330. package/webapp/dist/assets/pipelines-C8BeDcAl.js +4 -0
  331. package/webapp/dist/assets/projects-Dp_zFfLY.js +1 -0
  332. package/webapp/dist/assets/react-DlmbjZJV.js +1 -0
  333. package/webapp/dist/assets/react-apexcharts.esm-C8pn45ml.js +97 -0
  334. package/webapp/dist/assets/{release-bits-Dj4EOhhb.js → release-bits-BzTKz5fM.js} +1 -1
  335. package/webapp/dist/assets/release-build-panel-DcW9YcXQ.js +1 -0
  336. package/webapp/dist/assets/releases-B4hcr1bE.js +2 -0
  337. package/webapp/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  338. package/webapp/dist/assets/settings-DIteZTbe.js +1 -0
  339. package/webapp/dist/assets/sign-in-D4kMBOHp.js +1 -0
  340. package/webapp/dist/assets/stacks-Brnf-EB7.js +1 -0
  341. package/webapp/dist/assets/{system-info-BtE3dgfw.js → system-info-CFDNVKkU.js} +1 -1
  342. package/webapp/dist/assets/topology-7WeTUsDN.js +12 -0
  343. package/webapp/dist/assets/traces-9c3gwCN-.js +1 -0
  344. package/webapp/dist/assets/{use-stack-context-CZUgPq88.js → use-stack-context-CnA5FTHu.js} +1 -1
  345. package/webapp/dist/index.html +6 -6
  346. package/webapp/dist/assets/FormControlLabel-BrH2diyl.js +0 -1
  347. package/webapp/dist/assets/alerts-sXqHJbsa.js +0 -1
  348. package/webapp/dist/assets/apps-B_Ah8Flh.js +0 -1
  349. package/webapp/dist/assets/audit-YXihwyui.js +0 -1
  350. package/webapp/dist/assets/client-CGbBvy9k.js +0 -1
  351. package/webapp/dist/assets/containers-Di4NOTLf.js +0 -2
  352. package/webapp/dist/assets/dashboard-Cfuf95N3.js +0 -1
  353. package/webapp/dist/assets/dashboard-builder-CowaYb-M.js +0 -1
  354. package/webapp/dist/assets/deployments-ChTq5kCw.js +0 -1
  355. package/webapp/dist/assets/detail-BsGWv7Dj.js +0 -1
  356. package/webapp/dist/assets/detail-CyVf_cw5.js +0 -2
  357. package/webapp/dist/assets/detail-D027j6aO.js +0 -8
  358. package/webapp/dist/assets/index-B8AHIPc-.css +0 -1
  359. package/webapp/dist/assets/index-DiZbrwxT.js +0 -414
  360. package/webapp/dist/assets/logs-L2b8Oqmo.js +0 -12
  361. package/webapp/dist/assets/maplibre-gl-MlmG2kbn.js +0 -801
  362. package/webapp/dist/assets/nodes-Nwia2Ty6.js +0 -7
  363. package/webapp/dist/assets/pipelines-DCu_rXOr.js +0 -4
  364. package/webapp/dist/assets/projects-Bb4aV76h.js +0 -1
  365. package/webapp/dist/assets/react-CwJFpaho.js +0 -1
  366. package/webapp/dist/assets/react-apexcharts.esm-Dy0Fez42.js +0 -1956
  367. package/webapp/dist/assets/release-build-panel-D6OCVlhT.js +0 -1
  368. package/webapp/dist/assets/releases-CnAt3yO6.js +0 -2
  369. package/webapp/dist/assets/rolldown-runtime-hePW80VL.js +0 -1
  370. package/webapp/dist/assets/settings-DU-mjiwb.js +0 -1
  371. package/webapp/dist/assets/sign-in-Bcvjrr4C.js +0 -1
  372. package/webapp/dist/assets/stacks-B-e8p50I.js +0 -1
  373. package/webapp/dist/assets/topology-Cwch-uF1.js +0 -12
  374. package/webapp/dist/assets/traces-BbShR-4P.js +0 -1
@@ -0,0 +1,514 @@
1
+ import path from 'node:path';
2
+ import os from 'node:os';
3
+ import { constants } from 'node:fs';
4
+ import * as fs from 'node:fs/promises';
5
+ import { createHash, createPrivateKey, randomUUID, X509Certificate } from 'node:crypto';
6
+ import { checkIngressConflicts, ingressOwner, ingressOwnerKey, normalizeIngressApplication, normalizeIngressSettings, renderHostIngress } from './host-ingress-config.js';
7
+ import { normalizeIngressTakeover, normalizeIngressTakeoverSnapshot } from './host-ingress-takeover.js';
8
+ import { DockerHostIngressRuntime } from './host-ingress-runtime.js';
9
+ import { withIngressLock } from './host-ingress-lock.js';
10
+ const digest = (value) => createHash('sha256').update(value).digest('hex');
11
+ const generationPattern = /^[1-9][0-9]*-[a-f0-9]{16}$/;
12
+ export function ingressOwnerRevision(app) { return digest(JSON.stringify(app)); }
13
+ async function exists(file) { try {
14
+ await fs.lstat(file);
15
+ return true;
16
+ }
17
+ catch (e) {
18
+ if (e.code === 'ENOENT')
19
+ return false;
20
+ throw e;
21
+ } }
22
+ async function syncDirectory(directory) { const fd = await fs.open(directory, 'r'); try {
23
+ await fd.sync();
24
+ }
25
+ finally {
26
+ await fd.close();
27
+ } }
28
+ async function durableFile(file, contents) {
29
+ const temp = `${file}.${randomUUID()}.tmp`;
30
+ const fd = await fs.open(temp, 'wx', 0o600);
31
+ try {
32
+ await fd.writeFile(contents);
33
+ await fd.sync();
34
+ }
35
+ finally {
36
+ await fd.close();
37
+ }
38
+ try {
39
+ await fs.rename(temp, file);
40
+ await syncDirectory(path.dirname(file));
41
+ }
42
+ finally {
43
+ await fs.rm(temp, { force: true });
44
+ }
45
+ }
46
+ /** Host-owned state; neither daemon shutdown nor app teardown removes this service. */
47
+ export class HostIngressService {
48
+ lock;
49
+ root;
50
+ runtime;
51
+ constructor(root = path.join(os.homedir(), '.omnitron', 'host-ingress'), runtime, lock = withIngressLock) {
52
+ this.lock = lock;
53
+ this.root = path.resolve(root);
54
+ if (/[\0\r\n,]/.test(this.root))
55
+ throw new Error('Invalid host ingress state root');
56
+ this.runtime = runtime ?? new DockerHostIngressRuntime(this.root);
57
+ }
58
+ file(name) { return path.join(this.root, name); }
59
+ async locked(body) {
60
+ const created = await fs.mkdir(this.root, { recursive: true, mode: 0o700 });
61
+ // Persist newly created directory entries too, before any transaction can stop an origin.
62
+ if (created) {
63
+ for (let directory = this.root;; directory = path.dirname(directory)) {
64
+ await syncDirectory(path.dirname(directory));
65
+ if (directory === created)
66
+ break;
67
+ }
68
+ }
69
+ return this.lock(this.file('publication.lock'), body);
70
+ }
71
+ async settings() {
72
+ try {
73
+ return normalizeIngressSettings(JSON.parse(await fs.readFile(this.file('settings.json'), 'utf8')));
74
+ }
75
+ catch (e) {
76
+ if (e.code === 'ENOENT')
77
+ return null;
78
+ throw e;
79
+ }
80
+ }
81
+ async requiredSettings() { const settings = await this.settings(); if (!settings)
82
+ throw new Error('Host ingress is not configured'); return settings; }
83
+ async configure(value) {
84
+ const settings = normalizeIngressSettings(value);
85
+ return this.locked(async () => {
86
+ const previous = await this.settings();
87
+ if (previous && JSON.stringify(previous) !== JSON.stringify(settings))
88
+ throw new Error('Host ingress settings are immutable; migrate or upgrade the host explicitly');
89
+ if (!previous)
90
+ await durableFile(this.file('settings.json'), JSON.stringify(settings, null, 2) + '\n');
91
+ return { configured: true, settings };
92
+ });
93
+ }
94
+ async currentGeneration() {
95
+ let link;
96
+ try {
97
+ link = await fs.readlink(this.file('current'));
98
+ }
99
+ catch (e) {
100
+ if (e.code === 'ENOENT')
101
+ return null;
102
+ throw new Error(`Invalid host ingress current pointer: ${String(e)}`);
103
+ }
104
+ if (!/^generations\/[1-9][0-9]*-[a-f0-9]{16}$/.test(link))
105
+ throw new Error('Invalid host ingress current pointer');
106
+ return path.posix.basename(link);
107
+ }
108
+ generation(settings, sequence, applications) {
109
+ return `${sequence}-${digest(JSON.stringify({ settings, sequence, applications })).slice(0, 16)}`;
110
+ }
111
+ async manifest(settings, generation) {
112
+ if (!generationPattern.test(generation))
113
+ throw new Error('Invalid ingress generation');
114
+ const raw = JSON.parse(await fs.readFile(this.file(`generations/${generation}/manifest.json`), 'utf8'));
115
+ if (raw.version !== 1 || raw.generation !== generation || !Number.isSafeInteger(raw.sequence) || raw.sequence < 1 || !Array.isArray(raw.applications)
116
+ || Object.keys(raw).sort().join(',') !== 'applications,generation,sequence,version')
117
+ throw new Error('Invalid ingress manifest');
118
+ const applications = raw.applications.map((app) => {
119
+ if (!Array.isArray(app.routes))
120
+ throw new Error('Invalid ingress routes');
121
+ const normalized = normalizeIngressApplication({ ...app, routes: app.routes.map(({ certificateObject: _object, ...route }) => route) });
122
+ const routes = normalized.routes.map((route) => {
123
+ const original = app.routes.find((r) => JSON.stringify(r.domains) === JSON.stringify(route.domains));
124
+ if (!original || !/^[a-f0-9]{64}$/.test(original.certificateObject))
125
+ throw new Error('Invalid certificate snapshot');
126
+ return { ...route, certificateObject: original.certificateObject };
127
+ });
128
+ return { ...normalized, routes };
129
+ });
130
+ applications.sort((a, b) => ingressOwnerKey(a.owner).localeCompare(ingressOwnerKey(b.owner)));
131
+ checkIngressConflicts(settings, applications);
132
+ if (this.generation(settings, raw.sequence, applications) !== generation || JSON.stringify(applications) !== JSON.stringify(raw.applications))
133
+ throw new Error('Ingress manifest content hash mismatch');
134
+ const manifest = { version: 1, generation, sequence: raw.sequence, applications };
135
+ if ((await fs.readFile(this.file(`generations/${generation}/nginx.conf`), 'utf8')) !== renderHostIngress(settings, manifest))
136
+ throw new Error('Ingress configuration content mismatch');
137
+ await this.verifyCertificates(manifest);
138
+ return manifest;
139
+ }
140
+ async verifyCertificates(manifest) {
141
+ const seen = new Set();
142
+ for (const app of manifest.applications)
143
+ for (const route of app.routes) {
144
+ const object = route.certificateObject;
145
+ if (seen.has(object))
146
+ continue;
147
+ seen.add(object);
148
+ const certificate = await this.source(this.file('certificates'), `${object}/certificate.pem`);
149
+ const key = await this.source(this.file('certificates'), `${object}/private-key.pem`);
150
+ if (createHash('sha256').update(certificate).update('\0').update(key).digest('hex') !== object)
151
+ throw new Error('TLS snapshot content hash mismatch');
152
+ }
153
+ }
154
+ async status() {
155
+ const settings = await this.settings();
156
+ const generation = await this.currentGeneration();
157
+ if (!settings && generation)
158
+ throw new Error('Ingress settings missing for existing generation');
159
+ const manifest = settings && generation ? await this.manifest(settings, generation) : null;
160
+ return { configured: !!settings, settings, generation, applications: manifest?.applications ?? [], ownerRevisions: (manifest?.applications ?? []).map((app) => ({ owner: app.owner, revision: ingressOwnerRevision(app) })), takeover: await this.takeoverRecord(), observedGeneration: settings ? await this.runtime.observed(settings) : null, recoveryPending: await exists(this.file('pending.json')) };
161
+ }
162
+ async pointer(generation) {
163
+ if (generation === null) {
164
+ await fs.rm(this.file('current'), { force: true });
165
+ await syncDirectory(this.root);
166
+ return;
167
+ }
168
+ if (!generationPattern.test(generation))
169
+ throw new Error('Invalid ingress pointer target');
170
+ const temp = this.file(`current.${randomUUID()}.tmp`);
171
+ await fs.symlink(`generations/${generation}`, temp);
172
+ try {
173
+ await fs.rename(temp, this.file('current'));
174
+ await syncDirectory(this.root);
175
+ }
176
+ finally {
177
+ await fs.rm(temp, { force: true });
178
+ }
179
+ }
180
+ async clearJournal() { await fs.rm(this.file('pending.json')); await syncDirectory(this.root); }
181
+ async restore(settings, generation) {
182
+ if (generation) {
183
+ await this.manifest(settings, generation);
184
+ await this.runtime.validate(settings, generation);
185
+ }
186
+ await this.pointer(generation);
187
+ if (generation) {
188
+ await this.runtime.activate(settings);
189
+ await this.runtime.acknowledge(settings, generation);
190
+ }
191
+ else
192
+ await this.runtime.remove(settings);
193
+ }
194
+ async takeoverRecord() {
195
+ if (!(await exists(this.file('takeover.json'))))
196
+ return null;
197
+ const raw = JSON.parse(await fs.readFile(this.file('takeover.json'), 'utf8'));
198
+ if (!generationPattern.test(raw.generation) || !['committed', 'rolled-back'].includes(raw.outcome) || Object.keys(raw).sort().join(',') !== 'generation,outcome,snapshot')
199
+ throw new Error('Invalid takeover receipt');
200
+ const snapshot = normalizeIngressTakeoverSnapshot(raw.snapshot);
201
+ if (JSON.stringify(snapshot) !== JSON.stringify(raw.snapshot))
202
+ throw new Error('Invalid takeover snapshot');
203
+ return { generation: raw.generation, snapshot, outcome: raw.outcome };
204
+ }
205
+ async recordTakeover(journal, outcome) {
206
+ if (journal.takeover)
207
+ await durableFile(this.file('takeover.json'), JSON.stringify({ generation: journal.candidate, snapshot: journal.takeover, outcome }) + '\n');
208
+ }
209
+ journal(value, settings) {
210
+ const journal = value;
211
+ const keys = journal?.takeover ? 'candidate,phase,previous,settingsHash,takeover,version' : 'candidate,phase,previous,settingsHash,version';
212
+ if (!journal || journal.version !== 1 || !['prepared', 'acknowledged', 'rollback-prepared'].includes(journal.phase) || !generationPattern.test(journal.candidate)
213
+ || (journal.previous !== null && !generationPattern.test(journal.previous)) || journal.settingsHash !== digest(JSON.stringify(settings)) || Object.keys(journal).sort().join(',') !== keys)
214
+ throw new Error('Invalid host ingress recovery journal');
215
+ if (journal.takeover) {
216
+ if (journal.previous !== null || JSON.stringify(normalizeIngressTakeoverSnapshot(journal.takeover)) !== JSON.stringify(journal.takeover))
217
+ throw new Error('Invalid initial takeover journal');
218
+ }
219
+ else if (journal.phase === 'rollback-prepared')
220
+ throw new Error('Rollback journal requires an initial takeover');
221
+ return journal;
222
+ }
223
+ async restoreJournal(settings, journal) {
224
+ await this.restore(settings, journal.previous);
225
+ if (journal.takeover)
226
+ await this.runtime.restoreTakeover(settings, journal.takeover);
227
+ await this.recordTakeover(journal, 'rolled-back');
228
+ }
229
+ async recoverLocked(settings) {
230
+ if (!(await exists(this.file('pending.json'))))
231
+ return;
232
+ const journal = this.journal(JSON.parse(await fs.readFile(this.file('pending.json'), 'utf8')), settings);
233
+ const current = await this.currentGeneration();
234
+ if (current !== journal.previous && current !== journal.candidate)
235
+ throw new Error('Host ingress recovery found an unrelated generation');
236
+ if (journal.phase === 'acknowledged') {
237
+ if (current !== journal.candidate)
238
+ throw new Error('Acknowledged ingress generation pointer changed');
239
+ await this.manifest(settings, journal.candidate);
240
+ await this.runtime.inspect(settings);
241
+ if (journal.takeover)
242
+ await this.runtime.verifyRetiredTakeover(journal.takeover);
243
+ await this.runtime.activate(settings);
244
+ await this.runtime.acknowledge(settings, journal.candidate);
245
+ await this.recordTakeover(journal, 'committed');
246
+ }
247
+ else
248
+ await this.restoreJournal(settings, journal);
249
+ await this.clearJournal();
250
+ }
251
+ async recover() {
252
+ return this.locked(async () => { const settings = await this.requiredSettings(); await this.recoverLocked(settings); return this.status(); });
253
+ }
254
+ async source(root, relative) {
255
+ const realRoot = await fs.realpath(root);
256
+ const realFile = await fs.realpath(path.join(realRoot, relative));
257
+ if (!realFile.startsWith(realRoot + path.sep))
258
+ throw new Error('TLS source escapes certificate root');
259
+ const fd = await fs.open(realFile, constants.O_RDONLY | constants.O_NOFOLLOW);
260
+ try {
261
+ const stat = await fd.stat();
262
+ if (!stat.isFile() || stat.size > 1024 * 1024)
263
+ throw new Error('TLS source must be a regular file under 1 MiB');
264
+ return await fd.readFile();
265
+ }
266
+ finally {
267
+ await fd.close();
268
+ }
269
+ }
270
+ async snapshot(settings, value, persist = true) {
271
+ const routes = [];
272
+ for (const route of value.routes) {
273
+ const certificate = await this.source(settings.certificateRoot, route.tls.certificate), key = await this.source(settings.certificateRoot, route.tls.privateKey);
274
+ const x509 = new X509Certificate(certificate);
275
+ if (Date.now() < Date.parse(x509.validFrom) || Date.now() >= Date.parse(x509.validTo))
276
+ throw new Error('Ingress TLS certificate is not currently valid');
277
+ for (const domain of route.domains)
278
+ if (!x509.checkHost(domain, { subject: 'never', partialWildcards: false, multiLabelWildcards: false, singleLabelSubdomains: false }))
279
+ throw new Error(`TLS certificate SAN does not cover ${domain}`);
280
+ if (!x509.checkPrivateKey(createPrivateKey(key)))
281
+ throw new Error('Ingress TLS certificate and private key do not match');
282
+ const object = createHash('sha256').update(certificate).update('\0').update(key).digest('hex');
283
+ if (!persist) {
284
+ routes.push({ ...route, certificateObject: object });
285
+ continue;
286
+ }
287
+ const directory = this.file(`certificates/${object}`);
288
+ await fs.mkdir(this.file('certificates'), { recursive: true, mode: 0o700 });
289
+ if (!(await exists(directory))) {
290
+ const temp = this.file(`certificates/.${randomUUID()}.tmp`);
291
+ await fs.mkdir(temp, { mode: 0o700 });
292
+ await durableFile(path.join(temp, 'certificate.pem'), certificate);
293
+ await durableFile(path.join(temp, 'private-key.pem'), key);
294
+ await fs.rename(temp, directory);
295
+ await syncDirectory(this.file('certificates'));
296
+ }
297
+ else if (!(await fs.readFile(path.join(directory, 'certificate.pem'))).equals(certificate) || !(await fs.readFile(path.join(directory, 'private-key.pem'))).equals(key))
298
+ throw new Error('TLS snapshot content mismatch');
299
+ routes.push({ ...route, certificateObject: object });
300
+ }
301
+ return { ...value, routes };
302
+ }
303
+ revisionOf(applications, owner) {
304
+ const app = applications.find((candidate) => ingressOwnerKey(candidate.owner) === ingressOwnerKey(owner));
305
+ return app ? ingressOwnerRevision(app) : null;
306
+ }
307
+ preparedRevision(input, app) {
308
+ if (input.preparedOwnerRevision !== undefined && (!/^[a-f0-9]{64}$/.test(input.preparedOwnerRevision) || input.preparedOwnerRevision !== ingressOwnerRevision(app)))
309
+ throw new Error('Prepared ingress owner revision changed');
310
+ }
311
+ async prepare(settings, previous, applications) {
312
+ applications.sort((a, b) => ingressOwnerKey(a.owner).localeCompare(ingressOwnerKey(b.owner)));
313
+ checkIngressConflicts(settings, applications);
314
+ if (previous && JSON.stringify(previous.applications) === JSON.stringify(applications)) {
315
+ await this.verifyCertificates(previous);
316
+ await this.runtime.validate(settings, previous.generation);
317
+ return previous;
318
+ }
319
+ const sequence = (previous?.sequence ?? 0) + 1;
320
+ if (!Number.isSafeInteger(sequence))
321
+ throw new Error('Ingress sequence exhausted');
322
+ const generation = this.generation(settings, sequence, applications);
323
+ const manifest = { version: 1, generation, sequence, applications };
324
+ const directory = this.file(`generations/${generation}`);
325
+ await fs.mkdir(this.file('generations'), { recursive: true, mode: 0o700 });
326
+ if (await exists(directory))
327
+ await this.manifest(settings, generation);
328
+ else {
329
+ const temp = this.file(`generations/.${randomUUID()}.tmp`);
330
+ await fs.mkdir(temp, { mode: 0o700 });
331
+ await durableFile(path.join(temp, 'manifest.json'), JSON.stringify(manifest) + '\n');
332
+ await durableFile(path.join(temp, 'nginx.conf'), renderHostIngress(settings, manifest));
333
+ await fs.rename(temp, directory);
334
+ await syncDirectory(this.file('generations'));
335
+ }
336
+ await this.verifyCertificates(manifest);
337
+ await this.runtime.validate(settings, generation);
338
+ return manifest;
339
+ }
340
+ async publish(settings, previous, owner, applications, takeover) {
341
+ applications.sort((a, b) => ingressOwnerKey(a.owner).localeCompare(ingressOwnerKey(b.owner)));
342
+ checkIngressConflicts(settings, applications);
343
+ const ownerRevision = this.revisionOf(applications, owner);
344
+ if (takeover && previous)
345
+ throw new Error('Legacy takeover is allowed only for initial host publication');
346
+ if (previous && JSON.stringify(applications) === JSON.stringify(previous.applications)) {
347
+ const running = await this.runtime.inspect(settings);
348
+ if (!running.running || await this.runtime.observed(settings) !== previous.generation)
349
+ await this.runtime.activate(settings);
350
+ await this.runtime.acknowledge(settings, previous.generation);
351
+ return { generation: previous.generation, previousGeneration: previous.generation, observedGeneration: previous.generation, changed: false, owner, ownerRevision };
352
+ }
353
+ const manifest = await this.prepare(settings, previous, applications);
354
+ const generation = manifest.generation;
355
+ const snapshot = takeover ? await this.runtime.inspectTakeover(settings, takeover) : undefined;
356
+ const journal = { version: 1, previous: previous?.generation ?? null, candidate: generation, phase: 'prepared', settingsHash: digest(JSON.stringify(settings)), ...(snapshot ? { takeover: snapshot } : {}) };
357
+ await durableFile(this.file('pending.json'), JSON.stringify(journal) + '\n');
358
+ try {
359
+ if (snapshot)
360
+ await this.runtime.quiesceTakeover(snapshot);
361
+ await this.pointer(generation);
362
+ await this.runtime.activate(settings);
363
+ await this.runtime.acknowledge(settings, generation);
364
+ await durableFile(this.file('pending.json'), JSON.stringify({ ...journal, phase: 'acknowledged' }) + '\n');
365
+ }
366
+ catch (failure) {
367
+ try {
368
+ await this.restoreJournal(settings, journal);
369
+ await this.clearJournal();
370
+ }
371
+ catch (rollback) {
372
+ throw new Error(`Host ingress publication failed (${String(failure)}); rollback needs recovery (${String(rollback)})`);
373
+ }
374
+ throw new Error(`Host ingress publication failed; previous generation restored: ${String(failure)}`);
375
+ }
376
+ await this.recordTakeover(journal, 'committed');
377
+ await this.clearJournal();
378
+ return { generation, previousGeneration: previous?.generation ?? null, observedGeneration: generation, changed: true, owner, ownerRevision, ...(snapshot ? { takeover: { containerId: snapshot.descriptor.containerId, containerName: snapshot.descriptor.containerName, retained: true } } : {}) };
379
+ }
380
+ /** Read-only admission check. Call under the deployment lease; final apply still requires CAS. */
381
+ async check(input) {
382
+ const normalized = normalizeIngressApplication(input);
383
+ const settings = await this.requiredSettings();
384
+ if (await exists(this.file('pending.json')))
385
+ throw new Error('Host ingress recovery is required before preflight');
386
+ const generation = await this.currentGeneration();
387
+ if (input.expectedGeneration !== generation)
388
+ throw new Error(`Host ingress generation conflict: expected ${String(input.expectedGeneration)}, current ${String(generation)}`);
389
+ const previous = generation ? await this.manifest(settings, generation) : null;
390
+ const others = (previous?.applications ?? []).filter((app) => ingressOwnerKey(app.owner) !== ingressOwnerKey(normalized.owner));
391
+ checkIngressConflicts(settings, [...others, normalized]);
392
+ const app = await this.snapshot(settings, normalized, false);
393
+ this.preparedRevision(input, app);
394
+ if (input.takeover) {
395
+ if (generation !== null)
396
+ throw new Error('Legacy takeover is allowed only for initial host publication');
397
+ await this.runtime.inspectTakeover(settings, normalizeIngressTakeover(input.takeover, normalized));
398
+ }
399
+ if (await this.currentGeneration() !== generation || await exists(this.file('pending.json')))
400
+ throw new Error('Host ingress generation conflict during preflight');
401
+ return { valid: true, generation, owner: normalized.owner, reservedPorts: normalized.reservedPorts, domains: normalized.routes.flatMap((route) => route.domains), nativeConfigValidated: false, ownerRevision: ingressOwnerRevision(app) };
402
+ }
403
+ /** Writes immutable staging objects, runs native nginx -t, and never publishes or stops a container. */
404
+ async validate(input) {
405
+ const normalized = normalizeIngressApplication(input);
406
+ return this.locked(async () => {
407
+ const settings = await this.requiredSettings();
408
+ if (await exists(this.file('pending.json')))
409
+ throw new Error('Host ingress recovery is required before validation');
410
+ const generation = await this.currentGeneration();
411
+ if (input.expectedGeneration !== generation)
412
+ throw new Error(`Host ingress generation conflict: expected ${String(input.expectedGeneration)}, current ${String(generation)}`);
413
+ const previous = generation ? await this.manifest(settings, generation) : null;
414
+ const others = (previous?.applications ?? []).filter((app) => ingressOwnerKey(app.owner) !== ingressOwnerKey(normalized.owner));
415
+ checkIngressConflicts(settings, [...others, normalized]);
416
+ const app = await this.snapshot(settings, normalized);
417
+ this.preparedRevision(input, app);
418
+ const manifest = await this.prepare(settings, previous, [...others, app]);
419
+ if (input.takeover) {
420
+ if (generation !== null)
421
+ throw new Error('Legacy takeover is allowed only for initial host publication');
422
+ await this.runtime.inspectTakeover(settings, normalizeIngressTakeover(input.takeover, normalized));
423
+ }
424
+ return { valid: true, generation, candidateGeneration: manifest.generation, owner: app.owner, reservedPorts: app.reservedPorts, domains: app.routes.flatMap((route) => route.domains), ownerRevision: ingressOwnerRevision(app), nativeConfigValidated: true };
425
+ });
426
+ }
427
+ async apply(input) {
428
+ const normalized = normalizeIngressApplication(input);
429
+ return this.locked(async () => {
430
+ const settings = await this.requiredSettings();
431
+ await this.recoverLocked(settings);
432
+ const generation = await this.currentGeneration();
433
+ if (input.expectedGeneration !== generation)
434
+ throw new Error(`Host ingress generation conflict: expected ${String(input.expectedGeneration)}, current ${String(generation)}`);
435
+ const previous = generation ? await this.manifest(settings, generation) : null;
436
+ const others = (previous?.applications ?? []).filter((app) => ingressOwnerKey(app.owner) !== ingressOwnerKey(normalized.owner));
437
+ checkIngressConflicts(settings, [...others, normalized]);
438
+ const app = await this.snapshot(settings, normalized);
439
+ this.preparedRevision(input, app);
440
+ const takeover = input.takeover ? normalizeIngressTakeover(input.takeover, normalized) : undefined;
441
+ return this.publish(settings, previous, app.owner, [...others, app], takeover);
442
+ });
443
+ }
444
+ async restoreOwner(input) {
445
+ if (!input || Object.keys(input).some((key) => !['owner', 'fromGeneration', 'expectedGeneration', 'expectedOwnerRevision'].includes(key)) || (input.fromGeneration !== null && !generationPattern.test(input.fromGeneration)) || (input.expectedOwnerRevision !== null && !/^[a-f0-9]{64}$/.test(input.expectedOwnerRevision)))
446
+ throw new Error('Invalid owner restoration');
447
+ const owner = ingressOwner(input.owner);
448
+ return this.locked(async () => {
449
+ const settings = await this.requiredSettings();
450
+ await this.recoverLocked(settings);
451
+ const generation = await this.currentGeneration();
452
+ if (input.expectedGeneration !== generation)
453
+ throw new Error(`Host ingress generation conflict: expected ${String(input.expectedGeneration)}, current ${String(generation)}`);
454
+ if (!generation)
455
+ throw new Error('No host ingress generation exists');
456
+ const current = await this.manifest(settings, generation);
457
+ if (this.revisionOf(current.applications, owner) !== input.expectedOwnerRevision)
458
+ throw new Error('Ingress owner revision conflict; another publication changed this owner');
459
+ const old = input.fromGeneration ? await this.manifest(settings, input.fromGeneration) : null;
460
+ const priorOwner = old?.applications.find((app) => ingressOwnerKey(app.owner) === ingressOwnerKey(owner));
461
+ const others = current.applications.filter((app) => ingressOwnerKey(app.owner) !== ingressOwnerKey(owner));
462
+ return this.publish(settings, current, owner, priorOwner ? [...others, priorOwner] : others);
463
+ });
464
+ }
465
+ async rollbackTakeover(input) {
466
+ if (!input || Object.keys(input).join(',') !== 'expectedGeneration' || !generationPattern.test(input.expectedGeneration))
467
+ throw new Error('Invalid initial takeover rollback');
468
+ return this.locked(async () => {
469
+ const settings = await this.requiredSettings();
470
+ await this.recoverLocked(settings);
471
+ const generation = await this.currentGeneration();
472
+ const record = await this.takeoverRecord();
473
+ if (!record || record.generation !== input.expectedGeneration)
474
+ throw new Error('No matching initial takeover receipt');
475
+ if (generation === null && record.outcome === 'rolled-back') {
476
+ await this.runtime.restoreTakeover(settings, record.snapshot);
477
+ return { rolledBack: true, previousGeneration: record.generation, generation: null, legacyContainerId: record.snapshot.descriptor.containerId, legacyVerified: true };
478
+ }
479
+ if (generation !== input.expectedGeneration || record.outcome !== 'committed')
480
+ throw new Error('Host ingress advanced after initial takeover; rollback refused');
481
+ const manifest = await this.manifest(settings, generation);
482
+ if (manifest.sequence !== 1 || manifest.applications.length !== 1)
483
+ throw new Error('Initial takeover rollback cannot remove other tenants');
484
+ await this.runtime.verifyRetiredTakeover(record.snapshot);
485
+ const journal = { version: 1, previous: null, candidate: generation, phase: 'rollback-prepared', settingsHash: digest(JSON.stringify(settings)), takeover: record.snapshot };
486
+ await durableFile(this.file('pending.json'), JSON.stringify(journal) + '\n');
487
+ try {
488
+ await this.restoreJournal(settings, journal);
489
+ await this.clearJournal();
490
+ }
491
+ catch (error) {
492
+ throw new Error(`Initial takeover rollback needs recovery: ${String(error)}`);
493
+ }
494
+ return { rolledBack: true, previousGeneration: generation, generation: null, legacyContainerId: record.snapshot.descriptor.containerId, legacyVerified: true };
495
+ });
496
+ }
497
+ async remove(input) {
498
+ if (!input || Object.keys(input).some((k) => !['owner', 'expectedGeneration'].includes(k)))
499
+ throw new Error('Invalid ingress removal');
500
+ const owner = ingressOwner(input.owner);
501
+ return this.locked(async () => {
502
+ const settings = await this.requiredSettings();
503
+ await this.recoverLocked(settings);
504
+ const generation = await this.currentGeneration();
505
+ if (input.expectedGeneration !== generation)
506
+ throw new Error(`Host ingress generation conflict: expected ${String(input.expectedGeneration)}, current ${String(generation)}`);
507
+ if (!generation)
508
+ throw new Error('No host ingress generation exists');
509
+ const previous = await this.manifest(settings, generation);
510
+ return this.publish(settings, previous, owner, previous.applications.filter((app) => ingressOwnerKey(app.owner) !== ingressOwnerKey(owner)));
511
+ });
512
+ }
513
+ }
514
+ //# sourceMappingURL=host-ingress.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-ingress.service.js","sourceRoot":"","sources":["../../src/infrastructure/host-ingress.service.ts"],"names":[],"mappings":"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"}
@@ -44,13 +44,13 @@ export declare function restartBackoffMs(failures: number): number;
44
44
  * Measured: `omnitron-pg`, created before published ports were bound to
45
45
  * loopback, survived on 0.0.0.0:5480 through the fix that reached all eleven
46
46
  * other managed containers, and still answered `nc -vz <lan-address> 5480`
47
- * from another machine months later, while `daos-dev-postgres` beside it in
47
+ * from another machine months later, while `sample-dev-postgres` beside it in
48
48
  * `docker ps` was correctly on 127.0.0.1.
49
49
  *
50
50
  * `reconcileName` is the subtlety. The control-plane database is ONE
51
51
  * container per host — it owns port 5480 — but each daemon resolves a name
52
- * carrying its own project prefix, so a daemon on the `daos/dev` stack
53
- * computes `daos-dev-pg` while the container that exists is `omnitron-pg`.
52
+ * carrying its own project prefix, so a daemon on the `sample/dev` stack
53
+ * computes `sample-dev-pg` while the container that exists is `omnitron-pg`.
54
54
  * Reconciling the running container against a spec under the OTHER name
55
55
  * creates a second one and collides on the port; the first version of this
56
56
  * did exactly that and corrected nothing. The name to reconcile is therefore
@@ -180,6 +180,16 @@ export declare class InfrastructureService {
180
180
  name: string;
181
181
  image?: string | undefined;
182
182
  }>;
183
+ /**
184
+ * Transfer monitoring ownership to a freshly resolved declaration. This never
185
+ * provisions containers: retained specs must match; additions must already be
186
+ * running with exact native ownership and spec labels. Freeze and drain all
187
+ * earlier monitor/reconcile work before acknowledging a handoff.
188
+ */
189
+ refreshOwnershipFrom(candidate: InfrastructureService): Promise<{
190
+ released: string[];
191
+ adopted: string[];
192
+ }>;
183
193
  /**
184
194
  * Services whose socket is new since this reconcile began.
185
195
  *
@@ -188,8 +198,10 @@ export declare class InfrastructureService {
188
198
  */
189
199
  getRestartedServices(): string[];
190
200
  /**
191
- * Stop all managed infrastructure containers.
201
+ * Release process-owned monitoring resources without changing infrastructure.
192
202
  */
203
+ dispose(): void;
204
+ /** Explicit infrastructure removal; process disposal alone preserves containers. */
193
205
  teardown(): Promise<void>;
194
206
  /**
195
207
  * Get current infrastructure state.
@@ -244,6 +256,9 @@ export declare class InfrastructureService {
244
256
  * own restart-policy in the mix) occasional duplicate containers.
245
257
  */
246
258
  private readonly reconciling;
259
+ private readonly reconcileTasks;
260
+ private readonly activeSweeps;
261
+ private ownershipFrozen;
247
262
  /**
248
263
  * Where this node keeps each service's config files, once a master sent them.
249
264
  *
@@ -315,11 +330,12 @@ export declare class InfrastructureService {
315
330
  *
316
331
  * `provision()` asked `needsControlPlaneDatabase`; the health sweep and the
317
332
  * teardown asked only `usingGlobalOmnitronPg`. So on a node the sweep found
318
- * `<prefix>-pg` «not running» every 30 s and created it: daos/test got one on
333
+ * `<prefix>-pg` «not running» every 30 s and created it: sample/test got one on
319
334
  * 2026-09-20, and again on 2026-09-25 forty seconds after it was removed —
320
335
  * on the default credentials, for a database nothing reads.
321
336
  */
322
337
  private controlPlaneContainers;
323
338
  private healthSweep;
339
+ private healthSweepOwned;
324
340
  }
325
341
  //# sourceMappingURL=infrastructure.service.d.ts.map