fix: fix bugs

This commit is contained in:
熊潇 2025-02-28 11:09:41 +08:00
parent 3d99214656
commit e525833fc8
6 changed files with 77 additions and 48 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "@kevisual/envision-cli", "name": "@kevisual/envision-cli",
"version": "0.0.26", "version": "0.0.27",
"description": "envision command tools", "description": "envision command tools",
"main": "dist/index.js", "main": "dist/index.js",
"type": "module", "type": "module",

View File

@ -34,6 +34,13 @@ export const getTokenList = async () => {
} }
return res; 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` 参数来输入用户名和密码 // 定义login命令支持 `-u` 和 `-p` 参数来输入用户名和密码
const loginCommand = new Command('login') const loginCommand = new Command('login')
.description('Login to the application') .description('Login to the application')
@ -45,7 +52,7 @@ const loginCommand = new Command('login')
const config = getConfig(); const config = getConfig();
let { username, password } = options; let { username, password } = options;
if (options.web) { if (options.web) {
await loginInCommand(); await loginInCommand(saveToken);
return; return;
} }
// 如果没有传递参数,则通过交互式输入 // 如果没有传递参数,则通过交互式输入

View File

@ -3,7 +3,7 @@ import { getConfig, query, writeConfig } from '@/module/index.ts';
import inquirer from 'inquirer'; import inquirer from 'inquirer';
import util from 'util'; 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 token = new Command('token').description('show token').action(async () => {
const config = getConfig(); const config = getConfig();
console.log('token', config.token); console.log('token', config.token);
@ -51,7 +51,7 @@ const baseURL = new Command('baseURL')
.option('-l, --list', 'list baseURL') .option('-l, --list', 'list baseURL')
.option('-c, --clear', 'clear baseURL') .option('-c, --clear', 'clear baseURL')
.action(async (opts) => { .action(async (opts) => {
const config = getConfig(); let config = getConfig();
let list = (config.baseURLList as Array<string>) || []; let list = (config.baseURLList as Array<string>) || [];
const quineList = (list: string[]) => { const quineList = (list: string[]) => {
const newList = new Set(list); const newList = new Set(list);
@ -62,18 +62,34 @@ const baseURL = new Command('baseURL')
console.log('expand baseURLList is empty'); console.log('expand baseURLList is empty');
return; return;
} }
const config = getConfig();
console.log('----current baseURL:' + config.baseURL + '----\n'); console.log('----current baseURL:' + config.baseURL + '----\n');
list.forEach((item, index) => { list.forEach((item, index) => {
console.log(`${index + 1}: ${item}`); console.log(`${index + 1}: ${item}`);
}); });
}; };
function isNumeric(str: string) {
return /^-?\d+\.?\d*$/.test(str);
}
if (opts.add || opts.set) {
let change = false;
if (opts.add) { if (opts.add) {
change = true;
list.push(opts.add); 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); list = quineList(list);
console.log('add baseURL success\n');
writeConfig({ ...config, baseURLList: list }); writeConfig({ ...config, baseURLList: list });
config = getConfig();
showList(list); showList(list);
return; }
} }
if (opts.remove) { if (opts.remove) {
const index = Number(opts.remove) - 1; const index = Number(opts.remove) - 1;
@ -89,7 +105,7 @@ const baseURL = new Command('baseURL')
return; return;
} }
if (opts.set) { if (opts.set) {
const isNumber = !isNaN(Number(opts.set)); const isNumber = isNumeric(opts.set);
let baseURL = ''; let baseURL = '';
if (isNumber) { if (isNumber) {
const index = Number(opts.set) - 1; const index = Number(opts.set) - 1;
@ -99,17 +115,9 @@ const baseURL = new Command('baseURL')
} }
baseURL = list[index]; baseURL = list[index];
writeConfig({ ...config, baseURL: list[index] }); writeConfig({ ...config, baseURL: list[index] });
console.log('set baseURL success:', list[index]); showList(list);
} else { } else {
try {
new URL(opts.set);
} catch (error) {
console.log('invalid baseURL:', opts.set);
return;
}
baseURL = opts.set; baseURL = opts.set;
writeConfig({ ...config, baseURL: opts.set });
console.log('set baseURL success:', opts.set);
} }
baseURL && switchToken(baseURL); baseURL && switchToken(baseURL);
return; return;
@ -120,14 +128,22 @@ const baseURL = new Command('baseURL')
} }
if (opts.clear) { if (opts.clear) {
writeConfig({ ...config, baseURLList: [] }); writeConfig({ ...config, baseURLList: [] });
setTokenList([]);
return; return;
} }
console.log('current baseURL:', config.baseURL); console.log('current baseURL:', config.baseURL);
}); });
app.addCommand(baseURL); app.addCommand(baseURL);
const setBaseURL = new Command('set').description('set baseURL').action(async () => { const setBaseURL = new Command('set')
.option('-b, --baseURL <baseURL>', 'set baseURL')
// .argument('<baseURL>', 'set baseURL', '')
.description('set baseURL')
.action(async (opt) => {
const config = getConfig(); const config = getConfig();
let baseURL = opt.baseURL;
// let baseURL = opt;
if (!baseURL) {
const answers = await inquirer.prompt([ const answers = await inquirer.prompt([
{ {
type: 'input', type: 'input',
@ -135,7 +151,8 @@ const setBaseURL = new Command('set').description('set baseURL').action(async ()
message: `Enter your baseURL:(current: ${config.baseURL})`, message: `Enter your baseURL:(current: ${config.baseURL})`,
}, },
]); ]);
const baseURL = answers.baseURL; baseURL = answers.baseURL;
}
writeConfig({ ...config, baseURL }); writeConfig({ ...config, baseURL });
baseURL && switchToken(baseURL); baseURL && switchToken(baseURL);
}); });

View File

@ -44,4 +44,5 @@ export const getConfig = () => {
export const writeConfig = (config: Record<string, any>) => { export const writeConfig = (config: Record<string, any>) => {
fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
return config;
}; };

View File

@ -4,13 +4,7 @@ import { chalk } from '../chalk.ts';
import jsonwebtoken from 'jsonwebtoken'; import jsonwebtoken from 'jsonwebtoken';
import { BaseLoad } from '@kevisual/load'; import { BaseLoad } from '@kevisual/load';
import { getConfig, writeConfig } from '../get-config.ts'; import { getConfig, writeConfig } from '../get-config.ts';
const saveToken = async (token: string) => {
const config = await getConfig();
writeConfig({
...config,
token,
});
};
type LoginWithWebOptions = {}; type LoginWithWebOptions = {};
export const loginWithWeb = async (opts?: LoginWithWebOptions) => { export const loginWithWeb = async (opts?: LoginWithWebOptions) => {
const baseURL = getBaseURL(); const baseURL = getBaseURL();
@ -36,6 +30,7 @@ export const loginWithWeb = async (opts?: LoginWithWebOptions) => {
type PollLoginOptions = { type PollLoginOptions = {
tokenSecret: string; tokenSecret: string;
saveToken?: any;
}; };
export const pollLoginStatus = async (token: string, opts: PollLoginOptions) => { export const pollLoginStatus = async (token: string, opts: PollLoginOptions) => {
const load = new BaseLoad(); const load = new BaseLoad();
@ -75,8 +70,9 @@ export const pollLoginStatus = async (token: string, opts: PollLoginOptions) =>
}; };
const userToken = payload.userToken; const userToken = payload.userToken;
// console.log('token:\n\n', userToken); // console.log('token:\n\n', userToken);
console.log(chalk.green('登录成功', payload?.user?.username)); console.log(chalk.green('网页登录成功', payload?.user?.username));
await saveToken(userToken.token); console.log(chalk.green('token:', userToken.token));
await opts?.saveToken(userToken.token);
return; return;
} catch (error) { } catch (error) {
console.log(chalk.red('登录失败'), error); console.log(chalk.red('登录失败'), error);
@ -85,9 +81,9 @@ export const pollLoginStatus = async (token: string, opts: PollLoginOptions) =>
console.log(chalk.red('登录失败'), res); console.log(chalk.red('登录失败'), res);
}; };
export const loginInCommand = async () => { export const loginInCommand = async (saveToken: any) => {
const { url, token, tokenSecret } = await loginWithWeb(); const { url, token, tokenSecret } = await loginWithWeb();
await pollLoginStatus(token, { tokenSecret }); await pollLoginStatus(token, { tokenSecret, saveToken });
return url; return url;
}; };

View File

@ -1,6 +1,7 @@
import { app } from '@/app.ts'; import { app } from '@/app.ts';
import { Config } from './model/config.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'; const cacheToken = 'tokenList';
export type TokenCacheItem = { export type TokenCacheItem = {
baseURL?: string; baseURL?: string;
@ -151,13 +152,20 @@ app
const tokenList: TokenCacheItem[] = configRes.body?.value || []; const tokenList: TokenCacheItem[] = configRes.body?.value || [];
const index = tokenList.findIndex((item) => item.baseURL === baseURL); const index = tokenList.findIndex((item) => item.baseURL === baseURL);
const token = index > -1 ? tokenList[index].token : ''; const token = index > -1 ? tokenList[index].token : '';
if (index > -1 && token) { if (token) {
writeConfig({ token: tokenList[index].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 = { ctx.body = {
baseURL: baseURL, baseURL: baseURL,
token: tokenList[index].token, token: tokenList[index].token,
}; };
} else { } else {
writeConfig({ ...getConfig(), token: '' });
ctx.throw(404, 'Token not found'); ctx.throw(404, 'Token not found');
} }
}) })