| 110 | } |
| 111 | |
| 112 | function extractXmlTag(xml: string, tag: string): string | null { |
| 113 | const openTag = `<${tag}>` |
| 114 | const closeTag = `</${tag}>` |
| 115 | const start = xml.indexOf(openTag) |
| 116 | if (start === -1) return null |
| 117 | const contentStart = start + openTag.length |
| 118 | const end = xml.indexOf(closeTag, contentStart) |
| 119 | if (end === -1) return null |
| 120 | const value = xml.slice(contentStart, end).trim() |
| 121 | return value.length > 0 ? value : null |
| 122 | } |
| 123 | |
| 124 | function applyBlacklistFilter<T extends PreprocessableMessage>(messages: T[], keywords: string[]): T[] { |
| 125 | if (keywords.length === 0) return messages |