UNPKG

@iqai/mcp-near-agent

Version:
170 lines (169 loc) 5.07 kB
import { EventEmitter } from "node:events"; import type { Server } from "@modelcontextprotocol/sdk/server/index.js"; import type { AgentEvent } from "../types.js"; import { type EventSubscription } from "./subscription-manager.js"; export interface EventWatcherConfig { networkId?: string; nodeUrl?: string; gasLimit?: string; } export interface WatchEventRequest { contractId: string; eventName: string; responseMethodName: string; responseParameterName: string; cronExpression?: string; server: Server; } export interface EventWatcherEvents { "watcher:started": [subscriptionId: string]; "watcher:stopped": [subscriptionId: string]; "watcher:error": [data: { subscriptionId: string; error: unknown; }]; "event:detected": [ data: { event: AgentEvent; subscription: EventSubscription; } ]; "event:processed": [ data: { requestId: string; response: string; processingTime: number; } ]; "event:failed": [ data: { requestId: string; error: string; processingTime: number; } ]; "stats:updated": [stats: EventWatcherStats]; } export interface EventWatcherStats { totalSubscriptions: number; activeSubscriptions: number; totalEventsDetected: number; totalEventsProcessed: number; totalEventsSuccessful: number; totalEventsFailed: number; successRate: number; averageProcessingTime: number; uptime: number; } export declare class EventWatcher extends EventEmitter<EventWatcherEvents> { private static instance; private authManager; private eventListener; private eventProcessor; private server; private isInitialized; private startTime; private stats; private constructor(); static getInstance(): EventWatcher; /** * Set the MCP server instance for message creation */ setServer(server: Server): void; /** * Initialize the EventWatcher - handles all authentication internally */ private initialize; /** * Start watching for a specific event */ watchEvent(request: WatchEventRequest): Promise<string>; /** * Stop watching a specific event */ stopWatching(contractId: string, eventName: string): Promise<boolean>; /** * Stop watching all events */ stopAllWatching(): Promise<void>; /** * Get current watching status */ getWatchingStatus(): { isInitialized: boolean; totalSubscriptions: number; subscriptions: { id: string; contractId: string; eventName: string; responseMethodName: string; responseParameterName: string; cronExpression: string; isActive: boolean; createdAt: number; lastEventAt: number | undefined; }[]; listener: { isInitialized: boolean; activeSubscriptions: number; authManagerStatus: { isInitialized: boolean; hasAccount: boolean; accountId: string | null; networkId: string; }; processingStates: { subscriptionId: string; lastBlockHeight: number; isProcessing: boolean; processedTransactionCount: number; }[]; }; processor: import("./event-processor.js").ProcessingStats; }; /** * Get comprehensive statistics */ getStats(): EventWatcherStats; /** * Pause watching for a specific event */ pauseWatching(contractId: string, eventName: string): boolean; /** * Resume watching for a specific event */ resumeWatching(contractId: string, eventName: string): boolean; /** * Check if watching a specific event */ isWatching(contractId: string, eventName: string): boolean; /** * Get list of all watched events */ getWatchedEvents(): Array<{ contractId: string; eventName: string; subscriptionId: string; }>; /** * Setup event handlers to connect EventListener and EventProcessor */ private setupEventHandlers; /** * Update processing statistics */ private updateProcessingStats; /** * Emit stats update event */ private emitStatsUpdate; /** * Cleanup all resources */ cleanup(): Promise<void>; on<K extends keyof EventWatcherEvents>(event: K, listener: (...args: EventWatcherEvents[K]) => void): this; emit<K extends keyof EventWatcherEvents>(event: K, ...args: EventWatcherEvents[K]): boolean; off<K extends keyof EventWatcherEvents>(event: K, listener: (...args: EventWatcherEvents[K]) => void): this; once<K extends keyof EventWatcherEvents>(event: K, listener: (...args: EventWatcherEvents[K]) => void): this; } export declare const eventWatcher: EventWatcher;