UNPKG

@letticdo/bare-server-node-tomphttp

Version:

The Bare Server implementation in NodeJS.

90 lines (89 loc) 3.14 kB
/// <reference types="node" /> /// <reference types="node" /> /// <reference types="node" /> /// <reference types="node" /> /// <reference types="node" /> /// <reference types="node" /> /// <reference types="node" /> import { Request, Response } from './AbstractMessage.js'; import type { JSONDatabaseAdapter } from './Meta.js'; import type { BareRemote } from './requestUtil.js'; import type { LookupOneOptions } from 'node:dns'; import EventEmitter from 'node:events'; import type { Agent as HttpAgent, IncomingMessage, ServerResponse } from 'node:http'; import type { Agent as HttpsAgent } from 'node:https'; import type { Duplex } from 'node:stream'; export interface BareErrorBody { code: string; id: string; message?: string; stack?: string; } export declare class BareError extends Error { status: number; body: BareErrorBody; constructor(status: number, body: BareErrorBody); } export declare const pkg: { version: string; }; export declare function json<T>(status: number, json: T): Response; export type BareMaintainer = { email?: string; website?: string; }; export type BareProject = { name?: string; description?: string; email?: string; website?: string; repository?: string; version?: string; }; export type BareLanguage = 'NodeJS' | 'ServiceWorker' | 'Deno' | 'Java' | 'PHP' | 'Rust' | 'C' | 'C++' | 'C#' | 'Ruby' | 'Go' | 'Crystal' | 'Shell' | string; export type BareManifest = { maintainer?: BareMaintainer; project?: BareProject; versions: string[]; language: BareLanguage; memoryUsage?: number; }; export interface Options { logErrors: boolean; /** * Callback for filtering the remote URL. * @param remote * @returns Nothing * @throws An error if the remote is bad. */ filterRemote?: (remote: BareRemote) => Promise<void> | void; /** * DNS lookup * May not get called when remote.host is an IP * Use in combination with filterRemote to block IPs */ lookup: (hostname: string, options: LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void; localAddress?: string; family?: number; maintainer?: BareMaintainer; httpAgent: HttpAgent; httpsAgent: HttpsAgent; database: JSONDatabaseAdapter; } export type RouteCallback = (request: Request, response: ServerResponse<IncomingMessage>, options: Options) => Promise<Response> | Response; export type SocketRouteCallback = (request: Request, socket: Duplex, head: Buffer, options: Options) => Promise<void> | void; export default class Server extends EventEmitter { routes: Map<string, RouteCallback>; socketRoutes: Map<string, SocketRouteCallback>; private closed; private directory; private options; /** * Remove all timers and listeners */ close(): void; shouldRoute(request: IncomingMessage): boolean; get instanceInfo(): BareManifest; routeUpgrade(req: IncomingMessage, socket: Duplex, head: Buffer): Promise<void>; routeRequest(req: IncomingMessage, res: ServerResponse): Promise<void>; }