UNPKG

@push.rocks/smartipc

Version:

A library for node inter process communication, providing an easy-to-use API for IPC.

171 lines (170 loc) 4.55 kB
import * as plugins from './smartipc.plugins.js'; /** * Message envelope structure for all IPC messages */ export interface IIpcMessageEnvelope<T = any> { id: string; type: string; correlationId?: string; timestamp: number; payload: T; headers?: Record<string, any>; } /** * Transport configuration options */ export interface IIpcTransportOptions { /** Unique identifier for this transport */ id: string; /** * When true, a client transport will NOT auto-start a server when connect() * encounters ECONNREFUSED/ENOENT. Useful for strict client/daemon setups. * Default: false. Can also be overridden by env SMARTIPC_CLIENT_ONLY=1. */ clientOnly?: boolean; /** Socket path for Unix domain sockets or pipe name for Windows */ socketPath?: string; /** TCP host for network transport */ host?: string; /** TCP port for network transport */ port?: number; /** Enable message encryption */ encryption?: boolean; /** Authentication token */ authToken?: string; /** Socket timeout in ms */ timeout?: number; /** Enable TCP no delay (Nagle's algorithm) */ noDelay?: boolean; /** Maximum message size in bytes (default: 8MB) */ maxMessageSize?: number; /** Automatically cleanup stale socket file on start (default: false) */ autoCleanupSocketFile?: boolean; /** Socket file permissions mode (e.g. 0o600) */ socketMode?: number; } /** * Connection state events */ export interface IIpcTransportEvents { connect: () => void; disconnect: (reason?: string) => void; error: (error: Error) => void; message: (message: IIpcMessageEnvelope) => void; drain: () => void; } /** * Abstract base class for IPC transports */ export declare abstract class IpcTransport extends plugins.EventEmitter { protected options: IIpcTransportOptions; protected connected: boolean; protected messageBuffer: Buffer; protected currentMessageLength: number | null; constructor(options: IIpcTransportOptions); /** * Connect the transport */ abstract connect(): Promise<void>; /** * Disconnect the transport */ abstract disconnect(): Promise<void>; /** * Send a message through the transport */ abstract send(message: IIpcMessageEnvelope): Promise<boolean>; /** * Check if transport is connected */ isConnected(): boolean; /** * Parse incoming data with length-prefixed framing */ protected parseIncomingData(data: Buffer): void; /** * Frame a message with length prefix */ protected frameMessage(message: IIpcMessageEnvelope): Buffer; /** * Handle socket errors */ protected handleError(error: Error): void; } /** * Unix domain socket transport for Linux/Mac */ export declare class UnixSocketTransport extends IpcTransport { private socket; private server; private clients; private socketToClientId; private clientIdToSocket; /** * Connect as client or start as server */ connect(): Promise<void>; /** * Start as server */ private startServer; /** * Parse incoming data from a specific client socket */ private parseIncomingDataFromClient; private clientBuffers?; private clientLengths?; /** * Setup socket event handlers */ private setupSocketHandlers; /** * Disconnect the transport */ disconnect(): Promise<void>; /** * Send a message */ send(message: IIpcMessageEnvelope): Promise<boolean>; /** * Get the socket path */ private getSocketPath; } /** * Named pipe transport for Windows */ export declare class NamedPipeTransport extends UnixSocketTransport { } /** * TCP transport for network IPC */ export declare class TcpTransport extends IpcTransport { private socket; private server; private clients; /** * Connect as client or start as server */ connect(): Promise<void>; /** * Start as server */ private startServer; /** * Setup socket event handlers */ private setupSocketHandlers; /** * Disconnect the transport */ disconnect(): Promise<void>; /** * Send a message */ send(message: IIpcMessageEnvelope): Promise<boolean>; } /** * Factory function to create appropriate transport based on platform and options */ export declare function createTransport(options: IIpcTransportOptions): IpcTransport;