diff --git a/docs/PROJECT-MAP.md b/docs/PROJECT-MAP.md index 55c9db80..3775fef3 100644 --- a/docs/PROJECT-MAP.md +++ b/docs/PROJECT-MAP.md @@ -90,6 +90,6 @@ Manifest-less directories under `plugins/` are core frontend surface and always ## Size -- test functions defined: **1570** (parametrised cases collect higher) -- documented API paths: **345** (`docs/openapi.json`, regenerate with `scripts/gen_openapi.py`) +- test functions defined: **1575** (parametrised cases collect higher) +- documented API paths: **346** (`docs/openapi.json`, regenerate with `scripts/gen_openapi.py`) diff --git a/docs/api-inventory.json b/docs/api-inventory.json index 235f3992..d649c157 100644 --- a/docs/api-inventory.json +++ b/docs/api-inventory.json @@ -423,6 +423,14 @@ "params": "none", "example": "curl http://localhost:5001/api/dashboard/navigation" }, + { + "method": "GET", + "path": "/api/dashboard/capabilities", + "purpose": "Booleans describing what THIS caller may reach, so the app chrome can avoid drawing controls that would only answer 401; cansearch reports whether the caller holds assets.view, which a signed-out visitor does when the guest role has been granted it", + "auth": "none", + "params": "none", + "example": "curl http://localhost:5001/api/dashboard/capabilities" + }, { "method": "GET", "path": "/api/dashboard/widgets", diff --git a/docs/openapi.json b/docs/openapi.json index 14eec236..3d20663c 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -2447,6 +2447,34 @@ } } }, + "/api/dashboard/capabilities": { + "get": { + "tags": [ + "core-platform" + ], + "summary": "Booleans describing what THIS caller may reach, so the app chrome can avoid drawing controls that would only answer...", + "description": "Booleans describing what THIS caller may reach, so the app chrome can avoid drawing controls that would only answer 401; cansearch reports whether the caller holds assets.view, which a signed-out visitor does when the guest role has been granted it\n\n**Auth:** none\n\n**Params:** none\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboard/capabilities\n```", + "security": [], + "responses": { + "200": { + "description": "Success. Body is the success_response envelope: {status, data, meta}.", + "content": { + "application/json": { + "$ref": "#/components/schemas/SuccessEnvelope" + } + } + }, + "default": { + "description": "Error. Body is the error envelope; the code and message are nested under data.error.", + "content": { + "application/json": { + "$ref": "#/components/schemas/ErrorEnvelope" + } + } + } + } + } + }, "/api/dashboard/widgets": { "get": { "tags": [ diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index e3eaa19d..6bc0f1b3 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -536,6 +536,9 @@ export const dashboardApi = { }, navigation() { return api.get('/dashboard/navigation') + }, + capabilities() { + return api.get('/dashboard/capabilities') } } diff --git a/frontend/src/views/AppLayout.vue b/frontend/src/views/AppLayout.vue index cdf8ce56..dfe40089 100644 --- a/frontend/src/views/AppLayout.vue +++ b/frontend/src/views/AppLayout.vue @@ -11,9 +11,12 @@ - -