rlz-engine 1.0.56 → 1.0.58

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
@@ -29,14 +29,15 @@ import { syncItems } from 'rlz-engine/client/sync.js'
29
29
 
30
30
  Each backend feature lives in a cohesive directory and exposes an uppercase `<FEATURE>_MODULE` object from `module.ts`. The object contains only the integration factories that feature supports. Applications invoke the factories for the integrations they want, then pass the returned facet values to `composeModules()`.
31
31
 
32
- | Module | Facets | Purpose |
33
- | --------------- | ----------------------------------------- | ------------------------------------------------------------------- |
34
- | `AUTH_MODULE` | `makeRpc(storage, options?)`, `makeCli()` | Signup/signin/session/logout RPC endpoints and admin secret command |
35
- | `HTTP_MODULE` | `makeCli(params, init)` | `http start` server command |
36
- | `LOGGER_MODULE` | `makeCli()`, `makeAdmRpc()` | Audit-log reader command and protected audit query endpoint |
37
- | `RPC_MODULE` | `makeDevCli(options)` | Generate user and administrative RPC clients during development |
32
+ | Module | Facets | Purpose |
33
+ | -------------------- | ----------------------------------------- | ------------------------------------------------------------------- |
34
+ | `AUTH_MODULE` | `makeRpc(storage, options?)`, `makeCli()` | Signup/signin/session/logout RPC endpoints and admin secret command |
35
+ | `CERTIFICATE_MODULE` | `makeCli()`, `makeAdmRpc()`, `makeAdm()` | ACME account registration and certificate status |
36
+ | `HTTP_MODULE` | `makeCli(params, options?)` | `http start` server command |
37
+ | `LOGGER_MODULE` | `makeCli()`, `makeAdmRpc()` | Audit-log reader command and protected audit query endpoint |
38
+ | `RPC_MODULE` | `makeDevCli(options)` | Generate user and administrative RPC clients during development |
38
39
 
39
- The composer groups selected operational CLI, development CLI, user RPC, and administrative RPC facets. It rejects duplicate names within each facet kind before startup. It deliberately leaves factory arguments with the application: server settings, route handlers, working directories, and generated-client paths are application-specific. The React administration UI and certificate-status module remain planned; the administrative RPC transport and audit-log endpoint are available now.
40
+ The composer groups selected operational CLI, development CLI, user RPC, and administrative RPC facets. It rejects duplicate names within each facet kind before startup. It deliberately leaves factory arguments with the application: server settings, route handlers, working directories, and generated-client paths are application-specific. The React administration UI, audit-log viewer, and certificate-status module are available as opt-in modules.
40
41
 
41
42
  ### CLI composition
42
43
 
@@ -46,12 +47,22 @@ The composer groups selected operational CLI, development CLI, user RPC, and adm
46
47
  import { CliEngine, DevCliEngine } from 'rlz-engine/back/cli/cli-engine.js'
47
48
  import { composeModules } from 'rlz-engine/back/module/composer.js'
48
49
  import { AUTH_MODULE } from 'rlz-engine/back/auth/module.js'
50
+ import { CERTIFICATE_MODULE } from 'rlz-engine/back/certificate/module.js'
49
51
  import { HTTP_MODULE } from 'rlz-engine/back/http/module.js'
50
52
  import { LOGGER_MODULE } from 'rlz-engine/back/logger/module.js'
51
53
  import { RPC_MODULE } from 'rlz-engine/back/rpc/module.js'
52
54
 
55
+ const applicationPlugin = async (server) => {
56
+ await server.register(applicationRoutes)
57
+ }
58
+
53
59
  const applicationModules = composeModules({
54
- cli: [AUTH_MODULE.makeCli(), HTTP_MODULE.makeCli(serverParams, initializeRoutes), LOGGER_MODULE.makeCli()],
60
+ cli: [
61
+ AUTH_MODULE.makeCli(),
62
+ CERTIFICATE_MODULE.makeCli(),
63
+ HTTP_MODULE.makeCli(serverParams, { plugins: [applicationPlugin] }),
64
+ LOGGER_MODULE.makeCli()
65
+ ],
55
66
  rpc: userRpcPlugins,
56
67
  admRpc: [LOGGER_MODULE.makeAdmRpc()]
57
68
  })
@@ -59,12 +70,6 @@ const applicationModules = composeModules({
59
70
  const cli = applicationModules.registerCli(new CliEngine('app.js'))
60
71
  await cli.run()
61
72
 
62
- async function initializeRoutes(server) {
63
- await applicationModules.registerRpc(server)
64
- await applicationModules.registerAdmRpc(server)
65
- // Register application-owned routes and plugins here.
66
- }
67
-
68
73
  const devModules = composeModules({
69
74
  devCli: [
70
75
  RPC_MODULE.makeDevCli({
@@ -81,7 +86,7 @@ await devCli.run()
81
86
 
82
87
  `composeModules()` accepts any combination of `cli`, `devCli`, `rpc`, and `admRpc` arrays; omit facets the application does not use. For RPC builders that need Fastify plugin options, provide `rpcOptions` or `admRpcOptions`, keyed by each builder's `name` (for example, `{ audit: { workingDirectory: appDirectory } }`). The returned object has `registerCli()`, `registerDevCli()`, `registerRpc()`, and `registerAdmRpc()` methods. RPC registration methods are asynchronous and register plugins in array order. Duplicate module or plugin names within the same category throw during composition. Operational and development commands remain separate so client generation does not need to be included in production command setup. Each engine generates nested help from module and command descriptions. For example, `app.js --help`, `app.js http --help`, and `app.js http start --help` show progressively narrower command help.
83
88
 
84
- `AUTH_MODULE.makeRpc(storage, options?)` requires an initialized `AuthStorage` and returns the authentication RPC builder. `AUTH_MODULE.makeCli(workingDirectory?)` accepts a directory or a callback returning one; it defaults to the current working directory. `HTTP_MODULE.makeCli(params, init)` accepts `RunServerParams` without `init`, or a callback that returns those settings, and the route initialization callback. `LOGGER_MODULE.makeCli(workingDirectory?)` accepts the directory containing `logs.sqlite` and defaults to the current working directory. `RPC_MODULE.makeDevCli(options)` requires at least one user or administrative RPC builder and an output path for each configured builder kind.
89
+ `AUTH_MODULE.makeRpc(storage, options?)` requires an initialized `AuthStorage` and returns the authentication RPC builder. `AUTH_MODULE.makeCli(workingDirectory?)` accepts a directory or a callback returning one; it defaults to the current working directory. `HTTP_MODULE.makeCli(params, options?)` accepts `RunServerParams` without `plugins`, or a callback that returns those settings. `options.plugins` lists Fastify plugins registered on each server; no server initialization callback is needed. `options.before` runs after settings resolve and before server startup; `options.after` runs after the server is listening and receives its shutdown function. If `before` fails, the server is not started. If `after` fails, the module shuts down the server before rethrowing. These hooks let applications attach lifecycle work without replacing the built-in HTTP command. `LOGGER_MODULE.makeCli(workingDirectory?)` accepts the directory containing `logs.sqlite` and defaults to the current working directory. `RPC_MODULE.makeDevCli(options)` requires at least one user or administrative RPC builder and an output path for each configured builder kind.
85
90
 
86
91
  ## HTTP server
87
92
 
@@ -95,13 +100,11 @@ await runServer({
95
100
  domain: 'example.com',
96
101
  certDir: './certs',
97
102
  staticDir: './dist',
98
- init: async (server) => {
99
- // Register application routes and plugins here.
100
- }
103
+ plugins: [applicationPlugin]
101
104
  })
102
105
  ```
103
106
 
104
- `domain`, `certDir`, `staticDir`, and `init` are required. Optional settings include `debug`, `unsecurePort`, `securePort`, `auditRetentionMs`, `auditMaxRecords`, `auditSqlite`, and `acmeProvider`. Development serves HTTP with CORS and static files. Production runs an HTTP-01 challenge and redirect server alongside a TLS server with HTTP/2 and HTTP/1 support, and renews certificates periodically. CORS is available only in development and does not allow credentials; production serves static files and RPC from the same HTTPS origin. The returned shutdown function closes the servers and logging storage. The `http start` CLI command keeps the process active until a termination signal.
107
+ `domain`, `certDir`, and `staticDir` are required. Optional settings include `debug`, `unsecurePort`, `securePort`, `auditRetentionMs`, `auditMaxRecords`, `auditSqlite`, `acmeProvider`, and `plugins`. Development serves HTTP with CORS and static files. Production runs an HTTP-01 challenge and redirect server alongside a TLS server with HTTP/2 and HTTP/1 support, and renews certificates periodically. CORS is available only in development and does not allow credentials; production serves static files and RPC from the same HTTPS origin. The returned shutdown function closes the servers and logging storage. The `http start` CLI command keeps the process active until a termination signal.
105
108
 
106
109
  By default, non-debug production writes audit logs to `logs.sqlite`. Development and debug mode use colored console output. Set `auditSqlite: true` (or pass `--audit-sqlite` to `http start`) to write SQLite records alongside console output. Retention defaults to 30 days and the maximum record count defaults to 100,000.
107
110
 
@@ -137,11 +140,12 @@ export const adminRpc = admRpc('operations').add({
137
140
  })
138
141
  ```
139
142
 
140
- Register the generated Fastify plugins from the application initialization callback:
143
+ Pass the generated Fastify plugins to `HTTP_MODULE`; the engine registers them on both development and production servers:
141
144
 
142
145
  ```ts
143
- await server.register(userRpc.makeFastifyPlugin())
144
- await server.register(adminRpc.makeFastifyPlugin())
146
+ HTTP_MODULE.makeCli(serverParams, {
147
+ plugins: [userRpc.makeFastifyPlugin(), adminRpc.makeFastifyPlugin()]
148
+ })
145
149
  ```
146
150
 
147
151
  User endpoints are served at `/rpc/<plugin>_<endpoint>_v<version>`. Authenticated user routes use cookie sessions and require both a session authenticator and a CSRF verifier.
@@ -0,0 +1,3 @@
1
+ import type { CliModule } from '../cli/cli-engine.js';
2
+ /** Create the ACME account registration command. */
3
+ export declare function makeCertificateCli(): CliModule;
@@ -0,0 +1,17 @@
1
+ import { registerAcmeAccountCli } from 'fastify-acme';
2
+ /** Create the ACME account registration command. */
3
+ export function makeCertificateCli() {
4
+ return {
5
+ name: 'certificates',
6
+ description: 'Manage server certificate setup.',
7
+ commands: {
8
+ 'register-acme': {
9
+ description: 'Register the ACME account used for TLS certificates.',
10
+ handler: async () => {
11
+ await registerAcmeAccountCli();
12
+ }
13
+ }
14
+ }
15
+ };
16
+ }
17
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/back/certificate/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAIrD,oDAAoD;AACpD,MAAM,UAAU,kBAAkB;IAC9B,OAAO;QACH,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE;YACN,eAAe,EAAE;gBACb,WAAW,EAAE,sDAAsD;gBACnE,OAAO,EAAE,KAAK,IAAI,EAAE;oBAChB,MAAM,sBAAsB,EAAE,CAAA;gBAClC,CAAC;aACJ;SACJ;KACJ,CAAA;AACL,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { AdmModule } from '../../client/adm/admin.js';
2
2
  import { makeCertificateAdmRpc } from './adm-rpc.js';
3
+ import { makeCertificateCli } from './cli.js';
3
4
  export interface CertificateModuleOptions {
4
5
  certDir: string;
5
6
  domain: string;
@@ -7,6 +8,7 @@ export interface CertificateModuleOptions {
7
8
  declare function makeAdm(): AdmModule;
8
9
  /** TLS certificate status integrations. */
9
10
  export declare const CERTIFICATE_MODULE: {
11
+ makeCli: typeof makeCertificateCli;
10
12
  makeAdmRpc: typeof makeCertificateAdmRpc;
11
13
  makeAdm: typeof makeAdm;
12
14
  };
@@ -1,6 +1,7 @@
1
1
  import { admRpcCall } from '../../client/rpc.js';
2
2
  import { CertificateStatus } from '../../client/adm/certificate.js';
3
3
  import { makeCertificateAdmRpc } from './adm-rpc.js';
4
+ import { makeCertificateCli } from './cli.js';
4
5
  function makeAdm() {
5
6
  return {
6
7
  name: 'certificate',
@@ -13,6 +14,7 @@ function makeAdm() {
13
14
  }
14
15
  /** TLS certificate status integrations. */
15
16
  export const CERTIFICATE_MODULE = {
17
+ makeCli: makeCertificateCli,
16
18
  makeAdmRpc: makeCertificateAdmRpc,
17
19
  makeAdm
18
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/back/certificate/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAOpD,SAAS,OAAO;IACZ,OAAO;QACH,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QAC1D,CAAC;KACJ,CAAA;AACL,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,UAAU,EAAE,qBAAqB;IACjC,OAAO;CACV,CAAA"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/back/certificate/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAO7C,SAAS,OAAO;IACZ,OAAO;QACH,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QAC1D,CAAC;KACJ,CAAA;AACL,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,OAAO,EAAE,kBAAkB;IAC3B,UAAU,EAAE,qBAAqB;IACjC,OAAO;CACV,CAAA"}
@@ -1,7 +1,17 @@
1
- import { InitServerFuncType, RunServerParams } from './server.js';
1
+ import type { FastifyPluginAsync, FastifyPluginCallback } from 'fastify';
2
+ import { RunServerParams } from './server.js';
2
3
  import { CliModule } from '../cli/cli-engine.js';
3
- /** Fastify lifecycle feature; applications provide deployment settings and route setup. */
4
+ export type HttpServerShutdown = () => Promise<void>;
5
+ export interface HttpModuleOptions {
6
+ /** Fastify plugins registered on each server before application routes. */
7
+ plugins?: readonly (FastifyPluginAsync | FastifyPluginCallback)[];
8
+ /** Runs after resolving server settings and before creating the server. */
9
+ before?: () => void | Promise<void>;
10
+ /** Runs after the server is listening. */
11
+ after?: (shutdown: HttpServerShutdown) => void | Promise<void>;
12
+ }
13
+ /** Fastify lifecycle feature; applications provide deployment settings and plugins. */
4
14
  export declare const HTTP_MODULE: {
5
15
  /** Create the `http start` command using application-owned server configuration. */
6
- makeCli(params: Omit<RunServerParams, 'init'> | (() => Omit<RunServerParams, 'init'>), init: InitServerFuncType): CliModule;
16
+ makeCli(params: Omit<RunServerParams, 'plugins'> | (() => Omit<RunServerParams, 'plugins'>), options?: HttpModuleOptions): CliModule;
7
17
  };
@@ -1,15 +1,15 @@
1
1
  import { flag } from 'cmd-ts';
2
2
  import { runServer } from './server.js';
3
- /** Fastify lifecycle feature; applications provide deployment settings and route setup. */
3
+ /** Fastify lifecycle feature; applications provide deployment settings and plugins. */
4
4
  export const HTTP_MODULE = {
5
5
  /** Create the `http start` command using application-owned server configuration. */
6
- makeCli(params, init) {
6
+ makeCli(params, options = {}) {
7
7
  return {
8
8
  name: 'http',
9
9
  description: 'Start the application HTTP server.',
10
10
  commands: {
11
11
  start: {
12
- description: 'Start the Fastify server using the deployment settings and route initialization supplied by the application. The process remains active until it receives a termination signal.',
12
+ description: 'Start the Fastify server using the deployment settings and plugins supplied by the application. The process remains active until it receives a termination signal.',
13
13
  args: {
14
14
  debug: flag({ long: 'debug', description: 'Enable debug logging.' }),
15
15
  auditSqlite: flag({
@@ -19,12 +19,20 @@ export const HTTP_MODULE = {
19
19
  },
20
20
  handler: async ({ debug, auditSqlite }) => {
21
21
  const serverParams = typeof params === 'function' ? params() : params;
22
- await runServer({
22
+ await options.before?.();
23
+ const shutdown = await runServer({
23
24
  ...serverParams,
24
25
  debug: debug || serverParams.debug,
25
26
  auditSqlite: auditSqlite || serverParams.auditSqlite,
26
- init
27
+ plugins: options.plugins
27
28
  });
29
+ try {
30
+ await options.after?.(shutdown);
31
+ }
32
+ catch (error) {
33
+ await shutdown();
34
+ throw error;
35
+ }
28
36
  }
29
37
  }
30
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/back/http/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,OAAO,EAAuC,SAAS,EAAE,MAAM,aAAa,CAAA;AAG5E,2FAA2F;AAC3F,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,oFAAoF;IACpF,OAAO,CAAC,MAA6E,EAAE,IAAwB;QAC3G,OAAO;YACH,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE;gBACN,KAAK,EAAE;oBACH,WAAW,EACP,iLAAiL;oBACrL,IAAI,EAAE;wBACF,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;wBACpE,WAAW,EAAE,IAAI,CAAC;4BACd,IAAI,EAAE,cAAc;4BACpB,WAAW,EAAE,kEAAkE;yBAClF,CAAC;qBACL;oBACD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;wBACtC,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;wBACrE,MAAM,SAAS,CAAC;4BACZ,GAAG,YAAY;4BACf,KAAK,EAAE,KAAK,IAAI,YAAY,CAAC,KAAK;4BAClC,WAAW,EAAE,WAAW,IAAI,YAAY,CAAC,WAAW;4BACpD,IAAI;yBACP,CAAC,CAAA;oBACN,CAAC;iBACJ;aACJ;SACJ,CAAA;IACL,CAAC;CACJ,CAAA"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/back/http/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAG7B,OAAO,EAAmB,SAAS,EAAE,MAAM,aAAa,CAAA;AAcxD,uFAAuF;AACvF,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,oFAAoF;IACpF,OAAO,CACH,MAAmF,EACnF,OAAO,GAAsB,EAAE;QAE/B,OAAO;YACH,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE;gBACN,KAAK,EAAE;oBACH,WAAW,EACP,oKAAoK;oBACxK,IAAI,EAAE;wBACF,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;wBACpE,WAAW,EAAE,IAAI,CAAC;4BACd,IAAI,EAAE,cAAc;4BACpB,WAAW,EAAE,kEAAkE;yBAClF,CAAC;qBACL;oBACD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;wBACtC,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;wBACrE,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAA;wBACxB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC;4BAC7B,GAAG,YAAY;4BACf,KAAK,EAAE,KAAK,IAAI,YAAY,CAAC,KAAK;4BAClC,WAAW,EAAE,WAAW,IAAI,YAAY,CAAC,WAAW;4BACpD,OAAO,EAAE,OAAO,CAAC,OAAO;yBAC3B,CAAC,CAAA;wBACF,IAAI,CAAC;4BACD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAA;wBACnC,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACb,MAAM,QAAQ,EAAE,CAAA;4BAChB,MAAM,KAAK,CAAA;wBACf,CAAC;oBACL,CAAC;iBACJ;aACJ;SACJ,CAAA;IACL,CAAC;CACJ,CAAA"}
@@ -1,6 +1,5 @@
1
- import { FastifyBaseLogger, FastifyInstance, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase } from 'fastify';
1
+ import { FastifyPluginAsync, FastifyPluginCallback } from 'fastify';
2
2
  import { type AcmeProvider } from 'fastify-acme';
3
- export type InitServerFuncType = <S extends RawServerBase>(server: FastifyInstance<S, RawRequestDefaultExpression<S>, RawReplyDefaultExpression<S>, FastifyBaseLogger>) => Promise<void>;
4
3
  export interface RunServerParams {
5
4
  production: boolean;
6
5
  debug?: boolean;
@@ -17,6 +16,7 @@ export interface RunServerParams {
17
16
  /** Certificate authority used for ACME issuance and renewal. Defaults to Let's Encrypt. */
18
17
  acmeProvider?: AcmeProvider;
19
18
  staticDir: string;
20
- init: InitServerFuncType;
19
+ /** Application routes and integrations, installed on each server instance. */
20
+ plugins?: readonly (FastifyPluginAsync | FastifyPluginCallback)[];
21
21
  }
22
- export declare function runServer({ production, debug, domain, certDir, auditRetentionMs, auditMaxRecords, auditSqlite, acmeProvider, staticDir, securePort, unsecurePort, init }: RunServerParams): Promise<() => Promise<void>>;
22
+ export declare function runServer({ production, debug, domain, certDir, auditRetentionMs, auditMaxRecords, auditSqlite, acmeProvider, staticDir, securePort, unsecurePort, plugins }: RunServerParams): Promise<() => Promise<void>>;
@@ -15,7 +15,7 @@ import { getSystemLogger } from '../logger/system-logger.js';
15
15
  const DEFAULT_AUDIT_RETENTION_MS = 30 * 24 * 60 * 60 * 1000;
16
16
  const DEFAULT_AUDIT_MAX_RECORDS = 100_000;
17
17
  installIntoGlobal();
18
- export async function runServer({ production, debug = false, domain, certDir, auditRetentionMs = DEFAULT_AUDIT_RETENTION_MS, auditMaxRecords = DEFAULT_AUDIT_MAX_RECORDS, auditSqlite = false, acmeProvider, staticDir, securePort, unsecurePort, init }) {
18
+ export async function runServer({ production, debug = false, domain, certDir, auditRetentionMs = DEFAULT_AUDIT_RETENTION_MS, auditMaxRecords = DEFAULT_AUDIT_MAX_RECORDS, auditSqlite = false, acmeProvider, staticDir, securePort, unsecurePort, plugins = [] }) {
19
19
  const sqliteConfig = { path: path.resolve('logs.sqlite'), retentionMs: auditRetentionMs, maxRecords: auditMaxRecords };
20
20
  const auditLoggerConfig = production && !debug
21
21
  ? { mode: 'sqlite', ...sqliteConfig }
@@ -43,7 +43,7 @@ export async function runServer({ production, debug = false, domain, certDir, au
43
43
  await httpServer.register(fastifyResponseValidation, {
44
44
  ajv: { plugins: [configureAjvFormats], useDefaults: false, coerceTypes: false, allErrors: true, verbose: true }
45
45
  });
46
- await init(httpServer);
46
+ await registerPlugins(httpServer, plugins);
47
47
  addStaticEndpoints(httpServer, staticDir);
48
48
  await httpServer.listen({ port: unsecurePort ?? 8080 });
49
49
  return async () => {
@@ -84,7 +84,7 @@ export async function runServer({ production, debug = false, domain, certDir, au
84
84
  await httpsServer.register(fastifyResponseValidation, {
85
85
  ajv: { plugins: [configureAjvFormats], useDefaults: false, coerceTypes: false, allErrors: true, verbose: true }
86
86
  });
87
- await init(httpsServer);
87
+ await registerPlugins(httpsServer, plugins);
88
88
  httpsServer.all('/rpc/*', async () => {
89
89
  return httpErrors.notFound();
90
90
  });
@@ -105,6 +105,11 @@ export async function runServer({ production, debug = false, domain, certDir, au
105
105
  throw error;
106
106
  }
107
107
  }
108
+ async function registerPlugins(server, plugins) {
109
+ for (const plugin of plugins) {
110
+ await server.register(plugin);
111
+ }
112
+ }
108
113
  function addStaticEndpoints(server, staticPath) {
109
114
  const absStaticPath = path.resolve(staticPath);
110
115
  const absIndexPath = path.join(absStaticPath, 'index.html');
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/back/http/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/back/http/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rlz-engine",
3
- "version": "1.0.56",
3
+ "version": "1.0.58",
4
4
  "description": "Deps and tools for my style of development",
5
5
  "engines": {
6
6
  "node": ">=22.13.0"