UNPKG

@comake/skl-js-engine

Version:

Standard Knowledge Language Javascript Engine

125 lines (124 loc) 3.66 kB
import type { JsonRpcMethodHandler, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse, JsonRpcServerConfig } from './types'; declare type TGetStatsResponse = { registeredMethods: number; pendingRequests: number; maxConcurrentRequests: number; }; /** * Event emitter interface for JSON-RPC server events */ export interface JsonRpcServerEvents { request: (request: JsonRpcRequest) => void; notification: (notification: JsonRpcNotification) => void; response: (response: JsonRpcResponse) => void; error: (error: Error, request?: JsonRpcRequest) => void; timeout: (request: JsonRpcRequest) => void; } /** * JSON-RPC 2.0 Server implementation */ export declare class JsonRpcServer { private readonly methods; private readonly config; private readonly pendingRequests; private readonly listeners; constructor(config?: JsonRpcServerConfig); /** * Register a method handler * @param method - Method name * @param handler - Method handler function */ registerMethod<TParams, TResult>(method: string, handler: JsonRpcMethodHandler<TParams, TResult>): void; /** * Unregister a method handler * @param method - Method name */ unregisterMethod(method: string): void; /** * Get all registered methods * @returns Array of method names */ getRegisteredMethods(): string[]; /** * Process an incoming JSON-RPC message * @param messageData - Raw message data (string or object) * @returns Promise resolving to response (if request) or undefined (if notification) */ processMessage(messageData: string | object): Promise<JsonRpcResponse | undefined>; /** * Handle a JSON-RPC request * @param request - JSON-RPC request object * @returns Promise resolving to response */ private handleRequest; /** * Handle a JSON-RPC notification * @param notification - JSON-RPC notification object */ private handleNotification; /** * Execute method with timeout * @param handler - Method handler * @param request - JSON-RPC request * @returns Promise resolving to result */ private executeMethodWithTimeout; /** * Create a pending request promise with timeout * @param request - JSON-RPC request * @param timeout - Timeout in milliseconds * @returns Promise resolving to the result */ private createPendingRequest; /** * Validate JSON-RPC message format * @param message - Message to validate * @returns Validation result */ private validateMessage; /** * Check if message is a request (has id) */ private isRequest; /** * Check if message is a notification (no id) */ private isNotification; /** * Extract ID from message safely */ private extractId; /** * Create success response */ private createSuccessResponse; /** * Create error response */ private createErrorResponse; /** * Default error handler */ private defaultErrorHandler; /** * Register event listener */ on<TKey extends keyof JsonRpcServerEvents>(event: TKey, listener: JsonRpcServerEvents[TKey]): void; /** * Remove event listener */ off<TKey extends keyof JsonRpcServerEvents>(event: TKey, listener: JsonRpcServerEvents[TKey]): void; /** * Emit event */ private emit; /** * Get server statistics */ getStats(): TGetStatsResponse; /** * Shutdown server (reject all pending requests) */ shutdown(): Promise<void>; } export {};