@astrale-os/sdk 0.6.0-beta.4 → 0.6.0-beta.41

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 (516) hide show
  1. package/README.md +191 -58
  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 +47 -31
  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 +8 -6
  8. package/dist/application/define.js +28 -14
  9. package/dist/application/dependency/index.d.ts +1 -1
  10. package/dist/application/dependency/invoker.d.ts +21 -10
  11. package/dist/application/domain.d.ts +30 -0
  12. package/dist/application/index.d.ts +4 -4
  13. package/dist/application/index.js +1 -1
  14. package/dist/application/integration/define.d.ts +8 -1
  15. package/dist/application/integration/index.d.ts +2 -2
  16. package/dist/application/integration/integration.d.ts +13 -1
  17. package/dist/application/integration/operation.d.ts +16 -3
  18. package/dist/application/mutation/authoring/properties.d.ts +5 -3
  19. package/dist/application/mutation/authoring/properties.js +35 -2
  20. package/dist/application/mutation/authoring/transition.js +4 -1
  21. package/dist/application/mutation/execution/execute.js +1 -1
  22. package/dist/application/mutation/failure.d.ts +6 -0
  23. package/dist/application/mutation/failure.js +24 -18
  24. package/dist/application/mutation/index.d.ts +1 -1
  25. package/dist/application/query/collection/union.js +11 -4
  26. package/dist/application/query/composite/plan.d.ts +0 -4
  27. package/dist/application/query/composite/plan.js +0 -2
  28. package/dist/application/query/conformance.d.ts +15 -0
  29. package/dist/application/query/conformance.js +46 -0
  30. package/dist/application/query/define.js +4 -3
  31. package/dist/application/query/execution/execute.d.ts +0 -1
  32. package/dist/application/query/execution/execute.js +7 -1
  33. package/dist/application/query/failure.d.ts +8 -0
  34. package/dist/application/query/failure.js +8 -0
  35. package/dist/application/query/index.d.ts +1 -1
  36. package/dist/application/query/index.js +1 -1
  37. package/dist/application/routes/admission.d.ts +2 -2
  38. package/dist/application/routes/admission.js +1 -1
  39. package/dist/application/routes/route.d.ts +2 -2
  40. package/dist/application/runtime/actions.js +3 -0
  41. package/dist/application/runtime/workflows.d.ts +3 -1
  42. package/dist/application/runtime/workflows.js +3 -4
  43. package/dist/application/view/define.js +4 -6
  44. package/dist/application/view/frontend.d.ts +2 -2
  45. package/dist/application/view/index.d.ts +1 -1
  46. package/dist/application/view/route.d.ts +0 -14
  47. package/dist/application/view/route.js +1 -64
  48. package/dist/application/workflow/authoring.d.ts +3 -2
  49. package/dist/application/workflow/context.d.ts +8 -2
  50. package/dist/application/workflow/define.d.ts +4 -4
  51. package/dist/application/workflow/define.js +14 -9
  52. package/dist/application/workflow/durable.d.ts +197 -0
  53. package/dist/application/workflow/index.d.ts +3 -2
  54. package/dist/application/workflow/runner/inline.js +3 -4
  55. package/dist/application/workflow/runner/runner.d.ts +2 -2
  56. package/dist/application/workflow/step/output.d.ts +2 -0
  57. package/dist/application/workflow/step/output.js +73 -0
  58. package/dist/application/workflow/workflow.d.ts +5 -3
  59. package/dist/deployment/adapter/adapter.d.ts +55 -13
  60. package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
  61. package/dist/deployment/adapter/bundle/file.d.ts +10 -0
  62. package/dist/deployment/adapter/bundle/index.d.ts +2 -0
  63. package/dist/deployment/adapter/define.d.ts +4 -3
  64. package/dist/deployment/adapter/define.js +107 -23
  65. package/dist/deployment/adapter/index.d.ts +4 -3
  66. package/dist/deployment/adapter/index.js +1 -0
  67. package/dist/deployment/adapter/release/command.d.ts +33 -0
  68. package/dist/deployment/adapter/release/context.d.ts +94 -0
  69. package/dist/deployment/adapter/release/index.d.ts +4 -0
  70. package/dist/deployment/adapter/release/index.js +1 -0
  71. package/dist/deployment/adapter/release/list.d.ts +53 -0
  72. package/dist/deployment/adapter/release/list.js +1 -0
  73. package/dist/deployment/adapter/release/refusal.d.ts +10 -0
  74. package/dist/deployment/adapter/release/refusal.js +14 -0
  75. package/dist/deployment/adapter/release/result.d.ts +56 -0
  76. package/dist/deployment/adapter/release/result.js +1 -0
  77. package/dist/deployment/address/configuration.d.ts +96 -0
  78. package/dist/deployment/address/configuration.js +274 -0
  79. package/dist/deployment/address/fingerprint.d.ts +5 -0
  80. package/dist/deployment/address/fingerprint.js +27 -0
  81. package/dist/deployment/address/index.d.ts +5 -0
  82. package/dist/deployment/address/index.js +4 -0
  83. package/dist/deployment/address/label.d.ts +42 -0
  84. package/dist/deployment/address/label.js +80 -0
  85. package/dist/deployment/address/line.d.ts +29 -0
  86. package/dist/deployment/address/line.js +53 -0
  87. package/dist/deployment/address/record.d.ts +73 -0
  88. package/dist/deployment/address/record.js +138 -0
  89. package/dist/deployment/address/summary.d.ts +30 -0
  90. package/dist/deployment/address/summary.js +1 -0
  91. package/dist/deployment/address/vectors.d.ts +60 -0
  92. package/dist/deployment/address/vectors.js +517 -0
  93. package/dist/deployment/authoring.d.ts +0 -2
  94. package/dist/deployment/authoring.js +0 -1
  95. package/dist/deployment/build/build.d.ts +8 -2
  96. package/dist/deployment/build/compile.d.ts +4 -4
  97. package/dist/deployment/build/compile.js +19 -17
  98. package/dist/deployment/build/frontend/compilation.d.ts +2 -4
  99. package/dist/deployment/build/frontend/compilation.js +0 -5
  100. package/dist/deployment/build/frontend/digest.js +1 -5
  101. package/dist/deployment/build/index.d.ts +1 -0
  102. package/dist/deployment/build/index.js +1 -0
  103. package/dist/deployment/build/manifest.d.ts +59 -0
  104. package/dist/deployment/build/manifest.js +118 -0
  105. package/dist/deployment/build/material.d.ts +2 -2
  106. package/dist/deployment/build/material.js +28 -13
  107. package/dist/deployment/build/schema.d.ts +2 -2
  108. package/dist/deployment/deployment.d.ts +3 -2
  109. package/dist/deployment/environment.d.ts +6 -0
  110. package/dist/deployment/environment.js +6 -0
  111. package/dist/deployment/index.d.ts +4 -6
  112. package/dist/deployment/index.js +1 -2
  113. package/dist/deployment/release/addressing.d.ts +6 -5
  114. package/dist/deployment/release/addressing.js +2 -3
  115. package/dist/deployment/release/assemble.d.ts +6 -3
  116. package/dist/deployment/release/assemble.js +12 -10
  117. package/dist/deployment/release/release.d.ts +16 -5
  118. package/dist/deployment/release/seal.d.ts +14 -0
  119. package/dist/deployment/release/seal.js +22 -0
  120. package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
  121. package/dist/deployment/release/{publication → served}/callables.js +2 -2
  122. package/dist/deployment/release/served/index.d.ts +11 -0
  123. package/dist/deployment/release/served/index.js +26 -0
  124. package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
  125. package/dist/deployment/release/{publication → served}/views.js +0 -1
  126. package/dist/deployment/runtime/admission.d.ts +2 -2
  127. package/dist/deployment/runtime/admission.js +5 -5
  128. package/dist/deployment/verify/index.d.ts +3 -4
  129. package/dist/deployment/verify/index.js +2 -3
  130. package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
  131. package/dist/deployment/verify/preflight/bundle.js +71 -0
  132. package/dist/deployment/verify/preflight/index.d.ts +1 -12
  133. package/dist/deployment/verify/preflight/index.js +1 -12
  134. package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
  135. package/dist/deployment/verify/readiness/fetch.js +26 -0
  136. package/dist/deployment/verify/readiness/identity.d.ts +3 -6
  137. package/dist/deployment/verify/readiness/identity.js +3 -3
  138. package/dist/deployment/verify/readiness/index.d.ts +15 -8
  139. package/dist/deployment/verify/readiness/index.js +25 -6
  140. package/dist/deployment/verify/readiness/release.d.ts +8 -0
  141. package/dist/deployment/verify/readiness/release.js +22 -0
  142. package/dist/deployment/worker/address.d.ts +26 -0
  143. package/dist/deployment/worker/address.js +43 -0
  144. package/dist/deployment/worker/build.d.ts +60 -0
  145. package/dist/deployment/worker/build.js +172 -0
  146. package/dist/deployment/worker/configuration.d.ts +73 -0
  147. package/dist/deployment/worker/configuration.js +165 -0
  148. package/dist/deployment/worker/content.d.ts +38 -0
  149. package/dist/deployment/worker/content.js +169 -0
  150. package/dist/deployment/worker/index.d.ts +29 -0
  151. package/dist/deployment/worker/index.js +29 -0
  152. package/dist/deployment/worker/limits.d.ts +30 -0
  153. package/dist/deployment/worker/limits.js +30 -0
  154. package/dist/deployment/worker/record.d.ts +29 -0
  155. package/dist/deployment/worker/record.js +69 -0
  156. package/dist/deployment/worker/request.d.ts +118 -0
  157. package/dist/deployment/worker/request.js +280 -0
  158. package/dist/deployment/worker/response.d.ts +101 -0
  159. package/dist/deployment/worker/response.js +207 -0
  160. package/dist/execution/cache/cache.d.ts +17 -0
  161. package/dist/execution/cache/cache.js +11 -0
  162. package/dist/execution/cache/index.d.ts +2 -0
  163. package/dist/execution/cache/index.js +2 -0
  164. package/dist/execution/cache/memory.d.ts +13 -0
  165. package/dist/execution/cache/memory.js +48 -0
  166. package/dist/execution/identity/authentication.d.ts +33 -3
  167. package/dist/execution/identity/authentication.js +90 -36
  168. package/dist/execution/identity/callback.d.ts +20 -20
  169. package/dist/execution/identity/callback.js +34 -26
  170. package/dist/execution/identity/delivery.d.ts +6 -4
  171. package/dist/execution/identity/delivery.js +25 -20
  172. package/dist/execution/identity/identity.d.ts +17 -3
  173. package/dist/execution/identity/identity.js +12 -4
  174. package/dist/execution/identity/jwks.d.ts +5 -0
  175. package/dist/execution/identity/jwks.js +92 -102
  176. package/dist/execution/index.d.ts +6 -4
  177. package/dist/execution/index.js +4 -2
  178. package/dist/execution/invocation/admission/age.d.ts +57 -0
  179. package/dist/execution/invocation/admission/age.js +208 -0
  180. package/dist/execution/invocation/admission/authentication.d.ts +13 -13
  181. package/dist/execution/invocation/admission/authentication.js +52 -44
  182. package/dist/execution/invocation/admission/authority.d.ts +28 -6
  183. package/dist/execution/invocation/admission/authority.js +9 -2
  184. package/dist/execution/invocation/admission/index.d.ts +4 -3
  185. package/dist/execution/invocation/admission/index.js +3 -2
  186. package/dist/execution/invocation/admission/input.d.ts +2 -2
  187. package/dist/execution/invocation/admission/input.js +16 -2
  188. package/dist/execution/invocation/admission/target.d.ts +11 -0
  189. package/dist/execution/invocation/admission/target.js +22 -3
  190. package/dist/execution/invocation/capabilities/bind.d.ts +11 -0
  191. package/dist/execution/invocation/capabilities/bind.js +25 -0
  192. package/dist/execution/invocation/capabilities/index.d.ts +1 -0
  193. package/dist/execution/invocation/capabilities/index.js +1 -0
  194. package/dist/execution/invocation/dependency/bind.d.ts +3 -1
  195. package/dist/execution/invocation/dependency/bind.js +36 -16
  196. package/dist/execution/invocation/dispatch/context.d.ts +7 -6
  197. package/dist/execution/invocation/dispatch/context.js +11 -44
  198. package/dist/execution/invocation/dispatch/workflow.js +0 -4
  199. package/dist/execution/invocation/handler.js +8 -2
  200. package/dist/execution/invocation/index.d.ts +2 -2
  201. package/dist/execution/invocation/index.js +1 -1
  202. package/dist/execution/invocation/integration/authentication.d.ts +3 -3
  203. package/dist/execution/invocation/integration/authentication.js +7 -7
  204. package/dist/execution/invocation/integration/call.d.ts +2 -1
  205. package/dist/execution/invocation/integration/call.js +3 -3
  206. package/dist/execution/invocation/integration/clients.d.ts +1 -1
  207. package/dist/execution/invocation/integration/index.d.ts +1 -0
  208. package/dist/execution/invocation/integration/index.js +1 -0
  209. package/dist/execution/invocation/invocation.d.ts +6 -0
  210. package/dist/execution/invocation/invocation.js +129 -21
  211. package/dist/execution/invocation/lifecycle/active.d.ts +8 -2
  212. package/dist/execution/invocation/lifecycle/active.js +3 -3
  213. package/dist/execution/invocation/lifecycle/index.d.ts +1 -1
  214. package/dist/execution/invocation/result/errors.d.ts +0 -10
  215. package/dist/execution/invocation/result/errors.js +0 -17
  216. package/dist/execution/invocation/result/index.d.ts +2 -2
  217. package/dist/execution/invocation/result/index.js +1 -1
  218. package/dist/execution/invocation/result/project.js +41 -1
  219. package/dist/execution/node/serve.d.ts +2 -2
  220. package/dist/execution/node/serve.js +1 -1
  221. package/dist/execution/runtime/index.d.ts +1 -0
  222. package/dist/execution/runtime/index.js +1 -0
  223. package/dist/execution/runtime/load.d.ts +3 -3
  224. package/dist/execution/runtime/load.js +3 -2
  225. package/dist/execution/runtime/release.d.ts +17 -0
  226. package/dist/execution/runtime/release.js +7 -0
  227. package/dist/execution/serve.d.ts +18 -4
  228. package/dist/execution/serve.js +10 -0
  229. package/dist/execution/service/create.js +43 -7
  230. package/dist/execution/service/initialization.d.ts +4 -4
  231. package/dist/execution/service/initialization.js +23 -14
  232. package/dist/execution/service/release.d.ts +2 -2
  233. package/dist/execution/service/release.js +3 -2
  234. package/dist/execution/service/service.d.ts +20 -5
  235. package/dist/execution/service/serving/delivery.d.ts +5 -0
  236. package/dist/execution/service/{publication → serving}/delivery.js +4 -1
  237. package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
  238. package/dist/execution/service/serving/installation.d.ts +4 -0
  239. package/dist/execution/service/serving/installation.js +9 -0
  240. package/dist/execution/service/serving/source.d.ts +11 -0
  241. package/dist/execution/service/serving/source.js +15 -0
  242. package/dist/execution/workflows/attempts.d.ts +87 -0
  243. package/dist/execution/workflows/attempts.js +205 -0
  244. package/dist/execution/workflows/discovery.d.ts +14 -0
  245. package/dist/execution/workflows/discovery.js +151 -0
  246. package/dist/execution/workflows/engine.d.ts +83 -0
  247. package/dist/execution/workflows/engine.js +1 -0
  248. package/dist/execution/workflows/envelope.d.ts +12 -0
  249. package/dist/execution/workflows/envelope.js +46 -0
  250. package/dist/execution/workflows/failure.d.ts +39 -0
  251. package/dist/execution/workflows/failure.js +143 -0
  252. package/dist/execution/workflows/index.d.ts +4 -0
  253. package/dist/execution/workflows/index.js +3 -0
  254. package/dist/execution/workflows/integrations.d.ts +13 -0
  255. package/dist/execution/workflows/integrations.js +25 -0
  256. package/dist/execution/workflows/options.d.ts +81 -0
  257. package/dist/execution/workflows/options.js +158 -0
  258. package/dist/execution/workflows/receiver.d.ts +24 -0
  259. package/dist/execution/workflows/receiver.js +99 -0
  260. package/dist/execution/workflows/route.d.ts +12 -0
  261. package/dist/execution/workflows/route.js +35 -0
  262. package/dist/execution/workflows/run.d.ts +23 -0
  263. package/dist/execution/workflows/run.js +365 -0
  264. package/dist/execution/workflows/steps.d.ts +48 -0
  265. package/dist/execution/workflows/steps.js +93 -0
  266. package/dist/index.d.ts +4 -4
  267. package/dist/index.js +2 -2
  268. package/dist/platform/graph/alias.d.ts +1 -5
  269. package/dist/platform/graph/alias.js +1 -5
  270. package/dist/platform/graph/document/index.d.ts +1 -1
  271. package/dist/platform/graph/document/index.js +1 -1
  272. package/dist/platform/graph/index.d.ts +1 -1
  273. package/dist/platform/graph/index.js +1 -1
  274. package/dist/platform/release/index.d.ts +2 -0
  275. package/dist/platform/release/index.js +2 -0
  276. package/dist/platform/schema/callable-authoring.d.ts +21 -0
  277. package/dist/platform/schema/callable-authoring.js +27 -0
  278. package/dist/platform/schema/class-authoring.d.ts +61 -11
  279. package/dist/platform/schema/class-authoring.js +37 -4
  280. package/dist/platform/schema/class-icon-svg.d.ts +9 -0
  281. package/dist/platform/schema/class-icon-svg.js +29 -0
  282. package/dist/platform/schema/class-icon.d.ts +3 -8
  283. package/dist/platform/schema/class-icon.js +2 -29
  284. package/dist/platform/schema/index.d.ts +6 -4
  285. package/dist/platform/schema/index.js +2 -1
  286. package/dist/platform/schema/property.d.ts +5 -0
  287. package/dist/platform/schema/schema-authoring.d.ts +14 -7
  288. package/dist/platform/schema/schema-authoring.js +5 -1
  289. package/dist/platform/versioning/dependents.d.ts +18 -0
  290. package/dist/platform/versioning/dependents.js +15 -0
  291. package/dist/platform/versioning/index.d.ts +5 -0
  292. package/dist/platform/versioning/index.js +5 -0
  293. package/dist/platform/versioning/name.d.ts +38 -0
  294. package/dist/platform/versioning/name.js +58 -0
  295. package/dist/platform/versioning/reference.d.ts +48 -0
  296. package/dist/platform/versioning/reference.js +95 -0
  297. package/dist/platform/versioning/version.d.ts +72 -0
  298. package/dist/platform/versioning/version.js +98 -0
  299. package/dist/project/admit.js +1 -5
  300. package/dist/project/define.d.ts +4 -4
  301. package/dist/project/define.js +55 -35
  302. package/dist/project/index.d.ts +1 -1
  303. package/dist/project/install-command.d.ts +6 -0
  304. package/dist/project/install-command.js +9 -0
  305. package/dist/project/project.d.ts +10 -8
  306. package/dist/testing/dataset/define.d.ts +1 -1
  307. package/dist/testing/durable/engine.d.ts +128 -0
  308. package/dist/testing/durable/engine.js +619 -0
  309. package/dist/testing/durable/index.d.ts +3 -0
  310. package/dist/testing/durable/index.js +1 -0
  311. package/dist/testing/durable/steps.d.ts +30 -0
  312. package/dist/testing/durable/steps.js +45 -0
  313. package/dist/testing/index.d.ts +6 -1
  314. package/dist/testing/index.js +5 -1
  315. package/dist/testing/load.js +1 -1
  316. package/dist/tooling/cli/adapter-command.d.ts +35 -0
  317. package/dist/tooling/cli/adapter-command.js +66 -0
  318. package/dist/tooling/cli/arguments.d.ts +17 -6
  319. package/dist/tooling/cli/arguments.js +175 -52
  320. package/dist/tooling/cli/build.d.ts +55 -0
  321. package/dist/tooling/cli/build.js +77 -0
  322. package/dist/tooling/cli/bun.d.ts +0 -1
  323. package/dist/tooling/cli/bun.js +0 -7
  324. package/dist/tooling/cli/commit.d.ts +35 -0
  325. package/dist/tooling/cli/commit.js +235 -0
  326. package/dist/tooling/cli/deploy-mode.d.ts +26 -0
  327. package/dist/tooling/cli/deploy-mode.js +59 -0
  328. package/dist/tooling/cli/deploy-result.d.ts +80 -0
  329. package/dist/tooling/cli/deploy-result.js +64 -0
  330. package/dist/tooling/cli/diff/declared.d.ts +7 -0
  331. package/dist/tooling/cli/diff/declared.js +27 -0
  332. package/dist/tooling/cli/diff/index.d.ts +30 -0
  333. package/dist/tooling/cli/diff/index.js +58 -0
  334. package/dist/tooling/cli/diff/render.d.ts +15 -0
  335. package/dist/tooling/cli/diff/render.js +131 -0
  336. package/dist/tooling/cli/diff/report.d.ts +88 -0
  337. package/dist/tooling/cli/diff/report.js +154 -0
  338. package/dist/tooling/cli/dotenv.d.ts +5 -5
  339. package/dist/tooling/cli/dotenv.js +6 -36
  340. package/dist/tooling/cli/help.js +173 -60
  341. package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
  342. package/dist/tooling/cli/immutable-deployment.js +135 -0
  343. package/dist/tooling/cli/index.d.ts +12 -4
  344. package/dist/tooling/cli/index.js +6 -3
  345. package/dist/tooling/cli/installed-on.d.ts +83 -0
  346. package/dist/tooling/cli/installed-on.js +156 -0
  347. package/dist/tooling/cli/list.d.ts +152 -0
  348. package/dist/tooling/cli/list.js +331 -0
  349. package/dist/tooling/cli/log.d.ts +5 -2
  350. package/dist/tooling/cli/log.js +9 -2
  351. package/dist/tooling/cli/orchestrate.d.ts +0 -6
  352. package/dist/tooling/cli/orchestrate.js +246 -90
  353. package/dist/tooling/cli/project.d.ts +3 -3
  354. package/dist/tooling/cli/publish/index.d.ts +81 -0
  355. package/dist/tooling/cli/publish/index.js +383 -0
  356. package/dist/tooling/cli/publish/report.d.ts +49 -0
  357. package/dist/tooling/cli/publish/report.js +15 -0
  358. package/dist/tooling/cli/registry/client.d.ts +121 -0
  359. package/dist/tooling/cli/registry/client.js +354 -0
  360. package/dist/tooling/cli/registry/error.d.ts +11 -0
  361. package/dist/tooling/cli/registry/error.js +17 -0
  362. package/dist/tooling/cli/registry/executable.d.ts +35 -0
  363. package/dist/tooling/cli/registry/executable.js +96 -0
  364. package/dist/tooling/cli/registry/index.d.ts +9 -0
  365. package/dist/tooling/cli/registry/index.js +8 -0
  366. package/dist/tooling/cli/registry/installations.d.ts +67 -0
  367. package/dist/tooling/cli/registry/installations.js +108 -0
  368. package/dist/tooling/cli/registry/process.d.ts +36 -0
  369. package/dist/tooling/cli/registry/process.js +119 -0
  370. package/dist/tooling/cli/secrets.d.ts +9 -0
  371. package/dist/tooling/cli/secrets.js +19 -0
  372. package/dist/tooling/cli/yank.d.ts +34 -0
  373. package/dist/tooling/cli/yank.js +32 -0
  374. package/dist/tooling/linter/adapters/typescript/imports.d.ts +0 -1
  375. package/dist/tooling/linter/adapters/typescript/imports.js +1 -5
  376. package/dist/tooling/linter/adapters/typescript/index.d.ts +1 -1
  377. package/dist/tooling/linter/adapters/typescript/index.js +1 -1
  378. package/dist/tooling/linter/adapters/typescript/syntax.d.ts +3 -3
  379. package/dist/tooling/linter/adapters/typescript/syntax.js +13 -25
  380. package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -2
  381. package/dist/tooling/linter/implementations/source/callable-requirements.js +11 -16
  382. package/dist/tooling/linter/implementations/source/dependencies.js +13 -72
  383. package/dist/tooling/linter/implementations/source/global.js +1 -2
  384. package/dist/tooling/linter/implementations/source/mutations.js +18 -29
  385. package/dist/tooling/linter/implementations/source/providers.js +5 -5
  386. package/dist/tooling/linter/implementations/source/queries.js +1 -17
  387. package/dist/tooling/linter/implementations/source/shared.d.ts +12 -4
  388. package/dist/tooling/linter/implementations/source/shared.js +101 -46
  389. package/dist/tooling/linter/implementations/source/verifiers.js +0 -2
  390. package/dist/tooling/linter/implementations/source/views.js +2 -2
  391. package/dist/tooling/linter/implementations/source/workflows.js +499 -17
  392. package/dist/tooling/linter/policy/generated.js +14 -63
  393. package/dist/tooling/linter/requirements/registry.js +6 -8
  394. package/dist/tooling/packaging/declarations/ownership.js +1 -1
  395. package/dist/tooling/packaging/finalize.d.ts +1 -1
  396. package/dist/tooling/packaging/finalize.js +1 -1
  397. package/docs/admission-age.md +88 -0
  398. package/docs/auth-api-migration.md +55 -0
  399. package/docs/business-errors.md +42 -0
  400. package/docs/domain-definition-migration.md +44 -0
  401. package/docs/domain-schema-migration.md +36 -0
  402. package/docs/durable-workflows.md +445 -0
  403. package/docs/handler-dependencies.md +213 -0
  404. package/docs/release.md +155 -0
  405. package/docs/schema-cost.md +124 -0
  406. package/package.json +45 -16
  407. package/dist/application/application.d.ts +0 -28
  408. package/dist/application/query/execution/projection.d.ts +0 -3
  409. package/dist/application/query/execution/projection.js +0 -3
  410. package/dist/deployment/adapter/deploy/context.d.ts +0 -15
  411. package/dist/deployment/adapter/deploy/index.d.ts +0 -2
  412. package/dist/deployment/adapter/deploy/result.d.ts +0 -50
  413. package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
  414. package/dist/deployment/adapter/prepare/context.d.ts +0 -23
  415. package/dist/deployment/adapter/prepare/index.d.ts +0 -2
  416. package/dist/deployment/deploy.d.ts +0 -20
  417. package/dist/deployment/deploy.js +0 -31
  418. package/dist/deployment/release/publication/index.d.ts +0 -6
  419. package/dist/deployment/release/publication/index.js +0 -6
  420. package/dist/deployment/release/publication/manifest.d.ts +0 -3
  421. package/dist/deployment/release/publication/manifest.js +0 -5
  422. package/dist/deployment/release/publication/requirements.d.ts +0 -3
  423. package/dist/deployment/release/publication/requirements.js +0 -3
  424. package/dist/deployment/release/publication/seal.d.ts +0 -10
  425. package/dist/deployment/release/publication/seal.js +0 -39
  426. package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
  427. package/dist/deployment/verify/preflight/artifact.js +0 -122
  428. package/dist/deployment/verify/preflight/publication.d.ts +0 -4
  429. package/dist/deployment/verify/preflight/publication.js +0 -14
  430. package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
  431. package/dist/deployment/verify/readiness/deployment.js +0 -151
  432. package/dist/deployment/verify/readiness/publication.d.ts +0 -11
  433. package/dist/deployment/verify/readiness/publication.js +0 -41
  434. package/dist/execution/service/errors.d.ts +0 -3
  435. package/dist/execution/service/errors.js +0 -3
  436. package/dist/execution/service/publication/delivery.d.ts +0 -2
  437. package/dist/execution/service/publication/installation.d.ts +0 -3
  438. package/dist/execution/service/publication/installation.js +0 -8
  439. package/dist/execution/service/publication/source.d.ts +0 -3
  440. package/dist/execution/service/publication/source.js +0 -11
  441. package/dist/platform/publication/index.d.ts +0 -2
  442. package/dist/platform/publication/index.js +0 -2
  443. package/dist/tooling/cli/astrale/authority.d.ts +0 -5
  444. package/dist/tooling/cli/astrale/authority.js +0 -11
  445. package/dist/tooling/cli/astrale/executable.d.ts +0 -2
  446. package/dist/tooling/cli/astrale/executable.js +0 -47
  447. package/dist/tooling/cli/astrale/failure.d.ts +0 -6
  448. package/dist/tooling/cli/astrale/failure.js +0 -48
  449. package/dist/tooling/cli/astrale/instance.d.ts +0 -11
  450. package/dist/tooling/cli/astrale/instance.js +0 -52
  451. package/dist/tooling/cli/astrale/process.d.ts +0 -13
  452. package/dist/tooling/cli/astrale/process.js +0 -94
  453. package/dist/tooling/cli/astrale/version.d.ts +0 -18
  454. package/dist/tooling/cli/astrale/version.js +0 -55
  455. package/dist/tooling/cli/credential.d.ts +0 -2
  456. package/dist/tooling/cli/credential.js +0 -57
  457. package/dist/tooling/cli/deprecations.d.ts +0 -9
  458. package/dist/tooling/cli/deprecations.js +0 -15
  459. package/dist/tooling/cli/development/candidate.d.ts +0 -25
  460. package/dist/tooling/cli/development/candidate.js +0 -176
  461. package/dist/tooling/cli/development/deployment.d.ts +0 -16
  462. package/dist/tooling/cli/development/deployment.js +0 -39
  463. package/dist/tooling/cli/development/develop.d.ts +0 -11
  464. package/dist/tooling/cli/development/develop.js +0 -243
  465. package/dist/tooling/cli/development/lease.d.ts +0 -18
  466. package/dist/tooling/cli/development/lease.js +0 -163
  467. package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
  468. package/dist/tooling/cli/development/lifecycle.js +0 -43
  469. package/dist/tooling/cli/development/project-imports.d.ts +0 -22
  470. package/dist/tooling/cli/development/project-imports.js +0 -39
  471. package/dist/tooling/cli/development/project-lock.d.ts +0 -16
  472. package/dist/tooling/cli/development/project-lock.js +0 -41
  473. package/dist/tooling/cli/development/rebuild.d.ts +0 -13
  474. package/dist/tooling/cli/development/rebuild.js +0 -58
  475. package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
  476. package/dist/tooling/cli/development/release-evidence.js +0 -10
  477. package/dist/tooling/cli/development/report.d.ts +0 -6
  478. package/dist/tooling/cli/development/report.js +0 -14
  479. package/dist/tooling/cli/development/session-file.d.ts +0 -53
  480. package/dist/tooling/cli/development/session-file.js +0 -337
  481. package/dist/tooling/cli/development/source-watch.d.ts +0 -14
  482. package/dist/tooling/cli/development/source-watch.js +0 -140
  483. package/dist/tooling/cli/development/sources.d.ts +0 -7
  484. package/dist/tooling/cli/development/sources.js +0 -48
  485. package/dist/tooling/cli/development/target-lock.d.ts +0 -16
  486. package/dist/tooling/cli/development/target-lock.js +0 -68
  487. package/dist/tooling/cli/development/view.d.ts +0 -28
  488. package/dist/tooling/cli/development/view.js +0 -151
  489. package/dist/tooling/cli/environment-release.d.ts +0 -21
  490. package/dist/tooling/cli/environment-release.js +0 -46
  491. package/dist/tooling/cli/evidence.d.ts +0 -11
  492. package/dist/tooling/cli/evidence.js +0 -53
  493. package/dist/tooling/cli/installation/index.d.ts +0 -2
  494. package/dist/tooling/cli/installation/index.js +0 -1
  495. package/dist/tooling/cli/installation/observation.d.ts +0 -10
  496. package/dist/tooling/cli/installation/observation.js +0 -44
  497. package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
  498. package/dist/tooling/cli/installation/reconcile.js +0 -122
  499. package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
  500. package/dist/tooling/linter/implementations/source/migrations.js +0 -113
  501. package/dist/tooling/linter/qualification/index.d.ts +0 -10
  502. package/dist/tooling/linter/qualification/index.js +0 -2
  503. package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
  504. package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
  505. package/dist/tooling/linter/qualification/runner.d.ts +0 -3
  506. package/dist/tooling/linter/qualification/runner.js +0 -6
  507. /package/dist/application/{application.js → domain.js} +0 -0
  508. /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
  509. /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
  510. /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
  511. /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
  512. /package/dist/deployment/adapter/{prepare/artifact.js → release/command.js} +0 -0
  513. /package/dist/deployment/adapter/{prepare → release}/context.js +0 -0
  514. /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
  515. /package/dist/deployment/release/{publication → served}/routes.js +0 -0
  516. /package/dist/execution/service/{publication → serving}/index.js +0 -0
@@ -0,0 +1,77 @@
1
+ import { verifyBundle } from '../../deployment/index.js';
2
+ /**
3
+ * The distinct bundlers of a Project's Environments, in declaration order. Environments whose
4
+ * adapters declare one bundler object share its build. Two copies of one bundler (two installed
5
+ * versions of its package) are two bundlers even under one id and version, since their code can
6
+ * differ.
7
+ */
8
+ export function projectBundlers(project) {
9
+ const bundlers = new Map();
10
+ for (const [name, environment] of Object.entries(project.environments)) {
11
+ const adapter = environment.deployment.adapter;
12
+ const environments = bundlers.get(adapter.bundler) ?? [];
13
+ environments.push(Object.freeze({ name, adapter: `${adapter.name}@${adapter.version}` }));
14
+ bundlers.set(adapter.bundler, environments);
15
+ }
16
+ return Object.freeze([...bundlers].map(([bundler, environments]) => Object.freeze({ bundler, environments: Object.freeze(environments) })));
17
+ }
18
+ /** Bundle one Build without any Environment and identify the bytes by their build digest. */
19
+ export async function bundleBuild(input) {
20
+ const source = await input.bundler.bundle({
21
+ projectDir: input.projectDir,
22
+ build: input.build,
23
+ runtime: input.runtime,
24
+ signal: input.signal,
25
+ });
26
+ return verifyBundle({
27
+ build: input.build,
28
+ runtime: input.runtime,
29
+ bundler: input.bundler,
30
+ source,
31
+ });
32
+ }
33
+ /**
34
+ * One entry per distinct build: copies of one bundler that produced the same bytes give one entry,
35
+ * copies that produced different bytes give one entry each.
36
+ */
37
+ export function buildResult(build, bundles) {
38
+ const builds = new Map();
39
+ for (const bundle of bundles) {
40
+ const { id, version } = bundle.manifest.bundler;
41
+ const key = JSON.stringify([id, version, bundle.digest]);
42
+ if (builds.has(key))
43
+ continue;
44
+ builds.set(key, Object.freeze({ bundler: Object.freeze({ id, version }), digest: bundle.digest }));
45
+ }
46
+ return Object.freeze({
47
+ format: 'astrale.build-result',
48
+ version: 1,
49
+ origin: build.schema.compiled.root.origin,
50
+ schema: Object.freeze({ revision: build.schema.compiled.root.revision }),
51
+ builds: Object.freeze([...builds.values()]),
52
+ });
53
+ }
54
+ /**
55
+ * A warning for every bundler id and version whose copies produced different bytes: each copy's
56
+ * Environments deploy their own build, so the Project has more than one build for that bundler.
57
+ */
58
+ export function bundlerCopyWarnings(built) {
59
+ const byBundler = new Map();
60
+ for (const { source, bundle } of built) {
61
+ const { id, version } = bundle.manifest.bundler;
62
+ const name = `${id}@${version}`;
63
+ const digests = byBundler.get(name) ?? new Map();
64
+ const environments = digests.get(bundle.digest) ?? [];
65
+ environments.push(...source.environments.map((environment) => `${environment.name}: ${environment.adapter}`));
66
+ digests.set(bundle.digest, environments);
67
+ byBundler.set(name, digests);
68
+ }
69
+ return Object.freeze([...byBundler]
70
+ .filter(([, digests]) => digests.size > 1)
71
+ .map(([name, digests]) => `Bundler ${name} gives ${digests.size} build digests for this tree: ` +
72
+ [...digests]
73
+ .map(([digest, environments]) => `${digest} (${environments.join(', ')})`)
74
+ .join('; ') +
75
+ '. These adapters load different copies of the bundler; align their versions ' +
76
+ '(`astrale-domain upgrade`) so that it gives one build.'));
77
+ }
@@ -10,6 +10,5 @@ export type BunOutcome = {
10
10
  };
11
11
  /** Re-enter the published executable under Bun only when authored TypeScript must be imported. */
12
12
  export declare function runWithBun(executable: string, argv: readonly string[]): Promise<BunOutcome>;
13
- export declare function isolateDevelopmentProcessGroup(argv: readonly string[], platform?: NodeJS.Platform): boolean;
14
13
  /** Prefer the generated project's exact Bun package binary over an ambient executable or shim. */
15
14
  export declare function resolveBunExecutable(cwd: string): string;
@@ -14,10 +14,6 @@ export function runWithBun(executable, argv) {
14
14
  return new Promise((resolve, reject) => {
15
15
  const child = spawn(resolveBunExecutable(process.cwd()), [executable, ...argv], {
16
16
  stdio: 'inherit',
17
- // Keep a long-lived development runtime outside the launcher's terminal
18
- // process group. The launcher receives Ctrl-C, forwards it exactly once,
19
- // and remains alive until Bun finishes provider and Kernel cleanup.
20
- detached: isolateDevelopmentProcessGroup(argv),
21
17
  });
22
18
  const handlers = FORWARDED_SIGNALS.map((signal) => [signal, () => child.kill(signal)]);
23
19
  for (const [signal, handler] of handlers)
@@ -44,9 +40,6 @@ export function runWithBun(executable, argv) {
44
40
  });
45
41
  });
46
42
  }
47
- export function isolateDevelopmentProcessGroup(argv, platform = process.platform) {
48
- return platform !== 'win32' && argv[0] === 'dev';
49
- }
50
43
  /** Prefer the generated project's exact Bun package binary over an ambient executable or shim. */
51
44
  export function resolveBunExecutable(cwd) {
52
45
  const projectRequire = createRequire(join(cwd, 'package.json'));
@@ -0,0 +1,35 @@
1
+ import type { DeploymentCommitV1 } from '../../deployment/address/index.js';
2
+ /**
3
+ * The commit provenance a canonical deploy declares in its deployment record (CT18 `commit`): the
4
+ * commit of the repository the Project lives in, whether the working tree holds changes that
5
+ * commit does not, and the last release of the Domain before it, as `git describe` finds it.
6
+ *
7
+ * - `dirty` covers tracked changes and untracked files, over the whole working tree; ignored files
8
+ * never count. Unlike `git describe --dirty`, an untracked file counts, since a build can import
9
+ * it.
10
+ * - `base` is the nearest release tag of the package the Domain is released from: the
11
+ * release-please package that holds the Domain's runtime module (see {@link releaseTagPrefixes}).
12
+ * The tag prefix is stripped, and a tag whose rest is not a canonical SemVer version is left
13
+ * out, so the record never carries a base a deployment name would refuse (AM-57). A Domain no
14
+ * release line holds declares no base: it is never given another package's version.
15
+ * - Outside a git repository, without git, or in a repository whose commits are not SHA-1, the
16
+ * deploy declares no commit (`null`); a deploy never fails for want of provenance.
17
+ */
18
+ export declare function deploymentCommit(input: {
19
+ readonly projectDir: string;
20
+ /** The Domain's runtime module, as the Project's `entrypoints.runtime` resolves it. */
21
+ readonly runtimeModule: string;
22
+ readonly signal: AbortSignal;
23
+ }): Promise<DeploymentCommitV1 | null>;
24
+ /**
25
+ * Whether a remote-tracking branch of the repository already holds a commit. A Publication records
26
+ * the commit it was built from, and release-please computes the next number from the pushed
27
+ * history: publishing a commit nobody pushed risks the same number being computed again (tech
28
+ * Versioning [.73872]). Nothing when git cannot tell. Reads the local remote-tracking refs only,
29
+ * never the network.
30
+ */
31
+ export declare function commitPushed(input: {
32
+ readonly projectDir: string;
33
+ readonly sha: string;
34
+ readonly signal: AbortSignal;
35
+ }): Promise<boolean | undefined>;
@@ -0,0 +1,235 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import { isVersion } from '../../platform/versioning/version.js';
5
+ /** A commit as `DeploymentCommitV1` holds it: the full SHA-1 git prints, in lower case. */
6
+ const SHA = /^[0-9a-f]{40}$/u;
7
+ /** `git describe --long` output: `<tag>-<commits since the tag>-g<abbreviated commit>`. */
8
+ const DESCRIBED = /^(?<tag>.+)-(?<distance>\d+)-g[0-9a-f]+$/u;
9
+ /** A tag prefix this module can hand to `git describe --match` without escaping a glob. */
10
+ const LITERAL_PREFIX = /^[^*?[\]\\\s]*$/u;
11
+ /** The configuration files release-please reads at a repository root, the dotted name first. */
12
+ const RELEASE_PLEASE_CONFIGS = ['.release-please-config.json', 'release-please-config.json'];
13
+ const GIT_TIMEOUT_MS = 30_000;
14
+ /**
15
+ * The commit provenance a canonical deploy declares in its deployment record (CT18 `commit`): the
16
+ * commit of the repository the Project lives in, whether the working tree holds changes that
17
+ * commit does not, and the last release of the Domain before it, as `git describe` finds it.
18
+ *
19
+ * - `dirty` covers tracked changes and untracked files, over the whole working tree; ignored files
20
+ * never count. Unlike `git describe --dirty`, an untracked file counts, since a build can import
21
+ * it.
22
+ * - `base` is the nearest release tag of the package the Domain is released from: the
23
+ * release-please package that holds the Domain's runtime module (see {@link releaseTagPrefixes}).
24
+ * The tag prefix is stripped, and a tag whose rest is not a canonical SemVer version is left
25
+ * out, so the record never carries a base a deployment name would refuse (AM-57). A Domain no
26
+ * release line holds declares no base: it is never given another package's version.
27
+ * - Outside a git repository, without git, or in a repository whose commits are not SHA-1, the
28
+ * deploy declares no commit (`null`); a deploy never fails for want of provenance.
29
+ */
30
+ export async function deploymentCommit(input) {
31
+ const head = await git(input.projectDir, input.signal, ['rev-parse', '--verify', 'HEAD']);
32
+ if (head === undefined || !SHA.test(head))
33
+ return null;
34
+ const status = await git(input.projectDir, input.signal, [
35
+ 'status',
36
+ '--porcelain',
37
+ '--untracked-files=normal',
38
+ ]);
39
+ if (status === undefined)
40
+ return null;
41
+ const prefixes = await releaseTagPrefixes(input);
42
+ const base = prefixes === undefined ? undefined : await describedBase(input, prefixes);
43
+ return Object.freeze({
44
+ sha: head,
45
+ dirty: status.length > 0,
46
+ ...(base === undefined ? {} : { base }),
47
+ });
48
+ }
49
+ /**
50
+ * Whether a remote-tracking branch of the repository already holds a commit. A Publication records
51
+ * the commit it was built from, and release-please computes the next number from the pushed
52
+ * history: publishing a commit nobody pushed risks the same number being computed again (tech
53
+ * Versioning [.73872]). Nothing when git cannot tell. Reads the local remote-tracking refs only,
54
+ * never the network.
55
+ */
56
+ export async function commitPushed(input) {
57
+ if (!SHA.test(input.sha))
58
+ return undefined;
59
+ const branches = await git(input.projectDir, input.signal, [
60
+ 'branch',
61
+ '--remotes',
62
+ '--contains',
63
+ input.sha,
64
+ '--format=%(refname)',
65
+ ]);
66
+ return branches === undefined ? undefined : branches.length > 0;
67
+ }
68
+ /**
69
+ * The prefixes of the release tags of the package the Domain is released from, or nothing when
70
+ * no release line holds the Domain.
71
+ *
72
+ * In a repository with a release-please configuration at its root, that package is the configured
73
+ * package whose path is the nearest one holding the runtime module's directory, unless one of its
74
+ * `exclude-paths` holds it. Its tags are named as release-please names them: `<component>`, its
75
+ * `tag-separator` (`-`) and `v` before the version, without the component when
76
+ * `include-component-in-tag` is false and without the `v` when `include-v-in-tag` is false; the
77
+ * component is the package's `component`, else its unscoped `package-name`, else the unscoped name
78
+ * in its `package.json`. Root-level options are the packages' defaults, as in release-please.
79
+ *
80
+ * Without a configuration, the tags are those `npm version` writes (`v<version>`) and
81
+ * `<name>-v<version>`, where the name is the unscoped one in the Project's `package.json`.
82
+ */
83
+ async function releaseTagPrefixes(input) {
84
+ const root = await git(input.projectDir, input.signal, ['rev-parse', '--show-toplevel']);
85
+ if (root === undefined)
86
+ return undefined;
87
+ const config = await releasePleaseConfig(root);
88
+ if (config === undefined) {
89
+ const name = unscoped(await packageName(input.projectDir));
90
+ return literal(['v', ...(name === undefined ? [] : [`${name}-v`])]);
91
+ }
92
+ // Git names the module's directory relative to its repository, symbolic links resolved.
93
+ const located = await git(dirname(input.runtimeModule), input.signal, [
94
+ 'rev-parse',
95
+ '--show-toplevel',
96
+ '--show-prefix',
97
+ ]);
98
+ const [moduleRoot, prefix = ''] = located?.split('\n') ?? [];
99
+ if (moduleRoot !== root)
100
+ return undefined;
101
+ const path = prefix.replace(/\/$/u, '');
102
+ const found = releasePackage(config, path);
103
+ if (found === undefined)
104
+ return undefined;
105
+ const option = (key) => found.options[key] ?? config[key];
106
+ const v = option('include-v-in-tag') === false ? '' : 'v';
107
+ if (option('include-component-in-tag') === false)
108
+ return literal([v]);
109
+ const separator = option('tag-separator') ?? '-';
110
+ const component = option('component') ??
111
+ unscoped(option('package-name')) ??
112
+ unscoped(await packageName(join(root, found.path)));
113
+ if (typeof component !== 'string' || component.length === 0 || typeof separator !== 'string') {
114
+ return undefined;
115
+ }
116
+ return literal([`${component}${separator}${v}`]);
117
+ }
118
+ /**
119
+ * The configured package that holds `path` (relative to the repository root, `''` for the root),
120
+ * the nearest one first, or nothing when none holds it or its `exclude-paths` do.
121
+ */
122
+ function releasePackage(config, path) {
123
+ const packages = config.packages;
124
+ if (packages === null || typeof packages !== 'object' || Array.isArray(packages))
125
+ return undefined;
126
+ let found;
127
+ for (const [key, options] of Object.entries(packages)) {
128
+ if (options === null || typeof options !== 'object' || Array.isArray(options))
129
+ continue;
130
+ const packagePath = key === '.' ? '' : key.replace(/^\.\//u, '').replace(/\/$/u, '');
131
+ if (!holds(packagePath, path))
132
+ continue;
133
+ if (found === undefined || packagePath.length > found.path.length) {
134
+ found = { path: packagePath, options: options };
135
+ }
136
+ }
137
+ if (found === undefined)
138
+ return undefined;
139
+ const excluded = found.options['exclude-paths'] ?? config['exclude-paths'];
140
+ if (Array.isArray(excluded)) {
141
+ for (const exclusion of excluded) {
142
+ if (typeof exclusion !== 'string')
143
+ continue;
144
+ const relative = exclusion.replace(/^\.\//u, '').replace(/\/$/u, '');
145
+ if (holds(found.path === '' ? relative : `${found.path}/${relative}`, path))
146
+ return undefined;
147
+ }
148
+ }
149
+ return found;
150
+ }
151
+ /** Whether the directory `outer` holds `inner`, both relative to the repository root. */
152
+ function holds(outer, inner) {
153
+ return outer === '' || inner === outer || inner.startsWith(`${outer}/`);
154
+ }
155
+ /** The canonical version and distance of the nearest tag with one of these prefixes, or nothing. */
156
+ async function describedBase(input, prefixes) {
157
+ const described = await git(input.projectDir, input.signal, [
158
+ 'describe',
159
+ '--tags',
160
+ '--long',
161
+ '--abbrev=40',
162
+ ...prefixes.flatMap((prefix) => ['--match', `${prefix}[0-9]*`]),
163
+ 'HEAD',
164
+ ]);
165
+ const match = described === undefined ? null : DESCRIBED.exec(described);
166
+ if (match?.groups === undefined)
167
+ return undefined;
168
+ const tag = match.groups.tag;
169
+ const distance = Number(match.groups.distance);
170
+ const version = prefixes
171
+ .filter((prefix) => tag.startsWith(prefix))
172
+ .map((prefix) => tag.slice(prefix.length))
173
+ .find((rest) => isVersion(rest));
174
+ if (version === undefined || !Number.isSafeInteger(distance))
175
+ return undefined;
176
+ return Object.freeze({ version, distance });
177
+ }
178
+ /** The repository's release-please configuration, if its root has one that is a JSON object. */
179
+ async function releasePleaseConfig(root) {
180
+ for (const name of RELEASE_PLEASE_CONFIGS) {
181
+ const config = await readJson(join(root, name));
182
+ if (config !== undefined)
183
+ return config;
184
+ }
185
+ return undefined;
186
+ }
187
+ /** The `name` of the `package.json` in a directory, if it has one. */
188
+ async function packageName(directory) {
189
+ return (await readJson(join(directory, 'package.json')))?.name;
190
+ }
191
+ /** A package name without its npm scope, as release-please makes a component of it. */
192
+ function unscoped(name) {
193
+ if (typeof name !== 'string' || name.length === 0)
194
+ return undefined;
195
+ return name.startsWith('@') ? name.slice(name.indexOf('/') + 1) || undefined : name;
196
+ }
197
+ /** The prefixes, unless one would be read as a glob by `git describe --match`. */
198
+ function literal(prefixes) {
199
+ return prefixes.every((prefix) => LITERAL_PREFIX.test(prefix)) ? prefixes : undefined;
200
+ }
201
+ async function readJson(path) {
202
+ let value;
203
+ try {
204
+ value = JSON.parse(await readFile(path, 'utf8'));
205
+ }
206
+ catch {
207
+ return undefined;
208
+ }
209
+ return value !== null && typeof value === 'object' && !Array.isArray(value)
210
+ ? value
211
+ : undefined;
212
+ }
213
+ /**
214
+ * Run one read-only git command in a directory and return its trimmed stdout, or nothing when git
215
+ * is missing or the command fails. An interrupted deploy still stops here.
216
+ */
217
+ function git(cwd, signal, args) {
218
+ signal.throwIfAborted();
219
+ return new Promise((resolve, reject) => {
220
+ execFile('git', [...args], {
221
+ cwd,
222
+ // Never take the index lock: a deploy only reads the repository.
223
+ env: { ...process.env, GIT_OPTIONAL_LOCKS: '0' },
224
+ signal,
225
+ timeout: GIT_TIMEOUT_MS,
226
+ windowsHide: true,
227
+ }, (error, stdout) => {
228
+ if (signal.aborted) {
229
+ reject(signal.reason);
230
+ return;
231
+ }
232
+ resolve(error === null ? stdout.trim() : undefined);
233
+ });
234
+ });
235
+ }
@@ -0,0 +1,26 @@
1
+ /** A supported immutable deployment, or a configuration refused before provider effects. */
2
+ export type DeployMode = {
3
+ readonly kind: 'canonical';
4
+ } | {
5
+ readonly kind: 'refused';
6
+ readonly refusals: readonly DeployRefusal[];
7
+ };
8
+ export interface DeployRefusal {
9
+ readonly reason: 'invalid-parameters' | 'missing-namespace' | 'scheduled-triggers' | 'unsupported-adapter';
10
+ readonly guidance: string;
11
+ }
12
+ export type DeployModeCommand = 'deploy' | 'publish';
13
+ /** Inspect one Environment's deployment contract without building or changing any provider. */
14
+ export declare function selectDeployMode(input: {
15
+ readonly command: DeployModeCommand;
16
+ readonly environment: string;
17
+ readonly definition: {
18
+ readonly deployment: {
19
+ readonly adapter: {
20
+ readonly name: string;
21
+ readonly deployRelease?: unknown;
22
+ };
23
+ readonly parameters: object;
24
+ };
25
+ };
26
+ }): DeployMode;
@@ -0,0 +1,59 @@
1
+ /** Inspect one Environment's deployment contract without building or changing any provider. */
2
+ export function selectDeployMode(input) {
3
+ const { adapter, parameters } = input.definition.deployment;
4
+ const values = parameters;
5
+ const refusals = [];
6
+ if (typeof adapter.deployRelease !== 'function') {
7
+ refusals.push({
8
+ reason: 'unsupported-adapter',
9
+ guidance: `Adapter ${adapter.name} must implement configure, placement and deployRelease for immutable deployments.`,
10
+ });
11
+ }
12
+ if (adapter.name === 'cloudflare') {
13
+ if (values.namespace === undefined) {
14
+ refusals.push({
15
+ reason: 'missing-namespace',
16
+ guidance: 'cloudflare requires namespace: { name, routingDomain }. Use astrale() for managed deployments.',
17
+ });
18
+ }
19
+ const allowed = [
20
+ 'namespace',
21
+ 'secrets',
22
+ 'vars',
23
+ 'maximumRequestBytes',
24
+ 'invocationTimeoutMs',
25
+ 'tokenExchange',
26
+ 'durable',
27
+ 'wrangler',
28
+ 'router',
29
+ ];
30
+ const unknown = Reflect.ownKeys(values).filter((key) => typeof key !== 'string' || !allowed.includes(key));
31
+ if (unknown.length > 0)
32
+ refusals.push({
33
+ reason: 'invalid-parameters',
34
+ guidance: `Cloudflare Environment ${input.environment} declares unknown parameters ${unknown.map(String).join(', ')}.`,
35
+ });
36
+ const wrangler = values.wrangler;
37
+ if (wrangler !== undefined && Object.hasOwn(wrangler, 'triggers')) {
38
+ refusals.push({
39
+ reason: 'scheduled-triggers',
40
+ guidance: 'Immutable deployments run no cron of their own. Remove wrangler.triggers.',
41
+ });
42
+ }
43
+ }
44
+ if (adapter.name === 'astrale') {
45
+ const allowed = ['admin', 'secrets', 'vars', 'maximumRequestBytes', 'tokenExchange', 'durable'];
46
+ const unknown = Reflect.ownKeys(values).filter((key) => typeof key !== 'string' || !allowed.includes(key));
47
+ if (unknown.length > 0)
48
+ refusals.push({
49
+ reason: 'invalid-parameters',
50
+ guidance: `Astrale Environment ${input.environment} declares unknown parameters ${unknown.map(String).join(', ')}.`,
51
+ });
52
+ }
53
+ return refusals.length === 0
54
+ ? Object.freeze({ kind: 'canonical' })
55
+ : Object.freeze({
56
+ kind: 'refused',
57
+ refusals: Object.freeze(refusals.map((r) => Object.freeze(r))),
58
+ });
59
+ }
@@ -0,0 +1,80 @@
1
+ import type { Revision } from '@astrale-os/kernel-dsl/v1/addressing';
2
+ import type { ReleaseDigest } from '@astrale-os/kernel-protocol/release';
3
+ import type { DeploymentCommitV1 } from '../../deployment/address/index.js';
4
+ import type { BuildDigest, DeploymentSecretsState, ReadyReleaseDeployResult, Release } from '../../deployment/index.js';
5
+ export type { DeploymentSecretsState } from '../../deployment/index.js';
6
+ /**
7
+ * `astrale-domain deploy <environment> --json` on stdout: the one deployment the deploy made or
8
+ * reused, which CI installs by its URL. Progress and warnings go to stderr. It names no instance
9
+ * and no version: a deploy numbers nothing and installs nothing.
10
+ */
11
+ export interface DeployResultV1 {
12
+ readonly format: 'astrale.deploy-result';
13
+ readonly version: 1;
14
+ readonly origin: string;
15
+ readonly environment: string;
16
+ /**
17
+ * The URL `astrale domain install <url>` takes: an immutable deployment's URL, which is also its
18
+ * issuer.
19
+ */
20
+ readonly url: string;
21
+ /**
22
+ * The digest of the DomainRelease v4 served at release.json.
23
+ */
24
+ readonly release: {
25
+ readonly digest: ReleaseDigest;
26
+ };
27
+ /**
28
+ * The build digest of the code the deployment runs, as astrale-domain build prints it.
29
+ */
30
+ readonly build: {
31
+ readonly digest: BuildDigest;
32
+ };
33
+ readonly schema: {
34
+ readonly revision: Revision;
35
+ };
36
+ readonly deployment: {
37
+ /** `<adapter name>@<adapter version>` */
38
+ readonly adapter: string;
39
+ /**
40
+ * The provider script that serves this deployment: an immutable deployment's label, which is
41
+ * also the first label of its URL.
42
+ */
43
+ readonly script: string;
44
+ /**
45
+ * `created`: a new immutable deployment. `reused`: the immutable deployment of this exact
46
+ * release already existed.
47
+ */
48
+ readonly state: 'created' | 'reused';
49
+ };
50
+ /**
51
+ * Immutable deployments only: the environment's current secrets were `bound` to a new
52
+ * deployment, or `updated` or left `unchanged` in place on the reused one. A deploy never writes
53
+ * the secrets of any other deployment.
54
+ */
55
+ readonly secrets: {
56
+ readonly state: DeploymentSecretsState;
57
+ };
58
+ /**
59
+ * The commit the deployment was built from, as its deployment record declares it: the commit of
60
+ * the deploy that created it. A reused deployment keeps its record, so this can be an earlier
61
+ * commit than the one the deploy ran from; the label covers the release, never the commit.
62
+ */
63
+ readonly commit: DeploymentCommitV1 | null;
64
+ }
65
+ /**
66
+ * The deploy result of one immutable deployment, from the ready result of the adapter's
67
+ * `deployRelease`. Its release, build, Schema revision and URL are those the SDK sealed before
68
+ * deploying; the deployment record the adapter returned must declare exactly that release at that
69
+ * URL, so the result never names a release the deployment does not serve. Its commit is the
70
+ * record's, which a reused deployment kept from the deploy that created it.
71
+ */
72
+ export declare function deployResult(input: {
73
+ readonly environment: string;
74
+ readonly adapter: {
75
+ readonly name: string;
76
+ readonly version: string;
77
+ };
78
+ readonly release: Release;
79
+ readonly deployment: ReadyReleaseDeployResult;
80
+ }): DeployResultV1;
@@ -0,0 +1,64 @@
1
+ import { acceptDeploymentRecord } from '../../deployment/address/index.js';
2
+ import { addressing, isRelease } from '../../deployment/index.js';
3
+ const SECRETS_BY_STATE = Object.freeze({
4
+ created: Object.freeze(['bound']),
5
+ reused: Object.freeze(['updated', 'unchanged']),
6
+ });
7
+ /**
8
+ * The deploy result of one immutable deployment, from the ready result of the adapter's
9
+ * `deployRelease`. Its release, build, Schema revision and URL are those the SDK sealed before
10
+ * deploying; the deployment record the adapter returned must declare exactly that release at that
11
+ * URL, so the result never names a release the deployment does not serve. Its commit is the
12
+ * record's, which a reused deployment kept from the deploy that created it.
13
+ */
14
+ export function deployResult(input) {
15
+ const { release, deployment } = input;
16
+ if (!isRelease(release))
17
+ throw new TypeError('Deploy result requires a sealed Release.');
18
+ if (deployment.status !== 'ready') {
19
+ throw new TypeError('Deploy result requires the ready result of deployRelease.');
20
+ }
21
+ const record = acceptDeploymentRecord(deployment.record);
22
+ const { document } = release;
23
+ expectSame('origin', record.origin, document.origin);
24
+ expectSame('environment', record.environment, input.environment);
25
+ expectSame('release digest', record.releaseDigest, document.digest);
26
+ expectSame('build digest', record.buildDigest, release.buildDigest);
27
+ expectSame('Schema revision', record.schemaRevision, document.schema.revision);
28
+ const url = addressing(deployment.url).issuer;
29
+ expectSame('URL', url, release.url);
30
+ if (new URL(url).hostname.split('.')[0] !== record.providerScript) {
31
+ throw new TypeError(`Deployment URL ${url} is not addressed by its provider script ${record.providerScript}.`);
32
+ }
33
+ const allowed = Object.hasOwn(SECRETS_BY_STATE, deployment.state)
34
+ ? SECRETS_BY_STATE[deployment.state]
35
+ : undefined;
36
+ if (allowed === undefined)
37
+ throw new TypeError('Deployment state must be created or reused.');
38
+ const secrets = deployment.secrets?.state;
39
+ if (!allowed.includes(secrets)) {
40
+ throw new TypeError(`A ${deployment.state} deployment has its secrets ${allowed.join(' or ')}, not ${String(secrets)}.`);
41
+ }
42
+ return Object.freeze({
43
+ format: 'astrale.deploy-result',
44
+ version: 1,
45
+ origin: document.origin,
46
+ environment: record.environment,
47
+ url,
48
+ release: Object.freeze({ digest: document.digest }),
49
+ build: Object.freeze({ digest: release.buildDigest }),
50
+ schema: Object.freeze({ revision: record.schemaRevision }),
51
+ deployment: Object.freeze({
52
+ adapter: `${input.adapter.name}@${input.adapter.version}`,
53
+ script: record.providerScript,
54
+ state: deployment.state,
55
+ }),
56
+ secrets: Object.freeze({ state: secrets }),
57
+ commit: record.commit,
58
+ });
59
+ }
60
+ function expectSame(member, declared, expected) {
61
+ if (declared !== expected) {
62
+ throw new TypeError(`Deployment declares ${member} ${declared}, not ${expected}.`);
63
+ }
64
+ }
@@ -0,0 +1,7 @@
1
+ import type { Version } from '../../../platform/versioning/index.js';
2
+ /**
3
+ * The version the author declares for the next release: `package.json` `version` in the Project
4
+ * directory, as release-please and `npm version` write it (tech Versioning [.21210]). No command
5
+ * takes a version number.
6
+ */
7
+ export declare function declaredVersion(projectDir: string): Promise<Version>;
@@ -0,0 +1,27 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { acceptVersion } from '../../../platform/versioning/index.js';
4
+ /**
5
+ * The version the author declares for the next release: `package.json` `version` in the Project
6
+ * directory, as release-please and `npm version` write it (tech Versioning [.21210]). No command
7
+ * takes a version number.
8
+ */
9
+ export async function declaredVersion(projectDir) {
10
+ const path = join(projectDir, 'package.json');
11
+ let manifest;
12
+ try {
13
+ manifest = JSON.parse(await readFile(path, 'utf8'));
14
+ }
15
+ catch (cause) {
16
+ throw new TypeError(`Cannot read the Domain's version: ${path} is not a readable JSON file.`, {
17
+ cause,
18
+ });
19
+ }
20
+ const version = typeof manifest === 'object' && manifest !== null && !Array.isArray(manifest)
21
+ ? manifest.version
22
+ : undefined;
23
+ if (typeof version !== 'string') {
24
+ throw new TypeError(`${path} declares no version. The Domain's version is the package.json version, for example written by npm version minor.`);
25
+ }
26
+ return acceptVersion(version);
27
+ }