@panguard-ai/panguard 1.4.15 → 1.4.16

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.
Files changed (40) hide show
  1. package/dist/cli/commands/scan.d.ts.map +1 -1
  2. package/dist/cli/commands/scan.js +56 -1
  3. package/dist/cli/commands/scan.js.map +1 -1
  4. package/dist/cli/commands/up.d.ts.map +1 -1
  5. package/dist/cli/commands/up.js +135 -23
  6. package/dist/cli/commands/up.js.map +1 -1
  7. package/dist/cli/index.js +0 -0
  8. package/package.json +1 -1
  9. package/dist/cli/commands/admin.d.ts +0 -9
  10. package/dist/cli/commands/admin.d.ts.map +0 -1
  11. package/dist/cli/commands/admin.js +0 -130
  12. package/dist/cli/commands/admin.js.map +0 -1
  13. package/dist/cli/commands/manager.d.ts +0 -7
  14. package/dist/cli/commands/manager.d.ts.map +0 -1
  15. package/dist/cli/commands/manager.js +0 -113
  16. package/dist/cli/commands/manager.js.map +0 -1
  17. package/dist/cli/commands/serve-admin.d.ts +0 -11
  18. package/dist/cli/commands/serve-admin.d.ts.map +0 -1
  19. package/dist/cli/commands/serve-admin.js +0 -302
  20. package/dist/cli/commands/serve-admin.js.map +0 -1
  21. package/dist/cli/commands/serve-auth.d.ts +0 -11
  22. package/dist/cli/commands/serve-auth.d.ts.map +0 -1
  23. package/dist/cli/commands/serve-auth.js +0 -119
  24. package/dist/cli/commands/serve-auth.js.map +0 -1
  25. package/dist/cli/commands/serve-core.d.ts +0 -25
  26. package/dist/cli/commands/serve-core.d.ts.map +0 -1
  27. package/dist/cli/commands/serve-core.js +0 -215
  28. package/dist/cli/commands/serve-core.js.map +0 -1
  29. package/dist/cli/commands/serve-tc.d.ts +0 -12
  30. package/dist/cli/commands/serve-tc.d.ts.map +0 -1
  31. package/dist/cli/commands/serve-tc.js +0 -287
  32. package/dist/cli/commands/serve-tc.js.map +0 -1
  33. package/dist/cli/commands/serve-types.d.ts +0 -38
  34. package/dist/cli/commands/serve-types.d.ts.map +0 -1
  35. package/dist/cli/commands/serve-types.js +0 -108
  36. package/dist/cli/commands/serve-types.js.map +0 -1
  37. package/dist/cli/commands/serve.d.ts +0 -14
  38. package/dist/cli/commands/serve.d.ts.map +0 -1
  39. package/dist/cli/commands/serve.js +0 -383
  40. package/dist/cli/commands/serve.js.map +0 -1
@@ -1,113 +0,0 @@
1
- /**
2
- * panguard manager - Manager server for distributed agent architecture
3
- * panguard manager - 分散式 Agent 架構的 Manager 伺服器
4
- */
5
- import { Command } from 'commander';
6
- import { c, symbols } from '@panguard-ai/core';
7
- export function managerCommand() {
8
- const cmd = new Command('manager').description('Manager server for distributed agents / 分散式 Agent 管理伺服器');
9
- cmd
10
- .command('start')
11
- .description('Start the Manager server / 啟動 Manager 伺服器')
12
- .option('--port <port>', 'Port number / 埠號', '8443')
13
- .option('--api-key <key>', 'API key for management endpoints / 管理端點 API 金鑰')
14
- .action(async (opts) => {
15
- const port = parseInt(opts.port, 10);
16
- const { ManagerServer, DEFAULT_MANAGER_CONFIG } = await import('@panguard-ai/manager');
17
- const server = new ManagerServer({
18
- ...DEFAULT_MANAGER_CONFIG,
19
- port,
20
- authToken: opts.apiKey ?? process.env['PANGUARD_MANAGER_KEY'] ?? '',
21
- });
22
- // Handle graceful shutdown
23
- const shutdown = async () => {
24
- console.log('\n[Panguard Manager] Shutting down...');
25
- await server.stop();
26
- process.exit(0);
27
- };
28
- process.on('SIGINT', () => void shutdown());
29
- process.on('SIGTERM', () => void shutdown());
30
- await server.start();
31
- console.log(`[Panguard Manager] Health: http://localhost:${port}/health`);
32
- console.log('[Panguard Manager] API: http://localhost:' + port + '/api/agents');
33
- console.log('[Panguard Manager] Press Ctrl+C to stop');
34
- });
35
- cmd
36
- .command('agents')
37
- .description('List registered agents / 列出已註冊的 Agent')
38
- .option('--url <url>', 'Manager URL / Manager 網址', 'http://localhost:8443')
39
- .option('--api-key <key>', 'API key / API 金鑰')
40
- .action(async (opts) => {
41
- try {
42
- const headers = {};
43
- if (opts.apiKey)
44
- headers['Authorization'] = `Bearer ${opts.apiKey}`;
45
- const res = await fetch(`${opts.url}/api/agents`, { headers });
46
- if (!res.ok) {
47
- console.error(` ${symbols.fail} ${c.critical(`HTTP ${res.status}`)}`);
48
- process.exitCode = 1;
49
- return;
50
- }
51
- const json = (await res.json());
52
- // Support both production ({ ok, data }) and legacy ({ agents, total }) formats
53
- const agents = json.data ?? json.agents ?? [];
54
- if (agents.length === 0) {
55
- console.log('No agents registered.');
56
- return;
57
- }
58
- console.log(`\nRegistered Agents (${agents.length}):\n`);
59
- console.log('ID'.padEnd(20) +
60
- 'Hostname'.padEnd(24) +
61
- 'Status'.padEnd(12) +
62
- 'Threats'.padEnd(10) +
63
- 'Last Heartbeat');
64
- console.log('-'.repeat(90));
65
- for (const agent of agents) {
66
- const id = ('agentId' in agent ? agent.agentId : agent.id) ?? '-';
67
- const status = agent.status ?? '-';
68
- const statusSymbol = status === 'online' ? '[OK]' : status === 'stale' ? '[!!]' : '[--]';
69
- const threats = 'threatCount' in agent ? String(agent.threatCount) : '-';
70
- const lastSeen = ('lastHeartbeat' in agent ? agent.lastHeartbeat : '') ?? '-';
71
- console.log(id.padEnd(20) +
72
- agent.hostname.padEnd(24) +
73
- `${statusSymbol} ${status}`.padEnd(12) +
74
- threats.padEnd(10) +
75
- lastSeen);
76
- }
77
- }
78
- catch (err) {
79
- const msg = err instanceof Error ? err.message : String(err);
80
- console.error(` ${symbols.fail} ${c.critical(`Failed to connect to manager: ${msg}`)}`);
81
- process.exitCode = 1;
82
- return;
83
- }
84
- });
85
- cmd
86
- .command('scan <agent-id>')
87
- .description('Trigger remote scan on an agent / 遠端觸發 Agent 掃描')
88
- .option('--url <url>', 'Manager URL / Manager 網址', 'http://localhost:8443')
89
- .action(async (agentId, opts) => {
90
- try {
91
- const res = await fetch(`${opts.url}/api/agents/${agentId}/scan`, {
92
- method: 'POST',
93
- headers: { 'Content-Type': 'application/json' },
94
- });
95
- if (!res.ok) {
96
- const data = (await res.json());
97
- console.error(` ${symbols.fail} ${c.critical(data.error ?? `HTTP ${res.status}`)}`);
98
- process.exitCode = 1;
99
- return;
100
- }
101
- const data = (await res.json());
102
- console.log(data.message ?? 'Scan command queued');
103
- }
104
- catch (err) {
105
- const msg = err instanceof Error ? err.message : String(err);
106
- console.error(` ${symbols.fail} ${c.critical(`Failed to connect to manager: ${msg}`)}`);
107
- process.exitCode = 1;
108
- return;
109
- }
110
- });
111
- return cmd;
112
- }
113
- //# sourceMappingURL=manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/cli/commands/manager.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Admin and Manager proxy route handlers for panguard serve.
3
- */
4
- import type { IncomingMessage, ServerResponse } from 'node:http';
5
- import type { RouteContext } from './serve-types.js';
6
- /**
7
- * Handle admin API routes (/api/admin/*, /api/manager/*).
8
- * Returns true if the route was handled, false otherwise.
9
- */
10
- export declare function handleAdminRoutes(req: IncomingMessage, res: ServerResponse, url: string, pathname: string, ctx: RouteContext): Promise<boolean>;
11
- //# sourceMappingURL=serve-admin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-admin.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve-admin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,OAAO,CAAC,CAoTlB"}
@@ -1,302 +0,0 @@
1
- /**
2
- * Admin and Manager proxy route handlers for panguard serve.
3
- */
4
- import { sendJson } from './serve-types.js';
5
- /**
6
- * Handle admin API routes (/api/admin/*, /api/manager/*).
7
- * Returns true if the route was handled, false otherwise.
8
- */
9
- export async function handleAdminRoutes(req, res, url, pathname, ctx) {
10
- const { handlers, managerProxy, threatDb } = ctx;
11
- // ── Admin API routes ─────────────────────────────────────────
12
- if (pathname === '/api/admin/dashboard') {
13
- handlers.handleAdminDashboard(req, res);
14
- return true;
15
- }
16
- if (pathname === '/api/admin/users/search') {
17
- handlers.handleAdminUsersSearch(req, res);
18
- return true;
19
- }
20
- if (pathname === '/api/admin/users') {
21
- handlers.handleAdminUsers(req, res);
22
- return true;
23
- }
24
- if (pathname === '/api/admin/stats') {
25
- handlers.handleAdminStats(req, res);
26
- return true;
27
- }
28
- if (pathname === '/api/admin/sessions') {
29
- if (req.method === 'GET') {
30
- handlers.handleAdminSessions(req, res);
31
- }
32
- else {
33
- sendJson(res, 405, { ok: false, error: 'Method not allowed' });
34
- }
35
- return true;
36
- }
37
- if (pathname === '/api/admin/activity') {
38
- handlers.handleAdminActivity(req, res);
39
- return true;
40
- }
41
- if (pathname === '/api/admin/audit/actions') {
42
- handlers.handleAdminAuditActions(req, res);
43
- return true;
44
- }
45
- if (pathname === '/api/admin/audit') {
46
- handlers.handleAdminAuditLog(req, res);
47
- return true;
48
- }
49
- if (pathname === '/api/admin/usage') {
50
- handlers.handleAdminUsageOverview(req, res);
51
- return true;
52
- }
53
- if (pathname === '/api/admin/users/bulk-action') {
54
- await handlers.handleAdminBulkAction(req, res);
55
- return true;
56
- }
57
- // /api/admin/sessions/:id (DELETE)
58
- const sessionRevokeMatch = pathname.match(/^\/api\/admin\/sessions\/(\d+)$/);
59
- if (sessionRevokeMatch) {
60
- handlers.handleAdminSessionRevoke(req, res, sessionRevokeMatch[1]);
61
- return true;
62
- }
63
- // /api/admin/users/:id/tier
64
- const tierMatch = pathname.match(/^\/api\/admin\/users\/(\d+)\/tier$/);
65
- if (tierMatch) {
66
- await handlers.handleAdminUpdateTier(req, res, tierMatch[1]);
67
- return true;
68
- }
69
- // /api/admin/users/:id/role
70
- const roleMatch = pathname.match(/^\/api\/admin\/users\/(\d+)\/role$/);
71
- if (roleMatch) {
72
- await handlers.handleAdminUpdateRole(req, res, roleMatch[1]);
73
- return true;
74
- }
75
- // /api/admin/waitlist/:id/approve
76
- const approveMatch = pathname.match(/^\/api\/admin\/waitlist\/(\d+)\/approve$/);
77
- if (approveMatch) {
78
- await handlers.handleAdminWaitlistApprove(req, res, approveMatch[1]);
79
- return true;
80
- }
81
- // /api/admin/waitlist/:id/reject
82
- const rejectMatch = pathname.match(/^\/api\/admin\/waitlist\/(\d+)\/reject$/);
83
- if (rejectMatch) {
84
- await handlers.handleAdminWaitlistReject(req, res, rejectMatch[1]);
85
- return true;
86
- }
87
- // /api/admin/users/:id/suspend
88
- const suspendMatch = pathname.match(/^\/api\/admin\/users\/(\d+)\/suspend$/);
89
- if (suspendMatch) {
90
- await handlers.handleAdminUserSuspend(req, res, suspendMatch[1]);
91
- return true;
92
- }
93
- // /api/admin/usage/:userId
94
- const usageUserMatch = pathname.match(/^\/api\/admin\/usage\/(\d+)$/);
95
- if (usageUserMatch) {
96
- handlers.handleAdminUsageUser(req, res, usageUserMatch[1]);
97
- return true;
98
- }
99
- // /api/admin/users/:id (GET -- user detail)
100
- const userDetailMatch = pathname.match(/^\/api\/admin\/users\/(\d+)$/);
101
- if (userDetailMatch && req.method === 'GET') {
102
- handlers.handleAdminUserDetail(req, res, userDetailMatch[1]);
103
- return true;
104
- }
105
- // /api/admin/settings (GET -- environment config status)
106
- if (pathname === '/api/admin/settings' && req.method === 'GET') {
107
- sendJson(res, 200, {
108
- ok: true,
109
- data: {
110
- oauth: {
111
- google: !!process.env['GOOGLE_CLIENT_ID'],
112
- },
113
- email: {
114
- resend: !!process.env['RESEND_API_KEY'],
115
- smtp: !!process.env['SMTP_HOST'],
116
- },
117
- security: {
118
- totpEnabled: true,
119
- },
120
- threatCloud: {
121
- endpoint: process.env['THREAT_CLOUD_ENDPOINT'] || null,
122
- apiKey: !!process.env['TC_API_KEY'],
123
- },
124
- notifications: {
125
- telegram: !!process.env['TELEGRAM_BOT_TOKEN'],
126
- slack: !!process.env['SLACK_WEBHOOK_URL'],
127
- email: !!process.env['RESEND_API_KEY'] || !!process.env['SMTP_HOST'],
128
- },
129
- manager: {
130
- key: !!process.env['PANGUARD_MANAGER_KEY'],
131
- corsOrigins: process.env['MANAGER_CORS_ORIGINS'] || '',
132
- },
133
- },
134
- });
135
- return true;
136
- }
137
- // Detailed health (admin-only) -- includes memory, services, threat stats
138
- if (pathname === '/api/admin/health' && req.method === 'GET') {
139
- const mem = process.memoryUsage();
140
- const services = {
141
- email: !!(process.env['RESEND_API_KEY'] || process.env['SMTP_HOST']),
142
- oauth: !!process.env['GOOGLE_CLIENT_ID'],
143
- errorTracking: !!process.env['SENTRY_DSN'],
144
- threatCloud: !!threatDb,
145
- tcApiKey: !!process.env['TC_API_KEY'],
146
- };
147
- let threatStats = null;
148
- if (threatDb) {
149
- try {
150
- const s = threatDb.getStats();
151
- threatStats = { rules: s.totalRules, threats: s.totalThreats };
152
- }
153
- catch {
154
- /* ignore */
155
- }
156
- }
157
- sendJson(res, 200, {
158
- ok: true,
159
- data: {
160
- status: 'healthy',
161
- version: process.env['npm_package_version'] ?? '0.0.0',
162
- uptime: Math.round(process.uptime()),
163
- db: 'connected',
164
- threatStats,
165
- memory: {
166
- rss: Math.round(mem.rss / 1024 / 1024),
167
- heapUsed: Math.round(mem.heapUsed / 1024 / 1024),
168
- },
169
- services,
170
- },
171
- });
172
- return true;
173
- }
174
- // ── Manager Proxy Routes ─────────────────────────────────────
175
- if (pathname === '/api/manager/api/overview' && req.method === 'GET') {
176
- const result = await managerProxy.getOverview();
177
- if (result.ok) {
178
- sendJson(res, 200, result.data);
179
- }
180
- else {
181
- sendJson(res, 503, { ok: false, error: result.error });
182
- }
183
- return true;
184
- }
185
- if (pathname === '/api/manager/api/agents' && req.method === 'GET') {
186
- const result = await managerProxy.getAgents();
187
- if (result.ok) {
188
- sendJson(res, 200, result.data);
189
- }
190
- else {
191
- sendJson(res, 503, { ok: false, error: result.error });
192
- }
193
- return true;
194
- }
195
- const managerAgentMatch = pathname.match(/^\/api\/manager\/api\/agents\/([^/]+)$/);
196
- if (managerAgentMatch && req.method === 'GET') {
197
- const result = await managerProxy.getAgent(managerAgentMatch[1]);
198
- if (result.ok) {
199
- sendJson(res, 200, result.data);
200
- }
201
- else {
202
- const status = result.error === 'Manager service unavailable' ? 503 : 404;
203
- sendJson(res, status, { ok: false, error: result.error });
204
- }
205
- return true;
206
- }
207
- if (pathname === '/api/manager/api/events' && req.method === 'GET') {
208
- const urlObj = new URL(url, `http://${req.headers.host ?? 'localhost'}`);
209
- const limit = parseInt(urlObj.searchParams.get('limit') ?? '50', 10) || 50;
210
- const offset = parseInt(urlObj.searchParams.get('offset') ?? '0', 10) || 0;
211
- const since = urlObj.searchParams.get('since') ?? undefined;
212
- const result = await managerProxy.getEvents({ limit, offset, since });
213
- if (result.ok) {
214
- sendJson(res, 200, result.data);
215
- }
216
- else {
217
- sendJson(res, 503, { ok: false, error: result.error });
218
- }
219
- return true;
220
- }
221
- if (pathname === '/api/manager/api/threats/summary' && req.method === 'GET') {
222
- const result = await managerProxy.getThreatSummary();
223
- if (result.ok) {
224
- sendJson(res, 200, result.data);
225
- }
226
- else {
227
- sendJson(res, 503, { ok: false, error: result.error });
228
- }
229
- return true;
230
- }
231
- if (pathname === '/api/manager/api/threats' && req.method === 'GET') {
232
- const urlObj = new URL(url, `http://${req.headers.host ?? 'localhost'}`);
233
- const since = urlObj.searchParams.get('since') ?? undefined;
234
- const result = await managerProxy.getEvents({ since });
235
- if (result.ok) {
236
- sendJson(res, 200, result.data);
237
- }
238
- else {
239
- sendJson(res, 503, { ok: false, error: result.error });
240
- }
241
- return true;
242
- }
243
- // ── Additional Admin Proxy Routes (without /api/manager prefix) ──
244
- if (pathname === '/api/admin/agents' && req.method === 'GET') {
245
- const result = await managerProxy.getAgents();
246
- if (result.ok) {
247
- sendJson(res, 200, { ok: true, data: result.data });
248
- }
249
- else {
250
- sendJson(res, 503, { ok: false, error: result.error });
251
- }
252
- return true;
253
- }
254
- const adminAgentMatch = pathname.match(/^\/api\/admin\/agents\/([^/]+)$/);
255
- if (adminAgentMatch && req.method === 'GET') {
256
- const result = await managerProxy.getAgent(adminAgentMatch[1]);
257
- if (result.ok) {
258
- sendJson(res, 200, { ok: true, data: result.data });
259
- }
260
- else {
261
- const status = result.error === 'Manager service unavailable' ? 503 : 404;
262
- sendJson(res, status, { ok: false, error: result.error });
263
- }
264
- return true;
265
- }
266
- if (pathname === '/api/admin/events' && req.method === 'GET') {
267
- const urlObj = new URL(url, `http://${req.headers.host ?? 'localhost'}`);
268
- const limit = parseInt(urlObj.searchParams.get('limit') ?? '50', 10) || 50;
269
- const offset = parseInt(urlObj.searchParams.get('offset') ?? '0', 10) || 0;
270
- const since = urlObj.searchParams.get('since') ?? undefined;
271
- const result = await managerProxy.getEvents({ limit, offset, since });
272
- if (result.ok) {
273
- sendJson(res, 200, { ok: true, data: result.data });
274
- }
275
- else {
276
- sendJson(res, 503, { ok: false, error: result.error });
277
- }
278
- return true;
279
- }
280
- if (pathname === '/api/admin/threats' && req.method === 'GET') {
281
- const result = await managerProxy.getThreatSummary();
282
- if (result.ok) {
283
- sendJson(res, 200, { ok: true, data: result.data });
284
- }
285
- else {
286
- sendJson(res, 503, { ok: false, error: result.error });
287
- }
288
- return true;
289
- }
290
- if (pathname === '/api/admin/overview' && req.method === 'GET') {
291
- const result = await managerProxy.getOverview();
292
- if (result.ok) {
293
- sendJson(res, 200, { ok: true, data: result.data });
294
- }
295
- else {
296
- sendJson(res, 503, { ok: false, error: result.error });
297
- }
298
- return true;
299
- }
300
- return false;
301
- }
302
- //# sourceMappingURL=serve-admin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-admin.js","sourceRoot":"","sources":["../../../src/cli/commands/serve-admin.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Auth, waitlist, and usage route handlers for panguard serve.
3
- */
4
- import type { IncomingMessage, ServerResponse } from 'node:http';
5
- import type { RouteContext } from './serve-types.js';
6
- /**
7
- * Handle auth API routes (/api/auth/*, /api/waitlist/*, /api/usage/*).
8
- * Returns true if the route was handled, false otherwise.
9
- */
10
- export declare function handleAuthRoutes(req: IncomingMessage, res: ServerResponse, url: string, pathname: string, ctx: RouteContext): Promise<boolean>;
11
- //# sourceMappingURL=serve-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve-auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,OAAO,CAAC,CAqHlB"}
@@ -1,119 +0,0 @@
1
- /**
2
- * Auth, waitlist, and usage route handlers for panguard serve.
3
- */
4
- /**
5
- * Handle auth API routes (/api/auth/*, /api/waitlist/*, /api/usage/*).
6
- * Returns true if the route was handled, false otherwise.
7
- */
8
- export async function handleAuthRoutes(req, res, url, pathname, ctx) {
9
- const { handlers } = ctx;
10
- // ── Auth API routes ──────────────────────────────────────────
11
- if (pathname === '/api/auth/register') {
12
- await handlers.handleRegister(req, res);
13
- return true;
14
- }
15
- if (pathname === '/api/auth/login') {
16
- await handlers.handleLogin(req, res);
17
- return true;
18
- }
19
- if (pathname === '/api/auth/logout') {
20
- handlers.handleLogout(req, res);
21
- return true;
22
- }
23
- if (pathname === '/api/auth/me') {
24
- handlers.handleMe(req, res);
25
- return true;
26
- }
27
- if (pathname === '/api/auth/delete-account') {
28
- await handlers.handleDeleteAccount(req, res);
29
- return true;
30
- }
31
- if (pathname === '/api/auth/export-data') {
32
- handlers.handleExportData(req, res);
33
- return true;
34
- }
35
- if (pathname === '/api/auth/totp/setup') {
36
- handlers.handleTotpSetup(req, res);
37
- return true;
38
- }
39
- if (pathname === '/api/auth/totp/verify') {
40
- await handlers.handleTotpVerify(req, res);
41
- return true;
42
- }
43
- if (pathname === '/api/auth/totp/disable') {
44
- await handlers.handleTotpDisable(req, res);
45
- return true;
46
- }
47
- if (pathname === '/api/auth/totp/status') {
48
- handlers.handleTotpStatus(req, res);
49
- return true;
50
- }
51
- if (pathname === '/api/auth/forgot-password') {
52
- await handlers.handleForgotPassword(req, res);
53
- return true;
54
- }
55
- if (pathname === '/api/auth/reset-password') {
56
- await handlers.handleResetPassword(req, res);
57
- return true;
58
- }
59
- if (pathname === '/api/auth/google') {
60
- handlers.handleGoogleAuth(req, res);
61
- return true;
62
- }
63
- if (pathname.startsWith('/api/auth/google/callback')) {
64
- const urlObj = new URL(url, `http://${req.headers.host ?? 'localhost'}`);
65
- const code = urlObj.searchParams.get('code') ?? '';
66
- const state = urlObj.searchParams.get('state');
67
- await handlers.handleGoogleCallback(req, res, code, state);
68
- return true;
69
- }
70
- if (pathname === '/api/auth/oauth/exchange') {
71
- await handlers.handleOAuthExchange(req, res);
72
- return true;
73
- }
74
- if (pathname === '/api/auth/cli') {
75
- handlers.handleCliAuth(req, res);
76
- return true;
77
- }
78
- if (pathname === '/api/auth/cli/exchange') {
79
- await handlers.handleCliExchange(req, res);
80
- return true;
81
- }
82
- // ── Waitlist API routes ──────────────────────────────────────
83
- if (pathname === '/api/waitlist/join') {
84
- await handlers.handleWaitlistJoin(req, res);
85
- return true;
86
- }
87
- if (pathname.startsWith('/api/waitlist/verify/')) {
88
- const token = pathname.split('/api/waitlist/verify/')[1];
89
- handlers.handleWaitlistVerify(req, res, token ?? '');
90
- return true;
91
- }
92
- if (pathname === '/api/waitlist/stats') {
93
- handlers.handleWaitlistStats(req, res);
94
- return true;
95
- }
96
- if (pathname === '/api/waitlist/list') {
97
- handlers.handleWaitlistList(req, res);
98
- return true;
99
- }
100
- // ── Usage / Quota API routes ─────────────────────────────────
101
- if (pathname === '/api/usage') {
102
- handlers.handleUsageSummary(req, res);
103
- return true;
104
- }
105
- if (pathname === '/api/usage/limits') {
106
- handlers.handleUsageLimits(req, res);
107
- return true;
108
- }
109
- if (pathname === '/api/usage/check') {
110
- await handlers.handleUsageCheck(req, res);
111
- return true;
112
- }
113
- if (pathname === '/api/usage/record') {
114
- await handlers.handleUsageRecord(req, res);
115
- return true;
116
- }
117
- return false;
118
- }
119
- //# sourceMappingURL=serve-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-auth.js","sourceRoot":"","sources":["../../../src/cli/commands/serve-auth.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Core middleware, health check, static file serving, and rule seeding
3
- * for panguard serve.
4
- */
5
- import type { IncomingMessage, ServerResponse } from 'node:http';
6
- import type { ThreatCloudDBInstance } from './serve-types.js';
7
- /**
8
- * Apply security headers and CORS to every response.
9
- * Returns true if the request was fully handled (OPTIONS preflight).
10
- */
11
- export declare function applyMiddleware(req: IncomingMessage, res: ServerResponse): boolean;
12
- /**
13
- * Handle core routes: /health, /openapi.json, /docs/api, /admin/*.
14
- * Returns true if the route was handled, false otherwise.
15
- */
16
- export declare function handleCoreRoutes(req: IncomingMessage, res: ServerResponse, pathname: string, db: {
17
- healthCheck(): void;
18
- }, threatDb: ThreatCloudDBInstance, adminDir: string | undefined): boolean;
19
- /**
20
- * Seed rules from bundled config/ directory into Threat Cloud DB.
21
- * Reads ATR YAML files.
22
- * Returns count of rules seeded.
23
- */
24
- export declare function seedRulesFromBundled(threatDb: ThreatCloudDBInstance): Promise<number>;
25
- //# sourceMappingURL=serve-core.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve-core.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve-core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAMjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAK9D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CA8BlF;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE;IAAE,WAAW,IAAI,IAAI,CAAA;CAAE,EAC3B,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAgDT;AA2DD;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF3F"}