@zintrust/core 0.1.46 → 0.1.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/app/Controllers/AuthController.d.ts.map +1 -1
- package/app/Controllers/AuthController.js +26 -4
- package/app/Middleware/index.js +5 -5
- package/app/Types/controller.d.ts +2 -0
- package/app/Types/controller.d.ts.map +1 -1
- package/app/Types/controller.js +1 -1
- package/config/storage.d.ts.map +1 -1
- package/config/storage.js +1 -1
- package/package.json +1 -1
- package/routes/api.js +13 -6
- package/src/cli/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +2 -0
- package/src/cli/commands/AddCommand.js +2 -2
- package/src/cli/commands/BulletproofKeyGenerateCommand.d.ts +10 -0
- package/src/cli/commands/BulletproofKeyGenerateCommand.d.ts.map +1 -0
- package/src/cli/commands/BulletproofKeyGenerateCommand.js +139 -0
- package/src/cli/commands/JwtDevCommand.d.ts.map +1 -1
- package/src/cli/commands/JwtDevCommand.js +51 -32
- package/src/cli/scaffolding/ControllerGenerator.d.ts +1 -1
- package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ControllerGenerator.js +8 -79
- package/src/config/SecretsManager.d.ts +0 -1
- package/src/config/SecretsManager.d.ts.map +1 -1
- package/src/config/SecretsManager.js +0 -1
- package/src/config/middleware.d.ts +1 -0
- package/src/config/middleware.d.ts.map +1 -1
- package/src/config/middleware.js +3 -0
- package/src/http/error-pages/ErrorPageRenderer.js +7 -1
- package/src/index.d.ts +1 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +4 -3
- package/src/middleware/BulletproofAuthMiddleware.d.ts +92 -0
- package/src/middleware/BulletproofAuthMiddleware.d.ts.map +1 -0
- package/src/middleware/BulletproofAuthMiddleware.js +421 -0
- package/src/middleware/CsrfMiddleware.d.ts +0 -1
- package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
- package/src/middleware/CsrfMiddleware.js +8 -1
- package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -1
- package/src/middleware/JwtAuthMiddleware.js +11 -5
- package/src/orm/Database.d.ts.map +1 -1
- package/src/orm/Database.js +48 -39
- package/src/orm/QueryBuilder.d.ts.map +1 -1
- package/src/orm/QueryBuilder.js +0 -2
- package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -1
- package/src/orm/adapters/MySQLProxyAdapter.js +54 -35
- package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -1
- package/src/orm/adapters/PostgreSQLProxyAdapter.js +126 -103
- package/src/orm/adapters/SqlProxyHttpAdapterShared.d.ts +30 -0
- package/src/orm/adapters/SqlProxyHttpAdapterShared.d.ts.map +1 -0
- package/src/orm/adapters/SqlProxyHttpAdapterShared.js +64 -0
- package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -1
- package/src/orm/adapters/SqlServerProxyAdapter.js +54 -37
- package/src/orm/migrations/MigrationStore.d.ts.map +1 -1
- package/src/orm/migrations/MigrationStore.js +22 -1
- package/src/routes/doc.js +1 -1
- package/src/routes/errorPages.d.ts.map +1 -1
- package/src/routes/errorPages.js +9 -2
- package/src/security/CsrfTokenManager.d.ts.map +1 -1
- package/src/security/CsrfTokenManager.js +57 -23
- package/src/security/JwtManager.d.ts +4 -1
- package/src/security/JwtManager.d.ts.map +1 -1
- package/src/security/JwtManager.js +24 -10
- package/src/security/JwtSessions.d.ts +12 -0
- package/src/security/JwtSessions.d.ts.map +1 -0
- package/src/security/JwtSessions.js +556 -0
- package/src/security/NonceReplay.d.ts +24 -0
- package/src/security/NonceReplay.d.ts.map +1 -0
- package/src/security/NonceReplay.js +42 -0
- package/src/security/TokenRevocation.d.ts.map +1 -1
- package/src/security/TokenRevocation.js +1 -0
- package/src/tools/http/Http.d.ts +5 -0
- package/src/tools/http/Http.d.ts.map +1 -1
- package/src/tools/http/Http.js +25 -9
- package/src/tools/queue/QueueReliabilityOrchestrator.d.ts.map +1 -1
- package/src/tools/queue/QueueReliabilityOrchestrator.js +18 -6
- package/src/validation/Validator.d.ts.map +1 -1
- package/src/validation/Validator.js +4 -2
package/src/tools/http/Http.js
CHANGED
|
@@ -14,6 +14,20 @@ import { createHttpResponse } from './HttpResponse.js';
|
|
|
14
14
|
* Perform the actual request for a given state. Separated to keep the builder small
|
|
15
15
|
*/
|
|
16
16
|
async function performRequest(state) {
|
|
17
|
+
const { response, bodyText, durationMs } = await performRequestRaw(state);
|
|
18
|
+
Logger.debug(`HTTP ${state.method} ${state.url}`, {
|
|
19
|
+
status: response.status,
|
|
20
|
+
duration: `${durationMs}ms`,
|
|
21
|
+
size: bodyText.length,
|
|
22
|
+
});
|
|
23
|
+
return createHttpResponse(response, bodyText);
|
|
24
|
+
}
|
|
25
|
+
async function performRequestRaw(state) {
|
|
26
|
+
const { response, durationMs } = await performFetch(state);
|
|
27
|
+
const bodyText = await response.text();
|
|
28
|
+
return { response, bodyText, durationMs };
|
|
29
|
+
}
|
|
30
|
+
async function performFetch(state) {
|
|
17
31
|
const timeout = state.timeout ?? Env.getInt('HTTP_TIMEOUT', 30000);
|
|
18
32
|
const controller = new AbortController();
|
|
19
33
|
let timeoutId;
|
|
@@ -40,14 +54,8 @@ async function performRequest(state) {
|
|
|
40
54
|
const init = buildInit();
|
|
41
55
|
const startTime = Date.now();
|
|
42
56
|
const response = await globalThis.fetch(state.url, init);
|
|
43
|
-
const responseBody = await response.text();
|
|
44
57
|
const duration = Date.now() - startTime;
|
|
45
|
-
|
|
46
|
-
status: response.status,
|
|
47
|
-
duration: `${duration}ms`,
|
|
48
|
-
size: responseBody.length,
|
|
49
|
-
});
|
|
50
|
-
return createHttpResponse(response, responseBody);
|
|
58
|
+
return { response, durationMs: duration };
|
|
51
59
|
}
|
|
52
60
|
catch (error) {
|
|
53
61
|
if (error instanceof Error && error.name === 'AbortError') {
|
|
@@ -72,7 +80,7 @@ async function performRequest(state) {
|
|
|
72
80
|
/**
|
|
73
81
|
* Create request builder with fluent API
|
|
74
82
|
*/
|
|
75
|
-
|
|
83
|
+
function createRequestBuilder(method, url, initialBody) {
|
|
76
84
|
const state = {
|
|
77
85
|
method,
|
|
78
86
|
url,
|
|
@@ -116,9 +124,17 @@ const createRequestBuilder = (method, url, initialBody) => {
|
|
|
116
124
|
async send() {
|
|
117
125
|
return performRequest(state);
|
|
118
126
|
},
|
|
127
|
+
async sendRaw() {
|
|
128
|
+
const { response } = await performFetch(state);
|
|
129
|
+
return response;
|
|
130
|
+
},
|
|
131
|
+
async sendStream() {
|
|
132
|
+
const { response } = await performFetch(state);
|
|
133
|
+
return { response, stream: response.body };
|
|
134
|
+
},
|
|
119
135
|
};
|
|
120
136
|
return self;
|
|
121
|
-
}
|
|
137
|
+
}
|
|
122
138
|
/**
|
|
123
139
|
* HTTP Client - Sealed namespace for making HTTP requests
|
|
124
140
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueReliabilityOrchestrator.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/QueueReliabilityOrchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QueueReliabilityOrchestrator.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/QueueReliabilityOrchestrator.ts"],"names":[],"mappings":"AAmDA,eAAO,MAAM,4BAA4B;iBAC1B,OAAO;aAIX,IAAI;YA4BL,IAAI;EAUZ,CAAC;AAEH,eAAe,4BAA4B,CAAC"}
|
|
@@ -3,6 +3,12 @@ import { Logger } from '../../config/logger.js';
|
|
|
3
3
|
import { JobReconciliationRunner } from './JobReconciliationRunner.js';
|
|
4
4
|
import { JobRecoveryDaemon } from './JobRecoveryDaemon.js';
|
|
5
5
|
import { StalledJobMonitor } from './StalledJobMonitor.js';
|
|
6
|
+
const isUnrefableTimer = (timer) => {
|
|
7
|
+
return (typeof timer === 'object' &&
|
|
8
|
+
timer !== null &&
|
|
9
|
+
'unref' in timer &&
|
|
10
|
+
typeof timer.unref === 'function');
|
|
11
|
+
};
|
|
6
12
|
const state = {
|
|
7
13
|
started: false,
|
|
8
14
|
};
|
|
@@ -11,13 +17,19 @@ const clearTimer = (timer) => {
|
|
|
11
17
|
return;
|
|
12
18
|
clearInterval(timer);
|
|
13
19
|
};
|
|
14
|
-
const startInterval = (handler, intervalMs) =>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
const startInterval = (handler, intervalMs) => {
|
|
21
|
+
const timer = setInterval(() => {
|
|
22
|
+
handler().catch((error) => {
|
|
23
|
+
Logger.warn('Queue reliability interval failed', {
|
|
24
|
+
error: error instanceof Error ? error : String(error),
|
|
25
|
+
});
|
|
18
26
|
});
|
|
19
|
-
});
|
|
20
|
-
|
|
27
|
+
}, intervalMs);
|
|
28
|
+
if (isUnrefableTimer(timer)) {
|
|
29
|
+
timer.unref();
|
|
30
|
+
}
|
|
31
|
+
return timer;
|
|
32
|
+
};
|
|
21
33
|
export const QueueReliabilityOrchestrator = Object.freeze({
|
|
22
34
|
isEnabled() {
|
|
23
35
|
return Env.getBool('JOB_RELIABILITY_ENABLED', true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../../src/validation/Validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../../src/validation/Validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Sealed namespace pattern - all exports through Validator namespace
|
|
5
5
|
*/
|
|
6
6
|
import { Logger } from '../config/logger.js';
|
|
7
|
+
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
7
8
|
import { createValidationError } from './ValidationError.js';
|
|
8
9
|
const addSimpleRule = (schema, rules, field, rule, message) => {
|
|
9
10
|
if (!rules.has(field))
|
|
@@ -279,8 +280,9 @@ const ruleStringTokenHandlers = {
|
|
|
279
280
|
nullable: () => {
|
|
280
281
|
// Not needed here; missing/undefined is already allowed unless required.
|
|
281
282
|
},
|
|
282
|
-
unique: ({
|
|
283
|
-
|
|
283
|
+
unique: ({ field }) => {
|
|
284
|
+
// Rule-string validation is intentionally "pure" (no DB access). Uniqueness requires a backing store.
|
|
285
|
+
throw ErrorFactory.createConfigError('Validator rule-string token "unique" is not supported (requires a database-backed validator).', { field });
|
|
284
286
|
},
|
|
285
287
|
};
|
|
286
288
|
const rulesToSchema = (rules) => {
|