import { IncomingMessage, Server } from 'node:http'; import { Server as Server$1 } from 'node:https'; import { AddressInfo } from 'node:net'; import { GetPortInput } from 'get-port-please'; import { NodeOptions } from 'crossws/adapters/node'; type CrossWSOptions = NodeOptions; interface Certificate { /** * Private key for HTTPS encryption. */ key: string; /** * Certificate for HTTPS encryption. */ cert: string; /** * Passphrase for accessing the private key, if required. * @optional */ passphrase?: string; } interface HTTPSOptions { /** * Path to the SSL certificate file. * @optional */ cert?: string; /** * Path to the SSL key file. * @optional */ key?: string; /** * Path to a PFX file containing the private key, certificate, and CA certificates. * @optional */ pfx?: string; /** * Passphrase for accessing the private key or PFX file. * @optional */ passphrase?: string; /** * Number of days the self-signed certificate is valid. * @optional * @default 1 */ validityDays?: number; /** * Array of domains to include in a self-signed certificate. Required when generating a self-signed certificate. * @optional */ domains?: string[]; } interface ListenOptions { /** * Unique name for the listener, used for logging and identification purposes. * @default "" */ name: string; /** * The port number or port discovery strategy to use for the server. * @default env.PORT || 3000 */ port: GetPortInput; /** * The hostname or IP address to bind the server to. * @default env.HOST || "localhost" */ hostname: string; /** * Whether to display the base URL in logs. * @default true */ showURL: boolean; /** * The base URL path to prepend to all routes. * @default "/" */ baseURL: string; /** * Whether to automatically open the browser to the base URL when the server starts. * @default false */ open: boolean; /** * Enable HTTPS. Can be a boolean flag or a detailed HTTPS configuration. * @default false */ https: boolean | HTTPSOptions; /** * Whether to copy the base URL to the clipboard when the server starts. * @default false */ clipboard: boolean; /** * Indicates whether the server is running in a test environment. * @default env.NODE_ENV === "test" */ isTest: boolean; /** * Indicates whether the server is running in a production environment. * @default env.NODE_ENV === "production" */ isProd: boolean; /** * Whether to automatically close the server on `SIGINT` and `SIGTERM` signals. * @default true */ autoClose: boolean; /** * The entry point file path for the server, used internally. * @optional */ _entry?: string; /** * Used as main public url to display * @default The first public IPV4 address listening to */ publicURL?: string; /** * Extra URLs to show in the CLI output. */ extraURLs?: ExtraURL[]; /** * Print QR Code for public IPv4 address * * @default true */ qr?: boolean; /** * When enabled, listhen tries to listen to all network interfaces * * @default `false` for development and `true` for production */ public: boolean; /** * Open a tunnel using https://github.com/unjs/untun */ tunnel?: boolean; /** * WebSocket Upgrade Handler * * Input can be an upgrade handler or CrossWS options * * @experimental CrossWS usage is subject to change * @see https://github.com/unjs/crossws */ ws?: boolean | CrossWSOptions | ((req: IncomingMessage, head: Buffer) => void); } type GetURLOptions = Pick, "baseURL" | "publicURL" | "extraURLs">; type ShowURLOptions = Pick, "baseURL" | "name" | "publicURL" | "qr" | "extraURLs">; interface ExtraURL { /** * The label shown in the CLI output. */ title: string; /** * Static URL to show. */ url?: string; /** * Environment variable that contains the URL to show. */ env?: string; } interface ListenURL { /** * The URL being listened to. */ url: string; /** * Optional custom label for the URL. */ title?: string; /** * The type of URL (local, network, tunnel, or extra). */ type: "local" | "network" | "tunnel" | "extra"; } interface Listener { /** * The primary URL for accessing the server. */ url: string; /** * The address information of the server. See {@link AddressInfo}. */ address: AddressInfo; /** * The server instance can be either an HTTP or an HTTPS server. See {@link Server} and {@link HTTPServer}. */ server: Server | Server$1; /** * Indicates whether HTTPS is enabled and, if so, the certificate details. See {@link Certificate}. */ https: false | Certificate; /** * Closes the server and cleans up resources. */ close: () => Promise; /** * Opens the server URL in your default web browser. */ open: () => Promise; /** * Displays the server URL in the console, with optional appearance configuration. * * @param options Configuration options for displaying the URL. See {@link ShowURLOptions}. */ showURL: (options?: ShowURLOptions) => Promise; /** * Gets an array of URLs where the server can be reached, based on the options provided. * * @param options Configuration options for retrieving URLs. See {@link GetURLOptions}. * @returns a promise that resolves to an array of {@link ListenURL} objects. */ getURLs: (options?: GetURLOptions) => Promise; } export type { Certificate as C, ExtraURL as E, GetURLOptions as G, HTTPSOptions as H, ListenOptions as L, ShowURLOptions as S, Listener as a, CrossWSOptions as b, ListenURL as c };