in src/utils/breaches.ts [38:100]
async function getAllEmailsAndBreaches(
user: userType,
allBreaches: HibpLikeDbBreach[],
): Promise<AllEmailsAndBreaches> {
const verifiedEmails: BundledVerifiedEmails[] = [];
const unverifiedEmails: EmailAddressRow[] = [];
if (!user) {
const errMsg = "getAllEmailsAndBreaches: subscriber cannot be undefined";
console.error(errMsg);
captureMessage(errMsg);
return { verifiedEmails, unverifiedEmails };
}
if (!allBreaches || allBreaches.length === 0) {
const errMsg =
"getAllEmailsAndBreaches: allBreaches object cannot be empty";
console.error(errMsg);
captureMessage(errMsg);
return { verifiedEmails, unverifiedEmails };
}
const monitoredEmails = await getUserEmails(user.id);
verifiedEmails.push(
await bundleVerifiedEmails({
user,
email: user.primary_email,
recordId: user.id,
recordVerified: user.primary_verified,
allBreaches,
}),
);
for (const email of monitoredEmails) {
if (email.verified) {
verifiedEmails.push(
await bundleVerifiedEmails({
user,
email: email.email,
recordId: email.id,
recordVerified: email.verified,
allBreaches,
}),
);
} else {
unverifiedEmails.push(email);
}
}
// get new breaches since last shown
for (const emailEntry of verifiedEmails) {
const newBreachesForEmail = emailEntry.breaches.filter(
(breach) => breach.AddedDate >= user.breaches_last_shown,
);
for (const newBreachForEmail of newBreachesForEmail) {
newBreachForEmail.NewBreach = true; // add "NewBreach" property to the new breach.
emailEntry.hasNewBreaches = newBreachesForEmail.length; // add the number of new breaches to the email
}
}
return { verifiedEmails, unverifiedEmails };
}