@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
|
@@ -10,19 +10,83 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
var ConnectorProcessSpawnerService_1;
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.ConnectorProcessSpawnerService = void 0;
|
|
13
|
+
exports.ConnectorProcessSpawnerService = exports.INHERITED_CONNECTOR_ENV_VARS = exports.TRUNCATED_OUTPUT_LINE = exports.MAX_CAPTURED_LINE_LENGTH = void 0;
|
|
14
|
+
exports.inheritConnectorEnv = inheritConnectorEnv;
|
|
15
|
+
exports.createCapturedLineBuffer = createCapturedLineBuffer;
|
|
14
16
|
const common_1 = require("@nestjs/common");
|
|
15
17
|
const cross_spawn_1 = require("cross-spawn");
|
|
16
18
|
const graceful_shutdown_service_1 = require("../../../common/scheduler/services/graceful-shutdown.service");
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
exports.MAX_CAPTURED_LINE_LENGTH = 1024 * 1024;
|
|
20
|
+
exports.TRUNCATED_OUTPUT_LINE = '[TRUNCATED connector output line: exceeded 1048576 bytes]';
|
|
21
|
+
exports.INHERITED_CONNECTOR_ENV_VARS = [
|
|
22
|
+
'PATH',
|
|
23
|
+
'NODE_OPTIONS',
|
|
24
|
+
'NODE_EXTRA_CA_CERTS',
|
|
25
|
+
'SSL_CERT_FILE',
|
|
26
|
+
'SSL_CERT_DIR',
|
|
27
|
+
'HOME',
|
|
28
|
+
'USERPROFILE',
|
|
29
|
+
'TMPDIR',
|
|
30
|
+
'TMP',
|
|
31
|
+
'TEMP',
|
|
32
|
+
'SystemRoot',
|
|
33
|
+
];
|
|
34
|
+
const MANIFEST_RUN_INHERITED_ENV_VARS = [...exports.INHERITED_CONNECTOR_ENV_VARS, 'NODE_ENV'];
|
|
35
|
+
function inheritConnectorEnv(names = exports.INHERITED_CONNECTOR_ENV_VARS) {
|
|
36
|
+
return Object.fromEntries(names.map(name => [name, process.env[name]]));
|
|
37
|
+
}
|
|
38
|
+
function createCapturedLineBuffer(onLine) {
|
|
39
|
+
let buffer = '';
|
|
40
|
+
let discardingOversizedLine = false;
|
|
41
|
+
const emit = (line) => {
|
|
42
|
+
onLine(line.endsWith('\r') ? line.slice(0, -1) : line);
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
push: (chunk) => {
|
|
46
|
+
const parts = chunk.split('\n');
|
|
47
|
+
parts.forEach((part, index) => {
|
|
48
|
+
const isLastPart = index === parts.length - 1;
|
|
49
|
+
if (discardingOversizedLine) {
|
|
50
|
+
if (!isLastPart) {
|
|
51
|
+
discardingOversizedLine = false;
|
|
52
|
+
buffer = '';
|
|
53
|
+
}
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (buffer.length + part.length > exports.MAX_CAPTURED_LINE_LENGTH) {
|
|
57
|
+
emit(exports.TRUNCATED_OUTPUT_LINE);
|
|
58
|
+
buffer = '';
|
|
59
|
+
discardingOversizedLine = isLastPart;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
buffer += part;
|
|
63
|
+
if (!isLastPart) {
|
|
64
|
+
emit(buffer);
|
|
65
|
+
buffer = '';
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
flush: () => {
|
|
70
|
+
if (discardingOversizedLine) {
|
|
71
|
+
discardingOversizedLine = false;
|
|
72
|
+
buffer = '';
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (!buffer) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
emit(buffer);
|
|
79
|
+
buffer = '';
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
19
83
|
let ConnectorProcessSpawnerService = ConnectorProcessSpawnerService_1 = class ConnectorProcessSpawnerService {
|
|
20
84
|
gracefulShutdownService;
|
|
21
85
|
logger = new common_1.Logger(ConnectorProcessSpawnerService_1.name);
|
|
22
86
|
constructor(gracefulShutdownService) {
|
|
23
87
|
this.gracefulShutdownService = gracefulShutdownService;
|
|
24
88
|
}
|
|
25
|
-
spawnConnector(datamartId, runId, configuration, runConfig, stdio, signal) {
|
|
89
|
+
spawnConnector(datamartId, runId, configuration, runConfig, stdio, signal, manifest) {
|
|
26
90
|
return new Promise((resolve, reject) => {
|
|
27
91
|
const spawnStdio = 'pipe';
|
|
28
92
|
let logCapture = null;
|
|
@@ -34,13 +98,7 @@ let ConnectorProcessSpawnerService = ConnectorProcessSpawnerService_1 = class Co
|
|
|
34
98
|
if (stdio && typeof stdio === 'object' && typeof stdio.onSpawn === 'function') {
|
|
35
99
|
onSpawn = stdio.onSpawn;
|
|
36
100
|
}
|
|
37
|
-
const env =
|
|
38
|
-
...process.env,
|
|
39
|
-
OW_DATAMART_ID: datamartId,
|
|
40
|
-
OW_RUN_ID: runId,
|
|
41
|
-
OW_CONFIG: JSON.stringify(configuration.toObject()),
|
|
42
|
-
OW_RUN_CONFIG: JSON.stringify(runConfig.toObject()),
|
|
43
|
-
};
|
|
101
|
+
const env = this.buildChildEnv(datamartId, runId, configuration, runConfig, manifest);
|
|
44
102
|
this.logger.log(`Spawning new process for connector runner execution for datamart ${datamartId} and run ${runId}`, { datamartId, runId });
|
|
45
103
|
const runnerPath = require.resolve('@owox/connectors/runner');
|
|
46
104
|
const node = (0, cross_spawn_1.spawn)('node', ['--no-deprecation', runnerPath], {
|
|
@@ -57,13 +115,15 @@ let ConnectorProcessSpawnerService = ConnectorProcessSpawnerService_1 = class Co
|
|
|
57
115
|
}
|
|
58
116
|
}
|
|
59
117
|
if (node.stdout && node.stderr) {
|
|
60
|
-
const stdoutBuffer =
|
|
61
|
-
const stderrBuffer =
|
|
62
|
-
node.stdout.
|
|
63
|
-
|
|
118
|
+
const stdoutBuffer = createCapturedLineBuffer(message => logCapture?.onStdout?.(message));
|
|
119
|
+
const stderrBuffer = createCapturedLineBuffer(message => logCapture?.onStderr?.(message));
|
|
120
|
+
node.stdout.setEncoding('utf8');
|
|
121
|
+
node.stderr.setEncoding('utf8');
|
|
122
|
+
node.stdout.on('data', (data) => {
|
|
123
|
+
stdoutBuffer.push(data);
|
|
64
124
|
});
|
|
65
|
-
node.stderr.on('data', data => {
|
|
66
|
-
stderrBuffer.push(data
|
|
125
|
+
node.stderr.on('data', (data) => {
|
|
126
|
+
stderrBuffer.push(data);
|
|
67
127
|
});
|
|
68
128
|
node.stdout.on('end', () => {
|
|
69
129
|
stdoutBuffer.flush();
|
|
@@ -122,50 +182,18 @@ let ConnectorProcessSpawnerService = ConnectorProcessSpawnerService_1 = class Co
|
|
|
122
182
|
});
|
|
123
183
|
});
|
|
124
184
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
push: (chunk) => {
|
|
133
|
-
const parts = chunk.split('\n');
|
|
134
|
-
parts.forEach((part, index) => {
|
|
135
|
-
const isLastPart = index === parts.length - 1;
|
|
136
|
-
if (discardingOversizedLine) {
|
|
137
|
-
if (!isLastPart) {
|
|
138
|
-
discardingOversizedLine = false;
|
|
139
|
-
buffer = '';
|
|
140
|
-
}
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
if (buffer.length + part.length > MAX_CAPTURED_LINE_LENGTH) {
|
|
144
|
-
emit(TRUNCATED_OUTPUT_LINE);
|
|
145
|
-
buffer = '';
|
|
146
|
-
discardingOversizedLine = isLastPart;
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
buffer += part;
|
|
150
|
-
if (!isLastPart) {
|
|
151
|
-
emit(buffer);
|
|
152
|
-
buffer = '';
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
},
|
|
156
|
-
flush: () => {
|
|
157
|
-
if (discardingOversizedLine) {
|
|
158
|
-
discardingOversizedLine = false;
|
|
159
|
-
buffer = '';
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
if (!buffer) {
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
emit(buffer);
|
|
166
|
-
buffer = '';
|
|
167
|
-
},
|
|
185
|
+
buildChildEnv(datamartId, runId, configuration, runConfig, manifest) {
|
|
186
|
+
const env = {
|
|
187
|
+
...(manifest ? inheritConnectorEnv(MANIFEST_RUN_INHERITED_ENV_VARS) : { ...process.env }),
|
|
188
|
+
OW_DATAMART_ID: datamartId,
|
|
189
|
+
OW_RUN_ID: runId,
|
|
190
|
+
OW_CONFIG: JSON.stringify(configuration.toObject()),
|
|
191
|
+
OW_RUN_CONFIG: JSON.stringify(runConfig.toObject()),
|
|
168
192
|
};
|
|
193
|
+
if (manifest) {
|
|
194
|
+
env.OW_MANIFEST = JSON.stringify(manifest);
|
|
195
|
+
}
|
|
196
|
+
return env;
|
|
169
197
|
}
|
|
170
198
|
};
|
|
171
199
|
exports.ConnectorProcessSpawnerService = ConnectorProcessSpawnerService;
|
|
@@ -2,6 +2,7 @@ import { ConnectorDefinition } from '../../dto/schemas/data-mart-table-definitio
|
|
|
2
2
|
import { ConnectorService } from './connector.service';
|
|
3
3
|
import { ConnectorSourceCredentialsService } from './connector-source-credentials.service';
|
|
4
4
|
export declare const SECRET_MASK: "**********";
|
|
5
|
+
export type SecretFieldsCache = Map<string, Promise<Set<string>>>;
|
|
5
6
|
export declare class ConnectorSecretService {
|
|
6
7
|
private readonly connectorService;
|
|
7
8
|
private readonly connectorSourceCredentialsService;
|
|
@@ -20,12 +21,14 @@ export declare class ConnectorSecretService {
|
|
|
20
21
|
extractAndSaveSecrets(dataMartId: string, projectId: string, connectorName: string, definition: ConnectorDefinition, userId?: string): Promise<ConnectorDefinition>;
|
|
21
22
|
private maskRecursively;
|
|
22
23
|
private mergeSecretsRecursively;
|
|
23
|
-
|
|
24
|
+
private maskWithoutSpecification;
|
|
25
|
+
private maskEveryValueRecursively;
|
|
26
|
+
mask(projectId: string | undefined, definition: ConnectorDefinition | undefined, secretFieldsCache?: SecretFieldsCache): Promise<ConnectorDefinition | undefined>;
|
|
24
27
|
private injectMasksAtPaths;
|
|
25
|
-
mergeDefinitionSecrets(incoming: ConnectorDefinition, previous: ConnectorDefinition | undefined): Promise<ConnectorDefinition>;
|
|
28
|
+
mergeDefinitionSecrets(projectId: string, incoming: ConnectorDefinition, previous: ConnectorDefinition | undefined): Promise<ConnectorDefinition>;
|
|
26
29
|
deleteOrphanedSecrets(dataMartId: string, currentDefinition: ConnectorDefinition, previousDefinition: ConnectorDefinition | undefined): Promise<void>;
|
|
27
30
|
private collectSecretsIds;
|
|
28
|
-
mergeDefinitionSecretsFromSource(incoming: ConnectorDefinition, sourceDefinition: ConnectorDefinition): Promise<ConnectorDefinition>;
|
|
31
|
+
mergeDefinitionSecretsFromSource(projectId: string, incoming: ConnectorDefinition, sourceDefinition: ConnectorDefinition): Promise<ConnectorDefinition>;
|
|
29
32
|
private hasSameRefreshToken;
|
|
30
33
|
private getRefreshTokenValue;
|
|
31
34
|
}
|
|
@@ -16,6 +16,7 @@ const crypto_1 = require("crypto");
|
|
|
16
16
|
const connector_service_1 = require("./connector.service");
|
|
17
17
|
const connector_source_credentials_service_1 = require("./connector-source-credentials.service");
|
|
18
18
|
const connectors_1 = require("@owox/connectors");
|
|
19
|
+
const internal_helpers_1 = require("@owox/internal-helpers");
|
|
19
20
|
exports.SECRET_MASK = '**********';
|
|
20
21
|
const { GENERATED_REFRESH_TOKEN_CREDENTIAL_FIELD } = connectors_1.Core;
|
|
21
22
|
let ConnectorSecretService = ConnectorSecretService_1 = class ConnectorSecretService {
|
|
@@ -29,8 +30,10 @@ let ConnectorSecretService = ConnectorSecretService_1 = class ConnectorSecretSer
|
|
|
29
30
|
isSecretMask(value) {
|
|
30
31
|
return typeof value === 'string' && value === exports.SECRET_MASK;
|
|
31
32
|
}
|
|
32
|
-
async getAllSecretFieldNames(connectorName) {
|
|
33
|
-
const specification =
|
|
33
|
+
async getAllSecretFieldNames(projectId, connectorName, version) {
|
|
34
|
+
const specification = projectId
|
|
35
|
+
? await this.connectorService.resolveConnectorSpecification(projectId, connectorName, version)
|
|
36
|
+
: await this.connectorService.getConnectorSpecification(connectorName);
|
|
34
37
|
const secretFields = new Set();
|
|
35
38
|
const collectSecretFields = (fields) => {
|
|
36
39
|
for (const field of fields) {
|
|
@@ -184,10 +187,22 @@ let ConnectorSecretService = ConnectorSecretService_1 = class ConnectorSecretSer
|
|
|
184
187
|
}
|
|
185
188
|
}
|
|
186
189
|
async extractAndSaveSecrets(dataMartId, projectId, connectorName, definition, userId) {
|
|
187
|
-
const secretFieldNames = await this.getAllSecretFieldNames(connectorName);
|
|
190
|
+
const secretFieldNames = await this.getAllSecretFieldNames(projectId, connectorName, definition.connector.source.version);
|
|
188
191
|
const hasGeneratedRefreshToken = this.hasGeneratedRefreshTokenRecursively(definition.connector.source.configuration);
|
|
189
192
|
if (secretFieldNames.size === 0 && !hasGeneratedRefreshToken) {
|
|
190
|
-
return
|
|
193
|
+
return {
|
|
194
|
+
...definition,
|
|
195
|
+
connector: {
|
|
196
|
+
...definition.connector,
|
|
197
|
+
source: {
|
|
198
|
+
...definition.connector.source,
|
|
199
|
+
configuration: definition.connector.source.configuration.map(item => {
|
|
200
|
+
const { _secrets_id: _dropped, ...rest } = item;
|
|
201
|
+
return rest;
|
|
202
|
+
}),
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
};
|
|
191
206
|
}
|
|
192
207
|
const processedConfiguration = await Promise.all(definition.connector.source.configuration.map(async (item) => {
|
|
193
208
|
const configItem = JSON.parse(JSON.stringify(item));
|
|
@@ -312,10 +327,55 @@ let ConnectorSecretService = ConnectorSecretService_1 = class ConnectorSecretSer
|
|
|
312
327
|
}
|
|
313
328
|
return incomingItem;
|
|
314
329
|
}
|
|
315
|
-
|
|
330
|
+
maskWithoutSpecification(definition) {
|
|
331
|
+
return {
|
|
332
|
+
...definition,
|
|
333
|
+
connector: {
|
|
334
|
+
...definition.connector,
|
|
335
|
+
source: {
|
|
336
|
+
...definition.connector.source,
|
|
337
|
+
configuration: this.maskEveryValueRecursively(definition.connector.source.configuration),
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
maskEveryValueRecursively(value) {
|
|
343
|
+
if (Array.isArray(value)) {
|
|
344
|
+
return value.map(element => this.maskEveryValueRecursively(element));
|
|
345
|
+
}
|
|
346
|
+
if (value && typeof value === 'object') {
|
|
347
|
+
const masked = {};
|
|
348
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
349
|
+
if (key === GENERATED_REFRESH_TOKEN_CREDENTIAL_FIELD) {
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
masked[key] = key.startsWith('_') ? nested : this.maskEveryValueRecursively(nested);
|
|
353
|
+
}
|
|
354
|
+
return masked;
|
|
355
|
+
}
|
|
356
|
+
if (value === undefined || value === null || value === '') {
|
|
357
|
+
return value;
|
|
358
|
+
}
|
|
359
|
+
return exports.SECRET_MASK;
|
|
360
|
+
}
|
|
361
|
+
async mask(projectId, definition, secretFieldsCache) {
|
|
316
362
|
if (!definition)
|
|
317
363
|
return definition;
|
|
318
|
-
|
|
364
|
+
let secretFieldNames;
|
|
365
|
+
try {
|
|
366
|
+
const { name, version } = definition.connector.source;
|
|
367
|
+
const key = `${name}@${version ?? 'active'}`;
|
|
368
|
+
let secretFields = secretFieldsCache?.get(key);
|
|
369
|
+
if (!secretFields) {
|
|
370
|
+
secretFields = this.getAllSecretFieldNames(projectId, name, version);
|
|
371
|
+
secretFieldsCache?.set(key, secretFields);
|
|
372
|
+
}
|
|
373
|
+
secretFieldNames = await secretFields;
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
this.logger.warn(`Failed to resolve specification for connector "${definition.connector.source.name}" while masking; masking every configuration value`, (0, internal_helpers_1.castError)(error).stack);
|
|
377
|
+
return this.maskWithoutSpecification(definition);
|
|
378
|
+
}
|
|
319
379
|
const hasGeneratedRefreshToken = this.hasGeneratedRefreshTokenRecursively(definition.connector.source.configuration);
|
|
320
380
|
if (secretFieldNames.size === 0 && !hasGeneratedRefreshToken) {
|
|
321
381
|
return definition;
|
|
@@ -366,13 +426,18 @@ let ConnectorSecretService = ConnectorSecretService_1 = class ConnectorSecretSer
|
|
|
366
426
|
current[lastPart] = exports.SECRET_MASK;
|
|
367
427
|
}
|
|
368
428
|
}
|
|
369
|
-
async mergeDefinitionSecrets(incoming, previous) {
|
|
370
|
-
const secretFieldNames = await this.getAllSecretFieldNames(incoming.connector.source.name);
|
|
371
|
-
const
|
|
429
|
+
async mergeDefinitionSecrets(projectId, incoming, previous) {
|
|
430
|
+
const secretFieldNames = await this.getAllSecretFieldNames(projectId, incoming.connector.source.name, incoming.connector.source.version);
|
|
431
|
+
const previousName = previous?.connector?.source?.name;
|
|
432
|
+
const switchedConnector = typeof previousName === 'string' &&
|
|
433
|
+
previousName.toLowerCase() !== incoming.connector.source.name.toLowerCase();
|
|
434
|
+
const previousConfiguration = switchedConnector
|
|
435
|
+
? []
|
|
436
|
+
: previous?.connector?.source?.configuration || [];
|
|
372
437
|
const mergedConfiguration = await Promise.all(incoming.connector.source.configuration.map(async (item) => {
|
|
373
438
|
const incomingItem = (item || {});
|
|
374
439
|
const usesSourceCredentials = this.hasSourceCredentialIdRecursively(incomingItem);
|
|
375
|
-
if (usesSourceCredentials) {
|
|
440
|
+
if (usesSourceCredentials || switchedConnector) {
|
|
376
441
|
delete incomingItem._secrets_id;
|
|
377
442
|
}
|
|
378
443
|
const itemId = incomingItem._id;
|
|
@@ -446,13 +511,13 @@ let ConnectorSecretService = ConnectorSecretService_1 = class ConnectorSecretSer
|
|
|
446
511
|
}
|
|
447
512
|
return secretsIds;
|
|
448
513
|
}
|
|
449
|
-
async mergeDefinitionSecretsFromSource(incoming, sourceDefinition) {
|
|
514
|
+
async mergeDefinitionSecretsFromSource(projectId, incoming, sourceDefinition) {
|
|
450
515
|
if (incoming.connector.source.name !== sourceDefinition.connector.source.name) {
|
|
451
516
|
throw new Error(`Cannot copy secrets from different connector type. ` +
|
|
452
517
|
`Source: ${sourceDefinition.connector.source.name}, ` +
|
|
453
518
|
`Target: ${incoming.connector.source.name}`);
|
|
454
519
|
}
|
|
455
|
-
const secretFieldNames = await this.getAllSecretFieldNames(incoming.connector.source.name);
|
|
520
|
+
const secretFieldNames = await this.getAllSecretFieldNames(projectId, incoming.connector.source.name, incoming.connector.source.version);
|
|
456
521
|
const sourceSecretsIds = sourceDefinition.connector.source.configuration
|
|
457
522
|
.map(item => item._secrets_id)
|
|
458
523
|
.filter((id) => !!id);
|
|
@@ -26,7 +26,7 @@ let ConnectorSourceConfigService = ConnectorSourceConfigService_1 = class Connec
|
|
|
26
26
|
const fieldsConfig = connector.source.fields
|
|
27
27
|
.map(field => `${connector.source.node} ${field}`)
|
|
28
28
|
.join(', ');
|
|
29
|
-
const configWithSecrets = await this.credentialInjector.injectSecrets(config, projectId);
|
|
29
|
+
const configWithSecrets = await this.credentialInjector.injectSecrets(config, projectId, connector.source.name);
|
|
30
30
|
const configWithCredentials = await this.credentialInjector.injectOAuthCredentials(configWithSecrets, connector.source.name, projectId);
|
|
31
31
|
return new SourceConfigDto({
|
|
32
32
|
name: connector.source.name,
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { Repository } from 'typeorm';
|
|
2
2
|
import { ConnectorSourceCredentials } from '../../entities/connector-source-credentials.entity';
|
|
3
|
+
export interface CredentialFieldUpdateResult {
|
|
4
|
+
credentials: ConnectorSourceCredentials;
|
|
5
|
+
updated: boolean;
|
|
6
|
+
}
|
|
3
7
|
export declare class ConnectorSourceCredentialsService {
|
|
4
8
|
private readonly connectorSourceCredentialsRepository;
|
|
9
|
+
private readonly logger;
|
|
5
10
|
constructor(connectorSourceCredentialsRepository: Repository<ConnectorSourceCredentials>);
|
|
6
11
|
createCredentials(projectId: string, userId: string, connectorName: string, credentials: Record<string, unknown>, expiresAt: Date | null, user?: {
|
|
7
12
|
id?: string;
|
|
@@ -10,7 +15,6 @@ export declare class ConnectorSourceCredentialsService {
|
|
|
10
15
|
picture?: string;
|
|
11
16
|
}): Promise<ConnectorSourceCredentials>;
|
|
12
17
|
getCredentialsById(id: string): Promise<ConnectorSourceCredentials | null>;
|
|
13
|
-
getCredentialsByConnectorName(connectorName: string): Promise<ConnectorSourceCredentials[]>;
|
|
14
18
|
updateCredentials(id: string, credentials: Record<string, unknown>, expiresAt?: Date | null): Promise<ConnectorSourceCredentials>;
|
|
15
19
|
deleteCredentialsByIdsAndDataMart(ids: string[], dataMartId: string): Promise<number>;
|
|
16
20
|
deleteCredentialsByConnectorName(connectorName: string): Promise<void>;
|
|
@@ -19,7 +23,7 @@ export declare class ConnectorSourceCredentialsService {
|
|
|
19
23
|
createSecretsForConfig(projectId: string, connectorName: string, dataMartId: string, configId: string, secrets: Record<string, unknown>, userId?: string): Promise<ConnectorSourceCredentials>;
|
|
20
24
|
getSecretsByDataMartAndConfig(dataMartId: string, configId: string): Promise<ConnectorSourceCredentials | null>;
|
|
21
25
|
updateSecretsForConfig(id: string, projectId: string, secrets: Record<string, unknown>): Promise<ConnectorSourceCredentials>;
|
|
22
|
-
updateCredentialFields(id: string, projectId: string, updates: Record<string, unknown>, expectedCurrentValues?: Record<string, unknown>): Promise<
|
|
26
|
+
updateCredentialFields(id: string, projectId: string, updates: Record<string, unknown>, expectedCurrentValues?: Record<string, unknown>): Promise<CredentialFieldUpdateResult>;
|
|
23
27
|
private getJsonExtractTextExpression;
|
|
24
28
|
private getDatabaseType;
|
|
25
29
|
private updateCredentialsJson;
|
|
@@ -11,6 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
|
+
var ConnectorSourceCredentialsService_1;
|
|
14
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
16
|
exports.ConnectorSourceCredentialsService = void 0;
|
|
16
17
|
const common_1 = require("@nestjs/common");
|
|
@@ -20,8 +21,9 @@ const connector_source_credentials_entity_1 = require("../../entities/connector-
|
|
|
20
21
|
const connectors_1 = require("@owox/connectors");
|
|
21
22
|
const { GENERATED_REFRESH_TOKEN_CREDENTIAL_FIELD } = connectors_1.Core;
|
|
22
23
|
const SECRET_MASK = '**********';
|
|
23
|
-
let ConnectorSourceCredentialsService = class ConnectorSourceCredentialsService {
|
|
24
|
+
let ConnectorSourceCredentialsService = ConnectorSourceCredentialsService_1 = class ConnectorSourceCredentialsService {
|
|
24
25
|
connectorSourceCredentialsRepository;
|
|
26
|
+
logger = new common_1.Logger(ConnectorSourceCredentialsService_1.name);
|
|
25
27
|
constructor(connectorSourceCredentialsRepository) {
|
|
26
28
|
this.connectorSourceCredentialsRepository = connectorSourceCredentialsRepository;
|
|
27
29
|
}
|
|
@@ -41,12 +43,6 @@ let ConnectorSourceCredentialsService = class ConnectorSourceCredentialsService
|
|
|
41
43
|
where: { id },
|
|
42
44
|
});
|
|
43
45
|
}
|
|
44
|
-
async getCredentialsByConnectorName(connectorName) {
|
|
45
|
-
return await this.connectorSourceCredentialsRepository.find({
|
|
46
|
-
where: { connectorName },
|
|
47
|
-
order: { createdAt: 'DESC' },
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
46
|
async updateCredentials(id, credentials, expiresAt) {
|
|
51
47
|
const existingCredentials = await this.getCredentialsById(id);
|
|
52
48
|
if (!existingCredentials) {
|
|
@@ -160,16 +156,22 @@ let ConnectorSourceCredentialsService = class ConnectorSourceCredentialsService
|
|
|
160
156
|
}
|
|
161
157
|
const updateResult = await queryBuilder.execute();
|
|
162
158
|
if (updateResult.affected === 0) {
|
|
163
|
-
|
|
159
|
+
this.logger.warn(`Rotated credential was not persisted: the stored value changed while this run was ` +
|
|
160
|
+
`executing, so the newly issued token was discarded. Authentication may fail on the ` +
|
|
161
|
+
`next run until the source is reconnected.`, { credentialId: id, projectId });
|
|
162
|
+
return { credentials: existing, updated: false };
|
|
164
163
|
}
|
|
165
|
-
const
|
|
166
|
-
return
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
164
|
+
const stored = await this.getCredentialsById(id);
|
|
165
|
+
return {
|
|
166
|
+
credentials: stored ?? {
|
|
167
|
+
...existing,
|
|
168
|
+
credentials: {
|
|
169
|
+
...existing.credentials,
|
|
170
|
+
[GENERATED_REFRESH_TOKEN_CREDENTIAL_FIELD]: generatedRefreshToken,
|
|
171
|
+
},
|
|
171
172
|
},
|
|
172
|
-
|
|
173
|
+
updated: true,
|
|
174
|
+
};
|
|
173
175
|
}
|
|
174
176
|
getJsonExtractTextExpression(column, path) {
|
|
175
177
|
const databaseType = this.getDatabaseType();
|
|
@@ -261,7 +263,7 @@ let ConnectorSourceCredentialsService = class ConnectorSourceCredentialsService
|
|
|
261
263
|
}
|
|
262
264
|
};
|
|
263
265
|
exports.ConnectorSourceCredentialsService = ConnectorSourceCredentialsService;
|
|
264
|
-
exports.ConnectorSourceCredentialsService = ConnectorSourceCredentialsService = __decorate([
|
|
266
|
+
exports.ConnectorSourceCredentialsService = ConnectorSourceCredentialsService = ConnectorSourceCredentialsService_1 = __decorate([
|
|
265
267
|
(0, common_1.Injectable)(),
|
|
266
268
|
__param(0, (0, typeorm_1.InjectRepository)(connector_source_credentials_entity_1.ConnectorSourceCredentials)),
|
|
267
269
|
__metadata("design:paramtypes", [typeorm_2.Repository])
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Core } from '@owox/connectors';
|
|
2
|
+
interface ConnectorSpecificationOneOf {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
requiredType: string;
|
|
6
|
+
attributes?: Core.CONFIG_ATTRIBUTES[];
|
|
7
|
+
oauthParams?: Record<string, unknown>;
|
|
8
|
+
items: Record<string, ConnectorConfigField>;
|
|
9
|
+
}
|
|
10
|
+
interface ConnectorConfigField {
|
|
11
|
+
description: string;
|
|
12
|
+
label: string;
|
|
13
|
+
default: unknown;
|
|
14
|
+
requiredType: string;
|
|
15
|
+
isRequired: boolean;
|
|
16
|
+
options?: unknown[];
|
|
17
|
+
placeholder?: string;
|
|
18
|
+
minimum?: number;
|
|
19
|
+
attributes?: Core.CONFIG_ATTRIBUTES[];
|
|
20
|
+
optionsDependsOn?: string[];
|
|
21
|
+
oneOf?: ConnectorSpecificationOneOf[];
|
|
22
|
+
}
|
|
23
|
+
export interface ConnectorConfig {
|
|
24
|
+
[key: string]: ConnectorConfigField;
|
|
25
|
+
}
|
|
26
|
+
export declare function mapConnectorSpecification(config: ConnectorConfig): {
|
|
27
|
+
oneOf: {
|
|
28
|
+
label: string;
|
|
29
|
+
value: string;
|
|
30
|
+
requiredType: string;
|
|
31
|
+
attributes: any[] | undefined;
|
|
32
|
+
oauthParams: Record<string, unknown> | undefined;
|
|
33
|
+
items: Record<string, unknown>;
|
|
34
|
+
}[] | undefined;
|
|
35
|
+
name: string;
|
|
36
|
+
title: string;
|
|
37
|
+
description: string;
|
|
38
|
+
default: unknown;
|
|
39
|
+
requiredType: string;
|
|
40
|
+
required: boolean;
|
|
41
|
+
options: unknown[] | undefined;
|
|
42
|
+
placeholder: string | undefined;
|
|
43
|
+
minimum: number | undefined;
|
|
44
|
+
attributes: any[] | undefined;
|
|
45
|
+
optionsDependsOn: string[] | undefined;
|
|
46
|
+
}[];
|
|
47
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapConnectorSpecification = mapConnectorSpecification;
|
|
4
|
+
const connectors_1 = require("@owox/connectors");
|
|
5
|
+
function mapConnectorSpecification(config) {
|
|
6
|
+
const result = Object.keys(config).map(key => {
|
|
7
|
+
const item = {
|
|
8
|
+
...mapConfigFieldToSchema(key, config[key]),
|
|
9
|
+
oneOf: config[key].oneOf?.map(oneOf => {
|
|
10
|
+
return {
|
|
11
|
+
label: oneOf.label,
|
|
12
|
+
value: oneOf.value,
|
|
13
|
+
requiredType: oneOf.requiredType,
|
|
14
|
+
attributes: oneOf.attributes,
|
|
15
|
+
oauthParams: oneOf.oauthParams,
|
|
16
|
+
items: Object.entries(oneOf.items).reduce((acc, [itemKey, itemValue]) => {
|
|
17
|
+
acc[itemKey] = mapConfigFieldToSchema(itemKey, itemValue);
|
|
18
|
+
return acc;
|
|
19
|
+
}, {}),
|
|
20
|
+
};
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
return item;
|
|
24
|
+
});
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
function mapConfigFieldToSchema(name, field) {
|
|
28
|
+
const item = {
|
|
29
|
+
name,
|
|
30
|
+
title: field.label,
|
|
31
|
+
description: field.description,
|
|
32
|
+
default: field.default,
|
|
33
|
+
requiredType: field.requiredType,
|
|
34
|
+
required: field.isRequired,
|
|
35
|
+
options: field.options,
|
|
36
|
+
placeholder: field.placeholder,
|
|
37
|
+
minimum: field.minimum,
|
|
38
|
+
attributes: field.attributes,
|
|
39
|
+
optionsDependsOn: field.optionsDependsOn,
|
|
40
|
+
};
|
|
41
|
+
if (!(field.attributes ?? []).includes(connectors_1.Core.CONFIG_ATTRIBUTES.SECRET)) {
|
|
42
|
+
return item;
|
|
43
|
+
}
|
|
44
|
+
return { ...item, default: undefined, options: undefined, placeholder: undefined };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=connector-specification.mapper.js.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
export declare const TEST_DATE_WINDOW_DAYS = 2;
|
|
3
|
+
export declare const MAX_TEST_OUTPUT_LENGTH: number;
|
|
4
|
+
export declare const CONNECTOR_TEST_CONCURRENCY_LIMIT_CODE = "CONNECTOR_TEST_CONCURRENCY_LIMIT";
|
|
5
|
+
export interface ConnectorTestResult {
|
|
6
|
+
rows: Record<string, unknown>[];
|
|
7
|
+
logs: string[];
|
|
8
|
+
error: string | null;
|
|
9
|
+
sample: Record<string, unknown>[];
|
|
10
|
+
}
|
|
11
|
+
export interface ConnectorTestRequest {
|
|
12
|
+
projectId: string;
|
|
13
|
+
manifest: Record<string, unknown>;
|
|
14
|
+
node: string;
|
|
15
|
+
configuration: Record<string, unknown>;
|
|
16
|
+
maxRows?: number;
|
|
17
|
+
maxPages?: number;
|
|
18
|
+
timeoutMs?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ConnectorTestHooks {
|
|
21
|
+
hang?: boolean;
|
|
22
|
+
env?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
export declare class ConnectorTestService {
|
|
25
|
+
private readonly configService?;
|
|
26
|
+
private readonly activeTestsByProject;
|
|
27
|
+
private activeTestsTotal;
|
|
28
|
+
constructor(configService?: ConfigService | undefined);
|
|
29
|
+
wrapConfig(configuration: Record<string, unknown>): Record<string, {
|
|
30
|
+
value: unknown;
|
|
31
|
+
}>;
|
|
32
|
+
pruneToNode(manifest: Record<string, unknown>, node: string): Record<string, unknown>;
|
|
33
|
+
selectNodeFields(manifest: Record<string, unknown>, node: string): string;
|
|
34
|
+
private manifestParseError;
|
|
35
|
+
private assertFitsChildEnv;
|
|
36
|
+
protected runnerPath(): string;
|
|
37
|
+
private stopChild;
|
|
38
|
+
private testDateWindow;
|
|
39
|
+
private limit;
|
|
40
|
+
private acquireTestSlot;
|
|
41
|
+
runTest(args: ConnectorTestRequest, hooks?: ConnectorTestHooks): Promise<ConnectorTestResult>;
|
|
42
|
+
private execute;
|
|
43
|
+
}
|