38 lines
900 B
JavaScript
38 lines
900 B
JavaScript
const fs = require("fs");
|
|
const path = require("path");
|
|
const crypto = require("crypto");
|
|
|
|
const DEFAULT_TTL_MS = 30 * 60 * 1000;
|
|
|
|
function ensureDir(dir) {
|
|
fs.mkdirSync(dir, { recursive: true });
|
|
}
|
|
|
|
function keyFor(value) {
|
|
return crypto.createHash("sha256").update(String(value || "")).digest("hex");
|
|
}
|
|
|
|
function readCache(cacheDir, key, ttlMs = DEFAULT_TTL_MS) {
|
|
try {
|
|
const file = path.join(cacheDir, `${keyFor(key)}.json`);
|
|
const stat = fs.statSync(file);
|
|
if (Date.now() - stat.mtimeMs > ttlMs) return null;
|
|
return JSON.parse(fs.readFileSync(file, "utf8"));
|
|
} catch (_) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function writeCache(cacheDir, key, value) {
|
|
try {
|
|
ensureDir(cacheDir);
|
|
const file = path.join(cacheDir, `${keyFor(key)}.json`);
|
|
fs.writeFileSync(file, JSON.stringify(value, null, 2), "utf8");
|
|
} catch (_) {}
|
|
}
|
|
|
|
module.exports = {
|
|
readCache,
|
|
writeCache,
|
|
};
|