@solidxai/core 0.1.10-beta.8 → 0.1.10

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 (1043) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/CHANGELOG.md +415 -0
  3. package/MICROSOFT_ACTIVE_DIRECTORY_OAUTH_FLOW.md +616 -0
  4. package/ai-interaction-cleanup.sql +53 -0
  5. package/dist/commands/info.command.d.ts.map +1 -1
  6. package/dist/commands/info.command.js +0 -2
  7. package/dist/commands/info.command.js.map +1 -1
  8. package/dist/commands/refresh-model.command.d.ts +1 -7
  9. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  10. package/dist/commands/refresh-model.command.js +4 -49
  11. package/dist/commands/refresh-model.command.js.map +1 -1
  12. package/dist/commands/refresh-module.command.d.ts +0 -2
  13. package/dist/commands/refresh-module.command.d.ts.map +1 -1
  14. package/dist/commands/refresh-module.command.js +3 -16
  15. package/dist/commands/refresh-module.command.js.map +1 -1
  16. package/dist/commands/test-data.command.d.ts +2 -0
  17. package/dist/commands/test-data.command.d.ts.map +1 -1
  18. package/dist/commands/test-data.command.js +32 -6
  19. package/dist/commands/test-data.command.js.map +1 -1
  20. package/dist/constants/error-messages.d.ts +1 -0
  21. package/dist/constants/error-messages.d.ts.map +1 -1
  22. package/dist/constants/error-messages.js +1 -0
  23. package/dist/constants/error-messages.js.map +1 -1
  24. package/dist/controllers/action-metadata.controller.d.ts +1 -20
  25. package/dist/controllers/action-metadata.controller.d.ts.map +1 -1
  26. package/dist/controllers/agent-event.controller.d.ts +1 -20
  27. package/dist/controllers/agent-event.controller.d.ts.map +1 -1
  28. package/dist/controllers/agent-session.controller.d.ts +1 -20
  29. package/dist/controllers/agent-session.controller.d.ts.map +1 -1
  30. package/dist/controllers/chatter-message-details.controller.d.ts +1 -20
  31. package/dist/controllers/chatter-message-details.controller.d.ts.map +1 -1
  32. package/dist/controllers/chatter-message.controller.d.ts +3 -20
  33. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  34. package/dist/controllers/chatter-message.controller.js +17 -0
  35. package/dist/controllers/chatter-message.controller.js.map +1 -1
  36. package/dist/controllers/dashboard-user-layout.controller.d.ts +24 -0
  37. package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -0
  38. package/dist/controllers/{dashboard-variable.controller.js → dashboard-user-layout.controller.js} +30 -30
  39. package/dist/controllers/dashboard-user-layout.controller.js.map +1 -0
  40. package/dist/controllers/dashboard.controller.d.ts +12 -42
  41. package/dist/controllers/dashboard.controller.d.ts.map +1 -1
  42. package/dist/controllers/dashboard.controller.js +71 -141
  43. package/dist/controllers/dashboard.controller.js.map +1 -1
  44. package/dist/controllers/email-template.controller.d.ts +1 -20
  45. package/dist/controllers/email-template.controller.d.ts.map +1 -1
  46. package/dist/controllers/export-template.controller.d.ts +1 -20
  47. package/dist/controllers/export-template.controller.d.ts.map +1 -1
  48. package/dist/controllers/export-transaction.controller.d.ts +1 -20
  49. package/dist/controllers/export-transaction.controller.d.ts.map +1 -1
  50. package/dist/controllers/gupshup-webhook.controller.d.ts +11 -0
  51. package/dist/controllers/gupshup-webhook.controller.d.ts.map +1 -0
  52. package/dist/controllers/gupshup-webhook.controller.js +87 -0
  53. package/dist/controllers/gupshup-webhook.controller.js.map +1 -0
  54. package/dist/controllers/import-transaction-error-log.controller.d.ts +1 -20
  55. package/dist/controllers/import-transaction-error-log.controller.d.ts.map +1 -1
  56. package/dist/controllers/import-transaction.controller.d.ts +1 -20
  57. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  58. package/dist/controllers/list-of-values.controller.d.ts +1 -20
  59. package/dist/controllers/list-of-values.controller.d.ts.map +1 -1
  60. package/dist/controllers/locale.controller.d.ts +1 -20
  61. package/dist/controllers/locale.controller.d.ts.map +1 -1
  62. package/dist/controllers/mcp-audit-log.controller.d.ts +16 -0
  63. package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -0
  64. package/dist/controllers/{dashboard-question.controller.js → mcp-audit-log.controller.js} +44 -91
  65. package/dist/controllers/mcp-audit-log.controller.js.map +1 -0
  66. package/dist/controllers/media.controller.d.ts +1 -20
  67. package/dist/controllers/media.controller.d.ts.map +1 -1
  68. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -20
  69. package/dist/controllers/menu-item-metadata.controller.d.ts.map +1 -1
  70. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts +16 -0
  71. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts.map +1 -0
  72. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js +133 -0
  73. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js.map +1 -0
  74. package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts +28 -0
  75. package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts.map +1 -0
  76. package/dist/controllers/microsoft-active-directory-authentication.controller.js +122 -0
  77. package/dist/controllers/microsoft-active-directory-authentication.controller.js.map +1 -0
  78. package/dist/controllers/model-metadata.controller.d.ts +11 -31
  79. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  80. package/dist/controllers/model-metadata.controller.js +4 -4
  81. package/dist/controllers/model-metadata.controller.js.map +1 -1
  82. package/dist/controllers/model-sequence.controller.d.ts +1 -20
  83. package/dist/controllers/model-sequence.controller.d.ts.map +1 -1
  84. package/dist/controllers/module-metadata-explorer.controller.d.ts +171 -0
  85. package/dist/controllers/module-metadata-explorer.controller.d.ts.map +1 -0
  86. package/dist/controllers/module-metadata-explorer.controller.js +143 -0
  87. package/dist/controllers/module-metadata-explorer.controller.js.map +1 -0
  88. package/dist/controllers/module-metadata.controller.d.ts +5 -0
  89. package/dist/controllers/module-metadata.controller.d.ts.map +1 -1
  90. package/dist/controllers/module-metadata.controller.js +13 -1
  91. package/dist/controllers/module-metadata.controller.js.map +1 -1
  92. package/dist/controllers/module-package.controller.d.ts +622 -0
  93. package/dist/controllers/module-package.controller.d.ts.map +1 -0
  94. package/dist/controllers/module-package.controller.js +150 -0
  95. package/dist/controllers/module-package.controller.js.map +1 -0
  96. package/dist/controllers/mq-message-queue.controller.d.ts +1 -20
  97. package/dist/controllers/mq-message-queue.controller.d.ts.map +1 -1
  98. package/dist/controllers/mq-message.controller.d.ts +1 -20
  99. package/dist/controllers/mq-message.controller.d.ts.map +1 -1
  100. package/dist/controllers/permission-metadata.controller.d.ts +1 -20
  101. package/dist/controllers/permission-metadata.controller.d.ts.map +1 -1
  102. package/dist/controllers/role-metadata.controller.d.ts +1 -20
  103. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  104. package/dist/controllers/saved-filters.controller.d.ts +1 -20
  105. package/dist/controllers/saved-filters.controller.d.ts.map +1 -1
  106. package/dist/controllers/scheduled-job.controller.d.ts +1 -20
  107. package/dist/controllers/scheduled-job.controller.d.ts.map +1 -1
  108. package/dist/controllers/security-rule.controller.d.ts +1 -20
  109. package/dist/controllers/security-rule.controller.d.ts.map +1 -1
  110. package/dist/controllers/service.controller.d.ts +1 -5
  111. package/dist/controllers/service.controller.d.ts.map +1 -1
  112. package/dist/controllers/service.controller.js +6 -11
  113. package/dist/controllers/service.controller.js.map +1 -1
  114. package/dist/controllers/sms-template.controller.d.ts +1 -20
  115. package/dist/controllers/sms-template.controller.d.ts.map +1 -1
  116. package/dist/controllers/test.controller.d.ts +1 -6
  117. package/dist/controllers/test.controller.d.ts.map +1 -1
  118. package/dist/controllers/test.controller.js +2 -20
  119. package/dist/controllers/test.controller.js.map +1 -1
  120. package/dist/controllers/user-activity-history.controller.d.ts +1 -20
  121. package/dist/controllers/user-activity-history.controller.d.ts.map +1 -1
  122. package/dist/controllers/user-view-metadata.controller.d.ts +1 -20
  123. package/dist/controllers/user-view-metadata.controller.d.ts.map +1 -1
  124. package/dist/controllers/user.controller.d.ts +1 -20
  125. package/dist/controllers/user.controller.d.ts.map +1 -1
  126. package/dist/controllers/view-metadata.controller.d.ts +1 -20
  127. package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
  128. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts +3 -0
  129. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts.map +1 -0
  130. package/dist/decorators/dashboard-widget-data-provider.decorator.js +8 -0
  131. package/dist/decorators/dashboard-widget-data-provider.decorator.js.map +1 -0
  132. package/dist/dtos/confirm-module-package-import.dto.d.ts +4 -0
  133. package/dist/dtos/confirm-module-package-import.dto.d.ts.map +1 -0
  134. package/dist/dtos/confirm-module-package-import.dto.js +34 -0
  135. package/dist/dtos/confirm-module-package-import.dto.js.map +1 -0
  136. package/dist/dtos/create-dashboard-user-layout.dto.d.ts +10 -0
  137. package/dist/dtos/create-dashboard-user-layout.dto.d.ts.map +1 -0
  138. package/dist/dtos/create-dashboard-user-layout.dto.js +66 -0
  139. package/dist/dtos/create-dashboard-user-layout.dto.js.map +1 -0
  140. package/dist/dtos/create-mcp-audit-log.dto.d.ts +19 -0
  141. package/dist/dtos/create-mcp-audit-log.dto.d.ts.map +1 -0
  142. package/dist/dtos/create-mcp-audit-log.dto.js +118 -0
  143. package/dist/dtos/create-mcp-audit-log.dto.js.map +1 -0
  144. package/dist/dtos/create-model-metadata.dto.d.ts +2 -2
  145. package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
  146. package/dist/dtos/create-model-metadata.dto.js +6 -11
  147. package/dist/dtos/create-model-metadata.dto.js.map +1 -1
  148. package/dist/dtos/create-permission-metadata.dto.d.ts.map +1 -1
  149. package/dist/dtos/create-permission-metadata.dto.js +2 -0
  150. package/dist/dtos/create-permission-metadata.dto.js.map +1 -1
  151. package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
  152. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  153. package/dist/dtos/create-role-metadata.dto.js +13 -1
  154. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  155. package/dist/dtos/dashboard-variable-options-query.dto.d.ts +7 -0
  156. package/dist/dtos/dashboard-variable-options-query.dto.d.ts.map +1 -0
  157. package/dist/dtos/dashboard-variable-options-query.dto.js +40 -0
  158. package/dist/dtos/dashboard-variable-options-query.dto.js.map +1 -0
  159. package/dist/dtos/dashboard-widget-data-request.dto.d.ts +12 -0
  160. package/dist/dtos/dashboard-widget-data-request.dto.d.ts.map +1 -0
  161. package/dist/dtos/dashboard-widget-data-request.dto.js +65 -0
  162. package/dist/dtos/dashboard-widget-data-request.dto.js.map +1 -0
  163. package/dist/dtos/import-instructions.dto.d.ts +2 -0
  164. package/dist/dtos/import-instructions.dto.d.ts.map +1 -1
  165. package/dist/dtos/import-instructions.dto.js +15 -1
  166. package/dist/dtos/import-instructions.dto.js.map +1 -1
  167. package/dist/dtos/metadata-explorer-references-query.dto.d.ts +10 -0
  168. package/dist/dtos/metadata-explorer-references-query.dto.d.ts.map +1 -0
  169. package/dist/dtos/metadata-explorer-references-query.dto.js +69 -0
  170. package/dist/dtos/metadata-explorer-references-query.dto.js.map +1 -0
  171. package/dist/dtos/metadata-explorer-search-query.dto.d.ts +8 -0
  172. package/dist/dtos/metadata-explorer-search-query.dto.d.ts.map +1 -0
  173. package/dist/dtos/metadata-explorer-search-query.dto.js +55 -0
  174. package/dist/dtos/metadata-explorer-search-query.dto.js.map +1 -0
  175. package/dist/dtos/metadata-explorer-write.dto.d.ts +4 -0
  176. package/dist/dtos/metadata-explorer-write.dto.d.ts.map +1 -0
  177. package/dist/dtos/{invoke-ai-prompt.dto.js → metadata-explorer-write.dto.js} +12 -12
  178. package/dist/dtos/metadata-explorer-write.dto.js.map +1 -0
  179. package/dist/dtos/run-module-package-build.dto.d.ts +5 -0
  180. package/dist/dtos/run-module-package-build.dto.d.ts.map +1 -0
  181. package/dist/dtos/run-module-package-build.dto.js +38 -0
  182. package/dist/dtos/run-module-package-build.dto.js.map +1 -0
  183. package/dist/dtos/run-module-package-seed.dto.d.ts +4 -0
  184. package/dist/dtos/run-module-package-seed.dto.d.ts.map +1 -0
  185. package/dist/dtos/run-module-package-seed.dto.js +34 -0
  186. package/dist/dtos/run-module-package-seed.dto.js.map +1 -0
  187. package/dist/dtos/update-chatter-note-message.dto.d.ts +5 -0
  188. package/dist/dtos/update-chatter-note-message.dto.d.ts.map +1 -0
  189. package/dist/dtos/update-chatter-note-message.dto.js +34 -0
  190. package/dist/dtos/update-chatter-note-message.dto.js.map +1 -0
  191. package/dist/dtos/update-dashboard-user-layout.dto.d.ts +11 -0
  192. package/dist/dtos/update-dashboard-user-layout.dto.d.ts.map +1 -0
  193. package/dist/dtos/{update-dashboard-layout.dto.js → update-dashboard-user-layout.dto.js} +34 -16
  194. package/dist/dtos/update-dashboard-user-layout.dto.js.map +1 -0
  195. package/dist/dtos/update-mcp-audit-log.dto.d.ts +19 -0
  196. package/dist/dtos/update-mcp-audit-log.dto.d.ts.map +1 -0
  197. package/dist/dtos/update-mcp-audit-log.dto.js +117 -0
  198. package/dist/dtos/update-mcp-audit-log.dto.js.map +1 -0
  199. package/dist/dtos/update-permission-metadata.dto.d.ts.map +1 -1
  200. package/dist/dtos/update-permission-metadata.dto.js +3 -1
  201. package/dist/dtos/update-permission-metadata.dto.js.map +1 -1
  202. package/dist/dtos/update-role-metadata.dto.d.ts +2 -0
  203. package/dist/dtos/update-role-metadata.dto.d.ts.map +1 -1
  204. package/dist/dtos/update-role-metadata.dto.js +13 -1
  205. package/dist/dtos/update-role-metadata.dto.js.map +1 -1
  206. package/dist/dtos/update-user.dto.d.ts +1 -0
  207. package/dist/dtos/update-user.dto.d.ts.map +1 -1
  208. package/dist/dtos/update-user.dto.js +7 -1
  209. package/dist/dtos/update-user.dto.js.map +1 -1
  210. package/dist/entities/action-metadata.entity.d.ts.map +1 -1
  211. package/dist/entities/action-metadata.entity.js +1 -0
  212. package/dist/entities/action-metadata.entity.js.map +1 -1
  213. package/dist/entities/agent-event.entity.d.ts.map +1 -1
  214. package/dist/entities/agent-event.entity.js +1 -0
  215. package/dist/entities/agent-event.entity.js.map +1 -1
  216. package/dist/entities/agent-session.entity.d.ts.map +1 -1
  217. package/dist/entities/agent-session.entity.js +1 -0
  218. package/dist/entities/agent-session.entity.js.map +1 -1
  219. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  220. package/dist/entities/chatter-message.entity.js +2 -0
  221. package/dist/entities/chatter-message.entity.js.map +1 -1
  222. package/dist/entities/dashboard-user-layout.entity.d.ts +11 -0
  223. package/dist/entities/dashboard-user-layout.entity.d.ts.map +1 -0
  224. package/dist/entities/dashboard-user-layout.entity.js +52 -0
  225. package/dist/entities/dashboard-user-layout.entity.js.map +1 -0
  226. package/dist/entities/email-template.entity.d.ts.map +1 -1
  227. package/dist/entities/email-template.entity.js +1 -0
  228. package/dist/entities/email-template.entity.js.map +1 -1
  229. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  230. package/dist/entities/field-metadata.entity.js +4 -0
  231. package/dist/entities/field-metadata.entity.js.map +1 -1
  232. package/dist/entities/legacy-common-with-id.entity.d.ts +2 -2
  233. package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -1
  234. package/dist/entities/legacy-common-with-id.entity.js +6 -6
  235. package/dist/entities/legacy-common-with-id.entity.js.map +1 -1
  236. package/dist/entities/legacy-common.entity.d.ts +1 -1
  237. package/dist/entities/legacy-common.entity.d.ts.map +1 -1
  238. package/dist/entities/legacy-common.entity.js +14 -14
  239. package/dist/entities/legacy-common.entity.js.map +1 -1
  240. package/dist/entities/list-of-values.entity.d.ts.map +1 -1
  241. package/dist/entities/list-of-values.entity.js +4 -0
  242. package/dist/entities/list-of-values.entity.js.map +1 -1
  243. package/dist/entities/locale.entity.d.ts.map +1 -1
  244. package/dist/entities/locale.entity.js +1 -0
  245. package/dist/entities/locale.entity.js.map +1 -1
  246. package/dist/entities/mcp-audit-log.entity.d.ts +19 -0
  247. package/dist/entities/mcp-audit-log.entity.d.ts.map +1 -0
  248. package/dist/entities/mcp-audit-log.entity.js +90 -0
  249. package/dist/entities/mcp-audit-log.entity.js.map +1 -0
  250. package/dist/entities/media.entity.d.ts.map +1 -1
  251. package/dist/entities/media.entity.js +1 -0
  252. package/dist/entities/media.entity.js.map +1 -1
  253. package/dist/entities/menu-item-metadata.entity.d.ts.map +1 -1
  254. package/dist/entities/menu-item-metadata.entity.js +2 -0
  255. package/dist/entities/menu-item-metadata.entity.js.map +1 -1
  256. package/dist/entities/model-metadata.entity.d.ts +2 -2
  257. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  258. package/dist/entities/model-metadata.entity.js +8 -8
  259. package/dist/entities/model-metadata.entity.js.map +1 -1
  260. package/dist/entities/module-metadata.entity.d.ts.map +1 -1
  261. package/dist/entities/module-metadata.entity.js +2 -0
  262. package/dist/entities/module-metadata.entity.js.map +1 -1
  263. package/dist/entities/permission-metadata.entity.d.ts.map +1 -1
  264. package/dist/entities/permission-metadata.entity.js.map +1 -1
  265. package/dist/entities/role-metadata.entity.d.ts +2 -0
  266. package/dist/entities/role-metadata.entity.d.ts.map +1 -1
  267. package/dist/entities/role-metadata.entity.js +10 -2
  268. package/dist/entities/role-metadata.entity.js.map +1 -1
  269. package/dist/entities/saved-filters.entity.d.ts.map +1 -1
  270. package/dist/entities/saved-filters.entity.js +3 -0
  271. package/dist/entities/saved-filters.entity.js.map +1 -1
  272. package/dist/entities/scheduled-job.entity.d.ts.map +1 -1
  273. package/dist/entities/scheduled-job.entity.js +2 -0
  274. package/dist/entities/scheduled-job.entity.js.map +1 -1
  275. package/dist/entities/security-rule.entity.d.ts.map +1 -1
  276. package/dist/entities/security-rule.entity.js +1 -0
  277. package/dist/entities/security-rule.entity.js.map +1 -1
  278. package/dist/entities/sms-template.entity.d.ts.map +1 -1
  279. package/dist/entities/sms-template.entity.js +2 -0
  280. package/dist/entities/sms-template.entity.js.map +1 -1
  281. package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
  282. package/dist/entities/user-activity-history.entity.js +1 -0
  283. package/dist/entities/user-activity-history.entity.js.map +1 -1
  284. package/dist/entities/user.entity.d.ts +3 -0
  285. package/dist/entities/user.entity.d.ts.map +1 -1
  286. package/dist/entities/user.entity.js +16 -1
  287. package/dist/entities/user.entity.js.map +1 -1
  288. package/dist/entities/view-metadata.entity.d.ts.map +1 -1
  289. package/dist/entities/view-metadata.entity.js +2 -0
  290. package/dist/entities/view-metadata.entity.js.map +1 -1
  291. package/dist/enums/legacy-table-type.enum.d.ts +6 -0
  292. package/dist/enums/legacy-table-type.enum.d.ts.map +1 -0
  293. package/dist/enums/legacy-table-type.enum.js +10 -0
  294. package/dist/enums/legacy-table-type.enum.js.map +1 -0
  295. package/dist/factories/whatsapp.factory.d.ts.map +1 -1
  296. package/dist/factories/whatsapp.factory.js +13 -11
  297. package/dist/factories/whatsapp.factory.js.map +1 -1
  298. package/dist/helpers/bootstrap.helper.d.ts +1 -0
  299. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  300. package/dist/helpers/bootstrap.helper.js +6 -3
  301. package/dist/helpers/bootstrap.helper.js.map +1 -1
  302. package/dist/helpers/command.service.d.ts +1 -0
  303. package/dist/helpers/command.service.d.ts.map +1 -1
  304. package/dist/helpers/command.service.js +2 -1
  305. package/dist/helpers/command.service.js.map +1 -1
  306. package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts +34 -0
  307. package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts.map +1 -0
  308. package/dist/helpers/microsoft-active-directory-oauth.helper.js +43 -0
  309. package/dist/helpers/microsoft-active-directory-oauth.helper.js.map +1 -0
  310. package/dist/helpers/model-metadata-helper.service.d.ts +2 -1
  311. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  312. package/dist/helpers/model-metadata-helper.service.js +4 -3
  313. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  314. package/dist/helpers/module-metadata-helper.service.d.ts +2 -0
  315. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  316. package/dist/helpers/module-metadata-helper.service.js +23 -10
  317. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  318. package/dist/helpers/module.helper.d.ts.map +1 -1
  319. package/dist/helpers/module.helper.js +6 -6
  320. package/dist/helpers/module.helper.js.map +1 -1
  321. package/dist/helpers/solid-registry.d.ts +5 -9
  322. package/dist/helpers/solid-registry.d.ts.map +1 -1
  323. package/dist/helpers/solid-registry.js +13 -28
  324. package/dist/helpers/solid-registry.js.map +1 -1
  325. package/dist/helpers/typeorm-migration-helpers.d.ts +12 -0
  326. package/dist/helpers/typeorm-migration-helpers.d.ts.map +1 -0
  327. package/dist/helpers/typeorm-migration-helpers.js +119 -0
  328. package/dist/helpers/typeorm-migration-helpers.js.map +1 -0
  329. package/dist/helpers/user-helper.d.ts.map +1 -1
  330. package/dist/helpers/user-helper.js +4 -0
  331. package/dist/helpers/user-helper.js.map +1 -1
  332. package/dist/index.d.ts +37 -10
  333. package/dist/index.d.ts.map +1 -1
  334. package/dist/index.js +37 -10
  335. package/dist/index.js.map +1 -1
  336. package/dist/interfaces.d.ts +23 -21
  337. package/dist/interfaces.d.ts.map +1 -1
  338. package/dist/interfaces.js.map +1 -1
  339. package/dist/listeners/user-registration.listener.d.ts +5 -2
  340. package/dist/listeners/user-registration.listener.d.ts.map +1 -1
  341. package/dist/listeners/user-registration.listener.js +37 -4
  342. package/dist/listeners/user-registration.listener.js.map +1 -1
  343. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts +14 -0
  344. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts.map +1 -0
  345. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js +67 -0
  346. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js.map +1 -0
  347. package/dist/{repository/dashboard-layout.repository.d.ts → repositories/dashboard-user-layout.repository.d.ts} +5 -5
  348. package/dist/repositories/dashboard-user-layout.repository.d.ts.map +1 -0
  349. package/dist/{repository/dashboard-question-sql-dataset-config.repository.js → repositories/dashboard-user-layout.repository.js} +15 -10
  350. package/dist/repositories/dashboard-user-layout.repository.js.map +1 -0
  351. package/dist/repository/{ai-interaction.repository.d.ts → mcp-audit-log.repository.d.ts} +3 -3
  352. package/dist/repository/mcp-audit-log.repository.d.ts.map +1 -0
  353. package/dist/repository/{ai-interaction.repository.js → mcp-audit-log.repository.js} +8 -8
  354. package/dist/repository/mcp-audit-log.repository.js.map +1 -0
  355. package/dist/seeders/module-metadata-seeder.service.d.ts +2 -6
  356. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  357. package/dist/seeders/module-metadata-seeder.service.js +58 -98
  358. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  359. package/dist/seeders/module-test-data.service.d.ts +2 -0
  360. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  361. package/dist/seeders/module-test-data.service.js +62 -1
  362. package/dist/seeders/module-test-data.service.js.map +1 -1
  363. package/dist/seeders/seed-data/solid-core-metadata.json +5009 -4283
  364. package/dist/seeders/system-fields-seeder.service.js +1 -1
  365. package/dist/seeders/system-fields-seeder.service.js.map +1 -1
  366. package/dist/services/authentication.service.d.ts +18 -1
  367. package/dist/services/authentication.service.d.ts.map +1 -1
  368. package/dist/services/authentication.service.js +208 -14
  369. package/dist/services/authentication.service.js.map +1 -1
  370. package/dist/services/chatter-message.service.d.ts +7 -1
  371. package/dist/services/chatter-message.service.d.ts.map +1 -1
  372. package/dist/services/chatter-message.service.js +94 -2
  373. package/dist/services/chatter-message.service.js.map +1 -1
  374. package/dist/services/crud-helper.service.d.ts +18 -0
  375. package/dist/services/crud-helper.service.d.ts.map +1 -1
  376. package/dist/services/crud-helper.service.js +76 -2
  377. package/dist/services/crud-helper.service.js.map +1 -1
  378. package/dist/services/crud.service.d.ts +1 -21
  379. package/dist/services/crud.service.d.ts.map +1 -1
  380. package/dist/services/crud.service.js +23 -87
  381. package/dist/services/crud.service.js.map +1 -1
  382. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts +13 -0
  383. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts.map +1 -0
  384. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js +55 -0
  385. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js.map +1 -0
  386. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts +13 -0
  387. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts.map +1 -0
  388. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js +52 -0
  389. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js.map +1 -0
  390. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts +13 -0
  391. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts.map +1 -0
  392. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js +52 -0
  393. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js.map +1 -0
  394. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts +10 -0
  395. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts.map +1 -0
  396. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js +62 -0
  397. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js.map +1 -0
  398. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts +10 -0
  399. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts.map +1 -0
  400. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js +82 -0
  401. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js.map +1 -0
  402. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts +17 -0
  403. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts.map +1 -0
  404. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js +130 -0
  405. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js.map +1 -0
  406. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts +37 -0
  407. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts.map +1 -0
  408. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js +112 -0
  409. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js.map +1 -0
  410. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts +10 -0
  411. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts.map +1 -0
  412. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js +57 -0
  413. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js.map +1 -0
  414. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts +10 -0
  415. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts.map +1 -0
  416. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js +57 -0
  417. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js.map +1 -0
  418. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts +10 -0
  419. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts.map +1 -0
  420. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js +100 -0
  421. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js.map +1 -0
  422. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts +10 -0
  423. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts.map +1 -0
  424. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js +55 -0
  425. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js.map +1 -0
  426. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts +13 -0
  427. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts.map +1 -0
  428. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js +52 -0
  429. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js.map +1 -0
  430. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts +15 -0
  431. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts.map +1 -0
  432. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js +60 -0
  433. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js.map +1 -0
  434. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts +13 -0
  435. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts.map +1 -0
  436. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js +51 -0
  437. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js.map +1 -0
  438. package/dist/services/dashboard-runtime.service.d.ts +31 -0
  439. package/dist/services/dashboard-runtime.service.d.ts.map +1 -0
  440. package/dist/services/dashboard-runtime.service.js +408 -0
  441. package/dist/services/dashboard-runtime.service.js.map +1 -0
  442. package/dist/services/dashboard-user-layout.service.d.ts +12 -0
  443. package/dist/services/dashboard-user-layout.service.d.ts.map +1 -0
  444. package/dist/services/{dashboard-question-sql-dataset-config.service.js → dashboard-user-layout.service.js} +10 -10
  445. package/dist/services/dashboard-user-layout.service.js.map +1 -0
  446. package/dist/services/import-transaction.service.d.ts.map +1 -1
  447. package/dist/services/import-transaction.service.js +6 -0
  448. package/dist/services/import-transaction.service.js.map +1 -1
  449. package/dist/services/mcp-audit-log.service.d.ts +12 -0
  450. package/dist/services/mcp-audit-log.service.d.ts.map +1 -0
  451. package/dist/services/{dashboard-variable.service.js → mcp-audit-log.service.js} +9 -10
  452. package/dist/services/mcp-audit-log.service.js.map +1 -0
  453. package/dist/services/media.service.d.ts +1 -20
  454. package/dist/services/media.service.d.ts.map +1 -1
  455. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +1 -0
  456. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  457. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +51 -11
  458. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  459. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +1 -0
  460. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  461. package/dist/services/mediaStorageProviders/file-storage-provider.js +11 -1
  462. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  463. package/dist/services/model-metadata.service.d.ts +20 -32
  464. package/dist/services/model-metadata.service.d.ts.map +1 -1
  465. package/dist/services/model-metadata.service.js +271 -42
  466. package/dist/services/model-metadata.service.js.map +1 -1
  467. package/dist/services/module-metadata-explorer.service.d.ts +161 -0
  468. package/dist/services/module-metadata-explorer.service.d.ts.map +1 -0
  469. package/dist/services/module-metadata-explorer.service.js +485 -0
  470. package/dist/services/module-metadata-explorer.service.js.map +1 -0
  471. package/dist/services/module-metadata.service.d.ts +11 -1
  472. package/dist/services/module-metadata.service.d.ts.map +1 -1
  473. package/dist/services/module-metadata.service.js +140 -4
  474. package/dist/services/module-metadata.service.js.map +1 -1
  475. package/dist/services/module-package.service.d.ts +266 -0
  476. package/dist/services/module-package.service.d.ts.map +1 -0
  477. package/dist/services/module-package.service.js +980 -0
  478. package/dist/services/module-package.service.js.map +1 -0
  479. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts +11 -0
  480. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts.map +1 -0
  481. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js +59 -0
  482. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js.map +1 -0
  483. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts +11 -0
  484. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts.map +1 -0
  485. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js +60 -0
  486. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js.map +1 -0
  487. package/dist/services/settings/default-settings-provider.service.d.ts +292 -0
  488. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  489. package/dist/services/settings/default-settings-provider.service.js +164 -0
  490. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  491. package/dist/services/solid-introspect.service.d.ts +1 -2
  492. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  493. package/dist/services/solid-introspect.service.js +12 -24
  494. package/dist/services/solid-introspect.service.js.map +1 -1
  495. package/dist/services/user.service.d.ts +2 -0
  496. package/dist/services/user.service.d.ts.map +1 -1
  497. package/dist/services/user.service.js +47 -1
  498. package/dist/services/user.service.js.map +1 -1
  499. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts +11 -0
  500. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts.map +1 -0
  501. package/dist/services/whatsapp/GupshupOtpWhatsappService.js +127 -0
  502. package/dist/services/whatsapp/GupshupOtpWhatsappService.js.map +1 -0
  503. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts +17 -0
  504. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts.map +1 -0
  505. package/dist/services/whatsapp/MetaCloudWhatsappService.js +209 -0
  506. package/dist/services/whatsapp/MetaCloudWhatsappService.js.map +1 -0
  507. package/dist/solid-core.module.d.ts +2 -2
  508. package/dist/solid-core.module.d.ts.map +1 -1
  509. package/dist/solid-core.module.js +79 -103
  510. package/dist/solid-core.module.js.map +1 -1
  511. package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
  512. package/dist/subscribers/model-metadata.subscriber.js +1 -3
  513. package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
  514. package/dist/subscribers/scheduled-job.subscriber.js +1 -1
  515. package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
  516. package/dist/subscribers/security-rule.subscriber.js +1 -1
  517. package/dist/subscribers/security-rule.subscriber.js.map +1 -1
  518. package/dist/testing/adapters/ui/playwright-adapter.d.ts +1 -0
  519. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  520. package/dist/testing/adapters/ui/playwright-adapter.js +3 -0
  521. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  522. package/dist/testing/steps/ui/index.d.ts.map +1 -1
  523. package/dist/testing/steps/ui/index.js +2 -0
  524. package/dist/testing/steps/ui/index.js.map +1 -1
  525. package/dist/testing/steps/ui/manual.step.d.ts +3 -0
  526. package/dist/testing/steps/ui/manual.step.d.ts.map +1 -0
  527. package/dist/testing/steps/ui/manual.step.js +56 -0
  528. package/dist/testing/steps/ui/manual.step.js.map +1 -0
  529. package/dist/winston.logger.d.ts +5 -0
  530. package/dist/winston.logger.d.ts.map +1 -1
  531. package/dist/winston.logger.js +6 -4
  532. package/dist/winston.logger.js.map +1 -1
  533. package/package.json +5 -8
  534. package/src/commands/info.command.ts +0 -2
  535. package/src/commands/refresh-model.command.ts +6 -51
  536. package/src/commands/refresh-module.command.ts +3 -16
  537. package/src/commands/test-data.command.ts +29 -6
  538. package/src/constants/error-messages.ts +2 -1
  539. package/src/controllers/chatter-message.controller.ts +12 -0
  540. package/src/controllers/{dashboard-variable.controller.ts → dashboard-user-layout.controller.ts} +10 -10
  541. package/src/controllers/dashboard.controller.ts +70 -89
  542. package/src/controllers/gupshup-webhook.controller.ts +91 -0
  543. package/src/controllers/mcp-audit-log.controller.ts +70 -0
  544. package/src/controllers/meta-cloud-whatsapp-webhook.controller.ts +155 -0
  545. package/src/controllers/microsoft-active-directory-authentication.controller.ts +104 -0
  546. package/src/controllers/model-metadata.controller.ts +1 -1
  547. package/src/controllers/module-metadata-explorer.controller.ts +83 -0
  548. package/src/controllers/module-metadata.controller.ts +7 -1
  549. package/src/controllers/module-package.controller.ts +102 -0
  550. package/src/controllers/service.controller.ts +4 -7
  551. package/src/controllers/test.controller.ts +0 -9
  552. package/src/decorators/dashboard-widget-data-provider.decorator.ts +6 -0
  553. package/src/dtos/confirm-module-package-import.dto.ts +12 -0
  554. package/src/dtos/create-dashboard-user-layout.dto.ts +41 -0
  555. package/src/dtos/create-mcp-audit-log.dto.ts +84 -0
  556. package/src/dtos/create-model-metadata.dto.ts +5 -9
  557. package/src/dtos/create-permission-metadata.dto.ts +3 -0
  558. package/src/dtos/create-role-metadata.dto.ts +11 -1
  559. package/src/dtos/dashboard-variable-options-query.dto.ts +20 -0
  560. package/src/dtos/dashboard-widget-data-request.dto.ts +34 -0
  561. package/src/dtos/import-instructions.dto.ts +11 -1
  562. package/src/dtos/metadata-explorer-references-query.dto.ts +39 -0
  563. package/src/dtos/metadata-explorer-search-query.dto.ts +28 -0
  564. package/src/dtos/metadata-explorer-write.dto.ts +11 -0
  565. package/src/dtos/run-module-package-build.dto.ts +14 -0
  566. package/src/dtos/run-module-package-seed.dto.ts +12 -0
  567. package/src/dtos/update-chatter-note-message.dto.ts +14 -0
  568. package/src/dtos/update-dashboard-user-layout.dto.ts +45 -0
  569. package/src/dtos/update-mcp-audit-log.dto.ts +83 -0
  570. package/src/dtos/update-permission-metadata.dto.ts +4 -1
  571. package/src/dtos/update-role-metadata.dto.ts +21 -1
  572. package/src/dtos/update-user.dto.ts +4 -0
  573. package/src/entities/action-metadata.entity.ts +1 -0
  574. package/src/entities/agent-event.entity.ts +1 -0
  575. package/src/entities/agent-session.entity.ts +1 -0
  576. package/src/entities/chatter-message.entity.ts +2 -0
  577. package/src/entities/dashboard-user-layout.entity.ts +27 -0
  578. package/src/entities/email-template.entity.ts +1 -0
  579. package/src/entities/field-metadata.entity.ts +4 -1
  580. package/src/entities/legacy-common-with-id.entity.ts +2 -2
  581. package/src/entities/legacy-common.entity.ts +1 -1
  582. package/src/entities/list-of-values.entity.ts +5 -1
  583. package/src/entities/locale.entity.ts +1 -0
  584. package/src/entities/mcp-audit-log.entity.ts +55 -0
  585. package/src/entities/media.entity.ts +1 -0
  586. package/src/entities/menu-item-metadata.entity.ts +2 -0
  587. package/src/entities/model-metadata.entity.ts +6 -5
  588. package/src/entities/module-metadata.entity.ts +2 -0
  589. package/src/entities/permission-metadata.entity.ts +2 -2
  590. package/src/entities/role-metadata.entity.ts +11 -3
  591. package/src/entities/saved-filters.entity.ts +3 -0
  592. package/src/entities/scheduled-job.entity.ts +2 -0
  593. package/src/entities/security-rule.entity.ts +1 -0
  594. package/src/entities/sms-template.entity.ts +2 -0
  595. package/src/entities/user-activity-history.entity.ts +1 -0
  596. package/src/entities/user.entity.ts +16 -2
  597. package/src/entities/view-metadata.entity.ts +2 -0
  598. package/src/enums/legacy-table-type.enum.ts +5 -0
  599. package/src/factories/whatsapp.factory.ts +33 -32
  600. package/src/helpers/bootstrap.helper.ts +13 -6
  601. package/src/helpers/command.service.ts +3 -1
  602. package/src/helpers/field-crud-managers/field-quality-check-fixes.md +208 -0
  603. package/src/helpers/microsoft-active-directory-oauth.helper.ts +83 -0
  604. package/src/helpers/model-metadata-helper.service.ts +4 -3
  605. package/src/helpers/module-metadata-helper.service.ts +33 -20
  606. package/src/helpers/module.helper.ts +12 -9
  607. package/src/helpers/solid-registry.ts +15 -36
  608. package/src/helpers/typeorm-migration-helpers.ts +163 -0
  609. package/src/helpers/user-helper.ts +5 -1
  610. package/src/index.ts +37 -10
  611. package/src/interfaces.ts +32 -29
  612. package/src/listeners/user-registration.listener.ts +49 -6
  613. package/src/passport-strategies/microsoft-active-directory-oauth.strategy.ts +63 -0
  614. package/src/repositories/dashboard-user-layout.repository.ts +19 -0
  615. package/src/repository/mcp-audit-log.repository.ts +17 -0
  616. package/src/seeders/module-metadata-seeder.service.ts +63 -105
  617. package/src/seeders/module-test-data.service.ts +80 -3
  618. package/src/seeders/seed-data/solid-core-metadata.json +5010 -4284
  619. package/src/seeders/system-fields-seeder.service.ts +1 -1
  620. package/src/services/1.js +6 -0
  621. package/src/services/authentication.service.ts +359 -46
  622. package/src/services/chatter-message.service.ts +112 -2
  623. package/src/services/crud-helper.service.ts +86 -2
  624. package/src/services/crud.service.ts +26 -119
  625. package/src/services/dashboard-providers/README.md +603 -0
  626. package/src/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.ts +49 -0
  627. package/src/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.ts +45 -0
  628. package/src/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.ts +45 -0
  629. package/src/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.ts +58 -0
  630. package/src/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.ts +79 -0
  631. package/src/services/dashboard-providers/mq-dashboard-provider-utils.ts +165 -0
  632. package/src/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.ts +155 -0
  633. package/src/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.ts +51 -0
  634. package/src/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.ts +51 -0
  635. package/src/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.ts +95 -0
  636. package/src/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.ts +49 -0
  637. package/src/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.ts +45 -0
  638. package/src/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.ts +55 -0
  639. package/src/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.ts +44 -0
  640. package/src/services/dashboard-runtime.service.ts +488 -0
  641. package/src/services/dashboard-user-layout.service.ts +20 -0
  642. package/src/services/import-transaction.service.ts +11 -1
  643. package/src/services/mcp-audit-log.service.ts +19 -0
  644. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +60 -13
  645. package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -2
  646. package/src/services/model-metadata.service.ts +318 -115
  647. package/src/services/module-metadata-explorer.service.ts +670 -0
  648. package/src/services/module-metadata.service.ts +148 -10
  649. package/src/services/module-package.service.ts +1171 -0
  650. package/src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts +52 -0
  651. package/src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts +51 -0
  652. package/src/services/settings/default-settings-provider.service.ts +167 -0
  653. package/src/services/solid-introspect.service.ts +19 -34
  654. package/src/services/user.service.ts +62 -1
  655. package/src/services/whatsapp/GupshupOtpWhatsappService.ts +174 -0
  656. package/src/services/whatsapp/MetaCloudWhatsappService.ts +253 -0
  657. package/src/solid-core.module.ts +251 -282
  658. package/src/subscribers/model-metadata.subscriber.ts +1 -3
  659. package/src/subscribers/scheduled-job.subscriber.ts +1 -1
  660. package/src/subscribers/security-rule.subscriber.ts +1 -1
  661. package/src/testing/README.md +55 -2
  662. package/src/testing/adapters/ui/playwright-adapter.ts +4 -0
  663. package/src/testing/steps/ui/index.ts +2 -0
  664. package/src/testing/steps/ui/manual.step.ts +80 -0
  665. package/src/winston.logger.ts +5 -7
  666. package/dist/commands/ingest.command.d.ts +0 -16
  667. package/dist/commands/ingest.command.d.ts.map +0 -1
  668. package/dist/commands/ingest.command.js +0 -50
  669. package/dist/commands/ingest.command.js.map +0 -1
  670. package/dist/controllers/ai-interaction.controller.d.ts +0 -48
  671. package/dist/controllers/ai-interaction.controller.d.ts.map +0 -1
  672. package/dist/controllers/ai-interaction.controller.js +0 -218
  673. package/dist/controllers/ai-interaction.controller.js.map +0 -1
  674. package/dist/controllers/dashboard-layout.controller.d.ts +0 -47
  675. package/dist/controllers/dashboard-layout.controller.d.ts.map +0 -1
  676. package/dist/controllers/dashboard-layout.controller.js +0 -204
  677. package/dist/controllers/dashboard-layout.controller.js.map +0 -1
  678. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +0 -43
  679. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +0 -1
  680. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js +0 -179
  681. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +0 -1
  682. package/dist/controllers/dashboard-question.controller.d.ts +0 -45
  683. package/dist/controllers/dashboard-question.controller.d.ts.map +0 -1
  684. package/dist/controllers/dashboard-question.controller.js.map +0 -1
  685. package/dist/controllers/dashboard-variable.controller.d.ts +0 -43
  686. package/dist/controllers/dashboard-variable.controller.d.ts.map +0 -1
  687. package/dist/controllers/dashboard-variable.controller.js.map +0 -1
  688. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts +0 -3
  689. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +0 -1
  690. package/dist/decorators/dashboard-question-data-provider.decorator.js +0 -11
  691. package/dist/decorators/dashboard-question-data-provider.decorator.js.map +0 -1
  692. package/dist/decorators/dashboard-selection-provider.decorator.d.ts +0 -3
  693. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +0 -1
  694. package/dist/decorators/dashboard-selection-provider.decorator.js +0 -11
  695. package/dist/decorators/dashboard-selection-provider.decorator.js.map +0 -1
  696. package/dist/dtos/create-ai-interaction.dto.d.ts +0 -23
  697. package/dist/dtos/create-ai-interaction.dto.d.ts.map +0 -1
  698. package/dist/dtos/create-ai-interaction.dto.js +0 -149
  699. package/dist/dtos/create-ai-interaction.dto.js.map +0 -1
  700. package/dist/dtos/create-dashboard-layout.dto.d.ts +0 -8
  701. package/dist/dtos/create-dashboard-layout.dto.d.ts.map +0 -1
  702. package/dist/dtos/create-dashboard-layout.dto.js +0 -53
  703. package/dist/dtos/create-dashboard-layout.dto.js.map +0 -1
  704. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts +0 -12
  705. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  706. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js +0 -77
  707. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  708. package/dist/dtos/create-dashboard-question.dto.d.ts +0 -17
  709. package/dist/dtos/create-dashboard-question.dto.d.ts.map +0 -1
  710. package/dist/dtos/create-dashboard-question.dto.js +0 -105
  711. package/dist/dtos/create-dashboard-question.dto.js.map +0 -1
  712. package/dist/dtos/create-dashboard-variable.dto.d.ts +0 -19
  713. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +0 -1
  714. package/dist/dtos/create-dashboard-variable.dto.js +0 -103
  715. package/dist/dtos/create-dashboard-variable.dto.js.map +0 -1
  716. package/dist/dtos/create-dashboard.dto.d.ts +0 -17
  717. package/dist/dtos/create-dashboard.dto.d.ts.map +0 -1
  718. package/dist/dtos/create-dashboard.dto.js +0 -102
  719. package/dist/dtos/create-dashboard.dto.js.map +0 -1
  720. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +0 -8
  721. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts.map +0 -1
  722. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js +0 -52
  723. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js.map +0 -1
  724. package/dist/dtos/invoke-ai-prompt.dto.d.ts +0 -5
  725. package/dist/dtos/invoke-ai-prompt.dto.d.ts.map +0 -1
  726. package/dist/dtos/invoke-ai-prompt.dto.js.map +0 -1
  727. package/dist/dtos/update-ai-interaction.dto.d.ts +0 -24
  728. package/dist/dtos/update-ai-interaction.dto.d.ts.map +0 -1
  729. package/dist/dtos/update-ai-interaction.dto.js +0 -150
  730. package/dist/dtos/update-ai-interaction.dto.js.map +0 -1
  731. package/dist/dtos/update-dashboard-layout.dto.d.ts +0 -8
  732. package/dist/dtos/update-dashboard-layout.dto.d.ts.map +0 -1
  733. package/dist/dtos/update-dashboard-layout.dto.js.map +0 -1
  734. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts +0 -13
  735. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  736. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js +0 -86
  737. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  738. package/dist/dtos/update-dashboard-question.dto.d.ts +0 -18
  739. package/dist/dtos/update-dashboard-question.dto.d.ts.map +0 -1
  740. package/dist/dtos/update-dashboard-question.dto.js +0 -112
  741. package/dist/dtos/update-dashboard-question.dto.js.map +0 -1
  742. package/dist/dtos/update-dashboard-variable.dto.d.ts +0 -16
  743. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +0 -1
  744. package/dist/dtos/update-dashboard-variable.dto.js +0 -101
  745. package/dist/dtos/update-dashboard-variable.dto.js.map +0 -1
  746. package/dist/dtos/update-dashboard.dto.d.ts +0 -18
  747. package/dist/dtos/update-dashboard.dto.d.ts.map +0 -1
  748. package/dist/dtos/update-dashboard.dto.js +0 -108
  749. package/dist/dtos/update-dashboard.dto.js.map +0 -1
  750. package/dist/entities/ai-interaction.entity.d.ts +0 -24
  751. package/dist/entities/ai-interaction.entity.d.ts.map +0 -1
  752. package/dist/entities/ai-interaction.entity.js +0 -116
  753. package/dist/entities/ai-interaction.entity.js.map +0 -1
  754. package/dist/entities/dashboard-layout.entity.d.ts +0 -9
  755. package/dist/entities/dashboard-layout.entity.d.ts.map +0 -1
  756. package/dist/entities/dashboard-layout.entity.js +0 -41
  757. package/dist/entities/dashboard-layout.entity.js.map +0 -1
  758. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +0 -14
  759. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +0 -1
  760. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +0 -66
  761. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +0 -1
  762. package/dist/entities/dashboard-question.entity.d.ts +0 -17
  763. package/dist/entities/dashboard-question.entity.d.ts.map +0 -1
  764. package/dist/entities/dashboard-question.entity.js +0 -77
  765. package/dist/entities/dashboard-question.entity.js.map +0 -1
  766. package/dist/entities/dashboard-variable.entity.d.ts +0 -16
  767. package/dist/entities/dashboard-variable.entity.d.ts.map +0 -1
  768. package/dist/entities/dashboard-variable.entity.js +0 -79
  769. package/dist/entities/dashboard-variable.entity.js.map +0 -1
  770. package/dist/entities/dashboard.entity.d.ts +0 -16
  771. package/dist/entities/dashboard.entity.d.ts.map +0 -1
  772. package/dist/entities/dashboard.entity.js +0 -64
  773. package/dist/entities/dashboard.entity.js.map +0 -1
  774. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +0 -11
  775. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts.map +0 -1
  776. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js +0 -39
  777. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js.map +0 -1
  778. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +0 -8
  779. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts.map +0 -1
  780. package/dist/jobs/database/trigger-mcp-client-queue-options.js +0 -10
  781. package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +0 -1
  782. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +0 -27
  783. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +0 -1
  784. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +0 -245
  785. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +0 -1
  786. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts +0 -11
  787. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts.map +0 -1
  788. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js +0 -39
  789. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js.map +0 -1
  790. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts +0 -8
  791. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts.map +0 -1
  792. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js +0 -10
  793. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js.map +0 -1
  794. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts +0 -18
  795. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts.map +0 -1
  796. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js +0 -103
  797. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js.map +0 -1
  798. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts +0 -11
  799. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts.map +0 -1
  800. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js +0 -39
  801. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js.map +0 -1
  802. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts +0 -8
  803. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts.map +0 -1
  804. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js +0 -10
  805. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js.map +0 -1
  806. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts +0 -18
  807. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts.map +0 -1
  808. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js +0 -103
  809. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js.map +0 -1
  810. package/dist/mappers/dashboard-mapper.d.ts +0 -6
  811. package/dist/mappers/dashboard-mapper.d.ts.map +0 -1
  812. package/dist/mappers/dashboard-mapper.js +0 -62
  813. package/dist/mappers/dashboard-mapper.js.map +0 -1
  814. package/dist/repository/ai-interaction.repository.d.ts.map +0 -1
  815. package/dist/repository/ai-interaction.repository.js.map +0 -1
  816. package/dist/repository/dashboard-layout.repository.d.ts.map +0 -1
  817. package/dist/repository/dashboard-layout.repository.js +0 -34
  818. package/dist/repository/dashboard-layout.repository.js.map +0 -1
  819. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +0 -12
  820. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +0 -1
  821. package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +0 -1
  822. package/dist/repository/dashboard-question.repository.d.ts +0 -12
  823. package/dist/repository/dashboard-question.repository.d.ts.map +0 -1
  824. package/dist/repository/dashboard-question.repository.js +0 -34
  825. package/dist/repository/dashboard-question.repository.js.map +0 -1
  826. package/dist/repository/dashboard-variable.repository.d.ts +0 -12
  827. package/dist/repository/dashboard-variable.repository.d.ts.map +0 -1
  828. package/dist/repository/dashboard-variable.repository.js +0 -34
  829. package/dist/repository/dashboard-variable.repository.js.map +0 -1
  830. package/dist/repository/dashboard.repository.d.ts +0 -13
  831. package/dist/repository/dashboard.repository.d.ts.map +0 -1
  832. package/dist/repository/dashboard.repository.js +0 -104
  833. package/dist/repository/dashboard.repository.js.map +0 -1
  834. package/dist/services/ai-interaction.service.d.ts +0 -23
  835. package/dist/services/ai-interaction.service.d.ts.map +0 -1
  836. package/dist/services/ai-interaction.service.js +0 -217
  837. package/dist/services/ai-interaction.service.js.map +0 -1
  838. package/dist/services/dashboard-layout.service.d.ts +0 -20
  839. package/dist/services/dashboard-layout.service.d.ts.map +0 -1
  840. package/dist/services/dashboard-layout.service.js +0 -120
  841. package/dist/services/dashboard-layout.service.js.map +0 -1
  842. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +0 -12
  843. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +0 -1
  844. package/dist/services/dashboard-question-sql-dataset-config.service.js.map +0 -1
  845. package/dist/services/dashboard-question.service.d.ts +0 -23
  846. package/dist/services/dashboard-question.service.d.ts.map +0 -1
  847. package/dist/services/dashboard-question.service.js +0 -135
  848. package/dist/services/dashboard-question.service.js.map +0 -1
  849. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +0 -12
  850. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +0 -1
  851. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +0 -55
  852. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +0 -1
  853. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +0 -11
  854. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +0 -1
  855. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +0 -45
  856. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +0 -1
  857. package/dist/services/dashboard-variable.service.d.ts +0 -13
  858. package/dist/services/dashboard-variable.service.d.ts.map +0 -1
  859. package/dist/services/dashboard-variable.service.js.map +0 -1
  860. package/dist/services/dashboard.service.d.ts +0 -29
  861. package/dist/services/dashboard.service.d.ts.map +0 -1
  862. package/dist/services/dashboard.service.js +0 -171
  863. package/dist/services/dashboard.service.js.map +0 -1
  864. package/dist/services/database/database-bootstrap.service.d.ts +0 -12
  865. package/dist/services/database/database-bootstrap.service.d.ts.map +0 -1
  866. package/dist/services/database/database-bootstrap.service.js +0 -115
  867. package/dist/services/database/database-bootstrap.service.js.map +0 -1
  868. package/dist/services/genai/ingest-metadata.service.d.ts +0 -38
  869. package/dist/services/genai/ingest-metadata.service.d.ts.map +0 -1
  870. package/dist/services/genai/ingest-metadata.service.js +0 -542
  871. package/dist/services/genai/ingest-metadata.service.js.map +0 -1
  872. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts +0 -9
  873. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts.map +0 -1
  874. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js +0 -39
  875. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js.map +0 -1
  876. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts +0 -12
  877. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  878. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js +0 -41
  879. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js.map +0 -1
  880. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts +0 -12
  881. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  882. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js +0 -42
  883. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js.map +0 -1
  884. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts +0 -25
  885. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts.map +0 -1
  886. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js +0 -116
  887. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js.map +0 -1
  888. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts +0 -12
  889. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts.map +0 -1
  890. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js +0 -37
  891. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js.map +0 -1
  892. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts +0 -12
  893. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts.map +0 -1
  894. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js +0 -38
  895. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js.map +0 -1
  896. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts +0 -12
  897. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts.map +0 -1
  898. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js +0 -38
  899. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js.map +0 -1
  900. package/dist/services/genai/r2r-helper.service.d.ts +0 -9
  901. package/dist/services/genai/r2r-helper.service.d.ts.map +0 -1
  902. package/dist/services/genai/r2r-helper.service.js +0 -40
  903. package/dist/services/genai/r2r-helper.service.js.map +0 -1
  904. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +0 -34
  905. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +0 -1
  906. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +0 -90
  907. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +0 -1
  908. package/dist/services/question-data-providers/helpers.d.ts +0 -7
  909. package/dist/services/question-data-providers/helpers.d.ts.map +0 -1
  910. package/dist/services/question-data-providers/helpers.js +0 -25
  911. package/dist/services/question-data-providers/helpers.js.map +0 -1
  912. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +0 -14
  913. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +0 -1
  914. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +0 -71
  915. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +0 -1
  916. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +0 -16
  917. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +0 -1
  918. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +0 -93
  919. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +0 -1
  920. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +0 -11
  921. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +0 -1
  922. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +0 -49
  923. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +0 -1
  924. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +0 -11
  925. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +0 -1
  926. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +0 -47
  927. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +0 -1
  928. package/dist/services/sql-expression-resolver.service.d.ts +0 -12
  929. package/dist/services/sql-expression-resolver.service.d.ts.map +0 -1
  930. package/dist/services/sql-expression-resolver.service.js +0 -121
  931. package/dist/services/sql-expression-resolver.service.js.map +0 -1
  932. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +0 -16
  933. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +0 -1
  934. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js +0 -72
  935. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +0 -1
  936. package/dist/subscribers/dashboard-question.subscriber.d.ts +0 -16
  937. package/dist/subscribers/dashboard-question.subscriber.d.ts.map +0 -1
  938. package/dist/subscribers/dashboard-question.subscriber.js +0 -72
  939. package/dist/subscribers/dashboard-question.subscriber.js.map +0 -1
  940. package/dist/subscribers/dashboard-variable.subscriber.d.ts +0 -16
  941. package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +0 -1
  942. package/dist/subscribers/dashboard-variable.subscriber.js +0 -72
  943. package/dist/subscribers/dashboard-variable.subscriber.js.map +0 -1
  944. package/dist/subscribers/dashboard.subscriber.d.ts +0 -16
  945. package/dist/subscribers/dashboard.subscriber.d.ts.map +0 -1
  946. package/dist/subscribers/dashboard.subscriber.js +0 -71
  947. package/dist/subscribers/dashboard.subscriber.js.map +0 -1
  948. package/dist-tests/api/authenticate.spec.js +0 -119
  949. package/dist-tests/api/authenticate.spec.js.map +0 -1
  950. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  951. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  952. package/dist-tests/api/ping.spec.js +0 -21
  953. package/dist-tests/api/ping.spec.js.map +0 -1
  954. package/dist-tests/helpers/auth.js +0 -41
  955. package/dist-tests/helpers/auth.js.map +0 -1
  956. package/dist-tests/helpers/env.js +0 -11
  957. package/dist-tests/helpers/env.js.map +0 -1
  958. package/docs/grouping-enhancements.md +0 -89
  959. package/docs/java-spring/README.md +0 -3
  960. package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
  961. package/docs/seed-changes.md +0 -65
  962. package/docs/test-data-workflow.md +0 -200
  963. package/docs/type-declaration-import-issue.md +0 -24
  964. package/sql/default/mariadb/proc_CleanupModelMetadata.sql +0 -153
  965. package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +0 -56
  966. package/sql/default/mssql/proc_CleanupModuleMetadata.sql +0 -78
  967. package/sql/default/mysql/proc_CleanupModelMetadata.sql +0 -153
  968. package/sql/default/mysql/proc_CleanupModuleMetadata.sql +0 -56
  969. package/sql/default/postgres/proc_CleanupModelMetadata.sql +0 -148
  970. package/sql/default/postgres/proc_CleanupModuleMetadata.sql +0 -50
  971. package/sql/default/postgres/scratchpad.sql.txt +0 -12
  972. package/src/commands/ingest.command.ts +0 -36
  973. package/src/controllers/ai-interaction.controller.ts +0 -112
  974. package/src/controllers/dashboard-layout.controller.ts +0 -106
  975. package/src/controllers/dashboard-question-sql-dataset-config.controller.ts +0 -93
  976. package/src/controllers/dashboard-question.controller.ts +0 -104
  977. package/src/decorators/dashboard-question-data-provider.decorator.ts +0 -7
  978. package/src/decorators/dashboard-selection-provider.decorator.ts +0 -7
  979. package/src/dtos/create-ai-interaction.dto.ts +0 -89
  980. package/src/dtos/create-dashboard-layout.dto.ts +0 -31
  981. package/src/dtos/create-dashboard-question-sql-dataset-config.dto.ts +0 -42
  982. package/src/dtos/create-dashboard-question.dto.ts +0 -62
  983. package/src/dtos/create-dashboard-variable.dto.ts +0 -60
  984. package/src/dtos/create-dashboard.dto.ts +0 -61
  985. package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +0 -29
  986. package/src/dtos/invoke-ai-prompt.dto.ts +0 -10
  987. package/src/dtos/update-ai-interaction.dto.ts +0 -93
  988. package/src/dtos/update-dashboard-layout.dto.ts +0 -30
  989. package/src/dtos/update-dashboard-question-sql-dataset-config.dto.ts +0 -49
  990. package/src/dtos/update-dashboard-question.dto.ts +0 -67
  991. package/src/dtos/update-dashboard-variable.dto.ts +0 -58
  992. package/src/dtos/update-dashboard.dto.ts +0 -65
  993. package/src/entities/ai-interaction.entity.ts +0 -71
  994. package/src/entities/dashboard-layout.entity.ts +0 -18
  995. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +0 -37
  996. package/src/entities/dashboard-question.entity.ts +0 -46
  997. package/src/entities/dashboard-variable.entity.ts +0 -44
  998. package/src/entities/dashboard.entity.ts +0 -36
  999. package/src/jobs/database/trigger-mcp-client-publisher-database.service.ts +0 -22
  1000. package/src/jobs/database/trigger-mcp-client-queue-options.ts +0 -9
  1001. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +0 -311
  1002. package/src/jobs/rabbitmq/trigger-mcp-client-publisher.service.ts +0 -22
  1003. package/src/jobs/rabbitmq/trigger-mcp-client-queue-options.ts +0 -9
  1004. package/src/jobs/rabbitmq/trigger-mcp-client-subscriber.service.ts +0 -104
  1005. package/src/jobs/redis/trigger-mcp-client-publisher-redis.service.ts +0 -23
  1006. package/src/jobs/redis/trigger-mcp-client-queue-options-redis.ts +0 -9
  1007. package/src/jobs/redis/trigger-mcp-client-subscriber-redis.service.ts +0 -98
  1008. package/src/mappers/dashboard-mapper.ts +0 -53
  1009. package/src/repository/ai-interaction.repository.ts +0 -17
  1010. package/src/repository/dashboard-layout.repository.ts +0 -17
  1011. package/src/repository/dashboard-question-sql-dataset-config.repository.ts +0 -17
  1012. package/src/repository/dashboard-question.repository.ts +0 -17
  1013. package/src/repository/dashboard-variable.repository.ts +0 -17
  1014. package/src/repository/dashboard.repository.ts +0 -101
  1015. package/src/services/ai-interaction.service.ts +0 -239
  1016. package/src/services/dashboard-layout.service.ts +0 -111
  1017. package/src/services/dashboard-question-sql-dataset-config.service.ts +0 -25
  1018. package/src/services/dashboard-question.service.ts +0 -150
  1019. package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +0 -56
  1020. package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +0 -37
  1021. package/src/services/dashboard-variable.service.ts +0 -27
  1022. package/src/services/dashboard.service.ts +0 -148
  1023. package/src/services/database/database-bootstrap.service.ts +0 -91
  1024. package/src/services/genai/ingest-metadata.service.ts +0 -798
  1025. package/src/services/genai/mcp-handlers/mcp-handler-factory.service.ts +0 -33
  1026. package/src/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.ts +0 -43
  1027. package/src/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.ts +0 -44
  1028. package/src/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.ts +0 -114
  1029. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.ts +0 -38
  1030. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.ts +0 -40
  1031. package/src/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.ts +0 -39
  1032. package/src/services/genai/r2r-helper.service.ts +0 -37
  1033. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +0 -121
  1034. package/src/services/question-data-providers/helpers.ts +0 -30
  1035. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +0 -74
  1036. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +0 -115
  1037. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +0 -44
  1038. package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +0 -41
  1039. package/src/services/sql-expression-resolver.service.ts +0 -140
  1040. package/src/subscribers/dashboard-question-sql-dataset-config.subscriber.ts +0 -61
  1041. package/src/subscribers/dashboard-question.subscriber.ts +0 -62
  1042. package/src/subscribers/dashboard-variable.subscriber.ts +0 -63
  1043. package/src/subscribers/dashboard.subscriber.ts +0 -62
@@ -1,10 +1,12 @@
1
1
  import { ModuleRef } from "@nestjs/core";
2
2
  import { EntityManager } from 'typeorm';
3
3
  import { PostChatterMessageDto } from '../dtos/post-chatter-message.dto';
4
+ import { UpdateChatterNoteMessageDto } from '../dtos/update-chatter-note-message.dto';
4
5
  import { ModelMetadataHelperService } from '../helpers/model-metadata-helper.service';
5
6
  import { ChatterMessageDetailsRepository } from '../repository/chatter-message-details.repository';
6
7
  import { ChatterMessageRepository } from '../repository/chatter-message.repository';
7
8
  import { FieldMetadataRepository } from '../repository/field-metadata.repository';
9
+ import { MediaRepository } from '../repository/media.repository';
8
10
  import { ModelMetadataRepository } from '../repository/model-metadata.repository';
9
11
  import { CRUDService } from '../services/crud.service';
10
12
  import { ChatterMessage } from '../entities/chatter-message.entity';
@@ -13,17 +15,21 @@ export declare class ChatterMessageService extends CRUDService<ChatterMessage> {
13
15
  readonly entityManager: EntityManager;
14
16
  readonly repo: ChatterMessageRepository;
15
17
  readonly chatterMessageDetailsRepo: ChatterMessageDetailsRepository;
18
+ readonly mediaRepository: MediaRepository;
16
19
  readonly fieldMetadataRepo: FieldMetadataRepository;
17
20
  readonly moduleRef: ModuleRef;
18
21
  private readonly modelMetadataRepo;
19
22
  readonly requestContextService: RequestContextService;
20
23
  private readonly modelMetadataHelperService;
21
24
  private readonly _logger;
22
- constructor(entityManager: EntityManager, repo: ChatterMessageRepository, chatterMessageDetailsRepo: ChatterMessageDetailsRepository, fieldMetadataRepo: FieldMetadataRepository, moduleRef: ModuleRef, modelMetadataRepo: ModelMetadataRepository, requestContextService: RequestContextService, modelMetadataHelperService: ModelMetadataHelperService);
25
+ constructor(entityManager: EntityManager, repo: ChatterMessageRepository, chatterMessageDetailsRepo: ChatterMessageDetailsRepository, mediaRepository: MediaRepository, fieldMetadataRepo: FieldMetadataRepository, moduleRef: ModuleRef, modelMetadataRepo: ModelMetadataRepository, requestContextService: RequestContextService, modelMetadataHelperService: ModelMetadataHelperService);
23
26
  private resolveMessageUserId;
24
27
  private resolveMessageUser;
25
28
  private stampMessageAuditFields;
29
+ private isEditableCustomNoteMessage;
30
+ private parseAttachmentIds;
26
31
  markCompleted(id: number): Promise<ChatterMessage>;
32
+ updateCustomNoteMessage(id: number, updateDto: UpdateChatterNoteMessageDto, files?: Express.Multer.File[]): Promise<ChatterMessage>;
27
33
  postMessage(postDto: PostChatterMessageDto, files?: Express.Multer.File[]): Promise<ChatterMessage>;
28
34
  postAuditMessageOnInsert(entity: any, modelName: string, messageQueue?: boolean, userId?: number | null): Promise<void>;
29
35
  postAuditMessageOnUpdate(entity: any, modelName: string, databaseEntity: any, updatedColumns?: any[], messageQueue?: boolean, userId?: number | null): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"chatter-message.service.d.ts","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAY,aAAa,EAAkB,MAAM,SAAS,CAAC;AAKlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,mDAAmD,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,qBACa,qBAAsB,SAAQ,WAAW,CAAC,cAAc,CAAC;IAK9D,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,wBAAwB;IAEvC,QAAQ,CAAC,yBAAyB,EAAE,+BAA+B;IAGnE,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB;IACnD,QAAQ,CAAC,SAAS,EAAE,SAAS;IAI7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,0BAA0B;IAlB/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;gBAIrD,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,wBAAwB,EAE9B,yBAAyB,EAAE,+BAA+B,EAG1D,iBAAiB,EAAE,uBAAuB,EAC1C,SAAS,EAAE,SAAS,EAIZ,iBAAiB,EAAE,uBAAuB,EAClD,qBAAqB,EAAE,qBAAqB,EACpC,0BAA0B,EAAE,0BAA0B;IAK3E,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,uBAAuB;IAOzB,aAAa,CAAC,EAAE,EAAE,MAAM;IAexB,WAAW,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAO;IA6C7E,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAuD9G,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,GAAE,GAAG,EAAO,EAAE,YAAY,GAAE,OAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IA6G/J,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAE,OAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IA8D5H,OAAO,CAAC,gBAAgB;YAyBV,uBAAuB;IA+CrC,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,kBAAkB;YASZ,sBAAsB;IA6CpC,OAAO,CAAC,WAAW;IAOb,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;;;;;;;;;;;CAkJ5E"}
1
+ {"version":3,"file":"chatter-message.service.d.ts","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ const string_helper_1 = require("../helpers/string.helper");
27
27
  const chatter_message_details_repository_1 = require("../repository/chatter-message-details.repository");
28
28
  const chatter_message_repository_1 = require("../repository/chatter-message.repository");
29
29
  const field_metadata_repository_1 = require("../repository/field-metadata.repository");
30
+ const media_repository_1 = require("../repository/media.repository");
30
31
  const model_metadata_repository_1 = require("../repository/model-metadata.repository");
31
32
  const crud_service_1 = require("./crud.service");
32
33
  const chatter_message_details_entity_1 = require("../entities/chatter-message-details.entity");
@@ -35,11 +36,12 @@ const mediaStorageProviders_1 = require("./mediaStorageProviders");
35
36
  const request_context_service_1 = require("./request-context.service");
36
37
  const common_2 = require("@nestjs/common");
37
38
  let ChatterMessageService = ChatterMessageService_1 = class ChatterMessageService extends crud_service_1.CRUDService {
38
- constructor(entityManager, repo, chatterMessageDetailsRepo, fieldMetadataRepo, moduleRef, modelMetadataRepo, requestContextService, modelMetadataHelperService) {
39
+ constructor(entityManager, repo, chatterMessageDetailsRepo, mediaRepository, fieldMetadataRepo, moduleRef, modelMetadataRepo, requestContextService, modelMetadataHelperService) {
39
40
  super(entityManager, repo, 'chatterMessage', 'solid-core', moduleRef);
40
41
  this.entityManager = entityManager;
41
42
  this.repo = repo;
42
43
  this.chatterMessageDetailsRepo = chatterMessageDetailsRepo;
44
+ this.mediaRepository = mediaRepository;
43
45
  this.fieldMetadataRepo = fieldMetadataRepo;
44
46
  this.moduleRef = moduleRef;
45
47
  this.modelMetadataRepo = modelMetadataRepo;
@@ -63,6 +65,20 @@ let ChatterMessageService = ChatterMessageService_1 = class ChatterMessageServic
63
65
  chatterMessage.createdBy = resolvedUserId;
64
66
  chatterMessage.updatedBy = resolvedUserId;
65
67
  }
68
+ isEditableCustomNoteMessage(message) {
69
+ if (message.messageType !== chatter_message_constants_1.CHATTER_MESSAGE_TYPE.CUSTOM) {
70
+ return false;
71
+ }
72
+ return [chatter_message_constants_1.CHATTER_MESSAGE_SUBTYPE.CUSTOM, chatter_message_constants_1.CHATTER_MESSAGE_SUBTYPE.NOTE].includes(message.messageSubType);
73
+ }
74
+ parseAttachmentIds(value) {
75
+ if (!value || typeof value !== 'string')
76
+ return [];
77
+ return value
78
+ .split(',')
79
+ .map(v => Number(v.trim()))
80
+ .filter(v => Number.isInteger(v) && v > 0);
81
+ }
66
82
  async markCompleted(id) {
67
83
  const activeUser = this.requestContextService.getActiveUser();
68
84
  if (!activeUser) {
@@ -75,6 +91,81 @@ let ChatterMessageService = ChatterMessageService_1 = class ChatterMessageServic
75
91
  message.status = chatter_message_constants_1.CHATTER_MESSAGE_STATUS.COMPLETED;
76
92
  return this.repo.save(message);
77
93
  }
94
+ async updateCustomNoteMessage(id, updateDto, files = []) {
95
+ const activeUser = this.requestContextService.getActiveUser();
96
+ if (!activeUser) {
97
+ throw new common_1.ForbiddenException(error_messages_1.ERROR_MESSAGES.FORBIDDEN);
98
+ }
99
+ const message = await this.repo.findOne({ where: { id }, relations: { user: true } });
100
+ if (!message) {
101
+ throw new common_1.NotFoundException(`Entity [solid-core.chatterMessage] with id ${id} not found`);
102
+ }
103
+ if (!this.isEditableCustomNoteMessage(message)) {
104
+ throw new common_1.BadRequestException('Only custom note messages can be edited.');
105
+ }
106
+ if (!message.user?.id || message.user.id !== activeUser.sub) {
107
+ throw new common_1.ForbiddenException('You can only edit your own custom note messages.');
108
+ }
109
+ const removeAttachmentIds = this.parseAttachmentIds(updateDto?.removeAttachmentIds);
110
+ const hasMessageBody = typeof updateDto?.messageBody === 'string';
111
+ const trimmedMessageBody = (updateDto?.messageBody ?? '').trim();
112
+ const hasNewFiles = Array.isArray(files) && files.length > 0;
113
+ if (!hasMessageBody && removeAttachmentIds.length === 0 && !hasNewFiles) {
114
+ throw new common_1.BadRequestException('No note changes submitted.');
115
+ }
116
+ if (hasMessageBody && trimmedMessageBody.length === 0) {
117
+ throw new common_1.BadRequestException('Message body cannot be empty.');
118
+ }
119
+ if (hasMessageBody) {
120
+ message.messageBody = trimmedMessageBody;
121
+ }
122
+ message.updatedBy = activeUser.sub;
123
+ message.updatedAt = new Date();
124
+ const savedMessage = await this.repo.save(message);
125
+ if (removeAttachmentIds.length > 0 || hasNewFiles) {
126
+ const model = await this.modelMetadataService.findOneBySingularName('chatterMessage', {
127
+ fields: {
128
+ model: true,
129
+ mediaStorageProvider: true,
130
+ },
131
+ module: true,
132
+ });
133
+ const mediaFields = model.fields.filter(field => field.type === 'mediaSingle' || field.type === 'mediaMultiple');
134
+ const attachmentFieldIds = mediaFields.map(field => field.id);
135
+ if (removeAttachmentIds.length > 0 && attachmentFieldIds.length > 0) {
136
+ const mediaToRemove = await this.mediaRepository.find({
137
+ where: {
138
+ id: (0, typeorm_2.In)(removeAttachmentIds),
139
+ entityId: savedMessage.id,
140
+ modelMetadata: { id: model.id },
141
+ fieldMetadata: { id: (0, typeorm_2.In)(attachmentFieldIds) },
142
+ },
143
+ relations: {
144
+ mediaStorageProviderMetadata: true,
145
+ fieldMetadata: true,
146
+ },
147
+ });
148
+ for (const media of mediaToRemove) {
149
+ const storageType = media.mediaStorageProviderMetadata?.type;
150
+ const storageProvider = await (0, mediaStorageProviders_1.getMediaStorageProvider)(this.moduleRef, storageType);
151
+ await storageProvider.deleteByMediaRecord(media);
152
+ }
153
+ if (mediaToRemove.length > 0) {
154
+ await this.mediaRepository.remove(mediaToRemove);
155
+ }
156
+ }
157
+ for (const mediaField of mediaFields) {
158
+ const storageProviderMetadata = mediaField.mediaStorageProvider;
159
+ const storageProviderType = storageProviderMetadata.type;
160
+ const storageProvider = await (0, mediaStorageProviders_1.getMediaStorageProvider)(this.moduleRef, storageProviderType);
161
+ const media = files.filter(multerFile => multerFile.fieldname === mediaField.name);
162
+ if (media.length > 0) {
163
+ await storageProvider.store(media, savedMessage, mediaField);
164
+ }
165
+ }
166
+ }
167
+ return savedMessage;
168
+ }
78
169
  async postMessage(postDto, files = []) {
79
170
  const chatterMessage = new chatter_message_entity_1.ChatterMessage();
80
171
  chatterMessage.messageType = chatter_message_constants_1.CHATTER_MESSAGE_TYPE.CUSTOM;
@@ -601,10 +692,11 @@ exports.ChatterMessageService = ChatterMessageService;
601
692
  exports.ChatterMessageService = ChatterMessageService = ChatterMessageService_1 = __decorate([
602
693
  (0, common_1.Injectable)(),
603
694
  __param(0, (0, typeorm_1.InjectEntityManager)()),
604
- __param(5, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_repository_1.ModelMetadataRepository))),
695
+ __param(6, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_repository_1.ModelMetadataRepository))),
605
696
  __metadata("design:paramtypes", [typeorm_2.EntityManager,
606
697
  chatter_message_repository_1.ChatterMessageRepository,
607
698
  chatter_message_details_repository_1.ChatterMessageDetailsRepository,
699
+ media_repository_1.MediaRepository,
608
700
  field_metadata_repository_1.FieldMetadataRepository,
609
701
  core_1.ModuleRef,
610
702
  model_metadata_repository_1.ModelMetadataRepository,
@@ -1 +1 @@
1
- {"version":3,"file":"chatter-message.service.js","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { LocalDateTimeTransformer, serializeDate } from 'src/transformers/typeorm/local-date-time-transformer';\nimport { BadRequestException, forwardRef, Inject, Injectable, NotFoundException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { Brackets, EntityManager, EntityMetadata } from 'typeorm';\n\nimport { classify } from '@angular-devkit/core/src/utils/strings';\nimport { CHATTER_MESSAGE_STATUS, CHATTER_MESSAGE_SUBTYPE, CHATTER_MESSAGE_TYPE } from 'src/constants/chatter-message.constants';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { PostChatterMessageDto } from 'src/dtos/post-chatter-message.dto';\nimport { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';\nimport { lowerFirst } from 'src/helpers/string.helper';\nimport { ChatterMessageDetailsRepository } from 'src/repository/chatter-message-details.repository';\nimport { ChatterMessageRepository } from 'src/repository/chatter-message.repository';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { CRUDService } from 'src/services/crud.service';\nimport { MediaStorageProviderType } from '../dtos/create-media-storage-provider-metadata.dto';\nimport { ChatterMessageDetails } from '../entities/chatter-message-details.entity';\nimport { ChatterMessage } from '../entities/chatter-message.entity';\nimport { getMediaStorageProvider } from './mediaStorageProviders';\nimport { RequestContextService } from './request-context.service';\nimport { Logger } from '@nestjs/common';\n\n@Injectable()\nexport class ChatterMessageService extends CRUDService<ChatterMessage> {\n private readonly _logger = new Logger(ChatterMessageService.name);\n\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ChatterMessage, 'default')\n readonly repo: ChatterMessageRepository,\n // @InjectRepository(ChatterMessageDetailsRepository, 'default')\n readonly chatterMessageDetailsRepo: ChatterMessageDetailsRepository,\n // @InjectRepository(FieldMetadata, 'default')\n // readonly fieldMetadataRepo: Repository<FieldMetadata>,\n readonly fieldMetadataRepo: FieldMetadataRepository,\n readonly moduleRef: ModuleRef,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n readonly requestContextService: RequestContextService,\n private readonly modelMetadataHelperService: ModelMetadataHelperService,\n ) {\n super(entityManager, repo, 'chatterMessage', 'solid-core', moduleRef);\n }\n\n private resolveMessageUserId(userId?: number | null): number | null {\n if (userId) {\n return userId;\n }\n\n return this.requestContextService.getActiveUser()?.sub ?? null;\n }\n\n private resolveMessageUser(userId?: number | null) {\n const resolvedUserId = this.resolveMessageUserId(userId);\n return resolvedUserId ? ({ id: resolvedUserId } as any) : null;\n }\n\n private stampMessageAuditFields(chatterMessage: ChatterMessage, userId?: number | null) {\n const resolvedUserId = this.resolveMessageUserId(userId);\n chatterMessage.user = resolvedUserId ? ({ id: resolvedUserId } as any) : null;\n chatterMessage.createdBy = resolvedUserId;\n chatterMessage.updatedBy = resolvedUserId;\n }\n\n async markCompleted(id: number) {\n const activeUser = this.requestContextService.getActiveUser();\n if (!activeUser) {\n throw new BadRequestException(ERROR_MESSAGES.FORBIDDEN);\n }\n\n const message = await this.repo.findOne({ where: { id } });\n if (!message) {\n throw new NotFoundException(`Entity [solid-core.chatterMessage] with id ${id} not found`);\n }\n\n message.status = CHATTER_MESSAGE_STATUS.COMPLETED;\n return this.repo.save(message);\n }\n\n async postMessage(postDto: PostChatterMessageDto, files: Express.Multer.File[] = []) {\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.CUSTOM;\n chatterMessage.messageSubType = postDto.messageSubType || CHATTER_MESSAGE_SUBTYPE.CUSTOM;\n chatterMessage.status = postDto.status ?? CHATTER_MESSAGE_STATUS.PENDING;\n chatterMessage.messageBody = postDto.messageBody;\n chatterMessage.coModelEntityId = postDto.coModelEntityId;\n chatterMessage.coModelName = postDto.coModelName;\n chatterMessage.modelUserKey = postDto.modelUserKey ?? null;\n\n const model = await this.modelMetadataRepo.findOne({\n where: { singularName: lowerFirst(postDto.coModelName) },\n relations: { userKeyField: true }\n });\n chatterMessage.modelDisplayName = model?.displayName ?? null;\n\n this.stampMessageAuditFields(chatterMessage);\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n if (files && files.length > 0) {\n const model = await this.modelMetadataService.findOneBySingularName('chatterMessage', {\n fields: {\n model: true,\n mediaStorageProvider: true,\n },\n module: true,\n });\n\n const mediaFields = model.fields.filter(field => field.type === 'mediaSingle' || field.type === 'mediaMultiple');\n\n for (const mediaField of mediaFields) {\n const media = files.filter(multerFile => multerFile.fieldname === mediaField.name);\n if (media.length > 0) {\n const storageProviderMetadata = mediaField.mediaStorageProvider;\n const storageProviderType = storageProviderMetadata.type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n await storageProvider.store(media, savedMessage, mediaField);\n }\n }\n }\n\n return savedMessage;\n }\n\n async postAuditMessageOnInsert(entity: any, modelName: string, messageQueue: boolean = false, userId?: number | null) {\n if (!entity) {\n return;\n }\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(modelName)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const auditFields = model.fields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_INSERT;\n chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;\n chatterMessage.coModelEntityId = entity.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model?.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `New ${model?.displayName} created`;\n this.stampMessageAuditFields(chatterMessage, userId);\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const field of auditFields) {\n const fieldValue = entity[field.name];\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.fieldType = field.type;\n messageDetail.oldValue = null;\n messageDetail.oldValueDisplay = null;\n messageDetail.newValue = this.formatFieldValue(field, fieldValue);\n messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, fieldValue);\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n }\n\n async postAuditMessageOnUpdate(entity: any, modelName: string, databaseEntity: any, updatedColumns: any[] = [], messageQueue: boolean = false, userId?: number | null) {\n if (!databaseEntity || !entity) {\n return;\n }\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(modelName)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const modelFields = await this.modelMetadataHelperService.loadFieldHierarchy(model.singularName)\n\n const auditFields = modelFields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n const updatedFieldNames = new Set(updatedColumns.map(col => col.propertyName));\n\n const allNonRelationFields = auditFields.filter(field => field.type !== 'relation');\n const allRelationFields = auditFields.filter(field => field.type === 'relation');\n\n let potentialNonRelationFields = [];\n\n if (updatedColumns.length > 0) {\n potentialNonRelationFields = allNonRelationFields.filter(field =>\n updatedFieldNames.has(field.name)\n );\n } else {\n potentialNonRelationFields = allNonRelationFields;\n }\n\n const potentialRelationFields = allRelationFields;\n\n const changedNonRelationFields = potentialNonRelationFields.filter(field => {\n const newValue = entity[field.name];\n const oldValue = databaseEntity[field.name];\n return this.hasValueChanged(newValue, oldValue);\n });\n\n const changedRelationFields = [];\n if (potentialRelationFields.length > 0) {\n const metadata = this.entityManager.connection.entityMetadatas.find(m => m.name === modelName);\n const populatedOldEntity = await this.populateRelationFields(databaseEntity, potentialRelationFields, metadata);\n\n for (const field of potentialRelationFields) {\n const newValue = entity[field.name];\n const oldValue = populatedOldEntity[field.name];\n\n if (this.hasRelationValueChanged(field, newValue, oldValue)) {\n changedRelationFields.push({\n field,\n newValue,\n oldValue\n });\n }\n }\n }\n\n const allChangedFields = [\n ...changedNonRelationFields.map(field => ({\n field,\n newValue: entity[field.name],\n oldValue: databaseEntity[field.name]\n })),\n ...changedRelationFields\n ];\n\n if (allChangedFields.length === 0) {\n return;\n }\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_UPDATE;\n chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;\n chatterMessage.coModelEntityId = entity?.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `${model?.displayName} updated`;\n this.stampMessageAuditFields(chatterMessage, userId);\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const { field, newValue, oldValue } of allChangedFields) {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.fieldType = field.type;\n messageDetail.oldValue = this.formatFieldValue(field, oldValue);\n messageDetail.newValue = this.formatFieldValue(field, newValue);\n messageDetail.oldValueDisplay = await this.formatFieldValueDisplay(field, oldValue);\n messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, newValue);\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n\n async postAuditMessageOnDelete(modelName: string, databaseEntity: any, messageQueue: boolean = false, userId?: number | null) {\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(modelName)\n },\n relations: {\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const modelFields = await this.modelMetadataHelperService.loadFieldHierarchy(model.singularName);\n\n const auditFields = modelFields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n // Populate relation fields so display values (e.g. names) are resolvable.\n // The related entities themselves still exist in the DB after a delete.\n const relationFields = auditFields.filter(field => field.type === 'relation');\n const entityMetadata = this.entityManager.connection.entityMetadatas.find(m => m.name === modelName);\n const populatedEntity = relationFields.length > 0 && entityMetadata\n ? await this.populateRelationFields(databaseEntity, relationFields, entityMetadata)\n : { ...databaseEntity };\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_DELETE;\n chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;\n chatterMessage.coModelEntityId = databaseEntity?.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model?.displayName;\n chatterMessage.modelUserKey = databaseEntity[model?.userKeyField?.name];\n chatterMessage.messageBody = `${model?.displayName} deleted`;\n\n this.stampMessageAuditFields(chatterMessage, userId);\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const field of auditFields) {\n const fieldValue = populatedEntity[field.name];\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.fieldType = field.type;\n messageDetail.oldValue = this.formatFieldValue(field, fieldValue);\n messageDetail.oldValueDisplay = await this.formatFieldValueDisplay(field, fieldValue);\n messageDetail.newValue = null;\n messageDetail.newValueDisplay = null;\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n }\n\n private formatFieldValue(field: any, value: any): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (field.type === 'selectionStatic' || field.type === 'selectionDynamic') {\n return `${value}`;\n }\n\n if (field.type === 'relation') {\n if (field.relationType === \"many-to-one\") {\n return value.id;\n }\n if (field.relationType === 'many-to-many') {\n return value.map(item => item.id).join(', ');\n }\n }\n\n if (value instanceof Date) {\n return serializeDate(value);\n }\n\n return value.toString();\n }\n\n private async formatFieldValueDisplay(field: any, value: any): Promise<string> {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (field.type === 'selectionStatic' || field.type === 'selectionDynamic') {\n return `${value}`;\n }\n\n if (['date', 'datetime', 'time'].includes(field.type)) {\n return null;\n }\n\n if (field.type === 'relation') {\n if (field.relationType === \"many-to-one\") {\n if (value.name) {\n return value.name;\n }\n\n try {\n const relatedModel = await this.modelMetadataRepo.findOne({\n where: { singularName: field.relationCoModelSingularName || field.relation },\n relations: { userKeyField: true }\n });\n\n if (relatedModel && relatedModel.userKeyField) {\n const userKeyFieldName = relatedModel.userKeyField.name;\n return value[userKeyFieldName] ? value[userKeyFieldName].toString() : '';\n }\n\n if (value.id) {\n return value.id.toString();\n }\n } catch (error: any) {\n console.error('Error fetching related model metadata:', error);\n return value.id ? value.id.toString() : '';\n }\n }\n\n if (field.relationType === 'many-to-many') {\n return value.map(item => item.name).join(', ');\n }\n }\n\n return value.toString();\n }\n\n private hasValueChanged(newValue: any, oldValue: any): boolean {\n if (newValue === oldValue) {\n return false;\n }\n\n if (newValue === null && oldValue === null) {\n return false;\n }\n\n if (newValue === undefined && oldValue === undefined) {\n return false;\n }\n\n if (newValue && oldValue && typeof newValue === 'object' && typeof oldValue === 'object') {\n if (newValue.id !== undefined && oldValue.id !== undefined) {\n return newValue.id !== oldValue.id;\n }\n\n if (Array.isArray(newValue) && Array.isArray(oldValue)) {\n if (newValue.length !== oldValue.length) {\n return true;\n }\n const newIds = newValue.map(item => item.id || item).sort();\n const oldIds = oldValue.map(item => item.id || item).sort();\n return JSON.stringify(newIds) !== JSON.stringify(oldIds);\n }\n }\n\n if (Array.isArray(newValue) && Array.isArray(oldValue)) {\n return JSON.stringify(newValue) !== JSON.stringify(oldValue);\n }\n\n return true;\n }\n\n private hasRelationValueChanged(field: any, newValue: any, oldValue: any): boolean {\n if (newValue === oldValue) {\n return false;\n }\n\n if ((newValue === null || newValue === undefined) && (oldValue === null || oldValue === undefined)) {\n return false;\n }\n\n if (field.relationType === 'many-to-one') {\n const newId = this.extractRelationId(newValue);\n const oldId = this.extractRelationId(oldValue);\n return newId !== oldId;\n }\n\n if (field.relationType === 'many-to-many') {\n const newIds = this.extractRelationIds(newValue);\n const oldIds = this.extractRelationIds(oldValue);\n\n if (newIds.length !== oldIds.length) {\n return true;\n }\n\n newIds.sort();\n oldIds.sort();\n\n return JSON.stringify(newIds) !== JSON.stringify(oldIds);\n }\n\n return this.hasValueChanged(newValue, oldValue);\n }\n\n private extractRelationId(value: any): any {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'object' && value.id !== undefined) {\n return value.id;\n }\n\n return null;\n }\n\n private extractRelationIds(value: any): any[] {\n if (!Array.isArray(value)) {\n const id = this.extractRelationId(value);\n return id !== null ? [id] : [];\n }\n\n return value.map(item => this.extractRelationId(item)).filter(id => id !== null);\n }\n\n private async populateRelationFields(databaseEntity: any, relationFields: any[], metadata: EntityMetadata): Promise<any> {\n const populatedEntity = { ...databaseEntity };\n\n for (const field of relationFields) {\n const relationValue = databaseEntity[field.name];\n\n if (relationValue === null || relationValue === undefined) {\n populatedEntity[field.name] = relationValue;\n continue;\n }\n\n const relationMetadata = metadata.relations.find(rel => rel.propertyName === field.name);\n if (!relationMetadata) {\n populatedEntity[field.name] = relationValue;\n continue;\n }\n\n const targetEntity = relationMetadata.inverseEntityMetadata || relationMetadata.type;\n\n if (field.relationType === 'many-to-one') {\n const relationId = this.extractRelationId(relationValue);\n if (relationId) {\n const relatedEntity = await this.entityManager.findOne(targetEntity as any, {\n where: { id: relationId }\n });\n populatedEntity[field.name] = relatedEntity;\n } else {\n populatedEntity[field.name] = relationValue;\n }\n } else if (field.relationType === 'many-to-many' || field.relationType === 'manyToMany') {\n const relationIds = this.extractRelationIds(relationValue);\n if (relationIds.length > 0) {\n const relatedEntities = await this.entityManager.findByIds(targetEntity as any, relationIds);\n populatedEntity[field.name] = relatedEntities;\n } else {\n populatedEntity[field.name] = relationValue;\n }\n } else {\n populatedEntity[field.name] = relationValue;\n }\n }\n\n return populatedEntity;\n }\n\n private logHeapUsed(label: string) {\n const mb = () => Math.round(process.memoryUsage().heapUsed / 1024 / 1024);\n this._logger.log(`heapUsedMB(${label}): ${mb()}`);\n }\n\n // [2026-02-05T23:31:21.025Z] INFO: [200 OK] \n // GET /api/chatter-message/getChatterMessages/216/mswipeBoomboxBulkUpload?populateMedia[0]=messageAttachments&populate[0]=user&populate[1]=chatterMessageDetails&limit=25 22747ms\n async getChatterMessages(entityId: number, entityName: string, query: any) {\n const { limit = 25, offset = 0, populate = [], populateMedia = [], filters } = query;\n this.logHeapUsed('getChatterMessages-start');\n\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: entityName\n },\n });\n this.logHeapUsed('getChatterMessages-modelLoaded');\n const oneToManyFields = await this.fieldMetadataRepo.find({\n where: {\n model: { id: model.id },\n type: 'relation',\n relationType: 'one-to-many'\n }\n });\n this.logHeapUsed('getChatterMessages-oneToManyFieldsLoaded');\n\n const relatedEntitiesMap = new Map<string, number[]>();\n\n for (const field of oneToManyFields) {\n if (field.enableAuditTracking === false) {\n this._logger.log(`Skipping field ${field.name} for chatter message retrieval because audit tracking is disabled`);\n continue\n }\n const coModelName = field.relationCoModelSingularName;\n const coModelFieldName = field.relationCoModelFieldName;\n\n const coModel = await this.modelMetadataRepo.findOne({\n where: { singularName: coModelName }\n });\n\n if (coModel) {\n //const relatedEntityRepository = this.entityManager.getRepository(classify(coModelName));\n const dsName = coModel.dataSource || 'default';\n const em = dsName === 'default' ? this.entityManager : this.moduleRef.get(`${dsName}EntityManager`, { strict: false });\n\n const relatedEntityRepository = em.getRepository(classify(coModelName));\n\n const relatedEntities = await relatedEntityRepository.find({\n select: {\n id: true,\n },\n where: { [coModelFieldName]: { id: entityId } },\n take: 5,\n });\n\n const relatedIds = relatedEntities.map((entity: any) => entity.id);\n relatedEntitiesMap.set(field.name, relatedIds);\n }\n }\n this.logHeapUsed('getChatterMessages-relatedEntitiesLoaded');\n\n const qb = await this.repo.createSecurityRuleAwareQueryBuilder('entity');\n this.logHeapUsed('getChatterMessages-queryBuilderReady');\n\n const orConditions: string[] = [];\n const parameters: any = {};\n\n orConditions.push('(entity.coModelName = :entityName AND entity.coModelEntityId = :entityId)');\n parameters.entityName = entityName;\n parameters.entityId = entityId;\n\n let paramIndex = 0;\n for (const [fieldName, relatedIds] of relatedEntitiesMap.entries()) {\n if (relatedIds.length > 0) {\n const field = oneToManyFields.find(f => f.name === fieldName);\n if (field) {\n const coModelName = field.relationCoModelSingularName;\n const idsParamName = `relatedIds${paramIndex}`;\n orConditions.push(`(entity.coModelName = :coModelName${paramIndex} AND entity.coModelEntityId IN (:...${idsParamName}))`);\n parameters[`coModelName${paramIndex}`] = coModelName;\n parameters[idsParamName] = relatedIds;\n paramIndex++;\n }\n }\n }\n\n qb.where(new Brackets(qb => {\n qb.where(orConditions.join(' OR '), parameters);\n }));\n\n const relations = ['chatterMessageDetails', 'user'];\n if (populate && populate.length > 0) {\n const normalizedPopulate = this.crudHelperService.normalize(populate);\n relations.push(...normalizedPopulate.filter(rel => !relations.includes(rel)));\n }\n\n relations.forEach(relation => {\n qb.leftJoinAndSelect(`entity.${relation}`, relation);\n });\n\n if (filters) {\n qb.andWhere(new Brackets(whereQb => {\n this.crudHelperService.applyFilters(whereQb, filters, 'entity', qb);\n }));\n }\n\n qb.orderBy('entity.createdAt', 'DESC');\n\n qb.skip(offset).take(limit);\n\n const [entities, count] = await qb.getManyAndCount();\n this.logHeapUsed('getChatterMessages-entitiesLoaded');\n\n // Convert date strings in message details to ISO format for consistent handling on the frontend\n const DATE_FIELD_TYPES = ['date', 'datetime', 'time'];\n for (const entity of entities) {\n for (const detail of entity.chatterMessageDetails ?? []) {\n if (!detail.fieldType || !DATE_FIELD_TYPES.includes(detail.fieldType)) continue;\n if (detail.oldValue) {\n const d = LocalDateTimeTransformer.from(detail.oldValue);\n if (d) detail.oldValue = d.toISOString();\n }\n if (detail.newValue) {\n const d = LocalDateTimeTransformer.from(detail.newValue);\n if (d) detail.newValue = d.toISOString();\n }\n }\n }\n\n if (populateMedia && populateMedia.length > 0) {\n const normalizedPopulateMedia = this.crudHelperService.normalize(populateMedia);\n this.logHeapUsed('getChatterMessages-beforePopulateMedia');\n await this['handlePopulateMedia'](normalizedPopulateMedia, entities);\n this.logHeapUsed('getChatterMessages-afterPopulateMedia');\n }\n\n const currentPage = Math.floor(offset / limit) + 1;\n const totalPages = Math.ceil(count / limit);\n const nextPage = currentPage < totalPages ? currentPage + 1 : null;\n const prevPage = currentPage > 1 ? currentPage - 1 : null;\n\n return {\n meta: {\n totalRecords: count,\n currentPage: currentPage,\n nextPage: nextPage,\n prevPage: prevPage,\n totalPages: totalPages,\n perPage: +limit,\n },\n records: entities\n };\n }\n}\n"]}
1
+ {"version":3,"file":"chatter-message.service.js","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { LocalDateTimeTransformer, serializeDate } from 'src/transformers/typeorm/local-date-time-transformer';\nimport { BadRequestException, ForbiddenException, forwardRef, Inject, Injectable, NotFoundException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { Brackets, EntityManager, EntityMetadata, In } from 'typeorm';\n\nimport { classify } from '@angular-devkit/core/src/utils/strings';\nimport { CHATTER_MESSAGE_STATUS, CHATTER_MESSAGE_SUBTYPE, CHATTER_MESSAGE_TYPE } from 'src/constants/chatter-message.constants';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { PostChatterMessageDto } from 'src/dtos/post-chatter-message.dto';\nimport { UpdateChatterNoteMessageDto } from 'src/dtos/update-chatter-note-message.dto';\nimport { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';\nimport { lowerFirst } from 'src/helpers/string.helper';\nimport { ChatterMessageDetailsRepository } from 'src/repository/chatter-message-details.repository';\nimport { ChatterMessageRepository } from 'src/repository/chatter-message.repository';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { MediaRepository } from 'src/repository/media.repository';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { CRUDService } from 'src/services/crud.service';\nimport { MediaStorageProviderType } from '../dtos/create-media-storage-provider-metadata.dto';\nimport { ChatterMessageDetails } from '../entities/chatter-message-details.entity';\nimport { ChatterMessage } from '../entities/chatter-message.entity';\nimport { getMediaStorageProvider } from './mediaStorageProviders';\nimport { RequestContextService } from './request-context.service';\nimport { Logger } from '@nestjs/common';\n\n@Injectable()\nexport class ChatterMessageService extends CRUDService<ChatterMessage> {\n private readonly _logger = new Logger(ChatterMessageService.name);\n\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ChatterMessage, 'default')\n readonly repo: ChatterMessageRepository,\n // @InjectRepository(ChatterMessageDetailsRepository, 'default')\n readonly chatterMessageDetailsRepo: ChatterMessageDetailsRepository,\n readonly mediaRepository: MediaRepository,\n // @InjectRepository(FieldMetadata, 'default')\n // readonly fieldMetadataRepo: Repository<FieldMetadata>,\n readonly fieldMetadataRepo: FieldMetadataRepository,\n readonly moduleRef: ModuleRef,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n readonly requestContextService: RequestContextService,\n private readonly modelMetadataHelperService: ModelMetadataHelperService,\n ) {\n super(entityManager, repo, 'chatterMessage', 'solid-core', moduleRef);\n }\n\n private resolveMessageUserId(userId?: number | null): number | null {\n if (userId) {\n return userId;\n }\n\n return this.requestContextService.getActiveUser()?.sub ?? null;\n }\n\n private resolveMessageUser(userId?: number | null) {\n const resolvedUserId = this.resolveMessageUserId(userId);\n return resolvedUserId ? ({ id: resolvedUserId } as any) : null;\n }\n\n private stampMessageAuditFields(chatterMessage: ChatterMessage, userId?: number | null) {\n const resolvedUserId = this.resolveMessageUserId(userId);\n chatterMessage.user = resolvedUserId ? ({ id: resolvedUserId } as any) : null;\n chatterMessage.createdBy = resolvedUserId;\n chatterMessage.updatedBy = resolvedUserId;\n }\n\n private isEditableCustomNoteMessage(message: ChatterMessage): boolean {\n if (message.messageType !== CHATTER_MESSAGE_TYPE.CUSTOM) {\n return false;\n }\n return [CHATTER_MESSAGE_SUBTYPE.CUSTOM, CHATTER_MESSAGE_SUBTYPE.NOTE].includes(message.messageSubType as any);\n }\n\n private parseAttachmentIds(value?: string): number[] {\n if (!value || typeof value !== 'string') return [];\n return value\n .split(',')\n .map(v => Number(v.trim()))\n .filter(v => Number.isInteger(v) && v > 0);\n }\n\n async markCompleted(id: number) {\n const activeUser = this.requestContextService.getActiveUser();\n if (!activeUser) {\n throw new BadRequestException(ERROR_MESSAGES.FORBIDDEN);\n }\n\n const message = await this.repo.findOne({ where: { id } });\n if (!message) {\n throw new NotFoundException(`Entity [solid-core.chatterMessage] with id ${id} not found`);\n }\n\n message.status = CHATTER_MESSAGE_STATUS.COMPLETED;\n return this.repo.save(message);\n }\n\n async updateCustomNoteMessage(id: number, updateDto: UpdateChatterNoteMessageDto, files: Express.Multer.File[] = []) {\n const activeUser = this.requestContextService.getActiveUser();\n if (!activeUser) {\n throw new ForbiddenException(ERROR_MESSAGES.FORBIDDEN);\n }\n\n const message = await this.repo.findOne({ where: { id }, relations: { user: true } });\n if (!message) {\n throw new NotFoundException(`Entity [solid-core.chatterMessage] with id ${id} not found`);\n }\n\n if (!this.isEditableCustomNoteMessage(message)) {\n throw new BadRequestException('Only custom note messages can be edited.');\n }\n\n if (!message.user?.id || message.user.id !== activeUser.sub) {\n throw new ForbiddenException('You can only edit your own custom note messages.');\n }\n\n const removeAttachmentIds = this.parseAttachmentIds(updateDto?.removeAttachmentIds);\n const hasMessageBody = typeof updateDto?.messageBody === 'string';\n const trimmedMessageBody = (updateDto?.messageBody ?? '').trim();\n const hasNewFiles = Array.isArray(files) && files.length > 0;\n\n if (!hasMessageBody && removeAttachmentIds.length === 0 && !hasNewFiles) {\n throw new BadRequestException('No note changes submitted.');\n }\n\n if (hasMessageBody && trimmedMessageBody.length === 0) {\n throw new BadRequestException('Message body cannot be empty.');\n }\n\n if (hasMessageBody) {\n message.messageBody = trimmedMessageBody;\n }\n message.updatedBy = activeUser.sub;\n // Ensure updatedAt changes even for attachment-only edits.\n message.updatedAt = new Date();\n const savedMessage = await this.repo.save(message);\n\n if (removeAttachmentIds.length > 0 || hasNewFiles) {\n const model = await this.modelMetadataService.findOneBySingularName('chatterMessage', {\n fields: {\n model: true,\n mediaStorageProvider: true,\n },\n module: true,\n });\n\n const mediaFields = model.fields.filter(field => field.type === 'mediaSingle' || field.type === 'mediaMultiple');\n const attachmentFieldIds = mediaFields.map(field => field.id);\n\n if (removeAttachmentIds.length > 0 && attachmentFieldIds.length > 0) {\n const mediaToRemove = await this.mediaRepository.find({\n where: {\n id: In(removeAttachmentIds),\n entityId: savedMessage.id,\n modelMetadata: { id: model.id },\n fieldMetadata: { id: In(attachmentFieldIds) },\n },\n relations: {\n mediaStorageProviderMetadata: true,\n fieldMetadata: true,\n },\n });\n\n for (const media of mediaToRemove) {\n const storageType = media.mediaStorageProviderMetadata?.type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageType);\n await storageProvider.deleteByMediaRecord(media);\n }\n\n if (mediaToRemove.length > 0) {\n await this.mediaRepository.remove(mediaToRemove);\n }\n }\n\n for (const mediaField of mediaFields) {\n const storageProviderMetadata = mediaField.mediaStorageProvider;\n const storageProviderType = storageProviderMetadata.type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n\n const media = files.filter(multerFile => multerFile.fieldname === mediaField.name);\n if (media.length > 0) {\n await storageProvider.store(media, savedMessage, mediaField);\n }\n }\n }\n\n return savedMessage;\n }\n\n async postMessage(postDto: PostChatterMessageDto, files: Express.Multer.File[] = []) {\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.CUSTOM;\n chatterMessage.messageSubType = postDto.messageSubType || CHATTER_MESSAGE_SUBTYPE.CUSTOM;\n chatterMessage.status = postDto.status ?? CHATTER_MESSAGE_STATUS.PENDING;\n chatterMessage.messageBody = postDto.messageBody;\n chatterMessage.coModelEntityId = postDto.coModelEntityId;\n chatterMessage.coModelName = postDto.coModelName;\n chatterMessage.modelUserKey = postDto.modelUserKey ?? null;\n\n const model = await this.modelMetadataRepo.findOne({\n where: { singularName: lowerFirst(postDto.coModelName) },\n relations: { userKeyField: true }\n });\n chatterMessage.modelDisplayName = model?.displayName ?? null;\n\n this.stampMessageAuditFields(chatterMessage);\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n if (files && files.length > 0) {\n const model = await this.modelMetadataService.findOneBySingularName('chatterMessage', {\n fields: {\n model: true,\n mediaStorageProvider: true,\n },\n module: true,\n });\n\n const mediaFields = model.fields.filter(field => field.type === 'mediaSingle' || field.type === 'mediaMultiple');\n\n for (const mediaField of mediaFields) {\n const media = files.filter(multerFile => multerFile.fieldname === mediaField.name);\n if (media.length > 0) {\n const storageProviderMetadata = mediaField.mediaStorageProvider;\n const storageProviderType = storageProviderMetadata.type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n await storageProvider.store(media, savedMessage, mediaField);\n }\n }\n }\n\n return savedMessage;\n }\n\n async postAuditMessageOnInsert(entity: any, modelName: string, messageQueue: boolean = false, userId?: number | null) {\n if (!entity) {\n return;\n }\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(modelName)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const auditFields = model.fields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_INSERT;\n chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;\n chatterMessage.coModelEntityId = entity.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model?.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `New ${model?.displayName} created`;\n this.stampMessageAuditFields(chatterMessage, userId);\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const field of auditFields) {\n const fieldValue = entity[field.name];\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.fieldType = field.type;\n messageDetail.oldValue = null;\n messageDetail.oldValueDisplay = null;\n messageDetail.newValue = this.formatFieldValue(field, fieldValue);\n messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, fieldValue);\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n }\n\n async postAuditMessageOnUpdate(entity: any, modelName: string, databaseEntity: any, updatedColumns: any[] = [], messageQueue: boolean = false, userId?: number | null) {\n if (!databaseEntity || !entity) {\n return;\n }\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(modelName)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const modelFields = await this.modelMetadataHelperService.loadFieldHierarchy(model.singularName)\n\n const auditFields = modelFields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n const updatedFieldNames = new Set(updatedColumns.map(col => col.propertyName));\n\n const allNonRelationFields = auditFields.filter(field => field.type !== 'relation');\n const allRelationFields = auditFields.filter(field => field.type === 'relation');\n\n let potentialNonRelationFields = [];\n\n if (updatedColumns.length > 0) {\n potentialNonRelationFields = allNonRelationFields.filter(field =>\n updatedFieldNames.has(field.name)\n );\n } else {\n potentialNonRelationFields = allNonRelationFields;\n }\n\n const potentialRelationFields = allRelationFields;\n\n const changedNonRelationFields = potentialNonRelationFields.filter(field => {\n const newValue = entity[field.name];\n const oldValue = databaseEntity[field.name];\n return this.hasValueChanged(newValue, oldValue);\n });\n\n const changedRelationFields = [];\n if (potentialRelationFields.length > 0) {\n const metadata = this.entityManager.connection.entityMetadatas.find(m => m.name === modelName);\n const populatedOldEntity = await this.populateRelationFields(databaseEntity, potentialRelationFields, metadata);\n\n for (const field of potentialRelationFields) {\n const newValue = entity[field.name];\n const oldValue = populatedOldEntity[field.name];\n\n if (this.hasRelationValueChanged(field, newValue, oldValue)) {\n changedRelationFields.push({\n field,\n newValue,\n oldValue\n });\n }\n }\n }\n\n const allChangedFields = [\n ...changedNonRelationFields.map(field => ({\n field,\n newValue: entity[field.name],\n oldValue: databaseEntity[field.name]\n })),\n ...changedRelationFields\n ];\n\n if (allChangedFields.length === 0) {\n return;\n }\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_UPDATE;\n chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;\n chatterMessage.coModelEntityId = entity?.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `${model?.displayName} updated`;\n this.stampMessageAuditFields(chatterMessage, userId);\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const { field, newValue, oldValue } of allChangedFields) {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.fieldType = field.type;\n messageDetail.oldValue = this.formatFieldValue(field, oldValue);\n messageDetail.newValue = this.formatFieldValue(field, newValue);\n messageDetail.oldValueDisplay = await this.formatFieldValueDisplay(field, oldValue);\n messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, newValue);\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n\n async postAuditMessageOnDelete(modelName: string, databaseEntity: any, messageQueue: boolean = false, userId?: number | null) {\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(modelName)\n },\n relations: {\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const modelFields = await this.modelMetadataHelperService.loadFieldHierarchy(model.singularName);\n\n const auditFields = modelFields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n // Populate relation fields so display values (e.g. names) are resolvable.\n // The related entities themselves still exist in the DB after a delete.\n const relationFields = auditFields.filter(field => field.type === 'relation');\n const entityMetadata = this.entityManager.connection.entityMetadatas.find(m => m.name === modelName);\n const populatedEntity = relationFields.length > 0 && entityMetadata\n ? await this.populateRelationFields(databaseEntity, relationFields, entityMetadata)\n : { ...databaseEntity };\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_DELETE;\n chatterMessage.status = CHATTER_MESSAGE_STATUS.PENDING;\n chatterMessage.coModelEntityId = databaseEntity?.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model?.displayName;\n chatterMessage.modelUserKey = databaseEntity[model?.userKeyField?.name];\n chatterMessage.messageBody = `${model?.displayName} deleted`;\n\n this.stampMessageAuditFields(chatterMessage, userId);\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const field of auditFields) {\n const fieldValue = populatedEntity[field.name];\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.fieldType = field.type;\n messageDetail.oldValue = this.formatFieldValue(field, fieldValue);\n messageDetail.oldValueDisplay = await this.formatFieldValueDisplay(field, fieldValue);\n messageDetail.newValue = null;\n messageDetail.newValueDisplay = null;\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n }\n\n private formatFieldValue(field: any, value: any): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (field.type === 'selectionStatic' || field.type === 'selectionDynamic') {\n return `${value}`;\n }\n\n if (field.type === 'relation') {\n if (field.relationType === \"many-to-one\") {\n return value.id;\n }\n if (field.relationType === 'many-to-many') {\n return value.map(item => item.id).join(', ');\n }\n }\n\n if (value instanceof Date) {\n return serializeDate(value);\n }\n\n return value.toString();\n }\n\n private async formatFieldValueDisplay(field: any, value: any): Promise<string> {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (field.type === 'selectionStatic' || field.type === 'selectionDynamic') {\n return `${value}`;\n }\n\n if (['date', 'datetime', 'time'].includes(field.type)) {\n return null;\n }\n\n if (field.type === 'relation') {\n if (field.relationType === \"many-to-one\") {\n if (value.name) {\n return value.name;\n }\n\n try {\n const relatedModel = await this.modelMetadataRepo.findOne({\n where: { singularName: field.relationCoModelSingularName || field.relation },\n relations: { userKeyField: true }\n });\n\n if (relatedModel && relatedModel.userKeyField) {\n const userKeyFieldName = relatedModel.userKeyField.name;\n return value[userKeyFieldName] ? value[userKeyFieldName].toString() : '';\n }\n\n if (value.id) {\n return value.id.toString();\n }\n } catch (error: any) {\n console.error('Error fetching related model metadata:', error);\n return value.id ? value.id.toString() : '';\n }\n }\n\n if (field.relationType === 'many-to-many') {\n return value.map(item => item.name).join(', ');\n }\n }\n\n return value.toString();\n }\n\n private hasValueChanged(newValue: any, oldValue: any): boolean {\n if (newValue === oldValue) {\n return false;\n }\n\n if (newValue === null && oldValue === null) {\n return false;\n }\n\n if (newValue === undefined && oldValue === undefined) {\n return false;\n }\n\n if (newValue && oldValue && typeof newValue === 'object' && typeof oldValue === 'object') {\n if (newValue.id !== undefined && oldValue.id !== undefined) {\n return newValue.id !== oldValue.id;\n }\n\n if (Array.isArray(newValue) && Array.isArray(oldValue)) {\n if (newValue.length !== oldValue.length) {\n return true;\n }\n const newIds = newValue.map(item => item.id || item).sort();\n const oldIds = oldValue.map(item => item.id || item).sort();\n return JSON.stringify(newIds) !== JSON.stringify(oldIds);\n }\n }\n\n if (Array.isArray(newValue) && Array.isArray(oldValue)) {\n return JSON.stringify(newValue) !== JSON.stringify(oldValue);\n }\n\n return true;\n }\n\n private hasRelationValueChanged(field: any, newValue: any, oldValue: any): boolean {\n if (newValue === oldValue) {\n return false;\n }\n\n if ((newValue === null || newValue === undefined) && (oldValue === null || oldValue === undefined)) {\n return false;\n }\n\n if (field.relationType === 'many-to-one') {\n const newId = this.extractRelationId(newValue);\n const oldId = this.extractRelationId(oldValue);\n return newId !== oldId;\n }\n\n if (field.relationType === 'many-to-many') {\n const newIds = this.extractRelationIds(newValue);\n const oldIds = this.extractRelationIds(oldValue);\n\n if (newIds.length !== oldIds.length) {\n return true;\n }\n\n newIds.sort();\n oldIds.sort();\n\n return JSON.stringify(newIds) !== JSON.stringify(oldIds);\n }\n\n return this.hasValueChanged(newValue, oldValue);\n }\n\n private extractRelationId(value: any): any {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'object' && value.id !== undefined) {\n return value.id;\n }\n\n return null;\n }\n\n private extractRelationIds(value: any): any[] {\n if (!Array.isArray(value)) {\n const id = this.extractRelationId(value);\n return id !== null ? [id] : [];\n }\n\n return value.map(item => this.extractRelationId(item)).filter(id => id !== null);\n }\n\n private async populateRelationFields(databaseEntity: any, relationFields: any[], metadata: EntityMetadata): Promise<any> {\n const populatedEntity = { ...databaseEntity };\n\n for (const field of relationFields) {\n const relationValue = databaseEntity[field.name];\n\n if (relationValue === null || relationValue === undefined) {\n populatedEntity[field.name] = relationValue;\n continue;\n }\n\n const relationMetadata = metadata.relations.find(rel => rel.propertyName === field.name);\n if (!relationMetadata) {\n populatedEntity[field.name] = relationValue;\n continue;\n }\n\n const targetEntity = relationMetadata.inverseEntityMetadata || relationMetadata.type;\n\n if (field.relationType === 'many-to-one') {\n const relationId = this.extractRelationId(relationValue);\n if (relationId) {\n const relatedEntity = await this.entityManager.findOne(targetEntity as any, {\n where: { id: relationId }\n });\n populatedEntity[field.name] = relatedEntity;\n } else {\n populatedEntity[field.name] = relationValue;\n }\n } else if (field.relationType === 'many-to-many' || field.relationType === 'manyToMany') {\n const relationIds = this.extractRelationIds(relationValue);\n if (relationIds.length > 0) {\n const relatedEntities = await this.entityManager.findByIds(targetEntity as any, relationIds);\n populatedEntity[field.name] = relatedEntities;\n } else {\n populatedEntity[field.name] = relationValue;\n }\n } else {\n populatedEntity[field.name] = relationValue;\n }\n }\n\n return populatedEntity;\n }\n\n private logHeapUsed(label: string) {\n const mb = () => Math.round(process.memoryUsage().heapUsed / 1024 / 1024);\n this._logger.log(`heapUsedMB(${label}): ${mb()}`);\n }\n\n // [2026-02-05T23:31:21.025Z] INFO: [200 OK] \n // GET /api/chatter-message/getChatterMessages/216/mswipeBoomboxBulkUpload?populateMedia[0]=messageAttachments&populate[0]=user&populate[1]=chatterMessageDetails&limit=25 22747ms\n async getChatterMessages(entityId: number, entityName: string, query: any) {\n const { limit = 25, offset = 0, populate = [], populateMedia = [], filters } = query;\n this.logHeapUsed('getChatterMessages-start');\n\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: entityName\n },\n });\n this.logHeapUsed('getChatterMessages-modelLoaded');\n const oneToManyFields = await this.fieldMetadataRepo.find({\n where: {\n model: { id: model.id },\n type: 'relation',\n relationType: 'one-to-many'\n }\n });\n this.logHeapUsed('getChatterMessages-oneToManyFieldsLoaded');\n\n const relatedEntitiesMap = new Map<string, number[]>();\n\n for (const field of oneToManyFields) {\n if (field.enableAuditTracking === false) {\n this._logger.log(`Skipping field ${field.name} for chatter message retrieval because audit tracking is disabled`);\n continue\n }\n const coModelName = field.relationCoModelSingularName;\n const coModelFieldName = field.relationCoModelFieldName;\n\n const coModel = await this.modelMetadataRepo.findOne({\n where: { singularName: coModelName }\n });\n\n if (coModel) {\n //const relatedEntityRepository = this.entityManager.getRepository(classify(coModelName));\n const dsName = coModel.dataSource || 'default';\n const em = dsName === 'default' ? this.entityManager : this.moduleRef.get(`${dsName}EntityManager`, { strict: false });\n\n const relatedEntityRepository = em.getRepository(classify(coModelName));\n\n const relatedEntities = await relatedEntityRepository.find({\n select: {\n id: true,\n },\n where: { [coModelFieldName]: { id: entityId } },\n take: 5,\n });\n\n const relatedIds = relatedEntities.map((entity: any) => entity.id);\n relatedEntitiesMap.set(field.name, relatedIds);\n }\n }\n this.logHeapUsed('getChatterMessages-relatedEntitiesLoaded');\n\n const qb = await this.repo.createSecurityRuleAwareQueryBuilder('entity');\n this.logHeapUsed('getChatterMessages-queryBuilderReady');\n\n const orConditions: string[] = [];\n const parameters: any = {};\n\n orConditions.push('(entity.coModelName = :entityName AND entity.coModelEntityId = :entityId)');\n parameters.entityName = entityName;\n parameters.entityId = entityId;\n\n let paramIndex = 0;\n for (const [fieldName, relatedIds] of relatedEntitiesMap.entries()) {\n if (relatedIds.length > 0) {\n const field = oneToManyFields.find(f => f.name === fieldName);\n if (field) {\n const coModelName = field.relationCoModelSingularName;\n const idsParamName = `relatedIds${paramIndex}`;\n orConditions.push(`(entity.coModelName = :coModelName${paramIndex} AND entity.coModelEntityId IN (:...${idsParamName}))`);\n parameters[`coModelName${paramIndex}`] = coModelName;\n parameters[idsParamName] = relatedIds;\n paramIndex++;\n }\n }\n }\n\n qb.where(new Brackets(qb => {\n qb.where(orConditions.join(' OR '), parameters);\n }));\n\n const relations = ['chatterMessageDetails', 'user'];\n if (populate && populate.length > 0) {\n const normalizedPopulate = this.crudHelperService.normalize(populate);\n relations.push(...normalizedPopulate.filter(rel => !relations.includes(rel)));\n }\n\n relations.forEach(relation => {\n qb.leftJoinAndSelect(`entity.${relation}`, relation);\n });\n\n if (filters) {\n qb.andWhere(new Brackets(whereQb => {\n this.crudHelperService.applyFilters(whereQb, filters, 'entity', qb);\n }));\n }\n\n qb.orderBy('entity.createdAt', 'DESC');\n\n qb.skip(offset).take(limit);\n\n const [entities, count] = await qb.getManyAndCount();\n this.logHeapUsed('getChatterMessages-entitiesLoaded');\n\n // Convert date strings in message details to ISO format for consistent handling on the frontend\n const DATE_FIELD_TYPES = ['date', 'datetime', 'time'];\n for (const entity of entities) {\n for (const detail of entity.chatterMessageDetails ?? []) {\n if (!detail.fieldType || !DATE_FIELD_TYPES.includes(detail.fieldType)) continue;\n if (detail.oldValue) {\n const d = LocalDateTimeTransformer.from(detail.oldValue);\n if (d) detail.oldValue = d.toISOString();\n }\n if (detail.newValue) {\n const d = LocalDateTimeTransformer.from(detail.newValue);\n if (d) detail.newValue = d.toISOString();\n }\n }\n }\n\n if (populateMedia && populateMedia.length > 0) {\n const normalizedPopulateMedia = this.crudHelperService.normalize(populateMedia);\n this.logHeapUsed('getChatterMessages-beforePopulateMedia');\n await this['handlePopulateMedia'](normalizedPopulateMedia, entities);\n this.logHeapUsed('getChatterMessages-afterPopulateMedia');\n }\n\n const currentPage = Math.floor(offset / limit) + 1;\n const totalPages = Math.ceil(count / limit);\n const nextPage = currentPage < totalPages ? currentPage + 1 : null;\n const prevPage = currentPage > 1 ? currentPage - 1 : null;\n\n return {\n meta: {\n totalRecords: count,\n currentPage: currentPage,\n nextPage: nextPage,\n prevPage: prevPage,\n totalPages: totalPages,\n perPage: +limit,\n },\n records: entities\n };\n }\n}\n"]}
@@ -68,5 +68,23 @@ export declare class CrudHelperService {
68
68
  hasDeletePermissionOnModel: (activeUser: ActiveUserData, modelName: string) => boolean;
69
69
  hasCreatePermissionOnModel: (activeUser: ActiveUserData, modelName: string) => boolean;
70
70
  hasRecoverPermissionOnModel: (activeUser: ActiveUserData, modelName: string) => boolean;
71
+ pagedResponse<T>(offset: number | undefined, limit: number | undefined, count: number, entities: T[]): {
72
+ meta: {
73
+ totalRecords: number;
74
+ currentPage: number;
75
+ nextPage: number;
76
+ prevPage: number;
77
+ totalPages: number;
78
+ perPage: number;
79
+ };
80
+ records: T[];
81
+ };
82
+ executeGroupPipeline<T>(filterQb: SelectQueryBuilder<T>, basicFilterDto: BasicFilterDto, alias: string, createQbFn: () => Promise<SelectQueryBuilder<T>>, postProcessEntities?: (entities: T[]) => Promise<void>): Promise<{
83
+ meta: {
84
+ totalRecords: number;
85
+ };
86
+ groupMeta: any[];
87
+ groupRecords: any[];
88
+ }>;
71
89
  }
72
90
  //# sourceMappingURL=crud-helper.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crud-helper.service.d.ts","sourceRoot":"","sources":["../../src/services/crud-helper.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crud-helper.service.d.ts","sourceRoot":"","sources":["../../src/services/crud-helper.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAK3E,oBAAY,gBAAgB;IACxB,GAAG,SAAS;IACZ,EAAE,QAAQ;CACb;AAED,oBAAY,YAAY;IACpB,UAAU,cAAc;IACxB,UAAU,cAAc;CAC3B;AAED,qBAAa,iBAAiB;;IAG1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAE7D,OAAO,CAAC,YAAY;IAqBpB,YAAY,CAAC,EAAE,EAAE,sBAAsB,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAiB,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC;IAoDlH,OAAO,CAAC,kBAAkB;IAyE1B,OAAO,CAAC,mBAAmB;IAU3B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE;IAK7C,OAAO,CAAC,oCAAoC;IAM5C,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,YAAY,EAAE;IAKzE,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,QAAQ;IAIhB,gBAAgB,CACZ,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAC3B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,OAAO,EAC9B,oBAAoB,CAAC,EAAE,OAAO,EAC9B,SAAS,CAAC,EAAE,GAAG,EACf,gBAAgB,GAAE,gBAAuC,EACzD,eAAe,GAAE,OAAc,EAC/B,YAAY,GAAE,OAAc,GAC7B,kBAAkB,CAAC,GAAG,CAAC;IAqG1B,6CAA6C,CAAC,uBAAuB,EAAE,MAAM,EAAE;IAW/E,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,8BAA8B;IA4BtC,OAAO,CAAC,sBAAsB;IAa9B,sBAAsB,CAClB,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,MAAM;;;;;IAiBvB,OAAO,CAAC,wBAAwB;IAwBhC,eAAe,CACX,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAC3B,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAChC,WAAW,EAAE,MAAM;IAiBvB,8BAA8B,CAC1B,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAC3B,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM;IA0Bb,WAAW,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC;IAO7C,OAAO,CAAC,yBAAyB;IAqBjC,OAAO,CAAC,kBAAkB;IAS1B,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIxC,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO;IAIxE,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvE,wBAAwB,CACpB,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAC3B,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAC1C,iBAAiB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAC9C,kBAAkB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAChD,kBAAkB,CAAC,GAAG,CAAC;IA8B1B,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,mBAAmB;IAK3B,YAAY,CACR,KAAK,EAAE,GAAG,EACV,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,aAAa,EAAE,MAAM,EAAE,EACvB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACnD,MAAM;IAeT,aAAa,CACT,KAAK,EAAE,GAAG,EACV,aAAa,EAAE,MAAM,EAAE,EACvB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,GAAG;IAMN,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;;;;IAOhM,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;;;;IAiBvK,mBAAmB,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM;IAoB1G,wBAAwB,GAAI,YAAY,cAAc,EAAE,WAAW,MAAM,aAIxE;IAED,yBAAyB,GAAI,YAAY,cAAc,EAAE,WAAW,MAAM,aAIzE;IAED,0BAA0B,GAAI,YAAY,cAAc,EAAE,WAAW,MAAM,aAI1E;IAED,2BAA2B,GAAI,YAAY,cAAc,EAAE,WAAW,MAAM,aAI3E;IAED,6BAA6B,GAAI,YAAY,cAAc,EAAE,WAAW,MAAM,aAI7E;IAED,0BAA0B,GAAI,YAAY,cAAc,EAAE,WAAW,MAAM,aAI1E;IACD,0BAA0B,GAAI,YAAY,cAAc,EAAE,WAAW,MAAM,aAI1E;IACD,2BAA2B,GAAI,YAAY,cAAc,EAAE,WAAW,MAAM,aAI3E;IAED,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;;;;;;;;;;;IAoB9F,oBAAoB,CAAC,CAAC,EACxB,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC/B,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAChD,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GACvD,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,YAAY,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,SAAS,EAAE,GAAG,EAAE,CAAC;QAAC,YAAY,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;CA8CxF"}