export async function getUserBreaches()

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