import Observable from 'zen-observable-ts';
import { ProviderOptions } from '../../types/Provider';
import { CustomUserAgentDetails } from '@aws-amplify/core';
import { GRAPHQL_AUTH_MODE } from '@aws-amplify/auth';
import { AbstractPubSubProvider } from '../PubSubProvider';
import { PubSubContent, PubSubContentObserver } from '../../types/PubSub';
import { SUBSCRIPTION_STATUS } from '../constants';
export declare type ObserverQuery = {
    observer: PubSubContentObserver;
    query: string;
    variables: Record<string, unknown>;
    subscriptionState: SUBSCRIPTION_STATUS;
    subscriptionReadyCallback?: Function;
    subscriptionFailedCallback?: Function;
    startAckTimeoutId?: ReturnType<typeof setTimeout>;
};
declare type GraphqlAuthModes = keyof typeof GRAPHQL_AUTH_MODE;
export interface AWSAppSyncRealTimeProviderOptions extends ProviderOptions {
    appSyncGraphqlEndpoint?: string;
    authenticationType?: GraphqlAuthModes;
    query?: string;
    variables?: Record<string, unknown>;
    apiKey?: string;
    region?: string;
    graphql_headers?: () => {} | (() => Promise<{}>);
    additionalHeaders?: {
        [key: string]: string;
    };
}
export declare class AWSAppSyncRealTimeProvider extends AbstractPubSubProvider<AWSAppSyncRealTimeProviderOptions> {
    private awsRealTimeSocket?;
    private socketStatus;
    private keepAliveTimeoutId?;
    private keepAliveTimeout;
    private keepAliveAlertTimeoutId?;
    private subscriptionObserverMap;
    private promiseArray;
    private connectionState;
    private readonly connectionStateMonitor;
    private readonly reconnectionMonitor;
    private connectionStateMonitorSubscription;
    constructor(options?: ProviderOptions);
    /**
     * Mark the socket closed and release all active listeners
     */
    close(): void;
    getNewWebSocket(url: string, protocol: string): WebSocket;
    getProviderName(): string;
    newClient(): Promise<any>;
    publish(_topics: string[] | string, _msg: PubSubContent, _options?: AWSAppSyncRealTimeProviderOptions): Promise<void>;
    private isCustomDomain;
    subscribe(_topics: string[] | string, options?: AWSAppSyncRealTimeProviderOptions, customUserAgentDetails?: CustomUserAgentDetails): Observable<Record<string, unknown>>;
    protected get isSSLEnabled(): boolean;
    private _startSubscriptionWithAWSAppSyncRealTime;
    private _logStartSubscriptionError;
    private _waitForSubscriptionToBeConnected;
    private _sendUnsubscriptionMessage;
    private _removeSubscriptionObserver;
    private _closeSocketIfRequired;
    private _handleIncomingSubscriptionMessage;
    private _errorDisconnect;
    private _timeoutStartSubscriptionAck;
    private _initializeWebSocketConnection;
    private _initializeRetryableHandshake;
    private _initializeHandshake;
    private _awsRealTimeHeaderBasedAuth;
    private _awsRealTimeCUPHeader;
    private _awsRealTimeOPENIDHeader;
    private _awsRealTimeApiKeyHeader;
    private _awsRealTimeIAMHeader;
    private _customAuthHeader;
    /**
     * @private
     */
    _ensureCredentials(): any;
}
export {};
