@archlast/server 0.1.8 → 0.1.9

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 (347) hide show
  1. package/README.md +104 -100
  2. package/dist/admin/auth.d.ts +24 -5
  3. package/dist/admin/auth.js +49 -25
  4. package/dist/admin/schema.d.ts +122 -32
  5. package/dist/admin/schema.js +131 -95
  6. package/dist/admin/seed.d.ts +1 -1
  7. package/dist/admin/seed.js +79 -47
  8. package/dist/auth/api-key-resolver.d.ts +1 -1
  9. package/dist/auth/api-key-resolver.js +7 -3
  10. package/dist/auth/archlast-auth-adapter.d.ts +2 -5
  11. package/dist/auth/archlast-auth-adapter.js +1 -1
  12. package/dist/auth/better-auth-adapter.d.ts.map +1 -1
  13. package/dist/auth/better-auth-adapter.js +41 -26
  14. package/dist/auth/better-auth-adapter.js.map +1 -1
  15. package/dist/auth/better-auth-admin.d.ts.map +1 -1
  16. package/dist/auth/better-auth-admin.js +1 -1
  17. package/dist/auth/better-auth-admin.js.map +1 -1
  18. package/dist/auth/better-auth-api-key-resolver.js +1 -1
  19. package/dist/auth/better-auth-api-key-resolver.js.map +1 -1
  20. package/dist/auth/better-auth-instance.d.ts +249 -301
  21. package/dist/auth/better-auth-instance.d.ts.map +1 -1
  22. package/dist/auth/better-auth-instance.js +11 -0
  23. package/dist/auth/better-auth-instance.js.map +1 -1
  24. package/dist/auth/better-auth-seed.d.ts +5 -2
  25. package/dist/auth/better-auth-seed.js +31 -22
  26. package/dist/auth/better-auth-session-adapter.d.ts.map +1 -1
  27. package/dist/auth/better-auth-session-adapter.js +14 -10
  28. package/dist/auth/better-auth-session-adapter.js.map +1 -1
  29. package/dist/auth/errors.d.ts.map +1 -1
  30. package/dist/auth/errors.js +11 -11
  31. package/dist/auth/errors.js.map +1 -1
  32. package/dist/auth/oauth-proxy.d.ts +5 -2
  33. package/dist/auth/oauth-proxy.js +23 -27
  34. package/dist/auth/resolver.d.ts.map +1 -1
  35. package/dist/auth/resolver.js.map +1 -1
  36. package/dist/auth/role-helpers.d.ts +1 -1
  37. package/dist/auth/role-helpers.d.ts.map +1 -1
  38. package/dist/auth/role-helpers.js.map +1 -1
  39. package/dist/auth/session-manager.d.ts +2 -5
  40. package/dist/auth/session-manager.js +16 -6
  41. package/dist/auth/system/better-auth-schema.d.ts.map +1 -1
  42. package/dist/auth/system/better-auth-schema.js +6 -23
  43. package/dist/auth/system/better-auth-schema.js.map +1 -1
  44. package/dist/cache/circuit-breaker.d.ts +81 -0
  45. package/dist/cache/circuit-breaker.d.ts.map +1 -0
  46. package/dist/cache/circuit-breaker.js +170 -0
  47. package/dist/cache/circuit-breaker.js.map +1 -0
  48. package/dist/cache/client.d.ts +6 -3
  49. package/dist/cache/client.d.ts.map +1 -1
  50. package/dist/cache/client.js +12 -53
  51. package/dist/cache/client.js.map +1 -1
  52. package/dist/cache/index.d.ts +2 -0
  53. package/dist/cache/index.d.ts.map +1 -1
  54. package/dist/cache/index.js +5 -1
  55. package/dist/cache/index.js.map +1 -1
  56. package/dist/cache/invalidation-queue.d.ts +63 -0
  57. package/dist/cache/invalidation-queue.d.ts.map +1 -0
  58. package/dist/cache/invalidation-queue.js +196 -0
  59. package/dist/cache/invalidation-queue.js.map +1 -0
  60. package/dist/cache/layers.d.ts +14 -4
  61. package/dist/cache/layers.d.ts.map +1 -1
  62. package/dist/cache/layers.js +66 -72
  63. package/dist/cache/layers.js.map +1 -1
  64. package/dist/cache/manager.d.ts.map +1 -1
  65. package/dist/cache/manager.js +6 -41
  66. package/dist/cache/manager.js.map +1 -1
  67. package/dist/cache/protocol.d.ts +4 -39
  68. package/dist/cache/protocol.d.ts.map +1 -1
  69. package/dist/cache/protocol.js.map +1 -1
  70. package/dist/cache/redis-adapter.d.ts +103 -0
  71. package/dist/cache/redis-adapter.d.ts.map +1 -0
  72. package/dist/cache/redis-adapter.js +424 -0
  73. package/dist/cache/redis-adapter.js.map +1 -0
  74. package/dist/cache/run-sidecar.js +10 -1
  75. package/dist/cache/run-sidecar.js.map +1 -1
  76. package/dist/cache/sidecar-server.d.ts +51 -1
  77. package/dist/cache/sidecar-server.d.ts.map +1 -1
  78. package/dist/cache/sidecar-server.js +368 -22
  79. package/dist/cache/sidecar-server.js.map +1 -1
  80. package/dist/cache/store.d.ts +43 -0
  81. package/dist/cache/store.d.ts.map +1 -1
  82. package/dist/cache/store.js +69 -76
  83. package/dist/cache/store.js.map +1 -1
  84. package/dist/cache/strategies.d.ts +2 -9
  85. package/dist/cache/strategies.d.ts.map +1 -1
  86. package/dist/cache/types.d.ts +130 -0
  87. package/dist/cache/types.d.ts.map +1 -0
  88. package/dist/cache/types.js +60 -0
  89. package/dist/cache/types.js.map +1 -0
  90. package/dist/config/bullmq.d.ts +16 -0
  91. package/dist/config/bullmq.d.ts.map +1 -0
  92. package/dist/config/bullmq.js +103 -0
  93. package/dist/config/bullmq.js.map +1 -0
  94. package/dist/config/index.d.ts +1 -0
  95. package/dist/config/index.d.ts.map +1 -1
  96. package/dist/config/index.js +1 -0
  97. package/dist/config/index.js.map +1 -1
  98. package/dist/config/schema.d.ts +80 -6
  99. package/dist/config/schema.d.ts.map +1 -1
  100. package/dist/config/schema.js +71 -6
  101. package/dist/config/schema.js.map +1 -1
  102. package/dist/config/service.d.ts +54 -4
  103. package/dist/config/service.d.ts.map +1 -1
  104. package/dist/config/service.js +56 -2
  105. package/dist/config/service.js.map +1 -1
  106. package/dist/controllers/admin/admin-tokens.controller.d.ts +131 -115
  107. package/dist/controllers/admin/admin-tokens.controller.js +117 -98
  108. package/dist/controllers/admin/api-keys.controller.d.ts +1 -1
  109. package/dist/controllers/admin/api-keys.controller.d.ts.map +1 -1
  110. package/dist/controllers/admin/api-keys.controller.js.map +1 -1
  111. package/dist/controllers/admin/app-users.controller.d.ts +274 -243
  112. package/dist/controllers/admin/app-users.controller.js +301 -257
  113. package/dist/controllers/admin/auth.controller.d.ts +260 -236
  114. package/dist/controllers/admin/auth.controller.js +197 -174
  115. package/dist/controllers/admin/backup.controller.d.ts.map +1 -1
  116. package/dist/controllers/admin/backup.controller.js.map +1 -1
  117. package/dist/controllers/admin/settings.controller.d.ts +1 -1
  118. package/dist/controllers/admin/storage-stats.controller.d.ts +63 -0
  119. package/dist/controllers/admin/storage-stats.controller.d.ts.map +1 -0
  120. package/dist/controllers/admin/storage-stats.controller.js +33 -0
  121. package/dist/controllers/admin/storage-stats.controller.js.map +1 -0
  122. package/dist/controllers/admin/tenants.controller.d.ts.map +1 -1
  123. package/dist/controllers/admin/tenants.controller.js.map +1 -1
  124. package/dist/controllers/admin/users.controller.d.ts +1 -1
  125. package/dist/controllers/admin/users.controller.d.ts.map +1 -1
  126. package/dist/controllers/admin/users.controller.js.map +1 -1
  127. package/dist/controllers/auth.controller.d.ts +289 -271
  128. package/dist/controllers/auth.controller.js +275 -226
  129. package/dist/controllers/crud-generator.controller.d.ts.map +1 -1
  130. package/dist/controllers/crud-generator.controller.js +127 -125
  131. package/dist/controllers/crud-generator.controller.js.map +1 -1
  132. package/dist/controllers/index.d.ts +1 -1
  133. package/dist/controllers/index.d.ts.map +1 -1
  134. package/dist/controllers/index.js.map +1 -1
  135. package/dist/controllers/introspection.controller.d.ts +642 -0
  136. package/dist/controllers/introspection.controller.d.ts.map +1 -1
  137. package/dist/controllers/introspection.controller.js +611 -0
  138. package/dist/controllers/introspection.controller.js.map +1 -1
  139. package/dist/controllers/invite.controller.d.ts +190 -170
  140. package/dist/controllers/invite.controller.js +183 -164
  141. package/dist/controllers/mfa.controller.d.ts +205 -183
  142. package/dist/controllers/mfa.controller.js +131 -111
  143. package/dist/controllers/otp.controller.d.ts +194 -171
  144. package/dist/controllers/otp.controller.js +192 -175
  145. package/dist/controllers/storage.controller.d.ts.map +1 -1
  146. package/dist/controllers/storage.controller.js.map +1 -1
  147. package/dist/controllers/system.controller.d.ts +5 -3
  148. package/dist/controllers/system.controller.d.ts.map +1 -1
  149. package/dist/controllers/system.controller.js +4 -2
  150. package/dist/controllers/system.controller.js.map +1 -1
  151. package/dist/controllers/tenant.controller.d.ts +258 -227
  152. package/dist/controllers/tenant.controller.js +224 -200
  153. package/dist/db/cachedclient.d.ts +6 -11
  154. package/dist/db/cachedclient.d.ts.map +1 -1
  155. package/dist/db/cachedclient.js +79 -43
  156. package/dist/db/cachedclient.js.map +1 -1
  157. package/dist/db/distributed-client.d.ts +79 -24
  158. package/dist/db/distributed-client.js +23 -24
  159. package/dist/db/factory.d.ts +3 -8
  160. package/dist/db/factory.d.ts.map +1 -1
  161. package/dist/db/factory.js +3 -22
  162. package/dist/db/factory.js.map +1 -1
  163. package/dist/db/socket-client.d.ts +7 -0
  164. package/dist/db/socket-client.d.ts.map +1 -1
  165. package/dist/db/socket-client.js +140 -11
  166. package/dist/db/socket-client.js.map +1 -1
  167. package/dist/deployment/handler.d.ts +10 -2
  168. package/dist/deployment/handler.d.ts.map +1 -1
  169. package/dist/deployment/handler.js +70 -15
  170. package/dist/deployment/handler.js.map +1 -1
  171. package/dist/deployment/persistence.d.ts.map +1 -1
  172. package/dist/deployment/persistence.js +6 -1
  173. package/dist/deployment/persistence.js.map +1 -1
  174. package/dist/docker/compose.d.ts.map +1 -1
  175. package/dist/docker/compose.js +76 -0
  176. package/dist/docker/compose.js.map +1 -1
  177. package/dist/engine/runner.d.ts.map +1 -1
  178. package/dist/engine/runner.js +0 -43
  179. package/dist/engine/runner.js.map +1 -1
  180. package/dist/functions/built-in/auth-apikey.d.ts.map +1 -1
  181. package/dist/functions/built-in/auth-apikey.js.map +1 -1
  182. package/dist/functions/built-in/system-cache.d.ts.map +1 -1
  183. package/dist/functions/built-in/system-cache.js +6 -31
  184. package/dist/functions/built-in/system-cache.js.map +1 -1
  185. package/dist/functions/built-in/system-data.d.ts.map +1 -1
  186. package/dist/functions/built-in/system-data.js +4 -2
  187. package/dist/functions/built-in/system-data.js.map +1 -1
  188. package/dist/functions/definition.d.ts.map +1 -1
  189. package/dist/functions/definition.js +6 -2
  190. package/dist/functions/definition.js.map +1 -1
  191. package/dist/http/routes/metrics.d.ts +42 -0
  192. package/dist/http/routes/metrics.d.ts.map +1 -0
  193. package/dist/http/routes/metrics.js +29 -0
  194. package/dist/http/routes/metrics.js.map +1 -0
  195. package/dist/http/server.d.ts +1 -0
  196. package/dist/http/server.d.ts.map +1 -1
  197. package/dist/http/server.js +41 -3
  198. package/dist/http/server.js.map +1 -1
  199. package/dist/ipc/socket-bridge.d.ts +1 -0
  200. package/dist/ipc/socket-bridge.d.ts.map +1 -1
  201. package/dist/ipc/socket-bridge.js +5 -1
  202. package/dist/ipc/socket-bridge.js.map +1 -1
  203. package/dist/jobs/bullmq-adapter.d.ts +154 -0
  204. package/dist/jobs/bullmq-adapter.d.ts.map +1 -0
  205. package/dist/jobs/bullmq-adapter.js +688 -0
  206. package/dist/jobs/bullmq-adapter.js.map +1 -0
  207. package/dist/jobs/bullmq-circuit-breaker.d.ts +133 -0
  208. package/dist/jobs/bullmq-circuit-breaker.d.ts.map +1 -0
  209. package/dist/jobs/bullmq-circuit-breaker.js +323 -0
  210. package/dist/jobs/bullmq-circuit-breaker.js.map +1 -0
  211. package/dist/jobs/bullmq-dlq-manager.d.ts +155 -0
  212. package/dist/jobs/bullmq-dlq-manager.d.ts.map +1 -0
  213. package/dist/jobs/bullmq-dlq-manager.js +325 -0
  214. package/dist/jobs/bullmq-dlq-manager.js.map +1 -0
  215. package/dist/jobs/bullmq-metrics.d.ts +104 -0
  216. package/dist/jobs/bullmq-metrics.d.ts.map +1 -0
  217. package/dist/jobs/bullmq-metrics.js +323 -0
  218. package/dist/jobs/bullmq-metrics.js.map +1 -0
  219. package/dist/jobs/bullmq-priority-service.d.ts +173 -0
  220. package/dist/jobs/bullmq-priority-service.d.ts.map +1 -0
  221. package/dist/jobs/bullmq-priority-service.js +390 -0
  222. package/dist/jobs/bullmq-priority-service.js.map +1 -0
  223. package/dist/jobs/bullmq-scheduler.d.ts +111 -0
  224. package/dist/jobs/bullmq-scheduler.d.ts.map +1 -0
  225. package/dist/jobs/bullmq-scheduler.js +300 -0
  226. package/dist/jobs/bullmq-scheduler.js.map +1 -0
  227. package/dist/jobs/bullmq-worker.d.ts +155 -0
  228. package/dist/jobs/bullmq-worker.d.ts.map +1 -0
  229. package/dist/jobs/bullmq-worker.js +651 -0
  230. package/dist/jobs/bullmq-worker.js.map +1 -0
  231. package/dist/jobs/circuit-breaker.d.ts +120 -0
  232. package/dist/jobs/circuit-breaker.d.ts.map +1 -0
  233. package/dist/jobs/circuit-breaker.js +262 -0
  234. package/dist/jobs/circuit-breaker.js.map +1 -0
  235. package/dist/jobs/index.d.ts +1 -1
  236. package/dist/jobs/index.d.ts.map +1 -1
  237. package/dist/jobs/index.js.map +1 -1
  238. package/dist/jobs/queue.d.ts +120 -1
  239. package/dist/jobs/queue.d.ts.map +1 -1
  240. package/dist/jobs/queue.js +487 -9
  241. package/dist/jobs/queue.js.map +1 -1
  242. package/dist/jobs/redis-connection.d.ts +50 -0
  243. package/dist/jobs/redis-connection.d.ts.map +1 -0
  244. package/dist/jobs/redis-connection.js +123 -0
  245. package/dist/jobs/redis-connection.js.map +1 -0
  246. package/dist/jobs/run-scheduler.js +163 -10
  247. package/dist/jobs/run-scheduler.js.map +1 -1
  248. package/dist/jobs/run-worker.js +101 -9
  249. package/dist/jobs/run-worker.js.map +1 -1
  250. package/dist/jobs/worker-thread.d.ts +6 -0
  251. package/dist/jobs/worker-thread.d.ts.map +1 -1
  252. package/dist/jobs/worker-thread.js +37 -8
  253. package/dist/jobs/worker-thread.js.map +1 -1
  254. package/dist/jobs/worker.d.ts +33 -0
  255. package/dist/jobs/worker.d.ts.map +1 -1
  256. package/dist/jobs/worker.js +358 -115
  257. package/dist/jobs/worker.js.map +1 -1
  258. package/dist/linq/async-enumerable.d.ts.map +1 -1
  259. package/dist/linq/async-enumerable.js.map +1 -1
  260. package/dist/linq/enumerable.d.ts.map +1 -1
  261. package/dist/linq/enumerable.js +10 -10
  262. package/dist/linq/enumerable.js.map +1 -1
  263. package/dist/metrics/collector.d.ts +26 -0
  264. package/dist/metrics/collector.d.ts.map +1 -0
  265. package/dist/metrics/collector.js +103 -0
  266. package/dist/metrics/collector.js.map +1 -0
  267. package/dist/polling/updates.controller.d.ts +57 -0
  268. package/dist/polling/updates.controller.d.ts.map +1 -0
  269. package/dist/polling/updates.controller.js +70 -0
  270. package/dist/polling/updates.controller.js.map +1 -0
  271. package/dist/repository/db-set.d.ts.map +1 -1
  272. package/dist/repository/db-set.js +12 -8
  273. package/dist/repository/db-set.js.map +1 -1
  274. package/dist/repository/ef-core.d.ts.map +1 -1
  275. package/dist/repository/ef-core.js +6 -6
  276. package/dist/repository/ef-core.js.map +1 -1
  277. package/dist/repository/factory.d.ts +1 -1
  278. package/dist/repository/factory.d.ts.map +1 -1
  279. package/dist/repository/factory.js.map +1 -1
  280. package/dist/repository/interfaces.d.ts.map +1 -1
  281. package/dist/repository/interfaces.js.map +1 -1
  282. package/dist/repository/queryable.d.ts.map +1 -1
  283. package/dist/repository/queryable.js.map +1 -1
  284. package/dist/rpc/adapter.d.ts.map +1 -1
  285. package/dist/rpc/adapter.js.map +1 -1
  286. package/dist/rpc/router.d.ts +2 -2
  287. package/dist/rpc/router.d.ts.map +1 -1
  288. package/dist/rpc/router.js +1 -1
  289. package/dist/rpc/router.js.map +1 -1
  290. package/dist/schema/relationship-types.d.ts +7 -2
  291. package/dist/schema/relationship-types.js +1 -1
  292. package/dist/schema/types.d.ts.map +1 -1
  293. package/dist/services/admin/app-users.service.d.ts +1 -1
  294. package/dist/services/admin/app-users.service.js +31 -38
  295. package/dist/services/admin/auth.service.d.ts +1 -1
  296. package/dist/services/admin/auth.service.js +11 -5
  297. package/dist/services/admin/backup/BackupOrchestrator.d.ts.map +1 -1
  298. package/dist/services/admin/backup/BackupOrchestrator.js +4 -7
  299. package/dist/services/admin/backup/BackupOrchestrator.js.map +1 -1
  300. package/dist/services/admin/backup/SqliteGenerator.js +8 -8
  301. package/dist/services/admin/backup/StorageStreamer.d.ts +3 -3
  302. package/dist/services/admin/backup/StorageStreamer.d.ts.map +1 -1
  303. package/dist/services/admin/backup/StorageStreamer.js +16 -55
  304. package/dist/services/admin/backup/StorageStreamer.js.map +1 -1
  305. package/dist/services/admin/backup/ZipComposer.d.ts +2 -0
  306. package/dist/services/admin/backup/ZipComposer.d.ts.map +1 -1
  307. package/dist/services/admin/backup/ZipComposer.js +23 -0
  308. package/dist/services/admin/backup/ZipComposer.js.map +1 -1
  309. package/dist/services/admin/backup.service.d.ts.map +1 -1
  310. package/dist/services/admin/backup.service.js.map +1 -1
  311. package/dist/services/admin/data.service.d.ts.map +1 -1
  312. package/dist/services/admin/data.service.js +287 -286
  313. package/dist/services/admin/data.service.js.map +1 -1
  314. package/dist/services/admin/tenants.service.d.ts.map +1 -1
  315. package/dist/services/admin/tenants.service.js.map +1 -1
  316. package/dist/services/auth.service.d.ts +2 -3
  317. package/dist/services/auth.service.js +16 -16
  318. package/dist/services/invite.service.d.ts +1 -1
  319. package/dist/services/invite.service.js +17 -15
  320. package/dist/services/storage.service.d.ts.map +1 -1
  321. package/dist/services/storage.service.js +35 -4
  322. package/dist/services/storage.service.js.map +1 -1
  323. package/dist/services/system.service.d.ts.map +1 -1
  324. package/dist/services/system.service.js +1 -1
  325. package/dist/services/system.service.js.map +1 -1
  326. package/dist/services/tenant.service.d.ts +1 -1
  327. package/dist/services/tenant.service.js +43 -31
  328. package/dist/sse/subscriptions.controller.d.ts +57 -0
  329. package/dist/sse/subscriptions.controller.d.ts.map +1 -0
  330. package/dist/sse/subscriptions.controller.js +127 -0
  331. package/dist/sse/subscriptions.controller.js.map +1 -0
  332. package/dist/startup/bootstrap.d.ts +13 -2
  333. package/dist/startup/bootstrap.d.ts.map +1 -1
  334. package/dist/startup/bootstrap.js +85 -13
  335. package/dist/startup/bootstrap.js.map +1 -1
  336. package/dist/storage/s3-backend.d.ts.map +1 -1
  337. package/dist/storage/s3-backend.js +3 -3
  338. package/dist/storage/s3-backend.js.map +1 -1
  339. package/dist/websocket/server.d.ts.map +1 -1
  340. package/dist/websocket/server.js +14 -3
  341. package/dist/websocket/server.js.map +1 -1
  342. package/docker/README.md +309 -11
  343. package/package.json +214 -210
  344. package/templates/.env.example +115 -55
  345. package/templates/archlast.config.js +51 -37
  346. package/templates/docker-compose.prod.yml +32 -15
  347. package/templates/docker-compose.yml +117 -33
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JobQueue = exports.JOBS_COLLECTION = void 0;
3
+ exports.JobQueue = exports.JOBS_DLQ_COLLECTION = exports.JOBS_COLLECTION = void 0;
4
4
  const logger_js_1 = require("../logging/logger.js");
5
+ const collector_js_1 = require("../metrics/collector.js");
6
+ const worker_js_1 = require("./worker.js");
5
7
  // Collection for jobs
6
8
  exports.JOBS_COLLECTION = "_jobs";
9
+ // Collection for dead letter queue
10
+ exports.JOBS_DLQ_COLLECTION = "_jobs_dlq";
7
11
  class JobQueue {
8
12
  db;
9
13
  defaultMaxAttempts;
@@ -25,6 +29,7 @@ class JobQueue {
25
29
  const now = Date.now();
26
30
  const runAfter = now + (options?.runAfterMs ?? 0);
27
31
  const maxAttempts = options?.maxAttempts ?? this.defaultMaxAttempts;
32
+ const priority = options?.priority ?? 5;
28
33
  const id = await this.db.insert(exports.JOBS_COLLECTION, {
29
34
  name,
30
35
  payload,
@@ -35,7 +40,12 @@ class JobQueue {
35
40
  createdAt: now,
36
41
  updatedAt: now,
37
42
  lastError: null,
43
+ priority,
44
+ timeoutMs: options?.timeoutMs ?? 300000,
45
+ dependsOn: options?.dependsOn,
38
46
  });
47
+ // Update metrics
48
+ collector_js_1.jobMetrics.jobsPending.inc({ priority_level: String(priority) });
39
49
  logger_js_1.logger.log({
40
50
  timestamp: Date.now(),
41
51
  level: "info",
@@ -45,12 +55,56 @@ class JobQueue {
45
55
  this.emitRevalidation();
46
56
  return id;
47
57
  }
58
+ /**
59
+ * Calculate effective priority with aging to prevent starvation.
60
+ * Low-priority jobs gain priority over time (1 point every 15 minutes, max 5 points).
61
+ */
62
+ calculateEffectivePriority(basePriority, createdAt) {
63
+ const waitTimeMs = Date.now() - createdAt;
64
+ // Add 1 point every 15 minutes (900000ms), max 5 points
65
+ const agingBonus = Math.min(5, Math.floor(waitTimeMs / 900000));
66
+ return basePriority + agingBonus;
67
+ }
68
+ /**
69
+ * Apply aging boost to old pending jobs to prevent starvation.
70
+ * This updates the priority field in the database for jobs that have been waiting too long.
71
+ */
72
+ async applyAgingToPendingJobs() {
73
+ const now = Date.now();
74
+ const fifteenMinutesAgo = now - 900000; // 15 minutes
75
+ // Find jobs that have been pending for more than 15 minutes
76
+ const oldJobs = await this.db.findMany(exports.JOBS_COLLECTION, {
77
+ where: {
78
+ and: [
79
+ { status: { eq: "pending" } },
80
+ { createdAt: { lte: fifteenMinutesAgo } }
81
+ ]
82
+ },
83
+ take: 100, // Process in batches
84
+ });
85
+ // Update priority for old jobs (aging boost)
86
+ for (const job of oldJobs) {
87
+ const currentPriority = job.priority ?? 5;
88
+ const effectivePriority = this.calculateEffectivePriority(currentPriority, job.createdAt);
89
+ // Only update if priority would increase
90
+ if (effectivePriority > currentPriority) {
91
+ await this.db.update(exports.JOBS_COLLECTION, job._id, {
92
+ priority: effectivePriority
93
+ });
94
+ }
95
+ }
96
+ }
48
97
  /**
49
98
  * Claim the next available job for execution.
50
99
  * Returns null if none are ready.
51
100
  */
52
101
  async claimNext() {
53
102
  const now = Date.now();
103
+ // Apply aging boost to old jobs to prevent starvation
104
+ // Run this occasionally (every 10th claim) to balance performance
105
+ if (Math.random() < 0.1) {
106
+ await this.applyAgingToPendingJobs();
107
+ }
54
108
  // Find pending jobs ready to run
55
109
  logger_js_1.logger.log({
56
110
  timestamp: Date.now(),
@@ -58,11 +112,16 @@ class JobQueue {
58
112
  kind: "system",
59
113
  message: `[JobQueue] Checking for jobs. Now: ${now}`,
60
114
  });
115
+ // Find pending jobs ready to run, ordered by priority (DESC) then creation time (ASC)
116
+ // This ensures high-priority jobs execute first, with FIFO ordering within same priority
61
117
  const jobs = await this.db.findMany(exports.JOBS_COLLECTION, {
62
118
  where: {
63
119
  and: [{ status: { eq: "pending" } }, { runAfter: { lte: now } }],
64
120
  },
65
- orderBy: { createdAt: "asc" },
121
+ orderBy: [
122
+ { priority: "desc" }, // Higher priority first (20=urgent, 1=low)
123
+ { createdAt: "asc" } // FIFO within same priority level
124
+ ],
66
125
  take: 1,
67
126
  });
68
127
  if (jobs.length > 0) {
@@ -78,12 +137,19 @@ class JobQueue {
78
137
  }
79
138
  const job = jobs[0];
80
139
  const nextAttempts = (job.attempts ?? 0) + 1;
140
+ const priority = job.priority ?? 5;
81
141
  // Claim the job by updating to active
82
142
  await this.db.update(exports.JOBS_COLLECTION, job._id, {
83
143
  status: "active",
84
144
  attempts: nextAttempts,
85
145
  updatedAt: now,
86
146
  });
147
+ // Update metrics
148
+ collector_js_1.jobMetrics.jobsPending.dec({ priority_level: String(priority) });
149
+ collector_js_1.jobMetrics.jobsActive.inc();
150
+ // Track queue wait time
151
+ const waitTime = (now - job.createdAt) / 1000;
152
+ collector_js_1.jobMetrics.jobQueueWait.observe({ priority_level: String(priority) }, waitTime);
87
153
  this.emitRevalidation();
88
154
  return {
89
155
  _id: job._id,
@@ -97,15 +163,21 @@ class JobQueue {
97
163
  createdAt: job.createdAt,
98
164
  updatedAt: now,
99
165
  lastError: job.lastError,
166
+ priority,
100
167
  };
101
168
  }
102
- async complete(id) {
169
+ async complete(id, jobName) {
103
170
  const now = Date.now();
104
171
  await this.db.update(exports.JOBS_COLLECTION, id, {
105
172
  status: "completed",
106
173
  updatedAt: now,
107
174
  lastError: null,
108
175
  });
176
+ // Update metrics
177
+ if (jobName) {
178
+ collector_js_1.jobMetrics.jobsCompleted.inc({ job_name: jobName, status: "completed" });
179
+ }
180
+ collector_js_1.jobMetrics.jobsActive.dec();
109
181
  logger_js_1.logger.log({
110
182
  timestamp: Date.now(),
111
183
  level: "info",
@@ -119,18 +191,31 @@ class JobQueue {
119
191
  const errorMsg = error instanceof Error ? error.message : String(error);
120
192
  const attempts = job.attempts;
121
193
  const maxAttempts = job.maxAttempts;
194
+ const errorCategory = this.categorizeError(error);
122
195
  if (attempts >= maxAttempts) {
123
- // Permanently failed
124
- await this.db.update(exports.JOBS_COLLECTION, job._id, {
125
- status: "failed",
126
- updatedAt: now,
127
- lastError: errorMsg,
196
+ // Permanently failed - move to DLQ
197
+ const dlqRecord = {
198
+ ...job,
199
+ originalJobId: job._id,
200
+ deadLetteredAt: now,
201
+ errorCategory,
202
+ diagnostics: this.extractDiagnostics(error),
203
+ reprocessCount: 0,
204
+ };
205
+ await this.db.insert(exports.JOBS_DLQ_COLLECTION, dlqRecord);
206
+ await this.db.delete(exports.JOBS_COLLECTION, job._id);
207
+ // Update metrics
208
+ collector_js_1.jobMetrics.jobsFailed.inc({
209
+ job_name: job.name,
210
+ error_category: errorCategory
128
211
  });
212
+ collector_js_1.jobMetrics.jobsInDLQ.inc({ error_category: errorCategory });
213
+ collector_js_1.jobMetrics.jobsActive.dec();
129
214
  logger_js_1.logger.log({
130
215
  timestamp: Date.now(),
131
216
  level: "error",
132
217
  kind: "system",
133
- message: `[JobQueue] Job failed permanently: ${job._id} (${job.name})`,
218
+ message: `[JobQueue] Job moved to DLQ: ${job._id} (${job.name}) - ${errorCategory}: ${errorMsg}`,
134
219
  });
135
220
  this.emitRevalidation();
136
221
  return;
@@ -144,6 +229,9 @@ class JobQueue {
144
229
  updatedAt: now,
145
230
  lastError: errorMsg,
146
231
  });
232
+ // Update metrics
233
+ collector_js_1.jobMetrics.jobsRetried.inc({ job_name: job.name });
234
+ collector_js_1.jobMetrics.jobsActive.dec();
147
235
  logger_js_1.logger.log({
148
236
  timestamp: Date.now(),
149
237
  level: "warn",
@@ -152,6 +240,41 @@ class JobQueue {
152
240
  });
153
241
  this.emitRevalidation();
154
242
  }
243
+ /**
244
+ * Categorize error for DLQ classification
245
+ */
246
+ categorizeError(error) {
247
+ if (error instanceof worker_js_1.JobTimeoutError) {
248
+ return "timeout";
249
+ }
250
+ if (error instanceof Error) {
251
+ const msg = error.message.toLowerCase();
252
+ if (msg.includes("timeout") || msg.includes("timed out")) {
253
+ return "timeout";
254
+ }
255
+ if (msg.includes("validation") || msg.includes("invalid")) {
256
+ return "validation";
257
+ }
258
+ if (msg.includes("dependency") || msg.includes("depends on")) {
259
+ return "dependency";
260
+ }
261
+ }
262
+ return "system";
263
+ }
264
+ /**
265
+ * Extract diagnostic information from error
266
+ */
267
+ extractDiagnostics(error) {
268
+ const diagnostics = {
269
+ timestamp: Date.now(),
270
+ };
271
+ if (error instanceof Error) {
272
+ diagnostics.name = error.name;
273
+ diagnostics.message = error.message;
274
+ diagnostics.stack = error.stack;
275
+ }
276
+ return diagnostics;
277
+ }
155
278
  async getJob(id) {
156
279
  const job = (await this.db.get(exports.JOBS_COLLECTION, id));
157
280
  if (!job)
@@ -185,8 +308,363 @@ class JobQueue {
185
308
  createdAt: doc.createdAt,
186
309
  updatedAt: doc.updatedAt,
187
310
  lastError: doc.lastError,
311
+ priority: doc.priority,
312
+ timeoutMs: doc.timeoutMs,
313
+ dependsOn: doc.dependsOn,
188
314
  };
189
315
  }
316
+ // ========== DLQ Management Methods ==========
317
+ /**
318
+ * List DLQ jobs with optional filtering and pagination
319
+ */
320
+ async getDLQJobs(options) {
321
+ const { limit = 100, offset = 0, errorCategory, jobName } = options ?? {};
322
+ const whereClauses = [];
323
+ if (errorCategory) {
324
+ whereClauses.push({ errorCategory: { eq: errorCategory } });
325
+ }
326
+ if (jobName) {
327
+ whereClauses.push({ name: { eq: jobName } });
328
+ }
329
+ const where = whereClauses.length > 0 ? { and: whereClauses } : undefined;
330
+ const jobs = await this.db.findMany(exports.JOBS_DLQ_COLLECTION, {
331
+ where,
332
+ orderBy: { deadLetteredAt: "desc" },
333
+ skip: offset,
334
+ take: limit,
335
+ });
336
+ logger_js_1.logger.log({
337
+ timestamp: Date.now(),
338
+ level: "info",
339
+ kind: "system",
340
+ message: `[JobQueue] Listed ${jobs.length} DLQ jobs`,
341
+ });
342
+ return jobs.map((job) => ({
343
+ ...this.mapDoc(job),
344
+ originalJobId: job.originalJobId,
345
+ deadLetteredAt: job.deadLetteredAt,
346
+ errorCategory: job.errorCategory,
347
+ diagnostics: job.diagnostics,
348
+ reprocessCount: job.reprocessCount ?? 0,
349
+ }));
350
+ }
351
+ /**
352
+ * Get specific DLQ job by ID
353
+ */
354
+ async getDLQJob(id) {
355
+ const job = await this.db.get(exports.JOBS_DLQ_COLLECTION, id);
356
+ if (!job)
357
+ return null;
358
+ return {
359
+ ...this.mapDoc(job),
360
+ originalJobId: job.originalJobId,
361
+ deadLetteredAt: job.deadLetteredAt,
362
+ errorCategory: job.errorCategory,
363
+ diagnostics: job.diagnostics,
364
+ reprocessCount: job.reprocessCount ?? 0,
365
+ };
366
+ }
367
+ /**
368
+ * Get DLQ statistics
369
+ */
370
+ async getDLQStats() {
371
+ const allJobs = await this.db.findMany(exports.JOBS_DLQ_COLLECTION, {
372
+ orderBy: { deadLetteredAt: "desc" },
373
+ });
374
+ // Map server error categories to client-expected categories
375
+ const categoryMapping = {
376
+ timeout: "timeout",
377
+ validation: "validation",
378
+ dependency: "unknown", // Map dependency to unknown
379
+ system: "execution", // Map system to execution
380
+ };
381
+ const byErrorCategory = {};
382
+ const byStatus = {};
383
+ const byJobName = {};
384
+ const now = Date.now();
385
+ let oldestFailure = null;
386
+ let recentFailures24h = 0;
387
+ const twentyFourHoursAgo = now - 24 * 60 * 60 * 1000;
388
+ for (const job of allJobs) {
389
+ // Map and count by error category
390
+ const rawCategory = job.errorCategory ?? "system";
391
+ const mappedCategory = categoryMapping[rawCategory] ?? "unknown";
392
+ byErrorCategory[mappedCategory] = (byErrorCategory[mappedCategory] ?? 0) + 1;
393
+ // Count by status (based on reprocessCount)
394
+ const status = job.reprocessCount > 0 ? "retried" : "pending";
395
+ byStatus[status] = (byStatus[status] ?? 0) + 1;
396
+ // Count by job name
397
+ const name = job.name ?? "unnamed";
398
+ byJobName[name] = (byJobName[name] ?? 0) + 1;
399
+ // Track oldest failure timestamp
400
+ const deadLetteredAt = job.deadLetteredAt ?? now;
401
+ if (oldestFailure === null || deadLetteredAt < oldestFailure) {
402
+ oldestFailure = deadLetteredAt;
403
+ }
404
+ // Count failures in last 24 hours
405
+ if (deadLetteredAt >= twentyFourHoursAgo) {
406
+ recentFailures24h++;
407
+ }
408
+ }
409
+ return {
410
+ totalDLQJobs: allJobs.length,
411
+ byStatus,
412
+ byErrorCategory,
413
+ byJobName,
414
+ oldestFailure,
415
+ recentFailures24h,
416
+ };
417
+ }
418
+ /**
419
+ * Reprocess a job from DLQ back to main queue
420
+ * @param dlqJobId - ID of DLQ job
421
+ * @param options - Reprocessing options
422
+ * @returns ID of new job in main queue
423
+ */
424
+ async reprocessFromDLQ(dlqJobId, options) {
425
+ // Retrieve DLQ job
426
+ const dlqJob = await this.getDLQJob(dlqJobId);
427
+ if (!dlqJob) {
428
+ throw new Error(`DLQ job not found: ${dlqJobId}`);
429
+ }
430
+ // Create new job in main queue with same payload
431
+ const newJobId = await this.enqueue(dlqJob.name, dlqJob.payload, {
432
+ maxAttempts: options?.newMaxAttempts ?? dlqJob.maxAttempts,
433
+ priority: options?.priority ?? dlqJob.priority,
434
+ });
435
+ // Increment reprocess count in DLQ record using transaction
436
+ await this.db.runInTransaction(async (db) => {
437
+ const current = (await db.get(exports.JOBS_DLQ_COLLECTION, dlqJobId));
438
+ if (current) {
439
+ await db.update(exports.JOBS_DLQ_COLLECTION, dlqJobId, {
440
+ reprocessCount: (current.reprocessCount ?? 0) + 1,
441
+ updatedAt: Date.now(),
442
+ });
443
+ }
444
+ });
445
+ logger_js_1.logger.log({
446
+ timestamp: Date.now(),
447
+ level: "info",
448
+ kind: "system",
449
+ message: `[JobQueue] Reprocessed DLQ job ${dlqJobId} -> new job ${newJobId}`,
450
+ });
451
+ return newJobId;
452
+ }
453
+ /**
454
+ * Delete specific DLQ job
455
+ */
456
+ async deleteFromDLQ(id) {
457
+ const job = await this.db.get(exports.JOBS_DLQ_COLLECTION, id);
458
+ if (!job) {
459
+ throw new Error(`DLQ job not found: ${id}`);
460
+ }
461
+ await this.db.delete(exports.JOBS_DLQ_COLLECTION, id);
462
+ logger_js_1.logger.log({
463
+ timestamp: Date.now(),
464
+ level: "info",
465
+ kind: "system",
466
+ message: `[JobQueue] Deleted DLQ job: ${id}`,
467
+ });
468
+ this.emitRevalidation();
469
+ }
470
+ /**
471
+ * Purge DLQ jobs older than specified time
472
+ * @param olderThanMs - Age in milliseconds (default: 30 days)
473
+ * @returns Number of jobs purged
474
+ */
475
+ async purgeDLQ(olderThanMs = 30 * 24 * 60 * 60 * 1000) {
476
+ const now = Date.now();
477
+ const cutoffTime = now - olderThanMs;
478
+ // Find all DLQ jobs
479
+ const allJobs = await this.db.findMany(exports.JOBS_DLQ_COLLECTION, {
480
+ orderBy: { deadLetteredAt: "desc" },
481
+ });
482
+ // Filter jobs older than cutoff
483
+ const toDelete = allJobs.filter((job) => {
484
+ const deadLetteredAt = job.deadLetteredAt ?? now;
485
+ return deadLetteredAt < cutoffTime;
486
+ });
487
+ // Delete each job
488
+ for (const job of toDelete) {
489
+ await this.db.delete(exports.JOBS_DLQ_COLLECTION, job._id);
490
+ }
491
+ logger_js_1.logger.log({
492
+ timestamp: Date.now(),
493
+ level: "info",
494
+ kind: "system",
495
+ message: `[JobQueue] Purged ${toDelete.length} DLQ jobs older than ${olderThanMs}ms`,
496
+ });
497
+ this.emitRevalidation();
498
+ return toDelete.length;
499
+ }
500
+ // ========== Priority and Monitoring Methods ==========
501
+ /**
502
+ * Get queue statistics
503
+ */
504
+ async getQueueStats() {
505
+ const jobs = await this.db.findMany(exports.JOBS_COLLECTION);
506
+ let pendingJobs = 0;
507
+ let activeJobs = 0;
508
+ let completedJobs = 0;
509
+ let failedJobs = 0;
510
+ const priorityDistribution = {};
511
+ // Calculate total processing time for completed jobs
512
+ let totalProcessingTime = 0;
513
+ let completedCount = 0;
514
+ for (const job of jobs) {
515
+ // Count by status
516
+ const status = job.status;
517
+ if (status === "pending")
518
+ pendingJobs++;
519
+ else if (status === "active")
520
+ activeJobs++;
521
+ else if (status === "completed")
522
+ completedJobs++;
523
+ else if (status === "failed")
524
+ failedJobs++;
525
+ // Count by priority
526
+ const priority = String(job.priority ?? 5);
527
+ priorityDistribution[priority] = (priorityDistribution[priority] || 0) + 1;
528
+ // Calculate processing time for completed jobs
529
+ if (status === "completed") {
530
+ const processingTime = (job.updatedAt || job.createdAt) - job.createdAt;
531
+ totalProcessingTime += processingTime;
532
+ completedCount++;
533
+ }
534
+ }
535
+ // Calculate average processing time in milliseconds
536
+ const avgProcessingTime = completedCount > 0 ? totalProcessingTime / completedCount : 0;
537
+ // Count DLQ jobs
538
+ const dlqJobsResult = await this.db.findMany(exports.JOBS_DLQ_COLLECTION);
539
+ const dlqJobs = dlqJobsResult.length;
540
+ return {
541
+ totalJobs: jobs.length,
542
+ pendingJobs,
543
+ activeJobs,
544
+ completedJobs,
545
+ failedJobs,
546
+ dlqJobs,
547
+ avgProcessingTime,
548
+ priorityDistribution
549
+ };
550
+ }
551
+ /**
552
+ * Get queue depth by priority level
553
+ */
554
+ async getQueueDepthByPriority() {
555
+ const jobs = await this.db.findMany(exports.JOBS_COLLECTION);
556
+ // Filter pending jobs
557
+ const pendingJobs = jobs.filter((job) => job.status === 'pending');
558
+ const depthByPriority = {};
559
+ for (const job of pendingJobs) {
560
+ const priority = job.priority ?? 5;
561
+ depthByPriority[priority] = (depthByPriority[priority] || 0) + 1;
562
+ }
563
+ // Convert to array and sort by priority
564
+ return Object.entries(depthByPriority)
565
+ .map(([priority, count]) => ({
566
+ priority: parseInt(priority),
567
+ count,
568
+ label: this.getPriorityLabel(parseInt(priority))
569
+ }))
570
+ .sort((a, b) => b.priority - a.priority);
571
+ }
572
+ /**
573
+ * Update job priority
574
+ */
575
+ async updateJobPriority(jobId, priority) {
576
+ // Validate priority range (1-20)
577
+ if (priority < 1 || priority > 20) {
578
+ throw new Error('Priority must be between 1 and 20');
579
+ }
580
+ const job = await this.db.get(exports.JOBS_COLLECTION, jobId);
581
+ if (!job) {
582
+ throw new Error(`Job not found: ${jobId}`);
583
+ }
584
+ await this.db.update(exports.JOBS_COLLECTION, jobId, {
585
+ priority,
586
+ updatedAt: Date.now()
587
+ });
588
+ logger_js_1.logger.log({
589
+ timestamp: Date.now(),
590
+ level: "info",
591
+ kind: "system",
592
+ message: `[JobQueue] Job priority updated: ${jobId} -> ${priority}`,
593
+ });
594
+ this.emitRevalidation();
595
+ }
596
+ getPriorityLabel(priority) {
597
+ if (priority >= 20)
598
+ return 'urgent';
599
+ if (priority >= 10)
600
+ return 'high';
601
+ if (priority >= 5)
602
+ return 'normal';
603
+ return 'low';
604
+ }
605
+ /**
606
+ * Find jobs that are stuck in "active" status (worker terminated)
607
+ * Returns jobs that have been active longer than the specified timeout
608
+ */
609
+ async findStuckJobs(timeoutMs = 300000) {
610
+ const now = Date.now();
611
+ const staleThreshold = now - timeoutMs;
612
+ const jobs = await this.db.findMany(exports.JOBS_COLLECTION);
613
+ const stuckJobs = jobs
614
+ .filter((job) => {
615
+ return job.status === "active" && job.updatedAt < staleThreshold;
616
+ })
617
+ .map((job) => this.mapDoc(job));
618
+ return stuckJobs;
619
+ }
620
+ /**
621
+ * Reset a stuck job from "active" to "pending" status
622
+ * Use this when a worker has terminated and left jobs in active state
623
+ */
624
+ async resetStuckJob(jobId) {
625
+ const job = await this.db.get(exports.JOBS_COLLECTION, jobId);
626
+ if (!job) {
627
+ throw new Error(`Job not found: ${jobId}`);
628
+ }
629
+ if (job.status !== "active") {
630
+ throw new Error(`Job ${jobId} is not in active status`);
631
+ }
632
+ await this.db.update(exports.JOBS_COLLECTION, jobId, {
633
+ status: "pending",
634
+ updatedAt: Date.now(),
635
+ lastError: "Job reset after worker termination",
636
+ });
637
+ logger_js_1.logger.log({
638
+ timestamp: Date.now(),
639
+ level: "info",
640
+ kind: "system",
641
+ message: `[JobQueue] Reset stuck job: ${jobId} from active to pending`,
642
+ });
643
+ this.emitRevalidation();
644
+ }
645
+ /**
646
+ * Bulk reset multiple stuck jobs
647
+ */
648
+ async resetStuckJobs(jobIds) {
649
+ let reset = 0;
650
+ let failed = 0;
651
+ for (const jobId of jobIds) {
652
+ try {
653
+ await this.resetStuckJob(jobId);
654
+ reset++;
655
+ }
656
+ catch (error) {
657
+ logger_js_1.logger.log({
658
+ timestamp: Date.now(),
659
+ level: "error",
660
+ kind: "system",
661
+ message: `[JobQueue] Failed to reset stuck job ${jobId}: ${error}`,
662
+ });
663
+ failed++;
664
+ }
665
+ }
666
+ return { reset, failed };
667
+ }
190
668
  }
191
669
  exports.JobQueue = JobQueue;
192
670
  //# sourceMappingURL=queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/jobs/queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/jobs/queue.ts"],"names":[],"mappings":"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"}