skip to Main Content

I was following the in-app-purchase part in Google Codelab, But after I finish all steps and finally run firebase deploy this error has appeared.

I have read many solutions about the simillar problems, for example, remove node-modules and package-lock file then re-install them, down grade node version to 14, downgrade firebase-admin, firebase-functions…
But none of them works for me.

I’m totally desperate now. Please somebody help me. I already googled almost 72hours and I found nothing.

And here is the contents of terminal show up after I run firebase deploy.

% firebase deploy

=== Deploying to 'server-259035'...

i  deploying firestore, functions
Running command: npm --prefix "$RESOURCE_DIR" run lint

> functions@ lint /Users/functions
> eslint --ext .js,.ts .

Running command: npm --prefix "$RESOURCE_DIR" run build

> functions@ build /Users/functions
> tsc

✔  functions: Finished running predeploy script.
i  firestore: reading indexes from firestore.indexes.json...
i  cloud.firestore: checking firestore.rules for compilation errors...
✔  cloud.firestore: rules file firestore.rules compiled successfully
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

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

And package.json file.

{
  "name": "functions",
  "scripts": {
    "lint": "eslint --ext .js,.ts .",
    "build": "tsc",
    "watch": "tsc --watch",
    "serve": "firebase emulators:start",
    "shell": "npm run build && firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "14"
  },
  "main": "lib/index.js",
  "dependencies": {
    "camelcase-keys": "^8.0.0",
    "firebase-admin": "^11.0.1",
    "firebase-functions": "^3.22.0",
    "google-auth-library": "^8.0.2",
    "googleapis": "^105.0.0",
    "jest": "^28.1.3",
    "lodash": "^4.17.21",
    "node-apple-receipt-verify": "^1.12.1"
  },
  "devDependencies": {
    "@types/node-apple-receipt-verify": "^1.7.1",
    "@typescript-eslint/eslint-plugin": "^5.27.0",
    "@typescript-eslint/parser": "^5.27.0",
    "eslint": "^8.16.0",
    "eslint-config-google": "^0.14.0",
    "eslint-plugin-import": "^2.26.0",
    "firebase-functions-test": "^2.3.0",
    "typescript": "^4.7.2"
  },
  "private": true
}

3

Answers


  1. I had the same issue when updated my package.json packages. I had to make the following change in order to fix it:

    Before:
    import firestore from "firebase-admin/lib/firestore";

    After:
    import firebaseAdmin from "firebase-admin";
    ** Add the prefix firebaseAdmin. to all the firestore references, eg: firebaseAdmin.firestore.Timestamp;*

    I changed the following files:

    • app-store.purchase-handler.ts
    • google-play.purchase-handler.ts
    • iap.repository.ts
    Login or Signup to reply.
  2. It happens with in_app_purchases flutter firebase example due to updated package names and their content. Full error is: Error: Failed to load function definition from source: Failed to generate manifest from function source: Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './lib/firestore' is not defined by "exports" in functions/node_modules/firebase-admin/package.json

    1. You need to replace: import firestore from "firebase-admin/lib/firestore"; with import firebaseAdmin from "firebase-admin";

    2. Now you need to go your .ts files and replace the same import above with the new one and correct the references for example: firestore.Timestamp now will be firebaseAdmin.firestore.Timestamp

    3. All the files you need to make changes are these ones:

      app-store.purchase-handler.ts

      google-play.purchase-handler.ts

      iap.repository.ts

    Login or Signup to reply.
  3. I’ve fixed, upgraded and updated codelab example backend functions for verifying in-app purchases on the backend. You can find updated code here, it works as expected for me with node 18.

    https://github.com/vbalagovic/iap-firebase-backend

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search