in src/app/functions/server/getUserBreaches.ts [34:85]
export async function getUserBreaches({
user,
}: {
user: Session["user"];
}): Promise<UserBreaches> {
if (!user.subscriber?.fxa_uid) {
throw new Error("No fxa_uid found in session");
}
const subscriber = await getSubscriberByFxaUid(user.subscriber.fxa_uid);
const allBreaches = await getBreaches();
const breachesData = await getAllEmailsAndBreaches(subscriber, allBreaches);
const ssnBreaches: HibpLikeDbBreach[] = [];
const passwordBreaches: HibpLikeDbBreach[] = [];
const phoneBreaches: HibpLikeDbBreach[] = [];
for (const { breaches } of breachesData.verifiedEmails) {
breaches.forEach((b) => {
if (b.DataClasses.includes(BreachDataTypes.SSN)) {
ssnBreaches.push(b);
}
if (b.DataClasses.includes(BreachDataTypes.Passwords)) {
passwordBreaches.push(b);
}
if (b.DataClasses.includes(BreachDataTypes.Phone)) {
phoneBreaches.push(b);
}
});
}
const emailVerifiedCount = breachesData.verifiedEmails?.length ?? 0;
const emailTotalCount =
emailVerifiedCount + (breachesData.unverifiedEmails?.length ?? 0);
const nextCookies = await cookies();
const emailSelectedCookie = nextCookies.get("monitor.selected-email-index");
const emailSelectIndex =
typeof emailSelectedCookie !== "undefined"
? Number.parseInt(emailSelectedCookie.value, 10)
: 0;
return {
breachesData,
emailVerifiedCount,
emailTotalCount,
emailSelectIndex,
ssnBreaches,
passwordBreaches,
phoneBreaches,
};
}