fix: fix bugs
This commit is contained in:
		| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "@kevisual/envision-cli", | ||||
|   "version": "0.0.26", | ||||
|   "version": "0.0.27", | ||||
|   "description": "envision command tools", | ||||
|   "main": "dist/index.js", | ||||
|   "type": "module", | ||||
|   | ||||
| @@ -34,6 +34,13 @@ export const getTokenList = async () => { | ||||
|   } | ||||
|   return res; | ||||
| }; | ||||
| export const setTokenList = async (data: any[]) => { | ||||
|   const res = await runApp({ path: 'config', key: 'setTokenList', payload: { data } }); | ||||
|   if (res.code !== 200) { | ||||
|     console.log('set token list failed', res.message || ''); | ||||
|   } | ||||
|   return res; | ||||
| }; | ||||
| // 定义login命令,支持 `-u` 和 `-p` 参数来输入用户名和密码 | ||||
| const loginCommand = new Command('login') | ||||
|   .description('Login to the application') | ||||
| @@ -45,7 +52,7 @@ const loginCommand = new Command('login') | ||||
|     const config = getConfig(); | ||||
|     let { username, password } = options; | ||||
|     if (options.web) { | ||||
|       await loginInCommand(); | ||||
|       await loginInCommand(saveToken); | ||||
|       return; | ||||
|     } | ||||
|     // 如果没有传递参数,则通过交互式输入 | ||||
|   | ||||
| @@ -3,7 +3,7 @@ import { getConfig, query, writeConfig } from '@/module/index.ts'; | ||||
| import inquirer from 'inquirer'; | ||||
| import util from 'util'; | ||||
|  | ||||
| import { saveToken, switchToken, deleteToken, getTokenList } from './login.ts'; | ||||
| import { saveToken, switchToken, deleteToken, getTokenList, setTokenList } from './login.ts'; | ||||
| const token = new Command('token').description('show token').action(async () => { | ||||
|   const config = getConfig(); | ||||
|   console.log('token', config.token); | ||||
| @@ -51,7 +51,7 @@ const baseURL = new Command('baseURL') | ||||
|   .option('-l, --list', 'list baseURL') | ||||
|   .option('-c, --clear', 'clear baseURL') | ||||
|   .action(async (opts) => { | ||||
|     const config = getConfig(); | ||||
|     let config = getConfig(); | ||||
|     let list = (config.baseURLList as Array<string>) || []; | ||||
|     const quineList = (list: string[]) => { | ||||
|       const newList = new Set(list); | ||||
| @@ -62,18 +62,34 @@ const baseURL = new Command('baseURL') | ||||
|         console.log('expand baseURLList is empty'); | ||||
|         return; | ||||
|       } | ||||
|       const config = getConfig(); | ||||
|       console.log('----current baseURL:' + config.baseURL + '----\n'); | ||||
|       list.forEach((item, index) => { | ||||
|         console.log(`${index + 1}: ${item}`); | ||||
|       }); | ||||
|     }; | ||||
|     if (opts.add) { | ||||
|       list.push(opts.add); | ||||
|       list = quineList(list); | ||||
|       console.log('add baseURL success\n'); | ||||
|       writeConfig({ ...config, baseURLList: list }); | ||||
|       showList(list); | ||||
|       return; | ||||
|     function isNumeric(str: string) { | ||||
|       return /^-?\d+\.?\d*$/.test(str); | ||||
|     } | ||||
|     if (opts.add || opts.set) { | ||||
|       let change = false; | ||||
|       if (opts.add) { | ||||
|         change = true; | ||||
|         list.push(opts.add); | ||||
|       } else if (opts.set) { | ||||
|         if (!isNumeric(opts.set)) { | ||||
|           change = true; | ||||
|           list.push(opts.set); | ||||
|           writeConfig({ ...config, baseURL: opts.set }); | ||||
|           config = getConfig(); | ||||
|         } | ||||
|       } | ||||
|       if (change) { | ||||
|         list = quineList(list); | ||||
|         writeConfig({ ...config, baseURLList: list }); | ||||
|         config = getConfig(); | ||||
|         showList(list); | ||||
|       } | ||||
|     } | ||||
|     if (opts.remove) { | ||||
|       const index = Number(opts.remove) - 1; | ||||
| @@ -89,7 +105,7 @@ const baseURL = new Command('baseURL') | ||||
|       return; | ||||
|     } | ||||
|     if (opts.set) { | ||||
|       const isNumber = !isNaN(Number(opts.set)); | ||||
|       const isNumber = isNumeric(opts.set); | ||||
|       let baseURL = ''; | ||||
|       if (isNumber) { | ||||
|         const index = Number(opts.set) - 1; | ||||
| @@ -99,17 +115,9 @@ const baseURL = new Command('baseURL') | ||||
|         } | ||||
|         baseURL = list[index]; | ||||
|         writeConfig({ ...config, baseURL: list[index] }); | ||||
|         console.log('set baseURL success:', list[index]); | ||||
|         showList(list); | ||||
|       } else { | ||||
|         try { | ||||
|           new URL(opts.set); | ||||
|         } catch (error) { | ||||
|           console.log('invalid baseURL:', opts.set); | ||||
|           return; | ||||
|         } | ||||
|         baseURL = opts.set; | ||||
|         writeConfig({ ...config, baseURL: opts.set }); | ||||
|         console.log('set baseURL success:', opts.set); | ||||
|       } | ||||
|       baseURL && switchToken(baseURL); | ||||
|       return; | ||||
| @@ -120,25 +128,34 @@ const baseURL = new Command('baseURL') | ||||
|     } | ||||
|     if (opts.clear) { | ||||
|       writeConfig({ ...config, baseURLList: [] }); | ||||
|       setTokenList([]); | ||||
|       return; | ||||
|     } | ||||
|     console.log('current baseURL:', config.baseURL); | ||||
|   }); | ||||
| app.addCommand(baseURL); | ||||
|  | ||||
| const setBaseURL = new Command('set').description('set baseURL').action(async () => { | ||||
|   const config = getConfig(); | ||||
|   const answers = await inquirer.prompt([ | ||||
|     { | ||||
|       type: 'input', | ||||
|       name: 'baseURL', | ||||
|       message: `Enter your baseURL:(current: ${config.baseURL})`, | ||||
|     }, | ||||
|   ]); | ||||
|   const baseURL = answers.baseURL; | ||||
|   writeConfig({ ...config, baseURL }); | ||||
|   baseURL && switchToken(baseURL); | ||||
| }); | ||||
| const setBaseURL = new Command('set') | ||||
|   .option('-b, --baseURL <baseURL>', 'set baseURL') | ||||
|   // .argument('<baseURL>', 'set baseURL', '') | ||||
|   .description('set baseURL') | ||||
|   .action(async (opt) => { | ||||
|     const config = getConfig(); | ||||
|     let baseURL = opt.baseURL; | ||||
|     // let baseURL = opt; | ||||
|     if (!baseURL) { | ||||
|       const answers = await inquirer.prompt([ | ||||
|         { | ||||
|           type: 'input', | ||||
|           name: 'baseURL', | ||||
|           message: `Enter your baseURL:(current: ${config.baseURL})`, | ||||
|         }, | ||||
|       ]); | ||||
|       baseURL = answers.baseURL; | ||||
|     } | ||||
|     writeConfig({ ...config, baseURL }); | ||||
|     baseURL && switchToken(baseURL); | ||||
|   }); | ||||
|  | ||||
| baseURL.addCommand(setBaseURL); | ||||
|  | ||||
|   | ||||
| @@ -44,4 +44,5 @@ export const getConfig = () => { | ||||
|  | ||||
| export const writeConfig = (config: Record<string, any>) => { | ||||
|   fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); | ||||
|   return config; | ||||
| }; | ||||
|   | ||||
| @@ -4,13 +4,7 @@ import { chalk } from '../chalk.ts'; | ||||
| import jsonwebtoken from 'jsonwebtoken'; | ||||
| import { BaseLoad } from '@kevisual/load'; | ||||
| import { getConfig, writeConfig } from '../get-config.ts'; | ||||
| const saveToken = async (token: string) => { | ||||
|   const config = await getConfig(); | ||||
|   writeConfig({ | ||||
|     ...config, | ||||
|     token, | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| type LoginWithWebOptions = {}; | ||||
| export const loginWithWeb = async (opts?: LoginWithWebOptions) => { | ||||
|   const baseURL = getBaseURL(); | ||||
| @@ -36,6 +30,7 @@ export const loginWithWeb = async (opts?: LoginWithWebOptions) => { | ||||
|  | ||||
| type PollLoginOptions = { | ||||
|   tokenSecret: string; | ||||
|   saveToken?: any; | ||||
| }; | ||||
| export const pollLoginStatus = async (token: string, opts: PollLoginOptions) => { | ||||
|   const load = new BaseLoad(); | ||||
| @@ -75,8 +70,9 @@ export const pollLoginStatus = async (token: string, opts: PollLoginOptions) => | ||||
|       }; | ||||
|       const userToken = payload.userToken; | ||||
|       // console.log('token:\n\n', userToken); | ||||
|       console.log(chalk.green('登录成功', payload?.user?.username)); | ||||
|       await saveToken(userToken.token); | ||||
|       console.log(chalk.green('网页登录成功', payload?.user?.username)); | ||||
|       console.log(chalk.green('token:', userToken.token)); | ||||
|       await opts?.saveToken(userToken.token); | ||||
|       return; | ||||
|     } catch (error) { | ||||
|       console.log(chalk.red('登录失败'), error); | ||||
| @@ -85,9 +81,9 @@ export const pollLoginStatus = async (token: string, opts: PollLoginOptions) => | ||||
|   console.log(chalk.red('登录失败'), res); | ||||
| }; | ||||
|  | ||||
| export const loginInCommand = async () => { | ||||
| export const loginInCommand = async (saveToken: any) => { | ||||
|   const { url, token, tokenSecret } = await loginWithWeb(); | ||||
|   await pollLoginStatus(token, { tokenSecret }); | ||||
|   await pollLoginStatus(token, { tokenSecret, saveToken }); | ||||
|   return url; | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| import { app } from '@/app.ts'; | ||||
| import { Config } from './model/config.ts'; | ||||
| import { writeConfig } from '@/module/get-config.ts'; | ||||
| import { getConfig, writeConfig } from '@/module/get-config.ts'; | ||||
| import { queryMe } from '@/query/index.ts'; | ||||
| const cacheToken = 'tokenList'; | ||||
| export type TokenCacheItem = { | ||||
|   baseURL?: string; | ||||
| @@ -151,13 +152,20 @@ app | ||||
|     const tokenList: TokenCacheItem[] = configRes.body?.value || []; | ||||
|     const index = tokenList.findIndex((item) => item.baseURL === baseURL); | ||||
|     const token = index > -1 ? tokenList[index].token : ''; | ||||
|     if (index > -1 && token) { | ||||
|       writeConfig({ token: tokenList[index].token }); | ||||
|     if (token) { | ||||
|       const config = getConfig(); | ||||
|       const resMe = await queryMe(); | ||||
|       if (resMe.code !== 200) { | ||||
|         writeConfig({ ...config, token: '' }); | ||||
|         ctx.throw(resMe.code, resMe.message || 'cache token is invalid'); | ||||
|       } | ||||
|       writeConfig({ ...config, token: token }); | ||||
|       ctx.body = { | ||||
|         baseURL: baseURL, | ||||
|         token: tokenList[index].token, | ||||
|       }; | ||||
|     } else { | ||||
|       writeConfig({ ...getConfig(), token: '' }); | ||||
|       ctx.throw(404, 'Token not found'); | ||||
|     } | ||||
|   }) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user