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
- fix: registry set in lockfile resolution should not be ignored ref #2687 — committed to pnpm/pnpm by zkochan 4 years ago
- fix: get the right pkg name of a pkg resolved from GitHub registry ref #2687 — committed to pnpm/pnpm by zkochan 4 years ago
- fix: get the right pkg name of a pkg resolved from GitHub registry ref #2687 — committed to pnpm/pnpm by zkochan 4 years ago
- fix: registry set in lockfile resolution should not be ignored ref #2687 PR #2733 — committed to pnpm/pnpm by zkochan 4 years ago
- fix: get the right pkg name of a pkg resolved from GitHub registry ref #2687 PR #2734 — committed to pnpm/pnpm by zkochan 4 years ago
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
Then follow the instruction in github package detail page, but using pnpm
But, it only works if the package never installed before.
When I delete
.pnpm-store
and runpnpm i
.Here is the .pnpm-debug.log