import { MessagePort as NodeMessagePort, Worker as NodeWorker } from 'node:worker_threads';
import { tl } from '../../tl/index.js';
import { ConnectionState } from '../client.types.js';
import { CurrentUserInfo } from '../storage/service/current-user.js';
import { SerializedError } from './errors.js';
export type WorkerInboundMessage = {
    _mtcuteWorkerId: string;
    connectionId: string;
    type: 'connect';
} | {
    _mtcuteWorkerId: string;
    connectionId: string;
    type: 'release';
} | {
    _mtcuteWorkerId: string;
    connectionId: string;
    type: 'heartbeat';
} | {
    _mtcuteWorkerId: string;
    connectionId: string;
    type: 'invoke';
    id: number;
    target: 'custom' | 'client' | 'storage' | 'storage-self' | 'storage-peers' | 'app-config' | 'timers';
    method: string;
    args: SerializedResult<unknown[]>;
    void: boolean;
    withAbort: boolean;
} | {
    _mtcuteWorkerId: string;
    connectionId: string;
    type: 'abort';
    id: number;
};
export type WorkerOutboundMessage = {
    _mtcuteWorkerId: string;
    type: 'server_update';
    update: SerializedResult<tl.TypeUpdates>;
} | {
    _mtcuteWorkerId: string;
    type: 'update';
    update: SerializedResult<tl.TypeUpdate>;
    users: SerializedResult<Map<number, tl.TypeUser>>;
    chats: SerializedResult<Map<number, tl.TypeChat>>;
    hasMin: boolean;
} | {
    _mtcuteWorkerId: string;
    type: 'error';
    error: SerializedError;
} | {
    _mtcuteWorkerId: string;
    type: 'stop';
} | {
    _mtcuteWorkerId: string;
    type: 'conn_state';
    state: ConnectionState;
} | {
    _mtcuteWorkerId: string;
    type: 'log';
    color: number;
    level: number;
    tag: string;
    fmt: string;
    args: unknown[];
} | {
    _mtcuteWorkerId: string;
    type: 'self_sync';
    self: SerializedResult<CurrentUserInfo | null>;
} | {
    _mtcuteWorkerId: string;
    connectionId: string;
    type: 'connection_expired';
} | {
    _mtcuteWorkerId: string;
    connectionId: string;
    type: 'result';
    id: number;
    result?: SerializedResult<unknown>;
    error?: SerializedError;
};
export declare const DEFAULT_WORKER_ID = "default";
export type SomeWorker = NodeWorker | NodeMessagePort | Worker | SharedWorker | MessagePort;
export type SendFn = (message: WorkerInboundMessage) => void;
export type ClientMessageHandler = (message: WorkerOutboundMessage) => void;
export type RespondFn = (message: WorkerOutboundMessage) => void;
export type WorkerMessageHandler = (message: WorkerInboundMessage, respond: RespondFn) => void;
export type WorkerCustomMethods = Record<string, (...args: any[]) => Promise<any>>;
export interface SerializedResult<T> {
    __serialized__: T;
}
export declare function serializeResult<T>(result: T): SerializedResult<T>;
export declare function deserializeResult<T>(result: SerializedResult<T>): T;
