rez_core 2.2.258 → 2.2.259

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 (233) hide show
  1. package/dist/app.module.js +2 -2
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/module/integration/controller/calender-event.controller.js.map +1 -0
  4. package/dist/module/integration/controller/integration.controller.d.ts +113 -0
  5. package/dist/module/{communication/controller/communication.controller.js → integration/controller/integration.controller.js} +197 -75
  6. package/dist/module/integration/controller/integration.controller.js.map +1 -0
  7. package/dist/module/{communication → integration}/controller/wrapper.controller.d.ts +1 -1
  8. package/dist/module/integration/controller/wrapper.controller.js.map +1 -0
  9. package/dist/module/{communication → integration}/dto/create-config.dto.d.ts +48 -4
  10. package/dist/module/{communication → integration}/dto/create-config.dto.js +96 -18
  11. package/dist/module/integration/dto/create-config.dto.js.map +1 -0
  12. package/dist/module/{communication/entity/communication-config.entity.d.ts → integration/entity/integration-config.entity.d.ts} +11 -1
  13. package/dist/module/integration/entity/integration-config.entity.js +78 -0
  14. package/dist/module/integration/entity/integration-config.entity.js.map +1 -0
  15. package/dist/module/{communication → integration}/entity/integration-source.entity.d.ts +1 -1
  16. package/dist/module/{communication → integration}/entity/integration-source.entity.js +8 -8
  17. package/dist/module/integration/entity/integration-source.entity.js.map +1 -0
  18. package/dist/module/integration/entity/user-integration.entity.d.ts +23 -0
  19. package/dist/module/integration/entity/user-integration.entity.js +70 -0
  20. package/dist/module/integration/entity/user-integration.entity.js.map +1 -0
  21. package/dist/module/integration/examples/usage.example.d.ts +16 -0
  22. package/dist/module/integration/examples/usage.example.js +217 -0
  23. package/dist/module/integration/examples/usage.example.js.map +1 -0
  24. package/dist/module/{communication → integration}/factories/base.factory.d.ts +2 -2
  25. package/dist/module/integration/factories/base.factory.js.map +1 -0
  26. package/dist/module/{communication → integration}/factories/email.factory.d.ts +3 -7
  27. package/dist/module/{communication → integration}/factories/email.factory.js +1 -13
  28. package/dist/module/integration/factories/email.factory.js.map +1 -0
  29. package/dist/module/{communication/factories/communication.factory.d.ts → integration/factories/integration.factory.d.ts} +4 -4
  30. package/dist/module/{communication/factories/communication.factory.js → integration/factories/integration.factory.js} +26 -26
  31. package/dist/module/integration/factories/integration.factory.js.map +1 -0
  32. package/dist/module/integration/factories/sms.factory.d.ts +9 -0
  33. package/dist/module/integration/factories/sms.factory.js +26 -0
  34. package/dist/module/integration/factories/sms.factory.js.map +1 -0
  35. package/dist/module/{communication → integration}/factories/telephone.factory.d.ts +3 -5
  36. package/dist/module/{communication → integration}/factories/telephone.factory.js +11 -17
  37. package/dist/module/integration/factories/telephone.factory.js.map +1 -0
  38. package/dist/module/{communication → integration}/factories/whatsapp.factory.d.ts +2 -2
  39. package/dist/module/integration/factories/whatsapp.factory.js.map +1 -0
  40. package/dist/module/integration/integration.module.d.ts +2 -0
  41. package/dist/module/{communication/communication.module.js → integration/integration.module.js} +22 -42
  42. package/dist/module/integration/integration.module.js.map +1 -0
  43. package/dist/module/integration/service/calendar-event.service.js.map +1 -0
  44. package/dist/module/{communication/service/communication-queue.service.d.ts → integration/service/integration-queue.service.d.ts} +1 -1
  45. package/dist/module/{communication/service/communication-queue.service.js → integration/service/integration-queue.service.js} +8 -8
  46. package/dist/module/integration/service/integration-queue.service.js.map +1 -0
  47. package/dist/module/integration/service/integration.service.d.ts +155 -0
  48. package/dist/module/{communication/service/communication.service.js → integration/service/integration.service.js} +391 -307
  49. package/dist/module/integration/service/integration.service.js.map +1 -0
  50. package/dist/module/{communication → integration}/service/oauth.service.js +1 -1
  51. package/dist/module/integration/service/oauth.service.js.map +1 -0
  52. package/dist/module/{communication → integration}/service/wrapper.service.d.ts +4 -4
  53. package/dist/module/{communication → integration}/service/wrapper.service.js +25 -26
  54. package/dist/module/integration/service/wrapper.service.js.map +1 -0
  55. package/dist/module/{communication → integration}/strategies/email/gmail-api.strategy.d.ts +3 -3
  56. package/dist/module/{communication → integration}/strategies/email/gmail-api.strategy.js +2 -6
  57. package/dist/module/integration/strategies/email/gmail-api.strategy.js.map +1 -0
  58. package/dist/module/integration/strategies/email/outlook-api.strategy.d.ts +5 -0
  59. package/dist/module/integration/strategies/email/outlook-api.strategy.js.map +1 -0
  60. package/dist/module/integration/strategies/email/outlook.strategy.d.ts +5 -0
  61. package/dist/module/integration/strategies/email/outlook.strategy.js.map +1 -0
  62. package/dist/module/{communication → integration}/strategies/email/sendgrid-api.strategy.d.ts +3 -3
  63. package/dist/module/integration/strategies/email/sendgrid-api.strategy.js.map +1 -0
  64. package/dist/module/{communication/strategies/communication.strategy.d.ts → integration/strategies/integration.strategy.d.ts} +4 -3
  65. package/dist/module/{communication/strategies/communication.strategy.js → integration/strategies/integration.strategy.js} +1 -1
  66. package/dist/module/integration/strategies/integration.strategy.js.map +1 -0
  67. package/dist/module/integration/strategies/telephone/ozonetel-voice.strategy.d.ts +17 -0
  68. package/dist/module/{communication → integration}/strategies/telephone/ozonetel-voice.strategy.js +13 -5
  69. package/dist/module/integration/strategies/telephone/ozonetel-voice.strategy.js.map +1 -0
  70. package/dist/module/{communication → integration}/strategies/telephone/tubelight-voice.strategy.d.ts +6 -4
  71. package/dist/module/{communication → integration}/strategies/telephone/tubelight-voice.strategy.js +3 -7
  72. package/dist/module/integration/strategies/telephone/tubelight-voice.strategy.js.map +1 -0
  73. package/dist/module/{communication → integration}/strategies/whatsapp/whatsapp-cloud.strategy.d.ts +3 -3
  74. package/dist/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.js.map +1 -0
  75. package/dist/module/integration/strategies/whatsapp/whatsapp.strategy.d.ts +5 -0
  76. package/dist/module/integration/strategies/whatsapp/whatsapp.strategy.js.map +1 -0
  77. package/dist/module/meta/entity/entity-master.entity.d.ts +1 -1
  78. package/dist/module/meta/entity/entity-master.entity.js +2 -2
  79. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  80. package/dist/module/meta/service/entity-dynamic.service.js +47 -27
  81. package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
  82. package/dist/module/user/controller/login.controller.d.ts +3 -3
  83. package/dist/module/user/controller/login.controller.js +5 -5
  84. package/dist/module/user/controller/login.controller.js.map +1 -1
  85. package/dist/module/user/user.module.js +2 -2
  86. package/dist/module/user/user.module.js.map +1 -1
  87. package/dist/module/workflow-automation/entity/workflow-automation-action.entity.d.ts +1 -0
  88. package/dist/module/workflow-automation/entity/workflow-automation-action.entity.js +4 -0
  89. package/dist/module/workflow-automation/entity/workflow-automation-action.entity.js.map +1 -1
  90. package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +2 -1
  91. package/dist/module/workflow-automation/service/workflow-automation.service.js +8 -4
  92. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  93. package/dist/tsconfig.build.tsbuildinfo +1 -1
  94. package/docs/modules/event-driven-integration-design.md +92 -0
  95. package/docs/modules/integration.md +197 -0
  96. package/package.json +1 -1
  97. package/src/app.module.ts +2 -2
  98. package/src/module/integration/controller/integration.controller.ts +411 -0
  99. package/src/module/{communication → integration}/dto/create-config.dto.ts +110 -18
  100. package/src/module/{communication/entity/communication-config.entity.ts → integration/entity/integration-config.entity.ts} +33 -6
  101. package/src/module/{communication → integration}/entity/integration-source.entity.ts +1 -1
  102. package/src/module/integration/entity/user-integration.entity.ts +71 -0
  103. package/src/module/integration/examples/usage.example.ts +338 -0
  104. package/src/module/{communication → integration}/factories/base.factory.ts +2 -2
  105. package/src/module/{communication → integration}/factories/email.factory.ts +2 -12
  106. package/src/module/{communication/factories/communication.factory.ts → integration/factories/integration.factory.ts} +18 -18
  107. package/src/module/integration/factories/sms.factory.ts +19 -0
  108. package/src/module/integration/factories/telephone.factory.ts +41 -0
  109. package/src/module/{communication → integration}/factories/whatsapp.factory.ts +2 -2
  110. package/src/module/integration/integration.module.ts +86 -0
  111. package/src/module/{communication/service/communication-queue.service.ts → integration/service/integration-queue.service.ts} +2 -2
  112. package/src/module/{communication/service/communication.service.ts → integration/service/integration.service.ts} +598 -448
  113. package/src/module/{communication → integration}/service/oauth.service.ts +1 -1
  114. package/src/module/{communication → integration}/service/wrapper.service.ts +24 -25
  115. package/src/module/{communication → integration}/strategies/email/gmail-api.strategy.ts +6 -18
  116. package/src/module/{communication → integration}/strategies/email/outlook-api.strategy.ts +5 -5
  117. package/src/module/{communication → integration}/strategies/email/outlook.strategy.ts +5 -5
  118. package/src/module/{communication → integration}/strategies/email/sendgrid-api.strategy.ts +5 -5
  119. package/src/module/{communication/strategies/communication.strategy.ts → integration/strategies/integration.strategy.ts} +7 -3
  120. package/src/module/{communication → integration}/strategies/telephone/ozonetel-voice.strategy.ts +40 -12
  121. package/src/module/{communication → integration}/strategies/telephone/tubelight-voice.strategy.ts +24 -17
  122. package/src/module/{communication → integration}/strategies/whatsapp/whatsapp-cloud.strategy.ts +5 -5
  123. package/src/module/{communication → integration}/strategies/whatsapp/whatsapp.strategy.ts +5 -5
  124. package/src/module/meta/entity/entity-master.entity.ts +2 -2
  125. package/src/module/meta/service/entity-dynamic.service.ts +55 -28
  126. package/src/module/user/controller/login.controller.ts +3 -3
  127. package/src/module/user/user.module.ts +2 -2
  128. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +3 -0
  129. package/src/module/workflow-automation/service/workflow-automation.service.ts +8 -4
  130. package/src/resources/dev.properties.yaml +3 -3
  131. package/.vscode/extensions.json +0 -5
  132. package/dist/module/communication/communication.module.d.ts +0 -2
  133. package/dist/module/communication/communication.module.js.map +0 -1
  134. package/dist/module/communication/controller/calender-event.controller.js.map +0 -1
  135. package/dist/module/communication/controller/communication.controller.d.ts +0 -99
  136. package/dist/module/communication/controller/communication.controller.js.map +0 -1
  137. package/dist/module/communication/controller/wrapper.controller.js.map +0 -1
  138. package/dist/module/communication/dto/create-config.dto.js.map +0 -1
  139. package/dist/module/communication/entity/communication-config.entity.js +0 -45
  140. package/dist/module/communication/entity/communication-config.entity.js.map +0 -1
  141. package/dist/module/communication/entity/communication-hub.entity.d.ts +0 -20
  142. package/dist/module/communication/entity/communication-hub.entity.js +0 -115
  143. package/dist/module/communication/entity/communication-hub.entity.js.map +0 -1
  144. package/dist/module/communication/entity/integration-source.entity.js.map +0 -1
  145. package/dist/module/communication/examples/usage.example.d.ts +0 -11
  146. package/dist/module/communication/examples/usage.example.js +0 -89
  147. package/dist/module/communication/examples/usage.example.js.map +0 -1
  148. package/dist/module/communication/factories/base.factory.js.map +0 -1
  149. package/dist/module/communication/factories/communication.factory.js.map +0 -1
  150. package/dist/module/communication/factories/email.factory.js.map +0 -1
  151. package/dist/module/communication/factories/sms.factory.d.ts +0 -15
  152. package/dist/module/communication/factories/sms.factory.js +0 -49
  153. package/dist/module/communication/factories/sms.factory.js.map +0 -1
  154. package/dist/module/communication/factories/telephone.factory.js.map +0 -1
  155. package/dist/module/communication/factories/whatsapp.factory.js.map +0 -1
  156. package/dist/module/communication/service/calendar-event.service.js.map +0 -1
  157. package/dist/module/communication/service/communication-queue.service.js.map +0 -1
  158. package/dist/module/communication/service/communication.service.d.ts +0 -155
  159. package/dist/module/communication/service/communication.service.js.map +0 -1
  160. package/dist/module/communication/service/oauth.service.js.map +0 -1
  161. package/dist/module/communication/service/wrapper.service.js.map +0 -1
  162. package/dist/module/communication/strategies/communication.strategy.js.map +0 -1
  163. package/dist/module/communication/strategies/email/gmail-api.strategy.js.map +0 -1
  164. package/dist/module/communication/strategies/email/gmail-smtp-v2.strategy.d.ts +0 -5
  165. package/dist/module/communication/strategies/email/gmail-smtp-v2.strategy.js +0 -60
  166. package/dist/module/communication/strategies/email/gmail-smtp-v2.strategy.js.map +0 -1
  167. package/dist/module/communication/strategies/email/gmail-smtp.strategy.d.ts +0 -5
  168. package/dist/module/communication/strategies/email/gmail-smtp.strategy.js +0 -49
  169. package/dist/module/communication/strategies/email/gmail-smtp.strategy.js.map +0 -1
  170. package/dist/module/communication/strategies/email/outlook-api.strategy.d.ts +0 -5
  171. package/dist/module/communication/strategies/email/outlook-api.strategy.js.map +0 -1
  172. package/dist/module/communication/strategies/email/outlook-smtp.strategy.d.ts +0 -5
  173. package/dist/module/communication/strategies/email/outlook-smtp.strategy.js +0 -65
  174. package/dist/module/communication/strategies/email/outlook-smtp.strategy.js.map +0 -1
  175. package/dist/module/communication/strategies/email/outlook.strategy.d.ts +0 -5
  176. package/dist/module/communication/strategies/email/outlook.strategy.js.map +0 -1
  177. package/dist/module/communication/strategies/email/sendgrid-api.strategy.js.map +0 -1
  178. package/dist/module/communication/strategies/sms/knowlarity-multi.strategy.d.ts +0 -6
  179. package/dist/module/communication/strategies/sms/knowlarity-multi.strategy.js +0 -121
  180. package/dist/module/communication/strategies/sms/knowlarity-multi.strategy.js.map +0 -1
  181. package/dist/module/communication/strategies/sms/knowlarity.strategy.d.ts +0 -5
  182. package/dist/module/communication/strategies/sms/knowlarity.strategy.js +0 -44
  183. package/dist/module/communication/strategies/sms/knowlarity.strategy.js.map +0 -1
  184. package/dist/module/communication/strategies/sms/twilio-v2.strategy.d.ts +0 -5
  185. package/dist/module/communication/strategies/sms/twilio-v2.strategy.js +0 -48
  186. package/dist/module/communication/strategies/sms/twilio-v2.strategy.js.map +0 -1
  187. package/dist/module/communication/strategies/sms/twilio.strategy.d.ts +0 -5
  188. package/dist/module/communication/strategies/sms/twilio.strategy.js +0 -44
  189. package/dist/module/communication/strategies/sms/twilio.strategy.js.map +0 -1
  190. package/dist/module/communication/strategies/telephone/knowlarity-multi.strategy.d.ts +0 -6
  191. package/dist/module/communication/strategies/telephone/knowlarity-multi.strategy.js +0 -121
  192. package/dist/module/communication/strategies/telephone/knowlarity-multi.strategy.js.map +0 -1
  193. package/dist/module/communication/strategies/telephone/knowlarity-voice.strategy.d.ts +0 -5
  194. package/dist/module/communication/strategies/telephone/knowlarity-voice.strategy.js +0 -44
  195. package/dist/module/communication/strategies/telephone/knowlarity-voice.strategy.js.map +0 -1
  196. package/dist/module/communication/strategies/telephone/ozonetel-voice.strategy.d.ts +0 -15
  197. package/dist/module/communication/strategies/telephone/ozonetel-voice.strategy.js.map +0 -1
  198. package/dist/module/communication/strategies/telephone/tubelight-voice.strategy.js.map +0 -1
  199. package/dist/module/communication/strategies/whatsapp/whatsapp-cloud.strategy.js.map +0 -1
  200. package/dist/module/communication/strategies/whatsapp/whatsapp.strategy.d.ts +0 -5
  201. package/dist/module/communication/strategies/whatsapp/whatsapp.strategy.js.map +0 -1
  202. package/docs/modules/communication.md +0 -177
  203. package/src/module/communication/communication.module.ts +0 -106
  204. package/src/module/communication/controller/communication.controller.ts +0 -293
  205. package/src/module/communication/entity/communication-hub.entity.ts +0 -103
  206. package/src/module/communication/examples/usage.example.ts +0 -170
  207. package/src/module/communication/factories/sms.factory.ts +0 -44
  208. package/src/module/communication/factories/telephone.factory.ts +0 -49
  209. package/src/module/communication/strategies/email/gmail-smtp-v2.strategy.ts +0 -68
  210. package/src/module/communication/strategies/email/gmail-smtp.strategy.ts +0 -51
  211. package/src/module/communication/strategies/email/outlook-smtp.strategy.ts +0 -73
  212. package/src/module/communication/strategies/sms/knowlarity-multi.strategy.ts +0 -158
  213. package/src/module/communication/strategies/sms/knowlarity.strategy.ts +0 -44
  214. package/src/module/communication/strategies/sms/twilio-v2.strategy.ts +0 -47
  215. package/src/module/communication/strategies/sms/twilio.strategy.ts +0 -44
  216. package/src/module/communication/strategies/telephone/knowlarity-multi.strategy.ts +0 -158
  217. package/src/module/communication/strategies/telephone/knowlarity-voice.strategy.ts +0 -44
  218. /package/dist/module/{communication → integration}/controller/calender-event.controller.d.ts +0 -0
  219. /package/dist/module/{communication → integration}/controller/calender-event.controller.js +0 -0
  220. /package/dist/module/{communication → integration}/controller/wrapper.controller.js +0 -0
  221. /package/dist/module/{communication → integration}/factories/base.factory.js +0 -0
  222. /package/dist/module/{communication → integration}/factories/whatsapp.factory.js +0 -0
  223. /package/dist/module/{communication → integration}/service/calendar-event.service.d.ts +0 -0
  224. /package/dist/module/{communication → integration}/service/calendar-event.service.js +0 -0
  225. /package/dist/module/{communication → integration}/service/oauth.service.d.ts +0 -0
  226. /package/dist/module/{communication → integration}/strategies/email/outlook-api.strategy.js +0 -0
  227. /package/dist/module/{communication → integration}/strategies/email/outlook.strategy.js +0 -0
  228. /package/dist/module/{communication → integration}/strategies/email/sendgrid-api.strategy.js +0 -0
  229. /package/dist/module/{communication → integration}/strategies/whatsapp/whatsapp-cloud.strategy.js +0 -0
  230. /package/dist/module/{communication → integration}/strategies/whatsapp/whatsapp.strategy.js +0 -0
  231. /package/src/module/{communication → integration}/controller/calender-event.controller.ts +0 -0
  232. /package/src/module/{communication → integration}/controller/wrapper.controller.ts +0 -0
  233. /package/src/module/{communication → integration}/service/calendar-event.service.ts +0 -0
@@ -8,7 +8,7 @@ export class OAuthService {
8
8
  process.env.GMAIL_CLIENT_ID,
9
9
  process.env.GMAIL_CLIENT_SECRET,
10
10
  process.env.GMAIL_REDIRECT_URI ||
11
- 'http://localhost:3000/api/communication/oauth/callback/gmail',
11
+ 'http://localhost:3000/api/integration/oauth/callback/gmail',
12
12
  );
13
13
 
14
14
  private readonly outlookScopes = [
@@ -1,9 +1,9 @@
1
1
  import { Injectable, Logger } from '@nestjs/common';
2
2
  import { DataSource } from 'typeorm';
3
3
  import {
4
- CommunicationService,
4
+ IntegrationService,
5
5
  GenericMessageDto,
6
- } from './communication.service';
6
+ } from './integration.service';
7
7
  import { GoogleService } from './calendar-event.service';
8
8
  import { IcsMeetingService } from 'src/module/ics/service/ics.service';
9
9
 
@@ -13,7 +13,7 @@ export class WrapperService {
13
13
 
14
14
  constructor(
15
15
  private readonly datasource: DataSource,
16
- private readonly communicationService: CommunicationService,
16
+ private readonly integrationService: IntegrationService,
17
17
  private readonly googleService: GoogleService,
18
18
  private readonly icsService: IcsMeetingService,
19
19
  ) {}
@@ -34,12 +34,11 @@ export class WrapperService {
34
34
  `Fetching configs for level_id=${level_id}, level_type=${level_type}`,
35
35
  );
36
36
  const configs = await this.datasource.query(
37
- `SELECT *
38
- FROM cr_communication_hub
37
+ `SELECT * FROM cr_integration_config
39
38
  WHERE level_id = ?
40
39
  AND level_type = ?
41
40
  AND status = 1
42
- AND communication_config_type = 'EMAIL'`,
41
+ AND integration_type = 'EMAIL'`,
43
42
  [level_id, level_type],
44
43
  );
45
44
  this.logger.debug(`Configs found: ${JSON.stringify(configs)}`);
@@ -74,6 +73,7 @@ export class WrapperService {
74
73
  payloadSendMail = {
75
74
  levelId: level_id,
76
75
  levelType: level_type,
76
+ app_code: 'DEFAULT', // Legacy wrapper default
77
77
  to: payload.to,
78
78
  message: payload.message,
79
79
  subject: payload.subject,
@@ -90,10 +90,10 @@ export class WrapperService {
90
90
  `No user-level configs found. Falling back to ORG-level`,
91
91
  );
92
92
  const fallbackConfigs = await this.datasource.query(
93
- `SELECT *
94
- FROM cr_communication_hub
93
+ `SELECT * FROM cr_integration_config
95
94
  WHERE level_type = 'ORG'
96
- AND communication_config_type = 'EMAIL'`,
95
+ AND integration_type = 'EMAIL'
96
+ AND status = 1`,
97
97
  );
98
98
  this.logger.debug(
99
99
  `ORG-level configs: ${JSON.stringify(fallbackConfigs)}`,
@@ -106,6 +106,7 @@ export class WrapperService {
106
106
  payloadSendMail = {
107
107
  levelId: 1,
108
108
  levelType: 'ORG',
109
+ app_code: 'DEFAULT', // Legacy wrapper default
109
110
  to: payload.to,
110
111
  message: payload.message,
111
112
  subject: payload.subject,
@@ -120,11 +121,11 @@ export class WrapperService {
120
121
  }
121
122
 
122
123
  this.logger.debug(
123
- `Final payload for CommunicationService: ${JSON.stringify(payloadSendMail)}`,
124
+ `Final payload for IntegrationService: ${JSON.stringify(payloadSendMail)}`,
124
125
  );
125
126
 
126
127
  const result =
127
- await this.communicationService.sendGenericMessage(payloadSendMail);
128
+ await this.integrationService.sendGenericMessage(payloadSendMail);
128
129
 
129
130
  this.logger.log(
130
131
  `sendMailWrapper SUCCESS. Result: ${JSON.stringify(result)}`,
@@ -182,21 +183,19 @@ export class WrapperService {
182
183
 
183
184
  // ---- Step 1: Check user-level configs ----
184
185
  const userConfigs = await this.datasource.query(
185
- `SELECT *
186
- FROM cr_communication_hub
186
+ `SELECT * FROM cr_integration_config
187
187
  WHERE level_id = ?
188
188
  AND level_type = ?
189
189
  AND status = 1
190
- AND communication_config_type = 'EMAIL'
191
- AND service = 'API'`,
190
+ AND integration_type = 'EMAIL'`,
192
191
  [level_id, level_type],
193
192
  );
194
193
 
195
194
  this.logger.debug(`User configs found: ${JSON.stringify(userConfigs)}`);
196
195
 
197
196
  if (userConfigs && userConfigs.length > 0) {
198
- const provider = userConfigs[0]?.provider;
199
- const configId = userConfigs[0]?.config_id;
197
+ const provider = userConfigs[0]?.integration_provider;
198
+ const configId = userConfigs[0]?.id;
200
199
 
201
200
  if (provider === 'gmail') {
202
201
  this.logger.log(`Using Google Calendar (user-level)`);
@@ -232,20 +231,19 @@ export class WrapperService {
232
231
  this.logger.log(`No user-level config found, checking ORG-level...`);
233
232
 
234
233
  const orgConfigs = await this.datasource.query(
235
- `SELECT *
236
- FROM cr_communication_hub
234
+ `SELECT * FROM cr_integration_config
237
235
  WHERE level_id = 1
238
236
  AND level_type = 'ORG'
239
- AND communication_config_type = 'EMAIL'
240
- AND service = 'API'`,
237
+ AND integration_type = 'EMAIL'
238
+ AND status = 1`,
241
239
  [],
242
240
  );
243
241
 
244
242
  this.logger.debug(`ORG configs found: ${JSON.stringify(orgConfigs)}`);
245
243
 
246
244
  if (orgConfigs && orgConfigs.length > 0) {
247
- const provider = orgConfigs[0]?.provider;
248
- const configId = orgConfigs[0]?.config_id;
245
+ const provider = orgConfigs[0]?.integration_provider;
246
+ const configId = orgConfigs[0]?.id;
249
247
 
250
248
  if (provider === 'gmail') {
251
249
  this.logger.log(`Using Google Calendar (ORG-level)`);
@@ -302,7 +300,7 @@ export class WrapperService {
302
300
  this.logger.debug(`Fetching config JSON for configId=${configId}`);
303
301
  const configRes = await this.datasource.query(
304
302
  `SELECT config_json
305
- FROM cr_communication_config
303
+ FROM cr_integration_config
306
304
  WHERE id = ?`,
307
305
  [configId],
308
306
  );
@@ -344,6 +342,7 @@ export class WrapperService {
344
342
  const payloadSendMail: GenericMessageDto = {
345
343
  levelId,
346
344
  levelType,
345
+ app_code: 'DEFAULT', // Legacy wrapper default
347
346
  to: toList,
348
347
  message: payload.message,
349
348
  subject: payload.subject,
@@ -367,7 +366,7 @@ export class WrapperService {
367
366
  `Final payload for ICS send: ${JSON.stringify(payloadSendMail)}`,
368
367
  );
369
368
  const result =
370
- await this.communicationService.sendGenericMessage(payloadSendMail);
369
+ await this.integrationService.sendGenericMessage(payloadSendMail);
371
370
  this.logger.log(`ICS fallback mail send result: ${JSON.stringify(result)}`);
372
371
  return result;
373
372
  }
@@ -2,20 +2,20 @@ import { Injectable } from '@nestjs/common';
2
2
  import { ConfigService } from '@nestjs/config';
3
3
  import { google } from 'googleapis';
4
4
  import {
5
- CommunicationStrategy,
6
- CommunicationResult,
5
+ IntegrationStrategy,
6
+ IntegrationResult,
7
7
  EmailAttachment,
8
8
  EmailAttachmentValidator,
9
- } from '../communication.strategy';
9
+ } from '../integration.strategy';
10
10
 
11
11
  @Injectable()
12
- export class GmailApiStrategy implements CommunicationStrategy {
12
+ export class GmailApiStrategy implements IntegrationStrategy {
13
13
  constructor(private readonly configService: ConfigService) {}
14
14
  async sendMessage(
15
15
  to: string | string[],
16
16
  message: string,
17
17
  config: any,
18
- ): Promise<CommunicationResult> {
18
+ ): Promise<IntegrationResult> {
19
19
  try {
20
20
  if (!config || !config.refreshToken) {
21
21
  throw new Error(
@@ -27,7 +27,6 @@ export class GmailApiStrategy implements CommunicationStrategy {
27
27
 
28
28
  console.log('---- Using Google SDK Gmail API ----');
29
29
 
30
- // Validate attachments if present
31
30
  if (attachments && attachments.length > 0) {
32
31
  EmailAttachmentValidator.validate(
33
32
  attachments,
@@ -36,14 +35,10 @@ export class GmailApiStrategy implements CommunicationStrategy {
36
35
  );
37
36
  }
38
37
 
39
- // Setup OAuth2 client with Google SDK
40
38
  const oauth2Client = await this.setupOAuth2Client(config);
41
39
 
42
- // Initialize Gmail API
43
40
  const gmail = google.gmail({ version: 'v1', auth: oauth2Client });
44
41
 
45
- console.log('---- Gmail SDK client initialized, preparing email ----');
46
-
47
42
  const toRecipients = Array.isArray(to) ? to.join(', ') : to;
48
43
  const ccRecipients = cc
49
44
  ? Array.isArray(cc)
@@ -56,7 +51,6 @@ export class GmailApiStrategy implements CommunicationStrategy {
56
51
  : bcc
57
52
  : undefined;
58
53
 
59
- // Build email content with or without attachments
60
54
  const emailContent =
61
55
  attachments && attachments.length > 0
62
56
  ? this.buildMultipartEmail(
@@ -81,7 +75,6 @@ export class GmailApiStrategy implements CommunicationStrategy {
81
75
  .replace(/\//g, '_')
82
76
  .replace(/=+$/, '');
83
77
 
84
- // Send email using Google SDK
85
78
  const result = await gmail.users.messages.send({
86
79
  userId: 'me',
87
80
  requestBody: {
@@ -89,10 +82,6 @@ export class GmailApiStrategy implements CommunicationStrategy {
89
82
  },
90
83
  });
91
84
 
92
- console.log('---- Gmail SDK API Success ----');
93
- console.log('Message ID:', result.data.id);
94
-
95
- // Get fresh access token for database update
96
85
  const credentials = oauth2Client.credentials;
97
86
  const freshAccessToken = credentials.access_token;
98
87
 
@@ -102,7 +91,6 @@ export class GmailApiStrategy implements CommunicationStrategy {
102
91
  provider: 'gmail',
103
92
  service: 'API',
104
93
  timestamp: new Date(),
105
- refreshedToken: freshAccessToken, // Return fresh token for database update
106
94
  };
107
95
  } catch (error) {
108
96
  console.error('---- Gmail SDK API Error ----');
@@ -295,4 +283,4 @@ export class GmailApiStrategy implements CommunicationStrategy {
295
283
 
296
284
  return emailLines.join('\n');
297
285
  }
298
- }
286
+ }
@@ -1,16 +1,16 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
  import {
3
- CommunicationStrategy,
4
- CommunicationResult,
5
- } from '../communication.strategy';
3
+ IntegrationStrategy,
4
+ IntegrationResult,
5
+ } from '../integration.strategy';
6
6
 
7
7
  @Injectable()
8
- export class OutlookApiStrategy implements CommunicationStrategy {
8
+ export class OutlookApiStrategy implements IntegrationStrategy {
9
9
  async sendMessage(
10
10
  to: string,
11
11
  message: string,
12
12
  config: any,
13
- ): Promise<CommunicationResult> {
13
+ ): Promise<IntegrationResult> {
14
14
  try {
15
15
  if (!this.validateConfig(config)) {
16
16
  throw new Error('Invalid Outlook API configuration');
@@ -1,17 +1,17 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
  import { Client } from '@microsoft/microsoft-graph-client';
3
3
  import {
4
- CommunicationStrategy,
5
- CommunicationResult,
6
- } from '../communication.strategy';
4
+ IntegrationStrategy,
5
+ IntegrationResult,
6
+ } from '../integration.strategy';
7
7
 
8
8
  @Injectable()
9
- export class OutlookStrategy implements CommunicationStrategy {
9
+ export class OutlookStrategy implements IntegrationStrategy {
10
10
  async sendMessage(
11
11
  to: string,
12
12
  message: string,
13
13
  config: any,
14
- ): Promise<CommunicationResult> {
14
+ ): Promise<IntegrationResult> {
15
15
  try {
16
16
  const { accessToken } = config;
17
17
 
@@ -2,18 +2,18 @@ import { Injectable } from '@nestjs/common';
2
2
  import * as sgMail from '@sendgrid/mail';
3
3
  import axios from 'axios';
4
4
  import {
5
- CommunicationResult,
6
- CommunicationStrategy,
5
+ IntegrationResult,
6
+ IntegrationStrategy,
7
7
  EmailAttachment,
8
- } from '../communication.strategy';
8
+ } from '../integration.strategy';
9
9
 
10
10
  @Injectable()
11
- export class SendGridApiStrategy implements CommunicationStrategy {
11
+ export class SendGridApiStrategy implements IntegrationStrategy {
12
12
  async sendMessage(
13
13
  to: string,
14
14
  message: string,
15
15
  config: any,
16
- ): Promise<CommunicationResult> {
16
+ ): Promise<IntegrationResult> {
17
17
  try {
18
18
  const {
19
19
  apiKey,
@@ -1,13 +1,17 @@
1
- export interface CommunicationStrategy {
1
+ export interface IntegrationStrategy {
2
2
  sendMessage(
3
3
  to: string,
4
4
  message: string,
5
5
  config: any,
6
- ): Promise<CommunicationResult>;
6
+ ): Promise<IntegrationResult>;
7
7
  validateConfig(config: any): boolean;
8
+ createUserSpecificConfig?(
9
+ baseConfig: any,
10
+ userIntegrationData?: any,
11
+ ): any;
8
12
  }
9
13
 
10
- export interface CommunicationResult {
14
+ export interface IntegrationResult {
11
15
  success: boolean;
12
16
  messageId?: string;
13
17
  provider: string;
@@ -1,33 +1,37 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
  import axios from 'axios';
3
3
  import {
4
- CommunicationResult,
5
- CommunicationStrategy,
6
- } from '../communication.strategy';
4
+ IntegrationResult,
5
+ IntegrationStrategy,
6
+ } from '../integration.strategy';
7
7
 
8
8
  interface OzonetelVoiceConfig {
9
+ // Admin-level credentials (kept in config)
9
10
  apiKey: string;
10
11
  userName: string;
11
- agentID: string;
12
12
  campaignName: string;
13
13
  agentLoginUrl?: string;
14
+ // User-specific agent info (from UserIntegration mapping)
15
+ agentID?: string;
16
+ external_user_id?: string;
14
17
  }
15
18
 
16
19
  @Injectable()
17
- export class OzonetelVoiceStrategy implements CommunicationStrategy {
20
+ export class OzonetelVoiceStrategy implements IntegrationStrategy {
18
21
  private readonly baseUrl = 'https://in1-ccaas-api.ozonetel.com';
19
22
 
20
23
  async sendMessage(
21
24
  to: string,
22
25
  message: string,
23
26
  config: OzonetelVoiceConfig,
24
- ): Promise<CommunicationResult> {
27
+ ): Promise<IntegrationResult> {
25
28
  if (!this.validateConfig(config)) {
26
29
  return {
27
30
  success: false,
28
31
  provider: 'ozonetel',
29
32
  service: 'THIRD_PARTY',
30
- error: 'Invalid Ozonetel Voice configuration',
33
+ error:
34
+ 'Invalid Ozonetel Voice configuration. Missing agent information.',
31
35
  timestamp: new Date(),
32
36
  };
33
37
  }
@@ -47,12 +51,13 @@ export class OzonetelVoiceStrategy implements CommunicationStrategy {
47
51
 
48
52
  // Then make the manual dial call
49
53
  const url = `${this.baseUrl}/ca_apis/AgentManualDial`;
54
+
50
55
  await axios.post(
51
56
  url,
52
57
  {
53
58
  userName: config.userName,
54
- agentID: config.agentID,
55
- campaignName: config.campaignName,
59
+ agentID: config.external_user_id || config.agentID,
60
+ campaignName: config.campaignName, // Always from config
56
61
  customerNumber: to,
57
62
  UCID: true,
58
63
  uui: message,
@@ -120,9 +125,32 @@ export class OzonetelVoiceStrategy implements CommunicationStrategy {
120
125
  return !!(
121
126
  config &&
122
127
  config.apiKey &&
123
- config.userName &&
124
- config.agentID &&
125
- config.campaignName
128
+ config.campaignName &&
129
+ config.userName
126
130
  );
127
131
  }
132
+
133
+ /**
134
+ * Create configuration with user agent data merged with admin credentials
135
+ * Admin credentials (apiKey, userName, campaignName) stay in base config
136
+ * Only agent-specific info (agentID) comes from user integration
137
+ */
138
+ createUserSpecificConfig(
139
+ baseConfig: Pick<
140
+ OzonetelVoiceConfig,
141
+ 'apiKey' | 'userName' | 'campaignName' | 'agentLoginUrl'
142
+ >,
143
+ userIntegrationData?: any,
144
+ ): OzonetelVoiceConfig {
145
+ if (!userIntegrationData) {
146
+ throw new Error(
147
+ 'User integration data is required for Ozonetel voice calls',
148
+ );
149
+ }
150
+
151
+ return {
152
+ ...baseConfig,
153
+ agentID: userIntegrationData.agentId,
154
+ };
155
+ }
128
156
  }
@@ -1,33 +1,40 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
  import axios from 'axios';
3
3
  import {
4
- CommunicationResult,
5
- CommunicationStrategy,
6
- } from '../communication.strategy';
4
+ IntegrationResult,
5
+ IntegrationStrategy,
6
+ } from '../integration.strategy';
7
7
 
8
8
  interface TubelightVoiceConfig {
9
+ // Admin-level credentials (kept in config)
9
10
  userName: string;
10
11
  password: string;
11
- agentVerificationKey: string;
12
12
  tenantId: string;
13
13
  agentLoginUrl?: string;
14
+ // Agent phone number from config JSON
15
+ agentPhoneNumber?: string;
16
+ // User-specific agent info (from UserIntegration mapping)
17
+ agentVerificationKey?: string;
18
+ external_user_id?: string;
14
19
  }
15
20
 
16
21
  @Injectable()
17
- export class TubelightVoiceStrategy implements CommunicationStrategy {
18
- private readonly baseUrl = 'https://portal.tubelightcommunications.com/voice/api/v1';
22
+ export class TubelightVoiceStrategy implements IntegrationStrategy {
23
+ private readonly baseUrl =
24
+ 'https://portal.tubelightcommunications.com/voice/api/v1';
19
25
 
20
26
  async sendMessage(
21
27
  to: string,
22
28
  message: string,
23
29
  config: TubelightVoiceConfig,
24
- ): Promise<CommunicationResult> {
30
+ ): Promise<IntegrationResult> {
25
31
  if (!this.validateConfig(config)) {
26
32
  return {
27
33
  success: false,
28
34
  provider: 'tubelight',
29
35
  service: 'THIRD_PARTY',
30
- error: 'Invalid Tubelight Voice configuration',
36
+ error:
37
+ 'Invalid Tubelight Voice configuration. Missing agent verification key.',
31
38
  timestamp: new Date(),
32
39
  };
33
40
  }
@@ -45,10 +52,12 @@ export class TubelightVoiceStrategy implements CommunicationStrategy {
45
52
  }
46
53
 
47
54
  const url = `${this.baseUrl}/user/sso/agent/outbound-call`;
55
+
48
56
  await axios.post(
49
57
  url,
50
58
  {
51
- agentVerificationKey: config.agentVerificationKey,
59
+ agentVerificationKey:
60
+ config.external_user_id || config.agentVerificationKey,
52
61
  customerNumber: to,
53
62
  },
54
63
  {
@@ -102,7 +111,11 @@ export class TubelightVoiceStrategy implements CommunicationStrategy {
102
111
  },
103
112
  );
104
113
 
105
- const data = response.data as { bearer_token?: string; access_token?: string; token?: string };
114
+ const data = response.data as {
115
+ bearer_token?: string;
116
+ access_token?: string;
117
+ token?: string;
118
+ };
106
119
  return data?.bearer_token || data?.access_token || data?.token || null;
107
120
  } catch (error) {
108
121
  console.error('Failed to authenticate with Tubelight:', error);
@@ -111,12 +124,6 @@ export class TubelightVoiceStrategy implements CommunicationStrategy {
111
124
  }
112
125
 
113
126
  validateConfig(config: Partial<TubelightVoiceConfig>): boolean {
114
- return !!(
115
- config &&
116
- config.userName &&
117
- config.password &&
118
- config.agentVerificationKey &&
119
- config.tenantId
120
- );
127
+ return !!(config && config.userName && config.password && config.tenantId);
121
128
  }
122
129
  }
@@ -1,9 +1,9 @@
1
1
  import { Injectable, Logger } from '@nestjs/common';
2
2
  import axios, { AxiosResponse } from 'axios';
3
3
  import {
4
- CommunicationStrategy,
5
- CommunicationResult,
6
- } from '../communication.strategy';
4
+ IntegrationStrategy,
5
+ IntegrationResult,
6
+ } from '../integration.strategy';
7
7
 
8
8
  interface WhatsAppConfig {
9
9
  accessToken: string;
@@ -74,7 +74,7 @@ interface WhatsAppApiResponse {
74
74
  }
75
75
 
76
76
  @Injectable()
77
- export class WhatsAppCloudStrategy implements CommunicationStrategy {
77
+ export class WhatsAppCloudStrategy implements IntegrationStrategy {
78
78
  private readonly logger = new Logger(WhatsAppCloudStrategy.name);
79
79
  private readonly baseUrl = 'https://graph.facebook.com';
80
80
 
@@ -82,7 +82,7 @@ export class WhatsAppCloudStrategy implements CommunicationStrategy {
82
82
  to: string,
83
83
  message: string,
84
84
  config: any,
85
- ): Promise<CommunicationResult> {
85
+ ): Promise<IntegrationResult> {
86
86
  try {
87
87
  if (!this.validateConfig(config)) {
88
88
  throw new Error('Invalid WhatsApp Cloud API configuration');
@@ -1,17 +1,17 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
  import axios from 'axios';
3
3
  import {
4
- CommunicationStrategy,
5
- CommunicationResult,
6
- } from '../communication.strategy';
4
+ IntegrationStrategy,
5
+ IntegrationResult,
6
+ } from '../integration.strategy';
7
7
 
8
8
  @Injectable()
9
- export class WhatsAppStrategy implements CommunicationStrategy {
9
+ export class WhatsAppStrategy implements IntegrationStrategy {
10
10
  async sendMessage(
11
11
  to: string,
12
12
  message: string,
13
13
  config: any,
14
- ): Promise<CommunicationResult> {
14
+ ): Promise<IntegrationResult> {
15
15
  try {
16
16
  const { accessToken, phoneNumberId, apiVersion = 'v17.0' } = config;
17
17
 
@@ -73,6 +73,6 @@ export class EntityMaster extends BaseEntity {
73
73
  @Column({ name: 'data_source', nullable: true })
74
74
  data_source: string;
75
75
 
76
- @Column({ name: 'show_workflow', nullable: true })
77
- show_workflow: boolean;
76
+ @Column({ name: 'is_workflow', nullable: true })
77
+ is_workflow: boolean;
78
78
  }