@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.
- package/README.md +407 -2
- package/dist/src/client/client.spec.d.ts +6 -0
- package/dist/src/client/client.spec.d.ts.map +1 -0
- package/dist/src/client/client.spec.js +150 -0
- package/dist/src/client/client.spec.js.map +1 -0
- package/dist/src/client/connect.d.ts +52 -0
- package/dist/src/client/connect.d.ts.map +1 -0
- package/dist/src/client/connect.js +112 -0
- package/dist/src/client/connect.js.map +1 -0
- package/dist/src/client/hub-client.d.ts +57 -0
- package/dist/src/client/hub-client.d.ts.map +1 -0
- package/dist/src/client/hub-client.js +87 -0
- package/dist/src/client/hub-client.js.map +1 -0
- package/dist/src/client/local-http.d.ts +78 -0
- package/dist/src/client/local-http.d.ts.map +1 -0
- package/dist/src/client/local-http.js +149 -0
- package/dist/src/client/local-http.js.map +1 -0
- package/dist/src/client/session-attempts.d.ts +20 -0
- package/dist/src/client/session-attempts.d.ts.map +1 -0
- package/dist/src/client/session-attempts.js +88 -0
- package/dist/src/client/session-attempts.js.map +1 -0
- package/dist/src/client/session-data-server.d.ts +37 -0
- package/dist/src/client/session-data-server.d.ts.map +1 -0
- package/dist/src/client/session-data-server.js +280 -0
- package/dist/src/client/session-data-server.js.map +1 -0
- package/dist/src/client/session-data-server.spec.d.ts +6 -0
- package/dist/src/client/session-data-server.spec.d.ts.map +1 -0
- package/dist/src/client/session-data-server.spec.js +192 -0
- package/dist/src/client/session-data-server.spec.js.map +1 -0
- package/dist/src/client/session.d.ts +119 -0
- package/dist/src/client/session.d.ts.map +1 -0
- package/dist/src/client/session.js +290 -0
- package/dist/src/client/session.js.map +1 -0
- package/dist/src/hub/config.d.ts +74 -0
- package/dist/src/hub/config.d.ts.map +1 -0
- package/dist/src/hub/config.js +159 -0
- package/dist/src/hub/config.js.map +1 -0
- package/dist/src/hub/fair-lease-store.d.ts +36 -0
- package/dist/src/hub/fair-lease-store.d.ts.map +1 -0
- package/dist/src/hub/fair-lease-store.js +73 -0
- package/dist/src/hub/fair-lease-store.js.map +1 -0
- package/dist/src/hub/hub.d.ts +91 -0
- package/dist/src/hub/hub.d.ts.map +1 -0
- package/dist/src/hub/hub.js +641 -0
- package/dist/src/hub/hub.js.map +1 -0
- package/dist/src/hub/hub.spec.d.ts +6 -0
- package/dist/src/hub/hub.spec.d.ts.map +1 -0
- package/dist/src/hub/hub.spec.js +363 -0
- package/dist/src/hub/hub.spec.js.map +1 -0
- package/dist/src/hub/infrastructure.spec.d.ts +6 -0
- package/dist/src/hub/infrastructure.spec.d.ts.map +1 -0
- package/dist/src/hub/infrastructure.spec.js +211 -0
- package/dist/src/hub/infrastructure.spec.js.map +1 -0
- package/dist/src/hub/lock.d.ts +62 -0
- package/dist/src/hub/lock.d.ts.map +1 -0
- package/dist/src/hub/lock.js +165 -0
- package/dist/src/hub/lock.js.map +1 -0
- package/dist/src/hub/main.d.ts +16 -0
- package/dist/src/hub/main.d.ts.map +1 -0
- package/dist/src/hub/main.js +56 -0
- package/dist/src/hub/main.js.map +1 -0
- package/dist/src/hub/session-bridge.d.ts +116 -0
- package/dist/src/hub/session-bridge.d.ts.map +1 -0
- package/dist/src/hub/session-bridge.js +336 -0
- package/dist/src/hub/session-bridge.js.map +1 -0
- package/dist/src/identity/file-identity-store.d.ts +18 -0
- package/dist/src/identity/file-identity-store.d.ts.map +1 -0
- package/dist/src/identity/file-identity-store.js +34 -0
- package/dist/src/identity/file-identity-store.js.map +1 -0
- package/dist/src/identity/file-identity-store.spec.d.ts +6 -0
- package/dist/src/identity/file-identity-store.spec.d.ts.map +1 -0
- package/dist/src/identity/file-identity-store.spec.js +59 -0
- package/dist/src/identity/file-identity-store.spec.js.map +1 -0
- package/dist/src/identity/in-memory-identity-store.d.ts +48 -0
- package/dist/src/identity/in-memory-identity-store.d.ts.map +1 -0
- package/dist/src/identity/in-memory-identity-store.js +102 -0
- package/dist/src/identity/in-memory-identity-store.js.map +1 -0
- package/dist/src/identity/machine-identity.d.ts +134 -0
- package/dist/src/identity/machine-identity.d.ts.map +1 -0
- package/dist/src/identity/machine-identity.js +65 -0
- package/dist/src/identity/machine-identity.js.map +1 -0
- package/dist/src/index.d.ts +34 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +34 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lease/closure.d.ts +96 -0
- package/dist/src/lease/closure.d.ts.map +1 -0
- package/dist/src/lease/closure.js +192 -0
- package/dist/src/lease/closure.js.map +1 -0
- package/dist/src/lease/closure.spec.d.ts +6 -0
- package/dist/src/lease/closure.spec.d.ts.map +1 -0
- package/dist/src/lease/closure.spec.js +35 -0
- package/dist/src/lease/closure.spec.js.map +1 -0
- package/dist/src/lease/coordinator.d.ts +34 -0
- package/dist/src/lease/coordinator.d.ts.map +1 -0
- package/dist/src/lease/coordinator.js +42 -0
- package/dist/src/lease/coordinator.js.map +1 -0
- package/dist/src/lease/in-memory-lease-store.d.ts +58 -0
- package/dist/src/lease/in-memory-lease-store.d.ts.map +1 -0
- package/dist/src/lease/in-memory-lease-store.js +132 -0
- package/dist/src/lease/in-memory-lease-store.js.map +1 -0
- package/dist/src/lease/lease-store.d.ts +169 -0
- package/dist/src/lease/lease-store.d.ts.map +1 -0
- package/dist/src/lease/lease-store.js +94 -0
- package/dist/src/lease/lease-store.js.map +1 -0
- package/dist/src/lease/lease-store.spec.d.ts +6 -0
- package/dist/src/lease/lease-store.spec.d.ts.map +1 -0
- package/dist/src/lease/lease-store.spec.js +8 -0
- package/dist/src/lease/lease-store.spec.js.map +1 -0
- package/dist/src/lease/rack-dispatch.d.ts +105 -0
- package/dist/src/lease/rack-dispatch.d.ts.map +1 -0
- package/dist/src/lease/rack-dispatch.js +6 -0
- package/dist/src/lease/rack-dispatch.js.map +1 -0
- package/dist/src/mutation-queue.d.ts +13 -0
- package/dist/src/mutation-queue.d.ts.map +1 -0
- package/dist/src/mutation-queue.js +17 -0
- package/dist/src/mutation-queue.js.map +1 -0
- package/dist/src/paths.d.ts +56 -0
- package/dist/src/paths.d.ts.map +1 -0
- package/dist/src/paths.js +82 -0
- package/dist/src/paths.js.map +1 -0
- package/dist/src/protocol/control.d.ts +295 -0
- package/dist/src/protocol/control.d.ts.map +1 -0
- package/dist/src/protocol/control.js +74 -0
- package/dist/src/protocol/control.js.map +1 -0
- package/dist/src/protocol/index.d.ts +9 -0
- package/dist/src/protocol/index.d.ts.map +1 -0
- package/dist/src/protocol/index.js +9 -0
- package/dist/src/protocol/index.js.map +1 -0
- package/dist/src/protocol/rack-wire.d.ts +357 -0
- package/dist/src/protocol/rack-wire.d.ts.map +1 -0
- package/dist/src/protocol/rack-wire.js +262 -0
- package/dist/src/protocol/rack-wire.js.map +1 -0
- package/dist/src/protocol/rack-wire.spec.d.ts +6 -0
- package/dist/src/protocol/rack-wire.spec.d.ts.map +1 -0
- package/dist/src/protocol/rack-wire.spec.js +14 -0
- package/dist/src/protocol/rack-wire.spec.js.map +1 -0
- package/dist/src/protocol/registration.d.ts +70 -0
- package/dist/src/protocol/registration.d.ts.map +1 -0
- package/dist/src/protocol/registration.js +67 -0
- package/dist/src/protocol/registration.js.map +1 -0
- package/dist/src/protocol/session-data.d.ts +69 -0
- package/dist/src/protocol/session-data.d.ts.map +1 -0
- package/dist/src/protocol/session-data.js +26 -0
- package/dist/src/protocol/session-data.js.map +1 -0
- package/dist/src/protocol/task-envelope.d.ts +198 -0
- package/dist/src/protocol/task-envelope.d.ts.map +1 -0
- package/dist/src/protocol/task-envelope.js +93 -0
- package/dist/src/protocol/task-envelope.js.map +1 -0
- package/dist/src/protocol/wire-golden.d.ts +8 -0
- package/dist/src/protocol/wire-golden.d.ts.map +1 -0
- package/dist/src/protocol/wire-golden.js +34 -0
- package/dist/src/protocol/wire-golden.js.map +1 -0
- package/dist/src/protocol/wire-samples.d.ts +11 -0
- package/dist/src/protocol/wire-samples.d.ts.map +1 -0
- package/dist/src/protocol/wire-samples.js +52 -0
- package/dist/src/protocol/wire-samples.js.map +1 -0
- package/dist/src/registry/file-rack-registry.d.ts +68 -0
- package/dist/src/registry/file-rack-registry.d.ts.map +1 -0
- package/dist/src/registry/file-rack-registry.js +138 -0
- package/dist/src/registry/file-rack-registry.js.map +1 -0
- package/dist/src/registry/file-rack-registry.spec.d.ts +6 -0
- package/dist/src/registry/file-rack-registry.spec.d.ts.map +1 -0
- package/dist/src/registry/file-rack-registry.spec.js +50 -0
- package/dist/src/registry/file-rack-registry.spec.js.map +1 -0
- package/dist/src/registry/rack-registry.d.ts +64 -0
- package/dist/src/registry/rack-registry.d.ts.map +1 -0
- package/dist/src/registry/rack-registry.js +65 -0
- package/dist/src/registry/rack-registry.js.map +1 -0
- package/dist/src/registry/rack-registry.spec.d.ts +6 -0
- package/dist/src/registry/rack-registry.spec.d.ts.map +1 -0
- package/dist/src/registry/rack-registry.spec.js +8 -0
- package/dist/src/registry/rack-registry.spec.js.map +1 -0
- package/dist/src/routing/eligibility.d.ts +38 -0
- package/dist/src/routing/eligibility.d.ts.map +1 -0
- package/dist/src/routing/eligibility.js +78 -0
- package/dist/src/routing/eligibility.js.map +1 -0
- package/dist/src/routing/host-coupling.d.ts +26 -0
- package/dist/src/routing/host-coupling.d.ts.map +1 -0
- package/dist/src/routing/host-coupling.js +62 -0
- package/dist/src/routing/host-coupling.js.map +1 -0
- package/dist/src/routing/policy.d.ts +188 -0
- package/dist/src/routing/policy.d.ts.map +1 -0
- package/dist/src/routing/policy.js +212 -0
- package/dist/src/routing/policy.js.map +1 -0
- package/dist/src/routing/routing.spec.d.ts +6 -0
- package/dist/src/routing/routing.spec.d.ts.map +1 -0
- package/dist/src/routing/routing.spec.js +100 -0
- package/dist/src/routing/routing.spec.js.map +1 -0
- package/dist/src/routing/tiers.d.ts +22 -0
- package/dist/src/routing/tiers.d.ts.map +1 -0
- package/dist/src/routing/tiers.js +26 -0
- package/dist/src/routing/tiers.js.map +1 -0
- package/dist/src/runner/api-server.d.ts +45 -0
- package/dist/src/runner/api-server.d.ts.map +1 -0
- package/dist/src/runner/api-server.js +21 -0
- package/dist/src/runner/api-server.js.map +1 -0
- package/dist/src/runner/capacity.d.ts +13 -0
- package/dist/src/runner/capacity.d.ts.map +1 -0
- package/dist/src/runner/capacity.js +18 -0
- package/dist/src/runner/capacity.js.map +1 -0
- package/dist/src/runner/rack-body.d.ts +43 -0
- package/dist/src/runner/rack-body.d.ts.map +1 -0
- package/dist/src/runner/rack-body.js +208 -0
- package/dist/src/runner/rack-body.js.map +1 -0
- package/dist/src/runner/rack-runner.d.ts +62 -0
- package/dist/src/runner/rack-runner.d.ts.map +1 -0
- package/dist/src/runner/rack-runner.js +75 -0
- package/dist/src/runner/rack-runner.js.map +1 -0
- package/dist/src/runner/rack-runner.spec.d.ts +6 -0
- package/dist/src/runner/rack-runner.spec.d.ts.map +1 -0
- package/dist/src/runner/rack-runner.spec.js +302 -0
- package/dist/src/runner/rack-runner.spec.js.map +1 -0
- package/dist/src/runner/split.spec.d.ts +6 -0
- package/dist/src/runner/split.spec.d.ts.map +1 -0
- package/dist/src/runner/split.spec.js +188 -0
- package/dist/src/runner/split.spec.js.map +1 -0
- package/dist/src/runner-event.d.ts +261 -0
- package/dist/src/runner-event.d.ts.map +1 -0
- package/dist/src/runner-event.js +332 -0
- package/dist/src/runner-event.js.map +1 -0
- package/dist/src/server/beast2.d.ts +19 -0
- package/dist/src/server/beast2.d.ts.map +1 -0
- package/dist/src/server/beast2.js +18 -0
- package/dist/src/server/beast2.js.map +1 -0
- package/dist/src/server/body-limit.d.ts +16 -0
- package/dist/src/server/body-limit.d.ts.map +1 -0
- package/dist/src/server/body-limit.js +53 -0
- package/dist/src/server/body-limit.js.map +1 -0
- package/dist/src/server/body-limit.spec.d.ts +2 -0
- package/dist/src/server/body-limit.spec.d.ts.map +1 -0
- package/dist/src/server/body-limit.spec.js +32 -0
- package/dist/src/server/body-limit.spec.js.map +1 -0
- package/dist/src/server/bounded.d.ts +16 -0
- package/dist/src/server/bounded.d.ts.map +1 -0
- package/dist/src/server/bounded.js +39 -0
- package/dist/src/server/bounded.js.map +1 -0
- package/dist/src/server/dispatch.d.ts +137 -0
- package/dist/src/server/dispatch.d.ts.map +1 -0
- package/dist/src/server/dispatch.js +267 -0
- package/dist/src/server/dispatch.js.map +1 -0
- package/dist/src/server/env-publication.d.ts +45 -0
- package/dist/src/server/env-publication.d.ts.map +1 -0
- package/dist/src/server/env-publication.js +10 -0
- package/dist/src/server/env-publication.js.map +1 -0
- package/dist/src/server/index.d.ts +16 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +17 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/protocol.spec.d.ts +6 -0
- package/dist/src/server/protocol.spec.d.ts.map +1 -0
- package/dist/src/server/protocol.spec.js +78 -0
- package/dist/src/server/protocol.spec.js.map +1 -0
- package/dist/src/server/rack-routes.d.ts +175 -0
- package/dist/src/server/rack-routes.d.ts.map +1 -0
- package/dist/src/server/rack-routes.js +755 -0
- package/dist/src/server/rack-routes.js.map +1 -0
- package/dist/src/server/rack-routes.spec.d.ts +6 -0
- package/dist/src/server/rack-routes.spec.d.ts.map +1 -0
- package/dist/src/server/rack-routes.spec.js +477 -0
- package/dist/src/server/rack-routes.spec.js.map +1 -0
- package/dist/src/server/storage-bridge.d.ts +140 -0
- package/dist/src/server/storage-bridge.d.ts.map +1 -0
- package/dist/src/server/storage-bridge.js +6 -0
- package/dist/src/server/storage-bridge.js.map +1 -0
- package/dist/src/state-file.d.ts +10 -0
- package/dist/src/state-file.d.ts.map +1 -0
- package/dist/src/state-file.js +38 -0
- package/dist/src/state-file.js.map +1 -0
- package/dist/src/testing/in-memory.d.ts +116 -0
- package/dist/src/testing/in-memory.d.ts.map +1 -0
- package/dist/src/testing/in-memory.js +193 -0
- package/dist/src/testing/in-memory.js.map +1 -0
- package/dist/src/testing/index.d.ts +14 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +14 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/testing/lease-store-contract.d.ts +14 -0
- package/dist/src/testing/lease-store-contract.d.ts.map +1 -0
- package/dist/src/testing/lease-store-contract.js +78 -0
- package/dist/src/testing/lease-store-contract.js.map +1 -0
- package/dist/src/testing/protocol-suite.d.ts +38 -0
- package/dist/src/testing/protocol-suite.d.ts.map +1 -0
- package/dist/src/testing/protocol-suite.js +207 -0
- package/dist/src/testing/protocol-suite.js.map +1 -0
- package/dist/src/testing/rack-registry-contract.d.ts +15 -0
- package/dist/src/testing/rack-registry-contract.d.ts.map +1 -0
- package/dist/src/testing/rack-registry-contract.js +106 -0
- package/dist/src/testing/rack-registry-contract.js.map +1 -0
- package/dist/src/testing/test-rack-agent.d.ts +121 -0
- package/dist/src/testing/test-rack-agent.d.ts.map +1 -0
- package/dist/src/testing/test-rack-agent.js +316 -0
- package/dist/src/testing/test-rack-agent.js.map +1 -0
- package/dist/src/tls/tls.d.ts +67 -0
- package/dist/src/tls/tls.d.ts.map +1 -0
- package/dist/src/tls/tls.js +200 -0
- package/dist/src/tls/tls.js.map +1 -0
- package/dist/src/tls/tls.spec.d.ts +6 -0
- package/dist/src/tls/tls.spec.d.ts.map +1 -0
- package/dist/src/tls/tls.spec.js +101 -0
- package/dist/src/tls/tls.spec.js.map +1 -0
- package/dist/src/version.d.ts +9 -0
- package/dist/src/version.d.ts.map +1 -0
- package/dist/src/version.js +10 -0
- package/dist/src/version.js.map +1 -0
- 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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"}
|