@solidstarters/solid-core 1.2.146 → 1.2.148

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.
Files changed (122) hide show
  1. package/dist/config/common.config.d.ts +10 -0
  2. package/dist/config/common.config.d.ts.map +1 -1
  3. package/dist/config/common.config.js +5 -0
  4. package/dist/config/common.config.js.map +1 -1
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/interfaces.d.ts +5 -5
  10. package/dist/interfaces.d.ts.map +1 -1
  11. package/dist/interfaces.js.map +1 -1
  12. package/dist/jobs/database/api-email-subscriber-database.service.d.ts +3 -1
  13. package/dist/jobs/database/api-email-subscriber-database.service.d.ts.map +1 -1
  14. package/dist/jobs/database/api-email-subscriber-database.service.js +6 -3
  15. package/dist/jobs/database/api-email-subscriber-database.service.js.map +1 -1
  16. package/dist/jobs/database/computed-field-evaluation-subscriber.service.d.ts +3 -1
  17. package/dist/jobs/database/computed-field-evaluation-subscriber.service.d.ts.map +1 -1
  18. package/dist/jobs/database/computed-field-evaluation-subscriber.service.js +6 -3
  19. package/dist/jobs/database/computed-field-evaluation-subscriber.service.js.map +1 -1
  20. package/dist/jobs/database/generate-code-subscriber-database.service.d.ts +3 -1
  21. package/dist/jobs/database/generate-code-subscriber-database.service.d.ts.map +1 -1
  22. package/dist/jobs/database/generate-code-subscriber-database.service.js +6 -3
  23. package/dist/jobs/database/generate-code-subscriber-database.service.js.map +1 -1
  24. package/dist/jobs/database/otp-subscriber-database.service.d.ts +3 -1
  25. package/dist/jobs/database/otp-subscriber-database.service.d.ts.map +1 -1
  26. package/dist/jobs/database/otp-subscriber-database.service.js +5 -2
  27. package/dist/jobs/database/otp-subscriber-database.service.js.map +1 -1
  28. package/dist/jobs/database/sms-subscriber-database.service.d.ts +4 -2
  29. package/dist/jobs/database/sms-subscriber-database.service.d.ts.map +1 -1
  30. package/dist/jobs/database/sms-subscriber-database.service.js +7 -4
  31. package/dist/jobs/database/sms-subscriber-database.service.js.map +1 -1
  32. package/dist/jobs/database/smtp-email-subscriber-database.service.d.ts +4 -2
  33. package/dist/jobs/database/smtp-email-subscriber-database.service.d.ts.map +1 -1
  34. package/dist/jobs/database/smtp-email-subscriber-database.service.js +6 -3
  35. package/dist/jobs/database/smtp-email-subscriber-database.service.js.map +1 -1
  36. package/dist/jobs/database/test-queue-subscriber-database.service.d.ts +3 -1
  37. package/dist/jobs/database/test-queue-subscriber-database.service.d.ts.map +1 -1
  38. package/dist/jobs/database/test-queue-subscriber-database.service.js +6 -3
  39. package/dist/jobs/database/test-queue-subscriber-database.service.js.map +1 -1
  40. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +3 -1
  41. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  42. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +5 -2
  43. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  44. package/dist/jobs/database/twilio-sms-publisher-database.service.d.ts +11 -0
  45. package/dist/jobs/database/twilio-sms-publisher-database.service.d.ts.map +1 -0
  46. package/dist/jobs/database/twilio-sms-publisher-database.service.js +39 -0
  47. package/dist/jobs/database/twilio-sms-publisher-database.service.js.map +1 -0
  48. package/dist/jobs/database/twilio-sms-queue-database-options.d.ts +8 -0
  49. package/dist/jobs/database/twilio-sms-queue-database-options.d.ts.map +1 -0
  50. package/dist/jobs/database/twilio-sms-queue-database-options.js +10 -0
  51. package/dist/jobs/database/twilio-sms-queue-database-options.js.map +1 -0
  52. package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts +17 -0
  53. package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts.map +1 -0
  54. package/dist/jobs/database/twilio-sms-subscriber-database.service.js +48 -0
  55. package/dist/jobs/database/twilio-sms-subscriber-database.service.js.map +1 -0
  56. package/dist/jobs/database/whatsapp-subscriber-database.service.d.ts +3 -1
  57. package/dist/jobs/database/whatsapp-subscriber-database.service.d.ts.map +1 -1
  58. package/dist/jobs/database/whatsapp-subscriber-database.service.js +6 -3
  59. package/dist/jobs/database/whatsapp-subscriber-database.service.js.map +1 -1
  60. package/dist/jobs/sms-subscriber.service.d.ts +1 -1
  61. package/dist/jobs/sms-subscriber.service.js +1 -1
  62. package/dist/jobs/sms-subscriber.service.js.map +1 -1
  63. package/dist/jobs/smtp-email-subscriber.service.d.ts +1 -1
  64. package/dist/seeders/module-metadata-seeder.service.d.ts +1 -1
  65. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  66. package/dist/seeders/module-metadata-seeder.service.js +15 -4
  67. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  68. package/dist/services/mail/smtp-email.service.d.ts +4 -4
  69. package/dist/services/mail/smtp-email.service.d.ts.map +1 -1
  70. package/dist/services/mail/smtp-email.service.js +12 -8
  71. package/dist/services/mail/smtp-email.service.js.map +1 -1
  72. package/dist/services/poller.service.d.ts +24 -0
  73. package/dist/services/poller.service.d.ts.map +1 -0
  74. package/dist/services/poller.service.js +131 -0
  75. package/dist/services/poller.service.js.map +1 -0
  76. package/dist/services/queues/database-subscriber.service.d.ts +4 -1
  77. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  78. package/dist/services/queues/database-subscriber.service.js +13 -13
  79. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  80. package/dist/services/sms/Msg91BaseSMSService.d.ts +2 -2
  81. package/dist/services/sms/Msg91BaseSMSService.d.ts.map +1 -1
  82. package/dist/services/sms/Msg91BaseSMSService.js.map +1 -1
  83. package/dist/services/sms/Msg91OTPService.d.ts +1 -1
  84. package/dist/services/sms/Msg91OTPService.d.ts.map +1 -1
  85. package/dist/services/sms/Msg91OTPService.js.map +1 -1
  86. package/dist/services/sms/Msg91SMSService.d.ts +1 -1
  87. package/dist/services/sms/Msg91SMSService.d.ts.map +1 -1
  88. package/dist/services/sms/Msg91SMSService.js.map +1 -1
  89. package/dist/services/sms/TwilioSMSService.d.ts +18 -0
  90. package/dist/services/sms/TwilioSMSService.d.ts.map +1 -0
  91. package/dist/services/sms/TwilioSMSService.js +115 -0
  92. package/dist/services/sms/TwilioSMSService.js.map +1 -0
  93. package/dist/solid-core.module.d.ts.map +1 -1
  94. package/dist/solid-core.module.js +10 -0
  95. package/dist/solid-core.module.js.map +1 -1
  96. package/dist/tsconfig.tsbuildinfo +1 -1
  97. package/package.json +4 -3
  98. package/src/config/common.config.ts +5 -0
  99. package/src/index.ts +2 -0
  100. package/src/interfaces.ts +5 -5
  101. package/src/jobs/database/api-email-subscriber-database.service.ts +3 -1
  102. package/src/jobs/database/computed-field-evaluation-subscriber.service.ts +4 -2
  103. package/src/jobs/database/generate-code-subscriber-database.service.ts +3 -1
  104. package/src/jobs/database/otp-subscriber-database.service.ts +3 -1
  105. package/src/jobs/database/sms-subscriber-database.service.ts +4 -2
  106. package/src/jobs/database/smtp-email-subscriber-database.service.ts +3 -1
  107. package/src/jobs/database/test-queue-subscriber-database.service.ts +3 -1
  108. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +3 -1
  109. package/src/jobs/database/twilio-sms-publisher-database.service.ts +23 -0
  110. package/src/jobs/database/twilio-sms-queue-database-options.ts +9 -0
  111. package/src/jobs/database/twilio-sms-subscriber-database.service.ts +32 -0
  112. package/src/jobs/database/whatsapp-subscriber-database.service.ts +3 -1
  113. package/src/jobs/sms-subscriber.service.ts +1 -1
  114. package/src/seeders/module-metadata-seeder.service.ts +18 -15
  115. package/src/services/mail/smtp-email.service.ts +18 -17
  116. package/src/services/poller.service.ts +163 -0
  117. package/src/services/queues/database-subscriber.service.ts +39 -12
  118. package/src/services/sms/Msg91BaseSMSService.ts +2 -2
  119. package/src/services/sms/Msg91OTPService.ts +1 -1
  120. package/src/services/sms/Msg91SMSService.ts +1 -1
  121. package/src/services/sms/TwilioSMSService.ts +118 -0
  122. package/src/solid-core.module.ts +13 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidstarters/solid-core",
3
- "version": "1.2.146",
3
+ "version": "1.2.148",
4
4
  "description": "This module is a NestJS module containing all the required core providers required by a Solid application",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -67,6 +67,7 @@
67
67
  "reflect-metadata": "^0.1.13",
68
68
  "rxjs": "^7.8.1",
69
69
  "swagger-ui-express": "^5.0.0",
70
+ "twilio": "^5.8.0",
70
71
  "uuid": "^9.0.1",
71
72
  "xlsx": "^0.18.5"
72
73
  },
@@ -87,10 +88,10 @@
87
88
  "@nestjs/typeorm": "^10.0.1",
88
89
  "nest-commander": "^3.12.5",
89
90
  "nest-winston": "^1.9.7",
91
+ "nestjs-cls": "^5.4.3",
90
92
  "typeorm": "^0.3.20",
91
93
  "typeorm-naming-strategies": "^4.1.0",
92
- "winston": "^3.17.0",
93
- "nestjs-cls": "^5.4.3"
94
+ "winston": "^3.17.0"
94
95
  },
95
96
  "devDependencies": {
96
97
  "@angular-devkit/schematics": "^19.2.6",
@@ -23,6 +23,11 @@ export default registerAs('common', () => {
23
23
  url: process.env.COMMON_MSG91_SMS_URL,
24
24
  apiKey: process.env.COMMON_MSG91_SMS_API_KEY,
25
25
  },
26
+ twilio: {
27
+ accountSid: process.env.COMMON_TWILIO_ACCOUNT_SID,
28
+ authToken: process.env.COMMON_TWILIO_AUTH_TOKEN,
29
+ number: process.env.COMMON_TWILIO_NUMBER,
30
+ },
26
31
  shortUrl: {
27
32
  apiUrl: process.env.COMMON_SHORT_URL_API_URL,
28
33
  apiKey: process.env.COMMON_SHORT_URL_API_KEY,
package/src/index.ts CHANGED
@@ -243,6 +243,8 @@ export * from './services/short-url/tiny-url.service'
243
243
  export * from './services/sms/Msg91BaseSMSService' //rename
244
244
  export * from './services/sms/Msg91OTPService' //rename
245
245
  export * from './services/sms/Msg91SMSService' //rename
246
+ export * from './services/sms/TwilioSMSService' //rename
247
+ export * from './services/poller.service'
246
248
  export * from './services/sms-template.service'
247
249
  export * from './services/solid-introspect.service'
248
250
  export * from './services/user.service'
package/src/interfaces.ts CHANGED
@@ -159,7 +159,7 @@ export class EventDetails<T> {
159
159
  ) { }
160
160
  }
161
161
 
162
- export interface IMail {
162
+ export interface IMail<TResponse=unknown> {
163
163
  sendEmail(
164
164
  to: string,
165
165
  subject: string,
@@ -172,7 +172,7 @@ export interface IMail {
172
172
  cc?: string[],
173
173
  bcc?: string[],
174
174
  from?: string,
175
- ): Promise<void>;
175
+ ): Promise<TResponse>;
176
176
 
177
177
  sendEmailUsingTemplate(
178
178
  to: string,
@@ -186,18 +186,18 @@ export interface IMail {
186
186
  cc?: string[],
187
187
  bcc?: string[],
188
188
  from?: string,
189
- ): Promise<void>;
189
+ ): Promise<TResponse>;
190
190
  }
191
191
 
192
192
  export interface ISMS {
193
- sendSMS(to: string, body: string, shouldQueueSms: boolean): Promise<void>;
193
+ sendSMS(to: string, body: string, shouldQueueSms: boolean): Promise<any>;
194
194
 
195
195
  sendSMSUsingTemplate(
196
196
  to: string,
197
197
  templateName: string,
198
198
  templateParams: any,
199
199
  shouldQueueSms: boolean,
200
- ): Promise<void>;
200
+ ): Promise<any>;
201
201
  }
202
202
 
203
203
  export interface MailAttachmentWrapper {
@@ -7,6 +7,7 @@ import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
7
7
  import { ElasticEmailService } from 'src/services/mail/elastic-email.service';
8
8
  import { QueuesModuleOptions } from 'src/interfaces';
9
9
  import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
10
+ import { PollerService } from 'src/services/poller.service';
10
11
 
11
12
  @Injectable()
12
13
  export class ApiEmailQueueSubscriberDatabase extends DatabaseSubscriber<any> {
@@ -14,8 +15,9 @@ export class ApiEmailQueueSubscriberDatabase extends DatabaseSubscriber<any> {
14
15
  private readonly emailService: ElasticEmailService,
15
16
  readonly mqMessageService: MqMessageService,
16
17
  readonly mqMessageQueueService: MqMessageQueueService,
18
+ readonly poller: PollerService,
17
19
  ) {
18
- super(mqMessageService, mqMessageQueueService);
20
+ super(mqMessageService, mqMessageQueueService, poller);
19
21
  }
20
22
 
21
23
  options(): QueuesModuleOptions {
@@ -7,15 +7,17 @@ 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
9
  import computedFieldEvaluationQueueOptions from "./computed-field-evaluation-queue-options";
10
+ import { PollerService } from "src/services/poller.service";
10
11
 
11
12
  @Injectable()
12
13
  export class ComputedFieldEvaluationSubscriber extends DatabaseSubscriber<ComputedFieldEvaluationPayload> {
13
14
  constructor(
14
15
  readonly mqMessageService: MqMessageService,
15
16
  readonly mqMessageQueueService: MqMessageQueueService,
16
- readonly solidRegistry: SolidRegistry
17
+ readonly solidRegistry: SolidRegistry,
18
+ readonly poller: PollerService,
17
19
  ) {
18
- super(mqMessageService, mqMessageQueueService);
20
+ super(mqMessageService, mqMessageQueueService, poller);
19
21
  }
20
22
 
21
23
  options(): QueuesModuleOptions {
@@ -8,6 +8,7 @@ import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.serv
8
8
  import generateCodeQueueOptions from './generate-code-queue-options-database';
9
9
  import { SolidFieldType } from 'src/dtos/create-field-metadata.dto';
10
10
  import { ModelMetadataService } from 'src/services/model-metadata.service';
11
+ import { PollerService } from 'src/services/poller.service';
11
12
 
12
13
  @Injectable()
13
14
  export class GenerateCodeSubscriberDatabase extends DatabaseSubscriber<CodeGenerationOptions> {
@@ -16,10 +17,11 @@ export class GenerateCodeSubscriberDatabase extends DatabaseSubscriber<CodeGener
16
17
  constructor(
17
18
  readonly mqMessageService: MqMessageService,
18
19
  readonly mqMessageQueueService: MqMessageQueueService,
20
+ readonly poller: PollerService,
19
21
  @Inject(forwardRef(() => ModelMetadataService))
20
22
  readonly modelMetadataService: ModelMetadataService,
21
23
  ) {
22
- super(mqMessageService, mqMessageQueueService);
24
+ super(mqMessageService, mqMessageQueueService, poller);
23
25
  }
24
26
 
25
27
  options(): QueuesModuleOptions {
@@ -7,15 +7,17 @@ import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
7
7
  import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
8
8
  import { Msg91OTPService } from 'src/services/sms/Msg91OTPService';
9
9
  import { QueuesModuleOptions } from 'src/interfaces';
10
+ import { PollerService } from 'src/services/poller.service';
10
11
 
11
12
  @Injectable()
12
13
  export class OTPQueueSubscriberDatabase extends DatabaseSubscriber<any> {
13
14
  constructor(
14
15
  private readonly otpService: Msg91OTPService,
15
16
  readonly mqMessageService: MqMessageService,
17
+ readonly poller: PollerService,
16
18
  readonly mqMessageQueueService: MqMessageQueueService,
17
19
  ) {
18
- super(mqMessageService, mqMessageQueueService);
20
+ super(mqMessageService, mqMessageQueueService, poller);
19
21
  }
20
22
 
21
23
  options(): QueuesModuleOptions {
@@ -7,6 +7,7 @@ import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
7
7
  import { Msg91SMSService } from 'src/services/sms/Msg91SMSService';
8
8
  import { QueuesModuleOptions } from 'src/interfaces';
9
9
  import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
10
+ import { PollerService } from 'src/services/poller.service';
10
11
 
11
12
  @Injectable()
12
13
  export class SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
@@ -14,8 +15,9 @@ export class SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
14
15
  private readonly smsService: Msg91SMSService,
15
16
  readonly mqMessageService: MqMessageService,
16
17
  readonly mqMessageQueueService: MqMessageQueueService,
18
+ readonly poller: PollerService,
17
19
  ) {
18
- super(mqMessageService, mqMessageQueueService);
20
+ super(mqMessageService, mqMessageQueueService, poller);
19
21
  }
20
22
 
21
23
  options(): QueuesModuleOptions {
@@ -25,6 +27,6 @@ export class SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
25
27
  }
26
28
 
27
29
  subscribe(message: QueueMessage<any>) {
28
- this.smsService.sendSMSSynchronously(message);
30
+ return this.smsService.sendSMSSynchronously(message);
29
31
  }
30
32
  }
@@ -7,6 +7,7 @@ import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
7
7
  import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
8
8
  import { SMTPEMailService } from 'src/services/mail/smtp-email.service';
9
9
  import { QueuesModuleOptions } from 'src/interfaces';
10
+ import { PollerService } from 'src/services/poller.service';
10
11
 
11
12
  @Injectable()
12
13
  export class SmtpEmailQueueSubscriberDatabase extends DatabaseSubscriber<any> {
@@ -14,8 +15,9 @@ export class SmtpEmailQueueSubscriberDatabase extends DatabaseSubscriber<any> {
14
15
  private readonly emailService: SMTPEMailService,
15
16
  readonly mqMessageService: MqMessageService,
16
17
  readonly mqMessageQueueService: MqMessageQueueService,
18
+ readonly poller: PollerService,
17
19
  ) {
18
- super(mqMessageService, mqMessageQueueService);
20
+ super(mqMessageService, mqMessageQueueService, poller);
19
21
  }
20
22
 
21
23
  options(): QueuesModuleOptions {
@@ -6,6 +6,7 @@ import { MqMessageService } from '../../services/mq-message.service';
6
6
  import { MqMessageQueueService } from '../../services/mq-message-queue.service';
7
7
  import { QueuesModuleOptions } from "../../interfaces";
8
8
  import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
9
+ import { PollerService } from 'src/services/poller.service';
9
10
 
10
11
  @Injectable()
11
12
  export class TestQueueSubscriberDatabase extends DatabaseSubscriber<any> {
@@ -13,8 +14,9 @@ export class TestQueueSubscriberDatabase extends DatabaseSubscriber<any> {
13
14
  constructor(
14
15
  readonly mqMessageService: MqMessageService,
15
16
  readonly mqMessageQueueService: MqMessageQueueService,
17
+ readonly poller: PollerService
16
18
  ) {
17
- super(mqMessageService, mqMessageQueueService);
19
+ super(mqMessageService, mqMessageQueueService, poller);
18
20
  }
19
21
 
20
22
  options(): QueuesModuleOptions {
@@ -7,6 +7,7 @@ import { QueuesModuleOptions, TriggerMcpClientOptions } from "../../interfaces";
7
7
  import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
8
8
  import triggerMcpClientQueueOptions from "./trigger-mcp-client-queue-options";
9
9
  import { AiInteractionService } from 'src/services/ai-interaction.service';
10
+ import { PollerService } from 'src/services/poller.service';
10
11
 
11
12
  @Injectable()
12
13
  export class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<TriggerMcpClientOptions> {
@@ -15,9 +16,10 @@ export class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<Trigg
15
16
  constructor(
16
17
  readonly mqMessageService: MqMessageService,
17
18
  readonly mqMessageQueueService: MqMessageQueueService,
19
+ readonly poller: PollerService,
18
20
  readonly aiInteractionService: AiInteractionService,
19
21
  ) {
20
- super(mqMessageService, mqMessageQueueService);
22
+ super(mqMessageService, mqMessageQueueService, poller);
21
23
  }
22
24
 
23
25
  options(): QueuesModuleOptions {
@@ -0,0 +1,23 @@
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ import smsQueueOptions from './twilio-sms-queue-database-options';
4
+ import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
5
+ import { MqMessageService } from 'src/services/mq-message.service';
6
+ import { QueuesModuleOptions } from 'src/interfaces';
7
+ import { DatabasePublisher } from 'src/services/queues/database-publisher.service';
8
+
9
+ @Injectable()
10
+ export class TwilioSmsQueuePublisherDatabase extends DatabasePublisher<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,9 @@
1
+ import { BrokerType } from "src/interfaces";
2
+
3
+ const SMS_QUEUE_NAME = 'twilio_sms_queue_database';
4
+
5
+ export default {
6
+ name: 'twilioSmsInstance',
7
+ type: BrokerType.Database,
8
+ queueName: SMS_QUEUE_NAME,
9
+ };
@@ -0,0 +1,32 @@
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ import { QueueMessage } from 'src/interfaces/mq';
4
+ import smsQueueOptions from './twilio-sms-queue-database-options';
5
+ import { MqMessageService } from 'src/services/mq-message.service';
6
+ import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
7
+ import { QueuesModuleOptions } from 'src/interfaces';
8
+ import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
9
+ import { TwilioSMSService } from 'src/services/sms/TwilioSMSService';
10
+ import { PollerService } from 'src/services/poller.service';
11
+
12
+ @Injectable()
13
+ export class TwilioSmsQueueSubscriberDatabase extends DatabaseSubscriber<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, poller);
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
+ }
@@ -8,6 +8,7 @@ import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
8
8
  import { Msg91WhatsappService } from 'src/services/whatsapp/Msg91WhatsappService';
9
9
  import { QueuesModuleOptions } from 'src/interfaces';
10
10
  import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
11
+ import { PollerService } from 'src/services/poller.service';
11
12
 
12
13
  @Injectable()
13
14
  export class WhatsappQueueSubscriberDatabase extends DatabaseSubscriber<any> {
@@ -15,8 +16,9 @@ export class WhatsappQueueSubscriberDatabase extends DatabaseSubscriber<any> {
15
16
  private readonly whatsappService: Msg91WhatsappService,
16
17
  readonly mqMessageService: MqMessageService,
17
18
  readonly mqMessageQueueService: MqMessageQueueService,
19
+ readonly poller: PollerService,
18
20
  ) {
19
- super(mqMessageService, mqMessageQueueService);
21
+ super(mqMessageService, mqMessageQueueService, poller);
20
22
  }
21
23
 
22
24
  options(): QueuesModuleOptions {
@@ -25,6 +25,6 @@ export class SmsQueueSubscriber extends RabbitMqSubscriber<any> {
25
25
  }
26
26
 
27
27
  subscribe(message: QueueMessage<any>) {
28
- this.smsService.sendSMSSynchronously(message);
28
+ return this.smsService.sendSMSSynchronously(message);
29
29
  }
30
30
  }
@@ -195,7 +195,7 @@ export class ModuleMetadataSeederService {
195
195
  // Sms templates
196
196
  this.logger.log(`[Start] Processing sms templates for ${moduleMetadata.name}`);
197
197
  const smsTemplates: CreateSmsTemplateDto[] = overallMetadata.smsTemplates;
198
- await this.seedSmsTemplates(smsTemplates);
198
+ await this.seedSmsTemplates(smsTemplates, moduleMetadata);
199
199
  this.logger.log(`[End] Processing sms templates for ${moduleMetadata.name}`);
200
200
 
201
201
  // Settings
@@ -259,7 +259,7 @@ export class ModuleMetadataSeederService {
259
259
  'AuthenticationController.logout'
260
260
  ]
261
261
  await this.roleService.addPermissionToRole('Internal User', internalRolePermission);
262
- await this.roleService.addPermissionToRole('Public', ['SettingController.wrapSettings','AuthenticationController.logout']);
262
+ await this.roleService.addPermissionToRole('Public', ['SettingController.wrapSettings', 'AuthenticationController.logout']);
263
263
  this.logger.log(`All Seeders finished`);
264
264
  this.logger.log(`Newly created username is: ${usersDetail?.length > 0 ? usersDetail[0]?.username : ''} and password is ${usersDetail?.length > 0 ? usersDetail[0]?.password : ''}`);
265
265
  }
@@ -350,7 +350,7 @@ export class ModuleMetadataSeederService {
350
350
 
351
351
  }
352
352
 
353
- async seedSmsTemplates(smsTemplates: CreateSmsTemplateDto[]) {
353
+ async seedSmsTemplates(smsTemplates: CreateSmsTemplateDto[], moduleMetadata: CreateModuleMetadataDto) {
354
354
  if (!smsTemplates) {
355
355
  return;
356
356
  }
@@ -360,23 +360,26 @@ export class ModuleMetadataSeederService {
360
360
  this.logger.log(`Found ${smsTemplate.name} sms template`);
361
361
 
362
362
  // We need to load the actual template contents.
363
- if (smsTemplate.body) {
364
- // const smsTemplateFilePath = path.join(process.cwd(), smsTemplate.body);
365
- // smsTemplate.body = fs.readFileSync(smsTemplateFilePath, 'utf-8').toString()
366
-
363
+ if (moduleMetadata.name === 'solid-core') {
367
364
  const modulePath = path.dirname(require.resolve('@solidstarters/solid-core'));
368
-
369
- // Resolve the `src` folder
370
365
  const seedDataPath = path.join(modulePath, '../src/seeders/seed-data/sms-templates');
371
-
372
- // Example usage
373
366
  const filePath = path.join(seedDataPath, smsTemplate.body);
374
-
375
-
376
- smsTemplate.body = fs.readFileSync(filePath, 'utf-8').toString();
377
-
367
+ this.logger.log(`Seeding sms template from solid-core at path: ${filePath}`);
368
+ if (fs.existsSync(filePath)) {
369
+ smsTemplate.body = fs.readFileSync(filePath, 'utf-8').toString();
370
+ }
371
+ }
372
+ else {
373
+ // Check if file exists
374
+ const emailTemplateHandlebar = `module-metadata/${moduleMetadata.name}/sms-templates/${smsTemplate.body}`
375
+ const fullPath = path.join(process.cwd(), emailTemplateHandlebar);
376
+ this.logger.log(`Seeding custom sms template from consuming model at path: ${fullPath}`);
377
+ if (fs.existsSync(fullPath)) {
378
+ smsTemplate.body = fs.readFileSync(fullPath, 'utf-8').toString();
379
+ }
378
380
  }
379
381
 
382
+
380
383
  // Save to DB.
381
384
  await this.smsTemplateService.removeByName(smsTemplate.name);
382
385
  await this.smsTemplateService.create(smsTemplate);
@@ -47,7 +47,7 @@ export class SMTPEMailService implements IMail {
47
47
  cc?: string[],
48
48
  bcc?: string[],
49
49
  from?: string
50
- ): Promise<void> {
50
+ ) {
51
51
  // Load template and evaluate it.
52
52
  const emailTemplate = await this.emailTemplateService.findOneByName(templateName);
53
53
  if (!emailTemplate) {
@@ -63,7 +63,7 @@ export class SMTPEMailService implements IMail {
63
63
  const subject = subjectTemplate(templateParams);
64
64
 
65
65
  // Finally send the email.
66
- await this.sendEmail(to, subject, body, shouldQueueEmails, wrapperAttachments, attachments, parentEntity, parentEntityId, cc, bcc, from);
66
+ return await this.sendEmail(to, subject, body, shouldQueueEmails, wrapperAttachments, attachments, parentEntity, parentEntityId, cc, bcc, from);
67
67
  }
68
68
 
69
69
  async sendEmail(
@@ -78,7 +78,7 @@ export class SMTPEMailService implements IMail {
78
78
  cc?: string[],
79
79
  bcc?: string[],
80
80
  from?: string
81
- ): Promise<void> {
81
+ ) {
82
82
  const message = {
83
83
  payload: {
84
84
  from: from || this.commonConfiguration.smtpMail.from,
@@ -95,33 +95,34 @@ export class SMTPEMailService implements IMail {
95
95
 
96
96
  // Send using queue if the developer has explicitly invoked with true.
97
97
  if (shouldQueueEmails === true) {
98
- this.sendEmailAsynchronously(message);
98
+ return this.sendEmailAsynchronously(message);
99
99
  }
100
100
  // If developer has not, however system config mandates that we send using queue, still we send.
101
101
  else if (shouldQueueEmails == false && this.commonConfiguration.shouldQueueEmails === true) {
102
- this.sendEmailAsynchronously(message);
102
+ return this.sendEmailAsynchronously(message);
103
103
  }
104
- // Else we send synch
104
+ // Else we send synchronously
105
105
  else {
106
- await this.sendEmailSynchronously(message);
106
+ return await this.sendEmailSynchronously(message);
107
107
  }
108
108
  }
109
109
 
110
110
  async sendEmailAsynchronously(message) {
111
111
  const { to, subject, body } = message.payload;
112
- // this.notificationPublisherService.publish(message);
113
- // this.emailPublisher.publish(message);
114
- // this.emailDbPublisher.publish(message);
115
-
116
- this.publisherFactory.publish(message, 'SmtpEmailQueuePublisher');
117
-
118
112
  this.logger.debug(`Queueing email to ${to} with subject ${subject} and body ${body}`);
113
+ return this.publisherFactory.publish(message, 'SmtpEmailQueuePublisher');
119
114
  }
120
115
 
121
- async sendEmailSynchronously(message: QueueMessage<any>): Promise<void> {
122
- const { from, to, subject, body, attachments, cc, bcc } = message.payload;
116
+ async sendEmailSynchronously(message: QueueMessage<any>) {
117
+ const { from, to, subject, body, attachments = [], cc, bcc } = message.payload;
123
118
 
124
- const attachmentsList = attachments.map((attachment: MailAttachment) => {
119
+ // if any of the required fields are missing, throw an error.
120
+ if (!from || !to || !subject || !body) {
121
+ this.logger.error(`Required fields are missing in the email message: ${JSON.stringify(message.payload)}`);
122
+ return;
123
+ }
124
+
125
+ const attachmentsList = attachments?.map((attachment: MailAttachment) => {
125
126
  const attachmentEntry = {
126
127
  filename: attachment.filename,
127
128
  contentType: attachment.contentType,
@@ -133,7 +134,7 @@ export class SMTPEMailService implements IMail {
133
134
  attachmentEntry['content'] = attachment.content;
134
135
  }
135
136
  return attachmentEntry;
136
- });
137
+ }) || [];
137
138
 
138
139
  // throw new Error('Random error....');
139
140
  const r = await this.transporter.sendMail({