Neurological Phenomenon Multiplexer
Miss any of our Open RFC calls?Watch the recordings here! »

@lafferty-lounge/route-cache

0.0.4 • Public • Published

The router-cache module

The router cache module takes an list of domains, each with a list of urls. The domains and urls are defined using regex.

When calling getRoute on a route cache instance the domain will be tested against all of the hosts in the hosts array that is passed in. If it matches a host regex then the routes in that host will be tested for a match in order until one is found. When a host/route match is found then the destination will be returned and the result will be cached.

Since it's not feasible to cache every single request the domain/url combinations have a weighted priority. Requests with the lowest entries will not be cleared from the cache. The weight is based on total number of requests and requests per minute.

Updating the routes will clear the cache for obvious reasons so if you're looking for super high performance then this may not be the best application to use if you're going to be updating routes very frequently.

let routes = {
  hosts: [
    {
      host: '.*',
      routes: [
        {
          path: '/.well_known',
          certificate: 'laffertylounge.com'
        }
      ]
    },
    {
      host: '^laffertylounge\\.com',
      routes: [
        {
          path: '/hello/there',
          certificate: 'laffertylounge.com'
        }
      ]
    }
  ]
};
let cache = new Cache();
cache.updateRoutes(routes);
expect(cache.getRoute('test.com', '/abc/def')).toBe(null);
expect(cache.getRoute('test.com', '/.well_known')).toBe('letsencrypt');
expect(cache.getRoute('laffertylounge.com', '/abc/def')).toBe(null);
expect(cache.getRoute('laffertylounge.com', '/hello/there')).toBe(
  'laffertylounge-home'
);

Keywords

none

Install

npm i @lafferty-lounge/[email protected]

Version

0.0.4

License

WTFPL

Last publish

Collaborators

  • avatar