Serve dashboard at /, version the REST API under /api/v1
The SvelteKit build was always made for the root (no base path); it now mounts at / — registered last so /api/v1, /ws, /health, and /mcp match first — and the JSON root endpoint is gone (its info lives in /health and gateway_status). REST routers move from /api/* to /api/v1/*; /ws and /health stay put; /mcp/ unchanged. Dashboard API client, tests, README, and docs updated; dashboard rebuilt (build/ is gitignored). Verified live: / serves the UI, /api/v1 answers 200/401, the old /api paths 404, MCP still lists 15 tools. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -163,38 +163,38 @@ FLOW_PAYLOAD = {
|
||||
|
||||
class TestCallFlowRoutes:
|
||||
async def test_crud_round_trip(self, client):
|
||||
resp = await client.post("/api/call-flows/", json=FLOW_PAYLOAD)
|
||||
resp = await client.post("/api/v1/call-flows/", json=FLOW_PAYLOAD)
|
||||
assert resp.status_code == 200, resp.text
|
||||
flow_id = resp.json()["id"]
|
||||
assert flow_id == "acme-main-line"
|
||||
|
||||
resp = await client.post("/api/call-flows/", json=FLOW_PAYLOAD)
|
||||
resp = await client.post("/api/v1/call-flows/", json=FLOW_PAYLOAD)
|
||||
assert resp.status_code == 409
|
||||
|
||||
resp = await client.get("/api/call-flows/")
|
||||
resp = await client.get("/api/v1/call-flows/")
|
||||
assert [f["id"] for f in resp.json()] == [flow_id]
|
||||
|
||||
resp = await client.get(f"/api/call-flows/{flow_id}")
|
||||
resp = await client.get(f"/api/v1/call-flows/{flow_id}")
|
||||
assert resp.json()["steps"][0]["action_value"] == "2"
|
||||
|
||||
resp = await client.get("/api/call-flows/by-number/+18005551234")
|
||||
resp = await client.get("/api/v1/call-flows/by-number/+18005551234")
|
||||
assert resp.json()["id"] == flow_id
|
||||
|
||||
resp = await client.put(
|
||||
f"/api/call-flows/{flow_id}", json={"notes": "updated"}
|
||||
f"/api/v1/call-flows/{flow_id}", json={"notes": "updated"}
|
||||
)
|
||||
assert resp.json()["notes"] == "updated"
|
||||
|
||||
resp = await client.delete(f"/api/call-flows/{flow_id}")
|
||||
resp = await client.delete(f"/api/v1/call-flows/{flow_id}")
|
||||
assert resp.json()["status"] == "deleted"
|
||||
|
||||
resp = await client.get(f"/api/call-flows/{flow_id}")
|
||||
resp = await client.get(f"/api/v1/call-flows/{flow_id}")
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
class TestCallHistoryRoutes:
|
||||
async def test_history_and_record(self, client):
|
||||
resp = await client.get("/api/calls/history")
|
||||
resp = await client.get("/api/v1/calls/history")
|
||||
assert resp.status_code == 200
|
||||
assert resp.json() == []
|
||||
|
||||
@@ -211,17 +211,17 @@ class TestCallHistoryRoutes:
|
||||
))
|
||||
await session.commit()
|
||||
|
||||
resp = await client.get("/api/calls/history")
|
||||
resp = await client.get("/api/v1/calls/history")
|
||||
assert [r["id"] for r in resp.json()] == ["call_hist1"]
|
||||
|
||||
resp = await client.get("/api/calls/history?number=%2B18005551234")
|
||||
resp = await client.get("/api/v1/calls/history?number=%2B18005551234")
|
||||
assert len(resp.json()) == 1
|
||||
|
||||
resp = await client.get("/api/calls/call_hist1/record")
|
||||
resp = await client.get("/api/v1/calls/call_hist1/record")
|
||||
assert resp.json()["intent"] == "dispute charge"
|
||||
|
||||
resp = await client.get("/api/calls/call_missing/record")
|
||||
resp = await client.get("/api/v1/calls/call_missing/record")
|
||||
assert resp.status_code == 404
|
||||
|
||||
resp = await client.get("/api/calls/call_hist1/transcript")
|
||||
resp = await client.get("/api/v1/calls/call_hist1/transcript")
|
||||
assert resp.json() == []
|
||||
|
||||
Reference in New Issue
Block a user