mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-07 15:21:06 +00:00
69 lines
2.4 KiB
TypeScript
69 lines
2.4 KiB
TypeScript
import {
|
|
createAccountListHelpers,
|
|
normalizeAccountId,
|
|
resolveMergedAccountConfig,
|
|
type OpenClawConfig,
|
|
} from "openclaw/plugin-sdk/account-resolution";
|
|
import type { IMessageAccountConfig } from "../runtime-api.js";
|
|
|
|
export type ResolvedIMessageAccount = {
|
|
accountId: string;
|
|
enabled: boolean;
|
|
name?: string;
|
|
config: IMessageAccountConfig;
|
|
configured: boolean;
|
|
};
|
|
|
|
const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("imessage");
|
|
export const listIMessageAccountIds = listAccountIds;
|
|
export const resolveDefaultIMessageAccountId = resolveDefaultAccountId;
|
|
|
|
function mergeIMessageAccountConfig(cfg: OpenClawConfig, accountId: string): IMessageAccountConfig {
|
|
return resolveMergedAccountConfig<IMessageAccountConfig>({
|
|
channelConfig: cfg.channels?.imessage as IMessageAccountConfig | undefined,
|
|
accounts: cfg.channels?.imessage?.accounts as
|
|
| Record<string, Partial<IMessageAccountConfig>>
|
|
| undefined,
|
|
accountId,
|
|
});
|
|
}
|
|
|
|
export function resolveIMessageAccount(params: {
|
|
cfg: OpenClawConfig;
|
|
accountId?: string | null;
|
|
}): ResolvedIMessageAccount {
|
|
const accountId = normalizeAccountId(params.accountId);
|
|
const baseEnabled = params.cfg.channels?.imessage?.enabled !== false;
|
|
const merged = mergeIMessageAccountConfig(params.cfg, accountId);
|
|
const accountEnabled = merged.enabled !== false;
|
|
const configured = Boolean(
|
|
merged.cliPath?.trim() ||
|
|
merged.dbPath?.trim() ||
|
|
merged.service ||
|
|
merged.region?.trim() ||
|
|
(merged.allowFrom && merged.allowFrom.length > 0) ||
|
|
(merged.groupAllowFrom && merged.groupAllowFrom.length > 0) ||
|
|
merged.dmPolicy ||
|
|
merged.groupPolicy ||
|
|
typeof merged.includeAttachments === "boolean" ||
|
|
(merged.attachmentRoots && merged.attachmentRoots.length > 0) ||
|
|
(merged.remoteAttachmentRoots && merged.remoteAttachmentRoots.length > 0) ||
|
|
typeof merged.mediaMaxMb === "number" ||
|
|
typeof merged.textChunkLimit === "number" ||
|
|
(merged.groups && Object.keys(merged.groups).length > 0),
|
|
);
|
|
return {
|
|
accountId,
|
|
enabled: baseEnabled && accountEnabled,
|
|
name: merged.name?.trim() || undefined,
|
|
config: merged,
|
|
configured,
|
|
};
|
|
}
|
|
|
|
export function listEnabledIMessageAccounts(cfg: OpenClawConfig): ResolvedIMessageAccount[] {
|
|
return listIMessageAccountIds(cfg)
|
|
.map((accountId) => resolveIMessageAccount({ cfg, accountId }))
|
|
.filter((account) => account.enabled);
|
|
}
|