import { RpcMessage } from "../codec/MessageCodec.js"; import { SendFn } from "../presence/PresenceBroadcaster.js"; //#region src/addons/netblocks/src/core/rpc/NetEvents.d.ts export type RpcHandler = (payload: T, fromPeerId: string) => void; export declare class NetEvents { private _handlers; private _send; constructor(send: SendFn); /** Subscribe to a topic. Returns an unsubscribe function. */ on(topic: string, handler: RpcHandler): () => void; off(topic: string, handler: RpcHandler): void; /** Broadcast `payload` on `topic` to every other peer. */ emit(topic: string, payload: T): void; /** Send `payload` only to one peer. */ emitTo(targetPeerId: string, topic: string, payload: T): void; /** Internal: dispatch an inbound RPC message to local handlers. */ _dispatch(msg: RpcMessage): void; } /** * Strongly-typed view over a NetEvents instance. Each topic in `TEventMap` * declares its payload shape; `on` / `emit` / `emitTo` then infer the * payload type from the topic name. * * The runtime is the same NetEvents — this is purely a TypeScript wrapper: * * ```ts * type Events = { * chat: {text: string}; * ping: number; * }; * const e = typedEvents(session.events); * e.on('chat', (p) => p.text); // p is {text: string} * e.emit('ping', 42); // payload must be number * ``` */ export interface TypedNetEvents> { on(topic: K, handler: (payload: TEventMap[K], fromPeerId: string) => void): () => void; off(topic: K, handler: (payload: TEventMap[K], fromPeerId: string) => void): void; emit(topic: K, payload: TEventMap[K]): void; emitTo(targetPeerId: string, topic: K, payload: TEventMap[K]): void; } export declare function typedEvents>(events: NetEvents): TypedNetEvents; //#endregion