Add interactive API docs at /docs endpoint
Swagger UI served via CDN for browsing OpenAPI spec. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -80,6 +80,7 @@ All detectors support: `AGGREGATOR_URL`, `CHECK_INTERVAL`, `THRESHOLD_WARNING`,
|
||||
| `/wake` | POST | Exit sleep mode |
|
||||
| `/status` | GET | Current state JSON |
|
||||
| `/events` | GET | List active events |
|
||||
| `/docs` | GET | Interactive API documentation (Swagger UI) |
|
||||
|
||||
### `/notify` Endpoint
|
||||
|
||||
|
||||
@@ -191,8 +191,9 @@ automation:
|
||||
| `/notify` | POST | Simple notification `{"message": "", "duration": 5}` |
|
||||
| `/sleep` | POST | Enter sleep mode |
|
||||
| `/wake` | POST | Exit sleep mode |
|
||||
| `/docs` | GET | Interactive API documentation (Swagger UI) |
|
||||
|
||||
Full API documentation available in [openapi.yaml](openapi.yaml) (OpenAPI 3.0 spec).
|
||||
Full API documentation available at [/docs](http://localhost:5100/docs) or in [openapi.yaml](openapi.yaml).
|
||||
|
||||
## Personality
|
||||
|
||||
|
||||
@@ -326,6 +326,35 @@ def list_events():
|
||||
return jsonify({"events": dict(active_events)}), 200
|
||||
|
||||
|
||||
@app.route("/docs")
|
||||
def docs():
|
||||
"""Serve interactive API documentation via Swagger UI."""
|
||||
return """<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Kao API Documentation</title>
|
||||
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5/swagger-ui.css">
|
||||
<style>
|
||||
body { margin: 0; background: #fafafa; }
|
||||
.swagger-ui .topbar { display: none; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="swagger-ui"></div>
|
||||
<script src="https://unpkg.com/swagger-ui-dist@5/swagger-ui-bundle.js"></script>
|
||||
<script>
|
||||
SwaggerUIBundle({
|
||||
url: '/openapi.yaml',
|
||||
dom_id: '#swagger-ui',
|
||||
presets: [SwaggerUIBundle.presets.apis, SwaggerUIBundle.SwaggerUIStandalonePreset],
|
||||
layout: 'BaseLayout'
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>"""
|
||||
|
||||
|
||||
def main():
|
||||
port = int(os.environ.get("PORT", 5100))
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@
|
||||
const emoteEl = document.getElementById("emote");
|
||||
const messageEl = document.getElementById("message");
|
||||
const POLL_INTERVAL = 2000;
|
||||
const VERSION = "v1.3.1";
|
||||
const VERSION = "v1.3.2";
|
||||
|
||||
// Sound system
|
||||
let audioCtx = null;
|
||||
|
||||
Reference in New Issue
Block a user