@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
@@ -1,42 +1,43 @@
1
- import { Inject, Injectable, Logger } from "@nestjs/common";
2
- import { ConfigType } from "@nestjs/config";
1
+ import { Injectable, Logger } from "@nestjs/common";
3
2
  import { ModuleRef } from "@nestjs/core";
4
3
  import { SolidRegistry } from "src/helpers/solid-registry";
5
4
  import { IWhatsAppTransport } from "src/interfaces";
6
5
  import { SettingService } from "src/services/setting.service";
7
6
  import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
8
7
 
9
- function norm(s?: string) {
10
- return s?.trim().toLowerCase();
11
- }
12
-
13
- // This factory will be use to return a mail service instance, using the configured environment variables
14
8
  @Injectable()
15
9
  export class WhatsAppFactory {
16
- private readonly logger = new Logger(this.constructor.name);
17
- constructor(
18
- private readonly moduleRef: ModuleRef, // Use the module ref to dynamically resolve the mail service
19
- private readonly solidRegistry: SolidRegistry,
20
- private readonly settingService: SettingService,
21
- ) { }
22
-
23
- getWhatsappService(name: string = null): IWhatsAppTransport {
24
- // This is the default provider
25
- const whatsappServiceName = name || this.settingService.getConfigValue<SolidCoreSetting>("whatsappProvider");
26
- if (!whatsappServiceName) {
27
- throw new Error("Unable to resolve whatsapp provider")
28
- }
29
- const whatsappProviders = this.solidRegistry.getWhatsappProviders();
30
-
31
- // Return the instance which matches the whatsappServiceName
32
- if (!whatsappProviders.length) {
33
- // throw new Error("No mail providers are registered.");
34
- this.logger.error("No whatsapp providers are registered.");
35
- }
36
-
37
- const whatsappServiceProvider = whatsappProviders.find(provider => provider.name === whatsappServiceName);
38
-
39
- return whatsappServiceProvider.instance as IWhatsAppTransport;
10
+ private readonly logger = new Logger(WhatsAppFactory.name);
11
+
12
+ constructor(
13
+ private readonly moduleRef: ModuleRef,
14
+ private readonly solidRegistry: SolidRegistry,
15
+ private readonly settingService: SettingService,
16
+ ) {}
17
+
18
+ getWhatsappService(name?: string): IWhatsAppTransport {
19
+ const providerKey =
20
+ name ||
21
+ this.settingService.getConfigValue<SolidCoreSetting>("whatsappProvider");
22
+
23
+ if (!providerKey) {
24
+ throw new Error("Unable to resolve whatsapp provider");
25
+ }
26
+
27
+ const whatsappProviders = this.solidRegistry.getWhatsappProviders();
28
+
29
+ if (!whatsappProviders.length) {
30
+ throw new Error("No whatsapp providers are registered.");
31
+ }
32
+
33
+ const whatsappServiceProvider = whatsappProviders.find((provider) =>
34
+ provider.name?.toLowerCase().includes(providerKey.toLowerCase()),
35
+ );
36
+
37
+ if (!whatsappServiceProvider) {
38
+ throw new Error(`WhatsApp provider '${providerKey}' not found`);
40
39
  }
41
40
 
42
- }
41
+ return whatsappServiceProvider.instance as IWhatsAppTransport;
42
+ }
43
+ }
@@ -1,5 +1,6 @@
1
1
  import { ValidationPipe } from '@nestjs/common';
2
2
  import { NestFactory } from '@nestjs/core';
3
+ import { WsAdapter } from '@nestjs/platform-ws';
3
4
  import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
4
5
  import { NextFunction, Request, Response } from 'express';
5
6
  import helmet from 'helmet';
@@ -8,7 +9,7 @@ import { existsSync } from 'fs';
8
9
  import { resolve } from 'path';
9
10
  import { WINSTON_MODULE_NEST_PROVIDER, WinstonModule } from 'nest-winston';
10
11
  import { CommandFactory } from 'nest-commander';
11
- import { WinstonLoggerConfig } from '../winston.logger';
12
+ import { createWinstonLoggerConfig } from '../winston.logger';
12
13
  import { WrapResponseInterceptor } from '../interceptors/wrap-response.interceptor';
13
14
  import { buildDefaultCorsOptions } from './cors.helper';
14
15
  import { buildDefaultSecurityHeaderOptions, buildPermissionsPolicyHeader, PermissionsPolicyConfig } from './security.helper';
@@ -49,6 +50,8 @@ export interface SolidBootstrapOptions {
49
50
  swagger?: SolidSwaggerOptions | false;
50
51
  /** Permissions-Policy header overrides (merged with defaults). */
51
52
  permissionsPolicyOverrides?: Partial<PermissionsPolicyConfig>;
53
+ /** Show full NestJS init logs during bootstrap (route mapping, module deps, pollers). Defaults to false. */
54
+ verboseBootstrap?: boolean;
52
55
  }
53
56
 
54
57
  /**
@@ -69,11 +72,12 @@ export async function bootstrapSolidApp(
69
72
  ): Promise<void> {
70
73
  registerGlobalProcessHandlers();
71
74
 
72
- const { globalPrefix = 'api', swagger = {}, permissionsPolicyOverrides = {} } = options;
75
+ const { globalPrefix = 'api', swagger = {}, permissionsPolicyOverrides = {}, verboseBootstrap = false } = options;
73
76
 
77
+ const startTime = Date.now();
74
78
  const appModule = await appModuleFactory();
75
79
  const app = await NestFactory.create(appModule, {
76
- logger: WinstonModule.createLogger(WinstonLoggerConfig),
80
+ logger: WinstonModule.createLogger({ ...createWinstonLoggerConfig(), level: verboseBootstrap ? 'debug' : 'error' }),
77
81
  });
78
82
 
79
83
  const apiEnabled = parseBooleanEnv('API_ENABLED', true);
@@ -114,9 +118,6 @@ export async function bootstrapSolidApp(
114
118
  next();
115
119
  });
116
120
 
117
- // Winston logger
118
- app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER));
119
-
120
121
  const port = process.env.PORT || 3000;
121
122
 
122
123
  if (globalPrefix) {
@@ -178,7 +179,16 @@ export async function bootstrapSolidApp(
178
179
  const types = require('pg').types;
179
180
  types.setTypeParser(types.builtins.INT8, (val: string) => parseInt(val));
180
181
 
182
+ app.useWebSocketAdapter(new WsAdapter(app));
183
+
181
184
  await app.listen(port);
185
+
186
+ // Wire up Winston as the runtime logger only AFTER listen — this suppresses all
187
+ // framework init noise (route mapping, module deps, onModuleInit) during boot.
188
+ app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER));
189
+
190
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);
191
+ app.get(WINSTON_MODULE_NEST_PROVIDER).log(`\x1b[32mServer started on port ${port} in ${elapsed}s\x1b[0m`, 'Bootstrap');
182
192
  }
183
193
 
184
194
  // ---- CLI bootstrap ----
@@ -4,6 +4,7 @@ import { spawn } from 'child_process';
4
4
  export type CommandWithArgs = {
5
5
  command: string;
6
6
  args: string[];
7
+ cwd?: string;
7
8
  };
8
9
 
9
10
  @Injectable()
@@ -43,6 +44,7 @@ export class CommandService {
43
44
  const child = spawn(command, spawnArgs, {
44
45
  shell: isWindows, // Use shell on Windows to handle .cmd files
45
46
  stdio: ['pipe', 'pipe', 'pipe'],
47
+ cwd: commandWithArgs.cwd,
46
48
  });
47
49
 
48
50
  let stdout = '';
@@ -20,7 +20,7 @@ export class BigIntFieldCrudManager implements FieldCrudManager {
20
20
  if (typeof fieldValue === 'string' || typeof fieldValue === 'number') {
21
21
  fieldValue = BigInt(fieldValue);
22
22
  }
23
- } catch (err) {
23
+ } catch (err: any) {
24
24
  return [{ field: this.options.fieldName, error: 'Invalid numeric value' }];
25
25
  }
26
26
  }
@@ -119,7 +119,7 @@ export class SelectionDynamicFieldCrudManager implements FieldCrudManager {
119
119
  }
120
120
  return false;
121
121
  }
122
- catch (error) {
122
+ catch (error: any) {
123
123
  // Use the values method as a fallback, if the value method is not implemented
124
124
  const values = await providerInstance.values('', ctxt);
125
125
  const isValid = values.some(v => v.value === fieldValue);
@@ -0,0 +1,178 @@
1
+ # Field Quality Checks And Fixes
2
+
3
+ This checklist tracks backend issues and logical enhancements for each field type in `solid-core-module`.
4
+
5
+ Use it for backend concerns only:
6
+
7
+ - CRUD validation
8
+ - transformation and normalization
9
+ - persistence behavior
10
+ - relation semantics
11
+ - field-level correctness and consistency
12
+
13
+ Frontend widget and rendering concerns belong in `solid-core-ui`.
14
+
15
+ ## `shortText`
16
+
17
+ - [ ] Resolve the `length` versus `max` contract for `shortText` and document one clear meaning for each attribute.
18
+ - [ ] Decide whether backend validation should also enforce `min`, so `shortText` constraints remain consistent even outside generated form flows.
19
+ - [ ] Return the configured regex mismatch message when `regexPatternNotMatchingErrorMsg` is present instead of always using a generic regex error.
20
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `shortText` field.
21
+ - [ ] Decide whether `shortText` should support optional normalization such as trimming or whitespace collapsing, and keep that decision consistent across comparable text field types.
22
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
23
+ - [ ] Add targeted coverage for partial update behavior, empty string versus null handling, regex validation, and max-length enforcement.
24
+ - [ ] Review whether the text-oriented managers share enough behavior to justify a common validation utility or base manager without weakening field-specific semantics.
25
+
26
+ ## `longText`
27
+
28
+ - [ ] Decide whether backend validation should also enforce `min` and `max`, so `longText` constraints remain consistent outside generated form flows.
29
+ - [ ] Return the configured regex mismatch message when `regexPatternNotMatchingErrorMsg` is present instead of always using a generic regex error.
30
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `longText` field.
31
+ - [ ] Decide whether `longText` should support optional normalization such as trimming trailing whitespace while preserving intentional line breaks.
32
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
33
+ - [ ] Add targeted coverage for multiline content, regex validation, partial updates, and empty string versus null handling.
34
+ - [ ] Review whether the text-oriented managers share enough behavior to justify a common validation utility or base manager without weakening field-specific semantics.
35
+
36
+ ## `richText`
37
+
38
+ - [ ] Decide whether backend validation should also enforce `min` and `max`, so `richText` constraints remain consistent outside generated form flows.
39
+ - [ ] Return the configured regex mismatch message when `regexPatternNotMatchingErrorMsg` is present instead of always using a generic regex error.
40
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `richText` field.
41
+ - [ ] Decide whether `richText` should support optional normalization or sanitization at save time, and define that behavior explicitly.
42
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
43
+ - [ ] Add targeted coverage for rich HTML-like content, regex validation, partial updates, and empty string versus null handling.
44
+ - [ ] Review whether the text-oriented managers share enough behavior to justify a common validation utility or base manager without weakening field-specific semantics.
45
+
46
+ ## `json`
47
+
48
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `json` field.
49
+ - [ ] Decide whether backend validation should accept only stringified JSON or also handle already-parsed object and array payloads more explicitly.
50
+ - [ ] Review whether the current JSON validation error should distinguish between invalid JSON syntax and unsupported runtime value shapes.
51
+ - [ ] Decide whether normalization or canonical stringification should happen before persistence for comparable JSON values.
52
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
53
+ - [ ] Add targeted coverage for object payloads, array payloads, stringified JSON payloads, invalid JSON, partial updates, and empty string versus null handling.
54
+
55
+ ## `int`
56
+
57
+ - [ ] Fix the current min/max activation rule, because backend validation only applies numeric bounds when the configured value is greater than `0`, which skips valid `0` and negative thresholds.
58
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits an `int` field.
59
+ - [ ] Decide whether the CRUD layer should normalize numeric strings into integers more explicitly before validation and persistence.
60
+ - [ ] Review whether integer fields should reject decimal-shaped inputs more clearly when values arrive from metadata-driven clients as strings.
61
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
62
+ - [ ] Add targeted coverage for `0`, negative values, numeric strings, invalid decimal-like input, min/max bounds, and partial update behavior.
63
+
64
+
65
+ ## `bigint`
66
+
67
+ - [ ] Clarify the authored support surface for `bigint`, because the CRUD manager contains numeric bound logic while the authored field surface does not currently present `min` and `max` in the same way as `int` and `decimal`.
68
+ - [ ] Fix or clarify the current numeric-bound activation rule if bigint bounds are intended to be supported, since the logic only applies bounds when the configured value is greater than `0`.
69
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `bigint` field.
70
+ - [ ] Decide what the canonical runtime contract should be for bigint inputs: native `bigint`, numeric strings, or finite JavaScript numbers.
71
+ - [ ] Review whether accepting finite JavaScript numbers for bigint validation is sufficient when exact large-integer fidelity matters.
72
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
73
+ - [ ] Add targeted coverage for numeric strings, very large values, invalid numeric input, bound handling, null handling, and partial update behavior.
74
+
75
+
76
+ ## `decimal`
77
+
78
+ - [ ] Fix the current min/max activation rule, because backend validation only applies numeric bounds when the configured value is greater than `0`, which skips valid `0` and negative thresholds.
79
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `decimal` field.
80
+ - [ ] Decide whether the CRUD layer should normalize numeric strings into decimal numbers more explicitly before validation and persistence.
81
+ - [ ] Review whether decimal fields need an explicit precision-and-scale contract instead of relying entirely on the persistence-layer `ormType`.
82
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
83
+ - [ ] Add targeted coverage for `0`, negative values, fractional values, numeric strings, invalid numeric input, min/max bounds, and partial update behavior.
84
+
85
+
86
+ ## `boolean`
87
+
88
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `boolean` field.
89
+ - [ ] Decide whether boolean CRUD validation should accept only runtime booleans or also normalize `"true"` and `"false"` string payloads when they arrive from metadata-driven clients.
90
+ - [ ] Review whether the required validation path should distinguish more clearly between an omitted value and an explicit `false` value, especially for partial updates.
91
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
92
+ - [ ] Add targeted coverage for `true`, `false`, null, empty string, string booleans, and partial update behavior.
93
+
94
+ ## `date`
95
+
96
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `date` field.
97
+ - [ ] Review whether the CRUD layer should accept only runtime `Date` objects or also normalize common serialized date inputs more explicitly before validation.
98
+ - [ ] Decide whether `date` and `datetime` should continue to share the same backend validation path or receive more distinct normalization and validation behavior.
99
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
100
+ - [ ] Add targeted coverage for `Date` objects, serialized date strings, null handling, invalid date inputs, and partial update behavior.
101
+
102
+ ## `datetime`
103
+
104
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `datetime` field.
105
+ - [ ] Review whether the CRUD layer should accept only runtime `Date` objects or also normalize common serialized datetime inputs more explicitly before validation.
106
+ - [ ] Decide whether `date` and `datetime` should continue to share the same backend validation path or receive more distinct normalization and validation behavior.
107
+ - [ ] Review whether timezone normalization rules should be documented and enforced more explicitly at save time.
108
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
109
+ - [ ] Add targeted coverage for `Date` objects, serialized datetime strings, null handling, timezone-sensitive values, invalid datetime inputs, and partial update behavior.
110
+
111
+ ## `time`
112
+
113
+ - [ ] Add an explicit CRUD-manager path for `SolidFieldType.time`, since the field currently has core UI support but is not routed through a dedicated backend field manager.
114
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `time` field.
115
+ - [ ] Decide what canonical persisted shape `time` should use: pure time string, database-native time value, or a normalized timestamp-derived representation.
116
+ - [ ] Review whether the CRUD layer should normalize common time inputs such as `HH:mm:ss`, ISO timestamps, and UI-submitted values more explicitly before validation and persistence.
117
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
118
+ - [ ] Add targeted coverage for `HH:mm:ss` inputs, ISO-style inputs, invalid time values, null handling, and partial update behavior.
119
+
120
+ ## `email`
121
+
122
+ - [ ] Decide whether backend validation should also enforce `min`, so email constraints remain consistent outside generated form flows.
123
+ - [ ] Return the configured regex mismatch message when `regexPatternNotMatchingErrorMsg` is present instead of always using a generic regex error.
124
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits an `email` field.
125
+ - [ ] Decide whether email values should support optional normalization such as trimming and lowercasing before persistence.
126
+ - [ ] Review whether uniqueness should receive any pre-save validation support at the CRUD layer or continue to rely entirely on persistence-layer constraints.
127
+ - [ ] Add targeted coverage for max-length enforcement, regex overrides, invalid email formats, null handling, and partial update behavior.
128
+
129
+ ## `password`
130
+
131
+ - [ ] Return the configured regex mismatch message when `regexPatternNotMatchingErrorMsg` is present instead of always using a generic password-regex error.
132
+ - [ ] Review whether password validation should produce clearer error messages for min, max, regex, and confirm-password mismatch failures.
133
+ - [ ] Clarify and implement the expected behavior for `defaultValue` on password fields, including whether it should be ignored entirely for secure create flows.
134
+ - [ ] Review whether password hashing and password-update flows should share a more explicit single contract across create and update operations.
135
+ - [ ] Decide whether password normalization should include trimming or whether exact raw user input should always be preserved before hashing.
136
+ - [ ] Add targeted coverage for create-required behavior, update-optional behavior, confirm-password mismatch, hashing behavior, regex fallback behavior, and partial update behavior.
137
+
138
+ ## `selectionStatic`
139
+
140
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `selectionStatic` field, especially for multi-select fields.
141
+ - [ ] Decide whether the CRUD layer should normalize single-select and multi-select payloads into one consistent stored shape before persistence.
142
+ - [ ] Review whether the current `selectionStaticValues` parsing should validate malformed `value:label` entries more explicitly instead of assuming a valid authored format.
143
+ - [ ] Add clearer error messaging when the submitted value has the wrong type versus when it is simply not part of the authored option set.
144
+ - [ ] Review whether numeric selection values need more explicit normalization, especially when values can arrive as strings from metadata-driven clients.
145
+ - [ ] Add targeted coverage for single-select string values, single-select numeric values, JSON-stringified multi-select arrays, invalid option tokens, malformed arrays, and partial update behavior.
146
+
147
+ ## `selectionDynamic`
148
+
149
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `selectionDynamic` field, especially for multi-select fields.
150
+ - [ ] Review whether the CRUD layer should normalize single-select and multi-select payloads into one consistent stored shape before persistence.
151
+ - [ ] Add clearer error messaging when the submitted value has the wrong type, when the provider rejects the value, and when the provider itself cannot be resolved.
152
+ - [ ] Review whether numeric selection values need more explicit normalization, especially when values can arrive as strings from metadata-driven clients.
153
+ - [ ] Clarify how `validateOnSave` in `selectionDynamicProviderCtxt` should be treated as part of the supported field contract and whether more provider-context keys should be validated.
154
+ - [ ] Add targeted coverage for provider-backed single-select values, JSON-stringified multi-select arrays, invalid provider names, `validateOnSave: false`, invalid option values, and partial update behavior.
155
+
156
+ ## `many-to-one`
157
+
158
+ - [ ] Review pending.
159
+
160
+ ## `one-to-many`
161
+
162
+ - [ ] Review pending.
163
+
164
+ ## `many-to-many`
165
+
166
+ - [ ] Review pending.
167
+
168
+ ## `mediaSingle`
169
+
170
+ - [ ] Review pending.
171
+
172
+ ## `mediaMultiple`
173
+
174
+ - [ ] Review pending.
175
+
176
+ ## `computed`
177
+
178
+ - [ ] Review pending.
@@ -23,7 +23,7 @@ export class ModuleMetadataHelperService {
23
23
  const fileContent = await fs.readFile(configFilePath, 'utf8');
24
24
  return JSON.parse(fileContent);
25
25
  }
26
- catch (error) {
26
+ catch (error: any) {
27
27
  this.logger.error(`module metadata configuration non existent at: ${configFilePath}`);
28
28
  }
29
29
 
package/src/index.ts CHANGED
@@ -29,6 +29,7 @@ export * from './decorators/settings-provider.decorator'
29
29
  export * from './decorators/extension-user-creation-provider.decorator'
30
30
 
31
31
  export * from './dtos/post-chatter-message.dto'
32
+ export * from './dtos/update-chatter-note-message.dto'
32
33
  export * from './dtos/security-rule-config.dto'
33
34
  export * from './dtos/basic-filters.dto'
34
35
  export * from './dtos/solid-request-context.dto'
@@ -49,6 +50,7 @@ export * from './dtos/create-mq-message-queue.dto'
49
50
  export * from './dtos/create-mq-message.dto'
50
51
  export * from './dtos/create-agent-session.dto'
51
52
  export * from './dtos/create-agent-event.dto'
53
+ export * from './dtos/create-mcp-audit-log.dto'
52
54
  export * from './dtos/create-scheduled-job.dto'
53
55
  export * from './dtos/create-permission-metadata.dto'
54
56
  export * from './dtos/create-role-metadata.dto'
@@ -89,6 +91,7 @@ export * from './dtos/update-mq-message-queue.dto'
89
91
  export * from './dtos/update-mq-message.dto'
90
92
  export * from './dtos/update-agent-session.dto'
91
93
  export * from './dtos/update-agent-event.dto'
94
+ export * from './dtos/update-mcp-audit-log.dto'
92
95
  export * from './dtos/update-scheduled-job.dto'
93
96
  export * from './dtos/update-permission-metadata.dto'
94
97
  export * from './dtos/update-role-metadata.dto'
@@ -122,6 +125,7 @@ export * from './entities/mq-message-queue.entity'
122
125
  export * from './entities/mq-message.entity'
123
126
  export * from './entities/agent-session.entity'
124
127
  export * from './entities/agent-event.entity'
128
+ export * from './entities/mcp-audit-log.entity'
125
129
  export * from './entities/scheduled-job.entity'
126
130
  export * from './entities/permission-metadata.entity'
127
131
  export * from './entities/role-metadata.entity'
@@ -297,6 +301,7 @@ export * from './services/mq-message-queue.service'
297
301
  export * from './services/mq-message.service'
298
302
  export * from './services/agent-session.service'
299
303
  export * from './services/agent-event.service'
304
+ export * from './services/mcp-audit-log.service'
300
305
  export * from './services/scheduled-job.service'
301
306
  export * from './services/pdf.service'
302
307
  export * from './services/permission-metadata.service'
@@ -318,6 +323,7 @@ export * from './services/solid-introspect.service'
318
323
  export * from './services/user.service'
319
324
  export * from './services/view-metadata.service'
320
325
  export * from './services/whatsapp/Msg91WhatsappService' //rename
326
+ export * from './services/whatsapp/GupshupOtpWhatsappService'
321
327
  export * from './services/setting.service'
322
328
  export * from './services/encryption.service'
323
329
  export * from './services/info.service'
package/src/interfaces.ts CHANGED
@@ -42,6 +42,7 @@ export interface ValidationError {
42
42
  export interface MediaStorageProvider<T> {
43
43
  store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;
44
44
  delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void>;
45
+ deleteByMediaRecord(media: Media): Promise<void>;
45
46
  retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;
46
47
  storeStreams(streamPairs: [Readable, string][], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;
47
48
  // delete(file: string): Promise<void>;
@@ -121,8 +122,6 @@ export interface CodeGenerationOptions {
121
122
  fieldIdsForRemoval?: number[];
122
123
  fieldNamesForRemoval?: string[];
123
124
  dryRun?: boolean;
124
- fieldIdsForRefresh?: number[];
125
- fieldNamesForRefresh?: string[];
126
125
  }
127
126
 
128
127
  export interface TriggerMcpClientOptions {
@@ -450,4 +449,3 @@ export interface AuditQueuePayload {
450
449
  updatedColumnNames?: string[];
451
450
  userId?: number | null;
452
451
  }
453
-
@@ -35,7 +35,7 @@ export class ChatterQueueSubscriberDatabase extends DatabaseSubscriber<AuditQueu
35
35
 
36
36
  switch (p.eventType) {
37
37
  case 'insert':
38
- await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName);
38
+ await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName, false, p.userId);
39
39
  break;
40
40
  case 'update':
41
41
  await this.chatterMessageService.postAuditMessageOnUpdate(
@@ -43,10 +43,12 @@ export class ChatterQueueSubscriberDatabase extends DatabaseSubscriber<AuditQueu
43
43
  p.modelName,
44
44
  p.before,
45
45
  (p.updatedColumnNames ?? []).map(n => ({ propertyName: n })),
46
+ false,
47
+ p.userId,
46
48
  );
47
49
  break;
48
50
  case 'delete':
49
- await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before);
51
+ await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before, false, p.userId);
50
52
  break;
51
53
  }
52
54
  }
@@ -60,7 +60,7 @@ export class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<Trigg
60
60
  // Fallback
61
61
  nestedResponse = String(raw);
62
62
  }
63
- } catch (err) {
63
+ } catch (err: any) {
64
64
  this.triggerMcpClientSubscriberLogger.error("Error processing AI response:", err);
65
65
  nestedResponse = `Error handling response: ${err?.message || String(err)}`;
66
66
  }
@@ -33,7 +33,7 @@ export class ChatterQueueSubscriberRabbitmq extends RabbitMqSubscriber<AuditQueu
33
33
 
34
34
  switch (p.eventType) {
35
35
  case 'insert':
36
- await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName);
36
+ await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName, false, p.userId);
37
37
  break;
38
38
  case 'update':
39
39
  await this.chatterMessageService.postAuditMessageOnUpdate(
@@ -41,10 +41,12 @@ export class ChatterQueueSubscriberRabbitmq extends RabbitMqSubscriber<AuditQueu
41
41
  p.modelName,
42
42
  p.before,
43
43
  (p.updatedColumnNames ?? []).map(n => ({ propertyName: n })),
44
+ false,
45
+ p.userId,
44
46
  );
45
47
  break;
46
48
  case 'delete':
47
- await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before);
49
+ await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before, false, p.userId);
48
50
  break;
49
51
  }
50
52
  }
@@ -33,13 +33,20 @@ export class ChatterQueueSubscriberRedis extends RedisSubscriber<any> {
33
33
 
34
34
  switch (p.eventType) {
35
35
  case 'insert':
36
- await this.chatterMessageService.postAuditMessageOnInsert(p.after, { name: p.modelName } as any);
36
+ await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName, false, p.userId);
37
37
  break;
38
38
  case 'update':
39
- await this.chatterMessageService.postAuditMessageOnUpdate(p.after, { name: p.modelName } as any, p.before, (p.updatedColumnNames || []).map(n => ({ propertyName: n })));
39
+ await this.chatterMessageService.postAuditMessageOnUpdate(
40
+ p.after,
41
+ p.modelName,
42
+ p.before,
43
+ (p.updatedColumnNames || []).map(n => ({ propertyName: n })),
44
+ false,
45
+ p.userId,
46
+ );
40
47
  break;
41
48
  case 'delete':
42
- await this.chatterMessageService.postAuditMessageOnDelete(p.before, { name: p.modelName } as any, p.before);
49
+ await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before, false, p.userId);
43
50
  break;
44
51
  }
45
52
  }
@@ -1,14 +1,57 @@
1
-
2
1
  import { User } from "../entities/user.entity";
3
2
  import { OnEvent } from "@nestjs/event-emitter";
4
3
  import { Injectable, Logger } from "@nestjs/common";
5
4
  import { EventDetails, EventType } from "../interfaces";
5
+ import { WhatsAppFactory } from "src/factories/whatsapp.factory";
6
6
 
7
7
  @Injectable()
8
8
  export class UserRegistrationListener {
9
- private logger = new Logger(UserRegistrationListener.name);
10
- @OnEvent(EventType.USER_REGISTERED)
11
- handleUserRegistration(event: EventDetails<User>) {
12
- this.logger.log(`User registered with details: ${JSON.stringify(event.payload)}`);
9
+ private readonly logger = new Logger(UserRegistrationListener.name);
10
+
11
+ constructor(private readonly whatsAppFactory: WhatsAppFactory) {}
12
+
13
+ @OnEvent(EventType.USER_REGISTERED)
14
+ async handleUserRegistration(event: EventDetails<User>) {
15
+ this.logger.log(`User registered with details: ${JSON.stringify(event.payload)}`);
16
+
17
+ const notifyTo = process.env.WHATSAPP_EVENT_NOTIFY_TO;
18
+ if (!notifyTo) {
19
+ this.logger.debug("WHATSAPP_EVENT_NOTIFY_TO not set. Skipping registration WhatsApp notification.");
20
+ return;
21
+ }
22
+
23
+ try {
24
+ const whatsappService = this.whatsAppFactory.getWhatsappService();
25
+ const username = event.payload?.username || "User";
26
+ const userId = event.payload?.id || "N/A";
27
+
28
+ await whatsappService.sendWhatsAppMessage(
29
+ notifyTo,
30
+ "registration_event",
31
+ {
32
+ payload: {
33
+ channel: "whatsapp",
34
+ source: process.env.COMMON_GUPSHUP_WHATSAPP_SOURCE,
35
+ destination: notifyTo,
36
+ "src.name": process.env.COMMON_GUPSHUP_APP_NAME || "solidx",
37
+ message: {
38
+ type: "text",
39
+ text: `New user registered: ${username} (id: ${userId})`,
40
+ },
41
+ },
42
+ },
43
+ );
44
+
45
+ this.logger.log(`Sent registration WhatsApp notification to ${notifyTo}`);
46
+ } catch (error: any) {
47
+ const status = error?.response?.status;
48
+ const responseData = error?.response?.data;
49
+ const errorMessage = error?.message;
50
+ const stack = error?.stack;
51
+
52
+ this.logger.error(
53
+ `Failed to send registration WhatsApp notification to ${notifyTo}. status=${status ?? "unknown"}, response=${typeof responseData === "object" ? JSON.stringify(responseData) : responseData}, message=${errorMessage}, stack=${stack}`,
54
+ );
13
55
  }
14
- }
56
+ }
57
+ }
@@ -0,0 +1,17 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { McpAuditLog } from 'src/entities/mcp-audit-log.entity';
3
+ import { RequestContextService } from 'src/services/request-context.service';
4
+ import { DataSource } from 'typeorm';
5
+ import { SecurityRuleRepository } from './security-rule.repository';
6
+ import { SolidBaseRepository } from './solid-base.repository';
7
+
8
+ @Injectable()
9
+ export class McpAuditLogRepository extends SolidBaseRepository<McpAuditLog> {
10
+ constructor(
11
+ readonly dataSource: DataSource,
12
+ readonly requestContextService: RequestContextService,
13
+ readonly securityRuleRepository: SecurityRuleRepository,
14
+ ) {
15
+ super(McpAuditLog, dataSource, requestContextService, securityRuleRepository);
16
+ }
17
+ }
@@ -56,7 +56,7 @@ export class SecurityRuleRepository extends SolidBaseRepository<SecurityRule> {
56
56
 
57
57
  evaluatedRules.push(evaluatedRule);
58
58
 
59
- } catch (error) {
59
+ } catch (error: any) {
60
60
  this.logger.error(`Error parsing security rule: ${rule.securityRuleConfig}`, error);
61
61
  this.logger.error(error.stack);
62
62
  throw error;