///
import type { FunctionRuntimeProps } from "../function-props.js";
import { type SocketSpec } from "../internal/service-spec.js";
import type { ServiceContext } from "../service.js";
import type { SocketMiddleware, SocketMiddlewareFunction } from "./middleware.js";
export interface SocketContext {
connect: ConnectContext;
disconnect: DisconnectContext;
message: MessageContext;
}
export interface SocketHandlerContext {
socket: {
socketName: string;
};
service: ServiceContext;
}
export type SocketHeaders = Record;
export type SocketQuery = Record;
export type SocketRequest = SocketConnectRequest | SocketDisconnectRequest | SocketMessageRequest;
export interface SocketConnectRequest {
type: "connect";
connectionId: string;
query?: SocketQuery;
headers: SocketHeaders;
}
export interface SocketDisconnectRequest {
type: "disconnect";
connectionId: string;
}
export interface SocketMessageRequest {
type: "message";
connectionId: string;
body?: string | Buffer;
}
export interface SocketResponse {
status: number;
message?: string | Buffer | any;
}
export type SocketHandlers = {
$connect: (request: SocketConnectRequest, context: Context["connect"]) => Promise | SocketResponse | void;
$disconnect: (request: SocketDisconnectRequest, context: Context["disconnect"]) => Promise | SocketResponse | void;
$default: (request: SocketMessageRequest, context: Context["message"]) => Promise | SocketResponse | string | Buffer | any | void;
};
export type Socket = SocketSpec & {
kind: "Socket";
handlers: SocketHandlers;
wssEndpoint: string;
httpEndpoint: string;
middlewares: SocketMiddleware[];
} & {
send: (connectionId: string, input: Buffer | string) => Promise;
disconnect: (connectionId: string) => Promise;
};
export type SocketOptions = FunctionRuntimeProps;
export interface SocketRouter {
middlewares: SocketMiddleware[];
use(socketMiddleware: SocketMiddleware> | SocketMiddlewareFunction): SocketRouter>;
socket(name: Name, options: SocketOptions, handlers: SocketHandlers): Socket;
socket(name: Name, handlers: SocketHandlers): Socket;
}
export interface socket extends SocketRouter {
(name: Name, options: SocketOptions, handlers: SocketHandlers): Socket;
(name: Name, handlers: SocketHandlers): Socket;
}
export declare const socket: socket>;
export declare function parseSocketArgs(args: any[]): {
sourceLocation: import("../internal/service-spec.js").SourceLocation;
name: Name;
options: FunctionRuntimeProps;
handlers: SocketHandlers>;
};
//# sourceMappingURL=socket.d.ts.map