@wavezync/nestjs-pgboss 4.0.0 → 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 +8 -2
- package/dist/pgboss.module.js +1 -3
- package/dist/pgboss.module.js.map +1 -1
- package/dist/utils/handleRetry.d.ts +1 -1
- package/dist/utils/handleRetry.js +1 -7
- package/dist/utils/handleRetry.js.map +1 -1
- package/lib/pgboss.module.ts +5 -13
- package/lib/utils/handleRetry.ts +0 -13
- package/package.json +1 -1
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(jobs:
|
|
82
|
-
this.logger.log(`
|
|
87
|
+
async handleMyJob(jobs: JobWithMetadata<MyJobData>[]) {
|
|
88
|
+
this.logger.log(`Processing ${jobs.length} job(s)`);
|
|
83
89
|
}
|
|
84
90
|
}
|
|
85
91
|
|
package/dist/pgboss.module.js
CHANGED
|
@@ -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":";;;;;;;;;;;;;;;;;;;AAAA,2CASwB;AACxB,uCAA+C;AAC/C,
|
|
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,
|
|
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
|
-
|
|
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":";;
|
|
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"}
|
package/lib/pgboss.module.ts
CHANGED
|
@@ -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
|
-
|
|
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) => {
|
package/lib/utils/handleRetry.ts
CHANGED
|
@@ -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
|
}
|