{"service":"Universal WebSocket Notification Service","version":"1.1.0","description":"FastAPI service for webhook-to-WebSocket bridge with Inngest integration","endpoints":{"websocket":"/ws/{app_id}/{resource_id}","sse_fallback":"/sse/{app_id}/{resource_id}","devmaestro_agent":"/agent/connect","devmaestro_token":"POST /api/auth/token","webhook":"/webhooks/{app_id}/callback","admin":"/api/admin/apps","health":"/health","inngest_api":{"ping":"GET /api/inngest/v1/ping","publish":"POST /api/inngest/v1/publish","resume_status":"POST /api/inngest/v1/resume/{resume_id}/status","user_publish":"POST /api/inngest/v1/user/{user_id}","app_broadcast":"POST /api/inngest/v1/app/{app_id}/{env}/broadcast","sse_stream":"GET /api/inngest/v1/stream?channels=channel1,channel2"}},"authentication":{"inngest_api":"X-Notify-Key header required","replay_protection":"X-Notify-Timestamp and X-Notify-Signature headers (optional)","idempotency":"Idempotency-Key header (optional, 24h dedup)","devmaestro_token":"No authentication required - public endpoint for CLI token generation"},"channels":{"app":"app:{appId}:{env} - app-wide notifications","resume":"resume:{resumeId} - resume-specific updates","user":"user:{userId} - user-specific notifications"},"devmaestro_agent":{"endpoint":"/agent/connect","description":"DevMaestro Agent WebSocket endpoint with Redis integration","auth":"Ultra-permissive mode (ENABLE_AUTH=false)","jwt_sources":["Authorization header","X-JWT-Token header","Query params: token, jwt, auth"],"redis_bridge":{"enabled":true,"redis_url":"redis://:***@10.8.8.17:6379","channels":{"publish":"agent:{tenant}:{project} - Messages from agent to hub","subscribe":"hub:{tenant}:{project}:{agent_id} - Messages from hub to agent"}},"hello_message":"Sent immediately upon connection with tenant/project/agent_id and Redis bridge status"}}