declare module "net-ipc" { import type { EventEmitter } from "events"; import type { Socket as NetClient, Server as NetServer, ServerOpts, NetConnectOpts, ListenOptions } from "net"; import type { Server as TLSServer, TLSSocket, TlsOptions, ConnectionOptions } from "tls"; export type PromiseSettled = { status: "fulfilled" | "rejected"; value?: any; reason?: any; } export type ClientOptions = { path?: string; host?: string; port?: number; tls?: boolean; options?: NetConnectOpts | ConnectionOptions; handshake?: boolean; compress?: boolean; messagepack?: boolean; reconnect?: boolean; retries?: number; maxRetryTime?: number; } export type ClientReadyEvent = { id: string, compress: boolean, messagepack: boolean } export const enum ClientStatus { IDLE, CONNECTING, CONNECTED, READY, DISCONNECTED, RECONNECTING } export type ServerOptions = { path?: string; port?: number; tls?: boolean; options?: ServerOpts | TlsOptions; listenOptions?: Omit; max?: number; retries?: number; } export class Client extends EventEmitter { constructor(options?: ClientOptions); on(event: 'ready', listener: (data: ClientReadyEvent) => void): this; on(event: 'error', listener: (error: ErrorEvent) => void): this; on(event: 'close', listener: (reason: any) => void): this; on(event: 'status', listener: (status: number) => void): this; on(event: 'message', listener: (data: any) => void): this; on(event: 'request', listener: (request: any, response: (data: any) => Promise) => void): this; connect(payload?: any): Promise; send(data: any): Promise; request(data: any, timeout?: number): Promise; ping(data?: any, timeout?: number): Promise; close(reason?: any): Promise; destroy(reason?: any): boolean; id?: string; status: ClientStatus; options: ClientOptions; connection: NetClient | TLSSocket; } export class Server extends EventEmitter { constructor(options?: ServerOptions); on(event: 'ready', listener: (address: string) => void): this; on(event: 'error', listener: (error: ErrorEvent, connection: Connection) => void): this; on(event: 'connect', listener: (connection: Connection, payload?: any) => void): this; on(event: 'disconnect', listener: (connection: Connection, reason?: any) => void): this; on(event: 'close', listener: () => void): this; on(event: 'message', listener: (message: any, connection: Connection) => void): this; on(event: 'request', listener: (request: any, response: (data: any) => Promise, connection: Connection) => void): this; start(): Promise; close(allowReconnect?: boolean): Promise; broadcast(data: any): Promise; survey(data: any, timeout?: number): Promise>; ping(data?: any, timeout?: number): Promise>; pause(): void; resume(): void; connections: Connection[]; options: ServerOptions; server: NetServer | TLSServer; } export class Connection { send(data: any): Promise; request(data: any, timeout?: number): Promise; ping(data?: any, timeout?: number): Promise; close(reason?: any, allowReconnect?: boolean): Promise; destroy(reason?: any): boolean; pause(): void; resume(): void; id: string; server: Server; connection: NetClient | TLSSocket; } }