import pino from 'pino'; import type { EmailLogTransportService } from '../services/email-log-transport.service'; import type { EmailLogOptions } from '../interfaces'; import { PinoEmailTransport } from '../transports/pino-email.transport'; /** * Pino multistream target interface */ export interface PinoMultiStreamTarget { level: string | number; stream: NodeJS.WritableStream; } /** * Create a Pino transport stream for email logging * This function creates a writable stream that can be used with Pino * * @param options Email log options * @returns A Pino transport configuration * * @example * ```typescript * import { createEmailTransport } from '@nest-omni/core'; * import pino from 'pino'; * * const transport = createEmailTransport({ * enabled: true, * to: ['admin@example.com'], * from: 'noreply@example.com', * smtpHost: 'smtp.example.com', * }); * * const logger = pino(transport); * ``` */ export declare function createEmailTransport(options: EmailLogOptions): PinoEmailTransport; /** * Create a Pino multistream configuration that includes email transport * * @param options Email log options * @param emailTransport The email transport service instance or PinoEmailTransport * @returns Pino multistream targets array * * @example * ```typescript * import { createPinoMultistream } from '@nest-omni/core'; * import pino from 'pino'; * * const streams = createPinoMultistream(options, emailTransport); * const logger = pino(pino.multistream(streams)); * ``` */ export declare function createPinoMultistream(options: EmailLogOptions, emailTransport: EmailLogTransportService | PinoEmailTransport): PinoMultiStreamTarget[]; /** * Create a Pino logger with email transport already configured * This is the simplest way to get started with email logging * * @param options Email log options * @param baseLogger Optional base Pino logger to extend * @returns Pino logger with email transport * * @example * ```typescript * import { createPinoEmailLogger } from '@nest-omni/core'; * * const logger = createPinoEmailLogger({ * enabled: true, * to: ['admin@example.com'], * from: 'noreply@example.com', * smtpHost: 'smtp.example.com', * }); * * logger.error('Something went wrong!', { userId: '123' }); * // This will log to console AND send an email * ``` */ export declare function createPinoEmailLogger(options: EmailLogOptions, baseLogger?: pino.Logger): pino.Logger; /** * Manually attach email transport to an existing Pino logger * Use this if you want to add email logging to a specific logger instance * * @param logger The Pino logger instance * @param options Email log options * @param emailTransport The email transport service instance * * @example * ```typescript * import { attachEmailTransportToLogger } from '@nest-omni/core'; * * attachEmailTransportToLogger(myLogger, options, emailTransport); * ``` */ export declare function attachEmailTransportToLogger(logger: pino.Logger, options: EmailLogOptions, emailTransport: EmailLogTransportService | PinoEmailTransport): void; /** * Create a child logger with email context * Useful for adding consistent metadata to all logs from a module * * @param parentLogger The parent Pino logger * @param context Context object to include in all logs * @returns Child Pino logger * * @example * ```typescript * import { createPinoEmailLogger, createPinoEmailChildLogger } from '@nest-omni/core'; * * const baseLogger = createPinoEmailLogger(options); * const userServiceLogger = createPinoEmailChildLogger(baseLogger, { * module: 'UserService', * version: '1.0.0', * }); * * userServiceLogger.error('User creation failed', { userId: '123' }); * // Email will include: module, version, userId in context * ``` */ export declare function createPinoEmailChildLogger(parentLogger: pino.Logger, context: Record): pino.Logger; /** * Configure Pino email transport from environment variables * This is a convenience function that reads from process.env * * @returns PinoEmailTransport instance or null if not configured * * @example * ```typescript * import { createEmailTransportFromEnv } from '@nest-omni/core'; * import pino from 'pino'; * * const emailTransport = createEmailTransportFromEnv(); * const logger = emailTransport * ? pino(pino.multistream([ * { level: 'trace', stream: process.stdout }, * { level: 'error', stream: emailTransport }, * ])) * : pino(); * ``` */ export declare function createEmailTransportFromEnv(): PinoEmailTransport | null;