import {
createAccountListHelpers,
normalizeAccountId,
resolveMergedAccountConfig,
type OpenClawConfig,
} from "openclaw/plugin-sdk/account-resolution" ;
import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime" ;
import type { IMessageAccountConfig } from "./account-types.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 ?? resolveDefaultIMessageAccountId(params.cfg),
);
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: normalizeOptionalString(merged.name),
config: merged,
configured,
};
}
export function listEnabledIMessageAccounts(cfg: OpenClawConfig): ResolvedIMessageAccount[] {
return listIMessageAccountIds(cfg)
.map((accountId) => resolveIMessageAccount({ cfg, accountId }))
.filter((account) => account.enabled);
}
Messung V0.5 in Prozent C=100 H=96 G=97
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland