export function normalizeNextcloudTalkMessagingTarget(raw: string): string | undefined { const trimmed = raw.trim(); if (!trimmed) return undefined; let normalized = trimmed; if (normalized.startsWith("nextcloud-talk:")) { normalized = normalized.slice("nextcloud-talk:".length).trim(); } else if (normalized.startsWith("nc-talk:")) { normalized = normalized.slice("nc-talk:".length).trim(); } else if (normalized.startsWith("nc:")) { normalized = normalized.slice("nc:".length).trim(); } if (normalized.startsWith("room:")) { normalized = normalized.slice("room:".length).trim(); } if (!normalized) return undefined; return `nextcloud-talk:${normalized}`.toLowerCase(); } export function looksLikeNextcloudTalkTargetId(raw: string): boolean { const trimmed = raw.trim(); if (!trimmed) return false; if (/^(nextcloud-talk|nc-talk|nc):/i.test(trimmed)) return true; return /^[a-z0-9]{8,}$/i.test(trimmed); }