Daniel Li
Daniel Li

Reputation: 123

Google Firebase Web App - Error involving Cloud Functions and Firestore

Recently, I tried to follow a few demos online to get started on a Google Firebase Cloud Functions Node.js server-side code for an application. Upon attempting to add a Firebase App (and Firestore with it),

const functions = require('firebase-functions');
const firebase = require('firebase-admin');
require('firebase/firestore');

var serviceAccount = require("<private key>.json");

const initAppFirebase = firebase.initializeApp({
    credential: firebase.credential.cert(serviceAccount),
    databaseURL: "<URL>"
});

var db = firebase.firestore();

I begin to get this one error that mentions a missing "annotations.proto" file from the google-gax module (which is apparently imported at some point in Firestore).

Error during trigger parsing:  Error occurred while parsing your function 
triggers.
Error: The include `google\api\annotations.proto` was not found.
    at Function.GoogleProtoFilesRoot._findIncludePath 
(C:\...\functions\node_modules\google-gax\lib\grpc.js:312:11)
    at GoogleProtoFilesRoot.resolvePath 
(C:\...\functions\node_modules\google-gax\lib\grpc.js:298:31)
...
    at v1beta1 (C:\...\functions\node_modules\@google- 
cloud\firestore\src\v1beta1\index.js:30:10)
    at new Firestore (C:\...\functions\node_modules\@google- 
cloud\firestore\src\index.js:229:18)

I have looked around on the internet, but nobody else seems to have this problem. I just reinstalled the files, but I am still getting this issue. Removing the Firestore and Firebase initializeApp code allows it to work, so I believe it has something to do with that.

Here are my module versions from package.json

"firebase-admin": "^5.12.0",
"firebase-functions": "^1.0.1",
"firestore": "^1.1.6",

Is there a way to fix this problem (botched installation, outdated libraries, missing code/requires etc.)? Thank you very much.

EDIT: Added code and package.json for version info. I dug around in the actual file \node_modules\google-gax\lib\grpc.js and found that it tries to return a valid path leading to the import file annotation.proto by trying to test google\api\annotations.proto at each parent directory.

var current = originPath;
var found = fs.existsSync(path.join(current, includePath));
while (!found && current.length > 0) {
  current = current.substring(0, current.lastIndexOf(path.sep));
  found = fs.existsSync(path.join(current, includePath));
}
if (!found) {
  throw new Error('The include `' + includePath + '` was not found.');
}
return path.join(current, includePath);

There is, unfortunately, no such directory, though perhaps it is looking for the annotations file in google-proto-files\google\api\annotations.proto (but adding that file in manually leads to further errors). There is also a github issue here https://github.com/googleapis/nodejs-firestore/issues/175 mentioning it.

Upvotes: 2

Views: 468

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 600006

You say that you're trying to build a web app. But the code you are using is for initializing the Firebase Admin SDK in a (server-side) Node.js script.

If you want to use Firestore in your web app, start with the code you see when you click the WEB tab on this page:

<script src="https://www.gstatic.com/firebasejs/4.12.0/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.12.0/firebase-firestore.js"></script>

And then:

firebase.initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});

// Initialize Cloud Firestore through Firebase
var db = firebase.firestore();

You can get the values in that initializeApp call by:

  1. Going to the Project overview page
  2. Click ADD ANOTHER APP
  3. Click Add Firebase to your web app

Upvotes: 5

Related Questions