diff --git a/apps/api/src/core/services/job-queue/job-queue.service.spec.ts b/apps/api/src/core/services/job-queue/job-queue.service.spec.ts index 3d4487463b..7f2bdec0b8 100644 --- a/apps/api/src/core/services/job-queue/job-queue.service.spec.ts +++ b/apps/api/src/core/services/job-queue/job-queue.service.spec.ts @@ -16,7 +16,6 @@ describe(JobQueueService.name, () => { await service.registerHandlers([handler]); expect(pgBoss.createQueue).toHaveBeenCalledWith("test", { - name: "test", retryBackoff: true, retryDelayMax: 300, retryLimit: 5 @@ -48,13 +47,11 @@ describe(JobQueueService.name, () => { expect(pgBoss.createQueue).toHaveBeenCalledTimes(2); expect(pgBoss.createQueue).toHaveBeenCalledWith("test", { - name: "test", retryBackoff: true, retryDelayMax: 300, retryLimit: 5 }); expect(pgBoss.createQueue).toHaveBeenCalledWith("another", { - name: "another", retryBackoff: true, retryDelayMax: 300, retryLimit: 5 @@ -127,7 +124,6 @@ describe(JobQueueService.name, () => { await service.startWorkers({ concurrency: 5 }); expect(pgBoss.createQueue).toHaveBeenCalledWith("test", { - name: "test", retryBackoff: true, retryDelayMax: 300, retryLimit: 5 diff --git a/apps/api/src/core/services/job-queue/job-queue.service.ts b/apps/api/src/core/services/job-queue/job-queue.service.ts index c8e5783529..ca21d9d705 100644 --- a/apps/api/src/core/services/job-queue/job-queue.service.ts +++ b/apps/api/src/core/services/job-queue/job-queue.service.ts @@ -37,7 +37,6 @@ export class JobQueueService implements Disposable { } seenJobs.add(queueName); await this.pgBoss.createQueue(queueName, { - name: queueName, retryLimit: 5, retryBackoff: true, retryDelayMax: 5 * 60 diff --git a/apps/notifications/package.json b/apps/notifications/package.json index 6f8cf7de1e..a2209dd398 100644 --- a/apps/notifications/package.json +++ b/apps/notifications/package.json @@ -73,7 +73,7 @@ "murmurhash": "^2.0.1", "nestjs-zod": "^4.3.1", "pg": "^8.13.0", - "pg-boss": "^10.1.6", + "pg-boss": "^11.0.4", "pino": "^9.7.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", diff --git a/apps/notifications/src/infrastructure/broker/providers/pg-boss/pg-boss.provider.spec.ts b/apps/notifications/src/infrastructure/broker/providers/pg-boss/pg-boss.provider.spec.ts index fbf095f0fb..78b33b0cd4 100644 --- a/apps/notifications/src/infrastructure/broker/providers/pg-boss/pg-boss.provider.spec.ts +++ b/apps/notifications/src/infrastructure/broker/providers/pg-boss/pg-boss.provider.spec.ts @@ -26,7 +26,6 @@ describe("createPgBoss", () => { expect(MockPgBoss).toHaveBeenCalledTimes(2); expect(MockPgBoss.mock.calls[0][0]).toEqual(config["broker.EVENT_BROKER_POSTGRES_URI"]); expect(MockPgBoss.mock.calls[1][0]).toEqual({ - archiveCompletedAfterSeconds: config["broker.EVENT_BROKER_ARCHIVE_COMPLETED_AFTER_SECONDS"], db: { executeSql: expect.any(Function) } diff --git a/apps/notifications/src/infrastructure/broker/providers/pg-boss/pg-boss.provider.ts b/apps/notifications/src/infrastructure/broker/providers/pg-boss/pg-boss.provider.ts index 530e85cf6a..36c6221ecd 100644 --- a/apps/notifications/src/infrastructure/broker/providers/pg-boss/pg-boss.provider.ts +++ b/apps/notifications/src/infrastructure/broker/providers/pg-boss/pg-boss.provider.ts @@ -19,8 +19,7 @@ export const createPgBossFactory = executeSql(text: string, values: any[]): Promise<{ rows: any[] }> { return client.query(text, values); } - }, - archiveCompletedAfterSeconds: config.getOrThrow("broker.EVENT_BROKER_ARCHIVE_COMPLETED_AFTER_SECONDS") + } }); const logger = new LoggerService({ context: "PgBoss" }); diff --git a/apps/notifications/src/infrastructure/broker/services/broker/broker.service.spec.ts b/apps/notifications/src/infrastructure/broker/services/broker/broker.service.spec.ts index e65d577d54..195d58b4ce 100644 --- a/apps/notifications/src/infrastructure/broker/services/broker/broker.service.spec.ts +++ b/apps/notifications/src/infrastructure/broker/services/broker/broker.service.spec.ts @@ -46,7 +46,9 @@ describe(BrokerService.name, () => { await service.subscribe(eventName, options, handler); - expect(pgBoss.createQueue).toHaveBeenCalledWith(queueName); + expect(pgBoss.createQueue).toHaveBeenCalledWith(queueName, { + deleteAfterSeconds: configService.getOrThrow("broker.EVENT_BROKER_ARCHIVE_COMPLETED_AFTER_SECONDS") + }); expect(pgBoss.subscribe).toHaveBeenCalledWith(eventName, queueName); expect(pgBoss.work).toHaveBeenCalledTimes(options.prefetchCount); expect(pgBoss.work).toHaveBeenCalledWith(queueName, expect.any(Function)); diff --git a/apps/notifications/src/infrastructure/broker/services/broker/broker.service.ts b/apps/notifications/src/infrastructure/broker/services/broker/broker.service.ts index 473472c8d6..4dbe7d1bc4 100644 --- a/apps/notifications/src/infrastructure/broker/services/broker/broker.service.ts +++ b/apps/notifications/src/infrastructure/broker/services/broker/broker.service.ts @@ -36,7 +36,9 @@ export class BrokerService { async subscribe(eventName: string, options: { prefetchCount: number }, handler: SingleMsgWorkHandler) { const queueName = this.toQueueName(eventName); - await this.boss.createQueue(queueName); + await this.boss.createQueue(queueName, { + deleteAfterSeconds: this.configService.getOrThrow("broker.EVENT_BROKER_ARCHIVE_COMPLETED_AFTER_SECONDS") + }); await this.boss.subscribe(eventName, queueName); await Promise.all( diff --git a/package-lock.json b/package-lock.json index 202b19b149..334dc2e30e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -907,20 +907,6 @@ "semver": "bin/semver" } }, - "apps/api/node_modules/pg-boss": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/pg-boss/-/pg-boss-11.0.4.tgz", - "integrity": "sha512-G+MXscT6bCap5/AwQId0MN9syStdFE0uKDUnbvNF5AGhMZf5OlV/62Xp9Flyo9CRDXMYvtEzZByCfj3a1xrgZQ==", - "license": "MIT", - "dependencies": { - "cron-parser": "^4.9.0", - "pg": "^8.16.3", - "serialize-error": "^8.1.0" - }, - "engines": { - "node": ">=22" - } - }, "apps/api/node_modules/pg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", @@ -4005,7 +3991,7 @@ "murmurhash": "^2.0.1", "nestjs-zod": "^4.3.1", "pg": "^8.13.0", - "pg-boss": "^10.1.6", + "pg-boss": "^11.0.4", "pino": "^9.7.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", @@ -31642,14 +31628,15 @@ "devOptional": true }, "node_modules/cron-parser": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", - "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-5.4.0.tgz", + "integrity": "sha512-HxYB8vTvnQFx4dLsZpGRa0uHp6X3qIzS3ZJgJ9v6l/5TJMgeWQbLkR5yiJ5hOxGbc9+jCADDnydIe15ReLZnJA==", + "license": "MIT", "dependencies": { - "luxon": "^3.2.1" + "luxon": "^3.7.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=18" } }, "node_modules/cross-env": { @@ -40783,9 +40770,10 @@ } }, "node_modules/luxon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", - "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", + "license": "MIT", "engines": { "node": ">=12" } @@ -45302,17 +45290,17 @@ } }, "node_modules/pg-boss": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/pg-boss/-/pg-boss-10.3.2.tgz", - "integrity": "sha512-yy96jwKekgUW4DVvve5xjvLZlNqVCRayl1wJvBxQeDNhIrblgEG0YnqbcNth4wsehkYWVJND9TeWbqb+cfxJKQ==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/pg-boss/-/pg-boss-11.1.2.tgz", + "integrity": "sha512-E+JioJchjDmKLEuU2I+C0BEhs9pP0iwkVLwnDmtS0vK/I/HqB3zIEij08xmhDDrW8Gg2sqezdB58viXF1DM5hQ==", "license": "MIT", "dependencies": { - "cron-parser": "^4.9.0", - "pg": "^8.16.0", + "cron-parser": "^5.4.0", + "pg": "^8.16.3", "serialize-error": "^8.1.0" }, "engines": { - "node": ">=20" + "node": ">=22" } }, "node_modules/pg-cloudflare": {