To review release notes for the Firebase console and for other Firebase
platforms and related SDKs, refer to the
[Firebase Release Notes](https://firebase.google.com/support/releases.md.txt).

## Version 13.2.0 - October 30, 2026

### Crashlytics

- First release of the Crashlytics SDK for public preview.

### Authentication

- Updated the on-demand ID token expiration buffer
  (`Buffer.TOKEN_REFRESH`) from 30 seconds to 5 minutes to match
  `User.getIdToken()` documentation and the proactive refresh offset. See
  [GitHub Issue #10530](https://github.com/firebase/firebase-js-sdk/issues/10530).

- Fixed an unhandled exception when a popup or redirect operation
  (for example, `signInWithPopup`) is cancelled by a second call before the
  first operation finishes initializing.

- Fixed an unhandled promise rejection during initial IndexedDB cache
  population if the page navigates away or is backgrounded while loading.

- Fixed an uncatchable unhandled promise rejection when background
  reCAPTCHA Enterprise token verification fails during
  `initializeRecaptchaConfig` or `signInWithPhoneNumber`.

### Cloud Firestore

- Graduated Pipeline Search from Public Preview to GA.

## Version 13.1.0 - October 21, 2026

### Authentication

- Fixed an issue that caused transient server errors (e.g., HTTP 5xx UNAVAILABLE) by clearing the persisted user session during Auth initialization only when the initial user reload fails with a user invalidation error (`auth/user-token-expired` or `auth/user-disabled`). See [GitHub Issue #10438](https://github.com/firebase/firebase-js-sdk/issues/10438).

### Cloud Firestore

- Added DML stages (`delete`, `update`, `insert`, `upsert`) and the `literals` source stage to Pipelines, and added the `atomic` option to `PipelineExecuteOptions` for executing a pipeline in a single transaction.

## Version 13.0.0 - October 7, 2026

### AI Logic

- **Breaking change** : Refactored
  `TemplateGenerativeModel.generateContent` and
  `TemplateGenerativeModel.generateContentStream` to accept a unified
  `TemplateRequest` object (`{ templateId, templateVariables, toolConfig? }`) as
  the first parameter, and made `templateVariables` required in both
  `TemplateRequest` and `StartTemplateChatParams`.

- **Breaking change** : Removed the previously deprecated
  `VertexAIBackend` (and `BackendType.VERTEX_AI`).
  Use `AgentPlatformBackend` (and `BackendType.AGENT_PLATFORM`) instead.

  The only difference for `AgentPlatformBackend` is the default
  [location for accessing the model](https://firebase.google.com/docs/ai-logic/locations.md.txt?api=vertex).
  The default location for `AgentPlatformBackend` is `global`, whereas the
  default location for `VertexAIBackend` was `us-central1`. To use `us-central1`
  with `AgentPlatformBackend`, specify
  `getAI(app, { backend: new AgentPlatformBackend('us-central1') })` when
  initializing the SDK. However, note that most new Gemini models do not
  support `us-central1`.
- **Breaking change** : Updated the default hybrid in-cloud model to
  `gemini-3.5-flash-lite`.

- **Breaking change** : Removed previously deprecated APIs, including
  `AI.location` (use `AI.backend.location`),
  `LiveSession.sendMediaChunks()` and `LiveSession.sendMediaStream()` (use
  `sendTextRealtime()`, `sendAudioRealtime()`, and `sendVideoRealtime()`),
  `LanguageModelCreateCoreOptions.topK` and
  `LanguageModelCreateCoreOptions.temperature`, `GoogleMaps.enableWidget`,
  `GroundingMetadata.retrievalQueries` (use `groundingSupports`), and
  `CountTokensResponse.totalBillableCharacters` (use `totalTokens`).

- **Breaking change** : Refactored `Part` into a discriminated union
  with explicit `type` properties, introduced `UnknownPart` for raw wire and
  user-provided inputs, stripped `type` discriminators on wire egress, and
  ensured defensive deep copying for chat history.

- **Breaking change** : Exported a `ChatSession` interface instead of
  the `ChatSession` class.

- Deprecated `candidateCount`, `temperature`, `topP`, `topK`,
  `presencePenalty`, and `frequencyPenalty` in both `GenerationConfig` and
  `LiveGenerationConfig`. These parameters are unsupported in Gemini 3.x and
  later models.

### Cloud Firestore

- Added support for BSON types.

- Updated `UpdateData<T>` to allow indexed types or `Record<X, T>` for
  `T`. See
  [GitHub issue #7813](https://github.com/firebase/firebase-js-sdk/issues/7813)
  and
  [GitHub issue #10283](https://github.com/firebase/firebase-js-sdk/issues/10283).

- Added the `Temporal` namespace declaration to `global_index.d.ts`.

### Remote Config

- Suppressed false-positive `CONFIG_UPDATE_STREAM_ERROR` events emitted by `onConfigUpdated` when the application enters the background, stopped recording a connection backoff penalty for these expected closes, and ensured reconnection if the application returns to the foreground before the connection finishes closing. See [GitHub issue #9426](https://github.com/firebase/firebase-js-sdk/issues/9426).

## Version 12.19.0 - September 9, 2026

### AI Logic

- Fixed an issue where the SDK hardcoded an invalid `function` role,
  causing 400 errors during function calling on newer Gemini models like `gemini-3.6-flash`.

- Fixed client-side validation logic that incorrectly blocked
  `text/x.enum` when `responseSchema` or `responseJsonSchema` was provided.
  The SDK now correctly accepts both `application/json` and `text/x.enum` for
  structured outputs.

### Authentication

- Allowed IndexedDB persistence reconnection on demand after
  `pagehide` events, fixing "Database is closing" errors during `signInWithPopup`
  authentication on iPadOS and iOS Safari. See
  [GitHub issue #10318](https://github.com/firebase/firebase-js-sdk/issues/10318).

- Added a graceful fallback to in-memory persistence when persistence
  initialization fails or storage is inaccessible, preventing initialization
  deadlocks and ensuring `authStateReady()` resolves. See
  [GitHub issue #10311](https://github.com/firebase/firebase-js-sdk/issues/10311).

- Wrapped storage and persistence errors in `FirebaseError`
  (`auth/internal-error`) during current user updates, ensuring `error.code` is
  always defined and attaching the underlying exception under
  `error.customData.originalError`.

### Cloud Firestore

- Added support for conversion and serialization between
  `Temporal.Instant` and Firestore's `Timestamp`.

- Fixed an issue where fetch connection error messages were displayed
  as undefined.

## Version 12.18.0 - August 19, 2026

- Updated a number of top-level `devDependencies`, including some that may affect the build bundle.

### AI Logic

- Imagen methods and types have been removed due to Imagen models
  being shut down. As a replacement, you can
  [migrate your apps to use Gemini Image models (the "Nano Banana" models)](https://firebase.google.com/docs/ai-logic/imagen-models-migration.md.txt).

- Fixed incorrect detection of `LanguageModel` that prevented usage
  of on-device models in Chrome Extensions.

### Cloud Functions for Firebase Client SDK

- Added more details to `FunctionsError`. Added HTTP status code to the `message` field and add `url` to `customData`.

### App Check

- Updated debug token log message to include Firebase CLI commands, Firebase Console registration link, and debug token guide.

### Authentication

- Fixed an issue where `signInWithPopup` and other background tab operations failed with the error "Database is closing/hidden". See [GitHub issue #10264](https://github.com/firebase/firebase-js-sdk/issues/10264).

### SQL Connect

- Updated the WebSocket URL path for SQL Connect server affinity,
  to improve server resource usage efficiency and performance.

- Fixed an issue preventing App Check tokens from being properly
  recognized when sent in Firebase SQL Connect Realtime requests.

### Cloud Firestore

- Fixed an issue where the cross-database document reference log named the referenced document rather than the document that contains the reference.

## Version 12.17.1 - August 4, 2026

### Realtime Database

- Fixed a bug that caused an error for users of the Firebase Admin Node.js SDK during npm install, as the Firebase Admin Node.js SDK has a dependency on the `@firebase/database-compat` package.

### SQL Connect

- Added the `X-Client-Version` request header to enable metrics collection in Cloud Monitoring.

## Version 12.17.0 - July 30, 2026

- Added a more detailed error when `initializeApp()` is called
  a second time with different options or config. The new error prints the
  new and previous configs to make it easier to identify the difference.

- Added `@firebase/app` as a `peerDependency` of `compat` packages.
  This may address some errors and warnings from modern package managers such as
  pnpm and Yarn PnP.

### AI Logic

- Added support for text-to-speech capabilities (both single- and
  multi-speaker configurations) for non-Live API models (for example, Gemini
  TTS models).

- Deprecated `VertexAIBackend` in favor of `AgentPlatformBackend`
  to reflect the renaming of Vertex AI to Gemini Enterprise Agent Platform.

  The only difference for `AgentPlatformBackend` is the default
  [location for accessing the model](https://firebase.google.com/docs/ai-logic/locations.md.txt?api=vertex).
  The default location for `AgentPlatformBackend` is `global`, whereas the
  default location for `VertexAIBackend` is `us-central1`. To use `us-central1`
  with `AgentPlatformBackend`, specify
  `getAI(app, { backend: new AgentPlatformBackend('us-central1') })` when
  initializing the SDK. However, note that most new Gemini models do not
  support `us-central1`.

### App Check

- Removed ability to call `initializeAppCheck()` without a `provider`.

### Cloud Firestore

- Changed the HTTP/2 flow control window size from 64 KB to 256 KB,
  and added a `grpcFlowControlWindow` configuration option to
  `FirestoreSettings`. This change is only applicable to Node.js environments.

- Fixed a ReDoS vulnerability in `FirebaseError` template replacement.

## Version 12.16.0 - July 9, 2026

### Remote Config

- Added `FirebaseRolloutMetadata` to support realtime updates for rollouts.

## Version 12.15.0 - June 16, 2026

### AI Logic

- Fixed a bug where `systemInstruction` text strings passed to
  `startChat()` caused an error when making a request. See
  [GitHub issue #9006](https://github.com/firebase/firebase-js-sdk/issues/9006).

- Deprecated `GoogleMaps.enableWidget`, following the announcement
  by the Grounding for Google Maps service.

### App Check

- Added ability to call `initializeAppCheck()` without a provider.
  If no provider is passed to `initializeAppCheck()`, App Check will attempt
  to initialize with a `ReCaptchaEnterpriseProvider` using the site key found
  in the `recaptchaSiteKey` field of the Firebase project config passed to
  `initializeApp()`.

  > [!NOTE]
  > **Note:** Backend support for this capability is not yet available, but it's coming soon.

- Fixed a bug that caused a conflict between Authentication and
  App Check when both were using reCAPTCHA Enterprise. See
  [GitHub issue #9405](https://github.com/firebase/firebase-js-sdk/issues/9405).

### Authentication

- Fixed a bug that caused a conflict between Authentication and
  App Check when both were using reCAPTCHA Enterprise. See
  [GitHub issue #9405](https://github.com/firebase/firebase-js-sdk/issues/9405).

- Updated referrer policy for Authentication API requests from `no-referrer`
  to `strict-origin-when-cross-origin` to support API keys restricted by HTTP
  Referrer.

### Remote Config

- Fixed a bug where a parameter key would not be detected as updated when an experiment was added whose variant value matches the default value. This caused some experiments to not start. See [GitHub PR #10000](https://github.com/firebase/firebase-js-sdk/pull/10000).

## Version 12.14.0 - May 28, 2026

### AI Logic

- The hybrid inference feature using the Chrome Prompt API is now
  generally available.

- Added `initializeDeviceModel()` method, which must be called
  explicitly to initialize the on-device model before making any on-device
  inference calls.

- Fixed a bug that caused `ChatSession.sendMessageStream()` and
  `TemplateChatSession.sendMessageStream()` to send duplicate user turns in
  the request.

### Cloud Firestore

- Added `minimum` and `maximum` `FieldValue` operations.

- Improved robustness and logging in query listen stream creation
  and re-creation. See
  [GitHub PR #9985](https://github.com/firebase/firebase-js-sdk/pull/9985).

### Cloud Messaging

- Added new API for creating and deleting Cloud Messaging registration.

### App Check

- Fixed a bug where `getLimitedUseToken()` did not correctly get a limited use token because it did not send the `limited_use` param. This bug did not affect usage with custom backends but may have affected apps using limited use tokens in AI Logic.

### Authentication

- Fixed a bug that caused timeouts in browser extension environments. See [GitHub Issue #9732](https://github.com/firebase/firebase-js-sdk/issues/9732).

### SQL Connect

- Eliminated the 1-minute delay before closing idle backend connections to save resources.

### Remote Config

- Fix a bug where the client did not detect when an experiment had stopped. See [GitHub PR #9981](https://github.com/firebase/firebase-js-sdk/pull/9981).

## Version 12.13.0 - May 7, 2026

### AI Logic

- Added support for Grounding with Google Maps.
- Added `LiveSession.resumeSession()` to allow resuming a previous `LiveSession`.
- Added `contextWindowCompression` configuration to `LiveGenerationConfig`.
- Added support for `ImageConfig` (aspect ratio and size).
- Expanded FinishReason response values to align them with the values the currently supported models may return.

### SQL Connect

- Hardened the Firebase SQL Connect streaming transport with intelligent reconnection, query de-duplication, and resume optimizations.

### Cloud Firestore

- Added search stage support for `languageCode`, `offset`, `limit`,
  and `retrievalDepth`.

- Fixed a race condition that caused "ca9: pendingResponses less than
  0" assertions.

## Version 12.12.1 - April 20, 2026

### AI Logic

- Fixed the `TemplateChatSession` type so it does not error on
  TypeScript build. See
  [GitHub Issue #9832](https://github.com/firebase/firebase-js-sdk/issues/9832).

- Update code execution and URL context features to reflect that they
  are generally available and no longer public preview.

## Version 12.12.0 - April 9, 2026

> [!CAUTION]
> **Caution:** This version introduced a regression in AI Logic that may cause TypeScript builds to fail. Upgrade to 12.12.1 or later.

- Fixed a typo in the `package.json` config in `@firebase/app-types` that caused errors in package managers. See [GitHub Issue #9787](https://github.com/firebase/firebase-js-sdk/issues/9787).

### AI Logic

- Added `startChat()` and automatic function calling capability
  to `TemplateGenerativeModel`.

- All Imagen models are deprecated and will shut down as early
  as June 2026. As a replacement, you can
  [migrate your apps to use Gemini Image models (the "Nano Banana" models)](https://firebase.google.com/docs/ai-logic/imagen-models-migration.md.txt).

- Deprecated the `topK` and `temperature` properties for
  on-device usage in hybrid inference mode.

- Fixed a bug that caused the model to error if the user specifies
  `responseSchema` or `responseJsonSchema`.

### Authentication

- Updated the peer dependency range for `@react-native-async-storage/async-storage` to support both v2 and v3.

### SQL Connect

- Added streaming support for SQL Connect.

### Cloud Firestore

- Added support for the following expressions: `parent`,
  `timestamp_trunc`, `timestamp_diff`, `timestamp_extract`, `nor`, `switchOn`,
  `ifNull`, and `coalesce`.

- Added public preview support for full-text and geo search in
  Pipelines.

- Added subquery support to Pipelines.

- **Beta API Breaking Change** : Change the `isType` parameter
  `Type` from a type union to a raw string. (Applies to the Pipelines API only.)

- Refactored the parameters for timestamp expressions and changed
  all `TimeGranularity` string values to lowercase. (Applies to the Pipelines
  API only.)

- Fixed a bug affecting union queries in Pipelines. See
  [GitHub Issue #9764](https://github.com/firebase/firebase-js-sdk/issues/9764).

## Version 12.11.0 - March 19, 2026

### AI Logic

- Added `responseJsonSchema` to `GenerationConfig`.

### Cloud Firestore

- Added support for array expressions `arrayFirst`, `arrayFirstN`, `arrayLast`, `arrayLastN`, `arrayMinimum`, `arrayMinimumN`, `arrayMaximum`, `arrayMaximumN`, `arrayIndexOf`, `arrayLastIndexOf` and `arrayIndexOfAll`.
- **Beta API Breaking Change:** Pipeline validation now occurs during execution rather than initialization. **Action required:** Update your error handling to catch user data validation errors on `execute()` instead of during pipeline initialization.
- Fixed "X is not a function" issues observed in server side rendering APIs.

## Version 12.10.0 - February 27, 2026

### AI Logic

- Added automatic function calling capability when using `ChatSession`.

### SQL Connect

- Added memory-based caching to queries in SQL Connect.

### Cloud Firestore

- Added support for the following Pipelines expressions: `mapSet`, `mapValues`, `mapEntries`, `mapKeys`, `stringRepeat`, `stringReplaceOne`, `stringReplaceAll`, `stringIndexOf`, `ltrim`, `rtrim`, `arrayAgg`, `arrayAggDistinct`, `first`, `last`, `rand`, `trunc`, and `isType`.

## Version 12.9.0 - February 5, 2026

### AI Logic

- The `LiveSession.receive()` return types now include a new
  `LiveServiceGoingAwayNotice` that signifies the service will soon
  close the session.

- Added new `UsageMetadata` fields to provide cache-related
  usage data when the implicit caching feature is used.

- Removed "Preview" tags from code execution and URL context
  documentation.

### Cloud Firestore

- Support added for `regexFind` and `regexFindAll` Pipeline
  expressions.

- `getFirestore` now logs a warning when `databaseId` is not found.

## Version 12.8.0 - January 14, 2026

### AI Logic

- Added support for `AbortSignal`, allowing requests to be aborted.

- Added ability to specify thinking levels in `thinkingConfig`.

- **Breaking change** : Updated default hybrid in-cloud model to
  `gemini-2.5-flash-lite`.

### Cloud Firestore

- Released Firestore Pipelines for Enterprise edition in public preview.

### Remote Config

- Added web support for A/B Testing and Rollouts.

## Version 12.7.0 - December 16, 2025

### AI Logic

- Fixed `generateContentStream()` returning the wrong `inferenceSource`.

### Authentication

- Upgraded `react-native-async-storage` peer dependency to v2+.

### Cloud Firestore

- Corrected misleading error message when `doc()` is called with `undefined`. See [GitHub Issue #9378](https://github.com/firebase/firebase-js-sdk/issues/9378).

## Version 12.6.0 - November 13, 2025

### AI Logic

- Added support for [server prompt templates](https://firebase.google.com/docs/ai-logic/server-prompt-templates/get-started.md.txt).

### SQL Connect

- Fixed an issue where `onComplete` did not trigger when the user called `unsubscribe` on a subscription.

## Version 12.5.0 - October 30, 2025

### AI Logic

- Deprecated `sendMediaChunks()` and `sendMediaStream()`. Instead,
  use the new methods added to the `LiveSession` class:
  `sendTextRealtime()`, `sendAudioReatime()`, and `sendVideoRealtime()`.

- Added support for audio transcriptions in the Live API.

- When using hybrid on-device inference with either the
  `PREFER_ON_DEVICE` or `PREFER_IN_CLOUD` mode, you can now
  [determine which inference mode was used for a request](https://firebase.google.com/docs/ai-logic/hybrid-on-device-inference#determine-inference-mode).

- Fixed logic for merging default `onDeviceParams` with
  user-provided `onDeviceParams`.

### Authentication

- Added export of `MISSING_PASSWORD` in `AuthErrorCodes`.

- Added `browserCookiePersistence` beta feature to public types.

## Version 12.4.0 - October 9, 2025

### AI Logic

- **Breaking change** : Changed the `functionCallingHandler`
  property in `StartAudioConversationOptions` so that it now must return a
  `Promise<FunctionResponse>`. This breaking change is allowed in a minor
  release since the Live API is in Public Preview.

- Added a `sendFunctionResponses` method to `LiveSession`, allowing
  function responses to be sent during realtime sessions.

- Added `URLContextTool` support. This allows the model to access
  content from provided public web URLs to inform and enhance its responses.

- Imagen Generation is now Generally Available (GA).

- The Gemini Developer API is now Generally Available (GA).

- The SDK can now handle empty parts when streaming.

- The `CodeExecutionTool` has been properly marked as Public Preview
  in our reference documentation.

- Fixed an issue where function responses during audio conversations
  caused the WebSocket connection to close. See
  [GitHub Issue #9264](https://github.com/firebase/firebase-js-sdk/issues/8250).

## Version 12.3.0 - September 18, 2025

### AI Logic

- Added support for the
  [code execution tool](https://firebase.google.com/docs/ai-logic/code-execution.md.txt).
  Enabling this tool lets the model generate and run Python code to help it
  perform complex tasks like solving mathematical equations or visualizing data.

- Added support for `PREFER_IN_CLOUD` mode when using
  [hybrid on-device inference](https://firebase.google.com/docs/ai-logic/hybrid-on-device-inference). This
  mode allows the SDK to fall back to the on-device model if the cloud-hosted
  model isn't available (for example, if the device is offline).

- Updated the
  [hybrid on-device inference](https://firebase.google.com/docs/ai-logic/hybrid-on-device-inference)
  feature from "experimental" to "public preview" status.

### Remote Config

- Added support for Realtime Remote Config for the web. This feature introduces a new `onConfigUpdate` API and allows web applications to receive near-instant configuration updates without requiring periodic polling.

### Cloud Firestore

- Increased the buffering-proxy detection timeout to minimize the false-positive rate. Updated WebChannel to ignore duplicate messages received from the server. This fixes [GitHub Issue #8250](https://github.com/firebase/firebase-js-sdk/issues/8250).

## Version 12.2.1 - August 28, 2025

### AI Logic

- Fixed an issue that caused TypeScript compilation errors.

## Version 12.2.0 - August 28, 2025

### AI Logic

- Add support for the Gemini Live API.

- Add `thoughtSummary()` convenience method to `EnhancedGenerateContentResponse`.

- Add support for limited-use tokens with Firebase App Check.
  These limited-use tokens are required for an upcoming optional feature called
  *replay protection* . We recommend
  [enabling the usage of limited-use tokens](https://firebase.google.com/docs/ai-logic/app-check.md.txt)
  now so that when replay protection becomes available, you can enable it sooner
  because more of your users will be on versions of your app that send limited-use tokens.

- Fixed an issue where `AIError` messages were too long after including an entire response body.

- Added `'includeSafetyAttributes'` field to `Predict` request payloads.

- Excluded `ChromeAdapterImpl` code from Node entry point.

### Cloud Firestore

- Fixed a bug where a rejected promise with an empty message in a transaction would cause a timeout. See [GitHub Issue #9147](https://github.com/firebase/firebase-js-sdk/issues/9147).

### Cloud Functions for Firebase Client SDK

- Fixed an issue which caused a CORS error in Firebase Studio when connected to emulators.

## Version 12.1.0 - August 7, 2025

### AI Logic

- Added hybrid inference options to AI Logic. This provides options to perform inference tasks using the [Prompt API](https://developer.chrome.com/docs/extensions/ai/prompt-api) in browsers that have the Prompt API enabled.

### Performance Monitoring

- Fixed errors thrown when capturing long target element names for out-of-the-box metrics. See [GitHub Issue #9136](https://github.com/firebase/firebase-js-sdk/issues/9136).

## Version 12.0.0 - July 17, 2025

- Updated Node.js "engines" version to require a minimum of Node 20.

- Updated the SDK to use ES2020. Developers whose apps are not
  using ES2020 or higher may need to update their tooling or configuration.

- Removed the `firebase/vertexai` import alias. All the
  functionality is still available under the new name: `firebase/ai`, although
  some methods may be renamed (see AI Logic notes below).

### AI Logic

- Removed methods and symbols with the `VertexAI` name in them
  such as `getVertexAI` or `VertexAIError`. These were deprecated in 11.8.0
  and were just wrappers on the newly introduced methods with the `AI` name,
  such as `getAI` or `AIError`.

- Added support for Grounding with Google Search.

- Added support for the Thinking Budget feature.

- Added support for `anyOf` schemas.

- Converted each `enum` export to a combination of a `const`
  map and a string literal type. This makes the constants available to
  non-TypeScript users and allows tree-shaking of unused variables.

- Removed `GroundingAttribution`, which had previously been
  deprecated.

- Fixed typings for `functionDeclaration.parameters` to prevent the
  use of `optionalProperties` when using an object literal.

### Cloud Firestore

- Reverted a fix for an issue where Cloud Firestore would send `undefined`
  for a document snapshot if the "clear site data" button was pressed in the web
  browser. This fix was introduced in v11.6.1 but inadvertently caused IndexedDB
  issues for some customers.
  See [GitHub Issue #9165](https://github.com/firebase/firebase-js-sdk/issues/9165).

- Further improved performance of UTF-8 string ordering logic, which
  had degraded in v11.3.0, was reverted in v11.3.1, and was reintroduced with
  some improvements in v11.5.0.

- Fixed a regression where the SDK did not re-connect to IndexedDb
  after a disconnect.

## Version 11.10.0 - June 26, 2025

- Added React Native entry point.

### AI Logic

- Added deprecation label to `totalBillableCharacters`. `totalTokens` should be used instead.

### Cloud Firestore

- Added support for Firestore result types to be serialized with `toJSON` and then deserialized with `fromJSON` methods on the objects.
- Added support to resume `onSnapshot` listeners in the CSR phase based on serialized `DataSnapshot`s and `QuerySnapshot`s built in the SSR phase.
- Internal listener registration change for IndexedDB `versionchange` events.

### Cloud Storage

- Fixed CORS error that occurred in Firebase Studio.

## Version 11.9.1 - June 10, 2025

### Authentication

- Fixed a Firebase Studio issue where Firebase Auth cookie refresh attempts issued in Firebase Studio resulted in CORS errors.

### Cloud Storage

- Fixed a Firebase Studio issue that didn't properly populate cookies for Storage users.

## Version 11.9.0 - June 5, 2025

### AI Logic

- Added `title`, `maximum`, `minimum`, `maxItems`, `minItems`, and `propertyOrdering` to `Schema`.
- Added `HarmBlockThreshold.OFF` support.

### Cloud Firestore

- Clean up leaked WebChannel instances when the Firestore instance is terminated.

## Version 11.8.0 - May 20, 2025

- The `FirebaseApp` setting `automaticDataCollectionEnabled` now defaults to `true`. This setting was previously only used by App Check and won't change the default behavior in App Check.

### Cloud Firestore

- Fixed a cache issue in Safari/WebKit that occurs when client-side indexing is used.

### AI Logic

- Initial release of the Firebase AI Logic SDK (`@firebase/ai`).
  This SDK *replaces* the previous Vertex AI in Firebase SDK
  (`@firebase/vertexai`) to accommodate the evolving set of supported features
  and services. The new Firebase AI Logic SDK provides **preview** support
  for the Gemini Developer API, including its free tier offering. Using the
  Firebase AI Logic SDK with the Vertex AI Gemini API is still generally
  available (GA).

  To start using the new SDK, use the `getAI()` instance getter imported from
  `'firebase/ai'`. See details in the
  [migration guide](https://firebase.google.com/docs/vertex-ai/migrate-to-latest-sdk).
- Added support for Gemini multimodal output.

- Fixed an issue where `GenerationConfig` was not inherited from
  `ChatSession`.

## Version 11.7.1 - May 7, 2025

- Rolled back the change in 11.7.0 that set the value of `automaticDataCollectionEnabled` to `true`. Due to a backend setting not being ready yet, this will cause errors in Vertex AI in Firebase requests. This change will be restored when the backend is ready.

## Version 11.7.0 - May 7, 2025

> [!CAUTION]
> **Caution:** This version introduced a regression in Vertex AI in Firebase that may cause requests to fail. Upgrade to 11.7.1 or later.

- The `FirebaseApp` setting `automaticDataCollectionEnabled` now defaults to `true`. This setting was previously only used by App Check and won't change the default behavior in App Check.

## Version 11.6.1 - April 24, 2025

### Authentication

- Fixed an issue where `ActionCodeURL` was not populating `languageCode` from the URL. Fixes [GitHub Issue #8912](https://github.com/firebase/firebase-js-sdk/pull/8912).

### SQL Connect

- Resolved a 'cannot extend private constructor' build error that occurred when using the `DataConnectError` and `DataConnectOperationError` types. See [GitHub PR #8898](https://github.com/firebase/firebase-js-sdk/pull/8898).

### Cloud Firestore

- Fixed the `null` value handling in `!=` and `not-in` filters. See [GitHub PR #8915](https://github.com/firebase/firebase-js-sdk/pull/8915).
- Fixed 'window is not defined' error when calling `clearIndexedDbPersistence` from a service worker. Fixes [GitHub Issue #6465](https://github.com/firebase/firebase-js-sdk/issues/6465).
- Fixed an issue where Firestore would produce `undefined` for document snapshot data if using IndexedDB persistence and "clear site data" (or equivalent) was selected in the web browser. Fixes [GitHub Issue #8953](https://github.com/firebase/firebase-js-sdk/issues/8593).
- Added unique IDs and state information into fatal error messages instead of the generic "unexpected state" message.

## Version 11.6.0 - March 31, 2025

### Authentication

- Added `Persistence.COOKIE`, a new persistence method backed by cookies. The `browserCookiePersistence` implementation is designed to be used in conjunction with middleware that ensures both your front and backend authentication state remain synchronized.

### SQL Connect

- Exposed partial errors to the user.

### Vertex AI in Firebase

- The SDK now throws an error when initializing models if `appId`
  is not defined in the given Vertex AI in Firebase instance.

- Labeled `GroundingAttribution` as deprecated.

## Version 11.5.0 - March 20, 2025

### App Check

- The `getToken()` method now throws `internalError` strings that were previously internally suppressed. Fixes [GitHub issue #8822](https://github.com/firebase/firebase-js-sdk/issues/8822).

### Cloud Firestore

- Implemented lazy UTF-8 encoded byte comparison for strings. Fixes [GitHub issue #8774](https://github.com/firebase/firebase-js-sdk/issues/8774) and [#8778](https://github.com/firebase/firebase-js-sdk/issues/8778).

### SQL Connect

- Updated requests to point to the `v1` backend endpoints instead of `v1beta`.

### Performance Monitoring

- New retry logic prevents infinite retry attempts. Fixes [GitHub issue #8813](https://github.com/firebase/firebase-js-sdk/issues/8813).

### Realtime Database

- Added non-null parent properties to `ThenableReference`.

### Vertex AI in Firebase

- Added missing `BlockReason` and `FinishReason` enum values.

- `systemInstruction`, `tools`, and `generationConfig` have been
  added to `CountTokensRequest`.

## Version 11.4.0 - February 27, 2025

- Added support for the `FIREBASE_WEBAPP_CONFIG` environment variable at install time. This feature supports auto-initialization for SSR apps using Firebase App Hosting.

### Authentication

- Invoking `connectAuthEmulator` multiple times with the same parameters will no longer cause an error. Fixes [GitHub issue #6824](https://github.com/firebase/firebase-js-sdk/issues/6824).

### App Check

- Fixed a bug that caused an error to be thrown when the debug exchange request failed.

### Realtime Database

- Invoking `connectDatabaseEmulator` multiple times with the same parameters will no longer cause an error. Fixes [GitHub issue #6824](https://github.com/firebase/firebase-js-sdk/issues/6824).

### Vertex AI in Firebase

- **Public Preview** : Added support for
  [generating images using the Imagen 3 models](https://firebase.google.com/docs/vertex-ai/generate-images-imagen).

  > [!NOTE]
  > **Note:** This feature is in Public Preview, which means that it is not subject to any SLA or deprecation policy and could change in backwards-incompatible ways.

- Added support for modality-based token count.

- The SDK now filters out empty text parts from streaming responses.
  Fixes [GitHub issue #8714](https://github.com/firebase/firebase-js-sdk/issues/8714).

- Created a separate entry point bundle for Node.js. This bundle
  can be automatically detected by any developer tooling configured to
  prefer Node.js fields in `package.json`, such as `main` or `exports.node`.

### Remote Config

- Added support for initial state hydration from SSR contexts.

## Version 11.3.1 - February 11, 2025

### Cloud Firestore

- Reverted a change to use UTF-8 encoding in string comparisons because it caused a performance issue. Fixes [GitHub issue #8778](https://github.com/firebase/firebase-js-sdk/issues/8778).

## Version 11.3.0 - February 6, 2025

- Added an `appCheckToken` parameter to `FirebaseServerAppSettings`. `FirebaseServerApp` will use the token when making service requests, unblocking the use of App Check enforced products in SSR environments.

### Authentication

- Added `ActionCodeSettings.linkDomain` to customize the Firebase Hosting link domain that is used in mobile out-of-band email action flows. Also, deprecated `ActionCodeSettings.dynamicLinkDomain`.

### Performance Monitoring

- Collect web vital metrics (INP,CLS,LCP) as part of page load event.

### Realtime Database

- Fixed a potential negative offset when calculating last reconnect times. This could cause lengthy reconnect delays in some scenarios. Fixes [GitHub Issue #8718](https://github.com/firebase/firebase-js-sdk/issues/8718).

### Cloud Firestore

- Fixed an issue where the SDK's string sorting differed from the server's (UTF-8 byte order) for document fields and map/document keys, resolving a mismatch caused by special characters.

## Version 11.2.0 - January 16, 2025

### SQL Connect

- Usage of `PromiseLike` has been replaced with `Promise`.

### Remote Config

- Added support for custom signal targeting. Use the `setCustomSignals` API and to set custom signals that can be targeted using the new custom signal condition type in the Remote Config console.

## Version 11.1.0 - December 12, 2024

### Cloud Functions for Firebase Client SDK

- Added `.stream()` API for callable functions to consume stream responses.

### SQL Connect

- Fixed issue where multiple calls to `connectDataConnectEmulator` caused an exception.

### Cloud Messaging

- Fixed an issue where `PushManager.subscribe()` is called too soon after registering the default service worker. Fixes [GitHub Issue #7784](https://github.com/firebase/firebase-js-sdk/issues/7784).

### Vertex AI in Firebase

- Clear `fetch` `timeout` after request completion. Fixes an issue that caused Node.js scripts to hang on exit due to a pending timeout.

## Version 11.0.2 - November 14, 2024

- Upgraded to TypeScript 5.5.4.

### Cloud Firestore

- Prevent a possible condition of slow snapshots, caused by a rapid series of document update(s) followed by a delete. Fixes [GitHub Issue #8474](https://github.com/firebase/firebase-js-sdk/issues/8474).

### Vertex AI in Firebase

- Update to new base URL in documentation.
- Remove indentation in `API Not Enabled` error.
- Send App Check dummy token in header if there is an App Check `getToken` error.

## Version 11.0.1 - October 22, 2024

### Realtime Database

- Bumped `@firebase/database-compat` by a major version to ensure downstream libraries like `firebase-admin` don't automatically pick up the Node.js `engines` update in `package.json`.

## Version 11.0.0 - October 21, 2024

- Vertex AI in Firebase is now Generally Available (GA) and can be
  used in production apps.

  Use the Vertex AI in Firebase SDK to call the Vertex AI Gemini API directly
  from your app. This client SDK is built specifically for use with Web apps,
  offering security options against unauthorized clients as well as
  integrations with other Firebase services.
  - If you're new to this SDK, visit the [getting started guide](https://firebase.google.com/docs/vertex-ai/get-started?platform=web).
  - If you used the preview version of the library, visit the [migration guide](https://firebase.google.com/docs/vertex-ai/migrate-to-ga?platform=web) to learn about some important updates.
- The SDK no longer supports versions of Node.js below version 18.
  `engines` fields in all `package.json` files have been updated to reflect
  this.

- Removed ES5 bundles. The minimum required ES version is now ES2017.

- Removed usage of `undici` and `node-fetch` dependencies in our Node.js
  bundles, replacing them with the native Node.js `fetch` implementation.

### Authentication

- Added ReCAPTCHA Enterprise support for app verification during phone authentication.

### Cloud Functions for Firebase Client SDK

- The `FunctionsError` class is now publicly exported.

### Cloud Firestore

- Memory LRU GC is now enabled by default.

## Version 10.14.1 - October 10, 2024

### Cloud Messaging

- Fixed a logging issue where Web Push data was missing in BigQuery logs.

## Version 10.14.0 - September 30, 2024

### SQL Connect

- Added the SQL Connect package to the SDK.

- Added App Check support.

### Cloud Firestore

- Re-enabled `useFetchStreams` with the latest WebChannel implementation.
  This reduces the memory usage of WebChannel.

- Refactored Cloud Firestore client instantiation. This prepares for
  future releases that require the client to restart.

## Version 10.13.2 - September 18, 2024

### Authentication

- Suppress the use of the parameter `referrerPolicy` within `fetch` requests originating from Cloudflare Workers. Cloudflare Worker environments do not support this parameter and all Auth operations would silently fail. Fixes [GitHub Issue #8355](https://github.com/firebase/firebase-js-sdk/issues/8355).

### Cloud Firestore

- Fix an issue with metadata `fromCache` defaulting to `true` when listening to cache in multiple browser tabs. See [GitHub PR #8343](https://github.com/firebase/firebase-js-sdk/pull/8343).

## Version 10.13.1 - August 29, 2024

- Removed an unnecessary `console.log` statement. See [GitHub Issue #8436](https://github.com/firebase/firebase-js-sdk/issues/8436).
- Updated `undici` dependency to 6.19.7 due to a memory leak in older versions. See [GitHub Issue #8431](https://github.com/firebase/firebase-js-sdk/issues/8431)

### Cloud Functions for Firebase Client SDK

- Allow a custom path in Firebase Functions custom domain. See [GitHub Issue #8440](https://github.com/firebase/firebase-js-sdk/issues/8440)

## Version 10.13 - August 15, 2024

- The compat package now checks whether firebase is defined in the `global` scope. Fixes [GitHub Issue #8409](https://github.com/firebase/firebase-js-sdk/issues/8409).
- Prevent heartbeats from throwing errors. Fixes [GitHub Issue #8407](https://github.com/firebase/firebase-js-sdk/issues/8407).

### Cloud Firestore

- Add support for reading and writing Firestore vectors. See [GitHub PR #8215](https://github.com/firebase/firebase-js-sdk/pull/8215).

### Authentication

- Remove `localStorage` synchronization on storage events in Safari iframes. See [GitHub PR #8408](https://github.com/firebase/firebase-js-sdk/pull/8408).

### Cloud Storage

- Migrate from the Node to the Web ReadableStream. See [GitHub PR #8410](https://github.com/firebase/firebase-js-sdk/pull/8410).

## Version 10.12.5 - August 1, 2024

- Reverted the change that added the [safevalues](https://github.com/google/safevalues)
  library, as it is not compatible with ES5 bundles. We will return to using
  `safevalues` when we migrate all our builds away from ES5.

- Properly handle the case in `app-compat` checks where `window`
  exists but `self` does not. (This occurs in Ionic Stencil's Jest preset, for
  example.)

- Fixed typos in documentation and some internal variables and
  parameters.

## Version 10.12.4 - July 18, 2024

- The SDK now uses the [safevalues](https://github.com/google/safevalues) library to sanitize HTML vulnerable to XSS.

## Version 10.12.3 - July 3, 2024

- Updated browser environment detection logic in `firebase/util` to allow for the experimental use of `FirebaseServerApp` instances in edge runtimes. See [GitHub Issue #8299](https://github.com/firebase/firebase-js-sdk/issues/8299).
- Guard the use of `FinalizationRegistry` in `FirebaseServerApp` initialization based on the availability of `FinalizationRegistry` in the JavaScript runtime. See [GitHub Issue #8299](https://github.com/firebase/firebase-js-sdk/issues/8299).
- The `FirebaseServerAppSettings.name` field inherited from `FirebaseAppSettings` is now omitted instead of overloading the value as `undefined`. This fixes a TypeScript compilation error. For more information, see [GitHub Issue #8336](https://github.com/firebase/firebase-js-sdk/issues/8336).

### Cloud Firestore

- Fixed a metadata sync issue with multi-tab persistence and snapshot listeners. See [GitHub Issue #8314](https://github.com/firebase/firebase-js-sdk/issues/8314).
- Fixed a typo in the `package.json` of `webchannel-wrapper` that caused `bloom-blob` to be missing the `esm5` specifier. See [GitHub Issue #8319](https://github.com/firebase/firebase-js-sdk/issues/8319).

### Firebase AI Logic

- Added a new publicly exported `VertexAIError` class. See [GitHub PR #8240](https://github.com/firebase/firebase-js-sdk/pull/8240).

## Version 10.12.2 - May 27, 2024

### Authentication

- Changed `types` paths to point to rolled-up public `d.ts` files. This fixes TypeScript compilation errors in the web extension and cordova bundles. See [GitHub Issue #8222](https://github.com/firebase/firebase-js-sdk/issues/8222).

### Firebase AI Logic

- Changed `types` paths to point to point to rolled-up public `d.ts` files. This fixes some TypeScript compiler errors. See [GitHub PR #8256](https://github.com/firebase/firebase-js-sdk/pull/8256)

## Version 10.12.1 - May 20, 2024

### Analytics

- Fixed a bug where `setConsent` was incorrectly passing consent parameters to `gtag()`. See [GitHub Issue #8210](https://github.com/firebase/firebase-js-sdk/issues/8210).

### Cloud Firestore

- Fixed a multi-tab persistence issue that caused empty snapshots.

## Version 10.12.0 - May 13, 2024

### Firebase AI Logic

- Initial release of the Vertex AI for Firebase SDK (public preview). Learn how to [get started](https://firebase.google.com/docs/vertex-ai/get-started?platform=web) with the SDK in your app.

### Cloud Firestore

- Updated `@firebase/webchannel-wrapper` to consume Closure
  dependencies from the `closure-net` GitHub repo.

- Fixed multi-byte character decoding bug by updating
  `webchannel-wrapper` dependency.

## Version 10.11.1 - April 25, 2024

### Authentication

- The SDK now emits a module package file with `esm2017` browser extension builds. See [GitHub Issue #8115](https://github.com/firebase/firebase-js-sdk/issues/8115).
- Update `jszip` transient dependency from `3.7.1` to `3.10.1`.

### Cloud Firestore

- Prevent spurious "Backend didn't respond within 10 seconds" errors when network is in fact responding, but slowly. See [GitHub PR #8145](https://github.com/firebase/firebase-js-sdk/pull/8145).
- Update `protobufjs` transitive dependency from `6.11.3` to `7.2.6`.
- Return to using `xmlhttprequest` for bidi-streams, as `fetch` streams seem to be having connection issues.
- Reduce code bundle size by 6.5 kB in applications that only use memory persistence (the default persistence mode). This bundle size regression was accidentally introduced in version `10.7.2`.

## Version 10.11.0 - April 11, 2024

- `FirebaseServerApp` is no longer JSON serializable.
- Upgraded `undici` version to `5.28.4` due to the low severity security issue [CVE-2024-30260](https://www.cve.org/CVERecord?id=CVE-2024-30260).
- Updated dependencies in Auth, Firestore, Storage and App. See [GitHub PR #8098](https://github.com/firebase/firebase-js-sdk/pull/8098).

### Cloud Firestore

- Fixed an issue where client side indexing on timestamp fields leads to incorrect query results. See [GitHub issue #8031](https://github.com/firebase/firebase-js-sdk/issues/8031).

### Cloud Messaging

- Revised token update logic to prevent unnecessary token deletions during transient network issues. See [GitHub PR #8141](https://github.com/firebase/firebase-js-sdk/pull/8141).

## Version 10.10.0 - March 28, 2024

- Added the new `FirebaseServerApp` interface to bridge state data between client and server runtime environments. This interface extends `FirebaseApp`.

### Authentication

- Updated transitive dependencies based on generated dependabot security reports. See [GitHub PR #8088](https://github.com/firebase/firebase-js-sdk/pull/8088).
- Additional protection against misuse of the `authTokenSyncURL` experiment. See [GitHub PR #8076](https://github.com/firebase/firebase-js-sdk/pull/8076).

## Version 10.9.0 - March 14, 2024

### Authentication

- Fixed a potential XSS vulnerability through `FIREBASE_DEFAULTS` settings. See [PR #8056](https://github.com/firebase/firebase-js-sdk/pull/8056) for more information.

### Cloud Firestore

- Added the `ListenSource` enum to `SnapshotListenOptions` to provide an option to retrieve data from local cache only.

## Version 10.8.1 - February 28, 2024

- Upgrade `undici` version to `5.28.3` due to the low severity security issue [CVE-2024-24758](https://github.com/advisories/GHSA-3787-6prv-h9w3).

## Version 10.8.0 - February 1, 2024

- Fixed to catch `transaction.done` errors in `readHeartbeatsFromIndexedDB` and log them as a warning, because platform logging errors should never block user app functionality.

### Authentication

- Added a `firebase/auth/web-extension` entry point for web extension developers. This entry point does not include any code that loads remote scripts, which are disallowed under [Manifest V3](https://developer.chrome.com/docs/extensions/develop/migrate#remotely-hosted-code). In extensions, this entry point should replace `firebase/auth` completely, and developers should not try to use both in the same app. See [GitHub issue #7617](https://github.com/firebase/firebase-js-sdk/issues/7617).

### Analytics

- Added two new consent options to the `ConsentSettings` interface: `ad_personalization` and `ad_user_data`.

### Realtime Database

- Fixed issue where `queryConstraint.type` was undefined.

### Cloud Firestore

- Fixed `isSafari()` throwing in React Native. See [GitHub issue #7962](https://github.com/firebase/firebase-js-sdk/issues/7962).

## Version 10.7.2 - January 18, 2024

- Catch and warn IndexedDB `createObjectStore` errors in Safari-based browsers. See [GitHub issue #7829](https://github.com/firebase/firebase-js-sdk/issues/7829).

### Cloud Firestore

- Update the `isEqual` function for `arrayUnion`, `arrayRemove` and `increment`. See [GitHub issue #7706](https://github.com/firebase/firebase-js-sdk/issues/7706).
- Fixed leak of grpc-js resources on terminate. See [GitHub issue #7747](https://github.com/firebase/firebase-js-sdk/issues/7747).
- Adjusted the automatic index creation parameters to use more optimal values for the platform/browser detected at runtime.
- Support special characters in query paths sent to `getCountFromServer(...)`, `getCount(...)` (lite API), and `getDocs(...)` (lite API).

## Version 10.7.1 - December 5, 2023

### App Check

- Prevent App Check from logging "uncaught" cancelled promises. The cancelled promises are part of App Check's expected behavior, and their cancellation wasn't intended to produce errors or warnings. See [GitHub issue #7805](https://github.com/firebase/firebase-js-sdk/issues/7805).

### Authentication

- Added protections when enumerating an empty list in Auth's reading of IndexedDB results, as this causes errors in some macOS and iOS browser runtimes. See [GitHub issue #7825](https://github.com/firebase/firebase-js-sdk/issues/7825).

## Version 10.7.0 - November 27, 2023

- Replaced `node-fetch` dependency with the latest version of `undici` in Node.js SDK builds for Auth, Firestore, Cloud Functions, and Storage. See [GitHub issue #7280](https://github.com/firebase/firebase-js-sdk/issues/7280).
- Introduced more safeguards to ensure that heartbeat objects queried from IndexedDB include a heartbeats field.

### Authentication

- Exposed `INVALID_LOGIN_CREDENTIALS` as `auth/invalid-credential` error and updated docs for various Auth SDK methods.

### Cloud Firestore

- Introduced fixes for high memory usage of Firestore in browsers. See [GitHub issue #6118](https://github.com/firebase/firebase-js-sdk/issues/6118).

## Version 10.6.0 - November 9, 2023

- Provide a more robust check to cover more cases of empty heartbeat data.

### Authentication

- Add Sign in with Apple token revocation support.

### Cloud Firestore

- Allow converter return value of undefined. See [GitHub issue #7719](https://github.com/firebase/firebase-js-sdk/issues/7719).

## Version 10.5.2 - October 26, 2023

### Authentication

- Added the `TotpMultiFactorGenerator` and `TotpSecret` exports that were missing from the React Native entry point.

### Cloud Firestore

- Rolled back the use of `useFetchStreams`, which had led to hanging queries. This bug was introduced in 10.4.0.

## Version 10.5.1 - October 26, 2023

### Authentication

- Fixed issues with `FetchProvider` in non-browser environments. See [Github issue #7633](https://github.com/firebase/firebase-js-sdk/issues/7633).

### Cloud Firestore

- Clarified API documentation around `getFirestore()` and `initializeFirestore()` functions.

## Version 10.5.0 - October 12, 2023

### Cloud Firestore

- Added support for `sum` and `average` aggregations.

- Added a default template type parameter to `withConverter()`
  methods to allow backward compatibility with version 9 of the SDK.

## Version 10.4.0 - September 14, 2023

> [!CAUTION]
> **Caution:** This version introduced a regression in Cloud Firestore that may cause queries to hang. Upgrade to 10.5.2 or later.

### Cloud Firestore

- Added `enablePersistentCacheIndexAutoCreation()` function to
  enable automatic creation of local cache query indexes, which can improve
  performance of local query execution.

- Fixed an issue where Cloud Firestore was incorrectly using XHR
  instead of `fetch` for streaming response.

- Updated dependency `grpc-js` from version `~1.8.17` to `~1.9.0`.

## Version 10.3.1 - August 31, 2023

### Cloud Firestore

- An internal refactor related to client-side index creation.

## Version 10.3.0 - August 22, 2023

### Authentication

- Fixed a regression in version 10.0.0 caused by adding
  a hard dependency on `@react-native-async-storage/async-storage`
  as a convenience for React Native developers. This caused
  unnecessary warnings during npm or Yarn install for non-React Native users,
  and in some cases, React version conflicts.

  10.3.0 will break React Native users who have converted to using `getAuth()` to
  initialize Authentication. React Native users who want persistent auth state must now
  explicitly import `@react-native-async-storage/async-storage` and provide it
  to `initializeAuth()` as an option like so:

  ```javascript
  import { initializeAuth, getReactNativePersistence } from 'firebase/auth';
  import ReactNativeAsyncStorage from '@react-native-async-storage/async-storage';
  const auth = initializeAuth(app, {
    persistence: getReactNativePersistence(ReactNativeAsyncStorage)
  });
  // getAuth() can be used any time after initialization
  ```

  See [Github issue #7522](https://github.com/firebase/firebase-js-sdk/issues/7522).

### Cloud Firestore

- Fixed a bug that caused high memory usage in Safari. See [Github issue #6118](https://github.com/firebase/firebase-js-sdk/issues/6118).

## Version 10.2.0 - August 17, 2023

### Authentication

- Added a
  [`validatePassword`](https://firebase.google.com/docs/reference/js/auth.md.txt#validatepassword) method for validating passwords against
  the password policy configured for the project or a tenant. This method
  returns a status object that can be used to display the requirements of the
  password policy and whether each one was met.

- Fixed a bug in the `onAuthStateChanged` canceller.
  See [Github issue #7383](https://github.com/firebase/firebase-js-sdk/issues/7383).

- The SDK now raises an error if `initializeRecaptchaConfig` is called
  in a Node.js environment.

### Cloud Firestore

- Updated `@grpc/proto-loader` from v0.6.13 to v0.7.8. This addresses a vulnerability in an older version of the transitive dependency `protobufjs`.

## Version 10.1.0 - July 20, 2023

### Authentication

- Implemented `authStateReady()`, which returns a promise that
  resolves immediately when the initial auth state is settled and `currentUser`
  is available. When the promise is resolved, `currentUser` might be a
  valid user or `null` if there is no user signed in currently.

- Unpinned the version of the dependency
  `@react-native-async-storage/async-storage` so that React Native users
  have more control over which version of it they use.
  See [Github issue #7448](https://github.com/firebase/firebase-js-sdk/issues/7448).

### Cloud Firestore

- Updated the `grpc` dependency to the latest version.
  See [Github PR #7452](https://github.com/firebase/firebase-js-sdk/pull/7452).

- Fixed issue where `count` and `firestore-lite` API queries did not work with
  named databases.
  See [Github PR #7440](https://github.com/firebase/firebase-js-sdk/pull/7440).

## Version 10.0.0 - July 6, 2023

> [!CAUTION]
> **Caution:** This version introduced a regression in Authentication that may result in npm/Yarn install warnings or dependency conflicts ([GitHub issue #7570](https://github.com/firebase/firebase-js-sdk/issues/7570)). Upgrade to 10.3.0 or later.

> [!WARNING]
> This version (v10.0.0) of the Firebase JavaScript SDK contains breaking changes.

The Firebase JavaScript SDK v10.0.0 has a number of **breaking changes**
related to the React Native bundle for Authentication, as well as typings changes
across several products.

### Authentication

- Removed explicit `firebase/auth/react-native` entry point. The
  React Native bundle should be automatically picked up by React Native build
  tools which recognize the `react-native` fields in `package.json` (at the top
  level and in `exports`).
  See [Github PR #7138](https://github.com/firebase/firebase-js-sdk/pull/7138).

- Changed `getAuth()` in the React Native bundle to default to
  importing `AsyncStorage` from `@react-native-async-storage/async-storage`
  instead of from the `react-native` core package (which has recently removed it).
  See [Github PR #7128](https://github.com/firebase/firebase-js-sdk/pull/7128).

- Changed the type of `ParsedToken` values from `any` to `unknown`.

- Reordered `RecaptchaVerifier` parameters so `auth` is the first
  parameter.

### Realtime Database

- Updated type of action parameter for `DataSnapshot#forEach`.

### Cloud Firestore

- Fixed `updateDoc()` typing issue by adding a second type parameter to
  `FirestoreDataConverter`.
  See [Github PR #7310](https://github.com/firebase/firebase-js-sdk/pull/7310).

- Changed `UpdateData` to expand support for types with index signatures.
  See [Github PR #7318](https://github.com/firebase/firebase-js-sdk/pull/7318).

- Fixed an issue where `localCache` was not copied as part of
  `Settings`.

- Fixed some incorrectly generated source maps for the following
  bundles: `index.esm2017.js`, `index.cjs.js`, `index.node.mjs`, and
  `index.browser.esm2017.js` (lite SDK only).

## Version 9.23.0 - June 21, 2023

### Cloud Firestore

- Exposed the MultiDB API for public preview. See [Github PR #7356](https://github.com/firebase/firebase-js-sdk/pull/7356).

## Version 9.22.2 - June 8, 2023

- Fixed the types path for `compat/app` to deliver the proper typings to the compat packages. See [Github issue
  #7279](https://github.com/firebase/firebase-js-sdk/issues/7279).

### Cloud Firestore

- Fix potentially false warning message when configuring host in both `settings()` and `connectFirestoreEmulator()`. See [Github issue
  #7331](https://github.com/firebase/firebase-js-sdk/issues/7331).

## Version 9.22.1 - May 25, 2023

### App Check

- Added support for App Check replay protection in callable functions. See [Github PR #7296](https://github.com/firebase/firebase-js-sdk/pull/7296).

### Cloud Firestore

- Updated dependencies to enable setting `experimentalLongPollingOptions.timeoutSeconds`. See [Github PR #7311](https://github.com/firebase/firebase-js-sdk/pull/7311).

## Version 9.22.0 - May 12, 2023

- Made the error more helpful when `getApp()` is called before `initializeApp()`.
  See [Github PR #7263](https://github.com/firebase/firebase-js-sdk/pull/7263).

- Improved error handling for heartbeat read/write errors.
  See [Github issue #6871](https://github.com/firebase/firebase-js-sdk/issues/6871).

### Authentication

- The SDK now allows port numbers in `authDomain`. See [Github issue #7233](https://github.com/firebase/firebase-js-sdk/issues/7233).

### Cloud Firestore

- Enabled long-polling networking mode auto detection by default.
  It can be explicitly disabled by setting
  `FirestoreSettings.experimentalForceLongPolling` to `false`.
  See [Github PR #7236](https://github.com/firebase/firebase-js-sdk/pull/7236).

- Added the ability to configure the long-polling `GET`
  request timeout using the new `experimentalLongPollingOptions.timeoutSeconds`
  setting.
  See [Github PR #7176](https://github.com/firebase/firebase-js-sdk/pull/7176).

> [!NOTE]
> **Note:** `experimentalLongPollingOptions.timeoutSeconds` is incorrectly configured in version 9.22.0. It is fixed in v9.22.1. Please upgrade to v9.22.1 or later to use this feature.

## Version 9.21.0 - April 27, 2023

### Analytics

- Added method [`getGoogleAnalyticsClientId()`](https://firebase.google.com/docs/reference/js/analytics.md.txt#getgoogleanalyticsclientid) to retrieve an unique identifier for a web client. This allows users to log purchase and other events from their backends using Google Analytics 4 Measurement Protocol and to connect them to actions taken on the client within their Firebase web app. `getGoogleAnalyticsClientId()` simplifies this event recording process. See [Github PR #7158](https://github.com/firebase/firebase-js-sdk/pull/7158).

### App Check

- Added method [`getLimitedUseToken()`](https://firebase.google.com/docs/reference/js/app-check.md.txt#getlimitedusetoken) which requests a Firebase App Check token. This method should be used to authorize requests to non-Firebase backends. See [Github PR #7169](https://github.com/firebase/firebase-js-sdk/pull/7169).

### Cloud Firestore

- Created [`MemoryLruGarbageCollector`](https://firebase.google.com/docs/reference/js/firestore_#memorylrugarbagecollector)
  a new LRU garbage document collector for memory cache.
  See [Github PR #6943](https://github.com/firebase/firebase-js-sdk/pull/6943).

- Optimized the local cache synchronization logic to reduce the number
  of billed document reads when documents were deleted on the server while the
  client was not actively listening to the query (e.g. while the client was offline).
  See [Github PR #7229](https://github.com/firebase/firebase-js-sdk/pull/7229).

- Fixed stack overflow caused by deeply nested server timestamps.
  See [Github PR #7139](https://github.com/firebase/firebase-js-sdk/pull/7139).

- Simplified the internal handling of aggregation results.
  See [Github PR #7170](https://github.com/firebase/firebase-js-sdk/pull/7170).

- Updated exports of `webchannel-wrapper` (a Firestore dependency) to
  conform to Node ESM standards.
  See [Github PR #7228](https://github.com/firebase/firebase-js-sdk/pull/7228).

### Authentication

- Increased the popup poller timeout to 8s to support blocking functions for Firefox. See [Github PR #7140](https://github.com/firebase/firebase-js-sdk/pull/7140).

## Version 9.20.0 - April 18, 2023

### App Check

- Fixed ReCAPTCHA error handling so that the SDK now catches all ReCAPTCHA errors and then prevents the SDK from making a request to the App Check exchange endpoint, which prevents unnecessary 403 errors and throttling. See [Github PR #7203](https://github.com/firebase/firebase-js-sdk/pull/7203).

### Authentication

- Added App Check support in Authentication.

- Added ReCAPTCHA Enterprise support.

### Cloud Firestore

- Fixed a bug that sometimes prevented aggregations from being run when multi-tab persistence was enabled.

## Version 9.19.1 - March 31, 2023

### Authentication

- Fixed typings for `TotpMultiFactorGenerator`. This fixes a reversion in 9.19.0. See [Github issue #7174](https://github.com/firebase/firebase-js-sdk/issues/7174).

## Version 9.19.0 - March 30, 2023

> [!CAUTION]
> **Caution:** This version introduced a regression in Authentication that caused TypeScript build failures ([GitHub issue #7174](https://github.com/firebase/firebase-js-sdk/issues/7174)). Upgrade to 9.19.1 or later.

### Authentication

- Support `TOTP` as a multi-factor option in Firebase Auth/GCIP.
  See [Github PR #7146](https://github.com/firebase/firebase-js-sdk/pull/7146).

- Modify `_fail(...)` to use `AuthErrorCode.NETWORK_REQUEST_FAILED` and accept an error message.
  See [Github PR #7125](https://github.com/firebase/firebase-js-sdk/pull/7125).

### Analytics

- Use the Trusted Types API when composing the gtag URL. See [Github PR #7155](https://github.com/firebase/firebase-js-sdk/pull/7155).

### Cloud Firestore

- Introduced additional configurations for Firestore SDK Cache.
  See [Github PR #7015](https://github.com/firebase/firebase-js-sdk/pull/7015).

- Verify `DOMException` exists before referencing it.
  See [Github PR #7130](https://github.com/firebase/firebase-js-sdk/pull/7130).

## Version 9.18.0 - March 16, 2023

### Authentication

- Fixed a bug where `updateCurrentUser` set user metadata to `undefined`. See [Github issue #7066](https://github.com/firebase/firebase-js-sdk/issues/7066).

### Cloud Firestore

- Added support for disjunctions in `OR` queries.
  See [Github PR #7053](https://github.com/firebase/firebase-js-sdk/pull/7053).

- Improved debug logging of `GrpcConnection` and `WebChannelConnection`.
  See [Github PR #7076](https://github.com/firebase/firebase-js-sdk/pull/7076).

- Updated check for an IndexedDB bug in Safari to include
  `navigator.userAgent` when determining whether to trigger a workaround.
  This is helpful for Cordova apps that lack `appVersion` in their
  webview but need to apply the workaround.
  See [Github issue #6509](https://github.com/firebase/firebase-js-sdk/issues/6509).

## Version 9.17.2 - March 2, 2023

### Authentication

- Modified `_fail(...)` to use `AuthErrorCode.INTERNAL_ERROR` and accept an error message. See [Github PR #7038](https://github.com/firebase/firebase-js-sdk/pull/7038).

### Realtime Database

- Fixed issue where Vite with Astro could not resolve the correct output bundle. See [Github PR #7055](https://github.com/firebase/firebase-js-sdk/pull/7055).

### Cloud Firestore

- Relaxed query validation performed by the SDK.
  See [Github PR #7024](https://github.com/firebase/firebase-js-sdk/pull/7024).

- Refactored platform-specific logic to create `TextEncoder` and
  `TextDecoder` objects.
  See [Github PR #7018](https://github.com/firebase/firebase-js-sdk/pull/7018).

- Modified all base64 decoding functions to explicitly throw an
  error on invalid input, as some previous implementations silently accepted
  invalid input.
  See [Github PR #7019](https://github.com/firebase/firebase-js-sdk/pull/7019).

- Refactored the aggregation implementation to support future
  aggregate functions.
  See [Github PR #6952](https://github.com/firebase/firebase-js-sdk/pull/6952).

- Implemented `closed` property in the reader returned from
  `toByteStreamReaderHelper` which previously only raised an `unimplemented`
  error.
  See [Github PR #7058](https://github.com/firebase/firebase-js-sdk/pull/7058).

## Version 9.17.1 - February 3, 2023

- Moved `exports.default` fields to always be the last field. This fixes a bug introduced in 9.17.0 that prevented some bundlers and frameworks from building. For these build failures, the error text is: "Default condition should be last one".

## Version 9.17.0 - February 2, 2023

> [!CAUTION]
> **Caution:** Version 9.17.0 contains a bug causing errors in build tools that use the `exports` field in `package.json`. If you are seeing an error with the text "Default condition should be last one", upgrade to version 9.17.1 or later.

- Added browser CJS entry points (expected by Jest when using JSDOM mode). See [Github PR #6981](https://github.com/firebase/firebase-js-sdk/pull/6981).

### Authentication

- Exposed `TOKEN_EXPIRED` error when multi-factor authentication (MFA) unenroll logs out the user. See [Github PR #6973](https://github.com/firebase/firebase-js-sdk/pull/6973).

### Realtime Database

- Fixed issue where hostname set by `connectDatabaseEmulator` was being overridden by longpolling response. See [Github issue #4603](https://github.com/firebase/firebase-js-sdk/issues/4603).

### Cloud Firestore

- Reduced memory usage by applying query check sooner in remote document cache. See [Github PR #6989](https://github.com/firebase/firebase-js-sdk/pull/6989).

### Cloud Storage

- Fixed issue where users were unable to check if an error was an instance of `StorageError`. See [Github issue #6944](https://github.com/firebase/firebase-js-sdk/issues/6944).

## Version 9.16.0 - January 19, 2023

- Allow users to specify their environment as `node` or `browser`
  to override Firebase's runtime environment detection and force the SDK to act
  as if it were in the respective environment.

  Example:

  ```javascript
  export __FIREBASE_DEFAULTS__='{"forceEnvironment":"browser"}'
  ```
- Reformat a comment that causes compile errors in some build
  toolchains.
  See [Github issue #6838](https://github.com/firebase/firebase-js-sdk/issues/6838).

- Removed unused `peerDependencies` in `@firebase/auth-interop-types`.
  This should remove installation warnings for `firebase-admin` users.
  See [Github PR #6940](https://github.com/firebase/firebase-js-sdk/pull/6940).

### Authentication

- Added a fix to minimize a potential race condition between initialization of the Authentication SDK and `signInWithRedirect`. See [Github issue #6827](https://github.com/firebase/firebase-js-sdk/issues/6827).

### Realtime Database

- Fixed an issue where `connectDatabaseToEmulator` was sometimes called twice during a hot reload See [Github issue #6853](https://github.com/firebase/firebase-js-sdk/issues/6853).

### Cloud Firestore

- Updated internal logic behind `AND` and `OR` queries to ensure
  consistency with older implicit `AND` queries.
  See [Github PR #6896](https://github.com/firebase/firebase-js-sdk/pull/6896).

- Fixed an issue that stops some performance optimization being applied.
  See [Github PR #6893](https://github.com/firebase/firebase-js-sdk/pull/6893).

### Cloud Storage

- Fixed an issue where `pause` throws an error when a request is in flight. See [Github issue #6935](https://github.com/firebase/firebase-js-sdk/issues/6935).

## Version 9.15.0 - December 8, 2022

- Upgraded TypeScript in each individual package to 4.7.4. The
  earlier update in version 9.13.0 upgraded TypeScript only in the root.

- Fixed a bug that caused Firebase SDKs to throw an error in
  Firefox browsers when third-party cookies are blocked.
  See [Github issue #6801](https://github.com/firebase/firebase-js-sdk/issues/6801).

- Updated `firebase/[product]` entry point bundles to conform to
  Node.js ES module specifications.

### Realtime Database

- Added support for `startAfter` and `endBefore` query params to the REST API and wire protocol. This change does not affect the existing public API. See [Github PR #6706](https://github.com/firebase/firebase-js-sdk/pull/6706).

### Cloud Firestore

- Functions in the Firestore package that return `QueryConstraints` (for example: `where(...)`, `limit(...)`, and `orderBy(...)`) now return a more specific type, which extends `QueryConstraint`. See [Github PR #6694](https://github.com/firebase/firebase-js-sdk/pull/6694).

## Version 9.14.0 - November 10, 2022

### Cloud Messaging

- Exposed `icon` field for the `notification` payload. See [Github PR #6728](https://github.com/firebase/firebase-js-sdk/pull/6728).

### App Check

- Corrected the clearing of the App Check exchange promise after a request succeeds. See [Github issue #6734](https://github.com/firebase/firebase-js-sdk/issues/6734).

### Cloud Firestore

- Updated "missing index" error message to include the link to create
  the composite index.
  See [Github issue #6613](https://github.com/firebase/firebase-js-sdk/issues/6613).

- Updated `transaction.set()` failure to now retry on `already-exists`
  error.
  See [Github PR #6729](https://github.com/firebase/firebase-js-sdk/pull/6729).

### Performance Monitoring

- Expanded check in `getServiceWorkerStatus` to account for a `navigator` that has a key of `serviceWorker` with a falsy value. See [Github PR #6723](https://github.com/firebase/firebase-js-sdk/pull/6723).

## Version 9.13.0 - October 27, 2022

- Upgraded TypeScript to 4.7.4. See [Github PR #6682](https://github.com/firebase/firebase-js-sdk/pull/6682).

### Cloud Messaging

- Exposed `icon` field for the `notification` payload. See [Github PR #6722](https://github.com/firebase/firebase-js-sdk/pull/6722).

### Cloud Storage

- Fixed issue where clients using Node.js v18 would use the native `Blob` object, which is incompatible with `node-fetch`. See [Github PR #6705](https://github.com/firebase/firebase-js-sdk/pull/6705).

## Version 9.12.1 - October 12, 2022

- Added error catching for when the SDK checks `__FIREBASE_DEFAULTS__` in order to not block other app functionality on error. See [Github issue #6677](https://github.com/firebase/firebase-js-sdk/issues/6677).

### Analytics

- Corrected `id` type in `setUserId`. See [Github PR #6671](https://github.com/firebase/firebase-js-sdk/pull/6671).

### Cloud Storage

- Cleared retry timeouts when uploads are paused/canceled. See [Github PR #6667](https://github.com/firebase/firebase-js-sdk/pull/6667).

## Version 9.12.0 - October 11, 2022

- Removed `__FIREBASE_DEFAULTS_PATH__` option, as the current
  implementation caused Webpack warnings. Fixed `process.env` check to be
  compatible with environments where `process` exists but `process.env` does
  not.
  See [Github issue #6660](https://github.com/firebase/firebase-js-sdk/issues/6660).

- Fixed IPv6 addresses in emulator autoinit for Cloud Firestore,
  Realtime Database, Cloud Functions for Firebase Client SDK, and Cloud Storage.
  See [Github issue #6673](https://github.com/firebase/firebase-js-sdk/issues/6673).

### Cloud Firestore

- Set `withCredentials=true` when making requests via
  non-streaming RPCs, as is done for streaming RPCs.
  See [Github PR #6643](https://github.com/firebase/firebase-js-sdk/pull/6643).

- Fixed Firestore failing to raise initial snapshot from empty local
  cache result.
  See [Github issue #5873](https://github.com/firebase/firebase-js-sdk/issues/5873).

### Analytics

- Updated Analytics to allow for multiple instances of `gtag` with different data layer names. See [Github PR #6655](https://github.com/firebase/firebase-js-sdk/pull/6655).

### Realtime Database

- Fixed `endBefore` and `push` documentation typos in Realtime Database documentation. See [Github PR #6583](https://github.com/firebase/firebase-js-sdk/pull/6583).

### Cloud Storage

- Fixed bug where upload status wasn't being checked after an upload failure. Implemented exponential backoff and max retry strategy. See [Github PR #6653](https://github.com/firebase/firebase-js-sdk/pull/6653).

## Version 9.11.0 - October 06, 2022

- Added functionality to auto-initialize project config and emulator settings from global defaults. This allows the SDK to work with the upcoming framework-aware Firebase tools (currently an experimental release).

### App Check

- Fixed timer issues in the App Check SDK that caused the token to fail to refresh after it had expired, or had caused rapid repeated requests while attempting to do so. See [Github issue #6373](https://github.com/firebase/firebase-js-sdk/issues/6373).

### Cloud Firestore

- Added `getCountFromServer()` (`getCount()` in the Lite SDK), which
  fetches the number of documents in the result set without actually downloading
  the documents.

- Fixed a time travel issue across multiple tabs.
  See [Github issue #6511](https://github.com/firebase/firebase-js-sdk/issues/6511).

## Version 9.10.0 - September 15, 2022

### Authentication

- Updated custom claim type of `ParsedToken` to be `any`. This more accurately reflects that a JWT may contain any valid JSON object. See [Github issue #6553](https://github.com/firebase/firebase-js-sdk/issues/6553).

### Cloud Firestore

- Enabled `encodeInitMessageHeaders` to transition the Firestore client from encoding HTTP Headers via the `httpHeadersOverwriteParam` to the request's `POST` payload. Note, this requires Cloud Firestore Emulator v1.14.4 or newer. See [Github PR #6107](https://github.com/firebase/firebase-js-sdk/pull/6107).

## Version 9.9.4 - September 1, 2022

### Authentication

- Fixed proactive refresh logic in Authentication when Realtime Database, Cloud Firestore, or Cloud Storage are in use. See [Github PR #6544](https://github.com/firebase/firebase-js-sdk/pull/6544).

### Realtime Database

- Added experimental support for Deno. See [Github PR #6560](https://github.com/firebase/firebase-js-sdk/pull/6560).

### Cloud Firestore

- Fixed a bug that threw a `FAILED_PRECONDITION` error when writing to a deleted document in a transaction. See [Github issue #6550](https://github.com/firebase/firebase-js-sdk/issues/6550).

## Version 9.9.3 - August 18, 2022

- Removed all references to `@firebase/polyfill`. See [Github issue #6503](https://github.com/firebase/firebase-js-sdk/issues/6503).

### Realtime Database

- Fixed issue where `get()` would return incorrect results when using
  a filtered `get()` and an `onValue()` event listener on the same path.
  See [Github PR #6497](https://github.com/firebase/firebase-js-sdk/pull/6497).

- Fixed faulty transaction issue causing filtered index queries to
  override default queries.
  See [Github PR #6508](https://github.com/firebase/firebase-js-sdk/pull/6508).

- Reverted the type of `action` parameter for `DataSnapshot.forEach()`.
  See [Github issue #6368](https://github.com/firebase/firebase-js-sdk/issues/6368).

## Version 9.9.2 - August 04, 2022

- Prevent the SDK from throwing errors if it is unable to log platform data due to an IndexedDB error. It will log a warning instead. See [Github PR #6480](https://github.com/firebase/firebase-js-sdk/pull/6480).

### Realtime Database

- Updated the type of the `action` parameter for `DataSnapshot.forEach()`. See [Github issue #6368](https://github.com/firebase/firebase-js-sdk/issues/6368).

### Cloud Firestore

- Introduce client-side indexing with beta API `setIndexConfiguration()`. See [Github PR #6496](https://github.com/firebase/firebase-js-sdk/pull/6496).

## Version 9.9.1 - July 22, 2022

### App Check

- Fixed throttling for App Check to prevent unnecessary requests to the backend. See [Github issue #6373](https://github.com/firebase/firebase-js-sdk/issues/6373).

### Cloud Firestore

- Updated `@grpc/proto-loader` dependency to address `protobufjs` security issue. See [Github issue #6438](https://github.com/firebase/firebase-js-sdk/issues/6438).

### Testing SDK

- Updated `firebase-admin` and `firebase-functions` dependencies to address `protobufjs` security issue.

## Version 9.9.0 - July 07, 2022

- Added the missing CDN build and entry point for Firebase installations.

### Analytics

- Added function `setConsent()` to set the applicable end user
  "consent" state.

- Added function `setDefaultEventParameters()` to set data that
  is logged on every Analytics event.

### Authentication

- Fixed a bug that caused ReCAPTCHA conflicts between Authentication and
  App Check when using ReCAPTCHA Enterprise in App Check.
  See [Github issue #6133](https://github.com/firebase/firebase-js-sdk/issues/6133).

- Updated user agent detection to better detect iPad. This fixes
  a bug affecting some iPad devices running Cordova apps.
  See [Github issue #6331](https://github.com/firebase/firebase-js-sdk/issues/6331).

### Realtime Database

- Forced `get()` to wait to resolve until the SDK is connected to the Realtime Database backend. See [Github issue #6036](https://github.com/firebase/firebase-js-sdk/issues/6036).

### Cloud Firestore

- Fixed Node.js ESM `exports` paths for `firestore/lite`. See [Github issue #6414](https://github.com/firebase/firebase-js-sdk/issues/6414).

### Cloud Functions for Firebase Client SDK

- Updated `FunctionsErrorCode` type to include "functions/" prefix. See [Github issue #6281](https://github.com/firebase/firebase-js-sdk/issues/6281).

## Version 9.8.4 - June 23, 2022

### Analytics

- Fixed typo in `GtagConfigParams`. See [Github issue #6349](https://github.com/firebase/firebase-js-sdk/issues/6349).

### Realtime Database

- Fixed issue where `get()` saved results incorrectly for non-default queries. See [Github PR #6273](https://github.com/firebase/firebase-js-sdk/pull/6273).

## Version 9.8.3 - June 09, 2022

- Added `types` fields to `exports` object in `package.json` files
  for all published packages to make them [compatible with TypeScript 4.7 support
  of Node.js ES modules](https://devblogs.microsoft.com/typescript/announcing-typescript-4-7/#esm-nodejs).
  See [Github issue #6300](https://github.com/firebase/firebase-js-sdk/issues/6300).

- Fixed some incorrect `package.json` paths to entry points in
  Authentication and Cloud Firestore.

### Realtime Database

- Removed `@firebase/app-compat` as a `peerDependency` of `@firebase/database-compat`, which should not impact JS SDK users, but will prevent `firebase-admin` users from seeing a warning during npm installation.

### Cloud Messaging

- Fixed a bug where the `fcmOptions` field was missing from `onMessage()` and `onBackgroundMessage()` payloads. See [Github issue #6207](https://github.com/firebase/firebase-js-sdk/issues/6207).

### Cloud Storage

- Fixed the Node.js ESM bundle to build from the Node.js entry point (it was incorrectly using the browser entry point). See [Github issue #6343](https://github.com/firebase/firebase-js-sdk/issues/6343).

## Version 9.8.2 - May 27, 2022

### Authentication

- Added missing `identities` field to `firebase` claim in the
  typings for the ID token result.
  See [Github issue #6218](https://github.com/firebase/firebase-js-sdk/issues/6218).

- Updated the SDK to recognize Capacitor apps by detecting
  the `capacitor:` protocol.
  See [Github issue #5020](https://github.com/firebase/firebase-js-sdk/issues/5020).

- Fixed a bug where `error.email` and other fields were
  not populated in the Google Sign-In error flow if the user had been disabled
  using the Firebase Console.

## Version 9.8.1 - May 09, 2022

### Authentication

- Fixed some typings issues that caused compile errors for TypeScript users. See [Github issue #6246](https://github.com/firebase/firebase-js-sdk/issues/6246).

## Version 9.8.0 - May 06, 2022

- As of this version, Internet Explorer 11 is no longer officially
  supported by the Firebase JavaScript SDK.

- Restored `idb` dependency and increased to the latest version,
  which supports ESM. This affects Analytics,
  App Check, Cloud Messaging, Performance Monitoring, and Remote Config.
  See [Github issue #6154](https://github.com/firebase/firebase-js-sdk/issues/6154).

### Authentication

- Added a `beforeAuthStateChanged()` middleware function which allows you to provide callbacks that are run before an auth state change sets a new user.

### Realtime Database

- Added `forceWebSockets()` and `forceLongPolling()` methods.

### Cloud Firestore

- Added a `TransactionOptions` param to the `runTransaction()` method.

## Version 9.7.0 - April 28, 2022

### App Check

- Updated App Check to use `v1` exchange endpoint instead of `v1beta` endpoint for both reCAPTCHA v3 and reCAPTCHA Enterprise.

### Cloud Functions for Firebase Client SDK

- Added `httpsCallableFromURL()`, which calls a callable function using its URL.

## Version 9.6.11 - April 14, 2022

- Set default IndexedDB transaction mode to `readonly` for IE11 compatibility.

### Realtime Database

- Fixes an issue where if a websocket protocol was used in the
  `databaseURL`, the `webSocketOnly` field was incorrectly set to undefined. (When
  using `wss` or `ws` protocols in the `databaseURL`, `webSocketOnly` is
  true and long polling is disabled).
  See [Github PR #6126](https://github.com/firebase/firebase-js-sdk/pull/6126).

- Updated compat typings for `Reference` methods.
  See [Github issue #6071](https://github.com/firebase/firebase-js-sdk/issues/6071).

### Cloud Firestore

- Fixes an issue during multi-document lookup that resulted in the IndexedDB error "The parameter is less than or equal to this cursor's". See [Github issue #6110](https://github.com/firebase/firebase-js-sdk/issues/6110).

## Version 9.6.10 - March 24, 2022

- Removed unneeded typings from the internal package `@firebase/util`. These typings caused errors in some projects using both Node.js and TypeScript.

### App Check

- Fixed a bug where `@firebase/app-check-types` was not included as a dependency of `@firebase/app-check-compat`. This could potentially affect TypeScript compilation for users of the `app-check-compat` package.

### Cloud Firestore

- Changed the format of some of the IndexedDB data stored by the Cloud Firestore SDK. This increases the performance of document lookups after an initial migration. If you do not want to migrate data, you can call `clearIndexedDbPersistence()` before invoking `enableIndexedDbPersistence()`.

## Version 9.6.9 - March 17, 2022

- Replaced `idb` dependency with in-house code to fix errors that occur when Node.js or SSR apps target ESM. This includes apps using Angular 13.1+. This fix affects Analytics, App Check, Cloud Messaging, Performance Monitoring, and Remote Config. See [Github issue #6042](https://github.com/firebase/firebase-js-sdk/issues/6042).

## Version 9.6.8 - March 4, 2022

### Cloud Messaging

- Fixed a bug in `onBackgroundMessage()` that caused notifications to display twice. See [Github issue #5516](https://github.com/firebase/firebase-js-sdk/issues/5516).

## Version 9.6.7 - February 17, 2022

### Cloud Firestore

- Fixed a bug that caused Cloud Firestore streams to get restarted with
  the same App Check token.

- On browsers that support IndexedDB v3, we now invoke
  `transaction.commit()` and `IndexedDB.getAll()` to speed up data processing.

- Cloud Firestore queries are now sent to the backend before the SDK starts local
  processing, which reduces overall `Query` latency.

## Version 9.6.6 - February 3, 2022

### Authentication

- Fixed a bug where the `user.providerData` field was being improperly initialized. See [firebaseui-web Github issue #917](https://github.com/firebase/firebaseui-web/issues/917).

### Cloud Firestore

- Added to the version 9 [upgrade guide](https://firebase.google.com/docs/web/modular-upgrade.md.txt#exists-update) important details about a **potential breaking change** in which the property `DocumentSnapshot.exists` has been changed from a property to a method. If your version 8-based app uses the `exists` property, you must refactor your code as part of the upgrade to version 9.

### Cloud Messaging

- Fixed an uncaught rejection in `isSupported()` when the environment does not support IndexedDB's `open()` method. See [Github issue #5868](https://github.com/firebase/firebase-js-sdk/issues/5868).

## Version 8.10.1 - January 28, 2022

> [!NOTE]
> **Note:** This is an emergency security update for any users who are still on version 8 of the SDK and are unable to migrate to v9. The v8 SDK is updated only for emergency security fixes, and does not benefit from any other bug fixes or new features. The latest version of the Firebase JS SDK is still 9.6.5 (see below).

- Updated `node-fetch` dependency due to a security issue ([CVE-2022-0235](https://nvd.nist.gov/vuln/detail/CVE-2022-0235)).

## Version 9.6.5 - January 27, 2022

- Updated `node-fetch` dependency due to a security issue ([CVE-2022-0235](https://nvd.nist.gov/vuln/detail/CVE-2022-0235)).

### Authentication

- Fixed errors in `auth-compat` when cookies are fully disabled in
  Chrome.
  See [Github issue #5913](https://github.com/firebase/firebase-js-sdk/issues/5913).

- Added missing `PhoneMultiFactorInfo` public interface.
  See [Github issue #5922](https://github.com/firebase/firebase-js-sdk/issues/5922).

- The SDK no longer causes React Native to log a warning about deprecation of
  `AsyncStorage` if the developer has provided the non-deprecated version.
  See [Github issue #1847](https://github.com/firebase/firebase-js-sdk/issues/1847).

### Cloud Firestore

- Fixed an App Check issue that caused Cloud Firestore listeners to stop working and receive a "Permission Denied" error. This issue only affected App Check developers that set their expiration time to under an hour. See [Github issue #5842](https://github.com/firebase/firebase-js-sdk/issues/5842).

## Version 9.6.4 - January 20, 2022

### Authentication

- Fixed the error code thrown when the network times out.
  See [Github issue #5874](https://github.com/firebase/firebase-js-sdk/issues/5874).

- Added `./cordova` and `./react-native` paths to the `exports` field
  in `package.json`.
  See [Github issue #5878](https://github.com/firebase/firebase-js-sdk/issues/5878).

### Cloud Messaging

- Changed `exports` paths to always point to `.cjs` bundles when in a Node.js context, since the Cloud Messaging SDK is currently unable to provide ESM bundles for Node.js. See [Github issue #5839](https://github.com/firebase/firebase-js-sdk/issues/5839).

## Version 9.6.3 - January 13, 2022

### Cloud Firestore

- The Node.js SDK now bundles its internal `.proto` files into the code instead of reading them from the filesystem at runtime. This prevents errors like `no such file or directory` in certain types of deployments. See [Github issue #5823](https://github.com/firebase/firebase-js-sdk/issues/5823).

### Cloud Messaging

- Fixed a bug where the `fcmMessageId` field in the message payload was
  incorrectly defined as `fcm_message_id`.

- Add a CJS bundle for `messaging/sw`. This enables some SSR
  frameworks to run their Node.js pipelines without erroring.
  See [Github issue #5854](https://github.com/firebase/firebase-js-sdk/issues/5854).

## Version 9.6.2 - January 7, 2022

### Authentication

- Fix persistence selection in compatibility layer in worker scripts. See [Github issue #5791](https://github.com/firebase/firebase-js-sdk/issues/5791).

### Cloud Firestore

- `FirestoreError` now extends `FirebaseError`.
  See [Github issue #5754](https://github.com/firebase/firebase-js-sdk/issues/5754).

- Fixed an issue that caused incomplete `Query` snapshots when the
  SDK is backgrounded during query execution.

### Cloud Storage

- `StorageError` now extends `FirebaseError`. See [Github issue #5754](https://github.com/firebase/firebase-js-sdk/issues/5754).

## Version 9.6.1 - December 9, 2021

### Authentication

- Fixed errors that occurred during initialization of the Authentication SDK when the network is unavailable. See [Github issue #5720](https://github.com/firebase/firebase-js-sdk/issues/5720).

### Cloud Firestore

- Hardcoded the version of grpc-js sent to logs as a temporary fix for `createRequire` issues in the Node.js CJS bundle.

## Version 9.6.0 - December 2, 2021

### Cloud Firestore

- Added support for App Check.

## Version 9.5.0 - November 18, 2021

### Cloud Storage

- Added `getBytes()`, `getStream()` and `getBlob()`, which allow direct file downloads from the SDK. `getStream()` is only available for Node.js and `getBlob()` is only available for browser-like environments.

### App Check

- Reduced the latency of the first `getToken()` call by proactively retrieving a token when App Check is initialized.

- App Check now throttles requests after some error codes to prevent overwhelming the endpoint.

### Cloud Firestore

- The SDK no longer accesses `IndexedDB` during a page unload event on Safari 15. This aims to reduce the occurrence of an `IndexedDB` bug in Safari (https://bugs.webkit.org/show_bug.cgi?id=226547).
  See [Github issue #5716](https://github.com/firebase/firebase-js-sdk/issues/5716).

- Updated the Node.js build to work better with Jest.
  See [Github issue #5687](https://github.com/firebase/firebase-js-sdk/issues/5687).

## Version 9.4.1 - November 11, 2021

### Authentication

- Added `getReactNativePersistence()` as an export from the React Native bundle. See [Github issue #1847](https://github.com/firebase/firebase-js-sdk/issues/1847).

### Cloud Functions for Firebase Client SDK

- Clear pending timeout after `Promise.race()`. It allows the process to exit immediately in case the SDK is used in Node.js. Otherwise the process waits for the timeout to finish before exiting. See [Github issue #5692](https://github.com/firebase/firebase-js-sdk/issues/5692).

### Cloud Storage

- Clear the global timeout once an operation is done in the Cloud Storage SDK. Otherwise the pending timeout may prevent Node.js from exiting. See [Github issue #5628](https://github.com/firebase/firebase-js-sdk/issues/5628).

## Version 9.4.0 - November 08, 2021

### Realtime Database

- Fixed a packaging issue that broke the Firebase Admin Node.js SDK. see [Github issue #1487](https://github.com/firebase/firebase-js-sdk/issues/1487).

### Cloud Firestore

- Expanded `Firestore.WithFieldValue<T>` to include `T`. This allows developers to delegate `WithFieldValue<T>` inside wrappers of type `T` to avoid exposing Firebase types beyond Firebase-specific logic. see [Github issue #5661](https://github.com/firebase/firebase-js-sdk/issues/5661).

## Version 9.3.0 - November 04, 2021

- Added ESM entry point for Node.js and added `exports` field support to all packages.

### App Check

- Added ReCAPTCHA Enterprise as an attestation option.

### Authentication

- Added the missing `SAMLAuthProvider` to the compatibility layer.

- Fixed bug that caused `onAuthStateChanged` to be fired twice.
  See [Github issue #5685](https://github.com/firebase/firebase-js-sdk/issues/5685).

## Version 9.2.0 - October 28, 2021

- Added an empty typings file to the `firebase` package to fix autocomplete problems in some IDEs. See [Github issue #5649](https://github.com/firebase/firebase-js-sdk/issues/5649).

### Authentication

- Fixed behavior on subsequent calls to `getRedirectResult()`.
  See [Github issue #5610](https://github.com/firebase/firebase-js-sdk/issues/5610).

- Fixed the public `AuthError` typing and update the `MultiFactorError`
  implementation to follow the new standard (where all fields are listed under
  `customData`).

- Fixed an error raised in Lighthouse reports by adding the attribute
  `aria-hidden="true"` to the embedded iframe.
  See [Github issue #5631](https://github.com/firebase/firebase-js-sdk/issues/5631).

- The SDK now exports phone sign-in functionality in the React Native entry point
  (except for `RecaptchaVerifier`).

- Made the SDK resilient against `localStorage` and `sessionStorage`
  permissions errors.
  See [Github issue #5618](https://github.com/firebase/firebase-js-sdk/issues/5618).

- Fixed compatibility layer (`auth-compat`) errors that were being
  thrown in Safari.
  See [Github issue #5644](https://github.com/firebase/firebase-js-sdk/issues/5644).

### Cloud Firestore

- Fixed `exports` fields to also point to ESM builds for Node.js. This
  change requires Node.js version 10+.
  See [Github issue #5499](https://github.com/firebase/firebase-js-sdk/issues/5499).

- Added missing compat conversion for `runTransaction`.
  See [Github issue #5627](https://github.com/firebase/firebase-js-sdk/issues/5627).

- Changed the networking API to use XHR instead of `fetch()` for
  React Native.
  See [Github issue #1674](https://github.com/firebase/firebase-js-sdk/issues/1674).

## Version 9.1.3 - October 14, 2021

### Cloud Storage

- Fixed a bug causing an unhandled promise rejection in Node.js when the Cloud Storage client encounters a network error. See [Github issue #5372](https://github.com/firebase/firebase-js-sdk/issues/5372).

## Version 9.1.2 - October 07, 2021

### App Check

- Fixed incorrect typings.
  See [GitHub issue #5569](https://github.com/firebase/firebase-js-sdk/issues/5569).

- Updated `@firebase/app-check-compat` to correctly export and handle
  `ReCaptchaV3Provider` and `CustomProvider` classes.

### Authentication

- Calls to `connectAuthEmulator` with the `disableWarnings` flag set to true
  will no longer cause a `console.info` warning to be printed.

- Fixed a bug in the `OAuthProvider.prototype.credential` method that
  was preventing the `rawNonce` field from being populated in the returned `OAuthCredential`.
  See [GitHub issue #5553](https://github.com/firebase/firebase-js-sdk/issues/5553).

- Fixed a bug where `user.tenantId` wasn't being carried over in the `updateCurrentUser` function.

- Fixed an issue in `@firebase/auth-compat` where the SDK tried to access fields from a `undefined` variable.

## Version 9.1.1 - September 30, 2021

### Authentication

- Fixed a bug on iOS causing incorrectly formatted links to be sent in emails. See [GitHub issue #5541](https://github.com/firebase/firebase-js-sdk/issues/5541).

## Version 9.1.0 - September 24, 2021

### Authentication

- All browser persistence implementations such as `indexedDBLocalPersistence`
  are mapped to `inMemoryPersistence` in Node.js to allow isomorphic code that works well
  with use cases like server-side rendering.

- `emailVerified` field is now set in the `User` correctly.
  See [GitHub issue #5430](https://github.com/firebase/firebase-js-sdk/issues/5430).

- Added missing phone `FACTOR_ID` static property to the `PhoneMultiFactorGenerator` class.
  See [GitHub issue #5480](https://github.com/firebase/firebase-js-sdk/issues/5480).

- Fixed wrongly-typed `tenantId` fields in requests to some endpoints.

### Cloud Firestore

- Fixed a bug where `UpdateData` did not recognize union types or optional, dot-separated string fields.

### Remote Config

- Added an `isSupported()` function. You can use this function to check if the current environment supports Remote Config, and only initialize Remote Config in supported environments.

### Analytics

- Fixed an issue where `isSupported()` throws unexpected errors in certain environments.

### App Check

- Initialization no longer throws runtime errors in Node.js.

- Debug mode check is delayed till `initializeAppCheck()` is called.

### Cloud Messaging

- Fixed an issue where `isSupported()` throws unexpected errors in certain environments.

### Performance Monitoring

- Fixed an issue where `isSupported()` throws unexpected errors in certain environments.

### Testing SDK

- Fixed typing issues where `Database`/`Firestore`/`Storage` compat
  instances returned by `RulesTestContext` are not compatible with v9 modular APIs.

- Set `RTDB` namespace to be same as `projectId` by default instead of `${projectId}-default-rtdb`.
  This fixes rules not being applied and other issues related to namespace mismatch.

## Version 9.0.2 - September 9, 2021

### Authentication

- Fixed a bug where custom errors from blocking functions were being
  dropped.
  See [GitHub issue #5386](https://github.com/firebase/firebase-js-sdk/issues/5386).

- Removed `const enum`s from the public typings file.

### Cloud Firestore

- Improved the error handling when the SDK encounters a failure opening
  IndexedDB in a Firefox private browsing session.
  See [GitHub issue #5377](https://github.com/firebase/firebase-js-sdk/issues/5377).

- Fixed a deadlock during asynchronous initialization of both
  Cloud Firestore and Authentication.
  See [GitHub issue #5402](https://github.com/firebase/firebase-js-sdk/issues/5402).

- Fixed the behavior of `collection()` when passed multiple path
  segment strings.
  See [GitHub issue #5431](https://github.com/firebase/firebase-js-sdk/issues/5431).

- Added a temporary workaround for a bug causing `initializeFirestore()`
  to throw errors when used in certain build pipelines, such as the default
  production build for Create React App.
  See [GitHub issue #5384](https://github.com/firebase/firebase-js-sdk/issues/5384).

### Cloud Functions for Firebase Client SDK

- The SDK now omits sending an App Check token header to the Cloud Functions endpoint if there is no valid App Check token to send.

### Cloud Storage

- Fixed a bug that incorrectly threw an error when using `refFromUrl()` with `connectStorageEmulator()`. See [Github issue #3715 in firebase-tools](https://github.com/firebase/firebase-tools/issues/3715).

## Version 9.0.1 - August 30, 2021

- Fixed `.cjs` builds that caused errors in
  Node.js use cases, such as using SSR in AngularFire.
  See [GitHub PR #5400](https://github.com/firebase/firebase-js-sdk/pull/5400).

- Fixed a typing issue in `@firebase/app-compat`.
  See [GitHub issue #5382](https://github.com/firebase/firebase-js-sdk/issues/5382).

- Fixed incorrect import of `node-fetch` polyfill that caused uncaught
  exceptions when using Cloud Storage and the `firestore/lite` package from
  Cloud Firestore.

### Authentication

- Fixed a typing issue caused by a missing constructor for `OAuthProvider`.

### Cloud Firestore

- Added export fields to make `firestore/lite` available in Node.js.
  See [GitHub PR #5400](https://github.com/firebase/firebase-js-sdk/pull/5400).

- Fixed incorrect import of `node-fetch` polyfill that caused uncaught
  exceptions when using `firestore/lite`.

## Version 9.0.0 - August 25, 2021

- This release introduces the new modular API, which enables tree-shaking, bundle size reduction, and other benefits. See [SDK versions 8 and 9](https://firebase.google.com/docs/web/learn-more.md.txt#modular-version) for more details. Users of version 8 will need to update their code in order for it to still work with version 9.0.0 and higher. We have provided a compat package to make this migration easier. See the [upgrade guide](https://firebase.google.com/docs/web/modular-upgrade.md.txt) for instructions for upgrading from version 8 or the [setup guide](https://firebase.google.com/docs/web/setup.md.txt) for instructions for getting started from scratch with version 9+.

### Cloud Messaging

- FCM now provides delivery data export to BigQuery as an Alpha feature. See [Enable message delivery data export](https://firebase.google.com/docs/cloud-messaging/understand-delivery.md.txt#enable-message-delivery-data-export).

### Cloud Firestore

- This release introduces Firestore Lite, a lightweight, standalone REST-only Firestore SDK that supports single document fetches, query execution, and document updates, at a fraction of the regular Web SDK size. See [Cloud Firestore Lite Web SDK](https://firebase.google.com/docs/firestore/solutions/firestore-lite.md.txt).

## Version 8.10.0 - August 19, 2021

- Added or updated the `mockUserToken` option provided to the `useEmulator()` functions in Realtime Database, Cloud Firestore, and Cloud Storage. The details for each product are below.

### Realtime Database

- Allow `useEmulator()` to also accept a string for its `mockUserToken` option.

### Cloud Firestore

- Allow `useEmulator()` to also accept a string for its `mockUserToken` option.

### Cloud Storage

- Add an options object containing `mockUserToken` as a param for
  `useEmulator()`.

- Changed `ref()` so it does not throw if given a path string that
  contains `..`.

### Cloud Messaging

- Exposed the `messageId` property on `MessagePayload`.

### Testing SDK

- Fixed JWT encoding bug that broke interoperability with the Cloud Storage emulator.

## Version 8.9.1 - August 10, 2021

### App Check

- Fixed typings on params passed to `activate()`.

## Version 8.9.0 - August 5, 2021

### Analytics

- Fixed formatting of documentation comments and updated some event typings to correctly match Google Analytics 4 specs.

### App Check

- Add `RecaptchaV3Provider` and `CustomProvider` classes that can be supplied as params to `firebase.appCheck().activate()`.

### Cloud Storage

- Added a browser CJS build as `./dist/index.browser.cjs.js`. This change was primarily to prevent breaking the Emulator UI.

## Version 8.8.1 - July 29, 2021

- Added a missing dependency in the `@firebase/app-types` package.

## Version 8.8.0 - July 22, 2021

### Analytics

- Added `firebase_screen` and `firebase_screen_class` to `logEvent()` overload for `screen_view` events. These fields are required to log `screen_view` events correctly to Analytics.

### Realtime Database

- Fixed sending of Authentication tokens in Node.js. This bug affected Admin SDK users who have App Check enforced.

### Cloud Firestore

- The SDK no longer accesses IndexedDB during a page unload event on
  Safari 14. This aims to reduce the occurrence of an IndexedDB bug in Safari
  (https://bugs.webkit.org/show_bug.cgi?id=226547).
  See [GitHub issue #4076](https://github.com/firebase/firebase-js-sdk/issues/4076).

- Fixed an issue that prevented `Date` objects from being used via
  `update()` when connected to the Cloud Firestore emulator.

### Cloud Storage

- Added Node.js support to Cloud Storage for Firebase. This release changes the `main` field in `package.json` to point to a Node-specific build. If you are building a bundle for browser usage, make sure that your bundler uses the `browser` field (this is usually the default).

## Version 8.7.1 - July 8, 2021

### Realtime Database

- In Node.js, always send Authentication and App Check tokens when they are available.

## Version 8.7.0 - July 1, 2021

### App Check

- Added a `getToken()` method that returns an App Check token asynchronously.

- Added an `onTokenChanged()` method that adds listeners to App Check token changes.

- Fixed an error causing `HTTP status 429` errors in debug mode.
  See [GitHub issue #5052](https://github.com/firebase/firebase-js-sdk/issues/5052).

### Authentication

- Fixed an issue where Cloud Firestore didn't detect Authentication, which led to permission denied errors. See [GitHub issue #4932](https://github.com/firebase/firebase-js-sdk/issues/4932).

## Version 8.6.8 - June 17, 2021

### Authentication

- Fixed a bug where `linkWithPopup`, `linkWithRedirect`, `reauthenticateWithPopup`, and `reauthenticateWithRedirect` weren't correctly picking up the emulator configuration. See [GitHub issue #4879](https://github.com/firebase/firebase-js-sdk/issues/4879).

### Cloud Firestore

- Fixed a bug that caused `Uncaught TypeError: e.auth.addAuthTokenListener is not a function`. See [GitHub issue #5018](https://github.com/firebase/firebase-js-sdk/issues/5018).

## Version 8.6.7 - June 10, 2021

### Cloud Firestore

- Fixed a regression that prevented Cloud Firestore from detecting the Authentication service during initialization, which prevented some writes from being sent.

## Version 8.6.5 - June 4, 2021

- Fixed an error where `firebase.SDK_VERSION` did not always contain the correct version number.

### Cloud Firestore

- Fixed an issue where `FetchXmlHttpFactory` was not available.

## Version 8.6.4 - June 3, 2021

> [!CAUTION]
> **Caution:** Version 8.6.4 contains an issue that causes crashes in Cloud Firestore. If you use Cloud Firestore, upgrade to version 8.6.5 or later.

### Cloud Functions for Firebase Client SDK

- JavaScript `Date` objects are now serialized to an ISO string instead of an empty object.

## Version 8.6.3 - May 27, 2021

### Realtime Database

- Fixed an `"index not defined"` error that sometimes occurred during a `get()` call on an `orderByChild` query.

### Cloud Firestore

- Added a warning message when `settings()` is used to override the original value of `host` without also setting `{merge: true}`.

## Version 8.6.2 - May 20, 2021

### Cloud Firestore

- Use `pagehide` event for page termination by default, instead of `unload`. See [docs on `pagehide` vs `unload`](https://developers.google.com/web/updates/2018/07/page-lifecycle-api#legacy-lifecycle-apis-to-avoid).

### Cloud Functions for Firebase Client SDK

- Fixed a bug in `httpsCallable()` when it is used in the same project as Cloud Messaging. See [GitHub issue #4909](https://github.com/firebase/firebase-js-sdk/issues/4909).

### Testing SDK

- Prevent `useEmulators()` from erroring when only the `storage` field is populated in the options parameter.

## Version 8.6.1 - May 12, 2021

- Fixed a bug that caused crashes in Cloud Storage, Cloud Functions for Firebase Client SDK, and Realtime Database when using the all-in-one `firebase` import, as in `import firebase from 'firebase'`.

### Realtime Database

- Fixed an issue that could cause `once()` to fire more than once if the value was modified inside its callback.

## Version 8.6.0 - May 11, 2021

> [!CAUTION]
> **Caution:** Version 8.6.0 contains an issue that causes crashes in Cloud Storage, Cloud Functions for Firebase Client SDK, and Realtime Database when using the all-in-one `firebase` import. If you use these products, upgrade to version 8.6.1 or later.

### App Check

- Published the App Check package.

### Realtime Database

- Fixed typings for `useEmulator`.

### Testing SDK

- Added support for Cloud Storage emulator.

## Version 8.5.0 - May 5, 2021

### Realtime Database

- `useEmulator` now accepts an optional `mockUserToken`.

### Cloud Firestore

- `useEmulator` now accepts an optional `mockUserToken`.

## Version 8.4.3 - April 29, 2021

### Realtime Database

- Fixed an issue that prevented the SDK from firing cancel events for
  Firebase Security Rules violations.
  See [GitHub issue #4818](https://github.com/firebase/firebase-js-sdk/issues/4818).

- Fixes a regression introduced in version 8.4.1 that broke `useEmulator()`.
  See [GitHub issue #4811](https://github.com/firebase/firebase-js-sdk/issues/4811).

## Version 8.4.2 - April 23, 2021

- Fixed outdated `peerDependencies`.

### Cloud Firestore

- Fixed an issue where errors from `grpc` are thrown directly to user code.
  Now they are wrapped in `FirestoreError`.

- Fixed an issue where an empty `X-Firebase-GMPID` header is sent in the request when `appId` is not available.
  See [GitHub issue #4795](https://github.com/firebase/firebase-js-sdk/issues/4795).

### Cloud Storage

- Fixed the infinite recursion caused by the `FirebaseStorageError` message getter.

## Version 8.4.1 - April 13, 2021

### Realtime Database

- Fixed a build issue that caused SDK breakage.

## Version 8.4.0 - April 12, 2021

### Cloud Storage

- Added a `storage().useEmulator()` method to enable emulator mode for storage. This allows you to set a storage emulator host and port.

### Cloud Firestore

- Fixed a bug where decimal inputs to `Timestamp.fromMillis()` were calculated incorrectly due to floating point precision loss.

## Version 8.3.3 - April 08, 2021

- This update only includes internal refactoring.

## Version 8.3.2 - March 31, 2021

- This update includes internal refactoring.

## Version 8.3.1 - March 18, 2021

- Fixed a bug caused by an outdated version of the `tslib` dependency. See [GitHub issue #4633](https://github.com/firebase/firebase-js-sdk/issues/4633).

## Version 8.3.0 - March 10, 2021

### Cloud Firestore

- Added support to remove the `FirestoreDataConverter` on a `Firestore` reference by calling `withConverter(null)`

## Version 8.2.10 - March 4, 2021

### Analytics

- Fixed typings for `analytics().logEvent()` so that the `eventParams` argument is correctly typed as optional.

## Version 8.2.9 - February 19, 2021

- API update for an internal package. There is no change in the public API.

## Version 8.2.8 - February 18, 2021

### Analytics

- Fixed a behavior causing `gtag.js` to be downloaded twice on Firebase Analytics initialization. See [GitHub issue #2628](https://github.com/firebase/firebase-js-sdk/issues/2628).

## Version 8.2.7 - February 11, 2021

### Realtime Database

- Fixed an issue with `Query.get()` where `Query` filters were not applied to data in some cases.

- Added the missing type definitions for `startAfter()` and `endBefore()`.

### Cloud Firestore

- Fixed a bug where local cache inconsistencies were unnecessarily being resolved.

- Fixed the path to the react native memory-only build.

## Version 8.2.6 - February 04, 2021

### Authentication

- Fixed a bug where UTF-8 encoded strings were not decoded in `getIdTokenResult`. See [GitHub issue #4174](https://github.com/firebase/firebase-js-sdk/issues/4174).

### Realtime Database

- Fixed an issue with `startAfter`/`endBefore` when used in `orderByKey` queries.

### Cloud Firestore

- Correctly handle `ignoreUndefinedProperties` in `set({ merge: true })`. Previously this would behave as if the undefined value were `FieldValue.delete()`, which wasn't intended.

## Version 8.2.5 - January 28, 2021

### Realtime Database

- When issued for queries that are being listened to, `get()` calls no longer send backend requests.

### Cloud Firestore

- Classes like `DocumentReference` and `Query` can now be serialized to JSON. See [GitHub issue #4258](https://github.com/firebase/firebase-js-sdk/issues/4258).

## Version 8.2.4 - January 21, 2021

### Realtime Database

- Added `startAfter` and `endBefore` filters for paginating Realtime Database queries.

### Authentication

- Added the `useEmulator()` function and `emulatorConfig` to the `firebase` package externs.

### Cloud Firestore

- Fixed an error that caused `FirestoreDataConverter.fromFirestore()` to be called with an incorrect `QueryDocumentSnapshot` object. See [GitHub issue #4278](https://github.com/firebase/firebase-js-sdk/issues/4278)

## Version 8.2.3 - January 14, 2021

### Realtime Database

- Fixed an issue that caused `refFromUrl()` to reject production database URLs when `useEmulator()` was used.

## Version 8.2.2 - January 7, 2021

### Realtime Database

- Fixed an issue with multiple database instances when using the Realtime Database emulator. See [GitHub issue #3681](https://github.com/firebase/firebase-js-sdk/issues/3681)

### Cloud Firestore

- Updated an outdated error message to include `!=` and `not-in` as
  inequality operators.
  See [GitHub issue #4253](https://github.com/firebase/firebase-js-sdk/issues/4253)

- Fixed an issue in the Transaction API that caused the SDK to
  return invalid `DocumentReference` objects through `DocumentSnapshot.data()`
  calls.
  See [GitHub issue #4226](https://github.com/firebase/firebase-js-sdk/issues/4226)

## Version 8.2.1 - December 17, 2020

### Authentication

- Updated auth token logic to rely on device clock time instead of server time. This fixes an issue seen when a device's clock is skewed by a lot: see [GitHub issue #3222](https://github.com/firebase/firebase-js-sdk/issues/3222)

### Cloud Firestore

- Fixed an issue that prevented the SDK from automatically retrieving custom claims for a `User`. See [GitHub issue #4175](https://github.com/firebase/firebase-js-sdk/issues/4175)

## Version 8.2.0 - December 11, 2020

### Authentication

- Added an option to hide the banner in Auth when using the emulator.

### Cloud Firestore

- Released Firestore Bundles (pre-packaged Firestore data). For NPM users, this can
  be enabled via an additional import: `firebase/firestore/bundle`. For CDN usage,
  it is enabled by default.

- A write to a document that contains `FieldValue` transforms is no
  longer split up into two separate operations. This reduces the number of writes
  the backend performs and allows each `WriteBatch` to hold 500 writes regardless
  of how many `FieldValue` transformations are attached.

### Performance Monitoring

- Changed to dispatch no more than 1000 collected performance events for each network request. Events over the cap will be queued and sent with the next dispatch.

## Version 8.1.2 - December 3, 2020

### Authentication

- Fixed an issue with IndexedDB retry logic causing uncaught errors.

### Cloud Firestore

- Fixed a bug that prevented usage of `FieldPath` objects with
  multiple special characters.

- Fixes an issue that returned invalid `DocumentReference` instances
  from `QuerySnapshot` objects.
  See [GitHub issue #4125](https://github.com/firebase/firebase-js-sdk/issues/4125)

### Testing SDK

- Fixed `assertFails` not recognizing `permission-denied` errors from Realtime Database.

## Version 8.1.1 - November 19, 2020

### Realtime Database

- Added the missing type definition for `Query.get()`.

### Cloud Firestore

- Fixed an issue that prevented `experimentalAutoDetectLongPolling` from working correctly.

## Version 8.1.0 - November 19, 2020

### Realtime Database

- We have identified an issue in the newly added `Query.get()` API. This causes data to be returned which doesn't match the Query filters. We are working on providing a fix.
- Added a database query `get` method that returns server results when connected.

### Cloud Firestore

- Fixed a regression introduced in v8.0.2 that returned invalid values for `DocumentChange.newIndex`. See [GitHub issue #4071](https://github.com/firebase/firebase-js-sdk/issues/4071)

## Version 8.0.2 - November 12, 2020

### Authentication

- The SDK now retries IndexedDB errors a fixed number of times to handle connection issues in mobile WebKit. Fixes [GitHub issue #1926](https://github.com/firebase/firebase-js-sdk/issues/1926).

### Cloud Firestore

- Fixed an issue that caused `DocumentReference` objects in `DocumentSnapshot` instances to be returned with the custom converter of the original `DocumentReference`.

## Version 8.0.1 - November 5, 2020

### Cloud Messaging

- Fixed an issue where a silent-push warning was displayed along with the message shown by `ServiceWorkerRegistration.showNotification`. Added a timeout for the `onBackgroundMessage` hook so that silent-push warnings won't show if `ServiceWorkerRegistration.showNotification` is called inside the hook within 1 second. See [GitHub issue #3725](https://github.com/firebase/firebase-js-sdk/issues/3725).

### Testing SDK

- Added a `withFunctionTriggersDisabled` method which runs a user-provided setup function with emulated Cloud Functions triggers disabled. This can be used to import data into the Realtime Database or Cloud Firestore emulators without triggering locally emulated functions. This method only works with Firebase CLI version 8.13.0 or higher.

## Version 8.0.0 - October 26, 2020

- **Breaking change** : `browser` fields in package.json files now point to ESM bundles
  instead of CJS bundles. Users who are using ESM imports must now use the
  default import instead of a namespace import.

  **Before 8.0.0**

  ```javascript
  import * as firebase from 'firebase/app'
  ```

  **After 8.0.0**

  ```javascript
  import firebase from 'firebase/app'
  ```

  Code that uses `require('firebase/app')` or `require('firebase')`
  will still work, but in order to
  get proper typings (for code completion, for example) users should change
  these `require` calls to `require('firebase/app').default` or
  `require('firebase').default`.
  This is because the SDK now uses typings for the ESM bundle, and the different bundles share
  one typings file.

### Cloud Firestore

- Removed the undocumented `Firestore.logLevel` property.

- **Breaking change** : Removed deprecated `experimentalTabSynchronization` settings.
  To enable multi-tab synchronization, use `synchronizeTabs` instead.

- This release removes runtime type validations that are covered
  by TypeScript. Developers can use our
  TypeScript types to validate API usage.

- **Breaking change** : Removed the `timestampsInSnapshots` option from
  `FirestoreSettings`. Now, Cloud Firestore always returns `Timestamp` values for all
  timestamp values.

- Added a `useEmulator(host, port)` method to Cloud Firestore.

- Removed excess validation of null and NaN values in query
  filters. This more closely aligns the SDK with the Cloud Firestore backend, which
  has always accepted null and NaN for all operators.

### Cloud Storage

- This release removes runtime type validations that are covered by TypeScript. Developers can use our TypeScript types to validate API usage.

### Realtime Database

- Added a `useEmulator(host, port)` method to Realtime Database.

### Cloud Functions for Firebase Client SDK

- Added a `useEmulator(host, port)` method to the Cloud Functions for Firebase Client SDK.

## Version 7.24.0 - October 15, 2020

### Authentication

- Added the ability to configure the SDK to communicate with the Firebase Emulator.

### Cloud Firestore

- Added a new `experimentalAutoDetectLongPolling` to `FirestoreSettings`. When
  enabled, the SDK's underlying transport layer automatically detects if
  long-polling should be used. This is very similar to
  `experimentalForceLongPolling`, but only uses long-polling if required.

- Fixed a potential issue in our internal queue that could have allowed API calls to be executed out of order.

### Testing SDK

- Changed to not delete the `uid` property from user auth object in `initializeTestApp()`.
  See [GitHub issue #3920](https://github.com/firebase/firebase-js-sdk/issues/3920).

- Fixed the typing for custom claims.

## Version 7.23.0 - October 8, 2020

### Analytics

- The SDK now warns instead of throwing an error if it detects a browser environment where Analytics does not work.

### Cloud Firestore

- The SDK now includes more information in the error message for failed IndexedDB transactions.

### Performance Monitoring

- Moved the `loggingEnabled` check to wait until performance initialization finishes, which prevents the SDK from dropping custom traces right after getting the `performance` object.
- Throws an exception when `startTime` or `duration` is not a positive value in the `trace.record()` API.

### Testing SDK

- Added stronger types to the `options.auth` option for `initializeTestApp()`.

## Version 7.22.1 - October 5, 2020

### Cloud Functions for Firebase Client SDK

- Fixed a bug introduced in 7.21.1 that causes callable functions to throw an error in some environments.

## Version 7.22.0 - October 1, 2020

### Cloud Functions for Firebase Client SDK

- Users can now set a custom domain for callable functions.

## Version 7.21.1 - September 24, 2020

> [!CAUTION]
> **Caution:** Versions 7.21.1 and 7.22.0 contain an issue in the Cloud Functions for Firebase Client SDK that causes callable functions to throw an error. If you use callable functions, upgrade to version 7.22.1 or later.

### Cloud Firestore

- Fixed an issue that prevented `waitForPendingWrites()` from resolving
  in background tabs when multi-tab is used.
  See [GitHub issue #3816](https://github.com/firebase/firebase-js-sdk/issues/3816).

- Fixed a "Comparison with -0" lint warning for customers that build from source.
  See [GitHub issue #3814](https://github.com/firebase/firebase-js-sdk/issues/3814).

### Authentication

- Fixed an encoding issue in the Authentication CDN script for environments that require UTF-8, for example, Chrome extensions. See [GitHub issue #414](https://github.com/firebase/firebase-js-sdk/issues/414).

## Version 7.21.0 - September 17, 2020

### Cloud Firestore

- Added `not-in` and `!=` query operators for use with `.where()`.
  - `not-in` finds documents where a specified field's value is not in a specified array.
  - `!=` finds documents where a specified field's value does not equal the specified value. Neither query operator will match documents where the specified field is not present.
- The SDK now uses `FirestoreError` instead of `Error` in `onSnapshot*()` error callbacks.
- Fixed a bug where `CollectionReference.add()` called `FirestoreDataConverter.toFirestore()` twice instead of once. See [GitHub issue #3742](https://github.com/firebase/firebase-js-sdk/issues/3742)

### Realtime Database

- Fixed detection of Admin SDK context.

### Testing SDK

- Fixed a bug preventing users from testing Realtime Database with both the Admin SDK and the client JS SDK.

## Version 7.20.0 - September 10, 2020

### Analytics

- For apps using **v7.20.0 and later** , Firebase dynamically fetches the `measurementId` when your app initializes Analytics. Having this ID in your Firebase config object is optional, but it does serve as a fallback in the rare case that the dynamic fetch fails. Learn more about this field in the [Analytics getting started page](https://firebase.google.com/docs/analytics/get-started.md.txt?platform=web#add-sdk).

### Realtime Database

- The SDK can now infer a default database URL if none is provided in the config.

### Cloud Firestore

- Fixed a bug where, if a user change happened while the network connection was disabled, the client did not raise snapshots from cache.

### Cloud Messaging

- The SDK no longer opens non-origin links, fixing a potential security issue.

## Version 7.19.1 - August 27, 2020

### Cloud Firestore

- Added `merge` option to `firestore.settings()`, which merges the provided settings with settings from a previous call. This addresses [GitHub issue #3354](https://github.com/firebase/firebase-js-sdk/issues/3354).

### Testing SDK

- Fixed an issue with `assertFails()`. See [GitHub issue #3671](https://github.com/firebase/firebase-js-sdk/issues/3671)

## Version 7.19.0 - August 20, 2020

### Testing SDK

- Released `@firebase/rules-unit-testing` to replace the `@firebase/testing` package. The new package is API compatible but has the following breaking behavior changes:
  - `assertFails()` now fails only on `PERMISSION DENIED` errors, not any error.
  - `initializeAdminApp()` now relies on `firebase-admin` rather than imitating the Admin SDK.

### Performance Monitoring

- Adds a check to silently prevent Performance Monitoring from initializing if the required `indexedDB.open()` API is not available in the environment.

### Cloud Firestore

- `terminate()` can now be retried if it fails with an IndexedDB
  exception. See [GitHub issue #2755](https://github.com/firebase/firebase-js-sdk/issues/2755).

- Enabled fallback for auto-generated identifiers in environments that
  support `crypto` but not `crypto.getRandomValues`. See [GitHub PR #3487](https://github.com/firebase/firebase-js-sdk/issues/3487).

## Version 7.18.0 - August 13, 2020

### Cloud Messaging

- Added `onBackgroundMessage`, which is called regardless of whether or not a notification is displayed.

- `getToken` now accepts an options object that includes an optional
  vapid key and an optional service worker registration.

- Deprecated `setBackgroundMessageHandler`. Use the new API
  `onBackgroundMessage` instead.

- Deprecated `useVapidKey` and `useServiceWorker`. Use `getToken`
  to set these values instead.

- Deprecated `onTokenRefresh` which is a no-op API currently.

### Cloud Firestore

- The SDK no longer crashes with the error "The database connection is closing".
  Instead, the individual operations that cause this error may be rejected. Addresses [GitHub issue #3495](https://github.com/firebase/firebase-js-sdk/issues/3495).

- Fixed a bug that caused slow retries for IndexedDB operations even when a webpage re-entered the foreground.

### Analytics

- `analytics.isSupported()` now returns `Promise<false>` for extension environments.

## Version 7.17.2 - August 6, 2020

### Realtime Database

- Added interface `Database` which is implemented by `FirebaseDatabase`. This allows consumer SDKs (such as the Firebase Admin SDK) to export Realtime Database types as an interface.

### Cloud Firestore

- Upgraded to the latest version of Google Closure Library and Compiler. Developers will not need to make any changes to their code to handle this change.

## Version 7.17.1 - July 24, 2020

### Analytics

- Added an omitted dependency update that caused Analytics to error on initialization. Addresses [GitHub issue #3469](https://github.com/firebase/firebase-js-sdk/issues/3469).

## Version 7.17.0 - July 23, 2020

> [!CAUTION]
> **Caution:** Version 7.17.0 contains an issue that prevents Analytics from initializing. Please upgrade to version 7.17.1 or later.

### Analytics

- Added an `analytics.isSupported()` method which returns true if the current browser context supports Analytics. This can used in a conditional to prevent initialization of Analytics in environments that don't support it. This check also automatically runs when Analytics is initialized (`firebase.analytics()`) and if it finds an unsupported environment, throws an error advising developers to use `isSupported()`. Addresses [GitHub issue #2393](https://github.com/firebase/firebase-js-sdk/issues/2393).

### Cloud Storage

- Error messages for backend errors now include the backend's response message.

## Version 7.16.1 - July 16, 2020

### Cloud Firestore

- The SDK no longer crashes if an `IndexedDB` failure occurs when unsubscribing from a `Query`.

- Removed a delay that prevented Firestore from immediately reestablishing
  a network connection if a connectivity change occurred while the app was in the background.

### Realtime Database

- Instead of using production auth, the SDK will use test credentials to connect to the Emulator when Realtime Database is used via the Firebase Admin SDK. Fixes [GitHub issue #3144](https://github.com/firebase/firebase-js-sdk/issues/3144).

### Cloud Storage

- Updated the TypeScript types for all APIs using `Observer`s to allow callback omission. Fixes [GitHub issue #3158](https://github.com/firebase/firebase-js-sdk/issues/3158).

### Authentication

- Added the `browser` field in package.json.

## Version 7.16.0 - July 09, 2020

### Cloud Firestore

- Added support for `set()` with merge options when using
  `FirestoreDataConverter`.

- Re-added the React Native bundle, which allows Cloud Firestore to be used
  without `btoa/atob` polyfills.

- Removed internal wrapper around our public API that was meant to
  prevent incorrect SDK usage for JavaScript users, but caused the SDK to stop
  working in IE11. See [GitHub issue #3305](https://github.com/firebase/firebase-js-sdk/issues/3305).

### FCM

- Fixed an issue where we tried to update the token for every `getToken()`
  call because we don't save the updated token in the `IndexedDB`.

- Fixed an RxJS incompatibility issue by adding support for `onMessage`
  so the internal callback can work with RxJS's [`Subscriber`](https://rxjs.dev/api/index/class/Subscriber).
  See [GitHub issue #3142](https://github.com/firebase/firebase-js-sdk/issues/3142).

### Cloud Functions for Firebase Client SDK

- Clear timeout after a successful response or after the request is canceled. Fixes [GitHub issue #3289](https://github.com/firebase/firebase-js-sdk/issues/3289).

## Version 7.15.5 - June 25, 2020

### Cloud Firestore

- Fixed a bug that sometimes caused Cloud Firestore operations to fail during an auth token change. See [GitHub issue #3179](https://github.com/firebase/firebase-js-sdk/issues/3179)

## Version 7.15.4 - June 20, 2020

### Cloud Firestore

- Removed the React Native entry point due to an issue in our internal library. For Cloud Firestore in React Native, use the browser build and add necessary polyfills. See [GitHub issue #2667](https://github.com/firebase/firebase-js-sdk/issues/2667)

## Version 7.15.3 - June 19, 2020

> [!CAUTION]
> **Caution:** Version 7.15.3 contains an issue that prevents Cloud Firestore from working in React Native. Please upgrade to 7.15.4 or later.

### Cloud Firestore

- Fixed an issue that prevented Cloud Firestore from working in React Native. See [GitHub issue #2667](https://github.com/firebase/firebase-js-sdk/issues/2667)

## Version 7.15.2 - June 18, 2020

### Realtime Database

- Added an internal HTTP header to the WebSocket connection.

### Cloud Firestore

- Updated `grpc-js` to version `^1.0.0`.

## Version 7.15.1 - June 11, 2020

### Cloud Firestore

- Fixed an issue that prevented the client from connecting
  to the backend immediately after a user signed in. See [GitHub issue #2923](https://github.com/firebase/firebase-js-sdk/issues/2923).

- Fixed a regression introduced in [PR #3048](https://github.com/firebase/firebase-js-sdk/pull/3048) that changed the `context.path`
  variable from `Path|null` to `undefined|null`. See [GitHub issue #3172](https://github.com/firebase/firebase-js-sdk/issues/3172).

## Version 7.15.0 - June 04, 2020

### Cloud Firestore

- Added an `experimentalForceOwningTab` setting that can be used to
  enable persistence in environments without `localStorage`, which allows
  persistence to be used in Web Workers. See [GitHub issue #983](https://github.com/firebase/firebase-js-sdk/issues/983).

- All known failure cases for `IndexedDB`-related crashes have now been addressed.
  Instead of crashing the client, `IndexedDB` failures result in rejected operations
  (for example, rejected `Writes` or errored `Query` listeners). If these rejections surface in your app,
  you can retry these operations when `IndexedDB` access is restored.
  `IndexedDB` failures that occur due to background work are automatically retried.

  If you continue to see `IndexedDB`-related crashes, please provide feedback [GitHub issue #2755](https://github.com/firebase/firebase-js-sdk/issues/2755).

## Version 7.14.6 - May 29, 2020

### Cloud Firestore

- Fixed an issue that could cause Cloud Firestore to temporarily go
  offline when a Window visibility event occurred.

- Added support for calling `FirebaseFirestore.settings` with
  `{ ignoreUndefinedProperties: true }`. When this parameter is set,
  Cloud Firestore ignores undefined properties inside objects rather than rejecting the API call.

## Version 7.14.5 - May 21, 2020

### Realtime Database

- Fixed a Realtime Database URL parsing bug to support domains with more than 3 components.

## Version 7.14.4 - May 14, 2020

### Cloud Firestore

- Fixed a regression introduced in v7.14.2 that incorrectly applied a `FieldValue.increment` in combination with `set({...}, {merge: true})`.

## Version 7.14.3 - May 07, 2020

### Cloud Firestore

- Cloud Firestore now rejects `onSnapshot()` listeners if they cannot be registered in `IndexedDB`. Previously, these errors crashed the client.

## Version 7.14.2 - April 23, 2020

### Cloud Firestore

- Firestore now rejects write operations if they cannot be persisted
  in IndexedDB. Previously, these errors crashed the client.

- Fixed a source of IndexedDB-related crashes for tabs that receive
  multi-tab notifications while the file system is locked.

### FCM

- Changed to compare hostname instead of the entire URL to decide if there is a matching window client. See [GitHub issue #390](https://github.com/firebase/firebase-js-sdk/issues/390).

## Version 7.14.1 - April 16, 2020

### Cloud Storage

- Fixed an issue that occurred when users tried to retrieve data from multiple Cloud Storage instances.

### Authentication

- Fixed a bug that occurred when users set persistence to `LOCAL` in a worker environment. See [GitHub issue #2903](https://github.com/firebase/firebase-js-sdk/issues/2903).

## Version 7.14.0 - April 9, 2020

### Cloud Firestore

- Replaced `grpc` with `@grpc/grpc-js` in the Node.js builds. As a result, the minimum supported NodeJS version is now `8.13.0`.

### Realtime Database

- Added `ServerValue.increment()` to support atomic field value increments without transactions.

### Performance Monitoring

- Updated internal performance event transport mechanism.

## Version 7.13.2 - April 2, 2020

### Cloud Firestore

- Fixed a regression introduced by a crypto change in 7.13.0 that breaks
  Firestore in IE 11. See [GitHub issue #2827](https://github.com/firebase/firebase-js-sdk/issues/2827).

- Fixed an issue that causes excessive reads in large changesets over
  slow connections. See [GitHub issue #2683](https://github.com/firebase/firebase-js-sdk/issues/2683).

- Fixed an issue causing `WriteBatch.commit()` to resolve one loop
  later than `.set` and `.update`.
  See [GitHub issue #2822](https://github.com/firebase/firebase-js-sdk/issues/2822).

### FCM

- Fixed an issue introduced in 7.7.0, when FCM switched to provide base64-encoded VAPID keys to [PushManager](https://developer.mozilla.org/en-US/docs/Web/API/PushManager) for push subscription. For backward compatibility, the SDK has switched back to using VAPID keys in type [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). See [Github issue #2712](https://github.com/firebase/firebase-js-sdk/issues/2712).

## Version 7.13.1 - March 27, 2020

### Cloud Firestore

- Removed a dangling comma in package.json.

## Version 7.13.0 - March 26, 2020

### Cloud Firestore

- Added a memory-only `firestore` build. Instead of persisting data in
  the `IndexedDB`, it keeps it in memory. This build is about 14% smaller than
  the full featured build because it doesn't have `IndexedDB` related code. If you
  don't care about persisting data across sessions, or your code runs in environments
  that don't support `IndexedDB`, use this build to reduce your application size.
  It is available under a special import path. You can import it this way:

  ```javascript
  import * as firebase from 'firebase/app';
  import 'firebase/firestore/memory';

  // Don't change the format for any other products.
  import 'firebase/auth';
  // etc.
  ```

  <br />

  Or if using the CDN:

  ```javascript
  <script src="https://www.gstatic.com/firebasejs/7.13.0/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.13.0/firebase-firestore.memory.js"></script>
  <!-- Don't change the format for any other products. -->
  <script src="https://www.gstatic.com/firebasejs/7.13.0/firebase-auth.js"></script>
  <!-- etc. -->
  ```

  <br />

### Analytics

- Added convenient enums and function overloads to support enhanced ecommerce events.

## Version 7.12.0 - March 19, 2020

- Added two methods for logging:
  - [`firebase.setLogLevel()`](https://firebase.google.com/docs/reference/js/firebase#setloglevel), which sets the level above which Firebase log messages will be shown.
  - [`firebase.onLog()`](https://firebase.google.com/docs/reference/js/firebase#onlog), which adds a user-specified callback run on each log event. The callback has access to log level, message, and name of the package (e.g. "@firebase/firestore") that generated the log message.

### Cloud Firestore

- Fixed an issue where the number value `-0.0` would lose its sign when stored in Cloud Firestore.

## Version 7.11.0 - March 12, 2020

### Authentication

- Added multi-factor authentication support for [Google Cloud Identity Platform](https://cloud.google.com/identity-platform/docs/web/mfa) projects.

## Version 7.10.0 - March 5, 2020

### Cloud Firestore

- Implemented `Timestamp.valueOf()` so that `Timestamp` objects can be compared for relative ordering using the JavaScript arithmetic comparison operators. Fixes [GitHub issue #2632](https://github.com/firebase/firebase-js-sdk/issues/2632).

## Version 7.9.3 - February 28, 2020

### Cloud Storage

- Fixed an issue introduced in 7.9.2 where Cloud Storage could throw a CORS error ([GitHub issue](https://github.com/firebase/firebase-js-sdk/issues/2695)).

## Version 7.9.2 - February 27, 2020

> [!CAUTION]
> **Caution:** This build introduced a regression where Cloud Storage could throw a CORS error ([GitHub issue](https://github.com/firebase/firebase-js-sdk/issues/2695)). Please upgrade to 7.9.3 or later.

### Cloud Firestore

- Fixed an issue where `OnlineState` value was mangled and was not being parsed correctly.

## Version 7.9.1 - February 21, 2020

### Cloud Firestore

- Fixed an issue introduced in 7.9.0 where minified Cloud Firestore Node and CJS bundles do not work.

## Version 7.9.0 - February 20, 2020

> [!CAUTION]
> **Caution:** This build introduced a regression where Node and CJS bundles for Cloud Firestore do not work. Please upgrade to 7.9.1 or later.

### Cloud Firestore

- The minified version of the Cloud Firestore library, added as an experimental option
  in 7.8.0, is now the default Cloud Firestore bundle. The steps listed in the
  [7.8.0 release notes](https://firebase.google.com/support/release-notes/js.md.txt#7.8.0) are no longer necessary to get the minified bundle.
  This minification currently reduces the total bundle size by approximately 15%
  as of this build.

- Fixed an issue where auth credentials were not respected in Cordova
  environments. See [Github issue #2626](https://github.com/firebase/firebase-js-sdk/issues/2626).

- Fixed a performance regression introduced by the addition of
  `Query.limitToLast(n: number)` in Firestore 1.7.0 (Firebase 7.3.0).
  See [Github issue #2620](https://github.com/firebase/firebase-js-sdk/issues/2620).

### FCM

- Fix an issue where service workers do not reliably update after upgrading to a new version of Firebase. See [Github issue #2590](https://github.com/firebase/firebase-js-sdk/issues/2590).

## Version 7.8.2 - February 13, 2020

### Cloud Firestore

- Fixed an issue where `CollectionReference.add()` would reject custom types when using `withConverter()`. [Github issue #2606](https://github.com/firebase/firebase-js-sdk/issues/2606).

## Version 7.8.1 - February 6, 2020

### Cloud Firestore

- Fix a bug causing intermittent errors when the same app is open in multiple tabs. Addresses [Github issue #2555](https://github.com/firebase/firebase-js-sdk/issues/2555).

## Version 7.8.0 - January 30, 2020

> [!CAUTION]
> **Caution:** The minified bundle is no longer provided as a separate file starting with 7.9.0, but replaces the default bundle. These instructions are not needed to import the minified bundle in versions 7.9.0 and above.

### Cloud Firestore

- **Experimental:** Added an alternative minified import for the
  `firestore` package. Users who want to try this experimental import can do it
  this way:

  ```javascript
  import * as firebase from 'firebase/app';
  import '@firebase/firestore/dist/index.cjs.min';

  // Don't change the format for any other products.
  import 'firebase/auth';
  // etc.
  ```

  Or if using the CDN:

  ```javascript
  <script src="https://www.gstatic.com/firebasejs/7.8.0/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.8.0/firebase-firestore.min.js"></script>
  <!-- Don't change the format for any other products. -->
  <script src="https://www.gstatic.com/firebasejs/7.8.0/firebase-auth.js"></script>
  <!-- etc. -->
  ```

  <br />

## Version 7.7.0 - January 16, 2020

### Cloud Firestore

- Fixed an issue where auth credentials were not respected in some
  Firefox or Chrome extensions. See [Github issue #1491](https://github.com/firebase/firebase-js-sdk/issues/1491).

- Firestore previously required that every document read in a
  transaction must also be written. This requirement has been removed, and
  you can now read a document in a transaction without writing to it.

### Performance Monitoring

- Updated internal transport protocol from proto2 to proto3.

### Authentication

- Added missing constructor for `SAMLAuthProvider` type.

## Version 7.6.2 - January 9, 2020

### Cloud Functions for Firebase Client SDK

- Fixed a bug causing notification permissions requests to pop up when using `functions.httpsCallable()`.

### Realtime Database

- Reverted a change causing slow update performance as reported in [Github issue #2487](https://github.com/firebase/firebase-js-sdk/issues/2487).

### Cloud Firestore

- Fixed an issue where auth credentials were not respected in certain browser environments (Electron 7, IE11 in trusted zone, UWP apps). Addresses [Github issue #1491](https://github.com/firebase/firebase-js-sdk/issues/1491).

## Version 7.6.1 - December 18, 2019

### Realtime Database

- Fixed an internal typing issue where the library `firebase-admin`, which depends on `@firebase/database`, failed to compile.

## Version 7.6.0 - December 12, 2019

### Cloud Firestore

- Added support for storing and retrieving custom types in Cloud Firestore.
  Added support for strongly typed collections, documents, and
  queries. You can now use `withConverter()` to supply a custom data
  converter that will convert between Cloud Firestore data and your custom type.

- Added a stronger environment check that specifically checks for the existence of
  `process.env`. Addresses [Github issue #2404](https://github.com/firebase/firebase-js-sdk/issues/2404).

### FCM

- `getToken()` now automatically requests notification permission
  if permission was set to "default".

- Temporarily suppressing errors occurring on reset of notifications
  permissions, pending a backend solution. Addresses [Github issue #2364](https://github.com/firebase/firebase-js-sdk/issues/2364).

### Testing SDK

- Fixed a bug where Testing SDK was unable to connect to the Cloud Firestore emulator. Addresses [Github issue #2417](https://github.com/firebase/firebase-js-sdk/issues/2417).

## Version 7.5.2 - December 6, 2019

### Realtime Database

- Fixed an issue introduced in 7.5.1 where `@firebase/component` is not listed as a dependency. It caused "Cannot find module `@firebase/component`" in the `firebase-admin` package, which depends on Realtime Database.

## Version 7.5.1 - December 5, 2019

- Fixed an issue where typing
  `undefined` in the IDE prompts to auto-import it from the firebase package.
  Addresses [#2203 (GitHub link)](https://github.com/firebase/firebase-js-sdk/issues/2203).
  Thanks [camsjams](https://github.com/camsjams) for the [contribution](https://github.com/firebase/firebase-js-sdk/pull/2379)!

- Fixed a bug where RxFire's `objectVal` will return an empty object
  if the result of `snapshot.val()` is not an object.

### Remote Config

- Fixed a bug where the promises returned by `fetch()` and `fetchAndActivate()` were not rejected with errors caused by `indexeddb` operations. You can now handle these errors in the error handler of the returned promise.

## Version 7.5.0 - November 21, 2019

### Cloud Firestore

- Improved the performance of repeatedly executed queries when persistence is enabled. Recently executed queries should see dramatic improvements. This benefit is reduced if changes accumulate while the query is inactive. Queries that use the `limit()` API may not always benefit, depending on the accumulated changes.

## Version 7.4.0 - November 14, 2019

### Authentication

- Added nonce support for sign-in with OIDC ID token credentials.
- Added the OAuth sign-in support for apps served from origins with the `ionic://` scheme for latest Ionic framework.

### Analytics

- Fixed a bug where Analytics did not work with Google Tag Manager on the same page.

### Cloud Firestore

- The `in` query operator now accepts nested arrays.

## Version 7.3.0 - November 7, 2019

### Cloud Firestore

- Added `in` and `array-contains-any` query operators for use with `.where()`. The `in` operator finds documents where a specified field's value is in a specified array. The `array-contains-any` operator finds documents where a specified field is an array and contains any element of a specified array.
- Added `Query.limitToLast(n: number)` which returns the last `n` documents as the result.

## Version 7.2.3 - October 31, 2019

- Improved error handling in installations calls.

### Cloud Firestore

- The client can now recover if certain periodic IndexedDB operations fail. Addresses [#2232 (GitHub link)](https://github.com/firebase/firebase-js-sdk/issues/2232).

### Analytics

- Added missing overload signatures for `logEvent` when using standard event names `add_payment_info` and `page_view`.

## Version 7.2.2 - October 24, 2019

- Fixed a change detection bug in rxFire.
- Switched to `ref.isEqual` when comparing documents to support collection groups for Cloud Firestore in rxFire.

### Cloud Firestore

- Improved iOS 13 support by eliminating an additional crash in our IndexedDB persistence layer.

## Version 7.2.1 - October 16, 2019

### Cloud Firestore

- Fixed a crash on iOS 13 that occurred when persistence was enabled in a background tab.
- Fixed an issue in the interaction with the Firestore Emulator that caused requests with timestamps to fail.

## Version 7.2.0 - October 10, 2019

- The `Installations.getToken()` method now accept an optional `forceRefresh` parameter.

### Remote Config

- Corrected the path of the `main` script in `package.json` file.

## Version 7.1.0 - October 3, 2019

### Cloud Firestore

- Added a `Firestore.onSnapshotsInSync()` method that notifies you
  when all your snapshot listeners are in sync with each other.

- Fixed a regression that caused queries with nested field filters to
  crash the client if the field was not present in the local copy of the
  document.

### Realtime Database

- Fixed an issue that caused large numeric values with leading zeros to not always be sorted correctly.

### Analytics

- Fixed a bug where `firebase.analytics()` was not available when
  importing firebase as an all-in-one package.

- The `eventParams` param to `logEvent()` is now optional.

## Version 7.0.0 - September 26, 2019

- **Breaking change**: For TypeScript users, the required minimal TypeScript version is 2.8.0.

### FCM

- **Breaking change** : version 7.0.0 introduces a new service
  related to client app instance registration. If you are currently using
  FCM for web and want to upgrade to SDK 7.0.0 or later, you must enable the
  [FCM Registration API](https://console.cloud.google.com/apis/library/fcmregistrations.googleapis.com)
  for your project in the Google Cloud Console.

  When you enable this service,
  make sure you are logged in to Cloud Console with the same
  Google account you use for Firebase, and make sure to select
  the correct project.

  Please also make sure that `projectId`, `apiKey`, `appId` and `messagingSenderId` are
  present in your app config.
  See [how to get your app config object](https://support.google.com/firebase/answer/7015592).

  No other migration tasks are required; once the API
  is enabled, pre-7.0.0 apps will continue to function normally.

  New projects adding the FCM SDK have this service enabled by default.
- Version 7.0.0 introduces the targeting of web apps for
  FCM messages sent from the Notifications composer. You can now
  target web notification messages by browser type and version as well as
  operating system. See
  [Send messages with the Firebase Console](https://firebase.google.com/docs/cloud-messaging/js/send-with-console).

### Analytics

- Added support for Analytics on web apps. See [Get started with Google Analytics](https://firebase.google.com/docs/analytics/get-started.md.txt).

### Remote Config

- Added support for Remote Config on web apps. See [Get started with Firebase Remote Config on web](https://firebase.google.com/docs/remote-config/use-config-web).

## Version 6.6.2 - September 19, 2019

### Cloud Firestore

- Fixed a regression introduced in 6.6.0 where `Document.toString()` throws an error.

## Version 6.6.1 - September 12, 2019

### Realtime Database

- Internal cleanup of code that supports Node.js.

## Version 6.6.0 - September 5, 2019

### Authentication

- Added support for [multi-tenancy](https://cloud.google.com/identity-platform/docs/multi-tenancy) for Google Cloud Identity Platform developers.

### Cloud Firestore

- Fixed a race condition between authenticating and initializing Firestore that could result in initial writes to the database being dropped.

## Version 6.5.0 - August 23, 2019

### Cloud Firestore

- Added a `Firestore.waitForPendingWrites()` method that allows users to wait until all pending writes are acknowledged by the Firestore backend.
- Added a `Firestore.terminate()` method which terminates the instance, releasing any held resources. Once it completes, you can optionally call `Firestore.clearPersistence()` to wipe persisted Firestore data from disk.

## Version 6.4.2 - August 23, 2019

- Changed `fromRef`, 'fromDocRef' and `fromCollectionRef` to accept an `option` parameter in rxFire.

### Performance Monitoring

- Fixed a regression introduced in 6.4.1 where built-in metrics collections threw errors.

## Version 6.4.1 - August 22, 2019

- The SDK no longer throws an error on duplicate service registration. This simplifies cases when multiple components each internally depend on another component and may each try to register it.

### Cloud Firestore

- Transactions now perform exponential backoff before retrying. This means transactions on highly contended documents are more likely to succeed.

### Performance Monitoring

- Performance Monitoring now validates performance metrics and attributes before storing them.

## Version 6.4.0 - August 15, 2019

### Realtime Database

- When parsing the Realtime Database URL, the `ns` URL query parameter will be treated as the default Realtime Database namespace name.
- Fixed an issue that caused `.info/serverTimeOffset` events not to fire.

## Version 6.3.5 - August 8, 2019

### Authentication

- Fixed an issue where cached redirect results were not cleared after calling `signOut()` or `getRedirectResult()`.

## Version 6.3.4 - August 1, 2019

### Realtime Database

- Fixed an issue where multi-byte UTF-8 characters were not written correctly when using `firebase.js` or `firebase-database.js`.

## Version 6.3.3 - July 26, 2019

### Realtime Database

- Fixed a regression introduced in v6.3.2 causing errors when run in a browser environment.

## Version 6.3.2 - July 25, 2019

> [!CAUTION]
> **Caution:** SDK version 6.3.2 has a serious issue in Realtime Database API support. If your app uses Realtime Database, immediately upgrade to 6.3.3 or higher.

### Realtime Database

- Added an environment variable (`FIREBASE_DATABASE_EMULATOR_HOST`) that allows developers to point the database emulator SDK to a local database emulator instance.

### Performance Monitoring

- The SDK has been updated to better handle errors when the Performance Monitoring library is imported in an environment without a `window` object (such as the server side of an SSR app) or a Performance Monitoring instance is initialized in such an environment.

## Version 6.3.1 - July 18, 2019

### Cloud Firestore

- Transactions are now more flexible. Some sequences of operations
  that were previously incorrectly disallowed are now allowed. For example,
  after reading a document that doesn't exist, you can now set it multiple
  times successfully in a transaction.

- Fixed an issue where query results were temporarily missing documents
  that previously had not matched but had been updated to now match the query.

## Version 6.3.0 - July 11, 2019

### Performance Monitoring

- Fixed an issue causing errors during page load in browser environments that don't support IndexedDB (such as when cookies are disabled).

## Version 6.2.4 - June 27, 2019

### Performance Monitoring

- Fixed an issue where Performance Monitoring throws an exception in unsupported environments. Now Performance Monitoring will not initialize in unsupported environments.

## Version 6.2.3 - June 24, 2019

### Authentication

- Fixed a bug causing errors in Node.

### Cloud Firestore

- Fixed an issue causing some queries to return no results.

## Version 6.2.2 - June 21, 2019

> [!CAUTION]
> **Caution:** SDK version 6.2.2 has a serious issue in Firestore API support. If your app uses Firestore APIs, immediately upgrade to 6.2.3 or higher.

- Reverted change to the way the React Native bundle imports `AsyncStorage` as it was causing errors.

### Cloud Firestore

- Made error messages more informative for `AsyncQueue` errors on iOS.

## Version 6.2.1 - June 20, 2019

- Updated the React Native bundle to first try importing the
  `AsyncStorage` module from the recommended community package, if available,
  instead of the now-deprecated version bundled with React Native core.

- Fixed a bug in Firebase's environment check that can cause errors
  when Firebase is bundled into user code (using tools such as Rollup).

### Cloud Firestore

- Fixed an issue causing errors in environments that are missing `window.addEventListener`, such as React Native with Expo.

### Cloud Storage

- Fixed an incorrect type on `Reference.put()` params.

## Version 6.2.0 - June 13, 2019

### Cloud Firestore

- Added `clearPersistence()`, which clears the persistent storage
  including pending writes and cached documents. This is intended to help
  write reliable tests.

- Added logging and a custom error message to help users hitting
  https://bugs.webkit.org/show_bug.cgi?id=197050 (a bug in iOS 12.2 causing
  the SDK to potentially crash when persistence is enabled).

## Version 6.1.1 - June 6, 2019

- Did some internal refactoring to improve type safety and documentation generation.

## Version 6.1.0 - May 28, 2019

### Cloud Firestore

- Fixed an issue where an environment check fails in Node.js environments.

### Cloud Storage

- Added the ability to list objects in a bucket.

### Cloud Messaging

- Deprecated `requestPermission()`. Use the native browser API `Notification.requestPermission()` instead.

## Version 6.0.4 - May 23, 2019

- Browser environment check is now able to detect a web worker
  environment.

- `@firebase/app-types` and `@firebase/util` are now direct
  dependencies of the main `firebase` package.

### Cloud Firestore

- Cloud Firestore will gracefully fall back to memory persistence when
  the user is in Firefox Private Browsing.

- Cloud Firestore now recovers more quickly after network connectivity
  changes (airplane mode, Wi-Fi availability, etc.).

## Version 6.0.2 - May 9, 2019

- Browser environment check now works correctly without throwing an error in non-browser environments.

### Cloud Firestore

- Updated `gRPC` to 1.20.3 to support Node.js 12 and Electron v5.0.

## Version 6.0.1 - May 8, 2019

### Authentication

- Fixed a regression introduced in 6.0.0 that caused code to access a removed property.

## Version 6.0.0 - May 7, 2019

- **Breaking change** : Removed polyfills in the Firebase package. Now developers must decide which polyfills to include based on the environments they need to support. This ensures only required polyfills are included, reducing application size. See [Environment Support](https://firebase.google.com/support/guides/environments_js-sdk).

### Authentication

- **Breaking change**: Removed previously deprecated APIs.

  | Removed | Replaced by |
  |---|---|
  | `signInAndRetrieveDataWithCustomToken` | `signInWithCustomToken` |
  | `signInAnonymouslyAndRetrieveData` | `signInAnonymously` |
  | `createUserAndRetrieveDataWithEmailAndPassword` | `createUserWithEmailAndPassword` |
  | `signInAndRetrieveDataWithEmailAndPassword` | `signInWithEmailAndPassword` |
  | `fetchProvidersForEmail` | `fetchSignInMethodsForEmail` |

- **Breaking change** : Updated the return type signature for
  `signInWithCredential` and `linkWithCredential` to a promise that resolves
  with a `UserCredential` instead of a `User`.

- Changed `reauthenticateWithCredential` to return a promise that
  resolves with a `UserCredential`.

- Deprecated the following APIs

  | Deprecated | Use instead |
  |---|---|
  | `signInAndRetrieveDataWithCredential` | `signInWithCredential` |
  | `linkAndRetrieveDataWithCredential` | `linkWithCredential` |
  | `reauthenticateAndRetrieveDataWithCredential` | `reauthenticateWithCredential` |

  <br />

### Cloud Firestore

- You can now query across all collections in your database with a
  given collection ID using the `FirebaseFirestore.collectionGroup()` method.

- Deprecated the `experimentalTabSynchronization` setting in favor of
  `synchronizeTabs`. If you use multi-tab synchronization, it is recommended
  that you update your call to `enablePersistence()`. Firestore logs an error
  if you continue to use `experimentalTabSynchronization`.

### Realtime Database

- **Breaking change** : Improved consistency between the type annotations for `Query.on`/`Reference.on`, `Query.off`/`Reference.off` and `Query.once`/`Reference.once`.

### Performance Monitoring

- This release contains the new Performance Monitoring Client SDK. Visit the Performance Monitoring for Web [Getting Started guide](https://firebase.google.com/docs/perf-mon/get-started-web.md.txt).

## Version 5.10.1 - April 25, 2019

### Authentication

- Fixed an issue where duplicate auth events could cause errors when using `signInWithPopup()`.
- Fixed an issue where the SDK could fail to detect that it is in a service worker environment.
- Added an error message that appears when the client attempts to perform an admin-only operation.

### Cloud Firestore

- Enabled the SDK to recognize older versions of iOS Safari and Android when checking if persistence can be enabled.

## Version 5.10.0 - April 18, 2019

### Authentication

- Added serialization and deserialization methods to AuthCredential classes.

### Cloud Firestore

- Added an `experimentalForceLongPolling` setting that can be used to work around proxies that prevent the Firestore client from connecting to the Firestore backend.

## Version 5.9.4 - April 11, 2019

### Cloud Storage

- Fixed an incorrect type definition in `UploadTask.on()` params.

## Version 5.9.3 - April 4, 2019

### Cloud Messaging

- Refactored to use const enum for `ErrorCode`.

## Version 5.9.2 - Mar 28, 2019

### Cloud Firestore

- Added a missing type definition for `firestore.FieldValue.increment`.

## Version 5.9.1 - Mar 21, 2019

### Cloud Firestore

- Increased a connection timeout that could lead to large writes
  perpetually retrying without ever succeeding.

- Fixed an issue where transactions in a NodeJS app could be sent
  without auth credentials, leading to Permission Denied errors.

- Fixed an issue with IndexedDb persistence that triggered an internal
  assert for Queries that use nested `DocumentReferences` in `where()` clauses.

## Version 5.9.0 - Mar 14, 2019

### Cloud Firestore

- Added `FieldValue.increment()`, which can be used in `update()` and `set(..., {merge:true})` to increment or decrement numeric field values safely without transactions.
- Prepared the persistence layer to support collection group queries. While this feature is not yet available, all schema changes are included in this release. Once you upgrade, you will not be able to use an older version of the Firestore SDK with persistence enabled.

### FCM

- The SDK now does not send messages to Chrome Extension background pages, which previously caused notifications not to display.

### Cloud Storage

- Fixed an incorrect type definition.

## Version 5.8.6 - Mar 7, 2019

### Cloud Firestore

- Improved performance when querying over documents that contain subcollections.

## Version 5.8.5 - Mar 1, 2019

- Added a warning that appears in the console at runtime if a Firebase browser bundle is loaded in a node environment.

### Authentication

- Added `OAuthCredential` type as an exposed type.

- Fixed `updateProfile()` so each property passed to it is optional.

### Cloud Functions for Firebase Client SDK

- Added timeouts and ability to customize them to `HttpsCallables`.

## Version 5.8.4 - Feb 21, 2019

### Cloud Firestore

- Fixed an uncaught promise error occurring when `enablePersistence()` was called in a second tab.

### Testing SDK

- Made rulesets that don't compile throw errors.

## Version 5.8.3 - Feb 14, 2019

### Cloud Firestore

- Improved error handling for `endAt` queries.

## Version 5.8.2 - Jan 31, 2019

- Added a missing file to the files array in package.json.

- Fixed some errors in the documentation.

## Version 5.8.1 - Jan 24, 2019

- Added the missing depenedency to auth-types and storage-types packages.

### Testing SDK

- Added `clearFirestoreData()` to delete data between tests.

## Version 5.8.0 - Jan 17, 2019

- Added a type definition file for all firebase components, so that they work with TypeScript with dynamic import.

### Cloud Firestore

- BREAKING: The `timestampsInSnapshots` setting is now enabled by default. Now, timestamp fields read from a `DocumentSnapshot` will be returned as `Timestamp` objects instead of `Date`.
  Any code expecting to receive a `Date` object must be updated.

- Fixed a crash that could happen when the app is shut down after a write has been sent to the server but before it has been received on a listener.

## Version 5.7.2 - Jan 10, 2019

- Fixed a packaging issue where some external dependencies were included in the Firebase package.

- Added syntax highlights to the README file.

### Cloud Firestore

- Fixed a regression introduced in 5.7.0 that caused apps using experimentalTabSynchronization to hit an exception for "Failed to obtain primary lease for action 'Collect garbage'".

## Version 5.7.1 - Dec 20, 2018

### Authentication

- Added SAML providers and exposed the API to enable OIDC providers.

- Changed the email validation logic to allow international email addresses.

### Cloud Firestore

- Added a custom error for schema downgrades.

## Version 5.7.0 - Dec 6, 2018

### Cloud Firestore

- Added a garbage collection process to on-disk persistence that
  removes older documents. This is enabled automatically if persistence is
  enabled, and the SDK will attempt to periodically clean up older, unused
  documents once the on-disk cache passes a threshold size (default: 40 MB).
  This threshold can be configured by changing the setting `cacheSizeBytes` in
  the settings passed to `Firestore.settings()`. It must be set to a minimum of
  1 MB. The garbage collection process can be disabled entirely by setting
  `cacheSizeBytes` to `CACHE_SIZE_UNLIMITED`.

- Updated gRPC version to support Node 11.

## Version 5.6.0 - Nov 29, 2018

### Authentication

- Added the ability to customize the dynamic link domain for email actions.

## Version 5.5.9 - Nov 20, 2018

- Updated mocha to version 5.2.0.

- Corrected syntax errors for Realtime Database example in rxFire documentation.

### Cloud Firestore

- Capped the amount of exponential backoff gRPC will use for reconnection attempts to 100ms.

## Version 5.5.8 - Nov 8, 2018

### Authentication

- Added a source map to facilitate easy debugging.

## Version 5.5.7 - Nov 1, 2018

### Cloud Functions for Firebase Client SDK

- Added the type definition for the `useFunctionsEmulator` method in the Cloud Functions for Firebase Client SDK.

## Version 5.5.6 - Oct 25, 2018

- Changed to distribute component libraries in UMD format from the CDN.

### Cloud Firestore

- Fixed an issue where the library is not compatible with IE 11.

## Version 5.5.5 - Oct 18, 2018

- Updated documentation to include examples for typescript and native
  es6 module in Node.js environment.

- Fixed the import path for Authentication in rxFire documentation.

## Version 5.5.4 - Oct 11, 2018

### Authentication

- Fixed an issue where the `this` variable was changed to undefined incorrectly.

### Cloud Firestore

- Removed fallback based on `eval()` for JSON parsing, allowing SDK to be used in environments that prohibit `eval()`.

## Version 5.5.3 - Oct 4, 2018

### Cloud Firestore

- Fixed an issue that prevented query synchronization between multiple tabs.
- Start tracking document usage in preparation for LRU Garbage Collection.

## Version 5.5.2 - Sep 27, 2018

- Fixed a browser compatibility issue with Safari 9 when loading individual components using the CDN.

### Cloud Firestore

- Fixed an issue where native ES6 module loading was not working.

### Authentication

- Added a new phone auth error message for malformed or mismatching credentials.

## Version 5.5.1 - Sep 19, 2018

- Updated the dependency version for the closure compiler, so it works with Java 10.

### Cloud Firestore

- Fixed an issue where typings are created in the wrong location.

### Realtime Database

- Fixed an issue where typings are created in the wrong location.

## Version 5.5.0 - Sep 12, 2018

- Fixed an issue where typings for the firebase package were referenced incorrectly.

### Cloud Firestore

- Access to offline persistence is no longer limited to a single tab. You can opt into this new experimental mode by invoking `enablePersistence()` with `{experimentalTabSynchronization: true}`. All tabs accessing persistence must use the same setting for this flag.
- Fixed an issue where the first `get()` call made after being offline could incorrectly return cached data without attempting to reach the backend.
- Changed `get()` to only make 1 attempt to reach the backend before returning cached data, potentially reducing delays while offline. Previously it would make 2 attempts, to work around a backend bug.
- Fixed an issue that caused us to drop empty objects from calls to `set(..., { merge: true })`.
- Improved argument validation for several API methods.
- Changed the internal handling for locally updated documents that haven't yet been read back from Cloud Firestore. This can lead to slight behavior changes and may affect the `SnapshotMetadata.hasPendingWrites` metadata flag.
- Eliminated superfluous update events for locally cached documents that are known to lag behind the server version. Instead, we buffer these events until the client has caught up with the server.

## Version 5.4.2 - August 30, 2018

### Authentication

- Fixed an issue where the `navigator` global was unavailable in some environments.

## Version 5.4.1 - August 23, 2018

### Cloud Firestore

- Fixed a regression that prevented use of Cloud Firestore on ReactNative's Expo platform (#1138).

### Authentication

- Fixed an issue in the IndexedDB implementation that was slow for some browsers.
- Fixed a memory leak in the IndexedDB implementation.

## Version 5.4.0 - August 16, 2018

### Cloud Firestore

- Fixed `get({source: 'cache'})` to be able to return nonexistent documents from cache.
- Prepared the persistence layer to allow shared access from multiple tabs. While this feature is not yet available, all schema changes are included in this release. Once you upgrade, you will not be able to use an older version of the Firestore SDK with persistence enabled.
- Fixed an issue where changes to custom authentication claims did not take effect until you did a full sign-out and sign-in. ([firebase/firebase-ios-sdk#1499](https://github.com/firebase/firebase-ios-sdk#1499))

## Version 5.3.1 - August 3, 2018

### Cloud Firestore

- Improved how Firestore handles idle queries to reduce the cost of re-listening within 30 minutes.
- Improved offline performance with many outstanding writes.

## Version 5.3.0 - July 19, 2018

### Authentication

- Fixed an issue where redirect results were being handled incorrectly for deleted Auth instances.

### Cloud Firestore

- Fixed an issue where queries returned fewer results than they should, caused by documents that were cached as deleted when they should not have been (firebase/firebase-ios-sdk#1548). Because some cache data is cleared, clients might use extra bandwidth the first time they launch with this version of the SDK.
- Added `firebase.firestore.FieldValue.arrayUnion()` and `firebase.firestore.FieldValue.arrayRemove()` to atomically add and remove elements from an array field in a document.
- Added `'array-contains'` query operator for use with `.where()` to find documents where an array field contains a specific element.

## Version 5.2.0 - June 28, 2018

### Cloud Functions for Firebase Client SDK

- Added a method that allows the Cloud Functions for Firebase Client SDK to use a local Functions Emulator.
- Added support for specifying a region for a given function.

### Realtime Database

- Fixed an issue that caused database to not work on IE 11.

## Version 5.1.0 - June 21, 2018

- Fixed an issue with the typings where the firebase namespace wasn't being exported.

### Authentication

- Added an ES Module export of Firebase Auth
- Fixed an issue with the IndexedDB fallback logic

## Version 5.0.4 - May 24, 2018

- Update the README.md files for our scoped packages on NPM (i.e. `@firebase/app`, `@firebase/auth`, `@firebase/database`, etc) to properly reflect the officially supported API.

### FCM

- Fixed an issue where VAPID keys weren't being handled correctly.

### Cloud Firestore

- Improved the messaging when unable to connect to the backend servers.

### Realtime Database

- Fixed the typings for `forEach` and `forEachChild` to properly support all valid return types.

## Version 5.0.3 - May 17, 2018

- Fixed a regression that was causing the `import * as firebase from 'firebase';` syntax to fail.

### FCM

- Fixed an issue where the messaging types were inconsistent with our documentation.

### Cloud Firestore

- Updated our GRPC dependency which fixed an issue some users had during `npm install`.

## Version 5.0.2 - May 10, 2018

- Fixed an issue where some of the nested imports (e.g. `firebase/app`) weren't exposing the proper types.

### FCM

- Changed a behavior where, if a VAPID key did not exist, an error was thrown.

## Version 5.0.1 - May 8, 2018

- Fixed an [issue](https://github.com/firebase/firebase-js-sdk/issues/787) with our typings that was preventing TypeScript apps from compiling.

## Version 5.0.0 - May 8, 2018

- Refactored the top-level Firebase entrypoints (e.g. `import firebase from 'firebase';`) to additionally include the Firestore and Functions components which were previously excluded by default. Developers using these bundles will find a warning in the browser console instructing them how to include only the components they are using, which will improve the performance of their applications.

### Authentication

- Exposes the new `Auth.settings.appVerificationDisabledForTesting` flag for disabling reCAPTCHA app verification used for phone authentication integration testing with whitelisted phone numbers.
- Exposes the new `Auth.updateCurrentUser` API for copying `firebase.User` objects between Firebase apps.
- Updated the return type signature for `signInWithEmailAndPassword`, `signInWithCustomToken`, `signInAnonymously` and `createUserWithEmailAndPassword` to return a promise that resolves with a `UserCredential` instead of a user.
- Removed `getToken` API in favor of `getIdToken` and `getIdTokenResult`.
- Deprecated `signInWithCredential`, `linkWithCredential`, `reauthenticateWithCredential` and `fetchProvidersForEmail` in favor of `signInAndRetrieveDataWithCredential`, `linkAndRetrieveDataWithCredential`, `reauthenticateAndRetrieveDataWithCredential` and `fetchSignInMethodsForEmail`.
- Improved detection of external auth state changes for synchronizing Auth state between different windows.

### Realtime Database

- Removed the private `path` property from `firebase.database.Reference`.

### Cloud Firestore

- Merged the `includeQueryMetadataChanges` and `includeDocumentMetadataChanges` options passed to `Query.onSnapshot()` into a single `includeMetadataChanges` option.
- `QuerySnapshot.docChanges()` is now a method that optionally takes an `includeMetadataChanges` option. By default, even when listening to a query with `{ includeMetadataChanges:true }`, metadata-only document changes are suppressed in `docChanges()`.
- Added new `{ mergeFields: (string|FieldPath)[] }` option to `set()` which allows merging of a reduced subset of fields.

### Cloud Storage

- Removed the previously deprecated `FullMetadata.downloadURLs` and `UploadTaskSnapshot.downloadURL` properties.

## Version 4.13.0 - April 19, 2018

- Added support for an alternate `initializeApp` syntax, to facilitate additional config options.
- Fixed the version of our `devDependencies` throughout the SDK to ensure that build/test changes are picked up in future releases.
- Refactored to use [core-js](https://github.com/zloirock/core-js) for our Polyfills/Shims.

### Authentication

- Fixed an issue where `navigator.onLine` sometimes errantly reports `false`.
- Fixed an issue where Firefox multi-tab/private mode browsing threw errors with our IndexedDB implementation.
- Exposes the new `getIdTokenResult` API for `firebase.User` objects.

### Cloud Firestore

- Added a new `Timestamp` class to represent timestamp fields, currently supporting up to microsecond precision. It can be passed to API methods anywhere a JS Date object is currently accepted. To make `DocumentSnapshot`s read timestamp fields back as `Timestamp`s instead of Dates, you can set the newly added flag `timestampsInSnapshots` in `FirestoreSettings` to `true`. Note that the current behavior (`DocumentSnapshot`s returning JS Date objects) will be removed in a future release. `Timestamp` supports higher precision than JS Date.
- Added ability to control whether `DocumentReference.get()` and `Query.get()` should fetch from server only, (by passing `{ source: 'server' }`), cache only (by passing `{ source: 'cache' }`), or attempt server and fall back to the cache (which was the only option previously, and is now the default).

### FCM

- Fixed an issue where `getToken` was throwing errors in Worker environments.
- General cleanup and hardening of the entire messaging codebase. added TypeScript types, additional tests, etc.

### Cloud Storage

- Deprecated the [`FullMetadata.downloadURLs`](https://firebase.google.com/docs/reference/js/firebase.storage.FullMetadata#downloadURLs) and [`UploadTaskSnapshot.downloadURL`](https://firebase.google.com/docs/reference/js/firebase.storage.UploadTaskSnapshot#downloadURL) properties in favor of [`Reference.getDownloadURL()`](https://firebase.google.com/docs/reference/js/firebase.storage.Reference#getDownloadURL)

## Version 4.12.1 - March 29, 2018

- Fixed an [issue](https://github.com/firebase/firebase-js-sdk/issues/474) where TypeScript would throw errors due to duplicate symbols.

### Authentication

- Fixed an [issue](https://github.com/firebase/firebase-js-sdk/issues/573) where several of the new APIs were missing from the firebase package typings.

### Cloud Firestore

- Fixed a regression in the Firebase JS release 4.11.0 that could cause get() requests made while offline to be delayed by up to 10 seconds (rather than returning from cache immediately).
- Fixed an [issue](https://github.com/firebase/firebase-js-sdk/issues/461) where some NPM users were seeing large performance degradations on Edge.
- Fixed an issue where several APIs were missing from the firebase package typings.

### FCM

- Improved error messaging around the `useServiceWorker` function to better communicate the intended use case.

## Version 4.12.0 - March 20, 2018

### Authentication

- Added several APIs to support the new passwordless email sign in feature.
  - [`fetchSignInMethodsForEmail`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#fetchSignInMethodsForEmail)
  - [`isSignInWithEmailLink`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#isSignInWithEmailLink)
  - [`sendSignInLinkToEmail`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#sendSignInLinkToEmail)
  - [`signInWithEmailLink`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInWithEmailLink)

### Cloud Functions for Firebase Client SDK

This release contains the new Firebase Functions Client SDK, with support
for HTTPS Callable Functions. See [Call Functions from Your
App](https://firebase.google.com/docs/functions/callable).

### Cloud Firestore

- Fixed a regression in the Firebase JS release 4.11.0 that could cause a crash if a user signs out while the client is offline, resulting in an error of "Attempted to schedule multiple operations with timer id listen_stream_connection_backoff".

## Version 4.11.0 - March 8, 2018

### Realtime Database

- Fixed an issue where certain browser APIs weren't available in IE 11.
- Added the ability to create a new reference from an existing database reference.

### Cloud Firestore

- If the SDK's attempt to connect to the Cloud Firestore backend doesn't succeed or fails within 10 seconds, the SDK will consider itself "offline", causing get() calls to resolve with cached results, rather than continuing to wait.

## Version 4.10.1 - February 22, 2018

- Did some internal refactoring to support the use of modern typescript APIs across the codebase (thanks [merlinnot](https://github.com/merlinnot) for the [PR](https://github.com/firebase/firebase-js-sdk/pull/422)!)

### Realtime Database

- Fixed an issue where users were unintentionally receiving an "Invalid query string" warning (see [this
  issue](https://github.com/firebase/firebase-js-sdk/issues/517)).

### FCM

- Fixed an issue where some users received duplicate notifications.
- Fixed an issue with a missing API in the typings.

## Version 4.10.0 - February 15, 2018

### Cloud Firestore

- Fixed an issue where Microsoft Edge users were seeing slow response times.

### Realtime Database

- Allow users passing custom database URLs, to set the namespace via the `ns` query parameter.

### FCM

- Added the `usePublicVapidKey` API to facilitate custom server application key usage.

## Version 4.9.1 - February 1, 2018

- Fixed an issue where ES6 wildcard imports were breaking Closure Compiler (thanks [@Doehl](https://github.com/Doehl) for the [PR](https://github.com/firebase/firebase-js-sdk/pull/370)!)

### Authentication

- Fixed an issue with universal link subscriptions when multiple listeners are registered.

### Realtime Database

- Allow users to set the database URL to a localhost value (thanks [@rynobax](https://github.com/rynobax) for the [PR](https://github.com/firebase/firebase-js-sdk/pull/426)!)

### Cloud Firestore

- Fixed a regression in Firebase JS release 4.9.0 that could in certain cases result in an "OnlineState should not affect limbo documents." assertion crash when the client loses its network connection.

## Version 4.9.0 - January 18, 2018

- Snapshot listeners (with the `includeMetadataChanges` option enabled) now receive an event with `snapshot.metadata.fromCache` set to `true` if the SDK loses its connection to the backend. A new event with `snapshot.metadata.fromCache` set to false will be raised once the connection is restored and the query is in sync with the backend again.
- Added `SnapshotOptions` API to control how DocumentSnapshots return unresolved server timestamps.
- Added `disableNetwork()` and `enableNetwork()` methods to `Firestore` class, allowing for explicit network management.
- For non-existing documents, `DocumentSnapshot.data()` now returns `undefined` instead of throwing an exception. A new `QueryDocumentSnapshot` class is introduced for Queries to reduce the number of undefined-checks in your code.
- Added `isEqual` API to `GeoPoint`, `Blob`, `SnapshotMetadata`, `DocumentSnapshot`, `QuerySnapshot`, `CollectionReference`, `FieldValue` and `FieldPath`.
- A "Could not reach Firestore backend." message will be logged when the initial connection to the Firestore backend fails.
- A "Using maximum backoff delay to prevent overloading the backend." message will be logged when we get a resource-exhausted error from the backend.

## Version 4.8.2 - January 11, 2018

- Fixed some regressions that were introduced in the typings refactor from the last release.
- Added the missing "author" field to the package.json files of each of the NPM packages.

## Version 4.8.1 - December 18, 2017

- Refactored the typings setup across the SDK.

### Cloud Firestore

- A "Could not reach Firestore backend." message will be logged when the initial connection to the Firestore backend fails.
- A "Using maximum backoff delay to prevent overloading the backend." message will be logged when we get a resource-exhausted error from the backend.

## Version 4.8.0 - December 7, 2017

### Authentication

- Added new APIs [`firebase.auth.Auth.prototype.createUserAndRetrieveDataWithEmailAndPassword`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#createUserAndRetrieveDataWithEmailAndPassword), [`firebase.auth.Auth.prototype.signInAndRetrieveDataWithCustomToken`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInAndRetrieveDataWithCustomToken), [`firebase.auth.Auth.prototype.signInAndRetrieveDataWithEmailAndPassword`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInAndRetrieveDataWithEmailAndPassword) and [`firebase.auth.Auth.prototype.signInAnonymouslyAndRetrieveData`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInAnonymouslyAndRetrieveData) which function the same as their counterparts but return a promise that resolves with a [`firebase.auth.UserCredential`](https://firebase.google.com/docs/reference/js/firebase.auth#.UserCredential) instead of a [`firebase.User`](https://firebase.google.com/docs/reference/js/firebase.User). These methods will be eventually renamed to replace the older methods.

### Cloud Firestore

- Fixed an issue with the Firestore webchannel integration that prevented use of firestore in worker environments.

## Version 4.7.0 - November 30, 2017

### Cloud Firestore

- Added Node.js support for Cloud Firestore (with the exception of offline persistence).
- Refactor Webchannel integration to avoid extra CORS preflight requests.

## Version 4.6.2 - November 9, 2017

### Authentication

- Fixed an issue where `localStorage` errors were not being caught properly.
- Return auth/user-disabled instead of auth/internal-error when signing in with an OAuth provider using a disabled account.

### Cloud Firestore

- Network streams are automatically closed after 60 seconds of   idleness.
- We no longer log 'RPC failed' messages for expected failures.
- Fixed an "Image is not defined" error when using Cloud Firestore from React Native.

## Version 4.6.1 - November 2, 2017

- Updated dependency versions across the different sub packages.

### Authentication

- Released the Open Source auth codebase.
- Automatically resets the reCAPTCHA after the phone authentication flow is triggered to prevent the same reCAPTCHA token from being sent in subsequent calls.

## Version 4.6.0 - October 19, 2017

### Authentication

- Added [`firebase.User.prototype.metadata`](https://firebase.google.com/docs/reference/js/firebase.User#metadata) which includes information about user creation time and last sign in time.
- Added the `isNewUser` property to [`firebase.auth.AdditionalUserInfo`](https://firebase.google.com/docs/reference/js/firebase.auth#.AdditionalUserInfo), which is returned by sign in methods to indicate whether a user is a new or returning user.
- Fixed a `TypeError` thrown after manually clearing localStorage

### Realtime Database

- Fixed a regression introduced in version `4.5.1` where authenticated user info was not properly being passed to the server, causing reads and writes to fail with `permission_denied` errors.

### Cloud Firestore

- Fixed the validation of nested arrays to allow indirect nesting.
- We now support `FieldValue.delete()` sentinels in `set()` calls with `{merge:true}`.

## Version 4.5.2 - October 16, 2017

- Fixed an issue where the "react-native" property was missing from the firebase package.json.
- Fixed an issue where `firebase.SDK_VERSION` was returning the placeholder string.

## Version 4.5.1 - October 12, 2017

- Refactored the internal module structure to make our package more modular and easier to maintain.

### Cloud Firestore

- Fixed an issue causing exceptions when trying to use `firebase.firestore.FieldPath.documentId()` in an `orderBy()` or `where()` clause in a query.

## Version 4.5.0 - October 2, 2017

- Added support for Cloud Firestore. For more information, see the following resources::
  - [Blog post](https://firebase.googleblog.com/2017/10/introducing-cloud-firestore.html)
  - [Web getting started guide](https://firebase.google.com/docs/firestore/client/setup-web)
  - [Reference Documentation](https://firebase.google.com/docs/reference/js/firebase.firestore)

## Version 4.4.0 - September 21, 2017

### Authentication

- Fixed some issues with null initialization of several classes in the externs files.

### Realtime Database

- Added [multi-resource](https://firebase.google.com/docs/database/usage/sharding.md.txt) support to the database SDK.

## Version 4.3.1 - September 7, 2017

### Authentication

- Fixed issue with typings for features released in 4.3.0

## Version 4.3.0 - August 17, 2017

### Authentication

- Added client side localization for email actions (password reset, email verification, etc), phone authentication SMS messages, OAuth flows and reCAPTCHA verification.
- Added the ability to pass a continue URL/state when triggering a password reset/email verification which gives a user the ability to go back to the app after completion. In addition, added support for the ability to open these links directly from a mobile app instead of a web flow using Firebase Dynamic Links. See the [docs](https://firebase.google.com/docs/auth/web/passing-state-in-email-actions.md.txt) for more information.
- Fixed issue with IE10 state synchronization across tabs

## Version 4.2.0 - July 27, 2017

### Authentication

- Added ability to configure state persistence. See [the
  docs](https://firebase.google.com/docs/auth/web/auth-state-persistence) for more information.
- Added missing `phoneNumber` property on `provideData` objects.
- Fixed temporary error message when opening a popup for sign-in, prominent in some IE browsers.
- Refactored to not use `navigator.onLine` for offline detection in Cordova environments.

### Realtime Database

- Fixed an issue where database references were missing a `toJSON` method.

## Version 4.1.5 - July 25, 2017

### Authentication

- Fixed an issue where authenticated realtime database access wasn't possible.

## Version 4.1.4 - July 24, 2017

- Bundle size improvements for `firebase-app.js`, `firebase-storage.js`, `firebase-messaging.js`.

### Realtime Database

- Refactored internal implementation to TypeScript.

## Version 4.1.3 - June 21, 2017

- Fixed an issue where certain app names were invalid

### Authentication

- Fixed an issue with the PhoneAuthProvider typings
- Fixed an issue where network errors from `signInWithRedirect` were cached even after the network connection stabilized.
- Fixed an issue where Cordova OAuth redirects in iOS apps were failing due iOS bundle ID case sensitive checks.

## Version 4.1.2 - June 6, 2017

- Fixed an issue where sourcemaps weren't pointing to the actual TypeScript source code.
- Fixed an issue where `FirebaseAppImpl.prototype` was being incorrectly patched.
- Fixed an issue where loading the SDK from our CDN, while also providing a chunked webpack build, was duplicating the `webpackJsonp` namespace.

## Version 4.1.1 - May 31, 2017

- Fixed an issue where the default storage bucket was not being initialized correctly.

## Version 4.1.0 - May 30, 2017

- Allow for lazy initialization of Firebase components (i.e. Authentication, Realtime Database, Cloud Storage, FCM).

### Authentication

- Fixed an issue where the SDK could trigger an infinite loop when loaded in an iFrame on Safari.

## Version 4.0.0 - May 17, 2017

### Authentication for Servers

- Removed support for deprecated `serviceAccount` and `credential` properties from the Node.js SDK. If you were previously using the Firebase JavaScript SDK to use these properties, use the [Firebase Admin Node.js SDK](https://firebase.google.com/docs/admin/setup.md.txt) instead.

### Authentication

- Added support for [phone number authentication](https://firebase.google.com/docs/auth/web/phone-auth.md.txt) using the following APIs:
  - [`PhoneAuthProvider`](https://firebase.google.com/docs/reference/js/firebase.auth.PhoneAuthProvider)
  - [`firebase.auth.Auth.prototype.signInWithPhoneNumber`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInWithPhoneNumber)
  - [`firebase.User.prototype.linkWithPhoneNumber`](https://firebase.google.com/docs/reference/js/firebase.User#linkWithPhoneNumber)
  - [`firebase.User.prototype.reauthenticateWithPhoneNumber`](https://firebase.google.com/docs/reference/js/firebase.User#reauthenticateWithPhoneNumber)
- Augmented the IdP data (for a list of all supported fields see [`firebase.auth.UserCredential`](https://firebase.google.com/docs/reference/js/firebase.auth#.UserCredential)) returned by the following APIs:
  - [`firebase.auth.Auth.prototype.signInAndRetrieveDataWithCredential`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInAndRetrieveDataWithCredential)
  - [`firebase.User.prototype.linkAndRetrieveDataWithCredential`](https://firebase.google.com/docs/reference/js/firebase.User#linkAndRetrieveDataWithCredential)
  - [`firebase.User.prototype.reauthenticateAndRetrieveDataWithCredential`](https://firebase.google.com/docs/reference/js/firebase.User#reauthenticateAndRetrieveDataWithCredential)
- Added the [`firebase.auth.Auth.prototype.onIdTokenChanged`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#onIdTokenChanged) method that triggers on ID token changes.
- Fixed an issue where new anonymous users were created on page load instead of returning an existing one.
- Fixed an issue where `firebase.User.prototype.updateProfile` was not triggering an update in password provider data.
- Deprecated `firebase.User.prototype.getToken` in favor of `firebase.User.prototype.getIdToken`.
- BREAKING: `firebase.auth.Auth.prototype.onAuthStateChanged` now triggers on sign in and sign out.
- BREAKING: `firebase.User.prototype.reauthenticate` has been removed in favor of [`firebase.User.prototype.reauthenticateWithCredential`](https://firebase.google.com/docs/reference/js/firebase.User#reauthenticateWithCredential).
- BREAKING: `firebase.User.prototype.link` has been removed in favor of [`firebase.User.prototype.linkWithCredential`](https://firebase.google.com/docs/reference/js/firebase.User#linkWithCredential).
- BREAKING: `firebase.AuthCredential.prototype.provider` has been removed in favor of [`firebase.AuthCredential.prototype.providerId`](https://firebase.google.com/docs/reference/js/firebase.User#reauthenticateWithCredential).

## Version 3.9.0 - April 25, 2017

### Authentication

- Deprecated `firebase.auth.authCredential.prototype.provider` in favor of the `firebase.auth.AuthCredential.prototype.providerId` property.
- Fixed an issue where Cordova apps were seeing unusual delays in authentication.

## Version 3.8.0 - April 18, 2017

- Provide source maps for firebase-app.js.

### Authentication

- Added new APIs [`reauthenticateWithPopup`](https://firebase.google.com/docs/reference/js/firebase.User#reauthenticateWithPopup) and [`reauthenticateWithRedirect`](https://firebase.google.com/docs/reference/js/firebase.User#reauthenticateWithRedirect) for reauthenticating with an OAuth provider using a popup or a redirect.
- Added the `operationType` property to the [`firebase.auth.UserCredential`](https://firebase.google.com/docs/reference/js/firebase.auth#.UserCredential) object to determine if the result was obtained from a `signIn`, `link` or `reauthenticate` operation.
- Added support for Cordova OAuth sign-in using the [`signInWithRedirect`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInWithRedirect), [`linkWithRedirect`](https://firebase.google.com/docs/reference/js/firebase.User#linkWithRedirect), and [`reauthenticateWithRedirect`](https://firebase.google.com/docs/reference/js/firebase.User#reauthenticateWithRedirect) methods.
- Deprecated `firebase.User.prototype.link` in favor of the [`firebase.User.prototype.linkWithCredential`](https://firebase.google.com/docs/reference/js/firebase.User#linkWithCredential) method.
- Deprecated `firebase.User.prototype.reauthenticate` in favor of the [`firebase.User.prototype.reauthenticateWithCredential`](https://firebase.google.com/docs/reference/js/firebase.User#reauthenticateWithCredential) method.

## Version 3.7.8 - April 14, 2017

- Fixed an issue where `npm-shrinkwrap.json` was not being generated correctly.

## Version 3.7.7 - April 14, 2017

- Fixed an issue where undefined symbols caused an error to be thrown in older browsers.

## Version 3.7.6 - April 11, 2017

### Authentication

- Fixed an issue where removal of a legacy options object broke older clients.

## Version 3.7.5 - April 4, 2017

### Cloud Storage

- Provide higher-granularity progress updates for object uploads.

## Version 3.7.4 - March 28, 2017

### Realtime Database

- Fixed an issue where `firebase.database().ref().push()`, would trigger an infinite loop if the returned `.then()` function was called.

### Authentication

- Fixed an issue where `firebase.User.reauthenticate()` was creating new users if passed an OAuth credential for a user that didn't exist.

## Version 3.7.3 - March 21, 2017

### Realtime Database

- Fixed error messaging for invalid calls to `Query.equalTo()`.

## Version 3.7.2 - March 14, 2017

- Fixed an issue where some components erroneously allowed creation of multiple instances.

## Version 3.7.1 - March 9, 2017

### Authentication

- Updated `firebase.auth().signInWithPopup()` to work properly in Chrome extensions.
- Improved session handling for prolonged usage of the Realtime Database.

## Version 3.7.0 - March 1, 2017

### Cloud Storage

- Added support for using multiple buckets within Cloud Storage.

## Version 3.6.10 - February 21, 2017

### Cloud Storage

- Fixed an issue where the [`catch()`](https://firebase.google.com/docs/reference/js/firebase.storage.UploadTask#catch) method didn't exist on `UploadTask`.

## Version 3.6.9 - February 7, 2017

### Authentication

- Fixed an issue that broke `firebase.auth().signInWithCredential()` in a browser environment when the current URL has the OAuth 2.0-specific `state` query parameter.

## Version 3.6.8 - January 31, 2017

- Fixed an issue with some module bundlers. The npm (commonjs) modules no longer require a `global` variable to be set explicitly and fallback to `window` or `self` if `global` is not defined.

### Authentication

- Increased authentication timeouts for network requests to handle slow network connections.
- Fixed authentication module Node.js detection to be compatible with browserify.
- Modified `firebase.auth().signInWithPopup()` to work for apps embedded in a sandboxed iframe.
- Fixed the Android Chrome bug for triggering internal-errors in `firebase.auth().signInWithPopup()`
- Fixed an issue that broke `firebase.auth().signInWithCredential()` and `firebase.auth().fetchProvidersForEmail()` in non http/https environments like chrome-extensions.
- Fixed progress bar styling in the OAuth helper for popup/redirect operations.

## Version 3.6.7 - January 24, 2017

- Improved Firebase app errors to return error codes prefixed with `app/` consistent with other Firebase service errors.

## Version 3.6.6 - January 17, 2017

- Fixed support for TypeScript and ES6 imports of individual SDK modules (see the [npm package README](https://www.npmjs.com/package/firebase#include-only-the-features-you-need) for more information).

### Authentication

- Fixed an issue on Chrome for iOS where a blank gray screen was being displayed when `signInWithPopup()` does not require additional user interaction (because the user is already signed in and has previously consented to the requested scopes).

## Version 3.6.5 - January 10, 2017

### Cloud Storage

- Improved error messages when invalid metadata is passed to the [`put`](https://firebase.google.com/docs/reference/js/firebase.storage.Reference#put), [`putString`](https://firebase.google.com/docs/reference/js/firebase.storage.Reference#putString), or [`updateMetadata`](https://firebase.google.com/docs/reference/js/firebase.storage.Reference#updateMetadata) methods.

## Version 3.6.4 - December 13, 2016

### Realtime Database

- Added the missing [`firebase.database.ServerValue.TIMESTAMP`](https://firebase.google.com/docs/reference/js/firebase.database.ServerValue#.TIMESTAMP) property to the TypeScript type declarations (`firebase.d.ts`).

### Cloud Storage

- Fixed an issue where percent-encoded data in a [data URL](https://firebase.google.com/docs/reference/js/firebase.storage#.StringFormat) was not decoded.

### Authentication

- Optimized offline detection to reduce the frequency of network timeouts.

## Version 3.6.3 - December 6, 2016

- Changed the packaging of browser npm modules to fix an issue that occurred when using Cloud Storage with the Browserify and webpack module bundlers.

## Version 3.6.2 - November 29, 2016

- Updated file attributes in the Firebase npm package to be compatible with the [Yarn Package Manager](https://www.npmjs.com/package/yarn).
- Updated the [jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken) version used in the Firebase npm package.

### Authentication

- Fixed an issue that prevented user authentication states from persisting when using Firebase Authentication with React Native versions 0.37 and higher.

## Version 3.6.1 - November 15, 2016

### Cloud Storage

- Reduced the SDK download size.
- Fixed networking issues affecting React Native on Android.

### Authentication

- Added missing definitions for `setCustomParameters()` methods in the firebase.d.ts file for TypeScript users.

## Version 3.6.0 - November 8, 2016

### Authentication for Servers

- SDK authentication with a service account on Node.js, and the corresponding token minting and verification methods, has been deprecated in favor of a new Node.js Admin SDK. To learn more, go to [Admin SDK Setup](https://firebase.google.com/docs/admin/setup.md.txt). To see the Node.js Admin API reference, go to [Admin SDK API Reference](https://firebase.google.com/docs/reference/admin/node.md.txt).

### Authentication

- Fixed an incorrect **popup blocked** error that occurred in the Chrome browser on iOS 7 and 8.

## Version 3.5.3 - November 1, 2016

- Reduced the SDK download size.

### Authentication

- Fixed issues with redirect and pop-up sign-in methods when using browsers that block third-party cookies and site data.

## Version 3.5.2 - October 24, 2016

### Authentication

- Increase the request timeout interval for mobile devices to improve performance on high-latency networks.

## Version 3.5.1 - October 19, 2016

### Cloud Messaging

- Added a check to validate the `gcm_sender_id`.
- Fixed a race condition that occurs when using the Firefox web browser.

## Version 3.5.0 - October 14, 2016

### Authentication

- Added support for custom OAuth parameters using the [`GoogleAuthProvider.setCustomParameters()`](https://firebase.google.com/docs/reference/js/firebase.auth.GoogleAuthProvider#setCustomParameters), [`FacebookAuthProvider.setCustomParameters()`](https://firebase.google.com/docs/reference/js/firebase.auth.FacebookAuthProvider#setCustomParameters), and [`GithubAuthProvider.setCustomParameters()`](https://firebase.google.com/docs/reference/js/firebase.auth.GithubAuthProvider#setCustomParameters) methods.

### Cloud Messaging

- Introduction of [Firebase Cloud Messaging](https://firebase.google.com/docs/reference/js/firebase.messaging.Messaging) for the JavaScript SDK.

## Version 3.4.1 - September 27, 2016

### Realtime Database

- Ensure that the SDK does not prevent Node.js from shutting down the process. Calling `firebase.database().goOffline()` or `firebase.app().delete()` should be sufficient for Node.js to exit now.
- Fixed a bug where the database inadvertently created a global variable on the window object.
- Use of the `update()` method now only cancels transactions that are directly included in the updated paths (not transactions in adjacent paths). For example, an update at `/move` for a child node `walk` will cancel transactions at `/`, `/move`, and `/move/walk` and in any child nodes under `/move/walk`. But, it will no longer cancel transactions at sibling nodes, such as `/move/run`.

### Cloud Storage

- Improved network utilization for file uploads.

## Version 3.4.0 - September 14, 2016

### Realtime Database

- New [`Query.isEqual()`](https://firebase.google.com/docs/reference/js/firebase.database.Query#isEqual) method allows for comparing any `Reference` or `Query` for equality.

## Version 3.3.2 - September 8, 2016

### Authentication

- Fixed an issue with [`signInWithPopup()`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInWithPopup) not working with Internet Explorer.

## Version 3.3.1 - September 7, 2016

- Added an error message when attempting to use a service account in non-Node.js environments.

### Authentication

- Fixed backend error messages that were being truncated.
- Fixed an error where user properties were not automatically refreshed on page reload.
- The user's credential and email are now returned when account linking throws the following errors: `auth/credential-already-in-use` and `auth/email-already-in-use`.
- Modified the Facebook login and OAuth grant permissions screen to work better in popup-sized windows.
- This release has an issue with [`signInWithPopup()`](https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInWithPopup) not working with Internet Explorer. You can continue to use version 3.3.0 or earlier until this is fixed in a future release.

### Cloud Storage

- Fixed an issue where `contentType` in custom metadata was being ignored for string-format uploads.

## Version 3.3.0 - August 16, 2016

### Authentication

- Client Authentication APIs are now available in Node.js. When you call `initializeApp()`, pass a `serviceAccount` to use the Authentication for Servers APIs in your app, or pass an `apiKey` to use the client Authentication APIs.
- Network error handling for sign in and link with popup operations.
- Long popup cancellation timeouts.
- When you use `signInWithRedirect`, the `onAuthStateChanged` observer now waits until `getRedirectResult` resolves before triggering. (In older versions, the observer would trigger twice: once when the page loaded, and a second time when `getRedirectResult` resolved.)

### Realtime Database

- A warning is no longer logged if you don't provide an `apiKey` when initializing the SDK and just want to have unauthenticated access to your Realtime Database. Security Rules are still in effect even if you do not provide an `apiKey`.

### Cloud Storage

- Added support for string and base64 encoded uploads ([`Reference.put()`](https://firebase.google.com/docs/reference/js/firebase.storage.Reference#put) and [`Reference.putString()`](https://firebase.google.com/docs/reference/js/firebase.storage.Reference#putString)).

## Version 3.2.1 - July 26, 2016

- TypeScript 2.0 type definitions added to npm package.

### Authentication

- Fixed issues with Safari private mode.
- More detailed debugging messages for internal errors.

## Version 3.2.0 - July 12, 2016

### Cloud Storage

- [`UploadTask`](https://firebase.google.com/docs/reference/js/firebase.storage.UploadTask) can now be used like a Promise, and resolves with its snapshot data when the upload completes.

### Authentication

- Github login responsiveness.
- Missing display names in profile scope for some Google accounts.

### Authentication for Servers

- Added `uid` to the decoded token returned by `verifyIdToken()`. It is set to the ID token's `sub` (subject) claim.

## Version 3.1.0 - June 28, 2016

### Authentication

- Replace use of browser-specific APIs that were blocking use of [React Native](https://facebook.github.io/react-native/) from the JavaScript SDK.
- The Node.js SDK now supports unauthenticated access. If no service account is provided, Realtime Database access will be restricted just as any unauthenticated client would be. In this case, certain methods (like creating and verifying tokens) will throw an error.

## Version 3.0.5 - June 14, 2016

### Authentication

- Fixed JSON parsing error when used in Chrome extensions.
- Corrected server URLs used by library when using localhost for debugging.

### Cloud Storage

- Allows use of `"gs://bucket"` instead of `"bucket"` in `storageBucket` config.

## Version 3.0.4 - June 7, 2016

### Realtime Database

- Updated the [reference documentation](https://firebase.google.com/docs/reference/js.md.txt) to include more extensive API descriptions and examples.
- Improved Realtime Database authentication-expiration retry logic.

### Authentication

- When using Firebase Web SDK in a non http or https environment (Cordova or Electron apps for instance), instead of raising a confusing error on initialization, it will silently ignore it. It will only throw an `auth/operation-not-supported-in-this-environment` error when trying to use unsupported operations (`signInWithPopup`, `signInWithRedirect`, `linkWithPopup`, `linkWithRedirect` and `getRedirectResult`).

### Cloud Storage

- Generate more specific error message when quota is exceeded.

## Version 3.0.3 - May 24, 2016

### Authentication

- Improved error messages.

### Authentication for Servers

- Global `Promise` object is no longer overwritten.
- Added error message when initializing the Node.js SDK with an invalid service account.

## Version 3.0.2 - May 19, 2016

- Browserify and webpack compatibility.

## Version 3.0.1 - May 18, 2016

- Node.js version 0.10 support.

## Version 3.0.0 - May 18, 2016

- Launch of new APIs and [Firebase console](https://console.firebase.google.com/).

### Realtime Database

- The way you install and initialize the SDK has changed and several APIs have been renamed. When you decide to upgrade, please see the [Web Migration Guide](https://firebase.google.com/support/guides/firebase-web) for detail.
- The way you install and initialize the Node.js has also changed. APIs have been renamed and you now authenticate using a [service account](https://console.developers.google.com/iam-admin/serviceaccounts/project) instead of a secret or custom token. When you choose to upgrade, please see the [Database Server SDK Setup Guide](https://firebase.google.com/docs/database/server/start) and use the [Web Migration Guide](https://firebase.google.com/support/guides/firebase-web) to help you update your Node.js code to the latest APIs.

### Authentication

- The way you install and initialize the SDK has changed and most APIs have been renamed. When you decide to upgrade, please see the [Web Migration Guide](https://firebase.google.com/support/guides/firebase-web) for details.
- Node.js server SDK:
  - [Token minting and verification](https://firebase.google.com/docs/auth/server) for Firebase Authentication is now built into the server SDKs themselves instead of in separate token minting libraries.
  - All of the existing authentication methods have been removed. Instead, use the `databaseAuthVariableOverride` option (Node.js) or when initializing the SDK. See [Installation \& Setup for Servers](https://firebase.google.com/docs/database/server/start) for more details.
  - Use the [Web Migration Guide](https://firebase.google.com/support/guides/firebase-web) or to help you update your Node.js or Java code to the latest APIs.

### Cloud Storage

- Initial release of Cloud Storage. Cloud Storage provides secure file uploads and downloads for your Firebase apps, regardless of network quality. You can use it to store images, audio, video, or other user-generated content. Cloud Storage is backed by [Google Cloud Storage](https://cloud.google.com/storage), a powerful, simple, and cost-effective object storage service.

## Legacy release notes

[Firebase 1.0 and 2.0 JavaScript Changelog](https://www.firebase.com/docs/web/changelog.html)