@solidstarters/solid-core 1.2.163 → 1.2.166
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/dist/controllers/test-queue.controller.d.ts +1 -1
- package/dist/controllers/test-queue.controller.d.ts.map +1 -1
- package/dist/controllers/test-queue.controller.js +6 -4
- package/dist/controllers/test-queue.controller.js.map +1 -1
- package/dist/decorators/error-codes-provider.decorator.d.ts +4 -0
- package/dist/decorators/error-codes-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/error-codes-provider.decorator.js +12 -0
- package/dist/decorators/error-codes-provider.decorator.js.map +1 -0
- package/dist/entities/security-rule.entity.js +0 -1
- package/dist/entities/security-rule.entity.js.map +1 -1
- package/dist/filters/http-exception.filter.d.ts +3 -2
- package/dist/filters/http-exception.filter.d.ts.map +1 -1
- package/dist/filters/http-exception.filter.js +23 -16
- package/dist/filters/http-exception.filter.js.map +1 -1
- package/dist/helpers/error-mapper.service.d.ts +12 -2
- package/dist/helpers/error-mapper.service.d.ts.map +1 -1
- package/dist/helpers/error-mapper.service.js +85 -72
- package/dist/helpers/error-mapper.service.js.map +1 -1
- package/dist/helpers/solid-core-error-codes-provider.service.d.ts +7 -0
- package/dist/helpers/solid-core-error-codes-provider.service.d.ts.map +1 -0
- package/dist/helpers/solid-core-error-codes-provider.service.js +67 -0
- package/dist/helpers/solid-core-error-codes-provider.service.js.map +1 -0
- package/dist/helpers/solid-registry.d.ts +5 -1
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +16 -0
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +16 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/chatter-queue-options.d.ts +8 -0
- package/dist/jobs/chatter-queue-options.d.ts.map +1 -0
- package/dist/jobs/chatter-queue-options.js +10 -0
- package/dist/jobs/chatter-queue-options.js.map +1 -0
- package/dist/jobs/chatter-queue-publisher.service.d.ts +22 -0
- package/dist/jobs/chatter-queue-publisher.service.d.ts.map +1 -0
- package/dist/jobs/chatter-queue-publisher.service.js +39 -0
- package/dist/jobs/chatter-queue-publisher.service.js.map +1 -0
- package/dist/jobs/chatter-queue-subscriber.service.d.ts +17 -0
- package/dist/jobs/chatter-queue-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/chatter-queue-subscriber.service.js +59 -0
- package/dist/jobs/chatter-queue-subscriber.service.js.map +1 -0
- package/dist/jobs/{database/computed-field-evaluation-publisher.service.d.ts → computed-field-evaluation-publisher.service.d.ts} +2 -2
- package/dist/jobs/computed-field-evaluation-publisher.service.d.ts.map +1 -0
- package/dist/jobs/{database/computed-field-evaluation-publisher.service.js → computed-field-evaluation-publisher.service.js} +8 -8
- package/dist/jobs/computed-field-evaluation-publisher.service.js.map +1 -0
- package/dist/jobs/{database/computed-field-evaluation-queue-options.d.ts → computed-field-evaluation-queue-options.d.ts} +1 -1
- package/dist/jobs/computed-field-evaluation-queue-options.d.ts.map +1 -0
- package/dist/jobs/{database/computed-field-evaluation-queue-options.js → computed-field-evaluation-queue-options.js} +2 -2
- package/dist/jobs/computed-field-evaluation-queue-options.js.map +1 -0
- package/dist/jobs/{database/computed-field-evaluation-subscriber.service.d.ts → computed-field-evaluation-subscriber.service.d.ts} +3 -3
- package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/computed-field-evaluation-subscriber.service.js +51 -0
- package/dist/jobs/computed-field-evaluation-subscriber.service.js.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-publisher-database.service.d.ts +12 -0
- package/dist/jobs/database/computed-field-evaluation-publisher-database.service.d.ts.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-publisher-database.service.js +39 -0
- package/dist/jobs/database/computed-field-evaluation-publisher-database.service.js.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-queue-options-database.d.ts +8 -0
- package/dist/jobs/database/computed-field-evaluation-queue-options-database.d.ts.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-queue-options-database.js +10 -0
- package/dist/jobs/database/computed-field-evaluation-queue-options-database.js.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-subscriber-database.service.d.ts +18 -0
- package/dist/jobs/database/computed-field-evaluation-subscriber-database.service.d.ts.map +1 -0
- package/dist/jobs/database/{computed-field-evaluation-subscriber.service.js → computed-field-evaluation-subscriber-database.service.js} +8 -8
- package/dist/jobs/database/computed-field-evaluation-subscriber-database.service.js.map +1 -0
- package/dist/jobs/database/generate-code-queue-options-database.js +2 -2
- package/dist/jobs/database/generate-code-queue-options-database.js.map +1 -1
- package/dist/jobs/database/test-queue-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/test-queue-subscriber-database.service.js +7 -1
- package/dist/jobs/database/test-queue-subscriber-database.service.js.map +1 -1
- package/dist/jobs/generate-code-publisher.service.d.ts +11 -0
- package/dist/jobs/generate-code-publisher.service.d.ts.map +1 -0
- package/dist/jobs/generate-code-publisher.service.js +39 -0
- package/dist/jobs/generate-code-publisher.service.js.map +1 -0
- package/dist/jobs/generate-code-queue-options.d.ts +8 -0
- package/dist/jobs/generate-code-queue-options.d.ts.map +1 -0
- package/dist/jobs/generate-code-queue-options.js +10 -0
- package/dist/jobs/generate-code-queue-options.js.map +1 -0
- package/dist/jobs/generate-code-subscriber.service.d.ts +18 -0
- package/dist/jobs/generate-code-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/generate-code-subscriber.service.js +70 -0
- package/dist/jobs/generate-code-subscriber.service.js.map +1 -0
- package/dist/jobs/test-queue-subscriber.service.d.ts +1 -1
- package/dist/jobs/test-queue-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/test-queue-subscriber.service.js +9 -6
- package/dist/jobs/test-queue-subscriber.service.js.map +1 -1
- package/dist/jobs/trigger-mcp-client-publisher.service.d.ts +11 -0
- package/dist/jobs/trigger-mcp-client-publisher.service.d.ts.map +1 -0
- package/dist/jobs/trigger-mcp-client-publisher.service.js +39 -0
- package/dist/jobs/trigger-mcp-client-publisher.service.js.map +1 -0
- package/dist/jobs/trigger-mcp-client-queue-options.d.ts +8 -0
- package/dist/jobs/trigger-mcp-client-queue-options.d.ts.map +1 -0
- package/dist/jobs/trigger-mcp-client-queue-options.js +10 -0
- package/dist/jobs/trigger-mcp-client-queue-options.js.map +1 -0
- package/dist/jobs/trigger-mcp-client-subscriber.service.d.ts +18 -0
- package/dist/jobs/trigger-mcp-client-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/trigger-mcp-client-subscriber.service.js +103 -0
- package/dist/jobs/trigger-mcp-client-subscriber.service.js.map +1 -0
- package/dist/jobs/twilio-sms-publisher.service.d.ts +11 -0
- package/dist/jobs/twilio-sms-publisher.service.d.ts.map +1 -0
- package/dist/jobs/twilio-sms-publisher.service.js +39 -0
- package/dist/jobs/twilio-sms-publisher.service.js.map +1 -0
- package/dist/jobs/twilio-sms-queue-options.d.ts +8 -0
- package/dist/jobs/twilio-sms-queue-options.d.ts.map +1 -0
- package/dist/jobs/twilio-sms-queue-options.js +10 -0
- package/dist/jobs/twilio-sms-queue-options.js.map +1 -0
- package/dist/jobs/twilio-sms-subscriber.service.d.ts +17 -0
- package/dist/jobs/twilio-sms-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/twilio-sms-subscriber.service.js +48 -0
- package/dist/jobs/twilio-sms-subscriber.service.js.map +1 -0
- package/dist/repository/security-rule.repository.js +2 -2
- package/dist/repository/security-rule.repository.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +2 -2
- package/dist/services/authentication.service.js +3 -3
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/queues/database-publisher.service.js +2 -2
- package/dist/services/queues/database-publisher.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +2 -1
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/publisher-factory.service.js +1 -1
- package/dist/services/queues/publisher-factory.service.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts +1 -0
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +14 -0
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +23 -4
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts +8 -0
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +52 -3
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.d.ts +3 -3
- package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js +5 -7
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/controllers/test-queue.controller.ts +4 -3
- package/src/decorators/error-codes-provider.decorator.ts +9 -0
- package/src/entities/security-rule.entity.ts +1 -1
- package/src/filters/http-exception.filter.ts +48 -23
- package/src/helpers/error-mapper.service.ts +117 -176
- package/src/helpers/solid-core-error-codes-provider.service.ts +63 -0
- package/src/helpers/solid-registry.ts +20 -1
- package/src/index.ts +1 -0
- package/src/interfaces.ts +36 -0
- package/src/jobs/chatter-queue-options.ts +9 -0
- package/src/jobs/chatter-queue-publisher.service.ts +37 -0
- package/src/jobs/chatter-queue-subscriber.service.ts +46 -0
- package/src/jobs/computed-field-evaluation-publisher.service.ts +23 -0
- package/src/jobs/{database/computed-field-evaluation-queue-options.ts → computed-field-evaluation-queue-options.ts} +2 -2
- package/src/jobs/computed-field-evaluation-subscriber.service.ts +38 -0
- package/src/jobs/database/{computed-field-evaluation-publisher.service.ts → computed-field-evaluation-publisher-database.service.ts} +2 -2
- package/src/jobs/database/computed-field-evaluation-queue-options-database.ts +9 -0
- package/src/jobs/database/{computed-field-evaluation-subscriber.service.ts → computed-field-evaluation-subscriber-database.service.ts} +2 -2
- package/src/jobs/database/generate-code-queue-options-database.ts +2 -2
- package/src/jobs/database/test-queue-subscriber-database.service.ts +10 -2
- package/src/jobs/generate-code-publisher.service.ts +23 -0
- package/src/jobs/generate-code-queue-options.ts +9 -0
- package/src/jobs/generate-code-subscriber.service.ts +59 -0
- package/src/jobs/test-queue-subscriber.service.ts +15 -7
- package/src/jobs/trigger-mcp-client-publisher.service.ts +22 -0
- package/src/jobs/trigger-mcp-client-queue-options.ts +9 -0
- package/src/jobs/trigger-mcp-client-subscriber.service.ts +104 -0
- package/src/jobs/twilio-sms-publisher.service.ts +23 -0
- package/src/jobs/twilio-sms-queue-options.ts +9 -0
- package/src/jobs/twilio-sms-subscriber.service.ts +32 -0
- package/src/repository/security-rule.repository.ts +2 -2
- package/src/seeders/seed-data/solid-core-metadata.json +2 -2
- package/src/services/authentication.service.ts +4 -4
- package/src/services/queues/database-publisher.service.ts +2 -2
- package/src/services/queues/database-subscriber.service.ts +2 -1
- package/src/services/queues/publisher-factory.service.ts +1 -1
- package/src/services/solid-introspect.service.ts +22 -0
- package/src/solid-core.module.ts +35 -8
- package/src/subscribers/audit.subscriber.ts +235 -5
- package/src/subscribers/computed-entity-field.subscriber.ts +7 -5
- package/dist/jobs/database/computed-field-evaluation-publisher.service.d.ts.map +0 -1
- package/dist/jobs/database/computed-field-evaluation-publisher.service.js.map +0 -1
- package/dist/jobs/database/computed-field-evaluation-queue-options.d.ts.map +0 -1
- package/dist/jobs/database/computed-field-evaluation-queue-options.js.map +0 -1
- package/dist/jobs/database/computed-field-evaluation-subscriber.service.d.ts.map +0 -1
- package/dist/jobs/database/computed-field-evaluation-subscriber.service.js.map +0 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
|
|
4
|
+
import chatterQueueOptions from './chatter-queue-options';
|
|
5
|
+
import { MqMessageQueueService } from '../services/mq-message-queue.service';
|
|
6
|
+
import { MqMessageService } from '../services/mq-message.service';
|
|
7
|
+
import { QueuesModuleOptions } from "../interfaces";
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
export type ChatterEventType = 'insert' | 'update' | 'delete';
|
|
11
|
+
|
|
12
|
+
export interface ChatterMessagePayload {
|
|
13
|
+
eventType: ChatterEventType;
|
|
14
|
+
model: string; // entity name
|
|
15
|
+
entityId: string; // id string
|
|
16
|
+
occurredAt: string; // ISO
|
|
17
|
+
before?: any;
|
|
18
|
+
after?: any;
|
|
19
|
+
diff?: string[]; // changed column names for updates
|
|
20
|
+
userId?: string | null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@Injectable()
|
|
24
|
+
export class ChatterQueuePublisher extends RabbitMqPublisher<any> {
|
|
25
|
+
constructor(
|
|
26
|
+
protected readonly mqMessageService: MqMessageService,
|
|
27
|
+
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
28
|
+
) {
|
|
29
|
+
super(mqMessageService, mqMessageQueueService);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
options(): QueuesModuleOptions {
|
|
33
|
+
return {
|
|
34
|
+
...chatterQueueOptions
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';
|
|
4
|
+
import { QueueMessage } from 'src/interfaces/mq';
|
|
5
|
+
import { MqMessageService } from '../services/mq-message.service';
|
|
6
|
+
import { MqMessageQueueService } from '../services/mq-message-queue.service';
|
|
7
|
+
import { QueuesModuleOptions } from "../interfaces";
|
|
8
|
+
import chatterQueueOptions from './chatter-queue-options';
|
|
9
|
+
import { ChatterMessagePayload } from './chatter-queue-publisher.service';
|
|
10
|
+
import { ChatterMessageService } from 'src/services/chatter-message.service';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class ChatterQueueSubscriber extends RabbitMqSubscriber<any> {
|
|
14
|
+
private readonly chatterQueueLogger = new Logger(ChatterQueueSubscriber.name);
|
|
15
|
+
|
|
16
|
+
constructor(
|
|
17
|
+
readonly mqMessageService: MqMessageService,
|
|
18
|
+
readonly mqMessageQueueService: MqMessageQueueService,
|
|
19
|
+
private readonly chatterMessageService: ChatterMessageService,
|
|
20
|
+
) {
|
|
21
|
+
super(mqMessageService, mqMessageQueueService);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
options(): QueuesModuleOptions {
|
|
25
|
+
return {
|
|
26
|
+
...chatterQueueOptions
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async subscribe(message: QueueMessage<ChatterMessagePayload>) {
|
|
31
|
+
const p = message.payload;
|
|
32
|
+
this.chatterQueueLogger.debug(`Audit event ${p.eventType} ${p.model}#${p.entityId}`);
|
|
33
|
+
|
|
34
|
+
switch (p.eventType) {
|
|
35
|
+
case 'insert':
|
|
36
|
+
await this.chatterMessageService.postAuditMessageOnInsert(p.after, { name: p.model } as any);
|
|
37
|
+
break;
|
|
38
|
+
case 'update':
|
|
39
|
+
await this.chatterMessageService.postAuditMessageOnUpdate(p.after, { name: p.model } as any, p.before, (p.diff || []).map(n => ({ propertyName: n })));
|
|
40
|
+
break;
|
|
41
|
+
case 'delete':
|
|
42
|
+
await this.chatterMessageService.postAuditMessageOnDelete(p.before, { name: p.model } as any, p.before);
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Injectable } from "@nestjs/common";
|
|
2
|
+
import { QueuesModuleOptions } from "src/interfaces";
|
|
3
|
+
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
|
|
4
|
+
import { MqMessageService } from "src/services/mq-message.service";
|
|
5
|
+
import { RabbitMqPublisher } from "src/services/queues/rabbitmq-publisher.service";
|
|
6
|
+
import { ComputedFieldEvaluationPayload } from "src/subscribers/computed-entity-field.subscriber";
|
|
7
|
+
import computedFieldEvaluationQueueOptions from "./computed-field-evaluation-queue-options";
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class ComputedFieldEvaluationPublisherRabbitmq extends RabbitMqPublisher<ComputedFieldEvaluationPayload> {
|
|
11
|
+
constructor(
|
|
12
|
+
protected readonly mqMessageService: MqMessageService,
|
|
13
|
+
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
14
|
+
) {
|
|
15
|
+
super(mqMessageService, mqMessageQueueService);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
options(): QueuesModuleOptions {
|
|
19
|
+
return {
|
|
20
|
+
...computedFieldEvaluationQueueOptions
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { BrokerType } from "
|
|
1
|
+
import { BrokerType } from "../interfaces";
|
|
2
2
|
|
|
3
3
|
const QUEUE_NAME = 'computed_field_evaluation_queue';
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
6
|
name: 'computedFieldEvaluationQueue',
|
|
7
|
-
type: BrokerType.
|
|
7
|
+
type: BrokerType.RabbitMQ,
|
|
8
8
|
queueName: QUEUE_NAME,
|
|
9
9
|
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Injectable } from "@nestjs/common";
|
|
2
|
+
import { SolidRegistry } from "src/helpers/solid-registry";
|
|
3
|
+
import { IEntityPostComputeFieldProvider, QueuesModuleOptions } from "src/interfaces";
|
|
4
|
+
import { QueueMessage } from "src/interfaces/mq";
|
|
5
|
+
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
|
|
6
|
+
import { MqMessageService } from "src/services/mq-message.service";
|
|
7
|
+
import { PollerService } from "src/services/poller.service";
|
|
8
|
+
import { RabbitMqSubscriber } from "src/services/queues/rabbitmq-subscriber.service";
|
|
9
|
+
import { ComputedFieldEvaluationPayload } from "src/subscribers/computed-entity-field.subscriber";
|
|
10
|
+
import computedFieldEvaluationQueueOptions from "./computed-field-evaluation-queue-options";
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class ComputedFieldEvaluationSubscriberRabbitmq extends RabbitMqSubscriber<ComputedFieldEvaluationPayload> {
|
|
14
|
+
constructor(
|
|
15
|
+
readonly mqMessageService: MqMessageService,
|
|
16
|
+
readonly mqMessageQueueService: MqMessageQueueService,
|
|
17
|
+
readonly solidRegistry: SolidRegistry,
|
|
18
|
+
readonly poller: PollerService,
|
|
19
|
+
) {
|
|
20
|
+
super(mqMessageService, mqMessageQueueService);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
options(): QueuesModuleOptions {
|
|
24
|
+
return {
|
|
25
|
+
...computedFieldEvaluationQueueOptions
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// This method will use the ComputedFieldEvaluationPayload to evaluate the computed fields
|
|
30
|
+
// It will then call the corresponding provider computeAndSave method to perform the evaluation
|
|
31
|
+
async subscribe(message: QueueMessage<ComputedFieldEvaluationPayload>) {
|
|
32
|
+
const { databaseEntity, ...computedFieldMetadata } = message.payload;
|
|
33
|
+
const provider = this.solidRegistry.getComputedFieldProvider(computedFieldMetadata.computedFieldValueProviderName);
|
|
34
|
+
// Get the instance of the provider and assert it is of type IEntityComputedFieldProvider
|
|
35
|
+
const providerInstance = provider.instance as IEntityPostComputeFieldProvider<any, any>; // IEntityComputedFieldProvider
|
|
36
|
+
await providerInstance.postComputeAndSaveValue(databaseEntity, computedFieldMetadata); //FIXME There should some way to check/assert if the provider actually has a postComputeAndSaveValue
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -4,10 +4,10 @@ import { MqMessageQueueService } from "src/services/mq-message-queue.service";
|
|
|
4
4
|
import { MqMessageService } from "src/services/mq-message.service";
|
|
5
5
|
import { DatabasePublisher } from "src/services/queues/database-publisher.service";
|
|
6
6
|
import { ComputedFieldEvaluationPayload } from "src/subscribers/computed-entity-field.subscriber";
|
|
7
|
-
import computedFieldEvaluationQueueOptions from "./computed-field-evaluation-queue-options";
|
|
7
|
+
import computedFieldEvaluationQueueOptions from "./computed-field-evaluation-queue-options-database";
|
|
8
8
|
|
|
9
9
|
@Injectable()
|
|
10
|
-
export class
|
|
10
|
+
export class ComputedFieldEvaluationPublisherDatabase extends DatabasePublisher<ComputedFieldEvaluationPayload> {
|
|
11
11
|
constructor(
|
|
12
12
|
protected readonly mqMessageService: MqMessageService,
|
|
13
13
|
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -6,11 +6,11 @@ import { MqMessageQueueService } from "src/services/mq-message-queue.service";
|
|
|
6
6
|
import { MqMessageService } from "src/services/mq-message.service";
|
|
7
7
|
import { DatabaseSubscriber } from "src/services/queues/database-subscriber.service";
|
|
8
8
|
import { ComputedFieldEvaluationPayload } from "src/subscribers/computed-entity-field.subscriber";
|
|
9
|
-
import computedFieldEvaluationQueueOptions from "./computed-field-evaluation-queue-options";
|
|
9
|
+
import computedFieldEvaluationQueueOptions from "./computed-field-evaluation-queue-options-database";
|
|
10
10
|
import { PollerService } from "src/services/poller.service";
|
|
11
11
|
|
|
12
12
|
@Injectable()
|
|
13
|
-
export class
|
|
13
|
+
export class ComputedFieldEvaluationSubscriberDatabase extends DatabaseSubscriber<ComputedFieldEvaluationPayload> {
|
|
14
14
|
constructor(
|
|
15
15
|
readonly mqMessageService: MqMessageService,
|
|
16
16
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { BrokerType } from "../../interfaces";
|
|
2
2
|
|
|
3
|
-
const QUEUE_NAME = '
|
|
3
|
+
const QUEUE_NAME = 'generate_code_queue_database';
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
|
-
name: '
|
|
6
|
+
name: 'generateCodeQueueDatabase',
|
|
7
7
|
type: BrokerType.Database,
|
|
8
8
|
queueName: QUEUE_NAME,
|
|
9
9
|
};
|
|
@@ -29,12 +29,20 @@ export class TestQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
|
29
29
|
// console.log(`Received message ${JSON.stringify(message)}`);
|
|
30
30
|
this.testQueueLogger.debug(`Received message: ${JSON.stringify(message)}`);
|
|
31
31
|
|
|
32
|
+
let timeoutSecondsParsed = 10;
|
|
33
|
+
const timeoutSeconds = message?.payload?.timeoutSeconds;
|
|
34
|
+
if (timeoutSeconds) {
|
|
35
|
+
timeoutSecondsParsed = +timeoutSeconds;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
this.testQueueLogger.debug(`Processing message with timeout: ${timeoutSecondsParsed}`);
|
|
39
|
+
|
|
40
|
+
// Simulate some processing time
|
|
32
41
|
return new Promise((resolve, reject) => {
|
|
33
|
-
// Simulate some processing time
|
|
34
42
|
setTimeout(() => {
|
|
35
43
|
this.testQueueLogger.debug(`Processed message: ${JSON.stringify(message)}`);
|
|
36
44
|
resolve({ status: 'success', messageId: message.messageId, message: `Processed message` });
|
|
37
|
-
},
|
|
45
|
+
}, timeoutSecondsParsed * 1000);
|
|
38
46
|
});
|
|
39
47
|
}
|
|
40
48
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
|
|
4
|
+
import { CodeGenerationOptions, QueuesModuleOptions } from "../interfaces";
|
|
5
|
+
import { MqMessageQueueService } from '../services/mq-message-queue.service';
|
|
6
|
+
import { MqMessageService } from '../services/mq-message.service';
|
|
7
|
+
import generateCodeQueueOptions from './generate-code-queue-options';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class GenerateCodePublisherRabbitmq extends RabbitMqPublisher<CodeGenerationOptions> {
|
|
11
|
+
constructor(
|
|
12
|
+
protected readonly mqMessageService: MqMessageService,
|
|
13
|
+
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
14
|
+
) {
|
|
15
|
+
super(mqMessageService, mqMessageQueueService);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
options(): QueuesModuleOptions {
|
|
19
|
+
return {
|
|
20
|
+
...generateCodeQueueOptions
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { QueueMessage } from 'src/interfaces/mq';
|
|
4
|
+
import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
|
|
5
|
+
import { SolidFieldType } from 'src/dtos/create-field-metadata.dto';
|
|
6
|
+
import { ModelMetadataService } from 'src/services/model-metadata.service';
|
|
7
|
+
import { PollerService } from 'src/services/poller.service';
|
|
8
|
+
import { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';
|
|
9
|
+
import { CodeGenerationOptions, QueuesModuleOptions } from 'src/interfaces';
|
|
10
|
+
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
11
|
+
import { MqMessageService } from 'src/services/mq-message.service';
|
|
12
|
+
import generateCodeQueueOptions from './generate-code-queue-options';
|
|
13
|
+
|
|
14
|
+
@Injectable()
|
|
15
|
+
export class GenerateCodeSubscriberRabbitmq extends RabbitMqSubscriber<CodeGenerationOptions> {
|
|
16
|
+
private readonly generateCodeSubscriberLogger = new Logger(GenerateCodeSubscriberRabbitmq.name);
|
|
17
|
+
|
|
18
|
+
constructor(
|
|
19
|
+
readonly mqMessageService: MqMessageService,
|
|
20
|
+
readonly mqMessageQueueService: MqMessageQueueService,
|
|
21
|
+
readonly poller: PollerService,
|
|
22
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
23
|
+
readonly modelMetadataService: ModelMetadataService,
|
|
24
|
+
) {
|
|
25
|
+
super(mqMessageService, mqMessageQueueService);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
options(): QueuesModuleOptions {
|
|
29
|
+
return {
|
|
30
|
+
...generateCodeQueueOptions
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async subscribe(message: QueueMessage<CodeGenerationOptions>) {
|
|
35
|
+
this.generateCodeSubscriberLogger.debug(`Received message: ${JSON.stringify(message)}`);
|
|
36
|
+
|
|
37
|
+
const codeGnerationOptions = message.payload;
|
|
38
|
+
|
|
39
|
+
const { model, removeFieldCodeOuput, refreshModelCodeOutput } = await this.modelMetadataService.generateCode(codeGnerationOptions);
|
|
40
|
+
|
|
41
|
+
// Generate the code for models which are linked to fields having an inverse relation
|
|
42
|
+
const coModelSingularNames = model.fields.
|
|
43
|
+
filter(field => field.type === SolidFieldType.relation && field.relationCreateInverse === true)
|
|
44
|
+
.map(field => field.relationCoModelSingularName);
|
|
45
|
+
|
|
46
|
+
for (const singularName of coModelSingularNames) {
|
|
47
|
+
const coModel = await this.modelMetadataService.findOneBySingularName(singularName);
|
|
48
|
+
const inverseOptions: CodeGenerationOptions = {
|
|
49
|
+
modelId: coModel.id,
|
|
50
|
+
dryRun: codeGnerationOptions.dryRun
|
|
51
|
+
};
|
|
52
|
+
await this.modelMetadataService.generateCode(inverseOptions);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
await this.modelMetadataService.generateVAMConfig(model.id);
|
|
56
|
+
|
|
57
|
+
return `${removeFieldCodeOuput} \n ${refreshModelCodeOutput}`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -27,12 +27,20 @@ export class TestQueueSubscriber extends RabbitMqSubscriber<any> {
|
|
|
27
27
|
// console.log(`Received message ${JSON.stringify(message)}`);
|
|
28
28
|
this.testQueueLogger.debug(`Received message: ${JSON.stringify(message)}`);
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
});
|
|
30
|
+
let timeoutSecondsParsed = 10;
|
|
31
|
+
const timeoutSeconds = message?.payload?.timeoutSeconds;
|
|
32
|
+
if (timeoutSeconds) {
|
|
33
|
+
timeoutSecondsParsed = +timeoutSeconds;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
this.testQueueLogger.debug(`Processing message with timeout: ${timeoutSecondsParsed}`);
|
|
37
|
+
|
|
38
|
+
// Simulate some processing time
|
|
39
|
+
setTimeout(() => {
|
|
40
|
+
this.testQueueLogger.debug(`Processed message: ${JSON.stringify(message)}`);
|
|
41
|
+
// resolve({ status: 'success', messageId: message.messageId, message: `Processed message` });
|
|
42
|
+
}, timeoutSecondsParsed * 1000);
|
|
43
|
+
|
|
44
|
+
// return new Promise((resolve, reject) => {});
|
|
37
45
|
}
|
|
38
46
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Injectable } from "@nestjs/common";
|
|
2
|
+
import { QueuesModuleOptions, TriggerMcpClientOptions } from "src/interfaces";
|
|
3
|
+
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
|
|
4
|
+
import { MqMessageService } from "src/services/mq-message.service";
|
|
5
|
+
import { RabbitMqPublisher } from "src/services/queues/rabbitmq-publisher.service";
|
|
6
|
+
import triggerMcpClientQueueOptions from "./trigger-mcp-client-queue-options";
|
|
7
|
+
|
|
8
|
+
@Injectable()
|
|
9
|
+
export class TriggerMcpClientPublisherRabbitmq extends RabbitMqPublisher<TriggerMcpClientOptions> {
|
|
10
|
+
constructor(
|
|
11
|
+
protected readonly mqMessageService: MqMessageService,
|
|
12
|
+
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
13
|
+
) {
|
|
14
|
+
super(mqMessageService, mqMessageQueueService);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
options(): QueuesModuleOptions {
|
|
18
|
+
return {
|
|
19
|
+
...triggerMcpClientQueueOptions
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { QueueMessage } from 'src/interfaces/mq';
|
|
4
|
+
import triggerMcpClientQueueOptions from "./trigger-mcp-client-queue-options";
|
|
5
|
+
import { AiInteractionService } from 'src/services/ai-interaction.service';
|
|
6
|
+
import { PollerService } from 'src/services/poller.service';
|
|
7
|
+
import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
|
|
8
|
+
import { TriggerMcpClientOptions, QueuesModuleOptions } from 'src/interfaces';
|
|
9
|
+
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
10
|
+
import { MqMessageService } from 'src/services/mq-message.service';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class TriggerMcpClientSubscriberRabbitmq extends RabbitMqPublisher<TriggerMcpClientOptions> {
|
|
14
|
+
private readonly triggerMcpClientSubscriberLogger = new Logger(TriggerMcpClientSubscriberRabbitmq.name);
|
|
15
|
+
|
|
16
|
+
constructor(
|
|
17
|
+
readonly mqMessageService: MqMessageService,
|
|
18
|
+
readonly mqMessageQueueService: MqMessageQueueService,
|
|
19
|
+
readonly poller: PollerService,
|
|
20
|
+
readonly aiInteractionService: AiInteractionService,
|
|
21
|
+
) {
|
|
22
|
+
super(mqMessageService, mqMessageQueueService);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
options(): QueuesModuleOptions {
|
|
26
|
+
return {
|
|
27
|
+
...triggerMcpClientQueueOptions
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async subscribe(message: QueueMessage<TriggerMcpClientOptions>) {
|
|
32
|
+
this.triggerMcpClientSubscriberLogger.debug(`Received message: ${JSON.stringify(message)}`);
|
|
33
|
+
|
|
34
|
+
const codeGnerationOptions = message.payload;
|
|
35
|
+
|
|
36
|
+
const aiInteraction = await this.aiInteractionService.findOne(codeGnerationOptions.aiInteractionId, {
|
|
37
|
+
populate: ['user']
|
|
38
|
+
});
|
|
39
|
+
if (!aiInteraction) {
|
|
40
|
+
const m = `Unable to identified the aiInteraction entry that triggered this job... using id: ${codeGnerationOptions.aiInteractionId}`
|
|
41
|
+
this.triggerMcpClientSubscriberLogger.log(m);
|
|
42
|
+
throw new Error(m);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// The message contains the users prompt.
|
|
46
|
+
const prompt = aiInteraction.message;
|
|
47
|
+
|
|
48
|
+
// Use this to invoke our mcp client
|
|
49
|
+
// TODO: try / catch ...
|
|
50
|
+
// Handle the rejection gracefully...
|
|
51
|
+
const aiResponse = await this.aiInteractionService.runMcpPrompt(prompt);
|
|
52
|
+
this.triggerMcpClientSubscriberLogger.log(`aiResponse: `);
|
|
53
|
+
this.triggerMcpClientSubscriberLogger.log(JSON.stringify(aiResponse));
|
|
54
|
+
|
|
55
|
+
if (!aiResponse.success) {
|
|
56
|
+
this.triggerMcpClientSubscriberLogger.log(`Gen ai has returned with a false status code`);
|
|
57
|
+
|
|
58
|
+
const errorsStr = aiResponse.errors.join('; ');
|
|
59
|
+
|
|
60
|
+
await this.aiInteractionService.create({
|
|
61
|
+
userId: aiInteraction.user.id,
|
|
62
|
+
threadId: aiInteraction.threadId,
|
|
63
|
+
parentInteractionId: aiInteraction.id,
|
|
64
|
+
role: 'gen-ai',
|
|
65
|
+
message: '-',
|
|
66
|
+
contentType: aiResponse.content_type,
|
|
67
|
+
errorMessage: errorsStr,
|
|
68
|
+
modelUsed: aiResponse.model,
|
|
69
|
+
responseTimeMs: aiResponse.duration_ms,
|
|
70
|
+
metadata: JSON.stringify(aiResponse),
|
|
71
|
+
isApplied: aiInteraction.isApplied,
|
|
72
|
+
status: aiResponse.success ? 'succeeded' : 'failed'
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// update the job entry with failure... raising an error will lead the job to be marked as failed...
|
|
76
|
+
throw new Error(errorsStr);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
let nestedResponse = aiResponse.response.trim();
|
|
80
|
+
|
|
81
|
+
const genAiInteraction = await this.aiInteractionService.create({
|
|
82
|
+
userId: aiInteraction.user.id,
|
|
83
|
+
threadId: aiInteraction.threadId,
|
|
84
|
+
parentInteractionId: aiInteraction.id,
|
|
85
|
+
role: 'gen-ai',
|
|
86
|
+
message: nestedResponse,
|
|
87
|
+
contentType: aiResponse.content_type,
|
|
88
|
+
errorMessage: '',
|
|
89
|
+
modelUsed: aiResponse.model,
|
|
90
|
+
responseTimeMs: aiResponse.duration_ms,
|
|
91
|
+
metadata: JSON.stringify(aiResponse),
|
|
92
|
+
isApplied: aiInteraction.isApplied,
|
|
93
|
+
status: aiResponse.success ? 'succeeded' : 'failed'
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// If the human interaction was with isAutoApply=true, then we can go ahead and autoApply.
|
|
97
|
+
if (aiInteraction.isAutoApply) {
|
|
98
|
+
this.aiInteractionService.applySolidAiInteraction(genAiInteraction.id);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return aiResponse;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { QueuesModuleOptions } from 'src/interfaces';
|
|
4
|
+
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
5
|
+
import { MqMessageService } from 'src/services/mq-message.service';
|
|
6
|
+
import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
|
|
7
|
+
import smsQueueOptions from './twilio-sms-queue-options';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class TwilioSmsQueuePublisherRabbitmq extends RabbitMqPublisher<any> {
|
|
11
|
+
constructor(
|
|
12
|
+
protected readonly mqMessageService: MqMessageService,
|
|
13
|
+
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
14
|
+
) {
|
|
15
|
+
super(mqMessageService, mqMessageQueueService);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
options(): QueuesModuleOptions {
|
|
19
|
+
return {
|
|
20
|
+
...smsQueueOptions
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { QueuesModuleOptions } from 'src/interfaces';
|
|
4
|
+
import { QueueMessage } from 'src/interfaces/mq';
|
|
5
|
+
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
6
|
+
import { MqMessageService } from 'src/services/mq-message.service';
|
|
7
|
+
import { PollerService } from 'src/services/poller.service';
|
|
8
|
+
import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
|
|
9
|
+
import { TwilioSMSService } from 'src/services/sms/TwilioSMSService';
|
|
10
|
+
import smsQueueOptions from './twilio-sms-queue-options';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class TwilioSmsQueueSubscriberRabbitmq extends RabbitMqPublisher<any> {
|
|
14
|
+
constructor(
|
|
15
|
+
private readonly smsService: TwilioSMSService,
|
|
16
|
+
readonly mqMessageService: MqMessageService,
|
|
17
|
+
readonly mqMessageQueueService: MqMessageQueueService,
|
|
18
|
+
readonly poller: PollerService,
|
|
19
|
+
) {
|
|
20
|
+
super(mqMessageService, mqMessageQueueService);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
options(): QueuesModuleOptions {
|
|
24
|
+
return {
|
|
25
|
+
...smsQueueOptions
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
subscribe(message: QueueMessage<any>) {
|
|
30
|
+
return this.smsService.sendSMSSynchronously(message);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -91,7 +91,7 @@ export class SecurityRuleRepository extends Repository<SecurityRule> {
|
|
|
91
91
|
async upsertWithDto(createDto: CreateSecurityRuleDto) {
|
|
92
92
|
// Populate the role from roleId or roleUserKey
|
|
93
93
|
const roleRepository = this.dataSource.getRepository(RoleMetadata);
|
|
94
|
-
if (
|
|
94
|
+
if (createDto.roleId) {
|
|
95
95
|
const role = await roleRepository.findOne({
|
|
96
96
|
where: {
|
|
97
97
|
id: createDto.roleId,
|
|
@@ -111,7 +111,7 @@ export class SecurityRuleRepository extends Repository<SecurityRule> {
|
|
|
111
111
|
|
|
112
112
|
// Populate the model from modelMetadataId or modelMetadataUserKey
|
|
113
113
|
const modelMetadataRepository = this.dataSource.getRepository(ModelMetadata);
|
|
114
|
-
if (
|
|
114
|
+
if (createDto.modelMetadataId) {
|
|
115
115
|
const modelMetadata = await modelMetadataRepository.findOne({
|
|
116
116
|
where: {
|
|
117
117
|
id: createDto.modelMetadataId,
|
|
@@ -764,13 +764,13 @@ export class AuthenticationService {
|
|
|
764
764
|
isValidUser = false
|
|
765
765
|
// throw new NotFoundException(ERROR_MESSAGES.INVALID_CREDENTIALS);
|
|
766
766
|
}
|
|
767
|
-
if (!user
|
|
767
|
+
if (isValidUser && !user?.active) {
|
|
768
768
|
isValidUser = false
|
|
769
769
|
// throw new UnauthorizedException(ERROR_MESSAGES.INVALID_CREDENTIALS);
|
|
770
770
|
}
|
|
771
771
|
|
|
772
772
|
// 2. Validate if user has used a provider which is "local", only then it makes sense for us to initiate the forgot password routine.
|
|
773
|
-
if (user
|
|
773
|
+
if (isValidUser && user?.lastLoginProvider !== 'local') {
|
|
774
774
|
isValidUser = false
|
|
775
775
|
// throw new BadRequestException(ERROR_MESSAGES.INVALID_CREDENTIALS);
|
|
776
776
|
}
|
|
@@ -792,8 +792,8 @@ export class AuthenticationService {
|
|
|
792
792
|
error: '',
|
|
793
793
|
errorCode: '',
|
|
794
794
|
data: {
|
|
795
|
-
user:
|
|
796
|
-
email: user
|
|
795
|
+
user: {
|
|
796
|
+
email: user?.email,
|
|
797
797
|
// mobile: user.mobile,
|
|
798
798
|
// username: user.username,
|
|
799
799
|
},
|
|
@@ -18,7 +18,7 @@ export abstract class DatabasePublisher<T> implements QueuePublisher<T> {
|
|
|
18
18
|
if (!this.serviceRole) {
|
|
19
19
|
this.logger.debug('Queue service Role is not defined in the environment variables');
|
|
20
20
|
}
|
|
21
|
-
this.logger.debug(`DatabasePublisher instance created with options: ${JSON.stringify(this.options())}
|
|
21
|
+
this.logger.debug(`DatabasePublisher instance created with options: ${JSON.stringify(this.options())}`);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
abstract options(): QueuesModuleOptions;
|
|
@@ -33,7 +33,7 @@ export abstract class DatabasePublisher<T> implements QueuePublisher<T> {
|
|
|
33
33
|
throw new Error('Queue service Role is subscriber, cannot publish messages');
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
this.logger.debug(`DatabasePublisher publishing with options: ${JSON.stringify(this.options())}
|
|
36
|
+
this.logger.debug(`DatabasePublisher publishing with options: ${JSON.stringify(this.options())}`);
|
|
37
37
|
|
|
38
38
|
const options = this.options();
|
|
39
39
|
|