@rawnodes/logger 2.6.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store.ts","../src/types.ts","../src/transports/buffer.ts","../src/transports/base-http.ts","../src/transports/discord.ts","../src/transports/telegram.ts","../src/transports/cloudwatch.ts","../src/streams.ts","../src/state.ts","../src/schema.ts","../src/utils/caller.ts","../src/utils/shutdown.ts","../src/logger.ts","../src/singleton.ts","../src/utils/timing.ts","../src/utils/request-id.ts","../src/utils/mask-secrets.ts","../src/formatters.ts"],"names":["AsyncLocalStorage","EventEmitter","LEVEL_EMOJI","randomUUID","osHostname","CloudWatchLogsClient","PutLogEventsCommand","CreateLogGroupCommand","CreateLogStreamCommand","DescribeLogStreamsCommand","Transform","mkdir","createStream","pino","Writable","z","relative","basename","DEFAULT_OPTIONS"],"mappings":"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","file":"index.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport type { LoggerContext } from './types.js';\n\nexport class LoggerStore<TContext extends LoggerContext = LoggerContext> {\n private storage = new AsyncLocalStorage<TContext>();\n\n getStore(): TContext | undefined {\n return this.storage.getStore();\n }\n\n run<T>(context: TContext, fn: () => T): T {\n return this.storage.run(context, fn);\n }\n}\n","export const LOG_LEVELS = {\n off: -1,\n error: 0,\n warn: 1,\n info: 2,\n http: 3,\n verbose: 4,\n debug: 5,\n silly: 6,\n} as const;\n\nexport type LogLevel = keyof typeof LOG_LEVELS;\n\nexport function isValidLogLevel(level: string): level is LogLevel {\n return level in LOG_LEVELS;\n}\n\nexport function assertLogLevel(level: string): asserts level is LogLevel {\n if (!isValidLogLevel(level)) {\n throw new Error(`Invalid log level: \"${level}\". Valid levels: ${Object.keys(LOG_LEVELS).join(', ')}`);\n }\n}\n\nexport type LogFormat = 'json' | 'plain' | 'logfmt' | 'simple';\n\nexport interface LevelRule {\n match: Record<string, unknown> & { context?: string };\n level: LogLevel;\n}\n\nexport interface ConsoleConfig {\n format: LogFormat;\n level?: LogLevel;\n rules?: LevelRule[];\n}\n\nexport interface FileConfig {\n format: LogFormat;\n level?: LogLevel;\n rules?: LevelRule[];\n dirname: string;\n filename: string;\n datePattern?: string;\n interval?: string;\n zippedArchive?: boolean;\n maxSize?: string;\n maxFiles?: string;\n}\n\n// HTTP Transport base config\nexport interface HttpTransportBaseConfig {\n level?: LogLevel;\n rules?: LevelRule[];\n batchSize?: number;\n flushInterval?: number;\n maxRetries?: number;\n retryDelay?: number;\n}\n\n// Discord Transport\nexport interface DiscordConfig extends HttpTransportBaseConfig {\n webhookUrl: string;\n format?: 'embed' | 'markdown'; // default: 'embed'\n username?: string;\n avatarUrl?: string;\n embedColors?: Partial<Record<LogLevel, number>>;\n includeTimestamp?: boolean;\n includeMeta?: boolean;\n maxEmbedFields?: number;\n}\n\n// Telegram Transport\nexport interface TelegramConfig extends HttpTransportBaseConfig {\n botToken: string;\n chatId: string | number;\n parseMode?: 'Markdown' | 'MarkdownV2' | 'HTML';\n disableNotification?: boolean;\n threadId?: number;\n replyToMessageId?: number;\n}\n\n// CloudWatch Log Stream Name patterns\nexport type LogStreamPattern = 'hostname' | 'hostname-date' | 'hostname-uuid' | 'date' | 'uuid';\n\nexport interface LogStreamPatternConfig {\n pattern: LogStreamPattern;\n}\n\nexport interface LogStreamTemplateConfig {\n /** Custom template with variables: {hostname}, {date}, {datetime}, {uuid}, {pid}, {env} */\n template: string;\n}\n\nexport type LogStreamName = string | LogStreamPatternConfig | LogStreamTemplateConfig;\n\n// CloudWatch Transport\nexport interface CloudWatchConfig extends HttpTransportBaseConfig {\n logGroupName: string;\n /** Log stream name - string, pattern config, or template config. Defaults to hostname pattern */\n logStreamName?: LogStreamName;\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n createLogGroup?: boolean;\n createLogStream?: boolean;\n}\n\nexport interface LevelConfigObject {\n default: LogLevel;\n rules?: LevelRule[];\n}\n\nexport type LevelConfig = LogLevel | LevelConfigObject;\n\nexport interface CallerConfig {\n /** Stack depth to capture (default: 1). Higher values trace further up the call stack */\n depth?: number;\n /** Include full file path (default: false). If false, shows relative or basename only */\n fullPath?: boolean;\n}\n\nexport interface CallerInfo {\n file: string;\n line: number;\n column?: number;\n function?: string;\n}\n\nexport interface AutoShutdownConfig {\n /** Timeout in ms before forcing exit (default: 5000) */\n timeout?: number;\n /** Custom signals to handle (default: ['SIGTERM', 'SIGINT']) */\n signals?: NodeJS.Signals[];\n}\n\nexport interface LoggerConfig {\n level: LevelConfig;\n console: ConsoleConfig;\n file?: FileConfig;\n discord?: DiscordConfig | DiscordConfig[];\n telegram?: TelegramConfig | TelegramConfig[];\n cloudwatch?: CloudWatchConfig | CloudWatchConfig[];\n /** Enable caller info (file:line) in logs. Pass true for defaults or CallerConfig for options */\n caller?: boolean | CallerConfig;\n /** Hostname to include in all log entries. Defaults to os.hostname() if not specified */\n hostname?: string;\n /** Auto-register graceful shutdown handlers. Pass true for defaults or config object */\n autoShutdown?: boolean | AutoShutdownConfig;\n}\n\nexport type LoggerContext = Record<string, unknown>;\n\nexport type LevelOverrideMatch<TContext extends LoggerContext> = Partial<TContext> & { context?: string };\n\nexport interface LevelOverride<TContext extends LoggerContext> {\n match: LevelOverrideMatch<TContext>;\n level: LogLevel;\n readonly?: boolean;\n}\n\nexport type Meta = object | (() => object);\n","import type { LogLevel } from '../types.js';\n\nexport interface BufferedMessage {\n level: LogLevel;\n message: string;\n timestamp: Date;\n context?: string;\n meta?: Record<string, unknown>;\n}\n\nexport interface BufferOptions {\n batchSize: number;\n flushInterval: number;\n maxRetries: number;\n retryDelay: number;\n onFlush: (messages: BufferedMessage[]) => Promise<void>;\n onError?: (error: Error, messages: BufferedMessage[]) => void;\n}\n\nexport class MessageBuffer {\n private queue: BufferedMessage[] = [];\n private timer: NodeJS.Timeout | null = null;\n private flushing = false;\n private closed = false;\n\n constructor(private options: BufferOptions) {}\n\n add(message: BufferedMessage): void {\n if (this.closed) return;\n\n this.queue.push(message);\n\n if (this.queue.length >= this.options.batchSize) {\n void this.flush();\n } else {\n this.scheduleFlush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.flushing || this.queue.length === 0) return;\n\n this.flushing = true;\n this.clearTimer();\n\n const messages = this.queue.splice(0, this.options.batchSize);\n\n try {\n await this.sendWithRetry(messages);\n } catch (error) {\n this.options.onError?.(error as Error, messages);\n } finally {\n this.flushing = false;\n\n // If there are more messages, continue flushing\n if (this.queue.length > 0 && !this.closed) {\n void this.flush();\n }\n }\n }\n\n async close(): Promise<void> {\n this.closed = true;\n this.clearTimer();\n\n // Flush remaining messages\n while (this.queue.length > 0) {\n await this.flush();\n }\n }\n\n private scheduleFlush(): void {\n if (this.timer || this.closed) return;\n\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.flush();\n }, this.options.flushInterval);\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n private async sendWithRetry(messages: BufferedMessage[]): Promise<void> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < this.options.maxRetries; attempt++) {\n try {\n await this.options.onFlush(messages);\n return;\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < this.options.maxRetries - 1) {\n await this.delay(this.options.retryDelay * Math.pow(2, attempt));\n }\n }\n }\n\n throw lastError;\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import { EventEmitter } from 'events';\nimport { MessageBuffer, type BufferedMessage } from './buffer.js';\nimport type { LogLevel } from '../types.js';\n\nexport interface BaseHttpTransportOptions {\n batchSize?: number;\n flushInterval?: number;\n maxRetries?: number;\n retryDelay?: number;\n}\n\nconst DEFAULT_OPTIONS = {\n batchSize: 10,\n flushInterval: 5000,\n maxRetries: 3,\n retryDelay: 1000,\n};\n\nexport abstract class BaseHttpTransport extends EventEmitter {\n protected buffer: MessageBuffer;\n\n constructor(opts: BaseHttpTransportOptions = {}) {\n super();\n\n this.buffer = new MessageBuffer({\n batchSize: opts.batchSize ?? DEFAULT_OPTIONS.batchSize,\n flushInterval: opts.flushInterval ?? DEFAULT_OPTIONS.flushInterval,\n maxRetries: opts.maxRetries ?? DEFAULT_OPTIONS.maxRetries,\n retryDelay: opts.retryDelay ?? DEFAULT_OPTIONS.retryDelay,\n onFlush: this.sendBatch.bind(this),\n onError: this.handleError.bind(this),\n });\n }\n\n log(info: Record<string, unknown>, callback: () => void): void {\n const message = this.transformMessage(info);\n this.buffer.add(message);\n callback();\n }\n\n close(): Promise<void> {\n return this.buffer.close();\n }\n\n protected transformMessage(info: Record<string, unknown>): BufferedMessage {\n const { level, message, timestamp, context, ...meta } = info;\n\n return {\n level: level as LogLevel,\n message: String(message),\n timestamp: timestamp instanceof Date ? timestamp : (timestamp ? new Date(String(timestamp)) : new Date()),\n context: context as string | undefined,\n meta: Object.keys(meta).length > 0 ? meta : undefined,\n };\n }\n\n protected handleError(error: Error, messages: BufferedMessage[]): void {\n // Log to stderr to avoid infinite loop\n console.error(\n `[${this.constructor.name}] Failed to send ${messages.length} messages:`,\n error.message,\n );\n\n // Emit error event\n this.emit('error', error);\n }\n\n protected abstract sendBatch(messages: BufferedMessage[]): Promise<void>;\n}\n","import { BaseHttpTransport } from './base-http.js';\nimport type { BufferedMessage } from './buffer.js';\nimport type { DiscordConfig, LogLevel } from '../types.js';\n\nconst DEFAULT_EMBED_COLORS: Record<LogLevel, number> = {\n off: 0x000000,\n error: 0xed4245,\n warn: 0xfee75c,\n info: 0x57f287,\n http: 0x5865f2,\n verbose: 0x9b59b6,\n debug: 0x3498db,\n silly: 0x95a5a6,\n};\n\ninterface DiscordEmbed {\n title: string;\n description: string;\n color: number;\n timestamp?: string;\n fields?: Array<{ name: string; value: string; inline?: boolean }>;\n}\n\ninterface DiscordWebhookPayload {\n username?: string;\n avatar_url?: string;\n content?: string;\n embeds?: DiscordEmbed[];\n}\n\nconst LEVEL_EMOJI: Record<LogLevel, string> = {\n off: '⚫',\n error: '🔴',\n warn: '🟡',\n info: '🟢',\n http: '🔵',\n verbose: '🟣',\n debug: '⚪',\n silly: '⚫',\n};\n\nexport class DiscordTransport extends BaseHttpTransport {\n private config: DiscordConfig;\n\n constructor(config: DiscordConfig) {\n super({\n batchSize: config.batchSize ?? 10,\n flushInterval: config.flushInterval ?? 2000,\n maxRetries: config.maxRetries,\n retryDelay: config.retryDelay,\n });\n this.config = config;\n }\n\n protected async sendBatch(messages: BufferedMessage[]): Promise<void> {\n if (this.config.format === 'markdown') {\n await this.sendMarkdownBatch(messages);\n } else {\n await this.sendEmbedBatch(messages);\n }\n }\n\n private async sendEmbedBatch(messages: BufferedMessage[]): Promise<void> {\n // Discord allows max 10 embeds per message\n const chunks = this.chunkArray(messages, 10);\n\n for (const chunk of chunks) {\n const payload: DiscordWebhookPayload = {\n username: this.config.username,\n avatar_url: this.config.avatarUrl,\n embeds: chunk.map((msg) => this.createEmbed(msg)),\n };\n\n await this.sendWebhook(payload);\n }\n }\n\n private async sendMarkdownBatch(messages: BufferedMessage[]): Promise<void> {\n // Discord content limit is 2000 chars, send each message separately if needed\n const content = messages.map((msg) => this.formatMarkdown(msg)).join('\\n\\n---\\n\\n');\n\n // Split into chunks of ~1900 chars to stay under 2000 limit\n const chunks = this.splitContent(content, 1900);\n\n for (const chunk of chunks) {\n const payload: DiscordWebhookPayload = {\n username: this.config.username,\n avatar_url: this.config.avatarUrl,\n content: chunk,\n };\n\n await this.sendWebhook(payload);\n }\n }\n\n private formatMarkdown(msg: BufferedMessage): string {\n const emoji = LEVEL_EMOJI[msg.level];\n const level = msg.level.toUpperCase();\n const context = msg.context || 'APP';\n const timestamp = this.config.includeTimestamp !== false\n ? `\\`${msg.timestamp.toISOString()}\\``\n : '';\n\n let text = `${emoji} **${level}** [${context}] ${timestamp}\\n${msg.message}`;\n\n if (this.config.includeMeta !== false && msg.meta && Object.keys(msg.meta).length > 0) {\n text += '\\n```json\\n' + JSON.stringify(msg.meta, null, 2) + '\\n```';\n }\n\n return text;\n }\n\n private splitContent(content: string, maxLength: number): string[] {\n if (content.length <= maxLength) return [content];\n\n const chunks: string[] = [];\n let current = content;\n\n while (current.length > 0) {\n if (current.length <= maxLength) {\n chunks.push(current);\n break;\n }\n\n // Find a good split point (newline or space)\n let splitAt = current.lastIndexOf('\\n', maxLength);\n if (splitAt === -1 || splitAt < maxLength / 2) {\n splitAt = current.lastIndexOf(' ', maxLength);\n }\n if (splitAt === -1 || splitAt < maxLength / 2) {\n splitAt = maxLength;\n }\n\n chunks.push(current.slice(0, splitAt));\n current = current.slice(splitAt).trimStart();\n }\n\n return chunks;\n }\n\n private createEmbed(msg: BufferedMessage): DiscordEmbed {\n const color = this.config.embedColors?.[msg.level] ?? DEFAULT_EMBED_COLORS[msg.level];\n\n const embed: DiscordEmbed = {\n title: `[${msg.level.toUpperCase()}] ${msg.context || 'APP'}`,\n description: msg.message.slice(0, 4096), // Discord limit\n color,\n };\n\n if (this.config.includeTimestamp !== false) {\n embed.timestamp = msg.timestamp.toISOString();\n }\n\n if (this.config.includeMeta !== false && msg.meta) {\n embed.fields = this.metaToFields(msg.meta);\n }\n\n return embed;\n }\n\n private metaToFields(\n meta: Record<string, unknown>,\n ): Array<{ name: string; value: string; inline?: boolean }> {\n const maxFields = this.config.maxEmbedFields ?? 25;\n const fields: Array<{ name: string; value: string; inline?: boolean }> = [];\n\n for (const [key, value] of Object.entries(meta)) {\n if (fields.length >= maxFields) break;\n\n let strValue: string;\n if (typeof value === 'object') {\n strValue = '```json\\n' + JSON.stringify(value, null, 2).slice(0, 1000) + '\\n```';\n } else {\n strValue = String(value).slice(0, 1024);\n }\n\n fields.push({\n name: key.slice(0, 256),\n value: strValue,\n inline: typeof value !== 'object' && String(value).length < 50,\n });\n }\n\n return fields;\n }\n\n private async sendWebhook(payload: DiscordWebhookPayload): Promise<void> {\n const response = await fetch(this.config.webhookUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Discord webhook failed: ${response.status} ${text}`);\n }\n }\n\n private chunkArray<T>(array: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n }\n}\n","import { BaseHttpTransport } from './base-http.js';\nimport type { BufferedMessage } from './buffer.js';\nimport type { TelegramConfig, LogLevel } from '../types.js';\n\nconst LEVEL_EMOJI: Record<LogLevel, string> = {\n off: '',\n error: '🔴',\n warn: '🟡',\n info: '🟢',\n http: '🔵',\n verbose: '🟣',\n debug: '⚪',\n silly: '⚫',\n};\n\nexport class TelegramTransport extends BaseHttpTransport {\n private config: TelegramConfig;\n private apiUrl: string;\n\n constructor(config: TelegramConfig) {\n super({\n batchSize: config.batchSize ?? 20,\n flushInterval: config.flushInterval ?? 1000,\n maxRetries: config.maxRetries,\n retryDelay: config.retryDelay,\n });\n this.config = config;\n this.apiUrl = `https://api.telegram.org/bot${config.botToken}`;\n }\n\n protected async sendBatch(messages: BufferedMessage[]): Promise<void> {\n const text = this.formatBatchMessage(messages);\n await this.sendMessage(text, messages);\n }\n\n private formatBatchMessage(messages: BufferedMessage[]): string {\n const parseMode = this.config.parseMode ?? 'HTML';\n\n return messages\n .map((msg) => {\n if (parseMode === 'HTML') {\n return this.formatHtml(msg);\n }\n return this.formatMarkdown(msg, parseMode === 'MarkdownV2');\n })\n .join('\\n\\n---\\n\\n');\n }\n\n private formatMarkdown(msg: BufferedMessage, v2: boolean): string {\n const emoji = LEVEL_EMOJI[msg.level];\n const escape = v2 ? this.escapeMarkdownV2.bind(this) : (s: string) => s;\n const bracket = v2 ? ['\\\\[', '\\\\]'] : ['[', ']'];\n\n let text = `${emoji} *${msg.level.toUpperCase()}* ${bracket[0]}${escape(msg.context || 'APP')}${bracket[1]}\\n`;\n text += escape(msg.message);\n\n if (msg.meta && Object.keys(msg.meta).length > 0) {\n const metaStr = JSON.stringify(msg.meta, null, 2);\n text += '\\n```json\\n' + metaStr + '\\n```';\n }\n\n return text;\n }\n\n private formatHtml(msg: BufferedMessage): string {\n const emoji = LEVEL_EMOJI[msg.level];\n\n let text = `${emoji} <b>${msg.level.toUpperCase()}</b> [${this.escapeHtml(msg.context || 'APP')}]\\n`;\n text += this.escapeHtml(msg.message);\n\n if (msg.meta && Object.keys(msg.meta).length > 0) {\n const metaStr = JSON.stringify(msg.meta, null, 2);\n text += '\\n<pre>' + this.escapeHtml(metaStr) + '</pre>';\n }\n\n return text;\n }\n\n private shouldMute(messages: BufferedMessage[]): boolean {\n if (this.config.disableNotification !== undefined) {\n return this.config.disableNotification;\n }\n // Don't mute if any message is error level\n return !messages.some((m) => m.level === 'error');\n }\n\n private async sendMessage(text: string, messages: BufferedMessage[]): Promise<void> {\n const body: Record<string, unknown> = {\n chat_id: this.config.chatId,\n text,\n parse_mode: this.config.parseMode ?? 'HTML',\n disable_notification: this.shouldMute(messages),\n };\n\n if (this.config.threadId) {\n body.message_thread_id = this.config.threadId;\n }\n\n if (this.config.replyToMessageId) {\n body.reply_to_message_id = this.config.replyToMessageId;\n }\n\n const response = await fetch(`${this.apiUrl}/sendMessage`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const result = await response.json();\n throw new Error(`Telegram API failed: ${response.status} ${JSON.stringify(result)}`);\n }\n }\n\n private escapeMarkdownV2(text: string): string {\n return text.replace(/[_*[\\]()~`>#+\\-=|{}.!]/g, '\\\\$&');\n }\n\n private escapeHtml(text: string): string {\n const entities: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n };\n return text.replace(/[&<>\"']/g, (c) => entities[c] || c);\n }\n}\n","import {\n CloudWatchLogsClient,\n PutLogEventsCommand,\n CreateLogGroupCommand,\n CreateLogStreamCommand,\n DescribeLogStreamsCommand,\n type InputLogEvent,\n} from '@aws-sdk/client-cloudwatch-logs';\nimport { hostname as osHostname } from 'os';\nimport { randomUUID } from 'crypto';\nimport { BaseHttpTransport } from './base-http.js';\nimport type { BufferedMessage } from './buffer.js';\nimport type { CloudWatchConfig, LogStreamName } from '../types.js';\n\n// Generate UUID once at module load for consistent stream names across the app lifecycle\nconst instanceUuid = randomUUID().slice(0, 8);\n\nfunction formatDate(): string {\n return new Date().toISOString().slice(0, 10); // YYYY-MM-DD\n}\n\nfunction formatDateTime(): string {\n return new Date().toISOString().slice(0, 19).replace(/[T:]/g, '-'); // YYYY-MM-DD-HH-mm-ss\n}\n\nfunction resolveLogStreamName(config: LogStreamName | undefined, configHostname?: string): string {\n const hostname = configHostname || process.env.HOSTNAME || osHostname();\n\n // Default to hostname pattern if not specified\n if (!config) {\n return hostname;\n }\n\n // Plain string - use as-is\n if (typeof config === 'string') {\n return config;\n }\n\n // Pattern config\n if ('pattern' in config) {\n switch (config.pattern) {\n case 'hostname':\n return hostname;\n case 'hostname-date':\n return `${hostname}/${formatDate()}`;\n case 'hostname-uuid':\n return `${hostname}-${instanceUuid}`;\n case 'date':\n return formatDate();\n case 'uuid':\n return randomUUID();\n default:\n return hostname;\n }\n }\n\n // Template config\n if ('template' in config) {\n return config.template\n .replace(/\\{hostname\\}/g, hostname)\n .replace(/\\{date\\}/g, formatDate())\n .replace(/\\{datetime\\}/g, formatDateTime())\n .replace(/\\{uuid\\}/g, instanceUuid)\n .replace(/\\{pid\\}/g, String(process.pid))\n .replace(/\\{env\\}/g, process.env.NODE_ENV || 'development');\n }\n\n return hostname;\n}\n\nexport class CloudWatchTransport extends BaseHttpTransport {\n private config: CloudWatchConfig;\n private client: CloudWatchLogsClient;\n private sequenceToken: string | undefined;\n private initialized = false;\n private initPromise: Promise<void> | null = null;\n private resolvedLogStreamName: string;\n\n constructor(config: CloudWatchConfig, configHostname?: string) {\n super({\n batchSize: config.batchSize ?? 100,\n flushInterval: config.flushInterval ?? 1000,\n maxRetries: config.maxRetries,\n retryDelay: config.retryDelay,\n });\n this.config = config;\n this.resolvedLogStreamName = resolveLogStreamName(config.logStreamName, configHostname);\n\n this.client = new CloudWatchLogsClient({\n region: config.region,\n credentials: {\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n },\n });\n }\n\n protected async sendBatch(messages: BufferedMessage[]): Promise<void> {\n await this.ensureInitialized();\n\n const logEvents: InputLogEvent[] = messages.map((msg) => ({\n timestamp: msg.timestamp.getTime(),\n message: JSON.stringify({\n level: msg.level,\n message: msg.message,\n context: msg.context,\n ...msg.meta,\n }),\n }));\n\n // Sort by timestamp (CloudWatch requirement)\n logEvents.sort((a, b) => (a.timestamp ?? 0) - (b.timestamp ?? 0));\n\n const command = new PutLogEventsCommand({\n logGroupName: this.config.logGroupName,\n logStreamName: this.resolvedLogStreamName,\n logEvents,\n sequenceToken: this.sequenceToken,\n });\n\n try {\n const response = await this.client.send(command);\n this.sequenceToken = response.nextSequenceToken;\n } catch (error: unknown) {\n // Handle InvalidSequenceTokenException by retrying with correct token\n if (this.isInvalidSequenceTokenError(error)) {\n await this.fetchSequenceToken();\n const retryCommand = new PutLogEventsCommand({\n logGroupName: this.config.logGroupName,\n logStreamName: this.resolvedLogStreamName,\n logEvents,\n sequenceToken: this.sequenceToken,\n });\n const response = await this.client.send(retryCommand);\n this.sequenceToken = response.nextSequenceToken;\n } else {\n throw error;\n }\n }\n }\n\n private async ensureInitialized(): Promise<void> {\n if (this.initialized) return;\n\n if (!this.initPromise) {\n this.initPromise = this.initialize();\n }\n\n await this.initPromise;\n }\n\n private async initialize(): Promise<void> {\n if (this.config.createLogGroup) {\n await this.createLogGroupIfNotExists();\n }\n\n if (this.config.createLogStream !== false) {\n await this.createLogStreamIfNotExists();\n }\n\n await this.fetchSequenceToken();\n this.initialized = true;\n }\n\n private async createLogGroupIfNotExists(): Promise<void> {\n try {\n await this.client.send(\n new CreateLogGroupCommand({\n logGroupName: this.config.logGroupName,\n }),\n );\n } catch (error: unknown) {\n if (!this.isResourceAlreadyExistsError(error)) {\n throw error;\n }\n }\n }\n\n private async createLogStreamIfNotExists(): Promise<void> {\n try {\n await this.client.send(\n new CreateLogStreamCommand({\n logGroupName: this.config.logGroupName,\n logStreamName: this.resolvedLogStreamName,\n }),\n );\n } catch (error: unknown) {\n if (!this.isResourceAlreadyExistsError(error)) {\n throw error;\n }\n }\n }\n\n private async fetchSequenceToken(): Promise<void> {\n const response = await this.client.send(\n new DescribeLogStreamsCommand({\n logGroupName: this.config.logGroupName,\n logStreamNamePrefix: this.resolvedLogStreamName,\n limit: 1,\n }),\n );\n\n const stream = response.logStreams?.find((s) => s.logStreamName === this.resolvedLogStreamName);\n this.sequenceToken = stream?.uploadSequenceToken;\n }\n\n private isResourceAlreadyExistsError(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'ResourceAlreadyExistsException'\n );\n }\n\n private isInvalidSequenceTokenError(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'InvalidSequenceTokenException'\n );\n }\n}\n","import pino, { type DestinationStream, type StreamEntry } from 'pino';\nimport { Transform, Writable, PassThrough } from 'node:stream';\nimport { createWriteStream } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { createStream, type RotatingFileStream, type FileSize, type Interval } from 'rotating-file-stream';\nimport { LoggerStore } from './store.js';\nimport { matchesContext } from './state.js';\nimport { DiscordTransport } from './transports/discord.js';\nimport { TelegramTransport } from './transports/telegram.js';\nimport { CloudWatchTransport } from './transports/cloudwatch.js';\nimport type { BaseHttpTransport } from './transports/base-http.js';\nimport {\n LOG_LEVELS,\n type LoggerConfig,\n type LoggerContext,\n type LogLevel,\n type LevelRule,\n} from './types.js';\n\nexport interface StreamsResult {\n destination: DestinationStream;\n transports: BaseHttpTransport[];\n}\n\n// Pino level values\nconst PINO_LEVELS: Record<string, number> = {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10,\n // Custom\n http: 25,\n verbose: 25,\n silly: 10,\n};\n\ninterface ParsedLog {\n level: number;\n time: number;\n msg: string;\n context?: string;\n [key: string]: unknown;\n}\n\nfunction parseLogLine(line: string): ParsedLog | null {\n try {\n return JSON.parse(line) as ParsedLog;\n } catch {\n return null;\n }\n}\n\nfunction getLevelName(levelNum: number): LogLevel {\n if (levelNum >= 50) return 'error';\n if (levelNum >= 40) return 'warn';\n if (levelNum >= 30) return 'info';\n if (levelNum >= 25) return 'http';\n if (levelNum >= 20) return 'debug';\n return 'silly';\n}\n\n// Check if log should pass based on transport rules\nfunction shouldPassTransport<TContext extends LoggerContext>(\n log: ParsedLog,\n level: LogLevel | undefined,\n rules: LevelRule[] | undefined,\n store: LoggerStore<TContext>,\n): boolean {\n const logLevel = getLevelName(log.level);\n const context = log.context;\n const storeContext = store.getStore();\n\n // Find matching rule\n const matchingRule = rules?.find((rule) => matchesContext(storeContext, context, rule.match));\n\n // Effective level: matching rule > transport default > accept all\n const effectiveLevel = matchingRule?.level ?? level ?? 'silly';\n\n if (effectiveLevel === 'off') return false;\n return LOG_LEVELS[logLevel] <= LOG_LEVELS[effectiveLevel];\n}\n\n// Format based on type\nfunction formatLog<TContext extends LoggerContext>(\n log: ParsedLog,\n format: 'json' | 'plain' | 'logfmt' | 'simple',\n store: LoggerStore<TContext>,\n): string {\n const levelName = getLevelName(log.level);\n const timestamp = new Date(log.time).toISOString();\n const context = log.context || 'APP';\n const message = log.msg || '';\n\n // Add store context\n const storeContext = store.getStore();\n const meta: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(log)) {\n if (!['level', 'time', 'msg', 'context'].includes(key)) {\n meta[key] = value;\n }\n }\n\n if (storeContext) {\n Object.assign(meta, storeContext);\n }\n\n if (format === 'json') {\n return JSON.stringify({\n level: levelName,\n timestamp,\n context,\n message,\n ...meta,\n }) + '\\n';\n }\n\n if (format === 'plain') {\n const LEVEL_COLORS: Record<string, string> = {\n error: '\\x1b[31m',\n warn: '\\x1b[33m',\n info: '\\x1b[32m',\n http: '\\x1b[35m',\n verbose: '\\x1b[36m',\n debug: '\\x1b[34m',\n silly: '\\x1b[90m',\n };\n const RESET = '\\x1b[0m';\n const color = LEVEL_COLORS[levelName] || '';\n const coloredLevel = color ? `${color}${levelName}${RESET}` : levelName;\n\n const formatValue = (key: string, value: unknown): string => {\n if (typeof value === 'string' && value.includes('\\n')) {\n // Multiline strings (like stack traces) - indent each line\n return '\\n ' + value.split('\\n').join('\\n ');\n }\n return JSON.stringify(value);\n };\n\n const metaStr = Object.keys(meta).length > 0\n ? '\\n ' + Object.entries(meta).map(([k, v]) => `${k}: ${formatValue(k, v)}`).join('\\n ')\n : '';\n return `[${timestamp}] ${coloredLevel} [${context}] ${message}${metaStr}\\n`;\n }\n\n if (format === 'logfmt') {\n const parts = [`level=${levelName}`, `msg=\"${message}\"`, `context=${context}`, `ts=${timestamp}`];\n for (const [k, v] of Object.entries(meta)) {\n parts.push(`${k}=${JSON.stringify(v)}`);\n }\n return parts.join(' ') + '\\n';\n }\n\n // simple\n return `[${timestamp}] ${levelName}: ${message}\\n`;\n}\n\n// Create a filtering + formatting transform stream\nfunction createFormattedFilterStream<TContext extends LoggerContext>(\n format: 'json' | 'plain' | 'logfmt' | 'simple',\n level: LogLevel | undefined,\n rules: LevelRule[] | undefined,\n store: LoggerStore<TContext>,\n destination: NodeJS.WritableStream,\n): Transform {\n return new Transform({\n transform(chunk: Buffer, _encoding: string, callback) {\n const line = chunk.toString().trim();\n if (!line) {\n callback();\n return;\n }\n\n const log = parseLogLine(line);\n if (!log) {\n callback();\n return;\n }\n\n if (!shouldPassTransport(log, level, rules, store)) {\n callback();\n return;\n }\n\n const formatted = formatLog(log, format, store);\n destination.write(formatted);\n callback();\n },\n });\n}\n\nexport function createStreams<TContext extends LoggerContext>(\n config: LoggerConfig,\n store: LoggerStore<TContext>,\n): StreamsResult {\n const streams: StreamEntry<'trace'>[] = [];\n const transports: BaseHttpTransport[] = [];\n\n // Console transport\n const consoleStream = createFormattedFilterStream(\n config.console.format,\n config.console.level,\n config.console.rules,\n store,\n process.stdout,\n );\n\n streams.push({\n level: 'trace',\n stream: consoleStream,\n });\n\n // File transport with rotation\n if (config.file) {\n const fileConfig = config.file;\n\n // Ensure directory exists\n mkdir(fileConfig.dirname, { recursive: true }).catch(() => {});\n\n // Normalize size unit to uppercase (rotating-file-stream requires uppercase: M, K, G)\n const normalizeSize = (size: string): FileSize => {\n return size.replace(/([kmg])$/i, (match) => match.toUpperCase()) as FileSize;\n };\n\n const rotatingStream = createStream(\n (time: Date | number, index?: number) => {\n const date = time instanceof Date ? time : new Date();\n const dateStr = date.toISOString().split('T')[0];\n const base = fileConfig.filename.replace('.log', '');\n return `${base}-${dateStr}${index ? `.${index}` : ''}.log`;\n },\n {\n path: fileConfig.dirname,\n size: normalizeSize(fileConfig.maxSize || '20M'),\n interval: (fileConfig.interval || (fileConfig.datePattern === 'YYYY-MM-DD-HH' ? '1h' : '1d')) as Interval,\n compress: fileConfig.zippedArchive ? 'gzip' : false,\n maxFiles: parseInt(fileConfig.maxFiles?.replace('d', '') || '14'),\n },\n );\n\n const fileStream = createFormattedFilterStream(\n fileConfig.format,\n fileConfig.level,\n fileConfig.rules,\n store,\n rotatingStream,\n );\n\n streams.push({\n level: 'trace',\n stream: fileStream,\n });\n }\n\n // HTTP transports - Discord\n for (const discordConfig of toArray(config.discord)) {\n const transport = new DiscordTransport(discordConfig);\n transports.push(transport);\n const discordStream = createHttpTransportStream(transport, discordConfig.level, discordConfig.rules, store);\n streams.push({\n level: 'trace',\n stream: discordStream,\n });\n }\n\n // HTTP transports - Telegram\n for (const telegramConfig of toArray(config.telegram)) {\n const transport = new TelegramTransport(telegramConfig);\n transports.push(transport);\n const telegramStream = createHttpTransportStream(transport, telegramConfig.level, telegramConfig.rules, store);\n streams.push({\n level: 'trace',\n stream: telegramStream,\n });\n }\n\n // HTTP transports - CloudWatch\n for (const cloudwatchConfig of toArray(config.cloudwatch)) {\n const transport = new CloudWatchTransport(cloudwatchConfig, config.hostname);\n transports.push(transport);\n const cwStream = createHttpTransportStream(transport, cloudwatchConfig.level, cloudwatchConfig.rules, store);\n streams.push({\n level: 'trace',\n stream: cwStream,\n });\n }\n\n return {\n destination: pino.multistream(streams),\n transports,\n };\n}\n\nfunction toArray<T>(value: T | T[] | undefined): T[] {\n if (!value) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction createHttpTransportStream<TContext extends LoggerContext>(\n transport: DiscordTransport | TelegramTransport | CloudWatchTransport,\n level: LogLevel | undefined,\n rules: LevelRule[] | undefined,\n store: LoggerStore<TContext>,\n): Writable {\n return new Writable({\n write(chunk: Buffer, _encoding: string, callback) {\n const line = chunk.toString().trim();\n if (!line) {\n callback();\n return;\n }\n\n const log = parseLogLine(line);\n if (!log) {\n callback();\n return;\n }\n\n if (!shouldPassTransport(log, level, rules, store)) {\n callback();\n return;\n }\n\n const levelName = getLevelName(log.level);\n const storeContext = store.getStore();\n\n const meta: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(log)) {\n if (!['level', 'time', 'msg', 'context'].includes(key)) {\n meta[key] = value;\n }\n }\n\n if (storeContext) {\n Object.assign(meta, storeContext);\n }\n\n transport.log({\n level: levelName,\n message: log.msg || '',\n context: log.context,\n timestamp: new Date(log.time),\n ...meta,\n }, callback);\n },\n });\n}\n","import { hostname as osHostname } from 'os';\nimport pino, { type Logger as PinoBaseLogger, type DestinationStream, type LoggerOptions } from 'pino';\nimport { LoggerStore } from './store.js';\nimport {\n LOG_LEVELS,\n assertLogLevel,\n type LoggerConfig,\n type LoggerContext,\n type LevelOverride,\n type LogLevel,\n type LevelConfig,\n type CallerConfig,\n} from './types.js';\nimport { createStreams } from './streams.js';\nimport type { BaseHttpTransport } from './transports/base-http.js';\n\n// Custom levels for our logger\nconst CUSTOM_LEVELS = {\n http: 25,\n verbose: 25,\n silly: 10,\n} as const;\n\ntype CustomLevels = typeof CUSTOM_LEVELS;\ntype PinoLogger = PinoBaseLogger<keyof CustomLevels>;\n\nexport interface LoggerState<TContext extends LoggerContext> {\n pino: PinoLogger;\n store: LoggerStore<TContext>;\n defaultLevel: LogLevel;\n levelOverrides: Map<string, LevelOverride<TContext>>;\n // Index for O(1) context lookup\n contextIndex: Map<string, LevelOverride<TContext>>;\n // Complex rules that need full matching\n complexRules: LevelOverride<TContext>[];\n // Caller info config (undefined = disabled)\n callerConfig: CallerConfig | undefined;\n // HTTP transports for graceful shutdown\n transports: BaseHttpTransport[];\n}\n\nfunction parseLevelConfig(level: LevelConfig): { defaultLevel: LogLevel; rules: LevelOverride<LoggerContext>[] } {\n if (typeof level === 'string') {\n assertLogLevel(level);\n return { defaultLevel: level, rules: [] };\n }\n\n assertLogLevel(level.default);\n const rules: LevelOverride<LoggerContext>[] = (level.rules ?? []).map((rule) => {\n assertLogLevel(rule.level);\n return { match: rule.match, level: rule.level, readonly: true };\n });\n\n return { defaultLevel: level.default, rules };\n}\n\nfunction buildIndexes<TContext extends LoggerContext>(\n overrides: Map<string, LevelOverride<TContext>>,\n): { contextIndex: Map<string, LevelOverride<TContext>>; complexRules: LevelOverride<TContext>[] } {\n const contextIndex = new Map<string, LevelOverride<TContext>>();\n const complexRules: LevelOverride<TContext>[] = [];\n\n for (const override of overrides.values()) {\n const keys = Object.keys(override.match);\n // Simple rule: only has 'context' key\n if (keys.length === 1 && keys[0] === 'context' && typeof override.match.context === 'string') {\n contextIndex.set(override.match.context, override);\n } else {\n complexRules.push(override);\n }\n }\n\n return { contextIndex, complexRules };\n}\n\nexport function createState<TContext extends LoggerContext>(\n config: LoggerConfig,\n store?: LoggerStore<TContext>,\n): LoggerState<TContext> {\n const { defaultLevel, rules } = parseLevelConfig(config.level);\n\n const loggerStore = store ?? new LoggerStore<TContext>();\n\n const levelOverrides = new Map<string, LevelOverride<TContext>>();\n for (const rule of rules) {\n const key = JSON.stringify(rule.match);\n levelOverrides.set(key, rule as LevelOverride<TContext>);\n }\n\n const { contextIndex, complexRules } = buildIndexes(levelOverrides);\n\n // Create pino with multistream\n const { destination, transports } = createStreams(config, loggerStore);\n\n const options: LoggerOptions<keyof CustomLevels> = {\n level: 'trace', // Accept all, we filter in shouldLog()\n customLevels: CUSTOM_LEVELS,\n base: { hostname: config.hostname ?? osHostname() },\n };\n\n const pinoLogger = pino(options, destination) as PinoLogger;\n\n // Parse caller config\n let callerConfig: CallerConfig | undefined;\n if (config.caller === true) {\n callerConfig = {}; // Use defaults\n } else if (config.caller && typeof config.caller === 'object') {\n callerConfig = config.caller;\n }\n\n return {\n pino: pinoLogger,\n store: loggerStore,\n defaultLevel,\n levelOverrides,\n contextIndex,\n complexRules,\n callerConfig,\n transports,\n };\n}\n\nexport function rebuildIndexes<TContext extends LoggerContext>(state: LoggerState<TContext>): void {\n const { contextIndex, complexRules } = buildIndexes(state.levelOverrides);\n state.contextIndex = contextIndex;\n state.complexRules.length = 0;\n state.complexRules.push(...complexRules);\n}\n\nexport function shouldLog<TContext extends LoggerContext>(\n state: LoggerState<TContext>,\n level: LogLevel,\n context?: string,\n): boolean {\n const effectiveLevel = getEffectiveLevel(state, context);\n if (effectiveLevel === 'off') return false;\n return LOG_LEVELS[level] <= LOG_LEVELS[effectiveLevel];\n}\n\nfunction getEffectiveLevel<TContext extends LoggerContext>(\n state: LoggerState<TContext>,\n loggerContext?: string,\n): LogLevel {\n // O(1) lookup for simple context-only rules\n if (loggerContext) {\n const indexed = state.contextIndex.get(loggerContext);\n if (indexed) return indexed.level;\n }\n\n // Check complex rules O(k) where k << n\n const storeContext = state.store.getStore();\n for (const { match, level } of state.complexRules) {\n if (matchesContext(storeContext, loggerContext, match)) {\n return level;\n }\n }\n\n return state.defaultLevel;\n}\n\nexport function matchesContext(\n storeContext: LoggerContext | undefined,\n loggerContext: string | undefined,\n match: Record<string, unknown> & { context?: string },\n): boolean {\n const combined: Record<string, unknown> = { ...storeContext, context: loggerContext };\n return Object.entries(match).every(([key, value]) => combined[key] === value);\n}\n","import { z } from 'zod';\nimport type {\n LogLevel,\n LogFormat,\n LevelRule,\n ConsoleConfig,\n FileConfig,\n HttpTransportBaseConfig,\n DiscordConfig,\n TelegramConfig,\n CloudWatchConfig,\n LevelConfigObject,\n LevelConfig,\n LoggerConfig,\n CallerConfig,\n LogStreamPattern,\n LogStreamPatternConfig,\n LogStreamTemplateConfig,\n LogStreamName,\n AutoShutdownConfig,\n} from './types.js';\n\n// Log Level\nexport const LogLevelSchema: z.ZodType<LogLevel> = z.enum([\n 'off',\n 'error',\n 'warn',\n 'info',\n 'http',\n 'verbose',\n 'debug',\n 'silly',\n]);\n\n// Log Format\nexport const LogFormatSchema: z.ZodType<LogFormat> = z.enum(['json', 'plain', 'logfmt', 'simple']);\n\n// Level Rule\nexport const LevelRuleSchema: z.ZodType<LevelRule> = z.object({\n match: z.record(z.string(), z.unknown()),\n level: LogLevelSchema,\n});\n\n// Console Config\nexport const ConsoleConfigSchema: z.ZodType<ConsoleConfig> = z.object({\n format: LogFormatSchema,\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n});\n\n// File Config\nexport const FileConfigSchema: z.ZodType<FileConfig> = z.object({\n format: LogFormatSchema,\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n dirname: z.string().min(1, 'dirname is required'),\n filename: z.string().min(1, 'filename is required'),\n datePattern: z.string().optional(),\n interval: z.string().regex(/^\\d+[Mdhms]$/).optional(),\n zippedArchive: z.boolean().optional(),\n maxSize: z.string().optional(),\n maxFiles: z.string().optional(),\n});\n\n// HTTP Transport Base Config\nexport const HttpTransportBaseConfigSchema: z.ZodType<HttpTransportBaseConfig> = z.object({\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n batchSize: z.number().int().positive().optional(),\n flushInterval: z.number().int().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n retryDelay: z.number().int().positive().optional(),\n});\n\n// Discord Config\nexport const DiscordConfigSchema: z.ZodType<DiscordConfig> = z.object({\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n batchSize: z.number().int().positive().optional(),\n flushInterval: z.number().int().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n retryDelay: z.number().int().positive().optional(),\n webhookUrl: z.string().url('webhookUrl must be a valid URL'),\n format: z.enum(['embed', 'markdown']).optional(),\n username: z.string().optional(),\n avatarUrl: z.string().url().optional(),\n embedColors: z.record(z.string(), z.number().int()).optional(),\n includeTimestamp: z.boolean().optional(),\n includeMeta: z.boolean().optional(),\n maxEmbedFields: z.number().int().min(1).max(25).optional(),\n});\n\n// Telegram Config\nexport const TelegramConfigSchema: z.ZodType<TelegramConfig> = z.object({\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n batchSize: z.number().int().positive().optional(),\n flushInterval: z.number().int().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n retryDelay: z.number().int().positive().optional(),\n botToken: z.string().min(1, 'botToken is required'),\n chatId: z.union([z.string(), z.number()]),\n parseMode: z.enum(['Markdown', 'MarkdownV2', 'HTML']).optional(),\n disableNotification: z.boolean().optional(),\n threadId: z.number().int().optional(),\n replyToMessageId: z.number().int().optional(),\n});\n\n// Log Stream Name patterns and config\nexport const LogStreamPatternSchema: z.ZodType<LogStreamPattern> = z.enum([\n 'hostname',\n 'hostname-date',\n 'hostname-uuid',\n 'date',\n 'uuid',\n]);\n\nexport const LogStreamPatternConfigSchema: z.ZodType<LogStreamPatternConfig> = z.object({\n pattern: LogStreamPatternSchema,\n});\n\nexport const LogStreamTemplateConfigSchema: z.ZodType<LogStreamTemplateConfig> = z.object({\n template: z.string().min(1, 'template is required'),\n});\n\nexport const LogStreamNameSchema: z.ZodType<LogStreamName> = z.union([\n z.string().min(1, 'logStreamName string must not be empty'),\n LogStreamPatternConfigSchema,\n LogStreamTemplateConfigSchema,\n]);\n\n// CloudWatch Config\nexport const CloudWatchConfigSchema: z.ZodType<CloudWatchConfig> = z.object({\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n batchSize: z.number().int().positive().optional(),\n flushInterval: z.number().int().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n retryDelay: z.number().int().positive().optional(),\n logGroupName: z.string().min(1, 'logGroupName is required'),\n logStreamName: LogStreamNameSchema.optional(),\n region: z.string().min(1, 'region is required'),\n accessKeyId: z.string().min(1, 'accessKeyId is required'),\n secretAccessKey: z.string().min(1, 'secretAccessKey is required'),\n createLogGroup: z.boolean().optional(),\n createLogStream: z.boolean().optional(),\n});\n\n// Level Config Object\nexport const LevelConfigObjectSchema: z.ZodType<LevelConfigObject> = z.object({\n default: LogLevelSchema,\n rules: z.array(LevelRuleSchema).optional(),\n});\n\n// Level Config (string or object)\nexport const LevelConfigSchema: z.ZodType<LevelConfig> = z.union([\n LogLevelSchema,\n LevelConfigObjectSchema,\n]);\n\n// Caller Config\nexport const CallerConfigSchema: z.ZodType<CallerConfig> = z.object({\n depth: z.number().int().nonnegative().optional(),\n fullPath: z.boolean().optional(),\n});\n\n// Auto Shutdown Config\nexport const AutoShutdownConfigSchema: z.ZodType<AutoShutdownConfig> = z.object({\n timeout: z.number().int().positive().optional(),\n signals: z.array(z.string()).optional() as z.ZodType<NodeJS.Signals[] | undefined>,\n});\n\n// Logger Config\nexport const LoggerConfigSchema = z.object({\n level: LevelConfigSchema,\n console: ConsoleConfigSchema,\n file: FileConfigSchema.optional(),\n discord: z.union([DiscordConfigSchema, z.array(DiscordConfigSchema)]).optional(),\n telegram: z.union([TelegramConfigSchema, z.array(TelegramConfigSchema)]).optional(),\n cloudwatch: z.union([CloudWatchConfigSchema, z.array(CloudWatchConfigSchema)]).optional(),\n caller: z.union([z.boolean(), CallerConfigSchema]).optional(),\n hostname: z.string().optional(),\n autoShutdown: z.union([z.boolean(), AutoShutdownConfigSchema]).optional(),\n}) satisfies z.ZodType<LoggerConfig>;\n\n// Validation function\nexport function validateConfig(config: unknown): z.infer<typeof LoggerConfigSchema> {\n return LoggerConfigSchema.parse(config);\n}\n\n// Safe validation (returns result instead of throwing)\nexport function safeValidateConfig(config: unknown) {\n return LoggerConfigSchema.safeParse(config);\n}\n","import type { CallerConfig, CallerInfo } from '../types.js';\nimport { basename, relative } from 'node:path';\n\n// Default stack depth offset:\n// 0: Error\n// 1: getCallerInfo\n// 2: log method (private)\n// 3: public method (info, error, etc.)\n// 4: actual caller\nconst BASE_STACK_OFFSET = 4;\n\n// Regex to parse V8 stack trace lines\n// Matches: \" at functionName (file:line:column)\" or \" at file:line:column\"\nconst STACK_LINE_REGEX = /^\\s*at\\s+(?:(.+?)\\s+\\()?(.+):(\\d+):(\\d+)\\)?$/;\n\nexport function getCallerInfo(config: CallerConfig, additionalOffset = 0): CallerInfo | undefined {\n const depth = config.depth ?? 0;\n const targetFrame = BASE_STACK_OFFSET + depth + additionalOffset;\n\n const originalPrepare = Error.prepareStackTrace;\n const originalLimit = Error.stackTraceLimit;\n\n try {\n // Capture more frames than we need\n Error.stackTraceLimit = targetFrame + 5;\n\n const err = new Error();\n const stack = err.stack;\n\n if (!stack) {\n return undefined;\n }\n\n const lines = stack.split('\\n');\n const targetLine = lines[targetFrame];\n\n if (!targetLine) {\n return undefined;\n }\n\n const match = targetLine.match(STACK_LINE_REGEX);\n if (!match) {\n return undefined;\n }\n\n const [, fnName, filePath, lineStr, colStr] = match;\n const line = parseInt(lineStr, 10);\n const column = parseInt(colStr, 10);\n\n // Process file path\n let file = filePath;\n\n // Handle file:// URLs (ESM)\n if (file.startsWith('file://')) {\n file = file.slice(7);\n }\n\n // Shorten path if fullPath is not enabled\n if (!config.fullPath) {\n // Try relative path first, fall back to basename\n try {\n const relativePath = relative(process.cwd(), file);\n // If relative path goes up too many directories, use basename\n if (relativePath.startsWith('..') && relativePath.split('/').filter(p => p === '..').length > 2) {\n file = basename(file);\n } else {\n file = relativePath;\n }\n } catch {\n file = basename(file);\n }\n }\n\n return {\n file,\n line,\n column: isNaN(column) ? undefined : column,\n function: fnName && fnName !== '<anonymous>' ? fnName : undefined,\n };\n } finally {\n Error.prepareStackTrace = originalPrepare;\n Error.stackTraceLimit = originalLimit;\n }\n}\n\nexport function formatCallerInfo(info: CallerInfo): string {\n const location = `${info.file}:${info.line}`;\n if (info.function) {\n return `${info.function} (${location})`;\n }\n return location;\n}\n","import type { Logger } from '../logger.js';\nimport type { LoggerContext } from '../types.js';\n\nexport interface GracefulShutdownOptions {\n /** Timeout in ms before forcing exit (default: 5000) */\n timeout?: number;\n /** Exit code on successful shutdown (default: 0) */\n exitCode?: number;\n /** Custom signals to handle (default: ['SIGTERM', 'SIGINT']) */\n signals?: NodeJS.Signals[];\n /** Called before shutdown starts */\n onShutdown?: () => void | Promise<void>;\n}\n\nconst DEFAULT_OPTIONS: Required<Omit<GracefulShutdownOptions, 'onShutdown'>> = {\n timeout: 5000,\n exitCode: 0,\n signals: ['SIGTERM', 'SIGINT'],\n};\n\nlet registered = false;\n\n/**\n * Register graceful shutdown handlers for the logger.\n * Ensures all buffered logs are flushed before process exit.\n *\n * @example\n * ```typescript\n * const logger = Logger.create(config);\n * registerShutdown(logger);\n *\n * // Or with options:\n * registerShutdown(logger, {\n * timeout: 10000,\n * onShutdown: () => console.log('Shutting down...'),\n * });\n * ```\n */\nexport function registerShutdown<TContext extends LoggerContext>(\n logger: Logger<TContext>,\n options: GracefulShutdownOptions = {},\n): () => Promise<void> {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n const shutdown = async (signal?: string): Promise<void> => {\n if (signal) {\n console.error(`[Logger] Received ${signal}, shutting down gracefully...`);\n }\n\n try {\n // Call user's onShutdown hook\n if (opts.onShutdown) {\n await opts.onShutdown();\n }\n\n // Create a timeout promise\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new Error(`Shutdown timed out after ${opts.timeout}ms`));\n }, opts.timeout);\n });\n\n // Race between shutdown and timeout\n await Promise.race([\n logger.shutdown(),\n timeoutPromise,\n ]);\n\n if (signal) {\n console.error('[Logger] Graceful shutdown completed');\n process.exit(opts.exitCode);\n }\n } catch (error) {\n console.error('[Logger] Shutdown error:', error instanceof Error ? error.message : error);\n if (signal) {\n process.exit(1);\n }\n }\n };\n\n // Only register handlers once\n if (!registered) {\n for (const signal of opts.signals) {\n process.on(signal, () => void shutdown(signal));\n }\n\n // Also handle uncaught exceptions and unhandled rejections\n process.on('beforeExit', () => void shutdown());\n\n registered = true;\n }\n\n // Return manual shutdown function\n return shutdown;\n}\n","import { LoggerStore } from './store.js';\nimport { createState, shouldLog, rebuildIndexes, type LoggerState } from './state.js';\nimport { validateConfig } from './schema.js';\nimport { assertLogLevel, type LoggerConfig, type LoggerContext, type LevelOverride, type LevelOverrideMatch, type LogLevel, type Meta } from './types.js';\nimport { getCallerInfo, formatCallerInfo } from './utils/caller.js';\nimport { registerShutdown } from './utils/shutdown.js';\n\nexport class Logger<TContext extends LoggerContext = LoggerContext> {\n private profileTimers = new Map<string, number>();\n\n private constructor(\n private state: LoggerState<TContext>,\n private context: string,\n ) {}\n\n static create<TContext extends LoggerContext = LoggerContext>(\n config: LoggerConfig,\n store?: LoggerStore<TContext>,\n ): Logger<TContext> {\n const validatedConfig = validateConfig(config);\n const state = createState(validatedConfig as LoggerConfig, store);\n const logger = new Logger<TContext>(state, 'APP');\n\n // Auto-register shutdown handlers if configured\n if (validatedConfig.autoShutdown) {\n const shutdownConfig = typeof validatedConfig.autoShutdown === 'object'\n ? validatedConfig.autoShutdown\n : {};\n registerShutdown(logger, shutdownConfig);\n }\n\n return logger;\n }\n\n for(context: string): Logger<TContext> {\n return new Logger(this.state, context);\n }\n\n // State accessors\n\n getStore(): LoggerStore<TContext> {\n return this.state.store;\n }\n\n setLevelOverride(match: LevelOverrideMatch<TContext>, level: LogLevel): void {\n assertLogLevel(level);\n const key = JSON.stringify(match);\n this.state.levelOverrides.set(key, { match, level });\n rebuildIndexes(this.state);\n }\n\n removeLevelOverride(match: LevelOverrideMatch<TContext>): boolean {\n const key = JSON.stringify(match);\n const override = this.state.levelOverrides.get(key);\n if (override?.readonly) {\n return false;\n }\n const deleted = this.state.levelOverrides.delete(key);\n if (deleted) {\n rebuildIndexes(this.state);\n }\n return deleted;\n }\n\n clearLevelOverrides(): void {\n let changed = false;\n for (const [key, override] of this.state.levelOverrides) {\n if (!override.readonly) {\n this.state.levelOverrides.delete(key);\n changed = true;\n }\n }\n if (changed) {\n rebuildIndexes(this.state);\n }\n }\n\n getLevelOverrides(): LevelOverride<TContext>[] {\n return Array.from(this.state.levelOverrides.values());\n }\n\n // Shutdown\n\n /**\n * Gracefully shutdown the logger, flushing all pending messages.\n * Should be called before process exit to ensure no logs are lost.\n */\n async shutdown(): Promise<void> {\n const closePromises = this.state.transports.map((transport) => transport.close());\n await Promise.all(closePromises);\n }\n\n // Profiling\n\n profile(id: string, meta?: object): void {\n const existing = this.profileTimers.get(id);\n if (existing) {\n const duration = Date.now() - existing;\n this.profileTimers.delete(id);\n this.info(`${id} completed`, { ...meta, durationMs: duration });\n } else {\n this.profileTimers.set(id, Date.now());\n }\n }\n\n // Logging methods\n\n error(errorOrMessage: Error | string, messageOrMeta?: string | Meta, meta?: Meta): void {\n if (!shouldLog(this.state, 'error', this.context)) return;\n\n if (errorOrMessage instanceof Error) {\n // error(Error), error(Error, meta), error(Error, message), error(Error, message, meta)\n if (typeof messageOrMeta === 'string') {\n this.log('error', messageOrMeta, meta, errorOrMessage);\n } else {\n this.log('error', errorOrMessage.message, messageOrMeta, errorOrMessage);\n }\n } else {\n // error(message), error(message, meta)\n this.log('error', errorOrMessage, messageOrMeta as Meta | undefined);\n }\n }\n\n warn(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'warn', this.context)) return;\n this.log('warn', message, meta);\n }\n\n info(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'info', this.context)) return;\n this.log('info', message, meta);\n }\n\n http(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'http', this.context)) return;\n this.log('http', message, meta);\n }\n\n verbose(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'verbose', this.context)) return;\n this.log('verbose', message, meta);\n }\n\n debug(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'debug', this.context)) return;\n this.log('debug', message, meta);\n }\n\n silly(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'silly', this.context)) return;\n this.log('silly', message, meta);\n }\n\n // Private\n\n private log(level: LogLevel, message: string, meta?: Meta, error?: Error | unknown, callerOffset = 0): void {\n const resolved = typeof meta === 'function' ? meta() : meta;\n const logMeta: Record<string, unknown> = { context: this.context, ...resolved };\n\n // Add store context\n const storeContext = this.state.store.getStore();\n if (storeContext) {\n Object.assign(logMeta, storeContext);\n }\n\n // Add caller info if enabled\n if (this.state.callerConfig) {\n const callerInfo = getCallerInfo(this.state.callerConfig, callerOffset);\n if (callerInfo) {\n logMeta.caller = formatCallerInfo(callerInfo);\n }\n }\n\n if (error instanceof Error) {\n logMeta.errorMessage = error.message;\n logMeta.stack = error.stack;\n } else if (error !== undefined) {\n logMeta.error = error;\n }\n\n // Use pino's logging - it will handle the streams\n const pinoMethod = this.getPinoMethod(level);\n pinoMethod.call(this.state.pino, logMeta, message);\n }\n\n private getPinoMethod(level: LogLevel): (obj: object, msg: string) => void {\n switch (level) {\n case 'error':\n return this.state.pino.error.bind(this.state.pino);\n case 'warn':\n return this.state.pino.warn.bind(this.state.pino);\n case 'info':\n return this.state.pino.info.bind(this.state.pino);\n case 'http':\n case 'verbose':\n // Use info level for http/verbose as they map to 25\n return (obj: object, msg: string) => {\n (this.state.pino as any)[level](obj, msg);\n };\n case 'debug':\n return this.state.pino.debug.bind(this.state.pino);\n case 'silly':\n return (obj: object, msg: string) => {\n (this.state.pino as any).silly(obj, msg);\n };\n default:\n return this.state.pino.info.bind(this.state.pino);\n }\n }\n}\n","import { Logger } from './logger.js';\nimport { LoggerStore } from './store.js';\nimport type { LoggerConfig, LoggerContext, LevelOverride, LogLevel } from './types.js';\n\nexport interface SingletonLogger<TContext extends LoggerContext> {\n init(config: LoggerConfig, store?: LoggerStore<TContext>): Logger<TContext>;\n get(): Logger<TContext>;\n for(context: string): Logger<TContext>;\n getStore(): LoggerStore<TContext>;\n setLevelOverride(match: Partial<TContext>, level: LogLevel): void;\n removeLevelOverride(match: Partial<TContext>): void;\n getLevelOverrides(): LevelOverride<TContext>[];\n clearLevelOverrides(): void;\n}\n\nexport function createSingletonLogger<\n TContext extends LoggerContext = LoggerContext,\n>(): SingletonLogger<TContext> {\n let root: Logger<TContext> | null = null;\n\n const ensureInit = (): Logger<TContext> => {\n if (!root) {\n throw new Error('Logger not initialized. Call init(config) first.');\n }\n return root;\n };\n\n return {\n init(config: LoggerConfig, store?: LoggerStore<TContext>): Logger<TContext> {\n if (!root) {\n root = Logger.create(config, store);\n }\n return root;\n },\n\n get(): Logger<TContext> {\n return ensureInit();\n },\n\n for(context: string): Logger<TContext> {\n return ensureInit().for(context);\n },\n\n getStore(): LoggerStore<TContext> {\n return ensureInit().getStore();\n },\n\n setLevelOverride(match: Partial<TContext>, level: LogLevel): void {\n ensureInit().setLevelOverride(match, level);\n },\n\n removeLevelOverride(match: Partial<TContext>): void {\n ensureInit().removeLevelOverride(match);\n },\n\n getLevelOverrides(): LevelOverride<TContext>[] {\n return ensureInit().getLevelOverrides();\n },\n\n clearLevelOverrides(): void {\n ensureInit().clearLevelOverrides();\n },\n };\n}\n","export interface TimingResult {\n label: string;\n durationMs: number;\n durationFormatted: string;\n}\n\nexport interface Timer {\n end: () => TimingResult;\n}\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms.toFixed(2)}ms`;\n }\n if (ms < 60000) {\n return `${(ms / 1000).toFixed(2)}s`;\n }\n const minutes = Math.floor(ms / 60000);\n const seconds = ((ms % 60000) / 1000).toFixed(1);\n return `${minutes}m ${seconds}s`;\n}\n\nexport function createTimer(label: string): Timer {\n const start = performance.now();\n\n return {\n end(): TimingResult {\n const durationMs = performance.now() - start;\n return {\n label,\n durationMs,\n durationFormatted: formatDuration(durationMs),\n };\n },\n };\n}\n\nexport async function measureAsync<T>(\n label: string,\n fn: () => Promise<T>,\n): Promise<{ result: T; timing: TimingResult }> {\n const timer = createTimer(label);\n const result = await fn();\n const timing = timer.end();\n return { result, timing };\n}\n\nexport function measureSync<T>(\n label: string,\n fn: () => T,\n): { result: T; timing: TimingResult } {\n const timer = createTimer(label);\n const result = fn();\n const timing = timer.end();\n return { result, timing };\n}\n","import { randomUUID } from 'crypto';\n\nexport interface RequestIdOptions {\n prefix?: string;\n short?: boolean;\n}\n\nexport function generateRequestId(options: RequestIdOptions = {}): string {\n const { prefix, short = false } = options;\n const uuid = randomUUID();\n const id = short ? uuid.split('-')[0] : uuid;\n return prefix ? `${prefix}-${id}` : id;\n}\n\nexport function extractRequestId(headers: Record<string, string | string[] | undefined>): string | undefined {\n const headerNames = ['x-request-id', 'x-correlation-id', 'x-trace-id'];\n\n for (const name of headerNames) {\n const value = headers[name];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n if (Array.isArray(value) && value.length > 0) {\n return value[0];\n }\n }\n\n return undefined;\n}\n\nexport function getOrGenerateRequestId(\n headers: Record<string, string | string[] | undefined>,\n options: RequestIdOptions = {},\n): string {\n return extractRequestId(headers) ?? generateRequestId(options);\n}\n","const DEFAULT_SECRET_PATTERNS = [\n 'password',\n 'secret',\n 'token',\n 'apikey',\n 'api_key',\n 'api-key',\n 'auth',\n 'credential',\n 'private',\n];\n\nconst DEFAULT_MASK = '***';\n\nexport interface MaskSecretsOptions {\n patterns?: string[];\n mask?: string;\n deep?: boolean;\n}\n\nfunction isSecretKey(key: string, patterns: string[]): boolean {\n const lowerKey = key.toLowerCase();\n return patterns.some((pattern) => lowerKey.includes(pattern.toLowerCase()));\n}\n\nfunction maskUrlCredentials(url: string, mask: string): string {\n try {\n const parsed = new URL(url);\n if (parsed.password) {\n parsed.password = mask;\n }\n if (parsed.username && parsed.password) {\n parsed.username = mask;\n }\n return parsed.toString();\n } catch {\n return url;\n }\n}\n\nexport function maskSecrets(\n obj: unknown,\n options: MaskSecretsOptions = {},\n): unknown {\n const { patterns = DEFAULT_SECRET_PATTERNS, mask = DEFAULT_MASK, deep = true } = options;\n\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj === 'string') {\n if (obj.startsWith('http://') || obj.startsWith('https://')) {\n return maskUrlCredentials(obj, mask);\n }\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return deep ? obj.map((item) => maskSecrets(item, options)) : obj;\n }\n\n if (typeof obj === 'object') {\n const result: Record<string | symbol, unknown> = {};\n\n // Copy Symbol properties first (important for Winston's internal symbols)\n for (const sym of Object.getOwnPropertySymbols(obj)) {\n result[sym] = (obj as Record<symbol, unknown>)[sym];\n }\n\n // Process string keys\n for (const [key, value] of Object.entries(obj)) {\n if (isSecretKey(key, patterns)) {\n result[key] = mask;\n } else if (deep && typeof value === 'object' && value !== null) {\n result[key] = maskSecrets(value, options);\n } else if (typeof value === 'string') {\n result[key] = maskSecrets(value, options);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n return obj;\n}\n\nexport function createMasker(options: MaskSecretsOptions = {}) {\n return (obj: unknown): unknown => maskSecrets(obj, options);\n}\n","import { inspect } from 'util';\nimport { LOG_LEVELS, type LogFormat, type LoggerContext, type LogLevel, type LevelRule } from './types.js';\n\nconst DEFAULT_CONTEXT = 'APP';\n\nconst LEVEL_COLORS: Record<string, string> = {\n error: '\\x1b[31m', // red\n warn: '\\x1b[33m', // yellow\n info: '\\x1b[32m', // green\n http: '\\x1b[35m', // magenta\n verbose: '\\x1b[36m', // cyan\n debug: '\\x1b[34m', // blue\n silly: '\\x1b[90m', // grey\n};\nconst RESET = '\\x1b[0m';\n\nexport function colorizeLevel(level: string): string {\n const color = LEVEL_COLORS[level] || '';\n return color ? `${color}${level}${RESET}` : level;\n}\n\nexport function formatMeta(meta: Record<string, unknown>, colors: boolean): string {\n return Object.entries(meta)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => {\n if (typeof value === 'object') {\n const inspected = inspect(value, { depth: 4, colors, compact: false });\n return `\\n ${key}: ${inspected.split('\\n').join('\\n ')}`;\n }\n return `\\n ${key}: ${value}`;\n })\n .join('');\n}\n\nconst MAX_FLATTEN_DEPTH = 10;\nconst CIRCULAR_REF = '[Circular]';\n\nexport function flattenObject(\n obj: Record<string, unknown>,\n prefix = '',\n ancestors: WeakSet<object> = new WeakSet(),\n depth = 0,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n // Protect against too deep nesting\n if (depth > MAX_FLATTEN_DEPTH) {\n result[prefix || 'value'] = '[Max depth exceeded]';\n return result;\n }\n\n // Add current object to ancestors (current path in recursion)\n ancestors.add(obj);\n\n for (const [key, value] of Object.entries(obj)) {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Error)) {\n // Check for circular reference (only in current path)\n if (ancestors.has(value as object)) {\n result[newKey] = CIRCULAR_REF;\n } else {\n Object.assign(result, flattenObject(value as Record<string, unknown>, newKey, ancestors, depth + 1));\n }\n } else {\n result[newKey] = value;\n }\n }\n\n // Remove from ancestors when leaving this level (allow reuse in sibling branches)\n ancestors.delete(obj);\n\n return result;\n}\n\nexport function formatLogfmtValue(value: unknown): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (typeof value === 'string') {\n if (value.includes(' ') || value.includes('\"') || value.includes('=')) {\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n }\n return value;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (value instanceof Error) {\n return `\"${value.message.replace(/\"/g, '\\\\\"')}\"`;\n }\n\n if (Array.isArray(value)) {\n return `\"${JSON.stringify(value).replace(/\"/g, '\\\\\"')}\"`;\n }\n\n return `\"${JSON.stringify(value).replace(/\"/g, '\\\\\"')}\"`;\n}\n\nexport function formatLogfmt(data: Record<string, unknown>): string {\n const flattened = flattenObject(data);\n\n return Object.entries(flattened)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${key}=${formatLogfmtValue(value)}`)\n .join(' ');\n}\n"]}
1
+ {"version":3,"sources":["../src/store.ts","../src/types.ts","../src/transports/buffer.ts","../src/transports/base-http.ts","../src/transports/discord.ts","../src/transports/telegram.ts","../src/transports/cloudwatch.ts","../src/streams.ts","../src/state.ts","../src/schema.ts","../src/utils/caller.ts","../src/utils/shutdown.ts","../src/utils/error.ts","../src/logger.ts","../src/singleton.ts","../src/utils/timing.ts","../src/utils/request-id.ts","../src/utils/mask-secrets.ts","../src/formatters.ts"],"names":["AsyncLocalStorage","EventEmitter","LEVEL_EMOJI","randomUUID","osHostname","CloudWatchLogsClient","PutLogEventsCommand","CreateLogGroupCommand","CreateLogStreamCommand","DescribeLogStreamsCommand","Transform","mkdir","createStream","pino","Writable","z","relative","basename","DEFAULT_OPTIONS","httpData"],"mappings":"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","file":"index.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport type { LoggerContext } from './types.js';\n\nexport class LoggerStore<TContext extends LoggerContext = LoggerContext> {\n private storage = new AsyncLocalStorage<TContext>();\n\n getStore(): TContext | undefined {\n return this.storage.getStore();\n }\n\n run<T>(context: TContext, fn: () => T): T {\n return this.storage.run(context, fn);\n }\n}\n","export const LOG_LEVELS = {\n off: -1,\n error: 0,\n warn: 1,\n info: 2,\n http: 3,\n verbose: 4,\n debug: 5,\n silly: 6,\n} as const;\n\nexport type LogLevel = keyof typeof LOG_LEVELS;\n\nexport function isValidLogLevel(level: string): level is LogLevel {\n return level in LOG_LEVELS;\n}\n\nexport function assertLogLevel(level: string): asserts level is LogLevel {\n if (!isValidLogLevel(level)) {\n throw new Error(`Invalid log level: \"${level}\". Valid levels: ${Object.keys(LOG_LEVELS).join(', ')}`);\n }\n}\n\nexport type LogFormat = 'json' | 'plain' | 'logfmt' | 'simple';\n\nexport interface LevelRule {\n match: Record<string, unknown> & { context?: string };\n level: LogLevel;\n}\n\nexport interface ConsoleConfig {\n format: LogFormat;\n level?: LogLevel;\n rules?: LevelRule[];\n}\n\nexport interface FileConfig {\n format: LogFormat;\n level?: LogLevel;\n rules?: LevelRule[];\n dirname: string;\n filename: string;\n datePattern?: string;\n interval?: string;\n zippedArchive?: boolean;\n maxSize?: string;\n maxFiles?: string;\n}\n\n// HTTP Transport base config\nexport interface HttpTransportBaseConfig {\n level?: LogLevel;\n rules?: LevelRule[];\n batchSize?: number;\n flushInterval?: number;\n maxRetries?: number;\n retryDelay?: number;\n}\n\n// Discord Transport\nexport interface DiscordConfig extends HttpTransportBaseConfig {\n webhookUrl: string;\n format?: 'embed' | 'markdown'; // default: 'embed'\n username?: string;\n avatarUrl?: string;\n embedColors?: Partial<Record<LogLevel, number>>;\n includeTimestamp?: boolean;\n includeMeta?: boolean;\n maxEmbedFields?: number;\n}\n\n// Telegram Transport\nexport interface TelegramConfig extends HttpTransportBaseConfig {\n botToken: string;\n chatId: string | number;\n parseMode?: 'Markdown' | 'MarkdownV2' | 'HTML';\n disableNotification?: boolean;\n threadId?: number;\n replyToMessageId?: number;\n}\n\n// CloudWatch Log Stream Name patterns\nexport type LogStreamPattern = 'hostname' | 'hostname-date' | 'hostname-uuid' | 'date' | 'uuid';\n\nexport interface LogStreamPatternConfig {\n pattern: LogStreamPattern;\n}\n\nexport interface LogStreamTemplateConfig {\n /** Custom template with variables: {hostname}, {date}, {datetime}, {uuid}, {pid}, {env} */\n template: string;\n}\n\nexport type LogStreamName = string | LogStreamPatternConfig | LogStreamTemplateConfig;\n\n// CloudWatch Transport\nexport interface CloudWatchConfig extends HttpTransportBaseConfig {\n logGroupName: string;\n /** Log stream name - string, pattern config, or template config. Defaults to hostname pattern */\n logStreamName?: LogStreamName;\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n createLogGroup?: boolean;\n createLogStream?: boolean;\n}\n\nexport interface LevelConfigObject {\n default: LogLevel;\n rules?: LevelRule[];\n}\n\nexport type LevelConfig = LogLevel | LevelConfigObject;\n\nexport interface CallerConfig {\n /** Stack depth to capture (default: 1). Higher values trace further up the call stack */\n depth?: number;\n /** Include full file path (default: false). If false, shows relative or basename only */\n fullPath?: boolean;\n}\n\nexport interface CallerInfo {\n file: string;\n line: number;\n column?: number;\n function?: string;\n}\n\nexport interface AutoShutdownConfig {\n /** Timeout in ms before forcing exit (default: 5000) */\n timeout?: number;\n /** Custom signals to handle (default: ['SIGTERM', 'SIGINT']) */\n signals?: NodeJS.Signals[];\n}\n\nexport interface LoggerConfig {\n level: LevelConfig;\n console: ConsoleConfig;\n file?: FileConfig;\n discord?: DiscordConfig | DiscordConfig[];\n telegram?: TelegramConfig | TelegramConfig[];\n cloudwatch?: CloudWatchConfig | CloudWatchConfig[];\n /** Enable caller info (file:line) in logs. Pass true for defaults or CallerConfig for options */\n caller?: boolean | CallerConfig;\n /** Hostname to include in all log entries. Defaults to os.hostname() if not specified */\n hostname?: string;\n /** Auto-register graceful shutdown handlers. Pass true for defaults or config object */\n autoShutdown?: boolean | AutoShutdownConfig;\n}\n\nexport type LoggerContext = Record<string, unknown>;\n\nexport type LevelOverrideMatch<TContext extends LoggerContext> = Partial<TContext> & { context?: string };\n\nexport interface LevelOverride<TContext extends LoggerContext> {\n match: LevelOverrideMatch<TContext>;\n level: LogLevel;\n readonly?: boolean;\n}\n\nexport type Meta = object | (() => object);\n","import type { LogLevel } from '../types.js';\n\nexport interface BufferedMessage {\n level: LogLevel;\n message: string;\n timestamp: Date;\n context?: string;\n meta?: Record<string, unknown>;\n}\n\nexport interface BufferOptions {\n batchSize: number;\n flushInterval: number;\n maxRetries: number;\n retryDelay: number;\n onFlush: (messages: BufferedMessage[]) => Promise<void>;\n onError?: (error: Error, messages: BufferedMessage[]) => void;\n}\n\nexport class MessageBuffer {\n private queue: BufferedMessage[] = [];\n private timer: NodeJS.Timeout | null = null;\n private flushing = false;\n private closed = false;\n\n constructor(private options: BufferOptions) {}\n\n add(message: BufferedMessage): void {\n if (this.closed) return;\n\n this.queue.push(message);\n\n if (this.queue.length >= this.options.batchSize) {\n void this.flush();\n } else {\n this.scheduleFlush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.flushing || this.queue.length === 0) return;\n\n this.flushing = true;\n this.clearTimer();\n\n const messages = this.queue.splice(0, this.options.batchSize);\n\n try {\n await this.sendWithRetry(messages);\n } catch (error) {\n this.options.onError?.(error as Error, messages);\n } finally {\n this.flushing = false;\n\n // If there are more messages, continue flushing\n if (this.queue.length > 0 && !this.closed) {\n void this.flush();\n }\n }\n }\n\n async close(): Promise<void> {\n this.closed = true;\n this.clearTimer();\n\n // Flush remaining messages\n while (this.queue.length > 0) {\n await this.flush();\n }\n }\n\n private scheduleFlush(): void {\n if (this.timer || this.closed) return;\n\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.flush();\n }, this.options.flushInterval);\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n private async sendWithRetry(messages: BufferedMessage[]): Promise<void> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < this.options.maxRetries; attempt++) {\n try {\n await this.options.onFlush(messages);\n return;\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < this.options.maxRetries - 1) {\n await this.delay(this.options.retryDelay * Math.pow(2, attempt));\n }\n }\n }\n\n throw lastError;\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import { EventEmitter } from 'events';\nimport { MessageBuffer, type BufferedMessage } from './buffer.js';\nimport type { LogLevel } from '../types.js';\n\nexport interface BaseHttpTransportOptions {\n batchSize?: number;\n flushInterval?: number;\n maxRetries?: number;\n retryDelay?: number;\n}\n\nconst DEFAULT_OPTIONS = {\n batchSize: 10,\n flushInterval: 5000,\n maxRetries: 3,\n retryDelay: 1000,\n};\n\nexport abstract class BaseHttpTransport extends EventEmitter {\n protected buffer: MessageBuffer;\n\n constructor(opts: BaseHttpTransportOptions = {}) {\n super();\n\n this.buffer = new MessageBuffer({\n batchSize: opts.batchSize ?? DEFAULT_OPTIONS.batchSize,\n flushInterval: opts.flushInterval ?? DEFAULT_OPTIONS.flushInterval,\n maxRetries: opts.maxRetries ?? DEFAULT_OPTIONS.maxRetries,\n retryDelay: opts.retryDelay ?? DEFAULT_OPTIONS.retryDelay,\n onFlush: this.sendBatch.bind(this),\n onError: this.handleError.bind(this),\n });\n }\n\n log(info: Record<string, unknown>, callback: () => void): void {\n const message = this.transformMessage(info);\n this.buffer.add(message);\n callback();\n }\n\n close(): Promise<void> {\n return this.buffer.close();\n }\n\n protected transformMessage(info: Record<string, unknown>): BufferedMessage {\n const { level, message, timestamp, context, ...meta } = info;\n\n return {\n level: level as LogLevel,\n message: String(message),\n timestamp: timestamp instanceof Date ? timestamp : (timestamp ? new Date(String(timestamp)) : new Date()),\n context: context as string | undefined,\n meta: Object.keys(meta).length > 0 ? meta : undefined,\n };\n }\n\n protected handleError(error: Error, messages: BufferedMessage[]): void {\n // Log to stderr to avoid infinite loop\n console.error(\n `[${this.constructor.name}] Failed to send ${messages.length} messages:`,\n error.message,\n );\n\n // Emit error event\n this.emit('error', error);\n }\n\n protected abstract sendBatch(messages: BufferedMessage[]): Promise<void>;\n}\n","import { BaseHttpTransport } from './base-http.js';\nimport type { BufferedMessage } from './buffer.js';\nimport type { DiscordConfig, LogLevel } from '../types.js';\n\nconst DEFAULT_EMBED_COLORS: Record<LogLevel, number> = {\n off: 0x000000,\n error: 0xed4245,\n warn: 0xfee75c,\n info: 0x57f287,\n http: 0x5865f2,\n verbose: 0x9b59b6,\n debug: 0x3498db,\n silly: 0x95a5a6,\n};\n\ninterface DiscordEmbed {\n title: string;\n description: string;\n color: number;\n timestamp?: string;\n fields?: Array<{ name: string; value: string; inline?: boolean }>;\n}\n\ninterface DiscordWebhookPayload {\n username?: string;\n avatar_url?: string;\n content?: string;\n embeds?: DiscordEmbed[];\n}\n\nconst LEVEL_EMOJI: Record<LogLevel, string> = {\n off: '⚫',\n error: '🔴',\n warn: '🟡',\n info: '🟢',\n http: '🔵',\n verbose: '🟣',\n debug: '⚪',\n silly: '⚫',\n};\n\nexport class DiscordTransport extends BaseHttpTransport {\n private config: DiscordConfig;\n\n constructor(config: DiscordConfig) {\n super({\n batchSize: config.batchSize ?? 10,\n flushInterval: config.flushInterval ?? 2000,\n maxRetries: config.maxRetries,\n retryDelay: config.retryDelay,\n });\n this.config = config;\n }\n\n protected async sendBatch(messages: BufferedMessage[]): Promise<void> {\n if (this.config.format === 'markdown') {\n await this.sendMarkdownBatch(messages);\n } else {\n await this.sendEmbedBatch(messages);\n }\n }\n\n private async sendEmbedBatch(messages: BufferedMessage[]): Promise<void> {\n // Discord allows max 10 embeds per message\n const chunks = this.chunkArray(messages, 10);\n\n for (const chunk of chunks) {\n const payload: DiscordWebhookPayload = {\n username: this.config.username,\n avatar_url: this.config.avatarUrl,\n embeds: chunk.map((msg) => this.createEmbed(msg)),\n };\n\n await this.sendWebhook(payload);\n }\n }\n\n private async sendMarkdownBatch(messages: BufferedMessage[]): Promise<void> {\n // Discord content limit is 2000 chars, send each message separately if needed\n const content = messages.map((msg) => this.formatMarkdown(msg)).join('\\n\\n---\\n\\n');\n\n // Split into chunks of ~1900 chars to stay under 2000 limit\n const chunks = this.splitContent(content, 1900);\n\n for (const chunk of chunks) {\n const payload: DiscordWebhookPayload = {\n username: this.config.username,\n avatar_url: this.config.avatarUrl,\n content: chunk,\n };\n\n await this.sendWebhook(payload);\n }\n }\n\n private formatMarkdown(msg: BufferedMessage): string {\n const emoji = LEVEL_EMOJI[msg.level];\n const level = msg.level.toUpperCase();\n const context = msg.context || 'APP';\n const timestamp = this.config.includeTimestamp !== false\n ? `\\`${msg.timestamp.toISOString()}\\``\n : '';\n\n let text = `${emoji} **${level}** [${context}] ${timestamp}\\n${msg.message}`;\n\n if (this.config.includeMeta !== false && msg.meta && Object.keys(msg.meta).length > 0) {\n text += '\\n```json\\n' + JSON.stringify(msg.meta, null, 2) + '\\n```';\n }\n\n return text;\n }\n\n private splitContent(content: string, maxLength: number): string[] {\n if (content.length <= maxLength) return [content];\n\n const chunks: string[] = [];\n let current = content;\n\n while (current.length > 0) {\n if (current.length <= maxLength) {\n chunks.push(current);\n break;\n }\n\n // Find a good split point (newline or space)\n let splitAt = current.lastIndexOf('\\n', maxLength);\n if (splitAt === -1 || splitAt < maxLength / 2) {\n splitAt = current.lastIndexOf(' ', maxLength);\n }\n if (splitAt === -1 || splitAt < maxLength / 2) {\n splitAt = maxLength;\n }\n\n chunks.push(current.slice(0, splitAt));\n current = current.slice(splitAt).trimStart();\n }\n\n return chunks;\n }\n\n private createEmbed(msg: BufferedMessage): DiscordEmbed {\n const color = this.config.embedColors?.[msg.level] ?? DEFAULT_EMBED_COLORS[msg.level];\n\n const embed: DiscordEmbed = {\n title: `[${msg.level.toUpperCase()}] ${msg.context || 'APP'}`,\n description: msg.message.slice(0, 4096), // Discord limit\n color,\n };\n\n if (this.config.includeTimestamp !== false) {\n embed.timestamp = msg.timestamp.toISOString();\n }\n\n if (this.config.includeMeta !== false && msg.meta) {\n embed.fields = this.metaToFields(msg.meta);\n }\n\n return embed;\n }\n\n private metaToFields(\n meta: Record<string, unknown>,\n ): Array<{ name: string; value: string; inline?: boolean }> {\n const maxFields = this.config.maxEmbedFields ?? 25;\n const fields: Array<{ name: string; value: string; inline?: boolean }> = [];\n\n for (const [key, value] of Object.entries(meta)) {\n if (fields.length >= maxFields) break;\n\n let strValue: string;\n if (typeof value === 'object') {\n strValue = '```json\\n' + JSON.stringify(value, null, 2).slice(0, 1000) + '\\n```';\n } else {\n strValue = String(value).slice(0, 1024);\n }\n\n fields.push({\n name: key.slice(0, 256),\n value: strValue,\n inline: typeof value !== 'object' && String(value).length < 50,\n });\n }\n\n return fields;\n }\n\n private async sendWebhook(payload: DiscordWebhookPayload): Promise<void> {\n const response = await fetch(this.config.webhookUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Discord webhook failed: ${response.status} ${text}`);\n }\n }\n\n private chunkArray<T>(array: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n }\n}\n","import { BaseHttpTransport } from './base-http.js';\nimport type { BufferedMessage } from './buffer.js';\nimport type { TelegramConfig, LogLevel } from '../types.js';\n\nconst LEVEL_EMOJI: Record<LogLevel, string> = {\n off: '',\n error: '🔴',\n warn: '🟡',\n info: '🟢',\n http: '🔵',\n verbose: '🟣',\n debug: '⚪',\n silly: '⚫',\n};\n\nexport class TelegramTransport extends BaseHttpTransport {\n private config: TelegramConfig;\n private apiUrl: string;\n\n constructor(config: TelegramConfig) {\n super({\n batchSize: config.batchSize ?? 20,\n flushInterval: config.flushInterval ?? 1000,\n maxRetries: config.maxRetries,\n retryDelay: config.retryDelay,\n });\n this.config = config;\n this.apiUrl = `https://api.telegram.org/bot${config.botToken}`;\n }\n\n protected async sendBatch(messages: BufferedMessage[]): Promise<void> {\n const text = this.formatBatchMessage(messages);\n await this.sendMessage(text, messages);\n }\n\n private formatBatchMessage(messages: BufferedMessage[]): string {\n const parseMode = this.config.parseMode ?? 'HTML';\n\n return messages\n .map((msg) => {\n if (parseMode === 'HTML') {\n return this.formatHtml(msg);\n }\n return this.formatMarkdown(msg, parseMode === 'MarkdownV2');\n })\n .join('\\n\\n---\\n\\n');\n }\n\n private formatMarkdown(msg: BufferedMessage, v2: boolean): string {\n const emoji = LEVEL_EMOJI[msg.level];\n const escape = v2 ? this.escapeMarkdownV2.bind(this) : (s: string) => s;\n const bracket = v2 ? ['\\\\[', '\\\\]'] : ['[', ']'];\n\n let text = `${emoji} *${msg.level.toUpperCase()}* ${bracket[0]}${escape(msg.context || 'APP')}${bracket[1]}\\n`;\n text += escape(msg.message);\n\n if (msg.meta && Object.keys(msg.meta).length > 0) {\n const metaStr = JSON.stringify(msg.meta, null, 2);\n text += '\\n```json\\n' + metaStr + '\\n```';\n }\n\n return text;\n }\n\n private formatHtml(msg: BufferedMessage): string {\n const emoji = LEVEL_EMOJI[msg.level];\n\n let text = `${emoji} <b>${msg.level.toUpperCase()}</b> [${this.escapeHtml(msg.context || 'APP')}]\\n`;\n text += this.escapeHtml(msg.message);\n\n if (msg.meta && Object.keys(msg.meta).length > 0) {\n const metaStr = JSON.stringify(msg.meta, null, 2);\n text += '\\n<pre>' + this.escapeHtml(metaStr) + '</pre>';\n }\n\n return text;\n }\n\n private shouldMute(messages: BufferedMessage[]): boolean {\n if (this.config.disableNotification !== undefined) {\n return this.config.disableNotification;\n }\n // Don't mute if any message is error level\n return !messages.some((m) => m.level === 'error');\n }\n\n private async sendMessage(text: string, messages: BufferedMessage[]): Promise<void> {\n const body: Record<string, unknown> = {\n chat_id: this.config.chatId,\n text,\n parse_mode: this.config.parseMode ?? 'HTML',\n disable_notification: this.shouldMute(messages),\n };\n\n if (this.config.threadId) {\n body.message_thread_id = this.config.threadId;\n }\n\n if (this.config.replyToMessageId) {\n body.reply_to_message_id = this.config.replyToMessageId;\n }\n\n const response = await fetch(`${this.apiUrl}/sendMessage`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const result = await response.json();\n throw new Error(`Telegram API failed: ${response.status} ${JSON.stringify(result)}`);\n }\n }\n\n private escapeMarkdownV2(text: string): string {\n return text.replace(/[_*[\\]()~`>#+\\-=|{}.!]/g, '\\\\$&');\n }\n\n private escapeHtml(text: string): string {\n const entities: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n };\n return text.replace(/[&<>\"']/g, (c) => entities[c] || c);\n }\n}\n","import {\n CloudWatchLogsClient,\n PutLogEventsCommand,\n CreateLogGroupCommand,\n CreateLogStreamCommand,\n DescribeLogStreamsCommand,\n type InputLogEvent,\n} from '@aws-sdk/client-cloudwatch-logs';\nimport { hostname as osHostname } from 'os';\nimport { randomUUID } from 'crypto';\nimport { BaseHttpTransport } from './base-http.js';\nimport type { BufferedMessage } from './buffer.js';\nimport type { CloudWatchConfig, LogStreamName } from '../types.js';\n\n// Generate UUID once at module load for consistent stream names across the app lifecycle\nconst instanceUuid = randomUUID().slice(0, 8);\n\nfunction formatDate(): string {\n return new Date().toISOString().slice(0, 10); // YYYY-MM-DD\n}\n\nfunction formatDateTime(): string {\n return new Date().toISOString().slice(0, 19).replace(/[T:]/g, '-'); // YYYY-MM-DD-HH-mm-ss\n}\n\nfunction resolveLogStreamName(config: LogStreamName | undefined, configHostname?: string): string {\n const hostname = configHostname || process.env.HOSTNAME || osHostname();\n\n // Default to hostname pattern if not specified\n if (!config) {\n return hostname;\n }\n\n // Plain string - use as-is\n if (typeof config === 'string') {\n return config;\n }\n\n // Pattern config\n if ('pattern' in config) {\n switch (config.pattern) {\n case 'hostname':\n return hostname;\n case 'hostname-date':\n return `${hostname}/${formatDate()}`;\n case 'hostname-uuid':\n return `${hostname}-${instanceUuid}`;\n case 'date':\n return formatDate();\n case 'uuid':\n return randomUUID();\n default:\n return hostname;\n }\n }\n\n // Template config\n if ('template' in config) {\n return config.template\n .replace(/\\{hostname\\}/g, hostname)\n .replace(/\\{date\\}/g, formatDate())\n .replace(/\\{datetime\\}/g, formatDateTime())\n .replace(/\\{uuid\\}/g, instanceUuid)\n .replace(/\\{pid\\}/g, String(process.pid))\n .replace(/\\{env\\}/g, process.env.NODE_ENV || 'development');\n }\n\n return hostname;\n}\n\nexport class CloudWatchTransport extends BaseHttpTransport {\n private config: CloudWatchConfig;\n private client: CloudWatchLogsClient;\n private sequenceToken: string | undefined;\n private initialized = false;\n private initPromise: Promise<void> | null = null;\n private resolvedLogStreamName: string;\n\n constructor(config: CloudWatchConfig, configHostname?: string) {\n super({\n batchSize: config.batchSize ?? 100,\n flushInterval: config.flushInterval ?? 1000,\n maxRetries: config.maxRetries,\n retryDelay: config.retryDelay,\n });\n this.config = config;\n this.resolvedLogStreamName = resolveLogStreamName(config.logStreamName, configHostname);\n\n this.client = new CloudWatchLogsClient({\n region: config.region,\n credentials: {\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n },\n });\n }\n\n protected async sendBatch(messages: BufferedMessage[]): Promise<void> {\n await this.ensureInitialized();\n\n const logEvents: InputLogEvent[] = messages.map((msg) => ({\n timestamp: msg.timestamp.getTime(),\n message: JSON.stringify({\n level: msg.level,\n message: msg.message,\n context: msg.context,\n ...msg.meta,\n }),\n }));\n\n // Sort by timestamp (CloudWatch requirement)\n logEvents.sort((a, b) => (a.timestamp ?? 0) - (b.timestamp ?? 0));\n\n const command = new PutLogEventsCommand({\n logGroupName: this.config.logGroupName,\n logStreamName: this.resolvedLogStreamName,\n logEvents,\n sequenceToken: this.sequenceToken,\n });\n\n try {\n const response = await this.client.send(command);\n this.sequenceToken = response.nextSequenceToken;\n } catch (error: unknown) {\n // Handle InvalidSequenceTokenException by retrying with correct token\n if (this.isInvalidSequenceTokenError(error)) {\n await this.fetchSequenceToken();\n const retryCommand = new PutLogEventsCommand({\n logGroupName: this.config.logGroupName,\n logStreamName: this.resolvedLogStreamName,\n logEvents,\n sequenceToken: this.sequenceToken,\n });\n const response = await this.client.send(retryCommand);\n this.sequenceToken = response.nextSequenceToken;\n } else {\n throw error;\n }\n }\n }\n\n private async ensureInitialized(): Promise<void> {\n if (this.initialized) return;\n\n if (!this.initPromise) {\n this.initPromise = this.initialize();\n }\n\n await this.initPromise;\n }\n\n private async initialize(): Promise<void> {\n if (this.config.createLogGroup) {\n await this.createLogGroupIfNotExists();\n }\n\n if (this.config.createLogStream !== false) {\n await this.createLogStreamIfNotExists();\n }\n\n await this.fetchSequenceToken();\n this.initialized = true;\n }\n\n private async createLogGroupIfNotExists(): Promise<void> {\n try {\n await this.client.send(\n new CreateLogGroupCommand({\n logGroupName: this.config.logGroupName,\n }),\n );\n } catch (error: unknown) {\n if (!this.isResourceAlreadyExistsError(error)) {\n throw error;\n }\n }\n }\n\n private async createLogStreamIfNotExists(): Promise<void> {\n try {\n await this.client.send(\n new CreateLogStreamCommand({\n logGroupName: this.config.logGroupName,\n logStreamName: this.resolvedLogStreamName,\n }),\n );\n } catch (error: unknown) {\n if (!this.isResourceAlreadyExistsError(error)) {\n throw error;\n }\n }\n }\n\n private async fetchSequenceToken(): Promise<void> {\n const response = await this.client.send(\n new DescribeLogStreamsCommand({\n logGroupName: this.config.logGroupName,\n logStreamNamePrefix: this.resolvedLogStreamName,\n limit: 1,\n }),\n );\n\n const stream = response.logStreams?.find((s) => s.logStreamName === this.resolvedLogStreamName);\n this.sequenceToken = stream?.uploadSequenceToken;\n }\n\n private isResourceAlreadyExistsError(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'ResourceAlreadyExistsException'\n );\n }\n\n private isInvalidSequenceTokenError(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'InvalidSequenceTokenException'\n );\n }\n}\n","import pino, { type DestinationStream, type StreamEntry } from 'pino';\nimport { Transform, Writable, PassThrough } from 'node:stream';\nimport { createWriteStream } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { createStream, type RotatingFileStream, type FileSize, type Interval } from 'rotating-file-stream';\nimport { LoggerStore } from './store.js';\nimport { matchesContext } from './state.js';\nimport { DiscordTransport } from './transports/discord.js';\nimport { TelegramTransport } from './transports/telegram.js';\nimport { CloudWatchTransport } from './transports/cloudwatch.js';\nimport type { BaseHttpTransport } from './transports/base-http.js';\nimport {\n LOG_LEVELS,\n type LoggerConfig,\n type LoggerContext,\n type LogLevel,\n type LevelRule,\n} from './types.js';\n\nexport interface StreamsResult {\n destination: DestinationStream;\n transports: BaseHttpTransport[];\n}\n\n// Pino level values\nconst PINO_LEVELS: Record<string, number> = {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10,\n // Custom\n http: 25,\n verbose: 25,\n silly: 10,\n};\n\ninterface ParsedLog {\n level: number;\n time: number;\n msg: string;\n context?: string;\n [key: string]: unknown;\n}\n\nfunction parseLogLine(line: string): ParsedLog | null {\n try {\n return JSON.parse(line) as ParsedLog;\n } catch {\n return null;\n }\n}\n\nfunction getLevelName(levelNum: number): LogLevel {\n if (levelNum >= 50) return 'error';\n if (levelNum >= 40) return 'warn';\n if (levelNum >= 30) return 'info';\n if (levelNum >= 25) return 'http';\n if (levelNum >= 20) return 'debug';\n return 'silly';\n}\n\n// Check if log should pass based on transport rules\nfunction shouldPassTransport<TContext extends LoggerContext>(\n log: ParsedLog,\n level: LogLevel | undefined,\n rules: LevelRule[] | undefined,\n store: LoggerStore<TContext>,\n): boolean {\n const logLevel = getLevelName(log.level);\n const context = log.context;\n const storeContext = store.getStore();\n\n // Find matching rule\n const matchingRule = rules?.find((rule) => matchesContext(storeContext, context, rule.match));\n\n // Effective level: matching rule > transport default > accept all\n const effectiveLevel = matchingRule?.level ?? level ?? 'silly';\n\n if (effectiveLevel === 'off') return false;\n return LOG_LEVELS[logLevel] <= LOG_LEVELS[effectiveLevel];\n}\n\n// Format based on type\nfunction formatLog<TContext extends LoggerContext>(\n log: ParsedLog,\n format: 'json' | 'plain' | 'logfmt' | 'simple',\n store: LoggerStore<TContext>,\n): string {\n const levelName = getLevelName(log.level);\n const timestamp = new Date(log.time).toISOString();\n const context = log.context || 'APP';\n const message = log.msg || '';\n\n // Add store context\n const storeContext = store.getStore();\n const meta: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(log)) {\n if (!['level', 'time', 'msg', 'context'].includes(key)) {\n meta[key] = value;\n }\n }\n\n if (storeContext) {\n Object.assign(meta, storeContext);\n }\n\n if (format === 'json') {\n return JSON.stringify({\n level: levelName,\n timestamp,\n context,\n message,\n ...meta,\n }) + '\\n';\n }\n\n if (format === 'plain') {\n const LEVEL_COLORS: Record<string, string> = {\n error: '\\x1b[31m',\n warn: '\\x1b[33m',\n info: '\\x1b[32m',\n http: '\\x1b[35m',\n verbose: '\\x1b[36m',\n debug: '\\x1b[34m',\n silly: '\\x1b[90m',\n };\n const RESET = '\\x1b[0m';\n const color = LEVEL_COLORS[levelName] || '';\n const coloredLevel = color ? `${color}${levelName}${RESET}` : levelName;\n\n const formatValue = (key: string, value: unknown): string => {\n if (typeof value === 'string' && value.includes('\\n')) {\n // Multiline strings (like stack traces) - indent each line\n return '\\n ' + value.split('\\n').join('\\n ');\n }\n return JSON.stringify(value);\n };\n\n const metaStr = Object.keys(meta).length > 0\n ? '\\n ' + Object.entries(meta).map(([k, v]) => `${k}: ${formatValue(k, v)}`).join('\\n ')\n : '';\n return `[${timestamp}] ${coloredLevel} [${context}] ${message}${metaStr}\\n`;\n }\n\n if (format === 'logfmt') {\n const parts = [`level=${levelName}`, `msg=\"${message}\"`, `context=${context}`, `ts=${timestamp}`];\n for (const [k, v] of Object.entries(meta)) {\n parts.push(`${k}=${JSON.stringify(v)}`);\n }\n return parts.join(' ') + '\\n';\n }\n\n // simple\n return `[${timestamp}] ${levelName}: ${message}\\n`;\n}\n\n// Create a filtering + formatting transform stream\nfunction createFormattedFilterStream<TContext extends LoggerContext>(\n format: 'json' | 'plain' | 'logfmt' | 'simple',\n level: LogLevel | undefined,\n rules: LevelRule[] | undefined,\n store: LoggerStore<TContext>,\n destination: NodeJS.WritableStream,\n): Transform {\n return new Transform({\n transform(chunk: Buffer, _encoding: string, callback) {\n const line = chunk.toString().trim();\n if (!line) {\n callback();\n return;\n }\n\n const log = parseLogLine(line);\n if (!log) {\n callback();\n return;\n }\n\n if (!shouldPassTransport(log, level, rules, store)) {\n callback();\n return;\n }\n\n const formatted = formatLog(log, format, store);\n destination.write(formatted);\n callback();\n },\n });\n}\n\nexport function createStreams<TContext extends LoggerContext>(\n config: LoggerConfig,\n store: LoggerStore<TContext>,\n): StreamsResult {\n const streams: StreamEntry<'trace'>[] = [];\n const transports: BaseHttpTransport[] = [];\n\n // Console transport\n const consoleStream = createFormattedFilterStream(\n config.console.format,\n config.console.level,\n config.console.rules,\n store,\n process.stdout,\n );\n\n streams.push({\n level: 'trace',\n stream: consoleStream,\n });\n\n // File transport with rotation\n if (config.file) {\n const fileConfig = config.file;\n\n // Ensure directory exists\n mkdir(fileConfig.dirname, { recursive: true }).catch(() => {});\n\n // Normalize size unit to uppercase (rotating-file-stream requires uppercase: M, K, G)\n const normalizeSize = (size: string): FileSize => {\n return size.replace(/([kmg])$/i, (match) => match.toUpperCase()) as FileSize;\n };\n\n const rotatingStream = createStream(\n (time: Date | number, index?: number) => {\n const date = time instanceof Date ? time : new Date();\n const dateStr = date.toISOString().split('T')[0];\n const base = fileConfig.filename.replace('.log', '');\n return `${base}-${dateStr}${index ? `.${index}` : ''}.log`;\n },\n {\n path: fileConfig.dirname,\n size: normalizeSize(fileConfig.maxSize || '20M'),\n interval: (fileConfig.interval || (fileConfig.datePattern === 'YYYY-MM-DD-HH' ? '1h' : '1d')) as Interval,\n compress: fileConfig.zippedArchive ? 'gzip' : false,\n maxFiles: parseInt(fileConfig.maxFiles?.replace('d', '') || '14'),\n },\n );\n\n const fileStream = createFormattedFilterStream(\n fileConfig.format,\n fileConfig.level,\n fileConfig.rules,\n store,\n rotatingStream,\n );\n\n streams.push({\n level: 'trace',\n stream: fileStream,\n });\n }\n\n // HTTP transports - Discord\n for (const discordConfig of toArray(config.discord)) {\n const transport = new DiscordTransport(discordConfig);\n transports.push(transport);\n const discordStream = createHttpTransportStream(transport, discordConfig.level, discordConfig.rules, store);\n streams.push({\n level: 'trace',\n stream: discordStream,\n });\n }\n\n // HTTP transports - Telegram\n for (const telegramConfig of toArray(config.telegram)) {\n const transport = new TelegramTransport(telegramConfig);\n transports.push(transport);\n const telegramStream = createHttpTransportStream(transport, telegramConfig.level, telegramConfig.rules, store);\n streams.push({\n level: 'trace',\n stream: telegramStream,\n });\n }\n\n // HTTP transports - CloudWatch\n for (const cloudwatchConfig of toArray(config.cloudwatch)) {\n const transport = new CloudWatchTransport(cloudwatchConfig, config.hostname);\n transports.push(transport);\n const cwStream = createHttpTransportStream(transport, cloudwatchConfig.level, cloudwatchConfig.rules, store);\n streams.push({\n level: 'trace',\n stream: cwStream,\n });\n }\n\n return {\n destination: pino.multistream(streams),\n transports,\n };\n}\n\nfunction toArray<T>(value: T | T[] | undefined): T[] {\n if (!value) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction createHttpTransportStream<TContext extends LoggerContext>(\n transport: DiscordTransport | TelegramTransport | CloudWatchTransport,\n level: LogLevel | undefined,\n rules: LevelRule[] | undefined,\n store: LoggerStore<TContext>,\n): Writable {\n return new Writable({\n write(chunk: Buffer, _encoding: string, callback) {\n const line = chunk.toString().trim();\n if (!line) {\n callback();\n return;\n }\n\n const log = parseLogLine(line);\n if (!log) {\n callback();\n return;\n }\n\n if (!shouldPassTransport(log, level, rules, store)) {\n callback();\n return;\n }\n\n const levelName = getLevelName(log.level);\n const storeContext = store.getStore();\n\n const meta: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(log)) {\n if (!['level', 'time', 'msg', 'context'].includes(key)) {\n meta[key] = value;\n }\n }\n\n if (storeContext) {\n Object.assign(meta, storeContext);\n }\n\n transport.log({\n level: levelName,\n message: log.msg || '',\n context: log.context,\n timestamp: new Date(log.time),\n ...meta,\n }, callback);\n },\n });\n}\n","import { hostname as osHostname } from 'os';\nimport pino, { type Logger as PinoBaseLogger, type DestinationStream, type LoggerOptions } from 'pino';\nimport { LoggerStore } from './store.js';\nimport {\n LOG_LEVELS,\n assertLogLevel,\n type LoggerConfig,\n type LoggerContext,\n type LevelOverride,\n type LogLevel,\n type LevelConfig,\n type CallerConfig,\n} from './types.js';\nimport { createStreams } from './streams.js';\nimport type { BaseHttpTransport } from './transports/base-http.js';\n\n// Custom levels for our logger\nconst CUSTOM_LEVELS = {\n http: 25,\n verbose: 25,\n silly: 10,\n} as const;\n\ntype CustomLevels = typeof CUSTOM_LEVELS;\ntype PinoLogger = PinoBaseLogger<keyof CustomLevels>;\n\nexport interface LoggerState<TContext extends LoggerContext> {\n pino: PinoLogger;\n store: LoggerStore<TContext>;\n defaultLevel: LogLevel;\n levelOverrides: Map<string, LevelOverride<TContext>>;\n // Index for O(1) context lookup\n contextIndex: Map<string, LevelOverride<TContext>>;\n // Complex rules that need full matching\n complexRules: LevelOverride<TContext>[];\n // Caller info config (undefined = disabled)\n callerConfig: CallerConfig | undefined;\n // HTTP transports for graceful shutdown\n transports: BaseHttpTransport[];\n}\n\nfunction parseLevelConfig(level: LevelConfig): { defaultLevel: LogLevel; rules: LevelOverride<LoggerContext>[] } {\n if (typeof level === 'string') {\n assertLogLevel(level);\n return { defaultLevel: level, rules: [] };\n }\n\n assertLogLevel(level.default);\n const rules: LevelOverride<LoggerContext>[] = (level.rules ?? []).map((rule) => {\n assertLogLevel(rule.level);\n return { match: rule.match, level: rule.level, readonly: true };\n });\n\n return { defaultLevel: level.default, rules };\n}\n\nfunction buildIndexes<TContext extends LoggerContext>(\n overrides: Map<string, LevelOverride<TContext>>,\n): { contextIndex: Map<string, LevelOverride<TContext>>; complexRules: LevelOverride<TContext>[] } {\n const contextIndex = new Map<string, LevelOverride<TContext>>();\n const complexRules: LevelOverride<TContext>[] = [];\n\n for (const override of overrides.values()) {\n const keys = Object.keys(override.match);\n // Simple rule: only has 'context' key\n if (keys.length === 1 && keys[0] === 'context' && typeof override.match.context === 'string') {\n contextIndex.set(override.match.context, override);\n } else {\n complexRules.push(override);\n }\n }\n\n return { contextIndex, complexRules };\n}\n\nexport function createState<TContext extends LoggerContext>(\n config: LoggerConfig,\n store?: LoggerStore<TContext>,\n): LoggerState<TContext> {\n const { defaultLevel, rules } = parseLevelConfig(config.level);\n\n const loggerStore = store ?? new LoggerStore<TContext>();\n\n const levelOverrides = new Map<string, LevelOverride<TContext>>();\n for (const rule of rules) {\n const key = JSON.stringify(rule.match);\n levelOverrides.set(key, rule as LevelOverride<TContext>);\n }\n\n const { contextIndex, complexRules } = buildIndexes(levelOverrides);\n\n // Create pino with multistream\n const { destination, transports } = createStreams(config, loggerStore);\n\n const options: LoggerOptions<keyof CustomLevels> = {\n level: 'trace', // Accept all, we filter in shouldLog()\n customLevels: CUSTOM_LEVELS,\n base: { hostname: config.hostname ?? osHostname() },\n };\n\n const pinoLogger = pino(options, destination) as PinoLogger;\n\n // Parse caller config\n let callerConfig: CallerConfig | undefined;\n if (config.caller === true) {\n callerConfig = {}; // Use defaults\n } else if (config.caller && typeof config.caller === 'object') {\n callerConfig = config.caller;\n }\n\n return {\n pino: pinoLogger,\n store: loggerStore,\n defaultLevel,\n levelOverrides,\n contextIndex,\n complexRules,\n callerConfig,\n transports,\n };\n}\n\nexport function rebuildIndexes<TContext extends LoggerContext>(state: LoggerState<TContext>): void {\n const { contextIndex, complexRules } = buildIndexes(state.levelOverrides);\n state.contextIndex = contextIndex;\n state.complexRules.length = 0;\n state.complexRules.push(...complexRules);\n}\n\nexport function shouldLog<TContext extends LoggerContext>(\n state: LoggerState<TContext>,\n level: LogLevel,\n context?: string,\n): boolean {\n const effectiveLevel = getEffectiveLevel(state, context);\n if (effectiveLevel === 'off') return false;\n return LOG_LEVELS[level] <= LOG_LEVELS[effectiveLevel];\n}\n\nfunction getEffectiveLevel<TContext extends LoggerContext>(\n state: LoggerState<TContext>,\n loggerContext?: string,\n): LogLevel {\n // O(1) lookup for simple context-only rules\n if (loggerContext) {\n const indexed = state.contextIndex.get(loggerContext);\n if (indexed) return indexed.level;\n }\n\n // Check complex rules O(k) where k << n\n const storeContext = state.store.getStore();\n for (const { match, level } of state.complexRules) {\n if (matchesContext(storeContext, loggerContext, match)) {\n return level;\n }\n }\n\n return state.defaultLevel;\n}\n\nexport function matchesContext(\n storeContext: LoggerContext | undefined,\n loggerContext: string | undefined,\n match: Record<string, unknown> & { context?: string },\n): boolean {\n const combined: Record<string, unknown> = { ...storeContext, context: loggerContext };\n return Object.entries(match).every(([key, value]) => combined[key] === value);\n}\n","import { z } from 'zod';\nimport type {\n LogLevel,\n LogFormat,\n LevelRule,\n ConsoleConfig,\n FileConfig,\n HttpTransportBaseConfig,\n DiscordConfig,\n TelegramConfig,\n CloudWatchConfig,\n LevelConfigObject,\n LevelConfig,\n LoggerConfig,\n CallerConfig,\n LogStreamPattern,\n LogStreamPatternConfig,\n LogStreamTemplateConfig,\n LogStreamName,\n AutoShutdownConfig,\n} from './types.js';\n\n// Log Level\nexport const LogLevelSchema: z.ZodType<LogLevel> = z.enum([\n 'off',\n 'error',\n 'warn',\n 'info',\n 'http',\n 'verbose',\n 'debug',\n 'silly',\n]);\n\n// Log Format\nexport const LogFormatSchema: z.ZodType<LogFormat> = z.enum(['json', 'plain', 'logfmt', 'simple']);\n\n// Level Rule\nexport const LevelRuleSchema: z.ZodType<LevelRule> = z.object({\n match: z.record(z.string(), z.unknown()),\n level: LogLevelSchema,\n});\n\n// Console Config\nexport const ConsoleConfigSchema: z.ZodType<ConsoleConfig> = z.object({\n format: LogFormatSchema,\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n});\n\n// File Config\nexport const FileConfigSchema: z.ZodType<FileConfig> = z.object({\n format: LogFormatSchema,\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n dirname: z.string().min(1, 'dirname is required'),\n filename: z.string().min(1, 'filename is required'),\n datePattern: z.string().optional(),\n interval: z.string().regex(/^\\d+[Mdhms]$/).optional(),\n zippedArchive: z.boolean().optional(),\n maxSize: z.string().optional(),\n maxFiles: z.string().optional(),\n});\n\n// HTTP Transport Base Config\nexport const HttpTransportBaseConfigSchema: z.ZodType<HttpTransportBaseConfig> = z.object({\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n batchSize: z.number().int().positive().optional(),\n flushInterval: z.number().int().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n retryDelay: z.number().int().positive().optional(),\n});\n\n// Discord Config\nexport const DiscordConfigSchema: z.ZodType<DiscordConfig> = z.object({\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n batchSize: z.number().int().positive().optional(),\n flushInterval: z.number().int().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n retryDelay: z.number().int().positive().optional(),\n webhookUrl: z.string().url('webhookUrl must be a valid URL'),\n format: z.enum(['embed', 'markdown']).optional(),\n username: z.string().optional(),\n avatarUrl: z.string().url().optional(),\n embedColors: z.record(z.string(), z.number().int()).optional(),\n includeTimestamp: z.boolean().optional(),\n includeMeta: z.boolean().optional(),\n maxEmbedFields: z.number().int().min(1).max(25).optional(),\n});\n\n// Telegram Config\nexport const TelegramConfigSchema: z.ZodType<TelegramConfig> = z.object({\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n batchSize: z.number().int().positive().optional(),\n flushInterval: z.number().int().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n retryDelay: z.number().int().positive().optional(),\n botToken: z.string().min(1, 'botToken is required'),\n chatId: z.union([z.string(), z.number()]),\n parseMode: z.enum(['Markdown', 'MarkdownV2', 'HTML']).optional(),\n disableNotification: z.boolean().optional(),\n threadId: z.number().int().optional(),\n replyToMessageId: z.number().int().optional(),\n});\n\n// Log Stream Name patterns and config\nexport const LogStreamPatternSchema: z.ZodType<LogStreamPattern> = z.enum([\n 'hostname',\n 'hostname-date',\n 'hostname-uuid',\n 'date',\n 'uuid',\n]);\n\nexport const LogStreamPatternConfigSchema: z.ZodType<LogStreamPatternConfig> = z.object({\n pattern: LogStreamPatternSchema,\n});\n\nexport const LogStreamTemplateConfigSchema: z.ZodType<LogStreamTemplateConfig> = z.object({\n template: z.string().min(1, 'template is required'),\n});\n\nexport const LogStreamNameSchema: z.ZodType<LogStreamName> = z.union([\n z.string().min(1, 'logStreamName string must not be empty'),\n LogStreamPatternConfigSchema,\n LogStreamTemplateConfigSchema,\n]);\n\n// CloudWatch Config\nexport const CloudWatchConfigSchema: z.ZodType<CloudWatchConfig> = z.object({\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n batchSize: z.number().int().positive().optional(),\n flushInterval: z.number().int().positive().optional(),\n maxRetries: z.number().int().nonnegative().optional(),\n retryDelay: z.number().int().positive().optional(),\n logGroupName: z.string().min(1, 'logGroupName is required'),\n logStreamName: LogStreamNameSchema.optional(),\n region: z.string().min(1, 'region is required'),\n accessKeyId: z.string().min(1, 'accessKeyId is required'),\n secretAccessKey: z.string().min(1, 'secretAccessKey is required'),\n createLogGroup: z.boolean().optional(),\n createLogStream: z.boolean().optional(),\n});\n\n// Level Config Object\nexport const LevelConfigObjectSchema: z.ZodType<LevelConfigObject> = z.object({\n default: LogLevelSchema,\n rules: z.array(LevelRuleSchema).optional(),\n});\n\n// Level Config (string or object)\nexport const LevelConfigSchema: z.ZodType<LevelConfig> = z.union([\n LogLevelSchema,\n LevelConfigObjectSchema,\n]);\n\n// Caller Config\nexport const CallerConfigSchema: z.ZodType<CallerConfig> = z.object({\n depth: z.number().int().nonnegative().optional(),\n fullPath: z.boolean().optional(),\n});\n\n// Auto Shutdown Config\nexport const AutoShutdownConfigSchema: z.ZodType<AutoShutdownConfig> = z.object({\n timeout: z.number().int().positive().optional(),\n signals: z.array(z.string()).optional() as z.ZodType<NodeJS.Signals[] | undefined>,\n});\n\n// Logger Config\nexport const LoggerConfigSchema = z.object({\n level: LevelConfigSchema,\n console: ConsoleConfigSchema,\n file: FileConfigSchema.optional(),\n discord: z.union([DiscordConfigSchema, z.array(DiscordConfigSchema)]).optional(),\n telegram: z.union([TelegramConfigSchema, z.array(TelegramConfigSchema)]).optional(),\n cloudwatch: z.union([CloudWatchConfigSchema, z.array(CloudWatchConfigSchema)]).optional(),\n caller: z.union([z.boolean(), CallerConfigSchema]).optional(),\n hostname: z.string().optional(),\n autoShutdown: z.union([z.boolean(), AutoShutdownConfigSchema]).optional(),\n}) satisfies z.ZodType<LoggerConfig>;\n\n// Validation function\nexport function validateConfig(config: unknown): z.infer<typeof LoggerConfigSchema> {\n return LoggerConfigSchema.parse(config);\n}\n\n// Safe validation (returns result instead of throwing)\nexport function safeValidateConfig(config: unknown) {\n return LoggerConfigSchema.safeParse(config);\n}\n","import type { CallerConfig, CallerInfo } from '../types.js';\nimport { basename, relative } from 'node:path';\n\n// Default stack depth offset:\n// 0: Error\n// 1: getCallerInfo\n// 2: log method (private)\n// 3: public method (info, error, etc.)\n// 4: actual caller\nconst BASE_STACK_OFFSET = 4;\n\n// Regex to parse V8 stack trace lines\n// Matches: \" at functionName (file:line:column)\" or \" at file:line:column\"\nconst STACK_LINE_REGEX = /^\\s*at\\s+(?:(.+?)\\s+\\()?(.+):(\\d+):(\\d+)\\)?$/;\n\nexport function getCallerInfo(config: CallerConfig, additionalOffset = 0): CallerInfo | undefined {\n const depth = config.depth ?? 0;\n const targetFrame = BASE_STACK_OFFSET + depth + additionalOffset;\n\n const originalPrepare = Error.prepareStackTrace;\n const originalLimit = Error.stackTraceLimit;\n\n try {\n // Capture more frames than we need\n Error.stackTraceLimit = targetFrame + 5;\n\n const err = new Error();\n const stack = err.stack;\n\n if (!stack) {\n return undefined;\n }\n\n const lines = stack.split('\\n');\n const targetLine = lines[targetFrame];\n\n if (!targetLine) {\n return undefined;\n }\n\n const match = targetLine.match(STACK_LINE_REGEX);\n if (!match) {\n return undefined;\n }\n\n const [, fnName, filePath, lineStr, colStr] = match;\n const line = parseInt(lineStr, 10);\n const column = parseInt(colStr, 10);\n\n // Process file path\n let file = filePath;\n\n // Handle file:// URLs (ESM)\n if (file.startsWith('file://')) {\n file = file.slice(7);\n }\n\n // Shorten path if fullPath is not enabled\n if (!config.fullPath) {\n // Try relative path first, fall back to basename\n try {\n const relativePath = relative(process.cwd(), file);\n // If relative path goes up too many directories, use basename\n if (relativePath.startsWith('..') && relativePath.split('/').filter(p => p === '..').length > 2) {\n file = basename(file);\n } else {\n file = relativePath;\n }\n } catch {\n file = basename(file);\n }\n }\n\n return {\n file,\n line,\n column: isNaN(column) ? undefined : column,\n function: fnName && fnName !== '<anonymous>' ? fnName : undefined,\n };\n } finally {\n Error.prepareStackTrace = originalPrepare;\n Error.stackTraceLimit = originalLimit;\n }\n}\n\nexport function formatCallerInfo(info: CallerInfo): string {\n const location = `${info.file}:${info.line}`;\n if (info.function) {\n return `${info.function} (${location})`;\n }\n return location;\n}\n","import type { Logger } from '../logger.js';\nimport type { LoggerContext } from '../types.js';\n\nexport interface GracefulShutdownOptions {\n /** Timeout in ms before forcing exit (default: 5000) */\n timeout?: number;\n /** Exit code on successful shutdown (default: 0) */\n exitCode?: number;\n /** Custom signals to handle (default: ['SIGTERM', 'SIGINT']) */\n signals?: NodeJS.Signals[];\n /** Called before shutdown starts */\n onShutdown?: () => void | Promise<void>;\n}\n\nconst DEFAULT_OPTIONS: Required<Omit<GracefulShutdownOptions, 'onShutdown'>> = {\n timeout: 5000,\n exitCode: 0,\n signals: ['SIGTERM', 'SIGINT'],\n};\n\nlet registered = false;\n\n/**\n * Register graceful shutdown handlers for the logger.\n * Ensures all buffered logs are flushed before process exit.\n *\n * @example\n * ```typescript\n * const logger = Logger.create(config);\n * registerShutdown(logger);\n *\n * // Or with options:\n * registerShutdown(logger, {\n * timeout: 10000,\n * onShutdown: () => console.log('Shutting down...'),\n * });\n * ```\n */\nexport function registerShutdown<TContext extends LoggerContext>(\n logger: Logger<TContext>,\n options: GracefulShutdownOptions = {},\n): () => Promise<void> {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n const shutdown = async (signal?: string): Promise<void> => {\n if (signal) {\n console.error(`[Logger] Received ${signal}, shutting down gracefully...`);\n }\n\n try {\n // Call user's onShutdown hook\n if (opts.onShutdown) {\n await opts.onShutdown();\n }\n\n // Create a timeout promise\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new Error(`Shutdown timed out after ${opts.timeout}ms`));\n }, opts.timeout);\n });\n\n // Race between shutdown and timeout\n await Promise.race([\n logger.shutdown(),\n timeoutPromise,\n ]);\n\n if (signal) {\n console.error('[Logger] Graceful shutdown completed');\n process.exit(opts.exitCode);\n }\n } catch (error) {\n console.error('[Logger] Shutdown error:', error instanceof Error ? error.message : error);\n if (signal) {\n process.exit(1);\n }\n }\n };\n\n // Only register handlers once\n if (!registered) {\n for (const signal of opts.signals) {\n process.on(signal, () => void shutdown(signal));\n }\n\n // Also handle uncaught exceptions and unhandled rejections\n process.on('beforeExit', () => void shutdown());\n\n registered = true;\n }\n\n // Return manual shutdown function\n return shutdown;\n}\n","import type { AxiosError } from 'axios';\n\n/**\n * HTTP error data extracted from axios/fetch errors\n */\nexport interface HttpErrorData {\n /** HTTP status code (e.g., 400, 500) */\n status?: number;\n /** HTTP status text (e.g., \"Bad Request\") */\n statusText?: string;\n /** Response body data */\n responseData?: unknown;\n /** Request URL */\n url?: string;\n /** HTTP method (GET, POST, etc.) */\n method?: string;\n /** Error code (e.g., ECONNREFUSED, ETIMEDOUT) */\n code?: string;\n}\n\n/**\n * Serialized error data for logging\n */\nexport interface SerializedError {\n /** Error message */\n errorMessage: string;\n /** Stack trace */\n stack?: string;\n /** HTTP-specific data if present */\n http?: HttpErrorData;\n /** Error code for non-HTTP errors */\n code?: string;\n /** Error name/type */\n errorName?: string;\n}\n\n/**\n * Type guard for axios errors\n */\nfunction isAxiosError(error: unknown): error is AxiosError {\n return (\n error !== null &&\n typeof error === 'object' &&\n 'isAxiosError' in error &&\n (error as AxiosError).isAxiosError === true\n );\n}\n\n/**\n * Sanitizes response data to ensure it's safe for JSON serialization.\n * Truncates large strings and limits array/object sizes.\n */\nfunction sanitizeResponseData(data: unknown, maxStringLength = 10000): unknown {\n if (data === null || data === undefined) {\n return data;\n }\n\n if (typeof data === 'string') {\n return data.length > maxStringLength ? `${data.slice(0, maxStringLength)}...[truncated]` : data;\n }\n\n if (typeof data === 'number' || typeof data === 'boolean') {\n return data;\n }\n\n if (Array.isArray(data)) {\n return data.slice(0, 100).map((item) => sanitizeResponseData(item, maxStringLength));\n }\n\n if (typeof data === 'object') {\n const result: Record<string, unknown> = {};\n const entries = Object.entries(data as Record<string, unknown>);\n for (const [key, value] of entries.slice(0, 50)) {\n result[key] = sanitizeResponseData(value, maxStringLength);\n }\n return result;\n }\n\n return String(data);\n}\n\n/**\n * Extracts HTTP data from axios error\n */\nfunction extractAxiosHttpData(error: AxiosError): HttpErrorData {\n const httpData: HttpErrorData = {};\n\n if (error.code) {\n httpData.code = error.code;\n }\n\n if (error.response) {\n httpData.status = error.response.status;\n httpData.statusText = error.response.statusText;\n if (error.response.data !== undefined) {\n httpData.responseData = sanitizeResponseData(error.response.data);\n }\n }\n\n if (error.config) {\n const { url, baseURL, method } = error.config;\n if (url) {\n httpData.url = baseURL && !url.startsWith('http') ? `${baseURL}${url}` : url;\n }\n if (method) {\n httpData.method = method.toUpperCase();\n }\n }\n\n return httpData;\n}\n\n/**\n * Extracts HTTP data from generic error object (fetch-style or custom)\n */\nfunction extractGenericHttpData(error: Record<string, unknown>): HttpErrorData | undefined {\n const httpData: HttpErrorData = {};\n let hasData = false;\n\n if (typeof error.code === 'string') {\n httpData.code = error.code;\n hasData = true;\n }\n\n const response = error.response as Record<string, unknown> | undefined;\n if (response && typeof response === 'object') {\n if (typeof response.status === 'number') {\n httpData.status = response.status;\n hasData = true;\n }\n if (typeof response.statusText === 'string') {\n httpData.statusText = response.statusText;\n hasData = true;\n }\n if (response.data !== undefined) {\n httpData.responseData = sanitizeResponseData(response.data);\n hasData = true;\n }\n }\n\n const config = error.config as Record<string, unknown> | undefined;\n if (config && typeof config === 'object') {\n const url = config.url as string | undefined;\n const baseURL = config.baseURL as string | undefined;\n if (typeof url === 'string') {\n httpData.url = baseURL && !url.startsWith('http') ? `${baseURL}${url}` : url;\n hasData = true;\n }\n if (typeof config.method === 'string') {\n httpData.method = config.method.toUpperCase();\n hasData = true;\n }\n }\n\n return hasData ? httpData : undefined;\n}\n\n/**\n * Serializes an Error object for logging, extracting HTTP-specific data\n * from axios/fetch errors while preserving standard error properties.\n *\n * @example\n * // Axios error\n * try {\n * await axios.get('/api/data');\n * } catch (error) {\n * const serialized = serializeError(error);\n * // serialized.http.status = 400\n * // serialized.http.responseData = { error: \"invalid input\" }\n * }\n */\nexport function serializeError(error: unknown): SerializedError {\n if (!(error instanceof Error)) {\n if (error === null || error === undefined) {\n return { errorMessage: 'Unknown error' };\n }\n if (typeof error === 'string') {\n return { errorMessage: error };\n }\n const httpData = typeof error === 'object' ? extractGenericHttpData(error as Record<string, unknown>) : undefined;\n return {\n errorMessage: String(error),\n http: httpData,\n };\n }\n\n const serialized: SerializedError = {\n errorMessage: error.message,\n stack: error.stack,\n };\n\n if (error.name && error.name !== 'Error') {\n serialized.errorName = error.name;\n }\n\n // Handle axios errors with full type safety\n if (isAxiosError(error)) {\n serialized.http = extractAxiosHttpData(error);\n return serialized;\n }\n\n // Handle generic errors with HTTP-like properties\n const errWithCode = error as Error & { code?: string };\n if (typeof errWithCode.code === 'string') {\n serialized.code = errWithCode.code;\n }\n\n const httpData = extractGenericHttpData(error as unknown as Record<string, unknown>);\n if (httpData) {\n serialized.http = httpData;\n }\n\n return serialized;\n}\n","import { LoggerStore } from './store.js';\nimport { createState, shouldLog, rebuildIndexes, type LoggerState } from './state.js';\nimport { validateConfig } from './schema.js';\nimport { assertLogLevel, type LoggerConfig, type LoggerContext, type LevelOverride, type LevelOverrideMatch, type LogLevel, type Meta } from './types.js';\nimport { getCallerInfo, formatCallerInfo } from './utils/caller.js';\nimport { registerShutdown } from './utils/shutdown.js';\nimport { serializeError } from './utils/error.js';\n\nexport class Logger<TContext extends LoggerContext = LoggerContext> {\n private profileTimers = new Map<string, number>();\n\n private constructor(\n private state: LoggerState<TContext>,\n private context: string,\n ) {}\n\n static create<TContext extends LoggerContext = LoggerContext>(\n config: LoggerConfig,\n store?: LoggerStore<TContext>,\n ): Logger<TContext> {\n const validatedConfig = validateConfig(config);\n const state = createState(validatedConfig as LoggerConfig, store);\n const logger = new Logger<TContext>(state, 'APP');\n\n // Auto-register shutdown handlers if configured\n if (validatedConfig.autoShutdown) {\n const shutdownConfig = typeof validatedConfig.autoShutdown === 'object'\n ? validatedConfig.autoShutdown\n : {};\n registerShutdown(logger, shutdownConfig);\n }\n\n return logger;\n }\n\n for(context: string): Logger<TContext> {\n return new Logger(this.state, context);\n }\n\n // State accessors\n\n getStore(): LoggerStore<TContext> {\n return this.state.store;\n }\n\n setLevelOverride(match: LevelOverrideMatch<TContext>, level: LogLevel): void {\n assertLogLevel(level);\n const key = JSON.stringify(match);\n this.state.levelOverrides.set(key, { match, level });\n rebuildIndexes(this.state);\n }\n\n removeLevelOverride(match: LevelOverrideMatch<TContext>): boolean {\n const key = JSON.stringify(match);\n const override = this.state.levelOverrides.get(key);\n if (override?.readonly) {\n return false;\n }\n const deleted = this.state.levelOverrides.delete(key);\n if (deleted) {\n rebuildIndexes(this.state);\n }\n return deleted;\n }\n\n clearLevelOverrides(): void {\n let changed = false;\n for (const [key, override] of this.state.levelOverrides) {\n if (!override.readonly) {\n this.state.levelOverrides.delete(key);\n changed = true;\n }\n }\n if (changed) {\n rebuildIndexes(this.state);\n }\n }\n\n getLevelOverrides(): LevelOverride<TContext>[] {\n return Array.from(this.state.levelOverrides.values());\n }\n\n // Shutdown\n\n /**\n * Gracefully shutdown the logger, flushing all pending messages.\n * Should be called before process exit to ensure no logs are lost.\n */\n async shutdown(): Promise<void> {\n const closePromises = this.state.transports.map((transport) => transport.close());\n await Promise.all(closePromises);\n }\n\n // Profiling\n\n profile(id: string, meta?: object): void {\n const existing = this.profileTimers.get(id);\n if (existing) {\n const duration = Date.now() - existing;\n this.profileTimers.delete(id);\n this.info(`${id} completed`, { ...meta, durationMs: duration });\n } else {\n this.profileTimers.set(id, Date.now());\n }\n }\n\n // Logging methods\n\n error(errorOrMessage: Error | string, messageOrMeta?: string | Meta, meta?: Meta): void {\n if (!shouldLog(this.state, 'error', this.context)) return;\n\n if (errorOrMessage instanceof Error) {\n // error(Error), error(Error, meta), error(Error, message), error(Error, message, meta)\n if (typeof messageOrMeta === 'string') {\n this.log('error', messageOrMeta, meta, errorOrMessage);\n } else {\n this.log('error', errorOrMessage.message, messageOrMeta, errorOrMessage);\n }\n } else {\n // error(message), error(message, meta)\n this.log('error', errorOrMessage, messageOrMeta as Meta | undefined);\n }\n }\n\n warn(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'warn', this.context)) return;\n this.log('warn', message, meta);\n }\n\n info(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'info', this.context)) return;\n this.log('info', message, meta);\n }\n\n http(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'http', this.context)) return;\n this.log('http', message, meta);\n }\n\n verbose(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'verbose', this.context)) return;\n this.log('verbose', message, meta);\n }\n\n debug(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'debug', this.context)) return;\n this.log('debug', message, meta);\n }\n\n silly(message: string, meta?: Meta): void {\n if (!shouldLog(this.state, 'silly', this.context)) return;\n this.log('silly', message, meta);\n }\n\n // Private\n\n private log(level: LogLevel, message: string, meta?: Meta, error?: Error | unknown, callerOffset = 0): void {\n const resolved = typeof meta === 'function' ? meta() : meta;\n const logMeta: Record<string, unknown> = { context: this.context, ...resolved };\n\n // Add store context\n const storeContext = this.state.store.getStore();\n if (storeContext) {\n Object.assign(logMeta, storeContext);\n }\n\n // Add caller info if enabled\n if (this.state.callerConfig) {\n const callerInfo = getCallerInfo(this.state.callerConfig, callerOffset);\n if (callerInfo) {\n logMeta.caller = formatCallerInfo(callerInfo);\n }\n }\n\n if (error !== undefined) {\n const serialized = serializeError(error);\n logMeta.errorMessage = serialized.errorMessage;\n logMeta.stack = serialized.stack;\n if (serialized.errorName) {\n logMeta.errorName = serialized.errorName;\n }\n if (serialized.code) {\n logMeta.errorCode = serialized.code;\n }\n if (serialized.http) {\n logMeta.http = serialized.http;\n }\n }\n\n // Use pino's logging - it will handle the streams\n const pinoMethod = this.getPinoMethod(level);\n pinoMethod.call(this.state.pino, logMeta, message);\n }\n\n private getPinoMethod(level: LogLevel): (obj: object, msg: string) => void {\n switch (level) {\n case 'error':\n return this.state.pino.error.bind(this.state.pino);\n case 'warn':\n return this.state.pino.warn.bind(this.state.pino);\n case 'info':\n return this.state.pino.info.bind(this.state.pino);\n case 'http':\n case 'verbose':\n // Use info level for http/verbose as they map to 25\n return (obj: object, msg: string) => {\n (this.state.pino as any)[level](obj, msg);\n };\n case 'debug':\n return this.state.pino.debug.bind(this.state.pino);\n case 'silly':\n return (obj: object, msg: string) => {\n (this.state.pino as any).silly(obj, msg);\n };\n default:\n return this.state.pino.info.bind(this.state.pino);\n }\n }\n}\n","import { Logger } from './logger.js';\nimport { LoggerStore } from './store.js';\nimport type { LoggerConfig, LoggerContext, LevelOverride, LogLevel } from './types.js';\n\nexport interface SingletonLogger<TContext extends LoggerContext> {\n init(config: LoggerConfig, store?: LoggerStore<TContext>): Logger<TContext>;\n get(): Logger<TContext>;\n for(context: string): Logger<TContext>;\n getStore(): LoggerStore<TContext>;\n setLevelOverride(match: Partial<TContext>, level: LogLevel): void;\n removeLevelOverride(match: Partial<TContext>): void;\n getLevelOverrides(): LevelOverride<TContext>[];\n clearLevelOverrides(): void;\n}\n\nexport function createSingletonLogger<\n TContext extends LoggerContext = LoggerContext,\n>(): SingletonLogger<TContext> {\n let root: Logger<TContext> | null = null;\n\n const ensureInit = (): Logger<TContext> => {\n if (!root) {\n throw new Error('Logger not initialized. Call init(config) first.');\n }\n return root;\n };\n\n return {\n init(config: LoggerConfig, store?: LoggerStore<TContext>): Logger<TContext> {\n if (!root) {\n root = Logger.create(config, store);\n }\n return root;\n },\n\n get(): Logger<TContext> {\n return ensureInit();\n },\n\n for(context: string): Logger<TContext> {\n return ensureInit().for(context);\n },\n\n getStore(): LoggerStore<TContext> {\n return ensureInit().getStore();\n },\n\n setLevelOverride(match: Partial<TContext>, level: LogLevel): void {\n ensureInit().setLevelOverride(match, level);\n },\n\n removeLevelOverride(match: Partial<TContext>): void {\n ensureInit().removeLevelOverride(match);\n },\n\n getLevelOverrides(): LevelOverride<TContext>[] {\n return ensureInit().getLevelOverrides();\n },\n\n clearLevelOverrides(): void {\n ensureInit().clearLevelOverrides();\n },\n };\n}\n","export interface TimingResult {\n label: string;\n durationMs: number;\n durationFormatted: string;\n}\n\nexport interface Timer {\n end: () => TimingResult;\n}\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms.toFixed(2)}ms`;\n }\n if (ms < 60000) {\n return `${(ms / 1000).toFixed(2)}s`;\n }\n const minutes = Math.floor(ms / 60000);\n const seconds = ((ms % 60000) / 1000).toFixed(1);\n return `${minutes}m ${seconds}s`;\n}\n\nexport function createTimer(label: string): Timer {\n const start = performance.now();\n\n return {\n end(): TimingResult {\n const durationMs = performance.now() - start;\n return {\n label,\n durationMs,\n durationFormatted: formatDuration(durationMs),\n };\n },\n };\n}\n\nexport async function measureAsync<T>(\n label: string,\n fn: () => Promise<T>,\n): Promise<{ result: T; timing: TimingResult }> {\n const timer = createTimer(label);\n const result = await fn();\n const timing = timer.end();\n return { result, timing };\n}\n\nexport function measureSync<T>(\n label: string,\n fn: () => T,\n): { result: T; timing: TimingResult } {\n const timer = createTimer(label);\n const result = fn();\n const timing = timer.end();\n return { result, timing };\n}\n","import { randomUUID } from 'crypto';\n\nexport interface RequestIdOptions {\n prefix?: string;\n short?: boolean;\n}\n\nexport function generateRequestId(options: RequestIdOptions = {}): string {\n const { prefix, short = false } = options;\n const uuid = randomUUID();\n const id = short ? uuid.split('-')[0] : uuid;\n return prefix ? `${prefix}-${id}` : id;\n}\n\nexport function extractRequestId(headers: Record<string, string | string[] | undefined>): string | undefined {\n const headerNames = ['x-request-id', 'x-correlation-id', 'x-trace-id'];\n\n for (const name of headerNames) {\n const value = headers[name];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n if (Array.isArray(value) && value.length > 0) {\n return value[0];\n }\n }\n\n return undefined;\n}\n\nexport function getOrGenerateRequestId(\n headers: Record<string, string | string[] | undefined>,\n options: RequestIdOptions = {},\n): string {\n return extractRequestId(headers) ?? generateRequestId(options);\n}\n","const DEFAULT_SECRET_PATTERNS = [\n 'password',\n 'secret',\n 'token',\n 'apikey',\n 'api_key',\n 'api-key',\n 'auth',\n 'credential',\n 'private',\n];\n\nconst DEFAULT_MASK = '***';\n\nexport interface MaskSecretsOptions {\n patterns?: string[];\n mask?: string;\n deep?: boolean;\n}\n\nfunction isSecretKey(key: string, patterns: string[]): boolean {\n const lowerKey = key.toLowerCase();\n return patterns.some((pattern) => lowerKey.includes(pattern.toLowerCase()));\n}\n\nfunction maskUrlCredentials(url: string, mask: string): string {\n try {\n const parsed = new URL(url);\n if (parsed.password) {\n parsed.password = mask;\n }\n if (parsed.username && parsed.password) {\n parsed.username = mask;\n }\n return parsed.toString();\n } catch {\n return url;\n }\n}\n\nexport function maskSecrets(\n obj: unknown,\n options: MaskSecretsOptions = {},\n): unknown {\n const { patterns = DEFAULT_SECRET_PATTERNS, mask = DEFAULT_MASK, deep = true } = options;\n\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj === 'string') {\n if (obj.startsWith('http://') || obj.startsWith('https://')) {\n return maskUrlCredentials(obj, mask);\n }\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return deep ? obj.map((item) => maskSecrets(item, options)) : obj;\n }\n\n if (typeof obj === 'object') {\n const result: Record<string | symbol, unknown> = {};\n\n // Copy Symbol properties first (important for Winston's internal symbols)\n for (const sym of Object.getOwnPropertySymbols(obj)) {\n result[sym] = (obj as Record<symbol, unknown>)[sym];\n }\n\n // Process string keys\n for (const [key, value] of Object.entries(obj)) {\n if (isSecretKey(key, patterns)) {\n result[key] = mask;\n } else if (deep && typeof value === 'object' && value !== null) {\n result[key] = maskSecrets(value, options);\n } else if (typeof value === 'string') {\n result[key] = maskSecrets(value, options);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n return obj;\n}\n\nexport function createMasker(options: MaskSecretsOptions = {}) {\n return (obj: unknown): unknown => maskSecrets(obj, options);\n}\n","import { inspect } from 'util';\nimport { LOG_LEVELS, type LogFormat, type LoggerContext, type LogLevel, type LevelRule } from './types.js';\n\nconst DEFAULT_CONTEXT = 'APP';\n\nconst LEVEL_COLORS: Record<string, string> = {\n error: '\\x1b[31m', // red\n warn: '\\x1b[33m', // yellow\n info: '\\x1b[32m', // green\n http: '\\x1b[35m', // magenta\n verbose: '\\x1b[36m', // cyan\n debug: '\\x1b[34m', // blue\n silly: '\\x1b[90m', // grey\n};\nconst RESET = '\\x1b[0m';\n\nexport function colorizeLevel(level: string): string {\n const color = LEVEL_COLORS[level] || '';\n return color ? `${color}${level}${RESET}` : level;\n}\n\nexport function formatMeta(meta: Record<string, unknown>, colors: boolean): string {\n return Object.entries(meta)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => {\n if (typeof value === 'object') {\n const inspected = inspect(value, { depth: 4, colors, compact: false });\n return `\\n ${key}: ${inspected.split('\\n').join('\\n ')}`;\n }\n return `\\n ${key}: ${value}`;\n })\n .join('');\n}\n\nconst MAX_FLATTEN_DEPTH = 10;\nconst CIRCULAR_REF = '[Circular]';\n\nexport function flattenObject(\n obj: Record<string, unknown>,\n prefix = '',\n ancestors: WeakSet<object> = new WeakSet(),\n depth = 0,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n // Protect against too deep nesting\n if (depth > MAX_FLATTEN_DEPTH) {\n result[prefix || 'value'] = '[Max depth exceeded]';\n return result;\n }\n\n // Add current object to ancestors (current path in recursion)\n ancestors.add(obj);\n\n for (const [key, value] of Object.entries(obj)) {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Error)) {\n // Check for circular reference (only in current path)\n if (ancestors.has(value as object)) {\n result[newKey] = CIRCULAR_REF;\n } else {\n Object.assign(result, flattenObject(value as Record<string, unknown>, newKey, ancestors, depth + 1));\n }\n } else {\n result[newKey] = value;\n }\n }\n\n // Remove from ancestors when leaving this level (allow reuse in sibling branches)\n ancestors.delete(obj);\n\n return result;\n}\n\nexport function formatLogfmtValue(value: unknown): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (typeof value === 'string') {\n if (value.includes(' ') || value.includes('\"') || value.includes('=')) {\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n }\n return value;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (value instanceof Error) {\n return `\"${value.message.replace(/\"/g, '\\\\\"')}\"`;\n }\n\n if (Array.isArray(value)) {\n return `\"${JSON.stringify(value).replace(/\"/g, '\\\\\"')}\"`;\n }\n\n return `\"${JSON.stringify(value).replace(/\"/g, '\\\\\"')}\"`;\n}\n\nexport function formatLogfmt(data: Record<string, unknown>): string {\n const flattened = flattenObject(data);\n\n return Object.entries(flattened)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${key}=${formatLogfmtValue(value)}`)\n .join(' ');\n}\n"]}