@comake/skl-js-engine
Version:
Standard Knowledge Language Javascript Engine
125 lines (124 loc) • 3.66 kB
TypeScript
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 {};