Skip to content

deleteApp hangs indefinitely when auth and firestore are initialized #7816

Closed
@kaisermann

Description

@kaisermann

Operating System

MacOS Sonoma 14.1.1

Browser Version

n/a

Firebase SDK Version

10.6.0

Firebase SDK Product:

Firestore

Describe your project's tooling

The minimal repro contains only the js SDK in the latest version. Tested in node@16 @18 and @20.

Describe the problem

Calling deleteApp for an app initialized with both firestore/auth hangs indefinitely. I encountered this while trying to connect both to the emulator, but the issue seems to happen without calling the connect{...}Emulator functions.

However, if some operation is called to the firestore instance, the app seems to be deleted as expected.

Steps and code to reproduce issue

Stackblitz repro

Create a repro.mjs file with:

import { deleteApp, initializeApp } from 'firebase/app';
import { initializeAuth } from 'firebase/auth';
import { initializeFirestore, doc, getDoc } from 'firebase/firestore';

const testApp = initializeApp({
  apiKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  projectId: 'some-project-id',
});

// Comment these two lines and the app will delete successfully
const testFirestore = initializeFirestore(testApp, {
  ignoreUndefinedProperties: true,
});

// Or comment these two lines and the app will delete successfully
const testAuth = initializeAuth(testApp);

async function reproIssue() {
  console.log('Deleting app...');

  // Uncomment this getDoc call and the deleteApp works with both firestore/auth
  // await getDoc(doc(testFirestore, 'users/alice'), { name: 'Alice' }).catch(
  //   () => {
  //     /** ignore errors */
  //   }
  // );

  // This hangs indefinitely when both firestore and auth are initialized
  // This DOES NOT hand if only firestore or auth is initialized
  // Or if the getDoc call above is not commented.
  await deleteApp(testApp);
  console.log('App deleted'); // This is never reached
}

await reproIssue();
  1. Run node repro.mjs

  2. Deleting app... should be logged but App deleted not.
    CleanShot 2023-11-27 at 10 55 53

  3. Comment either the testFirestore or testAuth initialization and run the file again..

  4. Both Deleting app... and App deleted should be logged.
    CleanShot 2023-11-27 at 10 56 04

  5. Now add an operation to firestore, i.e a getDoc, right before the deleteApp:

  await getDoc(doc(testFirestore, 'users/alice'), { name: 'Alice' }).catch(
    () => {}
  );
  1. Run the file again with both auth/firestore initialized.

  2. Both Deleting app... and App deleted should be logged.

CleanShot 2023-11-27 at 11 26 15

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions