import promiseLimit from "promise-limit"; import { toArray, unique } from "../../../prelude/array.js"; import { isMention } from "../type.js"; import Resolver from "../resolver.js"; import { resolvePerson } from "./person.js"; import { RecursionLimiter } from "../../../models/repositories/user-profile.js"; export async function extractApMentions(tags, limiter = new RecursionLimiter()) { const hrefs = unique(extractApMentionObjects(tags).map((x)=>x.href)); const resolver = new Resolver(); const limit = promiseLimit(2); const mentionedUsers = (await Promise.all(hrefs.map((x)=>limit(()=>resolvePerson(x, resolver, limiter).catch(()=>null))))).filter((x)=>x != null); return mentionedUsers; } export function extractApMentionObjects(tags) { if (tags == null) return []; return toArray(tags).filter(isMention); }