Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feature request] support fetch COREPACK_NPM_REGISTRY from http protocol REGISTRY #293

Closed
dabuside opened this issue Aug 9, 2023 · 3 comments · Fixed by #365
Closed

Comments

@dabuside
Copy link

dabuside commented Aug 9, 2023

I need to download packagemanager from private http npm registry.
There's an error when I execute the command
COREPACK_NPM_REGISTRY="http://npm.mycompany.com/" corepack prepare pnpm@8.6.12

Error

Preparing pnpm@8.6.12...
Type Error: Protocol "http:" not supported. Expected "https:"
    at new NodeError (node:internal/errors:387:5)
    at new ClientRequest (node:_http_client:186:11)
    at request (node:https:357:10)
    at Object.get (node:https:391:15)
    at C:\Users\admin\AppData\Roaming\nvm\v16.20.1\node_modules\corepack\dist\corepack.js:43946:27
    at new Promise (<anonymous>)
    at fetchUrlStream (C:\Users\admin\AppData\Roaming\nvm\v16.20.1\node_modules\corepack\dist\corepack.js:43945:10)
    at async installVersion (C:\Users\admin\AppData\Roaming\nvm\v16.20.1\node_modules\corepack\dist\corepack.js:44121:18)
    at async Engine.ensurePackageManager (C:\Users\admin\AppData\Roaming\nvm\v16.20.1\node_modules\corepack\dist\corepack.js:44309:31)
    at async PrepareCommand.execute (C:\Users\admin\AppData\Roaming\nvm\v16.20.1\node_modules\corepack\dist\corepack.js:44713:27)

Notice that all packagemanagers(npm, pnpm and yarn) support download package through custom registry with http protocol.
Maybe we can support download packagemanagers from custom REGISTRY with http protocol?

const {default: https} = await import(`https`);
const {ProxyAgent} = await import(`proxy-agent`);
const proxyAgent = new ProxyAgent();
return new Promise<IncomingMessage>((resolve, reject) => {
const request = https.get(url, {...options, agent: proxyAgent}, response => {
const statusCode = response.statusCode;
if (statusCode != null && statusCode >= 200 && statusCode < 300)
return resolve(response);
return reject(new Error(`Server answered with HTTP ${statusCode} when performing the request to ${url}; for troubleshooting help, see https://github.com/nodejs/corepack#troubleshooting`));
});
request.on(`error`, err => {
reject(new Error(`Error when performing the request to ${url}; for troubleshooting help, see https://github.com/nodejs/corepack#troubleshooting`));
});
});

If possible, I can work with the issue.

Enviroment

  • node: 16.20.1
  • corepack: 0.17.0
@lim-kim930
Copy link

We use a private npm registry in the company, but it uses the http protocol so we can't use corepack to enable pnpm, hope to support http.

@lim-kim930
Copy link

We use a private npm registry in the company, but it uses the http protocol so we can't use corepack to enable pnpm, hope to support http.

Our current approach is to replace the https module introduced by corepack with the http module.

@jakebailey
Copy link

I'm also attempting to do this, though with a different setup. I'm trying to sandbox package installs of untrusted code using docker and gVisor. I am cutting off the network while still allowing access to the registry by running a local verdaccio instance on the non-internet network that is attached to my sandbox container. verdaccio is running as an http service; while I can configure yarn, npm, etc to use that instance just fine, I can't install the package managers themselves when corepack is in use because corepack rejects the http protocol (even though that's all I have).

@merceyz merceyz linked a pull request Jan 27, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants