UNPKG

serverless-spy

Version:

CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.

54 lines (53 loc) 1.54 kB
import LRUCache from "mnemonist/lru-cache"; export class EndpointCache { constructor(capacity) { this.cache = new LRUCache(capacity); } getEndpoint(key) { const endpointsWithExpiry = this.get(key); if (!endpointsWithExpiry || endpointsWithExpiry.length === 0) { return undefined; } const endpoints = endpointsWithExpiry.map((endpoint) => endpoint.Address); return endpoints[Math.floor(Math.random() * endpoints.length)]; } get(key) { if (!this.has(key)) { return; } const value = this.cache.get(key); if (!value) { return; } const now = Date.now(); const endpointsWithExpiry = value.filter((endpoint) => now < endpoint.Expires); if (endpointsWithExpiry.length === 0) { this.delete(key); return undefined; } return endpointsWithExpiry; } set(key, endpoints) { const now = Date.now(); this.cache.set(key, endpoints.map(({ Address, CachePeriodInMinutes }) => ({ Address, Expires: now + CachePeriodInMinutes * 60 * 1000, }))); } delete(key) { this.cache.set(key, []); } has(key) { if (!this.cache.has(key)) { return false; } const endpoints = this.cache.peek(key); if (!endpoints) { return false; } return endpoints.length > 0; } clear() { this.cache.clear(); } }