@shivaedev/jobs 0.0.0-stage → 0.19.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 (219) hide show
  1. package/CHANGELOG.md +319 -0
  2. package/LICENSE +21 -0
  3. package/README.md +528 -2
  4. package/dist/server/client.d.ts +25 -0
  5. package/dist/server/client.d.ts.map +1 -0
  6. package/dist/server/client.js +3 -0
  7. package/dist/server/client.js.map +1 -0
  8. package/dist/server/definition.d.ts +96 -0
  9. package/dist/server/definition.d.ts.map +1 -0
  10. package/dist/server/definition.js +40 -0
  11. package/dist/server/definition.js.map +1 -0
  12. package/dist/server/error.d.ts +51 -0
  13. package/dist/server/error.d.ts.map +1 -0
  14. package/dist/server/error.js +37 -0
  15. package/dist/server/error.js.map +1 -0
  16. package/dist/server/health.d.ts +51 -0
  17. package/dist/server/health.d.ts.map +1 -0
  18. package/dist/server/health.js +4 -0
  19. package/dist/server/health.js.map +1 -0
  20. package/dist/server/internal/batchHandler.d.ts +5 -0
  21. package/dist/server/internal/batchHandler.d.ts.map +1 -0
  22. package/dist/server/internal/batchHandler.js +51 -0
  23. package/dist/server/internal/batchHandler.js.map +1 -0
  24. package/dist/server/internal/clientCache.d.ts +8 -0
  25. package/dist/server/internal/clientCache.d.ts.map +1 -0
  26. package/dist/server/internal/clientCache.js +61 -0
  27. package/dist/server/internal/clientCache.js.map +1 -0
  28. package/dist/server/internal/clientErrors.d.ts +8 -0
  29. package/dist/server/internal/clientErrors.d.ts.map +1 -0
  30. package/dist/server/internal/clientErrors.js +49 -0
  31. package/dist/server/internal/clientErrors.js.map +1 -0
  32. package/dist/server/internal/countsFor.d.ts +5 -0
  33. package/dist/server/internal/countsFor.d.ts.map +1 -0
  34. package/dist/server/internal/countsFor.js +28 -0
  35. package/dist/server/internal/countsFor.js.map +1 -0
  36. package/dist/server/internal/deadlineOf.d.ts +3 -0
  37. package/dist/server/internal/deadlineOf.d.ts.map +1 -0
  38. package/dist/server/internal/deadlineOf.js +7 -0
  39. package/dist/server/internal/deadlineOf.js.map +1 -0
  40. package/dist/server/internal/deferrableAttempt.d.ts +7 -0
  41. package/dist/server/internal/deferrableAttempt.d.ts.map +1 -0
  42. package/dist/server/internal/deferrableAttempt.js +28 -0
  43. package/dist/server/internal/deferrableAttempt.js.map +1 -0
  44. package/dist/server/internal/deferral.d.ts +15 -0
  45. package/dist/server/internal/deferral.d.ts.map +1 -0
  46. package/dist/server/internal/deferral.js +14 -0
  47. package/dist/server/internal/deferral.js.map +1 -0
  48. package/dist/server/internal/deferralStorePlan.d.ts +2 -0
  49. package/dist/server/internal/deferralStorePlan.d.ts.map +1 -0
  50. package/dist/server/internal/deferralStorePlan.js +35 -0
  51. package/dist/server/internal/deferralStorePlan.js.map +1 -0
  52. package/dist/server/internal/definitionOptions.d.ts +17 -0
  53. package/dist/server/internal/definitionOptions.d.ts.map +1 -0
  54. package/dist/server/internal/definitionOptions.js +12 -0
  55. package/dist/server/internal/definitionOptions.js.map +1 -0
  56. package/dist/server/internal/enqueueFor.d.ts +4 -0
  57. package/dist/server/internal/enqueueFor.d.ts.map +1 -0
  58. package/dist/server/internal/enqueueFor.js +23 -0
  59. package/dist/server/internal/enqueueFor.js.map +1 -0
  60. package/dist/server/internal/ensureQueue.d.ts +4 -0
  61. package/dist/server/internal/ensureQueue.d.ts.map +1 -0
  62. package/dist/server/internal/ensureQueue.js +44 -0
  63. package/dist/server/internal/ensureQueue.js.map +1 -0
  64. package/dist/server/internal/expireAttempt.d.ts +3 -0
  65. package/dist/server/internal/expireAttempt.d.ts.map +1 -0
  66. package/dist/server/internal/expireAttempt.js +17 -0
  67. package/dist/server/internal/expireAttempt.js.map +1 -0
  68. package/dist/server/internal/healthFor.d.ts +5 -0
  69. package/dist/server/internal/healthFor.d.ts.map +1 -0
  70. package/dist/server/internal/healthFor.js +27 -0
  71. package/dist/server/internal/healthFor.js.map +1 -0
  72. package/dist/server/internal/jobControl.d.ts +5 -0
  73. package/dist/server/internal/jobControl.d.ts.map +1 -0
  74. package/dist/server/internal/jobControl.js +35 -0
  75. package/dist/server/internal/jobControl.js.map +1 -0
  76. package/dist/server/internal/lifecycle.d.ts +17 -0
  77. package/dist/server/internal/lifecycle.d.ts.map +1 -0
  78. package/dist/server/internal/lifecycle.js +55 -0
  79. package/dist/server/internal/lifecycle.js.map +1 -0
  80. package/dist/server/internal/listJobs.d.ts +5 -0
  81. package/dist/server/internal/listJobs.d.ts.map +1 -0
  82. package/dist/server/internal/listJobs.js +69 -0
  83. package/dist/server/internal/listJobs.js.map +1 -0
  84. package/dist/server/internal/makeService.d.ts +4 -0
  85. package/dist/server/internal/makeService.d.ts.map +1 -0
  86. package/dist/server/internal/makeService.js +17 -0
  87. package/dist/server/internal/makeService.js.map +1 -0
  88. package/dist/server/internal/nativeClient.d.ts +3 -0
  89. package/dist/server/internal/nativeClient.d.ts.map +1 -0
  90. package/dist/server/internal/nativeClient.js +28 -0
  91. package/dist/server/internal/nativeClient.js.map +1 -0
  92. package/dist/server/internal/observeTestingSettlements.d.ts +6 -0
  93. package/dist/server/internal/observeTestingSettlements.d.ts.map +1 -0
  94. package/dist/server/internal/observeTestingSettlements.js +35 -0
  95. package/dist/server/internal/observeTestingSettlements.js.map +1 -0
  96. package/dist/server/internal/register.d.ts +8 -0
  97. package/dist/server/internal/register.d.ts.map +1 -0
  98. package/dist/server/internal/register.js +98 -0
  99. package/dist/server/internal/register.js.map +1 -0
  100. package/dist/server/internal/registerReleasedJobs.d.ts +5 -0
  101. package/dist/server/internal/registerReleasedJobs.d.ts.map +1 -0
  102. package/dist/server/internal/registerReleasedJobs.js +35 -0
  103. package/dist/server/internal/registerReleasedJobs.js.map +1 -0
  104. package/dist/server/internal/registerWorker.d.ts +5 -0
  105. package/dist/server/internal/registerWorker.d.ts.map +1 -0
  106. package/dist/server/internal/registerWorker.js +33 -0
  107. package/dist/server/internal/registerWorker.js.map +1 -0
  108. package/dist/server/internal/runSchemaPlan.d.ts +7 -0
  109. package/dist/server/internal/runSchemaPlan.d.ts.map +1 -0
  110. package/dist/server/internal/runSchemaPlan.js +25 -0
  111. package/dist/server/internal/runSchemaPlan.js.map +1 -0
  112. package/dist/server/internal/scheduleDefinition.d.ts +3 -0
  113. package/dist/server/internal/scheduleDefinition.d.ts.map +1 -0
  114. package/dist/server/internal/scheduleDefinition.js +19 -0
  115. package/dist/server/internal/scheduleDefinition.js.map +1 -0
  116. package/dist/server/internal/schemaIndexBuilds.d.ts +4 -0
  117. package/dist/server/internal/schemaIndexBuilds.d.ts.map +1 -0
  118. package/dist/server/internal/schemaIndexBuilds.js +34 -0
  119. package/dist/server/internal/schemaIndexBuilds.js.map +1 -0
  120. package/dist/server/internal/settleDeferral.d.ts +7 -0
  121. package/dist/server/internal/settleDeferral.d.ts.map +1 -0
  122. package/dist/server/internal/settleDeferral.js +48 -0
  123. package/dist/server/internal/settleDeferral.js.map +1 -0
  124. package/dist/server/internal/storedRows.d.ts +6 -0
  125. package/dist/server/internal/storedRows.d.ts.map +1 -0
  126. package/dist/server/internal/storedRows.js +10 -0
  127. package/dist/server/internal/storedRows.js.map +1 -0
  128. package/dist/server/internal/testingClient.d.ts +13 -0
  129. package/dist/server/internal/testingClient.d.ts.map +1 -0
  130. package/dist/server/internal/testingClient.js +117 -0
  131. package/dist/server/internal/testingClient.js.map +1 -0
  132. package/dist/server/internal/testingDeferrals.d.ts +11 -0
  133. package/dist/server/internal/testingDeferrals.d.ts.map +1 -0
  134. package/dist/server/internal/testingDeferrals.js +29 -0
  135. package/dist/server/internal/testingDeferrals.js.map +1 -0
  136. package/dist/server/internal/testingExpirations.d.ts +6 -0
  137. package/dist/server/internal/testingExpirations.d.ts.map +1 -0
  138. package/dist/server/internal/testingExpirations.js +27 -0
  139. package/dist/server/internal/testingExpirations.js.map +1 -0
  140. package/dist/server/internal/testingIdle.d.ts +16 -0
  141. package/dist/server/internal/testingIdle.d.ts.map +1 -0
  142. package/dist/server/internal/testingIdle.js +31 -0
  143. package/dist/server/internal/testingIdle.js.map +1 -0
  144. package/dist/server/internal/testingReadout.d.ts +44 -0
  145. package/dist/server/internal/testingReadout.d.ts.map +1 -0
  146. package/dist/server/internal/testingReadout.js +13 -0
  147. package/dist/server/internal/testingReadout.js.map +1 -0
  148. package/dist/server/internal/testingSignal.d.ts +7 -0
  149. package/dist/server/internal/testingSignal.d.ts.map +1 -0
  150. package/dist/server/internal/testingSignal.js +29 -0
  151. package/dist/server/internal/testingSignal.js.map +1 -0
  152. package/dist/server/internal/testingSnapshot.d.ts +6 -0
  153. package/dist/server/internal/testingSnapshot.d.ts.map +1 -0
  154. package/dist/server/internal/testingSnapshot.js +32 -0
  155. package/dist/server/internal/testingSnapshot.js.map +1 -0
  156. package/dist/server/internal/tracing.d.ts +6 -0
  157. package/dist/server/internal/tracing.d.ts.map +1 -0
  158. package/dist/server/internal/tracing.js +37 -0
  159. package/dist/server/internal/tracing.js.map +1 -0
  160. package/dist/server/internal/waitForBatchExpiry.d.ts +6 -0
  161. package/dist/server/internal/waitForBatchExpiry.d.ts.map +1 -0
  162. package/dist/server/internal/waitForBatchExpiry.js +28 -0
  163. package/dist/server/internal/waitForBatchExpiry.js.map +1 -0
  164. package/dist/server/schema.d.ts +10 -0
  165. package/dist/server/schema.d.ts.map +1 -0
  166. package/dist/server/schema.js +67 -0
  167. package/dist/server/schema.js.map +1 -0
  168. package/dist/server/service.d.ts +29 -0
  169. package/dist/server/service.d.ts.map +1 -0
  170. package/dist/server/service.js +33 -0
  171. package/dist/server/service.js.map +1 -0
  172. package/dist/server/testing.d.ts +77 -0
  173. package/dist/server/testing.d.ts.map +1 -0
  174. package/dist/server/testing.js +90 -0
  175. package/dist/server/testing.js.map +1 -0
  176. package/package.json +74 -3
  177. package/src/server/client.ts +40 -0
  178. package/src/server/definition.ts +140 -0
  179. package/src/server/error.ts +73 -0
  180. package/src/server/health.ts +60 -0
  181. package/src/server/internal/batchHandler.ts +71 -0
  182. package/src/server/internal/clientCache.ts +73 -0
  183. package/src/server/internal/clientErrors.ts +64 -0
  184. package/src/server/internal/countsFor.ts +34 -0
  185. package/src/server/internal/deadlineOf.ts +8 -0
  186. package/src/server/internal/deferrableAttempt.ts +41 -0
  187. package/src/server/internal/deferral.ts +19 -0
  188. package/src/server/internal/deferralStorePlan.ts +35 -0
  189. package/src/server/internal/definitionOptions.ts +14 -0
  190. package/src/server/internal/enqueueFor.ts +39 -0
  191. package/src/server/internal/ensureQueue.ts +47 -0
  192. package/src/server/internal/expireAttempt.ts +21 -0
  193. package/src/server/internal/healthFor.ts +35 -0
  194. package/src/server/internal/jobControl.ts +44 -0
  195. package/src/server/internal/lifecycle.ts +68 -0
  196. package/src/server/internal/listJobs.ts +98 -0
  197. package/src/server/internal/makeService.ts +19 -0
  198. package/src/server/internal/nativeClient.ts +30 -0
  199. package/src/server/internal/observeTestingSettlements.ts +36 -0
  200. package/src/server/internal/register.ts +145 -0
  201. package/src/server/internal/registerReleasedJobs.ts +44 -0
  202. package/src/server/internal/registerWorker.ts +56 -0
  203. package/src/server/internal/runSchemaPlan.ts +32 -0
  204. package/src/server/internal/scheduleDefinition.ts +21 -0
  205. package/src/server/internal/schemaIndexBuilds.ts +44 -0
  206. package/src/server/internal/settleDeferral.ts +54 -0
  207. package/src/server/internal/storedRows.ts +17 -0
  208. package/src/server/internal/testingClient.ts +134 -0
  209. package/src/server/internal/testingDeferrals.ts +44 -0
  210. package/src/server/internal/testingExpirations.ts +31 -0
  211. package/src/server/internal/testingIdle.ts +52 -0
  212. package/src/server/internal/testingReadout.ts +19 -0
  213. package/src/server/internal/testingSignal.ts +30 -0
  214. package/src/server/internal/testingSnapshot.ts +53 -0
  215. package/src/server/internal/tracing.ts +44 -0
  216. package/src/server/internal/waitForBatchExpiry.ts +30 -0
  217. package/src/server/schema.ts +84 -0
  218. package/src/server/service.ts +100 -0
  219. package/src/server/testing.ts +118 -0
@@ -0,0 +1,96 @@
1
+ import { Duration, Effect, Schema } from "effect";
2
+ import type { Job, policies, Queue, ScheduleOptions, WorkOptions } from "pg-boss";
3
+ declare const RetryAt_base: Schema.Class<RetryAt, Schema.TaggedStruct<"RetryAt", {
4
+ readonly at: Schema.DateTimeUtc;
5
+ readonly reason: Schema.String;
6
+ }>, import("effect/Cause").YieldableError>;
7
+ export declare class RetryAt extends RetryAt_base {
8
+ }
9
+ export type QueuePolicy = (typeof policies)[keyof typeof policies];
10
+ export type QueueOptions = Omit<Queue, "name" | "deadLetter" | "policy"> & {
11
+ readonly maxDeferrals?: number;
12
+ readonly policy?: QueuePolicy;
13
+ };
14
+ export interface JobPayloadSchema extends Schema.Top {
15
+ readonly Encoded: object;
16
+ readonly Type: object;
17
+ }
18
+ export interface JobContext {
19
+ readonly expireInSeconds: number;
20
+ readonly heartbeatSeconds: number | null;
21
+ readonly id: string;
22
+ readonly name: string;
23
+ readonly remainingBudget: Effect.Effect<Duration.Duration>;
24
+ readonly signal: AbortSignal;
25
+ }
26
+ export interface QueueDefinition<TName extends string = string, TPayload extends JobPayloadSchema = JobPayloadSchema> {
27
+ readonly _tag: "QueueDefinition";
28
+ readonly handle: <E, R>(handler: (payload: Schema.Schema.Type<TPayload>, job: JobContext) => Effect.Effect<unknown, E, R>) => QueueWorker<TPayload, R>;
29
+ readonly key?: ((payload: Schema.Schema.Type<TPayload>) => string) | undefined;
30
+ readonly maxDeferrals: number;
31
+ readonly name: TName;
32
+ readonly queueOptions: Omit<Queue, "name" | "deadLetter">;
33
+ readonly schema: TPayload;
34
+ readonly workerOptions: WorkOptions;
35
+ }
36
+ export interface QueueWorker<TPayload extends JobPayloadSchema = JobPayloadSchema, TRequirements = unknown> {
37
+ readonly _tag: "QueueWorker";
38
+ readonly handler: (payload: Schema.Schema.Type<TPayload>, job: JobContext) => Effect.Effect<unknown, unknown, TRequirements>;
39
+ readonly queue: QueueDefinition<string, TPayload>;
40
+ }
41
+ export interface JobRegistration {
42
+ readonly _tag: "QueueDefinition" | "QueueWorker" | "ScheduledWorker";
43
+ }
44
+ export interface ScheduleDefinition<TName extends string = string> {
45
+ readonly _tag: "ScheduleDefinition";
46
+ readonly cron: string;
47
+ readonly maxDeferrals: number;
48
+ readonly name: TName;
49
+ readonly queueOptions: Omit<Queue, "name" | "deadLetter">;
50
+ readonly run: <E, R>(effect: Effect.Effect<unknown, E, R>) => ScheduledWorker<R>;
51
+ readonly scheduleOptions: ScheduleOptions;
52
+ readonly workerOptions: WorkOptions;
53
+ }
54
+ export interface ScheduledWorker<TRequirements = unknown> {
55
+ readonly _tag: "ScheduledWorker";
56
+ readonly effect: Effect.Effect<unknown, unknown, TRequirements>;
57
+ readonly schedule: ScheduleDefinition;
58
+ }
59
+ export type RegistrationRequirements<TRegistrations extends readonly JobRegistration[]> = TRegistrations[number] extends infer TRegistration ? TRegistration extends QueueWorker<infer TPayload, infer TRequirements> ? TRequirements | TPayload["DecodingServices"] : TRegistration extends ScheduledWorker<infer TRequirements> ? TRequirements : never : never;
60
+ export type DefineQueueOptions<TName extends string, TPayload extends JobPayloadSchema> = {
61
+ readonly name: TName;
62
+ readonly schema: TPayload;
63
+ readonly worker?: WorkOptions;
64
+ } & ({
65
+ readonly key: (payload: Schema.Schema.Type<TPayload>) => string;
66
+ readonly queue: QueueOptions & {
67
+ readonly policy: "singleton";
68
+ };
69
+ } | {
70
+ readonly key?: never;
71
+ readonly queue?: QueueOptions & {
72
+ readonly policy?: Exclude<QueuePolicy, "singleton">;
73
+ };
74
+ });
75
+ export declare function defineQueue<const TName extends string, const TPayload extends JobPayloadSchema>(options: DefineQueueOptions<TName, TPayload> & {
76
+ readonly key: (payload: Schema.Schema.Type<TPayload>) => string;
77
+ }): QueueDefinition<TName, TPayload> & {
78
+ readonly key: (payload: Schema.Schema.Type<TPayload>) => string;
79
+ };
80
+ export declare function defineQueue<const TName extends string, const TPayload extends JobPayloadSchema>(options: DefineQueueOptions<TName, TPayload> & {
81
+ readonly key?: never;
82
+ }): QueueDefinition<TName, TPayload> & {
83
+ readonly key?: never;
84
+ };
85
+ export declare function defineQueue<const TName extends string, const TPayload extends JobPayloadSchema>(options: DefineQueueOptions<TName, TPayload>): QueueDefinition<TName, TPayload>;
86
+ export interface DefineScheduleOptions<TName extends string> {
87
+ readonly cron: string;
88
+ readonly name: TName;
89
+ readonly queue?: QueueOptions;
90
+ readonly schedule?: ScheduleOptions;
91
+ readonly worker?: WorkOptions;
92
+ }
93
+ export declare function defineSchedule<const TName extends string>(options: DefineScheduleOptions<TName>): ScheduleDefinition<TName>;
94
+ export declare function jobContext(job: Job<unknown>): JobContext;
95
+ export {};
96
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/server/definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { Clock, Duration, Effect, Schema } from "effect";
2
+ import { deadlineOf } from "#internal/deadlineOf.ts";
3
+ import { maxDeferrals, nativeQueueOptions } from "#internal/definitionOptions.ts";
4
+ import { scheduleDefinition } from "#internal/scheduleDefinition.ts";
5
+ export class RetryAt extends Schema.TaggedError()("RetryAt", {
6
+ at: Schema.DateTimeUtc,
7
+ reason: Schema.String,
8
+ }) {
9
+ }
10
+ export function defineQueue(options) {
11
+ const definition = {
12
+ _tag: "QueueDefinition",
13
+ ...(options.key === undefined ? {} : { key: options.key }),
14
+ handle: (handler) => Object.freeze({
15
+ _tag: "QueueWorker",
16
+ handler,
17
+ queue: definition,
18
+ }),
19
+ maxDeferrals: maxDeferrals(options.queue),
20
+ name: options.name,
21
+ queueOptions: nativeQueueOptions(options.queue),
22
+ schema: options.schema,
23
+ workerOptions: Object.freeze({ batchSize: 10, burstWhenBatchFull: true, ...options.worker }),
24
+ };
25
+ return Object.freeze(definition);
26
+ }
27
+ export function defineSchedule(options) {
28
+ return scheduleDefinition(options);
29
+ }
30
+ export function jobContext(job) {
31
+ return {
32
+ expireInSeconds: job.expireInSeconds,
33
+ heartbeatSeconds: job.heartbeatSeconds,
34
+ id: job.id,
35
+ name: job.name,
36
+ remainingBudget: Effect.map(Clock.currentTimeMillis, (now) => Duration.millis(Math.max(0, deadlineOf(job) - now))),
37
+ signal: job.signal,
38
+ };
39
+ }
40
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/server/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,MAAM,OAAO,OAAQ,SAAQ,MAAM,CAAC,WAAW,EAAW,CAAC,SAAS,EAAE;IACrE,EAAE,EAAE,MAAM,CAAC,WAAW;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC;CAAG;AAwFL,MAAM,UAAU,WAAW,CAC1B,OAA4C;IAE5C,MAAM,UAAU,GAAqC;QACpD,IAAI,EAAE,iBAAiB;QACvB,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,MAAM,CAAC,MAAM,CAAC;YACb,IAAI,EAAE,aAAsB;YAC5B,OAAO;YACP,KAAK,EAAE,UAAU;SACjB,CAAC;QACH,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;QACzC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;KAC5F,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAUD,MAAM,UAAU,cAAc,CAA6B,OAAqC;IAC/F,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAiB;IAC3C,OAAO;QACN,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAClH,MAAM,EAAE,GAAG,CAAC,MAAM;KAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { Redacted } from "effect";
2
+ export type PgBossOperation = "counts" | "deadLetteredJobs" | "enqueue" | "failedJobs" | "getJob" | "health" | "install" | "register" | "retry" | "settle" | "start" | "stop";
3
+ declare const PgBossError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
4
+ readonly _tag: "PgBossError";
5
+ } & Readonly<A>;
6
+ export declare class PgBossError extends PgBossError_base<{
7
+ readonly operation: PgBossOperation;
8
+ readonly queue?: string | undefined;
9
+ readonly original: Redacted.Redacted<unknown>;
10
+ }> {
11
+ get message(): string;
12
+ }
13
+ declare const PgBossQueueOptionsError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
14
+ readonly _tag: "PgBossQueueOptionsError";
15
+ } & Readonly<A>;
16
+ export declare class PgBossQueueOptionsError extends PgBossQueueOptionsError_base<{
17
+ readonly queue: string;
18
+ readonly options: readonly ("partition" | "policy")[];
19
+ }> {
20
+ get message(): string;
21
+ }
22
+ declare const PgBossClientOptionsError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
23
+ readonly _tag: "PgBossClientOptionsError";
24
+ } & Readonly<A>;
25
+ export declare class PgBossClientOptionsError extends PgBossClientOptionsError_base<{
26
+ readonly key: string | symbol;
27
+ readonly options: readonly string[];
28
+ }> {
29
+ get message(): string;
30
+ }
31
+ declare const PgBossPayloadError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
32
+ readonly _tag: "PgBossPayloadError";
33
+ } & Readonly<A>;
34
+ export declare class PgBossPayloadError extends PgBossPayloadError_base<{
35
+ readonly direction: "decode" | "encode";
36
+ readonly queue: string;
37
+ readonly original: Redacted.Redacted<unknown>;
38
+ }> {
39
+ }
40
+ declare const PgBossTestingError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
41
+ readonly _tag: "PgBossTestingError";
42
+ } & Readonly<A>;
43
+ export declare class PgBossTestingError extends PgBossTestingError_base<{
44
+ readonly operation: string;
45
+ readonly original: Redacted.Redacted<unknown>;
46
+ readonly queue?: string | undefined;
47
+ }> {
48
+ }
49
+ export declare function toPgBossError(operation: PgBossOperation, error: unknown, queue?: string): PgBossError;
50
+ export {};
51
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/server/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,eAAe,GACxB,QAAQ,GACR,kBAAkB,GAClB,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,UAAU,GACV,OAAO,GACP,QAAQ,GACR,OAAO,GACP,MAAM,CAAC;;;;AAEV,qBAAa,WAAY,SAAQ,iBAAgC;IAChE,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;IAED,IAAa,OAAO,IAAI,MAAM,CAG7B;CACD;;;;AAUD,qBAAa,uBAAwB,SAAQ,6BAA4C;IACxF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC;CACtD,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAE7B;CACD;;;;AAED,qBAAa,wBAAyB,SAAQ,8BAA6C;IAC1F,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAE7B;CACD;;;;AAED,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC9E,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;CAAG;;;;AAEL,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC;CAAG;AAEL,wBAAgB,aAAa,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAMrG"}
@@ -0,0 +1,37 @@
1
+ import { Data, Redacted } from "effect";
2
+ export class PgBossError extends Data.TaggedError("PgBossError") {
3
+ // The original's message can quote payloads or connection strings, so only its class and code are shown.
4
+ get message() {
5
+ const target = this.queue === undefined ? "" : ` for queue ${this.queue}`;
6
+ return `pg-boss ${this.operation}${target} failed: ${originalKind(Redacted.value(this.original))}`;
7
+ }
8
+ }
9
+ function originalKind(original) {
10
+ if (!(original instanceof Error)) {
11
+ return typeof original;
12
+ }
13
+ const code = Reflect.get(original, "code");
14
+ return typeof code === "string" ? `${original.constructor.name} ${code}` : original.constructor.name;
15
+ }
16
+ export class PgBossQueueOptionsError extends Data.TaggedError("PgBossQueueOptionsError") {
17
+ get message() {
18
+ return `Queue ${this.queue} cannot change options after creation: ${this.options.join(", ")}`;
19
+ }
20
+ }
21
+ export class PgBossClientOptionsError extends Data.TaggedError("PgBossClientOptionsError") {
22
+ get message() {
23
+ return `Shared pg-boss client ${String(this.key)} has different constructor settings: ${this.options.join(", ")}`;
24
+ }
25
+ }
26
+ export class PgBossPayloadError extends Data.TaggedError("PgBossPayloadError") {
27
+ }
28
+ export class PgBossTestingError extends Data.TaggedError("PgBossTestingError") {
29
+ }
30
+ export function toPgBossError(operation, error, queue) {
31
+ return new PgBossError({
32
+ operation,
33
+ original: Redacted.make(error),
34
+ queue,
35
+ });
36
+ }
37
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/server/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAgBxC,MAAM,OAAO,WAAY,SAAQ,IAAI,CAAC,WAAW,CAAC,aAAa,CAI7D;IACD,yGAAyG;IACzG,IAAa,OAAO;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1E,OAAO,WAAW,IAAI,CAAC,SAAS,GAAG,MAAM,YAAY,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IACpG,CAAC;CACD;AAED,SAAS,YAAY,CAAC,QAAiB;IACtC,IAAI,CAAC,CAAC,QAAQ,YAAY,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,OAAO,QAAQ,CAAC;IACxB,CAAC;IACD,MAAM,IAAI,GAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;AACtG,CAAC;AAED,MAAM,OAAO,uBAAwB,SAAQ,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAGrF;IACD,IAAa,OAAO;QACnB,OAAO,SAAS,IAAI,CAAC,KAAK,0CAA0C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/F,CAAC;CACD;AAED,MAAM,OAAO,wBAAyB,SAAQ,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAGvF;IACD,IAAa,OAAO;QACnB,OAAO,yBAAyB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,wCAAwC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACnH,CAAC;CACD;AAED,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAI3E;CAAG;AAEL,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAI3E;CAAG;AAEL,MAAM,UAAU,aAAa,CAAC,SAA0B,EAAE,KAAc,EAAE,KAAc;IACvF,OAAO,IAAI,WAAW,CAAC;QACtB,SAAS;QACT,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,KAAK;KACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ import type { DateTime, Option } from "effect";
2
+ import type { JobWithMetadata } from "pg-boss";
3
+ export interface QueueCounts {
4
+ readonly activeCount: number;
5
+ readonly failedCount: number;
6
+ readonly queuedCount: number;
7
+ readonly totalCount: number;
8
+ }
9
+ export interface QueueHealth {
10
+ readonly activeCount: number;
11
+ readonly deadLetteredCount: number;
12
+ readonly failedCount: number;
13
+ readonly name: string;
14
+ readonly queuedCount: number;
15
+ readonly readyCount: number;
16
+ }
17
+ export interface JobsHealth {
18
+ readonly activeTotal: number;
19
+ readonly deadLetteredTotal: number;
20
+ readonly failedTotal: number;
21
+ readonly jobs: readonly QueueHealth[];
22
+ readonly queuedTotal: number;
23
+ readonly readyTotal: number;
24
+ }
25
+ export declare function deadLetterQueueName(queueName: string): string;
26
+ export interface ListedJob<TData> {
27
+ readonly attempt: number;
28
+ readonly completedOn: Option.Option<DateTime.Utc>;
29
+ readonly createdOn: DateTime.Utc;
30
+ readonly data: TData;
31
+ readonly id: string;
32
+ readonly output: unknown;
33
+ readonly queue: string;
34
+ readonly retryCount: number;
35
+ readonly retryLimit: number;
36
+ readonly startedOn: Option.Option<DateTime.Utc>;
37
+ readonly state: JobWithMetadata["state"];
38
+ }
39
+ export interface DeadLetteredJob<TData> extends ListedJob<TData> {
40
+ readonly sourceId: Option.Option<string>;
41
+ readonly sourceOutput: unknown;
42
+ }
43
+ export interface JobPageOptions {
44
+ readonly cursor?: string | undefined;
45
+ readonly limit: number;
46
+ }
47
+ export interface JobPage<TJob> {
48
+ readonly jobs: readonly TJob[];
49
+ readonly next: Option.Option<string>;
50
+ }
51
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/server/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,MAAM,WAAW,SAAS,CAAC,KAAK;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,eAAe,CAAC,KAAK,CAAE,SAAQ,SAAS,CAAC,KAAK,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO,CAAC,IAAI;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CACrC"}
@@ -0,0 +1,4 @@
1
+ export function deadLetterQueueName(queueName) {
2
+ return `${queueName}-dlq`;
3
+ }
4
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/server/health.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACpD,OAAO,GAAG,SAAS,MAAM,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Effect } from "effect";
2
+ import type { Job } from "pg-boss";
3
+ import type { PgBossClient } from "#client.ts";
4
+ export declare function batchHandler(client: PgBossClient, name: string, run: (job: Job<unknown>) => Effect.Effect<unknown, unknown>, afterFailure?: (job: Job<unknown>) => Promise<void>, execute?: typeof Effect.runPromise): (jobs: readonly Job<unknown>[]) => Promise<void>;
5
+ //# sourceMappingURL=batchHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchHandler.d.ts","sourceRoot":"","sources":["../../../src/server/internal/batchHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAQ,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4B/C,wBAAgB,YAAY,CAC3B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAC3D,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EACnD,OAAO,GAAE,OAAO,MAAM,CAAC,UAA8B,UAWjC,SAAS,GAAG,CAAC,OAAO,CAAC,EAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CAwB3D"}
@@ -0,0 +1,51 @@
1
+ import { Cause, Clock, Effect, Exit } from "effect";
2
+ import { deadlineOf } from "#internal/deadlineOf.ts";
3
+ import { deferredAttempt } from "#internal/deferral.ts";
4
+ import { waitForBatchExpiry } from "#internal/waitForBatchExpiry.ts";
5
+ function failureOutput(cause) {
6
+ const error = Cause.squash(cause);
7
+ return typeof error === "object" && error !== null ? error : { message: String(error) };
8
+ }
9
+ async function settleAttempt(complete, fail, name, job, exit, afterFailure) {
10
+ if (Exit.isSuccess(exit)) {
11
+ if (exit.value !== deferredAttempt) {
12
+ await complete(name, job);
13
+ }
14
+ }
15
+ else {
16
+ await fail(name, job, failureOutput(exit.cause));
17
+ await afterFailure?.(job);
18
+ }
19
+ }
20
+ export function batchHandler(client, name, run, afterFailure, execute = Effect.runPromise) {
21
+ const complete = client.complete?.bind(client);
22
+ const fail = client.fail?.bind(client);
23
+ if (complete === undefined || fail === undefined) {
24
+ throw new TypeError("This pg-boss client does not support complete and fail");
25
+ }
26
+ function waitForExpiry(jobs) {
27
+ return execute(waitForBatchExpiry(client, name, jobs).pipe(Effect.tapError(Effect.logError)));
28
+ }
29
+ return async (jobs) => {
30
+ let expired = false;
31
+ for (const job of jobs) {
32
+ const deadline = deadlineOf(job);
33
+ if ((await Effect.runPromise(Clock.currentTimeMillis)) >= deadline) {
34
+ expired = true;
35
+ continue;
36
+ }
37
+ const exit = await Effect.runPromiseExit(Effect.flatMap(Clock.currentTimeMillis, (now) => {
38
+ const remaining = deadline - now;
39
+ return remaining <= 0 ? Effect.interrupt : run(job).pipe(Effect.timeoutOrElse({ duration: remaining, orElse: () => Effect.interrupt }));
40
+ }), { signal: job.signal });
41
+ if (job.signal.aborted || (Exit.isFailure(exit) && Cause.hasInterrupts(exit.cause))) {
42
+ return waitForExpiry(jobs);
43
+ }
44
+ await settleAttempt(complete, fail, name, job, exit, afterFailure);
45
+ }
46
+ if (expired) {
47
+ return waitForExpiry(jobs);
48
+ }
49
+ };
50
+ }
51
+ //# sourceMappingURL=batchHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchHandler.js","sourceRoot":"","sources":["../../../src/server/internal/batchHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ConstructorOptions } from "pg-boss";
2
+ import type { PgBossClient } from "#client.ts";
3
+ export declare function acquireCachedClient(key: string | symbol, constructorOptions: ConstructorOptions, start: () => Promise<PgBossClient>): Promise<{
4
+ client: PgBossClient;
5
+ reused: boolean;
6
+ }>;
7
+ export declare function releaseCachedClient(key: string | symbol): Promise<PgBossClient> | undefined;
8
+ //# sourceMappingURL=clientCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientCache.d.ts","sourceRoot":"","sources":["../../../src/server/internal/clientCache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6B/C,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC;;;GA4BzI;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,CAW3F"}
@@ -0,0 +1,61 @@
1
+ import { isDeepStrictEqual } from "node:util";
2
+ import { PgBossClientOptionsError } from "#error.ts";
3
+ const cacheSymbol = Symbol.for("@shivaedev/jobs/server/client-cache");
4
+ const shared = Reflect.get(globalThis, cacheSymbol);
5
+ const clients = shared instanceof Map ? shared : new Map();
6
+ Reflect.set(globalThis, cacheSymbol, clients);
7
+ function entryFor(key) {
8
+ const value = clients.get(key);
9
+ return isCachedClient(value) ? value : undefined;
10
+ }
11
+ function isCachedClient(value) {
12
+ return (typeof value === "object"
13
+ && value !== null
14
+ && Reflect.get(value, "client") instanceof Promise
15
+ && typeof Reflect.get(value, "constructorOptions") === "object"
16
+ && typeof Reflect.get(value, "references") === "number");
17
+ }
18
+ export async function acquireCachedClient(key, constructorOptions, start) {
19
+ const existing = entryFor(key);
20
+ if (existing !== undefined) {
21
+ const options = [...new Set([...Object.keys(existing.constructorOptions), ...Object.keys(constructorOptions)])]
22
+ .filter((option) => !isDeepStrictEqual(Reflect.get(existing.constructorOptions, option), Reflect.get(constructorOptions, option)))
23
+ .sort((first, second) => first.localeCompare(second));
24
+ if (options.length > 0) {
25
+ throw new PgBossClientOptionsError({ key, options });
26
+ }
27
+ existing.references += 1;
28
+ try {
29
+ return { client: await existing.client, reused: true };
30
+ }
31
+ catch (error) {
32
+ existing.references -= 1;
33
+ throw error;
34
+ }
35
+ }
36
+ const settings = { ...constructorOptions };
37
+ const entry = { client: start(), constructorOptions: settings, references: 1 };
38
+ clients.set(key, entry);
39
+ try {
40
+ return { client: await entry.client, reused: false };
41
+ }
42
+ catch (error) {
43
+ if (clients.get(key) === entry) {
44
+ clients.delete(key);
45
+ }
46
+ throw error;
47
+ }
48
+ }
49
+ export function releaseCachedClient(key) {
50
+ const entry = entryFor(key);
51
+ if (entry === undefined) {
52
+ return;
53
+ }
54
+ entry.references -= 1;
55
+ if (entry.references > 0) {
56
+ return;
57
+ }
58
+ clients.delete(key);
59
+ return entry.client;
60
+ }
61
+ //# sourceMappingURL=clientCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientCache.js","sourceRoot":"","sources":["../../../src/server/internal/clientCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Effect } from "effect";
2
+ import type { PgBossClient } from "#client.ts";
3
+ type Listener = (error: Error) => void;
4
+ export declare function logClientError(error: Error): Effect.Effect<void>;
5
+ export declare function observeClientErrors(client: PgBossClient, fallback: Listener): void;
6
+ export declare function subscribeClientErrors(client: PgBossClient, listener: Listener): () => void;
7
+ export {};
8
+ //# sourceMappingURL=clientErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientErrors.d.ts","sourceRoot":"","sources":["../../../src/server/internal/clientErrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAYvC,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAGhE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAelF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAO1F"}
@@ -0,0 +1,49 @@
1
+ import { Effect } from "effect";
2
+ const key = Symbol.for("@shivaedev/jobs/server/error-observers");
3
+ const shared = Reflect.get(globalThis, key);
4
+ const observers = shared instanceof WeakMap ? shared : new WeakMap();
5
+ Reflect.set(globalThis, key, observers);
6
+ export function logClientError(error) {
7
+ const message = { event: "pg_boss_error", message: error.message };
8
+ return Reflect.get(error, "code") === "57P01" ? Effect.logDebug(message) : Effect.logError(message);
9
+ }
10
+ export function observeClientErrors(client, fallback) {
11
+ closeClientErrors(client);
12
+ const listeners = new Set();
13
+ const listener = (error) => {
14
+ if (listeners.size === 0) {
15
+ fallback(error);
16
+ }
17
+ else {
18
+ for (const report of listeners) {
19
+ report(error);
20
+ }
21
+ }
22
+ };
23
+ // Pool shutdown can resolve before its clients finish disconnecting.
24
+ client.on("error", listener);
25
+ observers.set(client, { dispose: () => client.off("error", listener), listeners });
26
+ }
27
+ export function subscribeClientErrors(client, listener) {
28
+ const observer = observerFor(client);
29
+ if (observer === undefined) {
30
+ throw new Error("pg-boss client has no error observer");
31
+ }
32
+ observer.listeners.add(listener);
33
+ return () => observer.listeners.delete(listener);
34
+ }
35
+ function closeClientErrors(client) {
36
+ observerFor(client)?.dispose();
37
+ observers.delete(client);
38
+ }
39
+ function observerFor(client) {
40
+ const value = observers.get(client);
41
+ return isObserver(value) ? value : undefined;
42
+ }
43
+ function isObserver(value) {
44
+ return (typeof value === "object"
45
+ && value !== null
46
+ && typeof Reflect.get(value, "dispose") === "function"
47
+ && Reflect.get(value, "listeners") instanceof Set);
48
+ }
49
+ //# sourceMappingURL=clientErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientErrors.js","sourceRoot":"","sources":["../../../src/server/internal/clientErrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUhC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACjE,MAAM,MAAM,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACrD,MAAM,SAAS,GAA8B,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,EAAoB,CAAC;AAClH,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAExC,MAAM,UAAU,cAAc,CAAC,KAAY;IAC1C,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACnE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB,EAAE,QAAkB;IAC3E,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IACtC,MAAM,QAAQ,GAAa,CAAC,KAAK,EAAE,EAAE;QACpC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACP,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;gBAChC,MAAM,CAAC,KAAK,CAAC,CAAC;YACf,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IACF,qEAAqE;IACrE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7B,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAoB,EAAE,QAAkB;IAC7E,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzD,CAAC;IACD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAoB;IAC9C,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IAC/B,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,MAAoB;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IACjC,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;WACtB,KAAK,KAAK,IAAI;WACd,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,UAAU;WACnD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,YAAY,GAAG,CACjD,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Effect } from "effect";
2
+ import type { PgBossClient } from "#client.ts";
3
+ import type { QueueCounts } from "#health.ts";
4
+ export declare function countsFor(client: PgBossClient, schema: string, name: string): Effect.Effect<QueueCounts, import("#error.ts").PgBossError>;
5
+ //# sourceMappingURL=countsFor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"countsFor.d.ts","sourceRoot":"","sources":["../../../src/server/internal/countsFor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAU9C,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,WAAW,EAAE,WAAW,CAAC,CAoBzI"}
@@ -0,0 +1,28 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { toPgBossError } from "#error.ts";
3
+ import { quotedSchema } from "#internal/storedRows.ts";
4
+ const Counts = Schema.Struct({
5
+ activeCount: Schema.Number,
6
+ failedCount: Schema.Number,
7
+ queuedCount: Schema.Number,
8
+ totalCount: Schema.Number,
9
+ });
10
+ export function countsFor(client, schema, name) {
11
+ return Effect.tryPromise({
12
+ catch: (error) => toPgBossError("counts", error, name),
13
+ try: async () => {
14
+ if (client.getDb === undefined) {
15
+ throw new TypeError("This pg-boss client does not support getDb");
16
+ }
17
+ const quoted = quotedSchema(schema);
18
+ const { rows } = await client.getDb().executeSql(`SELECT
19
+ count(*) FILTER (WHERE state = 'active')::int AS "activeCount",
20
+ count(*) FILTER (WHERE state = 'failed')::int AS "failedCount",
21
+ count(*) FILTER (WHERE state IN ('created', 'retry'))::int AS "queuedCount",
22
+ count(*)::int AS "totalCount"
23
+ FROM ${quoted}.job WHERE name = $1`, [name]);
24
+ return Schema.decodeUnknownPromise(Counts)(rows[0]);
25
+ },
26
+ });
27
+ }
28
+ //# sourceMappingURL=countsFor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"countsFor.js","sourceRoot":"","sources":["../../../src/server/internal/countsFor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM;CACzB,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CAAC,MAAoB,EAAE,MAAc,EAAE,IAAY;IAC3E,OAAO,MAAM,CAAC,UAAU,CAAC;QACxB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC;QACtD,GAAG,EAAE,KAAK,IAAI,EAAE;YACf,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,UAAU,CAC/C;;;;;WAKO,MAAM,sBAAsB,EACnC,CAAC,IAAI,CAAC,CACN,CAAC;YACF,OAAO,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Job } from "pg-boss";
2
+ export declare function deadlineOf(job: Job<unknown>): number;
3
+ //# sourceMappingURL=deadlineOf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deadlineOf.d.ts","sourceRoot":"","sources":["../../../src/server/internal/deadlineOf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAEnC,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,CAKpD"}
@@ -0,0 +1,7 @@
1
+ export function deadlineOf(job) {
2
+ if (!("startedOn" in job && job.startedOn instanceof Date && Number.isFinite(job.startedOn.getTime()))) {
3
+ throw new TypeError("Worker jobs must include pg-boss startedOn metadata");
4
+ }
5
+ return job.startedOn.getTime() + job.expireInSeconds * 1000;
6
+ }
7
+ //# sourceMappingURL=deadlineOf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deadlineOf.js","sourceRoot":"","sources":["../../../src/server/internal/deadlineOf.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,GAAiB;IAC3C,IAAI,CAAC,CAAC,WAAW,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,YAAY,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Effect } from "effect";
2
+ import type { Job } from "pg-boss";
3
+ import type { PgBossClient } from "#client.ts";
4
+ import { RetryAt } from "#definition.ts";
5
+ import { deferredAttempt } from "#internal/deferral.ts";
6
+ export declare function deferrableAttempt<A, E, R>(effect: Effect.Effect<A, E, R>, client: PgBossClient, schema: string, job: Job<unknown>, maxDeferrals: number): Effect.Effect<typeof deferredAttempt | A, Exclude<E, import("effect/Types").NoInfer<E> & RetryAt> | (import("effect/Types").NoInfer<E> & RetryAt), R>;
7
+ //# sourceMappingURL=deferrableAttempt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferrableAttempt.d.ts","sourceRoot":"","sources":["../../../src/server/internal/deferrableAttempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAU,MAAM,QAAQ,CAAC;AACzD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAqB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAQ3E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACxC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,EACjB,YAAY,EAAE,MAAM,yJAuBpB"}