import type { BaseTelemetryEvent, MCPAgentExecutionEventData, ServerInitializeEventData, ServerToolCallEventData, ServerResourceCallEventData, ServerPromptCallEventData, ServerContextEventData, MCPClientInitEventData, ConnectorInitEventData, MCPServerTelemetryInfo } from "./events.js";
export type RuntimeEnvironment = "browser" | "unknown";
type StorageCapability = "localStorage" | "session-only";
/**
 * Determines whether the current runtime is a browser.
 *
 * @returns `true` if the runtime is a browser, `false` otherwise.
 */
export declare function isBrowserEnvironment(): boolean;
/**
 * Browser Telemetry class that works in browser environments only.
 *
 * Uses posthog-js for telemetry, window.crypto for secure random strings,
 * and localStorage for user ID persistence.
 *
 * Usage: Tel.getInstance().trackMCPClientInit(...)
 */
export declare class Telemetry {
    private static instance;
    private readonly PROJECT_API_KEY;
    private readonly HOST;
    private readonly UNKNOWN_USER_ID;
    private _currUserId;
    private _posthogBrowserClient;
    private _posthogLoading;
    private _runtimeEnvironment;
    private _storageCapability;
    private _source;
    private constructor();
    private _getSourceFromLocalStorage;
    private _checkTelemetryDisabled;
    private _initPostHogBrowser;
    /**
     * Get the detected runtime environment
     */
    get runtimeEnvironment(): RuntimeEnvironment;
    /**
     * Get the storage capability for this environment
     */
    get storageCapability(): StorageCapability;
    static getInstance(): Telemetry;
    /**
     * Set the source identifier for telemetry events.
     * This allows tracking usage from different applications.
     * @param source - The source identifier (e.g., "my-app", "cli", "vs-code-extension")
     */
    setSource(source: string): void;
    /**
     * Get the current source identifier.
     */
    getSource(): string;
    /**
     * Check if telemetry is enabled.
     */
    get isEnabled(): boolean;
    get userId(): string;
    /**
     * Get or create user ID from localStorage (Browser)
     */
    private _getUserIdFromLocalStorage;
    capture(event: BaseTelemetryEvent): Promise<void>;
    trackAgentExecution(data: MCPAgentExecutionEventData): Promise<void>;
    /**
     * Track server run event directly from an MCPServer instance.
     */
    trackServerRunFromServer(server: MCPServerTelemetryInfo, transport: string): Promise<void>;
    trackServerInitialize(data: ServerInitializeEventData): Promise<void>;
    trackServerToolCall(data: ServerToolCallEventData): Promise<void>;
    trackServerResourceCall(data: ServerResourceCallEventData): Promise<void>;
    trackServerPromptCall(data: ServerPromptCallEventData): Promise<void>;
    trackServerContext(data: ServerContextEventData): Promise<void>;
    trackMCPClientInit(data: MCPClientInitEventData): Promise<void>;
    trackConnectorInit(data: ConnectorInitEventData): Promise<void>;
    trackClientAddServer(serverName: string, serverConfig: Record<string, any>): Promise<void>;
    trackClientRemoveServer(serverName: string): Promise<void>;
    trackUseMcpConnection(data: {
        url: string;
        transportType: string;
        success: boolean;
        errorType?: string | null;
        connectionTimeMs?: number | null;
        hasOAuth: boolean;
        hasSampling: boolean;
        hasElicitation: boolean;
    }): Promise<void>;
    trackUseMcpToolCall(data: {
        toolName: string;
        success: boolean;
        errorType?: string | null;
        executionTimeMs?: number | null;
    }): Promise<void>;
    trackUseMcpResourceRead(data: {
        resourceUri: string;
        success: boolean;
        errorType?: string | null;
    }): Promise<void>;
    /**
     * Identify the current user (useful for linking sessions)
     * Browser only
     */
    identify(userId: string, properties?: Record<string, any>): void;
    /**
     * Reset the user identity (useful for logout)
     * Browser only
     */
    reset(): void;
    /**
     * Flush the telemetry queue (Node.js only - no-op in browser)
     */
    flush(): void;
    /**
     * Shutdown the telemetry client (Node.js only - no-op in browser)
     */
    shutdown(): void;
    /**
     * Track package download event (Node.js only - no-op in browser)
     */
    trackPackageDownload(properties?: Record<string, any>): Promise<void>;
}
/**
 * Alias for Telemetry - shorter name for convenience
 *
 * Usage: Tel.getInstance().trackMCPClientInit(...)
 */
export declare const Tel: typeof Telemetry;
/**
 * Set the global telemetry source used to tag telemetry events.
 *
 * @param source - Identifier to persist and include with subsequent telemetry events
 */
export declare function setTelemetrySource(source: string): void;
export {};
//# sourceMappingURL=telemetry-browser.d.ts.map