rez_core 4.0.160 → 4.0.161

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 (565) hide show
  1. package/.claude/settings.local.json +26 -0
  2. package/.idea/250218_nodejs_core.iml +9 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/copilot.data.migration.agent.xml +6 -0
  6. package/.idea/copilot.data.migration.ask.xml +6 -0
  7. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  8. package/.idea/copilot.data.migration.edit.xml +6 -0
  9. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  10. package/.idea/misc.xml +6 -0
  11. package/.idea/modules.xml +8 -0
  12. package/.idea/prettier.xml +6 -0
  13. package/.idea/vcs.xml +6 -0
  14. package/.prettierrc +3 -3
  15. package/README.md +99 -99
  16. package/dist/app.module.js +0 -6
  17. package/dist/app.module.js.map +1 -1
  18. package/dist/config/config.module.js +2 -2
  19. package/dist/config/config.module.js.map +1 -1
  20. package/dist/config/database.config.d.ts +1 -1
  21. package/dist/config/database.config.js +15 -11
  22. package/dist/config/database.config.js.map +1 -1
  23. package/dist/module/auth/guards/role.guard.js +3 -3
  24. package/dist/module/auth/services/auth.service.js +3 -3
  25. package/dist/module/auth/services/auth.service.js.map +1 -1
  26. package/dist/module/enterprise/entity/organization.entity.js +1 -1
  27. package/dist/module/enterprise/repository/school.repository.js +3 -3
  28. package/dist/module/enterprise/repository/school.repository.js.map +1 -1
  29. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  30. package/dist/module/filter/service/filter-evaluator.service.js +3 -3
  31. package/dist/module/filter/service/filter-evaluator.service.js.map +1 -1
  32. package/dist/module/filter/service/filter.service.d.ts +4 -1
  33. package/dist/module/filter/service/filter.service.js +50 -31
  34. package/dist/module/filter/service/filter.service.js.map +1 -1
  35. package/dist/module/integration/entity/integration-config.entity.js +6 -6
  36. package/dist/module/integration/entity/integration-config.entity.js.map +1 -1
  37. package/dist/module/integration/entity/integration-entity-mapper.entity.js +1 -1
  38. package/dist/module/integration/entity/integration-entity-mapper.entity.js.map +1 -1
  39. package/dist/module/integration/entity/integration-source.entity.js +4 -4
  40. package/dist/module/integration/entity/integration-source.entity.js.map +1 -1
  41. package/dist/module/integration/entity/user-integration.entity.js +4 -4
  42. package/dist/module/integration/entity/user-integration.entity.js.map +1 -1
  43. package/dist/module/integration/examples/usage.example.js +9 -9
  44. package/dist/module/integration/service/integration.service.js +1 -1
  45. package/dist/module/integration/service/wrapper.service.d.ts +1 -3
  46. package/dist/module/integration/service/wrapper.service.js +65 -67
  47. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  48. package/dist/module/listmaster/entity/list-master-items.entity.js +3 -3
  49. package/dist/module/listmaster/entity/list-master-items.entity.js.map +1 -1
  50. package/dist/module/listmaster/entity/list-master.entity.js +4 -4
  51. package/dist/module/listmaster/entity/list-master.entity.js.map +1 -1
  52. package/dist/module/listmaster/service/list-master-item.service.js +3 -3
  53. package/dist/module/listmaster/service/list-master-item.service.js.map +1 -1
  54. package/dist/module/mapper/entity/field-mapper.entity.js +6 -6
  55. package/dist/module/mapper/entity/field-mapper.entity.js.map +1 -1
  56. package/dist/module/mapper/service/field-mapper.service.js +7 -7
  57. package/dist/module/mapper/service/field-mapper.service.js.map +1 -1
  58. package/dist/module/mapper/service/mapper.service.js +4 -4
  59. package/dist/module/mapper/service/mapper.service.js.map +1 -1
  60. package/dist/module/meta/controller/attribute-master.controller.d.ts +1 -4
  61. package/dist/module/meta/controller/attribute-master.controller.js +2 -15
  62. package/dist/module/meta/controller/attribute-master.controller.js.map +1 -1
  63. package/dist/module/meta/entity/app-master.entity.d.ts +2 -2
  64. package/dist/module/meta/entity/app-master.entity.js +4 -4
  65. package/dist/module/meta/entity/entity-master.entity.js +1 -1
  66. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  67. package/dist/module/meta/entity/view-master.entity.js +1 -1
  68. package/dist/module/meta/entity/view-master.entity.js.map +1 -1
  69. package/dist/module/meta/entity.module.js +0 -7
  70. package/dist/module/meta/entity.module.js.map +1 -1
  71. package/dist/module/meta/repository/attribute-master.repository.js +2 -2
  72. package/dist/module/meta/repository/attribute-master.repository.js.map +1 -1
  73. package/dist/module/meta/repository/entity-master.repository.js +1 -1
  74. package/dist/module/meta/repository/entity-master.repository.js.map +1 -1
  75. package/dist/module/meta/service/attribute-master.service.js +1 -1
  76. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  77. package/dist/module/meta/service/entity-dynamic.service.js +27 -27
  78. package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
  79. package/dist/module/meta/service/entity-list.service.js +3 -3
  80. package/dist/module/meta/service/entity-master.service.js +4 -4
  81. package/dist/module/meta/service/entity-master.service.js.map +1 -1
  82. package/dist/module/meta/service/entity-relation.service.js +13 -13
  83. package/dist/module/meta/service/entity-relation.service.js.map +1 -1
  84. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  85. package/dist/module/meta/service/media-data.service.js +9 -9
  86. package/dist/module/meta/service/media-data.service.js.map +1 -1
  87. package/dist/module/meta/service/resolver.service.js +19 -19
  88. package/dist/module/meta/service/resolver.service.js.map +1 -1
  89. package/dist/module/module/repository/menu.repository.js +12 -12
  90. package/dist/module/notification/entity/otp.entity.js +1 -1
  91. package/dist/module/notification/entity/otp.entity.js.map +1 -1
  92. package/dist/module/notification/service/notification.service.js +9 -9
  93. package/dist/module/user/controller/login.controller.js +18 -18
  94. package/dist/module/user/entity/user-role-mapping.entity.js +1 -1
  95. package/dist/module/user/entity/user-role-mapping.entity.js.map +1 -1
  96. package/dist/module/user/service/login.service.js +1 -1
  97. package/dist/module/user/service/login.service.js.map +1 -1
  98. package/dist/module/user/service/role.service.js +4 -4
  99. package/dist/module/user/service/user-session.service.js +4 -4
  100. package/dist/module/user/service/user-session.service.js.map +1 -1
  101. package/dist/module/workflow/entity/action-category.entity.d.ts +1 -1
  102. package/dist/module/workflow/entity/action-category.entity.js +1 -1
  103. package/dist/module/workflow/entity/action-data.entity.js +1 -1
  104. package/dist/module/workflow/entity/action-data.entity.js.map +1 -1
  105. package/dist/module/workflow/entity/action.entity.d.ts +0 -1
  106. package/dist/module/workflow/entity/action.entity.js +1 -5
  107. package/dist/module/workflow/entity/action.entity.js.map +1 -1
  108. package/dist/module/workflow/entity/comm-template.entity.js +1 -1
  109. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  110. package/dist/module/workflow/entity/template-attach-mapper.entity.js +1 -1
  111. package/dist/module/workflow/entity/template-attach-mapper.entity.js.map +1 -1
  112. package/dist/module/workflow/repository/action-data.repository.js +4 -5
  113. package/dist/module/workflow/repository/action-data.repository.js.map +1 -1
  114. package/dist/module/workflow/repository/action.repository.js +21 -21
  115. package/dist/module/workflow/repository/action.repository.js.map +1 -1
  116. package/dist/module/workflow/repository/comm-template.repository.js +7 -7
  117. package/dist/module/workflow/repository/comm-template.repository.js.map +1 -1
  118. package/dist/module/workflow/repository/form-master.repository.js +3 -3
  119. package/dist/module/workflow/repository/form-master.repository.js.map +1 -1
  120. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  121. package/dist/module/workflow/repository/stage-movement.repository.js +17 -17
  122. package/dist/module/workflow/repository/stage-movement.repository.js.map +1 -1
  123. package/dist/module/workflow/repository/stage.repository.js +8 -8
  124. package/dist/module/workflow/repository/task.repository.d.ts +1 -3
  125. package/dist/module/workflow/repository/task.repository.js +3 -8
  126. package/dist/module/workflow/repository/task.repository.js.map +1 -1
  127. package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
  128. package/dist/module/workflow/service/action.service.js +13 -13
  129. package/dist/module/workflow/service/action.service.js.map +1 -1
  130. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  131. package/dist/module/workflow/service/populate-workflow.service.js +8 -8
  132. package/dist/module/workflow/service/populate-workflow.service.js.map +1 -1
  133. package/dist/module/workflow/service/stage-group.service.js +6 -6
  134. package/dist/module/workflow/service/stage-group.service.js.map +1 -1
  135. package/dist/module/workflow/service/stage.service.js +4 -4
  136. package/dist/module/workflow/service/stage.service.js.map +1 -1
  137. package/dist/module/workflow/service/task.service.js +55 -71
  138. package/dist/module/workflow/service/task.service.js.map +1 -1
  139. package/dist/module/workflow/service/workflow-list-master.service.js +16 -16
  140. package/dist/module/workflow/service/workflow-list-master.service.js.map +1 -1
  141. package/dist/module/workflow/service/workflow-meta.service.js +51 -53
  142. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  143. package/dist/module/workflow/service/workflow.service.js +5 -5
  144. package/dist/module/workflow/service/workflow.service.js.map +1 -1
  145. package/dist/module/workflow-automation/controller/workflow-automation.controller.d.ts +0 -6
  146. package/dist/module/workflow-automation/controller/workflow-automation.controller.js +0 -16
  147. package/dist/module/workflow-automation/controller/workflow-automation.controller.js.map +1 -1
  148. package/dist/module/workflow-automation/entity/workflow-automation-action.entity.d.ts +1 -1
  149. package/dist/module/workflow-automation/entity/workflow-automation-action.entity.js +1 -1
  150. package/dist/module/workflow-automation/entity/workflow-automation.entity.d.ts +0 -2
  151. package/dist/module/workflow-automation/entity/workflow-automation.entity.js +0 -8
  152. package/dist/module/workflow-automation/entity/workflow-automation.entity.js.map +1 -1
  153. package/dist/module/workflow-automation/service/workflow-automation-engine.service.d.ts +1 -1
  154. package/dist/module/workflow-automation/service/workflow-automation-engine.service.js +1 -1
  155. package/dist/module/workflow-automation/service/workflow-automation-engine.service.js.map +1 -1
  156. package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +1 -13
  157. package/dist/module/workflow-automation/service/workflow-automation.service.js +6 -115
  158. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  159. package/dist/module/workflow-automation/workflow-automation.module.js +1 -14
  160. package/dist/module/workflow-automation/workflow-automation.module.js.map +1 -1
  161. package/dist/tsconfig.build.tsbuildinfo +1 -1
  162. package/dist/utils/service/loggingUtil.service.d.ts +2 -9
  163. package/dist/utils/service/loggingUtil.service.js +14 -65
  164. package/dist/utils/service/loggingUtil.service.js.map +1 -1
  165. package/dist/utils/service/reflection-helper.service.js +3 -3
  166. package/dist/utils/service/reflection-helper.service.js.map +1 -1
  167. package/dist/utils/utils.module.js +0 -2
  168. package/dist/utils/utils.module.js.map +1 -1
  169. package/docs/modules/event-driven-integration-design.md +91 -91
  170. package/docs/modules/integration.md +250 -250
  171. package/eslint.config.mjs +34 -34
  172. package/nest-cli.json +14 -14
  173. package/package.json +120 -124
  174. package/server.log +850 -0
  175. package/src/app.controller.ts +12 -12
  176. package/src/app.module.ts +52 -60
  177. package/src/app.service.ts +8 -8
  178. package/src/config/config.module.ts +17 -18
  179. package/src/config/database.config.ts +48 -23
  180. package/src/constant/global.constant.ts +67 -67
  181. package/src/core.module.ts +81 -81
  182. package/src/decorators/roles.decorator.ts +7 -7
  183. package/src/dtos/response.dto.ts +6 -6
  184. package/src/dtos/response.ts +5 -5
  185. package/src/index.ts +1 -1
  186. package/src/module/auth/auth.module.ts +49 -49
  187. package/src/module/auth/controller/auth.controller.ts +28 -28
  188. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  189. package/src/module/auth/guards/jwt.guard.ts +22 -22
  190. package/src/module/auth/guards/role.guard.ts +68 -68
  191. package/src/module/auth/services/auth.service.ts +50 -50
  192. package/src/module/auth/services/jwt.service.ts +11 -11
  193. package/src/module/auth/strategies/google.strategy.ts +54 -54
  194. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  195. package/src/module/auth/strategies/local.strategy.ts +13 -13
  196. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  197. package/src/module/dashboard/dashboard.module.ts +21 -21
  198. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  199. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  200. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  201. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  202. package/src/module/dev/dev.module.ts +12 -12
  203. package/src/module/dev/service/dev.service.ts +7 -7
  204. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  205. package/src/module/enterprise/enterprise.module.ts +30 -30
  206. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  207. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  208. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  209. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  210. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  211. package/src/module/enterprise/repository/school.repository.ts +278 -278
  212. package/src/module/enterprise/service/brand.service.ts +5 -5
  213. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  214. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  215. package/src/module/enterprise/service/organization.service.ts +145 -145
  216. package/src/module/filter/controller/filter.controller.ts +84 -84
  217. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  218. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  219. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  220. package/src/module/filter/filter.module.ts +31 -31
  221. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  222. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  223. package/src/module/filter/service/filter.service.ts +1034 -1005
  224. package/src/module/filter/service/saved-filter.service.ts +170 -170
  225. package/src/module/ics/controller/ics.controller.ts +21 -21
  226. package/src/module/ics/dto/ics.dto.ts +55 -55
  227. package/src/module/ics/ics.module.ts +13 -13
  228. package/src/module/ics/service/ics.service.ts +57 -57
  229. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  230. package/src/module/integration/controller/integration.controller.ts +662 -662
  231. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  232. package/src/module/integration/dto/create-config.dto.ts +526 -526
  233. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  234. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  235. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  236. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  237. package/src/module/integration/examples/usage.example.ts +338 -338
  238. package/src/module/integration/factories/base.factory.ts +7 -7
  239. package/src/module/integration/factories/email.factory.ts +49 -49
  240. package/src/module/integration/factories/integration.factory.ts +121 -121
  241. package/src/module/integration/factories/sms.factory.ts +51 -51
  242. package/src/module/integration/factories/telephone.factory.ts +41 -41
  243. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  244. package/src/module/integration/integration.module.ts +110 -110
  245. package/src/module/integration/service/calendar-event.service.ts +118 -118
  246. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  247. package/src/module/integration/service/integration-queue.service.ts +229 -229
  248. package/src/module/integration/service/integration.service.ts +2633 -2633
  249. package/src/module/integration/service/oauth.service.ts +224 -224
  250. package/src/module/integration/service/wrapper.service.ts +494 -700
  251. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  252. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  253. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  254. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  255. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  256. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  257. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  258. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  259. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  260. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  261. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  262. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  263. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  264. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  265. package/src/module/layout/controller/layout.controller.ts +47 -47
  266. package/src/module/layout/entity/header-items.entity.ts +28 -28
  267. package/src/module/layout/entity/header-section.entity.ts +19 -19
  268. package/src/module/layout/layout.module.ts +21 -21
  269. package/src/module/layout/repository/header-items.repository.ts +18 -18
  270. package/src/module/layout/repository/header-section.repository.ts +22 -22
  271. package/src/module/layout/service/header-section.service.ts +25 -25
  272. package/src/module/layout_preference/controller/layout_preference.controller.ts +73 -73
  273. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  274. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  275. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  276. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  277. package/src/module/lead/controller/lead.controller.ts +30 -30
  278. package/src/module/lead/lead.module.ts +14 -14
  279. package/src/module/lead/repository/lead.repository.ts +41 -41
  280. package/src/module/lead/service/lead.service.ts +54 -54
  281. package/src/module/listmaster/controller/list-master.controller.ts +230 -230
  282. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  283. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  284. package/src/module/listmaster/listmaster.module.ts +46 -46
  285. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  286. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  287. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  288. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  289. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  290. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  291. package/src/module/listmaster/service/list-master.service.ts +535 -535
  292. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  293. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  294. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  295. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  296. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  297. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  298. package/src/module/mapper/mapper.module.ts +34 -34
  299. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  300. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  301. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  302. package/src/module/mapper/service/field-mapper.service.ts +266 -271
  303. package/src/module/mapper/service/mapper.service.ts +79 -79
  304. package/src/module/master/controller/master.controller.ts +74 -74
  305. package/src/module/master/service/master.service.ts +483 -483
  306. package/src/module/meta/controller/app-master.controller.ts +38 -38
  307. package/src/module/meta/controller/attribute-master.controller.ts +66 -74
  308. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  309. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  310. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  311. package/src/module/meta/controller/entity.controller.ts +392 -392
  312. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  313. package/src/module/meta/controller/media.controller.ts +107 -107
  314. package/src/module/meta/controller/meta.controller.ts +96 -96
  315. package/src/module/meta/controller/view-master.controller.ts +86 -86
  316. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  317. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  318. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  319. package/src/module/meta/entity/app-master.entity.ts +34 -34
  320. package/src/module/meta/entity/attribute-master.entity.ts +89 -89
  321. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  322. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  323. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  324. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  325. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  326. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  327. package/src/module/meta/entity/media-data.entity.ts +32 -32
  328. package/src/module/meta/entity/preference.entity.ts +62 -62
  329. package/src/module/meta/entity/view-master.entity.ts +41 -41
  330. package/src/module/meta/entity.module.ts +158 -166
  331. package/src/module/meta/repository/app-master.repository.ts +20 -20
  332. package/src/module/meta/repository/attribute-master.repository.ts +118 -118
  333. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  334. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  335. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  336. package/src/module/meta/repository/media-data.repository.ts +50 -50
  337. package/src/module/meta/repository/preference.repository.ts +20 -20
  338. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  339. package/src/module/meta/repository/view-master.repository.ts +42 -42
  340. package/src/module/meta/service/app-master.service.ts +37 -37
  341. package/src/module/meta/service/attribute-master.service.ts +126 -126
  342. package/src/module/meta/service/common.service.ts +9 -9
  343. package/src/module/meta/service/entity-dynamic.service.ts +819 -819
  344. package/src/module/meta/service/entity-list.service.ts +205 -205
  345. package/src/module/meta/service/entity-master.service.ts +169 -169
  346. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  347. package/src/module/meta/service/entity-relation.service.ts +69 -69
  348. package/src/module/meta/service/entity-service-impl.service.ts +525 -525
  349. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  350. package/src/module/meta/service/entity-table.service.ts +150 -150
  351. package/src/module/meta/service/entity-validation.service.ts +187 -187
  352. package/src/module/meta/service/entity.service.ts +67 -67
  353. package/src/module/meta/service/field-group.service.ts +103 -103
  354. package/src/module/meta/service/media-data.service.ts +507 -507
  355. package/src/module/meta/service/populate-meta.service.ts +193 -193
  356. package/src/module/meta/service/preference.service.ts +16 -16
  357. package/src/module/meta/service/resolver.service.ts +267 -267
  358. package/src/module/meta/service/section-master.service.ts +104 -104
  359. package/src/module/meta/service/update-form-json.service.ts +22 -22
  360. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  361. package/src/module/meta/service/view-master.service.ts +127 -127
  362. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  363. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  364. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  365. package/src/module/module/controller/menu.controller.ts +15 -15
  366. package/src/module/module/controller/module-access.controller.ts +134 -134
  367. package/src/module/module/entity/menu.entity.ts +43 -43
  368. package/src/module/module/entity/module-access.entity.ts +25 -25
  369. package/src/module/module/entity/module-action.entity.ts +17 -17
  370. package/src/module/module/entity/module.entity.ts +52 -52
  371. package/src/module/module/module.module.ts +42 -42
  372. package/src/module/module/repository/menu.repository.ts +184 -184
  373. package/src/module/module/repository/module-access.repository.ts +344 -344
  374. package/src/module/module/service/menu.service.ts +82 -82
  375. package/src/module/module/service/module-access.service.ts +209 -209
  376. package/src/module/notification/controller/notification.controller.ts +58 -58
  377. package/src/module/notification/controller/otp.controller.ts +117 -117
  378. package/src/module/notification/entity/notification.entity.ts +26 -26
  379. package/src/module/notification/entity/otp.entity.ts +28 -28
  380. package/src/module/notification/firebase-admin.config.ts +22 -22
  381. package/src/module/notification/notification.module.ts +69 -69
  382. package/src/module/notification/repository/otp.repository.ts +27 -27
  383. package/src/module/notification/service/email.service.ts +127 -127
  384. package/src/module/notification/service/notification.service.ts +163 -163
  385. package/src/module/notification/service/otp.service.ts +132 -132
  386. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  387. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  388. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  389. package/src/module/third-party-module/third-party.module.ts +12 -12
  390. package/src/module/user/controller/login.controller.ts +197 -197
  391. package/src/module/user/controller/user.controller.ts +40 -40
  392. package/src/module/user/dto/create-user.dto.ts +62 -62
  393. package/src/module/user/dto/update-user.dto.ts +4 -4
  394. package/src/module/user/entity/role.entity.ts +33 -33
  395. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  396. package/src/module/user/entity/user-session.entity.ts +73 -73
  397. package/src/module/user/entity/user.entity.ts +59 -59
  398. package/src/module/user/repository/role.repository.ts +96 -96
  399. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  400. package/src/module/user/repository/user.repository.ts +50 -50
  401. package/src/module/user/repository/userSession.repository.ts +33 -33
  402. package/src/module/user/service/login.service.ts +304 -304
  403. package/src/module/user/service/role.service.ts +189 -189
  404. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  405. package/src/module/user/service/user-session.service.ts +168 -168
  406. package/src/module/user/service/user.service.ts +365 -365
  407. package/src/module/user/user.module.ts +65 -65
  408. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  409. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  410. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  411. package/src/module/workflow/controller/action.controller.ts +111 -111
  412. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  413. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  414. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  415. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  416. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  417. package/src/module/workflow/controller/stage.controller.ts +50 -50
  418. package/src/module/workflow/controller/task.controller.ts +77 -77
  419. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  420. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  421. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  422. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  423. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  424. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  425. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  426. package/src/module/workflow/entity/action.entity.ts +50 -53
  427. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  428. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  429. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  430. package/src/module/workflow/entity/form.entity.ts +25 -25
  431. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  432. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  433. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  434. package/src/module/workflow/entity/stage.entity.ts +20 -20
  435. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  436. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  437. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  438. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  439. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  440. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  441. package/src/module/workflow/repository/action-data.repository.ts +333 -334
  442. package/src/module/workflow/repository/action.repository.ts +323 -323
  443. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  444. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  445. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  446. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  447. package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
  448. package/src/module/workflow/repository/stage.repository.ts +172 -172
  449. package/src/module/workflow/repository/task.repository.ts +127 -134
  450. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  451. package/src/module/workflow/service/action-category.service.ts +33 -33
  452. package/src/module/workflow/service/action-data.service.ts +62 -62
  453. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  454. package/src/module/workflow/service/action-template-mapping.service.ts +106 -106
  455. package/src/module/workflow/service/action.service.ts +279 -279
  456. package/src/module/workflow/service/activity-log.service.ts +107 -107
  457. package/src/module/workflow/service/comm-template.service.ts +180 -180
  458. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  459. package/src/module/workflow/service/form-master.service.ts +35 -35
  460. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  461. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  462. package/src/module/workflow/service/stage-group.service.ts +319 -319
  463. package/src/module/workflow/service/stage.service.ts +199 -199
  464. package/src/module/workflow/service/task.service.ts +560 -575
  465. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  466. package/src/module/workflow/service/workflow-meta.service.ts +640 -654
  467. package/src/module/workflow/service/workflow.service.ts +205 -205
  468. package/src/module/workflow/workflow.module.ts +176 -176
  469. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -43
  470. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  471. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -40
  472. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  473. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  474. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  475. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  476. package/src/module/workflow-automation/service/workflow-automation.service.ts +347 -508
  477. package/src/module/workflow-automation/workflow-automation.module.ts +34 -47
  478. package/src/resources/dev.properties.yaml +31 -30
  479. package/src/resources/local.properties.yaml +27 -27
  480. package/src/resources/properties.module.ts +12 -12
  481. package/src/resources/properties.yaml.ts +11 -11
  482. package/src/resources/uat.properties.yaml +31 -31
  483. package/src/table.config.ts +126 -126
  484. package/src/utils/dto/excel-data.dto.ts +14 -14
  485. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  486. package/src/utils/service/base64util.service.ts +18 -18
  487. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  488. package/src/utils/service/codeGenerator.service.ts +22 -22
  489. package/src/utils/service/dateUtil.service.ts +17 -17
  490. package/src/utils/service/encryptUtil.service.ts +97 -97
  491. package/src/utils/service/excel-helper.service.ts +72 -72
  492. package/src/utils/service/excelUtil.service.ts +15 -15
  493. package/src/utils/service/file-util.service.ts +11 -11
  494. package/src/utils/service/json-util.service.ts +23 -23
  495. package/src/utils/service/loggingUtil.service.ts +34 -88
  496. package/src/utils/service/reflection-helper.service.ts +62 -62
  497. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  498. package/src/utils/utils.module.ts +25 -27
  499. package/tsconfig.build.json +4 -4
  500. package/tsconfig.json +24 -24
  501. package/dist/config/bull.config.d.ts +0 -10
  502. package/dist/config/bull.config.js +0 -66
  503. package/dist/config/bull.config.js.map +0 -1
  504. package/dist/module/meta/repository/entity-attribute-update.repository.d.ts +0 -6
  505. package/dist/module/meta/repository/entity-attribute-update.repository.js +0 -44
  506. package/dist/module/meta/repository/entity-attribute-update.repository.js.map +0 -1
  507. package/dist/module/meta/service/entity-attribute-update.service.d.ts +0 -7
  508. package/dist/module/meta/service/entity-attribute-update.service.js +0 -36
  509. package/dist/module/meta/service/entity-attribute-update.service.js.map +0 -1
  510. package/dist/module/workflow-automation/service/schedule-handler.service.d.ts +0 -16
  511. package/dist/module/workflow-automation/service/schedule-handler.service.js +0 -109
  512. package/dist/module/workflow-automation/service/schedule-handler.service.js.map +0 -1
  513. package/dist/module/workflow-schedule/constants/schedule.constants.d.ts +0 -27
  514. package/dist/module/workflow-schedule/constants/schedule.constants.js +0 -31
  515. package/dist/module/workflow-schedule/constants/schedule.constants.js.map +0 -1
  516. package/dist/module/workflow-schedule/controller/workflow-schedule.controller.d.ts +0 -83
  517. package/dist/module/workflow-schedule/controller/workflow-schedule.controller.js +0 -220
  518. package/dist/module/workflow-schedule/controller/workflow-schedule.controller.js.map +0 -1
  519. package/dist/module/workflow-schedule/dto/create-schedule.dto.d.ts +0 -32
  520. package/dist/module/workflow-schedule/dto/create-schedule.dto.js +0 -163
  521. package/dist/module/workflow-schedule/dto/create-schedule.dto.js.map +0 -1
  522. package/dist/module/workflow-schedule/dto/get-execution-logs.dto.d.ts +0 -35
  523. package/dist/module/workflow-schedule/dto/get-execution-logs.dto.js +0 -124
  524. package/dist/module/workflow-schedule/dto/get-execution-logs.dto.js.map +0 -1
  525. package/dist/module/workflow-schedule/dto/update-schedule.dto.d.ts +0 -19
  526. package/dist/module/workflow-schedule/dto/update-schedule.dto.js +0 -106
  527. package/dist/module/workflow-schedule/dto/update-schedule.dto.js.map +0 -1
  528. package/dist/module/workflow-schedule/entities/scheduled-workflow.entity.d.ts +0 -30
  529. package/dist/module/workflow-schedule/entities/scheduled-workflow.entity.js +0 -113
  530. package/dist/module/workflow-schedule/entities/scheduled-workflow.entity.js.map +0 -1
  531. package/dist/module/workflow-schedule/entities/workflow-execution-log.entity.d.ts +0 -34
  532. package/dist/module/workflow-schedule/entities/workflow-execution-log.entity.js +0 -118
  533. package/dist/module/workflow-schedule/entities/workflow-execution-log.entity.js.map +0 -1
  534. package/dist/module/workflow-schedule/interfaces/schedule-job-data.interface.d.ts +0 -44
  535. package/dist/module/workflow-schedule/interfaces/schedule-job-data.interface.js +0 -3
  536. package/dist/module/workflow-schedule/interfaces/schedule-job-data.interface.js.map +0 -1
  537. package/dist/module/workflow-schedule/processors/schedule.processor.d.ts +0 -31
  538. package/dist/module/workflow-schedule/processors/schedule.processor.js +0 -409
  539. package/dist/module/workflow-schedule/processors/schedule.processor.js.map +0 -1
  540. package/dist/module/workflow-schedule/service/workflow-schedule.service.d.ts +0 -44
  541. package/dist/module/workflow-schedule/service/workflow-schedule.service.js +0 -434
  542. package/dist/module/workflow-schedule/service/workflow-schedule.service.js.map +0 -1
  543. package/dist/module/workflow-schedule/workflow-schedule.module.d.ts +0 -2
  544. package/dist/module/workflow-schedule/workflow-schedule.module.js +0 -44
  545. package/dist/module/workflow-schedule/workflow-schedule.module.js.map +0 -1
  546. package/src/config/bull.config.ts +0 -69
  547. package/src/module/meta/repository/entity-attribute-update.repository.ts +0 -44
  548. package/src/module/meta/service/entity-attribute-update.service.ts +0 -29
  549. package/src/module/workflow-automation/service/schedule-handler.service.ts +0 -150
  550. package/src/module/workflow-schedule/INSTALLATION.md +0 -244
  551. package/src/module/workflow-schedule/README.md +0 -422
  552. package/src/module/workflow-schedule/constants/schedule.constants.ts +0 -48
  553. package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +0 -255
  554. package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +0 -510
  555. package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +0 -362
  556. package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +0 -68
  557. package/src/module/workflow-schedule/dto/create-schedule.dto.ts +0 -147
  558. package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +0 -119
  559. package/src/module/workflow-schedule/dto/update-schedule.dto.ts +0 -96
  560. package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +0 -148
  561. package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +0 -154
  562. package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +0 -53
  563. package/src/module/workflow-schedule/processors/schedule.processor.ts +0 -584
  564. package/src/module/workflow-schedule/service/workflow-schedule.service.ts +0 -600
  565. package/src/module/workflow-schedule/workflow-schedule.module.ts +0 -43
@@ -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
+ }