feat: Fleet Forge UEM - device management, agent, remote desktop (VNC), TLS reverse proxy

This commit is contained in:
Pepe44DEV
2026-09-06 22:09:28 +00:00
commit db16ad5cc1
154 changed files with 22920 additions and 0 deletions
+444
View File
@@ -0,0 +1,444 @@
{
"openapi": "3.0.3",
"info": {
"title": "Fleet Forge API",
"description": "Unified Endpoint & Infrastructure Management Platform API",
"version": "0.1.0",
"contact": {
"name": "Fleet Forge",
"url": "https://github.com/fleetforge/fleet-forge"
}
},
"servers": [
{ "url": "http://localhost:3000", "description": "Local development" }
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT"
},
"deviceAuth": {
"type": "http",
"scheme": "bearer",
"description": "Device credential for agent authentication"
}
},
"schemas": {
"ApiResponse": {
"type": "object",
"properties": {
"success": { "type": "boolean" },
"data": {},
"error": {
"type": "object",
"properties": {
"code": { "type": "string" },
"message": { "type": "string" }
}
},
"meta": {
"type": "object",
"properties": {
"page": { "type": "integer" },
"limit": { "type": "integer" },
"total": { "type": "integer" },
"totalPages": { "type": "integer" }
}
}
}
},
"LoginRequest": {
"type": "object",
"required": ["email", "password"],
"properties": {
"email": { "type": "string", "format": "email" },
"password": { "type": "string" }
}
},
"EnrollRequest": {
"type": "object",
"required": ["token", "hostname", "platform", "os_name", "os_version", "architecture", "agent_version"],
"properties": {
"token": { "type": "string" },
"hostname": { "type": "string" },
"platform": { "type": "string", "enum": ["linux", "darwin", "windows"] },
"os_name": { "type": "string" },
"os_version": { "type": "string" },
"architecture": { "type": "string" },
"kernel_version": { "type": "string" },
"cpu_model": { "type": "string" },
"cpu_cores": { "type": "integer" },
"total_memory_bytes": { "type": "integer" },
"total_disk_bytes": { "type": "integer" },
"ip_address": { "type": "string" },
"agent_version": { "type": "string" }
}
},
"HeartbeatRequest": {
"type": "object",
"properties": {
"hostname": { "type": "string" },
"os_version": { "type": "string" },
"kernel_version": { "type": "string" },
"agent_version": { "type": "string" },
"ip_address": { "type": "string" },
"metrics": {
"type": "object",
"properties": {
"cpu_usage_percent": { "type": "number" },
"memory_usage_percent": { "type": "number" },
"disk_usage_percent": { "type": "number" },
"uptime_seconds": { "type": "integer" }
}
}
}
},
"CreateJobRequest": {
"type": "object",
"required": ["jobType", "deviceIds"],
"properties": {
"jobType": {
"type": "string",
"enum": ["update_inventory", "update_system_info", "check_service_status", "start_service", "stop_service", "restart_service", "install_package", "update_package", "reboot_system"]
},
"deviceIds": {
"type": "array",
"items": { "type": "string", "format": "uuid" }
},
"parameters": { "type": "object" },
"expiresInMinutes": { "type": "integer", "minimum": 1, "maximum": 1440 }
}
}
}
},
"security": [{ "bearerAuth": [] }],
"paths": {
"/api/health": {
"get": {
"tags": ["System"],
"summary": "Health check",
"security": [],
"responses": {
"200": { "description": "API is healthy" }
}
}
},
"/api/v1/auth/login": {
"post": {
"tags": ["Auth"],
"summary": "Login",
"security": [],
"requestBody": {
"required": true,
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginRequest" } } }
},
"responses": {
"200": { "description": "Login successful, returns JWT token" },
"401": { "description": "Invalid credentials" },
"429": { "description": "Rate limited" }
}
}
},
"/api/v1/auth/me": {
"post": {
"tags": ["Auth"],
"summary": "Get current user",
"responses": {
"200": { "description": "Current user info" },
"401": { "description": "Not authenticated" }
}
}
},
"/api/v1/devices": {
"get": {
"tags": ["Devices"],
"summary": "List devices",
"parameters": [
{ "name": "page", "in": "query", "schema": { "type": "integer", "default": 1 } },
{ "name": "limit", "in": "query", "schema": { "type": "integer", "default": 20 } },
{ "name": "search", "in": "query", "schema": { "type": "string" } },
{ "name": "status", "in": "query", "schema": { "type": "string", "enum": ["online", "offline", "warning"] } },
{ "name": "deviceType", "in": "query", "schema": { "type": "string" } },
{ "name": "sort", "in": "query", "schema": { "type": "string" } },
{ "name": "order", "in": "query", "schema": { "type": "string", "enum": ["asc", "desc"] } }
],
"responses": {
"200": { "description": "Paginated list of devices" }
}
}
},
"/api/v1/devices/{deviceId}": {
"get": {
"tags": ["Devices"],
"summary": "Get device details",
"parameters": [
{ "name": "deviceId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
],
"responses": {
"200": { "description": "Device details" },
"404": { "description": "Device not found" }
}
},
"patch": {
"tags": ["Devices"],
"summary": "Update device",
"parameters": [
{ "name": "deviceId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
],
"responses": {
"200": { "description": "Device updated" }
}
},
"delete": {
"tags": ["Devices"],
"summary": "Delete device",
"parameters": [
{ "name": "deviceId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
],
"responses": {
"204": { "description": "Device deleted" }
}
}
},
"/api/v1/devices/{deviceId}/metrics": {
"get": {
"tags": ["Devices"],
"summary": "Get device metrics",
"parameters": [
{ "name": "deviceId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
],
"responses": {
"200": { "description": "Device metrics history" }
}
}
},
"/api/v1/devices/{deviceId}/inventory": {
"get": {
"tags": ["Devices"],
"summary": "Get device inventory",
"parameters": [
{ "name": "deviceId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
],
"responses": {
"200": { "description": "Device inventory snapshots" }
}
}
},
"/api/v1/enrollment-tokens": {
"get": {
"tags": ["Enrollment"],
"summary": "List enrollment tokens",
"responses": { "200": { "description": "List of tokens" } }
},
"post": {
"tags": ["Enrollment"],
"summary": "Create enrollment token",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"label": { "type": "string" },
"expiresInHours": { "type": "integer", "default": 24 },
"maxUses": { "type": "integer", "nullable": true }
}
}
}
}
},
"responses": {
"201": { "description": "Token created. The raw token is only shown once." }
}
}
},
"/api/v1/enrollment-tokens/{tokenId}": {
"delete": {
"tags": ["Enrollment"],
"summary": "Revoke enrollment token",
"parameters": [
{ "name": "tokenId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
],
"responses": {
"200": { "description": "Token revoked" }
}
}
},
"/api/v1/groups": {
"get": {
"tags": ["Groups"],
"summary": "List device groups",
"responses": { "200": { "description": "List of groups" } }
},
"post": {
"tags": ["Groups"],
"summary": "Create device group",
"responses": { "201": { "description": "Group created" } }
}
},
"/api/v1/jobs": {
"get": {
"tags": ["Jobs"],
"summary": "List jobs",
"responses": { "200": { "description": "Paginated list of jobs" } }
},
"post": {
"tags": ["Jobs"],
"summary": "Create job",
"requestBody": {
"required": true,
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateJobRequest" } } }
},
"responses": {
"201": { "description": "Job created and queued" }
}
}
},
"/api/v1/jobs/{jobId}/cancel": {
"patch": {
"tags": ["Jobs"],
"summary": "Cancel queued job",
"parameters": [
{ "name": "jobId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
],
"responses": {
"200": { "description": "Job cancelled" },
"404": { "description": "Job not found or not cancellable" }
}
}
},
"/api/v1/policies": {
"get": {
"tags": ["Policies"],
"summary": "List policies",
"responses": { "200": { "description": "List of policies" } }
},
"post": {
"tags": ["Policies"],
"summary": "Create policy",
"responses": { "201": { "description": "Policy created" } }
}
},
"/api/v1/alerts": {
"get": {
"tags": ["Alerts"],
"summary": "List alerts",
"parameters": [
{ "name": "resolved", "in": "query", "schema": { "type": "string", "enum": ["true", "false"] } }
],
"responses": { "200": { "description": "List of alerts" } }
}
},
"/api/v1/alerts/{alertId}/resolve": {
"patch": {
"tags": ["Alerts"],
"summary": "Resolve alert",
"parameters": [
{ "name": "alertId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
],
"responses": { "200": { "description": "Alert resolved" } }
}
},
"/api/v1/audit-events": {
"get": {
"tags": ["Audit"],
"summary": "List audit events",
"parameters": [
{ "name": "page", "in": "query", "schema": { "type": "integer" } },
{ "name": "limit", "in": "query", "schema": { "type": "integer" } },
{ "name": "action", "in": "query", "schema": { "type": "string" } }
],
"responses": { "200": { "description": "Paginated audit events" } }
}
},
"/api/v1/dashboard/stats": {
"get": {
"tags": ["Dashboard"],
"summary": "Get dashboard statistics",
"responses": { "200": { "description": "Dashboard stats" } }
}
},
"/api/v1/users": {
"get": {
"tags": ["Users"],
"summary": "List users",
"responses": { "200": { "description": "List of users" } }
},
"post": {
"tags": ["Users"],
"summary": "Create user",
"responses": { "201": { "description": "User created" } }
}
},
"/api/v1/agent/enroll": {
"post": {
"tags": ["Agent"],
"summary": "Enroll device",
"security": [],
"requestBody": {
"required": true,
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnrollRequest" } } }
},
"responses": {
"201": { "description": "Device enrolled, returns device_id and credential" },
"401": { "description": "Invalid enrollment token" }
}
}
},
"/api/v1/agent/heartbeat": {
"post": {
"tags": ["Agent"],
"summary": "Send heartbeat",
"security": [{ "deviceAuth": [] }],
"requestBody": {
"required": true,
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/HeartbeatRequest" } } }
},
"responses": {
"200": { "description": "Heartbeat acknowledged" },
"401": { "description": "Invalid device credential" }
}
}
},
"/api/v1/agent/jobs": {
"get": {
"tags": ["Agent"],
"summary": "Fetch pending jobs",
"security": [{ "deviceAuth": [] }],
"responses": {
"200": { "description": "List of pending jobs for this device" }
}
}
},
"/api/v1/agent/jobs/{jobId}/result": {
"post": {
"tags": ["Agent"],
"summary": "Submit job result",
"security": [{ "deviceAuth": [] }],
"parameters": [
{ "name": "jobId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }
],
"responses": {
"200": { "description": "Result accepted" }
}
}
}
},
"tags": [
{ "name": "System", "description": "Health and system endpoints" },
{ "name": "Auth", "description": "Authentication" },
{ "name": "Devices", "description": "Device management" },
{ "name": "Enrollment", "description": "Enrollment token management" },
{ "name": "Groups", "description": "Device groups" },
{ "name": "Jobs", "description": "Job management" },
{ "name": "Policies", "description": "Compliance policies" },
{ "name": "Alerts", "description": "System alerts" },
{ "name": "Audit", "description": "Audit trail" },
{ "name": "Dashboard", "description": "Dashboard statistics" },
{ "name": "Users", "description": "User management" },
{ "name": "Agent", "description": "Agent endpoints (enroll, heartbeat, jobs)" }
]
}