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

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 (434) hide show
  1. package/dist/commands/info.command.d.ts.map +1 -1
  2. package/dist/commands/info.command.js +0 -2
  3. package/dist/commands/info.command.js.map +1 -1
  4. package/dist/controllers/dashboard-user-layout.controller.d.ts +43 -0
  5. package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -0
  6. package/dist/controllers/{dashboard-variable.controller.js → dashboard-user-layout.controller.js} +30 -30
  7. package/dist/controllers/dashboard-user-layout.controller.js.map +1 -0
  8. package/dist/controllers/dashboard.controller.d.ts +12 -42
  9. package/dist/controllers/dashboard.controller.d.ts.map +1 -1
  10. package/dist/controllers/dashboard.controller.js +71 -141
  11. package/dist/controllers/dashboard.controller.js.map +1 -1
  12. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts +3 -0
  13. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts.map +1 -0
  14. package/dist/decorators/dashboard-widget-data-provider.decorator.js +8 -0
  15. package/dist/decorators/dashboard-widget-data-provider.decorator.js.map +1 -0
  16. package/dist/dtos/create-dashboard-user-layout.dto.d.ts +10 -0
  17. package/dist/dtos/create-dashboard-user-layout.dto.d.ts.map +1 -0
  18. package/dist/dtos/create-dashboard-user-layout.dto.js +66 -0
  19. package/dist/dtos/create-dashboard-user-layout.dto.js.map +1 -0
  20. package/dist/dtos/dashboard-variable-options-query.dto.d.ts +7 -0
  21. package/dist/dtos/dashboard-variable-options-query.dto.d.ts.map +1 -0
  22. package/dist/dtos/dashboard-variable-options-query.dto.js +40 -0
  23. package/dist/dtos/dashboard-variable-options-query.dto.js.map +1 -0
  24. package/dist/dtos/dashboard-widget-data-request.dto.d.ts +12 -0
  25. package/dist/dtos/dashboard-widget-data-request.dto.d.ts.map +1 -0
  26. package/dist/dtos/dashboard-widget-data-request.dto.js +65 -0
  27. package/dist/dtos/dashboard-widget-data-request.dto.js.map +1 -0
  28. package/dist/dtos/update-dashboard-user-layout.dto.d.ts +11 -0
  29. package/dist/dtos/update-dashboard-user-layout.dto.d.ts.map +1 -0
  30. package/dist/dtos/{update-dashboard-layout.dto.js → update-dashboard-user-layout.dto.js} +34 -16
  31. package/dist/dtos/update-dashboard-user-layout.dto.js.map +1 -0
  32. package/dist/entities/dashboard-user-layout.entity.d.ts +11 -0
  33. package/dist/entities/dashboard-user-layout.entity.d.ts.map +1 -0
  34. package/dist/entities/dashboard-user-layout.entity.js +52 -0
  35. package/dist/entities/dashboard-user-layout.entity.js.map +1 -0
  36. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  37. package/dist/helpers/module-metadata-helper.service.js +15 -4
  38. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  39. package/dist/helpers/solid-registry.d.ts +5 -9
  40. package/dist/helpers/solid-registry.d.ts.map +1 -1
  41. package/dist/helpers/solid-registry.js +13 -28
  42. package/dist/helpers/solid-registry.js.map +1 -1
  43. package/dist/index.d.ts +21 -5
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +21 -5
  46. package/dist/index.js.map +1 -1
  47. package/dist/interfaces.d.ts +24 -13
  48. package/dist/interfaces.d.ts.map +1 -1
  49. package/dist/interfaces.js.map +1 -1
  50. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +1 -3
  51. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  52. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +2 -25
  53. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  54. package/dist/{repository/dashboard-layout.repository.d.ts → repositories/dashboard-user-layout.repository.d.ts} +5 -5
  55. package/dist/repositories/dashboard-user-layout.repository.d.ts.map +1 -0
  56. package/dist/{repository/dashboard-question-sql-dataset-config.repository.js → repositories/dashboard-user-layout.repository.js} +15 -10
  57. package/dist/repositories/dashboard-user-layout.repository.js.map +1 -0
  58. package/dist/seeders/module-metadata-seeder.service.d.ts +1 -6
  59. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  60. package/dist/seeders/module-metadata-seeder.service.js +1 -60
  61. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  62. package/dist/seeders/seed-data/solid-core-metadata.json +6203 -6690
  63. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts +13 -0
  64. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts.map +1 -0
  65. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js +55 -0
  66. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js.map +1 -0
  67. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts +13 -0
  68. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts.map +1 -0
  69. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js +52 -0
  70. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js.map +1 -0
  71. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts +13 -0
  72. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts.map +1 -0
  73. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js +52 -0
  74. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js.map +1 -0
  75. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts +10 -0
  76. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts.map +1 -0
  77. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js +62 -0
  78. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js.map +1 -0
  79. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts +10 -0
  80. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts.map +1 -0
  81. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js +82 -0
  82. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js.map +1 -0
  83. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts +17 -0
  84. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts.map +1 -0
  85. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js +130 -0
  86. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js.map +1 -0
  87. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts +37 -0
  88. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts.map +1 -0
  89. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js +112 -0
  90. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js.map +1 -0
  91. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts +10 -0
  92. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts.map +1 -0
  93. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js +57 -0
  94. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js.map +1 -0
  95. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts +10 -0
  96. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts.map +1 -0
  97. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js +57 -0
  98. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js.map +1 -0
  99. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts +10 -0
  100. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts.map +1 -0
  101. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js +100 -0
  102. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js.map +1 -0
  103. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts +10 -0
  104. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts.map +1 -0
  105. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js +55 -0
  106. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js.map +1 -0
  107. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts +13 -0
  108. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts.map +1 -0
  109. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js +52 -0
  110. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js.map +1 -0
  111. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts +15 -0
  112. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts.map +1 -0
  113. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js +60 -0
  114. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js.map +1 -0
  115. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts +13 -0
  116. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts.map +1 -0
  117. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js +51 -0
  118. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js.map +1 -0
  119. package/dist/services/dashboard-runtime.service.d.ts +31 -0
  120. package/dist/services/dashboard-runtime.service.d.ts.map +1 -0
  121. package/dist/services/dashboard-runtime.service.js +408 -0
  122. package/dist/services/dashboard-runtime.service.js.map +1 -0
  123. package/dist/services/dashboard-user-layout.service.d.ts +12 -0
  124. package/dist/services/dashboard-user-layout.service.d.ts.map +1 -0
  125. package/dist/services/{dashboard-variable.service.js → dashboard-user-layout.service.js} +11 -12
  126. package/dist/services/dashboard-user-layout.service.js.map +1 -0
  127. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts +11 -0
  128. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts.map +1 -0
  129. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js +59 -0
  130. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js.map +1 -0
  131. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts +11 -0
  132. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts.map +1 -0
  133. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js +60 -0
  134. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js.map +1 -0
  135. package/dist/services/solid-introspect.service.d.ts +1 -2
  136. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  137. package/dist/services/solid-introspect.service.js +12 -24
  138. package/dist/services/solid-introspect.service.js.map +1 -1
  139. package/dist/solid-core.module.d.ts.map +1 -1
  140. package/dist/solid-core.module.js +43 -66
  141. package/dist/solid-core.module.js.map +1 -1
  142. package/package.json +1 -1
  143. package/src/commands/info.command.ts +0 -2
  144. package/src/controllers/{dashboard-variable.controller.ts → dashboard-user-layout.controller.ts} +10 -10
  145. package/src/controllers/dashboard.controller.ts +70 -89
  146. package/src/decorators/dashboard-widget-data-provider.decorator.ts +6 -0
  147. package/src/dtos/create-dashboard-user-layout.dto.ts +41 -0
  148. package/src/dtos/dashboard-variable-options-query.dto.ts +20 -0
  149. package/src/dtos/dashboard-widget-data-request.dto.ts +34 -0
  150. package/src/dtos/update-dashboard-user-layout.dto.ts +45 -0
  151. package/src/entities/dashboard-user-layout.entity.ts +27 -0
  152. package/src/helpers/module-metadata-helper.service.ts +21 -6
  153. package/src/helpers/solid-registry.ts +15 -36
  154. package/src/index.ts +21 -5
  155. package/src/interfaces.ts +32 -19
  156. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -34
  157. package/src/repositories/dashboard-user-layout.repository.ts +19 -0
  158. package/src/seeders/module-metadata-seeder.service.ts +0 -67
  159. package/src/seeders/seed-data/solid-core-metadata.json +6204 -6691
  160. package/src/services/dashboard-providers/README.md +603 -0
  161. package/src/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.ts +49 -0
  162. package/src/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.ts +45 -0
  163. package/src/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.ts +45 -0
  164. package/src/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.ts +58 -0
  165. package/src/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.ts +79 -0
  166. package/src/services/dashboard-providers/mq-dashboard-provider-utils.ts +165 -0
  167. package/src/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.ts +155 -0
  168. package/src/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.ts +51 -0
  169. package/src/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.ts +51 -0
  170. package/src/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.ts +95 -0
  171. package/src/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.ts +49 -0
  172. package/src/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.ts +45 -0
  173. package/src/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.ts +55 -0
  174. package/src/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.ts +44 -0
  175. package/src/services/dashboard-runtime.service.ts +488 -0
  176. package/src/services/dashboard-user-layout.service.ts +20 -0
  177. package/src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts +52 -0
  178. package/src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts +51 -0
  179. package/src/services/solid-introspect.service.ts +19 -34
  180. package/src/solid-core.module.ts +43 -72
  181. package/dist/controllers/dashboard-layout.controller.d.ts +0 -47
  182. package/dist/controllers/dashboard-layout.controller.d.ts.map +0 -1
  183. package/dist/controllers/dashboard-layout.controller.js +0 -204
  184. package/dist/controllers/dashboard-layout.controller.js.map +0 -1
  185. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +0 -43
  186. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +0 -1
  187. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js +0 -179
  188. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +0 -1
  189. package/dist/controllers/dashboard-question.controller.d.ts +0 -45
  190. package/dist/controllers/dashboard-question.controller.d.ts.map +0 -1
  191. package/dist/controllers/dashboard-question.controller.js +0 -194
  192. package/dist/controllers/dashboard-question.controller.js.map +0 -1
  193. package/dist/controllers/dashboard-variable.controller.d.ts +0 -43
  194. package/dist/controllers/dashboard-variable.controller.d.ts.map +0 -1
  195. package/dist/controllers/dashboard-variable.controller.js.map +0 -1
  196. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts +0 -3
  197. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +0 -1
  198. package/dist/decorators/dashboard-question-data-provider.decorator.js +0 -11
  199. package/dist/decorators/dashboard-question-data-provider.decorator.js.map +0 -1
  200. package/dist/decorators/dashboard-selection-provider.decorator.d.ts +0 -3
  201. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +0 -1
  202. package/dist/decorators/dashboard-selection-provider.decorator.js +0 -11
  203. package/dist/decorators/dashboard-selection-provider.decorator.js.map +0 -1
  204. package/dist/dtos/create-dashboard-layout.dto.d.ts +0 -8
  205. package/dist/dtos/create-dashboard-layout.dto.d.ts.map +0 -1
  206. package/dist/dtos/create-dashboard-layout.dto.js +0 -53
  207. package/dist/dtos/create-dashboard-layout.dto.js.map +0 -1
  208. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts +0 -12
  209. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  210. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js +0 -77
  211. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  212. package/dist/dtos/create-dashboard-question.dto.d.ts +0 -17
  213. package/dist/dtos/create-dashboard-question.dto.d.ts.map +0 -1
  214. package/dist/dtos/create-dashboard-question.dto.js +0 -105
  215. package/dist/dtos/create-dashboard-question.dto.js.map +0 -1
  216. package/dist/dtos/create-dashboard-variable.dto.d.ts +0 -19
  217. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +0 -1
  218. package/dist/dtos/create-dashboard-variable.dto.js +0 -103
  219. package/dist/dtos/create-dashboard-variable.dto.js.map +0 -1
  220. package/dist/dtos/create-dashboard.dto.d.ts +0 -17
  221. package/dist/dtos/create-dashboard.dto.d.ts.map +0 -1
  222. package/dist/dtos/create-dashboard.dto.js +0 -102
  223. package/dist/dtos/create-dashboard.dto.js.map +0 -1
  224. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +0 -8
  225. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts.map +0 -1
  226. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js +0 -52
  227. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js.map +0 -1
  228. package/dist/dtos/update-dashboard-layout.dto.d.ts +0 -8
  229. package/dist/dtos/update-dashboard-layout.dto.d.ts.map +0 -1
  230. package/dist/dtos/update-dashboard-layout.dto.js.map +0 -1
  231. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts +0 -13
  232. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  233. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js +0 -86
  234. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  235. package/dist/dtos/update-dashboard-question.dto.d.ts +0 -18
  236. package/dist/dtos/update-dashboard-question.dto.d.ts.map +0 -1
  237. package/dist/dtos/update-dashboard-question.dto.js +0 -112
  238. package/dist/dtos/update-dashboard-question.dto.js.map +0 -1
  239. package/dist/dtos/update-dashboard-variable.dto.d.ts +0 -16
  240. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +0 -1
  241. package/dist/dtos/update-dashboard-variable.dto.js +0 -101
  242. package/dist/dtos/update-dashboard-variable.dto.js.map +0 -1
  243. package/dist/dtos/update-dashboard.dto.d.ts +0 -18
  244. package/dist/dtos/update-dashboard.dto.d.ts.map +0 -1
  245. package/dist/dtos/update-dashboard.dto.js +0 -108
  246. package/dist/dtos/update-dashboard.dto.js.map +0 -1
  247. package/dist/entities/dashboard-layout.entity.d.ts +0 -9
  248. package/dist/entities/dashboard-layout.entity.d.ts.map +0 -1
  249. package/dist/entities/dashboard-layout.entity.js +0 -41
  250. package/dist/entities/dashboard-layout.entity.js.map +0 -1
  251. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +0 -14
  252. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +0 -1
  253. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +0 -66
  254. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +0 -1
  255. package/dist/entities/dashboard-question.entity.d.ts +0 -17
  256. package/dist/entities/dashboard-question.entity.d.ts.map +0 -1
  257. package/dist/entities/dashboard-question.entity.js +0 -77
  258. package/dist/entities/dashboard-question.entity.js.map +0 -1
  259. package/dist/entities/dashboard-variable.entity.d.ts +0 -16
  260. package/dist/entities/dashboard-variable.entity.d.ts.map +0 -1
  261. package/dist/entities/dashboard-variable.entity.js +0 -79
  262. package/dist/entities/dashboard-variable.entity.js.map +0 -1
  263. package/dist/entities/dashboard.entity.d.ts +0 -16
  264. package/dist/entities/dashboard.entity.d.ts.map +0 -1
  265. package/dist/entities/dashboard.entity.js +0 -64
  266. package/dist/entities/dashboard.entity.js.map +0 -1
  267. package/dist/mappers/dashboard-mapper.d.ts +0 -6
  268. package/dist/mappers/dashboard-mapper.d.ts.map +0 -1
  269. package/dist/mappers/dashboard-mapper.js +0 -62
  270. package/dist/mappers/dashboard-mapper.js.map +0 -1
  271. package/dist/repository/dashboard-layout.repository.d.ts.map +0 -1
  272. package/dist/repository/dashboard-layout.repository.js +0 -34
  273. package/dist/repository/dashboard-layout.repository.js.map +0 -1
  274. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +0 -12
  275. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +0 -1
  276. package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +0 -1
  277. package/dist/repository/dashboard-question.repository.d.ts +0 -12
  278. package/dist/repository/dashboard-question.repository.d.ts.map +0 -1
  279. package/dist/repository/dashboard-question.repository.js +0 -34
  280. package/dist/repository/dashboard-question.repository.js.map +0 -1
  281. package/dist/repository/dashboard-variable.repository.d.ts +0 -12
  282. package/dist/repository/dashboard-variable.repository.d.ts.map +0 -1
  283. package/dist/repository/dashboard-variable.repository.js +0 -34
  284. package/dist/repository/dashboard-variable.repository.js.map +0 -1
  285. package/dist/repository/dashboard.repository.d.ts +0 -13
  286. package/dist/repository/dashboard.repository.d.ts.map +0 -1
  287. package/dist/repository/dashboard.repository.js +0 -104
  288. package/dist/repository/dashboard.repository.js.map +0 -1
  289. package/dist/services/dashboard-layout.service.d.ts +0 -20
  290. package/dist/services/dashboard-layout.service.d.ts.map +0 -1
  291. package/dist/services/dashboard-layout.service.js +0 -120
  292. package/dist/services/dashboard-layout.service.js.map +0 -1
  293. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +0 -12
  294. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +0 -1
  295. package/dist/services/dashboard-question-sql-dataset-config.service.js +0 -38
  296. package/dist/services/dashboard-question-sql-dataset-config.service.js.map +0 -1
  297. package/dist/services/dashboard-question.service.d.ts +0 -23
  298. package/dist/services/dashboard-question.service.d.ts.map +0 -1
  299. package/dist/services/dashboard-question.service.js +0 -135
  300. package/dist/services/dashboard-question.service.js.map +0 -1
  301. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +0 -12
  302. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +0 -1
  303. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +0 -55
  304. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +0 -1
  305. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +0 -11
  306. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +0 -1
  307. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +0 -45
  308. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +0 -1
  309. package/dist/services/dashboard-variable.service.d.ts +0 -13
  310. package/dist/services/dashboard-variable.service.d.ts.map +0 -1
  311. package/dist/services/dashboard-variable.service.js.map +0 -1
  312. package/dist/services/dashboard.service.d.ts +0 -29
  313. package/dist/services/dashboard.service.d.ts.map +0 -1
  314. package/dist/services/dashboard.service.js +0 -171
  315. package/dist/services/dashboard.service.js.map +0 -1
  316. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts +0 -12
  317. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  318. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js +0 -41
  319. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js.map +0 -1
  320. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts +0 -12
  321. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  322. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js +0 -42
  323. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js.map +0 -1
  324. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts +0 -25
  325. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts.map +0 -1
  326. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js +0 -116
  327. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js.map +0 -1
  328. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts +0 -12
  329. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts.map +0 -1
  330. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js +0 -37
  331. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js.map +0 -1
  332. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts +0 -12
  333. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts.map +0 -1
  334. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js +0 -38
  335. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js.map +0 -1
  336. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts +0 -12
  337. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts.map +0 -1
  338. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js +0 -38
  339. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js.map +0 -1
  340. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +0 -34
  341. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +0 -1
  342. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +0 -90
  343. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +0 -1
  344. package/dist/services/question-data-providers/helpers.d.ts +0 -7
  345. package/dist/services/question-data-providers/helpers.d.ts.map +0 -1
  346. package/dist/services/question-data-providers/helpers.js +0 -25
  347. package/dist/services/question-data-providers/helpers.js.map +0 -1
  348. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +0 -14
  349. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +0 -1
  350. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +0 -71
  351. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +0 -1
  352. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +0 -16
  353. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +0 -1
  354. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +0 -93
  355. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +0 -1
  356. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +0 -11
  357. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +0 -1
  358. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +0 -49
  359. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +0 -1
  360. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +0 -11
  361. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +0 -1
  362. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +0 -47
  363. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +0 -1
  364. package/dist/services/sql-expression-resolver.service.d.ts +0 -12
  365. package/dist/services/sql-expression-resolver.service.d.ts.map +0 -1
  366. package/dist/services/sql-expression-resolver.service.js +0 -121
  367. package/dist/services/sql-expression-resolver.service.js.map +0 -1
  368. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +0 -16
  369. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +0 -1
  370. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js +0 -72
  371. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +0 -1
  372. package/dist/subscribers/dashboard-question.subscriber.d.ts +0 -16
  373. package/dist/subscribers/dashboard-question.subscriber.d.ts.map +0 -1
  374. package/dist/subscribers/dashboard-question.subscriber.js +0 -72
  375. package/dist/subscribers/dashboard-question.subscriber.js.map +0 -1
  376. package/dist/subscribers/dashboard-variable.subscriber.d.ts +0 -16
  377. package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +0 -1
  378. package/dist/subscribers/dashboard-variable.subscriber.js +0 -72
  379. package/dist/subscribers/dashboard-variable.subscriber.js.map +0 -1
  380. package/dist/subscribers/dashboard.subscriber.d.ts +0 -16
  381. package/dist/subscribers/dashboard.subscriber.d.ts.map +0 -1
  382. package/dist/subscribers/dashboard.subscriber.js +0 -71
  383. package/dist/subscribers/dashboard.subscriber.js.map +0 -1
  384. package/src/controllers/dashboard-layout.controller.ts +0 -106
  385. package/src/controllers/dashboard-question-sql-dataset-config.controller.ts +0 -93
  386. package/src/controllers/dashboard-question.controller.ts +0 -104
  387. package/src/decorators/dashboard-question-data-provider.decorator.ts +0 -7
  388. package/src/decorators/dashboard-selection-provider.decorator.ts +0 -7
  389. package/src/dtos/create-dashboard-layout.dto.ts +0 -31
  390. package/src/dtos/create-dashboard-question-sql-dataset-config.dto.ts +0 -42
  391. package/src/dtos/create-dashboard-question.dto.ts +0 -62
  392. package/src/dtos/create-dashboard-variable.dto.ts +0 -60
  393. package/src/dtos/create-dashboard.dto.ts +0 -61
  394. package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +0 -29
  395. package/src/dtos/update-dashboard-layout.dto.ts +0 -30
  396. package/src/dtos/update-dashboard-question-sql-dataset-config.dto.ts +0 -49
  397. package/src/dtos/update-dashboard-question.dto.ts +0 -67
  398. package/src/dtos/update-dashboard-variable.dto.ts +0 -58
  399. package/src/dtos/update-dashboard.dto.ts +0 -65
  400. package/src/entities/dashboard-layout.entity.ts +0 -18
  401. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +0 -37
  402. package/src/entities/dashboard-question.entity.ts +0 -46
  403. package/src/entities/dashboard-variable.entity.ts +0 -44
  404. package/src/entities/dashboard.entity.ts +0 -36
  405. package/src/mappers/dashboard-mapper.ts +0 -53
  406. package/src/repository/dashboard-layout.repository.ts +0 -17
  407. package/src/repository/dashboard-question-sql-dataset-config.repository.ts +0 -17
  408. package/src/repository/dashboard-question.repository.ts +0 -17
  409. package/src/repository/dashboard-variable.repository.ts +0 -17
  410. package/src/repository/dashboard.repository.ts +0 -101
  411. package/src/services/dashboard-layout.service.ts +0 -111
  412. package/src/services/dashboard-question-sql-dataset-config.service.ts +0 -25
  413. package/src/services/dashboard-question.service.ts +0 -150
  414. package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +0 -56
  415. package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +0 -37
  416. package/src/services/dashboard-variable.service.ts +0 -27
  417. package/src/services/dashboard.service.ts +0 -148
  418. package/src/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.ts +0 -43
  419. package/src/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.ts +0 -44
  420. package/src/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.ts +0 -114
  421. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.ts +0 -38
  422. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.ts +0 -40
  423. package/src/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.ts +0 -39
  424. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +0 -121
  425. package/src/services/question-data-providers/helpers.ts +0 -30
  426. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +0 -74
  427. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +0 -115
  428. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +0 -44
  429. package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +0 -41
  430. package/src/services/sql-expression-resolver.service.ts +0 -140
  431. package/src/subscribers/dashboard-question-sql-dataset-config.subscriber.ts +0 -61
  432. package/src/subscribers/dashboard-question.subscriber.ts +0 -62
  433. package/src/subscribers/dashboard-variable.subscriber.ts +0 -63
  434. package/src/subscribers/dashboard.subscriber.ts +0 -62
@@ -0,0 +1,408 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ var DashboardRuntimeService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.DashboardRuntimeService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const qs_1 = __importDefault(require("qs"));
19
+ const error_messages_1 = require("../constants/error-messages");
20
+ const module_metadata_entity_1 = require("../entities/module-metadata.entity");
21
+ const module_metadata_helper_service_1 = require("../helpers/module-metadata-helper.service");
22
+ const solid_registry_1 = require("../helpers/solid-registry");
23
+ const dashboard_user_layout_service_1 = require("./dashboard-user-layout.service");
24
+ let DashboardRuntimeService = DashboardRuntimeService_1 = class DashboardRuntimeService {
25
+ constructor(moduleMetadataHelperService, solidRegistry, dashboardUserLayoutService) {
26
+ this.moduleMetadataHelperService = moduleMetadataHelperService;
27
+ this.solidRegistry = solidRegistry;
28
+ this.dashboardUserLayoutService = dashboardUserLayoutService;
29
+ this.logger = new common_1.Logger(DashboardRuntimeService_1.name);
30
+ }
31
+ async getDashboardDefinition(moduleName, dashboardName) {
32
+ const moduleMetadata = await this.getModuleMetadata(moduleName);
33
+ const dashboards = this.getDashboards(moduleMetadata);
34
+ const dashboard = dashboards.find((d) => d?.name === dashboardName || d?.routeName === dashboardName);
35
+ if (!dashboard) {
36
+ throw new common_1.NotFoundException(`Dashboard ${dashboardName} not found for module ${moduleName}.`);
37
+ }
38
+ return dashboard;
39
+ }
40
+ async getWidgetData(moduleName, dashboardName, widgetName, request = {}, activeUser) {
41
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
42
+ return this.getWidgetDataFromDefinition(dashboardDefinition, moduleName, dashboardName, widgetName, request, activeUser);
43
+ }
44
+ async getDashboardData(moduleName, dashboardName, request = {}, activeUser) {
45
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
46
+ const allWidgets = Array.isArray(dashboardDefinition.widgets) ? dashboardDefinition.widgets : [];
47
+ const targetWidgets = request.widgetNames?.length
48
+ ? allWidgets.filter((widget) => request.widgetNames.includes(widget.id) || request.widgetNames.includes(widget.name))
49
+ : allWidgets;
50
+ const widgets = await Promise.all(targetWidgets.map((widget) => this.getWidgetDataFromDefinition(dashboardDefinition, moduleName, dashboardName, widget.id ?? widget.name, request, activeUser)));
51
+ return {
52
+ moduleName,
53
+ dashboardName: dashboardDefinition.name,
54
+ variables: request.variables ?? {},
55
+ widgets,
56
+ };
57
+ }
58
+ async getVariableOptions(moduleName, dashboardName, variableName, query) {
59
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
60
+ const variable = (dashboardDefinition.variables ?? []).find((v) => v.name === variableName);
61
+ if (!variable) {
62
+ throw new common_1.NotFoundException(`Variable ${variableName} not found in dashboard ${dashboardName}.`);
63
+ }
64
+ if (variable.type === 'selectionStatic') {
65
+ const values = Array.isArray(variable.selectionStaticValues) ? variable.selectionStaticValues : [];
66
+ return values.map((entry) => {
67
+ const [value, label] = `${entry}`.split(':');
68
+ return { label: label ?? value, value };
69
+ });
70
+ }
71
+ if (variable.type !== 'selectionDynamic') {
72
+ return [];
73
+ }
74
+ const providerName = variable?.selectionConfig?.providerName;
75
+ if (!providerName) {
76
+ throw new common_1.NotFoundException(`Variable ${variableName} does not define a dynamic selection provider.`);
77
+ }
78
+ const selectionProvider = this.solidRegistry.getSelectionProviderInstance(providerName);
79
+ if (!selectionProvider) {
80
+ throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.PROVIDER_NOT_FOUND(providerName));
81
+ }
82
+ const providerContext = {
83
+ ...(variable?.selectionConfig?.providerContext ?? {}),
84
+ limit: query?.limit ?? 10,
85
+ offset: query?.offset ?? 0,
86
+ formValues: this.parseFormValues(query?.formValues),
87
+ };
88
+ if (query.optionValue) {
89
+ return selectionProvider.value(query.optionValue, providerContext);
90
+ }
91
+ return selectionProvider.values(query?.query ?? '', providerContext);
92
+ }
93
+ async getLayout(moduleName, dashboardName, activeUser) {
94
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
95
+ const defaultLayout = dashboardDefinition.defaultLayout ?? {};
96
+ const userId = activeUser?.sub ?? null;
97
+ let userLayoutRecord = null;
98
+ try {
99
+ userLayoutRecord = userId
100
+ ? await this.dashboardUserLayoutService.repo.findOne({
101
+ where: {
102
+ user: { id: userId },
103
+ module: { name: moduleName },
104
+ dashboardName: dashboardDefinition.name,
105
+ },
106
+ })
107
+ : null;
108
+ }
109
+ catch (err) {
110
+ const isEntityMetadataMissing = `${err?.message ?? ''}`.includes('No metadata for "DashboardUserLayout" was found');
111
+ if (!isEntityMetadataMissing)
112
+ throw err;
113
+ this.logger.warn('DashboardUserLayout entity metadata is not registered yet. Returning default layout fallback.');
114
+ }
115
+ const userLayout = this.parseLayoutJson(userLayoutRecord?.layoutJson);
116
+ const effectiveLayout = this.mergeLayouts(defaultLayout, userLayout);
117
+ return {
118
+ moduleName,
119
+ dashboardName: dashboardDefinition.name,
120
+ userId,
121
+ defaultLayout,
122
+ userLayout,
123
+ effectiveLayout,
124
+ persisted: !!userLayoutRecord,
125
+ };
126
+ }
127
+ async saveLayout(moduleName, dashboardName, dto, activeUser) {
128
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
129
+ const resolvedDashboardName = dashboardDefinition?.name ?? dashboardName;
130
+ const resolvedLayoutJson = this.resolveLayoutPayload(dto);
131
+ const userId = activeUser?.sub;
132
+ if (!userId) {
133
+ return {
134
+ moduleName,
135
+ dashboardName: resolvedDashboardName,
136
+ userId: null,
137
+ persisted: false,
138
+ message: 'Unable to persist layout without active user context.',
139
+ layoutJson: resolvedLayoutJson,
140
+ };
141
+ }
142
+ const layoutJsonAsString = typeof resolvedLayoutJson === 'string'
143
+ ? resolvedLayoutJson
144
+ : JSON.stringify(resolvedLayoutJson ?? {});
145
+ let savedLayout = null;
146
+ try {
147
+ const layoutRepo = this.dashboardUserLayoutService.repo;
148
+ const existing = await layoutRepo.findOne({
149
+ where: {
150
+ user: { id: userId },
151
+ module: { name: moduleName },
152
+ dashboardName: resolvedDashboardName,
153
+ },
154
+ });
155
+ const moduleRepo = this.dashboardUserLayoutService.entityManager.getRepository(module_metadata_entity_1.ModuleMetadata);
156
+ const moduleEntity = await moduleRepo.findOne({ where: { name: moduleName } });
157
+ if (!moduleEntity) {
158
+ throw new common_1.NotFoundException(`Module ${moduleName} not found.`);
159
+ }
160
+ const toSave = layoutRepo.create({
161
+ ...(existing ? { id: existing.id } : {}),
162
+ user: { id: userId },
163
+ module: { id: moduleEntity.id },
164
+ dashboardName: resolvedDashboardName,
165
+ layoutJson: layoutJsonAsString,
166
+ version: (existing?.version ?? 0) + 1,
167
+ });
168
+ savedLayout = await layoutRepo.save(toSave);
169
+ }
170
+ catch (err) {
171
+ const isEntityMetadataMissing = `${err?.message ?? ''}`.includes('No metadata for "DashboardUserLayout" was found');
172
+ if (!isEntityMetadataMissing)
173
+ throw err;
174
+ this.logger.warn('DashboardUserLayout entity metadata is not registered yet. Returning non-persistent save fallback.');
175
+ return {
176
+ moduleName,
177
+ dashboardName: resolvedDashboardName,
178
+ userId,
179
+ persisted: false,
180
+ message: 'Layout model generated but entity is not registered in TypeORM yet. Please add DashboardUserLayout to module TypeOrm entities and restart.',
181
+ layoutJson: resolvedLayoutJson,
182
+ };
183
+ }
184
+ return {
185
+ moduleName,
186
+ dashboardName: resolvedDashboardName,
187
+ userId,
188
+ persisted: true,
189
+ message: 'Layout saved successfully.',
190
+ layoutJson: this.parseLayoutJson(savedLayout.layoutJson),
191
+ };
192
+ }
193
+ async getModuleMetadata(moduleName) {
194
+ const configPath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);
195
+ const moduleMetadata = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(configPath);
196
+ if (!moduleMetadata) {
197
+ throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.MODULE_NOT_FOUND(moduleName));
198
+ }
199
+ return moduleMetadata;
200
+ }
201
+ getDashboards(moduleMetadata) {
202
+ return Array.isArray(moduleMetadata?.dashboards) ? moduleMetadata.dashboards : [];
203
+ }
204
+ findWidgetDefinition(dashboardDefinition, widgetName) {
205
+ const widgets = Array.isArray(dashboardDefinition.widgets) ? dashboardDefinition.widgets : [];
206
+ const widgetDefinition = widgets.find((widget) => widget?.id === widgetName || widget?.name === widgetName);
207
+ if (!widgetDefinition) {
208
+ throw new common_1.NotFoundException(`Widget ${widgetName} not found in dashboard ${dashboardDefinition?.name ?? ''}.`);
209
+ }
210
+ return widgetDefinition;
211
+ }
212
+ async getWidgetDataFromDefinition(dashboardDefinition, moduleName, dashboardName, widgetName, request = {}, activeUser) {
213
+ const widgetDefinition = this.findWidgetDefinition(dashboardDefinition, widgetName);
214
+ const resolvedWidgetName = widgetDefinition.id ?? widgetDefinition.name ?? widgetName;
215
+ const providerName = widgetDefinition.dataProvider;
216
+ if (!this.hasDashboardWidgetPermission(activeUser, dashboardDefinition?.name ?? dashboardName, resolvedWidgetName)) {
217
+ return this.buildUnauthorizedWidgetResponse(dashboardDefinition?.name ?? dashboardName, resolvedWidgetName, providerName);
218
+ }
219
+ if (!providerName) {
220
+ throw new common_1.NotFoundException(`Widget ${widgetName} is missing dataProvider definition.`);
221
+ }
222
+ const provider = this.solidRegistry.getDashboardWidgetDataProviderInstance(providerName);
223
+ if (!provider) {
224
+ throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.PROVIDER_NOT_FOUND(providerName));
225
+ }
226
+ const providerContext = {
227
+ ...(widgetDefinition.providerContext ?? {}),
228
+ ...(request.providerContext ?? {}),
229
+ };
230
+ const runtimeContext = {
231
+ moduleName,
232
+ dashboardName,
233
+ widgetName: resolvedWidgetName,
234
+ variables: request.variables ?? {},
235
+ providerContext,
236
+ activeUser,
237
+ };
238
+ const startTime = Date.now();
239
+ const providerResponse = await provider.getData(widgetDefinition, runtimeContext);
240
+ const durationMs = Date.now() - startTime;
241
+ if (providerResponse && typeof providerResponse === 'object' && providerResponse.data !== undefined) {
242
+ const nextMeta = {
243
+ ...(providerResponse.meta ?? {}),
244
+ providerName,
245
+ widgetName: runtimeContext.widgetName,
246
+ durationMs: providerResponse?.meta?.durationMs ?? durationMs,
247
+ generatedAt: providerResponse?.meta?.generatedAt ?? new Date().toISOString(),
248
+ };
249
+ return {
250
+ ...providerResponse,
251
+ meta: nextMeta,
252
+ };
253
+ }
254
+ this.logger.debug(`Widget provider ${providerName} returned a non-envelope payload for ${runtimeContext.widgetName}. Normalizing response.`);
255
+ return {
256
+ meta: {
257
+ providerName,
258
+ widgetName: runtimeContext.widgetName,
259
+ durationMs,
260
+ generatedAt: new Date().toISOString(),
261
+ },
262
+ data: providerResponse,
263
+ };
264
+ }
265
+ parseFormValues(formValues) {
266
+ if (!formValues) {
267
+ return {};
268
+ }
269
+ if (typeof formValues === 'object') {
270
+ return formValues;
271
+ }
272
+ try {
273
+ const parsedFromQueryString = qs_1.default.parse(formValues);
274
+ if (parsedFromQueryString && typeof parsedFromQueryString === 'object') {
275
+ if (parsedFromQueryString['formValues'] && typeof parsedFromQueryString['formValues'] === 'object') {
276
+ return parsedFromQueryString['formValues'];
277
+ }
278
+ return parsedFromQueryString;
279
+ }
280
+ }
281
+ catch (err) {
282
+ }
283
+ try {
284
+ return JSON.parse(formValues);
285
+ }
286
+ catch (err) {
287
+ return {};
288
+ }
289
+ }
290
+ hasDashboardWidgetPermission(activeUser, dashboardName, widgetName) {
291
+ const permissions = Array.isArray(activeUser?.permissions) ? activeUser.permissions : [];
292
+ if (!dashboardName || !widgetName || permissions.length === 0) {
293
+ return false;
294
+ }
295
+ return permissions.some((permission) => this.matchesDashboardWidgetPermission(permission, dashboardName, widgetName));
296
+ }
297
+ matchesDashboardWidgetPermission(permission, dashboardName, widgetName) {
298
+ const match = /^dashboard:([^:]+):(.+)$/.exec(`${permission ?? ''}`.trim());
299
+ if (!match) {
300
+ return false;
301
+ }
302
+ const [, permissionDashboardName, widgetPattern] = match;
303
+ if (permissionDashboardName !== dashboardName || !widgetPattern) {
304
+ return false;
305
+ }
306
+ if (widgetPattern === '*') {
307
+ return true;
308
+ }
309
+ if (widgetPattern === widgetName) {
310
+ return true;
311
+ }
312
+ try {
313
+ return new RegExp(widgetPattern).test(widgetName);
314
+ }
315
+ catch {
316
+ return false;
317
+ }
318
+ }
319
+ buildUnauthorizedWidgetResponse(dashboardName, widgetName, providerName) {
320
+ return {
321
+ meta: {
322
+ providerName: providerName ?? null,
323
+ widgetName,
324
+ durationMs: 0,
325
+ generatedAt: new Date().toISOString(),
326
+ unauthorized: true,
327
+ permissionExpression: `dashboard:${dashboardName}:${widgetName}`,
328
+ },
329
+ data: null,
330
+ uiHints: {
331
+ state: 'unauthorized',
332
+ message: 'Unauthorized',
333
+ },
334
+ };
335
+ }
336
+ parseLayoutJson(layoutJson) {
337
+ if (layoutJson === null || layoutJson === undefined)
338
+ return null;
339
+ if (typeof layoutJson !== 'string')
340
+ return layoutJson;
341
+ try {
342
+ return JSON.parse(layoutJson);
343
+ }
344
+ catch {
345
+ return layoutJson;
346
+ }
347
+ }
348
+ resolveLayoutPayload(dto) {
349
+ if (!dto)
350
+ return {};
351
+ if (dto.layoutJson !== undefined)
352
+ return dto.layoutJson;
353
+ if (dto.layout !== undefined)
354
+ return dto.layout;
355
+ return dto;
356
+ }
357
+ mergeLayouts(defaultLayout, userLayout) {
358
+ if (!defaultLayout && !userLayout)
359
+ return {};
360
+ if (!defaultLayout)
361
+ return userLayout ?? {};
362
+ if (!userLayout)
363
+ return defaultLayout ?? {};
364
+ const defaultItems = Array.isArray(defaultLayout?.items) ? defaultLayout.items : [];
365
+ const userItems = Array.isArray(userLayout?.items) ? userLayout.items : [];
366
+ if (!defaultItems.length) {
367
+ return {
368
+ ...defaultLayout,
369
+ ...userLayout,
370
+ items: userItems,
371
+ };
372
+ }
373
+ const userByWidget = new Map();
374
+ userItems.forEach((item) => {
375
+ const key = item?.widgetId ?? item?.id;
376
+ if (key)
377
+ userByWidget.set(key, item);
378
+ });
379
+ const mergedDefaultItems = defaultItems.map((baseItem) => {
380
+ const key = baseItem?.widgetId ?? baseItem?.id;
381
+ if (!key)
382
+ return baseItem;
383
+ const override = userByWidget.get(key);
384
+ return override ? { ...baseItem, ...override, widgetId: key } : baseItem;
385
+ });
386
+ const defaultKeys = new Set(defaultItems
387
+ .map((item) => item?.widgetId ?? item?.id)
388
+ .filter((value) => !!value));
389
+ const userOnlyItems = userItems.filter((item) => {
390
+ const key = item?.widgetId ?? item?.id;
391
+ return !!key && !defaultKeys.has(key);
392
+ });
393
+ return {
394
+ ...defaultLayout,
395
+ ...userLayout,
396
+ columns: userLayout?.columns ?? defaultLayout?.columns ?? 12,
397
+ items: [...mergedDefaultItems, ...userOnlyItems],
398
+ };
399
+ }
400
+ };
401
+ exports.DashboardRuntimeService = DashboardRuntimeService;
402
+ exports.DashboardRuntimeService = DashboardRuntimeService = DashboardRuntimeService_1 = __decorate([
403
+ (0, common_1.Injectable)(),
404
+ __metadata("design:paramtypes", [module_metadata_helper_service_1.ModuleMetadataHelperService,
405
+ solid_registry_1.SolidRegistry,
406
+ dashboard_user_layout_service_1.DashboardUserLayoutService])
407
+ ], DashboardRuntimeService);
408
+ //# sourceMappingURL=dashboard-runtime.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-runtime.service.js","sourceRoot":"","sources":["../../src/services/dashboard-runtime.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport qs from 'qs';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { DashboardVariableOptionsQueryDto } from 'src/dtos/dashboard-variable-options-query.dto';\nimport { DashboardBatchDataRequestDto, DashboardSaveLayoutDto, DashboardWidgetDataRequestDto } from 'src/dtos/dashboard-widget-data-request.dto';\nimport { ModuleMetadata } from 'src/entities/module-metadata.entity';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { ActiveUserData } from 'src/interfaces/active-user-data.interface';\nimport { IDashboardWidgetDataProviderContext } from 'src/interfaces';\nimport { DashboardUserLayoutService } from './dashboard-user-layout.service';\n\n@Injectable()\nexport class DashboardRuntimeService {\n private readonly logger = new Logger(DashboardRuntimeService.name);\n\n constructor(\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n private readonly solidRegistry: SolidRegistry,\n private readonly dashboardUserLayoutService: DashboardUserLayoutService,\n ) { }\n\n async getDashboardDefinition(moduleName: string, dashboardName: string): Promise<any> {\n const moduleMetadata = await this.getModuleMetadata(moduleName);\n const dashboards = this.getDashboards(moduleMetadata);\n const dashboard = dashboards.find((d) => d?.name === dashboardName || d?.routeName === dashboardName);\n\n if (!dashboard) {\n throw new NotFoundException(`Dashboard ${dashboardName} not found for module ${moduleName}.`);\n }\n\n return dashboard;\n }\n\n async getWidgetData(\n moduleName: string,\n dashboardName: string,\n widgetName: string,\n request: DashboardWidgetDataRequestDto = {},\n activeUser?: ActiveUserData,\n ): Promise<any> {\n const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);\n return this.getWidgetDataFromDefinition(dashboardDefinition, moduleName, dashboardName, widgetName, request, activeUser);\n }\n\n async getDashboardData(\n moduleName: string,\n dashboardName: string,\n request: DashboardBatchDataRequestDto = {},\n activeUser?: ActiveUserData,\n ): Promise<any> {\n const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);\n const allWidgets = Array.isArray(dashboardDefinition.widgets) ? dashboardDefinition.widgets : [];\n\n const targetWidgets = request.widgetNames?.length\n ? allWidgets.filter((widget) => request.widgetNames.includes(widget.id) || request.widgetNames.includes(widget.name))\n : allWidgets;\n\n const widgets = await Promise.all(\n targetWidgets.map((widget) => this.getWidgetDataFromDefinition(\n dashboardDefinition,\n moduleName,\n dashboardName,\n widget.id ?? widget.name,\n request,\n activeUser\n ))\n );\n\n return {\n moduleName,\n dashboardName: dashboardDefinition.name,\n variables: request.variables ?? {},\n widgets,\n };\n }\n\n async getVariableOptions(\n moduleName: string,\n dashboardName: string,\n variableName: string,\n query: DashboardVariableOptionsQueryDto,\n ): Promise<any> {\n const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);\n const variable = (dashboardDefinition.variables ?? []).find((v) => v.name === variableName);\n\n if (!variable) {\n throw new NotFoundException(`Variable ${variableName} not found in dashboard ${dashboardName}.`);\n }\n\n if (variable.type === 'selectionStatic') {\n const values = Array.isArray(variable.selectionStaticValues) ? variable.selectionStaticValues : [];\n return values.map((entry: string) => {\n const [value, label] = `${entry}`.split(':');\n return { label: label ?? value, value };\n });\n }\n\n if (variable.type !== 'selectionDynamic') {\n return [];\n }\n\n const providerName = variable?.selectionConfig?.providerName;\n if (!providerName) {\n throw new NotFoundException(`Variable ${variableName} does not define a dynamic selection provider.`);\n }\n\n const selectionProvider = this.solidRegistry.getSelectionProviderInstance(providerName);\n if (!selectionProvider) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(providerName));\n }\n\n const providerContext = {\n ...(variable?.selectionConfig?.providerContext ?? {}),\n limit: query?.limit ?? 10,\n offset: query?.offset ?? 0,\n formValues: this.parseFormValues(query?.formValues),\n };\n\n if (query.optionValue) {\n return selectionProvider.value(query.optionValue, providerContext as any);\n }\n\n return selectionProvider.values(query?.query ?? '', providerContext as any);\n }\n\n async getLayout(moduleName: string, dashboardName: string, activeUser?: ActiveUserData): Promise<any> {\n const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);\n const defaultLayout = dashboardDefinition.defaultLayout ?? {};\n const userId = activeUser?.sub ?? null;\n let userLayoutRecord = null;\n try {\n userLayoutRecord = userId\n ? await this.dashboardUserLayoutService.repo.findOne({\n where: {\n user: { id: userId },\n module: { name: moduleName },\n dashboardName: dashboardDefinition.name,\n } as any,\n })\n : null;\n } catch (err: any) {\n const isEntityMetadataMissing = `${err?.message ?? ''}`.includes('No metadata for \"DashboardUserLayout\" was found');\n if (!isEntityMetadataMissing) throw err;\n this.logger.warn('DashboardUserLayout entity metadata is not registered yet. Returning default layout fallback.');\n }\n const userLayout = this.parseLayoutJson(userLayoutRecord?.layoutJson);\n const effectiveLayout = this.mergeLayouts(defaultLayout, userLayout);\n\n return {\n moduleName,\n dashboardName: dashboardDefinition.name,\n userId,\n defaultLayout,\n userLayout,\n effectiveLayout,\n persisted: !!userLayoutRecord,\n };\n }\n\n async saveLayout(\n moduleName: string,\n dashboardName: string,\n dto: DashboardSaveLayoutDto,\n activeUser?: ActiveUserData,\n ): Promise<any> {\n const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);\n const resolvedDashboardName = dashboardDefinition?.name ?? dashboardName;\n const resolvedLayoutJson = this.resolveLayoutPayload(dto);\n const userId = activeUser?.sub;\n if (!userId) {\n return {\n moduleName,\n dashboardName: resolvedDashboardName,\n userId: null,\n persisted: false,\n message: 'Unable to persist layout without active user context.',\n layoutJson: resolvedLayoutJson,\n };\n }\n const layoutJsonAsString = typeof resolvedLayoutJson === 'string'\n ? resolvedLayoutJson\n : JSON.stringify(resolvedLayoutJson ?? {});\n let savedLayout: any = null;\n try {\n const layoutRepo = this.dashboardUserLayoutService.repo;\n const existing = await layoutRepo.findOne({\n where: {\n user: { id: userId },\n module: { name: moduleName },\n dashboardName: resolvedDashboardName,\n } as any,\n });\n\n const moduleRepo = this.dashboardUserLayoutService.entityManager.getRepository(ModuleMetadata);\n const moduleEntity = await moduleRepo.findOne({ where: { name: moduleName } as any });\n\n if (!moduleEntity) {\n throw new NotFoundException(`Module ${moduleName} not found.`);\n }\n\n const toSave = layoutRepo.create({\n ...(existing ? { id: existing.id } : {}),\n user: { id: userId } as any,\n module: { id: moduleEntity.id } as any,\n dashboardName: resolvedDashboardName,\n layoutJson: layoutJsonAsString,\n version: (existing?.version ?? 0) + 1,\n } as any);\n\n savedLayout = await layoutRepo.save(toSave);\n } catch (err: any) {\n const isEntityMetadataMissing = `${err?.message ?? ''}`.includes('No metadata for \"DashboardUserLayout\" was found');\n if (!isEntityMetadataMissing) throw err;\n this.logger.warn('DashboardUserLayout entity metadata is not registered yet. Returning non-persistent save fallback.');\n return {\n moduleName,\n dashboardName: resolvedDashboardName,\n userId,\n persisted: false,\n message: 'Layout model generated but entity is not registered in TypeORM yet. Please add DashboardUserLayout to module TypeOrm entities and restart.',\n layoutJson: resolvedLayoutJson,\n };\n }\n\n return {\n moduleName,\n dashboardName: resolvedDashboardName,\n userId,\n persisted: true,\n message: 'Layout saved successfully.',\n layoutJson: this.parseLayoutJson(savedLayout.layoutJson),\n };\n }\n\n private async getModuleMetadata(moduleName: string): Promise<any> {\n const configPath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n const moduleMetadata = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(configPath);\n\n if (!moduleMetadata) {\n throw new NotFoundException(ERROR_MESSAGES.MODULE_NOT_FOUND(moduleName));\n }\n\n return moduleMetadata;\n }\n\n private getDashboards(moduleMetadata: any): any[] {\n return Array.isArray(moduleMetadata?.dashboards) ? moduleMetadata.dashboards : [];\n }\n\n private findWidgetDefinition(dashboardDefinition: any, widgetName: string): any {\n const widgets = Array.isArray(dashboardDefinition.widgets) ? dashboardDefinition.widgets : [];\n const widgetDefinition = widgets.find((widget) => widget?.id === widgetName || widget?.name === widgetName);\n\n if (!widgetDefinition) {\n throw new NotFoundException(`Widget ${widgetName} not found in dashboard ${dashboardDefinition?.name ?? ''}.`);\n }\n\n return widgetDefinition;\n }\n\n private async getWidgetDataFromDefinition(\n dashboardDefinition: any,\n moduleName: string,\n dashboardName: string,\n widgetName: string,\n request: DashboardWidgetDataRequestDto = {},\n activeUser?: ActiveUserData,\n ): Promise<any> {\n const widgetDefinition = this.findWidgetDefinition(dashboardDefinition, widgetName);\n const resolvedWidgetName = widgetDefinition.id ?? widgetDefinition.name ?? widgetName;\n const providerName = widgetDefinition.dataProvider;\n\n if (!this.hasDashboardWidgetPermission(activeUser, dashboardDefinition?.name ?? dashboardName, resolvedWidgetName)) {\n return this.buildUnauthorizedWidgetResponse(\n dashboardDefinition?.name ?? dashboardName,\n resolvedWidgetName,\n providerName,\n );\n }\n\n if (!providerName) {\n throw new NotFoundException(`Widget ${widgetName} is missing dataProvider definition.`);\n }\n\n const provider = this.solidRegistry.getDashboardWidgetDataProviderInstance(providerName);\n if (!provider) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(providerName));\n }\n\n const providerContext = {\n ...(widgetDefinition.providerContext ?? {}),\n ...(request.providerContext ?? {}),\n };\n\n const runtimeContext: IDashboardWidgetDataProviderContext = {\n moduleName,\n dashboardName,\n widgetName: resolvedWidgetName,\n variables: request.variables ?? {},\n providerContext,\n activeUser,\n };\n\n const startTime = Date.now();\n const providerResponse = await provider.getData(widgetDefinition, runtimeContext);\n const durationMs = Date.now() - startTime;\n\n if (providerResponse && typeof providerResponse === 'object' && providerResponse.data !== undefined) {\n const nextMeta = {\n ...(providerResponse.meta ?? {}),\n providerName,\n widgetName: runtimeContext.widgetName,\n durationMs: providerResponse?.meta?.durationMs ?? durationMs,\n generatedAt: providerResponse?.meta?.generatedAt ?? new Date().toISOString(),\n };\n\n return {\n ...providerResponse,\n meta: nextMeta,\n };\n }\n\n this.logger.debug(`Widget provider ${providerName} returned a non-envelope payload for ${runtimeContext.widgetName}. Normalizing response.`);\n return {\n meta: {\n providerName,\n widgetName: runtimeContext.widgetName,\n durationMs,\n generatedAt: new Date().toISOString(),\n },\n data: providerResponse,\n };\n }\n\n private parseFormValues(formValues?: Record<string, any> | string): Record<string, any> {\n if (!formValues) {\n return {};\n }\n if (typeof formValues === 'object') {\n return formValues;\n }\n\n try {\n const parsedFromQueryString = qs.parse(formValues);\n if (parsedFromQueryString && typeof parsedFromQueryString === 'object') {\n if (parsedFromQueryString['formValues'] && typeof parsedFromQueryString['formValues'] === 'object') {\n return parsedFromQueryString['formValues'] as Record<string, any>;\n }\n return parsedFromQueryString as Record<string, any>;\n }\n } catch (err) {\n // ignore parse errors and try JSON\n }\n\n try {\n return JSON.parse(formValues);\n } catch (err) {\n return {};\n }\n }\n\n private hasDashboardWidgetPermission(\n activeUser: ActiveUserData | undefined,\n dashboardName: string,\n widgetName: string,\n ): boolean {\n const permissions = Array.isArray(activeUser?.permissions) ? activeUser.permissions : [];\n if (!dashboardName || !widgetName || permissions.length === 0) {\n return false;\n }\n\n return permissions.some((permission) => this.matchesDashboardWidgetPermission(permission, dashboardName, widgetName));\n }\n\n private matchesDashboardWidgetPermission(permission: string, dashboardName: string, widgetName: string): boolean {\n const match = /^dashboard:([^:]+):(.+)$/.exec(`${permission ?? ''}`.trim());\n if (!match) {\n return false;\n }\n\n const [, permissionDashboardName, widgetPattern] = match;\n if (permissionDashboardName !== dashboardName || !widgetPattern) {\n return false;\n }\n\n if (widgetPattern === '*') {\n return true;\n }\n\n if (widgetPattern === widgetName) {\n return true;\n }\n\n try {\n return new RegExp(widgetPattern).test(widgetName);\n } catch {\n return false;\n }\n }\n\n private buildUnauthorizedWidgetResponse(\n dashboardName: string,\n widgetName: string,\n providerName?: string,\n ): any {\n return {\n meta: {\n providerName: providerName ?? null,\n widgetName,\n durationMs: 0,\n generatedAt: new Date().toISOString(),\n unauthorized: true,\n permissionExpression: `dashboard:${dashboardName}:${widgetName}`,\n },\n data: null,\n uiHints: {\n state: 'unauthorized',\n message: 'Unauthorized',\n },\n };\n }\n\n private parseLayoutJson(layoutJson: any): any {\n if (layoutJson === null || layoutJson === undefined) return null;\n if (typeof layoutJson !== 'string') return layoutJson;\n try {\n return JSON.parse(layoutJson);\n } catch {\n return layoutJson;\n }\n }\n\n private resolveLayoutPayload(dto: DashboardSaveLayoutDto | Record<string, any> | null | undefined): any {\n if (!dto) return {};\n if (dto.layoutJson !== undefined) return dto.layoutJson;\n if ((dto as any).layout !== undefined) return (dto as any).layout;\n return dto;\n }\n\n private mergeLayouts(defaultLayout: any, userLayout: any): any {\n if (!defaultLayout && !userLayout) return {};\n if (!defaultLayout) return userLayout ?? {};\n if (!userLayout) return defaultLayout ?? {};\n\n const defaultItems = Array.isArray(defaultLayout?.items) ? defaultLayout.items : [];\n const userItems = Array.isArray(userLayout?.items) ? userLayout.items : [];\n\n if (!defaultItems.length) {\n return {\n ...defaultLayout,\n ...userLayout,\n items: userItems,\n };\n }\n\n const userByWidget = new Map<string, any>();\n userItems.forEach((item: any) => {\n const key = item?.widgetId ?? item?.id;\n if (key) userByWidget.set(key, item);\n });\n\n const mergedDefaultItems = defaultItems.map((baseItem: any) => {\n const key = baseItem?.widgetId ?? baseItem?.id;\n if (!key) return baseItem;\n const override = userByWidget.get(key);\n return override ? { ...baseItem, ...override, widgetId: key } : baseItem;\n });\n\n const defaultKeys = new Set(\n defaultItems\n .map((item: any) => item?.widgetId ?? item?.id)\n .filter((value: any) => !!value)\n );\n\n const userOnlyItems = userItems.filter((item: any) => {\n const key = item?.widgetId ?? item?.id;\n return !!key && !defaultKeys.has(key);\n });\n\n return {\n ...defaultLayout,\n ...userLayout,\n columns: userLayout?.columns ?? defaultLayout?.columns ?? 12,\n items: [...mergedDefaultItems, ...userOnlyItems],\n };\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { ModuleRef } from "@nestjs/core";
2
+ import { EntityManager } from 'typeorm';
3
+ import { CRUDService } from '../services/crud.service';
4
+ import { DashboardUserLayout } from '../entities/dashboard-user-layout.entity';
5
+ import { DashboardUserLayoutRepository } from '../repositories/dashboard-user-layout.repository';
6
+ export declare class DashboardUserLayoutService extends CRUDService<DashboardUserLayout> {
7
+ readonly entityManager: EntityManager;
8
+ readonly repo: DashboardUserLayoutRepository;
9
+ readonly moduleRef: ModuleRef;
10
+ constructor(entityManager: EntityManager, repo: DashboardUserLayoutRepository, moduleRef: ModuleRef);
11
+ }
12
+ //# sourceMappingURL=dashboard-user-layout.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-user-layout.service.d.ts","sourceRoot":"","sources":["../../src/services/dashboard-user-layout.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAG,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AAEjG,qBACa,0BAA2B,SAAQ,WAAW,CAAC,mBAAmB,CAAC;IAG5E,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,IAAI,EAAE,6BAA6B;IAC5C,QAAQ,CAAC,SAAS,EAAE,SAAS;gBAFpB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,6BAA6B,EACnC,SAAS,EAAE,SAAS;CAKhC"}
@@ -12,28 +12,27 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.DashboardVariableService = void 0;
15
+ exports.DashboardUserLayoutService = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
- const core_1 = require("@nestjs/core");
18
17
  const typeorm_1 = require("@nestjs/typeorm");
18
+ const core_1 = require("@nestjs/core");
19
19
  const typeorm_2 = require("typeorm");
20
20
  const crud_service_1 = require("./crud.service");
21
- const dashboard_variable_repository_1 = require("../repository/dashboard-variable.repository");
22
- let DashboardVariableService = class DashboardVariableService extends crud_service_1.CRUDService {
21
+ const dashboard_user_layout_repository_1 = require("../repositories/dashboard-user-layout.repository");
22
+ let DashboardUserLayoutService = class DashboardUserLayoutService extends crud_service_1.CRUDService {
23
23
  constructor(entityManager, repo, moduleRef) {
24
- super(entityManager, repo, 'dashboardVariable', 'solid-core', moduleRef);
24
+ super(entityManager, repo, 'dashboardUserLayout', 'solid-core', moduleRef);
25
25
  this.entityManager = entityManager;
26
26
  this.repo = repo;
27
27
  this.moduleRef = moduleRef;
28
- this.logger = new common_1.Logger(this.constructor.name);
29
28
  }
30
29
  };
31
- exports.DashboardVariableService = DashboardVariableService;
32
- exports.DashboardVariableService = DashboardVariableService = __decorate([
30
+ exports.DashboardUserLayoutService = DashboardUserLayoutService;
31
+ exports.DashboardUserLayoutService = DashboardUserLayoutService = __decorate([
33
32
  (0, common_1.Injectable)(),
34
- __param(0, (0, typeorm_1.InjectEntityManager)()),
33
+ __param(0, (0, typeorm_1.InjectEntityManager)("default")),
35
34
  __metadata("design:paramtypes", [typeorm_2.EntityManager,
36
- dashboard_variable_repository_1.DashboardVariableRepository,
35
+ dashboard_user_layout_repository_1.DashboardUserLayoutRepository,
37
36
  core_1.ModuleRef])
38
- ], DashboardVariableService);
39
- //# sourceMappingURL=dashboard-variable.service.js.map
37
+ ], DashboardUserLayoutService);
38
+ //# sourceMappingURL=dashboard-user-layout.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-user-layout.service.js","sourceRoot":"","sources":["../../src/services/dashboard-user-layout.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAsD;AACtD,uCAA0C;AAC1C,qCAAwC;AACxC,iDAAwD;AAExD,uGAAiG;AAG1F,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,0BAAgC;IAC9E,YAEW,aAA4B,EAC5B,IAAmC,EACnC,SAAoB;QAG9B,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QALjE,kBAAa,GAAb,aAAa,CAAe;QAC5B,SAAI,GAAJ,IAAI,CAA+B;QACnC,cAAS,GAAT,SAAS,CAAW;IAIhC,CAAC;CACD,CAAA;AAVY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,6BAAmB,EAAC,SAAS,CAAC,CAAA;qCACP,uBAAa;QACtB,gEAA6B;QACxB,gBAAS;GALpB,0BAA0B,CAUtC","sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { EntityManager } from 'typeorm';\nimport { CRUDService } from 'src/services/crud.service';\nimport { DashboardUserLayout } from '../entities/dashboard-user-layout.entity';\nimport { DashboardUserLayoutRepository } from '../repositories/dashboard-user-layout.repository';\n\n@Injectable()\nexport class DashboardUserLayoutService extends CRUDService<DashboardUserLayout>{\n constructor(\n @InjectEntityManager(\"default\")\n readonly entityManager: EntityManager,\n readonly repo: DashboardUserLayoutRepository,\n readonly moduleRef: ModuleRef,\n \n ) {\n super(entityManager, repo, 'dashboardUserLayout', 'solid-core', moduleRef);\n }\n}"]}
@@ -0,0 +1,11 @@
1
+ import { MqMessageRepository } from "../../repository/mq-message.repository";
2
+ import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../../interfaces";
3
+ export declare class MqDashboardMessageBrokerVariableOptionsProvider implements ISelectionProvider<ISelectionProviderContext> {
4
+ private readonly mqMessageRepository;
5
+ constructor(mqMessageRepository: MqMessageRepository);
6
+ name(): string;
7
+ help(): string;
8
+ value(optionValue: string): Promise<ISelectionProviderValues | null>;
9
+ values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]>;
10
+ }
11
+ //# sourceMappingURL=mq-dashboard-message-broker-variable-options-provider.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mq-dashboard-message-broker-variable-options-provider.service.d.ts","sourceRoot":"","sources":["../../../src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAEzG,qBAEa,+CAAgD,YAAW,kBAAkB,CAAC,yBAAyB,CAAC;IAE7G,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAAnB,mBAAmB,EAAE,mBAAmB;IAG7D,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,MAAM;IAIR,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;IAKpE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC;CAyB7G"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MqDashboardMessageBrokerVariableOptionsProvider = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const selection_provider_decorator_1 = require("../../decorators/selection-provider.decorator");
15
+ const mq_message_repository_1 = require("../../repository/mq-message.repository");
16
+ let MqDashboardMessageBrokerVariableOptionsProvider = class MqDashboardMessageBrokerVariableOptionsProvider {
17
+ constructor(mqMessageRepository) {
18
+ this.mqMessageRepository = mqMessageRepository;
19
+ }
20
+ name() {
21
+ return "MqDashboardMessageBrokerVariableOptionsProvider";
22
+ }
23
+ help() {
24
+ return "Dynamic options provider for dashboard messageBroker variable.";
25
+ }
26
+ async value(optionValue) {
27
+ if (!optionValue)
28
+ return null;
29
+ return { label: optionValue, value: optionValue };
30
+ }
31
+ async values(query, ctxt) {
32
+ const qb = await this.mqMessageRepository.createSecurityRuleAwareQueryBuilder("mqMessage");
33
+ const limit = Math.min(Math.max(ctxt?.limit ?? 25, 1), 200);
34
+ const offset = Math.max(ctxt?.offset ?? 0, 0);
35
+ qb.select("DISTINCT mqMessage.messageBroker", "value")
36
+ .where("mqMessage.messageBroker IS NOT NULL");
37
+ if (query) {
38
+ qb.andWhere("mqMessage.messageBroker ILIKE :query", { query: `%${query}%` });
39
+ }
40
+ const rows = await qb
41
+ .orderBy("value", "ASC")
42
+ .take(limit)
43
+ .skip(offset)
44
+ .getRawMany();
45
+ return rows
46
+ .filter((r) => !!r?.value)
47
+ .map((r) => ({
48
+ label: r.value,
49
+ value: r.value,
50
+ }));
51
+ }
52
+ };
53
+ exports.MqDashboardMessageBrokerVariableOptionsProvider = MqDashboardMessageBrokerVariableOptionsProvider;
54
+ exports.MqDashboardMessageBrokerVariableOptionsProvider = MqDashboardMessageBrokerVariableOptionsProvider = __decorate([
55
+ (0, selection_provider_decorator_1.SelectionProvider)(),
56
+ (0, common_1.Injectable)(),
57
+ __metadata("design:paramtypes", [mq_message_repository_1.MqMessageRepository])
58
+ ], MqDashboardMessageBrokerVariableOptionsProvider);
59
+ //# sourceMappingURL=mq-dashboard-message-broker-variable-options-provider.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mq-dashboard-message-broker-variable-options-provider.service.js","sourceRoot":"","sources":["../../../src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,gGAAgF;AAChF,kFAA2E;AAKpE,IAAM,+CAA+C,GAArD,MAAM,+CAA+C;IACxD,YACqB,mBAAwC;QAAxC,wBAAmB,GAAnB,mBAAmB,CAAqB;IACzD,CAAC;IAEL,IAAI;QACA,OAAO,iDAAiD,CAAC;IAC7D,CAAC;IAED,IAAI;QACA,OAAO,gEAAgE,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAmB;QAC3B,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAA+B;QACvD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,mCAAmC,CAAC,WAAW,CAAC,CAAC;QAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9C,EAAE,CAAC,MAAM,CAAC,kCAAkC,EAAE,OAAO,CAAC;aACjD,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAElD,IAAI,KAAK,EAAE,CAAC;YACR,EAAE,CAAC,QAAQ,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,EAAE;aAChB,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;aACvB,IAAI,CAAC,KAAK,CAAC;aACX,IAAI,CAAC,MAAM,CAAC;aACZ,UAAU,EAAqB,CAAC;QAErC,OAAO,IAAI;aACN,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACT,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;SACjB,CAAC,CAAC,CAAC;IACZ,CAAC;CACJ,CAAA;AA3CY,0GAA+C;0DAA/C,+CAA+C;IAF3D,IAAA,gDAAiB,GAAE;IACnB,IAAA,mBAAU,GAAE;qCAGiC,2CAAmB;GAFpD,+CAA+C,CA2C3D","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { SelectionProvider } from \"src/decorators/selection-provider.decorator\";\nimport { MqMessageRepository } from \"src/repository/mq-message.repository\";\nimport { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from \"src/interfaces\";\n\n@SelectionProvider()\n@Injectable()\nexport class MqDashboardMessageBrokerVariableOptionsProvider implements ISelectionProvider<ISelectionProviderContext> {\n constructor(\n private readonly mqMessageRepository: MqMessageRepository,\n ) { }\n\n name(): string {\n return \"MqDashboardMessageBrokerVariableOptionsProvider\";\n }\n\n help(): string {\n return \"Dynamic options provider for dashboard messageBroker variable.\";\n }\n\n async value(optionValue: string): Promise<ISelectionProviderValues | null> {\n if (!optionValue) return null;\n return { label: optionValue, value: optionValue };\n }\n\n async values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]> {\n const qb = await this.mqMessageRepository.createSecurityRuleAwareQueryBuilder(\"mqMessage\");\n const limit = Math.min(Math.max(ctxt?.limit ?? 25, 1), 200);\n const offset = Math.max(ctxt?.offset ?? 0, 0);\n\n qb.select(\"DISTINCT mqMessage.messageBroker\", \"value\")\n .where(\"mqMessage.messageBroker IS NOT NULL\");\n\n if (query) {\n qb.andWhere(\"mqMessage.messageBroker ILIKE :query\", { query: `%${query}%` });\n }\n\n const rows = await qb\n .orderBy(\"value\", \"ASC\")\n .take(limit)\n .skip(offset)\n .getRawMany<{ value: string }>();\n\n return rows\n .filter((r) => !!r?.value)\n .map((r) => ({\n label: r.value,\n value: r.value,\n }));\n }\n}\n\n"]}
@@ -0,0 +1,11 @@
1
+ import { MqMessageQueueRepository } from "../../repository/mq-message-queue.repository";
2
+ import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../../interfaces";
3
+ export declare class MqDashboardQueueNameVariableOptionsProvider implements ISelectionProvider<ISelectionProviderContext> {
4
+ private readonly mqMessageQueueRepository;
5
+ constructor(mqMessageQueueRepository: MqMessageQueueRepository);
6
+ name(): string;
7
+ help(): string;
8
+ value(optionValue: string): Promise<ISelectionProviderValues | null>;
9
+ values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]>;
10
+ }
11
+ //# sourceMappingURL=mq-dashboard-queue-name-variable-options-provider.service.d.ts.map