@astrale-os/sdk 0.6.0-beta.3 → 0.6.0-beta.30

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 (444) hide show
  1. package/README.md +179 -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 +44 -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 +14 -9
  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/operation.d.ts +2 -2
  15. package/dist/application/mutation/authoring/properties.d.ts +5 -3
  16. package/dist/application/mutation/authoring/properties.js +35 -2
  17. package/dist/application/mutation/authoring/transition.js +4 -1
  18. package/dist/application/mutation/index.d.ts +1 -1
  19. package/dist/application/query/composite/plan.d.ts +0 -4
  20. package/dist/application/query/composite/plan.js +0 -2
  21. package/dist/application/routes/admission.d.ts +2 -2
  22. package/dist/application/routes/admission.js +1 -1
  23. package/dist/application/routes/route.d.ts +2 -2
  24. package/dist/application/runtime/actions.js +3 -0
  25. package/dist/application/runtime/workflows.d.ts +3 -1
  26. package/dist/application/runtime/workflows.js +6 -4
  27. package/dist/application/view/define.js +4 -6
  28. package/dist/application/view/frontend.d.ts +2 -2
  29. package/dist/application/view/index.d.ts +1 -1
  30. package/dist/application/view/route.d.ts +0 -14
  31. package/dist/application/view/route.js +1 -64
  32. package/dist/application/workflow/authoring.d.ts +3 -2
  33. package/dist/application/workflow/context.d.ts +8 -2
  34. package/dist/application/workflow/define.d.ts +4 -4
  35. package/dist/application/workflow/define.js +20 -4
  36. package/dist/application/workflow/durable.d.ts +87 -0
  37. package/dist/application/workflow/index.d.ts +3 -2
  38. package/dist/application/workflow/runner/inline.js +3 -4
  39. package/dist/application/workflow/runner/runner.d.ts +2 -2
  40. package/dist/application/workflow/step/output.d.ts +2 -0
  41. package/dist/application/workflow/step/output.js +73 -0
  42. package/dist/application/workflow/workflow.d.ts +13 -3
  43. package/dist/deployment/adapter/adapter.d.ts +55 -13
  44. package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
  45. package/dist/deployment/adapter/bundle/file.d.ts +10 -0
  46. package/dist/deployment/adapter/bundle/index.d.ts +2 -0
  47. package/dist/deployment/adapter/define.d.ts +4 -3
  48. package/dist/deployment/adapter/define.js +107 -23
  49. package/dist/deployment/adapter/index.d.ts +4 -3
  50. package/dist/deployment/adapter/index.js +1 -0
  51. package/dist/deployment/adapter/release/command.d.ts +33 -0
  52. package/dist/deployment/adapter/release/context.d.ts +94 -0
  53. package/dist/deployment/adapter/release/index.d.ts +4 -0
  54. package/dist/deployment/adapter/release/index.js +1 -0
  55. package/dist/deployment/adapter/release/list.d.ts +53 -0
  56. package/dist/deployment/adapter/release/list.js +1 -0
  57. package/dist/deployment/adapter/release/refusal.d.ts +10 -0
  58. package/dist/deployment/adapter/release/refusal.js +14 -0
  59. package/dist/deployment/adapter/release/result.d.ts +56 -0
  60. package/dist/deployment/adapter/release/result.js +1 -0
  61. package/dist/deployment/address/configuration.d.ts +95 -0
  62. package/dist/deployment/address/configuration.js +273 -0
  63. package/dist/deployment/address/fingerprint.d.ts +5 -0
  64. package/dist/deployment/address/fingerprint.js +27 -0
  65. package/dist/deployment/address/index.d.ts +5 -0
  66. package/dist/deployment/address/index.js +4 -0
  67. package/dist/deployment/address/label.d.ts +42 -0
  68. package/dist/deployment/address/label.js +80 -0
  69. package/dist/deployment/address/line.d.ts +29 -0
  70. package/dist/deployment/address/line.js +53 -0
  71. package/dist/deployment/address/record.d.ts +73 -0
  72. package/dist/deployment/address/record.js +138 -0
  73. package/dist/deployment/address/summary.d.ts +30 -0
  74. package/dist/deployment/address/summary.js +1 -0
  75. package/dist/deployment/address/vectors.d.ts +60 -0
  76. package/dist/deployment/address/vectors.js +517 -0
  77. package/dist/deployment/authoring.d.ts +0 -2
  78. package/dist/deployment/authoring.js +0 -1
  79. package/dist/deployment/build/build.d.ts +8 -2
  80. package/dist/deployment/build/compile.d.ts +4 -4
  81. package/dist/deployment/build/compile.js +19 -17
  82. package/dist/deployment/build/frontend/compilation.d.ts +2 -4
  83. package/dist/deployment/build/frontend/compilation.js +0 -5
  84. package/dist/deployment/build/frontend/digest.js +1 -5
  85. package/dist/deployment/build/index.d.ts +1 -0
  86. package/dist/deployment/build/index.js +1 -0
  87. package/dist/deployment/build/manifest.d.ts +59 -0
  88. package/dist/deployment/build/manifest.js +118 -0
  89. package/dist/deployment/build/material.d.ts +2 -2
  90. package/dist/deployment/build/material.js +28 -13
  91. package/dist/deployment/build/schema.d.ts +2 -2
  92. package/dist/deployment/deployment.d.ts +3 -2
  93. package/dist/deployment/environment.d.ts +6 -0
  94. package/dist/deployment/environment.js +6 -0
  95. package/dist/deployment/index.d.ts +4 -6
  96. package/dist/deployment/index.js +1 -2
  97. package/dist/deployment/release/addressing.d.ts +6 -5
  98. package/dist/deployment/release/addressing.js +2 -3
  99. package/dist/deployment/release/assemble.d.ts +6 -3
  100. package/dist/deployment/release/assemble.js +12 -10
  101. package/dist/deployment/release/release.d.ts +16 -5
  102. package/dist/deployment/release/seal.d.ts +14 -0
  103. package/dist/deployment/release/seal.js +22 -0
  104. package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
  105. package/dist/deployment/release/{publication → served}/callables.js +2 -2
  106. package/dist/deployment/release/served/index.d.ts +11 -0
  107. package/dist/deployment/release/served/index.js +26 -0
  108. package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
  109. package/dist/deployment/release/{publication → served}/views.js +0 -1
  110. package/dist/deployment/runtime/admission.d.ts +2 -2
  111. package/dist/deployment/runtime/admission.js +5 -5
  112. package/dist/deployment/verify/index.d.ts +3 -4
  113. package/dist/deployment/verify/index.js +2 -3
  114. package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
  115. package/dist/deployment/verify/preflight/bundle.js +71 -0
  116. package/dist/deployment/verify/preflight/index.d.ts +1 -12
  117. package/dist/deployment/verify/preflight/index.js +1 -12
  118. package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
  119. package/dist/deployment/verify/readiness/fetch.js +26 -0
  120. package/dist/deployment/verify/readiness/identity.d.ts +3 -6
  121. package/dist/deployment/verify/readiness/identity.js +3 -3
  122. package/dist/deployment/verify/readiness/index.d.ts +15 -8
  123. package/dist/deployment/verify/readiness/index.js +25 -6
  124. package/dist/deployment/verify/readiness/release.d.ts +8 -0
  125. package/dist/deployment/verify/readiness/release.js +22 -0
  126. package/dist/deployment/worker/address.d.ts +26 -0
  127. package/dist/deployment/worker/address.js +43 -0
  128. package/dist/deployment/worker/build.d.ts +60 -0
  129. package/dist/deployment/worker/build.js +172 -0
  130. package/dist/deployment/worker/configuration.d.ts +73 -0
  131. package/dist/deployment/worker/configuration.js +165 -0
  132. package/dist/deployment/worker/content.d.ts +38 -0
  133. package/dist/deployment/worker/content.js +169 -0
  134. package/dist/deployment/worker/index.d.ts +29 -0
  135. package/dist/deployment/worker/index.js +29 -0
  136. package/dist/deployment/worker/limits.d.ts +30 -0
  137. package/dist/deployment/worker/limits.js +30 -0
  138. package/dist/deployment/worker/record.d.ts +29 -0
  139. package/dist/deployment/worker/record.js +69 -0
  140. package/dist/deployment/worker/request.d.ts +118 -0
  141. package/dist/deployment/worker/request.js +280 -0
  142. package/dist/deployment/worker/response.d.ts +101 -0
  143. package/dist/deployment/worker/response.js +207 -0
  144. package/dist/execution/identity/authentication.d.ts +33 -3
  145. package/dist/execution/identity/authentication.js +85 -40
  146. package/dist/execution/identity/callback.d.ts +16 -15
  147. package/dist/execution/identity/callback.js +21 -16
  148. package/dist/execution/identity/delivery.d.ts +6 -4
  149. package/dist/execution/identity/delivery.js +25 -20
  150. package/dist/execution/identity/identity.d.ts +17 -3
  151. package/dist/execution/identity/identity.js +12 -4
  152. package/dist/execution/identity/jwks.d.ts +5 -0
  153. package/dist/execution/identity/jwks.js +92 -102
  154. package/dist/execution/index.d.ts +4 -4
  155. package/dist/execution/index.js +2 -2
  156. package/dist/execution/invocation/admission/authentication.d.ts +11 -13
  157. package/dist/execution/invocation/admission/authentication.js +48 -44
  158. package/dist/execution/invocation/admission/authority.d.ts +28 -6
  159. package/dist/execution/invocation/admission/authority.js +9 -2
  160. package/dist/execution/invocation/admission/index.d.ts +2 -2
  161. package/dist/execution/invocation/admission/index.js +1 -1
  162. package/dist/execution/invocation/admission/input.d.ts +2 -2
  163. package/dist/execution/invocation/admission/input.js +16 -2
  164. package/dist/execution/invocation/dependency/bind.d.ts +3 -1
  165. package/dist/execution/invocation/dependency/bind.js +36 -16
  166. package/dist/execution/invocation/dispatch/context.d.ts +7 -6
  167. package/dist/execution/invocation/dispatch/context.js +17 -31
  168. package/dist/execution/invocation/dispatch/workflow.js +0 -4
  169. package/dist/execution/invocation/index.d.ts +2 -2
  170. package/dist/execution/invocation/index.js +1 -1
  171. package/dist/execution/invocation/integration/call.d.ts +2 -1
  172. package/dist/execution/invocation/integration/call.js +1 -1
  173. package/dist/execution/invocation/integration/clients.d.ts +1 -1
  174. package/dist/execution/invocation/invocation.js +49 -16
  175. package/dist/execution/invocation/result/errors.d.ts +0 -10
  176. package/dist/execution/invocation/result/errors.js +0 -17
  177. package/dist/execution/invocation/result/index.d.ts +2 -2
  178. package/dist/execution/invocation/result/index.js +1 -1
  179. package/dist/execution/invocation/result/project.js +41 -1
  180. package/dist/execution/node/serve.d.ts +2 -2
  181. package/dist/execution/node/serve.js +1 -1
  182. package/dist/execution/runtime/index.d.ts +1 -0
  183. package/dist/execution/runtime/index.js +1 -0
  184. package/dist/execution/runtime/load.d.ts +3 -3
  185. package/dist/execution/runtime/load.js +3 -2
  186. package/dist/execution/runtime/release.d.ts +17 -0
  187. package/dist/execution/runtime/release.js +7 -0
  188. package/dist/execution/serve.d.ts +10 -4
  189. package/dist/execution/serve.js +3 -0
  190. package/dist/execution/service/create.js +41 -7
  191. package/dist/execution/service/initialization.d.ts +4 -4
  192. package/dist/execution/service/initialization.js +23 -14
  193. package/dist/execution/service/release.d.ts +2 -2
  194. package/dist/execution/service/release.js +3 -2
  195. package/dist/execution/service/service.d.ts +14 -5
  196. package/dist/execution/service/serving/delivery.d.ts +5 -0
  197. package/dist/execution/service/{publication → serving}/delivery.js +4 -1
  198. package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
  199. package/dist/execution/service/serving/installation.d.ts +4 -0
  200. package/dist/execution/service/serving/installation.js +9 -0
  201. package/dist/execution/service/serving/source.d.ts +11 -0
  202. package/dist/execution/service/serving/source.js +15 -0
  203. package/dist/execution/workflows/discovery.d.ts +14 -0
  204. package/dist/execution/workflows/discovery.js +151 -0
  205. package/dist/execution/workflows/engine.d.ts +52 -0
  206. package/dist/execution/workflows/engine.js +1 -0
  207. package/dist/execution/workflows/envelope.d.ts +12 -0
  208. package/dist/execution/workflows/envelope.js +46 -0
  209. package/dist/execution/workflows/failure.d.ts +11 -0
  210. package/dist/execution/workflows/failure.js +43 -0
  211. package/dist/execution/workflows/index.d.ts +4 -0
  212. package/dist/execution/workflows/index.js +3 -0
  213. package/dist/execution/workflows/options.d.ts +34 -0
  214. package/dist/execution/workflows/options.js +65 -0
  215. package/dist/execution/workflows/receiver.d.ts +21 -0
  216. package/dist/execution/workflows/receiver.js +92 -0
  217. package/dist/execution/workflows/route.d.ts +12 -0
  218. package/dist/execution/workflows/route.js +35 -0
  219. package/dist/execution/workflows/run.d.ts +22 -0
  220. package/dist/execution/workflows/run.js +223 -0
  221. package/dist/index.d.ts +4 -4
  222. package/dist/index.js +2 -2
  223. package/dist/platform/graph/alias.d.ts +1 -5
  224. package/dist/platform/graph/alias.js +1 -5
  225. package/dist/platform/graph/document/index.d.ts +1 -1
  226. package/dist/platform/graph/document/index.js +1 -1
  227. package/dist/platform/graph/index.d.ts +1 -1
  228. package/dist/platform/graph/index.js +1 -1
  229. package/dist/platform/release/index.d.ts +2 -0
  230. package/dist/platform/release/index.js +2 -0
  231. package/dist/platform/schema/callable-authoring.d.ts +21 -0
  232. package/dist/platform/schema/callable-authoring.js +27 -0
  233. package/dist/platform/schema/class-authoring.d.ts +61 -11
  234. package/dist/platform/schema/class-authoring.js +37 -4
  235. package/dist/platform/schema/class-icon-svg.d.ts +9 -0
  236. package/dist/platform/schema/class-icon-svg.js +29 -0
  237. package/dist/platform/schema/class-icon.d.ts +3 -8
  238. package/dist/platform/schema/class-icon.js +2 -29
  239. package/dist/platform/schema/index.d.ts +6 -4
  240. package/dist/platform/schema/index.js +2 -1
  241. package/dist/platform/schema/property.d.ts +5 -0
  242. package/dist/platform/schema/schema-authoring.d.ts +14 -7
  243. package/dist/platform/schema/schema-authoring.js +5 -1
  244. package/dist/platform/versioning/dependents.d.ts +18 -0
  245. package/dist/platform/versioning/dependents.js +15 -0
  246. package/dist/platform/versioning/index.d.ts +5 -0
  247. package/dist/platform/versioning/index.js +5 -0
  248. package/dist/platform/versioning/name.d.ts +38 -0
  249. package/dist/platform/versioning/name.js +58 -0
  250. package/dist/platform/versioning/reference.d.ts +48 -0
  251. package/dist/platform/versioning/reference.js +95 -0
  252. package/dist/platform/versioning/version.d.ts +72 -0
  253. package/dist/platform/versioning/version.js +98 -0
  254. package/dist/project/admit.js +1 -5
  255. package/dist/project/define.d.ts +4 -4
  256. package/dist/project/define.js +55 -35
  257. package/dist/project/index.d.ts +1 -1
  258. package/dist/project/install-command.d.ts +6 -0
  259. package/dist/project/install-command.js +9 -0
  260. package/dist/project/project.d.ts +10 -8
  261. package/dist/testing/dataset/define.d.ts +1 -1
  262. package/dist/testing/load.js +1 -1
  263. package/dist/tooling/cli/adapter-command.d.ts +35 -0
  264. package/dist/tooling/cli/adapter-command.js +66 -0
  265. package/dist/tooling/cli/arguments.d.ts +17 -6
  266. package/dist/tooling/cli/arguments.js +175 -52
  267. package/dist/tooling/cli/build.d.ts +55 -0
  268. package/dist/tooling/cli/build.js +77 -0
  269. package/dist/tooling/cli/bun.d.ts +0 -1
  270. package/dist/tooling/cli/bun.js +0 -7
  271. package/dist/tooling/cli/commit.d.ts +35 -0
  272. package/dist/tooling/cli/commit.js +235 -0
  273. package/dist/tooling/cli/deploy-mode.d.ts +26 -0
  274. package/dist/tooling/cli/deploy-mode.js +59 -0
  275. package/dist/tooling/cli/deploy-result.d.ts +80 -0
  276. package/dist/tooling/cli/deploy-result.js +64 -0
  277. package/dist/tooling/cli/diff/declared.d.ts +7 -0
  278. package/dist/tooling/cli/diff/declared.js +27 -0
  279. package/dist/tooling/cli/diff/index.d.ts +30 -0
  280. package/dist/tooling/cli/diff/index.js +58 -0
  281. package/dist/tooling/cli/diff/render.d.ts +15 -0
  282. package/dist/tooling/cli/diff/render.js +131 -0
  283. package/dist/tooling/cli/diff/report.d.ts +88 -0
  284. package/dist/tooling/cli/diff/report.js +154 -0
  285. package/dist/tooling/cli/dotenv.d.ts +2 -2
  286. package/dist/tooling/cli/dotenv.js +3 -33
  287. package/dist/tooling/cli/help.js +173 -60
  288. package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
  289. package/dist/tooling/cli/immutable-deployment.js +135 -0
  290. package/dist/tooling/cli/index.d.ts +12 -4
  291. package/dist/tooling/cli/index.js +6 -3
  292. package/dist/tooling/cli/installed-on.d.ts +83 -0
  293. package/dist/tooling/cli/installed-on.js +156 -0
  294. package/dist/tooling/cli/list.d.ts +152 -0
  295. package/dist/tooling/cli/list.js +331 -0
  296. package/dist/tooling/cli/log.d.ts +5 -0
  297. package/dist/tooling/cli/log.js +9 -0
  298. package/dist/tooling/cli/orchestrate.d.ts +0 -6
  299. package/dist/tooling/cli/orchestrate.js +246 -90
  300. package/dist/tooling/cli/project.d.ts +3 -3
  301. package/dist/tooling/cli/publish/index.d.ts +81 -0
  302. package/dist/tooling/cli/publish/index.js +383 -0
  303. package/dist/tooling/cli/publish/report.d.ts +49 -0
  304. package/dist/tooling/cli/publish/report.js +15 -0
  305. package/dist/tooling/cli/registry/client.d.ts +121 -0
  306. package/dist/tooling/cli/registry/client.js +354 -0
  307. package/dist/tooling/cli/registry/error.d.ts +11 -0
  308. package/dist/tooling/cli/registry/error.js +17 -0
  309. package/dist/tooling/cli/registry/executable.d.ts +35 -0
  310. package/dist/tooling/cli/registry/executable.js +96 -0
  311. package/dist/tooling/cli/registry/index.d.ts +9 -0
  312. package/dist/tooling/cli/registry/index.js +8 -0
  313. package/dist/tooling/cli/registry/installations.d.ts +67 -0
  314. package/dist/tooling/cli/registry/installations.js +108 -0
  315. package/dist/tooling/cli/registry/process.d.ts +36 -0
  316. package/dist/tooling/cli/registry/process.js +119 -0
  317. package/dist/tooling/cli/secrets.d.ts +9 -0
  318. package/dist/tooling/cli/secrets.js +19 -0
  319. package/dist/tooling/cli/yank.d.ts +34 -0
  320. package/dist/tooling/cli/yank.js +32 -0
  321. package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -1
  322. package/dist/tooling/linter/implementations/source/callable-requirements.js +10 -10
  323. package/dist/tooling/linter/implementations/source/dependencies.js +12 -10
  324. package/dist/tooling/linter/implementations/source/global.js +1 -2
  325. package/dist/tooling/linter/implementations/source/mutations.js +17 -17
  326. package/dist/tooling/linter/implementations/source/providers.js +5 -5
  327. package/dist/tooling/linter/implementations/source/verifiers.js +0 -2
  328. package/dist/tooling/linter/implementations/source/views.js +2 -2
  329. package/dist/tooling/linter/policy/generated.js +14 -63
  330. package/dist/tooling/linter/requirements/registry.js +1 -6
  331. package/dist/tooling/packaging/declarations/ownership.js +1 -1
  332. package/dist/tooling/packaging/finalize.d.ts +1 -1
  333. package/dist/tooling/packaging/finalize.js +1 -1
  334. package/package.json +39 -13
  335. package/dist/application/application.d.ts +0 -28
  336. package/dist/application/query/execution/projection.d.ts +0 -3
  337. package/dist/application/query/execution/projection.js +0 -3
  338. package/dist/deployment/adapter/deploy/context.d.ts +0 -15
  339. package/dist/deployment/adapter/deploy/index.d.ts +0 -2
  340. package/dist/deployment/adapter/deploy/result.d.ts +0 -50
  341. package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
  342. package/dist/deployment/adapter/prepare/context.d.ts +0 -23
  343. package/dist/deployment/adapter/prepare/index.d.ts +0 -2
  344. package/dist/deployment/deploy.d.ts +0 -20
  345. package/dist/deployment/deploy.js +0 -31
  346. package/dist/deployment/release/publication/index.d.ts +0 -6
  347. package/dist/deployment/release/publication/index.js +0 -6
  348. package/dist/deployment/release/publication/manifest.d.ts +0 -3
  349. package/dist/deployment/release/publication/manifest.js +0 -5
  350. package/dist/deployment/release/publication/requirements.d.ts +0 -3
  351. package/dist/deployment/release/publication/requirements.js +0 -3
  352. package/dist/deployment/release/publication/seal.d.ts +0 -10
  353. package/dist/deployment/release/publication/seal.js +0 -39
  354. package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
  355. package/dist/deployment/verify/preflight/artifact.js +0 -122
  356. package/dist/deployment/verify/preflight/publication.d.ts +0 -4
  357. package/dist/deployment/verify/preflight/publication.js +0 -14
  358. package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
  359. package/dist/deployment/verify/readiness/deployment.js +0 -151
  360. package/dist/deployment/verify/readiness/publication.d.ts +0 -11
  361. package/dist/deployment/verify/readiness/publication.js +0 -41
  362. package/dist/execution/service/errors.d.ts +0 -3
  363. package/dist/execution/service/errors.js +0 -3
  364. package/dist/execution/service/publication/delivery.d.ts +0 -2
  365. package/dist/execution/service/publication/installation.d.ts +0 -3
  366. package/dist/execution/service/publication/installation.js +0 -8
  367. package/dist/execution/service/publication/source.d.ts +0 -3
  368. package/dist/execution/service/publication/source.js +0 -11
  369. package/dist/platform/publication/index.d.ts +0 -2
  370. package/dist/platform/publication/index.js +0 -2
  371. package/dist/tooling/cli/astrale/authority.d.ts +0 -5
  372. package/dist/tooling/cli/astrale/authority.js +0 -11
  373. package/dist/tooling/cli/astrale/executable.d.ts +0 -2
  374. package/dist/tooling/cli/astrale/executable.js +0 -47
  375. package/dist/tooling/cli/astrale/failure.d.ts +0 -6
  376. package/dist/tooling/cli/astrale/failure.js +0 -48
  377. package/dist/tooling/cli/astrale/instance.d.ts +0 -11
  378. package/dist/tooling/cli/astrale/instance.js +0 -52
  379. package/dist/tooling/cli/astrale/process.d.ts +0 -13
  380. package/dist/tooling/cli/astrale/process.js +0 -94
  381. package/dist/tooling/cli/astrale/version.d.ts +0 -18
  382. package/dist/tooling/cli/astrale/version.js +0 -55
  383. package/dist/tooling/cli/credential.d.ts +0 -2
  384. package/dist/tooling/cli/credential.js +0 -57
  385. package/dist/tooling/cli/deprecations.d.ts +0 -9
  386. package/dist/tooling/cli/deprecations.js +0 -15
  387. package/dist/tooling/cli/development/candidate.d.ts +0 -25
  388. package/dist/tooling/cli/development/candidate.js +0 -176
  389. package/dist/tooling/cli/development/deployment.d.ts +0 -16
  390. package/dist/tooling/cli/development/deployment.js +0 -39
  391. package/dist/tooling/cli/development/develop.d.ts +0 -11
  392. package/dist/tooling/cli/development/develop.js +0 -243
  393. package/dist/tooling/cli/development/lease.d.ts +0 -18
  394. package/dist/tooling/cli/development/lease.js +0 -163
  395. package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
  396. package/dist/tooling/cli/development/lifecycle.js +0 -43
  397. package/dist/tooling/cli/development/project-imports.d.ts +0 -22
  398. package/dist/tooling/cli/development/project-imports.js +0 -39
  399. package/dist/tooling/cli/development/project-lock.d.ts +0 -16
  400. package/dist/tooling/cli/development/project-lock.js +0 -41
  401. package/dist/tooling/cli/development/rebuild.d.ts +0 -13
  402. package/dist/tooling/cli/development/rebuild.js +0 -58
  403. package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
  404. package/dist/tooling/cli/development/release-evidence.js +0 -10
  405. package/dist/tooling/cli/development/report.d.ts +0 -6
  406. package/dist/tooling/cli/development/report.js +0 -14
  407. package/dist/tooling/cli/development/session-file.d.ts +0 -53
  408. package/dist/tooling/cli/development/session-file.js +0 -337
  409. package/dist/tooling/cli/development/source-watch.d.ts +0 -14
  410. package/dist/tooling/cli/development/source-watch.js +0 -140
  411. package/dist/tooling/cli/development/sources.d.ts +0 -7
  412. package/dist/tooling/cli/development/sources.js +0 -48
  413. package/dist/tooling/cli/development/target-lock.d.ts +0 -16
  414. package/dist/tooling/cli/development/target-lock.js +0 -68
  415. package/dist/tooling/cli/development/view.d.ts +0 -28
  416. package/dist/tooling/cli/development/view.js +0 -151
  417. package/dist/tooling/cli/environment-release.d.ts +0 -21
  418. package/dist/tooling/cli/environment-release.js +0 -46
  419. package/dist/tooling/cli/evidence.d.ts +0 -11
  420. package/dist/tooling/cli/evidence.js +0 -53
  421. package/dist/tooling/cli/installation/index.d.ts +0 -2
  422. package/dist/tooling/cli/installation/index.js +0 -1
  423. package/dist/tooling/cli/installation/observation.d.ts +0 -10
  424. package/dist/tooling/cli/installation/observation.js +0 -44
  425. package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
  426. package/dist/tooling/cli/installation/reconcile.js +0 -122
  427. package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
  428. package/dist/tooling/linter/implementations/source/migrations.js +0 -113
  429. package/dist/tooling/linter/qualification/index.d.ts +0 -10
  430. package/dist/tooling/linter/qualification/index.js +0 -2
  431. package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
  432. package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
  433. package/dist/tooling/linter/qualification/runner.d.ts +0 -3
  434. package/dist/tooling/linter/qualification/runner.js +0 -6
  435. /package/dist/application/{application.js → domain.js} +0 -0
  436. /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
  437. /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
  438. /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
  439. /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
  440. /package/dist/deployment/adapter/{prepare/artifact.js → release/command.js} +0 -0
  441. /package/dist/deployment/adapter/{prepare → release}/context.js +0 -0
  442. /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
  443. /package/dist/deployment/release/{publication → served}/routes.js +0 -0
  444. /package/dist/execution/service/{publication → serving}/index.js +0 -0
@@ -0,0 +1,87 @@
1
+ import type { IssuerId } from '../../platform/auth/index.js';
2
+ import type { BoundClientSession, ExecutionOutcome, ExecutionRef } from '../../platform/client/session/index.js';
3
+ import type { NodeId } from '../../platform/graph/node/index.js';
4
+ import type { CallableInputOf, Domain, ResolvedMethod } from '../../platform/schema/index.js';
5
+ import type { Value } from '../../platform/value/index.js';
6
+ import type { DeclaredErrorFactory, DeclaredErrors, NoDeclaredErrors } from '../error/index.js';
7
+ import type { Mutation, MutationExecutor } from '../mutation/index.js';
8
+ import type { QueryExecutor } from '../query/index.js';
9
+ /** A callable whose Schema declares `execution: { durable: true }`. */
10
+ export interface DurableCallable {
11
+ readonly execution: {
12
+ readonly durable: true;
13
+ };
14
+ }
15
+ /** Attested facts of the running Execution. They are data, never authority. */
16
+ export interface DurableExecution {
17
+ /** The `K.Execution` node recording this call. */
18
+ readonly id: NodeId;
19
+ readonly function: {
20
+ readonly id: NodeId;
21
+ readonly version: `sha256:${string}`;
22
+ };
23
+ /** Kernel that recorded the Execution; every Step calls it back as the Domain. */
24
+ readonly kernel: IssuerId;
25
+ /** Who started the Execution. The Workflow never receives their credential. */
26
+ readonly initiator: {
27
+ readonly principal: NodeId;
28
+ readonly caller: NodeId;
29
+ };
30
+ /** Receiver of a durable instance Method. */
31
+ readonly receiver?: NodeId;
32
+ }
33
+ /**
34
+ * The Domain's own authority inside one Step. Kernel access exists only here, so every Kernel call
35
+ * belongs to a journaled Step and a replay never repeats it.
36
+ */
37
+ export interface DurableStepAuthority<DomainValue extends Domain = Domain> {
38
+ /**
39
+ * Kernel Session acting as the Domain. Each `invoke` of a durable callable without an explicit
40
+ * `idempotencyKey` carries one derived from the Execution, the Step and its position, so a
41
+ * retried Step reaches the same durable child Execution. An `invoke` of any other callable
42
+ * carries no key, which the Kernel would refuse, and runs again when the Step is retried.
43
+ */
44
+ readonly kernel: BoundClientSession;
45
+ readonly query: QueryExecutor<DomainValue>;
46
+ /**
47
+ * Each Mutation carries a key derived from the Execution, the Step and its position. The Kernel
48
+ * commits a receipt with the write and answers a retried Step with its first result.
49
+ */
50
+ readonly mutate: MutationExecutor<DomainValue>;
51
+ }
52
+ export interface DurableStep<DomainValue extends Domain = Domain> {
53
+ /**
54
+ * Run `execute` once and journal its portable output; a replay returns the journaled output. A
55
+ * Step may run again when its outcome was not journaled: its Mutations and durable calls are
56
+ * answered from their keys, and any other effect must be idempotent.
57
+ */
58
+ run<Output>(id: string, execute: (authority: DurableStepAuthority<DomainValue>) => Output | Promise<Output>): Promise<Output>;
59
+ /**
60
+ * One journaled Mutation. A Step replayed after its commit receives the result of that commit
61
+ * from the Kernel's receipt instead of writing again.
62
+ */
63
+ mutate<Input, Output>(id: string, mutation: Mutation<DomainValue, Input, Output>, input: Input): Promise<Output>;
64
+ }
65
+ type DurableSelfOf<Callable> = Callable extends ResolvedMethod<unknown, unknown, false> ? {
66
+ readonly self: NodeId;
67
+ } : {
68
+ readonly self?: never;
69
+ };
70
+ /** Context of a durable Workflow: engine-journaled, acting as its Domain. */
71
+ export type DurableWorkflowContext<Callable, DomainValue extends Domain = Domain, Errors extends DeclaredErrors = NoDeclaredErrors> = {
72
+ readonly domain: DomainValue;
73
+ readonly input: CallableInputOf<Callable>;
74
+ readonly execution: DurableExecution;
75
+ /** Construct one implementation-declared safe business error for `throw error(...)`. */
76
+ readonly error: DeclaredErrorFactory<Errors>;
77
+ readonly step: DurableStep<DomainValue>;
78
+ /** Durable timer kept by the engine, even while the Domain is idle or down. */
79
+ sleep(durationMs: number): Promise<void>;
80
+ /** Resolve once `Execution.signal({ name, value })` delivers `name`, before or during the wait. */
81
+ promise<Signal extends Value = Value>(name: string): Promise<Signal>;
82
+ /** Whether `error` is the engine's cooperative cancellation, which the Workflow may compensate. */
83
+ cancelled(error: unknown): boolean;
84
+ /** Wait durably for another Execution to end, by journaled polling of its `result`. */
85
+ awaitExecution<Output>(execution: ExecutionRef<Output>): Promise<ExecutionOutcome<Output>>;
86
+ } & DurableSelfOf<Callable>;
87
+ export {};
@@ -1,6 +1,7 @@
1
1
  export { defineWorkflow, isWorkflow } from './define.js';
2
- export type { WorkflowContext } from './context.js';
3
- export type { CallableAtWorkflowAddress, Workflow, WorkflowAddress, WorkflowCallable, WorkflowDefinition, } from './workflow.js';
2
+ export type { InlineWorkflowContext, WorkflowContext } from './context.js';
3
+ export type { DurableCallable, DurableExecution, DurableStep, DurableStepAuthority, DurableWorkflowContext, } from './durable.js';
4
+ export type { CallableAtWorkflowAddress, Workflow, WorkflowAddress, WorkflowCallable, WorkflowDefinition, WorkflowOptions, } from './workflow.js';
4
5
  export * as step from './step/index.js';
5
6
  export * as runner from './runner/index.js';
6
7
  export type { DeclaredErrorDefinition, DeclaredErrorFactory, DeclaredErrorFamily, DeclaredErrorOptions, DeclaredErrors, } from '../error/index.js';
@@ -1,11 +1,12 @@
1
- import * as value from '../../../platform/value/index.js';
2
1
  import { acceptStepId } from '../step/index.js';
2
+ import { acceptStepOutput } from '../step/output.js';
3
3
  /** Process-local runner for tests and explicitly non-durable embeddings. */
4
4
  export function createInlineWorkflowRunner() {
5
5
  async function run(workflow, context) {
6
6
  const execution = createInlineStep(context.execution.signal);
7
7
  const complete = Object.freeze({ ...context, step: execution.step });
8
8
  try {
9
+ // Runtime dispatches only non-durable Workflows inline; durable ones run on the engine.
9
10
  return await workflow.run(complete);
10
11
  }
11
12
  finally {
@@ -37,10 +38,8 @@ function createInlineStep(signal) {
37
38
  started.add(accepted);
38
39
  execution = (async () => {
39
40
  const output = await execute();
40
- if (output === undefined)
41
- return output;
42
41
  try {
43
- return value.accept(output);
42
+ return acceptStepOutput(output);
44
43
  }
45
44
  catch (cause) {
46
45
  throw new TypeError(`Workflow Step ${accepted} output must be portable.`, {
@@ -2,9 +2,9 @@ import type { Domain, schema } from '../../../platform/schema/index.js';
2
2
  import type { ActionOutputOf, ResolvedCallable, ResolvedDomainOf } from '../../action/index.js';
3
3
  import type { DeclaredErrors, NoDeclaredErrors } from '../../error/index.js';
4
4
  import type { Integrations } from '../../integration/index.js';
5
- import type { WorkflowContext } from '../context.js';
5
+ import type { InlineWorkflowContext } from '../context.js';
6
6
  import type { CallableAtWorkflowAddress, WorkflowAddress, WorkflowDefinition } from '../workflow.js';
7
- export type WorkflowExecutionContext<Callable extends ResolvedCallable, Definitions extends Integrations, DomainValue extends Domain = Domain, Errors extends DeclaredErrors = NoDeclaredErrors> = Omit<WorkflowContext<Callable, DomainValue, Definitions, Errors>, 'step'>;
7
+ export type WorkflowExecutionContext<Callable extends ResolvedCallable, Definitions extends Integrations, DomainValue extends Domain = Domain, Errors extends DeclaredErrors = NoDeclaredErrors> = Omit<InlineWorkflowContext<Callable, DomainValue, Definitions, Errors>, 'step'>;
8
8
  export interface WorkflowRunner {
9
9
  run<Schema extends schema.DomainSchema, Address extends WorkflowAddress<Schema>, Definitions extends Integrations, Errors extends DeclaredErrors, Callable extends CallableAtWorkflowAddress<Schema, Address> = CallableAtWorkflowAddress<Schema, Address>>(workflow: WorkflowDefinition<Schema, Address, Definitions, Errors>, context: WorkflowExecutionContext<Callable, Definitions, ResolvedDomainOf<Schema>, Errors>): Promise<ActionOutputOf<Callable>>;
10
10
  }
@@ -0,0 +1,2 @@
1
+ /** Capture optional Object fields as absence without changing portable Array or scalar semantics. */
2
+ export declare function acceptStepOutput<Output>(input: Output): Output;
@@ -0,0 +1,73 @@
1
+ import * as value from '../../../platform/value/index.js';
2
+ /** Capture optional Object fields as absence without changing portable Array or scalar semantics. */
3
+ export function acceptStepOutput(input) {
4
+ if (input === undefined)
5
+ return input;
6
+ const captured = new WeakMap();
7
+ const omitted = new WeakMap();
8
+ const pending = [];
9
+ let members = 0;
10
+ function capture(source, depth) {
11
+ if (source === null || typeof source !== 'object')
12
+ return source;
13
+ const retained = captured.get(source);
14
+ if (retained !== undefined)
15
+ return retained;
16
+ if (depth >= value.defaultLimits.maxDepth) {
17
+ throw new value.BoundaryError('VALUE_LIMIT', 'Workflow Step container depth exceeds the portable limit', '');
18
+ }
19
+ const array = Array.isArray(source);
20
+ const snapshot = array ? [] : Object.create(Object.getPrototypeOf(source));
21
+ captured.set(source, snapshot);
22
+ pending.push({ source, snapshot, depth, array });
23
+ return snapshot;
24
+ }
25
+ const snapshot = capture(input, 0);
26
+ for (let index = 0; index < pending.length; index += 1) {
27
+ const { source, snapshot: container, depth, array } = pending[index];
28
+ const descriptors = Object.getOwnPropertyDescriptors(source);
29
+ const keys = Reflect.ownKeys(descriptors);
30
+ // Bound this preparatory capture too; canonical admission subsequently checks each path.
31
+ members += keys.length - (array ? 1 : 0);
32
+ if (members > value.defaultLimits.maxMembers) {
33
+ throw new value.BoundaryError('VALUE_LIMIT', 'Workflow Step member count exceeds the portable limit', '');
34
+ }
35
+ const absent = new Set();
36
+ for (const key of keys) {
37
+ const descriptor = Object.getOwnPropertyDescriptor(descriptors, key)
38
+ .value;
39
+ if ('value' in descriptor) {
40
+ if (!array &&
41
+ typeof key === 'string' &&
42
+ descriptor.enumerable &&
43
+ descriptor.value === undefined) {
44
+ // Validate this member's key, descriptor and budget before interpreting its absence.
45
+ descriptor.value = null;
46
+ absent.add(key);
47
+ }
48
+ else {
49
+ descriptor.value = capture(descriptor.value, depth + 1);
50
+ }
51
+ }
52
+ Object.defineProperty(container, key, descriptor);
53
+ }
54
+ if (absent.size > 0)
55
+ omitted.set(container, absent);
56
+ }
57
+ // The canonical owner still rejects cycles, invalid descriptors/prototypes/keys and lossy values.
58
+ const output = value.accept(snapshot);
59
+ const pruning = [{ snapshot, output }];
60
+ for (let index = 0; index < pruning.length; index += 1) {
61
+ const pair = pruning[index];
62
+ if (pair.output === null || typeof pair.output !== 'object')
63
+ continue;
64
+ const source = pair.snapshot;
65
+ const target = pair.output;
66
+ for (const key of omitted.get(source) ?? [])
67
+ delete target[key];
68
+ for (const key of Object.keys(target)) {
69
+ pruning.push({ snapshot: source[key], output: target[key] });
70
+ }
71
+ }
72
+ return output;
73
+ }
@@ -3,20 +3,30 @@ import type { ActionAddressOf, ActionOutputOf, CallableAtAddress, LocalCallable,
3
3
  import type { DeclaredErrors, NoDeclaredErrors } from '../error/index.js';
4
4
  import type { Integrations } from '../integration/index.js';
5
5
  import type { WorkflowContext } from './context.js';
6
- export type WorkflowCallable<Callable> = Callable extends ResolvedCallable ? Callable extends {
7
- readonly auth: 'anonymous';
8
- } ? never : CallableOutputOf<Callable> extends {
6
+ export type WorkflowCallable<Callable> = Callable extends ResolvedCallable ? CallableOutputOf<Callable> extends {
9
7
  readonly mode: 'value';
10
8
  } ? Callable : never : never;
11
9
  export type WorkflowAddress<Schema extends schema.DomainSchema> = ActionAddressOf<WorkflowCallable<LocalCallable<ResolvedDomainOf<Schema>>>>;
12
10
  export type CallableAtWorkflowAddress<Schema extends schema.DomainSchema, Address extends WorkflowAddress<Schema>> = WorkflowCallable<Extract<CallableAtAddress<Schema, Address>, ResolvedCallable>>;
13
11
  export type Workflow<Callable extends ResolvedCallable, Definitions extends Integrations = Readonly<Record<never, never>>, DomainValue extends Domain = Domain, Errors extends DeclaredErrors = NoDeclaredErrors> = (context: WorkflowContext<Callable, DomainValue, Definitions, Errors>) => Promise<ActionOutputOf<Callable>>;
14
12
  declare const WORKFLOW_SCHEMA: unique symbol;
13
+ /** Options of one Workflow implementation. */
14
+ export interface WorkflowOptions<out Errors extends DeclaredErrors = DeclaredErrors> {
15
+ readonly errors?: Errors;
16
+ /**
17
+ * Durable only. Compatibility token journaled first by every run: keep it while a redeployment
18
+ * can replay the journals of running Executions, change it when it cannot, and those runs pause
19
+ * until they are resumed on compatible code or cancelled.
20
+ */
21
+ readonly compat?: string;
22
+ }
15
23
  /** Sealed multi-step Workflow awaiting canonical callable association by Runtime admission. */
16
24
  export interface WorkflowDefinition<Schema extends schema.DomainSchema = schema.DomainSchema, Address extends WorkflowAddress<Schema> = WorkflowAddress<Schema>, Definitions extends Integrations = Readonly<Record<never, never>>, Errors extends DeclaredErrors = NoDeclaredErrors> {
17
25
  readonly kind: 'workflow';
18
26
  readonly address: Address;
19
27
  readonly run: Workflow<CallableAtWorkflowAddress<Schema, Address>, Definitions, ResolvedDomainOf<Schema>, Errors>;
28
+ /** Durable compatibility token; absent means the default token. */
29
+ readonly compat?: string;
20
30
  /** Invariant type-only Schema witness; absent from emitted JavaScript. */
21
31
  readonly [WORKFLOW_SCHEMA]: (schema: Schema) => Schema;
22
32
  }
@@ -1,27 +1,69 @@
1
- import type { DeployContext, DeployResult } from './deploy/index.js';
2
- import type { ArtifactSource, PrepareContext } from './prepare/index.js';
3
- export interface InstallationTarget {
4
- readonly instance: string;
5
- readonly identity?: string;
6
- }
1
+ import type { DeploymentConfiguration } from '../address/index.js';
2
+ import type { Bundler } from './bundle/index.js';
3
+ import type { AdapterCommand, ConfigureContext, ListContext, ListedDeployment, Placement, PlacementContext, ReleaseDeployContext, ReleaseDeployResult, RetainContext } from './release/index.js';
4
+ /** What `admit` receives when `defineProject` binds an adapter to one Environment. */
7
5
  export interface AdapterEnvironmentContext {
8
6
  readonly environment: string;
9
- readonly installation?: InstallationTarget;
10
7
  }
8
+ /**
9
+ * A provider adapter (adapter interface v2). It bundles a Build without any Environment, freezes
10
+ * an Environment's configuration, says where the host places that Environment's deployments, and
11
+ * deploys one sealed release as one immutable deployment, created or reused. It never installs:
12
+ * `astrale domain install <url>` installs a deployment by its URL.
13
+ *
14
+ */
11
15
  export interface Adapter<Parameters extends object = object> {
12
16
  readonly kind: 'adapter';
13
17
  readonly name: string;
14
18
  readonly version: string;
19
+ /**
20
+ * Produces the environment-free bytes `astrale-domain build` identifies by their build digest
21
+ * and `deployRelease` receives as its Bundle. Adapters that share one bundler share one build.
22
+ */
23
+ readonly bundler: Bundler;
24
+ /** Refuse parameters that cannot serve this Environment, before any effect. */
15
25
  admit?(parameters: Parameters, context: AdapterEnvironmentContext): void;
16
- prepare(parameters: Parameters, context: PrepareContext): Promise<ArtifactSource>;
17
- deploy(parameters: Parameters, context: DeployContext): Promise<DeployResult>;
18
- readonly secretsFile?: (parameters: Parameters) => string | undefined;
26
+ /**
27
+ * Freeze what a deployment of this Environment binds beside its build: a `FrozenConfigurationV1`
28
+ * for a host that binds a generated Worker's settings itself, a `WorkerConfigurationV1` for a
29
+ * Worker host that binds only what it is asked (Admin's Services). Pure.
30
+ */
31
+ configure(parameters: Parameters, context: ConfigureContext): DeploymentConfiguration;
32
+ /** Where the host places this Environment's deployments. No effect at the host. */
33
+ placement(parameters: Parameters, context: PlacementContext): Promise<Placement>;
34
+ /** Create, or reuse, the immutable deployment of one sealed release. */
35
+ deployRelease(parameters: Parameters, context: ReleaseDeployContext): Promise<ReleaseDeployResult>;
36
+ /**
37
+ * The deployments of one Environment of one origin the host keeps for the caller, each with
38
+ * where it is called. No effect at the host.
39
+ */
40
+ list?(parameters: Parameters, context: ListContext): Promise<readonly ListedDeployment[]>;
41
+ /**
42
+ * Keep one published deployment where the host has no registry principal to mark it (a platform
43
+ * namespace). Called only after its registry publication commits. Rejects with a `RetainRefusal` when the
44
+ * host can no longer keep it (absent or retired), which no rerun changes; any other rejection is
45
+ * transient. Absent: the registry marks it (Admin's Services).
46
+ */
47
+ retain?(parameters: Parameters, context: RetainContext): Promise<void>;
48
+ /**
49
+ * Provider commands, by name: `astrale-domain <adapter name> <command> <environment>` runs one
50
+ * on an Environment this adapter deploys (adapter-cloudflare's `plan` and `init` provision the
51
+ * host on the operator's own account). Every effect is the adapter's; the CLI only routes.
52
+ */
53
+ readonly commands?: Readonly<Record<string, AdapterCommand<Parameters>>>;
54
+ secretsFile?(parameters: Parameters): string | undefined;
19
55
  }
56
+ /** What `defineAdapter` admits for an `Adapter` (adapter interface v2). */
20
57
  export interface AdapterInput<Parameters extends object> {
21
58
  readonly name: string;
22
59
  readonly version: string;
60
+ readonly bundler: Bundler;
23
61
  admit?(parameters: Parameters, context: AdapterEnvironmentContext): void;
24
- prepare(parameters: Parameters, context: PrepareContext): Promise<ArtifactSource>;
25
- deploy(parameters: Parameters, context: DeployContext): Promise<DeployResult>;
26
- readonly secretsFile?: (parameters: Parameters) => string | undefined;
62
+ configure(parameters: Parameters, context: ConfigureContext): DeploymentConfiguration;
63
+ placement(parameters: Parameters, context: PlacementContext): Promise<Placement>;
64
+ deployRelease(parameters: Parameters, context: ReleaseDeployContext): Promise<ReleaseDeployResult>;
65
+ list?(parameters: Parameters, context: ListContext): Promise<readonly ListedDeployment[]>;
66
+ retain?(parameters: Parameters, context: RetainContext): Promise<void>;
67
+ readonly commands?: Readonly<Record<string, AdapterCommand<Parameters>>>;
68
+ secretsFile?(parameters: Parameters): string | undefined;
27
69
  }
@@ -0,0 +1,36 @@
1
+ import type { Build, BuildDigest, BuildManifestV1 } from '../../build/index.js';
2
+ import type { ResolvedRuntimeReference } from '../../runtime/index.js';
3
+ import type { ArtifactFile, PreparedArtifactFile } from './file.js';
4
+ /**
5
+ * Produces the environment-free bytes of one Build. It takes no Environment, address, key or
6
+ * secret, which is what makes its build digest identical in every Environment. Adapters that share
7
+ * a bundler share their build.
8
+ */
9
+ export interface Bundler {
10
+ readonly id: string;
11
+ readonly version: string;
12
+ bundle(context: BundleContext): Promise<BundleSource>;
13
+ }
14
+ export interface BundleContext<BuildValue extends Build = Build> {
15
+ readonly projectDir: string;
16
+ readonly build: BuildValue;
17
+ readonly runtime: ResolvedRuntimeReference;
18
+ /** Parent-owned lifecycle cancellation shared by every bundling process. */
19
+ readonly signal: AbortSignal;
20
+ /** Optional observer of authored paths read outside the Domain/Runtime module graph. */
21
+ readonly recordSource?: (path: string) => void;
22
+ }
23
+ /** Untrusted bundler output admitted by verify/preflight. */
24
+ export interface BundleSource {
25
+ readonly entrypoint: string;
26
+ readonly files: readonly ArtifactFile[];
27
+ }
28
+ /** Exact environment-free bytes of one Build, identified by their build digest. */
29
+ export interface Bundle<BuildValue extends Build = Build> {
30
+ readonly kind: 'bundle';
31
+ readonly build: BuildValue;
32
+ readonly manifest: BuildManifestV1;
33
+ readonly digest: BuildDigest;
34
+ readonly entrypoint: string;
35
+ readonly files: readonly PreparedArtifactFile[];
36
+ }
@@ -0,0 +1,10 @@
1
+ /** One file a bundler produced, before admission. */
2
+ export interface ArtifactFile {
3
+ readonly path: string;
4
+ readonly content: Uint8Array;
5
+ }
6
+ /** One admitted file: a detached copy of its bytes on every read. */
7
+ export interface PreparedArtifactFile {
8
+ readonly path: string;
9
+ bytes(): Uint8Array;
10
+ }
@@ -0,0 +1,2 @@
1
+ export type { Bundle, BundleContext, BundleSource, Bundler } from './bundle.js';
2
+ export type { ArtifactFile, PreparedArtifactFile } from './file.js';
@@ -1,7 +1,8 @@
1
1
  import type { Deployment } from '../deployment.js';
2
2
  import type { Adapter, AdapterInput } from './adapter.js';
3
- /** Capture one receiver-bound provider adapter. */
3
+ /** Capture one receiver-bound adapter that deploys immutable DomainRelease v4 deployments. */
4
4
  export declare function defineAdapter<Parameters extends object>(input: AdapterInput<Parameters>): Adapter<Parameters>;
5
- /** Bind one provider adapter to the parameters of one Project Environment. */
6
- export declare function defineDeployment<const Parameters extends object>(adapter: Adapter<Parameters>, parameters: Parameters): Deployment<Parameters>;
5
+ /** Bind one admitted adapter to the parameters of one Project Environment. */
6
+ export declare function defineDeployment<const Parameters extends object>(adapter: Adapter<Parameters>, parameters: Parameters): Deployment<Parameters, Adapter<Parameters>>;
7
+ /** Whether defineAdapter admitted this immutable-deployment adapter. */
7
8
  export declare function isAdapter(input: unknown): input is Adapter;
@@ -1,29 +1,53 @@
1
1
  import { captureDeployment } from '../deployment.js';
2
2
  const admittedAdapters = new WeakSet();
3
- /** Capture one receiver-bound provider adapter. */
3
+ const admittedBundlers = new WeakMap();
4
+ /** Every field an immutable-deployment adapter may declare. */
5
+ const FIELDS = [
6
+ 'name',
7
+ 'version',
8
+ 'bundler',
9
+ 'admit',
10
+ 'configure',
11
+ 'placement',
12
+ 'deployRelease',
13
+ 'list',
14
+ 'retain',
15
+ 'commands',
16
+ 'secretsFile',
17
+ ];
18
+ const RELEASE_OPERATIONS = ['configure', 'placement', 'deployRelease'];
19
+ const OPERATIONS = ['admit', ...RELEASE_OPERATIONS, 'list', 'retain', 'secretsFile'];
20
+ const COMMAND_NAME = /^[a-z][a-z0-9-]{0,31}$/u;
21
+ /** Capture one receiver-bound adapter that deploys immutable DomainRelease v4 deployments. */
4
22
  export function defineAdapter(input) {
5
23
  const value = record(input, 'Adapter definition');
6
- exact(value, ['name', 'version', 'prepare', 'deploy'], ['admit', 'secretsFile']);
24
+ if (Reflect.ownKeys(value).some((key) => !FIELDS.includes(key))) {
25
+ invalidFields();
26
+ }
7
27
  const name = stableName(input.name);
8
28
  const version = stableName(input.version);
29
+ const missing = RELEASE_OPERATIONS.filter((key) => value[key] === undefined);
30
+ if (missing.length > 0) {
31
+ throw new TypeError(`Adapter ${name} must declare ${missing.join(', ')} to deploy immutable releases.`);
32
+ }
33
+ if (value.bundler === undefined)
34
+ missingBundler(name);
35
+ const bundler = admitBundler(input.bundler);
9
36
  const receiver = Object.freeze({ ...input });
10
- const admit = optional(receiver, 'admit');
11
- const prepare = capture(receiver, 'prepare');
12
- const deploy = capture(receiver, 'deploy');
13
- const secretsFile = optional(receiver, 'secretsFile');
37
+ const operations = Object.fromEntries(OPERATIONS.filter((key) => RELEASE_OPERATIONS.includes(key) ||
38
+ value[key] !== undefined).map((key) => [key, capture(receiver, key)]));
14
39
  const adapter = Object.freeze({
15
40
  kind: 'adapter',
16
41
  name,
17
42
  version,
18
- ...(admit === undefined ? {} : { admit }),
19
- prepare,
20
- deploy,
21
- ...(secretsFile === undefined ? {} : { secretsFile }),
43
+ bundler,
44
+ ...operations,
45
+ ...(value.commands === undefined ? {} : { commands: admitCommands(name, value.commands) }),
22
46
  });
23
47
  admittedAdapters.add(adapter);
24
48
  return adapter;
25
49
  }
26
- /** Bind one provider adapter to the parameters of one Project Environment. */
50
+ /** Bind one admitted adapter to the parameters of one Project Environment. */
27
51
  export function defineDeployment(adapter, parameters) {
28
52
  if (!isAdapter(adapter))
29
53
  throw new TypeError('Deployment Adapter is not admitted.');
@@ -32,12 +56,39 @@ export function defineDeployment(adapter, parameters) {
32
56
  }
33
57
  return captureDeployment(adapter, Object.freeze({ ...parameters }));
34
58
  }
59
+ /** Whether defineAdapter admitted this immutable-deployment adapter. */
35
60
  export function isAdapter(input) {
36
61
  return input !== null && typeof input === 'object' && admittedAdapters.has(input);
37
62
  }
38
- function stableName(input) {
63
+ /**
64
+ * Capture one receiver-bound bundler; its id and version name the bytes it produces. Adapters that
65
+ * declare one bundler object receive one admitted Bundler, so `astrale-domain build` bundles once
66
+ * for all of them.
67
+ */
68
+ function admitBundler(input) {
69
+ const value = record(input, 'Bundler');
70
+ if (Reflect.ownKeys(value).some((key) => key !== 'id' && key !== 'version' && key !== 'bundle') ||
71
+ typeof input.bundle !== 'function') {
72
+ throw new TypeError('Bundler must declare exactly id, version and bundle.');
73
+ }
74
+ const admitted = admittedBundlers.get(value);
75
+ if (admitted !== undefined &&
76
+ admitted.declared === input.bundle &&
77
+ admitted.bundler.id === input.id &&
78
+ admitted.bundler.version === input.version) {
79
+ return admitted.bundler;
80
+ }
81
+ const bundler = Object.freeze({
82
+ id: stableName(input.id, 'Bundler id'),
83
+ version: stableName(input.version, 'Bundler version'),
84
+ bundle: input.bundle.bind(input),
85
+ });
86
+ admittedBundlers.set(value, { declared: input.bundle, bundler });
87
+ return bundler;
88
+ }
89
+ function stableName(input, label = 'Adapter name') {
39
90
  if (typeof input !== 'string' || input.length === 0 || input.trim() !== input) {
40
- throw new TypeError('Adapter name must be a non-empty stable string.');
91
+ throw new TypeError(`${label} must be a non-empty stable string.`);
41
92
  }
42
93
  return input;
43
94
  }
@@ -47,20 +98,53 @@ function record(input, label) {
47
98
  }
48
99
  return input;
49
100
  }
50
- function exact(input, required, optional) {
51
- const allowed = new Set([...required, ...optional]);
52
- if (required.some((key) => !Object.hasOwn(input, key)) ||
53
- Reflect.ownKeys(input).some((key) => !allowed.has(key))) {
54
- throw new TypeError('Adapter definition contains missing or unknown fields.');
101
+ /** Every adapter declares the bundler of the bytes it deploys. */
102
+ function missingBundler(name) {
103
+ throw new TypeError(`Adapter ${name} declares no bundler. ` +
104
+ 'Every adapter declares `bundler`: the bundler of the environment-free bytes ' +
105
+ '`astrale-domain build` identifies by their build digest and `astrale-domain deploy` hands ' +
106
+ 'to the adapter as its Bundle (a Cloudflare Worker adapter declares ' +
107
+ '`cloudflareWorkerBundler` from `@astrale-os/adapter-cloudflare/build`).');
108
+ }
109
+ /**
110
+ * Capture the provider commands of one adapter: each a lower-case name, a one-line `summary`,
111
+ * optional `options` (name to one line of help) and a receiver-bound `run`.
112
+ */
113
+ function admitCommands(adapter, input) {
114
+ const commands = record(input, `Adapter ${adapter} commands`);
115
+ const admitted = {};
116
+ for (const name of Reflect.ownKeys(commands)) {
117
+ if (typeof name !== 'string' || !COMMAND_NAME.test(name)) {
118
+ throw new TypeError(`Adapter ${adapter} declares an invalid command name.`);
119
+ }
120
+ const command = record(commands[name], `Adapter ${adapter} command ${name}`);
121
+ const options = command.options === undefined ? {} : record(command.options, 'Command options');
122
+ if (Reflect.ownKeys(command).some((key) => key !== 'summary' && key !== 'options' && key !== 'run') ||
123
+ typeof command.summary !== 'string' ||
124
+ command.summary.length === 0 ||
125
+ typeof command.run !== 'function' ||
126
+ Reflect.ownKeys(options).some((key) => typeof key !== 'string' ||
127
+ !COMMAND_NAME.test(key) ||
128
+ key === 'json' ||
129
+ typeof options[key] !== 'string')) {
130
+ throw new TypeError(`Adapter ${adapter} command ${name} must declare a summary, string options other than ` +
131
+ 'json and run.');
132
+ }
133
+ admitted[name] = Object.freeze({
134
+ summary: command.summary,
135
+ options: Object.freeze({ ...options }),
136
+ run: command.run.bind(command),
137
+ });
55
138
  }
139
+ return Object.freeze(admitted);
140
+ }
141
+ function invalidFields() {
142
+ throw new TypeError('Adapter definition contains missing or unknown fields.');
56
143
  }
57
144
  function capture(receiver, key) {
58
- const method = receiver[key];
145
+ const method = Reflect.get(receiver, key);
59
146
  if (typeof method !== 'function') {
60
- throw new TypeError(`Adapter ${String(key)} operation is invalid.`);
147
+ throw new TypeError(`Adapter ${key} operation is invalid.`);
61
148
  }
62
149
  return method.bind(receiver);
63
150
  }
64
- function optional(receiver, key) {
65
- return receiver[key] === undefined ? undefined : capture(receiver, key);
66
- }
@@ -1,4 +1,5 @@
1
- export type { Adapter, AdapterEnvironmentContext, AdapterInput, InstallationTarget, } from './adapter.js';
1
+ export type { Adapter, AdapterEnvironmentContext, AdapterInput } from './adapter.js';
2
2
  export { defineAdapter, defineDeployment, isAdapter } from './define.js';
3
- export type * from './prepare/index.js';
4
- export type * from './deploy/index.js';
3
+ export { RetainRefusal } from './release/refusal.js';
4
+ export type * from './bundle/index.js';
5
+ export type * from './release/index.js';
@@ -1 +1,2 @@
1
1
  export { defineAdapter, defineDeployment, isAdapter } from './define.js';
2
+ export { RetainRefusal } from './release/refusal.js';
@@ -0,0 +1,33 @@
1
+ /**
2
+ * One command an adapter declares for its provider (`astrale-domain <adapter> <command>
3
+ * <environment>`), such as adapter-cloudflare's `plan` and `init`, which provision the host on the
4
+ * operator's own account. The CLI only routes: it loads the Project, selects the Environment, checks
5
+ * that its adapter is the one named and declares the command, and admits the options the command
6
+ * declares; everything the command does is the adapter's.
7
+ */
8
+ export interface AdapterCommand<Parameters extends object = object> {
9
+ /** One line: what the command does, for help. */
10
+ readonly summary: string;
11
+ /** The options it takes, `--<name> <value>`, each with one line of help. */
12
+ readonly options?: Readonly<Record<string, string>>;
13
+ run(parameters: Parameters, context: AdapterCommandContext): Promise<AdapterCommandResult>;
14
+ }
15
+ /** What an adapter command receives. */
16
+ export interface AdapterCommandContext {
17
+ readonly environment: string;
18
+ /** Parent-owned lifecycle cancellation. */
19
+ readonly signal: AbortSignal;
20
+ /** The options given, each one the command declares. */
21
+ readonly options: Readonly<Record<string, string>>;
22
+ }
23
+ /** What an adapter command answers; a command that cannot run rejects instead. */
24
+ export interface AdapterCommandResult {
25
+ /** 0 done; 1 refused or blocked (the command ran, and says why in `warnings`). */
26
+ readonly exitCode: 0 | 1;
27
+ /** Lines for a person, printed on stdout without `--json`. */
28
+ readonly lines: readonly string[];
29
+ /** Lines for stderr, printed in either case. */
30
+ readonly warnings?: readonly string[];
31
+ /** The JSON-serializable result `--json` prints. */
32
+ readonly result: unknown;
33
+ }