11#!/usr/bin/env node
2+ import { spawn } from 'node:child_process'
23import { defineCommand , runMain } from 'citty'
34import { listen } from 'listhen'
45import { toNodeListener } from 'h3'
56import { createConnectorApp , generateToken , CONNECTOR_VERSION } from './server.ts'
67import { getNpmUser } from './npm-client.ts'
7- import { initLogger , showToken , logInfo , showAuthRequired } from './logger.ts'
8+ import { initLogger , showToken , logInfo , logWarning } from './logger.ts'
89
910const DEFAULT_PORT = 31415
1011
12+ async function runNpmLogin ( ) : Promise < boolean > {
13+ return new Promise ( ( resolve ) => {
14+ const child = spawn ( 'npm' , [ 'login' ] , {
15+ stdio : 'inherit' ,
16+ shell : true ,
17+ } )
18+
19+ child . on ( 'close' , ( code ) => {
20+ resolve ( code === 0 )
21+ } )
22+
23+ child . on ( 'error' , ( ) => {
24+ resolve ( false )
25+ } )
26+ } )
27+ }
28+
1129const main = defineCommand ( {
1230 meta : {
1331 name : 'npmx-connector' ,
@@ -28,11 +46,27 @@ const main = defineCommand({
2846
2947 // Check npm authentication before starting
3048 logInfo ( 'Checking npm authentication...' )
31- const npmUser = await getNpmUser ( )
49+ let npmUser = await getNpmUser ( )
3250
3351 if ( ! npmUser ) {
34- showAuthRequired ( )
35- process . exit ( 1 )
52+ logWarning ( 'Not logged in to npm. Starting npm login...' )
53+ console . log ( ) // Add spacing before npm login prompt
54+
55+ const loginSuccess = await runNpmLogin ( )
56+
57+ console . log ( ) // Add spacing after npm login
58+
59+ if ( ! loginSuccess ) {
60+ logWarning ( 'npm login failed or was cancelled.' )
61+ process . exit ( 1 )
62+ }
63+
64+ // Check again after login
65+ npmUser = await getNpmUser ( )
66+ if ( ! npmUser ) {
67+ logWarning ( 'Still not authenticated after login attempt.' )
68+ process . exit ( 1 )
69+ }
3670 }
3771
3872 logInfo ( `Authenticated as: ${ npmUser } ` )
0 commit comments