sparkletown/sparkle

View on GitHub
scripts/get-visitors.ts

Summary

Maintainability
A
0 mins
Test Coverage
#!/usr/bin/env node -r esm -r ts-node/register

import fs from "fs";
import { resolve } from "path";

import admin from "firebase-admin";

import { initFirebaseAdminApp, makeScriptUsage } from "./lib/helpers";

const usage = makeScriptUsage({
  description: "Print attendees' emails, based on codes_used.",
  usageParams: "PROJECT_ID [CREDENTIAL_PATH]",
  exampleParams: "co-reality-map [theMatchingAccountServiceKey.json]",
});

const [projectId, credentialPath] = process.argv.slice(2);

// Note: no need to check credentialPath here as initFirebaseAdmin defaults it when undefined
if (!projectId) {
  usage();
}

const CODES_FILE_PATH = "codes.txt";
const codes = fs
  .readFileSync(CODES_FILE_PATH)
  .toString()
  .split("\n")
  .map((line) => line.toLowerCase());

initFirebaseAdminApp(projectId, {
  credentialPath: credentialPath
    ? resolve(__dirname, credentialPath)
    : undefined,
});

(async () => {
  const userprivateCollection = await admin
    .firestore()
    .collection("userprivate")
    .get();

  const codesUsed: string[] = [];

  userprivateCollection.forEach((doc) => {
    if (!doc.exists || !doc.data().codes_used) return;
    doc.data().codes_used.map((c) => codesUsed.push(c));
  });

  const emailsWhoLoggedIn = codes.filter((code) => codesUsed.includes(code));

  console.log(
    `Email addresses of users who logged in (total ${emailsWhoLoggedIn.length}):`
  );

  emailsWhoLoggedIn.sort().forEach((e) => console.log(e));

  process.exit(0);
})();