@zintrust/core 0.1.39 → 0.1.40

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.
Files changed (33) hide show
  1. package/package.json +1 -1
  2. package/src/boot/Application.d.ts.map +1 -1
  3. package/src/boot/Application.js +98 -70
  4. package/src/boot/bootstrap.js +2 -6
  5. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  6. package/src/cli/commands/StartCommand.js +16 -4
  7. package/src/cli/utils/EnvFileLoader.d.ts +2 -1
  8. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
  9. package/src/cli/utils/EnvFileLoader.js +8 -8
  10. package/src/cli/utils/spawn.d.ts.map +1 -1
  11. package/src/cli/utils/spawn.js +17 -10
  12. package/src/common/ExternalServiceUtils.d.ts.map +1 -1
  13. package/src/common/ExternalServiceUtils.js +7 -2
  14. package/src/config/env.d.ts +3 -0
  15. package/src/config/env.d.ts.map +1 -1
  16. package/src/config/env.js +4 -1
  17. package/src/config/logger.d.ts.map +1 -1
  18. package/src/config/logger.js +60 -16
  19. package/src/config/redis.d.ts.map +1 -1
  20. package/src/config/type.d.ts +1 -0
  21. package/src/config/type.d.ts.map +1 -1
  22. package/src/index.js +3 -3
  23. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  24. package/src/middleware/CsrfMiddleware.js +26 -11
  25. package/src/security/CsrfTokenManager.d.ts +18 -9
  26. package/src/security/CsrfTokenManager.d.ts.map +1 -1
  27. package/src/security/CsrfTokenManager.js +192 -11
  28. package/src/templates/project/basic/app/Middleware/index.ts.tpl +1 -1
  29. package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts.map +1 -1
  30. package/src/toolkit/Secrets/providers/AwsSecretsManager.js +4 -2
  31. package/src/tools/redis/RedisKeyManager.d.ts +3 -0
  32. package/src/tools/redis/RedisKeyManager.d.ts.map +1 -1
  33. package/src/tools/redis/RedisKeyManager.js +15 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zintrust/core",
3
- "version": "0.1.39",
3
+ "version": "0.1.40",
4
4
  "description": "Production-grade TypeScript backend framework for JavaScript",
5
5
  "homepage": "https://zintrust.com",
6
6
  "repository": {
@@ -1 +1 @@
1
- {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/boot/Application.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOrE,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,qBAAqB,CAAC;AAK3D,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC;IACpB,aAAa,IAAI,OAAO,CAAC;IACzB,YAAY,IAAI,OAAO,CAAC;IACxB,SAAS,IAAI,OAAO,CAAC;IACrB,cAAc,IAAI,MAAM,CAAC;IACzB,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,WAAW,IAAI,MAAM,CAAC;CACvB;AA6ZD;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM,GAAG,YAAY;EA0CvC,CAAC;AAEH,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/boot/Application.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOrE,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,qBAAqB,CAAC;AAK3D,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC;IACpB,aAAa,IAAI,OAAO,CAAC;IACzB,YAAY,IAAI,OAAO,CAAC;IACxB,SAAS,IAAI,OAAO,CAAC;IACrB,cAAc,IAAI,MAAM,CAAC;IACzB,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,WAAW,IAAI,MAAM,CAAC;CACvB;AAicD;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM,GAAG,YAAY;EA0CvC,CAAC;AAEH,eAAe,WAAW,CAAC"}
@@ -56,82 +56,110 @@ const registerCoreInstances = (params) => {
56
56
  params.container.singleton('container', params.container);
57
57
  params.container.singleton('shutdownManager', params.shutdownManager);
58
58
  };
59
- const registerFrameworkShutdownHooks = (shutdownManager) => {
60
- // Register framework-level shutdown hooks for long-lived resources
61
- // ConnectionManager may not be initialized; shutdownIfInitialized is safe
62
- // Use dynamic import without top-level await to avoid transforming the module into an async module
63
- import('../orm/ConnectionManager.js')
64
- .then((mod) => {
65
- shutdownManager.add(async () => mod.ConnectionManager.shutdownIfInitialized());
66
- })
67
- .catch(() => {
68
- /* ignore import failures in restrictive runtimes */
69
- });
70
- import('../orm/Database.js')
71
- .then((mod) => {
72
- shutdownManager.add(() => mod.resetDatabase());
73
- })
74
- .catch(() => {
75
- /* ignore import failures in restrictive runtimes */
76
- });
77
- import('../cache/Cache.js')
78
- .then((mod) => {
79
- shutdownManager.add(() => mod.Cache.reset());
80
- })
81
- .catch(() => {
82
- /* ignore import failures in restrictive runtimes */
83
- });
84
- // Flush file logging streams
85
- import('../config/FileLogWriter.js')
86
- .then((mod) => {
87
- shutdownManager.add(() => mod.FileLogWriter.flush());
88
- })
89
- .catch(() => {
90
- /* ignore import failures in restrictive runtimes */
91
- });
92
- import('../tools/broadcast/BroadcastRegistry.js')
93
- .then((mod) => {
94
- shutdownManager.add(() => mod.BroadcastRegistry.reset());
95
- })
96
- .catch(() => {
97
- /* ignore import failures in restrictive runtimes */
98
- });
99
- import('../tools/storage/StorageDiskRegistry.js')
100
- .then((mod) => {
101
- shutdownManager.add(() => mod.StorageDiskRegistry.reset());
102
- })
103
- .catch(() => {
104
- /* ignore import failures in restrictive runtimes */
59
+ /**
60
+ * Helper: Register ConnectionManager shutdown hook
61
+ */
62
+ const registerConnectionManagerHook = (shutdownManager) => {
63
+ shutdownManager.add(async () => {
64
+ try {
65
+ const mod = await import('../orm/ConnectionManager.js');
66
+ await mod.ConnectionManager.shutdownIfInitialized();
67
+ }
68
+ catch {
69
+ /* ignore import failures in restrictive runtimes */
70
+ }
105
71
  });
106
- import('../tools/notification/NotificationChannelRegistry.js')
107
- .then((mod) => {
108
- shutdownManager.add(() => mod.NotificationChannelRegistry.reset());
109
- })
110
- .catch(() => {
111
- /* ignore import failures in restrictive runtimes */
72
+ };
73
+ /**
74
+ * Helper: Register Worker management system shutdown hook
75
+ */
76
+ const registerWorkerShutdownHook = async (shutdownManager) => {
77
+ // Ensure worker management system is asked to shutdown BEFORE databases are reset.
78
+ // This prevents workers from trying to access DB connections that have already
79
+ // been closed by subsequent shutdown hooks.
80
+ shutdownManager.add(async () => {
81
+ try {
82
+ const mod = (await import('@zintrust/workers'));
83
+ const isShuttingDown = typeof mod.WorkerShutdown.isShuttingDown === 'function'
84
+ ? mod.WorkerShutdown.isShuttingDown()
85
+ : (mod.WorkerShutdown.getShutdownState?.().isShuttingDown ?? false);
86
+ const completedAt = mod.WorkerShutdown.getShutdownState?.().completedAt ?? null;
87
+ if (isShuttingDown || completedAt !== null)
88
+ return;
89
+ await mod.WorkerShutdown.shutdown({
90
+ signal: 'APP_SHUTDOWN',
91
+ timeout: 5000,
92
+ forceExit: false,
93
+ });
94
+ }
95
+ catch {
96
+ /* ignore import failures in restrictive runtimes */
97
+ }
112
98
  });
113
- import('../tools/mail/MailDriverRegistry.js')
114
- .then((mod) => {
115
- shutdownManager.add(() => mod.MailDriverRegistry.reset());
116
- })
117
- .catch(() => {
118
- /* ignore import failures in restrictive runtimes */
99
+ return Promise.resolve(); // NOSONAR
100
+ };
101
+ /**
102
+ * Helper: Register Database reset hook
103
+ */
104
+ const registerDatabaseResetHook = (shutdownManager) => {
105
+ shutdownManager.add(async () => {
106
+ try {
107
+ const mod = await import('../orm/Database.js');
108
+ mod.resetDatabase();
109
+ }
110
+ catch {
111
+ /* ignore import failures in restrictive runtimes */
112
+ }
119
113
  });
120
- import('../tools/queue/Queue.js')
121
- .then((mod) => {
122
- shutdownManager.add(() => mod.Queue.reset());
123
- })
124
- .catch(() => {
125
- /* ignore import failures in restrictive runtimes */
114
+ };
115
+ /**
116
+ * Helper: Register generic reset hook for modules with reset() method
117
+ */
118
+ const registerResetHook = (shutdownManager, modulePath, exportName) => {
119
+ shutdownManager.add(async () => {
120
+ try {
121
+ const mod = (await import(modulePath));
122
+ const resetModule = mod[exportName];
123
+ if (resetModule?.reset) {
124
+ resetModule.reset();
125
+ }
126
+ }
127
+ catch {
128
+ /* ignore import failures in restrictive runtimes */
129
+ }
126
130
  });
127
- import('@zintrust/workers')
128
- .then((mod) => {
129
- shutdownManager.add(async () => mod.WorkerShutdown.shutdown({ signal: 'APP_SHUTDOWN', timeout: 5000, forceExit: false }));
130
- })
131
- .catch(() => {
132
- /* ignore import failures in restrictive runtimes */
131
+ };
132
+ /**
133
+ * Helper: Register FileLogWriter flush hook
134
+ */
135
+ const registerFileLogFlushHook = (shutdownManager) => {
136
+ shutdownManager.add(async () => {
137
+ try {
138
+ const mod = await import('../config/FileLogWriter.js');
139
+ mod.FileLogWriter.flush();
140
+ }
141
+ catch {
142
+ /* ignore import failures in restrictive runtimes */
143
+ }
133
144
  });
134
145
  };
146
+ const registerFrameworkShutdownHooks = (shutdownManager) => {
147
+ // Register framework-level shutdown hooks for long-lived resources
148
+ registerConnectionManagerHook(shutdownManager);
149
+ // Ensure worker management system is asked to shutdown BEFORE databases are reset
150
+ void registerWorkerShutdownHook(shutdownManager);
151
+ // Database and cache reset
152
+ registerDatabaseResetHook(shutdownManager);
153
+ registerResetHook(shutdownManager, '@cache/Cache', 'Cache');
154
+ // File logging
155
+ registerFileLogFlushHook(shutdownManager);
156
+ // Registry resets
157
+ registerResetHook(shutdownManager, '@broadcast/BroadcastRegistry', 'BroadcastRegistry');
158
+ registerResetHook(shutdownManager, '@storage/StorageDiskRegistry', 'StorageDiskRegistry');
159
+ registerResetHook(shutdownManager, '@notification/NotificationChannelRegistry', 'NotificationChannelRegistry');
160
+ registerResetHook(shutdownManager, '@mail/MailDriverRegistry', 'MailDriverRegistry');
161
+ registerResetHook(shutdownManager, '@tools/queue/Queue', 'Queue');
162
+ };
135
163
  const tryImportRoutesFromAppBase = async (resolvedBasePath) => {
136
164
  if (resolvedBasePath === '')
137
165
  return undefined;
@@ -103,9 +103,7 @@ const gracefulShutdown = async (signal) => {
103
103
  // Shutdown worker management system FIRST (before database closes)
104
104
  if (appConfig.detectRuntime() === 'nodejs' || appConfig.detectRuntime() === 'lambda') {
105
105
  try {
106
- const { createRequire } = await import('../node-singletons/module.js');
107
- const require = createRequire(import.meta.url);
108
- const workers = require('@zintrust/workers');
106
+ const workers = await import('@zintrust/workers');
109
107
  const workerBudgetMs = Math.min(15000, remainingMs());
110
108
  await withTimeout(workers.WorkerShutdown.shutdown({
111
109
  signal,
@@ -142,9 +140,7 @@ async function useWorkerStarter() {
142
140
  // Initialize worker management system
143
141
  let workerInit = null;
144
142
  try {
145
- const { createRequire } = await import('../node-singletons/module.js');
146
- const require = createRequire(import.meta.url);
147
- const workers = require('@zintrust/workers');
143
+ const workers = await import('@zintrust/workers');
148
144
  if (workers?.WorkerInit !== undefined) {
149
145
  workerInit = workers.WorkerInit;
150
146
  await workers.WorkerInit.initialize({
@@ -1 +1 @@
1
- {"version":3,"file":"StartCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/StartCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAqavF,eAAO,MAAM,YAAY;cACb,YAAY;EAyBtB,CAAC"}
1
+ {"version":3,"file":"StartCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/StartCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAobvF,eAAO,MAAM,YAAY;cACb,YAAY;EAyBtB,CAAC"}
@@ -21,12 +21,12 @@ const normalizeMode = (value) => {
21
21
  return 'development';
22
22
  };
23
23
  const resolveModeFromAppMode = () => {
24
- const raw = readEnvString('APP_MODE').trim();
24
+ const raw = readEnvString('NODE_ENV').trim();
25
25
  const normalized = raw.toLowerCase();
26
26
  if (normalized === 'production' || normalized === 'pro' || normalized === 'prod') {
27
27
  return 'production';
28
28
  }
29
- // Per spec: any other APP_MODE is treated as development.
29
+ // Per spec: any other NODE_ENV is treated as development.
30
30
  return 'development';
31
31
  };
32
32
  const resolveMode = (options) => {
@@ -159,12 +159,24 @@ const resolveNodeDevCommand = (cwd, packageJson) => {
159
159
  };
160
160
  const resolveNodeProdCommand = (cwd) => {
161
161
  const compiledBoot = path.join(cwd, 'dist/src/boot/bootstrap.js');
162
+ const runFromSourceEnv = process.env['ZINTRUST_RUN_FROM_SOURCE'] ?? '';
163
+ const runFromSource = runFromSourceEnv === '1' || runFromSourceEnv.toLowerCase() === 'true';
162
164
  let compiled;
163
- if (existsSync(compiledBoot)) {
165
+ if (existsSync(compiledBoot) && !runFromSource) {
164
166
  compiled = 'dist/src/boot/bootstrap.js';
165
167
  }
168
+ // If compiled app isn't available (or the env forces running from source),
169
+ // fall back to running the source entry with `tsx` so developers can test
170
+ // core files with production semantics without building.
166
171
  if (compiled === undefined) {
167
- throw ErrorFactory.createCliError("Error: Compiled app not found at dist/src/boot/bootstrap.js Run 'npm run build' first.");
172
+ const bootstrap = resolveBootstrapEntryTs(cwd);
173
+ if (bootstrap !== undefined) {
174
+ return { command: 'tsx', args: [bootstrap] };
175
+ }
176
+ if (existsSync(path.join(cwd, 'src/index.ts'))) {
177
+ return { command: 'tsx', args: ['src/index.ts'] };
178
+ }
179
+ throw ErrorFactory.createCliError("Error: Compiled app not found at dist/src/boot/bootstrap.js. Run 'npm run build' first or set ZINTRUST_RUN_FROM_SOURCE=1 to run source in production.");
168
180
  }
169
181
  return { command: 'node', args: [compiled] };
170
182
  };
@@ -1,3 +1,4 @@
1
+ type node_env = 'development' | 'production' | 'testing';
1
2
  type LoadOptions = {
2
3
  cwd?: string;
3
4
  overrideExisting?: boolean;
@@ -7,7 +8,7 @@ type LoadState = {
7
8
  mode?: string;
8
9
  };
9
10
  type CliOverrides = {
10
- nodeEnv?: 'development' | 'production' | 'testing';
11
+ nodeEnv?: node_env;
11
12
  port?: number;
12
13
  runtime?: string;
13
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EnvFileLoader.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/EnvFileLoader.ts"],"names":[],"mappings":"AAgHA,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAsFF,eAAO,MAAM,aAAa;qBA7DH,WAAW,KAAQ,SAAS;wBA8B1B,SAAS;mCAEI,YAAY,KAAG,IAAI;oBA2BpC,SAAS;EAO5B,CAAC"}
1
+ {"version":3,"file":"EnvFileLoader.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/EnvFileLoader.ts"],"names":[],"mappings":"AAQA,KAAK,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAoGzD,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AA2FF,eAAO,MAAM,aAAa;qBAlEH,WAAW,KAAQ,SAAS;wBAmC1B,SAAS;mCAEI,YAAY,KAAG,IAAI;oBA2BpC,SAAS;EAO5B,CAAC"}
@@ -5,9 +5,9 @@ const normalizeAppMode = (value) => {
5
5
  if (normalized === 'production' || normalized === 'pro' || normalized === 'prod')
6
6
  return 'production';
7
7
  if (normalized === 'dev' || normalized === 'development')
8
- return 'dev';
8
+ return 'development';
9
9
  // Per spec: any other value is treated as development.
10
- return 'dev';
10
+ return 'development';
11
11
  };
12
12
  const stripInlineComment = (value) => {
13
13
  let inSingle = false;
@@ -69,10 +69,6 @@ const applyToProcessEnv = (values, overrideExisting) => {
69
69
  if (typeof process.env['PORT'] !== 'string' && typeof process.env['APP_PORT'] === 'string') {
70
70
  process.env['PORT'] = process.env['APP_PORT'];
71
71
  }
72
- if (typeof process.env['NODE_ENV'] !== 'string' && typeof process.env['APP_MODE'] === 'string') {
73
- const mode = normalizeAppMode(process.env['APP_MODE']);
74
- process.env['NODE_ENV'] = mode === 'production' ? 'production' : 'development';
75
- }
76
72
  };
77
73
  const readEnvFileIfExists = (cwd, filename) => {
78
74
  const fullPath = join(cwd, filename);
@@ -82,11 +78,11 @@ const readEnvFileIfExists = (cwd, filename) => {
82
78
  return parseEnvFile(raw);
83
79
  };
84
80
  const resolveAppMode = (cwd) => {
85
- const existing = process.env['APP_MODE'];
81
+ const existing = process.env['NODE_ENV'];
86
82
  if (typeof existing === 'string' && existing.trim() !== '')
87
83
  return normalizeAppMode(existing);
88
84
  const fromDotEnv = readEnvFileIfExists(cwd, '.env');
89
- const value = fromDotEnv?.['APP_MODE'];
85
+ const value = fromDotEnv?.['NODE_ENV'];
90
86
  if (typeof value === 'string' && value.trim() !== '')
91
87
  return normalizeAppMode(value);
92
88
  return undefined;
@@ -132,6 +128,10 @@ const load = (options = {}) => {
132
128
  // .env is primary: overlays only fill missing values and never override base.
133
129
  applyToProcessEnv(parsed, baseApplied ? false : overrideExisting);
134
130
  }
131
+ // Set NODE_ENV to the normalized mode if we have one (after applying files)
132
+ if (mode !== undefined) {
133
+ process.env['NODE_ENV'] = mode;
134
+ }
135
135
  cached = { loadedFiles: files, mode };
136
136
  return cached;
137
137
  };
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/spawn.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA8BD,eAAO,MAAM,SAAS;wBACM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;EAwE7D,CAAC"}
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/spawn.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA8BD,eAAO,MAAM,SAAS;wBACM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;EA+E7D,CAAC"}
@@ -58,12 +58,21 @@ export const SpawnUtil = Object.freeze({
58
58
  throw wrapped;
59
59
  }
60
60
  };
61
- const onSigint = () => forwardSignal('SIGINT');
62
- const onSigterm = () => forwardSignal('SIGTERM');
63
- if (forwardSignals) {
64
- process.on('SIGINT', onSigint);
65
- process.on('SIGTERM', onSigterm);
66
- }
61
+ const onSigint = () => {
62
+ if (forwardSignals) {
63
+ forwardSignal('SIGINT');
64
+ }
65
+ // If not forwarding, handle to prevent the parent from exiting before the child
66
+ // finishes its graceful shutdown (child receives SIGINT directly in TTY).
67
+ };
68
+ const onSigterm = () => {
69
+ if (forwardSignals) {
70
+ forwardSignal('SIGTERM');
71
+ }
72
+ // Same rationale as SIGINT: keep parent alive while waiting for child to exit.
73
+ };
74
+ process.on('SIGINT', onSigint);
75
+ process.on('SIGTERM', onSigterm);
67
76
  try {
68
77
  const result = await new Promise((resolve, reject) => {
69
78
  child.once('error', (error) => {
@@ -83,10 +92,8 @@ export const SpawnUtil = Object.freeze({
83
92
  throw ErrorFactory.createTryCatchError('Failed to spawn child process', error);
84
93
  }
85
94
  finally {
86
- if (forwardSignals) {
87
- process.off('SIGINT', onSigint);
88
- process.off('SIGTERM', onSigterm);
89
- }
95
+ process.off('SIGINT', onSigint);
96
+ process.off('SIGTERM', onSigterm);
90
97
  }
91
98
  },
92
99
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalServiceUtils.d.ts","sourceRoot":"","sources":["../../../src/common/ExternalServiceUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,iBAAa,KAAG,MAS1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,MAAM,EAAE,KACjB,IAWF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,KAAG,KAEjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,KAAK,MAAM,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,QAAQ,CAcnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAChC,SAAS,OAAO,EAChB,OAAO,CAAC,EACR,QAAQ,MAAM,KACb;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAY9C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;iBACU,MAAM;IAMnB;;OAEG;oBACa,MAAM;IAItB;;OAEG;8BACuB,MAAM,GAAG,OAAO;IAI1C;;OAEG;gCAEO,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,eACpD,MAAM,UACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;IAYjC;;OAEG;+BAEO,WAAW,GAAG,WAAW,eACpB,MAAM,SACZ,KAAK,UACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;CASlC,CAAC"}
1
+ {"version":3,"file":"ExternalServiceUtils.d.ts","sourceRoot":"","sources":["../../../src/common/ExternalServiceUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,iBAAa,KAAG,MAe1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,MAAM,EAAE,KACjB,IAWF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,KAAG,KAEjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,KAAK,MAAM,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,QAAQ,CAcnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAChC,SAAS,OAAO,EAChB,OAAO,CAAC,EACR,QAAQ,MAAM,KACb;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAY9C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;iBACU,MAAM;IAMnB;;OAEG;oBACa,MAAM;IAItB;;OAEG;8BACuB,MAAM,GAAG,OAAO;IAI1C;;OAEG;gCAEO,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,eACpD,MAAM,UACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;IAYjC;;OAEG;+BAEO,WAAW,GAAG,WAAW,eACpB,MAAM,SACZ,KAAK,UACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;CASlC,CAAC"}
@@ -11,14 +11,19 @@ import { ErrorFactory } from '../exceptions/ZintrustError.js';
11
11
  export const readEnvString = (key, fallback = '') => {
12
12
  const anyEnv = Env;
13
13
  const fromEnv = typeof anyEnv.get === 'function' ? anyEnv.get(key, '') : '';
14
- if (typeof fromEnv === 'string' && fromEnv.trim() !== '')
14
+ if (typeof fromEnv === 'string' && fromEnv.trim() !== '') {
15
15
  return fromEnv;
16
+ }
17
+ const getEnv = anyEnv[key];
18
+ if (typeof getEnv === 'string' && getEnv.trim() !== '') {
19
+ return getEnv;
20
+ }
16
21
  if (typeof process !== 'undefined') {
17
22
  const raw = process.env?.[key];
18
23
  if (typeof raw === 'string')
19
24
  return raw;
20
25
  }
21
- return fromEnv ?? fallback;
26
+ return fallback;
22
27
  };
23
28
  /**
24
29
  * Validate required parameters for external service calls
@@ -86,6 +86,9 @@ export declare const Env: Readonly<{
86
86
  ENABLE_MICROSERVICES: boolean;
87
87
  TOKEN_TTL: number;
88
88
  TOKEN_LENGTH: number;
89
+ CSRF_STORE: string;
90
+ CSRF_DRIVER: string;
91
+ CSRF_REDIS_DB: number;
89
92
  ENCRYPTION_CIPHER: string;
90
93
  ENVIRONMENT: string;
91
94
  REQUEST_TIMEOUT: number;
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,eAAO,MAAM,cAAc,QAAO,WAAW,GAAG,SAAwB,CAAC;AAEzE,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,MAKzE,CAAC;AAGF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAGxD,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAM3D,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAM7D,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,eAAe,OAAO,KAAG,OAK7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAKjE,CAAC;AAGF,eAAO,MAAM,GAAG;eApCS,MAAM,iBAAiB,MAAM,KAAG,MAAM;kBAKnC,MAAM,iBAAiB,MAAM,KAAG,MAAM;mBAgBrC,MAAM,iBAAiB,OAAO,KAAG,OAAO;oBARvC,MAAM,iBAAiB,MAAM,KAAG,MAAM;cA+BtB,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAiHpB,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmExF,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,eAAO,MAAM,cAAc,QAAO,WAAW,GAAG,SAAwB,CAAC;AAEzE,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,MAKzE,CAAC;AAGF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAGxD,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAM3D,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAM7D,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,eAAe,OAAO,KAAG,OAK7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAKjE,CAAC;AAGF,eAAO,MAAM,GAAG;eApCS,MAAM,iBAAiB,MAAM,KAAG,MAAM;kBAKnC,MAAM,iBAAiB,MAAM,KAAG,MAAM;mBAgBrC,MAAM,iBAAiB,OAAO,KAAG,OAAO;oBARvC,MAAM,iBAAiB,MAAM,KAAG,MAAM;cA+BtB,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAoHpB,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmExF,CAAC"}
package/src/config/env.js CHANGED
@@ -145,6 +145,9 @@ export const Env = Object.freeze({
145
145
  ENABLE_MICROSERVICES: getBool('ENABLE_MICROSERVICES', false),
146
146
  TOKEN_TTL: getInt('TOKEN_TTL', 3600000),
147
147
  TOKEN_LENGTH: getInt('TOKEN_LENGTH', 32),
148
+ CSRF_STORE: get('CSRF_STORE', ''),
149
+ CSRF_DRIVER: get('CSRF_DRIVER', ''),
150
+ CSRF_REDIS_DB: getInt('CSRF_REDIS_DB', 1),
148
151
  // Encryption interop
149
152
  ENCRYPTION_CIPHER: get('ENCRYPTION_CIPHER', ''),
150
153
  // Deployment
@@ -190,7 +193,7 @@ export const Env = Object.freeze({
190
193
  // Template/Misc
191
194
  TEMPLATE_COPYRIGHT: get('TEMPLATE_COPYRIGHT', '© 2025 ZinTrust Framework. All rights reserved.'),
192
195
  SERVICE_NAME: get('SERVICE_NAME', ''),
193
- APP_MODE: get('APP_MODE', ''),
196
+ APP_MODE: get('APP_MODE', get('NODE_ENV', 'development')),
194
197
  APP_PORT: getInt('APP_PORT', 3000),
195
198
  RUNTIME: get('RUNTIME', ''),
196
199
  // Paths (safely constructed for Node.js environments)
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/config/logger.ts"],"names":[],"mappings":"AAQA,UAAU,OAAO;IACf,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClE;AA4VD,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,MAAM,EAAE,CAYtD,CAAC;AAEF,eAAO,MAAM,MAAM;qBAzJQ,MAAM,SAAS,OAAO,aAAa,MAAM,KAAG,IAAI;oBAsBjD,MAAM,SAAS,OAAO,aAAa,MAAM,KAAG,IAAI;oBAoBhD,MAAM,SAAS,OAAO,aAAa,MAAM,KAAG,IAAI;qBAoB/C,MAAM,UAAU,OAAO,aAAa,MAAM,KAAG,IAAI;qBA0BjD,MAAM,UAAU,OAAO,aAAa,MAAM,KAAG,IAAI;yBAmDrC,OAAO,CAAC,MAAM,EAAE,CAAC;mBArBtB,MAAM,KAAG,OAAO;EA2ChD,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/config/logger.ts"],"names":[],"mappings":"AASA,UAAU,OAAO;IACf,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClE;AAiYD,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,MAAM,EAAE,CAYtD,CAAC;AAEF,eAAO,MAAM,MAAM;qBA5JQ,MAAM,SAAS,OAAO,aAAa,MAAM,KAAG,IAAI;oBAqBjD,MAAM,SAAS,OAAO,aAAa,MAAM,KAAG,IAAI;oBAqBhD,MAAM,SAAS,OAAO,aAAa,MAAM,KAAG,IAAI;qBAqB/C,MAAM,UAAU,OAAO,aAAa,MAAM,KAAG,IAAI;qBA2BjD,MAAM,UAAU,OAAO,aAAa,MAAM,KAAG,IAAI;yBAoDrC,OAAO,CAAC,MAAM,EAAE,CAAC;mBArBtB,MAAM,KAAG,OAAO;EA2ChD,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -5,10 +5,42 @@
5
5
  */
6
6
  import { appConfig } from './app.js';
7
7
  import { Env } from './env.js';
8
- const isDevelopment = () => appConfig.isDevelopment();
9
8
  const isProduction = () => appConfig.isProduction();
10
9
  const getLogFormat = () => Env.get('LOG_FORMAT', 'text');
11
10
  const isJsonFormat = (value) => value === 'json';
11
+ // Log level priority: lower means more verbose
12
+ const levelPriority = {
13
+ debug: 0,
14
+ info: 1,
15
+ warn: 2,
16
+ error: 3,
17
+ fatal: 4,
18
+ };
19
+ const getConfiguredLogLevel = () => {
20
+ const raw = Env.get('LOG_LEVEL', Env.LOG_LEVEL ?? 'debug')
21
+ .trim()
22
+ .toLowerCase();
23
+ if (raw === 'debug')
24
+ return 'debug';
25
+ if (raw === 'info')
26
+ return 'info';
27
+ if (raw === 'warn')
28
+ return 'warn';
29
+ if (raw === 'error')
30
+ return 'error';
31
+ return 'info';
32
+ };
33
+ const shouldEmit = (level) => {
34
+ // If global disable, never emit
35
+ if (Env.getBool('DISABLE_LOGGING', false))
36
+ return false;
37
+ // Respect configured LOG_LEVEL
38
+ const configured = getConfiguredLogLevel();
39
+ const lp = levelPriority[level];
40
+ const configuredLp = levelPriority[configured] ?? levelPriority['info'];
41
+ return lp >= configuredLp;
42
+ };
43
+ // TODO developers should be able to customize sensitive fields via config
12
44
  const SENSITIVE_FIELDS = new Set([
13
45
  'password',
14
46
  'token',
@@ -78,6 +110,9 @@ const getFileWriter = () => {
78
110
  });
79
111
  };
80
112
  const shouldLogToFile = () => {
113
+ // Respect global disable
114
+ if (Env.getBool('DISABLE_LOGGING', false))
115
+ return false;
81
116
  // Prefer dynamic lookup so late-bound env (tests, some runtimes) is respected.
82
117
  const channel = Env.get('LOG_CHANNEL', '').trim().toLowerCase();
83
118
  const channelWantsFile = channel === 'file' || channel === 'all';
@@ -182,26 +217,29 @@ const emitCloudLogs = (event) => {
182
217
  };
183
218
  // Private helper functions
184
219
  const logDebug = (message, data, category) => {
220
+ if (!shouldEmit('debug'))
221
+ return;
185
222
  String(category);
186
- if (isDevelopment()) {
187
- const timestamp = new Date().toISOString();
188
- const out = formatLogMessage({ level: 'debug', message, data, category });
189
- writeToFile(buildFileLine({ formatted: out, data }));
190
- if (isJsonFormat(getLogFormat())) {
191
- console.debug(out); // eslint-disable-line no-console
192
- return;
193
- }
223
+ const timestamp = new Date().toISOString();
224
+ const out = formatLogMessage({ level: 'debug', message, data, category });
225
+ writeToFile(buildFileLine({ formatted: out, data }));
226
+ if (isJsonFormat(getLogFormat())) {
227
+ console.debug(out); // eslint-disable-line no-console
228
+ }
229
+ else {
194
230
  console.debug(out, data ?? ''); // eslint-disable-line no-console
195
- emitCloudLogs({
196
- timestamp,
197
- level: 'debug',
198
- message,
199
- category,
200
- data: redactSensitiveData(data),
201
- });
202
231
  }
232
+ emitCloudLogs({
233
+ timestamp,
234
+ level: 'debug',
235
+ message,
236
+ category,
237
+ data: redactSensitiveData(data),
238
+ });
203
239
  };
204
240
  const logInfo = (message, data, category) => {
241
+ if (!shouldEmit('info'))
242
+ return;
205
243
  String(category);
206
244
  const timestamp = new Date().toISOString();
207
245
  const out = formatLogMessage({ level: 'info', message, data, category });
@@ -221,6 +259,8 @@ const logInfo = (message, data, category) => {
221
259
  });
222
260
  };
223
261
  const logWarn = (message, data, category) => {
262
+ if (!shouldEmit('warn'))
263
+ return;
224
264
  String(category);
225
265
  const timestamp = new Date().toISOString();
226
266
  const out = formatLogMessage({ level: 'warn', message, data, category });
@@ -240,6 +280,8 @@ const logWarn = (message, data, category) => {
240
280
  });
241
281
  };
242
282
  const logError = (message, error, category) => {
283
+ if (!shouldEmit('error'))
284
+ return;
243
285
  const errorMessage = getErrorMessage(error);
244
286
  String(category);
245
287
  const timestamp = new Date().toISOString();
@@ -265,6 +307,8 @@ const logError = (message, error, category) => {
265
307
  });
266
308
  };
267
309
  const logFatal = (message, error, category) => {
310
+ if (!shouldEmit('fatal'))
311
+ return;
268
312
  const errorMessage = getErrorMessage(error);
269
313
  String(category);
270
314
  const timestamp = new Date().toISOString();
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/config/redis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,0BAA0B,KAAG,MAYnE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,0BAA0B,KAAG,MAAM,GAAG,IAW1E,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,CAAC,GAAG,WAAW,EAAE,OAAO,OAAO,GAAG,SAAS,KAAG,OAAO,CAAC,CAAC,CAqCzF,CAAC"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/config/redis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,0BAA0B,KAAG,MAYnE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,0BAA0B,KAAG,MAAM,GAAG,IAW1E,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,CAAC,GAAG,WAAW,EAAE,OAAO,OAAO,GAAG,SAAS,KAAG,OAAO,CAAC,CAAC,CAqCzF,CAAC"}
@@ -492,4 +492,5 @@ export type RedisConfig = {
492
492
  db: number;
493
493
  password?: string;
494
494
  };
495
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';
495
496
  //# sourceMappingURL=type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/config/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE9E,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,KAAK,GACL,YAAY,GACZ,MAAM,GACN,KAAK,GACL,SAAS,GACT,MAAM,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAEjE,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;AAE7D,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,IAAI,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,WAAW,CAAC;IAC7B,MAAM,EAAE,OAAO,GAAG,CAAC,UAAU,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,IAAI,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,WAAW,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,wBAAwB,GACxB,qBAAqB,GACrB,qBAAqB,GACrB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG,MAAM,cAAc,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,4BAA4B,EAAE,CAAC;CACxC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,KAAK,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,YAAY,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE5F,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,QAAQ,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,KAAK,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,MAAM,EAAE,uBAAuB,CAAC;IAChC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,QAAQ,EAAE,yBAAyB,CAAC;IACpC,GAAG,EAAE,oBAAoB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpF,MAAM,MAAM,+BAA+B,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,8BAA8B,GAAG;IAC3C,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GACrC,+BAA+B,GAC/B,8BAA8B,GAC9B,8BAA8B,GAC9B,6BAA6B,CAAC;AAElC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;AAEhF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,+BAA+B,CAAC;IACzC,MAAM,EAAE,8BAA8B,CAAC;IACvC,MAAM,EAAE,8BAA8B,CAAC;IACvC,KAAK,EAAE,6BAA6B,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,CAAC;AAEjG,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAGF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,wBAAwB,GACxB,wBAAwB,GACxB,uBAAuB,GACvB,oBAAoB,GACpB,0BAA0B,GAC1B,mBAAmB,CAAC;AAExB,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAE3D,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,IAAI,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,sBAAsB,GACtB,0BAA0B,GAC1B,qBAAqB,GACrB,yBAAyB,GACzB,kBAAkB,GAClB,wBAAwB,CAAC;AAE7B;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,mBAAmB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,CACD,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAA;KAAE,GAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,QAAQ,EACvD,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5E,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,IAAI,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,uBAAuB,GACvB,sBAAsB,GACtB,sBAAsB,GACtB,mBAAmB,GACnB,yBAAyB,CAAC;AAE9B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC;AAEtF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC,6BAA6B,GAC7B,2BAA2B,GAC3B,0BAA0B,GAC1B,+BAA+B,CAAC;AAEpC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;AAE1E,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,WAAW,CAAC;AAE5D,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,UAAU,GACV,WAAW,CAAC;AAEhB,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,aAAa,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,uBAAuB,CAAC;IACrC,UAAU,EAAE,sBAAsB,CAAC;IACnC,UAAU,EAAE,sBAAsB,CAAC;IACnC,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,gBAAgB,EAAE;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,OAAO,CAAC;QACvB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,aAAa,EAAE,yBAAyB,CAAC;IACzC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC;IACzD,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnE,UAAU,EAAE,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;IACvD,aAAa,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAClD,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CAChD,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC"}
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/config/type.ts"],"names":[],"mappings":"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"}
package/src/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @zintrust/core v0.1.39
2
+ * @zintrust/core v0.1.40
3
3
  *
4
4
  * ZinTrust Framework - Production-Grade TypeScript Backend
5
5
  * Built for performance, type safety, and exceptional developer experience
6
6
  *
7
7
  * Build Information:
8
- * Built: 2026-01-31T09:27:42.547Z
8
+ * Built: 2026-01-31T18:15:08.942Z
9
9
  * Node: >=20.0.0
10
10
  * License: MIT
11
11
  *
@@ -21,7 +21,7 @@
21
21
  * Available at runtime for debugging and health checks
22
22
  */
23
23
  export const ZINTRUST_VERSION = '0.1.23';
24
- export const ZINTRUST_BUILD_DATE = '2026-01-31T09:27:42.518Z'; // Replaced during build
24
+ export const ZINTRUST_BUILD_DATE = '2026-01-31T18:15:08.911Z'; // Replaced during build
25
25
  import { Application } from './boot/Application.js';
26
26
  import { AwsSigV4 } from './common/index.js';
27
27
  import { SignedRequest } from './security/SignedRequest.js';
@@ -1 +1 @@
1
- {"version":3,"file":"CsrfMiddleware.d.ts","sourceRoot":"","sources":["../../../src/middleware/CsrfMiddleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9D,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AASD,eAAO,MAAM,cAAc;IACzB;;OAEG;qBACa,WAAW,GAAQ,UAAU;EAiE7C,CAAC"}
1
+ {"version":3,"file":"CsrfMiddleware.d.ts","sourceRoot":"","sources":["../../../src/middleware/CsrfMiddleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAK9D,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAiCD,eAAO,MAAM,cAAc;IACzB;;OAEG;qBACa,WAAW,GAAQ,UAAU;EAyD7C,CAAC"}
@@ -12,6 +12,28 @@ const DEFAULT_OPTIONS = {
12
12
  bodyKey: '_csrf',
13
13
  ignoreMethods: ['GET', 'HEAD', 'OPTIONS'],
14
14
  };
15
+ // Global cleanup registry to avoid leaking intervals per middleware instance
16
+ // We use WeakRef so the manager (and middleware) can be garbage collected
17
+ // when no longer in use, even if this interval keeps running.
18
+ const managerRegistry = new Set();
19
+ // Single process-wide timer
20
+ const globalCleanupTimer = setInterval(() => {
21
+ if (managerRegistry.size === 0)
22
+ return;
23
+ for (const ref of managerRegistry) {
24
+ const mgr = ref.deref();
25
+ if (mgr) {
26
+ void mgr.cleanup().catch(() => undefined);
27
+ }
28
+ else {
29
+ managerRegistry.delete(ref);
30
+ }
31
+ }
32
+ }, 3600000);
33
+ // Use helper to handle runtime differences (Node vs others)
34
+ if (isUnrefableTimer(globalCleanupTimer)) {
35
+ globalCleanupTimer.unref();
36
+ }
15
37
  export const CsrfMiddleware = Object.freeze({
16
38
  /**
17
39
  * Create CSRF protection middleware
@@ -20,15 +42,8 @@ export const CsrfMiddleware = Object.freeze({
20
42
  const config = { ...DEFAULT_OPTIONS, ...options };
21
43
  const manager = CsrfTokenManager.create();
22
44
  const sessions = SessionManager.create();
23
- // Periodic cleanup to prevent memory leaks
24
- // Run every hour (matching default token TTL)
25
- const cleanupTimer = setInterval(() => {
26
- manager.cleanup();
27
- }, 3600000);
28
- // Node: allow process to exit; other runtimes may not support unref()
29
- if (isUnrefableTimer(cleanupTimer)) {
30
- cleanupTimer.unref();
31
- }
45
+ // Register for global cleanup instead of creating a local timer
46
+ managerRegistry.add(new WeakRef(manager));
32
47
  return async (req, res, next) => {
33
48
  if (shouldSkipCsrfForRequest(req, config)) {
34
49
  await next();
@@ -42,7 +57,7 @@ export const CsrfMiddleware = Object.freeze({
42
57
  const method = req.getMethod();
43
58
  // 1. Token Generation (for safe methods)
44
59
  if (config.ignoreMethods?.includes(method) ?? false) {
45
- const token = manager.generateToken(sessionId);
60
+ const token = await manager.generateToken(sessionId);
46
61
  // Set cookie for Double Submit Cookie pattern (readable by frontend)
47
62
  appendSetCookie(res, `${config.cookieName}=${token}; Path=/; SameSite=Strict`);
48
63
  // Also expose in locals for server-side rendering
@@ -55,7 +70,7 @@ export const CsrfMiddleware = Object.freeze({
55
70
  const tokenFromBody = req.getBody()?.[config.bodyKey ?? '_csrf'];
56
71
  const tokenFromCookie = cookies[config.cookieName ?? 'XSRF-TOKEN'];
57
72
  const token = tokenFromHeader || tokenFromBody || tokenFromCookie;
58
- if (!token || !manager.validateToken(sessionId, token)) {
73
+ if (!token || !(await manager.validateToken(sessionId, token))) {
59
74
  Logger.warn(`CSRF validation failed for session ${sessionId}`);
60
75
  res.setStatus(403);
61
76
  res.json({
@@ -2,6 +2,7 @@
2
2
  * CSRF Token Manager
3
3
  * Generate, validate, and bind CSRF tokens to sessions
4
4
  */
5
+ import type { Redis } from 'ioredis';
5
6
  export interface CsrfTokenData {
6
7
  token: string;
7
8
  sessionId: string;
@@ -9,18 +10,26 @@ export interface CsrfTokenData {
9
10
  expiresAt: Date;
10
11
  }
11
12
  export interface ICsrfTokenManager {
12
- generateToken(sessionId: string): string;
13
- validateToken(sessionId: string, token: string): boolean;
14
- invalidateToken(sessionId: string): void;
15
- getTokenData(sessionId: string): CsrfTokenData | null;
16
- refreshToken(sessionId: string): string | null;
17
- cleanup(): number;
18
- clear(): void;
19
- getTokenCount(): number;
13
+ generateToken(sessionId: string): Promise<string>;
14
+ validateToken(sessionId: string, token: string): Promise<boolean>;
15
+ invalidateToken(sessionId: string): Promise<void>;
16
+ getTokenData(sessionId: string): Promise<CsrfTokenData | null>;
17
+ refreshToken(sessionId: string): Promise<string | null>;
18
+ cleanup(): Promise<number>;
19
+ clear(): Promise<void>;
20
+ getTokenCount(): Promise<number>;
20
21
  }
21
22
  export interface CsrfTokenManagerType {
22
- create(): ICsrfTokenManager;
23
+ create(options?: CsrfTokenManagerOptions): ICsrfTokenManager;
23
24
  }
25
+ export type CsrfStoreName = 'memory' | 'redis';
26
+ export type CsrfTokenManagerOptions = {
27
+ store?: CsrfStoreName;
28
+ redis?: Redis;
29
+ keyPrefix?: string;
30
+ tokenLength?: number;
31
+ tokenTtlMs?: number;
32
+ };
24
33
  /**
25
34
  * CsrfTokenManager namespace - sealed for immutability
26
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CsrfTokenManager.d.ts","sourceRoot":"","sources":["../../../src/security/CsrfTokenManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACzD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC;IACtD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/C,OAAO,IAAI,MAAM,CAAC;IAClB,KAAK,IAAI,IAAI,CAAC;IACd,aAAa,IAAI,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,IAAI,iBAAiB,CAAC;CAC7B;AAoED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,oBAE7B,CAAC"}
1
+ {"version":3,"file":"CsrfTokenManager.d.ts","sourceRoot":"","sources":["../../../src/security/CsrfTokenManager.ts"],"names":[],"mappings":"AACA;;;GAGG;AAQH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC/D,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,iBAAiB,CAAC;CAC9D;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/C,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAwRF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,oBAE7B,CAAC"}
@@ -1,18 +1,40 @@
1
+ /* eslint-disable @typescript-eslint/require-await */
1
2
  /**
2
3
  * CSRF Token Manager
3
4
  * Generate, validate, and bind CSRF tokens to sessions
4
5
  */
5
6
  import { Env } from '../config/env.js';
7
+ import { Logger } from '../config/logger.js';
8
+ import { createRedisConnection } from '../config/workers.js';
9
+ import { ZintrustLang } from '../lang/lang.js';
6
10
  import { randomBytes } from '../node-singletons/crypto.js';
11
+ import { RedisKeys } from '../tools/redis/RedisKeyManager.js';
7
12
  /**
8
13
  * Create a new CSRF token manager instance
9
14
  */
10
- const create = () => {
15
+ const normalizeStoreName = (name) => {
16
+ const raw = String(name ?? '')
17
+ .trim()
18
+ .toLowerCase();
19
+ if (raw === 'redis')
20
+ return 'redis';
21
+ return 'memory';
22
+ };
23
+ const resolveStoreName = (options) => {
24
+ return normalizeStoreName(options?.store ?? Env.CSRF_STORE ?? Env.CSRF_DRIVER ?? Env.get('CSRF_STORE', 'memory'));
25
+ };
26
+ const toTokenData = (stored) => {
27
+ return {
28
+ token: stored.token,
29
+ sessionId: stored.sessionId,
30
+ createdAt: new Date(stored.createdAt),
31
+ expiresAt: new Date(stored.expiresAt),
32
+ };
33
+ };
34
+ const createMemoryManager = (tokenLength, tokenTtl) => {
11
35
  const tokens = new Map();
12
- const tokenLength = Env.TOKEN_LENGTH; // 256 bits
13
- const tokenTtl = Env.TOKEN_TTL; // 1 hour in milliseconds
14
36
  return {
15
- generateToken(sessionId) {
37
+ async generateToken(sessionId) {
16
38
  tokens.delete(sessionId);
17
39
  const token = randomBytes(tokenLength).toString('hex');
18
40
  const now = new Date();
@@ -21,7 +43,7 @@ const create = () => {
21
43
  tokens.set(sessionId, tokenData);
22
44
  return token;
23
45
  },
24
- validateToken(sessionId, token) {
46
+ async validateToken(sessionId, token) {
25
47
  const tokenData = tokens.get(sessionId);
26
48
  if (!tokenData)
27
49
  return false;
@@ -33,13 +55,13 @@ const create = () => {
33
55
  }
34
56
  return isValid;
35
57
  },
36
- invalidateToken(sessionId) {
58
+ async invalidateToken(sessionId) {
37
59
  tokens.delete(sessionId);
38
60
  },
39
- getTokenData(sessionId) {
61
+ async getTokenData(sessionId) {
40
62
  return tokens.get(sessionId) ?? null;
41
63
  },
42
- refreshToken(sessionId) {
64
+ async refreshToken(sessionId) {
43
65
  const tokenData = tokens.get(sessionId);
44
66
  if (!tokenData)
45
67
  return null;
@@ -51,7 +73,7 @@ const create = () => {
51
73
  tokenData.expiresAt = new Date(Date.now() + tokenTtl);
52
74
  return tokenData.token;
53
75
  },
54
- cleanup() {
76
+ async cleanup() {
55
77
  let removed = 0;
56
78
  const now = new Date();
57
79
  for (const [sessionId, tokenData] of tokens.entries()) {
@@ -62,14 +84,173 @@ const create = () => {
62
84
  }
63
85
  return removed;
64
86
  },
65
- clear() {
87
+ async clear() {
66
88
  tokens.clear();
67
89
  },
68
- getTokenCount() {
90
+ async getTokenCount() {
69
91
  return tokens.size;
70
92
  },
71
93
  };
72
94
  };
95
+ // Helper functions for Redis CSRF manager
96
+ const createRedisClientFactory = (options) => {
97
+ let redisClient = options?.redis ?? null;
98
+ return () => {
99
+ if (redisClient)
100
+ return redisClient;
101
+ const dbFromEnv = Env.CSRF_REDIS_DB;
102
+ const database = dbFromEnv >= 0 ? dbFromEnv : Env.getInt('REDIS_QUEUE_DB', ZintrustLang.REDIS_DEFAULT_DB);
103
+ redisClient = createRedisConnection({
104
+ host: Env.get('REDIS_HOST', 'localhost'),
105
+ port: Env.getInt('REDIS_PORT', ZintrustLang.REDIS_DEFAULT_PORT),
106
+ password: Env.get('REDIS_PASSWORD'),
107
+ db: database,
108
+ });
109
+ return redisClient;
110
+ };
111
+ };
112
+ const createRedisTokenOperations = (keyPrefix, tokenTtl, getRedisClient) => {
113
+ const buildKey = (sessionId) => `${keyPrefix}${sessionId}`;
114
+ const fetchTokenData = async (sessionId) => {
115
+ try {
116
+ const client = getRedisClient();
117
+ const payload = await client.get(buildKey(sessionId));
118
+ if (payload === null || payload === '')
119
+ return null;
120
+ const parsed = JSON.parse(payload);
121
+ return toTokenData(parsed);
122
+ }
123
+ catch (error) {
124
+ Logger.error('CSRF Redis fetch failed', error);
125
+ return null;
126
+ }
127
+ };
128
+ const saveTokenData = async (data) => {
129
+ try {
130
+ const client = getRedisClient();
131
+ const stored = {
132
+ token: data.token,
133
+ sessionId: data.sessionId,
134
+ createdAt: data.createdAt.getTime(),
135
+ expiresAt: data.expiresAt.getTime(),
136
+ };
137
+ await client.set(buildKey(data.sessionId), JSON.stringify(stored), 'PX', tokenTtl);
138
+ }
139
+ catch (error) {
140
+ Logger.error('CSRF Redis save failed', error);
141
+ }
142
+ };
143
+ const deleteToken = async (sessionId) => {
144
+ try {
145
+ const client = getRedisClient();
146
+ await client.del(buildKey(sessionId));
147
+ }
148
+ catch (error) {
149
+ Logger.error('CSRF Redis delete failed', error);
150
+ }
151
+ };
152
+ const scanKeys = async () => {
153
+ const client = getRedisClient();
154
+ const keys = [];
155
+ const stream = client.scanStream({ match: `${keyPrefix}*`, count: 200 });
156
+ return new Promise((resolve, reject) => {
157
+ stream.on('data', (resultKeys) => {
158
+ if (Array.isArray(resultKeys) && resultKeys.length) {
159
+ keys.push(...resultKeys);
160
+ }
161
+ });
162
+ stream.on('end', () => resolve(keys));
163
+ stream.on('error', (err) => reject(err));
164
+ });
165
+ };
166
+ return {
167
+ fetchTokenData,
168
+ saveTokenData,
169
+ deleteToken,
170
+ scanKeys,
171
+ };
172
+ };
173
+ const createRedisManager = (tokenLength, tokenTtl, options) => {
174
+ const keyPrefix = options?.keyPrefix ?? RedisKeys.getCsrfPrefix();
175
+ const getRedisClient = createRedisClientFactory(options);
176
+ const { fetchTokenData, saveTokenData, deleteToken, scanKeys } = createRedisTokenOperations(keyPrefix, tokenTtl, getRedisClient);
177
+ return {
178
+ async generateToken(sessionId) {
179
+ const token = randomBytes(tokenLength).toString('hex');
180
+ const now = new Date();
181
+ const expiresAt = new Date(now.getTime() + tokenTtl);
182
+ const tokenData = { token, sessionId, createdAt: now, expiresAt };
183
+ await saveTokenData(tokenData);
184
+ return token;
185
+ },
186
+ async validateToken(sessionId, token) {
187
+ const tokenData = await fetchTokenData(sessionId);
188
+ if (!tokenData)
189
+ return false;
190
+ const isValid = tokenData.token === token;
191
+ const isExpired = new Date() > tokenData.expiresAt;
192
+ if (isExpired) {
193
+ await deleteToken(sessionId);
194
+ return false;
195
+ }
196
+ return isValid;
197
+ },
198
+ async invalidateToken(sessionId) {
199
+ await deleteToken(sessionId);
200
+ },
201
+ async getTokenData(sessionId) {
202
+ return fetchTokenData(sessionId);
203
+ },
204
+ async refreshToken(sessionId) {
205
+ const tokenData = await fetchTokenData(sessionId);
206
+ if (!tokenData)
207
+ return null;
208
+ const isExpired = new Date() > tokenData.expiresAt;
209
+ if (isExpired) {
210
+ await deleteToken(sessionId);
211
+ return null;
212
+ }
213
+ tokenData.expiresAt = new Date(Date.now() + tokenTtl);
214
+ await saveTokenData(tokenData);
215
+ return tokenData.token;
216
+ },
217
+ async cleanup() {
218
+ // Redis handles expiry via TTL, so nothing to do here.
219
+ return Promise.resolve(0); // NOSONAR
220
+ },
221
+ async clear() {
222
+ try {
223
+ const keys = await scanKeys();
224
+ if (keys.length === 0)
225
+ return;
226
+ const client = getRedisClient();
227
+ await client.del(...keys);
228
+ }
229
+ catch (error) {
230
+ Logger.error('CSRF Redis clear failed', error);
231
+ }
232
+ },
233
+ async getTokenCount() {
234
+ try {
235
+ const keys = await scanKeys();
236
+ return keys.length;
237
+ }
238
+ catch (error) {
239
+ Logger.error('CSRF Redis count failed', error);
240
+ return 0;
241
+ }
242
+ },
243
+ };
244
+ };
245
+ const create = (options) => {
246
+ const tokenLength = options?.tokenLength ?? Env.TOKEN_LENGTH; // 256 bits
247
+ const tokenTtl = options?.tokenTtlMs ?? Env.TOKEN_TTL; // 1 hour in milliseconds
248
+ const store = resolveStoreName(options);
249
+ if (store === 'redis') {
250
+ return createRedisManager(tokenLength, tokenTtl, options);
251
+ }
252
+ return createMemoryManager(tokenLength, tokenTtl);
253
+ };
73
254
  /**
74
255
  * CsrfTokenManager namespace - sealed for immutability
75
256
  */
@@ -220,7 +220,7 @@ export const csrfMiddleware = (csrfManager: CsrfManagerInput) => {
220
220
  return;
221
221
  }
222
222
 
223
- const isValid = resolveCsrfManager(csrfManager).validateToken(
223
+ const isValid = await resolveCsrfManager(csrfManager).validateToken(
224
224
  String(sessionId),
225
225
  String(csrfToken)
226
226
  );
@@ -1 +1 @@
1
- {"version":3,"file":"AwsSecretsManager.d.ts","sourceRoot":"","sources":["../../../../../src/toolkit/Secrets/providers/AwsSecretsManager.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA0GF,eAAO,MAAM,iBAAiB;qBACX;QACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACzE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9D;iBAsDY,MAAM,EAAE;EAcrB,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"AwsSecretsManager.d.ts","sourceRoot":"","sources":["../../../../../src/toolkit/Secrets/providers/AwsSecretsManager.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA0GF,eAAO,MAAM,iBAAiB;qBACX;QACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACzE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9D;iBAsDY,MAAM,EAAE;EAkBrB,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
@@ -117,9 +117,11 @@ export const AwsSecretsManager = Object.freeze({
117
117
  },
118
118
  doctorEnv() {
119
119
  const missing = [];
120
- const region = (readEnvString('AWS_REGION') || readEnvString('AWS_DEFAULT_REGION')).trim();
121
- if (region === '')
120
+ const awsRegion = readEnvString('AWS_REGION').trim();
121
+ const awsDefaultRegion = readEnvString('AWS_DEFAULT_REGION').trim();
122
+ if (awsRegion === '' && awsDefaultRegion === '') {
122
123
  missing.push('AWS_REGION');
124
+ }
123
125
  const accessKeyId = readEnvString('AWS_ACCESS_KEY_ID').trim();
124
126
  if (accessKeyId === '')
125
127
  missing.push('AWS_ACCESS_KEY_ID');
@@ -13,6 +13,8 @@ export declare const RedisKeys: Readonly<{
13
13
  readonly queueLockPrefix: string;
14
14
  readonly cachePrefix: string;
15
15
  readonly sessionPrefix: string;
16
+ readonly csrfPrefix: string;
17
+ getCsrfPrefix(): string;
16
18
  createMetricsKey(workerName: string, metricType: string, granularity: string): string;
17
19
  createHealthKey(workerName: string): string;
18
20
  createWorkerKey(workerName: string): string;
@@ -21,6 +23,7 @@ export declare const RedisKeys: Readonly<{
21
23
  createQueueLockKey(lockName: string): string;
22
24
  createCacheKey(cacheKey: string): string;
23
25
  createSessionKey(sessionId: string): string;
26
+ createCsrfKey(sessionId: string): string;
24
27
  reset(): void;
25
28
  }>;
26
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"RedisKeyManager.d.ts","sourceRoot":"","sources":["../../../../src/tools/redis/RedisKeyManager.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBlD;AAyDD,eAAO,MAAM,SAAS;;;;;;;;;iCAyBS,MAAM,cAAc,MAAM,eAAe,MAAM;gCAGhD,MAAM;gCAGN,MAAM;8BAGR,MAAM;+BAGL,MAAM;iCAGJ,MAAM;6BAGV,MAAM;gCAGH,MAAM;aAGzB,IAAI;EAUb,CAAC;AAIH;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,eAAO,MAAM,sBAAsB,QAAO,MAEzC,CAAC;AAGF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1F;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBvE"}
1
+ {"version":3,"file":"RedisKeyManager.d.ts","sourceRoot":"","sources":["../../../../src/tools/redis/RedisKeyManager.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBlD;AA+DD,eAAO,MAAM,SAAS;;;;;;;;;;qBA6BH,MAAM;iCAGM,MAAM,cAAc,MAAM,eAAe,MAAM;gCAGhD,MAAM;gCAGN,MAAM;8BAGR,MAAM;+BAGL,MAAM;iCAGJ,MAAM;6BAGV,MAAM;gCAGH,MAAM;6BAGT,MAAM;aAGtB,IAAI;EAWb,CAAC;AAIH;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,eAAO,MAAM,sBAAsB,QAAO,MAEzC,CAAC;AAGF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1F;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBvE"}
@@ -41,6 +41,7 @@ let _bullmqPrefix;
41
41
  let _queueLockPrefix;
42
42
  let _cachePrefix;
43
43
  let _sessionPrefix;
44
+ let _csrfPrefix;
44
45
  const getMetricsPrefix = () => {
45
46
  _metricsPrefix ??= `${PREFIX}_metrics:`;
46
47
  return _metricsPrefix;
@@ -73,6 +74,10 @@ const getSessionPrefix = () => {
73
74
  _sessionPrefix ??= `${PREFIX}_session:`;
74
75
  return _sessionPrefix;
75
76
  };
77
+ const getCsrfPrefix = () => {
78
+ _csrfPrefix ??= `${PREFIX}_csrf:`;
79
+ return _csrfPrefix;
80
+ };
76
81
  export const RedisKeys = Object.freeze({
77
82
  get metricsPrefix() {
78
83
  return getMetricsPrefix();
@@ -98,6 +103,12 @@ export const RedisKeys = Object.freeze({
98
103
  get sessionPrefix() {
99
104
  return getSessionPrefix();
100
105
  },
106
+ get csrfPrefix() {
107
+ return getCsrfPrefix();
108
+ },
109
+ getCsrfPrefix() {
110
+ return getCsrfPrefix();
111
+ },
101
112
  createMetricsKey(workerName, metricType, granularity) {
102
113
  return `${getMetricsPrefix()}${workerName}:${metricType}:${granularity}`;
103
114
  },
@@ -122,6 +133,9 @@ export const RedisKeys = Object.freeze({
122
133
  createSessionKey(sessionId) {
123
134
  return `${getSessionPrefix()}${sessionId}`;
124
135
  },
136
+ createCsrfKey(sessionId) {
137
+ return `${getCsrfPrefix()}${sessionId}`;
138
+ },
125
139
  reset() {
126
140
  _metricsPrefix = undefined;
127
141
  _healthPrefix = undefined;
@@ -131,6 +145,7 @@ export const RedisKeys = Object.freeze({
131
145
  _queueLockPrefix = undefined;
132
146
  _cachePrefix = undefined;
133
147
  _sessionPrefix = undefined;
148
+ _csrfPrefix = undefined;
134
149
  },
135
150
  });
136
151
  // Note: Legacy helpers removed. Use `RedisKeys` APIs directly.