firebase-js-sdk
firebase-js-sdk copied to clipboard
`deleteApp` hangs indefinitely when auth and firestore are initialized
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
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();
-
Run
node repro.mjs
-
Deleting app...
should be logged butApp deleted
not. -
Comment either the
testFirestore
ortestAuth
initialization and run the file again.. -
Both
Deleting app...
andApp deleted
should be logged. -
Now add an operation to firestore, i.e a
getDoc
, right before thedeleteApp
:
await getDoc(doc(testFirestore, 'users/alice'), { name: 'Alice' }).catch(
() => {}
);
-
Run the file again with both auth/firestore initialized.
-
Both
Deleting app...
andApp deleted
should be logged.
Hi @kaisermann, thank you for reporting this issue. I am able to reproduce the error with the provided code. I will start looking into the issue.
Hi @kaisermann, thank you for reporting this issue. I am able to reproduce the error with the provided code. I will start looking into the issue.
Any update on this issue? I see the PR was closed, not merged.
Hi @tappin-kr, that PR only solves the problem by ignoring a promises that we should have waited for, and high likely will introduce other errors. The main problem actually exists in a node library, which explains why this only happens in Node.
Internally pinged another team to debug the issue.