@panguard-ai/manager 0.2.0 → 0.2.1
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 +1 -1
- package/dist/agent-registry.d.ts.map +1 -1
- package/dist/agent-registry.js +1 -0
- package/dist/agent-registry.js.map +1 -1
- package/dist/dashboard-relay.d.ts +80 -0
- package/dist/dashboard-relay.d.ts.map +1 -0
- package/dist/dashboard-relay.js +465 -0
- package/dist/dashboard-relay.js.map +1 -0
- package/dist/db.d.ts +78 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +339 -0
- package/dist/db.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/manager.d.ts +40 -6
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +123 -10
- package/dist/manager.js.map +1 -1
- package/dist/server.d.ts +76 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +468 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +14 -2
package/dist/server.js
ADDED
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manager HTTP API Server
|
|
3
|
+
* Manager HTTP API 伺服器
|
|
4
|
+
*
|
|
5
|
+
* Exposes the Manager orchestrator as a REST API for Guard agents
|
|
6
|
+
* and the Admin dashboard.
|
|
7
|
+
*
|
|
8
|
+
* Endpoints:
|
|
9
|
+
* - POST /api/agents/register Register a new agent
|
|
10
|
+
* - POST /api/agents/:id/heartbeat Agent heartbeat
|
|
11
|
+
* - POST /api/agents/:id/events Submit threat report
|
|
12
|
+
* - DELETE /api/agents/:id Deregister an agent
|
|
13
|
+
* - GET /api/agents List all agents
|
|
14
|
+
* - GET /api/agents/:id Get single agent
|
|
15
|
+
* - GET /api/overview Dashboard overview
|
|
16
|
+
* - GET /api/threats Recent threats
|
|
17
|
+
* - GET /api/threats/summary Threat summary
|
|
18
|
+
* - POST /api/policy Create policy
|
|
19
|
+
* - GET /api/policy/active Get active policy
|
|
20
|
+
* - GET /api/policy/agent/:id Get policy for agent
|
|
21
|
+
* - GET /api/events/stream SSE stream for real-time updates
|
|
22
|
+
* - GET /health Health check
|
|
23
|
+
*
|
|
24
|
+
* @module @panguard-ai/manager/server
|
|
25
|
+
*/
|
|
26
|
+
import { createServer } from 'node:http';
|
|
27
|
+
import { createHash, timingSafeEqual } from 'node:crypto';
|
|
28
|
+
import { createLogger } from '@panguard-ai/core';
|
|
29
|
+
import { Manager } from './manager.js';
|
|
30
|
+
const logger = createLogger('panguard-manager:server');
|
|
31
|
+
/**
|
|
32
|
+
* Manager HTTP API Server
|
|
33
|
+
* Wraps the Manager class with a REST API using raw node:http.
|
|
34
|
+
*/
|
|
35
|
+
export class ManagerServer {
|
|
36
|
+
server = null;
|
|
37
|
+
manager;
|
|
38
|
+
config;
|
|
39
|
+
rateLimits = new Map();
|
|
40
|
+
hashedAuthToken;
|
|
41
|
+
sseClients = new Set();
|
|
42
|
+
constructor(config) {
|
|
43
|
+
this.config = config;
|
|
44
|
+
this.manager = new Manager(config);
|
|
45
|
+
// In production, require an auth token to prevent unauthenticated access
|
|
46
|
+
if (process.env['NODE_ENV'] === 'production' && !config.authToken) {
|
|
47
|
+
throw new Error('MANAGER_AUTH_TOKEN is required in production. ' +
|
|
48
|
+
'Generate one with: openssl rand -hex 32');
|
|
49
|
+
}
|
|
50
|
+
// Pre-hash auth token for constant-time comparison
|
|
51
|
+
this.hashedAuthToken = config.authToken
|
|
52
|
+
? createHash('sha256').update(config.authToken).digest()
|
|
53
|
+
: Buffer.alloc(0);
|
|
54
|
+
}
|
|
55
|
+
/** Get the underlying Manager instance */
|
|
56
|
+
getManager() {
|
|
57
|
+
return this.manager;
|
|
58
|
+
}
|
|
59
|
+
/** Start the HTTP server and Manager service */
|
|
60
|
+
async start() {
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
this.server = createServer((req, res) => {
|
|
63
|
+
void this.handleRequest(req, res);
|
|
64
|
+
});
|
|
65
|
+
this.server.once('error', (err) => {
|
|
66
|
+
reject(err);
|
|
67
|
+
});
|
|
68
|
+
this.server.listen(this.config.port, () => {
|
|
69
|
+
this.manager.start();
|
|
70
|
+
logger.info(`Manager server started on port ${this.config.port} / ` +
|
|
71
|
+
`Manager 伺服器已啟動於埠 ${this.config.port}`);
|
|
72
|
+
resolve();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/** Stop the server and Manager service gracefully */
|
|
77
|
+
async stop() {
|
|
78
|
+
// Close all SSE connections / 關閉所有 SSE 連線
|
|
79
|
+
for (const client of this.sseClients) {
|
|
80
|
+
client.end();
|
|
81
|
+
}
|
|
82
|
+
this.sseClients.clear();
|
|
83
|
+
this.manager.stop();
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
if (this.server) {
|
|
86
|
+
this.server.close(() => resolve());
|
|
87
|
+
setTimeout(() => resolve(), 10_000);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
resolve();
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// ===== Request Handling / 請求處理 =====
|
|
95
|
+
async handleRequest(req, res) {
|
|
96
|
+
// Security headers
|
|
97
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
98
|
+
res.setHeader('X-Frame-Options', 'DENY');
|
|
99
|
+
res.setHeader('X-XSS-Protection', '0');
|
|
100
|
+
res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
|
|
101
|
+
res.setHeader('Content-Type', 'application/json');
|
|
102
|
+
if (process.env['NODE_ENV'] === 'production') {
|
|
103
|
+
res.setHeader('Strict-Transport-Security', 'max-age=63072000; includeSubDomains; preload');
|
|
104
|
+
}
|
|
105
|
+
// CORS
|
|
106
|
+
const corsEnv = process.env['CORS_ALLOWED_ORIGINS'] ?? '';
|
|
107
|
+
const allowedOrigins = corsEnv ? corsEnv.split(',').map((o) => o.trim()) : [];
|
|
108
|
+
const origin = req.headers.origin ?? '';
|
|
109
|
+
if (allowedOrigins.includes('*') && process.env['NODE_ENV'] !== 'production') {
|
|
110
|
+
res.setHeader('Access-Control-Allow-Origin', origin || '*');
|
|
111
|
+
}
|
|
112
|
+
else if (origin && allowedOrigins.includes(origin)) {
|
|
113
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
114
|
+
}
|
|
115
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
|
|
116
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
117
|
+
if (req.method === 'OPTIONS') {
|
|
118
|
+
res.writeHead(204);
|
|
119
|
+
res.end();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const clientIP = req.socket.remoteAddress ?? 'unknown';
|
|
123
|
+
// Rate limiting
|
|
124
|
+
if (!this.checkRateLimit(clientIP)) {
|
|
125
|
+
this.sendJson(res, 429, { ok: false, error: 'Rate limit exceeded' });
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const url = req.url ?? '/';
|
|
129
|
+
const pathname = url.split('?')[0] ?? '/';
|
|
130
|
+
// Health check (no auth required)
|
|
131
|
+
if (pathname === '/health') {
|
|
132
|
+
this.sendJson(res, 200, {
|
|
133
|
+
ok: true,
|
|
134
|
+
data: {
|
|
135
|
+
status: 'healthy',
|
|
136
|
+
uptime: process.uptime(),
|
|
137
|
+
agents: this.manager.getAgentCount(),
|
|
138
|
+
running: this.manager.isRunning(),
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Auth check for all other endpoints
|
|
144
|
+
if (!this.verifyAuth(req)) {
|
|
145
|
+
this.sendJson(res, 401, { ok: false, error: 'Unauthorized' });
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
// Content-Type check for POST requests
|
|
149
|
+
if (req.method === 'POST') {
|
|
150
|
+
const contentType = req.headers['content-type'] ?? '';
|
|
151
|
+
if (!contentType.includes('application/json')) {
|
|
152
|
+
this.sendJson(res, 415, { ok: false, error: 'Content-Type must be application/json' });
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
await this.route(req, res, pathname);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
const message = err instanceof Error ? err.message : 'Internal server error';
|
|
161
|
+
logger.error(`Request error: ${message}`);
|
|
162
|
+
this.sendJson(res, 500, { ok: false, error: message });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/** Route requests to handlers */
|
|
166
|
+
async route(req, res, pathname) {
|
|
167
|
+
const method = req.method ?? 'GET';
|
|
168
|
+
// POST /api/agents/register
|
|
169
|
+
if (pathname === '/api/agents/register' && method === 'POST') {
|
|
170
|
+
await this.handleRegister(req, res);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// POST /api/agents/:id/heartbeat
|
|
174
|
+
const heartbeatMatch = pathname.match(/^\/api\/agents\/([^/]+)\/heartbeat$/);
|
|
175
|
+
if (heartbeatMatch && method === 'POST') {
|
|
176
|
+
await this.handleHeartbeat(req, res, heartbeatMatch[1]);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// POST /api/agents/:id/events
|
|
180
|
+
const eventsMatch = pathname.match(/^\/api\/agents\/([^/]+)\/events$/);
|
|
181
|
+
if (eventsMatch && method === 'POST') {
|
|
182
|
+
await this.handleEvents(req, res, eventsMatch[1]);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// DELETE /api/agents/:id
|
|
186
|
+
const deleteMatch = pathname.match(/^\/api\/agents\/([^/]+)$/);
|
|
187
|
+
if (deleteMatch && method === 'DELETE') {
|
|
188
|
+
this.handleDeregister(res, deleteMatch[1]);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// GET /api/agents/:id
|
|
192
|
+
const agentMatch = pathname.match(/^\/api\/agents\/([^/]+)$/);
|
|
193
|
+
if (agentMatch && method === 'GET') {
|
|
194
|
+
this.handleGetAgent(res, agentMatch[1]);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// GET /api/agents
|
|
198
|
+
if (pathname === '/api/agents' && method === 'GET') {
|
|
199
|
+
this.handleListAgents(req, res);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// GET /api/overview
|
|
203
|
+
if (pathname === '/api/overview' && method === 'GET') {
|
|
204
|
+
this.handleOverview(req, res);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// GET /api/threats/summary
|
|
208
|
+
if (pathname === '/api/threats/summary' && method === 'GET') {
|
|
209
|
+
this.handleThreatSummary(res);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
// GET /api/threats
|
|
213
|
+
if (pathname === '/api/threats' && method === 'GET') {
|
|
214
|
+
this.handleRecentThreats(req, res);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
// POST /api/policy
|
|
218
|
+
if (pathname === '/api/policy' && method === 'POST') {
|
|
219
|
+
await this.handleCreatePolicy(req, res);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// GET /api/policy/active
|
|
223
|
+
if (pathname === '/api/policy/active' && method === 'GET') {
|
|
224
|
+
this.handleActivePolicy(res);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
// GET /api/policy/agent/:id
|
|
228
|
+
const policyAgentMatch = pathname.match(/^\/api\/policy\/agent\/([^/]+)$/);
|
|
229
|
+
if (policyAgentMatch && method === 'GET') {
|
|
230
|
+
this.handlePolicyForAgent(res, policyAgentMatch[1]);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
// GET /api/events/stream (SSE)
|
|
234
|
+
if (pathname === '/api/events/stream' && method === 'GET') {
|
|
235
|
+
this.handleSSEStream(res);
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
// 404
|
|
239
|
+
this.sendJson(res, 404, { ok: false, error: 'Not found' });
|
|
240
|
+
}
|
|
241
|
+
// ===== Route Handlers / 路由處理器 =====
|
|
242
|
+
async handleRegister(req, res) {
|
|
243
|
+
const body = await this.readBody(req);
|
|
244
|
+
if (!body || !body.hostname || !body.os || !body.arch || !body.version) {
|
|
245
|
+
this.sendJson(res, 400, {
|
|
246
|
+
ok: false,
|
|
247
|
+
error: 'Missing required fields: hostname, os, arch, version',
|
|
248
|
+
});
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
try {
|
|
252
|
+
const registration = this.manager.handleRegistration(body);
|
|
253
|
+
this.sendJson(res, 201, { ok: true, data: registration });
|
|
254
|
+
this.broadcastSSE('agent_online', {
|
|
255
|
+
agentId: registration.agentId,
|
|
256
|
+
hostname: registration.hostname,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
const message = err instanceof Error ? err.message : 'Registration failed';
|
|
261
|
+
this.sendJson(res, 409, { ok: false, error: message });
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
async handleHeartbeat(req, res, agentId) {
|
|
265
|
+
const body = await this.readBody(req);
|
|
266
|
+
if (!body) {
|
|
267
|
+
this.sendJson(res, 400, { ok: false, error: 'Invalid JSON body' });
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const heartbeat = { ...body, agentId };
|
|
271
|
+
const updated = this.manager.handleHeartbeat(heartbeat);
|
|
272
|
+
if (!updated) {
|
|
273
|
+
this.sendJson(res, 404, { ok: false, error: `Agent ${agentId} not found` });
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
this.sendJson(res, 200, { ok: true, data: updated });
|
|
277
|
+
}
|
|
278
|
+
async handleEvents(req, res, agentId) {
|
|
279
|
+
const body = await this.readBody(req);
|
|
280
|
+
if (!body || !Array.isArray(body.threats)) {
|
|
281
|
+
this.sendJson(res, 400, { ok: false, error: 'Invalid body: threats array required' });
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const report = { ...body, agentId };
|
|
285
|
+
const aggregated = this.manager.handleThreatReport(report);
|
|
286
|
+
this.sendJson(res, 200, {
|
|
287
|
+
ok: true,
|
|
288
|
+
data: { accepted: aggregated.length, threats: aggregated },
|
|
289
|
+
});
|
|
290
|
+
if (aggregated.length > 0) {
|
|
291
|
+
this.broadcastSSE('threats_reported', {
|
|
292
|
+
agentId,
|
|
293
|
+
count: aggregated.length,
|
|
294
|
+
threats: aggregated.map((t) => ({
|
|
295
|
+
id: t.id,
|
|
296
|
+
severity: t.originalThreat.verdict.conclusion,
|
|
297
|
+
sourceHostname: t.sourceHostname,
|
|
298
|
+
})),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
handleDeregister(res, agentId) {
|
|
303
|
+
const removed = this.manager.handleDeregistration(agentId);
|
|
304
|
+
if (!removed) {
|
|
305
|
+
this.sendJson(res, 404, { ok: false, error: `Agent ${agentId} not found` });
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
this.sendJson(res, 200, { ok: true, data: { agentId, removed: true } });
|
|
309
|
+
this.broadcastSSE('agent_offline', { agentId });
|
|
310
|
+
}
|
|
311
|
+
handleGetAgent(res, agentId) {
|
|
312
|
+
const agent = this.manager.getAgent(agentId);
|
|
313
|
+
if (!agent) {
|
|
314
|
+
this.sendJson(res, 404, { ok: false, error: `Agent ${agentId} not found` });
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
this.sendJson(res, 200, { ok: true, data: agent });
|
|
318
|
+
}
|
|
319
|
+
handleListAgents(_req, res) {
|
|
320
|
+
const overview = this.manager.getOverview();
|
|
321
|
+
this.sendJson(res, 200, { ok: true, data: overview.agents });
|
|
322
|
+
}
|
|
323
|
+
handleOverview(_req, res) {
|
|
324
|
+
const overview = this.manager.getOverview();
|
|
325
|
+
this.sendJson(res, 200, { ok: true, data: overview });
|
|
326
|
+
}
|
|
327
|
+
handleThreatSummary(res) {
|
|
328
|
+
const summary = this.manager.getThreatSummary();
|
|
329
|
+
this.sendJson(res, 200, { ok: true, data: summary });
|
|
330
|
+
}
|
|
331
|
+
handleRecentThreats(req, res) {
|
|
332
|
+
const url = req.url ?? '/';
|
|
333
|
+
const params = new URL(url, 'http://localhost').searchParams;
|
|
334
|
+
const sinceParam = params.get('since');
|
|
335
|
+
const since = sinceParam ? new Date(sinceParam) : new Date(Date.now() - 3_600_000); // default 1h
|
|
336
|
+
const threats = this.manager.getRecentThreats(since);
|
|
337
|
+
this.sendJson(res, 200, { ok: true, data: threats });
|
|
338
|
+
}
|
|
339
|
+
async handleCreatePolicy(req, res) {
|
|
340
|
+
const body = await this.readBody(req);
|
|
341
|
+
if (!body || !Array.isArray(body.rules)) {
|
|
342
|
+
this.sendJson(res, 400, { ok: false, error: 'Invalid body: rules array required' });
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
const policy = await this.manager.createPolicy(body.rules, body.broadcast ?? true);
|
|
346
|
+
this.sendJson(res, 201, { ok: true, data: policy });
|
|
347
|
+
this.broadcastSSE('policy_created', {
|
|
348
|
+
policyId: policy.policyId,
|
|
349
|
+
version: policy.version,
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
handleActivePolicy(res) {
|
|
353
|
+
const policy = this.manager.getActivePolicy();
|
|
354
|
+
if (!policy) {
|
|
355
|
+
this.sendJson(res, 200, { ok: true, data: null });
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
this.sendJson(res, 200, { ok: true, data: policy });
|
|
359
|
+
}
|
|
360
|
+
handlePolicyForAgent(res, agentId) {
|
|
361
|
+
const policy = this.manager.getPolicyForAgent(agentId);
|
|
362
|
+
this.sendJson(res, 200, { ok: true, data: policy });
|
|
363
|
+
}
|
|
364
|
+
// ===== SSE / 伺服器推送事件 =====
|
|
365
|
+
/** Handle a new SSE stream connection / 處理新的 SSE 串流連線 */
|
|
366
|
+
handleSSEStream(res) {
|
|
367
|
+
res.writeHead(200, {
|
|
368
|
+
'Content-Type': 'text/event-stream',
|
|
369
|
+
'Cache-Control': 'no-cache',
|
|
370
|
+
'Connection': 'keep-alive',
|
|
371
|
+
'X-Accel-Buffering': 'no',
|
|
372
|
+
});
|
|
373
|
+
// Send initial connection event / 發送初始連線事件
|
|
374
|
+
this.sendSSE(res, 'connected', { timestamp: new Date().toISOString() });
|
|
375
|
+
// Keep-alive every 30 seconds to prevent proxy timeouts / 每 30 秒保持連線
|
|
376
|
+
const keepAlive = setInterval(() => {
|
|
377
|
+
res.write(':keep-alive\n\n');
|
|
378
|
+
}, 30_000);
|
|
379
|
+
// Track client / 追蹤客戶端
|
|
380
|
+
this.sseClients.add(res);
|
|
381
|
+
// Clean up on disconnect / 斷線時清理
|
|
382
|
+
res.on('close', () => {
|
|
383
|
+
clearInterval(keepAlive);
|
|
384
|
+
this.sseClients.delete(res);
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
/** Broadcast an event to all connected SSE clients / 向所有已連線的 SSE 客戶端廣播事件 */
|
|
388
|
+
broadcastSSE(eventType, data) {
|
|
389
|
+
const payload = `data: ${JSON.stringify({ type: eventType, data, timestamp: new Date().toISOString() })}\n\n`;
|
|
390
|
+
for (const client of this.sseClients) {
|
|
391
|
+
try {
|
|
392
|
+
client.write(payload);
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
this.sseClients.delete(client);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/** Send an SSE event to a single client / 向單個客戶端發送 SSE 事件 */
|
|
400
|
+
sendSSE(res, event, data) {
|
|
401
|
+
res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
|
|
402
|
+
}
|
|
403
|
+
// ===== Utilities / 工具方法 =====
|
|
404
|
+
/** Read and parse JSON body from request */
|
|
405
|
+
readBody(req) {
|
|
406
|
+
return new Promise((resolve) => {
|
|
407
|
+
const chunks = [];
|
|
408
|
+
let size = 0;
|
|
409
|
+
const maxSize = 1_048_576; // 1 MB
|
|
410
|
+
req.on('data', (chunk) => {
|
|
411
|
+
size += chunk.length;
|
|
412
|
+
if (size > maxSize) {
|
|
413
|
+
req.destroy();
|
|
414
|
+
resolve(null);
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
chunks.push(chunk);
|
|
418
|
+
});
|
|
419
|
+
req.on('end', () => {
|
|
420
|
+
try {
|
|
421
|
+
const raw = Buffer.concat(chunks).toString('utf8');
|
|
422
|
+
resolve(JSON.parse(raw));
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
resolve(null);
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
req.on('error', () => resolve(null));
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
/** Send JSON response */
|
|
432
|
+
sendJson(res, status, body) {
|
|
433
|
+
const json = JSON.stringify(body);
|
|
434
|
+
res.writeHead(status, { 'Content-Type': 'application/json' });
|
|
435
|
+
res.end(json);
|
|
436
|
+
}
|
|
437
|
+
/** Verify Bearer token authentication */
|
|
438
|
+
verifyAuth(req) {
|
|
439
|
+
// If no auth token configured, allow all (dev mode)
|
|
440
|
+
if (this.hashedAuthToken.length === 0)
|
|
441
|
+
return true;
|
|
442
|
+
const authHeader = req.headers.authorization ?? '';
|
|
443
|
+
const token = authHeader.startsWith('Bearer ') ? authHeader.slice(7) : '';
|
|
444
|
+
if (!token)
|
|
445
|
+
return false;
|
|
446
|
+
const tokenHash = createHash('sha256').update(token).digest();
|
|
447
|
+
try {
|
|
448
|
+
return timingSafeEqual(tokenHash, this.hashedAuthToken);
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
return false;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/** Simple in-memory rate limiter */
|
|
455
|
+
checkRateLimit(key, maxRequests = 60) {
|
|
456
|
+
const now = Date.now();
|
|
457
|
+
const windowMs = 60_000;
|
|
458
|
+
const entry = this.rateLimits.get(key);
|
|
459
|
+
if (!entry || now > entry.resetAt) {
|
|
460
|
+
this.rateLimits.set(key, { count: 1, resetAt: now + windowMs });
|
|
461
|
+
return true;
|
|
462
|
+
}
|
|
463
|
+
const newCount = entry.count + 1;
|
|
464
|
+
this.rateLimits.set(key, { ...entry, count: newCount });
|
|
465
|
+
return newCount <= maxRequests;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -17,15 +17,18 @@ export interface AgentPlatformInfo {
|
|
|
17
17
|
export interface AgentRegistration {
|
|
18
18
|
readonly agentId: string;
|
|
19
19
|
readonly hostname: string;
|
|
20
|
+
readonly endpoint: string;
|
|
20
21
|
readonly platform: AgentPlatformInfo;
|
|
21
22
|
readonly version: string;
|
|
22
23
|
readonly registeredAt: string;
|
|
23
24
|
readonly lastHeartbeat: string;
|
|
24
25
|
readonly status: AgentStatus;
|
|
26
|
+
readonly organizationId?: string;
|
|
25
27
|
}
|
|
26
28
|
/** Incoming registration request from a Guard agent / 來自 Guard 代理的登錄請求 */
|
|
27
29
|
export interface AgentRegistrationRequest {
|
|
28
30
|
readonly hostname: string;
|
|
31
|
+
readonly endpoint: string;
|
|
29
32
|
readonly os: string;
|
|
30
33
|
readonly arch: string;
|
|
31
34
|
readonly version: string;
|
|
@@ -66,6 +69,7 @@ export interface AggregatedThreat {
|
|
|
66
69
|
readonly sourceHostname: string;
|
|
67
70
|
readonly receivedAt: string;
|
|
68
71
|
readonly correlatedWith: readonly string[];
|
|
72
|
+
readonly organizationId?: string;
|
|
69
73
|
}
|
|
70
74
|
/** Correlation match indicating related threats / 表示相關威脅的關聯比對 */
|
|
71
75
|
export interface CorrelationMatch {
|
|
@@ -100,6 +104,7 @@ export interface PolicyUpdate {
|
|
|
100
104
|
readonly rules: readonly PolicyRule[];
|
|
101
105
|
readonly updatedAt: string;
|
|
102
106
|
readonly appliedTo: readonly string[];
|
|
107
|
+
readonly organizationId?: string;
|
|
103
108
|
}
|
|
104
109
|
/** Manager server configuration / Manager 伺服器配置 */
|
|
105
110
|
export interface ManagerConfig {
|
|
@@ -132,10 +137,19 @@ export interface ManagerOverview {
|
|
|
132
137
|
readonly activePolicyVersion: number;
|
|
133
138
|
readonly uptimeMs: number;
|
|
134
139
|
}
|
|
140
|
+
/** Per-agent policy push result / 單一代理策略推送結果 */
|
|
141
|
+
export interface AgentPushResult {
|
|
142
|
+
readonly agentId: string;
|
|
143
|
+
readonly success: boolean;
|
|
144
|
+
readonly error?: string;
|
|
145
|
+
}
|
|
135
146
|
/** Policy broadcast result / 策略廣播結果 */
|
|
136
147
|
export interface PolicyBroadcastResult {
|
|
137
148
|
readonly policyId: string;
|
|
138
149
|
readonly targetAgents: readonly string[];
|
|
139
150
|
readonly queuedAt: string;
|
|
151
|
+
readonly agentResults?: readonly AgentPushResult[];
|
|
152
|
+
readonly successCount?: number;
|
|
153
|
+
readonly failureCount?: number;
|
|
140
154
|
}
|
|
141
155
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIjE,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzD,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0IH,oDAAoD;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,EAAE;IACb,mBAAmB,EAAE,MAAM;IAC3B,kBAAkB,EAAE,MAAM;IAC1B,SAAS,EAAE,GAAG;IACd,mBAAmB,EAAE,OAAO,EAAE,YAAY;IAC1C,iBAAiB,EAAE,UAAU,EAAE,WAAW;CAC3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,21 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@panguard-ai/manager",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"license": "MIT",
|
|
4
5
|
"type": "module",
|
|
5
6
|
"description": "Manager node for distributed Guard agent orchestration / Guard 代理分散式架構管理節點",
|
|
6
7
|
"main": "./dist/index.js",
|
|
7
8
|
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
8
15
|
"publishConfig": {
|
|
9
16
|
"access": "public"
|
|
10
17
|
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18.0.0"
|
|
20
|
+
},
|
|
11
21
|
"files": [
|
|
12
22
|
"dist",
|
|
13
23
|
"package.json"
|
|
14
24
|
],
|
|
15
25
|
"dependencies": {
|
|
16
|
-
"
|
|
26
|
+
"better-sqlite3": "^11.0.0",
|
|
27
|
+
"@panguard-ai/core": "0.3.2"
|
|
17
28
|
},
|
|
18
29
|
"devDependencies": {
|
|
30
|
+
"@types/better-sqlite3": "^7.6.8",
|
|
19
31
|
"@types/node": "^22.14.0",
|
|
20
32
|
"typescript": "~5.7.3"
|
|
21
33
|
},
|