@wavezync/nestjs-pgboss 3.0.1 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.MD CHANGED
@@ -72,14 +72,20 @@ You can access the `PgBoss` instance directly via `pgBossService.boss`
72
72
  ```ts
73
73
  import { Injectable, Logger } from '@nestjs/common';
74
74
  import { Job } from '@wavezync/nestjs-pgboss';
75
+ import { JobWithMetadata } from 'pg-boss';
76
+
77
+ interface MyJobData {
78
+ id: number;
79
+ name: string;
80
+ }
75
81
 
76
82
  @Injectable()
77
83
  export class MyJobHandler {
78
84
  private readonly logger = new Logger(MyJobHandler.name);
79
85
 
80
86
  @Job('my-job')
81
- async handleMyJob(job: { data: any }) {
82
- this.logger.log('Handling job with data:', job.data);
87
+ async handleMyJob(jobs: JobWithMetadata<MyJobData>[]) {
88
+ this.logger.log(`Processing ${jobs.length} job(s)`);
83
89
  }
84
90
  }
85
91
 
@@ -1,8 +1,10 @@
1
- import { JobOptions } from "pg-boss";
1
+ import { JobOptions, WorkOptions } from "pg-boss";
2
2
  export declare const JOB_NAME = "JOB_NAME";
3
3
  export declare const JOB_OPTIONS = "JOB_OPTIONS";
4
4
  export declare const CRON_EXPRESSION = "CRON_EXPRESSION";
5
5
  export declare const CRON_OPTIONS = "CRON_OPTIONS";
6
6
  export declare const PG_BOSS_JOB_METADATA = "PG_BOSS_JOB_METADATA";
7
- export declare function Job<_TData extends object = any>(name: string, options?: JobOptions): (target: any, key: string, descriptor: PropertyDescriptor) => void;
7
+ export declare const WORK_NAME = "WORK_NAME";
8
+ export declare const WORK_OPTIONS = "WORK_OPTIONS";
9
+ export declare function Job<_TData extends object = any>(name: string, options?: WorkOptions): (target: any, key: string, descriptor: PropertyDescriptor) => void;
8
10
  export declare function CronJob<_TData extends object = any>(name: string, cron: string, options?: JobOptions): (target: any, key: string, descriptor: PropertyDescriptor) => void;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PG_BOSS_JOB_METADATA = exports.CRON_OPTIONS = exports.CRON_EXPRESSION = exports.JOB_OPTIONS = exports.JOB_NAME = void 0;
3
+ exports.WORK_OPTIONS = exports.WORK_NAME = exports.PG_BOSS_JOB_METADATA = exports.CRON_OPTIONS = exports.CRON_EXPRESSION = exports.JOB_OPTIONS = exports.JOB_NAME = void 0;
4
4
  exports.Job = Job;
5
5
  exports.CronJob = CronJob;
6
6
  const common_1 = require("@nestjs/common");
@@ -9,6 +9,8 @@ exports.JOB_OPTIONS = "JOB_OPTIONS";
9
9
  exports.CRON_EXPRESSION = "CRON_EXPRESSION";
10
10
  exports.CRON_OPTIONS = "CRON_OPTIONS";
11
11
  exports.PG_BOSS_JOB_METADATA = "PG_BOSS_JOB_METADATA";
12
+ exports.WORK_NAME = "WORK_NAME";
13
+ exports.WORK_OPTIONS = "WORK_OPTIONS";
12
14
  function Job(name, options = {}) {
13
15
  return (target, key, descriptor) => {
14
16
  (0, common_1.SetMetadata)(exports.JOB_NAME, name)(target, key, descriptor);
@@ -1 +1 @@
1
- {"version":3,"file":"job.decorator.js","sourceRoot":"","sources":["../../lib/decorators/job.decorator.ts"],"names":[],"mappings":";;;AASA,kBAaC;AAED,0BAeC;AAvCD,2CAA6C;AAGhC,QAAA,QAAQ,GAAG,UAAU,CAAC;AACtB,QAAA,WAAW,GAAG,aAAa,CAAC;AAC5B,QAAA,eAAe,GAAG,iBAAiB,CAAC;AACpC,QAAA,YAAY,GAAG,cAAc,CAAC;AAC9B,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,SAAgB,GAAG,CACjB,IAAY,EACZ,UAAsB,EAAE;IAExB,OAAO,CAAC,MAAW,EAAE,GAAW,EAAE,UAA8B,EAAE,EAAE;QAClE,IAAA,oBAAW,EAAC,gBAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACrD,IAAA,oBAAW,EAAC,mBAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAA,oBAAW,EAAC,4BAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CACxE,MAAM,EACN,GAAG,EACH,UAAU,CACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,OAAO,CACrB,IAAY,EACZ,IAAY,EACZ,UAAsB,EAAE;IAExB,OAAO,CAAC,MAAW,EAAE,GAAW,EAAE,UAA8B,EAAE,EAAE;QAClE,IAAA,oBAAW,EAAC,gBAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACrD,IAAA,oBAAW,EAAC,uBAAe,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAA,oBAAW,EAAC,oBAAY,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAA,oBAAW,EAAC,4BAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CACxE,MAAM,EACN,GAAG,EACH,UAAU,CACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"job.decorator.js","sourceRoot":"","sources":["../../lib/decorators/job.decorator.ts"],"names":[],"mappings":";;;AAWA,kBAaC;AAED,0BAeC;AAzCD,2CAA6C;AAGhC,QAAA,QAAQ,GAAG,UAAU,CAAC;AACtB,QAAA,WAAW,GAAG,aAAa,CAAC;AAC5B,QAAA,eAAe,GAAG,iBAAiB,CAAC;AACpC,QAAA,YAAY,GAAG,cAAc,CAAC;AAC9B,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAC9C,QAAA,SAAS,GAAG,WAAW,CAAC;AACxB,QAAA,YAAY,GAAG,cAAc,CAAC;AAE3C,SAAgB,GAAG,CACjB,IAAY,EACZ,UAAuB,EAAE;IAEzB,OAAO,CAAC,MAAW,EAAE,GAAW,EAAE,UAA8B,EAAE,EAAE;QAClE,IAAA,oBAAW,EAAC,gBAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACrD,IAAA,oBAAW,EAAC,mBAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAA,oBAAW,EAAC,4BAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CACxE,MAAM,EACN,GAAG,EACH,UAAU,CACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,OAAO,CACrB,IAAY,EACZ,IAAY,EACZ,UAAsB,EAAE;IAExB,OAAO,CAAC,MAAW,EAAE,GAAW,EAAE,UAA8B,EAAE,EAAE;QAClE,IAAA,oBAAW,EAAC,gBAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QACrD,IAAA,oBAAW,EAAC,uBAAe,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAA,oBAAW,EAAC,oBAAY,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAA,oBAAW,EAAC,4BAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CACxE,MAAM,EACN,GAAG,EACH,UAAU,CACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -15,7 +15,6 @@ const core_1 = require("@nestjs/core");
15
15
  const pgboss_service_1 = require("./pgboss.service");
16
16
  const job_decorator_1 = require("./decorators/job.decorator");
17
17
  const consts_1 = require("./utils/consts");
18
- const helpers_1 = require("./utils/helpers");
19
18
  let HandlerScannerService = class HandlerScannerService {
20
19
  constructor(pgBossService, reflector, modulesContainer) {
21
20
  this.pgBossService = pgBossService;
@@ -44,22 +43,17 @@ let HandlerScannerService = class HandlerScannerService {
44
43
  const cronExpression = this.reflector.get(job_decorator_1.CRON_EXPRESSION, methodRef);
45
44
  const cronOptions = this.reflector.get(job_decorator_1.CRON_OPTIONS, methodRef);
46
45
  if (jobName) {
47
- const boundHandler = async (job) => {
48
- const extractedJob = (0, helpers_1.normalizeJob)(job);
49
- await methodRef.call(instance, extractedJob);
50
- };
51
46
  try {
52
47
  if (cronExpression) {
53
- await this.pgBossService.registerCronJob(jobName, cronExpression, boundHandler, {}, cronOptions);
48
+ await this.pgBossService.registerCronJob(jobName, cronExpression, methodRef.bind(instance), {}, cronOptions);
54
49
  this.logger.log(`Registered cron job: ${jobName}`);
50
+ continue;
55
51
  }
56
- else {
57
- await this.pgBossService.registerJob(jobName, boundHandler, jobOptions);
58
- this.logger.log(`Registered job: ${jobName}`);
59
- }
52
+ await this.pgBossService.registerJob(jobName, methodRef.bind(instance), jobOptions);
53
+ this.logger.log(`Registered job: ${jobName}`);
60
54
  }
61
55
  catch (error) {
62
- this.logger.error(`Error registering job ${jobName}:`, error);
56
+ this.logger.error(error, `Error registering job ${jobName}`);
63
57
  }
64
58
  }
65
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handler-scanner.service.js","sourceRoot":"","sources":["../lib/handler-scanner.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler-scanner.service.js","sourceRoot":"","sources":["../lib/handler-scanner.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAoD;AACpD,uCAA2D;AAC3D,qDAAiD;AACjD,8DAKoC;AAGpC,2CAAwC;AAGjC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAGhC,YACmB,aAA4B,EAC5B,SAAoB,EACpB,gBAAkC;QAFlC,kBAAa,GAAb,aAAa,CAAe;QAC5B,cAAS,GAAT,SAAS,CAAW;QACpB,qBAAgB,GAAhB,gBAAgB,CAAkB;QALpC,WAAM,GAAG,IAAI,eAAM,CAAC,eAAM,CAAC,CAAC;IAM1C,CAAC;IAEJ,KAAK,CAAC,uBAAuB;QAC3B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;YAEjD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,QAA8B;QACvD,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,OAAO;QAEtD,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,MAAM,CAC9D,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,KAAK,aAAa,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,UAAU,CACrE,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAS,wBAAQ,EAAE,SAAS,CAAC,CAAC;YAChE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACnC,2BAAW,EACX,SAAS,CACV,CAAC;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACvC,+BAAe,EACf,SAAS,CACV,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACpC,4BAAY,EACZ,SAAS,CACV,CAAC;YAEF,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,IAAI,cAAc,EAAE,CAAC;wBACnB,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CACtC,OAAO,EACP,cAAc,EACd,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,EAAE,EACF,WAAW,CACZ,CAAC;wBACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;wBACnD,SAAS;oBACX,CAAC;oBAED,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAClC,OAAO,EACP,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,UAAU,CACX,CAAC;oBACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,yBAAyB,OAAO,EAAE,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAxEY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAKuB,8BAAa;QACjB,gBAAS;QACF,uBAAgB;GAN1C,qBAAqB,CAwEjC"}
@@ -39,9 +39,7 @@ let PgBossModule = PgBossModule_1 = class PgBossModule {
39
39
  const pgBossProvider = {
40
40
  provide: consts_1.PGBOSS_TOKEN,
41
41
  useFactory: async (pgBossOptions) => {
42
- const boss = await (0, rxjs_1.lastValueFrom)((0, rxjs_1.defer)(() => new pg_boss_1.default({
43
- connectionString: pgBossOptions.connectionString,
44
- }).start()).pipe((0, handleRetry_1.handleRetry)(pgBossOptions.retryAttempts, pgBossOptions.retryDelay, pgBossOptions.verboseRetryLog)));
42
+ const boss = await (0, rxjs_1.lastValueFrom)((0, rxjs_1.defer)(() => new pg_boss_1.default(pgBossOptions).start()).pipe((0, handleRetry_1.handleRetry)(pgBossOptions.retryLimit, pgBossOptions.retryDelay)));
45
43
  boss.on("error", (error) => {
46
44
  logger.error(`PgBoss error: ${error.message}`, error.stack);
47
45
  });
@@ -1 +1 @@
1
- {"version":3,"file":"pgboss.module.js","sourceRoot":"","sources":["../lib/pgboss.module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pgboss.module.js","sourceRoot":"","sources":["../lib/pgboss.module.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare function handleRetry(retryAttempts?: number, retryDelay?: number, verbose?: boolean, toRetry?: (err: any) => boolean): <T>(source: import("rxjs").Observable<T>) => import("rxjs").Observable<T>;
1
+ export declare function handleRetry(retryAttempts?: number, retryDelay?: number, toRetry?: (err: any) => boolean): <T>(source: import("rxjs").Observable<T>) => import("rxjs").Observable<T>;
@@ -3,16 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleRetry = handleRetry;
4
4
  const rxjs_1 = require("rxjs");
5
5
  const operators_1 = require("rxjs/operators");
6
- const consts_1 = require("./consts");
7
- const common_1 = require("@nestjs/common");
8
- function handleRetry(retryAttempts = 9, retryDelay = 3000, verbose = false, toRetry = (_err) => true) {
9
- const logger = new common_1.Logger(consts_1.LOGGER);
6
+ function handleRetry(retryAttempts = 9, retryDelay = 3000, toRetry = (_err) => true) {
10
7
  return (source) => source.pipe((0, operators_1.retryWhen)((attempts) => attempts.pipe((0, operators_1.mergeMap)((error, index) => {
11
8
  const includeError = toRetry(error);
12
9
  if (includeError) {
13
- if (verbose) {
14
- logger.warn(`Attempt ${index + 1}: Retrying in ${retryDelay / 1000} seconds...`);
15
- }
16
10
  if (index + 1 >= retryAttempts) {
17
11
  return (0, rxjs_1.throwError)(() => new Error(error.message));
18
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handleRetry.js","sourceRoot":"","sources":["../../lib/utils/handleRetry.ts"],"names":[],"mappings":";;AAKA,kCAoCC;AAzCD,+BAAsC;AACtC,8CAA4D;AAC5D,qCAAkC;AAClC,2CAAwC;AAExC,SAAgB,WAAW,CACzB,aAAa,GAAG,CAAC,EACjB,UAAU,GAAG,IAAI,EACjB,OAAO,GAAG,KAAK,EACf,UAAiC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI;IAEpD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,eAAM,CAAC,CAAC;IAElC,OAAO,CAAI,MAAoC,EAAE,EAAE,CACjD,MAAM,CAAC,IAAI,CACT,IAAA,qBAAS,EAAC,CAAC,QAAQ,EAAE,EAAE,CACrB,QAAQ,CAAC,IAAI,CACX,IAAA,oBAAQ,EAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CACT,WAAW,KAAK,GAAG,CAAC,iBAClB,UAAU,GAAG,IACf,aAAa,CACd,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC/B,OAAO,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,IAAA,SAAE,EAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAA,iBAAK,EAAC,UAAU,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CACH,CACF,CACF,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"handleRetry.js","sourceRoot":"","sources":["../../lib/utils/handleRetry.ts"],"names":[],"mappings":";;AAGA,kCAyBC;AA5BD,+BAAsC;AACtC,8CAA4D;AAE5D,SAAgB,WAAW,CACzB,aAAa,GAAG,CAAC,EACjB,UAAU,GAAG,IAAI,EACjB,UAAiC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI;IAEpD,OAAO,CAAI,MAAoC,EAAE,EAAE,CACjD,MAAM,CAAC,IAAI,CACT,IAAA,qBAAS,EAAC,CAAC,QAAQ,EAAE,EAAE,CACrB,QAAQ,CAAC,IAAI,CACX,IAAA,oBAAQ,EAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,KAAK,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC/B,OAAO,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,IAAA,SAAE,EAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAA,iBAAK,EAAC,UAAU,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CACH,CACF,CACF,CAAC;AACN,CAAC"}
@@ -1,15 +1,17 @@
1
1
  import { SetMetadata } from "@nestjs/common";
2
- import { JobOptions } from "pg-boss";
2
+ import { JobOptions, WorkOptions } from "pg-boss";
3
3
 
4
4
  export const JOB_NAME = "JOB_NAME";
5
5
  export const JOB_OPTIONS = "JOB_OPTIONS";
6
6
  export const CRON_EXPRESSION = "CRON_EXPRESSION";
7
7
  export const CRON_OPTIONS = "CRON_OPTIONS";
8
8
  export const PG_BOSS_JOB_METADATA = "PG_BOSS_JOB_METADATA";
9
+ export const WORK_NAME = "WORK_NAME";
10
+ export const WORK_OPTIONS = "WORK_OPTIONS";
9
11
 
10
12
  export function Job<_TData extends object = any>(
11
13
  name: string,
12
- options: JobOptions = {},
14
+ options: WorkOptions = {},
13
15
  ) {
14
16
  return (target: any, key: string, descriptor: PropertyDescriptor) => {
15
17
  SetMetadata(JOB_NAME, name)(target, key, descriptor);
@@ -8,9 +8,8 @@ import {
8
8
  CRON_OPTIONS,
9
9
  } from "./decorators/job.decorator";
10
10
  import { InstanceWrapper } from "@nestjs/core/injector/instance-wrapper";
11
- import PgBoss, { WorkWithMetadataHandler } from "pg-boss";
11
+ import PgBoss from "pg-boss";
12
12
  import { LOGGER } from "./utils/consts";
13
- import { normalizeJob } from "./utils/helpers";
14
13
 
15
14
  @Injectable()
16
15
  export class HandlerScannerService {
@@ -44,6 +43,7 @@ export class HandlerScannerService {
44
43
 
45
44
  for (const methodName of methodNames) {
46
45
  const methodRef = instance[methodName];
46
+
47
47
  const jobName = this.reflector.get<string>(JOB_NAME, methodRef);
48
48
  const jobOptions = this.reflector.get<PgBoss.WorkOptions>(
49
49
  JOB_OPTIONS,
@@ -59,30 +59,27 @@ export class HandlerScannerService {
59
59
  );
60
60
 
61
61
  if (jobName) {
62
- const boundHandler: WorkWithMetadataHandler<any> = async (job) => {
63
- const extractedJob = normalizeJob(job);
64
- await methodRef.call(instance, extractedJob);
65
- };
66
62
  try {
67
63
  if (cronExpression) {
68
64
  await this.pgBossService.registerCronJob(
69
65
  jobName,
70
66
  cronExpression,
71
- boundHandler,
67
+ methodRef.bind(instance),
72
68
  {},
73
69
  cronOptions,
74
70
  );
75
71
  this.logger.log(`Registered cron job: ${jobName}`);
76
- } else {
77
- await this.pgBossService.registerJob(
78
- jobName,
79
- boundHandler,
80
- jobOptions,
81
- );
82
- this.logger.log(`Registered job: ${jobName}`);
72
+ continue;
83
73
  }
74
+
75
+ await this.pgBossService.registerJob(
76
+ jobName,
77
+ methodRef.bind(instance),
78
+ jobOptions,
79
+ );
80
+ this.logger.log(`Registered job: ${jobName}`);
84
81
  } catch (error) {
85
- this.logger.error(`Error registering job ${jobName}:`, error);
82
+ this.logger.error(error, `Error registering job ${jobName}`);
86
83
  }
87
84
  }
88
85
  }
@@ -9,7 +9,7 @@ import {
9
9
  Inject,
10
10
  } from "@nestjs/common";
11
11
  import { MetadataScanner } from "@nestjs/core";
12
- import PgBoss from "pg-boss";
12
+ import PgBoss, { ConstructorOptions } from "pg-boss";
13
13
  import { defer, lastValueFrom } from "rxjs";
14
14
  import { PgBossService } from "./pgboss.service";
15
15
  import { LOGGER, PGBOSS_OPTIONS, PGBOSS_TOKEN } from "./utils/consts";
@@ -18,7 +18,7 @@ import {
18
18
  PgBossOptionsFactory,
19
19
  } from "./interfaces/pgboss-module-options.interface";
20
20
  import { HandlerScannerService } from "./handler-scanner.service";
21
- import { handleRetry } from "utils/handleRetry";
21
+ import { handleRetry } from "./utils/handleRetry";
22
22
 
23
23
  @Global()
24
24
  @Module({
@@ -43,18 +43,10 @@ export class PgBossModule
43
43
 
44
44
  const pgBossProvider = {
45
45
  provide: PGBOSS_TOKEN,
46
- useFactory: async (pgBossOptions) => {
46
+ useFactory: async (pgBossOptions: ConstructorOptions) => {
47
47
  const boss = await lastValueFrom(
48
- defer(() =>
49
- new PgBoss({
50
- connectionString: pgBossOptions.connectionString,
51
- }).start(),
52
- ).pipe(
53
- handleRetry(
54
- pgBossOptions.retryAttempts,
55
- pgBossOptions.retryDelay,
56
- pgBossOptions.verboseRetryLog,
57
- ),
48
+ defer(() => new PgBoss(pgBossOptions).start()).pipe(
49
+ handleRetry(pgBossOptions.retryLimit, pgBossOptions.retryDelay),
58
50
  ),
59
51
  );
60
52
  boss.on("error", (error: Error) => {
@@ -1,16 +1,11 @@
1
1
  import { of, throwError } from "rxjs";
2
2
  import { mergeMap, retryWhen, delay } from "rxjs/operators";
3
- import { LOGGER } from "./consts";
4
- import { Logger } from "@nestjs/common";
5
3
 
6
4
  export function handleRetry(
7
5
  retryAttempts = 9,
8
6
  retryDelay = 3000,
9
- verbose = false,
10
7
  toRetry: (err: any) => boolean = (_err: any) => true,
11
8
  ) {
12
- const logger = new Logger(LOGGER);
13
-
14
9
  return <T>(source: import("rxjs").Observable<T>) =>
15
10
  source.pipe(
16
11
  retryWhen((attempts) =>
@@ -19,14 +14,6 @@ export function handleRetry(
19
14
  const includeError = toRetry(error);
20
15
 
21
16
  if (includeError) {
22
- if (verbose) {
23
- logger.warn(
24
- `Attempt ${index + 1}: Retrying in ${
25
- retryDelay / 1000
26
- } seconds...`,
27
- );
28
- }
29
-
30
17
  if (index + 1 >= retryAttempts) {
31
18
  return throwError(() => new Error(error.message));
32
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavezync/nestjs-pgboss",
3
- "version": "3.0.1",
3
+ "version": "4.0.1",
4
4
  "description": "A NestJS module that integrates pg-boss for job scheduling and handling.",
5
5
  "license": "MIT",
6
6
  "author": "samaratungajs@wavezync.com",