Files
openclaw/src/channels/allow-from.ts
Peter Steinberger bd1d1f0f2b fix: align open DM allowlist policy (#74112)
* fix: harden telegram open dm allowlist merging

* fix: align open dm allowlist policy
2026-04-29 06:52:12 +01:00

57 lines
1.5 KiB
TypeScript

import { normalizeStringEntries } from "../shared/string-normalization.js";
export function mergeDmAllowFromSources(params: {
allowFrom?: Array<string | number>;
storeAllowFrom?: Array<string | number>;
dmPolicy?: string;
}): string[] {
const storeEntries =
params.dmPolicy === "allowlist" || params.dmPolicy === "open"
? []
: (params.storeAllowFrom ?? []);
return normalizeStringEntries([...(params.allowFrom ?? []), ...storeEntries]);
}
export function resolveGroupAllowFromSources(params: {
allowFrom?: Array<string | number>;
groupAllowFrom?: Array<string | number>;
fallbackToAllowFrom?: boolean;
}): string[] {
const explicitGroupAllowFrom =
Array.isArray(params.groupAllowFrom) && params.groupAllowFrom.length > 0
? params.groupAllowFrom
: undefined;
const scoped = explicitGroupAllowFrom
? explicitGroupAllowFrom
: params.fallbackToAllowFrom === false
? []
: (params.allowFrom ?? []);
return normalizeStringEntries(scoped);
}
export function firstDefined<T>(...values: Array<T | undefined>) {
for (const value of values) {
if (value !== undefined) {
return value;
}
}
return undefined;
}
export function isSenderIdAllowed(
allow: { entries: string[]; hasWildcard: boolean; hasEntries: boolean },
senderId: string | undefined,
allowWhenEmpty: boolean,
): boolean {
if (!allow.hasEntries) {
return allowWhenEmpty;
}
if (allow.hasWildcard) {
return true;
}
if (!senderId) {
return false;
}
return allow.entries.includes(senderId);
}