@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.
- package/package.json +1 -1
- package/src/boot/Application.d.ts.map +1 -1
- package/src/boot/Application.js +98 -70
- package/src/boot/bootstrap.js +2 -6
- package/src/cli/commands/StartCommand.d.ts.map +1 -1
- package/src/cli/commands/StartCommand.js +16 -4
- package/src/cli/utils/EnvFileLoader.d.ts +2 -1
- package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
- package/src/cli/utils/EnvFileLoader.js +8 -8
- package/src/cli/utils/spawn.d.ts.map +1 -1
- package/src/cli/utils/spawn.js +17 -10
- package/src/common/ExternalServiceUtils.d.ts.map +1 -1
- package/src/common/ExternalServiceUtils.js +7 -2
- package/src/config/env.d.ts +3 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +4 -1
- package/src/config/logger.d.ts.map +1 -1
- package/src/config/logger.js +60 -16
- package/src/config/redis.d.ts.map +1 -1
- package/src/config/type.d.ts +1 -0
- package/src/config/type.d.ts.map +1 -1
- package/src/index.js +3 -3
- package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
- package/src/middleware/CsrfMiddleware.js +26 -11
- package/src/security/CsrfTokenManager.d.ts +18 -9
- package/src/security/CsrfTokenManager.d.ts.map +1 -1
- package/src/security/CsrfTokenManager.js +192 -11
- package/src/templates/project/basic/app/Middleware/index.ts.tpl +1 -1
- package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts.map +1 -1
- package/src/toolkit/Secrets/providers/AwsSecretsManager.js +4 -2
- package/src/tools/redis/RedisKeyManager.d.ts +3 -0
- package/src/tools/redis/RedisKeyManager.d.ts.map +1 -1
- package/src/tools/redis/RedisKeyManager.js +15 -0
package/package.json
CHANGED
|
@@ -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;
|
|
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"}
|
package/src/boot/Application.js
CHANGED
|
@@ -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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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;
|
package/src/boot/bootstrap.js
CHANGED
|
@@ -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
|
|
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
|
|
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;
|
|
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('
|
|
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
|
|
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
|
-
|
|
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?:
|
|
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":"
|
|
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 '
|
|
8
|
+
return 'development';
|
|
9
9
|
// Per spec: any other value is treated as development.
|
|
10
|
-
return '
|
|
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['
|
|
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?.['
|
|
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;
|
|
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"}
|
package/src/cli/utils/spawn.js
CHANGED
|
@@ -58,12 +58,21 @@ export const SpawnUtil = Object.freeze({
|
|
|
58
58
|
throw wrapped;
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
|
-
const onSigint = () =>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
87
|
-
|
|
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,
|
|
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
|
|
26
|
+
return fallback;
|
|
22
27
|
};
|
|
23
28
|
/**
|
|
24
29
|
* Validate required parameters for external service calls
|
package/src/config/env.d.ts
CHANGED
|
@@ -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;
|
package/src/config/env.d.ts.map
CHANGED
|
@@ -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
|
|
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":"
|
|
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"}
|
package/src/config/logger.js
CHANGED
|
@@ -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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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,
|
|
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"}
|
package/src/config/type.d.ts
CHANGED
package/src/config/type.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/config/type.ts"],"names":[],"mappings":"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"}
|
|
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.
|
|
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-
|
|
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-
|
|
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;
|
|
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
|
-
//
|
|
24
|
-
|
|
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":"
|
|
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
|
|
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;
|
|
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
|
|
121
|
-
|
|
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;
|
|
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.
|