import { Observable } from "rxjs";
import { ServerMessageEvent } from "./ServerMessage";
import { SessionConfig } from "./SessionConfig";
/**
 * WalletLink Connection
 */
export declare class WalletLinkConnection {
    private sessionId;
    private sessionKey;
    private ws;
    private subscriptions;
    private destroyed;
    private lastHeartbeatResponse;
    private nextReqId;
    private connectedSubject;
    private linkedSubject;
    private sessionConfigSubject;
    /**
     * Constructor
     * @param sessionId Session ID
     * @param sessionKey Session Key
     * @param serverUrl Walletlinkd RPC URL
     * @param [WebSocketClass] Custom WebSocket implementation
     */
    constructor(sessionId: string, sessionKey: string, serverUrl: string, WebSocketClass?: typeof WebSocket);
    /**
     * Make a connection to the server
     */
    connect(): void;
    /**
     * Terminate connection, and mark as destroyed. To reconnect, create a new
     * instance of WalletLinkConnection
     */
    destroy(): void;
    /**
     * Emit true if connected and authenticated, else false
     * @returns an Observable
     */
    get connected$(): Observable<boolean>;
    /**
     * Emit once connected
     * @returns an Observable
     */
    get onceConnected$(): Observable<void>;
    /**
     * Emit true if linked (a guest has joined before)
     * @returns an Observable
     */
    get linked$(): Observable<boolean>;
    /**
     * Emit once when linked
     * @returns an Observable
     */
    get onceLinked$(): Observable<void>;
    /**
     * Emit current session config if available, and subsequent updates
     * @returns an Observable for the session config
     */
    get sessionConfig$(): Observable<SessionConfig>;
    /**
     * Emit incoming Event messages
     * @returns an Observable for the messages
     */
    get incomingEvent$(): Observable<ServerMessageEvent>;
    /**
     * Set session metadata in SessionConfig object
     * @param key
     * @param value
     * @returns an Observable that completes when successful
     */
    setSessionMetadata(key: string, value: string | null): Observable<void>;
    /**
     * Publish an event and emit event ID when successful
     * @param event event name
     * @param data event data
     * @param callWebhook whether the webhook should be invoked
     * @returns an Observable that emits event ID when successful
     */
    publishEvent(event: string, data: string, callWebhook?: boolean): Observable<string>;
    private sendData;
    private updateLastHeartbeat;
    private heartbeat;
    private makeRequest;
    private authenticate;
    private sendIsLinked;
    private sendGetSessionConfig;
}
