@revealui/mcp 0.1.0 → 0.1.3
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 +22 -0
- package/LICENSE.commercial +111 -0
- package/README.md +3 -0
- package/dist/{packages/mcp/src/adapters → adapters}/db.d.ts +1 -1
- package/dist/adapters/db.d.ts.map +1 -0
- package/dist/adapters/db.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js.map +1 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js.map +1 -0
- package/dist/{packages/mcp/src/hypervisor.d.ts → hypervisor.d.ts} +56 -0
- package/dist/hypervisor.d.ts.map +1 -0
- package/dist/{packages/mcp/src/hypervisor.js → hypervisor.js} +209 -1
- package/dist/hypervisor.js.map +1 -0
- package/dist/{packages/mcp/src/index.d.ts → index.d.ts} +9 -5
- package/dist/index.d.ts.map +1 -0
- package/dist/{packages/mcp/src/index.js → index.js} +8 -4
- package/dist/index.js.map +1 -0
- package/dist/{packages/mcp/src/servers → servers}/adapter.d.ts +11 -1
- package/dist/servers/adapter.d.ts.map +1 -0
- package/dist/{packages/mcp/src/servers → servers}/adapter.js +20 -4
- package/dist/servers/adapter.js.map +1 -0
- package/dist/servers/revealui-content.d.ts +21 -0
- package/dist/servers/revealui-content.d.ts.map +1 -0
- package/dist/servers/revealui-content.js +211 -0
- package/dist/servers/revealui-content.js.map +1 -0
- package/dist/servers/revealui-email.d.ts +18 -0
- package/dist/servers/revealui-email.d.ts.map +1 -0
- package/dist/servers/revealui-email.js +190 -0
- package/dist/servers/revealui-email.js.map +1 -0
- package/dist/servers/revealui-stripe.d.ts +19 -0
- package/dist/servers/revealui-stripe.d.ts.map +1 -0
- package/dist/servers/revealui-stripe.js +228 -0
- package/dist/servers/revealui-stripe.js.map +1 -0
- package/package.json +50 -11
- package/.env.example +0 -9
- package/MCP_MAINTENANCE.md +0 -265
- package/__tests__/crdt.integration.test.ts +0 -156
- package/configs/README.md +0 -77
- package/configs/claude-template.json +0 -54
- package/dist/packages/core/src/database/ssl-config.d.ts +0 -9
- package/dist/packages/core/src/database/ssl-config.d.ts.map +0 -1
- package/dist/packages/core/src/database/ssl-config.js +0 -8
- package/dist/packages/core/src/database/ssl-config.js.map +0 -1
- package/dist/packages/core/src/features.d.ts +0 -86
- package/dist/packages/core/src/features.d.ts.map +0 -1
- package/dist/packages/core/src/features.js +0 -93
- package/dist/packages/core/src/features.js.map +0 -1
- package/dist/packages/core/src/license.d.ts +0 -75
- package/dist/packages/core/src/license.d.ts.map +0 -1
- package/dist/packages/core/src/license.js +0 -174
- package/dist/packages/core/src/license.js.map +0 -1
- package/dist/packages/core/src/monitoring/alerts.d.ts +0 -118
- package/dist/packages/core/src/monitoring/alerts.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/alerts.js +0 -325
- package/dist/packages/core/src/monitoring/alerts.js.map +0 -1
- package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +0 -71
- package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/cleanup-manager.js +0 -227
- package/dist/packages/core/src/monitoring/cleanup-manager.js.map +0 -1
- package/dist/packages/core/src/monitoring/health-monitor.d.ts +0 -22
- package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/health-monitor.js +0 -143
- package/dist/packages/core/src/monitoring/health-monitor.js.map +0 -1
- package/dist/packages/core/src/monitoring/index.d.ts +0 -14
- package/dist/packages/core/src/monitoring/index.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/index.js +0 -18
- package/dist/packages/core/src/monitoring/index.js.map +0 -1
- package/dist/packages/core/src/monitoring/process-registry.d.ts +0 -97
- package/dist/packages/core/src/monitoring/process-registry.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/process-registry.js +0 -223
- package/dist/packages/core/src/monitoring/process-registry.js.map +0 -1
- package/dist/packages/core/src/monitoring/types.d.ts +0 -231
- package/dist/packages/core/src/monitoring/types.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/types.js +0 -43
- package/dist/packages/core/src/monitoring/types.js.map +0 -1
- package/dist/packages/core/src/monitoring/zombie-detector.d.ts +0 -81
- package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +0 -1
- package/dist/packages/core/src/monitoring/zombie-detector.js +0 -232
- package/dist/packages/core/src/monitoring/zombie-detector.js.map +0 -1
- package/dist/packages/core/src/observability/logger.d.ts +0 -47
- package/dist/packages/core/src/observability/logger.d.ts.map +0 -1
- package/dist/packages/core/src/observability/logger.js +0 -141
- package/dist/packages/core/src/observability/logger.js.map +0 -1
- package/dist/packages/core/src/utils/logger-server.d.ts +0 -32
- package/dist/packages/core/src/utils/logger-server.d.ts.map +0 -1
- package/dist/packages/core/src/utils/logger-server.js +0 -69
- package/dist/packages/core/src/utils/logger-server.js.map +0 -1
- package/dist/packages/core/src/utils/request-context.d.ts +0 -143
- package/dist/packages/core/src/utils/request-context.d.ts.map +0 -1
- package/dist/packages/core/src/utils/request-context.js +0 -169
- package/dist/packages/core/src/utils/request-context.js.map +0 -1
- package/dist/packages/dev/src/code-validator/index.d.ts +0 -20
- package/dist/packages/dev/src/code-validator/index.d.ts.map +0 -1
- package/dist/packages/dev/src/code-validator/index.js +0 -20
- package/dist/packages/dev/src/code-validator/index.js.map +0 -1
- package/dist/packages/dev/src/code-validator/types.d.ts +0 -67
- package/dist/packages/dev/src/code-validator/types.d.ts.map +0 -1
- package/dist/packages/dev/src/code-validator/types.js +0 -7
- package/dist/packages/dev/src/code-validator/types.js.map +0 -1
- package/dist/packages/dev/src/code-validator/validator.d.ts +0 -48
- package/dist/packages/dev/src/code-validator/validator.d.ts.map +0 -1
- package/dist/packages/dev/src/code-validator/validator.js +0 -176
- package/dist/packages/dev/src/code-validator/validator.js.map +0 -1
- package/dist/packages/mcp/src/adapters/db.d.ts.map +0 -1
- package/dist/packages/mcp/src/adapters/db.js.map +0 -1
- package/dist/packages/mcp/src/config/index.d.ts.map +0 -1
- package/dist/packages/mcp/src/config/index.js.map +0 -1
- package/dist/packages/mcp/src/contracts.d.ts.map +0 -1
- package/dist/packages/mcp/src/contracts.js.map +0 -1
- package/dist/packages/mcp/src/hypervisor.d.ts.map +0 -1
- package/dist/packages/mcp/src/hypervisor.js.map +0 -1
- package/dist/packages/mcp/src/index.d.ts.map +0 -1
- package/dist/packages/mcp/src/index.js.map +0 -1
- package/dist/packages/mcp/src/servers/adapter.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/adapter.js.map +0 -1
- package/dist/packages/mcp/src/servers/code-validator.d.ts +0 -24
- package/dist/packages/mcp/src/servers/code-validator.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/code-validator.js +0 -156
- package/dist/packages/mcp/src/servers/code-validator.js.map +0 -1
- package/dist/packages/mcp/src/servers/neon.d.ts +0 -11
- package/dist/packages/mcp/src/servers/neon.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/neon.js +0 -90
- package/dist/packages/mcp/src/servers/neon.js.map +0 -1
- package/dist/packages/mcp/src/servers/next-devtools.d.ts +0 -11
- package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/next-devtools.js +0 -215
- package/dist/packages/mcp/src/servers/next-devtools.js.map +0 -1
- package/dist/packages/mcp/src/servers/playwright.d.ts +0 -11
- package/dist/packages/mcp/src/servers/playwright.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/playwright.js +0 -68
- package/dist/packages/mcp/src/servers/playwright.js.map +0 -1
- package/dist/packages/mcp/src/servers/stripe.d.ts +0 -11
- package/dist/packages/mcp/src/servers/stripe.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/stripe.js +0 -86
- package/dist/packages/mcp/src/servers/stripe.js.map +0 -1
- package/dist/packages/mcp/src/servers/supabase.d.ts +0 -11
- package/dist/packages/mcp/src/servers/supabase.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/supabase.js +0 -144
- package/dist/packages/mcp/src/servers/supabase.js.map +0 -1
- package/dist/packages/mcp/src/servers/vercel.d.ts +0 -11
- package/dist/packages/mcp/src/servers/vercel.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/vercel.js +0 -87
- package/dist/packages/mcp/src/servers/vercel.js.map +0 -1
- package/dist/packages/mcp/src/servers/vultr-test.d.ts +0 -3
- package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +0 -1
- package/dist/packages/mcp/src/servers/vultr-test.js +0 -82
- package/dist/packages/mcp/src/servers/vultr-test.js.map +0 -1
- package/dist/scripts/lib/analyzers/console-analyzer.d.ts +0 -188
- package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +0 -1
- package/dist/scripts/lib/analyzers/console-analyzer.js +0 -432
- package/dist/scripts/lib/analyzers/console-analyzer.js.map +0 -1
- package/dist/scripts/lib/analyzers/index.d.ts +0 -11
- package/dist/scripts/lib/analyzers/index.d.ts.map +0 -1
- package/dist/scripts/lib/analyzers/index.js +0 -11
- package/dist/scripts/lib/analyzers/index.js.map +0 -1
- package/dist/scripts/lib/args.d.ts +0 -104
- package/dist/scripts/lib/args.d.ts.map +0 -1
- package/dist/scripts/lib/args.js +0 -304
- package/dist/scripts/lib/args.js.map +0 -1
- package/dist/scripts/lib/cache.d.ts +0 -185
- package/dist/scripts/lib/cache.d.ts.map +0 -1
- package/dist/scripts/lib/cache.js +0 -390
- package/dist/scripts/lib/cache.js.map +0 -1
- package/dist/scripts/lib/cli/dispatch.d.ts +0 -116
- package/dist/scripts/lib/cli/dispatch.d.ts.map +0 -1
- package/dist/scripts/lib/cli/dispatch.js +0 -206
- package/dist/scripts/lib/cli/dispatch.js.map +0 -1
- package/dist/scripts/lib/cli/index.d.ts +0 -10
- package/dist/scripts/lib/cli/index.d.ts.map +0 -1
- package/dist/scripts/lib/cli/index.js +0 -10
- package/dist/scripts/lib/cli/index.js.map +0 -1
- package/dist/scripts/lib/database/ssl-config.d.ts +0 -26
- package/dist/scripts/lib/database/ssl-config.d.ts.map +0 -1
- package/dist/scripts/lib/database/ssl-config.js +0 -47
- package/dist/scripts/lib/database/ssl-config.js.map +0 -1
- package/dist/scripts/lib/errors.d.ts +0 -218
- package/dist/scripts/lib/errors.d.ts.map +0 -1
- package/dist/scripts/lib/errors.js +0 -543
- package/dist/scripts/lib/errors.js.map +0 -1
- package/dist/scripts/lib/exec.d.ts +0 -107
- package/dist/scripts/lib/exec.d.ts.map +0 -1
- package/dist/scripts/lib/exec.js +0 -232
- package/dist/scripts/lib/exec.js.map +0 -1
- package/dist/scripts/lib/index.d.ts +0 -50
- package/dist/scripts/lib/index.d.ts.map +0 -1
- package/dist/scripts/lib/index.js +0 -65
- package/dist/scripts/lib/index.js.map +0 -1
- package/dist/scripts/lib/logger.d.ts +0 -50
- package/dist/scripts/lib/logger.d.ts.map +0 -1
- package/dist/scripts/lib/logger.js +0 -159
- package/dist/scripts/lib/logger.js.map +0 -1
- package/dist/scripts/lib/output.d.ts +0 -149
- package/dist/scripts/lib/output.d.ts.map +0 -1
- package/dist/scripts/lib/output.js +0 -263
- package/dist/scripts/lib/output.js.map +0 -1
- package/dist/scripts/lib/parallel.d.ts +0 -164
- package/dist/scripts/lib/parallel.d.ts.map +0 -1
- package/dist/scripts/lib/parallel.js +0 -355
- package/dist/scripts/lib/parallel.js.map +0 -1
- package/dist/scripts/lib/paths.d.ts +0 -92
- package/dist/scripts/lib/paths.d.ts.map +0 -1
- package/dist/scripts/lib/paths.js +0 -171
- package/dist/scripts/lib/paths.js.map +0 -1
- package/dist/scripts/lib/state/adapters/memory.d.ts +0 -42
- package/dist/scripts/lib/state/adapters/memory.d.ts.map +0 -1
- package/dist/scripts/lib/state/adapters/memory.js +0 -110
- package/dist/scripts/lib/state/adapters/memory.js.map +0 -1
- package/dist/scripts/lib/state/adapters/pglite.d.ts +0 -46
- package/dist/scripts/lib/state/adapters/pglite.d.ts.map +0 -1
- package/dist/scripts/lib/state/adapters/pglite.js +0 -256
- package/dist/scripts/lib/state/adapters/pglite.js.map +0 -1
- package/dist/scripts/lib/state/index.d.ts +0 -16
- package/dist/scripts/lib/state/index.d.ts.map +0 -1
- package/dist/scripts/lib/state/index.js +0 -16
- package/dist/scripts/lib/state/index.js.map +0 -1
- package/dist/scripts/lib/state/types.d.ts +0 -111
- package/dist/scripts/lib/state/types.d.ts.map +0 -1
- package/dist/scripts/lib/state/types.js +0 -8
- package/dist/scripts/lib/state/types.js.map +0 -1
- package/dist/scripts/lib/state/workflow-state.d.ts +0 -110
- package/dist/scripts/lib/state/workflow-state.d.ts.map +0 -1
- package/dist/scripts/lib/state/workflow-state.js +0 -331
- package/dist/scripts/lib/state/workflow-state.js.map +0 -1
- package/dist/scripts/lib/telemetry.d.ts +0 -194
- package/dist/scripts/lib/telemetry.d.ts.map +0 -1
- package/dist/scripts/lib/telemetry.js +0 -394
- package/dist/scripts/lib/telemetry.js.map +0 -1
- package/dist/scripts/lib/utils.d.ts +0 -270
- package/dist/scripts/lib/utils.d.ts.map +0 -1
- package/dist/scripts/lib/utils.js +0 -473
- package/dist/scripts/lib/utils.js.map +0 -1
- package/dist/scripts/lib/validation/database.d.ts +0 -83
- package/dist/scripts/lib/validation/database.d.ts.map +0 -1
- package/dist/scripts/lib/validation/database.js +0 -199
- package/dist/scripts/lib/validation/database.js.map +0 -1
- package/dist/scripts/lib/validation/env.d.ts +0 -80
- package/dist/scripts/lib/validation/env.d.ts.map +0 -1
- package/dist/scripts/lib/validation/env.js +0 -246
- package/dist/scripts/lib/validation/env.js.map +0 -1
- package/dist/scripts/lib/validation/index.d.ts +0 -16
- package/dist/scripts/lib/validation/index.d.ts.map +0 -1
- package/dist/scripts/lib/validation/index.js +0 -16
- package/dist/scripts/lib/validation/index.js.map +0 -1
- package/dist/scripts/lib/validation/post-execution.d.ts +0 -74
- package/dist/scripts/lib/validation/post-execution.d.ts.map +0 -1
- package/dist/scripts/lib/validation/post-execution.js +0 -110
- package/dist/scripts/lib/validation/post-execution.js.map +0 -1
- package/dist/scripts/lib/validation/pre-execution.d.ts +0 -165
- package/dist/scripts/lib/validation/pre-execution.d.ts.map +0 -1
- package/dist/scripts/lib/validation/pre-execution.js +0 -466
- package/dist/scripts/lib/validation/pre-execution.js.map +0 -1
- package/dist/scripts/lib/validators/documentation-validator.d.ts +0 -242
- package/dist/scripts/lib/validators/documentation-validator.d.ts.map +0 -1
- package/dist/scripts/lib/validators/documentation-validator.js +0 -584
- package/dist/scripts/lib/validators/documentation-validator.js.map +0 -1
- package/dist/scripts/lib/validators/index.d.ts +0 -11
- package/dist/scripts/lib/validators/index.d.ts.map +0 -1
- package/dist/scripts/lib/validators/index.js +0 -11
- package/dist/scripts/lib/validators/index.js.map +0 -1
- package/docker-compose.yml +0 -46
- package/docs/INDEX.md +0 -88
- package/docs/README.md +0 -774
- package/docs/SETUP.md +0 -264
- package/docs/servers/code-validator.md +0 -586
- package/eslint.config.js +0 -7
- package/migrations/0001_add_crdt_columns.sql +0 -8
- package/migrations/0001_rollback.sql +0 -6
- package/migrations/005_performance_indexes.sql +0 -190
- package/migrations/backfill_crdt_meta.js +0 -45
- package/src/__tests__/hypervisor.test.ts +0 -212
- package/src/adapters/db.ts +0 -180
- package/src/config/config.json +0 -49
- package/src/config/index.ts +0 -30
- package/src/contracts.ts +0 -221
- package/src/hypervisor.ts +0 -464
- package/src/index.ts +0 -87
- package/src/servers/adapter.ts +0 -643
- package/src/servers/code-validator.ts +0 -188
- package/src/servers/neon.ts +0 -103
- package/src/servers/next-devtools.ts +0 -230
- package/src/servers/playwright.ts +0 -77
- package/src/servers/stripe.ts +0 -99
- package/src/servers/supabase.ts +0 -161
- package/src/servers/vercel.ts +0 -100
- package/src/servers/vultr-test.ts +0 -97
- package/tsconfig.json +0 -12
- package/vitest.config.ts +0 -22
- /package/dist/{packages/mcp/src/adapters → adapters}/db.js +0 -0
- /package/dist/{packages/mcp/src/config → config}/index.d.ts +0 -0
- /package/dist/{packages/mcp/src/config → config}/index.js +0 -0
- /package/dist/{packages/mcp/src/contracts.d.ts → contracts.d.ts} +0 -0
- /package/dist/{packages/mcp/src/contracts.js → contracts.js} +0 -0
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zombie Process Detector
|
|
3
|
-
*
|
|
4
|
-
* Periodically scans for defunct (zombie) processes and attempts automatic cleanup.
|
|
5
|
-
* Zombie processes are dead processes that haven't been reaped by their parent.
|
|
6
|
-
*/
|
|
7
|
-
import { exec } from 'node:child_process';
|
|
8
|
-
import { promisify } from 'node:util';
|
|
9
|
-
import { logger } from '../utils/logger-server.js';
|
|
10
|
-
import { processRegistry } from './process-registry.js';
|
|
11
|
-
import { DEFAULT_MONITORING_CONFIG } from './types.js';
|
|
12
|
-
const execAsync = promisify(exec);
|
|
13
|
-
/**
|
|
14
|
-
* Zombie detector class
|
|
15
|
-
*/
|
|
16
|
-
class ZombieDetector {
|
|
17
|
-
interval = null;
|
|
18
|
-
zombieHistory = [];
|
|
19
|
-
enabled = DEFAULT_MONITORING_CONFIG.enabled;
|
|
20
|
-
detectionInterval = DEFAULT_MONITORING_CONFIG.zombieDetectionInterval;
|
|
21
|
-
maxHistory = DEFAULT_MONITORING_CONFIG.maxZombieHistory;
|
|
22
|
-
onZombieDetected;
|
|
23
|
-
/**
|
|
24
|
-
* Start zombie detection
|
|
25
|
-
*/
|
|
26
|
-
start() {
|
|
27
|
-
if (!this.enabled || this.interval)
|
|
28
|
-
return;
|
|
29
|
-
logger.info('Starting zombie process detector', {
|
|
30
|
-
interval: this.detectionInterval,
|
|
31
|
-
});
|
|
32
|
-
this.interval = setInterval(() => {
|
|
33
|
-
this.scan().catch((error) => {
|
|
34
|
-
logger.error('Zombie detection scan failed', { error });
|
|
35
|
-
});
|
|
36
|
-
}, this.detectionInterval);
|
|
37
|
-
// Prevent interval from keeping process alive
|
|
38
|
-
this.interval.unref();
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Stop zombie detection
|
|
42
|
-
*/
|
|
43
|
-
stop() {
|
|
44
|
-
if (this.interval) {
|
|
45
|
-
clearInterval(this.interval);
|
|
46
|
-
this.interval = null;
|
|
47
|
-
logger.info('Stopped zombie process detector');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Perform a single scan for zombie processes
|
|
52
|
-
*/
|
|
53
|
-
async scan() {
|
|
54
|
-
if (!this.enabled)
|
|
55
|
-
return [];
|
|
56
|
-
try {
|
|
57
|
-
// Use ps to find defunct processes
|
|
58
|
-
// Format: PID PPID COMMAND STATE
|
|
59
|
-
const { stdout } = await execAsync("ps axo pid,ppid,comm,state | grep -E ' (Z|z)' || true");
|
|
60
|
-
const zombies = [];
|
|
61
|
-
if (stdout.trim()) {
|
|
62
|
-
const lines = stdout.trim().split('\n');
|
|
63
|
-
for (const line of lines) {
|
|
64
|
-
const match = line.trim().match(/^(\d+)\s+(\d+)\s+(\S+)\s+[Zz]/);
|
|
65
|
-
if (match?.[1] && match[2] && match[3]) {
|
|
66
|
-
const pid = parseInt(match[1], 10);
|
|
67
|
-
const ppid = parseInt(match[2], 10);
|
|
68
|
-
const command = match[3];
|
|
69
|
-
const zombie = {
|
|
70
|
-
pid,
|
|
71
|
-
ppid,
|
|
72
|
-
command,
|
|
73
|
-
detectedAt: Date.now(),
|
|
74
|
-
trackedProcess: processRegistry.get(pid),
|
|
75
|
-
};
|
|
76
|
-
zombies.push(zombie);
|
|
77
|
-
// Mark in registry
|
|
78
|
-
processRegistry.markZombie(pid);
|
|
79
|
-
// Add to history
|
|
80
|
-
this.addToHistory(zombie);
|
|
81
|
-
// Log detection
|
|
82
|
-
logger.warn('Zombie process detected', {
|
|
83
|
-
pid,
|
|
84
|
-
ppid,
|
|
85
|
-
command,
|
|
86
|
-
});
|
|
87
|
-
// Attempt cleanup
|
|
88
|
-
await this.attemptCleanup(zombie);
|
|
89
|
-
// Notify callback
|
|
90
|
-
if (this.onZombieDetected) {
|
|
91
|
-
this.onZombieDetected(zombie);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return zombies;
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
logger.error('Failed to scan for zombie processes', { error });
|
|
100
|
-
return [];
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Attempt to clean up a zombie process
|
|
105
|
-
*/
|
|
106
|
-
async attemptCleanup(zombie) {
|
|
107
|
-
try {
|
|
108
|
-
// Zombies can't be killed directly - need to signal parent to reap them
|
|
109
|
-
// Try sending SIGCHLD to parent process
|
|
110
|
-
logger.info('Attempting zombie cleanup by signaling parent', {
|
|
111
|
-
zombie: zombie.pid,
|
|
112
|
-
parent: zombie.ppid,
|
|
113
|
-
});
|
|
114
|
-
// Check if parent exists
|
|
115
|
-
const { stdout: parentExists } = await execAsync(`ps -p ${zombie.ppid} -o pid= || true`);
|
|
116
|
-
if (!parentExists.trim()) {
|
|
117
|
-
logger.warn('Zombie parent process does not exist', {
|
|
118
|
-
zombie: zombie.pid,
|
|
119
|
-
parent: zombie.ppid,
|
|
120
|
-
});
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
// Send SIGCHLD to parent
|
|
124
|
-
process.kill(zombie.ppid, 'SIGCHLD');
|
|
125
|
-
// Wait a moment and check if zombie is gone
|
|
126
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
127
|
-
const { stdout: zombieStillExists } = await execAsync(`ps -p ${zombie.pid} -o state= || true`);
|
|
128
|
-
if (!zombieStillExists.trim()) {
|
|
129
|
-
logger.info('Zombie process successfully reaped', {
|
|
130
|
-
pid: zombie.pid,
|
|
131
|
-
});
|
|
132
|
-
return true;
|
|
133
|
-
}
|
|
134
|
-
logger.warn('Zombie process persists after cleanup attempt', {
|
|
135
|
-
pid: zombie.pid,
|
|
136
|
-
ppid: zombie.ppid,
|
|
137
|
-
});
|
|
138
|
-
return false;
|
|
139
|
-
}
|
|
140
|
-
catch (error) {
|
|
141
|
-
logger.error('Failed to cleanup zombie process', {
|
|
142
|
-
zombie: zombie.pid,
|
|
143
|
-
error,
|
|
144
|
-
});
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Add zombie to history
|
|
150
|
-
*/
|
|
151
|
-
addToHistory(zombie) {
|
|
152
|
-
this.zombieHistory.unshift(zombie);
|
|
153
|
-
// Trim history
|
|
154
|
-
if (this.zombieHistory.length > this.maxHistory) {
|
|
155
|
-
this.zombieHistory = this.zombieHistory.slice(0, this.maxHistory);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Get zombie history
|
|
160
|
-
*/
|
|
161
|
-
getHistory() {
|
|
162
|
-
return [...this.zombieHistory];
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Get current zombie count
|
|
166
|
-
*/
|
|
167
|
-
getCount() {
|
|
168
|
-
return processRegistry.getZombies().length;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Clear history
|
|
172
|
-
*/
|
|
173
|
-
clearHistory() {
|
|
174
|
-
this.zombieHistory = [];
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Set zombie detection callback
|
|
178
|
-
*/
|
|
179
|
-
onZombie(callback) {
|
|
180
|
-
this.onZombieDetected = callback;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Enable or disable detection
|
|
184
|
-
*/
|
|
185
|
-
setEnabled(enabled) {
|
|
186
|
-
this.enabled = enabled;
|
|
187
|
-
if (!enabled && this.interval) {
|
|
188
|
-
this.stop();
|
|
189
|
-
}
|
|
190
|
-
else if (enabled && !this.interval) {
|
|
191
|
-
this.start();
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Check if detection is enabled
|
|
196
|
-
*/
|
|
197
|
-
isEnabled() {
|
|
198
|
-
return this.enabled;
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Check if detector is running
|
|
202
|
-
*/
|
|
203
|
-
isRunning() {
|
|
204
|
-
return this.interval !== null;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Singleton instance
|
|
209
|
-
*/
|
|
210
|
-
export const zombieDetector = new ZombieDetector();
|
|
211
|
-
/**
|
|
212
|
-
* Convenience functions
|
|
213
|
-
*/
|
|
214
|
-
export function startZombieDetection() {
|
|
215
|
-
zombieDetector.start();
|
|
216
|
-
}
|
|
217
|
-
export function stopZombieDetection() {
|
|
218
|
-
zombieDetector.stop();
|
|
219
|
-
}
|
|
220
|
-
export function scanForZombies() {
|
|
221
|
-
return zombieDetector.scan();
|
|
222
|
-
}
|
|
223
|
-
export function getZombieHistory() {
|
|
224
|
-
return zombieDetector.getHistory();
|
|
225
|
-
}
|
|
226
|
-
export function getZombieCount() {
|
|
227
|
-
return zombieDetector.getCount();
|
|
228
|
-
}
|
|
229
|
-
export function onZombieDetected(callback) {
|
|
230
|
-
zombieDetector.onZombie(callback);
|
|
231
|
-
}
|
|
232
|
-
//# sourceMappingURL=zombie-detector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zombie-detector.js","sourceRoot":"","sources":["../../../../../../core/src/monitoring/zombie-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Structured Logging Infrastructure
|
|
3
|
-
*
|
|
4
|
-
* Re-exports from @revealui/utils to maintain backward compatibility.
|
|
5
|
-
* The actual implementation has been moved to @revealui/utils to break circular dependencies.
|
|
6
|
-
*/
|
|
7
|
-
export type { LogContext, LogEntry, LoggerConfig, LogLevel, } from '@revealui/utils/logger';
|
|
8
|
-
export { createLogger, Logger, logAudit, logError, logger, logQuery, } from '@revealui/utils/logger';
|
|
9
|
-
/**
|
|
10
|
-
* Request logger middleware
|
|
11
|
-
*/
|
|
12
|
-
export declare function createRequestLogger<TRequest = unknown, TResponse = unknown>(options?: {
|
|
13
|
-
includeBody?: boolean;
|
|
14
|
-
includeHeaders?: boolean;
|
|
15
|
-
}): (request: TRequest & {
|
|
16
|
-
method: string;
|
|
17
|
-
url: string;
|
|
18
|
-
headers?: {
|
|
19
|
-
get?: (key: string) => string | null;
|
|
20
|
-
entries?: () => Iterable<[string, string]>;
|
|
21
|
-
};
|
|
22
|
-
}, next: () => Promise<TResponse>) => Promise<TResponse>;
|
|
23
|
-
/**
|
|
24
|
-
* Performance logger
|
|
25
|
-
*/
|
|
26
|
-
export declare function logPerformance(operation: string, duration: number, context?: Record<string, unknown>): void;
|
|
27
|
-
/**
|
|
28
|
-
* API call logger
|
|
29
|
-
*/
|
|
30
|
-
export declare function logAPICall(method: string, url: string, status: number, duration: number, context?: Record<string, unknown>): void;
|
|
31
|
-
/**
|
|
32
|
-
* Cache operation logger
|
|
33
|
-
*/
|
|
34
|
-
export declare function logCache(operation: 'hit' | 'miss' | 'set' | 'delete', key: string, context?: Record<string, unknown>): void;
|
|
35
|
-
/**
|
|
36
|
-
* User action logger
|
|
37
|
-
*/
|
|
38
|
-
export declare function logUserAction(action: string, userId?: string, context?: Record<string, unknown>): void;
|
|
39
|
-
/**
|
|
40
|
-
* System event logger
|
|
41
|
-
*/
|
|
42
|
-
export declare function logSystemEvent(event: string, context?: Record<string, unknown>): void;
|
|
43
|
-
/**
|
|
44
|
-
* Sanitize sensitive data from logs
|
|
45
|
-
*/
|
|
46
|
-
export declare function sanitizeLogData(data: Record<string, unknown>): Record<string, unknown>;
|
|
47
|
-
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../../../core/src/observability/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,YAAY,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,MAAM,wBAAwB,CAAA;AAK/B;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAG,OAAO,EAAE,SAAS,GAAG,OAAO,EACzE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,IAG/D,SAAS,QAAQ,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE,CAAA;CAC/F,EACD,MAAM,MAAM,OAAO,CAAC,SAAS,CAAC,KAC7B,OAAO,CAAC,SAAS,CAAC,CA6CtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAgBN;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,EAC5C,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BtF"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Structured Logging Infrastructure
|
|
3
|
-
*
|
|
4
|
-
* Re-exports from @revealui/utils to maintain backward compatibility.
|
|
5
|
-
* The actual implementation has been moved to @revealui/utils to break circular dependencies.
|
|
6
|
-
*/
|
|
7
|
-
// Import logger for internal use
|
|
8
|
-
import { logger as utilsLogger } from '@revealui/utils/logger';
|
|
9
|
-
export { createLogger, Logger, logAudit, logError, logger, logQuery, } from '@revealui/utils/logger';
|
|
10
|
-
// Additional helper functions that were in core but not in utils
|
|
11
|
-
// These can stay here as they're core-specific
|
|
12
|
-
/**
|
|
13
|
-
* Request logger middleware
|
|
14
|
-
*/
|
|
15
|
-
export function createRequestLogger(options = {}) {
|
|
16
|
-
return async (request, next) => {
|
|
17
|
-
// Import logger at runtime to avoid circular deps
|
|
18
|
-
const { logger } = await import('@revealui/utils/logger');
|
|
19
|
-
const requestId = crypto.randomUUID();
|
|
20
|
-
const startTime = Date.now();
|
|
21
|
-
const requestLogger = logger.child({
|
|
22
|
-
requestId,
|
|
23
|
-
method: request.method,
|
|
24
|
-
url: request.url,
|
|
25
|
-
userAgent: request.headers?.get?.('user-agent'),
|
|
26
|
-
});
|
|
27
|
-
requestLogger.info('Request started');
|
|
28
|
-
if (options.includeHeaders) {
|
|
29
|
-
requestLogger.debug('Request headers', {
|
|
30
|
-
headers: Object.fromEntries(request.headers?.entries?.() || []),
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
try {
|
|
34
|
-
const response = await next();
|
|
35
|
-
const duration = Date.now() - startTime;
|
|
36
|
-
const responseWithStatus = response;
|
|
37
|
-
requestLogger.info('Request completed', {
|
|
38
|
-
status: responseWithStatus.status ?? 200,
|
|
39
|
-
duration,
|
|
40
|
-
});
|
|
41
|
-
return response;
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
const duration = Date.now() - startTime;
|
|
45
|
-
requestLogger.error('Request failed', error instanceof Error ? error : new Error(String(error)), { duration });
|
|
46
|
-
throw error;
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Performance logger
|
|
52
|
-
*/
|
|
53
|
-
export function logPerformance(operation, duration, context) {
|
|
54
|
-
const level = duration > 1000 ? 'warn' : 'info';
|
|
55
|
-
utilsLogger[level](`Performance: ${operation}`, {
|
|
56
|
-
...context,
|
|
57
|
-
operation,
|
|
58
|
-
duration,
|
|
59
|
-
slow: duration > 1000,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* API call logger
|
|
64
|
-
*/
|
|
65
|
-
export function logAPICall(method, url, status, duration, context) {
|
|
66
|
-
const apiContext = {
|
|
67
|
-
...context,
|
|
68
|
-
method,
|
|
69
|
-
url,
|
|
70
|
-
status,
|
|
71
|
-
duration,
|
|
72
|
-
};
|
|
73
|
-
if (status >= 400) {
|
|
74
|
-
utilsLogger.error('API call', undefined, apiContext);
|
|
75
|
-
}
|
|
76
|
-
else if (status >= 300) {
|
|
77
|
-
utilsLogger.warn('API call', apiContext);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
utilsLogger.info('API call', apiContext);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Cache operation logger
|
|
85
|
-
*/
|
|
86
|
-
export function logCache(operation, key, context) {
|
|
87
|
-
utilsLogger.debug(`Cache ${operation}`, {
|
|
88
|
-
...context,
|
|
89
|
-
operation,
|
|
90
|
-
key,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* User action logger
|
|
95
|
-
*/
|
|
96
|
-
export function logUserAction(action, userId, context) {
|
|
97
|
-
utilsLogger.info('User action', {
|
|
98
|
-
...context,
|
|
99
|
-
action,
|
|
100
|
-
userId,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* System event logger
|
|
105
|
-
*/
|
|
106
|
-
export function logSystemEvent(event, context) {
|
|
107
|
-
utilsLogger.info('System event', {
|
|
108
|
-
...context,
|
|
109
|
-
event,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Sanitize sensitive data from logs
|
|
114
|
-
*/
|
|
115
|
-
export function sanitizeLogData(data) {
|
|
116
|
-
const sensitiveKeys = [
|
|
117
|
-
'password',
|
|
118
|
-
'token',
|
|
119
|
-
'secret',
|
|
120
|
-
'apiKey',
|
|
121
|
-
'accessToken',
|
|
122
|
-
'refreshToken',
|
|
123
|
-
'creditCard',
|
|
124
|
-
'ssn',
|
|
125
|
-
];
|
|
126
|
-
const sanitized = {};
|
|
127
|
-
for (const [key, value] of Object.entries(data)) {
|
|
128
|
-
const lowerKey = key.toLowerCase();
|
|
129
|
-
if (sensitiveKeys.some((sensitive) => lowerKey.includes(sensitive))) {
|
|
130
|
-
sanitized[key] = '[REDACTED]';
|
|
131
|
-
}
|
|
132
|
-
else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
133
|
-
sanitized[key] = sanitizeLogData(value);
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
sanitized[key] = value;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return sanitized;
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../../../core/src/observability/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Server Logger Utility
|
|
3
|
-
*
|
|
4
|
-
* Server-side logging utility for RevealUI framework.
|
|
5
|
-
* Supports different log levels and structured output.
|
|
6
|
-
* Automatically includes request ID from request context when available.
|
|
7
|
-
*
|
|
8
|
-
* WARNING: This module uses Node.js APIs (async_hooks via request-context).
|
|
9
|
-
* For client-safe logging, use './logger-client.js' instead.
|
|
10
|
-
*/
|
|
11
|
-
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
12
|
-
export interface LogContext {
|
|
13
|
-
[key: string]: unknown;
|
|
14
|
-
}
|
|
15
|
-
export interface Logger {
|
|
16
|
-
debug(message: string, context?: LogContext): void;
|
|
17
|
-
info(message: string, context?: LogContext): void;
|
|
18
|
-
warn(message: string, context?: LogContext): void;
|
|
19
|
-
error(message: string, context?: LogContext): void;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Create a logger instance
|
|
23
|
-
*
|
|
24
|
-
* @param minLevel - Minimum log level to output (default: 'info')
|
|
25
|
-
* @returns Logger instance
|
|
26
|
-
*/
|
|
27
|
-
export declare function createLogger(minLevel?: LogLevel): Logger;
|
|
28
|
-
/**
|
|
29
|
-
* Default logger instance
|
|
30
|
-
*/
|
|
31
|
-
export declare const logger: Logger;
|
|
32
|
-
//# sourceMappingURL=logger-server.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger-server.d.ts","sourceRoot":"","sources":["../../../../../../core/src/utils/logger-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAClD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CACnD;AAsDD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAKxD;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAiB,CAAA"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Server Logger Utility
|
|
3
|
-
*
|
|
4
|
-
* Server-side logging utility for RevealUI framework.
|
|
5
|
-
* Supports different log levels and structured output.
|
|
6
|
-
* Automatically includes request ID from request context when available.
|
|
7
|
-
*
|
|
8
|
-
* WARNING: This module uses Node.js APIs (async_hooks via request-context).
|
|
9
|
-
* For client-safe logging, use './logger-client.js' instead.
|
|
10
|
-
*/
|
|
11
|
-
import { getRequestId } from './request-context.js';
|
|
12
|
-
class ConsoleLogger {
|
|
13
|
-
minLevel;
|
|
14
|
-
constructor(minLevel = 'info') {
|
|
15
|
-
this.minLevel = minLevel;
|
|
16
|
-
}
|
|
17
|
-
shouldLog(level) {
|
|
18
|
-
const levels = ['debug', 'info', 'warn', 'error'];
|
|
19
|
-
return levels.indexOf(level) >= levels.indexOf(this.minLevel);
|
|
20
|
-
}
|
|
21
|
-
formatMessage(level, message, context) {
|
|
22
|
-
const timestamp = new Date().toISOString();
|
|
23
|
-
const prefix = `[${timestamp}] [${level.toUpperCase()}]`;
|
|
24
|
-
// Automatically include request ID if available
|
|
25
|
-
const requestId = getRequestId();
|
|
26
|
-
const enrichedContext = requestId ? { requestId, ...context } : context;
|
|
27
|
-
if (enrichedContext && Object.keys(enrichedContext).length > 0) {
|
|
28
|
-
return `${prefix} ${message} ${JSON.stringify(enrichedContext)}`;
|
|
29
|
-
}
|
|
30
|
-
return `${prefix} ${message}`;
|
|
31
|
-
}
|
|
32
|
-
debug(message, context) {
|
|
33
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
34
|
-
console.debug(this.formatMessage('debug', message, context));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
info(message, context) {
|
|
38
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
39
|
-
console.info(this.formatMessage('info', message, context));
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
warn(message, context) {
|
|
43
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
44
|
-
console.warn(this.formatMessage('warn', message, context));
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
error(message, context) {
|
|
48
|
-
if (this.shouldLog('error')) {
|
|
49
|
-
console.error(this.formatMessage('error', message, context));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Create a logger instance
|
|
55
|
-
*
|
|
56
|
-
* @param minLevel - Minimum log level to output (default: 'info')
|
|
57
|
-
* @returns Logger instance
|
|
58
|
-
*/
|
|
59
|
-
export function createLogger(minLevel) {
|
|
60
|
-
// In production, can be extended to use structured logging services
|
|
61
|
-
// For now, use console-based logger
|
|
62
|
-
const level = minLevel || process.env.LOG_LEVEL || 'info';
|
|
63
|
-
return new ConsoleLogger(level);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Default logger instance
|
|
67
|
-
*/
|
|
68
|
-
export const logger = createLogger();
|
|
69
|
-
//# sourceMappingURL=logger-server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger-server.js","sourceRoot":"","sources":["../../../../../../core/src/utils/logger-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAenD,MAAM,aAAa;IACT,QAAQ,CAAU;IAE1B,YAAY,WAAqB,MAAM;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,MAAM,MAAM,GAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/D,CAAC;IAEO,aAAa,CAAC,KAAe,EAAE,OAAe,EAAE,OAAoB;QAC1E,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,CAAA;QAExD,gDAAgD;QAChD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;QAChC,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;QAEvE,IAAI,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAA;QAClE,CAAC;QAED,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAoB;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAoB;QACxC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAoB;QACxC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAoB;QACzC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAmB;IAC9C,oEAAoE;IACpE,oCAAoC;IACpC,MAAM,KAAK,GAAG,QAAQ,IAAK,OAAO,CAAC,GAAG,CAAC,SAAsB,IAAI,MAAM,CAAA;IACvE,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAA;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA"}
|