@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,91 @@
1
+ import {
2
+ Body,
3
+ Controller,
4
+ HttpCode,
5
+ HttpStatus,
6
+ Logger,
7
+ Post,
8
+ Req,
9
+ } from "@nestjs/common";
10
+ import { ApiTags } from "@nestjs/swagger";
11
+ import { Request } from "express";
12
+ import { Auth } from "src/decorators/auth.decorator";
13
+ import { Public } from "src/decorators/public.decorator";
14
+ import { AuthType } from "src/enums/auth-type.enum";
15
+
16
+ @Auth(AuthType.None)
17
+ @Controller("webhook/whatsapp/gupshup")
18
+ @ApiTags("Solid Core")
19
+ export class GupshupWebhookController {
20
+ private readonly logger = new Logger(GupshupWebhookController.name);
21
+
22
+ @Public()
23
+ @Post()
24
+ @HttpCode(HttpStatus.OK)
25
+ async receiveWebhook(@Req() req: Request, @Body() body: unknown) {
26
+ const userAgent = req.headers["user-agent"] ?? null;
27
+ this.logger.log(
28
+ `Received Gupshup WhatsApp webhook${userAgent ? ` from ${userAgent}` : ""}`,
29
+ );
30
+ this.logger.debug(`Gupshup webhook payload: ${JSON.stringify(body)}`);
31
+
32
+ const statusInfo = this.extractStatusInfo(body);
33
+ if (statusInfo) {
34
+ this.logger.log(
35
+ `Gupshup delivery update: status=${statusInfo.status ?? "unknown"}, messageId=${statusInfo.messageId ?? "n/a"}, destination=${statusInfo.destination ?? "n/a"}, reason=${statusInfo.reason ?? "n/a"}`,
36
+ );
37
+ }
38
+
39
+ return {
40
+ success: true,
41
+ message: "Webhook received",
42
+ };
43
+ }
44
+
45
+ private extractStatusInfo(body: unknown): {
46
+ status?: string;
47
+ messageId?: string;
48
+ destination?: string;
49
+ reason?: string;
50
+ } | null {
51
+ if (!body || typeof body !== "object") {
52
+ return null;
53
+ }
54
+
55
+ const payload = body as Record<string, unknown>;
56
+
57
+ const status =
58
+ this.asString(payload.status) ||
59
+ this.asString(payload.messageStatus) ||
60
+ this.asString((payload.payload as Record<string, unknown>)?.status) ||
61
+ this.asString((payload.payload as Record<string, unknown>)?.type);
62
+
63
+ const messageId =
64
+ this.asString(payload.messageId) ||
65
+ this.asString(payload.id) ||
66
+ this.asString((payload.payload as Record<string, unknown>)?.id) ||
67
+ this.asString((payload.payload as Record<string, unknown>)?.messageId);
68
+
69
+ const destination =
70
+ this.asString(payload.destination) ||
71
+ this.asString(payload.phone) ||
72
+ this.asString((payload.payload as Record<string, unknown>)?.destination) ||
73
+ this.asString((payload.payload as Record<string, unknown>)?.phone);
74
+
75
+ const reason =
76
+ this.asString(payload.reason) ||
77
+ this.asString(payload.error) ||
78
+ this.asString((payload.payload as Record<string, unknown>)?.reason) ||
79
+ this.asString((payload.payload as Record<string, unknown>)?.error);
80
+
81
+ if (!status && !messageId && !destination && !reason) {
82
+ return null;
83
+ }
84
+
85
+ return { status, messageId, destination, reason };
86
+ }
87
+
88
+ private asString(value: unknown): string | undefined {
89
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
90
+ }
91
+ }
@@ -0,0 +1,70 @@
1
+ import { Body, Controller, Delete, Get, Param, Patch, Post, Put, Query, UploadedFiles, UseInterceptors } from '@nestjs/common';
2
+ import { AnyFilesInterceptor } from '@nestjs/platform-express';
3
+ import { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';
4
+ import { CreateMcpAuditLogDto } from 'src/dtos/create-mcp-audit-log.dto';
5
+ import { UpdateMcpAuditLogDto } from 'src/dtos/update-mcp-audit-log.dto';
6
+ import { McpAuditLogService } from 'src/services/mcp-audit-log.service';
7
+
8
+ @ApiTags('Solid Core')
9
+ @Controller('mcp-audit-log')
10
+ export class McpAuditLogController {
11
+ constructor(private readonly service: McpAuditLogService) {}
12
+
13
+ @ApiBearerAuth('jwt')
14
+ @Post()
15
+ @UseInterceptors(AnyFilesInterceptor())
16
+ create(@Body() createDto: CreateMcpAuditLogDto, @UploadedFiles() files: Array<Express.Multer.File>) {
17
+ return this.service.create(createDto, files);
18
+ }
19
+
20
+ @ApiBearerAuth('jwt')
21
+ @Post('/bulk')
22
+ @UseInterceptors(AnyFilesInterceptor())
23
+ insertMany(@Body() createDtos: CreateMcpAuditLogDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {
24
+ return this.service.insertMany(createDtos, filesArray);
25
+ }
26
+
27
+ @ApiBearerAuth('jwt')
28
+ @Put(':id')
29
+ @UseInterceptors(AnyFilesInterceptor())
30
+ update(@Param('id') id: number, @Body() updateDto: UpdateMcpAuditLogDto, @UploadedFiles() files: Array<Express.Multer.File>) {
31
+ return this.service.update(id, updateDto, files);
32
+ }
33
+
34
+ @ApiBearerAuth('jwt')
35
+ @Patch(':id')
36
+ @UseInterceptors(AnyFilesInterceptor())
37
+ partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateMcpAuditLogDto, @UploadedFiles() files: Array<Express.Multer.File>) {
38
+ return this.service.update(id, updateDto, files, true);
39
+ }
40
+
41
+ @ApiBearerAuth('jwt')
42
+ @ApiQuery({ name: 'limit', required: false, type: Number })
43
+ @ApiQuery({ name: 'offset', required: false, type: Number })
44
+ @ApiQuery({ name: 'fields', required: false, type: Array })
45
+ @ApiQuery({ name: 'sort', required: false, type: Array })
46
+ @ApiQuery({ name: 'populate', required: false, type: Array })
47
+ @ApiQuery({ name: 'filters', required: false, type: Array })
48
+ @Get()
49
+ findMany(@Query() query: any) {
50
+ return this.service.find(query);
51
+ }
52
+
53
+ @ApiBearerAuth('jwt')
54
+ @Get(':id')
55
+ findOne(@Param('id') id: string, @Query() query: any) {
56
+ return this.service.findOne(+id, query);
57
+ }
58
+
59
+ @ApiBearerAuth('jwt')
60
+ @Delete('/bulk')
61
+ deleteMany(@Body() ids: number[]) {
62
+ return this.service.deleteMany(ids);
63
+ }
64
+
65
+ @ApiBearerAuth('jwt')
66
+ @Delete(':id')
67
+ delete(@Param('id') id: number) {
68
+ return this.service.delete(id);
69
+ }
70
+ }
@@ -9,7 +9,7 @@ import { ActiveUserData } from 'src/interfaces/active-user-data.interface';
9
9
  import { SolidRequestContextDto } from 'src/dtos/solid-request-context.dto';
10
10
  import { SolidRequestContextDecorator } from 'src/decorators/solid-request-context.decorator';
11
11
 
12
- @ApiTags('App Builder')
12
+ @ApiTags('Solid Core')
13
13
  @Controller('menu-item-metadata') //FIXME: Change this to the model plural name
14
14
  export class MenuItemMetadataController {
15
15
  constructor(private readonly service: MenuItemMetadataService) { }
@@ -0,0 +1,155 @@
1
+ import {
2
+ Body,
3
+ Controller,
4
+ Get,
5
+ HttpCode,
6
+ HttpStatus,
7
+ Logger,
8
+ Post,
9
+ Query,
10
+ Res,
11
+ } from "@nestjs/common";
12
+ import { ApiTags } from "@nestjs/swagger";
13
+ import { Response } from "express";
14
+ import { Auth } from "src/decorators/auth.decorator";
15
+ import { Public } from "src/decorators/public.decorator";
16
+ import { AuthType } from "src/enums/auth-type.enum";
17
+ import { SettingService } from "src/services/setting.service";
18
+ import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
19
+
20
+ @Auth(AuthType.None)
21
+ @Controller("webhook/whatsapp/meta-cloud")
22
+ @ApiTags("Solid Core")
23
+ export class MetaCloudWhatsappWebhookController {
24
+ private readonly logger = new Logger(MetaCloudWhatsappWebhookController.name);
25
+
26
+ constructor(private readonly settingService: SettingService) {}
27
+
28
+ @Public()
29
+ @Get()
30
+ verifyWebhook(@Query() query: Record<string, unknown>, @Res() res: Response) {
31
+ const mode = this.resolveQueryValue(query, "hub.mode", "hub_mode", "mode");
32
+ const verifyToken = this.resolveQueryValue(
33
+ query,
34
+ "hub.verify_token",
35
+ "hub_verify_token",
36
+ "verify_token",
37
+ );
38
+ const challenge = this.resolveQueryValue(
39
+ query,
40
+ "hub.challenge",
41
+ "hub_challenge",
42
+ "challenge",
43
+ );
44
+
45
+ const configuredVerifyToken =
46
+ this.settingService.getConfigValue<SolidCoreSetting>(
47
+ "metaWhatsappWebhookVerifyToken",
48
+ ) || process.env.COMMON_META_WHATSAPP_WEBHOOK_VERIFY_TOKEN;
49
+
50
+ const isVerificationCall = mode === "subscribe";
51
+ const tokenMatches =
52
+ !!configuredVerifyToken && verifyToken === configuredVerifyToken;
53
+
54
+ if (isVerificationCall && tokenMatches && challenge) {
55
+ this.logger.log("Meta Cloud WhatsApp webhook verified successfully.");
56
+ res.writeHead(HttpStatus.OK, {
57
+ "Content-Type": "text/plain",
58
+ "Content-Length": Buffer.byteLength(String(challenge)),
59
+ });
60
+ res.write(String(challenge));
61
+ return res.end();
62
+ }
63
+
64
+ this.logger.warn(
65
+ `Meta Cloud webhook verification failed. mode=${mode ?? "n/a"}, tokenMatch=${tokenMatches}`,
66
+ );
67
+
68
+ res.writeHead(HttpStatus.FORBIDDEN, { "Content-Type": "text/plain" });
69
+ return res.end("Webhook verification failed");
70
+ }
71
+
72
+ @Public()
73
+ @Post()
74
+ @HttpCode(HttpStatus.OK)
75
+ async receiveWebhook(@Body() body: unknown) {
76
+ this.logger.log("Received Meta Cloud WhatsApp webhook");
77
+ this.logger.debug(`Meta Cloud webhook payload: ${JSON.stringify(body)}`);
78
+
79
+ const statusInfo = this.extractStatusInfo(body);
80
+ if (statusInfo) {
81
+ this.logger.log(
82
+ `Meta Cloud delivery update: status=${statusInfo.status ?? "unknown"}, messageId=${statusInfo.messageId ?? "n/a"}, destination=${statusInfo.destination ?? "n/a"}, reason=${statusInfo.reason ?? "n/a"}`,
83
+ );
84
+ }
85
+
86
+ return {
87
+ success: true,
88
+ message: "Webhook received",
89
+ };
90
+ }
91
+
92
+ private extractStatusInfo(body: unknown): {
93
+ status?: string;
94
+ messageId?: string;
95
+ destination?: string;
96
+ reason?: string;
97
+ } | null {
98
+ if (!body || typeof body !== "object") {
99
+ return null;
100
+ }
101
+
102
+ const payload = body as Record<string, unknown>;
103
+ const entries = payload.entry as Array<Record<string, unknown>> | undefined;
104
+ const changes = entries?.[0]?.changes as Array<Record<string, unknown>> | undefined;
105
+ const value = changes?.[0]?.value as Record<string, unknown> | undefined;
106
+ const statuses = value?.statuses as Array<Record<string, unknown>> | undefined;
107
+ const status = statuses?.[0];
108
+
109
+ if (!status) {
110
+ return null;
111
+ }
112
+
113
+ const errors = status.errors as Array<Record<string, unknown>> | undefined;
114
+
115
+ return {
116
+ status: this.asString(status.status),
117
+ messageId: this.asString(status.id),
118
+ destination: this.asString(status.recipient_id),
119
+ reason:
120
+ this.asString(errors?.[0]?.title) || this.asString(errors?.[0]?.message),
121
+ };
122
+ }
123
+
124
+ private asString(value: unknown): string | undefined {
125
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
126
+ }
127
+
128
+ private resolveQueryValue(
129
+ query: Record<string, unknown>,
130
+ ...keys: string[]
131
+ ): string | undefined {
132
+ for (const key of keys) {
133
+ const directValue = this.asString(query[key]);
134
+ if (directValue) {
135
+ return directValue;
136
+ }
137
+ }
138
+
139
+ const hubRaw = query.hub;
140
+ if (hubRaw && typeof hubRaw === "object" && !Array.isArray(hubRaw)) {
141
+ const hub = hubRaw as Record<string, unknown>;
142
+ for (const key of ["mode", "verify_token", "challenge"]) {
143
+ const value = this.asString(hub[key]);
144
+ if (
145
+ value &&
146
+ keys.some((candidate) => candidate.endsWith(key) || candidate === key)
147
+ ) {
148
+ return value;
149
+ }
150
+ }
151
+ }
152
+
153
+ return undefined;
154
+ }
155
+ }
@@ -24,7 +24,7 @@ import { UserService } from "../services/user.service";
24
24
  import type { SolidCoreSetting } from "../services/settings/default-settings-provider.service";
25
25
 
26
26
  @Auth(AuthType.None)
27
- @ApiTags("Iam")
27
+ @ApiTags("Solid Core")
28
28
  @Controller("iam/microsoft")
29
29
  export class MicrosoftAuthenticationController {
30
30
  constructor(
@@ -92,7 +92,7 @@ export class ModelMetadataController {
92
92
  @ApiBearerAuth("jwt")
93
93
  @Post(':id/generate-code')
94
94
  generateCode(@Param('id', ParseIntPipe) id: number) {
95
- return this.modelMetadataService.handleGenerateCode({ modelId: id });
95
+ return this.modelMetadataService.generateCodeViaCtl(id);
96
96
  }
97
97
 
98
98
  @ApiBearerAuth("jwt")
@@ -62,7 +62,7 @@ export class ModuleMetadataController {
62
62
  @ApiBearerAuth("jwt")
63
63
  @Post(':id/generate-code')
64
64
  generateCode(@Param('id', ParseIntPipe) id: number) {
65
- return this.moduleMetadataService.generateCode({ moduleId: id });
65
+ return this.moduleMetadataService.generateCodeViaCtl(id);
66
66
  }
67
67
 
68
68
 
@@ -7,7 +7,7 @@ import { MqMessageQueueService } from '../services/mq-message-queue.service';
7
7
  import { SolidRequestContextDto } from 'src/dtos/solid-request-context.dto';
8
8
  import { SolidRequestContextDecorator } from 'src/decorators/solid-request-context.decorator';
9
9
 
10
- @ApiTags('Queues')
10
+ @ApiTags('Solid Core')
11
11
  @Controller('mq-message-queue') //FIXME: Change this to the model plural name
12
12
  export class MqMessageQueueController {
13
13
  constructor(protected readonly service: MqMessageQueueService) { }
@@ -7,7 +7,7 @@ import { AnyFilesInterceptor } from '@nestjs/platform-express';
7
7
  import { SolidRequestContextDecorator } from 'src/decorators/solid-request-context.decorator';
8
8
  import { SolidRequestContextDto } from 'src/dtos/solid-request-context.dto';
9
9
 
10
- @ApiTags('Queues')
10
+ @ApiTags('Solid Core')
11
11
  @Controller('mq-message') //FIXME: Change this to the model plural name
12
12
  export class MqMessageController {
13
13
  constructor(protected readonly service: MqMessageService) { }
@@ -9,7 +9,7 @@ import { SolidRequestContextDto } from 'src/dtos/solid-request-context.dto';
9
9
  import { ActiveUser } from 'src/decorators/active-user.decorator';
10
10
  import { ActiveUserData } from 'src/interfaces/active-user-data.interface';
11
11
 
12
- @ApiTags('App Builder')
12
+ @ApiTags('Solid Core')
13
13
  @Controller('view-metadata') //FIXME: Change this to the model plural name
14
14
  export class ViewMetadataController {
15
15
  constructor(private readonly service: ViewMetadataService) { }
@@ -0,0 +1,84 @@
1
+ import { ApiProperty } from '@nestjs/swagger';
2
+ import { IsDate, IsInt, IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator';
3
+
4
+ export class CreateMcpAuditLogDto {
5
+ @IsOptional()
6
+ @IsInt()
7
+ @ApiProperty()
8
+ userId: number;
9
+
10
+ @IsOptional()
11
+ @IsInt()
12
+ @ApiProperty()
13
+ apiKeyId: number;
14
+
15
+ @IsOptional()
16
+ @IsString()
17
+ @ApiProperty()
18
+ username: string;
19
+
20
+ @IsNotEmpty()
21
+ @IsString()
22
+ @ApiProperty()
23
+ transport: string;
24
+
25
+ @IsOptional()
26
+ @IsString()
27
+ @ApiProperty()
28
+ mcpSessionId: string;
29
+
30
+ @IsOptional()
31
+ @IsString()
32
+ @ApiProperty()
33
+ clientAddr: string;
34
+
35
+ @IsNotEmpty()
36
+ @IsString()
37
+ @ApiProperty()
38
+ method: string;
39
+
40
+ @IsOptional()
41
+ @IsString()
42
+ @ApiProperty()
43
+ requestId: string;
44
+
45
+ @IsOptional()
46
+ @IsString()
47
+ @ApiProperty()
48
+ toolName: string;
49
+
50
+ @IsOptional()
51
+ @IsString()
52
+ @ApiProperty()
53
+ requestParams: string;
54
+
55
+ @IsNotEmpty()
56
+ @IsString()
57
+ @ApiProperty()
58
+ status: string;
59
+
60
+ @IsOptional()
61
+ @IsString()
62
+ @ApiProperty()
63
+ responseResult: string;
64
+
65
+ @IsOptional()
66
+ @IsInt()
67
+ @ApiProperty()
68
+ errorCode: number;
69
+
70
+ @IsOptional()
71
+ @IsString()
72
+ @ApiProperty()
73
+ errorMessage: string;
74
+
75
+ @IsOptional()
76
+ @IsNumber()
77
+ @ApiProperty()
78
+ durationMs: number;
79
+
80
+ @IsOptional()
81
+ @IsDate()
82
+ @ApiProperty()
83
+ createdAt: Date;
84
+ }
@@ -0,0 +1,14 @@
1
+ import { ApiProperty } from '@nestjs/swagger';
2
+ import { IsNotEmpty, IsOptional, IsString } from 'class-validator';
3
+
4
+ export class UpdateChatterNoteMessageDto {
5
+ @IsString()
6
+ @IsOptional()
7
+ @ApiProperty()
8
+ messageBody: string;
9
+
10
+ @IsString()
11
+ @IsOptional()
12
+ @ApiProperty({ required: false, description: 'Comma-separated media IDs to remove from this note.' })
13
+ removeAttachmentIds?: string;
14
+ }
@@ -0,0 +1,83 @@
1
+ import { ApiProperty } from '@nestjs/swagger';
2
+ import { IsInt, IsNumber, IsOptional, IsString } from 'class-validator';
3
+
4
+ export class UpdateMcpAuditLogDto {
5
+ @IsOptional()
6
+ @IsInt()
7
+ id: number;
8
+
9
+ @IsOptional()
10
+ @IsInt()
11
+ @ApiProperty()
12
+ userId: number;
13
+
14
+ @IsOptional()
15
+ @IsInt()
16
+ @ApiProperty()
17
+ apiKeyId: number;
18
+
19
+ @IsOptional()
20
+ @IsString()
21
+ @ApiProperty()
22
+ username: string;
23
+
24
+ @IsOptional()
25
+ @IsString()
26
+ @ApiProperty()
27
+ transport: string;
28
+
29
+ @IsOptional()
30
+ @IsString()
31
+ @ApiProperty()
32
+ mcpSessionId: string;
33
+
34
+ @IsOptional()
35
+ @IsString()
36
+ @ApiProperty()
37
+ clientAddr: string;
38
+
39
+ @IsOptional()
40
+ @IsString()
41
+ @ApiProperty()
42
+ method: string;
43
+
44
+ @IsOptional()
45
+ @IsString()
46
+ @ApiProperty()
47
+ requestId: string;
48
+
49
+ @IsOptional()
50
+ @IsString()
51
+ @ApiProperty()
52
+ toolName: string;
53
+
54
+ @IsOptional()
55
+ @IsString()
56
+ @ApiProperty()
57
+ requestParams: string;
58
+
59
+ @IsOptional()
60
+ @IsString()
61
+ @ApiProperty()
62
+ status: string;
63
+
64
+ @IsOptional()
65
+ @IsString()
66
+ @ApiProperty()
67
+ responseResult: string;
68
+
69
+ @IsOptional()
70
+ @IsInt()
71
+ @ApiProperty()
72
+ errorCode: number;
73
+
74
+ @IsOptional()
75
+ @IsString()
76
+ @ApiProperty()
77
+ errorMessage: string;
78
+
79
+ @IsOptional()
80
+ @IsNumber()
81
+ @ApiProperty()
82
+ durationMs: number;
83
+ }
@@ -161,4 +161,8 @@ export class UpdateUserDto {
161
161
  @IsOptional()
162
162
  @ApiProperty()
163
163
  userViewMetadataCommand: string;
164
+ @IsOptional()
165
+ @IsInt()
166
+ @ApiProperty()
167
+ failedLoginAttempts: number;
164
168
  }
@@ -18,7 +18,6 @@ export class ChatterMessageDetails extends CommonEntity {
18
18
  @Column({ type: "varchar", nullable: true })
19
19
  oldValueDisplay: string;
20
20
 
21
- @Index()
22
21
  @Column({ type: "varchar", nullable: true })
23
22
  newValueDisplay: string;
24
23
 
@@ -30,4 +29,4 @@ export class ChatterMessageDetails extends CommonEntity {
30
29
 
31
30
  @Column({ type: "varchar", nullable: true })
32
31
  fieldType: string;
33
- }
32
+ }
@@ -0,0 +1,55 @@
1
+ import { Column, Entity, Index } from 'typeorm';
2
+ import { CommonEntity } from 'src/entities/common.entity';
3
+ import { getColumnType } from 'src/helpers/typeorm-db-helper';
4
+
5
+ @Entity({ name: 'ss_mcp_audit_log' })
6
+ export class McpAuditLog extends CommonEntity {
7
+ @Index()
8
+ @Column({ nullable: true })
9
+ userId: number;
10
+
11
+ @Column({ nullable: true })
12
+ apiKeyId: number;
13
+
14
+ @Column({ nullable: true, length: 128 })
15
+ username: string;
16
+
17
+ @Column({ length: 32 })
18
+ transport: string;
19
+
20
+ @Index()
21
+ @Column({ nullable: true, length: 64 })
22
+ mcpSessionId: string;
23
+
24
+ @Column({ nullable: true, length: 64 })
25
+ clientAddr: string;
26
+
27
+ @Index()
28
+ @Column({ length: 64 })
29
+ method: string;
30
+
31
+ @Column({ nullable: true, length: 64 })
32
+ requestId: string;
33
+
34
+ @Index()
35
+ @Column({ nullable: true, length: 128 })
36
+ toolName: string;
37
+
38
+ @Column({ nullable: true, ...getColumnType('longText') })
39
+ requestParams: string;
40
+
41
+ @Column({ length: 16 })
42
+ status: string;
43
+
44
+ @Column({ nullable: true, ...getColumnType('longText') })
45
+ responseResult: string;
46
+
47
+ @Column({ nullable: true })
48
+ errorCode: number;
49
+
50
+ @Column({ nullable: true, ...getColumnType('longText') })
51
+ errorMessage: string;
52
+
53
+ @Column({ nullable: true, ...getColumnType('decimal') })
54
+ durationMs: number;
55
+ }
@@ -177,7 +177,7 @@ export class User extends CommonEntity {
177
177
  @Column({ nullable: true })
178
178
  rehashedAt: Date;
179
179
 
180
- // dont send to client
180
+ @Expose()
181
181
  @Column({ type: "int", default: 0 })
182
182
  failedLoginAttempts: number = 0;
183
183