countty
Version:
✚ Easily persist your own autonomous Page View Counter for free (no VPS or database plans required).
28 lines (27 loc) • 940 B
JavaScript
import { createLRU } from 'lru.min';
import { getRateLimitKey } from './rate-limit.js';
export const cache = {
rateLimit: createLRU({ max: 1000 }),
route: createLRU({ max: 1000 }),
};
const getRouteCacheKey = async (request) => {
const ip = await getRateLimitKey(request);
const url = new URL(request.url);
const searchParams = new URLSearchParams(url.search);
return `${ip}${url.pathname}?${String(searchParams)}`;
};
export const getRouteCache = async (request, ttl = 1000) => {
const now = Date.now();
const key = await getRouteCacheKey(request);
const cached = cache.route.get(key);
if (!cached || now - cached.timestamp >= ttl)
return { hit: false };
return { hit: true, data: cached.data };
};
export const setRouteCache = async (request, data) => {
const key = await getRouteCacheKey(request);
cache.route.set(key, {
data,
timestamp: Date.now(),
});
};