UNPKG

countty

Version:

✚ Easily persist your own autonomous Page View Counter for free (no VPS or database plans required).

28 lines (27 loc) 940 B
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(), }); };