@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,151 @@
1
+ import { paths } from '@astrale-os/kernel-protocol/issuer/paths';
2
+ import { acceptWorkflowEngine } from '@astrale-os/kernel-protocol/issuer/workflow-engine';
3
+ const MAXIMUM_BYTES = 16 * 1024;
4
+ const MAXIMUM_ISSUERS = 64;
5
+ const TTL_MS = 60_000;
6
+ const TIMEOUT_MS = 10_000;
7
+ /** Discovery failure never admits static keys for an issuer-prefixed request. */
8
+ export class WorkflowEngineUnavailable extends Error {
9
+ name = 'WorkflowEngineUnavailable';
10
+ }
11
+ /** One receiver retains bounded, recently admitted engine authority and deduplicates refreshes. */
12
+ export function workflowEngineDiscovery(fetch, now = Date.now) {
13
+ const bases = new Map();
14
+ return Object.freeze({
15
+ async resolve(issuer) {
16
+ const basis = bases.get(issuer);
17
+ if (basis?.pending !== undefined)
18
+ return basis.pending;
19
+ const observedAt = now();
20
+ if (basis?.engine !== undefined &&
21
+ observedAt >= basis.expiresAt - TTL_MS &&
22
+ observedAt < basis.expiresAt)
23
+ return basis.engine;
24
+ if (basis === undefined) {
25
+ if (bases.size >= MAXIMUM_ISSUERS) {
26
+ // Pending requests retain their slot; arbitrary issuers cannot exceed the concurrency cap.
27
+ const oldest = [...bases].find(([, value]) => value.pending === undefined);
28
+ if (oldest === undefined)
29
+ throw new WorkflowEngineUnavailable('Engine discovery is busy.');
30
+ bases.delete(oldest[0]);
31
+ }
32
+ }
33
+ // A refresh owns a new basis, so a late rejection of old keys cannot discard pending work.
34
+ const selected = {
35
+ expiresAt: 0,
36
+ ...(basis?.rejectedAt === undefined ? {} : { rejectedAt: basis.rejectedAt }),
37
+ };
38
+ bases.set(issuer, selected);
39
+ const pending = discover(fetch, issuer)
40
+ .then((engine) => {
41
+ selected.engine = engine;
42
+ selected.expiresAt = now() + TTL_MS;
43
+ // Move the successfully refreshed authority to the end of the bounded cache.
44
+ bases.delete(issuer);
45
+ bases.set(issuer, selected);
46
+ return engine;
47
+ })
48
+ .finally(() => {
49
+ if (selected.pending === pending)
50
+ selected.pending = undefined;
51
+ });
52
+ selected.pending = pending;
53
+ return pending;
54
+ },
55
+ /** A crypto provider rejected this authority; the next request must discover it again. */
56
+ forget(issuer, observedKeys) {
57
+ if (bases.get(issuer)?.engine?.identity_keys === observedKeys)
58
+ bases.delete(issuer);
59
+ },
60
+ /** Authentication refusal expires the basis for the next request, without replaying its body. */
61
+ invalidate(issuer, observedKeys) {
62
+ const basis = bases.get(issuer);
63
+ const observedAt = now();
64
+ if (basis?.engine?.identity_keys !== observedKeys ||
65
+ (basis.rejectedAt !== undefined &&
66
+ observedAt >= basis.rejectedAt &&
67
+ observedAt - basis.rejectedAt < TTL_MS))
68
+ return;
69
+ basis.rejectedAt = observedAt;
70
+ basis.expiresAt = 0;
71
+ },
72
+ });
73
+ }
74
+ async function discover(fetch, issuer) {
75
+ const url = new URL(paths(issuer).workflowEngine, issuer);
76
+ if (url.protocol !== 'https:')
77
+ throw new WorkflowEngineUnavailable('Engine discovery requires HTTPS.');
78
+ const controller = new AbortController();
79
+ const timer = setTimeout(() => controller.abort(new WorkflowEngineUnavailable('Engine discovery timed out.')), TIMEOUT_MS);
80
+ let expired;
81
+ const timeout = new Promise((_resolve, reject) => {
82
+ expired = () => reject(controller.signal.reason);
83
+ controller.signal.addEventListener('abort', expired, { once: true });
84
+ });
85
+ try {
86
+ return await Promise.race([readDocument(fetch, url, issuer, controller.signal), timeout]);
87
+ }
88
+ catch (cause) {
89
+ if (cause instanceof WorkflowEngineUnavailable)
90
+ throw cause;
91
+ throw new WorkflowEngineUnavailable('Engine discovery is unavailable or invalid.', { cause });
92
+ }
93
+ finally {
94
+ clearTimeout(timer);
95
+ controller.signal.removeEventListener('abort', expired);
96
+ }
97
+ }
98
+ async function readDocument(fetch, url, issuer, signal) {
99
+ const response = await fetch(url.href, {
100
+ method: 'GET',
101
+ redirect: 'manual',
102
+ signal: signal,
103
+ });
104
+ if (!response.ok || response.redirected || (response.url !== '' && response.url !== url.href)) {
105
+ await response.body?.cancel();
106
+ throw new WorkflowEngineUnavailable('Engine discovery did not return its document.');
107
+ }
108
+ if (signal.aborted) {
109
+ await response.body?.cancel();
110
+ signal.throwIfAborted();
111
+ }
112
+ const advertised = response.headers.get('content-length');
113
+ if (advertised !== null && Number(advertised) > MAXIMUM_BYTES) {
114
+ await response.body?.cancel();
115
+ throw new WorkflowEngineUnavailable('Engine discovery exceeds its byte limit.');
116
+ }
117
+ if (response.body === null)
118
+ throw new WorkflowEngineUnavailable('Engine discovery is empty.');
119
+ const reader = response.body.getReader();
120
+ const cancel = () => {
121
+ void reader.cancel(signal.reason).catch(() => { });
122
+ };
123
+ signal.addEventListener('abort', cancel, { once: true });
124
+ const chunks = [];
125
+ let size = 0;
126
+ try {
127
+ for (;;) {
128
+ const { done, value } = await reader.read();
129
+ signal.throwIfAborted();
130
+ if (done)
131
+ break;
132
+ size += value.byteLength;
133
+ if (size > MAXIMUM_BYTES)
134
+ throw new WorkflowEngineUnavailable('Engine discovery exceeds its byte limit.');
135
+ chunks.push(value);
136
+ }
137
+ }
138
+ finally {
139
+ signal.removeEventListener('abort', cancel);
140
+ await reader.cancel();
141
+ reader.releaseLock();
142
+ }
143
+ const bytes = new Uint8Array(size);
144
+ let offset = 0;
145
+ for (const chunk of chunks) {
146
+ bytes.set(chunk, offset);
147
+ offset += chunk.byteLength;
148
+ }
149
+ const document = JSON.parse(new TextDecoder('utf-8', { fatal: true, ignoreBOM: false }).decode(bytes));
150
+ return acceptWorkflowEngine(document, issuer);
151
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * The part of the Restate TypeScript SDK's Fetch entrypoint the durable receiver uses. A runtime
3
+ * supplies the build for its platform: `@restatedev/restate-sdk/fetch` on Node and Bun,
4
+ * `@restatedev/restate-sdk-cloudflare-workers/fetch` on Cloudflare Workers, which cannot compile
5
+ * WebAssembly at run time. Both expose this exact surface.
6
+ */
7
+ export interface DurableEngine {
8
+ createEndpointHandler(options: {
9
+ readonly services: unknown[];
10
+ readonly identityKeys?: string[];
11
+ }): (request: Request) => Promise<Response>;
12
+ workflow(definition: EngineWorkflowDefinition): unknown;
13
+ readonly TerminalError: new (message: string, options?: {
14
+ readonly errorCode?: number;
15
+ readonly metadata?: Record<string, string>;
16
+ }) => Error;
17
+ readonly CancelledError: abstract new (...input: never[]) => Error;
18
+ /** A failure inside `run` that the engine attempts again no earlier than `retryAfter` ms. */
19
+ readonly RetryableError: new (message: string, options?: {
20
+ readonly retryAfter?: number;
21
+ readonly cause?: unknown;
22
+ }) => Error;
23
+ /** The rejection of `orTimeout` once its duration elapses first. */
24
+ readonly TimeoutError: abstract new (...input: never[]) => Error;
25
+ /**
26
+ * The engine's own combinators, the one way to await several journaled operations together: the
27
+ * engine then follows them as one operation, and a replay settles them as the first run did.
28
+ */
29
+ readonly RestatePromise: EngineCombinators;
30
+ }
31
+ export interface EngineCombinators {
32
+ /** Settle once every one of `values`, promises of this engine's `run`, has settled. */
33
+ allSettled(values: readonly PromiseLike<unknown>[]): PromiseLike<readonly PromiseSettledResult<unknown>[]>;
34
+ }
35
+ export interface EngineWorkflowDefinition {
36
+ readonly name: string;
37
+ readonly handlers: {
38
+ readonly run: (context: EngineWorkflowContext, input: unknown) => Promise<unknown>;
39
+ readonly signal: (context: EngineSharedContext, input: unknown) => Promise<unknown>;
40
+ };
41
+ readonly options: {
42
+ readonly workflowRetention: number;
43
+ readonly retryPolicy: EngineRetryPolicy;
44
+ /** How long an attempt may run without progress before the engine aborts it. */
45
+ readonly abortTimeout: number;
46
+ };
47
+ }
48
+ export interface EngineRetryPolicy {
49
+ readonly maxAttempts: number;
50
+ readonly onMaxAttempts: 'pause' | 'kill';
51
+ readonly initialInterval: number;
52
+ readonly maxInterval: number;
53
+ readonly exponentiationFactor: number;
54
+ }
55
+ /**
56
+ * The retry budget of one journaled `run`. Spent, the `run` rejects with a `TerminalError` and the
57
+ * engine attempts it no more; an absent limit does not bound it.
58
+ */
59
+ export interface EngineRunOptions {
60
+ readonly maxRetryAttempts?: number;
61
+ readonly maxRetryDuration?: number;
62
+ readonly initialRetryInterval: number;
63
+ readonly maxRetryInterval: number;
64
+ readonly retryIntervalFactor: number;
65
+ }
66
+ /**
67
+ * A promise the engine journals. Its combinators are journaled too, so a replay settles them as the
68
+ * first run did; racing it against another promise with `Promise.race` would not be.
69
+ */
70
+ export interface EnginePromise<Output> extends PromiseLike<Output> {
71
+ /** Settle with this promise, or reject with `TimeoutError` once `millis` elapse first. */
72
+ orTimeout(millis: number): PromiseLike<unknown>;
73
+ }
74
+ /** Journaled operations of one workflow run. */
75
+ export interface EngineWorkflowContext {
76
+ run<Output>(name: string, action: () => Promise<Output>, options?: EngineRunOptions): PromiseLike<Output>;
77
+ sleep(durationMs: number, name?: string): PromiseLike<void>;
78
+ promise(name: string): {
79
+ get(): EnginePromise<unknown>;
80
+ };
81
+ request(): {
82
+ readonly attemptCompletedSignal: AbortSignal;
83
+ };
84
+ }
85
+ export interface EngineSharedContext {
86
+ promise<Output>(name: string): {
87
+ resolve(value?: Output): PromiseLike<void>;
88
+ };
89
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { DurableExecution } from '../../application/workflow/index.js';
2
+ import type { Value } from '../../platform/value/index.js';
3
+ /** Engine input of one run, as the Kernel submits it. */
4
+ export interface Envelope {
5
+ readonly execution: DurableExecution;
6
+ readonly input: Value;
7
+ }
8
+ /**
9
+ * Decode the run input the engine delivers. Fields a newer Kernel may add are ignored, so a Domain
10
+ * keeps running Executions submitted by it.
11
+ */
12
+ export declare function decodeEnvelope(input: unknown): Envelope;
@@ -0,0 +1,46 @@
1
+ import { issuer } from '../../platform/auth/index.js';
2
+ import { NodeId } from '../../platform/graph/node/index.js';
3
+ import * as portable from '../../platform/value/index.js';
4
+ const VERSION = /^sha256:[0-9a-f]{64}$/u;
5
+ /**
6
+ * Decode the run input the engine delivers. Fields a newer Kernel may add are ignored, so a Domain
7
+ * keeps running Executions submitted by it.
8
+ */
9
+ export function decodeEnvelope(input) {
10
+ const envelope = record(input, 'envelope');
11
+ const fn = record(envelope.function, 'envelope.function');
12
+ const initiator = record(envelope.initiator, 'envelope.initiator');
13
+ if (typeof fn.version !== 'string' || !VERSION.test(fn.version)) {
14
+ throw new TypeError('Durable envelope.function.version is invalid.');
15
+ }
16
+ if (typeof envelope.kernel !== 'string')
17
+ throw new TypeError('Durable envelope.kernel is invalid.');
18
+ const receiver = envelope.receiver === undefined ? undefined : node(envelope.receiver, 'receiver');
19
+ const execution = Object.freeze({
20
+ id: node(envelope.execution, 'execution'),
21
+ function: Object.freeze({
22
+ id: node(fn.id, 'function.id'),
23
+ version: fn.version,
24
+ }),
25
+ kernel: issuer.accept(envelope.kernel),
26
+ initiator: Object.freeze({
27
+ principal: node(initiator.principal, 'initiator.principal'),
28
+ caller: node(initiator.caller, 'initiator.caller'),
29
+ }),
30
+ ...(receiver === undefined ? {} : { receiver }),
31
+ });
32
+ if (!Object.hasOwn(envelope, 'input'))
33
+ throw new TypeError('Durable envelope.input is missing.');
34
+ return Object.freeze({ execution, input: portable.accept(envelope.input) });
35
+ }
36
+ function record(input, label) {
37
+ if (input === null || typeof input !== 'object' || Array.isArray(input)) {
38
+ throw new TypeError(`Durable ${label} must be an object.`);
39
+ }
40
+ return input;
41
+ }
42
+ function node(input, label) {
43
+ if (typeof input !== 'string')
44
+ throw new TypeError(`Durable envelope.${label} is invalid.`);
45
+ return NodeId(input);
46
+ }
@@ -0,0 +1,46 @@
1
+ import type { DurableEngine } from './engine.js';
2
+ /** Failure code of an Execution whose Workflow did not catch a Step that spent its retry budget. */
3
+ export declare const STEP_EXHAUSTED = "STEP_EXHAUSTED";
4
+ /** A Kernel refusal as the wire names it: its protocol code and, when given, its reason code. */
5
+ export interface KernelRefusal {
6
+ readonly code: number;
7
+ readonly reason?: string;
8
+ }
9
+ /**
10
+ * A Step that spent its retry budget. Its message never carries what the last attempt threw; when
11
+ * the Kernel refused that attempt, `refusal` names the refusal by its codes alone.
12
+ */
13
+ export declare class StepExhausted extends Error {
14
+ readonly step: string;
15
+ readonly refusal?: KernelRefusal;
16
+ constructor(step: string, refusal?: KernelRefusal);
17
+ }
18
+ /** The Kernel refusal behind `cause`, itself or one of its causes. */
19
+ export declare function kernelRefusalOf(cause: unknown): KernelRefusal | undefined;
20
+ /**
21
+ * The failure a Step attempt hands the engine: `cause` itself, or, when the Kernel refused the
22
+ * attempt, an error whose message starts with the refusal's codes, so the exhaustion can name it.
23
+ */
24
+ export declare function attemptFailure(cause: unknown): unknown;
25
+ /** A Step attempt's failure that asks the engine to wait `delayMs` before the next attempt. */
26
+ export declare class StepRetryAfter extends Error {
27
+ readonly delayMs: number;
28
+ constructor(delayMs: number, cause?: unknown);
29
+ }
30
+ /**
31
+ * The failure of a Step attempt that waits out a prescribed delay before the next attempt, instead
32
+ * of the Step's backoff: a `retryAfter` failure, or a Kernel refusal that prescribes `retryAfterMs`.
33
+ */
34
+ export declare function delayedRetry(engine: DurableEngine, cause: unknown): Error | undefined;
35
+ /**
36
+ * Encode a declared business error of `definition`, or a Step that spent its retry budget, as a
37
+ * terminal engine failure, or return undefined for any other error, which the engine retries.
38
+ */
39
+ export declare function terminalFailure(engine: DurableEngine, cause: unknown, definition: object): Error | undefined;
40
+ /**
41
+ * What a journaled Step failed with, as the Workflow sees it: its declared business error, rebuilt
42
+ * through the definition's own factory, or `StepExhausted` once the engine spent its retry budget
43
+ * or the Step threw an exhaustion caught from an earlier Step. A replay throws what the live run
44
+ * threw.
45
+ */
46
+ export declare function replayedFailure(engine: DurableEngine, cause: unknown, definition: object, step: string): Error | undefined;
@@ -0,0 +1,160 @@
1
+ import { declaredErrorFactory, declaredErrorOf } from '../../application/error/index.js';
2
+ import { ResponseError, retryAfterOf } from '../../platform/client/index.js';
3
+ /** Metadata key the Kernel reads a declared failure from (`backend/restate` outcome decoding). */
4
+ const FAILURE = 'astrale.failure';
5
+ /** Failure code of an Execution whose Workflow did not catch a Step that spent its retry budget. */
6
+ export const STEP_EXHAUSTED = 'STEP_EXHAUSTED';
7
+ /** The longest delay a Step attempt may ask for, as the Kernel bounds a `retryAfterMs` hint. */
8
+ const MAXIMUM_RETRY_AFTER_MS = 3_600_000;
9
+ /** How deep a failure's causes are searched for the Kernel refusal behind it. */
10
+ const MAXIMUM_CAUSE_DEPTH = 8;
11
+ const REASON_CODE = /^[A-Z][A-Z0-9_]{0,63}$/u;
12
+ /**
13
+ * The mark a failed attempt's message carries when the Kernel refused it. The engine journals only
14
+ * that message, and gives back the last one when the budget is spent.
15
+ */
16
+ const REFUSAL_MARK = /\[kernel refusal ([1-9][0-9]{3})(?: ([A-Z][A-Z0-9_]{0,63}))?\] /gu;
17
+ /**
18
+ * A Step that spent its retry budget. Its message never carries what the last attempt threw; when
19
+ * the Kernel refused that attempt, `refusal` names the refusal by its codes alone.
20
+ */
21
+ export class StepExhausted extends Error {
22
+ step;
23
+ refusal;
24
+ constructor(step, refusal) {
25
+ super(`Workflow Step ${step} exhausted its retries.`);
26
+ this.name = 'StepExhausted';
27
+ this.step = step;
28
+ if (refusal !== undefined)
29
+ this.refusal = refusal;
30
+ }
31
+ }
32
+ /** The Kernel refusal behind `cause`, itself or one of its causes. */
33
+ export function kernelRefusalOf(cause) {
34
+ let current = cause;
35
+ for (let depth = 0; depth < MAXIMUM_CAUSE_DEPTH; depth += 1) {
36
+ if (current instanceof ResponseError) {
37
+ const reason = current.reason?.code;
38
+ return Object.freeze({
39
+ code: current.code,
40
+ ...(reason !== undefined && REASON_CODE.test(reason) ? { reason } : {}),
41
+ });
42
+ }
43
+ if (current === null || typeof current !== 'object')
44
+ return undefined;
45
+ current = current.cause;
46
+ }
47
+ return undefined;
48
+ }
49
+ /**
50
+ * The failure a Step attempt hands the engine: `cause` itself, or, when the Kernel refused the
51
+ * attempt, an error whose message starts with the refusal's codes, so the exhaustion can name it.
52
+ */
53
+ export function attemptFailure(cause) {
54
+ const refusal = kernelRefusalOf(cause);
55
+ if (refusal === undefined)
56
+ return cause;
57
+ return new Error(attemptMessage(cause, refusal), { cause });
58
+ }
59
+ function attemptMessage(cause, refusal = kernelRefusalOf(cause)) {
60
+ const message = cause instanceof Error ? cause.message : String(cause);
61
+ if (refusal === undefined)
62
+ return message;
63
+ const reason = refusal.reason === undefined ? '' : ` ${refusal.reason}`;
64
+ return `[kernel refusal ${refusal.code}${reason}] ${message}`;
65
+ }
66
+ /** The refusal the last attempt's message names, if the Kernel refused it. */
67
+ function refusalIn(message) {
68
+ const marks = [...message.matchAll(REFUSAL_MARK)];
69
+ const last = marks.at(-1);
70
+ if (last === undefined)
71
+ return undefined;
72
+ return Object.freeze({
73
+ code: Number(last[1]),
74
+ ...(last[2] === undefined ? {} : { reason: last[2] }),
75
+ });
76
+ }
77
+ /** A Step attempt's failure that asks the engine to wait `delayMs` before the next attempt. */
78
+ export class StepRetryAfter extends Error {
79
+ delayMs;
80
+ constructor(delayMs, cause) {
81
+ if (!Number.isSafeInteger(delayMs) || delayMs < 0 || delayMs > MAXIMUM_RETRY_AFTER_MS) {
82
+ throw new TypeError(`A Step retry delay must be an integer between 0 and ${MAXIMUM_RETRY_AFTER_MS} ms.`);
83
+ }
84
+ super(cause instanceof Error ? cause.message : `Workflow Step asked to retry after ${delayMs} ms.`, cause === undefined ? undefined : { cause });
85
+ this.name = 'StepRetryAfter';
86
+ this.delayMs = delayMs;
87
+ }
88
+ }
89
+ /**
90
+ * The failure of a Step attempt that waits out a prescribed delay before the next attempt, instead
91
+ * of the Step's backoff: a `retryAfter` failure, or a Kernel refusal that prescribes `retryAfterMs`.
92
+ */
93
+ export function delayedRetry(engine, cause) {
94
+ const delayMs = cause instanceof StepRetryAfter ? cause.delayMs : retryAfterOf(cause);
95
+ if (delayMs === undefined)
96
+ return undefined;
97
+ return new engine.RetryableError(attemptMessage(cause), { retryAfter: delayMs, cause });
98
+ }
99
+ const STATUS = {
100
+ VALIDATION_ERROR: 422,
101
+ NOT_FOUND: 404,
102
+ CONFLICT: 409,
103
+ UNSUPPORTED: 422,
104
+ };
105
+ /**
106
+ * Encode a declared business error of `definition`, or a Step that spent its retry budget, as a
107
+ * terminal engine failure, or return undefined for any other error, which the engine retries.
108
+ */
109
+ export function terminalFailure(engine, cause, definition) {
110
+ if (cause instanceof StepExhausted) {
111
+ return new engine.TerminalError(cause.message, {
112
+ metadata: {
113
+ [FAILURE]: JSON.stringify({
114
+ code: STEP_EXHAUSTED,
115
+ message: cause.message,
116
+ details: {
117
+ step: cause.step,
118
+ ...(cause.refusal === undefined ? {} : { refusal: cause.refusal }),
119
+ },
120
+ }),
121
+ },
122
+ });
123
+ }
124
+ const declared = declaredErrorOf(cause, definition);
125
+ if (declared === undefined)
126
+ return undefined;
127
+ return new engine.TerminalError(declared.message, {
128
+ errorCode: STATUS[declared.family],
129
+ metadata: {
130
+ [FAILURE]: JSON.stringify({
131
+ family: declared.family,
132
+ code: declared.code,
133
+ message: declared.message,
134
+ details: declared.details,
135
+ }),
136
+ },
137
+ });
138
+ }
139
+ /**
140
+ * What a journaled Step failed with, as the Workflow sees it: its declared business error, rebuilt
141
+ * through the definition's own factory, or `StepExhausted` once the engine spent its retry budget
142
+ * or the Step threw an exhaustion caught from an earlier Step. A replay throws what the live run
143
+ * threw.
144
+ */
145
+ export function replayedFailure(engine, cause, definition, step) {
146
+ if (!(cause instanceof engine.TerminalError) || cause instanceof engine.CancelledError) {
147
+ return undefined;
148
+ }
149
+ const encoded = cause.metadata?.[FAILURE];
150
+ // The Step's own code turns every terminal failure into a declared one; the engine's is its budget.
151
+ if (encoded === undefined)
152
+ return new StepExhausted(step, refusalIn(cause.message));
153
+ const failure = JSON.parse(encoded);
154
+ // Only a declared business error has a family, so a declared code may be STEP_EXHAUSTED too.
155
+ if (failure.family === undefined && failure.code === STEP_EXHAUSTED) {
156
+ const details = failure.details;
157
+ return new StepExhausted(details.step, details.refusal);
158
+ }
159
+ return declaredErrorFactory(definition)(failure.code, failure.details);
160
+ }
@@ -0,0 +1,4 @@
1
+ export type { DurableEngine, EnginePromise, EngineRetryPolicy, EngineCombinators, EngineRunOptions, EngineSharedContext, EngineWorkflowContext, EngineWorkflowDefinition, } from './engine.js';
2
+ export { DURABLE_ENGINE_EXPORTS, durableServing, isDurableEngine, type AdmittedDurableServing, type DurableServing, type DurableServingProvider, } from './options.js';
3
+ export { createDurableReceiver, type DurableReceiver } from './receiver.js';
4
+ export { isDurableRequest, isCanonicalDurableRequest } from './route.js';
@@ -0,0 +1,3 @@
1
+ export { DURABLE_ENGINE_EXPORTS, durableServing, isDurableEngine, } from './options.js';
2
+ export { createDurableReceiver } from './receiver.js';
3
+ export { isDurableRequest, isCanonicalDurableRequest } from './route.js';
@@ -0,0 +1,13 @@
1
+ import type { IntegrationAuthentication, IntegrationInvocationOwner } from '../../application/integration/index.js';
2
+ import type { Lifetime } from '../invocation/lifecycle/index.js';
3
+ /**
4
+ * The Integration calls of one Step attempt. Each call takes the Step's next derived key as its
5
+ * call id, so every attempt presents the same ids in the same order, and a keyed operation of
6
+ * source `execution` sends the same idempotency key. A retried Step may run an operation again,
7
+ * so an `unsafe` one is refused before its Provider runs. There is no caller to invoke for.
8
+ */
9
+ export declare function stepCalls(input: {
10
+ readonly next: () => string;
11
+ readonly lifetime: Lifetime;
12
+ readonly auth: IntegrationAuthentication;
13
+ }): IntegrationInvocationOwner;
@@ -0,0 +1,25 @@
1
+ import { active } from '../invocation/lifecycle/index.js';
2
+ /**
3
+ * The Integration calls of one Step attempt. Each call takes the Step's next derived key as its
4
+ * call id, so every attempt presents the same ids in the same order, and a keyed operation of
5
+ * source `execution` sends the same idempotency key. A retried Step may run an operation again,
6
+ * so an `unsafe` one is refused before its Provider runs. There is no caller to invoke for.
7
+ */
8
+ export function stepCalls(input) {
9
+ const { next, lifetime, auth } = input;
10
+ return Object.freeze({
11
+ invoke(call) {
12
+ if (call.replay.kind === 'unsafe') {
13
+ throw new TypeError(`Integration operation ${call.integration}.${call.operation} is unsafe, and a retried ` +
14
+ 'durable Step would run it again.');
15
+ }
16
+ active(lifetime);
17
+ return call.attempt({
18
+ callId: next(),
19
+ signal: lifetime.signal,
20
+ deadline: lifetime.deadline,
21
+ auth,
22
+ });
23
+ },
24
+ });
25
+ }
@@ -0,0 +1,66 @@
1
+ import type { Fetch } from '@astrale-os/kernel-client';
2
+ import type { DurableStepRetry } from '../../application/workflow/index.js';
3
+ import type { DurableEngine, EngineRetryPolicy, EngineRunOptions } from './engine.js';
4
+ /** Serving configuration of the durable Workflows of one deployment. */
5
+ export interface DurableServing {
6
+ /** The Restate SDK Fetch build of this platform. */
7
+ readonly engine: DurableEngine;
8
+ /** Fetch capability used for HTTPS discovery of a canonical request's Kernel engine. */
9
+ readonly fetch?: Fetch;
10
+ /**
11
+ * How long the engine retains a finished run. At least the Host minimum (one hour or more, one
12
+ * day by default); the Kernel resubmits an unstarted call only within half of it. Seven days by
13
+ * default.
14
+ */
15
+ readonly retentionMs?: number;
16
+ /**
17
+ * Retry budget of every Step that declares none: 20 attempts from 1 s to 60 s by default. A Step
18
+ * that spends it fails into its Workflow. `maxAttempts` also bounds the attempts of a run that
19
+ * fails outside any Step, which then pauses for `resume` or `cancel`. The Host caps them.
20
+ */
21
+ readonly retry?: DurableStepRetry;
22
+ /** Deadline of one Step attempt that declares none, including its Kernel calls. One minute by default. */
23
+ readonly stepTimeoutMs?: number;
24
+ }
25
+ /** Resolve a deployment's engine only when its durable receiver is first requested. */
26
+ export type DurableServingProvider = (request: Request) => DurableServing | undefined | Promise<DurableServing | undefined>;
27
+ export interface AdmittedDurableServing {
28
+ readonly engine: DurableEngine;
29
+ readonly fetch: Fetch;
30
+ readonly retentionMs: number;
31
+ /** Attempts of a run that fails outside any Step, before the engine pauses it. */
32
+ readonly retryPolicy: EngineRetryPolicy;
33
+ /** Retry budget and attempt deadline of a Step that declares none. */
34
+ readonly step: StepServing;
35
+ }
36
+ /** What a Step is held to: its retry budget, as the engine applies it, and its attempt deadline. */
37
+ export interface StepServing {
38
+ readonly retry: EngineRunOptions;
39
+ readonly timeoutMs: number;
40
+ }
41
+ /**
42
+ * The members of the Restate SDK Fetch entrypoint the durable receiver uses, which a platform's
43
+ * engine module must export.
44
+ */
45
+ export declare const DURABLE_ENGINE_EXPORTS: readonly ["createEndpointHandler", "workflow", "TerminalError", "CancelledError", "RetryableError", "TimeoutError", "RestatePromise"];
46
+ /**
47
+ * Whether `module` exports the members of the Restate SDK Fetch entrypoint the durable receiver
48
+ * uses: each a function, but `RestatePromise`, the namespace of its combinators.
49
+ */
50
+ export declare function isDurableEngine(module: unknown): boolean;
51
+ /**
52
+ * How long the engine lets an attempt run without progress before it aborts it, declared on every
53
+ * Workflow service. Restate's own default is ten minutes, which a ten-minute Step would race: the
54
+ * margin lets a Step's own timeout fail the attempt, and report it, before the engine cuts it.
55
+ */
56
+ export declare const ENGINE_ABORT_TIMEOUT_MS: number;
57
+ /** Capture one durable serving configuration, failing closed on any gap. */
58
+ export declare function durableServing(input: DurableServing): AdmittedDurableServing;
59
+ /**
60
+ * What one Step is held to: the retry budget and timeout it declares, in place of `fallback`'s. A
61
+ * declared limit replaces both limits of the fallback; an undeclared interval keeps the fallback's.
62
+ */
63
+ export declare function stepServing(declared: {
64
+ readonly retry?: DurableStepRetry | undefined;
65
+ readonly timeoutMs?: number | undefined;
66
+ }, fallback: StepServing): StepServing;