import { LogHandler } from './logging.js';
import { RateLimiter } from './ratelimit.js';
import { ClientMessageKind } from './utils.js';
import type { WebSocket } from 'ws';
import type { id, Bit, LoggingOpts, SessionOpts, ServerLifecycleHooks } from './types.d.ts';
import type { RateLimit } from './ratelimit.js';
export type SubObj = {
    tables: string[];
    sql: string;
    params?: object;
    rate_limiter?: RateLimiter;
    cache_hash: number;
};
export type SocioSessionOptions = {
    default_perms?: Map<string, string[]>;
    session_opts?: SessionOpts;
    name?: string;
} & LoggingOpts;
export declare class SocioSession extends LogHandler {
    #private;
    verbose: boolean;
    last_seen: number;
    session_opts: SessionOpts;
    name?: string;
    constructor(client_id: string, ws_client: WebSocket, client_ipAddr: string, { logging, default_perms, session_opts, name }?: SocioSessionOptions);
    get web_socket(): WebSocket;
    get id(): string;
    get ipAddr(): string;
    Send(kind: ClientMessageKind, ...data: any[]): Promise<void> | void;
    RegisterSub(tables: string[], id: id, sql: string, params?: object, rate_limit?: RateLimit): void;
    UnRegisterSub(id: id): Bit;
    GetSubsForTables(tables?: string[]): Generator<{
        id: id;
        tables: string[];
        sql: string;
        params?: object;
        rate_limiter?: RateLimiter;
        cache_hash: number;
    }, void, unknown>;
    get authenticated(): boolean;
    Authenticate(auth_func: ServerLifecycleHooks['auth'], params?: object | null): Promise<boolean>;
    HasPermFor(verb?: string, table?: string): boolean | undefined;
    AddPermFor(verb?: string, table?: string): void;
    last_seen_now(): void;
    CloseConnection(code?: number): void;
    Destroy(remove_session_callback: Function, ttl_ms: number, force?: boolean): void;
    Restore(): void;
    ClearSubs(): void;
    CopySessionFrom(old_client: SocioSession): void;
}
