// Age from IMVU itself: an IMVU account that IMVU has age verified, or that has Access Pass, counts as adult. Read // from IMVU's public API; IMVU can change it (verification revoked, Access Pass lapsed), so it's checked again // about daily. import type { ImvuClient } from "../imvu"; import type { AgeResult, Provider, Subject } from "./index"; const recheckAfter = 24 * 60 * 60 * 1000; export function imvuAgeProvider(imvu: ImvuClient): Provider { const check = async (subject: Subject): Promise => { if (subject.imvuId === undefined) throw new Error("IMVU checks an IMVU account"); const u = await imvu.byId(subject.imvuId); return { overEighteen: u.ageVerified || u.accessPass, method: u.ageVerified ? "imvu_age_verified" : u.accessPass ? "imvu_access_pass" : "imvu_none", expiresAt: new Date(Date.now() + recheckAfter), }; }; return { id: "imvu", label: "IMVU's age verification or Access Pass", vendor: "IMVU", scope: "imvu_account", start: async (subject) => ({ kind: "done", result: await check(subject) }), recheck: check, }; } /** The IMVU result from a lookup already made (when linking). */ export function imvuResult(u: { ageVerified: boolean; accessPass: boolean }): AgeResult { return { overEighteen: u.ageVerified || u.accessPass, method: u.ageVerified ? "imvu_age_verified" : u.accessPass ? "imvu_access_pass" : "imvu_none", expiresAt: new Date(Date.now() + recheckAfter), }; }