/** * Account resolution: reads config from channels.synology-chat, * merges per-account overrides, falls back to environment variables.
*/
import {
DEFAULT_ACCOUNT_ID,
listCombinedAccountIds,
resolveMergedAccountConfig,
type OpenClawConfig,
} from "openclaw/plugin-sdk/account-resolution"; import { resolveDangerousNameMatchingEnabled } from "openclaw/plugin-sdk/dangerous-name-runtime"; import type {
SynologyChatChannelConfig,
ResolvedSynologyChatAccount,
SynologyWebhookPathSource,
} from "./types.js";
/** Extract the channel config from the full OpenClaw config object. */ function getChannelConfig(cfg: OpenClawConfig): SynologyChatChannelConfig | undefined { return cfg?.channels?.["synology-chat"] as SynologyChatChannelConfig | undefined;
}
function resolveWebhookPathSource(params: {
accountId: string;
channelCfg: SynologyChatChannelConfig;
rawAccount: SynologyChatChannelConfig;
}): SynologyWebhookPathSource { if (hasExplicitWebhookPath(params.rawAccount)) { return"explicit";
} if (params.accountId !== DEFAULT_ACCOUNT_ID && hasExplicitWebhookPath(params.channelCfg)) { return"inherited-base";
} return"default";
}
/** Parse allowedUserIds from string or array to string[]. */ function parseAllowedUserIds(raw: string | string[] | undefined): string[] { if (!raw) { return [];
} if (Array.isArray(raw)) { return raw.filter(Boolean);
} return raw
.split(",")
.map((s) => s.trim())
.filter(Boolean);
}
function parseRateLimitPerMinute(raw: string | undefined): number { if (raw == null) { return30;
} const trimmed = raw.trim(); if (!/^-?\d+$/.test(trimmed)) { return30;
} return Number.parseInt(trimmed, 10);
}
/** * List all configured account IDs for this channel. * Returns ["default"] if there's a base config, plus any named accounts.
*/
export function listAccountIds(cfg: OpenClawConfig): string[] { const channelCfg = getChannelConfig(cfg); if (!channelCfg) { return [];
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.