pnpm: 401 Unauthorized, installing package from private Github npm registry.

I’m trying to install a package, using GitHubs private registries. But it seems that pnpm, does not forward my Personal Access Token, defined in ~/.npmrc.

Following the steps below, yields NO issues, if I’m using npm.

I’ve replaced private names, with {PLACEHOLDER}.

pnpm version:

$ pnpm --version
5.3.0

Code to reproduce the issue:

Add the Github registry, including a Personal Access Token, to your ~/.npmrc-file

$ cat ~/.npmrc
//npm.pkg.github.com/:_authToken={PERSONAL_ACCESS_TOKEN}

Note: The permissions of the Token used, is:

  • repo - Full control of private repositories
    • repo:status - Access commit status
    • repo_deployment - Access deployment status
    • public_repo - Access public repositories
    • repo:invite - Access repository invitations
    • security_events - Read and write security events
  • write:packages - Upload packages to github package registry
  • read:packages - Download packages from github package registry
  • delete:packages - Delete packages from github package registry

Add the GitHub org registry, to the .npmrc-file of the project

$ cat /my/project/.npmrc
{@SCOPE}:registry=https://npm.pkg.github.com/{ORG}

Install the package

$ pnpm add {@SCOPE}/{PACKAGE}
 ERROR  401 Unauthorized: {@SCOPE}/{PACKAGE} (via https://npm.pkg.github.com/{ORG}/{@SCOPE}%2F{PACKAGE})
Resolving: total 6, reused 4, downloaded
$ cat node_modules/.pnpm-debug.log

{
  "0 debug pnpm:scope": {
    "selected": 1
  },
  "1 debug pnpm:package-manifest": {
    "initial": {
      "scripts": {
        "dev": "rm -rf ./dist && tsc -w --incremental --project tsconfig.json & nodemon",
        "build": "rm -rf ./dist && tsc --project tsconfig.prod.json",
        "build:docker": "npm run build && DOCKER_BUILDKIT=1 docker build -t image:latest ."
      },
      "dependencies": {
        "{@SCOPE}/{PACKAGE}": "^1.5.0",
        "axios": "^0.19.2",
        "ini": "^1.3.5"
      },
      "devDependencies": {
        "@types/ini": "^1.3.30",
        "@types/node": "^13.9.5",
        "nodemon": "^2.0.2",
        "typescript": "^3.8.3"
      }
    },
    "prefix": "/Users/jc/code/project"
  },
  "2 debug pnpm:stage": {
    "prefix": "/Users/jc/code/project",
    "stage": "resolution_started"
  },
  "3 debug pnpm:_dependency_resolved": {
    "resolution": "registry.npmjs.org/@types/ini/1.3.30",
    "wanted": {
      "name": "@types/ini",
      "rawSpec": "^1.3.30"
    }
  },
  "4 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/@types/ini/1.3.30",
    "requester": "/Users/jc/code/project",
    "status": "resolved"
  },
  "5 debug pnpm:_dependency_resolved": {
    "resolution": "registry.npmjs.org/@types/node/13.9.5",
    "wanted": {
      "name": "@types/node",
      "rawSpec": "^13.9.5"
    }
  },
  "6 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "requester": "/Users/jc/code/project",
    "status": "resolved"
  },
  "7 debug pnpm:_dependency_resolved": {
    "resolution": "registry.npmjs.org/nodemon/2.0.2",
    "wanted": {
      "name": "nodemon",
      "rawSpec": "^2.0.2"
    }
  },
  "8 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/nodemon/2.0.2",
    "requester": "/Users/jc/code/project",
    "status": "resolved"
  },
  "9 debug pnpm:_dependency_resolved": {
    "resolution": "registry.npmjs.org/typescript/3.8.3",
    "wanted": {
      "name": "typescript",
      "rawSpec": "^3.8.3"
    }
  },
  "10 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/typescript/3.8.3",
    "requester": "/Users/jc/code/project",
    "status": "resolved"
  },
  "11 debug pnpm:_dependency_resolved": {
    "resolution": "registry.npmjs.org/axios/0.19.2",
    "wanted": {
      "name": "axios",
      "rawSpec": "^0.19.2"
    }
  },
  "12 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/axios/0.19.2",
    "requester": "/Users/jc/code/project",
    "status": "resolved"
  },
  "13 debug pnpm:_dependency_resolved": {
    "resolution": "registry.npmjs.org/ini/1.3.5",
    "wanted": {
      "name": "ini",
      "rawSpec": "^1.3.5"
    }
  },
  "14 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/ini/1.3.5",
    "requester": "/Users/jc/code/project",
    "status": "resolved"
  },
  "15 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/@types/ini/1.3.30",
    "requester": "/Users/jc/code/project",
    "status": "found_in_store"
  },
  "16 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/nodemon/2.0.2",
    "requester": "/Users/jc/code/project",
    "status": "found_in_store"
  },
  "17 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/axios/0.19.2",
    "requester": "/Users/jc/code/project",
    "status": "found_in_store"
  },
  "18 debug pnpm:progress": {
    "packageId": "registry.npmjs.org/ini/1.3.5",
    "requester": "/Users/jc/code/project",
    "status": "found_in_store"
  },
  "19 debug pnpm:fetching-progress": {
    "attempt": 1,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "size": 101720,
    "status": "started"
  },
  "20 debug pnpm:fetching-progress": {
    "downloaded": 649,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "21 debug pnpm:fetching-progress": {
    "downloaded": 2018,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "22 debug pnpm:fetching-progress": {
    "downloaded": 3387,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "23 debug pnpm:fetching-progress": {
    "downloaded": 4756,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "24 debug pnpm:fetching-progress": {
    "downloaded": 6125,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "25 debug pnpm:fetching-progress": {
    "downloaded": 7494,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "26 debug pnpm:fetching-progress": {
    "downloaded": 8863,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "27 debug pnpm:fetching-progress": {
    "downloaded": 10232,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "28 debug pnpm:fetching-progress": {
    "downloaded": 11601,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "29 debug pnpm:fetching-progress": {
    "downloaded": 12970,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "30 debug pnpm:fetching-progress": {
    "downloaded": 14339,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "31 debug pnpm:fetching-progress": {
    "downloaded": 15708,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "32 debug pnpm:fetching-progress": {
    "downloaded": 17077,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "33 debug pnpm:fetching-progress": {
    "downloaded": 18446,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "34 debug pnpm:fetching-progress": {
    "downloaded": 19815,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "35 debug pnpm:fetching-progress": {
    "downloaded": 21184,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "36 debug pnpm:fetching-progress": {
    "downloaded": 22553,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "37 debug pnpm:fetching-progress": {
    "downloaded": 23922,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "38 debug pnpm:fetching-progress": {
    "downloaded": 25291,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "39 debug pnpm:fetching-progress": {
    "downloaded": 26660,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "40 debug pnpm:fetching-progress": {
    "downloaded": 28029,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "41 debug pnpm:fetching-progress": {
    "downloaded": 29398,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "42 debug pnpm:fetching-progress": {
    "downloaded": 30767,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "43 debug pnpm:fetching-progress": {
    "downloaded": 32032,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "44 debug pnpm:fetching-progress": {
    "downloaded": 33401,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "45 debug pnpm:fetching-progress": {
    "downloaded": 34770,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "46 debug pnpm:fetching-progress": {
    "downloaded": 36139,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "47 debug pnpm:fetching-progress": {
    "downloaded": 37508,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "48 debug pnpm:fetching-progress": {
    "downloaded": 38877,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "49 debug pnpm:fetching-progress": {
    "downloaded": 40246,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "50 debug pnpm:fetching-progress": {
    "downloaded": 41615,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "51 debug pnpm:fetching-progress": {
    "downloaded": 42984,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "52 debug pnpm:fetching-progress": {
    "downloaded": 44353,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "53 debug pnpm:fetching-progress": {
    "downloaded": 45722,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "54 debug pnpm:fetching-progress": {
    "downloaded": 47091,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "55 debug pnpm:fetching-progress": {
    "downloaded": 48460,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "56 debug pnpm:fetching-progress": {
    "downloaded": 49829,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "57 debug pnpm:fetching-progress": {
    "downloaded": 51198,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "58 debug pnpm:fetching-progress": {
    "downloaded": 52567,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "59 debug pnpm:fetching-progress": {
    "downloaded": 53936,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "60 debug pnpm:fetching-progress": {
    "downloaded": 55305,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "61 debug pnpm:fetching-progress": {
    "downloaded": 59534,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "62 debug pnpm:fetching-progress": {
    "downloaded": 63763,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "63 debug pnpm:fetching-progress": {
    "downloaded": 64800,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "64 debug pnpm:fetching-progress": {
    "downloaded": 69029,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "65 debug pnpm:fetching-progress": {
    "downloaded": 73258,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "66 debug pnpm:fetching-progress": {
    "downloaded": 77487,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "67 debug pnpm:fetching-progress": {
    "downloaded": 81716,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "68 debug pnpm:fetching-progress": {
    "downloaded": 85945,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "69 debug pnpm:fetching-progress": {
    "downloaded": 90174,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "70 debug pnpm:fetching-progress": {
    "downloaded": 94403,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "71 debug pnpm:fetching-progress": {
    "downloaded": 97568,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "72 debug pnpm:fetching-progress": {
    "downloaded": 101720,
    "packageId": "registry.npmjs.org/@types/node/13.9.5",
    "status": "in_progress"
  },
  "73 error pnpm": {
    "message": {
      "code": "ERR_PNPM_REGISTRY_META_RESPONSE_401",
      "package": "{@SCOPE}/{PACKAGE}",
      "response": {
        "size": 0,
        "timeout": 0
      },
      "uri": "https://npm.pkg.github.com/{ORG}/{@SCOPE}%2F{PACKAGE}",
      "pkgsStack": []
    },
    "err": {
      "name": "Error",
      "message": "401 Unauthorized: {@SCOPE}/{PACKAGE} (via https://npm.pkg.github.com/{ORG}/{@SCOPE}%2F{PACKAGE})",
      "code": "ERR_PNPM_REGISTRY_META_RESPONSE_401",
      "stack": "Error: 401 Unauthorized: {@SCOPE}/{PACKAGE} (via https://npm.pkg.github.com/{ORG}/{@SCOPE}%2F{PACKAGE})\n    at fromRegistry (/Users/jc/.node/pnpm/pnpm-global/4/node_modules/.pnpm/pnpm@5.3.0/node_modules/pnpm/lib/node_modules/@pnpm/npm-resolver/lib/fetch.js:24:15)\n    at processTicksAndRejections (internal/process/task_queues.js:97:5)"
    }
  }
}

Expected behavior:

Expected result, is to install the package without any issues.

Actual behavior:

Fails to install with an error from Github, saying 401 Unauthorized

Additional information:

$ node -v
v14.4.0

$ system_profiler SPSoftwareDataType
Software:

    System Software Overview:

      System Version: macOS 10.15.5 (19F101)
      Kernel Version: Darwin 19.5.0
      Boot Volume: Macintosh HD
      Boot Mode: Normal

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Reactions: 3
  • Comments: 18 (9 by maintainers)

Commits related to this issue

Most upvoted comments

On Mac OS, just run the below code in your terminal echo “//npm.pkg.github.com/:_authToken= your access token” >> ~/.npmrc

thanks @gersur

I am able to reproduce this issue

I can get private github package registry working in my project.

.npmrc in root project

//npm.pkg.github.com/:_authToken={PERSONAL_ACCESS_TOKEN}

@{SCOPE}:registry=https://npm.pkg.github.com

Then follow the instruction in github package detail page, but using pnpm

pnpm install @{SCOPE}/{PACKAGE}@{VERSION}

But, it only works if the package never installed before.

When I delete .pnpm-store and run pnpm i.

401 Unauthorized: https://npm.pkg.github.com/download/@{SCOPE}/{PACKAGE}/{VERSION}/{SOME_RANDOM_STRING}
Here is the .pnpm-debug.log
  "7485 debug pnpm:request-retry": {
    "attempt": 2,
    "error": {
      "code": "ERR_PNPM_TARBALL_FETCH",
      "httpStatusCode": 401,
      "uri": "https://npm.pkg.github.com/download/{SCOPE}/{PACKAGE}/{VERSION}/{SOME_RANDOM_STRING}",
      "response": {
        "size": 0,
        "timeout": 0
      },
      "attempts": 2,
      "resource": "https://npm.pkg.github.com/download/{SCOPE}/{PACKAGE}/{VERSION}/{SOME_RANDOM_STRING}"
    },
    "maxRetries": 2,
    "method": "GET",
    "timeout": 60000,
    "url": "https://npm.pkg.github.com/download/{SCOPE}/{PACKAGE}/{VERSION}/{SOME_RANDOM_STRING}"
  },
  "7486 warn pnpm:package-requester": {
    "message": "Fetching npm.pkg.github.com/{PACKAGE}/{VERSION} failed!",
    "prefix": "C:\\tirta-jaya\\order-maker\\order-maker-print"
  },
  "7487 error pnpm": {
    "message": {
      "code": "ERR_PNPM_TARBALL_FETCH",
      "httpStatusCode": 401,
      "uri": "https://npm.pkg.github.com/download/{SCOPE}/{PACKAGE}/{VERSION}/{SOME_RANDOM_STRING}",
      "response": {
        "size": 0,
        "timeout": 0
      },
      "attempts": 3,
      "resource": "https://npm.pkg.github.com/download/{SCOPE}/{PACKAGE}/{VERSION}/{SOME_RANDOM_STRING}"
    },
    "err": {
      "name": "Error",
      "message": "401 Unauthorized: https://npm.pkg.github.com/download/{SCOPE}/{PACKAGE}/{VERSION}/{SOME_RANDOM_STRING}",
      "code": "ERR_PNPM_TARBALL_FETCH",
      "stack": "Error: 401 Unauthorized: https://npm.pkg.github.com/download/{SCOPE}/{PACKAGE}/{VERSION}/{SOME_RANDOM_STRING}\n    at fetch (C:\\Users\\USER\\AppData\\Roaming\\npm\\node_modules\\pnpm\\lib\\node_modules\\@pnpm\\tarball-fetcher\\lib\\createDownloader.js:80:27)\n    at processTicksAndRejections (internal/process/task_queues.js:94:5)\n    at async RetryOperation._fn (C:\\Users\\USER\\AppData\\Roaming\\npm\\node_modules\\pnpm\\lib\\node_modules\\@pnpm\\tarball-fetcher\\lib\\createDownloader.js:45:29)"
    }
  }