/** * Copyright 2017 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { FirebaseApp } from '@firebase/app-types'; import { FirebaseServiceInternals } from '@firebase/app-types/private'; import { FirebaseMessaging } from '@firebase/messaging-types'; import { CompleteFn, ErrorFn, NextFn, Observer, Unsubscribe } from '@firebase/util'; import { MessagePayload } from '../interfaces/message-payload'; import { IidModel } from '../models/iid-model'; import { TokenDetailsModel } from '../models/token-details-model'; import { VapidDetailsModel } from '../models/vapid-details-model'; export declare type BgMessageHandler = (payload: MessagePayload) => Promise | void; export declare const TOKEN_EXPIRATION_MILLIS: number; export declare abstract class BaseController implements FirebaseMessaging { app: FirebaseApp; INTERNAL: FirebaseServiceInternals; private readonly messagingSenderId; private readonly tokenDetailsModel; private readonly vapidDetailsModel; private readonly iidModel; /** * An interface of the Messaging Service API */ constructor(app: FirebaseApp); /** * @export */ getToken(): Promise; /** * manageExistingToken is triggered if there's an existing FCM token in the * database and it can take 3 different actions: * 1) Retrieve the existing FCM token from the database. * 2) If VAPID details have changed: Delete the existing token and create a * new one with the new VAPID key. * 3) If the database cache is invalidated: Send a request to FCM to update * the token, and to check if the token is still valid on FCM-side. */ private manageExistingToken(swReg, pushSubscription, publicVapidKey, tokenDetails); private updateToken(swReg, pushSubscription, publicVapidKey, tokenDetails); private getNewToken(swReg, pushSubscription, publicVapidKey); /** * This method deletes tokens that the token manager looks after, * unsubscribes the token from FCM and then unregisters the push * subscription if it exists. It returns a promise that indicates * whether or not the unsubscribe request was processed successfully. */ deleteToken(token: string): Promise; /** * This method will delete the token from the client database, and make a * call to FCM to remove it from the server DB. Does not temper with the * push subscription. */ private deleteTokenFromDB(token); abstract getSWRegistration_(): Promise; abstract getPublicVapidKey_(): Promise; /** * Gets a PushSubscription for the current user. */ getPushSubscription(swRegistration: ServiceWorkerRegistration, publicVapidKey: Uint8Array): Promise; requestPermission(): Promise; useServiceWorker(registration: ServiceWorkerRegistration): void; usePublicVapidKey(b64PublicKey: string): void; onMessage(nextOrObserver: NextFn | Observer, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; onTokenRefresh(nextOrObserver: NextFn | Observer, error?: ErrorFn, completed?: CompleteFn): Unsubscribe; setBackgroundMessageHandler(callback: BgMessageHandler): void; /** * This method is required to adhere to the Firebase interface. * It closes any currently open indexdb database connections. */ delete(): Promise; /** * Returns the current Notification Permission state. */ getNotificationPermission_(): NotificationPermission; getTokenDetailsModel(): TokenDetailsModel; getVapidDetailsModel(): VapidDetailsModel; getIidModel(): IidModel; }