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
TypeScript
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>;