@solidstarters/solid-core 1.2.146 → 1.2.149

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 (156) 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/controllers/ai-interaction.controller.d.ts +1 -1
  6. package/dist/controllers/ai-interaction.controller.js +1 -1
  7. package/dist/dtos/create-ai-interaction.dto.d.ts +3 -0
  8. package/dist/dtos/create-ai-interaction.dto.d.ts.map +1 -1
  9. package/dist/dtos/create-ai-interaction.dto.js +20 -1
  10. package/dist/dtos/create-ai-interaction.dto.js.map +1 -1
  11. package/dist/dtos/update-ai-interaction.dto.d.ts +3 -0
  12. package/dist/dtos/update-ai-interaction.dto.d.ts.map +1 -1
  13. package/dist/dtos/update-ai-interaction.dto.js +19 -1
  14. package/dist/dtos/update-ai-interaction.dto.js.map +1 -1
  15. package/dist/entities/ai-interaction.entity.d.ts +3 -0
  16. package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
  17. package/dist/entities/ai-interaction.entity.js +17 -1
  18. package/dist/entities/ai-interaction.entity.js.map +1 -1
  19. package/dist/helpers/environment.helper.d.ts +2 -0
  20. package/dist/helpers/environment.helper.d.ts.map +1 -0
  21. package/dist/helpers/environment.helper.js +11 -0
  22. package/dist/helpers/environment.helper.js.map +1 -0
  23. package/dist/index.d.ts +4 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +4 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/interfaces.d.ts +5 -5
  28. package/dist/interfaces.d.ts.map +1 -1
  29. package/dist/interfaces.js.map +1 -1
  30. package/dist/jobs/database/api-email-subscriber-database.service.d.ts +3 -1
  31. package/dist/jobs/database/api-email-subscriber-database.service.d.ts.map +1 -1
  32. package/dist/jobs/database/api-email-subscriber-database.service.js +6 -3
  33. package/dist/jobs/database/api-email-subscriber-database.service.js.map +1 -1
  34. package/dist/jobs/database/computed-field-evaluation-subscriber.service.d.ts +3 -1
  35. package/dist/jobs/database/computed-field-evaluation-subscriber.service.d.ts.map +1 -1
  36. package/dist/jobs/database/computed-field-evaluation-subscriber.service.js +6 -3
  37. package/dist/jobs/database/computed-field-evaluation-subscriber.service.js.map +1 -1
  38. package/dist/jobs/database/generate-code-subscriber-database.service.d.ts +3 -1
  39. package/dist/jobs/database/generate-code-subscriber-database.service.d.ts.map +1 -1
  40. package/dist/jobs/database/generate-code-subscriber-database.service.js +6 -3
  41. package/dist/jobs/database/generate-code-subscriber-database.service.js.map +1 -1
  42. package/dist/jobs/database/otp-subscriber-database.service.d.ts +3 -1
  43. package/dist/jobs/database/otp-subscriber-database.service.d.ts.map +1 -1
  44. package/dist/jobs/database/otp-subscriber-database.service.js +5 -2
  45. package/dist/jobs/database/otp-subscriber-database.service.js.map +1 -1
  46. package/dist/jobs/database/sms-subscriber-database.service.d.ts +4 -2
  47. package/dist/jobs/database/sms-subscriber-database.service.d.ts.map +1 -1
  48. package/dist/jobs/database/sms-subscriber-database.service.js +7 -4
  49. package/dist/jobs/database/sms-subscriber-database.service.js.map +1 -1
  50. package/dist/jobs/database/smtp-email-subscriber-database.service.d.ts +4 -2
  51. package/dist/jobs/database/smtp-email-subscriber-database.service.d.ts.map +1 -1
  52. package/dist/jobs/database/smtp-email-subscriber-database.service.js +6 -3
  53. package/dist/jobs/database/smtp-email-subscriber-database.service.js.map +1 -1
  54. package/dist/jobs/database/test-queue-subscriber-database.service.d.ts +3 -1
  55. package/dist/jobs/database/test-queue-subscriber-database.service.d.ts.map +1 -1
  56. package/dist/jobs/database/test-queue-subscriber-database.service.js +6 -3
  57. package/dist/jobs/database/test-queue-subscriber-database.service.js.map +1 -1
  58. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +3 -1
  59. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  60. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +7 -2
  61. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  62. package/dist/jobs/database/twilio-sms-publisher-database.service.d.ts +11 -0
  63. package/dist/jobs/database/twilio-sms-publisher-database.service.d.ts.map +1 -0
  64. package/dist/jobs/database/twilio-sms-publisher-database.service.js +39 -0
  65. package/dist/jobs/database/twilio-sms-publisher-database.service.js.map +1 -0
  66. package/dist/jobs/database/twilio-sms-queue-database-options.d.ts +8 -0
  67. package/dist/jobs/database/twilio-sms-queue-database-options.d.ts.map +1 -0
  68. package/dist/jobs/database/twilio-sms-queue-database-options.js +10 -0
  69. package/dist/jobs/database/twilio-sms-queue-database-options.js.map +1 -0
  70. package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts +17 -0
  71. package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts.map +1 -0
  72. package/dist/jobs/database/twilio-sms-subscriber-database.service.js +48 -0
  73. package/dist/jobs/database/twilio-sms-subscriber-database.service.js.map +1 -0
  74. package/dist/jobs/database/whatsapp-subscriber-database.service.d.ts +3 -1
  75. package/dist/jobs/database/whatsapp-subscriber-database.service.d.ts.map +1 -1
  76. package/dist/jobs/database/whatsapp-subscriber-database.service.js +6 -3
  77. package/dist/jobs/database/whatsapp-subscriber-database.service.js.map +1 -1
  78. package/dist/jobs/sms-subscriber.service.d.ts +1 -1
  79. package/dist/jobs/sms-subscriber.service.js +1 -1
  80. package/dist/jobs/sms-subscriber.service.js.map +1 -1
  81. package/dist/jobs/smtp-email-subscriber.service.d.ts +1 -1
  82. package/dist/seeders/module-metadata-seeder.service.d.ts +1 -1
  83. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  84. package/dist/seeders/module-metadata-seeder.service.js +15 -4
  85. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  86. package/dist/seeders/seed-data/solid-core-metadata.json +83 -3
  87. package/dist/services/ai-interaction.service.d.ts +1 -1
  88. package/dist/services/ai-interaction.service.d.ts.map +1 -1
  89. package/dist/services/ai-interaction.service.js +5 -1
  90. package/dist/services/ai-interaction.service.js.map +1 -1
  91. package/dist/services/mail/smtp-email.service.d.ts +4 -4
  92. package/dist/services/mail/smtp-email.service.d.ts.map +1 -1
  93. package/dist/services/mail/smtp-email.service.js +12 -8
  94. package/dist/services/mail/smtp-email.service.js.map +1 -1
  95. package/dist/services/mq-message.service.d.ts +9 -0
  96. package/dist/services/mq-message.service.d.ts.map +1 -1
  97. package/dist/services/mq-message.service.js +61 -0
  98. package/dist/services/mq-message.service.js.map +1 -1
  99. package/dist/services/poller.service.d.ts +24 -0
  100. package/dist/services/poller.service.d.ts.map +1 -0
  101. package/dist/services/poller.service.js +131 -0
  102. package/dist/services/poller.service.js.map +1 -0
  103. package/dist/services/queues/database-subscriber.service.d.ts +4 -1
  104. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  105. package/dist/services/queues/database-subscriber.service.js +13 -13
  106. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  107. package/dist/services/sms/Msg91BaseSMSService.d.ts +2 -2
  108. package/dist/services/sms/Msg91BaseSMSService.d.ts.map +1 -1
  109. package/dist/services/sms/Msg91BaseSMSService.js.map +1 -1
  110. package/dist/services/sms/Msg91OTPService.d.ts +1 -1
  111. package/dist/services/sms/Msg91OTPService.d.ts.map +1 -1
  112. package/dist/services/sms/Msg91OTPService.js.map +1 -1
  113. package/dist/services/sms/Msg91SMSService.d.ts +1 -1
  114. package/dist/services/sms/Msg91SMSService.d.ts.map +1 -1
  115. package/dist/services/sms/Msg91SMSService.js.map +1 -1
  116. package/dist/services/sms/TwilioSMSService.d.ts +18 -0
  117. package/dist/services/sms/TwilioSMSService.d.ts.map +1 -0
  118. package/dist/services/sms/TwilioSMSService.js +115 -0
  119. package/dist/services/sms/TwilioSMSService.js.map +1 -0
  120. package/dist/solid-core.module.d.ts.map +1 -1
  121. package/dist/solid-core.module.js +11 -0
  122. package/dist/solid-core.module.js.map +1 -1
  123. package/dist/tsconfig.tsbuildinfo +1 -1
  124. package/package.json +4 -3
  125. package/src/config/common.config.ts +5 -0
  126. package/src/dtos/create-ai-interaction.dto.ts +16 -5
  127. package/src/dtos/update-ai-interaction.dto.ts +16 -5
  128. package/src/entities/ai-interaction.entity.ts +11 -3
  129. package/src/helpers/environment.helper.ts +7 -0
  130. package/src/index.ts +5 -0
  131. package/src/interfaces.ts +5 -5
  132. package/src/jobs/database/api-email-subscriber-database.service.ts +3 -1
  133. package/src/jobs/database/computed-field-evaluation-subscriber.service.ts +4 -2
  134. package/src/jobs/database/generate-code-subscriber-database.service.ts +3 -1
  135. package/src/jobs/database/otp-subscriber-database.service.ts +3 -1
  136. package/src/jobs/database/sms-subscriber-database.service.ts +4 -2
  137. package/src/jobs/database/smtp-email-subscriber-database.service.ts +3 -1
  138. package/src/jobs/database/test-queue-subscriber-database.service.ts +3 -1
  139. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +5 -1
  140. package/src/jobs/database/twilio-sms-publisher-database.service.ts +23 -0
  141. package/src/jobs/database/twilio-sms-queue-database-options.ts +9 -0
  142. package/src/jobs/database/twilio-sms-subscriber-database.service.ts +32 -0
  143. package/src/jobs/database/whatsapp-subscriber-database.service.ts +3 -1
  144. package/src/jobs/sms-subscriber.service.ts +1 -1
  145. package/src/seeders/module-metadata-seeder.service.ts +18 -15
  146. package/src/seeders/seed-data/solid-core-metadata.json +83 -3
  147. package/src/services/ai-interaction.service.ts +8 -3
  148. package/src/services/mail/smtp-email.service.ts +18 -17
  149. package/src/services/mq-message.service.ts +116 -0
  150. package/src/services/poller.service.ts +163 -0
  151. package/src/services/queues/database-subscriber.service.ts +39 -12
  152. package/src/services/sms/Msg91BaseSMSService.ts +2 -2
  153. package/src/services/sms/Msg91OTPService.ts +1 -1
  154. package/src/services/sms/Msg91SMSService.ts +1 -1
  155. package/src/services/sms/TwilioSMSService.ts +118 -0
  156. package/src/solid-core.module.ts +14 -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.149",
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,
@@ -48,9 +48,20 @@ export class CreateAiInteractionDto {
48
48
  @IsJSON()
49
49
  @ApiProperty()
50
50
  metadata: any;
51
-
52
- @IsOptional()
53
- @IsBoolean()
54
- @ApiProperty()
55
- isApplied: boolean = false;
51
+ @IsOptional()
52
+ @IsBoolean()
53
+ @ApiProperty()
54
+ isApplied: boolean = false;
55
+ @IsOptional()
56
+ @IsInt()
57
+ @ApiProperty()
58
+ parentInteractionId: number;
59
+ @IsString()
60
+ @IsOptional()
61
+ @ApiProperty()
62
+ parentInteractionUserKey: string;
63
+ @IsOptional()
64
+ @IsBoolean()
65
+ @ApiProperty()
66
+ isAutoApply: boolean = false;
56
67
  }
@@ -52,9 +52,20 @@ export class UpdateAiInteractionDto {
52
52
  @IsJSON()
53
53
  @ApiProperty()
54
54
  metadata: any;
55
-
56
- @IsOptional()
57
- @IsBoolean()
58
- @ApiProperty()
59
- isApplied: boolean;
55
+ @IsOptional()
56
+ @IsBoolean()
57
+ @ApiProperty()
58
+ isApplied: boolean;
59
+ @IsOptional()
60
+ @IsInt()
61
+ @ApiProperty()
62
+ parentInteractionId: number;
63
+ @IsString()
64
+ @IsOptional()
65
+ @ApiProperty()
66
+ parentInteractionUserKey: string;
67
+ @IsOptional()
68
+ @IsBoolean()
69
+ @ApiProperty()
70
+ isAutoApply: boolean;
60
71
  }
@@ -28,7 +28,15 @@ export class AiInteraction extends CommonEntity {
28
28
  responseTimeMs: number;
29
29
  @Column({ type: "jsonb", nullable: true })
30
30
  metadata: any;
31
-
32
- @Column({ type: "boolean", nullable: true, default: false })
33
- isApplied: boolean = false;
31
+ @Column({ type: "boolean", nullable: true, default: false })
32
+ isApplied: boolean = false;
33
+ @Index()
34
+ @ManyToOne(() => AiInteraction, { onDelete: "SET NULL", nullable: true })
35
+ @JoinColumn()
36
+ parentInteraction: AiInteraction;
37
+ @Index({ unique: true })
38
+ @Column({ type: "varchar" })
39
+ externalId: string;
40
+ @Column({ type: "boolean", nullable: true, default: false })
41
+ isAutoApply: boolean = false;
34
42
  }
@@ -0,0 +1,7 @@
1
+ export function parseBooleanEnv(key: string, defaultValue: boolean = false): boolean {
2
+ const value = process.env[key];
3
+ if (value === undefined) {
4
+ return defaultValue;
5
+ }
6
+ return value.toLowerCase() === 'true';
7
+ }
package/src/index.ts CHANGED
@@ -166,6 +166,8 @@ export * from './helpers/field-crud-managers/SelectionDynamicFieldCrudManager' /
166
166
  export * from './helpers/field-crud-managers/SelectionStaticFieldCrudManager' //rename
167
167
  export * from './helpers/field-crud-managers/ShortTextFieldCrudManager' //rename
168
168
  export * from './helpers/field-crud-managers/UUIDFieldCrudManager' //rename
169
+ export * from './helpers/environment.helper'
170
+
169
171
  export * from './services/crud.service'
170
172
  export * from './interceptors/logging.interceptor'
171
173
  export * from './interceptors/wrap-response.interceptor'
@@ -243,6 +245,8 @@ export * from './services/short-url/tiny-url.service'
243
245
  export * from './services/sms/Msg91BaseSMSService' //rename
244
246
  export * from './services/sms/Msg91OTPService' //rename
245
247
  export * from './services/sms/Msg91SMSService' //rename
248
+ export * from './services/sms/TwilioSMSService' //rename
249
+ export * from './services/poller.service'
246
250
  export * from './services/sms-template.service'
247
251
  export * from './services/solid-introspect.service'
248
252
  export * from './services/user.service'
@@ -262,6 +266,7 @@ export * from './services/csv.service'
262
266
  export * from './services/queues/publisher-factory.service'
263
267
  export * from './services/queues/database-publisher.service'
264
268
  export * from './services/queues/database-subscriber.service'
269
+ export * from './services/ai-interaction.service'
265
270
 
266
271
  // Factories
267
272
  export * from './factories/mail.factory'
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 {
@@ -56,6 +58,7 @@ export class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<Trigg
56
58
  await this.aiInteractionService.create({
57
59
  userId: aiInteraction.user.id,
58
60
  threadId: aiInteraction.threadId,
61
+ parentInteractionId: aiInteraction.id,
59
62
  role: 'gen-ai',
60
63
  message: '-',
61
64
  contentType: aiResponse.content_type,
@@ -75,6 +78,7 @@ export class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<Trigg
75
78
  await this.aiInteractionService.create({
76
79
  userId: aiInteraction.user.id,
77
80
  threadId: aiInteraction.threadId,
81
+ parentInteractionId: aiInteraction.id,
78
82
  role: 'gen-ai',
79
83
  message: nestedResponse,
80
84
  contentType: aiResponse.content_type,
@@ -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);