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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/README.md +191 -58
  2. package/dist/application/action/action.d.ts +6 -0
  3. package/dist/application/action/authoring.d.ts +1 -1
  4. package/dist/application/action/context.d.ts +47 -31
  5. package/dist/application/action/define.d.ts +3 -3
  6. package/dist/application/action/index.d.ts +1 -1
  7. package/dist/application/define.d.ts +8 -6
  8. package/dist/application/define.js +28 -14
  9. package/dist/application/dependency/index.d.ts +1 -1
  10. package/dist/application/dependency/invoker.d.ts +21 -10
  11. package/dist/application/domain.d.ts +30 -0
  12. package/dist/application/index.d.ts +4 -4
  13. package/dist/application/index.js +1 -1
  14. package/dist/application/integration/define.d.ts +8 -1
  15. package/dist/application/integration/index.d.ts +2 -2
  16. package/dist/application/integration/integration.d.ts +13 -1
  17. package/dist/application/integration/operation.d.ts +16 -3
  18. package/dist/application/mutation/authoring/properties.d.ts +5 -3
  19. package/dist/application/mutation/authoring/properties.js +35 -2
  20. package/dist/application/mutation/authoring/transition.js +4 -1
  21. package/dist/application/mutation/execution/execute.js +1 -1
  22. package/dist/application/mutation/failure.d.ts +6 -0
  23. package/dist/application/mutation/failure.js +24 -18
  24. package/dist/application/mutation/index.d.ts +1 -1
  25. package/dist/application/query/collection/union.js +11 -4
  26. package/dist/application/query/composite/plan.d.ts +0 -4
  27. package/dist/application/query/composite/plan.js +0 -2
  28. package/dist/application/query/conformance.d.ts +15 -0
  29. package/dist/application/query/conformance.js +46 -0
  30. package/dist/application/query/define.js +4 -3
  31. package/dist/application/query/execution/execute.d.ts +0 -1
  32. package/dist/application/query/execution/execute.js +7 -1
  33. package/dist/application/query/failure.d.ts +8 -0
  34. package/dist/application/query/failure.js +8 -0
  35. package/dist/application/query/index.d.ts +1 -1
  36. package/dist/application/query/index.js +1 -1
  37. package/dist/application/routes/admission.d.ts +2 -2
  38. package/dist/application/routes/admission.js +1 -1
  39. package/dist/application/routes/route.d.ts +2 -2
  40. package/dist/application/runtime/actions.js +3 -0
  41. package/dist/application/runtime/workflows.d.ts +3 -1
  42. package/dist/application/runtime/workflows.js +3 -4
  43. package/dist/application/view/define.js +4 -6
  44. package/dist/application/view/frontend.d.ts +2 -2
  45. package/dist/application/view/index.d.ts +1 -1
  46. package/dist/application/view/route.d.ts +0 -14
  47. package/dist/application/view/route.js +1 -64
  48. package/dist/application/workflow/authoring.d.ts +3 -2
  49. package/dist/application/workflow/context.d.ts +8 -2
  50. package/dist/application/workflow/define.d.ts +4 -4
  51. package/dist/application/workflow/define.js +14 -9
  52. package/dist/application/workflow/durable.d.ts +185 -0
  53. package/dist/application/workflow/index.d.ts +3 -2
  54. package/dist/application/workflow/runner/inline.js +3 -4
  55. package/dist/application/workflow/runner/runner.d.ts +2 -2
  56. package/dist/application/workflow/step/output.d.ts +2 -0
  57. package/dist/application/workflow/step/output.js +73 -0
  58. package/dist/application/workflow/workflow.d.ts +5 -3
  59. package/dist/deployment/adapter/adapter.d.ts +55 -13
  60. package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
  61. package/dist/deployment/adapter/bundle/file.d.ts +10 -0
  62. package/dist/deployment/adapter/bundle/index.d.ts +2 -0
  63. package/dist/deployment/adapter/define.d.ts +4 -3
  64. package/dist/deployment/adapter/define.js +107 -23
  65. package/dist/deployment/adapter/index.d.ts +4 -3
  66. package/dist/deployment/adapter/index.js +1 -0
  67. package/dist/deployment/adapter/release/command.d.ts +33 -0
  68. package/dist/deployment/adapter/release/context.d.ts +94 -0
  69. package/dist/deployment/adapter/release/index.d.ts +4 -0
  70. package/dist/deployment/adapter/release/index.js +1 -0
  71. package/dist/deployment/adapter/release/list.d.ts +53 -0
  72. package/dist/deployment/adapter/release/list.js +1 -0
  73. package/dist/deployment/adapter/release/refusal.d.ts +10 -0
  74. package/dist/deployment/adapter/release/refusal.js +14 -0
  75. package/dist/deployment/adapter/release/result.d.ts +56 -0
  76. package/dist/deployment/adapter/release/result.js +1 -0
  77. package/dist/deployment/address/configuration.d.ts +96 -0
  78. package/dist/deployment/address/configuration.js +274 -0
  79. package/dist/deployment/address/fingerprint.d.ts +5 -0
  80. package/dist/deployment/address/fingerprint.js +27 -0
  81. package/dist/deployment/address/index.d.ts +5 -0
  82. package/dist/deployment/address/index.js +4 -0
  83. package/dist/deployment/address/label.d.ts +42 -0
  84. package/dist/deployment/address/label.js +80 -0
  85. package/dist/deployment/address/line.d.ts +29 -0
  86. package/dist/deployment/address/line.js +53 -0
  87. package/dist/deployment/address/record.d.ts +73 -0
  88. package/dist/deployment/address/record.js +138 -0
  89. package/dist/deployment/address/summary.d.ts +30 -0
  90. package/dist/deployment/address/summary.js +1 -0
  91. package/dist/deployment/address/vectors.d.ts +60 -0
  92. package/dist/deployment/address/vectors.js +517 -0
  93. package/dist/deployment/authoring.d.ts +0 -2
  94. package/dist/deployment/authoring.js +0 -1
  95. package/dist/deployment/build/build.d.ts +8 -2
  96. package/dist/deployment/build/compile.d.ts +4 -4
  97. package/dist/deployment/build/compile.js +19 -17
  98. package/dist/deployment/build/frontend/compilation.d.ts +2 -4
  99. package/dist/deployment/build/frontend/compilation.js +0 -5
  100. package/dist/deployment/build/frontend/digest.js +1 -5
  101. package/dist/deployment/build/index.d.ts +1 -0
  102. package/dist/deployment/build/index.js +1 -0
  103. package/dist/deployment/build/manifest.d.ts +59 -0
  104. package/dist/deployment/build/manifest.js +118 -0
  105. package/dist/deployment/build/material.d.ts +2 -2
  106. package/dist/deployment/build/material.js +28 -13
  107. package/dist/deployment/build/schema.d.ts +2 -2
  108. package/dist/deployment/deployment.d.ts +3 -2
  109. package/dist/deployment/environment.d.ts +6 -0
  110. package/dist/deployment/environment.js +6 -0
  111. package/dist/deployment/index.d.ts +4 -6
  112. package/dist/deployment/index.js +1 -2
  113. package/dist/deployment/release/addressing.d.ts +6 -5
  114. package/dist/deployment/release/addressing.js +2 -3
  115. package/dist/deployment/release/assemble.d.ts +6 -3
  116. package/dist/deployment/release/assemble.js +12 -10
  117. package/dist/deployment/release/release.d.ts +16 -5
  118. package/dist/deployment/release/seal.d.ts +14 -0
  119. package/dist/deployment/release/seal.js +22 -0
  120. package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
  121. package/dist/deployment/release/{publication → served}/callables.js +2 -2
  122. package/dist/deployment/release/served/index.d.ts +11 -0
  123. package/dist/deployment/release/served/index.js +26 -0
  124. package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
  125. package/dist/deployment/release/{publication → served}/views.js +0 -1
  126. package/dist/deployment/runtime/admission.d.ts +2 -2
  127. package/dist/deployment/runtime/admission.js +5 -5
  128. package/dist/deployment/verify/index.d.ts +3 -4
  129. package/dist/deployment/verify/index.js +2 -3
  130. package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
  131. package/dist/deployment/verify/preflight/bundle.js +71 -0
  132. package/dist/deployment/verify/preflight/index.d.ts +1 -12
  133. package/dist/deployment/verify/preflight/index.js +1 -12
  134. package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
  135. package/dist/deployment/verify/readiness/fetch.js +26 -0
  136. package/dist/deployment/verify/readiness/identity.d.ts +3 -6
  137. package/dist/deployment/verify/readiness/identity.js +3 -3
  138. package/dist/deployment/verify/readiness/index.d.ts +15 -8
  139. package/dist/deployment/verify/readiness/index.js +25 -6
  140. package/dist/deployment/verify/readiness/release.d.ts +8 -0
  141. package/dist/deployment/verify/readiness/release.js +22 -0
  142. package/dist/deployment/worker/address.d.ts +26 -0
  143. package/dist/deployment/worker/address.js +43 -0
  144. package/dist/deployment/worker/build.d.ts +60 -0
  145. package/dist/deployment/worker/build.js +172 -0
  146. package/dist/deployment/worker/configuration.d.ts +73 -0
  147. package/dist/deployment/worker/configuration.js +165 -0
  148. package/dist/deployment/worker/content.d.ts +38 -0
  149. package/dist/deployment/worker/content.js +169 -0
  150. package/dist/deployment/worker/index.d.ts +29 -0
  151. package/dist/deployment/worker/index.js +29 -0
  152. package/dist/deployment/worker/limits.d.ts +30 -0
  153. package/dist/deployment/worker/limits.js +30 -0
  154. package/dist/deployment/worker/record.d.ts +29 -0
  155. package/dist/deployment/worker/record.js +69 -0
  156. package/dist/deployment/worker/request.d.ts +118 -0
  157. package/dist/deployment/worker/request.js +280 -0
  158. package/dist/deployment/worker/response.d.ts +101 -0
  159. package/dist/deployment/worker/response.js +207 -0
  160. package/dist/execution/cache/cache.d.ts +17 -0
  161. package/dist/execution/cache/cache.js +11 -0
  162. package/dist/execution/cache/index.d.ts +2 -0
  163. package/dist/execution/cache/index.js +2 -0
  164. package/dist/execution/cache/memory.d.ts +13 -0
  165. package/dist/execution/cache/memory.js +48 -0
  166. package/dist/execution/identity/authentication.d.ts +33 -3
  167. package/dist/execution/identity/authentication.js +90 -36
  168. package/dist/execution/identity/callback.d.ts +20 -20
  169. package/dist/execution/identity/callback.js +34 -26
  170. package/dist/execution/identity/delivery.d.ts +6 -4
  171. package/dist/execution/identity/delivery.js +25 -20
  172. package/dist/execution/identity/identity.d.ts +17 -3
  173. package/dist/execution/identity/identity.js +12 -4
  174. package/dist/execution/identity/jwks.d.ts +5 -0
  175. package/dist/execution/identity/jwks.js +92 -102
  176. package/dist/execution/index.d.ts +6 -4
  177. package/dist/execution/index.js +4 -2
  178. package/dist/execution/invocation/admission/age.d.ts +57 -0
  179. package/dist/execution/invocation/admission/age.js +208 -0
  180. package/dist/execution/invocation/admission/authentication.d.ts +13 -13
  181. package/dist/execution/invocation/admission/authentication.js +52 -44
  182. package/dist/execution/invocation/admission/authority.d.ts +28 -6
  183. package/dist/execution/invocation/admission/authority.js +9 -2
  184. package/dist/execution/invocation/admission/index.d.ts +4 -3
  185. package/dist/execution/invocation/admission/index.js +3 -2
  186. package/dist/execution/invocation/admission/input.d.ts +2 -2
  187. package/dist/execution/invocation/admission/input.js +16 -2
  188. package/dist/execution/invocation/admission/target.d.ts +11 -0
  189. package/dist/execution/invocation/admission/target.js +22 -3
  190. package/dist/execution/invocation/capabilities/bind.d.ts +11 -0
  191. package/dist/execution/invocation/capabilities/bind.js +25 -0
  192. package/dist/execution/invocation/capabilities/index.d.ts +1 -0
  193. package/dist/execution/invocation/capabilities/index.js +1 -0
  194. package/dist/execution/invocation/dependency/bind.d.ts +3 -1
  195. package/dist/execution/invocation/dependency/bind.js +36 -16
  196. package/dist/execution/invocation/dispatch/context.d.ts +7 -6
  197. package/dist/execution/invocation/dispatch/context.js +11 -44
  198. package/dist/execution/invocation/dispatch/workflow.js +0 -4
  199. package/dist/execution/invocation/handler.js +8 -2
  200. package/dist/execution/invocation/index.d.ts +2 -2
  201. package/dist/execution/invocation/index.js +1 -1
  202. package/dist/execution/invocation/integration/authentication.d.ts +3 -3
  203. package/dist/execution/invocation/integration/authentication.js +7 -7
  204. package/dist/execution/invocation/integration/call.d.ts +2 -1
  205. package/dist/execution/invocation/integration/call.js +3 -3
  206. package/dist/execution/invocation/integration/clients.d.ts +1 -1
  207. package/dist/execution/invocation/integration/index.d.ts +1 -0
  208. package/dist/execution/invocation/integration/index.js +1 -0
  209. package/dist/execution/invocation/invocation.d.ts +6 -0
  210. package/dist/execution/invocation/invocation.js +129 -21
  211. package/dist/execution/invocation/lifecycle/active.d.ts +8 -2
  212. package/dist/execution/invocation/lifecycle/active.js +3 -3
  213. package/dist/execution/invocation/lifecycle/index.d.ts +1 -1
  214. package/dist/execution/invocation/result/errors.d.ts +0 -10
  215. package/dist/execution/invocation/result/errors.js +0 -17
  216. package/dist/execution/invocation/result/index.d.ts +2 -2
  217. package/dist/execution/invocation/result/index.js +1 -1
  218. package/dist/execution/invocation/result/project.js +41 -1
  219. package/dist/execution/node/serve.d.ts +2 -2
  220. package/dist/execution/node/serve.js +1 -1
  221. package/dist/execution/runtime/index.d.ts +1 -0
  222. package/dist/execution/runtime/index.js +1 -0
  223. package/dist/execution/runtime/load.d.ts +3 -3
  224. package/dist/execution/runtime/load.js +3 -2
  225. package/dist/execution/runtime/release.d.ts +17 -0
  226. package/dist/execution/runtime/release.js +7 -0
  227. package/dist/execution/serve.d.ts +18 -4
  228. package/dist/execution/serve.js +10 -0
  229. package/dist/execution/service/create.js +43 -7
  230. package/dist/execution/service/initialization.d.ts +4 -4
  231. package/dist/execution/service/initialization.js +23 -14
  232. package/dist/execution/service/release.d.ts +2 -2
  233. package/dist/execution/service/release.js +3 -2
  234. package/dist/execution/service/service.d.ts +20 -5
  235. package/dist/execution/service/serving/delivery.d.ts +5 -0
  236. package/dist/execution/service/{publication → serving}/delivery.js +4 -1
  237. package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
  238. package/dist/execution/service/serving/installation.d.ts +4 -0
  239. package/dist/execution/service/serving/installation.js +9 -0
  240. package/dist/execution/service/serving/source.d.ts +11 -0
  241. package/dist/execution/service/serving/source.js +15 -0
  242. package/dist/execution/workflows/discovery.d.ts +14 -0
  243. package/dist/execution/workflows/discovery.js +151 -0
  244. package/dist/execution/workflows/engine.d.ts +89 -0
  245. package/dist/execution/workflows/engine.js +1 -0
  246. package/dist/execution/workflows/envelope.d.ts +12 -0
  247. package/dist/execution/workflows/envelope.js +46 -0
  248. package/dist/execution/workflows/failure.d.ts +46 -0
  249. package/dist/execution/workflows/failure.js +160 -0
  250. package/dist/execution/workflows/index.d.ts +4 -0
  251. package/dist/execution/workflows/index.js +3 -0
  252. package/dist/execution/workflows/integrations.d.ts +13 -0
  253. package/dist/execution/workflows/integrations.js +25 -0
  254. package/dist/execution/workflows/options.d.ts +66 -0
  255. package/dist/execution/workflows/options.js +148 -0
  256. package/dist/execution/workflows/receiver.d.ts +24 -0
  257. package/dist/execution/workflows/receiver.js +99 -0
  258. package/dist/execution/workflows/route.d.ts +12 -0
  259. package/dist/execution/workflows/route.js +35 -0
  260. package/dist/execution/workflows/run.d.ts +21 -0
  261. package/dist/execution/workflows/run.js +321 -0
  262. package/dist/execution/workflows/steps.d.ts +42 -0
  263. package/dist/execution/workflows/steps.js +67 -0
  264. package/dist/index.d.ts +4 -4
  265. package/dist/index.js +2 -2
  266. package/dist/platform/graph/alias.d.ts +1 -5
  267. package/dist/platform/graph/alias.js +1 -5
  268. package/dist/platform/graph/document/index.d.ts +1 -1
  269. package/dist/platform/graph/document/index.js +1 -1
  270. package/dist/platform/graph/index.d.ts +1 -1
  271. package/dist/platform/graph/index.js +1 -1
  272. package/dist/platform/release/index.d.ts +2 -0
  273. package/dist/platform/release/index.js +2 -0
  274. package/dist/platform/schema/callable-authoring.d.ts +21 -0
  275. package/dist/platform/schema/callable-authoring.js +27 -0
  276. package/dist/platform/schema/class-authoring.d.ts +61 -11
  277. package/dist/platform/schema/class-authoring.js +37 -4
  278. package/dist/platform/schema/class-icon-svg.d.ts +9 -0
  279. package/dist/platform/schema/class-icon-svg.js +29 -0
  280. package/dist/platform/schema/class-icon.d.ts +3 -8
  281. package/dist/platform/schema/class-icon.js +2 -29
  282. package/dist/platform/schema/index.d.ts +6 -4
  283. package/dist/platform/schema/index.js +2 -1
  284. package/dist/platform/schema/property.d.ts +5 -0
  285. package/dist/platform/schema/schema-authoring.d.ts +14 -7
  286. package/dist/platform/schema/schema-authoring.js +5 -1
  287. package/dist/platform/versioning/dependents.d.ts +18 -0
  288. package/dist/platform/versioning/dependents.js +15 -0
  289. package/dist/platform/versioning/index.d.ts +5 -0
  290. package/dist/platform/versioning/index.js +5 -0
  291. package/dist/platform/versioning/name.d.ts +38 -0
  292. package/dist/platform/versioning/name.js +58 -0
  293. package/dist/platform/versioning/reference.d.ts +48 -0
  294. package/dist/platform/versioning/reference.js +95 -0
  295. package/dist/platform/versioning/version.d.ts +72 -0
  296. package/dist/platform/versioning/version.js +98 -0
  297. package/dist/project/admit.js +1 -5
  298. package/dist/project/define.d.ts +4 -4
  299. package/dist/project/define.js +55 -35
  300. package/dist/project/index.d.ts +1 -1
  301. package/dist/project/install-command.d.ts +6 -0
  302. package/dist/project/install-command.js +9 -0
  303. package/dist/project/project.d.ts +10 -8
  304. package/dist/testing/dataset/define.d.ts +1 -1
  305. package/dist/testing/durable/engine.d.ts +121 -0
  306. package/dist/testing/durable/engine.js +614 -0
  307. package/dist/testing/durable/index.d.ts +3 -0
  308. package/dist/testing/durable/index.js +1 -0
  309. package/dist/testing/durable/steps.d.ts +30 -0
  310. package/dist/testing/durable/steps.js +40 -0
  311. package/dist/testing/index.d.ts +6 -1
  312. package/dist/testing/index.js +5 -1
  313. package/dist/testing/load.js +1 -1
  314. package/dist/tooling/cli/adapter-command.d.ts +35 -0
  315. package/dist/tooling/cli/adapter-command.js +66 -0
  316. package/dist/tooling/cli/arguments.d.ts +17 -6
  317. package/dist/tooling/cli/arguments.js +175 -52
  318. package/dist/tooling/cli/build.d.ts +55 -0
  319. package/dist/tooling/cli/build.js +77 -0
  320. package/dist/tooling/cli/bun.d.ts +0 -1
  321. package/dist/tooling/cli/bun.js +0 -7
  322. package/dist/tooling/cli/commit.d.ts +35 -0
  323. package/dist/tooling/cli/commit.js +235 -0
  324. package/dist/tooling/cli/deploy-mode.d.ts +26 -0
  325. package/dist/tooling/cli/deploy-mode.js +59 -0
  326. package/dist/tooling/cli/deploy-result.d.ts +80 -0
  327. package/dist/tooling/cli/deploy-result.js +64 -0
  328. package/dist/tooling/cli/diff/declared.d.ts +7 -0
  329. package/dist/tooling/cli/diff/declared.js +27 -0
  330. package/dist/tooling/cli/diff/index.d.ts +30 -0
  331. package/dist/tooling/cli/diff/index.js +58 -0
  332. package/dist/tooling/cli/diff/render.d.ts +15 -0
  333. package/dist/tooling/cli/diff/render.js +131 -0
  334. package/dist/tooling/cli/diff/report.d.ts +88 -0
  335. package/dist/tooling/cli/diff/report.js +154 -0
  336. package/dist/tooling/cli/dotenv.d.ts +5 -5
  337. package/dist/tooling/cli/dotenv.js +6 -36
  338. package/dist/tooling/cli/help.js +173 -60
  339. package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
  340. package/dist/tooling/cli/immutable-deployment.js +135 -0
  341. package/dist/tooling/cli/index.d.ts +12 -4
  342. package/dist/tooling/cli/index.js +6 -3
  343. package/dist/tooling/cli/installed-on.d.ts +83 -0
  344. package/dist/tooling/cli/installed-on.js +156 -0
  345. package/dist/tooling/cli/list.d.ts +152 -0
  346. package/dist/tooling/cli/list.js +331 -0
  347. package/dist/tooling/cli/log.d.ts +5 -2
  348. package/dist/tooling/cli/log.js +9 -2
  349. package/dist/tooling/cli/orchestrate.d.ts +0 -6
  350. package/dist/tooling/cli/orchestrate.js +246 -90
  351. package/dist/tooling/cli/project.d.ts +3 -3
  352. package/dist/tooling/cli/publish/index.d.ts +81 -0
  353. package/dist/tooling/cli/publish/index.js +383 -0
  354. package/dist/tooling/cli/publish/report.d.ts +49 -0
  355. package/dist/tooling/cli/publish/report.js +15 -0
  356. package/dist/tooling/cli/registry/client.d.ts +121 -0
  357. package/dist/tooling/cli/registry/client.js +354 -0
  358. package/dist/tooling/cli/registry/error.d.ts +11 -0
  359. package/dist/tooling/cli/registry/error.js +17 -0
  360. package/dist/tooling/cli/registry/executable.d.ts +35 -0
  361. package/dist/tooling/cli/registry/executable.js +96 -0
  362. package/dist/tooling/cli/registry/index.d.ts +9 -0
  363. package/dist/tooling/cli/registry/index.js +8 -0
  364. package/dist/tooling/cli/registry/installations.d.ts +67 -0
  365. package/dist/tooling/cli/registry/installations.js +108 -0
  366. package/dist/tooling/cli/registry/process.d.ts +36 -0
  367. package/dist/tooling/cli/registry/process.js +119 -0
  368. package/dist/tooling/cli/secrets.d.ts +9 -0
  369. package/dist/tooling/cli/secrets.js +19 -0
  370. package/dist/tooling/cli/yank.d.ts +34 -0
  371. package/dist/tooling/cli/yank.js +32 -0
  372. package/dist/tooling/linter/adapters/typescript/imports.d.ts +0 -1
  373. package/dist/tooling/linter/adapters/typescript/imports.js +1 -5
  374. package/dist/tooling/linter/adapters/typescript/index.d.ts +1 -1
  375. package/dist/tooling/linter/adapters/typescript/index.js +1 -1
  376. package/dist/tooling/linter/adapters/typescript/syntax.d.ts +3 -3
  377. package/dist/tooling/linter/adapters/typescript/syntax.js +13 -25
  378. package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -2
  379. package/dist/tooling/linter/implementations/source/callable-requirements.js +11 -16
  380. package/dist/tooling/linter/implementations/source/dependencies.js +13 -72
  381. package/dist/tooling/linter/implementations/source/global.js +1 -2
  382. package/dist/tooling/linter/implementations/source/mutations.js +18 -29
  383. package/dist/tooling/linter/implementations/source/providers.js +5 -5
  384. package/dist/tooling/linter/implementations/source/queries.js +1 -17
  385. package/dist/tooling/linter/implementations/source/shared.d.ts +12 -4
  386. package/dist/tooling/linter/implementations/source/shared.js +101 -46
  387. package/dist/tooling/linter/implementations/source/verifiers.js +0 -2
  388. package/dist/tooling/linter/implementations/source/views.js +2 -2
  389. package/dist/tooling/linter/implementations/source/workflows.js +500 -17
  390. package/dist/tooling/linter/policy/generated.js +14 -63
  391. package/dist/tooling/linter/requirements/registry.js +6 -8
  392. package/dist/tooling/packaging/declarations/ownership.js +1 -1
  393. package/dist/tooling/packaging/finalize.d.ts +1 -1
  394. package/dist/tooling/packaging/finalize.js +1 -1
  395. package/docs/admission-age.md +88 -0
  396. package/docs/auth-api-migration.md +55 -0
  397. package/docs/business-errors.md +42 -0
  398. package/docs/domain-definition-migration.md +44 -0
  399. package/docs/domain-schema-migration.md +36 -0
  400. package/docs/durable-workflows.md +418 -0
  401. package/docs/handler-dependencies.md +213 -0
  402. package/docs/release.md +155 -0
  403. package/docs/schema-cost.md +124 -0
  404. package/package.json +45 -16
  405. package/dist/application/application.d.ts +0 -28
  406. package/dist/application/query/execution/projection.d.ts +0 -3
  407. package/dist/application/query/execution/projection.js +0 -3
  408. package/dist/deployment/adapter/deploy/context.d.ts +0 -15
  409. package/dist/deployment/adapter/deploy/index.d.ts +0 -2
  410. package/dist/deployment/adapter/deploy/result.d.ts +0 -50
  411. package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
  412. package/dist/deployment/adapter/prepare/context.d.ts +0 -23
  413. package/dist/deployment/adapter/prepare/index.d.ts +0 -2
  414. package/dist/deployment/deploy.d.ts +0 -20
  415. package/dist/deployment/deploy.js +0 -31
  416. package/dist/deployment/release/publication/index.d.ts +0 -6
  417. package/dist/deployment/release/publication/index.js +0 -6
  418. package/dist/deployment/release/publication/manifest.d.ts +0 -3
  419. package/dist/deployment/release/publication/manifest.js +0 -5
  420. package/dist/deployment/release/publication/requirements.d.ts +0 -3
  421. package/dist/deployment/release/publication/requirements.js +0 -3
  422. package/dist/deployment/release/publication/seal.d.ts +0 -10
  423. package/dist/deployment/release/publication/seal.js +0 -39
  424. package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
  425. package/dist/deployment/verify/preflight/artifact.js +0 -122
  426. package/dist/deployment/verify/preflight/publication.d.ts +0 -4
  427. package/dist/deployment/verify/preflight/publication.js +0 -14
  428. package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
  429. package/dist/deployment/verify/readiness/deployment.js +0 -151
  430. package/dist/deployment/verify/readiness/publication.d.ts +0 -11
  431. package/dist/deployment/verify/readiness/publication.js +0 -41
  432. package/dist/execution/service/errors.d.ts +0 -3
  433. package/dist/execution/service/errors.js +0 -3
  434. package/dist/execution/service/publication/delivery.d.ts +0 -2
  435. package/dist/execution/service/publication/installation.d.ts +0 -3
  436. package/dist/execution/service/publication/installation.js +0 -8
  437. package/dist/execution/service/publication/source.d.ts +0 -3
  438. package/dist/execution/service/publication/source.js +0 -11
  439. package/dist/platform/publication/index.d.ts +0 -2
  440. package/dist/platform/publication/index.js +0 -2
  441. package/dist/tooling/cli/astrale/authority.d.ts +0 -5
  442. package/dist/tooling/cli/astrale/authority.js +0 -11
  443. package/dist/tooling/cli/astrale/executable.d.ts +0 -2
  444. package/dist/tooling/cli/astrale/executable.js +0 -47
  445. package/dist/tooling/cli/astrale/failure.d.ts +0 -6
  446. package/dist/tooling/cli/astrale/failure.js +0 -48
  447. package/dist/tooling/cli/astrale/instance.d.ts +0 -11
  448. package/dist/tooling/cli/astrale/instance.js +0 -52
  449. package/dist/tooling/cli/astrale/process.d.ts +0 -13
  450. package/dist/tooling/cli/astrale/process.js +0 -94
  451. package/dist/tooling/cli/astrale/version.d.ts +0 -18
  452. package/dist/tooling/cli/astrale/version.js +0 -55
  453. package/dist/tooling/cli/credential.d.ts +0 -2
  454. package/dist/tooling/cli/credential.js +0 -57
  455. package/dist/tooling/cli/deprecations.d.ts +0 -9
  456. package/dist/tooling/cli/deprecations.js +0 -15
  457. package/dist/tooling/cli/development/candidate.d.ts +0 -25
  458. package/dist/tooling/cli/development/candidate.js +0 -176
  459. package/dist/tooling/cli/development/deployment.d.ts +0 -16
  460. package/dist/tooling/cli/development/deployment.js +0 -39
  461. package/dist/tooling/cli/development/develop.d.ts +0 -11
  462. package/dist/tooling/cli/development/develop.js +0 -243
  463. package/dist/tooling/cli/development/lease.d.ts +0 -18
  464. package/dist/tooling/cli/development/lease.js +0 -163
  465. package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
  466. package/dist/tooling/cli/development/lifecycle.js +0 -43
  467. package/dist/tooling/cli/development/project-imports.d.ts +0 -22
  468. package/dist/tooling/cli/development/project-imports.js +0 -39
  469. package/dist/tooling/cli/development/project-lock.d.ts +0 -16
  470. package/dist/tooling/cli/development/project-lock.js +0 -41
  471. package/dist/tooling/cli/development/rebuild.d.ts +0 -13
  472. package/dist/tooling/cli/development/rebuild.js +0 -58
  473. package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
  474. package/dist/tooling/cli/development/release-evidence.js +0 -10
  475. package/dist/tooling/cli/development/report.d.ts +0 -6
  476. package/dist/tooling/cli/development/report.js +0 -14
  477. package/dist/tooling/cli/development/session-file.d.ts +0 -53
  478. package/dist/tooling/cli/development/session-file.js +0 -337
  479. package/dist/tooling/cli/development/source-watch.d.ts +0 -14
  480. package/dist/tooling/cli/development/source-watch.js +0 -140
  481. package/dist/tooling/cli/development/sources.d.ts +0 -7
  482. package/dist/tooling/cli/development/sources.js +0 -48
  483. package/dist/tooling/cli/development/target-lock.d.ts +0 -16
  484. package/dist/tooling/cli/development/target-lock.js +0 -68
  485. package/dist/tooling/cli/development/view.d.ts +0 -28
  486. package/dist/tooling/cli/development/view.js +0 -151
  487. package/dist/tooling/cli/environment-release.d.ts +0 -21
  488. package/dist/tooling/cli/environment-release.js +0 -46
  489. package/dist/tooling/cli/evidence.d.ts +0 -11
  490. package/dist/tooling/cli/evidence.js +0 -53
  491. package/dist/tooling/cli/installation/index.d.ts +0 -2
  492. package/dist/tooling/cli/installation/index.js +0 -1
  493. package/dist/tooling/cli/installation/observation.d.ts +0 -10
  494. package/dist/tooling/cli/installation/observation.js +0 -44
  495. package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
  496. package/dist/tooling/cli/installation/reconcile.js +0 -122
  497. package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
  498. package/dist/tooling/linter/implementations/source/migrations.js +0 -113
  499. package/dist/tooling/linter/qualification/index.d.ts +0 -10
  500. package/dist/tooling/linter/qualification/index.js +0 -2
  501. package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
  502. package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
  503. package/dist/tooling/linter/qualification/runner.d.ts +0 -3
  504. package/dist/tooling/linter/qualification/runner.js +0 -6
  505. /package/dist/application/{application.js → domain.js} +0 -0
  506. /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
  507. /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
  508. /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
  509. /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
  510. /package/dist/deployment/adapter/{prepare/artifact.js → release/command.js} +0 -0
  511. /package/dist/deployment/adapter/{prepare → release}/context.js +0 -0
  512. /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
  513. /package/dist/deployment/release/{publication → served}/routes.js +0 -0
  514. /package/dist/execution/service/{publication → serving}/index.js +0 -0
@@ -0,0 +1,101 @@
1
+ import type { WorkerRecord, WorkerRecordWireV1 } from './record.js';
2
+ /** Where a Worker host addresses Services and deployments. */
3
+ export interface WorkerHostingV1 {
4
+ /**
5
+ * The DNS name every URL ends with: `https://<service>.<routingDomain>` serves a Service's
6
+ * current deployment, `https://<label>.<routingDomain>` one deployment.
7
+ */
8
+ readonly routingDomain: string;
9
+ }
10
+ /** What a host lists: the deployments of the caller's Services, optionally of one project or environment. */
11
+ export interface WorkerDeploymentListRequestV1 {
12
+ readonly project?: string;
13
+ readonly environment?: string;
14
+ }
15
+ /** The lifecycle of one deployment at its host. */
16
+ export type WorkerDeploymentState = 'deploying' | 'active' | 'retiring' | 'retired' | 'failed';
17
+ /**
18
+ * What a host knows of one deployment. It names a deployment by its label and URL, never by a
19
+ * provider version. A host keeps every deployment until it is retired: it has no preview, expiry or
20
+ * last call.
21
+ */
22
+ export interface WorkerDeploymentSummaryV1 {
23
+ /** The host's id of the deployment (a node id on Admin's Services). */
24
+ readonly id: string;
25
+ readonly url: string;
26
+ readonly label: string;
27
+ /** The host's id of the Service this deployment is a version of. */
28
+ readonly serviceId: string;
29
+ /** The name of that Service: the first part of the label. */
30
+ readonly service: string;
31
+ readonly project: string;
32
+ readonly environment: string;
33
+ /** Who owns the Service (an Identity node path on Admin's Services). */
34
+ readonly owner: string;
35
+ readonly state: WorkerDeploymentState;
36
+ /** Whether the Service's stable URL serves this deployment. */
37
+ readonly current: boolean;
38
+ readonly createdAt: string;
39
+ /** When its retirement began; present once it is `retiring`. */
40
+ readonly retiredAt?: string;
41
+ readonly buildDigest: string;
42
+ /** The digest of its `WorkerConfigurationV1`. */
43
+ readonly configuration: string;
44
+ /** The RFC 7638 thumbprint of its key, when its configuration asked for a signing identity. */
45
+ readonly signingKeyId?: string;
46
+ /** The record it serves, when its configuration asked for one. */
47
+ readonly record?: WorkerRecordWireV1;
48
+ }
49
+ /** One summary with its record decoded. */
50
+ export type WorkerDeploymentSummary = Omit<WorkerDeploymentSummaryV1, 'record'> & {
51
+ readonly record?: WorkerRecord;
52
+ };
53
+ /** Why a host refused to host one Worker release. A refusal changed nothing (see each reason). */
54
+ export type WorkerDeploymentRejectionReason = 'invalid-deployment' | 'address-mismatch' | 'build-mismatch' | 'service-owned-elsewhere' | 'deployment-conflict' | 'deployment-retired' | 'hosting-unavailable' | 'service-unavailable';
55
+ export declare const WORKER_DEPLOYMENT_REJECTIONS: readonly WorkerDeploymentRejectionReason[];
56
+ /**
57
+ * `WorkerDeploymentResponseV1`: a deployment `created` with the request's secrets `bound` to it,
58
+ * or `reused` with its declared secrets rewritten in place (`updated`) or left `unchanged`, or a
59
+ * refusal. A refusal changed nothing, except that a `service-unavailable` may follow effects (a
60
+ * creation that lost its lease after uploading, an in-place rewrite that wrote part of the
61
+ * values): rerunning the same deploy converges.
62
+ */
63
+ export type WorkerDeploymentResponseV1 = {
64
+ readonly kind: 'deployed';
65
+ readonly state: 'created' | 'reused';
66
+ readonly secrets: {
67
+ readonly state: 'bound' | 'updated' | 'unchanged';
68
+ };
69
+ readonly deployment: WorkerDeploymentSummaryV1;
70
+ } | WorkerDeploymentRejection;
71
+ export interface WorkerDeploymentRejection {
72
+ readonly kind: 'rejected';
73
+ readonly reason: WorkerDeploymentRejectionReason;
74
+ readonly message: string;
75
+ /** When a retry may succeed, for a refusal that only waits on another operation. */
76
+ readonly retryAfter?: string;
77
+ }
78
+ /** One decoded answer of a deploy. */
79
+ export type WorkerDeploymentResult = {
80
+ readonly kind: 'deployed';
81
+ readonly state: 'created' | 'reused';
82
+ readonly secrets: {
83
+ readonly state: 'bound' | 'updated' | 'unchanged';
84
+ };
85
+ readonly deployment: WorkerDeploymentSummary;
86
+ } | WorkerDeploymentRejection;
87
+ /** Admit the answer of a host's `hosting`: exactly its routing domain. */
88
+ export declare function decodeWorkerHosting(input: unknown): WorkerHostingV1;
89
+ /**
90
+ * Admit the answer of a deploy exactly: a deployment whose state reports the secret state it
91
+ * pairs with, or a refusal a host can give.
92
+ */
93
+ export declare function decodeWorkerDeploymentResponse(input: unknown): WorkerDeploymentResult;
94
+ /** Admit the answer of a host's `list`: the summaries of the caller's deployments, in its order. */
95
+ export declare function decodeWorkerDeploymentList(input: unknown): readonly WorkerDeploymentSummary[];
96
+ /**
97
+ * Admit one summary exactly: node ids and names a person can read, a label whose first part is
98
+ * the Service's name, the URL of that label, a known state, instants, digests, and a record that
99
+ * decodes.
100
+ */
101
+ export declare function decodeWorkerDeploymentSummary(input: unknown): WorkerDeploymentSummary;
@@ -0,0 +1,207 @@
1
+ import { parseDeploymentLabel } from '../address/label.js';
2
+ import { serviceName } from './address.js';
3
+ import { decodeWorkerRecord } from './record.js';
4
+ export const WORKER_DEPLOYMENT_REJECTIONS = Object.freeze([
5
+ 'invalid-deployment',
6
+ 'address-mismatch',
7
+ 'build-mismatch',
8
+ 'service-owned-elsewhere',
9
+ 'deployment-conflict',
10
+ 'deployment-retired',
11
+ 'hosting-unavailable',
12
+ 'service-unavailable',
13
+ ]);
14
+ const STATES = Object.freeze([
15
+ 'deploying',
16
+ 'active',
17
+ 'retiring',
18
+ 'retired',
19
+ 'failed',
20
+ ]);
21
+ /** Which secret states each deployment state reports. */
22
+ const SECRETS_BY_STATE = Object.freeze({
23
+ created: Object.freeze(['bound']),
24
+ reused: Object.freeze(['updated', 'unchanged']),
25
+ });
26
+ /** Admit the answer of a host's `hosting`: exactly its routing domain. */
27
+ export function decodeWorkerHosting(input) {
28
+ const value = exact(input, ['routingDomain'], [], 'hosting');
29
+ if (typeof value.routingDomain !== 'string' || !isDnsName(value.routingDomain)) {
30
+ invalid('hosting', 'routingDomain');
31
+ }
32
+ return Object.freeze({ routingDomain: value.routingDomain });
33
+ }
34
+ /**
35
+ * Admit the answer of a deploy exactly: a deployment whose state reports the secret state it
36
+ * pairs with, or a refusal a host can give.
37
+ */
38
+ export function decodeWorkerDeploymentResponse(input) {
39
+ const value = exact(input, ['kind'], ['state', 'secrets', 'deployment', 'reason', 'message', 'retryAfter'], 'deploy');
40
+ if (value.kind === 'rejected') {
41
+ exact(value, ['kind', 'reason', 'message'], ['retryAfter'], 'refusal');
42
+ if (!WORKER_DEPLOYMENT_REJECTIONS.includes(value.reason)) {
43
+ invalid('refusal', 'reason');
44
+ }
45
+ if (typeof value.message !== 'string' ||
46
+ value.message.length < 1 ||
47
+ value.message.length > 500) {
48
+ invalid('refusal', 'message');
49
+ }
50
+ if (value.retryAfter !== undefined && !isInstant(value.retryAfter)) {
51
+ invalid('refusal', 'retryAfter');
52
+ }
53
+ return Object.freeze({
54
+ kind: 'rejected',
55
+ reason: value.reason,
56
+ message: value.message,
57
+ ...(value.retryAfter === undefined ? {} : { retryAfter: value.retryAfter }),
58
+ });
59
+ }
60
+ exact(value, ['kind', 'state', 'secrets', 'deployment'], [], 'deploy');
61
+ if (value.kind !== 'deployed')
62
+ invalid('deploy', 'kind');
63
+ if (value.state !== 'created' && value.state !== 'reused')
64
+ invalid('deploy', 'state');
65
+ const secrets = exact(value.secrets, ['state'], [], 'secrets');
66
+ const allowed = SECRETS_BY_STATE[value.state];
67
+ if (typeof secrets.state !== 'string' || !allowed.includes(secrets.state)) {
68
+ invalid('deploy', 'secrets.state');
69
+ }
70
+ return Object.freeze({
71
+ kind: 'deployed',
72
+ state: value.state,
73
+ secrets: Object.freeze({ state: secrets.state }),
74
+ deployment: decodeWorkerDeploymentSummary(value.deployment),
75
+ });
76
+ }
77
+ /** Admit the answer of a host's `list`: the summaries of the caller's deployments, in its order. */
78
+ export function decodeWorkerDeploymentList(input) {
79
+ const value = exact(input, ['deployments'], [], 'list');
80
+ if (!Array.isArray(value.deployments))
81
+ invalid('list', 'deployments');
82
+ return Object.freeze(value.deployments.map((deployment) => decodeWorkerDeploymentSummary(deployment)));
83
+ }
84
+ /**
85
+ * Admit one summary exactly: node ids and names a person can read, a label whose first part is
86
+ * the Service's name, the URL of that label, a known state, instants, digests, and a record that
87
+ * decodes.
88
+ */
89
+ export function decodeWorkerDeploymentSummary(input) {
90
+ const value = exact(input, [
91
+ 'id',
92
+ 'url',
93
+ 'label',
94
+ 'serviceId',
95
+ 'service',
96
+ 'project',
97
+ 'environment',
98
+ 'owner',
99
+ 'state',
100
+ 'current',
101
+ 'createdAt',
102
+ 'buildDigest',
103
+ 'configuration',
104
+ ], ['retiredAt', 'signingKeyId', 'record'], 'deployment');
105
+ for (const key of [
106
+ 'id',
107
+ 'url',
108
+ 'label',
109
+ 'serviceId',
110
+ 'service',
111
+ 'project',
112
+ 'environment',
113
+ 'owner',
114
+ ]) {
115
+ if (typeof value[key] !== 'string' || !isPrintable(value[key]))
116
+ invalid('deployment', key);
117
+ }
118
+ if (value.signingKeyId !== undefined) {
119
+ if (typeof value.signingKeyId !== 'string' || !isPrintable(value.signingKeyId)) {
120
+ invalid('deployment', 'signingKeyId');
121
+ }
122
+ }
123
+ let line;
124
+ try {
125
+ line = parseDeploymentLabel(value.label).line;
126
+ }
127
+ catch {
128
+ invalid('deployment', 'label');
129
+ }
130
+ if (value.service !== line)
131
+ invalid('deployment', 'service');
132
+ let named;
133
+ try {
134
+ named = serviceName(value.project, value.environment);
135
+ }
136
+ catch {
137
+ invalid('deployment', 'project');
138
+ }
139
+ if (named !== line)
140
+ invalid('deployment', 'service');
141
+ if (!isDeploymentUrl(value.url, value.label))
142
+ invalid('deployment', 'url');
143
+ if (!STATES.includes(value.state))
144
+ invalid('deployment', 'state');
145
+ if (typeof value.current !== 'boolean')
146
+ invalid('deployment', 'current');
147
+ if (!isInstant(value.createdAt))
148
+ invalid('deployment', 'createdAt');
149
+ if (value.retiredAt !== undefined && !isInstant(value.retiredAt))
150
+ invalid('deployment', 'retiredAt');
151
+ for (const key of ['buildDigest', 'configuration']) {
152
+ if (typeof value[key] !== 'string' || !/^sha256:[0-9a-f]{64}$/u.test(value[key])) {
153
+ invalid('deployment', key);
154
+ }
155
+ }
156
+ let record;
157
+ if (value.record !== undefined) {
158
+ try {
159
+ record = decodeWorkerRecord(value.record);
160
+ }
161
+ catch {
162
+ invalid('deployment', 'record');
163
+ }
164
+ }
165
+ const summary = { ...value };
166
+ delete summary.record;
167
+ return Object.freeze({
168
+ ...summary,
169
+ ...(record === undefined ? {} : { record }),
170
+ });
171
+ }
172
+ /** `https://<label>.<routing domain>`, nothing more. */
173
+ function isDeploymentUrl(url, label) {
174
+ const prefix = `https://${label}.`;
175
+ return url.startsWith(prefix) && isDnsName(url.slice(prefix.length));
176
+ }
177
+ /** Text a person can read in a listing: at most 512 characters, none of them a control character. */
178
+ function isPrintable(value) {
179
+ return value.length > 0 && value.length <= 512 && !/[\p{Cc}]/u.test(value);
180
+ }
181
+ function isInstant(value) {
182
+ return (typeof value === 'string' &&
183
+ value.length > 0 &&
184
+ value.length <= 64 &&
185
+ !Number.isNaN(Date.parse(value)));
186
+ }
187
+ function isDnsName(value) {
188
+ return (value.length <= 253 &&
189
+ value.split('.').every((label) => /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/u.test(label)));
190
+ }
191
+ function exact(input, required, optional, label) {
192
+ if (input === null || typeof input !== 'object' || Array.isArray(input))
193
+ invalid(label);
194
+ const value = input;
195
+ for (const key of Reflect.ownKeys(value)) {
196
+ if (typeof key !== 'string' || (!required.includes(key) && !optional.includes(key))) {
197
+ invalid(label, String(key));
198
+ }
199
+ }
200
+ for (const key of required)
201
+ if (!Object.hasOwn(value, key))
202
+ invalid(label, key);
203
+ return value;
204
+ }
205
+ function invalid(label, member) {
206
+ throw new TypeError(`The Worker host returned an invalid ${label} answer${member === undefined ? '' : ` (${member})`}.`);
207
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Disposable entries one deployment keeps across its requests, and across its isolates where the
3
+ * platform shares them. An entry may vanish at any time and never outlives its expiry. A reader
4
+ * treats a failed or late read as a miss, so nothing that must persist or be coordinated belongs
5
+ * here: every consumer stays correct when the cache keeps nothing.
6
+ */
7
+ export interface DeploymentCache {
8
+ /** The value kept under `key`, or undefined when it expired, vanished or was never kept. */
9
+ get(key: string): Promise<string | undefined>;
10
+ /**
11
+ * Keep `value` under `key` until `expiresAt` (Unix milliseconds) at the latest. The cache may
12
+ * drop it sooner, or not keep it at all.
13
+ */
14
+ put(key: string, value: string, expiresAt: number): Promise<void>;
15
+ }
16
+ /** Capture a caller-supplied cache, receiver-bound, after checking its shape. */
17
+ export declare function deploymentCache(input: DeploymentCache): DeploymentCache;
@@ -0,0 +1,11 @@
1
+ /** Capture a caller-supplied cache, receiver-bound, after checking its shape. */
2
+ export function deploymentCache(input) {
3
+ if (input === null ||
4
+ typeof input !== 'object' ||
5
+ Array.isArray(input) ||
6
+ typeof input.get !== 'function' ||
7
+ typeof input.put !== 'function') {
8
+ throw new TypeError('Deployment cache is invalid.');
9
+ }
10
+ return Object.freeze({ get: input.get.bind(input), put: input.put.bind(input) });
11
+ }
@@ -0,0 +1,2 @@
1
+ export { deploymentCache, type DeploymentCache } from './cache.js';
2
+ export { DEFAULT_MEMORY_CACHE_ENTRIES, memoryCache, type MemoryCacheOptions } from './memory.js';
@@ -0,0 +1,2 @@
1
+ export { deploymentCache } from './cache.js';
2
+ export { DEFAULT_MEMORY_CACHE_ENTRIES, memoryCache } from './memory.js';
@@ -0,0 +1,13 @@
1
+ import type { DeploymentCache } from './cache.js';
2
+ /** Entries one memory cache keeps by default before it evicts the least recently used. */
3
+ export declare const DEFAULT_MEMORY_CACHE_ENTRIES = 1024;
4
+ export interface MemoryCacheOptions {
5
+ /** Most entries kept at once; the least recently used is evicted first. */
6
+ readonly maximumEntries?: number;
7
+ }
8
+ /**
9
+ * A deployment cache held in this process or isolate: bounded, least recently used first out, and
10
+ * an entry is gone at its expiry. It keeps values only, never a pending operation, so no request
11
+ * waits on another's I/O.
12
+ */
13
+ export declare function memoryCache(options?: MemoryCacheOptions, now?: () => number): DeploymentCache;
@@ -0,0 +1,48 @@
1
+ /** Entries one memory cache keeps by default before it evicts the least recently used. */
2
+ export const DEFAULT_MEMORY_CACHE_ENTRIES = 1_024;
3
+ /**
4
+ * A deployment cache held in this process or isolate: bounded, least recently used first out, and
5
+ * an entry is gone at its expiry. It keeps values only, never a pending operation, so no request
6
+ * waits on another's I/O.
7
+ */
8
+ export function memoryCache(options = {}, now = Date.now) {
9
+ if (options === null || typeof options !== 'object' || Array.isArray(options))
10
+ invalid();
11
+ const maximum = options.maximumEntries ?? DEFAULT_MEMORY_CACHE_ENTRIES;
12
+ if (!Number.isSafeInteger(maximum) || maximum < 1) {
13
+ throw new TypeError('Memory cache maximumEntries must be a positive integer.');
14
+ }
15
+ const entries = new Map();
16
+ return Object.freeze({
17
+ async get(key) {
18
+ if (typeof key !== 'string')
19
+ invalid();
20
+ const entry = entries.get(key);
21
+ if (entry === undefined)
22
+ return undefined;
23
+ entries.delete(key);
24
+ if (entry.expiresAt <= now())
25
+ return undefined;
26
+ entries.set(key, entry);
27
+ return entry.value;
28
+ },
29
+ async put(key, value, expiresAt) {
30
+ if (typeof key !== 'string' || typeof value !== 'string' || !Number.isFinite(expiresAt)) {
31
+ invalid();
32
+ }
33
+ entries.delete(key);
34
+ if (expiresAt <= now())
35
+ return;
36
+ while (entries.size >= maximum) {
37
+ const oldest = entries.keys().next().value;
38
+ if (oldest === undefined)
39
+ break;
40
+ entries.delete(oldest);
41
+ }
42
+ entries.set(key, Object.freeze({ value, expiresAt }));
43
+ },
44
+ });
45
+ }
46
+ function invalid() {
47
+ throw new TypeError('Memory cache input is invalid.');
48
+ }
@@ -1,9 +1,18 @@
1
1
  import type { Fetch } from '@astrale-os/kernel-client';
2
- import type { CredentialInput, Grant, IssuerId } from '../../platform/auth/index.js';
3
- import type { AuthenticatedInvocation } from '../invocation/index.js';
2
+ import type { CredentialInput, IdentityId, IssuerId } from '../../platform/auth/index.js';
3
+ import type { AuthenticatedInvocation, SelfInvocation } from '../invocation/index.js';
4
4
  import type { InvocationAdmissionInput } from '../invocation/index.js';
5
5
  import type { IdentityNetworkPolicy, VerificationBasis, VerificationBasisResolver } from './jwks.js';
6
6
  import type { SigningMaterial } from './signing.js';
7
+ import { ClientSession } from '../../platform/client/session/index.js';
8
+ import { NodeId } from '../../platform/graph/node/index.js';
9
+ /**
10
+ * How long a callback Session reuses a learned route. It stays at most the Kernel's in-flight
11
+ * issuer window (`KERNEL_INFLIGHT_ISSUER_MS`, Host default 300 s; CT11): a route learned to a
12
+ * deployment replaced by a consented install ages out while that deployment is still accepted and
13
+ * answers the reserved miss, never after its own credential is refused (AM-85).
14
+ */
15
+ export declare const DEFAULT_ROUTE_AGE_MS = 60000;
7
16
  export declare function admit(request: InvocationAdmissionInput, configuration: AuthenticationConfiguration): Promise<unknown>;
8
17
  export interface AuthenticationConfiguration {
9
18
  readonly issuer: IssuerId;
@@ -17,5 +26,26 @@ export declare function authenticate(credentialInput: CredentialInput, expectedK
17
26
  readonly deadline: number;
18
27
  readonly signal: AbortSignal;
19
28
  }, configuration: AuthenticationConfiguration): Promise<AuthenticatedInvocation>;
20
- export declare function acceptResolvedDelegation(input: unknown): Grant;
29
+ /**
30
+ * The Domain's own authority toward the source Kernel of an admitted call that carries no
31
+ * credential. No caller credential bounds it: its callbacks live as long as the execution, exactly
32
+ * as the `self` half of an authenticated call does within its carrier.
33
+ */
34
+ export declare function selfInvocation(kernel: IssuerId, execution: {
35
+ readonly deadline: number;
36
+ readonly signal: AbortSignal;
37
+ }, configuration: AuthenticationConfiguration): SelfInvocation;
38
+ /**
39
+ * The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`,
40
+ * which no caller credential carries: the run acts as its executor, never as its initiator. Every
41
+ * credential names `executionId` in `EXECUTION_CLAIM`, so the Kernel can accept a replaced issuer
42
+ * for the steps of a run in flight at a consented issuer change. The caller owns the returned
43
+ * Session.
44
+ */
45
+ export declare function executorSession(kernel: IssuerId, executionId: NodeId, execution: {
46
+ readonly deadline: number;
47
+ readonly signal: AbortSignal;
48
+ }, configuration: AuthenticationConfiguration): ClientSession;
49
+ /** Accept a Kernel delegation proof claim naming exactly one resolved caller Identity. */
50
+ export declare function acceptResolvedDelegation(input: unknown): IdentityId;
21
51
  export type { VerificationBasis };
@@ -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);
@@ -50,15 +56,14 @@ export async function authenticate(credentialInput, expectedKernel, execution, c
50
56
  throw protocolError('AUTH_INVALID', 'Credential is invalid.');
51
57
  }
52
58
  const expressions = callbackIdentities(established.delegation.credential);
59
+ const session = (expression, validUntil) => callbackSession(expectedKernel, expression, validUntil, execution, configuration);
53
60
  const sessions = Object.freeze({
54
- caller: callbackSession(expressions.caller),
55
- self: callbackSession(expressions.self),
56
- union: callbackSession(expressions.union),
61
+ caller: session(expressions.caller, established.validUntil),
62
+ self: session(expressions.self, established.verified.exp),
57
63
  });
58
64
  const graph = Object.freeze({
59
65
  caller: bindSession(sessions.caller, execution),
60
66
  self: bindSession(sessions.self, execution),
61
- union: bindSession(sessions.union, execution),
62
67
  });
63
68
  let closed = false;
64
69
  return Object.freeze({
@@ -70,35 +75,72 @@ export async function authenticate(credentialInput, expectedKernel, execution, c
70
75
  closed = true;
71
76
  sessions.caller.close();
72
77
  sessions.self.close();
73
- sessions.union.close();
74
78
  },
75
79
  });
76
- function callbackSession(expression) {
77
- const resolveCallback = createCallbackCredentialResolver(configuration.signing, configuration.issuer, configuration.subject, expectedKernel, expression, established.verified, execution);
78
- return new ClientSession({
79
- kernel: expectedKernel,
80
- fetch: boundedFetch(configuration.fetch, execution.signal),
81
- auth: {
82
- ttlSeconds: Math.min(callbackTtl(execution.deadline), maximumCallbackDelegationTtlSeconds),
83
- async resolve(_call, signal) {
84
- const callback = await resolveCallback(signal);
85
- signal.throwIfAborted();
86
- return {
87
- credential: callback.credential,
88
- delegate: { ttlSeconds: callback.delegateTtlSeconds },
89
- };
90
- },
91
- },
92
- policy: {
93
- maximumRouteAgeMs: DEFAULT_ROUTE_AGE_MS,
94
- ...(configuration.policy.allowEndpoint === undefined
95
- ? {}
96
- : { allowEndpoint: configuration.policy.allowEndpoint }),
97
- ...(configuration.policy.allowInsecureHttp === true ? { allowInsecureHttp: true } : {}),
80
+ }
81
+ /**
82
+ * The Domain's own authority toward the source Kernel of an admitted call that carries no
83
+ * credential. No caller credential bounds it: its callbacks live as long as the execution, exactly
84
+ * as the `self` half of an authenticated call does within its carrier.
85
+ */
86
+ export function selfInvocation(kernel, execution, configuration) {
87
+ requireLive(execution);
88
+ const admitted = httpIssuer(kernel, configuration.policy.allowInsecureHttp === true);
89
+ admitEndpoint(invocationUrl(admitted), configuration.policy);
90
+ const session = callbackSession(admitted, selfIdentity, undefined, execution, configuration);
91
+ let closed = false;
92
+ return Object.freeze({
93
+ graph: Object.freeze({ self: bindSession(session, execution) }),
94
+ close() {
95
+ if (closed)
96
+ return;
97
+ closed = true;
98
+ session.close();
99
+ },
100
+ });
101
+ }
102
+ /**
103
+ * The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`,
104
+ * which no caller credential carries: the run acts as its executor, never as its initiator. Every
105
+ * credential names `executionId` in `EXECUTION_CLAIM`, so the Kernel can accept a replaced issuer
106
+ * for the steps of a run in flight at a consented issuer change. The caller owns the returned
107
+ * Session.
108
+ */
109
+ export function executorSession(kernel, executionId, execution, configuration) {
110
+ const admitted = httpIssuer(kernel, configuration.policy.allowInsecureHttp === true);
111
+ admitEndpoint(invocationUrl(admitted), configuration.policy);
112
+ return callbackSession(admitted, selfIdentity, undefined, execution, configuration, executionId);
113
+ }
114
+ /**
115
+ * A Session whose callbacks carry `expression`, none outliving the execution or `validUntil`, the
116
+ * earliest expiry in Unix seconds of the credentials they derive from.
117
+ */
118
+ function callbackSession(kernel, expression, validUntil, execution, configuration, executionId) {
119
+ const resolveCallback = createCallbackCredentialResolver(configuration.signing, configuration.issuer, configuration.subject, kernel, expression, validUntil, execution, executionId);
120
+ const expiresAt = Math.min(execution.deadline, (validUntil ?? Number.POSITIVE_INFINITY) * 1_000);
121
+ return new ClientSession({
122
+ kernel,
123
+ fetch: boundedFetch(configuration.fetch, execution.signal),
124
+ auth: {
125
+ ttlSeconds: Math.min(callbackTtl(expiresAt), maximumCallbackDelegationTtlSeconds),
126
+ async resolve(_call, signal) {
127
+ const callback = await resolveCallback(signal);
128
+ signal.throwIfAborted();
129
+ return {
130
+ credential: callback.credential,
131
+ delegate: { ttlSeconds: callback.delegateTtlSeconds },
132
+ };
98
133
  },
99
- timeoutMs: Math.max(1, execution.deadline - Date.now()),
100
- });
101
- }
134
+ },
135
+ policy: {
136
+ maximumRouteAgeMs: DEFAULT_ROUTE_AGE_MS,
137
+ ...(configuration.policy.allowEndpoint === undefined
138
+ ? {}
139
+ : { allowEndpoint: configuration.policy.allowEndpoint }),
140
+ ...(configuration.policy.allowInsecureHttp === true ? { allowInsecureHttp: true } : {}),
141
+ },
142
+ timeoutMs: Math.max(1, execution.deadline - Date.now()),
143
+ });
102
144
  }
103
145
  async function establishCaller(input, audience, verification, execution, policy) {
104
146
  requireLive(execution);
@@ -112,7 +154,7 @@ async function establishCaller(input, audience, verification, execution, policy)
112
154
  if (proof.verified.sub !== context.verified.sub) {
113
155
  throw new CredentialRejected('Destination carrier and authority proof subjects differ.');
114
156
  }
115
- const authority = acceptResolvedDelegation(proof.verified.claims.delegation);
157
+ const identity = acceptResolvedDelegation(proof.verified.claims.delegation);
116
158
  let principal;
117
159
  try {
118
160
  principal = NodeId(context.verified.sub);
@@ -122,11 +164,12 @@ async function establishCaller(input, audience, verification, execution, policy)
122
164
  }
123
165
  return Object.freeze({
124
166
  verified: context.verified,
167
+ validUntil: Math.min(context.verified.exp ?? Number.POSITIVE_INFINITY, proof.verified.exp ?? Number.POSITIVE_INFINITY),
125
168
  delegation: carried,
126
169
  caller: Object.freeze({
127
170
  kind: 'authenticated',
128
171
  principal,
129
- authority,
172
+ identity,
130
173
  authentication: credential.evidence(context),
131
174
  }),
132
175
  });
@@ -137,6 +180,7 @@ async function establishCaller(input, audience, verification, execution, policy)
137
180
  throw protocolError('BACKEND_UNAVAILABLE', 'Credential issuer is unavailable.');
138
181
  }
139
182
  if (cause instanceof CredentialRejected ||
183
+ cause instanceof AuthValueError ||
140
184
  cause instanceof joseErrors.JOSEError ||
141
185
  cause instanceof protocolErrors.ProtocolError) {
142
186
  throw protocolError('AUTH_INVALID', 'Credential is invalid.');
@@ -144,6 +188,7 @@ async function establishCaller(input, audience, verification, execution, policy)
144
188
  throw cause;
145
189
  }
146
190
  }
191
+ /** Accept a Kernel delegation proof claim naming exactly one resolved caller Identity. */
147
192
  export function acceptResolvedDelegation(input) {
148
193
  if (input === null ||
149
194
  typeof input !== 'object' ||
@@ -154,5 +199,14 @@ export function acceptResolvedDelegation(input) {
154
199
  Reflect.get(input, 'v') !== 1) {
155
200
  throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected resolved delegation.');
156
201
  }
157
- return grant.accept({ expr: Reflect.get(input, 'expr') });
202
+ const raw = Reflect.get(input, 'expr');
203
+ // grant.accept collapses duplicate operands (union(X, X) becomes X), so the leaf is checked as sent.
204
+ if (raw === null || typeof raw !== 'object' || Reflect.get(raw, 'kind') !== 'identity') {
205
+ throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected one resolved caller Identity.');
206
+ }
207
+ const { expr } = grant.accept({ expr: raw });
208
+ if (expr.kind !== 'identity') {
209
+ throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected one resolved caller Identity.');
210
+ }
211
+ return expr.id;
158
212
  }