@elaraai/e3-rack 0.0.0-bootstrap.0 → 1.0.94

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 (306) hide show
  1. package/README.md +407 -2
  2. package/dist/src/client/client.spec.d.ts +6 -0
  3. package/dist/src/client/client.spec.d.ts.map +1 -0
  4. package/dist/src/client/client.spec.js +150 -0
  5. package/dist/src/client/client.spec.js.map +1 -0
  6. package/dist/src/client/connect.d.ts +52 -0
  7. package/dist/src/client/connect.d.ts.map +1 -0
  8. package/dist/src/client/connect.js +112 -0
  9. package/dist/src/client/connect.js.map +1 -0
  10. package/dist/src/client/hub-client.d.ts +57 -0
  11. package/dist/src/client/hub-client.d.ts.map +1 -0
  12. package/dist/src/client/hub-client.js +87 -0
  13. package/dist/src/client/hub-client.js.map +1 -0
  14. package/dist/src/client/local-http.d.ts +78 -0
  15. package/dist/src/client/local-http.d.ts.map +1 -0
  16. package/dist/src/client/local-http.js +149 -0
  17. package/dist/src/client/local-http.js.map +1 -0
  18. package/dist/src/client/session-attempts.d.ts +20 -0
  19. package/dist/src/client/session-attempts.d.ts.map +1 -0
  20. package/dist/src/client/session-attempts.js +88 -0
  21. package/dist/src/client/session-attempts.js.map +1 -0
  22. package/dist/src/client/session-data-server.d.ts +37 -0
  23. package/dist/src/client/session-data-server.d.ts.map +1 -0
  24. package/dist/src/client/session-data-server.js +280 -0
  25. package/dist/src/client/session-data-server.js.map +1 -0
  26. package/dist/src/client/session-data-server.spec.d.ts +6 -0
  27. package/dist/src/client/session-data-server.spec.d.ts.map +1 -0
  28. package/dist/src/client/session-data-server.spec.js +192 -0
  29. package/dist/src/client/session-data-server.spec.js.map +1 -0
  30. package/dist/src/client/session.d.ts +119 -0
  31. package/dist/src/client/session.d.ts.map +1 -0
  32. package/dist/src/client/session.js +290 -0
  33. package/dist/src/client/session.js.map +1 -0
  34. package/dist/src/hub/config.d.ts +74 -0
  35. package/dist/src/hub/config.d.ts.map +1 -0
  36. package/dist/src/hub/config.js +159 -0
  37. package/dist/src/hub/config.js.map +1 -0
  38. package/dist/src/hub/fair-lease-store.d.ts +36 -0
  39. package/dist/src/hub/fair-lease-store.d.ts.map +1 -0
  40. package/dist/src/hub/fair-lease-store.js +73 -0
  41. package/dist/src/hub/fair-lease-store.js.map +1 -0
  42. package/dist/src/hub/hub.d.ts +91 -0
  43. package/dist/src/hub/hub.d.ts.map +1 -0
  44. package/dist/src/hub/hub.js +641 -0
  45. package/dist/src/hub/hub.js.map +1 -0
  46. package/dist/src/hub/hub.spec.d.ts +6 -0
  47. package/dist/src/hub/hub.spec.d.ts.map +1 -0
  48. package/dist/src/hub/hub.spec.js +363 -0
  49. package/dist/src/hub/hub.spec.js.map +1 -0
  50. package/dist/src/hub/infrastructure.spec.d.ts +6 -0
  51. package/dist/src/hub/infrastructure.spec.d.ts.map +1 -0
  52. package/dist/src/hub/infrastructure.spec.js +211 -0
  53. package/dist/src/hub/infrastructure.spec.js.map +1 -0
  54. package/dist/src/hub/lock.d.ts +62 -0
  55. package/dist/src/hub/lock.d.ts.map +1 -0
  56. package/dist/src/hub/lock.js +165 -0
  57. package/dist/src/hub/lock.js.map +1 -0
  58. package/dist/src/hub/main.d.ts +16 -0
  59. package/dist/src/hub/main.d.ts.map +1 -0
  60. package/dist/src/hub/main.js +56 -0
  61. package/dist/src/hub/main.js.map +1 -0
  62. package/dist/src/hub/session-bridge.d.ts +116 -0
  63. package/dist/src/hub/session-bridge.d.ts.map +1 -0
  64. package/dist/src/hub/session-bridge.js +336 -0
  65. package/dist/src/hub/session-bridge.js.map +1 -0
  66. package/dist/src/identity/file-identity-store.d.ts +18 -0
  67. package/dist/src/identity/file-identity-store.d.ts.map +1 -0
  68. package/dist/src/identity/file-identity-store.js +34 -0
  69. package/dist/src/identity/file-identity-store.js.map +1 -0
  70. package/dist/src/identity/file-identity-store.spec.d.ts +6 -0
  71. package/dist/src/identity/file-identity-store.spec.d.ts.map +1 -0
  72. package/dist/src/identity/file-identity-store.spec.js +59 -0
  73. package/dist/src/identity/file-identity-store.spec.js.map +1 -0
  74. package/dist/src/identity/in-memory-identity-store.d.ts +48 -0
  75. package/dist/src/identity/in-memory-identity-store.d.ts.map +1 -0
  76. package/dist/src/identity/in-memory-identity-store.js +102 -0
  77. package/dist/src/identity/in-memory-identity-store.js.map +1 -0
  78. package/dist/src/identity/machine-identity.d.ts +134 -0
  79. package/dist/src/identity/machine-identity.d.ts.map +1 -0
  80. package/dist/src/identity/machine-identity.js +65 -0
  81. package/dist/src/identity/machine-identity.js.map +1 -0
  82. package/dist/src/index.d.ts +34 -0
  83. package/dist/src/index.d.ts.map +1 -0
  84. package/dist/src/index.js +34 -0
  85. package/dist/src/index.js.map +1 -0
  86. package/dist/src/lease/closure.d.ts +96 -0
  87. package/dist/src/lease/closure.d.ts.map +1 -0
  88. package/dist/src/lease/closure.js +192 -0
  89. package/dist/src/lease/closure.js.map +1 -0
  90. package/dist/src/lease/closure.spec.d.ts +6 -0
  91. package/dist/src/lease/closure.spec.d.ts.map +1 -0
  92. package/dist/src/lease/closure.spec.js +35 -0
  93. package/dist/src/lease/closure.spec.js.map +1 -0
  94. package/dist/src/lease/coordinator.d.ts +34 -0
  95. package/dist/src/lease/coordinator.d.ts.map +1 -0
  96. package/dist/src/lease/coordinator.js +42 -0
  97. package/dist/src/lease/coordinator.js.map +1 -0
  98. package/dist/src/lease/in-memory-lease-store.d.ts +58 -0
  99. package/dist/src/lease/in-memory-lease-store.d.ts.map +1 -0
  100. package/dist/src/lease/in-memory-lease-store.js +132 -0
  101. package/dist/src/lease/in-memory-lease-store.js.map +1 -0
  102. package/dist/src/lease/lease-store.d.ts +169 -0
  103. package/dist/src/lease/lease-store.d.ts.map +1 -0
  104. package/dist/src/lease/lease-store.js +94 -0
  105. package/dist/src/lease/lease-store.js.map +1 -0
  106. package/dist/src/lease/lease-store.spec.d.ts +6 -0
  107. package/dist/src/lease/lease-store.spec.d.ts.map +1 -0
  108. package/dist/src/lease/lease-store.spec.js +8 -0
  109. package/dist/src/lease/lease-store.spec.js.map +1 -0
  110. package/dist/src/lease/rack-dispatch.d.ts +105 -0
  111. package/dist/src/lease/rack-dispatch.d.ts.map +1 -0
  112. package/dist/src/lease/rack-dispatch.js +6 -0
  113. package/dist/src/lease/rack-dispatch.js.map +1 -0
  114. package/dist/src/mutation-queue.d.ts +13 -0
  115. package/dist/src/mutation-queue.d.ts.map +1 -0
  116. package/dist/src/mutation-queue.js +17 -0
  117. package/dist/src/mutation-queue.js.map +1 -0
  118. package/dist/src/paths.d.ts +56 -0
  119. package/dist/src/paths.d.ts.map +1 -0
  120. package/dist/src/paths.js +82 -0
  121. package/dist/src/paths.js.map +1 -0
  122. package/dist/src/protocol/control.d.ts +295 -0
  123. package/dist/src/protocol/control.d.ts.map +1 -0
  124. package/dist/src/protocol/control.js +74 -0
  125. package/dist/src/protocol/control.js.map +1 -0
  126. package/dist/src/protocol/index.d.ts +9 -0
  127. package/dist/src/protocol/index.d.ts.map +1 -0
  128. package/dist/src/protocol/index.js +9 -0
  129. package/dist/src/protocol/index.js.map +1 -0
  130. package/dist/src/protocol/rack-wire.d.ts +357 -0
  131. package/dist/src/protocol/rack-wire.d.ts.map +1 -0
  132. package/dist/src/protocol/rack-wire.js +262 -0
  133. package/dist/src/protocol/rack-wire.js.map +1 -0
  134. package/dist/src/protocol/rack-wire.spec.d.ts +6 -0
  135. package/dist/src/protocol/rack-wire.spec.d.ts.map +1 -0
  136. package/dist/src/protocol/rack-wire.spec.js +14 -0
  137. package/dist/src/protocol/rack-wire.spec.js.map +1 -0
  138. package/dist/src/protocol/registration.d.ts +70 -0
  139. package/dist/src/protocol/registration.d.ts.map +1 -0
  140. package/dist/src/protocol/registration.js +67 -0
  141. package/dist/src/protocol/registration.js.map +1 -0
  142. package/dist/src/protocol/session-data.d.ts +69 -0
  143. package/dist/src/protocol/session-data.d.ts.map +1 -0
  144. package/dist/src/protocol/session-data.js +26 -0
  145. package/dist/src/protocol/session-data.js.map +1 -0
  146. package/dist/src/protocol/task-envelope.d.ts +198 -0
  147. package/dist/src/protocol/task-envelope.d.ts.map +1 -0
  148. package/dist/src/protocol/task-envelope.js +93 -0
  149. package/dist/src/protocol/task-envelope.js.map +1 -0
  150. package/dist/src/protocol/wire-golden.d.ts +8 -0
  151. package/dist/src/protocol/wire-golden.d.ts.map +1 -0
  152. package/dist/src/protocol/wire-golden.js +34 -0
  153. package/dist/src/protocol/wire-golden.js.map +1 -0
  154. package/dist/src/protocol/wire-samples.d.ts +11 -0
  155. package/dist/src/protocol/wire-samples.d.ts.map +1 -0
  156. package/dist/src/protocol/wire-samples.js +52 -0
  157. package/dist/src/protocol/wire-samples.js.map +1 -0
  158. package/dist/src/registry/file-rack-registry.d.ts +68 -0
  159. package/dist/src/registry/file-rack-registry.d.ts.map +1 -0
  160. package/dist/src/registry/file-rack-registry.js +138 -0
  161. package/dist/src/registry/file-rack-registry.js.map +1 -0
  162. package/dist/src/registry/file-rack-registry.spec.d.ts +6 -0
  163. package/dist/src/registry/file-rack-registry.spec.d.ts.map +1 -0
  164. package/dist/src/registry/file-rack-registry.spec.js +50 -0
  165. package/dist/src/registry/file-rack-registry.spec.js.map +1 -0
  166. package/dist/src/registry/rack-registry.d.ts +64 -0
  167. package/dist/src/registry/rack-registry.d.ts.map +1 -0
  168. package/dist/src/registry/rack-registry.js +65 -0
  169. package/dist/src/registry/rack-registry.js.map +1 -0
  170. package/dist/src/registry/rack-registry.spec.d.ts +6 -0
  171. package/dist/src/registry/rack-registry.spec.d.ts.map +1 -0
  172. package/dist/src/registry/rack-registry.spec.js +8 -0
  173. package/dist/src/registry/rack-registry.spec.js.map +1 -0
  174. package/dist/src/routing/eligibility.d.ts +38 -0
  175. package/dist/src/routing/eligibility.d.ts.map +1 -0
  176. package/dist/src/routing/eligibility.js +78 -0
  177. package/dist/src/routing/eligibility.js.map +1 -0
  178. package/dist/src/routing/host-coupling.d.ts +26 -0
  179. package/dist/src/routing/host-coupling.d.ts.map +1 -0
  180. package/dist/src/routing/host-coupling.js +62 -0
  181. package/dist/src/routing/host-coupling.js.map +1 -0
  182. package/dist/src/routing/policy.d.ts +188 -0
  183. package/dist/src/routing/policy.d.ts.map +1 -0
  184. package/dist/src/routing/policy.js +212 -0
  185. package/dist/src/routing/policy.js.map +1 -0
  186. package/dist/src/routing/routing.spec.d.ts +6 -0
  187. package/dist/src/routing/routing.spec.d.ts.map +1 -0
  188. package/dist/src/routing/routing.spec.js +100 -0
  189. package/dist/src/routing/routing.spec.js.map +1 -0
  190. package/dist/src/routing/tiers.d.ts +22 -0
  191. package/dist/src/routing/tiers.d.ts.map +1 -0
  192. package/dist/src/routing/tiers.js +26 -0
  193. package/dist/src/routing/tiers.js.map +1 -0
  194. package/dist/src/runner/api-server.d.ts +45 -0
  195. package/dist/src/runner/api-server.d.ts.map +1 -0
  196. package/dist/src/runner/api-server.js +21 -0
  197. package/dist/src/runner/api-server.js.map +1 -0
  198. package/dist/src/runner/capacity.d.ts +13 -0
  199. package/dist/src/runner/capacity.d.ts.map +1 -0
  200. package/dist/src/runner/capacity.js +18 -0
  201. package/dist/src/runner/capacity.js.map +1 -0
  202. package/dist/src/runner/rack-body.d.ts +43 -0
  203. package/dist/src/runner/rack-body.d.ts.map +1 -0
  204. package/dist/src/runner/rack-body.js +208 -0
  205. package/dist/src/runner/rack-body.js.map +1 -0
  206. package/dist/src/runner/rack-runner.d.ts +62 -0
  207. package/dist/src/runner/rack-runner.d.ts.map +1 -0
  208. package/dist/src/runner/rack-runner.js +75 -0
  209. package/dist/src/runner/rack-runner.js.map +1 -0
  210. package/dist/src/runner/rack-runner.spec.d.ts +6 -0
  211. package/dist/src/runner/rack-runner.spec.d.ts.map +1 -0
  212. package/dist/src/runner/rack-runner.spec.js +302 -0
  213. package/dist/src/runner/rack-runner.spec.js.map +1 -0
  214. package/dist/src/runner/split.spec.d.ts +6 -0
  215. package/dist/src/runner/split.spec.d.ts.map +1 -0
  216. package/dist/src/runner/split.spec.js +188 -0
  217. package/dist/src/runner/split.spec.js.map +1 -0
  218. package/dist/src/runner-event.d.ts +261 -0
  219. package/dist/src/runner-event.d.ts.map +1 -0
  220. package/dist/src/runner-event.js +332 -0
  221. package/dist/src/runner-event.js.map +1 -0
  222. package/dist/src/server/beast2.d.ts +19 -0
  223. package/dist/src/server/beast2.d.ts.map +1 -0
  224. package/dist/src/server/beast2.js +18 -0
  225. package/dist/src/server/beast2.js.map +1 -0
  226. package/dist/src/server/body-limit.d.ts +16 -0
  227. package/dist/src/server/body-limit.d.ts.map +1 -0
  228. package/dist/src/server/body-limit.js +53 -0
  229. package/dist/src/server/body-limit.js.map +1 -0
  230. package/dist/src/server/body-limit.spec.d.ts +2 -0
  231. package/dist/src/server/body-limit.spec.d.ts.map +1 -0
  232. package/dist/src/server/body-limit.spec.js +32 -0
  233. package/dist/src/server/body-limit.spec.js.map +1 -0
  234. package/dist/src/server/bounded.d.ts +16 -0
  235. package/dist/src/server/bounded.d.ts.map +1 -0
  236. package/dist/src/server/bounded.js +39 -0
  237. package/dist/src/server/bounded.js.map +1 -0
  238. package/dist/src/server/dispatch.d.ts +137 -0
  239. package/dist/src/server/dispatch.d.ts.map +1 -0
  240. package/dist/src/server/dispatch.js +267 -0
  241. package/dist/src/server/dispatch.js.map +1 -0
  242. package/dist/src/server/env-publication.d.ts +45 -0
  243. package/dist/src/server/env-publication.d.ts.map +1 -0
  244. package/dist/src/server/env-publication.js +10 -0
  245. package/dist/src/server/env-publication.js.map +1 -0
  246. package/dist/src/server/index.d.ts +16 -0
  247. package/dist/src/server/index.d.ts.map +1 -0
  248. package/dist/src/server/index.js +17 -0
  249. package/dist/src/server/index.js.map +1 -0
  250. package/dist/src/server/protocol.spec.d.ts +6 -0
  251. package/dist/src/server/protocol.spec.d.ts.map +1 -0
  252. package/dist/src/server/protocol.spec.js +78 -0
  253. package/dist/src/server/protocol.spec.js.map +1 -0
  254. package/dist/src/server/rack-routes.d.ts +175 -0
  255. package/dist/src/server/rack-routes.d.ts.map +1 -0
  256. package/dist/src/server/rack-routes.js +755 -0
  257. package/dist/src/server/rack-routes.js.map +1 -0
  258. package/dist/src/server/rack-routes.spec.d.ts +6 -0
  259. package/dist/src/server/rack-routes.spec.d.ts.map +1 -0
  260. package/dist/src/server/rack-routes.spec.js +477 -0
  261. package/dist/src/server/rack-routes.spec.js.map +1 -0
  262. package/dist/src/server/storage-bridge.d.ts +140 -0
  263. package/dist/src/server/storage-bridge.d.ts.map +1 -0
  264. package/dist/src/server/storage-bridge.js +6 -0
  265. package/dist/src/server/storage-bridge.js.map +1 -0
  266. package/dist/src/state-file.d.ts +10 -0
  267. package/dist/src/state-file.d.ts.map +1 -0
  268. package/dist/src/state-file.js +38 -0
  269. package/dist/src/state-file.js.map +1 -0
  270. package/dist/src/testing/in-memory.d.ts +116 -0
  271. package/dist/src/testing/in-memory.d.ts.map +1 -0
  272. package/dist/src/testing/in-memory.js +193 -0
  273. package/dist/src/testing/in-memory.js.map +1 -0
  274. package/dist/src/testing/index.d.ts +14 -0
  275. package/dist/src/testing/index.d.ts.map +1 -0
  276. package/dist/src/testing/index.js +14 -0
  277. package/dist/src/testing/index.js.map +1 -0
  278. package/dist/src/testing/lease-store-contract.d.ts +14 -0
  279. package/dist/src/testing/lease-store-contract.d.ts.map +1 -0
  280. package/dist/src/testing/lease-store-contract.js +78 -0
  281. package/dist/src/testing/lease-store-contract.js.map +1 -0
  282. package/dist/src/testing/protocol-suite.d.ts +38 -0
  283. package/dist/src/testing/protocol-suite.d.ts.map +1 -0
  284. package/dist/src/testing/protocol-suite.js +207 -0
  285. package/dist/src/testing/protocol-suite.js.map +1 -0
  286. package/dist/src/testing/rack-registry-contract.d.ts +15 -0
  287. package/dist/src/testing/rack-registry-contract.d.ts.map +1 -0
  288. package/dist/src/testing/rack-registry-contract.js +106 -0
  289. package/dist/src/testing/rack-registry-contract.js.map +1 -0
  290. package/dist/src/testing/test-rack-agent.d.ts +121 -0
  291. package/dist/src/testing/test-rack-agent.d.ts.map +1 -0
  292. package/dist/src/testing/test-rack-agent.js +316 -0
  293. package/dist/src/testing/test-rack-agent.js.map +1 -0
  294. package/dist/src/tls/tls.d.ts +67 -0
  295. package/dist/src/tls/tls.d.ts.map +1 -0
  296. package/dist/src/tls/tls.js +200 -0
  297. package/dist/src/tls/tls.js.map +1 -0
  298. package/dist/src/tls/tls.spec.d.ts +6 -0
  299. package/dist/src/tls/tls.spec.d.ts.map +1 -0
  300. package/dist/src/tls/tls.spec.js +101 -0
  301. package/dist/src/tls/tls.spec.js.map +1 -0
  302. package/dist/src/version.d.ts +9 -0
  303. package/dist/src/version.d.ts.map +1 -0
  304. package/dist/src/version.js +10 -0
  305. package/dist/src/version.js.map +1 -0
  306. package/package.json +67 -7
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Machine-authenticated /api/rack routes (epic #67 design §9).
7
+ *
8
+ * #72 ships the identity half: the enrollment exchange (`POST /rack/enroll`,
9
+ * authenticated by the single-use enrollment token itself) and the
10
+ * **machine-auth middleware** every other /rack/* route sits behind.
11
+ * #73 adds the dispatch protocol behind that middleware:
12
+ * - `POST /rack/lease` — long-poll claim of the next matching task
13
+ * - `POST /rack/heartbeat` — liveness + stop signals for dead leases
14
+ * - `POST /rack/lease/extend` — visibility refresh while running
15
+ * - `POST /rack/complete` — terminal result (accepted-and-discarded)
16
+ * #74 adds the data plane:
17
+ * - `POST /rack/storage` — inline bytes / presigned URLs for a claimed
18
+ * lease's objects (scope-validated, review F5) + the output PUT targets
19
+ * - `POST /rack/logs` — batched stdout/stderr → LogStore
20
+ *
21
+ * #214 moves the guest onto e3-core's own execution:
22
+ * - a lease is refused to an agent older than `LEASE_MIN_AGENT`;
23
+ * - the claim of a task or unit lease mints its attempt and records it
24
+ * `running`, stamped with the rack launch; the completion records its
25
+ * outcome, discards what it wrote and never committed, and wakes a run
26
+ * parked on it (#208);
27
+ * - `/rack/storage` admits exactly the lease's closure, and takes the objects
28
+ * its guest wrote in by checksum-bound PUTs and their commits.
29
+ *
30
+ * A rack token authenticates ONLY these routes — it is invisible to the
31
+ * human `jwtAuthorizer`, so it can never reach the human/admin API.
32
+ */
33
+ import { Hono } from 'hono';
34
+ import type { Context, Next } from 'hono';
35
+ import { type LogStore } from '@elaraai/e3-core';
36
+ import { type RackRegistration } from '../protocol/index.js';
37
+ import { type RackRegistry } from '../registry/rack-registry.js';
38
+ import type { RunnerRun } from '../runner-event.js';
39
+ import { type RackLeaseStore, type RackLeaseRecord } from '../lease/lease-store.js';
40
+ import type { RackStorageBridge } from './storage-bridge.js';
41
+ import { type EnvIndexStore } from './env-publication.js';
42
+ import { type RackLeaseResult } from '../protocol/task-envelope.js';
43
+ import { type LeaseCoordinator } from '../lease/coordinator.js';
44
+ import { type MachineIdentityStore } from '../identity/machine-identity.js';
45
+ /**
46
+ * Hono env for rack routes: the middleware resolves the caller's identity
47
+ * and stashes what the routes need — the registration (quarantine checks)
48
+ * and the presented token's pre-activation state (rotation decisions).
49
+ */
50
+ export type RackEnv = {
51
+ Variables: {
52
+ rackId: string;
53
+ registration: RackRegistration;
54
+ tokenIssuedAt: Date;
55
+ /** The presented token's status BEFORE any activation this request. */
56
+ tokenStatus: 'current' | 'pending' | 'grace';
57
+ };
58
+ };
59
+ /** Dispatch tuning — injectable so route tests run in milliseconds. */
60
+ export interface RackRouteOptions {
61
+ /** Shares the dispatcher's fence for record, transfer and lease transitions. */
62
+ coordinator?: LeaseCoordinator;
63
+ /** Clock for identity, health and visibility (not the long-poll deadline). */
64
+ now?: () => number;
65
+ /** Stops outstanding lease polls when their host shuts down. */
66
+ signal?: AbortSignal;
67
+ /** Optional per-candidate compatibility gate, checked at claim time too. */
68
+ canClaim?: (rack: RackRegistration, lease: RackLeaseRecord) => boolean | Promise<boolean>;
69
+ /** Notifies session waiters after a transition and its record writes. */
70
+ onLeaseSignal?: (signal: RackLeaseSignal) => void | Promise<void>;
71
+ /**
72
+ * Long-poll window for /rack/lease. Must sit comfortably inside API
73
+ * Gateway's hard 29 s response cap (design picks ≤ ~25 s; each idle agent
74
+ * holds ~1 API-Lambda invocation continuously — the documented standing
75
+ * cost of the pull model).
76
+ */
77
+ leaseWindowMs?: number;
78
+ /** Claim re-check interval while long-polling. */
79
+ pollIntervalMs?: number;
80
+ /** Maximum idle claim interval; defaults to pollIntervalMs (no backoff). */
81
+ pollMaxMs?: number;
82
+ /** Idle policy refresh interval; defaults to every check. Claims always read it afresh. */
83
+ policyRecheckMs?: number;
84
+ /** Read-only cancellation watch window (default 20 s, capped at 20 s). */
85
+ watchWindowMs?: number;
86
+ /** Re-check cancellation while a watch is held (default 250 ms). */
87
+ watchPollIntervalMs?: number;
88
+ /** Visibility window granted on claim and per extension. */
89
+ visibilityMs?: number;
90
+ /** #94 Slice B: published-env index — absent means env resolution is
91
+ * unavailable (requests for it error; racks fall back to cloud). */
92
+ envIndex?: EnvIndexStore;
93
+ /** The deployment's e3 version (selects which published env build). */
94
+ e3Version?: string;
95
+ /**
96
+ * Wakes a dataflow's parked run once a rack attempt's outcome is recorded
97
+ * (#208): `wakeRun` over the run's pointer, which asks the deployment's
98
+ * waker. Absent, only the park's backstop wakes it.
99
+ */
100
+ wake?: (repo: string, run: RunnerRun) => Promise<boolean>;
101
+ }
102
+ /** A committed route transition that waiters may observe. */
103
+ export type RackLeaseSignal = {
104
+ kind: 'claimed';
105
+ repo: string;
106
+ leaseId: string;
107
+ rackId: string;
108
+ } | {
109
+ kind: 'extended';
110
+ repo: string;
111
+ leaseId: string;
112
+ } | {
113
+ kind: 'completed';
114
+ repo: string;
115
+ leaseId: string;
116
+ disposition: 'recorded' | 'idempotent' | 'discarded';
117
+ };
118
+ /**
119
+ * Where the rack routes keep a lease's attempt (#214): its records, its log
120
+ * lines, and the store its output is checked whole in.
121
+ */
122
+ export interface RackAttemptStore {
123
+ /** Computes/reads the admitted closure in the repository-owning session. */
124
+ closure(lease: RackLeaseRecord): Promise<readonly string[]>;
125
+ /** Records an owner, then the newly claimed attempt as running. */
126
+ running(lease: RackLeaseRecord, bootId: string): Promise<void>;
127
+ /** Ends a prior attempt when reclaimed, superseded or cancelled. */
128
+ stopped(lease: RackLeaseRecord, how: 'interrupted' | 'cancelled', cause: string): Promise<void>;
129
+ /** Records the outcome after flushing the attempt's logs. */
130
+ outcome(lease: RackLeaseRecord, result: RackLeaseResult): Promise<void>;
131
+ /** Verifies and re-references the complete output graph before success. */
132
+ verifyOutput(lease: RackLeaseRecord, outputHash: string): Promise<boolean>;
133
+ /** Repository-session log sink. A flush is per attempt. */
134
+ readonly logs: Pick<LogStore, 'append'> & Partial<Pick<LogStore, 'flush'>>;
135
+ }
136
+ /** The most objects one `/rack/storage` request declares or commits. */
137
+ export declare const MAX_STORAGE_OBJECTS = 256;
138
+ /** The largest object a write target is issued for: one checksum-bound PUT. */
139
+ export declare const MAX_RACK_OBJECT_BYTES: number;
140
+ /**
141
+ * Machine-auth middleware for /rack/* routes: validates the bearer rack
142
+ * token (by at-rest hash) and re-resolves the rack's registration so a
143
+ * deregistered rack is rejected immediately — revocation needs no token
144
+ * bookkeeping.
145
+ *
146
+ * Rotation activation (D12, #90) lives here: the FIRST authenticated use
147
+ * of a `pending` successor promotes it to `current` and puts the token it
148
+ * replaces on the ROTATION_GRACE fuse — on any rack route, so activation
149
+ * is observed wherever the agent switches.
150
+ *
151
+ * @param identityStore - Machine-credential persistence
152
+ * @param settingsStore - Rack registry (registration existence = not revoked)
153
+ * @param now - Clock for token rotation and grace expiry
154
+ * @returns Machine authentication middleware
155
+ * @example
156
+ * app.use('/api/rack/*', createRackAuth(identities, registry));
157
+ */
158
+ export declare function createRackAuth(identityStore: MachineIdentityStore, settingsStore: RackRegistry, now?: () => number): (c: Context<RackEnv>, next: Next) => Promise<Response | void>;
159
+ /**
160
+ * Create the /api/rack routes: the enrollment exchange (#72), the dispatch
161
+ * protocol (#73), the data plane (#74), and a lease's attempt (#214).
162
+ *
163
+ * @param identityStore - Machine-credential persistence
164
+ * @param settingsStore - Rack registry
165
+ * @param leaseStore - Lease persistence (the pull queue)
166
+ * @param bridge - Object data-plane (presign/inline/commit)
167
+ * @param attempts - Where a lease's attempt is kept: its records, its log
168
+ * lines, and the store its output is checked whole in
169
+ * @param options - Long-poll/visibility tuning, and the waker
170
+ * @returns The rack machine API
171
+ * @example
172
+ * const app = createRackRoutes(identities, registry, leases, bridge, attempts);
173
+ */
174
+ export declare function createRackRoutes(identityStore: MachineIdentityStore, settingsStore: RackRegistry, leaseStore: RackLeaseStore, bridge: RackStorageBridge, attempts: RackAttemptStore, options?: RackRouteOptions): Hono<RackEnv, import("hono/types").BlankSchema, "/">;
175
+ //# sourceMappingURL=rack-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rack-routes.d.ts","sourceRoot":"","sources":["../../../src/server/rack-routes.ts"],"names":[],"mappings":"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"}