/**
 * Identifies a communication participant.
 */
export type CommunicationIdentifier = CommunicationUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsUserIdentifier | MicrosoftTeamsAppIdentifier | TeamsExtensionUserIdentifier | UnknownIdentifier;
/**
 * An Azure Communication user.
 */
export interface CommunicationUserIdentifier {
    /**
     * Id of the CommunicationUser as returned from the Communication Service.
     */
    communicationUserId: string;
}
/**
 * A phone number.
 */
export interface PhoneNumberIdentifier {
    /**
     * Optional raw id of the phone number.
     */
    rawId?: string;
    /**
     * The phone number in E.164 format.
     */
    phoneNumber: string;
    /**
     * The asserted Id is set on a phone number that is already in the same call to distinguish from other connections made through the same number.
     */
    assertedId?: string;
    /**
     * True if the phone number is anonymous.
     */
    isAnonymous?: boolean;
}
/**
 * A Microsoft Teams user.
 */
export interface MicrosoftTeamsUserIdentifier {
    /**
     * Optional raw id of the Microsoft Teams user.
     */
    rawId?: string;
    /**
     * Id of the Microsoft Teams user. If the user isn't anonymous, the id is the Entra ID object id of the user.
     */
    microsoftTeamsUserId: string;
    /**
     * True if the user is anonymous, for example when joining a meeting with a share link. If missing, the user is not anonymous.
     */
    isAnonymous?: boolean;
    /**
     * The cloud that the Microsoft Teams user belongs to. If missing, the cloud is "public".
     */
    cloud?: "public" | "dod" | "gcch";
}
/**
 * A Microsoft Teams App.
 */
export interface MicrosoftTeamsAppIdentifier {
    /**
     * Optional raw id of the Microsoft Teams App.
     */
    rawId?: string;
    /**
     * The unique Microsoft Teams app ID.
     */
    teamsAppId: string;
    /**
     * The cloud that the Microsoft Teams App belongs to. If missing, the cloud is "public".
     */
    cloud?: "public" | "dod" | "gcch";
}
/**
 * A Microsoft Teams Phone user who is using the Azure Communication Services resource to extend their Teams Phone set up.
 */
export interface TeamsExtensionUserIdentifier {
    /**
     * Optional raw id of the Microsoft Teams Extension user.
     */
    rawId?: string;
    /**
     * The Id of the Microsoft Teams Extension user, i.e. the Entra ID object Id of the user.
     */
    userId: string;
    /**
     * The tenant Id of the Microsoft Teams Extension user.
     */
    tenantId: string;
    /**
     * The Azure Communication Services resource Id.
     */
    resourceId: string;
    /**
     * The cloud that the Microsoft Teams Extension user belongs to. If missing, the cloud is "public".
     */
    cloud?: "public" | "dod" | "gcch";
}
/**
 * An unknown identifier that doesn't fit any of the other identifier types.
 */
export interface UnknownIdentifier {
    /**
     * Id of the UnknownIdentifier.
     */
    id: string;
}
/**
 * Tests an Identifier to determine whether it implements CommunicationUserIdentifier.
 *
 * @param identifier - The assumed CommunicationUserIdentifier to be tested.
 */
export declare const isCommunicationUserIdentifier: (identifier: CommunicationIdentifier) => identifier is CommunicationUserIdentifier;
/**
 * Tests an Identifier to determine whether it implements PhoneNumberIdentifier.
 *
 * @param identifier - The assumed PhoneNumberIdentifier to be tested.
 */
export declare const isPhoneNumberIdentifier: (identifier: CommunicationIdentifier) => identifier is PhoneNumberIdentifier;
/**
 * Tests an Identifier to determine whether it implements MicrosoftTeamsUserIdentifier.
 *
 * @param identifier - The assumed available to be tested.
 */
export declare const isMicrosoftTeamsUserIdentifier: (identifier: CommunicationIdentifier) => identifier is MicrosoftTeamsUserIdentifier;
/**
 * Tests an Identifier to determine whether it implements MicrosoftTeamsAppIdentifier.
 *
 * @param identifier - The assumed available to be tested.
 */
export declare const isMicrosoftTeamsAppIdentifier: (identifier: CommunicationIdentifier) => identifier is MicrosoftTeamsAppIdentifier;
/**
 * Tests an Identifier to determine whether it implements TeamsExtensionUserIdentifier.
 *
 * @param identifier - The assumed available to be tested.
 */
export declare const isTeamsExtensionUserIdentifier: (identifier: CommunicationIdentifier) => identifier is TeamsExtensionUserIdentifier;
/**
 * Tests an Identifier to determine whether it implements UnknownIdentifier.
 *
 * @param identifier - The assumed UnknownIdentifier to be tested.
 */
export declare const isUnknownIdentifier: (identifier: CommunicationIdentifier) => identifier is UnknownIdentifier;
/**
 * The CommunicationIdentifierKind is a discriminated union that adds a property `kind` to an Identifier.
 */
export type CommunicationIdentifierKind = CommunicationUserKind | PhoneNumberKind | MicrosoftTeamsUserKind | MicrosoftTeamsAppKind | TeamsExtensionUserKind | UnknownIdentifierKind;
/**
 * IdentifierKind for a CommunicationUserIdentifier.
 */
export interface CommunicationUserKind extends CommunicationUserIdentifier {
    /**
     * The identifier kind.
     */
    kind: "communicationUser";
}
/**
 * IdentifierKind for a PhoneNumberIdentifier.
 */
export interface PhoneNumberKind extends PhoneNumberIdentifier {
    /**
     * The identifier kind.
     */
    kind: "phoneNumber";
}
/**
 * IdentifierKind for a MicrosoftTeamsUserIdentifier.
 */
export interface MicrosoftTeamsUserKind extends MicrosoftTeamsUserIdentifier {
    /**
     * The identifier kind.
     */
    kind: "microsoftTeamsUser";
}
/**
 * IdentifierKind for a MicrosoftTeamsAppIdentifier.
 */
export interface MicrosoftTeamsAppKind extends MicrosoftTeamsAppIdentifier {
    /**
     * The identifier kind.
     */
    kind: "microsoftTeamsApp";
}
/**
 * IdentifierKind for a TeamsExtensionUserIdentifier.
 */
export interface TeamsExtensionUserKind extends TeamsExtensionUserIdentifier {
    /**
     * The identifier kind.
     */
    kind: "teamsExtensionUser";
}
/**
 * IdentifierKind for UnknownIdentifier.
 */
export interface UnknownIdentifierKind extends UnknownIdentifier {
    /**
     * The identifier kind.
     */
    kind: "unknown";
}
/**
 * Returns the CommunicationIdentifierKind for a given CommunicationIdentifier. Returns undefined if the kind couldn't be inferred.
 *
 * @param identifier - The identifier whose kind is to be inferred.
 */
export declare const getIdentifierKind: (identifier: CommunicationIdentifier) => CommunicationIdentifierKind;
