@firebase/messaging 0.12.26 → 0.13.0-20260526192810
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.esm.js +919 -206
- package/dist/esm/index.esm.js.map +1 -1
- package/dist/esm/index.sw.esm.js +798 -85
- package/dist/esm/index.sw.esm.js.map +1 -1
- package/dist/esm/src/api/onRegistered.d.ts +27 -0
- package/dist/esm/src/api/onUnregistered.d.ts +27 -0
- package/dist/esm/src/api/register.d.ts +31 -0
- package/dist/esm/src/api/unregister.d.ts +25 -0
- package/dist/esm/src/api.d.ts +59 -2
- package/dist/esm/src/helpers/fid-change-registration.d.ts +30 -0
- package/dist/esm/src/helpers/logToFirelog.d.ts +2 -0
- package/dist/esm/src/helpers/migrate-old-database.d.ts +1 -1
- package/dist/esm/src/index.d.ts +1 -1
- package/dist/esm/src/index.sw.d.ts +1 -1
- package/dist/esm/src/interfaces/internal-message-payload.d.ts +7 -1
- package/dist/esm/src/interfaces/public-types.d.ts +11 -0
- package/dist/esm/src/internals/idb-manager.d.ts +17 -4
- package/dist/esm/src/internals/register-fid.d.ts +27 -0
- package/dist/esm/src/internals/requests.d.ts +35 -1
- package/dist/esm/src/internals/token-manager.d.ts +6 -3
- package/dist/esm/src/messaging-service.d.ts +27 -2
- package/dist/esm/src/testing/fakes/token-details.d.ts +1 -1
- package/dist/esm/src/util/errors.d.ts +11 -1
- package/dist/index-public.d.ts +68 -0
- package/dist/index.cjs.js +922 -205
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.sw.cjs +799 -84
- package/dist/index.sw.cjs.map +1 -1
- package/dist/internal.d.ts +73 -0
- package/dist/private.d.ts +73 -0
- package/dist/src/api/onRegistered.d.ts +27 -0
- package/dist/src/api/onUnregistered.d.ts +27 -0
- package/dist/src/api/register.d.ts +31 -0
- package/dist/src/api/unregister.d.ts +25 -0
- package/dist/src/api.d.ts +59 -2
- package/dist/src/helpers/fid-change-registration.d.ts +30 -0
- package/dist/src/helpers/logToFirelog.d.ts +2 -0
- package/dist/src/helpers/migrate-old-database.d.ts +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.sw.d.ts +1 -1
- package/dist/src/interfaces/internal-message-payload.d.ts +7 -1
- package/dist/src/interfaces/public-types.d.ts +11 -0
- package/dist/src/internals/idb-manager.d.ts +17 -4
- package/dist/src/internals/register-fid.d.ts +27 -0
- package/dist/src/internals/requests.d.ts +35 -1
- package/dist/src/internals/token-manager.d.ts +6 -3
- package/dist/src/messaging-service.d.ts +27 -2
- package/dist/src/testing/fakes/token-details.d.ts +1 -1
- package/dist/src/util/errors.d.ts +11 -1
- package/dist/sw/index-public.d.ts +35 -1
- package/dist/sw/internal.d.ts +38 -1
- package/dist/sw/private.d.ts +38 -1
- package/package.json +2 -2
- /package/dist/esm/src/interfaces/{token-details.d.ts → registration-details.d.ts} +0 -0
- /package/dist/src/interfaces/{token-details.d.ts → registration-details.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.sw.esm.js","sources":["../../src/util/constants.ts","../../src/interfaces/internal-message-payload.ts","../../src/helpers/array-base64-translator.ts","../../src/helpers/migrate-old-database.ts","../../src/internals/idb-manager.ts","../../src/util/errors.ts","../../src/internals/requests.ts","../../src/internals/token-manager.ts","../../src/helpers/externalizePayload.ts","../../src/helpers/is-console-message.ts","../../src/helpers/sleep.ts","../../src/helpers/logToFirelog.ts","../../src/listeners/sw-listeners.ts","../../src/helpers/extract-app-config.ts","../../src/messaging-service.ts","../../src/helpers/register.ts","../../src/api/isSupported.ts","../../src/api/onBackgroundMessage.ts","../../src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts","../../src/api.ts","../../src/index.sw.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\nexport const DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\n\nexport const DEFAULT_VAPID_KEY =\n 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\n\nexport const ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\n\n/** Key of FCM Payload in Notification's data field. */\nexport const FCM_MSG = 'FCM_MSG';\n\nexport const CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\nexport const CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\nexport const CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\n/** Set to '1' if Analytics is enabled for the campaign */\nexport const CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\nexport const TAG = 'FirebaseMessaging: ';\nexport const MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST = 1000;\nexport const MAX_RETRIES = 3;\nexport const LOG_INTERVAL_IN_MS = 86400000; //24 hour\nexport const DEFAULT_BACKOFF_TIME_MS = 5000;\nexport const DEFAULT_REGISTRATION_TIMEOUT = 10000;\n\n// FCM log source name registered at Firelog: 'FCM_CLIENT_EVENT_LOGGING'. It uniquely identifies\n// FCM's logging configuration.\nexport const FCM_LOG_SOURCE = 1249;\n\n// Defined as in proto/messaging_event.proto. Neglecting fields that are supported.\nexport const SDK_PLATFORM_WEB = 3;\nexport const EVENT_MESSAGE_DELIVERED = 1;\n\nexport enum MessageType {\n DATA_MESSAGE = 1,\n DISPLAY_NOTIFICATION = 3\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under the License\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n * or implied. See the License for the specific language governing permissions and limitations under\n * the License.\n */\n\nimport {\n CONSOLE_CAMPAIGN_ANALYTICS_ENABLED,\n CONSOLE_CAMPAIGN_ID,\n CONSOLE_CAMPAIGN_NAME,\n CONSOLE_CAMPAIGN_TIME\n} from '../util/constants';\n\nexport interface MessagePayloadInternal {\n notification?: NotificationPayloadInternal;\n data?: unknown;\n fcmOptions?: FcmOptionsInternal;\n messageType?: MessageType;\n isFirebaseMessaging?: boolean;\n from: string;\n fcmMessageId: string;\n productId: number;\n // eslint-disable-next-line camelcase\n collapse_key: string;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Notification/actions\ninterface NotificationAction {\n action: string;\n icon?: string;\n title: string;\n}\n\n/**\n * This interface defines experimental properties of NotificationOptions, that are not part of\n * the interface in the generated DOM types at https://github.com/microsoft/TypeScript-DOM-lib-generator/blob/179bdd84a944933a3103f29c2274c9f5a857b693/baselines/dom.generated.d.ts#L1012\n * https://developer.mozilla.org/en-US/docs/Web/API/Notification\n */\ninterface NotificationOptionsExperimental extends NotificationOptions {\n readonly maxActions?: number;\n readonly actions?: NotificationAction[];\n readonly image?: string;\n readonly renotify?: boolean;\n readonly timestamp?: EpochTimeStamp;\n readonly vibrate?: VibratePattern;\n}\n\nexport interface NotificationPayloadInternal\n extends NotificationOptionsExperimental {\n title: string;\n // Supported in the Legacy Send API.\n // See:https://firebase.google.com/docs/cloud-messaging/xmpp-server-ref.\n // eslint-disable-next-line camelcase\n click_action?: string;\n icon?: string;\n}\n\n// Defined in\n// https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#webpushfcmoptions. Note\n// that the keys are sent to the clients in snake cases which we need to convert to camel so it can\n// be exposed as a type to match the Firebase API convention.\nexport interface FcmOptionsInternal {\n link?: string;\n\n // eslint-disable-next-line camelcase\n analytics_label?: string;\n}\n\nexport enum MessageType {\n PUSH_RECEIVED = 'push-received',\n NOTIFICATION_CLICKED = 'notification-clicked'\n}\n\n/** Additional data of a message sent from the FN Console. */\nexport interface ConsoleMessageData {\n [CONSOLE_CAMPAIGN_ID]: string;\n [CONSOLE_CAMPAIGN_TIME]: string;\n [CONSOLE_CAMPAIGN_NAME]?: string;\n [CONSOLE_CAMPAIGN_ANALYTICS_ENABLED]?: '1';\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function arrayToBase64(array: Uint8Array | ArrayBuffer): string {\n const uint8Array = new Uint8Array(array);\n const base64String = btoa(String.fromCharCode(...uint8Array));\n return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\nexport function base64ToArray(base64String: string): Uint8Array {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding)\n .replace(/\\-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { deleteDB, openDB } from 'idb';\n\nimport { TokenDetails } from '../interfaces/token-details';\nimport { arrayToBase64 } from './array-base64-translator';\n\n// https://github.com/firebase/firebase-js-sdk/blob/7857c212f944a2a9eb421fd4cb7370181bc034b5/packages/messaging/src/interfaces/token-details.ts\nexport interface V2TokenDetails {\n fcmToken: string;\n swScope: string;\n vapidKey: string | Uint8Array;\n subscription: PushSubscription;\n fcmSenderId: string;\n fcmPushSet: string;\n createTime?: number;\n endpoint?: string;\n auth?: string;\n p256dh?: string;\n}\n\n// https://github.com/firebase/firebase-js-sdk/blob/6b5b15ce4ea3df5df5df8a8b33a4e41e249c7715/packages/messaging/src/interfaces/token-details.ts\nexport interface V3TokenDetails {\n fcmToken: string;\n swScope: string;\n vapidKey: Uint8Array;\n fcmSenderId: string;\n fcmPushSet: string;\n endpoint: string;\n auth: ArrayBuffer;\n p256dh: ArrayBuffer;\n createTime: number;\n}\n\n// https://github.com/firebase/firebase-js-sdk/blob/9567dba664732f681fa7fe60f5b7032bb1daf4c9/packages/messaging/src/interfaces/token-details.ts\nexport interface V4TokenDetails {\n fcmToken: string;\n swScope: string;\n vapidKey: Uint8Array;\n fcmSenderId: string;\n endpoint: string;\n auth: ArrayBufferLike;\n p256dh: ArrayBufferLike;\n createTime: number;\n}\n\nconst OLD_DB_NAME = 'fcm_token_details_db';\n/**\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\n * callback is called for all versions of the old DB.\n */\nconst OLD_DB_VERSION = 5;\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\n\nexport async function migrateOldDatabase(\n senderId: string\n): Promise<TokenDetails | null> {\n if ('databases' in indexedDB) {\n // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\n // typecast when it lands in TS types.\n const databases = await (\n indexedDB as {\n databases(): Promise<Array<{ name: string; version: number }>>;\n }\n ).databases();\n const dbNames = databases.map(db => db.name);\n\n if (!dbNames.includes(OLD_DB_NAME)) {\n // old DB didn't exist, no need to open.\n return null;\n }\n }\n\n let tokenDetails: TokenDetails | null = null;\n\n const db = await openDB(OLD_DB_NAME, OLD_DB_VERSION, {\n upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\n if (oldVersion < 2) {\n // Database too old, skip migration.\n return;\n }\n\n if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\n // Database did not exist. Nothing to do.\n return;\n }\n\n const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\n const value = await objectStore.index('fcmSenderId').get(senderId);\n await objectStore.clear();\n\n if (!value) {\n // No entry in the database, nothing to migrate.\n return;\n }\n\n if (oldVersion === 2) {\n const oldDetails = value as V2TokenDetails;\n\n if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\n return;\n }\n\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime ?? Date.now(),\n subscriptionOptions: {\n auth: oldDetails.auth,\n p256dh: oldDetails.p256dh,\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey:\n typeof oldDetails.vapidKey === 'string'\n ? oldDetails.vapidKey\n : arrayToBase64(oldDetails.vapidKey)\n }\n };\n } else if (oldVersion === 3) {\n const oldDetails = value as V3TokenDetails;\n\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime,\n subscriptionOptions: {\n auth: arrayToBase64(oldDetails.auth),\n p256dh: arrayToBase64(oldDetails.p256dh),\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: arrayToBase64(oldDetails.vapidKey)\n }\n };\n } else if (oldVersion === 4) {\n const oldDetails = value as V4TokenDetails;\n\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime,\n subscriptionOptions: {\n auth: arrayToBase64(oldDetails.auth),\n p256dh: arrayToBase64(oldDetails.p256dh),\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: arrayToBase64(oldDetails.vapidKey)\n }\n };\n }\n }\n });\n db.close();\n\n // Delete all old databases.\n await deleteDB(OLD_DB_NAME);\n await deleteDB('fcm_vapid_details_db');\n await deleteDB('undefined');\n\n return checkTokenDetails(tokenDetails) ? tokenDetails : null;\n}\n\nfunction checkTokenDetails(\n tokenDetails: TokenDetails | null\n): tokenDetails is TokenDetails {\n if (!tokenDetails || !tokenDetails.subscriptionOptions) {\n return false;\n }\n const { subscriptionOptions } = tokenDetails;\n return (\n typeof tokenDetails.createTime === 'number' &&\n tokenDetails.createTime > 0 &&\n typeof tokenDetails.token === 'string' &&\n tokenDetails.token.length > 0 &&\n typeof subscriptionOptions.auth === 'string' &&\n subscriptionOptions.auth.length > 0 &&\n typeof subscriptionOptions.p256dh === 'string' &&\n subscriptionOptions.p256dh.length > 0 &&\n typeof subscriptionOptions.endpoint === 'string' &&\n subscriptionOptions.endpoint.length > 0 &&\n typeof subscriptionOptions.swScope === 'string' &&\n subscriptionOptions.swScope.length > 0 &&\n typeof subscriptionOptions.vapidKey === 'string' &&\n subscriptionOptions.vapidKey.length > 0\n );\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DBSchema, IDBPDatabase, deleteDB, openDB } from 'idb';\n\nimport { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';\nimport { TokenDetails } from '../interfaces/token-details';\nimport { migrateOldDatabase } from '../helpers/migrate-old-database';\n\n// Exported for tests.\nexport const DATABASE_NAME = 'firebase-messaging-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-messaging-store';\n\ninterface MessagingDB extends DBSchema {\n 'firebase-messaging-store': {\n key: string;\n value: TokenDetails;\n };\n}\n\nlet dbPromise: Promise<IDBPDatabase<MessagingDB>> | null = null;\nfunction getDbPromise(): Promise<IDBPDatabase<MessagingDB>> {\n if (!dbPromise) {\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\n upgrade: (upgradeDb, oldVersion) => {\n // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\n // because if there are multiple versions between the old version and the current version, we\n // want ALL the migrations that correspond to those versions to run, not only the last one.\n // eslint-disable-next-line default-case\n switch (oldVersion) {\n case 0:\n upgradeDb.createObjectStore(OBJECT_STORE_NAME);\n }\n }\n });\n }\n return dbPromise;\n}\n\n/** Gets record(s) from the objectStore that match the given key. */\nexport async function dbGet(\n firebaseDependencies: FirebaseInternalDependencies\n): Promise<TokenDetails | undefined> {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tokenDetails = (await db\n .transaction(OBJECT_STORE_NAME)\n .objectStore(OBJECT_STORE_NAME)\n .get(key)) as TokenDetails;\n\n if (tokenDetails) {\n return tokenDetails;\n } else {\n // Check if there is a tokenDetails object in the old DB.\n const oldTokenDetails = await migrateOldDatabase(\n firebaseDependencies.appConfig.senderId\n );\n if (oldTokenDetails) {\n await dbSet(firebaseDependencies, oldTokenDetails);\n return oldTokenDetails;\n }\n }\n}\n\n/** Assigns or overwrites the record for the given key with the given value. */\nexport async function dbSet(\n firebaseDependencies: FirebaseInternalDependencies,\n tokenDetails: TokenDetails\n): Promise<TokenDetails> {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key);\n await tx.done;\n return tokenDetails;\n}\n\n/** Removes record(s) from the objectStore that match the given key. */\nexport async function dbRemove(\n firebaseDependencies: FirebaseInternalDependencies\n): Promise<void> {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n await tx.done;\n}\n\n/** Deletes the DB. Useful for tests. */\nexport async function dbDelete(): Promise<void> {\n if (dbPromise) {\n (await dbPromise).close();\n await deleteDB(DATABASE_NAME);\n dbPromise = null;\n }\n}\n\nfunction getKey({ appConfig }: FirebaseInternalDependencies): string {\n return appConfig.appId;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ErrorFactory, ErrorMap } from '@firebase/util';\n\nexport const enum ErrorCode {\n MISSING_APP_CONFIG_VALUES = 'missing-app-config-values',\n AVAILABLE_IN_WINDOW = 'only-available-in-window',\n AVAILABLE_IN_SW = 'only-available-in-sw',\n PERMISSION_DEFAULT = 'permission-default',\n PERMISSION_BLOCKED = 'permission-blocked',\n UNSUPPORTED_BROWSER = 'unsupported-browser',\n INDEXED_DB_UNSUPPORTED = 'indexed-db-unsupported',\n FAILED_DEFAULT_REGISTRATION = 'failed-service-worker-registration',\n TOKEN_SUBSCRIBE_FAILED = 'token-subscribe-failed',\n TOKEN_SUBSCRIBE_NO_TOKEN = 'token-subscribe-no-token',\n TOKEN_UNSUBSCRIBE_FAILED = 'token-unsubscribe-failed',\n TOKEN_UPDATE_FAILED = 'token-update-failed',\n TOKEN_UPDATE_NO_TOKEN = 'token-update-no-token',\n INVALID_BG_HANDLER = 'invalid-bg-handler',\n USE_SW_AFTER_GET_TOKEN = 'use-sw-after-get-token',\n INVALID_SW_REGISTRATION = 'invalid-sw-registration',\n USE_VAPID_KEY_AFTER_GET_TOKEN = 'use-vapid-key-after-get-token',\n INVALID_VAPID_KEY = 'invalid-vapid-key'\n}\n\nexport const ERROR_MAP: ErrorMap<ErrorCode> = {\n [ErrorCode.MISSING_APP_CONFIG_VALUES]:\n 'Missing App configuration value: \"{$valueName}\"',\n [ErrorCode.AVAILABLE_IN_WINDOW]:\n 'This method is available in a Window context.',\n [ErrorCode.AVAILABLE_IN_SW]:\n 'This method is available in a service worker context.',\n [ErrorCode.PERMISSION_DEFAULT]:\n 'The notification permission was not granted and dismissed instead.',\n [ErrorCode.PERMISSION_BLOCKED]:\n 'The notification permission was not granted and blocked instead.',\n [ErrorCode.UNSUPPORTED_BROWSER]:\n \"This browser doesn't support the API's required to use the Firebase SDK.\",\n [ErrorCode.INDEXED_DB_UNSUPPORTED]:\n \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\n [ErrorCode.FAILED_DEFAULT_REGISTRATION]:\n 'We are unable to register the default service worker. {$browserErrorMessage}',\n [ErrorCode.TOKEN_SUBSCRIBE_FAILED]:\n 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\n [ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN]:\n 'FCM returned no token when subscribing the user to push.',\n [ErrorCode.TOKEN_UNSUBSCRIBE_FAILED]:\n 'A problem occurred while unsubscribing the ' +\n 'user from FCM: {$errorInfo}',\n [ErrorCode.TOKEN_UPDATE_FAILED]:\n 'A problem occurred while updating the user from FCM: {$errorInfo}',\n [ErrorCode.TOKEN_UPDATE_NO_TOKEN]:\n 'FCM returned no token when updating the user to push.',\n [ErrorCode.USE_SW_AFTER_GET_TOKEN]:\n 'The useServiceWorker() method may only be called once and must be ' +\n 'called before calling getToken() to ensure your service worker is used.',\n [ErrorCode.INVALID_SW_REGISTRATION]:\n 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\n [ErrorCode.INVALID_BG_HANDLER]:\n 'The input to setBackgroundMessageHandler() must be a function.',\n [ErrorCode.INVALID_VAPID_KEY]: 'The public VAPID key must be a string.',\n [ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN]:\n 'The usePublicVapidKey() method may only be called once and must be ' +\n 'called before calling getToken() to ensure your VAPID key is used.'\n};\n\ninterface ErrorParams {\n [ErrorCode.MISSING_APP_CONFIG_VALUES]: {\n valueName: string;\n };\n [ErrorCode.FAILED_DEFAULT_REGISTRATION]: { browserErrorMessage: string };\n [ErrorCode.TOKEN_SUBSCRIBE_FAILED]: { errorInfo: string };\n [ErrorCode.TOKEN_UNSUBSCRIBE_FAILED]: { errorInfo: string };\n [ErrorCode.TOKEN_UPDATE_FAILED]: { errorInfo: string };\n}\n\nexport const ERROR_FACTORY = new ErrorFactory<ErrorCode, ErrorParams>(\n 'messaging',\n 'Messaging',\n ERROR_MAP\n);\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_VAPID_KEY, ENDPOINT } from '../util/constants';\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\nimport { SubscriptionOptions, TokenDetails } from '../interfaces/token-details';\n\nimport { AppConfig } from '../interfaces/app-config';\nimport { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';\n\nexport interface ApiResponse {\n token?: string;\n error?: { message: string };\n}\n\nexport interface ApiRequestBody {\n web: {\n endpoint: string;\n p256dh: string;\n auth: string;\n applicationPubKey?: string;\n };\n}\n\nexport async function requestGetToken(\n firebaseDependencies: FirebaseInternalDependencies,\n subscriptionOptions: SubscriptionOptions\n): Promise<string> {\n const headers = await getHeaders(firebaseDependencies);\n const body = getBody(subscriptionOptions);\n\n const subscribeOptions = {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n };\n\n let responseData: ApiResponse;\n try {\n const response = await fetch(\n getEndpoint(firebaseDependencies.appConfig),\n subscribeOptions\n );\n responseData = await response.json();\n } catch (err) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_FAILED, {\n errorInfo: (err as Error)?.toString()\n });\n }\n\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_FAILED, {\n errorInfo: message\n });\n }\n\n if (!responseData.token) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN);\n }\n\n return responseData.token;\n}\n\nexport async function requestUpdateToken(\n firebaseDependencies: FirebaseInternalDependencies,\n tokenDetails: TokenDetails\n): Promise<string> {\n const headers = await getHeaders(firebaseDependencies);\n const body = getBody(tokenDetails.subscriptionOptions!);\n\n const updateOptions = {\n method: 'PATCH',\n headers,\n body: JSON.stringify(body)\n };\n\n let responseData: ApiResponse;\n try {\n const response = await fetch(\n `${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`,\n updateOptions\n );\n responseData = await response.json();\n } catch (err) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_FAILED, {\n errorInfo: (err as Error)?.toString()\n });\n }\n\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_FAILED, {\n errorInfo: message\n });\n }\n\n if (!responseData.token) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_NO_TOKEN);\n }\n\n return responseData.token;\n}\n\nexport async function requestDeleteToken(\n firebaseDependencies: FirebaseInternalDependencies,\n token: string\n): Promise<void> {\n const headers = await getHeaders(firebaseDependencies);\n\n const unsubscribeOptions = {\n method: 'DELETE',\n headers\n };\n\n try {\n const response = await fetch(\n `${getEndpoint(firebaseDependencies.appConfig)}/${token}`,\n unsubscribeOptions\n );\n const responseData: ApiResponse = await response.json();\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UNSUBSCRIBE_FAILED, {\n errorInfo: message\n });\n }\n } catch (err) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UNSUBSCRIBE_FAILED, {\n errorInfo: (err as Error)?.toString()\n });\n }\n}\n\nfunction getEndpoint({ projectId }: AppConfig): string {\n return `${ENDPOINT}/projects/${projectId!}/registrations`;\n}\n\nasync function getHeaders({\n appConfig,\n installations\n}: FirebaseInternalDependencies): Promise<Headers> {\n const authToken = await installations.getToken();\n\n return new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'x-goog-api-key': appConfig.apiKey!,\n 'x-goog-firebase-installations-auth': `FIS ${authToken}`\n });\n}\n\nfunction getBody({\n p256dh,\n auth,\n endpoint,\n vapidKey\n}: SubscriptionOptions): ApiRequestBody {\n const body: ApiRequestBody = {\n web: {\n endpoint,\n auth,\n p256dh\n }\n };\n\n if (vapidKey !== DEFAULT_VAPID_KEY) {\n body.web.applicationPubKey = vapidKey;\n }\n\n return body;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SubscriptionOptions, TokenDetails } from '../interfaces/token-details';\nimport {\n arrayToBase64,\n base64ToArray\n} from '../helpers/array-base64-translator';\nimport { dbGet, dbRemove, dbSet } from './idb-manager';\nimport {\n requestDeleteToken,\n requestGetToken,\n requestUpdateToken\n} from './requests';\n\nimport { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';\nimport { MessagingService } from '../messaging-service';\n\n// UpdateRegistration will be called once every week.\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\n\nexport async function getTokenInternal(\n messaging: MessagingService\n): Promise<string> {\n const pushSubscription = await getPushSubscription(\n messaging.swRegistration!,\n messaging.vapidKey!\n );\n\n const subscriptionOptions: SubscriptionOptions = {\n vapidKey: messaging.vapidKey!,\n swScope: messaging.swRegistration!.scope,\n endpoint: pushSubscription.endpoint,\n auth: arrayToBase64(pushSubscription.getKey('auth')!),\n p256dh: arrayToBase64(pushSubscription.getKey('p256dh')!)\n };\n\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n if (!tokenDetails) {\n // No token, get a new one.\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n } else if (\n !isTokenValid(tokenDetails.subscriptionOptions!, subscriptionOptions)\n ) {\n // Invalid token, get a new one.\n try {\n await requestDeleteToken(\n messaging.firebaseDependencies!,\n tokenDetails.token\n );\n } catch (e) {\n // Suppress errors because of #2364\n console.warn(e);\n }\n\n return getNewToken(messaging.firebaseDependencies!, subscriptionOptions);\n } else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\n // Weekly token refresh\n return updateToken(messaging, {\n token: tokenDetails.token,\n createTime: Date.now(),\n subscriptionOptions\n });\n } else {\n // Valid token, nothing to do.\n return tokenDetails.token;\n }\n}\n\n/**\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\n * the push subscription if it exists.\n */\nexport async function deleteTokenInternal(\n messaging: MessagingService\n): Promise<boolean> {\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n if (tokenDetails) {\n await requestDeleteToken(\n messaging.firebaseDependencies,\n tokenDetails.token\n );\n await dbRemove(messaging.firebaseDependencies);\n }\n\n // Unsubscribe from the push subscription.\n const pushSubscription =\n await messaging.swRegistration!.pushManager.getSubscription();\n if (pushSubscription) {\n return pushSubscription.unsubscribe();\n }\n\n // If there's no SW, consider it a success.\n return true;\n}\n\nasync function updateToken(\n messaging: MessagingService,\n tokenDetails: TokenDetails\n): Promise<string> {\n try {\n const updatedToken = await requestUpdateToken(\n messaging.firebaseDependencies,\n tokenDetails\n );\n\n const updatedTokenDetails: TokenDetails = {\n ...tokenDetails,\n token: updatedToken,\n createTime: Date.now()\n };\n\n await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\n return updatedToken;\n } catch (e) {\n throw e;\n }\n}\n\nasync function getNewToken(\n firebaseDependencies: FirebaseInternalDependencies,\n subscriptionOptions: SubscriptionOptions\n): Promise<string> {\n const token = await requestGetToken(\n firebaseDependencies,\n subscriptionOptions\n );\n const tokenDetails: TokenDetails = {\n token,\n createTime: Date.now(),\n subscriptionOptions\n };\n await dbSet(firebaseDependencies, tokenDetails);\n return tokenDetails.token;\n}\n\n/**\n * Gets a PushSubscription for the current user.\n */\nasync function getPushSubscription(\n swRegistration: ServiceWorkerRegistration,\n vapidKey: string\n): Promise<PushSubscription> {\n const subscription = await swRegistration.pushManager.getSubscription();\n if (subscription) {\n return subscription;\n }\n\n return swRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\n // submitted to pushManager#subscribe must be of type Uint8Array.\n applicationServerKey: base64ToArray(vapidKey)\n });\n}\n\n/**\n * Checks if the saved tokenDetails object matches the configuration provided.\n */\nfunction isTokenValid(\n dbOptions: SubscriptionOptions,\n currentOptions: SubscriptionOptions\n): boolean {\n const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\n const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\n const isAuthEqual = currentOptions.auth === dbOptions.auth;\n const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\n\n return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MessagePayload } from '../interfaces/public-types';\nimport { MessagePayloadInternal } from '../interfaces/internal-message-payload';\n\nexport function externalizePayload(\n internalPayload: MessagePayloadInternal\n): MessagePayload {\n const payload: MessagePayload = {\n from: internalPayload.from,\n // eslint-disable-next-line camelcase\n collapseKey: internalPayload.collapse_key,\n // eslint-disable-next-line camelcase\n messageId: internalPayload.fcmMessageId\n } as MessagePayload;\n\n propagateNotificationPayload(payload, internalPayload);\n propagateDataPayload(payload, internalPayload);\n propagateFcmOptions(payload, internalPayload);\n\n return payload;\n}\n\nfunction propagateNotificationPayload(\n payload: MessagePayload,\n messagePayloadInternal: MessagePayloadInternal\n): void {\n if (!messagePayloadInternal.notification) {\n return;\n }\n\n payload.notification = {};\n\n const title = messagePayloadInternal.notification!.title;\n if (!!title) {\n payload.notification!.title = title;\n }\n\n const body = messagePayloadInternal.notification!.body;\n if (!!body) {\n payload.notification!.body = body;\n }\n\n const image = messagePayloadInternal.notification!.image;\n if (!!image) {\n payload.notification!.image = image;\n }\n\n const icon = messagePayloadInternal.notification!.icon;\n if (!!icon) {\n payload.notification!.icon = icon;\n }\n}\n\nfunction propagateDataPayload(\n payload: MessagePayload,\n messagePayloadInternal: MessagePayloadInternal\n): void {\n if (!messagePayloadInternal.data) {\n return;\n }\n\n payload.data = messagePayloadInternal.data as { [key: string]: string };\n}\n\nfunction propagateFcmOptions(\n payload: MessagePayload,\n messagePayloadInternal: MessagePayloadInternal\n): void {\n // fcmOptions.link value is written into notification.click_action. see more in b/232072111\n if (\n !messagePayloadInternal.fcmOptions &&\n !messagePayloadInternal.notification?.click_action\n ) {\n return;\n }\n\n payload.fcmOptions = {};\n\n const link =\n messagePayloadInternal.fcmOptions?.link ??\n messagePayloadInternal.notification?.click_action;\n\n if (!!link) {\n payload.fcmOptions!.link = link;\n }\n\n // eslint-disable-next-line camelcase\n const analyticsLabel = messagePayloadInternal.fcmOptions?.analytics_label;\n if (!!analyticsLabel) {\n payload.fcmOptions!.analyticsLabel = analyticsLabel;\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CONSOLE_CAMPAIGN_ID } from '../util/constants';\nimport { ConsoleMessageData } from '../interfaces/internal-message-payload';\n\nexport function isConsoleMessage(data: unknown): data is ConsoleMessageData {\n // This message has a campaign ID, meaning it was sent using the Firebase Console.\n return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** Returns a promise that resolves after given time passes. */\nexport function sleep(ms: number): Promise<void> {\n return new Promise<void>(resolve => {\n setTimeout(resolve, ms);\n });\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n DEFAULT_BACKOFF_TIME_MS,\n EVENT_MESSAGE_DELIVERED,\n FCM_LOG_SOURCE,\n LOG_INTERVAL_IN_MS,\n MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST,\n MAX_RETRIES,\n MessageType,\n SDK_PLATFORM_WEB\n} from '../util/constants';\nimport {\n FcmEvent,\n LogEvent,\n LogRequest,\n LogResponse,\n ComplianceData\n} from '../interfaces/logging-types';\n\nimport { MessagePayloadInternal } from '../interfaces/internal-message-payload';\nimport { MessagingService } from '../messaging-service';\n\nconst LOG_ENDPOINT = 'https://play.google.com/log?format=json_proto3';\n\nconst FCM_TRANSPORT_KEY = _mergeStrings(\n 'AzSCbw63g1R0nCw85jG8',\n 'Iaya3yLKwmgvh7cF0q4'\n);\n\nexport function startLoggingService(messaging: MessagingService): void {\n if (!messaging.isLogServiceStarted) {\n _processQueue(messaging, LOG_INTERVAL_IN_MS);\n messaging.isLogServiceStarted = true;\n }\n}\n\n/**\n *\n * @param messaging the messaging instance.\n * @param offsetInMs this method execute after `offsetInMs` elapsed .\n */\nexport function _processQueue(\n messaging: MessagingService,\n offsetInMs: number\n): void {\n setTimeout(async () => {\n if (!messaging.deliveryMetricsExportedToBigQueryEnabled) {\n // flush events and terminate logging service\n messaging.logEvents = [];\n messaging.isLogServiceStarted = false;\n\n return;\n }\n\n if (!messaging.logEvents.length) {\n return _processQueue(messaging, LOG_INTERVAL_IN_MS);\n }\n\n await _dispatchLogEvents(messaging);\n }, offsetInMs);\n}\n\nexport async function _dispatchLogEvents(\n messaging: MessagingService\n): Promise<void> {\n for (\n let i = 0, n = messaging.logEvents.length;\n i < n;\n i += MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST\n ) {\n const logRequest = _createLogRequest(\n messaging.logEvents.slice(i, i + MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST)\n );\n\n let retryCount = 0,\n response = {} as Response;\n\n do {\n try {\n response = await fetch(\n LOG_ENDPOINT.concat('&key=', FCM_TRANSPORT_KEY),\n {\n method: 'POST',\n body: JSON.stringify(logRequest)\n }\n );\n\n // don't retry on 200s or non retriable errors\n if (response.ok || (!response.ok && !isRetriableError(response))) {\n break;\n }\n\n if (!response.ok && isRetriableError(response)) {\n // rethrow to retry with quota\n throw new Error(\n 'a retriable Non-200 code is returned in fetch to Firelog endpoint. Retry'\n );\n }\n } catch (error) {\n const isLastAttempt = retryCount === MAX_RETRIES;\n if (isLastAttempt) {\n // existing the do-while interactive retry logic because retry quota has reached.\n break;\n }\n }\n\n let delayInMs: number;\n try {\n delayInMs = Number(\n ((await response.json()) as LogResponse).nextRequestWaitMillis\n );\n } catch (e) {\n delayInMs = DEFAULT_BACKOFF_TIME_MS;\n }\n\n await new Promise(resolve => setTimeout(resolve, delayInMs));\n\n retryCount++;\n } while (retryCount < MAX_RETRIES);\n }\n\n messaging.logEvents = [];\n // schedule for next logging\n _processQueue(messaging, LOG_INTERVAL_IN_MS);\n}\n\nfunction isRetriableError(response: Response): boolean {\n const httpStatus = response.status;\n\n return (\n httpStatus === 429 ||\n httpStatus === 500 ||\n httpStatus === 503 ||\n httpStatus === 504\n );\n}\n\nexport async function stageLog(\n messaging: MessagingService,\n internalPayload: MessagePayloadInternal\n): Promise<void> {\n const fcmEvent = createFcmEvent(\n internalPayload,\n await messaging.firebaseDependencies.installations.getId()\n );\n\n createAndEnqueueLogEvent(messaging, fcmEvent, internalPayload.productId);\n}\n\nfunction createFcmEvent(\n internalPayload: MessagePayloadInternal,\n fid: string\n): FcmEvent {\n const fcmEvent = {} as FcmEvent;\n\n /* eslint-disable camelcase */\n // some fields should always be non-null. Still check to ensure.\n if (!!internalPayload.from) {\n fcmEvent.project_number = internalPayload.from;\n }\n\n if (!!internalPayload.fcmMessageId) {\n fcmEvent.message_id = internalPayload.fcmMessageId;\n }\n\n fcmEvent.instance_id = fid;\n\n if (!!internalPayload.notification) {\n fcmEvent.message_type = MessageType.DISPLAY_NOTIFICATION.toString();\n } else {\n fcmEvent.message_type = MessageType.DATA_MESSAGE.toString();\n }\n\n fcmEvent.sdk_platform = SDK_PLATFORM_WEB.toString();\n fcmEvent.package_name = self.origin.replace(/(^\\w+:|^)\\/\\//, '');\n\n if (!!internalPayload.collapse_key) {\n fcmEvent.collapse_key = internalPayload.collapse_key;\n }\n\n fcmEvent.event = EVENT_MESSAGE_DELIVERED.toString();\n\n if (!!internalPayload.fcmOptions?.analytics_label) {\n fcmEvent.analytics_label = internalPayload.fcmOptions?.analytics_label;\n }\n\n /* eslint-enable camelcase */\n return fcmEvent;\n}\n\nfunction createAndEnqueueLogEvent(\n messaging: MessagingService,\n fcmEvent: FcmEvent,\n productId: number\n): void {\n const logEvent = {} as LogEvent;\n\n /* eslint-disable camelcase */\n logEvent.event_time_ms = Math.floor(Date.now()).toString();\n logEvent.source_extension_json_proto3 = JSON.stringify({\n messaging_client_event: fcmEvent\n });\n\n if (!!productId) {\n logEvent.compliance_data = buildComplianceData(productId);\n }\n // eslint-disable-next-line camelcase\n\n messaging.logEvents.push(logEvent);\n}\n\nfunction buildComplianceData(productId: number): ComplianceData {\n const complianceData: ComplianceData = {\n privacy_context: {\n prequest: {\n origin_associated_product_id: productId\n }\n }\n };\n\n return complianceData;\n}\n\nexport function _createLogRequest(logEventQueue: LogEvent[]): LogRequest {\n const logRequest = {} as LogRequest;\n\n /* eslint-disable camelcase */\n logRequest.log_source = FCM_LOG_SOURCE.toString();\n logRequest.log_event = logEventQueue;\n /* eslint-enable camelcase */\n\n return logRequest;\n}\n\nexport function _mergeStrings(s1: string, s2: string): string {\n const resultArray = [];\n for (let i = 0; i < s1.length; i++) {\n resultArray.push(s1.charAt(i));\n if (i < s2.length) {\n resultArray.push(s2.charAt(i));\n }\n }\n\n return resultArray.join('');\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_VAPID_KEY, FCM_MSG } from '../util/constants';\nimport {\n MessagePayloadInternal,\n MessageType,\n NotificationPayloadInternal\n} from '../interfaces/internal-message-payload';\nimport {\n NotificationEvent,\n PushEvent,\n PushSubscriptionChangeEvent,\n ServiceWorkerGlobalScope,\n WindowClient\n} from '../util/sw-types';\nimport {\n deleteTokenInternal,\n getTokenInternal\n} from '../internals/token-manager';\n\nimport { MessagingService } from '../messaging-service';\nimport { dbGet } from '../internals/idb-manager';\nimport { externalizePayload } from '../helpers/externalizePayload';\nimport { isConsoleMessage } from '../helpers/is-console-message';\nimport { sleep } from '../helpers/sleep';\nimport { stageLog } from '../helpers/logToFirelog';\n\n// maxActions is an experimental property and not part of the official\n// TypeScript interface\n// https://developer.mozilla.org/en-US/docs/Web/API/Notification/maxActions\ninterface NotificationExperimental extends Notification {\n maxActions?: number;\n}\n\n// Let TS know that this is a service worker\ndeclare const self: ServiceWorkerGlobalScope;\n\nexport async function onSubChange(\n event: PushSubscriptionChangeEvent,\n messaging: MessagingService\n): Promise<void> {\n const { newSubscription } = event;\n if (!newSubscription) {\n // Subscription revoked, delete token\n await deleteTokenInternal(messaging);\n return;\n }\n\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n await deleteTokenInternal(messaging);\n\n messaging.vapidKey =\n tokenDetails?.subscriptionOptions?.vapidKey ?? DEFAULT_VAPID_KEY;\n await getTokenInternal(messaging);\n}\n\nexport async function onPush(\n event: PushEvent,\n messaging: MessagingService\n): Promise<void> {\n const internalPayload = getMessagePayloadInternal(event);\n if (!internalPayload) {\n // Failed to get parsed MessagePayload from the PushEvent. Skip handling the push.\n return;\n }\n\n // log to Firelog with user consent\n if (messaging.deliveryMetricsExportedToBigQueryEnabled) {\n await stageLog(messaging, internalPayload);\n }\n\n // foreground handling: eventually passed to onMessage hook\n const clientList = await getClientList();\n if (hasVisibleClients(clientList)) {\n return sendMessagePayloadInternalToWindows(clientList, internalPayload);\n }\n\n // background handling: display if possible and pass to onBackgroundMessage hook\n if (!!internalPayload.notification) {\n await showNotification(wrapInternalPayload(internalPayload));\n }\n\n if (!messaging) {\n return;\n }\n\n if (!!messaging.onBackgroundMessageHandler) {\n const payload = externalizePayload(internalPayload);\n\n if (typeof messaging.onBackgroundMessageHandler === 'function') {\n await messaging.onBackgroundMessageHandler(payload);\n } else {\n messaging.onBackgroundMessageHandler.next(payload);\n }\n }\n}\n\nexport async function onNotificationClick(\n event: NotificationEvent\n): Promise<void> {\n const internalPayload: MessagePayloadInternal =\n event.notification?.data?.[FCM_MSG];\n\n if (!internalPayload) {\n return;\n } else if (event.action) {\n // User clicked on an action button. This will allow developers to act on action button clicks\n // by using a custom onNotificationClick listener that they define.\n return;\n }\n\n // Prevent other listeners from receiving the event\n event.stopImmediatePropagation();\n event.notification.close();\n\n // Note clicking on a notification with no link set will focus the Chrome's current tab.\n const link = getLink(internalPayload);\n if (!link) {\n return;\n }\n\n // FM should only open/focus links from app's origin.\n const url = new URL(link, self.location.href);\n const originUrl = new URL(self.location.origin);\n\n if (url.host !== originUrl.host) {\n return;\n }\n\n let client = await getWindowClient(url);\n\n if (!client) {\n client = await self.clients.openWindow(link);\n\n // Wait three seconds for the client to initialize and set up the message handler so that it\n // can receive the message.\n await sleep(3000);\n } else {\n client = await client.focus();\n }\n\n if (!client) {\n // Window Client will not be returned if it's for a third party origin.\n return;\n }\n\n internalPayload.messageType = MessageType.NOTIFICATION_CLICKED;\n internalPayload.isFirebaseMessaging = true;\n return client.postMessage(internalPayload);\n}\n\nfunction wrapInternalPayload(\n internalPayload: MessagePayloadInternal\n): NotificationPayloadInternal {\n const wrappedInternalPayload: NotificationPayloadInternal = {\n ...(internalPayload.notification as unknown as NotificationPayloadInternal)\n };\n\n // Put the message payload under FCM_MSG name so we can identify the notification as being an FCM\n // notification vs a notification from somewhere else (i.e. normal web push or developer generated\n // notification).\n wrappedInternalPayload.data = {\n [FCM_MSG]: internalPayload\n };\n\n return wrappedInternalPayload;\n}\n\nfunction getMessagePayloadInternal({\n data\n}: PushEvent): MessagePayloadInternal | null {\n if (!data) {\n return null;\n }\n\n try {\n return data.json();\n } catch (err) {\n // Not JSON so not an FCM message.\n return null;\n }\n}\n\n/**\n * @param url The URL to look for when focusing a client.\n * @return Returns an existing window client or a newly opened WindowClient.\n */\nasync function getWindowClient(url: URL): Promise<WindowClient | null> {\n const clientList = await getClientList();\n\n for (const client of clientList) {\n const clientUrl = new URL(client.url, self.location.href);\n\n if (url.host === clientUrl.host) {\n return client;\n }\n }\n\n return null;\n}\n\n/**\n * @returns If there is currently a visible WindowClient, this method will resolve to true,\n * otherwise false.\n */\nfunction hasVisibleClients(clientList: WindowClient[]): boolean {\n return clientList.some(\n client =>\n client.visibilityState === 'visible' &&\n // Ignore chrome-extension clients as that matches the background pages of extensions, which\n // are always considered visible for some reason.\n !client.url.startsWith('chrome-extension://')\n );\n}\n\nfunction sendMessagePayloadInternalToWindows(\n clientList: WindowClient[],\n internalPayload: MessagePayloadInternal\n): void {\n internalPayload.isFirebaseMessaging = true;\n internalPayload.messageType = MessageType.PUSH_RECEIVED;\n\n for (const client of clientList) {\n client.postMessage(internalPayload);\n }\n}\n\nfunction getClientList(): Promise<WindowClient[]> {\n return self.clients.matchAll({\n type: 'window',\n includeUncontrolled: true\n // TS doesn't know that \"type: 'window'\" means it'll return WindowClient[]\n }) as Promise<WindowClient[]>;\n}\n\nfunction showNotification(\n notificationPayloadInternal: NotificationPayloadInternal\n): Promise<void> {\n // Note: Firefox does not support the maxActions property.\n // https://developer.mozilla.org/en-US/docs/Web/API/notification/maxActions\n const { actions } = notificationPayloadInternal;\n const { maxActions } = Notification as unknown as NotificationExperimental;\n if (actions && maxActions && actions.length > maxActions) {\n console.warn(\n `This browser only supports ${maxActions} actions. The remaining actions will not be displayed.`\n );\n }\n\n return self.registration.showNotification(\n /* title= */ notificationPayloadInternal.title ?? '',\n notificationPayloadInternal\n );\n}\n\nfunction getLink(payload: MessagePayloadInternal): string | null {\n // eslint-disable-next-line camelcase\n const link = payload.fcmOptions?.link ?? payload.notification?.click_action;\n if (link) {\n return link;\n }\n\n if (isConsoleMessage(payload.data)) {\n // Notification created in the Firebase Console. Redirect to origin.\n return self.location.origin;\n } else {\n return null;\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\nimport { FirebaseApp, FirebaseOptions } from '@firebase/app';\n\nimport { AppConfig } from '../interfaces/app-config';\nimport { FirebaseError } from '@firebase/util';\n\nexport function extractAppConfig(app: FirebaseApp): AppConfig {\n if (!app || !app.options) {\n throw getMissingValueError('App Configuration Object');\n }\n\n if (!app.name) {\n throw getMissingValueError('App Name');\n }\n\n // Required app config keys\n const configKeys: ReadonlyArray<keyof FirebaseOptions> = [\n 'projectId',\n 'apiKey',\n 'appId',\n 'messagingSenderId'\n ];\n\n const { options } = app;\n for (const keyName of configKeys) {\n if (!options[keyName]) {\n throw getMissingValueError(keyName);\n }\n }\n\n return {\n appName: app.name,\n projectId: options.projectId!,\n apiKey: options.apiKey!,\n appId: options.appId!,\n senderId: options.messagingSenderId!\n };\n}\n\nfunction getMissingValueError(valueName: string): FirebaseError {\n return ERROR_FACTORY.create(ErrorCode.MISSING_APP_CONFIG_VALUES, {\n valueName\n });\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp, _FirebaseService } from '@firebase/app';\nimport { MessagePayload, NextFn, Observer } from './interfaces/public-types';\n\nimport { FirebaseAnalyticsInternalName } from '@firebase/analytics-interop-types';\nimport { FirebaseInternalDependencies } from './interfaces/internal-dependencies';\nimport { LogEvent } from './interfaces/logging-types';\nimport { Provider } from '@firebase/component';\nimport { _FirebaseInstallationsInternal } from '@firebase/installations';\nimport { extractAppConfig } from './helpers/extract-app-config';\n\nexport class MessagingService implements _FirebaseService {\n readonly app!: FirebaseApp;\n readonly firebaseDependencies!: FirebaseInternalDependencies;\n\n swRegistration?: ServiceWorkerRegistration;\n vapidKey?: string;\n // logging is only done with end user consent. Default to false.\n deliveryMetricsExportedToBigQueryEnabled: boolean = false;\n\n onBackgroundMessageHandler:\n | NextFn<MessagePayload>\n | Observer<MessagePayload>\n | null = null;\n\n onMessageHandler: NextFn<MessagePayload> | Observer<MessagePayload> | null =\n null;\n\n logEvents: LogEvent[] = [];\n isLogServiceStarted: boolean = false;\n\n constructor(\n app: FirebaseApp,\n installations: _FirebaseInstallationsInternal,\n analyticsProvider: Provider<FirebaseAnalyticsInternalName>\n ) {\n const appConfig = extractAppConfig(app);\n\n this.firebaseDependencies = {\n app,\n appConfig,\n installations,\n analyticsProvider\n };\n }\n\n _delete(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Component,\n ComponentContainer,\n ComponentType,\n InstanceFactory\n} from '@firebase/component';\nimport {\n onNotificationClick,\n onPush,\n onSubChange\n} from '../listeners/sw-listeners';\n\nimport { GetTokenOptions } from '../interfaces/public-types';\nimport { MessagingInternal } from '@firebase/messaging-interop-types';\nimport { MessagingService } from '../messaging-service';\nimport { ServiceWorkerGlobalScope } from '../util/sw-types';\nimport { _registerComponent, registerVersion } from '@firebase/app';\nimport { getToken } from '../api/getToken';\nimport { messageEventListener } from '../listeners/window-listener';\n\nimport { name, version } from '../../package.json';\n\nconst WindowMessagingFactory: InstanceFactory<'messaging'> = (\n container: ComponentContainer\n) => {\n const messaging = new MessagingService(\n container.getProvider('app').getImmediate(),\n container.getProvider('installations-internal').getImmediate(),\n container.getProvider('analytics-internal')\n );\n\n navigator.serviceWorker.addEventListener('message', e =>\n messageEventListener(messaging as MessagingService, e)\n );\n\n return messaging;\n};\n\nconst WindowMessagingInternalFactory: InstanceFactory<'messaging-internal'> = (\n container: ComponentContainer\n) => {\n const messaging = container\n .getProvider('messaging')\n .getImmediate() as MessagingService;\n\n const messagingInternal: MessagingInternal = {\n getToken: (options?: GetTokenOptions) => getToken(messaging, options)\n };\n\n return messagingInternal;\n};\n\ndeclare const self: ServiceWorkerGlobalScope;\nconst SwMessagingFactory: InstanceFactory<'messaging'> = (\n container: ComponentContainer\n) => {\n const messaging = new MessagingService(\n container.getProvider('app').getImmediate(),\n container.getProvider('installations-internal').getImmediate(),\n container.getProvider('analytics-internal')\n );\n\n self.addEventListener('push', e => {\n e.waitUntil(onPush(e, messaging as MessagingService));\n });\n self.addEventListener('pushsubscriptionchange', e => {\n e.waitUntil(onSubChange(e, messaging as MessagingService));\n });\n self.addEventListener('notificationclick', e => {\n e.waitUntil(onNotificationClick(e));\n });\n\n return messaging;\n};\n\nexport function registerMessagingInWindow(): void {\n _registerComponent(\n new Component('messaging', WindowMessagingFactory, ComponentType.PUBLIC)\n );\n\n _registerComponent(\n new Component(\n 'messaging-internal',\n WindowMessagingInternalFactory,\n ComponentType.PRIVATE\n )\n );\n\n registerVersion(name, version);\n // BUILD_TARGET will be replaced by values like esm, cjs, etc during the compilation\n registerVersion(name, version, '__BUILD_TARGET__');\n}\n\n/**\n * The messaging instance registered in sw is named differently than that of in client. This is\n * because both `registerMessagingInWindow` and `registerMessagingInSw` would be called in\n * `messaging-compat` and component with the same name can only be registered once.\n */\nexport function registerMessagingInSw(): void {\n _registerComponent(\n new Component('messaging-sw', SwMessagingFactory, ComponentType.PUBLIC)\n );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n areCookiesEnabled,\n isIndexedDBAvailable,\n validateIndexedDBOpenable\n} from '@firebase/util';\n\n/**\n * Checks if all required APIs exist in the browser.\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nexport async function isWindowSupported(): Promise<boolean> {\n try {\n // This throws if open() is unsupported, so adding it to the conditional\n // statement below can cause an uncaught error.\n await validateIndexedDBOpenable();\n } catch (e) {\n return false;\n }\n // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n // instantiating phase, informing the developers to import/call isSupported for special handling.\n return (\n typeof window !== 'undefined' &&\n isIndexedDBAvailable() &&\n areCookiesEnabled() &&\n 'serviceWorker' in navigator &&\n 'PushManager' in window &&\n 'Notification' in window &&\n 'fetch' in window &&\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n PushSubscription.prototype.hasOwnProperty('getKey')\n );\n}\n\n/**\n * Checks whether all required APIs exist within SW Context\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nexport async function isSwSupported(): Promise<boolean> {\n // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n // instantiating phase, informing the developers to import/call isSupported for special handling.\n return (\n isIndexedDBAvailable() &&\n (await validateIndexedDBOpenable()) &&\n 'PushManager' in self &&\n 'Notification' in self &&\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n PushSubscription.prototype.hasOwnProperty('getKey')\n );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\n\nimport {\n MessagePayload,\n NextFn,\n Observer,\n Unsubscribe\n} from '../interfaces/public-types';\nimport { MessagingService } from '../messaging-service';\n\nexport function onBackgroundMessage(\n messaging: MessagingService,\n nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>\n): Unsubscribe {\n if (self.document !== undefined) {\n throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_SW);\n }\n\n messaging.onBackgroundMessageHandler = nextOrObserver;\n\n return () => {\n messaging.onBackgroundMessageHandler = null;\n };\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Messaging } from '../interfaces/public-types';\nimport { MessagingService } from '../messaging-service';\n\nexport function _setDeliveryMetricsExportedToBigQueryEnabled(\n messaging: Messaging,\n enable: boolean\n): void {\n (messaging as MessagingService).deliveryMetricsExportedToBigQueryEnabled =\n enable;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from './util/errors';\nimport { FirebaseApp, _getProvider, getApp } from '@firebase/app';\nimport {\n GetTokenOptions,\n MessagePayload,\n Messaging\n} from './interfaces/public-types';\nimport {\n NextFn,\n Observer,\n Unsubscribe,\n getModularInstance\n} from '@firebase/util';\nimport { isSwSupported, isWindowSupported } from './api/isSupported';\n\nimport { MessagingService } from './messaging-service';\nimport { deleteToken as _deleteToken } from './api/deleteToken';\nimport { getToken as _getToken } from './api/getToken';\nimport { onBackgroundMessage as _onBackgroundMessage } from './api/onBackgroundMessage';\nimport { onMessage as _onMessage } from './api/onMessage';\nimport { _setDeliveryMetricsExportedToBigQueryEnabled } from './api/setDeliveryMetricsExportedToBigQueryEnabled';\n\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nexport function getMessagingInWindow(app: FirebaseApp = getApp()): Messaging {\n // Conscious decision to make this async check non-blocking during the messaging instance\n // initialization phase for performance consideration. An error would be thrown latter for\n // developer's information. Developers can then choose to import and call `isSupported` for\n // special handling.\n isWindowSupported().then(\n isSupported => {\n // If `isWindowSupported()` resolved, but returned false.\n if (!isSupported) {\n throw ERROR_FACTORY.create(ErrorCode.UNSUPPORTED_BROWSER);\n }\n },\n _ => {\n // If `isWindowSupported()` rejected.\n throw ERROR_FACTORY.create(ErrorCode.INDEXED_DB_UNSUPPORTED);\n }\n );\n return _getProvider(getModularInstance(app), 'messaging').getImmediate();\n}\n\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nexport function getMessagingInSw(app: FirebaseApp = getApp()): Messaging {\n // Conscious decision to make this async check non-blocking during the messaging instance\n // initialization phase for performance consideration. An error would be thrown latter for\n // developer's information. Developers can then choose to import and call `isSupported` for\n // special handling.\n isSwSupported().then(\n isSupported => {\n // If `isSwSupported()` resolved, but returned false.\n if (!isSupported) {\n throw ERROR_FACTORY.create(ErrorCode.UNSUPPORTED_BROWSER);\n }\n },\n _ => {\n // If `isSwSupported()` rejected.\n throw ERROR_FACTORY.create(ErrorCode.INDEXED_DB_UNSUPPORTED);\n }\n );\n return _getProvider(getModularInstance(app), 'messaging-sw').getImmediate();\n}\n\n/**\n * Subscribes the {@link Messaging} instance to push notifications. Returns a Firebase Cloud\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\n * instance.\n *\n * If notification permission isn't already granted, this method asks the user for permission. The\n * returned promise rejects if the user does not allow the app to show notifications.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param options - Provides an optional vapid key and an optional service worker registration.\n *\n * @returns The promise resolves with an FCM registration token.\n *\n * @public\n */\nexport async function getToken(\n messaging: Messaging,\n options?: GetTokenOptions\n): Promise<string> {\n messaging = getModularInstance(messaging);\n return _getToken(messaging as MessagingService, options);\n}\n\n/**\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\n * the {@link Messaging} instance from the push subscription.\n *\n * @param messaging - The {@link Messaging} instance.\n *\n * @returns The promise resolves when the token has been successfully deleted.\n *\n * @public\n */\nexport function deleteToken(messaging: Messaging): Promise<boolean> {\n messaging = getModularInstance(messaging);\n return _deleteToken(messaging as MessagingService);\n}\n\n/**\n * When a push message is received and the user is currently on a page for your origin, the\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\n * the push message.\n *\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined,\n * is called when a message is received and the user is currently viewing your page.\n * @returns To stop listening for messages execute this returned function.\n *\n * @public\n */\nexport function onMessage(\n messaging: Messaging,\n nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>\n): Unsubscribe {\n messaging = getModularInstance(messaging);\n return _onMessage(messaging as MessagingService, nextOrObserver);\n}\n\n/**\n * Called when a message is received while the app is in the background. An app is considered to be\n * in the background if no active window is displayed.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined, is called when a\n * message is received and the app is currently in the background.\n *\n * @returns To stop listening for messages execute this returned function\n *\n * @public\n */\nexport function onBackgroundMessage(\n messaging: Messaging,\n nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>\n): Unsubscribe {\n messaging = getModularInstance(messaging);\n return _onBackgroundMessage(messaging as MessagingService, nextOrObserver);\n}\n\n/**\n * Enables or disables Firebase Cloud Messaging message delivery metrics export to BigQuery. By\n * default, message delivery metrics are not exported to BigQuery. Use this method to enable or\n * disable the export at runtime.\n *\n * @param messaging - The `FirebaseMessaging` instance.\n * @param enable - Whether Firebase Cloud Messaging should export message delivery metrics to\n * BigQuery.\n *\n * @public\n */\nexport function experimentalSetDeliveryMetricsExportedToBigQueryEnabled(\n messaging: Messaging,\n enable: boolean\n): void {\n messaging = getModularInstance(messaging);\n return _setDeliveryMetricsExportedToBigQueryEnabled(messaging, enable);\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport '@firebase/installations';\n\nimport { Messaging } from './interfaces/public-types';\nimport { registerMessagingInSw } from './helpers/register';\n\nexport * from './interfaces/public-types';\nexport {\n onBackgroundMessage,\n getMessagingInSw as getMessaging,\n experimentalSetDeliveryMetricsExportedToBigQueryEnabled\n} from './api';\nexport { isSwSupported as isSupported } from './api/isSupported';\n\ndeclare module '@firebase/component' {\n interface NameServiceMapping {\n 'messaging-sw': Messaging;\n }\n}\n\nregisterMessagingInSw();\n"],"names":["MessageType","onBackgroundMessage","_onBackgroundMessage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.sw.esm.js","sources":["../../src/util/constants.ts","../../src/interfaces/internal-message-payload.ts","../../src/helpers/array-base64-translator.ts","../../src/helpers/migrate-old-database.ts","../../src/util/errors.ts","../../src/internals/idb-manager.ts","../../src/internals/requests.ts","../../src/internals/token-manager.ts","../../src/helpers/updateVapidKey.ts","../../src/internals/register-fid.ts","../../src/helpers/fid-change-registration.ts","../../src/helpers/externalizePayload.ts","../../src/helpers/is-console-message.ts","../../src/helpers/sleep.ts","../../src/helpers/logToFirelog.ts","../../src/listeners/sw-listeners.ts","../../src/helpers/extract-app-config.ts","../../src/messaging-service.ts","../../src/helpers/register.ts","../../src/api/isSupported.ts","../../src/api/onBackgroundMessage.ts","../../src/api/onRegistered.ts","../../src/api/onUnregistered.ts","../../src/api/setDeliveryMetricsExportedToBigQueryEnabled.ts","../../src/api.ts","../../src/index.sw.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\nexport const DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\n\nexport const DEFAULT_VAPID_KEY =\n 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\n\nexport const ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\n\n/** Key of FCM Payload in Notification's data field. */\nexport const FCM_MSG = 'FCM_MSG';\n\nexport const CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\nexport const CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\nexport const CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\n/** Set to '1' if Analytics is enabled for the campaign */\nexport const CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\nexport const TAG = 'FirebaseMessaging: ';\nexport const MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST = 1000;\nexport const MAX_RETRIES = 3;\nexport const LOG_INTERVAL_IN_MS = 86400000; //24 hour\nexport const DEFAULT_BACKOFF_TIME_MS = 5000;\nexport const DEFAULT_REGISTRATION_TIMEOUT = 10000;\n\n// FCM log source name registered at Firelog: 'FCM_CLIENT_EVENT_LOGGING'. It uniquely identifies\n// FCM's logging configuration.\nexport const FCM_LOG_SOURCE = 1249;\n\n// Defined as in proto/messaging_event.proto. Neglecting fields that are supported.\nexport const SDK_PLATFORM_WEB = 3;\nexport const EVENT_MESSAGE_DELIVERED = 1;\n\nexport enum MessageType {\n DATA_MESSAGE = 1,\n DISPLAY_NOTIFICATION = 3\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under the License\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n * or implied. See the License for the specific language governing permissions and limitations under\n * the License.\n */\n\nimport {\n CONSOLE_CAMPAIGN_ANALYTICS_ENABLED,\n CONSOLE_CAMPAIGN_ID,\n CONSOLE_CAMPAIGN_NAME,\n CONSOLE_CAMPAIGN_TIME\n} from '../util/constants';\n\nexport interface MessagePayloadInternal {\n notification?: NotificationPayloadInternal;\n data?: unknown;\n fcmOptions?: FcmOptionsInternal;\n messageType?: MessageType;\n isFirebaseMessaging?: boolean;\n from: string;\n fcmMessageId: string;\n productId: number;\n // eslint-disable-next-line camelcase\n collapse_key: string;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Notification/actions\ninterface NotificationAction {\n action: string;\n icon?: string;\n title: string;\n}\n\n/**\n * This interface defines experimental properties of NotificationOptions, that are not part of\n * the interface in the generated DOM types at https://github.com/microsoft/TypeScript-DOM-lib-generator/blob/179bdd84a944933a3103f29c2274c9f5a857b693/baselines/dom.generated.d.ts#L1012\n * https://developer.mozilla.org/en-US/docs/Web/API/Notification\n */\ninterface NotificationOptionsExperimental extends NotificationOptions {\n readonly maxActions?: number;\n readonly actions?: NotificationAction[];\n readonly image?: string;\n readonly renotify?: boolean;\n readonly timestamp?: EpochTimeStamp;\n readonly vibrate?: VibratePattern;\n}\n\nexport interface NotificationPayloadInternal\n extends NotificationOptionsExperimental {\n title: string;\n // Supported in the Legacy Send API.\n // See:https://firebase.google.com/docs/cloud-messaging/xmpp-server-ref.\n // eslint-disable-next-line camelcase\n click_action?: string;\n icon?: string;\n}\n\n// Defined in\n// https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#webpushfcmoptions. Note\n// that the keys are sent to the clients in snake cases which we need to convert to camel so it can\n// be exposed as a type to match the Firebase API convention.\nexport interface FcmOptionsInternal {\n link?: string;\n\n // eslint-disable-next-line camelcase\n analytics_label?: string;\n}\n\nexport enum MessageType {\n PUSH_RECEIVED = 'push-received',\n NOTIFICATION_CLICKED = 'notification-clicked',\n FID_REGISTERED = 'fid-registered'\n}\n\n/** Additional data of a message sent from the FN Console. */\nexport interface ConsoleMessageData {\n [CONSOLE_CAMPAIGN_ID]: string;\n [CONSOLE_CAMPAIGN_TIME]: string;\n [CONSOLE_CAMPAIGN_NAME]?: string;\n [CONSOLE_CAMPAIGN_ANALYTICS_ENABLED]?: '1';\n}\n\nexport interface FidRegisteredPayload {\n isFirebaseMessaging: boolean;\n messageType: MessageType.FID_REGISTERED;\n fid: string;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function arrayToBase64(array: Uint8Array | ArrayBuffer): string {\n const uint8Array = new Uint8Array(array);\n const base64String = btoa(String.fromCharCode(...uint8Array));\n return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\nexport function base64ToArray(base64String: string): Uint8Array {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding)\n .replace(/\\-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { deleteDB, openDB } from 'idb';\n\nimport { TokenDetails } from '../interfaces/registration-details';\nimport { arrayToBase64 } from './array-base64-translator';\n\n// https://github.com/firebase/firebase-js-sdk/blob/7857c212f944a2a9eb421fd4cb7370181bc034b5/packages/messaging/src/interfaces/token-details.ts\nexport interface V2TokenDetails {\n fcmToken: string;\n swScope: string;\n vapidKey: string | Uint8Array;\n subscription: PushSubscription;\n fcmSenderId: string;\n fcmPushSet: string;\n createTime?: number;\n endpoint?: string;\n auth?: string;\n p256dh?: string;\n}\n\n// https://github.com/firebase/firebase-js-sdk/blob/6b5b15ce4ea3df5df5df8a8b33a4e41e249c7715/packages/messaging/src/interfaces/registration-details.ts\nexport interface V3TokenDetails {\n fcmToken: string;\n swScope: string;\n vapidKey: Uint8Array;\n fcmSenderId: string;\n fcmPushSet: string;\n endpoint: string;\n auth: ArrayBuffer;\n p256dh: ArrayBuffer;\n createTime: number;\n}\n\n// https://github.com/firebase/firebase-js-sdk/blob/9567dba664732f681fa7fe60f5b7032bb1daf4c9/packages/messaging/src/interfaces/registration-details.ts\nexport interface V4TokenDetails {\n fcmToken: string;\n swScope: string;\n vapidKey: Uint8Array;\n fcmSenderId: string;\n endpoint: string;\n auth: ArrayBufferLike;\n p256dh: ArrayBufferLike;\n createTime: number;\n}\n\nconst OLD_DB_NAME = 'fcm_token_details_db';\n/**\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\n * callback is called for all versions of the old DB.\n */\nconst OLD_DB_VERSION = 5;\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\n\nexport async function migrateOldDatabase(\n senderId: string\n): Promise<TokenDetails | null> {\n if ('databases' in indexedDB) {\n // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\n // typecast when it lands in TS types.\n const databases = await (\n indexedDB as {\n databases(): Promise<Array<{ name: string; version: number }>>;\n }\n ).databases();\n const dbNames = databases.map(db => db.name);\n\n if (!dbNames.includes(OLD_DB_NAME)) {\n // old DB didn't exist, no need to open.\n return null;\n }\n }\n\n let tokenDetails: TokenDetails | null = null;\n\n const db = await openDB(OLD_DB_NAME, OLD_DB_VERSION, {\n upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\n if (oldVersion < 2) {\n // Database too old, skip migration.\n return;\n }\n\n if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\n // Database did not exist. Nothing to do.\n return;\n }\n\n const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\n const value = await objectStore.index('fcmSenderId').get(senderId);\n await objectStore.clear();\n\n if (!value) {\n // No entry in the database, nothing to migrate.\n return;\n }\n\n if (oldVersion === 2) {\n const oldDetails = value as V2TokenDetails;\n\n if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\n return;\n }\n\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime ?? Date.now(),\n subscriptionOptions: {\n auth: oldDetails.auth,\n p256dh: oldDetails.p256dh,\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey:\n typeof oldDetails.vapidKey === 'string'\n ? oldDetails.vapidKey\n : arrayToBase64(oldDetails.vapidKey)\n }\n };\n } else if (oldVersion === 3) {\n const oldDetails = value as V3TokenDetails;\n\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime,\n subscriptionOptions: {\n auth: arrayToBase64(oldDetails.auth),\n p256dh: arrayToBase64(oldDetails.p256dh),\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: arrayToBase64(oldDetails.vapidKey)\n }\n };\n } else if (oldVersion === 4) {\n const oldDetails = value as V4TokenDetails;\n\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime,\n subscriptionOptions: {\n auth: arrayToBase64(oldDetails.auth),\n p256dh: arrayToBase64(oldDetails.p256dh),\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: arrayToBase64(oldDetails.vapidKey)\n }\n };\n }\n }\n });\n db.close();\n\n // Delete all old databases.\n await deleteDB(OLD_DB_NAME);\n await deleteDB('fcm_vapid_details_db');\n await deleteDB('undefined');\n\n return checkTokenDetails(tokenDetails) ? tokenDetails : null;\n}\n\nfunction checkTokenDetails(\n tokenDetails: TokenDetails | null\n): tokenDetails is TokenDetails {\n if (!tokenDetails || !tokenDetails.subscriptionOptions) {\n return false;\n }\n const { subscriptionOptions } = tokenDetails;\n return (\n typeof tokenDetails.createTime === 'number' &&\n tokenDetails.createTime > 0 &&\n typeof tokenDetails.token === 'string' &&\n tokenDetails.token.length > 0 &&\n typeof subscriptionOptions.auth === 'string' &&\n subscriptionOptions.auth.length > 0 &&\n typeof subscriptionOptions.p256dh === 'string' &&\n subscriptionOptions.p256dh.length > 0 &&\n typeof subscriptionOptions.endpoint === 'string' &&\n subscriptionOptions.endpoint.length > 0 &&\n typeof subscriptionOptions.swScope === 'string' &&\n subscriptionOptions.swScope.length > 0 &&\n typeof subscriptionOptions.vapidKey === 'string' &&\n subscriptionOptions.vapidKey.length > 0\n );\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ErrorFactory, ErrorMap } from '@firebase/util';\n\nexport const enum ErrorCode {\n MISSING_APP_CONFIG_VALUES = 'missing-app-config-values',\n AVAILABLE_IN_WINDOW = 'only-available-in-window',\n AVAILABLE_IN_SW = 'only-available-in-sw',\n PERMISSION_DEFAULT = 'permission-default',\n PERMISSION_BLOCKED = 'permission-blocked',\n UNSUPPORTED_BROWSER = 'unsupported-browser',\n INDEXED_DB_UNSUPPORTED = 'indexed-db-unsupported',\n FAILED_DEFAULT_REGISTRATION = 'failed-service-worker-registration',\n TOKEN_SUBSCRIBE_FAILED = 'token-subscribe-failed',\n TOKEN_SUBSCRIBE_NO_TOKEN = 'token-subscribe-no-token',\n FID_REGISTRATION_FAILED = 'fid-registration-failed',\n FID_UNREGISTER_FAILED = 'fid-unregister-failed',\n FID_REGISTRATION_IDB_SCHEMA_UNAVAILABLE = 'fid-registration-idb-schema-unavailable',\n TOKEN_UNSUBSCRIBE_FAILED = 'token-unsubscribe-failed',\n TOKEN_UPDATE_FAILED = 'token-update-failed',\n TOKEN_UPDATE_NO_TOKEN = 'token-update-no-token',\n INVALID_BG_HANDLER = 'invalid-bg-handler',\n USE_SW_AFTER_GET_TOKEN = 'use-sw-after-get-token',\n INVALID_SW_REGISTRATION = 'invalid-sw-registration',\n USE_VAPID_KEY_AFTER_GET_TOKEN = 'use-vapid-key-after-get-token',\n INVALID_VAPID_KEY = 'invalid-vapid-key',\n INVALID_ON_REGISTERED_HANDLER = 'invalid-on-registered-handler'\n}\n\nexport const ERROR_MAP: ErrorMap<ErrorCode> = {\n [ErrorCode.MISSING_APP_CONFIG_VALUES]:\n 'Missing App configuration value: \"{$valueName}\"',\n [ErrorCode.AVAILABLE_IN_WINDOW]:\n 'This method is available in a Window context.',\n [ErrorCode.AVAILABLE_IN_SW]:\n 'This method is available in a service worker context.',\n [ErrorCode.PERMISSION_DEFAULT]:\n 'The notification permission was not granted and dismissed instead.',\n [ErrorCode.PERMISSION_BLOCKED]:\n 'The notification permission was not granted and blocked instead.',\n [ErrorCode.UNSUPPORTED_BROWSER]:\n \"This browser doesn't support the API's required to use the Firebase SDK.\",\n [ErrorCode.INDEXED_DB_UNSUPPORTED]:\n \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\n [ErrorCode.FAILED_DEFAULT_REGISTRATION]:\n 'We are unable to register the default service worker. {$browserErrorMessage}',\n [ErrorCode.TOKEN_SUBSCRIBE_FAILED]:\n 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\n [ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN]:\n 'FCM returned no token when subscribing the user to push.',\n [ErrorCode.FID_REGISTRATION_FAILED]:\n 'A problem occurred while creating an FCM registration via FID: {$errorInfo}',\n [ErrorCode.FID_UNREGISTER_FAILED]:\n 'A problem occurred while unregistering the FCM registration via FID: {$errorInfo}',\n [ErrorCode.FID_REGISTRATION_IDB_SCHEMA_UNAVAILABLE]:\n 'Unable to read or persist FID registration metadata because the messaging ' +\n 'IndexedDB schema is unavailable (for example, the database could not be ' +\n 'upgraded to the latest version).',\n [ErrorCode.TOKEN_UNSUBSCRIBE_FAILED]:\n 'A problem occurred while unsubscribing the ' +\n 'user from FCM: {$errorInfo}',\n [ErrorCode.TOKEN_UPDATE_FAILED]:\n 'A problem occurred while updating the user from FCM: {$errorInfo}',\n [ErrorCode.TOKEN_UPDATE_NO_TOKEN]:\n 'FCM returned no token when updating the user to push.',\n [ErrorCode.USE_SW_AFTER_GET_TOKEN]:\n 'The useServiceWorker() method may only be called once and must be ' +\n 'called before calling getToken() to ensure your service worker is used.',\n [ErrorCode.INVALID_SW_REGISTRATION]:\n 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\n [ErrorCode.INVALID_BG_HANDLER]:\n 'The input to setBackgroundMessageHandler() must be a function.',\n [ErrorCode.INVALID_VAPID_KEY]: 'The public VAPID key must be a string.',\n [ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN]:\n 'The usePublicVapidKey() method may only be called once and must be ' +\n 'called before calling getToken() to ensure your VAPID key is used.',\n [ErrorCode.INVALID_ON_REGISTERED_HANDLER]:\n 'No onRegistered callback handler was provided or registered. Implement onRegistered() before register().'\n};\n\ninterface ErrorParams {\n [ErrorCode.MISSING_APP_CONFIG_VALUES]: {\n valueName: string;\n };\n [ErrorCode.FAILED_DEFAULT_REGISTRATION]: { browserErrorMessage: string };\n [ErrorCode.TOKEN_SUBSCRIBE_FAILED]: { errorInfo: string };\n [ErrorCode.FID_REGISTRATION_FAILED]: { errorInfo: string };\n [ErrorCode.FID_UNREGISTER_FAILED]: { errorInfo: string };\n [ErrorCode.TOKEN_UNSUBSCRIBE_FAILED]: { errorInfo: string };\n [ErrorCode.TOKEN_UPDATE_FAILED]: { errorInfo: string };\n}\n\nexport const ERROR_FACTORY = new ErrorFactory<ErrorCode, ErrorParams>(\n 'messaging',\n 'Messaging',\n ERROR_MAP\n);\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { deleteDB, openDB } from 'idb';\nimport type { DBSchema, IDBPDatabase, OpenDBCallbacks } from 'idb';\n\nimport { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';\nimport { TokenDetails } from '../interfaces/registration-details';\nimport { migrateOldDatabase } from '../helpers/migrate-old-database';\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\n\nexport const DATABASE_NAME = 'firebase-messaging-database';\nconst DATABASE_VERSION = 2;\nconst TOKEN_OBJECT_STORE_NAME = 'firebase-messaging-store';\nconst FID_REGISTRATION_OBJECT_STORE_NAME =\n 'firebase-messaging-fid-registration-store';\n\ninterface MessagingDB extends DBSchema {\n 'firebase-messaging-store': {\n key: string;\n value: TokenDetails;\n };\n 'firebase-messaging-fid-registration-store': {\n key: string;\n value: FidRegistrationDetails;\n };\n}\n\nexport interface FidRegistrationDetails {\n fid: string;\n lastRegisterTime: number;\n vapidKey?: string;\n}\n\ninterface IdbImpl {\n openDB: typeof openDB;\n deleteDB: typeof deleteDB;\n}\n\nconst defaultIdb: IdbImpl = { openDB, deleteDB };\nlet idbImpl: IdbImpl = defaultIdb;\n\n// Exported for tests.\nexport function _setIdbForTests(impl: IdbImpl): void {\n idbImpl = impl;\n}\n\nexport function _resetIdbForTests(): void {\n idbImpl = defaultIdb;\n}\n\n// Open v2, but fall back to v1 if upgrade/open fails. Cache as `unknown` and guard store access.\nlet dbPromise: Promise<IDBPDatabase<unknown>> | null = null;\n\nfunction migrateMessagingDb(\n upgradeDb: IDBPDatabase<unknown>,\n oldVersion: number,\n targetSchemaVersion: 1 | 2\n): void {\n // Intentional fall-through for v2: run all intermediate migrations.\n // eslint-disable-next-line default-case\n switch (oldVersion) {\n case 0:\n upgradeDb.createObjectStore(TOKEN_OBJECT_STORE_NAME);\n if (targetSchemaVersion === 1) {\n break;\n }\n // fall through\n case 1:\n if (targetSchemaVersion === 2) {\n upgradeDb.createObjectStore(FID_REGISTRATION_OBJECT_STORE_NAME);\n }\n }\n}\n\nfunction createOpenDbOptions(\n targetSchemaVersion: 1 | 2\n): OpenDBCallbacks<unknown> {\n return {\n upgrade: (upgradeDb: IDBPDatabase<unknown>, oldVersion: number) => {\n migrateMessagingDb(upgradeDb, oldVersion, targetSchemaVersion);\n },\n blocked: () => {\n /* no-op */\n },\n blocking: (\n _currentVersion: number,\n _blockedVersion: number | null,\n event: IDBVersionChangeEvent\n ) => {\n dbPromise = null;\n (event.target as IDBDatabase | null)?.close();\n },\n terminated: () => {\n dbPromise = null;\n }\n };\n}\n\nfunction getDbPromise(): Promise<IDBPDatabase<MessagingDB>> {\n if (!dbPromise) {\n const openLatest = idbImpl.openDB(\n DATABASE_NAME,\n DATABASE_VERSION,\n createOpenDbOptions(2)\n );\n\n // Assign synchronously to avoid concurrent openDB() calls.\n dbPromise = (openLatest as unknown as Promise<IDBPDatabase<unknown>>).catch(\n () =>\n idbImpl.openDB(\n DATABASE_NAME,\n DATABASE_VERSION - 1,\n createOpenDbOptions(1)\n ) as unknown as Promise<IDBPDatabase<unknown>>\n );\n }\n return dbPromise as Promise<IDBPDatabase<MessagingDB>>;\n}\n\nfunction hasObjectStore(db: IDBPDatabase<unknown>, storeName: string): boolean {\n return db.objectStoreNames.contains(storeName);\n}\n\nfunction assertFidRegistrationObjectStore(db: IDBPDatabase<MessagingDB>): void {\n if (\n !hasObjectStore(\n db as unknown as IDBPDatabase<unknown>,\n FID_REGISTRATION_OBJECT_STORE_NAME\n )\n ) {\n throw ERROR_FACTORY.create(\n ErrorCode.FID_REGISTRATION_IDB_SCHEMA_UNAVAILABLE\n );\n }\n}\n\nexport async function dbGet(\n firebaseDependencies: FirebaseInternalDependencies\n): Promise<TokenDetails | undefined> {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tokenDetails = (await db\n .transaction(TOKEN_OBJECT_STORE_NAME)\n .objectStore(TOKEN_OBJECT_STORE_NAME)\n .get(key)) as TokenDetails;\n\n if (tokenDetails) {\n return tokenDetails;\n } else {\n const oldTokenDetails = await migrateOldDatabase(\n firebaseDependencies.appConfig.senderId\n );\n if (oldTokenDetails) {\n await dbSet(firebaseDependencies, oldTokenDetails);\n return oldTokenDetails;\n }\n }\n}\n\nexport async function dbSet(\n firebaseDependencies: FirebaseInternalDependencies,\n tokenDetails: TokenDetails\n): Promise<TokenDetails> {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n\n const stores: Array<\n typeof TOKEN_OBJECT_STORE_NAME | typeof FID_REGISTRATION_OBJECT_STORE_NAME\n > = [TOKEN_OBJECT_STORE_NAME];\n const hasFidStore = hasObjectStore(\n db as unknown as IDBPDatabase<unknown>,\n FID_REGISTRATION_OBJECT_STORE_NAME\n );\n if (hasFidStore) {\n stores.push(FID_REGISTRATION_OBJECT_STORE_NAME);\n }\n\n const tx = db.transaction(stores, 'readwrite');\n await tx.objectStore(TOKEN_OBJECT_STORE_NAME).put(tokenDetails, key);\n if (hasFidStore) {\n await tx.objectStore(FID_REGISTRATION_OBJECT_STORE_NAME).delete(key);\n }\n await tx.done;\n\n return tokenDetails;\n}\n\nexport async function dbRemove(\n firebaseDependencies: FirebaseInternalDependencies\n): Promise<void> {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tx = db.transaction(TOKEN_OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(TOKEN_OBJECT_STORE_NAME).delete(key);\n await tx.done;\n}\n\nexport async function dbGetFidRegistration(\n firebaseDependencies: FirebaseInternalDependencies\n): Promise<FidRegistrationDetails | undefined> {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n assertFidRegistrationObjectStore(db);\n return (await db\n .transaction(FID_REGISTRATION_OBJECT_STORE_NAME)\n .objectStore(FID_REGISTRATION_OBJECT_STORE_NAME)\n .get(key)) as FidRegistrationDetails | undefined;\n}\n\nexport async function dbSetFidRegistration(\n firebaseDependencies: FirebaseInternalDependencies,\n details: FidRegistrationDetails\n): Promise<FidRegistrationDetails> {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n assertFidRegistrationObjectStore(db);\n\n const tx = db.transaction(\n [TOKEN_OBJECT_STORE_NAME, FID_REGISTRATION_OBJECT_STORE_NAME],\n 'readwrite'\n );\n await tx.objectStore(FID_REGISTRATION_OBJECT_STORE_NAME).put(details, key);\n await tx.objectStore(TOKEN_OBJECT_STORE_NAME).delete(key);\n await tx.done;\n\n return details;\n}\n\nexport async function dbRemoveFidRegistration(\n firebaseDependencies: FirebaseInternalDependencies\n): Promise<void> {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n assertFidRegistrationObjectStore(db);\n const tx = db.transaction(FID_REGISTRATION_OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(FID_REGISTRATION_OBJECT_STORE_NAME).delete(key);\n await tx.done;\n}\n\n/** Deletes the DB. Useful for tests. */\nexport async function dbDelete(): Promise<void> {\n const promise = dbPromise;\n dbPromise = null;\n\n try {\n if (promise) {\n (await promise).close();\n }\n } catch {\n // Ignore open failures; deleting the DB is the recovery mechanism.\n } finally {\n await idbImpl.deleteDB(DATABASE_NAME);\n }\n}\n\nfunction getKey({ appConfig }: FirebaseInternalDependencies): string {\n return appConfig.appId;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_VAPID_KEY, ENDPOINT } from '../util/constants';\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\nimport {\n SubscriptionOptions,\n TokenDetails\n} from '../interfaces/registration-details';\n\nimport { AppConfig } from '../interfaces/app-config';\nimport { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';\nimport { version as fcmSdkVersion } from '../../package.json';\n\n/** Max attempts (initial fetch + retries) when CreateRegistration `fetch()` throws. */\nexport const FID_REGISTRATION_FETCH_MAX_ATTEMPTS = 3;\n\n/** Base delay in ms; backoff is `BASE * 2^attempt` after each failed attempt. */\nexport const FID_REGISTRATION_FETCH_BASE_BACKOFF_MS = 1000;\n\nexport interface ApiResponse {\n token?: string;\n /**\n * CreateRegistration resource name, e.g. `projects/{projectId}/registrations/{fid}`.\n */\n name?: string;\n error?: { message: string };\n}\n\nexport interface ApiRequestBody {\n // eslint-disable-next-line camelcase\n fcm_sdk_version?: string;\n web: {\n /**\n * Client identifier for the registration: the site host (e.g. `www.example.com`) when the\n * service worker scope is a URL, otherwise the app name.\n */\n origin: string;\n endpoint: string;\n p256dh: string;\n auth: string;\n applicationPubKey?: string;\n };\n}\n\nexport async function requestGetToken(\n firebaseDependencies: FirebaseInternalDependencies,\n subscriptionOptions: SubscriptionOptions\n): Promise<string> {\n const headers = await getHeaders(firebaseDependencies);\n const body = getBody(\n subscriptionOptions,\n firebaseDependencies.appConfig.appName,\n /* includeSdkVersion= */ false\n );\n\n const subscribeOptions = {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n };\n\n let responseData: ApiResponse;\n try {\n const response = await fetch(\n getEndpoint(firebaseDependencies.appConfig),\n subscribeOptions\n );\n responseData = await response.json();\n } catch (err) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_FAILED, {\n errorInfo: (err as Error)?.toString()\n });\n }\n\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_FAILED, {\n errorInfo: message\n });\n }\n\n if (!responseData.token) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN);\n }\n\n return responseData.token;\n}\n\n/**\n * Creates (or refreshes) an FCM Web registration via CreateRegistration.\n *\n * This is used by the FID-based register path, where we don't require the returned FCM token, but\n * we do require a non-empty `name` (echoing the Firebase Installation ID) in the success response body.\n */\nexport interface CreateRegistrationResult {\n /** Firebase Installation ID parsed from the CreateRegistration response `name` field. */\n responseFid: string;\n}\n\nexport async function requestCreateRegistration(\n firebaseDependencies: FirebaseInternalDependencies,\n subscriptionOptions: SubscriptionOptions\n): Promise<CreateRegistrationResult> {\n const headers = await getHeaders(firebaseDependencies);\n const body = getBody(\n subscriptionOptions,\n firebaseDependencies.appConfig.appName,\n /* includeSdkVersion= */ true\n );\n\n const subscribeOptions = {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n };\n\n let response: Response;\n try {\n response = await fetchWithExponentialRetry(\n () =>\n fetch(getEndpoint(firebaseDependencies.appConfig), subscribeOptions),\n FID_REGISTRATION_FETCH_MAX_ATTEMPTS,\n FID_REGISTRATION_FETCH_BASE_BACKOFF_MS\n );\n } catch (err) {\n throw ERROR_FACTORY.create(ErrorCode.FID_REGISTRATION_FAILED, {\n errorInfo: (err as Error)?.toString()\n });\n }\n\n if (response.ok) {\n const responseFid = await parseCreateRegistrationSuccessFid(response);\n return { responseFid };\n }\n\n // `fetch()` succeeded, but the backend returned a non-2xx response.\n // Best-effort parse the body to extract `error.message`, but always fail with\n // `FID_REGISTRATION_FAILED` to keep the error surface uniform.\n // Best-effort extraction of error details; the main signal is response.ok / status.\n let responseData: ApiResponse;\n try {\n responseData = (await response.json()) as ApiResponse;\n } catch (err) {\n throw ERROR_FACTORY.create(ErrorCode.FID_REGISTRATION_FAILED, {\n errorInfo: response.statusText\n });\n }\n const message = responseData.error?.message ?? response.statusText;\n throw ERROR_FACTORY.create(ErrorCode.FID_REGISTRATION_FAILED, {\n errorInfo: message\n });\n}\n\n/**\n * Deletes an FCM Web registration via DeleteRegistration using the Firebase Installation ID (FID).\n */\nexport async function requestDeleteRegistration(\n firebaseDependencies: FirebaseInternalDependencies,\n fid: string\n): Promise<void> {\n const headers = await getHeaders(firebaseDependencies);\n\n const options: RequestInit = {\n method: 'DELETE',\n headers\n };\n\n let response: Response;\n try {\n response = await fetch(\n `${getEndpoint(firebaseDependencies.appConfig)}/${fid}`,\n options\n );\n } catch (err) {\n throw ERROR_FACTORY.create(ErrorCode.FID_UNREGISTER_FAILED, {\n errorInfo: (err as Error)?.toString()\n });\n }\n\n if (response.ok) {\n return;\n }\n\n // Best-effort parse error details; surface uniform error code.\n try {\n const responseData = (await response.json()) as ApiResponse;\n const message = responseData.error?.message ?? response.statusText;\n throw message;\n } catch (err) {\n // If parsing failed, fall back to status text.\n throw ERROR_FACTORY.create(ErrorCode.FID_UNREGISTER_FAILED, {\n errorInfo:\n (typeof err === 'string' && err) ||\n response.statusText ||\n (err as Error)?.toString()\n });\n }\n}\n\n/**\n * Parses a successful CreateRegistration body. The backend must return JSON with a non-empty\n * string `name`: a resource name `projects/{projectId}/registrations/{fid}`\n */\nasync function parseCreateRegistrationSuccessFid(\n response: Response\n): Promise<string> {\n const text = await response.text();\n if (!text.trim()) {\n throw ERROR_FACTORY.create(ErrorCode.FID_REGISTRATION_FAILED, {\n errorInfo: 'CreateRegistration succeeded but response body is empty'\n });\n }\n let data: ApiResponse;\n try {\n data = JSON.parse(text) as ApiResponse;\n } catch {\n throw ERROR_FACTORY.create(ErrorCode.FID_REGISTRATION_FAILED, {\n errorInfo:\n 'CreateRegistration succeeded but response body is not valid JSON'\n });\n }\n const name = data.name;\n if (typeof name !== 'string' || name.length === 0) {\n throw ERROR_FACTORY.create(ErrorCode.FID_REGISTRATION_FAILED, {\n errorInfo:\n 'CreateRegistration succeeded but response did not include a non-empty name'\n });\n }\n return parseFidFromRegistrationResourceName(name);\n}\n\nconst REGISTRATIONS_NAME_SEGMENT = '/registrations/';\n\n/** Extracts the Firebase Installation ID from CreateRegistration `name` (resource path). */\nfunction parseFidFromRegistrationResourceName(name: string): string {\n const segmentIndex = name.indexOf(REGISTRATIONS_NAME_SEGMENT);\n if (segmentIndex !== -1) {\n const fid = name.slice(segmentIndex + REGISTRATIONS_NAME_SEGMENT.length);\n if (fid.length > 0) {\n return fid;\n }\n }\n throw ERROR_FACTORY.create(ErrorCode.FID_REGISTRATION_FAILED, {\n errorInfo:\n 'CreateRegistration succeeded but response name is not a valid registration resource name'\n });\n}\n\nexport async function requestUpdateToken(\n firebaseDependencies: FirebaseInternalDependencies,\n tokenDetails: TokenDetails\n): Promise<string> {\n const headers = await getHeaders(firebaseDependencies);\n const body = getBody(\n tokenDetails.subscriptionOptions!,\n firebaseDependencies.appConfig.appName,\n /* includeSdkVersion= */ false\n );\n\n const updateOptions = {\n method: 'PATCH',\n headers,\n body: JSON.stringify(body)\n };\n\n let responseData: ApiResponse;\n try {\n const response = await fetch(\n `${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`,\n updateOptions\n );\n responseData = await response.json();\n } catch (err) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_FAILED, {\n errorInfo: (err as Error)?.toString()\n });\n }\n\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_FAILED, {\n errorInfo: message\n });\n }\n\n if (!responseData.token) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_NO_TOKEN);\n }\n\n return responseData.token;\n}\n\nexport async function requestDeleteToken(\n firebaseDependencies: FirebaseInternalDependencies,\n token: string\n): Promise<void> {\n const headers = await getHeaders(firebaseDependencies);\n\n const unsubscribeOptions = {\n method: 'DELETE',\n headers\n };\n\n try {\n const response = await fetch(\n `${getEndpoint(firebaseDependencies.appConfig)}/${token}`,\n unsubscribeOptions\n );\n const responseData: ApiResponse = await response.json();\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UNSUBSCRIBE_FAILED, {\n errorInfo: message\n });\n }\n } catch (err) {\n throw ERROR_FACTORY.create(ErrorCode.TOKEN_UNSUBSCRIBE_FAILED, {\n errorInfo: (err as Error)?.toString()\n });\n }\n}\n\n/**\n * Re-runs `operation` when it throws, with exponential backoff between attempts.\n * Rethrows the last error if all attempts fail.\n */\nasync function fetchWithExponentialRetry(\n operation: () => Promise<Response>,\n maxAttempts: number,\n baseBackoffMs: number\n): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await operation();\n } catch (err) {\n lastError = err;\n if (attempt < maxAttempts - 1) {\n const delayMs = baseBackoffMs * Math.pow(2, attempt);\n await new Promise<void>(resolve => setTimeout(resolve, delayMs));\n }\n }\n }\n throw lastError;\n}\n\nfunction getEndpoint({ projectId }: AppConfig): string {\n return `${ENDPOINT}/projects/${projectId!}/registrations`;\n}\n\nasync function getHeaders({\n appConfig,\n installations\n}: FirebaseInternalDependencies): Promise<Headers> {\n const authToken = await installations.getToken();\n\n return new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'x-goog-api-key': appConfig.apiKey!,\n 'x-goog-firebase-installations-auth': `FIS ${authToken}`\n });\n}\n\n/**\n * Hostname for the registering web client (e.g. `www.example.com`), or the app name\n * (`appNameFallback`) when the scope cannot be resolved (e.g. some test environments).\n */\nexport function getRegistrationOrigin(\n swScope: string,\n appNameFallback: string\n): string {\n try {\n if (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.test(swScope)) {\n return new URL(swScope).host;\n }\n } catch {\n // Fall through to relative-scope handling.\n }\n try {\n if (typeof self !== 'undefined' && self.location?.href) {\n return new URL(swScope, self.location.origin).host;\n }\n } catch {\n // Fall through.\n }\n if (typeof self !== 'undefined' && self.location?.host) {\n return self.location.host;\n }\n return appNameFallback;\n}\n\nfunction getBody(\n { p256dh, auth, endpoint, vapidKey, swScope }: SubscriptionOptions,\n appNameFallback: string,\n includeSdkVersion: boolean\n): ApiRequestBody {\n const body: ApiRequestBody = {\n web: {\n origin: getRegistrationOrigin(swScope, appNameFallback),\n endpoint,\n auth,\n p256dh\n }\n };\n\n if (includeSdkVersion) {\n // eslint-disable-next-line camelcase\n body.fcm_sdk_version = fcmSdkVersion;\n }\n\n if (vapidKey !== DEFAULT_VAPID_KEY) {\n body.web.applicationPubKey = vapidKey;\n }\n\n return body;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n SubscriptionOptions,\n TokenDetails\n} from '../interfaces/registration-details';\nimport {\n arrayToBase64,\n base64ToArray\n} from '../helpers/array-base64-translator';\nimport {\n dbGet,\n dbGetFidRegistration,\n dbRemove,\n dbRemoveFidRegistration,\n dbSet\n} from './idb-manager';\nimport {\n requestDeleteRegistration,\n requestDeleteToken,\n requestGetToken,\n requestUpdateToken\n} from './requests';\n\nimport { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';\nimport { MessagingService } from '../messaging-service';\n\n// UpdateRegistration will be called once every week.\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\n\nexport async function getTokenInternal(\n messaging: MessagingService\n): Promise<string> {\n const pushSubscription = await getPushSubscription(\n messaging.swRegistration!,\n messaging.vapidKey!\n );\n\n const subscriptionOptions: SubscriptionOptions = {\n vapidKey: messaging.vapidKey!,\n swScope: messaging.swRegistration!.scope,\n endpoint: pushSubscription.endpoint,\n auth: arrayToBase64(pushSubscription.getKey('auth')!),\n p256dh: arrayToBase64(pushSubscription.getKey('p256dh')!)\n };\n\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n if (!tokenDetails) {\n // No token, get a new one.\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n } else if (\n !isTokenValid(tokenDetails.subscriptionOptions!, subscriptionOptions)\n ) {\n // Invalid token, get a new one.\n try {\n await requestDeleteToken(\n messaging.firebaseDependencies!,\n tokenDetails.token\n );\n } catch (e) {\n // Suppress errors because of #2364\n console.warn(e);\n }\n\n return getNewToken(messaging.firebaseDependencies!, subscriptionOptions);\n } else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\n // Weekly token refresh\n return updateToken(messaging, {\n token: tokenDetails.token,\n createTime: Date.now(),\n subscriptionOptions\n });\n } else {\n // Valid token, nothing to do.\n return tokenDetails.token;\n }\n}\n\n/**\n * Legacy getToken() path: there is a token row in IndexedDB. Revoke it with FCM, drop the row, and\n * clear any leftover FID registration metadata (apps may mix APIs).\n */\nasync function revokeLegacyFcmTokenAndClearCaches(\n messaging: MessagingService,\n tokenDetails: TokenDetails\n): Promise<void> {\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\n await dbRemove(messaging.firebaseDependencies);\n await removeFidRegistrationBestEffort(messaging.firebaseDependencies);\n}\n\n/**\n * No legacy token row: the client may only have FID-based registration (register() flow). If so,\n * delete that registration on the server, always scrub local FID metadata, then surface\n * onUnregistered when we actually had an FID.\n */\nasync function revokeFidRegistrationIfStored(\n messaging: MessagingService\n): Promise<void> {\n const stored = await dbGetFidRegistration(\n messaging.firebaseDependencies\n ).catch(() => undefined);\n const fid = stored?.fid;\n\n if (fid) {\n await requestDeleteRegistration(messaging.firebaseDependencies, fid);\n }\n\n await removeFidRegistrationBestEffort(messaging.firebaseDependencies);\n\n if (fid) {\n notifyOnUnregistered(messaging, fid);\n }\n}\n\n/**\n * Revokes the app's FCM registration: legacy token (getToken/deleteToken) and/or FID-based\n * registration (register/unregister), clears local caches, notifies onUnregistered when a stored\n * FID existed, then unsubscribes the push subscription when present.\n */\nexport async function revokeRegistrationInternal(\n messaging: MessagingService\n): Promise<boolean> {\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n if (tokenDetails) {\n await revokeLegacyFcmTokenAndClearCaches(messaging, tokenDetails);\n } else {\n await revokeFidRegistrationIfStored(messaging);\n }\n\n // Unsubscribe from the push subscription.\n const pushSubscription =\n await messaging.swRegistration!.pushManager.getSubscription();\n if (pushSubscription) {\n return pushSubscription.unsubscribe();\n }\n\n // If there's no SW, consider it a success.\n return true;\n}\n\nasync function updateToken(\n messaging: MessagingService,\n tokenDetails: TokenDetails\n): Promise<string> {\n try {\n const updatedToken = await requestUpdateToken(\n messaging.firebaseDependencies,\n tokenDetails\n );\n\n const updatedTokenDetails: TokenDetails = {\n ...tokenDetails,\n token: updatedToken,\n createTime: Date.now()\n };\n\n await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\n return updatedToken;\n } catch (e) {\n throw e;\n }\n}\n\nasync function getNewToken(\n firebaseDependencies: FirebaseInternalDependencies,\n subscriptionOptions: SubscriptionOptions\n): Promise<string> {\n const token = await requestGetToken(\n firebaseDependencies,\n subscriptionOptions\n );\n const tokenDetails: TokenDetails = {\n token,\n createTime: Date.now(),\n subscriptionOptions\n };\n await dbSet(firebaseDependencies, tokenDetails);\n return tokenDetails.token;\n}\n\n/**\n * Gets a PushSubscription for the current user.\n */\nasync function getPushSubscription(\n swRegistration: ServiceWorkerRegistration,\n vapidKey: string\n): Promise<PushSubscription> {\n const subscription = await swRegistration.pushManager.getSubscription();\n if (subscription) {\n return subscription;\n }\n\n return swRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\n // submitted to pushManager#subscribe must be of type Uint8Array.\n applicationServerKey: base64ToArray(vapidKey)\n });\n}\n\n/**\n * Checks if the saved tokenDetails object matches the configuration provided.\n */\nfunction isTokenValid(\n dbOptions: SubscriptionOptions,\n currentOptions: SubscriptionOptions\n): boolean {\n const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\n const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\n const isAuthEqual = currentOptions.auth === dbOptions.auth;\n const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\n\n return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\n}\n\n/** Clears FID registration metadata; apps may mix legacy getToken() with FID register/unregister. */\nasync function removeFidRegistrationBestEffort(\n firebaseDependencies: FirebaseInternalDependencies\n): Promise<void> {\n try {\n await dbRemoveFidRegistration(firebaseDependencies);\n } catch {\n // Ignore.\n }\n}\n\nexport function notifyOnRegistered(\n messaging: MessagingService,\n fid: string\n): void {\n const handler = messaging.onRegisteredHandler;\n if (!handler) {\n return;\n }\n if (typeof handler === 'function') {\n handler(fid);\n } else {\n handler.next(fid);\n }\n}\n\nexport function notifyOnUnregistered(\n messaging: MessagingService,\n fid: string\n): void {\n const handler = messaging.onUnregisteredHandler;\n if (!handler) {\n return;\n }\n if (typeof handler === 'function') {\n handler(fid);\n } else {\n handler.next(fid);\n }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_VAPID_KEY } from '../util/constants';\nimport { MessagingService } from '../messaging-service';\n\nexport async function updateVapidKey(\n messaging: MessagingService,\n vapidKey?: string | undefined\n): Promise<void> {\n if (!!vapidKey) {\n messaging.vapidKey = vapidKey;\n } else if (!messaging.vapidKey) {\n messaging.vapidKey = DEFAULT_VAPID_KEY;\n }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SubscriptionOptions } from '../interfaces/registration-details';\nimport { MessagingService } from '../messaging-service';\nimport {\n base64ToArray,\n arrayToBase64\n} from '../helpers/array-base64-translator';\nimport { requestCreateRegistration } from './requests';\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\n\n/** Retries when CreateRegistration echoes an FID that does not match Installations.getId(). */\nconst FID_REGISTRATION_FID_MATCH_MAX_ATTEMPTS = 3;\n\n/**\n * For the new FID-based register path:\n * - Create (or refresh) an FCM Web registration in the backend via CreateRegistration.\n * - Use the FIS auth token produced by the installations instance (implicitly associated with FID).\n * - CreateRegistration must echo the installation in `name` (e.g.\n * `projects/{projectId}/registrations/{fid}`); it must match `expectedFid` from\n * Installations.getId(). On mismatch we refresh the auth token and retry, then fail with\n * `fid-registration-failed`.\n */\nexport async function registerFcmRegistrationWithFid(\n messaging: MessagingService,\n expectedFid: string\n): Promise<void> {\n const pushSubscription = await getPushSubscription(\n messaging.swRegistration!,\n messaging.vapidKey!\n );\n\n const subscriptionOptions: SubscriptionOptions = {\n vapidKey: messaging.vapidKey!,\n swScope: messaging.swRegistration!.scope,\n endpoint: pushSubscription.endpoint,\n auth: arrayToBase64(pushSubscription.getKey('auth')!),\n p256dh: arrayToBase64(pushSubscription.getKey('p256dh')!)\n };\n\n const installations = messaging.firebaseDependencies.installations;\n\n for (\n let attempt = 0;\n attempt < FID_REGISTRATION_FID_MATCH_MAX_ATTEMPTS;\n attempt++\n ) {\n const { responseFid } = await requestCreateRegistration(\n messaging.firebaseDependencies,\n subscriptionOptions\n );\n\n if (responseFid === expectedFid) {\n return;\n }\n // If CreateRegistration echoes an unexpected FID, the FIS auth token used for the request may\n // be stale relative to the installation the backend associates with the call. Force-refresh\n // the token before retrying so the next attempt uses credentials aligned with Installations.\n if (attempt < FID_REGISTRATION_FID_MATCH_MAX_ATTEMPTS - 1) {\n await installations.getToken(true);\n }\n }\n\n throw ERROR_FACTORY.create(ErrorCode.FID_REGISTRATION_FAILED, {\n errorInfo:\n 'CreateRegistration response FID does not match Firebase Installation ID'\n });\n}\n\nasync function getPushSubscription(\n swRegistration: ServiceWorkerRegistration,\n vapidKey: string\n): Promise<PushSubscription> {\n const subscription = await swRegistration.pushManager.getSubscription();\n if (subscription) {\n return subscription;\n }\n\n // Chrome/Firefox require applicationServerKey to be of type Uint8Array.\n return swRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n // `PushManager.subscribe` expects a `BufferSource`; `base64ToArray` produces a typed array.\n // Cast to satisfy the lib typing differences across TS DOM versions.\n applicationServerKey: base64ToArray(vapidKey) as unknown as BufferSource\n });\n}\n","/**\n * @license\n * Copyright 2026 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n IdChangeUnsubscribeFn,\n Installations,\n onIdChange\n} from '@firebase/installations';\nimport { register } from '../api/register';\nimport {\n dbGetFidRegistration,\n dbSetFidRegistration\n} from '../internals/idb-manager';\nimport { registerFcmRegistrationWithFid } from '../internals/register-fid';\nimport { notifyOnRegistered } from '../internals/token-manager';\nimport { MessagingService } from '../messaging-service';\nimport { updateVapidKey } from './updateVapidKey';\n\n/**\n * Re-runs FCM FID registration when push subscription keys change (e.g. `pushsubscriptionchange`\n * in the service worker). No-op if the app instance was never registered via `register()`.\n * Best-effort: callers should catch failures when permission or push may be unavailable.\n */\nexport async function refreshFidRegistrationIfStored(\n messaging: MessagingService\n): Promise<string | undefined> {\n const stored = await dbGetFidRegistration(\n messaging.firebaseDependencies\n ).catch(() => undefined);\n if (!stored) {\n return undefined;\n }\n\n await updateVapidKey(messaging, stored.vapidKey);\n\n const fid = await messaging.firebaseDependencies.installations.getId();\n await registerFcmRegistrationWithFid(messaging, fid);\n await dbSetFidRegistration(messaging.firebaseDependencies, {\n fid,\n lastRegisterTime: Date.now(),\n vapidKey: messaging.vapidKey\n });\n notifyOnRegistered(messaging, fid);\n return fid;\n}\n\n/**\n * When the Firebase Installation ID changes, re-run `register()` so FCM registration and\n * onRegistered run for the new FID. No-op if no onRegistered handler is set or the app\n * instance was never registered with FCM.\n */\nexport function subscribeFidChangeRegistration(\n messaging: MessagingService,\n installations: Installations\n): IdChangeUnsubscribeFn {\n return onIdChange(installations, () => {\n void (async () => {\n if (!messaging.onRegisteredHandler) {\n return;\n }\n const stored = await dbGetFidRegistration(messaging.firebaseDependencies);\n if (!stored) {\n return;\n }\n await register(messaging).catch(() => {\n // Best-effort: permission may be revoked or SW unavailable after FID rotation.\n });\n })();\n });\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MessagePayload } from '../interfaces/public-types';\nimport { MessagePayloadInternal } from '../interfaces/internal-message-payload';\n\nexport function externalizePayload(\n internalPayload: MessagePayloadInternal\n): MessagePayload {\n const payload: MessagePayload = {\n from: internalPayload.from,\n // eslint-disable-next-line camelcase\n collapseKey: internalPayload.collapse_key,\n // eslint-disable-next-line camelcase\n messageId: internalPayload.fcmMessageId\n } as MessagePayload;\n\n propagateNotificationPayload(payload, internalPayload);\n propagateDataPayload(payload, internalPayload);\n propagateFcmOptions(payload, internalPayload);\n\n return payload;\n}\n\nfunction propagateNotificationPayload(\n payload: MessagePayload,\n messagePayloadInternal: MessagePayloadInternal\n): void {\n if (!messagePayloadInternal.notification) {\n return;\n }\n\n payload.notification = {};\n\n const title = messagePayloadInternal.notification!.title;\n if (!!title) {\n payload.notification!.title = title;\n }\n\n const body = messagePayloadInternal.notification!.body;\n if (!!body) {\n payload.notification!.body = body;\n }\n\n const image = messagePayloadInternal.notification!.image;\n if (!!image) {\n payload.notification!.image = image;\n }\n\n const icon = messagePayloadInternal.notification!.icon;\n if (!!icon) {\n payload.notification!.icon = icon;\n }\n}\n\nfunction propagateDataPayload(\n payload: MessagePayload,\n messagePayloadInternal: MessagePayloadInternal\n): void {\n if (!messagePayloadInternal.data) {\n return;\n }\n\n payload.data = messagePayloadInternal.data as { [key: string]: string };\n}\n\nfunction propagateFcmOptions(\n payload: MessagePayload,\n messagePayloadInternal: MessagePayloadInternal\n): void {\n // fcmOptions.link value is written into notification.click_action. see more in b/232072111\n if (\n !messagePayloadInternal.fcmOptions &&\n !messagePayloadInternal.notification?.click_action\n ) {\n return;\n }\n\n payload.fcmOptions = {};\n\n const link =\n messagePayloadInternal.fcmOptions?.link ??\n messagePayloadInternal.notification?.click_action;\n\n if (!!link) {\n payload.fcmOptions!.link = link;\n }\n\n // eslint-disable-next-line camelcase\n const analyticsLabel = messagePayloadInternal.fcmOptions?.analytics_label;\n if (!!analyticsLabel) {\n payload.fcmOptions!.analyticsLabel = analyticsLabel;\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CONSOLE_CAMPAIGN_ID } from '../util/constants';\nimport { ConsoleMessageData } from '../interfaces/internal-message-payload';\n\nexport function isConsoleMessage(data: unknown): data is ConsoleMessageData {\n // This message has a campaign ID, meaning it was sent using the Firebase Console.\n return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** Returns a promise that resolves after given time passes. */\nexport function sleep(ms: number): Promise<void> {\n return new Promise<void>(resolve => {\n setTimeout(resolve, ms);\n });\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n DEFAULT_BACKOFF_TIME_MS,\n EVENT_MESSAGE_DELIVERED,\n FCM_LOG_SOURCE,\n LOG_INTERVAL_IN_MS,\n MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST,\n MAX_RETRIES,\n MessageType,\n SDK_PLATFORM_WEB\n} from '../util/constants';\nimport {\n FcmEvent,\n LogEvent,\n LogRequest,\n LogResponse,\n ComplianceData\n} from '../interfaces/logging-types';\n\nimport { MessagePayloadInternal } from '../interfaces/internal-message-payload';\nimport { MessagingService } from '../messaging-service';\n\nconst LOG_ENDPOINT = 'https://play.google.com/log?format=json_proto3';\n\n/** First flush ASAP (next timer turn); `_dispatchLogEvents` reschedules with `LOG_INTERVAL_IN_MS`. */\nconst INITIAL_LOG_FLUSH_DELAY_MS = 0;\n\nconst FCM_TRANSPORT_KEY = _mergeStrings(\n 'AzSCbw63g1R0nCw85jG8',\n 'Iaya3yLKwmgvh7cF0q4'\n);\n\nexport function startLoggingService(messaging: MessagingService): void {\n // Start only if not already scheduled/in-flight and there is work to do.\n if (\n messaging.logQueue.state === 'stopped' &&\n messaging.logEvents.length > 0\n ) {\n _processQueue(messaging, INITIAL_LOG_FLUSH_DELAY_MS);\n }\n}\n\n/** Clears queued Firelog events, cancels any pending flush timer, and stops the logging loop. */\nexport function stopLoggingServiceAndClearQueue(\n messaging: MessagingService\n): void {\n if (messaging.logQueue.state === 'scheduled') {\n clearTimeout(messaging.logQueue.timerId);\n }\n messaging.logQueue = { state: 'stopped' };\n messaging.logEvents = [];\n}\n\n/**\n *\n * @param messaging the messaging instance.\n * @param offsetInMs this method execute after `offsetInMs` elapsed .\n */\nexport function _processQueue(\n messaging: MessagingService,\n offsetInMs: number\n): void {\n if (messaging.logQueue.state === 'scheduled') {\n clearTimeout(messaging.logQueue.timerId);\n }\n messaging.logQueue = { state: 'stopped' };\n\n if (!messaging.deliveryMetricsExportedToBigQueryEnabled) {\n messaging.logEvents = [];\n return;\n }\n\n messaging.logQueue = {\n state: 'scheduled',\n timerId: setTimeout(async () => {\n // Mark in-flight so stageLog/startLoggingService won't schedule duplicates mid-dispatch.\n messaging.logQueue = { state: 'flushing' };\n\n if (!messaging.logEvents.length) {\n return _processQueue(messaging, LOG_INTERVAL_IN_MS);\n }\n\n await _dispatchLogEvents(messaging);\n }, offsetInMs)\n };\n}\n\nexport async function _dispatchLogEvents(\n messaging: MessagingService\n): Promise<void> {\n // Swap the queue to avoid losing events added during an in-flight dispatch.\n const eventsToSend = messaging.logEvents;\n messaging.logEvents = [];\n\n for (\n let i = 0, n = eventsToSend.length;\n i < n;\n i += MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST\n ) {\n const batch = eventsToSend.slice(\n i,\n i + MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST\n );\n if (!batch.length) {\n break;\n }\n\n const logRequest = _createLogRequest(batch);\n\n let retryCount = 0,\n response = {} as Response;\n\n do {\n try {\n response = await fetch(\n LOG_ENDPOINT.concat('&key=', FCM_TRANSPORT_KEY),\n {\n method: 'POST',\n body: JSON.stringify(logRequest)\n }\n );\n\n // don't retry on 200s or non retriable errors\n if (response.ok || (!response.ok && !isRetriableError(response))) {\n break;\n }\n\n if (!response.ok && isRetriableError(response)) {\n // rethrow to retry with quota\n throw new Error(\n 'a retriable Non-200 code is returned in fetch to Firelog endpoint. Retry'\n );\n }\n } catch (error) {\n const isLastAttempt = retryCount === MAX_RETRIES;\n if (isLastAttempt) {\n // existing the do-while interactive retry logic because retry quota has reached.\n break;\n }\n }\n\n let delayInMs: number;\n try {\n delayInMs = Number(\n ((await response.json()) as LogResponse).nextRequestWaitMillis\n );\n } catch (e) {\n delayInMs = DEFAULT_BACKOFF_TIME_MS;\n }\n\n await new Promise(resolve => setTimeout(resolve, delayInMs));\n\n retryCount++;\n } while (retryCount < MAX_RETRIES);\n }\n\n // Schedule next flush. If new events arrived during this dispatch, flush ASAP.\n _processQueue(\n messaging,\n messaging.logEvents.length ? INITIAL_LOG_FLUSH_DELAY_MS : LOG_INTERVAL_IN_MS\n );\n}\n\nfunction isRetriableError(response: Response): boolean {\n const httpStatus = response.status;\n\n return (\n httpStatus === 429 ||\n httpStatus === 500 ||\n httpStatus === 503 ||\n httpStatus === 504\n );\n}\n\nexport async function stageLog(\n messaging: MessagingService,\n internalPayload: MessagePayloadInternal\n): Promise<void> {\n const fcmEvent = createFcmEvent(\n internalPayload,\n await messaging.firebaseDependencies.installations.getId()\n );\n\n createAndEnqueueLogEvent(messaging, fcmEvent, internalPayload.productId);\n startLoggingService(messaging);\n}\n\nfunction createFcmEvent(\n internalPayload: MessagePayloadInternal,\n fid: string\n): FcmEvent {\n const fcmEvent = {} as FcmEvent;\n\n /* eslint-disable camelcase */\n // some fields should always be non-null. Still check to ensure.\n if (!!internalPayload.from) {\n fcmEvent.project_number = internalPayload.from;\n }\n\n if (!!internalPayload.fcmMessageId) {\n fcmEvent.message_id = internalPayload.fcmMessageId;\n }\n\n fcmEvent.instance_id = fid;\n\n if (!!internalPayload.notification) {\n fcmEvent.message_type = MessageType.DISPLAY_NOTIFICATION.toString();\n } else {\n fcmEvent.message_type = MessageType.DATA_MESSAGE.toString();\n }\n\n fcmEvent.sdk_platform = SDK_PLATFORM_WEB.toString();\n fcmEvent.package_name = self.origin.replace(/(^\\w+:|^)\\/\\//, '');\n\n if (!!internalPayload.collapse_key) {\n fcmEvent.collapse_key = internalPayload.collapse_key;\n }\n\n fcmEvent.event = EVENT_MESSAGE_DELIVERED.toString();\n\n if (!!internalPayload.fcmOptions?.analytics_label) {\n fcmEvent.analytics_label = internalPayload.fcmOptions?.analytics_label;\n }\n\n /* eslint-enable camelcase */\n return fcmEvent;\n}\n\nfunction createAndEnqueueLogEvent(\n messaging: MessagingService,\n fcmEvent: FcmEvent,\n productId: number\n): void {\n const logEvent = {} as LogEvent;\n\n /* eslint-disable camelcase */\n logEvent.event_time_ms = Math.floor(Date.now()).toString();\n logEvent.source_extension_json_proto3 = JSON.stringify({\n messaging_client_event: fcmEvent\n });\n\n if (!!productId) {\n logEvent.compliance_data = buildComplianceData(productId);\n }\n // eslint-disable-next-line camelcase\n\n messaging.logEvents.push(logEvent);\n}\n\nfunction buildComplianceData(productId: number): ComplianceData {\n const complianceData: ComplianceData = {\n privacy_context: {\n prequest: {\n origin_associated_product_id: productId\n }\n }\n };\n\n return complianceData;\n}\n\nexport function _createLogRequest(logEventQueue: LogEvent[]): LogRequest {\n const logRequest = {} as LogRequest;\n\n /* eslint-disable camelcase */\n logRequest.log_source = FCM_LOG_SOURCE.toString();\n logRequest.log_event = logEventQueue;\n /* eslint-enable camelcase */\n\n return logRequest;\n}\n\nexport function _mergeStrings(s1: string, s2: string): string {\n const resultArray = [];\n for (let i = 0; i < s1.length; i++) {\n resultArray.push(s1.charAt(i));\n if (i < s2.length) {\n resultArray.push(s2.charAt(i));\n }\n }\n\n return resultArray.join('');\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_VAPID_KEY, FCM_MSG } from '../util/constants';\nimport {\n MessagePayloadInternal,\n MessageType,\n NotificationPayloadInternal\n} from '../interfaces/internal-message-payload';\nimport {\n NotificationEvent,\n PushEvent,\n PushSubscriptionChangeEvent,\n ServiceWorkerGlobalScope,\n WindowClient\n} from '../util/sw-types';\nimport {\n getTokenInternal,\n revokeRegistrationInternal\n} from '../internals/token-manager';\n\nimport { MessagingService } from '../messaging-service';\nimport { dbGet, dbGetFidRegistration } from '../internals/idb-manager';\nimport { refreshFidRegistrationIfStored } from '../helpers/fid-change-registration';\nimport { externalizePayload } from '../helpers/externalizePayload';\nimport { isConsoleMessage } from '../helpers/is-console-message';\nimport { sleep } from '../helpers/sleep';\nimport { stageLog } from '../helpers/logToFirelog';\n\n// maxActions is an experimental property and not part of the official\n// TypeScript interface\n// https://developer.mozilla.org/en-US/docs/Web/API/Notification/maxActions\ninterface NotificationExperimental extends Notification {\n maxActions?: number;\n}\n\n// Let TS know that this is a service worker\ndeclare const self: ServiceWorkerGlobalScope;\n\nexport async function onSubChange(\n event: PushSubscriptionChangeEvent,\n messaging: MessagingService\n): Promise<void> {\n if (!messaging.swRegistration) {\n messaging.swRegistration = self.registration;\n }\n\n const { newSubscription } = event;\n if (!newSubscription) {\n // Subscription revoked: legacy token and FID register/unregister paths both flow through\n // revokeRegistrationInternal (server revoke + onUnregistered when applicable).\n await revokeRegistrationInternal(messaging);\n return;\n }\n\n const storedFid = await dbGetFidRegistration(\n messaging.firebaseDependencies\n ).catch(() => undefined);\n if (storedFid) {\n const fid = await refreshFidRegistrationIfStored(messaging).catch(() => {\n // Best-effort: push subscription may be unavailable after rotation.\n return undefined;\n });\n\n if (fid) {\n const clientList = await getClientList();\n if (hasVisibleClients(clientList)) {\n sendFidRegisteredToWindows(clientList, fid);\n }\n }\n return;\n }\n\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n await revokeRegistrationInternal(messaging);\n\n messaging.vapidKey =\n tokenDetails?.subscriptionOptions?.vapidKey ?? DEFAULT_VAPID_KEY;\n await getTokenInternal(messaging);\n}\n\nexport async function onPush(\n event: PushEvent,\n messaging: MessagingService\n): Promise<void> {\n const internalPayload = getMessagePayloadInternal(event);\n if (!internalPayload) {\n // Failed to get parsed MessagePayload from the PushEvent. Skip handling the push.\n return;\n }\n\n /*\n * Log to Firelog based on user consent. Rather than calling startLoggingService once when\n * deliveryMetricsExportedToBigQueryEnabled is toggled, we now call stageLog for every received push.\n * This ensures the first telemetry event is uploaded immediately upon enabling the flag, simplifying debugging.\n */\n if (messaging.deliveryMetricsExportedToBigQueryEnabled) {\n await stageLog(messaging, internalPayload);\n }\n\n // foreground handling: eventually passed to onMessage hook\n const clientList = await getClientList();\n if (hasVisibleClients(clientList)) {\n return sendMessagePayloadInternalToWindows(clientList, internalPayload);\n }\n\n // background handling: display if possible and pass to onBackgroundMessage hook\n if (!!internalPayload.notification) {\n await showNotification(wrapInternalPayload(internalPayload));\n }\n\n if (!messaging) {\n return;\n }\n\n if (!!messaging.onBackgroundMessageHandler) {\n const payload = externalizePayload(internalPayload);\n\n if (typeof messaging.onBackgroundMessageHandler === 'function') {\n await messaging.onBackgroundMessageHandler(payload);\n } else {\n messaging.onBackgroundMessageHandler.next(payload);\n }\n }\n}\n\nexport async function onNotificationClick(\n event: NotificationEvent\n): Promise<void> {\n const internalPayload: MessagePayloadInternal =\n event.notification?.data?.[FCM_MSG];\n\n if (!internalPayload) {\n return;\n } else if (event.action) {\n // User clicked on an action button. This will allow developers to act on action button clicks\n // by using a custom onNotificationClick listener that they define.\n return;\n }\n\n // Prevent other listeners from receiving the event\n event.stopImmediatePropagation();\n event.notification.close();\n\n // Note clicking on a notification with no link set will focus the Chrome's current tab.\n const link = getLink(internalPayload);\n if (!link) {\n return;\n }\n\n // FM should only open/focus links from app's origin.\n const url = new URL(link, self.location.href);\n const originUrl = new URL(self.location.origin);\n\n if (url.host !== originUrl.host) {\n return;\n }\n\n let client = await getWindowClient(url);\n\n if (!client) {\n client = await self.clients.openWindow(link);\n\n // Wait three seconds for the client to initialize and set up the message handler so that it\n // can receive the message.\n await sleep(3000);\n } else {\n client = await client.focus();\n }\n\n if (!client) {\n // Window Client will not be returned if it's for a third party origin.\n return;\n }\n\n internalPayload.messageType = MessageType.NOTIFICATION_CLICKED;\n internalPayload.isFirebaseMessaging = true;\n return client.postMessage(internalPayload);\n}\n\nfunction wrapInternalPayload(\n internalPayload: MessagePayloadInternal\n): NotificationPayloadInternal {\n const wrappedInternalPayload: NotificationPayloadInternal = {\n ...(internalPayload.notification as unknown as NotificationPayloadInternal)\n };\n\n // Put the message payload under FCM_MSG name so we can identify the notification as being an FCM\n // notification vs a notification from somewhere else (i.e. normal web push or developer generated\n // notification).\n wrappedInternalPayload.data = {\n [FCM_MSG]: internalPayload\n };\n\n return wrappedInternalPayload;\n}\n\nfunction getMessagePayloadInternal({\n data\n}: PushEvent): MessagePayloadInternal | null {\n if (!data) {\n return null;\n }\n\n try {\n return data.json();\n } catch (err) {\n // Not JSON so not an FCM message.\n return null;\n }\n}\n\n/**\n * @param url The URL to look for when focusing a client.\n * @return Returns an existing window client or a newly opened WindowClient.\n */\nasync function getWindowClient(url: URL): Promise<WindowClient | null> {\n const clientList = await getClientList();\n\n for (const client of clientList) {\n const clientUrl = new URL(client.url, self.location.href);\n\n if (url.host === clientUrl.host) {\n return client;\n }\n }\n\n return null;\n}\n\n/**\n * @returns If there is currently a visible WindowClient, this method will resolve to true,\n * otherwise false.\n */\nfunction hasVisibleClients(clientList: WindowClient[]): boolean {\n return clientList.some(\n client =>\n client.visibilityState === 'visible' &&\n // Ignore chrome-extension clients as that matches the background pages of extensions, which\n // are always considered visible for some reason.\n !client.url.startsWith('chrome-extension://')\n );\n}\n\nfunction sendMessagePayloadInternalToWindows(\n clientList: WindowClient[],\n internalPayload: MessagePayloadInternal\n): void {\n internalPayload.isFirebaseMessaging = true;\n internalPayload.messageType = MessageType.PUSH_RECEIVED;\n\n for (const client of clientList) {\n client.postMessage(internalPayload);\n }\n}\n\nfunction sendFidRegisteredToWindows(\n clientList: WindowClient[],\n fid: string\n): void {\n const payload = {\n isFirebaseMessaging: true,\n messageType: MessageType.FID_REGISTERED,\n fid\n };\n\n for (const client of clientList) {\n client.postMessage(payload);\n }\n}\n\nfunction getClientList(): Promise<WindowClient[]> {\n return self.clients.matchAll({\n type: 'window',\n includeUncontrolled: true\n // TS doesn't know that \"type: 'window'\" means it'll return WindowClient[]\n }) as Promise<WindowClient[]>;\n}\n\nfunction showNotification(\n notificationPayloadInternal: NotificationPayloadInternal\n): Promise<void> {\n // Note: Firefox does not support the maxActions property.\n // https://developer.mozilla.org/en-US/docs/Web/API/notification/maxActions\n const { actions } = notificationPayloadInternal;\n const { maxActions } = Notification as unknown as NotificationExperimental;\n if (actions && maxActions && actions.length > maxActions) {\n console.warn(\n `This browser only supports ${maxActions} actions. The remaining actions will not be displayed.`\n );\n }\n\n return self.registration.showNotification(\n /* title= */ notificationPayloadInternal.title ?? '',\n notificationPayloadInternal\n );\n}\n\nfunction getLink(payload: MessagePayloadInternal): string | null {\n // eslint-disable-next-line camelcase\n const link = payload.fcmOptions?.link ?? payload.notification?.click_action;\n if (link) {\n return link;\n }\n\n if (isConsoleMessage(payload.data)) {\n // Notification created in the Firebase Console. Redirect to origin.\n return self.location.origin;\n } else {\n return null;\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\nimport { FirebaseApp, FirebaseOptions } from '@firebase/app';\n\nimport { AppConfig } from '../interfaces/app-config';\nimport { FirebaseError } from '@firebase/util';\n\nexport function extractAppConfig(app: FirebaseApp): AppConfig {\n if (!app || !app.options) {\n throw getMissingValueError('App Configuration Object');\n }\n\n if (!app.name) {\n throw getMissingValueError('App Name');\n }\n\n // Required app config keys\n const configKeys: ReadonlyArray<keyof FirebaseOptions> = [\n 'projectId',\n 'apiKey',\n 'appId',\n 'messagingSenderId'\n ];\n\n const { options } = app;\n for (const keyName of configKeys) {\n if (!options[keyName]) {\n throw getMissingValueError(keyName);\n }\n }\n\n return {\n appName: app.name,\n projectId: options.projectId!,\n apiKey: options.apiKey!,\n appId: options.appId!,\n senderId: options.messagingSenderId!\n };\n}\n\nfunction getMissingValueError(valueName: string): FirebaseError {\n return ERROR_FACTORY.create(ErrorCode.MISSING_APP_CONFIG_VALUES, {\n valueName\n });\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp, _FirebaseService } from '@firebase/app';\nimport { MessagePayload, NextFn, Observer } from './interfaces/public-types';\n\nimport { FirebaseAnalyticsInternalName } from '@firebase/analytics-interop-types';\nimport { FirebaseInternalDependencies } from './interfaces/internal-dependencies';\nimport { LogEvent } from './interfaces/logging-types';\nimport { Provider } from '@firebase/component';\nimport {\n _FirebaseInstallationsInternal,\n IdChangeUnsubscribeFn\n} from '@firebase/installations';\nimport { extractAppConfig } from './helpers/extract-app-config';\n\nexport class MessagingService implements _FirebaseService {\n readonly app!: FirebaseApp;\n readonly firebaseDependencies!: FirebaseInternalDependencies;\n\n swRegistration?: ServiceWorkerRegistration;\n vapidKey?: string;\n // logging is only done with end user consent. Default to false.\n deliveryMetricsExportedToBigQueryEnabled: boolean = false;\n\n onBackgroundMessageHandler:\n | NextFn<MessagePayload>\n | Observer<MessagePayload>\n | null = null;\n\n onMessageHandler: NextFn<MessagePayload> | Observer<MessagePayload> | null =\n null;\n\n /** Observer for the event that the app instance is registered with FCM via Firebase Installation ID (FID). */\n onRegisteredHandler: NextFn<string> | Observer<string> | null = null;\n\n /** Observer for the event that the app instance is unregistered from FCM (FID no longer active). */\n onUnregisteredHandler: NextFn<string> | Observer<string> | null = null;\n\n /**\n * Serializes the FID get + compare + notify step so concurrent register() calls\n * do not race each other.\n */\n _registerNotifyChain: Promise<void> = Promise.resolve();\n\n /** Unsubscribe from Installations `onIdChange` when messaging is deleted. */\n _fidChangeUnsubscribe: IdChangeUnsubscribeFn | null = null;\n\n logEvents: LogEvent[] = [];\n /**\n * Single source of truth for the logging loop lifecycle.\n *\n * `scheduled` holds the active timer id; `flushing` indicates an async dispatch\n * is in progress (prevents duplicate starts); `stopped` means idle.\n */\n logQueue: LogQueueState = { state: 'stopped' };\n\n constructor(\n app: FirebaseApp,\n installations: _FirebaseInstallationsInternal,\n analyticsProvider: Provider<FirebaseAnalyticsInternalName>\n ) {\n const appConfig = extractAppConfig(app);\n this.firebaseDependencies = {\n app,\n appConfig,\n installations,\n analyticsProvider\n };\n }\n\n _delete(): Promise<void> {\n if (this._fidChangeUnsubscribe) {\n this._fidChangeUnsubscribe();\n this._fidChangeUnsubscribe = null;\n }\n if (this.logQueue.state === 'scheduled') {\n clearTimeout(this.logQueue.timerId);\n }\n this.logQueue = { state: 'stopped' };\n return Promise.resolve();\n }\n}\n\nexport type LogQueueState =\n | { state: 'stopped' }\n | { state: 'scheduled'; timerId: ReturnType<typeof setTimeout> }\n | { state: 'flushing' };\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Component,\n ComponentContainer,\n ComponentType,\n InstanceFactory\n} from '@firebase/component';\nimport {\n onNotificationClick,\n onPush,\n onSubChange\n} from '../listeners/sw-listeners';\n\nimport { GetTokenOptions, RegisterOptions } from '../interfaces/public-types';\nimport { MessagingInternal } from '@firebase/messaging-interop-types';\nimport { MessagingService } from '../messaging-service';\nimport { ServiceWorkerGlobalScope } from '../util/sw-types';\nimport { _registerComponent, registerVersion } from '@firebase/app';\nimport { getToken } from '../api/getToken';\nimport { register } from '../api/register';\nimport { subscribeFidChangeRegistration } from './fid-change-registration';\nimport { messageEventListener } from '../listeners/window-listener';\n\nimport { name, version } from '../../package.json';\n\nconst WindowMessagingFactory: InstanceFactory<'messaging'> = (\n container: ComponentContainer\n) => {\n const messaging = new MessagingService(\n container.getProvider('app').getImmediate(),\n container.getProvider('installations-internal').getImmediate(),\n container.getProvider('analytics-internal')\n );\n\n navigator.serviceWorker.addEventListener('message', e =>\n messageEventListener(messaging as MessagingService, e)\n );\n\n messaging._fidChangeUnsubscribe = subscribeFidChangeRegistration(\n messaging as MessagingService,\n container.getProvider('installations').getImmediate()\n );\n\n return messaging;\n};\n\nconst WindowMessagingInternalFactory: InstanceFactory<'messaging-internal'> = (\n container: ComponentContainer\n) => {\n const messaging = container\n .getProvider('messaging')\n .getImmediate() as MessagingService;\n\n const messagingInternal: MessagingInternal = {\n getToken: (options?: GetTokenOptions) => getToken(messaging, options),\n register: (options?: RegisterOptions) => register(messaging, options)\n };\n\n return messagingInternal;\n};\n\ndeclare const self: ServiceWorkerGlobalScope;\nconst SwMessagingFactory: InstanceFactory<'messaging'> = (\n container: ComponentContainer\n) => {\n const messaging = new MessagingService(\n container.getProvider('app').getImmediate(),\n container.getProvider('installations-internal').getImmediate(),\n container.getProvider('analytics-internal')\n );\n\n self.addEventListener('push', e => {\n e.waitUntil(onPush(e, messaging as MessagingService));\n });\n self.addEventListener('pushsubscriptionchange', e => {\n e.waitUntil(onSubChange(e, messaging as MessagingService));\n });\n self.addEventListener('notificationclick', e => {\n e.waitUntil(onNotificationClick(e));\n });\n\n return messaging;\n};\n\nexport function registerMessagingInWindow(): void {\n _registerComponent(\n new Component('messaging', WindowMessagingFactory, ComponentType.PUBLIC)\n );\n\n _registerComponent(\n new Component(\n 'messaging-internal',\n WindowMessagingInternalFactory,\n ComponentType.PRIVATE\n )\n );\n\n registerVersion(name, version);\n // BUILD_TARGET will be replaced by values like esm, cjs, etc during the compilation\n registerVersion(name, version, '__BUILD_TARGET__');\n}\n\n/**\n * The messaging instance registered in sw is named differently than that of in client. This is\n * because both `registerMessagingInWindow` and `registerMessagingInSw` would be called in\n * `messaging-compat` and component with the same name can only be registered once.\n */\nexport function registerMessagingInSw(): void {\n _registerComponent(\n new Component('messaging-sw', SwMessagingFactory, ComponentType.PUBLIC)\n );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n areCookiesEnabled,\n isIndexedDBAvailable,\n validateIndexedDBOpenable\n} from '@firebase/util';\n\n/**\n * Checks if all required APIs exist in the browser.\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nexport async function isWindowSupported(): Promise<boolean> {\n try {\n // This throws if open() is unsupported, so adding it to the conditional\n // statement below can cause an uncaught error.\n await validateIndexedDBOpenable();\n } catch (e) {\n return false;\n }\n // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n // instantiating phase, informing the developers to import/call isSupported for special handling.\n return (\n typeof window !== 'undefined' &&\n isIndexedDBAvailable() &&\n areCookiesEnabled() &&\n 'serviceWorker' in navigator &&\n 'PushManager' in window &&\n 'Notification' in window &&\n 'fetch' in window &&\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n PushSubscription.prototype.hasOwnProperty('getKey')\n );\n}\n\n/**\n * Checks whether all required APIs exist within SW Context\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nexport async function isSwSupported(): Promise<boolean> {\n // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n // instantiating phase, informing the developers to import/call isSupported for special handling.\n return (\n isIndexedDBAvailable() &&\n (await validateIndexedDBOpenable()) &&\n 'PushManager' in self &&\n 'Notification' in self &&\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n PushSubscription.prototype.hasOwnProperty('getKey')\n );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\n\nimport {\n MessagePayload,\n NextFn,\n Observer,\n Unsubscribe\n} from '../interfaces/public-types';\nimport { MessagingService } from '../messaging-service';\n\nexport function onBackgroundMessage(\n messaging: MessagingService,\n nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>\n): Unsubscribe {\n if (self.document !== undefined) {\n throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_SW);\n }\n\n messaging.onBackgroundMessageHandler = nextOrObserver;\n\n return () => {\n messaging.onBackgroundMessageHandler = null;\n };\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NextFn, Observer, Unsubscribe } from '../interfaces/public-types';\nimport { MessagingService } from '../messaging-service';\n\n/**\n * Subscribes to an event that the app instance is registered with FCM via Firebase Installation ID (FID).\n * Use the FID passed to the callback to upload it to your application server.\n *\n * @param messaging - The {@link MessagingService} instance.\n * @param nextOrObserver - A function or observer object called when an FID is registered.\n * @returns Unsubscribe function to stop listening.\n */\nexport function onRegistered(\n messaging: MessagingService,\n nextOrObserver: NextFn<string> | Observer<string>\n): Unsubscribe {\n messaging.onRegisteredHandler = nextOrObserver;\n\n return () => {\n if (messaging.onRegisteredHandler === nextOrObserver) {\n messaging.onRegisteredHandler = null;\n }\n };\n}\n","/**\n * @license\n * Copyright 2026 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NextFn, Observer, Unsubscribe } from '../interfaces/public-types';\nimport { MessagingService } from '../messaging-service';\n\n/**\n * Subscribes to an event that the app instance is unregistered from FCM so the FID is no longer active.\n * Use this to notify your backend to remove this FID to prevent 404 errors on send.\n *\n * @param messaging - The {@link MessagingService} instance.\n * @param nextOrObserver - A function or observer object called with the unregistered FID.\n * @returns Unsubscribe function to stop listening.\n */\nexport function onUnregistered(\n messaging: MessagingService,\n nextOrObserver: NextFn<string> | Observer<string>\n): Unsubscribe {\n messaging.onUnregisteredHandler = nextOrObserver;\n\n return () => {\n if (messaging.onUnregisteredHandler === nextOrObserver) {\n messaging.onUnregisteredHandler = null;\n }\n };\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n startLoggingService,\n stopLoggingServiceAndClearQueue\n} from '../helpers/logToFirelog';\nimport { Messaging } from '../interfaces/public-types';\nimport { MessagingService } from '../messaging-service';\n\nexport function _setDeliveryMetricsExportedToBigQueryEnabled(\n messaging: Messaging,\n enable: boolean\n): void {\n const messagingService = messaging as MessagingService;\n messagingService.deliveryMetricsExportedToBigQueryEnabled = enable;\n if (enable) {\n startLoggingService(messagingService);\n } else {\n stopLoggingServiceAndClearQueue(messagingService);\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from './util/errors';\nimport { FirebaseApp, _getProvider, getApp } from '@firebase/app';\nimport {\n GetTokenOptions,\n MessagePayload,\n Messaging,\n RegisterOptions\n} from './interfaces/public-types';\nimport {\n NextFn,\n Observer,\n Unsubscribe,\n getModularInstance\n} from '@firebase/util';\nimport { isSwSupported, isWindowSupported } from './api/isSupported';\n\nimport { MessagingService } from './messaging-service';\nimport { deleteToken as _deleteToken } from './api/deleteToken';\nimport { getToken as _getToken } from './api/getToken';\nimport { onBackgroundMessage as _onBackgroundMessage } from './api/onBackgroundMessage';\nimport { onMessage as _onMessage } from './api/onMessage';\nimport { onRegistered as _onRegistered } from './api/onRegistered';\nimport { onUnregistered as _onUnregistered } from './api/onUnregistered';\nimport { register as _register } from './api/register';\nimport { unregister as _unregister } from './api/unregister';\nimport { _setDeliveryMetricsExportedToBigQueryEnabled } from './api/setDeliveryMetricsExportedToBigQueryEnabled';\n\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nexport function getMessagingInWindow(app: FirebaseApp = getApp()): Messaging {\n // Conscious decision to make this async check non-blocking during the messaging instance\n // initialization phase for performance consideration. An error would be thrown latter for\n // developer's information. Developers can then choose to import and call `isSupported` for\n // special handling.\n isWindowSupported().then(\n isSupported => {\n // If `isWindowSupported()` resolved, but returned false.\n if (!isSupported) {\n throw ERROR_FACTORY.create(ErrorCode.UNSUPPORTED_BROWSER);\n }\n },\n _ => {\n // If `isWindowSupported()` rejected.\n throw ERROR_FACTORY.create(ErrorCode.INDEXED_DB_UNSUPPORTED);\n }\n );\n return _getProvider(getModularInstance(app), 'messaging').getImmediate();\n}\n\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nexport function getMessagingInSw(app: FirebaseApp = getApp()): Messaging {\n // Conscious decision to make this async check non-blocking during the messaging instance\n // initialization phase for performance consideration. An error would be thrown latter for\n // developer's information. Developers can then choose to import and call `isSupported` for\n // special handling.\n isSwSupported().then(\n isSupported => {\n // If `isSwSupported()` resolved, but returned false.\n if (!isSupported) {\n throw ERROR_FACTORY.create(ErrorCode.UNSUPPORTED_BROWSER);\n }\n },\n _ => {\n // If `isSwSupported()` rejected.\n throw ERROR_FACTORY.create(ErrorCode.INDEXED_DB_UNSUPPORTED);\n }\n );\n return _getProvider(getModularInstance(app), 'messaging-sw').getImmediate();\n}\n\n/**\n * Subscribes the {@link Messaging} instance to push notifications. Returns a Firebase Cloud\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\n * instance.\n *\n * If notification permission isn't already granted, this method asks the user for permission. The\n * returned promise rejects if the user does not allow the app to show notifications.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param options - Provides an optional vapid key and an optional service worker registration.\n *\n * @returns The promise resolves with an FCM registration token.\n *\n * @deprecated Use {@link register} together with {@link onRegistered} for Firebase\n * Installation ID-based messaging instead of retrieving an FCM registration token with this API.\n *\n * @public\n */\nexport async function getToken(\n messaging: Messaging,\n options?: GetTokenOptions\n): Promise<string> {\n messaging = getModularInstance(messaging);\n return _getToken(messaging as MessagingService, options);\n}\n\n/**\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\n * the {@link Messaging} instance from the push subscription.\n *\n * If there is no legacy registration token but the client has FID-based registration metadata\n * (from {@link register}), this deletes that registration on the server, clears local metadata, and\n * invokes {@link onUnregistered} with the removed FID when successful.\n *\n * @param messaging - The {@link Messaging} instance.\n *\n * @returns The promise resolves when the token has been successfully deleted.\n *\n * @deprecated Use {@link onUnregistered} to observe when the client is no longer\n * registered and update your backend accordingly, instead of explicitly deleting the\n * registration token with this API.\n *\n * @public\n */\nexport function deleteToken(messaging: Messaging): Promise<boolean> {\n messaging = getModularInstance(messaging);\n return _deleteToken(messaging as MessagingService);\n}\n\n/**\n * When a push message is received and the user is currently on a page for your origin, the\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\n * the push message.\n *\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined,\n * is called when a message is received and the user is currently viewing your page.\n * @returns To stop listening for messages execute this returned function.\n *\n * @public\n */\nexport function onMessage(\n messaging: Messaging,\n nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>\n): Unsubscribe {\n messaging = getModularInstance(messaging);\n return _onMessage(messaging as MessagingService, nextOrObserver);\n}\n\n/**\n * Called when a message is received while the app is in the background. An app is considered to be\n * in the background if no active window is displayed.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined, is called when a\n * message is received and the app is currently in the background.\n *\n * @returns To stop listening for messages execute this returned function.\n *\n * @public\n */\nexport function onBackgroundMessage(\n messaging: Messaging,\n nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>\n): Unsubscribe {\n messaging = getModularInstance(messaging);\n return _onBackgroundMessage(messaging as MessagingService, nextOrObserver);\n}\n\n/**\n * Registers the app instance with FCM using its Firebase Installation ID (FID). The FID is\n * delivered via the {@link onRegistered} callback, not as a return value. Call this to establish\n * an FID-based identity; once {@link onRegistered} provides an FID, instruct your backend to\n * remove any legacy token previously associated with this instance. The backend send API\n * supports FID as a target.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param options - Optional. VAPID key and/or service worker registration (same as getToken).\n * @returns Promise that resolves when registration has been initiated; FID is delivered via onRegistered.\n *\n * @public\n */\nexport async function register(\n messaging: Messaging,\n options?: RegisterOptions\n): Promise<void> {\n messaging = getModularInstance(messaging);\n return _register(messaging as MessagingService, options);\n}\n\n/**\n * Unregisters the app instance from FCM by deleting its FID-based registration.\n * On success, triggers {@link onUnregistered} (if registered) with the unregistered FID.\n *\n * @param messaging - The {@link Messaging} instance.\n *\n * @public\n */\nexport async function unregister(messaging: Messaging): Promise<void> {\n messaging = getModularInstance(messaging);\n return _unregister(messaging as MessagingService);\n}\n\n/**\n * Subscribes to an event that the app instance is registered with FCM via Firebase Installation ID (FID).\n * Use the FID passed to the callback to upload it to your application server. When you receive an FID\n * after calling {@link register}, instruct your backend to remove any legacy token for this instance.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - A function or observer object called when an FID is registered.\n * @returns Unsubscribe function to stop listening.\n *\n * @public\n */\nexport function onRegistered(\n messaging: Messaging,\n nextOrObserver: NextFn<string> | Observer<string>\n): Unsubscribe {\n messaging = getModularInstance(messaging);\n return _onRegistered(messaging as MessagingService, nextOrObserver);\n}\n\n/**\n * Subscribes to an event that the app instance is unregistered from FCM (FID no longer active).\n * Use this to notify your backend to remove this FID to prevent 404 errors on send.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - A function or observer object called with the unregistered FID.\n * @returns Unsubscribe function to stop listening.\n *\n * @public\n */\nexport function onUnregistered(\n messaging: Messaging,\n nextOrObserver: NextFn<string> | Observer<string>\n): Unsubscribe {\n messaging = getModularInstance(messaging);\n return _onUnregistered(messaging as MessagingService, nextOrObserver);\n}\n\n/**\n * Enables or disables Firebase Cloud Messaging message delivery metrics export to BigQuery. By\n * default, message delivery metrics are not exported to BigQuery. Use this method to enable or\n * disable the export at runtime.\n *\n * @param messaging - The `FirebaseMessaging` instance.\n * @param enable - Whether Firebase Cloud Messaging should export message delivery metrics to\n * BigQuery.\n *\n * @public\n */\nexport function experimentalSetDeliveryMetricsExportedToBigQueryEnabled(\n messaging: Messaging,\n enable: boolean\n): void {\n messaging = getModularInstance(messaging);\n return _setDeliveryMetricsExportedToBigQueryEnabled(messaging, enable);\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport '@firebase/installations';\n\nimport { Messaging } from './interfaces/public-types';\nimport { registerMessagingInSw } from './helpers/register';\n\nexport * from './interfaces/public-types';\nexport {\n onBackgroundMessage,\n onRegistered,\n onUnregistered,\n getMessagingInSw as getMessaging,\n experimentalSetDeliveryMetricsExportedToBigQueryEnabled\n} from './api';\nexport { isSwSupported as isSupported } from './api/isSupported';\n\ndeclare module '@firebase/component' {\n interface NameServiceMapping {\n 'messaging-sw': Messaging;\n }\n}\n\nregisterMessagingInSw();\n"],"names":["MessageType","fcmSdkVersion","getPushSubscription","onBackgroundMessage","onRegistered","onUnregistered","_onBackgroundMessage","_onRegistered","_onUnregistered"],"mappings":"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"}
|