Skip to content

Commit 9e43384

Browse files
committed
fix(admin): apply globals if present
1 parent 51f4a7a commit 9e43384

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

packages/nuxt/src/runtime/admin/plugin.server.ts

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { initializeApp, cert, getApp, getApps } from 'firebase-admin/app'
1+
import {
2+
initializeApp,
3+
cert,
4+
getApp,
5+
getApps,
6+
ServiceAccount,
7+
} from 'firebase-admin/app'
28
import { defineNuxtPlugin, useAppConfig } from '#app'
39

410
export default defineNuxtPlugin((nuxtApp) => {
@@ -16,27 +22,28 @@ export default defineNuxtPlugin((nuxtApp) => {
1622
const { FIREBASE_PROJECT_ID, FIREBASE_CLIENT_EMAIL, FIREBASE_PRIVATE_KEY } =
1723
process.env
1824
// we need either a serviceAccount or the env variables
19-
if (
20-
!firebaseAdmin.serviceAccount &&
21-
(!FIREBASE_CLIENT_EMAIL || !FIREBASE_PRIVATE_KEY || !FIREBASE_PROJECT_ID)
22-
) {
25+
let serviceAccountOrProject: string | ServiceAccount
26+
27+
if (FIREBASE_CLIENT_EMAIL && FIREBASE_PRIVATE_KEY && FIREBASE_PROJECT_ID) {
28+
// This version should work in Firebase Functions and other providers while applicationDefault() only works on
29+
serviceAccountOrProject = {
30+
projectId: FIREBASE_PROJECT_ID,
31+
clientEmail: FIREBASE_CLIENT_EMAIL,
32+
// replace `\` and `n` character pairs w/ single `\n` character
33+
privateKey: FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n'),
34+
}
35+
} else if (firebaseAdmin.serviceAccount) {
36+
serviceAccountOrProject = firebaseAdmin.serviceAccount
37+
} else {
2338
throw new Error(
24-
'[VueFire]: You must provide a "serviceAccount" or set the FIREBASE_CLIENT_EMAIL, FIREBASE_PRIVATE_KEY and FIREBASE_PROJECT_ID env variables.'
39+
'[VueFire]: You must provide a "serviceAccount" (dev) or set the FIREBASE_CLIENT_EMAIL, FIREBASE_PRIVATE_KEY and FIREBASE_PROJECT_ID env variables production.'
2540
)
2641
}
42+
2743
initializeApp({
2844
// TODO: is this really going to be used?
2945
...firebaseAdmin.config,
30-
credential: cert(
31-
firebaseAdmin.serviceAccount || {
32-
// This version should work in Firebase Functions and other providers while applicationDefault() only works on
33-
// Firebase Functions. All values must exists because of the check above.
34-
projectId: FIREBASE_PROJECT_ID!,
35-
clientEmail: FIREBASE_CLIENT_EMAIL!,
36-
// replace `\` and `n` character pairs w/ single `\n` character
37-
privateKey: FIREBASE_PRIVATE_KEY!.replace(/\\n/g, '\n'),
38-
}
39-
),
46+
credential: cert(serviceAccountOrProject),
4047
})
4148
}
4249

0 commit comments

Comments
 (0)