@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,95 @@
1
+ import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
2
+ import semver from 'semver';
3
+ import { acceptVersion, isStable } from './version.js';
4
+ const URL_SCHEMES = ['https://', 'http://'];
5
+ const MAJOR = /^(?:0|[1-9]\d*)$/u;
6
+ const LINE = /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/u;
7
+ /**
8
+ * Parse `<origin>@<major>.<minor>.<patch>[-<pre>]`, `<origin>@<major>.<minor>` or a deployment URL.
9
+ * Ranges are not references: `@1`, `^1.5` and `1.5.x` are refused, since only the exact version and
10
+ * the highest stable version of one minor line are ever resolved. A URL with credentials is refused:
11
+ * `https://issues.astrale.ai@1.5.0` would otherwise name the host `1.5.0`, not a version.
12
+ *
13
+ * A deployment URL is returned as written, so it must already be the URL the Kernel fetches: one the
14
+ * URL parser keeps as is, up to the `/` of an empty path. Whitespace and control characters (which
15
+ * the parser strips), an upper-case host, a default port or a missing `//` host are refused, as are a
16
+ * query and a fragment, which no deployment URL carries.
17
+ */
18
+ export function parseReference(input) {
19
+ if (URL_SCHEMES.some((scheme) => input.startsWith(scheme))) {
20
+ if (!URL.canParse(input))
21
+ throw invalid(input);
22
+ const url = new URL(input);
23
+ if (url.username !== '' || url.password !== '') {
24
+ throw new TypeError(`Reference ${JSON.stringify(input)} is not admitted: a deployment URL carries no credentials, and a version reference has no scheme (<origin>@<version>).`);
25
+ }
26
+ if (!isWrittenAsParsed(input, url)) {
27
+ throw new TypeError(`Reference ${JSON.stringify(input)} is not admitted: a deployment URL is written as the Kernel reads it, without whitespace, control characters, a query or a fragment, with a lower-case host and no default port.`);
28
+ }
29
+ return Object.freeze({ kind: 'url', url: input });
30
+ }
31
+ const at = input.indexOf('@');
32
+ if (at === -1)
33
+ throw invalid(input);
34
+ const origin = input.slice(0, at);
35
+ const selector = input.slice(at + 1);
36
+ if (!patterns.origin.test(origin))
37
+ throw invalid(input);
38
+ if (MAJOR.test(selector)) {
39
+ throw new TypeError(`Reference ${JSON.stringify(input)} names a major version only: name a minor line (${origin}@${selector}.<minor>) or an exact version (${origin}@${selector}.<minor>.<patch>).`);
40
+ }
41
+ if (isLine(selector))
42
+ return Object.freeze({ kind: 'line', origin, line: selector });
43
+ try {
44
+ return Object.freeze({ kind: 'exact', origin, version: acceptVersion(selector) });
45
+ }
46
+ catch (cause) {
47
+ throw invalid(input, cause);
48
+ }
49
+ }
50
+ /**
51
+ * Translate a version reference into one published version. An exact reference names any published
52
+ * version, a pre-release or a yanked one included (the caller warns on yanked). A line resolves to
53
+ * its highest stable version that is not yanked.
54
+ *
55
+ * A reference built from data rather than by `parseReference` is checked the same way: an exact
56
+ * version must be canonical and a line must be `<major>.<minor>`, so `1` never resolves as a major
57
+ * range and `1.5.3` never as an exact pin. Anything else throws a `TypeError`.
58
+ */
59
+ export function resolveVersion(published, reference) {
60
+ if (reference.kind === 'exact') {
61
+ const exact = acceptVersion(reference.version);
62
+ const match = published.find(({ version }) => version === exact);
63
+ if (match === undefined)
64
+ return Object.freeze({ kind: 'unresolved', reason: 'unknown-version' });
65
+ return Object.freeze({ kind: 'resolved', version: match.version, yanked: match.yanked });
66
+ }
67
+ const { kind, line: selector } = reference;
68
+ if (kind !== 'line') {
69
+ throw new TypeError(`Reference kind ${String(kind)} is not resolved: only an exact version or a minor line resolves.`);
70
+ }
71
+ if (!isLine(selector)) {
72
+ throw new TypeError(`Line ${typeof selector === 'string' ? JSON.stringify(selector) : typeof selector} is not admitted: expected <major>.<minor>, such as 1.5; a major version or an exact version is not a line.`);
73
+ }
74
+ const line = published.filter(({ version }) => isStable(version) && semver.satisfies(version, selector));
75
+ const version = semver.maxSatisfying(line.filter(({ yanked }) => !yanked).map(({ version }) => version), selector);
76
+ if (version !== null)
77
+ return Object.freeze({ kind: 'resolved', version, yanked: false });
78
+ return Object.freeze({
79
+ kind: 'unresolved',
80
+ reason: line.length === 0 ? 'no-stable-match' : 'yanked-only',
81
+ });
82
+ }
83
+ /** Whether a selector is one minor line, `<major>.<minor>`, whose versions semver can represent. */
84
+ function isLine(selector) {
85
+ return (typeof selector === 'string' && LINE.test(selector) && semver.valid(`${selector}.0`) !== null);
86
+ }
87
+ /** Whether the URL parser keeps `input` as written, the `/` of an empty path aside. */
88
+ function isWrittenAsParsed(input, url) {
89
+ if (/[?#]/u.test(input))
90
+ return false;
91
+ return url.href === input || (url.pathname === '/' && url.href === `${input}/`);
92
+ }
93
+ function invalid(input, cause) {
94
+ return new TypeError(`Reference ${JSON.stringify(input)} is not admitted: expected <origin>@<major>.<minor>.<patch>[-<pre>], <origin>@<major>.<minor> or a deployment URL.`, cause === undefined ? undefined : { cause });
95
+ }
@@ -0,0 +1,72 @@
1
+ /** One SemVer 2.0.0 version as an author declares it: no leading `v`, no build metadata. */
2
+ export type Version = string & {
3
+ readonly __version: unique symbol;
4
+ };
5
+ /** Semver level a change requires. */
6
+ export type BumpLevel = 'major' | 'minor' | 'patch';
7
+ /** One version of a Domain's registry index. Yanked versions stay in the index. */
8
+ export interface PublishedVersion {
9
+ readonly version: Version;
10
+ readonly yanked: boolean;
11
+ }
12
+ /** Outcome of checking a declared version against the stable version before it. */
13
+ export interface VersionVerdict {
14
+ readonly declared: Version;
15
+ /** Absent: no stable version before the declared one, nothing to check. */
16
+ readonly previous?: Version;
17
+ /** Level the change requires, before the 0.x rule. */
18
+ readonly level?: BumpLevel;
19
+ /** Level after the 0.x rule. */
20
+ readonly effective?: BumpLevel;
21
+ /** First pre-release of the required version, such as `2.0.0-0`. */
22
+ readonly minimum?: Version;
23
+ /** Stable form of the required version, such as `2.0.0`. */
24
+ readonly next?: Version;
25
+ /** For a refused pre-release, the first pre-release of the required version on its channel. */
26
+ readonly suggestion?: Version;
27
+ readonly accepted: boolean;
28
+ }
29
+ /**
30
+ * Admit one declared version. Build metadata is refused because it takes no part in precedence
31
+ * (`1.5.0+x` equals `1.5.0`), so it could not name a distinct version of the registry.
32
+ */
33
+ export declare function acceptVersion(input: unknown): Version;
34
+ /**
35
+ * The highest published stable version below (`<`, publish) or up to (`<=`, diff) the declared one.
36
+ * Yanked versions count, since their installations keep running. Pre-releases never do: a
37
+ * pre-release is a draft of its version and is compared with the last stable one. An index entry
38
+ * that is not a canonical version (`v1.4.2`, `1.4.3+b`) is no version and never a baseline; a
39
+ * declared version that is not canonical is refused, so the check never passes for want of one.
40
+ */
41
+ export declare function baselineVersion(published: readonly PublishedVersion[], declared: Version, bound: '<' | '<='): Version | undefined;
42
+ /**
43
+ * Below 1.0.0 a breaking change raises the minor and an addition raises the patch, as
44
+ * release-please `bump-minor-pre-major` and `bump-patch-for-minor-pre-major` do.
45
+ */
46
+ export declare function effectiveLevel(level: BumpLevel, previous: Version): BumpLevel;
47
+ /**
48
+ * The smallest version a change of `level` admits after `previous`, the first pre-release of the
49
+ * required version: `inc(previous, 'pre' + effective)`.
50
+ */
51
+ export declare function minimumVersion(previous: Version, level: BumpLevel): Version;
52
+ /**
53
+ * Check a declared version against the stable version before it and the level its change requires.
54
+ * Without a previous stable version there is nothing to check. Otherwise the declared version must
55
+ * reach the minimum, so `2.0.0-rc.1` passes where `1.5.0-beta.1` does not. The check never guesses:
56
+ * a previous version comes with the level its change requires, which the input type enforces, and a
57
+ * call that still omits it throws a `TypeError`, as do a declared version that is not canonical and
58
+ * a previous version that is not stable.
59
+ */
60
+ export declare function judgeVersion(input: {
61
+ readonly declared: Version;
62
+ readonly previous?: undefined;
63
+ readonly level?: BumpLevel;
64
+ } | {
65
+ readonly declared: Version;
66
+ readonly previous: Version | undefined;
67
+ readonly level: BumpLevel;
68
+ }): VersionVerdict;
69
+ /** Whether a value is a version `acceptVersion` admits: canonical, without `v` or build metadata. */
70
+ export declare function isVersion(input: unknown): input is Version;
71
+ /** Whether a value is a canonical version (`isVersion`) that is not a pre-release. */
72
+ export declare function isStable(version: string): boolean;
@@ -0,0 +1,98 @@
1
+ import semver from 'semver';
2
+ const PRERELEASE = { major: 'premajor', minor: 'preminor', patch: 'prepatch' };
3
+ /**
4
+ * Admit one declared version. Build metadata is refused because it takes no part in precedence
5
+ * (`1.5.0+x` equals `1.5.0`), so it could not name a distinct version of the registry.
6
+ */
7
+ export function acceptVersion(input) {
8
+ if (isVersion(input))
9
+ return input;
10
+ throw new TypeError(`Version ${typeof input === 'string' ? JSON.stringify(input) : typeof input} is not admitted: expected SemVer 2.0.0 such as 1.5.0 or 2.0.0-rc.1, without a leading "v" or build metadata.`);
11
+ }
12
+ /**
13
+ * The highest published stable version below (`<`, publish) or up to (`<=`, diff) the declared one.
14
+ * Yanked versions count, since their installations keep running. Pre-releases never do: a
15
+ * pre-release is a draft of its version and is compared with the last stable one. An index entry
16
+ * that is not a canonical version (`v1.4.2`, `1.4.3+b`) is no version and never a baseline; a
17
+ * declared version that is not canonical is refused, so the check never passes for want of one.
18
+ */
19
+ export function baselineVersion(published, declared, bound) {
20
+ acceptVersion(declared);
21
+ const stables = published.filter(({ version }) => isStable(version)).map(({ version }) => version);
22
+ return semver.maxSatisfying(stables, `${bound}${declared}`) ?? undefined;
23
+ }
24
+ /**
25
+ * Below 1.0.0 a breaking change raises the minor and an addition raises the patch, as
26
+ * release-please `bump-minor-pre-major` and `bump-patch-for-minor-pre-major` do.
27
+ */
28
+ export function effectiveLevel(level, previous) {
29
+ if (!Object.hasOwn(PRERELEASE, level)) {
30
+ throw new TypeError(`Bump level ${JSON.stringify(level)} is not admitted: expected major, minor or patch.`);
31
+ }
32
+ if (semver.major(acceptVersion(previous)) !== 0)
33
+ return level;
34
+ return level === 'major' ? 'minor' : 'patch';
35
+ }
36
+ /**
37
+ * The smallest version a change of `level` admits after `previous`, the first pre-release of the
38
+ * required version: `inc(previous, 'pre' + effective)`.
39
+ */
40
+ export function minimumVersion(previous, level) {
41
+ assertBaseline(previous);
42
+ return increment(previous, PRERELEASE[effectiveLevel(level, previous)]);
43
+ }
44
+ /**
45
+ * Check a declared version against the stable version before it and the level its change requires.
46
+ * Without a previous stable version there is nothing to check. Otherwise the declared version must
47
+ * reach the minimum, so `2.0.0-rc.1` passes where `1.5.0-beta.1` does not. The check never guesses:
48
+ * a previous version comes with the level its change requires, which the input type enforces, and a
49
+ * call that still omits it throws a `TypeError`, as do a declared version that is not canonical and
50
+ * a previous version that is not stable.
51
+ */
52
+ export function judgeVersion(input) {
53
+ const { declared, previous, level } = input;
54
+ acceptVersion(declared);
55
+ if (previous === undefined)
56
+ return Object.freeze({ declared, accepted: true });
57
+ if (level === undefined) {
58
+ throw new TypeError(`Version ${JSON.stringify(declared)} cannot be checked against ${JSON.stringify(previous)} without the level its change requires.`);
59
+ }
60
+ assertBaseline(previous);
61
+ const effective = effectiveLevel(level, previous);
62
+ const minimum = minimumVersion(previous, level);
63
+ const accepted = semver.gte(declared, minimum);
64
+ const channel = semver.prerelease(declared)?.[0];
65
+ const suggestion = accepted || channel === undefined
66
+ ? undefined
67
+ : increment(previous, PRERELEASE[effective], typeof channel === 'string' ? channel : undefined);
68
+ return Object.freeze({
69
+ declared,
70
+ previous,
71
+ level,
72
+ effective,
73
+ minimum,
74
+ next: increment(previous, effective),
75
+ ...(suggestion === undefined ? {} : { suggestion }),
76
+ accepted,
77
+ });
78
+ }
79
+ /** Whether a value is a version `acceptVersion` admits: canonical, without `v` or build metadata. */
80
+ export function isVersion(input) {
81
+ return typeof input === 'string' && semver.valid(input) === input;
82
+ }
83
+ /** Whether a value is a canonical version (`isVersion`) that is not a pre-release. */
84
+ export function isStable(version) {
85
+ return isVersion(version) && semver.prerelease(version) === null;
86
+ }
87
+ /** The version before a declared one is the highest stable version that `baselineVersion` finds. */
88
+ function assertBaseline(previous) {
89
+ if (isStable(previous))
90
+ return;
91
+ throw new TypeError(`Previous version ${JSON.stringify(previous)} is not admitted: it must be a stable version, the highest stable version before the declared one.`);
92
+ }
93
+ function increment(version, release, channel) {
94
+ const next = semver.inc(version, release, undefined, channel);
95
+ if (next === null)
96
+ throw new TypeError(`Version ${JSON.stringify(version)} is not admitted.`);
97
+ return next;
98
+ }
@@ -1,8 +1,7 @@
1
- import { isLegacyDeployment } from '../deployment/deploy.js';
2
1
  import { isProject } from './define.js';
3
2
  export const PROJECT_EXPORT_HINT = 'astrale.config.ts must export exactly one default Project:\n' +
4
3
  " import { defineProject } from '@astrale-os/sdk/project'\n" +
5
- ' export default defineProject({ application, environments: { development: { deployment: adapter() } } })\n';
4
+ ' export default defineProject({ domain, environments: { development: { deployment: adapter() } } })\n';
6
5
  /** Admit the module namespace of one loaded `astrale.config.ts`: exactly one default Project. */
7
6
  export function admitProjectModule(loaded) {
8
7
  if (loaded === null ||
@@ -15,8 +14,5 @@ export function admitProjectModule(loaded) {
15
14
  const value = Reflect.get(loaded, 'default');
16
15
  if (isProject(value))
17
16
  return value;
18
- if (isLegacyDeployment(value)) {
19
- throw new TypeError(`astrale.config.ts exports the legacy deploy() aggregate; migrate Application and Environments into defineProject().\n${PROJECT_EXPORT_HINT}`);
20
- }
21
17
  throw new TypeError(`Default export must be created by defineProject().\n${PROJECT_EXPORT_HINT}`);
22
18
  }
@@ -1,12 +1,12 @@
1
- import type { ApplicationIdentity } from '../application/index.js';
1
+ import type { DomainDefinitionIdentity } from '../application/index.js';
2
2
  import type { Tests } from '../testing/index.js';
3
3
  import type { Project, ProjectEnvironment, ProjectEntrypoints } from './project.js';
4
- export interface ProjectInput<ApplicationValue extends ApplicationIdentity, EnvironmentsValue extends Readonly<Record<string, ProjectEnvironment>>, TestsValue extends Tests | undefined> {
5
- readonly application: ApplicationValue;
4
+ export interface ProjectInput<DomainDefinitionValue extends DomainDefinitionIdentity, EnvironmentsValue extends Readonly<Record<string, ProjectEnvironment>>, TestsValue extends Tests | undefined> {
5
+ readonly domain: DomainDefinitionValue;
6
6
  readonly environments: EnvironmentsValue;
7
7
  readonly entrypoints?: ProjectEntrypoints;
8
8
  readonly tests?: TestsValue;
9
9
  }
10
10
  /** Capture one inert Project definition without loading entrypoints or performing effects. */
11
- export declare function defineProject<const ApplicationValue extends ApplicationIdentity, const EnvironmentsValue extends Readonly<Record<string, ProjectEnvironment>>, const TestsValue extends Tests | undefined = undefined>(input: ProjectInput<ApplicationValue, EnvironmentsValue, TestsValue>): Project<ApplicationValue, EnvironmentsValue, TestsValue>;
11
+ export declare function defineProject<const DomainDefinitionValue extends DomainDefinitionIdentity, const EnvironmentsValue extends Readonly<Record<string, ProjectEnvironment>>, const TestsValue extends Tests | undefined = undefined>(input: ProjectInput<DomainDefinitionValue, EnvironmentsValue, TestsValue>): Project<DomainDefinitionValue, EnvironmentsValue, TestsValue>;
12
12
  export declare function isProject(input: unknown): input is Project;
@@ -1,14 +1,18 @@
1
- import { isApplication } from '../application/index.js';
1
+ import { isDomainDefinition } from '../application/index.js';
2
2
  import { isDeployment } from '../deployment/deployment.js';
3
+ import { ENVIRONMENT_NAME } from '../deployment/environment.js';
3
4
  import { isTests } from '../testing/index.js';
5
+ import { installCommand } from './install-command.js';
4
6
  const admittedProjects = new WeakSet();
5
- const ENVIRONMENT_NAME = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/u;
6
7
  /** Capture one inert Project definition without loading entrypoints or performing effects. */
7
8
  export function defineProject(input) {
8
9
  const value = record(input, 'Project definition');
9
- exact(value, ['application', 'environments'], ['entrypoints', 'tests'], invalid);
10
- if (!isApplication(input.application))
11
- throw new TypeError('Project Application is not admitted.');
10
+ if (Object.hasOwn(value, 'application')) {
11
+ throw new TypeError('Project `application` is now `domain`: defineProject({ domain, environments }).');
12
+ }
13
+ exact(value, ['domain', 'environments'], ['entrypoints', 'tests'], invalid);
14
+ if (!isDomainDefinition(input.domain))
15
+ throw new TypeError('Project Domain is not admitted.');
12
16
  const environments = record(input.environments, 'Project environments');
13
17
  if (Reflect.ownKeys(environments).some((key) => typeof key !== 'string')) {
14
18
  throw new TypeError('Project Environment names must be strings.');
@@ -16,27 +20,28 @@ export function defineProject(input) {
16
20
  const names = Object.keys(environments);
17
21
  if (names.length === 0)
18
22
  throw new TypeError('Project must declare at least one Environment.');
19
- const captured = Object.create(null);
20
- for (const name of names) {
23
+ const declared = names.map((name) => {
21
24
  if (!ENVIRONMENT_NAME.test(name)) {
22
25
  throw new TypeError(`Project Environment name "${name}" is not normalized.`);
23
26
  }
24
- const environment = record(environments[name], `Project Environment ${name}`);
25
- exact(environment, ['deployment'], ['installation'], () => invalidEnvironment(name));
27
+ return [name, record(environments[name], `Project Environment ${name}`)];
28
+ });
29
+ // One refusal names every Environment that declares installation, each with its own commands.
30
+ const installations = declared
31
+ .filter(([, environment]) => Object.hasOwn(environment, 'installation'))
32
+ .map(([name, environment]) => installationRefusal(environment, name));
33
+ if (installations.length > 0)
34
+ throw new TypeError(installations.join('\n'));
35
+ const captured = Object.create(null);
36
+ for (const [name, environment] of declared) {
37
+ exact(environment, ['deployment'], [], () => invalidEnvironment(name));
26
38
  if (!isDeployment(environment.deployment)) {
27
39
  throw new TypeError(`Project Environment ${name} deployment is not admitted.`);
28
40
  }
29
- const installation = environment.installation === undefined
30
- ? undefined
31
- : admitInstallation(environment.installation, name);
32
41
  environment.deployment.adapter.admit?.(environment.deployment.parameters, {
33
42
  environment: name,
34
- ...(installation === undefined ? {} : { installation }),
35
- });
36
- captured[name] = Object.freeze({
37
- deployment: environment.deployment,
38
- ...(installation === undefined ? {} : { installation }),
39
43
  });
44
+ captured[name] = Object.freeze({ deployment: environment.deployment });
40
45
  }
41
46
  const entrypoints = input.entrypoints === undefined ? undefined : admitEntrypoints(input.entrypoints);
42
47
  if (input.tests !== undefined && !isTests(input.tests)) {
@@ -44,7 +49,7 @@ export function defineProject(input) {
44
49
  }
45
50
  const project = Object.freeze({
46
51
  kind: 'project',
47
- application: input.application,
52
+ domain: input.domain,
48
53
  environments: Object.freeze(captured),
49
54
  ...(entrypoints === undefined ? {} : { entrypoints }),
50
55
  ...(input.tests === undefined ? {} : { tests: input.tests }),
@@ -68,22 +73,37 @@ function admitEntrypoints(input) {
68
73
  }
69
74
  return Object.freeze({ runtime: input.runtime });
70
75
  }
71
- function admitInstallation(input, environment) {
72
- const value = record(input, `Project Environment ${environment} installation`);
73
- exact(value, ['instance'], ['identity'], () => {
74
- throw new TypeError(`Project Environment ${environment} installation may contain only instance and identity.`);
75
- });
76
- const instance = stableCoordinate(value.instance, 'installation instance');
77
- const identity = value.identity === undefined
78
- ? undefined
79
- : stableCoordinate(value.identity, 'installation identity');
80
- return Object.freeze({ instance, ...(identity === undefined ? {} : { identity }) });
81
- }
82
- function stableCoordinate(input, label) {
83
- if (typeof input !== 'string' || input.length === 0 || input.trim() !== input) {
84
- throw new TypeError(`Project ${label} must be a non-empty stable string.`);
76
+ /**
77
+ * A deploy no longer installs (DX [.81399], AM-72): an Environment that still declares
78
+ * `installation` is refused before any effect, with the commands that replace it. Its only
79
+ * consumer pins an SDK older than this refusal.
80
+ *
81
+ * adapter-astrale deploys on Admin's Services, never through the installation's instance. The
82
+ * installation's instance and identity move to the install command.
83
+ */
84
+ function installationRefusal(environment, name) {
85
+ const declared = environment.installation;
86
+ if (declared === undefined) {
87
+ return (`Project Environment ${name} declares \`installation\`, which a deploy no longer reads: a ` +
88
+ 'deploy never installs. Remove the key.');
85
89
  }
86
- return input;
90
+ const installation = declared !== null && typeof declared === 'object'
91
+ ? declared
92
+ : {};
93
+ const instance = stable(installation.instance);
94
+ const identity = stable(installation.identity);
95
+ return (`Project Environment ${name} declares installation, and a deploy no longer installs. ` +
96
+ `Remove \`installation\`, run \`astrale-domain deploy ${name}\`, ` +
97
+ `then install the URL it prints with \`${installCommand(instance, identity)}\`.`);
98
+ }
99
+ /** A declared coordinate worth repeating in guidance: a non-empty single-line trimmed string. */
100
+ function stable(input) {
101
+ return typeof input === 'string' &&
102
+ input.length > 0 &&
103
+ input.trim() === input &&
104
+ !/[\s`]/u.test(input)
105
+ ? input
106
+ : undefined;
87
107
  }
88
108
  function record(input, label) {
89
109
  if (input === null || typeof input !== 'object' || Array.isArray(input)) {
@@ -99,8 +119,8 @@ function exact(input, required, optional, fail) {
99
119
  }
100
120
  }
101
121
  function invalid() {
102
- throw new TypeError('Project definition may contain only application, environments, entrypoints, and tests.');
122
+ throw new TypeError('Project definition may contain only domain, environments, entrypoints, and tests.');
103
123
  }
104
124
  function invalidEnvironment(name) {
105
- throw new TypeError(`Project Environment ${name} may contain only deployment and installation.`);
125
+ throw new TypeError(`Project Environment ${name} may contain only deployment.`);
106
126
  }
@@ -1,4 +1,4 @@
1
1
  export { admitProjectModule, PROJECT_EXPORT_HINT } from './admit.js';
2
2
  export { defineProject, isProject } from './define.js';
3
3
  export type { ProjectInput } from './define.js';
4
- export type { ApplicationOfProject, EnvironmentsOfProject, Project, ProjectEntrypoints, ProjectEnvironment, } from './project.js';
4
+ export type { DomainDefinitionOfProject, EnvironmentsOfProject, Project, ProjectEntrypoints, ProjectEnvironment, } from './project.js';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The command that installs a deployed URL on an instance, as every SDK refusal and help text
3
+ * names it. A deploy never installs (DX [.81399], AM-72): `astrale-domain deploy <environment>`
4
+ * prints a URL, and this command installs it.
5
+ */
6
+ export declare function installCommand(instance?: string, identity?: string): string;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The command that installs a deployed URL on an instance, as every SDK refusal and help text
3
+ * names it. A deploy never installs (DX [.81399], AM-72): `astrale-domain deploy <environment>`
4
+ * prints a URL, and this command installs it.
5
+ */
6
+ export function installCommand(instance = '<instance>', identity) {
7
+ return (`astrale domain install <url> -i ${instance}` +
8
+ (identity === undefined ? '' : ` --as ${identity}`));
9
+ }
@@ -1,24 +1,26 @@
1
- import type { ApplicationIdentity } from '../application/index.js';
2
- import type { InstallationTarget } from '../deployment/adapter/index.js';
1
+ import type { DomainDefinitionIdentity } from '../application/index.js';
3
2
  import type { Tests } from '../testing/index.js';
4
3
  export interface ProjectEntrypoints {
5
4
  readonly runtime: string;
6
5
  }
6
+ /**
7
+ * One Environment of a Project: where and how its deployments are made. It never names an
8
+ * instance: a deploy installs nothing, and `astrale domain install <url>` installs a deployment.
9
+ */
7
10
  export interface ProjectEnvironment<DeploymentValue = unknown> {
8
11
  readonly deployment: DeploymentValue;
9
- readonly installation?: InstallationTarget;
10
12
  }
11
13
  /** The complete independently executable software-product definition in astrale.config.ts. */
12
- export interface Project<ApplicationValue extends ApplicationIdentity = ApplicationIdentity, EnvironmentsValue extends Readonly<Record<string, ProjectEnvironment>> = Readonly<Record<string, ProjectEnvironment>>, TestsValue extends Tests | undefined = undefined> {
14
+ export interface Project<DomainDefinitionValue extends DomainDefinitionIdentity = DomainDefinitionIdentity, EnvironmentsValue extends Readonly<Record<string, ProjectEnvironment>> = Readonly<Record<string, ProjectEnvironment>>, TestsValue extends Tests | undefined = undefined> {
13
15
  readonly kind: 'project';
14
- readonly application: ApplicationValue;
16
+ readonly domain: DomainDefinitionValue;
15
17
  readonly environments: EnvironmentsValue;
16
18
  readonly entrypoints?: ProjectEntrypoints;
17
19
  readonly tests?: TestsValue;
18
20
  }
19
- export type ApplicationOfProject<Value> = Value extends {
20
- readonly application: infer ApplicationValue;
21
- } ? Extract<ApplicationValue, ApplicationIdentity> : never;
21
+ export type DomainDefinitionOfProject<Value> = Value extends {
22
+ readonly domain: infer DomainDefinitionValue;
23
+ } ? Extract<DomainDefinitionValue, DomainDefinitionIdentity> : never;
22
24
  export type EnvironmentsOfProject<Value> = Value extends {
23
25
  readonly environments: infer EnvironmentsValue;
24
26
  } ? EnvironmentsValue : never;
@@ -7,7 +7,7 @@ export type AuthoredDatasetVariables = DatasetVariables | void;
7
7
  /** The exact variables record retained by a Dataset for one authored return type. */
8
8
  export type DatasetVariablesOf<Value> = [Value] extends [void] ? Readonly<Record<never, never>> : Value extends DatasetVariables ? Value : never;
9
9
  export interface DatasetInput<Schema extends schemaLanguage.DomainSchema, Variables extends AuthoredDatasetVariables> {
10
- /** Stable lowercase identity, unique within one Application. */
10
+ /** Stable lowercase identity, unique within one Domain. */
11
11
  readonly id: string;
12
12
  readonly title?: string;
13
13
  readonly description?: string;
@@ -0,0 +1,128 @@
1
+ import type { ActionOutputOf, ResolvedDomainOf } from '../../application/action/index.js';
2
+ import type { DeclaredErrors } from '../../application/error/index.js';
3
+ import type { Integrations, Providers } from '../../application/integration/index.js';
4
+ import type { CallableAtWorkflowAddress, DurableStepRetry, WorkflowAddress, WorkflowDefinition } from '../../application/workflow/index.js';
5
+ import type { ExecutionOutcome, ExecutionState } from '../../platform/client/session/index.js';
6
+ import type { NodeId } from '../../platform/graph/node/index.js';
7
+ import type { CallableInputOf, ResolvedMethod, schema } from '../../platform/schema/index.js';
8
+ import type { Value } from '../../platform/value/index.js';
9
+ import type { TestStepCapabilities } from './steps.js';
10
+ export interface TestWorkflowEngineOptions {
11
+ /** Start of the virtual clock, in Unix milliseconds; the current time by default. */
12
+ readonly now?: number;
13
+ /**
14
+ * The deployment's `durable.retry`: the budget of every Step that declares none, and with
15
+ * `maxAttempts` the attempts of a run failing outside any Step before it pauses.
16
+ */
17
+ readonly retry?: DurableStepRetry;
18
+ }
19
+ /**
20
+ * An in-memory workflow engine that runs durable Workflows with the receiver a Host serves: it
21
+ * journals each Step attempt, replays the journal on every attempt, keeps timers on a virtual clock,
22
+ * buffers signals, pauses a run failing outside any Step after its last attempt and cancels
23
+ * cooperatively. A Step retries as on a Host: a failure of its own code spends its budget, and a
24
+ * Kernel or a transport that is unavailable makes it wait without spending it. The wait after the
25
+ * Step's own failure is not waited out, but counts toward its `maxDurationMs`; a wait for the
26
+ * platform is a timer, which `advance` moves past.
27
+ */
28
+ export interface TestWorkflowEngine {
29
+ /** The virtual clock, in Unix milliseconds. */
30
+ readonly now: number;
31
+ /** Start one durable Execution and settle it: it ends, waits, or pauses. */
32
+ start<Schema extends schema.DomainSchema, Address extends WorkflowAddress<Schema>, Definitions extends Integrations, Errors extends DeclaredErrors>(workflow: WorkflowDefinition<Schema, Address, Definitions, Errors>, options: TestStartOptions<CallableAtWorkflowAddress<Schema, Address>, ResolvedDomainOf<Schema>, Definitions>): Promise<TestExecution<ActionOutputOf<CallableAtWorkflowAddress<Schema, Address>>>>;
33
+ /** Move the virtual clock forward and settle every waiting Execution. */
34
+ advance(durationMs: number): Promise<void>;
35
+ }
36
+ export type TestStartOptions<Callable, DomainValue, Definitions extends Integrations> = {
37
+ /** The resolved Schema the Workflow belongs to. */
38
+ readonly schema: DomainValue;
39
+ readonly input: CallableInputOf<Callable>;
40
+ /** The `K.Execution` id; a fresh one by default. */
41
+ readonly id?: NodeId;
42
+ /** Who started the Execution; test Identities by default. */
43
+ readonly initiator?: {
44
+ readonly principal: NodeId;
45
+ readonly caller: NodeId;
46
+ };
47
+ readonly capabilities?: TestStepCapabilities;
48
+ /** Steps whose first completion is lost before the journal records it; see `interruptAfter`. */
49
+ readonly interruptAfter?: readonly string[];
50
+ } & ReceiverOf<Callable> & ProvidersOf<Definitions>;
51
+ type ReceiverOf<Callable> = Callable extends ResolvedMethod<unknown, unknown, false> ? {
52
+ readonly self: NodeId;
53
+ } : {
54
+ readonly self?: never;
55
+ };
56
+ type ProvidersOf<Definitions extends Integrations> = keyof Definitions extends never ? {
57
+ readonly providers?: never;
58
+ } : {
59
+ readonly providers: Providers<Definitions>;
60
+ };
61
+ /** One durable Execution on a test workflow engine. */
62
+ export interface TestExecution<Output> {
63
+ readonly id: NodeId;
64
+ readonly state: Extract<ExecutionState, 'running' | 'waiting' | 'paused' | 'completed' | 'failed' | 'cancelled'>;
65
+ /** Present once the Execution ended, as `Execution.result` answers it. */
66
+ readonly outcome: ExecutionOutcome<Output> | undefined;
67
+ /**
68
+ * What the last failed attempt threw: why a paused Execution paused, or what the last attempt of
69
+ * an exhausted Step threw, which its `STEP_EXHAUSTED` outcome does not carry.
70
+ */
71
+ readonly failure: unknown;
72
+ /** Attempts made so far, replays included. */
73
+ readonly attempts: number;
74
+ /** The run's journal, in order. */
75
+ readonly journal: readonly TestJournalEntry[];
76
+ /**
77
+ * Deliver `Execution.signal({ name, value })`, then settle. False when a signal already resolved
78
+ * that name.
79
+ */
80
+ signal(name: string, value?: Value): Promise<boolean>;
81
+ /** Request cooperative cancellation, as `Execution.cancel()`, then settle. */
82
+ cancel(): Promise<void>;
83
+ /** Attempt a paused Execution again, as `Execution.resume()`, then settle. */
84
+ resume(): Promise<void>;
85
+ /**
86
+ * Run the Workflow once more from its journal alone, as a restart does, and fail if it runs a Step
87
+ * again, diverges from the journal, or reaches another outcome.
88
+ */
89
+ replay(): Promise<void>;
90
+ /**
91
+ * The next time Step `id` completes, lose its result before the journal records it, as a crash
92
+ * between its effect and the journal does. The engine then retries the Step.
93
+ */
94
+ interruptAfter(id: string): void;
95
+ }
96
+ /** One entry of a run's journal. */
97
+ export type TestJournalEntry = {
98
+ readonly kind: 'run';
99
+ readonly name: string;
100
+ readonly settled: boolean;
101
+ /**
102
+ * Times this entry's work ran, interruptions included; a replay runs it no more. Each retry of
103
+ * a Step is an entry of its own, after the wait its failure prescribes.
104
+ */
105
+ readonly attempts: number;
106
+ readonly value?: unknown;
107
+ readonly error?: unknown;
108
+ } | {
109
+ readonly kind: 'sleep';
110
+ /** The wait's name, if it has one: `retry:` or `unavailable:` and what it retries. */
111
+ readonly name?: string;
112
+ readonly until: number;
113
+ readonly settled: boolean;
114
+ } | {
115
+ readonly kind: 'signal';
116
+ readonly name: string;
117
+ readonly settled: boolean;
118
+ readonly value?: unknown;
119
+ } | {
120
+ readonly kind: 'race';
121
+ readonly name: string;
122
+ readonly until: number;
123
+ readonly settled: boolean;
124
+ readonly outcome?: 'signal' | 'timeout' | 'cancelled';
125
+ };
126
+ /** Create an in-memory workflow engine for tests. */
127
+ export declare function createTestWorkflowEngine(options?: TestWorkflowEngineOptions): TestWorkflowEngine;
128
+ export {};