/// /// /// import * as HTTP2 from 'http2'; import type { Duplex, Readable } from 'stream'; import type { InLogContext } from '../@log/index.js'; import type { TunnelId, TunnelStreamId } from '../common.js'; import type { ListeningHost, Port } from '../x.js'; import type { RouteCandidate, Router } from './router/index.js'; export type TunnelServerOptions = { alias?: string; host?: ListeningHost; port?: Port; cert: string | Buffer; key: string | Buffer; password?: string; }; export declare class TunnelServer { readonly router: Router; readonly server: HTTP2.Http2SecureServer; readonly alias: string | undefined; readonly password: string | undefined; private tunnelMap; private sessionToTunnelIdMap; constructor(router: Router, { alias, host, port, cert, key, password, }: TunnelServerOptions); connect(upperContext: InLogContext, route: RouteCandidate | undefined, host: string, port: number): Promise; private handleTunnel; private handleOutInStream; private lastTunnelIdNumber; private getNextTunnelId; private getContext; } export type TunnelConnection = { context: InLogContext; resolve(outInStream: Readable): void; }; export type Tunnel = { id: TunnelId; context: InLogContext; remoteAddress: string; tunnelStream: HTTP2.ServerHttp2Stream; connectionMap: Map; lastStreamIdNumber: number; };