UNPKG

@stacksjs/rpx

Version:

A modern and smart reverse proxy.

57 lines (56 loc) 1.99 kB
import type { RegistryEntry } from './registry'; import type { SiteResolver } from './site-resolver'; /** A launched site process, abstracted so tests can inject a fake. */ export declare interface SiteProcessHandle { pid: number exited: Promise<number | null> stop: (signal?: NodeJS.Signals) => void } /** A point-in-time view of one supervised site, for `rpx sites` / status. */ export declare interface SiteSnapshot { host: string dir: string status: 'starting' | 'ready' | 'failed' pid: number | null ports: Record<string, number> uptimeMs: number idleMs: number error?: string } export declare interface SiteSupervisorOptions { resolver: SiteResolver registryDir?: string rpxDir?: string verbose?: boolean startupTimeoutMs?: number pollIntervalMs?: number reapIntervalMs?: number restartDelayMs?: number killGraceMs?: number launcher?: SiteLauncher probePort?: (port: number) => Promise<boolean> pickPort?: (preferred: number) => Promise<number> isHostRoutable?: (host: string) => boolean onSiteActivating?: (host: string) => void now?: () => number writeEntry?: (entry: RegistryEntry, dir?: string, verbose?: boolean) => Promise<void> removeEntry?: (id: string, dir?: string, verbose?: boolean) => Promise<void> } /** Spawn a site's dev command. Injected for tests; default spawns a shell. */ export type SiteLauncher = (spec: { command: string cwd: string env: Record<string, string> logPath: string }) => SiteProcessHandle; export type SiteRequestStatus = | { kind: 'unknown' } | { kind: 'starting', host: string, sinceMs: number, source: 'config' | 'discovered', logTail: string } | { kind: 'ready', host: string } | { kind: 'failed', host: string, error: string, logTail: string } export declare class SiteSupervisor { constructor(opts: SiteSupervisorOptions); onRequest(host: string): Promise<SiteRequestStatus>; stop(host: string): Promise<void>; list(): SiteSnapshot[]; stopAll(): Promise<void>; }