@rawnodes/logger 1.9.1 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -272,8 +272,22 @@ declare const TelegramConfigSchema: z.ZodType<TelegramConfig>;
272
272
  declare const CloudWatchConfigSchema: z.ZodType<CloudWatchConfig>;
273
273
  declare const LevelConfigObjectSchema: z.ZodType<LevelConfigObject>;
274
274
  declare const LevelConfigSchema: z.ZodType<LevelConfig>;
275
- declare const LoggerConfigSchema: z.ZodType<LoggerConfig>;
275
+ declare const LoggerConfigSchema: z.ZodObject<{
276
+ level: z.ZodType<LevelConfig, unknown, z.core.$ZodTypeInternals<LevelConfig, unknown>>;
277
+ console: z.ZodType<ConsoleConfig, unknown, z.core.$ZodTypeInternals<ConsoleConfig, unknown>>;
278
+ file: z.ZodOptional<z.ZodType<FileConfig, unknown, z.core.$ZodTypeInternals<FileConfig, unknown>>>;
279
+ discord: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<DiscordConfig, unknown, z.core.$ZodTypeInternals<DiscordConfig, unknown>>, z.ZodArray<z.ZodType<DiscordConfig, unknown, z.core.$ZodTypeInternals<DiscordConfig, unknown>>>]>>;
280
+ telegram: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<TelegramConfig, unknown, z.core.$ZodTypeInternals<TelegramConfig, unknown>>, z.ZodArray<z.ZodType<TelegramConfig, unknown, z.core.$ZodTypeInternals<TelegramConfig, unknown>>>]>>;
281
+ cloudwatch: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<CloudWatchConfig, unknown, z.core.$ZodTypeInternals<CloudWatchConfig, unknown>>, z.ZodArray<z.ZodType<CloudWatchConfig, unknown, z.core.$ZodTypeInternals<CloudWatchConfig, unknown>>>]>>;
282
+ }, z.core.$strip>;
276
283
  declare function validateConfig(config: unknown): z.infer<typeof LoggerConfigSchema>;
277
- declare function safeValidateConfig(config: unknown): z.ZodSafeParseResult<LoggerConfig>;
284
+ declare function safeValidateConfig(config: unknown): z.ZodSafeParseResult<{
285
+ level: LevelConfig;
286
+ console: ConsoleConfig;
287
+ file?: FileConfig | undefined;
288
+ discord?: DiscordConfig | DiscordConfig[] | undefined;
289
+ telegram?: TelegramConfig | TelegramConfig[] | undefined;
290
+ cloudwatch?: CloudWatchConfig | CloudWatchConfig[] | undefined;
291
+ }>;
278
292
 
279
293
  export { BaseHttpTransport, type BaseHttpTransportOptions, type BufferOptions, type BufferedMessage, type CloudWatchConfig, CloudWatchConfigSchema, CloudWatchTransport, type ConsoleConfig, ConsoleConfigSchema, type DiscordConfig, DiscordConfigSchema, DiscordTransport, type FileConfig, FileConfigSchema, type HttpTransportBaseConfig, HttpTransportBaseConfigSchema, LOG_LEVELS, type LevelConfig, type LevelConfigObject, LevelConfigObjectSchema, LevelConfigSchema, type LevelOverride, type LevelOverrideMatch, type LevelRule, LevelRuleSchema, type LogFormat, LogFormatSchema, type LogLevel, LogLevelSchema, Logger, type LoggerConfig, LoggerConfigSchema, type LoggerContext, LoggerStore, type MaskSecretsOptions, MessageBuffer, type Meta, type RequestIdOptions, type SingletonLogger, type TelegramConfig, TelegramConfigSchema, TelegramTransport, type TimingResult, assertLogLevel, createMasker, createSingletonLogger, extractRequestId, flattenObject, formatLogfmt, formatLogfmtValue, generateRequestId, getOrGenerateRequestId, isValidLogLevel, maskSecrets, matchesContext, measureAsync, measureSync, safeValidateConfig, validateConfig };
package/dist/index.d.ts CHANGED
@@ -272,8 +272,22 @@ declare const TelegramConfigSchema: z.ZodType<TelegramConfig>;
272
272
  declare const CloudWatchConfigSchema: z.ZodType<CloudWatchConfig>;
273
273
  declare const LevelConfigObjectSchema: z.ZodType<LevelConfigObject>;
274
274
  declare const LevelConfigSchema: z.ZodType<LevelConfig>;
275
- declare const LoggerConfigSchema: z.ZodType<LoggerConfig>;
275
+ declare const LoggerConfigSchema: z.ZodObject<{
276
+ level: z.ZodType<LevelConfig, unknown, z.core.$ZodTypeInternals<LevelConfig, unknown>>;
277
+ console: z.ZodType<ConsoleConfig, unknown, z.core.$ZodTypeInternals<ConsoleConfig, unknown>>;
278
+ file: z.ZodOptional<z.ZodType<FileConfig, unknown, z.core.$ZodTypeInternals<FileConfig, unknown>>>;
279
+ discord: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<DiscordConfig, unknown, z.core.$ZodTypeInternals<DiscordConfig, unknown>>, z.ZodArray<z.ZodType<DiscordConfig, unknown, z.core.$ZodTypeInternals<DiscordConfig, unknown>>>]>>;
280
+ telegram: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<TelegramConfig, unknown, z.core.$ZodTypeInternals<TelegramConfig, unknown>>, z.ZodArray<z.ZodType<TelegramConfig, unknown, z.core.$ZodTypeInternals<TelegramConfig, unknown>>>]>>;
281
+ cloudwatch: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<CloudWatchConfig, unknown, z.core.$ZodTypeInternals<CloudWatchConfig, unknown>>, z.ZodArray<z.ZodType<CloudWatchConfig, unknown, z.core.$ZodTypeInternals<CloudWatchConfig, unknown>>>]>>;
282
+ }, z.core.$strip>;
276
283
  declare function validateConfig(config: unknown): z.infer<typeof LoggerConfigSchema>;
277
- declare function safeValidateConfig(config: unknown): z.ZodSafeParseResult<LoggerConfig>;
284
+ declare function safeValidateConfig(config: unknown): z.ZodSafeParseResult<{
285
+ level: LevelConfig;
286
+ console: ConsoleConfig;
287
+ file?: FileConfig | undefined;
288
+ discord?: DiscordConfig | DiscordConfig[] | undefined;
289
+ telegram?: TelegramConfig | TelegramConfig[] | undefined;
290
+ cloudwatch?: CloudWatchConfig | CloudWatchConfig[] | undefined;
291
+ }>;
278
292
 
279
293
  export { BaseHttpTransport, type BaseHttpTransportOptions, type BufferOptions, type BufferedMessage, type CloudWatchConfig, CloudWatchConfigSchema, CloudWatchTransport, type ConsoleConfig, ConsoleConfigSchema, type DiscordConfig, DiscordConfigSchema, DiscordTransport, type FileConfig, FileConfigSchema, type HttpTransportBaseConfig, HttpTransportBaseConfigSchema, LOG_LEVELS, type LevelConfig, type LevelConfigObject, LevelConfigObjectSchema, LevelConfigSchema, type LevelOverride, type LevelOverrideMatch, type LevelRule, LevelRuleSchema, type LogFormat, LogFormatSchema, type LogLevel, LogLevelSchema, Logger, type LoggerConfig, LoggerConfigSchema, type LoggerContext, LoggerStore, type MaskSecretsOptions, MessageBuffer, type Meta, type RequestIdOptions, type SingletonLogger, type TelegramConfig, TelegramConfigSchema, TelegramTransport, type TimingResult, assertLogLevel, createMasker, createSingletonLogger, extractRequestId, flattenObject, formatLogfmt, formatLogfmtValue, generateRequestId, getOrGenerateRequestId, isValidLogLevel, maskSecrets, matchesContext, measureAsync, measureSync, safeValidateConfig, validateConfig };
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';\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"]}
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":";;;;;;;;;;;;;;;;;AAGO,IAAM,cAAN,MAAkE;AAAA,EAC/D,OAAA,GAAU,IAAIA,6BAAA,EAA4B;AAAA,EAElD,QAAA,GAAiC;AAC/B,IAAA,OAAO,IAAA,CAAK,QAAQ,QAAA,EAAS;AAAA,EAC/B;AAAA,EAEA,GAAA,CAAO,SAAmB,EAAA,EAAgB;AACxC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,EAAE,CAAA;AAAA,EACrC;AACF;;;ACbO,IAAM,UAAA,GAAa;AAAA,EACxB,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,CAAA;AAAA,EACP,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,OAAA,EAAS,CAAA;AAAA,EACT,KAAA,EAAO,CAAA;AAAA,EACP,KAAA,EAAO;AACT;AAIO,SAAS,gBAAgB,KAAA,EAAkC;AAChE,EAAA,OAAO,KAAA,IAAS,UAAA;AAClB;AAEO,SAAS,eAAe,KAAA,EAA0C;AACvE,EAAA,IAAI,CAAC,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,KAAK,CAAA,iBAAA,EAAoB,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACtG;AACF;;;ACrBA,IAAM,uBAAA,GAA0B;AAAA,EAC9B,UAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,YAAA,GAAe,KAAA;AAQrB,SAAS,WAAA,CAAY,KAAa,QAAA,EAA6B;AAC7D,EAAA,MAAM,QAAA,GAAW,IAAI,WAAA,EAAY;AACjC,EAAA,OAAO,QAAA,CAAS,KAAK,CAAC,OAAA,KAAY,SAAS,QAAA,CAAS,OAAA,CAAQ,WAAA,EAAa,CAAC,CAAA;AAC5E;AAEA,SAAS,kBAAA,CAAmB,KAAa,IAAA,EAAsB;AAC7D,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAAA,IACpB;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,EAAU;AACtC,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAAA,IACpB;AACA,IAAA,OAAO,OAAO,QAAA,EAAS;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAEO,SAAS,WAAA,CACd,GAAA,EACA,OAAA,GAA8B,EAAC,EACtB;AACT,EAAA,MAAM,EAAE,QAAA,GAAW,uBAAA,EAAyB,OAAO,YAAA,EAAc,IAAA,GAAO,MAAK,GAAI,OAAA;AAEjF,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,EAAW;AACrC,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,IAAI,UAAA,CAAW,SAAS,KAAK,GAAA,CAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC3D,MAAA,OAAO,kBAAA,CAAmB,KAAK,IAAI,CAAA;AAAA,IACrC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,IAAA,GAAO,IAAI,GAAA,CAAI,CAAC,SAAS,WAAA,CAAY,IAAA,EAAM,OAAO,CAAC,CAAA,GAAI,GAAA;AAAA,EAChE;AAEA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,SAA2C,EAAC;AAGlD,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,qBAAA,CAAsB,GAAG,CAAA,EAAG;AACnD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAK,GAAA,CAAgC,GAAG,CAAA;AAAA,IACpD;AAGA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,MAAA,IAAI,WAAA,CAAY,GAAA,EAAK,QAAQ,CAAA,EAAG;AAC9B,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAAA,MAChB,WAAW,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,EAAM;AAC9D,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,WAAA,CAAY,KAAA,EAAO,OAAO,CAAA;AAAA,MAC1C,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,WAAA,CAAY,KAAA,EAAO,OAAO,CAAA;AAAA,MAC1C,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,YAAA,CAAa,OAAA,GAA8B,EAAC,EAAG;AAC7D,EAAA,OAAO,CAAC,GAAA,KAA0B,WAAA,CAAY,GAAA,EAAK,OAAO,CAAA;AAC5D;;;ACnFA,IAAM,eAAA,GAAkB,KAAA;AAExB,IAAM,YAAA,GAAuC;AAAA,EAC3C,KAAA,EAAO,UAAA;AAAA;AAAA,EACP,IAAA,EAAM,UAAA;AAAA;AAAA,EACN,IAAA,EAAM,UAAA;AAAA;AAAA,EACN,IAAA,EAAM,UAAA;AAAA;AAAA,EACN,OAAA,EAAS,UAAA;AAAA;AAAA,EACT,KAAA,EAAO,UAAA;AAAA;AAAA,EACP,KAAA,EAAO;AAAA;AACT,CAAA;AACA,IAAM,KAAA,GAAQ,SAAA;AAEd,SAAS,cAAc,KAAA,EAAuB;AAC5C,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAK,CAAA,IAAK,EAAA;AACrC,EAAA,OAAO,QAAQ,CAAA,EAAG,KAAK,GAAG,KAAK,CAAA,EAAG,KAAK,CAAA,CAAA,GAAK,KAAA;AAC9C;AAEA,SAAS,UAAA,CAAW,MAA+B,MAAA,EAAyB;AAC1E,EAAA,OAAO,MAAA,CAAO,QAAQ,IAAI,CAAA,CACvB,OAAO,CAAC,GAAG,KAAK,CAAA,KAAM,UAAU,MAAA,IAAa,KAAA,KAAU,IAAI,CAAA,CAC3D,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACrB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,SAAA,GAAYC,aAAQ,KAAA,EAAO,EAAE,OAAO,CAAA,EAAG,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,CAAA;AACrE,MAAA,OAAO;AAAA,EAAA,EAAO,GAAG,KAAK,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO;AAAA,EAAA,EAAO,GAAG,KAAK,KAAK,CAAA,CAAA;AAAA,EAC7B,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACZ;AAEO,SAAS,aAAA,CAAc,GAAA,EAA8B,MAAA,GAAS,EAAA,EAA6B;AAChG,EAAA,MAAM,SAAkC,EAAC;AAEzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,MAAM,SAAS,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AAE7C,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,EAAE,KAAA,YAAiB,KAAA,CAAA,EAAQ;AACrG,MAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,aAAA,CAAc,KAAA,EAAkC,MAAM,CAAC,CAAA;AAAA,IAC/E,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,MAAM,CAAA,GAAI,KAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,kBAAkB,KAAA,EAAwB;AACxD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACrE,MAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW;AAC3D,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,CAAA,CAAA,EAAI,KAAK,SAAA,CAAU,KAAK,EAAE,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,EACvD;AAEA,EAAA,OAAO,CAAA,CAAA,EAAI,KAAK,SAAA,CAAU,KAAK,EAAE,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA,CAAA;AACvD;AAEO,SAAS,aAAa,IAAA,EAAuC;AAClE,EAAA,MAAM,SAAA,GAAY,cAAc,IAAI,CAAA;AAEpC,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CAC5B,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAA,IAAa,UAAU,IAAI,CAAA,CAC3D,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,iBAAA,CAAkB,KAAK,CAAC,CAAA,CAAE,CAAA,CAC1D,KAAK,GAAG,CAAA;AACb;AAEA,SAAS,gBAAgD,KAAA,EAA8C;AACrG,EAAA,OAAOC,cAAA,CAAO,CAAC,IAAA,KAAS;AACtB,IAAA,MAAM,YAAA,GAAe,MAAM,QAAA,EAAS;AACpC,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAG,YAAA,EAAa;AAAA,IACpC;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA,EAAE;AACL;AAEA,SAAS,kBAAkB,OAAA,EAA8C;AACvE,EAAA,OAAOA,cAAA,CAAO,CAAC,IAAA,KAAS;AACtB,IAAA,OAAO,WAAA,CAAY,MAAM,OAAO,CAAA;AAAA,EAClC,CAAC,CAAA,EAAE;AACL;AAEO,SAAS,kBAAA,CACd,YAAA,EACA,KAAA,EACA,KAAA,EACgB;AAEhB,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,IAAU,YAAA,KAAiB,MAAA,EAAW;AAChD,IAAA,OAAOA,cAAA,CAAO,CAAC,IAAA,KAAS,IAAI,CAAA,EAAE;AAAA,EAChC;AAEA,EAAA,OAAOA,cAAA,CAAO,CAAC,IAAA,KAAS;AACtB,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA;AACtB,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,MAAM,YAAA,GAAe,MAAM,QAAA,EAAS;AAGpC,IAAA,MAAM,YAAA,GAAe,KAAA,EAAO,IAAA,CAAK,CAAC,IAAA,KAAS,eAAe,YAAA,EAAc,OAAA,EAAS,IAAA,CAAK,KAAK,CAAC,CAAA;AAG5F,IAAA,MAAM,cAAA,GAAiB,YAAA,EAAc,KAAA,IAAS,YAAA,IAAgB,OAAA;AAG9D,IAAA,IAAI,cAAA,KAAmB,OAAO,OAAO,KAAA;AAGrC,IAAA,OAAO,WAAW,QAAQ,CAAA,IAAK,UAAA,CAAW,cAAc,IAAI,IAAA,GAAO,KAAA;AAAA,EACrE,CAAC,CAAA,EAAE;AACL;AAEO,SAAS,kBAAkD,KAAA,EAA8C;AAC9G,EAAA,OAAOA,cAAA,CAAO,OAAA;AAAA,IACZA,cAAA,CAAO,MAAA,CAAO,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,IAC7BA,eAAO,SAAA,EAAU;AAAA,IACjB,gBAAgB,KAAK,CAAA;AAAA,IACrB,iBAAA,EAAkB;AAAA,IAClBA,cAAA,CAAO,MAAA,CAAO,CAAC,EAAE,SAAA,EAAW,OAAO,OAAA,EAAS,OAAA,EAAS,GAAG,IAAA,EAAK,KAAM;AACjE,MAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,IAAA,EAAM,IAAI,CAAA;AAC3C,MAAA,MAAM,YAAA,GAAe,cAAc,KAAK,CAAA;AACxC,MAAA,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,EAAA,EAAK,YAAY,CAAA,EAAA,EAAK,WAAW,eAAe,CAAA,EAAA,EAAK,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA;AAAA,IAClG,CAAC;AAAA,GACH;AACF;AAEO,SAAS,iBAAiD,KAAA,EAA8C;AAC7G,EAAA,OAAOA,cAAA,CAAO,OAAA;AAAA,IACZA,cAAA,CAAO,MAAA,CAAO,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,IAC7BA,eAAO,SAAA,EAAU;AAAA,IACjB,gBAAgB,KAAK,CAAA;AAAA,IACrB,iBAAA,EAAkB;AAAA,IAClBA,eAAO,IAAA;AAAK,GACd;AACF;AAEO,SAAS,mBAAmD,KAAA,EAA8C;AAC/G,EAAA,OAAOA,cAAA,CAAO,OAAA;AAAA,IACZA,cAAA,CAAO,MAAA,CAAO,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,IAC7BA,eAAO,SAAA,EAAU;AAAA,IACjB,gBAAgB,KAAK,CAAA;AAAA,IACrB,iBAAA,EAAkB;AAAA,IAClBA,cAAA,CAAO,MAAA,CAAO,CAAC,EAAE,SAAA,EAAW,OAAO,OAAA,EAAS,OAAA,EAAS,GAAG,IAAA,EAAK,KAAM;AACjE,MAAA,MAAM,IAAA,GAAgC;AAAA,QACpC,KAAA;AAAA,QACA,GAAA,EAAK,OAAA;AAAA,QACL,SAAS,OAAA,IAAW,eAAA;AAAA,QACpB,EAAA,EAAI,SAAA;AAAA,QACJ,GAAG;AAAA,OACL;AACA,MAAA,OAAO,aAAa,IAAI,CAAA;AAAA,IAC1B,CAAC;AAAA,GACH;AACF;AAEO,SAAS,mBAAmD,KAAA,EAA8C;AAC/G,EAAA,OAAOA,cAAA,CAAO,OAAA;AAAA,IACZA,cAAA,CAAO,MAAA,CAAO,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,IAC7BA,eAAO,SAAA,EAAU;AAAA,IACjB,gBAAgB,KAAK,CAAA;AAAA,IACrB,iBAAA,EAAkB;AAAA,IAClBA,eAAO,MAAA,CAAO,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,SAAQ,KAAM;AAC/C,MAAA,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,EAAA,EAAK,KAAK,KAAK,OAAO,CAAA,CAAA;AAAA,IAC5C,CAAC;AAAA,GACH;AACF;AAEO,SAAS,YAAA,CAA6C,WAAsB,KAAA,EAA8C;AAC/H,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAK,OAAA;AACH,MAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC,KAAK,MAAA;AACH,MAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,IAC/B,KAAK,QAAA;AACH,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC,KAAK,QAAA;AACH,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA;AAErC;;;ACtLO,IAAM,gBAAN,MAAoB;AAAA,EAMzB,YAAoB,OAAA,EAAwB;AAAxB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAAyB;AAAA,EALrC,QAA2B,EAAC;AAAA,EAC5B,KAAA,GAA+B,IAAA;AAAA,EAC/B,QAAA,GAAW,KAAA;AAAA,EACX,MAAA,GAAS,KAAA;AAAA,EAIjB,IAAI,OAAA,EAAgC;AAClC,IAAA,IAAI,KAAK,MAAA,EAAQ;AAEjB,IAAA,IAAA,CAAK,KAAA,CAAM,KAAK,OAAO,CAAA;AAEvB,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,MAAA,IAAU,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC/C,MAAA,KAAK,KAAK,KAAA,EAAM;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,aAAA,EAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAE9C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,UAAA,EAAW;AAEhB,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG,IAAA,CAAK,QAAQ,SAAS,CAAA;AAE5D,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,cAAc,QAAQ,CAAA;AAAA,IACnC,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAA,GAAU,KAAA,EAAgB,QAAQ,CAAA;AAAA,IACjD,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAGhB,MAAA,IAAI,KAAK,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,CAAC,KAAK,MAAA,EAAQ;AACzC,QAAA,KAAK,KAAK,KAAA,EAAM;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,UAAA,EAAW;AAGhB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,MAAM,KAAK,KAAA,EAAM;AAAA,IACnB;AAAA,EACF;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,IAAI,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,MAAA,EAAQ;AAE/B,IAAA,IAAA,CAAK,KAAA,GAAQ,WAAW,MAAM;AAC5B,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,MAAA,KAAK,KAAK,KAAA,EAAM;AAAA,IAClB,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,aAAa,CAAA;AAAA,EAC/B;AAAA,EAEQ,UAAA,GAAmB;AACzB,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AACvB,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAc,cAAc,QAAA,EAA4C;AACtE,IAAA,IAAI,SAAA,GAA0B,IAAA;AAE9B,IAAA,KAAA,IAAS,UAAU,CAAA,EAAG,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,YAAY,OAAA,EAAA,EAAW;AAClE,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA;AACnC,QAAA;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,SAAA,GAAY,KAAA;AAEZ,QAAA,IAAI,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,UAAA,GAAa,CAAA,EAAG;AACzC,UAAA,MAAM,IAAA,CAAK,MAAM,IAAA,CAAK,OAAA,CAAQ,aAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,SAAA;AAAA,EACR;AAAA,EAEQ,MAAM,EAAA,EAA2B;AACvC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,EACzD;AACF;;;AClGA,IAAM,eAAA,GAAkB;AAAA,EACtB,SAAA,EAAW,EAAA;AAAA,EACX,aAAA,EAAe,GAAA;AAAA,EACf,UAAA,EAAY,CAAA;AAAA,EACZ,UAAA,EAAY;AACd,CAAA;AAEO,IAAe,iBAAA,GAAf,cAAyCC,gCAAA,CAAgB;AAAA,EACpD,MAAA;AAAA,EAEV,WAAA,CAAY,IAAA,GAAiC,EAAC,EAAG;AAC/C,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,aAAA,CAAc;AAAA,MAC9B,SAAA,EAAW,IAAA,CAAK,SAAA,IAAa,eAAA,CAAgB,SAAA;AAAA,MAC7C,aAAA,EAAe,IAAA,CAAK,aAAA,IAAiB,eAAA,CAAgB,aAAA;AAAA,MACrD,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc,eAAA,CAAgB,UAAA;AAAA,MAC/C,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc,eAAA,CAAgB,UAAA;AAAA,MAC/C,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAAA,MACjC,OAAA,EAAS,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI;AAAA,KACpC,CAAA;AAAA,EACH;AAAA,EAEA,GAAA,CAAI,MAA+B,QAAA,EAA4B;AAC7D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,gBAAA,CAAiB,IAAI,CAAA;AAC1C,IAAA,IAAA,CAAK,MAAA,CAAO,IAAI,OAAO,CAAA;AACvB,IAAA,QAAA,EAAS;AAAA,EACX;AAAA,EAEA,KAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,EAC3B;AAAA,EAEU,iBAAiB,IAAA,EAAgD;AACzE,IAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,WAAW,OAAA,EAAS,GAAG,MAAK,GAAI,IAAA;AAExD,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,OAAA,EAAS,OAAO,OAAO,CAAA;AAAA,MACvB,SAAA,EAAW,YAAY,IAAI,IAAA,CAAK,OAAO,SAAS,CAAC,CAAA,mBAAI,IAAI,IAAA,EAAK;AAAA,MAC9D,OAAA;AAAA,MACA,MAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,GAAS,IAAI,IAAA,GAAO;AAAA,KAC9C;AAAA,EACF;AAAA,EAEU,WAAA,CAAY,OAAc,QAAA,EAAmC;AAErE,IAAA,OAAA,CAAQ,KAAA;AAAA,MACN,IAAI,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,iBAAA,EAAoB,SAAS,MAAM,CAAA,UAAA,CAAA;AAAA,MAC5D,KAAA,CAAM;AAAA,KACR;AAGA,IAAA,IAAA,CAAK,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EAC1B;AAGF;;;AChEA,IAAM,oBAAA,GAAiD;AAAA,EACrD,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,OAAA;AAAA,EACN,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,QAAA;AAAA,EACT,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAgBO,IAAM,gBAAA,GAAN,cAA+B,iBAAA,CAAkB;AAAA,EAC9C,MAAA;AAAA,EAER,YAAY,MAAA,EAAuB;AACjC,IAAA,KAAA,CAAM;AAAA,MACJ,SAAA,EAAW,OAAO,SAAA,IAAa,EAAA;AAAA,MAC/B,aAAA,EAAe,OAAO,aAAA,IAAiB,GAAA;AAAA,MACvC,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,YAAY,MAAA,CAAO;AAAA,KACpB,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,MAAgB,UAAU,QAAA,EAA4C;AAEpE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,EAAE,CAAA;AAE3C,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,OAAA,GAAiC;AAAA,QACrC,QAAA,EAAU,KAAK,MAAA,CAAO,QAAA;AAAA,QACtB,UAAA,EAAY,KAAK,MAAA,CAAO,SAAA;AAAA,QACxB,MAAA,EAAQ,MAAM,GAAA,CAAI,CAAC,QAAQ,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC;AAAA,OAClD;AAEA,MAAA,MAAM,IAAA,CAAK,YAAY,OAAO,CAAA;AAAA,IAChC;AAAA,EACF;AAAA,EAEQ,YAAY,GAAA,EAAoC;AACtD,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,WAAA,GAAc,IAAI,KAAK,CAAA,IAAK,oBAAA,CAAqB,GAAA,CAAI,KAAK,CAAA;AAEpF,IAAA,MAAM,KAAA,GAAsB;AAAA,MAC1B,KAAA,EAAO,IAAI,GAAA,CAAI,KAAA,CAAM,aAAa,CAAA,EAAA,EAAK,GAAA,CAAI,OAAA,IAAW,KAAK,CAAA,CAAA;AAAA,MAC3D,WAAA,EAAa,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,GAAG,IAAI,CAAA;AAAA;AAAA,MACtC;AAAA,KACF;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,gBAAA,KAAqB,KAAA,EAAO;AAC1C,MAAA,KAAA,CAAM,SAAA,GAAY,GAAA,CAAI,SAAA,CAAU,WAAA,EAAY;AAAA,IAC9C;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,WAAA,KAAgB,KAAA,IAAS,IAAI,IAAA,EAAM;AACjD,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AAAA,IAC3C;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,aACN,IAAA,EAC0D;AAC1D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,cAAA,IAAkB,EAAA;AAChD,IAAA,MAAM,SAAmE,EAAC;AAE1E,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC/C,MAAA,IAAI,MAAA,CAAO,UAAU,SAAA,EAAW;AAEhC,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,QAAA,GAAW,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAI,CAAA,GAAI,OAAA;AAAA,MAC3E,CAAA,MAAO;AACL,QAAA,QAAA,GAAW,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,GAAG,IAAI,CAAA;AAAA,MACxC;AAEA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAAA,QACtB,KAAA,EAAO,QAAA;AAAA,QACP,QAAQ,OAAO,KAAA,KAAU,YAAY,MAAA,CAAO,KAAK,EAAE,MAAA,GAAS;AAAA,OAC7D,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAc,YAAY,OAAA,EAA+C;AACvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,OAAO,UAAA,EAAY;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,SAAS,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAAA,IACtE;AAAA,EACF;AAAA,EAEQ,UAAA,CAAc,OAAY,IAAA,EAAqB;AACrD,IAAA,MAAM,SAAgB,EAAC;AACvB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,IAAA,EAAM;AAC3C,MAAA,MAAA,CAAO,KAAK,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACvHA,IAAM,WAAA,GAAwC;AAAA,EAC5C,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,WAAA;AAAA,EACP,IAAA,EAAM,WAAA;AAAA,EACN,IAAA,EAAM,WAAA;AAAA,EACN,IAAA,EAAM,WAAA;AAAA,EACN,OAAA,EAAS,WAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAEO,IAAM,iBAAA,GAAN,cAAgC,iBAAA,CAAkB;AAAA,EAC/C,MAAA;AAAA,EACA,MAAA;AAAA,EAER,YAAY,MAAA,EAAwB;AAClC,IAAA,KAAA,CAAM;AAAA,MACJ,SAAA,EAAW,OAAO,SAAA,IAAa,EAAA;AAAA,MAC/B,aAAA,EAAe,OAAO,aAAA,IAAiB,GAAA;AAAA,MACvC,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,YAAY,MAAA,CAAO;AAAA,KACpB,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA,4BAAA,EAA+B,MAAA,CAAO,QAAQ,CAAA,CAAA;AAAA,EAC9D;AAAA,EAEA,MAAgB,UAAU,QAAA,EAA4C;AACpE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,kBAAA,CAAmB,QAAQ,CAAA;AAC7C,IAAA,MAAM,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,QAAQ,CAAA;AAAA,EACvC;AAAA,EAEQ,mBAAmB,QAAA,EAAqC;AAC9D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,UAAA;AAE3C,IAAA,OAAO,QAAA,CACJ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,MAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,QAAA,OAAO,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,MAC5B;AACA,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,EAAK,SAAA,KAAc,YAAY,CAAA;AAAA,IAC5D,CAAC,CAAA,CACA,IAAA,CAAK,aAAa,CAAA;AAAA,EACvB;AAAA,EAEQ,cAAA,CAAe,KAAsB,EAAA,EAAqB;AAChE,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS,KAAK,IAAA,CAAK,gBAAA,CAAiB,KAAK,IAAI,CAAA,GAAI,CAAC,CAAA,KAAc,CAAA;AAEtE,IAAA,IAAI,IAAA,GAAO,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,GAAA,CAAI,KAAA,CAAM,WAAA,EAAa,CAAA,KAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,OAAA,IAAW,KAAK,CAAC,CAAA;AAAA,CAAA;AACnF,IAAA,IAAA,IAAQ,MAAA,CAAO,IAAI,OAAO,CAAA;AAE1B,IAAA,IAAI,GAAA,CAAI,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChD,MAAA,MAAM,UAAU,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,MAAM,CAAC,CAAA;AAChD,MAAA,IAAA,IAAQ,gBAAgB,OAAA,GAAU,OAAA;AAAA,IACpC;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,WAAW,GAAA,EAA8B;AAC/C,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA;AAEnC,IAAA,IAAI,IAAA,GAAO,CAAA,EAAG,KAAK,CAAA,IAAA,EAAO,IAAI,KAAA,CAAM,WAAA,EAAa,CAAA,MAAA,EAAS,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,OAAA,IAAW,KAAK,CAAC,CAAA;AAAA,CAAA;AAC/F,IAAA,IAAA,IAAQ,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AAEnC,IAAA,IAAI,GAAA,CAAI,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChD,MAAA,MAAM,UAAU,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,MAAM,CAAC,CAAA;AAChD,MAAA,IAAA,IAAQ,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,GAAI,QAAA;AAAA,IACjD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,WAAW,QAAA,EAAsC;AACvD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,mBAAA,KAAwB,MAAA,EAAW;AACjD,MAAA,OAAO,KAAK,MAAA,CAAO,mBAAA;AAAA,IACrB;AAEA,IAAA,OAAO,CAAC,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,OAAO,CAAA;AAAA,EAClD;AAAA,EAEA,MAAc,WAAA,CAAY,IAAA,EAAc,QAAA,EAA4C;AAClF,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,OAAA,EAAS,KAAK,MAAA,CAAO,MAAA;AAAA,MACrB,IAAA;AAAA,MACA,UAAA,EAAY,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,UAAA;AAAA,MACrC,oBAAA,EAAsB,IAAA,CAAK,UAAA,CAAW,QAAQ;AAAA,KAChD;AAEA,IAAA,IAAI,IAAA,CAAK,OAAO,QAAA,EAAU;AACxB,MAAA,IAAA,CAAK,iBAAA,GAAoB,KAAK,MAAA,CAAO,QAAA;AAAA,IACvC;AAEA,IAAA,IAAI,IAAA,CAAK,OAAO,gBAAA,EAAkB;AAChC,MAAA,IAAA,CAAK,mBAAA,GAAsB,KAAK,MAAA,CAAO,gBAAA;AAAA,IACzC;AAEA,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,YAAA,CAAA,EAAgB;AAAA,MACzD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAK;AACnC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,QAAA,CAAS,MAAM,IAAI,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,IACrF;AAAA,EACF;AAAA,EAEQ,iBAAiB,IAAA,EAAsB;AAC7C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,yBAAA,EAA2B,MAAM,CAAA;AAAA,EACvD;AAAA,EAEQ,WAAW,IAAA,EAAsB;AACvC,IAAA,MAAM,QAAA,GAAmC;AAAA,MACvC,GAAA,EAAK,OAAA;AAAA,MACL,GAAA,EAAK,MAAA;AAAA,MACL,GAAA,EAAK,MAAA;AAAA,MACL,GAAA,EAAK,QAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AACA,IAAA,OAAO,IAAA,CAAK,QAAQ,UAAA,EAAY,CAAC,MAAM,QAAA,CAAS,CAAC,KAAK,CAAC,CAAA;AAAA,EACzD;AACF;ACnHO,IAAM,mBAAA,GAAN,cAAkC,iBAAA,CAAkB;AAAA,EACjD,MAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,WAAA,GAAoC,IAAA;AAAA,EAE5C,YAAY,MAAA,EAA0B;AACpC,IAAA,KAAA,CAAM;AAAA,MACJ,SAAA,EAAW,OAAO,SAAA,IAAa,GAAA;AAAA,MAC/B,aAAA,EAAe,OAAO,aAAA,IAAiB,GAAA;AAAA,MACvC,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,YAAY,MAAA,CAAO;AAAA,KACpB,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAEd,IAAA,IAAA,CAAK,MAAA,GAAS,IAAIC,yCAAA,CAAqB;AAAA,MACrC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,WAAA,EAAa;AAAA,QACX,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,iBAAiB,MAAA,CAAO;AAAA;AAC1B,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAgB,UAAU,QAAA,EAA4C;AACpE,IAAA,MAAM,KAAK,iBAAA,EAAkB;AAE7B,IAAA,MAAM,SAAA,GAA6B,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MACxD,SAAA,EAAW,GAAA,CAAI,SAAA,CAAU,OAAA,EAAQ;AAAA,MACjC,OAAA,EAAS,KAAK,SAAA,CAAU;AAAA,QACtB,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,GAAG,GAAA,CAAI;AAAA,OACR;AAAA,KACH,CAAE,CAAA;AAGF,IAAA,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,SAAA,IAAa,CAAA,KAAM,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,CAAA;AAEhE,IAAA,MAAM,OAAA,GAAU,IAAIC,wCAAA,CAAoB;AAAA,MACtC,YAAA,EAAc,KAAK,MAAA,CAAO,YAAA;AAAA,MAC1B,aAAA,EAAe,KAAK,MAAA,CAAO,aAAA;AAAA,MAC3B,SAAA;AAAA,MACA,eAAe,IAAA,CAAK;AAAA,KACrB,CAAA;AAED,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,CAAA;AAC/C,MAAA,IAAA,CAAK,gBAAgB,QAAA,CAAS,iBAAA;AAAA,IAChC,SAAS,KAAA,EAAgB;AAEvB,MAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,KAAK,CAAA,EAAG;AAC3C,QAAA,MAAM,KAAK,kBAAA,EAAmB;AAC9B,QAAA,MAAM,YAAA,GAAe,IAAIA,wCAAA,CAAoB;AAAA,UAC3C,YAAA,EAAc,KAAK,MAAA,CAAO,YAAA;AAAA,UAC1B,aAAA,EAAe,KAAK,MAAA,CAAO,aAAA;AAAA,UAC3B,SAAA;AAAA,UACA,eAAe,IAAA,CAAK;AAAA,SACrB,CAAA;AACD,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,YAAY,CAAA;AACpD,QAAA,IAAA,CAAK,gBAAgB,QAAA,CAAS,iBAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,iBAAA,GAAmC;AAC/C,IAAA,IAAI,KAAK,WAAA,EAAa;AAEtB,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,IAAA,CAAK,WAAA,GAAc,KAAK,UAAA,EAAW;AAAA,IACrC;AAEA,IAAA,MAAM,IAAA,CAAK,WAAA;AAAA,EACb;AAAA,EAEA,MAAc,UAAA,GAA4B;AACxC,IAAA,IAAI,IAAA,CAAK,OAAO,cAAA,EAAgB;AAC9B,MAAA,MAAM,KAAK,yBAAA,EAA0B;AAAA,IACvC;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,eAAA,KAAoB,KAAA,EAAO;AACzC,MAAA,MAAM,KAAK,0BAAA,EAA2B;AAAA,IACxC;AAEA,IAAA,MAAM,KAAK,kBAAA,EAAmB;AAC9B,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AAAA,EAEA,MAAc,yBAAA,GAA2C;AACvD,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,MAAA,CAAO,IAAA;AAAA,QAChB,IAAIC,0CAAA,CAAsB;AAAA,UACxB,YAAA,EAAc,KAAK,MAAA,CAAO;AAAA,SAC3B;AAAA,OACH;AAAA,IACF,SAAS,KAAA,EAAgB;AACvB,MAAA,IAAI,CAAC,IAAA,CAAK,4BAAA,CAA6B,KAAK,CAAA,EAAG;AAC7C,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,0BAAA,GAA4C;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,MAAA,CAAO,IAAA;AAAA,QAChB,IAAIC,2CAAA,CAAuB;AAAA,UACzB,YAAA,EAAc,KAAK,MAAA,CAAO,YAAA;AAAA,UAC1B,aAAA,EAAe,KAAK,MAAA,CAAO;AAAA,SAC5B;AAAA,OACH;AAAA,IACF,SAAS,KAAA,EAAgB;AACvB,MAAA,IAAI,CAAC,IAAA,CAAK,4BAAA,CAA6B,KAAK,CAAA,EAAG;AAC7C,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,kBAAA,GAAoC;AAChD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,MACjC,IAAIC,8CAAA,CAA0B;AAAA,QAC5B,YAAA,EAAc,KAAK,MAAA,CAAO,YAAA;AAAA,QAC1B,mBAAA,EAAqB,KAAK,MAAA,CAAO,aAAA;AAAA,QACjC,KAAA,EAAO;AAAA,OACR;AAAA,KACH;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,UAAA,EAAY,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,aAAA,KAAkB,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AAC7F,IAAA,IAAA,CAAK,gBAAgB,MAAA,EAAQ,mBAAA;AAAA,EAC/B;AAAA,EAEQ,6BAA6B,KAAA,EAAyB;AAC5D,IAAA,OACE,OAAO,UAAU,QAAA,IACjB,KAAA,KAAU,QACV,MAAA,IAAU,KAAA,IACV,MAAM,IAAA,KAAS,gCAAA;AAAA,EAEnB;AAAA,EAEQ,4BAA4B,KAAA,EAAyB;AAC3D,IAAA,OACE,OAAO,UAAU,QAAA,IACjB,KAAA,KAAU,QACV,MAAA,IAAU,KAAA,IACV,MAAM,IAAA,KAAS,+BAAA;AAAA,EAEnB;AACF;;;ACvJA,SAAS,QAAW,KAAA,EAAiC;AACnD,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,OAAO,MAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AAC9C;AAEO,SAAS,gBAAA,CACd,QACA,KAAA,EACa;AACb,EAAA,MAAM,MAAA,GAAsB;AAAA,IAC1B,IAAIC,mBAAW,OAAA,CAAQ;AAAA,MACrB,QAAQP,cAAAA,CAAO,OAAA;AAAA,QACb,mBAAmB,MAAA,CAAO,OAAA,CAAQ,OAAO,MAAA,CAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,QACpE,YAAA,CAAa,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAQ,KAAK;AAAA;AAC3C,KACD;AAAA,GACH;AAEA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,IAAIQ,gCAAA,CAAgB;AAAA,QAClB,QAAQR,cAAAA,CAAO,OAAA;AAAA,UACb,mBAAmB,MAAA,CAAO,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,UAC9D,YAAA,CAAa,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,KAAK;AAAA,SACxC;AAAA,QACA,OAAA,EAAS,OAAO,IAAA,CAAK,OAAA;AAAA,QACrB,QAAA,EAAU,OAAO,IAAA,CAAK,QAAA;AAAA,QACtB,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,WAAA,IAAe,YAAA;AAAA,QACxC,aAAA,EAAe,MAAA,CAAO,IAAA,CAAK,aAAA,IAAiB,KAAA;AAAA,QAC5C,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,OAAA,IAAW,KAAA;AAAA,QAChC,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAA,IAAY;AAAA,OACnC;AAAA,KACH;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,aAAA,IAAiB,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,EAAG;AACnD,IAAA,MAAM,OAAA,GAAU,IAAI,gBAAA,CAAiB,aAAa,CAAA;AAClD,IAAA,OAAA,CAAQ,SAASA,cAAAA,CAAO,OAAA;AAAA,MACtB,kBAAA,CAAmB,aAAA,CAAc,KAAA,EAAO,aAAA,CAAc,OAAO,KAAK,CAAA;AAAA,MAClEA,eAAO,SAAA;AAAU,KACnB;AACA,IAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AAAA,EACrB;AAEA,EAAA,KAAA,MAAW,cAAA,IAAkB,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,EAAG;AACrD,IAAA,MAAM,QAAA,GAAW,IAAI,iBAAA,CAAkB,cAAc,CAAA;AACrD,IAAA,QAAA,CAAS,SAASA,cAAAA,CAAO,OAAA;AAAA,MACvB,kBAAA,CAAmB,cAAA,CAAe,KAAA,EAAO,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,MACpEA,eAAO,SAAA;AAAU,KACnB;AACA,IAAA,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,EACtB;AAEA,EAAA,KAAA,MAAW,gBAAA,IAAoB,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,EAAG;AACzD,IAAA,MAAM,UAAA,GAAa,IAAI,mBAAA,CAAoB,gBAAgB,CAAA;AAC3D,IAAA,UAAA,CAAW,SAASA,cAAAA,CAAO,OAAA;AAAA,MACzB,kBAAA,CAAmB,gBAAA,CAAiB,KAAA,EAAO,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAAA,MACxEA,eAAO,SAAA;AAAU,KACnB;AACA,IAAA,MAAA,CAAO,KAAK,UAAU,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,uBAAA,CACd,QACA,KAAA,EACa;AACb,EAAA,MAAM,MAAA,GAAsB;AAAA,IAC1B,IAAIO,mBAAW,OAAA,CAAQ;AAAA,MACrB,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,OAAA,CAAQ,QAAQ,KAAK;AAAA,KAClD;AAAA,GACH;AAEA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,IAAIC,gCAAA,CAAgB;AAAA,QAClB,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,QAC9C,OAAA,EAAS,OAAO,IAAA,CAAK,OAAA;AAAA,QACrB,QAAA,EAAU,CAAA,WAAA,EAAc,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,QAC5C,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,WAAA,IAAe,YAAA;AAAA,QACxC,aAAA,EAAe,MAAA,CAAO,IAAA,CAAK,aAAA,IAAiB,KAAA;AAAA,QAC5C,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,OAAA,IAAW,KAAA;AAAA,QAChC,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAA,IAAY;AAAA,OACnC;AAAA,KACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;AClFA,SAAS,iBAAiB,KAAA,EAAuF;AAC/G,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,OAAO,EAAE,YAAA,EAAc,KAAA,EAAO,KAAA,EAAO,EAAC,EAAE;AAAA,EAC1C;AAEA,EAAA,cAAA,CAAe,MAAM,OAAO,CAAA;AAC5B,EAAA,MAAM,SAAyC,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,KAAS;AAC9E,IAAA,cAAA,CAAe,KAAK,KAAK,CAAA;AACzB,IAAA,OAAO,EAAE,OAAO,IAAA,CAAK,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA,EAAO,UAAU,IAAA,EAAK;AAAA,EAChE,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,YAAA,EAAc,KAAA,CAAM,OAAA,EAAS,KAAA,EAAM;AAC9C;AAEO,SAAS,WAAA,CACd,QACA,KAAA,EACuB;AACvB,EAAA,MAAM,EAAE,YAAA,EAAc,KAAA,EAAM,GAAI,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAE7D,EAAA,MAAM,WAAA,GAAc,KAAA,IAAS,IAAI,WAAA,EAAsB;AACvD,EAAA,MAAM,iBAAA,GAAoB,uBAAA,CAAwB,MAAA,EAAQ,WAAW,CAAA;AAErE,EAAA,MAAMC,YAAUC,oBAAA,CAAa;AAAA,IAC3B,KAAA,EAAO,OAAA;AAAA;AAAA,IACP,UAAA,EAAY,gBAAA,CAAiB,MAAA,EAAQ,WAAW,CAAA;AAAA,IAChD,iBAAA;AAAA,IACA,iBAAA,EAAmB,iBAAA;AAAA,IACnB,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAqC;AAChE,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA;AACrC,IAAA,cAAA,CAAe,GAAA,CAAI,KAAK,IAA+B,CAAA;AAAA,EACzD;AAEA,EAAA,OAAO;AAAA,aACLD,SAAA;AAAA,IACA,KAAA,EAAO,WAAA;AAAA,IACP,YAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,SAAA,CACd,KAAA,EACA,KAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,KAAA,EAAO,OAAO,CAAA;AACvD,EAAA,OAAO,UAAA,CAAW,KAAK,CAAA,IAAK,UAAA,CAAW,cAAc,CAAA;AACvD;AAEA,SAAS,iBAAA,CACP,OACA,aAAA,EACU;AACV,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,KAAA,CAAM,QAAA,EAAS;AAE1C,EAAA,KAAA,MAAW,EAAE,KAAA,EAAO,KAAA,MAAW,KAAA,CAAM,cAAA,CAAe,QAAO,EAAG;AAC5D,IAAA,IAAI,cAAA,CAAe,YAAA,EAAc,aAAA,EAAe,KAAK,CAAA,EAAG;AACtD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,YAAA;AACf;AAEO,SAAS,cAAA,CACd,YAAA,EACA,aAAA,EACA,KAAA,EACS;AACT,EAAA,MAAM,QAAA,GAAoC,EAAE,GAAG,YAAA,EAAc,SAAS,aAAA,EAAc;AACpF,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,QAAA,CAAS,GAAG,MAAM,KAAK,CAAA;AAC9E;AC/EO,IAAM,cAAA,GAAsCE,MAAE,IAAA,CAAK;AAAA,EACxD,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,eAAA,GAAwCA,MAAE,IAAA,CAAK,CAAC,QAAQ,OAAA,EAAS,QAAA,EAAU,QAAQ,CAAC;AAG1F,IAAM,eAAA,GAAwCA,MAAE,MAAA,CAAO;AAAA,EAC5D,KAAA,EAAOA,MAAE,MAAA,CAAOA,KAAA,CAAE,QAAO,EAAGA,KAAA,CAAE,SAAS,CAAA;AAAA,EACvC,KAAA,EAAO;AACT,CAAC;AAGM,IAAM,mBAAA,GAAgDA,MAAE,MAAA,CAAO;AAAA,EACpE,MAAA,EAAQ,eAAA;AAAA,EACR,KAAA,EAAO,eAAe,QAAA,EAAS;AAAA,EAC/B,KAAA,EAAOA,KAAA,CAAE,KAAA,CAAM,eAAe,EAAE,QAAA;AAClC,CAAC;AAGM,IAAM,gBAAA,GAA0CA,MAAE,MAAA,CAAO;AAAA,EAC9D,MAAA,EAAQ,eAAA;AAAA,EACR,KAAA,EAAO,eAAe,QAAA,EAAS;AAAA,EAC/B,KAAA,EAAOA,KAAA,CAAE,KAAA,CAAM,eAAe,EAAE,QAAA,EAAS;AAAA,EACzC,SAASA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,qBAAqB,CAAA;AAAA,EAChD,UAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,sBAAsB,CAAA;AAAA,EAClD,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,aAAA,EAAeA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACpC,OAAA,EAASA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACvB,CAAC;AAGM,IAAM,6BAAA,GAAoEA,MAAE,MAAA,CAAO;AAAA,EACxF,KAAA,EAAO,eAAe,QAAA,EAAS;AAAA,EAC/B,KAAA,EAAOA,KAAA,CAAE,KAAA,CAAM,eAAe,EAAE,QAAA,EAAS;AAAA,EACzC,SAAA,EAAWA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAChD,aAAA,EAAeA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpD,UAAA,EAAYA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACpD,UAAA,EAAYA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA;AAC1C,CAAC;AAGM,IAAM,mBAAA,GAAgDA,MAAE,MAAA,CAAO;AAAA,EACpE,KAAA,EAAO,eAAe,QAAA,EAAS;AAAA,EAC/B,KAAA,EAAOA,KAAA,CAAE,KAAA,CAAM,eAAe,EAAE,QAAA,EAAS;AAAA,EACzC,SAAA,EAAWA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAChD,aAAA,EAAeA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpD,UAAA,EAAYA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACpD,UAAA,EAAYA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACjD,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAI,gCAAgC,CAAA;AAAA,EAC3D,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,WAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACrC,WAAA,EAAaA,KAAA,CAAE,MAAA,CAAOA,KAAA,CAAE,MAAA,EAAO,EAAGA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAK,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7D,gBAAA,EAAkBA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACvC,WAAA,EAAaA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,cAAA,EAAgBA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA;AAClD,CAAC;AAGM,IAAM,oBAAA,GAAkDA,MAAE,MAAA,CAAO;AAAA,EACtE,KAAA,EAAO,eAAe,QAAA,EAAS;AAAA,EAC/B,KAAA,EAAOA,KAAA,CAAE,KAAA,CAAM,eAAe,EAAE,QAAA,EAAS;AAAA,EACzC,SAAA,EAAWA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAChD,aAAA,EAAeA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpD,UAAA,EAAYA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACpD,UAAA,EAAYA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACjD,UAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,sBAAsB,CAAA;AAAA,EAClD,MAAA,EAAQA,KAAA,CAAE,KAAA,CAAM,CAACA,KAAA,CAAE,QAAO,EAAGA,KAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACxC,SAAA,EAAWA,MAAE,IAAA,CAAK,CAAC,YAAY,YAAA,EAAc,MAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC/D,mBAAA,EAAqBA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC1C,UAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACpC,kBAAkBA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA;AACrC,CAAC;AAGM,IAAM,sBAAA,GAAsDA,MAAE,MAAA,CAAO;AAAA,EAC1E,KAAA,EAAO,eAAe,QAAA,EAAS;AAAA,EAC/B,KAAA,EAAOA,KAAA,CAAE,KAAA,CAAM,eAAe,EAAE,QAAA,EAAS;AAAA,EACzC,SAAA,EAAWA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAChD,aAAA,EAAeA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACpD,UAAA,EAAYA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EACpD,UAAA,EAAYA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACjD,cAAcA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,0BAA0B,CAAA;AAAA,EAC1D,eAAeA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,2BAA2B,CAAA;AAAA,EAC5D,QAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,oBAAoB,CAAA;AAAA,EAC9C,aAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,yBAAyB,CAAA;AAAA,EACxD,iBAAiBA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,6BAA6B,CAAA;AAAA,EAChE,cAAA,EAAgBA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACrC,eAAA,EAAiBA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC/B,CAAC;AAGM,IAAM,uBAAA,GAAwDA,MAAE,MAAA,CAAO;AAAA,EAC5E,OAAA,EAAS,cAAA;AAAA,EACT,KAAA,EAAOA,KAAA,CAAE,KAAA,CAAM,eAAe,EAAE,QAAA;AAClC,CAAC;AAGM,IAAM,iBAAA,GAA4CA,MAAE,KAAA,CAAM;AAAA,EAC/D,cAAA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,KAAA,EAAO,iBAAA;AAAA,EACP,OAAA,EAAS,mBAAA;AAAA,EACT,IAAA,EAAM,iBAAiB,QAAA,EAAS;AAAA,EAChC,OAAA,EAASA,KAAA,CAAE,KAAA,CAAM,CAAC,mBAAA,EAAqBA,KAAA,CAAE,KAAA,CAAM,mBAAmB,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC/E,QAAA,EAAUA,KAAA,CAAE,KAAA,CAAM,CAAC,oBAAA,EAAsBA,KAAA,CAAE,KAAA,CAAM,oBAAoB,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAClF,UAAA,EAAYA,KAAA,CAAE,KAAA,CAAM,CAAC,sBAAA,EAAwBA,KAAA,CAAE,KAAA,CAAM,sBAAsB,CAAC,CAAC,CAAA,CAAE,QAAA;AACjF,CAAC;AAGM,SAAS,eAAe,MAAA,EAAqD;AAClF,EAAA,OAAO,kBAAA,CAAmB,MAAM,MAAM,CAAA;AACxC;AAGO,SAAS,mBAAmB,MAAA,EAAiB;AAClD,EAAA,OAAO,kBAAA,CAAmB,UAAU,MAAM,CAAA;AAC5C;;;AC9IO,IAAM,MAAA,GAAN,MAAM,OAAA,CAAuD;AAAA,EAC1D,WAAA,CACE,OACA,OAAA,EACR;AAFQ,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EACP;AAAA,EAEH,OAAO,MAAA,CACL,MAAA,EACA,KAAA,EACkB;AAClB,IAAA,MAAM,eAAA,GAAkB,eAAe,MAAM,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,eAAA,EAAiC,KAAK,CAAA;AAChE,IAAA,OAAO,IAAI,OAAA,CAAO,KAAA,EAAO,KAAK,CAAA;AAAA,EAChC;AAAA,EAEA,IAAI,OAAA,EAAmC;AACrC,IAAA,OAAO,IAAI,OAAA,CAAO,IAAA,CAAK,KAAA,EAAO,OAAO,CAAA;AAAA,EACvC;AAAA;AAAA,EAIA,QAAA,GAAkC;AAChC,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA,EACpB;AAAA,EAEA,gBAAA,CAAiB,OAAqC,KAAA,EAAuB;AAC3E,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAChC,IAAA,IAAA,CAAK,MAAM,cAAA,CAAe,GAAA,CAAI,KAAK,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,EACrD;AAAA,EAEA,oBAAoB,KAAA,EAA8C;AAChE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAChC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,IAAI,GAAG,CAAA;AAClD,IAAA,IAAI,UAAU,QAAA,EAAU;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,MAAA,CAAO,GAAG,CAAA;AAAA,EAC7C;AAAA,EAEA,mBAAA,GAA4B;AAC1B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,CAAA,IAAK,IAAA,CAAK,MAAM,cAAA,EAAgB;AACvD,MAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACtB,QAAA,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,MAAA,CAAO,GAAG,CAAA;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAA,GAA+C;AAC7C,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,QAAQ,CAAA;AAAA,EACtD;AAAA;AAAA,EAIA,OAAA,CAAQ,IAAY,IAAA,EAAqB;AACvC,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,EAAA,EAAI,IAAI,CAAA;AAAA,EACrC;AAAA;AAAA,EAIA,KAAA,CAAM,OAAA,EAAiB,KAAA,EAAyB,IAAA,EAAmB;AACjE,IAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,OAAO,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA,EAAG;AACnD,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,KAAK,CAAA;AAAA,EACxC;AAAA,EAEA,IAAA,CAAK,SAAiB,IAAA,EAAmB;AACvC,IAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,OAAO,MAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AAClD,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,IAAA,CAAK,SAAiB,IAAA,EAAmB;AACvC,IAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,OAAO,MAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AAClD,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,IAAA,CAAK,SAAiB,IAAA,EAAmB;AACvC,IAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,OAAO,MAAA,EAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AAClD,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,OAAA,CAAQ,SAAiB,IAAA,EAAmB;AAC1C,IAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,OAAO,SAAA,EAAW,IAAA,CAAK,OAAO,CAAA,EAAG;AACrD,IAAA,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAA,EAAS,IAAI,CAAA;AAAA,EACnC;AAAA,EAEA,KAAA,CAAM,SAAiB,IAAA,EAAmB;AACxC,IAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,OAAO,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA,EAAG;AACnD,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAI,CAAA;AAAA,EACjC;AAAA,EAEA,KAAA,CAAM,SAAiB,IAAA,EAAmB;AACxC,IAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,OAAO,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA,EAAG;AACnD,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAI,CAAA;AAAA,EACjC;AAAA;AAAA,EAIQ,GAAA,CAAI,KAAA,EAAiB,OAAA,EAAiB,IAAA,EAAa,KAAA,EAA+B;AACxF,IAAA,MAAM,QAAA,GAAW,OAAO,IAAA,KAAS,UAAA,GAAa,MAAK,GAAI,IAAA;AACvD,IAAA,MAAM,UAAmC,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,GAAG,QAAA,EAAS;AAE9E,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAA,CAAQ,eAAe,KAAA,CAAM,OAAA;AAC7B,MAAA,OAAA,CAAQ,QAAQ,KAAA,CAAM,KAAA;AAAA,IACxB,CAAA,MAAA,IAAW,UAAU,MAAA,EAAW;AAC9B,MAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAAA,IAClB;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,SAAS,OAAO,CAAA;AAAA,EAChD;AACF;;;ACpGO,SAAS,qBAAA,GAEe;AAC7B,EAAA,IAAI,IAAA,GAAgC,IAAA;AAEpC,EAAA,MAAM,aAAa,MAAwB;AACzC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,CAAK,QAAsB,KAAA,EAAiD;AAC1E,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA;AAAA,MACpC;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IAEA,GAAA,GAAwB;AACtB,MAAA,OAAO,UAAA,EAAW;AAAA,IACpB,CAAA;AAAA,IAEA,IAAI,OAAA,EAAmC;AACrC,MAAA,OAAO,UAAA,EAAW,CAAE,GAAA,CAAI,OAAO,CAAA;AAAA,IACjC,CAAA;AAAA,IAEA,QAAA,GAAkC;AAChC,MAAA,OAAO,UAAA,GAAa,QAAA,EAAS;AAAA,IAC/B,CAAA;AAAA,IAEA,gBAAA,CAAiB,OAA0B,KAAA,EAAuB;AAChE,MAAA,UAAA,EAAW,CAAE,gBAAA,CAAiB,KAAA,EAAO,KAAK,CAAA;AAAA,IAC5C,CAAA;AAAA,IAEA,oBAAoB,KAAA,EAAgC;AAClD,MAAA,UAAA,EAAW,CAAE,oBAAoB,KAAK,CAAA;AAAA,IACxC,CAAA;AAAA,IAEA,iBAAA,GAA+C;AAC7C,MAAA,OAAO,UAAA,GAAa,iBAAA,EAAkB;AAAA,IACxC,CAAA;AAAA,IAEA,mBAAA,GAA4B;AAC1B,MAAA,UAAA,GAAa,mBAAA,EAAoB;AAAA,IACnC;AAAA,GACF;AACF;;;ACrDA,SAAS,eAAe,EAAA,EAAoB;AAC1C,EAAA,IAAI,KAAK,GAAA,EAAM;AACb,IAAA,OAAO,CAAA,EAAG,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,EACzB;AACA,EAAA,IAAI,KAAK,GAAA,EAAO;AACd,IAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EAClC;AACA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,GAAK,CAAA;AACrC,EAAA,MAAM,OAAA,GAAA,CAAY,EAAA,GAAK,GAAA,GAAS,GAAA,EAAM,QAAQ,CAAC,CAAA;AAC/C,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAA;AAC/B;AAEO,SAAS,YAAY,KAAA,EAAsB;AAChD,EAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAE9B,EAAA,OAAO;AAAA,IACL,GAAA,GAAoB;AAClB,MAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,EAAI,GAAI,KAAA;AACvC,MAAA,OAAO;AAAA,QACL,KAAA;AAAA,QACA,UAAA;AAAA,QACA,iBAAA,EAAmB,eAAe,UAAU;AAAA,OAC9C;AAAA,IACF;AAAA,GACF;AACF;AAEA,eAAsB,YAAA,CACpB,OACA,EAAA,EAC8C;AAC9C,EAAA,MAAM,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,MAAM,EAAA,EAAG;AACxB,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,EAAI;AACzB,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;AAEO,SAAS,WAAA,CACd,OACA,EAAA,EACqC;AACrC,EAAA,MAAM,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC/B,EAAA,MAAM,SAAS,EAAA,EAAG;AAClB,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,EAAI;AACzB,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;AChDO,SAAS,iBAAA,CAAkB,OAAA,GAA4B,EAAC,EAAW;AACxE,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,GAAQ,KAAA,EAAM,GAAI,OAAA;AAClC,EAAA,MAAM,OAAOC,iBAAA,EAAW;AACxB,EAAA,MAAM,KAAK,KAAA,GAAQ,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GAAI,IAAA;AACxC,EAAA,OAAO,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAA;AACtC;AAEO,SAAS,iBAAiB,OAAA,EAA4E;AAC3G,EAAA,MAAM,WAAA,GAAc,CAAC,cAAA,EAAgB,kBAAA,EAAoB,YAAY,CAAA;AAErE,EAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,IAAA,MAAM,KAAA,GAAQ,QAAQ,IAAI,CAAA;AAC1B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,SAAS,CAAA,EAAG;AACjD,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5C,MAAA,OAAO,MAAM,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,sBAAA,CACd,OAAA,EACA,OAAA,GAA4B,EAAC,EACrB;AACR,EAAA,OAAO,gBAAA,CAAiB,OAAO,CAAA,IAAK,iBAAA,CAAkB,OAAO,CAAA;AAC/D","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.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}) satisfies z.ZodType<LoggerConfig>;\n\n// Validation function\nexport function validateConfig(config: unknown): z.infer<typeof LoggerConfigSchema> {\n return LoggerConfigSchema.parse(config);\n}\n\n// Safe validation (returns result instead of throwing)\nexport function safeValidateConfig(config: unknown) {\n return LoggerConfigSchema.safeParse(config);\n}\n","import { 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 +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":["format"],"mappings":"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","file":"index.mjs","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"]}
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":["format"],"mappings":"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","file":"index.mjs","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.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}) satisfies z.ZodType<LoggerConfig>;\n\n// Validation function\nexport function validateConfig(config: unknown): z.infer<typeof LoggerConfigSchema> {\n return LoggerConfigSchema.parse(config);\n}\n\n// Safe validation (returns result instead of throwing)\nexport function safeValidateConfig(config: unknown) {\n return LoggerConfigSchema.safeParse(config);\n}\n","import { 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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rawnodes/logger",
3
- "version": "1.9.1",
3
+ "version": "1.10.0",
4
4
  "description": "Flexible Winston-based logger with AsyncLocalStorage context, level overrides, and timing utilities",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",