@volcanicminds/backend 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,6 +31,20 @@ scenarios (public/private, Bearer/Cookie, with/without DB, single/multi-tenant,
31
31
 
32
32
  ## Changelog
33
33
 
34
+ ### 3.5.0
35
+
36
+ - **Per-route response cache (OOTB).** Opt in per endpoint with a `cache` prop in `routes.ts`
37
+ (`cache: true` | `<ttlSeconds>` | `{ enabled?, ttl?, keyGroup?, invalidates? }`), also settable at the
38
+ file-level `config.cache` (inherited by every route, overridable per route). Only **GET** responses with a
39
+ **2xx** status are cached; the read runs as a `preHandler` (after auth/roles) and short-circuits on a hit,
40
+ the write as an `onSend` (captures the serialized body + `v-*` headers). The cache key is **scope-safe** —
41
+ isolated by tenant, authenticated subject and role set — so a cached response is never served across
42
+ tenants/users/privileges. Backed by an in-memory **LRU + TTL** store (no external dependency); global
43
+ defaults `options.cache = { enabled, ttl: 3600, maxEntries: 1000 }`. Invalidation is by **key-group**
44
+ (default = the api folder): declaratively via `cache.invalidates: [...]` on a mutating route, or
45
+ imperatively via the exported `invalidateCache(keyGroup?)` / `global.cache` (`invalidate`, `flushAll`,
46
+ `del`, `stats`). The effective config is logged at startup.
47
+
34
48
  ### 3.1.0
35
49
 
36
50
  - **Embedded database (PGlite)** — opt-in `type: 'pglite'` engine: zero-setup, in-process Postgres for
@@ -92,6 +106,7 @@ focused docs below drill into specific topics:
92
106
  - **[Advanced Architecture](docs/ADVANCED_ARCHITECTURE.md)**: Service Layer pattern, BaseService abstraction, and dependency injection.
93
107
  - **[Data Layer Magic](docs/DATA_LAYER_MAGIC.md)**: How `req.data()` works and how to turn URLs into complex SQL queries with `@volcanicminds/backend/typeorm`.
94
108
  - **[Embedded database (PGlite)](docs/PGLITE.md)**: Plug & play in‑process Postgres for dev/test/demos (zero setup), pgvector support, and Postgres‑vs‑PGlite trade‑offs.
109
+ - **[Per-route Cache](docs/CACHE.md)**: Opt-in in-memory response cache (LRU + TTL) with a `cache` route prop, scope-safe keys (tenant/subject/roles), and key-group invalidation (`invalidates` + `invalidateCache`).
95
110
  - **[Schema Customization](docs/SCHEMA_OVERRIDING.md)**: How to extend core schemas (like Login Response) without forking the framework.
96
111
  - **[Security & MFA](docs/SECURITY_MFA.md)**: Deep dive into Multi-Factor Authentication policies, Gatekeeper flow, and emergency resets.
97
112
  - **[TypeScript Guide](docs/TYPESCRIPT_GUIDE.md)**: How to properly extend Request types, global scopes, and inject User Contexts.
package/dist/index.d.ts CHANGED
@@ -7,4 +7,6 @@ export type { global, FastifyReply, FastifyRequest, FastifyInstance, Authenticat
7
7
  export { MfaPolicy } from './lib/config/constants.js';
8
8
  export { yn, preload, start, TranslatedError };
9
9
  export { generateManifest, buildManifest } from './lib/manifest/generator.js';
10
+ export { invalidateCache, cache } from './lib/util/cache.js';
11
+ export type { RouteCache, NormalizedRouteCache } from './types/global.js';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAGjC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAatD,OAAO,OAA4B,MAAM,SAAS,CAAA;AAsHlD,QAAA,MAAM,OAAO,qBAIZ,CAAA;AAED,QAAA,MAAM,KAAK,GAAU,eAAe,6NA0QnC,CAAA;AAED,YAAY,EACV,MAAM,EACN,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAGjC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAatD,OAAO,OAA4B,MAAM,SAAS,CAAA;AAuHlD,QAAA,MAAM,OAAO,qBAIZ,CAAA;AAED,QAAA,MAAM,KAAK,GAAU,eAAe,6NA+QnC,CAAA;AAED,YAAY,EACV,MAAM,EACN,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC5D,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA"}
package/dist/index.js CHANGED
@@ -31,6 +31,7 @@ import rawBody from 'fastify-raw-body';
31
31
  import cookie from '@fastify/cookie';
32
32
  import require from './lib/util/require.js';
33
33
  import { assertSecretStrength } from './lib/util/secret.js';
34
+ import { configureCache, cache } from './lib/util/cache.js';
34
35
  import general from './lib/config/general.js';
35
36
  import { defaultUserManager, defaultTokenManager, defaultDataBaseManager, defaultMfaManager, defaultTransferManager, defaultTenantManager } from './lib/defaults/managers.js';
36
37
  global.log = logger;
@@ -124,6 +125,8 @@ const start = async (decorators = {}) => {
124
125
  await preload();
125
126
  const begin = new Date().getTime();
126
127
  mark.print(logger);
128
+ configureCache(global.config?.options?.cache);
129
+ global.cache = cache;
127
130
  const { tracking, trackingConfig } = await loaderTracking.load();
128
131
  global.tracking = tracking;
129
132
  global.trackingConfig = trackingConfig;
@@ -341,4 +344,5 @@ const start = async (decorators = {}) => {
341
344
  export { MfaPolicy } from './lib/config/constants.js';
342
345
  export { yn, preload, start, TranslatedError };
343
346
  export { generateManifest, buildManifest } from './lib/manifest/generator.js';
347
+ export { invalidateCache, cache } from './lib/util/cache.js';
344
348
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,MAAM,CAAC,MAAM,EAAE,CAAA;AAEf,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,MAAM,MAAM,sBAAsB,CAAA;AACzC,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,aAAa,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,aAAa,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,iBAAiB,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,eAAe,MAAM,2BAA2B,CAAA;AAC5D,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AAEtD,OAAO,OAA4B,MAAM,SAAS,CAAA;AAClD,OAAO,YAAY,MAAM,cAAc,CAAA;AACvC,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,SAAS,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,IAAI,MAAM,eAAe,CAAA;AAChC,OAAO,MAAM,MAAM,iBAAiB,CAAA;AACpC,OAAO,QAAQ,MAAM,mBAAmB,CAAA;AACxC,OAAO,SAAS,MAAM,qBAAqB,CAAA;AAC3C,OAAO,SAAS,MAAM,oBAAoB,CAAA;AAC1C,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAEpC,OAAO,OAAO,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAG3D,OAAO,OAAO,MAAM,yBAAyB,CAAA;AAC7C,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,4BAA4B,CAAA;AAEnC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAA;AAEnB,KAAK,UAAU,iBAAiB,CAAC,MAAuB;IACtD,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAE9B,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACjC,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAClC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,MAAuB;IACtD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;IAEtH,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACtC,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE/B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAA;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAA;QAE7D,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC/D,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,IAAI,GAAG,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,4BAA4B,GAAG,QAAQ,CAAC,CAAA;QAC9D,CAAC;QAED,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC7B,OAAO,EAAE;gBACP,IAAI,EAAE;oBACJ,KAAK,EAAE,aAAa,IAAI,4BAA4B;oBACpD,WAAW,EAAE,mBAAmB,IAAI,2CAA2C;oBAC/E,OAAO,EAAE,eAAe,IAAI,OAAO;iBACpC;gBACD,IAAI,EAAE,YAAY,IAAI,gBAAgB;gBACtC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;gBAC1B,QAAQ,EAAE,CAAC,kBAAkB,CAAC;gBAC9B,QAAQ,EAAE,CAAC,kBAAkB,CAAC;aAC/B;YACD,OAAO,EAAE;gBACP,IAAI,EAAE;oBACJ,KAAK,EAAE,aAAa,IAAI,4BAA4B;oBACpD,WAAW,EAAE,mBAAmB,IAAI,2CAA2C;oBAC/E,OAAO,EAAE,eAAe,IAAI,OAAO;iBACpC;gBACD,OAAO,EAAE;oBACP;wBACE,GAAG,EAAE,YAAY,IAAI,uBAAuB;qBAC7C;iBACF;gBACD,UAAU,EAAE;oBACV,eAAe,EAAE;wBACf,MAAM,EAAE;4BACN,IAAI,EAAE,MAAM;4BACZ,MAAM,EAAE,QAAQ;yBACjB;qBACF;iBACF;aACF;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE;YAC/B,WAAW,EAAE,kBAAkB,IAAI,WAAW;YAC9C,QAAQ,EAAE;gBACR,YAAY,EAAE,MAAM;gBACpB,WAAW,EAAE,IAAI;gBACjB,wBAAwB,EAAE,CAAC;aAC5B;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;aACxC;YACD,KAAK,EAAE;gBACL,KAAK,EAAE,aAAa;aACrB;SACF,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,MAAuB;IACvD,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAA;IAC1D,IAAI,SAAS,EAAE,CAAC;QACd,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAEjC,MAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;IACxC,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;IACzB,MAAM,CAAC,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAA;IACzC,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAA;IACnC,MAAM,CAAC,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAA;AACzC,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,KAAK,EAAE,UAAU,GAAG,EAAE,EAAE,EAAE;IACtC,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,OAAO,EAAE,CAAA;IAEnC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAElB,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAA;IAChE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,MAAM,CAAC,cAAc,GAAG,cAAc,CAAA;IAGtC,MAAM,MAAM,GAAoB,OAAO,EAAE,CAAA;IACzC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IAEtB,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;IACnE,MAAM,EACJ,UAAU,GAAG,EAAE,EACf,cAAc,GAAG,KAAK,EACtB,WAAW,GAAG,MAAM,EACpB,kBAAkB,GAAG,EAAE,EACvB,sBAAsB,GAAG,MAAM,EAChC,GAAG,OAAO,CAAC,GAAG,CAAA;IAEf,MAAM,cAAc,GAAG,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAA;IAE1C,IAAI,OAAO,EAAE,OAAO;QAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;IAC3E,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QAEpB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACvC,oBAAoB,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC/D,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;aAC5C,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;IACD,IAAI,OAAO,EAAE,MAAM;QAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IAExE,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;QACzD,MAAM,CAAC,kBAAkB,CACvB;YACE,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC;gBAC3B,GAAG,EAAE,EAAE;gBACP,UAAU,EAAE,KAAK;aAClB,CAAC;SACH,EACD,UAAU,IAAI,EAAE,KAAK;YACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACxB,CAAC,CACF,CAAA;IACH,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,UAAU,KAAK,EAAE,IAAI,EAAE,KAAK;QAEjD,MAAM,GAAG,GAAG,KAAY,CAAA;QAIxB,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACpF,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,IAAI,SAAS,IAAI,GAAG,CAAA;QAC7G,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,CAAA;QAChF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAA;QAEtF,MAAM,IAAI,GAAG;YACX,UAAU;YACV,KAAK,EAAE,SAAS;YAChB,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3D,CAAA;QAED,IAAI,UAAU,IAAI,GAAG;YAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACvC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,IAAI,OAAO,EAAE,SAAS;QAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;IACjF,IAAI,OAAO,EAAE,IAAI;QAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;IAClE,IAAI,OAAO,EAAE,QAAQ;QAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;IAI9E,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAClE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAChF,CAAC;IACH,CAAC;IAID,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA;IAClD,oBAAoB,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAExD,IAAI,GAAG,CAAC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,wBAAwB,cAAc,EAAE,CAAC,CAAA;IAC9D,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE;QAClC,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE;KACpC,CAAC,CAAA;IAEF,IAAI,cAAc,EAAE,CAAC;QACnB,oBAAoB,CAAC,oBAAoB,EAAE,kBAAkB,IAAI,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACtF,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE;YAClC,SAAS,EAAE,cAAc;YACzB,MAAM,EAAE,kBAAkB,IAAI,UAAU;YACxC,IAAI,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE;SAC5C,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAEhC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,CAAA;IAGxC,UAAU,GAAG;QACX,WAAW,EAAE,kBAAkB;QAC/B,YAAY,EAAE,mBAAmB;QACjC,eAAe,EAAE,sBAAsB;QACvC,UAAU,EAAE,iBAAiB;QAC7B,eAAe,EAAE,sBAAsB;QACvC,aAAa,EAAE,oBAAoB;QACnC,GAAG,UAAU;KACd,CAAA;IAGD,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC9C,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7C,CAAC,CAAC,CACH,CAAA;IAED,IAAI,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAuB,CAAA;QAC1D,IAAI,YAAY,GAAkB,IAAI,CAAA;QACtC,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;YAC7B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAC1D,IAAI,GAAG,CAAC,CAAC;oBAAE,GAAG,CAAC,KAAK,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;QAC1D,CAAC;QAED,MAAM,CAAC,YAAY,GAAG,YAAY,CAAA;QAElC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,GAAG,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,kCAAkC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAA;YAI5E,MAAM,MAAM,CAAC,QAAQ,CACnB,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACjB,QAAQ,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;oBAC1D,IAAI,CAAC,IAAI,CAAC,CAAA;gBACZ,CAAC,CAAC,CAAA;gBAEF,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;oBACrC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;oBAEnC,KAAK,CAAC,MAAM,EAAE,CAAA;gBAChB,CAAC,CAAC,CAAA;YACJ,CAAC,EACD,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,CAChC,CAAA;QACH,CAAC;IACH,CAAC;IAID,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAA;IAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAA;IAE3D,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,KAAK,EAAE,CAAA;QACnB,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;QAEnC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YAEjD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,GAAG,CAAC,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;YAC3E,CAAC;iBAAM,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;gBAC5B,IAAI,GAAG,CAAC,CAAC;oBACP,GAAG,CAAC,KAAK,CACP,oGAAoG,CACrG,CAAA;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,CAAC,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAA;gBACjF,IAAI,CAAC;oBACH,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;wBACnE,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAA;wBAC/D,IAAI,GAAG,CAAC,CAAC;4BAAE,GAAG,CAAC,IAAI,CAAC,qCAAqC,UAAU,EAAE,CAAC,CAAA;oBACxE,CAAC;yBAAM,CAAC;wBACN,IAAI,GAAG,CAAC,CAAC;4BAAE,GAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAA;oBAC7F,CAAC;gBACH,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;oBAC1D,IAAI,GAAG,CAAC,CAAC;wBAAE,GAAG,CAAC,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAA;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAMD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;IAClD,IAAI,gBAAgB,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;YACjD,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAClF,IAAI,GAAG,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,yBAAyB,gBAAgB,EAAE,CAAC,CAAA;QAClE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAC1D,IAAI,GAAG,CAAC,CAAC;gBAAE,GAAG,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAA;QAC1D,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YAGpB,IAAI,CAAC;gBACH,MAAO,MAAc,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAA;YAC/C,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAGD,MAAM,MAAM;SACT,MAAM,CAAC;QACN,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;QAClB,IAAI,EAAE,IAAI;KACX,CAAC;SACD,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAChB,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,CAAA;YACpD,GAAG,CAAC,IAAI,CAAC,0BAA0B,OAAO,GAAG,CAAC,CAAA;QAChD,CAAC;QAED,IAAI,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;QACvE,CAAC;aAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACjB,GAAG,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;QAClE,CAAC;QAED,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACV,GAAG,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAA;YAEtC,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAClD,IAAI,WAAW,EAAE,CAAC;gBAChB,GAAG,CAAC,IAAI,CAAC,0BAA0B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,WAAW,EAAE,CAAC,CAAA;YAC/F,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,MAAM,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC9C,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAyBD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,9 @@ declare const _default: {
19
19
  manifest: {
20
20
  enabled: boolean;
21
21
  };
22
+ cache: {
23
+ enabled: boolean;
24
+ };
22
25
  };
23
26
  };
24
27
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../../lib/config/general.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAsBC"}
1
+ {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../../lib/config/general.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBA4BC"}
@@ -18,6 +18,9 @@ export default {
18
18
  },
19
19
  manifest: {
20
20
  enabled: false
21
+ },
22
+ cache: {
23
+ enabled: false
21
24
  }
22
25
  }
23
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/config/general.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE;QACP,oBAAoB,EAAE,KAAK;QAC3B,0BAA0B,EAAE,KAAK;QACjC,iCAAiC,EAAE,KAAK;QACxC,0BAA0B,EAAE,KAAK;QACjC,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU;QAChD,4BAA4B,EAAE,IAAI;QAClC,4BAA4B,EAAE,IAAI;QAClC,YAAY,EAAE;YACZ,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,WAAW;YACrB,UAAU,EAAE,aAAa;YACzB,SAAS,EAAE,KAAK;SACjB;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,KAAK;SACf;KACF;CACF,CAAA"}
1
+ {"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/config/general.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE;QACP,oBAAoB,EAAE,KAAK;QAC3B,0BAA0B,EAAE,KAAK;QACjC,iCAAiC,EAAE,KAAK;QACxC,0BAA0B,EAAE,KAAK;QACjC,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU;QAChD,4BAA4B,EAAE,IAAI;QAClC,4BAA4B,EAAE,IAAI;QAClC,YAAY,EAAE;YACZ,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,WAAW;YACrB,UAAU,EAAE,aAAa;YACzB,SAAS,EAAE,KAAK;SACjB;QACD,QAAQ,EAAE;YAER,OAAO,EAAE,KAAK;SACf;QACD,KAAK,EAAE;YAGL,OAAO,EAAE,KAAK;SACf;KACF;CACF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"onError.d.ts","sourceRoot":"","sources":["../../../lib/hooks/onError.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;yBAEhC,MAAM,cAAc,EAAE,OAAO,YAAY,EAAE,OAAO,GAAG;AAA3E,wBA6BC"}
1
+ {"version":3,"file":"onError.d.ts","sourceRoot":"","sources":["../../../lib/hooks/onError.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;yBAEhC,MAAM,cAAc,EAAE,OAAO,YAAY,EAAE,OAAO,GAAG;AAA3E,wBAkCC"}
@@ -1,29 +1,30 @@
1
1
  export default async (_req, reply, error) => {
2
+ const message = typeof error?.message === 'string' ? error.message : String(error?.message ?? error ?? '');
2
3
  if (log.e)
3
- log.error(`${error?.message || error}`);
4
+ log.error(message || `${error}`);
4
5
  if (log.t)
5
6
  log.trace(error);
6
- if (error.statusCode && error.statusCode >= 400) {
7
+ if (error?.statusCode && error.statusCode >= 400) {
7
8
  return reply.code(error.statusCode).send(error);
8
9
  }
9
- if (error.message === 'Wrong credentials' || error.message === 'Unauthorized') {
10
+ if (message === 'Wrong credentials' || message === 'Unauthorized') {
10
11
  return reply.code(403).send({
11
12
  statusCode: 403,
12
13
  error: 'Forbidden',
13
- message: error.message
14
+ message
14
15
  });
15
16
  }
16
- if (error.message.includes('not found')) {
17
+ if (message.includes('not found')) {
17
18
  return reply.code(404).send({
18
19
  statusCode: 404,
19
20
  error: 'Not Found',
20
- message: error.message
21
+ message
21
22
  });
22
23
  }
23
24
  return reply.code(500).send({
24
25
  statusCode: 500,
25
26
  error: 'Internal Server Error',
26
- message: error.message
27
+ message
27
28
  });
28
29
  };
29
30
  //# sourceMappingURL=onError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"onError.js","sourceRoot":"","sources":["../../../lib/hooks/onError.ts"],"names":[],"mappings":"AAGA,eAAe,KAAK,EAAE,IAAoB,EAAE,KAAmB,EAAE,KAAU,EAAE,EAAE;IAC7E,IAAI,GAAG,CAAC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;IAClD,IAAI,GAAG,CAAC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE3B,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjD,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,mBAAmB,IAAI,KAAK,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QAC9E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC1B,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC1B,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QAC1B,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"onError.js","sourceRoot":"","sources":["../../../lib/hooks/onError.ts"],"names":[],"mappings":"AAGA,eAAe,KAAK,EAAE,IAAoB,EAAE,KAAmB,EAAE,KAAU,EAAE,EAAE;IAI7E,MAAM,OAAO,GAAG,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,IAAI,EAAE,CAAC,CAAA;IAE1G,IAAI,GAAG,CAAC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,KAAK,EAAE,CAAC,CAAA;IAC3C,IAAI,GAAG,CAAC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE3B,IAAI,KAAK,EAAE,UAAU,IAAI,KAAK,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjD,CAAC;IAED,IAAI,OAAO,KAAK,mBAAmB,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC1B,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,WAAW;YAClB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC1B,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,WAAW;YAClB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QAC1B,UAAU,EAAE,GAAG;QACf,KAAK,EAAE,uBAAuB;QAC9B,OAAO;KACR,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAI1D,wBAAsB,IAAI,2BA2CzB"}
1
+ {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAI1D,wBAAsB,IAAI,2BA8CzB"}
@@ -18,6 +18,9 @@ export async function load() {
18
18
  },
19
19
  manifest: {
20
20
  enabled: false
21
+ },
22
+ cache: {
23
+ enabled: false
21
24
  }
22
25
  }
23
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,aAAa,GAAkB;QACnC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACP,oBAAoB,EAAE,KAAK;YAC3B,0BAA0B,EAAE,KAAK;YACjC,iCAAiC,EAAE,KAAK;YACxC,0BAA0B,EAAE,KAAK;YACjC,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,IAAI;YACnB,4BAA4B,EAAE,SAAS;YACvC,4BAA4B,EAAE,SAAS;YACvC,YAAY,EAAE;gBACZ,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK;aACjB;YACD,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;aACf;SACF;KACF,CAAA;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAE7G,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAA;QAE/D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,CAAA;YAC9B,MAAM,MAAM,GAAkB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAA;YAEtD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBACvC,aAAa,CAAC,OAAO,GAAG;oBACtB,GAAG,aAAa,CAAC,OAAO;oBACxB,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;iBAC1B,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACpD,OAAO,aAAa,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"general.js","sourceRoot":"","sources":["../../../lib/loader/general.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,aAAa,GAAkB;QACnC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACP,oBAAoB,EAAE,KAAK;YAC3B,0BAA0B,EAAE,KAAK;YACjC,iCAAiC,EAAE,KAAK;YACxC,0BAA0B,EAAE,KAAK;YACjC,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,IAAI;YACnB,4BAA4B,EAAE,SAAS;YACvC,4BAA4B,EAAE,SAAS;YACvC,YAAY,EAAE;gBACZ,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK;aACjB;YACD,QAAQ,EAAE;gBACR,OAAO,EAAE,KAAK;aACf;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK;aACf;SACF;KACF,CAAA;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAE7G,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAA;QAE/D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,CAAA;YAC9B,MAAM,MAAM,GAAkB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAA;YAEtD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBACvC,aAAa,CAAC,OAAO,GAAG;oBACtB,GAAG,aAAa,CAAC,OAAO;oBACxB,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;iBAC1B,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACpD,OAAO,aAAa,CAAA;AACtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../lib/loader/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,KAAK,EAAE,eAAe,EAAe,MAAM,uBAAuB,CAAA;AAiEtF,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,GAAG,EAClB,eAAe,EAAE,MAAM,EAAE,EACzB,WAAW,EAAE,eAAe,EAAE,GAC7B,eAAe,GAAG,IAAI,CA4HxB;AAiGD,wBAAsB,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtD"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../lib/loader/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,KAAK,EAAE,eAAe,EAAe,MAAM,uBAAuB,CAAA;AAkEtF,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,GAAG,EAClB,eAAe,EAAE,MAAM,EAAE,EACzB,WAAW,EAAE,eAAe,EAAE,GAC7B,eAAe,GAAG,IAAI,CAgIxB;AA+HD,wBAAsB,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtD"}
@@ -1,5 +1,6 @@
1
1
  import yn from '../util/yn.js';
2
2
  import { normalizePatterns } from '../util/path.js';
3
+ import { normalizeRouteCache, buildCacheHooks, cacheEnabled } from '../util/cache.js';
3
4
  import { globSync } from 'glob';
4
5
  import path from 'path';
5
6
  import { fileURLToPath } from 'url';
@@ -59,7 +60,7 @@ async function loadMiddlewares(base, middlewares = []) {
59
60
  }
60
61
  export function processRoute(route, index, file, dir, base, defaultConfig, authMiddlewares, validRoutes) {
61
62
  const errors = [];
62
- const { method: methodCase, path: pathName = '/', handler, roles: rs = [], config = {}, middlewares = [], rateLimit } = route;
63
+ const { method: methodCase, path: pathName = '/', handler, roles: rs = [], config = {}, middlewares = [], rateLimit, cache: cacheInput } = route;
63
64
  const rsp = !rs.length ? [roles.public] : rs;
64
65
  let requiredRoles = [];
65
66
  try {
@@ -135,6 +136,7 @@ export function processRoute(route, index, file, dir, base, defaultConfig, authM
135
136
  tenantContext,
136
137
  rawBody,
137
138
  rateLimit,
139
+ cache: normalizeRouteCache(cacheInput ?? defaultConfig?.cache, dir),
138
140
  base,
139
141
  file: path.join(base, defaultConfig.controller || 'controller', handlerParts[0]),
140
142
  func: handlerParts[1],
@@ -185,11 +187,26 @@ async function applyRoutes(server, routes) {
185
187
  let countRoutes = 0;
186
188
  for (const route of routes) {
187
189
  if (route?.enable) {
188
- const { handler, method, path, middlewares, roles, rawBody, rateLimit, base, file, func, doc, tenantContext } = route;
190
+ const { handler, method, path, middlewares, roles, rawBody, rateLimit, base, file, func, doc, tenantContext, cache } = route;
189
191
  if (log.d)
190
192
  log.debug(`* Add path ${method} ${path} on handle ${handler}`);
191
193
  const midds = await loadMiddlewares(base, middlewares);
192
- server.route({
194
+ const cacheHooks = cache && (cache.enabled || cache.invalidates?.length) ? buildCacheHooks(cache) : null;
195
+ if (cacheHooks) {
196
+ if (!cacheEnabled()) {
197
+ if (log.w)
198
+ log.warn(`Cache 🧊 route ${method} ${path} declares cache/invalidation but global cache is disabled (options.cache.enabled) — inert`);
199
+ }
200
+ else if (log.d) {
201
+ const parts = [];
202
+ if (cache?.enabled)
203
+ parts.push(`read+write ttl ${cache.ttl ?? 'default'}s keyGroup '${cache.keyGroup}'`);
204
+ if (cache?.invalidates?.length)
205
+ parts.push(`invalidates [${cache.invalidates.join(', ')}]`);
206
+ log.debug(`Cache 🧊 route ${method} ${path} — ${parts.join(', ')}`);
207
+ }
208
+ }
209
+ const routeDef = {
193
210
  method: method,
194
211
  path: path,
195
212
  schema: doc,
@@ -198,7 +215,8 @@ async function applyRoutes(server, routes) {
198
215
  requiredRoles: roles || [],
199
216
  rawBody: rawBody || false,
200
217
  rateLimit: rateLimit || undefined,
201
- tenantContext: tenantContext
218
+ tenantContext: tenantContext,
219
+ cache: cache || undefined
202
220
  },
203
221
  handler: async function (req, reply) {
204
222
  let module;
@@ -227,7 +245,13 @@ async function applyRoutes(server, routes) {
227
245
  }
228
246
  return await module[func](req, reply);
229
247
  }
230
- });
248
+ };
249
+ if (cacheHooks?.preHandler) {
250
+ routeDef.preHandler = [cacheHooks.preHandler, ...(midds.preHandler || [])];
251
+ }
252
+ if (cacheHooks?.onSend)
253
+ routeDef.onSend = cacheHooks.onSend;
254
+ server.route(routeDef);
231
255
  countRoutes++;
232
256
  }
233
257
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../lib/loader/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../lib/loader/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { FastifyReply, FastifyRequest } from 'fastify';
2
+ import type { NormalizedRouteCache, RouteCache } from '../../types/global.js';
3
+ interface CacheSettings {
4
+ enabled: boolean;
5
+ ttl: number;
6
+ maxEntries: number;
7
+ }
8
+ export declare function configureCache(opts?: CacheSettings | Partial<CacheSettings>): CacheSettings;
9
+ export declare const cacheEnabled: () => boolean;
10
+ export declare const defaultTtl: () => number;
11
+ export declare function cacheGet(key: string): any;
12
+ export declare function cacheSet(key: string, value: any, ttlSec?: number): void;
13
+ export declare function invalidateCache(keyGroups?: string | string[]): number;
14
+ export declare function cacheStats(): {
15
+ enabled: boolean;
16
+ ttl: number;
17
+ maxEntries: number;
18
+ size: number;
19
+ hits: number;
20
+ misses: number;
21
+ };
22
+ export declare const cache: {
23
+ get: typeof cacheGet;
24
+ set: typeof cacheSet;
25
+ del: (key: string) => boolean;
26
+ invalidate: typeof invalidateCache;
27
+ flushAll: () => number;
28
+ stats: typeof cacheStats;
29
+ enabled: () => boolean;
30
+ };
31
+ export declare function normalizeRouteCache(input: boolean | number | RouteCache | undefined, defaultKeyGroup: string): NormalizedRouteCache | undefined;
32
+ export declare function buildCacheHooks(routeCache: NormalizedRouteCache): {
33
+ preHandler: ((req: FastifyRequest, reply: FastifyReply) => Promise<undefined>) | undefined;
34
+ onSend: (req: FastifyRequest, reply: FastifyReply, payload: any) => Promise<any>;
35
+ };
36
+ export {};
37
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../lib/util/cache.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAO7E,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;CACnB;AA2BD,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAwB3F;AAED,eAAO,MAAM,YAAY,eAAyB,CAAA;AAClD,eAAO,MAAM,UAAU,cAAqB,CAAA;AAE5C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAgBzC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAUvE;AAMD,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAkBrE;AAED,wBAAgB,UAAU;aAjHf,OAAO;SACX,MAAM;gBACC,MAAM;;;;EAiHnB;AAGD,eAAO,MAAM,KAAK;;;eAGL,MAAM;;;;;CAKlB,CAAA;AASD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,EAChD,eAAe,EAAE,MAAM,GACtB,oBAAoB,GAAG,SAAS,CAalC;AA2BD,wBAAgB,eAAe,CAAC,UAAU,EAAE,oBAAoB;uBAO9C,cAAc,SAAS,YAAY;kBAcxB,cAAc,SAAS,YAAY,WAAW,GAAG;EAkC7E"}
@@ -0,0 +1,189 @@
1
+ const DEFAULTS = { enabled: false, ttl: 3600, maxEntries: 1000 };
2
+ let settings = { ...DEFAULTS };
3
+ const store = new Map();
4
+ let hits = 0;
5
+ let misses = 0;
6
+ let sweepTimer = null;
7
+ const nowMs = () => Date.now();
8
+ function startSweep(intervalMs = 60_000) {
9
+ if (sweepTimer)
10
+ clearInterval(sweepTimer);
11
+ sweepTimer = setInterval(() => {
12
+ const t = nowMs();
13
+ for (const [k, e] of store)
14
+ if (e.expires <= t)
15
+ store.delete(k);
16
+ }, intervalMs);
17
+ sweepTimer.unref?.();
18
+ }
19
+ export function configureCache(opts) {
20
+ settings = {
21
+ enabled: opts?.enabled === true,
22
+ ttl: Number(opts?.ttl) > 0 ? Number(opts?.ttl) : DEFAULTS.ttl,
23
+ maxEntries: Number(opts?.maxEntries) > 0 ? Number(opts?.maxEntries) : DEFAULTS.maxEntries
24
+ };
25
+ store.clear();
26
+ hits = 0;
27
+ misses = 0;
28
+ if (settings.enabled) {
29
+ startSweep();
30
+ if (log?.i)
31
+ log.info(`Cache 🧊 enabled — ttl ${settings.ttl}s, maxEntries ${settings.maxEntries}, strategy LRU+TTL`);
32
+ }
33
+ else {
34
+ if (sweepTimer) {
35
+ clearInterval(sweepTimer);
36
+ sweepTimer = null;
37
+ }
38
+ if (log?.i)
39
+ log.info('Cache 🧊 disabled');
40
+ }
41
+ return settings;
42
+ }
43
+ export const cacheEnabled = () => settings.enabled;
44
+ export const defaultTtl = () => settings.ttl;
45
+ export function cacheGet(key) {
46
+ const e = store.get(key);
47
+ if (!e) {
48
+ misses++;
49
+ return undefined;
50
+ }
51
+ if (e.expires <= nowMs()) {
52
+ store.delete(key);
53
+ misses++;
54
+ return undefined;
55
+ }
56
+ store.delete(key);
57
+ store.set(key, e);
58
+ hits++;
59
+ return e.value;
60
+ }
61
+ export function cacheSet(key, value, ttlSec) {
62
+ const ttl = Number(ttlSec) > 0 ? Number(ttlSec) : settings.ttl;
63
+ if (store.has(key))
64
+ store.delete(key);
65
+ store.set(key, { value, expires: ttl > 0 ? nowMs() + ttl * 1000 : Infinity });
66
+ while (store.size > settings.maxEntries) {
67
+ const oldest = store.keys().next().value;
68
+ if (oldest === undefined)
69
+ break;
70
+ store.delete(oldest);
71
+ }
72
+ }
73
+ export function invalidateCache(keyGroups) {
74
+ if (keyGroups == null) {
75
+ const n = store.size;
76
+ store.clear();
77
+ if (log?.d)
78
+ log.debug(`Cache 🧊 flushAll — ${n} entries removed`);
79
+ return n;
80
+ }
81
+ const list = Array.isArray(keyGroups) ? keyGroups : [keyGroups];
82
+ const prefixes = list.map((g) => `${g}::`);
83
+ let n = 0;
84
+ for (const k of [...store.keys()]) {
85
+ if (prefixes.some((p) => k.startsWith(p))) {
86
+ store.delete(k);
87
+ n++;
88
+ }
89
+ }
90
+ if (log?.d)
91
+ log.debug(`Cache 🧊 invalidate [${list.join(', ')}] — ${n} entries removed`);
92
+ return n;
93
+ }
94
+ export function cacheStats() {
95
+ return { size: store.size, hits, misses, ...settings };
96
+ }
97
+ export const cache = {
98
+ get: cacheGet,
99
+ set: cacheSet,
100
+ del: (key) => store.delete(key),
101
+ invalidate: invalidateCache,
102
+ flushAll: () => invalidateCache(),
103
+ stats: cacheStats,
104
+ enabled: cacheEnabled
105
+ };
106
+ export function normalizeRouteCache(input, defaultKeyGroup) {
107
+ if (input == null || input === false)
108
+ return undefined;
109
+ const obj = input === true ? {} : typeof input === 'number' ? { ttl: input } : input;
110
+ const enabled = obj.enabled !== false;
111
+ const invalidates = obj.invalidates == null ? undefined : Array.isArray(obj.invalidates) ? obj.invalidates : [obj.invalidates];
112
+ if (!enabled && !invalidates?.length)
113
+ return undefined;
114
+ return {
115
+ enabled,
116
+ ttl: typeof obj.ttl === 'number' && obj.ttl > 0 ? obj.ttl : undefined,
117
+ keyGroup: obj.keyGroup || defaultKeyGroup,
118
+ invalidates
119
+ };
120
+ }
121
+ const HIT = Symbol('volcanic.cacheHit');
122
+ const HEADER_ALLOW = /^(content-type|v-)/i;
123
+ function scope(req) {
124
+ const tenant = req.tenant?.id ?? '';
125
+ const subject = req.user?.externalId ?? req.token?.getId?.() ?? 'anon';
126
+ const rolesList = typeof req.roles === 'function' ? req.roles() : [];
127
+ const rolesKey = [...(rolesList || [])].sort().join(',');
128
+ return `${tenant}|${subject}|${rolesKey}`;
129
+ }
130
+ function keyFor(req, keyGroup) {
131
+ return `${keyGroup}::${scope(req)}::${req.method} ${req.url}`;
132
+ }
133
+ function tenantMissing(req) {
134
+ const mt = global.config?.options?.multi_tenant?.enabled;
135
+ const tenantCtx = req.routeOptions?.config?.tenantContext;
136
+ return Boolean(mt && tenantCtx !== false && !req.tenant);
137
+ }
138
+ export function buildCacheHooks(routeCache) {
139
+ const cacheable = routeCache.enabled === true;
140
+ const keyGroup = routeCache.keyGroup;
141
+ const ttl = routeCache.ttl;
142
+ const invalidates = routeCache.invalidates;
143
+ const preHandler = cacheable
144
+ ? async (req, reply) => {
145
+ if (!cacheEnabled() || req.method !== 'GET' || tenantMissing(req))
146
+ return;
147
+ const hit = cacheGet(keyFor(req, keyGroup));
148
+ if (hit) {
149
+ for (const [h, v] of Object.entries(hit.headers))
150
+ reply.header(h, v);
151
+ req[HIT] = true;
152
+ reply.code(hit.statusCode);
153
+ if (log?.d)
154
+ log.debug(`Cache 🧊 hit ${keyGroup} ${req.method} ${req.url}`);
155
+ return reply.send(hit.payload);
156
+ }
157
+ if (log?.d)
158
+ log.debug(`Cache 🧊 miss ${keyGroup} ${req.method} ${req.url}`);
159
+ }
160
+ : undefined;
161
+ const onSend = async (req, reply, payload) => {
162
+ if (!cacheEnabled())
163
+ return payload;
164
+ if (cacheable &&
165
+ !req[HIT] &&
166
+ req.method === 'GET' &&
167
+ reply.statusCode >= 200 &&
168
+ reply.statusCode < 300 &&
169
+ typeof payload === 'string' &&
170
+ !tenantMissing(req) &&
171
+ !reply.getHeader('set-cookie')) {
172
+ const headers = {};
173
+ const all = reply.getHeaders();
174
+ for (const h of Object.keys(all))
175
+ if (HEADER_ALLOW.test(h))
176
+ headers[h] = all[h];
177
+ cacheSet(keyFor(req, keyGroup), { payload, headers, statusCode: reply.statusCode }, ttl);
178
+ }
179
+ if (invalidates?.length &&
180
+ req.method !== 'GET' &&
181
+ reply.statusCode >= 200 &&
182
+ reply.statusCode < 300) {
183
+ invalidateCache(invalidates);
184
+ }
185
+ return payload;
186
+ };
187
+ return { preHandler, onSend };
188
+ }
189
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../lib/util/cache.ts"],"names":[],"mappings":"AAiCA,MAAM,QAAQ,GAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;AAE/E,IAAI,QAAQ,GAAkB,EAAE,GAAG,QAAQ,EAAE,CAAA;AAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAA;AACtC,IAAI,IAAI,GAAG,CAAC,CAAA;AACZ,IAAI,MAAM,GAAG,CAAC,CAAA;AACd,IAAI,UAAU,GAA0C,IAAI,CAAA;AAE5D,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;AAE9B,SAAS,UAAU,CAAC,UAAU,GAAG,MAAM;IACrC,IAAI,UAAU;QAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IACzC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,CAAC,GAAG,KAAK,EAAE,CAAA;QACjB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;YAAE,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;gBAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACjE,CAAC,EAAE,UAAU,CAAC,CAAA;IAEd,UAAU,CAAC,KAAK,EAAE,EAAE,CAAA;AACtB,CAAC;AAGD,MAAM,UAAU,cAAc,CAAC,IAA6C;IAC1E,QAAQ,GAAG;QAET,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI;QAC/B,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG;QAC7D,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU;KAC1F,CAAA;IACD,KAAK,CAAC,KAAK,EAAE,CAAA;IACb,IAAI,GAAG,CAAC,CAAA;IACR,MAAM,GAAG,CAAC,CAAA;IACV,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,UAAU,EAAE,CAAA;QACZ,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,IAAI,CACN,0BAA0B,QAAQ,CAAC,GAAG,iBAAiB,QAAQ,CAAC,UAAU,oBAAoB,CAC/F,CAAA;IACL,CAAC;SAAM,CAAC;QACN,IAAI,UAAU,EAAE,CAAC;YACf,aAAa,CAAC,UAAU,CAAC,CAAA;YACzB,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;QACD,IAAI,GAAG,EAAE,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAA;AAClD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAA;AAE5C,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACxB,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,EAAE,CAAA;QACR,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,EAAE,EAAE,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,MAAM,EAAE,CAAA;QACR,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACjB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACjB,IAAI,EAAE,CAAA;IACN,OAAO,CAAC,CAAC,KAAK,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAU,EAAE,MAAe;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAA;IAC9D,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACrC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAE7E,OAAO,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;QACxC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAK;QAC/B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACtB,CAAC;AACH,CAAC;AAMD,MAAM,UAAU,eAAe,CAAC,SAA6B;IAC3D,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAA;QACpB,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,IAAI,GAAG,EAAE,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAA;QACjE,OAAO,CAAC,CAAA;IACV,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACf,CAAC,EAAE,CAAA;QACL,CAAC;IACH,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QAAE,GAAG,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACxF,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAA;AACxD,CAAC;AAGD,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACvC,UAAU,EAAE,eAAe;IAC3B,QAAQ,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE;IACjC,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,YAAY;CACtB,CAAA;AASD,MAAM,UAAU,mBAAmB,CACjC,KAAgD,EAChD,eAAuB;IAEvB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,SAAS,CAAA;IACtD,MAAM,GAAG,GAAe,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAChG,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,KAAK,KAAK,CAAA;IACrC,MAAM,WAAW,GACf,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC5G,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM;QAAE,OAAO,SAAS,CAAA;IACtD,OAAO;QACL,OAAO;QACP,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QACrE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,eAAe;QACzC,WAAW;KACZ,CAAA;AACH,CAAC;AAED,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACvC,MAAM,YAAY,GAAG,qBAAqB,CAAA;AAG1C,SAAS,KAAK,CAAC,GAAQ;IACrB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,MAAM,CAAA;IACtE,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACpE,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxD,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAA;AAC3C,CAAC;AAED,SAAS,MAAM,CAAC,GAAQ,EAAE,QAAgB;IACxC,OAAO,GAAG,QAAQ,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAA;AAC/D,CAAC;AAID,SAAS,aAAa,CAAC,GAAQ;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAA;IACxD,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAA;IACzD,OAAO,OAAO,CAAC,EAAE,IAAI,SAAS,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC1D,CAAC;AAGD,MAAM,UAAU,eAAe,CAAC,UAAgC;IAC9D,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,IAAI,CAAA;IAC7C,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IACpC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAA;IAC1B,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAA;IAE1C,MAAM,UAAU,GAAG,SAAS;QAC1B,CAAC,CAAC,KAAK,EAAE,GAAmB,EAAE,KAAmB,EAAE,EAAE;YACjD,IAAI,CAAC,YAAY,EAAE,IAAK,GAAW,CAAC,MAAM,KAAK,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC;gBAAE,OAAM;YAClF,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;YAC3C,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAA8B,CAAC;oBAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAQ,CAAC,CACjG;gBAAC,GAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;gBACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBAC1B,IAAI,GAAG,EAAE,CAAC;oBAAE,GAAG,CAAC,KAAK,CAAC,gBAAgB,QAAQ,IAAK,GAAW,CAAC,MAAM,IAAK,GAAW,CAAC,GAAG,EAAE,CAAC,CAAA;gBAC5F,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAChC,CAAC;YACD,IAAI,GAAG,EAAE,CAAC;gBAAE,GAAG,CAAC,KAAK,CAAC,iBAAiB,QAAQ,IAAK,GAAW,CAAC,MAAM,IAAK,GAAW,CAAC,GAAG,EAAE,CAAC,CAAA;QAC/F,CAAC;QACH,CAAC,CAAC,SAAS,CAAA;IAEb,MAAM,MAAM,GAAG,KAAK,EAAE,GAAmB,EAAE,KAAmB,EAAE,OAAY,EAAE,EAAE;QAI9E,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO,OAAO,CAAA;QAEnC,IACE,SAAS;YACT,CAAE,GAAW,CAAC,GAAG,CAAC;YACjB,GAAW,CAAC,MAAM,KAAK,KAAK;YAC7B,KAAK,CAAC,UAAU,IAAI,GAAG;YACvB,KAAK,CAAC,UAAU,GAAG,GAAG;YACtB,OAAO,OAAO,KAAK,QAAQ;YAC3B,CAAC,aAAa,CAAC,GAAG,CAAC;YACnB,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,EAC9B,CAAC;YACD,MAAM,OAAO,GAAwB,EAAE,CAAA;YACvC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,EAAE,CAAA;YAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;YAC/E,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,CAAA;QAC1F,CAAC;QAED,IACE,WAAW,EAAE,MAAM;YAClB,GAAW,CAAC,MAAM,KAAK,KAAK;YAC7B,KAAK,CAAC,UAAU,IAAI,GAAG;YACvB,KAAK,CAAC,UAAU,GAAG,GAAG,EACtB,CAAC;YACD,eAAe,CAAC,WAAW,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;AAC/B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { FastifyRequest, FastifyReply } from '../../types/global.js';
2
2
  export declare function initialize(req: FastifyRequest, _reply: FastifyReply): Promise<void>;
3
3
  export declare function track(req: FastifyRequest, _reply: FastifyReply, payload: any): Promise<void>;
4
+ export declare function isFieldChanged(oldValue: any, newValue: any): boolean;
4
5
  //# sourceMappingURL=tracker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../lib/util/tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzE,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,iBAmBzE;AAED,wBAAsB,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,iBAsDlF"}
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../lib/util/tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzE,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,iBAmBzE;AAED,wBAAsB,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,iBAsDlF;AAWD,wBAAgB,cAAc,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA,WAyBhD"}
@@ -78,18 +78,18 @@ function getTrackingConfigIfEnabled(req) {
78
78
  log.error(error);
79
79
  }
80
80
  }
81
- function isFieldChanged(oldValue, newValue) {
81
+ export function isFieldChanged(oldValue, newValue) {
82
82
  if ((oldValue instanceof Date || newValue instanceof Date) && oldValue != null && newValue != undefined) {
83
83
  return !dayjs(oldValue).isSame(dayjs(newValue));
84
84
  }
85
85
  if ((oldValue instanceof Object || newValue instanceof Object) && oldValue != null && newValue != undefined) {
86
86
  const primaryKey = global.trackingConfig?.primaryKey;
87
- const oldId = oldValue != null && primaryKey in oldValue
87
+ const oldId = oldValue != null && typeof oldValue === 'object' && primaryKey in oldValue
88
88
  ? oldValue[primaryKey]
89
89
  : typeof oldValue === 'string'
90
90
  ? oldValue
91
91
  : undefined;
92
- const newId = newValue != null && primaryKey in newValue
92
+ const newId = newValue != null && typeof newValue === 'object' && primaryKey in newValue
93
93
  ? newValue[primaryKey]
94
94
  : typeof newValue === 'string'
95
95
  ? newValue
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../lib/util/tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../lib/util/tracker.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,25 @@ export interface RouteConfig {
69
69
  consumes?: any
70
70
  rawBody?: boolean
71
71
  manifest?: ManifestHints // structural hints for the generated manifest (group + resource)
72
+ cache?: boolean | number | RouteCache // file-level cache default (inherited by every route; per-route `cache` overrides)
73
+ }
74
+
75
+ // Per-route caching (opt-in). Authored on the route: `true` (default TTL), a number
76
+ // (TTL in seconds), or the full object. Only GET responses with a 2xx status are
77
+ // cached; `invalidates` works on any method (typically mutations).
78
+ export interface RouteCache {
79
+ enabled?: boolean // default true when the object is present
80
+ ttl?: number // seconds; default from global config (options.cache.ttl)
81
+ keyGroup?: string // logical key-group for invalidation; default = the api folder (area)
82
+ invalidates?: string | string[] // key-groups to flush after a successful (2xx) response
83
+ }
84
+
85
+ // The normalized form threaded onto a ConfiguredRoute (keyGroup always resolved).
86
+ export interface NormalizedRouteCache {
87
+ enabled: boolean
88
+ ttl?: number
89
+ keyGroup: string
90
+ invalidates?: string[]
72
91
  }
73
92
 
74
93
  export interface Route {
@@ -79,6 +98,7 @@ export interface Route {
79
98
  middlewares: string[]
80
99
  config?: RouteConfig
81
100
  rateLimit?: any
101
+ cache?: boolean | number | RouteCache
82
102
  }
83
103
 
84
104
  export interface GeneralConfig {
@@ -105,6 +125,12 @@ export interface GeneralConfig {
105
125
  manifest?: {
106
126
  enabled: boolean
107
127
  }
128
+ // In-memory per-route response cache (opt-in per route via `cache`).
129
+ cache?: {
130
+ enabled?: boolean // master switch (default true)
131
+ ttl?: number // default TTL in seconds for routes without an explicit ttl
132
+ maxEntries?: number // LRU cap (slots) before least-recently-used eviction
133
+ }
108
134
  }
109
135
  }
110
136
 
@@ -157,6 +183,7 @@ export interface ConfiguredRoute {
157
183
  }
158
184
  group?: string // structural hint (manifest)
159
185
  resource?: ResourceHints // structural hints (manifest)
186
+ cache?: NormalizedRouteCache // per-route caching (normalized)
160
187
  }
161
188
 
162
189
  export interface TrackChanges {
@@ -340,6 +367,7 @@ declare global {
340
367
  var entity: any
341
368
  var repository: any
342
369
  var routes: ConfiguredRoute[]
370
+ var cache: any
343
371
  }
344
372
 
345
373
  export { global }
@@ -17,7 +17,13 @@ export default {
17
17
  query_key: 'tid'
18
18
  },
19
19
  manifest: {
20
- enabled: false // opt-in: exposes GET /admin/manifest (admin-only) for the backoffice engine
20
+ // opt-in: exposes GET /admin/manifest (admin-only) for the backoffice engine
21
+ enabled: false
22
+ },
23
+ cache: {
24
+ // opt-in: in-memory LRU+TTL cache for routes that declare `cache:`.
25
+ // When enabled, ttl (default 3600s) and maxEntries (default 1000) can be set here.
26
+ enabled: false
21
27
  }
22
28
  }
23
29
  }
@@ -2,32 +2,37 @@
2
2
  import { FastifyRequest, FastifyReply } from 'fastify'
3
3
 
4
4
  export default async (_req: FastifyRequest, reply: FastifyReply, error: any) => {
5
- if (log.e) log.error(`${error?.message || error}`)
5
+ // Normalize the message up-front: `error` may be a string, or an object without
6
+ // a `message` — reading `.includes` on an undefined message would crash the
7
+ // error handler itself (and mask the real error as an unhandled 500).
8
+ const message = typeof error?.message === 'string' ? error.message : String(error?.message ?? error ?? '')
9
+
10
+ if (log.e) log.error(message || `${error}`)
6
11
  if (log.t) log.trace(error)
7
12
 
8
- if (error.statusCode && error.statusCode >= 400) {
13
+ if (error?.statusCode && error.statusCode >= 400) {
9
14
  return reply.code(error.statusCode).send(error)
10
15
  }
11
16
 
12
- if (error.message === 'Wrong credentials' || error.message === 'Unauthorized') {
17
+ if (message === 'Wrong credentials' || message === 'Unauthorized') {
13
18
  return reply.code(403).send({
14
19
  statusCode: 403,
15
20
  error: 'Forbidden',
16
- message: error.message
21
+ message
17
22
  })
18
23
  }
19
24
 
20
- if (error.message.includes('not found')) {
25
+ if (message.includes('not found')) {
21
26
  return reply.code(404).send({
22
27
  statusCode: 404,
23
28
  error: 'Not Found',
24
- message: error.message
29
+ message
25
30
  })
26
31
  }
27
32
 
28
33
  return reply.code(500).send({
29
34
  statusCode: 500,
30
35
  error: 'Internal Server Error',
31
- message: error.message
36
+ message
32
37
  })
33
38
  }
@@ -20,6 +20,9 @@ export async function load() {
20
20
  },
21
21
  manifest: {
22
22
  enabled: false
23
+ },
24
+ cache: {
25
+ enabled: false
23
26
  }
24
27
  }
25
28
  }
@@ -3,6 +3,7 @@ import yn from '../util/yn.js'
3
3
  import type { Role, Route, ConfiguredRoute, RouteConfig } from '../../types/global.js'
4
4
  import { FastifyReply, FastifyRequest } from 'fastify'
5
5
  import { normalizePatterns } from '../util/path.js'
6
+ import { normalizeRouteCache, buildCacheHooks, cacheEnabled } from '../util/cache.js'
6
7
  import { globSync } from 'glob'
7
8
  import path from 'path'
8
9
  import { fileURLToPath } from 'url'
@@ -83,7 +84,8 @@ export function processRoute(
83
84
  roles: rs = [],
84
85
  config = {} as RouteConfig,
85
86
  middlewares = [],
86
- rateLimit
87
+ rateLimit,
88
+ cache: cacheInput
87
89
  } = route
88
90
 
89
91
  const rsp = !rs.length ? [roles.public] : rs
@@ -186,6 +188,9 @@ export function processRoute(
186
188
  tenantContext,
187
189
  rawBody,
188
190
  rateLimit,
191
+ // Per-route cache (falls back to the file-level `config.cache`); the default
192
+ // key-group is the api folder (`dir`), overridable.
193
+ cache: normalizeRouteCache(cacheInput ?? defaultConfig?.cache, dir),
189
194
  base,
190
195
  file: path.join(base, defaultConfig.controller || 'controller', handlerParts[0]),
191
196
  func: handlerParts[1],
@@ -245,13 +250,33 @@ async function applyRoutes(server: any, routes: ConfiguredRoute[]): Promise<void
245
250
  let countRoutes = 0
246
251
  for (const route of routes) {
247
252
  if (route?.enable) {
248
- const { handler, method, path, middlewares, roles, rawBody, rateLimit, base, file, func, doc, tenantContext } =
253
+ const { handler, method, path, middlewares, roles, rawBody, rateLimit, base, file, func, doc, tenantContext, cache } =
249
254
  route
250
255
 
251
256
  if (log.d) log.debug(`* Add path ${method} ${path} on handle ${handler}`)
252
257
  const midds = await loadMiddlewares(base, middlewares)
253
258
 
254
- server.route({
259
+ // Attach the cache read (preHandler, runs after auth) and write (onSend)
260
+ // hooks only when the route opts in — no overhead on uncached routes.
261
+ const cacheHooks = cache && (cache.enabled || cache.invalidates?.length) ? buildCacheHooks(cache) : null
262
+
263
+ // Courtesy log at wiring time: describe each cache-declaring route, and warn
264
+ // when a route opts in while the global master switch is off (hooks are inert).
265
+ if (cacheHooks) {
266
+ if (!cacheEnabled()) {
267
+ if (log.w)
268
+ log.warn(
269
+ `Cache 🧊 route ${method} ${path} declares cache/invalidation but global cache is disabled (options.cache.enabled) — inert`
270
+ )
271
+ } else if (log.d) {
272
+ const parts: string[] = []
273
+ if (cache?.enabled) parts.push(`read+write ttl ${cache.ttl ?? 'default'}s keyGroup '${cache.keyGroup}'`)
274
+ if (cache?.invalidates?.length) parts.push(`invalidates [${cache.invalidates.join(', ')}]`)
275
+ log.debug(`Cache 🧊 route ${method} ${path} — ${parts.join(', ')}`)
276
+ }
277
+ }
278
+
279
+ const routeDef: any = {
255
280
  method: method,
256
281
  path: path,
257
282
  schema: doc,
@@ -260,7 +285,8 @@ async function applyRoutes(server: any, routes: ConfiguredRoute[]): Promise<void
260
285
  requiredRoles: roles || [],
261
286
  rawBody: rawBody || false,
262
287
  rateLimit: rateLimit || undefined,
263
- tenantContext: tenantContext
288
+ tenantContext: tenantContext,
289
+ cache: cache || undefined
264
290
  },
265
291
  handler: async function (req: FastifyRequest, reply: FastifyReply) {
266
292
  let module
@@ -286,7 +312,16 @@ async function applyRoutes(server: any, routes: ConfiguredRoute[]): Promise<void
286
312
 
287
313
  return await module[func](req, reply)
288
314
  }
289
- })
315
+ }
316
+
317
+ if (cacheHooks?.preHandler) {
318
+ // Cache read runs before the route middlewares; auth/roles are already
319
+ // enforced in the global onRequest hook, so this is safe.
320
+ routeDef.preHandler = [cacheHooks.preHandler, ...((midds as any).preHandler || [])]
321
+ }
322
+ if (cacheHooks?.onSend) routeDef.onSend = cacheHooks.onSend
323
+
324
+ server.route(routeDef)
290
325
 
291
326
  countRoutes++
292
327
  }
@@ -313,7 +313,7 @@ function collectFields(
313
313
  const kind = crudKind(r.method, rest)
314
314
  // Write side: create/update bodies, plus a PUT/PATCH on the BASE path — the singleton
315
315
  // update (e.g. PUT /company), which crudKind classifies as 'action'. Restricted to the
316
- // base path so sub-route action payloads (e.g. /vehicles/:id/images/reorder) don't leak in.
316
+ // base path so sub-route action payloads (e.g. /posts/:id/attachments/reorder) don't leak in.
317
317
  const isSingletonWrite = rest.length === 0 && (r.method === 'PUT' || r.method === 'PATCH')
318
318
  if (kind === 'create' || kind === 'update' || isSingletonWrite) addSide(r.doc?.body, 'write')
319
319
  if (kind === 'read' || kind === 'list') {
@@ -0,0 +1,258 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /**
3
+ * In-memory LRU + TTL cache backing the per-route `cache` capability.
4
+ *
5
+ * No external dependency: a JS `Map` preserves insertion order, so LRU is
6
+ * "delete + reinsert on read" (marks most-recently-used) and "evict the first key
7
+ * on overflow" (the least-recently-used). TTL is enforced lazily on read plus a
8
+ * periodic background sweep. Entries are keyed as `keyGroup :: scope :: method url`
9
+ * where `scope` isolates by tenant / authenticated subject / role set so a cached
10
+ * response is never served across tenants, users or privilege levels.
11
+ *
12
+ * The store is configured once at boot from `global.config.options.cache`
13
+ * (see index.ts) and exposed both as `global.cache` and via the package root
14
+ * exports `invalidateCache` / `cache`.
15
+ */
16
+ import type { FastifyReply, FastifyRequest } from 'fastify'
17
+ import type { NormalizedRouteCache, RouteCache } from '../../types/global.js'
18
+
19
+ interface Entry {
20
+ value: any
21
+ expires: number // epoch ms; Infinity when no TTL
22
+ }
23
+
24
+ interface CacheSettings {
25
+ enabled: boolean
26
+ ttl: number // default TTL (seconds) for routes without an explicit ttl
27
+ maxEntries: number // LRU cap
28
+ }
29
+
30
+ // Single source of truth for the cache defaults. `enabled` is opt-in (off by
31
+ // default, consistent with the other optional features like `manifest` /
32
+ // `multi_tenant`); `ttl`/`maxEntries` are the numeric fallbacks applied per-field
33
+ // by configureCache, so no other module needs to restate them.
34
+ const DEFAULTS: CacheSettings = { enabled: false, ttl: 3600, maxEntries: 1000 }
35
+
36
+ let settings: CacheSettings = { ...DEFAULTS }
37
+ const store = new Map<string, Entry>()
38
+ let hits = 0
39
+ let misses = 0
40
+ let sweepTimer: ReturnType<typeof setInterval> | null = null
41
+
42
+ const nowMs = () => Date.now()
43
+
44
+ function startSweep(intervalMs = 60_000) {
45
+ if (sweepTimer) clearInterval(sweepTimer)
46
+ sweepTimer = setInterval(() => {
47
+ const t = nowMs()
48
+ for (const [k, e] of store) if (e.expires <= t) store.delete(k)
49
+ }, intervalMs)
50
+ // Never keep the event loop alive just for the sweep.
51
+ sweepTimer.unref?.()
52
+ }
53
+
54
+ /** (Re)configure the cache from global options and log the effective config. */
55
+ export function configureCache(opts?: CacheSettings | Partial<CacheSettings>): CacheSettings {
56
+ settings = {
57
+ // Opt-in master switch: enabled only when explicitly set to true.
58
+ enabled: opts?.enabled === true,
59
+ ttl: Number(opts?.ttl) > 0 ? Number(opts?.ttl) : DEFAULTS.ttl,
60
+ maxEntries: Number(opts?.maxEntries) > 0 ? Number(opts?.maxEntries) : DEFAULTS.maxEntries
61
+ }
62
+ store.clear()
63
+ hits = 0
64
+ misses = 0
65
+ if (settings.enabled) {
66
+ startSweep()
67
+ if (log?.i)
68
+ log.info(
69
+ `Cache 🧊 enabled — ttl ${settings.ttl}s, maxEntries ${settings.maxEntries}, strategy LRU+TTL`
70
+ )
71
+ } else {
72
+ if (sweepTimer) {
73
+ clearInterval(sweepTimer)
74
+ sweepTimer = null
75
+ }
76
+ if (log?.i) log.info('Cache 🧊 disabled')
77
+ }
78
+ return settings
79
+ }
80
+
81
+ export const cacheEnabled = () => settings.enabled
82
+ export const defaultTtl = () => settings.ttl
83
+
84
+ export function cacheGet(key: string): any {
85
+ const e = store.get(key)
86
+ if (!e) {
87
+ misses++
88
+ return undefined
89
+ }
90
+ if (e.expires <= nowMs()) {
91
+ store.delete(key)
92
+ misses++
93
+ return undefined
94
+ }
95
+ // LRU touch: re-insert to mark as most-recently used.
96
+ store.delete(key)
97
+ store.set(key, e)
98
+ hits++
99
+ return e.value
100
+ }
101
+
102
+ export function cacheSet(key: string, value: any, ttlSec?: number): void {
103
+ const ttl = Number(ttlSec) > 0 ? Number(ttlSec) : settings.ttl
104
+ if (store.has(key)) store.delete(key)
105
+ store.set(key, { value, expires: ttl > 0 ? nowMs() + ttl * 1000 : Infinity })
106
+ // Evict least-recently-used entries beyond the cap.
107
+ while (store.size > settings.maxEntries) {
108
+ const oldest = store.keys().next().value
109
+ if (oldest === undefined) break
110
+ store.delete(oldest)
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Invalidate cached entries. With no argument clears everything; otherwise removes
116
+ * every entry belonging to the given key-group(s). Returns the number removed.
117
+ */
118
+ export function invalidateCache(keyGroups?: string | string[]): number {
119
+ if (keyGroups == null) {
120
+ const n = store.size
121
+ store.clear()
122
+ if (log?.d) log.debug(`Cache 🧊 flushAll — ${n} entries removed`)
123
+ return n
124
+ }
125
+ const list = Array.isArray(keyGroups) ? keyGroups : [keyGroups]
126
+ const prefixes = list.map((g) => `${g}::`)
127
+ let n = 0
128
+ for (const k of [...store.keys()]) {
129
+ if (prefixes.some((p) => k.startsWith(p))) {
130
+ store.delete(k)
131
+ n++
132
+ }
133
+ }
134
+ if (log?.d) log.debug(`Cache 🧊 invalidate [${list.join(', ')}] — ${n} entries removed`)
135
+ return n
136
+ }
137
+
138
+ export function cacheStats() {
139
+ return { size: store.size, hits, misses, ...settings }
140
+ }
141
+
142
+ /** Facade exposed as `global.cache` and re-exported from the package root. */
143
+ export const cache = {
144
+ get: cacheGet,
145
+ set: cacheSet,
146
+ del: (key: string) => store.delete(key),
147
+ invalidate: invalidateCache,
148
+ flushAll: () => invalidateCache(),
149
+ stats: cacheStats,
150
+ enabled: cacheEnabled
151
+ }
152
+
153
+ // ---------------------------------------------------------------------------
154
+ // Route-config normalization + request scoping + Fastify hook factory
155
+ // ---------------------------------------------------------------------------
156
+
157
+ /** Normalize the authored `cache` prop (`true` | number | object) into the stored
158
+ * form, resolving the key-group to the api folder (area) when omitted. Returns
159
+ * undefined when there is nothing to do (absent/false and no invalidation). */
160
+ export function normalizeRouteCache(
161
+ input: boolean | number | RouteCache | undefined,
162
+ defaultKeyGroup: string
163
+ ): NormalizedRouteCache | undefined {
164
+ if (input == null || input === false) return undefined
165
+ const obj: RouteCache = input === true ? {} : typeof input === 'number' ? { ttl: input } : input
166
+ const enabled = obj.enabled !== false
167
+ const invalidates =
168
+ obj.invalidates == null ? undefined : Array.isArray(obj.invalidates) ? obj.invalidates : [obj.invalidates]
169
+ if (!enabled && !invalidates?.length) return undefined
170
+ return {
171
+ enabled,
172
+ ttl: typeof obj.ttl === 'number' && obj.ttl > 0 ? obj.ttl : undefined,
173
+ keyGroup: obj.keyGroup || defaultKeyGroup,
174
+ invalidates
175
+ }
176
+ }
177
+
178
+ const HIT = Symbol('volcanic.cacheHit')
179
+ const HEADER_ALLOW = /^(content-type|v-)/i
180
+
181
+ /** Scope segment: isolates cached data by tenant, authenticated subject and roles. */
182
+ function scope(req: any): string {
183
+ const tenant = req.tenant?.id ?? ''
184
+ const subject = req.user?.externalId ?? req.token?.getId?.() ?? 'anon'
185
+ const rolesList = typeof req.roles === 'function' ? req.roles() : []
186
+ const rolesKey = [...(rolesList || [])].sort().join(',')
187
+ return `${tenant}|${subject}|${rolesKey}`
188
+ }
189
+
190
+ function keyFor(req: any, keyGroup: string): string {
191
+ return `${keyGroup}::${scope(req)}::${req.method} ${req.url}`
192
+ }
193
+
194
+ /** Skip caching when a tenant is expected (multi-tenant + tenantContext) but missing,
195
+ * to avoid ever leaking data across tenants. */
196
+ function tenantMissing(req: any): boolean {
197
+ const mt = global.config?.options?.multi_tenant?.enabled
198
+ const tenantCtx = req.routeOptions?.config?.tenantContext
199
+ return Boolean(mt && tenantCtx !== false && !req.tenant)
200
+ }
201
+
202
+ /** Build the per-route read (preHandler) and write (onSend) hooks for a cached route. */
203
+ export function buildCacheHooks(routeCache: NormalizedRouteCache) {
204
+ const cacheable = routeCache.enabled === true
205
+ const keyGroup = routeCache.keyGroup
206
+ const ttl = routeCache.ttl
207
+ const invalidates = routeCache.invalidates
208
+
209
+ const preHandler = cacheable
210
+ ? async (req: FastifyRequest, reply: FastifyReply) => {
211
+ if (!cacheEnabled() || (req as any).method !== 'GET' || tenantMissing(req)) return
212
+ const hit = cacheGet(keyFor(req, keyGroup))
213
+ if (hit) {
214
+ for (const [h, v] of Object.entries(hit.headers as Record<string, any>)) reply.header(h, v as any)
215
+ ;(req as any)[HIT] = true
216
+ reply.code(hit.statusCode)
217
+ if (log?.d) log.debug(`Cache 🧊 hit ${keyGroup} ${(req as any).method} ${(req as any).url}`)
218
+ return reply.send(hit.payload)
219
+ }
220
+ if (log?.d) log.debug(`Cache 🧊 miss ${keyGroup} ${(req as any).method} ${(req as any).url}`)
221
+ }
222
+ : undefined
223
+
224
+ const onSend = async (req: FastifyRequest, reply: FastifyReply, payload: any) => {
225
+ // Master switch off: nothing to store and — on a volatile in-memory cache — nothing
226
+ // to invalidate (the store is already empty), so skip the whole hook. Also avoids
227
+ // scanning the store on every mutation when caching is globally disabled.
228
+ if (!cacheEnabled()) return payload
229
+ // Store fresh GET 2xx responses (skip replays and anything with Set-Cookie).
230
+ if (
231
+ cacheable &&
232
+ !(req as any)[HIT] &&
233
+ (req as any).method === 'GET' &&
234
+ reply.statusCode >= 200 &&
235
+ reply.statusCode < 300 &&
236
+ typeof payload === 'string' &&
237
+ !tenantMissing(req) &&
238
+ !reply.getHeader('set-cookie')
239
+ ) {
240
+ const headers: Record<string, any> = {}
241
+ const all = reply.getHeaders()
242
+ for (const h of Object.keys(all)) if (HEADER_ALLOW.test(h)) headers[h] = all[h]
243
+ cacheSet(keyFor(req, keyGroup), { payload, headers, statusCode: reply.statusCode }, ttl)
244
+ }
245
+ // Invalidate declared key-groups after a successful mutation.
246
+ if (
247
+ invalidates?.length &&
248
+ (req as any).method !== 'GET' &&
249
+ reply.statusCode >= 200 &&
250
+ reply.statusCode < 300
251
+ ) {
252
+ invalidateCache(invalidates)
253
+ }
254
+ return payload
255
+ }
256
+
257
+ return { preHandler, onSend }
258
+ }
@@ -88,21 +88,23 @@ function getTrackingConfigIfEnabled(req) {
88
88
  }
89
89
  }
90
90
 
91
- function isFieldChanged(oldValue, newValue) {
91
+ export function isFieldChanged(oldValue, newValue) {
92
92
  if ((oldValue instanceof Date || newValue instanceof Date) && oldValue != null && newValue != undefined) {
93
93
  return !dayjs(oldValue).isSame(dayjs(newValue))
94
94
  }
95
95
 
96
96
  if ((oldValue instanceof Object || newValue instanceof Object) && oldValue != null && newValue != undefined) {
97
97
  const primaryKey = global.trackingConfig?.primaryKey
98
+ // Guard the `in` operator with an object check: `'id' in 'someString'` throws
99
+ // on a string primitive, so reach the string fallback instead of crashing.
98
100
  const oldId =
99
- oldValue != null && primaryKey in oldValue
101
+ oldValue != null && typeof oldValue === 'object' && primaryKey in oldValue
100
102
  ? oldValue[primaryKey]
101
103
  : typeof oldValue === 'string'
102
104
  ? oldValue
103
105
  : undefined
104
106
  const newId =
105
- newValue != null && primaryKey in newValue
107
+ newValue != null && typeof newValue === 'object' && primaryKey in newValue
106
108
  ? newValue[primaryKey]
107
109
  : typeof newValue === 'string'
108
110
  ? newValue
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volcanicminds/backend",
3
- "version": "3.4.0",
3
+ "version": "3.5.0",
4
4
  "type": "module",
5
5
  "codename": "rome",
6
6
  "license": "MIT",
@@ -58,7 +58,8 @@
58
58
  "prod": "cd dist && node server.js",
59
59
  "start": "tsx --env-file .env server.ts",
60
60
  "dev": "tsx watch --env-file .env server.ts",
61
- "test": "npm run test:core && npm run test:typeorm",
61
+ "pretest": "npm run build",
62
+ "test": "node scripts/run-tests.mjs",
62
63
  "test:core": "cross-env AUTH_RATELIMIT_MAX=100000 PORT=2231 NODE_ENV=memory BROWSER=false JWT_SECRET=tEst0nly_k7Qx2mNp9vLrT4wYbE6sH1jD8fG3aZ5c JWT_REFRESH_SECRET=tEst0nly_R3frsh9vLrT4wYbE6sH1jD8fG3aZ5cK7 mocha --import=tsx ./test/index.spec.ts -t 100000 --exit",
63
64
  "test:typeorm": "cross-env NODE_ENV=memory MFA_DB_SECRET=unit-test-secret-please-change-32xyz mocha --import=tsx ./test/typeorm/**/*.spec.ts -t 20000 --exit",
64
65
  "test:pglite": "cross-env NODE_ENV=memory MFA_DB_SECRET=unit-test-secret-please-change-32xyz mocha --import=tsx ./test/pglite/**/*.spec.ts -t 60000 --exit",