import { Context, Environment, Logger } from '../context.js';
import { FullConfiguration, Metadata } from './registry.js';
export type ClientInfo = {
    readonly operationId?: string;
    readonly clientId?: string;
    readonly clientIp?: string;
    readonly clientPort?: number;
    readonly userAgent?: string;
};
export type EventMetadata = {
    topic: string;
    type: string;
    subject: string;
    id?: string;
};
export type BufferedEvent = {
    eventTime: Date;
    meta: Omit<EventMetadata, 'topic'>;
    ids: ClientInfo;
    json?: string;
};
export type EventTransport = {
    readonly publishRate: number;
    sendEvents(topic: string, events: BufferedEvent[], signal: AbortSignal): Promise<void>;
};
export type LogLevel = 'trace' | 'debug' | 'info' | 'warning' | 'error' | 'fatal';
export type LogEntry = {
    readonly level: LogLevel;
    readonly timestamp: number;
    readonly message: string;
    readonly error: unknown;
    readonly json: string;
};
export type LogTransport = {
    readonly publishRate?: number;
    sendEntries(entries: LogEntry[], signal: AbortSignal): Promise<void> | undefined;
};
export type RootLogger = {
    enrichReserved(fields: object): RootLogger;
    flush(): Promise<void>;
} & Logger;
export declare function createContext(clientInfo: ClientInfo, loggers: LogTransport[], eventTransport: EventTransport, timeouts: {
    default: number;
    cap?: number;
}, outerController: AbortController, config?: FullConfiguration, meta?: Metadata, environment?: Environment, now?: () => Date): {
    log: RootLogger;
    context: Omit<Context, 'log'>;
    success: () => Promise<unknown>;
    flush: () => Promise<void>;
};
