From ed2e64b12a72db2fd53b0acf07324e2628f0de4b Mon Sep 17 00:00:00 2001
From: Christina Holland <chholland@google.com>
Date: Wed, 7 May 2025 15:11:20 -0700
Subject: [PATCH 1/2] Revert "Change automaticDataCollectionEnabled to default
 to true. (#8999)"

This reverts commit 3789b5ad16ffd462fce1d0b9c2e9ffae373bc6eb.
---
 docs-devsite/app.firebaseappsettings.md       |  4 +-
 packages/app-check/src/api.test.ts            | 73 +------------------
 packages/app-check/src/api.ts                 | 20 ++---
 .../app-compat/test/firebaseAppCompat.test.ts |  8 +-
 packages/app/src/api.test.ts                  | 19 ++---
 packages/app/src/api.ts                       |  4 +-
 packages/app/src/firebaseApp.test.ts          |  4 +-
 packages/app/src/firebaseServerApp.ts         |  2 +-
 packages/app/src/public-types.ts              |  2 +-
 9 files changed, 28 insertions(+), 108 deletions(-)

diff --git a/docs-devsite/app.firebaseappsettings.md b/docs-devsite/app.firebaseappsettings.md
index e7838ab4185..1515e21ac93 100644
--- a/docs-devsite/app.firebaseappsettings.md
+++ b/docs-devsite/app.firebaseappsettings.md
@@ -22,12 +22,12 @@ export interface FirebaseAppSettings
 
 |  Property | Type | Description |
 |  --- | --- | --- |
-|  [automaticDataCollectionEnabled](./app.firebaseappsettings.md#firebaseappsettingsautomaticdatacollectionenabled) | boolean | The settable config flag for GDPR opt-in/opt-out. Defaults to true. |
+|  [automaticDataCollectionEnabled](./app.firebaseappsettings.md#firebaseappsettingsautomaticdatacollectionenabled) | boolean | The settable config flag for GDPR opt-in/opt-out |
 |  [name](./app.firebaseappsettings.md#firebaseappsettingsname) | string | custom name for the Firebase App. The default value is <code>&quot;[DEFAULT]&quot;</code>. |
 
 ## FirebaseAppSettings.automaticDataCollectionEnabled
 
-The settable config flag for GDPR opt-in/opt-out. Defaults to true.
+The settable config flag for GDPR opt-in/opt-out
 
 <b>Signature:</b>
 
diff --git a/packages/app-check/src/api.test.ts b/packages/app-check/src/api.test.ts
index b71971e9d70..a6805d1b0b3 100644
--- a/packages/app-check/src/api.test.ts
+++ b/packages/app-check/src/api.test.ts
@@ -239,7 +239,7 @@ describe('api', () => {
       expect(getStateReference(app).activated).to.equal(true);
     });
 
-    it('global false + local unset = false', () => {
+    it('isTokenAutoRefreshEnabled value defaults to global setting', () => {
       app.automaticDataCollectionEnabled = false;
       initializeAppCheck(app, {
         provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
@@ -247,77 +247,8 @@ describe('api', () => {
       expect(getStateReference(app).isTokenAutoRefreshEnabled).to.equal(false);
     });
 
-    it('global false + local true = false', () => {
-      app.automaticDataCollectionEnabled = false;
-      initializeAppCheck(app, {
-        provider: new ReCaptchaV3Provider(FAKE_SITE_KEY),
-        isTokenAutoRefreshEnabled: true
-      });
-      expect(getStateReference(app).isTokenAutoRefreshEnabled).to.equal(false);
-    });
-
-    it('global false + local false = false', () => {
-      app.automaticDataCollectionEnabled = false;
-      initializeAppCheck(app, {
-        provider: new ReCaptchaV3Provider(FAKE_SITE_KEY),
-        isTokenAutoRefreshEnabled: false
-      });
-      expect(getStateReference(app).isTokenAutoRefreshEnabled).to.equal(false);
-    });
-
-    it('global unset + local unset = false', () => {
-      // Global unset should default to true.
-      initializeAppCheck(app, {
-        provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
-      });
-      expect(getStateReference(app).isTokenAutoRefreshEnabled).to.equal(false);
-    });
-
-    it('global unset + local false = false', () => {
-      // Global unset should default to true.
-      initializeAppCheck(app, {
-        provider: new ReCaptchaV3Provider(FAKE_SITE_KEY),
-        isTokenAutoRefreshEnabled: false
-      });
-      expect(getStateReference(app).isTokenAutoRefreshEnabled).to.equal(false);
-    });
-
-    it('global unset + local true = true', () => {
-      // Global unset should default to true.
-      initializeAppCheck(app, {
-        provider: new ReCaptchaV3Provider(FAKE_SITE_KEY),
-        isTokenAutoRefreshEnabled: true
-      });
-      expect(getStateReference(app).isTokenAutoRefreshEnabled).to.equal(true);
-    });
-
-    it('global true + local unset = false', () => {
-      app.automaticDataCollectionEnabled = true;
-      initializeAppCheck(app, {
-        provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
-      });
-      expect(getStateReference(app).isTokenAutoRefreshEnabled).to.equal(false);
-    });
-
-    it('global true + local false = false', () => {
-      app.automaticDataCollectionEnabled = true;
-      initializeAppCheck(app, {
-        provider: new ReCaptchaV3Provider(FAKE_SITE_KEY),
-        isTokenAutoRefreshEnabled: false
-      });
-      expect(getStateReference(app).isTokenAutoRefreshEnabled).to.equal(false);
-    });
-
-    it('global true + local true = true', () => {
-      app.automaticDataCollectionEnabled = true;
-      initializeAppCheck(app, {
-        provider: new ReCaptchaV3Provider(FAKE_SITE_KEY),
-        isTokenAutoRefreshEnabled: true
-      });
-      expect(getStateReference(app).isTokenAutoRefreshEnabled).to.equal(true);
-    });
-
     it('sets isTokenAutoRefreshEnabled correctly, overriding global setting', () => {
+      app.automaticDataCollectionEnabled = false;
       initializeAppCheck(app, {
         provider: new ReCaptchaV3Provider(FAKE_SITE_KEY),
         isTokenAutoRefreshEnabled: true
diff --git a/packages/app-check/src/api.ts b/packages/app-check/src/api.ts
index e7c9f8cfcf9..a4dd87a4e77 100644
--- a/packages/app-check/src/api.ts
+++ b/packages/app-check/src/api.ts
@@ -43,7 +43,6 @@ import {
 } from './internal-api';
 import { readTokenFromStorage } from './storage';
 import { getDebugToken, initializeDebugMode, isDebugMode } from './debug';
-import { logger } from './logger';
 
 declare module '@firebase/component' {
   interface NameServiceMapping {
@@ -133,7 +132,7 @@ export function initializeAppCheck(
 function _activate(
   app: FirebaseApp,
   provider: AppCheckProvider,
-  isTokenAutoRefreshEnabled: boolean = false
+  isTokenAutoRefreshEnabled?: boolean
 ): void {
   // Create an entry in the APP_CHECK_STATES map. Further changes should
   // directly mutate this object.
@@ -150,18 +149,13 @@ function _activate(
     return cachedToken;
   });
 
-  // Global `automaticDataCollectionEnabled` (defaults to true) and
-  // `isTokenAutoRefreshEnabled` must both be true.
+  // Use value of global `automaticDataCollectionEnabled` (which
+  // itself defaults to false if not specified in config) if
+  // `isTokenAutoRefreshEnabled` param was not provided by user.
   state.isTokenAutoRefreshEnabled =
-    isTokenAutoRefreshEnabled && app.automaticDataCollectionEnabled;
-
-  if (!app.automaticDataCollectionEnabled && isTokenAutoRefreshEnabled) {
-    logger.warn(
-      '`isTokenAutoRefreshEnabled` is true but ' +
-        '`automaticDataCollectionEnabled` was set to false during' +
-        ' `initializeApp()`. This blocks automatic token refresh.'
-    );
-  }
+    isTokenAutoRefreshEnabled === undefined
+      ? app.automaticDataCollectionEnabled
+      : isTokenAutoRefreshEnabled;
 
   state.provider.initialize(app);
 }
diff --git a/packages/app-compat/test/firebaseAppCompat.test.ts b/packages/app-compat/test/firebaseAppCompat.test.ts
index 61bbed848d8..f12a73e61a8 100644
--- a/packages/app-compat/test/firebaseAppCompat.test.ts
+++ b/packages/app-compat/test/firebaseAppCompat.test.ts
@@ -403,17 +403,17 @@ function firebaseAppTests(
       ).throws(/'abc'.*exists/i);
     });
 
-    it('automaticDataCollectionEnabled is `true` by default', () => {
+    it('automaticDataCollectionEnabled is `false` by default', () => {
       const app = firebase.initializeApp({}, 'my-app');
-      expect(app.automaticDataCollectionEnabled).to.eq(true);
+      expect(app.automaticDataCollectionEnabled).to.eq(false);
     });
 
     it('automaticDataCollectionEnabled can be set via the config object', () => {
       const app = firebase.initializeApp(
         {},
-        { automaticDataCollectionEnabled: false }
+        { automaticDataCollectionEnabled: true }
       );
-      expect(app.automaticDataCollectionEnabled).to.eq(false);
+      expect(app.automaticDataCollectionEnabled).to.eq(true);
     });
 
     it('Modifying options object does not change options.', () => {
diff --git a/packages/app/src/api.test.ts b/packages/app/src/api.test.ts
index 4e79ad58d82..f6cf922ba05 100644
--- a/packages/app/src/api.test.ts
+++ b/packages/app/src/api.test.ts
@@ -128,14 +128,14 @@ describe('API tests', () => {
         {
           apiKey: 'test1'
         },
-        { automaticDataCollectionEnabled: false }
+        { automaticDataCollectionEnabled: true }
       );
       expect(() =>
         initializeApp(
           {
             apiKey: 'test1'
           },
-          { automaticDataCollectionEnabled: true }
+          { automaticDataCollectionEnabled: false }
         )
       ).throws(/\[DEFAULT\].*exists/i);
     });
@@ -146,14 +146,14 @@ describe('API tests', () => {
         {
           apiKey: 'test1'
         },
-        { name: appName, automaticDataCollectionEnabled: false }
+        { name: appName, automaticDataCollectionEnabled: true }
       );
       expect(() =>
         initializeApp(
           {
             apiKey: 'test1'
           },
-          { name: appName, automaticDataCollectionEnabled: true }
+          { name: appName, automaticDataCollectionEnabled: false }
         )
       ).throws(/'MyApp'.*exists/i);
     });
@@ -164,16 +164,11 @@ describe('API tests', () => {
       expect(app.name).to.equal(appName);
     });
 
-    it('sets automaticDataCollectionEnabled to true by default', () => {
-      const app = initializeApp({});
+    it('sets automaticDataCollectionEnabled', () => {
+      const app = initializeApp({}, { automaticDataCollectionEnabled: true });
       expect(app.automaticDataCollectionEnabled).to.be.true;
     });
 
-    it('sets a new automaticDataCollectionEnabled value if provided', () => {
-      const app = initializeApp({}, { automaticDataCollectionEnabled: false });
-      expect(app.automaticDataCollectionEnabled).to.be.false;
-    });
-
     it('adds registered components to App', () => {
       _clearComponents();
       const comp1 = createTestComponent('test1');
@@ -216,7 +211,7 @@ describe('API tests', () => {
 
       const app = initializeServerApp(options, serverAppSettings);
       expect(app).to.not.equal(null);
-      expect(app.automaticDataCollectionEnabled).to.be.true;
+      expect(app.automaticDataCollectionEnabled).to.be.false;
       await deleteApp(app);
       expect((app as FirebaseServerAppImpl).isDeleted).to.be.true;
     });
diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts
index 9cba8ec6f50..b8ec25fc509 100644
--- a/packages/app/src/api.ts
+++ b/packages/app/src/api.ts
@@ -143,7 +143,7 @@ export function initializeApp(
 
   const config: Required<FirebaseAppSettings> = {
     name: DEFAULT_ENTRY_NAME,
-    automaticDataCollectionEnabled: true,
+    automaticDataCollectionEnabled: false,
     ...rawConfig
   };
   const name = config.name;
@@ -241,7 +241,7 @@ export function initializeServerApp(
   }
 
   if (_serverAppConfig.automaticDataCollectionEnabled === undefined) {
-    _serverAppConfig.automaticDataCollectionEnabled = true;
+    _serverAppConfig.automaticDataCollectionEnabled = false;
   }
 
   let appOptions: FirebaseOptions;
diff --git a/packages/app/src/firebaseApp.test.ts b/packages/app/src/firebaseApp.test.ts
index 3acbb4a2869..419eeef4f1f 100644
--- a/packages/app/src/firebaseApp.test.ts
+++ b/packages/app/src/firebaseApp.test.ts
@@ -27,11 +27,11 @@ describe('FirebaseAppNext', () => {
     };
     const app = new FirebaseAppImpl(
       options,
-      { name: 'test', automaticDataCollectionEnabled: true },
+      { name: 'test', automaticDataCollectionEnabled: false },
       new ComponentContainer('test')
     );
 
-    expect(app.automaticDataCollectionEnabled).to.be.true;
+    expect(app.automaticDataCollectionEnabled).to.be.false;
     expect(app.name).to.equal('test');
     expect(app.options).to.deep.equal(options);
   });
diff --git a/packages/app/src/firebaseServerApp.ts b/packages/app/src/firebaseServerApp.ts
index 2bb8efc7a63..21232869c3c 100644
--- a/packages/app/src/firebaseServerApp.ts
+++ b/packages/app/src/firebaseServerApp.ts
@@ -74,7 +74,7 @@ export class FirebaseServerAppImpl
     const automaticDataCollectionEnabled =
       serverConfig.automaticDataCollectionEnabled !== undefined
         ? serverConfig.automaticDataCollectionEnabled
-        : true;
+        : false;
 
     // Create the FirebaseAppSettings object for the FirebaseAppImp constructor.
     const config: Required<FirebaseAppSettings> = {
diff --git a/packages/app/src/public-types.ts b/packages/app/src/public-types.ts
index 4f8373f2250..ea68579a7e9 100644
--- a/packages/app/src/public-types.ts
+++ b/packages/app/src/public-types.ts
@@ -165,7 +165,7 @@ export interface FirebaseAppSettings {
    */
   name?: string;
   /**
-   * The settable config flag for GDPR opt-in/opt-out. Defaults to true.
+   * The settable config flag for GDPR opt-in/opt-out
    */
   automaticDataCollectionEnabled?: boolean;
 }

From 324a7aff0c873b046115f0eed6519e7493ba556a Mon Sep 17 00:00:00 2001
From: Christina Holland <chholland@google.com>
Date: Wed, 7 May 2025 15:12:44 -0700
Subject: [PATCH 2/2] Revert #8999 - backend is not ready

---
 .changeset/blue-spies-visit.md | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 .changeset/blue-spies-visit.md

diff --git a/.changeset/blue-spies-visit.md b/.changeset/blue-spies-visit.md
new file mode 100644
index 00000000000..2f1ebf01827
--- /dev/null
+++ b/.changeset/blue-spies-visit.md
@@ -0,0 +1,7 @@
+---
+'@firebase/app-compat': patch
+'@firebase/app-check': patch
+'@firebase/app': patch
+---
+
+Revert https://github.com/firebase/firebase-js-sdk/pull/8999