import { type infer as ZodInfer, type ZodType } from 'zod'; import type { RpcSchema } from './serialization.ts'; import type { PeerId, PeerPosition } from './schema/peer.ts'; import type { MediaId, MediaProperties } from './schema/media.ts'; import type { RoomId } from './schema/room.ts'; import type { WebRtcUpdate } from './schema/webrtc.ts'; export type CommandSchema = { request: RpcSchema; response: RpcSchema; }; export type Commands = Record; export type CommandRequest = ZodInfer; export type CommandResponse = ZodInfer; export type ParsedCommand = { [Name in K]: { name: Name; request: ZodInfer; }; }[K]; export declare function parseCommand(name: K, request: unknown, schema: C): ParsedCommand | undefined; export declare function parseRequest(name: K, request: unknown, schema: C): CommandRequest; export declare function parseResponse(name: K, response: unknown, schema: C): CommandResponse | undefined; export type MainCommands = { Hello: { request: ZodType<{ stream: 'main'; }>; response: ZodType; }; JoinRoom: { request: ZodType<{ token: string; room_id: RoomId; user_data: Uint8Array; position: PeerPosition; }>; response: ZodType<{ peer_id: PeerId; stream_id?: number; token?: string; }>; }; WebRtcUpdate: { request: ZodType; response: ZodType; }; RequestReconnectToken: { request: ZodType<{ peer_id?: PeerId; }>; response: ZodType; }; Ping: { request: ZodType>; response: ZodType; }; }; export declare const MainCommandsRpc: MainCommands; export type RoomCommands = { Hello: { request: ZodType<{ stream: 'room'; token: string; room_id: string; user_data: Uint8Array; position: PeerPosition; }>; response: ZodType; }; UpdatePeer: { request: ZodType<{ user_data: Uint8Array; }>; response: ZodType; }; StartMedia: { request: ZodType<{ media_id: MediaId; properties: MediaProperties; }>; response: ZodType; }; StopMedia: { request: ZodType<{ media_id: MediaId; }>; response: ZodType; }; PauseMedia: { request: ZodType<{ media_id: MediaId; }>; response: ZodType; }; ResumeMedia: { request: ZodType<{ media_id: MediaId; }>; response: ZodType; }; SetPeerPosition: { request: ZodType<{ position: PeerPosition; }>; response: ZodType; }; SendMessage: { request: ZodType<{ target_peer_ids?: PeerId[]; message: Uint8Array; }>; response: ZodType; }; }; export declare const RoomCommandsRpc: RoomCommands;