import { DEFAULT_ACCOUNT_ID, type OpenClawConfig } from "openclaw/plugin-sdk";
import type { DingTalkConfig, ResolvedDingTalkAccount } from "./types.js";
import { PLUGIN_ID } from "./constants.js";
/**
* 规范化账户 ID(始终返回默认账户 ID)
*/
export function normalizeAccountId(_accountId?: string | null): string {
return DEFAULT_ACCOUNT_ID;
}
/**
* 列出所有钉钉账户 ID(单账户,只返回默认账户)
*/
export function listDingTalkAccountIds(cfg: OpenClawConfig): string[] {
const dingtalkConfig = cfg.channels?.[PLUGIN_ID] as DingTalkConfig | undefined;
if (!dingtalkConfig?.clientId) {
return [];
}
return [DEFAULT_ACCOUNT_ID];
}
/**
* 解析默认钉钉账户 ID
*/
export function resolveDefaultDingTalkAccountId(_cfg: OpenClawConfig): string {
return DEFAULT_ACCOUNT_ID;
}
/**
* 解析钉钉账户配置(单账户模式)
*/
export function resolveDingTalkAccount(params: {
cfg: OpenClawConfig;
accountId?: string;
}): ResolvedDingTalkAccount {
const { cfg } = params;
const dingtalkConfig = cfg.channels?.[PLUGIN_ID] as DingTalkConfig | undefined;
// 默认返回值
const defaultResult: ResolvedDingTalkAccount = {
accountId: DEFAULT_ACCOUNT_ID,
enabled: false,
clientId: "",
clientSecret: "",
tokenSource: "none",
allowFrom: ["*"],
groupPolicy: "open",
groupAllowFrom: [],
groups: {},
};
if (!dingtalkConfig) {
return defaultResult;
}
let clientId = "";
let clientSecret = "";
let tokenSource: ResolvedDingTalkAccount["tokenSource"] = "none";
if (dingtalkConfig.clientId?.trim()) {
clientId = dingtalkConfig.clientId.trim();
tokenSource = "config";
}
if (dingtalkConfig.clientSecret?.trim()) {
clientSecret = dingtalkConfig.clientSecret.trim();
}
return {
accountId: DEFAULT_ACCOUNT_ID,
name: dingtalkConfig.name,
enabled: dingtalkConfig.enabled ?? true,
clientId,
clientSecret,
tokenSource,
allowFrom: dingtalkConfig.allowFrom ?? ["*"],
groupPolicy: dingtalkConfig.groupPolicy ?? "open",
groupAllowFrom: dingtalkConfig.groupAllowFrom ?? [],
groups: dingtalkConfig.groups ?? {},
};
}