I have different second genration cloud function on firebase when I call one of them I get an error on the firebase log system: the default firebase app does not exist; thi is my function:
exports.addCustomClaim = onCall({secrets: [privateKey], ...params},
async (data) => {
const admin = instantiateFirebase().admin;
const user = await admin.auth().getUserByEmail(data.data.email);
console.log("adding claims ", data.data.claims, "to", user.uid);
try {
await admin.auth().setCustomUserClaims(user.uid, data.data.claims);
if (data.data.logoutUser) {
console.log("logging out user", user.uid);
await admin.auth().revokeRefreshTokens(user.uid);
}
return await {
message: ` Success!claims ${Object.keys(data.data.claim)}
have been set on ${data.data.email}`,
};
} catch (err) {
return {error: err, user: user.uid};
}
});
this is how I initialize firebase:
const instantiateFirebase = ()=>{
const privateKey= defineSecret("PRIVATE_KEY");
const clientEmail = defineString("CLIENT_EMAIL");
const projectId = defineString("PROJECT_ID");
const databaseURL = defineString("DATABASE_URL");
console.log("instantiating firebase");
if(admin.apps.length===0){
console.log("no app");
initializeApp({
credential: admin.credential.cert({
privateKey: privateKey.value().replace(/\n/g, "n"),
projectId: projectId.value(),
clientEmail: clientEmail.value(),
}),
databaseURL: databaseURL.value(),
});}
const db = admin.firestore();
const realtime = admin.database();
console.log("done");
return {db, admin, realtime};
};
export {instantiateFirebase};
1
I solved my problem I had to initialize admin, with admin.initializeApp