rez_core 4.0.86 → 4.0.87

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/.idea/250218_nodejs_core.iml +11 -8
  2. package/.idea/codeStyles/Project.xml +58 -58
  3. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  4. package/.idea/inspectionProfiles/Project_Default.xml +1 -1
  5. package/.idea/modules.xml +7 -7
  6. package/.idea/prettier.xml +5 -5
  7. package/.idea/vcs.xml +5 -5
  8. package/.prettierrc +3 -3
  9. package/README.md +99 -99
  10. package/dist/module/auth/guards/role.guard.js +3 -3
  11. package/dist/module/auth/services/auth.service.js +2 -2
  12. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  13. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  14. package/dist/module/filter/service/filter.service.js +22 -22
  15. package/dist/module/integration/examples/usage.example.js +9 -9
  16. package/dist/module/integration/service/integration.service.js +1 -1
  17. package/dist/module/integration/service/wrapper.service.js +25 -25
  18. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  19. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  20. package/dist/module/mapper/service/mapper.service.js +2 -2
  21. package/dist/module/meta/service/entity-dynamic.service.js +18 -18
  22. package/dist/module/meta/service/entity-list.service.js +3 -3
  23. package/dist/module/meta/service/entity-master.service.js +3 -3
  24. package/dist/module/meta/service/entity-relation.service.js +11 -11
  25. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  26. package/dist/module/meta/service/resolver.service.js +3 -3
  27. package/dist/module/module/repository/menu.repository.js +12 -12
  28. package/dist/module/notification/service/notification.service.js +9 -9
  29. package/dist/module/user/controller/login.controller.js +18 -18
  30. package/dist/module/user/service/role.service.js +4 -4
  31. package/dist/module/user/service/user-session.service.js +2 -2
  32. package/dist/module/workflow/repository/action.repository.js +20 -20
  33. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  34. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  35. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  36. package/dist/module/workflow/repository/stage-movement.repository.js +15 -15
  37. package/dist/module/workflow/repository/stage.repository.js +8 -8
  38. package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
  39. package/dist/module/workflow/service/action.service.js +7 -7
  40. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  41. package/dist/module/workflow/service/stage-group.service.js +2 -2
  42. package/dist/module/workflow/service/stage.service.js +2 -2
  43. package/dist/module/workflow/service/task.service.js +28 -28
  44. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  45. package/dist/module/workflow/service/workflow-meta.service.js +35 -35
  46. package/dist/module/workflow/service/workflow.service.js +2 -2
  47. package/dist/tsconfig.build.tsbuildinfo +1 -1
  48. package/dist/utils/service/reflection-helper.service.js +2 -2
  49. package/docs/modules/event-driven-integration-design.md +91 -91
  50. package/docs/modules/integration.md +250 -250
  51. package/eslint.config.mjs +34 -34
  52. package/nest-cli.json +14 -14
  53. package/package.json +118 -118
  54. package/src/app.controller.ts +12 -12
  55. package/src/app.module.ts +49 -49
  56. package/src/app.service.ts +8 -8
  57. package/src/config/config.module.ts +18 -18
  58. package/src/config/database.config.ts +23 -23
  59. package/src/constant/global.constant.ts +67 -67
  60. package/src/core.module.ts +81 -81
  61. package/src/decorators/roles.decorator.ts +7 -7
  62. package/src/dtos/response.dto.ts +6 -6
  63. package/src/dtos/response.ts +5 -5
  64. package/src/index.ts +1 -1
  65. package/src/module/auth/auth.module.ts +49 -49
  66. package/src/module/auth/controller/auth.controller.ts +28 -28
  67. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  68. package/src/module/auth/guards/jwt.guard.ts +22 -22
  69. package/src/module/auth/guards/role.guard.ts +68 -68
  70. package/src/module/auth/services/auth.service.ts +50 -50
  71. package/src/module/auth/services/jwt.service.ts +11 -11
  72. package/src/module/auth/strategies/google.strategy.ts +54 -54
  73. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  74. package/src/module/auth/strategies/local.strategy.ts +13 -13
  75. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  76. package/src/module/dashboard/dashboard.module.ts +21 -21
  77. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  78. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  79. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  80. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  81. package/src/module/dev/dev.module.ts +12 -12
  82. package/src/module/dev/service/dev.service.ts +7 -7
  83. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  84. package/src/module/enterprise/enterprise.module.ts +30 -30
  85. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  86. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  87. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  88. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  89. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  90. package/src/module/enterprise/repository/school.repository.ts +278 -278
  91. package/src/module/enterprise/service/brand.service.ts +5 -5
  92. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  93. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  94. package/src/module/enterprise/service/organization.service.ts +145 -145
  95. package/src/module/filter/controller/filter.controller.ts +84 -84
  96. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  97. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  98. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  99. package/src/module/filter/filter.module.ts +31 -31
  100. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  101. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  102. package/src/module/filter/service/filter.service.ts +930 -930
  103. package/src/module/filter/service/saved-filter.service.ts +170 -170
  104. package/src/module/ics/controller/ics.controller.ts +21 -21
  105. package/src/module/ics/dto/ics.dto.ts +55 -55
  106. package/src/module/ics/ics.module.ts +13 -13
  107. package/src/module/ics/service/ics.service.ts +57 -57
  108. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  109. package/src/module/integration/controller/integration.controller.ts +662 -662
  110. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  111. package/src/module/integration/dto/create-config.dto.ts +526 -526
  112. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  113. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  114. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  115. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  116. package/src/module/integration/examples/usage.example.ts +338 -338
  117. package/src/module/integration/factories/base.factory.ts +7 -7
  118. package/src/module/integration/factories/email.factory.ts +49 -49
  119. package/src/module/integration/factories/integration.factory.ts +121 -121
  120. package/src/module/integration/factories/sms.factory.ts +51 -51
  121. package/src/module/integration/factories/telephone.factory.ts +41 -41
  122. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  123. package/src/module/integration/integration.module.ts +110 -110
  124. package/src/module/integration/service/calendar-event.service.ts +118 -118
  125. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  126. package/src/module/integration/service/integration-queue.service.ts +229 -229
  127. package/src/module/integration/service/integration.service.ts +2621 -2621
  128. package/src/module/integration/service/oauth.service.ts +224 -224
  129. package/src/module/integration/service/wrapper.service.ts +499 -499
  130. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  131. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  132. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  133. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  134. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  135. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  136. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  137. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  138. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  139. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  140. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  141. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  142. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  143. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  144. package/src/module/layout/controller/layout.controller.ts +47 -47
  145. package/src/module/layout/entity/header-items.entity.ts +28 -28
  146. package/src/module/layout/entity/header-section.entity.ts +19 -19
  147. package/src/module/layout/layout.module.ts +21 -21
  148. package/src/module/layout/repository/header-items.repository.ts +18 -18
  149. package/src/module/layout/repository/header-section.repository.ts +22 -22
  150. package/src/module/layout/service/header-section.service.ts +25 -25
  151. package/src/module/layout_preference/controller/layout_preference.controller.ts +47 -47
  152. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  153. package/src/module/layout_preference/layout_preference.module.ts +18 -18
  154. package/src/module/layout_preference/repository/layout_preference.repository.ts +30 -30
  155. package/src/module/layout_preference/service/layout_preference.service.ts +172 -172
  156. package/src/module/lead/controller/lead.controller.ts +30 -30
  157. package/src/module/lead/lead.module.ts +14 -14
  158. package/src/module/lead/repository/lead.repository.ts +41 -41
  159. package/src/module/lead/service/lead.service.ts +54 -54
  160. package/src/module/listmaster/controller/list-master.controller.ts +187 -187
  161. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  162. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  163. package/src/module/listmaster/listmaster.module.ts +44 -44
  164. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  165. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  166. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  167. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  168. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  169. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  170. package/src/module/listmaster/service/list-master.service.ts +442 -442
  171. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  172. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  173. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  174. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  175. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  176. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  177. package/src/module/mapper/mapper.module.ts +34 -34
  178. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  179. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  180. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  181. package/src/module/mapper/service/field-mapper.service.ts +254 -254
  182. package/src/module/mapper/service/mapper.service.ts +79 -79
  183. package/src/module/master/controller/master.controller.ts +74 -74
  184. package/src/module/master/service/master.service.ts +483 -483
  185. package/src/module/meta/controller/app-master.controller.ts +38 -38
  186. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  187. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  188. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  189. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  190. package/src/module/meta/controller/entity.controller.ts +392 -392
  191. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  192. package/src/module/meta/controller/media.controller.ts +107 -107
  193. package/src/module/meta/controller/meta.controller.ts +96 -96
  194. package/src/module/meta/controller/view-master.controller.ts +86 -86
  195. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  196. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  197. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  198. package/src/module/meta/entity/app-master.entity.ts +34 -34
  199. package/src/module/meta/entity/attribute-master.entity.ts +89 -89
  200. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  201. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  202. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  203. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  204. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  205. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  206. package/src/module/meta/entity/media-data.entity.ts +32 -32
  207. package/src/module/meta/entity/preference.entity.ts +62 -62
  208. package/src/module/meta/entity/view-master.entity.ts +41 -41
  209. package/src/module/meta/entity.module.ts +158 -158
  210. package/src/module/meta/repository/app-master.repository.ts +20 -20
  211. package/src/module/meta/repository/attribute-master.repository.ts +110 -110
  212. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  213. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  214. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  215. package/src/module/meta/repository/media-data.repository.ts +50 -50
  216. package/src/module/meta/repository/preference.repository.ts +20 -20
  217. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  218. package/src/module/meta/repository/view-master.repository.ts +42 -42
  219. package/src/module/meta/service/app-master.service.ts +37 -37
  220. package/src/module/meta/service/attribute-master.service.ts +117 -117
  221. package/src/module/meta/service/common.service.ts +9 -9
  222. package/src/module/meta/service/entity-dynamic.service.ts +824 -824
  223. package/src/module/meta/service/entity-list.service.ts +205 -205
  224. package/src/module/meta/service/entity-master.service.ts +169 -169
  225. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  226. package/src/module/meta/service/entity-relation.service.ts +69 -69
  227. package/src/module/meta/service/entity-service-impl.service.ts +525 -525
  228. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  229. package/src/module/meta/service/entity-table.service.ts +150 -150
  230. package/src/module/meta/service/entity-validation.service.ts +187 -187
  231. package/src/module/meta/service/entity.service.ts +67 -67
  232. package/src/module/meta/service/field-group.service.ts +103 -103
  233. package/src/module/meta/service/media-data.service.ts +507 -507
  234. package/src/module/meta/service/populate-meta.service.ts +193 -193
  235. package/src/module/meta/service/preference.service.ts +16 -16
  236. package/src/module/meta/service/resolver.service.ts +267 -267
  237. package/src/module/meta/service/section-master.service.ts +104 -104
  238. package/src/module/meta/service/update-form-json.service.ts +22 -22
  239. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  240. package/src/module/meta/service/view-master.service.ts +127 -127
  241. package/src/module/module/controller/menu.controller.ts +15 -15
  242. package/src/module/module/controller/module-access.controller.ts +134 -134
  243. package/src/module/module/entity/menu.entity.ts +43 -43
  244. package/src/module/module/entity/module-access.entity.ts +25 -25
  245. package/src/module/module/entity/module-action.entity.ts +17 -17
  246. package/src/module/module/entity/module.entity.ts +52 -52
  247. package/src/module/module/module.module.ts +42 -42
  248. package/src/module/module/repository/menu.repository.ts +184 -184
  249. package/src/module/module/repository/module-access.repository.ts +344 -344
  250. package/src/module/module/service/menu.service.ts +82 -82
  251. package/src/module/module/service/module-access.service.ts +209 -209
  252. package/src/module/notification/controller/notification.controller.ts +58 -58
  253. package/src/module/notification/controller/otp.controller.ts +117 -117
  254. package/src/module/notification/entity/notification.entity.ts +26 -26
  255. package/src/module/notification/entity/otp.entity.ts +28 -28
  256. package/src/module/notification/firebase-admin.config.ts +22 -22
  257. package/src/module/notification/notification.module.ts +69 -69
  258. package/src/module/notification/repository/otp.repository.ts +27 -27
  259. package/src/module/notification/service/email.service.ts +127 -127
  260. package/src/module/notification/service/notification.service.ts +163 -163
  261. package/src/module/notification/service/otp.service.ts +132 -132
  262. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  263. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  264. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  265. package/src/module/third-party-module/third-party.module.ts +12 -12
  266. package/src/module/user/controller/login.controller.ts +197 -197
  267. package/src/module/user/controller/user.controller.ts +40 -40
  268. package/src/module/user/dto/create-user.dto.ts +62 -62
  269. package/src/module/user/dto/update-user.dto.ts +4 -4
  270. package/src/module/user/entity/role.entity.ts +33 -33
  271. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  272. package/src/module/user/entity/user-session.entity.ts +73 -73
  273. package/src/module/user/entity/user.entity.ts +59 -59
  274. package/src/module/user/repository/role.repository.ts +96 -96
  275. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  276. package/src/module/user/repository/user.repository.ts +50 -50
  277. package/src/module/user/repository/userSession.repository.ts +33 -33
  278. package/src/module/user/service/login.service.ts +284 -284
  279. package/src/module/user/service/role.service.ts +189 -189
  280. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  281. package/src/module/user/service/user-session.service.ts +168 -168
  282. package/src/module/user/service/user.service.ts +365 -365
  283. package/src/module/user/user.module.ts +65 -65
  284. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  285. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  286. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  287. package/src/module/workflow/controller/action.controller.ts +111 -111
  288. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  289. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  290. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  291. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  292. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  293. package/src/module/workflow/controller/stage.controller.ts +50 -50
  294. package/src/module/workflow/controller/task.controller.ts +77 -77
  295. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  296. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  297. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  298. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  299. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  300. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  301. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  302. package/src/module/workflow/entity/action.entity.ts +50 -50
  303. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  304. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  305. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  306. package/src/module/workflow/entity/form.entity.ts +25 -25
  307. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  308. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  309. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  310. package/src/module/workflow/entity/stage.entity.ts +20 -20
  311. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  312. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  313. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  314. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  315. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  316. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  317. package/src/module/workflow/repository/action-data.repository.ts +323 -323
  318. package/src/module/workflow/repository/action.repository.ts +323 -323
  319. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  320. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  321. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  322. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  323. package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
  324. package/src/module/workflow/repository/stage.repository.ts +172 -172
  325. package/src/module/workflow/repository/task.repository.ts +127 -127
  326. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  327. package/src/module/workflow/service/action-category.service.ts +33 -33
  328. package/src/module/workflow/service/action-data.service.ts +62 -62
  329. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  330. package/src/module/workflow/service/action-template-mapping.service.ts +104 -104
  331. package/src/module/workflow/service/action.service.ts +279 -279
  332. package/src/module/workflow/service/activity-log.service.ts +107 -107
  333. package/src/module/workflow/service/comm-template.service.ts +180 -180
  334. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  335. package/src/module/workflow/service/form-master.service.ts +35 -35
  336. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  337. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  338. package/src/module/workflow/service/stage-group.service.ts +319 -319
  339. package/src/module/workflow/service/stage.service.ts +199 -199
  340. package/src/module/workflow/service/task.service.ts +560 -560
  341. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  342. package/src/module/workflow/service/workflow-meta.service.ts +640 -640
  343. package/src/module/workflow/service/workflow.service.ts +205 -205
  344. package/src/module/workflow/workflow.module.ts +174 -174
  345. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  346. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  347. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  348. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  349. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  350. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  351. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  352. package/src/module/workflow-automation/service/workflow-automation.service.ts +347 -347
  353. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  354. package/src/resources/dev.properties.yaml +30 -30
  355. package/src/resources/local.properties.yaml +27 -27
  356. package/src/resources/properties.module.ts +12 -12
  357. package/src/resources/properties.yaml.ts +11 -11
  358. package/src/resources/uat.properties.yaml +31 -31
  359. package/src/table.config.ts +126 -126
  360. package/src/utils/dto/excel-data.dto.ts +14 -14
  361. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  362. package/src/utils/service/base64util.service.ts +18 -18
  363. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  364. package/src/utils/service/codeGenerator.service.ts +22 -22
  365. package/src/utils/service/dateUtil.service.ts +17 -17
  366. package/src/utils/service/encryptUtil.service.ts +97 -97
  367. package/src/utils/service/excel-helper.service.ts +72 -72
  368. package/src/utils/service/excelUtil.service.ts +15 -15
  369. package/src/utils/service/file-util.service.ts +11 -11
  370. package/src/utils/service/json-util.service.ts +23 -23
  371. package/src/utils/service/loggingUtil.service.ts +34 -34
  372. package/src/utils/service/reflection-helper.service.ts +62 -62
  373. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  374. package/src/utils/utils.module.ts +25 -25
  375. package/tsconfig.build.json +4 -4
  376. package/tsconfig.json +24 -24
  377. package/.claude/settings.local.json +0 -26
  378. package/.idea/copilot.data.migration.agent.xml +0 -6
  379. package/.idea/copilot.data.migration.ask.xml +0 -6
  380. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  381. package/.idea/copilot.data.migration.edit.xml +0 -6
  382. package/.idea/misc.xml +0 -6
  383. package/server.log +0 -850
@@ -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
+ }