@xopcai/xopc 0.0.92 → 0.0.94
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/agents-OqhbJkMf.js +222 -0
- package/dist/gateway/static/root/assets/apps-page-OHXW9XP8.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-4N2R-jof.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-XzddfJW2.js → channels-status-swr-Bv6f9kDq.js} +1 -1
- package/dist/gateway/static/root/assets/{cron-api--I8LJ44S.js → cron-api-BtaQaHJq.js} +1 -1
- package/dist/gateway/static/root/assets/cron-page-Dah32HJK.js +1 -0
- package/dist/gateway/static/root/assets/{dist-CYgHMQO0.js → dist-BJfD9Qvs.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-6cRP0nA9.js → extension-debug-page-DnYuMzmH.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DpwIkspI.js → extension-page-CJfc-6XV.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DYbnQUxH.js → extension-settings-page-BxdfYQMG.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-DTN0w7rV.js → fetch-B0aeeY0q.js} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-CslW6HwD.js → field-primitives-DOLHwowi.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-2UiKevxG.js → heartbeat-config-api-Bj2INAf5.js} +1 -1
- package/dist/gateway/static/root/assets/index-Bj_l8QDp.css +1 -0
- package/dist/gateway/static/root/assets/{index-DnevRVa6.js → index-DuQ1XPoA.js} +99 -98
- package/dist/gateway/static/root/assets/logs-page-AsOgLNJE.js +2 -0
- package/dist/gateway/static/root/assets/{note-detail-page-DvW2qg4i.js → note-detail-page-24J4mVP-.js} +53 -53
- package/dist/gateway/static/root/assets/{note-time-BEiibLJv.js → note-time-JBszYV3s.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-BApAirFB.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-DX9huWsA.js +1 -0
- package/dist/gateway/static/root/assets/{settings-advanced-gate-BctKqHcf.js → settings-advanced-gate-DWvhsTuz.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-QJh5ruel.js → settings-form-section-CxMjaMiy.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-4VmUTzQs.js +3 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DBsvvbmD.js → share-preview-page-IX0TJvRd.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-CGKGKfwe.js +2 -0
- package/dist/gateway/static/root/assets/{theme-store-ht5iswWS.js → theme-store-Cg_SuBw0.js} +1 -1
- package/dist/gateway/static/root/assets/url-BHHmdJYc.js +3 -0
- package/dist/gateway/static/root/assets/{utils-DhPv9xoB.js → utils-BmlcxR2j.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DaGm2N4J.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-page.utils-CJqnPWkW.js → workflow-page.utils-D0vsIGHD.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-BFCrD3nw.js +27 -0
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +1 -0
- package/dist/src/agent/inbound/turn-dispatcher.js +3 -0
- package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
- package/dist/src/agent/lifecycle/handlers/compaction.js +1 -1
- package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +17 -4
- package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.js +10 -3
- package/dist/src/agent/mcp/mcp-transport-config.js.map +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.d.ts +1 -0
- package/dist/src/agent/service/process-direct-streaming.js +15 -12
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.d.ts +4 -2
- package/dist/src/agent/service.js +20 -4
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +3 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
- package/dist/src/agent/tools/search/registry.js +1 -1
- package/dist/src/agent/tools/search/registry.js.map +1 -1
- package/dist/src/agent/tools/session-search-tool.js +1 -1
- package/dist/src/agent/tools/session-search-tool.js.map +1 -1
- package/dist/src/agent/tools/workflow-tool.js +1 -1
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/workflow/progress-broker.js +1 -1
- package/dist/src/agent/workflow/progress-broker.js.map +1 -1
- package/dist/src/agent/workflow/subagent-runner.js +1 -1
- package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
- package/dist/src/channels/pipeline.js +3 -2
- package/dist/src/channels/pipeline.js.map +1 -1
- package/dist/src/cli/cli-log-level-preset.d.ts +1 -1
- package/dist/src/cli/cli-log-level-preset.js +2 -2
- package/dist/src/cli/cli-log-level-preset.js.map +1 -1
- package/dist/src/cli/commands/logs.js +3 -3
- package/dist/src/cli/commands/logs.js.map +1 -1
- package/dist/src/cron/executor.js +7 -4
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/gateway/hono/app.js +4 -1
- package/dist/src/gateway/hono/app.js.map +1 -1
- package/dist/src/gateway/hono/lib/route-logger.d.ts +6 -0
- package/dist/src/gateway/hono/lib/route-logger.js +31 -0
- package/dist/src/gateway/hono/lib/route-logger.js.map +1 -0
- package/dist/src/gateway/hono/middleware/auth.js +16 -3
- package/dist/src/gateway/hono/middleware/auth.js.map +1 -1
- package/dist/src/gateway/hono/middleware/logger.js +1 -1
- package/dist/src/gateway/hono/middleware/logger.js.map +1 -1
- package/dist/src/gateway/hono/middleware/route-errors.d.ts +5 -0
- package/dist/src/gateway/hono/middleware/route-errors.js +27 -0
- package/dist/src/gateway/hono/middleware/route-errors.js.map +1 -0
- package/dist/src/gateway/hono/routes/agent-stream.js +6 -0
- package/dist/src/gateway/hono/routes/agent-stream.js.map +1 -1
- package/dist/src/gateway/hono/routes/browser-install.js +2 -4
- package/dist/src/gateway/hono/routes/browser-install.js.map +1 -1
- package/dist/src/gateway/hono/routes/config.js +25 -11
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/cron.js +5 -0
- package/dist/src/gateway/hono/routes/cron.js.map +1 -1
- package/dist/src/gateway/hono/routes/host-fs.js +2 -4
- package/dist/src/gateway/hono/routes/host-fs.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +14 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-fallback.js +3 -0
- package/dist/src/gateway/hono/routes/lazy-fallback.js.map +1 -1
- package/dist/src/gateway/hono/routes/logs.js +39 -7
- package/dist/src/gateway/hono/routes/logs.js.map +1 -1
- package/dist/src/gateway/hono/routes/mcp.d.ts +3 -0
- package/dist/src/gateway/hono/routes/mcp.js +107 -0
- package/dist/src/gateway/hono/routes/mcp.js.map +1 -0
- package/dist/src/gateway/hono/routes/notes.js +105 -1
- package/dist/src/gateway/hono/routes/notes.js.map +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +6 -0
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/routes/update.js +2 -4
- package/dist/src/gateway/hono/routes/update.js.map +1 -1
- package/dist/src/gateway/hono/routes/voice.js +2 -4
- package/dist/src/gateway/hono/routes/voice.js.map +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +2 -4
- package/dist/src/gateway/hono/routes/workspace.js.map +1 -1
- package/dist/src/gateway/hono/sse.js +9 -2
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/host.d.ts +2 -0
- package/dist/src/gateway/host.js +6 -3
- package/dist/src/gateway/host.js.map +1 -1
- package/dist/src/gateway/service/agent-runner.js +1 -1
- package/dist/src/gateway/service/agent-runner.js.map +1 -1
- package/dist/src/gateway/service/config-coordinator.js +14 -6
- package/dist/src/gateway/service/config-coordinator.js.map +1 -1
- package/dist/src/gateway/service/marketplace-service.js +1 -1
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service/run-gateway-agent.js +22 -5
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service/sse-hub.js +1 -1
- package/dist/src/gateway/service/sse-hub.js.map +1 -1
- package/dist/src/gateway/service.js +12 -5
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/mcp/channel-bridge.js +26 -2
- package/dist/src/mcp/channel-bridge.js.map +1 -1
- package/dist/src/mcp/gateway-http-client.js +24 -2
- package/dist/src/mcp/gateway-http-client.js.map +1 -1
- package/dist/src/notes/service.d.ts +13 -1
- package/dist/src/notes/service.js +237 -0
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/notes/store.d.ts +3 -0
- package/dist/src/notes/store.js +6 -2
- package/dist/src/notes/store.js.map +1 -1
- package/dist/src/notes/types.d.ts +31 -0
- package/dist/src/session/config-store.js +10 -4
- package/dist/src/session/config-store.js.map +1 -1
- package/dist/src/session/index.d.ts +1 -1
- package/dist/src/session/index.js +2 -2
- package/dist/src/session/manager.js +8 -1
- package/dist/src/session/manager.js.map +1 -1
- package/dist/src/session/session-title.d.ts +19 -3
- package/dist/src/session/session-title.js +82 -7
- package/dist/src/session/session-title.js.map +1 -1
- package/dist/src/utils/index.js +4 -4
- package/dist/src/utils/logger/config.js +2 -6
- package/dist/src/utils/logger/config.js.map +1 -1
- package/dist/src/utils/logger/context.d.ts +3 -22
- package/dist/src/utils/logger/context.js +4 -32
- package/dist/src/utils/logger/context.js.map +1 -1
- package/dist/src/utils/logger/index.d.ts +4 -7
- package/dist/src/utils/logger/index.js +9 -28
- package/dist/src/utils/logger/index.js.map +1 -1
- package/dist/src/utils/logger/log-store.d.ts +14 -32
- package/dist/src/utils/logger/log-store.js +67 -118
- package/dist/src/utils/logger/log-store.js.map +1 -1
- package/dist/src/utils/logger/log-stream.d.ts +5 -70
- package/dist/src/utils/logger/log-stream.js +67 -178
- package/dist/src/utils/logger/log-stream.js.map +1 -1
- package/dist/src/utils/logger/pino-record.d.ts +8 -0
- package/dist/src/utils/logger/pino-record.js +83 -0
- package/dist/src/utils/logger/pino-record.js.map +1 -0
- package/dist/src/utils/logger/stats.d.ts +1 -1
- package/dist/src/utils/logger/stats.js +2 -2
- package/dist/src/utils/logger/stats.js.map +1 -1
- package/dist/src/utils/logger/streams.js +18 -0
- package/dist/src/utils/logger/streams.js.map +1 -1
- package/dist/src/utils/logger/types.d.ts +0 -9
- package/dist/src/utils/logger/types.js.map +1 -1
- package/dist/src/utils/logger.js +4 -4
- package/package.json +6 -1
- package/dist/gateway/static/root/assets/agents-uwPn7ZW9.js +0 -222
- package/dist/gateway/static/root/assets/apps-page-CWKdhSPU.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-hEhW7Mbk.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-B0kvgZGR.js +0 -1
- package/dist/gateway/static/root/assets/index-BUKUv7QW.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-sOP4TXJ4.js +0 -1
- package/dist/gateway/static/root/assets/notes-page-BFQaquHU.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-CptjDKAX.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-V3p-hISB.js +0 -2
- package/dist/gateway/static/root/assets/skills-page-q2zPUJAR.js +0 -2
- package/dist/gateway/static/root/assets/url-CWWpfkq1.js +0 -3
- package/dist/gateway/static/root/assets/voice-api-key-field-DLSKUipa.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-DRRQ1A0l.js +0 -27
package/dist/src/utils/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { getLogDir, getLoggerConfig } from "./logger/config.js";
|
|
2
|
-
import {
|
|
2
|
+
import { getRuntimeLogStats } from "./logger/stats.js";
|
|
3
3
|
import { flushAndClose, isLoggerShuttingDown, setShuttingDown } from "./logger/shutdown.js";
|
|
4
4
|
import { cleanOldLogs, rotateLogs } from "./logger/rotation.js";
|
|
5
|
-
import {
|
|
5
|
+
import { getAsyncLogContext, inboundCorrelationMetadataFromAsyncLogContext, runWithLogContext, updateAsyncLogContext } from "./logger/context.js";
|
|
6
6
|
import { isLogRedactionEnabled, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo } from "./logger/redact.js";
|
|
7
7
|
import { exportLog, flushExporters, getExporters, initializeExporters } from "./logger/exporters.js";
|
|
8
8
|
import { configureAuditLog, getAuditConfig, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange } from "./logger/audit.js";
|
|
9
|
-
import { Pino as pino, baseLogger as logger, createExtensionLogger, createLogger, createModuleLogger,
|
|
9
|
+
import { Pino as pino, baseLogger as logger, createExtensionLogger, createLogger, createModuleLogger, createServiceLogger, getLogLevel, isLevelEnabled, setLogLevel, withLogLevel } from "./logger/index.js";
|
|
10
10
|
import { init_logger } from "./logger.js";
|
|
11
11
|
import { createPathResolver, getWorkspacePath, resolveToCwd } from "./helpers.js";
|
|
12
12
|
//#region src/utils/index.ts
|
|
13
13
|
init_logger();
|
|
14
14
|
//#endregion
|
|
15
|
-
export { pino as Pino, logger as baseLogger, logger, cleanOldLogs,
|
|
15
|
+
export { pino as Pino, logger as baseLogger, logger, cleanOldLogs, configureAuditLog, createExtensionLogger, createLogger, createModuleLogger, createPathResolver, createServiceLogger, exportLog, flushAndClose, flushExporters, getAsyncLogContext, getAuditConfig, getExporters, getLogDir, getLogLevel, getLoggerConfig, getRuntimeLogStats, getWorkspacePath, inboundCorrelationMetadataFromAsyncLogContext, initializeExporters, isLevelEnabled, isLogRedactionEnabled, isLoggerShuttingDown, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo, resolveToCwd, rotateLogs, runWithLogContext, setLogLevel, setShuttingDown, updateAsyncLogContext, withLogLevel };
|
|
16
16
|
|
|
17
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -10,9 +10,7 @@ import path from "path";
|
|
|
10
10
|
*/
|
|
11
11
|
function loadConfig() {
|
|
12
12
|
const config = { ...DEFAULT_CONFIG };
|
|
13
|
-
|
|
14
|
-
if (logLevel) config.level = logLevel.toLowerCase();
|
|
15
|
-
else if (process.env.DEBUG) config.level = "debug";
|
|
13
|
+
if (process.env.XOPC_LOG_LEVEL) config.level = process.env.XOPC_LOG_LEVEL.toLowerCase();
|
|
16
14
|
if (process.env.XOPC_LOG_DIR) config.logDir = process.env.XOPC_LOG_DIR;
|
|
17
15
|
if (process.env.XOPC_LOG_CONSOLE === "false") config.consoleOutput = false;
|
|
18
16
|
if (process.env.XOPC_LOG_FILE === "false") config.fileOutput = false;
|
|
@@ -42,9 +40,7 @@ var init_config = __esmMin((() => {
|
|
|
42
40
|
errorFileOutput: true,
|
|
43
41
|
retentionDays: 7,
|
|
44
42
|
maxFileSizeMB: 100,
|
|
45
|
-
prettyPrint: false
|
|
46
|
-
async: true,
|
|
47
|
-
debugSampleRate: 1
|
|
43
|
+
prettyPrint: false
|
|
48
44
|
};
|
|
49
45
|
config = loadConfig();
|
|
50
46
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../../../../src/utils/logger/config.ts"],"sourcesContent":["/**\n * Logger Configuration\n * Centralized configuration loading from environment variables\n */\n\nimport path from 'path';\nimport type { LoggerConfig, LogLevel } from './types.js';\n\nconst DEFAULT_CONFIG: LoggerConfig = {\n level: 'info',\n logDir: path.join(process.env.HOME || '.', '.xopc', 'logs'),\n consoleOutput: true,\n fileOutput: true,\n errorFileOutput: true,\n retentionDays: 7,\n maxFileSizeMB: 100,\n prettyPrint: false,\n
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../../src/utils/logger/config.ts"],"sourcesContent":["/**\n * Logger Configuration\n * Centralized configuration loading from environment variables\n */\n\nimport path from 'path';\nimport type { LoggerConfig, LogLevel } from './types.js';\n\nconst DEFAULT_CONFIG: LoggerConfig = {\n level: 'info',\n logDir: path.join(process.env.HOME || '.', '.xopc', 'logs'),\n consoleOutput: true,\n fileOutput: true,\n errorFileOutput: true,\n retentionDays: 7,\n maxFileSizeMB: 100,\n prettyPrint: false,\n};\n\n/**\n * Load configuration from environment variables\n */\nexport function loadConfig(): LoggerConfig {\n const config: LoggerConfig = { ...DEFAULT_CONFIG };\n\n // Log level\n if (process.env.XOPC_LOG_LEVEL) {\n config.level = process.env.XOPC_LOG_LEVEL.toLowerCase() as LogLevel;\n }\n\n // Log directory\n if (process.env.XOPC_LOG_DIR) {\n config.logDir = process.env.XOPC_LOG_DIR;\n }\n\n // Output options\n if (process.env.XOPC_LOG_CONSOLE === 'false') {\n config.consoleOutput = false;\n }\n if (process.env.XOPC_LOG_FILE === 'false') {\n config.fileOutput = false;\n }\n\n // Retention\n if (process.env.XOPC_LOG_RETENTION_DAYS) {\n config.retentionDays = parseInt(process.env.XOPC_LOG_RETENTION_DAYS, 10);\n }\n\n // Pretty print for development\n if (process.env.NODE_ENV === 'development' || process.env.XOPC_PRETTY_LOGS === 'true') {\n config.prettyPrint = true;\n }\n\n return config;\n}\n\n// Singleton config instance\nexport const config = loadConfig();\n\n/**\n * Get current log directory\n */\nexport function getLogDir(): string {\n return config.logDir;\n}\n\n/**\n * Get logger configuration\n */\nexport function getLoggerConfig(): Readonly<LoggerConfig> {\n return { ...config };\n}\n"],"mappings":";;;;;;;;;;AAsBA,SAAgB,aAA2B;CACzC,MAAM,SAAuB,EAAE,GAAG,gBAAgB;AAGlD,KAAI,QAAQ,IAAI,eACd,QAAO,QAAQ,QAAQ,IAAI,eAAe,aAAa;AAIzD,KAAI,QAAQ,IAAI,aACd,QAAO,SAAS,QAAQ,IAAI;AAI9B,KAAI,QAAQ,IAAI,qBAAqB,QACnC,QAAO,gBAAgB;AAEzB,KAAI,QAAQ,IAAI,kBAAkB,QAChC,QAAO,aAAa;AAItB,KAAI,QAAQ,IAAI,wBACd,QAAO,gBAAgB,SAAS,QAAQ,IAAI,yBAAyB,GAAG;AAI1E,KAA8C,QAAQ,IAAI,qBAAqB,OAC7E,QAAO,cAAc;AAGvB,QAAO;;;;;AAST,SAAgB,YAAoB;AAClC,QAAO,OAAO;;;;;AAMhB,SAAgB,kBAA0C;AACxD,QAAO,EAAE,GAAG,QAAQ;;;;AA9DhB,kBAA+B;EACnC,OAAO;EACP,QAAQ,KAAK,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,OAAO;EAC3D,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,aAAa;EACd;AAwCY,UAAS,YAAY"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Logger Context
|
|
3
|
-
*
|
|
3
|
+
* AsyncLocalStorage correlation for structured logging
|
|
4
4
|
*/
|
|
5
|
-
import type { LogContext
|
|
5
|
+
import type { LogContext } from './types.js';
|
|
6
6
|
/** Correlation fields merged into every log line while the store is active (via pino mixin). */
|
|
7
7
|
declare const ASYNC_LOG_CORRELATION_KEYS: readonly ["requestId", "sessionId", "userId", "correlationId"];
|
|
8
8
|
type AsyncLogCorrelationKey = (typeof ASYNC_LOG_CORRELATION_KEYS)[number];
|
|
@@ -21,25 +21,6 @@ export declare function updateAsyncLogContext(partial: LogContext): void;
|
|
|
21
21
|
/** Keys injected from async context into log records (used by logger mixin). */
|
|
22
22
|
export declare function getAsyncLogCorrelationKeys(): readonly AsyncLogCorrelationKey[];
|
|
23
23
|
export declare function inboundCorrelationMetadataFromAsyncLogContext(): Record<string, unknown> | undefined;
|
|
24
|
-
/**
|
|
25
|
-
* Merge two contexts
|
|
26
|
-
*/
|
|
24
|
+
/** Shallow-merge two log context objects. */
|
|
27
25
|
export declare function mergeContext(base: LogContext, additional: LogContext): LogContext;
|
|
28
|
-
/**
|
|
29
|
-
* Store context for a request ID
|
|
30
|
-
*/
|
|
31
|
-
export declare function setRequestContext(requestId: string, context: LogContext): void;
|
|
32
|
-
/**
|
|
33
|
-
* Get context for a request ID
|
|
34
|
-
*/
|
|
35
|
-
export declare function getRequestContext(requestId: string): LogContext | undefined;
|
|
36
|
-
/**
|
|
37
|
-
* Clear context for a request ID
|
|
38
|
-
*/
|
|
39
|
-
export declare function clearRequestContext(requestId: string): void;
|
|
40
|
-
/**
|
|
41
|
-
* Create a child logger with additional context
|
|
42
|
-
* This is a placeholder for the actual implementation
|
|
43
|
-
*/
|
|
44
|
-
export declare function withContext(logger: ContextualLogger, context: LogContext): ContextualLogger;
|
|
45
26
|
export {};
|
|
@@ -3,7 +3,7 @@ import { AsyncLocalStorage } from "node:async_hooks";
|
|
|
3
3
|
//#region src/utils/logger/context.ts
|
|
4
4
|
/**
|
|
5
5
|
* Logger Context
|
|
6
|
-
*
|
|
6
|
+
* AsyncLocalStorage correlation for structured logging
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
9
|
* Run *fn* with merged async log context. Propagates through async/await (Node AsyncLocalStorage).
|
|
@@ -40,43 +40,15 @@ function inboundCorrelationMetadataFromAsyncLogContext() {
|
|
|
40
40
|
}
|
|
41
41
|
return Object.keys(meta).length > 0 ? meta : void 0;
|
|
42
42
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Merge two contexts
|
|
45
|
-
*/
|
|
43
|
+
/** Shallow-merge two log context objects. */
|
|
46
44
|
function mergeContext(base, additional) {
|
|
47
45
|
return {
|
|
48
46
|
...base,
|
|
49
47
|
...additional
|
|
50
48
|
};
|
|
51
49
|
}
|
|
52
|
-
|
|
53
|
-
* Store context for a request ID
|
|
54
|
-
*/
|
|
55
|
-
function setRequestContext(requestId, context) {
|
|
56
|
-
contextStore.set(requestId, context);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Get context for a request ID
|
|
60
|
-
*/
|
|
61
|
-
function getRequestContext(requestId) {
|
|
62
|
-
return contextStore.get(requestId);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Clear context for a request ID
|
|
66
|
-
*/
|
|
67
|
-
function clearRequestContext(requestId) {
|
|
68
|
-
contextStore.delete(requestId);
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Create a child logger with additional context
|
|
72
|
-
* This is a placeholder for the actual implementation
|
|
73
|
-
*/
|
|
74
|
-
function withContext(logger, context) {
|
|
75
|
-
return logger.withContext(context);
|
|
76
|
-
}
|
|
77
|
-
var contextStore, ASYNC_LOG_CORRELATION_KEYS, logContextStorage, INBOUND_METADATA_FROM_ASYNC;
|
|
50
|
+
var ASYNC_LOG_CORRELATION_KEYS, logContextStorage, INBOUND_METADATA_FROM_ASYNC;
|
|
78
51
|
var init_context = __esmMin((() => {
|
|
79
|
-
contextStore = /* @__PURE__ */ new Map();
|
|
80
52
|
ASYNC_LOG_CORRELATION_KEYS = [
|
|
81
53
|
"requestId",
|
|
82
54
|
"sessionId",
|
|
@@ -92,6 +64,6 @@ var init_context = __esmMin((() => {
|
|
|
92
64
|
}));
|
|
93
65
|
//#endregion
|
|
94
66
|
init_context();
|
|
95
|
-
export {
|
|
67
|
+
export { getAsyncLogContext, getAsyncLogCorrelationKeys, inboundCorrelationMetadataFromAsyncLogContext, init_context, mergeContext, runWithLogContext, updateAsyncLogContext };
|
|
96
68
|
|
|
97
69
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../../src/utils/logger/context.ts"],"sourcesContent":["/**\n * Logger Context\n *
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../../src/utils/logger/context.ts"],"sourcesContent":["/**\n * Logger Context\n * AsyncLocalStorage correlation for structured logging\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nimport type { LogContext } from './types.js';\n\n/** Correlation fields merged into every log line while the store is active (via pino mixin). */\nconst ASYNC_LOG_CORRELATION_KEYS = ['requestId', 'sessionId', 'userId', 'correlationId'] as const;\n\ntype AsyncLogCorrelationKey = (typeof ASYNC_LOG_CORRELATION_KEYS)[number];\n\nconst logContextStorage = new AsyncLocalStorage<{ ctx: LogContext }>();\n\n/**\n * Run *fn* with merged async log context. Propagates through async/await (Node AsyncLocalStorage).\n * Nested calls merge over the parent context (shallow per key).\n */\nexport function runWithLogContext<T>(context: LogContext, fn: () => T): T {\n const parent = logContextStorage.getStore();\n const merged = parent ? mergeContext(parent.ctx, context) : { ...context };\n return logContextStorage.run({ ctx: { ...merged } }, fn);\n}\n\n/** Current async log context, if any. */\nexport function getAsyncLogContext(): LogContext | undefined {\n return logContextStorage.getStore()?.ctx;\n}\n\n/**\n * Shallow-merge fields into the current async log context (e.g. set sessionId after parsing a body).\n * No-op when not inside {@link runWithLogContext}.\n */\nexport function updateAsyncLogContext(partial: LogContext): void {\n const ref = logContextStorage.getStore();\n if (ref) {\n ref.ctx = mergeContext(ref.ctx, partial);\n }\n}\n\n/** Keys injected from async context into log records (used by logger mixin). */\nexport function getAsyncLogCorrelationKeys(): readonly AsyncLogCorrelationKey[] {\n return ASYNC_LOG_CORRELATION_KEYS;\n}\n\n/**\n * Fields to copy from ALS onto {@link InboundMessage.metadata} when the gateway enqueues\n * a message for the agent bus. Omits `sessionId` so channel routing / sessionKey stays\n * authoritative; the agent sets log sessionId after `routeMessage`.\n */\nconst INBOUND_METADATA_FROM_ASYNC: readonly (keyof LogContext)[] = [\n 'requestId',\n 'correlationId',\n 'userId',\n];\n\nexport function inboundCorrelationMetadataFromAsyncLogContext(): Record<string, unknown> | undefined {\n const ctx = getAsyncLogContext();\n if (!ctx) return undefined;\n const meta: Record<string, unknown> = {};\n for (const key of INBOUND_METADATA_FROM_ASYNC) {\n const v = ctx[key];\n if (v !== undefined && v !== '') {\n meta[key] = v;\n }\n }\n return Object.keys(meta).length > 0 ? meta : undefined;\n}\n\n/** Shallow-merge two log context objects. */\nexport function mergeContext(base: LogContext, additional: LogContext): LogContext {\n return { ...base, ...additional };\n}\n"],"mappings":";;;;;;;;;;;AAoBA,SAAgB,kBAAqB,SAAqB,IAAgB;CACxE,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,SAAS,SAAS,aAAa,OAAO,KAAK,QAAQ,GAAG,EAAE,GAAG,SAAS;AAC1E,QAAO,kBAAkB,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,EAAE,GAAG;;;AAI1D,SAAgB,qBAA6C;AAC3D,QAAO,kBAAkB,UAAU,EAAE;;;;;;AAOvC,SAAgB,sBAAsB,SAA2B;CAC/D,MAAM,MAAM,kBAAkB,UAAU;AACxC,KAAI,IACF,KAAI,MAAM,aAAa,IAAI,KAAK,QAAQ;;;AAK5C,SAAgB,6BAAgE;AAC9E,QAAO;;AAcT,SAAgB,gDAAqF;CACnG,MAAM,MAAM,oBAAoB;AAChC,KAAI,CAAC,IAAK,QAAO,KAAA;CACjB,MAAM,OAAgC,EAAE;AACxC,MAAK,MAAM,OAAO,6BAA6B;EAC7C,MAAM,IAAI,IAAI;AACd,MAAI,MAAM,KAAA,KAAa,MAAM,GAC3B,MAAK,OAAO;;AAGhB,QAAO,OAAO,KAAK,KAAK,CAAC,SAAS,IAAI,OAAO,KAAA;;;AAI/C,SAAgB,aAAa,MAAkB,YAAoC;AACjF,QAAO;EAAE,GAAG;EAAM,GAAG;EAAY;;;;AA/D7B,8BAA6B;EAAC;EAAa;EAAa;EAAU;EAAgB;AAIlF,qBAAoB,IAAI,mBAAwC;AAsChE,+BAA6D;EACjE;EACA;EACA;EACD"}
|
|
@@ -10,26 +10,23 @@
|
|
|
10
10
|
import pino from 'pino';
|
|
11
11
|
import type { LogLevel, LogContext, ContextualLogger } from './types.js';
|
|
12
12
|
import { getLogDir, getLoggerConfig } from './config.js';
|
|
13
|
-
import {
|
|
13
|
+
import { getRuntimeLogStats } from './stats.js';
|
|
14
14
|
import { isLoggerShuttingDown, flushAndClose, setShuttingDown } from './shutdown.js';
|
|
15
15
|
import { rotateLogs, cleanOldLogs } from './rotation.js';
|
|
16
16
|
export declare const logger: ContextualLogger;
|
|
17
|
-
export declare function createLogger(
|
|
17
|
+
export declare function createLogger(module: string, context?: LogContext): ContextualLogger;
|
|
18
18
|
export declare function createModuleLogger(moduleName: string, _modulePath?: string): ContextualLogger;
|
|
19
19
|
export declare function createExtensionLogger(extensionName: string): ContextualLogger;
|
|
20
20
|
export declare function createServiceLogger(serviceId: string): ContextualLogger;
|
|
21
|
-
export declare function createRequestLogger(requestId: string, initialContext?: LogContext): ContextualLogger;
|
|
22
21
|
export declare function setLogLevel(level: LogLevel): void;
|
|
23
22
|
export declare function getLogLevel(): LogLevel;
|
|
24
23
|
export declare function withLogLevel<T>(level: LogLevel, fn: () => T): T;
|
|
25
24
|
export declare function isLevelEnabled(level: LogLevel): boolean;
|
|
26
25
|
export type { LogLevel, LogContext, LogEntry, LoggerConfig, LogFileMeta, LogQuery, LogStats, RotationResult, ContextualLogger, } from './types.js';
|
|
27
|
-
export { getLogDir, getLoggerConfig,
|
|
26
|
+
export { getLogDir, getLoggerConfig, getRuntimeLogStats, isLoggerShuttingDown, flushAndClose, setShuttingDown, rotateLogs, cleanOldLogs, };
|
|
28
27
|
export { type LogExporter, type ExporterConfig, type LokiConfig, type ElkConfig, type DatadogConfig, type WebhookConfig, initializeExporters, exportLog, flushExporters, getExporters, } from './exporters.js';
|
|
29
28
|
export { redactSensitiveInfo, redactObject, redactPemBlock, redactSecret, isLogRedactionEnabled, } from './redact.js';
|
|
30
29
|
export { type AuditEvent, type AuditEventType, type AuditLogConfig, logAuditEvent, logAuthEvent, logConfigChange, logPermissionChange, logDataAccess, configureAuditLog, getAuditConfig, } from './audit.js';
|
|
31
|
-
export { logger as default };
|
|
32
30
|
export { logger as baseLogger };
|
|
33
31
|
export { pino as Pino };
|
|
34
|
-
export
|
|
35
|
-
export { runWithLogContext, getAsyncLogContext, updateAsyncLogContext, inboundCorrelationMetadataFromAsyncLogContext, setRequestContext as setRequestLogger, clearRequestContext as clearRequestLogger, } from './context.js';
|
|
32
|
+
export { runWithLogContext, getAsyncLogContext, updateAsyncLogContext, inboundCorrelationMetadataFromAsyncLogContext, } from './context.js';
|
|
@@ -2,10 +2,10 @@ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
|
|
|
2
2
|
import { PACKAGE_VERSION, init_package_version } from "../../package-version.js";
|
|
3
3
|
import { config, getLogDir, getLoggerConfig, init_config } from "./config.js";
|
|
4
4
|
import { init_streams, initializeStreams } from "./streams.js";
|
|
5
|
-
import {
|
|
5
|
+
import { getRuntimeLogStats, incrementStats, init_stats } from "./stats.js";
|
|
6
6
|
import { flushAndClose, init_shutdown, isLoggerShuttingDown, setShuttingDown } from "./shutdown.js";
|
|
7
7
|
import { cleanOldLogs, init_rotation, rotateLogs } from "./rotation.js";
|
|
8
|
-
import {
|
|
8
|
+
import { getAsyncLogContext, getAsyncLogCorrelationKeys, inboundCorrelationMetadataFromAsyncLogContext, init_context, mergeContext, runWithLogContext, updateAsyncLogContext } from "./context.js";
|
|
9
9
|
import { init_redact, isLogRedactionEnabled, redactLogRecord, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo } from "./redact.js";
|
|
10
10
|
import { exportLog, flushExporters, getExporters, init_exporters, initializeExporters } from "./exporters.js";
|
|
11
11
|
import { configureAuditLog, getAuditConfig, init_audit, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange } from "./audit.js";
|
|
@@ -25,7 +25,8 @@ function wrapLogMethod(method, defaultContext, level) {
|
|
|
25
25
|
if (isLoggerShuttingDown()) {
|
|
26
26
|
if (level !== "error" && level !== "fatal") return;
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
const module = defaultContext.module;
|
|
29
|
+
incrementStats(level, module);
|
|
29
30
|
return msg !== void 0 ? method.call(this, data, msg) : method.call(this, data);
|
|
30
31
|
};
|
|
31
32
|
}
|
|
@@ -35,9 +36,6 @@ function createProxyLogger(logger, defaultContext = {}) {
|
|
|
35
36
|
if (prop === "withContext") return (context) => {
|
|
36
37
|
return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));
|
|
37
38
|
};
|
|
38
|
-
if (prop === "childContext") return (context) => {
|
|
39
|
-
return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));
|
|
40
|
-
};
|
|
41
39
|
const value = target[propKey];
|
|
42
40
|
if (typeof value === "function") {
|
|
43
41
|
if ([
|
|
@@ -52,9 +50,9 @@ function createProxyLogger(logger, defaultContext = {}) {
|
|
|
52
50
|
return value;
|
|
53
51
|
} });
|
|
54
52
|
}
|
|
55
|
-
function createLogger(
|
|
56
|
-
return createProxyLogger(baseLogger.child({
|
|
57
|
-
module
|
|
53
|
+
function createLogger(module, context) {
|
|
54
|
+
return createProxyLogger(baseLogger.child({ module }), {
|
|
55
|
+
module,
|
|
58
56
|
...context
|
|
59
57
|
});
|
|
60
58
|
}
|
|
@@ -73,13 +71,6 @@ function createServiceLogger(serviceId) {
|
|
|
73
71
|
scope: serviceId
|
|
74
72
|
});
|
|
75
73
|
}
|
|
76
|
-
function createRequestLogger(requestId, initialContext) {
|
|
77
|
-
const context = {
|
|
78
|
-
requestId,
|
|
79
|
-
...initialContext
|
|
80
|
-
};
|
|
81
|
-
return createProxyLogger(baseLogger.child({ requestId }), context);
|
|
82
|
-
}
|
|
83
74
|
function setLogLevel(level) {
|
|
84
75
|
baseLogger.level = level;
|
|
85
76
|
}
|
|
@@ -105,18 +96,8 @@ function isLevelEnabled(level) {
|
|
|
105
96
|
fatal: 60,
|
|
106
97
|
silent: Number.MAX_VALUE
|
|
107
98
|
};
|
|
108
|
-
|
|
109
|
-
trace: 10,
|
|
110
|
-
debug: 20,
|
|
111
|
-
info: 30,
|
|
112
|
-
warn: 40,
|
|
113
|
-
error: 50,
|
|
114
|
-
fatal: 60,
|
|
115
|
-
silent: Number.MAX_VALUE
|
|
116
|
-
};
|
|
117
|
-
return levelValues[level] >= currentLevelValues[getLogLevel()];
|
|
99
|
+
return levelValues[level] >= levelValues[getLogLevel()];
|
|
118
100
|
}
|
|
119
|
-
function registerShutdownHandler() {}
|
|
120
101
|
var pinoOptions, streams, baseLogger, logger;
|
|
121
102
|
var init_logger = __esmMin((() => {
|
|
122
103
|
init_config();
|
|
@@ -199,6 +180,6 @@ var init_logger = __esmMin((() => {
|
|
|
199
180
|
}));
|
|
200
181
|
//#endregion
|
|
201
182
|
init_logger();
|
|
202
|
-
export { pino as Pino, logger as baseLogger, logger
|
|
183
|
+
export { pino as Pino, logger as baseLogger, logger, cleanOldLogs, configureAuditLog, createExtensionLogger, createLogger, createModuleLogger, createServiceLogger, exportLog, flushAndClose, flushExporters, getAsyncLogContext, getAuditConfig, getExporters, getLogDir, getLogLevel, getLoggerConfig, getRuntimeLogStats, inboundCorrelationMetadataFromAsyncLogContext, init_logger, initializeExporters, isLevelEnabled, isLogRedactionEnabled, isLoggerShuttingDown, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo, rotateLogs, runWithLogContext, setLogLevel, setShuttingDown, updateAsyncLogContext, withLogLevel };
|
|
203
184
|
|
|
204
185
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/utils/logger/index.ts"],"sourcesContent":["/**\n * Modular Logger System\n * \n * Production-grade logging with:\n * - Modular architecture\n * - Context tracking\n * - Statistics\n * - Graceful shutdown\n */\n\nimport pino from 'pino';\nimport type { Logger as PinoLogger } from 'pino';\nimport type { LogLevel, LogContext, ContextualLogger } from './types.js';\n\n// Internal modules\nimport { config, getLogDir, getLoggerConfig } from './config.js';\nimport { initializeStreams } from './streams.js';\nimport { incrementStats, getLogStats } from './stats.js';\nimport { isLoggerShuttingDown, flushAndClose, setShuttingDown } from './shutdown.js';\nimport { rotateLogs, cleanOldLogs } from './rotation.js';\nimport { getAsyncLogContext, getAsyncLogCorrelationKeys, mergeContext } from './context.js';\nimport { redactLogRecord } from './redact.js';\nimport { PACKAGE_VERSION } from '../../package-version.js';\n\n// ============================================\n// Base Logger Creation\n// ============================================\n\nconst customLevels = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60,\n};\n\nconst pinoOptions: pino.LoggerOptions = {\n level: config.level,\n base: {\n service: 'xopc',\n version: process.env.npm_package_version || PACKAGE_VERSION,\n },\n timestamp: pino.stdTimeFunctions.isoTime,\n mixin(mergeObject, _level, logger) {\n const ctx = getAsyncLogContext();\n if (!ctx) return {};\n const bindings =\n logger && typeof logger.bindings === 'function'\n ? (logger.bindings() as Record<string, unknown>)\n : {};\n const mo = mergeObject as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of getAsyncLogCorrelationKeys()) {\n const v = ctx[key];\n if (v === undefined || v === '') continue;\n if (mo[key] !== undefined) continue;\n if (bindings[key] !== undefined) continue;\n out[key] = v;\n }\n return out;\n },\n formatters: {\n level: (label) => ({ level: label }),\n bindings: (bindings) => ({\n pid: bindings.pid,\n host: bindings.host,\n }),\n log: (object) => {\n // Serialize errors with full stack trace\n if (object.err && object.err instanceof Error) {\n object.err = {\n name: object.err.name,\n message: object.err.message,\n stack: object.err.stack,\n cause: object.err.cause instanceof Error \n ? { name: object.err.cause.name, message: object.err.cause.message, stack: object.err.cause.stack }\n : object.err.cause,\n };\n }\n for (const key of Object.keys(object)) {\n if (object[key] instanceof Error) {\n object[key] = {\n name: object[key].name,\n message: object[key].message,\n stack: object[key].stack,\n };\n }\n }\n return redactLogRecord(object as Record<string, unknown>);\n },\n },\n customLevels,\n};\n\n// Add pretty print for development\nif (config.prettyPrint) {\n pinoOptions.transport = {\n target: 'pino-pretty',\n options: {\n colorize: true,\n translateTime: 'SYS:standard',\n ignore: 'pid,host',\n },\n };\n}\n\nconst streams = initializeStreams();\nconst baseLogger = pino(pinoOptions, pino.multistream(streams));\n\n// ============================================\n// Contextual Logger\n// ============================================\n\nfunction wrapLogMethod(method: Function, defaultContext: LogContext, level: LogLevel) {\n return function (data: unknown, msg?: string) {\n // During shutdown, only allow error and fatal logs\n if (isLoggerShuttingDown()) {\n if (level !== 'error' && level !== 'fatal') {\n return;\n }\n }\n \n const module = (defaultContext.module || defaultContext.prefix) as string | undefined;\n incrementStats(level, module);\n \n return msg !== undefined ? method.call(this, data, msg) : method.call(this, data);\n };\n}\n\nfunction createProxyLogger(logger: PinoLogger, defaultContext: LogContext = {}): ContextualLogger {\n const proxy = new Proxy(logger, {\n get(target, prop) {\n const propKey = prop as string;\n \n if (prop === 'withContext') {\n return (context: LogContext) => {\n return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));\n };\n }\n if (prop === 'childContext') {\n return (context: LogContext) => {\n return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));\n };\n }\n \n const value = (target as unknown as Record<string, unknown>)[propKey];\n if (typeof value === 'function') {\n if (['trace', 'debug', 'info', 'warn', 'error', 'fatal'].includes(propKey)) {\n return wrapLogMethod(value, defaultContext, propKey as LogLevel);\n }\n }\n \n return value;\n },\n });\n\n return proxy as ContextualLogger;\n}\n\n// ============================================\n// Public API\n// ============================================\n\nexport const logger = createProxyLogger(baseLogger);\n\nexport function createLogger(prefix: string, context?: LogContext): ContextualLogger {\n const child = baseLogger.child({ prefix });\n return createProxyLogger(child, { module: prefix, ...context });\n}\n\nexport function createModuleLogger(moduleName: string, _modulePath?: string): ContextualLogger {\n const child = baseLogger.child({ module: moduleName });\n return createProxyLogger(child, { module: moduleName });\n}\n\nexport function createExtensionLogger(extensionName: string): ContextualLogger {\n const child = baseLogger.child({ extension: extensionName });\n return createProxyLogger(child, { extension: extensionName });\n}\n\nexport function createServiceLogger(serviceId: string): ContextualLogger {\n const child = baseLogger.child({ service: 'cron', scope: serviceId });\n return createProxyLogger(child, { service: 'cron', scope: serviceId });\n}\n\nexport function createRequestLogger(requestId: string, initialContext?: LogContext): ContextualLogger {\n const context: LogContext = { requestId, ...initialContext };\n const child = baseLogger.child({ requestId });\n return createProxyLogger(child, context);\n}\n\n// ============================================\n// Log Level Management\n// ============================================\n\nexport function setLogLevel(level: LogLevel): void {\n baseLogger.level = level;\n}\n\nexport function getLogLevel(): LogLevel {\n return baseLogger.level as LogLevel;\n}\n\nexport function withLogLevel<T>(level: LogLevel, fn: () => T): T {\n const previous = baseLogger.level;\n baseLogger.level = level;\n try {\n return fn();\n } finally {\n baseLogger.level = previous;\n }\n}\n\nexport function isLevelEnabled(level: LogLevel): boolean {\n const levelValues: Record<LogLevel, number> = {\n trace: 10, debug: 20, info: 30, warn: 40, error: 50, fatal: 60, silent: Number.MAX_VALUE,\n };\n const currentLevelValues: Record<LogLevel, number> = {\n trace: 10, debug: 20, info: 30, warn: 40, error: 50, fatal: 60, silent: Number.MAX_VALUE,\n };\n return levelValues[level] >= currentLevelValues[getLogLevel()];\n}\n\n// ============================================\n// Re-exports\n// ============================================\n\nexport type {\n LogLevel,\n LogContext,\n LogEntry,\n LoggerConfig,\n LogFileMeta,\n LogQuery,\n LogStats,\n RotationResult,\n ContextualLogger,\n} from './types.js';\n\nexport {\n // Config\n getLogDir,\n getLoggerConfig,\n \n // Stats\n getLogStats,\n \n // Shutdown\n isLoggerShuttingDown,\n flushAndClose,\n setShuttingDown,\n \n // Rotation\n rotateLogs,\n cleanOldLogs,\n};\n\n// Exporters\nexport {\n type LogExporter,\n type ExporterConfig,\n type LokiConfig,\n type ElkConfig,\n type DatadogConfig,\n type WebhookConfig,\n initializeExporters,\n exportLog,\n flushExporters,\n getExporters,\n} from './exporters.js';\n\nexport {\n redactSensitiveInfo,\n redactObject,\n redactPemBlock,\n redactSecret,\n isLogRedactionEnabled,\n} from './redact.js';\n\n// Audit Log\nexport {\n type AuditEvent,\n type AuditEventType,\n type AuditLogConfig,\n logAuditEvent,\n logAuthEvent,\n logConfigChange,\n logPermissionChange,\n logDataAccess,\n configureAuditLog,\n getAuditConfig,\n} from './audit.js';\n\nexport { logger as default };\nexport { logger as baseLogger };\nexport { pino as Pino };\n\nexport function registerShutdownHandler(): void {}\n\nexport {\n runWithLogContext,\n getAsyncLogContext,\n updateAsyncLogContext,\n inboundCorrelationMetadataFromAsyncLogContext,\n setRequestContext as setRequestLogger,\n clearRequestContext as clearRequestLogger,\n} from './context.js';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/utils/logger/index.ts"],"sourcesContent":["/**\n * Modular Logger System\n * \n * Production-grade logging with:\n * - Modular architecture\n * - Context tracking\n * - Statistics\n * - Graceful shutdown\n */\n\nimport pino from 'pino';\nimport type { Logger as PinoLogger } from 'pino';\nimport type { LogLevel, LogContext, ContextualLogger } from './types.js';\n\n// Internal modules\nimport { config, getLogDir, getLoggerConfig } from './config.js';\nimport { initializeStreams } from './streams.js';\nimport { incrementStats, getRuntimeLogStats } from './stats.js';\nimport { isLoggerShuttingDown, flushAndClose, setShuttingDown } from './shutdown.js';\nimport { rotateLogs, cleanOldLogs } from './rotation.js';\nimport { getAsyncLogContext, getAsyncLogCorrelationKeys, mergeContext } from './context.js';\nimport { redactLogRecord } from './redact.js';\nimport { PACKAGE_VERSION } from '../../package-version.js';\n\n// ============================================\n// Base Logger Creation\n// ============================================\n\nconst customLevels = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60,\n};\n\nconst pinoOptions: pino.LoggerOptions = {\n level: config.level,\n base: {\n service: 'xopc',\n version: process.env.npm_package_version || PACKAGE_VERSION,\n },\n timestamp: pino.stdTimeFunctions.isoTime,\n mixin(mergeObject, _level, logger) {\n const ctx = getAsyncLogContext();\n if (!ctx) return {};\n const bindings =\n logger && typeof logger.bindings === 'function'\n ? (logger.bindings() as Record<string, unknown>)\n : {};\n const mo = mergeObject as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of getAsyncLogCorrelationKeys()) {\n const v = ctx[key];\n if (v === undefined || v === '') continue;\n if (mo[key] !== undefined) continue;\n if (bindings[key] !== undefined) continue;\n out[key] = v;\n }\n return out;\n },\n formatters: {\n level: (label) => ({ level: label }),\n bindings: (bindings) => ({\n pid: bindings.pid,\n host: bindings.host,\n }),\n log: (object) => {\n // Serialize errors with full stack trace\n if (object.err && object.err instanceof Error) {\n object.err = {\n name: object.err.name,\n message: object.err.message,\n stack: object.err.stack,\n cause: object.err.cause instanceof Error \n ? { name: object.err.cause.name, message: object.err.cause.message, stack: object.err.cause.stack }\n : object.err.cause,\n };\n }\n for (const key of Object.keys(object)) {\n if (object[key] instanceof Error) {\n object[key] = {\n name: object[key].name,\n message: object[key].message,\n stack: object[key].stack,\n };\n }\n }\n return redactLogRecord(object as Record<string, unknown>);\n },\n },\n customLevels,\n};\n\n// Add pretty print for development\nif (config.prettyPrint) {\n pinoOptions.transport = {\n target: 'pino-pretty',\n options: {\n colorize: true,\n translateTime: 'SYS:standard',\n ignore: 'pid,host',\n },\n };\n}\n\nconst streams = initializeStreams();\nconst baseLogger = pino(pinoOptions, pino.multistream(streams));\n\n// ============================================\n// Contextual Logger\n// ============================================\n\nfunction wrapLogMethod(method: Function, defaultContext: LogContext, level: LogLevel) {\n return function (data: unknown, msg?: string) {\n // During shutdown, only allow error and fatal logs\n if (isLoggerShuttingDown()) {\n if (level !== 'error' && level !== 'fatal') {\n return;\n }\n }\n \n const module = defaultContext.module as string | undefined;\n incrementStats(level, module);\n \n return msg !== undefined ? method.call(this, data, msg) : method.call(this, data);\n };\n}\n\nfunction createProxyLogger(logger: PinoLogger, defaultContext: LogContext = {}): ContextualLogger {\n const proxy = new Proxy(logger, {\n get(target, prop) {\n const propKey = prop as string;\n \n if (prop === 'withContext') {\n return (context: LogContext) => {\n return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));\n };\n }\n \n const value = (target as unknown as Record<string, unknown>)[propKey];\n if (typeof value === 'function') {\n if (['trace', 'debug', 'info', 'warn', 'error', 'fatal'].includes(propKey)) {\n return wrapLogMethod(value, defaultContext, propKey as LogLevel);\n }\n }\n \n return value;\n },\n });\n\n return proxy as ContextualLogger;\n}\n\n// ============================================\n// Public API\n// ============================================\n\nexport const logger = createProxyLogger(baseLogger);\n\nexport function createLogger(module: string, context?: LogContext): ContextualLogger {\n const child = baseLogger.child({ module });\n return createProxyLogger(child, { module, ...context });\n}\n\nexport function createModuleLogger(moduleName: string, _modulePath?: string): ContextualLogger {\n const child = baseLogger.child({ module: moduleName });\n return createProxyLogger(child, { module: moduleName });\n}\n\nexport function createExtensionLogger(extensionName: string): ContextualLogger {\n const child = baseLogger.child({ extension: extensionName });\n return createProxyLogger(child, { extension: extensionName });\n}\n\nexport function createServiceLogger(serviceId: string): ContextualLogger {\n const child = baseLogger.child({ service: 'cron', scope: serviceId });\n return createProxyLogger(child, { service: 'cron', scope: serviceId });\n}\n\n// ============================================\n// Log Level Management\n// ============================================\n\nexport function setLogLevel(level: LogLevel): void {\n baseLogger.level = level;\n}\n\nexport function getLogLevel(): LogLevel {\n return baseLogger.level as LogLevel;\n}\n\nexport function withLogLevel<T>(level: LogLevel, fn: () => T): T {\n const previous = baseLogger.level;\n baseLogger.level = level;\n try {\n return fn();\n } finally {\n baseLogger.level = previous;\n }\n}\n\nexport function isLevelEnabled(level: LogLevel): boolean {\n const levelValues: Record<LogLevel, number> = {\n trace: 10, debug: 20, info: 30, warn: 40, error: 50, fatal: 60, silent: Number.MAX_VALUE,\n };\n return levelValues[level] >= levelValues[getLogLevel()];\n}\n\n// ============================================\n// Re-exports\n// ============================================\n\nexport type {\n LogLevel,\n LogContext,\n LogEntry,\n LoggerConfig,\n LogFileMeta,\n LogQuery,\n LogStats,\n RotationResult,\n ContextualLogger,\n} from './types.js';\n\nexport {\n // Config\n getLogDir,\n getLoggerConfig,\n \n // Stats\n getRuntimeLogStats,\n \n // Shutdown\n isLoggerShuttingDown,\n flushAndClose,\n setShuttingDown,\n \n // Rotation\n rotateLogs,\n cleanOldLogs,\n};\n\n// Exporters\nexport {\n type LogExporter,\n type ExporterConfig,\n type LokiConfig,\n type ElkConfig,\n type DatadogConfig,\n type WebhookConfig,\n initializeExporters,\n exportLog,\n flushExporters,\n getExporters,\n} from './exporters.js';\n\nexport {\n redactSensitiveInfo,\n redactObject,\n redactPemBlock,\n redactSecret,\n isLogRedactionEnabled,\n} from './redact.js';\n\n// Audit Log\nexport {\n type AuditEvent,\n type AuditEventType,\n type AuditLogConfig,\n logAuditEvent,\n logAuthEvent,\n logConfigChange,\n logPermissionChange,\n logDataAccess,\n configureAuditLog,\n getAuditConfig,\n} from './audit.js';\n\nexport { logger as baseLogger };\nexport { pino as Pino };\n\nexport {\n runWithLogContext,\n getAsyncLogContext,\n updateAsyncLogContext,\n inboundCorrelationMetadataFromAsyncLogContext,\n} from './context.js';\n"],"mappings":"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"}
|
|
@@ -22,46 +22,28 @@ export declare function getLogPath(date?: Date, type?: 'app' | 'error' | 'audit'
|
|
|
22
22
|
* Query logs across multiple files
|
|
23
23
|
*/
|
|
24
24
|
export declare function queryLogs(query?: LogQuery): Promise<LogEntry[]>;
|
|
25
|
+
export declare function getLogModules(): Promise<string[]>;
|
|
25
26
|
/**
|
|
26
|
-
* Get
|
|
27
|
+
* Get log statistics by level (sampled from recent files)
|
|
27
28
|
*/
|
|
28
|
-
export declare function
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
export declare function getFileLogStats(): Promise<LogStats>;
|
|
30
|
+
export interface LogErrorSummaryItem {
|
|
31
|
+
key: string;
|
|
32
|
+
errName: string;
|
|
33
|
+
phase?: string;
|
|
31
34
|
module?: string;
|
|
32
|
-
|
|
35
|
+
count: number;
|
|
36
|
+
lastSeen: string;
|
|
37
|
+
sampleMessage: string;
|
|
38
|
+
}
|
|
33
39
|
/**
|
|
34
|
-
*
|
|
40
|
+
* Aggregate recent error/fatal logs by err name + phase + module.
|
|
35
41
|
*/
|
|
36
|
-
export declare function
|
|
42
|
+
export declare function getLogErrorSummary(options?: {
|
|
37
43
|
from?: string;
|
|
38
44
|
to?: string;
|
|
39
45
|
limit?: number;
|
|
40
|
-
}): Promise<
|
|
41
|
-
/**
|
|
42
|
-
* Get logs for a specific request/session
|
|
43
|
-
*/
|
|
44
|
-
export declare function getLogsByContext(contextType: 'requestId' | 'sessionId', contextValue: string, limit?: number): Promise<LogEntry[]>;
|
|
45
|
-
/**
|
|
46
|
-
* Get available log levels from actual log data
|
|
47
|
-
*/
|
|
48
|
-
export declare function getLogLevelsFromData(): Promise<LogLevel[]>;
|
|
49
|
-
/**
|
|
50
|
-
* Get available modules from log data
|
|
51
|
-
*/
|
|
52
|
-
export declare function getLogModules(): Promise<string[]>;
|
|
53
|
-
/**
|
|
54
|
-
* Get log statistics by level (sampled from recent files)
|
|
55
|
-
*/
|
|
56
|
-
export declare function getLogStats(): Promise<LogStats>;
|
|
57
|
-
/**
|
|
58
|
-
* Clean old logs (actually deletes files)
|
|
59
|
-
*/
|
|
60
|
-
export declare function cleanOldLogs(keepDays?: number): {
|
|
61
|
-
deleted: number;
|
|
62
|
-
freedBytes: number;
|
|
63
|
-
errors: string[];
|
|
64
|
-
};
|
|
46
|
+
}): Promise<LogErrorSummaryItem[]>;
|
|
65
47
|
/**
|
|
66
48
|
* Get available log levels
|
|
67
49
|
*/
|