firebase / functions-samples

Collection of sample apps showcasing popular use cases using Cloud Functions for Firebase
https://firebase.google.com/docs/functions
Apache License 2.0
12k stars 3.84k forks source link

[BUG] in sample: firebase function (2nd generation) #1037

Open chinomnsoawazie opened 1 year ago

chinomnsoawazie commented 1 year ago

Which sample has a bug?

Sample name or URL where you found the bug

https://github.com/firebase/functions-samples/blob/539345b1d7b3af7a7fd4fadaa54255329bdff3e3/2nd-gen/callable-functions/functions/index.js#L17

const {onCall, HttpsError} = require("firebase-functions/v2/https");

How to reproduce the issue

Not sure how this can be reproduced: previous versions of same code had been deployed and currently in production. This started randomly.

Tl:Dr:

Failing Function code used (if you modified the sample) Current code in production (and working) has onCall imported as a named import this way: import {HttpsError, onCall} from "firebase-functions/v2/https"

After the deployment failure started, I fell back to using require as shown in the example I posted above. i.e. const {onCall, HttpsError} = require("firebase-functions/v2/https");

Basic structure of what I have in production:

import * as admin from "firebase-admin";
import {HttpsError, onCall} from "firebase-functions/v2/https"
import {CallableRequest} from "firebase-functions/lib/common/providers/https";
import {APIRequestPayload} from "./typeDef"; //some custom type definition

exports.myfunctionname = onCall({
  enforceAppCheck: true,
  secrets: ["A_SECRET_I_USE"],
  region: "us-east1",
  cpu: 2,
  concurrency: 500,
  maxInstances: 15,
}, async (incomingData: CallableRequest) => { 

  const data: APIRequestPayload = incomingData.data;
  const secretVariable = process.env.A_SECRET_I_USE;

//
** some code logic
//

      if(someError) {
                    throw new HttpsError("internal", "Something went wrong");
          }

           return {codeLogicResult: somecodeprocessingresult}
})

Steps to set up and reproduce

Debug output

Errors in the console logs

Error: Failed to load function definition from source: Failed to generate manifest from function source: Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './lib/v2/providers/https' is not defined by "exports" in /Users/myuser/path_to_function_folder/functions/node_modules/firebase-functions/package.json

Screenshots

Screenshot 2023-02-03 at 7 01 38 PM

Expected behavior

Function should be deployed when npm run deploy is run from the cli as per documentation

Actual behavior

Function fails to deploy with the error message above

kaumac commented 1 year ago

Did you figure this out?

I'm having exactly the same error, tried reinstalling all dependencies, updating to newest version, nothing works...

chinomnsoawazie commented 1 year ago

Did you figure this out?

I'm having exactly the same error, tried reinstalling all dependencies, updating to newest version, nothing works...

Apparently Google randomly reduces quotas for projects at their discretion. Went through GCP, Cloud Run to be specific, to figure out the new quota limit. Closer look showed me the limits are per region, so my workaround is to deploy to different regions. Figure out your limit per region and plan your development accordingly, choosing regions with best performance for your performance-needing endpoints, and deploying other lower priority endpoints elsewhere.

This is not sustainable though when you have so many endpoints to maintain. AWS will be the way to go once you prove product feasibility as they're more straightforward and responsive.