@solidxai/core 0.1.10-beta.2 → 0.1.10-beta.21

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 (322) hide show
  1. package/dist/commands/refresh-model.command.d.ts +1 -7
  2. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  3. package/dist/commands/refresh-model.command.js +4 -49
  4. package/dist/commands/refresh-model.command.js.map +1 -1
  5. package/dist/commands/refresh-module.command.d.ts +0 -2
  6. package/dist/commands/refresh-module.command.d.ts.map +1 -1
  7. package/dist/commands/refresh-module.command.js +3 -16
  8. package/dist/commands/refresh-module.command.js.map +1 -1
  9. package/dist/commands/test-data.command.d.ts +2 -0
  10. package/dist/commands/test-data.command.d.ts.map +1 -1
  11. package/dist/commands/test-data.command.js +32 -6
  12. package/dist/commands/test-data.command.js.map +1 -1
  13. package/dist/controllers/action-metadata.controller.js +1 -1
  14. package/dist/controllers/action-metadata.controller.js.map +1 -1
  15. package/dist/controllers/chatter-message.controller.d.ts +2 -0
  16. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  17. package/dist/controllers/chatter-message.controller.js +17 -0
  18. package/dist/controllers/chatter-message.controller.js.map +1 -1
  19. package/dist/controllers/facebook-authentication.controller.js +1 -1
  20. package/dist/controllers/facebook-authentication.controller.js.map +1 -1
  21. package/dist/controllers/google-authentication.controller.js +1 -1
  22. package/dist/controllers/google-authentication.controller.js.map +1 -1
  23. package/dist/controllers/gupshup-webhook.controller.d.ts +11 -0
  24. package/dist/controllers/gupshup-webhook.controller.d.ts.map +1 -0
  25. package/dist/controllers/gupshup-webhook.controller.js +87 -0
  26. package/dist/controllers/gupshup-webhook.controller.js.map +1 -0
  27. package/dist/controllers/mcp-audit-log.controller.d.ts +35 -0
  28. package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -0
  29. package/dist/controllers/mcp-audit-log.controller.js +147 -0
  30. package/dist/controllers/mcp-audit-log.controller.js.map +1 -0
  31. package/dist/controllers/menu-item-metadata.controller.js +1 -1
  32. package/dist/controllers/menu-item-metadata.controller.js.map +1 -1
  33. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts +16 -0
  34. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts.map +1 -0
  35. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js +133 -0
  36. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js.map +1 -0
  37. package/dist/controllers/microsoft-authentication.controller.js +1 -1
  38. package/dist/controllers/microsoft-authentication.controller.js.map +1 -1
  39. package/dist/controllers/model-metadata.controller.d.ts +1 -1
  40. package/dist/controllers/model-metadata.controller.js +2 -2
  41. package/dist/controllers/model-metadata.controller.js.map +1 -1
  42. package/dist/controllers/module-metadata.controller.js +1 -1
  43. package/dist/controllers/module-metadata.controller.js.map +1 -1
  44. package/dist/controllers/mq-message-queue.controller.js +1 -1
  45. package/dist/controllers/mq-message-queue.controller.js.map +1 -1
  46. package/dist/controllers/mq-message.controller.js +1 -1
  47. package/dist/controllers/mq-message.controller.js.map +1 -1
  48. package/dist/controllers/view-metadata.controller.js +1 -1
  49. package/dist/controllers/view-metadata.controller.js.map +1 -1
  50. package/dist/dtos/create-mcp-audit-log.dto.d.ts +19 -0
  51. package/dist/dtos/create-mcp-audit-log.dto.d.ts.map +1 -0
  52. package/dist/dtos/create-mcp-audit-log.dto.js +118 -0
  53. package/dist/dtos/create-mcp-audit-log.dto.js.map +1 -0
  54. package/dist/dtos/update-chatter-note-message.dto.d.ts +5 -0
  55. package/dist/dtos/update-chatter-note-message.dto.d.ts.map +1 -0
  56. package/dist/dtos/update-chatter-note-message.dto.js +34 -0
  57. package/dist/dtos/update-chatter-note-message.dto.js.map +1 -0
  58. package/dist/dtos/update-mcp-audit-log.dto.d.ts +19 -0
  59. package/dist/dtos/update-mcp-audit-log.dto.d.ts.map +1 -0
  60. package/dist/dtos/update-mcp-audit-log.dto.js +117 -0
  61. package/dist/dtos/update-mcp-audit-log.dto.js.map +1 -0
  62. package/dist/dtos/update-user.dto.d.ts +1 -0
  63. package/dist/dtos/update-user.dto.d.ts.map +1 -1
  64. package/dist/dtos/update-user.dto.js +7 -1
  65. package/dist/dtos/update-user.dto.js.map +1 -1
  66. package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
  67. package/dist/entities/chatter-message-details.entity.js +0 -1
  68. package/dist/entities/chatter-message-details.entity.js.map +1 -1
  69. package/dist/entities/mcp-audit-log.entity.d.ts +19 -0
  70. package/dist/entities/mcp-audit-log.entity.d.ts.map +1 -0
  71. package/dist/entities/mcp-audit-log.entity.js +90 -0
  72. package/dist/entities/mcp-audit-log.entity.js.map +1 -0
  73. package/dist/entities/user.entity.js +1 -0
  74. package/dist/entities/user.entity.js.map +1 -1
  75. package/dist/factories/whatsapp.factory.d.ts.map +1 -1
  76. package/dist/factories/whatsapp.factory.js +13 -11
  77. package/dist/factories/whatsapp.factory.js.map +1 -1
  78. package/dist/helpers/bootstrap.helper.d.ts +1 -0
  79. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  80. package/dist/helpers/bootstrap.helper.js +8 -3
  81. package/dist/helpers/bootstrap.helper.js.map +1 -1
  82. package/dist/helpers/command.service.d.ts +1 -0
  83. package/dist/helpers/command.service.d.ts.map +1 -1
  84. package/dist/helpers/command.service.js +1 -0
  85. package/dist/helpers/command.service.js.map +1 -1
  86. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
  87. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
  88. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  89. package/dist/index.d.ts +6 -0
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +6 -0
  92. package/dist/index.js.map +1 -1
  93. package/dist/interfaces.d.ts +1 -2
  94. package/dist/interfaces.d.ts.map +1 -1
  95. package/dist/interfaces.js.map +1 -1
  96. package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts.map +1 -1
  97. package/dist/jobs/database/chatter-queue-subscriber-database.service.js +3 -3
  98. package/dist/jobs/database/chatter-queue-subscriber-database.service.js.map +1 -1
  99. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  100. package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.d.ts.map +1 -1
  101. package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js +3 -3
  102. package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js.map +1 -1
  103. package/dist/jobs/redis/chatter-queue-subscriber-redis.service.d.ts.map +1 -1
  104. package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js +3 -3
  105. package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js.map +1 -1
  106. package/dist/listeners/user-registration.listener.d.ts +5 -2
  107. package/dist/listeners/user-registration.listener.d.ts.map +1 -1
  108. package/dist/listeners/user-registration.listener.js +37 -4
  109. package/dist/listeners/user-registration.listener.js.map +1 -1
  110. package/dist/repository/mcp-audit-log.repository.d.ts +12 -0
  111. package/dist/repository/mcp-audit-log.repository.d.ts.map +1 -0
  112. package/dist/repository/mcp-audit-log.repository.js +34 -0
  113. package/dist/repository/mcp-audit-log.repository.js.map +1 -0
  114. package/dist/repository/security-rule.repository.js.map +1 -1
  115. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  116. package/dist/seeders/module-test-data.service.d.ts +9 -0
  117. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  118. package/dist/seeders/module-test-data.service.js +155 -18
  119. package/dist/seeders/module-test-data.service.js.map +1 -1
  120. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  121. package/dist/seeders/seed-data/solid-core-metadata.json +381 -2
  122. package/dist/services/authentication.service.d.ts +6 -1
  123. package/dist/services/authentication.service.d.ts.map +1 -1
  124. package/dist/services/authentication.service.js +145 -15
  125. package/dist/services/authentication.service.js.map +1 -1
  126. package/dist/services/chatter-message.service.d.ts +13 -4
  127. package/dist/services/chatter-message.service.d.ts.map +1 -1
  128. package/dist/services/chatter-message.service.js +117 -37
  129. package/dist/services/chatter-message.service.js.map +1 -1
  130. package/dist/services/crud.service.js.map +1 -1
  131. package/dist/services/csv.service.js.map +1 -1
  132. package/dist/services/dashboard.service.js.map +1 -1
  133. package/dist/services/database/database-bootstrap.service.js.map +1 -1
  134. package/dist/services/excel.service.js.map +1 -1
  135. package/dist/services/export-transaction.service.js.map +1 -1
  136. package/dist/services/field-metadata.service.js.map +1 -1
  137. package/dist/services/fixtures.service.js.map +1 -1
  138. package/dist/services/import-transaction.service.js.map +1 -1
  139. package/dist/services/list-of-values.service.js.map +1 -1
  140. package/dist/services/mcp-audit-log.service.d.ts +12 -0
  141. package/dist/services/mcp-audit-log.service.d.ts.map +1 -0
  142. package/dist/services/mcp-audit-log.service.js +38 -0
  143. package/dist/services/mcp-audit-log.service.js.map +1 -0
  144. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +1 -0
  145. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  146. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +11 -0
  147. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  148. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +1 -0
  149. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  150. package/dist/services/mediaStorageProviders/file-storage-provider.js +6 -0
  151. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  152. package/dist/services/model-metadata.service.d.ts +4 -1
  153. package/dist/services/model-metadata.service.d.ts.map +1 -1
  154. package/dist/services/model-metadata.service.js +24 -24
  155. package/dist/services/model-metadata.service.js.map +1 -1
  156. package/dist/services/module-metadata.service.d.ts +4 -1
  157. package/dist/services/module-metadata.service.d.ts.map +1 -1
  158. package/dist/services/module-metadata.service.js +19 -2
  159. package/dist/services/module-metadata.service.js.map +1 -1
  160. package/dist/services/queues/database-publisher.service.js +3 -3
  161. package/dist/services/queues/database-publisher.service.js.map +1 -1
  162. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  163. package/dist/services/queues/rabbitmq-publisher.service.js +3 -3
  164. package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
  165. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  166. package/dist/services/queues/redis-publisher.service.d.ts.map +1 -1
  167. package/dist/services/queues/redis-publisher.service.js +4 -1
  168. package/dist/services/queues/redis-publisher.service.js.map +1 -1
  169. package/dist/services/queues/redis-subscriber.service.js.map +1 -1
  170. package/dist/services/role-metadata.service.js.map +1 -1
  171. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  172. package/dist/services/settings/default-settings-provider.service.d.ts +232 -8
  173. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  174. package/dist/services/settings/default-settings-provider.service.js +119 -4
  175. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  176. package/dist/services/sms/TwilioSMSService.js.map +1 -1
  177. package/dist/services/solid-introspect.service.js.map +1 -1
  178. package/dist/services/user-activity-history.service.js.map +1 -1
  179. package/dist/services/user.service.js +1 -1
  180. package/dist/services/user.service.js.map +1 -1
  181. package/dist/services/view-metadata.service.d.ts.map +1 -1
  182. package/dist/services/view-metadata.service.js +17 -2
  183. package/dist/services/view-metadata.service.js.map +1 -1
  184. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts +11 -0
  185. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts.map +1 -0
  186. package/dist/services/whatsapp/GupshupOtpWhatsappService.js +127 -0
  187. package/dist/services/whatsapp/GupshupOtpWhatsappService.js.map +1 -0
  188. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts +17 -0
  189. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts.map +1 -0
  190. package/dist/services/whatsapp/MetaCloudWhatsappService.js +209 -0
  191. package/dist/services/whatsapp/MetaCloudWhatsappService.js.map +1 -0
  192. package/dist/solid-core.module.d.ts +2 -2
  193. package/dist/solid-core.module.d.ts.map +1 -1
  194. package/dist/solid-core.module.js +22 -6
  195. package/dist/solid-core.module.js.map +1 -1
  196. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  197. package/dist/subscribers/security-rule.subscriber.d.ts.map +1 -1
  198. package/dist/subscribers/security-rule.subscriber.js.map +1 -1
  199. package/dist/subscribers/view-metadata.subscriber.js.map +1 -1
  200. package/dist/testing/core/testing-engine.js.map +1 -1
  201. package/dist/testing/reporter/console-reporter.d.ts +10 -0
  202. package/dist/testing/reporter/console-reporter.d.ts.map +1 -1
  203. package/dist/testing/reporter/console-reporter.js +21 -0
  204. package/dist/testing/reporter/console-reporter.js.map +1 -1
  205. package/dist/testing/reporter/reporter.types.d.ts +7 -0
  206. package/dist/testing/reporter/reporter.types.d.ts.map +1 -1
  207. package/dist/testing/reporter/reporter.types.js.map +1 -1
  208. package/dist/testing/reporter/webhook-reporter.js.map +1 -1
  209. package/dist/testing/runner/run-from-metadata.d.ts.map +1 -1
  210. package/dist/testing/runner/run-from-metadata.js +20 -1
  211. package/dist/testing/runner/run-from-metadata.js.map +1 -1
  212. package/dist/winston.logger.d.ts +5 -0
  213. package/dist/winston.logger.d.ts.map +1 -1
  214. package/dist/winston.logger.js +6 -4
  215. package/dist/winston.logger.js.map +1 -1
  216. package/dist-tests/api/authenticate.spec.js +119 -0
  217. package/dist-tests/api/authenticate.spec.js.map +1 -0
  218. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
  219. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
  220. package/dist-tests/api/ping.spec.js +21 -0
  221. package/dist-tests/api/ping.spec.js.map +1 -0
  222. package/dist-tests/helpers/auth.js +41 -0
  223. package/dist-tests/helpers/auth.js.map +1 -0
  224. package/dist-tests/helpers/env.js +11 -0
  225. package/dist-tests/helpers/env.js.map +1 -0
  226. package/docs/grouping-enhancements.md +89 -0
  227. package/docs/java-spring/README.md +3 -0
  228. package/docs/java-spring/solid-core-module-deep-dive-report.md +1317 -0
  229. package/docs/seed-changes.md +65 -0
  230. package/docs/test-data-workflow.md +200 -0
  231. package/docs/type-declaration-import-issue.md +24 -0
  232. package/package.json +8 -8
  233. package/src/commands/refresh-model.command.ts +6 -51
  234. package/src/commands/refresh-module.command.ts +3 -16
  235. package/src/commands/test-data.command.ts +29 -6
  236. package/src/controllers/action-metadata.controller.ts +1 -1
  237. package/src/controllers/chatter-message.controller.ts +12 -0
  238. package/src/controllers/facebook-authentication.controller.ts +1 -1
  239. package/src/controllers/google-authentication.controller.ts +1 -1
  240. package/src/controllers/gupshup-webhook.controller.ts +91 -0
  241. package/src/controllers/mcp-audit-log.controller.ts +70 -0
  242. package/src/controllers/menu-item-metadata.controller.ts +1 -1
  243. package/src/controllers/meta-cloud-whatsapp-webhook.controller.ts +155 -0
  244. package/src/controllers/microsoft-authentication.controller.ts +1 -1
  245. package/src/controllers/model-metadata.controller.ts +1 -1
  246. package/src/controllers/module-metadata.controller.ts +1 -1
  247. package/src/controllers/mq-message-queue.controller.ts +1 -1
  248. package/src/controllers/mq-message.controller.ts +1 -1
  249. package/src/controllers/view-metadata.controller.ts +1 -1
  250. package/src/dtos/create-mcp-audit-log.dto.ts +84 -0
  251. package/src/dtos/update-chatter-note-message.dto.ts +14 -0
  252. package/src/dtos/update-mcp-audit-log.dto.ts +83 -0
  253. package/src/dtos/update-user.dto.ts +4 -0
  254. package/src/entities/chatter-message-details.entity.ts +1 -2
  255. package/src/entities/mcp-audit-log.entity.ts +55 -0
  256. package/src/entities/user.entity.ts +1 -1
  257. package/src/factories/whatsapp.factory.ts +33 -32
  258. package/src/helpers/bootstrap.helper.ts +16 -6
  259. package/src/helpers/command.service.ts +2 -0
  260. package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +1 -1
  261. package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +1 -1
  262. package/src/helpers/field-crud-managers/field-quality-check-fixes.md +178 -0
  263. package/src/helpers/module-metadata-helper.service.ts +1 -1
  264. package/src/index.ts +6 -0
  265. package/src/interfaces.ts +1 -3
  266. package/src/jobs/database/chatter-queue-subscriber-database.service.ts +4 -2
  267. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -1
  268. package/src/jobs/rabbitmq/chatter-queue-subscriber.service.ts +4 -2
  269. package/src/jobs/redis/chatter-queue-subscriber-redis.service.ts +10 -3
  270. package/src/listeners/user-registration.listener.ts +49 -6
  271. package/src/repository/mcp-audit-log.repository.ts +17 -0
  272. package/src/repository/security-rule.repository.ts +1 -1
  273. package/src/seeders/module-metadata-seeder.service.ts +4 -4
  274. package/src/seeders/module-test-data.service.ts +186 -17
  275. package/src/seeders/permission-metadata-seeder.service.ts +1 -1
  276. package/src/seeders/seed-data/solid-core-metadata.json +381 -2
  277. package/src/services/authentication.service.ts +267 -44
  278. package/src/services/chatter-message.service.ts +140 -40
  279. package/src/services/crud.service.ts +1 -1
  280. package/src/services/csv.service.ts +1 -1
  281. package/src/services/dashboard.service.ts +1 -1
  282. package/src/services/database/database-bootstrap.service.ts +1 -1
  283. package/src/services/excel.service.ts +1 -1
  284. package/src/services/export-transaction.service.ts +2 -2
  285. package/src/services/field-metadata.service.ts +1 -1
  286. package/src/services/fixtures.service.ts +2 -2
  287. package/src/services/import-transaction.service.ts +2 -2
  288. package/src/services/list-of-values.service.ts +1 -1
  289. package/src/services/mcp-audit-log.service.ts +19 -0
  290. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +12 -0
  291. package/src/services/mediaStorageProviders/file-storage-provider.ts +8 -1
  292. package/src/services/model-metadata.service.ts +36 -34
  293. package/src/services/module-metadata.service.ts +19 -7
  294. package/src/services/queues/database-publisher.service.ts +4 -4
  295. package/src/services/queues/database-subscriber.service.ts +1 -1
  296. package/src/services/queues/rabbitmq-publisher.service.ts +7 -7
  297. package/src/services/queues/rabbitmq-subscriber.service.ts +8 -8
  298. package/src/services/queues/redis-publisher.service.ts +7 -4
  299. package/src/services/queues/redis-subscriber.service.ts +4 -4
  300. package/src/services/role-metadata.service.ts +1 -1
  301. package/src/services/scheduled-jobs/scheduler.service.ts +5 -5
  302. package/src/services/settings/default-settings-provider.service.ts +119 -4
  303. package/src/services/sms/TwilioSMSService.ts +2 -2
  304. package/src/services/solid-introspect.service.ts +2 -2
  305. package/src/services/user-activity-history.service.ts +1 -1
  306. package/src/services/user.service.ts +1 -1
  307. package/src/services/view-metadata.service.ts +25 -8
  308. package/src/services/whatsapp/GupshupOtpWhatsappService.ts +174 -0
  309. package/src/services/whatsapp/MetaCloudWhatsappService.ts +253 -0
  310. package/src/solid-core.module.ts +213 -196
  311. package/src/subscribers/computed-entity-field.subscriber.ts +1 -1
  312. package/src/subscribers/security-rule.subscriber.ts +8 -8
  313. package/src/subscribers/view-metadata.subscriber.ts +1 -1
  314. package/src/testing/README.md +15 -0
  315. package/src/testing/core/testing-engine.ts +2 -2
  316. package/src/testing/reporter/console-reporter.ts +27 -0
  317. package/src/testing/reporter/reporter.types.ts +7 -0
  318. package/src/testing/reporter/webhook-reporter.ts +1 -1
  319. package/src/testing/runner/run-from-metadata.ts +19 -1
  320. package/src/winston.logger.ts +5 -7
  321. package/.claude/settings.local.json +0 -15
  322. package/src/services/1.js +0 -6
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var GupshupOtpWhatsappService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.GupshupOtpWhatsappService = void 0;
14
+ const axios_1 = require("@nestjs/axios");
15
+ const common_1 = require("@nestjs/common");
16
+ const whatsapp_provider_decorator_1 = require("../../decorators/whatsapp-provider.decorator");
17
+ let GupshupOtpWhatsappService = GupshupOtpWhatsappService_1 = class GupshupOtpWhatsappService {
18
+ constructor(httpService) {
19
+ this.httpService = httpService;
20
+ this.logger = new common_1.Logger(GupshupOtpWhatsappService_1.name);
21
+ }
22
+ async sendWhatsAppMessage(to, templateId, parameters, parentEntity, parentEntityId) {
23
+ if (!to) {
24
+ throw new Error("WhatsApp destination number is required");
25
+ }
26
+ const payload = parameters?.payload;
27
+ if (payload?.message?.type === "text" && payload?.message?.text) {
28
+ await this.sendTextMessage(payload.destination || to, payload.message.text, payload.source, payload["src.name"]);
29
+ return { to, templateId, parameters, parentEntity, parentEntityId };
30
+ }
31
+ if (parameters?.type === "text" && parameters?.text) {
32
+ await this.sendTextMessage(to, parameters.text);
33
+ return { to, templateId, parameters, parentEntity, parentEntityId };
34
+ }
35
+ if (!templateId) {
36
+ throw new Error("WhatsApp templateId is required for template message");
37
+ }
38
+ const bodyParams = Array.isArray(parameters)
39
+ ? parameters
40
+ : Array.isArray(parameters?.body)
41
+ ? parameters.body
42
+ : [];
43
+ await this.sendOtpTemplate(to, templateId, bodyParams.map((x) => String(x)));
44
+ return { to, templateId, parameters, parentEntity, parentEntityId };
45
+ }
46
+ async sendTextMessage(destination, text, sourceOverride, appNameOverride) {
47
+ const apiKey = process.env.COMMON_GUPSHUP_WHATSAPP_API_KEY ||
48
+ process.env.GUPSHUP_API_KEY;
49
+ const msgUrl = process.env.COMMON_GUPSHUP_WHATSAPP_API_URL ||
50
+ process.env.GUPSHUP_API_URL ||
51
+ "https://api.gupshup.io/wa/api/v1/msg";
52
+ const source = sourceOverride ||
53
+ process.env.COMMON_GUPSHUP_WHATSAPP_SOURCE ||
54
+ process.env.GUPSHUP_SOURCE_NUMBER;
55
+ const appName = appNameOverride || process.env.COMMON_GUPSHUP_APP_NAME || "solidx";
56
+ if (!apiKey || !msgUrl || !source) {
57
+ throw new Error("Missing Gupshup WhatsApp configuration for text message");
58
+ }
59
+ const rawDestination = destination.replace(/\D/g, "");
60
+ const params = new URLSearchParams();
61
+ params.append("channel", "whatsapp");
62
+ params.append("source", source);
63
+ params.append("destination", rawDestination);
64
+ params.append("src.name", appName);
65
+ params.append("message", JSON.stringify({ type: "text", text }));
66
+ await this.httpService.axiosRef.post(msgUrl, params.toString(), {
67
+ headers: {
68
+ apikey: apiKey,
69
+ "Content-Type": "application/x-www-form-urlencoded",
70
+ },
71
+ });
72
+ }
73
+ async sendOtpTemplate(destination, templateId, bodyParams) {
74
+ const apiKey = process.env.COMMON_GUPSHUP_WHATSAPP_API_KEY ||
75
+ process.env.GUPSHUP_API_KEY;
76
+ const baseUrl = process.env.COMMON_GUPSHUP_WHATSAPP_API_URL ||
77
+ process.env.GUPSHUP_API_URL ||
78
+ "https://api.gupshup.io/wa/api/v1/msg";
79
+ const templateUrl = process.env.COMMON_GUPSHUP_WHATSAPP_TEMPLATE_API_URL ||
80
+ baseUrl.replace(/\/msg$/, "/template/msg");
81
+ const source = process.env.COMMON_GUPSHUP_WHATSAPP_SOURCE ||
82
+ process.env.GUPSHUP_SOURCE_NUMBER;
83
+ const appName = process.env.COMMON_GUPSHUP_APP_NAME || "solidx";
84
+ if (!apiKey || !templateUrl || !source) {
85
+ throw new Error("Missing Gupshup OTP WhatsApp configuration");
86
+ }
87
+ if (!destination || !String(destination).trim()) {
88
+ throw new Error("WhatsApp destination is empty");
89
+ }
90
+ try {
91
+ const rawDestination = destination.replace(/\D/g, "");
92
+ const params = new URLSearchParams();
93
+ params.append("channel", "whatsapp");
94
+ params.append("source", source);
95
+ params.append("destination", rawDestination);
96
+ params.append("to", rawDestination.startsWith("+")
97
+ ? rawDestination
98
+ : `+${rawDestination}`);
99
+ params.append("src.name", appName);
100
+ params.append("template", JSON.stringify({
101
+ id: templateId,
102
+ params: bodyParams,
103
+ }));
104
+ this.logger.debug(`Gupshup OTP outbound (template): endpoint=${templateUrl}, source=${source}, destination=${rawDestination}, to=${rawDestination.startsWith("+") ? rawDestination : `+${rawDestination}`}, templateId=${templateId}, params=${JSON.stringify(bodyParams)}`);
105
+ const response = await this.httpService.axiosRef.post(templateUrl, params.toString(), {
106
+ headers: {
107
+ apikey: apiKey,
108
+ "Content-Type": "application/x-www-form-urlencoded",
109
+ },
110
+ });
111
+ this.logger.debug(`Gupshup response: ${response.status}, data=${JSON.stringify(response.data)}`);
112
+ this.logger.debug(`Independent OTP WhatsApp sent to ${rawDestination} template=${templateId} via template endpoint`);
113
+ }
114
+ catch (error) {
115
+ const axiosError = error;
116
+ this.logger.error(`Independent OTP WhatsApp failed: destination=${destination}, templateId=${templateId}, status=${axiosError.response?.status ?? "unknown"}, response=${typeof axiosError.response?.data === "object" ? JSON.stringify(axiosError.response?.data) : axiosError.response?.data}, url=${templateUrl}`);
117
+ throw error;
118
+ }
119
+ }
120
+ };
121
+ exports.GupshupOtpWhatsappService = GupshupOtpWhatsappService;
122
+ exports.GupshupOtpWhatsappService = GupshupOtpWhatsappService = GupshupOtpWhatsappService_1 = __decorate([
123
+ (0, common_1.Injectable)(),
124
+ (0, whatsapp_provider_decorator_1.WhatsAppProvider)(),
125
+ __metadata("design:paramtypes", [axios_1.HttpService])
126
+ ], GupshupOtpWhatsappService);
127
+ //# sourceMappingURL=GupshupOtpWhatsappService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GupshupOtpWhatsappService.js","sourceRoot":"","sources":["../../../src/services/whatsapp/GupshupOtpWhatsappService.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpService } from \"@nestjs/axios\";\nimport { Injectable, Logger } from \"@nestjs/common\";\nimport { AxiosError } from \"axios\";\nimport { WhatsAppProvider } from \"src/decorators/whatsapp-provider.decorator\";\nimport { IWhatsAppTransport } from \"src/interfaces\";\n\n@Injectable()\n@WhatsAppProvider()\nexport class GupshupOtpWhatsappService implements IWhatsAppTransport {\n private readonly logger = new Logger(GupshupOtpWhatsappService.name);\n\n constructor(private readonly httpService: HttpService) {}\n\n async sendWhatsAppMessage(\n to: string,\n templateId: string,\n parameters: any,\n parentEntity?: any,\n parentEntityId?: any,\n ): Promise<any> {\n if (!to) {\n throw new Error(\"WhatsApp destination number is required\");\n }\n\n const payload = parameters?.payload;\n if (payload?.message?.type === \"text\" && payload?.message?.text) {\n await this.sendTextMessage(\n payload.destination || to,\n payload.message.text,\n payload.source,\n payload[\"src.name\"],\n );\n return { to, templateId, parameters, parentEntity, parentEntityId };\n }\n\n if (parameters?.type === \"text\" && parameters?.text) {\n await this.sendTextMessage(to, parameters.text);\n return { to, templateId, parameters, parentEntity, parentEntityId };\n }\n\n if (!templateId) {\n throw new Error(\"WhatsApp templateId is required for template message\");\n }\n\n const bodyParams = Array.isArray(parameters)\n ? parameters\n : Array.isArray(parameters?.body)\n ? parameters.body\n : [];\n\n await this.sendOtpTemplate(to, templateId, bodyParams.map((x) => String(x)));\n return { to, templateId, parameters, parentEntity, parentEntityId };\n }\n\n private async sendTextMessage(\n destination: string,\n text: string,\n sourceOverride?: string,\n appNameOverride?: string,\n ): Promise<void> {\n const apiKey =\n process.env.COMMON_GUPSHUP_WHATSAPP_API_KEY ||\n process.env.GUPSHUP_API_KEY;\n const msgUrl =\n process.env.COMMON_GUPSHUP_WHATSAPP_API_URL ||\n process.env.GUPSHUP_API_URL ||\n \"https://api.gupshup.io/wa/api/v1/msg\";\n const source =\n sourceOverride ||\n process.env.COMMON_GUPSHUP_WHATSAPP_SOURCE ||\n process.env.GUPSHUP_SOURCE_NUMBER;\n const appName =\n appNameOverride || process.env.COMMON_GUPSHUP_APP_NAME || \"solidx\";\n\n if (!apiKey || !msgUrl || !source) {\n throw new Error(\"Missing Gupshup WhatsApp configuration for text message\");\n }\n\n const rawDestination = destination.replace(/\\D/g, \"\");\n const params = new URLSearchParams();\n params.append(\"channel\", \"whatsapp\");\n params.append(\"source\", source);\n params.append(\"destination\", rawDestination);\n params.append(\"src.name\", appName);\n params.append(\"message\", JSON.stringify({ type: \"text\", text }));\n\n await this.httpService.axiosRef.post(msgUrl, params.toString(), {\n headers: {\n apikey: apiKey,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n });\n }\n\n async sendOtpTemplate(\n destination: string,\n templateId: string,\n bodyParams: string[],\n ): Promise<void> {\n const apiKey =\n process.env.COMMON_GUPSHUP_WHATSAPP_API_KEY ||\n process.env.GUPSHUP_API_KEY;\n const baseUrl =\n process.env.COMMON_GUPSHUP_WHATSAPP_API_URL ||\n process.env.GUPSHUP_API_URL ||\n \"https://api.gupshup.io/wa/api/v1/msg\";\n const templateUrl =\n process.env.COMMON_GUPSHUP_WHATSAPP_TEMPLATE_API_URL ||\n baseUrl.replace(/\\/msg$/, \"/template/msg\");\n const source =\n process.env.COMMON_GUPSHUP_WHATSAPP_SOURCE ||\n process.env.GUPSHUP_SOURCE_NUMBER;\n const appName = process.env.COMMON_GUPSHUP_APP_NAME || \"solidx\";\n\n if (!apiKey || !templateUrl || !source) {\n throw new Error(\"Missing Gupshup OTP WhatsApp configuration\");\n }\n\n if (!destination || !String(destination).trim()) {\n throw new Error(\"WhatsApp destination is empty\");\n }\n\n try {\n const rawDestination = destination.replace(/\\D/g, \"\");\n const params = new URLSearchParams();\n params.append(\"channel\", \"whatsapp\");\n params.append(\"source\", source);\n params.append(\"destination\", rawDestination);\n params.append(\n \"to\",\n rawDestination.startsWith(\"+\")\n ? rawDestination\n : `+${rawDestination}`,\n );\n params.append(\"src.name\", appName);\n params.append(\n \"template\",\n JSON.stringify({\n id: templateId,\n params: bodyParams,\n }),\n );\n\n this.logger.debug(\n `Gupshup OTP outbound (template): endpoint=${templateUrl}, source=${source}, destination=${rawDestination}, to=${rawDestination.startsWith(\"+\") ? rawDestination : `+${rawDestination}`}, templateId=${templateId}, params=${JSON.stringify(bodyParams)}`,\n );\n\n const response = await this.httpService.axiosRef.post(\n templateUrl,\n params.toString(),\n {\n headers: {\n apikey: apiKey,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n },\n );\n\n this.logger.debug(\n `Gupshup response: ${response.status}, data=${JSON.stringify(response.data)}`,\n );\n\n this.logger.debug(\n `Independent OTP WhatsApp sent to ${rawDestination} template=${templateId} via template endpoint`,\n );\n } catch (error) {\n const axiosError = error as AxiosError;\n this.logger.error(\n `Independent OTP WhatsApp failed: destination=${destination}, templateId=${templateId}, status=${axiosError.response?.status ?? \"unknown\"}, response=${typeof axiosError.response?.data === \"object\" ? JSON.stringify(axiosError.response?.data) : axiosError.response?.data}, url=${templateUrl}`,\n );\n throw error;\n }\n }\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { HttpService } from "@nestjs/axios";
2
+ import { Logger } from "@nestjs/common";
3
+ import { IWhatsAppTransport } from "../../interfaces";
4
+ import { QueueMessage } from "../../interfaces/mq";
5
+ import { SettingService } from "../../services/setting.service";
6
+ export declare class MetaCloudWhatsappService implements IWhatsAppTransport {
7
+ private readonly httpService;
8
+ private readonly settingService;
9
+ readonly logger: Logger;
10
+ constructor(httpService: HttpService, settingService: SettingService);
11
+ sendWhatsAppMessage(to: string, templateId: string, parameters: any, parentEntity?: any, parentEntityId?: any): Promise<any>;
12
+ sendWhatsAppMessageSynchronously(message: QueueMessage<any>): Promise<void>;
13
+ private createWhatsappRequest;
14
+ private normalizeWrappedPayload;
15
+ private normalizePhone;
16
+ }
17
+ //# sourceMappingURL=MetaCloudWhatsappService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaCloudWhatsappService.d.ts","sourceRoot":"","sources":["../../../src/services/whatsapp/MetaCloudWhatsappService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAmB9D,qBAEa,wBAAyB,YAAW,kBAAkB;IAI/D,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJjC,QAAQ,CAAC,MAAM,SAA6C;gBAGzC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc;IAG3C,mBAAmB,CACvB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,EACf,YAAY,CAAC,EAAE,GAAG,EAClB,cAAc,CAAC,EAAE,GAAG,GACnB,OAAO,CAAC,GAAG,CAAC;IAeT,gCAAgC,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CjF,OAAO,CAAC,qBAAqB;IAmF7B,OAAO,CAAC,uBAAuB;IA8D/B,OAAO,CAAC,cAAc;CAOvB"}
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var MetaCloudWhatsappService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.MetaCloudWhatsappService = void 0;
14
+ const axios_1 = require("@nestjs/axios");
15
+ const common_1 = require("@nestjs/common");
16
+ const whatsapp_provider_decorator_1 = require("../../decorators/whatsapp-provider.decorator");
17
+ const setting_service_1 = require("../setting.service");
18
+ let MetaCloudWhatsappService = MetaCloudWhatsappService_1 = class MetaCloudWhatsappService {
19
+ constructor(httpService, settingService) {
20
+ this.httpService = httpService;
21
+ this.settingService = settingService;
22
+ this.logger = new common_1.Logger(MetaCloudWhatsappService_1.name);
23
+ }
24
+ async sendWhatsAppMessage(to, templateId, parameters, parentEntity, parentEntityId) {
25
+ const message = {
26
+ payload: {
27
+ to,
28
+ templateId,
29
+ ...parameters,
30
+ },
31
+ parentEntity,
32
+ parentEntityId,
33
+ };
34
+ await this.sendWhatsAppMessageSynchronously(message);
35
+ return message;
36
+ }
37
+ async sendWhatsAppMessageSynchronously(message) {
38
+ const phoneNumberId = this.settingService.getConfigValue("metaWhatsappPhoneNumberId");
39
+ const apiVersion = this.settingService.getConfigValue("metaWhatsappApiVersion");
40
+ const apiBaseUrl = this.settingService.getConfigValue("metaWhatsappApiUrl");
41
+ const accessToken = this.settingService.getConfigValue("metaWhatsappAccessToken");
42
+ if (!phoneNumberId || !apiVersion || !apiBaseUrl || !accessToken) {
43
+ throw new Error("Missing Meta WhatsApp configuration. Set metaWhatsappApiUrl, metaWhatsappApiVersion, metaWhatsappPhoneNumberId, metaWhatsappAccessToken.");
44
+ }
45
+ const requestBody = this.createWhatsappRequest(message);
46
+ const url = `${String(apiBaseUrl).replace(/\/$/, "")}/${apiVersion}/${phoneNumberId}/messages`;
47
+ try {
48
+ await this.httpService.axiosRef.post(url, requestBody, {
49
+ headers: {
50
+ Authorization: `Bearer ${accessToken}`,
51
+ "Content-Type": "application/json",
52
+ },
53
+ });
54
+ this.logger.debug(`Sent Meta WhatsApp message to ${message.payload?.to} with type ${requestBody.type}`);
55
+ }
56
+ catch (error) {
57
+ const axiosError = error;
58
+ const status = axiosError.response?.status;
59
+ const data = axiosError.response?.data;
60
+ this.logger.error(`Meta WhatsApp send failed: status=${status ?? "unknown"}, url=${url}, response=${typeof data === "object" ? JSON.stringify(data) : data}`);
61
+ throw error;
62
+ }
63
+ }
64
+ createWhatsappRequest(message) {
65
+ const payload = message?.payload ?? {};
66
+ if (payload?.payload) {
67
+ const normalizedFromWrappedPayload = this.normalizeWrappedPayload(payload.payload);
68
+ if (normalizedFromWrappedPayload) {
69
+ return normalizedFromWrappedPayload;
70
+ }
71
+ return payload.payload;
72
+ }
73
+ const to = this.normalizePhone(payload.to);
74
+ const templatePayload = payload;
75
+ const textPayload = payload;
76
+ if (textPayload.type === "text" || textPayload.text) {
77
+ return {
78
+ messaging_product: "whatsapp",
79
+ recipient_type: "individual",
80
+ to,
81
+ type: "text",
82
+ text: {
83
+ body: textPayload.text ?? "",
84
+ preview_url: Boolean(textPayload.previewUrl),
85
+ },
86
+ };
87
+ }
88
+ const templateName = payload.templateId || templatePayload.templateId || templatePayload.templateName;
89
+ if (!templateName) {
90
+ throw new Error("Meta WhatsApp template name is missing. Provide templateId or parameters.templateName.");
91
+ }
92
+ const components = [];
93
+ if (templatePayload.headerText) {
94
+ components.push({
95
+ type: "header",
96
+ parameters: [
97
+ {
98
+ type: "text",
99
+ text: templatePayload.headerText,
100
+ },
101
+ ],
102
+ });
103
+ }
104
+ else if (templatePayload.imageLink) {
105
+ components.push({
106
+ type: "header",
107
+ parameters: [
108
+ {
109
+ type: "image",
110
+ image: { link: templatePayload.imageLink },
111
+ },
112
+ ],
113
+ });
114
+ }
115
+ if (Array.isArray(templatePayload.body) && templatePayload.body.length > 0) {
116
+ components.push({
117
+ type: "body",
118
+ parameters: templatePayload.body.map((entry) => ({
119
+ type: "text",
120
+ text: String(entry),
121
+ })),
122
+ });
123
+ }
124
+ return {
125
+ messaging_product: "whatsapp",
126
+ recipient_type: "individual",
127
+ to,
128
+ type: "template",
129
+ template: {
130
+ name: templateName,
131
+ language: {
132
+ code: templatePayload.languageCode || "en",
133
+ },
134
+ ...(components.length > 0 ? { components } : {}),
135
+ },
136
+ };
137
+ }
138
+ normalizeWrappedPayload(payload) {
139
+ if (!payload || typeof payload !== "object") {
140
+ return null;
141
+ }
142
+ if (payload.messaging_product && payload.to && payload.type) {
143
+ return payload;
144
+ }
145
+ const destination = payload.destination || payload.to;
146
+ const message = payload.message || {};
147
+ if (!destination || !message.type) {
148
+ return null;
149
+ }
150
+ if (message.type === "text" && message.text) {
151
+ return {
152
+ messaging_product: "whatsapp",
153
+ recipient_type: "individual",
154
+ to: this.normalizePhone(destination),
155
+ type: "text",
156
+ text: {
157
+ body: String(message.text),
158
+ preview_url: false,
159
+ },
160
+ };
161
+ }
162
+ if (message.type === "template" && message.template?.id) {
163
+ const params = Array.isArray(message.template?.params)
164
+ ? message.template.params
165
+ : [];
166
+ return {
167
+ messaging_product: "whatsapp",
168
+ recipient_type: "individual",
169
+ to: this.normalizePhone(destination),
170
+ type: "template",
171
+ template: {
172
+ name: String(message.template.id),
173
+ language: {
174
+ code: "en",
175
+ },
176
+ ...(params.length > 0
177
+ ? {
178
+ components: [
179
+ {
180
+ type: "body",
181
+ parameters: params.map((entry) => ({
182
+ type: "text",
183
+ text: String(entry),
184
+ })),
185
+ },
186
+ ],
187
+ }
188
+ : {}),
189
+ },
190
+ };
191
+ }
192
+ return null;
193
+ }
194
+ normalizePhone(phone) {
195
+ const digits = String(phone || "").replace(/\D/g, "");
196
+ if (!digits) {
197
+ throw new Error("Destination phone number is required for WhatsApp message.");
198
+ }
199
+ return digits;
200
+ }
201
+ };
202
+ exports.MetaCloudWhatsappService = MetaCloudWhatsappService;
203
+ exports.MetaCloudWhatsappService = MetaCloudWhatsappService = MetaCloudWhatsappService_1 = __decorate([
204
+ (0, common_1.Injectable)(),
205
+ (0, whatsapp_provider_decorator_1.WhatsAppProvider)(),
206
+ __metadata("design:paramtypes", [axios_1.HttpService,
207
+ setting_service_1.SettingService])
208
+ ], MetaCloudWhatsappService);
209
+ //# sourceMappingURL=MetaCloudWhatsappService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaCloudWhatsappService.js","sourceRoot":"","sources":["../../../src/services/whatsapp/MetaCloudWhatsappService.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpService } from \"@nestjs/axios\";\nimport { Injectable, Logger } from \"@nestjs/common\";\nimport { AxiosError } from \"axios\";\nimport { WhatsAppProvider } from \"src/decorators/whatsapp-provider.decorator\";\nimport { IWhatsAppTransport } from \"src/interfaces\";\nimport { QueueMessage } from \"src/interfaces/mq\";\nimport { SettingService } from \"src/services/setting.service\";\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\ntype MetaTemplatePayload = {\n type?: \"template\";\n templateName?: string;\n templateId?: string;\n languageCode?: string;\n body?: string[];\n headerText?: string;\n imageLink?: string;\n};\n\ntype MetaTextPayload = {\n type?: \"text\";\n text?: string;\n previewUrl?: boolean;\n};\n\n@Injectable()\n@WhatsAppProvider()\nexport class MetaCloudWhatsappService implements IWhatsAppTransport {\n readonly logger = new Logger(MetaCloudWhatsappService.name);\n\n constructor(\n private readonly httpService: HttpService,\n private readonly settingService: SettingService,\n ) {}\n\n async sendWhatsAppMessage(\n to: string,\n templateId: string,\n parameters: any,\n parentEntity?: any,\n parentEntityId?: any,\n ): Promise<any> {\n const message: QueueMessage<any> = {\n payload: {\n to,\n templateId,\n ...parameters,\n },\n parentEntity,\n parentEntityId,\n };\n\n await this.sendWhatsAppMessageSynchronously(message);\n return message;\n }\n\n async sendWhatsAppMessageSynchronously(message: QueueMessage<any>): Promise<void> {\n const phoneNumberId = this.settingService.getConfigValue<SolidCoreSetting>(\n \"metaWhatsappPhoneNumberId\",\n );\n const apiVersion = this.settingService.getConfigValue<SolidCoreSetting>(\n \"metaWhatsappApiVersion\",\n );\n const apiBaseUrl = this.settingService.getConfigValue<SolidCoreSetting>(\n \"metaWhatsappApiUrl\",\n );\n const accessToken = this.settingService.getConfigValue<SolidCoreSetting>(\n \"metaWhatsappAccessToken\",\n );\n\n if (!phoneNumberId || !apiVersion || !apiBaseUrl || !accessToken) {\n throw new Error(\n \"Missing Meta WhatsApp configuration. Set metaWhatsappApiUrl, metaWhatsappApiVersion, metaWhatsappPhoneNumberId, metaWhatsappAccessToken.\",\n );\n }\n\n const requestBody = this.createWhatsappRequest(message);\n const url = `${String(apiBaseUrl).replace(/\\/$/, \"\")}/${apiVersion}/${phoneNumberId}/messages`;\n\n try {\n await this.httpService.axiosRef.post(url, requestBody, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\",\n },\n });\n this.logger.debug(\n `Sent Meta WhatsApp message to ${message.payload?.to} with type ${requestBody.type}`,\n );\n } catch (error) {\n const axiosError = error as AxiosError;\n const status = axiosError.response?.status;\n const data = axiosError.response?.data;\n this.logger.error(\n `Meta WhatsApp send failed: status=${status ?? \"unknown\"}, url=${url}, response=${typeof data === \"object\" ? JSON.stringify(data) : data}`,\n );\n throw error;\n }\n }\n\n private createWhatsappRequest(message: QueueMessage<any>): any {\n const payload = message?.payload ?? {};\n\n if (payload?.payload) {\n const normalizedFromWrappedPayload = this.normalizeWrappedPayload(payload.payload);\n if (normalizedFromWrappedPayload) {\n return normalizedFromWrappedPayload;\n }\n return payload.payload;\n }\n\n const to = this.normalizePhone(payload.to);\n const templatePayload: MetaTemplatePayload = payload;\n const textPayload: MetaTextPayload = payload;\n\n if (textPayload.type === \"text\" || textPayload.text) {\n return {\n messaging_product: \"whatsapp\",\n recipient_type: \"individual\",\n to,\n type: \"text\",\n text: {\n body: textPayload.text ?? \"\",\n preview_url: Boolean(textPayload.previewUrl),\n },\n };\n }\n\n const templateName = payload.templateId || templatePayload.templateId || templatePayload.templateName;\n if (!templateName) {\n throw new Error(\n \"Meta WhatsApp template name is missing. Provide templateId or parameters.templateName.\",\n );\n }\n\n const components: any[] = [];\n if (templatePayload.headerText) {\n components.push({\n type: \"header\",\n parameters: [\n {\n type: \"text\",\n text: templatePayload.headerText,\n },\n ],\n });\n } else if (templatePayload.imageLink) {\n components.push({\n type: \"header\",\n parameters: [\n {\n type: \"image\",\n image: { link: templatePayload.imageLink },\n },\n ],\n });\n }\n\n if (Array.isArray(templatePayload.body) && templatePayload.body.length > 0) {\n components.push({\n type: \"body\",\n parameters: templatePayload.body.map((entry) => ({\n type: \"text\",\n text: String(entry),\n })),\n });\n }\n\n return {\n messaging_product: \"whatsapp\",\n recipient_type: \"individual\",\n to,\n type: \"template\",\n template: {\n name: templateName,\n language: {\n code: templatePayload.languageCode || \"en\",\n },\n ...(components.length > 0 ? { components } : {}),\n },\n };\n }\n\n private normalizeWrappedPayload(payload: any): any | null {\n if (!payload || typeof payload !== \"object\") {\n return null;\n }\n\n if (payload.messaging_product && payload.to && payload.type) {\n return payload;\n }\n\n const destination = payload.destination || payload.to;\n const message = payload.message || {};\n if (!destination || !message.type) {\n return null;\n }\n\n if (message.type === \"text\" && message.text) {\n return {\n messaging_product: \"whatsapp\",\n recipient_type: \"individual\",\n to: this.normalizePhone(destination),\n type: \"text\",\n text: {\n body: String(message.text),\n preview_url: false,\n },\n };\n }\n\n if (message.type === \"template\" && message.template?.id) {\n const params = Array.isArray(message.template?.params)\n ? message.template.params\n : [];\n return {\n messaging_product: \"whatsapp\",\n recipient_type: \"individual\",\n to: this.normalizePhone(destination),\n type: \"template\",\n template: {\n name: String(message.template.id),\n language: {\n code: \"en\",\n },\n ...(params.length > 0\n ? {\n components: [\n {\n type: \"body\",\n parameters: params.map((entry: any) => ({\n type: \"text\",\n text: String(entry),\n })),\n },\n ],\n }\n : {}),\n },\n };\n }\n\n return null;\n }\n\n private normalizePhone(phone: string): string {\n const digits = String(phone || \"\").replace(/\\D/g, \"\");\n if (!digits) {\n throw new Error(\"Destination phone number is required for WhatsApp message.\");\n }\n return digits;\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import 'multer';
2
- import { MiddlewareConsumer, NestModule } from '@nestjs/common';
1
+ import "multer";
2
+ import { MiddlewareConsumer, NestModule } from "@nestjs/common";
3
3
  export declare class SolidCoreModule implements NestModule {
4
4
  configure(consumer: MiddlewareConsumer): void;
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"solid-core.module.d.ts","sourceRoot":"","sources":["../src/solid-core.module.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAChB,OAAO,EAAU,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAyYhF,qBA6ea,eAAgB,YAAW,UAAU;IAChD,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAQvC"}
1
+ {"version":3,"file":"solid-core.module.d.ts","sourceRoot":"","sources":["../src/solid-core.module.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAChB,OAAO,EAAU,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkZhF,qBAqfa,eAAgB,YAAW,UAAU;IAChD,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAQvC"}
@@ -89,6 +89,10 @@ const facebook_authentication_controller_1 = require("./controllers/facebook-aut
89
89
  const microsoft_authentication_controller_1 = require("./controllers/microsoft-authentication.controller");
90
90
  const facebook_oauth_strategy_1 = require("./passport-strategies/facebook-oauth.strategy");
91
91
  const microsoft_oauth_strategy_1 = require("./passport-strategies/microsoft-oauth.strategy");
92
+ const GupshupOtpWhatsappService_1 = require("./services/whatsapp/GupshupOtpWhatsappService");
93
+ const MetaCloudWhatsappService_1 = require("./services/whatsapp/MetaCloudWhatsappService");
94
+ const gupshup_webhook_controller_1 = require("./controllers/gupshup-webhook.controller");
95
+ const meta_cloud_whatsapp_webhook_controller_1 = require("./controllers/meta-cloud-whatsapp-webhook.controller");
92
96
  const axios_1 = require("@nestjs/axios");
93
97
  const jwt_1 = require("@nestjs/jwt");
94
98
  const seed_command_1 = require("./commands/seed.command");
@@ -208,6 +212,7 @@ const saved_filters_controller_1 = require("./controllers/saved-filters.controll
208
212
  const scheduled_job_controller_1 = require("./controllers/scheduled-job.controller");
209
213
  const agent_session_controller_1 = require("./controllers/agent-session.controller");
210
214
  const agent_event_controller_1 = require("./controllers/agent-event.controller");
215
+ const mcp_audit_log_controller_1 = require("./controllers/mcp-audit-log.controller");
211
216
  const security_rule_controller_1 = require("./controllers/security-rule.controller");
212
217
  const setting_controller_1 = require("./controllers/setting.controller");
213
218
  const info_controller_1 = require("./controllers/info.controller");
@@ -233,6 +238,7 @@ const saved_filters_entity_1 = require("./entities/saved-filters.entity");
233
238
  const scheduled_job_entity_1 = require("./entities/scheduled-job.entity");
234
239
  const agent_session_entity_1 = require("./entities/agent-session.entity");
235
240
  const agent_event_entity_1 = require("./entities/agent-event.entity");
241
+ const mcp_audit_log_entity_1 = require("./entities/mcp-audit-log.entity");
236
242
  const security_rule_entity_1 = require("./entities/security-rule.entity");
237
243
  const setting_entity_1 = require("./entities/setting.entity");
238
244
  const user_activity_history_entity_1 = require("./entities/user-activity-history.entity");
@@ -307,6 +313,7 @@ const saved_filters_repository_1 = require("./repository/saved-filters.repositor
307
313
  const scheduled_job_repository_1 = require("./repository/scheduled-job.repository");
308
314
  const agent_session_repository_1 = require("./repository/agent-session.repository");
309
315
  const agent_event_repository_1 = require("./repository/agent-event.repository");
316
+ const mcp_audit_log_repository_1 = require("./repository/mcp-audit-log.repository");
310
317
  const security_rule_repository_1 = require("./repository/security-rule.repository");
311
318
  const setting_repository_1 = require("./repository/setting.repository");
312
319
  const sms_template_repository_1 = require("./repository/sms-template.repository");
@@ -355,6 +362,7 @@ const saved_filters_service_1 = require("./services/saved-filters.service");
355
362
  const scheduled_job_service_1 = require("./services/scheduled-job.service");
356
363
  const agent_session_service_1 = require("./services/agent-session.service");
357
364
  const agent_event_service_1 = require("./services/agent-event.service");
365
+ const mcp_audit_log_service_1 = require("./services/mcp-audit-log.service");
358
366
  const scheduler_service_1 = require("./services/scheduled-jobs/scheduler.service");
359
367
  const security_rule_service_1 = require("./services/security-rule.service");
360
368
  const list_of_dashboard_question_providers_selection_provider_service_1 = require("./services/selection-providers/list-of-dashboard-question-providers-selection-provider.service");
@@ -404,8 +412,8 @@ const list_of_roles_selectionproviders_service_1 = require("./services/selection
404
412
  let SolidCoreModule = class SolidCoreModule {
405
413
  configure(consumer) {
406
414
  consumer
407
- .apply(express.json({ limit: '10mb' }), express.urlencoded({ limit: '10mb', extended: true }))
408
- .forRoutes('*');
415
+ .apply(express.json({ limit: "10mb" }), express.urlencoded({ limit: "10mb", extended: true }))
416
+ .forRoutes("*");
409
417
  }
410
418
  };
411
419
  exports.SolidCoreModule = SolidCoreModule;
@@ -445,6 +453,7 @@ exports.SolidCoreModule = SolidCoreModule = __decorate([
445
453
  scheduled_job_entity_1.ScheduledJob,
446
454
  agent_session_entity_1.AgentSession,
447
455
  agent_event_entity_1.AgentEvent,
456
+ mcp_audit_log_entity_1.McpAuditLog,
448
457
  security_rule_entity_1.SecurityRule,
449
458
  setting_entity_1.Setting,
450
459
  sms_template_entity_1.SmsTemplate,
@@ -458,18 +467,18 @@ exports.SolidCoreModule = SolidCoreModule = __decorate([
458
467
  cache_manager_1.CacheModule.registerAsync(cache_options_1.CacheManagerOptions),
459
468
  schedule_1.ScheduleModule.forRoot(),
460
469
  serve_static_1.ServeStaticModule.forRoot({
461
- rootPath: (0, path_1.join)(process.cwd(), 'media-files-storage'),
462
- serveRoot: '/media-files-storage',
470
+ rootPath: (0, path_1.join)(process.cwd(), "media-files-storage"),
471
+ serveRoot: "/media-files-storage",
463
472
  serveStaticOptions: {
464
473
  setHeaders: (res) => {
465
- res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
474
+ res.setHeader("Cross-Origin-Resource-Policy", "cross-origin");
466
475
  },
467
476
  },
468
477
  }),
469
478
  platform_express_1.MulterModule.registerAsync({
470
479
  imports: [config_1.ConfigModule],
471
480
  useFactory: async (configService) => ({
472
- dest: process.env.AB_MEDIA_UPLOAD_DIR ?? 'media-uploads',
481
+ dest: process.env.AB_MEDIA_UPLOAD_DIR ?? "media-uploads",
473
482
  }),
474
483
  inject: [config_1.ConfigService],
475
484
  }),
@@ -509,6 +518,8 @@ exports.SolidCoreModule = SolidCoreModule = __decorate([
509
518
  module_metadata_controller_1.ModuleMetadataController,
510
519
  mq_message_controller_1.MqMessageController,
511
520
  mq_message_queue_controller_1.MqMessageQueueController,
521
+ gupshup_webhook_controller_1.GupshupWebhookController,
522
+ meta_cloud_whatsapp_webhook_controller_1.MetaCloudWhatsappWebhookController,
512
523
  otp_authentication_controller_1.OTPAuthenticationController,
513
524
  permission_metadata_controller_1.PermissionMetadataController,
514
525
  role_metadata_controller_1.RoleMetadataController,
@@ -516,6 +527,7 @@ exports.SolidCoreModule = SolidCoreModule = __decorate([
516
527
  scheduled_job_controller_1.ScheduledJobController,
517
528
  agent_session_controller_1.AgentSessionController,
518
529
  agent_event_controller_1.AgentEventController,
530
+ mcp_audit_log_controller_1.McpAuditLogController,
519
531
  security_rule_controller_1.SecurityRuleController,
520
532
  service_controller_1.ServiceController,
521
533
  setting_controller_1.SettingController,
@@ -603,6 +615,8 @@ exports.SolidCoreModule = SolidCoreModule = __decorate([
603
615
  Msg91SMSService_1.Msg91SMSService,
604
616
  Msg91OTPService_1.Msg91OTPService,
605
617
  Msg91WhatsappService_1.Msg91WhatsappService,
618
+ MetaCloudWhatsappService_1.MetaCloudWhatsappService,
619
+ GupshupOtpWhatsappService_1.GupshupOtpWhatsappService,
606
620
  TwilioSMSService_1.TwilioSMSService,
607
621
  sms_template_service_1.SmsTemplateService,
608
622
  email_template_service_1.EmailTemplateService,
@@ -771,8 +785,10 @@ exports.SolidCoreModule = SolidCoreModule = __decorate([
771
785
  scheduled_job_repository_1.ScheduledJobRepository,
772
786
  agent_session_repository_1.AgentSessionRepository,
773
787
  agent_event_repository_1.AgentEventRepository,
788
+ mcp_audit_log_repository_1.McpAuditLogRepository,
774
789
  agent_session_service_1.AgentSessionService,
775
790
  agent_event_service_1.AgentEventService,
791
+ mcp_audit_log_service_1.McpAuditLogService,
776
792
  scheduled_job_subscriber_1.ScheduledJobSubscriber,
777
793
  alpha_num_external_id_computed_field_provider_1.AlphaNumExternalIdComputationProvider,
778
794
  list_of_values_subscriber_1.ListOfValuesSubscriber,