GithubHelp home page GithubHelp logo

Comments (5)

ccarruitero avatar ccarruitero commented on June 2, 2024

Hi @jswanso
Thanks for using this package and for filling this issue.

The idea behind use a local registry is that you don't have to interact with an external service in order to use this package (it is useful if you do a workshop and don't have access to internet).

When the project started they created a script to emulate npm registry and as you mention around mid 2020 we changed it to use verdaccio.

Until I understand you, you are having same problem as #150, right? If you have a trace or some useful information about the error please add it in the same issue to get all centralized in the same place. I'll try to find some time this week to debug the error.

In the meantime I will suggest you to skip the "Login" challenge and try other ones.

from how-to-npm.

juanpicado avatar juanpicado commented on June 2, 2024

. I also saw this was upgraded to use verdaccio #143 for the local registry back in May/Jun 2020, and I have to imagine that is a very old version which might be why it doesn't run with my npm 9.5.1.

Hi folks, I'd love to help upgrading verdaccio and ensure works fine in all npm versions. Btw, after [email protected] has introduced a fallback login which should works fine by default.

Anyhow, :) I have no enough rights to give some love to this repo but if I'd get some, I'll be happy yo review PRs.

from how-to-npm.

jswanso avatar jswanso commented on June 2, 2024

I am working on reproducing the issue with detailed logs. Right now I am getting ECONNREFUSED, but guessing that is because my registry isn't starting up for some reason. I have reset the registry a couple times trying to troubleshoot the issue so maybe I locked a port or something. I am hoping a reboot will fix my issue.

I'll keep you posted.

BTW: I pulled down the latest verdaccio and was able to add a user to it locally without any problems.

from how-to-npm.

jswanso avatar jswanso commented on June 2, 2024

Thanks @ccarruitero and @juanpicado for responding and willing to take a look at this!

I was really pleased when working through the exercise to learn you used a local registry to create a sandbox for running these labs. I don't have an npmjs.com account and didn't want to create one just to use this lab.

Here is a detailed rundown of my setup.

For full disclosure I installed this npm package locally instead of globally and then use npx to run the commands. I've never had an issue with this in other projects and I assume this isn't the issue.

After installing the "how-to-npm" package, I ran into multiple issues, but have been able to work through most of them so far by installing missing/outdated packages. Here is what my package.json file looks like for the missing dependencies.

File Content for package.json

{
  "dependencies": {
    "concat-stream": "^2.0.0",
    "how-to-npm": "^2.5.1",
    "which": "^3.0.1",
    "workshopper-adventure": "^7.0.0"
  }
}

Step 2 "02 login" is where I have the issue. I've created a sub directory called "workdir" that is my working directory for running the "02 Login" commands. After running npm init -y in the "workdir" folder it has two files.

Folder Content for workdir

  • .npmrc
  • package.json

File Content for .npmrc

registry = http://localhost:15443/
userconfig = C:\Users\<MY USER NAME>\.config\how-to-npm\npmrc

File Content for package.json

{
  "name": "workdir",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

I ran both npm adduser and npm adduser --auth-type=legacy which both failed with the error "No credentials to set." Here is the detailed log message from the second command, but really the error message is the same from either command.

File Content for npm log

0 verbose cli C:\Program Files\nodejs\node.exe C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js
1 info using [email protected]
2 info using [email protected]
3 timing npm:load:whichnode Completed in 2ms
4 timing config:load:defaults Completed in 3ms
5 timing config:load:file:C:\Program Files\nodejs\node_modules\npm\npmrc Completed in 2ms
6 timing config:load:builtin Completed in 3ms
7 timing config:load:cli Completed in 2ms
8 timing config:load:env Completed in 0ms
9 timing config:load:file:c:\gittrain\nodeschool-npm2\workdir\.npmrc Completed in 1ms
10 timing config:load:project Completed in 6ms
11 timing config:load:file:C:\Users\<MY USER NAME>\.config\how-to-npm\npmrc Completed in 0ms
12 timing config:load:user Completed in 0ms
13 timing config:load:file:C:\Users\<MY USER NAME>\AppData\Roaming\npm\etc\npmrc Completed in 1ms
14 timing config:load:global Completed in 2ms
15 timing config:load:setEnvs Completed in 1ms
16 timing config:load Completed in 19ms
17 timing npm:load:configload Completed in 19ms
18 timing npm:load:mkdirpcache Completed in 1ms
19 timing npm:load:mkdirplogs Completed in 1ms
20 verbose title npm adduser
21 verbose argv "adduser" "--auth-type" "legacy"
22 timing npm:load:setTitle Completed in 2ms
23 timing config:load:flatten Completed in 5ms
24 timing npm:load:display Completed in 5ms
25 verbose logfile logs-max:10 dir:C:\Users\<MY USER NAME>\AppData\Local\npm-cache\_logs\2023-05-09T21_52_53_138Z-
26 verbose logfile C:\Users\<MY USER NAME>\AppData\Local\npm-cache\_logs\2023-05-09T21_52_53_138Z-debug-0.log
27 timing npm:load:logFile Completed in 9ms
28 timing npm:load:timers Completed in 0ms
29 timing npm:load:configScope Completed in 0ms
30 timing npm:load Completed in 39ms
31 notice Log in on http://localhost:15443/
32 silly logfile start cleaning logs, removing 2 files
33 silly logfile done cleaning log files
34 verbose adduser before first PUT {
34 verbose adduser   _id: 'org.couchdb.user:justin',
34 verbose adduser   name: 'justin',
34 verbose adduser   password: 'XXXXX',
34 verbose adduser   email: '[email protected]',
34 verbose adduser   type: 'user',
34 verbose adduser   roles: [],
34 verbose adduser   date: '2023-05-09T21:53:13.476Z'
34 verbose adduser }
35 http fetch PUT 201 http://localhost:15443/-/user/org.couchdb.user:justin 28ms
36 info adduser Logged in on http://localhost:15443/.
37 timing command:adduser Completed in 20303ms
38 verbose stack Error: No credentials to set.
38 verbose stack     at Config.setCredentialsByURI (C:\Program Files\nodejs\node_modules\npm\node_modules\@npmcli\config\lib\index.js:806:13)
38 verbose stack     at AddUser.exec (C:\Program Files\nodejs\node_modules\npm\lib\commands\adduser.js:40:21)
38 verbose stack     at async module.exports (C:\Program Files\nodejs\node_modules\npm\lib\cli.js:134:5)
39 verbose cwd c:\gittrain\nodeschool-npm2\workdir
40 verbose Windows_NT 10.0.19042
41 verbose node v18.16.0
42 verbose npm  v9.5.1
43 error No credentials to set.
44 verbose exit 1
45 timing npm Completed in 20376ms
46 verbose code 1
47 error A complete log of this run can be found in:
47 error     C:\Users\<MY USER NAME>\AppData\Local\npm-cache\_logs\2023-05-09T21_52_53_138Z-debug-0.log

As seen in the detailed log it is failing on the HTTP put to local host with "No credentials to set". In a separate test I pulled down the "verdaccio" package to run locally just to see if my npm adduser command would get a similar issue, but it worked just fine. Of course, I was running the latest version verdaccio.

Other contextual detail.

npm version

{
  workdir: '1.0.0',
  npm: '9.5.1',
  node: '18.16.0',
  acorn: '8.8.2',
  ada: '1.0.4',
  ares: '1.19.0',
  brotli: '1.0.9',
  cldr: '42.0',
  icu: '72.1',
  llhttp: '6.0.10',
  modules: '108',
  napi: '8',
  nghttp2: '1.52.0',
  nghttp3: '0.7.0',
  ngtcp2: '0.8.1',
  openssl: '3.0.8+quic',
  simdutf: '3.2.2',
  tz: '2022g',
  undici: '5.21.0',
  unicode: '15.0',
  uv: '1.44.2',
  uvwasi: '0.0.15',
  v8: '10.2.154.26-node.26',
  zlib: '1.2.13'
}

Windows Machine Info

  • OS Name: Microsoft Windows 10 Pro
  • OS Version: 10.0.19042 N/A Build 19042
  • OS Manufacturer: Microsoft Corporation

I've done a little more debugging locally on the code to see if I could spot the issue, but I think I am missing some context on the setup of these workshops. I didn't find any additional architecture and getting started documentation in this repository to go further into debugging.

Any help is appreciated. If you have any additional resources you could point me at to help fill in the gaps that would also be great.

from how-to-npm.

jswanso avatar jswanso commented on June 2, 2024

Hello @juanpicado and @ccarruitero

I traced through the npm CLI code to see why I get a "No credentials to set" error. Here are my findings.

Summary

The locally hosted Verdaccio registry used in the latest how-to-npm package doesn't return a token when npm adduser command is called and subsequently errors out. I am use npm version 9.5.1.

Details

The CLI npm adduser command calls setCredentialsByURI method passing in new credentials (newCreds). All the parameters passed into the setCredentialsByURI method are undefined other than the URI parameter which, as expected, points to the localhost (i.e., http://localhost:15443/). The setCredentialsByURI method is what throws the No credentials to set error that is reported in my prior log.

Walking backwards in the code I see that the auth.adduser method returns the newCreds variable which consists of { token: undefined }.

Stepping into the auth.js adduser method I see the profile.adduserCouch method called with the command line username, email, and password that I supplied in the CLI when prompted.

The adduserCouch method looks like it does a HTTP PUT to the local registry which based on the logs is successful with a HTTP Status Code of 201. The returned results res consists of { ok: 'created', username: 'justin' }, but it doesn't have a token returned. Subsequently the auth.js adduser method returns the undefined token to the calling adduser method.

Assuming that the npm CLI code is correct, the issue seems to be with the locally hosted repository not returning a token. I don't know what the expectations are of this registry, and I hope someone can provide the answer.

For comparison, when I run the latest verdaccio locally my npm adduser works fine and I see the returned payload has a provided token.

Verdaccio returned payload example: { ok: "user 'user1' created", token: 'VkPPcaSLZxmz+bMm822Qyw==', username: 'user1' }

Follow-up

I know @ccarruitero you suggested that I skip # 02, but I fear that doing so is only going to get me so far before I run into this registry issue again. I am hoping the detailed write above will help you in triaging this issue. I am not sure there is much more I can do to help on this without having more background on the design of this workshop.

Further guidance is appreciated.

from how-to-npm.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.