UNPKG

@firebase/app

Version:

The primary entrypoint to the Firebase JS SDK

90 lines (89 loc) 3.86 kB
/** * @license * Copyright 2021 Google LLC * * 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 { ComponentContainer } from '@firebase/component'; import { FirebaseApp } from './public-types'; import { HeartbeatsByUserAgent, HeartbeatService, HeartbeatsInIndexedDB, HeartbeatStorage, SingleDateHeartbeat } from './types'; export declare const MAX_NUM_STORED_HEARTBEATS = 30; export declare class HeartbeatServiceImpl implements HeartbeatService { private readonly container; /** * The persistence layer for heartbeats * Leave public for easier testing. */ _storage: HeartbeatStorageImpl; /** * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate * the header string. * Stores one record per date. This will be consolidated into the standard * format of one record per user agent string before being sent as a header. * Populated from indexedDB when the controller is instantiated and should * be kept in sync with indexedDB. * Leave public for easier testing. */ _heartbeatsCache: HeartbeatsInIndexedDB | null; /** * the initialization promise for populating heartbeatCache. * If getHeartbeatsHeader() is called before the promise resolves * (heartbeatsCache == null), it should wait for this promise * Leave public for easier testing. */ _heartbeatsCachePromise: Promise<HeartbeatsInIndexedDB>; constructor(container: ComponentContainer); /** * Called to report a heartbeat. The function will generate * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it * to IndexedDB. * Note that we only store one heartbeat per day. So if a heartbeat for today is * already logged, subsequent calls to this function in the same day will be ignored. */ triggerHeartbeat(): Promise<void>; /** * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly. * It also clears all heartbeats from memory as well as in IndexedDB. * * NOTE: Consuming product SDKs should not send the header if this method * returns an empty string. */ getHeartbeatsHeader(): Promise<string>; } export declare function extractHeartbeatsForHeader(heartbeatsCache: SingleDateHeartbeat[], maxSize?: number): { heartbeatsToSend: HeartbeatsByUserAgent[]; unsentEntries: SingleDateHeartbeat[]; }; export declare class HeartbeatStorageImpl implements HeartbeatStorage { app: FirebaseApp; private _canUseIndexedDBPromise; constructor(app: FirebaseApp); runIndexedDBEnvironmentCheck(): Promise<boolean>; /** * Read all heartbeats. */ read(): Promise<HeartbeatsInIndexedDB>; overwrite(heartbeatsObject: HeartbeatsInIndexedDB): Promise<void>; add(heartbeatsObject: HeartbeatsInIndexedDB): Promise<void>; } /** * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped * in a platform logging header JSON object, stringified, and converted * to base 64. */ export declare function countBytes(heartbeatsCache: HeartbeatsByUserAgent[]): number; /** * Returns the index of the heartbeat with the earliest date. * If the heartbeats array is empty, -1 is returned. */ export declare function getEarliestHeartbeatIdx(heartbeats: SingleDateHeartbeat[]): number;