UNPKG

rjweb-server

Version:

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

165 lines (164 loc) 4.99 kB
import { DeepRequired, network } from "@rjweb/utils"; import { CompressionAlgorithm } from "../global"; export type ServerOptions = { /** * The Port to use for the Server, can be random using `0` * @default 0 * @since 0.0.1 */ port?: number; /** * THe IP Address to bind the server to * @default "0.0.0.0" * @since 0.0.4 */ bind?: string; /** * Whether to add the `rjweb-server` header that contains the version * @default true * @since 9.0.0 */ version?: boolean; /** * Various Compression-Related Settings * @since 9.0.0 */ compression?: { /** * HTTP Compression Settings * @since 9.0.0 */ http?: { /** * Whether HTTP Compression is enabled * @default true * @since 9.0.0 */ enabled?: boolean; /** * The Order in which to prefer Compression Algorithms, non included wont be used * @default ["brotli", "gzip", "deflate"] * @since 9.0.0 */ preferOrder?: CompressionAlgorithm[]; /** * The Maximum Size of an Item allowed to be compressed * @default size(10).mb() * @since 9.0.0 */ maxSize?: number; /** * The Minimum Size of an Item allowed to be compressed * @default size(1).kb() */ minSize?: number; }; /** * WebSocket Compression Settings * @since 9.0.0 */ ws?: { /** * Whether WebSocket Compression is enabled * @default true * @since 9.0.0 */ enabled?: boolean; /** * The Maximum Size of an Item allowed to be compressed * @default size(1).mb() * @since 9.0.0 */ maxSize?: number; }; }; /** * Various Performance-Related Settings * @since 6.3.0 */ performance?: { /** * Whether to include ETag Headers on every request with a direct Body * @default true * @since 6.3.0 */ eTag?: boolean; /** * Whether to include Last-Modified Headers on every request that serves a file * @default true * @since 6.3.0 */ lastModified?: boolean; }; /** * Various Logging-Related Settings * @since 7.4.0 */ logging?: { /** * Whether to enable `ERROR` Logs * @default true * @since 7.4.0 */ error?: boolean; /** * Whether to enable `WARN` Logs * @default true * @since 7.4.0 */ warn?: boolean; /** * Whether to enable `DEBUG` Logs * @default false * @since 7.4.0 */ debug?: boolean; }; /** * HTTP Proxy Options * @since 8.0.0 */ proxy?: { /** * Whether to check for proxies and use alternate IPs * @default false * @since 8.0.0 */ enabled?: boolean; /** * Whether to force all requests through the proxy * @default false * @since 8.0.0 */ force?: boolean; /** * Whether to compress the requests * @default false * @since 9.0.0 */ compress?: boolean; /** * The Header to use for getting the actual IP address, it must only include the IP address * @default "x-forwarded-for" * @since 8.0.0 */ header?: Lowercase<string>; /** * The IPs the server will validate against * @since 9.0.0 */ ips?: { /** * Whether to validate proxy ips * @default false * @since 9.0.0 */ validate?: boolean; /** * The Mode in which to validate the list * @default "whitelist" * @since 9.0.0 */ mode?: 'whitelist' | 'blacklist'; /** * The List of Authorized (or Unauthorized) Proxy IPs * @default [...ReverseProxyIps.LOCAL, ...ReverseProxyIps.CLOUDFLARE] * @since 9.0.0 */ list?: (network.IPAddress | network.Subnet)[]; }; /** * The Credentials that the proxy will use * @since 8.0.0 */ credentials?: { /** * Whether to authenticate proxy requests * @default false * @since 8.0.0 */ authenticate?: boolean; /** * The Username required to authenticate * @default "proxy" * @since 8.0.0 */ username?: string; /** * The Password required to authenticate * @default "proxy" * @since 8.0.0 */ password?: string; }; }; }; export type FullServerOptions = DeepRequired<ServerOptions>;