SocketChannelDefinition
interfaz
Definición de un canal Socket de server/socket/<nombre>.ts: schemas por dirección, guardas y
handlers de los eventos del cliente. Se declara con defineSocketChannel.
import type { SocketChannelDefinition } from "@meekojs/meeko/server";Source code src/server/socket/definitions.ts:22
Declaración #
interface SocketChannelDefinition<C extends SchemaMap, S extends SchemaMap, TServices = unknown> {
clientToServer: C
serverToClient: S
auth?: 'required' | 'optional'
authorize?: (args: { context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>
authorizeEvent?: (args: { event: keyof C & string; payload: unknown; context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>
authorizeSend?: (args: { event: keyof S & string; payload: unknown; context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>
handlers?: { [K in keyof C]?: (args: { payload: Output<C[K]>; context: RequestContext<TServices>; roomId?: string; emit: <E extends keyof S & string>(event: E, payload: Output<S[E]>) => Promise<void> }) => void | Promise<void> }
}Type parameters #
-
Cextends SchemaMap Schemas de los eventos que envía el cliente.
-
Sextends SchemaMap Schemas de los eventos que envía el servidor.
-
TServices= unknown Tipo de los servicios.
Example #
import type { Schema, SocketChannelDefinition } from "@meekojs/meeko/server";
type Chat = SocketChannelDefinition<{ message: Schema<{ text: string }> }, { message: Schema<{ text: string }> }>;Propiedades #
clientToServer
#
clientToServer: CSchemas de los eventos que envía el cliente; deben venir de shared/.
serverToClient
#
serverToClient: SSchemas de los eventos que envía el servidor; deben venir de shared/.
authorize
#
authorize?: (args: { context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>Autoriza el handshake y cada entrega; false responde 403.
authorizeEvent
#
authorizeEvent?: (args: { event: keyof C & string; payload: unknown; context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>Autoriza cada evento entrante.
authorizeSend
#
authorizeSend?: (args: { event: keyof S & string; payload: unknown; context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>Filtra cada envío a un peer: con false no lo recibe y sigue conectado.
handlers
#
handlers?: { [K in keyof C]?: (args: { payload: Output<C[K]>; context: RequestContext<TServices>; roomId?: string; emit: <E extends keyof S & string>(event: E, payload: Output<S[E]>) => Promise<void> }) => void | Promise<void> }Handlers de los eventos del cliente, con el payload validado y emit hacia ese cliente.
See also #
- WebSocket Framework full-stack