@astrale-os/sdk 0.6.0-beta.2 → 0.6.0-beta.21

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 (403) hide show
  1. package/README.md +74 -14
  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 +17 -8
  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 +5 -5
  8. package/dist/application/define.js +13 -13
  9. package/dist/application/dependency/index.d.ts +1 -1
  10. package/dist/application/dependency/invoker.d.ts +11 -6
  11. package/dist/application/domain.d.ts +28 -0
  12. package/dist/application/index.d.ts +3 -3
  13. package/dist/application/index.js +1 -1
  14. package/dist/application/mutation/authoring/properties.d.ts +5 -3
  15. package/dist/application/mutation/authoring/properties.js +35 -2
  16. package/dist/application/mutation/authoring/transition.js +4 -1
  17. package/dist/application/routes/admission.d.ts +2 -2
  18. package/dist/application/routes/admission.js +1 -1
  19. package/dist/application/routes/route.d.ts +2 -2
  20. package/dist/application/runtime/actions.js +3 -0
  21. package/dist/application/runtime/workflows.d.ts +2 -0
  22. package/dist/application/runtime/workflows.js +5 -0
  23. package/dist/application/workflow/authoring.d.ts +3 -2
  24. package/dist/application/workflow/context.d.ts +8 -2
  25. package/dist/application/workflow/define.d.ts +3 -3
  26. package/dist/application/workflow/define.js +19 -3
  27. package/dist/application/workflow/durable.d.ts +83 -0
  28. package/dist/application/workflow/index.d.ts +3 -2
  29. package/dist/application/workflow/runner/inline.js +3 -4
  30. package/dist/application/workflow/runner/runner.d.ts +2 -2
  31. package/dist/application/workflow/step/output.d.ts +2 -0
  32. package/dist/application/workflow/step/output.js +73 -0
  33. package/dist/application/workflow/workflow.d.ts +12 -0
  34. package/dist/deployment/adapter/adapter.d.ts +59 -11
  35. package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
  36. package/dist/deployment/adapter/bundle/file.d.ts +10 -0
  37. package/dist/deployment/adapter/bundle/index.d.ts +2 -0
  38. package/dist/deployment/adapter/define.d.ts +25 -3
  39. package/dist/deployment/adapter/define.js +101 -24
  40. package/dist/deployment/adapter/index.d.ts +6 -3
  41. package/dist/deployment/adapter/index.js +1 -0
  42. package/dist/deployment/adapter/legacy/adapter.d.ts +40 -0
  43. package/dist/deployment/adapter/{deploy → legacy/deploy}/context.d.ts +6 -2
  44. package/dist/deployment/adapter/legacy/deploy/index.d.ts +2 -0
  45. package/dist/deployment/adapter/legacy/deploy/index.js +1 -0
  46. package/dist/deployment/adapter/legacy/deploy/result.d.ts +89 -0
  47. package/dist/deployment/adapter/legacy/deploy/result.js +1 -0
  48. package/dist/deployment/adapter/legacy/index.d.ts +24 -0
  49. package/dist/deployment/adapter/legacy/index.js +1 -0
  50. package/dist/deployment/adapter/legacy/prepare/artifact.d.ts +43 -0
  51. package/dist/deployment/adapter/legacy/prepare/artifact.js +1 -0
  52. package/dist/deployment/adapter/legacy/prepare/context.d.ts +33 -0
  53. package/dist/deployment/adapter/legacy/prepare/context.js +1 -0
  54. package/dist/deployment/adapter/legacy/prepare/index.d.ts +2 -0
  55. package/dist/deployment/adapter/legacy/prepare/index.js +1 -0
  56. package/dist/deployment/adapter/release/context.d.ts +95 -0
  57. package/dist/deployment/adapter/release/context.js +1 -0
  58. package/dist/deployment/adapter/release/index.d.ts +3 -0
  59. package/dist/deployment/adapter/release/index.js +1 -0
  60. package/dist/deployment/adapter/release/list.d.ts +53 -0
  61. package/dist/deployment/adapter/release/list.js +1 -0
  62. package/dist/deployment/adapter/release/refusal.d.ts +10 -0
  63. package/dist/deployment/adapter/release/refusal.js +14 -0
  64. package/dist/deployment/adapter/release/result.d.ts +56 -0
  65. package/dist/deployment/adapter/release/result.js +1 -0
  66. package/dist/deployment/address/configuration.d.ts +83 -0
  67. package/dist/deployment/address/configuration.js +262 -0
  68. package/dist/deployment/address/fingerprint.d.ts +5 -0
  69. package/dist/deployment/address/fingerprint.js +27 -0
  70. package/dist/deployment/address/index.d.ts +5 -0
  71. package/dist/deployment/address/index.js +5 -0
  72. package/dist/deployment/address/label.d.ts +42 -0
  73. package/dist/deployment/address/label.js +80 -0
  74. package/dist/deployment/address/line.d.ts +29 -0
  75. package/dist/deployment/address/line.js +53 -0
  76. package/dist/deployment/address/record.d.ts +52 -0
  77. package/dist/deployment/address/record.js +104 -0
  78. package/dist/deployment/address/summary.d.ts +57 -0
  79. package/dist/deployment/address/summary.js +117 -0
  80. package/dist/deployment/address/vectors.d.ts +60 -0
  81. package/dist/deployment/address/vectors.js +517 -0
  82. package/dist/deployment/build/build.d.ts +2 -2
  83. package/dist/deployment/build/compile.d.ts +4 -4
  84. package/dist/deployment/build/compile.js +17 -17
  85. package/dist/deployment/build/index.d.ts +1 -0
  86. package/dist/deployment/build/index.js +1 -0
  87. package/dist/deployment/build/manifest.d.ts +59 -0
  88. package/dist/deployment/build/manifest.js +118 -0
  89. package/dist/deployment/build/material.js +2 -2
  90. package/dist/deployment/build/schema.d.ts +2 -2
  91. package/dist/deployment/deploy.d.ts +10 -10
  92. package/dist/deployment/deploy.js +3 -3
  93. package/dist/deployment/deployment.d.ts +9 -4
  94. package/dist/deployment/environment.d.ts +6 -0
  95. package/dist/deployment/environment.js +6 -0
  96. package/dist/deployment/index.d.ts +4 -4
  97. package/dist/deployment/index.js +1 -1
  98. package/dist/deployment/release/addressing.d.ts +9 -1
  99. package/dist/deployment/release/assemble.d.ts +6 -3
  100. package/dist/deployment/release/assemble.js +12 -10
  101. package/dist/deployment/release/index.d.ts +2 -0
  102. package/dist/deployment/release/index.js +2 -0
  103. package/dist/deployment/release/legacy/admission.d.ts +3 -0
  104. package/dist/deployment/release/legacy/admission.js +8 -0
  105. package/dist/deployment/release/legacy/assemble.d.ts +5 -0
  106. package/dist/deployment/release/legacy/assemble.js +20 -0
  107. package/dist/deployment/release/legacy/index.d.ts +35 -0
  108. package/dist/deployment/release/legacy/index.js +34 -0
  109. package/dist/deployment/release/legacy/release.d.ts +12 -0
  110. package/dist/deployment/release/legacy/release.js +1 -0
  111. package/dist/deployment/release/{publication → legacy}/seal.d.ts +3 -3
  112. package/dist/deployment/release/legacy/seal.js +17 -0
  113. package/dist/deployment/release/release.d.ts +16 -5
  114. package/dist/deployment/release/runtime.d.ts +2 -0
  115. package/dist/deployment/release/runtime.js +2 -0
  116. package/dist/deployment/release/seal.d.ts +14 -0
  117. package/dist/deployment/release/seal.js +22 -0
  118. package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
  119. package/dist/deployment/release/{publication → served}/callables.js +2 -2
  120. package/dist/deployment/release/served/index.d.ts +12 -0
  121. package/dist/deployment/release/served/index.js +22 -0
  122. package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
  123. package/dist/deployment/runtime/admission.d.ts +2 -2
  124. package/dist/deployment/runtime/admission.js +5 -5
  125. package/dist/deployment/verify/index.d.ts +2 -1
  126. package/dist/deployment/verify/index.js +1 -0
  127. package/dist/deployment/verify/preflight/artifact.d.ts +1 -1
  128. package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
  129. package/dist/deployment/verify/preflight/bundle.js +71 -0
  130. package/dist/deployment/verify/preflight/index.d.ts +2 -1
  131. package/dist/deployment/verify/preflight/index.js +1 -0
  132. package/dist/deployment/verify/preflight/publication.d.ts +2 -2
  133. package/dist/deployment/verify/preflight/publication.js +4 -3
  134. package/dist/deployment/verify/readiness/deployment.js +7 -15
  135. package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
  136. package/dist/deployment/verify/readiness/fetch.js +26 -0
  137. package/dist/deployment/verify/readiness/identity.d.ts +3 -6
  138. package/dist/deployment/verify/readiness/identity.js +3 -3
  139. package/dist/deployment/verify/readiness/index.d.ts +11 -7
  140. package/dist/deployment/verify/readiness/index.js +15 -4
  141. package/dist/deployment/verify/readiness/legacy/index.d.ts +2 -0
  142. package/dist/deployment/verify/readiness/legacy/index.js +2 -0
  143. package/dist/deployment/verify/readiness/legacy/publication.d.ts +12 -0
  144. package/dist/deployment/verify/readiness/legacy/publication.js +23 -0
  145. package/dist/deployment/verify/readiness/release.d.ts +8 -0
  146. package/dist/deployment/verify/readiness/release.js +22 -0
  147. package/dist/execution/identity/authentication.d.ts +23 -2
  148. package/dist/execution/identity/authentication.js +64 -40
  149. package/dist/execution/identity/callback.d.ts +16 -15
  150. package/dist/execution/identity/callback.js +21 -16
  151. package/dist/execution/identity/delivery.d.ts +11 -4
  152. package/dist/execution/identity/delivery.js +47 -20
  153. package/dist/execution/identity/identity.d.ts +18 -3
  154. package/dist/execution/identity/identity.js +8 -4
  155. package/dist/execution/identity/jwks.js +57 -12
  156. package/dist/execution/index.d.ts +4 -2
  157. package/dist/execution/index.js +2 -1
  158. package/dist/execution/invocation/admission/authentication.d.ts +3 -8
  159. package/dist/execution/invocation/admission/authentication.js +10 -24
  160. package/dist/execution/invocation/admission/authority.d.ts +15 -8
  161. package/dist/execution/invocation/admission/authority.js +5 -0
  162. package/dist/execution/invocation/admission/input.d.ts +2 -2
  163. package/dist/execution/invocation/admission/input.js +16 -2
  164. package/dist/execution/invocation/dependency/bind.d.ts +1 -1
  165. package/dist/execution/invocation/dependency/bind.js +35 -14
  166. package/dist/execution/invocation/dispatch/context.d.ts +2 -1
  167. package/dist/execution/invocation/dispatch/context.js +1 -1
  168. package/dist/execution/invocation/invocation.js +58 -16
  169. package/dist/execution/invocation/result/project.js +41 -1
  170. package/dist/execution/node/serve.d.ts +2 -2
  171. package/dist/execution/node/serve.js +1 -1
  172. package/dist/execution/runtime/index.d.ts +1 -0
  173. package/dist/execution/runtime/index.js +1 -0
  174. package/dist/execution/runtime/load.d.ts +3 -3
  175. package/dist/execution/runtime/load.js +3 -2
  176. package/dist/execution/runtime/release.d.ts +22 -0
  177. package/dist/execution/runtime/release.js +14 -0
  178. package/dist/execution/serve.d.ts +10 -4
  179. package/dist/execution/serve.js +3 -0
  180. package/dist/execution/service/create.js +39 -7
  181. package/dist/execution/service/initialization.d.ts +4 -4
  182. package/dist/execution/service/initialization.js +23 -14
  183. package/dist/execution/service/release.d.ts +2 -2
  184. package/dist/execution/service/release.js +3 -2
  185. package/dist/execution/service/service.d.ts +15 -5
  186. package/dist/execution/service/serving/delivery.d.ts +6 -0
  187. package/dist/execution/service/{publication → serving}/delivery.js +5 -1
  188. package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
  189. package/dist/execution/service/serving/installation.d.ts +4 -0
  190. package/dist/execution/service/serving/installation.js +9 -0
  191. package/dist/execution/service/serving/legacy/index.d.ts +15 -0
  192. package/dist/execution/service/serving/legacy/index.js +19 -0
  193. package/dist/execution/service/serving/source.d.ts +18 -0
  194. package/dist/execution/service/serving/source.js +19 -0
  195. package/dist/execution/workflows/discovery.d.ts +14 -0
  196. package/dist/execution/workflows/discovery.js +151 -0
  197. package/dist/execution/workflows/engine.d.ts +52 -0
  198. package/dist/execution/workflows/engine.js +1 -0
  199. package/dist/execution/workflows/envelope.d.ts +12 -0
  200. package/dist/execution/workflows/envelope.js +46 -0
  201. package/dist/execution/workflows/failure.d.ts +11 -0
  202. package/dist/execution/workflows/failure.js +43 -0
  203. package/dist/execution/workflows/index.d.ts +4 -0
  204. package/dist/execution/workflows/index.js +3 -0
  205. package/dist/execution/workflows/options.d.ts +40 -0
  206. package/dist/execution/workflows/options.js +83 -0
  207. package/dist/execution/workflows/receiver.d.ts +22 -0
  208. package/dist/execution/workflows/receiver.js +99 -0
  209. package/dist/execution/workflows/route.d.ts +14 -0
  210. package/dist/execution/workflows/route.js +40 -0
  211. package/dist/execution/workflows/run.d.ts +22 -0
  212. package/dist/execution/workflows/run.js +211 -0
  213. package/dist/index.d.ts +3 -3
  214. package/dist/index.js +1 -1
  215. package/dist/platform/release/index.d.ts +27 -0
  216. package/dist/platform/release/index.js +27 -0
  217. package/dist/platform/schema/index.d.ts +2 -1
  218. package/dist/platform/schema/property-input.d.ts +15 -0
  219. package/dist/platform/schema/property-input.js +1 -0
  220. package/dist/platform/schema/property.d.ts +5 -0
  221. package/dist/platform/versioning/dependents.d.ts +18 -0
  222. package/dist/platform/versioning/dependents.js +15 -0
  223. package/dist/platform/versioning/index.d.ts +5 -0
  224. package/dist/platform/versioning/index.js +5 -0
  225. package/dist/platform/versioning/name.d.ts +38 -0
  226. package/dist/platform/versioning/name.js +58 -0
  227. package/dist/platform/versioning/reference.d.ts +48 -0
  228. package/dist/platform/versioning/reference.js +95 -0
  229. package/dist/platform/versioning/version.d.ts +72 -0
  230. package/dist/platform/versioning/version.js +98 -0
  231. package/dist/project/admit.js +2 -2
  232. package/dist/project/define.d.ts +4 -4
  233. package/dist/project/define.js +55 -35
  234. package/dist/project/index.d.ts +1 -1
  235. package/dist/project/install-command.d.ts +10 -0
  236. package/dist/project/install-command.js +13 -0
  237. package/dist/project/project.d.ts +10 -8
  238. package/dist/testing/dataset/builder.d.ts +3 -3
  239. package/dist/testing/dataset/define.d.ts +1 -1
  240. package/dist/testing/load.js +1 -1
  241. package/dist/tooling/cli/arguments.d.ts +10 -5
  242. package/dist/tooling/cli/arguments.js +123 -52
  243. package/dist/tooling/cli/build.d.ts +55 -0
  244. package/dist/tooling/cli/build.js +77 -0
  245. package/dist/tooling/cli/bun.d.ts +0 -1
  246. package/dist/tooling/cli/bun.js +0 -7
  247. package/dist/tooling/cli/commit.d.ts +35 -0
  248. package/dist/tooling/cli/commit.js +235 -0
  249. package/dist/tooling/cli/deploy-mode.d.ts +82 -0
  250. package/dist/tooling/cli/deploy-mode.js +135 -0
  251. package/dist/tooling/cli/deploy-result.d.ts +85 -0
  252. package/dist/tooling/cli/deploy-result.js +64 -0
  253. package/dist/tooling/cli/diff/declared.d.ts +7 -0
  254. package/dist/tooling/cli/diff/declared.js +27 -0
  255. package/dist/tooling/cli/diff/index.d.ts +30 -0
  256. package/dist/tooling/cli/diff/index.js +58 -0
  257. package/dist/tooling/cli/diff/render.d.ts +15 -0
  258. package/dist/tooling/cli/diff/render.js +131 -0
  259. package/dist/tooling/cli/diff/report.d.ts +88 -0
  260. package/dist/tooling/cli/diff/report.js +154 -0
  261. package/dist/tooling/cli/dotenv.d.ts +2 -2
  262. package/dist/tooling/cli/dotenv.js +3 -33
  263. package/dist/tooling/cli/help.js +176 -59
  264. package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
  265. package/dist/tooling/cli/immutable-deployment.js +135 -0
  266. package/dist/tooling/cli/index.d.ts +10 -4
  267. package/dist/tooling/cli/index.js +5 -3
  268. package/dist/tooling/cli/installed-on.d.ts +83 -0
  269. package/dist/tooling/cli/installed-on.js +156 -0
  270. package/dist/tooling/cli/legacy/deploy-result.d.ts +28 -0
  271. package/dist/tooling/cli/legacy/deploy-result.js +37 -0
  272. package/dist/tooling/cli/legacy/stable-target-adapter.d.ts +21 -0
  273. package/dist/tooling/cli/legacy/stable-target-adapter.js +14 -0
  274. package/dist/tooling/cli/legacy/stable-target-deploy.d.ts +40 -0
  275. package/dist/tooling/cli/legacy/stable-target-deploy.js +102 -0
  276. package/dist/tooling/cli/legacy/uploaded-build.d.ts +11 -0
  277. package/dist/tooling/cli/legacy/uploaded-build.js +22 -0
  278. package/dist/tooling/cli/list.d.ts +154 -0
  279. package/dist/tooling/cli/list.js +381 -0
  280. package/dist/tooling/cli/log.d.ts +5 -0
  281. package/dist/tooling/cli/log.js +9 -0
  282. package/dist/tooling/cli/orchestrate.d.ts +0 -6
  283. package/dist/tooling/cli/orchestrate.js +236 -88
  284. package/dist/tooling/cli/project.d.ts +3 -3
  285. package/dist/tooling/cli/publish/index.d.ts +73 -0
  286. package/dist/tooling/cli/publish/index.js +346 -0
  287. package/dist/tooling/cli/publish/report.d.ts +49 -0
  288. package/dist/tooling/cli/publish/report.js +15 -0
  289. package/dist/tooling/cli/registry/client.d.ts +114 -0
  290. package/dist/tooling/cli/registry/client.js +346 -0
  291. package/dist/tooling/cli/registry/error.d.ts +11 -0
  292. package/dist/tooling/cli/registry/error.js +17 -0
  293. package/dist/tooling/cli/registry/executable.d.ts +29 -0
  294. package/dist/tooling/cli/registry/executable.js +90 -0
  295. package/dist/tooling/cli/registry/index.d.ts +9 -0
  296. package/dist/tooling/cli/registry/index.js +8 -0
  297. package/dist/tooling/cli/registry/installations.d.ts +67 -0
  298. package/dist/tooling/cli/registry/installations.js +108 -0
  299. package/dist/tooling/cli/registry/process.d.ts +36 -0
  300. package/dist/tooling/cli/registry/process.js +119 -0
  301. package/dist/tooling/cli/secrets.d.ts +9 -0
  302. package/dist/tooling/cli/secrets.js +19 -0
  303. package/dist/tooling/cli/yank.d.ts +34 -0
  304. package/dist/tooling/cli/yank.js +32 -0
  305. package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -1
  306. package/dist/tooling/linter/implementations/source/callable-requirements.js +10 -10
  307. package/dist/tooling/linter/implementations/source/dependencies.js +12 -10
  308. package/dist/tooling/linter/implementations/source/global.js +1 -1
  309. package/dist/tooling/linter/implementations/source/mutations.js +17 -17
  310. package/dist/tooling/linter/implementations/source/providers.js +5 -5
  311. package/dist/tooling/linter/implementations/source/views.js +2 -2
  312. package/dist/tooling/linter/policy/generated.js +16 -16
  313. package/dist/tooling/packaging/declarations/ownership.js +1 -1
  314. package/dist/tooling/packaging/finalize.d.ts +1 -1
  315. package/dist/tooling/packaging/finalize.js +1 -1
  316. package/package.json +32 -11
  317. package/dist/application/application.d.ts +0 -28
  318. package/dist/deployment/adapter/deploy/index.d.ts +0 -2
  319. package/dist/deployment/adapter/deploy/result.d.ts +0 -50
  320. package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
  321. package/dist/deployment/adapter/prepare/context.d.ts +0 -23
  322. package/dist/deployment/adapter/prepare/index.d.ts +0 -2
  323. package/dist/deployment/release/publication/index.d.ts +0 -6
  324. package/dist/deployment/release/publication/index.js +0 -6
  325. package/dist/deployment/release/publication/manifest.d.ts +0 -3
  326. package/dist/deployment/release/publication/manifest.js +0 -5
  327. package/dist/deployment/release/publication/requirements.d.ts +0 -3
  328. package/dist/deployment/release/publication/requirements.js +0 -3
  329. package/dist/deployment/release/publication/seal.js +0 -39
  330. package/dist/deployment/verify/readiness/publication.d.ts +0 -11
  331. package/dist/deployment/verify/readiness/publication.js +0 -41
  332. package/dist/execution/service/publication/delivery.d.ts +0 -2
  333. package/dist/execution/service/publication/installation.d.ts +0 -3
  334. package/dist/execution/service/publication/installation.js +0 -8
  335. package/dist/execution/service/publication/source.d.ts +0 -3
  336. package/dist/execution/service/publication/source.js +0 -11
  337. package/dist/platform/publication/index.d.ts +0 -2
  338. package/dist/platform/publication/index.js +0 -2
  339. package/dist/tooling/cli/astrale/authority.d.ts +0 -5
  340. package/dist/tooling/cli/astrale/authority.js +0 -11
  341. package/dist/tooling/cli/astrale/executable.d.ts +0 -2
  342. package/dist/tooling/cli/astrale/executable.js +0 -47
  343. package/dist/tooling/cli/astrale/failure.d.ts +0 -6
  344. package/dist/tooling/cli/astrale/failure.js +0 -48
  345. package/dist/tooling/cli/astrale/instance.d.ts +0 -11
  346. package/dist/tooling/cli/astrale/instance.js +0 -52
  347. package/dist/tooling/cli/astrale/process.d.ts +0 -13
  348. package/dist/tooling/cli/astrale/process.js +0 -94
  349. package/dist/tooling/cli/astrale/version.d.ts +0 -18
  350. package/dist/tooling/cli/astrale/version.js +0 -55
  351. package/dist/tooling/cli/credential.d.ts +0 -2
  352. package/dist/tooling/cli/credential.js +0 -57
  353. package/dist/tooling/cli/development/candidate.d.ts +0 -25
  354. package/dist/tooling/cli/development/candidate.js +0 -176
  355. package/dist/tooling/cli/development/deployment.d.ts +0 -16
  356. package/dist/tooling/cli/development/deployment.js +0 -39
  357. package/dist/tooling/cli/development/develop.d.ts +0 -11
  358. package/dist/tooling/cli/development/develop.js +0 -243
  359. package/dist/tooling/cli/development/lease.d.ts +0 -18
  360. package/dist/tooling/cli/development/lease.js +0 -163
  361. package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
  362. package/dist/tooling/cli/development/lifecycle.js +0 -43
  363. package/dist/tooling/cli/development/project-imports.d.ts +0 -22
  364. package/dist/tooling/cli/development/project-imports.js +0 -39
  365. package/dist/tooling/cli/development/project-lock.d.ts +0 -16
  366. package/dist/tooling/cli/development/project-lock.js +0 -41
  367. package/dist/tooling/cli/development/rebuild.d.ts +0 -13
  368. package/dist/tooling/cli/development/rebuild.js +0 -58
  369. package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
  370. package/dist/tooling/cli/development/release-evidence.js +0 -10
  371. package/dist/tooling/cli/development/report.d.ts +0 -6
  372. package/dist/tooling/cli/development/report.js +0 -14
  373. package/dist/tooling/cli/development/session-file.d.ts +0 -53
  374. package/dist/tooling/cli/development/session-file.js +0 -337
  375. package/dist/tooling/cli/development/source-watch.d.ts +0 -14
  376. package/dist/tooling/cli/development/source-watch.js +0 -140
  377. package/dist/tooling/cli/development/sources.d.ts +0 -7
  378. package/dist/tooling/cli/development/sources.js +0 -48
  379. package/dist/tooling/cli/development/target-lock.d.ts +0 -16
  380. package/dist/tooling/cli/development/target-lock.js +0 -68
  381. package/dist/tooling/cli/development/view.d.ts +0 -28
  382. package/dist/tooling/cli/development/view.js +0 -151
  383. package/dist/tooling/cli/environment-release.d.ts +0 -21
  384. package/dist/tooling/cli/environment-release.js +0 -46
  385. package/dist/tooling/cli/evidence.d.ts +0 -11
  386. package/dist/tooling/cli/evidence.js +0 -53
  387. package/dist/tooling/cli/installation/index.d.ts +0 -2
  388. package/dist/tooling/cli/installation/index.js +0 -1
  389. package/dist/tooling/cli/installation/observation.d.ts +0 -10
  390. package/dist/tooling/cli/installation/observation.js +0 -44
  391. package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
  392. package/dist/tooling/cli/installation/reconcile.js +0 -122
  393. /package/dist/application/{application.js → domain.js} +0 -0
  394. /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
  395. /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
  396. /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
  397. /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
  398. /package/dist/deployment/adapter/{prepare/artifact.js → legacy/adapter.js} +0 -0
  399. /package/dist/deployment/adapter/{prepare → legacy/deploy}/context.js +0 -0
  400. /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
  401. /package/dist/deployment/release/{publication → served}/routes.js +0 -0
  402. /package/dist/deployment/release/{publication → served}/views.js +0 -0
  403. /package/dist/execution/service/{publication → serving}/index.js +0 -0
@@ -3,11 +3,12 @@ import { isRuntime } from '../../application/runtime/index.js';
3
3
  import { invocationPath } from '../../deployment/release/invocation.js';
4
4
  import { identity as captureIdentity } from '../identity/index.js';
5
5
  import { createHandler } from '../invocation/index.js';
6
- import { initialize, load } from '../runtime/index.js';
6
+ import { initialize, load, serving as servedRelease } from '../runtime/index.js';
7
+ import { createDurableReceiver, durableServing, isDurableRequest, } from '../workflows/index.js';
7
8
  import { initialization } from './initialization.js';
8
9
  import { lifecycle } from './lifecycle.js';
9
- import { delivery, installation, source } from './publication/index.js';
10
10
  import { loadRelease } from './release.js';
11
+ import { delivery, installation, source } from './serving/index.js';
11
12
  /** Create one lazy running Service around the exact current Release. */
12
13
  export function createService(input) {
13
14
  if (input === null || typeof input !== 'object' || Array.isArray(input))
@@ -16,24 +17,28 @@ export function createService(input) {
16
17
  throw new TypeError('Service Runtime is not admitted.');
17
18
  const selectedIdentity = captureIdentity(input.identity);
18
19
  const providedDelivery = delivery(input.delivery);
20
+ const durable = input.durable;
21
+ // Preserve eager admission for an already loaded engine; providers stay outside ordinary startup.
22
+ const serving = durable === undefined || typeof durable === 'function' ? undefined : durableServing(durable);
19
23
  let running;
20
24
  const state = lifecycle(() => running?.server.drain());
21
25
  const realized = initialization(async () => {
22
26
  const release = await loadRelease(input.load, input.environment, input.runtime);
23
- if (release.addressing.issuer !== selectedIdentity.issuer) {
27
+ const served = servedRelease(release);
28
+ if (served.issuer !== selectedIdentity.issuer) {
24
29
  throw new TypeError('Service Identity differs from Release Addressing.');
25
30
  }
26
31
  if (selectedIdentity.subject !== release.build.schema.compiled.root.origin) {
27
32
  throw new TypeError('Service Identity subject differs from the Release Domain origin.');
28
33
  }
29
- const selectedDelivery = providedDelivery ?? selectedIdentity.delivery(release.publication);
30
- installation(release, selectedDelivery);
34
+ const selectedDelivery = providedDelivery ?? selectedIdentity.delivery(served.document);
35
+ installation(served.document, selectedDelivery);
31
36
  const loaded = load(release);
32
37
  const runtime = await initialize(loaded, input.environment);
33
38
  const prepared = prepareServer({
34
39
  ...serverOptions(input.server),
35
40
  path: invocationPath(),
36
- publicOrigin: release.addressing.publicUrl,
41
+ publicOrigin: served.publicUrl,
37
42
  invocation: {
38
43
  source: selectedIdentity.issuer,
39
44
  next: () => crypto.randomUUID(),
@@ -42,7 +47,7 @@ export function createService(input) {
42
47
  ...(selectedIdentity.tokenExchange === undefined
43
48
  ? {}
44
49
  : { tokenExchange: selectedIdentity.tokenExchange }),
45
- publication: source(loaded),
50
+ ...source(loaded),
46
51
  ...(selectedDelivery === undefined ? {} : { delivery: selectedDelivery }),
47
52
  });
48
53
  const server = prepared.create(createHandler({
@@ -55,6 +60,19 @@ export function createService(input) {
55
60
  server.drain();
56
61
  return running;
57
62
  });
63
+ const receiver = initialization(async (request) => {
64
+ const selected = typeof durable === 'function' ? await durable(request) : undefined;
65
+ const configuration = serving ?? (selected === undefined ? undefined : durableServing(selected));
66
+ if (configuration === undefined)
67
+ return undefined;
68
+ const { runtime } = await realized.get();
69
+ return createDurableReceiver({
70
+ workflows: runtime.loaded.registry.workflows,
71
+ domain: runtime.loaded.domain,
72
+ identity: selectedIdentity,
73
+ serving: configuration,
74
+ });
75
+ });
58
76
  let closing;
59
77
  const service = Object.freeze({
60
78
  async fetch(request, host) {
@@ -63,6 +81,13 @@ export function createService(input) {
63
81
  const ready = await realized.get();
64
82
  if (!state.accepting)
65
83
  return unavailable();
84
+ // Without engine configuration only durable calls fail: the engine's discovery is refused.
85
+ if (isDurableRequest(request)) {
86
+ const selected = await receiver.get(request);
87
+ if (!state.accepting)
88
+ return unavailable();
89
+ return selected?.fetch(request) ?? notServed();
90
+ }
66
91
  return ready.server.app.fetch(request, host);
67
92
  },
68
93
  async release() {
@@ -95,6 +120,7 @@ function serverOptions(input) {
95
120
  'issuer',
96
121
  'publicOrigin',
97
122
  'tokenExchange',
123
+ 'release',
98
124
  'publication',
99
125
  'delivery',
100
126
  'handler',
@@ -104,6 +130,12 @@ function serverOptions(input) {
104
130
  }
105
131
  return input;
106
132
  }
133
+ function notServed() {
134
+ return new Response('{"error":"This deployment serves no durable Workflows."}', {
135
+ status: 404,
136
+ headers: { 'content-type': 'application/json', 'cache-control': 'no-store' },
137
+ });
138
+ }
107
139
  function unavailable() {
108
140
  return new Response('{"error":"Service is draining."}', {
109
141
  status: 503,
@@ -1,6 +1,6 @@
1
- export interface Initialization<Value> {
2
- get(): Promise<Value>;
1
+ export interface Initialization<Value, Arguments extends readonly unknown[] = []> {
2
+ get(...args: Arguments): Promise<Value>;
3
3
  current(): Promise<Value> | undefined;
4
4
  }
5
- /** Share one successful initialization and allow a later retry after failure. */
6
- export declare function initialization<Value>(create: () => Promise<Value>): Initialization<Value>;
5
+ /** Share an initialized value; absence and failure leave initialization retryable. */
6
+ export declare function initialization<Value, Arguments extends readonly unknown[] = []>(create: (...args: Arguments) => Promise<Value>): Initialization<Value, Arguments>;
@@ -1,18 +1,27 @@
1
- /** Share one successful initialization and allow a later retry after failure. */
1
+ /** Share an initialized value; absence and failure leave initialization retryable. */
2
2
  export function initialization(create) {
3
- let current;
3
+ let state;
4
+ const get = (...args) => {
5
+ if (state?.phase === 'ready')
6
+ return state.promise;
7
+ if (state !== undefined) {
8
+ // Absence can depend on the initializing request. A waiter gets its own eligibility check.
9
+ return state.promise.then((value) => (value === undefined ? get(...args) : value));
10
+ }
11
+ const pending = create(...args).then((value) => {
12
+ if (state?.promise === pending)
13
+ state = value === undefined ? undefined : { phase: 'ready', promise: pending };
14
+ return value;
15
+ }, (cause) => {
16
+ if (state?.promise === pending)
17
+ state = undefined;
18
+ throw cause;
19
+ });
20
+ state = { phase: 'pending', promise: pending };
21
+ return pending;
22
+ };
4
23
  return Object.freeze({
5
- get() {
6
- if (current !== undefined)
7
- return current;
8
- const pending = create().catch((cause) => {
9
- if (current === pending)
10
- current = undefined;
11
- throw cause;
12
- });
13
- current = pending;
14
- return pending;
15
- },
16
- current: () => current,
24
+ get,
25
+ current: () => state?.promise,
17
26
  });
18
27
  }
@@ -1,7 +1,7 @@
1
1
  import type { Runtime } from '../../application/runtime/index.js';
2
2
  import type { Build } from '../../deployment/build/build.js';
3
- import type { Release } from '../../deployment/release/release.js';
4
3
  import type { schema } from '../../platform/schema/index.js';
5
- export type ReleaseForRuntime<RuntimeValue extends Runtime> = Release<Build<schema.DomainSchema, RuntimeValue>>;
4
+ import type { ServedRelease } from '../runtime/index.js';
5
+ export type ReleaseForRuntime<RuntimeValue extends Runtime> = ServedRelease<Build<schema.DomainSchema, RuntimeValue>>;
6
6
  export type ReleaseLoader<Environment, RuntimeValue extends Runtime = Runtime> = (environment: Environment) => ReleaseForRuntime<RuntimeValue> | Promise<ReleaseForRuntime<RuntimeValue>>;
7
7
  export declare function loadRelease<Environment, RuntimeValue extends Runtime>(load: ReleaseLoader<Environment, RuntimeValue>, environment: Environment, runtime: RuntimeValue): Promise<ReleaseForRuntime<RuntimeValue>>;
@@ -1,10 +1,11 @@
1
- import { isRelease } from '../../deployment/release/admission.js';
1
+ import { isServedRelease } from '../runtime/index.js';
2
2
  export async function loadRelease(load, environment, runtime) {
3
3
  if (typeof load !== 'function')
4
4
  throw new TypeError('Service Release loader is invalid.');
5
5
  const release = await load(environment);
6
- if (!isRelease(release))
6
+ if (!isServedRelease(release)) {
7
7
  throw new TypeError('Service loader returned an unadmitted Release.');
8
+ }
8
9
  if (release.build.runtime !== runtime) {
9
10
  throw new TypeError('Service Release Runtime differs from the generated entrypoint Runtime.');
10
11
  }
@@ -1,23 +1,33 @@
1
1
  import type { ApplicationHost, ServerCloseOptions, ServerOptions } from '@astrale-os/kernel-server';
2
- import type { publication } from '@astrale-os/kernel-server';
2
+ import type { release } from '@astrale-os/kernel-server';
3
3
  import type { Runtime } from '../../application/runtime/index.js';
4
4
  import type { WorkflowRunner } from '../../application/workflow/runner/index.js';
5
- import type { Release } from '../../deployment/release/index.js';
6
5
  import type { Identity } from '../identity/index.js';
6
+ import type { ServedRelease } from '../runtime/index.js';
7
+ import type { DurableServing, DurableServingProvider } from '../workflows/index.js';
7
8
  import type { ReleaseLoader } from './release.js';
8
- export type ServiceServerOptions = Omit<ServerOptions, 'path' | 'invocation' | 'issuer' | 'publicOrigin' | 'tokenExchange' | 'publication' | 'delivery'>;
9
+ export type ServiceServerOptions = Omit<ServerOptions, 'path' | 'invocation' | 'issuer' | 'publicOrigin' | 'tokenExchange' | 'release' | 'publication' | 'delivery'>;
9
10
  export interface ServiceInput<Environment, RuntimeValue extends Runtime = Runtime> {
10
11
  readonly runtime: RuntimeValue;
11
12
  readonly environment: Environment;
12
13
  readonly load: ReleaseLoader<Environment, RuntimeValue>;
13
14
  readonly identity: Identity;
14
15
  readonly server: ServiceServerOptions;
15
- readonly delivery?: publication.delivery.Provider;
16
+ /**
17
+ * Answers Delivery in the request's version: v2 over an immutable deployment's release, v1 over
18
+ * the Publication (a release's frozen v3 projection). Defaults to the Identity's own.
19
+ */
20
+ readonly delivery?: release.delivery.Provider;
16
21
  readonly workflows?: WorkflowRunner;
22
+ /**
23
+ * Serve the Release's durable Workflows. A provider is resolved on the first engine request,
24
+ * shared by concurrent requests, and retried after initialization fails.
25
+ */
26
+ readonly durable?: DurableServing | DurableServingProvider;
17
27
  }
18
28
  export interface Service {
19
29
  fetch(request: Request, host?: ApplicationHost): Promise<Response>;
20
- release(): Promise<Release>;
30
+ release(): Promise<ServedRelease>;
21
31
  drain(): void;
22
32
  close(options: ServerCloseOptions): Promise<void>;
23
33
  }
@@ -0,0 +1,6 @@
1
+ import type { release } from '@astrale-os/kernel-server';
2
+ /**
3
+ * Capture an explicit Delivery Provider. It answers in the request's version: v2 over an immutable
4
+ * deployment's release, v1 over the Publication (a release's frozen v3 projection).
5
+ */
6
+ export declare function delivery(input: release.delivery.Provider | undefined): release.delivery.Provider | undefined;
@@ -1,8 +1,12 @@
1
+ /**
2
+ * Capture an explicit Delivery Provider. It answers in the request's version: v2 over an immutable
3
+ * deployment's release, v1 over the Publication (a release's frozen v3 projection).
4
+ */
1
5
  export function delivery(input) {
2
6
  if (input === undefined)
3
7
  return undefined;
4
8
  if (input === null || typeof input !== 'object' || typeof input.create !== 'function') {
5
- throw new TypeError('Publication delivery Provider is invalid.');
9
+ throw new TypeError('Delivery Provider is invalid.');
6
10
  }
7
11
  const create = input.create.bind(input);
8
12
  return Object.freeze({ create });
@@ -1,3 +1,3 @@
1
1
  export { delivery } from './delivery.js';
2
2
  export { installation } from './installation.js';
3
- export { source } from './source.js';
3
+ export { source, type ServingSource } from './source.js';
@@ -0,0 +1,4 @@
1
+ import type { release } from '@astrale-os/kernel-server';
2
+ import type { Serving } from '../../runtime/index.js';
3
+ /** A served document advertises Delivery exactly when the Service has a Provider for it. */
4
+ export declare function installation(served: Serving['document'], provider: release.delivery.Provider | undefined): void;
@@ -0,0 +1,9 @@
1
+ /** A served document advertises Delivery exactly when the Service has a Provider for it. */
2
+ export function installation(served, provider) {
3
+ const advertised = served.delivery !== undefined;
4
+ if (advertised !== (provider !== undefined)) {
5
+ throw new TypeError(advertised
6
+ ? 'Release advertises delivery without a Provider.'
7
+ : 'Delivery Provider has no Release endpoint.');
8
+ }
9
+ }
@@ -0,0 +1,15 @@
1
+ import type { PublicationSource } from '@astrale-os/kernel-server';
2
+ import type * as legacy from '../../../../deployment/release/legacy/index.js';
3
+ import type { LoadedRuntime } from '../../../runtime/index.js';
4
+ /**
5
+ * Serve a stable target's v3 Publication through the Kernel Server's v3-input source: `domain.json`
6
+ * only (404 at `release.json`), with the same-schema continuity of a stable Worker.
7
+ *
8
+ * @deprecated Replacement: the release source of `../source.ts`, which serves an immutable
9
+ * deployment's `DomainRelease` v4. Consumer: the stable Worker of the direct-mode path (the
10
+ * consumers of `deployment/release/legacy/index.ts`), whose host binds no build digest. Removal:
11
+ * D10, with `deployment/release/legacy/` and Kernel Server's `publication` source.
12
+ */
13
+ export declare function publicationSource(runtime: LoadedRuntime, served: legacy.Release): {
14
+ readonly publication: PublicationSource;
15
+ };
@@ -0,0 +1,19 @@
1
+ import { preparePublicationSnapshot } from '@astrale-os/kernel-server';
2
+ /**
3
+ * Serve a stable target's v3 Publication through the Kernel Server's v3-input source: `domain.json`
4
+ * only (404 at `release.json`), with the same-schema continuity of a stable Worker.
5
+ *
6
+ * @deprecated Replacement: the release source of `../source.ts`, which serves an immutable
7
+ * deployment's `DomainRelease` v4. Consumer: the stable Worker of the direct-mode path (the
8
+ * consumers of `deployment/release/legacy/index.ts`), whose host binds no build digest. Removal:
9
+ * D10, with `deployment/release/legacy/` and Kernel Server's `publication` source.
10
+ */
11
+ export function publicationSource(runtime, served) {
12
+ const snapshot = preparePublicationSnapshot({
13
+ publication: served.publication,
14
+ bundle: served.build.schema.bundle.bytes(),
15
+ table: served.routes,
16
+ domain: runtime.domain,
17
+ });
18
+ return Object.freeze({ publication: Object.freeze({ current: () => snapshot }) });
19
+ }
@@ -0,0 +1,18 @@
1
+ import type { PublicationSource, ReleaseSource } from '@astrale-os/kernel-server';
2
+ import type { LoadedRuntime } from '../../runtime/index.js';
3
+ /** The one source a Kernel Server serves, as `ServerOptions` takes it. */
4
+ export type ServingSource =
5
+ /** The release of an immutable deployment: `release.json` and its v3 projection. */
6
+ {
7
+ readonly release: ReleaseSource;
8
+ }
9
+ /** @deprecated A stable target's v3 Publication; see `legacy/index.ts`. */
10
+ | {
11
+ readonly publication: PublicationSource;
12
+ };
13
+ /**
14
+ * Prepare, once, the exact snapshot the loaded Release serves: an immutable deployment serves its
15
+ * `DomainRelease` through `prepareReleaseSnapshot`, which admits only routing naming that exact
16
+ * release or its exact v3 projection; a stable target keeps serving its v3 Publication.
17
+ */
18
+ export declare function source(runtime: LoadedRuntime): ServingSource;
@@ -0,0 +1,19 @@
1
+ import { prepareReleaseSnapshot } from '@astrale-os/kernel-server';
2
+ import { publicationSource } from './legacy/index.js';
3
+ /**
4
+ * Prepare, once, the exact snapshot the loaded Release serves: an immutable deployment serves its
5
+ * `DomainRelease` through `prepareReleaseSnapshot`, which admits only routing naming that exact
6
+ * release or its exact v3 projection; a stable target keeps serving its v3 Publication.
7
+ */
8
+ export function source(runtime) {
9
+ const served = runtime.release;
10
+ if (served.kind !== 'release')
11
+ return publicationSource(runtime, served);
12
+ const snapshot = prepareReleaseSnapshot({
13
+ release: served.document,
14
+ bundle: served.build.schema.bundle.bytes(),
15
+ table: served.routes,
16
+ domain: runtime.domain,
17
+ });
18
+ return Object.freeze({ release: Object.freeze({ current: () => snapshot }) });
19
+ }
@@ -0,0 +1,14 @@
1
+ import type { Fetch } from '@astrale-os/kernel-client';
2
+ import type { WorkflowEngine } from '@astrale-os/kernel-protocol/issuer/workflow-engine';
3
+ /** Discovery failure never admits static keys for an issuer-prefixed request. */
4
+ export declare class WorkflowEngineUnavailable extends Error {
5
+ readonly name = "WorkflowEngineUnavailable";
6
+ }
7
+ /** One receiver retains bounded, recently admitted engine authority and deduplicates refreshes. */
8
+ export declare function workflowEngineDiscovery(fetch: Fetch, now?: () => number): Readonly<{
9
+ resolve(issuer: string): Promise<WorkflowEngine>;
10
+ /** A crypto provider rejected this authority; the next request must discover it again. */
11
+ forget(issuer: string, observedKeys: readonly string[]): void;
12
+ /** Authentication refusal expires the basis for the next request, without replaying its body. */
13
+ invalidate(issuer: string, observedKeys: readonly string[]): void;
14
+ }>;
@@ -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,52 @@
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
+ }
19
+ export interface EngineWorkflowDefinition {
20
+ readonly name: string;
21
+ readonly handlers: {
22
+ readonly run: (context: EngineWorkflowContext, input: unknown) => Promise<unknown>;
23
+ readonly signal: (context: EngineSharedContext, input: unknown) => Promise<unknown>;
24
+ };
25
+ readonly options: {
26
+ readonly workflowRetention: number;
27
+ readonly retryPolicy: EngineRetryPolicy;
28
+ };
29
+ }
30
+ export interface EngineRetryPolicy {
31
+ readonly maxAttempts: number;
32
+ readonly onMaxAttempts: 'pause' | 'kill';
33
+ readonly initialInterval: number;
34
+ readonly maxInterval: number;
35
+ readonly exponentiationFactor: number;
36
+ }
37
+ /** Journaled operations of one workflow run. */
38
+ export interface EngineWorkflowContext {
39
+ run<Output>(name: string, action: () => Promise<Output>): PromiseLike<Output>;
40
+ sleep(durationMs: number, name?: string): PromiseLike<void>;
41
+ promise<Output>(name: string): {
42
+ get(): PromiseLike<Output>;
43
+ };
44
+ request(): {
45
+ readonly attemptCompletedSignal: AbortSignal;
46
+ };
47
+ }
48
+ export interface EngineSharedContext {
49
+ promise<Output>(name: string): {
50
+ resolve(value?: Output): PromiseLike<void>;
51
+ };
52
+ }
@@ -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,11 @@
1
+ import type { DurableEngine } from './engine.js';
2
+ /**
3
+ * Encode a declared business error of `definition` as a terminal engine failure, or return
4
+ * undefined for any other error, which the engine retries.
5
+ */
6
+ export declare function terminalFailure(engine: DurableEngine, cause: unknown, definition: object): Error | undefined;
7
+ /**
8
+ * The declared business error a journaled Step failed with, rebuilt through the definition's own
9
+ * factory, so a replay throws what the live run threw.
10
+ */
11
+ export declare function replayedFailure(engine: DurableEngine, cause: unknown, definition: object): Error | undefined;