export declare type RoomId = string;
export declare type UserId = string;
export interface Application {
    verifyToken(token: string, roomId: RoomId): Promise<UserId | undefined>;
    subscribeUser(roomId: RoomId, userId: UserId): Promise<void>;
    unsubscribeUser(roomId: RoomId, userId: UserId): Promise<void>;
    onMessage(roomId: RoomId, userId: UserId, data: ArrayBuffer): Promise<void>;
}
export interface Server {
    broadcastMessage(roomId: RoomId, data: ArrayBuffer): void;
    sendMessage(roomId: RoomId, userId: UserId, data: ArrayBuffer): void;
    closeConnection(roomId: RoomId, userId: UserId, error: string): void;
}
export declare function startServer(app: Application, port: number): Promise<Server>;
export declare function verifyJwt(token: string, secret: string, userIdField?: string): UserId | undefined;
