@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.
Files changed (78) hide show
  1. package/README.md +1 -1
  2. package/app/Controllers/AuthController.d.ts.map +1 -1
  3. package/app/Controllers/AuthController.js +26 -4
  4. package/app/Middleware/index.js +5 -5
  5. package/app/Types/controller.d.ts +2 -0
  6. package/app/Types/controller.d.ts.map +1 -1
  7. package/app/Types/controller.js +1 -1
  8. package/config/storage.d.ts.map +1 -1
  9. package/config/storage.js +1 -1
  10. package/package.json +1 -1
  11. package/routes/api.js +13 -6
  12. package/src/cli/CLI.d.ts.map +1 -1
  13. package/src/cli/CLI.js +2 -0
  14. package/src/cli/commands/AddCommand.js +2 -2
  15. package/src/cli/commands/BulletproofKeyGenerateCommand.d.ts +10 -0
  16. package/src/cli/commands/BulletproofKeyGenerateCommand.d.ts.map +1 -0
  17. package/src/cli/commands/BulletproofKeyGenerateCommand.js +139 -0
  18. package/src/cli/commands/JwtDevCommand.d.ts.map +1 -1
  19. package/src/cli/commands/JwtDevCommand.js +51 -32
  20. package/src/cli/scaffolding/ControllerGenerator.d.ts +1 -1
  21. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  22. package/src/cli/scaffolding/ControllerGenerator.js +8 -79
  23. package/src/config/SecretsManager.d.ts +0 -1
  24. package/src/config/SecretsManager.d.ts.map +1 -1
  25. package/src/config/SecretsManager.js +0 -1
  26. package/src/config/middleware.d.ts +1 -0
  27. package/src/config/middleware.d.ts.map +1 -1
  28. package/src/config/middleware.js +3 -0
  29. package/src/http/error-pages/ErrorPageRenderer.js +7 -1
  30. package/src/index.d.ts +1 -0
  31. package/src/index.d.ts.map +1 -1
  32. package/src/index.js +4 -3
  33. package/src/middleware/BulletproofAuthMiddleware.d.ts +92 -0
  34. package/src/middleware/BulletproofAuthMiddleware.d.ts.map +1 -0
  35. package/src/middleware/BulletproofAuthMiddleware.js +421 -0
  36. package/src/middleware/CsrfMiddleware.d.ts +0 -1
  37. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  38. package/src/middleware/CsrfMiddleware.js +8 -1
  39. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -1
  40. package/src/middleware/JwtAuthMiddleware.js +11 -5
  41. package/src/orm/Database.d.ts.map +1 -1
  42. package/src/orm/Database.js +48 -39
  43. package/src/orm/QueryBuilder.d.ts.map +1 -1
  44. package/src/orm/QueryBuilder.js +0 -2
  45. package/src/orm/adapters/MySQLProxyAdapter.d.ts.map +1 -1
  46. package/src/orm/adapters/MySQLProxyAdapter.js +54 -35
  47. package/src/orm/adapters/PostgreSQLProxyAdapter.d.ts.map +1 -1
  48. package/src/orm/adapters/PostgreSQLProxyAdapter.js +126 -103
  49. package/src/orm/adapters/SqlProxyHttpAdapterShared.d.ts +30 -0
  50. package/src/orm/adapters/SqlProxyHttpAdapterShared.d.ts.map +1 -0
  51. package/src/orm/adapters/SqlProxyHttpAdapterShared.js +64 -0
  52. package/src/orm/adapters/SqlServerProxyAdapter.d.ts.map +1 -1
  53. package/src/orm/adapters/SqlServerProxyAdapter.js +54 -37
  54. package/src/orm/migrations/MigrationStore.d.ts.map +1 -1
  55. package/src/orm/migrations/MigrationStore.js +22 -1
  56. package/src/routes/doc.js +1 -1
  57. package/src/routes/errorPages.d.ts.map +1 -1
  58. package/src/routes/errorPages.js +9 -2
  59. package/src/security/CsrfTokenManager.d.ts.map +1 -1
  60. package/src/security/CsrfTokenManager.js +57 -23
  61. package/src/security/JwtManager.d.ts +4 -1
  62. package/src/security/JwtManager.d.ts.map +1 -1
  63. package/src/security/JwtManager.js +24 -10
  64. package/src/security/JwtSessions.d.ts +12 -0
  65. package/src/security/JwtSessions.d.ts.map +1 -0
  66. package/src/security/JwtSessions.js +556 -0
  67. package/src/security/NonceReplay.d.ts +24 -0
  68. package/src/security/NonceReplay.d.ts.map +1 -0
  69. package/src/security/NonceReplay.js +42 -0
  70. package/src/security/TokenRevocation.d.ts.map +1 -1
  71. package/src/security/TokenRevocation.js +1 -0
  72. package/src/tools/http/Http.d.ts +5 -0
  73. package/src/tools/http/Http.d.ts.map +1 -1
  74. package/src/tools/http/Http.js +25 -9
  75. package/src/tools/queue/QueueReliabilityOrchestrator.d.ts.map +1 -1
  76. package/src/tools/queue/QueueReliabilityOrchestrator.js +18 -6
  77. package/src/validation/Validator.d.ts.map +1 -1
  78. package/src/validation/Validator.js +4 -2
@@ -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
- Logger.debug(`HTTP ${state.method} ${state.url}`, {
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
- const createRequestBuilder = (method, url, initialBody) => {
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":"AAiCA,eAAO,MAAM,4BAA4B;iBAC1B,OAAO;aAIX,IAAI;YA4BL,IAAI;EAUZ,CAAC;AAEH,eAAe,4BAA4B,CAAC"}
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) => setInterval(() => {
15
- handler().catch((error) => {
16
- Logger.warn('Queue reliability interval failed', {
17
- error: error instanceof Error ? error : String(error),
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
- }, intervalMs);
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":"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"}
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: ({ schema, field }) => {
283
- schema.custom(field, () => false, `${field} unique validation is not supported in the core rule-string API yet`);
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) => {