@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
package/dist/src/index.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ export { applyDump } from './dump/apply-dump';
|
|
|
5
5
|
export { runMigrations, revertMigration, getMigrationStatus } from './config/migrations.config';
|
|
6
6
|
export { createHealthProbe, type HealthProbeAware } from './health/health-probe';
|
|
7
7
|
export { GracefulShutdownService } from './common/scheduler/services/graceful-shutdown.service';
|
|
8
|
+
export { McpHttpEntryService } from './ee/mcp/transport/mcp-http-entry.service';
|
|
8
9
|
export { registerPluginCollectionsBodyParser } from './config/plugin-collections-body-parser.config';
|
package/dist/src/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerPluginCollectionsBodyParser = exports.GracefulShutdownService = exports.createHealthProbe = exports.getMigrationStatus = exports.revertMigration = exports.runMigrations = exports.applyDump = exports.dumpInserts = exports.bootstrap = void 0;
|
|
3
|
+
exports.registerPluginCollectionsBodyParser = exports.McpHttpEntryService = exports.GracefulShutdownService = exports.createHealthProbe = exports.getMigrationStatus = exports.revertMigration = exports.runMigrations = exports.applyDump = exports.dumpInserts = exports.bootstrap = void 0;
|
|
4
4
|
var bootstrap_1 = require("./bootstrap");
|
|
5
5
|
Object.defineProperty(exports, "bootstrap", { enumerable: true, get: function () { return bootstrap_1.bootstrap; } });
|
|
6
6
|
var create_dump_1 = require("./dump/create-dump");
|
|
@@ -15,6 +15,8 @@ var health_probe_1 = require("./health/health-probe");
|
|
|
15
15
|
Object.defineProperty(exports, "createHealthProbe", { enumerable: true, get: function () { return health_probe_1.createHealthProbe; } });
|
|
16
16
|
var graceful_shutdown_service_1 = require("./common/scheduler/services/graceful-shutdown.service");
|
|
17
17
|
Object.defineProperty(exports, "GracefulShutdownService", { enumerable: true, get: function () { return graceful_shutdown_service_1.GracefulShutdownService; } });
|
|
18
|
+
var mcp_http_entry_service_1 = require("./ee/mcp/transport/mcp-http-entry.service");
|
|
19
|
+
Object.defineProperty(exports, "McpHttpEntryService", { enumerable: true, get: function () { return mcp_http_entry_service_1.McpHttpEntryService; } });
|
|
18
20
|
var plugin_collections_body_parser_config_1 = require("./config/plugin-collections-body-parser.config");
|
|
19
21
|
Object.defineProperty(exports, "registerPluginCollectionsBodyParser", { enumerable: true, get: function () { return plugin_collections_body_parser_config_1.registerPluginCollectionsBodyParser; } });
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
export declare class CreateConnectorDefinitionTables1788048000000 implements MigrationInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateConnectorDefinitionTables1788048000000 = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const migration_utils_1 = require("./migration-utils");
|
|
6
|
+
const CONNECTOR_DEFINITION = 'connector_definition';
|
|
7
|
+
const CONNECTOR_DEFINITION_VERSION = 'connector_definition_version';
|
|
8
|
+
const CONNECTOR_DEFINITION_INDICES = [
|
|
9
|
+
'IDX_connector_definition_projectId',
|
|
10
|
+
'IDX_connector_definition_projectId_name',
|
|
11
|
+
];
|
|
12
|
+
const CONNECTOR_DEFINITION_VERSION_INDICES = [
|
|
13
|
+
'IDX_connector_definition_version_definitionId',
|
|
14
|
+
'IDX_connector_definition_version_definitionId_version',
|
|
15
|
+
];
|
|
16
|
+
class CreateConnectorDefinitionTables1788048000000 {
|
|
17
|
+
name = 'CreateConnectorDefinitionTables1788048000000';
|
|
18
|
+
async up(queryRunner) {
|
|
19
|
+
if (!(await queryRunner.hasTable(CONNECTOR_DEFINITION))) {
|
|
20
|
+
await queryRunner.createTable(new typeorm_1.Table({
|
|
21
|
+
name: CONNECTOR_DEFINITION,
|
|
22
|
+
columns: [
|
|
23
|
+
{ name: 'id', type: 'varchar', isPrimary: true },
|
|
24
|
+
{ name: 'projectId', type: 'varchar', isNullable: false },
|
|
25
|
+
{ name: 'name', type: 'varchar', isNullable: false },
|
|
26
|
+
{ name: 'title', type: 'varchar', isNullable: false },
|
|
27
|
+
{ name: 'description', type: 'text', isNullable: true, default: null },
|
|
28
|
+
{ name: 'logo', type: 'text', isNullable: true, default: null },
|
|
29
|
+
{ name: 'docUrl', type: 'varchar', isNullable: true, default: null },
|
|
30
|
+
{ name: 'activeVersionId', type: 'varchar', isNullable: true, default: null },
|
|
31
|
+
{ name: 'createdById', type: 'varchar', isNullable: true, default: null },
|
|
32
|
+
{ name: 'createdAt', type: 'datetime', default: 'CURRENT_TIMESTAMP' },
|
|
33
|
+
{ name: 'modifiedAt', type: 'datetime', default: 'CURRENT_TIMESTAMP' },
|
|
34
|
+
{ name: 'deletedAt', type: 'datetime', isNullable: true, default: null },
|
|
35
|
+
],
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
await createIndexIfMissing(queryRunner, CONNECTOR_DEFINITION, new typeorm_1.TableIndex({
|
|
39
|
+
name: 'IDX_connector_definition_projectId',
|
|
40
|
+
columnNames: ['projectId'],
|
|
41
|
+
}));
|
|
42
|
+
await createIndexIfMissing(queryRunner, CONNECTOR_DEFINITION, new typeorm_1.TableIndex({
|
|
43
|
+
name: 'IDX_connector_definition_projectId_name',
|
|
44
|
+
columnNames: ['projectId', 'name'],
|
|
45
|
+
isUnique: true,
|
|
46
|
+
}));
|
|
47
|
+
if (!(await queryRunner.hasTable(CONNECTOR_DEFINITION_VERSION))) {
|
|
48
|
+
await queryRunner.createTable(new typeorm_1.Table({
|
|
49
|
+
name: CONNECTOR_DEFINITION_VERSION,
|
|
50
|
+
columns: [
|
|
51
|
+
{ name: 'id', type: 'varchar', isPrimary: true },
|
|
52
|
+
{ name: 'connectorDefinitionId', type: 'varchar', isNullable: false },
|
|
53
|
+
{ name: 'version', type: 'integer', isNullable: false },
|
|
54
|
+
{ name: 'manifest', type: 'json', isNullable: false },
|
|
55
|
+
{ name: 'status', type: 'varchar', default: "'draft'" },
|
|
56
|
+
{ name: 'createdById', type: 'varchar', isNullable: true, default: null },
|
|
57
|
+
{ name: 'createdAt', type: 'datetime', default: 'CURRENT_TIMESTAMP' },
|
|
58
|
+
{ name: 'publishedAt', type: 'datetime', isNullable: true, default: null },
|
|
59
|
+
],
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
await createIndexIfMissing(queryRunner, CONNECTOR_DEFINITION_VERSION, new typeorm_1.TableIndex({
|
|
63
|
+
name: 'IDX_connector_definition_version_definitionId',
|
|
64
|
+
columnNames: ['connectorDefinitionId'],
|
|
65
|
+
}));
|
|
66
|
+
await createIndexIfMissing(queryRunner, CONNECTOR_DEFINITION_VERSION, new typeorm_1.TableIndex({
|
|
67
|
+
name: 'IDX_connector_definition_version_definitionId_version',
|
|
68
|
+
columnNames: ['connectorDefinitionId', 'version'],
|
|
69
|
+
isUnique: true,
|
|
70
|
+
}));
|
|
71
|
+
await createForeignKeyIfMissing(queryRunner, CONNECTOR_DEFINITION_VERSION, new typeorm_1.TableForeignKey({
|
|
72
|
+
columnNames: ['connectorDefinitionId'],
|
|
73
|
+
referencedTableName: CONNECTOR_DEFINITION,
|
|
74
|
+
referencedColumnNames: ['id'],
|
|
75
|
+
onDelete: 'NO ACTION',
|
|
76
|
+
onUpdate: 'NO ACTION',
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
async down(queryRunner) {
|
|
80
|
+
await softDropTableWithIndices(queryRunner, CONNECTOR_DEFINITION_VERSION, CONNECTOR_DEFINITION_VERSION_INDICES);
|
|
81
|
+
await softDropTableWithIndices(queryRunner, CONNECTOR_DEFINITION, CONNECTOR_DEFINITION_INDICES);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.CreateConnectorDefinitionTables1788048000000 = CreateConnectorDefinitionTables1788048000000;
|
|
85
|
+
async function createIndexIfMissing(queryRunner, table, index) {
|
|
86
|
+
const loadedTable = await queryRunner.getTable(table);
|
|
87
|
+
if ((loadedTable?.indices ?? []).some(existing => existing.name === index.name)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
await queryRunner.createIndex(loadedTable ?? table, index);
|
|
91
|
+
}
|
|
92
|
+
async function createForeignKeyIfMissing(queryRunner, table, foreignKey) {
|
|
93
|
+
const loadedTable = await queryRunner.getTable(table);
|
|
94
|
+
const columns = foreignKey.columnNames.join(',');
|
|
95
|
+
const alreadyConstrained = (loadedTable?.foreignKeys ?? []).some(existing => existing.columnNames.join(',') === columns);
|
|
96
|
+
if (alreadyConstrained) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
await queryRunner.createForeignKey(loadedTable ?? table, foreignKey);
|
|
100
|
+
}
|
|
101
|
+
async function softDropTableWithIndices(queryRunner, table, indices) {
|
|
102
|
+
if (!(await queryRunner.hasTable(table))) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const loadedTable = await queryRunner.getTable(table);
|
|
106
|
+
const ownForeignKeys = [...(loadedTable?.foreignKeys ?? [])];
|
|
107
|
+
const ownIndices = (loadedTable?.indices ?? []).filter(index => index.name && indices.includes(index.name));
|
|
108
|
+
for (const foreignKey of ownForeignKeys) {
|
|
109
|
+
await queryRunner.dropForeignKey(loadedTable ?? table, foreignKey);
|
|
110
|
+
}
|
|
111
|
+
for (const index of ownIndices) {
|
|
112
|
+
await queryRunner.dropIndex(loadedTable ?? table, index);
|
|
113
|
+
}
|
|
114
|
+
await (0, migration_utils_1.softDropTable)(queryRunner, table);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=1788048000000-create-connector-definition-tables.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
export declare class AddAutoAggregationOptOutToReport1790156789783 implements MigrationInterface {
|
|
3
|
+
readonly name = "AddAutoAggregationOptOutToReport1790156789783";
|
|
4
|
+
private readonly TABLE;
|
|
5
|
+
private readonly COLUMN;
|
|
6
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
7
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddAutoAggregationOptOutToReport1790156789783 = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const migration_utils_1 = require("./migration-utils");
|
|
6
|
+
class AddAutoAggregationOptOutToReport1790156789783 {
|
|
7
|
+
name = 'AddAutoAggregationOptOutToReport1790156789783';
|
|
8
|
+
TABLE = 'report';
|
|
9
|
+
COLUMN = new typeorm_1.TableColumn({
|
|
10
|
+
name: 'autoAggregationOptOut',
|
|
11
|
+
type: 'json',
|
|
12
|
+
isNullable: true,
|
|
13
|
+
});
|
|
14
|
+
async up(queryRunner) {
|
|
15
|
+
const table = await (0, migration_utils_1.getTable)(queryRunner, this.TABLE);
|
|
16
|
+
const exists = table.columns.some(c => c.name === this.COLUMN.name);
|
|
17
|
+
if (!exists) {
|
|
18
|
+
await queryRunner.addColumn(table, this.COLUMN);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async down(queryRunner) {
|
|
22
|
+
const table = await (0, migration_utils_1.getTable)(queryRunner, this.TABLE);
|
|
23
|
+
const exists = table.columns.some(c => c.name === this.COLUMN.name);
|
|
24
|
+
if (exists) {
|
|
25
|
+
await queryRunner.dropColumn(table, this.COLUMN.name);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.AddAutoAggregationOptOutToReport1790156789783 = AddAutoAggregationOptOutToReport1790156789783;
|
|
30
|
+
//# sourceMappingURL=1790156789783-add-auto-aggregation-opt-out-to-report.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
export declare class AddIconToDataMart1790247861000 implements MigrationInterface {
|
|
3
|
+
readonly name = "AddIconToDataMart1790247861000";
|
|
4
|
+
private readonly TABLE;
|
|
5
|
+
private readonly COLUMN;
|
|
6
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
7
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddIconToDataMart1790247861000 = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const migration_utils_1 = require("./migration-utils");
|
|
6
|
+
class AddIconToDataMart1790247861000 {
|
|
7
|
+
name = 'AddIconToDataMart1790247861000';
|
|
8
|
+
TABLE = 'data_mart';
|
|
9
|
+
COLUMN = new typeorm_1.TableColumn({
|
|
10
|
+
name: 'icon',
|
|
11
|
+
type: 'varchar',
|
|
12
|
+
length: '64',
|
|
13
|
+
isNullable: true,
|
|
14
|
+
});
|
|
15
|
+
async up(queryRunner) {
|
|
16
|
+
const table = await (0, migration_utils_1.getTable)(queryRunner, this.TABLE);
|
|
17
|
+
const exists = table.columns.some(c => c.name === this.COLUMN.name);
|
|
18
|
+
if (!exists) {
|
|
19
|
+
await queryRunner.addColumn(table, this.COLUMN);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async down(queryRunner) {
|
|
23
|
+
const table = await (0, migration_utils_1.getTable)(queryRunner, this.TABLE);
|
|
24
|
+
const exists = table.columns.some(c => c.name === this.COLUMN.name);
|
|
25
|
+
if (exists) {
|
|
26
|
+
await queryRunner.dropColumn(table, this.COLUMN.name);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.AddIconToDataMart1790247861000 = AddIconToDataMart1790247861000;
|
|
31
|
+
//# sourceMappingURL=1790247861000-add-icon-to-data-mart.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owox/backend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
4
4
|
"description": "OWOX Data Marts Backend - Full-stack data orchestration platform",
|
|
5
5
|
"author": "OWOX",
|
|
6
6
|
"license": "ELv2",
|
|
@@ -78,7 +78,8 @@
|
|
|
78
78
|
"@google-cloud/pubsub": "^4.0.7",
|
|
79
79
|
"@google-cloud/storage": "^7.21.0",
|
|
80
80
|
"@huggingface/transformers": "^3.0.0",
|
|
81
|
-
"@modelcontextprotocol/
|
|
81
|
+
"@modelcontextprotocol/node": "^2.0.0",
|
|
82
|
+
"@modelcontextprotocol/server": "^2.0.0",
|
|
82
83
|
"@nestjs/common": "^11.0.1",
|
|
83
84
|
"@nestjs/config": "^4.0.2",
|
|
84
85
|
"@nestjs/core": "^11.1.2",
|
|
@@ -91,9 +92,9 @@
|
|
|
91
92
|
"@opentelemetry/exporter-trace-otlp-http": "^0.220.0",
|
|
92
93
|
"@opentelemetry/sdk-trace-base": "^2.9.0",
|
|
93
94
|
"@opentelemetry/sdk-trace-node": "^2.9.0",
|
|
94
|
-
"@owox/connectors": "0.
|
|
95
|
-
"@owox/idp-protocol": "0.
|
|
96
|
-
"@owox/internal-helpers": "0.
|
|
95
|
+
"@owox/connectors": "0.36.0",
|
|
96
|
+
"@owox/idp-protocol": "0.36.0",
|
|
97
|
+
"@owox/internal-helpers": "0.36.0",
|
|
97
98
|
"better-sqlite3": "^12.2.0",
|
|
98
99
|
"class-transformer": "^0.5.1",
|
|
99
100
|
"class-validator": "^0.14.2",
|
|
@@ -102,6 +103,7 @@
|
|
|
102
103
|
"env-paths": "^3.0.0",
|
|
103
104
|
"googleapis": "^150.0.1",
|
|
104
105
|
"handlebars": "^4.7.9",
|
|
106
|
+
"hono": "^4.11.4",
|
|
105
107
|
"ipaddr.js": "^1.9.1",
|
|
106
108
|
"jsonwebtoken": "^9.0.0",
|
|
107
109
|
"juice": "^11.0.3",
|
|
@@ -123,12 +125,14 @@
|
|
|
123
125
|
"typeorm-transactional": "^0.5.0",
|
|
124
126
|
"undici": "^6.27.0",
|
|
125
127
|
"zod": "^3.25.64",
|
|
126
|
-
"zod-to-json-schema": "^3.25.0"
|
|
128
|
+
"zod-to-json-schema": "^3.25.0",
|
|
129
|
+
"zod-v4": "npm:zod@^4.6.5"
|
|
127
130
|
},
|
|
128
131
|
"peerDependencies": {
|
|
129
132
|
"express": "^5"
|
|
130
133
|
},
|
|
131
134
|
"devDependencies": {
|
|
135
|
+
"@modelcontextprotocol/client": "^2.0.0",
|
|
132
136
|
"@nestjs/cli": "^11.0.9",
|
|
133
137
|
"@nestjs/schematics": "^11.0.0",
|
|
134
138
|
"@nestjs/testing": "^11.1.2",
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ArgumentsHost, ExceptionFilter, UnauthorizedException } from '@nestjs/common';
|
|
2
|
-
import { McpResourceResolverService } from '../../../mcp-resource/mcp-resource-resolver.service';
|
|
3
|
-
import { McpConfigService } from '../config/mcp.config';
|
|
4
|
-
export declare class McpAuthExceptionFilter implements ExceptionFilter {
|
|
5
|
-
private readonly config;
|
|
6
|
-
private readonly resourceResolver;
|
|
7
|
-
private readonly logger;
|
|
8
|
-
constructor(config: McpConfigService, resourceResolver: McpResourceResolverService);
|
|
9
|
-
catch(exception: UnauthorizedException, host: ArgumentsHost): void;
|
|
10
|
-
private getRequestedSessionId;
|
|
11
|
-
private getChallengeHeader;
|
|
12
|
-
private isExpectedAnonymousProbe;
|
|
13
|
-
private getMessage;
|
|
14
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var McpAuthExceptionFilter_1;
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.McpAuthExceptionFilter = void 0;
|
|
14
|
-
const common_1 = require("@nestjs/common");
|
|
15
|
-
const mcp_resource_resolver_service_1 = require("../../../mcp-resource/mcp-resource-resolver.service");
|
|
16
|
-
const mcp_config_1 = require("../config/mcp.config");
|
|
17
|
-
let McpAuthExceptionFilter = McpAuthExceptionFilter_1 = class McpAuthExceptionFilter {
|
|
18
|
-
config;
|
|
19
|
-
resourceResolver;
|
|
20
|
-
logger = new common_1.Logger(McpAuthExceptionFilter_1.name);
|
|
21
|
-
constructor(config, resourceResolver) {
|
|
22
|
-
this.config = config;
|
|
23
|
-
this.resourceResolver = resourceResolver;
|
|
24
|
-
}
|
|
25
|
-
catch(exception, host) {
|
|
26
|
-
const http = host.switchToHttp();
|
|
27
|
-
const request = typeof http.getRequest === 'function' ? http.getRequest() : undefined;
|
|
28
|
-
const response = http.getResponse();
|
|
29
|
-
const message = this.getMessage(exception);
|
|
30
|
-
const metadata = {
|
|
31
|
-
method: request?.method,
|
|
32
|
-
url: request?.originalUrl ?? request?.url,
|
|
33
|
-
requestSessionId: this.getRequestedSessionId(request),
|
|
34
|
-
accept: request?.headers?.accept,
|
|
35
|
-
contentType: request?.headers?.['content-type'],
|
|
36
|
-
hasAuthorization: Boolean(request?.headers?.authorization),
|
|
37
|
-
message,
|
|
38
|
-
};
|
|
39
|
-
if (this.isExpectedAnonymousProbe(request, message)) {
|
|
40
|
-
this.logger.log('MCP auth rejected', metadata);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
this.logger.warn('MCP auth rejected', metadata);
|
|
44
|
-
}
|
|
45
|
-
response.setHeader('WWW-Authenticate', this.getChallengeHeader(request));
|
|
46
|
-
response.status(401).json({
|
|
47
|
-
statusCode: 401,
|
|
48
|
-
message,
|
|
49
|
-
error: 'Unauthorized',
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
getRequestedSessionId(request) {
|
|
53
|
-
const header = request?.headers?.['mcp-session-id'];
|
|
54
|
-
return Array.isArray(header) ? header[0] : header;
|
|
55
|
-
}
|
|
56
|
-
getChallengeHeader(request) {
|
|
57
|
-
const resourceContext = request ? this.resourceResolver.tryResolveRequest(request) : null;
|
|
58
|
-
const metadataUrl = resourceContext
|
|
59
|
-
? `${resourceContext.publicBaseUrl}/.well-known/oauth-protected-resource`
|
|
60
|
-
: this.config.protectedResourceMetadataUrl;
|
|
61
|
-
return `Bearer resource_metadata="${metadataUrl}", scope="${this.config.scopes.join(' ')}"`;
|
|
62
|
-
}
|
|
63
|
-
isExpectedAnonymousProbe(request, message) {
|
|
64
|
-
return (request?.method === 'GET' &&
|
|
65
|
-
(request.originalUrl ?? request.url) === '/mcp' &&
|
|
66
|
-
!request.headers?.authorization &&
|
|
67
|
-
message === 'Missing MCP bearer token');
|
|
68
|
-
}
|
|
69
|
-
getMessage(exception) {
|
|
70
|
-
const response = exception.getResponse();
|
|
71
|
-
if (typeof response === 'object' && response !== null && 'message' in response) {
|
|
72
|
-
const message = response.message;
|
|
73
|
-
return Array.isArray(message) ? message.join(', ') : String(message);
|
|
74
|
-
}
|
|
75
|
-
return exception.message;
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
exports.McpAuthExceptionFilter = McpAuthExceptionFilter;
|
|
79
|
-
exports.McpAuthExceptionFilter = McpAuthExceptionFilter = McpAuthExceptionFilter_1 = __decorate([
|
|
80
|
-
(0, common_1.Catch)(common_1.UnauthorizedException),
|
|
81
|
-
__metadata("design:paramtypes", [mcp_config_1.McpConfigService,
|
|
82
|
-
mcp_resource_resolver_service_1.McpResourceResolverService])
|
|
83
|
-
], McpAuthExceptionFilter);
|
|
84
|
-
//# sourceMappingURL=mcp-auth.exception-filter.js.map
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
|
-
import { McpResourceResolverService } from '../../../mcp-resource/mcp-resource-resolver.service';
|
|
3
|
-
import { type McpAuthPort } from './mcp-auth.port';
|
|
4
|
-
export declare class McpAuthGuard implements CanActivate {
|
|
5
|
-
private readonly auth;
|
|
6
|
-
private readonly resourceResolver;
|
|
7
|
-
private readonly logger;
|
|
8
|
-
private readonly requiredScopes;
|
|
9
|
-
constructor(auth: McpAuthPort, resourceResolver: McpResourceResolverService);
|
|
10
|
-
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
11
|
-
private extractBearerToken;
|
|
12
|
-
private getRequestedSessionId;
|
|
13
|
-
private assertPayload;
|
|
14
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
|
-
var McpAuthGuard_1;
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.McpAuthGuard = void 0;
|
|
17
|
-
const common_1 = require("@nestjs/common");
|
|
18
|
-
const mcp_resource_resolver_service_1 = require("../../../mcp-resource/mcp-resource-resolver.service");
|
|
19
|
-
const mcp_auth_port_1 = require("./mcp-auth.port");
|
|
20
|
-
let McpAuthGuard = McpAuthGuard_1 = class McpAuthGuard {
|
|
21
|
-
auth;
|
|
22
|
-
resourceResolver;
|
|
23
|
-
logger = new common_1.Logger(McpAuthGuard_1.name);
|
|
24
|
-
requiredScopes = ['mcp:read'];
|
|
25
|
-
constructor(auth, resourceResolver) {
|
|
26
|
-
this.auth = auth;
|
|
27
|
-
this.resourceResolver = resourceResolver;
|
|
28
|
-
}
|
|
29
|
-
async canActivate(context) {
|
|
30
|
-
const request = context.switchToHttp().getRequest();
|
|
31
|
-
const token = this.extractBearerToken(request);
|
|
32
|
-
const resourceContext = this.resourceResolver.tryResolveRequest(request);
|
|
33
|
-
if (!resourceContext) {
|
|
34
|
-
throw new common_1.UnauthorizedException('Invalid MCP resource');
|
|
35
|
-
}
|
|
36
|
-
const payload = await this.auth.verifyToken(token, resourceContext.resource, this.requiredScopes);
|
|
37
|
-
if (!payload) {
|
|
38
|
-
throw new common_1.UnauthorizedException('Invalid MCP bearer token');
|
|
39
|
-
}
|
|
40
|
-
this.assertPayload(payload, resourceContext);
|
|
41
|
-
this.logger.debug('MCP auth accepted', {
|
|
42
|
-
method: request.method,
|
|
43
|
-
url: request.originalUrl ?? request.url,
|
|
44
|
-
requestSessionId: this.getRequestedSessionId(request),
|
|
45
|
-
projectId: payload.projectId,
|
|
46
|
-
clientId: payload.clientId,
|
|
47
|
-
resource: payload.resource,
|
|
48
|
-
scopes: payload.scopes,
|
|
49
|
-
roles: payload.roles,
|
|
50
|
-
});
|
|
51
|
-
request.mcpContext = payload;
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
extractBearerToken(request) {
|
|
55
|
-
const authorization = request.headers.authorization;
|
|
56
|
-
const value = Array.isArray(authorization) ? authorization[0] : authorization;
|
|
57
|
-
if (!value?.startsWith('Bearer ')) {
|
|
58
|
-
throw new common_1.UnauthorizedException('Missing MCP bearer token');
|
|
59
|
-
}
|
|
60
|
-
const token = value.slice('Bearer '.length).trim();
|
|
61
|
-
if (!token) {
|
|
62
|
-
throw new common_1.UnauthorizedException('Missing MCP bearer token');
|
|
63
|
-
}
|
|
64
|
-
return token;
|
|
65
|
-
}
|
|
66
|
-
getRequestedSessionId(request) {
|
|
67
|
-
const header = request.headers?.['mcp-session-id'];
|
|
68
|
-
return Array.isArray(header) ? header[0] : header;
|
|
69
|
-
}
|
|
70
|
-
assertPayload(payload, resourceContext) {
|
|
71
|
-
if (payload.authFlow !== 'mcp') {
|
|
72
|
-
throw new common_1.UnauthorizedException('Invalid MCP auth flow');
|
|
73
|
-
}
|
|
74
|
-
if (payload.resource !== resourceContext.resource) {
|
|
75
|
-
throw new common_1.UnauthorizedException('Invalid MCP resource');
|
|
76
|
-
}
|
|
77
|
-
if (resourceContext.kind === 'project' && payload.projectId !== resourceContext.projectId) {
|
|
78
|
-
throw new common_1.UnauthorizedException('Invalid MCP project context');
|
|
79
|
-
}
|
|
80
|
-
if (!payload.projectId) {
|
|
81
|
-
throw new common_1.UnauthorizedException('Missing MCP project context');
|
|
82
|
-
}
|
|
83
|
-
if (!payload.roles.length) {
|
|
84
|
-
throw new common_1.UnauthorizedException('Missing MCP project roles');
|
|
85
|
-
}
|
|
86
|
-
for (const scope of this.requiredScopes) {
|
|
87
|
-
if (!payload.scopes.includes(scope)) {
|
|
88
|
-
throw new common_1.UnauthorizedException('Missing MCP scope');
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
exports.McpAuthGuard = McpAuthGuard;
|
|
94
|
-
exports.McpAuthGuard = McpAuthGuard = McpAuthGuard_1 = __decorate([
|
|
95
|
-
(0, common_1.Injectable)(),
|
|
96
|
-
__param(0, (0, common_1.Inject)(mcp_auth_port_1.MCP_AUTH_PORT)),
|
|
97
|
-
__metadata("design:paramtypes", [Object, mcp_resource_resolver_service_1.McpResourceResolverService])
|
|
98
|
-
], McpAuthGuard);
|
|
99
|
-
//# sourceMappingURL=mcp-auth.guard.js.map
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Response } from 'express';
|
|
2
|
-
import { ClsContextService } from '../../../common/logger/cls-context.service';
|
|
3
|
-
import type { McpAuthenticatedRequest } from '../auth/mcp-auth-context';
|
|
4
|
-
import { McpStreamableHttpTransportHandler } from '../sdk/mcp-streamable-http-transport.handler';
|
|
5
|
-
export declare const MCP_REQUEST_SOCKET_TIMEOUT_MS: number;
|
|
6
|
-
export declare class McpTransportController {
|
|
7
|
-
private readonly transportHandler;
|
|
8
|
-
private readonly clsContextService;
|
|
9
|
-
private readonly logger;
|
|
10
|
-
constructor(transportHandler: McpStreamableHttpTransportHandler, clsContextService: ClsContextService);
|
|
11
|
-
handleMcp(request: McpAuthenticatedRequest, response: Response, body: unknown): Promise<void>;
|
|
12
|
-
private firstHeader;
|
|
13
|
-
private getRequestedSessionId;
|
|
14
|
-
private isExpectedStandaloneSseRejection;
|
|
15
|
-
private getJsonRpcSummary;
|
|
16
|
-
private toLoggableJsonRpcId;
|
|
17
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
|
-
var McpTransportController_1;
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.McpTransportController = exports.MCP_REQUEST_SOCKET_TIMEOUT_MS = void 0;
|
|
17
|
-
const common_1 = require("@nestjs/common");
|
|
18
|
-
const node_crypto_1 = require("node:crypto");
|
|
19
|
-
const cls_context_service_1 = require("../../../common/logger/cls-context.service");
|
|
20
|
-
const mcp_auth_exception_filter_1 = require("../auth/mcp-auth.exception-filter");
|
|
21
|
-
const mcp_auth_guard_1 = require("../auth/mcp-auth.guard");
|
|
22
|
-
const mcp_log_context_1 = require("../observability/mcp-log-context");
|
|
23
|
-
const mcp_streamable_http_transport_handler_1 = require("../sdk/mcp-streamable-http-transport.handler");
|
|
24
|
-
exports.MCP_REQUEST_SOCKET_TIMEOUT_MS = 4 * 60_000;
|
|
25
|
-
let McpTransportController = McpTransportController_1 = class McpTransportController {
|
|
26
|
-
transportHandler;
|
|
27
|
-
clsContextService;
|
|
28
|
-
logger = new common_1.Logger(McpTransportController_1.name);
|
|
29
|
-
constructor(transportHandler, clsContextService) {
|
|
30
|
-
this.transportHandler = transportHandler;
|
|
31
|
-
this.clsContextService = clsContextService;
|
|
32
|
-
}
|
|
33
|
-
async handleMcp(request, response, body) {
|
|
34
|
-
if (typeof request.setTimeout === 'function') {
|
|
35
|
-
request.setTimeout(exports.MCP_REQUEST_SOCKET_TIMEOUT_MS);
|
|
36
|
-
}
|
|
37
|
-
const requestId = (0, node_crypto_1.randomUUID)();
|
|
38
|
-
const requestSessionId = this.getRequestedSessionId(request);
|
|
39
|
-
await this.clsContextService.runWithContext(mcp_log_context_1.MCP_LOG_CONTEXT_KEY, {
|
|
40
|
-
projectId: request.mcpContext.projectId,
|
|
41
|
-
userId: request.mcpContext.userId,
|
|
42
|
-
clientId: request.mcpContext.clientId,
|
|
43
|
-
sessionId: requestSessionId,
|
|
44
|
-
requestId,
|
|
45
|
-
protocolVersion: this.firstHeader(request, 'mcp-protocol-version'),
|
|
46
|
-
userAgent: this.firstHeader(request, 'user-agent'),
|
|
47
|
-
clientVendor: this.firstHeader(request, 'x-anthropic-client'),
|
|
48
|
-
traceparent: this.firstHeader(request, 'traceparent'),
|
|
49
|
-
}, async () => {
|
|
50
|
-
const startedAt = Date.now();
|
|
51
|
-
const rpc = this.getJsonRpcSummary(body);
|
|
52
|
-
this.logger.debug('MCP request received', {
|
|
53
|
-
method: request.method,
|
|
54
|
-
url: request.originalUrl ?? request.url,
|
|
55
|
-
requestSessionId,
|
|
56
|
-
accept: request.headers?.accept,
|
|
57
|
-
contentType: request.headers?.['content-type'],
|
|
58
|
-
rpc,
|
|
59
|
-
projectId: request.mcpContext.projectId,
|
|
60
|
-
clientId: request.mcpContext.clientId,
|
|
61
|
-
});
|
|
62
|
-
if (typeof response.once === 'function') {
|
|
63
|
-
response.once('finish', () => {
|
|
64
|
-
const metadata = {
|
|
65
|
-
statusCode: response.statusCode,
|
|
66
|
-
durationMs: Date.now() - startedAt,
|
|
67
|
-
contentType: response.getHeader('content-type'),
|
|
68
|
-
requestSessionId,
|
|
69
|
-
responseSessionId: response.getHeader('mcp-session-id'),
|
|
70
|
-
rpc,
|
|
71
|
-
projectId: request.mcpContext.projectId,
|
|
72
|
-
userId: request.mcpContext.userId,
|
|
73
|
-
clientId: request.mcpContext.clientId,
|
|
74
|
-
requestId,
|
|
75
|
-
};
|
|
76
|
-
if (response.statusCode >= 400 &&
|
|
77
|
-
!this.isExpectedStandaloneSseRejection(request, response)) {
|
|
78
|
-
this.logger.warn('MCP response finished with error status', metadata);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
this.logger.debug('MCP response finished', metadata);
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
await this.transportHandler.handleRequest(request, response, body, request.mcpContext);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
firstHeader(request, name) {
|
|
88
|
-
const header = request.headers?.[name];
|
|
89
|
-
return Array.isArray(header) ? header[0] : header;
|
|
90
|
-
}
|
|
91
|
-
getRequestedSessionId(request) {
|
|
92
|
-
return this.firstHeader(request, 'mcp-session-id');
|
|
93
|
-
}
|
|
94
|
-
isExpectedStandaloneSseRejection(request, response) {
|
|
95
|
-
return request.method === 'GET' && response.statusCode === 405;
|
|
96
|
-
}
|
|
97
|
-
getJsonRpcSummary(body) {
|
|
98
|
-
if (Array.isArray(body)) {
|
|
99
|
-
return body.map(item => this.getJsonRpcSummary(item));
|
|
100
|
-
}
|
|
101
|
-
if (!body || typeof body !== 'object') {
|
|
102
|
-
return typeof body;
|
|
103
|
-
}
|
|
104
|
-
const message = body;
|
|
105
|
-
return {
|
|
106
|
-
id: this.toLoggableJsonRpcId(message.id),
|
|
107
|
-
method: typeof message.method === 'string' ? message.method : undefined,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
toLoggableJsonRpcId(id) {
|
|
111
|
-
if (typeof id === 'string' || typeof id === 'number' || id === null || id === undefined) {
|
|
112
|
-
return id;
|
|
113
|
-
}
|
|
114
|
-
return '<non-scalar>';
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
exports.McpTransportController = McpTransportController;
|
|
118
|
-
__decorate([
|
|
119
|
-
(0, common_1.All)('/mcp'),
|
|
120
|
-
__param(0, (0, common_1.Req)()),
|
|
121
|
-
__param(1, (0, common_1.Res)()),
|
|
122
|
-
__param(2, (0, common_1.Body)()),
|
|
123
|
-
__metadata("design:type", Function),
|
|
124
|
-
__metadata("design:paramtypes", [Object, Object, Object]),
|
|
125
|
-
__metadata("design:returntype", Promise)
|
|
126
|
-
], McpTransportController.prototype, "handleMcp", null);
|
|
127
|
-
exports.McpTransportController = McpTransportController = McpTransportController_1 = __decorate([
|
|
128
|
-
(0, common_1.Controller)(),
|
|
129
|
-
(0, common_1.UseGuards)(mcp_auth_guard_1.McpAuthGuard),
|
|
130
|
-
(0, common_1.UseFilters)(mcp_auth_exception_filter_1.McpAuthExceptionFilter),
|
|
131
|
-
__metadata("design:paramtypes", [mcp_streamable_http_transport_handler_1.McpStreamableHttpTransportHandler,
|
|
132
|
-
cls_context_service_1.ClsContextService])
|
|
133
|
-
], McpTransportController);
|
|
134
|
-
//# sourceMappingURL=mcp-transport.controller.js.map
|