Files
personal-code-finder/index.ts
2026-02-01 15:02:15 +02:00

76 lines
2.2 KiB
TypeScript

import fs from "node:fs";
const base = "3961023";
const FILE_NAME = `output_${base}.json`;
const sleep = (timeout: number) => new Promise((res, rej) => {
setTimeout(() => {
res("ok");
}, timeout);
});
(async () => {
const { default: Isikukood } = require("./isikukood.js");
const MAX = 10000;
let valid = [];
for (let i = 0; i <= MAX; i += 1) {
const current = i.toString().padStart(4, "0");
const full = base + current;
const isValid = new Isikukood(full).validate();
if (!isValid) {
continue;
}
valid.push(full);
}
const existingList: [string, string][] = [];
try {
const existingData = fs.readFileSync(FILE_NAME);
const existingDataMapped = JSON.parse(existingData.toString()) as [string, string][];
existingDataMapped.forEach((data) => existingList.push(data))
} catch {}
const responses = existingList;
const writeToFile = () => {
fs.writeFileSync(FILE_NAME, JSON.stringify(responses, undefined, 2));
};
const sleepBetweenSuccesses = async () => {
console.debug("Got success response, sleeping...");
await sleep(2_500);
};
const sleepBetweenErrors = async () => {
console.debug("Got ratelimited, sleeping...");
await sleep(7_500);
};
for (let validEntry of valid) {
if (existingList.find(([idCode]) => idCode === validEntry)) {
console.debug("Skipping, already fetched data for idCode=" + validEntry);
continue;
}
console.debug("Fetching data for idCode=" + validEntry);
const response = await fetch("https://isikukood.ee/" + validEntry);
const responseText = await response.text();
if (responseText.includes("No scanning allowed, try again later.")) {
await sleepBetweenErrors();
} else {
if (responseText.startsWith("N/A")) {
console.debug("No person exists with idCode=" + validEntry);
responses.push([validEntry, "INVALID"] as [string, string]);
} else {
responses.push([
validEntry,
responseText.substring(0, responseText.indexOf("\n\n"))
] as [string, string]);
}
writeToFile();
await sleepBetweenSuccesses();
}
}
console.debug("Writing results to file");
})();