@zintrust/core 0.4.49 → 0.4.50
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 +2 -2
- package/src/boot/registry/runtime.d.ts.map +1 -1
- package/src/boot/registry/runtime.js +27 -7
- package/src/index.js +3 -3
- package/src/orm/adapters/D1Adapter.js +2 -2
- package/src/runtime/WorkersModule.d.ts +3 -1
- package/src/runtime/WorkersModule.d.ts.map +1 -1
- package/src/runtime/WorkersModule.js +7 -3
- package/src/tools/redis/RedisTransport.d.ts +1 -0
- package/src/tools/redis/RedisTransport.d.ts.map +1 -1
- package/src/tools/redis/RedisTransport.js +18 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zintrust/core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.50",
|
|
4
4
|
"description": "Production-grade TypeScript backend framework for JavaScript",
|
|
5
5
|
"homepage": "https://zintrust.com",
|
|
6
6
|
"repository": {
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
60
|
"@cloudflare/containers": "^0.2.0",
|
|
61
|
-
"@zintrust/workers": "0.4.
|
|
61
|
+
"@zintrust/workers": "0.4.50",
|
|
62
62
|
"bcryptjs": "^3.0.3",
|
|
63
63
|
"bullmq": "^5.71.1",
|
|
64
64
|
"chalk": "^5.6.2",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/boot/registry/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/boot/registry/runtime.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAuN9C,eAAO,MAAM,8BAA8B,GAAI,iBAAiB,gBAAgB,KAAG,IA4BlF,CAAC;AAmPF,eAAO,MAAM,eAAe,GAAI,QAAQ;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,gBAAgB,CAAC;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC,KAAG;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CA+E7D,CAAC"}
|
|
@@ -10,6 +10,7 @@ import { FeatureFlags } from '../../config/features.js';
|
|
|
10
10
|
import { Logger } from '../../config/logger.js';
|
|
11
11
|
import notificationConfig from '../../config/notification.js';
|
|
12
12
|
import { StartupConfigValidator } from '../../config/StartupConfigValidator.js';
|
|
13
|
+
import { isNonEmptyString } from '../../helper/index.js';
|
|
13
14
|
import { existsSync } from '../../node-singletons/fs.js';
|
|
14
15
|
import * as path from '../../node-singletons/path.js';
|
|
15
16
|
import { pathToFileURL } from '../../node-singletons/url.js';
|
|
@@ -278,8 +279,24 @@ const initializeQueueMonitor = async (router) => {
|
|
|
278
279
|
}
|
|
279
280
|
const redisConfig = extractRedisConfigFromQueueConfig();
|
|
280
281
|
const { QueueMonitor } = queueMonitorModule;
|
|
282
|
+
const resolveKnownQueues = async () => {
|
|
283
|
+
try {
|
|
284
|
+
const workersModule = (await loadWorkersModule());
|
|
285
|
+
const records = await workersModule?.WorkerFactory?.listPersistedRecords?.();
|
|
286
|
+
if (!Array.isArray(records)) {
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
return Array.from(new Set(records
|
|
290
|
+
.map((record) => record.queueName)
|
|
291
|
+
.filter((queueName) => isNonEmptyString(queueName)))).sort((left, right) => left.localeCompare(right));
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return [];
|
|
295
|
+
}
|
|
296
|
+
};
|
|
281
297
|
const monitor = QueueMonitor.create({
|
|
282
298
|
...monitorConfig,
|
|
299
|
+
knownQueues: resolveKnownQueues,
|
|
283
300
|
redis: redisConfig,
|
|
284
301
|
});
|
|
285
302
|
try {
|
|
@@ -292,7 +309,7 @@ const initializeQueueMonitor = async (router) => {
|
|
|
292
309
|
Logger.info(`Queue Monitor enqueue endpoint at http://127.0.0.1:${appConfig.port}/test/enqueue`);
|
|
293
310
|
};
|
|
294
311
|
const initializeWorkers = async (router) => {
|
|
295
|
-
const workers = await loadWorkersModule();
|
|
312
|
+
const workers = await loadWorkersModule({ allowWhenDisabled: true });
|
|
296
313
|
if (workers?.WorkerInit !== undefined && typeof workers.registerWorkerRoutes === 'function') {
|
|
297
314
|
workers.registerWorkerRoutes(router, undefined, { middleware: undefined });
|
|
298
315
|
}
|
|
@@ -403,16 +420,19 @@ export const createLifecycle = (params) => {
|
|
|
403
420
|
await initializeArtifactDirectories(params.resolvedBasePath);
|
|
404
421
|
await registerMasterRoutes(params.resolvedBasePath, params.router);
|
|
405
422
|
await initializeSystemDebugger();
|
|
406
|
-
if (Cloudflare.getWorkersEnv() === null &&
|
|
407
|
-
appConfig.dockerWorker === false &&
|
|
408
|
-
appConfig.worker === true) {
|
|
423
|
+
if (Cloudflare.getWorkersEnv() === null && appConfig.dockerWorker === false) {
|
|
409
424
|
await initializeWorkers(params.router);
|
|
410
425
|
await initializeQueueMonitor(params.router);
|
|
411
|
-
|
|
412
|
-
|
|
426
|
+
if (appConfig.worker === true) {
|
|
427
|
+
await initializeQueueHttpGateway(params.router);
|
|
428
|
+
await initializeScheduleHttpGateway(params.router);
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
Logger.info('Skipping worker execution/gateway initialization (WORKER_ENABLED=false).');
|
|
432
|
+
}
|
|
413
433
|
}
|
|
414
434
|
else if (!appConfig.dockerWorker) {
|
|
415
|
-
Logger.info('Skipping worker
|
|
435
|
+
Logger.info('Skipping local worker dashboards in Cloudflare Workers runtime.');
|
|
416
436
|
}
|
|
417
437
|
// Register service providers
|
|
418
438
|
// Bootstrap services
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zintrust/core v0.4.
|
|
2
|
+
* @zintrust/core v0.4.50
|
|
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-04-
|
|
8
|
+
* Built: 2026-04-04T09:55:52.876Z
|
|
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-04-
|
|
24
|
+
export const ZINTRUST_BUILD_DATE = '2026-04-04T09:55:52.845Z'; // 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';
|
|
@@ -63,12 +63,12 @@ export const D1Adapter = Object.freeze({
|
|
|
63
63
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
64
64
|
async connect() {
|
|
65
65
|
connected = true;
|
|
66
|
-
Logger.
|
|
66
|
+
Logger.debug('✓ D1 connected');
|
|
67
67
|
},
|
|
68
68
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
69
69
|
async disconnect() {
|
|
70
70
|
connected = false;
|
|
71
|
-
Logger.
|
|
71
|
+
Logger.debug('✓ D1 disconnected');
|
|
72
72
|
},
|
|
73
73
|
async query(sql, parameters) {
|
|
74
74
|
if (!connected)
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
type WorkersModule = typeof import('../../packages/workers/src/index.js');
|
|
2
2
|
type QueueMonitorModule = typeof import('../../packages/queue-monitor/src/index.js');
|
|
3
|
-
export declare const loadWorkersModule: (
|
|
3
|
+
export declare const loadWorkersModule: (options?: {
|
|
4
|
+
allowWhenDisabled?: boolean;
|
|
5
|
+
}) => Promise<WorkersModule>;
|
|
4
6
|
export declare const loadQueueMonitorModule: () => Promise<QueueMonitorModule>;
|
|
5
7
|
export {};
|
|
6
8
|
//# sourceMappingURL=WorkersModule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkersModule.d.ts","sourceRoot":"","sources":["../../../src/runtime/WorkersModule.ts"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG,cAAc,mBAAmB,CAAC,CAAC;AACxD,KAAK,kBAAkB,GAAG,cAAc,yBAAyB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkersModule.d.ts","sourceRoot":"","sources":["../../../src/runtime/WorkersModule.ts"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG,cAAc,mBAAmB,CAAC,CAAC;AACxD,KAAK,kBAAkB,GAAG,cAAc,yBAAyB,CAAC,CAAC;AA+WnE,eAAO,MAAM,iBAAiB,GAC5B,UAAS;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAO,KAC5C,OAAO,CAAC,aAAa,CA2BvB,CAAC;AA4CF,eAAO,MAAM,sBAAsB,QAAa,OAAO,CAAC,kBAAkB,CAkBzE,CAAC"}
|
|
@@ -203,6 +203,7 @@ let patchAfterFailureAttempted = false;
|
|
|
203
203
|
let queueMonitorModulePromise;
|
|
204
204
|
let queueMonitorPatchAfterFailureAttempted = false;
|
|
205
205
|
let workersResolverDiagnosticLogged = false;
|
|
206
|
+
let workersDisabledByEnvLogged = false;
|
|
206
207
|
const resolvePackageEntryForDebug = (packageName) => {
|
|
207
208
|
if (!isNodeRuntime())
|
|
208
209
|
return null;
|
|
@@ -306,9 +307,12 @@ const tryLocalFallback = async () => {
|
|
|
306
307
|
}
|
|
307
308
|
return null;
|
|
308
309
|
};
|
|
309
|
-
export const loadWorkersModule = async () => {
|
|
310
|
-
if (shouldDisableWorkerModules()) {
|
|
311
|
-
|
|
310
|
+
export const loadWorkersModule = async (options = {}) => {
|
|
311
|
+
if (shouldDisableWorkerModules() && options.allowWhenDisabled !== true) {
|
|
312
|
+
if (!workersDisabledByEnvLogged) {
|
|
313
|
+
workersDisabledByEnvLogged = true;
|
|
314
|
+
Logger.info('Skipping @zintrust/workers module import (workers disabled by env).');
|
|
315
|
+
}
|
|
312
316
|
workersModulePromise ??= Promise.resolve(createDisabledWorkersModule());
|
|
313
317
|
return workersModulePromise;
|
|
314
318
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisTransport.d.ts","sourceRoot":"","sources":["../../../../src/tools/redis/RedisTransport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpD,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC,CAAC;AASH,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,oBAAoB,CAAC;IACnF,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,oBAAoB,CAAC;IACrF,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,oBAAoB,CAAC;IACpF,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,oBAAoB,CAAC;IAC/F,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,QAAQ,EAAE,MAAM;QACd,IAAI,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK;QAC5D,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;QACtE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;QACxE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;KACxE,CAAC;CACH,CAAC;
|
|
1
|
+
{"version":3,"file":"RedisTransport.d.ts","sourceRoot":"","sources":["../../../../src/tools/redis/RedisTransport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpD,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC,CAAC;AASH,KAAK,oBAAoB,GAAG;IAC1B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,oBAAoB,CAAC;IACnF,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,oBAAoB,CAAC;IACrF,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,oBAAoB,CAAC;IACpF,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,oBAAoB,CAAC;IAC/F,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,QAAQ,EAAE,MAAM;QACd,IAAI,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK;QAC5D,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;QACtE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;QACxE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;KACxE,CAAC;CACH,CAAC;AA4QF,eAAO,MAAM,yBAAyB,QAAO,kBAI5C,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,QAAQ,WAAW,EACnB,UAAU,qBAAqB,KAC9B,oBAoCF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,WAAW,EACnB,UAAU,qBAAqB,KAC9B,kBAaF,CAAC"}
|
|
@@ -3,6 +3,20 @@ import { Logger } from '../../config/logger.js';
|
|
|
3
3
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
4
4
|
import { SignedRequest } from '../../security/SignedRequest.js';
|
|
5
5
|
const loggedSelections = new Set();
|
|
6
|
+
const readEnvString = (key, fallback = '') => {
|
|
7
|
+
if (typeof Env.get === 'function') {
|
|
8
|
+
return Env.get(key, fallback);
|
|
9
|
+
}
|
|
10
|
+
const value = Env[key];
|
|
11
|
+
return typeof value === 'string' ? value : fallback;
|
|
12
|
+
};
|
|
13
|
+
const readEnvBool = (key, fallback = false) => {
|
|
14
|
+
if (typeof Env.getBool === 'function') {
|
|
15
|
+
return Env.getBool(key, fallback);
|
|
16
|
+
}
|
|
17
|
+
const value = Env[key];
|
|
18
|
+
return typeof value === 'boolean' ? value : fallback;
|
|
19
|
+
};
|
|
6
20
|
const resolveSigningPrefix = (baseUrl) => {
|
|
7
21
|
try {
|
|
8
22
|
const parsed = new URL(baseUrl);
|
|
@@ -35,7 +49,7 @@ const buildSigningUrl = (requestUrl, baseUrl) => {
|
|
|
35
49
|
return requestUrl;
|
|
36
50
|
};
|
|
37
51
|
const resolveProxyBaseUrl = () => {
|
|
38
|
-
const explicit =
|
|
52
|
+
const explicit = readEnvString('REDIS_PROXY_URL', '').trim();
|
|
39
53
|
if (explicit !== '')
|
|
40
54
|
return explicit;
|
|
41
55
|
return `http://${Env.REDIS_PROXY_HOST}:${Env.REDIS_PROXY_PORT}`;
|
|
@@ -205,7 +219,9 @@ const createPipeline = (settings) => {
|
|
|
205
219
|
return pipeline;
|
|
206
220
|
};
|
|
207
221
|
export const resolveRedisTransportMode = () => {
|
|
208
|
-
return
|
|
222
|
+
return readEnvBool('USE_REDIS_PROXY', false) || readEnvString('REDIS_PROXY_URL', '').trim() !== ''
|
|
223
|
+
? 'proxy'
|
|
224
|
+
: 'direct';
|
|
209
225
|
};
|
|
210
226
|
export const createRedisProxyConnection = (config, options) => {
|
|
211
227
|
const settings = resolveProxySettings();
|