@rawnodes/logger 1.9.0 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -843,7 +843,16 @@ function matchesContext(storeContext, loggerContext, match) {
843
843
  const combined = { ...storeContext, context: loggerContext };
844
844
  return Object.entries(match).every(([key, value]) => combined[key] === value);
845
845
  }
846
- var LogLevelSchema = zod.z.enum(["off", "error", "warn", "info", "http", "verbose", "debug", "silly"]);
846
+ var LogLevelSchema = zod.z.enum([
847
+ "off",
848
+ "error",
849
+ "warn",
850
+ "info",
851
+ "http",
852
+ "verbose",
853
+ "debug",
854
+ "silly"
855
+ ]);
847
856
  var LogFormatSchema = zod.z.enum(["json", "plain", "logfmt", "simple"]);
848
857
  var LevelRuleSchema = zod.z.object({
849
858
  match: zod.z.record(zod.z.string(), zod.z.unknown()),
@@ -873,16 +882,28 @@ var HttpTransportBaseConfigSchema = zod.z.object({
873
882
  maxRetries: zod.z.number().int().nonnegative().optional(),
874
883
  retryDelay: zod.z.number().int().positive().optional()
875
884
  });
876
- var DiscordConfigSchema = HttpTransportBaseConfigSchema.extend({
877
- webhookUrl: zod.z.url("webhookUrl must be a valid URL"),
885
+ var DiscordConfigSchema = zod.z.object({
886
+ level: LogLevelSchema.optional(),
887
+ rules: zod.z.array(LevelRuleSchema).optional(),
888
+ batchSize: zod.z.number().int().positive().optional(),
889
+ flushInterval: zod.z.number().int().positive().optional(),
890
+ maxRetries: zod.z.number().int().nonnegative().optional(),
891
+ retryDelay: zod.z.number().int().positive().optional(),
892
+ webhookUrl: zod.z.string().url("webhookUrl must be a valid URL"),
878
893
  username: zod.z.string().optional(),
879
- avatarUrl: zod.z.url().optional(),
894
+ avatarUrl: zod.z.string().url().optional(),
880
895
  embedColors: zod.z.record(zod.z.string(), zod.z.number().int()).optional(),
881
896
  includeTimestamp: zod.z.boolean().optional(),
882
897
  includeMeta: zod.z.boolean().optional(),
883
898
  maxEmbedFields: zod.z.number().int().min(1).max(25).optional()
884
899
  });
885
- var TelegramConfigSchema = HttpTransportBaseConfigSchema.extend({
900
+ var TelegramConfigSchema = zod.z.object({
901
+ level: LogLevelSchema.optional(),
902
+ rules: zod.z.array(LevelRuleSchema).optional(),
903
+ batchSize: zod.z.number().int().positive().optional(),
904
+ flushInterval: zod.z.number().int().positive().optional(),
905
+ maxRetries: zod.z.number().int().nonnegative().optional(),
906
+ retryDelay: zod.z.number().int().positive().optional(),
886
907
  botToken: zod.z.string().min(1, "botToken is required"),
887
908
  chatId: zod.z.union([zod.z.string(), zod.z.number()]),
888
909
  parseMode: zod.z.enum(["Markdown", "MarkdownV2", "HTML"]).optional(),
@@ -890,7 +911,13 @@ var TelegramConfigSchema = HttpTransportBaseConfigSchema.extend({
890
911
  threadId: zod.z.number().int().optional(),
891
912
  replyToMessageId: zod.z.number().int().optional()
892
913
  });
893
- var CloudWatchConfigSchema = HttpTransportBaseConfigSchema.extend({
914
+ var CloudWatchConfigSchema = zod.z.object({
915
+ level: LogLevelSchema.optional(),
916
+ rules: zod.z.array(LevelRuleSchema).optional(),
917
+ batchSize: zod.z.number().int().positive().optional(),
918
+ flushInterval: zod.z.number().int().positive().optional(),
919
+ maxRetries: zod.z.number().int().nonnegative().optional(),
920
+ retryDelay: zod.z.number().int().positive().optional(),
894
921
  logGroupName: zod.z.string().min(1, "logGroupName is required"),
895
922
  logStreamName: zod.z.string().min(1, "logStreamName is required"),
896
923
  region: zod.z.string().min(1, "region is required"),
@@ -903,7 +930,10 @@ var LevelConfigObjectSchema = zod.z.object({
903
930
  default: LogLevelSchema,
904
931
  rules: zod.z.array(LevelRuleSchema).optional()
905
932
  });
906
- var LevelConfigSchema = zod.z.union([LogLevelSchema, LevelConfigObjectSchema]);
933
+ var LevelConfigSchema = zod.z.union([
934
+ LogLevelSchema,
935
+ LevelConfigObjectSchema
936
+ ]);
907
937
  var LoggerConfigSchema = zod.z.object({
908
938
  level: LevelConfigSchema,
909
939
  console: ConsoleConfigSchema,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store.ts","../src/types.ts","../src/utils/mask-secrets.ts","../src/formatters.ts","../src/transports/buffer.ts","../src/transports/base-http.ts","../src/transports/discord.ts","../src/transports/telegram.ts","../src/transports/cloudwatch.ts","../src/transports.ts","../src/state.ts","../src/schema.ts","../src/logger.ts","../src/singleton.ts","../src/utils/timing.ts","../src/utils/request-id.ts"],"names":["AsyncLocalStorage","inspect","format","TransportStream","CloudWatchLogsClient","PutLogEventsCommand","CreateLogGroupCommand","CreateLogStreamCommand","DescribeLogStreamsCommand","transports","DailyRotateFile","winston","createLogger","z","randomUUID"],"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 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 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 Transport\nexport interface CloudWatchConfig extends HttpTransportBaseConfig {\n logGroupName: string;\n logStreamName: string;\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 LoggerConfig {\n level: LevelConfig;\n console: ConsoleConfig;\n file?: FileConfig;\n discord?: DiscordConfig | DiscordConfig[];\n telegram?: TelegramConfig | TelegramConfig[];\n cloudwatch?: CloudWatchConfig | CloudWatchConfig[];\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","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 { format, Logform } from 'winston';\nimport { LoggerStore } from './store.js';\nimport { matchesContext } from './state.js';\nimport { LOG_LEVELS, type LogFormat, type LoggerContext, type LogLevel, type LevelRule } from './types.js';\nimport { maskSecrets, type MaskSecretsOptions } from './utils/mask-secrets.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\nfunction colorizeLevel(level: string): string {\n const color = LEVEL_COLORS[level] || '';\n return color ? `${color}${level}${RESET}` : level;\n}\n\nfunction 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\nexport function flattenObject(obj: Record<string, unknown>, prefix = ''): Record<string, unknown> {\n const result: Record<string, unknown> = {};\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 Object.assign(result, flattenObject(value as Record<string, unknown>, newKey));\n } else {\n result[newKey] = value;\n }\n }\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\nfunction addStoreContext<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format((info) => {\n const storeContext = store.getStore();\n if (storeContext) {\n return { ...info, ...storeContext };\n }\n return info;\n })();\n}\n\nfunction maskSecretsFormat(options?: MaskSecretsOptions): Logform.Format {\n return format((info) => {\n return maskSecrets(info, options) as Logform.TransformableInfo;\n })();\n}\n\nexport function createFilterFormat<TContext extends LoggerContext>(\n defaultLevel: LogLevel | undefined,\n rules: LevelRule[] | undefined,\n store: LoggerStore<TContext>,\n): Logform.Format {\n // If no rules and no level (undefined), no filtering needed - passthrough\n if (!rules?.length && defaultLevel === undefined) {\n return format((info) => info)();\n }\n\n return format((info) => {\n const logLevel = info.level as LogLevel;\n const context = info.context as string | undefined;\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 > 'silly' (accept all)\n const effectiveLevel = matchingRule?.level ?? defaultLevel ?? 'silly';\n\n // 'off' = don't log\n if (effectiveLevel === 'off') return false;\n\n // Compare levels\n return LOG_LEVELS[logLevel] <= LOG_LEVELS[effectiveLevel] ? info : false;\n })();\n}\n\nexport function createPlainFormat<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n addStoreContext(store),\n maskSecretsFormat(),\n format.printf(({ timestamp, level, context, message, ...meta }) => {\n const formattedMeta = formatMeta(meta, true);\n const coloredLevel = colorizeLevel(level);\n return `[${timestamp}] ${coloredLevel} [${context || DEFAULT_CONTEXT}] ${message}${formattedMeta}`;\n }),\n );\n}\n\nexport function createJsonFormat<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n addStoreContext(store),\n maskSecretsFormat(),\n format.json(),\n );\n}\n\nexport function createLogfmtFormat<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n addStoreContext(store),\n maskSecretsFormat(),\n format.printf(({ timestamp, level, context, message, ...meta }) => {\n const data: Record<string, unknown> = {\n level,\n msg: message,\n context: context || DEFAULT_CONTEXT,\n ts: timestamp,\n ...meta,\n };\n return formatLogfmt(data);\n }),\n );\n}\n\nexport function createSimpleFormat<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n addStoreContext(store),\n maskSecretsFormat(),\n format.printf(({ timestamp, level, message }) => {\n return `[${timestamp}] ${level}: ${message}`;\n }),\n );\n}\n\nexport function createFormat<TContext extends LoggerContext>(logFormat: LogFormat, store: LoggerStore<TContext>): Logform.Format {\n switch (logFormat) {\n case 'plain':\n return createPlainFormat(store);\n case 'json':\n return createJsonFormat(store);\n case 'logfmt':\n return createLogfmtFormat(store);\n case 'simple':\n return createSimpleFormat(store);\n }\n}\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 TransportStream from 'winston-transport';\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 TransportStream {\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 ? 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 winston transport 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 embeds: DiscordEmbed[];\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 // 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 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 ?? 'Markdown';\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\n let text = `${emoji} *${msg.level.toUpperCase()}* \\\\[${escape(msg.context || 'APP')}\\\\]\\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 ?? 'Markdown',\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 { BaseHttpTransport } from './base-http.js';\nimport type { BufferedMessage } from './buffer.js';\nimport type { CloudWatchConfig } from '../types.js';\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\n constructor(config: CloudWatchConfig) {\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\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.config.logStreamName,\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.config.logStreamName,\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.config.logStreamName,\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.config.logStreamName,\n limit: 1,\n }),\n );\n\n const stream = response.logStreams?.find((s) => s.logStreamName === this.config.logStreamName);\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 { transports, format } from 'winston';\nimport TransportStream from 'winston-transport';\nimport DailyRotateFile from 'winston-daily-rotate-file';\nimport { createFormat, createFilterFormat } from './formatters.js';\nimport { LoggerStore } from './store.js';\nimport { DiscordTransport } from './transports/discord.js';\nimport { TelegramTransport } from './transports/telegram.js';\nimport { CloudWatchTransport } from './transports/cloudwatch.js';\nimport type { LoggerConfig, LoggerContext, DiscordConfig, TelegramConfig, CloudWatchConfig } from './types.js';\n\ntype Transport = transports.ConsoleTransportInstance | DailyRotateFile | TransportStream;\n\nfunction toArray<T>(value: T | T[] | undefined): T[] {\n if (!value) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nexport function createTransports<TContext extends LoggerContext>(\n config: LoggerConfig,\n store: LoggerStore<TContext>,\n): Transport[] {\n const result: Transport[] = [\n new transports.Console({\n format: format.combine(\n createFilterFormat(config.console.level, config.console.rules, store),\n createFormat(config.console.format, store),\n ),\n }),\n ];\n\n if (config.file) {\n result.push(\n new DailyRotateFile({\n format: format.combine(\n createFilterFormat(config.file.level, config.file.rules, store),\n createFormat(config.file.format, store),\n ),\n dirname: config.file.dirname,\n filename: config.file.filename,\n datePattern: config.file.datePattern ?? 'YYYY-MM-DD',\n zippedArchive: config.file.zippedArchive ?? false,\n maxSize: config.file.maxSize ?? '20m',\n maxFiles: config.file.maxFiles ?? '14d',\n }),\n );\n }\n\n for (const discordConfig of toArray(config.discord)) {\n const discord = new DiscordTransport(discordConfig);\n discord.format = format.combine(\n createFilterFormat(discordConfig.level, discordConfig.rules, store),\n format.timestamp(),\n );\n result.push(discord);\n }\n\n for (const telegramConfig of toArray(config.telegram)) {\n const telegram = new TelegramTransport(telegramConfig);\n telegram.format = format.combine(\n createFilterFormat(telegramConfig.level, telegramConfig.rules, store),\n format.timestamp(),\n );\n result.push(telegram);\n }\n\n for (const cloudwatchConfig of toArray(config.cloudwatch)) {\n const cloudwatch = new CloudWatchTransport(cloudwatchConfig);\n cloudwatch.format = format.combine(\n createFilterFormat(cloudwatchConfig.level, cloudwatchConfig.rules, store),\n format.timestamp(),\n );\n result.push(cloudwatch);\n }\n\n return result;\n}\n\nexport function createExceptionHandlers<TContext extends LoggerContext>(\n config: LoggerConfig,\n store: LoggerStore<TContext>,\n): Transport[] {\n const result: Transport[] = [\n new transports.Console({\n format: createFormat(config.console.format, store),\n }),\n ];\n\n if (config.file) {\n result.push(\n new DailyRotateFile({\n format: createFormat(config.file.format, store),\n dirname: config.file.dirname,\n filename: `exceptions-${config.file.filename}`,\n datePattern: config.file.datePattern ?? 'YYYY-MM-DD',\n zippedArchive: config.file.zippedArchive ?? false,\n maxSize: config.file.maxSize ?? '20m',\n maxFiles: config.file.maxFiles ?? '14d',\n }),\n );\n }\n\n return result;\n}\n","import { createLogger, type Logger as WinstonLogger } from 'winston';\nimport { LoggerStore } from './store.js';\nimport { createTransports, createExceptionHandlers } from './transports.js';\nimport {\n LOG_LEVELS,\n assertLogLevel,\n type LoggerConfig,\n type LoggerContext,\n type LevelOverride,\n type LogLevel,\n type LevelConfig,\n} from './types.js';\n\nexport interface LoggerState<TContext extends LoggerContext> {\n winston: WinstonLogger;\n store: LoggerStore<TContext>;\n defaultLevel: LogLevel;\n levelOverrides: Map<string, LevelOverride<TContext>>;\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\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 const exceptionHandlers = createExceptionHandlers(config, loggerStore);\n\n const winston = createLogger({\n level: 'silly', // Accept all, we filter in shouldLog()\n transports: createTransports(config, loggerStore),\n exceptionHandlers,\n rejectionHandlers: exceptionHandlers,\n exitOnError: false,\n });\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 return {\n winston,\n store: loggerStore,\n defaultLevel,\n levelOverrides,\n };\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 return LOG_LEVELS[level] <= LOG_LEVELS[effectiveLevel];\n}\n\nfunction getEffectiveLevel<TContext extends LoggerContext>(\n state: LoggerState<TContext>,\n loggerContext?: string,\n): LogLevel {\n const storeContext = state.store.getStore();\n\n for (const { match, level } of state.levelOverrides.values()) {\n if (matchesContext(storeContext, loggerContext, match)) {\n return level;\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';\n\n// Log Level\nexport const LogLevelSchema = z.enum(['off', 'error', 'warn', 'info', 'http', 'verbose', 'debug', 'silly']);\n\n// Log Format\nexport const LogFormatSchema = z.enum(['json', 'plain', 'logfmt', 'simple']);\n\n// Level Rule\nexport const LevelRuleSchema = z.object({\n match: z.record(z.string(), z.unknown()),\n level: LogLevelSchema,\n});\n\n// Console Config\nexport const ConsoleConfigSchema = z.object({\n format: LogFormatSchema,\n level: LogLevelSchema.optional(),\n rules: z.array(LevelRuleSchema).optional(),\n});\n\n// File Config\nexport const FileConfigSchema = 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 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.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 = HttpTransportBaseConfigSchema.extend({\n webhookUrl: z.url('webhookUrl must be a valid URL'),\n username: z.string().optional(),\n avatarUrl: z.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 = HttpTransportBaseConfigSchema.extend({\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// CloudWatch Config\nexport const CloudWatchConfigSchema = HttpTransportBaseConfigSchema.extend({\n logGroupName: z.string().min(1, 'logGroupName is required'),\n logStreamName: z.string().min(1, 'logStreamName is required'),\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.object({\n default: LogLevelSchema,\n rules: z.array(LevelRuleSchema).optional(),\n});\n\n// Level Config (string or object)\nexport const LevelConfigSchema = z.union([LogLevelSchema, LevelConfigObjectSchema]);\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});\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 { LoggerStore } from './store.js';\nimport { createState, shouldLog, 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';\n\nexport class Logger<TContext extends LoggerContext = LoggerContext> {\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 return new Logger(state, 'APP');\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 }\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 return this.state.levelOverrides.delete(key);\n }\n\n clearLevelOverrides(): void {\n for (const [key, override] of this.state.levelOverrides) {\n if (!override.readonly) {\n this.state.levelOverrides.delete(key);\n }\n }\n }\n\n getLevelOverrides(): LevelOverride<TContext>[] {\n return Array.from(this.state.levelOverrides.values());\n }\n\n // Profiling\n\n profile(id: string, meta?: object): void {\n this.state.winston.profile(id, meta);\n }\n\n // Logging methods\n\n error(message: string, error?: Error | unknown, meta?: Meta): void {\n if (!shouldLog(this.state, 'error', this.context)) return;\n this.log('error', message, meta, error);\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): void {\n const resolved = typeof meta === 'function' ? meta() : meta;\n const logMeta: Record<string, unknown> = { context: this.context, ...resolved };\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 this.state.winston.log(level, message, logMeta);\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"]}
1
+ {"version":3,"sources":["../src/store.ts","../src/types.ts","../src/utils/mask-secrets.ts","../src/formatters.ts","../src/transports/buffer.ts","../src/transports/base-http.ts","../src/transports/discord.ts","../src/transports/telegram.ts","../src/transports/cloudwatch.ts","../src/transports.ts","../src/state.ts","../src/schema.ts","../src/logger.ts","../src/singleton.ts","../src/utils/timing.ts","../src/utils/request-id.ts"],"names":["AsyncLocalStorage","inspect","format","TransportStream","CloudWatchLogsClient","PutLogEventsCommand","CreateLogGroupCommand","CreateLogStreamCommand","DescribeLogStreamsCommand","transports","DailyRotateFile","winston","createLogger","z","randomUUID"],"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 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 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 Transport\nexport interface CloudWatchConfig extends HttpTransportBaseConfig {\n logGroupName: string;\n logStreamName: string;\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 LoggerConfig {\n level: LevelConfig;\n console: ConsoleConfig;\n file?: FileConfig;\n discord?: DiscordConfig | DiscordConfig[];\n telegram?: TelegramConfig | TelegramConfig[];\n cloudwatch?: CloudWatchConfig | CloudWatchConfig[];\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","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 { format, Logform } from 'winston';\nimport { LoggerStore } from './store.js';\nimport { matchesContext } from './state.js';\nimport { LOG_LEVELS, type LogFormat, type LoggerContext, type LogLevel, type LevelRule } from './types.js';\nimport { maskSecrets, type MaskSecretsOptions } from './utils/mask-secrets.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\nfunction colorizeLevel(level: string): string {\n const color = LEVEL_COLORS[level] || '';\n return color ? `${color}${level}${RESET}` : level;\n}\n\nfunction 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\nexport function flattenObject(obj: Record<string, unknown>, prefix = ''): Record<string, unknown> {\n const result: Record<string, unknown> = {};\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 Object.assign(result, flattenObject(value as Record<string, unknown>, newKey));\n } else {\n result[newKey] = value;\n }\n }\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\nfunction addStoreContext<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format((info) => {\n const storeContext = store.getStore();\n if (storeContext) {\n return { ...info, ...storeContext };\n }\n return info;\n })();\n}\n\nfunction maskSecretsFormat(options?: MaskSecretsOptions): Logform.Format {\n return format((info) => {\n return maskSecrets(info, options) as Logform.TransformableInfo;\n })();\n}\n\nexport function createFilterFormat<TContext extends LoggerContext>(\n defaultLevel: LogLevel | undefined,\n rules: LevelRule[] | undefined,\n store: LoggerStore<TContext>,\n): Logform.Format {\n // If no rules and no level (undefined), no filtering needed - passthrough\n if (!rules?.length && defaultLevel === undefined) {\n return format((info) => info)();\n }\n\n return format((info) => {\n const logLevel = info.level as LogLevel;\n const context = info.context as string | undefined;\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 > 'silly' (accept all)\n const effectiveLevel = matchingRule?.level ?? defaultLevel ?? 'silly';\n\n // 'off' = don't log\n if (effectiveLevel === 'off') return false;\n\n // Compare levels\n return LOG_LEVELS[logLevel] <= LOG_LEVELS[effectiveLevel] ? info : false;\n })();\n}\n\nexport function createPlainFormat<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n addStoreContext(store),\n maskSecretsFormat(),\n format.printf(({ timestamp, level, context, message, ...meta }) => {\n const formattedMeta = formatMeta(meta, true);\n const coloredLevel = colorizeLevel(level);\n return `[${timestamp}] ${coloredLevel} [${context || DEFAULT_CONTEXT}] ${message}${formattedMeta}`;\n }),\n );\n}\n\nexport function createJsonFormat<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n addStoreContext(store),\n maskSecretsFormat(),\n format.json(),\n );\n}\n\nexport function createLogfmtFormat<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n addStoreContext(store),\n maskSecretsFormat(),\n format.printf(({ timestamp, level, context, message, ...meta }) => {\n const data: Record<string, unknown> = {\n level,\n msg: message,\n context: context || DEFAULT_CONTEXT,\n ts: timestamp,\n ...meta,\n };\n return formatLogfmt(data);\n }),\n );\n}\n\nexport function createSimpleFormat<TContext extends LoggerContext>(store: LoggerStore<TContext>): Logform.Format {\n return format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n addStoreContext(store),\n maskSecretsFormat(),\n format.printf(({ timestamp, level, message }) => {\n return `[${timestamp}] ${level}: ${message}`;\n }),\n );\n}\n\nexport function createFormat<TContext extends LoggerContext>(logFormat: LogFormat, store: LoggerStore<TContext>): Logform.Format {\n switch (logFormat) {\n case 'plain':\n return createPlainFormat(store);\n case 'json':\n return createJsonFormat(store);\n case 'logfmt':\n return createLogfmtFormat(store);\n case 'simple':\n return createSimpleFormat(store);\n }\n}\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 TransportStream from 'winston-transport';\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 TransportStream {\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 ? 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 winston transport 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 embeds: DiscordEmbed[];\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 // 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 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 ?? 'Markdown';\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\n let text = `${emoji} *${msg.level.toUpperCase()}* \\\\[${escape(msg.context || 'APP')}\\\\]\\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 ?? 'Markdown',\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 { BaseHttpTransport } from './base-http.js';\nimport type { BufferedMessage } from './buffer.js';\nimport type { CloudWatchConfig } from '../types.js';\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\n constructor(config: CloudWatchConfig) {\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\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.config.logStreamName,\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.config.logStreamName,\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.config.logStreamName,\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.config.logStreamName,\n limit: 1,\n }),\n );\n\n const stream = response.logStreams?.find((s) => s.logStreamName === this.config.logStreamName);\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 { transports, format } from 'winston';\nimport TransportStream from 'winston-transport';\nimport DailyRotateFile from 'winston-daily-rotate-file';\nimport { createFormat, createFilterFormat } from './formatters.js';\nimport { LoggerStore } from './store.js';\nimport { DiscordTransport } from './transports/discord.js';\nimport { TelegramTransport } from './transports/telegram.js';\nimport { CloudWatchTransport } from './transports/cloudwatch.js';\nimport type { LoggerConfig, LoggerContext, DiscordConfig, TelegramConfig, CloudWatchConfig } from './types.js';\n\ntype Transport = transports.ConsoleTransportInstance | DailyRotateFile | TransportStream;\n\nfunction toArray<T>(value: T | T[] | undefined): T[] {\n if (!value) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nexport function createTransports<TContext extends LoggerContext>(\n config: LoggerConfig,\n store: LoggerStore<TContext>,\n): Transport[] {\n const result: Transport[] = [\n new transports.Console({\n format: format.combine(\n createFilterFormat(config.console.level, config.console.rules, store),\n createFormat(config.console.format, store),\n ),\n }),\n ];\n\n if (config.file) {\n result.push(\n new DailyRotateFile({\n format: format.combine(\n createFilterFormat(config.file.level, config.file.rules, store),\n createFormat(config.file.format, store),\n ),\n dirname: config.file.dirname,\n filename: config.file.filename,\n datePattern: config.file.datePattern ?? 'YYYY-MM-DD',\n zippedArchive: config.file.zippedArchive ?? false,\n maxSize: config.file.maxSize ?? '20m',\n maxFiles: config.file.maxFiles ?? '14d',\n }),\n );\n }\n\n for (const discordConfig of toArray(config.discord)) {\n const discord = new DiscordTransport(discordConfig);\n discord.format = format.combine(\n createFilterFormat(discordConfig.level, discordConfig.rules, store),\n format.timestamp(),\n );\n result.push(discord);\n }\n\n for (const telegramConfig of toArray(config.telegram)) {\n const telegram = new TelegramTransport(telegramConfig);\n telegram.format = format.combine(\n createFilterFormat(telegramConfig.level, telegramConfig.rules, store),\n format.timestamp(),\n );\n result.push(telegram);\n }\n\n for (const cloudwatchConfig of toArray(config.cloudwatch)) {\n const cloudwatch = new CloudWatchTransport(cloudwatchConfig);\n cloudwatch.format = format.combine(\n createFilterFormat(cloudwatchConfig.level, cloudwatchConfig.rules, store),\n format.timestamp(),\n );\n result.push(cloudwatch);\n }\n\n return result;\n}\n\nexport function createExceptionHandlers<TContext extends LoggerContext>(\n config: LoggerConfig,\n store: LoggerStore<TContext>,\n): Transport[] {\n const result: Transport[] = [\n new transports.Console({\n format: createFormat(config.console.format, store),\n }),\n ];\n\n if (config.file) {\n result.push(\n new DailyRotateFile({\n format: createFormat(config.file.format, store),\n dirname: config.file.dirname,\n filename: `exceptions-${config.file.filename}`,\n datePattern: config.file.datePattern ?? 'YYYY-MM-DD',\n zippedArchive: config.file.zippedArchive ?? false,\n maxSize: config.file.maxSize ?? '20m',\n maxFiles: config.file.maxFiles ?? '14d',\n }),\n );\n }\n\n return result;\n}\n","import { createLogger, type Logger as WinstonLogger } from 'winston';\nimport { LoggerStore } from './store.js';\nimport { createTransports, createExceptionHandlers } from './transports.js';\nimport {\n LOG_LEVELS,\n assertLogLevel,\n type LoggerConfig,\n type LoggerContext,\n type LevelOverride,\n type LogLevel,\n type LevelConfig,\n} from './types.js';\n\nexport interface LoggerState<TContext extends LoggerContext> {\n winston: WinstonLogger;\n store: LoggerStore<TContext>;\n defaultLevel: LogLevel;\n levelOverrides: Map<string, LevelOverride<TContext>>;\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\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 const exceptionHandlers = createExceptionHandlers(config, loggerStore);\n\n const winston = createLogger({\n level: 'silly', // Accept all, we filter in shouldLog()\n transports: createTransports(config, loggerStore),\n exceptionHandlers,\n rejectionHandlers: exceptionHandlers,\n exitOnError: false,\n });\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 return {\n winston,\n store: loggerStore,\n defaultLevel,\n levelOverrides,\n };\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 return LOG_LEVELS[level] <= LOG_LEVELS[effectiveLevel];\n}\n\nfunction getEffectiveLevel<TContext extends LoggerContext>(\n state: LoggerState<TContext>,\n loggerContext?: string,\n): LogLevel {\n const storeContext = state.store.getStore();\n\n for (const { match, level } of state.levelOverrides.values()) {\n if (matchesContext(storeContext, loggerContext, match)) {\n return level;\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} 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 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 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// 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: z.string().min(1, 'logStreamName is required'),\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// Logger Config\nexport const LoggerConfigSchema: z.ZodType<LoggerConfig> = 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});\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 { LoggerStore } from './store.js';\nimport { createState, shouldLog, 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';\n\nexport class Logger<TContext extends LoggerContext = LoggerContext> {\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 return new Logger(state, 'APP');\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 }\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 return this.state.levelOverrides.delete(key);\n }\n\n clearLevelOverrides(): void {\n for (const [key, override] of this.state.levelOverrides) {\n if (!override.readonly) {\n this.state.levelOverrides.delete(key);\n }\n }\n }\n\n getLevelOverrides(): LevelOverride<TContext>[] {\n return Array.from(this.state.levelOverrides.values());\n }\n\n // Profiling\n\n profile(id: string, meta?: object): void {\n this.state.winston.profile(id, meta);\n }\n\n // Logging methods\n\n error(message: string, error?: Error | unknown, meta?: Meta): void {\n if (!shouldLog(this.state, 'error', this.context)) return;\n this.log('error', message, meta, error);\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): void {\n const resolved = typeof meta === 'function' ? meta() : meta;\n const logMeta: Record<string, unknown> = { context: this.context, ...resolved };\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 this.state.winston.log(level, message, logMeta);\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"]}
package/dist/index.mjs CHANGED
@@ -836,7 +836,16 @@ function matchesContext(storeContext, loggerContext, match) {
836
836
  const combined = { ...storeContext, context: loggerContext };
837
837
  return Object.entries(match).every(([key, value]) => combined[key] === value);
838
838
  }
839
- var LogLevelSchema = z.enum(["off", "error", "warn", "info", "http", "verbose", "debug", "silly"]);
839
+ var LogLevelSchema = z.enum([
840
+ "off",
841
+ "error",
842
+ "warn",
843
+ "info",
844
+ "http",
845
+ "verbose",
846
+ "debug",
847
+ "silly"
848
+ ]);
840
849
  var LogFormatSchema = z.enum(["json", "plain", "logfmt", "simple"]);
841
850
  var LevelRuleSchema = z.object({
842
851
  match: z.record(z.string(), z.unknown()),
@@ -866,16 +875,28 @@ var HttpTransportBaseConfigSchema = z.object({
866
875
  maxRetries: z.number().int().nonnegative().optional(),
867
876
  retryDelay: z.number().int().positive().optional()
868
877
  });
869
- var DiscordConfigSchema = HttpTransportBaseConfigSchema.extend({
870
- webhookUrl: z.url("webhookUrl must be a valid URL"),
878
+ var DiscordConfigSchema = z.object({
879
+ level: LogLevelSchema.optional(),
880
+ rules: z.array(LevelRuleSchema).optional(),
881
+ batchSize: z.number().int().positive().optional(),
882
+ flushInterval: z.number().int().positive().optional(),
883
+ maxRetries: z.number().int().nonnegative().optional(),
884
+ retryDelay: z.number().int().positive().optional(),
885
+ webhookUrl: z.string().url("webhookUrl must be a valid URL"),
871
886
  username: z.string().optional(),
872
- avatarUrl: z.url().optional(),
887
+ avatarUrl: z.string().url().optional(),
873
888
  embedColors: z.record(z.string(), z.number().int()).optional(),
874
889
  includeTimestamp: z.boolean().optional(),
875
890
  includeMeta: z.boolean().optional(),
876
891
  maxEmbedFields: z.number().int().min(1).max(25).optional()
877
892
  });
878
- var TelegramConfigSchema = HttpTransportBaseConfigSchema.extend({
893
+ var TelegramConfigSchema = z.object({
894
+ level: LogLevelSchema.optional(),
895
+ rules: z.array(LevelRuleSchema).optional(),
896
+ batchSize: z.number().int().positive().optional(),
897
+ flushInterval: z.number().int().positive().optional(),
898
+ maxRetries: z.number().int().nonnegative().optional(),
899
+ retryDelay: z.number().int().positive().optional(),
879
900
  botToken: z.string().min(1, "botToken is required"),
880
901
  chatId: z.union([z.string(), z.number()]),
881
902
  parseMode: z.enum(["Markdown", "MarkdownV2", "HTML"]).optional(),
@@ -883,7 +904,13 @@ var TelegramConfigSchema = HttpTransportBaseConfigSchema.extend({
883
904
  threadId: z.number().int().optional(),
884
905
  replyToMessageId: z.number().int().optional()
885
906
  });
886
- var CloudWatchConfigSchema = HttpTransportBaseConfigSchema.extend({
907
+ var CloudWatchConfigSchema = z.object({
908
+ level: LogLevelSchema.optional(),
909
+ rules: z.array(LevelRuleSchema).optional(),
910
+ batchSize: z.number().int().positive().optional(),
911
+ flushInterval: z.number().int().positive().optional(),
912
+ maxRetries: z.number().int().nonnegative().optional(),
913
+ retryDelay: z.number().int().positive().optional(),
887
914
  logGroupName: z.string().min(1, "logGroupName is required"),
888
915
  logStreamName: z.string().min(1, "logStreamName is required"),
889
916
  region: z.string().min(1, "region is required"),
@@ -896,7 +923,10 @@ var LevelConfigObjectSchema = z.object({
896
923
  default: LogLevelSchema,
897
924
  rules: z.array(LevelRuleSchema).optional()
898
925
  });
899
- var LevelConfigSchema = z.union([LogLevelSchema, LevelConfigObjectSchema]);
926
+ var LevelConfigSchema = z.union([
927
+ LogLevelSchema,
928
+ LevelConfigObjectSchema
929
+ ]);
900
930
  var LoggerConfigSchema = z.object({
901
931
  level: LevelConfigSchema,
902
932
  console: ConsoleConfigSchema,