From cdbe9e709139bda7e139de4e9adafb26db1cb65d Mon Sep 17 00:00:00 2001 From: river Date: Tue, 16 Jan 2024 13:03:48 +0800 Subject: [PATCH] feat: Enable automatic login upon initial deployment. --- packages/feishuapi/test/app.test.ts | 6 +++--- src/auth.ts | 2 +- src/config.ts | 26 +++++++++++--------------- src/deploy.ts | 29 ++++++++++++++++++++++++----- 4 files changed, 39 insertions(+), 24 deletions(-) diff --git a/packages/feishuapi/test/app.test.ts b/packages/feishuapi/test/app.test.ts index eb669b2..62a792a 100644 --- a/packages/feishuapi/test/app.test.ts +++ b/packages/feishuapi/test/app.test.ts @@ -5,8 +5,8 @@ import type { AppInfo, EventUrlInfo } from '../src/app' import { FeishuAppPlus, OpenApp } from '../src/app' const testConfig: FeishuLoginCookies = { - lark_oapi_csrf_token: 'mMH47ijv/C0IKvUblsY3cA9QVjskDfEvCmYyXoaqTIU=', - session: 'XN0YXJ0-e29q5c84-aef0-44db-9b99-24282033dd87-WVuZA', + lark_oapi_csrf_token: 'iWlO+bXQoO+StV+YXqROtR+IFnmSckEYFQdLCaynZgI=', + session: 'XN0YXJ0-02asc1af-0e16-4dbe-97a5-c192d4b72016-WVuZA', } const config = new Configuration(testConfig) @@ -220,7 +220,7 @@ describe('feishu app plus', async () => { expect(result).not.toBeUndefined() }) it('del latest 2 app', async () => { - const result = await appPlus.delLatestNApp(4) + const result = await appPlus.delLatestNApp(10) expect(result).not.toBeUndefined() }) }) diff --git a/src/auth.ts b/src/auth.ts index 4315743..83cb60d 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -91,5 +91,5 @@ async function resetAllAuth() { const spinner = ora('Start reset all platform auth').start() const config = FeishuConfigManager.getInstance() config.setFeishuConfig({}) - spinner.succeed('Reset successfully ') + spinner.succeed('Reset all platform auth successfully') } diff --git a/src/config.ts b/src/config.ts index fa28d8b..4566db1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -73,12 +73,19 @@ export class FeishuConfigManager { this.setFeishuConfig({ ...feishuConfig, ...config }) } - async updateNickname() { + private createAConfig(): Configuration { const feishuConfig = this.getFeishuConfig() - const aConfig = new Configuration({ + if (!feishuConfig) + throw new Error('No Feishu config') + + return new Configuration({ session: feishuConfig.session as string, lark_oapi_csrf_token: feishuConfig.lark_oapi_csrf_token as string, }) + } + + async updateNickname() { + const aConfig = this.createAConfig() const nickname = await aConfig.getNickname() as string this.updateFeishuConfig({ nickname }) } @@ -92,24 +99,13 @@ export class FeishuConfigManager { const feishuConfig = this.getFeishuConfig() if (!feishuConfig) return false - - const aConfig = new Configuration({ - session: feishuConfig.session as string, - lark_oapi_csrf_token: feishuConfig.lark_oapi_csrf_token as string, - }) + const aConfig = this.createAConfig() const isAuthed = await aConfig.isAuthed() return isAuthed } get appBuilder() { - const feishuConfig = this.getFeishuConfig() - if (!feishuConfig) - throw new Error('no feishu config') - - const aConfig = new Configuration({ - session: feishuConfig.session as string, - lark_oapi_csrf_token: feishuConfig.lark_oapi_csrf_token as string, - }) + const aConfig = this.createAConfig() const appBuilderInstance = new OpenApp(aConfig) return appBuilderInstance } diff --git a/src/deploy.ts b/src/deploy.ts index 27ffdb4..b1c373b 100644 --- a/src/deploy.ts +++ b/src/deploy.ts @@ -4,6 +4,9 @@ import clipboard from 'clipboardy' import Listr from 'listr' import ora from 'ora' import confirm from '@inquirer/confirm' + +// @ts-expect-error This is an expected error because no type definition for this package +import { getFeishuCookies } from 'botops-feishu' import { changeArgvToString, greenIt, redIt } from './utils' import { DeployConfig } from './manifest' import { FeishuConfigManager } from './config' @@ -49,23 +52,38 @@ export async function handler(argv: any) { await aDeployConfig.loadConfig(pathFile) spin.succeed('Manifest file loaded successfully.') const aLocalConfig = FeishuConfigManager.getInstance() + // 先检查是否登录授权 + const isLogin = await aLocalConfig.isAuth() + if (!isLogin) { + const answer = await confirm({ message: 'Looks like you\'re not logged in to Feishu. Would you like to log in now?' }) + if (!answer) { + redIt('Please log in to Feishu first') + process.exit(1) + } + const newCookie = await getFeishuCookies() as any + aLocalConfig.setFeishuConfig(newCookie) + await aLocalConfig.updateNickname() + greenIt(`🚀Successfully reauthorized Feishu! Welcome, ${aLocalConfig.nickname}!`) + } const appBuilder = aLocalConfig.appBuilder await appBuilder.init() let appId = '' - + // 配置文件是否含有appID if (aDeployConfig.ifFirstDeploy) { // 检测是否有重名的机器人 const oldAppId = await appBuilder.checkAppName(aDeployConfig.botName) if (oldAppId) { - const answer = await confirm({ message: 'Detected a bot with the same name, do you want to overwrite it?' }) + const answer = await confirm({ message: `A bot with the name '${aDeployConfig.botName}' has been detected. Do you wish to overwrite it?` }) if (answer) { greenIt(`即将覆盖飞书机器人 ${aDeployConfig.botName}(${oldAppId})`) appId = oldAppId } } - appId = await appBuilder.newApp(aDeployConfig.botBaseInfo) - greenIt(`新的飞书机器人 ${aDeployConfig.botName}(${appId}) 初始化成功`) + else { + appId = await appBuilder.newApp(aDeployConfig.botBaseInfo) + greenIt(`新的飞书机器人 ${aDeployConfig.botName}(${appId}) 初始化成功`) + } } else { appId = aDeployConfig.appId as string @@ -133,7 +151,8 @@ export async function handler(argv: any) { }, ]) await tasks.run() - greenIt((`🚀 机器人 ${aDeployConfig.botName}(${appId}) 部署成功`)) + greenIt((`🚀 飞书机器人 ${aDeployConfig.botName}(${appId}) 部署成功`)) + process.exit(0) } function readClipboard() {