@zintrust/core 2.7.2 → 2.7.3

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zintrust/core",
3
- "version": "2.7.2",
3
+ "version": "2.7.3",
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":"KVDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/KVDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA2DtD;;GAEG;AACH,eAAO,MAAM,QAAQ;kBAtDF,WAAW;EAwD5B,CAAC"}
1
+ {"version":3,"file":"KVDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/KVDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA0DtD;;GAEG;AACH,eAAO,MAAM,QAAQ;kBArDF,WAAW;EAuD5B,CAAC"}
@@ -9,8 +9,7 @@ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
9
9
  * Create a new KV driver instance
10
10
  */
11
11
  const create = () => {
12
- // In Cloudflare Workers, the KV namespace is usually bound to a variable in the environment
13
- const kv = Cloudflare.getKVBinding('CACHE');
12
+ const kv = Cloudflare.getKVBinding();
14
13
  return {
15
14
  async get(key) {
16
15
  if (kv === null)
@@ -20,7 +19,7 @@ const create = () => {
20
19
  },
21
20
  async set(key, value, ttl) {
22
21
  if (kv === null) {
23
- Logger.warn('KV binding "CACHE" not found. Cache set ignored.');
22
+ Logger.warn('Configured KV binding not found. Cache set ignored.');
24
23
  return;
25
24
  }
26
25
  const options = {};
@@ -40,9 +40,9 @@ const pingKvCache = async (timeoutMs = 2000) => {
40
40
  if (driver !== 'kv')
41
41
  return null;
42
42
  const start = Date.now();
43
- const kv = Cloudflare.getKVBinding('CACHE');
43
+ const kv = Cloudflare.getKVBinding();
44
44
  if (kv === null) {
45
- throw ErrorFactory.createConfigError('KV binding "CACHE" not found');
45
+ throw ErrorFactory.createConfigError('Configured KV binding not found');
46
46
  }
47
47
  const key = `__runtime_health__:kv:${Date.now()}`;
48
48
  await withTimeout('runtime.cache.kv.ping', timeoutMs, async () => {
package/src/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @zintrust/core v2.7.2
2
+ * @zintrust/core v2.7.3
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-06-19T10:18:51.959Z
8
+ * Built: 2026-06-20T09:43:35.633Z
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-06-19T10:18:51.925Z'; // Replaced during build
24
+ export const ZINTRUST_BUILD_DATE = '2026-06-20T09:43:35.558Z'; // 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":"Broadcast.d.ts","sourceRoot":"","sources":["../../../../src/tools/broadcast/Broadcast.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,KAAK,WAAW,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC5E,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAC9E,KAAK,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC1D,KAAK,kBAAkB,GAAG,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAShE,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC,CAAC;AA0BH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC9B,CAAC,CAAC;AAo3BH,eAAO,MAAM,SAAS;mBACC,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;kBAIxD,MAAM,SAAS,MAAM,QAAQ,OAAO;0BAU5B,MAAM,SAAS,MAAM,QAAQ,OAAO;wBAKvD,qBAAqB,YACnB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;4BAO1C,MAAM,SACR,MAAM,QACP,OAAO,YACJ;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;qBAKpC,MAAM;8BAES,qBAAqB;kCAEjB,MAAM,SAAS,MAAM,QAAQ,OAAO;;uBAKrD,MAAM,GAAG,WAAW;EAmBvC,CAAC;AAEH,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Broadcast.d.ts","sourceRoot":"","sources":["../../../../src/tools/broadcast/Broadcast.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,KAAK,WAAW,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC5E,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAC9E,KAAK,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC1D,KAAK,kBAAkB,GAAG,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAShE,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC,CAAC;AA0BH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC9B,CAAC,CAAC;AAs3BH,eAAO,MAAM,SAAS;mBACC,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;kBAIxD,MAAM,SAAS,MAAM,QAAQ,OAAO;0BAU5B,MAAM,SAAS,MAAM,QAAQ,OAAO;wBAKvD,qBAAqB,YACnB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;4BAO1C,MAAM,SACR,MAAM,QACP,OAAO,YACJ;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;qBAKpC,MAAM;8BAES,qBAAqB;kCAEjB,MAAM,SAAS,MAAM,QAAQ,OAAO;;uBAKrD,MAAM,GAAG,WAAW;EAmBvC,CAAC;AAEH,eAAe,SAAS,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { isArray, isNonEmptyString, isObject } from '../../helper/index.js';
2
- import { delay } from '../../common/index.js';
3
2
  import { InMemoryDriver } from './drivers/InMemory.js';
4
3
  import { PusherDriver } from './drivers/Pusher.js';
5
4
  import { RedisDriver } from './drivers/Redis.js';
6
5
  import { RedisHttpsDriver } from './drivers/RedisHttps.js';
6
+ import { delay } from '../../common/index.js';
7
7
  import broadcastConfig from '../../config/broadcast.js';
8
8
  import { Env } from '../../config/env.js';
9
9
  import { Logger } from '../../config/logger.js';
@@ -31,7 +31,8 @@ const resolveInternalPublishRetryConfig = () => ({
31
31
  // exponential backoff + full jitter
32
32
  const computeRetryDelayMs = (baseDelayMs, attempt) => {
33
33
  const exponential = baseDelayMs * Math.pow(2, attempt - 1);
34
- const jitter = baseDelayMs === 0 ? 0 : Math.floor(Math.random() * baseDelayMs);
34
+ const num = Math.random(); // NOSONAR
35
+ const jitter = baseDelayMs === 0 ? 0 : Math.floor(num * baseDelayMs);
35
36
  return exponential + jitter;
36
37
  };
37
38
  const pickFirstNonEmpty = (...values) => {
@@ -305,29 +306,29 @@ const attemptInternalPublishEndpoint = async (endpoint, secret, payload) => {
305
306
  return { result: null, error, transient: true };
306
307
  }
307
308
  };
308
- const requestInternalPublishEndpoint = async (endpoint, secret, payload) => {
309
- const { maxAttempts, baseDelayMs } = resolveInternalPublishRetryConfig();
310
- let lastAttempt = { result: null };
311
- for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
312
- lastAttempt = await attemptInternalPublishEndpoint(endpoint, secret, payload);
313
- if (lastAttempt.result !== null) {
314
- return lastAttempt;
315
- }
316
- // Non-transient failures (application 4xx, etc.) reached the origin; do not retry.
317
- if (lastAttempt.transient !== true || attempt >= maxAttempts) {
318
- break;
319
- }
320
- const delayMs = computeRetryDelayMs(baseDelayMs, attempt);
321
- Logger.warn('Broadcast internal publish retrying transient failure.', {
322
- endpoint,
323
- attempt,
324
- maxAttempts,
325
- delayMs,
326
- status: lastAttempt.status,
327
- });
328
- await delay(delayMs);
309
+ const requestInternalPublishEndpoint = async (endpoint, secret, payload, attempt = 1, retryConfig) => {
310
+ const { maxAttempts, baseDelayMs } = retryConfig ?? resolveInternalPublishRetryConfig();
311
+ const result = await attemptInternalPublishEndpoint(endpoint, secret, payload);
312
+ if (result.result !== null) {
313
+ return result;
314
+ }
315
+ // Non-transient failures (application 4xx, etc.) reached the origin; do not retry.
316
+ if (result.transient !== true || attempt >= maxAttempts) {
317
+ return result;
329
318
  }
330
- return lastAttempt;
319
+ const delayMs = computeRetryDelayMs(baseDelayMs, attempt);
320
+ Logger.warn('Broadcast internal publish retrying transient failure.', {
321
+ endpoint,
322
+ attempt,
323
+ maxAttempts,
324
+ delayMs,
325
+ status: result.status,
326
+ });
327
+ await delay(delayMs);
328
+ return requestInternalPublishEndpoint(endpoint, secret, payload, attempt + 1, {
329
+ maxAttempts,
330
+ baseDelayMs,
331
+ });
331
332
  };
332
333
  const tryInternalPublishEndpoints = async (endpoints, secret, payload, index = 0, lastError) => {
333
334
  const endpoint = endpoints[index];