feat(api, web): enhance agent management and linting capabilities
Build and Push EvoFirewall Docker Image / build-and-push (push) Successful in 2m17s
Build and Push EvoFirewall Docker Image / create-release (push) Skipped

- Added a new linting command for OpenAPI specifications in the package.json, improving code quality checks.
- Updated frontend documentation to clarify component usage and structure, including detailed descriptions for `SettingsShell` and `Auth callback`.
- Refactored agent-related API routes to streamline control-plane functionalities, consolidating multiple routes for better organization.
- Improved error handling in the API to provide more informative responses for validation errors, enhancing user feedback during interactions.

These changes enhance the overall development experience and improve the management of agents within the application.
This commit is contained in:
Denozordec
2026-07-30 14:13:05 +07:00
parent fb95ef22b3
commit f160992d94
68 changed files with 3155 additions and 6899 deletions
+6 -1
View File
@@ -5,4 +5,9 @@
- [EvoBGP](integrate-evobgp.md)
- [Agents](agents.md)
- [UI design contract](ui-design-contract.md)
- [OpenAPI](openapi.yaml)
- [OpenAPI](openapi.yaml)**HTTP SoT** (пути/операции). Живая валидация request bodies — Zod в `@evofw/shared`.
```bash
# Lint OpenAPI (requires npx)
npx --yes @redocly/cli lint docs/openapi.yaml
```
+419 -7
View File
@@ -1,58 +1,418 @@
openapi: 3.0.3
info:
title: EvoFirewall API
version: 0.1.0
description: Centralized firewall control plane
version: 0.2.0
description: |
Centralized firewall control plane.
**HTTP SoT:** this OpenAPI document.
**Runtime validation:** Zod schemas in `@evofw/shared` (authoritative for request bodies).
servers:
- url: http://localhost:8080
description: Local API
security: []
paths:
/health:
get:
summary: Liveness
tags: [system]
responses:
'200':
description: OK
/api/v1/dashboard:
get:
summary: Dashboard KPI
tags: [ops]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Stats
/api/v1/install-context:
get:
summary: Public install base URL + enroll seed hint
tags: [ops]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Install context
/api/v1/install-links:
get:
summary: List install links
tags: [agents]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Links
post:
summary: Create install link + invited agent
tags: [agents]
security: [{ bearerAuth: [] }]
responses:
'201':
description: Created
/api/v1/install-links/{id}:
delete:
summary: Revoke install link
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Revoked
/api/v1/agents:
get:
summary: List agents
tags: [agents]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Agents
/api/v1/agents/{id}:
get:
summary: Get agent
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Agent
patch:
summary: Update agent
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Updated
delete:
summary: Delete agent
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Deleted
/api/v1/agents/{id}/approve:
post:
summary: Approve pending/invited agent
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Approved
/api/v1/agents/{id}/revoke:
post:
summary: Revoke agent
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Revoked
/api/v1/agents/{id}/preview:
get:
summary: Policy preview (truncated CIDRs)
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
- name: limit_cidrs
in: query
schema: { type: integer, default: 50, maximum: 5000 }
responses:
'200':
description: Preview
/api/v1/agents/{id}/policy-sets:
get:
summary: Assigned policy sets
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Sets
put:
summary: Replace assigned policy sets (order = sort)
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Updated
/api/v1/agents/{id}/overrides:
get:
summary: List IP overrides
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Overrides
post:
summary: Create override
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Created
/api/v1/agents/{id}/overrides/{overrideId}:
delete:
summary: Delete override
tags: [agents]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
- name: overrideId
in: path
required: true
schema: { type: string }
responses:
'200':
description: Deleted
/api/v1/lists:
get:
summary: List IP lists
tags: [lists]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Lists
post:
summary: Create IP list
tags: [lists]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Created
/api/v1/lists/{id}:
get:
summary: List detail + entries
tags: [lists]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Detail
delete:
summary: Delete list
tags: [lists]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Deleted
/api/v1/lists/{id}/refresh:
post:
summary: Refresh remote/json/evobgp list
tags: [lists]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Refreshed
/api/v1/lists/{id}/entries:
post:
summary: Add manual entries
tags: [lists]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Updated
delete:
summary: Delete entry
tags: [lists]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Deleted
/api/v1/policy-sets:
get:
summary: List policy sets
tags: [policies]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Sets
post:
summary: Create policy set
tags: [policies]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Created
/api/v1/policy-sets/{id}:
get:
summary: Get policy set
tags: [policies]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Set
patch:
summary: Patch policy set
tags: [policies]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Updated
delete:
summary: Delete policy set
tags: [policies]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Deleted
/api/v1/policy-sets/{id}/rules:
get:
summary: Rules in set
tags: [policies]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Rules
/api/v1/policy-sets/{id}/rules/reorder:
put:
summary: Reorder rules in a set
tags: [policies]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Reordered
/api/v1/rules:
get:
summary: List policy rules
summary: List policy rules (optional set filter)
tags: [policies]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Rules
post:
summary: Create policy rule
tags: [policies]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Created
/api/v1/rules/{id}:
patch:
summary: Patch rule
tags: [policies]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Updated
delete:
summary: Delete rule
tags: [policies]
security: [{ bearerAuth: [] }]
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: Deleted
/api/v1/stats/recent:
get:
summary: Recent apply samples
tags: [ops]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Samples
/api/v1/integrations/evobgp/communities:
get:
summary: Proxy EvoBGP communities
tags: [integrations]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Communities
/api/v1/settings:
get:
summary: Settings map (token masked)
tags: [settings]
security: [{ bearerAuth: [] }]
responses:
'200':
description: Settings
put:
summary: Update whitelisted settings keys
tags: [settings]
security: [{ bearerAuth: [] }]
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties:
type: string
description: Keys — enroll_seed, evobgp_api_url, evobgp_api_token, agent_sync_interval_sec, show_quick_actions
responses:
'200':
description: Saved
'400':
description: Unknown key / validation
/api/v1/audit:
get:
summary: Local audit log (dual-write source fw)
summary: Local audit log
tags: [ops]
security: [{ bearerAuth: [] }]
parameters:
- name: action
@@ -67,31 +427,83 @@ paths:
responses:
'200':
description: Audit entries
/v1/agent/install.sh:
get:
summary: Agent install script
tags: [agent-public]
responses:
'200':
description: Shell script
/v1/agent/enroll:
post:
summary: Enroll agent (public + seed)
summary: Enroll agent (X-EvoFW-Seed)
tags: [agent-public]
responses:
'201':
description: Pending agent
/v1/agent/policy:
get:
summary: Evaluated policy for agent
tags: [agent]
security: [{ agentToken: [] }]
responses:
'200':
description: Policy
/v1/agent/apply-report:
/v1/agent/policy.rsc:
get:
summary: MikroTik RSC policy
tags: [agent]
security: [{ agentToken: [] }]
responses:
'200':
description: RSC text
/v1/agent/heartbeat:
post:
summary: Apply report + packet stats
summary: Agent heartbeat
tags: [agent]
security: [{ agentToken: [] }]
responses:
'200':
description: OK
/v1/agent/apply-report:
post:
summary: Apply report + packet stats
tags: [agent]
security: [{ agentToken: [] }]
responses:
'200':
description: OK
components:
parameters:
Id:
name: id
in: path
required: true
schema: { type: string }
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Portal JWT (app id fw)
agentToken:
type: http
scheme: bearer
description: Agent enroll token
tags:
- name: system
- name: ops
- name: agents
- name: lists
- name: policies
- name: settings
- name: integrations
- name: agent-public
- name: agent