import {
createAccountListHelpers,
normalizeAccountId,
resolveMergedAccountConfig,
type OpenClawConfig,
} from "openclaw/plugin-sdk/account-resolution" ;
import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime" ;
import type { SignalAccountConfig } from "./account-types.js" ;
export type ResolvedSignalAccount = {
accountId: string;
enabled: boolean ;
name?: string;
baseUrl: string;
configured: boolean ;
config: SignalAccountConfig;
};
const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("signal" );
export const listSignalAccountIds = listAccountIds;
export const resolveDefaultSignalAccountId = resolveDefaultAccountId;
function mergeSignalAccountConfig(cfg: OpenClawConfig, accountId: string): SignalAccountConfig {
return resolveMergedAccountConfig<SignalAccountConfig>({
channelConfig: cfg.channels?.signal as SignalAccountConfig | undefined,
accounts: cfg.channels?.signal?.accounts as
| Record<string, Partial<SignalAccountConfig>>
| undefined,
accountId,
});
}
export function resolveSignalAccount(params: {
cfg: OpenClawConfig;
accountId?: string | null ;
}): ResolvedSignalAccount {
const accountId = normalizeAccountId(
params.accountId ?? resolveDefaultSignalAccountId(params.cfg),
);
const baseEnabled = params.cfg.channels?.signal?.enabled !== false ;
const merged = mergeSignalAccountConfig(params.cfg, accountId);
const accountEnabled = merged.enabled !== false ;
const enabled = baseEnabled && accountEnabled;
const host = normalizeOptionalString(merged.httpHost) ?? "127.0.0.1" ;
const port = merged.httpPort ?? 8080 ;
const baseUrl = normalizeOptionalString(merged.httpUrl) ?? `http://${host}:${port}`;
const configured = Boolean (
normalizeOptionalString(merged.account) ||
normalizeOptionalString(merged.httpUrl) ||
normalizeOptionalString(merged.cliPath) ||
normalizeOptionalString(merged.httpHost) ||
typeof merged.httpPort === "number" ||
typeof merged.autoStart === "boolean" ,
);
return {
accountId,
enabled,
name: normalizeOptionalString(merged.name),
baseUrl,
configured,
config: merged,
};
}
export function listEnabledSignalAccounts(cfg: OpenClawConfig): ResolvedSignalAccount[] {
return listSignalAccountIds(cfg)
.map((accountId) => resolveSignalAccount({ cfg, accountId }))
.filter((account) => account.enabled);
}
Messung V0.5 in Prozent C=99 H=100 G=99
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland