import type { ManagerOptions, Socket, SocketOptions } from "socket.io-client"; import type { inferZodSchemaInput, inferZodSchemaOutput } from "./types/schemas.js"; import type { StructuredLogger } from "./utils/structuredLogger.js"; import type { EventEmitterLike, ZodMessageValueSchema } from "./zodMessageHandler.js"; export interface ZodSocketMessageCatalogSchema { [key: string]: { message: ZodMessageValueSchema; } | { message: ZodMessageValueSchema; callback?: ZodMessageValueSchema; }; } export type ZodMessageCatalogToSocketIoEvents = { [K in keyof TCatalog]: SocketMessageHasCallback extends true ? (message: inferZodSchemaOutput>, callback: (ack: inferZodSchemaOutput>) => void) => void : (message: inferZodSchemaOutput>) => void; }; export type GetSocketMessageSchema = TRPCCatalog[TMessageType]["message"]; export type InferSocketMessageSchema = inferZodSchemaOutput>; export type GetSocketCallbackSchema = TRPCCatalog[TMessageType] extends { callback: any; } ? TRPCCatalog[TMessageType]["callback"] : never; export type InferSocketCallbackSchema = inferZodSchemaOutput>; export type SocketMessageHasCallback = GetSocketCallbackSchema extends never ? false : true; export type ZodSocketMessageHandlers = Partial<{ [K in keyof TCatalogSchema]: (payload: inferZodSchemaOutput>) => Promise extends true ? inferZodSchemaInput> : void>; }>; export type ZodSocketMessageHandlerOptions = { schema: TMessageCatalog; handlers?: ZodSocketMessageHandlers; logger?: StructuredLogger; logPayloads?: boolean; }; type MessageFromSocketSchema = { type: K; payload: inferZodSchemaInput>; }; export type MessagesFromSocketCatalog = { [K in keyof TMessageCatalog]: MessageFromSocketSchema; }[keyof TMessageCatalog]; export declare class ZodSocketMessageHandler { #private; constructor(options: ZodSocketMessageHandlerOptions); handleMessage(message: unknown): Promise<(SocketMessageHasCallback extends true ? inferZodSchemaInput> : void) | undefined>; private parseMessage; registerHandlers(emitter: EventEmitterLike, logger?: StructuredLogger): void; } export type ZodSocketMessageSenderOptions = { schema: TMessageCatalog; socket: ZodSocket; logger?: StructuredLogger; }; export type GetSocketMessagesWithCallback = { [K in keyof TMessageCatalog]: SocketMessageHasCallback extends true ? K : never; }[keyof TMessageCatalog]; export type GetSocketMessagesWithoutCallback = { [K in keyof TMessageCatalog]: SocketMessageHasCallback extends true ? never : K; }[keyof TMessageCatalog]; export declare class ZodSocketMessageSender { #private; constructor(options: ZodSocketMessageSenderOptions); send>(type: K, payload: inferZodSchemaInput>): void; sendWithAck>(type: K, payload: inferZodSchemaInput>, timeout?: number): Promise>>; } export type ZodSocket = Omit, ZodMessageCatalogToSocketIoEvents>, "timeout"> & { timeout: (timeout: number) => Socket, ZodMessageCatalogToSocketIoEvents>; }; interface ZodSocketConnectionOptions { host: string; port?: number; secure?: boolean; namespace: string; clientMessages: TClientMessages; serverMessages: TServerMessages; extraHeaders?: { [header: string]: string; }; handlers?: ZodSocketMessageHandlers; authToken?: string; ioOptions?: Partial; logHandlerPayloads?: boolean; onConnection?: (socket: ZodSocket, handler: ZodSocketMessageHandler, sender: ZodSocketMessageSender, logger: StructuredLogger) => Promise; onDisconnect?: (socket: ZodSocket, reason: Socket.DisconnectReason, description: any, logger: StructuredLogger) => Promise; onError?: (socket: ZodSocket, err: Error, logger: StructuredLogger) => Promise; } export declare class ZodSocketConnection { #private; socket: ZodSocket; constructor(opts: ZodSocketConnectionOptions); close(): void; connect(): void; get send(): >(type: K, payload: inferZodSchemaInput>) => void; get sendWithAck(): >(type: K, payload: inferZodSchemaInput>, timeout?: number) => Promise>>; } export {};