@iqai/mcp-near-agent
Version:
Mcp server for Near
170 lines (169 loc) • 5.07 kB
TypeScript
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;