openskynet / src /infra /outbound /conversation-id.ts
Darochin's picture
Mirror OpenSkyNet workspace snapshot from Git HEAD
fc93158 verified
function normalizeConversationId(value: unknown): string | undefined {
if (typeof value !== "string") {
return undefined;
}
const trimmed = value.trim();
return trimmed || undefined;
}
export function resolveConversationIdFromTargets(params: {
threadId?: string | number;
targets: Array<string | undefined | null>;
}): string | undefined {
const threadId =
params.threadId != null ? normalizeConversationId(String(params.threadId)) : undefined;
if (threadId) {
return threadId;
}
for (const rawTarget of params.targets) {
const target = normalizeConversationId(rawTarget);
if (!target) {
continue;
}
if (target.startsWith("channel:")) {
const channelId = normalizeConversationId(target.slice("channel:".length));
if (channelId) {
return channelId;
}
continue;
}
const mentionMatch = target.match(/^<#(\d+)>$/);
if (mentionMatch?.[1]) {
return mentionMatch[1];
}
if (/^\d{6,}$/.test(target)) {
return target;
}
}
return undefined;
}