Find Functions using beta version Firebase - firebase

A few days ago I received an email from Google Firebase that some of my cloud functions are using beta versions and they are removing the beta version calls If I understood correctly. So Now I have to update it. I Want to check that which of my function is calling the beta version I am not making static requests to any API. I am using firebase functions to call APIs and one of the function inside is calling firebase API. So Is there any possible way to know the function which is calling beta version API? I am Using 0.8.1 so It is because of this version that the function is calling beta API or is there something else? Here is my Package.json
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase serve --only functions",
"shell": "firebase experimental:functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"dependencies": {
"asyncawait": "^1.0.6",
"firebase-admin": "~5.8.1",
"firebase-functions": "^0.8.1"
},
"private": true
}
Thanks

All of your functions in this project are using very old beta APIs. You can tell because of this dependency:
"firebase-functions": "^0.8.1"
The latest firebase-functions module is 3.5.0 at the time of this writing. The APIs have changed significantly since 0.8.1, and your code (for non-http functions) will not work if you upgrade without changing your code. You should consult the documentation to learn about the modern APIs.

Related

Unable to deploy firebase cloud functions to any firebase project from my machine (but it works perfectly fine on my colleague's machine)

This is my mac-mini M1 configuration and I'm trying to deploy firebase functions but it is not allowing me to deploy and every time shows me this error.
When I run this command it throws an error :
me#-Mac-mini demo % firebase deploy --only functions:helloWorld
=== Deploying to 'demo'...
i deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run build
> build
> tsc
✔ functions: Finished running predeploy script.
i functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i functions: ensuring required API cloudbuild.googleapis.com is enabled...
✔ functions: required API cloudfunctions.googleapis.com is enabled
✔ functions: required API cloudbuild.googleapis.com is enabled
i functions: preparing codebase default for deployment
i functions: preparing functions directory for uploading...
i functions: packaged /Users/me/Documents/work/workspace/demo/functions (56.87 KB) for uploading
✔ functions: functions folder uploaded successfully
i functions: creating Node.js 16 function helloWorld(us-central1)...
⚠ functions: failed to create function projects/demo/locations/us-central1/functions/helloWorld
Failed to create function projects/demo/locations/us-central1/functions/helloWorld
Functions deploy had errors with the following functions:
helloWorld(us-central1)
i functions: cleaning up build files...
⚠ functions: Unhandled error cleaning up build images. This could result in a small monthly bill if not corrected. You can attempt to delete these images by redeploying or you can delete them manually at https://console.cloud.google.com/artifacts/docker/demo/us-central1/gcf-artifacts
Error: There was an error deploying functions
The actual log of the error :
{"#type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{"code":7,"message":"Cloud Functions uses Artifact Registry to store function docker images. Artifact Registry API is not enabled in your project. To enable the API, use the gcloud command 'gcloud services enable artifactregistry.googleapis.com' then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry."}
Other versions info :
NPM version : 8.11.0
Firebase version : 11.2.0
Node version : 16.15.1
Firebase package.json
{
"name": "functions",
"scripts": {
"build": "tsc",
"build:watch": "tsc --watch",
"serve": "npm run build && firebase emulators:start --only functions",
"shell": "npm run build && firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "16"
},
"main": "lib/index.js",
"dependencies": {
"firebase-admin": "^10.2.0",
"firebase-functions": "^3.21.0"
},
"devDependencies": {
"typescript": "^4.6.4"
},
"private": true
}
Deploying from MacBook-pro-2014
Deploying from Mac-mini-m1
Why I am unable to deploy cloud functions from my machine and why is my colleague able to deploy the same cloud functions to same Firebase project from his machine even without enabling Artifacts Registry?
The Artifact Registry API is not enabled in your project.
The solution requires that billing is enabled for your project.
Provided that the CLI has permission to enable services, run this command:
gcloud services enable artifactregistry.googleapis.com
Or use the Google Cloud Console UI
More information is available in the Artifact Registry Documentation:
Enabling and disabling the service
Artifact Registry pricing

Best way to edit package.json file for Firebase Cloud Functions?

I get a parsing error when attempting to deploy a cloud function that the firebase-tools module cannot be found. I looked in my package.json file and notice that it's missing, so I want to add it. I also noticed that the other dependencies have versions specified.
Are these version numbers updated automatically when I update my cloud functions through the CLI with npm install --save firebase-functions#latest?
And what is the proper way for me to add firebase-tools as a dependency? Do I specify a version number?
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "16"
},
"main": "index.js",
"dependencies": {
"firebase-admin": "^10.0.2",
"firebase-functions": "^3.20.1"
},
"devDependencies": {
"eslint": "^8.9.0",
"eslint-config-google": "^0.14.0",
"firebase-functions-test": "^0.2.0"
},
"private": true
}
The common way is to use NPM, the NodeJS package manager:
npm install -g firebase-tools
Where switch -g means global (available to all projects), not referenced inside package.json.
Also see: https://www.npmjs.com/package/firebase-tools ...which reads version 11.0.0.

Firebase functions fails to deploy with same error in all functions

I'm trying to deploy my firebase functions but all the functions return me error, I had already deployed before without any error.
I did not install anything new since the last time that a deploy was correct.
Every functions return almost the same error, the only thing that changes is the "errorId"
I have tried to logout from firebase-cli and login again, i have updated firebase-tools, firebase-admin, firebase-functions from npm.
I'm deploying with firebase deploy --only functions
Deployment error.
Build failed:
{
"error": {
"canonicalCode": "INVALID_ARGUMENT",
"errorMessage": "`npm_install` had stderr output:\nnpm WARN tar ENOENT: no such file or directory, open '/workspace/node_modules/.staging/#types/lodash-973f4ada/common/collection.d.ts'\nnpm WARN tar ENOENT: no such file or directory, open '/workspace/node_modules/.staging/#types/node-29231f2f/inspector.d.ts'\nnpm WARN tar ENOENT: no such file or directory, open '/workspace/node_modules/.staging/#types/node-f1c8db24/inspector.d.ts'\nnpm WARN tar ENOENT: no such file or directory, open '/workspace/node_modules/.staging/#firebase/auth-1b85ce5b/dist/auth.esm.js.map'\nnpm WARN tar ENOENT: no such file or directory, open '/workspace/node_modules/.staging/#firebase/webchannel-wrapper-e6854ec7/dist/index.js'\nnpm ERR! code E404\nnpm ERR! 404 Not Found: grpc#1.20.1\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /builder/home/.npm/_logs/2019-06-08T18_16_17_266Z-debug.log\n\nerror: `npm_install` returned code: 1",
"errorType": "InternalError",
"errorId": "FD2536C1"
}
}
Package.json :
{
"name": "functions",
"engines": {
"node": "8"
},
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase serve --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"dependencies": {
"#firebase/storage": "^0.2.16",
"#google-cloud/vision": "^0.24.0",
"#sendgrid/mail": "^6.4.0",
"cors": "^2.8.5",
"dateformat": "^3.0.3",
"firebase": "^5.11.1",
"firebase-admin": "^7.4.0",
"firebase-functions": "^2.3.1",
"json2csv": "^4.5.1",
"mailchimp-api-v3": "^1.13.0",
"moment-timezone": "^0.5.25",
"openpay": "^1.0.3",
"paypal-rest-sdk": "^1.8.1",
"request": "^2.88.0"
},
"devDependencies": {
"eslint": "^4.12.0",
"eslint-plugin-promise": "^3.6.0",
"firebase-functions-test": "^0.1.6"
},
"private": true
}
Correct deploy of the functions.
Update***
I have tried to delete everything and uninstall every package except for the ones required for firebase-functions and start over with one test function in node 8 i'm having the same issue, with node 6 it was deployed, but i need to use node 8 because i need to use await/async
I had a similar deployment failure. I think it was caused by me running firebase deploy from the app directory rather the the app\functions directory. In any case, I ran the following commands from the terminal (using VSCode in my case) having changed into the app\functions directory. Deployment then worked perfectly.
npm install --save #google-cloud/storage
npm install --save firebase-admin#latest
npm install --save firebase-functions#latest
firebase deploy
Hope that helps.
Checking the log
You can examine the actual logs by using this command to open the log
firebase functions:log
Doing this is really helpful since specific issue will usually be visible there. I sometimes even had error as simple as a missing package name in package.json
It would have been much helpful if firebase could show better info on the errors directly. but at least we can find them here.
I hope it helps
I had similar issue and it ended up being a missing module in my package.json
You can view more detailed / useful logs here: https://console.cloud.google.com/logs
Firebase functions:log really helps! In my case I had not enabled signin method in the firebase project (:

Serving Firebase Functions doesn't hot reload on Windows

Serving Firebase Functions locally with the firebase serve command is supposed to enable hot reloading but this doesn't seem to work on windows, even with watchman installed. Is there a better solution aside from running npm build after each code change?
I mixed the 2 answers:
"scripts": {
"serve": "npm run build -- --watch | firebase emulators:start --only functions",
...
}
I do it the following way (additionally to galki`s answer):
firebase serve --only functions
and in another terminal tab I just use
npm run build -- --watch
from within functions directory. This way you have some kind of faster dev cycle.
To enable hot reloading on firebase functions with typescript you can add this 2 commands to your package.json file
"build:watch": "tsc -w"
"serve:watch": "npm run build:watch | firebase emulators:start --only functions",
If you want also to use path aliases feature you will be required to install 2 additional dev packages in order to make it work
npm install --save-dev tsc-alias concurrently
tsc-alias is for replacing alias paths with relative paths after typescript compilation of tsc compiler because the compiler alone can't resolve the alias paths
concurrently is for runing multiple commands concurrently
After installing the 2 packages you will need to add this 2 scripts to your package.json file
"build:watch": "concurrently --kill-others \"tsc -w\" \"tsc-alias -w\"",
"serve:watch": "npm run build:watch | firebase emulators:start --only functions",
Starting of development with hot reload then will be as easy as running only in the terminal
npm run serve:watch
Please Note:
I am using this versions of the packages
"firebase-admin": "^10.0.1",
"firebase-functions": "^3.14.1",
"tsc-alias": "^1.5.0",
"typescript": "^4.5.5",
"concurrently": "^7.0.0",
Older or newer versions might introduce some issues with compiling the code
Try following npm script
"serve": "./node_modules/.bin/tsc --watch | firebase serve --only functions"
It works as of the current point in time (firebase-tools 8.0.0).
Both
firebase serve --only functions
and
firebase emulators:start --only functions
work but one still needs to run npm run build manually each time.

Cannot find module 'webpack-cli'

I want to make es6 into my project so I used this tutorial this tutorial
and when i try to write 'webpack' in cmd I get the error
Done in 8.99s.
{ Error: Cannot find module 'webpack-cli'
at Function.Module._resolveFilename (module.js:470:15)
at Function.Module._load (module.js:418:25)
at Module.require (module.js:498:17)
at require (internal/module.js:20:19)
at runCommand.then.result (C:\Users\adirz\AppData\Roaming\npm\node_modules\webpack\bin\webpack.js:62:14)
at process._tickCallback (internal/process/next_tick.js:109:7) code: 'MODULE_NOT_FOUND' }
package.json
{
"name": "functions",
"scripts": {
"build": "tsc",
"serve": "npm run build && firebase serve --only functions",
"shell": "npm run build && firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"main": "lib/index.js",
"dependencies": {
"firebase-admin": "~5.12.0",
"firebase-functions": "^1.0.1"
},
"devDependencies": {
"ts-loader": "^4.2.0",
"typescript": "^2.5.3",
"webpack": "^4.5.0",
"webpack-cli": "^2.0.14",
"webpack-node-externals": "^1.7.2"
},
"private": true
}
my folder structure
Try using: npm i -g webpack-cli.
Here is the official issue on github: https://github.com/webpack/webpack-cli/issues/191
Link globally installed package to your project
npm link webpack-cli
This solved the problem for me
sudo chown -R $USER /usr/local/lib/node_modules
npm i -g webpack-cli
https://flaviocopes.com/npm-fix-missing-write-access-error/
The problem for me it was that I was not using 'sudo' permissions.
If you are using linux based system try typing sudo npm i -g webpack-cli
I had a similar error. For me the answer was to ensure that the whole path to my project is free of spaces, ampersands(&) or any other weird characters.
If you are using Yarn instead NPM to run Webpack globally, you can install webpack using the following commands:
yarn global add webpack
and or
yarn global add webpack-cli

Resources