{
  "service": "workspace-relay",
  "status": "ok",
  "name": "Workspace Relay",
  "description": "Authenticates Workspace nodes and app clients, then routes signed workspace events, messages, and control-plane requests.",
  "version": "0.1.0",
  "endpoints": {
    "websocket": "wss://relay.joinworkspace.xyz/relay",
    "info": "https://relay.joinworkspace.xyz/info",
    "health": "https://relay.joinworkspace.xyz/health"
  },
  "protocol": {
    "transport": "websocket",
    "path": "/relay",
    "client_to_server": [
      "relay.auth",
      "relay.publish",
      "relay.ping",
      "relay.rpc.response"
    ],
    "server_to_client": [
      "relay.challenge",
      "relay.auth.ok",
      "relay.event",
      "relay.ack",
      "relay.pong",
      "relay.rpc.request",
      "relay.error"
    ]
  },
  "auth": {
    "required": true,
    "scheme": "signed-challenge",
    "event_kind": 22242,
    "required_tags": [
      "challenge",
      "relay",
      "workspace",
      "client_type"
    ],
    "node_required_tags": [
      "node"
    ],
    "supported_client_types": [
      "node",
      "web",
      "desktop",
      "mobile"
    ],
    "challenge_timeout_ms": 30000
  },
  "tenancy": {
    "mode": "enrollment-token-or-host-bound-workspace",
    "workspace_resolution": "App clients resolve workspace from the request host through Workspace API/Supabase. Nodes may resolve through host mapping or Workspace API enrollment tokens."
  },
  "runtime": {
    "connection_registry": "workspace-api/supabase",
    "persistence": "workspace-api/supabase",
    "backplane": "redis",
    "delivery_targets": 0
  }
}