import type { ExtractMessageType } from '@colyseus/shared-types';
import type { Room } from '../Room.ts';
export type RoomMethodName = 'onCreate' | 'onAuth' | 'onJoin' | 'onLeave' | 'onDrop' | 'onReconnect' | 'onDispose' | 'onMessage' | 'setSimulationInterval' | 'setInterval' | 'setTimeout';
export type RoomException<R extends Room = Room> = OnCreateException<R> | OnAuthException<R> | OnJoinException<R> | OnLeaveException<R> | OnDropException<R> | OnReconnectException<R> | OnDisposeException | OnMessageException<R> | SimulationIntervalException | TimedEventException;
export declare class OnCreateException<R extends Room = Room> extends Error {
    options: Parameters<R['onCreate']>[0];
    constructor(cause: Error, message: string, options: Parameters<R['onCreate']>[0]);
}
export declare class OnAuthException<R extends Room = Room> extends Error {
    client: Parameters<R['onAuth']>[0];
    options: Parameters<R['onAuth']>[1];
    constructor(cause: Error, message: string, client: Parameters<R['onAuth']>[0], options: Parameters<R['onAuth']>[1]);
}
export declare class OnJoinException<R extends Room = Room> extends Error {
    client: Parameters<R['onJoin']>[0];
    options: Parameters<R['onJoin']>[1];
    auth: Parameters<R['onJoin']>[2];
    constructor(cause: Error, message: string, client: Parameters<R['onJoin']>[0], options: Parameters<R['onJoin']>[1], auth: Parameters<R['onJoin']>[2]);
}
export declare class OnLeaveException<R extends Room = Room> extends Error {
    client: Parameters<R['onLeave']>[0];
    consented: Parameters<R['onLeave']>[1];
    constructor(cause: Error, message: string, client: Parameters<R['onLeave']>[0], consented: Parameters<R['onLeave']>[1]);
}
export declare class OnDropException<R extends Room = Room> extends Error {
    client: Parameters<R['onDrop']>[0];
    code: Parameters<R['onDrop']>[1];
    constructor(cause: Error, message: string, client: Parameters<R['onDrop']>[0], code: Parameters<R['onDrop']>[1]);
}
export declare class OnReconnectException<R extends Room = Room> extends Error {
    client: Parameters<R['onReconnect']>[0];
    constructor(cause: Error, message: string, client: Parameters<R['onReconnect']>[0]);
}
export declare class OnDisposeException extends Error {
    constructor(cause: Error, message: string);
}
export declare class OnMessageException<R extends Room, MessageType extends keyof R['messages'] = keyof R['messages']> extends Error {
    client: R['~client'];
    payload: ExtractMessageType<R['messages'][MessageType]>;
    type: MessageType;
    constructor(cause: Error, message: string, client: R['~client'], payload: ExtractMessageType<R['messages'][MessageType]>, type: MessageType);
    isType<T extends keyof R['messages']>(type: T): this is OnMessageException<R, T>;
}
export declare class SimulationIntervalException extends Error {
    constructor(cause: Error, message: string);
}
export declare class TimedEventException extends Error {
    args: any[];
    constructor(cause: Error, message: string, ...args: any[]);
}
