import type * as ExpoNotificationsTypes from 'expo-notifications';
import type { Event } from '@notifee/react-native';
export interface DeviceToken {
    provider: 'fcm' | 'apns';
    pushRegistrationId: string;
}
export interface NotificationPressedEvent {
    id: string;
    isForegroundEvent: boolean;
    body?: string;
    title?: string;
    data?: {
        senderId: string;
        conversationId: string;
        timestamp: number;
        messageId: string;
    };
}
export type TokenRefreshHandler = (oldToken: DeviceToken, newToken: DeviceToken) => void;
export type NotificationPressedHandler = (notification: NotificationPressedEvent) => void;
export declare enum AuthorizationStatus {
    notDetermined = 0,// The user hasn't yet made a choice about whether the app is allowed to schedule notifications.
    denied = 1,// The app isn't authorized to schedule or receive notifications.
    authorized = 2,// The app is authorized to schedule or receive notifications.
    provisional = 3,// The application is provisionally authorized to post noninterruptive user notifications.
    ephemeral = 4
}
export declare enum AndroidVisibility {
    /**
     * Show the notification on all lockscreens, but conceal sensitive or private information on secure lockscreens.
     */
    PRIVATE = 0,
    /**
     * Show this notification in its entirety on all lockscreens.
     */
    PUBLIC = 1,
    /**
     * Do not reveal any part of this notification on a secure lockscreen.
     *
     * Useful for notifications showing sensitive information such as banking apps.
     */
    SECRET = -1
}
export declare enum AndroidImportance {
    HIGH = 4,
    DEFAULT = 3,
    LOW = 2,
    MIN = 1,
    NONE = 0
}
export interface AndroidSettings {
    channelId: string;
    channelName: string;
    badge?: boolean;
    channelDescription?: string;
    lights?: boolean;
    lightColor?: string;
    bypassDnd?: boolean;
    playSound?: string;
    importance?: AndroidImportance;
    visibility?: AndroidVisibility;
    vibrate?: boolean;
    vibrationPattern?: number[];
}
export interface IOSSettings {
    useFirebase?: boolean;
}
export interface NotificationHandler {
    deviceToken: DeviceToken;
    onTokenRefresh(handler: TokenRefreshHandler): void;
    onNotificationPressed(handler: NotificationPressedHandler): void;
}
export interface InternalNotificationHandler extends NotificationHandler {
    _getTokenPromise(): Promise<void>;
}
export declare class TokenHandler implements InternalNotificationHandler {
    #private;
    protected resolveTokenPromise?: () => void;
    protected pushTokenListenerSubscription: ExpoNotificationsTypes.Subscription | undefined;
    constructor(provider: 'fcm' | 'apns');
    get deviceToken(): DeviceToken;
    _getTokenPromise(): Promise<void>;
    onTokenRefresh(handler: TokenRefreshHandler): void;
    onNotificationPressed(handler: NotificationPressedHandler): void;
    protected notificationPressed(event: Event, isForegroundEvent: boolean): void;
    protected setPushRegistrationId(value: string): void;
}
//# sourceMappingURL=Notification.d.ts.map