import type { RouteTarget, Env, NeutralMessage } from "../../types"; import type { PlatformDriver, SendResult } from "../types"; import { getTenantAccessToken, sendMessage, updateMessage } from "./rest"; import { renderNeutralMessage } from "./render"; export class FeishuDriver implements PlatformDriver { readonly id = "feishu"; async send(message: NeutralMessage, target: RouteTarget, env: Env): Promise { const chatId = target.chatId ?? ""; if (!chatId) { return { ok: false, error: "target.chatId is required", errorCode: "NO_TARGET" }; } const tokenRes = await getTenantAccessToken(env); if (!tokenRes.ok || !tokenRes.token) { return { ok: false, error: tokenRes.error ?? "No token", errorCode: tokenRes.errorCode ?? "NO_TOKEN" }; } return sendMessage(tokenRes.token, chatId, renderNeutralMessage(message)); } async edit( message: NeutralMessage, target: RouteTarget, env: Env, messageId: string, ): Promise { const chatId = target.chatId ?? ""; if (!chatId) { return { ok: false, error: "target.chatId is required", errorCode: "NO_TARGET" }; } const tokenRes = await getTenantAccessToken(env); if (!tokenRes.ok || !tokenRes.token) { return { ok: false, error: tokenRes.error ?? "No token", errorCode: tokenRes.errorCode ?? "NO_TOKEN" }; } return updateMessage(tokenRes.token, messageId, renderNeutralMessage(message)); } }