UNPKG

rjweb-server

Version:

Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS

44 lines (43 loc) 2.85 kB
import { UsableMiddleware } from "../../classes/Middleware"; import RuntimeError from "../../classes/RuntimeError"; import Base from "../../classes/request/Base"; import HttpRequestContext from "../../classes/request/HttpRequestContext"; import WsCloseContext from "../../classes/request/WsCloseContext"; import WsMessageContext from "../../classes/request/WsMessageContext"; import WsOpenContext from "../../classes/request/WsOpenContext"; import { Method } from "../global"; import { z } from "zod"; export type RealAny = Promise<any> | any; export type EndFn = (...args: any[]) => void; export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; export type ZodResponse<Schema extends z.ZodTypeAny> = [z.infer<Schema>, null] | [null, z.ZodError<z.infer<Schema>>]; export type AnyClass = new (...args: any[]) => any; export type DataContext<Type extends keyof UsableMiddleware['classContexts'], HTTPMethod extends Method, Request extends object, Middlewares extends UsableMiddleware[]> = (Request extends HttpRequestContext ? HTTPMethod extends 'GET' ? Omit<Request, 'body' | 'rawBody' | 'rawBodyBytes' | 'bindBody'> : Request : Request) & UnionToIntersection<InstanceType<ReturnType<Middlewares[number]['classContexts'][Type]>>>; export type RateLimitConfig = { sortTo: number; penalty: number; timeWindow: number; maxHits: number; }; export type ErrorCallbacks<Middlewares extends UsableMiddleware[]> = { httpRequest?(ctr: DataContext<'HttpRequest', 'GET', HttpRequestContext, Middlewares>, error: RuntimeError): RealAny; wsOpen?(ctr: DataContext<'WsOpen', 'GET', WsOpenContext, Middlewares>, error: RuntimeError): RealAny; wsMessage?(ctr: DataContext<'WsMessage', 'GET', WsMessageContext, Middlewares>, error: RuntimeError): RealAny; wsClose?(ctr: DataContext<'WsClose', 'GET', WsCloseContext, Middlewares>, error: RuntimeError): RealAny; }; export type FinishCallbacks<Middlewares extends UsableMiddleware[]> = { httpRequest?(ctr: DataContext<'HttpRequest', 'GET', Base, Middlewares>, ms: number): RealAny; wsOpen?(ctr: DataContext<'WsOpen', 'GET', Base, Middlewares>, ms: number): RealAny; wsMessage?(ctr: DataContext<'WsMessage', 'GET', Base, Middlewares>, ms: number): RealAny; wsClose?(ctr: DataContext<'WsClose', 'GET', Base, Middlewares>, ms: number): RealAny; }; export type RatelimitCallbacks<Middlewares extends UsableMiddleware[]> = { httpRequest?(ctr: DataContext<'HttpRequest', 'GET', HttpRequestContext, Middlewares>): RealAny; wsMessage?(ctr: DataContext<'WsMessage', 'GET', WsMessageContext, Middlewares>): RealAny; }; export type ClassContexts = { HttpRequest: typeof HttpRequestContext; WsOpen: typeof WsOpenContext; WsMessage: typeof WsMessageContext; WsClose: typeof WsCloseContext; };