@zintrust/workers 0.4.3 → 0.4.27

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.
@@ -191,6 +191,9 @@ async function getWorkersFromMixedPersistence(offset, limit, query) {
191
191
  ...transformToWorkerData(dbRecords, 'database'),
192
192
  ...transformToWorkerData(redisRecords, 'redis'),
193
193
  ];
194
+ if (workers.length === 0) {
195
+ return getWorkersFromFileFallback(limit, query.includeInactive === true);
196
+ }
194
197
  return {
195
198
  workers,
196
199
  total: dbRecords.length + redisRecords.length >= limit
@@ -216,6 +219,9 @@ async function getWorkersFromSinglePersistence(persistenceDriver, offset, limit,
216
219
  try {
217
220
  const normalizedDriver = normalizeDriver(persistenceDriver);
218
221
  const driverRecords = await WorkerFactory.listPersistedRecords({ driver: normalizedDriver }, { offset, limit, includeInactive: query.includeInactive });
222
+ if (driverRecords.length === 0) {
223
+ return getWorkersFromFileFallback(limit, query.includeInactive === true);
224
+ }
219
225
  const workers = transformToWorkerData(driverRecords, normalizedDriver);
220
226
  return {
221
227
  workers,
@@ -236,6 +242,31 @@ async function getWorkersFromSinglePersistence(persistenceDriver, offset, limit,
236
242
  };
237
243
  }
238
244
  }
245
+ async function getWorkersFromFileFallback(limit, includeInactive) {
246
+ try {
247
+ const discovered = await WorkerFactory.listFileBackedRecords();
248
+ const filtered = includeInactive
249
+ ? discovered
250
+ : discovered.filter((record) => record.activeStatus !== false);
251
+ return {
252
+ workers: transformToWorkerData(filtered, 'memory'),
253
+ total: filtered.length,
254
+ drivers: getAvailableDriversFromDrivers(['memory']),
255
+ effectiveLimit: limit,
256
+ prePaginated: false,
257
+ };
258
+ }
259
+ catch (error) {
260
+ Logger.debug('File-backed worker fallback failed', error);
261
+ return {
262
+ workers: [],
263
+ total: 0,
264
+ drivers: getAvailableDriversFromDrivers(['memory']),
265
+ effectiveLimit: limit,
266
+ prePaginated: false,
267
+ };
268
+ }
269
+ }
239
270
  const normalizeDriver = (driver) => {
240
271
  if (driver === 'db' || driver === 'database')
241
272
  return 'database';
@@ -402,18 +433,18 @@ async function getQueueData() {
402
433
  // Get queue statistics based on QUEUE_DRIVER
403
434
  switch (queueDriver) {
404
435
  case 'redis':
405
- return getRedisQueueData();
436
+ return await getRedisQueueData();
406
437
  case 'database':
407
- return getDatabaseQueueData();
438
+ return await getDatabaseQueueData();
408
439
  case 'db':
409
- return getDatabaseQueueData();
440
+ return await getDatabaseQueueData();
410
441
  default:
411
- return getMemoryQueueData();
442
+ return await getMemoryQueueData();
412
443
  }
413
444
  }
414
445
  catch (error) {
415
446
  Logger.error('Error fetching queue data:', error);
416
- return getMemoryQueueData();
447
+ return await getMemoryQueueData();
417
448
  }
418
449
  }
419
450
  async function getRedisQueueData() {
@@ -472,13 +503,13 @@ async function getDatabaseQueueData() {
472
503
  const { useEnsureDbConnected } = await import('@zintrust/core');
473
504
  const db = await useEnsureDbConnected();
474
505
  // Get queue statistics from actual database tables using proper query builder
475
- const queueStats = (await db
506
+ const queueStats = await db
476
507
  .table('queue_jobs')
477
508
  .select('COUNT(DISTINCT queue) as totalQueues')
478
509
  .selectAs('COUNT(*)', 'totalJobs')
479
510
  .selectAs('SUM(CASE WHEN reserved_at IS NOT NULL AND failed_at IS NULL THEN 1 ELSE 0 END)', 'processingJobs')
480
511
  .selectAs('SUM(CASE WHEN failed_at IS NOT NULL THEN 1 ELSE 0 END)', 'failedJobs')
481
- .first());
512
+ .first();
482
513
  const stats = queueStats || {
483
514
  totalQueues: 0,
484
515
  totalJobs: 0,
@@ -582,7 +613,8 @@ async function enrichWithDetails(workers) {
582
613
  async function buildWorkerDetails(worker) {
583
614
  try {
584
615
  const persistenceOverride = resolvePersistenceOverride(worker.driver);
585
- const persisted = await WorkerFactory.getPersisted(worker.name, persistenceOverride);
616
+ const persisted = (await WorkerFactory.getPersisted(worker.name, persistenceOverride)) ??
617
+ (await WorkerFactory.getFileBackedRecord(worker.name));
586
618
  const health = await getWorkerHealthSnapshot(worker.name, worker.health);
587
619
  const metrics = await getWorkerMetricsSnapshot(worker.name, worker);
588
620
  const configuration = buildWorkerConfiguration(worker, persisted);
@@ -730,6 +762,12 @@ export async function getWorkerDetails(name, driver) {
730
762
  worker = buildWorkerFromRecord(record, normalizedDriver);
731
763
  }
732
764
  }
765
+ if (!worker) {
766
+ const fileBacked = await WorkerFactory.getFileBackedRecord(name);
767
+ if (fileBacked) {
768
+ worker = buildWorkerFromRecord(fileBacked, 'memory');
769
+ }
770
+ }
733
771
  if (!worker) {
734
772
  throw ErrorFactory.createWorkerError(`Worker ${name} not found`);
735
773
  }
package/dist/index.d.ts CHANGED
@@ -24,7 +24,7 @@ export { MultiQueueWorker } from './MultiQueueWorker';
24
24
  export { WorkerVersioning } from './WorkerVersioning';
25
25
  export { WorkerFactory } from './WorkerFactory';
26
26
  export type { ProcessorResolver, WorkerFactoryConfig, WorkerPersistenceConfig, } from './WorkerFactory';
27
- export { WorkerInit } from './WorkerInit';
27
+ export { buildFileBackedAutoStartTasks, selectAutoStartNames, selectAutoStartTasks, WorkerInit, } from './WorkerInit';
28
28
  export { WorkerShutdown } from './WorkerShutdown';
29
29
  export { WorkerController } from './http/WorkerController';
30
30
  export { registerWorkerRoutes } from './routes/workers';
package/dist/index.js CHANGED
@@ -1,14 +1,3 @@
1
- /**
2
- * @zintrust/workers v0.1.52
3
- *
4
- * ZinTrust Framework Package
5
- *
6
- * Build Information:
7
- * Built: 2026-03-20T13:12:38.169Z
8
- * Node: >=20.0.0
9
- * License: MIT
10
- *
11
- */
12
1
  /**
13
2
  * Worker Management System - Public API
14
3
  *
@@ -42,7 +31,7 @@ export { MultiQueueWorker } from './MultiQueueWorker.js';
42
31
  export { WorkerVersioning } from './WorkerVersioning.js';
43
32
  // Factory & Lifecycle
44
33
  export { WorkerFactory } from './WorkerFactory.js';
45
- export { WorkerInit } from './WorkerInit.js';
34
+ export { buildFileBackedAutoStartTasks, selectAutoStartNames, selectAutoStartTasks, WorkerInit, } from './WorkerInit.js';
46
35
  export { WorkerShutdown } from './WorkerShutdown.js';
47
36
  // HTTP Controllers & Routes
48
37
  export { WorkerController } from './http/WorkerController.js';
@@ -56,4 +45,4 @@ export { NotificationWorker } from './NotificationWorker.js';
56
45
  * Available at runtime for debugging and health checks
57
46
  */
58
47
  export const _ZINTRUST_WORKERS_VERSION = '0.1.0';
59
- export const _ZINTRUST_WORKERS_BUILD_DATE = '2026-03-20T13:12:38.203Z';
48
+ export const _ZINTRUST_WORKERS_BUILD_DATE = '__BUILD_DATE__';
@@ -1,6 +1,9 @@
1
- import type { CliCommandProvider } from '@zintrust/core/cli';
2
1
  type Registry = {
3
2
  register: (id: string, provider: CliCommandProvider) => void;
4
3
  };
4
+ type CliCommandProvider = {
5
+ getCommand: () => unknown;
6
+ name?: string;
7
+ };
5
8
  export declare function registerWorkerCliCommands(registry: Registry): void;
6
9
  export {};
package/dist/register.js CHANGED
@@ -1,5 +1,11 @@
1
1
  const commandModule = (await (async () => {
2
- return (await import('@zintrust/core/cli'));
2
+ const workerCommandsSpecifier = '@zintrust/core/worker-commands';
3
+ try {
4
+ return (await import(workerCommandsSpecifier));
5
+ }
6
+ catch {
7
+ return (await import('@zintrust/core/cli'));
8
+ }
3
9
  })());
4
10
  const getWorkerProviders = () => {
5
11
  const { WorkerCommands } = commandModule;
@@ -27,9 +33,9 @@ registerWorkerCliCommands({
27
33
  },
28
34
  });
29
35
  try {
30
- const core = (await import('@zintrust/core/cli'));
31
- if (core.OptionalCliCommandRegistry !== undefined) {
32
- registerWorkerCliCommands(core.OptionalCliCommandRegistry);
36
+ const coreCli = (await import('@zintrust/core/cli'));
37
+ if (coreCli.OptionalCliCommandRegistry !== undefined) {
38
+ registerWorkerCliCommands(coreCli.OptionalCliCommandRegistry);
33
39
  }
34
40
  }
35
41
  catch {
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@zintrust/workers",
3
- "version": "0.4.3",
3
+ "version": "0.4.27",
4
+ "description": "Worker orchestration and background job management for ZinTrust.",
4
5
  "private": false,
5
6
  "type": "module",
6
7
  "main": "./dist/index.js",
@@ -39,7 +40,7 @@
39
40
  "node": ">=20.0.0"
40
41
  },
41
42
  "peerDependencies": {
42
- "@zintrust/core": "^0.4.3",
43
+ "@zintrust/core": "^0.4.27",
43
44
  "@zintrust/queue-monitor": "*",
44
45
  "@zintrust/queue-redis": "*"
45
46
  },
@@ -54,11 +55,21 @@
54
55
  "publishConfig": {
55
56
  "access": "public"
56
57
  },
58
+ "keywords": [
59
+ "zintrust",
60
+ "workers",
61
+ "jobs",
62
+ "queue",
63
+ "orchestration"
64
+ ],
65
+ "scripts": {
66
+ "build": "node scripts/generate-embedded-assets.mjs && tsc -p tsconfig.json && node ../../scripts/fix-dist-esm-imports.mjs dist",
67
+ "prepublishOnly": "npm run build"
68
+ },
57
69
  "dependencies": {
58
70
  "@opentelemetry/api": "^1.9.0",
59
71
  "hot-shots": "^14.2.0",
60
72
  "ioredis": "^5.10.0",
61
- "ml.js": "^0.0.1",
62
73
  "prom-client": "^15.1.3",
63
74
  "simple-statistics": "^7.8.9"
64
75
  }