NPM publish 400 bad request troubles

6,872 views
Skip to first unread message

Darren Mombourquette

unread,
Mar 11, 2017, 9:34:10 PM3/11/17
to Nexus Users
Hi All,

I have a new deployment of Nexus OSS 3.2.1-01

NPM version 4.4.1


npm Bearer token realm is enabled.

All is looking good except when I try to publish from my client using

npm publish ./build/src --registry http://xyz/repository/npm/

I get a 400 Bad request from NpmToken
npm ERR! publish Failed PUT 400
npm ERR! code E400
npm ERR! 400 Bad Request

Turning trace on Nexus I get the following logs..

2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Servicing: PUT /repository/npm/@mitel%2fapollo-authentication (http://xyz/repository/npm/@mitel%2fapollo-authentication)
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Parsed path: RepositoryPath{repositoryName='npm', remainingPath='/@mitel/apollo-authentication'}
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Looking for repository: npm
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Repository: RepositoryImpl$$EnhancerByGuice$$77f8ecc9{type=group, format=npm, name='npm'}
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Dispatching to view facet: org.sonatype.nexus.repository.view.ConfigurableViewFacet$$EnhancerByGuice$$409e582d@34aed706
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.HttpResponseSenderSelector - Looking for HTTP response sender: npm
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router - Request: Request{action='PUT', path='/@mitel/apollo-authentication', parameters={}, payload=HttpRequestPayloadAdapter{contentType='application/json', size=6636}, multipart=false}
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router - Request headers:
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   Authorization: Bearer 6c8223c1-c114-3f51-a5bd-5ad4634be069
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   Accept: application/json
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   User-Agent: npm/4.4.1 node/v7.5.0 win32 x64
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   Connection: keep-alive
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   npm-session: 87b243c64166d5e3
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   npm-in-ci: false
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   Host: xyz
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   Accept-Encoding: gzip
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   Content-Length: 6636
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   version: 7.4.5
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   npm-scope: @mitel
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   Content-Type: application/json
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router - Request attributes:
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   org.apache.shiro.subject.support.DefaultSubjectContext.SESSION_CREATION_ENABLED=false
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   org.sonatype.nexus.security.authc.apikey.ApiKeyAuthenticationFilter.apiKey=6c8223c1-c114-3f51-a5bd-5ad4634be069
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   Key[type=org.sonatype.nexus.security.SecurityFilter, annotation=[none]].FILTERED=true
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   nx-authc.FILTERED=true
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   org.apache.shiro.web.servlet.ShiroHttpServletRequest_SESSION_ID_URL_REWRITING_ENABLED=true
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   nexus.user.principal=mitel
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   nx-anonymous.FILTERED=true
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   nexus.user.id=mitel
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   nx-apikey-authc.FILTERED=true
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router -   org.sonatype.nexus.security.authc.apikey.ApiKeyAuthenticationFilter.principal=NpmToken
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.handlers.BrowseUnsupportedHandler$MatcherImpl - Matching: PUT /@mitel/apollo-authentication
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.matchers.logic.AndMatcher - Matching: org.sonatype.nexus.repository.view.matchers.ActionMatcher@4759d44f AND OrMatcher{matchers=[LiteralMatcher{literal='/-/all', ignoreCase=true}, LiteralMatcher{literal='/-/all/since', ignoreCase=true}]}
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.matchers.logic.AndMatcher - Matching: org.sonatype.nexus.repository.view.matchers.ActionMatcher@a3e8dd6 AND OrMatcher{matchers=[org.sonatype.nexus.repository.view.matchers.token.TokenMatcher@3bc81b6b, org.sonatype.nexus.repository.view.matchers.token.TokenMatcher@3eea1dc4]}
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.matchers.logic.AndMatcher - Matching: org.sonatype.nexus.repository.view.matchers.ActionMatcher@37984dfa AND OrMatcher{matchers=[org.sonatype.nexus.repository.view.matchers.token.TokenMatcher@49b636e2, org.sonatype.nexus.repository.view.matchers.token.TokenMatcher@325e7ffc]}
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.matchers.logic.AndMatcher - Matching: org.sonatype.nexus.repository.view.matchers.ActionMatcher@5c34404e AND org.sonatype.nexus.repository.view.matchers.token.TokenMatcher@29b621af
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.matchers.token.TokenMatcher - Matching: /@mitel/apollo-authentication~=TokenParser{pattern=\Q/-/user/org.couchdb.user:\E([^/]+), variables=[var(userName,[^/]+)]}
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.matchers.logic.AndMatcher - Matching: org.sonatype.nexus.repository.view.matchers.ActionMatcher@51cf035d AND org.sonatype.nexus.repository.view.matchers.token.TokenMatcher@10af3707
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Context - Starting: DefaultRoute{matcher=org.sonatype.nexus.repository.view.matchers.AlwaysMatcher@6e67236c, handlers=[org.sonatype.nexus.repository.http.HttpHandlers$2@7644cc56]}
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Context - Proceeding: org.sonatype.nexus.repository.http.HttpHandlers$2@7644cc56
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router - Response: Response{status=Status{successful=false, code=400, message='null'}, payload=null}
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router - No response headers
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.view.Router - No response attributes
2017-03-12 02:21:40,603+0000 TRACE [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Describe flags: null
2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Request: Request{action='PUT', path='/@mitel/apollo-authentication', parameters={}, payload=HttpRequestPayloadAdapter{contentType='application/json', size=6636}, multipart=false}
2017-03-12 02:21:40,604+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.DefaultHttpResponseSender - Sending response: Response{status=Status{successful=false, code=400, message='null'}, payload=null}
2017-03-12 02:21:40,604+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Service completed


Any ideas here.. I'm logged into all repositories and have no problems with auth via NPM. Is there any additional log levels to turn on Nexus to get more error details... I'm new to nexus?

Thanks,
Darren

Peter Lynch

unread,
Mar 12, 2017, 11:37:43 PM3/12/17
to Darren Mombourquette, Nexus Users
On Sat, Mar 11, 2017 at 10:34 PM, Darren Mombourquette <dmom...@gmail.com> wrote:
Hi All,

I have a new deployment of Nexus OSS 3.2.1-01

NPM version 4.4.1


npm Bearer token realm is enabled.

All is looking good except when I try to publish from my client using

npm publish ./build/src --registry http://xyz/repository/npm/

I get a 400 Bad request from NpmToken
npm ERR! publish Failed PUT 400
npm ERR! code E400
npm ERR! 400 Bad Request

Turning trace on Nexus I get the following logs..

2017-03-12 02:21:40,603+0000 DEBUG [qtp1656941418-47] mitel org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Servicing: PUT /repository/npm/@mitel%2fapollo-authentication (http://xyz/repository/npm/@mitel%2fapollo-authentication)


You are trying to publish to a group. You can only publish to hosted npm repos. Try:

npm publish ./build/src --registry http://xyz/repository/npm_private


 

--
You received this message because you are subscribed to the Google Groups "Nexus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nexus-users+unsubscribe@glists.sonatype.com.
To post to this group, send email to nexus...@glists.sonatype.com.
To view this discussion on the web visit https://groups.google.com/a/glists.sonatype.com/d/msgid/nexus-users/a8619e25-2231-4741-9cce-5eab840313de%40glists.sonatype.com.
For more options, visit https://groups.google.com/a/glists.sonatype.com/d/optout.

Pablo García

unread,
Mar 13, 2017, 8:44:55 AM3/13/17
to Peter Lynch, Darren Mombourquette, Nexus Users
Have you considered to create kind of 'mapping' between virtual and hosted for publishing? Artifactory provides it: you can define in the group repo's configuration a hosted one to publish artifacts. 

Nodejs does not allow more than one registry definition in the npmrc file so the only solution is to have two config files : one to retrieve dependencies and another to publish, which is a bit nasty for developers. 

Regards 

Mahendra

unread,
Mar 13, 2017, 10:12:39 AM3/13/17
to Nexus Users, ply...@sonatype.com, dmom...@gmail.com
Hi Pablo,


A simple way to override .npmrc value is to provide a registry to the publish command:



Alternately, you can edit your package.json file and add a publishConfig section:

  "publishConfig" : {
  },




Kind Regards,
Mahendra
To unsubscribe from this group and stop receiving emails from it, send an email to nexus-users...@glists.sonatype.com.

--
You received this message because you are subscribed to the Google Groups "Nexus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nexus-users...@glists.sonatype.com.

Peter Lynch

unread,
Mar 13, 2017, 10:37:26 AM3/13/17
to Pablo García, Darren Mombourquette, Nexus Users
On Mon, Mar 13, 2017 at 9:44 AM, Pablo García <pgar...@gmail.com> wrote:
Have you considered to create kind of 'mapping' between virtual and hosted for publishing? Artifactory provides it: you can define in the group repo's configuration a hosted one to publish artifacts. 



Pablo García

unread,
Mar 13, 2017, 11:05:22 AM3/13/17
to Mahendra, dmom...@gmail.com, ply...@sonatype.com, Nexus Users
Of course, we are using those methods in our company and works fine ;) . 

I'm just asking if there is any plan to provide a way to simplify this even more by following the artifactory approach. 

That would be really nice to have and our CI servers would not need two npmrc files (we want to avoid configuration at project level as much as possible)

P. S. : it's just a suggestion, I am extremely happy with how nexus 3 performs here (hundreds of thousands of requests per day with zero issues!)  :) can't say the same about the competitors, which are being  "happily uninstalled" from our systems.  

To unsubscribe from this group and stop receiving emails from it, send an email to nexus-users+unsubscribe@glists.sonatype.com.

To post to this group, send email to nexus...@glists.sonatype.com.

Pablo García

unread,
Mar 13, 2017, 11:31:13 AM3/13/17
to Peter Lynch, Darren Mombourquette, Nexus Users

Darren Mombourquette

unread,
Mar 13, 2017, 12:30:52 PM3/13/17
to Nexus Users, ply...@sonatype.com, dmom...@gmail.com
Thanks everyone for the help. All is good now.

Cheers,
Darren
To unsubscribe from this group and stop receiving emails from it, send an email to nexus-users...@glists.sonatype.com.

--
You received this message because you are subscribed to the Google Groups "Nexus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nexus-users...@glists.sonatype.com.

To post to this group, send email to nexus...@glists.sonatype.com.

--
You received this message because you are subscribed to the Google Groups "Nexus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nexus-users...@glists.sonatype.com.

To post to this group, send email to nexus...@glists.sonatype.com.
Reply all
Reply to author
Forward
0 new messages