Search code examples
firebasegoogle-cloud-functionsfirebase-clisendgrid-api-v3

Why do the firebase cli give a TypeError


I already have some firebase cloud functions that runs fine, and now I try to add SendGrid functionality to one of the functions as described in https://youtu.be/JVy0JpCOuNI. The firebase CLI won't run my code because it says it has a TypeError

The code is written in Typescript and the transpiler doesn't give any error. I am using the latest versions of the CLI and the SDK.

admin.initializeApp();

const firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG);
const SENDGRID_API_KEY = firebaseConfig.sendgrid.key;

const sgMail = require(‘@sendgrid/mail’);
sgMail.setApiKey(SENDGRID_API_KEY);

I have checked that the firebase config contains the sendgrid key:

$ firebase functions:config:get
{
    "sendgrid": {
      "key": "MY_SEND_GRID_KEY"
    }
} 

I get this output when I try to deploy --only functions:

functions: Failed to load functions source code. Ensure that you have the latest SDK by running npm i --save firebase-functions inside the functions directory. :warning: functions: Error from emulator. Error occurred while parsing your function triggers.

TypeError: Cannot read property ‘key’ of undefined

It is this line that has the error:

const SENDGRID_API_KEY = firebaseConfig.sendgrid.key;

What can I change so I don't get this error?


Solution

  • The variables that you set using the CLI via firebase functions:config:get don't end up in process.env.FIREBASE_CONFIG. They end up in functions.config().

    import * as functions from 'firebase-functions'
    const key = functions.config().sendgrid.key
    

    FIREBASE_CONFIG just determines how the admin SDK should be initialized with no parameters passed to admin.initializeApp().

    Please read the documentation for more information.