import { createScopedDmSecurityResolver } from "openclaw/plugin-sdk/channel-config-helpers"; import type { ChannelPlugin } from "openclaw/plugin-sdk/channel-core"; import { createAllowlistProviderRouteAllowlistWarningCollector } from "openclaw/plugin-sdk/channel-policy"; import type { ResolvedTelegramAccount } from "./accounts.js"; import { collectTelegramSecurityAuditFindings } from "./security-audit.js"; const resolveTelegramDmPolicy = createScopedDmSecurityResolver({ channelKey: "telegram", resolvePolicy: (account) => account.config.dmPolicy, resolveAllowFrom: (account) => account.config.allowFrom, policyPathSuffix: "dmPolicy", normalizeEntry: (raw) => raw.replace(/^(telegram|tg):/i, ""), }); const collectTelegramSecurityWarnings = createAllowlistProviderRouteAllowlistWarningCollector({ providerConfigPresent: (cfg) => cfg.channels?.telegram !== undefined, resolveGroupPolicy: (account) => account.config.groupPolicy, resolveRouteAllowlistConfigured: (account) => Boolean(account.config.groups) && Object.keys(account.config.groups ?? {}).length > 0, restrictSenders: { surface: "Telegram groups", openScope: "any member in allowed groups", groupPolicyPath: "channels.telegram.groupPolicy", groupAllowFromPath: "channels.telegram.groupAllowFrom", }, noRouteAllowlist: { surface: "Telegram groups", routeAllowlistPath: "channels.telegram.groups", routeScope: "group", groupPolicyPath: "channels.telegram.groupPolicy", groupAllowFromPath: "channels.telegram.groupAllowFrom", }, }); export const telegramSecurityAdapter = { resolveDmPolicy: resolveTelegramDmPolicy, collectWarnings: collectTelegramSecurityWarnings, collectAuditFindings: collectTelegramSecurityAuditFindings, } satisfies NonNullable["security"]>;