From 7d70397b70888463769e25d993b2802261c08874 Mon Sep 17 00:00:00 2001
From: zhaoyingbo <zhaoyingbo@xiaomi.com>
Date: Sun, 24 Nov 2024 11:05:18 +0000
Subject: [PATCH] =?UTF-8?q?feat(net-tool):=20=E6=8E=A5=E5=85=A5=E9=BB=84?=
 =?UTF-8?q?=E5=8D=93=E7=9A=84=E9=89=B4=E6=9D=83=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .vscode/settings.json                     |  1 +
 packages/net-tool/src/larkServer/auth.ts  | 84 +++++++++++++++++++++--
 packages/net-tool/src/larkServer/base.ts  |  3 +
 packages/net-tool/src/larkServer/index.ts | 30 +++++---
 packages/net-tool/src/netTool/base.ts     |  3 +-
 5 files changed, 102 insertions(+), 19 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index d9984e0..5420a28 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,5 +1,6 @@
 {
   "cSpell.words": [
+    "cloudml",
     "commitlint",
     "tseslint",
     "unapproval",
diff --git a/packages/net-tool/src/larkServer/auth.ts b/packages/net-tool/src/larkServer/auth.ts
index 35ad008..04d7c68 100644
--- a/packages/net-tool/src/larkServer/auth.ts
+++ b/packages/net-tool/src/larkServer/auth.ts
@@ -1,14 +1,84 @@
-import LarkBaseService from "./base"
+import NetToolBase, { NetError } from "../netTool/base"
+import { Lark } from "../types"
+export class LarkAuthService extends NetToolBase {
+  public appId: string
+  public appSecret: string
 
-class LarkAuthService extends LarkBaseService {
-  getAk(appId: string, appSecret: string) {
-    return this.post<{ tenant_access_token: string; code: number }>(
-      "/auth/v3/tenant_access_token/internal",
+  constructor({
+    appId,
+    appSecret,
+    requestId,
+  }: {
+    appId?: string
+    appSecret?: string
+    requestId: string
+  }) {
+    super({
+      prefix:
+        process.env.NODE_ENV === "production"
+          ? "http://lark-auth.c5-cloudml.xiaomi.srv/lark_auth"
+          : "http://lark-auth.staging-cloudml.xiaomi.srv/lark_auth",
+      requestId,
+    })
+    this.appId = appId || process.env.LARK_APP_ID || ""
+    this.appSecret = appSecret || process.env.LARK_APP_SECRET || ""
+  }
+
+  /**
+   * 获取用户的授权信息
+   * @param user
+   * @returns
+   */
+  public async getUserAuth(user: string) {
+    return this.get<
+      Lark.BaseRes<{
+        access_token: string
+      }>
+    >("/get_auth", {
+      app_id: this.appId,
+      app_secret: this.appSecret,
+      user_name: user,
+    })
+      .then(({ data: { access_token } }) => ({
+        access_token,
+      }))
+      .catch((e: NetError) => {
+        if (e.response?.status === 400)
+          return {
+            auth_url: e.data?.detail?.auth_url,
+          }
+        throw e
+      })
+  }
+
+  /**
+   * 删除用户的授权信息
+   * @param user
+   * @returns
+   */
+  public deleteUserAuth(user: string) {
+    return this.get<{ message: string }>("/delete_auth", {
+      app_id: this.appId,
+      app_secret: this.appSecret,
+      user_name: user,
+    })
+  }
+
+  /**
+   * 获取应用的授权信息
+   * @returns
+   */
+  public async getAppAuth() {
+    const {
+      data: { tenant_access_token },
+    } = await this.get<Lark.BaseRes<{ tenant_access_token: string }>>(
+      "/get_tenant_access_token",
       {
-        app_id: appId,
-        app_secret: appSecret,
+        app_id: this.appId,
+        app_secret: this.appSecret,
       }
     )
+    return tenant_access_token
   }
 }
 
diff --git a/packages/net-tool/src/larkServer/base.ts b/packages/net-tool/src/larkServer/base.ts
index 5ff2a5f..b3064d2 100644
--- a/packages/net-tool/src/larkServer/base.ts
+++ b/packages/net-tool/src/larkServer/base.ts
@@ -1,5 +1,6 @@
 import NetToolBase, { NetError } from "../netTool/base"
 
+
 class LarkBaseService extends NetToolBase {
   constructor(getToken: () => Promise<string>, requestId: string) {
     super({
@@ -25,4 +26,6 @@ class LarkBaseService extends NetToolBase {
   }
 }
 
+
+
 export default LarkBaseService
diff --git a/packages/net-tool/src/larkServer/index.ts b/packages/net-tool/src/larkServer/index.ts
index ccb396e..2595875 100644
--- a/packages/net-tool/src/larkServer/index.ts
+++ b/packages/net-tool/src/larkServer/index.ts
@@ -14,19 +14,27 @@ class LarkService {
   chat: LarkChatService
   requestId: string
 
-  constructor(getToken: () => Promise<string>, requestId: string) {
-    this.drive = new LarkDriveService(getToken, requestId)
-    this.message = new LarkMessageService(getToken, requestId)
-    this.user = new LarkUserService(getToken, requestId)
-    this.sheet = new LarkSheetService(getToken, requestId)
-    this.auth = new LarkAuthService(getToken, requestId)
-    this.chat = new LarkChatService(getToken, requestId)
+  constructor({
+    appId,
+    appSecret,
+    requestId,
+  }: {
+    appId?: string
+    appSecret?: string
+    requestId: string
+  }) {
+    this.auth = new LarkAuthService({
+      appId,
+      appSecret,
+      requestId,
+    })
+    this.drive = new LarkDriveService(this.auth.getAppAuth, requestId)
+    this.message = new LarkMessageService(this.auth.getAppAuth, requestId)
+    this.user = new LarkUserService(this.auth.getAppAuth, requestId)
+    this.sheet = new LarkSheetService(this.auth.getAppAuth, requestId)
+    this.chat = new LarkChatService(this.auth.getAppAuth, requestId)
     this.requestId = requestId
   }
-
-  child(getToken: () => Promise<string>, requestId?: string) {
-    return new LarkService(getToken, requestId || this.requestId)
-  }
 }
 
 export default LarkService
diff --git a/packages/net-tool/src/netTool/base.ts b/packages/net-tool/src/netTool/base.ts
index e2f49e0..85a8ccf 100644
--- a/packages/net-tool/src/netTool/base.ts
+++ b/packages/net-tool/src/netTool/base.ts
@@ -215,7 +215,7 @@ class NetToolBase {
         response: res,
         code: resData.code || res.status,
         message: resData.message || resData.msg || resText || res.statusText,
-        data: resData.data,
+        data: resData.data || resData,
       })
     }
     // http 错误码正常,但解析异常
@@ -232,6 +232,7 @@ class NetToolBase {
         response: res,
         code: resData.code,
         message: resData.message || resData.msg || "网络请求失败",
+        data: resData.data || resData,
       })
     }
     return resData as T