Skip to main content
Glama

Curupira

by drzln
interfaces.ts7.25 kB
/** * Chrome Client Interfaces - Unified abstraction * Level 1: Chrome Core (clean interfaces for testing and implementation) */ import type { SessionId, TargetId, CDPConnectionOptions } from '@curupira/shared/types' export type ConnectionOptions = CDPConnectionOptions export interface ConnectionStatus { connected: boolean serviceUrl: string | null activeSessions: number sessions: Array<{ sessionId: string; createdAt: Date }> } export interface SessionInfo { sessionId: SessionId targetId?: TargetId createdAt: Date } export interface EvaluateOptions { returnByValue?: boolean awaitPromise?: boolean userGesture?: boolean silent?: boolean includeCommandLineAPI?: boolean generatePreview?: boolean objectGroup?: string contextId?: number throwOnSideEffect?: boolean timeout?: number disableBreaks?: boolean replMode?: boolean allowUnsafeEvalBlockedByCSP?: boolean uniqueContextId?: string } export interface EvaluateResult { result: { type: string value?: any objectId?: string className?: string preview?: any description?: string unserializableValue?: string } exceptionDetails?: { text: string lineNumber?: number columnNumber?: number scriptId?: string stackTrace?: any exception?: any executionContextId?: number } } export interface NavigateOptions { waitUntil?: 'load' | 'domcontentloaded' | 'networkidle0' | 'networkidle2' timeout?: number } export interface NavigateResult { frameId: string loaderId?: string errorText?: string } export interface ScreenshotOptions { fullPage?: boolean captureBeyondViewport?: boolean selector?: string clip?: { x: number y: number width: number height: number } } export interface ScreenshotResult { data: string // base64 encoded image } export interface CookieOptions { name: string value: string domain?: string path?: string secure?: boolean httpOnly?: boolean sameSite?: 'Strict' | 'Lax' | 'None' expires?: number } export interface Cookie { name: string value: string domain: string path: string expires: number size: number httpOnly: boolean secure: boolean session: boolean sameSite: 'Strict' | 'Lax' | 'None' } /** * Core Chrome Client interface - what tests expect */ export interface IChromeClient { // Connection management connect(): Promise<void> disconnect(): Promise<void> isConnected(): boolean // Session management - flexible to work with existing implementation createSession(targetId?: string): Promise<any> getSessions(): any[] getTargets(): any listTargets(): Promise<ChromeTarget[]> // Direct CDP communication (for legacy compatibility) send<T = any>(method: string, params?: any, sessionId?: string): Promise<T> // Event handling on(event: string, handler: (...args: any[]) => void): void off(event: string, handler: (...args: any[]) => void): void onSessionEvent(sessionId: string, event: string, handler: (params: any) => void): void offSessionEvent(sessionId: string, event: string, handler?: (params: any) => void): void // Status getState(): string } /** * Typed CDP Client interface - high-level operations */ export interface ITypedCDPClient { // Domain enabling enableRuntime(sessionId: SessionId): Promise<void> enableDOM(sessionId: SessionId): Promise<void> enableNetwork(sessionId: SessionId): Promise<void> enablePage(sessionId: SessionId): Promise<void> // JavaScript execution evaluate(expression: string, options: EvaluateOptions, sessionId: SessionId): Promise<EvaluateResult> // Navigation navigate(url: string, options: NavigateOptions, sessionId: SessionId): Promise<NavigateResult> reload(options?: { ignoreCache?: boolean }, sessionId?: SessionId): Promise<void> // Screenshots captureScreenshot(options: ScreenshotOptions, sessionId: SessionId): Promise<ScreenshotResult> // DOM operations getDocument(options?: { depth?: number; pierce?: boolean }, sessionId?: SessionId): Promise<any> querySelector(nodeId: number, selector: string, sessionId: SessionId): Promise<{ nodeId: number }> getBoxModel(options: { nodeId: number }, sessionId: SessionId): Promise<any> // Cookie management getCookies(options?: { urls?: string[] }, sessionId?: SessionId): Promise<{ cookies: Cookie[] }> setCookie(cookie: CookieOptions, sessionId: SessionId): Promise<{ success: boolean }> clearCookies(sessionId?: SessionId): Promise<void> // Additional DOM methods querySelectorAll(nodeId: number, selector: string, sessionId: SessionId): Promise<{ nodeIds: number[] }> getAttributes(nodeId: number, sessionId: SessionId): Promise<{ attributes: string[] }> setAttributeValue(nodeId: number, name: string, value: string, sessionId: SessionId): Promise<void> removeAttribute(nodeId: number, name: string, sessionId: SessionId): Promise<void> getOuterHTML(params: { nodeId: number }, sessionId: SessionId): Promise<{ outerHTML: string }> setOuterHTML(nodeId: number, outerHTML: string, sessionId: SessionId): Promise<void> focus(params: { nodeId: number }, sessionId: SessionId): Promise<void> scrollIntoViewIfNeeded(params: { nodeId: number }, sessionId: SessionId): Promise<void> describeNode(params: { nodeId: number }, sessionId: SessionId): Promise<any> // Mouse and input events dispatchMouseEvent(params: any, sessionId: SessionId): Promise<void> dispatchKeyEvent(params: any, sessionId: SessionId): Promise<void> dispatchTouchEvent(params: any, sessionId: SessionId): Promise<void> // Debugger methods enableDebugger(params?: any, sessionId?: SessionId): Promise<any> disableDebugger(sessionId?: SessionId): Promise<void> setBreakpointByUrl(params: any, sessionId: SessionId): Promise<any> removeBreakpoint(breakpointId: string, sessionId: SessionId): Promise<void> pause(sessionId?: SessionId): Promise<void> resume(params?: any, sessionId?: SessionId): Promise<void> stepOver(params?: any, sessionId?: SessionId): Promise<void> stepInto(params?: any, sessionId?: SessionId): Promise<void> stepOut(sessionId?: SessionId): Promise<void> evaluateOnCallFrame(params: any, sessionId: SessionId): Promise<any> // Performance methods enablePerformance(params?: any, sessionId?: SessionId): Promise<void> disablePerformance(sessionId?: SessionId): Promise<void> getMetrics(sessionId?: SessionId): Promise<any> // Generic send method for compatibility send<T = unknown>(method: string, params?: any, sessionId?: SessionId): Promise<T> } /** * Chrome Manager interface - what tool providers use */ export interface IChromeManager { // Initialization initialize(config: CDPConnectionOptions): Promise<void> // Session management createSession(): Promise<string> closeSession(sessionId: string): Promise<void> // Client access getClient(): IChromeClient getTypedClient(): ITypedCDPClient // Status getStatus(): ConnectionStatus // Cleanup disconnect(): Promise<void> } /** * Target information from Chrome */ export interface ChromeTarget { id: string type: string title: string url: string webSocketDebuggerUrl?: string faviconUrl?: string }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/drzln/curupira'

If you have feedback or need assistance with the MCP directory API, please join our Discord server