@owox/backend 0.35.0 → 0.36.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 (283) 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 +5 -0
  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 +13 -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 +10 -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 +10 -0
  94. package/dist/src/data-marts/dto/presentation/model-canvas-response-api.dto.d.ts +4 -0
  95. package/dist/src/data-marts/dto/presentation/model-canvas-response-api.dto.js +20 -0
  96. package/dist/src/data-marts/dto/presentation/preview-data-mart-request-api.dto.d.ts +7 -0
  97. package/dist/src/data-marts/dto/presentation/preview-data-mart-request-api.dto.js +56 -0
  98. package/dist/src/data-marts/dto/presentation/preview-data-mart-response-api.dto.d.ts +12 -0
  99. package/dist/src/data-marts/dto/presentation/preview-data-mart-response-api.dto.js +64 -0
  100. package/dist/src/data-marts/dto/presentation/report-response-api.dto.d.ts +2 -0
  101. package/dist/src/data-marts/dto/presentation/report-response-api.dto.js +6 -0
  102. package/dist/src/data-marts/dto/presentation/run-data-mart-request-api.dto.js +67 -0
  103. package/dist/src/data-marts/dto/presentation/update-data-mart-description-api.dto.js +3 -0
  104. package/dist/src/data-marts/dto/presentation/update-data-mart-icon-api.dto.d.ts +4 -0
  105. package/dist/src/data-marts/dto/presentation/update-data-mart-icon-api.dto.js +30 -0
  106. package/dist/src/data-marts/dto/presentation/update-report-request-api.dto.d.ts +2 -0
  107. package/dist/src/data-marts/dto/presentation/update-report-request-api.dto.js +10 -0
  108. package/dist/src/data-marts/dto/schemas/auto-aggregation-opt-out.schema.d.ts +15 -0
  109. package/dist/src/data-marts/dto/schemas/auto-aggregation-opt-out.schema.js +29 -0
  110. package/dist/src/data-marts/dto/schemas/data-mart-run/data-mart-run.schema.d.ts +9 -0
  111. package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/connector-definition.schema.d.ts +15 -0
  112. package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/connector-definition.schema.js +1 -0
  113. package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/data-mart-definition.schema.d.ts +7 -0
  114. package/dist/src/data-marts/dto/schemas/data-quality/data-quality-run.schema.d.ts +20 -0
  115. package/dist/src/data-marts/entities/connector-definition-version.entity.d.ts +16 -0
  116. package/dist/src/data-marts/entities/connector-definition-version.entity.js +78 -0
  117. package/dist/src/data-marts/entities/connector-definition.entity.d.ts +14 -0
  118. package/dist/src/data-marts/entities/connector-definition.entity.js +82 -0
  119. package/dist/src/data-marts/entities/data-mart.entity.d.ts +2 -0
  120. package/dist/src/data-marts/entities/data-mart.entity.js +5 -0
  121. package/dist/src/data-marts/entities/report.entity.d.ts +2 -0
  122. package/dist/src/data-marts/entities/report.entity.js +11 -0
  123. package/dist/src/data-marts/enums/data-mart-icon.enum.d.ts +75 -0
  124. package/dist/src/data-marts/enums/data-mart-icon.enum.js +80 -0
  125. package/dist/src/data-marts/errors/connector-credential-boundary.error.d.ts +3 -0
  126. package/dist/src/data-marts/errors/connector-credential-boundary.error.js +14 -0
  127. package/dist/src/data-marts/facades/mcp-data-marts.facade.d.ts +2 -0
  128. package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.d.ts +7 -1
  129. package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.js +70 -5
  130. package/dist/src/data-marts/mappers/connector-definition.mapper.d.ts +14 -0
  131. package/dist/src/data-marts/mappers/connector-definition.mapper.js +57 -0
  132. package/dist/src/data-marts/mappers/data-mart.mapper.d.ts +9 -6
  133. package/dist/src/data-marts/mappers/data-mart.mapper.js +44 -19
  134. package/dist/src/data-marts/mappers/insight-template.mapper.d.ts +1 -1
  135. package/dist/src/data-marts/mappers/insight-template.mapper.js +2 -2
  136. package/dist/src/data-marts/mappers/insight.mapper.d.ts +1 -1
  137. package/dist/src/data-marts/mappers/insight.mapper.js +2 -2
  138. package/dist/src/data-marts/mappers/model-canvas.mapper.d.ts +10 -2
  139. package/dist/src/data-marts/mappers/model-canvas.mapper.js +9 -3
  140. package/dist/src/data-marts/mappers/report.mapper.js +4 -3
  141. package/dist/src/data-marts/services/auto-collapse.resolver.d.ts +1 -1
  142. package/dist/src/data-marts/services/auto-collapse.resolver.js +4 -0
  143. package/dist/src/data-marts/services/blendable-schema.service.d.ts +2 -0
  144. package/dist/src/data-marts/services/blendable-schema.service.js +59 -0
  145. package/dist/src/data-marts/services/connector/connector-credential-injector.service.d.ts +1 -1
  146. package/dist/src/data-marts/services/connector/connector-credential-injector.service.js +15 -1
  147. package/dist/src/data-marts/services/connector/connector-definition.service.d.ts +59 -0
  148. package/dist/src/data-marts/services/connector/connector-definition.service.js +491 -0
  149. package/dist/src/data-marts/services/connector/connector-executor.service.d.ts +9 -1
  150. package/dist/src/data-marts/services/connector/connector-executor.service.js +173 -63
  151. package/dist/src/data-marts/services/connector/connector-fields-preview.service.js +1 -1
  152. package/dist/src/data-marts/services/connector/connector-message.utils.js +2 -2
  153. package/dist/src/data-marts/services/connector/connector-preview-credentials.service.js +1 -1
  154. package/dist/src/data-marts/services/connector/connector-preview-support.d.ts +1 -1
  155. package/dist/src/data-marts/services/connector/connector-preview-support.js +14 -21
  156. package/dist/src/data-marts/services/connector/connector-process-spawner.service.d.ts +11 -2
  157. package/dist/src/data-marts/services/connector/connector-process-spawner.service.js +88 -60
  158. package/dist/src/data-marts/services/connector/connector-secret.service.d.ts +6 -3
  159. package/dist/src/data-marts/services/connector/connector-secret.service.js +77 -12
  160. package/dist/src/data-marts/services/connector/connector-source-config.service.js +1 -1
  161. package/dist/src/data-marts/services/connector/connector-source-credentials.service.d.ts +6 -2
  162. package/dist/src/data-marts/services/connector/connector-source-credentials.service.js +18 -16
  163. package/dist/src/data-marts/services/connector/connector-specification.mapper.d.ts +47 -0
  164. package/dist/src/data-marts/services/connector/connector-specification.mapper.js +46 -0
  165. package/dist/src/data-marts/services/connector/connector-test.service.d.ts +43 -0
  166. package/dist/src/data-marts/services/connector/connector-test.service.js +343 -0
  167. package/dist/src/data-marts/services/connector/connector.service.d.ts +8 -2
  168. package/dist/src/data-marts/services/connector/connector.service.js +65 -54
  169. package/dist/src/data-marts/services/connector/declarative-manifest-schemas.d.ts +4 -0
  170. package/dist/src/data-marts/services/connector/declarative-manifest-schemas.js +48 -0
  171. package/dist/src/data-marts/services/connector/run-log-flusher.d.ts +21 -0
  172. package/dist/src/data-marts/services/connector/run-log-flusher.js +67 -0
  173. package/dist/src/data-marts/services/data-mart.service.js +2 -0
  174. package/dist/src/data-marts/services/report-sql-composer.service.js +15 -1
  175. package/dist/src/data-marts/services/report.service.d.ts +1 -0
  176. package/dist/src/data-marts/services/report.service.js +13 -0
  177. package/dist/src/data-marts/services/scheduled-trigger.service.d.ts +1 -0
  178. package/dist/src/data-marts/services/scheduled-trigger.service.js +13 -0
  179. package/dist/src/data-marts/use-cases/create-data-mart.service.js +1 -0
  180. package/dist/src/data-marts/use-cases/create-report.service.js +2 -0
  181. package/dist/src/data-marts/use-cases/get-model-canvas-data-marts.service.d.ts +5 -1
  182. package/dist/src/data-marts/use-cases/get-model-canvas-data-marts.service.js +16 -3
  183. package/dist/src/data-marts/use-cases/list-project-scheduled-triggers.service.js +1 -1
  184. package/dist/src/data-marts/use-cases/preview-data-mart.service.d.ts +59 -0
  185. package/dist/src/data-marts/use-cases/preview-data-mart.service.js +293 -0
  186. package/dist/src/data-marts/use-cases/stream-http-data.service.js +1 -0
  187. package/dist/src/data-marts/use-cases/update-data-mart-definition.service.d.ts +1 -1
  188. package/dist/src/data-marts/use-cases/update-data-mart-definition.service.js +8 -6
  189. package/dist/src/data-marts/use-cases/update-data-mart-icon.service.d.ts +12 -0
  190. package/dist/src/data-marts/use-cases/update-data-mart-icon.service.js +46 -0
  191. package/dist/src/data-marts/use-cases/update-data-mart-schema.service.js +14 -1
  192. package/dist/src/data-marts/use-cases/update-report.service.js +9 -1
  193. package/dist/src/ee/ee.module.js +5 -8
  194. package/dist/src/ee/mcp/auth/mcp-auth-context.d.ts +0 -4
  195. package/dist/src/ee/mcp/auth/mcp-auth.middleware.d.ts +26 -0
  196. package/dist/src/ee/mcp/auth/mcp-auth.middleware.js +184 -0
  197. package/dist/src/ee/mcp/http-headers.util.d.ts +2 -0
  198. package/dist/src/ee/mcp/http-headers.util.js +8 -0
  199. package/dist/src/ee/mcp/observability/mcp-bus-wiring.js +4 -4
  200. package/dist/src/ee/mcp/observability/mcp-call-instrumentation.d.ts +2 -4
  201. package/dist/src/ee/mcp/observability/mcp-call-instrumentation.js +6 -6
  202. package/dist/src/ee/mcp/sdk/mcp-sdk-server.factory.d.ts +1 -1
  203. package/dist/src/ee/mcp/sdk/mcp-sdk-server.factory.js +5 -5
  204. package/dist/src/ee/mcp/tools/add-destination.tool.d.ts +20 -14
  205. package/dist/src/ee/mcp/tools/add-destination.tool.js +10 -10
  206. package/dist/src/ee/mcp/tools/add-report.tool.d.ts +88 -228
  207. package/dist/src/ee/mcp/tools/add-report.tool.js +28 -28
  208. package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.d.ts +2 -12
  209. package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.js +13 -13
  210. package/dist/src/ee/mcp/tools/data-mart-catalog.tool.d.ts +15 -81
  211. package/dist/src/ee/mcp/tools/data-mart-catalog.tool.js +11 -11
  212. package/dist/src/ee/mcp/tools/data-mart-details.tool.d.ts +19 -111
  213. package/dist/src/ee/mcp/tools/data-mart-details.tool.js +64 -48
  214. package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.d.ts +2 -6
  215. package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.js +7 -7
  216. package/dist/src/ee/mcp/tools/delete-report.tool.d.ts +2 -6
  217. package/dist/src/ee/mcp/tools/delete-report.tool.js +4 -4
  218. package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.d.ts +30 -195
  219. package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.js +22 -22
  220. package/dist/src/ee/mcp/tools/get-report-output-schema.tool.d.ts +3 -21
  221. package/dist/src/ee/mcp/tools/get-report-output-schema.tool.js +10 -10
  222. package/dist/src/ee/mcp/tools/get-report-run-status.tool.d.ts +15 -11
  223. package/dist/src/ee/mcp/tools/get-report-run-status.tool.js +14 -14
  224. package/dist/src/ee/mcp/tools/list-destinations.tool.d.ts +12 -20
  225. package/dist/src/ee/mcp/tools/list-destinations.tool.js +10 -10
  226. package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.d.ts +5 -61
  227. package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.js +14 -14
  228. package/dist/src/ee/mcp/tools/mcp-getting-started.util.d.ts +4 -52
  229. package/dist/src/ee/mcp/tools/mcp-getting-started.util.js +13 -13
  230. package/dist/src/ee/mcp/tools/mcp-tool.definition.d.ts +2 -2
  231. package/dist/src/ee/mcp/tools/project-context.tool.d.ts +3 -17
  232. package/dist/src/ee/mcp/tools/project-context.tool.js +10 -10
  233. package/dist/src/ee/mcp/tools/query-data-mart.input.d.ts +111 -152
  234. package/dist/src/ee/mcp/tools/query-data-mart.input.js +39 -39
  235. package/dist/src/ee/mcp/tools/query-data-mart.tool.d.ts +60 -130
  236. package/dist/src/ee/mcp/tools/query-data-mart.tool.js +35 -35
  237. package/dist/src/ee/mcp/tools/report-output-controls-output.d.ts +17 -60
  238. package/dist/src/ee/mcp/tools/report-output-controls-output.js +20 -20
  239. package/dist/src/ee/mcp/tools/report-run-outcome.d.ts +6 -42
  240. package/dist/src/ee/mcp/tools/report-run-outcome.js +20 -20
  241. package/dist/src/ee/mcp/tools/run-report.tool.d.ts +2 -6
  242. package/dist/src/ee/mcp/tools/run-report.tool.js +5 -5
  243. package/dist/src/ee/mcp/tools/search-data-marts.tool.d.ts +7 -79
  244. package/dist/src/ee/mcp/tools/search-data-marts.tool.js +11 -11
  245. package/dist/src/ee/mcp/tools/search-reports.tool.d.ts +15 -61
  246. package/dist/src/ee/mcp/tools/search-reports.tool.js +15 -15
  247. package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.d.ts +7 -79
  248. package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.js +15 -15
  249. package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.d.ts +2 -12
  250. package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.js +13 -13
  251. package/dist/src/ee/mcp/tools/update-report.tool.d.ts +105 -414
  252. package/dist/src/ee/mcp/tools/update-report.tool.js +20 -20
  253. package/dist/src/ee/mcp/transport/mcp-http-entry.service.d.ts +30 -0
  254. package/dist/src/ee/mcp/transport/mcp-http-entry.service.js +193 -0
  255. package/dist/src/idp/guards/idp.guard.js +2 -8
  256. package/dist/src/idp/oauth/controllers/oauth-authorization.controller.d.ts +4 -0
  257. package/dist/src/idp/oauth/controllers/oauth-authorization.controller.js +77 -1
  258. package/dist/src/idp/oauth/controllers/oauth-metadata.controller.d.ts +2 -1
  259. package/dist/src/idp/oauth/controllers/oauth-metadata.controller.js +5 -8
  260. package/dist/src/idp/oauth/controllers/oauth-token.controller.js +14 -1
  261. package/dist/src/idp/oauth/oauth-request.validator.d.ts +8 -0
  262. package/dist/src/idp/oauth/oauth-request.validator.js +27 -0
  263. package/dist/src/idp/utils/is-authentication-error.d.ts +1 -0
  264. package/dist/src/idp/utils/is-authentication-error.js +9 -0
  265. package/dist/src/idp/utils/role-hierarchy.d.ts +3 -0
  266. package/dist/src/idp/utils/role-hierarchy.js +14 -0
  267. package/dist/src/index.d.ts +1 -0
  268. package/dist/src/index.js +3 -1
  269. package/dist/src/migrations/1788048000000-create-connector-definition-tables.d.ts +6 -0
  270. package/dist/src/migrations/1788048000000-create-connector-definition-tables.js +116 -0
  271. package/dist/src/migrations/1790156789783-add-auto-aggregation-opt-out-to-report.d.ts +8 -0
  272. package/dist/src/migrations/1790156789783-add-auto-aggregation-opt-out-to-report.js +30 -0
  273. package/dist/src/migrations/1790247861000-add-icon-to-data-mart.d.ts +8 -0
  274. package/dist/src/migrations/1790247861000-add-icon-to-data-mart.js +31 -0
  275. package/package.json +10 -6
  276. package/dist/src/ee/mcp/auth/mcp-auth.exception-filter.d.ts +0 -14
  277. package/dist/src/ee/mcp/auth/mcp-auth.exception-filter.js +0 -84
  278. package/dist/src/ee/mcp/auth/mcp-auth.guard.d.ts +0 -14
  279. package/dist/src/ee/mcp/auth/mcp-auth.guard.js +0 -99
  280. package/dist/src/ee/mcp/controllers/mcp-transport.controller.d.ts +0 -17
  281. package/dist/src/ee/mcp/controllers/mcp-transport.controller.js +0 -134
  282. package/dist/src/ee/mcp/sdk/mcp-streamable-http-transport.handler.d.ts +0 -16
  283. package/dist/src/ee/mcp/sdk/mcp-streamable-http-transport.handler.js +0 -133
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RunLogFlusher = void 0;
4
+ exports.createRunLogSnapshotReader = createRunLogSnapshotReader;
5
+ function createRunLogSnapshotReader(logs, errors) {
6
+ const serializedLogs = [];
7
+ const serializedErrors = [];
8
+ const extend = (cache, buffer) => {
9
+ for (let i = cache.length; i < buffer.length; i++) {
10
+ cache.push(JSON.stringify(buffer[i]));
11
+ }
12
+ return cache.slice();
13
+ };
14
+ return () => ({
15
+ logs: extend(serializedLogs, logs),
16
+ errors: extend(serializedErrors, errors),
17
+ });
18
+ }
19
+ class RunLogFlusher {
20
+ intervalMs;
21
+ getSnapshot;
22
+ write;
23
+ onError;
24
+ timer = null;
25
+ lastCount = -1;
26
+ inFlight = Promise.resolve();
27
+ persisted = null;
28
+ constructor(intervalMs, getSnapshot, write, onError) {
29
+ this.intervalMs = intervalMs;
30
+ this.getSnapshot = getSnapshot;
31
+ this.write = write;
32
+ this.onError = onError;
33
+ }
34
+ start() {
35
+ if (this.intervalMs <= 0 || this.timer !== null)
36
+ return;
37
+ this.timer = setInterval(() => {
38
+ this.inFlight = this.inFlight.then(() => this.flushIfDirty());
39
+ }, this.intervalMs);
40
+ }
41
+ async flushIfDirty() {
42
+ const snapshot = this.getSnapshot();
43
+ const count = snapshot.logs.length + snapshot.errors.length;
44
+ if (count === 0 || count === this.lastCount)
45
+ return;
46
+ try {
47
+ await this.write(snapshot);
48
+ this.lastCount = count;
49
+ this.persisted = snapshot;
50
+ }
51
+ catch (error) {
52
+ this.onError?.(error);
53
+ }
54
+ }
55
+ persistedSnapshot() {
56
+ return this.persisted;
57
+ }
58
+ async stop() {
59
+ if (this.timer !== null) {
60
+ clearInterval(this.timer);
61
+ this.timer = null;
62
+ }
63
+ await this.inFlight;
64
+ }
65
+ }
66
+ exports.RunLogFlusher = RunLogFlusher;
67
+ //# sourceMappingURL=run-log-flusher.js.map
@@ -88,6 +88,7 @@ let DataMartService = DataMartService_1 = class DataMartService {
88
88
  'dm.title',
89
89
  'dm.status',
90
90
  'dm.description',
91
+ 'dm.icon',
91
92
  'dm.definitionType',
92
93
  'dm.createdById',
93
94
  'dm.createdAt',
@@ -183,6 +184,7 @@ let DataMartService = DataMartService_1 = class DataMartService {
183
184
  'dm.title',
184
185
  'dm.status',
185
186
  'dm.description',
187
+ 'dm.icon',
186
188
  'dm.schema',
187
189
  'dm.dataLastUpdated',
188
190
  ])
@@ -36,6 +36,20 @@ const field_aggregation_governance_1 = require("../dto/schemas/field-aggregation
36
36
  const aggregation_labels_1 = require("../dto/schemas/aggregation-labels");
37
37
  const field_type_category_1 = require("../dto/schemas/field-type-category");
38
38
  const report_data_header_dto_1 = require("../dto/domain/report-data-header.dto");
39
+ function withMetricsShownForDryRun(dataMart, metricNames) {
40
+ const fields = dataMart.schema?.fields ?? [];
41
+ const isHiddenMetric = (field) => field.isHiddenForReporting === true &&
42
+ (0, calculated_field_utils_1.isCalculatedField)(field) &&
43
+ metricNames.includes(field.name);
44
+ if (!fields.some(isHiddenMetric))
45
+ return dataMart;
46
+ return Object.assign(Object.create(Object.getPrototypeOf(dataMart)), dataMart, {
47
+ schema: {
48
+ ...dataMart.schema,
49
+ fields: fields.map(field => isHiddenMetric(field) ? { ...field, isHiddenForReporting: false } : field),
50
+ },
51
+ });
52
+ }
39
53
  let ReportSqlComposerService = class ReportSqlComposerService {
40
54
  blendedReportDataService;
41
55
  queryBuilderFacade;
@@ -348,7 +362,7 @@ let ReportSqlComposerService = class ReportSqlComposerService {
348
362
  }
349
363
  async composeMetricsOnly(dataMart, metricNames, accessor, precomputedBlendableSchema, tableReferences) {
350
364
  const plan = {
351
- dataMart,
365
+ dataMart: withMetricsShownForDryRun(dataMart, metricNames),
352
366
  columnConfig: metricNames,
353
367
  };
354
368
  const joinedMetrics = (0, calculated_field_utils_1.calculatedFieldsOf)(dataMart.schema?.fields ?? []).filter(f => metricNames.includes(f.name) && (0, formula_live_reference_1.hasLiveJoinedReference)(f.calculated.formula));
@@ -28,5 +28,6 @@ export declare class ReportService {
28
28
  updateReportWithVersionControl(report: Report): Promise<void>;
29
29
  deleteReport(report: Report): Promise<void>;
30
30
  countByDataMartIdAndProjectId(dataMartId: string, projectId: string): Promise<number>;
31
+ countByDataMartIds(dataMartIds: string[]): Promise<Map<string, number>>;
31
32
  deleteAllByDataMartIdAndProjectId(dataMartId: string, projectId: string): Promise<void>;
32
33
  }
@@ -198,6 +198,19 @@ let ReportService = class ReportService {
198
198
  },
199
199
  });
200
200
  }
201
+ async countByDataMartIds(dataMartIds) {
202
+ if (dataMartIds.length === 0)
203
+ return new Map();
204
+ const rows = await this.repository
205
+ .createQueryBuilder('r')
206
+ .leftJoin('r.dataMart', 'dm')
207
+ .where('dm.id IN (:...ids)', { ids: dataMartIds })
208
+ .select('dm.id', 'dataMartId')
209
+ .addSelect('COUNT(*)', 'count')
210
+ .groupBy('dm.id')
211
+ .getRawMany();
212
+ return new Map(rows.map(row => [row.dataMartId, Number(row.count)]));
213
+ }
201
214
  async deleteAllByDataMartIdAndProjectId(dataMartId, projectId) {
202
215
  const reports = await this.repository.find({
203
216
  where: {
@@ -16,6 +16,7 @@ export declare class ScheduledTriggerService {
16
16
  constructor(triggerRepository: Repository<DataMartScheduledTrigger>);
17
17
  getByIdAndDataMartIdAndProjectId(id: string, dataMartId: string, projectId: string): Promise<DataMartScheduledTrigger>;
18
18
  getByIdAndProjectId(id: string, projectId: string): Promise<DataMartScheduledTrigger>;
19
+ countByDataMartIds(dataMartIds: string[]): Promise<Map<string, number>>;
19
20
  getAllByDataMartIdAndProjectId(dataMartId: string, projectId: string): Promise<DataMartScheduledTrigger[]>;
20
21
  listVisibleByProject(options: ListVisibleProjectScheduledTriggersOptions): Promise<DataMartScheduledTrigger[]>;
21
22
  deleteAllByDataMartIdAndProjectId(dataMartId: string, projectId: string): Promise<void>;
@@ -50,6 +50,19 @@ let ScheduledTriggerService = class ScheduledTriggerService {
50
50
  }
51
51
  return trigger;
52
52
  }
53
+ async countByDataMartIds(dataMartIds) {
54
+ if (dataMartIds.length === 0)
55
+ return new Map();
56
+ const rows = await this.triggerRepository
57
+ .createQueryBuilder('t')
58
+ .leftJoin('t.dataMart', 'dm')
59
+ .where('dm.id IN (:...ids)', { ids: dataMartIds })
60
+ .select('dm.id', 'dataMartId')
61
+ .addSelect('COUNT(*)', 'count')
62
+ .groupBy('dm.id')
63
+ .getRawMany();
64
+ return new Map(rows.map(row => [row.dataMartId, Number(row.count)]));
65
+ }
53
66
  async getAllByDataMartIdAndProjectId(dataMartId, projectId) {
54
67
  return this.triggerRepository.find({
55
68
  where: {
@@ -76,6 +76,7 @@ let CreateDataMartService = CreateDataMartService_1 = class CreateDataMartServic
76
76
  }
77
77
  const dataMart = this.dataMartService.create({
78
78
  title: command.title,
79
+ icon: command.icon,
79
80
  projectId: command.projectId,
80
81
  createdById: command.userId,
81
82
  storage: dataStorage,
@@ -37,6 +37,7 @@ const access_decision_1 = require("../services/access-decision");
37
37
  const output_controls_validator_service_1 = require("../services/output-controls-validator.service");
38
38
  const report_access_service_1 = require("../services/report-access.service");
39
39
  const unique_count_sources_1 = require("../dto/schemas/unique-count-sources");
40
+ const auto_aggregation_opt_out_schema_1 = require("../dto/schemas/auto-aggregation-opt-out.schema");
40
41
  const advanced_search_index_sync_service_1 = require("../services/advanced-search-index-sync.service");
41
42
  const search_facade_1 = require("../../common/search/search.facade");
42
43
  const looker_studio_report_service_1 = require("../services/looker-studio-report.service");
@@ -118,6 +119,7 @@ let CreateReportService = class CreateReportService {
118
119
  aggregationConfig: command.aggregationConfig ?? null,
119
120
  dateTruncConfig: command.dateTruncConfig ?? null,
120
121
  uniqueCountConfig: (0, unique_count_sources_1.foldEmptyUniqueCountConfig)(command.uniqueCountConfig),
122
+ autoAggregationOptOut: (0, auto_aggregation_opt_out_schema_1.selectedAutoAggregationOptOut)(command.autoAggregationOptOut, command.columnConfig),
121
123
  });
122
124
  const restoredReport = await this.lookerStudioReportService.restoreIfDeleted(report);
123
125
  const newReport = restoredReport ?? (await this.reportRepository.save(report));
@@ -5,12 +5,16 @@ import { AccessDecisionService } from '../services/access-decision';
5
5
  import { ContextAccessService } from '../services/context/context-access.service';
6
6
  import { DataMartService } from '../services/data-mart.service';
7
7
  import { DataStorageService } from '../services/data-storage.service';
8
+ import { ReportService } from '../services/report.service';
9
+ import { ScheduledTriggerService } from '../services/scheduled-trigger.service';
8
10
  export declare class GetModelCanvasDataMartsService {
9
11
  private readonly dataMartService;
10
12
  private readonly dataStorageService;
11
13
  private readonly contextAccessService;
12
14
  private readonly mapper;
13
15
  private readonly accessDecisionService;
14
- constructor(dataMartService: DataMartService, dataStorageService: DataStorageService, contextAccessService: ContextAccessService, mapper: ModelCanvasMapper, accessDecisionService: AccessDecisionService);
16
+ private readonly scheduledTriggerService;
17
+ private readonly reportService;
18
+ constructor(dataMartService: DataMartService, dataStorageService: DataStorageService, contextAccessService: ContextAccessService, mapper: ModelCanvasMapper, accessDecisionService: AccessDecisionService, scheduledTriggerService: ScheduledTriggerService, reportService: ReportService);
15
19
  run(command: GetModelCanvasDataMartsCommand): Promise<ModelCanvasDataMartsDto>;
16
20
  }
@@ -17,6 +17,8 @@ const access_decision_1 = require("../services/access-decision");
17
17
  const context_access_service_1 = require("../services/context/context-access.service");
18
18
  const data_mart_service_1 = require("../services/data-mart.service");
19
19
  const data_storage_service_1 = require("../services/data-storage.service");
20
+ const report_service_1 = require("../services/report.service");
21
+ const scheduled_trigger_service_1 = require("../services/scheduled-trigger.service");
20
22
  const CANVAS_DATA_MARTS_PAGE_SIZE = 1000;
21
23
  let GetModelCanvasDataMartsService = class GetModelCanvasDataMartsService {
22
24
  dataMartService;
@@ -24,12 +26,16 @@ let GetModelCanvasDataMartsService = class GetModelCanvasDataMartsService {
24
26
  contextAccessService;
25
27
  mapper;
26
28
  accessDecisionService;
27
- constructor(dataMartService, dataStorageService, contextAccessService, mapper, accessDecisionService) {
29
+ scheduledTriggerService;
30
+ reportService;
31
+ constructor(dataMartService, dataStorageService, contextAccessService, mapper, accessDecisionService, scheduledTriggerService, reportService) {
28
32
  this.dataMartService = dataMartService;
29
33
  this.dataStorageService = dataStorageService;
30
34
  this.contextAccessService = contextAccessService;
31
35
  this.mapper = mapper;
32
36
  this.accessDecisionService = accessDecisionService;
37
+ this.scheduledTriggerService = scheduledTriggerService;
38
+ this.reportService = reportService;
33
39
  }
34
40
  async run(command) {
35
41
  if (!command.userId) {
@@ -52,7 +58,12 @@ let GetModelCanvasDataMartsService = class GetModelCanvasDataMartsService {
52
58
  limit: CANVAS_DATA_MARTS_PAGE_SIZE,
53
59
  offset,
54
60
  });
55
- return this.mapper.toDataMartsDto(items, total, offset);
61
+ const ids = items.map(dataMart => dataMart.id);
62
+ const [triggerCounts, reportCounts] = await Promise.all([
63
+ this.scheduledTriggerService.countByDataMartIds(ids),
64
+ this.reportService.countByDataMartIds(ids),
65
+ ]);
66
+ return this.mapper.toDataMartsDto(items, total, offset, { triggerCounts, reportCounts });
56
67
  }
57
68
  };
58
69
  exports.GetModelCanvasDataMartsService = GetModelCanvasDataMartsService;
@@ -62,6 +73,8 @@ exports.GetModelCanvasDataMartsService = GetModelCanvasDataMartsService = __deco
62
73
  data_storage_service_1.DataStorageService,
63
74
  context_access_service_1.ContextAccessService,
64
75
  model_canvas_mapper_1.ModelCanvasMapper,
65
- access_decision_1.AccessDecisionService])
76
+ access_decision_1.AccessDecisionService,
77
+ scheduled_trigger_service_1.ScheduledTriggerService,
78
+ report_service_1.ReportService])
66
79
  ], GetModelCanvasDataMartsService);
67
80
  //# sourceMappingURL=get-model-canvas-data-marts.service.js.map
@@ -121,7 +121,7 @@ let ListProjectScheduledTriggersService = class ListProjectScheduledTriggersServ
121
121
  if (trigger.type === scheduled_trigger_type_enum_1.ScheduledTriggerType.CONNECTOR_RUN &&
122
122
  trigger.dataMart.definition &&
123
123
  (0, data_mart_definition_guards_1.isConnectorDefinition)(trigger.dataMart.definition)) {
124
- const maskedDefinition = await this.connectorSecretService.mask(trigger.dataMart.definition);
124
+ const maskedDefinition = await this.connectorSecretService.mask(projectId, trigger.dataMart.definition);
125
125
  return this.cloneTriggerWithConfig(trigger, {
126
126
  type: ScheduledConnectorRunConfigType,
127
127
  connector: maskedDefinition,
@@ -0,0 +1,59 @@
1
+ import { HttpException } from '@nestjs/common';
2
+ import { TypeResolver } from '../../common/resolver/type-resolver';
3
+ import type { Role as RoleType } from '@owox/idp-protocol';
4
+ import { DataStorageType } from '../data-storage-types/enums/data-storage-type.enum';
5
+ import { DataStorageErrorMapper } from '../data-storage-types/interfaces/data-storage-error-mapper.interface';
6
+ import { DataStorageReportReader } from '../data-storage-types/interfaces/data-storage-report-reader.interface';
7
+ import { AccessDecisionService } from '../services/access-decision';
8
+ import { BlendableSchemaService } from '../services/blendable-schema.service';
9
+ import { DataMartService } from '../services/data-mart.service';
10
+ import { ProjectBillingService } from '../services/project-billing/project-billing.service';
11
+ import { ReportSqlComposerService } from '../services/report-sql-composer.service';
12
+ export declare const PREVIEW_DEFAULT_LIMIT = 10;
13
+ export declare const PREVIEW_MAX_LIMIT = 1000;
14
+ export declare const DEFAULT_PREVIEW_DEADLINE_MS = 150000;
15
+ export declare class PreviewDataMartCommand {
16
+ readonly dataMartId: string;
17
+ readonly projectId: string;
18
+ readonly userId: string;
19
+ readonly roles: RoleType[];
20
+ readonly limit: number | undefined;
21
+ readonly filters: unknown;
22
+ readonly sort: unknown;
23
+ constructor(dataMartId: string, projectId: string, userId: string, roles: RoleType[], limit: number | undefined, filters: unknown, sort?: unknown);
24
+ }
25
+ export interface DataMartPreviewColumn {
26
+ name: string;
27
+ alias?: string;
28
+ type?: string;
29
+ }
30
+ export type PreviewCell = string | number | boolean | null;
31
+ export interface DataMartPreviewResult {
32
+ columns: DataMartPreviewColumn[];
33
+ rows: PreviewCell[][];
34
+ rowCount: number;
35
+ limit: number;
36
+ truncated: boolean;
37
+ }
38
+ export declare const CLIENT_CLOSED_REQUEST_STATUS = 499;
39
+ export declare class PreviewAbortedError extends HttpException {
40
+ constructor();
41
+ }
42
+ export declare class PreviewDataMartService {
43
+ private readonly dataMartService;
44
+ private readonly blendableSchemaService;
45
+ private readonly composer;
46
+ private readonly readerResolver;
47
+ private readonly accessDecisionService;
48
+ private readonly errorMapperResolver;
49
+ private readonly projectBillingService;
50
+ private readonly deadlineMs;
51
+ private readonly logger;
52
+ constructor(dataMartService: DataMartService, blendableSchemaService: BlendableSchemaService, composer: ReportSqlComposerService, readerResolver: TypeResolver<DataStorageType, DataStorageReportReader>, accessDecisionService: AccessDecisionService, errorMapperResolver: TypeResolver<DataStorageType, DataStorageErrorMapper>, projectBillingService: ProjectBillingService, deadlineMs?: number);
53
+ run(command: PreviewDataMartCommand, signal?: AbortSignal): Promise<DataMartPreviewResult>;
54
+ private parseLimit;
55
+ private parseSort;
56
+ private parseFilters;
57
+ private readRows;
58
+ }
59
+ export declare function toPreviewCell(value: unknown): PreviewCell;
@@ -0,0 +1,293 @@
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
+ exports.CLIENT_CLOSED_REQUEST_STATUS = 499;
55
+ class PreviewAbortedError extends common_1.HttpException {
56
+ constructor() {
57
+ super('Preview was cancelled', exports.CLIENT_CLOSED_REQUEST_STATUS);
58
+ this.name = 'PreviewAbortedError';
59
+ }
60
+ }
61
+ exports.PreviewAbortedError = PreviewAbortedError;
62
+ let PreviewDataMartService = PreviewDataMartService_1 = class PreviewDataMartService {
63
+ dataMartService;
64
+ blendableSchemaService;
65
+ composer;
66
+ readerResolver;
67
+ accessDecisionService;
68
+ errorMapperResolver;
69
+ projectBillingService;
70
+ deadlineMs;
71
+ logger = new common_1.Logger(PreviewDataMartService_1.name);
72
+ constructor(dataMartService, blendableSchemaService, composer, readerResolver, accessDecisionService, errorMapperResolver, projectBillingService, deadlineMs = exports.DEFAULT_PREVIEW_DEADLINE_MS) {
73
+ this.dataMartService = dataMartService;
74
+ this.blendableSchemaService = blendableSchemaService;
75
+ this.composer = composer;
76
+ this.readerResolver = readerResolver;
77
+ this.accessDecisionService = accessDecisionService;
78
+ this.errorMapperResolver = errorMapperResolver;
79
+ this.projectBillingService = projectBillingService;
80
+ this.deadlineMs = deadlineMs;
81
+ }
82
+ async run(command, signal) {
83
+ const limit = this.parseLimit(command.limit);
84
+ const filters = this.parseFilters(command.filters);
85
+ const sort = this.parseSort(command.sort);
86
+ const dataMart = await this.dataMartService.getByIdAndProjectId(command.dataMartId, command.projectId);
87
+ 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);
88
+ if (!canSee) {
89
+ throw new common_1.ForbiddenException('You do not have access to this Data Mart');
90
+ }
91
+ const accessor = { userId: command.userId, roles: command.roles };
92
+ const schema = await this.blendableSchemaService.computeBlendableSchema(dataMart.id, dataMart.projectId, accessor);
93
+ const calculatedNames = new Set((0, calculated_field_utils_1.calculatedFieldsOf)(schema.nativeFields).map(f => f.name));
94
+ const fields = schema.nativeFields
95
+ .filter(data_mart_schema_utils_1.isConnected)
96
+ .map(field => field.name)
97
+ .filter(name => !calculatedNames.has(name));
98
+ if (fields.length === 0) {
99
+ throw new common_1.BadRequestException('This Data Mart has no visible fields in its Output Schema yet. Refresh the schema, then preview again.');
100
+ }
101
+ const readPlan = {
102
+ dataMart,
103
+ columnConfig: fields,
104
+ filterConfig: filters,
105
+ sortConfig: sort,
106
+ limitConfig: limit + 1,
107
+ };
108
+ throwIfAborted(signal);
109
+ await this.projectBillingService.verifyCanPerformOperations(dataMart.projectId, project_billing_service_1.RunKind.HTTP_DATA_RUN);
110
+ throwIfAborted(signal);
111
+ let result;
112
+ try {
113
+ result = await this.readRows(dataMart, readPlan, accessor, schema, limit, signal);
114
+ }
115
+ catch (error) {
116
+ if (error instanceof common_1.HttpException || error instanceof business_violation_exception_1.BusinessViolationException) {
117
+ throw error;
118
+ }
119
+ this.logger.warn(`Preview of Data Mart ${dataMart.id} failed: ${(0, internal_helpers_1.castError)(error).message}`);
120
+ const mapper = await this.errorMapperResolver.resolve(dataMart.storage.type);
121
+ throw mapper.toStorageReadError(error, { force: true });
122
+ }
123
+ const truncated = result.rows.length > limit;
124
+ const rows = (truncated ? result.rows.slice(0, limit) : result.rows).map(row => row.map(toPreviewCell));
125
+ return { columns: result.columns, rows, rowCount: rows.length, limit, truncated };
126
+ }
127
+ parseLimit(limit) {
128
+ if (limit === undefined || limit === null)
129
+ return exports.PREVIEW_DEFAULT_LIMIT;
130
+ if (!Number.isInteger(limit) || limit < 1 || limit > exports.PREVIEW_MAX_LIMIT) {
131
+ throw new common_1.BadRequestException(`limit must be an integer between 1 and ${exports.PREVIEW_MAX_LIMIT}`);
132
+ }
133
+ return limit;
134
+ }
135
+ parseSort(sort) {
136
+ if (sort === undefined || sort === null)
137
+ return null;
138
+ const parsed = sort_config_schema_1.SortConfigSchema.safeParse(sort);
139
+ if (!parsed.success) {
140
+ throw new common_1.BadRequestException({ message: 'Invalid sort', details: parsed.error.issues });
141
+ }
142
+ return parsed.data?.length ? parsed.data : null;
143
+ }
144
+ parseFilters(filters) {
145
+ if (filters === undefined || filters === null)
146
+ return null;
147
+ const parsed = filter_config_schema_1.FilterConfigSchema.safeParse(filters);
148
+ if (!parsed.success) {
149
+ throw new common_1.BadRequestException({
150
+ message: 'Invalid filters',
151
+ details: parsed.error.issues,
152
+ });
153
+ }
154
+ return parsed.data?.length ? parsed.data : null;
155
+ }
156
+ async readRows(dataMart, readPlan, accessor, schema, limit, signal) {
157
+ const overReadLimit = limit + 1;
158
+ const workController = new AbortController();
159
+ let deadlineTimer;
160
+ let abortListener;
161
+ const deadline = new Promise((_, reject) => {
162
+ deadlineTimer = setTimeout(() => {
163
+ workController.abort();
164
+ 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.`));
165
+ }, this.deadlineMs);
166
+ });
167
+ const aborted = new Promise((_, reject) => {
168
+ if (!signal)
169
+ return;
170
+ if (signal.aborted) {
171
+ workController.abort();
172
+ reject(new PreviewAbortedError());
173
+ return;
174
+ }
175
+ abortListener = () => {
176
+ workController.abort();
177
+ reject(new PreviewAbortedError());
178
+ };
179
+ signal.addEventListener('abort', abortListener, { once: true });
180
+ });
181
+ const produce = (async () => {
182
+ let reader;
183
+ try {
184
+ if (workController.signal.aborted)
185
+ throw new PreviewAbortedError();
186
+ const composed = await this.composer.compose(readPlan, accessor, undefined, schema);
187
+ if (workController.signal.aborted)
188
+ throw new PreviewAbortedError();
189
+ reader = await this.readerResolver.resolve(dataMart.storage.type);
190
+ if (!reader.honorsQueryTimeout) {
191
+ this.logger.warn(`Storage ${dataMart.storage.type} does not honor queryTimeoutMs; a preview it runs is not capped warehouse-side.`);
192
+ }
193
+ const description = await reader.prepareReportData(readPlan, {
194
+ sqlOverride: composed.sql,
195
+ sqlOverrideParams: composed.params,
196
+ columnFilter: readPlan.columnConfig ?? undefined,
197
+ blendedDataHeaders: composed.blendedDataHeaders,
198
+ primaryKeyColumns: composed.primaryKeyColumns,
199
+ calculatedFields: composed.calculatedFields,
200
+ queryTimeoutMs: this.deadlineMs,
201
+ signal: workController.signal,
202
+ });
203
+ const columns = description.dataHeaders.map(header => ({
204
+ name: header.name,
205
+ ...(header.alias ? { alias: header.alias } : {}),
206
+ ...(header.storageFieldType ? { type: String(header.storageFieldType) } : {}),
207
+ }));
208
+ const rows = [];
209
+ let batchId;
210
+ do {
211
+ if (workController.signal.aborted)
212
+ break;
213
+ const batch = await reader.readReportDataBatch(batchId, overReadLimit - rows.length);
214
+ rows.push(...batch.dataRows);
215
+ batchId = batch.nextDataBatchId ?? undefined;
216
+ if (batch.dataRows.length === 0)
217
+ break;
218
+ } while (batchId && rows.length < overReadLimit);
219
+ return { columns, rows };
220
+ }
221
+ finally {
222
+ workController.abort();
223
+ try {
224
+ await reader?.finalize();
225
+ }
226
+ catch (finalizeError) {
227
+ this.logger.warn(`reader.finalize() failed; ignoring: ${(0, internal_helpers_1.castError)(finalizeError).message}`);
228
+ }
229
+ }
230
+ })();
231
+ try {
232
+ return await Promise.race([produce, deadline, aborted]);
233
+ }
234
+ finally {
235
+ if (deadlineTimer)
236
+ clearTimeout(deadlineTimer);
237
+ if (signal && abortListener)
238
+ signal.removeEventListener('abort', abortListener);
239
+ }
240
+ }
241
+ };
242
+ exports.PreviewDataMartService = PreviewDataMartService;
243
+ exports.PreviewDataMartService = PreviewDataMartService = PreviewDataMartService_1 = __decorate([
244
+ (0, common_1.Injectable)(),
245
+ __param(3, (0, common_1.Inject)(data_storage_providers_1.DATA_STORAGE_REPORT_READER_RESOLVER)),
246
+ __param(5, (0, common_1.Inject)(data_storage_providers_1.DATA_STORAGE_ERROR_MAPPER_RESOLVER)),
247
+ __param(7, (0, common_1.Optional)()),
248
+ __metadata("design:paramtypes", [data_mart_service_1.DataMartService,
249
+ blendable_schema_service_1.BlendableSchemaService,
250
+ report_sql_composer_service_1.ReportSqlComposerService,
251
+ type_resolver_1.TypeResolver,
252
+ access_decision_1.AccessDecisionService,
253
+ type_resolver_1.TypeResolver,
254
+ project_billing_service_1.ProjectBillingService, Number])
255
+ ], PreviewDataMartService);
256
+ function throwIfAborted(signal) {
257
+ if (signal?.aborted)
258
+ throw new PreviewAbortedError();
259
+ }
260
+ function toPreviewCell(value) {
261
+ if (value === null || value === undefined)
262
+ return null;
263
+ if (typeof value === 'string' || typeof value === 'boolean')
264
+ return value;
265
+ if (typeof value === 'number')
266
+ return Number.isFinite(value) ? value : String(value);
267
+ if (typeof value === 'bigint')
268
+ return value.toString();
269
+ if (value instanceof Date)
270
+ return value.toISOString();
271
+ if (Buffer.isBuffer(value))
272
+ return value.toString('base64');
273
+ if (typeof value === 'object') {
274
+ const toJSON = value.toJSON;
275
+ if (typeof toJSON === 'function') {
276
+ const json = toJSON.call(value);
277
+ if (json !== value)
278
+ return toPreviewCell(json);
279
+ }
280
+ const keys = Object.keys(value);
281
+ if (keys.length === 1 && keys[0] === 'value') {
282
+ return toPreviewCell(value.value);
283
+ }
284
+ try {
285
+ return JSON.stringify(value, (_key, inner) => typeof inner === 'bigint' ? inner.toString() : inner);
286
+ }
287
+ catch {
288
+ return String(value);
289
+ }
290
+ }
291
+ return String(value);
292
+ }
293
+ //# 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;
@@ -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;