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);
}
