@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
@@ -7,10 +7,16 @@ import { bindSession, ClientSession } from '../../platform/client/session/index.
7
7
  import { NodeId } from '../../platform/graph/node/index.js';
8
8
  import { Path } from '../../platform/graph/path/index.js';
9
9
  import { projectError, protocolError } from '../invocation/result/index.js';
10
- import { callbackIdentities, createCallbackCredentialResolver, maximumCallbackDelegationTtlSeconds, signDomainCallback, } from './callback.js';
11
- import { CredentialRejected, IssuerUnavailable, boundedFetch, callbackTtl, invocationUrl, admitEndpoint, requireLive, } from './errors.js';
10
+ import { callbackIdentities, createCallbackCredentialResolver, maximumCallbackDelegationTtlSeconds, selfIdentity, signDomainCallback, } from './callback.js';
11
+ import { CredentialRejected, IssuerUnavailable, boundedFetch, callbackTtl, httpIssuer, invocationUrl, admitEndpoint, requireLive, } from './errors.js';
12
12
  import { verifyCredential, verifyCredentialAgainst } from './jwks.js';
13
- const DEFAULT_ROUTE_AGE_MS = 60_000;
13
+ /**
14
+ * How long a callback Session reuses a learned route. It stays at most the Kernel's in-flight
15
+ * issuer window (`KERNEL_INFLIGHT_ISSUER_MS`, Host default 300 s; CT11): a route learned to a
16
+ * deployment replaced by a consented install ages out while that deployment is still accepted and
17
+ * answers the reserved miss, never after its own credential is refused (AM-85).
18
+ */
19
+ export const DEFAULT_ROUTE_AGE_MS = 60_000;
14
20
  export async function admit(request, configuration) {
15
21
  const execution = request.context.execution;
16
22
  requireLive(execution);
@@ -32,10 +38,7 @@ export async function admit(request, configuration) {
32
38
  }), {
33
39
  signal: execution.signal,
34
40
  timeoutMs: Math.max(1, execution.deadline - Date.now()),
35
- delegate: {
36
- ttlSeconds: callbackTtl(execution.deadline),
37
- attenuation: { kind: 'identity', self: true },
38
- },
41
+ delegate: { ttlSeconds: callbackTtl(execution.deadline) },
39
42
  });
40
43
  return result.value;
41
44
  }
@@ -53,15 +56,14 @@ export async function authenticate(credentialInput, expectedKernel, execution, c
53
56
  throw protocolError('AUTH_INVALID', 'Credential is invalid.');
54
57
  }
55
58
  const expressions = callbackIdentities(established.delegation.credential);
59
+ const session = (expression) => callbackSession(expectedKernel, expression, established.verified, execution, configuration);
56
60
  const sessions = Object.freeze({
57
- caller: callbackSession(expressions.caller),
58
- self: callbackSession(expressions.self),
59
- union: callbackSession(expressions.union),
61
+ caller: session(expressions.caller),
62
+ self: session(expressions.self),
60
63
  });
61
64
  const graph = Object.freeze({
62
65
  caller: bindSession(sessions.caller, execution),
63
66
  self: bindSession(sessions.self, execution),
64
- union: bindSession(sessions.union, execution),
65
67
  });
66
68
  let closed = false;
67
69
  return Object.freeze({
@@ -73,35 +75,46 @@ export async function authenticate(credentialInput, expectedKernel, execution, c
73
75
  closed = true;
74
76
  sessions.caller.close();
75
77
  sessions.self.close();
76
- sessions.union.close();
77
78
  },
78
79
  });
79
- function callbackSession(expression) {
80
- const resolveCallback = createCallbackCredentialResolver(configuration.signing, configuration.issuer, configuration.subject, expectedKernel, expression, established.verified, execution);
81
- return new ClientSession({
82
- kernel: expectedKernel,
83
- fetch: boundedFetch(configuration.fetch, execution.signal),
84
- auth: {
85
- ttlSeconds: Math.min(callbackTtl(execution.deadline), maximumCallbackDelegationTtlSeconds),
86
- async resolve(_call, signal) {
87
- const callback = await resolveCallback(signal);
88
- signal.throwIfAborted();
89
- return {
90
- credential: callback.credential,
91
- delegate: { ttlSeconds: callback.delegateTtlSeconds },
92
- };
93
- },
94
- },
95
- policy: {
96
- maximumRouteAgeMs: DEFAULT_ROUTE_AGE_MS,
97
- ...(configuration.policy.allowEndpoint === undefined
98
- ? {}
99
- : { allowEndpoint: configuration.policy.allowEndpoint }),
100
- ...(configuration.policy.allowInsecureHttp === true ? { allowInsecureHttp: true } : {}),
80
+ }
81
+ /**
82
+ * The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`,
83
+ * which no caller credential carries: the run acts as its executor, never as its initiator. Every
84
+ * credential names `executionId` in `EXECUTION_CLAIM`, so the Kernel can accept a replaced issuer
85
+ * for the steps of a run in flight at a consented issuer change. The caller owns the returned
86
+ * Session.
87
+ */
88
+ export function executorSession(kernel, executionId, execution, configuration) {
89
+ const admitted = httpIssuer(kernel, configuration.policy.allowInsecureHttp === true);
90
+ admitEndpoint(invocationUrl(admitted), configuration.policy);
91
+ return callbackSession(admitted, selfIdentity, undefined, execution, configuration, executionId);
92
+ }
93
+ function callbackSession(kernel, expression, carrier, execution, configuration, executionId) {
94
+ const resolveCallback = createCallbackCredentialResolver(configuration.signing, configuration.issuer, configuration.subject, kernel, expression, carrier, execution, executionId);
95
+ return new ClientSession({
96
+ kernel,
97
+ fetch: boundedFetch(configuration.fetch, execution.signal),
98
+ auth: {
99
+ ttlSeconds: Math.min(callbackTtl(execution.deadline), maximumCallbackDelegationTtlSeconds),
100
+ async resolve(_call, signal) {
101
+ const callback = await resolveCallback(signal);
102
+ signal.throwIfAborted();
103
+ return {
104
+ credential: callback.credential,
105
+ delegate: { ttlSeconds: callback.delegateTtlSeconds },
106
+ };
101
107
  },
102
- timeoutMs: Math.max(1, execution.deadline - Date.now()),
103
- });
104
- }
108
+ },
109
+ policy: {
110
+ maximumRouteAgeMs: DEFAULT_ROUTE_AGE_MS,
111
+ ...(configuration.policy.allowEndpoint === undefined
112
+ ? {}
113
+ : { allowEndpoint: configuration.policy.allowEndpoint }),
114
+ ...(configuration.policy.allowInsecureHttp === true ? { allowInsecureHttp: true } : {}),
115
+ },
116
+ timeoutMs: Math.max(1, execution.deadline - Date.now()),
117
+ });
105
118
  }
106
119
  async function establishCaller(input, audience, verification, execution, policy) {
107
120
  requireLive(execution);
@@ -115,7 +128,7 @@ async function establishCaller(input, audience, verification, execution, policy)
115
128
  if (proof.verified.sub !== context.verified.sub) {
116
129
  throw new CredentialRejected('Destination carrier and authority proof subjects differ.');
117
130
  }
118
- const authority = acceptResolvedDelegation(proof.verified.claims.delegation);
131
+ const identity = acceptResolvedDelegation(proof.verified.claims.delegation);
119
132
  let principal;
120
133
  try {
121
134
  principal = NodeId(context.verified.sub);
@@ -129,7 +142,7 @@ async function establishCaller(input, audience, verification, execution, policy)
129
142
  caller: Object.freeze({
130
143
  kind: 'authenticated',
131
144
  principal,
132
- authority,
145
+ identity,
133
146
  authentication: credential.evidence(context),
134
147
  }),
135
148
  });
@@ -140,6 +153,7 @@ async function establishCaller(input, audience, verification, execution, policy)
140
153
  throw protocolError('BACKEND_UNAVAILABLE', 'Credential issuer is unavailable.');
141
154
  }
142
155
  if (cause instanceof CredentialRejected ||
156
+ cause instanceof AuthValueError ||
143
157
  cause instanceof joseErrors.JOSEError ||
144
158
  cause instanceof protocolErrors.ProtocolError) {
145
159
  throw protocolError('AUTH_INVALID', 'Credential is invalid.');
@@ -147,6 +161,7 @@ async function establishCaller(input, audience, verification, execution, policy)
147
161
  throw cause;
148
162
  }
149
163
  }
164
+ /** Accept a Kernel delegation proof claim naming exactly one resolved caller Identity. */
150
165
  export function acceptResolvedDelegation(input) {
151
166
  if (input === null ||
152
167
  typeof input !== 'object' ||
@@ -157,5 +172,14 @@ export function acceptResolvedDelegation(input) {
157
172
  Reflect.get(input, 'v') !== 1) {
158
173
  throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected resolved delegation.');
159
174
  }
160
- return grant.accept({ expr: Reflect.get(input, 'expr') });
175
+ const raw = Reflect.get(input, 'expr');
176
+ // grant.accept collapses duplicate operands (union(X, X) becomes X), so the leaf is checked as sent.
177
+ if (raw === null || typeof raw !== 'object' || Reflect.get(raw, 'kind') !== 'identity') {
178
+ throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected one resolved caller Identity.');
179
+ }
180
+ const { expr } = grant.accept({ expr: raw });
181
+ if (expr.kind !== 'identity') {
182
+ throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected one resolved caller Identity.');
183
+ }
184
+ return expr.id;
161
185
  }
@@ -1,4 +1,5 @@
1
1
  import type { IssuerId, UnresolvedIdentityExpr, VerifiedCredential } from '../../platform/auth/index.js';
2
+ import type { NodeId } from '../../platform/graph/node/index.js';
2
3
  import type { SigningMaterial } from './signing.js';
3
4
  export declare const maximumCallbackTtlSeconds = 120;
4
5
  export declare const maximumCallbackDelegationTtlSeconds = 60;
@@ -7,8 +8,13 @@ export interface SignedCallback {
7
8
  readonly expiresAt: number;
8
9
  readonly delegateTtlSeconds: number;
9
10
  }
10
- export type CallbackGrantMode = 'caller' | 'self' | 'union';
11
- /** Exact callback Grant expressions corresponding to the Kernel Domain graph modes. */
11
+ export type CallbackMode = 'caller' | 'self';
12
+ /** The Domain's own authority, independent of any caller. */
13
+ export declare const selfIdentity: Readonly<{
14
+ kind: 'identity';
15
+ self: true;
16
+ }>;
17
+ /** Exact single-identity callback authority for each Kernel Domain graph mode. */
12
18
  export declare function callbackIdentities(nested: string | Uint8Array): Readonly<{
13
19
  caller: Readonly<{
14
20
  kind: 'identity';
@@ -18,16 +24,6 @@ export declare function callbackIdentities(nested: string | Uint8Array): Readonl
18
24
  kind: 'identity';
19
25
  self: true;
20
26
  }>;
21
- union: Readonly<{
22
- kind: 'union';
23
- operands: readonly (Readonly<{
24
- kind: 'identity';
25
- credential: string | Uint8Array<ArrayBufferLike>;
26
- }> | Readonly<{
27
- kind: 'identity';
28
- self: true;
29
- }>)[];
30
- }>;
31
27
  }>;
32
28
  export declare function signDomainCallback(signing: SigningMaterial, issuer: IssuerId, subject: string, audience: IssuerId, execution: {
33
29
  readonly deadline: number;
@@ -37,8 +33,13 @@ export declare function signCallback(signing: SigningMaterial, issuer: IssuerId,
37
33
  readonly deadline: number;
38
34
  readonly signal: AbortSignal;
39
35
  }): Promise<string>;
40
- /** Reuse one exact callback authority partition, refreshing only near its bounded expiry. */
41
- export declare function createCallbackCredentialResolver(signing: SigningMaterial, issuer: IssuerId, subject: string, audience: IssuerId, expression: UnresolvedIdentityExpr, carrier: VerifiedCredential, execution: {
36
+ /**
37
+ * Reuse one exact callback authority partition, refreshing only near its bounded expiry. Without a
38
+ * carrier the callback is the Domain's own authority, bounded by the execution alone. An
39
+ * `executionId` is the durable Execution a step's executor credential names in `EXECUTION_CLAIM`;
40
+ * no caller-bound callback names one.
41
+ */
42
+ export declare function createCallbackCredentialResolver(signing: SigningMaterial, issuer: IssuerId, subject: string, audience: IssuerId, expression: UnresolvedIdentityExpr, carrier: VerifiedCredential | undefined, execution: {
42
43
  readonly deadline: number;
43
44
  readonly signal: AbortSignal;
44
- }): (signal: AbortSignal) => Promise<SignedCallback>;
45
+ }, executionId?: NodeId): (signal: AbortSignal) => Promise<SignedCallback>;
@@ -1,32 +1,34 @@
1
+ import { EXECUTION_CLAIM } from '@astrale-os/kernel-protocol/issuer/claims';
1
2
  import { SignJWT } from 'jose';
2
3
  import { protocolError } from '../invocation/result/index.js';
3
4
  import { requireLive } from './errors.js';
4
5
  export const maximumCallbackTtlSeconds = 120;
5
6
  export const maximumCallbackDelegationTtlSeconds = 60;
6
7
  const CALLBACK_DELEGATION_SKEW_SECONDS = 5;
7
- /** Exact callback Grant expressions corresponding to the Kernel Domain graph modes. */
8
+ /** The Domain's own authority, independent of any caller. */
9
+ export const selfIdentity = Object.freeze({ kind: 'identity', self: true });
10
+ /** Exact single-identity callback authority for each Kernel Domain graph mode. */
8
11
  export function callbackIdentities(nested) {
9
- const caller = Object.freeze({ kind: 'identity', credential: nested });
10
- const self = Object.freeze({ kind: 'identity', self: true });
11
12
  return Object.freeze({
12
- caller,
13
- self,
14
- union: Object.freeze({
15
- kind: 'union',
16
- operands: Object.freeze([self, caller]),
17
- }),
13
+ caller: Object.freeze({ kind: 'identity', credential: nested }),
14
+ self: selfIdentity,
18
15
  });
19
16
  }
20
17
  export async function signDomainCallback(signing, issuer, subject, audience, execution) {
21
- return (await sign(signing, issuer, subject, audience, { kind: 'identity', self: true }, execution)).credential;
18
+ return (await sign(signing, issuer, subject, audience, selfIdentity, execution)).credential;
22
19
  }
23
20
  export async function signCallback(signing, issuer, subject, audience, expression, carrier, execution) {
24
21
  const maximum = carrier.exp ?? Number.POSITIVE_INFINITY;
25
22
  return (await sign(signing, issuer, subject, audience, expression, execution, maximum)).credential;
26
23
  }
27
- /** Reuse one exact callback authority partition, refreshing only near its bounded expiry. */
28
- export function createCallbackCredentialResolver(signing, issuer, subject, audience, expression, carrier, execution) {
29
- const maximum = carrier.exp ?? Number.POSITIVE_INFINITY;
24
+ /**
25
+ * Reuse one exact callback authority partition, refreshing only near its bounded expiry. Without a
26
+ * carrier the callback is the Domain's own authority, bounded by the execution alone. An
27
+ * `executionId` is the durable Execution a step's executor credential names in `EXECUTION_CLAIM`;
28
+ * no caller-bound callback names one.
29
+ */
30
+ export function createCallbackCredentialResolver(signing, issuer, subject, audience, expression, carrier, execution, executionId) {
31
+ const maximum = carrier?.exp ?? Number.POSITIVE_INFINITY;
30
32
  let cached;
31
33
  let pending;
32
34
  return async (signal) => {
@@ -38,7 +40,7 @@ export function createCallbackCredentialResolver(signing, issuer, subject, audie
38
40
  return cached;
39
41
  }
40
42
  if (pending === undefined) {
41
- const current = sign(signing, issuer, subject, audience, expression, execution, maximum).then((signed) => {
43
+ const current = sign(signing, issuer, subject, audience, expression, execution, maximum, executionId).then((signed) => {
42
44
  const delegateTtlSeconds = Math.min(maximumCallbackDelegationTtlSeconds, signed.expiresAt - signed.issuedAt - CALLBACK_DELEGATION_SKEW_SECONDS);
43
45
  if (delegateTtlSeconds < 1) {
44
46
  throw protocolError('AUTH_INVALID', 'Credential is invalid.');
@@ -61,7 +63,7 @@ export function createCallbackCredentialResolver(signing, issuer, subject, audie
61
63
  return withSignal(pending, signal);
62
64
  };
63
65
  }
64
- async function sign(signing, issuer, subject, audience, expression, execution, maximum = Number.POSITIVE_INFINITY) {
66
+ async function sign(signing, issuer, subject, audience, expression, execution, maximum = Number.POSITIVE_INFINITY, executionId) {
65
67
  requireLive(execution);
66
68
  const privateKey = await withSignal(signing.privateKey, execution.signal);
67
69
  requireLive(execution);
@@ -70,7 +72,10 @@ async function sign(signing, issuer, subject, audience, expression, execution, m
70
72
  if (!Number.isFinite(expiresAt) || expiresAt <= now) {
71
73
  throw protocolError('AUTH_INVALID', 'Credential is invalid.');
72
74
  }
73
- const credential = await withSignal(new SignJWT({ grant: { v: 1, expr: expression } })
75
+ const credential = await withSignal(new SignJWT({
76
+ grant: { v: 1, expr: expression },
77
+ ...(executionId === undefined ? {} : { [EXECUTION_CLAIM]: executionId }),
78
+ })
74
79
  .setProtectedHeader({
75
80
  alg: signing.algorithm,
76
81
  ...(signing.keyId === undefined ? {} : { kid: signing.keyId }),
@@ -1,6 +1,13 @@
1
- import type { publication as serverPublication } from '@astrale-os/kernel-server';
2
- import * as publication from '@astrale-os/kernel-protocol/publication';
1
+ import type { release as serverRelease } from '@astrale-os/kernel-server';
2
+ import * as release from '@astrale-os/kernel-protocol/release';
3
3
  import type { IssuerId } from '../../platform/auth/index.js';
4
4
  import type { SigningMaterial } from './signing.js';
5
- /** Create one stateless, nonce-bound public Delivery provider for an exact Publication. */
6
- export declare function publicationDelivery(signing: SigningMaterial, issuer: IssuerId, subject: string, deployed: publication.Publication): serverPublication.delivery.Provider;
5
+ type Served = release.DomainRelease | release.legacy.Publication;
6
+ /**
7
+ * Create one stateless, nonce-bound public Delivery provider for the exact document a deployment
8
+ * serves. It answers in the request's version: a Delivery v2 carrying the release for a v2
9
+ * request, and a Delivery v1 carrying the Publication (a release's frozen v3 projection) for the
10
+ * deprecated v1 request. A stable target's Publication answers v1 only.
11
+ */
12
+ export declare function releaseDelivery(signing: SigningMaterial, issuer: IssuerId, subject: string, deployed: Served): serverRelease.delivery.Provider;
13
+ export {};
@@ -1,34 +1,61 @@
1
- import * as publication from '@astrale-os/kernel-protocol/publication';
1
+ import * as release from '@astrale-os/kernel-protocol/release';
2
2
  import { SignJWT } from 'jose';
3
3
  const ATTESTATION_TTL_SECONDS = 60;
4
- /** Create one stateless, nonce-bound public Delivery provider for an exact Publication. */
5
- export function publicationDelivery(signing, issuer, subject, deployed) {
4
+ /**
5
+ * Create one stateless, nonce-bound public Delivery provider for the exact document a deployment
6
+ * serves. It answers in the request's version: a Delivery v2 carrying the release for a v2
7
+ * request, and a Delivery v1 carrying the Publication (a release's frozen v3 projection) for the
8
+ * deprecated v1 request. A stable target's Publication answers v1 only.
9
+ */
10
+ export function releaseDelivery(signing, issuer, subject, deployed) {
11
+ const projection = deployed.version === 4 ? release.legacy.publication(deployed) : deployed;
6
12
  return Object.freeze({
7
13
  async create(request, context) {
8
14
  context.signal.throwIfAborted();
9
- const now = Math.floor(Date.now() / 1_000);
10
- const attestation = await new SignJWT({
11
- purpose: publication.delivery.PURPOSE,
15
+ if (request.version === 1) {
16
+ const attestation = await attest(signing, issuer, subject, request.kernel, {
17
+ purpose: release.legacy.delivery.PURPOSE,
18
+ nonce: request.nonce,
19
+ etag: projection.etag,
20
+ schemaRevision: projection.schema.revision,
21
+ });
22
+ context.signal.throwIfAborted();
23
+ return release.legacy.delivery.accept({
24
+ format: 'astrale.domain.delivery',
25
+ version: 1,
26
+ publication: projection,
27
+ attestation,
28
+ });
29
+ }
30
+ if (deployed.version !== 4) {
31
+ throw new TypeError('A Publication-backed deployment answers Delivery v1 only.');
32
+ }
33
+ const attestation = await attest(signing, issuer, subject, request.kernel, {
34
+ purpose: release.delivery.PURPOSE,
12
35
  nonce: request.nonce,
13
- etag: deployed.etag,
36
+ release: deployed.digest,
14
37
  schemaRevision: deployed.schema.revision,
15
- })
16
- .setProtectedHeader({
17
- alg: signing.algorithm,
18
- ...(signing.keyId === undefined ? {} : { kid: signing.keyId }),
19
- })
20
- .setIssuer(issuer)
21
- .setSubject(subject)
22
- .setAudience(request.kernel)
23
- .setExpirationTime(now + ATTESTATION_TTL_SECONDS)
24
- .sign(await signing.privateKey);
38
+ });
25
39
  context.signal.throwIfAborted();
26
- return publication.delivery.accept({
40
+ return release.delivery.accept({
27
41
  format: 'astrale.domain.delivery',
28
- version: 1,
29
- publication: deployed,
42
+ version: 2,
43
+ release: deployed,
30
44
  attestation,
31
45
  });
32
46
  },
33
47
  });
34
48
  }
49
+ async function attest(signing, issuer, subject, kernel, claims) {
50
+ const now = Math.floor(Date.now() / 1_000);
51
+ return new SignJWT(claims)
52
+ .setProtectedHeader({
53
+ alg: signing.algorithm,
54
+ ...(signing.keyId === undefined ? {} : { kid: signing.keyId }),
55
+ })
56
+ .setIssuer(issuer)
57
+ .setSubject(subject)
58
+ .setAudience(kernel)
59
+ .setExpirationTime(now + ATTESTATION_TTL_SECONDS)
60
+ .sign(await signing.privateKey);
61
+ }
@@ -1,7 +1,9 @@
1
1
  import type { Fetch } from '@astrale-os/kernel-client';
2
- import type * as publicationProtocol from '@astrale-os/kernel-protocol/publication';
3
- import type { Issuer, exchange, publication } from '@astrale-os/kernel-server';
2
+ import type * as releaseProtocol from '@astrale-os/kernel-protocol/release';
3
+ import type { Issuer, exchange, release } from '@astrale-os/kernel-server';
4
4
  import type { IssuerId, JsonWebKey } from '../../platform/auth/index.js';
5
+ import type { ClientSession } from '../../platform/client/session/index.js';
6
+ import type { NodeId } from '../../platform/graph/node/index.js';
5
7
  import type { InvocationAuthority } from '../invocation/index.js';
6
8
  import type { ExchangeOptions } from './exchange.js';
7
9
  import type { IdentityNetworkPolicy } from './jwks.js';
@@ -9,7 +11,20 @@ import type { IdentityNetworkPolicy } from './jwks.js';
9
11
  export interface Identity extends Issuer, InvocationAuthority {
10
12
  readonly subject: string;
11
13
  readonly tokenExchange?: exchange.Provider;
12
- delivery(publication: publicationProtocol.Publication): publication.delivery.Provider;
14
+ /**
15
+ * Delivery for the exact document this deployment serves: Delivery v2 over its release and v1
16
+ * over its frozen v3 projection, or v1 over a stable target's Publication.
17
+ */
18
+ delivery(served: releaseProtocol.DomainRelease | releaseProtocol.legacy.Publication): release.delivery.Provider;
19
+ /**
20
+ * The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`
21
+ * (`ctx.execution.id`), which no caller credential carries; its credentials name `executionId` in
22
+ * `EXECUTION_CLAIM`. Required to serve durable Workflows; the caller closes the Session.
23
+ */
24
+ executor?(kernel: IssuerId, executionId: NodeId, execution: {
25
+ readonly deadline: number;
26
+ readonly signal: AbortSignal;
27
+ }): ClientSession;
13
28
  }
14
29
  export interface IdentityInput extends IdentityNetworkPolicy {
15
30
  readonly issuer: IssuerId;
@@ -1,5 +1,5 @@
1
- import { admit, authenticate } from './authentication.js';
2
- import { publicationDelivery } from './delivery.js';
1
+ import { admit, authenticate, executorSession } from './authentication.js';
2
+ import { releaseDelivery } from './delivery.js';
3
3
  import { httpIssuer } from './errors.js';
4
4
  import { maximumExchangeTtl, tokenExchange } from './exchange.js';
5
5
  import { createVerificationBasisResolver } from './jwks.js';
@@ -49,8 +49,9 @@ export function createIdentity(input) {
49
49
  ? {}
50
50
  : { loadIssuerPublicKeys: input.loadIssuerPublicKeys }),
51
51
  ...(exchangeProvider === undefined ? {} : { tokenExchange: exchangeProvider }),
52
- delivery: (publication) => publicationDelivery(material, issuer, input.subject, publication),
52
+ delivery: (served) => releaseDelivery(material, issuer, input.subject, served),
53
53
  admit: (request) => admit(request, configuration),
54
+ executor: (kernel, executionId, execution) => executorSession(kernel, executionId, execution, configuration),
54
55
  authenticate: (request) => authenticate(request.credential, request.via.issuer, request.context.execution, configuration),
55
56
  });
56
57
  }
@@ -67,6 +68,7 @@ export function identity(input) {
67
68
  'delivery',
68
69
  'admit',
69
70
  'authenticate',
71
+ 'executor',
70
72
  ]);
71
73
  if (Reflect.ownKeys(input).some((key) => !allowed.has(key)) ||
72
74
  typeof input.subject !== 'string' ||
@@ -74,7 +76,8 @@ export function identity(input) {
74
76
  typeof input.loadPublicKeys !== 'function' ||
75
77
  typeof input.delivery !== 'function' ||
76
78
  typeof input.admit !== 'function' ||
77
- typeof input.authenticate !== 'function') {
79
+ typeof input.authenticate !== 'function' ||
80
+ (input.executor !== undefined && typeof input.executor !== 'function')) {
78
81
  invalid();
79
82
  }
80
83
  const receiver = Object.freeze({ ...input });
@@ -92,6 +95,7 @@ export function identity(input) {
92
95
  delivery: receiver.delivery.bind(receiver),
93
96
  admit: receiver.admit.bind(receiver),
94
97
  authenticate: receiver.authenticate.bind(receiver),
98
+ ...(receiver.executor === undefined ? {} : { executor: receiver.executor.bind(receiver) }),
95
99
  });
96
100
  }
97
101
  function invalid() {
@@ -8,6 +8,17 @@ const MAXIMUM_DISCOVERY_BYTES = 256 * 1024;
8
8
  const MAXIMUM_VERIFICATION_BASES = 64;
9
9
  const VERIFICATION_BASIS_TTL_MS = 60_000;
10
10
  const UNKNOWN_KEY_REFRESH_COOLDOWN_MS = 60_000;
11
+ const DISCOVERY_RETRY_DELAY_MS = 250;
12
+ // Only typed transport failures are replayable. Browser TypeError, TLS, HTTP and document
13
+ // admission failures carry no evidence that repeating the request can safely recover.
14
+ const TRANSIENT_TRANSPORT_CODES = new Set([
15
+ 'ENOTFOUND',
16
+ 'EAI_AGAIN',
17
+ 'ECONNRESET',
18
+ 'ETIMEDOUT',
19
+ 'UND_ERR_CONNECT_TIMEOUT',
20
+ 'UND_ERR_SOCKET',
21
+ ]);
11
22
  /**
12
23
  * Retain only recently admitted public issuer material for one execution Identity.
13
24
  * An unseen key ID may refresh once per cooldown; failures never replace a usable basis.
@@ -220,21 +231,55 @@ async function discover(issuer, fetch, signal, policy) {
220
231
  });
221
232
  }
222
233
  async function request(fetch, url, signal) {
223
- try {
224
- const response = await fetch(url, { method: 'GET', redirect: 'error', signal });
225
- if (!response.ok) {
226
- await response.body?.cancel();
227
- throw new IssuerUnavailable(`Issuer discovery returned HTTP ${response.status}.`);
234
+ for (let attempt = 0;; attempt += 1) {
235
+ signal.throwIfAborted();
236
+ try {
237
+ const response = await fetch(url, { method: 'GET', redirect: 'error', signal });
238
+ if (!response.ok) {
239
+ await response.body?.cancel();
240
+ throw new IssuerUnavailable(`Issuer discovery returned HTTP ${response.status}.`);
241
+ }
242
+ return response;
243
+ }
244
+ catch (cause) {
245
+ if (signal.aborted)
246
+ throw signal.reason;
247
+ if (cause instanceof IssuerUnavailable)
248
+ throw cause;
249
+ // One retry belongs to the shared issuer load, never to each observer or business call.
250
+ if (attempt !== 0 || !transientTransport(cause)) {
251
+ throw new IssuerUnavailable('Issuer discovery request failed.', cause);
252
+ }
253
+ await retryDelay(signal);
228
254
  }
229
- return response;
230
255
  }
231
- catch (cause) {
232
- if (signal.aborted)
233
- throw signal.reason;
234
- if (cause instanceof IssuerUnavailable)
235
- throw cause;
236
- throw new IssuerUnavailable('Issuer discovery request failed.', cause);
256
+ }
257
+ function transientTransport(cause) {
258
+ // Node fetch wraps its transport Error; Bun may expose the code directly. Bound traversal
259
+ // of an external cause chain, including cycles, and do not look past a classified refusal.
260
+ for (let depth = 0; depth < 4; depth += 1) {
261
+ if (cause === null || typeof cause !== 'object')
262
+ return false;
263
+ const code = Reflect.get(cause, 'code');
264
+ if (typeof code === 'string')
265
+ return TRANSIENT_TRANSPORT_CODES.has(code);
266
+ cause = Reflect.get(cause, 'cause');
237
267
  }
268
+ return false;
269
+ }
270
+ function retryDelay(signal) {
271
+ signal.throwIfAborted();
272
+ return new Promise((resolve, reject) => {
273
+ const cancel = () => {
274
+ clearTimeout(timer);
275
+ reject(signal.reason);
276
+ };
277
+ const timer = setTimeout(() => {
278
+ signal.removeEventListener('abort', cancel);
279
+ resolve();
280
+ }, DISCOVERY_RETRY_DELAY_MS);
281
+ signal.addEventListener('abort', cancel, { once: true });
282
+ });
238
283
  }
239
284
  async function json(response, signal) {
240
285
  const bytes = new Uint8Array(await response.arrayBuffer());
@@ -1,5 +1,7 @@
1
1
  export { serve } from './serve.js';
2
- export type { ExecutionContext, ServedApplication, ServeInput } from './serve.js';
3
- export { createIdentity, type ExchangeOptions, type Identity, type IdentityInput, } from './identity/index.js';
2
+ export type { ExecutionContext, ServedDomain, ServeInput } from './serve.js';
3
+ export { createIdentity, maximumExchangeTtl, type ExchangeOptions, type Identity, type IdentityInput, } from './identity/index.js';
4
4
  export { InvocationError } from './invocation/index.js';
5
5
  export type { InvocationErrorCode } from './invocation/index.js';
6
+ export type { DurableEngine, DurableServing, DurableServingProvider } from './workflows/index.js';
7
+ export { isCanonicalDurableRequest, isLegacyDurableRequest } from './workflows/route.js';
@@ -1,3 +1,4 @@
1
1
  export { serve } from './serve.js';
2
- export { createIdentity, } from './identity/index.js';
2
+ export { createIdentity, maximumExchangeTtl, } from './identity/index.js';
3
3
  export { InvocationError } from './invocation/index.js';
4
+ export { isCanonicalDurableRequest, isLegacyDurableRequest } from './workflows/route.js';
@@ -1,6 +1,5 @@
1
1
  import type { HandlerRequest } from '@astrale-os/kernel-server';
2
- import type { AnonymousCaller, AuthenticatedCaller, ResolvedCallable } from '../../../application/action/index.js';
3
- import type { Release } from '../../../deployment/release/index.js';
2
+ import type { AnonymousCaller, ResolvedCallable } from '../../../application/action/index.js';
4
3
  import type { Domain } from '../../../platform/schema/index.js';
5
4
  import type { AuthenticatedInvocation, InvocationAuthority } from './authority.js';
6
5
  export interface AnonymousInvocation {
@@ -9,9 +8,5 @@ export interface AnonymousInvocation {
9
8
  readonly graph: null;
10
9
  close(): void;
11
10
  }
12
- interface AdmittedAuthenticatedInvocation extends Omit<AuthenticatedInvocation, 'caller'> {
13
- readonly caller: AuthenticatedCaller;
14
- }
15
- export type InvocationAuthentication = AnonymousInvocation | AdmittedAuthenticatedInvocation;
16
- export declare function authentication(callable: ResolvedCallable, request: HandlerRequest, release: Release, domain: Domain, authority: InvocationAuthority): Promise<InvocationAuthentication>;
17
- export {};
11
+ export type InvocationAuthentication = AnonymousInvocation | AuthenticatedInvocation;
12
+ export declare function authentication(callable: ResolvedCallable, request: HandlerRequest, domain: Domain, authority: InvocationAuthority): Promise<InvocationAuthentication>;