import { type EmitterSubscription } from 'react-native';
export declare enum Visibility {
    GONE = "GONE",
    VISIBLE = "VISIBLE"
}
type VisibilityType = keyof typeof Visibility;
export declare enum LogLevel {
    ASSERT = "ASSERT",
    DEBUG = "DEBUG",
    DISABLED = "DISABLED",
    ERROR = "ERROR",
    INFO = "INFO",
    VERBOSE = "VERBOSE",
    WARN = "WARN"
}
type LogLevelType = keyof typeof LogLevel;
export declare const IntercomEvents: {
    IntercomUnreadCountDidChange: any;
    IntercomWindowDidHide: any;
    IntercomWindowDidShow: any;
    IntercomHelpCenterWindowDidShow: any;
    IntercomHelpCenterWindowDidHide: any;
};
type EventType = 'IntercomUnreadConversationCountDidChangeNotification' | 'IntercomWindowDidHideNotification' | 'IntercomWindowDidShowNotification';
export type CustomAttributes = {
    [key: string]: boolean | string | number;
};
export type MetaData = {
    [key: string]: any;
};
export type UserAttributes = {
    companies?: Company[];
    customAttributes?: CustomAttributes;
    email?: string;
    languageOverride?: string;
    name?: string;
    phone?: string;
    signedUpAt?: number;
    unsubscribedFromEmails?: boolean;
    userId?: string;
};
export type Company = {
    createdAt?: number;
    customAttributes?: CustomAttributes;
    id: string;
    monthlySpend?: number;
    name?: string;
    plan?: string;
};
export type HelpCenterArticle = {
    it: string;
    title: string;
};
export type HelpCenterSection = {
    title: string;
    articles: HelpCenterArticle;
};
export type HelpCenterCollectionItem = {
    id: string;
    title: string;
    summary: string;
};
export type HelpCenterCollectionContent = {
    id: string;
    title: string;
    summary: string;
    articles: HelpCenterArticle[];
    sections: HelpCenterSection[];
};
export type HelpCenterArticleSearchResult = {
    id: string;
    title: string;
    matchingSnippet: string;
    summary: string;
};
export declare enum Space {
    home = "HOME",
    helpCenter = "HELP_CENTER",
    messages = "MESSAGES",
    tickets = "TICKETS"
}
export type IntercomType = {
    /**
     * Login a unidentified user.
     * This is a user that doesn't have any identifiable information such as a `userId` or `email`.
     * @return {Promise<boolean>} A promise to the token.
     */
    loginUnidentifiedUser: () => Promise<boolean>;
    /**
     * Login a user with identifiable information.
     * Valid identifiers are `userId` and `email` which must be set in the {@link UserAttributes} object.
     * @param params The {@link UserAttributes} object that contains the user's `email` or `userId`.
     */
    loginUserWithUserAttributes: (params: UserAttributes) => Promise<boolean>;
    /**
     * Log a user out of their Intercom session.
     * This will dismiss any Intercom UI and clear Intercom's local cache.
     */
    logout(): Promise<boolean>;
    /**
     * Set `hash` string if you are using Identity Verification for your Intercom workspace.
     * @note This should be called before any user login takes place.
     *
     * Identity Verification helps to make sure that conversations between you and your users are kept private, and that one
     * user can't impersonate another. If Identity Verification is enabled for your app, Intercom for iOS will sign all requests
     * going to the Intercom servers with tokens. It requires your mobile application to have its own server which authenticates the app's users,
     * and which can store a secret.
     *
     * @see More information on Identity Verification can be found {@link https://developers.intercom.com/installing-intercom/docs/react-native-identity-verification here}
     * @param hash A HMAC digest of the user ID or email.
     */
    setUserHash(hash: string): Promise<boolean>;
    /**
     * Update a user in Intercom with data specified in {@link UserAttributes}.
     * Full details of the data data attributes that can be stored on a user can be found in {@link UserAttributes}.
     *
     * @param userAttributes The {@link UserAttributes} object with the user data.
     */
    updateUser(userAttributes: UserAttributes): Promise<boolean>;
    /**
     * Determines if there is currently a user logged in.
     */
    isUserLoggedIn(): Promise<boolean>;
    /**
     * Gets a logged in user's attributes
     *
     * @return {Promise<UserAttributes>} A promise to the user's attributes with `email`and/or `userId` populated..
     */
    fetchLoggedInUserAttributes: () => Promise<UserAttributes>;
    /**
     * Log an event with a given name and metaData.
     * You can log events in Intercom based on user actions in your app.
     *
     * @param eventName The name of the event.
     * @param metaData Metadata Objects support a few simple types that Intercom can present on your behalf,
     * see the @{https://developers.intercom.com/intercom-api-reference/reference/event-model Intercom API docs}
     */
    logEvent(eventName: string, metaData?: MetaData): Promise<boolean>;
    /**
     * Present Intercom as a modal overlay in your app.
     * The `Home` space is displayed by default.
     */
    present(): Promise<boolean>;
    /**
     * Present an Intercom `space` as a modal overlay in your app
     * @see {@link Space} for a list of valid spaces.
     *
     * @param space The Intercom space to be presented.
     */
    presentSpace(space: Space): Promise<boolean>;
    /**
     * Present Intercom content.
     *
     * An {@link IntercomContent} object.
     */
    presentContent(content: Content): Promise<boolean>;
    /**
     * Present the message composer.
     *
     * @param initialMessage An optional message that is used to pre-populate the composer with some text.
     */
    presentMessageComposer(initialMessage?: string): Promise<boolean>;
    /**
     * Fetch all Help Center collections.
     *
     * @return {Promise<Array<HelpCenterCollectionItem>>} An array of {@link HelpCenterCollectionItem} objects.
     */
    fetchHelpCenterCollections: () => Promise<Array<HelpCenterCollectionItem>>;
    /**
     * Fetch the contents of a Help Center collection.
     *
     * @param id The ID of the Help Center collection.
     *
     * @return {Promise<HelpCenterCollectionContent>} A {@link HelpCenterCollectionContent} object.
     */
    fetchHelpCenterCollection: (id: string) => Promise<HelpCenterCollectionContent>;
    /**
     * Search the Help Center.
     *
     * @param term The search term.
     *
     * @return {Promise<HelpCenterArticleSearchResult>} An array of {@link HelpCenterArticleSearchResult} objects.
     */
    searchHelpCenter: (term: string) => Promise<Array<HelpCenterArticleSearchResult>>;
    /**
     * Fetch the current number of unread conversations for the logged in User.
     * @return {Promise<number>} the number of unread conversations.
     */
    getUnreadConversationCount(): Promise<number>;
    /**
     * Hide all Intercom windows that are currently displayed.
     * This will hide the Messenger, Help Center, Articles, and in-product messages (eg. Mobile Carousels, chats, and posts).
     */
    hideIntercom(): Promise<boolean>;
    /**
     * Set a fixed bottom padding for in app messages and the Intercom Launcher.
     * @param bottomPadding The size of the bottom padding in points.
     */
    setBottomPadding(bottomPadding: number): Promise<boolean>;
    /**
     * Show or hide the Intercom InApp Messages in your app.
     * @note All InApp Messages are visible by default.
     *
     * @param visibility A boolean indicating if the InApps should be visible.
     */
    setInAppMessageVisibility(visibility: VisibilityType): Promise<boolean>;
    /**
     * Show or hide the Intercom Launcher in your app.
     * @note The Launcher is hidden by default.
     *
     * @param visibility A boolean indicating if the Intercom Launcher should be visible.
     */
    setLauncherVisibility(visibility: VisibilityType): Promise<boolean>;
    /**
     * Change the Status Bar's style or visibility while an Intercom notification is on
     * screen.
     * Call this method so that Intercom's window can reflect your app's status bar accordingly.
     */
    setNeedsStatusBarAppearanceUpdate(): Promise<boolean>;
    /**
     * Handle an Android push notification payload sent by Intercom.
     *
     * @note Android only. iOS handles push notifications automatically.
     */
    handlePushMessage(): Promise<boolean>;
    /**
     * Send a device token to Intercom to enable push notifications to be sent to the User.
     * @param token The device token to send to the server.
     */
    sendTokenToIntercom(token: string): Promise<boolean>;
    /**
     * Enable logging for Intercom.
     * @param logLevel The logging level to set.
     *
     * @note iOS will ignore the logging level and by default shows `DEBUG` logging.
     */
    setLogLevel(logLevel: LogLevelType): Promise<boolean>;
    /**
     * Add an event listener for the supported event types.
     */
    addEventListener: (event: EventType, callback: (response: {
        count?: number;
        visible: boolean;
    }) => void) => EmitterSubscription;
};
declare const Intercom: IntercomType;
export default Intercom;
export declare enum ContentType {
    Article = "ARTICLE",
    Carousel = "CAROUSEL",
    Survey = "SURVEY",
    HelpCenterCollections = "HELP_CENTER_COLLECTIONS",
    Conversation = "CONVERSATION"
}
export interface Content {
    type: ContentType;
}
export interface Article extends Content {
    id: string;
}
interface Carousel extends Content {
    id: string;
}
interface Survey extends Content {
    id: string;
}
interface HelpCenterCollections extends Content {
    ids: string[];
}
interface Conversation extends Content {
    id: string;
}
export type IntercomContentType = {
    /**
     * Create
     */
    articleWithArticleId: (articleId: string) => Article;
    carouselWithCarouselId: (carouselId: string) => Carousel;
    surveyWithSurveyId: (surveyId: string) => Survey;
    helpCenterCollectionsWithIds: (collectionIds: string[]) => HelpCenterCollections;
    conversationWithConversationId: (conversationId: string) => Conversation;
};
export declare const IntercomContent: IntercomContentType;
//# sourceMappingURL=index.d.ts.map