Middleware
Middleware
Section titled “Middleware”Middleware wraps a store and returns another store that implements the same interface. This lets you add behavior like encryption or metrics without changing cache call sites.
Encryption middleware
Section titled “Encryption middleware”createEncryptedStore() encrypts values before they are written and decrypts them on reads.
import { createCache, createEncryptedStore, createTTLStore, Time,} from '@alexmchan/memocache'
const ttlStore = createTTLStore({ defaultTTL: 60 * Time.Second })
const encryptedStore = createEncryptedStore({ key: 'this is secret sauce', salt: 'this is salty', store: ttlStore,})
export const cache = createCache({ stores: [encryptedStore],})Notes:
keymust be at least 8 characters- changing
keyorsaltchanges the derived storage key and effectively invalidates old entries - encryption uses the Web Crypto API, so runtime support matters
Metrics middleware
Section titled “Metrics middleware”createMetricsStore() logs read, write, delete, and miss timings for a store.
import { createMetricsStore, createTTLStore, Time,} from '@alexmchan/memocache'
const ttlStore = createTTLStore({ defaultTTL: 60 * Time.Second })
const metricsStore = createMetricsStore({ store: ttlStore,})The emitted metrics include:
cache.readcache.misscache.writecache.delete
Each metric includes the key, store name, and measured latency.
Composition
Section titled “Composition”Because middleware returns a store, you can layer it:
const store = createMetricsStore({ store: createEncryptedStore({ key: process.env.CACHE_KEY!, salt: process.env.CACHE_SALT!, store: createTTLStore({ defaultTTL: 5 * Time.Minute }), }),})