rez_core 3.1.107 → 3.1.108

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 (384) 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/module/auth/guards/role.guard.js +3 -3
  17. package/dist/module/auth/services/auth.service.js +2 -2
  18. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  19. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  20. package/dist/module/filter/service/filter.service.js +7 -7
  21. package/dist/module/integration/examples/usage.example.js +9 -9
  22. package/dist/module/integration/service/integration.service.js +1 -1
  23. package/dist/module/integration/service/wrapper.service.js +17 -17
  24. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  25. package/dist/module/listmaster/service/list-master.service.js +2 -2
  26. package/dist/module/mapper/repository/mapper.repository.d.ts +0 -1
  27. package/dist/module/mapper/repository/mapper.repository.js +0 -3
  28. package/dist/module/mapper/repository/mapper.repository.js.map +1 -1
  29. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  30. package/dist/module/mapper/service/mapper.service.js +3 -3
  31. package/dist/module/mapper/service/mapper.service.js.map +1 -1
  32. package/dist/module/meta/service/entity-dynamic.service.js +18 -18
  33. package/dist/module/meta/service/entity-list.service.js +3 -3
  34. package/dist/module/meta/service/entity-master.service.js +3 -3
  35. package/dist/module/meta/service/entity-relation.service.js +11 -11
  36. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  37. package/dist/module/meta/service/resolver.service.js +3 -3
  38. package/dist/module/module/repository/menu.repository.js +12 -12
  39. package/dist/module/notification/service/notification.service.js +12 -12
  40. package/dist/module/user/controller/login.controller.js +18 -18
  41. package/dist/module/user/service/role.service.js +4 -4
  42. package/dist/module/user/service/user-session.service.js +2 -2
  43. package/dist/module/workflow/repository/action.repository.js +16 -16
  44. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  45. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  46. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  47. package/dist/module/workflow/repository/stage-movement.repository.js +11 -11
  48. package/dist/module/workflow/repository/stage.repository.js +8 -8
  49. package/dist/module/workflow/service/action-template-mapping.service.js +10 -10
  50. package/dist/module/workflow/service/action.service.js +7 -7
  51. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  52. package/dist/module/workflow/service/stage-group.service.js +5 -5
  53. package/dist/module/workflow/service/stage.service.js +2 -2
  54. package/dist/module/workflow/service/task.service.js +33 -33
  55. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  56. package/dist/module/workflow/service/workflow-meta.service.js +50 -50
  57. package/dist/module/workflow/service/workflow.service.js +2 -2
  58. package/dist/tsconfig.build.tsbuildinfo +1 -1
  59. package/dist/utils/service/reflection-helper.service.js +2 -2
  60. package/docs/modules/event-driven-integration-design.md +91 -91
  61. package/docs/modules/integration.md +250 -250
  62. package/eslint.config.mjs +34 -34
  63. package/nest-cli.json +14 -14
  64. package/package.json +118 -118
  65. package/server.log +850 -0
  66. package/src/app.controller.ts +12 -12
  67. package/src/app.module.ts +49 -49
  68. package/src/app.service.ts +8 -8
  69. package/src/config/config.module.ts +18 -18
  70. package/src/config/database.config.ts +23 -23
  71. package/src/constant/global.constant.ts +67 -67
  72. package/src/core.module.ts +81 -81
  73. package/src/decorators/roles.decorator.ts +7 -7
  74. package/src/dtos/response.dto.ts +6 -6
  75. package/src/dtos/response.ts +5 -5
  76. package/src/index.ts +1 -1
  77. package/src/module/auth/auth.module.ts +49 -49
  78. package/src/module/auth/controller/auth.controller.ts +28 -28
  79. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  80. package/src/module/auth/guards/jwt.guard.ts +22 -22
  81. package/src/module/auth/guards/role.guard.ts +68 -68
  82. package/src/module/auth/services/auth.service.ts +50 -50
  83. package/src/module/auth/services/jwt.service.ts +11 -11
  84. package/src/module/auth/strategies/google.strategy.ts +54 -54
  85. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  86. package/src/module/auth/strategies/local.strategy.ts +13 -13
  87. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  88. package/src/module/dashboard/dashboard.module.ts +21 -21
  89. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  90. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  91. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  92. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  93. package/src/module/dev/dev.module.ts +12 -12
  94. package/src/module/dev/service/dev.service.ts +7 -7
  95. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  96. package/src/module/enterprise/enterprise.module.ts +30 -30
  97. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  98. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  99. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  100. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  101. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  102. package/src/module/enterprise/repository/school.repository.ts +282 -282
  103. package/src/module/enterprise/service/brand.service.ts +5 -5
  104. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  105. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  106. package/src/module/enterprise/service/organization.service.ts +145 -145
  107. package/src/module/filter/controller/filter.controller.ts +84 -84
  108. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  109. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  110. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  111. package/src/module/filter/filter.module.ts +31 -31
  112. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  113. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  114. package/src/module/filter/service/filter.service.ts +841 -841
  115. package/src/module/filter/service/saved-filter.service.ts +170 -170
  116. package/src/module/ics/controller/ics.controller.ts +21 -21
  117. package/src/module/ics/dto/ics.dto.ts +55 -55
  118. package/src/module/ics/ics.module.ts +13 -13
  119. package/src/module/ics/service/ics.service.ts +60 -60
  120. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  121. package/src/module/integration/controller/integration.controller.ts +662 -662
  122. package/src/module/integration/controller/wrapper.controller.ts +39 -39
  123. package/src/module/integration/dto/create-config.dto.ts +526 -526
  124. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  125. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  126. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  127. package/src/module/integration/entity/user-integration.entity.ts +70 -70
  128. package/src/module/integration/examples/usage.example.ts +338 -338
  129. package/src/module/integration/factories/base.factory.ts +7 -7
  130. package/src/module/integration/factories/email.factory.ts +49 -49
  131. package/src/module/integration/factories/integration.factory.ts +121 -121
  132. package/src/module/integration/factories/sms.factory.ts +51 -51
  133. package/src/module/integration/factories/telephone.factory.ts +41 -41
  134. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  135. package/src/module/integration/integration.module.ts +110 -110
  136. package/src/module/integration/service/calendar-event.service.ts +118 -118
  137. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  138. package/src/module/integration/service/integration-queue.service.ts +229 -229
  139. package/src/module/integration/service/integration.service.ts +2530 -2530
  140. package/src/module/integration/service/oauth.service.ts +224 -224
  141. package/src/module/integration/service/wrapper.service.ts +373 -373
  142. package/src/module/integration/strategies/email/gmail-api.strategy.ts +287 -287
  143. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  144. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  145. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +261 -261
  146. package/src/module/integration/strategies/integration.strategy.ts +96 -96
  147. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  148. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  149. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  150. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +237 -237
  151. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +209 -209
  152. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  153. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +371 -371
  154. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  155. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  156. package/src/module/layout/controller/layout.controller.ts +47 -47
  157. package/src/module/layout/entity/header-items.entity.ts +28 -28
  158. package/src/module/layout/entity/header-section.entity.ts +19 -19
  159. package/src/module/layout/layout.module.ts +21 -21
  160. package/src/module/layout/repository/header-items.repository.ts +18 -18
  161. package/src/module/layout/repository/header-section.repository.ts +22 -22
  162. package/src/module/layout/service/header-section.service.ts +25 -25
  163. package/src/module/layout_preference/controller/layout_preference.controller.ts +47 -47
  164. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  165. package/src/module/layout_preference/layout_preference.module.ts +18 -18
  166. package/src/module/layout_preference/repository/layout_preference.repository.ts +30 -30
  167. package/src/module/layout_preference/service/layout_preference.service.ts +140 -140
  168. package/src/module/lead/controller/lead.controller.ts +30 -30
  169. package/src/module/lead/lead.module.ts +14 -14
  170. package/src/module/lead/repository/lead.repository.ts +41 -41
  171. package/src/module/lead/service/lead.service.ts +54 -54
  172. package/src/module/listmaster/controller/list-master.controller.ts +143 -143
  173. package/src/module/listmaster/entity/list-master-items.entity.ts +41 -41
  174. package/src/module/listmaster/entity/list-master.entity.ts +32 -32
  175. package/src/module/listmaster/listmaster.module.ts +30 -30
  176. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  177. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  178. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  179. package/src/module/listmaster/service/list-master.service.ts +360 -360
  180. package/src/module/mapper/controller/field-mapper.controller.ts +69 -69
  181. package/src/module/mapper/controller/mapper.controller.ts +12 -12
  182. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  183. package/src/module/mapper/entity/field-lovs.entity.ts +20 -20
  184. package/src/module/mapper/entity/field-mapper.entity.ts +37 -37
  185. package/src/module/mapper/entity/mapper.entity.ts +17 -17
  186. package/src/module/mapper/mapper.module.ts +34 -34
  187. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  188. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  189. package/src/module/mapper/repository/mapper.repository.ts +14 -18
  190. package/src/module/mapper/service/field-mapper.service.ts +223 -223
  191. package/src/module/mapper/service/mapper.service.ts +72 -73
  192. package/src/module/master/controller/master.controller.ts +74 -74
  193. package/src/module/master/service/master.service.ts +486 -486
  194. package/src/module/meta/controller/app-master.controller.ts +38 -38
  195. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  196. package/src/module/meta/controller/entity-dynamic.controller.ts +111 -111
  197. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  198. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  199. package/src/module/meta/controller/entity.controller.ts +385 -385
  200. package/src/module/meta/controller/media.controller.ts +82 -82
  201. package/src/module/meta/controller/meta.controller.ts +96 -96
  202. package/src/module/meta/controller/view-master.controller.ts +86 -86
  203. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  204. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  205. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  206. package/src/module/meta/entity/app-master.entity.ts +34 -34
  207. package/src/module/meta/entity/attribute-master.entity.ts +87 -87
  208. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  209. package/src/module/meta/entity/entity-master.entity.ts +78 -78
  210. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  211. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  212. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  213. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  214. package/src/module/meta/entity/media-data.entity.ts +32 -32
  215. package/src/module/meta/entity/preference.entity.ts +62 -62
  216. package/src/module/meta/entity/view-master.entity.ts +41 -41
  217. package/src/module/meta/entity.module.ts +156 -156
  218. package/src/module/meta/repository/app-master.repository.ts +20 -20
  219. package/src/module/meta/repository/attribute-master.repository.ts +110 -110
  220. package/src/module/meta/repository/entity-master.repository.ts +61 -61
  221. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  222. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  223. package/src/module/meta/repository/media-data.repository.ts +50 -50
  224. package/src/module/meta/repository/preference.repository.ts +20 -20
  225. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  226. package/src/module/meta/repository/view-master.repository.ts +42 -42
  227. package/src/module/meta/service/app-master.service.ts +37 -37
  228. package/src/module/meta/service/attribute-master.service.ts +117 -117
  229. package/src/module/meta/service/common.service.ts +9 -9
  230. package/src/module/meta/service/entity-dynamic.service.ts +711 -711
  231. package/src/module/meta/service/entity-list.service.ts +205 -205
  232. package/src/module/meta/service/entity-master.service.ts +164 -164
  233. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  234. package/src/module/meta/service/entity-relation.service.ts +69 -69
  235. package/src/module/meta/service/entity-service-impl.service.ts +513 -513
  236. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  237. package/src/module/meta/service/entity-table.service.ts +150 -150
  238. package/src/module/meta/service/entity-validation.service.ts +185 -185
  239. package/src/module/meta/service/entity.service.ts +67 -67
  240. package/src/module/meta/service/field-group.service.ts +103 -103
  241. package/src/module/meta/service/media-data.service.ts +140 -140
  242. package/src/module/meta/service/populate-meta.service.ts +153 -153
  243. package/src/module/meta/service/preference.service.ts +16 -16
  244. package/src/module/meta/service/resolver.service.ts +256 -256
  245. package/src/module/meta/service/section-master.service.ts +104 -104
  246. package/src/module/meta/service/update-form-json.service.ts +22 -22
  247. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  248. package/src/module/meta/service/view-master.service.ts +91 -91
  249. package/src/module/module/controller/menu.controller.ts +15 -15
  250. package/src/module/module/controller/module-access.controller.ts +132 -132
  251. package/src/module/module/entity/menu.entity.ts +43 -43
  252. package/src/module/module/entity/module-access.entity.ts +25 -25
  253. package/src/module/module/entity/module-action.entity.ts +17 -17
  254. package/src/module/module/entity/module.entity.ts +52 -52
  255. package/src/module/module/module.module.ts +42 -42
  256. package/src/module/module/repository/menu.repository.ts +184 -184
  257. package/src/module/module/repository/module-access.repository.ts +324 -324
  258. package/src/module/module/service/menu.service.ts +82 -82
  259. package/src/module/module/service/module-access.service.ts +209 -209
  260. package/src/module/notification/controller/notification.controller.ts +58 -58
  261. package/src/module/notification/controller/otp.controller.ts +117 -117
  262. package/src/module/notification/entity/notification.entity.ts +23 -23
  263. package/src/module/notification/entity/otp.entity.ts +28 -28
  264. package/src/module/notification/firebase-admin.config.ts +22 -22
  265. package/src/module/notification/notification.module.ts +69 -69
  266. package/src/module/notification/repository/otp.repository.ts +27 -27
  267. package/src/module/notification/service/email.service.ts +127 -127
  268. package/src/module/notification/service/notification.service.ts +130 -130
  269. package/src/module/notification/service/otp.service.ts +121 -121
  270. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  271. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  272. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  273. package/src/module/third-party-module/third-party.module.ts +12 -12
  274. package/src/module/user/controller/login.controller.ts +197 -197
  275. package/src/module/user/controller/user.controller.ts +40 -40
  276. package/src/module/user/dto/create-user.dto.ts +62 -62
  277. package/src/module/user/dto/update-user.dto.ts +4 -4
  278. package/src/module/user/entity/role.entity.ts +33 -33
  279. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  280. package/src/module/user/entity/user-session.entity.ts +61 -61
  281. package/src/module/user/entity/user.entity.ts +68 -68
  282. package/src/module/user/repository/role.repository.ts +96 -96
  283. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  284. package/src/module/user/repository/user.repository.ts +50 -50
  285. package/src/module/user/repository/userSession.repository.ts +33 -33
  286. package/src/module/user/service/login.service.ts +280 -280
  287. package/src/module/user/service/role.service.ts +189 -189
  288. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  289. package/src/module/user/service/user-session.service.ts +168 -168
  290. package/src/module/user/service/user.service.ts +353 -353
  291. package/src/module/user/user.module.ts +65 -65
  292. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  293. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  294. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  295. package/src/module/workflow/controller/action.controller.ts +95 -95
  296. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  297. package/src/module/workflow/controller/comm-template.controller.ts +34 -34
  298. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  299. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  300. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  301. package/src/module/workflow/controller/stage.controller.ts +47 -47
  302. package/src/module/workflow/controller/task.controller.ts +77 -77
  303. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  304. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  305. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  306. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  307. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  308. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  309. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  310. package/src/module/workflow/entity/action.entity.ts +50 -50
  311. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  312. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  313. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  314. package/src/module/workflow/entity/form-master.entity.ts +27 -27
  315. package/src/module/workflow/entity/form.entity.ts +25 -25
  316. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  317. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  318. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  319. package/src/module/workflow/entity/stage.entity.ts +20 -20
  320. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  321. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  322. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  323. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  324. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  325. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  326. package/src/module/workflow/repository/action-data.repository.ts +219 -219
  327. package/src/module/workflow/repository/action.repository.ts +277 -277
  328. package/src/module/workflow/repository/activity-log.repository.ts +121 -121
  329. package/src/module/workflow/repository/comm-template.repository.ts +142 -142
  330. package/src/module/workflow/repository/form-master.repository.ts +61 -61
  331. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  332. package/src/module/workflow/repository/stage-movement.repository.ts +227 -227
  333. package/src/module/workflow/repository/stage.repository.ts +118 -118
  334. package/src/module/workflow/repository/task.repository.ts +113 -113
  335. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  336. package/src/module/workflow/service/action-category.service.ts +33 -33
  337. package/src/module/workflow/service/action-data.service.ts +62 -62
  338. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  339. package/src/module/workflow/service/action-template-mapping.service.ts +55 -55
  340. package/src/module/workflow/service/action.service.ts +247 -247
  341. package/src/module/workflow/service/activity-log.service.ts +107 -107
  342. package/src/module/workflow/service/comm-template.service.ts +121 -121
  343. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  344. package/src/module/workflow/service/form-master.service.ts +35 -35
  345. package/src/module/workflow/service/populate-workflow.service.ts +326 -326
  346. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  347. package/src/module/workflow/service/stage-group.service.ts +300 -300
  348. package/src/module/workflow/service/stage.service.ts +140 -140
  349. package/src/module/workflow/service/task.service.ts +503 -503
  350. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  351. package/src/module/workflow/service/workflow-meta.service.ts +564 -564
  352. package/src/module/workflow/service/workflow.service.ts +205 -205
  353. package/src/module/workflow/workflow.module.ts +176 -176
  354. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  355. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  356. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  357. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  358. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  359. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  360. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  361. package/src/module/workflow-automation/service/workflow-automation.service.ts +343 -343
  362. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  363. package/src/resources/dev.properties.yaml +30 -30
  364. package/src/resources/local.properties.yaml +23 -23
  365. package/src/resources/properties.module.ts +12 -12
  366. package/src/resources/properties.yaml.ts +11 -11
  367. package/src/resources/uat.properties.yaml +15 -15
  368. package/src/utils/dto/excel-data.dto.ts +14 -14
  369. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  370. package/src/utils/service/base64util.service.ts +18 -18
  371. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  372. package/src/utils/service/codeGenerator.service.ts +22 -22
  373. package/src/utils/service/dateUtil.service.ts +17 -17
  374. package/src/utils/service/encryptUtil.service.ts +97 -97
  375. package/src/utils/service/excel-helper.service.ts +72 -72
  376. package/src/utils/service/excelUtil.service.ts +15 -15
  377. package/src/utils/service/file-util.service.ts +11 -11
  378. package/src/utils/service/json-util.service.ts +23 -23
  379. package/src/utils/service/loggingUtil.service.ts +34 -34
  380. package/src/utils/service/reflection-helper.service.ts +62 -62
  381. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  382. package/src/utils/utils.module.ts +25 -25
  383. package/tsconfig.build.json +4 -4
  384. package/tsconfig.json +24 -24
@@ -1,371 +1,371 @@
1
- import { Injectable, Logger } from '@nestjs/common';
2
- import axios, { AxiosResponse } from 'axios';
3
- import { randomUUID } from 'crypto';
4
- import {
5
- IntegrationResult,
6
- IntegrationStrategy,
7
- } from '../integration.strategy';
8
-
9
- interface TubelightWhatsAppConfig {
10
- userName: string;
11
- password: string;
12
- tenantId: string;
13
- custUuid?: string;
14
- baseUrl?: string;
15
- templateId?: string;
16
- templateName?: string;
17
- templateLanguage?: string;
18
- variables?: string;
19
- }
20
-
21
- interface TubelightApiResponse {
22
- success: boolean;
23
- messageId?: string;
24
- id?: string;
25
- status?: string;
26
- message?: string;
27
- error?: string;
28
- details?: string;
29
- }
30
-
31
- @Injectable()
32
- export class TubelightWhatsAppStrategy implements IntegrationStrategy {
33
- private readonly logger = new Logger(TubelightWhatsAppStrategy.name);
34
- private readonly defaultBaseUrl =
35
- 'https://portal.tubelightcommunications.com/whatsapp/api/v1';
36
-
37
- async sendMessage(
38
- to: string,
39
- message: string,
40
- config: any,
41
- ): Promise<IntegrationResult> {
42
- try {
43
- if (!this.validateConfig(config)) {
44
- throw new Error('Invalid Tubelight WhatsApp configuration');
45
- }
46
-
47
- const tubelightConfig = config as TubelightWhatsAppConfig;
48
- const token = await this.authenticate(tubelightConfig);
49
-
50
- if (!token) {
51
- throw new Error('Failed to authenticate with Tubelight');
52
- }
53
-
54
- const baseUrl = this.defaultBaseUrl;
55
- const url = `${baseUrl}/bulk/send`;
56
-
57
- const payload = [this.prepareMessagePayload(to, message, config)];
58
-
59
- console.log(payload)
60
-
61
- const response = await axios.post(
62
- url,
63
- payload,
64
- {
65
- headers: {
66
- 'Content-Type': 'application/json',
67
- Authorization: `Bearer ${token}`,
68
- },
69
- timeout: 30000,
70
- },
71
- );
72
-
73
- if (
74
- response.status === 200
75
- ) {
76
- const messageId = response.data.messageId || response.data.id;
77
- this.logger.log(
78
- `Tubelight WhatsApp message sent successfully to ${to}, messageId: ${messageId}`,
79
- );
80
-
81
- return {
82
- success: true,
83
- messageId: messageId,
84
- provider: 'tubelight',
85
- service: 'API',
86
- timestamp: new Date(),
87
- };
88
- } else {
89
- throw new Error(
90
- response.data?.error ||
91
- response.data?.message ||
92
- 'Invalid response from Tubelight API',
93
- );
94
- }
95
- } catch (error) {
96
- this.logger.error(
97
- `Failed to send Tubelight WhatsApp message to ${to}`,
98
- error.response?.data || error.message,
99
- );
100
-
101
- return {
102
- success: false,
103
- provider: 'tubelight',
104
- service: 'API',
105
- error: this.extractErrorMessage(error),
106
- timestamp: new Date(),
107
- };
108
- }
109
- }
110
-
111
- private async authenticate(
112
- config: TubelightWhatsAppConfig,
113
- ): Promise<string | null> {
114
- try {
115
- const authUrl = 'https://portal.tubelightcommunications.com/api/authentication/login';
116
-
117
- const response = await axios.post(
118
- authUrl,
119
- {
120
- username: config.userName,
121
- password: config.password,
122
- validityTime: 3600,
123
- },
124
- {
125
- headers: {
126
- 'Content-Type': 'application/json',
127
- },
128
- },
129
- );
130
-
131
- const data = response.data as {
132
- bearer_token?: string;
133
- accessToken?: string;
134
- token?: string;
135
- authToken?: string;
136
- success?: boolean;
137
- };
138
-
139
- // Return token in various possible formats
140
- const token = data?.bearer_token || data?.accessToken || data?.token || data?.authToken || null;
141
-
142
- if (token) {
143
- this.logger.log('Successfully authenticated with Tubelight');
144
- return token;
145
- }
146
-
147
- this.logger.warn('No token found in Tubelight auth response');
148
- return null;
149
- } catch (error) {
150
- const errorMessage = error.response?.data
151
- ? JSON.stringify(error.response.data)
152
- : error.message;
153
- this.logger.error(
154
- 'Failed to authenticate with Tubelight:',
155
- errorMessage,
156
- );
157
- return null;
158
- }
159
- }
160
-
161
- private prepareMessagePayload(to: string, message: string, config: any): any {
162
- const basePayload = {
163
- cust_uuid: config.custUuid || randomUUID(),
164
- to: [this.formatPhoneNumber(to)],
165
- };
166
-
167
- // If templateId exists, send template message
168
- if (config.templateId || config.templateName) {
169
- const messagePayload: any = {
170
- type: 'template',
171
- template_name: config.templateId || config.templateName,
172
- language: config.templateLanguage || 'en',
173
- };
174
-
175
- // Add body_params if provided
176
- if (config.variables) {
177
- console.log("variables", config.variables)
178
- try {
179
- // Parse JSON string
180
- const parsedVariables = typeof config.variables === 'string'
181
- ? JSON.parse(config.variables)
182
- : config.variables;
183
-
184
- // Convert object to array of values, or use array as-is
185
- messagePayload.body_params = Array.isArray(parsedVariables)
186
- ? parsedVariables
187
- : Object.values(parsedVariables);
188
- } catch (e) {
189
- this.logger.error('Failed to parse variables JSON:', e.message);
190
- messagePayload.body_params = [];
191
- }
192
- }
193
-
194
- return {
195
- ...basePayload,
196
- message: messagePayload,
197
- };
198
- }
199
-
200
- // Default text message
201
- return {
202
- ...basePayload,
203
- message: {
204
- type: 'text',
205
- text: message,
206
- },
207
- };
208
- }
209
-
210
- private formatPhoneNumber(phoneNumber: string): string {
211
- // Remove any non-digit characters
212
- let formatted = phoneNumber.replace(/\D/g, '');
213
-
214
- return formatted;
215
- }
216
-
217
- private extractErrorMessage(error: any): string {
218
- if (error.response?.data?.error) {
219
- return error.response.data.error;
220
- }
221
-
222
- if (error.response?.data?.message) {
223
- return error.response.data.message;
224
- }
225
-
226
- if (error.response?.data?.details) {
227
- return error.response.data.details;
228
- }
229
-
230
- if (error.message) {
231
- return error.message;
232
- }
233
-
234
- return 'Unknown Tubelight API error';
235
- }
236
-
237
- validateConfig(config: any): boolean {
238
- if (!config || typeof config !== 'object') {
239
- return false;
240
- }
241
-
242
- // Required fields
243
- if (!config.userName || !config.password || !config.tenantId) {
244
- return false;
245
- }
246
-
247
- return true;
248
- }
249
-
250
- async getAccountInfo(config: TubelightWhatsAppConfig): Promise<any> {
251
- try {
252
- const token = await this.authenticate(config);
253
- if (!token) {
254
- throw new Error('Authentication failed');
255
- }
256
-
257
- const baseUrl = config.baseUrl || this.defaultBaseUrl;
258
- const url = `${baseUrl}/account/info`;
259
-
260
- const response = await axios.get(url, {
261
- headers: {
262
- Authorization: `Bearer ${token}`,
263
- },
264
- });
265
-
266
- return response.data;
267
- } catch (error) {
268
- this.logger.error(
269
- 'Failed to get Tubelight account info',
270
- error.response?.data || error.message,
271
- );
272
- throw new Error(
273
- `Failed to get account info: ${this.extractErrorMessage(error)}`,
274
- );
275
- }
276
- }
277
-
278
- async getTemplates(config: TubelightWhatsAppConfig): Promise<{
279
- success: boolean;
280
- data?: Array<{
281
- label: string;
282
- value: string;
283
- }>;
284
- error?: string;
285
- }> {
286
- try {
287
- const token = await this.authenticate(config);
288
- if (!token) {
289
- throw new Error('Authentication failed');
290
- }
291
-
292
- const url = `${this.defaultBaseUrl}/retreive/template`;
293
-
294
- const response = await axios.post(
295
- url,
296
- {},
297
- {
298
- headers: {
299
- 'Content-Type': 'application/json',
300
- Authorization: `Bearer ${token}`,
301
- },
302
- },
303
- );
304
-
305
- const templates = response.data?.data || response.data?.templates || response.data || [];
306
-
307
- // Format the response with templateName as both label and value
308
- const formattedTemplates = Array.isArray(templates)
309
- ? templates.map((template: any) => ({
310
- label: template.templateName,
311
- value: template.templateName,
312
- }))
313
- : [];
314
-
315
- return {
316
- success: true,
317
- data: formattedTemplates,
318
- };
319
- } catch (error) {
320
- let errorMessage = 'Failed to fetch Tubelight templates';
321
-
322
- if (error.response?.status === 401) {
323
- errorMessage = 'Authentication failed';
324
- } else if (error.response?.data?.message) {
325
- errorMessage = error.response.data.message;
326
- } else if (error.response?.data?.error) {
327
- errorMessage = error.response.data.error;
328
- } else if (error.message) {
329
- errorMessage = error.message;
330
- }
331
-
332
- this.logger.error('Failed to get Tubelight templates', errorMessage);
333
-
334
- return {
335
- success: false,
336
- error: errorMessage,
337
- };
338
- }
339
- }
340
-
341
- async getMessageStatus(
342
- config: TubelightWhatsAppConfig,
343
- messageId: string,
344
- ): Promise<any> {
345
- try {
346
- const token = await this.authenticate(config);
347
- if (!token) {
348
- throw new Error('Authentication failed');
349
- }
350
-
351
- const baseUrl = config.baseUrl || this.defaultBaseUrl;
352
- const url = `${baseUrl}/messages/${messageId}/status`;
353
-
354
- const response = await axios.get(url, {
355
- headers: {
356
- Authorization: `Bearer ${token}`,
357
- },
358
- });
359
-
360
- return response.data;
361
- } catch (error) {
362
- this.logger.error(
363
- 'Failed to get message status',
364
- error.response?.data || error.message,
365
- );
366
- throw new Error(
367
- `Failed to get message status: ${this.extractErrorMessage(error)}`,
368
- );
369
- }
370
- }
371
- }
1
+ import { Injectable, Logger } from '@nestjs/common';
2
+ import axios, { AxiosResponse } from 'axios';
3
+ import { randomUUID } from 'crypto';
4
+ import {
5
+ IntegrationResult,
6
+ IntegrationStrategy,
7
+ } from '../integration.strategy';
8
+
9
+ interface TubelightWhatsAppConfig {
10
+ userName: string;
11
+ password: string;
12
+ tenantId: string;
13
+ custUuid?: string;
14
+ baseUrl?: string;
15
+ templateId?: string;
16
+ templateName?: string;
17
+ templateLanguage?: string;
18
+ variables?: string;
19
+ }
20
+
21
+ interface TubelightApiResponse {
22
+ success: boolean;
23
+ messageId?: string;
24
+ id?: string;
25
+ status?: string;
26
+ message?: string;
27
+ error?: string;
28
+ details?: string;
29
+ }
30
+
31
+ @Injectable()
32
+ export class TubelightWhatsAppStrategy implements IntegrationStrategy {
33
+ private readonly logger = new Logger(TubelightWhatsAppStrategy.name);
34
+ private readonly defaultBaseUrl =
35
+ 'https://portal.tubelightcommunications.com/whatsapp/api/v1';
36
+
37
+ async sendMessage(
38
+ to: string,
39
+ message: string,
40
+ config: any,
41
+ ): Promise<IntegrationResult> {
42
+ try {
43
+ if (!this.validateConfig(config)) {
44
+ throw new Error('Invalid Tubelight WhatsApp configuration');
45
+ }
46
+
47
+ const tubelightConfig = config as TubelightWhatsAppConfig;
48
+ const token = await this.authenticate(tubelightConfig);
49
+
50
+ if (!token) {
51
+ throw new Error('Failed to authenticate with Tubelight');
52
+ }
53
+
54
+ const baseUrl = this.defaultBaseUrl;
55
+ const url = `${baseUrl}/bulk/send`;
56
+
57
+ const payload = [this.prepareMessagePayload(to, message, config)];
58
+
59
+ console.log(payload)
60
+
61
+ const response = await axios.post(
62
+ url,
63
+ payload,
64
+ {
65
+ headers: {
66
+ 'Content-Type': 'application/json',
67
+ Authorization: `Bearer ${token}`,
68
+ },
69
+ timeout: 30000,
70
+ },
71
+ );
72
+
73
+ if (
74
+ response.status === 200
75
+ ) {
76
+ const messageId = response.data.messageId || response.data.id;
77
+ this.logger.log(
78
+ `Tubelight WhatsApp message sent successfully to ${to}, messageId: ${messageId}`,
79
+ );
80
+
81
+ return {
82
+ success: true,
83
+ messageId: messageId,
84
+ provider: 'tubelight',
85
+ service: 'API',
86
+ timestamp: new Date(),
87
+ };
88
+ } else {
89
+ throw new Error(
90
+ response.data?.error ||
91
+ response.data?.message ||
92
+ 'Invalid response from Tubelight API',
93
+ );
94
+ }
95
+ } catch (error) {
96
+ this.logger.error(
97
+ `Failed to send Tubelight WhatsApp message to ${to}`,
98
+ error.response?.data || error.message,
99
+ );
100
+
101
+ return {
102
+ success: false,
103
+ provider: 'tubelight',
104
+ service: 'API',
105
+ error: this.extractErrorMessage(error),
106
+ timestamp: new Date(),
107
+ };
108
+ }
109
+ }
110
+
111
+ private async authenticate(
112
+ config: TubelightWhatsAppConfig,
113
+ ): Promise<string | null> {
114
+ try {
115
+ const authUrl = 'https://portal.tubelightcommunications.com/api/authentication/login';
116
+
117
+ const response = await axios.post(
118
+ authUrl,
119
+ {
120
+ username: config.userName,
121
+ password: config.password,
122
+ validityTime: 3600,
123
+ },
124
+ {
125
+ headers: {
126
+ 'Content-Type': 'application/json',
127
+ },
128
+ },
129
+ );
130
+
131
+ const data = response.data as {
132
+ bearer_token?: string;
133
+ accessToken?: string;
134
+ token?: string;
135
+ authToken?: string;
136
+ success?: boolean;
137
+ };
138
+
139
+ // Return token in various possible formats
140
+ const token = data?.bearer_token || data?.accessToken || data?.token || data?.authToken || null;
141
+
142
+ if (token) {
143
+ this.logger.log('Successfully authenticated with Tubelight');
144
+ return token;
145
+ }
146
+
147
+ this.logger.warn('No token found in Tubelight auth response');
148
+ return null;
149
+ } catch (error) {
150
+ const errorMessage = error.response?.data
151
+ ? JSON.stringify(error.response.data)
152
+ : error.message;
153
+ this.logger.error(
154
+ 'Failed to authenticate with Tubelight:',
155
+ errorMessage,
156
+ );
157
+ return null;
158
+ }
159
+ }
160
+
161
+ private prepareMessagePayload(to: string, message: string, config: any): any {
162
+ const basePayload = {
163
+ cust_uuid: config.custUuid || randomUUID(),
164
+ to: [this.formatPhoneNumber(to)],
165
+ };
166
+
167
+ // If templateId exists, send template message
168
+ if (config.templateId || config.templateName) {
169
+ const messagePayload: any = {
170
+ type: 'template',
171
+ template_name: config.templateId || config.templateName,
172
+ language: config.templateLanguage || 'en',
173
+ };
174
+
175
+ // Add body_params if provided
176
+ if (config.variables) {
177
+ console.log("variables", config.variables)
178
+ try {
179
+ // Parse JSON string
180
+ const parsedVariables = typeof config.variables === 'string'
181
+ ? JSON.parse(config.variables)
182
+ : config.variables;
183
+
184
+ // Convert object to array of values, or use array as-is
185
+ messagePayload.body_params = Array.isArray(parsedVariables)
186
+ ? parsedVariables
187
+ : Object.values(parsedVariables);
188
+ } catch (e) {
189
+ this.logger.error('Failed to parse variables JSON:', e.message);
190
+ messagePayload.body_params = [];
191
+ }
192
+ }
193
+
194
+ return {
195
+ ...basePayload,
196
+ message: messagePayload,
197
+ };
198
+ }
199
+
200
+ // Default text message
201
+ return {
202
+ ...basePayload,
203
+ message: {
204
+ type: 'text',
205
+ text: message,
206
+ },
207
+ };
208
+ }
209
+
210
+ private formatPhoneNumber(phoneNumber: string): string {
211
+ // Remove any non-digit characters
212
+ let formatted = phoneNumber.replace(/\D/g, '');
213
+
214
+ return formatted;
215
+ }
216
+
217
+ private extractErrorMessage(error: any): string {
218
+ if (error.response?.data?.error) {
219
+ return error.response.data.error;
220
+ }
221
+
222
+ if (error.response?.data?.message) {
223
+ return error.response.data.message;
224
+ }
225
+
226
+ if (error.response?.data?.details) {
227
+ return error.response.data.details;
228
+ }
229
+
230
+ if (error.message) {
231
+ return error.message;
232
+ }
233
+
234
+ return 'Unknown Tubelight API error';
235
+ }
236
+
237
+ validateConfig(config: any): boolean {
238
+ if (!config || typeof config !== 'object') {
239
+ return false;
240
+ }
241
+
242
+ // Required fields
243
+ if (!config.userName || !config.password || !config.tenantId) {
244
+ return false;
245
+ }
246
+
247
+ return true;
248
+ }
249
+
250
+ async getAccountInfo(config: TubelightWhatsAppConfig): Promise<any> {
251
+ try {
252
+ const token = await this.authenticate(config);
253
+ if (!token) {
254
+ throw new Error('Authentication failed');
255
+ }
256
+
257
+ const baseUrl = config.baseUrl || this.defaultBaseUrl;
258
+ const url = `${baseUrl}/account/info`;
259
+
260
+ const response = await axios.get(url, {
261
+ headers: {
262
+ Authorization: `Bearer ${token}`,
263
+ },
264
+ });
265
+
266
+ return response.data;
267
+ } catch (error) {
268
+ this.logger.error(
269
+ 'Failed to get Tubelight account info',
270
+ error.response?.data || error.message,
271
+ );
272
+ throw new Error(
273
+ `Failed to get account info: ${this.extractErrorMessage(error)}`,
274
+ );
275
+ }
276
+ }
277
+
278
+ async getTemplates(config: TubelightWhatsAppConfig): Promise<{
279
+ success: boolean;
280
+ data?: Array<{
281
+ label: string;
282
+ value: string;
283
+ }>;
284
+ error?: string;
285
+ }> {
286
+ try {
287
+ const token = await this.authenticate(config);
288
+ if (!token) {
289
+ throw new Error('Authentication failed');
290
+ }
291
+
292
+ const url = `${this.defaultBaseUrl}/retreive/template`;
293
+
294
+ const response = await axios.post(
295
+ url,
296
+ {},
297
+ {
298
+ headers: {
299
+ 'Content-Type': 'application/json',
300
+ Authorization: `Bearer ${token}`,
301
+ },
302
+ },
303
+ );
304
+
305
+ const templates = response.data?.data || response.data?.templates || response.data || [];
306
+
307
+ // Format the response with templateName as both label and value
308
+ const formattedTemplates = Array.isArray(templates)
309
+ ? templates.map((template: any) => ({
310
+ label: template.templateName,
311
+ value: template.templateName,
312
+ }))
313
+ : [];
314
+
315
+ return {
316
+ success: true,
317
+ data: formattedTemplates,
318
+ };
319
+ } catch (error) {
320
+ let errorMessage = 'Failed to fetch Tubelight templates';
321
+
322
+ if (error.response?.status === 401) {
323
+ errorMessage = 'Authentication failed';
324
+ } else if (error.response?.data?.message) {
325
+ errorMessage = error.response.data.message;
326
+ } else if (error.response?.data?.error) {
327
+ errorMessage = error.response.data.error;
328
+ } else if (error.message) {
329
+ errorMessage = error.message;
330
+ }
331
+
332
+ this.logger.error('Failed to get Tubelight templates', errorMessage);
333
+
334
+ return {
335
+ success: false,
336
+ error: errorMessage,
337
+ };
338
+ }
339
+ }
340
+
341
+ async getMessageStatus(
342
+ config: TubelightWhatsAppConfig,
343
+ messageId: string,
344
+ ): Promise<any> {
345
+ try {
346
+ const token = await this.authenticate(config);
347
+ if (!token) {
348
+ throw new Error('Authentication failed');
349
+ }
350
+
351
+ const baseUrl = config.baseUrl || this.defaultBaseUrl;
352
+ const url = `${baseUrl}/messages/${messageId}/status`;
353
+
354
+ const response = await axios.get(url, {
355
+ headers: {
356
+ Authorization: `Bearer ${token}`,
357
+ },
358
+ });
359
+
360
+ return response.data;
361
+ } catch (error) {
362
+ this.logger.error(
363
+ 'Failed to get message status',
364
+ error.response?.data || error.message,
365
+ );
366
+ throw new Error(
367
+ `Failed to get message status: ${this.extractErrorMessage(error)}`,
368
+ );
369
+ }
370
+ }
371
+ }