@herodevs/scully-plugin-the-vault

This is the home of The Vault plugin for Scully. It provides local caching for Scully, and (in the enterprise offering) shared caching.

Usage no npm install needed!

<script type="module">
  import herodevsScullyPluginTheVault from 'https://cdn.skypack.dev/@herodevs/scully-plugin-the-vault';
</script>

README

The Vault

This is the home of The Vault plugin for Scully. It provides local caching for Scully, and (in the enterprise offering) shared caching.

The cache works with a approximately 5 minute granularity. This means that when a resource is in the cache it will live for the time it has assigned to it, but with a 5 minute margin. When you have resources where this 5 minutes cache time is to long, set the resource to a TTL of 0 making it un-cachable.

To use this plugin you must first install it using npm:

 npm i @herodevs/scully-plugin-the-vault

After that add it to your config file:

import { theVaultReady } from '@herodevs/scully-plugin-the-vault';
import { ScullyConfig } from '@scullyio/scully';

/** note that the config must be a promise */
export const config: Promise<ScullyConfig> = (async () => {

// setPluginConfig(theVault, { customerId: 2, projectId: 2 });

/** Mandatory! *//
await theVaultReady({
   includeReferer: false,
   customerId: 2,
   projectId: 3,
 });

 const conf: ScullyConfig = {
   projectRoot: './apps/demo/src',
   projectName: 'demo',
   outDir: './dist/static',
   handle404: 'index',
   maxRenderThreads: 24,
   routes: {
     '/user/:id': {
       type: 'json',
       id: {
         url: 'http://localhost:8200/users',
         resultsHandler: (raw) => raw.slice(0, 20),
         property: 'id',
       },
     },
   },
 };
 return conf;
})();

config must be a promise.

Because the Vault needs to talk to the cache, and this is an asynchronous process, this plugin demands the Scully config the return a promise. You can use an async function as showen in the above config, or use a normal promise chain when that is your preference.

Runtime Parameters

nocache

If you want to do a local run of your app, without the Vault being used, you can add the command line option --noCache to your scully command.

npx scully --project MyProject --noCache

When you want to run a separate scully server, it must exclude the cache. start it like this:

npx scully --project MyProject serve --noCache

This is needed, because the local cache can only be used by once Scully instance.

clearCache

the --clearCache option removes the local cache.

The Vault Config

The Vault has a config object that can be set using setPluginConfig(theVault, customConfig); or using the await theVaultReady(customConfig); option. Settings provided to the theVaultReady() function will overwrite the setPluginConfig

export interface TheVaultConfig {
  /** the url of the Vault server */
  server?: string;
  /** use the Referer as a key differentiation, defaults to false */
  includeReferer?: boolean;
  /** your Scully Enterprise customerID, as provided by HeroDevs */
  customerId?: number;
  /** your project id number */
  projectId?: number;
  /** your environment */
  environment?: 'dev' | 'prod' | 'staging' | 'test';
  /** the default Time To Live. 12 hours if unset */
  defaultTTL?: number;
  /** TTL exceptions */
  ttlExceptions?: {
    /** the full URL, is used as: `testUrl.startsWith(urlStart)`  */
    [urlStart: string]: number;
  };
}