(messages: AdMessage[])
| 47 | } |
| 48 | |
| 49 | function queryFromMessages(messages: AdMessage[]): string | null { |
| 50 | const lastUser = [...messages] |
| 51 | .reverse() |
| 52 | .find((m) => m.role === 'user' && m.content.trim()) |
| 53 | if (!lastUser) return null |
| 54 | |
| 55 | const query = extractLastUserMessageContent(lastUser.content) |
| 56 | .replace(/\s+/g, ' ') |
| 57 | .trim() |
| 58 | if (!query) return null |
| 59 | |
| 60 | return query.length > MAX_QUERY_LENGTH |
| 61 | ? query.slice(0, MAX_QUERY_LENGTH).trim() |
| 62 | : query |
| 63 | } |
| 64 | |
| 65 | function normalize(raw: ZeroClickOffer, servedId: string): NormalizedAd | null { |
| 66 | if (!raw.id || !raw.clickUrl) return null |
no test coverage detected