import * as i0 from '@angular/core';
import { InjectionToken, NgZone } from '@angular/core';
import { ɵAngularFireSchedulers as _AngularFireSchedulers } from '@angular/fire';
import { ɵPromiseProxy as _PromiseProxy } from '@angular/fire/compat';
import { FirebaseOptions } from 'firebase/app';
import firebase from 'firebase/compat/app';
import { Observable } from 'rxjs';

declare const VAPID_KEY: InjectionToken<string>;
declare const SERVICE_WORKER: InjectionToken<Promise<ServiceWorkerRegistration>>;
interface AngularFireMessaging extends Omit<_PromiseProxy<firebase.messaging.Messaging>, 'deleteToken' | 'getToken' | 'requestPermission'> {
}
declare class AngularFireMessaging {
    readonly requestPermission: Observable<NotificationPermission>;
    readonly getToken: Observable<string | null>;
    readonly tokenChanges: Observable<string | null>;
    readonly messages: Observable<firebase.messaging.MessagePayload>;
    readonly requestToken: Observable<string | null>;
    readonly deleteToken: (token: string) => Observable<boolean>;
    constructor(options: FirebaseOptions, name: string | null | undefined, platformId: Object, zone: NgZone, schedulers: _AngularFireSchedulers, vapidKey: string | null, _serviceWorker: any);
    static ɵfac: i0.ɵɵFactoryDeclaration<AngularFireMessaging, [null, { optional: true; }, null, null, null, { optional: true; }, { optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AngularFireMessaging>;
}

declare class AngularFireMessagingModule {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<AngularFireMessagingModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AngularFireMessagingModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AngularFireMessagingModule>;
}

export { AngularFireMessaging, AngularFireMessagingModule, SERVICE_WORKER, VAPID_KEY };
