import type { Container, ContainersStorage } from '../containers';
import type { IServerContext } from '../../types';
import type { IRequestContextCacheConfiguration, IRequestContextIncoming, IRequestContextOutgoing, IRequestContextMessage, IRequestContextForwarded } from './types';
export declare class RequestContextSnapshot<TContext extends IServerContext = IServerContext> {
    protected configuration: Pick<TContext, 'transport' | 'event'> & Pick<RequestContextSnapshot, 'incoming' | 'outgoing' | 'event' | 'storage' | 'flags'> & Partial<Pick<RequestContextSnapshot, 'messages' | 'state' | 'seed' | 'container' | 'forwarded' | 'error' | 'cache'>>;
    TPlain: Omit<RequestContextSnapshot['configuration'], 'container' | 'storage' | 'forwarded'> & {
        transport: TContext['transport'];
        incoming: {
            dataRaw?: string;
        };
        outgoing: {
            dataRaw?: string;
        };
        forwarded?: Omit<IRequestContextForwarded, 'incoming' | 'outgoing'> & {
            incoming: Omit<IRequestContextIncoming, 'dataRaw'> & {
                dataRaw?: string;
            };
            outgoing?: Omit<IRequestContextOutgoing, 'dataRaw'> & {
                dataRaw?: string;
            };
        };
        container?: Container['TPlain'];
        error?: RequestContextSnapshot['error'];
    };
    transport: TContext['transport'];
    event: TContext['event'];
    flags: Partial<Record<TContext['flag'], boolean>>;
    storage: ContainersStorage;
    cache: IRequestContextCacheConfiguration;
    state: object;
    incoming: IRequestContextIncoming;
    outgoing: IRequestContextOutgoing;
    forwarded?: IRequestContextForwarded;
    messages?: IRequestContextMessage[];
    container?: Container<any>;
    seed?: number;
    error?: {
        code?: string;
        message?: string;
        isManual?: boolean;
    };
    constructor(configuration: Pick<TContext, 'transport' | 'event'> & Pick<RequestContextSnapshot, 'incoming' | 'outgoing' | 'event' | 'storage' | 'flags'> & Partial<Pick<RequestContextSnapshot, 'messages' | 'state' | 'seed' | 'container' | 'forwarded' | 'error' | 'cache'>>);
    assign<T extends Partial<RequestContextSnapshot['configuration']>>(payload: T): this & T;
    pick<K extends keyof RequestContextSnapshot['configuration']>(keys: K[]): Pick<RequestContextSnapshot, K>;
    omit<K extends keyof RequestContextSnapshot['configuration']>(keys: K[]): Omit<RequestContextSnapshot, K>;
    unset<K extends keyof RequestContextSnapshot['configuration']>(keys: K[]): Omit<RequestContextSnapshot, K>;
    clone(): this;
    toPlain(): RequestContextSnapshot['TPlain'];
    static build<TContext extends IServerContext = IServerContext>(configuration: RequestContextSnapshot<TContext>['configuration']): RequestContextSnapshot<TContext>;
}
//# sourceMappingURL=snapshot.d.ts.map