rez_core 4.0.142 → 4.0.145

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 (480) hide show
  1. package/.idea/250218_nodejs_core.iml +11 -8
  2. package/.idea/codeStyles/Project.xml +58 -58
  3. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  4. package/.idea/inspectionProfiles/Project_Default.xml +1 -1
  5. package/.idea/modules.xml +7 -7
  6. package/.idea/prettier.xml +5 -5
  7. package/.idea/vcs.xml +5 -5
  8. package/.prettierrc +3 -3
  9. package/README.md +99 -99
  10. package/dist/config/config.module.js +2 -2
  11. package/dist/config/config.module.js.map +1 -1
  12. package/dist/config/database.config.d.ts +1 -1
  13. package/dist/config/database.config.js +12 -15
  14. package/dist/config/database.config.js.map +1 -1
  15. package/dist/module/auth/guards/role.guard.js +3 -3
  16. package/dist/module/auth/services/auth.service.js +3 -3
  17. package/dist/module/auth/services/auth.service.js.map +1 -1
  18. package/dist/module/enterprise/entity/organization.entity.js +1 -1
  19. package/dist/module/enterprise/repository/school.repository.js +3 -3
  20. package/dist/module/enterprise/repository/school.repository.js.map +1 -1
  21. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  22. package/dist/module/filter/service/filter-evaluator.service.js +3 -3
  23. package/dist/module/filter/service/filter-evaluator.service.js.map +1 -1
  24. package/dist/module/filter/service/filter.service.js +23 -23
  25. package/dist/module/filter/service/filter.service.js.map +1 -1
  26. package/dist/module/integration/entity/integration-config.entity.js +6 -6
  27. package/dist/module/integration/entity/integration-config.entity.js.map +1 -1
  28. package/dist/module/integration/entity/integration-entity-mapper.entity.js +1 -1
  29. package/dist/module/integration/entity/integration-entity-mapper.entity.js.map +1 -1
  30. package/dist/module/integration/entity/integration-source.entity.js +4 -4
  31. package/dist/module/integration/entity/integration-source.entity.js.map +1 -1
  32. package/dist/module/integration/entity/user-integration.entity.js +4 -4
  33. package/dist/module/integration/entity/user-integration.entity.js.map +1 -1
  34. package/dist/module/integration/examples/usage.example.js +9 -9
  35. package/dist/module/integration/service/integration.service.js +1 -1
  36. package/dist/module/integration/service/wrapper.service.d.ts +3 -1
  37. package/dist/module/integration/service/wrapper.service.js +67 -65
  38. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  39. package/dist/module/listmaster/entity/list-master-items.entity.js +3 -3
  40. package/dist/module/listmaster/entity/list-master-items.entity.js.map +1 -1
  41. package/dist/module/listmaster/entity/list-master.entity.js +4 -4
  42. package/dist/module/listmaster/entity/list-master.entity.js.map +1 -1
  43. package/dist/module/listmaster/service/list-master-item.service.js +3 -3
  44. package/dist/module/listmaster/service/list-master-item.service.js.map +1 -1
  45. package/dist/module/mapper/entity/field-mapper.entity.js +6 -6
  46. package/dist/module/mapper/entity/field-mapper.entity.js.map +1 -1
  47. package/dist/module/mapper/service/field-mapper.service.js +7 -7
  48. package/dist/module/mapper/service/field-mapper.service.js.map +1 -1
  49. package/dist/module/mapper/service/mapper.service.js +4 -4
  50. package/dist/module/mapper/service/mapper.service.js.map +1 -1
  51. package/dist/module/meta/entity/entity-master.entity.js +1 -1
  52. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  53. package/dist/module/meta/entity/view-master.entity.js +1 -1
  54. package/dist/module/meta/entity/view-master.entity.js.map +1 -1
  55. package/dist/module/meta/repository/attribute-master.repository.js +2 -2
  56. package/dist/module/meta/repository/attribute-master.repository.js.map +1 -1
  57. package/dist/module/meta/repository/entity-master.repository.js +1 -1
  58. package/dist/module/meta/repository/entity-master.repository.js.map +1 -1
  59. package/dist/module/meta/service/attribute-master.service.js +1 -1
  60. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  61. package/dist/module/meta/service/entity-dynamic.service.js +27 -27
  62. package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
  63. package/dist/module/meta/service/entity-list.service.js +3 -3
  64. package/dist/module/meta/service/entity-master.service.js +4 -4
  65. package/dist/module/meta/service/entity-master.service.js.map +1 -1
  66. package/dist/module/meta/service/entity-relation.service.js +13 -13
  67. package/dist/module/meta/service/entity-relation.service.js.map +1 -1
  68. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  69. package/dist/module/meta/service/media-data.service.js +9 -9
  70. package/dist/module/meta/service/media-data.service.js.map +1 -1
  71. package/dist/module/meta/service/resolver.service.js +19 -19
  72. package/dist/module/meta/service/resolver.service.js.map +1 -1
  73. package/dist/module/module/repository/menu.repository.js +12 -12
  74. package/dist/module/notification/entity/otp.entity.js +1 -1
  75. package/dist/module/notification/entity/otp.entity.js.map +1 -1
  76. package/dist/module/notification/service/notification.service.js +9 -9
  77. package/dist/module/user/controller/login.controller.js +18 -18
  78. package/dist/module/user/entity/user-role-mapping.entity.js +1 -1
  79. package/dist/module/user/entity/user-role-mapping.entity.js.map +1 -1
  80. package/dist/module/user/service/login.service.js +1 -1
  81. package/dist/module/user/service/login.service.js.map +1 -1
  82. package/dist/module/user/service/role.service.js +4 -4
  83. package/dist/module/user/service/user-session.service.js +4 -4
  84. package/dist/module/user/service/user-session.service.js.map +1 -1
  85. package/dist/module/workflow/entity/action-data.entity.js +1 -1
  86. package/dist/module/workflow/entity/action-data.entity.js.map +1 -1
  87. package/dist/module/workflow/entity/action.entity.js +1 -1
  88. package/dist/module/workflow/entity/action.entity.js.map +1 -1
  89. package/dist/module/workflow/entity/comm-template.entity.js +1 -1
  90. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  91. package/dist/module/workflow/repository/action-data.repository.js +4 -4
  92. package/dist/module/workflow/repository/action-data.repository.js.map +1 -1
  93. package/dist/module/workflow/repository/action.repository.js +21 -21
  94. package/dist/module/workflow/repository/action.repository.js.map +1 -1
  95. package/dist/module/workflow/repository/comm-template.repository.js +7 -7
  96. package/dist/module/workflow/repository/comm-template.repository.js.map +1 -1
  97. package/dist/module/workflow/repository/form-master.repository.js +3 -3
  98. package/dist/module/workflow/repository/form-master.repository.js.map +1 -1
  99. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  100. package/dist/module/workflow/repository/stage-movement.repository.js +17 -17
  101. package/dist/module/workflow/repository/stage-movement.repository.js.map +1 -1
  102. package/dist/module/workflow/repository/stage.repository.js +8 -8
  103. package/dist/module/workflow/repository/task.repository.d.ts +3 -1
  104. package/dist/module/workflow/repository/task.repository.js +8 -3
  105. package/dist/module/workflow/repository/task.repository.js.map +1 -1
  106. package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
  107. package/dist/module/workflow/service/action.service.js +13 -13
  108. package/dist/module/workflow/service/action.service.js.map +1 -1
  109. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  110. package/dist/module/workflow/service/populate-workflow.service.js +8 -8
  111. package/dist/module/workflow/service/populate-workflow.service.js.map +1 -1
  112. package/dist/module/workflow/service/stage-group.service.js +6 -6
  113. package/dist/module/workflow/service/stage-group.service.js.map +1 -1
  114. package/dist/module/workflow/service/stage.service.js +4 -4
  115. package/dist/module/workflow/service/stage.service.js.map +1 -1
  116. package/dist/module/workflow/service/task.service.js +39 -44
  117. package/dist/module/workflow/service/task.service.js.map +1 -1
  118. package/dist/module/workflow/service/workflow-list-master.service.js +16 -16
  119. package/dist/module/workflow/service/workflow-list-master.service.js.map +1 -1
  120. package/dist/module/workflow/service/workflow-meta.service.js +53 -51
  121. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  122. package/dist/module/workflow/service/workflow.service.js +5 -5
  123. package/dist/module/workflow/service/workflow.service.js.map +1 -1
  124. package/dist/module/workflow-automation/controller/workflow-automation.controller.d.ts +6 -0
  125. package/dist/module/workflow-automation/controller/workflow-automation.controller.js +16 -0
  126. package/dist/module/workflow-automation/controller/workflow-automation.controller.js.map +1 -1
  127. package/dist/module/workflow-automation/entity/workflow-automation.entity.d.ts +1 -0
  128. package/dist/module/workflow-automation/entity/workflow-automation.entity.js +4 -0
  129. package/dist/module/workflow-automation/entity/workflow-automation.entity.js.map +1 -1
  130. package/dist/module/workflow-automation/service/workflow-automation-engine.service.js +1 -1
  131. package/dist/module/workflow-automation/service/workflow-automation-engine.service.js.map +1 -1
  132. package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +5 -0
  133. package/dist/module/workflow-automation/service/workflow-automation.service.js +45 -0
  134. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  135. package/dist/tsconfig.build.tsbuildinfo +1 -1
  136. package/dist/utils/service/loggingUtil.service.d.ts +9 -2
  137. package/dist/utils/service/loggingUtil.service.js +65 -14
  138. package/dist/utils/service/loggingUtil.service.js.map +1 -1
  139. package/dist/utils/service/reflection-helper.service.js +3 -3
  140. package/dist/utils/service/reflection-helper.service.js.map +1 -1
  141. package/dist/utils/utils.module.js +2 -0
  142. package/dist/utils/utils.module.js.map +1 -1
  143. package/docs/modules/event-driven-integration-design.md +91 -91
  144. package/docs/modules/integration.md +250 -250
  145. package/eslint.config.mjs +34 -34
  146. package/nest-cli.json +14 -14
  147. package/package.json +119 -120
  148. package/src/app.controller.ts +12 -12
  149. package/src/app.module.ts +52 -52
  150. package/src/app.service.ts +8 -8
  151. package/src/config/config.module.ts +18 -17
  152. package/src/config/database.config.ts +23 -47
  153. package/src/constant/global.constant.ts +67 -67
  154. package/src/core.module.ts +81 -81
  155. package/src/decorators/roles.decorator.ts +7 -7
  156. package/src/dtos/response.dto.ts +6 -6
  157. package/src/dtos/response.ts +5 -5
  158. package/src/index.ts +1 -1
  159. package/src/module/auth/auth.module.ts +49 -49
  160. package/src/module/auth/controller/auth.controller.ts +28 -28
  161. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  162. package/src/module/auth/guards/jwt.guard.ts +22 -22
  163. package/src/module/auth/guards/role.guard.ts +68 -68
  164. package/src/module/auth/services/auth.service.ts +50 -50
  165. package/src/module/auth/services/jwt.service.ts +11 -11
  166. package/src/module/auth/strategies/google.strategy.ts +54 -54
  167. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  168. package/src/module/auth/strategies/local.strategy.ts +13 -13
  169. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  170. package/src/module/dashboard/dashboard.module.ts +21 -21
  171. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  172. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  173. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  174. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  175. package/src/module/dev/dev.module.ts +12 -12
  176. package/src/module/dev/service/dev.service.ts +7 -7
  177. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  178. package/src/module/enterprise/enterprise.module.ts +30 -30
  179. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  180. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  181. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  182. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  183. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  184. package/src/module/enterprise/repository/school.repository.ts +278 -278
  185. package/src/module/enterprise/service/brand.service.ts +5 -5
  186. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  187. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  188. package/src/module/enterprise/service/organization.service.ts +145 -145
  189. package/src/module/filter/controller/filter.controller.ts +84 -84
  190. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  191. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  192. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  193. package/src/module/filter/filter.module.ts +31 -31
  194. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  195. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  196. package/src/module/filter/service/filter.service.ts +1005 -1005
  197. package/src/module/filter/service/saved-filter.service.ts +170 -170
  198. package/src/module/ics/controller/ics.controller.ts +21 -21
  199. package/src/module/ics/dto/ics.dto.ts +55 -55
  200. package/src/module/ics/ics.module.ts +13 -13
  201. package/src/module/ics/service/ics.service.ts +57 -57
  202. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  203. package/src/module/integration/controller/integration.controller.ts +662 -662
  204. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  205. package/src/module/integration/dto/create-config.dto.ts +526 -526
  206. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  207. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  208. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  209. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  210. package/src/module/integration/examples/usage.example.ts +338 -338
  211. package/src/module/integration/factories/base.factory.ts +7 -7
  212. package/src/module/integration/factories/email.factory.ts +49 -49
  213. package/src/module/integration/factories/integration.factory.ts +121 -121
  214. package/src/module/integration/factories/sms.factory.ts +51 -51
  215. package/src/module/integration/factories/telephone.factory.ts +41 -41
  216. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  217. package/src/module/integration/integration.module.ts +110 -110
  218. package/src/module/integration/service/calendar-event.service.ts +118 -118
  219. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  220. package/src/module/integration/service/integration-queue.service.ts +229 -229
  221. package/src/module/integration/service/integration.service.ts +2633 -2633
  222. package/src/module/integration/service/oauth.service.ts +224 -224
  223. package/src/module/integration/service/wrapper.service.ts +700 -494
  224. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  225. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  226. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  227. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  228. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  229. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  230. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  231. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  232. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  233. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  234. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  235. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  236. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  237. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  238. package/src/module/layout/controller/layout.controller.ts +47 -47
  239. package/src/module/layout/entity/header-items.entity.ts +28 -28
  240. package/src/module/layout/entity/header-section.entity.ts +19 -19
  241. package/src/module/layout/layout.module.ts +21 -21
  242. package/src/module/layout/repository/header-items.repository.ts +18 -18
  243. package/src/module/layout/repository/header-section.repository.ts +22 -22
  244. package/src/module/layout/service/header-section.service.ts +25 -25
  245. package/src/module/layout_preference/controller/layout_preference.controller.ts +73 -73
  246. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  247. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  248. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  249. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  250. package/src/module/lead/controller/lead.controller.ts +30 -30
  251. package/src/module/lead/lead.module.ts +14 -14
  252. package/src/module/lead/repository/lead.repository.ts +41 -41
  253. package/src/module/lead/service/lead.service.ts +54 -54
  254. package/src/module/listmaster/controller/list-master.controller.ts +230 -230
  255. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  256. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  257. package/src/module/listmaster/listmaster.module.ts +46 -46
  258. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  259. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  260. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  261. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  262. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  263. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  264. package/src/module/listmaster/service/list-master.service.ts +535 -535
  265. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  266. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  267. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  268. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  269. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  270. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  271. package/src/module/mapper/mapper.module.ts +34 -34
  272. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  273. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  274. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  275. package/src/module/mapper/service/field-mapper.service.ts +271 -266
  276. package/src/module/mapper/service/mapper.service.ts +79 -79
  277. package/src/module/master/controller/master.controller.ts +74 -74
  278. package/src/module/master/service/master.service.ts +483 -483
  279. package/src/module/meta/controller/app-master.controller.ts +38 -38
  280. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  281. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  282. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  283. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  284. package/src/module/meta/controller/entity.controller.ts +392 -392
  285. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  286. package/src/module/meta/controller/media.controller.ts +107 -107
  287. package/src/module/meta/controller/meta.controller.ts +96 -96
  288. package/src/module/meta/controller/view-master.controller.ts +86 -86
  289. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  290. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  291. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  292. package/src/module/meta/entity/app-master.entity.ts +34 -34
  293. package/src/module/meta/entity/attribute-master.entity.ts +89 -89
  294. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  295. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  296. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  297. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  298. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  299. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  300. package/src/module/meta/entity/media-data.entity.ts +32 -32
  301. package/src/module/meta/entity/preference.entity.ts +62 -62
  302. package/src/module/meta/entity/view-master.entity.ts +41 -41
  303. package/src/module/meta/entity.module.ts +158 -158
  304. package/src/module/meta/repository/app-master.repository.ts +20 -20
  305. package/src/module/meta/repository/attribute-master.repository.ts +118 -118
  306. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  307. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  308. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  309. package/src/module/meta/repository/media-data.repository.ts +50 -50
  310. package/src/module/meta/repository/preference.repository.ts +20 -20
  311. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  312. package/src/module/meta/repository/view-master.repository.ts +42 -42
  313. package/src/module/meta/service/app-master.service.ts +37 -37
  314. package/src/module/meta/service/attribute-master.service.ts +126 -126
  315. package/src/module/meta/service/common.service.ts +9 -9
  316. package/src/module/meta/service/entity-dynamic.service.ts +819 -819
  317. package/src/module/meta/service/entity-list.service.ts +205 -205
  318. package/src/module/meta/service/entity-master.service.ts +169 -169
  319. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  320. package/src/module/meta/service/entity-relation.service.ts +69 -69
  321. package/src/module/meta/service/entity-service-impl.service.ts +525 -525
  322. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  323. package/src/module/meta/service/entity-table.service.ts +150 -150
  324. package/src/module/meta/service/entity-validation.service.ts +187 -187
  325. package/src/module/meta/service/entity.service.ts +67 -67
  326. package/src/module/meta/service/field-group.service.ts +103 -103
  327. package/src/module/meta/service/media-data.service.ts +507 -507
  328. package/src/module/meta/service/populate-meta.service.ts +193 -193
  329. package/src/module/meta/service/preference.service.ts +16 -16
  330. package/src/module/meta/service/resolver.service.ts +267 -267
  331. package/src/module/meta/service/section-master.service.ts +104 -104
  332. package/src/module/meta/service/update-form-json.service.ts +22 -22
  333. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  334. package/src/module/meta/service/view-master.service.ts +127 -127
  335. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  336. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  337. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  338. package/src/module/module/controller/menu.controller.ts +15 -15
  339. package/src/module/module/controller/module-access.controller.ts +134 -134
  340. package/src/module/module/entity/menu.entity.ts +43 -43
  341. package/src/module/module/entity/module-access.entity.ts +25 -25
  342. package/src/module/module/entity/module-action.entity.ts +17 -17
  343. package/src/module/module/entity/module.entity.ts +52 -52
  344. package/src/module/module/module.module.ts +42 -42
  345. package/src/module/module/repository/menu.repository.ts +184 -184
  346. package/src/module/module/repository/module-access.repository.ts +344 -344
  347. package/src/module/module/service/menu.service.ts +82 -82
  348. package/src/module/module/service/module-access.service.ts +209 -209
  349. package/src/module/notification/controller/notification.controller.ts +58 -58
  350. package/src/module/notification/controller/otp.controller.ts +117 -117
  351. package/src/module/notification/entity/notification.entity.ts +26 -26
  352. package/src/module/notification/entity/otp.entity.ts +28 -28
  353. package/src/module/notification/firebase-admin.config.ts +22 -22
  354. package/src/module/notification/notification.module.ts +69 -69
  355. package/src/module/notification/repository/otp.repository.ts +27 -27
  356. package/src/module/notification/service/email.service.ts +127 -127
  357. package/src/module/notification/service/notification.service.ts +163 -163
  358. package/src/module/notification/service/otp.service.ts +132 -132
  359. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  360. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  361. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  362. package/src/module/third-party-module/third-party.module.ts +12 -12
  363. package/src/module/user/controller/login.controller.ts +197 -197
  364. package/src/module/user/controller/user.controller.ts +40 -40
  365. package/src/module/user/dto/create-user.dto.ts +62 -62
  366. package/src/module/user/dto/update-user.dto.ts +4 -4
  367. package/src/module/user/entity/role.entity.ts +33 -33
  368. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  369. package/src/module/user/entity/user-session.entity.ts +73 -73
  370. package/src/module/user/entity/user.entity.ts +59 -59
  371. package/src/module/user/repository/role.repository.ts +96 -96
  372. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  373. package/src/module/user/repository/user.repository.ts +50 -50
  374. package/src/module/user/repository/userSession.repository.ts +33 -33
  375. package/src/module/user/service/login.service.ts +304 -304
  376. package/src/module/user/service/role.service.ts +189 -189
  377. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  378. package/src/module/user/service/user-session.service.ts +168 -168
  379. package/src/module/user/service/user.service.ts +365 -365
  380. package/src/module/user/user.module.ts +65 -65
  381. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  382. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  383. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  384. package/src/module/workflow/controller/action.controller.ts +111 -111
  385. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  386. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  387. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  388. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  389. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  390. package/src/module/workflow/controller/stage.controller.ts +50 -50
  391. package/src/module/workflow/controller/task.controller.ts +77 -77
  392. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  393. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  394. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  395. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  396. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  397. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  398. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  399. package/src/module/workflow/entity/action.entity.ts +50 -50
  400. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  401. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  402. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  403. package/src/module/workflow/entity/form.entity.ts +25 -25
  404. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  405. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  406. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  407. package/src/module/workflow/entity/stage.entity.ts +20 -20
  408. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  409. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  410. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  411. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  412. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  413. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  414. package/src/module/workflow/repository/action-data.repository.ts +333 -333
  415. package/src/module/workflow/repository/action.repository.ts +323 -323
  416. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  417. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  418. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  419. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  420. package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
  421. package/src/module/workflow/repository/stage.repository.ts +172 -172
  422. package/src/module/workflow/repository/task.repository.ts +134 -127
  423. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  424. package/src/module/workflow/service/action-category.service.ts +33 -33
  425. package/src/module/workflow/service/action-data.service.ts +62 -62
  426. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  427. package/src/module/workflow/service/action-template-mapping.service.ts +106 -106
  428. package/src/module/workflow/service/action.service.ts +279 -279
  429. package/src/module/workflow/service/activity-log.service.ts +107 -107
  430. package/src/module/workflow/service/comm-template.service.ts +180 -180
  431. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  432. package/src/module/workflow/service/form-master.service.ts +35 -35
  433. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  434. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  435. package/src/module/workflow/service/stage-group.service.ts +319 -319
  436. package/src/module/workflow/service/stage.service.ts +199 -199
  437. package/src/module/workflow/service/task.service.ts +547 -560
  438. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  439. package/src/module/workflow/service/workflow-meta.service.ts +654 -640
  440. package/src/module/workflow/service/workflow.service.ts +205 -205
  441. package/src/module/workflow/workflow.module.ts +176 -176
  442. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -21
  443. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  444. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +38 -35
  445. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  446. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  447. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  448. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  449. package/src/module/workflow-automation/service/workflow-automation.service.ts +421 -347
  450. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  451. package/src/resources/dev.properties.yaml +30 -31
  452. package/src/resources/local.properties.yaml +27 -27
  453. package/src/resources/properties.module.ts +12 -12
  454. package/src/resources/properties.yaml.ts +11 -11
  455. package/src/resources/uat.properties.yaml +31 -31
  456. package/src/table.config.ts +126 -126
  457. package/src/utils/dto/excel-data.dto.ts +14 -14
  458. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  459. package/src/utils/service/base64util.service.ts +18 -18
  460. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  461. package/src/utils/service/codeGenerator.service.ts +22 -22
  462. package/src/utils/service/dateUtil.service.ts +17 -17
  463. package/src/utils/service/encryptUtil.service.ts +97 -97
  464. package/src/utils/service/excel-helper.service.ts +72 -72
  465. package/src/utils/service/excelUtil.service.ts +15 -15
  466. package/src/utils/service/file-util.service.ts +11 -11
  467. package/src/utils/service/json-util.service.ts +23 -23
  468. package/src/utils/service/loggingUtil.service.ts +88 -34
  469. package/src/utils/service/reflection-helper.service.ts +62 -62
  470. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  471. package/src/utils/utils.module.ts +27 -25
  472. package/tsconfig.build.json +4 -4
  473. package/tsconfig.json +24 -24
  474. package/.claude/settings.local.json +0 -26
  475. package/.idea/copilot.data.migration.agent.xml +0 -6
  476. package/.idea/copilot.data.migration.ask.xml +0 -6
  477. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  478. package/.idea/copilot.data.migration.edit.xml +0 -6
  479. package/.idea/misc.xml +0 -6
  480. package/server.log +0 -850
@@ -1,281 +1,281 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { ConfigService } from '@nestjs/config';
3
- import { google } from 'googleapis';
4
- import {
5
- IntegrationStrategy,
6
- IntegrationResult,
7
- EmailAttachment,
8
- EmailAttachmentValidator,
9
- } from '../integration.strategy';
10
-
11
- @Injectable()
12
- export class GmailApiStrategy implements IntegrationStrategy {
13
- constructor(private readonly configService: ConfigService) {
14
- }
15
-
16
- async sendMessage(
17
- to: string | string[],
18
- message: string,
19
- config: any,
20
- ): Promise<IntegrationResult> {
21
- try {
22
- if (!config || !config.refreshToken) {
23
- throw new Error(
24
- 'Invalid Gmail API configuration - missing refresh token',
25
- );
26
- }
27
-
28
- const { subject, cc, bcc, attachments } = config;
29
-
30
- console.log('---- Using Google SDK Gmail API ----');
31
-
32
- const oauth2Client = await this.setupOAuth2Client(config);
33
-
34
- const gmail = google.gmail({ version: 'v1', auth: oauth2Client });
35
-
36
- const toRecipients = Array.isArray(to) ? to.join(', ') : to;
37
- const ccRecipients = cc
38
- ? Array.isArray(cc)
39
- ? cc.join(', ')
40
- : cc
41
- : undefined;
42
- const bccRecipients = bcc
43
- ? Array.isArray(bcc)
44
- ? bcc.join(', ')
45
- : bcc
46
- : undefined;
47
-
48
- const emailContent =
49
- attachments && attachments.length > 0
50
- ? this.buildMultipartEmail(
51
- toRecipients,
52
- ccRecipients,
53
- bccRecipients,
54
- subject,
55
- config.richText || message,
56
- attachments,
57
- )
58
- : this.buildSimpleEmail(
59
- toRecipients,
60
- ccRecipients,
61
- bccRecipients,
62
- subject,
63
- config.richText || message,
64
- );
65
-
66
- const encodedMessage = Buffer.from(emailContent)
67
- .toString('base64')
68
- .replace(/\+/g, '-')
69
- .replace(/\//g, '_')
70
- .replace(/=+$/, '');
71
-
72
- const result = await gmail.users.messages.send({
73
- userId: 'me',
74
- requestBody: {
75
- raw: encodedMessage,
76
- },
77
- });
78
-
79
- const credentials = oauth2Client.credentials;
80
- const freshAccessToken = credentials.access_token;
81
-
82
- return {
83
- success: true,
84
- messageId: result.data.id || undefined,
85
- provider: 'gmail',
86
- service: 'API',
87
- timestamp: new Date(),
88
- message: "Email sent successfully"
89
- };
90
- } catch (error) {
91
- console.error('---- Gmail SDK API Error ----');
92
- console.error('Error message:', error.message);
93
- console.error('Error details:', error.response?.data || error.errors);
94
-
95
- return {
96
- success: false,
97
- provider: 'gmail',
98
- service: 'API',
99
- error:
100
- error.response?.data?.error?.message ||
101
- error.message ||
102
- 'Gmail API error',
103
- timestamp: new Date(),
104
- };
105
- }
106
- }
107
-
108
- validateConfig(config: any): boolean {
109
- if (!config) return false;
110
-
111
- // For Google SDK strategy, we need a refresh token
112
- return config.refreshToken && typeof config.refreshToken === 'string';
113
- }
114
-
115
- private async setupOAuth2Client(config: any): Promise<any> {
116
- try {
117
- const { refreshToken } = config;
118
-
119
- if (!refreshToken) {
120
- throw new Error('Missing refresh token for OAuth2 setup');
121
- }
122
-
123
- // Get system OAuth credentials
124
- const clientId = this.configService.get<string>('CLIENT_ID');
125
- const clientSecret = this.configService.get<string>('CLIENT_SECRET');
126
- const callbackurl = this.configService.get<string>('CALLBACK_URL');
127
-
128
- if (!clientId || !clientSecret) {
129
- throw new Error('Gmail OAuth system credentials not configured');
130
- }
131
-
132
- console.log('---- Setting up OAuth2 client with Google SDK ----');
133
-
134
- // Create OAuth2 client using Google SDK
135
- const oauth2Client = new google.auth.OAuth2(
136
- clientId,
137
- clientSecret,
138
- callbackurl, // For server-to-server
139
- );
140
-
141
- // Set the refresh token
142
- oauth2Client.setCredentials({
143
- refresh_token: refreshToken,
144
- });
145
-
146
- // Refresh access token automatically
147
- await oauth2Client.getAccessToken();
148
-
149
- console.log('---- OAuth2 client setup completed ----');
150
- return oauth2Client;
151
- } catch (error) {
152
- console.error('Failed to setup OAuth2 client:', error.message);
153
- throw new Error(`Failed to setup Gmail OAuth2 client: ${error.message}`);
154
- }
155
- }
156
-
157
- async refreshAccessToken(config: any): Promise<string> {
158
- try {
159
- const oauth2Client = await this.setupOAuth2Client(config);
160
- const { token } = await oauth2Client.getAccessToken();
161
-
162
- if (!token) {
163
- throw new Error('No access token received from OAuth2 client');
164
- }
165
-
166
- console.log('---- Token refreshed successfully via Google SDK ----');
167
- return token;
168
- } catch (error) {
169
- console.error(
170
- 'Failed to refresh access token via Google SDK:',
171
- error.message,
172
- );
173
- throw new Error(`Failed to refresh Gmail access token: ${error.message}`);
174
- }
175
- }
176
-
177
- async validateConnection(config: any): Promise<boolean> {
178
- try {
179
- if (!this.validateConfig(config)) {
180
- return false;
181
- }
182
-
183
- // Setup OAuth2 client and test the connection
184
- const oauth2Client = await this.setupOAuth2Client(config);
185
- const gmail = google.gmail({ version: 'v1', auth: oauth2Client });
186
-
187
- // Test the connection by getting user profile
188
- const profile = await gmail.users.getProfile({
189
- userId: 'me',
190
- });
191
-
192
- return !!(profile.data && profile.data.emailAddress);
193
- } catch (error) {
194
- console.error('Gmail connection validation failed:', error.message);
195
- return false;
196
- }
197
- }
198
-
199
- private buildSimpleEmail(
200
- to: string,
201
- cc?: string,
202
- bcc?: string,
203
- subject?: string,
204
- message?: string,
205
- ): string {
206
- const emailLines = [`To: ${to}`, `Subject: ${subject || 'Notification'}`];
207
-
208
- if (cc) {
209
- emailLines.push(`Cc: ${cc}`);
210
- }
211
-
212
- if (bcc) {
213
- emailLines.push(`Bcc: ${bcc}`);
214
- }
215
-
216
- emailLines.push('Content-Type: text/html; charset=utf-8');
217
- emailLines.push('');
218
-
219
- emailLines.push(message || '');
220
-
221
- return emailLines.join('\n');
222
- }
223
-
224
- private buildMultipartEmail(
225
- to: string,
226
- cc?: string,
227
- bcc?: string,
228
- subject?: string,
229
- message?: string,
230
- attachments?: EmailAttachment[],
231
- ): string {
232
- const boundary = `----GmailBoundary${Date.now()}${Math.random().toString(36).substr(2, 9)}`;
233
-
234
- const emailLines = [`To: ${to}`, `Subject: ${subject || 'Notification'}`];
235
-
236
- if (cc) {
237
- emailLines.push(`Cc: ${cc}`);
238
- }
239
-
240
- if (bcc) {
241
- emailLines.push(`Bcc: ${bcc}`);
242
- }
243
-
244
- emailLines.push(`Content-Type: multipart/mixed; boundary="${boundary}"`);
245
- emailLines.push('');
246
-
247
- // Add main content part
248
- emailLines.push(`--${boundary}`);
249
- emailLines.push('Content-Type: text/html; charset=utf-8');
250
- emailLines.push('');
251
-
252
- emailLines.push(message || '');
253
-
254
- // Add attachment parts
255
- if (attachments) {
256
- for (const attachment of attachments) {
257
- emailLines.push(`--${boundary}`);
258
- emailLines.push(`Content-Type: ${attachment.contentType}`);
259
- emailLines.push(
260
- `Content-Disposition: ${attachment.disposition || 'attachment'}; filename="${attachment.filename}"`,
261
- );
262
- emailLines.push('Content-Transfer-Encoding: base64');
263
-
264
- if (attachment.contentId) {
265
- emailLines.push(`Content-ID: <${attachment.contentId}>`);
266
- }
267
-
268
- emailLines.push('');
269
-
270
- // Add base64 content in chunks of 76 characters (RFC 2045)
271
- const base64Content = attachment.content;
272
- const chunks = base64Content.match(/.{1,76}/g) || [];
273
- emailLines.push(...chunks);
274
- }
275
- }
276
-
277
- emailLines.push(`--${boundary}--`);
278
-
279
- return emailLines.join('\n');
280
- }
1
+ import { Injectable } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
+ import { google } from 'googleapis';
4
+ import {
5
+ IntegrationStrategy,
6
+ IntegrationResult,
7
+ EmailAttachment,
8
+ EmailAttachmentValidator,
9
+ } from '../integration.strategy';
10
+
11
+ @Injectable()
12
+ export class GmailApiStrategy implements IntegrationStrategy {
13
+ constructor(private readonly configService: ConfigService) {
14
+ }
15
+
16
+ async sendMessage(
17
+ to: string | string[],
18
+ message: string,
19
+ config: any,
20
+ ): Promise<IntegrationResult> {
21
+ try {
22
+ if (!config || !config.refreshToken) {
23
+ throw new Error(
24
+ 'Invalid Gmail API configuration - missing refresh token',
25
+ );
26
+ }
27
+
28
+ const { subject, cc, bcc, attachments } = config;
29
+
30
+ console.log('---- Using Google SDK Gmail API ----');
31
+
32
+ const oauth2Client = await this.setupOAuth2Client(config);
33
+
34
+ const gmail = google.gmail({ version: 'v1', auth: oauth2Client });
35
+
36
+ const toRecipients = Array.isArray(to) ? to.join(', ') : to;
37
+ const ccRecipients = cc
38
+ ? Array.isArray(cc)
39
+ ? cc.join(', ')
40
+ : cc
41
+ : undefined;
42
+ const bccRecipients = bcc
43
+ ? Array.isArray(bcc)
44
+ ? bcc.join(', ')
45
+ : bcc
46
+ : undefined;
47
+
48
+ const emailContent =
49
+ attachments && attachments.length > 0
50
+ ? this.buildMultipartEmail(
51
+ toRecipients,
52
+ ccRecipients,
53
+ bccRecipients,
54
+ subject,
55
+ config.richText || message,
56
+ attachments,
57
+ )
58
+ : this.buildSimpleEmail(
59
+ toRecipients,
60
+ ccRecipients,
61
+ bccRecipients,
62
+ subject,
63
+ config.richText || message,
64
+ );
65
+
66
+ const encodedMessage = Buffer.from(emailContent)
67
+ .toString('base64')
68
+ .replace(/\+/g, '-')
69
+ .replace(/\//g, '_')
70
+ .replace(/=+$/, '');
71
+
72
+ const result = await gmail.users.messages.send({
73
+ userId: 'me',
74
+ requestBody: {
75
+ raw: encodedMessage,
76
+ },
77
+ });
78
+
79
+ const credentials = oauth2Client.credentials;
80
+ const freshAccessToken = credentials.access_token;
81
+
82
+ return {
83
+ success: true,
84
+ messageId: result.data.id || undefined,
85
+ provider: 'gmail',
86
+ service: 'API',
87
+ timestamp: new Date(),
88
+ message: "Email sent successfully"
89
+ };
90
+ } catch (error) {
91
+ console.error('---- Gmail SDK API Error ----');
92
+ console.error('Error message:', error.message);
93
+ console.error('Error details:', error.response?.data || error.errors);
94
+
95
+ return {
96
+ success: false,
97
+ provider: 'gmail',
98
+ service: 'API',
99
+ error:
100
+ error.response?.data?.error?.message ||
101
+ error.message ||
102
+ 'Gmail API error',
103
+ timestamp: new Date(),
104
+ };
105
+ }
106
+ }
107
+
108
+ validateConfig(config: any): boolean {
109
+ if (!config) return false;
110
+
111
+ // For Google SDK strategy, we need a refresh token
112
+ return config.refreshToken && typeof config.refreshToken === 'string';
113
+ }
114
+
115
+ private async setupOAuth2Client(config: any): Promise<any> {
116
+ try {
117
+ const { refreshToken } = config;
118
+
119
+ if (!refreshToken) {
120
+ throw new Error('Missing refresh token for OAuth2 setup');
121
+ }
122
+
123
+ // Get system OAuth credentials
124
+ const clientId = this.configService.get<string>('CLIENT_ID');
125
+ const clientSecret = this.configService.get<string>('CLIENT_SECRET');
126
+ const callbackurl = this.configService.get<string>('CALLBACK_URL');
127
+
128
+ if (!clientId || !clientSecret) {
129
+ throw new Error('Gmail OAuth system credentials not configured');
130
+ }
131
+
132
+ console.log('---- Setting up OAuth2 client with Google SDK ----');
133
+
134
+ // Create OAuth2 client using Google SDK
135
+ const oauth2Client = new google.auth.OAuth2(
136
+ clientId,
137
+ clientSecret,
138
+ callbackurl, // For server-to-server
139
+ );
140
+
141
+ // Set the refresh token
142
+ oauth2Client.setCredentials({
143
+ refresh_token: refreshToken,
144
+ });
145
+
146
+ // Refresh access token automatically
147
+ await oauth2Client.getAccessToken();
148
+
149
+ console.log('---- OAuth2 client setup completed ----');
150
+ return oauth2Client;
151
+ } catch (error) {
152
+ console.error('Failed to setup OAuth2 client:', error.message);
153
+ throw new Error(`Failed to setup Gmail OAuth2 client: ${error.message}`);
154
+ }
155
+ }
156
+
157
+ async refreshAccessToken(config: any): Promise<string> {
158
+ try {
159
+ const oauth2Client = await this.setupOAuth2Client(config);
160
+ const { token } = await oauth2Client.getAccessToken();
161
+
162
+ if (!token) {
163
+ throw new Error('No access token received from OAuth2 client');
164
+ }
165
+
166
+ console.log('---- Token refreshed successfully via Google SDK ----');
167
+ return token;
168
+ } catch (error) {
169
+ console.error(
170
+ 'Failed to refresh access token via Google SDK:',
171
+ error.message,
172
+ );
173
+ throw new Error(`Failed to refresh Gmail access token: ${error.message}`);
174
+ }
175
+ }
176
+
177
+ async validateConnection(config: any): Promise<boolean> {
178
+ try {
179
+ if (!this.validateConfig(config)) {
180
+ return false;
181
+ }
182
+
183
+ // Setup OAuth2 client and test the connection
184
+ const oauth2Client = await this.setupOAuth2Client(config);
185
+ const gmail = google.gmail({ version: 'v1', auth: oauth2Client });
186
+
187
+ // Test the connection by getting user profile
188
+ const profile = await gmail.users.getProfile({
189
+ userId: 'me',
190
+ });
191
+
192
+ return !!(profile.data && profile.data.emailAddress);
193
+ } catch (error) {
194
+ console.error('Gmail connection validation failed:', error.message);
195
+ return false;
196
+ }
197
+ }
198
+
199
+ private buildSimpleEmail(
200
+ to: string,
201
+ cc?: string,
202
+ bcc?: string,
203
+ subject?: string,
204
+ message?: string,
205
+ ): string {
206
+ const emailLines = [`To: ${to}`, `Subject: ${subject || 'Notification'}`];
207
+
208
+ if (cc) {
209
+ emailLines.push(`Cc: ${cc}`);
210
+ }
211
+
212
+ if (bcc) {
213
+ emailLines.push(`Bcc: ${bcc}`);
214
+ }
215
+
216
+ emailLines.push('Content-Type: text/html; charset=utf-8');
217
+ emailLines.push('');
218
+
219
+ emailLines.push(message || '');
220
+
221
+ return emailLines.join('\n');
222
+ }
223
+
224
+ private buildMultipartEmail(
225
+ to: string,
226
+ cc?: string,
227
+ bcc?: string,
228
+ subject?: string,
229
+ message?: string,
230
+ attachments?: EmailAttachment[],
231
+ ): string {
232
+ const boundary = `----GmailBoundary${Date.now()}${Math.random().toString(36).substr(2, 9)}`;
233
+
234
+ const emailLines = [`To: ${to}`, `Subject: ${subject || 'Notification'}`];
235
+
236
+ if (cc) {
237
+ emailLines.push(`Cc: ${cc}`);
238
+ }
239
+
240
+ if (bcc) {
241
+ emailLines.push(`Bcc: ${bcc}`);
242
+ }
243
+
244
+ emailLines.push(`Content-Type: multipart/mixed; boundary="${boundary}"`);
245
+ emailLines.push('');
246
+
247
+ // Add main content part
248
+ emailLines.push(`--${boundary}`);
249
+ emailLines.push('Content-Type: text/html; charset=utf-8');
250
+ emailLines.push('');
251
+
252
+ emailLines.push(message || '');
253
+
254
+ // Add attachment parts
255
+ if (attachments) {
256
+ for (const attachment of attachments) {
257
+ emailLines.push(`--${boundary}`);
258
+ emailLines.push(`Content-Type: ${attachment.contentType}`);
259
+ emailLines.push(
260
+ `Content-Disposition: ${attachment.disposition || 'attachment'}; filename="${attachment.filename}"`,
261
+ );
262
+ emailLines.push('Content-Transfer-Encoding: base64');
263
+
264
+ if (attachment.contentId) {
265
+ emailLines.push(`Content-ID: <${attachment.contentId}>`);
266
+ }
267
+
268
+ emailLines.push('');
269
+
270
+ // Add base64 content in chunks of 76 characters (RFC 2045)
271
+ const base64Content = attachment.content;
272
+ const chunks = base64Content.match(/.{1,76}/g) || [];
273
+ emailLines.push(...chunks);
274
+ }
275
+ }
276
+
277
+ emailLines.push(`--${boundary}--`);
278
+
279
+ return emailLines.join('\n');
280
+ }
281
281
  }
@@ -1,44 +1,44 @@
1
- import { Injectable } from '@nestjs/common';
2
- import {
3
- IntegrationStrategy,
4
- IntegrationResult,
5
- } from '../integration.strategy';
6
-
7
- @Injectable()
8
- export class OutlookApiStrategy implements IntegrationStrategy {
9
- async sendMessage(
10
- to: string,
11
- message: string,
12
- config: any,
13
- ): Promise<IntegrationResult> {
14
- try {
15
- if (!this.validateConfig(config)) {
16
- throw new Error('Invalid Outlook API configuration');
17
- }
18
-
19
- // Microsoft Graph API implementation would go here
20
- // This is a placeholder for actual Outlook API integration
21
- console.log('Sending email via Outlook API to:', to);
22
-
23
- return {
24
- success: true,
25
- messageId: `outlook-${Date.now()}`,
26
- provider: 'outlook',
27
- service: 'API',
28
- timestamp: new Date(),
29
- };
30
- } catch (error) {
31
- return {
32
- success: false,
33
- provider: 'outlook',
34
- service: 'API',
35
- error: error.message,
36
- timestamp: new Date(),
37
- };
38
- }
39
- }
40
-
41
- validateConfig(config: any): boolean {
42
- return config && config.clientId && config.clientSecret && config.tenantId;
43
- }
44
- }
1
+ import { Injectable } from '@nestjs/common';
2
+ import {
3
+ IntegrationStrategy,
4
+ IntegrationResult,
5
+ } from '../integration.strategy';
6
+
7
+ @Injectable()
8
+ export class OutlookApiStrategy implements IntegrationStrategy {
9
+ async sendMessage(
10
+ to: string,
11
+ message: string,
12
+ config: any,
13
+ ): Promise<IntegrationResult> {
14
+ try {
15
+ if (!this.validateConfig(config)) {
16
+ throw new Error('Invalid Outlook API configuration');
17
+ }
18
+
19
+ // Microsoft Graph API implementation would go here
20
+ // This is a placeholder for actual Outlook API integration
21
+ console.log('Sending email via Outlook API to:', to);
22
+
23
+ return {
24
+ success: true,
25
+ messageId: `outlook-${Date.now()}`,
26
+ provider: 'outlook',
27
+ service: 'API',
28
+ timestamp: new Date(),
29
+ };
30
+ } catch (error) {
31
+ return {
32
+ success: false,
33
+ provider: 'outlook',
34
+ service: 'API',
35
+ error: error.message,
36
+ timestamp: new Date(),
37
+ };
38
+ }
39
+ }
40
+
41
+ validateConfig(config: any): boolean {
42
+ return config && config.clientId && config.clientSecret && config.tenantId;
43
+ }
44
+ }