@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,343 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ConnectorTestService = exports.CONNECTOR_TEST_CONCURRENCY_LIMIT_CODE = exports.MAX_TEST_OUTPUT_LENGTH = exports.TEST_DATE_WINDOW_DAYS = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const config_1 = require("@nestjs/config");
18
+ const cross_spawn_1 = require("cross-spawn");
19
+ const connectors_1 = require("@owox/connectors");
20
+ const internal_helpers_1 = require("@owox/internal-helpers");
21
+ const concurrency_limit_exceeded_exception_1 = require("../../../common/exceptions/concurrency-limit-exceeded.exception");
22
+ const custom_connector_dto_1 = require("../../dto/presentation/custom-connector.dto");
23
+ const connector_process_spawner_service_1 = require("./connector-process-spawner.service");
24
+ const SAMPLE_ONLY_FIELD = '__owox_sample__';
25
+ const DEFAULT_TIMEOUT_MS = 20000;
26
+ exports.TEST_DATE_WINDOW_DAYS = 2;
27
+ exports.MAX_TEST_OUTPUT_LENGTH = 16 * 1024 * 1024;
28
+ const DEFAULT_MAX_TESTS_PER_PROJECT = 3;
29
+ const DEFAULT_MAX_TESTS_TOTAL = 10;
30
+ exports.CONNECTOR_TEST_CONCURRENCY_LIMIT_CODE = 'CONNECTOR_TEST_CONCURRENCY_LIMIT';
31
+ const CHILD_EXIT_GRACE_MS = 1000;
32
+ function readRunFailureEnvelope(line) {
33
+ let envelope;
34
+ try {
35
+ envelope = JSON.parse(line);
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ if (envelope?.type === 'addWarningToCurrentStatus' && typeof envelope.warning === 'string') {
41
+ return envelope.warning;
42
+ }
43
+ if (envelope?.type === 'error' && typeof envelope.error === 'string') {
44
+ return envelope.error.split('\n')[0].replace(/^\w*Error: /, '');
45
+ }
46
+ return null;
47
+ }
48
+ let ConnectorTestService = class ConnectorTestService {
49
+ configService;
50
+ activeTestsByProject = new Map();
51
+ activeTestsTotal = 0;
52
+ constructor(configService) {
53
+ this.configService = configService;
54
+ }
55
+ wrapConfig(configuration) {
56
+ return Object.fromEntries(Object.entries(configuration).map(([k, v]) => [k, { value: v }]));
57
+ }
58
+ pruneToNode(manifest, node) {
59
+ const nodes = (manifest.nodes ?? {});
60
+ if (!nodes[node]) {
61
+ throw new common_1.BadRequestException(`Unknown node "${node}"`);
62
+ }
63
+ return { ...manifest, nodes: { [node]: nodes[node] } };
64
+ }
65
+ selectNodeFields(manifest, node) {
66
+ const nodes = (manifest.nodes ?? {});
67
+ const fields = nodes[node]?.fields ?? {};
68
+ return Object.keys(fields)
69
+ .map(f => `${node} ${f}`)
70
+ .join(', ');
71
+ }
72
+ manifestParseError(manifest) {
73
+ try {
74
+ new connectors_1.Core.ManifestParser().parse(JSON.stringify(manifest));
75
+ return null;
76
+ }
77
+ catch (e) {
78
+ return (0, internal_helpers_1.castError)(e).message;
79
+ }
80
+ }
81
+ assertFitsChildEnv(label, serialized) {
82
+ const sizeBytes = Buffer.byteLength(serialized, 'utf8');
83
+ if (sizeBytes > custom_connector_dto_1.MAX_MANIFEST_SIZE_BYTES) {
84
+ throw new common_1.BadRequestException(`Connector test ${label} is ${sizeBytes} bytes, over the ${custom_connector_dto_1.MAX_MANIFEST_SIZE_BYTES}-byte limit. ` +
85
+ `It is handed to the connector runner as an environment variable, which the operating ` +
86
+ `system refuses past that size.`);
87
+ }
88
+ }
89
+ runnerPath() {
90
+ return require.resolve('@owox/connectors/runner');
91
+ }
92
+ stopChild(child) {
93
+ if (child.pid === undefined || child.exitCode !== null || child.signalCode !== null) {
94
+ return Promise.resolve();
95
+ }
96
+ return new Promise(resolve => {
97
+ let done = false;
98
+ const settle = () => {
99
+ if (done)
100
+ return;
101
+ done = true;
102
+ clearTimeout(killTimer);
103
+ clearTimeout(giveUpTimer);
104
+ resolve();
105
+ };
106
+ child.once('close', settle);
107
+ child.once('error', settle);
108
+ const killTimer = setTimeout(() => {
109
+ try {
110
+ child.kill('SIGKILL');
111
+ }
112
+ catch {
113
+ }
114
+ }, CHILD_EXIT_GRACE_MS);
115
+ const giveUpTimer = setTimeout(settle, CHILD_EXIT_GRACE_MS * 2);
116
+ try {
117
+ child.kill('SIGTERM');
118
+ }
119
+ catch {
120
+ settle();
121
+ }
122
+ });
123
+ }
124
+ testDateWindow() {
125
+ const todayMs = Date.now();
126
+ return {
127
+ start: new Date(todayMs - (exports.TEST_DATE_WINDOW_DAYS - 1) * 86400000).toISOString().split('T')[0],
128
+ end: new Date(todayMs).toISOString().split('T')[0],
129
+ };
130
+ }
131
+ limit(key, fallback) {
132
+ const configured = Number(this.configService?.get(key, fallback) ?? fallback);
133
+ return Number.isFinite(configured) && configured >= 1 ? Math.floor(configured) : fallback;
134
+ }
135
+ acquireTestSlot(projectId) {
136
+ const perProject = this.limit('MAX_CONNECTOR_TESTS_PER_PROJECT', DEFAULT_MAX_TESTS_PER_PROJECT);
137
+ const total = this.limit('MAX_CONNECTOR_TESTS_TOTAL', DEFAULT_MAX_TESTS_TOTAL);
138
+ const retryAfterSeconds = Math.ceil(DEFAULT_TIMEOUT_MS / 1000);
139
+ const active = this.activeTestsByProject.get(projectId) ?? 0;
140
+ if (active >= perProject) {
141
+ throw new concurrency_limit_exceeded_exception_1.ConcurrencyLimitExceededException(`This project already has ${perProject} connector test${perProject === 1 ? '' : 's'} running. ` +
142
+ `Wait for one to finish, then try again.`, { scope: 'project', limit: perProject, retryAfterSeconds }, exports.CONNECTOR_TEST_CONCURRENCY_LIMIT_CODE);
143
+ }
144
+ if (this.activeTestsTotal >= total) {
145
+ throw new concurrency_limit_exceeded_exception_1.ConcurrencyLimitExceededException(`This deployment already has ${total} connector tests running. Try again in a moment.`, { scope: 'deployment', limit: total, retryAfterSeconds }, exports.CONNECTOR_TEST_CONCURRENCY_LIMIT_CODE);
146
+ }
147
+ this.activeTestsByProject.set(projectId, active + 1);
148
+ this.activeTestsTotal += 1;
149
+ let released = false;
150
+ return () => {
151
+ if (released)
152
+ return;
153
+ released = true;
154
+ this.activeTestsTotal -= 1;
155
+ const remaining = (this.activeTestsByProject.get(projectId) ?? 1) - 1;
156
+ if (remaining > 0)
157
+ this.activeTestsByProject.set(projectId, remaining);
158
+ else
159
+ this.activeTestsByProject.delete(projectId);
160
+ };
161
+ }
162
+ async runTest(args, hooks = {}) {
163
+ this.assertFitsChildEnv('manifest', JSON.stringify(args.manifest));
164
+ this.assertFitsChildEnv('configuration', JSON.stringify(this.wrapConfig(args.configuration ?? {})));
165
+ const release = this.acquireTestSlot(args.projectId);
166
+ try {
167
+ const result = await this.execute(args, hooks);
168
+ return result;
169
+ }
170
+ finally {
171
+ release();
172
+ }
173
+ }
174
+ async execute(args, hooks) {
175
+ const maxRows = args.maxRows ?? 25;
176
+ const maxPages = args.maxPages ?? 1;
177
+ const timeoutMs = args.timeoutMs ?? DEFAULT_TIMEOUT_MS;
178
+ const pruned = this.pruneToNode(args.manifest, args.node);
179
+ const prunedError = this.manifestParseError(pruned);
180
+ if (prunedError) {
181
+ throw new common_1.BadRequestException(`Invalid manifest: ${prunedError}`);
182
+ }
183
+ const untestedNodeError = this.manifestParseError(args.manifest);
184
+ const sourceConfig = this.wrapConfig(args.configuration);
185
+ let sampleOnly = false;
186
+ if (sourceConfig.Fields === undefined) {
187
+ const fieldsSelection = this.selectNodeFields(pruned, args.node);
188
+ if (fieldsSelection) {
189
+ sourceConfig.Fields = { value: fieldsSelection };
190
+ }
191
+ else {
192
+ sampleOnly = true;
193
+ sourceConfig.Fields = { value: `${args.node} ${SAMPLE_ONLY_FIELD}` };
194
+ }
195
+ }
196
+ const dateWindow = this.testDateWindow();
197
+ sourceConfig.LastRequestedDate = { value: dateWindow.start };
198
+ sourceConfig.ReimportLookbackWindow = { value: 0 };
199
+ const env = {
200
+ ...(0, connector_process_spawner_service_1.inheritConnectorEnv)(),
201
+ OW_DATAMART_ID: 'test',
202
+ OW_RUN_ID: 'test',
203
+ OW_TEST: '1',
204
+ OW_TEST_MAX_ROWS: String(maxRows),
205
+ OW_TEST_MAX_PAGES: String(maxPages),
206
+ OW_MANIFEST: JSON.stringify(pruned),
207
+ OW_CONFIG: JSON.stringify({
208
+ source: { name: String(args.manifest.name ?? 'Custom'), config: sourceConfig },
209
+ storage: { name: 'LiveTest', config: {} },
210
+ }),
211
+ OW_RUN_CONFIG: JSON.stringify({ type: 'INCREMENTAL', data: [], state: {} }),
212
+ };
213
+ if (hooks.hang)
214
+ env.FAKE_HANG = '1';
215
+ if (hooks.env)
216
+ Object.assign(env, hooks.env);
217
+ const marker = connectors_1.Core.TEST_ROW_MARKER;
218
+ const rows = [];
219
+ const logs = [];
220
+ const errorLogs = [];
221
+ let runFailure = null;
222
+ let sample = [];
223
+ return new Promise(resolve => {
224
+ const child = (0, cross_spawn_1.spawn)('node', ['--no-deprecation', this.runnerPath()], {
225
+ env,
226
+ stdio: ['ignore', 'pipe', 'pipe'],
227
+ });
228
+ let settled = false;
229
+ const finish = (error) => {
230
+ if (settled)
231
+ return;
232
+ settled = true;
233
+ clearTimeout(timer);
234
+ stderrBuffer.flush();
235
+ const captured = rows.slice(0, maxRows);
236
+ if (error === null)
237
+ error = runFailure;
238
+ if (error === null && captured.length === 0)
239
+ error = errorLogs[0] ?? null;
240
+ if (error === null && captured.length === 0) {
241
+ logs.push(`Test produced 0 records: the request completed without error but recordSelector.recordPath matched no rows.` +
242
+ (sample.length > 0
243
+ ? ` A raw response sample WAS received (${sample.length} record(s)), so recordPath is the likely culprit — compare it against the sample shape.`
244
+ : ` Check recordPath, the request path/queryParameters, and any filters.`) +
245
+ ` If this node is fetched by date, note that a live test samples only ` +
246
+ `${dateWindow.start} to ${dateWindow.end}; a window with no data upstream ` +
247
+ `returns 0 records too.`);
248
+ }
249
+ if (untestedNodeError) {
250
+ logs.push(`This test ran only the node "${args.node}". Publishing validates every node, and ` +
251
+ `another node in this manifest cannot be published: ${untestedNodeError}`);
252
+ }
253
+ const result = {
254
+ rows: sampleOnly ? [] : captured,
255
+ logs,
256
+ error,
257
+ sample,
258
+ };
259
+ void this.stopChild(child).then(() => resolve(result));
260
+ };
261
+ const timer = setTimeout(() => finish(`Test run timed out after ${timeoutMs}ms`), timeoutMs);
262
+ let held = 0;
263
+ let overBudget = false;
264
+ const admit = (line) => {
265
+ if (overBudget)
266
+ return false;
267
+ if (held + line.length <= exports.MAX_TEST_OUTPUT_LENGTH) {
268
+ held += line.length;
269
+ return true;
270
+ }
271
+ overBudget = true;
272
+ logs.push(`Stopped reading the test output at ${exports.MAX_TEST_OUTPUT_LENGTH / 1024 / 1024} MiB: ` +
273
+ `the rows shown are the ones that arrived by then.`);
274
+ finish(null);
275
+ return false;
276
+ };
277
+ const onLine = (line) => {
278
+ if (!line || !admit(line))
279
+ return;
280
+ if (line.startsWith(marker)) {
281
+ try {
282
+ rows.push(JSON.parse(line.slice(marker.length)));
283
+ }
284
+ catch {
285
+ }
286
+ if (rows.length >= maxRows)
287
+ finish(null);
288
+ return;
289
+ }
290
+ try {
291
+ const evt = JSON.parse(line);
292
+ if (evt && evt.type === 'SAMPLE') {
293
+ sample = Array.isArray(evt.records) ? evt.records : [];
294
+ return;
295
+ }
296
+ if (evt &&
297
+ evt.type === 'LOG' &&
298
+ evt.level === 'error' &&
299
+ typeof evt.message === 'string') {
300
+ errorLogs.push(evt.message);
301
+ }
302
+ if (evt &&
303
+ evt.type === 'CONTROL' &&
304
+ evt.action === 'failed' &&
305
+ typeof evt.error === 'string') {
306
+ runFailure ??= evt.error;
307
+ }
308
+ }
309
+ catch {
310
+ }
311
+ logs.push(line);
312
+ };
313
+ const stdoutBuffer = (0, connector_process_spawner_service_1.createCapturedLineBuffer)(onLine);
314
+ const stderrBuffer = (0, connector_process_spawner_service_1.createCapturedLineBuffer)(line => {
315
+ if (!line || !admit(line))
316
+ return;
317
+ logs.push(line);
318
+ const reported = readRunFailureEnvelope(line);
319
+ if (reported !== null)
320
+ runFailure ??= reported;
321
+ });
322
+ child.stdout?.setEncoding('utf8');
323
+ child.stderr?.setEncoding('utf8');
324
+ child.stdout?.on('data', (chunk) => stdoutBuffer.push(chunk));
325
+ child.stderr?.on('data', (chunk) => stderrBuffer.push(chunk));
326
+ child.on('close', code => {
327
+ if (settled)
328
+ return;
329
+ stdoutBuffer.flush();
330
+ stderrBuffer.flush();
331
+ finish(code === 0 ? null : `Test process exited with code ${String(code)}`);
332
+ });
333
+ child.on('error', err => finish(err.message));
334
+ });
335
+ }
336
+ };
337
+ exports.ConnectorTestService = ConnectorTestService;
338
+ exports.ConnectorTestService = ConnectorTestService = __decorate([
339
+ (0, common_1.Injectable)(),
340
+ __param(0, (0, common_1.Optional)()),
341
+ __metadata("design:paramtypes", [config_1.ConfigService])
342
+ ], ConnectorTestService);
343
+ //# sourceMappingURL=connector-test.service.js.map
@@ -2,15 +2,22 @@ import { ConnectorDefinition } from '../../connector-types/connector-definition'
2
2
  import { ConnectorSpecification, ConnectorSpecificationItem } from '../../connector-types/connector-specification';
3
3
  import { ConnectorFieldsSchema } from '../../connector-types/connector-fields-schema';
4
4
  import { ConnectorSourceCredentialsService } from './connector-source-credentials.service';
5
+ import { ConnectorDefinitionService } from './connector-definition.service';
5
6
  import type { ConnectorCapabilities } from '../../connector-types/connector-capabilities';
6
7
  export declare class ConnectorService {
7
8
  private readonly connectorSourceCredentialsService;
9
+ private readonly connectorDefinitionService;
8
10
  private readonly logger;
9
- constructor(connectorSourceCredentialsService: ConnectorSourceCredentialsService);
11
+ constructor(connectorSourceCredentialsService: ConnectorSourceCredentialsService, connectorDefinitionService: ConnectorDefinitionService);
10
12
  getAvailableConnectors(): Promise<ConnectorDefinition[]>;
11
13
  getConnectorCapabilities(connectorName: string): ConnectorCapabilities;
14
+ resolveConnectorCapabilities(projectId: string, connectorName: string, version?: number): Promise<ConnectorCapabilities>;
15
+ private resolveBundledOrCustom;
12
16
  getConnectorSpecification(connectorName: string): Promise<ConnectorSpecification>;
17
+ resolveConnectorSpecification(projectId: string, connectorName: string, version?: number): Promise<ConnectorSpecification>;
13
18
  getConnectorFieldsSchema(connectorName: string): Promise<ConnectorFieldsSchema>;
19
+ getSpecificationFromManifest(manifest: Record<string, unknown>): ConnectorSpecification;
20
+ getFieldsSchemaFromManifest(manifest: Record<string, unknown>): ConnectorFieldsSchema;
14
21
  getOAuthUiVariables(connectorName: string, fieldPath: string): Promise<Record<string, unknown>>;
15
22
  getOAuthUiVariablesExpanded(connectorName: string, fieldPath: string): Promise<Record<string, unknown>>;
16
23
  isOAuthEnabled(connectorName: string, fieldPath: string): Promise<boolean>;
@@ -34,5 +41,4 @@ export declare class ConnectorService {
34
41
  private validateConnectorExists;
35
42
  private createConnectorSource;
36
43
  private getConnectorManifest;
37
- private mapConfigToSchema;
38
44
  }
@@ -16,12 +16,22 @@ const connectors_1 = require("@owox/connectors");
16
16
  const connector_specification_1 = require("../../connector-types/connector-specification");
17
17
  const connector_fields_schema_1 = require("../../connector-types/connector-fields-schema");
18
18
  const connector_source_credentials_service_1 = require("./connector-source-credentials.service");
19
+ const connector_definition_service_1 = require("./connector-definition.service");
19
20
  const connector_fields_schema_mapper_1 = require("./connector-fields-schema.mapper");
21
+ const connector_specification_mapper_1 = require("./connector-specification.mapper");
22
+ const declarative_manifest_schemas_1 = require("./declarative-manifest-schemas");
23
+ const connector_credential_boundary_error_1 = require("../../errors/connector-credential-boundary.error");
24
+ const NO_CAPABILITIES = Object.freeze({
25
+ singleConfiguration: false,
26
+ copySecretsByValue: false,
27
+ });
20
28
  let ConnectorService = ConnectorService_1 = class ConnectorService {
21
29
  connectorSourceCredentialsService;
30
+ connectorDefinitionService;
22
31
  logger = new common_1.Logger(ConnectorService_1.name);
23
- constructor(connectorSourceCredentialsService) {
32
+ constructor(connectorSourceCredentialsService, connectorDefinitionService) {
24
33
  this.connectorSourceCredentialsService = connectorSourceCredentialsService;
34
+ this.connectorDefinitionService = connectorDefinitionService;
25
35
  }
26
36
  async getAvailableConnectors() {
27
37
  return connectors_1.AvailableConnectors.map(connector => {
@@ -29,9 +39,9 @@ let ConnectorService = ConnectorService_1 = class ConnectorService {
29
39
  return {
30
40
  name: connector,
31
41
  title: manifest.title,
32
- description: manifest.description,
33
- logo: manifest.logo,
34
- docUrl: manifest.docUrl,
42
+ description: manifest.description ?? null,
43
+ logo: manifest.logo ?? null,
44
+ docUrl: manifest.docUrl ?? null,
35
45
  };
36
46
  });
37
47
  }
@@ -43,12 +53,28 @@ let ConnectorService = ConnectorService_1 = class ConnectorService {
43
53
  copySecretsByValue: capabilities?.copySecretsByValue === true,
44
54
  };
45
55
  }
56
+ async resolveConnectorCapabilities(projectId, connectorName, version) {
57
+ return this.resolveBundledOrCustom(projectId, connectorName, version, name => this.getConnectorCapabilities(name), () => NO_CAPABILITIES);
58
+ }
59
+ async resolveBundledOrCustom(projectId, connectorName, version, fromBundled, fromManifest) {
60
+ if (Object.keys(connectors_1.Connectors).includes(connectorName)) {
61
+ return fromBundled(connectorName);
62
+ }
63
+ const manifest = await this.connectorDefinitionService.tryResolveManifest(projectId, connectorName, version);
64
+ if (manifest) {
65
+ return fromManifest(manifest);
66
+ }
67
+ return fromBundled(connectorName);
68
+ }
46
69
  async getConnectorSpecification(connectorName) {
47
70
  this.validateConnectorExists(connectorName);
48
71
  const source = this.createConnectorSource(connectorName);
49
- const configSchema = this.mapConfigToSchema(source.config);
72
+ const configSchema = (0, connector_specification_mapper_1.mapConnectorSpecification)(source.parameters);
50
73
  return connector_specification_1.ConnectorSpecification.parse(configSchema);
51
74
  }
75
+ async resolveConnectorSpecification(projectId, connectorName, version) {
76
+ return this.resolveBundledOrCustom(projectId, connectorName, version, name => this.getConnectorSpecification(name), manifest => this.getSpecificationFromManifest(manifest));
77
+ }
52
78
  async getConnectorFieldsSchema(connectorName) {
53
79
  this.validateConnectorExists(connectorName);
54
80
  const sourceInstance = this.createConnectorSource(connectorName);
@@ -63,6 +89,12 @@ let ConnectorService = ConnectorService_1 = class ConnectorService {
63
89
  const fieldsSchema = (0, connector_fields_schema_mapper_1.mapConnectorFieldsSchema)(sourceFieldsSchema);
64
90
  return connector_fields_schema_1.ConnectorFieldsSchema.parse(fieldsSchema);
65
91
  }
92
+ getSpecificationFromManifest(manifest) {
93
+ return (0, declarative_manifest_schemas_1.specificationFromManifest)(manifest);
94
+ }
95
+ getFieldsSchemaFromManifest(manifest) {
96
+ return (0, declarative_manifest_schemas_1.fieldsSchemaFromManifest)(manifest);
97
+ }
66
98
  async getOAuthUiVariables(connectorName, fieldPath) {
67
99
  const specification = await this.getConnectorSpecification(connectorName);
68
100
  const paths = fieldPath.split('.');
@@ -130,10 +162,10 @@ let ConnectorService = ConnectorService_1 = class ConnectorService {
130
162
  throw new Error(`Credential with ID ${credentialId} not found`);
131
163
  }
132
164
  if (credential.projectId !== projectId) {
133
- throw new Error(`Credential with ID ${credentialId} not found`);
165
+ throw new connector_credential_boundary_error_1.ConnectorCredentialBoundaryError(`Credential with ID ${credentialId} not found`);
134
166
  }
135
167
  if (credential.connectorName !== connectorName) {
136
- throw new Error(`Credential belongs to connector ${credential.connectorName}, not ${connectorName}`);
168
+ throw new connector_credential_boundary_error_1.ConnectorCredentialBoundaryError(`Credential belongs to connector ${credential.connectorName}, not ${connectorName}`);
137
169
  }
138
170
  const connector = this.createConnectorSource(connectorName);
139
171
  const oauthVariables = await this.getOAuthVariablesForRefresh(connectorName, configuration);
@@ -262,61 +294,40 @@ let ConnectorService = ConnectorService_1 = class ConnectorService {
262
294
  }
263
295
  }
264
296
  createConnectorSource(connectorName) {
265
- const source = connectors_1.Connectors[connectorName][`${connectorName}Source`];
266
- return new source(new connectors_1.Core.AbstractConfig({}));
297
+ const context = new connectors_1.Core.AbstractContext({
298
+ source: { name: connectorName, config: {} },
299
+ storage: { name: 'unused', config: {} },
300
+ runConfig: {},
301
+ env: { datamartId: null, runId: null },
302
+ });
303
+ const SourceClass = connectors_1.Connectors[connectorName][`${connectorName}Source`];
304
+ if (SourceClass) {
305
+ return new SourceClass(context);
306
+ }
307
+ const manifest = connectors_1.Connectors[connectorName].manifest;
308
+ if (manifest && manifest.nodes) {
309
+ let model;
310
+ try {
311
+ model = new connectors_1.Core.ManifestParser().parse(JSON.stringify(manifest));
312
+ }
313
+ catch (e) {
314
+ this.logger.error(`Failed to parse declarative manifest for '${connectorName}': ${e.message}`);
315
+ throw new common_1.InternalServerErrorException(`Connector '${connectorName}' has an invalid declarative manifest`);
316
+ }
317
+ return new connectors_1.Core.DeclarativeSource(context, model);
318
+ }
319
+ this.logger.error(`Connector '${connectorName}' has neither a '${connectorName}Source' class nor a declarative manifest`);
320
+ throw new common_1.InternalServerErrorException(`Connector '${connectorName}' is misconfigured`);
267
321
  }
268
322
  getConnectorManifest(connectorName) {
269
323
  const manifest = connectors_1.Connectors[connectorName].manifest;
270
324
  return manifest;
271
325
  }
272
- mapConfigToSchema(config) {
273
- const result = Object.keys(config).map(key => {
274
- const item = {
275
- name: key,
276
- title: config[key].label,
277
- description: config[key].description,
278
- default: config[key].default,
279
- requiredType: config[key].requiredType,
280
- required: config[key].isRequired,
281
- options: config[key].options,
282
- placeholder: config[key].placeholder,
283
- minimum: config[key].minimum,
284
- attributes: config[key].attributes,
285
- optionsDependsOn: config[key].optionsDependsOn,
286
- oneOf: config[key].oneOf?.map(oneOf => {
287
- return {
288
- label: oneOf.label,
289
- value: oneOf.value,
290
- requiredType: oneOf.requiredType,
291
- attributes: oneOf.attributes,
292
- oauthParams: oneOf.oauthParams,
293
- items: Object.entries(oneOf.items).reduce((acc, [itemKey, itemValue]) => {
294
- acc[itemKey] = {
295
- name: itemKey,
296
- title: itemValue.label,
297
- description: itemValue.description,
298
- default: itemValue.default,
299
- requiredType: itemValue.requiredType,
300
- required: itemValue.isRequired,
301
- options: itemValue.options,
302
- placeholder: itemValue.placeholder,
303
- minimum: itemValue.minimum,
304
- attributes: itemValue.attributes,
305
- optionsDependsOn: itemValue.optionsDependsOn,
306
- };
307
- return acc;
308
- }, {}),
309
- };
310
- }),
311
- };
312
- return item;
313
- });
314
- return result;
315
- }
316
326
  };
317
327
  exports.ConnectorService = ConnectorService;
318
328
  exports.ConnectorService = ConnectorService = ConnectorService_1 = __decorate([
319
329
  (0, common_1.Injectable)(),
320
- __metadata("design:paramtypes", [connector_source_credentials_service_1.ConnectorSourceCredentialsService])
330
+ __metadata("design:paramtypes", [connector_source_credentials_service_1.ConnectorSourceCredentialsService,
331
+ connector_definition_service_1.ConnectorDefinitionService])
321
332
  ], ConnectorService);
322
333
  //# sourceMappingURL=connector.service.js.map
@@ -0,0 +1,4 @@
1
+ import { ConnectorFieldsSchema } from '../../connector-types/connector-fields-schema';
2
+ import { ConnectorSpecification } from '../../connector-types/connector-specification';
3
+ export declare function specificationFromManifest(manifest: Record<string, unknown>): ConnectorSpecification;
4
+ export declare function fieldsSchemaFromManifest(manifest: Record<string, unknown>): ConnectorFieldsSchema;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.specificationFromManifest = specificationFromManifest;
4
+ exports.fieldsSchemaFromManifest = fieldsSchemaFromManifest;
5
+ const common_1 = require("@nestjs/common");
6
+ const connectors_1 = require("@owox/connectors");
7
+ const connector_fields_schema_1 = require("../../connector-types/connector-fields-schema");
8
+ const connector_specification_1 = require("../../connector-types/connector-specification");
9
+ const connector_fields_schema_mapper_1 = require("./connector-fields-schema.mapper");
10
+ const connector_specification_mapper_1 = require("./connector-specification.mapper");
11
+ function specificationFromManifest(manifest) {
12
+ const source = declarativeSourceFromManifest(manifest);
13
+ return parseOrExplain(connector_specification_1.ConnectorSpecification, (0, connector_specification_mapper_1.mapConnectorSpecification)(source.parameters), 'parameter');
14
+ }
15
+ function fieldsSchemaFromManifest(manifest) {
16
+ const source = declarativeSourceFromManifest(manifest);
17
+ return parseOrExplain(connector_fields_schema_1.ConnectorFieldsSchema, (0, connector_fields_schema_mapper_1.mapConnectorFieldsSchema)(source.getFieldsSchema()), 'node');
18
+ }
19
+ function declarativeSourceFromManifest(manifest) {
20
+ const context = new connectors_1.Core.AbstractContext({
21
+ source: { name: 'custom', config: {} },
22
+ storage: { name: 'unused', config: {} },
23
+ runConfig: {},
24
+ env: { datamartId: null, runId: null },
25
+ });
26
+ let model;
27
+ try {
28
+ model = new connectors_1.Core.ManifestParser().parse(JSON.stringify(manifest));
29
+ }
30
+ catch (e) {
31
+ throw new common_1.BadRequestException(`Invalid declarative manifest: ${e.message}`);
32
+ }
33
+ return new connectors_1.Core.DeclarativeSource(context, model);
34
+ }
35
+ const MANIFEST_KEYS = { title: 'label', required: 'isRequired' };
36
+ function parseOrExplain(schema, items, kind) {
37
+ const parsed = schema.safeParse(items);
38
+ if (parsed.success)
39
+ return parsed.data;
40
+ const problems = parsed.error.issues.map(issue => {
41
+ const [index, ...path] = issue.path;
42
+ const name = typeof index === 'number' ? items[index]?.name : undefined;
43
+ const where = path.map(key => MANIFEST_KEYS[key] ?? key).join('.');
44
+ return `${kind} "${String(name)}" ${where}: ${issue.message}`;
45
+ });
46
+ throw new common_1.BadRequestException(`Invalid declarative manifest: ${problems.join('; ')}`);
47
+ }
48
+ //# sourceMappingURL=declarative-manifest-schemas.js.map
@@ -0,0 +1,21 @@
1
+ import { ConnectorMessage } from '../../connector-types/connector-message/schemas/connector-message.schema';
2
+ export interface RunLogSnapshot {
3
+ logs: string[];
4
+ errors: string[];
5
+ }
6
+ export declare function createRunLogSnapshotReader(logs: ConnectorMessage[], errors: ConnectorMessage[]): () => RunLogSnapshot;
7
+ export declare class RunLogFlusher {
8
+ private readonly intervalMs;
9
+ private readonly getSnapshot;
10
+ private readonly write;
11
+ private readonly onError?;
12
+ private timer;
13
+ private lastCount;
14
+ private inFlight;
15
+ private persisted;
16
+ constructor(intervalMs: number, getSnapshot: () => RunLogSnapshot, write: (snapshot: RunLogSnapshot) => Promise<void>, onError?: ((error: unknown) => void) | undefined);
17
+ start(): void;
18
+ flushIfDirty(): Promise<void>;
19
+ persistedSnapshot(): RunLogSnapshot | null;
20
+ stop(): Promise<void>;
21
+ }