UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

92 lines (91 loc) 4.07 kB
import { l as normalizeOptionalString } from "./string-coerce-CIXf7egm.js"; import { y as uniqueStrings } from "./string-normalization-DsCfAx8q.js"; import { t as createSubsystemLogger } from "./subsystem-Dy2tqXOS.js"; import { t as createDedupeCache } from "./dedupe-gst1CUro.js"; import { a as parseAccessGroupAllowFromEntry, i as mergeDmAllowFromSources, r as isSenderIdAllowed } from "./allow-from-PKDuk4I7.js"; import "./runtime-env-0Q-gCyUb.js"; import "./string-coerce-runtime-GQa0ehRA.js"; import { t as expandAllowFromWithAccessGroups } from "./access-groups-BuF75RtE.js"; import "./dedupe-runtime-DxcmJhX3.js"; import "./security-runtime-Ckf0kc0h.js"; import "./allow-from-BPE6WaOO.js"; //#region extensions/telegram/src/bot-access.ts const warnedInvalidEntries = createDedupeCache({ ttlMs: 0, maxSize: 256 }); const log = createSubsystemLogger("telegram/bot-access"); function warnInvalidAllowFromEntries(entries) { if (process.env.VITEST || false) return; for (const entry of entries) { if (warnedInvalidEntries.check(entry)) continue; log.warn([ "Invalid allowFrom entry:", JSON.stringify(entry), "- allowFrom/groupAllowFrom authorization expects numeric Telegram sender user IDs only.", "To allow a Telegram group or supergroup, add its negative chat ID under \"channels.telegram.groups\" instead.", "If you had \"@username\" entries, re-run setup (it resolves @username to IDs) or replace them manually." ].join(" ")); } } const normalizeAllowFrom = (list) => { const entries = (list ?? []).map((value) => normalizeOptionalString(String(value)) ?? "").filter(Boolean); const hasWildcard = entries.includes("*"); const normalized = entries.filter((value) => value !== "*").map((value) => value.replace(/^(telegram|tg):/i, "")); const invalidEntries = normalized.filter((value) => !/^\d+$/.test(value)); if (invalidEntries.length > 0) warnInvalidAllowFromEntries(uniqueStrings(invalidEntries)); return { entries: normalized.filter((value) => /^\d+$/.test(value)), hasWildcard, hasEntries: entries.length > 0, invalidEntries }; }; const normalizeDmAllowFromWithStore = (params) => normalizeAllowFrom(mergeDmAllowFromSources(params)); function resolveTelegramEffectiveDmPolicy(params) { if (!params.isGroup && params.groupConfig && "dmPolicy" in params.groupConfig) return params.groupConfig.dmPolicy ?? params.dmPolicy ?? "pairing"; return params.dmPolicy ?? "pairing"; } const isSenderAllowed = (params) => { const { allow, senderId } = params; return isSenderIdAllowed(allow, senderId, true); }; //#endregion //#region extensions/telegram/src/access-groups.ts async function expandTelegramAllowFromWithAccessGroups(params) { const allowFrom = (params.allowFrom ?? []).map(String); const senderId = params.senderId?.trim() ?? ""; const expanded = params.cfg && senderId ? await expandAllowFromWithAccessGroups({ cfg: params.cfg, allowFrom, channel: "telegram", accountId: params.accountId ?? "default", senderId, isSenderAllowed: (candidateSenderId, allowEntries) => isSenderAllowed({ allow: normalizeAllowFrom(allowEntries), senderId: candidateSenderId }) }) : allowFrom; const originalEntries = new Set(allowFrom); return expanded.some((entry) => !originalEntries.has(entry)) ? expanded.filter((entry) => parseAccessGroupAllowFromEntry(entry) == null) : expanded; } async function resolveTelegramDmAllow(params) { const allowFrom = params.groupAllowOverride ?? params.allowFrom; const expandedAllowFrom = await expandTelegramAllowFromWithAccessGroups({ cfg: params.cfg, allowFrom, accountId: params.accountId, senderId: params.senderId }); return { allowFrom, expandedAllowFrom, effectiveAllow: normalizeDmAllowFromWithStore({ allowFrom: expandedAllowFrom, storeAllowFrom: params.storeAllowFrom, dmPolicy: params.dmPolicy }) }; } //#endregion export { normalizeDmAllowFromWithStore as a, normalizeAllowFrom as i, resolveTelegramDmAllow as n, resolveTelegramEffectiveDmPolicy as o, isSenderAllowed as r, expandTelegramAllowFromWithAccessGroups as t };