import type { ServerWebSocket } from "bun";
import type { InferOutput, ObjectSchema } from "valibot";
export type SendFunction = <Schema extends MessageSchemaType>(schema: Schema, data: Schema extends ObjectSchema<infer TEntries, any> ? TEntries extends Record<string, any> ? "payload" extends keyof TEntries ? InferOutput<TEntries["payload"]> : unknown : unknown : unknown, meta?: Schema extends ObjectSchema<infer TEntries, any> ? TEntries extends Record<string, any> ? "meta" extends keyof TEntries ? InferOutput<TEntries["meta"]> : unknown : unknown : unknown) => void;
export type MessageContext<Schema extends MessageSchemaType, Data> = {
    ws: ServerWebSocket<Data>;
    meta: Schema extends ObjectSchema<infer TEntries, any> ? TEntries extends Record<string, any> ? "meta" extends keyof TEntries ? InferOutput<TEntries["meta"]> : unknown : unknown : unknown;
    send: SendFunction;
} & (Schema extends ObjectSchema<infer TEntries, any> ? TEntries extends Record<string, any> ? "payload" extends keyof TEntries ? {
    payload: InferOutput<TEntries["payload"]>;
} : Record<string, never> : Record<string, never> : Record<string, never>);
export type MessageHandler<Schema extends MessageSchemaType, Data> = (context: MessageContext<Schema, Data>) => void | Promise<void>;
export type MessageSchemaType = ObjectSchema<any, any>;
export interface MessageHandlerEntry<Data = unknown> {
    schema: MessageSchemaType;
    handler: MessageHandler<MessageSchemaType, Data>;
}
export type { WebSocketRouterOptions, WebSocketData, UpgradeOptions, OpenHandlerContext, OpenHandler, CloseHandlerContext, CloseHandler, } from "../shared/types";
//# sourceMappingURL=types.d.ts.map