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

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 (320) hide show
  1. package/CLAUDE.md +18 -0
  2. package/CURRENT_PROMPT +6 -0
  3. package/dist/commands/refresh-model.command.d.ts +1 -7
  4. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  5. package/dist/commands/refresh-model.command.js +4 -49
  6. package/dist/commands/refresh-model.command.js.map +1 -1
  7. package/dist/commands/refresh-module.command.d.ts +0 -2
  8. package/dist/commands/refresh-module.command.d.ts.map +1 -1
  9. package/dist/commands/refresh-module.command.js +3 -16
  10. package/dist/commands/refresh-module.command.js.map +1 -1
  11. package/dist/commands/test-data.command.d.ts +2 -0
  12. package/dist/commands/test-data.command.d.ts.map +1 -1
  13. package/dist/commands/test-data.command.js +32 -6
  14. package/dist/commands/test-data.command.js.map +1 -1
  15. package/dist/controllers/action-metadata.controller.js +1 -1
  16. package/dist/controllers/action-metadata.controller.js.map +1 -1
  17. package/dist/controllers/chatter-message.controller.d.ts +2 -0
  18. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  19. package/dist/controllers/chatter-message.controller.js +17 -0
  20. package/dist/controllers/chatter-message.controller.js.map +1 -1
  21. package/dist/controllers/facebook-authentication.controller.js +1 -1
  22. package/dist/controllers/facebook-authentication.controller.js.map +1 -1
  23. package/dist/controllers/google-authentication.controller.js +1 -1
  24. package/dist/controllers/google-authentication.controller.js.map +1 -1
  25. package/dist/controllers/gupshup-webhook.controller.d.ts +11 -0
  26. package/dist/controllers/gupshup-webhook.controller.d.ts.map +1 -0
  27. package/dist/controllers/gupshup-webhook.controller.js +87 -0
  28. package/dist/controllers/gupshup-webhook.controller.js.map +1 -0
  29. package/dist/controllers/mcp-audit-log.controller.d.ts +35 -0
  30. package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -0
  31. package/dist/controllers/mcp-audit-log.controller.js +147 -0
  32. package/dist/controllers/mcp-audit-log.controller.js.map +1 -0
  33. package/dist/controllers/menu-item-metadata.controller.js +1 -1
  34. package/dist/controllers/menu-item-metadata.controller.js.map +1 -1
  35. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts +16 -0
  36. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts.map +1 -0
  37. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js +133 -0
  38. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js.map +1 -0
  39. package/dist/controllers/microsoft-authentication.controller.js +1 -1
  40. package/dist/controllers/microsoft-authentication.controller.js.map +1 -1
  41. package/dist/controllers/model-metadata.controller.d.ts +1 -1
  42. package/dist/controllers/model-metadata.controller.js +2 -2
  43. package/dist/controllers/model-metadata.controller.js.map +1 -1
  44. package/dist/controllers/module-metadata.controller.js +1 -1
  45. package/dist/controllers/module-metadata.controller.js.map +1 -1
  46. package/dist/controllers/mq-message-queue.controller.js +1 -1
  47. package/dist/controllers/mq-message-queue.controller.js.map +1 -1
  48. package/dist/controllers/mq-message.controller.js +1 -1
  49. package/dist/controllers/mq-message.controller.js.map +1 -1
  50. package/dist/controllers/view-metadata.controller.js +1 -1
  51. package/dist/controllers/view-metadata.controller.js.map +1 -1
  52. package/dist/dtos/create-mcp-audit-log.dto.d.ts +19 -0
  53. package/dist/dtos/create-mcp-audit-log.dto.d.ts.map +1 -0
  54. package/dist/dtos/create-mcp-audit-log.dto.js +118 -0
  55. package/dist/dtos/create-mcp-audit-log.dto.js.map +1 -0
  56. package/dist/dtos/update-chatter-note-message.dto.d.ts +5 -0
  57. package/dist/dtos/update-chatter-note-message.dto.d.ts.map +1 -0
  58. package/dist/dtos/update-chatter-note-message.dto.js +34 -0
  59. package/dist/dtos/update-chatter-note-message.dto.js.map +1 -0
  60. package/dist/dtos/update-mcp-audit-log.dto.d.ts +19 -0
  61. package/dist/dtos/update-mcp-audit-log.dto.d.ts.map +1 -0
  62. package/dist/dtos/update-mcp-audit-log.dto.js +117 -0
  63. package/dist/dtos/update-mcp-audit-log.dto.js.map +1 -0
  64. package/dist/dtos/update-user.dto.d.ts +1 -0
  65. package/dist/dtos/update-user.dto.d.ts.map +1 -1
  66. package/dist/dtos/update-user.dto.js +7 -1
  67. package/dist/dtos/update-user.dto.js.map +1 -1
  68. package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
  69. package/dist/entities/chatter-message-details.entity.js +0 -1
  70. package/dist/entities/chatter-message-details.entity.js.map +1 -1
  71. package/dist/entities/mcp-audit-log.entity.d.ts +19 -0
  72. package/dist/entities/mcp-audit-log.entity.d.ts.map +1 -0
  73. package/dist/entities/mcp-audit-log.entity.js +90 -0
  74. package/dist/entities/mcp-audit-log.entity.js.map +1 -0
  75. package/dist/entities/user.entity.js +1 -0
  76. package/dist/entities/user.entity.js.map +1 -1
  77. package/dist/factories/whatsapp.factory.d.ts.map +1 -1
  78. package/dist/factories/whatsapp.factory.js +13 -11
  79. package/dist/factories/whatsapp.factory.js.map +1 -1
  80. package/dist/helpers/bootstrap.helper.d.ts +1 -0
  81. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  82. package/dist/helpers/bootstrap.helper.js +8 -3
  83. package/dist/helpers/bootstrap.helper.js.map +1 -1
  84. package/dist/helpers/command.service.d.ts +1 -0
  85. package/dist/helpers/command.service.d.ts.map +1 -1
  86. package/dist/helpers/command.service.js +1 -0
  87. package/dist/helpers/command.service.js.map +1 -1
  88. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
  89. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
  90. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  91. package/dist/index.d.ts +6 -0
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +6 -0
  94. package/dist/index.js.map +1 -1
  95. package/dist/interfaces.d.ts +1 -2
  96. package/dist/interfaces.d.ts.map +1 -1
  97. package/dist/interfaces.js.map +1 -1
  98. package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts.map +1 -1
  99. package/dist/jobs/database/chatter-queue-subscriber-database.service.js +3 -3
  100. package/dist/jobs/database/chatter-queue-subscriber-database.service.js.map +1 -1
  101. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  102. package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.d.ts.map +1 -1
  103. package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js +3 -3
  104. package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js.map +1 -1
  105. package/dist/jobs/redis/chatter-queue-subscriber-redis.service.d.ts.map +1 -1
  106. package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js +3 -3
  107. package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js.map +1 -1
  108. package/dist/listeners/user-registration.listener.d.ts +5 -2
  109. package/dist/listeners/user-registration.listener.d.ts.map +1 -1
  110. package/dist/listeners/user-registration.listener.js +37 -4
  111. package/dist/listeners/user-registration.listener.js.map +1 -1
  112. package/dist/repository/mcp-audit-log.repository.d.ts +12 -0
  113. package/dist/repository/mcp-audit-log.repository.d.ts.map +1 -0
  114. package/dist/repository/mcp-audit-log.repository.js +34 -0
  115. package/dist/repository/mcp-audit-log.repository.js.map +1 -0
  116. package/dist/repository/security-rule.repository.js.map +1 -1
  117. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  118. package/dist/seeders/module-test-data.service.d.ts +9 -0
  119. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  120. package/dist/seeders/module-test-data.service.js +155 -18
  121. package/dist/seeders/module-test-data.service.js.map +1 -1
  122. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  123. package/dist/seeders/seed-data/solid-core-metadata.json +506 -49
  124. package/dist/services/authentication.service.d.ts +6 -1
  125. package/dist/services/authentication.service.d.ts.map +1 -1
  126. package/dist/services/authentication.service.js +145 -15
  127. package/dist/services/authentication.service.js.map +1 -1
  128. package/dist/services/chatter-message.service.d.ts +13 -4
  129. package/dist/services/chatter-message.service.d.ts.map +1 -1
  130. package/dist/services/chatter-message.service.js +117 -37
  131. package/dist/services/chatter-message.service.js.map +1 -1
  132. package/dist/services/crud.service.js.map +1 -1
  133. package/dist/services/csv.service.js.map +1 -1
  134. package/dist/services/dashboard.service.js.map +1 -1
  135. package/dist/services/database/database-bootstrap.service.js.map +1 -1
  136. package/dist/services/excel.service.js.map +1 -1
  137. package/dist/services/export-transaction.service.js.map +1 -1
  138. package/dist/services/field-metadata.service.js.map +1 -1
  139. package/dist/services/fixtures.service.js.map +1 -1
  140. package/dist/services/import-transaction.service.js.map +1 -1
  141. package/dist/services/list-of-values.service.js.map +1 -1
  142. package/dist/services/mcp-audit-log.service.d.ts +12 -0
  143. package/dist/services/mcp-audit-log.service.d.ts.map +1 -0
  144. package/dist/services/mcp-audit-log.service.js +38 -0
  145. package/dist/services/mcp-audit-log.service.js.map +1 -0
  146. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +1 -0
  147. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  148. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +11 -0
  149. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  150. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +1 -0
  151. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  152. package/dist/services/mediaStorageProviders/file-storage-provider.js +6 -0
  153. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  154. package/dist/services/model-metadata.service.d.ts +4 -1
  155. package/dist/services/model-metadata.service.d.ts.map +1 -1
  156. package/dist/services/model-metadata.service.js +24 -24
  157. package/dist/services/model-metadata.service.js.map +1 -1
  158. package/dist/services/module-metadata.service.d.ts +4 -1
  159. package/dist/services/module-metadata.service.d.ts.map +1 -1
  160. package/dist/services/module-metadata.service.js +19 -2
  161. package/dist/services/module-metadata.service.js.map +1 -1
  162. package/dist/services/queues/database-publisher.service.js +3 -3
  163. package/dist/services/queues/database-publisher.service.js.map +1 -1
  164. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  165. package/dist/services/queues/rabbitmq-publisher.service.js +3 -3
  166. package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
  167. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  168. package/dist/services/queues/redis-publisher.service.d.ts.map +1 -1
  169. package/dist/services/queues/redis-publisher.service.js +4 -1
  170. package/dist/services/queues/redis-publisher.service.js.map +1 -1
  171. package/dist/services/queues/redis-subscriber.service.js.map +1 -1
  172. package/dist/services/role-metadata.service.js.map +1 -1
  173. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  174. package/dist/services/settings/default-settings-provider.service.d.ts +232 -8
  175. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  176. package/dist/services/settings/default-settings-provider.service.js +119 -4
  177. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  178. package/dist/services/sms/TwilioSMSService.js.map +1 -1
  179. package/dist/services/solid-introspect.service.js.map +1 -1
  180. package/dist/services/user-activity-history.service.js.map +1 -1
  181. package/dist/services/user.service.js +1 -1
  182. package/dist/services/user.service.js.map +1 -1
  183. package/dist/services/view-metadata.service.d.ts.map +1 -1
  184. package/dist/services/view-metadata.service.js +17 -2
  185. package/dist/services/view-metadata.service.js.map +1 -1
  186. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts +11 -0
  187. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts.map +1 -0
  188. package/dist/services/whatsapp/GupshupOtpWhatsappService.js +127 -0
  189. package/dist/services/whatsapp/GupshupOtpWhatsappService.js.map +1 -0
  190. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts +17 -0
  191. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts.map +1 -0
  192. package/dist/services/whatsapp/MetaCloudWhatsappService.js +209 -0
  193. package/dist/services/whatsapp/MetaCloudWhatsappService.js.map +1 -0
  194. package/dist/solid-core.module.d.ts +2 -2
  195. package/dist/solid-core.module.d.ts.map +1 -1
  196. package/dist/solid-core.module.js +22 -6
  197. package/dist/solid-core.module.js.map +1 -1
  198. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  199. package/dist/subscribers/security-rule.subscriber.d.ts.map +1 -1
  200. package/dist/subscribers/security-rule.subscriber.js.map +1 -1
  201. package/dist/subscribers/view-metadata.subscriber.js.map +1 -1
  202. package/dist/testing/adapters/ui/playwright-adapter.d.ts +1 -0
  203. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  204. package/dist/testing/adapters/ui/playwright-adapter.js +3 -0
  205. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  206. package/dist/testing/core/testing-engine.js.map +1 -1
  207. package/dist/testing/reporter/console-reporter.d.ts +10 -0
  208. package/dist/testing/reporter/console-reporter.d.ts.map +1 -1
  209. package/dist/testing/reporter/console-reporter.js +21 -0
  210. package/dist/testing/reporter/console-reporter.js.map +1 -1
  211. package/dist/testing/reporter/reporter.types.d.ts +7 -0
  212. package/dist/testing/reporter/reporter.types.d.ts.map +1 -1
  213. package/dist/testing/reporter/reporter.types.js.map +1 -1
  214. package/dist/testing/reporter/webhook-reporter.js.map +1 -1
  215. package/dist/testing/runner/run-from-metadata.d.ts.map +1 -1
  216. package/dist/testing/runner/run-from-metadata.js +20 -1
  217. package/dist/testing/runner/run-from-metadata.js.map +1 -1
  218. package/dist/testing/steps/ui/index.d.ts.map +1 -1
  219. package/dist/testing/steps/ui/index.js +2 -0
  220. package/dist/testing/steps/ui/index.js.map +1 -1
  221. package/dist/testing/steps/ui/manual.step.d.ts +3 -0
  222. package/dist/testing/steps/ui/manual.step.d.ts.map +1 -0
  223. package/dist/testing/steps/ui/manual.step.js +56 -0
  224. package/dist/testing/steps/ui/manual.step.js.map +1 -0
  225. package/dist/winston.logger.d.ts +5 -0
  226. package/dist/winston.logger.d.ts.map +1 -1
  227. package/dist/winston.logger.js +6 -4
  228. package/dist/winston.logger.js.map +1 -1
  229. package/package.json +8 -8
  230. package/src/commands/refresh-model.command.ts +6 -51
  231. package/src/commands/refresh-module.command.ts +3 -16
  232. package/src/commands/test-data.command.ts +29 -6
  233. package/src/controllers/action-metadata.controller.ts +1 -1
  234. package/src/controllers/chatter-message.controller.ts +12 -0
  235. package/src/controllers/facebook-authentication.controller.ts +1 -1
  236. package/src/controllers/google-authentication.controller.ts +1 -1
  237. package/src/controllers/gupshup-webhook.controller.ts +91 -0
  238. package/src/controllers/mcp-audit-log.controller.ts +70 -0
  239. package/src/controllers/menu-item-metadata.controller.ts +1 -1
  240. package/src/controllers/meta-cloud-whatsapp-webhook.controller.ts +155 -0
  241. package/src/controllers/microsoft-authentication.controller.ts +1 -1
  242. package/src/controllers/model-metadata.controller.ts +1 -1
  243. package/src/controllers/module-metadata.controller.ts +1 -1
  244. package/src/controllers/mq-message-queue.controller.ts +1 -1
  245. package/src/controllers/mq-message.controller.ts +1 -1
  246. package/src/controllers/view-metadata.controller.ts +1 -1
  247. package/src/dtos/create-mcp-audit-log.dto.ts +84 -0
  248. package/src/dtos/update-chatter-note-message.dto.ts +14 -0
  249. package/src/dtos/update-mcp-audit-log.dto.ts +83 -0
  250. package/src/dtos/update-user.dto.ts +4 -0
  251. package/src/entities/chatter-message-details.entity.ts +1 -2
  252. package/src/entities/mcp-audit-log.entity.ts +55 -0
  253. package/src/entities/user.entity.ts +1 -1
  254. package/src/factories/whatsapp.factory.ts +33 -32
  255. package/src/helpers/bootstrap.helper.ts +16 -6
  256. package/src/helpers/command.service.ts +2 -0
  257. package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +1 -1
  258. package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +1 -1
  259. package/src/helpers/field-crud-managers/field-quality-check-fixes.md +208 -0
  260. package/src/helpers/module-metadata-helper.service.ts +1 -1
  261. package/src/index.ts +6 -0
  262. package/src/interfaces.ts +1 -3
  263. package/src/jobs/database/chatter-queue-subscriber-database.service.ts +4 -2
  264. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -1
  265. package/src/jobs/rabbitmq/chatter-queue-subscriber.service.ts +4 -2
  266. package/src/jobs/redis/chatter-queue-subscriber-redis.service.ts +10 -3
  267. package/src/listeners/user-registration.listener.ts +49 -6
  268. package/src/repository/mcp-audit-log.repository.ts +17 -0
  269. package/src/repository/security-rule.repository.ts +1 -1
  270. package/src/seeders/module-metadata-seeder.service.ts +4 -4
  271. package/src/seeders/module-test-data.service.ts +186 -17
  272. package/src/seeders/permission-metadata-seeder.service.ts +1 -1
  273. package/src/seeders/seed-data/solid-core-metadata.json +506 -49
  274. package/src/services/authentication.service.ts +267 -44
  275. package/src/services/chatter-message.service.ts +140 -40
  276. package/src/services/crud.service.ts +1 -1
  277. package/src/services/csv.service.ts +1 -1
  278. package/src/services/dashboard.service.ts +1 -1
  279. package/src/services/database/database-bootstrap.service.ts +1 -1
  280. package/src/services/excel.service.ts +1 -1
  281. package/src/services/export-transaction.service.ts +2 -2
  282. package/src/services/field-metadata.service.ts +1 -1
  283. package/src/services/fixtures.service.ts +2 -2
  284. package/src/services/import-transaction.service.ts +2 -2
  285. package/src/services/list-of-values.service.ts +1 -1
  286. package/src/services/mcp-audit-log.service.ts +19 -0
  287. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +12 -0
  288. package/src/services/mediaStorageProviders/file-storage-provider.ts +8 -1
  289. package/src/services/model-metadata.service.ts +36 -34
  290. package/src/services/module-metadata.service.ts +19 -7
  291. package/src/services/queues/database-publisher.service.ts +4 -4
  292. package/src/services/queues/database-subscriber.service.ts +1 -1
  293. package/src/services/queues/rabbitmq-publisher.service.ts +7 -7
  294. package/src/services/queues/rabbitmq-subscriber.service.ts +8 -8
  295. package/src/services/queues/redis-publisher.service.ts +7 -4
  296. package/src/services/queues/redis-subscriber.service.ts +4 -4
  297. package/src/services/role-metadata.service.ts +1 -1
  298. package/src/services/scheduled-jobs/scheduler.service.ts +5 -5
  299. package/src/services/settings/default-settings-provider.service.ts +119 -4
  300. package/src/services/sms/TwilioSMSService.ts +2 -2
  301. package/src/services/solid-introspect.service.ts +2 -2
  302. package/src/services/user-activity-history.service.ts +1 -1
  303. package/src/services/user.service.ts +1 -1
  304. package/src/services/view-metadata.service.ts +25 -8
  305. package/src/services/whatsapp/GupshupOtpWhatsappService.ts +174 -0
  306. package/src/services/whatsapp/MetaCloudWhatsappService.ts +253 -0
  307. package/src/solid-core.module.ts +213 -196
  308. package/src/subscribers/computed-entity-field.subscriber.ts +1 -1
  309. package/src/subscribers/security-rule.subscriber.ts +8 -8
  310. package/src/subscribers/view-metadata.subscriber.ts +1 -1
  311. package/src/testing/README.md +55 -2
  312. package/src/testing/adapters/ui/playwright-adapter.ts +4 -0
  313. package/src/testing/core/testing-engine.ts +2 -2
  314. package/src/testing/reporter/console-reporter.ts +27 -0
  315. package/src/testing/reporter/reporter.types.ts +7 -0
  316. package/src/testing/reporter/webhook-reporter.ts +1 -1
  317. package/src/testing/runner/run-from-metadata.ts +19 -1
  318. package/src/testing/steps/ui/index.ts +2 -0
  319. package/src/testing/steps/ui/manual.step.ts +80 -0
  320. package/src/winston.logger.ts +5 -7
@@ -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
 
@@ -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
+ process.stdout.write(`\x1b[32mServer started on port ${port} in ${elapsed}s\x1b[0m\n`);
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,208 @@
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
+ - [ ] Clarify and document the preferred request contract for single relations, because accepting both `<fieldName>Id` and `<fieldName>UserKey` is useful but easy to apply inconsistently across clients.
159
+ - [ ] Review whether the CRUD layer should normalize empty strings for `<fieldName>Id` and `<fieldName>UserKey` more explicitly before required validation runs.
160
+ - [ ] Decide whether user-key-based lookup failures should return a more specific error message than generic required or invalid relation errors.
161
+ - [ ] Review whether relation resolution should support optional fixed-filter enforcement at save time in addition to UI-level filtering.
162
+ - [ ] Consider whether uniqueness on a `many-to-one` field should receive clearer pre-save validation when the authored intent effectively makes the relation one-to-one.
163
+ - [ ] Add targeted coverage for id-based lookup, user-key-based lookup, missing required relations, invalid id shapes, invalid user keys, and partial update behavior.
164
+
165
+ ## `one-to-many`
166
+
167
+ - [ ] Clarify and document the command contract for collection relations so `set`, `clear`, `link`, `unlink`, `create`, `update`, and `delete` are easier to use consistently from clients.
168
+ - [ ] Review whether malformed or unsupported command values should return more specific validation errors than the current generic failure path.
169
+ - [ ] Decide whether create-time and update-time collection mutation semantics should be normalized more explicitly, especially where some commands are intentionally update-only.
170
+ - [ ] Review whether `relationCoModelFieldName` should be validated more aggressively, because this field is central to child binding and inverse resolution.
171
+ - [ ] Consider whether `relationFieldFixedFilter` should be enforced during relation mutation so child records cannot be linked outside the authored collection scope.
172
+ - [ ] Add targeted coverage for `set`, `clear`, `link`, `unlink`, `create`, `update`, `delete`, invalid command payloads, and partial update behavior.
173
+
174
+ ## `many-to-many`
175
+
176
+ - [ ] Clarify and document owner-side versus inverse-side mutation semantics so clients understand which effective field names and id lists are honored during CRUD operations.
177
+ - [ ] Review whether malformed owner-side metadata such as missing `isRelationManyToManyOwner` or mismatched inverse names should fail earlier and more clearly.
178
+ - [ ] Decide whether `relationJoinTableName` and related ownership attrs need stronger validation at metadata authoring time to avoid ambiguous join behavior later.
179
+ - [ ] Review whether `relationFieldFixedFilter` should be enforced during membership mutation so unsupported links cannot be created through direct payloads.
180
+ - [ ] Consider whether create, update, and delete operations against related entities should be more clearly separated from plain membership operations such as `set`, `link`, and `unlink`.
181
+ - [ ] Add targeted coverage for owner-side mutations, inverse-side mutations, `set`, `clear`, `link`, `unlink`, related-entity create/update/delete flows, and partial update behavior.
182
+
183
+ ## `mediaSingle`
184
+
185
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `mediaSingle` field, including whether the field should ever accept persisted references without a new upload.
186
+ - [ ] Review whether media validation should normalize authored `mediaTypes` values more explicitly so unsupported tokens fail early and predictably.
187
+ - [ ] Consider whether storage-provider resolution should fail with a clearer field-specific error when `mediaStorageProviderUserKey` is missing or invalid.
188
+ - [ ] Review whether replace and delete semantics should be more explicit in the CRUD layer when an existing asset is being updated or removed.
189
+ - [ ] Consider whether upload validation should be refactored into shared utilities so size, type, and required checks stay consistent across media field types.
190
+ - [ ] Add targeted coverage for required create-time uploads, oversized files, unsupported media types, missing providers, replacement flows, and partial update behavior.
191
+
192
+ ## `mediaMultiple`
193
+
194
+ - [ ] Align collection-level validation with the single-media path so `mediaTypes` and `mediaMaxSizeKb` are enforced consistently for every uploaded file.
195
+ - [ ] Clarify and implement the expected behavior for `defaultValue` when a create payload omits a `mediaMultiple` field, including whether persisted media references should ever be accepted directly.
196
+ - [ ] Review whether storage-provider resolution should fail with a clearer field-specific error when `mediaStorageProviderUserKey` is missing or invalid.
197
+ - [ ] Decide what the canonical update semantics should be for attachment collections: append-only, replace-all, explicit remove, or a more command-style contract.
198
+ - [ ] Consider whether media collection validation should report per-file errors more explicitly when one file fails and others succeed.
199
+ - [ ] Add targeted coverage for required create-time collections, mixed valid and invalid uploads, oversized files, unsupported media types, missing providers, and partial update behavior.
200
+
201
+ ## `computed`
202
+
203
+ - [ ] Clarify and document the supported provider contract more explicitly, including what a computed-field provider must return and how failures should be surfaced to callers.
204
+ - [ ] Review whether `computedFieldValueProviderCtxt` should be validated as JSON earlier and with clearer error messaging before provider execution begins.
205
+ - [ ] Decide whether inline computation should remain skipped on partial updates by default, or whether some computed fields need an opt-in recompute path during patch-style operations.
206
+ - [ ] Review whether `computedFieldTriggerConfig` should be validated more aggressively so unsupported operations or malformed trigger definitions fail earlier.
207
+ - [ ] Consider whether the CRUD layer should verify that the provider’s returned value matches `computedFieldValueType` before persistence.
208
+ - [ ] Add targeted coverage for inline provider execution, malformed provider context, missing providers, trigger-configured fields, partial updates, and mismatched computed value types.
@@ -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
-