@astrale-os/sdk 0.6.0-beta.2 → 0.6.0-beta.21

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 (403) hide show
  1. package/README.md +74 -14
  2. package/dist/application/action/action.d.ts +6 -0
  3. package/dist/application/action/authoring.d.ts +1 -1
  4. package/dist/application/action/context.d.ts +17 -8
  5. package/dist/application/action/define.d.ts +3 -3
  6. package/dist/application/action/index.d.ts +1 -1
  7. package/dist/application/define.d.ts +5 -5
  8. package/dist/application/define.js +13 -13
  9. package/dist/application/dependency/index.d.ts +1 -1
  10. package/dist/application/dependency/invoker.d.ts +11 -6
  11. package/dist/application/domain.d.ts +28 -0
  12. package/dist/application/index.d.ts +3 -3
  13. package/dist/application/index.js +1 -1
  14. package/dist/application/mutation/authoring/properties.d.ts +5 -3
  15. package/dist/application/mutation/authoring/properties.js +35 -2
  16. package/dist/application/mutation/authoring/transition.js +4 -1
  17. package/dist/application/routes/admission.d.ts +2 -2
  18. package/dist/application/routes/admission.js +1 -1
  19. package/dist/application/routes/route.d.ts +2 -2
  20. package/dist/application/runtime/actions.js +3 -0
  21. package/dist/application/runtime/workflows.d.ts +2 -0
  22. package/dist/application/runtime/workflows.js +5 -0
  23. package/dist/application/workflow/authoring.d.ts +3 -2
  24. package/dist/application/workflow/context.d.ts +8 -2
  25. package/dist/application/workflow/define.d.ts +3 -3
  26. package/dist/application/workflow/define.js +19 -3
  27. package/dist/application/workflow/durable.d.ts +83 -0
  28. package/dist/application/workflow/index.d.ts +3 -2
  29. package/dist/application/workflow/runner/inline.js +3 -4
  30. package/dist/application/workflow/runner/runner.d.ts +2 -2
  31. package/dist/application/workflow/step/output.d.ts +2 -0
  32. package/dist/application/workflow/step/output.js +73 -0
  33. package/dist/application/workflow/workflow.d.ts +12 -0
  34. package/dist/deployment/adapter/adapter.d.ts +59 -11
  35. package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
  36. package/dist/deployment/adapter/bundle/file.d.ts +10 -0
  37. package/dist/deployment/adapter/bundle/index.d.ts +2 -0
  38. package/dist/deployment/adapter/define.d.ts +25 -3
  39. package/dist/deployment/adapter/define.js +101 -24
  40. package/dist/deployment/adapter/index.d.ts +6 -3
  41. package/dist/deployment/adapter/index.js +1 -0
  42. package/dist/deployment/adapter/legacy/adapter.d.ts +40 -0
  43. package/dist/deployment/adapter/{deploy → legacy/deploy}/context.d.ts +6 -2
  44. package/dist/deployment/adapter/legacy/deploy/index.d.ts +2 -0
  45. package/dist/deployment/adapter/legacy/deploy/index.js +1 -0
  46. package/dist/deployment/adapter/legacy/deploy/result.d.ts +89 -0
  47. package/dist/deployment/adapter/legacy/deploy/result.js +1 -0
  48. package/dist/deployment/adapter/legacy/index.d.ts +24 -0
  49. package/dist/deployment/adapter/legacy/index.js +1 -0
  50. package/dist/deployment/adapter/legacy/prepare/artifact.d.ts +43 -0
  51. package/dist/deployment/adapter/legacy/prepare/artifact.js +1 -0
  52. package/dist/deployment/adapter/legacy/prepare/context.d.ts +33 -0
  53. package/dist/deployment/adapter/legacy/prepare/context.js +1 -0
  54. package/dist/deployment/adapter/legacy/prepare/index.d.ts +2 -0
  55. package/dist/deployment/adapter/legacy/prepare/index.js +1 -0
  56. package/dist/deployment/adapter/release/context.d.ts +95 -0
  57. package/dist/deployment/adapter/release/context.js +1 -0
  58. package/dist/deployment/adapter/release/index.d.ts +3 -0
  59. package/dist/deployment/adapter/release/index.js +1 -0
  60. package/dist/deployment/adapter/release/list.d.ts +53 -0
  61. package/dist/deployment/adapter/release/list.js +1 -0
  62. package/dist/deployment/adapter/release/refusal.d.ts +10 -0
  63. package/dist/deployment/adapter/release/refusal.js +14 -0
  64. package/dist/deployment/adapter/release/result.d.ts +56 -0
  65. package/dist/deployment/adapter/release/result.js +1 -0
  66. package/dist/deployment/address/configuration.d.ts +83 -0
  67. package/dist/deployment/address/configuration.js +262 -0
  68. package/dist/deployment/address/fingerprint.d.ts +5 -0
  69. package/dist/deployment/address/fingerprint.js +27 -0
  70. package/dist/deployment/address/index.d.ts +5 -0
  71. package/dist/deployment/address/index.js +5 -0
  72. package/dist/deployment/address/label.d.ts +42 -0
  73. package/dist/deployment/address/label.js +80 -0
  74. package/dist/deployment/address/line.d.ts +29 -0
  75. package/dist/deployment/address/line.js +53 -0
  76. package/dist/deployment/address/record.d.ts +52 -0
  77. package/dist/deployment/address/record.js +104 -0
  78. package/dist/deployment/address/summary.d.ts +57 -0
  79. package/dist/deployment/address/summary.js +117 -0
  80. package/dist/deployment/address/vectors.d.ts +60 -0
  81. package/dist/deployment/address/vectors.js +517 -0
  82. package/dist/deployment/build/build.d.ts +2 -2
  83. package/dist/deployment/build/compile.d.ts +4 -4
  84. package/dist/deployment/build/compile.js +17 -17
  85. package/dist/deployment/build/index.d.ts +1 -0
  86. package/dist/deployment/build/index.js +1 -0
  87. package/dist/deployment/build/manifest.d.ts +59 -0
  88. package/dist/deployment/build/manifest.js +118 -0
  89. package/dist/deployment/build/material.js +2 -2
  90. package/dist/deployment/build/schema.d.ts +2 -2
  91. package/dist/deployment/deploy.d.ts +10 -10
  92. package/dist/deployment/deploy.js +3 -3
  93. package/dist/deployment/deployment.d.ts +9 -4
  94. package/dist/deployment/environment.d.ts +6 -0
  95. package/dist/deployment/environment.js +6 -0
  96. package/dist/deployment/index.d.ts +4 -4
  97. package/dist/deployment/index.js +1 -1
  98. package/dist/deployment/release/addressing.d.ts +9 -1
  99. package/dist/deployment/release/assemble.d.ts +6 -3
  100. package/dist/deployment/release/assemble.js +12 -10
  101. package/dist/deployment/release/index.d.ts +2 -0
  102. package/dist/deployment/release/index.js +2 -0
  103. package/dist/deployment/release/legacy/admission.d.ts +3 -0
  104. package/dist/deployment/release/legacy/admission.js +8 -0
  105. package/dist/deployment/release/legacy/assemble.d.ts +5 -0
  106. package/dist/deployment/release/legacy/assemble.js +20 -0
  107. package/dist/deployment/release/legacy/index.d.ts +35 -0
  108. package/dist/deployment/release/legacy/index.js +34 -0
  109. package/dist/deployment/release/legacy/release.d.ts +12 -0
  110. package/dist/deployment/release/legacy/release.js +1 -0
  111. package/dist/deployment/release/{publication → legacy}/seal.d.ts +3 -3
  112. package/dist/deployment/release/legacy/seal.js +17 -0
  113. package/dist/deployment/release/release.d.ts +16 -5
  114. package/dist/deployment/release/runtime.d.ts +2 -0
  115. package/dist/deployment/release/runtime.js +2 -0
  116. package/dist/deployment/release/seal.d.ts +14 -0
  117. package/dist/deployment/release/seal.js +22 -0
  118. package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
  119. package/dist/deployment/release/{publication → served}/callables.js +2 -2
  120. package/dist/deployment/release/served/index.d.ts +12 -0
  121. package/dist/deployment/release/served/index.js +22 -0
  122. package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
  123. package/dist/deployment/runtime/admission.d.ts +2 -2
  124. package/dist/deployment/runtime/admission.js +5 -5
  125. package/dist/deployment/verify/index.d.ts +2 -1
  126. package/dist/deployment/verify/index.js +1 -0
  127. package/dist/deployment/verify/preflight/artifact.d.ts +1 -1
  128. package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
  129. package/dist/deployment/verify/preflight/bundle.js +71 -0
  130. package/dist/deployment/verify/preflight/index.d.ts +2 -1
  131. package/dist/deployment/verify/preflight/index.js +1 -0
  132. package/dist/deployment/verify/preflight/publication.d.ts +2 -2
  133. package/dist/deployment/verify/preflight/publication.js +4 -3
  134. package/dist/deployment/verify/readiness/deployment.js +7 -15
  135. package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
  136. package/dist/deployment/verify/readiness/fetch.js +26 -0
  137. package/dist/deployment/verify/readiness/identity.d.ts +3 -6
  138. package/dist/deployment/verify/readiness/identity.js +3 -3
  139. package/dist/deployment/verify/readiness/index.d.ts +11 -7
  140. package/dist/deployment/verify/readiness/index.js +15 -4
  141. package/dist/deployment/verify/readiness/legacy/index.d.ts +2 -0
  142. package/dist/deployment/verify/readiness/legacy/index.js +2 -0
  143. package/dist/deployment/verify/readiness/legacy/publication.d.ts +12 -0
  144. package/dist/deployment/verify/readiness/legacy/publication.js +23 -0
  145. package/dist/deployment/verify/readiness/release.d.ts +8 -0
  146. package/dist/deployment/verify/readiness/release.js +22 -0
  147. package/dist/execution/identity/authentication.d.ts +23 -2
  148. package/dist/execution/identity/authentication.js +64 -40
  149. package/dist/execution/identity/callback.d.ts +16 -15
  150. package/dist/execution/identity/callback.js +21 -16
  151. package/dist/execution/identity/delivery.d.ts +11 -4
  152. package/dist/execution/identity/delivery.js +47 -20
  153. package/dist/execution/identity/identity.d.ts +18 -3
  154. package/dist/execution/identity/identity.js +8 -4
  155. package/dist/execution/identity/jwks.js +57 -12
  156. package/dist/execution/index.d.ts +4 -2
  157. package/dist/execution/index.js +2 -1
  158. package/dist/execution/invocation/admission/authentication.d.ts +3 -8
  159. package/dist/execution/invocation/admission/authentication.js +10 -24
  160. package/dist/execution/invocation/admission/authority.d.ts +15 -8
  161. package/dist/execution/invocation/admission/authority.js +5 -0
  162. package/dist/execution/invocation/admission/input.d.ts +2 -2
  163. package/dist/execution/invocation/admission/input.js +16 -2
  164. package/dist/execution/invocation/dependency/bind.d.ts +1 -1
  165. package/dist/execution/invocation/dependency/bind.js +35 -14
  166. package/dist/execution/invocation/dispatch/context.d.ts +2 -1
  167. package/dist/execution/invocation/dispatch/context.js +1 -1
  168. package/dist/execution/invocation/invocation.js +58 -16
  169. package/dist/execution/invocation/result/project.js +41 -1
  170. package/dist/execution/node/serve.d.ts +2 -2
  171. package/dist/execution/node/serve.js +1 -1
  172. package/dist/execution/runtime/index.d.ts +1 -0
  173. package/dist/execution/runtime/index.js +1 -0
  174. package/dist/execution/runtime/load.d.ts +3 -3
  175. package/dist/execution/runtime/load.js +3 -2
  176. package/dist/execution/runtime/release.d.ts +22 -0
  177. package/dist/execution/runtime/release.js +14 -0
  178. package/dist/execution/serve.d.ts +10 -4
  179. package/dist/execution/serve.js +3 -0
  180. package/dist/execution/service/create.js +39 -7
  181. package/dist/execution/service/initialization.d.ts +4 -4
  182. package/dist/execution/service/initialization.js +23 -14
  183. package/dist/execution/service/release.d.ts +2 -2
  184. package/dist/execution/service/release.js +3 -2
  185. package/dist/execution/service/service.d.ts +15 -5
  186. package/dist/execution/service/serving/delivery.d.ts +6 -0
  187. package/dist/execution/service/{publication → serving}/delivery.js +5 -1
  188. package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
  189. package/dist/execution/service/serving/installation.d.ts +4 -0
  190. package/dist/execution/service/serving/installation.js +9 -0
  191. package/dist/execution/service/serving/legacy/index.d.ts +15 -0
  192. package/dist/execution/service/serving/legacy/index.js +19 -0
  193. package/dist/execution/service/serving/source.d.ts +18 -0
  194. package/dist/execution/service/serving/source.js +19 -0
  195. package/dist/execution/workflows/discovery.d.ts +14 -0
  196. package/dist/execution/workflows/discovery.js +151 -0
  197. package/dist/execution/workflows/engine.d.ts +52 -0
  198. package/dist/execution/workflows/engine.js +1 -0
  199. package/dist/execution/workflows/envelope.d.ts +12 -0
  200. package/dist/execution/workflows/envelope.js +46 -0
  201. package/dist/execution/workflows/failure.d.ts +11 -0
  202. package/dist/execution/workflows/failure.js +43 -0
  203. package/dist/execution/workflows/index.d.ts +4 -0
  204. package/dist/execution/workflows/index.js +3 -0
  205. package/dist/execution/workflows/options.d.ts +40 -0
  206. package/dist/execution/workflows/options.js +83 -0
  207. package/dist/execution/workflows/receiver.d.ts +22 -0
  208. package/dist/execution/workflows/receiver.js +99 -0
  209. package/dist/execution/workflows/route.d.ts +14 -0
  210. package/dist/execution/workflows/route.js +40 -0
  211. package/dist/execution/workflows/run.d.ts +22 -0
  212. package/dist/execution/workflows/run.js +211 -0
  213. package/dist/index.d.ts +3 -3
  214. package/dist/index.js +1 -1
  215. package/dist/platform/release/index.d.ts +27 -0
  216. package/dist/platform/release/index.js +27 -0
  217. package/dist/platform/schema/index.d.ts +2 -1
  218. package/dist/platform/schema/property-input.d.ts +15 -0
  219. package/dist/platform/schema/property-input.js +1 -0
  220. package/dist/platform/schema/property.d.ts +5 -0
  221. package/dist/platform/versioning/dependents.d.ts +18 -0
  222. package/dist/platform/versioning/dependents.js +15 -0
  223. package/dist/platform/versioning/index.d.ts +5 -0
  224. package/dist/platform/versioning/index.js +5 -0
  225. package/dist/platform/versioning/name.d.ts +38 -0
  226. package/dist/platform/versioning/name.js +58 -0
  227. package/dist/platform/versioning/reference.d.ts +48 -0
  228. package/dist/platform/versioning/reference.js +95 -0
  229. package/dist/platform/versioning/version.d.ts +72 -0
  230. package/dist/platform/versioning/version.js +98 -0
  231. package/dist/project/admit.js +2 -2
  232. package/dist/project/define.d.ts +4 -4
  233. package/dist/project/define.js +55 -35
  234. package/dist/project/index.d.ts +1 -1
  235. package/dist/project/install-command.d.ts +10 -0
  236. package/dist/project/install-command.js +13 -0
  237. package/dist/project/project.d.ts +10 -8
  238. package/dist/testing/dataset/builder.d.ts +3 -3
  239. package/dist/testing/dataset/define.d.ts +1 -1
  240. package/dist/testing/load.js +1 -1
  241. package/dist/tooling/cli/arguments.d.ts +10 -5
  242. package/dist/tooling/cli/arguments.js +123 -52
  243. package/dist/tooling/cli/build.d.ts +55 -0
  244. package/dist/tooling/cli/build.js +77 -0
  245. package/dist/tooling/cli/bun.d.ts +0 -1
  246. package/dist/tooling/cli/bun.js +0 -7
  247. package/dist/tooling/cli/commit.d.ts +35 -0
  248. package/dist/tooling/cli/commit.js +235 -0
  249. package/dist/tooling/cli/deploy-mode.d.ts +82 -0
  250. package/dist/tooling/cli/deploy-mode.js +135 -0
  251. package/dist/tooling/cli/deploy-result.d.ts +85 -0
  252. package/dist/tooling/cli/deploy-result.js +64 -0
  253. package/dist/tooling/cli/diff/declared.d.ts +7 -0
  254. package/dist/tooling/cli/diff/declared.js +27 -0
  255. package/dist/tooling/cli/diff/index.d.ts +30 -0
  256. package/dist/tooling/cli/diff/index.js +58 -0
  257. package/dist/tooling/cli/diff/render.d.ts +15 -0
  258. package/dist/tooling/cli/diff/render.js +131 -0
  259. package/dist/tooling/cli/diff/report.d.ts +88 -0
  260. package/dist/tooling/cli/diff/report.js +154 -0
  261. package/dist/tooling/cli/dotenv.d.ts +2 -2
  262. package/dist/tooling/cli/dotenv.js +3 -33
  263. package/dist/tooling/cli/help.js +176 -59
  264. package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
  265. package/dist/tooling/cli/immutable-deployment.js +135 -0
  266. package/dist/tooling/cli/index.d.ts +10 -4
  267. package/dist/tooling/cli/index.js +5 -3
  268. package/dist/tooling/cli/installed-on.d.ts +83 -0
  269. package/dist/tooling/cli/installed-on.js +156 -0
  270. package/dist/tooling/cli/legacy/deploy-result.d.ts +28 -0
  271. package/dist/tooling/cli/legacy/deploy-result.js +37 -0
  272. package/dist/tooling/cli/legacy/stable-target-adapter.d.ts +21 -0
  273. package/dist/tooling/cli/legacy/stable-target-adapter.js +14 -0
  274. package/dist/tooling/cli/legacy/stable-target-deploy.d.ts +40 -0
  275. package/dist/tooling/cli/legacy/stable-target-deploy.js +102 -0
  276. package/dist/tooling/cli/legacy/uploaded-build.d.ts +11 -0
  277. package/dist/tooling/cli/legacy/uploaded-build.js +22 -0
  278. package/dist/tooling/cli/list.d.ts +154 -0
  279. package/dist/tooling/cli/list.js +381 -0
  280. package/dist/tooling/cli/log.d.ts +5 -0
  281. package/dist/tooling/cli/log.js +9 -0
  282. package/dist/tooling/cli/orchestrate.d.ts +0 -6
  283. package/dist/tooling/cli/orchestrate.js +236 -88
  284. package/dist/tooling/cli/project.d.ts +3 -3
  285. package/dist/tooling/cli/publish/index.d.ts +73 -0
  286. package/dist/tooling/cli/publish/index.js +346 -0
  287. package/dist/tooling/cli/publish/report.d.ts +49 -0
  288. package/dist/tooling/cli/publish/report.js +15 -0
  289. package/dist/tooling/cli/registry/client.d.ts +114 -0
  290. package/dist/tooling/cli/registry/client.js +346 -0
  291. package/dist/tooling/cli/registry/error.d.ts +11 -0
  292. package/dist/tooling/cli/registry/error.js +17 -0
  293. package/dist/tooling/cli/registry/executable.d.ts +29 -0
  294. package/dist/tooling/cli/registry/executable.js +90 -0
  295. package/dist/tooling/cli/registry/index.d.ts +9 -0
  296. package/dist/tooling/cli/registry/index.js +8 -0
  297. package/dist/tooling/cli/registry/installations.d.ts +67 -0
  298. package/dist/tooling/cli/registry/installations.js +108 -0
  299. package/dist/tooling/cli/registry/process.d.ts +36 -0
  300. package/dist/tooling/cli/registry/process.js +119 -0
  301. package/dist/tooling/cli/secrets.d.ts +9 -0
  302. package/dist/tooling/cli/secrets.js +19 -0
  303. package/dist/tooling/cli/yank.d.ts +34 -0
  304. package/dist/tooling/cli/yank.js +32 -0
  305. package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -1
  306. package/dist/tooling/linter/implementations/source/callable-requirements.js +10 -10
  307. package/dist/tooling/linter/implementations/source/dependencies.js +12 -10
  308. package/dist/tooling/linter/implementations/source/global.js +1 -1
  309. package/dist/tooling/linter/implementations/source/mutations.js +17 -17
  310. package/dist/tooling/linter/implementations/source/providers.js +5 -5
  311. package/dist/tooling/linter/implementations/source/views.js +2 -2
  312. package/dist/tooling/linter/policy/generated.js +16 -16
  313. package/dist/tooling/packaging/declarations/ownership.js +1 -1
  314. package/dist/tooling/packaging/finalize.d.ts +1 -1
  315. package/dist/tooling/packaging/finalize.js +1 -1
  316. package/package.json +32 -11
  317. package/dist/application/application.d.ts +0 -28
  318. package/dist/deployment/adapter/deploy/index.d.ts +0 -2
  319. package/dist/deployment/adapter/deploy/result.d.ts +0 -50
  320. package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
  321. package/dist/deployment/adapter/prepare/context.d.ts +0 -23
  322. package/dist/deployment/adapter/prepare/index.d.ts +0 -2
  323. package/dist/deployment/release/publication/index.d.ts +0 -6
  324. package/dist/deployment/release/publication/index.js +0 -6
  325. package/dist/deployment/release/publication/manifest.d.ts +0 -3
  326. package/dist/deployment/release/publication/manifest.js +0 -5
  327. package/dist/deployment/release/publication/requirements.d.ts +0 -3
  328. package/dist/deployment/release/publication/requirements.js +0 -3
  329. package/dist/deployment/release/publication/seal.js +0 -39
  330. package/dist/deployment/verify/readiness/publication.d.ts +0 -11
  331. package/dist/deployment/verify/readiness/publication.js +0 -41
  332. package/dist/execution/service/publication/delivery.d.ts +0 -2
  333. package/dist/execution/service/publication/installation.d.ts +0 -3
  334. package/dist/execution/service/publication/installation.js +0 -8
  335. package/dist/execution/service/publication/source.d.ts +0 -3
  336. package/dist/execution/service/publication/source.js +0 -11
  337. package/dist/platform/publication/index.d.ts +0 -2
  338. package/dist/platform/publication/index.js +0 -2
  339. package/dist/tooling/cli/astrale/authority.d.ts +0 -5
  340. package/dist/tooling/cli/astrale/authority.js +0 -11
  341. package/dist/tooling/cli/astrale/executable.d.ts +0 -2
  342. package/dist/tooling/cli/astrale/executable.js +0 -47
  343. package/dist/tooling/cli/astrale/failure.d.ts +0 -6
  344. package/dist/tooling/cli/astrale/failure.js +0 -48
  345. package/dist/tooling/cli/astrale/instance.d.ts +0 -11
  346. package/dist/tooling/cli/astrale/instance.js +0 -52
  347. package/dist/tooling/cli/astrale/process.d.ts +0 -13
  348. package/dist/tooling/cli/astrale/process.js +0 -94
  349. package/dist/tooling/cli/astrale/version.d.ts +0 -18
  350. package/dist/tooling/cli/astrale/version.js +0 -55
  351. package/dist/tooling/cli/credential.d.ts +0 -2
  352. package/dist/tooling/cli/credential.js +0 -57
  353. package/dist/tooling/cli/development/candidate.d.ts +0 -25
  354. package/dist/tooling/cli/development/candidate.js +0 -176
  355. package/dist/tooling/cli/development/deployment.d.ts +0 -16
  356. package/dist/tooling/cli/development/deployment.js +0 -39
  357. package/dist/tooling/cli/development/develop.d.ts +0 -11
  358. package/dist/tooling/cli/development/develop.js +0 -243
  359. package/dist/tooling/cli/development/lease.d.ts +0 -18
  360. package/dist/tooling/cli/development/lease.js +0 -163
  361. package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
  362. package/dist/tooling/cli/development/lifecycle.js +0 -43
  363. package/dist/tooling/cli/development/project-imports.d.ts +0 -22
  364. package/dist/tooling/cli/development/project-imports.js +0 -39
  365. package/dist/tooling/cli/development/project-lock.d.ts +0 -16
  366. package/dist/tooling/cli/development/project-lock.js +0 -41
  367. package/dist/tooling/cli/development/rebuild.d.ts +0 -13
  368. package/dist/tooling/cli/development/rebuild.js +0 -58
  369. package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
  370. package/dist/tooling/cli/development/release-evidence.js +0 -10
  371. package/dist/tooling/cli/development/report.d.ts +0 -6
  372. package/dist/tooling/cli/development/report.js +0 -14
  373. package/dist/tooling/cli/development/session-file.d.ts +0 -53
  374. package/dist/tooling/cli/development/session-file.js +0 -337
  375. package/dist/tooling/cli/development/source-watch.d.ts +0 -14
  376. package/dist/tooling/cli/development/source-watch.js +0 -140
  377. package/dist/tooling/cli/development/sources.d.ts +0 -7
  378. package/dist/tooling/cli/development/sources.js +0 -48
  379. package/dist/tooling/cli/development/target-lock.d.ts +0 -16
  380. package/dist/tooling/cli/development/target-lock.js +0 -68
  381. package/dist/tooling/cli/development/view.d.ts +0 -28
  382. package/dist/tooling/cli/development/view.js +0 -151
  383. package/dist/tooling/cli/environment-release.d.ts +0 -21
  384. package/dist/tooling/cli/environment-release.js +0 -46
  385. package/dist/tooling/cli/evidence.d.ts +0 -11
  386. package/dist/tooling/cli/evidence.js +0 -53
  387. package/dist/tooling/cli/installation/index.d.ts +0 -2
  388. package/dist/tooling/cli/installation/index.js +0 -1
  389. package/dist/tooling/cli/installation/observation.d.ts +0 -10
  390. package/dist/tooling/cli/installation/observation.js +0 -44
  391. package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
  392. package/dist/tooling/cli/installation/reconcile.js +0 -122
  393. /package/dist/application/{application.js → domain.js} +0 -0
  394. /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
  395. /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
  396. /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
  397. /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
  398. /package/dist/deployment/adapter/{prepare/artifact.js → legacy/adapter.js} +0 -0
  399. /package/dist/deployment/adapter/{prepare → legacy/deploy}/context.js +0 -0
  400. /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
  401. /package/dist/deployment/release/{publication → served}/routes.js +0 -0
  402. /package/dist/deployment/release/{publication → served}/views.js +0 -0
  403. /package/dist/execution/service/{publication → serving}/index.js +0 -0
@@ -0,0 +1,154 @@
1
+ import type { DeploymentRecordV1, DeploymentSummaryV1 } from '../../deployment/address/index.js';
2
+ import type { DeploymentCallTarget } from '../../deployment/index.js';
3
+ import type { InstallationSourcesV1, InstalledOnV1 } from './installed-on.js';
4
+ import type { LoadedEnvironment } from './project.js';
5
+ import type { DomainRegistry } from './registry/index.js';
6
+ export type { InstallationSourcesV1, InstalledOnV1, InstanceSourceV1 } from './installed-on.js';
7
+ export type { InstallationUnknownReason } from './registry/index.js';
8
+ /**
9
+ * `astrale-domain list --json` on stdout: the deployments of the Project's Environments that their
10
+ * hosts keep for the caller, each with its computed name, the instances known to pin it and where
11
+ * it is called. It changes nothing, at any host, registry or instance.
12
+ */
13
+ export interface ListResultV1 {
14
+ readonly format: 'astrale.deployment-list';
15
+ readonly version: 1;
16
+ readonly origin: string;
17
+ /** Environment by Environment in the Project's order, each in its host's order. */
18
+ readonly deployments: readonly ListedDeploymentV1[];
19
+ /**
20
+ * The selected Environments whose deployments are not in `deployments`, and why: the listing is
21
+ * complete exactly when this is empty.
22
+ */
23
+ readonly unlisted: readonly UnlistedEnvironmentV1[];
24
+ /** Where every `installedOn` comes from, and what of it is unknown (AM-198). */
25
+ readonly installations: InstallationSourcesV1;
26
+ }
27
+ /**
28
+ * One deployment: what its host knows (`DeploymentSummaryV1`), the Environment it was listed for
29
+ * and its adapter, its computed name, and its call target. `lastCallAt` and a preview's `expiresAt`
30
+ * are as of the listing: a platform namespace (adapter-cloudflare) reads every call from its calls
31
+ * dataset, and omits both without Account Analytics Read. Admin's Services (adapter-astrale) keeps
32
+ * every deployment until it is retired and counts no call: its rows are `published`, with neither
33
+ * clock, and say whether their Service serves them (`current`).
34
+ */
35
+ export type ListedDeploymentV1 = Omit<DeploymentSummaryV1, 'record'> & {
36
+ /** The Project Environment whose line holds the deployment, as its host listed it. */
37
+ readonly environment: string;
38
+ /** `<adapter name>@<adapter version>` */
39
+ readonly adapter: string;
40
+ /**
41
+ * The deployment's name (`deploymentName`, CT28), computed and never stored: the version of the
42
+ * registry that names its release (`1.5.0`), or its build elsewhere (`1.5.0 · staging`), else
43
+ * from its record's commit (`1.4.2 + 7 commits · a1b2c3d · staging`). Print it as it is,
44
+ * environment included (AM-57).
45
+ */
46
+ readonly name: string;
47
+ /**
48
+ * The instances known to pin this deployment: those `--instance` asked, as their Kernels list
49
+ * them (CT24). Partial by nature: an instance is known only when asked, and one whose
50
+ * installations are unknown is under `installations`, never absent from here as "not installed"
51
+ * (AM-198).
52
+ */
53
+ readonly installedOn: readonly InstalledOnV1[];
54
+ /**
55
+ * The record its deployer declared, as `acceptDeploymentRecord` admits it. `null` when there is
56
+ * no admitted record: the host returns a record this SDK refuses or one that describes another
57
+ * deployment, or keeps none (the adapter lists it without a record, as a platform namespace lists
58
+ * a deployment it has not activated). The deployment is then listed from what its host knows, and
59
+ * named in the listed Environment, from the commit of that record only when the record names this
60
+ * deployment, origin and Environment.
61
+ */
62
+ readonly record: DeploymentRecordV1 | null;
63
+ /**
64
+ * Why there is no admitted record: the refusal of the stored one, or that its host keeps none;
65
+ * present exactly when `record` is `null`.
66
+ */
67
+ readonly recordRefusal?: string;
68
+ /**
69
+ * Whether the stable URL of the deployment's Service serves it; present only for a host with
70
+ * Services (Admin's Services).
71
+ */
72
+ readonly current?: boolean;
73
+ /** Where to call this deployment, and on Admin's Services its Service. */
74
+ readonly callTarget: DeploymentCallTarget;
75
+ };
76
+ /**
77
+ * An Environment the listing did not list:
78
+ * - `legacy-direct`: it replaces one stable target in place and makes no immutable deployment;
79
+ * - `refused`: `deploy` refuses its configuration, so it deploys nothing;
80
+ * - `unsupported`: its adapter deploys immutable deployments but lists none.
81
+ */
82
+ export interface UnlistedEnvironmentV1 {
83
+ readonly environment: string;
84
+ readonly adapter: string;
85
+ readonly reason: 'legacy-direct' | 'refused' | 'unsupported';
86
+ }
87
+ /** What a listing found, beside the result: what to tell a person, and what failed. */
88
+ export interface DeploymentListing {
89
+ readonly result: ListResultV1;
90
+ /**
91
+ * One line for each Environment not listed, each record not admitted and each source of
92
+ * INSTALLED ON that could not tell, for stderr.
93
+ */
94
+ readonly notices: readonly string[];
95
+ /** Environments whose host could not be listed: their deployments are missing from the result. */
96
+ readonly failures: readonly {
97
+ readonly environment: string;
98
+ readonly adapter: string;
99
+ readonly error: Error;
100
+ }[];
101
+ /**
102
+ * The Domain registry could not be read, so no deployment can be named by its version and the
103
+ * result is not to be printed: versions are never dropped silently (AM-224). That is a missing
104
+ * Astrale CLI, one older than the listing's floor, no identity it may use, an Admin it cannot
105
+ * reach, an index it cannot read, or an interruption while it reads; never a source of
106
+ * INSTALLED ON, which only makes the listing partial.
107
+ */
108
+ readonly registryFailure?: Error;
109
+ }
110
+ /** What the listing reads through the Astrale CLI: the registry index and the instances. */
111
+ export type DeploymentRegistry = Pick<DomainRegistry, 'index' | 'instance'>;
112
+ /**
113
+ * List the deployments of the selected Environments, one adapter `list` call each, then name them
114
+ * and say where they are installed (tech [.59528]: the records, the registry's versions and the
115
+ * instances' pins).
116
+ *
117
+ * Only an Environment that deploys immutable deployments (CT33 canonical) is listed; the others are
118
+ * `unlisted`, with the reason. A record the host returns but `acceptDeploymentRecord` refuses never
119
+ * fails the listing: that deployment is listed from what its host knows, its record `null`. This
120
+ * covers a host whose SDK still admits a record this SDK refuses, and a host that lists a record
121
+ * its own SDK no longer admits as it is stored (Admin's Services does). An Environment whose host
122
+ * cannot be listed, or whose adapter answers anything but deployments, is a failure, and the others
123
+ * are still listed.
124
+ *
125
+ * Once a deployment is listed, the registry is opened once: its index of the origin names each
126
+ * deployment by the version of its release or build (CT28; none when the origin is unregistered or
127
+ * not readable), and the instances that pin each deployment come from each `--instance` (CT24);
128
+ * Admin does not say which instances pin a release (AM-241). A registry that cannot be opened or
129
+ * whose index cannot be read is `registryFailure`, and the instance reads still running are
130
+ * stopped at once; an instance that cannot tell never fails the listing: it is partial (AM-198,
131
+ * AM-224).
132
+ */
133
+ export declare function listDeployments(input: {
134
+ readonly origin: string;
135
+ /** The selected Environments, in the Project's order. */
136
+ readonly environments: readonly (readonly [string, LoadedEnvironment])[];
137
+ readonly identity?: string;
138
+ readonly signal: AbortSignal;
139
+ /**
140
+ * Opens the Domain registry, once, and only when at least one deployment is listed. Every read
141
+ * it makes follows `signal`, which also stops when the index cannot be read.
142
+ */
143
+ readonly registry: (signal: AbortSignal) => Promise<DeploymentRegistry>;
144
+ /** Instances to ask what they run (`--instance`, repeatable). */
145
+ readonly instances?: readonly string[];
146
+ }): Promise<DeploymentListing>;
147
+ /**
148
+ * The listing as a table for a person, at `now`: each deployment's release, its name as computed
149
+ * (never shortened, AM-57), its Environment and state (`active (current)` for the deployment its
150
+ * Service serves), the instances known to pin it (`?` when a source could not tell, AM-198), its
151
+ * last call and its expiry, and the URL `astrale domain install` takes. Without deployments, it says so only for what was listed: nothing when a host
152
+ * `failed` (stderr says which), and that some Environments were not listed when any was not.
153
+ */
154
+ export declare function renderDeploymentList(result: ListResultV1, now: number, failed?: boolean): readonly string[];
@@ -0,0 +1,381 @@
1
+ import { acceptDeploymentRecord } from '../../deployment/address/index.js';
2
+ import { deploymentName } from '../../platform/versioning/name.js';
3
+ import { selectDeployMode } from './deploy-mode.js';
4
+ import { installationNotices, installedOn, installedOnCell, readInstallations, skippedInstallations, } from './installed-on.js';
5
+ /**
6
+ * List the deployments of the selected Environments, one adapter `list` call each, then name them
7
+ * and say where they are installed (tech [.59528]: the records, the registry's versions and the
8
+ * instances' pins).
9
+ *
10
+ * Only an Environment that deploys immutable deployments (CT33 canonical) is listed; the others are
11
+ * `unlisted`, with the reason. A record the host returns but `acceptDeploymentRecord` refuses never
12
+ * fails the listing: that deployment is listed from what its host knows, its record `null`. This
13
+ * covers a host whose SDK still admits a record this SDK refuses, and a host that lists a record
14
+ * its own SDK no longer admits as it is stored (Admin's Services does). An Environment whose host
15
+ * cannot be listed, or whose adapter answers anything but deployments, is a failure, and the others
16
+ * are still listed.
17
+ *
18
+ * Once a deployment is listed, the registry is opened once: its index of the origin names each
19
+ * deployment by the version of its release or build (CT28; none when the origin is unregistered or
20
+ * not readable), and the instances that pin each deployment come from each `--instance` (CT24);
21
+ * Admin does not say which instances pin a release (AM-241). A registry that cannot be opened or
22
+ * whose index cannot be read is `registryFailure`, and the instance reads still running are
23
+ * stopped at once; an instance that cannot tell never fails the listing: it is partial (AM-198,
24
+ * AM-224).
25
+ */
26
+ export async function listDeployments(input) {
27
+ const hosted = [];
28
+ const unlisted = [];
29
+ const notices = [];
30
+ const failures = [];
31
+ for (const [environment, definition] of input.environments) {
32
+ const { adapter, parameters } = definition.deployment;
33
+ const name = `${adapter.name}@${adapter.version}`;
34
+ const mode = selectDeployMode({ command: 'deploy', environment, definition });
35
+ if (mode.kind !== 'canonical') {
36
+ unlisted.push(Object.freeze({
37
+ environment,
38
+ adapter: name,
39
+ reason: mode.kind,
40
+ }));
41
+ notices.push(mode.kind === 'legacy-direct'
42
+ ? `Environment ${environment} is not listed: it deploys in legacy direct mode, replacing ` +
43
+ 'one stable target in place, and has no immutable deployments.'
44
+ : `Environment ${environment} is not listed: deploy refuses its configuration. ` +
45
+ mode.refusals.map((refusal) => refusal.guidance).join(' '));
46
+ continue;
47
+ }
48
+ if (!('list' in adapter) || typeof adapter.list !== 'function') {
49
+ unlisted.push(Object.freeze({ environment, adapter: name, reason: 'unsupported' }));
50
+ notices.push(`Environment ${environment} is not listed: adapter ${name} lists no deployments.`);
51
+ continue;
52
+ }
53
+ let listed;
54
+ try {
55
+ listed = await adapter.list(parameters, {
56
+ origin: input.origin,
57
+ environment,
58
+ signal: input.signal,
59
+ ...(input.identity === undefined ? {} : { identity: input.identity }),
60
+ });
61
+ if (!Array.isArray(listed)) {
62
+ throw new TypeError(`Adapter ${name} listed no array of deployments.`);
63
+ }
64
+ for (const deployment of listed)
65
+ admitListed(deployment, name);
66
+ }
67
+ catch (cause) {
68
+ failures.push(Object.freeze({
69
+ environment,
70
+ adapter: name,
71
+ error: cause instanceof Error ? cause : new Error(String(cause)),
72
+ }));
73
+ continue;
74
+ }
75
+ for (const deployment of listed) {
76
+ const row = hostedDeployment(deployment, { origin: input.origin, environment, adapter: name });
77
+ if (row.recordRefusal !== undefined) {
78
+ notices.push(deployment.record === undefined
79
+ ? `Deployment ${deployment.label} (${environment}) is listed from what its host knows: ` +
80
+ `${row.recordRefusal}`
81
+ : `Deployment ${deployment.label} (${environment}) is listed from what its host knows: its ` +
82
+ `stored record is not admitted. ${row.recordRefusal}`);
83
+ }
84
+ hosted.push(row);
85
+ }
86
+ }
87
+ let publications = [];
88
+ let installations = skippedInstallations(input.instances ?? []);
89
+ let registryFailure;
90
+ if (hosted.length > 0) {
91
+ // One signal for every registry read, so that an unreadable index stops the others.
92
+ const reads = new AbortController();
93
+ const interrupt = () => reads.abort(input.signal.reason);
94
+ if (input.signal.aborted)
95
+ interrupt();
96
+ else
97
+ input.signal.addEventListener('abort', interrupt, { once: true });
98
+ try {
99
+ const registry = await input.registry(reads.signal);
100
+ // The index and every `--instance` are read together; the latter fail only when the reads
101
+ // are stopped, which is handled where they are awaited below.
102
+ const read = readInstallations(registry, input.origin, input.instances ?? [], reads.signal);
103
+ read.catch(() => undefined);
104
+ try {
105
+ publications = (await registry.index(input.origin))?.publications ?? [];
106
+ }
107
+ catch (cause) {
108
+ // Nothing is printed without the versions: stop the CLI processes still asking instances
109
+ // what they run, and wait only for them to end.
110
+ reads.abort(cause);
111
+ await read.catch(() => undefined);
112
+ throw cause;
113
+ }
114
+ installations = await read;
115
+ }
116
+ catch (cause) {
117
+ registryFailure = cause instanceof Error ? cause : new Error(String(cause));
118
+ }
119
+ finally {
120
+ input.signal.removeEventListener('abort', interrupt);
121
+ }
122
+ }
123
+ // INSTALLED ON is reported only for rows the listing prints.
124
+ if (hosted.length > 0 && registryFailure === undefined) {
125
+ notices.push(...installationNotices(installations.sources));
126
+ }
127
+ return Object.freeze({
128
+ result: Object.freeze({
129
+ format: 'astrale.deployment-list',
130
+ version: 1,
131
+ origin: input.origin,
132
+ deployments: Object.freeze(hosted.map((row) => listedDeployment(row, publications, installations))),
133
+ unlisted: Object.freeze(unlisted),
134
+ installations: installations.sources,
135
+ }),
136
+ notices: Object.freeze(notices),
137
+ failures: Object.freeze(failures),
138
+ ...(registryFailure === undefined ? {} : { registryFailure }),
139
+ });
140
+ }
141
+ /**
142
+ * One listed deployment's record, admitted when it describes exactly this deployment of this
143
+ * origin and Environment, else refused with why, or none when its host keeps none (`NO_RECORD`).
144
+ */
145
+ function hostedDeployment(deployment, listing) {
146
+ if (deployment.record === undefined) {
147
+ return { deployment, listing, record: null, recordRefusal: NO_RECORD };
148
+ }
149
+ try {
150
+ const admitted = acceptDeploymentRecord(deployment.record);
151
+ const recordRefusal = describesAnother(admitted, deployment.label, listing);
152
+ return recordRefusal === undefined
153
+ ? { deployment, listing, record: admitted }
154
+ : { deployment, listing, record: null, recordRefusal };
155
+ }
156
+ catch (cause) {
157
+ return {
158
+ deployment,
159
+ listing,
160
+ record: null,
161
+ recordRefusal: cause instanceof Error ? cause.message : String(cause),
162
+ };
163
+ }
164
+ }
165
+ /**
166
+ * One listed deployment, named and placed. With an admitted record, its name comes from the
167
+ * registry's Publications of the origin that name its release, else its build, else from its
168
+ * record (CT28). Otherwise it is named in the listed Environment, with the commit of the stored
169
+ * record only when that record names this deployment, origin and Environment, and never by a
170
+ * version: a record the listing does not admit gives no digest to name.
171
+ */
172
+ function listedDeployment(hosted, publications, installations) {
173
+ const { deployment, listing, record, recordRefusal } = hosted;
174
+ // A build digest names the row from any Publication of the origin, whatever its URL: the row is
175
+ // a deployment its own host lists for the caller, and the build of a version deployed elsewhere
176
+ // is another deployment at another URL (`1.5.0 · staging`, tech [.83533]). An instance's pin,
177
+ // which a frozen Worker's tenant may serve, is named only within its issuer (AM-73, AM-224).
178
+ const name = record === null
179
+ ? deploymentName(canonicalParts(deployment.record, deployment.label, listing), [])
180
+ : deploymentName(record, publications);
181
+ return Object.freeze({
182
+ environment: listing.environment,
183
+ adapter: listing.adapter,
184
+ name,
185
+ installedOn: installedOn(deployment.url, installations),
186
+ id: deployment.id,
187
+ url: deployment.url,
188
+ label: deployment.label,
189
+ line: deployment.line,
190
+ owner: deployment.owner,
191
+ state: deployment.state,
192
+ retention: deployment.retention,
193
+ createdAt: deployment.createdAt,
194
+ ...(deployment.lastCallAt === undefined ? {} : { lastCallAt: deployment.lastCallAt }),
195
+ ...(deployment.expiresAt === undefined ? {} : { expiresAt: deployment.expiresAt }),
196
+ ...(deployment.retiredAt === undefined ? {} : { retiredAt: deployment.retiredAt }),
197
+ ...(deployment.retirement === undefined ? {} : { retirement: deployment.retirement }),
198
+ signingKeyId: deployment.signingKeyId,
199
+ record,
200
+ ...(recordRefusal === undefined ? {} : { recordRefusal }),
201
+ ...(deployment.current === undefined ? {} : { current: deployment.current }),
202
+ callTarget: deployment.callTarget,
203
+ });
204
+ }
205
+ /**
206
+ * Why a deployment its host keeps no record of has none: the adapter lists it without `record`, as a
207
+ * platform namespace lists a deployment it has not activated.
208
+ */
209
+ const NO_RECORD = 'Its host keeps no record of it: it has not been activated (a deploy still in progress, or one ' +
210
+ 'that stopped before activating it).';
211
+ /** Why an admitted record does not describe the listed deployment, if it does not. */
212
+ function describesAnother(record, label, listing) {
213
+ if (record.providerScript !== label) {
214
+ return `Deployment record describes deployment ${record.providerScript}, not ${label}.`;
215
+ }
216
+ if (record.origin !== listing.origin) {
217
+ return `Deployment record declares origin ${record.origin}, not ${listing.origin}.`;
218
+ }
219
+ if (record.environment !== listing.environment) {
220
+ return `Deployment record declares environment ${record.environment}, not ${listing.environment}.`;
221
+ }
222
+ return undefined;
223
+ }
224
+ /**
225
+ * What a deployment name may read of a stored record that is not admitted: the listed Environment,
226
+ * never the record's own, and the record's commit only when the record names this deployment, its
227
+ * origin and that Environment, each part kept only with the type the name reads. No digest: a
228
+ * record the listing does not admit is never named by a published version.
229
+ */
230
+ function canonicalParts(input, label, listing) {
231
+ const value = members(input);
232
+ // A record that does not say it describes this deployment says nothing of it, not its commit.
233
+ const describesThis = value?.providerScript === label &&
234
+ value.origin === listing.origin &&
235
+ value.environment === listing.environment;
236
+ const commit = describesThis ? members(value.commit) : undefined;
237
+ const base = members(commit?.base);
238
+ return {
239
+ environment: listing.environment,
240
+ commit: typeof commit?.sha === 'string'
241
+ ? {
242
+ sha: commit.sha,
243
+ dirty: commit.dirty === true,
244
+ ...(typeof base?.version === 'string' && typeof base.distance === 'number'
245
+ ? { base: { version: base.version, distance: base.distance } }
246
+ : {}),
247
+ }
248
+ : null,
249
+ };
250
+ }
251
+ const STATES = ['deploying', 'active', 'retiring', 'retired', 'failed'];
252
+ /**
253
+ * Admit one deployment an adapter listed, before any is kept: the facts a row prints, each of the
254
+ * type `DeploymentSummaryV1` gives it, and a call target an operator can act on. Anything else is
255
+ * that Environment's failure, never a row without its call target.
256
+ */
257
+ function admitListed(deployment, adapter) {
258
+ const invalid = (member) => {
259
+ throw new TypeError(`Adapter ${adapter} listed an invalid deployment (${member}).`);
260
+ };
261
+ const value = members(deployment) ?? invalid('deployment');
262
+ for (const key of ['id', 'url', 'label', 'line', 'owner', 'createdAt', 'signingKeyId']) {
263
+ if (!text(value[key]))
264
+ invalid(key);
265
+ }
266
+ for (const key of ['lastCallAt', 'expiresAt', 'retiredAt']) {
267
+ if (value[key] !== undefined && !text(value[key]))
268
+ invalid(key);
269
+ }
270
+ if (!STATES.includes(value.state))
271
+ invalid('state');
272
+ if (value.retention !== 'preview' && value.retention !== 'published')
273
+ invalid('retention');
274
+ if (value.retirement !== undefined &&
275
+ value.retirement !== 'expired' &&
276
+ value.retirement !== 'withdrawn') {
277
+ invalid('retirement');
278
+ }
279
+ if (value.current !== undefined && typeof value.current !== 'boolean')
280
+ invalid('current');
281
+ const target = members(value.callTarget) ?? invalid('callTarget');
282
+ if (target.kind === 'services') {
283
+ if (!text(target.path) ||
284
+ !text(target.service) ||
285
+ (target.admin !== undefined && !text(target.admin))) {
286
+ invalid('callTarget');
287
+ }
288
+ }
289
+ else if (target.kind !== 'namespace' || !text(target.namespace) || !text(target.script)) {
290
+ invalid('callTarget');
291
+ }
292
+ }
293
+ function text(value) {
294
+ return typeof value === 'string' && value.length > 0;
295
+ }
296
+ function members(input) {
297
+ return input !== null && typeof input === 'object' && !Array.isArray(input)
298
+ ? input
299
+ : undefined;
300
+ }
301
+ const COLUMNS = [
302
+ 'RELEASE',
303
+ 'VERSION',
304
+ 'ENV',
305
+ 'STATE',
306
+ 'INSTALLED ON',
307
+ 'LAST CALL',
308
+ 'EXPIRES',
309
+ 'URL',
310
+ ];
311
+ const MINUTE = 60_000;
312
+ const HOUR = 60 * MINUTE;
313
+ const DAY = 24 * HOUR;
314
+ /**
315
+ * The listing as a table for a person, at `now`: each deployment's release, its name as computed
316
+ * (never shortened, AM-57), its Environment and state (`active (current)` for the deployment its
317
+ * Service serves), the instances known to pin it (`?` when a source could not tell, AM-198), its
318
+ * last call and its expiry, and the URL `astrale domain install` takes. Without deployments, it says so only for what was listed: nothing when a host
319
+ * `failed` (stderr says which), and that some Environments were not listed when any was not.
320
+ */
321
+ export function renderDeploymentList(result, now, failed = false) {
322
+ if (result.deployments.length === 0) {
323
+ if (failed)
324
+ return Object.freeze([]);
325
+ return Object.freeze([
326
+ result.unlisted.length === 0
327
+ ? `No deployments of ${result.origin}.`
328
+ : `No deployments of ${result.origin} in the Environments listed; ` +
329
+ `${result.unlisted.length} not listed (see above).`,
330
+ ]);
331
+ }
332
+ const rows = result.deployments.map((deployment) => [
333
+ deployment.record === null ? '?' : shortDigest(deployment.record.releaseDigest),
334
+ deployment.name,
335
+ deployment.environment,
336
+ deployment.current === true ? `${deployment.state} (current)` : deployment.state,
337
+ installedOnCell(deployment.installedOn, result.installations),
338
+ deployment.lastCallAt === undefined
339
+ ? '—'
340
+ : `${elapsed(now - Date.parse(deployment.lastCallAt))} ago`,
341
+ expiry(deployment, now),
342
+ deployment.url,
343
+ ]);
344
+ const widths = COLUMNS.map((column, index) => Math.max(column.length, ...rows.map((row) => row[index].length)));
345
+ const line = (cells) => cells
346
+ .map((cell, index) => (index === cells.length - 1 ? cell : cell.padEnd(widths[index])))
347
+ .join(' ');
348
+ return Object.freeze([line(COLUMNS), ...rows.map(line)]);
349
+ }
350
+ /** `sha256:` and the first seven hexadecimal digits, as git abbreviates a commit. */
351
+ function shortDigest(digest) {
352
+ return `${digest.slice(0, 'sha256:'.length + 7)}…`;
353
+ }
354
+ /**
355
+ * When a deployment stops serving: `never` once published, else its preview expiry as its host
356
+ * keeps it, 30 days after its activation or its last call, whichever is later (AM-123), with the
357
+ * calls counted since the host recorded them; `due` once that instant passed but the host has not
358
+ * retired it yet; for a retired deployment, why it was retired.
359
+ */
360
+ function expiry(deployment, now) {
361
+ if (deployment.state === 'retiring')
362
+ return 'retiring';
363
+ if (deployment.state === 'retired')
364
+ return deployment.retirement ?? 'retired';
365
+ if (deployment.retention === 'published')
366
+ return 'never';
367
+ if (deployment.expiresAt === undefined)
368
+ return '—';
369
+ const remaining = Date.parse(deployment.expiresAt) - now;
370
+ return remaining > 0 ? `in ${elapsed(remaining)}` : 'due';
371
+ }
372
+ /** A duration as a person reads it in a listing: minutes, then hours, then days. */
373
+ function elapsed(milliseconds) {
374
+ if (!(milliseconds >= MINUTE))
375
+ return '< 1 min';
376
+ if (milliseconds < HOUR)
377
+ return `${Math.floor(milliseconds / MINUTE)} min`;
378
+ if (milliseconds < DAY)
379
+ return `${Math.floor(milliseconds / HOUR)} h`;
380
+ return `${Math.floor(milliseconds / DAY)} d`;
381
+ }
@@ -6,5 +6,10 @@ export declare const YELLOW = "\u001B[33m";
6
6
  export declare const RED = "\u001B[31m";
7
7
  export declare const RESET = "\u001B[0m";
8
8
  export declare function info(msg: string): void;
9
+ /**
10
+ * Where a command reports its progress: `info` on stdout for a person, the same lines on stderr
11
+ * when stdout carries one machine-readable document (`--json`).
12
+ */
13
+ export declare function progress(machine: boolean): (msg: string) => void;
9
14
  export declare function warn(msg: string): void;
10
15
  export declare function error(msg: string): void;
@@ -8,6 +8,15 @@ export const RESET = '\x1b[0m';
8
8
  export function info(msg) {
9
9
  process.stdout.write(`${DIM}›${RESET} ${msg}\n`);
10
10
  }
11
+ /**
12
+ * Where a command reports its progress: `info` on stdout for a person, the same lines on stderr
13
+ * when stdout carries one machine-readable document (`--json`).
14
+ */
15
+ export function progress(machine) {
16
+ if (!machine)
17
+ return info;
18
+ return (msg) => process.stderr.write(`${DIM}›${RESET} ${msg}\n`);
19
+ }
11
20
  export function warn(msg) {
12
21
  process.stderr.write(`${YELLOW}!${RESET} ${msg}\n`);
13
22
  }
@@ -1,7 +1 @@
1
- import { type ParsedArgs } from './arguments.js';
2
- import { develop } from './development/develop.js';
3
1
  export declare function run(argv: readonly string[]): Promise<number>;
4
- export declare function executeDevelopmentCommand(parsed: ParsedArgs, input: {
5
- readonly configPath: string;
6
- readonly projectDir: string;
7
- }, execute?: typeof develop): Promise<number>;