@owox/backend 0.35.0 → 0.37.0

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 (294) hide show
  1. package/dist/src/common/exceptions/concurrency-limit-exceeded.exception.d.ts +1 -1
  2. package/dist/src/common/exceptions/concurrency-limit-exceeded.exception.js +2 -2
  3. package/dist/src/common/markdown/markdown-parser.service.d.ts +2 -0
  4. package/dist/src/common/markdown/markdown-parser.service.js +15 -8
  5. package/dist/src/common/validators/max-byte-length.validator.d.ts +2 -0
  6. package/dist/src/common/validators/max-byte-length.validator.js +29 -0
  7. package/dist/src/config/env-validation.config.d.ts +12 -0
  8. package/dist/src/config/env-validation.config.js +7 -0
  9. package/dist/src/data-marts/ai-insights/agent/types.d.ts +6 -6
  10. package/dist/src/data-marts/calculated-fields/calculated-field-validator.service.js +22 -30
  11. package/dist/src/data-marts/calculated-fields/calculated-field.utils.d.ts +1 -0
  12. package/dist/src/data-marts/calculated-fields/calculated-field.utils.js +21 -0
  13. package/dist/src/data-marts/calculated-fields/formula-analyzer.d.ts +1 -0
  14. package/dist/src/data-marts/calculated-fields/formula-analyzer.js +2 -0
  15. package/dist/src/data-marts/calculated-fields/formula-violations.d.ts +7 -0
  16. package/dist/src/data-marts/calculated-fields/formula-violations.js +82 -1
  17. package/dist/src/data-marts/calculated-fields/join-grain.d.ts +32 -0
  18. package/dist/src/data-marts/calculated-fields/join-grain.js +107 -0
  19. package/dist/src/data-marts/calculated-fields/set-quantifier.d.ts +8 -0
  20. package/dist/src/data-marts/calculated-fields/set-quantifier.js +12 -0
  21. package/dist/src/data-marts/connector-types/connector-message/schemas/connector-message.schema.d.ts +66 -0
  22. package/dist/src/data-marts/connector-types/connector-message/schemas/connector-message.schema.js +13 -1
  23. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-credentials-update.schema.d.ts +3 -0
  24. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-credentials-update.schema.js +1 -0
  25. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-error.schema.d.ts +3 -0
  26. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-error.schema.js +1 -0
  27. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-log.schema.d.ts +12 -0
  28. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-log.schema.js +4 -0
  29. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-requested-date.schema.d.ts +3 -0
  30. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-requested-date.schema.js +1 -0
  31. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-state-update.schema.d.ts +16 -0
  32. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-state-update.schema.js +16 -0
  33. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-status.schema.d.ts +3 -0
  34. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-status.schema.js +1 -0
  35. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-warning.schema.d.ts +3 -0
  36. package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-warning.schema.js +1 -0
  37. package/dist/src/data-marts/connector-types/connector-message/services/connector-event.translator.d.ts +10 -0
  38. package/dist/src/data-marts/connector-types/connector-message/services/connector-event.translator.js +138 -0
  39. package/dist/src/data-marts/connector-types/connector-message/services/connector-message-parser.service.d.ts +1 -3
  40. package/dist/src/data-marts/connector-types/connector-message/services/connector-message-parser.service.js +30 -34
  41. package/dist/src/data-marts/connector-types/connector-message/services/connector-output-capture.service.js +10 -12
  42. package/dist/src/data-marts/connector-types/connector-message/services/connector-state.service.js +3 -1
  43. package/dist/src/data-marts/connector-types/enums/connector-message-type-enum.d.ts +1 -0
  44. package/dist/src/data-marts/connector-types/enums/connector-message-type-enum.js +1 -0
  45. package/dist/src/data-marts/controllers/connector-definition.controller.d.ts +30 -0
  46. package/dist/src/data-marts/controllers/connector-definition.controller.js +252 -0
  47. package/dist/src/data-marts/controllers/data-mart-preview.controller.d.ts +10 -0
  48. package/dist/src/data-marts/controllers/data-mart-preview.controller.js +58 -0
  49. package/dist/src/data-marts/controllers/data-mart.controller.d.ts +5 -1
  50. package/dist/src/data-marts/controllers/data-mart.controller.js +25 -4
  51. package/dist/src/data-marts/controllers/insight-template.controller.js +4 -4
  52. package/dist/src/data-marts/controllers/insight.controller.js +5 -5
  53. package/dist/src/data-marts/controllers/project-data-mart-runs.controller.js +1 -1
  54. package/dist/src/data-marts/controllers/spec/connector-definition.api.d.ts +12 -0
  55. package/dist/src/data-marts/controllers/spec/connector-definition.api.js +179 -0
  56. package/dist/src/data-marts/controllers/spec/data-mart.api.d.ts +1 -0
  57. package/dist/src/data-marts/controllers/spec/data-mart.api.js +10 -5
  58. package/dist/src/data-marts/controllers/spec/report-openapi.d.ts +18 -0
  59. package/dist/src/data-marts/controllers/spec/report-openapi.js +3 -0
  60. package/dist/src/data-marts/data-marts.module.js +20 -2
  61. package/dist/src/data-marts/data-storage-types/blending/metric-sleeve.planner.js +3 -12
  62. package/dist/src/data-marts/data-storage-types/data-mart-schema.utils.d.ts +1 -0
  63. package/dist/src/data-marts/data-storage-types/data-mart-schema.utils.js +16 -0
  64. package/dist/src/data-marts/dto/domain/blendable-schema.dto.d.ts +10 -0
  65. package/dist/src/data-marts/dto/domain/blendable-schema.dto.js +71 -1
  66. package/dist/src/data-marts/dto/domain/create-data-mart.command.d.ts +3 -1
  67. package/dist/src/data-marts/dto/domain/create-data-mart.command.js +3 -1
  68. package/dist/src/data-marts/dto/domain/create-report.command.d.ts +3 -1
  69. package/dist/src/data-marts/dto/domain/create-report.command.js +3 -1
  70. package/dist/src/data-marts/dto/domain/data-mart-list-item.dto.d.ts +3 -1
  71. package/dist/src/data-marts/dto/domain/data-mart-list-item.dto.js +3 -1
  72. package/dist/src/data-marts/dto/domain/data-mart.dto.d.ts +4 -1
  73. package/dist/src/data-marts/dto/domain/data-mart.dto.js +5 -1
  74. package/dist/src/data-marts/dto/domain/model-canvas.dto.d.ts +4 -0
  75. package/dist/src/data-marts/dto/domain/report-like-read-plan.d.ts +2 -0
  76. package/dist/src/data-marts/dto/domain/report.dto.d.ts +3 -1
  77. package/dist/src/data-marts/dto/domain/report.dto.js +3 -1
  78. package/dist/src/data-marts/dto/domain/update-data-mart-icon.command.d.ts +9 -0
  79. package/dist/src/data-marts/dto/domain/update-data-mart-icon.command.js +19 -0
  80. package/dist/src/data-marts/dto/domain/update-report.command.d.ts +3 -1
  81. package/dist/src/data-marts/dto/domain/update-report.command.js +3 -1
  82. package/dist/src/data-marts/dto/presentation/create-data-mart-request-api.dto.d.ts +2 -0
  83. package/dist/src/data-marts/dto/presentation/create-data-mart-request-api.dto.js +16 -0
  84. package/dist/src/data-marts/dto/presentation/create-report-request-api.dto.d.ts +2 -0
  85. package/dist/src/data-marts/dto/presentation/create-report-request-api.dto.js +10 -0
  86. package/dist/src/data-marts/dto/presentation/custom-connector-response.dto.d.ts +46 -0
  87. package/dist/src/data-marts/dto/presentation/custom-connector-response.dto.js +216 -0
  88. package/dist/src/data-marts/dto/presentation/custom-connector.dto.d.ts +27 -0
  89. package/dist/src/data-marts/dto/presentation/custom-connector.dto.js +159 -0
  90. package/dist/src/data-marts/dto/presentation/data-mart-list-item-response-api.dto.d.ts +2 -0
  91. package/dist/src/data-marts/dto/presentation/data-mart-list-item-response-api.dto.js +11 -0
  92. package/dist/src/data-marts/dto/presentation/data-mart-response-api.dto.d.ts +2 -0
  93. package/dist/src/data-marts/dto/presentation/data-mart-response-api.dto.js +11 -0
  94. package/dist/src/data-marts/dto/presentation/list-data-marts-query-api.dto.js +1 -1
  95. package/dist/src/data-marts/dto/presentation/model-canvas-response-api.dto.d.ts +4 -0
  96. package/dist/src/data-marts/dto/presentation/model-canvas-response-api.dto.js +21 -0
  97. package/dist/src/data-marts/dto/presentation/preview-data-mart-request-api.dto.d.ts +7 -0
  98. package/dist/src/data-marts/dto/presentation/preview-data-mart-request-api.dto.js +56 -0
  99. package/dist/src/data-marts/dto/presentation/preview-data-mart-response-api.dto.d.ts +12 -0
  100. package/dist/src/data-marts/dto/presentation/preview-data-mart-response-api.dto.js +64 -0
  101. package/dist/src/data-marts/dto/presentation/report-response-api.dto.d.ts +2 -0
  102. package/dist/src/data-marts/dto/presentation/report-response-api.dto.js +6 -0
  103. package/dist/src/data-marts/dto/presentation/run-data-mart-request-api.dto.js +67 -0
  104. package/dist/src/data-marts/dto/presentation/update-data-mart-description-api.dto.js +3 -0
  105. package/dist/src/data-marts/dto/presentation/update-data-mart-icon-api.dto.d.ts +4 -0
  106. package/dist/src/data-marts/dto/presentation/update-data-mart-icon-api.dto.js +33 -0
  107. package/dist/src/data-marts/dto/presentation/update-report-request-api.dto.d.ts +2 -0
  108. package/dist/src/data-marts/dto/presentation/update-report-request-api.dto.js +10 -0
  109. package/dist/src/data-marts/dto/schemas/auto-aggregation-opt-out.schema.d.ts +15 -0
  110. package/dist/src/data-marts/dto/schemas/auto-aggregation-opt-out.schema.js +29 -0
  111. package/dist/src/data-marts/dto/schemas/data-mart-run/data-mart-run.schema.d.ts +9 -0
  112. package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/connector-definition.schema.d.ts +15 -0
  113. package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/connector-definition.schema.js +1 -0
  114. package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/data-mart-definition.schema.d.ts +7 -0
  115. package/dist/src/data-marts/dto/schemas/data-quality/data-quality-run.schema.d.ts +20 -0
  116. package/dist/src/data-marts/entities/connector-definition-version.entity.d.ts +16 -0
  117. package/dist/src/data-marts/entities/connector-definition-version.entity.js +78 -0
  118. package/dist/src/data-marts/entities/connector-definition.entity.d.ts +14 -0
  119. package/dist/src/data-marts/entities/connector-definition.entity.js +82 -0
  120. package/dist/src/data-marts/entities/data-mart.entity.d.ts +2 -0
  121. package/dist/src/data-marts/entities/data-mart.entity.js +5 -0
  122. package/dist/src/data-marts/entities/report.entity.d.ts +2 -0
  123. package/dist/src/data-marts/entities/report.entity.js +11 -0
  124. package/dist/src/data-marts/enums/data-mart-icon.enum.d.ts +81 -0
  125. package/dist/src/data-marts/enums/data-mart-icon.enum.js +85 -0
  126. package/dist/src/data-marts/errors/connector-credential-boundary.error.d.ts +3 -0
  127. package/dist/src/data-marts/errors/connector-credential-boundary.error.js +14 -0
  128. package/dist/src/data-marts/facades/mcp-data-marts.facade.d.ts +2 -0
  129. package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.d.ts +7 -1
  130. package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.js +70 -5
  131. package/dist/src/data-marts/mappers/connector-definition.mapper.d.ts +14 -0
  132. package/dist/src/data-marts/mappers/connector-definition.mapper.js +57 -0
  133. package/dist/src/data-marts/mappers/data-mart.mapper.d.ts +9 -6
  134. package/dist/src/data-marts/mappers/data-mart.mapper.js +44 -19
  135. package/dist/src/data-marts/mappers/insight-template.mapper.d.ts +1 -1
  136. package/dist/src/data-marts/mappers/insight-template.mapper.js +2 -2
  137. package/dist/src/data-marts/mappers/insight.mapper.d.ts +1 -1
  138. package/dist/src/data-marts/mappers/insight.mapper.js +2 -2
  139. package/dist/src/data-marts/mappers/model-canvas.mapper.d.ts +10 -2
  140. package/dist/src/data-marts/mappers/model-canvas.mapper.js +9 -3
  141. package/dist/src/data-marts/mappers/report.mapper.js +4 -3
  142. package/dist/src/data-marts/services/auto-collapse.resolver.d.ts +1 -1
  143. package/dist/src/data-marts/services/auto-collapse.resolver.js +4 -0
  144. package/dist/src/data-marts/services/blendable-schema.service.d.ts +2 -0
  145. package/dist/src/data-marts/services/blendable-schema.service.js +59 -0
  146. package/dist/src/data-marts/services/connector/connector-credential-injector.service.d.ts +1 -1
  147. package/dist/src/data-marts/services/connector/connector-credential-injector.service.js +15 -1
  148. package/dist/src/data-marts/services/connector/connector-definition.service.d.ts +59 -0
  149. package/dist/src/data-marts/services/connector/connector-definition.service.js +493 -0
  150. package/dist/src/data-marts/services/connector/connector-executor.service.d.ts +9 -1
  151. package/dist/src/data-marts/services/connector/connector-executor.service.js +173 -63
  152. package/dist/src/data-marts/services/connector/connector-fields-preview.service.js +1 -1
  153. package/dist/src/data-marts/services/connector/connector-message.utils.js +2 -2
  154. package/dist/src/data-marts/services/connector/connector-preview-credentials.service.js +1 -1
  155. package/dist/src/data-marts/services/connector/connector-preview-support.d.ts +1 -1
  156. package/dist/src/data-marts/services/connector/connector-preview-support.js +14 -21
  157. package/dist/src/data-marts/services/connector/connector-process-spawner.service.d.ts +11 -2
  158. package/dist/src/data-marts/services/connector/connector-process-spawner.service.js +88 -60
  159. package/dist/src/data-marts/services/connector/connector-secret.service.d.ts +6 -3
  160. package/dist/src/data-marts/services/connector/connector-secret.service.js +77 -12
  161. package/dist/src/data-marts/services/connector/connector-source-config.service.js +1 -1
  162. package/dist/src/data-marts/services/connector/connector-source-credentials.service.d.ts +6 -2
  163. package/dist/src/data-marts/services/connector/connector-source-credentials.service.js +18 -16
  164. package/dist/src/data-marts/services/connector/connector-specification.mapper.d.ts +47 -0
  165. package/dist/src/data-marts/services/connector/connector-specification.mapper.js +46 -0
  166. package/dist/src/data-marts/services/connector/connector-test.service.d.ts +44 -0
  167. package/dist/src/data-marts/services/connector/connector-test.service.js +348 -0
  168. package/dist/src/data-marts/services/connector/connector.service.d.ts +8 -2
  169. package/dist/src/data-marts/services/connector/connector.service.js +65 -54
  170. package/dist/src/data-marts/services/connector/declarative-manifest-schemas.d.ts +4 -0
  171. package/dist/src/data-marts/services/connector/declarative-manifest-schemas.js +48 -0
  172. package/dist/src/data-marts/services/connector/run-log-flusher.d.ts +21 -0
  173. package/dist/src/data-marts/services/connector/run-log-flusher.js +67 -0
  174. package/dist/src/data-marts/services/context/context-access.service.js +2 -2
  175. package/dist/src/data-marts/services/data-mart.service.js +2 -0
  176. package/dist/src/data-marts/services/member-ownership-warnings.service.js +1 -1
  177. package/dist/src/data-marts/services/report-access.service.js +1 -1
  178. package/dist/src/data-marts/services/report-sql-composer.service.js +15 -1
  179. package/dist/src/data-marts/services/report.service.d.ts +1 -0
  180. package/dist/src/data-marts/services/report.service.js +13 -0
  181. package/dist/src/data-marts/services/scheduled-trigger.service.d.ts +1 -0
  182. package/dist/src/data-marts/services/scheduled-trigger.service.js +13 -0
  183. package/dist/src/data-marts/use-cases/create-data-mart.service.js +1 -0
  184. package/dist/src/data-marts/use-cases/create-report.service.js +2 -0
  185. package/dist/src/data-marts/use-cases/get-model-canvas-data-marts.service.d.ts +5 -1
  186. package/dist/src/data-marts/use-cases/get-model-canvas-data-marts.service.js +16 -3
  187. package/dist/src/data-marts/use-cases/list-project-scheduled-triggers.service.js +1 -1
  188. package/dist/src/data-marts/use-cases/preview-data-mart.service.d.ts +59 -0
  189. package/dist/src/data-marts/use-cases/preview-data-mart.service.js +295 -0
  190. package/dist/src/data-marts/use-cases/stream-http-data.service.js +1 -0
  191. package/dist/src/data-marts/use-cases/update-availability.service.js +2 -2
  192. package/dist/src/data-marts/use-cases/update-data-mart-definition.service.d.ts +1 -1
  193. package/dist/src/data-marts/use-cases/update-data-mart-definition.service.js +9 -7
  194. package/dist/src/data-marts/use-cases/update-data-mart-icon.service.d.ts +12 -0
  195. package/dist/src/data-marts/use-cases/update-data-mart-icon.service.js +46 -0
  196. package/dist/src/data-marts/use-cases/update-data-mart-owners.service.js +1 -1
  197. package/dist/src/data-marts/use-cases/update-data-mart-schema.service.js +14 -1
  198. package/dist/src/data-marts/use-cases/update-data-storage.service.js +2 -2
  199. package/dist/src/data-marts/use-cases/update-report.service.js +9 -1
  200. package/dist/src/ee/ee.module.js +5 -8
  201. package/dist/src/ee/mcp/auth/mcp-auth-context.d.ts +0 -4
  202. package/dist/src/ee/mcp/auth/mcp-auth.middleware.d.ts +26 -0
  203. package/dist/src/ee/mcp/auth/mcp-auth.middleware.js +184 -0
  204. package/dist/src/ee/mcp/http-headers.util.d.ts +2 -0
  205. package/dist/src/ee/mcp/http-headers.util.js +8 -0
  206. package/dist/src/ee/mcp/instructions/mcp-system-instructions.d.ts +1 -1
  207. package/dist/src/ee/mcp/instructions/mcp-system-instructions.js +3 -3
  208. package/dist/src/ee/mcp/observability/mcp-bus-wiring.js +4 -4
  209. package/dist/src/ee/mcp/observability/mcp-call-instrumentation.d.ts +2 -4
  210. package/dist/src/ee/mcp/observability/mcp-call-instrumentation.js +6 -6
  211. package/dist/src/ee/mcp/sdk/mcp-sdk-server.factory.d.ts +1 -1
  212. package/dist/src/ee/mcp/sdk/mcp-sdk-server.factory.js +5 -5
  213. package/dist/src/ee/mcp/tools/add-destination.tool.d.ts +20 -14
  214. package/dist/src/ee/mcp/tools/add-destination.tool.js +10 -10
  215. package/dist/src/ee/mcp/tools/add-report.tool.d.ts +89 -229
  216. package/dist/src/ee/mcp/tools/add-report.tool.js +30 -30
  217. package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.d.ts +2 -12
  218. package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.js +14 -14
  219. package/dist/src/ee/mcp/tools/data-mart-catalog.tool.d.ts +15 -81
  220. package/dist/src/ee/mcp/tools/data-mart-catalog.tool.js +11 -11
  221. package/dist/src/ee/mcp/tools/data-mart-details.tool.d.ts +19 -111
  222. package/dist/src/ee/mcp/tools/data-mart-details.tool.js +64 -48
  223. package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.d.ts +2 -6
  224. package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.js +7 -7
  225. package/dist/src/ee/mcp/tools/delete-report.tool.d.ts +2 -6
  226. package/dist/src/ee/mcp/tools/delete-report.tool.js +4 -4
  227. package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.d.ts +30 -195
  228. package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.js +22 -22
  229. package/dist/src/ee/mcp/tools/get-report-output-schema.tool.d.ts +3 -21
  230. package/dist/src/ee/mcp/tools/get-report-output-schema.tool.js +16 -16
  231. package/dist/src/ee/mcp/tools/get-report-run-status.tool.d.ts +15 -11
  232. package/dist/src/ee/mcp/tools/get-report-run-status.tool.js +14 -14
  233. package/dist/src/ee/mcp/tools/list-destinations.tool.d.ts +12 -20
  234. package/dist/src/ee/mcp/tools/list-destinations.tool.js +10 -10
  235. package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.d.ts +5 -61
  236. package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.js +14 -14
  237. package/dist/src/ee/mcp/tools/mcp-getting-started.util.d.ts +4 -52
  238. package/dist/src/ee/mcp/tools/mcp-getting-started.util.js +15 -15
  239. package/dist/src/ee/mcp/tools/mcp-tool.definition.d.ts +2 -2
  240. package/dist/src/ee/mcp/tools/project-context.tool.d.ts +3 -17
  241. package/dist/src/ee/mcp/tools/project-context.tool.js +10 -10
  242. package/dist/src/ee/mcp/tools/query-data-mart.input.d.ts +111 -152
  243. package/dist/src/ee/mcp/tools/query-data-mart.input.js +39 -39
  244. package/dist/src/ee/mcp/tools/query-data-mart.tool.d.ts +60 -130
  245. package/dist/src/ee/mcp/tools/query-data-mart.tool.js +36 -36
  246. package/dist/src/ee/mcp/tools/report-output-controls-output.d.ts +17 -60
  247. package/dist/src/ee/mcp/tools/report-output-controls-output.js +20 -20
  248. package/dist/src/ee/mcp/tools/report-run-outcome.d.ts +6 -42
  249. package/dist/src/ee/mcp/tools/report-run-outcome.js +20 -20
  250. package/dist/src/ee/mcp/tools/run-report.tool.d.ts +2 -6
  251. package/dist/src/ee/mcp/tools/run-report.tool.js +6 -6
  252. package/dist/src/ee/mcp/tools/search-data-marts.tool.d.ts +7 -79
  253. package/dist/src/ee/mcp/tools/search-data-marts.tool.js +11 -11
  254. package/dist/src/ee/mcp/tools/search-reports.tool.d.ts +15 -61
  255. package/dist/src/ee/mcp/tools/search-reports.tool.js +15 -15
  256. package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.d.ts +7 -79
  257. package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.js +15 -15
  258. package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.d.ts +3 -13
  259. package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.js +16 -16
  260. package/dist/src/ee/mcp/tools/update-report.tool.d.ts +105 -414
  261. package/dist/src/ee/mcp/tools/update-report.tool.js +21 -21
  262. package/dist/src/ee/mcp/transport/mcp-http-entry.service.d.ts +30 -0
  263. package/dist/src/ee/mcp/transport/mcp-http-entry.service.js +193 -0
  264. package/dist/src/idp/decorators/auth.decorator.js +1 -1
  265. package/dist/src/idp/guards/idp.guard.js +3 -9
  266. package/dist/src/idp/oauth/controllers/oauth-authorization.controller.d.ts +4 -0
  267. package/dist/src/idp/oauth/controllers/oauth-authorization.controller.js +77 -1
  268. package/dist/src/idp/oauth/controllers/oauth-metadata.controller.d.ts +2 -1
  269. package/dist/src/idp/oauth/controllers/oauth-metadata.controller.js +5 -8
  270. package/dist/src/idp/oauth/controllers/oauth-token.controller.js +14 -1
  271. package/dist/src/idp/oauth/oauth-project-selection.service.js +1 -1
  272. package/dist/src/idp/oauth/oauth-request.validator.d.ts +8 -0
  273. package/dist/src/idp/oauth/oauth-request.validator.js +27 -0
  274. package/dist/src/idp/utils/is-authentication-error.d.ts +1 -0
  275. package/dist/src/idp/utils/is-authentication-error.js +9 -0
  276. package/dist/src/idp/utils/role-hierarchy.d.ts +3 -0
  277. package/dist/src/idp/utils/role-hierarchy.js +14 -0
  278. package/dist/src/index.d.ts +1 -0
  279. package/dist/src/index.js +3 -1
  280. package/dist/src/migrations/1788048000000-create-connector-definition-tables.d.ts +6 -0
  281. package/dist/src/migrations/1788048000000-create-connector-definition-tables.js +116 -0
  282. package/dist/src/migrations/1790156789783-add-auto-aggregation-opt-out-to-report.d.ts +8 -0
  283. package/dist/src/migrations/1790156789783-add-auto-aggregation-opt-out-to-report.js +30 -0
  284. package/dist/src/migrations/1790247861000-add-icon-to-data-mart.d.ts +8 -0
  285. package/dist/src/migrations/1790247861000-add-icon-to-data-mart.js +31 -0
  286. package/package.json +10 -6
  287. package/dist/src/ee/mcp/auth/mcp-auth.exception-filter.d.ts +0 -14
  288. package/dist/src/ee/mcp/auth/mcp-auth.exception-filter.js +0 -84
  289. package/dist/src/ee/mcp/auth/mcp-auth.guard.d.ts +0 -14
  290. package/dist/src/ee/mcp/auth/mcp-auth.guard.js +0 -99
  291. package/dist/src/ee/mcp/controllers/mcp-transport.controller.d.ts +0 -17
  292. package/dist/src/ee/mcp/controllers/mcp-transport.controller.js +0 -134
  293. package/dist/src/ee/mcp/sdk/mcp-streamable-http-transport.handler.d.ts +0 -16
  294. package/dist/src/ee/mcp/sdk/mcp-streamable-http-transport.handler.js +0 -133
@@ -0,0 +1,295 @@
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 __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var PreviewDataMartService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.PreviewDataMartService = exports.PreviewAbortedError = exports.CLIENT_CLOSED_REQUEST_STATUS = exports.PreviewDataMartCommand = exports.DEFAULT_PREVIEW_DEADLINE_MS = exports.PREVIEW_MAX_LIMIT = exports.PREVIEW_DEFAULT_LIMIT = void 0;
17
+ exports.toPreviewCell = toPreviewCell;
18
+ const common_1 = require("@nestjs/common");
19
+ const internal_helpers_1 = require("@owox/internal-helpers");
20
+ const business_violation_exception_1 = require("../../common/exceptions/business-violation.exception");
21
+ const type_resolver_1 = require("../../common/resolver/type-resolver");
22
+ const data_storage_providers_1 = require("../data-storage-types/data-storage-providers");
23
+ const data_mart_schema_utils_1 = require("../data-storage-types/data-mart-schema.utils");
24
+ const filter_config_schema_1 = require("../dto/schemas/filter-config.schema");
25
+ const sort_config_schema_1 = require("../dto/schemas/sort-config.schema");
26
+ const access_decision_1 = require("../services/access-decision");
27
+ const blendable_schema_service_1 = require("../services/blendable-schema.service");
28
+ const data_mart_service_1 = require("../services/data-mart.service");
29
+ const calculated_field_utils_1 = require("../calculated-fields/calculated-field.utils");
30
+ const project_billing_service_1 = require("../services/project-billing/project-billing.service");
31
+ const report_sql_composer_service_1 = require("../services/report-sql-composer.service");
32
+ exports.PREVIEW_DEFAULT_LIMIT = 10;
33
+ exports.PREVIEW_MAX_LIMIT = 1000;
34
+ exports.DEFAULT_PREVIEW_DEADLINE_MS = 150_000;
35
+ class PreviewDataMartCommand {
36
+ dataMartId;
37
+ projectId;
38
+ userId;
39
+ roles;
40
+ limit;
41
+ filters;
42
+ sort;
43
+ constructor(dataMartId, projectId, userId, roles, limit, filters, sort = undefined) {
44
+ this.dataMartId = dataMartId;
45
+ this.projectId = projectId;
46
+ this.userId = userId;
47
+ this.roles = roles;
48
+ this.limit = limit;
49
+ this.filters = filters;
50
+ this.sort = sort;
51
+ }
52
+ }
53
+ exports.PreviewDataMartCommand = PreviewDataMartCommand;
54
+ const INVALID_DATE_CELL = '[Invalid Date]';
55
+ exports.CLIENT_CLOSED_REQUEST_STATUS = 499;
56
+ class PreviewAbortedError extends common_1.HttpException {
57
+ constructor() {
58
+ super('Preview was cancelled', exports.CLIENT_CLOSED_REQUEST_STATUS);
59
+ this.name = 'PreviewAbortedError';
60
+ }
61
+ }
62
+ exports.PreviewAbortedError = PreviewAbortedError;
63
+ let PreviewDataMartService = PreviewDataMartService_1 = class PreviewDataMartService {
64
+ dataMartService;
65
+ blendableSchemaService;
66
+ composer;
67
+ readerResolver;
68
+ accessDecisionService;
69
+ errorMapperResolver;
70
+ projectBillingService;
71
+ deadlineMs;
72
+ logger = new common_1.Logger(PreviewDataMartService_1.name);
73
+ constructor(dataMartService, blendableSchemaService, composer, readerResolver, accessDecisionService, errorMapperResolver, projectBillingService, deadlineMs = exports.DEFAULT_PREVIEW_DEADLINE_MS) {
74
+ this.dataMartService = dataMartService;
75
+ this.blendableSchemaService = blendableSchemaService;
76
+ this.composer = composer;
77
+ this.readerResolver = readerResolver;
78
+ this.accessDecisionService = accessDecisionService;
79
+ this.errorMapperResolver = errorMapperResolver;
80
+ this.projectBillingService = projectBillingService;
81
+ this.deadlineMs = deadlineMs;
82
+ }
83
+ async run(command, signal) {
84
+ const limit = this.parseLimit(command.limit);
85
+ const filters = this.parseFilters(command.filters);
86
+ const sort = this.parseSort(command.sort);
87
+ const dataMart = await this.dataMartService.getByIdAndProjectId(command.dataMartId, command.projectId);
88
+ const canSee = await this.accessDecisionService.canAccess(command.userId, command.roles, access_decision_1.EntityType.DATA_MART, dataMart.id, access_decision_1.Action.SEE, command.projectId);
89
+ if (!canSee) {
90
+ throw new common_1.ForbiddenException('You do not have access to this Data Mart');
91
+ }
92
+ const accessor = { userId: command.userId, roles: command.roles };
93
+ const schema = await this.blendableSchemaService.computeBlendableSchema(dataMart.id, dataMart.projectId, accessor);
94
+ const calculatedNames = new Set((0, calculated_field_utils_1.calculatedFieldsOf)(schema.nativeFields).map(f => f.name));
95
+ const fields = schema.nativeFields
96
+ .filter(data_mart_schema_utils_1.isConnected)
97
+ .map(field => field.name)
98
+ .filter(name => !calculatedNames.has(name));
99
+ if (fields.length === 0) {
100
+ throw new common_1.BadRequestException('This Data Mart has no visible fields in its Output Schema yet. Refresh the schema, then preview again.');
101
+ }
102
+ const readPlan = {
103
+ dataMart,
104
+ columnConfig: fields,
105
+ filterConfig: filters,
106
+ sortConfig: sort,
107
+ limitConfig: limit + 1,
108
+ };
109
+ throwIfAborted(signal);
110
+ await this.projectBillingService.verifyCanPerformOperations(dataMart.projectId, project_billing_service_1.RunKind.HTTP_DATA_RUN);
111
+ throwIfAborted(signal);
112
+ let result;
113
+ try {
114
+ result = await this.readRows(dataMart, readPlan, accessor, schema, limit, signal);
115
+ }
116
+ catch (error) {
117
+ if (error instanceof common_1.HttpException || error instanceof business_violation_exception_1.BusinessViolationException) {
118
+ throw error;
119
+ }
120
+ this.logger.warn(`Preview of Data Mart ${dataMart.id} failed: ${(0, internal_helpers_1.castError)(error).message}`);
121
+ const mapper = await this.errorMapperResolver.resolve(dataMart.storage.type);
122
+ throw mapper.toStorageReadError(error, { force: true });
123
+ }
124
+ const truncated = result.rows.length > limit;
125
+ const rows = (truncated ? result.rows.slice(0, limit) : result.rows).map(row => row.map(toPreviewCell));
126
+ return { columns: result.columns, rows, rowCount: rows.length, limit, truncated };
127
+ }
128
+ parseLimit(limit) {
129
+ if (limit === undefined || limit === null)
130
+ return exports.PREVIEW_DEFAULT_LIMIT;
131
+ if (!Number.isInteger(limit) || limit < 1 || limit > exports.PREVIEW_MAX_LIMIT) {
132
+ throw new common_1.BadRequestException(`limit must be an integer between 1 and ${exports.PREVIEW_MAX_LIMIT}`);
133
+ }
134
+ return limit;
135
+ }
136
+ parseSort(sort) {
137
+ if (sort === undefined || sort === null)
138
+ return null;
139
+ const parsed = sort_config_schema_1.SortConfigSchema.safeParse(sort);
140
+ if (!parsed.success) {
141
+ throw new common_1.BadRequestException({ message: 'Invalid sort', details: parsed.error.issues });
142
+ }
143
+ return parsed.data?.length ? parsed.data : null;
144
+ }
145
+ parseFilters(filters) {
146
+ if (filters === undefined || filters === null)
147
+ return null;
148
+ const parsed = filter_config_schema_1.FilterConfigSchema.safeParse(filters);
149
+ if (!parsed.success) {
150
+ throw new common_1.BadRequestException({
151
+ message: 'Invalid filters',
152
+ details: parsed.error.issues,
153
+ });
154
+ }
155
+ return parsed.data?.length ? parsed.data : null;
156
+ }
157
+ async readRows(dataMart, readPlan, accessor, schema, limit, signal) {
158
+ const overReadLimit = limit + 1;
159
+ const workController = new AbortController();
160
+ let deadlineTimer;
161
+ let abortListener;
162
+ const deadline = new Promise((_, reject) => {
163
+ deadlineTimer = setTimeout(() => {
164
+ workController.abort();
165
+ reject(new common_1.GatewayTimeoutException(`The preview query did not finish within ${Math.round(this.deadlineMs / 1000)} seconds. Add a filter or lower the limit, then try again.`));
166
+ }, this.deadlineMs);
167
+ });
168
+ const aborted = new Promise((_, reject) => {
169
+ if (!signal)
170
+ return;
171
+ if (signal.aborted) {
172
+ workController.abort();
173
+ reject(new PreviewAbortedError());
174
+ return;
175
+ }
176
+ abortListener = () => {
177
+ workController.abort();
178
+ reject(new PreviewAbortedError());
179
+ };
180
+ signal.addEventListener('abort', abortListener, { once: true });
181
+ });
182
+ const produce = (async () => {
183
+ let reader;
184
+ try {
185
+ if (workController.signal.aborted)
186
+ throw new PreviewAbortedError();
187
+ const composed = await this.composer.compose(readPlan, accessor, undefined, schema);
188
+ if (workController.signal.aborted)
189
+ throw new PreviewAbortedError();
190
+ reader = await this.readerResolver.resolve(dataMart.storage.type);
191
+ if (!reader.honorsQueryTimeout) {
192
+ this.logger.warn(`Storage ${dataMart.storage.type} does not honor queryTimeoutMs; a preview it runs is not capped warehouse-side.`);
193
+ }
194
+ const description = await reader.prepareReportData(readPlan, {
195
+ sqlOverride: composed.sql,
196
+ sqlOverrideParams: composed.params,
197
+ columnFilter: readPlan.columnConfig ?? undefined,
198
+ blendedDataHeaders: composed.blendedDataHeaders,
199
+ primaryKeyColumns: composed.primaryKeyColumns,
200
+ calculatedFields: composed.calculatedFields,
201
+ queryTimeoutMs: this.deadlineMs,
202
+ signal: workController.signal,
203
+ });
204
+ const columns = description.dataHeaders.map(header => ({
205
+ name: header.name,
206
+ ...(header.alias ? { alias: header.alias } : {}),
207
+ ...(header.storageFieldType ? { type: String(header.storageFieldType) } : {}),
208
+ }));
209
+ const rows = [];
210
+ let batchId;
211
+ do {
212
+ if (workController.signal.aborted)
213
+ break;
214
+ const batch = await reader.readReportDataBatch(batchId, overReadLimit - rows.length);
215
+ rows.push(...batch.dataRows);
216
+ batchId = batch.nextDataBatchId ?? undefined;
217
+ if (batch.dataRows.length === 0)
218
+ break;
219
+ } while (batchId && rows.length < overReadLimit);
220
+ return { columns, rows };
221
+ }
222
+ finally {
223
+ workController.abort();
224
+ try {
225
+ await reader?.finalize();
226
+ }
227
+ catch (finalizeError) {
228
+ this.logger.warn(`reader.finalize() failed; ignoring: ${(0, internal_helpers_1.castError)(finalizeError).message}`);
229
+ }
230
+ }
231
+ })();
232
+ try {
233
+ return await Promise.race([produce, deadline, aborted]);
234
+ }
235
+ finally {
236
+ if (deadlineTimer)
237
+ clearTimeout(deadlineTimer);
238
+ if (signal && abortListener)
239
+ signal.removeEventListener('abort', abortListener);
240
+ }
241
+ }
242
+ };
243
+ exports.PreviewDataMartService = PreviewDataMartService;
244
+ exports.PreviewDataMartService = PreviewDataMartService = PreviewDataMartService_1 = __decorate([
245
+ (0, common_1.Injectable)(),
246
+ __param(3, (0, common_1.Inject)(data_storage_providers_1.DATA_STORAGE_REPORT_READER_RESOLVER)),
247
+ __param(5, (0, common_1.Inject)(data_storage_providers_1.DATA_STORAGE_ERROR_MAPPER_RESOLVER)),
248
+ __param(7, (0, common_1.Optional)()),
249
+ __metadata("design:paramtypes", [data_mart_service_1.DataMartService,
250
+ blendable_schema_service_1.BlendableSchemaService,
251
+ report_sql_composer_service_1.ReportSqlComposerService,
252
+ type_resolver_1.TypeResolver,
253
+ access_decision_1.AccessDecisionService,
254
+ type_resolver_1.TypeResolver,
255
+ project_billing_service_1.ProjectBillingService, Number])
256
+ ], PreviewDataMartService);
257
+ function throwIfAborted(signal) {
258
+ if (signal?.aborted)
259
+ throw new PreviewAbortedError();
260
+ }
261
+ function toPreviewCell(value) {
262
+ if (value === null || value === undefined)
263
+ return null;
264
+ if (typeof value === 'string' || typeof value === 'boolean')
265
+ return value;
266
+ if (typeof value === 'number')
267
+ return Number.isFinite(value) ? value : String(value);
268
+ if (typeof value === 'bigint')
269
+ return value.toString();
270
+ if (value instanceof Date) {
271
+ return Number.isNaN(value.getTime()) ? INVALID_DATE_CELL : value.toISOString();
272
+ }
273
+ if (Buffer.isBuffer(value))
274
+ return value.toString('base64');
275
+ if (typeof value === 'object') {
276
+ const toJSON = value.toJSON;
277
+ if (typeof toJSON === 'function') {
278
+ const json = toJSON.call(value);
279
+ if (json !== value)
280
+ return toPreviewCell(json);
281
+ }
282
+ const keys = Object.keys(value);
283
+ if (keys.length === 1 && keys[0] === 'value') {
284
+ return toPreviewCell(value.value);
285
+ }
286
+ try {
287
+ return JSON.stringify(value, (_key, inner) => typeof inner === 'bigint' ? inner.toString() : inner);
288
+ }
289
+ catch {
290
+ return String(value);
291
+ }
292
+ }
293
+ return String(value);
294
+ }
295
+ //# sourceMappingURL=preview-data-mart.service.js.map
@@ -238,6 +238,7 @@ let StreamHttpDataService = StreamHttpDataService_1 = class StreamHttpDataServic
238
238
  aggregationConfig: report.aggregationConfig ?? undefined,
239
239
  dateTruncConfig: report.dateTruncConfig ?? undefined,
240
240
  uniqueCountConfig: report.uniqueCountConfig ?? undefined,
241
+ autoAggregationOptOut: report.autoAggregationOptOut ?? undefined,
241
242
  limitConfig: limit ?? report.limitConfig ?? null,
242
243
  };
243
244
  const collapsed = excelReportRun ? (0, auto_collapse_resolver_1.applyAutoCollapse)(basePlan) : undefined;
@@ -41,7 +41,7 @@ let UpdateAvailabilityService = UpdateAvailabilityService_1 = class UpdateAvaila
41
41
  throw new common_1.NotFoundException('DataMart not found');
42
42
  const canConfigure = await this.accessDecisionService.canAccess(userId, roles, access_decision_1.EntityType.DATA_MART, dataMartId, access_decision_1.Action.CONFIGURE_SHARING, projectId);
43
43
  if (!canConfigure)
44
- throw new common_1.ForbiddenException('You do not have permission to configure sharing for this Data Mart. You must be the Technical Owner with the Technical User role, or a Project Admin.');
44
+ throw new common_1.ForbiddenException('You do not have permission to configure sharing for this Data Mart. You must be a Data Owner of this Data Mart with the Data Owner role, or a Project Admin.');
45
45
  dm.availableForReporting = availableForReporting;
46
46
  dm.availableForMaintenance = availableForMaintenance;
47
47
  await this.dataMartRepository.save(dm);
@@ -54,7 +54,7 @@ let UpdateAvailabilityService = UpdateAvailabilityService_1 = class UpdateAvaila
54
54
  throw new common_1.NotFoundException('Storage not found');
55
55
  const canConfigure = await this.accessDecisionService.canAccess(userId, roles, access_decision_1.EntityType.STORAGE, storageId, access_decision_1.Action.CONFIGURE_SHARING, projectId);
56
56
  if (!canConfigure)
57
- throw new common_1.ForbiddenException('You do not have permission to configure sharing for this Storage. You must be an owner with the Technical User role, or a Project Admin.');
57
+ throw new common_1.ForbiddenException('You do not have permission to configure sharing for this Storage. You must be an owner with the Data Owner role, or a Project Admin.');
58
58
  storage.availableForUse = availableForUse;
59
59
  storage.availableForMaintenance = availableForMaintenance;
60
60
  await this.dataStorageRepository.save(storage);
@@ -21,7 +21,7 @@ export declare class UpdateDataMartDefinitionService {
21
21
  private readonly advancedSearchIndexSync?;
22
22
  constructor(dataMartService: DataMartService, mapper: DataMartMapper, connectorSecretService: ConnectorSecretService, legacyDataMartsService: LegacyDataMartsService, accessDecisionService: AccessDecisionService, definitionValidatorFacade: DataMartDefinitionValidatorFacade, eventDispatcher: OwoxEventDispatcher, connectorService: ConnectorService, advancedSearchIndexSync?: AdvancedSearchIndexSyncService | undefined);
23
23
  run(command: UpdateDataMartDefinitionCommand): Promise<DataMartDto>;
24
- private getConnectorCapabilities;
24
+ private resolveConnectorCapabilities;
25
25
  private validateConnectorConfigurationCount;
26
26
  private validateCredentialCopyAccess;
27
27
  private validateSecretReferences;
@@ -66,7 +66,7 @@ let UpdateDataMartDefinitionService = class UpdateDataMartDefinitionService {
66
66
  this.assertDefinitionTypeChangeAllowed(previousDefinitionType, command.definitionType);
67
67
  definitionTypeChanged = true;
68
68
  }
69
- const connectorCapabilities = this.getConnectorCapabilities(command);
69
+ const connectorCapabilities = await this.resolveConnectorCapabilities(command);
70
70
  this.validateConnectorConfigurationCount(command, connectorCapabilities);
71
71
  if (dataMart.storage.type === data_storage_type_enum_1.DataStorageType.LEGACY_GOOGLE_BIGQUERY) {
72
72
  if (command.definitionType !== data_mart_definition_type_enum_1.DataMartDefinitionType.SQL) {
@@ -91,11 +91,11 @@ let UpdateDataMartDefinitionService = class UpdateDataMartDefinitionService {
91
91
  }
92
92
  this.validateSecretReferences(connectorDefinition, previousDefinition, sourceDefinition);
93
93
  if (sourceDefinition) {
94
- mergedDefinition = await this.connectorSecretService.mergeDefinitionSecretsFromSource(connectorDefinition, sourceDefinition);
95
- mergedDefinition = await this.connectorSecretService.mergeDefinitionSecrets(mergedDefinition, previousDefinition);
94
+ mergedDefinition = await this.connectorSecretService.mergeDefinitionSecretsFromSource(command.projectId, connectorDefinition, sourceDefinition);
95
+ mergedDefinition = await this.connectorSecretService.mergeDefinitionSecrets(command.projectId, mergedDefinition, previousDefinition);
96
96
  }
97
97
  else {
98
- mergedDefinition = await this.connectorSecretService.mergeDefinitionSecrets(connectorDefinition, previousDefinition);
98
+ mergedDefinition = await this.connectorSecretService.mergeDefinitionSecrets(command.projectId, connectorDefinition, previousDefinition);
99
99
  }
100
100
  dataMart.definition = await this.connectorSecretService.extractAndSaveSecrets(dataMart.id, command.projectId, connectorDefinition.connector.source.name, mergedDefinition);
101
101
  await this.connectorSecretService.deleteOrphanedSecrets(dataMart.id, dataMart.definition, previousDefinition);
@@ -119,13 +119,15 @@ let UpdateDataMartDefinitionService = class UpdateDataMartDefinitionService {
119
119
  await this.advancedSearchIndexSync?.scheduleReindex(search_facade_1.SearchableEntityType.DATA_MART, dataMart.id, command.projectId);
120
120
  return this.mapper.toDomainDto(dataMart);
121
121
  }
122
- getConnectorCapabilities(command) {
122
+ async resolveConnectorCapabilities(command) {
123
123
  if (command.definitionType !== data_mart_definition_type_enum_1.DataMartDefinitionType.CONNECTOR) {
124
124
  return undefined;
125
125
  }
126
126
  const definition = command.definition;
127
127
  const source = definition?.connector?.source;
128
- return source?.name ? this.connectorService.getConnectorCapabilities(source.name) : undefined;
128
+ return source?.name
129
+ ? this.connectorService.resolveConnectorCapabilities(command.projectId, source.name, source.version)
130
+ : undefined;
129
131
  }
130
132
  validateConnectorConfigurationCount(command, capabilities) {
131
133
  if (!capabilities?.singleConfiguration) {
@@ -144,7 +146,7 @@ let UpdateDataMartDefinitionService = class UpdateDataMartDefinitionService {
144
146
  const canCopyCredentials = await this.accessDecisionService.canAccess(command.userId, command.roles, access_decision_1.EntityType.DATA_MART, command.sourceDataMartId, access_decision_1.Action.EDIT, command.projectId);
145
147
  if (!canCopyCredentials) {
146
148
  throw new common_1.ForbiddenException('You do not have permission to copy connector credentials from the source Data Mart. ' +
147
- 'Ask its owner to add you as a Technical Owner or to turn on "Shared for maintenance", ' +
149
+ 'Ask its owner to add you as a Data Owner or to turn on "Shared for maintenance", ' +
148
150
  'or enter the credentials manually.');
149
151
  }
150
152
  }
@@ -0,0 +1,12 @@
1
+ import { DataMartMapper } from '../mappers/data-mart.mapper';
2
+ import { DataMartDto } from '../dto/domain/data-mart.dto';
3
+ import { DataMartService } from '../services/data-mart.service';
4
+ import { UpdateDataMartIconCommand } from '../dto/domain/update-data-mart-icon.command';
5
+ import { AccessDecisionService } from '../services/access-decision';
6
+ export declare class UpdateDataMartIconService {
7
+ private readonly dataMartService;
8
+ private readonly mapper;
9
+ private readonly accessDecisionService;
10
+ constructor(dataMartService: DataMartService, mapper: DataMartMapper, accessDecisionService: AccessDecisionService);
11
+ run(command: UpdateDataMartIconCommand): Promise<DataMartDto>;
12
+ }
@@ -0,0 +1,46 @@
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.UpdateDataMartIconService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const data_mart_mapper_1 = require("../mappers/data-mart.mapper");
15
+ const data_mart_service_1 = require("../services/data-mart.service");
16
+ const access_decision_1 = require("../services/access-decision");
17
+ let UpdateDataMartIconService = class UpdateDataMartIconService {
18
+ dataMartService;
19
+ mapper;
20
+ accessDecisionService;
21
+ constructor(dataMartService, mapper, accessDecisionService) {
22
+ this.dataMartService = dataMartService;
23
+ this.mapper = mapper;
24
+ this.accessDecisionService = accessDecisionService;
25
+ }
26
+ async run(command) {
27
+ const dataMart = await this.dataMartService.getByIdAndProjectId(command.id, command.projectId);
28
+ if (command.userId) {
29
+ const canEdit = await this.accessDecisionService.canAccess(command.userId, command.roles, access_decision_1.EntityType.DATA_MART, command.id, access_decision_1.Action.EDIT, command.projectId);
30
+ if (!canEdit) {
31
+ throw new common_1.ForbiddenException('You do not have permission to edit this DataMart');
32
+ }
33
+ }
34
+ dataMart.icon = command.icon;
35
+ await this.dataMartService.save(dataMart);
36
+ return this.mapper.toDomainDto(dataMart);
37
+ }
38
+ };
39
+ exports.UpdateDataMartIconService = UpdateDataMartIconService;
40
+ exports.UpdateDataMartIconService = UpdateDataMartIconService = __decorate([
41
+ (0, common_1.Injectable)(),
42
+ __metadata("design:paramtypes", [data_mart_service_1.DataMartService,
43
+ data_mart_mapper_1.DataMartMapper,
44
+ access_decision_1.AccessDecisionService])
45
+ ], UpdateDataMartIconService);
46
+ //# sourceMappingURL=update-data-mart-icon.service.js.map
@@ -51,7 +51,7 @@ let UpdateDataMartOwnersService = UpdateDataMartOwnersService_1 = class UpdateDa
51
51
  if (command.userId) {
52
52
  const canManage = await this.accessDecisionService.canAccess(command.userId, command.roles, access_decision_1.EntityType.DATA_MART, command.id, access_decision_1.Action.MANAGE_OWNERS, command.projectId);
53
53
  if (!canManage) {
54
- throw new common_1.ForbiddenException('You do not have permission to manage owners of this Data Mart. You must be the Technical Owner with the Technical User role, or a Project Admin.');
54
+ throw new common_1.ForbiddenException('You do not have permission to manage owners of this Data Mart. You must be a Data Owner of this Data Mart with the Data Owner role, or a Project Admin.');
55
55
  }
56
56
  }
57
57
  await Promise.all([
@@ -18,7 +18,9 @@ const data_mart_entity_1 = require("../entities/data-mart.entity");
18
18
  const calculated_field_utils_1 = require("../calculated-fields/calculated-field.utils");
19
19
  const calculated_field_validator_service_1 = require("../calculated-fields/calculated-field-validator.service");
20
20
  const formula_violations_1 = require("../calculated-fields/formula-violations");
21
+ const join_grain_1 = require("../calculated-fields/join-grain");
21
22
  const data_storage_credentials_resolver_service_1 = require("../data-storage-types/data-storage-credentials-resolver.service");
23
+ const data_mart_schema_utils_1 = require("../data-storage-types/data-mart-schema.utils");
22
24
  const data_mart_schema_field_status_enum_1 = require("../data-storage-types/enums/data-mart-schema-field-status.enum");
23
25
  const data_mart_schema_parser_facade_service_1 = require("../data-storage-types/facades/data-mart-schema-parser-facade.service");
24
26
  const data_mart_mapper_1 = require("../mappers/data-mart.mapper");
@@ -57,6 +59,7 @@ let UpdateDataMartSchemaService = UpdateDataMartSchemaService_1 = class UpdateDa
57
59
  }
58
60
  const parsed = await this.schemaParserFacade.validateAndParse(command.schema, dataMart.storage.type);
59
61
  const introducesNativeField = applyServerOwnedFieldStatuses(parsed, dataMart.schema);
62
+ const previousFields = dataMart.schema?.fields ?? [];
60
63
  dataMart.schema = parsed;
61
64
  if (introducesNativeField) {
62
65
  dataMart.schemaActualizedAt = null;
@@ -102,7 +105,11 @@ let UpdateDataMartSchemaService = UpdateDataMartSchemaService_1 = class UpdateDa
102
105
  await this.saveAndInvalidate(dataMart);
103
106
  await this.searchIndexInvalidation?.scheduleDataMartSchemaChanged(dataMart.id, command.projectId);
104
107
  this.logger.debug(`Data mart ${command.id} schema updated`);
105
- return { ...this.mapper.toDomainDto(dataMart), warnings };
108
+ return {
109
+ ...this.mapper.toDomainDto(dataMart),
110
+ warnings: (0, join_grain_1.withoutUntouchedJoinAdvisories)(warnings, editedCalculatedFields(previousFields, calculatedFields), (0, data_mart_schema_utils_1.declaredPrimaryKeyFields)(previousFields).sort().join('\n') !==
111
+ (0, data_mart_schema_utils_1.declaredPrimaryKeyFields)(parsed.fields).sort().join('\n')),
112
+ };
106
113
  }
107
114
  async saveAndInvalidate(dataMart) {
108
115
  await this.dataMartService.save(dataMart);
@@ -158,4 +165,10 @@ function applyFieldStatuses(fields, persistedFields) {
158
165
  function nestedFieldsOf(field) {
159
166
  return 'fields' in field && Array.isArray(field.fields) ? field.fields : undefined;
160
167
  }
168
+ function editedCalculatedFields(previousFields, calculatedFields) {
169
+ const previous = new Map((0, calculated_field_utils_1.calculatedFieldsOf)(previousFields).map(field => [field.name, field.calculated.formula]));
170
+ return new Set(calculatedFields
171
+ .filter(field => previous.get(field.name) !== field.calculated.formula)
172
+ .map(field => field.name));
173
+ }
161
174
  //# sourceMappingURL=update-data-mart-schema.service.js.map
@@ -72,14 +72,14 @@ let UpdateDataStorageService = class UpdateDataStorageService {
72
72
  if (command.ownerIds !== undefined && command.userId) {
73
73
  const canManage = await this.accessDecisionService.canAccess(command.userId, command.roles, access_decision_1.EntityType.STORAGE, command.id, access_decision_1.Action.MANAGE_OWNERS, command.projectId);
74
74
  if (!canManage) {
75
- throw new common_1.ForbiddenException('You do not have permission to manage owners of this Storage. You must be an owner with the Technical User role, or a Project Admin.');
75
+ throw new common_1.ForbiddenException('You do not have permission to manage owners of this Storage. You must be an owner with the Data Owner role, or a Project Admin.');
76
76
  }
77
77
  }
78
78
  if ((command.availableForUse !== undefined || command.availableForMaintenance !== undefined) &&
79
79
  command.userId) {
80
80
  const canConfigure = await this.accessDecisionService.canAccess(command.userId, command.roles, access_decision_1.EntityType.STORAGE, command.id, access_decision_1.Action.CONFIGURE_SHARING, command.projectId);
81
81
  if (!canConfigure) {
82
- throw new common_1.ForbiddenException('You do not have permission to configure sharing for this Storage. You must be an owner with the Technical User role, or a Project Admin.');
82
+ throw new common_1.ForbiddenException('You do not have permission to configure sharing for this Storage. You must be an owner with the Data Owner role, or a Project Admin.');
83
83
  }
84
84
  }
85
85
  const dataStorageEntity = await this.dataStorageService.getByProjectIdAndId(command.projectId, command.id);
@@ -32,6 +32,7 @@ const report_access_service_1 = require("../services/report-access.service");
32
32
  const report_data_cache_service_1 = require("../services/report-data-cache.service");
33
33
  const output_controls_validator_service_1 = require("../services/output-controls-validator.service");
34
34
  const unique_count_sources_1 = require("../dto/schemas/unique-count-sources");
35
+ const auto_aggregation_opt_out_schema_1 = require("../dto/schemas/auto-aggregation-opt-out.schema");
35
36
  const advanced_search_index_sync_service_1 = require("../services/advanced-search-index-sync.service");
36
37
  const search_facade_1 = require("../../common/search/search.facade");
37
38
  let UpdateReportService = class UpdateReportService {
@@ -132,6 +133,11 @@ let UpdateReportService = class UpdateReportService {
132
133
  const previousDateTruncConfig = report.dateTruncConfig ?? null;
133
134
  const nextDateTruncConfig = command.dateTruncConfig ?? null;
134
135
  const dateTruncChanged = JSON.stringify(previousDateTruncConfig) !== JSON.stringify(nextDateTruncConfig);
136
+ const previousAutoAggregationOptOut = (0, auto_aggregation_opt_out_schema_1.foldEmptyAutoAggregationOptOut)(report.autoAggregationOptOut);
137
+ const nextAutoAggregationOptOut = (0, auto_aggregation_opt_out_schema_1.selectedAutoAggregationOptOut)(command.autoAggregationOptOut === undefined
138
+ ? previousAutoAggregationOptOut
139
+ : command.autoAggregationOptOut, nextColumnConfig);
140
+ const autoAggregationOptOutChanged = JSON.stringify(previousAutoAggregationOptOut) !== JSON.stringify(nextAutoAggregationOptOut);
135
141
  report.title = command.title;
136
142
  report.dataDestination = dataDestination;
137
143
  report.destinationConfig = command.destinationConfig;
@@ -142,6 +148,7 @@ let UpdateReportService = class UpdateReportService {
142
148
  report.aggregationConfig = nextAggregationConfig;
143
149
  report.dateTruncConfig = nextDateTruncConfig;
144
150
  report.uniqueCountConfig = nextUniqueCountConfig;
151
+ report.autoAggregationOptOut = nextAutoAggregationOptOut;
145
152
  const updatedReport = await this.reportRepository.save(report);
146
153
  await this.advancedSearchIndexSync?.scheduleReindex(search_facade_1.SearchableEntityType.REPORT, updatedReport.id, command.projectId);
147
154
  if (command.ownerIds !== undefined) {
@@ -158,7 +165,8 @@ let UpdateReportService = class UpdateReportService {
158
165
  limitChanged ||
159
166
  aggregationChanged ||
160
167
  dateTruncChanged ||
161
- uniqueCountChanged) {
168
+ uniqueCountChanged ||
169
+ autoAggregationOptOutChanged) {
162
170
  await this.reportDataCacheService.invalidateByReportId(updatedReport.id);
163
171
  }
164
172
  const fresh = await this.reportRepository.findOne({
@@ -15,15 +15,13 @@ const mcp_resource_module_1 = require("../mcp-resource/mcp-resource.module");
15
15
  const project_settings_module_1 = require("../project-settings/project-settings.module");
16
16
  const idp_mcp_auth_adapter_1 = require("./mcp/auth/idp-mcp-auth.adapter");
17
17
  const mcp_auth_port_1 = require("./mcp/auth/mcp-auth.port");
18
- const mcp_auth_exception_filter_1 = require("./mcp/auth/mcp-auth.exception-filter");
19
- const mcp_auth_guard_1 = require("./mcp/auth/mcp-auth.guard");
18
+ const mcp_auth_middleware_1 = require("./mcp/auth/mcp-auth.middleware");
20
19
  const mcp_config_1 = require("./mcp/config/mcp.config");
21
20
  const mcp_metadata_controller_1 = require("./mcp/controllers/mcp-metadata.controller");
22
- const mcp_transport_controller_1 = require("./mcp/controllers/mcp-transport.controller");
23
21
  const mcp_bus_extras_module_1 = require("./mcp/observability/mcp-bus-extras.module");
24
22
  const mcp_call_instrumentation_1 = require("./mcp/observability/mcp-call-instrumentation");
25
23
  const mcp_sdk_server_factory_1 = require("./mcp/sdk/mcp-sdk-server.factory");
26
- const mcp_streamable_http_transport_handler_1 = require("./mcp/sdk/mcp-streamable-http-transport.handler");
24
+ const mcp_http_entry_service_1 = require("./mcp/transport/mcp-http-entry.service");
27
25
  const mcp_instructions_service_1 = require("./mcp/instructions/mcp-instructions.service");
28
26
  const mcp_tool_providers_1 = require("./mcp/tools/mcp-tool.providers");
29
27
  const mcp_tool_registry_1 = require("./mcp/tools/mcp-tool.registry");
@@ -40,7 +38,7 @@ exports.EeModule = EeModule = __decorate([
40
38
  project_settings_module_1.ProjectSettingsModule,
41
39
  mcp_bus_extras_module_1.McpBusExtrasModule,
42
40
  ],
43
- controllers: [mcp_metadata_controller_1.McpMetadataController, mcp_transport_controller_1.McpTransportController],
41
+ controllers: [mcp_metadata_controller_1.McpMetadataController],
44
42
  providers: [
45
43
  mcp_config_1.McpConfigService,
46
44
  idp_mcp_auth_adapter_1.IdpMcpAuthAdapter,
@@ -48,15 +46,14 @@ exports.EeModule = EeModule = __decorate([
48
46
  provide: mcp_auth_port_1.MCP_AUTH_PORT,
49
47
  useExisting: idp_mcp_auth_adapter_1.IdpMcpAuthAdapter,
50
48
  },
51
- mcp_auth_guard_1.McpAuthGuard,
52
- mcp_auth_exception_filter_1.McpAuthExceptionFilter,
49
+ mcp_auth_middleware_1.McpAuthMiddleware,
53
50
  ...mcp_tool_providers_1.MCP_TOOL_PROVIDER_CLASSES,
54
51
  mcp_tool_providers_1.MCP_TOOL_DEFINITIONS_PROVIDER,
55
52
  mcp_tool_registry_1.McpToolRegistry,
56
53
  mcp_call_instrumentation_1.McpCallInstrumentation,
57
54
  mcp_sdk_server_factory_1.McpSdkServerFactory,
58
55
  mcp_instructions_service_1.McpInstructionsService,
59
- mcp_streamable_http_transport_handler_1.McpStreamableHttpTransportHandler,
56
+ mcp_http_entry_service_1.McpHttpEntryService,
60
57
  ],
61
58
  exports: [mcp_config_1.McpConfigService],
62
59
  })
@@ -1,6 +1,2 @@
1
- import type { Request } from 'express';
2
1
  import type { McpTokenPayload } from '@owox/idp-protocol';
3
2
  export type McpAuthContext = McpTokenPayload;
4
- export interface McpAuthenticatedRequest extends Request {
5
- mcpContext: McpAuthContext;
6
- }
@@ -0,0 +1,26 @@
1
+ import type { Request, RequestHandler } from 'express';
2
+ import type { AuthInfo } from '@modelcontextprotocol/server';
3
+ import type { McpTokenPayload } from '@owox/idp-protocol';
4
+ import { McpResourceResolverService } from '../../../mcp-resource/mcp-resource-resolver.service';
5
+ import { McpConfigService } from '../config/mcp.config';
6
+ import { type McpAuthPort } from './mcp-auth.port';
7
+ export interface McpAuthenticatedRequest extends Request {
8
+ auth?: AuthInfo;
9
+ }
10
+ export declare class McpAuthMiddleware {
11
+ private readonly auth;
12
+ private readonly resourceResolver;
13
+ private readonly config;
14
+ private readonly logger;
15
+ constructor(auth: McpAuthPort, resourceResolver: McpResourceResolverService, config: McpConfigService);
16
+ handle: RequestHandler;
17
+ private verify;
18
+ private reject;
19
+ private rejectUnexpected;
20
+ private extractBearerToken;
21
+ private getRequestedSessionId;
22
+ private assertPayload;
23
+ private getChallengeHeader;
24
+ private isExpectedAnonymousProbe;
25
+ }
26
+ export declare function toMcpAuthContext(authInfo: AuthInfo | undefined): McpTokenPayload;