import { S as SockaWebSocketSession, a as SockaWebSocketSessionConfigUnion, c as SockaWebSocketInit, d as SockaWebSocketSessionConfig } from '../SockaWebSocketSession-CmEtwVE-.js';
export { e as SockaEmitCapable, f as SockaPushSession, b as SockaStrictWebSocketInit, g as SockaWebSocketSessionConfigLoose, h as broadcastContractPushToAll, i as broadcastSockaEventToAll, j as broadcastSockaEventToPeers, r as runSockaSessionOnAttached } from '../SockaWebSocketSession-CmEtwVE-.js';
import { S as SockaContractBound, a as SockaWireFormat } from '../socka-report-error-BALZPjd1.js';
import '@standard-schema/spec';

type AttachedSockaWebSocket<TContract extends SockaContractBound, TData> = {
    session: SockaWebSocketSession<TContract, TData>;
    /** Remove listeners and delete this session from the map (idempotent). */
    dispose: () => void;
};
/**
 * Register WebSocket `message` / `close` handlers, insert the session into
 * `sessions`, and return `{ session, dispose }`. `dispose` runs
 * {@link SockaWebSocketSession.invokeHandleClose} once, then removes listeners
 * (also triggered by `close`).
 */
declare function attachSockaWebSocket<TContract extends SockaContractBound, TData>(websocket: WebSocket, sessions: Map<WebSocket, SockaWebSocketSession<TContract, TData>>, config: SockaWebSocketSessionConfigUnion<TContract, TData>, init?: SockaWebSocketInit): AttachedSockaWebSocket<TContract, TData>;

/**
 * Decode a WebSocket `message` payload and dispatch it to the session (same
 * behavior as the `message` handler installed by {@link attachSockaWebSocket}).
 * Use this when the runtime does not support `addEventListener` on the socket
 * (e.g. Bun {@link ServerWebSocket}) or when handling messages manually.
 */
declare function dispatchSockaInboundMessage<TContract extends SockaContractBound, TData>(session: SockaWebSocketSession<TContract, TData>, wireFormat: SockaWireFormat, data: MessageEvent["data"]): Promise<void>;

type SockaRoomBundle<TContract extends SockaContractBound, TData> = {
    sessionMap: Map<WebSocket, SockaWebSocketSession<TContract, TData>>;
    config: SockaWebSocketSessionConfig<TContract, TData>;
};
/**
 * Per-room {@link SockaWebSocketSession} maps and configs for Bun/Hono multi-room
 * apps (one bundle per `roomId`).
 */
declare function createSockaRoomRegistry<TContract extends SockaContractBound, TData>(makeConfig: (roomId: string, sessionMap: Map<WebSocket, SockaWebSocketSession<TContract, TData>>) => SockaWebSocketSessionConfig<TContract, TData>): {
    get(roomId: string): SockaRoomBundle<TContract, TData>;
    readonly rooms: ReadonlyMap<string, SockaRoomBundle<TContract, TData>>;
};

export { type AttachedSockaWebSocket, type SockaRoomBundle, SockaWebSocketInit, SockaWebSocketSession, SockaWebSocketSessionConfig, SockaWebSocketSessionConfigUnion, attachSockaWebSocket, createSockaRoomRegistry, dispatchSockaInboundMessage };
