@elysiajs/node
Version:
Elysia adapter to run Elysia on Node.js
40 lines (39 loc) • 1.68 kB
TypeScript
import { Peer, WSError } from 'crossws';
import { Context, type AnyElysia } from 'elysia';
import { ElysiaTypeCheck } from 'elysia/schema';
import { ElysiaWS } from 'elysia/ws';
import type { ServerWebSocket } from 'elysia/ws/bun';
import type { AnyWSLocalHook } from 'elysia/ws/types';
export interface NodeWebSocketContext {
data: Context;
validateResponse: ElysiaTypeCheck<any> | undefined;
ping: ElysiaWS['ping'];
pong: ElysiaWS['pong'];
open(ws: Peer): Promise<void>;
message(ws: ServerWebSocket<any>, message: string): Promise<void>;
drain(ws: ServerWebSocket<any>): Promise<void>;
close(ws: ServerWebSocket<any>, code: number, reason: string): Promise<void>;
error(ws: ServerWebSocket<any>, error: WSError): void;
}
export interface NodeWebSocketPeer extends Omit<Peer, 'context'> {
context: NodeWebSocketContext;
}
export declare function createWebSocketAdapter(): {
handler: (app: AnyElysia, path: string, options: AnyWSLocalHook) => void;
createConfig: (app: AnyElysia) => {
upgrade(request: Request & {
readonly context?: Record<string, unknown>;
}): Promise<Response | {
context: any;
headers: any;
}>;
open(ws: Peer<import("crossws").AdapterInternal>): void;
message(ws: Peer<import("crossws").AdapterInternal>, message: import("crossws").Message): void;
close(ws: Peer<import("crossws").AdapterInternal>, detail: {
code?: number;
reason?: string;
}): void;
error(ws: Peer<import("crossws").AdapterInternal>, error: WSError): void;
};
context: Record<string, NodeWebSocketContext>;
};