Compare commits

..

4 Commits

7 changed files with 84 additions and 54 deletions

View File

@@ -44,7 +44,7 @@
"devDependencies": { "devDependencies": {
"@inquirer/prompts": "^8.2.1", "@inquirer/prompts": "^8.2.1",
"@kevisual/ai": "^0.0.24", "@kevisual/ai": "^0.0.24",
"@kevisual/api": "^0.0.57", "@kevisual/api": "^0.0.58",
"@kevisual/load": "^0.0.6", "@kevisual/load": "^0.0.6",
"@kevisual/local-app-manager": "^0.1.32", "@kevisual/local-app-manager": "^0.1.32",
"@kevisual/logger": "^0.0.4", "@kevisual/logger": "^0.0.4",

View File

@@ -7,7 +7,7 @@ const me = new Command('me')
.action(async () => { .action(async () => {
const aq = new AssistantQuery(assistantConfig); const aq = new AssistantQuery(assistantConfig);
await aq.init() await aq.init()
const info = await aq.queryLogin.checkLocalUser() const info = await aq.getToken()
logger.info(info); logger.info(info);
}); });

View File

@@ -257,49 +257,42 @@ export class AssistantApp extends Manager {
* 检查本地用户登录状态,如果未登录且存在 CNB_TOKEN则尝试使用 CNB_TOKEN 登录并更新用户信息 * 检查本地用户登录状态,如果未登录且存在 CNB_TOKEN则尝试使用 CNB_TOKEN 登录并更新用户信息
*/ */
async checkLocalUser() { async checkLocalUser() {
const config = this.config.getConfig(); return checkLocalUser({ assistantApp: this });
const auth = config?.auth; }
let checkCNB = false; }
if (!auth?.username) {
checkCNB = true;
} else { const checkLocalUser = async (opts: { assistantApp: AssistantApp }) => {
let temp = await assistantQuery.queryLogin.getToken() const { assistantApp } = opts;
if (temp) { const config = assistantApp.config.getConfig();
const isExpired = await assistantQuery.queryLogin.checkTokenValid() const auth = config?.auth;
console.log('Token 是否过期', isExpired); let checkCNB = false;
if (!auth?.username) {
checkCNB = true;
// 没有登录过自动检测ci进行登录
// 检测条件1环境变量中存在 CNB_TOKEN
} else {
let temp = await assistantQuery.getToken()
logger.info('[assistant] 当前登录用户', auth.username, 'token有效性检查结果', !!temp);
}
const cnbToken = useKey('CNB_TOKEN');
if (!checkCNB && cnbToken) {
const res = await assistantQuery.queryLogin.loginByCnb({ cnbToken })
if (res.code === 200) {
logger.info('CNB登录成功用户信息已更新');
const userInfo = await assistantQuery.queryLogin.checkLocalUser()
auth.username = userInfo.username;
auth.share = 'protected'
const app = config?.app || {};
if (!app?.id) {
app.id = 'dev-cnb'
} }
logger.info('[assistant] 当前登录用户', auth.username, 'token有效性检查结果', !!temp); assistantApp.config.setConfig({
} auth,
const cnbToken = useKey('CNB_TOKEN'); app
if (!checkCNB && cnbToken) {
const res = await assistantQuery.query.post({
path: 'user',
key: 'cnb-login',
payload: {
data: {
cnbToken: cnbToken,
}
}
}); });
if (res.code === 200) { } else {
logger.info('CNB登录成功用户信息已更新'); console.error('CNB登录失败无法获取用户信息', res);
const resUser = await assistantQuery.queryLogin.beforeSetLoginUser(res.data)
if (resUser.code === 200) {
const userInfo = resUser.data;
auth.username = userInfo.username;
auth.share = 'protected'
const app = config?.app || {};
if (!app?.id) {
app.id = 'dev-cnb'
}
this.config.setConfig({
auth,
app
});
} else {
console.error('CNB登录失败无法获取用户信息', resUser);
}
}
} }
} }
} }

View File

@@ -35,7 +35,12 @@ export class AssistantQuery {
get(body: any, options?: DataOpts) { get(body: any, options?: DataOpts) {
return this.query.get(body, options); return this.query.get(body, options);
} }
getToken() { async getToken() {
return this.queryLogin.getToken(); const token = await this.queryLogin.getToken();
if (!token) return '';
const isExpired = await this.queryLogin.checkTokenValid()
console.log('Token 是否过期', isExpired, token);
console.log('info', this.queryLogin.cacheStore.cacheData)
return token;
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "@kevisual/cli", "name": "@kevisual/cli",
"version": "0.1.7", "version": "0.1.8",
"description": "envision 命令行工具", "description": "envision 命令行工具",
"type": "module", "type": "module",
"basename": "/root/cli", "basename": "/root/cli",
@@ -59,7 +59,7 @@
"unstorage": "^1.17.4" "unstorage": "^1.17.4"
}, },
"devDependencies": { "devDependencies": {
"@kevisual/api": "^0.0.57", "@kevisual/api": "^0.0.58",
"@kevisual/cnb": "^0.0.28", "@kevisual/cnb": "^0.0.28",
"@kevisual/dts": "^0.0.4", "@kevisual/dts": "^0.0.4",
"@kevisual/load": "^0.0.6", "@kevisual/load": "^0.0.6",

14
pnpm-lock.yaml generated
View File

@@ -58,8 +58,8 @@ importers:
version: 1.17.4(idb-keyval@6.2.2)(ioredis@5.9.3(supports-color@10.2.2)) version: 1.17.4(idb-keyval@6.2.2)(ioredis@5.9.3(supports-color@10.2.2))
devDependencies: devDependencies:
'@kevisual/api': '@kevisual/api':
specifier: ^0.0.57 specifier: ^0.0.58
version: 0.0.57(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) version: 0.0.58(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@kevisual/cnb': '@kevisual/cnb':
specifier: ^0.0.28 specifier: ^0.0.28
version: 0.0.28(dotenv@17.3.1)(idb-keyval@6.2.2)(ioredis@5.9.3) version: 0.0.28(dotenv@17.3.1)(idb-keyval@6.2.2)(ioredis@5.9.3)
@@ -170,8 +170,8 @@ importers:
specifier: ^0.0.24 specifier: ^0.0.24
version: 0.0.24 version: 0.0.24
'@kevisual/api': '@kevisual/api':
specifier: ^0.0.57 specifier: ^0.0.58
version: 0.0.57(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) version: 0.0.58(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@kevisual/load': '@kevisual/load':
specifier: ^0.0.6 specifier: ^0.0.6
version: 0.0.6 version: 0.0.6
@@ -1290,8 +1290,8 @@ packages:
'@kevisual/api@0.0.28': '@kevisual/api@0.0.28':
resolution: {integrity: sha512-WQluRlu2qGM1qktIhPLODie8x382a6jEMfFOcay/rnkCgXK0BRpnqOKwlX7IMLdMqka7GY/BD69kSMnK1Exf5g==} resolution: {integrity: sha512-WQluRlu2qGM1qktIhPLODie8x382a6jEMfFOcay/rnkCgXK0BRpnqOKwlX7IMLdMqka7GY/BD69kSMnK1Exf5g==}
'@kevisual/api@0.0.57': '@kevisual/api@0.0.58':
resolution: {integrity: sha512-U2nz+ckWZ4XGASC08xJT6WKQajhFQDd1iDb9tU1dHZECsvNvIzpHLG7RHFN1vahG1MdbQtppPmHgVTF2Zw7RWg==} resolution: {integrity: sha512-ontJswmD5LS4EjYZDGF/SI1oYI1/zCM6ovC8rviNzxI22294yQ5y8Lb/rYV2qsKaxJbC3uuOjjsjPWap0nSvAQ==}
'@kevisual/app@0.0.1': '@kevisual/app@0.0.1':
resolution: {integrity: sha512-PEx8P3l0iNSqrz9Ib9kVCYfqNMX6/LfNu+cEafmY6ECP1cV5Vmv+TH2fuasMosKjtbH2fAdDi97sbd29tdEK+g==} resolution: {integrity: sha512-PEx8P3l0iNSqrz9Ib9kVCYfqNMX6/LfNu+cEafmY6ECP1cV5Vmv+TH2fuasMosKjtbH2fAdDi97sbd29tdEK+g==}
@@ -6609,7 +6609,7 @@ snapshots:
fuse.js: 7.1.0 fuse.js: 7.1.0
nanoid: 5.1.6 nanoid: 5.1.6
'@kevisual/api@0.0.57(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': '@kevisual/api@0.0.58(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies: dependencies:
'@kevisual/context': 0.0.8 '@kevisual/context': 0.0.8
'@kevisual/js-filter': 0.0.5 '@kevisual/js-filter': 0.0.5

32
test/cnb.ts Normal file
View File

@@ -0,0 +1,32 @@
import { CNB } from '@kevisual/cnb'
import { useKey } from '@kevisual/context'
import { QueryLoginNode } from '@kevisual/api/query-login-node'
import { Query } from '@kevisual/query'
const queryLogin = new QueryLoginNode({
query: new Query({ url: 'https://kevisual.cn/api/router' })
})
// const token = useKey('CNB_TOKEN');
const token = '0054fuHjqpQ279mOva3H3ImIDlD'
const cnb = new CNB({
token
})
export const cnbLogin = async () => {
const userInfo = await cnb.user.getUser()
console.log('CNB用户信息', userInfo);
}
cnbLogin()
const testCnbLogin = async () => {
const res = await queryLogin.loginByCnb({
cnbToken: token,
})
console.log('CNB登录结果', res);
if (res.code === 200) {
const userInfo = await queryLogin.checkLocalUser()
console.log('CNB登录成功用户信息', userInfo);
} else {
console.log('CNB登录失败', res);
}
}
// testCnbLogin()