2025-09-05 14:59:21 +08:00

83 lines
2.3 KiB
TypeScript

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 {
key: string;
cert: string;
passphrase?: string;
}
interface HTTPSOptions {
cert?: string;
key?: string;
pfx?: string;
passphrase?: string;
validityDays?: number;
domains?: string[];
}
interface ListenOptions {
name: string;
port: GetPortInput;
hostname: string;
showURL: boolean;
baseURL: string;
open: boolean;
https: boolean | HTTPSOptions;
clipboard: boolean;
isTest: boolean;
isProd: boolean;
autoClose: boolean;
_entry?: string;
/**
* Used as main public url to display
* @default The first public IPV4 address listening to
*/
publicURL?: string;
/**
* 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<Partial<ListenOptions>, "baseURL" | "publicURL">;
type ShowURLOptions = Pick<Partial<ListenOptions>, "baseURL" | "name" | "publicURL" | "qr">;
interface ListenURL {
url: string;
type: "local" | "network" | "tunnel";
}
interface Listener {
url: string;
address: AddressInfo;
server: Server | Server$1;
https: false | Certificate;
close: () => Promise<void>;
open: () => Promise<void>;
showURL: (options?: ShowURLOptions) => Promise<void>;
getURLs: (options?: GetURLOptions) => Promise<ListenURL[]>;
}
export type { CrossWSOptions as C, GetURLOptions as G, HTTPSOptions as H, ListenOptions as L, ShowURLOptions as S, Listener as a, Certificate as b, ListenURL as c };