Returning rate limit headers
How to map rate limit outcomes to standard X-RateLimit-* headers.
const out = await uk.verifyKey({ key, identifier: req.ip, namespace: 'api' });
if (out.error) return res.status(500).json(out.error);
const r = out.result!;
// Optionally query current window for headers when using a fixed window default
// Example uses your store's `check(...)` to read remaining/reset without increment
const now = Date.now();
const limit = 100; // keep in sync with your plugin default
const info = await uk.rateLimitStore.check('api', req.ip, limit, 60_000);
res.setHeader('X-RateLimit-Limit', String(limit));
res.setHeader('X-RateLimit-Remaining', String(Math.max(0, info.remaining)));
res.setHeader('X-RateLimit-Reset', String(Math.ceil(info.reset / 1000)));
if (!r.valid) return res.status(r.reason === 'rate_limited' ? 429 : 401).json(r);
return res.json(r);