Skip to content

Commit bba7beb

Browse files
committed
wip
1 parent 63a3a44 commit bba7beb

File tree

12 files changed

+91
-159
lines changed

12 files changed

+91
-159
lines changed

services/workflows-service/src/alert/webhook-manager/webhook-manager.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { IWebhookEntityEventData } from './types';
88
import { Webhook } from '@/events/get-webhooks';
99
import { AnyRecord } from '@ballerine/common';
1010
import { env } from '@/env';
11-
import { OutgoingWebhookQueueService } from '@/bull-mq/outgoing-webhook/outgoing-webhook-queue.service';
11+
import { OutgoingWebhookQueueService } from '@/bull-mq/queues/outgoing-webhook-queue.service';
1212
import { OutgoingWebhooksService } from '@/webhooks/outgoing-webhooks/outgoing-webhooks.service';
1313

1414
@common.Injectable()

services/workflows-service/src/bull-mq/bull-mq.module.ts

Lines changed: 34 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,52 @@
1+
import { BullModule, RegisterQueueOptions } from '@nestjs/bullmq';
12
import { Module } from '@nestjs/common';
2-
import { BullModule } from '@nestjs/bullmq';
3-
import { BullBoardModule } from '@bull-board/nestjs';
4-
import { ExpressAdapter } from '@bull-board/express';
3+
import { ConfigModule, ConfigService } from '@nestjs/config';
4+
55
import { BullMQAdapter } from '@bull-board/api/bullMQAdapter';
6-
import { AppLoggerModule } from '@/common/app-logger/app-logger.module';
6+
import { ExpressAdapter } from '@bull-board/express';
7+
import { BullBoardModule } from '@bull-board/nestjs';
8+
79
import { QUEUES } from '@/bull-mq/consts';
8-
import { OutgoingWebhookQueueService } from '@/bull-mq/outgoing-webhook/outgoing-webhook-queue.service';
9-
import { REDIS_CONFIG } from '@/redis/const/redis-config';
10+
import { OutgoingWebhookQueueService } from '@/bull-mq/queues/outgoing-webhook-queue.service';
11+
import { AppLoggerModule } from '@/common/app-logger/app-logger.module';
1012
import { OutgoingWebhooksModule } from '@/webhooks/outgoing-webhooks/outgoing-webhooks.module';
1113

12-
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
13-
function composeQueueAndDlqBoard(queue: (typeof QUEUES)[keyof typeof QUEUES]) {
14-
const baseFeature = BullBoardModule.forFeature({
15-
name: queue.name,
16-
adapter: BullMQAdapter,
17-
});
18-
19-
const dlqFeature =
20-
'dlq' in queue
21-
? BullBoardModule.forFeature({
22-
name: `${queue.name}-dlq`,
23-
adapter: BullMQAdapter,
24-
})
25-
: null;
26-
27-
return dlqFeature ? [baseFeature, dlqFeature] : [baseFeature];
28-
}
29-
30-
const composeInitiateQueueWithDlq = (queue: (typeof QUEUES)[keyof typeof QUEUES]) =>
31-
[
32-
{
33-
name: queue.name,
34-
...queue.config,
35-
},
36-
'dlq' in queue && {
37-
name: queue.dlq,
38-
},
39-
].filter(Boolean);
40-
4114
@Module({
4215
imports: [
4316
AppLoggerModule,
4417
OutgoingWebhooksModule,
18+
// Register bull & init redis connection
4519
BullModule.forRootAsync({
46-
useFactory: () => {
47-
return {
48-
connection: {
49-
...REDIS_CONFIG,
50-
},
51-
};
52-
},
53-
}),
54-
BullModule.registerQueue(
55-
...Object.values(QUEUES).flatMap(queue => {
56-
return composeInitiateQueueWithDlq(queue);
20+
imports: [ConfigModule],
21+
useFactory: async (configService: ConfigService) => ({
22+
connection: {
23+
host: configService.get('REDIS_HOST'),
24+
port: configService.get('REDIS_PORT'),
25+
password: configService.get('REDIS_PASSWORD'),
26+
},
5727
}),
58-
),
28+
inject: [ConfigService],
29+
}),
30+
// Register bull board module at /api/queues
5931
BullBoardModule.forRoot({
6032
route: '/queues',
6133
adapter: ExpressAdapter,
6234
}),
63-
...Object.values(QUEUES)
64-
.map(queue => composeQueueAndDlqBoard(queue))
65-
.flat(),
35+
// Register queues and pass config to bull board forFeature
36+
...Object.values(QUEUES).flatMap(queue => {
37+
const queues: Array<Omit<RegisterQueueOptions, 'name'> & { name: string }> = [
38+
{ name: queue.name, ...queue.config },
39+
];
40+
41+
if ('dlq' in queue) {
42+
queues.push({ name: queue.dlq });
43+
}
44+
45+
return queues.flatMap(queue => [
46+
BullModule.registerQueue(queue),
47+
BullBoardModule.forFeature({ name: queue.name, adapter: BullMQAdapter }),
48+
]);
49+
}),
6650
],
6751
providers: [OutgoingWebhookQueueService],
6852
exports: [BullModule, OutgoingWebhookQueueService],

services/workflows-service/src/bull-mq/incoming-webhook/types/types.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

services/workflows-service/src/bull-mq/outgoing-webhook/outgoing-webhook-queue.service.ts

Lines changed: 0 additions & 75 deletions
This file was deleted.

services/workflows-service/src/bull-mq/outgoing-webhook/types/types.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

services/workflows-service/src/bull-mq/base/base-queue-worker.service.ts renamed to services/workflows-service/src/bull-mq/queues/base-queue-worker.service.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { WorkerListener } from 'bullmq/dist/esm/classes/worker';
88
import { TJobPayloadMetadata } from '@/bull-mq/types';
99

1010
@Injectable()
11-
export abstract class BaseQueueWorkerService<T = any> implements OnModuleDestroy, OnModuleInit {
11+
export abstract class BaseQueueWorkerService<T = unknown> implements OnModuleDestroy, OnModuleInit {
1212
protected queue?: Queue;
1313
protected worker?: Worker;
1414
protected connectionOptions: ConnectionOptions;
@@ -34,9 +34,7 @@ export abstract class BaseQueueWorkerService<T = any> implements OnModuleDestroy
3434
const queueConfig = currentQueue[1];
3535
this.queue = new Queue(queueName, {
3636
connection: this.connectionOptions,
37-
defaultJobOptions: {
38-
...queueConfig.config,
39-
},
37+
defaultJobOptions: queueConfig.config,
4038
});
4139

4240
this.deadLetterQueue =
@@ -122,14 +120,14 @@ export abstract class BaseQueueWorkerService<T = any> implements OnModuleDestroy
122120
worker?.on(eventName, listener);
123121
}
124122

125-
protected setQueueListener<T extends keyof QueueListener<any, any, any>>({
123+
protected setQueueListener<T extends keyof QueueListener<unknown, unknown, string>>({
126124
queue,
127125
eventName,
128126
listener,
129127
}: {
130128
queue: Queue | undefined;
131129
eventName: T;
132-
listener: QueueListener<any, any, any>[T];
130+
listener: QueueListener<unknown, unknown, string>[T];
133131
}) {
134132
queue?.removeAllListeners(eventName);
135133
queue?.on(eventName, listener);

services/workflows-service/src/bull-mq/incoming-webhook/incoming-webhook-queue.service.ts renamed to services/workflows-service/src/bull-mq/queues/incoming-webhook-queue.service.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import { Injectable } from '@nestjs/common';
2-
import { BaseQueueWorkerService } from '@/bull-mq/base/base-queue-worker.service';
3-
import { IncomingWebhookData } from '@/bull-mq/incoming-webhook/types/types';
2+
import { BaseQueueWorkerService } from '@/bull-mq/queues/base-queue-worker.service';
43
import { AppLoggerService } from '@/common/app-logger/app-logger.service';
54
import { QUEUES } from '@/bull-mq/consts';
65
import { Job } from 'bullmq';
76
import { TJobPayloadMetadata } from '@/bull-mq/types';
87

98
type TJobsWebhookIncoming = { jobData: IncomingWebhookData; metadata: TJobPayloadMetadata };
9+
interface IncomingWebhookData {
10+
source: string;
11+
payload: Record<string, unknown>;
12+
service: (payload: Record<string, unknown>) => Promise<void>;
13+
}
1014

1115
@Injectable()
1216
export class IncomingWebhookQueueService extends BaseQueueWorkerService<IncomingWebhookData> {
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Injectable } from '@nestjs/common';
2+
import { Job } from 'bullmq';
3+
4+
import { QUEUES } from '@/bull-mq/consts';
5+
import { BaseQueueWorkerService } from '@/bull-mq/queues/base-queue-worker.service';
6+
import { TJobPayloadMetadata } from '@/bull-mq/types';
7+
import { AppLoggerService } from '@/common/app-logger/app-logger.service';
8+
import { OutgoingWebhooksService } from '@/webhooks/outgoing-webhooks/outgoing-webhooks.service';
9+
10+
type WebhookJobData = Parameters<OutgoingWebhooksService['invokeWebhook']>[0];
11+
type TJobArgs = { jobData: WebhookJobData; metadata: TJobPayloadMetadata };
12+
13+
@Injectable()
14+
export class OutgoingWebhookQueueService extends BaseQueueWorkerService<WebhookJobData> {
15+
constructor(
16+
protected readonly logger: AppLoggerService,
17+
protected outgoingWebhookService: OutgoingWebhooksService,
18+
) {
19+
super(QUEUES.OUTGOING_WEBHOOKS_QUEUE.name, logger);
20+
this.initializeWorker();
21+
}
22+
23+
async handleJob(job: Job<TJobArgs>) {
24+
await this.outgoingWebhookService.invokeWebhook(job.data.jobData);
25+
}
26+
}

services/workflows-service/src/events/document-changed-webhook-caller.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { ConfigService } from '@nestjs/config';
1414
import type { TAuthenticationConfiguration } from '@/customer/types';
1515
import { CustomerService } from '@/customer/customer.service';
1616
import { env } from '@/env';
17-
import { OutgoingWebhookQueueService } from '@/bull-mq/outgoing-webhook/outgoing-webhook-queue.service';
17+
import { OutgoingWebhookQueueService } from '@/bull-mq/queues/outgoing-webhook-queue.service';
1818
import { OutgoingWebhooksService } from '@/webhooks/outgoing-webhooks/outgoing-webhooks.service';
1919

2020
const getExtensionFromMimeType = (mimeType: string) => {
@@ -38,7 +38,7 @@ export class DocumentChangedWebhookCaller {
3838
private readonly logger: AppLoggerService,
3939
private readonly customerService: CustomerService,
4040
private readonly outgoingWebhookQueueService: OutgoingWebhookQueueService,
41-
private readonly outgoingWebhooksService: OutgoingWebhooksService,
41+
private readonly outgoingWebhookService: OutgoingWebhooksService,
4242
) {
4343
this.#__axios = this.httpService.axiosRef;
4444

@@ -217,7 +217,7 @@ export class DocumentChangedWebhookCaller {
217217
}
218218

219219
try {
220-
const res = await this.outgoingWebhooksService.invokeWebhook(webhookArgs);
220+
const res = await this.outgoingWebhookService.invokeWebhook(webhookArgs);
221221
this.logger.log('Webhook Result:', {
222222
status: res.status,
223223
statusText: res.statusText,

services/workflows-service/src/events/workflow-completed-webhook-caller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import type { TAuthenticationConfiguration } from '@/customer/types';
1414
import { CustomerService } from '@/customer/customer.service';
1515
import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository';
1616
import { env } from '@/env';
17-
import { OutgoingWebhookQueueService } from '@/bull-mq/outgoing-webhook/outgoing-webhook-queue.service';
17+
import { OutgoingWebhookQueueService } from '@/bull-mq/queues/outgoing-webhook-queue.service';
1818

1919
@Injectable()
2020
export class WorkflowCompletedWebhookCaller {

0 commit comments

Comments
 (0)