🏡 index : github.com/captn3m0/which-electron.git

const DB = require("electron-fingerprints");
const fs = require("fs");
const hasha = require("hasha");
const allVersions = require("./versions")["all"];

function checksumFile(algorithm, path) {
  return new Promise(function(resolve, reject) {
    let fs = require("fs");
    let crypto = require("crypto");

    let hash = crypto.createHash(algorithm).setEncoding("hex");
    fs.createReadStream(path)
      .once("error", reject)
      .pipe(hash)
      .once("finish", function() {
        resolve(hash.read());
      });
  });
}

module.exports = {
  guessFromHashes: function(os, arch, hashList) {
    let lookupTable = DB[`${os}-${arch}`];
    let allPossibleHashes = Object.keys(lookupTable);
    const intersectingHashes = allPossibleHashes.filter((value) =>
      hashList.includes(value)
    );
    // Set it to the starting list of versions.
    let possibleVersions = allVersions;
    for (i in hashList) {
      let hash = hashList[i];
      let versions = lookupTable[hash];
      if (versions) {
        possibleVersions = possibleVersions.filter((value) =>
          versions.includes(value)
        );
      }
    }

    if (possibleVersions == allVersions) {
      return [];
    } else {
      return possibleVersions;
    }
  },

  getHashes: function(dir) {
    let list = fs.readdirSync(dir);
    return list.map((f) => {
      let fn = `${dir}/${f}`;
      return hasha.fromFileSync(fn, { algorithm: "sha1" });
    });
  },
};