Spaces:
Paused
Paused
| export function normalizeMattermostMessagingTarget(raw: string): string | undefined { | |
| const trimmed = raw.trim(); | |
| if (!trimmed) { | |
| return undefined; | |
| } | |
| const lower = trimmed.toLowerCase(); | |
| if (lower.startsWith("channel:")) { | |
| const id = trimmed.slice("channel:".length).trim(); | |
| return id ? `channel:${id}` : undefined; | |
| } | |
| if (lower.startsWith("group:")) { | |
| const id = trimmed.slice("group:".length).trim(); | |
| return id ? `channel:${id}` : undefined; | |
| } | |
| if (lower.startsWith("user:")) { | |
| const id = trimmed.slice("user:".length).trim(); | |
| return id ? `user:${id}` : undefined; | |
| } | |
| if (lower.startsWith("mattermost:")) { | |
| const id = trimmed.slice("mattermost:".length).trim(); | |
| return id ? `user:${id}` : undefined; | |
| } | |
| if (trimmed.startsWith("@")) { | |
| const id = trimmed.slice(1).trim(); | |
| return id ? `@${id}` : undefined; | |
| } | |
| if (trimmed.startsWith("#")) { | |
| const id = trimmed.slice(1).trim(); | |
| return id ? `channel:${id}` : undefined; | |
| } | |
| return `channel:${trimmed}`; | |
| } | |
| export function looksLikeMattermostTargetId(raw: string): boolean { | |
| const trimmed = raw.trim(); | |
| if (!trimmed) { | |
| return false; | |
| } | |
| if (/^(user|channel|group|mattermost):/i.test(trimmed)) { | |
| return true; | |
| } | |
| if (/^[@#]/.test(trimmed)) { | |
| return true; | |
| } | |
| return /^[a-z0-9]{8,}$/i.test(trimmed); | |
| } | |