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

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 (514) 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 +185 -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/discovery.d.ts +14 -0
  243. package/dist/execution/workflows/discovery.js +151 -0
  244. package/dist/execution/workflows/engine.d.ts +89 -0
  245. package/dist/execution/workflows/engine.js +1 -0
  246. package/dist/execution/workflows/envelope.d.ts +12 -0
  247. package/dist/execution/workflows/envelope.js +46 -0
  248. package/dist/execution/workflows/failure.d.ts +46 -0
  249. package/dist/execution/workflows/failure.js +160 -0
  250. package/dist/execution/workflows/index.d.ts +4 -0
  251. package/dist/execution/workflows/index.js +3 -0
  252. package/dist/execution/workflows/integrations.d.ts +13 -0
  253. package/dist/execution/workflows/integrations.js +25 -0
  254. package/dist/execution/workflows/options.d.ts +66 -0
  255. package/dist/execution/workflows/options.js +148 -0
  256. package/dist/execution/workflows/receiver.d.ts +24 -0
  257. package/dist/execution/workflows/receiver.js +99 -0
  258. package/dist/execution/workflows/route.d.ts +12 -0
  259. package/dist/execution/workflows/route.js +35 -0
  260. package/dist/execution/workflows/run.d.ts +21 -0
  261. package/dist/execution/workflows/run.js +321 -0
  262. package/dist/execution/workflows/steps.d.ts +42 -0
  263. package/dist/execution/workflows/steps.js +67 -0
  264. package/dist/index.d.ts +4 -4
  265. package/dist/index.js +2 -2
  266. package/dist/platform/graph/alias.d.ts +1 -5
  267. package/dist/platform/graph/alias.js +1 -5
  268. package/dist/platform/graph/document/index.d.ts +1 -1
  269. package/dist/platform/graph/document/index.js +1 -1
  270. package/dist/platform/graph/index.d.ts +1 -1
  271. package/dist/platform/graph/index.js +1 -1
  272. package/dist/platform/release/index.d.ts +2 -0
  273. package/dist/platform/release/index.js +2 -0
  274. package/dist/platform/schema/callable-authoring.d.ts +21 -0
  275. package/dist/platform/schema/callable-authoring.js +27 -0
  276. package/dist/platform/schema/class-authoring.d.ts +61 -11
  277. package/dist/platform/schema/class-authoring.js +37 -4
  278. package/dist/platform/schema/class-icon-svg.d.ts +9 -0
  279. package/dist/platform/schema/class-icon-svg.js +29 -0
  280. package/dist/platform/schema/class-icon.d.ts +3 -8
  281. package/dist/platform/schema/class-icon.js +2 -29
  282. package/dist/platform/schema/index.d.ts +6 -4
  283. package/dist/platform/schema/index.js +2 -1
  284. package/dist/platform/schema/property.d.ts +5 -0
  285. package/dist/platform/schema/schema-authoring.d.ts +14 -7
  286. package/dist/platform/schema/schema-authoring.js +5 -1
  287. package/dist/platform/versioning/dependents.d.ts +18 -0
  288. package/dist/platform/versioning/dependents.js +15 -0
  289. package/dist/platform/versioning/index.d.ts +5 -0
  290. package/dist/platform/versioning/index.js +5 -0
  291. package/dist/platform/versioning/name.d.ts +38 -0
  292. package/dist/platform/versioning/name.js +58 -0
  293. package/dist/platform/versioning/reference.d.ts +48 -0
  294. package/dist/platform/versioning/reference.js +95 -0
  295. package/dist/platform/versioning/version.d.ts +72 -0
  296. package/dist/platform/versioning/version.js +98 -0
  297. package/dist/project/admit.js +1 -5
  298. package/dist/project/define.d.ts +4 -4
  299. package/dist/project/define.js +55 -35
  300. package/dist/project/index.d.ts +1 -1
  301. package/dist/project/install-command.d.ts +6 -0
  302. package/dist/project/install-command.js +9 -0
  303. package/dist/project/project.d.ts +10 -8
  304. package/dist/testing/dataset/define.d.ts +1 -1
  305. package/dist/testing/durable/engine.d.ts +121 -0
  306. package/dist/testing/durable/engine.js +614 -0
  307. package/dist/testing/durable/index.d.ts +3 -0
  308. package/dist/testing/durable/index.js +1 -0
  309. package/dist/testing/durable/steps.d.ts +30 -0
  310. package/dist/testing/durable/steps.js +40 -0
  311. package/dist/testing/index.d.ts +6 -1
  312. package/dist/testing/index.js +5 -1
  313. package/dist/testing/load.js +1 -1
  314. package/dist/tooling/cli/adapter-command.d.ts +35 -0
  315. package/dist/tooling/cli/adapter-command.js +66 -0
  316. package/dist/tooling/cli/arguments.d.ts +17 -6
  317. package/dist/tooling/cli/arguments.js +175 -52
  318. package/dist/tooling/cli/build.d.ts +55 -0
  319. package/dist/tooling/cli/build.js +77 -0
  320. package/dist/tooling/cli/bun.d.ts +0 -1
  321. package/dist/tooling/cli/bun.js +0 -7
  322. package/dist/tooling/cli/commit.d.ts +35 -0
  323. package/dist/tooling/cli/commit.js +235 -0
  324. package/dist/tooling/cli/deploy-mode.d.ts +26 -0
  325. package/dist/tooling/cli/deploy-mode.js +59 -0
  326. package/dist/tooling/cli/deploy-result.d.ts +80 -0
  327. package/dist/tooling/cli/deploy-result.js +64 -0
  328. package/dist/tooling/cli/diff/declared.d.ts +7 -0
  329. package/dist/tooling/cli/diff/declared.js +27 -0
  330. package/dist/tooling/cli/diff/index.d.ts +30 -0
  331. package/dist/tooling/cli/diff/index.js +58 -0
  332. package/dist/tooling/cli/diff/render.d.ts +15 -0
  333. package/dist/tooling/cli/diff/render.js +131 -0
  334. package/dist/tooling/cli/diff/report.d.ts +88 -0
  335. package/dist/tooling/cli/diff/report.js +154 -0
  336. package/dist/tooling/cli/dotenv.d.ts +5 -5
  337. package/dist/tooling/cli/dotenv.js +6 -36
  338. package/dist/tooling/cli/help.js +173 -60
  339. package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
  340. package/dist/tooling/cli/immutable-deployment.js +135 -0
  341. package/dist/tooling/cli/index.d.ts +12 -4
  342. package/dist/tooling/cli/index.js +6 -3
  343. package/dist/tooling/cli/installed-on.d.ts +83 -0
  344. package/dist/tooling/cli/installed-on.js +156 -0
  345. package/dist/tooling/cli/list.d.ts +152 -0
  346. package/dist/tooling/cli/list.js +331 -0
  347. package/dist/tooling/cli/log.d.ts +5 -2
  348. package/dist/tooling/cli/log.js +9 -2
  349. package/dist/tooling/cli/orchestrate.d.ts +0 -6
  350. package/dist/tooling/cli/orchestrate.js +246 -90
  351. package/dist/tooling/cli/project.d.ts +3 -3
  352. package/dist/tooling/cli/publish/index.d.ts +81 -0
  353. package/dist/tooling/cli/publish/index.js +383 -0
  354. package/dist/tooling/cli/publish/report.d.ts +49 -0
  355. package/dist/tooling/cli/publish/report.js +15 -0
  356. package/dist/tooling/cli/registry/client.d.ts +121 -0
  357. package/dist/tooling/cli/registry/client.js +354 -0
  358. package/dist/tooling/cli/registry/error.d.ts +11 -0
  359. package/dist/tooling/cli/registry/error.js +17 -0
  360. package/dist/tooling/cli/registry/executable.d.ts +35 -0
  361. package/dist/tooling/cli/registry/executable.js +96 -0
  362. package/dist/tooling/cli/registry/index.d.ts +9 -0
  363. package/dist/tooling/cli/registry/index.js +8 -0
  364. package/dist/tooling/cli/registry/installations.d.ts +67 -0
  365. package/dist/tooling/cli/registry/installations.js +108 -0
  366. package/dist/tooling/cli/registry/process.d.ts +36 -0
  367. package/dist/tooling/cli/registry/process.js +119 -0
  368. package/dist/tooling/cli/secrets.d.ts +9 -0
  369. package/dist/tooling/cli/secrets.js +19 -0
  370. package/dist/tooling/cli/yank.d.ts +34 -0
  371. package/dist/tooling/cli/yank.js +32 -0
  372. package/dist/tooling/linter/adapters/typescript/imports.d.ts +0 -1
  373. package/dist/tooling/linter/adapters/typescript/imports.js +1 -5
  374. package/dist/tooling/linter/adapters/typescript/index.d.ts +1 -1
  375. package/dist/tooling/linter/adapters/typescript/index.js +1 -1
  376. package/dist/tooling/linter/adapters/typescript/syntax.d.ts +3 -3
  377. package/dist/tooling/linter/adapters/typescript/syntax.js +13 -25
  378. package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -2
  379. package/dist/tooling/linter/implementations/source/callable-requirements.js +11 -16
  380. package/dist/tooling/linter/implementations/source/dependencies.js +13 -72
  381. package/dist/tooling/linter/implementations/source/global.js +1 -2
  382. package/dist/tooling/linter/implementations/source/mutations.js +18 -29
  383. package/dist/tooling/linter/implementations/source/providers.js +5 -5
  384. package/dist/tooling/linter/implementations/source/queries.js +1 -17
  385. package/dist/tooling/linter/implementations/source/shared.d.ts +12 -4
  386. package/dist/tooling/linter/implementations/source/shared.js +101 -46
  387. package/dist/tooling/linter/implementations/source/verifiers.js +0 -2
  388. package/dist/tooling/linter/implementations/source/views.js +2 -2
  389. package/dist/tooling/linter/implementations/source/workflows.js +500 -17
  390. package/dist/tooling/linter/policy/generated.js +14 -63
  391. package/dist/tooling/linter/requirements/registry.js +6 -8
  392. package/dist/tooling/packaging/declarations/ownership.js +1 -1
  393. package/dist/tooling/packaging/finalize.d.ts +1 -1
  394. package/dist/tooling/packaging/finalize.js +1 -1
  395. package/docs/admission-age.md +88 -0
  396. package/docs/auth-api-migration.md +55 -0
  397. package/docs/business-errors.md +42 -0
  398. package/docs/domain-definition-migration.md +44 -0
  399. package/docs/domain-schema-migration.md +36 -0
  400. package/docs/durable-workflows.md +418 -0
  401. package/docs/handler-dependencies.md +213 -0
  402. package/docs/release.md +155 -0
  403. package/docs/schema-cost.md +124 -0
  404. package/package.json +45 -16
  405. package/dist/application/application.d.ts +0 -28
  406. package/dist/application/query/execution/projection.d.ts +0 -3
  407. package/dist/application/query/execution/projection.js +0 -3
  408. package/dist/deployment/adapter/deploy/context.d.ts +0 -15
  409. package/dist/deployment/adapter/deploy/index.d.ts +0 -2
  410. package/dist/deployment/adapter/deploy/result.d.ts +0 -50
  411. package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
  412. package/dist/deployment/adapter/prepare/context.d.ts +0 -23
  413. package/dist/deployment/adapter/prepare/index.d.ts +0 -2
  414. package/dist/deployment/deploy.d.ts +0 -20
  415. package/dist/deployment/deploy.js +0 -31
  416. package/dist/deployment/release/publication/index.d.ts +0 -6
  417. package/dist/deployment/release/publication/index.js +0 -6
  418. package/dist/deployment/release/publication/manifest.d.ts +0 -3
  419. package/dist/deployment/release/publication/manifest.js +0 -5
  420. package/dist/deployment/release/publication/requirements.d.ts +0 -3
  421. package/dist/deployment/release/publication/requirements.js +0 -3
  422. package/dist/deployment/release/publication/seal.d.ts +0 -10
  423. package/dist/deployment/release/publication/seal.js +0 -39
  424. package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
  425. package/dist/deployment/verify/preflight/artifact.js +0 -122
  426. package/dist/deployment/verify/preflight/publication.d.ts +0 -4
  427. package/dist/deployment/verify/preflight/publication.js +0 -14
  428. package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
  429. package/dist/deployment/verify/readiness/deployment.js +0 -151
  430. package/dist/deployment/verify/readiness/publication.d.ts +0 -11
  431. package/dist/deployment/verify/readiness/publication.js +0 -41
  432. package/dist/execution/service/errors.d.ts +0 -3
  433. package/dist/execution/service/errors.js +0 -3
  434. package/dist/execution/service/publication/delivery.d.ts +0 -2
  435. package/dist/execution/service/publication/installation.d.ts +0 -3
  436. package/dist/execution/service/publication/installation.js +0 -8
  437. package/dist/execution/service/publication/source.d.ts +0 -3
  438. package/dist/execution/service/publication/source.js +0 -11
  439. package/dist/platform/publication/index.d.ts +0 -2
  440. package/dist/platform/publication/index.js +0 -2
  441. package/dist/tooling/cli/astrale/authority.d.ts +0 -5
  442. package/dist/tooling/cli/astrale/authority.js +0 -11
  443. package/dist/tooling/cli/astrale/executable.d.ts +0 -2
  444. package/dist/tooling/cli/astrale/executable.js +0 -47
  445. package/dist/tooling/cli/astrale/failure.d.ts +0 -6
  446. package/dist/tooling/cli/astrale/failure.js +0 -48
  447. package/dist/tooling/cli/astrale/instance.d.ts +0 -11
  448. package/dist/tooling/cli/astrale/instance.js +0 -52
  449. package/dist/tooling/cli/astrale/process.d.ts +0 -13
  450. package/dist/tooling/cli/astrale/process.js +0 -94
  451. package/dist/tooling/cli/astrale/version.d.ts +0 -18
  452. package/dist/tooling/cli/astrale/version.js +0 -55
  453. package/dist/tooling/cli/credential.d.ts +0 -2
  454. package/dist/tooling/cli/credential.js +0 -57
  455. package/dist/tooling/cli/deprecations.d.ts +0 -9
  456. package/dist/tooling/cli/deprecations.js +0 -15
  457. package/dist/tooling/cli/development/candidate.d.ts +0 -25
  458. package/dist/tooling/cli/development/candidate.js +0 -176
  459. package/dist/tooling/cli/development/deployment.d.ts +0 -16
  460. package/dist/tooling/cli/development/deployment.js +0 -39
  461. package/dist/tooling/cli/development/develop.d.ts +0 -11
  462. package/dist/tooling/cli/development/develop.js +0 -243
  463. package/dist/tooling/cli/development/lease.d.ts +0 -18
  464. package/dist/tooling/cli/development/lease.js +0 -163
  465. package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
  466. package/dist/tooling/cli/development/lifecycle.js +0 -43
  467. package/dist/tooling/cli/development/project-imports.d.ts +0 -22
  468. package/dist/tooling/cli/development/project-imports.js +0 -39
  469. package/dist/tooling/cli/development/project-lock.d.ts +0 -16
  470. package/dist/tooling/cli/development/project-lock.js +0 -41
  471. package/dist/tooling/cli/development/rebuild.d.ts +0 -13
  472. package/dist/tooling/cli/development/rebuild.js +0 -58
  473. package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
  474. package/dist/tooling/cli/development/release-evidence.js +0 -10
  475. package/dist/tooling/cli/development/report.d.ts +0 -6
  476. package/dist/tooling/cli/development/report.js +0 -14
  477. package/dist/tooling/cli/development/session-file.d.ts +0 -53
  478. package/dist/tooling/cli/development/session-file.js +0 -337
  479. package/dist/tooling/cli/development/source-watch.d.ts +0 -14
  480. package/dist/tooling/cli/development/source-watch.js +0 -140
  481. package/dist/tooling/cli/development/sources.d.ts +0 -7
  482. package/dist/tooling/cli/development/sources.js +0 -48
  483. package/dist/tooling/cli/development/target-lock.d.ts +0 -16
  484. package/dist/tooling/cli/development/target-lock.js +0 -68
  485. package/dist/tooling/cli/development/view.d.ts +0 -28
  486. package/dist/tooling/cli/development/view.js +0 -151
  487. package/dist/tooling/cli/environment-release.d.ts +0 -21
  488. package/dist/tooling/cli/environment-release.js +0 -46
  489. package/dist/tooling/cli/evidence.d.ts +0 -11
  490. package/dist/tooling/cli/evidence.js +0 -53
  491. package/dist/tooling/cli/installation/index.d.ts +0 -2
  492. package/dist/tooling/cli/installation/index.js +0 -1
  493. package/dist/tooling/cli/installation/observation.d.ts +0 -10
  494. package/dist/tooling/cli/installation/observation.js +0 -44
  495. package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
  496. package/dist/tooling/cli/installation/reconcile.js +0 -122
  497. package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
  498. package/dist/tooling/linter/implementations/source/migrations.js +0 -113
  499. package/dist/tooling/linter/qualification/index.d.ts +0 -10
  500. package/dist/tooling/linter/qualification/index.js +0 -2
  501. package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
  502. package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
  503. package/dist/tooling/linter/qualification/runner.d.ts +0 -3
  504. package/dist/tooling/linter/qualification/runner.js +0 -6
  505. /package/dist/application/{application.js → domain.js} +0 -0
  506. /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
  507. /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
  508. /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
  509. /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
  510. /package/dist/deployment/adapter/{prepare/artifact.js → release/command.js} +0 -0
  511. /package/dist/deployment/adapter/{prepare → release}/context.js +0 -0
  512. /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
  513. /package/dist/deployment/release/{publication → served}/routes.js +0 -0
  514. /package/dist/execution/service/{publication → serving}/index.js +0 -0
@@ -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,15 +3,17 @@ 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
+ }
15
17
  /** Sealed multi-step Workflow awaiting canonical callable association by Runtime admission. */
16
18
  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
19
  readonly kind: 'workflow';
@@ -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
+ }
@@ -0,0 +1,94 @@
1
+ import type { DeploymentCommitV1, DeploymentConfiguration, LineAddressing } from '../../address/index.js';
2
+ import type { Release } from '../../release/index.js';
3
+ import type { Bundle } from '../bundle/index.js';
4
+ /**
5
+ * What `configure` receives: the Environment whose configuration it freezes, and the names of the
6
+ * secrets its deployment binds. Never a secret value: a rotated value is not another configuration,
7
+ * a name added or removed is.
8
+ */
9
+ export interface ConfigureContext {
10
+ readonly environment: string;
11
+ /**
12
+ * The names of the Environment's current secrets (the adapter's `secretsFile`), sorted and
13
+ * unique: exactly the secrets `deployRelease` receives, which the configuration declares.
14
+ */
15
+ readonly secrets: readonly string[];
16
+ }
17
+ /**
18
+ * Where the host places the deployments of one Environment. `routingDomain` is the DNS name every
19
+ * deployment URL ends with, `https://<label>.<routingDomain>`; `addressing` is how its line reads:
20
+ * `readable` for platform lines, `opaque` (the fingerprint alone) for tenant lines.
21
+ */
22
+ export interface Placement {
23
+ readonly addressing: LineAddressing;
24
+ readonly routingDomain: string;
25
+ }
26
+ /** What `placement` receives. It answers without any effect at the host. */
27
+ export interface PlacementContext {
28
+ readonly environment: string;
29
+ /** Parent-owned lifecycle cancellation. */
30
+ readonly signal: AbortSignal;
31
+ /** Optional command-scoped identity override (`--as`). */
32
+ readonly identity?: string;
33
+ }
34
+ /**
35
+ * Everything `deployRelease` deploys: one sealed release as one immutable deployment at
36
+ * `release.url`, which is `deploymentUrl(label, placement.routingDomain)` and the release's issuer.
37
+ * The SDK computes each value before the call, from the Build, `configure` and `placement`, so the
38
+ * adapter never derives an address or seals anything itself.
39
+ */
40
+ export interface ReleaseDeployContext {
41
+ readonly projectDir: string;
42
+ readonly environment: string;
43
+ /** Optional command-scoped identity override (`--as`). */
44
+ readonly identity?: string;
45
+ /** Optional command-scoped credential; trusted adapters must neither retain nor disclose it. */
46
+ readonly credential?: string;
47
+ /**
48
+ * The Environment's current secrets. A new deployment binds them; a reused deployment has its
49
+ * own declared secrets rewritten in place. A deploy never writes another deployment's secrets.
50
+ */
51
+ readonly secrets: Readonly<Record<string, string>>;
52
+ /** The environment-free bytes of the adapter's `bundler`, identified by `bundle.digest`. */
53
+ readonly bundle: Bundle;
54
+ /** What `configure` froze for this Environment. */
55
+ readonly configuration: DeploymentConfiguration;
56
+ /** Where `placement` said the host places the deployment. */
57
+ readonly placement: Placement;
58
+ /**
59
+ * `<line>-<content>`: the DNS label of the deployment, which is also its provider script. Its
60
+ * content covers `bundle.digest` and `configuration`, so one label serves one release.
61
+ */
62
+ readonly label: string;
63
+ /**
64
+ * The release the SDK sealed for this deployment before the call: its `document` is the
65
+ * `DomainRelease` v4 the deployment serves at `release.json`, its `url` the deployment URL.
66
+ */
67
+ readonly release: Release;
68
+ /**
69
+ * The commit this deploy runs from, which the record of a deployment it creates declares. The
70
+ * label does not cover it: a reused deployment keeps the record, and so the commit, of the deploy
71
+ * that created it, and an adapter never refuses a reuse for another commit.
72
+ */
73
+ readonly commit: DeploymentCommitV1 | null;
74
+ /** Parent-owned lifecycle cancellation shared by every provider effect. */
75
+ readonly signal: AbortSignal;
76
+ }
77
+ /**
78
+ * What `list` receives: the origin and the Environment whose deployments the host lists for the
79
+ * caller. It answers without any effect at the host.
80
+ */
81
+ export interface ListContext {
82
+ readonly origin: string;
83
+ readonly environment: string;
84
+ /** Parent-owned lifecycle cancellation. */
85
+ readonly signal: AbortSignal;
86
+ /** Optional command-scoped identity override (`--as`). */
87
+ readonly identity?: string;
88
+ }
89
+ /** What `retain` receives: the label of the published deployment to keep. */
90
+ export interface RetainContext {
91
+ readonly label: string;
92
+ readonly signal: AbortSignal;
93
+ readonly identity?: string;
94
+ }
@@ -0,0 +1,4 @@
1
+ export type { ConfigureContext, ListContext, Placement, PlacementContext, ReleaseDeployContext, RetainContext, } from './context.js';
2
+ export type { AdapterCommand, AdapterCommandContext, AdapterCommandResult } from './command.js';
3
+ export type { DeploymentCallTarget, ListedDeployment } from './list.js';
4
+ export type { DeploymentSecretsState, FailedReleaseDeployResult, MutationKnowledge, ReadyReleaseDeployResult, ReleaseDeploymentPhase, ReleaseDeployResult, } from './result.js';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ import type { DeploymentSummaryV1 } from '../../address/index.js';
2
+ /**
3
+ * Where one listed deployment is called on its host, so that an operator can act on it:
4
+ *
5
+ * - `services`: a deployment Admin's Services hosts, called on the Admin instance with
6
+ * `astrale call "<node>.method.<method>" --admin` (`--admin=<admin>` when `admin` names the
7
+ * Admin bookmark). `path` is the deployment's node, `@<id>`, qualified by its class,
8
+ * `@<id>::services.astrale.ai:class.CloudflareDeployment`, whose only Method is `retire`.
9
+ * `service` is the node of the Service it is a version of,
10
+ * `@<serviceId>::services.astrale.ai:class.CloudflareService`, whose Methods act on the Service
11
+ * and the deployment it currently serves: `promote` (this deployment's label rolls the Service
12
+ * back or forward to it), `setSecret` and `secrets`, `setSchedule` and `schedules`, `logs`,
13
+ * `transfer` and `delete`.
14
+ * - `namespace`: a deployment of a Cloudflare dispatch namespace (adapter-cloudflare's namespace
15
+ * mode), which has no Services node: the namespace and the script, which the hosting kit
16
+ * (`@astrale-os/adapter-cloudflare/hosting`) retires, points a name at or schedules.
17
+ */
18
+ export type DeploymentCallTarget = {
19
+ readonly kind: 'services';
20
+ readonly path: string;
21
+ readonly service: string;
22
+ /** The Admin bookmark the deployment is reached through; the CLI's own Admin target when absent. */
23
+ readonly admin?: string;
24
+ } | {
25
+ readonly kind: 'namespace';
26
+ readonly namespace: string;
27
+ readonly script: string;
28
+ };
29
+ /**
30
+ * One deployment as an adapter's `list` returns it: what its host knows of it, its record as the
31
+ * host stores it, and where it is called. Admin's Services keeps every deployment until it is
32
+ * retired and counts no call: its deployments are `published` and `withdrawn` once retiring. A
33
+ * Cloudflare dispatch namespace keeps no retention: its rows carry none, and carry their creation
34
+ * instant and key only while their script exists. Deployments have no last-call or expiry clock.
35
+ *
36
+ * The adapter does not admit the record. The listing admits it with `acceptDeploymentRecord`, and a
37
+ * record it refuses (one a host on an older SDK still admits, say) never fails the listing: that
38
+ * deployment is listed from the facts its host owns.
39
+ */
40
+ export interface ListedDeployment extends Omit<DeploymentSummaryV1, 'record'> {
41
+ /**
42
+ * The record as the host stores it, unadmitted, whatever value that is (JSON `null` included).
43
+ * Absent when the host keeps no record of the deployment: a dispatch namespace keeps none for a
44
+ * label it only retired.
45
+ */
46
+ readonly record?: unknown;
47
+ /**
48
+ * Whether the stable URL of the deployment's Service serves it. Present only where the host has
49
+ * Services (Admin's Services); a dispatch namespace has none.
50
+ */
51
+ readonly current?: boolean;
52
+ readonly callTarget: DeploymentCallTarget;
53
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Why the host can no longer keep one published deployment (`Adapter.retain`): it is `absent`
3
+ * (the host holds no deployment of that label, or it was deleted) or `retired` (withdrawn, never
4
+ * served again). No rerun keeps it; a new version publishes a new deployment. Any other rejection
5
+ * of `retain` is transient: once it has passed, a rerun keeps the deployment.
6
+ */
7
+ export declare class RetainRefusal extends Error {
8
+ readonly reason: 'absent' | 'retired';
9
+ constructor(reason: RetainRefusal['reason'], message: string);
10
+ }