@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
@@ -14,19 +14,19 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.CreateReportRunScheduleTool = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
- const zod_1 = require("zod");
17
+ const zod_v4_1 = require("zod-v4");
18
18
  const public_origin_service_1 = require("../../../common/config/public-origin.service");
19
19
  const mcp_scheduled_triggers_facade_1 = require("../../../data-marts/facades/mcp-scheduled-triggers.facade");
20
20
  const mcp_tool_definition_1 = require("./mcp-tool.definition");
21
21
  const data_mart_ui_path_1 = require("./data-mart-ui-path");
22
22
  const mcp_public_url_util_1 = require("./mcp-public-url.util");
23
23
  const DEFAULT_TIME_ZONE = 'UTC';
24
- const inputSchema = zod_1.z
24
+ const inputSchema = zod_v4_1.z
25
25
  .object({
26
- report_id: zod_1.z.string().trim().min(1),
27
- cron_expression: zod_1.z.string().trim().min(1),
28
- time_zone: zod_1.z.string().trim().min(1).optional(),
29
- is_active: zod_1.z.boolean().optional(),
26
+ report_id: zod_v4_1.z.string().trim().min(1),
27
+ cron_expression: zod_v4_1.z.string().trim().min(1),
28
+ time_zone: zod_v4_1.z.string().trim().min(1).optional(),
29
+ is_active: zod_v4_1.z.boolean().optional(),
30
30
  })
31
31
  .strict();
32
32
  let CreateReportRunScheduleTool = class CreateReportRunScheduleTool {
@@ -36,19 +36,19 @@ let CreateReportRunScheduleTool = class CreateReportRunScheduleTool {
36
36
  description = 'Creates a new recurring run schedule for a report. Translate the user\'s natural-language schedule ("every Monday at 9am", "daily at midnight") into a standard 5-field cron expression before calling (e.g. "0 9 * * 1"). This creates an additional schedule and does not replace, delete, or update existing schedules for the same report. To change an existing schedule, first call list_report_run_schedules and then call update_report_run_schedule with the specific trigger_id. time_zone must be a valid IANA timezone (e.g. "Europe/Kyiv"); if the user does not specify one, default to UTC and confirm with them. is_active defaults to true.';
37
37
  zodSchema = inputSchema.shape;
38
38
  outputSchema = {
39
- trigger_id: zod_1.z.string(),
40
- report_id: zod_1.z.string(),
41
- schedules_url: zod_1.z.string().describe('Open report schedules in OWOX.'),
42
- cron_expression: zod_1.z.string(),
43
- time_zone: zod_1.z.string(),
44
- is_active: zod_1.z.boolean(),
45
- next_run_at: zod_1.z.string().nullable(),
39
+ trigger_id: zod_v4_1.z.string(),
40
+ report_id: zod_v4_1.z.string(),
41
+ schedules_url: zod_v4_1.z.string().describe('Open report schedules in OWOX.'),
42
+ cron_expression: zod_v4_1.z.string(),
43
+ time_zone: zod_v4_1.z.string(),
44
+ is_active: zod_v4_1.z.boolean(),
45
+ next_run_at: zod_v4_1.z.string().nullable(),
46
46
  };
47
47
  annotations = {
48
48
  title: 'Create Report Run Schedule',
49
49
  readOnlyHint: false,
50
50
  destructiveHint: false,
51
- openWorldHint: false,
51
+ openWorldHint: true,
52
52
  };
53
53
  requiredScopes = ['mcp:read', 'mcp:write'];
54
54
  constructor(facade, publicOriginService) {
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod-v4';
2
2
  import type { McpScope } from '@owox/idp-protocol';
3
3
  import { PublicOriginService } from '../../../common/config/public-origin.service';
4
4
  import { type McpProjectContextFacade } from '../../../idp/facades/mcp-project-context.facade';
@@ -6,12 +6,11 @@ import { type McpDataMartsFacade } from '../../../data-marts/facades/mcp-data-ma
6
6
  import type { McpAuthContext } from '../auth/mcp-auth-context';
7
7
  import { type McpToolDefinition, type McpToolResult } from './mcp-tool.definition';
8
8
  declare const inputSchema: z.ZodObject<{
9
- status: z.ZodOptional<z.ZodEnum<["published", "draft"]>>;
10
- }, "strict", z.ZodTypeAny, {
11
- status?: "published" | "draft" | undefined;
12
- }, {
13
- status?: "published" | "draft" | undefined;
14
- }>;
9
+ status: z.ZodOptional<z.ZodEnum<{
10
+ draft: "draft";
11
+ published: "published";
12
+ }>>;
13
+ }, z.core.$strict>;
15
14
  type ListDataMartsInput = z.infer<typeof inputSchema>;
16
15
  export declare class ListDataMartsTool implements McpToolDefinition<ListDataMartsInput> {
17
16
  private readonly dataMarts;
@@ -20,19 +19,16 @@ export declare class ListDataMartsTool implements McpToolDefinition<ListDataMart
20
19
  readonly name = "list_data_marts";
21
20
  readonly description = "List data marts available to the current OWOX project member. Defaults to published data marts; use status=draft only to browse draft metadata, because other MCP data-mart tools accept published data marts only. Use only when the user explicitly asks to list or browse data marts; for a concrete analytical question use get_relevant_data_marts_by_prompt instead, and for open-ended orientation use summarize_data_catalog.";
22
21
  readonly zodSchema: {
23
- status: z.ZodOptional<z.ZodEnum<["published", "draft"]>>;
22
+ status: z.ZodOptional<z.ZodEnum<{
23
+ draft: "draft";
24
+ published: "published";
25
+ }>>;
24
26
  };
25
27
  readonly outputSchema: {
26
28
  project: z.ZodOptional<z.ZodObject<{
27
29
  id: z.ZodString;
28
30
  title: z.ZodString;
29
- }, "strip", z.ZodTypeAny, {
30
- id: string;
31
- title: string;
32
- }, {
33
- id: string;
34
- title: string;
35
- }>>;
31
+ }, z.core.$strip>>;
36
32
  data_marts: z.ZodArray<z.ZodObject<{
37
33
  id: z.ZodString;
38
34
  title: z.ZodString;
@@ -40,21 +36,7 @@ export declare class ListDataMartsTool implements McpToolDefinition<ListDataMart
40
36
  url: z.ZodString;
41
37
  status: z.ZodString;
42
38
  updated_at: z.ZodString;
43
- }, "strip", z.ZodTypeAny, {
44
- id: string;
45
- title: string;
46
- status: string;
47
- description: string;
48
- url: string;
49
- updated_at: string;
50
- }, {
51
- id: string;
52
- title: string;
53
- status: string;
54
- description: string;
55
- url: string;
56
- updated_at: string;
57
- }>, "many">;
39
+ }, z.core.$strip>>;
58
40
  getting_started: z.ZodOptional<z.ZodObject<{
59
41
  reason: z.ZodLiteral<"no_published_data_marts">;
60
42
  can_create_data_marts: z.ZodBoolean;
@@ -64,62 +46,14 @@ export declare class ListDataMartsTool implements McpToolDefinition<ListDataMart
64
46
  core_concepts: z.ZodString;
65
47
  connector_data_mart: z.ZodString;
66
48
  sql_data_mart: z.ZodString;
67
- }, "strip", z.ZodTypeAny, {
68
- core_concepts: string;
69
- connector_data_mart: string;
70
- sql_data_mart: string;
71
- }, {
72
- core_concepts: string;
73
- connector_data_mart: string;
74
- sql_data_mart: string;
75
- }>;
49
+ }, z.core.$strip>;
76
50
  draft_data_marts: z.ZodArray<z.ZodObject<{
77
51
  id: z.ZodString;
78
52
  title: z.ZodString;
79
53
  url: z.ZodString;
80
- }, "strip", z.ZodTypeAny, {
81
- id: string;
82
- title: string;
83
- url: string;
84
- }, {
85
- id: string;
86
- title: string;
87
- url: string;
88
- }>, "many">;
54
+ }, z.core.$strip>>;
89
55
  instructions: z.ZodString;
90
- }, "strip", z.ZodTypeAny, {
91
- reason: "no_published_data_marts";
92
- instructions: string;
93
- can_create_data_marts: boolean;
94
- create_data_mart_url: string;
95
- data_marts_url: string;
96
- guides: {
97
- core_concepts: string;
98
- connector_data_mart: string;
99
- sql_data_mart: string;
100
- };
101
- draft_data_marts: {
102
- id: string;
103
- title: string;
104
- url: string;
105
- }[];
106
- }, {
107
- reason: "no_published_data_marts";
108
- instructions: string;
109
- can_create_data_marts: boolean;
110
- create_data_mart_url: string;
111
- data_marts_url: string;
112
- guides: {
113
- core_concepts: string;
114
- connector_data_mart: string;
115
- sql_data_mart: string;
116
- };
117
- draft_data_marts: {
118
- id: string;
119
- title: string;
120
- url: string;
121
- }[];
122
- }>>;
56
+ }, z.core.$strip>>;
123
57
  };
124
58
  readonly annotations: {
125
59
  title: string;
@@ -14,7 +14,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.ListDataMartsTool = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
- const zod_1 = require("zod");
17
+ const zod_v4_1 = require("zod-v4");
18
18
  const public_origin_service_1 = require("../../../common/config/public-origin.service");
19
19
  const mcp_project_context_facade_1 = require("../../../idp/facades/mcp-project-context.facade");
20
20
  const mcp_data_marts_facade_1 = require("../../../data-marts/facades/mcp-data-marts.facade");
@@ -23,9 +23,9 @@ const data_mart_ui_path_1 = require("./data-mart-ui-path");
23
23
  const mcp_getting_started_util_1 = require("./mcp-getting-started.util");
24
24
  const mcp_project_summary_util_1 = require("./mcp-project-summary.util");
25
25
  const mcp_public_url_util_1 = require("./mcp-public-url.util");
26
- const inputSchema = zod_1.z
26
+ const inputSchema = zod_v4_1.z
27
27
  .object({
28
- status: zod_1.z
28
+ status: zod_v4_1.z
29
29
  .enum(['published', 'draft'])
30
30
  .optional()
31
31
  .describe('Catalog state filter. Defaults to published. Draft returns draft metadata only; only published Data Marts can be inspected or queried through MCP.'),
@@ -39,14 +39,14 @@ let ListDataMartsTool = class ListDataMartsTool {
39
39
  description = 'List data marts available to the current OWOX project member. Defaults to published data marts; use status=draft only to browse draft metadata, because other MCP data-mart tools accept published data marts only. Use only when the user explicitly asks to list or browse data marts; for a concrete analytical question use get_relevant_data_marts_by_prompt instead, and for open-ended orientation use summarize_data_catalog.';
40
40
  zodSchema = inputSchema.shape;
41
41
  outputSchema = {
42
- project: zod_1.z.object({ id: zod_1.z.string(), title: zod_1.z.string() }).optional(),
43
- data_marts: zod_1.z.array(zod_1.z.object({
44
- id: zod_1.z.string(),
45
- title: zod_1.z.string(),
46
- description: zod_1.z.string(),
47
- url: zod_1.z.string(),
48
- status: zod_1.z.string(),
49
- updated_at: zod_1.z.string(),
42
+ project: zod_v4_1.z.object({ id: zod_v4_1.z.string(), title: zod_v4_1.z.string() }).optional(),
43
+ data_marts: zod_v4_1.z.array(zod_v4_1.z.object({
44
+ id: zod_v4_1.z.string(),
45
+ title: zod_v4_1.z.string(),
46
+ description: zod_v4_1.z.string(),
47
+ url: zod_v4_1.z.string(),
48
+ status: zod_v4_1.z.string(),
49
+ updated_at: zod_v4_1.z.string(),
50
50
  })),
51
51
  getting_started: mcp_getting_started_util_1.gettingStartedSchema
52
52
  .optional()
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod-v4';
2
2
  import type { McpScope } from '@owox/idp-protocol';
3
3
  import { type McpDataMartsFacade } from '../../../data-marts/facades/mcp-data-marts.facade';
4
4
  import { PublicOriginService } from '../../../common/config/public-origin.service';
@@ -6,23 +6,23 @@ import type { McpAuthContext } from '../auth/mcp-auth-context';
6
6
  import { type McpToolDefinition, type McpToolResult } from './mcp-tool.definition';
7
7
  declare const inputSchema: z.ZodObject<{
8
8
  data_mart_id: z.ZodString;
9
- detail_level: z.ZodOptional<z.ZodEnum<["native", "with_joined_fields"]>>;
10
- }, "strict", z.ZodTypeAny, {
11
- data_mart_id: string;
12
- detail_level?: "native" | "with_joined_fields" | undefined;
13
- }, {
14
- data_mart_id: string;
15
- detail_level?: "native" | "with_joined_fields" | undefined;
16
- }>;
9
+ detail_level: z.ZodOptional<z.ZodEnum<{
10
+ native: "native";
11
+ with_joined_fields: "with_joined_fields";
12
+ }>>;
13
+ }, z.core.$strict>;
17
14
  type GetDataMartDetailsInput = z.infer<typeof inputSchema>;
18
15
  export declare class GetDataMartDetailsTool implements McpToolDefinition<GetDataMartDetailsInput> {
19
16
  private readonly dataMarts;
20
17
  private readonly publicOriginService;
21
18
  readonly name = "get_data_mart_details_by_id";
22
- readonly description = "Get available details for a specific published OWOX Data Mart by data_mart_id, including its URL, native output fields, and (only on explicit request) joined_fields contributed by blended/joined data marts. Use detail_level=native by default: it avoids exposing irrelevant joined fields and keeps the response fast. Request detail_level=with_joined_fields only when the question truly needs a joined Data Mart. Use displayName for user-facing wording and copy name verbatim into query_data_mart. Each controllable field carries its type \"category\", and every field carries the effective \"allowedAggregations\" query_data_mart may apply to it; \"operators_by_category\" maps each category to the filter/slice operators its fields accept \u2014 build queries from these instead of guessing. An empty allowedAggregations on a field whose \"calculated\" level is \"metric\" means the value is ALREADY computed, not that the field is unusable: select it by name in query_data_mart instead of recomputing it from other fields, and read the \"usage\" note carried on that field. Array fields are the exception: when mode is REPEATED or type or sliceType is ARRAY, the field omits category and has empty allowedAggregations. It may appear in fields, but never in filters, slices, sort, aggregations, or date_buckets. This tool is optional in the discovery flow: get_relevant_data_marts_by_prompt finds relevant Data Marts, and this tool adds field-level metadata for a selected Data Mart. It does not return data owners, data freshness, sample values, or actual data rows.";
19
+ readonly description = "Get available details for a specific published OWOX Data Mart by data_mart_id, including its URL, native output fields, and (only on explicit request) joined_fields contributed by blended/joined data marts. Use detail_level=native by default: it avoids exposing irrelevant joined fields and keeps the response fast. Request detail_level=with_joined_fields only when the question truly needs a joined Data Mart. Use displayName for user-facing wording and copy name verbatim into query_data_mart. Each controllable field carries its type \"category\", and every field carries the effective \"allowedAggregations\" query_data_mart may apply to it; \"operators_by_category\" maps each category to the filter/slice operators its fields accept \u2014 build queries from these instead of guessing. An empty allowedAggregations on a field whose \"calculated\" level is \"metric\" means the value is ALREADY computed, not that the field is unusable: select it by name in query_data_mart instead of recomputing it from other fields, and read the \"usage\" note carried on that field \u2014 it may also warn that a join distorts the number. Array fields are the exception: when mode is REPEATED or type or sliceType is ARRAY, the field omits category and has empty allowedAggregations. It may appear in fields, but never in filters, slices, sort, aggregations, or date_buckets. This tool is optional in the discovery flow: get_relevant_data_marts_by_prompt finds relevant Data Marts, and this tool adds field-level metadata for a selected Data Mart. It does not return data owners, data freshness, sample values, or actual data rows.";
23
20
  readonly zodSchema: {
24
21
  data_mart_id: z.ZodString;
25
- detail_level: z.ZodOptional<z.ZodEnum<["native", "with_joined_fields"]>>;
22
+ detail_level: z.ZodOptional<z.ZodEnum<{
23
+ native: "native";
24
+ with_joined_fields: "with_joined_fields";
25
+ }>>;
26
26
  };
27
27
  readonly outputSchema: {
28
28
  id: z.ZodString;
@@ -36,48 +36,12 @@ export declare class GetDataMartDetailsTool implements McpToolDefinition<GetData
36
36
  businessName: z.ZodOptional<z.ZodString>;
37
37
  displayName: z.ZodOptional<z.ZodString>;
38
38
  category: z.ZodOptional<z.ZodString>;
39
- allowedAggregations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
39
+ allowedAggregations: z.ZodOptional<z.ZodArray<z.ZodString>>;
40
40
  calculated: z.ZodOptional<z.ZodObject<{
41
41
  level: z.ZodOptional<z.ZodString>;
42
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
43
- level: z.ZodOptional<z.ZodString>;
44
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
45
- level: z.ZodOptional<z.ZodString>;
46
- }, z.ZodTypeAny, "passthrough">>>;
42
+ }, z.core.$loose>>;
47
43
  usage: z.ZodOptional<z.ZodString>;
48
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
49
- name: z.ZodString;
50
- type: z.ZodString;
51
- description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
52
- businessName: z.ZodOptional<z.ZodString>;
53
- displayName: z.ZodOptional<z.ZodString>;
54
- category: z.ZodOptional<z.ZodString>;
55
- allowedAggregations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
56
- calculated: z.ZodOptional<z.ZodObject<{
57
- level: z.ZodOptional<z.ZodString>;
58
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
59
- level: z.ZodOptional<z.ZodString>;
60
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
61
- level: z.ZodOptional<z.ZodString>;
62
- }, z.ZodTypeAny, "passthrough">>>;
63
- usage: z.ZodOptional<z.ZodString>;
64
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
65
- name: z.ZodString;
66
- type: z.ZodString;
67
- description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
68
- businessName: z.ZodOptional<z.ZodString>;
69
- displayName: z.ZodOptional<z.ZodString>;
70
- category: z.ZodOptional<z.ZodString>;
71
- allowedAggregations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
72
- calculated: z.ZodOptional<z.ZodObject<{
73
- level: z.ZodOptional<z.ZodString>;
74
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
75
- level: z.ZodOptional<z.ZodString>;
76
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
77
- level: z.ZodOptional<z.ZodString>;
78
- }, z.ZodTypeAny, "passthrough">>>;
79
- usage: z.ZodOptional<z.ZodString>;
80
- }, z.ZodTypeAny, "passthrough">>, "many">;
44
+ }, z.core.$loose>>;
81
45
  joined_fields_included: z.ZodBoolean;
82
46
  joined_fields: z.ZodArray<z.ZodObject<{
83
47
  name: z.ZodString;
@@ -88,28 +52,8 @@ export declare class GetDataMartDetailsTool implements McpToolDefinition<GetData
88
52
  category: z.ZodOptional<z.ZodString>;
89
53
  sliceType: z.ZodOptional<z.ZodString>;
90
54
  sliceCategory: z.ZodOptional<z.ZodString>;
91
- allowedAggregations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
92
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
93
- name: z.ZodString;
94
- displayName: z.ZodString;
95
- type: z.ZodString;
96
- description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
97
- sourceDataMart: z.ZodString;
98
- category: z.ZodOptional<z.ZodString>;
99
- sliceType: z.ZodOptional<z.ZodString>;
100
- sliceCategory: z.ZodOptional<z.ZodString>;
101
- allowedAggregations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
102
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
103
- name: z.ZodString;
104
- displayName: z.ZodString;
105
- type: z.ZodString;
106
- description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
107
- sourceDataMart: z.ZodString;
108
- category: z.ZodOptional<z.ZodString>;
109
- sliceType: z.ZodOptional<z.ZodString>;
110
- sliceCategory: z.ZodOptional<z.ZodString>;
111
- allowedAggregations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
112
- }, z.ZodTypeAny, "passthrough">>, "many">;
55
+ allowedAggregations: z.ZodOptional<z.ZodArray<z.ZodString>>;
56
+ }, z.core.$loose>>;
113
57
  joins: z.ZodArray<z.ZodObject<{
114
58
  aliasPath: z.ZodString;
115
59
  sourceDataMart: z.ZodString;
@@ -117,46 +61,10 @@ export declare class GetDataMartDetailsTool implements McpToolDefinition<GetData
117
61
  joinConditions: z.ZodArray<z.ZodObject<{
118
62
  sourceFieldName: z.ZodString;
119
63
  targetFieldName: z.ZodString;
120
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
121
- sourceFieldName: z.ZodString;
122
- targetFieldName: z.ZodString;
123
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
124
- sourceFieldName: z.ZodString;
125
- targetFieldName: z.ZodString;
126
- }, z.ZodTypeAny, "passthrough">>, "many">;
127
- description: z.ZodOptional<z.ZodString>;
128
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
129
- aliasPath: z.ZodString;
130
- sourceDataMart: z.ZodString;
131
- targetDataMart: z.ZodString;
132
- joinConditions: z.ZodArray<z.ZodObject<{
133
- sourceFieldName: z.ZodString;
134
- targetFieldName: z.ZodString;
135
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
136
- sourceFieldName: z.ZodString;
137
- targetFieldName: z.ZodString;
138
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
139
- sourceFieldName: z.ZodString;
140
- targetFieldName: z.ZodString;
141
- }, z.ZodTypeAny, "passthrough">>, "many">;
142
- description: z.ZodOptional<z.ZodString>;
143
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
144
- aliasPath: z.ZodString;
145
- sourceDataMart: z.ZodString;
146
- targetDataMart: z.ZodString;
147
- joinConditions: z.ZodArray<z.ZodObject<{
148
- sourceFieldName: z.ZodString;
149
- targetFieldName: z.ZodString;
150
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
151
- sourceFieldName: z.ZodString;
152
- targetFieldName: z.ZodString;
153
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
154
- sourceFieldName: z.ZodString;
155
- targetFieldName: z.ZodString;
156
- }, z.ZodTypeAny, "passthrough">>, "many">;
64
+ }, z.core.$loose>>;
157
65
  description: z.ZodOptional<z.ZodString>;
158
- }, z.ZodTypeAny, "passthrough">>, "many">;
159
- operators_by_category: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>;
66
+ }, z.core.$loose>>;
67
+ operators_by_category: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>;
160
68
  };
161
69
  readonly annotations: {
162
70
  title: string;
@@ -14,7 +14,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.GetDataMartDetailsTool = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
- const zod_1 = require("zod");
17
+ const zod_v4_1 = require("zod-v4");
18
18
  const mcp_data_marts_facade_1 = require("../../../data-marts/facades/mcp-data-marts.facade");
19
19
  const public_origin_service_1 = require("../../../common/config/public-origin.service");
20
20
  const mcp_tool_definition_1 = require("./mcp-tool.definition");
@@ -25,26 +25,26 @@ const formula_level_1 = require("../../../data-marts/calculated-fields/formula-l
25
25
  const data_mart_schema_utils_1 = require("../../../data-marts/data-storage-types/data-mart-schema.utils");
26
26
  const field_type_compatibility_1 = require("../../../data-marts/data-storage-types/field-type-compatibility");
27
27
  const field_type_matrix_1 = require("./field-type-matrix");
28
- const inputSchema = zod_1.z
28
+ const inputSchema = zod_v4_1.z
29
29
  .object({
30
- data_mart_id: zod_1.z.string().trim().min(1),
31
- detail_level: zod_1.z
30
+ data_mart_id: zod_v4_1.z.string().trim().min(1),
31
+ detail_level: zod_v4_1.z
32
32
  .enum(['native', 'with_joined_fields'])
33
33
  .optional()
34
34
  .describe('Use native (default) for ordinary queries. Request with_joined_fields only when the answer requires data from a joined Data Mart.'),
35
35
  })
36
36
  .strict();
37
- const makeCategoryField = () => zod_1.z
37
+ const makeCategoryField = () => zod_v4_1.z
38
38
  .string()
39
39
  .optional()
40
40
  .describe('Field-type category (number/string/date/time/boolean/other) — the key into operators_by_category for the operators this field accepts in filters. Omitted for array fields, which can only be selected as columns. For slice operators, use "sliceCategory" instead when it is present.');
41
- const makeAllowedAggregationsField = () => zod_1.z
42
- .array(zod_1.z.string())
41
+ const makeAllowedAggregationsField = () => zod_v4_1.z
42
+ .array(zod_v4_1.z.string())
43
43
  .optional()
44
44
  .describe('The aggregation functions query_data_mart may apply to THIS field (type defaults narrowed by per-field settings). Use only these. An empty array means this field takes no aggregation — because it is an array, because its settings allow none, or because it is a Calculated Field that already aggregates; read "calculated" and "usage" to tell which.');
45
- const makeCalculatedField = () => zod_1.z
45
+ const makeCalculatedField = () => zod_v4_1.z
46
46
  .object({
47
- level: zod_1.z
47
+ level: zod_v4_1.z
48
48
  .string()
49
49
  .optional()
50
50
  .describe('"metric" — the formula is ALREADY aggregated: select it by name and it is recomputed correctly at whatever grain your query asks for, including in a query that reads a joined Data Mart; it cannot be aggregated again (its allowedAggregations is empty), used as a group-by dimension, or given a date_bucket. This is also the meaning when the property is absent. "column" — the formula is row-level, so the field IS an ordinary dimension: select it by name and group by it exactly like a real column, including in a query that reads a joined Data Mart; it also accepts any aggregation listed in its own allowedAggregations (e.g. COUNT_DISTINCT), and applying one makes it a metric of that query rather than one of its grouping keys; when its declared type is DATE or TIMESTAMP it also takes a date_bucket, on the same rule a real date column follows. Filtering works at BOTH levels: a row-level field filters on its computed value like an ordinary column, and a metric filters on its aggregated value — but a metric filter needs the query to name its fields explicitly rather than relying on the default all-columns projection.'),
@@ -54,58 +54,62 @@ const makeCalculatedField = () => zod_1.z
54
54
  .describe('Present when this field is a Calculated Field: a value the Data Mart computes from a formula instead of reading it from a warehouse column. Its "level" says whether it behaves as a metric or as a dimension — read that before using the field. When "level" is absent the field is a metric; nothing backfills it, so every field defined before levels existed arrives without one.');
55
55
  const AGGREGATE_LEVEL_USAGE = 'Already computed by OWOX at the grain your query asks for: list it in "fields" and read the ' +
56
56
  'value. Do not recompute it from other fields, and do not name it in "aggregations".';
57
- const DataMartFieldSchema = zod_1.z
57
+ const GRAIN_CAVEAT_PREFIX = 'Caveat to pass on to the user with this number — a change to its formula belongs in the ' +
58
+ 'Data Mart:';
59
+ const DataMartFieldSchema = zod_v4_1.z
58
60
  .object({
59
- name: zod_1.z.string(),
60
- type: zod_1.z.string(),
61
- description: zod_1.z.string().optional().nullable(),
62
- businessName: zod_1.z.string().optional(),
63
- displayName: zod_1.z.string().optional(),
61
+ name: zod_v4_1.z.string(),
62
+ type: zod_v4_1.z.string(),
63
+ description: zod_v4_1.z.string().optional().nullable(),
64
+ businessName: zod_v4_1.z.string().optional(),
65
+ displayName: zod_v4_1.z.string().optional(),
64
66
  category: makeCategoryField(),
65
67
  allowedAggregations: makeAllowedAggregationsField(),
66
68
  calculated: makeCalculatedField(),
67
- usage: zod_1.z
69
+ usage: zod_v4_1.z
68
70
  .string()
69
71
  .optional()
70
- .describe('Present only on a field the Data Mart has ALREADY computed for you. Read it before writing a query that mentions this field.'),
72
+ .describe('Present on a field that needs reading before you query it: one the Data Mart has ' +
73
+ 'ALREADY computed for you, one whose number a join can distort, or both. Read it ' +
74
+ 'before writing a query that mentions this field.'),
71
75
  })
72
76
  .passthrough();
73
- const JoinedFieldSchema = zod_1.z
77
+ const JoinedFieldSchema = zod_v4_1.z
74
78
  .object({
75
- name: zod_1.z
79
+ name: zod_v4_1.z
76
80
  .string()
77
81
  .describe('Qualified field name (<alias>__<field>) — copy verbatim into query_data_mart fields, and into filters/slices only when the corresponding category is present.'),
78
- displayName: zod_1.z
82
+ displayName: zod_v4_1.z
79
83
  .string()
80
84
  .describe('Business-friendly label for presentation; use name for queries.'),
81
- type: zod_1.z
85
+ type: zod_v4_1.z
82
86
  .string()
83
87
  .describe('Type in the blended result. Use filter operators or aggregation functions only when the corresponding category or allowedAggregations metadata is present. For slices, use "sliceType" when present. A field without category whose sliceType is an ARRAY can only be selected as a column.'),
84
- description: zod_1.z.string().optional().nullable(),
85
- sourceDataMart: zod_1.z.string().describe('Title of the joined data mart this field comes from.'),
88
+ description: zod_v4_1.z.string().optional().nullable(),
89
+ sourceDataMart: zod_v4_1.z.string().describe('Title of the joined data mart this field comes from.'),
86
90
  category: makeCategoryField(),
87
- sliceType: zod_1.z
91
+ sliceType: zod_v4_1.z
88
92
  .string()
89
93
  .optional()
90
94
  .describe('Present only when this field is deduplicated with a type-changing aggregation. A slice runs BEFORE the join on the original value, so pick slice operators for this pre-join type — not "type". An ARRAY sliceType means the field can only be selected as a column. Absent when the two types are the same.'),
91
- sliceCategory: zod_1.z
95
+ sliceCategory: zod_v4_1.z
92
96
  .string()
93
97
  .optional()
94
98
  .describe('Category of "sliceType" — the operators_by_category key for SLICE operators on this field. Omitted for array fields; otherwise present when sliceType is.'),
95
99
  allowedAggregations: makeAllowedAggregationsField(),
96
100
  })
97
101
  .passthrough();
98
- const JoinSchema = zod_1.z
102
+ const JoinSchema = zod_v4_1.z
99
103
  .object({
100
- aliasPath: zod_1.z
104
+ aliasPath: zod_v4_1.z
101
105
  .string()
102
106
  .describe('Dotted alias path of the joined source — matches the "<alias>__" prefix of joined_fields names.'),
103
- sourceDataMart: zod_1.z.string().describe('Title of the data mart on the left side of this join.'),
104
- targetDataMart: zod_1.z.string().describe('Title of the joined data mart.'),
105
- joinConditions: zod_1.z
106
- .array(zod_1.z.object({ sourceFieldName: zod_1.z.string(), targetFieldName: zod_1.z.string() }).passthrough())
107
+ sourceDataMart: zod_v4_1.z.string().describe('Title of the data mart on the left side of this join.'),
108
+ targetDataMart: zod_v4_1.z.string().describe('Title of the joined data mart.'),
109
+ joinConditions: zod_v4_1.z
110
+ .array(zod_v4_1.z.object({ sourceFieldName: zod_v4_1.z.string(), targetFieldName: zod_v4_1.z.string() }).passthrough())
107
111
  .describe('Field pairs the rows are matched on (source field = target field).'),
108
- description: zod_1.z
112
+ description: zod_v4_1.z
109
113
  .string()
110
114
  .optional()
111
115
  .describe('Analyst-written business meaning of this join (e.g. "Visitors from the website sign up for the product and convert into users"). May be specific to this join path — the same two data marts can carry a different meaning when joined through a different path. Use it to interpret joined fields and to reason about cause and effect across the joined data marts.'),
@@ -125,25 +129,25 @@ let GetDataMartDetailsTool = class GetDataMartDetailsTool {
125
129
  dataMarts;
126
130
  publicOriginService;
127
131
  name = 'get_data_mart_details_by_id';
128
- description = 'Get available details for a specific published OWOX Data Mart by data_mart_id, including its URL, native output fields, and (only on explicit request) joined_fields contributed by blended/joined data marts. Use detail_level=native by default: it avoids exposing irrelevant joined fields and keeps the response fast. Request detail_level=with_joined_fields only when the question truly needs a joined Data Mart. Use displayName for user-facing wording and copy name verbatim into query_data_mart. Each controllable field carries its type "category", and every field carries the effective "allowedAggregations" query_data_mart may apply to it; "operators_by_category" maps each category to the filter/slice operators its fields accept — build queries from these instead of guessing. An empty allowedAggregations on a field whose "calculated" level is "metric" means the value is ALREADY computed, not that the field is unusable: select it by name in query_data_mart instead of recomputing it from other fields, and read the "usage" note carried on that field. Array fields are the exception: when mode is REPEATED or type or sliceType is ARRAY, the field omits category and has empty allowedAggregations. It may appear in fields, but never in filters, slices, sort, aggregations, or date_buckets. This tool is optional in the discovery flow: get_relevant_data_marts_by_prompt finds relevant Data Marts, and this tool adds field-level metadata for a selected Data Mart. It does not return data owners, data freshness, sample values, or actual data rows.';
132
+ description = 'Get available details for a specific published OWOX Data Mart by data_mart_id, including its URL, native output fields, and (only on explicit request) joined_fields contributed by blended/joined data marts. Use detail_level=native by default: it avoids exposing irrelevant joined fields and keeps the response fast. Request detail_level=with_joined_fields only when the question truly needs a joined Data Mart. Use displayName for user-facing wording and copy name verbatim into query_data_mart. Each controllable field carries its type "category", and every field carries the effective "allowedAggregations" query_data_mart may apply to it; "operators_by_category" maps each category to the filter/slice operators its fields accept — build queries from these instead of guessing. An empty allowedAggregations on a field whose "calculated" level is "metric" means the value is ALREADY computed, not that the field is unusable: select it by name in query_data_mart instead of recomputing it from other fields, and read the "usage" note carried on that field — it may also warn that a join distorts the number. Array fields are the exception: when mode is REPEATED or type or sliceType is ARRAY, the field omits category and has empty allowedAggregations. It may appear in fields, but never in filters, slices, sort, aggregations, or date_buckets. This tool is optional in the discovery flow: get_relevant_data_marts_by_prompt finds relevant Data Marts, and this tool adds field-level metadata for a selected Data Mart. It does not return data owners, data freshness, sample values, or actual data rows.';
129
133
  zodSchema = inputSchema.shape;
130
134
  outputSchema = {
131
- id: zod_1.z.string().describe('Data mart identifier.'),
132
- name: zod_1.z.string().describe('Data mart display name.'),
133
- url: zod_1.z.string().describe('Open this Data Mart in OWOX.'),
134
- description: zod_1.z.string().describe('Data mart description.'),
135
- fields: zod_1.z.array(DataMartFieldSchema).describe("The data mart's own (native) output fields."),
136
- joined_fields_included: zod_1.z
135
+ id: zod_v4_1.z.string().describe('Data mart identifier.'),
136
+ name: zod_v4_1.z.string().describe('Data mart display name.'),
137
+ url: zod_v4_1.z.string().describe('Open this Data Mart in OWOX.'),
138
+ description: zod_v4_1.z.string().describe('Data mart description.'),
139
+ fields: zod_v4_1.z.array(DataMartFieldSchema).describe("The data mart's own (native) output fields."),
140
+ joined_fields_included: zod_v4_1.z
137
141
  .boolean()
138
142
  .describe('Whether joined_fields were requested and evaluated. false means joined fields were intentionally omitted; true means an empty joined_fields array has no accessible joined fields.'),
139
- joined_fields: zod_1.z
143
+ joined_fields: zod_v4_1.z
140
144
  .array(JoinedFieldSchema)
141
145
  .describe('Fields available from joined/blended data marts when joined_fields_included is true. Reference each by its exact "name" in query_data_mart. Controllable joined fields may also be used in "slices"; an array field without category can only be used in "fields".'),
142
- joins: zod_1.z
146
+ joins: zod_v4_1.z
143
147
  .array(JoinSchema)
144
148
  .describe('How the joined data marts relate to this one — one entry per join edge (populated only when joined_fields_included is true): the matched key fields plus, when set, the business meaning of the relationship. Read these before interpreting joined_fields.'),
145
- operators_by_category: zod_1.z
146
- .record(zod_1.z.string(), zod_1.z.array(zod_1.z.string()))
149
+ operators_by_category: zod_v4_1.z
150
+ .record(zod_v4_1.z.string(), zod_v4_1.z.array(zod_v4_1.z.string()))
147
151
  .describe('For each controllable field-type category present in this data mart, the query_data_mart filter/slice operators its fields accept. Look up a field via its "category"; an array field without category can only be used in "fields". For boolean fields, eq/neq take a boolean true or false as the value.'),
148
152
  };
149
153
  annotations = {
@@ -169,9 +173,17 @@ let GetDataMartDetailsTool = class GetDataMartDetailsTool {
169
173
  roles: context.roles,
170
174
  dataMartId: parsed.data_mart_id,
171
175
  includeJoinedFields,
176
+ includeGrainCaveats: true,
172
177
  });
173
178
  const categories = new Set();
174
- const fields = result.fields.map(f => this.enrichField(f, categories));
179
+ const grainCaveats = result.grainCaveats ?? {};
180
+ const fields = result.fields.map(f => {
181
+ const field = f;
182
+ const caveat = typeof field.name === 'string' && Object.hasOwn(grainCaveats, field.name)
183
+ ? grainCaveats[field.name]
184
+ : undefined;
185
+ return this.enrichField(field, categories, caveat);
186
+ });
175
187
  const joinedFields = result.joinedFields.map(f => this.enrichField(f, categories));
176
188
  const operatorsByCategory = {};
177
189
  for (const category of categories) {
@@ -190,7 +202,7 @@ let GetDataMartDetailsTool = class GetDataMartDetailsTool {
190
202
  };
191
203
  return (0, mcp_tool_definition_1.jsonToolResult)(structuredContent);
192
204
  }
193
- enrichField(field, categories) {
205
+ enrichField(field, categories, grainCaveat) {
194
206
  const out = { ...field };
195
207
  let isArray = false;
196
208
  if (typeof out.type === 'string') {
@@ -217,9 +229,13 @@ let GetDataMartDetailsTool = class GetDataMartDetailsTool {
217
229
  aggregationRole: out.aggregationRole,
218
230
  allowedAggregations: out.allowedAggregations,
219
231
  });
220
- if (isAggregateLevelCalculatedField(out)) {
221
- out.usage = AGGREGATE_LEVEL_USAGE;
222
- }
232
+ }
233
+ const caveat = grainCaveat === undefined ? undefined : `${GRAIN_CAVEAT_PREFIX} ${grainCaveat}`;
234
+ if (isAggregateLevelCalculatedField(out)) {
235
+ out.usage = caveat ? `${AGGREGATE_LEVEL_USAGE} ${caveat}` : AGGREGATE_LEVEL_USAGE;
236
+ }
237
+ else if (caveat) {
238
+ out.usage = caveat;
223
239
  }
224
240
  if (out.category !== undefined && typeof out.sliceType === 'string') {
225
241
  const sliceCategory = (0, field_type_category_1.categorizeFieldType)(out.sliceType);