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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/README.md +191 -58
  2. package/dist/application/action/action.d.ts +6 -0
  3. package/dist/application/action/authoring.d.ts +1 -1
  4. package/dist/application/action/context.d.ts +47 -31
  5. package/dist/application/action/define.d.ts +3 -3
  6. package/dist/application/action/index.d.ts +1 -1
  7. package/dist/application/define.d.ts +8 -6
  8. package/dist/application/define.js +28 -14
  9. package/dist/application/dependency/index.d.ts +1 -1
  10. package/dist/application/dependency/invoker.d.ts +21 -10
  11. package/dist/application/domain.d.ts +30 -0
  12. package/dist/application/index.d.ts +4 -4
  13. package/dist/application/index.js +1 -1
  14. package/dist/application/integration/define.d.ts +8 -1
  15. package/dist/application/integration/index.d.ts +2 -2
  16. package/dist/application/integration/integration.d.ts +13 -1
  17. package/dist/application/integration/operation.d.ts +16 -3
  18. package/dist/application/mutation/authoring/properties.d.ts +5 -3
  19. package/dist/application/mutation/authoring/properties.js +35 -2
  20. package/dist/application/mutation/authoring/transition.js +4 -1
  21. package/dist/application/mutation/execution/execute.js +1 -1
  22. package/dist/application/mutation/failure.d.ts +6 -0
  23. package/dist/application/mutation/failure.js +24 -18
  24. package/dist/application/mutation/index.d.ts +1 -1
  25. package/dist/application/query/collection/union.js +11 -4
  26. package/dist/application/query/composite/plan.d.ts +0 -4
  27. package/dist/application/query/composite/plan.js +0 -2
  28. package/dist/application/query/conformance.d.ts +15 -0
  29. package/dist/application/query/conformance.js +46 -0
  30. package/dist/application/query/define.js +4 -3
  31. package/dist/application/query/execution/execute.d.ts +0 -1
  32. package/dist/application/query/execution/execute.js +7 -1
  33. package/dist/application/query/failure.d.ts +8 -0
  34. package/dist/application/query/failure.js +8 -0
  35. package/dist/application/query/index.d.ts +1 -1
  36. package/dist/application/query/index.js +1 -1
  37. package/dist/application/routes/admission.d.ts +2 -2
  38. package/dist/application/routes/admission.js +1 -1
  39. package/dist/application/routes/route.d.ts +2 -2
  40. package/dist/application/runtime/actions.js +3 -0
  41. package/dist/application/runtime/workflows.d.ts +3 -1
  42. package/dist/application/runtime/workflows.js +3 -4
  43. package/dist/application/view/define.js +4 -6
  44. package/dist/application/view/frontend.d.ts +2 -2
  45. package/dist/application/view/index.d.ts +1 -1
  46. package/dist/application/view/route.d.ts +0 -14
  47. package/dist/application/view/route.js +1 -64
  48. package/dist/application/workflow/authoring.d.ts +3 -2
  49. package/dist/application/workflow/context.d.ts +8 -2
  50. package/dist/application/workflow/define.d.ts +4 -4
  51. package/dist/application/workflow/define.js +14 -9
  52. package/dist/application/workflow/durable.d.ts +197 -0
  53. package/dist/application/workflow/index.d.ts +3 -2
  54. package/dist/application/workflow/runner/inline.js +3 -4
  55. package/dist/application/workflow/runner/runner.d.ts +2 -2
  56. package/dist/application/workflow/step/output.d.ts +2 -0
  57. package/dist/application/workflow/step/output.js +73 -0
  58. package/dist/application/workflow/workflow.d.ts +5 -3
  59. package/dist/deployment/adapter/adapter.d.ts +55 -13
  60. package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
  61. package/dist/deployment/adapter/bundle/file.d.ts +10 -0
  62. package/dist/deployment/adapter/bundle/index.d.ts +2 -0
  63. package/dist/deployment/adapter/define.d.ts +4 -3
  64. package/dist/deployment/adapter/define.js +107 -23
  65. package/dist/deployment/adapter/index.d.ts +4 -3
  66. package/dist/deployment/adapter/index.js +1 -0
  67. package/dist/deployment/adapter/release/command.d.ts +33 -0
  68. package/dist/deployment/adapter/release/context.d.ts +94 -0
  69. package/dist/deployment/adapter/release/index.d.ts +4 -0
  70. package/dist/deployment/adapter/release/index.js +1 -0
  71. package/dist/deployment/adapter/release/list.d.ts +53 -0
  72. package/dist/deployment/adapter/release/list.js +1 -0
  73. package/dist/deployment/adapter/release/refusal.d.ts +10 -0
  74. package/dist/deployment/adapter/release/refusal.js +14 -0
  75. package/dist/deployment/adapter/release/result.d.ts +56 -0
  76. package/dist/deployment/adapter/release/result.js +1 -0
  77. package/dist/deployment/address/configuration.d.ts +96 -0
  78. package/dist/deployment/address/configuration.js +274 -0
  79. package/dist/deployment/address/fingerprint.d.ts +5 -0
  80. package/dist/deployment/address/fingerprint.js +27 -0
  81. package/dist/deployment/address/index.d.ts +5 -0
  82. package/dist/deployment/address/index.js +4 -0
  83. package/dist/deployment/address/label.d.ts +42 -0
  84. package/dist/deployment/address/label.js +80 -0
  85. package/dist/deployment/address/line.d.ts +29 -0
  86. package/dist/deployment/address/line.js +53 -0
  87. package/dist/deployment/address/record.d.ts +73 -0
  88. package/dist/deployment/address/record.js +138 -0
  89. package/dist/deployment/address/summary.d.ts +30 -0
  90. package/dist/deployment/address/summary.js +1 -0
  91. package/dist/deployment/address/vectors.d.ts +60 -0
  92. package/dist/deployment/address/vectors.js +517 -0
  93. package/dist/deployment/authoring.d.ts +0 -2
  94. package/dist/deployment/authoring.js +0 -1
  95. package/dist/deployment/build/build.d.ts +8 -2
  96. package/dist/deployment/build/compile.d.ts +4 -4
  97. package/dist/deployment/build/compile.js +19 -17
  98. package/dist/deployment/build/frontend/compilation.d.ts +2 -4
  99. package/dist/deployment/build/frontend/compilation.js +0 -5
  100. package/dist/deployment/build/frontend/digest.js +1 -5
  101. package/dist/deployment/build/index.d.ts +1 -0
  102. package/dist/deployment/build/index.js +1 -0
  103. package/dist/deployment/build/manifest.d.ts +59 -0
  104. package/dist/deployment/build/manifest.js +118 -0
  105. package/dist/deployment/build/material.d.ts +2 -2
  106. package/dist/deployment/build/material.js +28 -13
  107. package/dist/deployment/build/schema.d.ts +2 -2
  108. package/dist/deployment/deployment.d.ts +3 -2
  109. package/dist/deployment/environment.d.ts +6 -0
  110. package/dist/deployment/environment.js +6 -0
  111. package/dist/deployment/index.d.ts +4 -6
  112. package/dist/deployment/index.js +1 -2
  113. package/dist/deployment/release/addressing.d.ts +6 -5
  114. package/dist/deployment/release/addressing.js +2 -3
  115. package/dist/deployment/release/assemble.d.ts +6 -3
  116. package/dist/deployment/release/assemble.js +12 -10
  117. package/dist/deployment/release/release.d.ts +16 -5
  118. package/dist/deployment/release/seal.d.ts +14 -0
  119. package/dist/deployment/release/seal.js +22 -0
  120. package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
  121. package/dist/deployment/release/{publication → served}/callables.js +2 -2
  122. package/dist/deployment/release/served/index.d.ts +11 -0
  123. package/dist/deployment/release/served/index.js +26 -0
  124. package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
  125. package/dist/deployment/release/{publication → served}/views.js +0 -1
  126. package/dist/deployment/runtime/admission.d.ts +2 -2
  127. package/dist/deployment/runtime/admission.js +5 -5
  128. package/dist/deployment/verify/index.d.ts +3 -4
  129. package/dist/deployment/verify/index.js +2 -3
  130. package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
  131. package/dist/deployment/verify/preflight/bundle.js +71 -0
  132. package/dist/deployment/verify/preflight/index.d.ts +1 -12
  133. package/dist/deployment/verify/preflight/index.js +1 -12
  134. package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
  135. package/dist/deployment/verify/readiness/fetch.js +26 -0
  136. package/dist/deployment/verify/readiness/identity.d.ts +3 -6
  137. package/dist/deployment/verify/readiness/identity.js +3 -3
  138. package/dist/deployment/verify/readiness/index.d.ts +15 -8
  139. package/dist/deployment/verify/readiness/index.js +25 -6
  140. package/dist/deployment/verify/readiness/release.d.ts +8 -0
  141. package/dist/deployment/verify/readiness/release.js +22 -0
  142. package/dist/deployment/worker/address.d.ts +26 -0
  143. package/dist/deployment/worker/address.js +43 -0
  144. package/dist/deployment/worker/build.d.ts +60 -0
  145. package/dist/deployment/worker/build.js +172 -0
  146. package/dist/deployment/worker/configuration.d.ts +73 -0
  147. package/dist/deployment/worker/configuration.js +165 -0
  148. package/dist/deployment/worker/content.d.ts +38 -0
  149. package/dist/deployment/worker/content.js +169 -0
  150. package/dist/deployment/worker/index.d.ts +29 -0
  151. package/dist/deployment/worker/index.js +29 -0
  152. package/dist/deployment/worker/limits.d.ts +30 -0
  153. package/dist/deployment/worker/limits.js +30 -0
  154. package/dist/deployment/worker/record.d.ts +29 -0
  155. package/dist/deployment/worker/record.js +69 -0
  156. package/dist/deployment/worker/request.d.ts +118 -0
  157. package/dist/deployment/worker/request.js +280 -0
  158. package/dist/deployment/worker/response.d.ts +101 -0
  159. package/dist/deployment/worker/response.js +207 -0
  160. package/dist/execution/cache/cache.d.ts +17 -0
  161. package/dist/execution/cache/cache.js +11 -0
  162. package/dist/execution/cache/index.d.ts +2 -0
  163. package/dist/execution/cache/index.js +2 -0
  164. package/dist/execution/cache/memory.d.ts +13 -0
  165. package/dist/execution/cache/memory.js +48 -0
  166. package/dist/execution/identity/authentication.d.ts +33 -3
  167. package/dist/execution/identity/authentication.js +90 -36
  168. package/dist/execution/identity/callback.d.ts +20 -20
  169. package/dist/execution/identity/callback.js +34 -26
  170. package/dist/execution/identity/delivery.d.ts +6 -4
  171. package/dist/execution/identity/delivery.js +25 -20
  172. package/dist/execution/identity/identity.d.ts +17 -3
  173. package/dist/execution/identity/identity.js +12 -4
  174. package/dist/execution/identity/jwks.d.ts +5 -0
  175. package/dist/execution/identity/jwks.js +92 -102
  176. package/dist/execution/index.d.ts +6 -4
  177. package/dist/execution/index.js +4 -2
  178. package/dist/execution/invocation/admission/age.d.ts +57 -0
  179. package/dist/execution/invocation/admission/age.js +208 -0
  180. package/dist/execution/invocation/admission/authentication.d.ts +13 -13
  181. package/dist/execution/invocation/admission/authentication.js +52 -44
  182. package/dist/execution/invocation/admission/authority.d.ts +28 -6
  183. package/dist/execution/invocation/admission/authority.js +9 -2
  184. package/dist/execution/invocation/admission/index.d.ts +4 -3
  185. package/dist/execution/invocation/admission/index.js +3 -2
  186. package/dist/execution/invocation/admission/input.d.ts +2 -2
  187. package/dist/execution/invocation/admission/input.js +16 -2
  188. package/dist/execution/invocation/admission/target.d.ts +11 -0
  189. package/dist/execution/invocation/admission/target.js +22 -3
  190. package/dist/execution/invocation/capabilities/bind.d.ts +11 -0
  191. package/dist/execution/invocation/capabilities/bind.js +25 -0
  192. package/dist/execution/invocation/capabilities/index.d.ts +1 -0
  193. package/dist/execution/invocation/capabilities/index.js +1 -0
  194. package/dist/execution/invocation/dependency/bind.d.ts +3 -1
  195. package/dist/execution/invocation/dependency/bind.js +36 -16
  196. package/dist/execution/invocation/dispatch/context.d.ts +7 -6
  197. package/dist/execution/invocation/dispatch/context.js +11 -44
  198. package/dist/execution/invocation/dispatch/workflow.js +0 -4
  199. package/dist/execution/invocation/handler.js +8 -2
  200. package/dist/execution/invocation/index.d.ts +2 -2
  201. package/dist/execution/invocation/index.js +1 -1
  202. package/dist/execution/invocation/integration/authentication.d.ts +3 -3
  203. package/dist/execution/invocation/integration/authentication.js +7 -7
  204. package/dist/execution/invocation/integration/call.d.ts +2 -1
  205. package/dist/execution/invocation/integration/call.js +3 -3
  206. package/dist/execution/invocation/integration/clients.d.ts +1 -1
  207. package/dist/execution/invocation/integration/index.d.ts +1 -0
  208. package/dist/execution/invocation/integration/index.js +1 -0
  209. package/dist/execution/invocation/invocation.d.ts +6 -0
  210. package/dist/execution/invocation/invocation.js +129 -21
  211. package/dist/execution/invocation/lifecycle/active.d.ts +8 -2
  212. package/dist/execution/invocation/lifecycle/active.js +3 -3
  213. package/dist/execution/invocation/lifecycle/index.d.ts +1 -1
  214. package/dist/execution/invocation/result/errors.d.ts +0 -10
  215. package/dist/execution/invocation/result/errors.js +0 -17
  216. package/dist/execution/invocation/result/index.d.ts +2 -2
  217. package/dist/execution/invocation/result/index.js +1 -1
  218. package/dist/execution/invocation/result/project.js +41 -1
  219. package/dist/execution/node/serve.d.ts +2 -2
  220. package/dist/execution/node/serve.js +1 -1
  221. package/dist/execution/runtime/index.d.ts +1 -0
  222. package/dist/execution/runtime/index.js +1 -0
  223. package/dist/execution/runtime/load.d.ts +3 -3
  224. package/dist/execution/runtime/load.js +3 -2
  225. package/dist/execution/runtime/release.d.ts +17 -0
  226. package/dist/execution/runtime/release.js +7 -0
  227. package/dist/execution/serve.d.ts +18 -4
  228. package/dist/execution/serve.js +10 -0
  229. package/dist/execution/service/create.js +43 -7
  230. package/dist/execution/service/initialization.d.ts +4 -4
  231. package/dist/execution/service/initialization.js +23 -14
  232. package/dist/execution/service/release.d.ts +2 -2
  233. package/dist/execution/service/release.js +3 -2
  234. package/dist/execution/service/service.d.ts +20 -5
  235. package/dist/execution/service/serving/delivery.d.ts +5 -0
  236. package/dist/execution/service/{publication → serving}/delivery.js +4 -1
  237. package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
  238. package/dist/execution/service/serving/installation.d.ts +4 -0
  239. package/dist/execution/service/serving/installation.js +9 -0
  240. package/dist/execution/service/serving/source.d.ts +11 -0
  241. package/dist/execution/service/serving/source.js +15 -0
  242. package/dist/execution/workflows/attempts.d.ts +87 -0
  243. package/dist/execution/workflows/attempts.js +205 -0
  244. package/dist/execution/workflows/discovery.d.ts +14 -0
  245. package/dist/execution/workflows/discovery.js +151 -0
  246. package/dist/execution/workflows/engine.d.ts +83 -0
  247. package/dist/execution/workflows/engine.js +1 -0
  248. package/dist/execution/workflows/envelope.d.ts +12 -0
  249. package/dist/execution/workflows/envelope.js +46 -0
  250. package/dist/execution/workflows/failure.d.ts +39 -0
  251. package/dist/execution/workflows/failure.js +143 -0
  252. package/dist/execution/workflows/index.d.ts +4 -0
  253. package/dist/execution/workflows/index.js +3 -0
  254. package/dist/execution/workflows/integrations.d.ts +13 -0
  255. package/dist/execution/workflows/integrations.js +25 -0
  256. package/dist/execution/workflows/options.d.ts +81 -0
  257. package/dist/execution/workflows/options.js +158 -0
  258. package/dist/execution/workflows/receiver.d.ts +24 -0
  259. package/dist/execution/workflows/receiver.js +99 -0
  260. package/dist/execution/workflows/route.d.ts +12 -0
  261. package/dist/execution/workflows/route.js +35 -0
  262. package/dist/execution/workflows/run.d.ts +23 -0
  263. package/dist/execution/workflows/run.js +365 -0
  264. package/dist/execution/workflows/steps.d.ts +48 -0
  265. package/dist/execution/workflows/steps.js +93 -0
  266. package/dist/index.d.ts +4 -4
  267. package/dist/index.js +2 -2
  268. package/dist/platform/graph/alias.d.ts +1 -5
  269. package/dist/platform/graph/alias.js +1 -5
  270. package/dist/platform/graph/document/index.d.ts +1 -1
  271. package/dist/platform/graph/document/index.js +1 -1
  272. package/dist/platform/graph/index.d.ts +1 -1
  273. package/dist/platform/graph/index.js +1 -1
  274. package/dist/platform/release/index.d.ts +2 -0
  275. package/dist/platform/release/index.js +2 -0
  276. package/dist/platform/schema/callable-authoring.d.ts +21 -0
  277. package/dist/platform/schema/callable-authoring.js +27 -0
  278. package/dist/platform/schema/class-authoring.d.ts +61 -11
  279. package/dist/platform/schema/class-authoring.js +37 -4
  280. package/dist/platform/schema/class-icon-svg.d.ts +9 -0
  281. package/dist/platform/schema/class-icon-svg.js +29 -0
  282. package/dist/platform/schema/class-icon.d.ts +3 -8
  283. package/dist/platform/schema/class-icon.js +2 -29
  284. package/dist/platform/schema/index.d.ts +6 -4
  285. package/dist/platform/schema/index.js +2 -1
  286. package/dist/platform/schema/property.d.ts +5 -0
  287. package/dist/platform/schema/schema-authoring.d.ts +14 -7
  288. package/dist/platform/schema/schema-authoring.js +5 -1
  289. package/dist/platform/versioning/dependents.d.ts +18 -0
  290. package/dist/platform/versioning/dependents.js +15 -0
  291. package/dist/platform/versioning/index.d.ts +5 -0
  292. package/dist/platform/versioning/index.js +5 -0
  293. package/dist/platform/versioning/name.d.ts +38 -0
  294. package/dist/platform/versioning/name.js +58 -0
  295. package/dist/platform/versioning/reference.d.ts +48 -0
  296. package/dist/platform/versioning/reference.js +95 -0
  297. package/dist/platform/versioning/version.d.ts +72 -0
  298. package/dist/platform/versioning/version.js +98 -0
  299. package/dist/project/admit.js +1 -5
  300. package/dist/project/define.d.ts +4 -4
  301. package/dist/project/define.js +55 -35
  302. package/dist/project/index.d.ts +1 -1
  303. package/dist/project/install-command.d.ts +6 -0
  304. package/dist/project/install-command.js +9 -0
  305. package/dist/project/project.d.ts +10 -8
  306. package/dist/testing/dataset/define.d.ts +1 -1
  307. package/dist/testing/durable/engine.d.ts +128 -0
  308. package/dist/testing/durable/engine.js +619 -0
  309. package/dist/testing/durable/index.d.ts +3 -0
  310. package/dist/testing/durable/index.js +1 -0
  311. package/dist/testing/durable/steps.d.ts +30 -0
  312. package/dist/testing/durable/steps.js +45 -0
  313. package/dist/testing/index.d.ts +6 -1
  314. package/dist/testing/index.js +5 -1
  315. package/dist/testing/load.js +1 -1
  316. package/dist/tooling/cli/adapter-command.d.ts +35 -0
  317. package/dist/tooling/cli/adapter-command.js +66 -0
  318. package/dist/tooling/cli/arguments.d.ts +17 -6
  319. package/dist/tooling/cli/arguments.js +175 -52
  320. package/dist/tooling/cli/build.d.ts +55 -0
  321. package/dist/tooling/cli/build.js +77 -0
  322. package/dist/tooling/cli/bun.d.ts +0 -1
  323. package/dist/tooling/cli/bun.js +0 -7
  324. package/dist/tooling/cli/commit.d.ts +35 -0
  325. package/dist/tooling/cli/commit.js +235 -0
  326. package/dist/tooling/cli/deploy-mode.d.ts +26 -0
  327. package/dist/tooling/cli/deploy-mode.js +59 -0
  328. package/dist/tooling/cli/deploy-result.d.ts +80 -0
  329. package/dist/tooling/cli/deploy-result.js +64 -0
  330. package/dist/tooling/cli/diff/declared.d.ts +7 -0
  331. package/dist/tooling/cli/diff/declared.js +27 -0
  332. package/dist/tooling/cli/diff/index.d.ts +30 -0
  333. package/dist/tooling/cli/diff/index.js +58 -0
  334. package/dist/tooling/cli/diff/render.d.ts +15 -0
  335. package/dist/tooling/cli/diff/render.js +131 -0
  336. package/dist/tooling/cli/diff/report.d.ts +88 -0
  337. package/dist/tooling/cli/diff/report.js +154 -0
  338. package/dist/tooling/cli/dotenv.d.ts +5 -5
  339. package/dist/tooling/cli/dotenv.js +6 -36
  340. package/dist/tooling/cli/help.js +173 -60
  341. package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
  342. package/dist/tooling/cli/immutable-deployment.js +135 -0
  343. package/dist/tooling/cli/index.d.ts +12 -4
  344. package/dist/tooling/cli/index.js +6 -3
  345. package/dist/tooling/cli/installed-on.d.ts +83 -0
  346. package/dist/tooling/cli/installed-on.js +156 -0
  347. package/dist/tooling/cli/list.d.ts +152 -0
  348. package/dist/tooling/cli/list.js +331 -0
  349. package/dist/tooling/cli/log.d.ts +5 -2
  350. package/dist/tooling/cli/log.js +9 -2
  351. package/dist/tooling/cli/orchestrate.d.ts +0 -6
  352. package/dist/tooling/cli/orchestrate.js +246 -90
  353. package/dist/tooling/cli/project.d.ts +3 -3
  354. package/dist/tooling/cli/publish/index.d.ts +81 -0
  355. package/dist/tooling/cli/publish/index.js +383 -0
  356. package/dist/tooling/cli/publish/report.d.ts +49 -0
  357. package/dist/tooling/cli/publish/report.js +15 -0
  358. package/dist/tooling/cli/registry/client.d.ts +121 -0
  359. package/dist/tooling/cli/registry/client.js +354 -0
  360. package/dist/tooling/cli/registry/error.d.ts +11 -0
  361. package/dist/tooling/cli/registry/error.js +17 -0
  362. package/dist/tooling/cli/registry/executable.d.ts +35 -0
  363. package/dist/tooling/cli/registry/executable.js +96 -0
  364. package/dist/tooling/cli/registry/index.d.ts +9 -0
  365. package/dist/tooling/cli/registry/index.js +8 -0
  366. package/dist/tooling/cli/registry/installations.d.ts +67 -0
  367. package/dist/tooling/cli/registry/installations.js +108 -0
  368. package/dist/tooling/cli/registry/process.d.ts +36 -0
  369. package/dist/tooling/cli/registry/process.js +119 -0
  370. package/dist/tooling/cli/secrets.d.ts +9 -0
  371. package/dist/tooling/cli/secrets.js +19 -0
  372. package/dist/tooling/cli/yank.d.ts +34 -0
  373. package/dist/tooling/cli/yank.js +32 -0
  374. package/dist/tooling/linter/adapters/typescript/imports.d.ts +0 -1
  375. package/dist/tooling/linter/adapters/typescript/imports.js +1 -5
  376. package/dist/tooling/linter/adapters/typescript/index.d.ts +1 -1
  377. package/dist/tooling/linter/adapters/typescript/index.js +1 -1
  378. package/dist/tooling/linter/adapters/typescript/syntax.d.ts +3 -3
  379. package/dist/tooling/linter/adapters/typescript/syntax.js +13 -25
  380. package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -2
  381. package/dist/tooling/linter/implementations/source/callable-requirements.js +11 -16
  382. package/dist/tooling/linter/implementations/source/dependencies.js +13 -72
  383. package/dist/tooling/linter/implementations/source/global.js +1 -2
  384. package/dist/tooling/linter/implementations/source/mutations.js +18 -29
  385. package/dist/tooling/linter/implementations/source/providers.js +5 -5
  386. package/dist/tooling/linter/implementations/source/queries.js +1 -17
  387. package/dist/tooling/linter/implementations/source/shared.d.ts +12 -4
  388. package/dist/tooling/linter/implementations/source/shared.js +101 -46
  389. package/dist/tooling/linter/implementations/source/verifiers.js +0 -2
  390. package/dist/tooling/linter/implementations/source/views.js +2 -2
  391. package/dist/tooling/linter/implementations/source/workflows.js +499 -17
  392. package/dist/tooling/linter/policy/generated.js +14 -63
  393. package/dist/tooling/linter/requirements/registry.js +6 -8
  394. package/dist/tooling/packaging/declarations/ownership.js +1 -1
  395. package/dist/tooling/packaging/finalize.d.ts +1 -1
  396. package/dist/tooling/packaging/finalize.js +1 -1
  397. package/docs/admission-age.md +88 -0
  398. package/docs/auth-api-migration.md +55 -0
  399. package/docs/business-errors.md +42 -0
  400. package/docs/domain-definition-migration.md +44 -0
  401. package/docs/domain-schema-migration.md +36 -0
  402. package/docs/durable-workflows.md +445 -0
  403. package/docs/handler-dependencies.md +213 -0
  404. package/docs/release.md +155 -0
  405. package/docs/schema-cost.md +124 -0
  406. package/package.json +45 -16
  407. package/dist/application/application.d.ts +0 -28
  408. package/dist/application/query/execution/projection.d.ts +0 -3
  409. package/dist/application/query/execution/projection.js +0 -3
  410. package/dist/deployment/adapter/deploy/context.d.ts +0 -15
  411. package/dist/deployment/adapter/deploy/index.d.ts +0 -2
  412. package/dist/deployment/adapter/deploy/result.d.ts +0 -50
  413. package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
  414. package/dist/deployment/adapter/prepare/context.d.ts +0 -23
  415. package/dist/deployment/adapter/prepare/index.d.ts +0 -2
  416. package/dist/deployment/deploy.d.ts +0 -20
  417. package/dist/deployment/deploy.js +0 -31
  418. package/dist/deployment/release/publication/index.d.ts +0 -6
  419. package/dist/deployment/release/publication/index.js +0 -6
  420. package/dist/deployment/release/publication/manifest.d.ts +0 -3
  421. package/dist/deployment/release/publication/manifest.js +0 -5
  422. package/dist/deployment/release/publication/requirements.d.ts +0 -3
  423. package/dist/deployment/release/publication/requirements.js +0 -3
  424. package/dist/deployment/release/publication/seal.d.ts +0 -10
  425. package/dist/deployment/release/publication/seal.js +0 -39
  426. package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
  427. package/dist/deployment/verify/preflight/artifact.js +0 -122
  428. package/dist/deployment/verify/preflight/publication.d.ts +0 -4
  429. package/dist/deployment/verify/preflight/publication.js +0 -14
  430. package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
  431. package/dist/deployment/verify/readiness/deployment.js +0 -151
  432. package/dist/deployment/verify/readiness/publication.d.ts +0 -11
  433. package/dist/deployment/verify/readiness/publication.js +0 -41
  434. package/dist/execution/service/errors.d.ts +0 -3
  435. package/dist/execution/service/errors.js +0 -3
  436. package/dist/execution/service/publication/delivery.d.ts +0 -2
  437. package/dist/execution/service/publication/installation.d.ts +0 -3
  438. package/dist/execution/service/publication/installation.js +0 -8
  439. package/dist/execution/service/publication/source.d.ts +0 -3
  440. package/dist/execution/service/publication/source.js +0 -11
  441. package/dist/platform/publication/index.d.ts +0 -2
  442. package/dist/platform/publication/index.js +0 -2
  443. package/dist/tooling/cli/astrale/authority.d.ts +0 -5
  444. package/dist/tooling/cli/astrale/authority.js +0 -11
  445. package/dist/tooling/cli/astrale/executable.d.ts +0 -2
  446. package/dist/tooling/cli/astrale/executable.js +0 -47
  447. package/dist/tooling/cli/astrale/failure.d.ts +0 -6
  448. package/dist/tooling/cli/astrale/failure.js +0 -48
  449. package/dist/tooling/cli/astrale/instance.d.ts +0 -11
  450. package/dist/tooling/cli/astrale/instance.js +0 -52
  451. package/dist/tooling/cli/astrale/process.d.ts +0 -13
  452. package/dist/tooling/cli/astrale/process.js +0 -94
  453. package/dist/tooling/cli/astrale/version.d.ts +0 -18
  454. package/dist/tooling/cli/astrale/version.js +0 -55
  455. package/dist/tooling/cli/credential.d.ts +0 -2
  456. package/dist/tooling/cli/credential.js +0 -57
  457. package/dist/tooling/cli/deprecations.d.ts +0 -9
  458. package/dist/tooling/cli/deprecations.js +0 -15
  459. package/dist/tooling/cli/development/candidate.d.ts +0 -25
  460. package/dist/tooling/cli/development/candidate.js +0 -176
  461. package/dist/tooling/cli/development/deployment.d.ts +0 -16
  462. package/dist/tooling/cli/development/deployment.js +0 -39
  463. package/dist/tooling/cli/development/develop.d.ts +0 -11
  464. package/dist/tooling/cli/development/develop.js +0 -243
  465. package/dist/tooling/cli/development/lease.d.ts +0 -18
  466. package/dist/tooling/cli/development/lease.js +0 -163
  467. package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
  468. package/dist/tooling/cli/development/lifecycle.js +0 -43
  469. package/dist/tooling/cli/development/project-imports.d.ts +0 -22
  470. package/dist/tooling/cli/development/project-imports.js +0 -39
  471. package/dist/tooling/cli/development/project-lock.d.ts +0 -16
  472. package/dist/tooling/cli/development/project-lock.js +0 -41
  473. package/dist/tooling/cli/development/rebuild.d.ts +0 -13
  474. package/dist/tooling/cli/development/rebuild.js +0 -58
  475. package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
  476. package/dist/tooling/cli/development/release-evidence.js +0 -10
  477. package/dist/tooling/cli/development/report.d.ts +0 -6
  478. package/dist/tooling/cli/development/report.js +0 -14
  479. package/dist/tooling/cli/development/session-file.d.ts +0 -53
  480. package/dist/tooling/cli/development/session-file.js +0 -337
  481. package/dist/tooling/cli/development/source-watch.d.ts +0 -14
  482. package/dist/tooling/cli/development/source-watch.js +0 -140
  483. package/dist/tooling/cli/development/sources.d.ts +0 -7
  484. package/dist/tooling/cli/development/sources.js +0 -48
  485. package/dist/tooling/cli/development/target-lock.d.ts +0 -16
  486. package/dist/tooling/cli/development/target-lock.js +0 -68
  487. package/dist/tooling/cli/development/view.d.ts +0 -28
  488. package/dist/tooling/cli/development/view.js +0 -151
  489. package/dist/tooling/cli/environment-release.d.ts +0 -21
  490. package/dist/tooling/cli/environment-release.js +0 -46
  491. package/dist/tooling/cli/evidence.d.ts +0 -11
  492. package/dist/tooling/cli/evidence.js +0 -53
  493. package/dist/tooling/cli/installation/index.d.ts +0 -2
  494. package/dist/tooling/cli/installation/index.js +0 -1
  495. package/dist/tooling/cli/installation/observation.d.ts +0 -10
  496. package/dist/tooling/cli/installation/observation.js +0 -44
  497. package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
  498. package/dist/tooling/cli/installation/reconcile.js +0 -122
  499. package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
  500. package/dist/tooling/linter/implementations/source/migrations.js +0 -113
  501. package/dist/tooling/linter/qualification/index.d.ts +0 -10
  502. package/dist/tooling/linter/qualification/index.js +0 -2
  503. package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
  504. package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
  505. package/dist/tooling/linter/qualification/runner.d.ts +0 -3
  506. package/dist/tooling/linter/qualification/runner.js +0 -6
  507. /package/dist/application/{application.js → domain.js} +0 -0
  508. /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
  509. /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
  510. /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
  511. /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
  512. /package/dist/deployment/adapter/{prepare/artifact.js → release/command.js} +0 -0
  513. /package/dist/deployment/adapter/{prepare → release}/context.js +0 -0
  514. /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
  515. /package/dist/deployment/release/{publication → served}/routes.js +0 -0
  516. /package/dist/execution/service/{publication → serving}/index.js +0 -0
@@ -0,0 +1,365 @@
1
+ import { declaredErrorFactory } from '../../application/error/index.js';
2
+ import { acceptStepId } from '../../application/workflow/step/index.js';
3
+ import { acceptStepOutput } from '../../application/workflow/step/output.js';
4
+ import { validateOutput } from '../invocation/result/index.js';
5
+ import { BACKOFF, UNAVAILABLE, failedAttemptError, failedAttemptOf, nextAttempt, } from './attempts.js';
6
+ import { decodeEnvelope } from './envelope.js';
7
+ import { replayedFailure, StepExhausted, StepRetryAfter, terminalFailure } from './failure.js';
8
+ import { stepServing } from './options.js';
9
+ import { keySequence } from './steps.js';
10
+ const MAXIMUM_SLEEP_MS = 365 * 24 * 60 * 60_000;
11
+ const MAXIMUM_SIGNAL_NAME = 128;
12
+ /** Engine handlers of one durable Workflow: the `run` and the shared `signal`. */
13
+ export function durableHandlers(input) {
14
+ const { engine } = input.serving;
15
+ return Object.freeze({
16
+ run: (context, raw) => run(input, context, raw),
17
+ async signal(context, raw) {
18
+ const request = signalRequest(raw);
19
+ try {
20
+ await context.promise(request.name).resolve(request.value);
21
+ return { accepted: true };
22
+ }
23
+ catch (cause) {
24
+ // The engine refuses to resolve a promise twice with a terminal failure.
25
+ if (cause instanceof engine.TerminalError)
26
+ return { accepted: false };
27
+ throw cause;
28
+ }
29
+ },
30
+ });
31
+ }
32
+ async function run(input, context, raw) {
33
+ const { workflow, serving } = input;
34
+ const { engine } = serving;
35
+ const definition = workflow.definition;
36
+ // A run replays the code of the release that started it, each release at its own URL. Code
37
+ // served in place of it replays the journal: the engine refuses a journal whose Steps no longer
38
+ // match, and code that cannot read what the Kernel recorded fails every attempt; both pause.
39
+ const envelope = admitted(workflow, raw, input.kernel);
40
+ const durable = durableContext(input, context, envelope);
41
+ let output;
42
+ try {
43
+ output = await definition.run(durable);
44
+ }
45
+ catch (cause) {
46
+ throw terminalFailure(engine, cause, definition) ?? cause;
47
+ }
48
+ return validateOutput(workflow.callable, output);
49
+ }
50
+ function admitted(workflow, raw, kernel) {
51
+ const envelope = decodeEnvelope(raw);
52
+ if (envelope.execution.kernel !== kernel) {
53
+ throw new TypeError('Durable envelope Kernel differs from its authenticated endpoint.');
54
+ }
55
+ const diagnostics = workflow.callable.validateInput(envelope.input);
56
+ if (diagnostics.length > 0) {
57
+ throw new TypeError(`Workflow ${workflow.address} cannot read the recorded input.`);
58
+ }
59
+ const instance = 'static' in workflow.callable && workflow.callable.static === false;
60
+ if (instance !== (envelope.execution.receiver !== undefined)) {
61
+ throw new TypeError(`Workflow ${workflow.address} cannot use the recorded receiver.`);
62
+ }
63
+ return envelope;
64
+ }
65
+ function durableContext(input, context, envelope) {
66
+ const { serving, domain, workflow } = input;
67
+ const { engine } = serving;
68
+ const definition = workflow.definition;
69
+ const execution = envelope.execution;
70
+ const signal = context.request().attemptCompletedSignal;
71
+ const steps = new Set();
72
+ let running;
73
+ /**
74
+ * Starts one durable operation, a Step or a wait, once the previous one has settled. The engine
75
+ * follows one awaited operation at a time: operations awaited together through `Promise` combinators
76
+ * make it lose track of the run, which then pauses.
77
+ */
78
+ const sequenced = (operation, start) => {
79
+ if (running !== undefined) {
80
+ return Promise.reject(new TypeError(`Workflow ${operation} started while ${running} runs: durable Steps and waits run one after another.`));
81
+ }
82
+ running = operation;
83
+ let started;
84
+ try {
85
+ started = start();
86
+ }
87
+ catch (cause) {
88
+ running = undefined;
89
+ return Promise.reject(cause);
90
+ }
91
+ return started.finally(() => {
92
+ running = undefined;
93
+ });
94
+ };
95
+ const now = input.now ?? Date.now;
96
+ /**
97
+ * One attempt of Step `id`, holding the capabilities of an Action as the Domain alone. Its
98
+ * Mutations, durable calls and Integration calls share one key sequence derived from the Step's
99
+ * name, which every attempt derives again. The engine journals its outcome: the Step's output, its
100
+ * declared error, or the failed attempt, as `failedAttemptError` records it. The Step decides from
101
+ * that journal alone whether to go on, so a replay decides alike.
102
+ *
103
+ * The engine promise is returned unawaited: awaiting it is what tells the engine the run waits on
104
+ * it, so parallel Steps hand theirs to the engine's own combinator instead.
105
+ */
106
+ const attempt = (id, held, execute) => {
107
+ const name = `step:${id}`;
108
+ const { timeoutMs } = held;
109
+ return context.run(name, async () => {
110
+ const startedAt = now();
111
+ const expiry = new AbortController();
112
+ const timer = setTimeout(() => expiry.abort(new Error(`Workflow Step ${id} exceeded its ${timeoutMs} ms timeout.`)), timeoutMs);
113
+ let step;
114
+ try {
115
+ const lifetime = {
116
+ deadline: Date.now() + timeoutMs,
117
+ signal: AbortSignal.any([signal, expiry.signal]),
118
+ };
119
+ const next = await keySequence(execution.id, name);
120
+ const { authority } = (step = input.steps({ name, execution, next, lifetime }));
121
+ const output = await Promise.race([
122
+ Promise.resolve().then(() => execute(authority)),
123
+ expired(expiry.signal),
124
+ ]);
125
+ try {
126
+ return acceptStepOutput(output);
127
+ }
128
+ catch (cause) {
129
+ throw new TypeError(`Workflow ${name} output must be portable.`, { cause });
130
+ }
131
+ }
132
+ catch (cause) {
133
+ throw (terminalFailure(engine, cause, definition) ??
134
+ failedAttemptError(engine, cause, startedAt, now(), step?.repeatsEffects() ?? false));
135
+ }
136
+ finally {
137
+ clearTimeout(timer);
138
+ step?.close();
139
+ }
140
+ });
141
+ };
142
+ /**
143
+ * How Step `id` goes on after an attempt that failed with the journaled `outcome`, given what its
144
+ * earlier attempts spent. A declared error, an exhaustion the Step threw again, and the engine's
145
+ * cancellation are final: they throw, as the Workflow sees them.
146
+ */
147
+ const afterFailure = (id, held, spent, outcome) => {
148
+ const failed = failedAttemptOf(engine, outcome);
149
+ if (failed === undefined)
150
+ throw replayedFailure(engine, outcome, definition, id) ?? outcome;
151
+ return nextAttempt(spent, failed, held.retry);
152
+ };
153
+ /**
154
+ * One Step, awaited alone: attempted until it succeeds, fails for good or spends its budget, each
155
+ * attempt after a durable wait the failure of the previous one prescribes.
156
+ */
157
+ const attempts = async (id, held, execute) => {
158
+ let spent;
159
+ for (;;) {
160
+ let next;
161
+ try {
162
+ return await attempt(id, held, execute);
163
+ }
164
+ catch (outcome) {
165
+ next = afterFailure(id, held, spent, outcome);
166
+ }
167
+ if (next.kind === 'exhausted')
168
+ throw new StepExhausted(id, next.refusal);
169
+ spent = next.spending;
170
+ await context.sleep(next.delayMs, `${next.wait}:step:${id}`);
171
+ }
172
+ };
173
+ const step = (declared, execute) => {
174
+ let accepted;
175
+ try {
176
+ accepted = stepDeclaration(declared, serving.step);
177
+ if (steps.has(accepted.id))
178
+ throw new TypeError(`Workflow Step ${accepted.id} occurs more than once.`);
179
+ }
180
+ catch (cause) {
181
+ return Promise.reject(cause);
182
+ }
183
+ steps.add(accepted.id);
184
+ return sequenced(`Step ${accepted.id}`, () => attempts(accepted.id, accepted.held, execute));
185
+ };
186
+ /**
187
+ * The Steps `declare` declares, attempted together in rounds, each round awaited through the
188
+ * engine's combinator as one operation. A Step whose attempt failed and that goes on is attempted
189
+ * again in the next round, after one durable wait, the longest any of them prescribes; each Step
190
+ * spends its own budget. Once all have settled, their outputs in declaration order, or the failure
191
+ * of the first failed one in that order, as that Step alone fails. A cancellation ends the round
192
+ * it reaches.
193
+ */
194
+ const parallel = (declare) => {
195
+ const declared = new Map();
196
+ const declaration = (id, execute) => {
197
+ const accepted = stepDeclaration(id, serving.step);
198
+ const token = Object.freeze({});
199
+ declared.set(token, { ...accepted, execute });
200
+ return token;
201
+ };
202
+ let group;
203
+ try {
204
+ if (typeof declare !== 'function') {
205
+ throw new TypeError('step.parallel takes a function declaring its Steps.');
206
+ }
207
+ const returned = declare(Object.freeze({
208
+ run: (id, execute) => declaration(id, execute),
209
+ query: (id, query, value) => declaration(id, (authority) => authority.query(query, value)),
210
+ mutate: (id, mutation, value) => declaration(id, (authority) => authority.mutate(mutation, value)),
211
+ }));
212
+ if (!Array.isArray(returned) ||
213
+ returned.length !== declared.size ||
214
+ new Set(returned).size !== returned.length ||
215
+ returned.some((entry) => !declared.has(entry))) {
216
+ throw new TypeError('step.parallel takes exactly the Steps its function declares, each once, as an array.');
217
+ }
218
+ group = returned.map((entry) => declared.get(entry));
219
+ const ids = new Set();
220
+ for (const { id } of group) {
221
+ if (steps.has(id) || ids.has(id)) {
222
+ throw new TypeError(`Workflow Step ${id} occurs more than once.`);
223
+ }
224
+ ids.add(id);
225
+ }
226
+ }
227
+ catch (cause) {
228
+ return Promise.reject(cause);
229
+ }
230
+ if (group.length === 0)
231
+ return Promise.resolve([]);
232
+ for (const { id } of group)
233
+ steps.add(id);
234
+ return sequenced(`parallel Steps ${group.map(({ id }) => id).join(', ')}`, async () => {
235
+ const states = group.map((declared) => ({
236
+ ...declared,
237
+ spent: undefined,
238
+ result: undefined,
239
+ }));
240
+ for (;;) {
241
+ const pending = states.filter(({ result }) => result === undefined);
242
+ const settled = await engine.RestatePromise.allSettled(pending.map(({ id, held, execute }) => attempt(id, held, execute)));
243
+ const cancelled = settled.find((outcome) => outcome.status === 'rejected' && outcome.reason instanceof engine.CancelledError);
244
+ if (cancelled !== undefined)
245
+ throw cancelled.reason;
246
+ let delayMs = 0;
247
+ let wait = BACKOFF;
248
+ settled.forEach((outcome, index) => {
249
+ const state = pending[index];
250
+ if (outcome.status === 'fulfilled') {
251
+ state.result = outcome;
252
+ return;
253
+ }
254
+ let next;
255
+ try {
256
+ next = afterFailure(state.id, state.held, state.spent, outcome.reason);
257
+ }
258
+ catch (failure) {
259
+ state.result = { status: 'rejected', reason: failure };
260
+ return;
261
+ }
262
+ if (next.kind === 'exhausted') {
263
+ state.result = { status: 'rejected', reason: new StepExhausted(state.id, next.refusal) };
264
+ return;
265
+ }
266
+ state.spent = next.spending;
267
+ delayMs = Math.max(delayMs, next.delayMs);
268
+ if (next.wait === UNAVAILABLE)
269
+ wait = UNAVAILABLE;
270
+ });
271
+ if (states.every(({ result }) => result !== undefined))
272
+ break;
273
+ await context.sleep(delayMs, `${wait}:parallel`);
274
+ }
275
+ const failed = states.find(({ result }) => result.status === 'rejected');
276
+ if (failed !== undefined)
277
+ throw failed.result.reason;
278
+ return states.map(({ result }) => result.value);
279
+ });
280
+ };
281
+ return Object.freeze({
282
+ domain,
283
+ input: envelope.input,
284
+ execution,
285
+ error: declaredErrorFactory(definition),
286
+ step: Object.freeze({
287
+ run: step,
288
+ query: (id, query, value) => step(id, (authority) => authority.query(query, value)),
289
+ mutate: (id, mutation, value) => step(id, (authority) => authority.mutate(mutation, value)),
290
+ parallel,
291
+ }),
292
+ async sleep(durationMs) {
293
+ if (!Number.isSafeInteger(durationMs) || durationMs < 0 || durationMs > MAXIMUM_SLEEP_MS) {
294
+ throw new TypeError(`Durable sleep must be an integer between 0 and ${MAXIMUM_SLEEP_MS} ms.`);
295
+ }
296
+ await sequenced('sleep', () => Promise.resolve(context.sleep(durationMs)));
297
+ },
298
+ async awaitSignal(name, options) {
299
+ if (typeof name !== 'string' || name.length === 0 || name.length > MAXIMUM_SIGNAL_NAME) {
300
+ throw new TypeError('Durable signal name must have 1 to 128 characters.');
301
+ }
302
+ if (options === undefined) {
303
+ return (await sequenced(`wait for signal ${name}`, () => Promise.resolve(context.promise(name).get())));
304
+ }
305
+ const timeoutMs = options?.timeoutMs;
306
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 0 || timeoutMs > MAXIMUM_SLEEP_MS) {
307
+ throw new TypeError(`Durable signal timeout must be an integer between 0 and ${MAXIMUM_SLEEP_MS} ms.`);
308
+ }
309
+ // The engine journals the race between the signal and the timer: a replay settles it alike.
310
+ try {
311
+ const value = await sequenced(`wait for signal ${name}`, () => Promise.resolve(context.promise(name).get().orTimeout(timeoutMs)));
312
+ return Object.freeze({ kind: 'signal', value });
313
+ }
314
+ catch (cause) {
315
+ if (cause instanceof engine.TimeoutError)
316
+ return Object.freeze({ kind: 'timeout' });
317
+ throw cause;
318
+ }
319
+ },
320
+ cancelled: (error) => error instanceof engine.CancelledError,
321
+ exhausted: (error) => error instanceof StepExhausted,
322
+ retryAfter: (delayMs, cause) => new StepRetryAfter(delayMs, cause),
323
+ ...(execution.receiver === undefined ? {} : { self: execution.receiver }),
324
+ });
325
+ }
326
+ /** Admit a Step's id, and its declared retry budget and timeout over the deployment's. */
327
+ function stepDeclaration(declared, fallback) {
328
+ if (typeof declared === 'string')
329
+ return { id: acceptStepId(declared), held: fallback };
330
+ if (declared === null ||
331
+ typeof declared !== 'object' ||
332
+ Array.isArray(declared) ||
333
+ Reflect.ownKeys(declared).some((key) => key !== 'id' && key !== 'retry' && key !== 'timeoutMs')) {
334
+ throw new TypeError('A Workflow Step declaration takes only id, retry and timeoutMs.');
335
+ }
336
+ return {
337
+ id: acceptStepId(declared.id),
338
+ held: stepServing({ retry: declared.retry, timeoutMs: declared.timeoutMs }, fallback),
339
+ };
340
+ }
341
+ /**
342
+ * Rejects with the abort reason once `signal` aborts, at once if it already has: a timeout may fire
343
+ * while the attempt derives its keys. Never settles otherwise.
344
+ */
345
+ function expired(signal) {
346
+ return new Promise((_, reject) => {
347
+ if (signal.aborted)
348
+ reject(signal.reason);
349
+ else
350
+ signal.addEventListener('abort', () => reject(signal.reason), { once: true });
351
+ });
352
+ }
353
+ function signalRequest(input) {
354
+ if (input === null ||
355
+ typeof input !== 'object' ||
356
+ Array.isArray(input) ||
357
+ typeof input.name !== 'string') {
358
+ throw new TypeError('Durable signal request is invalid.');
359
+ }
360
+ const { name, value } = input;
361
+ if (name.length === 0 || name.length > MAXIMUM_SIGNAL_NAME) {
362
+ throw new TypeError('Durable signal name must have 1 to 128 characters.');
363
+ }
364
+ return { name, value: value ?? null };
365
+ }
@@ -0,0 +1,48 @@
1
+ import type { IntegrationClientFactory, Integrations } from '../../application/integration/index.js';
2
+ import type { DurableExecution, DurableStepAuthority } from '../../application/workflow/index.js';
3
+ import type { BoundClientSession } from '../../platform/client/session/index.js';
4
+ import type { Domain } from '../../platform/schema/index.js';
5
+ import type { Identity } from '../identity/index.js';
6
+ import type { Lifetime } from '../invocation/lifecycle/index.js';
7
+ type Executor = NonNullable<Identity['executor']>;
8
+ /** One attempt of one Step: its journal name, its Execution, its key sequence and its bounds. */
9
+ export interface StepAttempt {
10
+ readonly name: string;
11
+ readonly execution: DurableExecution;
12
+ /** The next key of the Step's sequence; the sequence restarts with every attempt. */
13
+ readonly next: () => string;
14
+ readonly lifetime: Lifetime;
15
+ }
16
+ /** What one Step attempt holds, released once the attempt ends. */
17
+ export interface StepAuthorityBinding {
18
+ readonly authority: DurableStepAuthority;
19
+ /** Whether the attempt ran an `invoke` without a key, which the next attempt runs again. */
20
+ repeatsEffects(): boolean;
21
+ close(): void;
22
+ }
23
+ /** Bind the capabilities one Step attempt holds. */
24
+ export type StepAuthorities = (attempt: StepAttempt) => StepAuthorityBinding;
25
+ /**
26
+ * Steps acting as the Domain through a Session of the Execution they belong to: the capabilities of
27
+ * an Action over the keyed Session, and the Runtime's Integration clients over the same keys.
28
+ */
29
+ export declare function sessionSteps(input: {
30
+ readonly executor: Executor;
31
+ readonly domain: Domain;
32
+ readonly integrations: IntegrationClientFactory<Integrations>;
33
+ }): StepAuthorities;
34
+ /**
35
+ * Every Mutation and every `invoke` of a durable callable of one Step without its own key carries
36
+ * the next key of the Step's sequence. The sequence restarts with every attempt, so a retried Step
37
+ * replays the same keys: the Kernel answers a Mutation with its receipt and a durable call with the
38
+ * Execution it started, or refuses a request that changed under its key. Any other `invoke` carries
39
+ * no key, because the Kernel accepts one only for a durable Function, and runs again with the Step.
40
+ *
41
+ * A keyed call and a Query repeat no effect when sent again, so their failures are marked
42
+ * resendable: an unreachable Kernel then costs the Step no attempt. `unkeyed` hears each `invoke`
43
+ * without a key that may have run.
44
+ */
45
+ export declare function keyed<Session extends Pick<BoundClientSession, 'invoke' | 'mutate'>>(session: Session, domain: Domain, next: () => string, unkeyed: () => void): Session;
46
+ /** The key sequence of one Step of one Execution: `<execution>.<digest of the name>.<position>`. */
47
+ export declare function keySequence(execution: DurableExecution['id'], name: string): Promise<() => string>;
48
+ export {};
@@ -0,0 +1,93 @@
1
+ import { bindSession } from '../../platform/client/session/index.js';
2
+ import { bindCapabilities } from '../invocation/capabilities/index.js';
3
+ import { bindIntegrationAuthentication } from '../invocation/integration/index.js';
4
+ import { resendableCall, unkeyedCall } from './attempts.js';
5
+ import { stepCalls } from './integrations.js';
6
+ /**
7
+ * Steps acting as the Domain through a Session of the Execution they belong to: the capabilities of
8
+ * an Action over the keyed Session, and the Runtime's Integration clients over the same keys.
9
+ */
10
+ export function sessionSteps(input) {
11
+ const { executor, domain, integrations } = input;
12
+ return ({ execution, next, lifetime }) => {
13
+ const session = executor(execution.kernel, execution.id, lifetime);
14
+ try {
15
+ const bound = bindSession(session, lifetime);
16
+ let repeats = false;
17
+ const self = keyed(bound, domain, next, () => {
18
+ repeats = true;
19
+ });
20
+ const auth = bindIntegrationAuthentication(lifetime, bound);
21
+ const authority = Object.freeze({
22
+ ...bindCapabilities(domain, { self }),
23
+ integrations: integrations(stepCalls({ next, lifetime, auth })),
24
+ });
25
+ return Object.freeze({
26
+ authority,
27
+ repeatsEffects: () => repeats,
28
+ close: () => session.close(),
29
+ });
30
+ }
31
+ catch (cause) {
32
+ session.close();
33
+ throw cause;
34
+ }
35
+ };
36
+ }
37
+ /**
38
+ * Every Mutation and every `invoke` of a durable callable of one Step without its own key carries
39
+ * the next key of the Step's sequence. The sequence restarts with every attempt, so a retried Step
40
+ * replays the same keys: the Kernel answers a Mutation with its receipt and a durable call with the
41
+ * Execution it started, or refuses a request that changed under its key. Any other `invoke` carries
42
+ * no key, because the Kernel accepts one only for a durable Function, and runs again with the Step.
43
+ *
44
+ * A keyed call and a Query repeat no effect when sent again, so their failures are marked
45
+ * resendable: an unreachable Kernel then costs the Step no attempt. `unkeyed` hears each `invoke`
46
+ * without a key that may have run.
47
+ */
48
+ export function keyed(session, domain, next, unkeyed) {
49
+ const invokeSource = session.invoke;
50
+ const mutateSource = session.mutate;
51
+ const querySource = session.query;
52
+ const invoke = ((reference, value, options) => {
53
+ const sent = declaredDurable(domain, reference) ? withKey(options, next) : options;
54
+ const send = () => invokeSource(reference, value, sent);
55
+ return sent?.idempotencyKey === undefined ? unkeyedCall(send, unkeyed) : resendableCall(send);
56
+ });
57
+ const mutate = ((author, options) => {
58
+ const sent = withKey(options, next);
59
+ return sentKeyed(sent, () => mutateSource(author, sent));
60
+ });
61
+ const query = querySource === undefined
62
+ ? {}
63
+ : { query: (...input) => resendableCall(() => querySource(...input)) };
64
+ return Object.freeze({ ...session, invoke, mutate, ...query });
65
+ }
66
+ function sentKeyed(options, send) {
67
+ return options?.idempotencyKey === undefined ? send() : resendableCall(send);
68
+ }
69
+ /**
70
+ * Whether the Domain's Schema closure declares the referenced callable durable. An untyped Path
71
+ * names no declaration and a callable outside the closure has none here: both need their own key.
72
+ */
73
+ function declaredDurable(domain, reference) {
74
+ if (reference === null || typeof reference !== 'object')
75
+ return false;
76
+ const key = reference.callable;
77
+ return (typeof key === 'string' && domain.callable(key)?.execution?.durable === true);
78
+ }
79
+ function withKey(options, next) {
80
+ if (options?.idempotencyKey !== undefined || options?.body !== undefined)
81
+ return options;
82
+ return { ...options, idempotencyKey: next() };
83
+ }
84
+ /** The key sequence of one Step of one Execution: `<execution>.<digest of the name>.<position>`. */
85
+ export async function keySequence(execution, name) {
86
+ const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(name)));
87
+ const prefix = `${execution}.${Array.from(digest.subarray(0, 12), hex).join('')}`;
88
+ let position = 0;
89
+ return () => `${prefix}.${++position}`;
90
+ }
91
+ function hex(byte) {
92
+ return byte.toString(16).padStart(2, '0');
93
+ }
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /** Curated SDK authoring journey. Semantic values remain available from focused subpaths. */
2
2
  export { defineAction } from './application/action/index.js';
3
3
  export type { Action, ActionContext, ActionOutputOf, Caller, DeclaredErrorDefinition, DeclaredErrorFactory, DeclaredErrorFamily, DeclaredErrorOptions, DeclaredErrors, } from './application/action/index.js';
4
- export { defineApplication, defineFrontend, external, requirements, route, routes, vite, } from './application/index.js';
5
- export type { Application, Frontend, Requirements, Route, Routes } from './application/index.js';
4
+ export { defineDomain, defineFrontend, external, requirements, route, routes, vite, } from './application/index.js';
5
+ export type { DomainDefinition, Frontend, Requirements, Route, Routes, } from './application/index.js';
6
6
  export { defineIntegration, defineProvider } from './application/integration/index.js';
7
7
  export type { IntegrationClient, IntegrationDefinition, Provider, } from './application/integration/index.js';
8
8
  export { defineMutation, executeMutation } from './application/mutation/index.js';
@@ -13,9 +13,9 @@ export { defineRuntime } from './application/runtime/index.js';
13
13
  export type { Runtime } from './application/runtime/index.js';
14
14
  export { defineWorkflow } from './application/workflow/index.js';
15
15
  export type { Workflow, WorkflowContext } from './application/workflow/index.js';
16
- export { compile, deploy, runtime } from './deployment/index.js';
16
+ export { compile, runtime } from './deployment/index.js';
17
17
  export type { Build, Deployment, Release } from './deployment/index.js';
18
18
  export { defineProject } from './project/index.js';
19
19
  export type { Project } from './project/index.js';
20
20
  export { serve } from './execution/index.js';
21
- export type { ServedApplication } from './execution/index.js';
21
+ export type { ServedDomain } from './execution/index.js';
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /** Curated SDK authoring journey. Semantic values remain available from focused subpaths. */
2
2
  export { defineAction } from './application/action/index.js';
3
- export { defineApplication, defineFrontend, external, requirements, route, routes, vite, } from './application/index.js';
3
+ export { defineDomain, defineFrontend, external, requirements, route, routes, vite, } from './application/index.js';
4
4
  export { defineIntegration, defineProvider } from './application/integration/index.js';
5
5
  export { defineMutation, executeMutation } from './application/mutation/index.js';
6
6
  export { defineCollectionQuery, defineCompositeQuery, defineQuery, executeQuery, } from './application/query/index.js';
7
7
  export { defineRuntime } from './application/runtime/index.js';
8
8
  export { defineWorkflow } from './application/workflow/index.js';
9
- export { compile, deploy, runtime } from './deployment/index.js';
9
+ export { compile, runtime } from './deployment/index.js';
10
10
  export { defineProject } from './project/index.js';
11
11
  export { serve } from './execution/index.js';
@@ -1,6 +1,2 @@
1
1
  /** Graph-local names retain the canonical Kernel type and constructor identity. */
2
- export { LocalBinding as LocalAlias, isLocalBinding as isLocalAlias, } from '@astrale-os/kernel-core/graph/graph';
3
- /** @deprecated Use LocalAlias. */
4
- export { LocalBinding } from '@astrale-os/kernel-core/graph/graph';
5
- /** @deprecated Use isLocalAlias. */
6
- export { isLocalBinding } from '@astrale-os/kernel-core/graph/graph';
2
+ export { LocalAlias, isLocalAlias } from '@astrale-os/kernel-core/graph/graph';
@@ -1,6 +1,2 @@
1
1
  /** Graph-local names retain the canonical Kernel type and constructor identity. */
2
- export { LocalBinding as LocalAlias, isLocalBinding as isLocalAlias, } from '@astrale-os/kernel-core/graph/graph';
3
- /** @deprecated Use LocalAlias. */
4
- export { LocalBinding } from '@astrale-os/kernel-core/graph/graph';
5
- /** @deprecated Use isLocalAlias. */
6
- export { isLocalBinding } from '@astrale-os/kernel-core/graph/graph';
2
+ export { LocalAlias, isLocalAlias } from '@astrale-os/kernel-core/graph/graph';
@@ -1,3 +1,3 @@
1
1
  /** Canonical graph documents and local aliases. */
2
2
  export * from '@astrale-os/kernel-core/graph/graph';
3
- export { LocalAlias, isLocalAlias, LocalBinding, isLocalBinding } from '../alias.js';
3
+ export { LocalAlias, isLocalAlias } from '../alias.js';
@@ -1,3 +1,3 @@
1
1
  /** Canonical graph documents and local aliases. */
2
2
  export * from '@astrale-os/kernel-core/graph/graph';
3
- export { LocalAlias, isLocalAlias, LocalBinding, isLocalBinding } from '../alias.js';
3
+ export { LocalAlias, isLocalAlias } from '../alias.js';
@@ -1,6 +1,6 @@
1
1
  /** Curated aggregate over canonical graph values. */
2
2
  export { GraphData, GraphDataDecodeError, GraphSpec, GraphSpecDecodeError, } from '@astrale-os/kernel-core/graph/graph';
3
- export { LocalAlias, isLocalAlias, LocalBinding, isLocalBinding } from './alias.js';
3
+ export { LocalAlias, isLocalAlias } from './alias.js';
4
4
  export type { AnonymousNodeSpec, GraphDataJson, GraphSpecEdge, GraphSpecEndpoint, GraphSpecJson, GraphSpecNode, } from '@astrale-os/kernel-core/graph/graph';
5
5
  export * from './edge/index.js';
6
6
  export * from './node/index.js';
@@ -1,6 +1,6 @@
1
1
  /** Curated aggregate over canonical graph values. */
2
2
  export { GraphData, GraphDataDecodeError, GraphSpec, GraphSpecDecodeError, } from '@astrale-os/kernel-core/graph/graph';
3
- export { LocalAlias, isLocalAlias, LocalBinding, isLocalBinding } from './alias.js';
3
+ export { LocalAlias, isLocalAlias } from './alias.js';
4
4
  export * from './edge/index.js';
5
5
  export * from './node/index.js';
6
6
  export * from './path/index.js';
@@ -0,0 +1,2 @@
1
+ /** Canonical DomainRelease v4 and Delivery v2 wire contracts. */
2
+ export * from '@astrale-os/kernel-protocol/release';
@@ -0,0 +1,2 @@
1
+ /** Canonical DomainRelease v4 and Delivery v2 wire contracts. */
2
+ export * from '@astrale-os/kernel-protocol/release';
@@ -0,0 +1,21 @@
1
+ import { func as kernelFunc, method as kernelMethod, type CallablePolicyBuilder, type FunctionInput, type Method, type MethodInput } from '@astrale-os/kernel-dsl/v1/builder';
2
+ /** Who may call an authorized callable: Policy checks, or the constant `true` or `false`. */
3
+ export type CallerRule = CallablePolicyBuilder | boolean;
4
+ /**
5
+ * An executable `authorized` callable declares its caller rule. An abstract Method is a contract
6
+ * on an abstract Class and executable on a concrete one, so its rule is settled by the Class that
7
+ * declares it.
8
+ */
9
+ export type DeclaredCallerRule<Config> = Config extends {
10
+ readonly auth: 'authorized';
11
+ } ? Config extends {
12
+ readonly abstract: true;
13
+ } ? unknown : {
14
+ readonly policy: CallerRule;
15
+ } : unknown;
16
+ /** Author a Function. An `authorized` Function declares its caller rule. */
17
+ export declare function func<const Config extends FunctionInput>(config: Config & DeclaredCallerRule<Config>): ReturnType<typeof kernelFunc<Config>>;
18
+ /** Author a Method. An executable `authorized` Method declares its caller rule. */
19
+ export declare function method<const Config extends MethodInput>(config: Config & DeclaredCallerRule<Config>): ReturnType<typeof kernelMethod<Config>>;
20
+ /** A concrete Class executes every Method it declares, abstract contracts included. */
21
+ export declare function assertNoUndeclaredCallerRule(methods: Readonly<Record<string, Method>> | undefined): void;
@@ -0,0 +1,27 @@
1
+ import { func as kernelFunc, method as kernelMethod, } from '@astrale-os/kernel-dsl/v1/builder';
2
+ /** Authorized abstract Methods authored without a caller rule, until a Class declares them. */
3
+ const undeclared = new WeakSet();
4
+ export function func(config) {
5
+ if (config.auth === 'authorized' && config.policy === undefined)
6
+ undeclaredCallerRule('Function');
7
+ return kernelFunc(config);
8
+ }
9
+ export function method(config) {
10
+ const value = kernelMethod(config);
11
+ if (config.auth === 'authorized' && config.policy === undefined) {
12
+ if (config.abstract !== true)
13
+ undeclaredCallerRule('Method');
14
+ undeclared.add(value);
15
+ }
16
+ return value;
17
+ }
18
+ /** A concrete Class executes every Method it declares, abstract contracts included. */
19
+ export function assertNoUndeclaredCallerRule(methods) {
20
+ for (const [name, value] of Object.entries(methods ?? {})) {
21
+ if (undeclared.has(value))
22
+ undeclaredCallerRule(`Method ${name}`);
23
+ }
24
+ }
25
+ function undeclaredCallerRule(subject) {
26
+ throw new TypeError(`${subject} is authorized and executable: declare its policy with Policy checks, true or false.`);
27
+ }