import { ChatEventId, BaseChatEvent, BaseChatMessageEvent, ChatMessageReceivedEvent, ChatMessageEditedEvent, ChatMessageDeletedEvent, ReadReceiptReceivedEvent, TypingIndicatorReceivedEvent, BaseChatThreadEvent, ChatParticipant, ChatAttachment, ChatAttachmentType, ChatThreadProperties, ChatThreadCreatedEvent, ChatThreadDeletedEvent, ChatThreadPropertiesUpdatedEvent, ParticipantsAddedEvent, ParticipantsRemovedEvent, ChatRetentionPolicy, NoneRetentionPolicy, ThreadCreationDateRetentionPolicy } from "./events/chat";
import { CommunicationIdentifier, CommunicationUserIdentifier, PhoneNumberIdentifier, MicrosoftTeamsUserIdentifier, TeamsExtensionUserIdentifier, UnknownIdentifier, CommunicationIdentifierKind, CommunicationUserKind, PhoneNumberKind, MicrosoftTeamsUserKind, TeamsExtensionUserKind, MicrosoftTeamsAppKind, MicrosoftTeamsAppIdentifier, UnknownIdentifierKind } from "./events/identifierModels";
import { AzureLogger } from "@azure/logger";
import { AbortSignalLike } from "@azure/abort-controller";
import { AccessToken } from "@azure/core-auth";
import { AdditionalPolicyConfig } from "@azure/core-client";
import { UserAgentPolicyOptions } from "@azure/core-rest-pipeline";
export declare enum ConnectionState {
    Unknown = 0,
    Connected = 2,
    Disconnected = 3,
    Switching = 9
}
export interface SignalingClientOptions {
    registrationTimeInMs?: number;
    resourceEndpoint?: string;
    gatewayApiVersion?: string;
    additionalPolicies?: AdditionalPolicyConfig[];
    userAgentOptions?: UserAgentPolicyOptions;
}
export { ChatEventId, BaseChatEvent, BaseChatMessageEvent, ChatAttachment, ChatAttachmentType, ChatMessageReceivedEvent, ChatMessageEditedEvent, ChatMessageDeletedEvent, ReadReceiptReceivedEvent, TypingIndicatorReceivedEvent, BaseChatThreadEvent, ChatParticipant, ChatThreadProperties, ChatThreadCreatedEvent, ChatThreadDeletedEvent, ChatThreadPropertiesUpdatedEvent, ParticipantsAddedEvent, ParticipantsRemovedEvent, CommunicationIdentifier, CommunicationUserIdentifier, PhoneNumberIdentifier, MicrosoftTeamsUserIdentifier, TeamsExtensionUserIdentifier, UnknownIdentifier, CommunicationIdentifierKind, CommunicationUserKind, PhoneNumberKind, MicrosoftTeamsUserKind, TeamsExtensionUserKind, MicrosoftTeamsAppKind, MicrosoftTeamsAppIdentifier, UnknownIdentifierKind, ChatRetentionPolicy, NoneRetentionPolicy, ThreadCreationDateRetentionPolicy, };
/**
 * Options for `CommunicationTokenCredential`'s `getToken` function.
 */
export interface CommunicationGetTokenOptions {
    /**
     * An implementation of `AbortSignalLike` to cancel the operation.
     */
    abortSignal?: AbortSignalLike;
}
/**
 * The Azure Communication Services token credential.
 */
export interface CommunicationTokenCredential {
    /**
     * Gets an `AccessToken` for the user. Throws if already disposed.
     * @param options - Additional options.
     */
    getToken(options?: CommunicationGetTokenOptions): Promise<AccessToken>;
}
export interface SignalingClient {
    /**
     * Start the realtime connection.
     */
    start(): void;
    /**
     * Stop the realtime connection and unsubscribe all event handlers.
     */
    stop(isTokenExpired?: boolean): void;
    /**
     * Listen to connectionChanged events.
     */
    on(event: "connectionChanged", listener: (state: ConnectionState) => void): void;
    /**
     * Listen to chatMessageReceived events.
     */
    on(event: "chatMessageReceived", listener: (payload: ChatMessageReceivedEvent) => void): void;
    /**
     * Listen to typingIndicatorReceived events.
     */
    on(event: "typingIndicatorReceived", listener: (payload: TypingIndicatorReceivedEvent) => void): void;
    /**
     * Listen to readReceiptReceived events.
     */
    on(event: "readReceiptReceived", listener: (payload: ReadReceiptReceivedEvent) => void): void;
    /**
     * Listen to chatMessageEdited events.
     */
    on(event: "chatMessageEdited", listener: (payload: ChatMessageEditedEvent) => void): void;
    /**
     * Listen to chatMessageDeleted events.
     */
    on(event: "chatMessageDeleted", listener: (payload: ChatMessageDeletedEvent) => void): void;
    /**
     * Listen to chatThreadCreated events.
     */
    on(event: "chatThreadCreated", listener: (payload: ChatThreadCreatedEvent) => void): void;
    /**
     * Listen to chatThreadPropertiesUpdated events.
     */
    on(event: "chatThreadPropertiesUpdated", listener: (payload: ChatThreadPropertiesUpdatedEvent) => void): void;
    /**
     * Listen to chatThreadDeleted events.
     */
    on(event: "chatThreadDeleted", listener: (payload: ChatThreadDeletedEvent) => void): void;
    /**
     * Listen to participantsAdded events.
     */
    on(event: "participantsAdded", listener: (payload: ParticipantsAddedEvent) => void): void;
    /**
     * Listen to participantsRemoved events.
     */
    on(event: "participantsRemoved", listener: (payload: ParticipantsRemovedEvent) => void): void;
}
export declare class CommunicationSignalingClient implements SignalingClient {
    private readonly credential;
    private readonly logger;
    private readonly options?;
    private readonly trouter;
    private config;
    private stateChangedListener;
    private tokenFetchRetries;
    private resourceEndpoint;
    private gatewayApiVersion;
    constructor(credential: CommunicationTokenCredential, logger: AzureLogger, options?: SignalingClientOptions);
    start(): Promise<void>;
    stop(isTokenExpired?: boolean): Promise<void>;
    on(event: "connectionChanged", listener: (state: ConnectionState) => void): void;
    on(event: "chatMessageReceived", listener: (payload: ChatMessageReceivedEvent) => void): void;
    on(event: "typingIndicatorReceived", listener: (payload: TypingIndicatorReceivedEvent) => void): void;
    on(event: "readReceiptReceived", listener: (payload: ReadReceiptReceivedEvent) => void): void;
    on(event: "chatMessageEdited", listener: (payload: ChatMessageEditedEvent) => void): void;
    on(event: "chatMessageDeleted", listener: (payload: ChatMessageDeletedEvent) => void): void;
    on(event: "chatThreadCreated", listener: (payload: ChatThreadCreatedEvent) => void): void;
    on(event: "chatThreadPropertiesUpdated", listener: (payload: ChatThreadPropertiesUpdatedEvent) => void): void;
    on(event: "chatThreadDeleted", listener: (payload: ChatThreadDeletedEvent) => void): void;
    on(event: "participantsAdded", listener: (payload: ParticipantsAddedEvent) => void): void;
    on(event: "participantsRemoved", listener: (payload: ParticipantsRemovedEvent) => void): void;
}
