Zum Hauptinhalt springen

Relay-API-Referenz

Diese Seite ist die vollständige HTTP- und WebSocket-API-Referenz für das Otto-Relay. Implementierungsquelle: packages/relay/src/index.ts.

Authentifizierung

Die meisten Endpunkte erfordern ein Bearer-Token im Authorization-Header:

Authorization: Bearer <accessToken>

Rollenzuordnungen:

  • Controller-Zugriffstoken — für controllerseitige Endpunkte (Befehle, Protokolle, Node-Discovery).
  • Node-Zugriffstoken — für Node-ACL-Endpunkte (/api/controller/access).

Kopplungsendpunkte

MethodePfadBeschreibung
POST/api/pairing/requestNode beantragt eine Kopplungsherausforderung
GET/api/pairing/pendingAusstehende Kopplungscodes auflisten (Node-Auth erforderlich)
POST/api/pairing/approveController genehmigt einen Kopplungscode
GET/api/pairing/statusKopplungsstatus für eine Herausforderung prüfen

Anfrage: POST /api/pairing/request

{ "nodeId": "node_local_1" }

Anfrage: POST /api/pairing/approve

{ "code": "ABCD-1234" }

Fehlercodes: nodeId_required, code_required, pairing_not_found, pairing_not_pending, challengeId_required, challenge_not_found

Auth-Endpunkte

MethodePfadBeschreibung
POST/api/auth/refreshZugriffstoken mit Aktualisierungstoken aktualisieren
POST/api/auth/revokeAktualisierungstoken widerrufen

Anfrage: POST /api/auth/refresh

{ "refreshToken": "<refresh_token>" }

Fehlercodes: refreshToken_required, invalid_refresh_token

Controller-Client-Endpunkte

MethodePfadAuthBeschreibung
POST/api/controller/registerKeine (oder Geheimnis)Neuen Controller-Client registrieren
POST/api/controller/tokenKeineClient-Anmeldeinformationen gegen Token austauschen
POST/api/controller/removeController-BearerController-Client nach ID widerrufen
POST/api/controller/remove-allController-BearerAlle Controller-Clients widerrufen und bereinigen

Anfrage: POST /api/controller/register

{ "name": "my-controller", "description": "automation worker", "avatarSeed": "optional-seed" }

Anfrage: POST /api/controller/token

{ "clientId": "clt_abc123", "clientSecret": "cs_xxx" }

Anfrage: POST /api/controller/remove

{ "clientId": "clt_abc123" }

Entfernungssemantik:

  • Einzelne Entfernung widerruft den Client-Datensatz und baut ACL-Berechtigungen, Aktualisierungssitzungen und aktive Controller-Sockets ab.
  • Massenentfernung bereinigt zusätzlich Datensätze. Nachfolgende remove-all-Aufrufe geben removedCount: 0 zurück, bis neue Clients registriert sind.

Fehlercodes: registration_forbidden, controller_metadata_required, controller_name_conflict, client_credentials_required, invalid_client_credentials, client_not_found

Node-ACL-Endpunkte

MethodePfadAuthBeschreibung
GET/api/controller/accessNode-BearerACL-Berechtigungen für verbundenen Node auflisten
POST/api/controller/accessNode-BearerController-Zugriff auf Node gewähren oder widerrufen

Anfrage: POST /api/controller/access

{ "clientId": "clt_abc123", "grant": true, "expiresAt": 1776165600000 }

Ohne aktive Genehmigung geben Node-gerichtete Befehle acl_missing_node_grant zurück. Client-Geheimnis wird nur für /api/controller/token verwendet; Laufzeit-Befehlsautorisierung verwendet Zugriffstoken-Bereiche und Node-ACL-Berechtigungen.

Fehlercodes: missing_access_token, forbidden_role, clientId_and_grant_required, invalid_expiresAt

Node-Discovery-Endpunkte

MethodePfadAuthBeschreibung
GET/api/nodes/connectedController-BearerVerbundene Node-IDs auflisten

Antwort: GET /api/nodes/connected

{ "nodes": [{ "nodeId": "node_local_1" }] }

Fehlercodes: missing_access_token, forbidden_role, invalid_access_token

Protokollendpunkte

MethodePfadAuthBeschreibung
GET/api/logsController-BearerBetriebsprotokolle abfragen
GET/api/logs/statusController-BearerProtokollspeicherstatus und Gesamtbytegröße
GET/api/logs/exportController-BearerProtokolle als NDJSON exportieren

Abfrageparameter (Protokolle und Export):

ParameterBeschreibung
sinceISO-8601-Zeitstempel-Untergrenze
leveldebug | info | warn | error
sourcerelay | controller | node | all
latestAuf die neuesten N übereinstimmenden Einträge begrenzen
nodeIdNach Node-Identität filtern
requestIdNach Anfrage-Korrelations-ID filtern

Antwort: GET /api/logs

{
"logs": [
{
"timestamp": "2026-04-14T13:00:00.000Z",
"source": "relay",
"type": "command_routed",
"requestId": "req_cmd_1"
}
]
}

Fehlercodes: invalid_since, invalid_level, invalid_source, invalid_latest

WebSocket-Verbindungen

RolleURL-Muster
Controllerws://host:port?role=controller
Nodews://host:port?role=node

Nach dem Verbinden senden Sie hello und dann auth-Frames. Relay antwortet mit auth_ack, wenn die Authentifizierung erfolgreich ist. Siehe Wiederverwendbare Snippets für Frame-Beispiele.

CLI-Zuordnung

CLI-BefehlAPI-Operation
otto authcodeGET /api/pairing/pending
otto pair <code>POST /api/pairing/approve
otto revokePOST /api/auth/revoke
otto client registerPOST /api/controller/register
otto client loginPOST /api/controller/token + POST /api/auth/refresh
otto client removePOST /api/controller/remove
otto client statusÜberprüft gespeicherte Token
otto logs listGET /api/logs
otto logs exportGET /api/logs/export
otto logs statusGET /api/logs/status
otto commands listWebSocket command.list
otto cmdWebSocket command.run

Nächste Schritte