@lamalibre/create-lamaste 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +118 -0
- package/README.md +114 -0
- package/bin/create-lamaste.js +15 -0
- package/package.json +54 -0
- package/scripts/bundle-vendor.js +110 -0
- package/scripts/lamaste-cert-info +62 -0
- package/scripts/lamaste-certbot +96 -0
- package/scripts/lamaste-priv +693 -0
- package/src/index.js +646 -0
- package/src/lib/accounts.js +86 -0
- package/src/lib/binaries.js +137 -0
- package/src/lib/cert-help-page.js +160 -0
- package/src/lib/env.js +132 -0
- package/src/lib/http-redirect.js +38 -0
- package/src/lib/ownership.js +231 -0
- package/src/lib/relay-services.js +103 -0
- package/src/lib/secrets.js +19 -0
- package/src/lib/service-config.js +311 -0
- package/src/lib/summary.js +131 -0
- package/src/lib/wrappers.js +63 -0
- package/src/tasks/gatekeeper.js +233 -0
- package/src/tasks/harden.js +293 -0
- package/src/tasks/mtls.js +193 -0
- package/src/tasks/nginx.js +265 -0
- package/src/tasks/node.js +110 -0
- package/src/tasks/panel.js +408 -0
- package/src/tasks/redeploy.js +438 -0
- package/vendor/docs/00-introduction/how-it-works.md +447 -0
- package/vendor/docs/00-introduction/quickstart.md +472 -0
- package/vendor/docs/00-introduction/what-is-lamaste.md +112 -0
- package/vendor/docs/01-concepts/authentication.md +464 -0
- package/vendor/docs/01-concepts/authorization.md +242 -0
- package/vendor/docs/01-concepts/certificates.md +452 -0
- package/vendor/docs/01-concepts/dns-and-domains.md +343 -0
- package/vendor/docs/01-concepts/mtls.md +490 -0
- package/vendor/docs/01-concepts/nginx-reverse-proxy.md +540 -0
- package/vendor/docs/01-concepts/security-model.md +600 -0
- package/vendor/docs/01-concepts/tickets.md +414 -0
- package/vendor/docs/01-concepts/tunneling.md +367 -0
- package/vendor/docs/02-guides/agent-setup.md +194 -0
- package/vendor/docs/02-guides/certificate-management.md +341 -0
- package/vendor/docs/02-guides/cloud-provisioning.md +406 -0
- package/vendor/docs/02-guides/desktop-app-setup.md +226 -0
- package/vendor/docs/02-guides/disaster-recovery.md +464 -0
- package/vendor/docs/02-guides/first-tunnel.md +230 -0
- package/vendor/docs/02-guides/installation.md +393 -0
- package/vendor/docs/02-guides/managing-users.md +255 -0
- package/vendor/docs/02-guides/onboarding.md +244 -0
- package/vendor/docs/02-guides/standalone-plugin-with-tickets.md +375 -0
- package/vendor/docs/02-guides/static-sites.md +364 -0
- package/vendor/docs/03-architecture/e2e-three-vm-sequences.md +457 -0
- package/vendor/docs/03-architecture/installer-flow.md +151 -0
- package/vendor/docs/03-architecture/installer.md +445 -0
- package/vendor/docs/03-architecture/management-flow.md +288 -0
- package/vendor/docs/03-architecture/nginx-configuration.md +830 -0
- package/vendor/docs/03-architecture/onboarding-flow.md +164 -0
- package/vendor/docs/03-architecture/overview.md +541 -0
- package/vendor/docs/03-architecture/panel-client.md +416 -0
- package/vendor/docs/03-architecture/panel-server.md +695 -0
- package/vendor/docs/03-architecture/state-management.md +529 -0
- package/vendor/docs/03-architecture/system-overview.md +167 -0
- package/vendor/docs/04-api-reference/certificates.md +1141 -0
- package/vendor/docs/04-api-reference/gatekeeper.md +592 -0
- package/vendor/docs/04-api-reference/onboarding.md +473 -0
- package/vendor/docs/04-api-reference/overview.md +404 -0
- package/vendor/docs/04-api-reference/services.md +267 -0
- package/vendor/docs/04-api-reference/settings.md +343 -0
- package/vendor/docs/04-api-reference/sites.md +716 -0
- package/vendor/docs/04-api-reference/system.md +268 -0
- package/vendor/docs/04-api-reference/tickets.md +618 -0
- package/vendor/docs/04-api-reference/tunnels.md +417 -0
- package/vendor/docs/04-api-reference/users.md +333 -0
- package/vendor/docs/05-operations/backup-and-restore.md +342 -0
- package/vendor/docs/05-operations/monitoring.md +285 -0
- package/vendor/docs/05-operations/uninstalling.md +344 -0
- package/vendor/docs/05-operations/upgrades.md +270 -0
- package/vendor/docs/06-reference/config-files.md +1080 -0
- package/vendor/docs/06-reference/glossary.md +528 -0
- package/vendor/docs/06-reference/installer-flags.md +260 -0
- package/vendor/docs/06-reference/ports-and-services.md +244 -0
- package/vendor/docs/06-reference/troubleshooting.md +665 -0
- package/vendor/docs/_index.json +233 -0
- package/vendor/docs/gatekeeper-design.md +953 -0
- package/vendor/docs/package.json +15 -0
- package/vendor/docs/todo/lib-cli-desktop-refactor.md +641 -0
- package/vendor/gatekeeper/dist/boot.d.ts +1 -0
- package/vendor/gatekeeper/dist/boot.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/boot.js +17 -0
- package/vendor/gatekeeper/dist/boot.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/access.d.ts +2 -0
- package/vendor/gatekeeper/dist/cli/commands/access.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/access.js +33 -0
- package/vendor/gatekeeper/dist/cli/commands/access.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.d.ts +2 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.js +110 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.d.ts +2 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.js +98 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/index.d.ts +3 -0
- package/vendor/gatekeeper/dist/cli/index.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/index.js +45 -0
- package/vendor/gatekeeper/dist/cli/index.js.map +1 -0
- package/vendor/gatekeeper/dist/index.d.ts +9 -0
- package/vendor/gatekeeper/dist/index.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/index.js +13 -0
- package/vendor/gatekeeper/dist/index.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/authz.d.ts +16 -0
- package/vendor/gatekeeper/dist/lib/authz.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/authz.js +42 -0
- package/vendor/gatekeeper/dist/lib/authz.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.d.ts +15 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.js +19 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/constants.d.ts +82 -0
- package/vendor/gatekeeper/dist/lib/constants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/constants.js +79 -0
- package/vendor/gatekeeper/dist/lib/constants.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/grants.d.ts +32 -0
- package/vendor/gatekeeper/dist/lib/grants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/grants.js +314 -0
- package/vendor/gatekeeper/dist/lib/grants.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/groups.d.ts +10 -0
- package/vendor/gatekeeper/dist/lib/groups.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/groups.js +247 -0
- package/vendor/gatekeeper/dist/lib/groups.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/migration.d.ts +17 -0
- package/vendor/gatekeeper/dist/lib/migration.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/migration.js +79 -0
- package/vendor/gatekeeper/dist/lib/migration.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0001_groups.sql +7 -0
- package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0002_access_grants.sql +14 -0
- package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0003_access_request_log.sql +9 -0
- package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0001_groups.sql +7 -0
- package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0002_access_grants.sql +14 -0
- package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0003_access_request_log.sql +9 -0
- package/vendor/gatekeeper/dist/lib/state-db.d.ts +16 -0
- package/vendor/gatekeeper/dist/lib/state-db.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/state-db.js +154 -0
- package/vendor/gatekeeper/dist/lib/state-db.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/templates.d.ts +21 -0
- package/vendor/gatekeeper/dist/lib/templates.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/templates.js +151 -0
- package/vendor/gatekeeper/dist/lib/templates.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/types.d.ts +178 -0
- package/vendor/gatekeeper/dist/lib/types.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/types.js +2 -0
- package/vendor/gatekeeper/dist/lib/types.js.map +1 -0
- package/vendor/gatekeeper/dist/server/index.d.ts +15 -0
- package/vendor/gatekeeper/dist/server/index.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/index.js +251 -0
- package/vendor/gatekeeper/dist/server/index.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.d.ts +7 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.js +17 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/authz.d.ts +3 -0
- package/vendor/gatekeeper/dist/server/routes/authz.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/authz.js +279 -0
- package/vendor/gatekeeper/dist/server/routes/authz.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.d.ts +13 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.js +249 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/grants.d.ts +3 -0
- package/vendor/gatekeeper/dist/server/routes/grants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/grants.js +112 -0
- package/vendor/gatekeeper/dist/server/routes/grants.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/groups.d.ts +3 -0
- package/vendor/gatekeeper/dist/server/routes/groups.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/groups.js +139 -0
- package/vendor/gatekeeper/dist/server/routes/groups.js.map +1 -0
- package/vendor/gatekeeper/package.json +49 -0
- package/vendor/server/bin/lamaste-server.js +204 -0
- package/vendor/server/package.json +31 -0
- package/vendor/server/src/commands/certs.js +224 -0
- package/vendor/server/src/commands/chisel.js +132 -0
- package/vendor/server/src/commands/logs.js +49 -0
- package/vendor/server/src/commands/plugins.js +321 -0
- package/vendor/server/src/commands/reset-admin.js +478 -0
- package/vendor/server/src/commands/restart.js +94 -0
- package/vendor/server/src/commands/sites.js +257 -0
- package/vendor/server/src/commands/status.js +158 -0
- package/vendor/server/src/commands/tunnels.js +365 -0
- package/vendor/server/src/commands/uninstall.js +326 -0
- package/vendor/server/src/config.js +38 -0
- package/vendor/server/src/exec.js +26 -0
- package/vendor/server/src/logger.js +39 -0
- package/vendor/server/src/ndjson.js +56 -0
- package/vendor/server/src/panel-api.js +85 -0
- package/vendor/server/src/state.js +45 -0
- package/vendor/server-ui/dist/assets/index-B0nWuUyL.js +257 -0
- package/vendor/server-ui/dist/assets/index-BqWWFlTU.css +1 -0
- package/vendor/server-ui/dist/index.html +13 -0
- package/vendor/serverd/package.json +44 -0
- package/vendor/serverd/src/boot.js +13 -0
- package/vendor/serverd/src/index.js +191 -0
- package/vendor/serverd/src/lib/app-error.js +14 -0
- package/vendor/serverd/src/lib/authelia.js +85 -0
- package/vendor/serverd/src/lib/certbot.js +74 -0
- package/vendor/serverd/src/lib/chisel-args.js +6 -0
- package/vendor/serverd/src/lib/chisel-reconcile.js +232 -0
- package/vendor/serverd/src/lib/chisel-runtime.js +46 -0
- package/vendor/serverd/src/lib/chisel-users.js +109 -0
- package/vendor/serverd/src/lib/chisel.js +81 -0
- package/vendor/serverd/src/lib/config.js +190 -0
- package/vendor/serverd/src/lib/constants.js +8 -0
- package/vendor/serverd/src/lib/csr-signing.js +331 -0
- package/vendor/serverd/src/lib/enrollment.js +302 -0
- package/vendor/serverd/src/lib/files.js +19 -0
- package/vendor/serverd/src/lib/gatekeeper-client.js +135 -0
- package/vendor/serverd/src/lib/invite-page.js +281 -0
- package/vendor/serverd/src/lib/ip-utils.js +79 -0
- package/vendor/serverd/src/lib/migrations/state/0001_enrollment_tokens.sql +17 -0
- package/vendor/serverd/src/lib/migrations/state/0002_tickets.sql +70 -0
- package/vendor/serverd/src/lib/migrations/state/0003_plugins.sql +15 -0
- package/vendor/serverd/src/lib/migrations/state/0004_agents.sql +19 -0
- package/vendor/serverd/src/lib/mtls.js +795 -0
- package/vendor/serverd/src/lib/nginx.js +1090 -0
- package/vendor/serverd/src/lib/pki-paths.js +41 -0
- package/vendor/serverd/src/lib/pki-sign.js +103 -0
- package/vendor/serverd/src/lib/plugins.js +538 -0
- package/vendor/serverd/src/lib/push-install.js +390 -0
- package/vendor/serverd/src/lib/revocation.js +112 -0
- package/vendor/serverd/src/lib/services.js +131 -0
- package/vendor/serverd/src/lib/session.js +151 -0
- package/vendor/serverd/src/lib/state-db.js +130 -0
- package/vendor/serverd/src/lib/state.js +140 -0
- package/vendor/serverd/src/lib/storage.js +63 -0
- package/vendor/serverd/src/lib/system-stats.js +58 -0
- package/vendor/serverd/src/lib/tickets.js +1556 -0
- package/vendor/serverd/src/lib/totp.js +76 -0
- package/vendor/serverd/src/lib/tunnel-deps.js +41 -0
- package/vendor/serverd/src/lib/user-access-session.js +142 -0
- package/vendor/serverd/src/lib/user-access.js +52 -0
- package/vendor/serverd/src/middleware/errors.js +63 -0
- package/vendor/serverd/src/middleware/mtls.js +120 -0
- package/vendor/serverd/src/middleware/onboarding-guard.js +30 -0
- package/vendor/serverd/src/middleware/role-guard.js +58 -0
- package/vendor/serverd/src/middleware/twofa-session.js +65 -0
- package/vendor/serverd/src/middleware/user-access-session.js +52 -0
- package/vendor/serverd/src/routes/enrollment.js +120 -0
- package/vendor/serverd/src/routes/health.js +22 -0
- package/vendor/serverd/src/routes/invite.js +163 -0
- package/vendor/serverd/src/routes/management/agents.js +182 -0
- package/vendor/serverd/src/routes/management/certs.js +911 -0
- package/vendor/serverd/src/routes/management/gatekeeper-proxy.js +160 -0
- package/vendor/serverd/src/routes/management/identity.js +107 -0
- package/vendor/serverd/src/routes/management/invitations.js +166 -0
- package/vendor/serverd/src/routes/management/logs.js +218 -0
- package/vendor/serverd/src/routes/management/plugins.js +560 -0
- package/vendor/serverd/src/routes/management/services.js +63 -0
- package/vendor/serverd/src/routes/management/settings.js +325 -0
- package/vendor/serverd/src/routes/management/sites.js +522 -0
- package/vendor/serverd/src/routes/management/storage.js +192 -0
- package/vendor/serverd/src/routes/management/system.js +201 -0
- package/vendor/serverd/src/routes/management/tickets.js +457 -0
- package/vendor/serverd/src/routes/management/tunnels.js +709 -0
- package/vendor/serverd/src/routes/management/users.js +377 -0
- package/vendor/serverd/src/routes/management.js +36 -0
- package/vendor/serverd/src/routes/onboarding/dns.js +101 -0
- package/vendor/serverd/src/routes/onboarding/domain.js +42 -0
- package/vendor/serverd/src/routes/onboarding/index.js +18 -0
- package/vendor/serverd/src/routes/onboarding/provision.js +327 -0
- package/vendor/serverd/src/routes/onboarding/status.js +12 -0
- package/vendor/serverd/src/routes/plugin-router.js +79 -0
- package/vendor/serverd/src/routes/user-access.js +389 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# System API
|
|
2
|
+
|
|
3
|
+
> Health checks and system resource monitoring for the Lamaste droplet.
|
|
4
|
+
|
|
5
|
+
## In Plain English
|
|
6
|
+
|
|
7
|
+
The system API provides two things: a simple health check that confirms the panel server is running, and a statistics endpoint that reports CPU usage, memory, disk space, and how long the server has been up. The management dashboard uses the stats endpoint to display real-time system resource information.
|
|
8
|
+
|
|
9
|
+
## Authentication
|
|
10
|
+
|
|
11
|
+
The **health endpoint** (`GET /api/health`) does **not** require mTLS authentication. It is publicly accessible to any client that can reach the panel server. This allows external monitoring tools and the provisioning process to verify the panel is running without needing a client certificate.
|
|
12
|
+
|
|
13
|
+
The **system stats endpoint** (`GET /api/system/stats`) requires a valid mTLS client certificate and a completed onboarding. Admin certificates and agent certificates with the `system:read` capability can access it. See the [API Overview](./overview.md) for details.
|
|
14
|
+
|
|
15
|
+
## Endpoints
|
|
16
|
+
|
|
17
|
+
### `GET /api/health`
|
|
18
|
+
|
|
19
|
+
A lightweight health check that confirms the panel server is running and responding to requests. Returns the current version number read from `package.json`.
|
|
20
|
+
|
|
21
|
+
This endpoint has no onboarding guard — it is accessible at any point in the server's lifecycle. It is useful for monitoring and for the provisioning step that verifies the panel is running.
|
|
22
|
+
|
|
23
|
+
**Request:**
|
|
24
|
+
|
|
25
|
+
No request body.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# No client certificate required
|
|
29
|
+
curl -sk https://203.0.113.42:9292/api/health | jq
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Response (200):**
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"status": "ok",
|
|
37
|
+
"version": "0.1.0"
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
| Field | Type | Description |
|
|
42
|
+
| --------- | -------- | ------------------------------------------------------------------ |
|
|
43
|
+
| `status` | `string` | Always `"ok"` if the server is responding |
|
|
44
|
+
| `version` | `string` | Panel server version from `package.json` (falls back to `"0.0.0"`) |
|
|
45
|
+
|
|
46
|
+
This endpoint has no error cases — if the server is running, it returns 200.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
### `GET /api/system/stats`
|
|
51
|
+
|
|
52
|
+
Returns current system resource usage. The data is gathered using the `systeminformation` library and cached for 2 seconds to prevent excessive system calls when multiple clients poll simultaneously.
|
|
53
|
+
|
|
54
|
+
**Request:**
|
|
55
|
+
|
|
56
|
+
No request body.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
curl -s --cert client.p12:password \
|
|
60
|
+
https://203.0.113.42:9292/api/system/stats | jq
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Response (200):**
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"cpu": {
|
|
68
|
+
"usage": 12.5,
|
|
69
|
+
"cores": 1
|
|
70
|
+
},
|
|
71
|
+
"memory": {
|
|
72
|
+
"total": 536870912,
|
|
73
|
+
"used": 268435456,
|
|
74
|
+
"free": 268435456
|
|
75
|
+
},
|
|
76
|
+
"disk": {
|
|
77
|
+
"total": 26843545600,
|
|
78
|
+
"used": 5368709120,
|
|
79
|
+
"free": 21474836480
|
|
80
|
+
},
|
|
81
|
+
"uptime": 432000
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
| Field | Type | Unit | Description |
|
|
86
|
+
| -------------- | -------- | ------- | ------------------------------------------------------- |
|
|
87
|
+
| `cpu.usage` | `number` | Percent | Current CPU utilization (0-100), rounded to one decimal |
|
|
88
|
+
| `cpu.cores` | `number` | Count | Number of CPU cores |
|
|
89
|
+
| `memory.total` | `number` | Bytes | Total physical RAM |
|
|
90
|
+
| `memory.used` | `number` | Bytes | Used RAM |
|
|
91
|
+
| `memory.free` | `number` | Bytes | Free RAM |
|
|
92
|
+
| `disk.total` | `number` | Bytes | Total disk space on root filesystem |
|
|
93
|
+
| `disk.used` | `number` | Bytes | Used disk space on root filesystem |
|
|
94
|
+
| `disk.free` | `number` | Bytes | Free disk space on root filesystem |
|
|
95
|
+
| `uptime` | `number` | Seconds | System uptime since last boot |
|
|
96
|
+
|
|
97
|
+
**Example values for a typical 512MB droplet:**
|
|
98
|
+
|
|
99
|
+
| Metric | Typical Value | Human-Readable |
|
|
100
|
+
| -------------- | ------------- | -------------- |
|
|
101
|
+
| `memory.total` | `536870912` | 512 MB |
|
|
102
|
+
| `memory.used` | `260046848` | ~248 MB |
|
|
103
|
+
| `disk.total` | `26843545600` | 25 GB |
|
|
104
|
+
| `cpu.cores` | `1` | 1 vCPU |
|
|
105
|
+
| `uptime` | `432000` | 5 days |
|
|
106
|
+
|
|
107
|
+
**Errors:**
|
|
108
|
+
|
|
109
|
+
| Status | Body | When |
|
|
110
|
+
| ------ | ---------------------------------------------------------------- | --------------------------------------- |
|
|
111
|
+
| 500 | `{"error":"Failed to retrieve system stats"}` | `systeminformation` library call failed |
|
|
112
|
+
| 503 | `{"error":"Onboarding not complete","onboardingStatus":"FRESH"}` | Onboarding has not finished |
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### `POST /api/system/update`
|
|
117
|
+
|
|
118
|
+
Triggers a background update of the Lamaste server to the specified version. The panel runs `sudo lamaste-priv self-update <version>`; the root-owned helper validates the version (`MAJOR.MINOR.PATCH`) and starts `npx @lamalibre/create-lamaste@<version> --yes` — the installer's redeploy path — in a transient systemd unit two seconds later. The transient unit keeps the update alive while the installer stops and restarts the panel; the delay lets this response reach the client first. The panel passes only the version: it never writes a script for root to run.
|
|
119
|
+
|
|
120
|
+
**Authentication:** Admin-only. Agent certificates cannot trigger updates.
|
|
121
|
+
|
|
122
|
+
**Request:**
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"version": "1.0.43"
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
| Field | Type | Required | Description |
|
|
131
|
+
| --------- | -------- | -------- | ---------------------------------------------- |
|
|
132
|
+
| `version` | `string` | Yes | Target version to update to (e.g., `"1.0.43"`) |
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
curl -s --cert client.p12:password \
|
|
136
|
+
-X POST -H 'Content-Type: application/json' \
|
|
137
|
+
-d '{"version":"1.0.43"}' \
|
|
138
|
+
https://203.0.113.42:9292/api/system/update | jq
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Response (202):**
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"ok": true,
|
|
146
|
+
"message": "Update to create-lamaste@1.0.43 initiated. The panel will restart shortly."
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
The 202 status indicates the helper has started the update unit (`lamalibre-lamaste-update-<random>`) and the update is running in the background. The panel server will restart as part of the update process, so the client should expect the connection to drop and poll `/api/health` to detect when the new version is running.
|
|
151
|
+
|
|
152
|
+
**Errors:**
|
|
153
|
+
|
|
154
|
+
| Status | Body | When |
|
|
155
|
+
| ------ | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
156
|
+
| 400 | `{"error":"Validation failed","details":{"issues":[...]}}` | Missing or invalid `version` field |
|
|
157
|
+
| 403 | `{"error":"Insufficient certificate scope"}` | Non-admin certificate |
|
|
158
|
+
| 500 | `{"error":"Could not start the update: <helper error>"}` | `lamaste-priv` could not start the update unit (e.g. helper missing — re-run `create-lamaste`) |
|
|
159
|
+
| 503 | `{"error":"Onboarding not complete","onboardingStatus":"FRESH"}` | Onboarding has not finished |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### `POST /api/agents/plugins/report`
|
|
164
|
+
|
|
165
|
+
Accepts a plugin capability report from an agent. Called by `lamaste-agent update` to inform the server about plugins the agent has enabled. The server merges the reported capabilities into the valid capabilities set so they can be assigned to agents.
|
|
166
|
+
|
|
167
|
+
**Authentication:** mTLS (admin or agent certificate).
|
|
168
|
+
|
|
169
|
+
**Request:**
|
|
170
|
+
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"plugins": [
|
|
174
|
+
{
|
|
175
|
+
"name": "sync",
|
|
176
|
+
"version": "0.1.0",
|
|
177
|
+
"capabilities": ["sync:connect"]
|
|
178
|
+
}
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
| Field | Type | Required | Description |
|
|
184
|
+
| ------------------------ | -------- | -------- | ---------------------------------- |
|
|
185
|
+
| `plugins` | `array` | Yes | List of enabled plugins |
|
|
186
|
+
| `plugins[].name` | `string` | Yes | Plugin name from manifest |
|
|
187
|
+
| `plugins[].version` | `string` | Yes | Plugin version |
|
|
188
|
+
| `plugins[].capabilities` | `array` | No | Capability strings (defaults `[]`) |
|
|
189
|
+
|
|
190
|
+
**Response (200):**
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"ok": true,
|
|
195
|
+
"merged": 1
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
| Field | Type | Description |
|
|
200
|
+
| -------- | --------- | ------------------------------------ |
|
|
201
|
+
| `ok` | `boolean` | Always `true` on success |
|
|
202
|
+
| `merged` | `number` | Number of unique capabilities merged |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
### Caching Behavior
|
|
207
|
+
|
|
208
|
+
The stats response is cached for 2 seconds. Multiple requests within the cache window return the same data without querying the operating system again. This prevents performance degradation when the dashboard polls frequently or multiple browser tabs are open.
|
|
209
|
+
|
|
210
|
+
## Quick Reference
|
|
211
|
+
|
|
212
|
+
| Method | Path | Auth | Description |
|
|
213
|
+
| ------ | ---------------------------- | ---------------------------------------- | -------------------------------- |
|
|
214
|
+
| GET | `/api/health` | None (no mTLS) | Health check with version |
|
|
215
|
+
| GET | `/api/system/stats` | mTLS (admin or agent with `system:read`) | CPU, memory, disk, uptime |
|
|
216
|
+
| POST | `/api/system/update` | mTLS (admin only) | Trigger background update |
|
|
217
|
+
| POST | `/api/agents/plugins/report` | mTLS (admin or agent) | Report agent plugin capabilities |
|
|
218
|
+
|
|
219
|
+
### Response Shapes
|
|
220
|
+
|
|
221
|
+
**Health:**
|
|
222
|
+
|
|
223
|
+
```json
|
|
224
|
+
{ "status": "ok", "version": "0.1.0" }
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Stats:**
|
|
228
|
+
|
|
229
|
+
```json
|
|
230
|
+
{
|
|
231
|
+
"cpu": { "usage": 12.5, "cores": 1 },
|
|
232
|
+
"memory": { "total": 536870912, "used": 268435456, "free": 268435456 },
|
|
233
|
+
"disk": { "total": 26843545600, "used": 5368709120, "free": 21474836480 },
|
|
234
|
+
"uptime": 432000
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Converting Bytes to Human-Readable
|
|
239
|
+
|
|
240
|
+
The API returns all size values in raw bytes. To convert:
|
|
241
|
+
|
|
242
|
+
| Bytes | Formula | Result |
|
|
243
|
+
| ------------- | ---------------------- | ------ |
|
|
244
|
+
| `536870912` | `/ 1024 / 1024` | 512 MB |
|
|
245
|
+
| `26843545600` | `/ 1024 / 1024 / 1024` | 25 GB |
|
|
246
|
+
|
|
247
|
+
### curl Cheat Sheet
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Health check (no mTLS required)
|
|
251
|
+
curl -sk https://203.0.113.42:9292/api/health | jq
|
|
252
|
+
|
|
253
|
+
# System stats
|
|
254
|
+
curl -s --cert client.p12:password \
|
|
255
|
+
https://203.0.113.42:9292/api/system/stats | jq
|
|
256
|
+
|
|
257
|
+
# Just CPU usage
|
|
258
|
+
curl -s --cert client.p12:password \
|
|
259
|
+
https://203.0.113.42:9292/api/system/stats | jq '.cpu.usage'
|
|
260
|
+
|
|
261
|
+
# Memory in MB
|
|
262
|
+
curl -s --cert client.p12:password \
|
|
263
|
+
https://203.0.113.42:9292/api/system/stats | jq '{
|
|
264
|
+
total_mb: (.memory.total / 1048576 | round),
|
|
265
|
+
used_mb: (.memory.used / 1048576 | round),
|
|
266
|
+
free_mb: (.memory.free / 1048576 | round)
|
|
267
|
+
}'
|
|
268
|
+
```
|