@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.
- package/dist/src/common/exceptions/concurrency-limit-exceeded.exception.d.ts +1 -1
- package/dist/src/common/exceptions/concurrency-limit-exceeded.exception.js +2 -2
- package/dist/src/common/markdown/markdown-parser.service.d.ts +2 -0
- package/dist/src/common/markdown/markdown-parser.service.js +15 -8
- package/dist/src/common/validators/max-byte-length.validator.d.ts +2 -0
- package/dist/src/common/validators/max-byte-length.validator.js +29 -0
- package/dist/src/config/env-validation.config.d.ts +12 -0
- package/dist/src/config/env-validation.config.js +7 -0
- package/dist/src/data-marts/ai-insights/agent/types.d.ts +6 -6
- package/dist/src/data-marts/calculated-fields/calculated-field-validator.service.js +22 -30
- package/dist/src/data-marts/calculated-fields/calculated-field.utils.d.ts +1 -0
- package/dist/src/data-marts/calculated-fields/calculated-field.utils.js +21 -0
- package/dist/src/data-marts/calculated-fields/formula-analyzer.d.ts +1 -0
- package/dist/src/data-marts/calculated-fields/formula-analyzer.js +2 -0
- package/dist/src/data-marts/calculated-fields/formula-violations.d.ts +7 -0
- package/dist/src/data-marts/calculated-fields/formula-violations.js +82 -1
- package/dist/src/data-marts/calculated-fields/join-grain.d.ts +32 -0
- package/dist/src/data-marts/calculated-fields/join-grain.js +107 -0
- package/dist/src/data-marts/calculated-fields/set-quantifier.d.ts +8 -0
- package/dist/src/data-marts/calculated-fields/set-quantifier.js +12 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/connector-message.schema.d.ts +66 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/connector-message.schema.js +13 -1
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-credentials-update.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-credentials-update.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-error.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-error.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-log.schema.d.ts +12 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-log.schema.js +4 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-requested-date.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-requested-date.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-state-update.schema.d.ts +16 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-state-update.schema.js +16 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-status.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-status.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-warning.schema.d.ts +3 -0
- package/dist/src/data-marts/connector-types/connector-message/schemas/types/message-warning.schema.js +1 -0
- package/dist/src/data-marts/connector-types/connector-message/services/connector-event.translator.d.ts +10 -0
- package/dist/src/data-marts/connector-types/connector-message/services/connector-event.translator.js +138 -0
- package/dist/src/data-marts/connector-types/connector-message/services/connector-message-parser.service.d.ts +1 -3
- package/dist/src/data-marts/connector-types/connector-message/services/connector-message-parser.service.js +30 -34
- package/dist/src/data-marts/connector-types/connector-message/services/connector-output-capture.service.js +10 -12
- package/dist/src/data-marts/connector-types/connector-message/services/connector-state.service.js +3 -1
- package/dist/src/data-marts/connector-types/enums/connector-message-type-enum.d.ts +1 -0
- package/dist/src/data-marts/connector-types/enums/connector-message-type-enum.js +1 -0
- package/dist/src/data-marts/controllers/connector-definition.controller.d.ts +30 -0
- package/dist/src/data-marts/controllers/connector-definition.controller.js +252 -0
- package/dist/src/data-marts/controllers/data-mart-preview.controller.d.ts +10 -0
- package/dist/src/data-marts/controllers/data-mart-preview.controller.js +58 -0
- package/dist/src/data-marts/controllers/data-mart.controller.d.ts +5 -1
- package/dist/src/data-marts/controllers/data-mart.controller.js +25 -4
- package/dist/src/data-marts/controllers/insight-template.controller.js +4 -4
- package/dist/src/data-marts/controllers/insight.controller.js +5 -5
- package/dist/src/data-marts/controllers/project-data-mart-runs.controller.js +1 -1
- package/dist/src/data-marts/controllers/spec/connector-definition.api.d.ts +12 -0
- package/dist/src/data-marts/controllers/spec/connector-definition.api.js +179 -0
- package/dist/src/data-marts/controllers/spec/data-mart.api.d.ts +1 -0
- package/dist/src/data-marts/controllers/spec/data-mart.api.js +5 -0
- package/dist/src/data-marts/controllers/spec/report-openapi.d.ts +18 -0
- package/dist/src/data-marts/controllers/spec/report-openapi.js +3 -0
- package/dist/src/data-marts/data-marts.module.js +20 -2
- package/dist/src/data-marts/data-storage-types/blending/metric-sleeve.planner.js +3 -12
- package/dist/src/data-marts/data-storage-types/data-mart-schema.utils.d.ts +1 -0
- package/dist/src/data-marts/data-storage-types/data-mart-schema.utils.js +16 -0
- package/dist/src/data-marts/dto/domain/blendable-schema.dto.d.ts +10 -0
- package/dist/src/data-marts/dto/domain/blendable-schema.dto.js +71 -1
- package/dist/src/data-marts/dto/domain/create-data-mart.command.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/create-data-mart.command.js +3 -1
- package/dist/src/data-marts/dto/domain/create-report.command.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/create-report.command.js +3 -1
- package/dist/src/data-marts/dto/domain/data-mart-list-item.dto.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/data-mart-list-item.dto.js +3 -1
- package/dist/src/data-marts/dto/domain/data-mart.dto.d.ts +4 -1
- package/dist/src/data-marts/dto/domain/data-mart.dto.js +5 -1
- package/dist/src/data-marts/dto/domain/model-canvas.dto.d.ts +4 -0
- package/dist/src/data-marts/dto/domain/report-like-read-plan.d.ts +2 -0
- package/dist/src/data-marts/dto/domain/report.dto.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/report.dto.js +3 -1
- package/dist/src/data-marts/dto/domain/update-data-mart-icon.command.d.ts +9 -0
- package/dist/src/data-marts/dto/domain/update-data-mart-icon.command.js +19 -0
- package/dist/src/data-marts/dto/domain/update-report.command.d.ts +3 -1
- package/dist/src/data-marts/dto/domain/update-report.command.js +3 -1
- package/dist/src/data-marts/dto/presentation/create-data-mart-request-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/create-data-mart-request-api.dto.js +13 -0
- package/dist/src/data-marts/dto/presentation/create-report-request-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/create-report-request-api.dto.js +10 -0
- package/dist/src/data-marts/dto/presentation/custom-connector-response.dto.d.ts +46 -0
- package/dist/src/data-marts/dto/presentation/custom-connector-response.dto.js +216 -0
- package/dist/src/data-marts/dto/presentation/custom-connector.dto.d.ts +27 -0
- package/dist/src/data-marts/dto/presentation/custom-connector.dto.js +159 -0
- package/dist/src/data-marts/dto/presentation/data-mart-list-item-response-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/data-mart-list-item-response-api.dto.js +10 -0
- package/dist/src/data-marts/dto/presentation/data-mart-response-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/data-mart-response-api.dto.js +10 -0
- package/dist/src/data-marts/dto/presentation/model-canvas-response-api.dto.d.ts +4 -0
- package/dist/src/data-marts/dto/presentation/model-canvas-response-api.dto.js +20 -0
- package/dist/src/data-marts/dto/presentation/preview-data-mart-request-api.dto.d.ts +7 -0
- package/dist/src/data-marts/dto/presentation/preview-data-mart-request-api.dto.js +56 -0
- package/dist/src/data-marts/dto/presentation/preview-data-mart-response-api.dto.d.ts +12 -0
- package/dist/src/data-marts/dto/presentation/preview-data-mart-response-api.dto.js +64 -0
- package/dist/src/data-marts/dto/presentation/report-response-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/report-response-api.dto.js +6 -0
- package/dist/src/data-marts/dto/presentation/run-data-mart-request-api.dto.js +67 -0
- package/dist/src/data-marts/dto/presentation/update-data-mart-description-api.dto.js +3 -0
- package/dist/src/data-marts/dto/presentation/update-data-mart-icon-api.dto.d.ts +4 -0
- package/dist/src/data-marts/dto/presentation/update-data-mart-icon-api.dto.js +30 -0
- package/dist/src/data-marts/dto/presentation/update-report-request-api.dto.d.ts +2 -0
- package/dist/src/data-marts/dto/presentation/update-report-request-api.dto.js +10 -0
- package/dist/src/data-marts/dto/schemas/auto-aggregation-opt-out.schema.d.ts +15 -0
- package/dist/src/data-marts/dto/schemas/auto-aggregation-opt-out.schema.js +29 -0
- package/dist/src/data-marts/dto/schemas/data-mart-run/data-mart-run.schema.d.ts +9 -0
- package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/connector-definition.schema.d.ts +15 -0
- package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/connector-definition.schema.js +1 -0
- package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/data-mart-definition.schema.d.ts +7 -0
- package/dist/src/data-marts/dto/schemas/data-quality/data-quality-run.schema.d.ts +20 -0
- package/dist/src/data-marts/entities/connector-definition-version.entity.d.ts +16 -0
- package/dist/src/data-marts/entities/connector-definition-version.entity.js +78 -0
- package/dist/src/data-marts/entities/connector-definition.entity.d.ts +14 -0
- package/dist/src/data-marts/entities/connector-definition.entity.js +82 -0
- package/dist/src/data-marts/entities/data-mart.entity.d.ts +2 -0
- package/dist/src/data-marts/entities/data-mart.entity.js +5 -0
- package/dist/src/data-marts/entities/report.entity.d.ts +2 -0
- package/dist/src/data-marts/entities/report.entity.js +11 -0
- package/dist/src/data-marts/enums/data-mart-icon.enum.d.ts +75 -0
- package/dist/src/data-marts/enums/data-mart-icon.enum.js +80 -0
- package/dist/src/data-marts/errors/connector-credential-boundary.error.d.ts +3 -0
- package/dist/src/data-marts/errors/connector-credential-boundary.error.js +14 -0
- package/dist/src/data-marts/facades/mcp-data-marts.facade.d.ts +2 -0
- package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.d.ts +7 -1
- package/dist/src/data-marts/facades/mcp-data-marts.facade.impl.js +70 -5
- package/dist/src/data-marts/mappers/connector-definition.mapper.d.ts +14 -0
- package/dist/src/data-marts/mappers/connector-definition.mapper.js +57 -0
- package/dist/src/data-marts/mappers/data-mart.mapper.d.ts +9 -6
- package/dist/src/data-marts/mappers/data-mart.mapper.js +44 -19
- package/dist/src/data-marts/mappers/insight-template.mapper.d.ts +1 -1
- package/dist/src/data-marts/mappers/insight-template.mapper.js +2 -2
- package/dist/src/data-marts/mappers/insight.mapper.d.ts +1 -1
- package/dist/src/data-marts/mappers/insight.mapper.js +2 -2
- package/dist/src/data-marts/mappers/model-canvas.mapper.d.ts +10 -2
- package/dist/src/data-marts/mappers/model-canvas.mapper.js +9 -3
- package/dist/src/data-marts/mappers/report.mapper.js +4 -3
- package/dist/src/data-marts/services/auto-collapse.resolver.d.ts +1 -1
- package/dist/src/data-marts/services/auto-collapse.resolver.js +4 -0
- package/dist/src/data-marts/services/blendable-schema.service.d.ts +2 -0
- package/dist/src/data-marts/services/blendable-schema.service.js +59 -0
- package/dist/src/data-marts/services/connector/connector-credential-injector.service.d.ts +1 -1
- package/dist/src/data-marts/services/connector/connector-credential-injector.service.js +15 -1
- package/dist/src/data-marts/services/connector/connector-definition.service.d.ts +59 -0
- package/dist/src/data-marts/services/connector/connector-definition.service.js +491 -0
- package/dist/src/data-marts/services/connector/connector-executor.service.d.ts +9 -1
- package/dist/src/data-marts/services/connector/connector-executor.service.js +173 -63
- package/dist/src/data-marts/services/connector/connector-fields-preview.service.js +1 -1
- package/dist/src/data-marts/services/connector/connector-message.utils.js +2 -2
- package/dist/src/data-marts/services/connector/connector-preview-credentials.service.js +1 -1
- package/dist/src/data-marts/services/connector/connector-preview-support.d.ts +1 -1
- package/dist/src/data-marts/services/connector/connector-preview-support.js +14 -21
- package/dist/src/data-marts/services/connector/connector-process-spawner.service.d.ts +11 -2
- package/dist/src/data-marts/services/connector/connector-process-spawner.service.js +88 -60
- package/dist/src/data-marts/services/connector/connector-secret.service.d.ts +6 -3
- package/dist/src/data-marts/services/connector/connector-secret.service.js +77 -12
- package/dist/src/data-marts/services/connector/connector-source-config.service.js +1 -1
- package/dist/src/data-marts/services/connector/connector-source-credentials.service.d.ts +6 -2
- package/dist/src/data-marts/services/connector/connector-source-credentials.service.js +18 -16
- package/dist/src/data-marts/services/connector/connector-specification.mapper.d.ts +47 -0
- package/dist/src/data-marts/services/connector/connector-specification.mapper.js +46 -0
- package/dist/src/data-marts/services/connector/connector-test.service.d.ts +43 -0
- package/dist/src/data-marts/services/connector/connector-test.service.js +343 -0
- package/dist/src/data-marts/services/connector/connector.service.d.ts +8 -2
- package/dist/src/data-marts/services/connector/connector.service.js +65 -54
- package/dist/src/data-marts/services/connector/declarative-manifest-schemas.d.ts +4 -0
- package/dist/src/data-marts/services/connector/declarative-manifest-schemas.js +48 -0
- package/dist/src/data-marts/services/connector/run-log-flusher.d.ts +21 -0
- package/dist/src/data-marts/services/connector/run-log-flusher.js +67 -0
- package/dist/src/data-marts/services/data-mart.service.js +2 -0
- package/dist/src/data-marts/services/report-sql-composer.service.js +15 -1
- package/dist/src/data-marts/services/report.service.d.ts +1 -0
- package/dist/src/data-marts/services/report.service.js +13 -0
- package/dist/src/data-marts/services/scheduled-trigger.service.d.ts +1 -0
- package/dist/src/data-marts/services/scheduled-trigger.service.js +13 -0
- package/dist/src/data-marts/use-cases/create-data-mart.service.js +1 -0
- package/dist/src/data-marts/use-cases/create-report.service.js +2 -0
- package/dist/src/data-marts/use-cases/get-model-canvas-data-marts.service.d.ts +5 -1
- package/dist/src/data-marts/use-cases/get-model-canvas-data-marts.service.js +16 -3
- package/dist/src/data-marts/use-cases/list-project-scheduled-triggers.service.js +1 -1
- package/dist/src/data-marts/use-cases/preview-data-mart.service.d.ts +59 -0
- package/dist/src/data-marts/use-cases/preview-data-mart.service.js +293 -0
- package/dist/src/data-marts/use-cases/stream-http-data.service.js +1 -0
- package/dist/src/data-marts/use-cases/update-data-mart-definition.service.d.ts +1 -1
- package/dist/src/data-marts/use-cases/update-data-mart-definition.service.js +8 -6
- package/dist/src/data-marts/use-cases/update-data-mart-icon.service.d.ts +12 -0
- package/dist/src/data-marts/use-cases/update-data-mart-icon.service.js +46 -0
- package/dist/src/data-marts/use-cases/update-data-mart-schema.service.js +14 -1
- package/dist/src/data-marts/use-cases/update-report.service.js +9 -1
- package/dist/src/ee/ee.module.js +5 -8
- package/dist/src/ee/mcp/auth/mcp-auth-context.d.ts +0 -4
- package/dist/src/ee/mcp/auth/mcp-auth.middleware.d.ts +26 -0
- package/dist/src/ee/mcp/auth/mcp-auth.middleware.js +184 -0
- package/dist/src/ee/mcp/http-headers.util.d.ts +2 -0
- package/dist/src/ee/mcp/http-headers.util.js +8 -0
- package/dist/src/ee/mcp/observability/mcp-bus-wiring.js +4 -4
- package/dist/src/ee/mcp/observability/mcp-call-instrumentation.d.ts +2 -4
- package/dist/src/ee/mcp/observability/mcp-call-instrumentation.js +6 -6
- package/dist/src/ee/mcp/sdk/mcp-sdk-server.factory.d.ts +1 -1
- package/dist/src/ee/mcp/sdk/mcp-sdk-server.factory.js +5 -5
- package/dist/src/ee/mcp/tools/add-destination.tool.d.ts +20 -14
- package/dist/src/ee/mcp/tools/add-destination.tool.js +10 -10
- package/dist/src/ee/mcp/tools/add-report.tool.d.ts +88 -228
- package/dist/src/ee/mcp/tools/add-report.tool.js +28 -28
- package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.d.ts +2 -12
- package/dist/src/ee/mcp/tools/create-report-run-schedule.tool.js +13 -13
- package/dist/src/ee/mcp/tools/data-mart-catalog.tool.d.ts +15 -81
- package/dist/src/ee/mcp/tools/data-mart-catalog.tool.js +11 -11
- package/dist/src/ee/mcp/tools/data-mart-details.tool.d.ts +19 -111
- package/dist/src/ee/mcp/tools/data-mart-details.tool.js +64 -48
- package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.d.ts +2 -6
- package/dist/src/ee/mcp/tools/delete-report-run-schedule.tool.js +7 -7
- package/dist/src/ee/mcp/tools/delete-report.tool.d.ts +2 -6
- package/dist/src/ee/mcp/tools/delete-report.tool.js +4 -4
- package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.d.ts +30 -195
- package/dist/src/ee/mcp/tools/get-data-mart-reports.tool.js +22 -22
- package/dist/src/ee/mcp/tools/get-report-output-schema.tool.d.ts +3 -21
- package/dist/src/ee/mcp/tools/get-report-output-schema.tool.js +10 -10
- package/dist/src/ee/mcp/tools/get-report-run-status.tool.d.ts +15 -11
- package/dist/src/ee/mcp/tools/get-report-run-status.tool.js +14 -14
- package/dist/src/ee/mcp/tools/list-destinations.tool.d.ts +12 -20
- package/dist/src/ee/mcp/tools/list-destinations.tool.js +10 -10
- package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.d.ts +5 -61
- package/dist/src/ee/mcp/tools/list-report-run-schedules.tool.js +14 -14
- package/dist/src/ee/mcp/tools/mcp-getting-started.util.d.ts +4 -52
- package/dist/src/ee/mcp/tools/mcp-getting-started.util.js +13 -13
- package/dist/src/ee/mcp/tools/mcp-tool.definition.d.ts +2 -2
- package/dist/src/ee/mcp/tools/project-context.tool.d.ts +3 -17
- package/dist/src/ee/mcp/tools/project-context.tool.js +10 -10
- package/dist/src/ee/mcp/tools/query-data-mart.input.d.ts +111 -152
- package/dist/src/ee/mcp/tools/query-data-mart.input.js +39 -39
- package/dist/src/ee/mcp/tools/query-data-mart.tool.d.ts +60 -130
- package/dist/src/ee/mcp/tools/query-data-mart.tool.js +35 -35
- package/dist/src/ee/mcp/tools/report-output-controls-output.d.ts +17 -60
- package/dist/src/ee/mcp/tools/report-output-controls-output.js +20 -20
- package/dist/src/ee/mcp/tools/report-run-outcome.d.ts +6 -42
- package/dist/src/ee/mcp/tools/report-run-outcome.js +20 -20
- package/dist/src/ee/mcp/tools/run-report.tool.d.ts +2 -6
- package/dist/src/ee/mcp/tools/run-report.tool.js +5 -5
- package/dist/src/ee/mcp/tools/search-data-marts.tool.d.ts +7 -79
- package/dist/src/ee/mcp/tools/search-data-marts.tool.js +11 -11
- package/dist/src/ee/mcp/tools/search-reports.tool.d.ts +15 -61
- package/dist/src/ee/mcp/tools/search-reports.tool.js +15 -15
- package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.d.ts +7 -79
- package/dist/src/ee/mcp/tools/summarize-data-catalog.tool.js +15 -15
- package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.d.ts +2 -12
- package/dist/src/ee/mcp/tools/update-report-run-schedule.tool.js +13 -13
- package/dist/src/ee/mcp/tools/update-report.tool.d.ts +105 -414
- package/dist/src/ee/mcp/tools/update-report.tool.js +20 -20
- package/dist/src/ee/mcp/transport/mcp-http-entry.service.d.ts +30 -0
- package/dist/src/ee/mcp/transport/mcp-http-entry.service.js +193 -0
- package/dist/src/idp/guards/idp.guard.js +2 -8
- package/dist/src/idp/oauth/controllers/oauth-authorization.controller.d.ts +4 -0
- package/dist/src/idp/oauth/controllers/oauth-authorization.controller.js +77 -1
- package/dist/src/idp/oauth/controllers/oauth-metadata.controller.d.ts +2 -1
- package/dist/src/idp/oauth/controllers/oauth-metadata.controller.js +5 -8
- package/dist/src/idp/oauth/controllers/oauth-token.controller.js +14 -1
- package/dist/src/idp/oauth/oauth-request.validator.d.ts +8 -0
- package/dist/src/idp/oauth/oauth-request.validator.js +27 -0
- package/dist/src/idp/utils/is-authentication-error.d.ts +1 -0
- package/dist/src/idp/utils/is-authentication-error.js +9 -0
- package/dist/src/idp/utils/role-hierarchy.d.ts +3 -0
- package/dist/src/idp/utils/role-hierarchy.js +14 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +3 -1
- package/dist/src/migrations/1788048000000-create-connector-definition-tables.d.ts +6 -0
- package/dist/src/migrations/1788048000000-create-connector-definition-tables.js +116 -0
- package/dist/src/migrations/1790156789783-add-auto-aggregation-opt-out-to-report.d.ts +8 -0
- package/dist/src/migrations/1790156789783-add-auto-aggregation-opt-out-to-report.js +30 -0
- package/dist/src/migrations/1790247861000-add-icon-to-data-mart.d.ts +8 -0
- package/dist/src/migrations/1790247861000-add-icon-to-data-mart.js +31 -0
- package/package.json +10 -6
- package/dist/src/ee/mcp/auth/mcp-auth.exception-filter.d.ts +0 -14
- package/dist/src/ee/mcp/auth/mcp-auth.exception-filter.js +0 -84
- package/dist/src/ee/mcp/auth/mcp-auth.guard.d.ts +0 -14
- package/dist/src/ee/mcp/auth/mcp-auth.guard.js +0 -99
- package/dist/src/ee/mcp/controllers/mcp-transport.controller.d.ts +0 -17
- package/dist/src/ee/mcp/controllers/mcp-transport.controller.js +0 -134
- package/dist/src/ee/mcp/sdk/mcp-streamable-http-transport.handler.d.ts +0 -16
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 => (
|
|
106
|
-
result.errors.forEach(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
|
-
|
|
111
|
-
|
|
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 && !
|
|
135
|
+
wasCancelled = signal?.aborted === true && !allConfigurationsSucceeded;
|
|
116
136
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
117
|
-
(
|
|
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
|
-
(
|
|
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
|
-
|
|
162
|
-
|
|
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 (
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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
|
-
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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
|
-
(
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
:
|
|
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 &&
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
46
|
+
type: connector_message_type_enum_1.ConnectorMessageType.WARNING,
|
|
47
47
|
at: new Date().toISOString(),
|
|
48
|
-
|
|
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) {
|
|
@@ -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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
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 {};
|