feat(shared): extractUrls helper for multi-embed message parsing (P666)

Export extractUrls up to N unique http(s) URLs; extractFirstUrl delegates
to first entry for backward-compatible unfurl policy.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-06-02 20:01:39 -04:00
co-authored by Cursor
parent 6ee72bedc8
commit ac0c056ace
2 changed files with 22 additions and 2 deletions
+20 -2
View File
@@ -63,8 +63,25 @@ function extractMentionNames (content) {
}
function extractFirstUrl (content) {
const m = String(content ?? '').match(URL_RE)
return m ? m[0] : null
const urls = extractUrls(content, 1)
return urls[0] || null
}
/** Up to `maxCount` unique http(s) URLs in message order (Phase 666). */
function extractUrls (content, maxCount = 3) {
const cap = Math.max(1, Math.min(Number(maxCount) || 3, 10))
const seen = new Set()
const out = []
const re = new RegExp(URL_RE.source, URL_RE.flags)
let m
while ((m = re.exec(String(content ?? ''))) && out.length < cap) {
const url = m[0]
if (!seen.has(url)) {
seen.add(url)
out.push(url)
}
}
return out
}
/** Local link card metadata (no network fetch — P2P-safe). */
@@ -120,6 +137,7 @@ module.exports = {
formatMessageContent,
extractMentionNames,
extractFirstUrl,
extractUrls,
linkPreviewMeta,
buildLinkPreviewHtml,
buildRichEmbedHtml,
+2
View File
@@ -642,6 +642,7 @@ const {
formatMessageContent,
extractMentionNames,
extractFirstUrl,
extractUrls,
linkPreviewMeta,
buildLinkPreviewHtml,
buildRichEmbedHtml,
@@ -734,6 +735,7 @@ module.exports = {
formatMessageContent,
extractMentionNames,
extractFirstUrl,
extractUrls,
linkPreviewMeta,
buildLinkPreviewHtml,
buildRichEmbedHtml,