3.3 KiB
3.3 KiB
Phase 3A interface inventory
This inventory records the wire boundary consumed by the closed Connection Server. The Protocol repository owns only schemas, registries, fixtures, and generated bindings; the Server remains the authority for authentication, authorization, persistence, and provider selection.
Existing Server routes adapted by generated contracts
| Route | Channel/guard | Contract boundary | Phase 2 behavior |
|---|---|---|---|
POST /api/v1/auth/refresh |
native credential body; rate limited | RefreshRequest -> NativeCredential |
opaque refresh rotation and replay-family revocation remain PostgreSQL-owned |
POST /api/v1/auth/devices |
authenticated browser session + CSRF | DeviceRegistrationRequest -> DeviceChallenge |
device challenge remains one-use and hash-backed |
POST /api/v1/auth/devices/:id/prove |
authenticated browser session + CSRF | DeviceProofRequest -> NativeCredential |
canonical Ed25519 proof and native session issuance remain Server-owned |
DELETE /api/v1/auth/devices/:id |
authenticated browser session + CSRF | no body | principal-scoped device revocation remains Server-owned |
GET /api/v1/resources |
authenticated browser/native session | ResourceList |
assigned desktop and entitled pool projections omit machine/provider data |
POST /api/v1/broker/sessions |
authenticated session + CSRF | SessionRequest -> BrokerSession |
existing assignment, idempotency, queue, and PostgreSQL state machine remain authoritative |
GET /api/v1/broker/sessions/:id |
authenticated session | BrokerSession |
owner-scoped lookup is preserved |
POST /api/v1/broker/sessions/:id/allocate |
authenticated session + CSRF | ConnectionManifest |
gateway-only grant boundary; no provider/direct-host fields |
POST /api/v1/broker/sessions/:id/reconnect |
authenticated session + CSRF | ReconnectRequest -> ConnectionManifest |
device proof, expected version, grant rotation, and monotonic reconnect sequence remain authoritative |
POST /api/v1/broker/sessions/:id/cancel |
authenticated session + CSRF | no body | existing compensation path remains authoritative |
Contract rules
- Unknown fields are rejected for signed/security-sensitive requests and generated decoders are strict.
- Responses are explicit projections; domain, sqlc, provider, VM, and credential structures are never serialized directly.
- Resource projections contain only opaque assignment/pool identifiers and safe state; machine identifiers and provider endpoints are not wire fields.
- A manifest contains only the versioned gateway/tunnel/profile/grant allow-list. The opaque grant is stored as a hash in the Server database and is single-use.
- Events and QUIC/tunnel sources are defined here before any production media or gateway implementation; the Phase 3A claim stops at control contracts and conformance.
Compatibility notes
The existing routes and authentication channels remain unchanged. Phase 3A adds the
page member to the resource response and replaces the legacy flat manifest projection
with the versioned gateway-only manifest. Both changes are intentional contract changes:
the former is additive, and the latter is required to make provider/direct-host fields
unrepresentable. The Server integration tests retain the old safe resource members and
assert the new allow-list explicitly.