Files
openclaw/src/channels/sender-label.ts
2026-02-22 14:08:51 +00:00

60 lines
1.4 KiB
TypeScript

export type SenderLabelParams = {
name?: string;
username?: string;
tag?: string;
e164?: string;
id?: string;
};
function normalize(value?: string): string | undefined {
const trimmed = value?.trim();
return trimmed ? trimmed : undefined;
}
function normalizeSenderLabelParams(params: SenderLabelParams) {
return {
name: normalize(params.name),
username: normalize(params.username),
tag: normalize(params.tag),
e164: normalize(params.e164),
id: normalize(params.id),
};
}
export function resolveSenderLabel(params: SenderLabelParams): string | null {
const { name, username, tag, e164, id } = normalizeSenderLabelParams(params);
const display = name ?? username ?? tag ?? "";
const idPart = e164 ?? id ?? "";
if (display && idPart && display !== idPart) {
return `${display} (${idPart})`;
}
return display || idPart || null;
}
export function listSenderLabelCandidates(params: SenderLabelParams): string[] {
const candidates = new Set<string>();
const { name, username, tag, e164, id } = normalizeSenderLabelParams(params);
if (name) {
candidates.add(name);
}
if (username) {
candidates.add(username);
}
if (tag) {
candidates.add(tag);
}
if (e164) {
candidates.add(e164);
}
if (id) {
candidates.add(id);
}
const resolved = resolveSenderLabel(params);
if (resolved) {
candidates.add(resolved);
}
return Array.from(candidates);
}