@loggerjs/node 0.5.2 → 0.5.4
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/README.md +2 -0
- package/dist/bullmq-integration.cjs +6 -0
- package/dist/bullmq-integration.cjs.map +1 -1
- package/dist/bullmq-integration.d.ts +5 -0
- package/dist/bullmq-integration.d.ts.map +1 -1
- package/dist/bullmq-integration.js +6 -0
- package/dist/bullmq-integration.js.map +1 -1
- package/dist/index.cjs +11 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/nest-integration.cjs +5 -0
- package/dist/nest-integration.cjs.map +1 -1
- package/dist/nest-integration.d.ts +5 -0
- package/dist/nest-integration.d.ts.map +1 -1
- package/dist/nest-integration.js +5 -0
- package/dist/nest-integration.js.map +1 -1
- package/dist/prisma-integration.cjs.map +1 -1
- package/dist/prisma-integration.d.ts +5 -0
- package/dist/prisma-integration.d.ts.map +1 -1
- package/dist/prisma-integration.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["headerValue","Worker","AsyncLocalStorage","defaultMethods","defaultRandom","defaultLevel","isPromiseLike","defaultOperation","levelFor","removeListener","defaultRandom","defaultLevel","isPromiseLike","defaultRandom","defaultSanitizeUrl","defaultLevel","headerValue","pickRequestHeaders","pickResponseHeaders","defaultRoute","defaultRandom","defaultSanitizeUrl","defaultLevel","headerValue","levelFor","defaultRandom","defaultSanitizeUrl","defaultLevel","isUrlLike","headerValue","pickHeaders","requestInfo","statusMessage","requireBuiltin","defaultRandom","defaultLevel","requireBuiltin","cachedDiagnosticsChannel","loadDiagnosticsChannel"],"sources":["../src/node-destination.ts","../src/stdout-transport.ts","../src/file-transport.ts","../src/rotating-file-transport.ts","../src/http-transport.ts","../src/payload-transforms.ts","../src/syslog-transport.ts","../src/worker-transport.ts","../src/context.ts","../src/queue-integration.ts","../src/bullmq-integration.ts","../src/cli-integration.ts","../src/database-integration.ts","../src/express-integration.ts","../src/fastify-integration.ts","../src/hapi-integration.ts","../src/koa-integration.ts","../src/nest-integration.ts","../src/node-fetch-integration.ts","../src/node-http-client-integration.ts","../src/process-integration.ts","../src/prisma-integration.ts","../src/redis-integration.ts","../src/serverless-integration.ts","../src/diagnostics-channel-integration.ts","../src/logger-diagnostics.ts"],"sourcesContent":["import { closeSync, createWriteStream, mkdirSync, openSync, writeSync, type WriteStream } from \"fs\";\nimport { dirname } from \"path\";\nimport type { TransportContext } from \"@loggerjs/core\";\nimport type { WritableLike } from \"./internal-types\";\n\nexport interface NodeDestination {\n stream?: WriteStream;\n write: (payload: string | Uint8Array, context?: TransportContext) => void;\n flush: () => Promise<void>;\n flushSync: () => void;\n close: () => Promise<void>;\n closeSync: () => void;\n releaseSync?: () => void;\n}\n\nexport interface NodeStreamDestinationOptions {\n name: string;\n stream: WritableLike;\n minLength?: number;\n ignoreEpipe?: boolean;\n reportOperation?: string;\n syncWrite?: (payload: string | Uint8Array) => void;\n}\n\nexport interface NodeFileDestinationOptions {\n name: string;\n path: string;\n flags?: string;\n append?: boolean;\n mkdir?: boolean;\n sync?: boolean;\n minLength?: number;\n}\n\ninterface FlushWaiter {\n resolve: () => void;\n reject: (error: Error) => void;\n}\n\nconst encoder = new TextEncoder();\n\nconst normalizeError = (error: unknown): Error =>\n error instanceof Error ? error : new Error(String(error));\n\nfunction byteLength(payload: string | Uint8Array): number {\n return typeof payload === \"string\" ? encoder.encode(payload).byteLength : payload.byteLength;\n}\n\nfunction coalescePayloads(payloads: Array<string | Uint8Array>): string | Uint8Array {\n if (payloads.every((payload) => typeof payload === \"string\")) {\n return payloads.join(\"\");\n }\n const buffers = payloads.map((payload) =>\n typeof payload === \"string\" ? Buffer.from(payload) : Buffer.from(payload),\n );\n return Buffer.concat(buffers);\n}\n\nfunction isEpipe(error: unknown): boolean {\n return (\n Boolean(error) && typeof error === \"object\" && (error as { code?: unknown }).code === \"EPIPE\"\n );\n}\n\nfunction normalizeMinLength(value: number | undefined): number {\n if (value === undefined || !Number.isFinite(value) || value <= 0) return 0;\n return Math.floor(value);\n}\n\nexport function createNodeStreamDestination(\n options: NodeStreamDestinationOptions,\n): NodeDestination {\n const minLength = normalizeMinLength(options.minLength);\n const ignoreEpipe = options.ignoreEpipe ?? false;\n const waiters: FlushWaiter[] = [];\n const buffer: Array<string | Uint8Array> = [];\n const pendingPayloads: Array<string | Uint8Array> = [];\n let bufferedBytes = 0;\n let pendingWrites = 0;\n let pendingDrains = 0;\n let lastError: Error | undefined;\n let lastContext: TransportContext | undefined;\n let closed = false;\n\n const reportInternalError = (error: unknown, operation: string) => {\n if (ignoreEpipe && isEpipe(error)) return;\n lastContext?.reportInternalError(error, {\n phase: \"transport\",\n transport: options.name,\n operation,\n });\n };\n\n const settleWaitersIfIdle = () => {\n if (pendingWrites + pendingDrains > 0) return;\n if (waiters.length === 0) return;\n const error = lastError;\n lastError = undefined;\n for (const waiter of waiters.splice(0)) {\n if (error) waiter.reject(error);\n else waiter.resolve();\n }\n };\n\n const recordError = (error: unknown, operation: string) => {\n if (ignoreEpipe && isEpipe(error)) {\n closed = true;\n return;\n }\n lastError = normalizeError(error);\n reportInternalError(lastError, operation);\n };\n\n const onStreamError = (error: Error) => {\n recordError(error, \"stream-error\");\n settleWaitersIfIdle();\n };\n const offError = () => options.stream.off?.(\"error\", onStreamError);\n options.stream.on?.(\"error\", onStreamError);\n\n const waitForDrain = () => {\n if (!options.stream.once) return;\n pendingDrains += 1;\n options.stream.once(\"drain\", () => {\n pendingDrains -= 1;\n settleWaitersIfIdle();\n });\n };\n\n const removePending = (payload: string | Uint8Array) => {\n const index = pendingPayloads.indexOf(payload);\n if (index >= 0) pendingPayloads.splice(index, 1);\n };\n\n const writeNow = (payload: string | Uint8Array) => {\n if (closed) return;\n pendingPayloads.push(payload);\n pendingWrites += 1;\n try {\n const result = options.stream.write(payload, (error?: Error | null) => {\n removePending(payload);\n pendingWrites -= 1;\n if (error) recordError(error, options.reportOperation ?? \"write\");\n settleWaitersIfIdle();\n });\n if (result === false) waitForDrain();\n } catch (error) {\n removePending(payload);\n pendingWrites -= 1;\n recordError(error, options.reportOperation ?? \"write\");\n settleWaitersIfIdle();\n }\n };\n\n const flushBuffered = () => {\n if (buffer.length === 0) return;\n const payload = coalescePayloads(buffer.splice(0));\n bufferedBytes = 0;\n writeNow(payload);\n };\n\n const destination: NodeDestination = {\n write(payload, context) {\n if (closed) return;\n lastContext = context;\n if (minLength > 0) {\n buffer.push(payload);\n bufferedBytes += byteLength(payload);\n if (bufferedBytes >= minLength) flushBuffered();\n return;\n }\n writeNow(payload);\n },\n flush() {\n flushBuffered();\n if (pendingWrites + pendingDrains === 0) {\n const error = lastError;\n lastError = undefined;\n if (error) return Promise.reject(error);\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n waiters.push({ resolve, reject });\n });\n },\n flushSync() {\n if (!options.syncWrite) {\n flushBuffered();\n return;\n }\n for (const payload of buffer.splice(0)) options.syncWrite(payload);\n bufferedBytes = 0;\n for (const payload of pendingPayloads.splice(0)) options.syncWrite(payload);\n },\n close() {\n return destination.flush().then(\n () =>\n new Promise<void>((resolve, reject) => {\n if (!options.stream.end) {\n closed = true;\n offError();\n resolve();\n return;\n }\n options.stream.end((error?: Error | null) => {\n closed = true;\n offError();\n if (error && !(ignoreEpipe && isEpipe(error))) reject(error);\n else resolve();\n });\n }),\n (error: unknown) => {\n offError();\n return Promise.reject(error);\n },\n );\n },\n closeSync() {\n destination.flushSync();\n closed = true;\n offError();\n },\n };\n return destination;\n}\n\nexport function createNodeFileDestination(options: NodeFileDestinationOptions): NodeDestination {\n const flags = options.flags ?? (options.append === false ? \"w\" : \"a\");\n if (options.mkdir) mkdirSync(dirname(options.path), { recursive: true });\n\n let fd: number | undefined;\n const getFd = () => {\n fd ??= openSync(options.path, flags);\n return fd;\n };\n const syncWrite = (payload: string | Uint8Array) => {\n if (typeof payload === \"string\") writeSync(getFd(), payload);\n else writeSync(getFd(), payload);\n };\n\n if (options.sync) {\n let closed = false;\n const releaseSync = () => {\n if (fd !== undefined) {\n closeSync(fd);\n fd = undefined;\n }\n };\n return {\n write(payload) {\n if (closed) return;\n syncWrite(payload);\n },\n flush() {\n return Promise.resolve();\n },\n flushSync() {},\n close() {\n releaseSync();\n closed = true;\n return Promise.resolve();\n },\n closeSync() {\n releaseSync();\n closed = true;\n },\n releaseSync,\n };\n }\n\n const stream = createWriteStream(options.path, { flags });\n const destination = createNodeStreamDestination({\n name: options.name,\n stream,\n minLength: options.minLength,\n syncWrite,\n });\n const releaseSync = () => {\n if (fd !== undefined) {\n closeSync(fd);\n fd = undefined;\n }\n };\n return {\n ...destination,\n stream,\n close() {\n return destination.close().finally(releaseSync);\n },\n closeSync() {\n destination.closeSync();\n releaseSync();\n },\n releaseSync,\n };\n}\n","import {\n ndjsonCodec,\n toLevelValue,\n type Codec,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n} from \"@loggerjs/core\";\nimport type { WritableLike } from \"./internal-types\";\nimport { createNodeStreamDestination } from \"./node-destination\";\n\nexport interface StdoutTransportOptions {\n name?: string;\n stream?: WritableLike;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n minLength?: number;\n ignoreEpipe?: boolean;\n}\n\nexport function stdoutTransport(options: StdoutTransportOptions = {}): Transport {\n const codec = options.codec ?? ndjsonCodec();\n const stream = options.stream ?? process.stdout;\n const transportName = options.name ?? \"stdout\";\n const destination = createNodeStreamDestination({\n name: transportName,\n stream,\n minLength: options.minLength,\n ignoreEpipe: options.ignoreEpipe ?? true,\n });\n\n return {\n name: transportName,\n minLevel: options.minLevel,\n log(event: LogEvent, context) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel)) return;\n destination.write(codec.encode(event), context);\n },\n flush: destination.flush,\n flushSync: destination.flushSync,\n close: destination.close,\n };\n}\n\nexport function stderrTransport(options: Omit<StdoutTransportOptions, \"stream\"> = {}): Transport {\n return stdoutTransport({ ...options, name: options.name ?? \"stderr\", stream: process.stderr });\n}\n","import {\n ndjsonCodec,\n toLevelValue,\n type Codec,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n} from \"@loggerjs/core\";\nimport type { WriteStream } from \"fs\";\nimport { createNodeFileDestination } from \"./node-destination\";\n\nexport interface FileTransportOptions {\n path: string;\n name?: string;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n flags?: string;\n append?: boolean;\n mkdir?: boolean;\n sync?: boolean;\n minLength?: number;\n}\n\nexport interface FileTransport extends Transport {\n stream?: WriteStream;\n flushSync: () => void;\n}\n\nexport function fileTransport(options: FileTransportOptions): FileTransport {\n const codec = options.codec ?? ndjsonCodec();\n const destination = createNodeFileDestination({\n name: options.name ?? \"file\",\n path: options.path,\n flags: options.flags,\n append: options.append,\n mkdir: options.mkdir,\n sync: options.sync,\n minLength: options.minLength,\n });\n\n return {\n name: options.name ?? \"file\",\n minLevel: options.minLevel,\n stream: destination.stream,\n log(event: LogEvent, context) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel)) return;\n destination.write(codec.encode(event), context);\n },\n flush: destination.flush,\n flushSync: destination.flushSync,\n close: destination.close,\n };\n}\n","import { existsSync, renameSync, statSync, unlinkSync } from \"fs\";\nimport {\n ndjsonCodec,\n toLevelValue,\n type Codec,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n} from \"@loggerjs/core\";\nimport { createNodeFileDestination } from \"./node-destination\";\n\nexport interface RotatingFileTransportOptions {\n path: string;\n name?: string;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n flags?: string;\n append?: boolean;\n mkdir?: boolean;\n maxBytes?: number;\n maxFiles?: number;\n archivePath?: (path: string, index: number) => string;\n}\n\nexport interface RotatingFileTransport extends Transport {\n rotate: () => void;\n flushSync: () => void;\n currentBytes: () => number;\n}\n\nconst textEncoder = new TextEncoder();\n\nfunction payloadBytes(payload: string | Uint8Array): number {\n return typeof payload === \"string\" ? textEncoder.encode(payload).byteLength : payload.byteLength;\n}\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (value === undefined || !Number.isFinite(value) || value <= 0) return fallback;\n return Math.floor(value);\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n if (value === undefined || !Number.isFinite(value) || value < 0) return fallback;\n return Math.floor(value);\n}\n\nfunction defaultArchivePath(path: string, index: number): string {\n return `${path}.${index}`;\n}\n\nfunction fileSize(path: string): number {\n try {\n return statSync(path).size;\n } catch {\n return 0;\n }\n}\n\nexport function rotatingFileTransport(\n options: RotatingFileTransportOptions,\n): RotatingFileTransport {\n const codec = options.codec ?? ndjsonCodec();\n const maxBytes = normalizePositiveInteger(options.maxBytes, 10 * 1024 * 1024);\n const maxFiles = normalizeNonNegativeInteger(options.maxFiles, 5);\n const archivePath = options.archivePath ?? defaultArchivePath;\n const destination = createNodeFileDestination({\n name: options.name ?? \"rotating-file\",\n path: options.path,\n flags: options.flags,\n append: options.append,\n mkdir: options.mkdir,\n sync: true,\n });\n let bytes = fileSize(options.path);\n\n const rotate = () => {\n destination.releaseSync?.();\n\n if (maxFiles === 0) {\n if (existsSync(options.path)) unlinkSync(options.path);\n bytes = 0;\n return;\n }\n\n const oldest = archivePath(options.path, maxFiles);\n if (existsSync(oldest)) unlinkSync(oldest);\n\n for (let index = maxFiles - 1; index >= 1; index -= 1) {\n const source = archivePath(options.path, index);\n if (existsSync(source)) renameSync(source, archivePath(options.path, index + 1));\n }\n\n if (existsSync(options.path)) renameSync(options.path, archivePath(options.path, 1));\n bytes = 0;\n };\n\n const writePayload = (payload: string | Uint8Array) => {\n const size = payloadBytes(payload);\n if (bytes > 0 && bytes + size > maxBytes) rotate();\n destination.write(payload);\n bytes += size;\n };\n\n const transport: RotatingFileTransport = {\n name: options.name ?? \"rotating-file\",\n minLevel: options.minLevel,\n log(event: LogEvent) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel)) return;\n writePayload(codec.encode(event));\n },\n logBatch(events: LogEvent[]) {\n for (const event of events) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel))\n continue;\n writePayload(codec.encode(event));\n }\n },\n flush() {\n return destination.flush();\n },\n flushSync: destination.flushSync,\n close() {\n return destination.close();\n },\n rotate,\n currentBytes: () => bytes,\n };\n\n return transport;\n}\n","import {\n applyPayloadTransforms,\n batchTransport,\n safeJsonCodec,\n type BatchTransportOptions,\n type Codec,\n type EncodedPayload,\n type LogEvent,\n type LoggerLevel,\n type PayloadTransform,\n type Transport,\n} from \"@loggerjs/core\";\n\nexport interface NodeHttpTransportOptions extends BatchTransportOptions {\n url: string;\n name?: string;\n method?: \"POST\" | \"PUT\";\n headers?: Record<string, string>;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n fetchFn?: typeof fetch;\n transformPayload?: PayloadTransform | readonly PayloadTransform[];\n}\n\nfunction payloadToBody(payload: EncodedPayload): BodyInit {\n if (typeof payload === \"string\") return payload;\n return Uint8Array.from(payload);\n}\n\nexport function nodeHttpTransport(options: NodeHttpTransportOptions): Transport {\n const codec = options.codec ?? safeJsonCodec();\n const fetchFn = options.fetchFn ?? globalThis.fetch?.bind(globalThis);\n const inner: Transport = {\n name: options.name ?? \"node-http-inner\",\n minLevel: options.minLevel,\n async logBatch(events: LogEvent[]) {\n if (!fetchFn) throw new Error(\"fetch is not available. Use Node.js 18+ or pass fetchFn.\");\n const encoded = codec.encode(events);\n const transformed = await applyPayloadTransforms(\n encoded,\n {\n contentType: codec.contentType,\n events,\n transport: options.name ?? \"node-http\",\n },\n options.transformPayload,\n );\n const response = await fetchFn(options.url, {\n method: options.method ?? \"POST\",\n headers: {\n \"content-type\": transformed.contentType,\n ...transformed.headers,\n ...options.headers,\n },\n body: payloadToBody(transformed.payload),\n });\n if (!response.ok) throw new Error(`nodeHttpTransport failed with status ${response.status}`);\n },\n };\n return batchTransport(inner, {\n name: options.name ?? \"node-http\",\n maxRecords: options.maxRecords,\n maxBatchSize: options.maxBatchSize,\n maxBytes: options.maxBytes,\n maxWaitMs: options.maxWaitMs,\n flushIntervalMs: options.flushIntervalMs,\n concurrency: options.concurrency,\n maxQueueSize: options.maxQueueSize,\n dropPolicy: options.dropPolicy,\n estimateEventBytes: options.estimateEventBytes,\n maxRetries: options.maxRetries,\n retryBaseDelayMs: options.retryBaseDelayMs,\n retryMaxDelayMs: options.retryMaxDelayMs,\n random: options.random,\n circuitBreakerFailureThreshold: options.circuitBreakerFailureThreshold,\n circuitBreakerResetMs: options.circuitBreakerResetMs,\n onDrop: options.onDrop,\n });\n}\n","import {\n brotliCompressSync,\n deflateSync,\n gzipSync,\n type BrotliOptions,\n type ZlibOptions,\n} from \"node:zlib\";\nimport {\n encodedPayloadToUint8Array,\n type EncodedPayload,\n type PayloadTransform,\n} from \"@loggerjs/core\";\n\nexport type NodeCompressionFormat = \"gzip\" | \"brotli\" | \"deflate\";\n\nexport interface NodeCompressionPayloadTransformOptions {\n format?: NodeCompressionFormat;\n gzipOptions?: ZlibOptions;\n brotliOptions?: BrotliOptions;\n deflateOptions?: ZlibOptions;\n headers?: Record<string, string>;\n}\n\nconst contentEncodingByFormat: Record<NodeCompressionFormat, string> = {\n gzip: \"gzip\",\n brotli: \"br\",\n deflate: \"deflate\",\n};\n\nfunction compressPayload(\n payload: EncodedPayload,\n format: NodeCompressionFormat,\n options: NodeCompressionPayloadTransformOptions,\n): Uint8Array {\n const input = encodedPayloadToUint8Array(payload);\n if (format === \"brotli\") return Uint8Array.from(brotliCompressSync(input, options.brotliOptions));\n if (format === \"deflate\") return Uint8Array.from(deflateSync(input, options.deflateOptions));\n return Uint8Array.from(gzipSync(input, options.gzipOptions));\n}\n\nexport function nodeCompressionPayloadTransform(\n options: NodeCompressionPayloadTransformOptions = {},\n): PayloadTransform {\n const format = options.format ?? \"gzip\";\n return (payload) => ({\n payload: compressPayload(payload, format, options),\n headers: {\n \"content-encoding\": contentEncodingByFormat[format],\n ...options.headers,\n },\n });\n}\n","import { createSocket } from \"dgram\";\nimport { createConnection } from \"net\";\nimport { hostname as getHostname } from \"os\";\nimport {\n safeJsonStringify,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n type TransportContext,\n} from \"@loggerjs/core\";\n\nexport type NodeSyslogProtocol = \"tcp\" | \"udp4\" | \"udp6\";\nexport type NodeSyslogTcpFraming = \"newline\" | \"octet-counting\";\n\nexport interface NodeSyslogUdpSocket {\n send: (\n message: string | Uint8Array,\n port: number,\n host: string,\n callback?: (error: Error | null | undefined) => void,\n ) => void;\n close?: () => void;\n on?: (event: \"error\", listener: (error: Error) => void) => void;\n unref?: () => void;\n}\n\nexport interface NodeSyslogTcpSocket {\n write: (message: string | Uint8Array, callback?: (error?: Error | null) => void) => boolean;\n end?: () => void;\n destroy?: () => void;\n on?: (event: \"error\", listener: (error: Error) => void) => void;\n unref?: () => void;\n}\n\nexport type NodeSyslogUdpSocketFactory = (protocol: \"udp4\" | \"udp6\") => NodeSyslogUdpSocket;\nexport type NodeSyslogTcpSocketFactory = (options: {\n host: string;\n port: number;\n}) => NodeSyslogTcpSocket;\n\nexport interface NodeSyslogFormatOptions {\n facility?: number;\n hostname?: string;\n appName?: string | ((event: LogEvent) => string);\n procId?: string | number | ((event: LogEvent) => string | number);\n msgId?: string | ((event: LogEvent) => string);\n structuredData?: string | ((event: LogEvent) => string);\n formatMessage?: (event: LogEvent) => string;\n}\n\nexport interface NodeSyslogTransportOptions extends NodeSyslogFormatOptions {\n name?: string;\n minLevel?: LoggerLevel;\n protocol?: NodeSyslogProtocol;\n host?: string;\n port?: number;\n tcpFraming?: NodeSyslogTcpFraming;\n unref?: boolean;\n udpSocketFactory?: NodeSyslogUdpSocketFactory;\n tcpSocketFactory?: NodeSyslogTcpSocketFactory;\n onError?: (error: unknown, detail: { operation: string }) => void;\n}\n\nconst severityByLevel: Record<string, number> = {\n trace: 7,\n debug: 7,\n info: 6,\n warn: 4,\n error: 3,\n fatal: 2,\n};\n\nfunction defaultUdpSocketFactory(protocol: \"udp4\" | \"udp6\") {\n return createSocket(protocol);\n}\n\nfunction defaultTcpSocketFactory(options: { host: string; port: number }) {\n return createConnection(options);\n}\n\nfunction headerValue(value: unknown, fallback: string, maxLength: number) {\n const text = String(value ?? fallback)\n .trim()\n .replace(/\\s+/g, \"_\");\n if (!text) return fallback;\n return text.length > maxLength ? text.slice(0, maxLength) : text;\n}\n\nfunction timestamp(time: number) {\n const value = new Date(time).toISOString();\n return value === \"Invalid Date\" ? \"-\" : value;\n}\n\nfunction valueFor<T>(\n value: T | ((event: LogEvent) => T) | undefined,\n event: LogEvent,\n fallback: T,\n) {\n return typeof value === \"function\"\n ? (value as (event: LogEvent) => T)(event)\n : (value ?? fallback);\n}\n\nfunction defaultMessage(event: LogEvent) {\n const extra: Record<string, unknown> = {};\n if (event.data !== undefined) extra.data = event.data;\n if (event.context !== undefined) extra.context = event.context;\n if (event.error !== undefined) extra.error = event.error;\n if (Object.keys(extra).length === 0) return event.message;\n return `${event.message} ${safeJsonStringify(extra)}`;\n}\n\nexport function formatSyslogMessage(\n event: LogEvent,\n options: NodeSyslogFormatOptions = {},\n): string {\n const facility = Math.max(0, Math.min(23, Math.trunc(options.facility ?? 1)));\n const severity = severityByLevel[event.levelName] ?? 6;\n const priority = facility * 8 + severity;\n const host = headerValue(options.hostname, getHostname(), 255);\n const appName = headerValue(valueFor(options.appName, event, event.logger), \"-\", 48);\n const procId = headerValue(valueFor(options.procId, event, \"-\"), \"-\", 128);\n const msgId = headerValue(valueFor(options.msgId, event, event.type ?? event.levelName), \"-\", 32);\n const structuredData = valueFor(options.structuredData, event, \"-\") || \"-\";\n const message = options.formatMessage ? options.formatMessage(event) : defaultMessage(event);\n\n return `<${priority}>1 ${timestamp(event.time)} ${host} ${appName} ${procId} ${msgId} ${structuredData} ${message}`;\n}\n\nexport function nodeSyslogTransport(options: NodeSyslogTransportOptions = {}): Transport {\n const protocol = options.protocol ?? \"udp4\";\n const host = options.host ?? \"127.0.0.1\";\n const port = options.port ?? 514;\n const transportName = options.name ?? \"syslog\";\n const unref = options.unref ?? true;\n const tcpFraming = options.tcpFraming ?? \"newline\";\n const udpSocketFactory = options.udpSocketFactory ?? defaultUdpSocketFactory;\n const tcpSocketFactory = options.tcpSocketFactory ?? defaultTcpSocketFactory;\n let udpSocket: NodeSyslogUdpSocket | undefined;\n let tcpSocket: NodeSyslogTcpSocket | undefined;\n let lastContext: TransportContext | undefined;\n\n const reportError = (\n error: unknown,\n context: TransportContext | undefined,\n operation: string,\n ) => {\n try {\n options.onError?.(error, { operation });\n } catch (onErrorError) {\n context?.reportInternalError(onErrorError, {\n operation: \"on-error\",\n phase: \"transport\",\n transport: transportName,\n });\n }\n\n context?.reportInternalError(error, {\n operation,\n phase: \"transport\",\n transport: transportName,\n });\n };\n\n const getUdpSocket = (context: TransportContext) => {\n if (udpSocket) return udpSocket;\n const socket = udpSocketFactory(protocol === \"udp6\" ? \"udp6\" : \"udp4\");\n socket.on?.(\"error\", (error) => reportError(error, lastContext ?? context, \"socket-error\"));\n if (unref) socket.unref?.();\n udpSocket = socket;\n return socket;\n };\n\n const getTcpSocket = (context: TransportContext) => {\n if (tcpSocket) return tcpSocket;\n const socket = tcpSocketFactory({ host, port });\n socket.on?.(\"error\", (error) => reportError(error, lastContext ?? context, \"socket-error\"));\n if (unref) socket.unref?.();\n tcpSocket = socket;\n return socket;\n };\n\n const send = (message: string, context: TransportContext) => {\n lastContext = context;\n if (protocol === \"tcp\") {\n const bytes = new TextEncoder().encode(message).byteLength;\n const payload = tcpFraming === \"octet-counting\" ? `${bytes} ${message}` : `${message}\\n`;\n const socket = getTcpSocket(context);\n socket.write(payload, (error) => {\n if (error) reportError(error, context, \"send\");\n });\n return;\n }\n\n const socket = getUdpSocket(context);\n socket.send(message, port, host, (error) => {\n if (error) reportError(error, context, \"send\");\n });\n };\n\n return {\n name: transportName,\n minLevel: options.minLevel,\n log(event, context) {\n send(formatSyslogMessage(event, options), context);\n },\n logBatch(events, context) {\n for (const event of events) send(formatSyslogMessage(event, options), context);\n },\n async close() {\n udpSocket?.close?.();\n udpSocket = undefined;\n tcpSocket?.end?.();\n tcpSocket = undefined;\n },\n };\n}\n","import { Worker } from \"node:worker_threads\";\nimport {\n emitLoggerDiagnostic,\n incrementLoggerMetaCounter,\n safeJsonCodec,\n setLoggerMetaGauge,\n toLevelValue,\n type Codec,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n type TransportContext,\n} from \"@loggerjs/core\";\n\nexport interface WorkerLike {\n postMessage: (value: unknown, transferList?: ArrayBuffer[]) => void;\n terminate?: () => void | number | Promise<number>;\n on?: (event: \"error\" | \"exit\" | \"message\", listener: (...args: unknown[]) => void) => unknown;\n off?: (event: \"error\" | \"exit\" | \"message\", listener: (...args: unknown[]) => void) => unknown;\n}\n\nexport interface WorkerTransportMessage {\n type: \"loggerjs:batch\";\n id?: number;\n codec: string;\n contentType: string;\n count: number;\n payload: Uint8Array;\n}\n\nexport type WorkerTransportProtocolMessage =\n | { type: \"loggerjs:ready\" }\n | { type: \"loggerjs:batch:ack\"; id: number }\n | { type: \"loggerjs:error\"; error?: unknown; message?: string };\n\nexport interface WorkerTransportOptions {\n name?: string;\n worker?: WorkerLike;\n workerFactory?: () => WorkerLike;\n workerScript?: string | URL;\n workerOptions?: object;\n fallback?: Transport;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n transferBuffers?: boolean;\n readyTimeoutMs?: number;\n ackTimeoutMs?: number;\n autoEnd?: boolean;\n}\n\ninterface PendingBatch {\n id: number;\n events: LogEvent[];\n context: TransportContext;\n timer?: ReturnType<typeof setTimeout>;\n resolve: () => void;\n}\n\nfunction createDefaultWorker(options: WorkerTransportOptions): WorkerLike {\n if (!options.workerScript) {\n throw new Error(\"workerTransport requires worker, workerFactory, or workerScript.\");\n }\n return new Worker(options.workerScript, options.workerOptions);\n}\n\nfunction payloadToBytes(payload: string | Uint8Array): Uint8Array {\n if (typeof payload !== \"string\") return payload;\n return new TextEncoder().encode(payload);\n}\n\nfunction transferablePayload(payload: Uint8Array): {\n payload: Uint8Array;\n transferList?: ArrayBuffer[];\n} {\n const copy = Uint8Array.from(payload);\n return {\n payload: copy,\n transferList: [copy.buffer],\n };\n}\n\nfunction normalizePositiveTimeout(value: number | undefined): number {\n if (value === undefined || !Number.isFinite(value) || value <= 0) return 0;\n return Math.floor(value);\n}\n\nfunction protocolMessage(value: unknown): WorkerTransportProtocolMessage | undefined {\n if (!value || typeof value !== \"object\") return undefined;\n const message = value as { type?: unknown };\n if (message.type === \"loggerjs:ready\") return { type: \"loggerjs:ready\" };\n if (message.type === \"loggerjs:batch:ack\") {\n const id = (value as { id?: unknown }).id;\n if (typeof id === \"number\") return { type: \"loggerjs:batch:ack\", id };\n }\n if (message.type === \"loggerjs:error\") {\n const item = value as { error?: unknown; message?: unknown };\n return {\n type: \"loggerjs:error\",\n error: item.error,\n message: typeof item.message === \"string\" ? item.message : undefined,\n };\n }\n return undefined;\n}\n\nfunction dropBatch(events: LogEvent[], reason: string) {\n incrementLoggerMetaCounter(\"transport.dropped\", events.length);\n incrementLoggerMetaCounter(`transport.dropped.${reason}`, events.length);\n}\n\nexport function workerTransport(options: WorkerTransportOptions = {}): Transport {\n const codec = options.codec ?? safeJsonCodec();\n const transportName = options.name ?? \"worker\";\n const fallback = options.fallback;\n const readyTimeoutMs = normalizePositiveTimeout(options.readyTimeoutMs);\n const ackTimeoutMs = normalizePositiveTimeout(options.ackTimeoutMs);\n const autoEnd = options.autoEnd ?? true;\n let worker: WorkerLike | undefined;\n let failed = false;\n let failedError: Error | undefined;\n let lastContext: TransportContext | undefined;\n let ready = readyTimeoutMs === 0;\n let readyPromise: Promise<void> | undefined;\n let readyTimer: ReturnType<typeof setTimeout> | undefined;\n let readyResolve: (() => void) | undefined;\n let readyReject: ((error: Error) => void) | undefined;\n let nextBatchId = 1;\n const pendingBatches = new Map<number, PendingBatch>();\n\n const setPendingGauge = () => {\n setLoggerMetaGauge(`transport.queue.depth.${transportName}`, pendingBatches.size);\n };\n\n const setReadyGauge = (value: number) => {\n setLoggerMetaGauge(`transport.ready.${transportName}`, value);\n };\n\n const reportInternalError = (error: unknown, operation: string) => {\n lastContext?.reportInternalError(error, {\n phase: \"transport\",\n transport: transportName,\n operation,\n });\n };\n\n const markFailed = (error: unknown, operation: string) => {\n if (failed) return;\n failed = true;\n failedError = error instanceof Error ? error : new Error(String(error));\n setReadyGauge(0);\n incrementLoggerMetaCounter(\"transport.worker.failed\");\n emitLoggerDiagnostic({\n stage: \"worker\",\n phase: \"error\",\n transport: transportName,\n operation,\n error,\n });\n reportInternalError(error, operation);\n readyReject?.(failedError);\n failPendingBatches(operation);\n };\n\n const onWorkerError = (error: unknown) => markFailed(error, \"worker-error\");\n const onWorkerExit = (code: unknown) => {\n if (typeof code === \"number\" && code !== 0) markFailed(code, \"worker-exit\");\n };\n const onWorkerMessage = (value: unknown) => {\n const message = protocolMessage(value);\n if (!message) return;\n if (message.type === \"loggerjs:ready\") {\n ready = true;\n setReadyGauge(1);\n emitLoggerDiagnostic({\n stage: \"worker\",\n phase: \"end\",\n transport: transportName,\n operation: \"ready\",\n });\n if (readyTimer) clearTimeout(readyTimer);\n readyResolve?.();\n return;\n }\n if (message.type === \"loggerjs:batch:ack\") {\n const pending = pendingBatches.get(message.id);\n if (!pending) return;\n pendingBatches.delete(message.id);\n setPendingGauge();\n if (pending.timer) clearTimeout(pending.timer);\n pending.resolve();\n incrementLoggerMetaCounter(\"transport.worker.ack\");\n return;\n }\n markFailed(\n message.error ?? new Error(message.message ?? \"Worker reported an error\"),\n \"worker-message\",\n );\n };\n\n const fallbackOrDropBatch = async (\n events: LogEvent[],\n context: TransportContext,\n reason: string,\n ) => {\n if (fallback) {\n await fallbackBatch(events, context);\n return;\n }\n dropBatch(events, reason);\n };\n\n const failPendingBatch = (pending: PendingBatch, reason: string) => {\n pendingBatches.delete(pending.id);\n setPendingGauge();\n if (pending.timer) clearTimeout(pending.timer);\n incrementLoggerMetaCounter(\"transport.worker.pending-dropped\", pending.events.length);\n void fallbackOrDropBatch(pending.events, pending.context, reason).finally(pending.resolve);\n };\n\n function failPendingBatches(reason: string) {\n for (const pending of Array.from(pendingBatches.values())) failPendingBatch(pending, reason);\n }\n\n const waitForReady = async () => {\n if (ready) return;\n readyPromise ??= new Promise<void>((resolve, reject) => {\n readyResolve = resolve;\n readyReject = reject;\n readyTimer = setTimeout(() => {\n reject(new Error(`workerTransport ready timeout after ${readyTimeoutMs}ms`));\n }, readyTimeoutMs);\n });\n await readyPromise;\n };\n\n const getWorker = (): WorkerLike | undefined => {\n if (failed) return undefined;\n if (worker) return worker;\n try {\n worker = options.worker ?? options.workerFactory?.() ?? createDefaultWorker(options);\n worker.on?.(\"error\", onWorkerError);\n worker.on?.(\"exit\", onWorkerExit);\n worker.on?.(\"message\", onWorkerMessage);\n if (ready) setReadyGauge(1);\n return worker;\n } catch (error) {\n markFailed(error, \"create-worker\");\n return undefined;\n }\n };\n\n const fallbackBatch = async (events: LogEvent[], context: TransportContext) => {\n if (fallback?.logBatch) {\n await fallback.logBatch(events, context);\n return;\n }\n if (fallback?.log) {\n for (const event of events) {\n // oxlint-disable-next-line no-await-in-loop -- Fallback should preserve log order.\n await fallback.log(event, context);\n }\n }\n };\n\n const postBatch = async (events: LogEvent[], context: TransportContext) => {\n lastContext = context;\n const currentWorker = getWorker();\n if (!currentWorker) {\n await fallbackOrDropBatch(events, context, \"worker-unavailable\");\n return;\n }\n try {\n await waitForReady();\n } catch (error) {\n markFailed(error, \"worker-ready-timeout\");\n await fallbackOrDropBatch(events, context, \"worker-ready-timeout\");\n return;\n }\n\n const encoded = payloadToBytes(codec.encode(events));\n const transferable =\n options.transferBuffers === false\n ? { payload: encoded, transferList: undefined }\n : transferablePayload(encoded);\n const message: WorkerTransportMessage = {\n type: \"loggerjs:batch\",\n codec: codec.name,\n contentType: codec.contentType,\n count: events.length,\n payload: transferable.payload,\n };\n let pending: PendingBatch | undefined;\n if (ackTimeoutMs > 0) {\n const id = nextBatchId;\n nextBatchId += 1;\n message.id = id;\n pending = { id, events, context, resolve: () => {} };\n pending.timer = setTimeout(() => {\n if (!pending) return;\n markFailed(\n new Error(`workerTransport ack timeout after ${ackTimeoutMs}ms`),\n \"worker-ack-timeout\",\n );\n }, ackTimeoutMs);\n pendingBatches.set(id, pending);\n setPendingGauge();\n }\n\n try {\n currentWorker.postMessage(message, transferable.transferList);\n } catch (error) {\n markFailed(error, \"post-message\");\n if (!pending) await fallbackOrDropBatch(events, context, \"worker-post-message\");\n }\n };\n\n const transport: Transport = {\n name: transportName,\n minLevel: options.minLevel,\n async ready() {\n const currentWorker = getWorker();\n if (!currentWorker) {\n if (fallback) {\n await fallback.ready?.();\n return;\n }\n throw failedError ?? new Error(\"workerTransport is unavailable\");\n }\n try {\n await waitForReady();\n } catch (error) {\n markFailed(error, \"worker-ready-timeout\");\n if (fallback) {\n await fallback.ready?.();\n return;\n }\n throw error;\n }\n },\n log(event, context) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel)) return;\n return postBatch([event], context);\n },\n logBatch(events, context) {\n return postBatch(events, context);\n },\n async flush() {\n await Promise.all(\n Array.from(\n pendingBatches.values(),\n (pending) =>\n new Promise<void>((resolve) => {\n const originalResolve = pending.resolve;\n pending.resolve = () => {\n originalResolve();\n resolve();\n };\n }),\n ),\n );\n await fallback?.flush?.();\n },\n async close() {\n await transport.flush?.();\n worker?.off?.(\"error\", onWorkerError);\n worker?.off?.(\"exit\", onWorkerExit);\n worker?.off?.(\"message\", onWorkerMessage);\n await fallback?.close?.();\n if (autoEnd) await worker?.terminate?.();\n if (readyTimer) clearTimeout(readyTimer);\n readyReject = undefined;\n readyResolve = undefined;\n },\n };\n return transport;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport {\n createBoundContext,\n resetContextManager,\n setContextManager,\n type BoundContext,\n type ContextManager,\n} from \"@loggerjs/core\";\n\nfunction mergeContext(\n ...items: Array<Record<string, unknown> | undefined | null>\n): BoundContext | undefined {\n const out: Record<string, unknown> = {};\n for (const item of items) {\n if (!item) continue;\n Object.assign(out, item);\n }\n return createBoundContext(out) ?? undefined;\n}\n\nexport function createAsyncLocalStorageContextManager(\n storage = new AsyncLocalStorage<BoundContext>(),\n): ContextManager & { disable: () => void } {\n return {\n get() {\n return storage.getStore();\n },\n with(context, fn) {\n return storage.run(mergeContext(storage.getStore(), context) ?? Object.freeze({}), fn);\n },\n disable() {\n storage.disable();\n },\n };\n}\n\nexport function installAsyncLocalStorageContext(\n manager = createAsyncLocalStorageContextManager(),\n): () => void {\n setContextManager(manager);\n return () => {\n resetContextManager();\n manager.disable();\n };\n}\n","import {\n normalizeValue,\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport type QueueOperation = \"publish\" | \"consume\" | \"ack\" | \"nack\" | \"other\";\n\nexport interface QueueClientLike {\n [method: string]: unknown;\n}\n\nexport interface QueueIntegrationTarget {\n client: QueueClientLike;\n name?: string;\n system?: string;\n queueName?: string;\n methods?: readonly string[];\n}\n\nexport interface QueueOperationInfo {\n target: string;\n system?: string;\n queueName?: string;\n method: string;\n operation: QueueOperation;\n}\n\nexport interface QueueIntegrationOptions {\n client?: QueueClientLike;\n targets?: readonly QueueIntegrationTarget[];\n name?: string;\n system?: string;\n queueName?: string;\n methods?: readonly string[];\n captureAll?: boolean;\n captureSuccessful?: boolean;\n minDurationMs?: number;\n sampleRate?: number;\n random?: () => number;\n capturePayload?: boolean;\n getOperation?: (method: string, args: readonly unknown[]) => QueueOperation;\n getQueueName?: (args: readonly unknown[], method: string) => string | undefined;\n getMessageId?: (args: readonly unknown[], method: string) => string | undefined;\n getPayload?: (args: readonly unknown[], method: string) => unknown;\n level?: (durationMs: number, error: unknown, info: QueueOperationInfo) => LoggerLevel;\n}\n\ntype QueueMethod = (this: unknown, ...args: unknown[]) => unknown;\n\nconst defaultMethods = [\n \"add\",\n \"ack\",\n \"consume\",\n \"dequeue\",\n \"nack\",\n \"process\",\n \"publish\",\n \"receive\",\n \"send\",\n \"sendToQueue\",\n] as const;\nconst defaultRandom = () => Math.random();\n\nfunction defaultLevel(_durationMs: number, error: unknown): LoggerLevel {\n return error ? \"error\" : \"debug\";\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction defaultOperation(method: string): QueueOperation {\n switch (method) {\n case \"add\":\n case \"publish\":\n case \"send\":\n case \"sendToQueue\":\n return \"publish\";\n case \"consume\":\n case \"dequeue\":\n case \"process\":\n case \"receive\":\n return \"consume\";\n case \"ack\":\n return \"ack\";\n case \"nack\":\n return \"nack\";\n default:\n return \"other\";\n }\n}\n\nfunction defaultPayload(args: readonly unknown[]) {\n return typeof args[0] === \"string\" && args.length > 1 ? args[1] : args[0];\n}\n\nfunction defaultMessageId(args: readonly unknown[]) {\n const payload = defaultPayload(args);\n if (typeof payload !== \"object\" || payload === null) return undefined;\n const value =\n (payload as { id?: unknown; messageId?: unknown }).messageId ??\n (payload as { id?: unknown }).id;\n return value === undefined ? undefined : String(value);\n}\n\nfunction payloadFor(args: readonly unknown[], method: string, options: QueueIntegrationOptions) {\n if (!options.capturePayload) return undefined;\n const payload = options.getPayload?.(args, method) ?? defaultPayload(args);\n return payload === undefined\n ? undefined\n : normalizeValue(payload, { maxDepth: 4, maxObjectKeys: 80 });\n}\n\nexport function queueIntegration(options: QueueIntegrationOptions = {}): Integration {\n const targets =\n options.targets ??\n (options.client\n ? [\n {\n client: options.client,\n name: options.name,\n system: options.system,\n queueName: options.queueName,\n methods: options.methods,\n },\n ]\n : []);\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const levelFor = options.level ?? defaultLevel;\n\n const shouldCapture = (durationMs: number, error: unknown) => {\n if (error) return true;\n if (options.minDurationMs !== undefined && durationMs >= options.minDurationMs) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return {\n name: \"queue\",\n setup(api: IntegrationSetupContext) {\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const captureResult = (\n info: QueueOperationInfo,\n started: number,\n args: readonly unknown[],\n error: unknown,\n ) => {\n const durationMs = Date.now() - started;\n if (disposed || !shouldCapture(durationMs, error)) return;\n capture({\n level: levelFor(durationMs, error, info),\n message: error\n ? `Queue error ${info.operation} ${info.queueName ?? info.method}`\n : `Queue ${info.operation} ${info.queueName ?? info.method}`,\n error,\n props: {\n queue: {\n kind: info.target,\n system: info.system,\n queueName: info.queueName,\n method: info.method,\n operation: info.operation,\n durationMs,\n messageId: options.getMessageId?.(args, info.method) ?? defaultMessageId(args),\n payload: payloadFor(args, info.method, options),\n },\n },\n });\n };\n\n for (const target of targets) {\n const methods = target.methods ?? options.methods ?? defaultMethods;\n for (const method of methods) {\n const original = target.client[method];\n if (typeof original !== \"function\") continue;\n const originalMethod = original as QueueMethod;\n const targetName = target.name ?? options.name ?? \"queue\";\n const system = target.system ?? options.system;\n\n target.client[method] = function wrappedQueueMethod(this: unknown, ...args: unknown[]) {\n const started = Date.now();\n const operation = options.getOperation?.(method, args) ?? defaultOperation(method);\n const info: QueueOperationInfo = {\n target: targetName,\n system,\n queueName:\n options.getQueueName?.(args, method) ??\n target.queueName ??\n options.queueName ??\n (typeof args[0] === \"string\" ? args[0] : undefined),\n method,\n operation,\n };\n try {\n const result = originalMethod.apply(this, args);\n if (isPromiseLike(result)) {\n return result.then(\n (value) => {\n captureResult(info, started, args, undefined);\n return value;\n },\n (error) => {\n captureResult(info, started, args, error);\n throw error;\n },\n );\n }\n captureResult(info, started, args, undefined);\n return result;\n } catch (error) {\n captureResult(info, started, args, error);\n throw error;\n }\n };\n\n disposers.push(() => {\n target.client[method] = originalMethod;\n });\n }\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import {\n queueIntegration,\n type QueueClientLike,\n type QueueIntegrationOptions,\n} from \"./queue-integration\";\n\nexport interface BullMqIntegrationOptions extends Omit<\n QueueIntegrationOptions,\n \"client\" | \"system\" | \"methods\" | \"getQueueName\"\n> {\n client: QueueClientLike & { name?: string };\n methods?: readonly string[];\n}\n\nconst bullMqMethods = [\"add\", \"addBulk\", \"process\"] as const;\n\nfunction queueName(args: readonly unknown[], fallback: string | undefined) {\n const first = args[0];\n return typeof first === \"string\" ? first : fallback;\n}\n\nexport function bullMqIntegration(options: BullMqIntegrationOptions) {\n return queueIntegration({\n ...options,\n name: options.name ?? \"bullmq\",\n system: \"bullmq\",\n methods: options.methods ?? bullMqMethods,\n queueName: options.queueName ?? options.client.name,\n getQueueName: (args) => queueName(args, options.queueName ?? options.client.name),\n });\n}\n","import {\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport interface CliProcessLike {\n argv?: readonly string[];\n env?: Record<string, string | undefined>;\n exitCode?: number | string | null;\n cwd?: () => string;\n on?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n off?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n removeListener?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n}\n\nexport interface CaptureCliOptions {\n name?: string;\n process?: CliProcessLike;\n captureStart?: boolean;\n captureExit?: boolean;\n captureSignals?: boolean;\n captureCwd?: boolean;\n captureEnv?: readonly string[];\n signals?: readonly string[];\n level?:\n | LoggerLevel\n | ((event: \"start\" | \"exit\" | \"signal\", code?: number | string) => LoggerLevel);\n getCommand?: (argv: readonly string[]) => string | undefined;\n sanitizeArg?: (arg: string, index: number, argv: readonly string[]) => string;\n}\n\nconst defaultSignals = [\"SIGINT\", \"SIGTERM\"] as const;\n\nfunction defaultProcess(): CliProcessLike | undefined {\n return (globalThis as unknown as { process?: CliProcessLike }).process;\n}\n\nfunction defaultSanitizeArg(arg: string) {\n if (/^(--?[^=\\s]*(token|password|passwd|secret|key)[^=\\s]*=)/i.test(arg)) {\n return arg.replace(/=.*/, \"=[redacted]\");\n }\n return arg;\n}\n\nfunction defaultCommand(argv: readonly string[]): string | undefined {\n return argv[1] ?? argv[0];\n}\n\nfunction levelFor(\n level: CaptureCliOptions[\"level\"],\n event: \"start\" | \"exit\" | \"signal\",\n code?: number | string,\n): LoggerLevel {\n if (typeof level === \"function\") return level(event, code);\n if (level) return level;\n if (event === \"signal\") return \"warn\";\n if (event === \"exit\" && Number(code ?? 0) !== 0) return \"error\";\n return \"info\";\n}\n\nfunction pickEnv(\n env: Record<string, string | undefined> | undefined,\n names: readonly string[] | undefined,\n) {\n if (!env || !names || names.length === 0) return undefined;\n const out: Record<string, string> = {};\n for (const name of names) {\n const value = env[name];\n if (value !== undefined) out[name] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction removeListener(\n processLike: CliProcessLike,\n event: string,\n listener: (...args: unknown[]) => void,\n) {\n if (processLike.off) {\n processLike.off(event, listener);\n return;\n }\n processLike.removeListener?.(event, listener);\n}\n\nexport function captureCliIntegration(options: CaptureCliOptions = {}): Integration {\n const name = options.name ?? \"cli\";\n const captureStart = options.captureStart ?? true;\n const captureExit = options.captureExit ?? true;\n const captureSignals = options.captureSignals ?? true;\n const captureCwd = options.captureCwd ?? true;\n const signals = options.signals ?? defaultSignals;\n const sanitizeArg = options.sanitizeArg ?? defaultSanitizeArg;\n const commandFor = options.getCommand ?? defaultCommand;\n\n return {\n name: \"capture-cli\",\n setup(api: IntegrationSetupContext) {\n const processLike = options.process ?? defaultProcess();\n if (!processLike) return;\n const argv = processLike.argv ?? [];\n const command = commandFor(argv);\n const sanitizedArgv = argv.map((arg, index) => sanitizeArg(arg, index, argv));\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const capture = api.guard((input: CaptureInput) => {\n if (!disposed) api.capture(input);\n });\n const cliBase = {\n kind: name,\n command,\n argv: sanitizedArgv,\n cwd: captureCwd ? processLike.cwd?.() : undefined,\n env: pickEnv(processLike.env, options.captureEnv),\n };\n\n if (captureStart) {\n capture({\n level: levelFor(options.level, \"start\"),\n message: `CLI start${command ? ` ${command}` : \"\"}`,\n props: {\n cli: {\n ...cliBase,\n lifecycle: \"start\",\n },\n },\n });\n }\n\n if (captureExit && processLike.on) {\n const onExit = (code: unknown) => {\n const exitCode = code ?? processLike.exitCode ?? 0;\n capture({\n level: levelFor(options.level, \"exit\", exitCode as number | string),\n message: `CLI exit ${String(exitCode)}`,\n props: {\n cli: {\n ...cliBase,\n lifecycle: \"exit\",\n exitCode,\n },\n },\n });\n };\n processLike.on(\"exit\", onExit);\n disposers.push(() => removeListener(processLike, \"exit\", onExit));\n }\n\n if (captureSignals && processLike.on) {\n for (const signal of signals) {\n const onSignal = () => {\n capture({\n level: levelFor(options.level, \"signal\", signal),\n message: `CLI signal ${signal}`,\n props: {\n cli: {\n ...cliBase,\n lifecycle: \"signal\",\n signal,\n },\n },\n });\n };\n processLike.on(signal, onSignal);\n disposers.push(() => removeListener(processLike, signal, onSignal));\n }\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import {\n normalizeValue,\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport interface DatabaseClientLike {\n [method: string]: unknown;\n}\n\nexport interface DatabaseIntegrationTarget {\n client: DatabaseClientLike;\n name?: string;\n system?: string;\n methods?: readonly string[];\n}\n\nexport interface DatabaseOperationInfo {\n target: string;\n system?: string;\n method: string;\n statement?: string;\n}\n\nexport interface DatabaseIntegrationOptions {\n client?: DatabaseClientLike;\n targets?: readonly DatabaseIntegrationTarget[];\n name?: string;\n system?: string;\n methods?: readonly string[];\n captureAll?: boolean;\n captureSuccessful?: boolean;\n minDurationMs?: number;\n sampleRate?: number;\n random?: () => number;\n captureParameters?: boolean;\n sanitizeStatement?: (statement: string) => string;\n getStatement?: (args: readonly unknown[], method: string) => string | undefined;\n level?: (durationMs: number, error: unknown, info: DatabaseOperationInfo) => LoggerLevel;\n}\n\ntype DatabaseMethod = (this: unknown, ...args: unknown[]) => unknown;\n\nconst defaultMethods = [\"query\", \"execute\", \"run\", \"all\", \"get\"] as const;\nconst defaultRandom = () => Math.random();\n\nfunction defaultLevel(_durationMs: number, error: unknown): LoggerLevel {\n return error ? \"error\" : \"debug\";\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction defaultStatement(args: readonly unknown[]): string | undefined {\n const first = args[0];\n if (typeof first === \"string\") return first;\n if (typeof first !== \"object\" || first === null) return undefined;\n const input = first as { sql?: unknown; text?: unknown; query?: unknown };\n if (typeof input.sql === \"string\") return input.sql;\n if (typeof input.text === \"string\") return input.text;\n if (typeof input.query === \"string\") return input.query;\n return undefined;\n}\n\nfunction statementFor(\n args: readonly unknown[],\n method: string,\n options: DatabaseIntegrationOptions,\n) {\n const statement = options.getStatement?.(args, method) ?? defaultStatement(args);\n return statement && options.sanitizeStatement ? options.sanitizeStatement(statement) : statement;\n}\n\nfunction parametersFor(args: readonly unknown[], captureParameters: boolean) {\n if (!captureParameters) return undefined;\n const first = args[0];\n const second = args[1];\n const parameters =\n second ??\n (typeof first === \"object\" && first\n ? ((first as { values?: unknown; params?: unknown; parameters?: unknown }).values ??\n (first as { params?: unknown }).params ??\n (first as { parameters?: unknown }).parameters)\n : undefined);\n return parameters === undefined\n ? undefined\n : normalizeValue(parameters, { maxDepth: 4, maxObjectKeys: 80 });\n}\n\nexport function databaseIntegration(options: DatabaseIntegrationOptions = {}): Integration {\n const targets =\n options.targets ??\n (options.client\n ? [\n {\n client: options.client,\n name: options.name,\n system: options.system,\n methods: options.methods,\n },\n ]\n : []);\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const levelFor = options.level ?? defaultLevel;\n\n const shouldCapture = (durationMs: number, error: unknown) => {\n if (error) return true;\n if (options.minDurationMs !== undefined && durationMs >= options.minDurationMs) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return {\n name: \"database\",\n setup(api: IntegrationSetupContext) {\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const captureResult = (\n info: DatabaseOperationInfo,\n started: number,\n args: readonly unknown[],\n error: unknown,\n ) => {\n const durationMs = Date.now() - started;\n if (disposed || !shouldCapture(durationMs, error)) return;\n capture({\n level: levelFor(durationMs, error, info),\n message: error\n ? `Database error ${info.method}${info.statement ? ` ${info.statement}` : \"\"}`\n : `Database ${info.method}${info.statement ? ` ${info.statement}` : \"\"}`,\n error,\n props: {\n db: {\n kind: info.target,\n system: info.system,\n method: info.method,\n statement: info.statement,\n durationMs,\n parameters: parametersFor(args, options.captureParameters ?? false),\n },\n },\n });\n };\n\n for (const target of targets) {\n const methods = target.methods ?? options.methods ?? defaultMethods;\n for (const method of methods) {\n const original = target.client[method];\n if (typeof original !== \"function\") continue;\n const originalMethod = original as DatabaseMethod;\n const targetName = target.name ?? options.name ?? \"database\";\n const system = target.system ?? options.system;\n\n target.client[method] = function wrappedDatabaseMethod(\n this: unknown,\n ...args: unknown[]\n ) {\n const started = Date.now();\n const info: DatabaseOperationInfo = {\n target: targetName,\n system,\n method,\n statement: statementFor(args, method, options),\n };\n try {\n const result = originalMethod.apply(this, args);\n if (isPromiseLike(result)) {\n return result.then(\n (value) => {\n captureResult(info, started, args, undefined);\n return value;\n },\n (error) => {\n captureResult(info, started, args, error);\n throw error;\n },\n );\n }\n captureResult(info, started, args, undefined);\n return result;\n } catch (error) {\n captureResult(info, started, args, error);\n throw error;\n }\n };\n\n disposers.push(() => {\n target.client[method] = originalMethod;\n });\n }\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import { withContext, type LoggerLevel, type LoggerLike, type LogData } from \"@loggerjs/core\";\n\nexport interface ExpressRequestLike {\n method?: string;\n originalUrl?: string;\n url?: string;\n path?: string;\n headers?: Record<string, string | string[] | undefined>;\n ip?: string;\n route?: { path?: string };\n socket?: { remoteAddress?: string };\n [key: string]: unknown;\n}\n\nexport interface ExpressResponseLike {\n statusCode?: number;\n writableEnded?: boolean;\n headersSent?: boolean;\n getHeader?: (name: string) => number | string | string[] | undefined;\n once?: (event: \"finish\" | \"close\", listener: () => void) => unknown;\n on?: (event: \"finish\" | \"close\", listener: () => void) => unknown;\n off?: (event: \"finish\" | \"close\", listener: () => void) => unknown;\n removeListener?: (event: \"finish\" | \"close\", listener: () => void) => unknown;\n}\n\nexport type ExpressNextFunction = (error?: unknown) => void;\nexport type ExpressRequestHandler = (\n req: ExpressRequestLike,\n res: ExpressResponseLike,\n next: ExpressNextFunction,\n) => void;\n\nexport interface ExpressIntegrationOptions {\n name?: string;\n minStatus?: number;\n captureAll?: boolean;\n captureSuccessful?: boolean;\n captureAborted?: boolean;\n sampleRate?: number;\n random?: () => number;\n bindContext?: boolean;\n captureRequestHeaders?: readonly string[];\n captureResponseHeaders?: readonly string[];\n sanitizeUrl?: (url: string) => string;\n getRequestId?: (req: ExpressRequestLike, res: ExpressResponseLike) => string | undefined;\n getRoute?: (req: ExpressRequestLike) => string | undefined;\n context?: (\n req: ExpressRequestLike,\n res: ExpressResponseLike,\n ) => Record<string, unknown> | undefined;\n level?: (\n status: number,\n req: ExpressRequestLike,\n res: ExpressResponseLike,\n aborted: boolean,\n ) => LoggerLevel;\n}\n\nconst defaultRandom = () => Math.random();\n\nfunction defaultSanitizeUrl(url: string): string {\n const queryIndex = url.indexOf(\"?\");\n const hashIndex = url.indexOf(\"#\");\n const end = Math.min(\n queryIndex >= 0 ? queryIndex : url.length,\n hashIndex >= 0 ? hashIndex : url.length,\n );\n return url.slice(0, end);\n}\n\nfunction defaultLevel(\n status: number,\n _req: ExpressRequestLike,\n _res: ExpressResponseLike,\n aborted: boolean,\n): LoggerLevel {\n if (aborted) return \"warn\";\n if (status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nfunction requestUrl(req: ExpressRequestLike): string {\n return req.originalUrl ?? req.url ?? req.path ?? \"/\";\n}\n\nfunction headerValue(value: number | string | string[] | undefined): string | string[] | undefined {\n if (typeof value === \"number\") return String(value);\n return value;\n}\n\nfunction pickRequestHeaders(\n req: ExpressRequestLike,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !req.headers) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const value = req.headers[name.toLowerCase()] ?? req.headers[name];\n if (value !== undefined) out[name.toLowerCase()] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction pickResponseHeaders(\n res: ExpressResponseLike,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !res.getHeader) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const value = headerValue(res.getHeader(name));\n if (value !== undefined) out[name.toLowerCase()] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction defaultRoute(req: ExpressRequestLike): string | undefined {\n const path = req.route?.path;\n return typeof path === \"string\" ? path : undefined;\n}\n\nfunction removeListener(res: ExpressResponseLike, event: \"finish\" | \"close\", listener: () => void) {\n if (res.off) {\n res.off(event, listener);\n return;\n }\n res.removeListener?.(event, listener);\n}\n\nfunction onResponseDone(res: ExpressResponseLike, event: \"finish\" | \"close\", listener: () => void) {\n if (res.once) {\n res.once(event, listener);\n return;\n }\n res.on?.(event, listener);\n}\n\nexport function expressIntegration(\n logger: LoggerLike,\n options: ExpressIntegrationOptions = {},\n): ExpressRequestHandler {\n const name = options.name ?? \"express\";\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const captureAborted = options.captureAborted ?? true;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const sanitizeUrl = options.sanitizeUrl ?? defaultSanitizeUrl;\n const levelFor = options.level ?? defaultLevel;\n const routeFor = options.getRoute ?? defaultRoute;\n const bindContext = options.bindContext ?? true;\n\n return (req, res, next) => {\n const started = Date.now();\n const method = (req.method ?? \"GET\").toUpperCase();\n const url = sanitizeUrl(requestUrl(req));\n const requestId = options.getRequestId?.(req, res);\n let completed = false;\n\n const context = {\n httpMethod: method,\n httpUrl: url,\n requestId,\n ...options.context?.(req, res),\n };\n\n const shouldCapture = (status: number, aborted: boolean) => {\n if (aborted && captureAborted) return true;\n if (status >= minStatus) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n const cleanup = () => {\n removeListener(res, \"finish\", onFinish);\n removeListener(res, \"close\", onClose);\n };\n\n const logRequest = (event: \"finish\" | \"close\") => {\n if (completed) return;\n completed = true;\n cleanup();\n const status = res.statusCode ?? 0;\n const aborted = event === \"close\" && res.writableEnded !== true;\n if (!shouldCapture(status, aborted)) return;\n const http: Record<string, unknown> = {\n kind: name,\n framework: \"express\",\n method,\n url,\n route: routeFor(req),\n status,\n durationMs: Date.now() - started,\n aborted,\n requestId,\n remoteAddress: req.ip ?? req.socket?.remoteAddress,\n requestHeaders: pickRequestHeaders(req, options.captureRequestHeaders),\n responseHeaders: pickResponseHeaders(res, options.captureResponseHeaders),\n };\n logger.log(levelFor(status, req, res, aborted), `Express ${status} ${method} ${url}`, {\n http,\n } as LogData);\n };\n\n const onFinish = () => logRequest(\"finish\");\n const onClose = () => logRequest(\"close\");\n onResponseDone(res, \"finish\", onFinish);\n onResponseDone(res, \"close\", onClose);\n\n if (bindContext) {\n withContext(context, () => next());\n return;\n }\n next();\n };\n}\n","import { withContext, type LoggerLevel, type LoggerLike, type LogData } from \"@loggerjs/core\";\n\nexport interface FastifyRequestLike {\n id?: string;\n method?: string;\n url?: string;\n headers?: Record<string, string | string[] | undefined>;\n ip?: string;\n routeOptions?: { url?: string };\n routerPath?: string;\n [key: string]: unknown;\n}\n\nexport interface FastifyReplyLike {\n statusCode?: number;\n getHeader?: (name: string) => number | string | string[] | undefined;\n [key: string]: unknown;\n}\n\nexport type FastifyDone = (error?: unknown) => void;\nexport type FastifyOnRequestHook = (\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n done: FastifyDone,\n) => void;\nexport type FastifyOnResponseHook = (\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n done: FastifyDone,\n) => void;\nexport type FastifyOnErrorHook = (\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n error: unknown,\n done: FastifyDone,\n) => void;\n\nexport interface FastifyInstanceLike {\n addHook: (\n name: \"onRequest\" | \"onResponse\" | \"onError\",\n hook: FastifyOnRequestHook | FastifyOnResponseHook | FastifyOnErrorHook,\n ) => unknown;\n}\n\nexport type FastifyPluginCallback = (\n instance: FastifyInstanceLike,\n options: unknown,\n done?: FastifyDone,\n) => void;\n\nexport interface FastifyIntegrationOptions {\n name?: string;\n minStatus?: number;\n captureAll?: boolean;\n captureSuccessful?: boolean;\n sampleRate?: number;\n random?: () => number;\n bindContext?: boolean;\n captureRequestHeaders?: readonly string[];\n captureResponseHeaders?: readonly string[];\n sanitizeUrl?: (url: string) => string;\n getRequestId?: (request: FastifyRequestLike, reply: FastifyReplyLike) => string | undefined;\n getRoute?: (request: FastifyRequestLike) => string | undefined;\n context?: (\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n ) => Record<string, unknown> | undefined;\n level?: (\n status: number,\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n error: unknown,\n ) => LoggerLevel;\n}\n\ninterface RequestState {\n started: number;\n error?: unknown;\n}\n\nconst defaultRandom = () => Math.random();\n\nfunction defaultSanitizeUrl(url: string): string {\n const queryIndex = url.indexOf(\"?\");\n const hashIndex = url.indexOf(\"#\");\n const end = Math.min(\n queryIndex >= 0 ? queryIndex : url.length,\n hashIndex >= 0 ? hashIndex : url.length,\n );\n return url.slice(0, end);\n}\n\nfunction defaultLevel(\n status: number,\n _request: FastifyRequestLike,\n _reply: FastifyReplyLike,\n error: unknown,\n): LoggerLevel {\n if (error || status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nfunction headerValue(value: number | string | string[] | undefined): string | string[] | undefined {\n if (typeof value === \"number\") return String(value);\n return value;\n}\n\nfunction pickRequestHeaders(\n request: FastifyRequestLike,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !request.headers) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const value = request.headers[name.toLowerCase()] ?? request.headers[name];\n if (value !== undefined) out[name.toLowerCase()] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction pickResponseHeaders(\n reply: FastifyReplyLike,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !reply.getHeader) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const value = headerValue(reply.getHeader(name));\n if (value !== undefined) out[name.toLowerCase()] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction defaultRoute(request: FastifyRequestLike): string | undefined {\n return request.routeOptions?.url ?? request.routerPath;\n}\n\nexport function fastifyIntegration(\n logger: LoggerLike,\n options: FastifyIntegrationOptions = {},\n): FastifyPluginCallback {\n const name = options.name ?? \"fastify\";\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const sanitizeUrl = options.sanitizeUrl ?? defaultSanitizeUrl;\n const levelFor = options.level ?? defaultLevel;\n const routeFor = options.getRoute ?? defaultRoute;\n const bindContext = options.bindContext ?? true;\n const states = new WeakMap<FastifyRequestLike, RequestState>();\n\n const shouldCapture = (status: number, error: unknown) => {\n if (error) return true;\n if (status >= minStatus) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return (instance, _pluginOptions, done) => {\n instance.addHook(\n \"onRequest\",\n (request: FastifyRequestLike, reply: FastifyReplyLike, next: FastifyDone) => {\n const method = (request.method ?? \"GET\").toUpperCase();\n const url = sanitizeUrl(request.url ?? \"/\");\n const requestId = options.getRequestId?.(request, reply) ?? request.id;\n states.set(request, { started: Date.now() });\n const context = {\n httpMethod: method,\n httpUrl: url,\n requestId,\n ...options.context?.(request, reply),\n };\n if (bindContext) {\n withContext(context, () => next());\n return;\n }\n next();\n },\n );\n\n instance.addHook(\n \"onError\",\n (\n request: FastifyRequestLike,\n _reply: FastifyReplyLike,\n error: unknown,\n next: FastifyDone,\n ) => {\n const state = states.get(request);\n if (state) state.error = error;\n else states.set(request, { started: Date.now(), error });\n next();\n },\n );\n\n instance.addHook(\n \"onResponse\",\n (request: FastifyRequestLike, reply: FastifyReplyLike, next: FastifyDone) => {\n const state = states.get(request) ?? { started: Date.now() };\n states.delete(request);\n const status = reply.statusCode ?? 0;\n const error = state.error;\n if (!shouldCapture(status, error)) {\n next();\n return;\n }\n\n const method = (request.method ?? \"GET\").toUpperCase();\n const url = sanitizeUrl(request.url ?? \"/\");\n const requestId = options.getRequestId?.(request, reply) ?? request.id;\n const http: Record<string, unknown> = {\n kind: name,\n framework: \"fastify\",\n method,\n url,\n route: routeFor(request),\n status,\n durationMs: Date.now() - state.started,\n requestId,\n remoteAddress: request.ip,\n requestHeaders: pickRequestHeaders(request, options.captureRequestHeaders),\n responseHeaders: pickResponseHeaders(reply, options.captureResponseHeaders),\n };\n const data: Record<string, unknown> = { http };\n if (error) data.error = error;\n logger.log(levelFor(status, request, reply, error), `Fastify ${status} ${method} ${url}`, {\n ...data,\n } as LogData);\n next();\n },\n );\n\n done?.();\n };\n}\n","import { withContext, type LoggerLevel, type LoggerLike, type LogData } from \"@loggerjs/core\";\n\nexport interface HapiRequestLike {\n method?: string;\n path?: string;\n url?: { pathname?: string };\n info?: { id?: string; received?: number; remoteAddress?: string };\n response?: { statusCode?: number } | { isBoom?: boolean; output?: { statusCode?: number } };\n app?: Record<string, unknown>;\n}\n\nexport interface HapiToolkitLike {\n continue: unknown;\n}\n\nexport interface HapiServerLike {\n ext: (\n event: \"onRequest\",\n handler: (request: HapiRequestLike, h: HapiToolkitLike) => unknown,\n ) => unknown;\n events?: {\n on?: (event: \"response\", handler: (request: HapiRequestLike) => void) => unknown;\n };\n}\n\nexport interface HapiIntegrationOptions {\n minStatus?: number;\n captureAll?: boolean;\n bindContext?: boolean;\n getRequestId?: (request: HapiRequestLike) => string | undefined;\n context?: (request: HapiRequestLike) => Record<string, unknown> | undefined;\n level?: (status: number, request: HapiRequestLike) => LoggerLevel;\n}\n\nfunction responseStatus(response: HapiRequestLike[\"response\"]): number {\n if (!response) return 200;\n if (\"statusCode\" in response && typeof response.statusCode === \"number\")\n return response.statusCode;\n if (\"output\" in response && typeof response.output?.statusCode === \"number\") {\n return response.output.statusCode;\n }\n return 200;\n}\n\nfunction levelFor(status: number): LoggerLevel {\n if (status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nexport function hapiIntegration(logger: LoggerLike, options: HapiIntegrationOptions = {}) {\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? false;\n const bindContext = options.bindContext ?? true;\n const getLevel = options.level ?? levelFor;\n\n return {\n name: \"loggerjs-hapi\",\n register(server: HapiServerLike) {\n server.ext(\"onRequest\", (request, h) => {\n const method = (request.method ?? \"GET\").toUpperCase();\n const url = request.url?.pathname ?? request.path ?? \"/\";\n const requestId = options.getRequestId?.(request) ?? request.info?.id;\n const context = {\n httpMethod: method,\n httpUrl: url,\n requestId,\n ...options.context?.(request),\n };\n request.app = { ...request.app, loggerjsStartedAt: Date.now() };\n if (bindContext) return withContext(context, () => h.continue);\n return h.continue;\n });\n\n server.events?.on?.(\"response\", (request) => {\n const status = responseStatus(request.response);\n if (!captureAll && status < minStatus) return;\n const method = (request.method ?? \"GET\").toUpperCase();\n const url = request.url?.pathname ?? request.path ?? \"/\";\n const requestId = options.getRequestId?.(request) ?? request.info?.id;\n const started = request.app?.loggerjsStartedAt as number | undefined;\n logger.log(getLevel(status, request), `Hapi ${status} ${method} ${url}`, {\n http: {\n framework: \"hapi\",\n kind: \"hapi\",\n method,\n url,\n status,\n durationMs: started ? Date.now() - started : undefined,\n requestId,\n remoteAddress: request.info?.remoteAddress,\n },\n } as LogData);\n });\n },\n };\n}\n","import { withContext, type LoggerLevel, type LoggerLike, type LogData } from \"@loggerjs/core\";\n\nexport interface KoaContextLike {\n method?: string;\n originalUrl?: string;\n url?: string;\n path?: string;\n status?: number;\n ip?: string;\n state?: Record<string, unknown>;\n request?: { headers?: Record<string, string | string[] | undefined> };\n}\n\nexport type KoaNext = () => Promise<unknown>;\nexport type KoaMiddleware = (ctx: KoaContextLike, next: KoaNext) => Promise<void>;\n\nexport interface KoaIntegrationOptions {\n minStatus?: number;\n captureAll?: boolean;\n bindContext?: boolean;\n sanitizeUrl?: (url: string) => string;\n getRequestId?: (ctx: KoaContextLike) => string | undefined;\n context?: (ctx: KoaContextLike) => Record<string, unknown> | undefined;\n level?: (status: number, ctx: KoaContextLike, error: unknown) => LoggerLevel;\n}\n\nfunction sanitizeUrl(url: string): string {\n return url.split(/[?#]/, 1)[0] || \"/\";\n}\n\nfunction levelFor(status: number, _ctx: KoaContextLike, error: unknown): LoggerLevel {\n if (error || status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nexport function koaIntegration(\n logger: LoggerLike,\n options: KoaIntegrationOptions = {},\n): KoaMiddleware {\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? false;\n const bindContext = options.bindContext ?? true;\n const sanitize = options.sanitizeUrl ?? sanitizeUrl;\n const getLevel = options.level ?? levelFor;\n\n return async (ctx, next) => {\n const started = Date.now();\n const method = (ctx.method ?? \"GET\").toUpperCase();\n const url = sanitize(ctx.originalUrl ?? ctx.url ?? ctx.path ?? \"/\");\n const requestId = options.getRequestId?.(ctx) ?? (ctx.state?.requestId as string | undefined);\n const context = { httpMethod: method, httpUrl: url, requestId, ...options.context?.(ctx) };\n let error: unknown;\n try {\n if (bindContext) await withContext(context, next);\n else await next();\n } catch (caught) {\n error = caught;\n throw caught;\n } finally {\n const status = ctx.status ?? (error ? 500 : 200);\n if (error || captureAll || status >= minStatus) {\n logger.log(getLevel(status, ctx, error), `Koa ${status} ${method} ${url}`, {\n http: {\n framework: \"koa\",\n kind: \"koa\",\n method,\n url,\n status,\n durationMs: Date.now() - started,\n requestId,\n remoteAddress: ctx.ip,\n },\n error,\n } as LogData);\n }\n }\n };\n}\n","import type { LoggerLike } from \"@loggerjs/core\";\nimport {\n expressIntegration,\n type ExpressIntegrationOptions,\n type ExpressRequestHandler,\n} from \"./express-integration\";\n\nexport type NestMiddleware = ExpressRequestHandler;\n\nexport function nestMiddlewareIntegration(\n logger: LoggerLike,\n options: ExpressIntegrationOptions = {},\n): NestMiddleware {\n return expressIntegration(logger, {\n name: \"nestjs\",\n ...options,\n });\n}\n","import {\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport interface NodeFetchHeadersLike {\n get?: (name: string) => string | null;\n [key: string]: unknown;\n}\n\nexport interface NodeFetchRequestLike {\n url?: string;\n method?: string;\n headers?: NodeFetchHeadersLike | Record<string, unknown>;\n}\n\nexport interface NodeFetchInitLike {\n method?: string;\n headers?: NodeFetchHeadersLike | Record<string, unknown>;\n}\n\nexport interface NodeFetchResponseLike {\n status?: number;\n headers?: NodeFetchHeadersLike | Record<string, unknown>;\n}\n\nexport type NodeFetchFunction = (\n input: string | URL | NodeFetchRequestLike,\n init?: NodeFetchInitLike,\n) => Promise<NodeFetchResponseLike>;\n\nexport interface NodeFetchTargetLike {\n fetch?: NodeFetchFunction;\n}\n\nexport interface NodeFetchRequestInfo {\n method: string;\n url: string;\n requestHeaders?: Record<string, string>;\n}\n\nexport interface NodeFetchIntegrationOptions {\n name?: string;\n minStatus?: number;\n captureAll?: boolean;\n captureSuccessful?: boolean;\n sampleRate?: number;\n random?: () => number;\n captureRequestHeaders?: readonly string[];\n captureResponseHeaders?: readonly string[];\n sanitizeUrl?: (url: string) => string;\n level?: (status: number | undefined, error: unknown, info: NodeFetchRequestInfo) => LoggerLevel;\n target?: NodeFetchTargetLike;\n}\n\nconst defaultRandom = () => Math.random();\n\nfunction defaultSanitizeUrl(url: string): string {\n const queryIndex = url.indexOf(\"?\");\n const hashIndex = url.indexOf(\"#\");\n const end = Math.min(\n queryIndex >= 0 ? queryIndex : url.length,\n hashIndex >= 0 ? hashIndex : url.length,\n );\n return url.slice(0, end);\n}\n\nfunction defaultLevel(status: number | undefined, error: unknown): LoggerLevel {\n if (error || status === undefined || status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nfunction isUrlLike(value: unknown): value is URL {\n return typeof URL !== \"undefined\" && value instanceof URL;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction headerValue(headers: unknown, name: string): string | undefined {\n if (!isObject(headers)) return undefined;\n if (typeof (headers as NodeFetchHeadersLike).get === \"function\") {\n return (headers as NodeFetchHeadersLike).get?.(name) ?? undefined;\n }\n const value = headers[name.toLowerCase()] ?? headers[name];\n return value === undefined ? undefined : String(value);\n}\n\nfunction pickHeaders(\n headers: unknown,\n names: readonly string[] | undefined,\n): Record<string, string> | undefined {\n if (!names || names.length === 0) return undefined;\n const out: Record<string, string> = {};\n for (const name of names) {\n const lowerName = name.toLowerCase();\n const value = headerValue(headers, lowerName) ?? headerValue(headers, name);\n if (value !== undefined) out[lowerName] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction requestInfo(\n input: string | URL | NodeFetchRequestLike,\n init: NodeFetchInitLike | undefined,\n sanitizeUrl: (url: string) => string,\n captureRequestHeaders: readonly string[] | undefined,\n): NodeFetchRequestInfo {\n const request =\n isObject(input) && !isUrlLike(input) ? (input as NodeFetchRequestLike) : undefined;\n const method = (init?.method ?? request?.method ?? \"GET\").toUpperCase();\n const url = isUrlLike(input)\n ? input.href\n : typeof input === \"string\"\n ? input\n : (request?.url ?? \"/\");\n return {\n method,\n url: sanitizeUrl(url),\n requestHeaders: pickHeaders(init?.headers ?? request?.headers, captureRequestHeaders),\n };\n}\n\nfunction statusMessage(status: number | undefined) {\n return status === undefined ? \"unknown\" : String(status);\n}\n\nexport function nodeFetchIntegration(options: NodeFetchIntegrationOptions = {}): Integration {\n const name = options.name ?? \"node-fetch\";\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const sanitizeUrl = options.sanitizeUrl ?? defaultSanitizeUrl;\n const levelFor = options.level ?? defaultLevel;\n\n const shouldCapture = (status: number | undefined, error: unknown) => {\n if (error) return true;\n if (status !== undefined && status >= minStatus) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return {\n name: \"node-fetch\",\n setup(api: IntegrationSetupContext) {\n const target = options.target ?? (globalThis as unknown as NodeFetchTargetLike);\n if (!target.fetch) return;\n\n const originalFetch = target.fetch;\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n let disposed = false;\n\n const captureResult = (\n info: NodeFetchRequestInfo,\n durationMs: number,\n status: number | undefined,\n error: unknown,\n responseHeaders?: Record<string, string>,\n ) => {\n if (disposed || !shouldCapture(status, error)) return;\n capture({\n level: levelFor(status, error, info),\n message: error\n ? `Fetch error ${info.method} ${info.url}`\n : `Fetch ${statusMessage(status)} ${info.method} ${info.url}`,\n error,\n props: {\n http: {\n kind: name,\n runtime: \"node\",\n instrument: \"fetch\",\n direction: \"outgoing\",\n method: info.method,\n url: info.url,\n status,\n durationMs,\n requestHeaders: info.requestHeaders,\n responseHeaders,\n },\n },\n });\n };\n\n target.fetch = async function patchedFetch(\n this: unknown,\n input: string | URL | NodeFetchRequestLike,\n init?: NodeFetchInitLike,\n ) {\n const started = Date.now();\n const info = requestInfo(input, init, sanitizeUrl, options.captureRequestHeaders);\n try {\n const response = await originalFetch.call(this, input, init);\n captureResult(\n info,\n Date.now() - started,\n response.status,\n undefined,\n pickHeaders(response.headers, options.captureResponseHeaders),\n );\n return response;\n } catch (error) {\n captureResult(info, Date.now() - started, undefined, error);\n throw error;\n }\n };\n\n return () => {\n if (disposed) return;\n disposed = true;\n target.fetch = originalFetch;\n };\n },\n };\n}\n","import { createRequire } from \"node:module\";\nimport {\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport interface NodeHttpClientRequestLike {\n once?: (event: \"response\" | \"error\", listener: (...args: unknown[]) => void) => unknown;\n on?: (event: \"response\" | \"error\", listener: (...args: unknown[]) => void) => unknown;\n off?: (event: \"response\" | \"error\", listener: (...args: unknown[]) => void) => unknown;\n removeListener?: (event: \"response\" | \"error\", listener: (...args: unknown[]) => void) => unknown;\n end?: (...args: unknown[]) => unknown;\n}\n\nexport interface NodeHttpIncomingMessageLike {\n statusCode?: number;\n headers?: Record<string, number | string | string[] | undefined>;\n}\n\nexport type NodeHttpRequestFunction = (\n this: unknown,\n ...args: unknown[]\n) => NodeHttpClientRequestLike;\n\nexport interface NodeHttpModuleLike {\n request?: NodeHttpRequestFunction;\n get?: NodeHttpRequestFunction;\n}\n\nexport interface NodeHttpClientRequestInfo {\n protocol: \"http:\" | \"https:\" | string;\n method: string;\n url: string;\n requestHeaders?: Record<string, string | string[]>;\n}\n\nexport interface NodeHttpClientIntegrationOptions {\n name?: string;\n minStatus?: number;\n captureAll?: boolean;\n captureSuccessful?: boolean;\n sampleRate?: number;\n random?: () => number;\n captureRequestHeaders?: readonly string[];\n captureResponseHeaders?: readonly string[];\n sanitizeUrl?: (url: string) => string;\n level?: (\n status: number | undefined,\n error: unknown,\n info: NodeHttpClientRequestInfo,\n ) => LoggerLevel;\n httpModule?: NodeHttpModuleLike | null;\n httpsModule?: NodeHttpModuleLike | null;\n}\n\nconst requireBuiltin = createRequire(import.meta.url);\nconst defaultRandom = () => Math.random();\n\nlet cachedHttpModule: NodeHttpModuleLike | null | undefined;\nlet cachedHttpsModule: NodeHttpModuleLike | null | undefined;\n\nfunction loadBuiltin(name: \"node:http\" | \"node:https\", fallback: \"http\" | \"https\") {\n try {\n return requireBuiltin(name) as NodeHttpModuleLike;\n } catch {\n try {\n return requireBuiltin(fallback) as NodeHttpModuleLike;\n } catch {\n return null;\n }\n }\n}\n\nfunction loadHttpModule() {\n if (cachedHttpModule !== undefined) return cachedHttpModule;\n cachedHttpModule = loadBuiltin(\"node:http\", \"http\");\n return cachedHttpModule;\n}\n\nfunction loadHttpsModule() {\n if (cachedHttpsModule !== undefined) return cachedHttpsModule;\n cachedHttpsModule = loadBuiltin(\"node:https\", \"https\");\n return cachedHttpsModule;\n}\n\nfunction defaultSanitizeUrl(url: string): string {\n const queryIndex = url.indexOf(\"?\");\n const hashIndex = url.indexOf(\"#\");\n const end = Math.min(\n queryIndex >= 0 ? queryIndex : url.length,\n hashIndex >= 0 ? hashIndex : url.length,\n );\n return url.slice(0, end);\n}\n\nfunction defaultLevel(status: number | undefined, error: unknown): LoggerLevel {\n if (error || status === undefined || status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nfunction isUrlLike(value: unknown): value is URL {\n return typeof URL !== \"undefined\" && value instanceof URL;\n}\n\nfunction isOptionsObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !isUrlLike(value);\n}\n\nfunction headerValue(value: unknown): string | string[] | undefined {\n if (value === undefined) return undefined;\n if (Array.isArray(value)) return value.map(String);\n return String(value);\n}\n\nfunction pickHeaders(\n headers: unknown,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !isOptionsObject(headers)) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const lowerName = name.toLowerCase();\n const value = headerValue(headers[lowerName] ?? headers[name]);\n if (value !== undefined) out[lowerName] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction maybeUrl(value: unknown): URL | undefined {\n if (isUrlLike(value)) return value;\n if (typeof value !== \"string\") return undefined;\n try {\n return new URL(value);\n } catch {\n return undefined;\n }\n}\n\nfunction pathFromUrl(url: URL | undefined): string {\n if (!url) return \"/\";\n return `${url.pathname || \"/\"}${url.search}`;\n}\n\nfunction optionString(options: Record<string, unknown>, key: string): string | undefined {\n const value = options[key];\n if (value === undefined) return undefined;\n return String(value);\n}\n\nfunction requestInfo(\n args: readonly unknown[],\n defaultProtocol: \"http:\" | \"https:\",\n sanitizeUrl: (url: string) => string,\n captureRequestHeaders: readonly string[] | undefined,\n): NodeHttpClientRequestInfo {\n const first = args[0];\n const second = args[1];\n const parsed = maybeUrl(first);\n const options = isOptionsObject(first) ? first : isOptionsObject(second) ? second : undefined;\n const protocol = optionString(options ?? {}, \"protocol\") ?? parsed?.protocol ?? defaultProtocol;\n const method = (optionString(options ?? {}, \"method\") ?? \"GET\").toUpperCase();\n const host =\n optionString(options ?? {}, \"host\") ?? optionString(options ?? {}, \"hostname\") ?? parsed?.host;\n const port = optionString(options ?? {}, \"port\");\n const path = optionString(options ?? {}, \"path\") ?? pathFromUrl(parsed);\n const requestHeaders = pickHeaders(options?.headers, captureRequestHeaders);\n const url =\n parsed?.href ?? (host ? `${protocol}//${host}${port ? `:${port}` : \"\"}${path}` : path);\n\n return {\n protocol,\n method,\n url: sanitizeUrl(url),\n requestHeaders,\n };\n}\n\nfunction listenOnce(\n request: NodeHttpClientRequestLike,\n event: \"response\" | \"error\",\n listener: (...args: unknown[]) => void,\n) {\n let active = true;\n const wrapped = (...args: unknown[]) => {\n if (!active) return;\n active = false;\n cleanup();\n listener(...args);\n };\n const cleanup = () => {\n request.off?.(event, wrapped);\n request.removeListener?.(event, wrapped);\n };\n\n if (request.once) request.once(event, wrapped);\n else request.on?.(event, wrapped);\n}\n\nfunction statusMessage(status: number | undefined) {\n return status === undefined ? \"unknown\" : String(status);\n}\n\nexport function nodeHttpClientIntegration(\n options: NodeHttpClientIntegrationOptions = {},\n): Integration {\n const name = options.name ?? \"node-http-client\";\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const sanitizeUrl = options.sanitizeUrl ?? defaultSanitizeUrl;\n const levelFor = options.level ?? defaultLevel;\n\n const shouldCapture = (status: number | undefined, error: unknown) => {\n if (error) return true;\n if (status !== undefined && status >= minStatus) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return {\n name: \"node-http-client\",\n setup(api: IntegrationSetupContext) {\n const httpModule = options.httpModule === undefined ? loadHttpModule() : options.httpModule;\n const httpsModule =\n options.httpsModule === undefined ? loadHttpsModule() : options.httpsModule;\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const captureResult = (\n info: NodeHttpClientRequestInfo,\n status: number | undefined,\n error: unknown,\n responseHeaders?: Record<string, string | string[]>,\n ) => {\n if (disposed || !shouldCapture(status, error)) return;\n capture({\n level: levelFor(status, error, info),\n message: error\n ? `HTTP error ${info.method} ${info.url}`\n : `HTTP ${statusMessage(status)} ${info.method} ${info.url}`,\n error,\n props: {\n http: {\n kind: name,\n runtime: \"node\",\n direction: \"outgoing\",\n protocol: info.protocol,\n method: info.method,\n url: info.url,\n status,\n requestHeaders: info.requestHeaders,\n responseHeaders,\n },\n },\n });\n };\n\n const patchModule = (\n module: NodeHttpModuleLike | null,\n defaultProtocol: \"http:\" | \"https:\",\n ) => {\n if (!module?.request) return;\n const originalRequest = module.request;\n const originalGet = module.get;\n module.request = function patchedRequest(this: unknown, ...args: unknown[]) {\n const info = requestInfo(\n args,\n defaultProtocol,\n sanitizeUrl,\n options.captureRequestHeaders,\n );\n const request = originalRequest.apply(this, args);\n listenOnce(request, \"response\", (message) => {\n const response = message as NodeHttpIncomingMessageLike;\n captureResult(\n info,\n response.statusCode,\n undefined,\n pickHeaders(response.headers, options.captureResponseHeaders),\n );\n });\n listenOnce(request, \"error\", (error) => captureResult(info, undefined, error));\n return request;\n };\n\n if (originalGet) {\n module.get = function patchedGet(this: unknown, ...args: unknown[]) {\n const request = module.request?.apply(this, args) ?? originalGet.apply(this, args);\n request.end?.();\n return request;\n };\n }\n\n disposers.push(() => {\n module.request = originalRequest;\n if (originalGet) module.get = originalGet;\n });\n };\n\n patchModule(httpModule, \"http:\");\n patchModule(httpsModule, \"https:\");\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import {\n normalizeValue,\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n} from \"@loggerjs/core\";\n\nexport type ProcessSignal = \"SIGHUP\" | \"SIGINT\" | \"SIGQUIT\" | \"SIGTERM\";\n\nexport interface CaptureProcessOptions {\n uncaughtException?: boolean;\n unhandledRejection?: boolean;\n warning?: boolean;\n beforeExitFlush?: boolean;\n exitFlush?: boolean;\n signalFlush?: boolean;\n signals?: ProcessSignal[];\n exitOnSignal?: boolean;\n exitOnUncaught?: boolean;\n flushTimeoutMs?: number;\n exitFn?: (code: number) => void;\n}\n\nconst signalExitCodes: Partial<Record<ProcessSignal, number>> = {\n SIGINT: 130,\n SIGTERM: 143,\n};\n\nexport function captureProcessIntegration(options: CaptureProcessOptions = {}): Integration {\n const uncaughtException = options.uncaughtException ?? true;\n const unhandledRejection = options.unhandledRejection ?? true;\n const warning = options.warning ?? true;\n const beforeExitFlush = options.beforeExitFlush ?? true;\n const exitFlush = options.exitFlush ?? true;\n const signalFlush = options.signalFlush ?? true;\n const signals = options.signals ?? ([\"SIGTERM\"] satisfies ProcessSignal[]);\n const exitOnSignal = options.exitOnSignal ?? true;\n const exitOnUncaught = options.exitOnUncaught ?? true;\n const flushTimeoutMs = options.flushTimeoutMs ?? 250;\n const exitFn = options.exitFn ?? ((code: number) => process.exit(code));\n\n return {\n name: \"capture-process\",\n setup(api: IntegrationSetupContext) {\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n const flushSync = () => {\n try {\n api.flushSync?.();\n } catch {\n // Logger.flushSync reports transport errors; this protects custom IntegrationAPI contexts.\n }\n };\n const flushBounded = async () => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n await Promise.race([\n api.flush(),\n new Promise<void>((resolve) => {\n timer = setTimeout(resolve, flushTimeoutMs);\n }),\n ]);\n } catch {\n // Process handlers must not throw back into fatal runtime paths.\n } finally {\n if (timer) clearTimeout(timer);\n }\n };\n const flushBestEffort = () => {\n flushSync();\n void flushBounded();\n };\n\n if (uncaughtException) {\n const onUncaughtException = (error: Error) => {\n capture({\n level: \"fatal\",\n message: error.message,\n error,\n props: { process: { kind: \"uncaughtException\" } },\n });\n flushSync();\n const flushed = flushBounded();\n if (exitOnUncaught) void flushed.finally(() => exitFn(1));\n };\n process.on(\"uncaughtException\", onUncaughtException);\n disposers.push(() => process.off(\"uncaughtException\", onUncaughtException));\n }\n\n if (unhandledRejection) {\n const onUnhandledRejection = (reason: unknown) => {\n capture({\n level: \"error\",\n message: reason instanceof Error ? reason.message : \"Unhandled promise rejection\",\n error: reason,\n props: {\n process: { kind: \"unhandledRejection\" },\n reason: normalizeValue(reason, { maxDepth: 5 }),\n },\n });\n flushBestEffort();\n };\n process.on(\"unhandledRejection\", onUnhandledRejection);\n disposers.push(() => process.off(\"unhandledRejection\", onUnhandledRejection));\n }\n\n if (warning) {\n const onWarning = (warn: Error) => {\n capture({\n level: \"warn\",\n message: warn.message,\n error: warn,\n props: {\n process: {\n kind: \"warning\",\n name: warn.name,\n code: (warn as Error & { code?: string }).code,\n },\n },\n });\n };\n process.on(\"warning\", onWarning);\n disposers.push(() => process.off(\"warning\", onWarning));\n }\n\n if (beforeExitFlush) {\n const onBeforeExit = () => {\n void flushBounded();\n };\n process.on(\"beforeExit\", onBeforeExit);\n disposers.push(() => process.off(\"beforeExit\", onBeforeExit));\n }\n\n if (exitFlush) {\n const onExit = () => {\n flushSync();\n };\n process.on(\"exit\", onExit);\n disposers.push(() => process.off(\"exit\", onExit));\n }\n\n if (signalFlush) {\n for (const signal of signals) {\n const onSignal = () => {\n capture({\n level: \"fatal\",\n message: `Process signal ${signal}`,\n props: { process: { kind: \"signal\", signal } },\n });\n flushSync();\n const flushed = flushBounded();\n if (exitOnSignal) {\n void flushed.finally(() => exitFn(signalExitCodes[signal] ?? 1));\n }\n };\n process.on(signal, onSignal);\n disposers.push(() => process.off(signal, onSignal));\n }\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import {\n databaseIntegration,\n type DatabaseClientLike,\n type DatabaseIntegrationOptions,\n} from \"./database-integration\";\n\nexport interface PrismaIntegrationOptions extends Omit<\n DatabaseIntegrationOptions,\n \"client\" | \"system\" | \"methods\" | \"getStatement\"\n> {\n client: DatabaseClientLike;\n}\n\nconst prismaMethods = [\"$executeRaw\", \"$executeRawUnsafe\", \"$queryRaw\", \"$queryRawUnsafe\"] as const;\n\nfunction prismaStatement(args: readonly unknown[]): string | undefined {\n const first = args[0];\n if (typeof first === \"string\") return first;\n if (Array.isArray(first) && \"raw\" in first) return (first as { raw?: string[] }).raw?.join(\"?\");\n return undefined;\n}\n\nexport function prismaIntegration(options: PrismaIntegrationOptions) {\n return databaseIntegration({\n ...options,\n name: options.name ?? \"prisma\",\n system: \"prisma\",\n methods: prismaMethods,\n getStatement: prismaStatement,\n });\n}\n","import {\n databaseIntegration,\n type DatabaseClientLike,\n type DatabaseIntegrationOptions,\n} from \"./database-integration\";\n\nexport interface RedisIntegrationOptions extends Omit<\n DatabaseIntegrationOptions,\n \"client\" | \"system\" | \"methods\" | \"getStatement\"\n> {\n client: DatabaseClientLike;\n methods?: readonly string[];\n}\n\nconst redisMethods = [\n \"del\",\n \"get\",\n \"hget\",\n \"hset\",\n \"lpush\",\n \"publish\",\n \"rpush\",\n \"set\",\n \"xadd\",\n] as const;\n\nfunction redisStatement(args: readonly unknown[], method: string): string | undefined {\n const key = args[0] === undefined ? \"\" : ` ${String(args[0])}`;\n return `${method.toUpperCase()}${key}`;\n}\n\nexport function redisIntegration(options: RedisIntegrationOptions) {\n return databaseIntegration({\n ...options,\n name: options.name ?? \"redis\",\n system: \"redis\",\n methods: options.methods ?? redisMethods,\n getStatement: redisStatement,\n });\n}\n","import {\n normalizeValue,\n withContext,\n type LoggerLevel,\n type LoggerLike,\n type LogData,\n} from \"@loggerjs/core\";\n\nexport type ServerlessCallback<TResult> = (error?: unknown, result?: TResult) => void;\n\nexport type ServerlessHandler<TEvent, TContext, TResult> = (\n event: TEvent,\n context: TContext,\n callback?: ServerlessCallback<TResult>,\n) => TResult | Promise<TResult> | void;\n\nexport interface ServerlessContextLike {\n awsRequestId?: string;\n functionName?: string;\n functionVersion?: string;\n invokedFunctionArn?: string;\n [key: string]: unknown;\n}\n\nexport interface ServerlessEventLike {\n httpMethod?: string;\n path?: string;\n rawPath?: string;\n routeKey?: string;\n headers?: Record<string, string | undefined>;\n requestContext?: {\n requestId?: string;\n http?: {\n method?: string;\n path?: string;\n };\n routeKey?: string;\n };\n [key: string]: unknown;\n}\n\nexport interface ServerlessInvocationInfo<TEvent, TContext> {\n event: TEvent;\n context: TContext;\n requestId?: string;\n operation?: string;\n}\n\nexport interface ServerlessIntegrationOptions<TEvent, TContext, TResult> {\n name?: string;\n platform?: string;\n captureSuccessful?: boolean;\n captureAll?: boolean;\n sampleRate?: number;\n random?: () => number;\n captureEvent?: boolean;\n captureResult?: boolean;\n bindContext?: boolean;\n getRequestId?: (event: TEvent, context: TContext) => string | undefined;\n getOperation?: (event: TEvent, context: TContext) => string | undefined;\n level?: (\n error: unknown,\n durationMs: number,\n info: ServerlessInvocationInfo<TEvent, TContext>,\n ) => LoggerLevel;\n normalizeEvent?: (event: TEvent) => unknown;\n normalizeResult?: (result: TResult) => unknown;\n}\n\nconst defaultRandom = () => Math.random();\nlet coldStart = true;\n\nfunction isPromiseLike<TResult>(value: unknown): value is PromiseLike<TResult> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction defaultLevel(error: unknown): LoggerLevel {\n return error ? \"error\" : \"info\";\n}\n\nfunction defaultRequestId(event: unknown, context: unknown): string | undefined {\n const ctx = context as ServerlessContextLike | undefined;\n const evt = event as ServerlessEventLike | undefined;\n return (\n ctx?.awsRequestId ??\n evt?.requestContext?.requestId ??\n evt?.headers?.[\"x-request-id\"] ??\n evt?.headers?.[\"X-Request-Id\"]\n );\n}\n\nfunction defaultOperation(event: unknown, context: unknown): string | undefined {\n const ctx = context as ServerlessContextLike | undefined;\n const evt = event as ServerlessEventLike | undefined;\n return (\n evt?.routeKey ??\n evt?.requestContext?.routeKey ??\n (evt?.requestContext?.http?.method && evt.requestContext.http.path\n ? `${evt.requestContext.http.method} ${evt.requestContext.http.path}`\n : undefined) ??\n (evt?.httpMethod && (evt.rawPath ?? evt.path)\n ? `${evt.httpMethod} ${evt.rawPath ?? evt.path}`\n : undefined) ??\n ctx?.functionName\n );\n}\n\nfunction normalizeUnknown(value: unknown) {\n return normalizeValue(value, { maxDepth: 5, maxObjectKeys: 120 });\n}\n\nexport function serverlessIntegration<TEvent, TContext, TResult>(\n logger: LoggerLike,\n handler: ServerlessHandler<TEvent, TContext, TResult>,\n options: ServerlessIntegrationOptions<TEvent, TContext, TResult> = {},\n): ServerlessHandler<TEvent, TContext, TResult> {\n const name = options.name ?? \"serverless\";\n const platform = options.platform ?? \"serverless\";\n const captureSuccessful = options.captureSuccessful ?? options.captureAll ?? true;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const bindContext = options.bindContext ?? true;\n const levelFor = options.level ?? defaultLevel;\n\n return (event, context, callback) => {\n const started = Date.now();\n const currentColdStart = coldStart;\n coldStart = false;\n const requestId = options.getRequestId?.(event, context) ?? defaultRequestId(event, context);\n const operation = options.getOperation?.(event, context) ?? defaultOperation(event, context);\n let captured = false;\n\n const shouldCapture = (error: unknown) => {\n if (error) return true;\n if (!captureSuccessful) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n const capture = (error: unknown, result?: TResult) => {\n if (captured || !shouldCapture(error)) return;\n captured = true;\n const durationMs = Date.now() - started;\n const info: ServerlessInvocationInfo<TEvent, TContext> = {\n context,\n event,\n operation,\n requestId,\n };\n logger.log(levelFor(error, durationMs, info), `Serverless ${operation ?? name}`, {\n error,\n serverless: {\n kind: name,\n platform,\n operation,\n requestId,\n coldStart: currentColdStart,\n durationMs,\n event: options.captureEvent\n ? (options.normalizeEvent?.(event) ?? normalizeUnknown(event))\n : undefined,\n result:\n options.captureResult && result !== undefined\n ? (options.normalizeResult?.(result) ?? normalizeUnknown(result))\n : undefined,\n },\n } as LogData);\n };\n\n const wrappedCallback = callback\n ? (error?: unknown, result?: TResult) => {\n capture(error, result);\n callback(error, result);\n }\n : undefined;\n\n const invoke = () => {\n try {\n const result = handler(event, context, wrappedCallback);\n if (isPromiseLike<TResult>(result)) {\n return result.then(\n (value) => {\n capture(undefined, value);\n return value;\n },\n (error) => {\n capture(error);\n throw error;\n },\n );\n }\n if (result !== undefined || !wrappedCallback) capture(undefined, result as TResult);\n return result;\n } catch (error) {\n capture(error);\n throw error;\n }\n };\n\n if (!bindContext) return invoke();\n return withContext(\n {\n functionName: (context as ServerlessContextLike | undefined)?.functionName,\n requestId,\n serverlessPlatform: platform,\n },\n invoke,\n );\n };\n}\n","import { createRequire } from \"node:module\";\nimport {\n normalizeValue,\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n} from \"@loggerjs/core\";\n\nexport interface DiagnosticsChannelModule {\n subscribe: (name: string, listener: (message: unknown, name: string) => void) => void;\n unsubscribe?: (name: string, listener: (message: unknown, name: string) => void) => void;\n}\n\nexport interface DiagnosticsChannelIntegrationOptions {\n channels?: readonly string[];\n diagnosticsChannel?: DiagnosticsChannelModule | null;\n captureMessage?: boolean;\n}\n\nconst defaultChannels = [\n \"http.client.request.start\",\n \"http.client.response.finish\",\n \"http.server.request.start\",\n \"http.server.response.finish\",\n \"undici:request:create\",\n \"undici:request:headers\",\n \"undici:request:trailers\",\n \"undici:request:error\",\n] as const;\n\nconst requireBuiltin = createRequire(import.meta.url);\nlet cachedDiagnosticsChannel: DiagnosticsChannelModule | null | undefined;\n\nexport function diagnosticsChannelIntegration(\n options: DiagnosticsChannelIntegrationOptions = {},\n): Integration {\n const channels = options.channels ?? defaultChannels;\n const captureMessage = options.captureMessage ?? false;\n\n return {\n name: \"diagnostics-channel\",\n setup(api: IntegrationSetupContext) {\n const diagnosticsChannel =\n options.diagnosticsChannel === undefined\n ? loadDiagnosticsChannel()\n : options.diagnosticsChannel;\n if (!diagnosticsChannel) return;\n\n const disposers: Array<() => void> = [];\n let disposed = false;\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n\n for (const channel of channels) {\n const listener = (message: unknown, name: string) => {\n capture({\n level: name.endsWith(\":error\") ? \"error\" : \"debug\",\n message: `diagnostics_channel ${name}`,\n props: {\n diagnostics: {\n channel: name,\n message: captureMessage ? normalizeValue(message, { maxDepth: 4 }) : undefined,\n },\n },\n });\n };\n diagnosticsChannel.subscribe(channel, listener);\n disposers.push(() => diagnosticsChannel.unsubscribe?.(channel, listener));\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n\nfunction loadDiagnosticsChannel(): DiagnosticsChannelModule | null {\n if (cachedDiagnosticsChannel !== undefined) return cachedDiagnosticsChannel;\n try {\n cachedDiagnosticsChannel = requireBuiltin(\n \"node:diagnostics_channel\",\n ) as DiagnosticsChannelModule;\n } catch {\n try {\n cachedDiagnosticsChannel = requireBuiltin(\"diagnostics_channel\") as DiagnosticsChannelModule;\n } catch {\n cachedDiagnosticsChannel = null;\n }\n }\n return cachedDiagnosticsChannel;\n}\n","import { createRequire } from \"node:module\";\nimport {\n setLoggerDiagnosticSink,\n type LoggerDiagnosticEvent,\n type LoggerDiagnosticSink,\n type LoggerDiagnosticStage,\n} from \"@loggerjs/core\";\n\nexport interface LoggerDiagnosticsChannelPublisher {\n hasSubscribers?: boolean;\n publish: (message: LoggerDiagnosticEvent) => void;\n}\n\nexport interface LoggerDiagnosticsChannelModule {\n channel: (name: string) => LoggerDiagnosticsChannelPublisher;\n}\n\nexport interface InstallLoggerDiagnosticsChannelOptions {\n diagnosticsChannel?: LoggerDiagnosticsChannelModule | null;\n prefix?: string;\n}\n\nconst requireBuiltin = createRequire(import.meta.url);\nlet cachedDiagnosticsChannel: LoggerDiagnosticsChannelModule | null | undefined;\n\nfunction loadDiagnosticsChannel(): LoggerDiagnosticsChannelModule | null {\n if (cachedDiagnosticsChannel !== undefined) return cachedDiagnosticsChannel;\n try {\n cachedDiagnosticsChannel = requireBuiltin(\n \"node:diagnostics_channel\",\n ) as LoggerDiagnosticsChannelModule;\n } catch {\n try {\n cachedDiagnosticsChannel = requireBuiltin(\n \"diagnostics_channel\",\n ) as LoggerDiagnosticsChannelModule;\n } catch {\n cachedDiagnosticsChannel = null;\n }\n }\n return cachedDiagnosticsChannel;\n}\n\nexport function installLoggerDiagnosticsChannel(\n options: InstallLoggerDiagnosticsChannelOptions = {},\n): () => void {\n const diagnosticsChannel =\n options.diagnosticsChannel === undefined\n ? loadDiagnosticsChannel()\n : options.diagnosticsChannel;\n if (!diagnosticsChannel) return () => {};\n\n const prefix = options.prefix ?? \"loggerjs\";\n const channels = new Map<string, LoggerDiagnosticsChannelPublisher>();\n const channelFor = (stage: LoggerDiagnosticStage) => {\n const name = `${prefix}.${stage}`;\n let channel = channels.get(name);\n if (!channel) {\n channel = diagnosticsChannel.channel(name);\n channels.set(name, channel);\n }\n return channel;\n };\n const sink: LoggerDiagnosticSink = (event) => {\n channelFor(event.stage).publish(event);\n };\n sink.enabled = (stage) => channelFor(stage).hasSubscribers !== false;\n const previous = setLoggerDiagnosticSink(sink);\n\n return () => {\n setLoggerDiagnosticSink(previous);\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["headerValue","Worker","AsyncLocalStorage","defaultMethods","defaultRandom","defaultLevel","isPromiseLike","defaultOperation","levelFor","removeListener","defaultRandom","defaultLevel","isPromiseLike","defaultRandom","defaultSanitizeUrl","defaultLevel","headerValue","pickRequestHeaders","pickResponseHeaders","defaultRoute","defaultRandom","defaultSanitizeUrl","defaultLevel","headerValue","levelFor","defaultRandom","defaultSanitizeUrl","defaultLevel","isUrlLike","headerValue","pickHeaders","requestInfo","statusMessage","requireBuiltin","defaultRandom","defaultLevel","requireBuiltin","cachedDiagnosticsChannel","loadDiagnosticsChannel"],"sources":["../src/node-destination.ts","../src/stdout-transport.ts","../src/file-transport.ts","../src/rotating-file-transport.ts","../src/http-transport.ts","../src/payload-transforms.ts","../src/syslog-transport.ts","../src/worker-transport.ts","../src/context.ts","../src/queue-integration.ts","../src/bullmq-integration.ts","../src/cli-integration.ts","../src/database-integration.ts","../src/express-integration.ts","../src/fastify-integration.ts","../src/hapi-integration.ts","../src/koa-integration.ts","../src/nest-integration.ts","../src/node-fetch-integration.ts","../src/node-http-client-integration.ts","../src/process-integration.ts","../src/prisma-integration.ts","../src/redis-integration.ts","../src/serverless-integration.ts","../src/diagnostics-channel-integration.ts","../src/logger-diagnostics.ts"],"sourcesContent":["import { closeSync, createWriteStream, mkdirSync, openSync, writeSync, type WriteStream } from \"fs\";\nimport { dirname } from \"path\";\nimport type { TransportContext } from \"@loggerjs/core\";\nimport type { WritableLike } from \"./internal-types\";\n\nexport interface NodeDestination {\n stream?: WriteStream;\n write: (payload: string | Uint8Array, context?: TransportContext) => void;\n flush: () => Promise<void>;\n flushSync: () => void;\n close: () => Promise<void>;\n closeSync: () => void;\n releaseSync?: () => void;\n}\n\nexport interface NodeStreamDestinationOptions {\n name: string;\n stream: WritableLike;\n minLength?: number;\n ignoreEpipe?: boolean;\n reportOperation?: string;\n syncWrite?: (payload: string | Uint8Array) => void;\n}\n\nexport interface NodeFileDestinationOptions {\n name: string;\n path: string;\n flags?: string;\n append?: boolean;\n mkdir?: boolean;\n sync?: boolean;\n minLength?: number;\n}\n\ninterface FlushWaiter {\n resolve: () => void;\n reject: (error: Error) => void;\n}\n\nconst encoder = new TextEncoder();\n\nconst normalizeError = (error: unknown): Error =>\n error instanceof Error ? error : new Error(String(error));\n\nfunction byteLength(payload: string | Uint8Array): number {\n return typeof payload === \"string\" ? encoder.encode(payload).byteLength : payload.byteLength;\n}\n\nfunction coalescePayloads(payloads: Array<string | Uint8Array>): string | Uint8Array {\n if (payloads.every((payload) => typeof payload === \"string\")) {\n return payloads.join(\"\");\n }\n const buffers = payloads.map((payload) =>\n typeof payload === \"string\" ? Buffer.from(payload) : Buffer.from(payload),\n );\n return Buffer.concat(buffers);\n}\n\nfunction isEpipe(error: unknown): boolean {\n return (\n Boolean(error) && typeof error === \"object\" && (error as { code?: unknown }).code === \"EPIPE\"\n );\n}\n\nfunction normalizeMinLength(value: number | undefined): number {\n if (value === undefined || !Number.isFinite(value) || value <= 0) return 0;\n return Math.floor(value);\n}\n\nexport function createNodeStreamDestination(\n options: NodeStreamDestinationOptions,\n): NodeDestination {\n const minLength = normalizeMinLength(options.minLength);\n const ignoreEpipe = options.ignoreEpipe ?? false;\n const waiters: FlushWaiter[] = [];\n const buffer: Array<string | Uint8Array> = [];\n const pendingPayloads: Array<string | Uint8Array> = [];\n let bufferedBytes = 0;\n let pendingWrites = 0;\n let pendingDrains = 0;\n let lastError: Error | undefined;\n let lastContext: TransportContext | undefined;\n let closed = false;\n\n const reportInternalError = (error: unknown, operation: string) => {\n if (ignoreEpipe && isEpipe(error)) return;\n lastContext?.reportInternalError(error, {\n phase: \"transport\",\n transport: options.name,\n operation,\n });\n };\n\n const settleWaitersIfIdle = () => {\n if (pendingWrites + pendingDrains > 0) return;\n if (waiters.length === 0) return;\n const error = lastError;\n lastError = undefined;\n for (const waiter of waiters.splice(0)) {\n if (error) waiter.reject(error);\n else waiter.resolve();\n }\n };\n\n const recordError = (error: unknown, operation: string) => {\n if (ignoreEpipe && isEpipe(error)) {\n closed = true;\n return;\n }\n lastError = normalizeError(error);\n reportInternalError(lastError, operation);\n };\n\n const onStreamError = (error: Error) => {\n recordError(error, \"stream-error\");\n settleWaitersIfIdle();\n };\n const offError = () => options.stream.off?.(\"error\", onStreamError);\n options.stream.on?.(\"error\", onStreamError);\n\n const waitForDrain = () => {\n if (!options.stream.once) return;\n pendingDrains += 1;\n options.stream.once(\"drain\", () => {\n pendingDrains -= 1;\n settleWaitersIfIdle();\n });\n };\n\n const removePending = (payload: string | Uint8Array) => {\n const index = pendingPayloads.indexOf(payload);\n if (index >= 0) pendingPayloads.splice(index, 1);\n };\n\n const writeNow = (payload: string | Uint8Array) => {\n if (closed) return;\n pendingPayloads.push(payload);\n pendingWrites += 1;\n try {\n const result = options.stream.write(payload, (error?: Error | null) => {\n removePending(payload);\n pendingWrites -= 1;\n if (error) recordError(error, options.reportOperation ?? \"write\");\n settleWaitersIfIdle();\n });\n if (result === false) waitForDrain();\n } catch (error) {\n removePending(payload);\n pendingWrites -= 1;\n recordError(error, options.reportOperation ?? \"write\");\n settleWaitersIfIdle();\n }\n };\n\n const flushBuffered = () => {\n if (buffer.length === 0) return;\n const payload = coalescePayloads(buffer.splice(0));\n bufferedBytes = 0;\n writeNow(payload);\n };\n\n const destination: NodeDestination = {\n write(payload, context) {\n if (closed) return;\n lastContext = context;\n if (minLength > 0) {\n buffer.push(payload);\n bufferedBytes += byteLength(payload);\n if (bufferedBytes >= minLength) flushBuffered();\n return;\n }\n writeNow(payload);\n },\n flush() {\n flushBuffered();\n if (pendingWrites + pendingDrains === 0) {\n const error = lastError;\n lastError = undefined;\n if (error) return Promise.reject(error);\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n waiters.push({ resolve, reject });\n });\n },\n flushSync() {\n if (!options.syncWrite) {\n flushBuffered();\n return;\n }\n for (const payload of buffer.splice(0)) options.syncWrite(payload);\n bufferedBytes = 0;\n for (const payload of pendingPayloads.splice(0)) options.syncWrite(payload);\n },\n close() {\n return destination.flush().then(\n () =>\n new Promise<void>((resolve, reject) => {\n if (!options.stream.end) {\n closed = true;\n offError();\n resolve();\n return;\n }\n options.stream.end((error?: Error | null) => {\n closed = true;\n offError();\n if (error && !(ignoreEpipe && isEpipe(error))) reject(error);\n else resolve();\n });\n }),\n (error: unknown) => {\n offError();\n return Promise.reject(error);\n },\n );\n },\n closeSync() {\n destination.flushSync();\n closed = true;\n offError();\n },\n };\n return destination;\n}\n\nexport function createNodeFileDestination(options: NodeFileDestinationOptions): NodeDestination {\n const flags = options.flags ?? (options.append === false ? \"w\" : \"a\");\n if (options.mkdir) mkdirSync(dirname(options.path), { recursive: true });\n\n let fd: number | undefined;\n const getFd = () => {\n fd ??= openSync(options.path, flags);\n return fd;\n };\n const syncWrite = (payload: string | Uint8Array) => {\n if (typeof payload === \"string\") writeSync(getFd(), payload);\n else writeSync(getFd(), payload);\n };\n\n if (options.sync) {\n let closed = false;\n const releaseSync = () => {\n if (fd !== undefined) {\n closeSync(fd);\n fd = undefined;\n }\n };\n return {\n write(payload) {\n if (closed) return;\n syncWrite(payload);\n },\n flush() {\n return Promise.resolve();\n },\n flushSync() {},\n close() {\n releaseSync();\n closed = true;\n return Promise.resolve();\n },\n closeSync() {\n releaseSync();\n closed = true;\n },\n releaseSync,\n };\n }\n\n const stream = createWriteStream(options.path, { flags });\n const destination = createNodeStreamDestination({\n name: options.name,\n stream,\n minLength: options.minLength,\n syncWrite,\n });\n const releaseSync = () => {\n if (fd !== undefined) {\n closeSync(fd);\n fd = undefined;\n }\n };\n return {\n ...destination,\n stream,\n close() {\n return destination.close().finally(releaseSync);\n },\n closeSync() {\n destination.closeSync();\n releaseSync();\n },\n releaseSync,\n };\n}\n","import {\n ndjsonCodec,\n toLevelValue,\n type Codec,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n} from \"@loggerjs/core\";\nimport type { WritableLike } from \"./internal-types\";\nimport { createNodeStreamDestination } from \"./node-destination\";\n\nexport interface StdoutTransportOptions {\n name?: string;\n stream?: WritableLike;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n minLength?: number;\n ignoreEpipe?: boolean;\n}\n\nexport function stdoutTransport(options: StdoutTransportOptions = {}): Transport {\n const codec = options.codec ?? ndjsonCodec();\n const stream = options.stream ?? process.stdout;\n const transportName = options.name ?? \"stdout\";\n const destination = createNodeStreamDestination({\n name: transportName,\n stream,\n minLength: options.minLength,\n ignoreEpipe: options.ignoreEpipe ?? true,\n });\n\n return {\n name: transportName,\n minLevel: options.minLevel,\n log(event: LogEvent, context) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel)) return;\n destination.write(codec.encode(event), context);\n },\n flush: destination.flush,\n flushSync: destination.flushSync,\n close: destination.close,\n };\n}\n\nexport function stderrTransport(options: Omit<StdoutTransportOptions, \"stream\"> = {}): Transport {\n return stdoutTransport({ ...options, name: options.name ?? \"stderr\", stream: process.stderr });\n}\n","import {\n ndjsonCodec,\n toLevelValue,\n type Codec,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n} from \"@loggerjs/core\";\nimport type { WriteStream } from \"fs\";\nimport { createNodeFileDestination } from \"./node-destination\";\n\nexport interface FileTransportOptions {\n path: string;\n name?: string;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n flags?: string;\n append?: boolean;\n mkdir?: boolean;\n sync?: boolean;\n minLength?: number;\n}\n\nexport interface FileTransport extends Transport {\n stream?: WriteStream;\n flushSync: () => void;\n}\n\nexport function fileTransport(options: FileTransportOptions): FileTransport {\n const codec = options.codec ?? ndjsonCodec();\n const destination = createNodeFileDestination({\n name: options.name ?? \"file\",\n path: options.path,\n flags: options.flags,\n append: options.append,\n mkdir: options.mkdir,\n sync: options.sync,\n minLength: options.minLength,\n });\n\n return {\n name: options.name ?? \"file\",\n minLevel: options.minLevel,\n stream: destination.stream,\n log(event: LogEvent, context) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel)) return;\n destination.write(codec.encode(event), context);\n },\n flush: destination.flush,\n flushSync: destination.flushSync,\n close: destination.close,\n };\n}\n","import { existsSync, renameSync, statSync, unlinkSync } from \"fs\";\nimport {\n ndjsonCodec,\n toLevelValue,\n type Codec,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n} from \"@loggerjs/core\";\nimport { createNodeFileDestination } from \"./node-destination\";\n\nexport interface RotatingFileTransportOptions {\n path: string;\n name?: string;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n flags?: string;\n append?: boolean;\n mkdir?: boolean;\n maxBytes?: number;\n maxFiles?: number;\n archivePath?: (path: string, index: number) => string;\n}\n\nexport interface RotatingFileTransport extends Transport {\n rotate: () => void;\n flushSync: () => void;\n currentBytes: () => number;\n}\n\nconst textEncoder = new TextEncoder();\n\nfunction payloadBytes(payload: string | Uint8Array): number {\n return typeof payload === \"string\" ? textEncoder.encode(payload).byteLength : payload.byteLength;\n}\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (value === undefined || !Number.isFinite(value) || value <= 0) return fallback;\n return Math.floor(value);\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n if (value === undefined || !Number.isFinite(value) || value < 0) return fallback;\n return Math.floor(value);\n}\n\nfunction defaultArchivePath(path: string, index: number): string {\n return `${path}.${index}`;\n}\n\nfunction fileSize(path: string): number {\n try {\n return statSync(path).size;\n } catch {\n return 0;\n }\n}\n\nexport function rotatingFileTransport(\n options: RotatingFileTransportOptions,\n): RotatingFileTransport {\n const codec = options.codec ?? ndjsonCodec();\n const maxBytes = normalizePositiveInteger(options.maxBytes, 10 * 1024 * 1024);\n const maxFiles = normalizeNonNegativeInteger(options.maxFiles, 5);\n const archivePath = options.archivePath ?? defaultArchivePath;\n const destination = createNodeFileDestination({\n name: options.name ?? \"rotating-file\",\n path: options.path,\n flags: options.flags,\n append: options.append,\n mkdir: options.mkdir,\n sync: true,\n });\n let bytes = fileSize(options.path);\n\n const rotate = () => {\n destination.releaseSync?.();\n\n if (maxFiles === 0) {\n if (existsSync(options.path)) unlinkSync(options.path);\n bytes = 0;\n return;\n }\n\n const oldest = archivePath(options.path, maxFiles);\n if (existsSync(oldest)) unlinkSync(oldest);\n\n for (let index = maxFiles - 1; index >= 1; index -= 1) {\n const source = archivePath(options.path, index);\n if (existsSync(source)) renameSync(source, archivePath(options.path, index + 1));\n }\n\n if (existsSync(options.path)) renameSync(options.path, archivePath(options.path, 1));\n bytes = 0;\n };\n\n const writePayload = (payload: string | Uint8Array) => {\n const size = payloadBytes(payload);\n if (bytes > 0 && bytes + size > maxBytes) rotate();\n destination.write(payload);\n bytes += size;\n };\n\n const transport: RotatingFileTransport = {\n name: options.name ?? \"rotating-file\",\n minLevel: options.minLevel,\n log(event: LogEvent) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel)) return;\n writePayload(codec.encode(event));\n },\n logBatch(events: LogEvent[]) {\n for (const event of events) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel))\n continue;\n writePayload(codec.encode(event));\n }\n },\n flush() {\n return destination.flush();\n },\n flushSync: destination.flushSync,\n close() {\n return destination.close();\n },\n rotate,\n currentBytes: () => bytes,\n };\n\n return transport;\n}\n","import {\n applyPayloadTransforms,\n batchTransport,\n safeJsonCodec,\n type BatchTransportOptions,\n type Codec,\n type EncodedPayload,\n type LogEvent,\n type LoggerLevel,\n type PayloadTransform,\n type Transport,\n} from \"@loggerjs/core\";\n\nexport interface NodeHttpTransportOptions extends BatchTransportOptions {\n url: string;\n name?: string;\n method?: \"POST\" | \"PUT\";\n headers?: Record<string, string>;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n fetchFn?: typeof fetch;\n transformPayload?: PayloadTransform | readonly PayloadTransform[];\n}\n\nfunction payloadToBody(payload: EncodedPayload): BodyInit {\n if (typeof payload === \"string\") return payload;\n return Uint8Array.from(payload);\n}\n\nexport function nodeHttpTransport(options: NodeHttpTransportOptions): Transport {\n const codec = options.codec ?? safeJsonCodec();\n const fetchFn = options.fetchFn ?? globalThis.fetch?.bind(globalThis);\n const inner: Transport = {\n name: options.name ?? \"node-http-inner\",\n minLevel: options.minLevel,\n async logBatch(events: LogEvent[]) {\n if (!fetchFn) throw new Error(\"fetch is not available. Use Node.js 18+ or pass fetchFn.\");\n const encoded = codec.encode(events);\n const transformed = await applyPayloadTransforms(\n encoded,\n {\n contentType: codec.contentType,\n events,\n transport: options.name ?? \"node-http\",\n },\n options.transformPayload,\n );\n const response = await fetchFn(options.url, {\n method: options.method ?? \"POST\",\n headers: {\n \"content-type\": transformed.contentType,\n ...transformed.headers,\n ...options.headers,\n },\n body: payloadToBody(transformed.payload),\n });\n if (!response.ok) throw new Error(`nodeHttpTransport failed with status ${response.status}`);\n },\n };\n return batchTransport(inner, {\n name: options.name ?? \"node-http\",\n maxRecords: options.maxRecords,\n maxBatchSize: options.maxBatchSize,\n maxBytes: options.maxBytes,\n maxWaitMs: options.maxWaitMs,\n flushIntervalMs: options.flushIntervalMs,\n concurrency: options.concurrency,\n maxQueueSize: options.maxQueueSize,\n dropPolicy: options.dropPolicy,\n estimateEventBytes: options.estimateEventBytes,\n maxRetries: options.maxRetries,\n retryBaseDelayMs: options.retryBaseDelayMs,\n retryMaxDelayMs: options.retryMaxDelayMs,\n random: options.random,\n circuitBreakerFailureThreshold: options.circuitBreakerFailureThreshold,\n circuitBreakerResetMs: options.circuitBreakerResetMs,\n onDrop: options.onDrop,\n });\n}\n","import {\n brotliCompressSync,\n deflateSync,\n gzipSync,\n type BrotliOptions,\n type ZlibOptions,\n} from \"node:zlib\";\nimport {\n encodedPayloadToUint8Array,\n type EncodedPayload,\n type PayloadTransform,\n} from \"@loggerjs/core\";\n\nexport type NodeCompressionFormat = \"gzip\" | \"brotli\" | \"deflate\";\n\nexport interface NodeCompressionPayloadTransformOptions {\n format?: NodeCompressionFormat;\n gzipOptions?: ZlibOptions;\n brotliOptions?: BrotliOptions;\n deflateOptions?: ZlibOptions;\n headers?: Record<string, string>;\n}\n\nconst contentEncodingByFormat: Record<NodeCompressionFormat, string> = {\n gzip: \"gzip\",\n brotli: \"br\",\n deflate: \"deflate\",\n};\n\nfunction compressPayload(\n payload: EncodedPayload,\n format: NodeCompressionFormat,\n options: NodeCompressionPayloadTransformOptions,\n): Uint8Array {\n const input = encodedPayloadToUint8Array(payload);\n if (format === \"brotli\") return Uint8Array.from(brotliCompressSync(input, options.brotliOptions));\n if (format === \"deflate\") return Uint8Array.from(deflateSync(input, options.deflateOptions));\n return Uint8Array.from(gzipSync(input, options.gzipOptions));\n}\n\nexport function nodeCompressionPayloadTransform(\n options: NodeCompressionPayloadTransformOptions = {},\n): PayloadTransform {\n const format = options.format ?? \"gzip\";\n return (payload) => ({\n payload: compressPayload(payload, format, options),\n headers: {\n \"content-encoding\": contentEncodingByFormat[format],\n ...options.headers,\n },\n });\n}\n","import { createSocket } from \"dgram\";\nimport { createConnection } from \"net\";\nimport { hostname as getHostname } from \"os\";\nimport {\n safeJsonStringify,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n type TransportContext,\n} from \"@loggerjs/core\";\n\nexport type NodeSyslogProtocol = \"tcp\" | \"udp4\" | \"udp6\";\nexport type NodeSyslogTcpFraming = \"newline\" | \"octet-counting\";\n\nexport interface NodeSyslogUdpSocket {\n send: (\n message: string | Uint8Array,\n port: number,\n host: string,\n callback?: (error: Error | null | undefined) => void,\n ) => void;\n close?: () => void;\n on?: (event: \"error\", listener: (error: Error) => void) => void;\n unref?: () => void;\n}\n\nexport interface NodeSyslogTcpSocket {\n write: (message: string | Uint8Array, callback?: (error?: Error | null) => void) => boolean;\n end?: () => void;\n destroy?: () => void;\n on?: (event: \"error\", listener: (error: Error) => void) => void;\n unref?: () => void;\n}\n\nexport type NodeSyslogUdpSocketFactory = (protocol: \"udp4\" | \"udp6\") => NodeSyslogUdpSocket;\nexport type NodeSyslogTcpSocketFactory = (options: {\n host: string;\n port: number;\n}) => NodeSyslogTcpSocket;\n\nexport interface NodeSyslogFormatOptions {\n facility?: number;\n hostname?: string;\n appName?: string | ((event: LogEvent) => string);\n procId?: string | number | ((event: LogEvent) => string | number);\n msgId?: string | ((event: LogEvent) => string);\n structuredData?: string | ((event: LogEvent) => string);\n formatMessage?: (event: LogEvent) => string;\n}\n\nexport interface NodeSyslogTransportOptions extends NodeSyslogFormatOptions {\n name?: string;\n minLevel?: LoggerLevel;\n protocol?: NodeSyslogProtocol;\n host?: string;\n port?: number;\n tcpFraming?: NodeSyslogTcpFraming;\n unref?: boolean;\n udpSocketFactory?: NodeSyslogUdpSocketFactory;\n tcpSocketFactory?: NodeSyslogTcpSocketFactory;\n onError?: (error: unknown, detail: { operation: string }) => void;\n}\n\nconst severityByLevel: Record<string, number> = {\n trace: 7,\n debug: 7,\n info: 6,\n warn: 4,\n error: 3,\n fatal: 2,\n};\n\nfunction defaultUdpSocketFactory(protocol: \"udp4\" | \"udp6\") {\n return createSocket(protocol);\n}\n\nfunction defaultTcpSocketFactory(options: { host: string; port: number }) {\n return createConnection(options);\n}\n\nfunction headerValue(value: unknown, fallback: string, maxLength: number) {\n const text = String(value ?? fallback)\n .trim()\n .replace(/\\s+/g, \"_\");\n if (!text) return fallback;\n return text.length > maxLength ? text.slice(0, maxLength) : text;\n}\n\nfunction timestamp(time: number) {\n const value = new Date(time).toISOString();\n return value === \"Invalid Date\" ? \"-\" : value;\n}\n\nfunction valueFor<T>(\n value: T | ((event: LogEvent) => T) | undefined,\n event: LogEvent,\n fallback: T,\n) {\n return typeof value === \"function\"\n ? (value as (event: LogEvent) => T)(event)\n : (value ?? fallback);\n}\n\nfunction defaultMessage(event: LogEvent) {\n const extra: Record<string, unknown> = {};\n if (event.data !== undefined) extra.data = event.data;\n if (event.context !== undefined) extra.context = event.context;\n if (event.error !== undefined) extra.error = event.error;\n if (Object.keys(extra).length === 0) return event.message;\n return `${event.message} ${safeJsonStringify(extra)}`;\n}\n\nexport function formatSyslogMessage(\n event: LogEvent,\n options: NodeSyslogFormatOptions = {},\n): string {\n const facility = Math.max(0, Math.min(23, Math.trunc(options.facility ?? 1)));\n const severity = severityByLevel[event.levelName] ?? 6;\n const priority = facility * 8 + severity;\n const host = headerValue(options.hostname, getHostname(), 255);\n const appName = headerValue(valueFor(options.appName, event, event.logger), \"-\", 48);\n const procId = headerValue(valueFor(options.procId, event, \"-\"), \"-\", 128);\n const msgId = headerValue(valueFor(options.msgId, event, event.type ?? event.levelName), \"-\", 32);\n const structuredData = valueFor(options.structuredData, event, \"-\") || \"-\";\n const message = options.formatMessage ? options.formatMessage(event) : defaultMessage(event);\n\n return `<${priority}>1 ${timestamp(event.time)} ${host} ${appName} ${procId} ${msgId} ${structuredData} ${message}`;\n}\n\nexport function nodeSyslogTransport(options: NodeSyslogTransportOptions = {}): Transport {\n const protocol = options.protocol ?? \"udp4\";\n const host = options.host ?? \"127.0.0.1\";\n const port = options.port ?? 514;\n const transportName = options.name ?? \"syslog\";\n const unref = options.unref ?? true;\n const tcpFraming = options.tcpFraming ?? \"newline\";\n const udpSocketFactory = options.udpSocketFactory ?? defaultUdpSocketFactory;\n const tcpSocketFactory = options.tcpSocketFactory ?? defaultTcpSocketFactory;\n let udpSocket: NodeSyslogUdpSocket | undefined;\n let tcpSocket: NodeSyslogTcpSocket | undefined;\n let lastContext: TransportContext | undefined;\n\n const reportError = (\n error: unknown,\n context: TransportContext | undefined,\n operation: string,\n ) => {\n try {\n options.onError?.(error, { operation });\n } catch (onErrorError) {\n context?.reportInternalError(onErrorError, {\n operation: \"on-error\",\n phase: \"transport\",\n transport: transportName,\n });\n }\n\n context?.reportInternalError(error, {\n operation,\n phase: \"transport\",\n transport: transportName,\n });\n };\n\n const getUdpSocket = (context: TransportContext) => {\n if (udpSocket) return udpSocket;\n const socket = udpSocketFactory(protocol === \"udp6\" ? \"udp6\" : \"udp4\");\n socket.on?.(\"error\", (error) => reportError(error, lastContext ?? context, \"socket-error\"));\n if (unref) socket.unref?.();\n udpSocket = socket;\n return socket;\n };\n\n const getTcpSocket = (context: TransportContext) => {\n if (tcpSocket) return tcpSocket;\n const socket = tcpSocketFactory({ host, port });\n socket.on?.(\"error\", (error) => reportError(error, lastContext ?? context, \"socket-error\"));\n if (unref) socket.unref?.();\n tcpSocket = socket;\n return socket;\n };\n\n const send = (message: string, context: TransportContext) => {\n lastContext = context;\n if (protocol === \"tcp\") {\n const bytes = new TextEncoder().encode(message).byteLength;\n const payload = tcpFraming === \"octet-counting\" ? `${bytes} ${message}` : `${message}\\n`;\n const socket = getTcpSocket(context);\n socket.write(payload, (error) => {\n if (error) reportError(error, context, \"send\");\n });\n return;\n }\n\n const socket = getUdpSocket(context);\n socket.send(message, port, host, (error) => {\n if (error) reportError(error, context, \"send\");\n });\n };\n\n return {\n name: transportName,\n minLevel: options.minLevel,\n log(event, context) {\n send(formatSyslogMessage(event, options), context);\n },\n logBatch(events, context) {\n for (const event of events) send(formatSyslogMessage(event, options), context);\n },\n async close() {\n udpSocket?.close?.();\n udpSocket = undefined;\n tcpSocket?.end?.();\n tcpSocket = undefined;\n },\n };\n}\n","import { Worker } from \"node:worker_threads\";\nimport {\n emitLoggerDiagnostic,\n incrementLoggerMetaCounter,\n safeJsonCodec,\n setLoggerMetaGauge,\n toLevelValue,\n type Codec,\n type LogEvent,\n type LoggerLevel,\n type Transport,\n type TransportContext,\n} from \"@loggerjs/core\";\n\nexport interface WorkerLike {\n postMessage: (value: unknown, transferList?: ArrayBuffer[]) => void;\n terminate?: () => void | number | Promise<number>;\n on?: (event: \"error\" | \"exit\" | \"message\", listener: (...args: unknown[]) => void) => unknown;\n off?: (event: \"error\" | \"exit\" | \"message\", listener: (...args: unknown[]) => void) => unknown;\n}\n\nexport interface WorkerTransportMessage {\n type: \"loggerjs:batch\";\n id?: number;\n codec: string;\n contentType: string;\n count: number;\n payload: Uint8Array;\n}\n\nexport type WorkerTransportProtocolMessage =\n | { type: \"loggerjs:ready\" }\n | { type: \"loggerjs:batch:ack\"; id: number }\n | { type: \"loggerjs:error\"; error?: unknown; message?: string };\n\nexport interface WorkerTransportOptions {\n name?: string;\n worker?: WorkerLike;\n workerFactory?: () => WorkerLike;\n workerScript?: string | URL;\n workerOptions?: object;\n fallback?: Transport;\n codec?: Codec<string | Uint8Array>;\n minLevel?: LoggerLevel;\n transferBuffers?: boolean;\n readyTimeoutMs?: number;\n ackTimeoutMs?: number;\n autoEnd?: boolean;\n}\n\ninterface PendingBatch {\n id: number;\n events: LogEvent[];\n context: TransportContext;\n timer?: ReturnType<typeof setTimeout>;\n resolve: () => void;\n}\n\nfunction createDefaultWorker(options: WorkerTransportOptions): WorkerLike {\n if (!options.workerScript) {\n throw new Error(\"workerTransport requires worker, workerFactory, or workerScript.\");\n }\n return new Worker(options.workerScript, options.workerOptions);\n}\n\nfunction payloadToBytes(payload: string | Uint8Array): Uint8Array {\n if (typeof payload !== \"string\") return payload;\n return new TextEncoder().encode(payload);\n}\n\nfunction transferablePayload(payload: Uint8Array): {\n payload: Uint8Array;\n transferList?: ArrayBuffer[];\n} {\n const copy = Uint8Array.from(payload);\n return {\n payload: copy,\n transferList: [copy.buffer],\n };\n}\n\nfunction normalizePositiveTimeout(value: number | undefined): number {\n if (value === undefined || !Number.isFinite(value) || value <= 0) return 0;\n return Math.floor(value);\n}\n\nfunction protocolMessage(value: unknown): WorkerTransportProtocolMessage | undefined {\n if (!value || typeof value !== \"object\") return undefined;\n const message = value as { type?: unknown };\n if (message.type === \"loggerjs:ready\") return { type: \"loggerjs:ready\" };\n if (message.type === \"loggerjs:batch:ack\") {\n const id = (value as { id?: unknown }).id;\n if (typeof id === \"number\") return { type: \"loggerjs:batch:ack\", id };\n }\n if (message.type === \"loggerjs:error\") {\n const item = value as { error?: unknown; message?: unknown };\n return {\n type: \"loggerjs:error\",\n error: item.error,\n message: typeof item.message === \"string\" ? item.message : undefined,\n };\n }\n return undefined;\n}\n\nfunction dropBatch(events: LogEvent[], reason: string) {\n incrementLoggerMetaCounter(\"transport.dropped\", events.length);\n incrementLoggerMetaCounter(`transport.dropped.${reason}`, events.length);\n}\n\nexport function workerTransport(options: WorkerTransportOptions = {}): Transport {\n const codec = options.codec ?? safeJsonCodec();\n const transportName = options.name ?? \"worker\";\n const fallback = options.fallback;\n const readyTimeoutMs = normalizePositiveTimeout(options.readyTimeoutMs);\n const ackTimeoutMs = normalizePositiveTimeout(options.ackTimeoutMs);\n const autoEnd = options.autoEnd ?? true;\n let worker: WorkerLike | undefined;\n let failed = false;\n let failedError: Error | undefined;\n let lastContext: TransportContext | undefined;\n let ready = readyTimeoutMs === 0;\n let readyPromise: Promise<void> | undefined;\n let readyTimer: ReturnType<typeof setTimeout> | undefined;\n let readyResolve: (() => void) | undefined;\n let readyReject: ((error: Error) => void) | undefined;\n let nextBatchId = 1;\n const pendingBatches = new Map<number, PendingBatch>();\n\n const setPendingGauge = () => {\n setLoggerMetaGauge(`transport.queue.depth.${transportName}`, pendingBatches.size);\n };\n\n const setReadyGauge = (value: number) => {\n setLoggerMetaGauge(`transport.ready.${transportName}`, value);\n };\n\n const reportInternalError = (error: unknown, operation: string) => {\n lastContext?.reportInternalError(error, {\n phase: \"transport\",\n transport: transportName,\n operation,\n });\n };\n\n const markFailed = (error: unknown, operation: string) => {\n if (failed) return;\n failed = true;\n failedError = error instanceof Error ? error : new Error(String(error));\n setReadyGauge(0);\n incrementLoggerMetaCounter(\"transport.worker.failed\");\n emitLoggerDiagnostic({\n stage: \"worker\",\n phase: \"error\",\n transport: transportName,\n operation,\n error,\n });\n reportInternalError(error, operation);\n readyReject?.(failedError);\n failPendingBatches(operation);\n };\n\n const onWorkerError = (error: unknown) => markFailed(error, \"worker-error\");\n const onWorkerExit = (code: unknown) => {\n if (typeof code === \"number\" && code !== 0) markFailed(code, \"worker-exit\");\n };\n const onWorkerMessage = (value: unknown) => {\n const message = protocolMessage(value);\n if (!message) return;\n if (message.type === \"loggerjs:ready\") {\n ready = true;\n setReadyGauge(1);\n emitLoggerDiagnostic({\n stage: \"worker\",\n phase: \"end\",\n transport: transportName,\n operation: \"ready\",\n });\n if (readyTimer) clearTimeout(readyTimer);\n readyResolve?.();\n return;\n }\n if (message.type === \"loggerjs:batch:ack\") {\n const pending = pendingBatches.get(message.id);\n if (!pending) return;\n pendingBatches.delete(message.id);\n setPendingGauge();\n if (pending.timer) clearTimeout(pending.timer);\n pending.resolve();\n incrementLoggerMetaCounter(\"transport.worker.ack\");\n return;\n }\n markFailed(\n message.error ?? new Error(message.message ?? \"Worker reported an error\"),\n \"worker-message\",\n );\n };\n\n const fallbackOrDropBatch = async (\n events: LogEvent[],\n context: TransportContext,\n reason: string,\n ) => {\n if (fallback) {\n await fallbackBatch(events, context);\n return;\n }\n dropBatch(events, reason);\n };\n\n const failPendingBatch = (pending: PendingBatch, reason: string) => {\n pendingBatches.delete(pending.id);\n setPendingGauge();\n if (pending.timer) clearTimeout(pending.timer);\n incrementLoggerMetaCounter(\"transport.worker.pending-dropped\", pending.events.length);\n void fallbackOrDropBatch(pending.events, pending.context, reason).finally(pending.resolve);\n };\n\n function failPendingBatches(reason: string) {\n for (const pending of Array.from(pendingBatches.values())) failPendingBatch(pending, reason);\n }\n\n const waitForReady = async () => {\n if (ready) return;\n readyPromise ??= new Promise<void>((resolve, reject) => {\n readyResolve = resolve;\n readyReject = reject;\n readyTimer = setTimeout(() => {\n reject(new Error(`workerTransport ready timeout after ${readyTimeoutMs}ms`));\n }, readyTimeoutMs);\n });\n await readyPromise;\n };\n\n const getWorker = (): WorkerLike | undefined => {\n if (failed) return undefined;\n if (worker) return worker;\n try {\n worker = options.worker ?? options.workerFactory?.() ?? createDefaultWorker(options);\n worker.on?.(\"error\", onWorkerError);\n worker.on?.(\"exit\", onWorkerExit);\n worker.on?.(\"message\", onWorkerMessage);\n if (ready) setReadyGauge(1);\n return worker;\n } catch (error) {\n markFailed(error, \"create-worker\");\n return undefined;\n }\n };\n\n const fallbackBatch = async (events: LogEvent[], context: TransportContext) => {\n if (fallback?.logBatch) {\n await fallback.logBatch(events, context);\n return;\n }\n if (fallback?.log) {\n for (const event of events) {\n // oxlint-disable-next-line no-await-in-loop -- Fallback should preserve log order.\n await fallback.log(event, context);\n }\n }\n };\n\n const postBatch = async (events: LogEvent[], context: TransportContext) => {\n lastContext = context;\n const currentWorker = getWorker();\n if (!currentWorker) {\n await fallbackOrDropBatch(events, context, \"worker-unavailable\");\n return;\n }\n try {\n await waitForReady();\n } catch (error) {\n markFailed(error, \"worker-ready-timeout\");\n await fallbackOrDropBatch(events, context, \"worker-ready-timeout\");\n return;\n }\n\n const encoded = payloadToBytes(codec.encode(events));\n const transferable =\n options.transferBuffers === false\n ? { payload: encoded, transferList: undefined }\n : transferablePayload(encoded);\n const message: WorkerTransportMessage = {\n type: \"loggerjs:batch\",\n codec: codec.name,\n contentType: codec.contentType,\n count: events.length,\n payload: transferable.payload,\n };\n let pending: PendingBatch | undefined;\n if (ackTimeoutMs > 0) {\n const id = nextBatchId;\n nextBatchId += 1;\n message.id = id;\n pending = { id, events, context, resolve: () => {} };\n pending.timer = setTimeout(() => {\n if (!pending) return;\n markFailed(\n new Error(`workerTransport ack timeout after ${ackTimeoutMs}ms`),\n \"worker-ack-timeout\",\n );\n }, ackTimeoutMs);\n pendingBatches.set(id, pending);\n setPendingGauge();\n }\n\n try {\n currentWorker.postMessage(message, transferable.transferList);\n } catch (error) {\n markFailed(error, \"post-message\");\n if (!pending) await fallbackOrDropBatch(events, context, \"worker-post-message\");\n }\n };\n\n const transport: Transport = {\n name: transportName,\n minLevel: options.minLevel,\n async ready() {\n const currentWorker = getWorker();\n if (!currentWorker) {\n if (fallback) {\n await fallback.ready?.();\n return;\n }\n throw failedError ?? new Error(\"workerTransport is unavailable\");\n }\n try {\n await waitForReady();\n } catch (error) {\n markFailed(error, \"worker-ready-timeout\");\n if (fallback) {\n await fallback.ready?.();\n return;\n }\n throw error;\n }\n },\n log(event, context) {\n if (options.minLevel !== undefined && event.level < toLevelValue(options.minLevel)) return;\n return postBatch([event], context);\n },\n logBatch(events, context) {\n return postBatch(events, context);\n },\n async flush() {\n await Promise.all(\n Array.from(\n pendingBatches.values(),\n (pending) =>\n new Promise<void>((resolve) => {\n const originalResolve = pending.resolve;\n pending.resolve = () => {\n originalResolve();\n resolve();\n };\n }),\n ),\n );\n await fallback?.flush?.();\n },\n async close() {\n await transport.flush?.();\n worker?.off?.(\"error\", onWorkerError);\n worker?.off?.(\"exit\", onWorkerExit);\n worker?.off?.(\"message\", onWorkerMessage);\n await fallback?.close?.();\n if (autoEnd) await worker?.terminate?.();\n if (readyTimer) clearTimeout(readyTimer);\n readyReject = undefined;\n readyResolve = undefined;\n },\n };\n return transport;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport {\n createBoundContext,\n resetContextManager,\n setContextManager,\n type BoundContext,\n type ContextManager,\n} from \"@loggerjs/core\";\n\nfunction mergeContext(\n ...items: Array<Record<string, unknown> | undefined | null>\n): BoundContext | undefined {\n const out: Record<string, unknown> = {};\n for (const item of items) {\n if (!item) continue;\n Object.assign(out, item);\n }\n return createBoundContext(out) ?? undefined;\n}\n\nexport function createAsyncLocalStorageContextManager(\n storage = new AsyncLocalStorage<BoundContext>(),\n): ContextManager & { disable: () => void } {\n return {\n get() {\n return storage.getStore();\n },\n with(context, fn) {\n return storage.run(mergeContext(storage.getStore(), context) ?? Object.freeze({}), fn);\n },\n disable() {\n storage.disable();\n },\n };\n}\n\nexport function installAsyncLocalStorageContext(\n manager = createAsyncLocalStorageContextManager(),\n): () => void {\n setContextManager(manager);\n return () => {\n resetContextManager();\n manager.disable();\n };\n}\n","import {\n normalizeValue,\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport type QueueOperation = \"publish\" | \"consume\" | \"ack\" | \"nack\" | \"other\";\n\nexport interface QueueClientLike {\n [method: string]: unknown;\n}\n\nexport interface QueueIntegrationTarget {\n client: QueueClientLike;\n name?: string;\n system?: string;\n queueName?: string;\n methods?: readonly string[];\n}\n\nexport interface QueueOperationInfo {\n target: string;\n system?: string;\n queueName?: string;\n method: string;\n operation: QueueOperation;\n}\n\nexport interface QueueIntegrationOptions {\n client?: QueueClientLike;\n targets?: readonly QueueIntegrationTarget[];\n name?: string;\n system?: string;\n queueName?: string;\n methods?: readonly string[];\n captureAll?: boolean;\n captureSuccessful?: boolean;\n minDurationMs?: number;\n sampleRate?: number;\n random?: () => number;\n capturePayload?: boolean;\n getOperation?: (method: string, args: readonly unknown[]) => QueueOperation;\n getQueueName?: (args: readonly unknown[], method: string) => string | undefined;\n getMessageId?: (args: readonly unknown[], method: string) => string | undefined;\n getPayload?: (args: readonly unknown[], method: string) => unknown;\n level?: (durationMs: number, error: unknown, info: QueueOperationInfo) => LoggerLevel;\n}\n\ntype QueueMethod = (this: unknown, ...args: unknown[]) => unknown;\n\nconst defaultMethods = [\n \"add\",\n \"ack\",\n \"consume\",\n \"dequeue\",\n \"nack\",\n \"process\",\n \"publish\",\n \"receive\",\n \"send\",\n \"sendToQueue\",\n] as const;\nconst defaultRandom = () => Math.random();\n\nfunction defaultLevel(_durationMs: number, error: unknown): LoggerLevel {\n return error ? \"error\" : \"debug\";\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction defaultOperation(method: string): QueueOperation {\n switch (method) {\n case \"add\":\n case \"publish\":\n case \"send\":\n case \"sendToQueue\":\n return \"publish\";\n case \"consume\":\n case \"dequeue\":\n case \"process\":\n case \"receive\":\n return \"consume\";\n case \"ack\":\n return \"ack\";\n case \"nack\":\n return \"nack\";\n default:\n return \"other\";\n }\n}\n\nfunction defaultPayload(args: readonly unknown[]) {\n return typeof args[0] === \"string\" && args.length > 1 ? args[1] : args[0];\n}\n\nfunction defaultMessageId(args: readonly unknown[]) {\n const payload = defaultPayload(args);\n if (typeof payload !== \"object\" || payload === null) return undefined;\n const value =\n (payload as { id?: unknown; messageId?: unknown }).messageId ??\n (payload as { id?: unknown }).id;\n return value === undefined ? undefined : String(value);\n}\n\nfunction payloadFor(args: readonly unknown[], method: string, options: QueueIntegrationOptions) {\n if (!options.capturePayload) return undefined;\n const payload = options.getPayload?.(args, method) ?? defaultPayload(args);\n return payload === undefined\n ? undefined\n : normalizeValue(payload, { maxDepth: 4, maxObjectKeys: 80 });\n}\n\nexport function queueIntegration(options: QueueIntegrationOptions = {}): Integration {\n const targets =\n options.targets ??\n (options.client\n ? [\n {\n client: options.client,\n name: options.name,\n system: options.system,\n queueName: options.queueName,\n methods: options.methods,\n },\n ]\n : []);\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const levelFor = options.level ?? defaultLevel;\n\n const shouldCapture = (durationMs: number, error: unknown) => {\n if (error) return true;\n if (options.minDurationMs !== undefined && durationMs >= options.minDurationMs) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return {\n name: \"queue\",\n setup(api: IntegrationSetupContext) {\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const captureResult = (\n info: QueueOperationInfo,\n started: number,\n args: readonly unknown[],\n error: unknown,\n ) => {\n const durationMs = Date.now() - started;\n if (disposed || !shouldCapture(durationMs, error)) return;\n capture({\n level: levelFor(durationMs, error, info),\n message: error\n ? `Queue error ${info.operation} ${info.queueName ?? info.method}`\n : `Queue ${info.operation} ${info.queueName ?? info.method}`,\n error,\n props: {\n queue: {\n kind: info.target,\n system: info.system,\n queueName: info.queueName,\n method: info.method,\n operation: info.operation,\n durationMs,\n messageId: options.getMessageId?.(args, info.method) ?? defaultMessageId(args),\n payload: payloadFor(args, info.method, options),\n },\n },\n });\n };\n\n for (const target of targets) {\n const methods = target.methods ?? options.methods ?? defaultMethods;\n for (const method of methods) {\n const original = target.client[method];\n if (typeof original !== \"function\") continue;\n const originalMethod = original as QueueMethod;\n const targetName = target.name ?? options.name ?? \"queue\";\n const system = target.system ?? options.system;\n\n target.client[method] = function wrappedQueueMethod(this: unknown, ...args: unknown[]) {\n const started = Date.now();\n const operation = options.getOperation?.(method, args) ?? defaultOperation(method);\n const info: QueueOperationInfo = {\n target: targetName,\n system,\n queueName:\n options.getQueueName?.(args, method) ??\n target.queueName ??\n options.queueName ??\n (typeof args[0] === \"string\" ? args[0] : undefined),\n method,\n operation,\n };\n try {\n const result = originalMethod.apply(this, args);\n if (isPromiseLike(result)) {\n return result.then(\n (value) => {\n captureResult(info, started, args, undefined);\n return value;\n },\n (error) => {\n captureResult(info, started, args, error);\n throw error;\n },\n );\n }\n captureResult(info, started, args, undefined);\n return result;\n } catch (error) {\n captureResult(info, started, args, error);\n throw error;\n }\n };\n\n disposers.push(() => {\n target.client[method] = originalMethod;\n });\n }\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import {\n queueIntegration,\n type QueueClientLike,\n type QueueIntegrationOptions,\n type QueueOperation,\n} from \"./queue-integration\";\n\nexport interface BullMqIntegrationOptions extends Omit<\n QueueIntegrationOptions,\n \"client\" | \"system\" | \"methods\" | \"getQueueName\"\n> {\n /**\n * Queue-like BullMQ object. By default LoggerJS wraps `add`, `addBulk`, and a\n * legacy `process` method when present; it does not hook `Worker` or\n * `QueueEvents` lifecycle events such as `completed`, `failed`, or `stalled`.\n */\n client: QueueClientLike & { name?: string };\n methods?: readonly string[];\n}\n\nconst bullMqMethods = [\"add\", \"addBulk\", \"process\"] as const;\n\nfunction queueName(args: readonly unknown[], fallback: string | undefined) {\n const first = args[0];\n return typeof first === \"string\" ? first : fallback;\n}\n\nfunction operationFor(method: string): QueueOperation {\n if (method === \"process\") return \"consume\";\n if (method === \"add\" || method === \"addBulk\") return \"publish\";\n return \"other\";\n}\n\nexport function bullMqIntegration(options: BullMqIntegrationOptions) {\n return queueIntegration({\n ...options,\n name: options.name ?? \"bullmq\",\n system: \"bullmq\",\n methods: options.methods ?? bullMqMethods,\n getOperation: options.getOperation ?? operationFor,\n queueName: options.queueName ?? options.client.name,\n getQueueName: (args) => queueName(args, options.queueName ?? options.client.name),\n });\n}\n","import {\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport interface CliProcessLike {\n argv?: readonly string[];\n env?: Record<string, string | undefined>;\n exitCode?: number | string | null;\n cwd?: () => string;\n on?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n off?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n removeListener?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n}\n\nexport interface CaptureCliOptions {\n name?: string;\n process?: CliProcessLike;\n captureStart?: boolean;\n captureExit?: boolean;\n captureSignals?: boolean;\n captureCwd?: boolean;\n captureEnv?: readonly string[];\n signals?: readonly string[];\n level?:\n | LoggerLevel\n | ((event: \"start\" | \"exit\" | \"signal\", code?: number | string) => LoggerLevel);\n getCommand?: (argv: readonly string[]) => string | undefined;\n sanitizeArg?: (arg: string, index: number, argv: readonly string[]) => string;\n}\n\nconst defaultSignals = [\"SIGINT\", \"SIGTERM\"] as const;\n\nfunction defaultProcess(): CliProcessLike | undefined {\n return (globalThis as unknown as { process?: CliProcessLike }).process;\n}\n\nfunction defaultSanitizeArg(arg: string) {\n if (/^(--?[^=\\s]*(token|password|passwd|secret|key)[^=\\s]*=)/i.test(arg)) {\n return arg.replace(/=.*/, \"=[redacted]\");\n }\n return arg;\n}\n\nfunction defaultCommand(argv: readonly string[]): string | undefined {\n return argv[1] ?? argv[0];\n}\n\nfunction levelFor(\n level: CaptureCliOptions[\"level\"],\n event: \"start\" | \"exit\" | \"signal\",\n code?: number | string,\n): LoggerLevel {\n if (typeof level === \"function\") return level(event, code);\n if (level) return level;\n if (event === \"signal\") return \"warn\";\n if (event === \"exit\" && Number(code ?? 0) !== 0) return \"error\";\n return \"info\";\n}\n\nfunction pickEnv(\n env: Record<string, string | undefined> | undefined,\n names: readonly string[] | undefined,\n) {\n if (!env || !names || names.length === 0) return undefined;\n const out: Record<string, string> = {};\n for (const name of names) {\n const value = env[name];\n if (value !== undefined) out[name] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction removeListener(\n processLike: CliProcessLike,\n event: string,\n listener: (...args: unknown[]) => void,\n) {\n if (processLike.off) {\n processLike.off(event, listener);\n return;\n }\n processLike.removeListener?.(event, listener);\n}\n\nexport function captureCliIntegration(options: CaptureCliOptions = {}): Integration {\n const name = options.name ?? \"cli\";\n const captureStart = options.captureStart ?? true;\n const captureExit = options.captureExit ?? true;\n const captureSignals = options.captureSignals ?? true;\n const captureCwd = options.captureCwd ?? true;\n const signals = options.signals ?? defaultSignals;\n const sanitizeArg = options.sanitizeArg ?? defaultSanitizeArg;\n const commandFor = options.getCommand ?? defaultCommand;\n\n return {\n name: \"capture-cli\",\n setup(api: IntegrationSetupContext) {\n const processLike = options.process ?? defaultProcess();\n if (!processLike) return;\n const argv = processLike.argv ?? [];\n const command = commandFor(argv);\n const sanitizedArgv = argv.map((arg, index) => sanitizeArg(arg, index, argv));\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const capture = api.guard((input: CaptureInput) => {\n if (!disposed) api.capture(input);\n });\n const cliBase = {\n kind: name,\n command,\n argv: sanitizedArgv,\n cwd: captureCwd ? processLike.cwd?.() : undefined,\n env: pickEnv(processLike.env, options.captureEnv),\n };\n\n if (captureStart) {\n capture({\n level: levelFor(options.level, \"start\"),\n message: `CLI start${command ? ` ${command}` : \"\"}`,\n props: {\n cli: {\n ...cliBase,\n lifecycle: \"start\",\n },\n },\n });\n }\n\n if (captureExit && processLike.on) {\n const onExit = (code: unknown) => {\n const exitCode = code ?? processLike.exitCode ?? 0;\n capture({\n level: levelFor(options.level, \"exit\", exitCode as number | string),\n message: `CLI exit ${String(exitCode)}`,\n props: {\n cli: {\n ...cliBase,\n lifecycle: \"exit\",\n exitCode,\n },\n },\n });\n };\n processLike.on(\"exit\", onExit);\n disposers.push(() => removeListener(processLike, \"exit\", onExit));\n }\n\n if (captureSignals && processLike.on) {\n for (const signal of signals) {\n const onSignal = () => {\n capture({\n level: levelFor(options.level, \"signal\", signal),\n message: `CLI signal ${signal}`,\n props: {\n cli: {\n ...cliBase,\n lifecycle: \"signal\",\n signal,\n },\n },\n });\n };\n processLike.on(signal, onSignal);\n disposers.push(() => removeListener(processLike, signal, onSignal));\n }\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import {\n normalizeValue,\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport interface DatabaseClientLike {\n [method: string]: unknown;\n}\n\nexport interface DatabaseIntegrationTarget {\n client: DatabaseClientLike;\n name?: string;\n system?: string;\n methods?: readonly string[];\n}\n\nexport interface DatabaseOperationInfo {\n target: string;\n system?: string;\n method: string;\n statement?: string;\n}\n\nexport interface DatabaseIntegrationOptions {\n client?: DatabaseClientLike;\n targets?: readonly DatabaseIntegrationTarget[];\n name?: string;\n system?: string;\n methods?: readonly string[];\n captureAll?: boolean;\n captureSuccessful?: boolean;\n minDurationMs?: number;\n sampleRate?: number;\n random?: () => number;\n captureParameters?: boolean;\n sanitizeStatement?: (statement: string) => string;\n getStatement?: (args: readonly unknown[], method: string) => string | undefined;\n level?: (durationMs: number, error: unknown, info: DatabaseOperationInfo) => LoggerLevel;\n}\n\ntype DatabaseMethod = (this: unknown, ...args: unknown[]) => unknown;\n\nconst defaultMethods = [\"query\", \"execute\", \"run\", \"all\", \"get\"] as const;\nconst defaultRandom = () => Math.random();\n\nfunction defaultLevel(_durationMs: number, error: unknown): LoggerLevel {\n return error ? \"error\" : \"debug\";\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction defaultStatement(args: readonly unknown[]): string | undefined {\n const first = args[0];\n if (typeof first === \"string\") return first;\n if (typeof first !== \"object\" || first === null) return undefined;\n const input = first as { sql?: unknown; text?: unknown; query?: unknown };\n if (typeof input.sql === \"string\") return input.sql;\n if (typeof input.text === \"string\") return input.text;\n if (typeof input.query === \"string\") return input.query;\n return undefined;\n}\n\nfunction statementFor(\n args: readonly unknown[],\n method: string,\n options: DatabaseIntegrationOptions,\n) {\n const statement = options.getStatement?.(args, method) ?? defaultStatement(args);\n return statement && options.sanitizeStatement ? options.sanitizeStatement(statement) : statement;\n}\n\nfunction parametersFor(args: readonly unknown[], captureParameters: boolean) {\n if (!captureParameters) return undefined;\n const first = args[0];\n const second = args[1];\n const parameters =\n second ??\n (typeof first === \"object\" && first\n ? ((first as { values?: unknown; params?: unknown; parameters?: unknown }).values ??\n (first as { params?: unknown }).params ??\n (first as { parameters?: unknown }).parameters)\n : undefined);\n return parameters === undefined\n ? undefined\n : normalizeValue(parameters, { maxDepth: 4, maxObjectKeys: 80 });\n}\n\nexport function databaseIntegration(options: DatabaseIntegrationOptions = {}): Integration {\n const targets =\n options.targets ??\n (options.client\n ? [\n {\n client: options.client,\n name: options.name,\n system: options.system,\n methods: options.methods,\n },\n ]\n : []);\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const levelFor = options.level ?? defaultLevel;\n\n const shouldCapture = (durationMs: number, error: unknown) => {\n if (error) return true;\n if (options.minDurationMs !== undefined && durationMs >= options.minDurationMs) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return {\n name: \"database\",\n setup(api: IntegrationSetupContext) {\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const captureResult = (\n info: DatabaseOperationInfo,\n started: number,\n args: readonly unknown[],\n error: unknown,\n ) => {\n const durationMs = Date.now() - started;\n if (disposed || !shouldCapture(durationMs, error)) return;\n capture({\n level: levelFor(durationMs, error, info),\n message: error\n ? `Database error ${info.method}${info.statement ? ` ${info.statement}` : \"\"}`\n : `Database ${info.method}${info.statement ? ` ${info.statement}` : \"\"}`,\n error,\n props: {\n db: {\n kind: info.target,\n system: info.system,\n method: info.method,\n statement: info.statement,\n durationMs,\n parameters: parametersFor(args, options.captureParameters ?? false),\n },\n },\n });\n };\n\n for (const target of targets) {\n const methods = target.methods ?? options.methods ?? defaultMethods;\n for (const method of methods) {\n const original = target.client[method];\n if (typeof original !== \"function\") continue;\n const originalMethod = original as DatabaseMethod;\n const targetName = target.name ?? options.name ?? \"database\";\n const system = target.system ?? options.system;\n\n target.client[method] = function wrappedDatabaseMethod(\n this: unknown,\n ...args: unknown[]\n ) {\n const started = Date.now();\n const info: DatabaseOperationInfo = {\n target: targetName,\n system,\n method,\n statement: statementFor(args, method, options),\n };\n try {\n const result = originalMethod.apply(this, args);\n if (isPromiseLike(result)) {\n return result.then(\n (value) => {\n captureResult(info, started, args, undefined);\n return value;\n },\n (error) => {\n captureResult(info, started, args, error);\n throw error;\n },\n );\n }\n captureResult(info, started, args, undefined);\n return result;\n } catch (error) {\n captureResult(info, started, args, error);\n throw error;\n }\n };\n\n disposers.push(() => {\n target.client[method] = originalMethod;\n });\n }\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import { withContext, type LoggerLevel, type LoggerLike, type LogData } from \"@loggerjs/core\";\n\nexport interface ExpressRequestLike {\n method?: string;\n originalUrl?: string;\n url?: string;\n path?: string;\n headers?: Record<string, string | string[] | undefined>;\n ip?: string;\n route?: { path?: string };\n socket?: { remoteAddress?: string };\n [key: string]: unknown;\n}\n\nexport interface ExpressResponseLike {\n statusCode?: number;\n writableEnded?: boolean;\n headersSent?: boolean;\n getHeader?: (name: string) => number | string | string[] | undefined;\n once?: (event: \"finish\" | \"close\", listener: () => void) => unknown;\n on?: (event: \"finish\" | \"close\", listener: () => void) => unknown;\n off?: (event: \"finish\" | \"close\", listener: () => void) => unknown;\n removeListener?: (event: \"finish\" | \"close\", listener: () => void) => unknown;\n}\n\nexport type ExpressNextFunction = (error?: unknown) => void;\nexport type ExpressRequestHandler = (\n req: ExpressRequestLike,\n res: ExpressResponseLike,\n next: ExpressNextFunction,\n) => void;\n\nexport interface ExpressIntegrationOptions {\n name?: string;\n minStatus?: number;\n captureAll?: boolean;\n captureSuccessful?: boolean;\n captureAborted?: boolean;\n sampleRate?: number;\n random?: () => number;\n bindContext?: boolean;\n captureRequestHeaders?: readonly string[];\n captureResponseHeaders?: readonly string[];\n sanitizeUrl?: (url: string) => string;\n getRequestId?: (req: ExpressRequestLike, res: ExpressResponseLike) => string | undefined;\n getRoute?: (req: ExpressRequestLike) => string | undefined;\n context?: (\n req: ExpressRequestLike,\n res: ExpressResponseLike,\n ) => Record<string, unknown> | undefined;\n level?: (\n status: number,\n req: ExpressRequestLike,\n res: ExpressResponseLike,\n aborted: boolean,\n ) => LoggerLevel;\n}\n\nconst defaultRandom = () => Math.random();\n\nfunction defaultSanitizeUrl(url: string): string {\n const queryIndex = url.indexOf(\"?\");\n const hashIndex = url.indexOf(\"#\");\n const end = Math.min(\n queryIndex >= 0 ? queryIndex : url.length,\n hashIndex >= 0 ? hashIndex : url.length,\n );\n return url.slice(0, end);\n}\n\nfunction defaultLevel(\n status: number,\n _req: ExpressRequestLike,\n _res: ExpressResponseLike,\n aborted: boolean,\n): LoggerLevel {\n if (aborted) return \"warn\";\n if (status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nfunction requestUrl(req: ExpressRequestLike): string {\n return req.originalUrl ?? req.url ?? req.path ?? \"/\";\n}\n\nfunction headerValue(value: number | string | string[] | undefined): string | string[] | undefined {\n if (typeof value === \"number\") return String(value);\n return value;\n}\n\nfunction pickRequestHeaders(\n req: ExpressRequestLike,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !req.headers) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const value = req.headers[name.toLowerCase()] ?? req.headers[name];\n if (value !== undefined) out[name.toLowerCase()] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction pickResponseHeaders(\n res: ExpressResponseLike,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !res.getHeader) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const value = headerValue(res.getHeader(name));\n if (value !== undefined) out[name.toLowerCase()] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction defaultRoute(req: ExpressRequestLike): string | undefined {\n const path = req.route?.path;\n return typeof path === \"string\" ? path : undefined;\n}\n\nfunction removeListener(res: ExpressResponseLike, event: \"finish\" | \"close\", listener: () => void) {\n if (res.off) {\n res.off(event, listener);\n return;\n }\n res.removeListener?.(event, listener);\n}\n\nfunction onResponseDone(res: ExpressResponseLike, event: \"finish\" | \"close\", listener: () => void) {\n if (res.once) {\n res.once(event, listener);\n return;\n }\n res.on?.(event, listener);\n}\n\nexport function expressIntegration(\n logger: LoggerLike,\n options: ExpressIntegrationOptions = {},\n): ExpressRequestHandler {\n const name = options.name ?? \"express\";\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const captureAborted = options.captureAborted ?? true;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const sanitizeUrl = options.sanitizeUrl ?? defaultSanitizeUrl;\n const levelFor = options.level ?? defaultLevel;\n const routeFor = options.getRoute ?? defaultRoute;\n const bindContext = options.bindContext ?? true;\n\n return (req, res, next) => {\n const started = Date.now();\n const method = (req.method ?? \"GET\").toUpperCase();\n const url = sanitizeUrl(requestUrl(req));\n const requestId = options.getRequestId?.(req, res);\n let completed = false;\n\n const context = {\n httpMethod: method,\n httpUrl: url,\n requestId,\n ...options.context?.(req, res),\n };\n\n const shouldCapture = (status: number, aborted: boolean) => {\n if (aborted && captureAborted) return true;\n if (status >= minStatus) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n const cleanup = () => {\n removeListener(res, \"finish\", onFinish);\n removeListener(res, \"close\", onClose);\n };\n\n const logRequest = (event: \"finish\" | \"close\") => {\n if (completed) return;\n completed = true;\n cleanup();\n const status = res.statusCode ?? 0;\n const aborted = event === \"close\" && res.writableEnded !== true;\n if (!shouldCapture(status, aborted)) return;\n const http: Record<string, unknown> = {\n kind: name,\n framework: \"express\",\n method,\n url,\n route: routeFor(req),\n status,\n durationMs: Date.now() - started,\n aborted,\n requestId,\n remoteAddress: req.ip ?? req.socket?.remoteAddress,\n requestHeaders: pickRequestHeaders(req, options.captureRequestHeaders),\n responseHeaders: pickResponseHeaders(res, options.captureResponseHeaders),\n };\n logger.log(levelFor(status, req, res, aborted), `Express ${status} ${method} ${url}`, {\n http,\n } as LogData);\n };\n\n const onFinish = () => logRequest(\"finish\");\n const onClose = () => logRequest(\"close\");\n onResponseDone(res, \"finish\", onFinish);\n onResponseDone(res, \"close\", onClose);\n\n if (bindContext) {\n withContext(context, () => next());\n return;\n }\n next();\n };\n}\n","import { withContext, type LoggerLevel, type LoggerLike, type LogData } from \"@loggerjs/core\";\n\nexport interface FastifyRequestLike {\n id?: string;\n method?: string;\n url?: string;\n headers?: Record<string, string | string[] | undefined>;\n ip?: string;\n routeOptions?: { url?: string };\n routerPath?: string;\n [key: string]: unknown;\n}\n\nexport interface FastifyReplyLike {\n statusCode?: number;\n getHeader?: (name: string) => number | string | string[] | undefined;\n [key: string]: unknown;\n}\n\nexport type FastifyDone = (error?: unknown) => void;\nexport type FastifyOnRequestHook = (\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n done: FastifyDone,\n) => void;\nexport type FastifyOnResponseHook = (\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n done: FastifyDone,\n) => void;\nexport type FastifyOnErrorHook = (\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n error: unknown,\n done: FastifyDone,\n) => void;\n\nexport interface FastifyInstanceLike {\n addHook: (\n name: \"onRequest\" | \"onResponse\" | \"onError\",\n hook: FastifyOnRequestHook | FastifyOnResponseHook | FastifyOnErrorHook,\n ) => unknown;\n}\n\nexport type FastifyPluginCallback = (\n instance: FastifyInstanceLike,\n options: unknown,\n done?: FastifyDone,\n) => void;\n\nexport interface FastifyIntegrationOptions {\n name?: string;\n minStatus?: number;\n captureAll?: boolean;\n captureSuccessful?: boolean;\n sampleRate?: number;\n random?: () => number;\n bindContext?: boolean;\n captureRequestHeaders?: readonly string[];\n captureResponseHeaders?: readonly string[];\n sanitizeUrl?: (url: string) => string;\n getRequestId?: (request: FastifyRequestLike, reply: FastifyReplyLike) => string | undefined;\n getRoute?: (request: FastifyRequestLike) => string | undefined;\n context?: (\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n ) => Record<string, unknown> | undefined;\n level?: (\n status: number,\n request: FastifyRequestLike,\n reply: FastifyReplyLike,\n error: unknown,\n ) => LoggerLevel;\n}\n\ninterface RequestState {\n started: number;\n error?: unknown;\n}\n\nconst defaultRandom = () => Math.random();\n\nfunction defaultSanitizeUrl(url: string): string {\n const queryIndex = url.indexOf(\"?\");\n const hashIndex = url.indexOf(\"#\");\n const end = Math.min(\n queryIndex >= 0 ? queryIndex : url.length,\n hashIndex >= 0 ? hashIndex : url.length,\n );\n return url.slice(0, end);\n}\n\nfunction defaultLevel(\n status: number,\n _request: FastifyRequestLike,\n _reply: FastifyReplyLike,\n error: unknown,\n): LoggerLevel {\n if (error || status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nfunction headerValue(value: number | string | string[] | undefined): string | string[] | undefined {\n if (typeof value === \"number\") return String(value);\n return value;\n}\n\nfunction pickRequestHeaders(\n request: FastifyRequestLike,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !request.headers) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const value = request.headers[name.toLowerCase()] ?? request.headers[name];\n if (value !== undefined) out[name.toLowerCase()] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction pickResponseHeaders(\n reply: FastifyReplyLike,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !reply.getHeader) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const value = headerValue(reply.getHeader(name));\n if (value !== undefined) out[name.toLowerCase()] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction defaultRoute(request: FastifyRequestLike): string | undefined {\n return request.routeOptions?.url ?? request.routerPath;\n}\n\nexport function fastifyIntegration(\n logger: LoggerLike,\n options: FastifyIntegrationOptions = {},\n): FastifyPluginCallback {\n const name = options.name ?? \"fastify\";\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const sanitizeUrl = options.sanitizeUrl ?? defaultSanitizeUrl;\n const levelFor = options.level ?? defaultLevel;\n const routeFor = options.getRoute ?? defaultRoute;\n const bindContext = options.bindContext ?? true;\n const states = new WeakMap<FastifyRequestLike, RequestState>();\n\n const shouldCapture = (status: number, error: unknown) => {\n if (error) return true;\n if (status >= minStatus) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return (instance, _pluginOptions, done) => {\n instance.addHook(\n \"onRequest\",\n (request: FastifyRequestLike, reply: FastifyReplyLike, next: FastifyDone) => {\n const method = (request.method ?? \"GET\").toUpperCase();\n const url = sanitizeUrl(request.url ?? \"/\");\n const requestId = options.getRequestId?.(request, reply) ?? request.id;\n states.set(request, { started: Date.now() });\n const context = {\n httpMethod: method,\n httpUrl: url,\n requestId,\n ...options.context?.(request, reply),\n };\n if (bindContext) {\n withContext(context, () => next());\n return;\n }\n next();\n },\n );\n\n instance.addHook(\n \"onError\",\n (\n request: FastifyRequestLike,\n _reply: FastifyReplyLike,\n error: unknown,\n next: FastifyDone,\n ) => {\n const state = states.get(request);\n if (state) state.error = error;\n else states.set(request, { started: Date.now(), error });\n next();\n },\n );\n\n instance.addHook(\n \"onResponse\",\n (request: FastifyRequestLike, reply: FastifyReplyLike, next: FastifyDone) => {\n const state = states.get(request) ?? { started: Date.now() };\n states.delete(request);\n const status = reply.statusCode ?? 0;\n const error = state.error;\n if (!shouldCapture(status, error)) {\n next();\n return;\n }\n\n const method = (request.method ?? \"GET\").toUpperCase();\n const url = sanitizeUrl(request.url ?? \"/\");\n const requestId = options.getRequestId?.(request, reply) ?? request.id;\n const http: Record<string, unknown> = {\n kind: name,\n framework: \"fastify\",\n method,\n url,\n route: routeFor(request),\n status,\n durationMs: Date.now() - state.started,\n requestId,\n remoteAddress: request.ip,\n requestHeaders: pickRequestHeaders(request, options.captureRequestHeaders),\n responseHeaders: pickResponseHeaders(reply, options.captureResponseHeaders),\n };\n const data: Record<string, unknown> = { http };\n if (error) data.error = error;\n logger.log(levelFor(status, request, reply, error), `Fastify ${status} ${method} ${url}`, {\n ...data,\n } as LogData);\n next();\n },\n );\n\n done?.();\n };\n}\n","import { withContext, type LoggerLevel, type LoggerLike, type LogData } from \"@loggerjs/core\";\n\nexport interface HapiRequestLike {\n method?: string;\n path?: string;\n url?: { pathname?: string };\n info?: { id?: string; received?: number; remoteAddress?: string };\n response?: { statusCode?: number } | { isBoom?: boolean; output?: { statusCode?: number } };\n app?: Record<string, unknown>;\n}\n\nexport interface HapiToolkitLike {\n continue: unknown;\n}\n\nexport interface HapiServerLike {\n ext: (\n event: \"onRequest\",\n handler: (request: HapiRequestLike, h: HapiToolkitLike) => unknown,\n ) => unknown;\n events?: {\n on?: (event: \"response\", handler: (request: HapiRequestLike) => void) => unknown;\n };\n}\n\nexport interface HapiIntegrationOptions {\n minStatus?: number;\n captureAll?: boolean;\n bindContext?: boolean;\n getRequestId?: (request: HapiRequestLike) => string | undefined;\n context?: (request: HapiRequestLike) => Record<string, unknown> | undefined;\n level?: (status: number, request: HapiRequestLike) => LoggerLevel;\n}\n\nfunction responseStatus(response: HapiRequestLike[\"response\"]): number {\n if (!response) return 200;\n if (\"statusCode\" in response && typeof response.statusCode === \"number\")\n return response.statusCode;\n if (\"output\" in response && typeof response.output?.statusCode === \"number\") {\n return response.output.statusCode;\n }\n return 200;\n}\n\nfunction levelFor(status: number): LoggerLevel {\n if (status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nexport function hapiIntegration(logger: LoggerLike, options: HapiIntegrationOptions = {}) {\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? false;\n const bindContext = options.bindContext ?? true;\n const getLevel = options.level ?? levelFor;\n\n return {\n name: \"loggerjs-hapi\",\n register(server: HapiServerLike) {\n server.ext(\"onRequest\", (request, h) => {\n const method = (request.method ?? \"GET\").toUpperCase();\n const url = request.url?.pathname ?? request.path ?? \"/\";\n const requestId = options.getRequestId?.(request) ?? request.info?.id;\n const context = {\n httpMethod: method,\n httpUrl: url,\n requestId,\n ...options.context?.(request),\n };\n request.app = { ...request.app, loggerjsStartedAt: Date.now() };\n if (bindContext) return withContext(context, () => h.continue);\n return h.continue;\n });\n\n server.events?.on?.(\"response\", (request) => {\n const status = responseStatus(request.response);\n if (!captureAll && status < minStatus) return;\n const method = (request.method ?? \"GET\").toUpperCase();\n const url = request.url?.pathname ?? request.path ?? \"/\";\n const requestId = options.getRequestId?.(request) ?? request.info?.id;\n const started = request.app?.loggerjsStartedAt as number | undefined;\n logger.log(getLevel(status, request), `Hapi ${status} ${method} ${url}`, {\n http: {\n framework: \"hapi\",\n kind: \"hapi\",\n method,\n url,\n status,\n durationMs: started ? Date.now() - started : undefined,\n requestId,\n remoteAddress: request.info?.remoteAddress,\n },\n } as LogData);\n });\n },\n };\n}\n","import { withContext, type LoggerLevel, type LoggerLike, type LogData } from \"@loggerjs/core\";\n\nexport interface KoaContextLike {\n method?: string;\n originalUrl?: string;\n url?: string;\n path?: string;\n status?: number;\n ip?: string;\n state?: Record<string, unknown>;\n request?: { headers?: Record<string, string | string[] | undefined> };\n}\n\nexport type KoaNext = () => Promise<unknown>;\nexport type KoaMiddleware = (ctx: KoaContextLike, next: KoaNext) => Promise<void>;\n\nexport interface KoaIntegrationOptions {\n minStatus?: number;\n captureAll?: boolean;\n bindContext?: boolean;\n sanitizeUrl?: (url: string) => string;\n getRequestId?: (ctx: KoaContextLike) => string | undefined;\n context?: (ctx: KoaContextLike) => Record<string, unknown> | undefined;\n level?: (status: number, ctx: KoaContextLike, error: unknown) => LoggerLevel;\n}\n\nfunction sanitizeUrl(url: string): string {\n return url.split(/[?#]/, 1)[0] || \"/\";\n}\n\nfunction levelFor(status: number, _ctx: KoaContextLike, error: unknown): LoggerLevel {\n if (error || status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nexport function koaIntegration(\n logger: LoggerLike,\n options: KoaIntegrationOptions = {},\n): KoaMiddleware {\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? false;\n const bindContext = options.bindContext ?? true;\n const sanitize = options.sanitizeUrl ?? sanitizeUrl;\n const getLevel = options.level ?? levelFor;\n\n return async (ctx, next) => {\n const started = Date.now();\n const method = (ctx.method ?? \"GET\").toUpperCase();\n const url = sanitize(ctx.originalUrl ?? ctx.url ?? ctx.path ?? \"/\");\n const requestId = options.getRequestId?.(ctx) ?? (ctx.state?.requestId as string | undefined);\n const context = { httpMethod: method, httpUrl: url, requestId, ...options.context?.(ctx) };\n let error: unknown;\n try {\n if (bindContext) await withContext(context, next);\n else await next();\n } catch (caught) {\n error = caught;\n throw caught;\n } finally {\n const status = ctx.status ?? (error ? 500 : 200);\n if (error || captureAll || status >= minStatus) {\n logger.log(getLevel(status, ctx, error), `Koa ${status} ${method} ${url}`, {\n http: {\n framework: \"koa\",\n kind: \"koa\",\n method,\n url,\n status,\n durationMs: Date.now() - started,\n requestId,\n remoteAddress: ctx.ip,\n },\n error,\n } as LogData);\n }\n }\n };\n}\n","import type { LoggerLike } from \"@loggerjs/core\";\nimport {\n expressIntegration,\n type ExpressIntegrationOptions,\n type ExpressRequestHandler,\n} from \"./express-integration\";\n\nexport type NestMiddleware = ExpressRequestHandler;\n\n/**\n * Express-compatible Nest middleware adapter. It observes the same request and\n * response completion surface as `expressIntegration`; it does not hook Nest\n * exception filters, interceptors, guards, or the original thrown `Error`.\n */\nexport function nestMiddlewareIntegration(\n logger: LoggerLike,\n options: ExpressIntegrationOptions = {},\n): NestMiddleware {\n return expressIntegration(logger, {\n name: \"nestjs\",\n ...options,\n });\n}\n","import {\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport interface NodeFetchHeadersLike {\n get?: (name: string) => string | null;\n [key: string]: unknown;\n}\n\nexport interface NodeFetchRequestLike {\n url?: string;\n method?: string;\n headers?: NodeFetchHeadersLike | Record<string, unknown>;\n}\n\nexport interface NodeFetchInitLike {\n method?: string;\n headers?: NodeFetchHeadersLike | Record<string, unknown>;\n}\n\nexport interface NodeFetchResponseLike {\n status?: number;\n headers?: NodeFetchHeadersLike | Record<string, unknown>;\n}\n\nexport type NodeFetchFunction = (\n input: string | URL | NodeFetchRequestLike,\n init?: NodeFetchInitLike,\n) => Promise<NodeFetchResponseLike>;\n\nexport interface NodeFetchTargetLike {\n fetch?: NodeFetchFunction;\n}\n\nexport interface NodeFetchRequestInfo {\n method: string;\n url: string;\n requestHeaders?: Record<string, string>;\n}\n\nexport interface NodeFetchIntegrationOptions {\n name?: string;\n minStatus?: number;\n captureAll?: boolean;\n captureSuccessful?: boolean;\n sampleRate?: number;\n random?: () => number;\n captureRequestHeaders?: readonly string[];\n captureResponseHeaders?: readonly string[];\n sanitizeUrl?: (url: string) => string;\n level?: (status: number | undefined, error: unknown, info: NodeFetchRequestInfo) => LoggerLevel;\n target?: NodeFetchTargetLike;\n}\n\nconst defaultRandom = () => Math.random();\n\nfunction defaultSanitizeUrl(url: string): string {\n const queryIndex = url.indexOf(\"?\");\n const hashIndex = url.indexOf(\"#\");\n const end = Math.min(\n queryIndex >= 0 ? queryIndex : url.length,\n hashIndex >= 0 ? hashIndex : url.length,\n );\n return url.slice(0, end);\n}\n\nfunction defaultLevel(status: number | undefined, error: unknown): LoggerLevel {\n if (error || status === undefined || status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nfunction isUrlLike(value: unknown): value is URL {\n return typeof URL !== \"undefined\" && value instanceof URL;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction headerValue(headers: unknown, name: string): string | undefined {\n if (!isObject(headers)) return undefined;\n if (typeof (headers as NodeFetchHeadersLike).get === \"function\") {\n return (headers as NodeFetchHeadersLike).get?.(name) ?? undefined;\n }\n const value = headers[name.toLowerCase()] ?? headers[name];\n return value === undefined ? undefined : String(value);\n}\n\nfunction pickHeaders(\n headers: unknown,\n names: readonly string[] | undefined,\n): Record<string, string> | undefined {\n if (!names || names.length === 0) return undefined;\n const out: Record<string, string> = {};\n for (const name of names) {\n const lowerName = name.toLowerCase();\n const value = headerValue(headers, lowerName) ?? headerValue(headers, name);\n if (value !== undefined) out[lowerName] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction requestInfo(\n input: string | URL | NodeFetchRequestLike,\n init: NodeFetchInitLike | undefined,\n sanitizeUrl: (url: string) => string,\n captureRequestHeaders: readonly string[] | undefined,\n): NodeFetchRequestInfo {\n const request =\n isObject(input) && !isUrlLike(input) ? (input as NodeFetchRequestLike) : undefined;\n const method = (init?.method ?? request?.method ?? \"GET\").toUpperCase();\n const url = isUrlLike(input)\n ? input.href\n : typeof input === \"string\"\n ? input\n : (request?.url ?? \"/\");\n return {\n method,\n url: sanitizeUrl(url),\n requestHeaders: pickHeaders(init?.headers ?? request?.headers, captureRequestHeaders),\n };\n}\n\nfunction statusMessage(status: number | undefined) {\n return status === undefined ? \"unknown\" : String(status);\n}\n\nexport function nodeFetchIntegration(options: NodeFetchIntegrationOptions = {}): Integration {\n const name = options.name ?? \"node-fetch\";\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const sanitizeUrl = options.sanitizeUrl ?? defaultSanitizeUrl;\n const levelFor = options.level ?? defaultLevel;\n\n const shouldCapture = (status: number | undefined, error: unknown) => {\n if (error) return true;\n if (status !== undefined && status >= minStatus) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return {\n name: \"node-fetch\",\n setup(api: IntegrationSetupContext) {\n const target = options.target ?? (globalThis as unknown as NodeFetchTargetLike);\n if (!target.fetch) return;\n\n const originalFetch = target.fetch;\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n let disposed = false;\n\n const captureResult = (\n info: NodeFetchRequestInfo,\n durationMs: number,\n status: number | undefined,\n error: unknown,\n responseHeaders?: Record<string, string>,\n ) => {\n if (disposed || !shouldCapture(status, error)) return;\n capture({\n level: levelFor(status, error, info),\n message: error\n ? `Fetch error ${info.method} ${info.url}`\n : `Fetch ${statusMessage(status)} ${info.method} ${info.url}`,\n error,\n props: {\n http: {\n kind: name,\n runtime: \"node\",\n instrument: \"fetch\",\n direction: \"outgoing\",\n method: info.method,\n url: info.url,\n status,\n durationMs,\n requestHeaders: info.requestHeaders,\n responseHeaders,\n },\n },\n });\n };\n\n target.fetch = async function patchedFetch(\n this: unknown,\n input: string | URL | NodeFetchRequestLike,\n init?: NodeFetchInitLike,\n ) {\n const started = Date.now();\n const info = requestInfo(input, init, sanitizeUrl, options.captureRequestHeaders);\n try {\n const response = await originalFetch.call(this, input, init);\n captureResult(\n info,\n Date.now() - started,\n response.status,\n undefined,\n pickHeaders(response.headers, options.captureResponseHeaders),\n );\n return response;\n } catch (error) {\n captureResult(info, Date.now() - started, undefined, error);\n throw error;\n }\n };\n\n return () => {\n if (disposed) return;\n disposed = true;\n target.fetch = originalFetch;\n };\n },\n };\n}\n","import { createRequire } from \"node:module\";\nimport {\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n type LoggerLevel,\n} from \"@loggerjs/core\";\n\nexport interface NodeHttpClientRequestLike {\n once?: (event: \"response\" | \"error\", listener: (...args: unknown[]) => void) => unknown;\n on?: (event: \"response\" | \"error\", listener: (...args: unknown[]) => void) => unknown;\n off?: (event: \"response\" | \"error\", listener: (...args: unknown[]) => void) => unknown;\n removeListener?: (event: \"response\" | \"error\", listener: (...args: unknown[]) => void) => unknown;\n end?: (...args: unknown[]) => unknown;\n}\n\nexport interface NodeHttpIncomingMessageLike {\n statusCode?: number;\n headers?: Record<string, number | string | string[] | undefined>;\n}\n\nexport type NodeHttpRequestFunction = (\n this: unknown,\n ...args: unknown[]\n) => NodeHttpClientRequestLike;\n\nexport interface NodeHttpModuleLike {\n request?: NodeHttpRequestFunction;\n get?: NodeHttpRequestFunction;\n}\n\nexport interface NodeHttpClientRequestInfo {\n protocol: \"http:\" | \"https:\" | string;\n method: string;\n url: string;\n requestHeaders?: Record<string, string | string[]>;\n}\n\nexport interface NodeHttpClientIntegrationOptions {\n name?: string;\n minStatus?: number;\n captureAll?: boolean;\n captureSuccessful?: boolean;\n sampleRate?: number;\n random?: () => number;\n captureRequestHeaders?: readonly string[];\n captureResponseHeaders?: readonly string[];\n sanitizeUrl?: (url: string) => string;\n level?: (\n status: number | undefined,\n error: unknown,\n info: NodeHttpClientRequestInfo,\n ) => LoggerLevel;\n httpModule?: NodeHttpModuleLike | null;\n httpsModule?: NodeHttpModuleLike | null;\n}\n\nconst requireBuiltin = createRequire(import.meta.url);\nconst defaultRandom = () => Math.random();\n\nlet cachedHttpModule: NodeHttpModuleLike | null | undefined;\nlet cachedHttpsModule: NodeHttpModuleLike | null | undefined;\n\nfunction loadBuiltin(name: \"node:http\" | \"node:https\", fallback: \"http\" | \"https\") {\n try {\n return requireBuiltin(name) as NodeHttpModuleLike;\n } catch {\n try {\n return requireBuiltin(fallback) as NodeHttpModuleLike;\n } catch {\n return null;\n }\n }\n}\n\nfunction loadHttpModule() {\n if (cachedHttpModule !== undefined) return cachedHttpModule;\n cachedHttpModule = loadBuiltin(\"node:http\", \"http\");\n return cachedHttpModule;\n}\n\nfunction loadHttpsModule() {\n if (cachedHttpsModule !== undefined) return cachedHttpsModule;\n cachedHttpsModule = loadBuiltin(\"node:https\", \"https\");\n return cachedHttpsModule;\n}\n\nfunction defaultSanitizeUrl(url: string): string {\n const queryIndex = url.indexOf(\"?\");\n const hashIndex = url.indexOf(\"#\");\n const end = Math.min(\n queryIndex >= 0 ? queryIndex : url.length,\n hashIndex >= 0 ? hashIndex : url.length,\n );\n return url.slice(0, end);\n}\n\nfunction defaultLevel(status: number | undefined, error: unknown): LoggerLevel {\n if (error || status === undefined || status >= 500) return \"error\";\n if (status >= 400) return \"warn\";\n return \"info\";\n}\n\nfunction isUrlLike(value: unknown): value is URL {\n return typeof URL !== \"undefined\" && value instanceof URL;\n}\n\nfunction isOptionsObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !isUrlLike(value);\n}\n\nfunction headerValue(value: unknown): string | string[] | undefined {\n if (value === undefined) return undefined;\n if (Array.isArray(value)) return value.map(String);\n return String(value);\n}\n\nfunction pickHeaders(\n headers: unknown,\n names: readonly string[] | undefined,\n): Record<string, string | string[]> | undefined {\n if (!names || names.length === 0 || !isOptionsObject(headers)) return undefined;\n const out: Record<string, string | string[]> = {};\n for (const name of names) {\n const lowerName = name.toLowerCase();\n const value = headerValue(headers[lowerName] ?? headers[name]);\n if (value !== undefined) out[lowerName] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction maybeUrl(value: unknown): URL | undefined {\n if (isUrlLike(value)) return value;\n if (typeof value !== \"string\") return undefined;\n try {\n return new URL(value);\n } catch {\n return undefined;\n }\n}\n\nfunction pathFromUrl(url: URL | undefined): string {\n if (!url) return \"/\";\n return `${url.pathname || \"/\"}${url.search}`;\n}\n\nfunction optionString(options: Record<string, unknown>, key: string): string | undefined {\n const value = options[key];\n if (value === undefined) return undefined;\n return String(value);\n}\n\nfunction requestInfo(\n args: readonly unknown[],\n defaultProtocol: \"http:\" | \"https:\",\n sanitizeUrl: (url: string) => string,\n captureRequestHeaders: readonly string[] | undefined,\n): NodeHttpClientRequestInfo {\n const first = args[0];\n const second = args[1];\n const parsed = maybeUrl(first);\n const options = isOptionsObject(first) ? first : isOptionsObject(second) ? second : undefined;\n const protocol = optionString(options ?? {}, \"protocol\") ?? parsed?.protocol ?? defaultProtocol;\n const method = (optionString(options ?? {}, \"method\") ?? \"GET\").toUpperCase();\n const host =\n optionString(options ?? {}, \"host\") ?? optionString(options ?? {}, \"hostname\") ?? parsed?.host;\n const port = optionString(options ?? {}, \"port\");\n const path = optionString(options ?? {}, \"path\") ?? pathFromUrl(parsed);\n const requestHeaders = pickHeaders(options?.headers, captureRequestHeaders);\n const url =\n parsed?.href ?? (host ? `${protocol}//${host}${port ? `:${port}` : \"\"}${path}` : path);\n\n return {\n protocol,\n method,\n url: sanitizeUrl(url),\n requestHeaders,\n };\n}\n\nfunction listenOnce(\n request: NodeHttpClientRequestLike,\n event: \"response\" | \"error\",\n listener: (...args: unknown[]) => void,\n) {\n let active = true;\n const wrapped = (...args: unknown[]) => {\n if (!active) return;\n active = false;\n cleanup();\n listener(...args);\n };\n const cleanup = () => {\n request.off?.(event, wrapped);\n request.removeListener?.(event, wrapped);\n };\n\n if (request.once) request.once(event, wrapped);\n else request.on?.(event, wrapped);\n}\n\nfunction statusMessage(status: number | undefined) {\n return status === undefined ? \"unknown\" : String(status);\n}\n\nexport function nodeHttpClientIntegration(\n options: NodeHttpClientIntegrationOptions = {},\n): Integration {\n const name = options.name ?? \"node-http-client\";\n const minStatus = options.minStatus ?? 400;\n const captureAll = options.captureAll ?? options.captureSuccessful ?? false;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const sanitizeUrl = options.sanitizeUrl ?? defaultSanitizeUrl;\n const levelFor = options.level ?? defaultLevel;\n\n const shouldCapture = (status: number | undefined, error: unknown) => {\n if (error) return true;\n if (status !== undefined && status >= minStatus) return true;\n if (!captureAll) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n return {\n name: \"node-http-client\",\n setup(api: IntegrationSetupContext) {\n const httpModule = options.httpModule === undefined ? loadHttpModule() : options.httpModule;\n const httpsModule =\n options.httpsModule === undefined ? loadHttpsModule() : options.httpsModule;\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const captureResult = (\n info: NodeHttpClientRequestInfo,\n status: number | undefined,\n error: unknown,\n responseHeaders?: Record<string, string | string[]>,\n ) => {\n if (disposed || !shouldCapture(status, error)) return;\n capture({\n level: levelFor(status, error, info),\n message: error\n ? `HTTP error ${info.method} ${info.url}`\n : `HTTP ${statusMessage(status)} ${info.method} ${info.url}`,\n error,\n props: {\n http: {\n kind: name,\n runtime: \"node\",\n direction: \"outgoing\",\n protocol: info.protocol,\n method: info.method,\n url: info.url,\n status,\n requestHeaders: info.requestHeaders,\n responseHeaders,\n },\n },\n });\n };\n\n const patchModule = (\n module: NodeHttpModuleLike | null,\n defaultProtocol: \"http:\" | \"https:\",\n ) => {\n if (!module?.request) return;\n const originalRequest = module.request;\n const originalGet = module.get;\n module.request = function patchedRequest(this: unknown, ...args: unknown[]) {\n const info = requestInfo(\n args,\n defaultProtocol,\n sanitizeUrl,\n options.captureRequestHeaders,\n );\n const request = originalRequest.apply(this, args);\n listenOnce(request, \"response\", (message) => {\n const response = message as NodeHttpIncomingMessageLike;\n captureResult(\n info,\n response.statusCode,\n undefined,\n pickHeaders(response.headers, options.captureResponseHeaders),\n );\n });\n listenOnce(request, \"error\", (error) => captureResult(info, undefined, error));\n return request;\n };\n\n if (originalGet) {\n module.get = function patchedGet(this: unknown, ...args: unknown[]) {\n const request = module.request?.apply(this, args) ?? originalGet.apply(this, args);\n request.end?.();\n return request;\n };\n }\n\n disposers.push(() => {\n module.request = originalRequest;\n if (originalGet) module.get = originalGet;\n });\n };\n\n patchModule(httpModule, \"http:\");\n patchModule(httpsModule, \"https:\");\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import {\n normalizeValue,\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n} from \"@loggerjs/core\";\n\nexport type ProcessSignal = \"SIGHUP\" | \"SIGINT\" | \"SIGQUIT\" | \"SIGTERM\";\n\nexport interface CaptureProcessOptions {\n uncaughtException?: boolean;\n unhandledRejection?: boolean;\n warning?: boolean;\n beforeExitFlush?: boolean;\n exitFlush?: boolean;\n signalFlush?: boolean;\n signals?: ProcessSignal[];\n exitOnSignal?: boolean;\n exitOnUncaught?: boolean;\n flushTimeoutMs?: number;\n exitFn?: (code: number) => void;\n}\n\nconst signalExitCodes: Partial<Record<ProcessSignal, number>> = {\n SIGINT: 130,\n SIGTERM: 143,\n};\n\nexport function captureProcessIntegration(options: CaptureProcessOptions = {}): Integration {\n const uncaughtException = options.uncaughtException ?? true;\n const unhandledRejection = options.unhandledRejection ?? true;\n const warning = options.warning ?? true;\n const beforeExitFlush = options.beforeExitFlush ?? true;\n const exitFlush = options.exitFlush ?? true;\n const signalFlush = options.signalFlush ?? true;\n const signals = options.signals ?? ([\"SIGTERM\"] satisfies ProcessSignal[]);\n const exitOnSignal = options.exitOnSignal ?? true;\n const exitOnUncaught = options.exitOnUncaught ?? true;\n const flushTimeoutMs = options.flushTimeoutMs ?? 250;\n const exitFn = options.exitFn ?? ((code: number) => process.exit(code));\n\n return {\n name: \"capture-process\",\n setup(api: IntegrationSetupContext) {\n const disposers: Array<() => void> = [];\n let disposed = false;\n\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n const flushSync = () => {\n try {\n api.flushSync?.();\n } catch {\n // Logger.flushSync reports transport errors; this protects custom IntegrationAPI contexts.\n }\n };\n const flushBounded = async () => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n await Promise.race([\n api.flush(),\n new Promise<void>((resolve) => {\n timer = setTimeout(resolve, flushTimeoutMs);\n }),\n ]);\n } catch {\n // Process handlers must not throw back into fatal runtime paths.\n } finally {\n if (timer) clearTimeout(timer);\n }\n };\n const flushBestEffort = () => {\n flushSync();\n void flushBounded();\n };\n\n if (uncaughtException) {\n const onUncaughtException = (error: Error) => {\n capture({\n level: \"fatal\",\n message: error.message,\n error,\n props: { process: { kind: \"uncaughtException\" } },\n });\n flushSync();\n const flushed = flushBounded();\n if (exitOnUncaught) void flushed.finally(() => exitFn(1));\n };\n process.on(\"uncaughtException\", onUncaughtException);\n disposers.push(() => process.off(\"uncaughtException\", onUncaughtException));\n }\n\n if (unhandledRejection) {\n const onUnhandledRejection = (reason: unknown) => {\n capture({\n level: \"error\",\n message: reason instanceof Error ? reason.message : \"Unhandled promise rejection\",\n error: reason,\n props: {\n process: { kind: \"unhandledRejection\" },\n reason: normalizeValue(reason, { maxDepth: 5 }),\n },\n });\n flushBestEffort();\n };\n process.on(\"unhandledRejection\", onUnhandledRejection);\n disposers.push(() => process.off(\"unhandledRejection\", onUnhandledRejection));\n }\n\n if (warning) {\n const onWarning = (warn: Error) => {\n capture({\n level: \"warn\",\n message: warn.message,\n error: warn,\n props: {\n process: {\n kind: \"warning\",\n name: warn.name,\n code: (warn as Error & { code?: string }).code,\n },\n },\n });\n };\n process.on(\"warning\", onWarning);\n disposers.push(() => process.off(\"warning\", onWarning));\n }\n\n if (beforeExitFlush) {\n const onBeforeExit = () => {\n void flushBounded();\n };\n process.on(\"beforeExit\", onBeforeExit);\n disposers.push(() => process.off(\"beforeExit\", onBeforeExit));\n }\n\n if (exitFlush) {\n const onExit = () => {\n flushSync();\n };\n process.on(\"exit\", onExit);\n disposers.push(() => process.off(\"exit\", onExit));\n }\n\n if (signalFlush) {\n for (const signal of signals) {\n const onSignal = () => {\n capture({\n level: \"fatal\",\n message: `Process signal ${signal}`,\n props: { process: { kind: \"signal\", signal } },\n });\n flushSync();\n const flushed = flushBounded();\n if (exitOnSignal) {\n void flushed.finally(() => exitFn(signalExitCodes[signal] ?? 1));\n }\n };\n process.on(signal, onSignal);\n disposers.push(() => process.off(signal, onSignal));\n }\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n","import {\n databaseIntegration,\n type DatabaseClientLike,\n type DatabaseIntegrationOptions,\n} from \"./database-integration\";\n\nexport interface PrismaIntegrationOptions extends Omit<\n DatabaseIntegrationOptions,\n \"client\" | \"system\" | \"methods\" | \"getStatement\"\n> {\n /**\n * Prisma-like client whose raw query methods should be wrapped. This adapter\n * does not subscribe to `$on(\"query\")` and does not capture typed model\n * operations such as `prisma.user.findMany()`.\n */\n client: DatabaseClientLike;\n}\n\nconst prismaMethods = [\"$executeRaw\", \"$executeRawUnsafe\", \"$queryRaw\", \"$queryRawUnsafe\"] as const;\n\nfunction prismaStatement(args: readonly unknown[]): string | undefined {\n const first = args[0];\n if (typeof first === \"string\") return first;\n if (Array.isArray(first) && \"raw\" in first) return (first as { raw?: string[] }).raw?.join(\"?\");\n return undefined;\n}\n\nexport function prismaIntegration(options: PrismaIntegrationOptions) {\n return databaseIntegration({\n ...options,\n name: options.name ?? \"prisma\",\n system: \"prisma\",\n methods: prismaMethods,\n getStatement: prismaStatement,\n });\n}\n","import {\n databaseIntegration,\n type DatabaseClientLike,\n type DatabaseIntegrationOptions,\n} from \"./database-integration\";\n\nexport interface RedisIntegrationOptions extends Omit<\n DatabaseIntegrationOptions,\n \"client\" | \"system\" | \"methods\" | \"getStatement\"\n> {\n client: DatabaseClientLike;\n methods?: readonly string[];\n}\n\nconst redisMethods = [\n \"del\",\n \"get\",\n \"hget\",\n \"hset\",\n \"lpush\",\n \"publish\",\n \"rpush\",\n \"set\",\n \"xadd\",\n] as const;\n\nfunction redisStatement(args: readonly unknown[], method: string): string | undefined {\n const key = args[0] === undefined ? \"\" : ` ${String(args[0])}`;\n return `${method.toUpperCase()}${key}`;\n}\n\nexport function redisIntegration(options: RedisIntegrationOptions) {\n return databaseIntegration({\n ...options,\n name: options.name ?? \"redis\",\n system: \"redis\",\n methods: options.methods ?? redisMethods,\n getStatement: redisStatement,\n });\n}\n","import {\n normalizeValue,\n withContext,\n type LoggerLevel,\n type LoggerLike,\n type LogData,\n} from \"@loggerjs/core\";\n\nexport type ServerlessCallback<TResult> = (error?: unknown, result?: TResult) => void;\n\nexport type ServerlessHandler<TEvent, TContext, TResult> = (\n event: TEvent,\n context: TContext,\n callback?: ServerlessCallback<TResult>,\n) => TResult | Promise<TResult> | void;\n\nexport interface ServerlessContextLike {\n awsRequestId?: string;\n functionName?: string;\n functionVersion?: string;\n invokedFunctionArn?: string;\n [key: string]: unknown;\n}\n\nexport interface ServerlessEventLike {\n httpMethod?: string;\n path?: string;\n rawPath?: string;\n routeKey?: string;\n headers?: Record<string, string | undefined>;\n requestContext?: {\n requestId?: string;\n http?: {\n method?: string;\n path?: string;\n };\n routeKey?: string;\n };\n [key: string]: unknown;\n}\n\nexport interface ServerlessInvocationInfo<TEvent, TContext> {\n event: TEvent;\n context: TContext;\n requestId?: string;\n operation?: string;\n}\n\nexport interface ServerlessIntegrationOptions<TEvent, TContext, TResult> {\n name?: string;\n platform?: string;\n captureSuccessful?: boolean;\n captureAll?: boolean;\n sampleRate?: number;\n random?: () => number;\n captureEvent?: boolean;\n captureResult?: boolean;\n bindContext?: boolean;\n getRequestId?: (event: TEvent, context: TContext) => string | undefined;\n getOperation?: (event: TEvent, context: TContext) => string | undefined;\n level?: (\n error: unknown,\n durationMs: number,\n info: ServerlessInvocationInfo<TEvent, TContext>,\n ) => LoggerLevel;\n normalizeEvent?: (event: TEvent) => unknown;\n normalizeResult?: (result: TResult) => unknown;\n}\n\nconst defaultRandom = () => Math.random();\nlet coldStart = true;\n\nfunction isPromiseLike<TResult>(value: unknown): value is PromiseLike<TResult> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction defaultLevel(error: unknown): LoggerLevel {\n return error ? \"error\" : \"info\";\n}\n\nfunction defaultRequestId(event: unknown, context: unknown): string | undefined {\n const ctx = context as ServerlessContextLike | undefined;\n const evt = event as ServerlessEventLike | undefined;\n return (\n ctx?.awsRequestId ??\n evt?.requestContext?.requestId ??\n evt?.headers?.[\"x-request-id\"] ??\n evt?.headers?.[\"X-Request-Id\"]\n );\n}\n\nfunction defaultOperation(event: unknown, context: unknown): string | undefined {\n const ctx = context as ServerlessContextLike | undefined;\n const evt = event as ServerlessEventLike | undefined;\n return (\n evt?.routeKey ??\n evt?.requestContext?.routeKey ??\n (evt?.requestContext?.http?.method && evt.requestContext.http.path\n ? `${evt.requestContext.http.method} ${evt.requestContext.http.path}`\n : undefined) ??\n (evt?.httpMethod && (evt.rawPath ?? evt.path)\n ? `${evt.httpMethod} ${evt.rawPath ?? evt.path}`\n : undefined) ??\n ctx?.functionName\n );\n}\n\nfunction normalizeUnknown(value: unknown) {\n return normalizeValue(value, { maxDepth: 5, maxObjectKeys: 120 });\n}\n\nexport function serverlessIntegration<TEvent, TContext, TResult>(\n logger: LoggerLike,\n handler: ServerlessHandler<TEvent, TContext, TResult>,\n options: ServerlessIntegrationOptions<TEvent, TContext, TResult> = {},\n): ServerlessHandler<TEvent, TContext, TResult> {\n const name = options.name ?? \"serverless\";\n const platform = options.platform ?? \"serverless\";\n const captureSuccessful = options.captureSuccessful ?? options.captureAll ?? true;\n const sampleRate = options.sampleRate ?? 1;\n const random = options.random ?? defaultRandom;\n const bindContext = options.bindContext ?? true;\n const levelFor = options.level ?? defaultLevel;\n\n return (event, context, callback) => {\n const started = Date.now();\n const currentColdStart = coldStart;\n coldStart = false;\n const requestId = options.getRequestId?.(event, context) ?? defaultRequestId(event, context);\n const operation = options.getOperation?.(event, context) ?? defaultOperation(event, context);\n let captured = false;\n\n const shouldCapture = (error: unknown) => {\n if (error) return true;\n if (!captureSuccessful) return false;\n return sampleRate >= 1 || random() < sampleRate;\n };\n\n const capture = (error: unknown, result?: TResult) => {\n if (captured || !shouldCapture(error)) return;\n captured = true;\n const durationMs = Date.now() - started;\n const info: ServerlessInvocationInfo<TEvent, TContext> = {\n context,\n event,\n operation,\n requestId,\n };\n logger.log(levelFor(error, durationMs, info), `Serverless ${operation ?? name}`, {\n error,\n serverless: {\n kind: name,\n platform,\n operation,\n requestId,\n coldStart: currentColdStart,\n durationMs,\n event: options.captureEvent\n ? (options.normalizeEvent?.(event) ?? normalizeUnknown(event))\n : undefined,\n result:\n options.captureResult && result !== undefined\n ? (options.normalizeResult?.(result) ?? normalizeUnknown(result))\n : undefined,\n },\n } as LogData);\n };\n\n const wrappedCallback = callback\n ? (error?: unknown, result?: TResult) => {\n capture(error, result);\n callback(error, result);\n }\n : undefined;\n\n const invoke = () => {\n try {\n const result = handler(event, context, wrappedCallback);\n if (isPromiseLike<TResult>(result)) {\n return result.then(\n (value) => {\n capture(undefined, value);\n return value;\n },\n (error) => {\n capture(error);\n throw error;\n },\n );\n }\n if (result !== undefined || !wrappedCallback) capture(undefined, result as TResult);\n return result;\n } catch (error) {\n capture(error);\n throw error;\n }\n };\n\n if (!bindContext) return invoke();\n return withContext(\n {\n functionName: (context as ServerlessContextLike | undefined)?.functionName,\n requestId,\n serverlessPlatform: platform,\n },\n invoke,\n );\n };\n}\n","import { createRequire } from \"node:module\";\nimport {\n normalizeValue,\n type CaptureInput,\n type Integration,\n type IntegrationSetupContext,\n} from \"@loggerjs/core\";\n\nexport interface DiagnosticsChannelModule {\n subscribe: (name: string, listener: (message: unknown, name: string) => void) => void;\n unsubscribe?: (name: string, listener: (message: unknown, name: string) => void) => void;\n}\n\nexport interface DiagnosticsChannelIntegrationOptions {\n channels?: readonly string[];\n diagnosticsChannel?: DiagnosticsChannelModule | null;\n captureMessage?: boolean;\n}\n\nconst defaultChannels = [\n \"http.client.request.start\",\n \"http.client.response.finish\",\n \"http.server.request.start\",\n \"http.server.response.finish\",\n \"undici:request:create\",\n \"undici:request:headers\",\n \"undici:request:trailers\",\n \"undici:request:error\",\n] as const;\n\nconst requireBuiltin = createRequire(import.meta.url);\nlet cachedDiagnosticsChannel: DiagnosticsChannelModule | null | undefined;\n\nexport function diagnosticsChannelIntegration(\n options: DiagnosticsChannelIntegrationOptions = {},\n): Integration {\n const channels = options.channels ?? defaultChannels;\n const captureMessage = options.captureMessage ?? false;\n\n return {\n name: \"diagnostics-channel\",\n setup(api: IntegrationSetupContext) {\n const diagnosticsChannel =\n options.diagnosticsChannel === undefined\n ? loadDiagnosticsChannel()\n : options.diagnosticsChannel;\n if (!diagnosticsChannel) return;\n\n const disposers: Array<() => void> = [];\n let disposed = false;\n const capture = api.guard((input: CaptureInput) => api.capture(input));\n\n for (const channel of channels) {\n const listener = (message: unknown, name: string) => {\n capture({\n level: name.endsWith(\":error\") ? \"error\" : \"debug\",\n message: `diagnostics_channel ${name}`,\n props: {\n diagnostics: {\n channel: name,\n message: captureMessage ? normalizeValue(message, { maxDepth: 4 }) : undefined,\n },\n },\n });\n };\n diagnosticsChannel.subscribe(channel, listener);\n disposers.push(() => diagnosticsChannel.unsubscribe?.(channel, listener));\n }\n\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n };\n },\n };\n}\n\nfunction loadDiagnosticsChannel(): DiagnosticsChannelModule | null {\n if (cachedDiagnosticsChannel !== undefined) return cachedDiagnosticsChannel;\n try {\n cachedDiagnosticsChannel = requireBuiltin(\n \"node:diagnostics_channel\",\n ) as DiagnosticsChannelModule;\n } catch {\n try {\n cachedDiagnosticsChannel = requireBuiltin(\"diagnostics_channel\") as DiagnosticsChannelModule;\n } catch {\n cachedDiagnosticsChannel = null;\n }\n }\n return cachedDiagnosticsChannel;\n}\n","import { createRequire } from \"node:module\";\nimport {\n setLoggerDiagnosticSink,\n type LoggerDiagnosticEvent,\n type LoggerDiagnosticSink,\n type LoggerDiagnosticStage,\n} from \"@loggerjs/core\";\n\nexport interface LoggerDiagnosticsChannelPublisher {\n hasSubscribers?: boolean;\n publish: (message: LoggerDiagnosticEvent) => void;\n}\n\nexport interface LoggerDiagnosticsChannelModule {\n channel: (name: string) => LoggerDiagnosticsChannelPublisher;\n}\n\nexport interface InstallLoggerDiagnosticsChannelOptions {\n diagnosticsChannel?: LoggerDiagnosticsChannelModule | null;\n prefix?: string;\n}\n\nconst requireBuiltin = createRequire(import.meta.url);\nlet cachedDiagnosticsChannel: LoggerDiagnosticsChannelModule | null | undefined;\n\nfunction loadDiagnosticsChannel(): LoggerDiagnosticsChannelModule | null {\n if (cachedDiagnosticsChannel !== undefined) return cachedDiagnosticsChannel;\n try {\n cachedDiagnosticsChannel = requireBuiltin(\n \"node:diagnostics_channel\",\n ) as LoggerDiagnosticsChannelModule;\n } catch {\n try {\n cachedDiagnosticsChannel = requireBuiltin(\n \"diagnostics_channel\",\n ) as LoggerDiagnosticsChannelModule;\n } catch {\n cachedDiagnosticsChannel = null;\n }\n }\n return cachedDiagnosticsChannel;\n}\n\nexport function installLoggerDiagnosticsChannel(\n options: InstallLoggerDiagnosticsChannelOptions = {},\n): () => void {\n const diagnosticsChannel =\n options.diagnosticsChannel === undefined\n ? loadDiagnosticsChannel()\n : options.diagnosticsChannel;\n if (!diagnosticsChannel) return () => {};\n\n const prefix = options.prefix ?? \"loggerjs\";\n const channels = new Map<string, LoggerDiagnosticsChannelPublisher>();\n const channelFor = (stage: LoggerDiagnosticStage) => {\n const name = `${prefix}.${stage}`;\n let channel = channels.get(name);\n if (!channel) {\n channel = diagnosticsChannel.channel(name);\n channels.set(name, channel);\n }\n return channel;\n };\n const sink: LoggerDiagnosticSink = (event) => {\n channelFor(event.stage).publish(event);\n };\n sink.enabled = (stage) => channelFor(stage).hasSubscribers !== false;\n const previous = setLoggerDiagnosticSink(sink);\n\n return () => {\n setLoggerDiagnosticSink(previous);\n };\n}\n"],"mappings":"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"}
|