@zintrust/core 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -5
- package/src/cache/drivers/RedisDriver.js +1 -1
- package/src/index.js +3 -3
- package/src/middleware/SecurityMiddleware.d.ts.map +1 -1
- package/src/middleware/SecurityMiddleware.js +43 -12
- package/src/zintrust.plugins.d.ts +3 -6
- package/src/zintrust.plugins.d.ts.map +1 -1
- package/src/zintrust.plugins.js +3 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zintrust/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Production-grade TypeScript backend framework for JavaScript",
|
|
5
5
|
"homepage": "https://zintrust.com",
|
|
6
6
|
"repository": {
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
"bullmq": "^5.77.6",
|
|
211
211
|
"chalk": "^5.6.2",
|
|
212
212
|
"commander": "^15.0.0",
|
|
213
|
-
"inquirer": "^14.0.
|
|
213
|
+
"inquirer": "^14.0.1",
|
|
214
214
|
"ioredis": "^5.11.0",
|
|
215
215
|
"jsonwebtoken": "^9.0.3",
|
|
216
216
|
"mysql2": "^3.22.4",
|
|
@@ -227,7 +227,6 @@
|
|
|
227
227
|
"fast-uri": "3.1.2",
|
|
228
228
|
"fast-xml-parser": "5.8.0",
|
|
229
229
|
"protobufjs": "7.5.9",
|
|
230
|
-
"brace-expansion": "^5.0.5",
|
|
231
230
|
"picomatch": "^4.0.4",
|
|
232
231
|
"cross-spawn": "^7.0.5",
|
|
233
232
|
"glob": "^11.1.0",
|
|
@@ -238,6 +237,10 @@
|
|
|
238
237
|
"uuid": "14.0.0",
|
|
239
238
|
"ioredis": "^5.11.0",
|
|
240
239
|
"axios": "^1.16.1",
|
|
240
|
+
"tmp": "^0.2.6",
|
|
241
|
+
"sonarqube-scanner": {
|
|
242
|
+
"axios": "^1.16.1"
|
|
243
|
+
},
|
|
241
244
|
"@actions/github": {
|
|
242
245
|
"undici": "^6.24.0"
|
|
243
246
|
},
|
|
@@ -254,9 +257,10 @@
|
|
|
254
257
|
"braces": "^3.0.3",
|
|
255
258
|
"lodash": "^4.17.21",
|
|
256
259
|
"semver": "^7.6.3",
|
|
257
|
-
"tmp": "^0.2.4",
|
|
258
260
|
"ws": "^8.20.0",
|
|
259
|
-
"micromatch": "^4.0.8"
|
|
261
|
+
"micromatch": "^4.0.8",
|
|
262
|
+
"brace-expansion": "^5.0.6",
|
|
263
|
+
"qs": "^6.15.2"
|
|
260
264
|
},
|
|
261
265
|
"bin": {
|
|
262
266
|
"zintrust": "bin/zintrust.js",
|
|
@@ -38,7 +38,7 @@ const createIoredisClient = (params) => {
|
|
|
38
38
|
port: Env.REDIS_PORT,
|
|
39
39
|
password: Env.get('REDIS_PASSWORD', ''),
|
|
40
40
|
db,
|
|
41
|
-
}, 3, { subsystem: 'cache' });
|
|
41
|
+
}, 3, { subsystem: 'cache', requireDirectForScripts: false });
|
|
42
42
|
return client !== null && typeof client.get === 'function' ? client : null;
|
|
43
43
|
}
|
|
44
44
|
catch (error) {
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zintrust/core v2.
|
|
2
|
+
* @zintrust/core v2.4.0
|
|
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-05-
|
|
8
|
+
* Built: 2026-05-30T23:27:53.523Z
|
|
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.41';
|
|
24
|
-
export const ZINTRUST_BUILD_DATE = '2026-05-
|
|
24
|
+
export const ZINTRUST_BUILD_DATE = '2026-05-30T23:27:53.490Z'; // Replaced during build
|
|
25
25
|
export { Application } from './boot/Application.js';
|
|
26
26
|
export { AwsSigV4 } from './common/index.js';
|
|
27
27
|
export { SignedRequest } from './security/SignedRequest.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityMiddleware.d.ts","sourceRoot":"","sources":["../../../src/middleware/SecurityMiddleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"SecurityMiddleware.d.ts","sourceRoot":"","sources":["../../../src/middleware/SecurityMiddleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;KAChC,CAAC;IACF,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACvC,CAAC;CACH;AAmRD,eAAO,MAAM,kBAAkB;IAC7B;;OAEG;qBACa,eAAe,GAAQ,UAAU;EAgBjD,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Zero-dependency implementation replacing helmet/cors
|
|
5
5
|
*/
|
|
6
6
|
import { securityConfig } from '../config/security.js';
|
|
7
|
+
import { isNullish, isUndefinedOrNull } from '../helper/index.js';
|
|
7
8
|
const normalizeCorsList = (values, fallback) => {
|
|
8
9
|
const normalized = (values ?? [])
|
|
9
10
|
.map((value) => (typeof value === 'string' ? value.trim() : ''))
|
|
@@ -169,24 +170,54 @@ function applyCors(req, res, cors) {
|
|
|
169
170
|
const method = req.getMethod();
|
|
170
171
|
const originHeader = req.getHeader('origin');
|
|
171
172
|
const origin = typeof originHeader === 'string' ? originHeader : undefined;
|
|
172
|
-
const requestedMethodHeader = method === 'OPTIONS' ? req.getHeader('access-control-request-method') : undefined;
|
|
173
|
-
const requestedMethod = typeof requestedMethodHeader === 'string' ? requestedMethodHeader : undefined;
|
|
174
|
-
const requestedHeadersHeader = method === 'OPTIONS' ? req.getHeader('access-control-request-headers') : undefined;
|
|
175
|
-
const requestedHeaders = typeof requestedHeadersHeader === 'string' ? parseHeaderList(requestedHeadersHeader) : [];
|
|
176
|
-
applyCorsHeaders(res, {
|
|
177
|
-
origin: resolveAllowedOrigin(cors.origin, origin, cors.credentials),
|
|
178
|
-
methods: resolveAllowedMethods(cors.methods, requestedMethod),
|
|
179
|
-
allowedHeaders: resolveAllowedHeaders(cors.allowedHeaders, requestedHeaders),
|
|
180
|
-
exposedHeaders: resolveExposedHeaders(cors.exposedHeaders),
|
|
181
|
-
credentials: cors.credentials,
|
|
182
|
-
maxAge: cors.maxAge,
|
|
183
|
-
});
|
|
184
173
|
// Handle Preflight
|
|
185
174
|
if (method === 'OPTIONS') {
|
|
175
|
+
const requestedMethodHeader = req.getHeader('access-control-request-method');
|
|
176
|
+
const requestedMethod = typeof requestedMethodHeader === 'string' ? requestedMethodHeader : undefined;
|
|
177
|
+
const requestedHeadersHeader = req.getHeader('access-control-request-headers');
|
|
178
|
+
const requestedHeaders = typeof requestedHeadersHeader === 'string' ? parseHeaderList(requestedHeadersHeader) : [];
|
|
179
|
+
// Validate origin first
|
|
180
|
+
const allowedOrigin = resolveAllowedOrigin(cors.origin, origin, cors.credentials);
|
|
181
|
+
if (allowedOrigin === undefined) {
|
|
182
|
+
// Origin not allowed - don't set CORS headers and let request fail
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
// Validate requested method is allowed
|
|
186
|
+
const allowedMethods = resolveAllowedMethods(cors.methods, requestedMethod);
|
|
187
|
+
if (allowedMethods.length === 0 || (allowedMethods.length === 1 && allowedMethods[0] === '*')) {
|
|
188
|
+
// No specific methods configured or wildcard - allow
|
|
189
|
+
}
|
|
190
|
+
else if (!isUndefinedOrNull(requestedMethod) &&
|
|
191
|
+
!isNullish(requestedMethod) &&
|
|
192
|
+
!allowedMethods.includes(requestedMethod)) {
|
|
193
|
+
// Requested method not in allowed list
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
// Apply CORS headers for preflight
|
|
197
|
+
applyCorsHeaders(res, {
|
|
198
|
+
origin: allowedOrigin,
|
|
199
|
+
methods: allowedMethods,
|
|
200
|
+
allowedHeaders: resolveAllowedHeaders(cors.allowedHeaders, requestedHeaders),
|
|
201
|
+
exposedHeaders: resolveExposedHeaders(cors.exposedHeaders),
|
|
202
|
+
credentials: cors.credentials,
|
|
203
|
+
maxAge: cors.maxAge,
|
|
204
|
+
});
|
|
186
205
|
res.setStatus(204);
|
|
187
206
|
res.send('');
|
|
188
207
|
return true;
|
|
189
208
|
}
|
|
209
|
+
// Handle actual requests
|
|
210
|
+
const allowedOrigin = resolveAllowedOrigin(cors.origin, origin, cors.credentials);
|
|
211
|
+
if (allowedOrigin !== undefined) {
|
|
212
|
+
applyCorsHeaders(res, {
|
|
213
|
+
origin: allowedOrigin,
|
|
214
|
+
methods: resolveAllowedMethods(cors.methods, undefined),
|
|
215
|
+
allowedHeaders: resolveAllowedHeaders(cors.allowedHeaders, []),
|
|
216
|
+
exposedHeaders: resolveExposedHeaders(cors.exposedHeaders),
|
|
217
|
+
credentials: cors.credentials,
|
|
218
|
+
maxAge: cors.maxAge,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
190
221
|
return false;
|
|
191
222
|
}
|
|
192
223
|
export const SecurityMiddleware = Object.freeze({
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* side-effect imports (e.g. `@zintrust/db-sqlite/register`) that register
|
|
6
|
-
* optional adapters/drivers into core registries.
|
|
7
|
-
*
|
|
2
|
+
* Auto-generated fallback module.
|
|
3
|
+
* This file is created by scripts/ensure-worker-plugins.mjs when missing.
|
|
4
|
+
* It allows optional runtime plugin imports to resolve in CI/scaffolded setups.
|
|
8
5
|
*/
|
|
9
6
|
export type {};
|
|
10
7
|
export declare const __zintrustGeneratedPluginStub = "zintrust.plugins.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zintrust.plugins.d.ts","sourceRoot":"","sources":["../../src/zintrust.plugins.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"zintrust.plugins.d.ts","sourceRoot":"","sources":["../../src/zintrust.plugins.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,YAAY,EAAE,CAAC;AAgBf,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;;AACnE,wBAAkB"}
|
package/src/zintrust.plugins.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* side-effect imports (e.g. `@zintrust/db-sqlite/register`) that register
|
|
6
|
-
* optional adapters/drivers into core registries.
|
|
7
|
-
*
|
|
2
|
+
* Auto-generated fallback module.
|
|
3
|
+
* This file is created by scripts/ensure-worker-plugins.mjs when missing.
|
|
4
|
+
* It allows optional runtime plugin imports to resolve in CI/scaffolded setups.
|
|
8
5
|
*/
|
|
9
6
|
import * as TraceRuntime from './runtime/plugins/trace-runtime.js';
|
|
10
7
|
globalThis.__zintrust_system_trace_plugin_requested__ = true;
|