@zintrust/core 2.4.8 → 2.5.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zintrust/core",
3
- "version": "2.4.8",
3
+ "version": "2.5.0",
4
4
  "description": "Production-grade TypeScript backend framework for JavaScript",
5
5
  "homepage": "https://zintrust.com",
6
6
  "repository": {
@@ -24,6 +24,10 @@ export declare const FeatureFlags: Readonly<{
24
24
  * does not specify one.
25
25
  */
26
26
  getD1ReadDefaultConstraint(): D1ReadConstraint;
27
+ /**
28
+ * Whether worker details should attempt a live in-process health lookup.
29
+ */
30
+ isWorkerDetailsLiveHealthEnabled(): boolean;
27
31
  /**
28
32
  * Reset flags (primarily for testing)
29
33
  */
@@ -41,6 +45,10 @@ export declare const FeatureFlags: Readonly<{
41
45
  * Set the default D1 read constraint (primarily for testing).
42
46
  */
43
47
  setD1ReadDefaultConstraint(constraint: D1ReadConstraint): void;
48
+ /**
49
+ * Set worker-details live health enabled state (primarily for testing).
50
+ */
51
+ setWorkerDetailsLiveHealthEnabled(enabled: boolean): void;
44
52
  }>;
45
53
  export default FeatureFlags;
46
54
  //# sourceMappingURL=features.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../src/config/features.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAiB7D;;;GAGG;AACH,eAAO,MAAM,YAAY;IACvB;;;OAGG;kBACW,IAAI;IAyBlB;;;OAGG;yBACkB,OAAO;IAI5B;;;OAGG;kCAC2B,OAAO;IAIrC;;;OAGG;kCAC2B,gBAAgB;IAI9C;;OAEG;aACM,IAAI;IAMb;;;OAGG;gCACyB,OAAO,GAAG,IAAI;IAI1C;;OAEG;yCACkC,OAAO,GAAG,IAAI;IAInD;;OAEG;2CACoC,gBAAgB,GAAG,IAAI;EAG9D,CAAC;AAEH,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../src/config/features.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAkB7D;;;GAGG;AACH,eAAO,MAAM,YAAY;IACvB;;;OAGG;kBACW,IAAI;IA0BlB;;;OAGG;yBACkB,OAAO;IAI5B;;;OAGG;kCAC2B,OAAO;IAIrC;;;OAGG;kCAC2B,gBAAgB;IAI9C;;OAEG;wCACiC,OAAO;IAI3C;;OAEG;aACM,IAAI;IAOb;;;OAGG;gCACyB,OAAO,GAAG,IAAI;IAI1C;;OAEG;yCACkC,OAAO,GAAG,IAAI;IAInD;;OAEG;2CACoC,gBAAgB,GAAG,IAAI;IAI9D;;OAEG;+CACwC,OAAO,GAAG,IAAI;EAGzD,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -8,6 +8,7 @@ let _rawQueryEnabled = false;
8
8
  const D1_READ_DEFAULT_CONSTRAINT = 'first-unconstrained';
9
9
  let _d1ReadReplicationEnabled = false;
10
10
  let _d1ReadDefaultConstraint = D1_READ_DEFAULT_CONSTRAINT;
11
+ let _workerDetailsLiveHealthEnabled = true;
11
12
  const normalizeReadConstraint = (raw) => {
12
13
  const value = raw.trim().toLowerCase();
13
14
  return value === 'first-primary' ? 'first-primary' : 'first-unconstrained';
@@ -25,6 +26,7 @@ export const FeatureFlags = Object.freeze({
25
26
  _rawQueryEnabled = Env.get('USE_RAW_QRY') === 'true';
26
27
  _d1ReadReplicationEnabled = Env.getBool('D1_READ_REPLICATION', false);
27
28
  _d1ReadDefaultConstraint = normalizeReadConstraint(Env.get('D1_READ_DEFAULT_CONSTRAINT', D1_READ_DEFAULT_CONSTRAINT));
29
+ _workerDetailsLiveHealthEnabled = Env.getBool('WORKER_DETAILS_LIVE_HEALTH_ENABLED', true);
28
30
  if (_d1ReadReplicationEnabled) {
29
31
  Logger.info(`✓ D1 read replication ENABLED (default constraint: ${_d1ReadDefaultConstraint})`);
30
32
  }
@@ -58,6 +60,12 @@ export const FeatureFlags = Object.freeze({
58
60
  getD1ReadDefaultConstraint() {
59
61
  return _d1ReadDefaultConstraint;
60
62
  },
63
+ /**
64
+ * Whether worker details should attempt a live in-process health lookup.
65
+ */
66
+ isWorkerDetailsLiveHealthEnabled() {
67
+ return _workerDetailsLiveHealthEnabled;
68
+ },
61
69
  /**
62
70
  * Reset flags (primarily for testing)
63
71
  */
@@ -65,6 +73,7 @@ export const FeatureFlags = Object.freeze({
65
73
  _rawQueryEnabled = false;
66
74
  _d1ReadReplicationEnabled = false;
67
75
  _d1ReadDefaultConstraint = D1_READ_DEFAULT_CONSTRAINT;
76
+ _workerDetailsLiveHealthEnabled = true;
68
77
  },
69
78
  /**
70
79
  * Set raw query enabled state
@@ -85,5 +94,11 @@ export const FeatureFlags = Object.freeze({
85
94
  setD1ReadDefaultConstraint(constraint) {
86
95
  _d1ReadDefaultConstraint = constraint;
87
96
  },
97
+ /**
98
+ * Set worker-details live health enabled state (primarily for testing).
99
+ */
100
+ setWorkerDetailsLiveHealthEnabled(enabled) {
101
+ _workerDetailsLiveHealthEnabled = enabled;
102
+ },
88
103
  });
89
104
  export default FeatureFlags;
@@ -6,6 +6,7 @@ export { appConfig, type AppConfig } from './app';
6
6
  export { default as broadcastConfig } from './broadcast';
7
7
  export { cacheConfig, type CacheConfig } from './cache';
8
8
  export { databaseConfig, type DatabaseConfig } from './database';
9
+ export { default as FeatureFlags } from './features';
9
10
  export { microservicesConfig, type MicroservicesConfig } from './microservices';
10
11
  export { middlewareConfig } from './middleware';
11
12
  export { notificationConfig, type NotificationConfig } from './notification';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;8BAkCgc,CAAC;;;;;;;;;;;;;;;;;;;;iFA/Cjb,CAAA;;;;;;;;;;;;;;;;;;;;8BAD2B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAgDwyF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;EAH71F,CAAC;AAEZ,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;8BAkCoY,CAAC;;;;;;;;;;;;;;;;;;;;iFAhDrX,CAAA;;;;;;;;;;;;;;;;;;;;8BAD2B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAiD4uF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;EAHjyF,CAAC;AAEZ,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
@@ -16,6 +16,7 @@ export { appConfig } from './app.js';
16
16
  export { default as broadcastConfig } from './broadcast.js';
17
17
  export { cacheConfig } from './cache.js';
18
18
  export { databaseConfig } from './database.js';
19
+ export { default as FeatureFlags } from './features.js';
19
20
  export { microservicesConfig } from './microservices.js';
20
21
  export { middlewareConfig } from './middleware.js';
21
22
  export { notificationConfig } from './notification.js';
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/functions/cloudflare.ts"],"names":[],"mappings":";mBAyPuB,OAAO,QAAQ,OAAO,QAAQ,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;;AADhF,wBAoDE;AAGF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;gBAExC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO;IAKlC,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAkBjD"}
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/functions/cloudflare.ts"],"names":[],"mappings":";mBA2PuB,OAAO,QAAQ,OAAO,QAAQ,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;;AADhF,wBAoDE;AAGF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;gBAExC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO;IAKlC,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAkBjD"}
@@ -150,7 +150,9 @@ const injectIoredisModule = async () => {
150
150
  if (globalAny.__zintrustIoredisModule !== undefined)
151
151
  return;
152
152
  try {
153
- const module = await import('ioredis');
153
+ // Variable specifier so bundlers do not inline ioredis into the Workers bundle.
154
+ const ioredisPkg = 'ioredis';
155
+ const module = await import(ioredisPkg);
154
156
  globalAny.__zintrustIoredisModule = module;
155
157
  }
156
158
  catch {
package/src/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @zintrust/core v2.4.8
2
+ * @zintrust/core v2.5.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-06-02T08:44:54.755Z
8
+ * Built: 2026-06-03T09:20:31.193Z
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-02T08:44:54.704Z'; // Replaced during build
24
+ export const ZINTRUST_BUILD_DATE = '2026-06-03T09:20:31.141Z'; // 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":"PrometheusMetrics.d.ts","sourceRoot":"","sources":["../../../src/observability/PrometheusMetrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6GH,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB;sBACJ,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;8BAWtC,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;0BAY3C,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;EAS/D,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"PrometheusMetrics.d.ts","sourceRoot":"","sources":["../../../src/observability/PrometheusMetrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA+GH,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB;sBACJ,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;8BAWtC,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;0BAY3C,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;EAS/D,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
@@ -28,7 +28,9 @@ async function ensureState() {
28
28
  statePromise = (async () => {
29
29
  let client;
30
30
  try {
31
- client = await import('prom-client');
31
+ // Variable specifier so bundlers do not inline prom-client into the Workers bundle.
32
+ const promClientPkg = 'prom-client';
33
+ client = await import(promClientPkg);
32
34
  }
33
35
  catch {
34
36
  // prom-client is intentionally optional at runtime.
@@ -1 +1 @@
1
- {"version":3,"file":"CloudflareAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/CloudflareAdapter.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAIjC;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;mBACY,aAAa,GAAG,cAAc;IA8D7C;;;OAGG;qBACc,OAAO;IAKxB;;;OAGG;qBACc,MAAM,GAAG,OAAO;EAIjC,CAAC;AAsKH;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACjC,EAAE,CAAC,EAAE;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH"}
1
+ {"version":3,"file":"CloudflareAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/CloudflareAdapter.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAIjC;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;mBACY,aAAa,GAAG,cAAc;IA8D7C;;;OAGG;qBACc,OAAO;IAKxB;;;OAGG;qBACc,MAAM,GAAG,OAAO;EAIjC,CAAC;AA8KH;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACjC,EAAE,CAAC,EAAE;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH"}
@@ -172,8 +172,13 @@ function formatCloudflareResponse(response) {
172
172
  headers.set(key, value);
173
173
  }
174
174
  }
175
+ // Null body status codes per Fetch spec
176
+ // These statuses must not have a body; Workers runtime warns if body is non-null
177
+ const NULL_BODY_STATUS_CODES = new Set([101, 204, 205, 304]);
175
178
  let body = null;
176
- if (response.body !== null && response.body !== undefined) {
179
+ if (!NULL_BODY_STATUS_CODES.has(response.statusCode) &&
180
+ response.body !== null &&
181
+ response.body !== undefined) {
177
182
  if (typeof response.body === 'string') {
178
183
  body = response.body;
179
184
  }