import { Channel } from './channel'; import { type PresenceStoreInterface } from './presence'; import type { WsHandler } from './index'; type ChannelClass = new () => Channel; /** Function to resolve user from a WS upgrade request (e.g. parse JWT from query/header) */ export type WsAuthResolver = (req: Request) => unknown | Promise; export declare class ChannelManager { private channels; private presenceStore; private server; private authResolver; /** Register a channel class */ register(name: string, ChannelClass: ChannelClass): void; /** Set the Bun Server reference (called after Bun.serve()) */ setServer(server: any): void; /** Replace the presence store (e.g. with a Redis-backed implementation) */ setPresenceStore(store: PresenceStoreInterface): void; /** * Set an auth resolver that runs during WebSocket upgrade. * The resolver receives the HTTP request and should return a user object or null. * The result is stored in ws.data.user. * * @example * ```ts * wsm.channelAuth(async (req) => { * const token = new URL(req.url).searchParams.get('token') * if (!token) return null * return await verifyJwt(token) * }) * ``` */ setAuthResolver(resolver: WsAuthResolver): void; /** Get all registered channel names */ channelNames(): string[]; /** Build the WsHandler for the channel endpoint */ buildHandler(): WsHandler; private resolveTopic; private handleJoin; private handleLeave; } export {};