@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
@@ -13,20 +13,23 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
13
13
  };
14
14
  var ConnectorExecutorService_1;
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.ConnectorExecutorService = void 0;
16
+ exports.ConnectorExecutorService = exports.MAX_MERGED_RUN_OUTPUT_ENTRIES = void 0;
17
17
  const common_1 = require("@nestjs/common");
18
+ const config_1 = require("@nestjs/config");
18
19
  const typeorm_1 = require("@nestjs/typeorm");
19
20
  const typeorm_2 = require("typeorm");
20
21
  const connectors_1 = require("@owox/connectors");
22
+ const internal_helpers_1 = require("@owox/internal-helpers");
21
23
  const { ConfigDto, GENERATED_REFRESH_TOKEN_CREDENTIAL_FIELD } = connectors_1.Core;
22
24
  const GENERATED_REFRESH_TOKEN_MAX_LENGTH = 4096;
23
- const MAX_MERGED_RUN_OUTPUT_ENTRIES = 10000;
25
+ exports.MAX_MERGED_RUN_OUTPUT_ENTRIES = 10000;
24
26
  const MAX_MERGED_RUN_OUTPUT_BYTES = 6 * 1024 * 1024;
27
+ const MAX_RUN_BUFFER_ENTRIES = exports.MAX_MERGED_RUN_OUTPUT_ENTRIES - 1;
28
+ const MAX_TRACE_ENTRIES = 1000;
25
29
  const data_mart_run_entity_1 = require("../../entities/data-mart-run.entity");
26
30
  const data_mart_run_status_enum_1 = require("../../enums/data-mart-run-status.enum");
27
31
  const project_operation_blocked_exception_1 = require("../../../common/exceptions/project-operation-blocked.exception");
28
32
  const connector_output_capture_service_1 = require("../../connector-types/connector-message/services/connector-output-capture.service");
29
- const internal_helpers_1 = require("@owox/internal-helpers");
30
33
  const connector_message_type_enum_1 = require("../../connector-types/enums/connector-message-type-enum");
31
34
  const manual_backfill_range_1 = require("../../utils/manual-backfill-range");
32
35
  const connector_state_service_1 = require("../../connector-types/connector-message/services/connector-state.service");
@@ -38,6 +41,7 @@ const google_oauth_exceptions_1 = require("../../exceptions/google-oauth.excepti
38
41
  const owox_event_dispatcher_1 = require("../../../common/event-dispatcher/owox-event-dispatcher");
39
42
  const connector_run_event_1 = require("../../events/connector-run.event");
40
43
  const project_billing_service_1 = require("../project-billing/project-billing.service");
44
+ const connector_definition_service_1 = require("./connector-definition.service");
41
45
  const connector_process_spawner_service_1 = require("./connector-process-spawner.service");
42
46
  const connector_storage_config_service_1 = require("./connector-storage-config.service");
43
47
  const connector_source_config_service_1 = require("./connector-source-config.service");
@@ -45,6 +49,10 @@ const connector_credential_injector_service_1 = require("./connector-credential-
45
49
  const connector_source_credentials_service_1 = require("./connector-source-credentials.service");
46
50
  const connector_message_utils_1 = require("./connector-message.utils");
47
51
  const data_mart_run_cancellation_1 = require("../../utils/data-mart-run-cancellation");
52
+ const run_log_flusher_1 = require("./run-log-flusher");
53
+ function addBoundedMessage(array, message) {
54
+ (0, connector_message_utils_1.addMessageToArray)(array, message, MAX_RUN_BUFFER_ENTRIES);
55
+ }
48
56
  let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecutorService {
49
57
  dataMartRunRepository;
50
58
  processSpawner;
@@ -58,9 +66,11 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
58
66
  eventDispatcher;
59
67
  projectBillingService;
60
68
  dataMartService;
69
+ connectorDefinitionService;
61
70
  connectorSourceCredentialsService;
71
+ configService;
62
72
  logger = new common_1.Logger(ConnectorExecutorService_1.name);
63
- constructor(dataMartRunRepository, processSpawner, storageConfigService, sourceConfigService, credentialInjector, connectorOutputCaptureService, connectorStateService, gracefulShutdownService, systemTimeService, eventDispatcher, projectBillingService, dataMartService, connectorSourceCredentialsService) {
73
+ constructor(dataMartRunRepository, processSpawner, storageConfigService, sourceConfigService, credentialInjector, connectorOutputCaptureService, connectorStateService, gracefulShutdownService, systemTimeService, eventDispatcher, projectBillingService, dataMartService, connectorDefinitionService, connectorSourceCredentialsService, configService) {
64
74
  this.dataMartRunRepository = dataMartRunRepository;
65
75
  this.processSpawner = processSpawner;
66
76
  this.storageConfigService = storageConfigService;
@@ -73,16 +83,23 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
73
83
  this.eventDispatcher = eventDispatcher;
74
84
  this.projectBillingService = projectBillingService;
75
85
  this.dataMartService = dataMartService;
86
+ this.connectorDefinitionService = connectorDefinitionService;
76
87
  this.connectorSourceCredentialsService = connectorSourceCredentialsService;
88
+ this.configService = configService;
77
89
  }
78
90
  async executeInBackground(dataMart, run, payload, signal) {
79
91
  const runId = run.id;
80
92
  const processId = `connector-run-${runId}`;
93
+ const hasOutputFromEarlierAttempt = (run.logs?.length ?? 0) > 0 || (run.errors?.length ?? 0) > 0;
81
94
  this.gracefulShutdownService.registerActiveProcess(processId);
82
95
  const capturedLogs = [];
83
96
  const capturedErrors = [];
84
97
  let configurationResults = [];
85
- let hasSuccessfulRun = false;
98
+ const liveLogs = [];
99
+ const liveErrors = [];
100
+ let logFlusher = null;
101
+ let allConfigurationsSucceeded = false;
102
+ let hasAnySuccessfulConfiguration = false;
86
103
  let wasCancelled = false;
87
104
  let operationBlockedException;
88
105
  try {
@@ -100,21 +117,24 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
100
117
  this.logger.log(`Skipping connector execution for run ${runId}: run reached a terminal status before execution started`, { dataMartId: dataMart.id, projectId: dataMart.projectId, runId });
101
118
  return;
102
119
  }
103
- configurationResults = await this.runConnectorConfigurations(run, processId, dataMart, payload, signal);
120
+ logFlusher = this.createRunLogFlusher(runId, liveLogs, liveErrors, hasOutputFromEarlierAttempt);
121
+ logFlusher?.start();
122
+ configurationResults = await this.runConnectorConfigurations(run, processId, dataMart, payload, signal, liveLogs, liveErrors);
104
123
  configurationResults.forEach(result => {
105
- result.logs.forEach(log => (0, connector_message_utils_1.addMessageToArray)(capturedLogs, log));
106
- result.errors.forEach(error => (0, connector_message_utils_1.addMessageToArray)(capturedErrors, error));
124
+ result.logs.forEach(log => addBoundedMessage(capturedLogs, log));
125
+ result.errors.forEach(error => addBoundedMessage(capturedErrors, error));
107
126
  });
108
127
  const successCount = configurationResults.filter(r => r.success).length;
109
128
  const totalCount = configurationResults.length;
110
- hasSuccessfulRun = successCount > 0;
111
- wasCancelled = signal?.aborted === true && !hasSuccessfulRun;
129
+ allConfigurationsSucceeded = totalCount > 0 && successCount === totalCount;
130
+ hasAnySuccessfulConfiguration = successCount > 0;
131
+ wasCancelled = signal?.aborted === true && !allConfigurationsSucceeded;
112
132
  this.logger.log(`Connector execution completed: ${successCount}/${totalCount} configurations successful`, { dataMartId: dataMart.id, projectId: dataMart.projectId, runId, successCount, totalCount });
113
133
  }
114
134
  catch (error) {
115
- wasCancelled = signal?.aborted === true && !hasSuccessfulRun;
135
+ wasCancelled = signal?.aborted === true && !allConfigurationsSucceeded;
116
136
  const errorMessage = error instanceof Error ? error.message : String(error);
117
- (0, connector_message_utils_1.addMessageToArray)(capturedErrors, {
137
+ addBoundedMessage(capturedErrors, {
118
138
  type: connector_message_type_enum_1.ConnectorMessageType.ERROR,
119
139
  at: this.systemTimeService.now().toISOString(),
120
140
  error: errorMessage,
@@ -142,7 +162,7 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
142
162
  catch (error) {
143
163
  const fieldsUpdateError = error instanceof Error ? error.message : String(error);
144
164
  const warning = 'Connector data was imported, but the source field list could not be synchronized. It will be retried on the next run.';
145
- (0, connector_message_utils_1.addMessageToArray)(capturedLogs, {
165
+ addBoundedMessage(capturedLogs, {
146
166
  type: connector_message_type_enum_1.ConnectorMessageType.WARNING,
147
167
  at: this.systemTimeService.now().toISOString(),
148
168
  warning,
@@ -158,12 +178,18 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
158
178
  if (hasSuccessfulFieldsUpdate) {
159
179
  await this.actualizeSchemaAfterConnectorExecution(dataMart, runId);
160
180
  }
161
- const statusPersisted = await this.updateRunStatus(runId, hasSuccessfulRun, capturedLogs, capturedErrors, operationBlockedException, wasCancelled);
162
- if (hasSuccessfulRun && statusPersisted) {
181
+ await logFlusher?.stop();
182
+ const flushedSnapshot = logFlusher?.persistedSnapshot() ?? null;
183
+ const persistedStatus = await this.updateRunStatus(runId, allConfigurationsSucceeded, capturedLogs, capturedErrors, operationBlockedException, wasCancelled, flushedSnapshot);
184
+ if (hasAnySuccessfulConfiguration &&
185
+ persistedStatus !== null &&
186
+ persistedStatus !== data_mart_run_status_enum_1.DataMartRunStatus.INTERRUPTED) {
163
187
  await this.projectBillingService.registerConnectorRunConsumption(dataMart, runId);
188
+ }
189
+ if (allConfigurationsSucceeded && persistedStatus !== null) {
164
190
  await this.eventDispatcher.publishExternal(new connector_run_event_1.ConnectorRunEvent(dataMart.id, runId, dataMart.projectId, run.createdById ?? 'system', run.runType, 'successfully'));
165
191
  }
166
- else if (statusPersisted &&
192
+ else if (persistedStatus !== null &&
167
193
  !wasCancelled &&
168
194
  !this.gracefulShutdownService.isInShutdownMode()) {
169
195
  await this.eventDispatcher.publishExternal(new connector_run_event_1.ConnectorRunEvent(dataMart.id, runId, dataMart.projectId, run.createdById ?? 'system', run.runType, 'unsuccessfully'));
@@ -199,7 +225,7 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
199
225
  }
200
226
  }
201
227
  }
202
- async runConnectorConfigurations(run, processId, dataMart, payload, signal) {
228
+ async runConnectorConfigurations(run, processId, dataMart, payload, signal, liveLogs = [], liveErrors = []) {
203
229
  const runId = run.id;
204
230
  const definition = dataMart.definition;
205
231
  const { connector } = definition;
@@ -207,6 +233,8 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
207
233
  const runBody = (0, manual_backfill_range_1.unwrapRunPayload)(payload);
208
234
  const isBackfill = (0, manual_backfill_range_1.isManualBackfillPayload)(runBody);
209
235
  let backfillProgress = (0, manual_backfill_range_1.readBackfillProgress)(run.additionalParams);
236
+ const customManifest = await this.connectorDefinitionService.tryResolveManifest(dataMart.projectId, connector.source.name, connector.source.version);
237
+ const manifestForRunner = customManifest ? this.stripManifestForRunner(customManifest) : null;
210
238
  for (const [configIndex, config] of connector.source.configuration.entries()) {
211
239
  const configId = config._id;
212
240
  if (!configId) {
@@ -234,7 +262,23 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
234
262
  }
235
263
  const configLogs = [];
236
264
  const configErrors = [];
265
+ let tracesKept = 0;
237
266
  let progressWrite = Promise.resolve();
267
+ let stateWrite = Promise.resolve();
268
+ const persistState = (state, at) => {
269
+ stateWrite = stateWrite.then(() => this.connectorStateService
270
+ .updateState(dataMart.id, configId, { state, at })
271
+ .catch(error => {
272
+ const errorMessage = error instanceof Error ? error.message : String(error);
273
+ this.logger.error(`Failed to save state: ${errorMessage}`, error?.stack, {
274
+ dataMartId: dataMart.id,
275
+ projectId: dataMart.projectId,
276
+ runId,
277
+ configId,
278
+ error: errorMessage,
279
+ });
280
+ }));
281
+ };
238
282
  const resume = (0, manual_backfill_range_1.resumeManualBackfillPayload)(runBody, backfillProgress[configId]);
239
283
  let success = false;
240
284
  let credentialUpdates;
@@ -244,7 +288,8 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
244
288
  const logCaptureConfig = this.connectorOutputCaptureService.createCapture((message) => {
245
289
  switch (message.type) {
246
290
  case connector_message_type_enum_1.ConnectorMessageType.ERROR:
247
- (0, connector_message_utils_1.addMessageToArray)(configErrors, message);
291
+ addBoundedMessage(configErrors, message);
292
+ addBoundedMessage(liveErrors, message);
248
293
  this.logger.error(`${message.toFormattedString()}`, {
249
294
  dataMartId: dataMart.id,
250
295
  projectId: dataMart.projectId,
@@ -253,7 +298,7 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
253
298
  });
254
299
  break;
255
300
  case connector_message_type_enum_1.ConnectorMessageType.WARNING:
256
- (0, connector_message_utils_1.addMessageToArray)(configErrors, message);
301
+ addBoundedMessage(configErrors, message);
257
302
  this.logger.warn(`${message.toFormattedString()}`, {
258
303
  dataMartId: dataMart.id,
259
304
  projectId: dataMart.projectId,
@@ -261,23 +306,14 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
261
306
  configId,
262
307
  });
263
308
  break;
309
+ case connector_message_type_enum_1.ConnectorMessageType.STATE_UPDATE:
310
+ persistState(message.state, message.at);
311
+ break;
264
312
  case connector_message_type_enum_1.ConnectorMessageType.REQUESTED_DATE: {
313
+ addBoundedMessage(configLogs, message);
314
+ addBoundedMessage(liveLogs, message);
265
315
  if (!isBackfill) {
266
- this.connectorStateService
267
- .updateState(dataMart.id, configId, {
268
- state: { date: message.date },
269
- at: message.at,
270
- })
271
- .catch(error => {
272
- const errorMessage = error instanceof Error ? error.message : String(error);
273
- this.logger.error(`Failed to save state: ${errorMessage}`, error?.stack, {
274
- dataMartId: dataMart.id,
275
- projectId: dataMart.projectId,
276
- runId,
277
- configId,
278
- error: errorMessage,
279
- });
280
- });
316
+ persistState({ date: message.date }, message.at);
281
317
  break;
282
318
  }
283
319
  const completedDay = (0, manual_backfill_range_1.parseBackfillDay)(message.date);
@@ -311,7 +347,8 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
311
347
  case connector_message_type_enum_1.ConnectorMessageType.STATUS:
312
348
  if (message.status === connectors_1.Core.EXECUTION_STATUS.ERROR) {
313
349
  success = false;
314
- (0, connector_message_utils_1.addMessageToArray)(configLogs, message);
350
+ addBoundedMessage(configLogs, message);
351
+ addBoundedMessage(liveLogs, message);
315
352
  this.logger.warn(`${message.toFormattedString()}`, {
316
353
  dataMartId: dataMart.id,
317
354
  projectId: dataMart.projectId,
@@ -321,7 +358,8 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
321
358
  }
322
359
  else if (this.isSuccessfulConnectorStatus(message.status)) {
323
360
  success = true;
324
- (0, connector_message_utils_1.addMessageToArray)(configLogs, message);
361
+ addBoundedMessage(configLogs, message);
362
+ addBoundedMessage(liveLogs, message);
325
363
  this.logger.log(`${message.status}`, {
326
364
  dataMartId: dataMart.id,
327
365
  projectId: dataMart.projectId,
@@ -330,7 +368,8 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
330
368
  });
331
369
  }
332
370
  else {
333
- (0, connector_message_utils_1.addMessageToArray)(configLogs, message);
371
+ addBoundedMessage(configLogs, message);
372
+ addBoundedMessage(liveLogs, message);
334
373
  this.logger.log(`${message.status}`, {
335
374
  dataMartId: dataMart.id,
336
375
  projectId: dataMart.projectId,
@@ -340,7 +379,23 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
340
379
  }
341
380
  break;
342
381
  default:
343
- (0, connector_message_utils_1.addMessageToArray)(configLogs, message);
382
+ if (message.type === connector_message_type_enum_1.ConnectorMessageType.LOG &&
383
+ message.eventType === 'TRACE' &&
384
+ ++tracesKept > MAX_TRACE_ENTRIES) {
385
+ if (tracesKept === MAX_TRACE_ENTRIES + 1) {
386
+ const notice = {
387
+ type: connector_message_type_enum_1.ConnectorMessageType.LOG,
388
+ at: message.at,
389
+ message: `Only the first ${MAX_TRACE_ENTRIES} request traces of this run are kept.`,
390
+ toFormattedString: () => `[LOG] Only the first ${MAX_TRACE_ENTRIES} request traces of this run are kept.`,
391
+ };
392
+ addBoundedMessage(configLogs, notice);
393
+ addBoundedMessage(liveLogs, notice);
394
+ }
395
+ break;
396
+ }
397
+ addBoundedMessage(configLogs, message);
398
+ addBoundedMessage(liveLogs, message);
344
399
  this.logger.log(`${message.toFormattedString()}`, {
345
400
  dataMartId: dataMart.id,
346
401
  projectId: dataMart.projectId,
@@ -382,7 +437,7 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
382
437
  });
383
438
  }
384
439
  const runConfig = this.sourceConfigService.buildRunConfig(resume.body, configState);
385
- await this.processSpawner.spawnConnector(dataMart.id, runId, configuration, runConfig, logCaptureConfig, signal);
440
+ await this.processSpawner.spawnConnector(dataMart.id, runId, configuration, runConfig, logCaptureConfig, signal, manifestForRunner);
386
441
  if (success) {
387
442
  this.logger.log(`Configuration ${configIndex + 1} completed successfully`, {
388
443
  dataMartId: dataMart.id,
@@ -404,7 +459,7 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
404
459
  configId,
405
460
  configIndex,
406
461
  };
407
- (0, connector_message_utils_1.addMessageToArray)(configErrors, wasInterrupted
462
+ addBoundedMessage(configErrors, wasInterrupted
408
463
  ? {
409
464
  type: connector_message_type_enum_1.ConnectorMessageType.WARNING,
410
465
  at,
@@ -439,7 +494,7 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
439
494
  configIndex,
440
495
  error: errorMessage,
441
496
  };
442
- (0, connector_message_utils_1.addMessageToArray)(configErrors, isWarning
497
+ addBoundedMessage(configErrors, isWarning
443
498
  ? {
444
499
  type: connector_message_type_enum_1.ConnectorMessageType.WARNING,
445
500
  at,
@@ -461,15 +516,26 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
461
516
  }
462
517
  finally {
463
518
  await progressWrite;
519
+ await stateWrite;
464
520
  if (credentialUpdates) {
465
521
  try {
466
- await this.saveConnectorCredentials(configForCredentialUpdates, credentialUpdates, expectedCredentialValues, dataMart, runId, configId);
522
+ const credentialsPersisted = await this.saveConnectorCredentials(configForCredentialUpdates, credentialUpdates, expectedCredentialValues, dataMart, runId, configId);
523
+ if (!credentialsPersisted) {
524
+ const warning = 'Connector data was imported, but the refreshed credential could not be saved. ' +
525
+ 'If the next run fails to authenticate, reconnect this source.';
526
+ addBoundedMessage(configLogs, {
527
+ type: connector_message_type_enum_1.ConnectorMessageType.WARNING,
528
+ at: this.systemTimeService.now().toISOString(),
529
+ warning,
530
+ toFormattedString: () => `[WARNING] ${warning}`,
531
+ });
532
+ }
467
533
  }
468
534
  catch (error) {
469
535
  success = false;
470
536
  const errorMessage = error instanceof Error ? error.message : String(error);
471
537
  const credentialErrorMessage = `Failed to update connector credentials: ${errorMessage}`;
472
- (0, connector_message_utils_1.addMessageToArray)(configErrors, {
538
+ addBoundedMessage(configErrors, {
473
539
  type: connector_message_type_enum_1.ConnectorMessageType.ERROR,
474
540
  at: this.systemTimeService.now().toISOString(),
475
541
  error: credentialErrorMessage,
@@ -525,25 +591,33 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
525
591
  });
526
592
  }
527
593
  if (Object.keys(credentialUpdates).length === 0) {
528
- return;
594
+ return true;
529
595
  }
530
596
  const credentialId = this.getCredentialIdForConfig(config);
531
597
  if (!credentialId) {
532
- this.logger.debug(`Skipping connector credential update: no credential reference found`, {
598
+ this.logger.warn(`Rotated credential was not persisted: this connector has no stored credential. ` +
599
+ `Configure it with a stored credential so the rotated token survives the next run.`, {
533
600
  dataMartId: dataMart.id,
534
601
  projectId: dataMart.projectId,
535
602
  runId,
536
603
  configId,
537
604
  credentialKeys: Object.keys(credentials),
538
605
  });
539
- return;
540
- }
541
- if (expectedCredentialValues) {
542
- await this.connectorSourceCredentialsService.updateCredentialFields(credentialId, dataMart.projectId, credentialUpdates, expectedCredentialValues);
606
+ return false;
543
607
  }
544
- else {
545
- await this.connectorSourceCredentialsService.updateCredentialFields(credentialId, dataMart.projectId, credentialUpdates);
608
+ const result = expectedCredentialValues
609
+ ? await this.connectorSourceCredentialsService.updateCredentialFields(credentialId, dataMart.projectId, credentialUpdates, expectedCredentialValues)
610
+ : await this.connectorSourceCredentialsService.updateCredentialFields(credentialId, dataMart.projectId, credentialUpdates);
611
+ if (!result.updated) {
612
+ this.logger.warn(`Rotated connector credential was not persisted`, {
613
+ dataMartId: dataMart.id,
614
+ projectId: dataMart.projectId,
615
+ runId,
616
+ configId,
617
+ credentialId,
618
+ });
546
619
  }
620
+ return result.updated;
547
621
  }
548
622
  catch (error) {
549
623
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -651,20 +725,39 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
651
725
  isSuccessfulConnectorStatus(status) {
652
726
  return status === connectors_1.Core.EXECUTION_STATUS.IMPORT_DONE;
653
727
  }
654
- async updateRunStatus(runId, hasSuccessfulRun, capturedLogs, capturedErrors, operationBlockedException, wasCancelled = false) {
728
+ stripManifestForRunner(manifest) {
729
+ const { logo: _logo, ...rest } = manifest;
730
+ return rest;
731
+ }
732
+ createRunLogFlusher(runId, liveLogs, liveErrors, hasOutputFromEarlierAttempt) {
733
+ if (hasOutputFromEarlierAttempt)
734
+ return null;
735
+ const intervalMs = this.configService.get('CONNECTOR_RUN_LOG_FLUSH_INTERVAL_MS', 2000);
736
+ if (intervalMs <= 0)
737
+ return null;
738
+ return new run_log_flusher_1.RunLogFlusher(intervalMs, (0, run_log_flusher_1.createRunLogSnapshotReader)(liveLogs, liveErrors), async ({ logs, errors }) => {
739
+ await this.dataMartRunRepository.update(runId, {
740
+ logs: logs.length > 0 ? logs : null,
741
+ errors: errors.length > 0 ? errors : null,
742
+ });
743
+ }, error => this.logger.warn(`Incremental log flush failed for run ${runId}: ${(0, internal_helpers_1.castError)(error).message}`));
744
+ }
745
+ async updateRunStatus(runId, allConfigurationsSucceeded, capturedLogs, capturedErrors, operationBlockedException, wasCancelled = false, flushedSnapshot = null) {
655
746
  let status = wasCancelled
656
747
  ? data_mart_run_status_enum_1.DataMartRunStatus.CANCELLED
657
- : hasSuccessfulRun
748
+ : allConfigurationsSucceeded
658
749
  ? data_mart_run_status_enum_1.DataMartRunStatus.SUCCESS
659
750
  : operationBlockedException
660
751
  ? data_mart_run_status_enum_1.DataMartRunStatus.RESTRICTED
661
752
  : data_mart_run_status_enum_1.DataMartRunStatus.FAILED;
662
- if (!wasCancelled && !hasSuccessfulRun && this.gracefulShutdownService.isInShutdownMode()) {
753
+ if (!wasCancelled &&
754
+ !allConfigurationsSucceeded &&
755
+ this.gracefulShutdownService.isInShutdownMode()) {
663
756
  status = data_mart_run_status_enum_1.DataMartRunStatus.INTERRUPTED;
664
757
  }
665
758
  const newLogStrings = capturedLogs.map(log => JSON.stringify(log));
666
759
  const newErrorStrings = capturedErrors.map(error => JSON.stringify(error));
667
- const { logs: logsToSave, errors: errorsToSave } = await this.mergeWithPersistedOutput(runId, newLogStrings, newErrorStrings);
760
+ const { logs: logsToSave, errors: errorsToSave } = await this.mergeWithPersistedOutput(runId, newLogStrings, newErrorStrings, flushedSnapshot);
668
761
  const result = await this.dataMartRunRepository.update({ id: runId, status: (0, typeorm_2.In)(data_mart_run_cancellation_1.NON_TERMINAL_DATA_MART_RUN_STATUSES) }, {
669
762
  status,
670
763
  finishedAt: this.systemTimeService.now(),
@@ -672,18 +765,18 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
672
765
  errors: errorsToSave,
673
766
  });
674
767
  if (result.affected) {
675
- return true;
768
+ return status;
676
769
  }
677
770
  this.logger.log(`Skipped final status update for run ${runId}: run already reached a terminal status`);
678
771
  if (newLogStrings.length > 0 || newErrorStrings.length > 0) {
679
772
  await this.dataMartRunRepository.update({ id: runId }, { logs: logsToSave, errors: errorsToSave });
680
773
  }
681
- return false;
774
+ return null;
682
775
  }
683
- async mergeWithPersistedOutput(runId, newLogStrings, newErrorStrings) {
776
+ async mergeWithPersistedOutput(runId, newLogStrings, newErrorStrings, flushedSnapshot = null) {
684
777
  const existing = await this.dataMartRunRepository.findOne({ where: { id: runId } });
685
- const existingLogs = existing?.logs ?? [];
686
- const existingErrors = existing?.errors ?? [];
778
+ const existingLogs = this.discountFlushedEntries(existing?.logs ?? [], flushedSnapshot?.logs, newLogStrings);
779
+ const existingErrors = this.discountFlushedEntries(existing?.errors ?? [], flushedSnapshot?.errors, newErrorStrings);
687
780
  const mergedLogs = this.capMergedEntries([...existingLogs, ...newLogStrings]);
688
781
  const mergedErrors = this.capMergedEntries([...existingErrors, ...newErrorStrings]);
689
782
  return {
@@ -691,10 +784,25 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
691
784
  errors: mergedErrors.length > 0 ? mergedErrors : null,
692
785
  };
693
786
  }
787
+ discountFlushedEntries(persisted, flushed, replacement) {
788
+ if (!flushed?.length || flushed.length > persisted.length) {
789
+ return persisted;
790
+ }
791
+ if (flushed.length > replacement.length) {
792
+ return persisted;
793
+ }
794
+ const start = persisted.length - flushed.length;
795
+ for (let i = 0; i < flushed.length; i++) {
796
+ if (persisted[start + i] !== flushed[i]) {
797
+ return persisted;
798
+ }
799
+ }
800
+ return persisted.slice(0, start);
801
+ }
694
802
  capMergedEntries(entries) {
695
803
  let keptBytes = 0;
696
804
  let keep = 0;
697
- while (keep < entries.length && keep < MAX_MERGED_RUN_OUTPUT_ENTRIES) {
805
+ while (keep < entries.length && keep < exports.MAX_MERGED_RUN_OUTPUT_ENTRIES) {
698
806
  const entryBytes = Buffer.byteLength(JSON.stringify(entries[entries.length - 1 - keep])) + 1;
699
807
  if (keptBytes + entryBytes > MAX_MERGED_RUN_OUTPUT_BYTES) {
700
808
  break;
@@ -705,7 +813,7 @@ let ConnectorExecutorService = ConnectorExecutorService_1 = class ConnectorExecu
705
813
  if (keep === entries.length) {
706
814
  return entries;
707
815
  }
708
- keep = Math.min(keep, MAX_MERGED_RUN_OUTPUT_ENTRIES - 1);
816
+ keep = Math.min(keep, exports.MAX_MERGED_RUN_OUTPUT_ENTRIES - 1);
709
817
  const dropped = entries.length - keep;
710
818
  const truncationNotice = JSON.stringify({
711
819
  type: connector_message_type_enum_1.ConnectorMessageType.LOG,
@@ -731,6 +839,8 @@ exports.ConnectorExecutorService = ConnectorExecutorService = ConnectorExecutorS
731
839
  owox_event_dispatcher_1.OwoxEventDispatcher,
732
840
  project_billing_service_1.ProjectBillingService,
733
841
  data_mart_service_1.DataMartService,
734
- connector_source_credentials_service_1.ConnectorSourceCredentialsService])
842
+ connector_definition_service_1.ConnectorDefinitionService,
843
+ connector_source_credentials_service_1.ConnectorSourceCredentialsService,
844
+ config_1.ConfigService])
735
845
  ], ConnectorExecutorService);
736
846
  //# sourceMappingURL=connector-executor.service.js.map
@@ -50,7 +50,7 @@ let ConnectorFieldsPreviewService = ConnectorFieldsPreviewService_1 = class Conn
50
50
  throw (0, connector_preview_support_1.mapConnectorPreviewError)(error, this.logger, PREVIEW_ERROR_MESSAGES);
51
51
  }
52
52
  try {
53
- source.config.validate();
53
+ source.context.validate();
54
54
  }
55
55
  catch (error) {
56
56
  const message = error instanceof Error ? error.message : String(error);
@@ -43,9 +43,9 @@ function addMessageToArray(array, message, maxCount) {
43
43
  if (array.length === maxCount) {
44
44
  logger.warn(`Maximum number of messages (${maxCount}) reached.`);
45
45
  array.push({
46
- type: connector_message_type_enum_1.ConnectorMessageType.ERROR,
46
+ type: connector_message_type_enum_1.ConnectorMessageType.WARNING,
47
47
  at: new Date().toISOString(),
48
- error: `Maximum number of messages (${maxCount}) reached.`,
48
+ warning: `Maximum number of messages (${maxCount}) reached.`,
49
49
  toFormattedString: () => `[WARNING] Maximum number of messages (${maxCount}) reached.`,
50
50
  });
51
51
  }
@@ -27,7 +27,7 @@ let ConnectorPreviewCredentialsService = class ConnectorPreviewCredentialsServic
27
27
  async inject(connectorName, config, context) {
28
28
  const previewConfig = this.withoutStoredSecretReferenceForInlineKey(config);
29
29
  await this.validateReferences(connectorName, previewConfig, context);
30
- const configWithSecrets = await this.credentialInjector.injectSecrets(previewConfig, context.projectId);
30
+ const configWithSecrets = await this.credentialInjector.injectSecrets(previewConfig, context.projectId, connectorName);
31
31
  return this.credentialInjector.injectOAuthCredentials(configWithSecrets, connectorName, context.projectId);
32
32
  }
33
33
  withoutStoredSecretReferenceForInlineKey(config) {
@@ -5,7 +5,7 @@ export interface ConnectorPreviewErrorMessages {
5
5
  unexpectedLog: string;
6
6
  }
7
7
  export interface ConnectorPreviewSource {
8
- config: {
8
+ context: {
9
9
  validate(): void;
10
10
  };
11
11
  fetchFieldsSchema(signal: AbortSignal): Promise<unknown>;
@@ -9,22 +9,12 @@ const connectors_1 = require("@owox/connectors");
9
9
  const CONNECTOR_PREVIEW_TIMEOUT_MS = 15_000;
10
10
  class ConnectorPreviewTimeoutError extends Error {
11
11
  }
12
- class ConnectorPreviewConfig extends connectors_1.Core.AbstractConfig {
13
- logger;
14
- constructor(configData, logger) {
15
- super(configData);
16
- this.logger = logger;
17
- }
18
- handleStatusUpdate() { }
19
- updateLastImportDate() { }
20
- updateLastRequstedDate() { }
21
- isInProgress() {
22
- return false;
23
- }
24
- addWarningToCurrentStatus() { }
25
- logMessage(message) {
26
- this.logger.debug(message);
27
- }
12
+ function createConnectorPreviewContext(init, logger) {
13
+ const context = new connectors_1.Core.AbstractContext(init);
14
+ context.emit = (event) => {
15
+ logger?.debug(JSON.stringify(event.toJSON()));
16
+ };
17
+ return context;
28
18
  }
29
19
  function getConnectorSourceClass(connectorName) {
30
20
  return connectors_1.Connectors[connectorName]?.[`${connectorName}Source`];
@@ -35,11 +25,14 @@ function connectorSourceImplements(connectorName, method) {
35
25
  }
36
26
  function createConnectorPreviewSource(connectorName, configuration, logger) {
37
27
  const SourceClass = connectors_1.Connectors[connectorName][`${connectorName}Source`];
38
- const sourceConfig = new connectors_1.Core.SourceConfigDto({
39
- name: connectorName,
40
- config: configuration,
41
- });
42
- return new SourceClass(new ConnectorPreviewConfig(sourceConfig.config, logger));
28
+ const { config } = new connectors_1.Core.SourceConfigDto({ name: connectorName, config: configuration });
29
+ const context = createConnectorPreviewContext({
30
+ source: { name: connectorName, config },
31
+ storage: { name: 'unused', config: {} },
32
+ runConfig: {},
33
+ env: { datamartId: null, runId: null },
34
+ }, logger);
35
+ return new SourceClass(context);
43
36
  }
44
37
  async function withConnectorPreviewTimeout(work, timeoutMessage) {
45
38
  const abortController = new AbortController();
@@ -2,6 +2,15 @@ import { GracefulShutdownService } from '../../../common/scheduler/services/grac
2
2
  import { Core } from '@owox/connectors';
3
3
  type ConfigDto = InstanceType<typeof Core.ConfigDto>;
4
4
  type RunConfigDto = InstanceType<typeof Core.RunConfigDto>;
5
+ export declare const MAX_CAPTURED_LINE_LENGTH: number;
6
+ export declare const TRUNCATED_OUTPUT_LINE = "[TRUNCATED connector output line: exceeded 1048576 bytes]";
7
+ export declare const INHERITED_CONNECTOR_ENV_VARS: readonly ["PATH", "NODE_OPTIONS", "NODE_EXTRA_CA_CERTS", "SSL_CERT_FILE", "SSL_CERT_DIR", "HOME", "USERPROFILE", "TMPDIR", "TMP", "TEMP", "SystemRoot"];
8
+ export declare function inheritConnectorEnv(names?: readonly string[]): Record<string, string | undefined>;
9
+ export interface CapturedLineBuffer {
10
+ push: (chunk: string) => void;
11
+ flush: () => void;
12
+ }
13
+ export declare function createCapturedLineBuffer(onLine: (message: string) => void): CapturedLineBuffer;
5
14
  export declare class ConnectorProcessSpawnerService {
6
15
  private readonly gracefulShutdownService;
7
16
  private readonly logger;
@@ -12,7 +21,7 @@ export declare class ConnectorProcessSpawnerService {
12
21
  onStderr?: (message: string) => void;
13
22
  };
14
23
  onSpawn?: (pid: number | undefined) => void;
15
- }, signal?: AbortSignal): Promise<void>;
16
- private createLineBuffer;
24
+ }, signal?: AbortSignal, manifest?: Record<string, unknown> | null): Promise<void>;
25
+ protected buildChildEnv(datamartId: string, runId: string, configuration: ConfigDto, runConfig: RunConfigDto, manifest?: Record<string, unknown> | null): Record<string, string | undefined>;
17
26
  }
18
27
  export {};