rez_core 3.1.134 → 3.1.136

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 (383) 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 +2 -1
  23. package/dist/module/integration/service/integration.service.js.map +1 -1
  24. package/dist/module/integration/service/wrapper.service.js +25 -25
  25. package/dist/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.js +1 -0
  26. package/dist/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.js.map +1 -1
  27. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  28. package/dist/module/listmaster/service/list-master.service.js +2 -2
  29. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  30. package/dist/module/mapper/service/mapper.service.js +2 -2
  31. package/dist/module/meta/service/entity-dynamic.service.js +18 -18
  32. package/dist/module/meta/service/entity-list.service.js +3 -3
  33. package/dist/module/meta/service/entity-master.service.js +3 -3
  34. package/dist/module/meta/service/entity-relation.service.js +11 -11
  35. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  36. package/dist/module/meta/service/resolver.service.js +3 -3
  37. package/dist/module/module/repository/menu.repository.js +12 -12
  38. package/dist/module/notification/service/notification.service.js +12 -12
  39. package/dist/module/user/controller/login.controller.js +18 -18
  40. package/dist/module/user/service/role.service.js +4 -4
  41. package/dist/module/user/service/user-session.service.js +2 -2
  42. package/dist/module/workflow/repository/action.repository.js +16 -16
  43. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  44. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  45. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  46. package/dist/module/workflow/repository/stage-movement.repository.js +11 -11
  47. package/dist/module/workflow/repository/stage.repository.js +8 -8
  48. package/dist/module/workflow/service/action-template-mapping.service.js +10 -10
  49. package/dist/module/workflow/service/action.service.js +7 -7
  50. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  51. package/dist/module/workflow/service/stage-group.service.js +5 -5
  52. package/dist/module/workflow/service/stage.service.js +2 -2
  53. package/dist/module/workflow/service/task.service.js +33 -33
  54. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  55. package/dist/module/workflow/service/workflow-meta.service.js +50 -50
  56. package/dist/module/workflow/service/workflow.service.js +2 -2
  57. package/dist/tsconfig.build.tsbuildinfo +1 -1
  58. package/dist/utils/service/reflection-helper.service.js +2 -2
  59. package/docs/modules/event-driven-integration-design.md +91 -91
  60. package/docs/modules/integration.md +250 -250
  61. package/eslint.config.mjs +34 -34
  62. package/nest-cli.json +14 -14
  63. package/package.json +118 -118
  64. package/server.log +850 -0
  65. package/src/app.controller.ts +12 -12
  66. package/src/app.module.ts +49 -49
  67. package/src/app.service.ts +8 -8
  68. package/src/config/config.module.ts +18 -18
  69. package/src/config/database.config.ts +23 -23
  70. package/src/constant/global.constant.ts +67 -67
  71. package/src/core.module.ts +81 -81
  72. package/src/decorators/roles.decorator.ts +7 -7
  73. package/src/dtos/response.dto.ts +6 -6
  74. package/src/dtos/response.ts +5 -5
  75. package/src/index.ts +1 -1
  76. package/src/module/auth/auth.module.ts +49 -49
  77. package/src/module/auth/controller/auth.controller.ts +28 -28
  78. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  79. package/src/module/auth/guards/jwt.guard.ts +22 -22
  80. package/src/module/auth/guards/role.guard.ts +68 -68
  81. package/src/module/auth/services/auth.service.ts +50 -50
  82. package/src/module/auth/services/jwt.service.ts +11 -11
  83. package/src/module/auth/strategies/google.strategy.ts +54 -54
  84. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  85. package/src/module/auth/strategies/local.strategy.ts +13 -13
  86. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  87. package/src/module/dashboard/dashboard.module.ts +21 -21
  88. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  89. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  90. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  91. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  92. package/src/module/dev/dev.module.ts +12 -12
  93. package/src/module/dev/service/dev.service.ts +7 -7
  94. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  95. package/src/module/enterprise/enterprise.module.ts +30 -30
  96. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  97. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  98. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  99. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  100. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  101. package/src/module/enterprise/repository/school.repository.ts +282 -282
  102. package/src/module/enterprise/service/brand.service.ts +5 -5
  103. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  104. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  105. package/src/module/enterprise/service/organization.service.ts +145 -145
  106. package/src/module/filter/controller/filter.controller.ts +84 -84
  107. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  108. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  109. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  110. package/src/module/filter/filter.module.ts +31 -31
  111. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  112. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  113. package/src/module/filter/service/filter.service.ts +841 -841
  114. package/src/module/filter/service/saved-filter.service.ts +170 -170
  115. package/src/module/ics/controller/ics.controller.ts +21 -21
  116. package/src/module/ics/dto/ics.dto.ts +55 -55
  117. package/src/module/ics/ics.module.ts +13 -13
  118. package/src/module/ics/service/ics.service.ts +60 -60
  119. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  120. package/src/module/integration/controller/integration.controller.ts +662 -662
  121. package/src/module/integration/controller/wrapper.controller.ts +39 -39
  122. package/src/module/integration/dto/create-config.dto.ts +526 -526
  123. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  124. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  125. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  126. package/src/module/integration/entity/user-integration.entity.ts +70 -70
  127. package/src/module/integration/examples/usage.example.ts +338 -338
  128. package/src/module/integration/factories/base.factory.ts +7 -7
  129. package/src/module/integration/factories/email.factory.ts +49 -49
  130. package/src/module/integration/factories/integration.factory.ts +121 -121
  131. package/src/module/integration/factories/sms.factory.ts +51 -51
  132. package/src/module/integration/factories/telephone.factory.ts +41 -41
  133. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  134. package/src/module/integration/integration.module.ts +110 -110
  135. package/src/module/integration/service/calendar-event.service.ts +118 -118
  136. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  137. package/src/module/integration/service/integration-queue.service.ts +229 -229
  138. package/src/module/integration/service/integration.service.ts +2558 -2557
  139. package/src/module/integration/service/oauth.service.ts +224 -224
  140. package/src/module/integration/service/wrapper.service.ts +515 -515
  141. package/src/module/integration/strategies/email/gmail-api.strategy.ts +288 -288
  142. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  143. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  144. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +262 -262
  145. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  146. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  147. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  148. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  149. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  150. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  151. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  152. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -371
  153. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  154. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  155. package/src/module/layout/controller/layout.controller.ts +47 -47
  156. package/src/module/layout/entity/header-items.entity.ts +28 -28
  157. package/src/module/layout/entity/header-section.entity.ts +19 -19
  158. package/src/module/layout/layout.module.ts +21 -21
  159. package/src/module/layout/repository/header-items.repository.ts +18 -18
  160. package/src/module/layout/repository/header-section.repository.ts +22 -22
  161. package/src/module/layout/service/header-section.service.ts +25 -25
  162. package/src/module/layout_preference/controller/layout_preference.controller.ts +47 -47
  163. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  164. package/src/module/layout_preference/layout_preference.module.ts +18 -18
  165. package/src/module/layout_preference/repository/layout_preference.repository.ts +30 -30
  166. package/src/module/layout_preference/service/layout_preference.service.ts +172 -172
  167. package/src/module/lead/controller/lead.controller.ts +30 -30
  168. package/src/module/lead/lead.module.ts +14 -14
  169. package/src/module/lead/repository/lead.repository.ts +41 -41
  170. package/src/module/lead/service/lead.service.ts +54 -54
  171. package/src/module/listmaster/controller/list-master.controller.ts +143 -143
  172. package/src/module/listmaster/entity/list-master-items.entity.ts +41 -41
  173. package/src/module/listmaster/entity/list-master.entity.ts +32 -32
  174. package/src/module/listmaster/listmaster.module.ts +30 -30
  175. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  176. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  177. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  178. package/src/module/listmaster/service/list-master.service.ts +360 -360
  179. package/src/module/mapper/controller/field-mapper.controller.ts +69 -69
  180. package/src/module/mapper/controller/mapper.controller.ts +14 -14
  181. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  182. package/src/module/mapper/entity/field-lovs.entity.ts +20 -20
  183. package/src/module/mapper/entity/field-mapper.entity.ts +37 -37
  184. package/src/module/mapper/entity/mapper.entity.ts +17 -17
  185. package/src/module/mapper/mapper.module.ts +34 -34
  186. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  187. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  188. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  189. package/src/module/mapper/service/field-mapper.service.ts +223 -223
  190. package/src/module/mapper/service/mapper.service.ts +72 -72
  191. package/src/module/master/controller/master.controller.ts +74 -74
  192. package/src/module/master/service/master.service.ts +486 -486
  193. package/src/module/meta/controller/app-master.controller.ts +38 -38
  194. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  195. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  196. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  197. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  198. package/src/module/meta/controller/entity.controller.ts +385 -385
  199. package/src/module/meta/controller/media.controller.ts +82 -82
  200. package/src/module/meta/controller/meta.controller.ts +96 -96
  201. package/src/module/meta/controller/view-master.controller.ts +86 -86
  202. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  203. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  204. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  205. package/src/module/meta/entity/app-master.entity.ts +34 -34
  206. package/src/module/meta/entity/attribute-master.entity.ts +87 -87
  207. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  208. package/src/module/meta/entity/entity-master.entity.ts +78 -78
  209. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  210. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  211. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  212. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  213. package/src/module/meta/entity/media-data.entity.ts +32 -32
  214. package/src/module/meta/entity/preference.entity.ts +62 -62
  215. package/src/module/meta/entity/view-master.entity.ts +41 -41
  216. package/src/module/meta/entity.module.ts +156 -156
  217. package/src/module/meta/repository/app-master.repository.ts +20 -20
  218. package/src/module/meta/repository/attribute-master.repository.ts +110 -110
  219. package/src/module/meta/repository/entity-master.repository.ts +66 -66
  220. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  221. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  222. package/src/module/meta/repository/media-data.repository.ts +50 -50
  223. package/src/module/meta/repository/preference.repository.ts +20 -20
  224. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  225. package/src/module/meta/repository/view-master.repository.ts +42 -42
  226. package/src/module/meta/service/app-master.service.ts +37 -37
  227. package/src/module/meta/service/attribute-master.service.ts +117 -117
  228. package/src/module/meta/service/common.service.ts +9 -9
  229. package/src/module/meta/service/entity-dynamic.service.ts +762 -762
  230. package/src/module/meta/service/entity-list.service.ts +205 -205
  231. package/src/module/meta/service/entity-master.service.ts +164 -164
  232. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  233. package/src/module/meta/service/entity-relation.service.ts +69 -69
  234. package/src/module/meta/service/entity-service-impl.service.ts +524 -524
  235. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  236. package/src/module/meta/service/entity-table.service.ts +150 -150
  237. package/src/module/meta/service/entity-validation.service.ts +185 -185
  238. package/src/module/meta/service/entity.service.ts +67 -67
  239. package/src/module/meta/service/field-group.service.ts +103 -103
  240. package/src/module/meta/service/media-data.service.ts +140 -140
  241. package/src/module/meta/service/populate-meta.service.ts +174 -174
  242. package/src/module/meta/service/preference.service.ts +16 -16
  243. package/src/module/meta/service/resolver.service.ts +256 -256
  244. package/src/module/meta/service/section-master.service.ts +104 -104
  245. package/src/module/meta/service/update-form-json.service.ts +22 -22
  246. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  247. package/src/module/meta/service/view-master.service.ts +111 -111
  248. package/src/module/module/controller/menu.controller.ts +15 -15
  249. package/src/module/module/controller/module-access.controller.ts +132 -132
  250. package/src/module/module/entity/menu.entity.ts +43 -43
  251. package/src/module/module/entity/module-access.entity.ts +25 -25
  252. package/src/module/module/entity/module-action.entity.ts +17 -17
  253. package/src/module/module/entity/module.entity.ts +52 -52
  254. package/src/module/module/module.module.ts +42 -42
  255. package/src/module/module/repository/menu.repository.ts +184 -184
  256. package/src/module/module/repository/module-access.repository.ts +327 -327
  257. package/src/module/module/service/menu.service.ts +82 -82
  258. package/src/module/module/service/module-access.service.ts +209 -209
  259. package/src/module/notification/controller/notification.controller.ts +58 -58
  260. package/src/module/notification/controller/otp.controller.ts +117 -117
  261. package/src/module/notification/entity/notification.entity.ts +23 -23
  262. package/src/module/notification/entity/otp.entity.ts +28 -28
  263. package/src/module/notification/firebase-admin.config.ts +22 -22
  264. package/src/module/notification/notification.module.ts +69 -69
  265. package/src/module/notification/repository/otp.repository.ts +27 -27
  266. package/src/module/notification/service/email.service.ts +127 -127
  267. package/src/module/notification/service/notification.service.ts +138 -138
  268. package/src/module/notification/service/otp.service.ts +121 -121
  269. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  270. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  271. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  272. package/src/module/third-party-module/third-party.module.ts +12 -12
  273. package/src/module/user/controller/login.controller.ts +197 -197
  274. package/src/module/user/controller/user.controller.ts +40 -40
  275. package/src/module/user/dto/create-user.dto.ts +62 -62
  276. package/src/module/user/dto/update-user.dto.ts +4 -4
  277. package/src/module/user/entity/role.entity.ts +33 -33
  278. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  279. package/src/module/user/entity/user-session.entity.ts +61 -61
  280. package/src/module/user/entity/user.entity.ts +68 -68
  281. package/src/module/user/repository/role.repository.ts +96 -96
  282. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  283. package/src/module/user/repository/user.repository.ts +50 -50
  284. package/src/module/user/repository/userSession.repository.ts +33 -33
  285. package/src/module/user/service/login.service.ts +280 -280
  286. package/src/module/user/service/role.service.ts +189 -189
  287. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  288. package/src/module/user/service/user-session.service.ts +168 -168
  289. package/src/module/user/service/user.service.ts +353 -353
  290. package/src/module/user/user.module.ts +65 -65
  291. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  292. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  293. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  294. package/src/module/workflow/controller/action.controller.ts +95 -95
  295. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  296. package/src/module/workflow/controller/comm-template.controller.ts +34 -34
  297. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  298. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  299. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  300. package/src/module/workflow/controller/stage.controller.ts +50 -50
  301. package/src/module/workflow/controller/task.controller.ts +77 -77
  302. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  303. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  304. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  305. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  306. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  307. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  308. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  309. package/src/module/workflow/entity/action.entity.ts +50 -50
  310. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  311. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  312. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  313. package/src/module/workflow/entity/form-master.entity.ts +27 -27
  314. package/src/module/workflow/entity/form.entity.ts +25 -25
  315. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  316. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  317. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  318. package/src/module/workflow/entity/stage.entity.ts +20 -20
  319. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  320. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  321. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  322. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  323. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  324. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  325. package/src/module/workflow/repository/action-data.repository.ts +219 -219
  326. package/src/module/workflow/repository/action.repository.ts +277 -277
  327. package/src/module/workflow/repository/activity-log.repository.ts +121 -121
  328. package/src/module/workflow/repository/comm-template.repository.ts +142 -142
  329. package/src/module/workflow/repository/form-master.repository.ts +61 -61
  330. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  331. package/src/module/workflow/repository/stage-movement.repository.ts +227 -227
  332. package/src/module/workflow/repository/stage.repository.ts +172 -172
  333. package/src/module/workflow/repository/task.repository.ts +113 -113
  334. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  335. package/src/module/workflow/service/action-category.service.ts +33 -33
  336. package/src/module/workflow/service/action-data.service.ts +62 -62
  337. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  338. package/src/module/workflow/service/action-template-mapping.service.ts +55 -55
  339. package/src/module/workflow/service/action.service.ts +247 -247
  340. package/src/module/workflow/service/activity-log.service.ts +107 -107
  341. package/src/module/workflow/service/comm-template.service.ts +121 -121
  342. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  343. package/src/module/workflow/service/form-master.service.ts +35 -35
  344. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  345. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  346. package/src/module/workflow/service/stage-group.service.ts +300 -300
  347. package/src/module/workflow/service/stage.service.ts +199 -199
  348. package/src/module/workflow/service/task.service.ts +504 -504
  349. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  350. package/src/module/workflow/service/workflow-meta.service.ts +581 -581
  351. package/src/module/workflow/service/workflow.service.ts +205 -205
  352. package/src/module/workflow/workflow.module.ts +176 -176
  353. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  354. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  355. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  356. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  357. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  358. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  359. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  360. package/src/module/workflow-automation/service/workflow-automation.service.ts +343 -343
  361. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  362. package/src/resources/dev.properties.yaml +30 -30
  363. package/src/resources/local.properties.yaml +23 -23
  364. package/src/resources/properties.module.ts +12 -12
  365. package/src/resources/properties.yaml.ts +11 -11
  366. package/src/resources/uat.properties.yaml +15 -15
  367. package/src/utils/dto/excel-data.dto.ts +14 -14
  368. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  369. package/src/utils/service/base64util.service.ts +18 -18
  370. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  371. package/src/utils/service/codeGenerator.service.ts +22 -22
  372. package/src/utils/service/dateUtil.service.ts +17 -17
  373. package/src/utils/service/encryptUtil.service.ts +97 -97
  374. package/src/utils/service/excel-helper.service.ts +72 -72
  375. package/src/utils/service/excelUtil.service.ts +15 -15
  376. package/src/utils/service/file-util.service.ts +11 -11
  377. package/src/utils/service/json-util.service.ts +23 -23
  378. package/src/utils/service/loggingUtil.service.ts +34 -34
  379. package/src/utils/service/reflection-helper.service.ts +62 -62
  380. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  381. package/src/utils/utils.module.ts +25 -25
  382. package/tsconfig.build.json +4 -4
  383. package/tsconfig.json +24 -24
@@ -1,403 +1,403 @@
1
- import { Injectable, Logger } from '@nestjs/common';
2
- import axios, { AxiosResponse } from 'axios';
3
- import {
4
- IntegrationStrategy,
5
- IntegrationResult,
6
- } from '../integration.strategy';
7
-
8
- interface WhatsAppConfig {
9
- accessToken: string;
10
- phoneNumberId: string;
11
- apiVersion?: string;
12
- businessAccountId?: string;
13
- }
14
-
15
- interface WhatsAppMessage {
16
- messaging_product: string;
17
- to: string;
18
- type: string;
19
- text?: {
20
- body: string;
21
- preview_url?: boolean;
22
- };
23
- template?: {
24
- name: string;
25
- language: {
26
- code: string;
27
- };
28
- components?: any[];
29
- };
30
- image?: {
31
- link?: string;
32
- caption?: string;
33
- };
34
- document?: {
35
- link?: string;
36
- caption?: string;
37
- filename?: string;
38
- };
39
- audio?: {
40
- link: string;
41
- };
42
- video?: {
43
- link?: string;
44
- caption?: string;
45
- };
46
- location?: {
47
- latitude: number;
48
- longitude: number;
49
- name?: string;
50
- address?: string;
51
- };
52
- interactive?: {
53
- type: string;
54
- body?: {
55
- text: string;
56
- };
57
- footer?: {
58
- text: string;
59
- };
60
- action: any;
61
- };
62
- }
63
-
64
- interface WhatsAppApiResponse {
65
- messaging_product: string;
66
- contacts: Array<{
67
- input: string;
68
- wa_id: string;
69
- }>;
70
- messages: Array<{
71
- id: string;
72
- message_status?: string;
73
- }>;
74
- }
75
-
76
- @Injectable()
77
- export class WhatsAppCloudStrategy implements IntegrationStrategy {
78
- private readonly logger = new Logger(WhatsAppCloudStrategy.name);
79
- private readonly baseUrl = 'https://graph.facebook.com';
80
-
81
- async sendMessage(
82
- to: string,
83
- message: string,
84
- config: any,
85
- ): Promise<IntegrationResult> {
86
- try {
87
- if (!this.validateConfig(config)) {
88
- throw new Error('Invalid WhatsApp Cloud API configuration');
89
- }
90
-
91
- const whatsappConfig = config as WhatsAppConfig;
92
- const apiVersion = whatsappConfig.apiVersion || 'v18.0';
93
- const url = `${this.baseUrl}/${apiVersion}/${whatsappConfig.phoneNumberId}/messages`;
94
-
95
- // Determine message type and prepare payload
96
- const payload = this.prepareMessagePayload(to, message, config);
97
-
98
- const response: AxiosResponse<WhatsAppApiResponse> = await axios.post(
99
- url,
100
- payload,
101
- {
102
- headers: {
103
- Authorization: `Bearer ${whatsappConfig.accessToken}`,
104
- 'Content-Type': 'application/json',
105
- },
106
- timeout: 30000,
107
- },
108
- );
109
-
110
- if (response.data?.messages?.[0]?.id) {
111
- this.logger.log(
112
- `WhatsApp message sent successfully to ${to}, messageId: ${response.data.messages[0].id}`,
113
- );
114
-
115
- return {
116
- success: true,
117
- messageId: response.data.messages[0].id,
118
- provider: 'whatsapp-cloud',
119
- service: 'API',
120
- timestamp: new Date(),
121
- };
122
- } else {
123
- throw new Error('Invalid response from WhatsApp API');
124
- }
125
- } catch (error) {
126
- this.logger.error(
127
- `Failed to send WhatsApp message to ${to}`,
128
- error.response?.data || error.message,
129
- );
130
-
131
- return {
132
- success: false,
133
- provider: 'whatsapp-cloud',
134
- service: 'API',
135
- error: this.extractErrorMessage(error),
136
- timestamp: new Date(),
137
- };
138
- }
139
- }
140
-
141
- private prepareMessagePayload(
142
- to: string,
143
- message: string,
144
- config: any,
145
- ): WhatsAppMessage {
146
- const basePayload: WhatsAppMessage = {
147
- messaging_product: 'whatsapp',
148
- to: this.formatPhoneNumber(to),
149
- type: 'text',
150
- };
151
-
152
- // Handle different message types based on config
153
- if (config.messageType) {
154
- switch (config.messageType) {
155
- case 'template':
156
- return {
157
- ...basePayload,
158
- type: 'template',
159
- template: {
160
- name: config.templateName || 'hello_world',
161
- language: {
162
- code: config.languageCode || 'en_US',
163
- },
164
- components: config.templateComponents || [],
165
- },
166
- };
167
-
168
- case 'image':
169
- return {
170
- ...basePayload,
171
- type: 'image',
172
- image: {
173
- link: config.mediaUrl,
174
- caption: message || config.caption,
175
- },
176
- };
177
-
178
- case 'document':
179
- return {
180
- ...basePayload,
181
- type: 'document',
182
- document: {
183
- link: config.mediaUrl,
184
- caption: message || config.caption,
185
- filename: config.filename,
186
- },
187
- };
188
-
189
- case 'audio':
190
- return {
191
- ...basePayload,
192
- type: 'audio',
193
- audio: {
194
- link: config.mediaUrl,
195
- },
196
- };
197
-
198
- case 'video':
199
- return {
200
- ...basePayload,
201
- type: 'video',
202
- video: {
203
- link: config.mediaUrl,
204
- caption: message || config.caption,
205
- },
206
- };
207
-
208
- case 'location':
209
- return {
210
- ...basePayload,
211
- type: 'location',
212
- location: {
213
- latitude: config.latitude,
214
- longitude: config.longitude,
215
- name: config.locationName,
216
- address: config.locationAddress,
217
- },
218
- };
219
-
220
- case 'interactive':
221
- return {
222
- ...basePayload,
223
- type: 'interactive',
224
- interactive: {
225
- type: config.interactiveType || 'button',
226
- body: {
227
- text: message,
228
- },
229
- footer: config.footer ? { text: config.footer } : undefined,
230
- action: config.interactiveAction,
231
- },
232
- };
233
-
234
- default:
235
- // Fall back to text message
236
- break;
237
- }
238
- }
239
-
240
- // Default text message
241
- return {
242
- ...basePayload,
243
- text: {
244
- body: message,
245
- preview_url: config.previewUrl !== false, // Default true
246
- },
247
- };
248
- }
249
-
250
- private formatPhoneNumber(phoneNumber: string): string {
251
- // Remove any non-digit characters except +
252
- let formatted = phoneNumber.replace(/[^\d+]/g, '');
253
-
254
- // If it doesn't start with +, add country code if provided
255
- if (!formatted.startsWith('+')) {
256
- formatted = `+${formatted}`;
257
- }
258
-
259
- // Remove + for WhatsApp API (it expects numbers without +)
260
- return formatted.substring(1);
261
- }
262
-
263
- private extractErrorMessage(error: any): string {
264
- if (error.response?.data?.error?.message) {
265
- return error.response.data.error.message;
266
- }
267
-
268
- if (error.response?.data?.error?.error_user_msg) {
269
- return error.response.data.error.error_user_msg;
270
- }
271
-
272
- if (error.response?.data?.message) {
273
- return error.response.data.message;
274
- }
275
-
276
- if (error.message) {
277
- return error.message;
278
- }
279
-
280
- return 'Unknown WhatsApp API error';
281
- }
282
-
283
- validateConfig(config: any): boolean {
284
- if (!config || typeof config !== 'object') {
285
- return false;
286
- }
287
-
288
- // Required fields
289
- if (!config.accessToken || !config.phoneNumberId) {
290
- return false;
291
- }
292
-
293
- // Validate message type specific requirements
294
- if (config.messageType) {
295
- switch (config.messageType) {
296
- case 'template':
297
- if (!config.templateName) {
298
- return false;
299
- }
300
- break;
301
-
302
- case 'image':
303
- case 'document':
304
- case 'audio':
305
- case 'video':
306
- if (!config.mediaUrl) {
307
- return false;
308
- }
309
- break;
310
-
311
- case 'location':
312
- if (
313
- typeof config.latitude !== 'number' ||
314
- typeof config.longitude !== 'number'
315
- ) {
316
- return false;
317
- }
318
- break;
319
-
320
- case 'interactive':
321
- if (!config.interactiveAction) {
322
- return false;
323
- }
324
- break;
325
- }
326
- }
327
-
328
- return true;
329
- }
330
-
331
- async getPhoneNumberInfo(config: WhatsAppConfig): Promise<any> {
332
- try {
333
- const apiVersion = config.apiVersion || 'v18.0';
334
- const url = `${this.baseUrl}/${apiVersion}/${config.phoneNumberId}`;
335
-
336
- const response = await axios.get(url, {
337
- headers: {
338
- Authorization: `Bearer ${config.accessToken}`,
339
- },
340
- });
341
-
342
- return response.data;
343
- } catch (error) {
344
- this.logger.error(
345
- 'Failed to get phone number info',
346
- error.response?.data || error.message,
347
- );
348
- throw new Error(
349
- `Failed to get phone number info: ${this.extractErrorMessage(error)}`,
350
- );
351
- }
352
- }
353
-
354
- async getBusinessProfile(config: WhatsAppConfig): Promise<any> {
355
- try {
356
- const apiVersion = config.apiVersion || 'v18.0';
357
- const url = `${this.baseUrl}/${apiVersion}/${config.phoneNumberId}/whatsapp_business_profile`;
358
-
359
- const response = await axios.get(url, {
360
- headers: {
361
- Authorization: `Bearer ${config.accessToken}`,
362
- },
363
- });
364
-
365
- return response.data;
366
- } catch (error) {
367
- this.logger.error(
368
- 'Failed to get business profile',
369
- error.response?.data || error.message,
370
- );
371
- throw new Error(
372
- `Failed to get business profile: ${this.extractErrorMessage(error)}`,
373
- );
374
- }
375
- }
376
-
377
- async updateBusinessProfile(
378
- config: WhatsAppConfig,
379
- profileData: any,
380
- ): Promise<any> {
381
- try {
382
- const apiVersion = config.apiVersion || 'v18.0';
383
- const url = `${this.baseUrl}/${apiVersion}/${config.phoneNumberId}/whatsapp_business_profile`;
384
-
385
- const response = await axios.post(url, profileData, {
386
- headers: {
387
- Authorization: `Bearer ${config.accessToken}`,
388
- 'Content-Type': 'application/json',
389
- },
390
- });
391
-
392
- return response.data;
393
- } catch (error) {
394
- this.logger.error(
395
- 'Failed to update business profile',
396
- error.response?.data || error.message,
397
- );
398
- throw new Error(
399
- `Failed to update business profile: ${this.extractErrorMessage(error)}`,
400
- );
401
- }
402
- }
403
- }
1
+ import { Injectable, Logger } from '@nestjs/common';
2
+ import axios, { AxiosResponse } from 'axios';
3
+ import {
4
+ IntegrationStrategy,
5
+ IntegrationResult,
6
+ } from '../integration.strategy';
7
+
8
+ interface WhatsAppConfig {
9
+ accessToken: string;
10
+ phoneNumberId: string;
11
+ apiVersion?: string;
12
+ businessAccountId?: string;
13
+ }
14
+
15
+ interface WhatsAppMessage {
16
+ messaging_product: string;
17
+ to: string;
18
+ type: string;
19
+ text?: {
20
+ body: string;
21
+ preview_url?: boolean;
22
+ };
23
+ template?: {
24
+ name: string;
25
+ language: {
26
+ code: string;
27
+ };
28
+ components?: any[];
29
+ };
30
+ image?: {
31
+ link?: string;
32
+ caption?: string;
33
+ };
34
+ document?: {
35
+ link?: string;
36
+ caption?: string;
37
+ filename?: string;
38
+ };
39
+ audio?: {
40
+ link: string;
41
+ };
42
+ video?: {
43
+ link?: string;
44
+ caption?: string;
45
+ };
46
+ location?: {
47
+ latitude: number;
48
+ longitude: number;
49
+ name?: string;
50
+ address?: string;
51
+ };
52
+ interactive?: {
53
+ type: string;
54
+ body?: {
55
+ text: string;
56
+ };
57
+ footer?: {
58
+ text: string;
59
+ };
60
+ action: any;
61
+ };
62
+ }
63
+
64
+ interface WhatsAppApiResponse {
65
+ messaging_product: string;
66
+ contacts: Array<{
67
+ input: string;
68
+ wa_id: string;
69
+ }>;
70
+ messages: Array<{
71
+ id: string;
72
+ message_status?: string;
73
+ }>;
74
+ }
75
+
76
+ @Injectable()
77
+ export class WhatsAppCloudStrategy implements IntegrationStrategy {
78
+ private readonly logger = new Logger(WhatsAppCloudStrategy.name);
79
+ private readonly baseUrl = 'https://graph.facebook.com';
80
+
81
+ async sendMessage(
82
+ to: string,
83
+ message: string,
84
+ config: any,
85
+ ): Promise<IntegrationResult> {
86
+ try {
87
+ if (!this.validateConfig(config)) {
88
+ throw new Error('Invalid WhatsApp Cloud API configuration');
89
+ }
90
+
91
+ const whatsappConfig = config as WhatsAppConfig;
92
+ const apiVersion = whatsappConfig.apiVersion || 'v18.0';
93
+ const url = `${this.baseUrl}/${apiVersion}/${whatsappConfig.phoneNumberId}/messages`;
94
+
95
+ // Determine message type and prepare payload
96
+ const payload = this.prepareMessagePayload(to, message, config);
97
+
98
+ const response: AxiosResponse<WhatsAppApiResponse> = await axios.post(
99
+ url,
100
+ payload,
101
+ {
102
+ headers: {
103
+ Authorization: `Bearer ${whatsappConfig.accessToken}`,
104
+ 'Content-Type': 'application/json',
105
+ },
106
+ timeout: 30000,
107
+ },
108
+ );
109
+
110
+ if (response.data?.messages?.[0]?.id) {
111
+ this.logger.log(
112
+ `WhatsApp message sent successfully to ${to}, messageId: ${response.data.messages[0].id}`,
113
+ );
114
+
115
+ return {
116
+ success: true,
117
+ messageId: response.data.messages[0].id,
118
+ provider: 'whatsapp-cloud',
119
+ service: 'API',
120
+ timestamp: new Date(),
121
+ };
122
+ } else {
123
+ throw new Error('Invalid response from WhatsApp API');
124
+ }
125
+ } catch (error) {
126
+ this.logger.error(
127
+ `Failed to send WhatsApp message to ${to}`,
128
+ error.response?.data || error.message,
129
+ );
130
+
131
+ return {
132
+ success: false,
133
+ provider: 'whatsapp-cloud',
134
+ service: 'API',
135
+ error: this.extractErrorMessage(error),
136
+ timestamp: new Date(),
137
+ };
138
+ }
139
+ }
140
+
141
+ private prepareMessagePayload(
142
+ to: string,
143
+ message: string,
144
+ config: any,
145
+ ): WhatsAppMessage {
146
+ const basePayload: WhatsAppMessage = {
147
+ messaging_product: 'whatsapp',
148
+ to: this.formatPhoneNumber(to),
149
+ type: 'text',
150
+ };
151
+
152
+ // Handle different message types based on config
153
+ if (config.messageType) {
154
+ switch (config.messageType) {
155
+ case 'template':
156
+ return {
157
+ ...basePayload,
158
+ type: 'template',
159
+ template: {
160
+ name: config.templateName || 'hello_world',
161
+ language: {
162
+ code: config.languageCode || 'en_US',
163
+ },
164
+ components: config.templateComponents || [],
165
+ },
166
+ };
167
+
168
+ case 'image':
169
+ return {
170
+ ...basePayload,
171
+ type: 'image',
172
+ image: {
173
+ link: config.mediaUrl,
174
+ caption: message || config.caption,
175
+ },
176
+ };
177
+
178
+ case 'document':
179
+ return {
180
+ ...basePayload,
181
+ type: 'document',
182
+ document: {
183
+ link: config.mediaUrl,
184
+ caption: message || config.caption,
185
+ filename: config.filename,
186
+ },
187
+ };
188
+
189
+ case 'audio':
190
+ return {
191
+ ...basePayload,
192
+ type: 'audio',
193
+ audio: {
194
+ link: config.mediaUrl,
195
+ },
196
+ };
197
+
198
+ case 'video':
199
+ return {
200
+ ...basePayload,
201
+ type: 'video',
202
+ video: {
203
+ link: config.mediaUrl,
204
+ caption: message || config.caption,
205
+ },
206
+ };
207
+
208
+ case 'location':
209
+ return {
210
+ ...basePayload,
211
+ type: 'location',
212
+ location: {
213
+ latitude: config.latitude,
214
+ longitude: config.longitude,
215
+ name: config.locationName,
216
+ address: config.locationAddress,
217
+ },
218
+ };
219
+
220
+ case 'interactive':
221
+ return {
222
+ ...basePayload,
223
+ type: 'interactive',
224
+ interactive: {
225
+ type: config.interactiveType || 'button',
226
+ body: {
227
+ text: message,
228
+ },
229
+ footer: config.footer ? { text: config.footer } : undefined,
230
+ action: config.interactiveAction,
231
+ },
232
+ };
233
+
234
+ default:
235
+ // Fall back to text message
236
+ break;
237
+ }
238
+ }
239
+
240
+ // Default text message
241
+ return {
242
+ ...basePayload,
243
+ text: {
244
+ body: message,
245
+ preview_url: config.previewUrl !== false, // Default true
246
+ },
247
+ };
248
+ }
249
+
250
+ private formatPhoneNumber(phoneNumber: string): string {
251
+ // Remove any non-digit characters except +
252
+ let formatted = phoneNumber.replace(/[^\d+]/g, '');
253
+
254
+ // If it doesn't start with +, add country code if provided
255
+ if (!formatted.startsWith('+')) {
256
+ formatted = `+${formatted}`;
257
+ }
258
+
259
+ // Remove + for WhatsApp API (it expects numbers without +)
260
+ return formatted.substring(1);
261
+ }
262
+
263
+ private extractErrorMessage(error: any): string {
264
+ if (error.response?.data?.error?.message) {
265
+ return error.response.data.error.message;
266
+ }
267
+
268
+ if (error.response?.data?.error?.error_user_msg) {
269
+ return error.response.data.error.error_user_msg;
270
+ }
271
+
272
+ if (error.response?.data?.message) {
273
+ return error.response.data.message;
274
+ }
275
+
276
+ if (error.message) {
277
+ return error.message;
278
+ }
279
+
280
+ return 'Unknown WhatsApp API error';
281
+ }
282
+
283
+ validateConfig(config: any): boolean {
284
+ if (!config || typeof config !== 'object') {
285
+ return false;
286
+ }
287
+
288
+ // Required fields
289
+ if (!config.accessToken || !config.phoneNumberId) {
290
+ return false;
291
+ }
292
+
293
+ // Validate message type specific requirements
294
+ if (config.messageType) {
295
+ switch (config.messageType) {
296
+ case 'template':
297
+ if (!config.templateName) {
298
+ return false;
299
+ }
300
+ break;
301
+
302
+ case 'image':
303
+ case 'document':
304
+ case 'audio':
305
+ case 'video':
306
+ if (!config.mediaUrl) {
307
+ return false;
308
+ }
309
+ break;
310
+
311
+ case 'location':
312
+ if (
313
+ typeof config.latitude !== 'number' ||
314
+ typeof config.longitude !== 'number'
315
+ ) {
316
+ return false;
317
+ }
318
+ break;
319
+
320
+ case 'interactive':
321
+ if (!config.interactiveAction) {
322
+ return false;
323
+ }
324
+ break;
325
+ }
326
+ }
327
+
328
+ return true;
329
+ }
330
+
331
+ async getPhoneNumberInfo(config: WhatsAppConfig): Promise<any> {
332
+ try {
333
+ const apiVersion = config.apiVersion || 'v18.0';
334
+ const url = `${this.baseUrl}/${apiVersion}/${config.phoneNumberId}`;
335
+
336
+ const response = await axios.get(url, {
337
+ headers: {
338
+ Authorization: `Bearer ${config.accessToken}`,
339
+ },
340
+ });
341
+
342
+ return response.data;
343
+ } catch (error) {
344
+ this.logger.error(
345
+ 'Failed to get phone number info',
346
+ error.response?.data || error.message,
347
+ );
348
+ throw new Error(
349
+ `Failed to get phone number info: ${this.extractErrorMessage(error)}`,
350
+ );
351
+ }
352
+ }
353
+
354
+ async getBusinessProfile(config: WhatsAppConfig): Promise<any> {
355
+ try {
356
+ const apiVersion = config.apiVersion || 'v18.0';
357
+ const url = `${this.baseUrl}/${apiVersion}/${config.phoneNumberId}/whatsapp_business_profile`;
358
+
359
+ const response = await axios.get(url, {
360
+ headers: {
361
+ Authorization: `Bearer ${config.accessToken}`,
362
+ },
363
+ });
364
+
365
+ return response.data;
366
+ } catch (error) {
367
+ this.logger.error(
368
+ 'Failed to get business profile',
369
+ error.response?.data || error.message,
370
+ );
371
+ throw new Error(
372
+ `Failed to get business profile: ${this.extractErrorMessage(error)}`,
373
+ );
374
+ }
375
+ }
376
+
377
+ async updateBusinessProfile(
378
+ config: WhatsAppConfig,
379
+ profileData: any,
380
+ ): Promise<any> {
381
+ try {
382
+ const apiVersion = config.apiVersion || 'v18.0';
383
+ const url = `${this.baseUrl}/${apiVersion}/${config.phoneNumberId}/whatsapp_business_profile`;
384
+
385
+ const response = await axios.post(url, profileData, {
386
+ headers: {
387
+ Authorization: `Bearer ${config.accessToken}`,
388
+ 'Content-Type': 'application/json',
389
+ },
390
+ });
391
+
392
+ return response.data;
393
+ } catch (error) {
394
+ this.logger.error(
395
+ 'Failed to update business profile',
396
+ error.response?.data || error.message,
397
+ );
398
+ throw new Error(
399
+ `Failed to update business profile: ${this.extractErrorMessage(error)}`,
400
+ );
401
+ }
402
+ }
403
+ }