bunqueue 1.0.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.
Files changed (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +640 -0
  3. package/dist/application/dlqManager.d.ts +19 -0
  4. package/dist/application/dlqManager.d.ts.map +1 -0
  5. package/dist/application/dlqManager.js +44 -0
  6. package/dist/application/dlqManager.js.map +1 -0
  7. package/dist/application/eventsManager.d.ts +28 -0
  8. package/dist/application/eventsManager.d.ts.map +1 -0
  9. package/dist/application/eventsManager.js +59 -0
  10. package/dist/application/eventsManager.js.map +1 -0
  11. package/dist/application/jobLogsManager.d.ts +20 -0
  12. package/dist/application/jobLogsManager.d.ts.map +1 -0
  13. package/dist/application/jobLogsManager.js +28 -0
  14. package/dist/application/jobLogsManager.js.map +1 -0
  15. package/dist/application/metricsExporter.d.ts +24 -0
  16. package/dist/application/metricsExporter.d.ts.map +1 -0
  17. package/dist/application/metricsExporter.js +80 -0
  18. package/dist/application/metricsExporter.js.map +1 -0
  19. package/dist/application/operations/ack.d.ts +48 -0
  20. package/dist/application/operations/ack.d.ts.map +1 -0
  21. package/dist/application/operations/ack.js +109 -0
  22. package/dist/application/operations/ack.js.map +1 -0
  23. package/dist/application/operations/index.d.ts +10 -0
  24. package/dist/application/operations/index.d.ts.map +1 -0
  25. package/dist/application/operations/index.js +10 -0
  26. package/dist/application/operations/index.js.map +1 -0
  27. package/dist/application/operations/jobManagement.d.ts +32 -0
  28. package/dist/application/operations/jobManagement.d.ts.map +1 -0
  29. package/dist/application/operations/jobManagement.js +122 -0
  30. package/dist/application/operations/jobManagement.js.map +1 -0
  31. package/dist/application/operations/pull.d.ts +36 -0
  32. package/dist/application/operations/pull.d.ts.map +1 -0
  33. package/dist/application/operations/pull.js +109 -0
  34. package/dist/application/operations/pull.js.map +1 -0
  35. package/dist/application/operations/push.d.ts +36 -0
  36. package/dist/application/operations/push.d.ts.map +1 -0
  37. package/dist/application/operations/push.js +94 -0
  38. package/dist/application/operations/push.js.map +1 -0
  39. package/dist/application/operations/queryOperations.d.ts +33 -0
  40. package/dist/application/operations/queryOperations.d.ts.map +1 -0
  41. package/dist/application/operations/queryOperations.js +57 -0
  42. package/dist/application/operations/queryOperations.js.map +1 -0
  43. package/dist/application/operations/queueControl.d.ts +32 -0
  44. package/dist/application/operations/queueControl.d.ts.map +1 -0
  45. package/dist/application/operations/queueControl.js +72 -0
  46. package/dist/application/operations/queueControl.js.map +1 -0
  47. package/dist/application/queueManager.d.ts +113 -0
  48. package/dist/application/queueManager.d.ts.map +1 -0
  49. package/dist/application/queueManager.js +406 -0
  50. package/dist/application/queueManager.js.map +1 -0
  51. package/dist/application/webhookManager.d.ts +35 -0
  52. package/dist/application/webhookManager.d.ts.map +1 -0
  53. package/dist/application/webhookManager.js +109 -0
  54. package/dist/application/webhookManager.js.map +1 -0
  55. package/dist/application/workerManager.d.ts +48 -0
  56. package/dist/application/workerManager.d.ts.map +1 -0
  57. package/dist/application/workerManager.js +121 -0
  58. package/dist/application/workerManager.js.map +1 -0
  59. package/dist/domain/queue/index.d.ts +6 -0
  60. package/dist/domain/queue/index.d.ts.map +1 -0
  61. package/dist/domain/queue/index.js +6 -0
  62. package/dist/domain/queue/index.js.map +1 -0
  63. package/dist/domain/queue/priorityQueue.d.ts +45 -0
  64. package/dist/domain/queue/priorityQueue.d.ts.map +1 -0
  65. package/dist/domain/queue/priorityQueue.js +203 -0
  66. package/dist/domain/queue/priorityQueue.js.map +1 -0
  67. package/dist/domain/queue/shard.d.ts +98 -0
  68. package/dist/domain/queue/shard.d.ts.map +1 -0
  69. package/dist/domain/queue/shard.js +245 -0
  70. package/dist/domain/queue/shard.js.map +1 -0
  71. package/dist/domain/types/command.d.ts +270 -0
  72. package/dist/domain/types/command.d.ts.map +1 -0
  73. package/dist/domain/types/command.js +6 -0
  74. package/dist/domain/types/command.js.map +1 -0
  75. package/dist/domain/types/cron.d.ts +32 -0
  76. package/dist/domain/types/cron.d.ts.map +1 -0
  77. package/dist/domain/types/cron.js +31 -0
  78. package/dist/domain/types/cron.js.map +1 -0
  79. package/dist/domain/types/index.d.ts +9 -0
  80. package/dist/domain/types/index.d.ts.map +1 -0
  81. package/dist/domain/types/index.js +9 -0
  82. package/dist/domain/types/index.js.map +1 -0
  83. package/dist/domain/types/job.d.ts +94 -0
  84. package/dist/domain/types/job.d.ts.map +1 -0
  85. package/dist/domain/types/job.js +81 -0
  86. package/dist/domain/types/job.js.map +1 -0
  87. package/dist/domain/types/queue.d.ts +86 -0
  88. package/dist/domain/types/queue.d.ts.map +1 -0
  89. package/dist/domain/types/queue.js +84 -0
  90. package/dist/domain/types/queue.js.map +1 -0
  91. package/dist/domain/types/response.d.ts +158 -0
  92. package/dist/domain/types/response.d.ts.map +1 -0
  93. package/dist/domain/types/response.js +86 -0
  94. package/dist/domain/types/response.js.map +1 -0
  95. package/dist/domain/types/webhook.d.ts +33 -0
  96. package/dist/domain/types/webhook.d.ts.map +1 -0
  97. package/dist/domain/types/webhook.js +20 -0
  98. package/dist/domain/types/webhook.js.map +1 -0
  99. package/dist/domain/types/worker.d.ts +27 -0
  100. package/dist/domain/types/worker.d.ts.map +1 -0
  101. package/dist/domain/types/worker.js +27 -0
  102. package/dist/domain/types/worker.js.map +1 -0
  103. package/dist/infrastructure/persistence/index.d.ts +6 -0
  104. package/dist/infrastructure/persistence/index.d.ts.map +1 -0
  105. package/dist/infrastructure/persistence/index.js +6 -0
  106. package/dist/infrastructure/persistence/index.js.map +1 -0
  107. package/dist/infrastructure/persistence/schema.d.ts +14 -0
  108. package/dist/infrastructure/persistence/schema.d.ts.map +1 -0
  109. package/dist/infrastructure/persistence/schema.js +123 -0
  110. package/dist/infrastructure/persistence/schema.js.map +1 -0
  111. package/dist/infrastructure/persistence/sqlite.d.ts +42 -0
  112. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -0
  113. package/dist/infrastructure/persistence/sqlite.js +164 -0
  114. package/dist/infrastructure/persistence/sqlite.js.map +1 -0
  115. package/dist/infrastructure/persistence/statements.d.ts +55 -0
  116. package/dist/infrastructure/persistence/statements.d.ts.map +1 -0
  117. package/dist/infrastructure/persistence/statements.js +42 -0
  118. package/dist/infrastructure/persistence/statements.js.map +1 -0
  119. package/dist/infrastructure/scheduler/cronParser.d.ts +44 -0
  120. package/dist/infrastructure/scheduler/cronParser.d.ts.map +1 -0
  121. package/dist/infrastructure/scheduler/cronParser.js +90 -0
  122. package/dist/infrastructure/scheduler/cronParser.js.map +1 -0
  123. package/dist/infrastructure/scheduler/cronScheduler.d.ts +68 -0
  124. package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -0
  125. package/dist/infrastructure/scheduler/cronScheduler.js +172 -0
  126. package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -0
  127. package/dist/infrastructure/scheduler/index.d.ts +6 -0
  128. package/dist/infrastructure/scheduler/index.d.ts.map +1 -0
  129. package/dist/infrastructure/scheduler/index.js +6 -0
  130. package/dist/infrastructure/scheduler/index.js.map +1 -0
  131. package/dist/infrastructure/server/handler.d.ts +13 -0
  132. package/dist/infrastructure/server/handler.d.ts.map +1 -0
  133. package/dist/infrastructure/server/handler.js +167 -0
  134. package/dist/infrastructure/server/handler.js.map +1 -0
  135. package/dist/infrastructure/server/handlers/advanced.d.ts +68 -0
  136. package/dist/infrastructure/server/handlers/advanced.d.ts.map +1 -0
  137. package/dist/infrastructure/server/handlers/advanced.js +99 -0
  138. package/dist/infrastructure/server/handlers/advanced.js.map +1 -0
  139. package/dist/infrastructure/server/handlers/core.d.ts +36 -0
  140. package/dist/infrastructure/server/handlers/core.d.ts.map +1 -0
  141. package/dist/infrastructure/server/handlers/core.js +82 -0
  142. package/dist/infrastructure/server/handlers/core.js.map +1 -0
  143. package/dist/infrastructure/server/handlers/cron.d.ts +20 -0
  144. package/dist/infrastructure/server/handlers/cron.d.ts.map +1 -0
  145. package/dist/infrastructure/server/handlers/cron.js +56 -0
  146. package/dist/infrastructure/server/handlers/cron.js.map +1 -0
  147. package/dist/infrastructure/server/handlers/dlq.d.ts +20 -0
  148. package/dist/infrastructure/server/handlers/dlq.d.ts.map +1 -0
  149. package/dist/infrastructure/server/handlers/dlq.js +31 -0
  150. package/dist/infrastructure/server/handlers/dlq.js.map +1 -0
  151. package/dist/infrastructure/server/handlers/index.d.ts +7 -0
  152. package/dist/infrastructure/server/handlers/index.d.ts.map +1 -0
  153. package/dist/infrastructure/server/handlers/index.js +7 -0
  154. package/dist/infrastructure/server/handlers/index.js.map +1 -0
  155. package/dist/infrastructure/server/handlers/management.d.ts +36 -0
  156. package/dist/infrastructure/server/handlers/management.d.ts.map +1 -0
  157. package/dist/infrastructure/server/handlers/management.js +75 -0
  158. package/dist/infrastructure/server/handlers/management.js.map +1 -0
  159. package/dist/infrastructure/server/handlers/monitoring.d.ts +18 -0
  160. package/dist/infrastructure/server/handlers/monitoring.d.ts.map +1 -0
  161. package/dist/infrastructure/server/handlers/monitoring.js +102 -0
  162. package/dist/infrastructure/server/handlers/monitoring.js.map +1 -0
  163. package/dist/infrastructure/server/handlers/query.d.ts +32 -0
  164. package/dist/infrastructure/server/handlers/query.d.ts.map +1 -0
  165. package/dist/infrastructure/server/handlers/query.js +61 -0
  166. package/dist/infrastructure/server/handlers/query.js.map +1 -0
  167. package/dist/infrastructure/server/http.d.ts +43 -0
  168. package/dist/infrastructure/server/http.d.ts.map +1 -0
  169. package/dist/infrastructure/server/http.js +344 -0
  170. package/dist/infrastructure/server/http.js.map +1 -0
  171. package/dist/infrastructure/server/index.d.ts +8 -0
  172. package/dist/infrastructure/server/index.d.ts.map +1 -0
  173. package/dist/infrastructure/server/index.js +8 -0
  174. package/dist/infrastructure/server/index.js.map +1 -0
  175. package/dist/infrastructure/server/protocol.d.ts +44 -0
  176. package/dist/infrastructure/server/protocol.d.ts.map +1 -0
  177. package/dist/infrastructure/server/protocol.js +129 -0
  178. package/dist/infrastructure/server/protocol.js.map +1 -0
  179. package/dist/infrastructure/server/rateLimiter.d.ts +31 -0
  180. package/dist/infrastructure/server/rateLimiter.d.ts.map +1 -0
  181. package/dist/infrastructure/server/rateLimiter.js +79 -0
  182. package/dist/infrastructure/server/rateLimiter.js.map +1 -0
  183. package/dist/infrastructure/server/tcp.d.ts +36 -0
  184. package/dist/infrastructure/server/tcp.d.ts.map +1 -0
  185. package/dist/infrastructure/server/tcp.js +101 -0
  186. package/dist/infrastructure/server/tcp.js.map +1 -0
  187. package/dist/infrastructure/server/types.d.ts +11 -0
  188. package/dist/infrastructure/server/types.d.ts.map +1 -0
  189. package/dist/infrastructure/server/types.js +5 -0
  190. package/dist/infrastructure/server/types.js.map +1 -0
  191. package/dist/main.d.ts +6 -0
  192. package/dist/main.d.ts.map +1 -0
  193. package/dist/main.js +111 -0
  194. package/dist/main.js.map +1 -0
  195. package/dist/shared/hash.d.ts +30 -0
  196. package/dist/shared/hash.d.ts.map +1 -0
  197. package/dist/shared/hash.js +69 -0
  198. package/dist/shared/hash.js.map +1 -0
  199. package/dist/shared/index.d.ts +6 -0
  200. package/dist/shared/index.d.ts.map +1 -0
  201. package/dist/shared/index.js +6 -0
  202. package/dist/shared/index.js.map +1 -0
  203. package/dist/shared/lock.d.ts +70 -0
  204. package/dist/shared/lock.d.ts.map +1 -0
  205. package/dist/shared/lock.js +207 -0
  206. package/dist/shared/lock.js.map +1 -0
  207. package/dist/shared/logger.d.ts +38 -0
  208. package/dist/shared/logger.d.ts.map +1 -0
  209. package/dist/shared/logger.js +74 -0
  210. package/dist/shared/logger.js.map +1 -0
  211. package/dist/shared/serialization.d.ts +23 -0
  212. package/dist/shared/serialization.d.ts.map +1 -0
  213. package/dist/shared/serialization.js +63 -0
  214. package/dist/shared/serialization.js.map +1 -0
  215. package/package.json +82 -0
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Cron job domain types
3
+ */
4
+ /** Cron job definition */
5
+ export interface CronJob {
6
+ readonly name: string;
7
+ readonly queue: string;
8
+ readonly data: unknown;
9
+ readonly schedule: string | null;
10
+ readonly repeatEvery: number | null;
11
+ readonly priority: number;
12
+ nextRun: number;
13
+ executions: number;
14
+ readonly maxLimit: number | null;
15
+ }
16
+ /** Input for creating a cron job */
17
+ export interface CronJobInput {
18
+ name: string;
19
+ queue: string;
20
+ data: unknown;
21
+ schedule?: string;
22
+ repeatEvery?: number;
23
+ priority?: number;
24
+ maxLimit?: number;
25
+ }
26
+ /** Create a new cron job */
27
+ export declare function createCronJob(input: CronJobInput, nextRun: number): CronJob;
28
+ /** Check if cron job has reached its execution limit */
29
+ export declare function isAtLimit(cron: CronJob): boolean;
30
+ /** Check if cron job is due to run */
31
+ export declare function isDue(cron: CronJob, now?: number): boolean;
32
+ //# sourceMappingURL=cron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../../src/domain/types/cron.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0BAA0B;AAC1B,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,oCAAoC;AACpC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,4BAA4B;AAC5B,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAgB3E;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAGhD;AAED,sCAAsC;AACtC,wBAAgB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAEtE"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Cron job domain types
3
+ */
4
+ /** Create a new cron job */
5
+ export function createCronJob(input, nextRun) {
6
+ if (!input.schedule && !input.repeatEvery) {
7
+ throw new Error('Cron job must have either schedule or repeatEvery');
8
+ }
9
+ return {
10
+ name: input.name,
11
+ queue: input.queue,
12
+ data: input.data,
13
+ schedule: input.schedule ?? null,
14
+ repeatEvery: input.repeatEvery ?? null,
15
+ priority: input.priority ?? 0,
16
+ nextRun,
17
+ executions: 0,
18
+ maxLimit: input.maxLimit ?? null,
19
+ };
20
+ }
21
+ /** Check if cron job has reached its execution limit */
22
+ export function isAtLimit(cron) {
23
+ if (cron.maxLimit === null)
24
+ return false;
25
+ return cron.executions >= cron.maxLimit;
26
+ }
27
+ /** Check if cron job is due to run */
28
+ export function isDue(cron, now = Date.now()) {
29
+ return cron.nextRun <= now && !isAtLimit(cron);
30
+ }
31
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../../src/domain/types/cron.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0BH,4BAA4B;AAC5B,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,OAAe;IAChE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;QAChC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;QACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC;QAC7B,OAAO;QACP,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;KACjC,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC;AAC1C,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,KAAK,CAAC,IAAa,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IAC3D,OAAO,IAAI,CAAC,OAAO,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Domain types barrel export
3
+ */
4
+ export * from './job';
5
+ export * from './command';
6
+ export * from './response';
7
+ export * from './queue';
8
+ export * from './cron';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Domain types barrel export
3
+ */
4
+ export * from './job';
5
+ export * from './command';
6
+ export * from './response';
7
+ export * from './queue';
8
+ export * from './cron';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Job domain types
3
+ * Core job structure and related types
4
+ */
5
+ /** Branded type for Job IDs */
6
+ export type JobId = bigint & {
7
+ readonly __brand: 'JobId';
8
+ };
9
+ /** Create a JobId from bigint */
10
+ export declare function jobId(id: bigint): JobId;
11
+ /** Job state enumeration */
12
+ export declare const enum JobState {
13
+ Waiting = "waiting",
14
+ Delayed = "delayed",
15
+ Active = "active",
16
+ Completed = "completed",
17
+ Failed = "failed"
18
+ }
19
+ /** Core job structure */
20
+ export interface Job {
21
+ readonly id: JobId;
22
+ readonly queue: string;
23
+ readonly data: unknown;
24
+ readonly priority: number;
25
+ readonly createdAt: number;
26
+ readonly lifo: boolean;
27
+ runAt: number;
28
+ startedAt: number | null;
29
+ completedAt: number | null;
30
+ attempts: number;
31
+ readonly maxAttempts: number;
32
+ readonly backoff: number;
33
+ readonly ttl: number | null;
34
+ readonly timeout: number | null;
35
+ readonly uniqueKey: string | null;
36
+ readonly customId: string | null;
37
+ readonly dependsOn: JobId[];
38
+ readonly parentId: JobId | null;
39
+ childrenIds: JobId[];
40
+ childrenCompleted: number;
41
+ readonly tags: string[];
42
+ readonly groupId: string | null;
43
+ progress: number;
44
+ progressMessage: string | null;
45
+ readonly removeOnComplete: boolean;
46
+ readonly removeOnFail: boolean;
47
+ lastHeartbeat: number;
48
+ readonly stallTimeout: number | null;
49
+ stallCount: number;
50
+ }
51
+ /** Input for creating a new job */
52
+ export interface JobInput {
53
+ data: unknown;
54
+ priority?: number;
55
+ delay?: number;
56
+ maxAttempts?: number;
57
+ backoff?: number;
58
+ ttl?: number;
59
+ timeout?: number;
60
+ uniqueKey?: string;
61
+ customId?: string;
62
+ dependsOn?: JobId[];
63
+ parentId?: JobId;
64
+ tags?: string[];
65
+ groupId?: string;
66
+ lifo?: boolean;
67
+ removeOnComplete?: boolean;
68
+ removeOnFail?: boolean;
69
+ stallTimeout?: number;
70
+ }
71
+ /** Job creation defaults */
72
+ export declare const JOB_DEFAULTS: {
73
+ readonly priority: 0;
74
+ readonly maxAttempts: 3;
75
+ readonly backoff: 1000;
76
+ readonly lifo: false;
77
+ readonly removeOnComplete: false;
78
+ readonly removeOnFail: false;
79
+ };
80
+ /** Create a new job from input */
81
+ export declare function createJob(id: JobId, queue: string, input: JobInput, now?: number): Job;
82
+ /** Check if job is delayed */
83
+ export declare function isDelayed(job: Job, now?: number): boolean;
84
+ /** Check if job is ready to process */
85
+ export declare function isReady(job: Job, now?: number): boolean;
86
+ /** Check if job is expired (TTL exceeded) */
87
+ export declare function isExpired(job: Job, now?: number): boolean;
88
+ /** Check if job has timed out during processing */
89
+ export declare function isTimedOut(job: Job, now?: number): boolean;
90
+ /** Calculate next retry delay with exponential backoff */
91
+ export declare function calculateBackoff(job: Job): number;
92
+ /** Check if job can retry */
93
+ export declare function canRetry(job: Job): boolean;
94
+ //# sourceMappingURL=job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/domain/types/job.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Job domain types
3
+ * Core job structure and related types
4
+ */
5
+ /** Create a JobId from bigint */
6
+ export function jobId(id) {
7
+ return id;
8
+ }
9
+ /** Job creation defaults */
10
+ export const JOB_DEFAULTS = {
11
+ priority: 0,
12
+ maxAttempts: 3,
13
+ backoff: 1000,
14
+ lifo: false,
15
+ removeOnComplete: false,
16
+ removeOnFail: false,
17
+ };
18
+ /** Create a new job from input */
19
+ export function createJob(id, queue, input, now = Date.now()) {
20
+ const delay = input.delay ?? 0;
21
+ return {
22
+ id,
23
+ queue,
24
+ data: input.data,
25
+ priority: input.priority ?? JOB_DEFAULTS.priority,
26
+ createdAt: now,
27
+ lifo: input.lifo ?? JOB_DEFAULTS.lifo,
28
+ runAt: now + delay,
29
+ startedAt: null,
30
+ completedAt: null,
31
+ attempts: 0,
32
+ maxAttempts: input.maxAttempts ?? JOB_DEFAULTS.maxAttempts,
33
+ backoff: input.backoff ?? JOB_DEFAULTS.backoff,
34
+ ttl: input.ttl ?? null,
35
+ timeout: input.timeout ?? null,
36
+ uniqueKey: input.uniqueKey ?? null,
37
+ customId: input.customId ?? null,
38
+ dependsOn: input.dependsOn ?? [],
39
+ parentId: input.parentId ?? null,
40
+ childrenIds: [],
41
+ childrenCompleted: 0,
42
+ tags: input.tags ?? [],
43
+ groupId: input.groupId ?? null,
44
+ progress: 0,
45
+ progressMessage: null,
46
+ removeOnComplete: input.removeOnComplete ?? JOB_DEFAULTS.removeOnComplete,
47
+ removeOnFail: input.removeOnFail ?? JOB_DEFAULTS.removeOnFail,
48
+ lastHeartbeat: now,
49
+ stallTimeout: input.stallTimeout ?? null,
50
+ stallCount: 0,
51
+ };
52
+ }
53
+ /** Check if job is delayed */
54
+ export function isDelayed(job, now = Date.now()) {
55
+ return job.runAt > now;
56
+ }
57
+ /** Check if job is ready to process */
58
+ export function isReady(job, now = Date.now()) {
59
+ return job.runAt <= now;
60
+ }
61
+ /** Check if job is expired (TTL exceeded) */
62
+ export function isExpired(job, now = Date.now()) {
63
+ if (job.ttl === null)
64
+ return false;
65
+ return now > job.createdAt + job.ttl;
66
+ }
67
+ /** Check if job has timed out during processing */
68
+ export function isTimedOut(job, now = Date.now()) {
69
+ if (job.timeout === null || job.startedAt === null)
70
+ return false;
71
+ return now > job.startedAt + job.timeout;
72
+ }
73
+ /** Calculate next retry delay with exponential backoff */
74
+ export function calculateBackoff(job) {
75
+ return job.backoff * Math.pow(2, job.attempts);
76
+ }
77
+ /** Check if job can retry */
78
+ export function canRetry(job) {
79
+ return job.attempts < job.maxAttempts;
80
+ }
81
+ //# sourceMappingURL=job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/domain/types/job.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Queue domain types
3
+ * Queue state and configuration
4
+ */
5
+ /** Queue state configuration */
6
+ export interface QueueState {
7
+ readonly name: string;
8
+ paused: boolean;
9
+ rateLimit: number | null;
10
+ concurrencyLimit: number | null;
11
+ activeCount: number;
12
+ }
13
+ /** Create default queue state */
14
+ export declare function createQueueState(name: string): QueueState;
15
+ /** Rate limiter using token bucket algorithm */
16
+ export declare class RateLimiter {
17
+ private readonly capacity;
18
+ private readonly refillRate;
19
+ private tokens;
20
+ private lastRefill;
21
+ constructor(capacity: number, refillRate?: number);
22
+ /** Try to acquire a token */
23
+ tryAcquire(): boolean;
24
+ /** Refill tokens based on elapsed time */
25
+ private refill;
26
+ /** Get current token count */
27
+ getTokens(): number;
28
+ }
29
+ /** Concurrency limiter */
30
+ export declare class ConcurrencyLimiter {
31
+ private limit;
32
+ private active;
33
+ constructor(limit: number);
34
+ /** Try to acquire a slot */
35
+ tryAcquire(): boolean;
36
+ /** Release a slot */
37
+ release(): void;
38
+ /** Get active count */
39
+ getActive(): number;
40
+ /** Get limit */
41
+ getLimit(): number;
42
+ /** Update limit */
43
+ setLimit(limit: number): void;
44
+ }
45
+ /** Job location for indexing */
46
+ export type JobLocation = {
47
+ type: 'queue';
48
+ shardIdx: number;
49
+ queueName: string;
50
+ } | {
51
+ type: 'processing';
52
+ shardIdx: number;
53
+ } | {
54
+ type: 'completed';
55
+ } | {
56
+ type: 'dlq';
57
+ queueName: string;
58
+ };
59
+ /** Event types for subscribers */
60
+ export declare const enum EventType {
61
+ Pushed = "pushed",
62
+ Pulled = "pulled",
63
+ Completed = "completed",
64
+ Failed = "failed",
65
+ Progress = "progress",
66
+ Stalled = "stalled"
67
+ }
68
+ /** Job event for subscribers */
69
+ export interface JobEvent {
70
+ readonly eventType: EventType;
71
+ readonly queue: string;
72
+ readonly jobId: bigint;
73
+ readonly timestamp: number;
74
+ readonly data?: unknown;
75
+ readonly error?: string;
76
+ readonly progress?: number;
77
+ }
78
+ /** Webhook configuration */
79
+ export interface Webhook {
80
+ readonly id: string;
81
+ readonly url: string;
82
+ readonly events: EventType[];
83
+ readonly queue: string | null;
84
+ readonly secret: string | null;
85
+ }
86
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/domain/types/queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gCAAgC;AAChC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQzD;AAED,gDAAgD;AAChD,qBAAa,WAAW;IAKpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;gBAGR,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAiB;IAMhD,6BAA6B;IAC7B,UAAU,IAAI,OAAO;IASrB,0CAA0C;IAC1C,OAAO,CAAC,MAAM;IAQd,8BAA8B;IAC9B,SAAS,IAAI,MAAM;CAIpB;AAED,0BAA0B;AAC1B,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,KAAK;IAFzB,OAAO,CAAC,MAAM,CAAa;gBAEP,KAAK,EAAE,MAAM;IAEjC,4BAA4B;IAC5B,UAAU,IAAI,OAAO;IAQrB,qBAAqB;IACrB,OAAO,IAAI,IAAI;IAMf,uBAAuB;IACvB,SAAS,IAAI,MAAM;IAInB,gBAAgB;IAChB,QAAQ,IAAI,MAAM;IAIlB,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAG9B;AAED,gCAAgC;AAChC,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,kCAAkC;AAClC,0BAAkB,SAAS;IACzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,4BAA4B;AAC5B,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Queue domain types
3
+ * Queue state and configuration
4
+ */
5
+ /** Create default queue state */
6
+ export function createQueueState(name) {
7
+ return {
8
+ name,
9
+ paused: false,
10
+ rateLimit: null,
11
+ concurrencyLimit: null,
12
+ activeCount: 0,
13
+ };
14
+ }
15
+ /** Rate limiter using token bucket algorithm */
16
+ export class RateLimiter {
17
+ capacity;
18
+ refillRate;
19
+ tokens;
20
+ lastRefill;
21
+ constructor(capacity, refillRate = capacity) {
22
+ this.capacity = capacity;
23
+ this.refillRate = refillRate;
24
+ this.tokens = capacity;
25
+ this.lastRefill = Date.now();
26
+ }
27
+ /** Try to acquire a token */
28
+ tryAcquire() {
29
+ this.refill();
30
+ if (this.tokens >= 1) {
31
+ this.tokens -= 1;
32
+ return true;
33
+ }
34
+ return false;
35
+ }
36
+ /** Refill tokens based on elapsed time */
37
+ refill() {
38
+ const now = Date.now();
39
+ const elapsed = (now - this.lastRefill) / 1000; // seconds
40
+ const tokensToAdd = elapsed * this.refillRate;
41
+ this.tokens = Math.min(this.capacity, this.tokens + tokensToAdd);
42
+ this.lastRefill = now;
43
+ }
44
+ /** Get current token count */
45
+ getTokens() {
46
+ this.refill();
47
+ return this.tokens;
48
+ }
49
+ }
50
+ /** Concurrency limiter */
51
+ export class ConcurrencyLimiter {
52
+ limit;
53
+ active = 0;
54
+ constructor(limit) {
55
+ this.limit = limit;
56
+ }
57
+ /** Try to acquire a slot */
58
+ tryAcquire() {
59
+ if (this.active < this.limit) {
60
+ this.active += 1;
61
+ return true;
62
+ }
63
+ return false;
64
+ }
65
+ /** Release a slot */
66
+ release() {
67
+ if (this.active > 0) {
68
+ this.active -= 1;
69
+ }
70
+ }
71
+ /** Get active count */
72
+ getActive() {
73
+ return this.active;
74
+ }
75
+ /** Get limit */
76
+ getLimit() {
77
+ return this.limit;
78
+ }
79
+ /** Update limit */
80
+ setLimit(limit) {
81
+ this.limit = limit;
82
+ }
83
+ }
84
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/domain/types/queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,iCAAiC;AACjC,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,IAAI;QACtB,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC;AAED,gDAAgD;AAChD,MAAM,OAAO,WAAW;IAKH;IACA;IALX,MAAM,CAAS;IACf,UAAU,CAAS;IAE3B,YACmB,QAAgB,EAChB,aAAqB,QAAQ;QAD7B,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAmB;QAE9C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,6BAA6B;IAC7B,UAAU;QACR,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0CAA0C;IAClC,MAAM;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU;QAC1D,MAAM,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACxB,CAAC;IAED,8BAA8B;IAC9B,SAAS;QACP,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,0BAA0B;AAC1B,MAAM,OAAO,kBAAkB;IAGT;IAFZ,MAAM,GAAW,CAAC,CAAC;IAE3B,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAErC,4BAA4B;IAC5B,UAAU;QACR,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qBAAqB;IACrB,OAAO;QACL,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,gBAAgB;IAChB,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,mBAAmB;IACnB,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Protocol responses
3
+ * All response types for TCP/HTTP protocol
4
+ */
5
+ import type { Job, JobState } from './job';
6
+ /** Base response interface */
7
+ interface BaseResponse {
8
+ readonly ok: boolean;
9
+ readonly reqId?: string;
10
+ }
11
+ /** Success response with job ID */
12
+ export interface OkResponse extends BaseResponse {
13
+ readonly ok: true;
14
+ readonly id?: string;
15
+ }
16
+ /** Batch success response */
17
+ export interface BatchResponse extends BaseResponse {
18
+ readonly ok: true;
19
+ readonly ids: string[];
20
+ }
21
+ /** Single job response */
22
+ export interface JobResponse extends BaseResponse {
23
+ readonly ok: true;
24
+ readonly job: Job;
25
+ }
26
+ /** Nullable job response (for pull with timeout) */
27
+ export interface NullableJobResponse extends BaseResponse {
28
+ readonly ok: true;
29
+ readonly job: Job | null;
30
+ }
31
+ /** Multiple jobs response */
32
+ export interface JobsResponse extends BaseResponse {
33
+ readonly ok: true;
34
+ readonly jobs: Job[];
35
+ }
36
+ /** Job state response */
37
+ export interface StateResponse extends BaseResponse {
38
+ readonly ok: true;
39
+ readonly id: string;
40
+ readonly state: JobState;
41
+ }
42
+ /** Job result response */
43
+ export interface ResultResponse extends BaseResponse {
44
+ readonly ok: true;
45
+ readonly id: string;
46
+ readonly result: unknown;
47
+ }
48
+ /** Job counts by state */
49
+ export interface JobCounts {
50
+ readonly waiting: number;
51
+ readonly delayed: number;
52
+ readonly active: number;
53
+ readonly completed: number;
54
+ readonly failed: number;
55
+ }
56
+ /** Job counts response */
57
+ export interface JobCountsResponse extends BaseResponse {
58
+ readonly ok: true;
59
+ readonly counts: JobCounts;
60
+ }
61
+ /** Queue info */
62
+ export interface QueueInfo {
63
+ readonly name: string;
64
+ readonly waiting: number;
65
+ readonly delayed: number;
66
+ readonly active: number;
67
+ readonly paused: boolean;
68
+ }
69
+ /** Queue list response */
70
+ export interface QueuesResponse extends BaseResponse {
71
+ readonly ok: true;
72
+ readonly queues: QueueInfo[];
73
+ }
74
+ /** Progress response */
75
+ export interface ProgressResponse extends BaseResponse {
76
+ readonly ok: true;
77
+ readonly progress: number;
78
+ readonly message: string | null;
79
+ }
80
+ /** Boolean response */
81
+ export interface BoolResponse extends BaseResponse {
82
+ readonly ok: true;
83
+ readonly value: boolean;
84
+ }
85
+ /** Count response */
86
+ export interface CountResponse extends BaseResponse {
87
+ readonly ok: true;
88
+ readonly count: number;
89
+ }
90
+ /** Stats response */
91
+ export interface StatsData {
92
+ readonly queued: number;
93
+ readonly processing: number;
94
+ readonly delayed: number;
95
+ readonly dlq: number;
96
+ readonly completed: number;
97
+ readonly uptime: number;
98
+ readonly pushPerSec: number;
99
+ readonly pullPerSec: number;
100
+ }
101
+ export interface StatsResponse extends BaseResponse {
102
+ readonly ok: true;
103
+ readonly stats: StatsData;
104
+ }
105
+ /** Metrics response */
106
+ export interface MetricsData {
107
+ readonly totalPushed: number;
108
+ readonly totalPulled: number;
109
+ readonly totalCompleted: number;
110
+ readonly totalFailed: number;
111
+ readonly avgLatencyMs: number;
112
+ readonly avgProcessingMs: number;
113
+ readonly memoryUsageMb: number;
114
+ readonly sqliteSizeMb: number;
115
+ readonly activeConnections: number;
116
+ }
117
+ export interface MetricsResponse extends BaseResponse {
118
+ readonly ok: true;
119
+ readonly metrics: MetricsData;
120
+ }
121
+ /** Cron job info */
122
+ export interface CronInfo {
123
+ readonly name: string;
124
+ readonly queue: string;
125
+ readonly schedule: string | null;
126
+ readonly repeatEvery: number | null;
127
+ readonly nextRun: number;
128
+ readonly executions: number;
129
+ }
130
+ /** Cron list response */
131
+ export interface CronListResponse extends BaseResponse {
132
+ readonly ok: true;
133
+ readonly crons: CronInfo[];
134
+ }
135
+ /** Error response */
136
+ export interface ErrorResponse extends BaseResponse {
137
+ readonly ok: false;
138
+ readonly error: string;
139
+ }
140
+ /** Union of all responses */
141
+ export type Response = OkResponse | BatchResponse | JobResponse | NullableJobResponse | JobsResponse | StateResponse | ResultResponse | JobCountsResponse | QueuesResponse | ProgressResponse | BoolResponse | CountResponse | StatsResponse | MetricsResponse | CronListResponse | ErrorResponse | DataResponse<unknown>;
142
+ export declare function ok(id?: bigint, reqId?: string): OkResponse;
143
+ export declare function batch(ids: bigint[], reqId?: string): BatchResponse;
144
+ export declare function job(j: Job, reqId?: string): JobResponse;
145
+ export declare function nullableJob(j: Job | null, reqId?: string): NullableJobResponse;
146
+ export declare function jobs(list: Job[], reqId?: string): JobsResponse;
147
+ export declare function error(message: string, reqId?: string): ErrorResponse;
148
+ /** Generic success response with data payload */
149
+ export interface DataResponse<T> extends BaseResponse {
150
+ readonly ok: true;
151
+ readonly data: T;
152
+ }
153
+ export declare function data<T>(payload: T, reqId?: string): DataResponse<T>;
154
+ export declare function counts(c: JobCounts, reqId?: string): JobCountsResponse;
155
+ export declare function stats(s: StatsData, reqId?: string): StatsResponse;
156
+ export declare function metrics(m: MetricsData, reqId?: string): MetricsResponse;
157
+ export {};
158
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/domain/types/response.ts"],"names":[],"mappings":"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"}