@marinoscar/platform-api 0.0.0-stage → 0.1.0-next.3
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/CHANGELOG.md +54 -0
- package/LICENSE +21 -0
- package/README.md +106 -2
- package/dist/core/crypto/encryption-key-startup-check.d.ts +29 -0
- package/dist/core/crypto/encryption-key-startup-check.d.ts.map +1 -0
- package/dist/core/crypto/encryption-key-startup-check.js +221 -0
- package/dist/core/crypto/encryption-key-startup-check.js.map +1 -0
- package/dist/core/crypto/secret-cipher.d.ts +151 -0
- package/dist/core/crypto/secret-cipher.d.ts.map +1 -0
- package/dist/core/crypto/secret-cipher.js +452 -0
- package/dist/core/crypto/secret-cipher.js.map +1 -0
- package/dist/core/data-access/index.d.ts +6 -0
- package/dist/core/data-access/index.d.ts.map +1 -0
- package/dist/core/data-access/index.js +19 -0
- package/dist/core/data-access/index.js.map +1 -0
- package/dist/core/data-access/scoped-access.error.d.ts +35 -0
- package/dist/core/data-access/scoped-access.error.d.ts.map +1 -0
- package/dist/core/data-access/scoped-access.error.js +43 -0
- package/dist/core/data-access/scoped-access.error.js.map +1 -0
- package/dist/core/data-access/scoped-client.d.ts +104 -0
- package/dist/core/data-access/scoped-client.d.ts.map +1 -0
- package/dist/core/data-access/scoped-client.js +270 -0
- package/dist/core/data-access/scoped-client.js.map +1 -0
- package/dist/core/data-access/types.d.ts +85 -0
- package/dist/core/data-access/types.d.ts.map +1 -0
- package/dist/core/data-access/types.js +12 -0
- package/dist/core/data-access/types.js.map +1 -0
- package/dist/core/data-access/user-owned-data.registry.d.ts +60 -0
- package/dist/core/data-access/user-owned-data.registry.d.ts.map +1 -0
- package/dist/core/data-access/user-owned-data.registry.js +140 -0
- package/dist/core/data-access/user-owned-data.registry.js.map +1 -0
- package/dist/core/errors/database-seed.exception.d.ts +23 -0
- package/dist/core/errors/database-seed.exception.d.ts.map +1 -0
- package/dist/core/errors/database-seed.exception.js +49 -0
- package/dist/core/errors/database-seed.exception.js.map +1 -0
- package/dist/core/errors/error.dto.d.ts +47 -0
- package/dist/core/errors/error.dto.d.ts.map +1 -0
- package/dist/core/errors/error.dto.js +121 -0
- package/dist/core/errors/error.dto.js.map +1 -0
- package/dist/core/errors/http-exception.filter.d.ts +63 -0
- package/dist/core/errors/http-exception.filter.d.ts.map +1 -0
- package/dist/core/errors/http-exception.filter.js +234 -0
- package/dist/core/errors/http-exception.filter.js.map +1 -0
- package/dist/core/errors/verbatim-error-body.exception.d.ts +46 -0
- package/dist/core/errors/verbatim-error-body.exception.d.ts.map +1 -0
- package/dist/core/errors/verbatim-error-body.exception.js +135 -0
- package/dist/core/errors/verbatim-error-body.exception.js.map +1 -0
- package/dist/core/host/index.d.ts +7 -0
- package/dist/core/host/index.d.ts.map +1 -0
- package/dist/core/host/index.js +14 -0
- package/dist/core/host/index.js.map +1 -0
- package/dist/core/host/platform-host.d.ts +58 -0
- package/dist/core/host/platform-host.d.ts.map +1 -0
- package/dist/core/host/platform-host.js +104 -0
- package/dist/core/host/platform-host.js.map +1 -0
- package/dist/core/host/platform-host.module.d.ts +53 -0
- package/dist/core/host/platform-host.module.d.ts.map +1 -0
- package/dist/core/host/platform-host.module.js +90 -0
- package/dist/core/host/platform-host.module.js.map +1 -0
- package/dist/core/host/ports.d.ts +132 -0
- package/dist/core/host/ports.d.ts.map +1 -0
- package/dist/core/host/ports.js +48 -0
- package/dist/core/host/ports.js.map +1 -0
- package/dist/core/index.d.ts +15 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +77 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/openapi/openapi-tag.registry.d.ts +80 -0
- package/dist/core/openapi/openapi-tag.registry.d.ts.map +1 -0
- package/dist/core/openapi/openapi-tag.registry.js +72 -0
- package/dist/core/openapi/openapi-tag.registry.js.map +1 -0
- package/dist/core/principal/index.d.ts +6 -0
- package/dist/core/principal/index.d.ts.map +1 -0
- package/dist/core/principal/index.js +3 -0
- package/dist/core/principal/index.js.map +1 -0
- package/dist/core/principal/principal.types.d.ts +222 -0
- package/dist/core/principal/principal.types.d.ts.map +1 -0
- package/dist/core/principal/principal.types.js +22 -0
- package/dist/core/principal/principal.types.js.map +1 -0
- package/dist/core/registry/index.d.ts +4 -0
- package/dist/core/registry/index.d.ts.map +1 -0
- package/dist/core/registry/index.js +19 -0
- package/dist/core/registry/index.js.map +1 -0
- package/dist/core/registry/registry-freeze.service.d.ts +14 -0
- package/dist/core/registry/registry-freeze.service.d.ts.map +1 -0
- package/dist/core/registry/registry-freeze.service.js +55 -0
- package/dist/core/registry/registry-freeze.service.js.map +1 -0
- package/dist/core/registry/registry.d.ts +268 -0
- package/dist/core/registry/registry.d.ts.map +1 -0
- package/dist/core/registry/registry.js +351 -0
- package/dist/core/registry/registry.js.map +1 -0
- package/dist/core/registry/testing.d.ts +29 -0
- package/dist/core/registry/testing.d.ts.map +1 -0
- package/dist/core/registry/testing.js +63 -0
- package/dist/core/registry/testing.js.map +1 -0
- package/dist/doctor/doctor-check.interface.d.ts +100 -0
- package/dist/doctor/doctor-check.interface.d.ts.map +1 -0
- package/dist/doctor/doctor-check.interface.js +95 -0
- package/dist/doctor/doctor-check.interface.js.map +1 -0
- package/dist/doctor/doctor-check.registry.d.ts +37 -0
- package/dist/doctor/doctor-check.registry.d.ts.map +1 -0
- package/dist/doctor/doctor-check.registry.js +96 -0
- package/dist/doctor/doctor-check.registry.js.map +1 -0
- package/dist/doctor/doctor.controller.factory.d.ts +29 -0
- package/dist/doctor/doctor.controller.factory.d.ts.map +1 -0
- package/dist/doctor/doctor.controller.factory.js +121 -0
- package/dist/doctor/doctor.controller.factory.js.map +1 -0
- package/dist/doctor/doctor.module.d.ts +78 -0
- package/dist/doctor/doctor.module.d.ts.map +1 -0
- package/dist/doctor/doctor.module.js +158 -0
- package/dist/doctor/doctor.module.js.map +1 -0
- package/dist/doctor/doctor.options.d.ts +39 -0
- package/dist/doctor/doctor.options.d.ts.map +1 -0
- package/dist/doctor/doctor.options.js +21 -0
- package/dist/doctor/doctor.options.js.map +1 -0
- package/dist/doctor/doctor.service.d.ts +80 -0
- package/dist/doctor/doctor.service.d.ts.map +1 -0
- package/dist/doctor/doctor.service.js +301 -0
- package/dist/doctor/doctor.service.js.map +1 -0
- package/dist/doctor/dto/doctor-query.dto.d.ts +15 -0
- package/dist/doctor/dto/doctor-query.dto.d.ts.map +1 -0
- package/dist/doctor/dto/doctor-query.dto.js +16 -0
- package/dist/doctor/dto/doctor-query.dto.js.map +1 -0
- package/dist/doctor/dto/doctor-report.dto.d.ts +27 -0
- package/dist/doctor/dto/doctor-report.dto.d.ts.map +1 -0
- package/dist/doctor/dto/doctor-report.dto.js +23 -0
- package/dist/doctor/dto/doctor-report.dto.js.map +1 -0
- package/dist/doctor/egress/classify-host.d.ts +73 -0
- package/dist/doctor/egress/classify-host.d.ts.map +1 -0
- package/dist/doctor/egress/classify-host.js +210 -0
- package/dist/doctor/egress/classify-host.js.map +1 -0
- package/dist/doctor/egress/egress.registry.d.ts +34 -0
- package/dist/doctor/egress/egress.registry.d.ts.map +1 -0
- package/dist/doctor/egress/egress.registry.js +70 -0
- package/dist/doctor/egress/egress.registry.js.map +1 -0
- package/dist/doctor/egress/egress.types.d.ts +135 -0
- package/dist/doctor/egress/egress.types.d.ts.map +1 -0
- package/dist/doctor/egress/egress.types.js +42 -0
- package/dist/doctor/egress/egress.types.js.map +1 -0
- package/dist/doctor/egress/index.d.ts +6 -0
- package/dist/doctor/egress/index.d.ts.map +1 -0
- package/dist/doctor/egress/index.js +23 -0
- package/dist/doctor/egress/index.js.map +1 -0
- package/dist/doctor/egress/network-egress.doctor-check.d.ts +78 -0
- package/dist/doctor/egress/network-egress.doctor-check.d.ts.map +1 -0
- package/dist/doctor/egress/network-egress.doctor-check.js +226 -0
- package/dist/doctor/egress/network-egress.doctor-check.js.map +1 -0
- package/dist/doctor/index.d.ts +19 -0
- package/dist/doctor/index.d.ts.map +1 -0
- package/dist/doctor/index.js +66 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/support-bundle/index.d.ts +12 -0
- package/dist/doctor/support-bundle/index.d.ts.map +1 -0
- package/dist/doctor/support-bundle/index.js +32 -0
- package/dist/doctor/support-bundle/index.js.map +1 -0
- package/dist/doctor/support-bundle/redact.d.ts +76 -0
- package/dist/doctor/support-bundle/redact.d.ts.map +1 -0
- package/dist/doctor/support-bundle/redact.js +236 -0
- package/dist/doctor/support-bundle/redact.js.map +1 -0
- package/dist/doctor/support-bundle/sections/doctor.section.d.ts +81 -0
- package/dist/doctor/support-bundle/sections/doctor.section.d.ts.map +1 -0
- package/dist/doctor/support-bundle/sections/doctor.section.js +83 -0
- package/dist/doctor/support-bundle/sections/doctor.section.js.map +1 -0
- package/dist/doctor/support-bundle/sections/egress.section.d.ts +73 -0
- package/dist/doctor/support-bundle/sections/egress.section.d.ts.map +1 -0
- package/dist/doctor/support-bundle/sections/egress.section.js +97 -0
- package/dist/doctor/support-bundle/sections/egress.section.js.map +1 -0
- package/dist/doctor/support-bundle/sections/meta.section.d.ts +39 -0
- package/dist/doctor/support-bundle/sections/meta.section.d.ts.map +1 -0
- package/dist/doctor/support-bundle/sections/meta.section.js +89 -0
- package/dist/doctor/support-bundle/sections/meta.section.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle-section.interface.d.ts +100 -0
- package/dist/doctor/support-bundle/support-bundle-section.interface.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle-section.interface.js +59 -0
- package/dist/doctor/support-bundle/support-bundle-section.interface.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.controller.d.ts +57 -0
- package/dist/doctor/support-bundle/support-bundle.controller.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.controller.js +141 -0
- package/dist/doctor/support-bundle/support-bundle.controller.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.options.d.ts +92 -0
- package/dist/doctor/support-bundle/support-bundle.options.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.options.js +100 -0
- package/dist/doctor/support-bundle/support-bundle.options.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.registry.d.ts +38 -0
- package/dist/doctor/support-bundle/support-bundle.registry.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.registry.js +90 -0
- package/dist/doctor/support-bundle/support-bundle.registry.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.service.d.ts +63 -0
- package/dist/doctor/support-bundle/support-bundle.service.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.service.js +244 -0
- package/dist/doctor/support-bundle/support-bundle.service.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/otel-core/index.d.ts +9 -0
- package/dist/otel-core/index.d.ts.map +1 -0
- package/dist/otel-core/index.js +58 -0
- package/dist/otel-core/index.js.map +1 -0
- package/dist/otel-core/metrics/gauge-provider.d.ts +44 -0
- package/dist/otel-core/metrics/gauge-provider.d.ts.map +1 -0
- package/dist/otel-core/metrics/gauge-provider.js +37 -0
- package/dist/otel-core/metrics/gauge-provider.js.map +1 -0
- package/dist/otel-core/metrics/labels.d.ts +79 -0
- package/dist/otel-core/metrics/labels.d.ts.map +1 -0
- package/dist/otel-core/metrics/labels.js +135 -0
- package/dist/otel-core/metrics/labels.js.map +1 -0
- package/dist/otel-core/metrics/metric-name.registry.d.ts +130 -0
- package/dist/otel-core/metrics/metric-name.registry.d.ts.map +1 -0
- package/dist/otel-core/metrics/metric-name.registry.js +134 -0
- package/dist/otel-core/metrics/metric-name.registry.js.map +1 -0
- package/dist/otel-core/metrics/metrics-host.service.d.ts +163 -0
- package/dist/otel-core/metrics/metrics-host.service.d.ts.map +1 -0
- package/dist/otel-core/metrics/metrics-host.service.js +344 -0
- package/dist/otel-core/metrics/metrics-host.service.js.map +1 -0
- package/dist/otel-core/metrics/otel-metrics.module.d.ts +54 -0
- package/dist/otel-core/metrics/otel-metrics.module.d.ts.map +1 -0
- package/dist/otel-core/metrics/otel-metrics.module.js +83 -0
- package/dist/otel-core/metrics/otel-metrics.module.js.map +1 -0
- package/dist/otel-core/sdk/index.d.ts +5 -0
- package/dist/otel-core/sdk/index.d.ts.map +1 -0
- package/dist/otel-core/sdk/index.js +27 -0
- package/dist/otel-core/sdk/index.js.map +1 -0
- package/dist/otel-core/sdk/initialize-otel.d.ts +126 -0
- package/dist/otel-core/sdk/initialize-otel.d.ts.map +1 -0
- package/dist/otel-core/sdk/initialize-otel.js +204 -0
- package/dist/otel-core/sdk/initialize-otel.js.map +1 -0
- package/dist/otel-core/sdk/instance-id.d.ts +29 -0
- package/dist/otel-core/sdk/instance-id.d.ts.map +1 -0
- package/dist/otel-core/sdk/instance-id.js +65 -0
- package/dist/otel-core/sdk/instance-id.js.map +1 -0
- package/dist/otel-core/sdk/service-name.d.ts +28 -0
- package/dist/otel-core/sdk/service-name.d.ts.map +1 -0
- package/dist/otel-core/sdk/service-name.js +63 -0
- package/dist/otel-core/sdk/service-name.js.map +1 -0
- package/dist/otel-core/sdk/telemetry-gate.d.ts +116 -0
- package/dist/otel-core/sdk/telemetry-gate.d.ts.map +1 -0
- package/dist/otel-core/sdk/telemetry-gate.js +297 -0
- package/dist/otel-core/sdk/telemetry-gate.js.map +1 -0
- package/dist/otel-core/spans/request-span-attributes.d.ts +58 -0
- package/dist/otel-core/spans/request-span-attributes.d.ts.map +1 -0
- package/dist/otel-core/spans/request-span-attributes.js +155 -0
- package/dist/otel-core/spans/request-span-attributes.js.map +1 -0
- package/dist/otel-core/spans/trace.decorator.d.ts +36 -0
- package/dist/otel-core/spans/trace.decorator.d.ts.map +1 -0
- package/dist/otel-core/spans/trace.decorator.js +74 -0
- package/dist/otel-core/spans/trace.decorator.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-ai-enabled.guard.d.ts +15 -0
- package/dist/telemetry/assistant/telemetry-ai-enabled.guard.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-ai-enabled.guard.js +50 -0
- package/dist/telemetry/assistant/telemetry-ai-enabled.guard.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.controller.d.ts +14 -0
- package/dist/telemetry/assistant/telemetry-assistant.controller.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.controller.js +178 -0
- package/dist/telemetry/assistant/telemetry-assistant.controller.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.metrics.d.ts +147 -0
- package/dist/telemetry/assistant/telemetry-assistant.metrics.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.metrics.js +495 -0
- package/dist/telemetry/assistant/telemetry-assistant.metrics.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.service.d.ts +216 -0
- package/dist/telemetry/assistant/telemetry-assistant.service.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.service.js +1256 -0
- package/dist/telemetry/assistant/telemetry-assistant.service.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.sql.d.ts +69 -0
- package/dist/telemetry/assistant/telemetry-assistant.sql.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.sql.js +471 -0
- package/dist/telemetry/assistant/telemetry-assistant.sql.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.sse.d.ts +15 -0
- package/dist/telemetry/assistant/telemetry-assistant.sse.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.sse.js +68 -0
- package/dist/telemetry/assistant/telemetry-assistant.sse.js.map +1 -0
- package/dist/telemetry/connection/dto/telemetry-connection.dto.d.ts +92 -0
- package/dist/telemetry/connection/dto/telemetry-connection.dto.d.ts.map +1 -0
- package/dist/telemetry/connection/dto/telemetry-connection.dto.js +41 -0
- package/dist/telemetry/connection/dto/telemetry-connection.dto.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection-admin.service.d.ts +45 -0
- package/dist/telemetry/connection/telemetry-connection-admin.service.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection-admin.service.js +303 -0
- package/dist/telemetry/connection/telemetry-connection-admin.service.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection-test.service.d.ts +41 -0
- package/dist/telemetry/connection/telemetry-connection-test.service.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection-test.service.js +187 -0
- package/dist/telemetry/connection/telemetry-connection-test.service.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.controller.d.ts +14 -0
- package/dist/telemetry/connection/telemetry-connection.controller.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.controller.js +192 -0
- package/dist/telemetry/connection/telemetry-connection.controller.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.schema.d.ts +28 -0
- package/dist/telemetry/connection/telemetry-connection.schema.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.schema.js +106 -0
- package/dist/telemetry/connection/telemetry-connection.schema.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.service.d.ts +197 -0
- package/dist/telemetry/connection/telemetry-connection.service.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.service.js +461 -0
- package/dist/telemetry/connection/telemetry-connection.service.js.map +1 -0
- package/dist/telemetry/dashboard/sql-literals.d.ts +19 -0
- package/dist/telemetry/dashboard/sql-literals.d.ts.map +1 -0
- package/dist/telemetry/dashboard/sql-literals.js +75 -0
- package/dist/telemetry/dashboard/sql-literals.js.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.controller.d.ts +14 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.controller.d.ts.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.controller.js +277 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.controller.js.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts +112 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.js +904 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.js.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.sql.d.ts +212 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.sql.d.ts.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.sql.js +486 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.sql.js.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts +235 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js +269 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js.map +1 -0
- package/dist/telemetry/dashboard/verdict-policy.d.ts +51 -0
- package/dist/telemetry/dashboard/verdict-policy.d.ts.map +1 -0
- package/dist/telemetry/dashboard/verdict-policy.js +77 -0
- package/dist/telemetry/dashboard/verdict-policy.js.map +1 -0
- package/dist/telemetry/doctor/egress/greptimedb.egress.contributor.d.ts +21 -0
- package/dist/telemetry/doctor/egress/greptimedb.egress.contributor.d.ts.map +1 -0
- package/dist/telemetry/doctor/egress/greptimedb.egress.contributor.js +59 -0
- package/dist/telemetry/doctor/egress/greptimedb.egress.contributor.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-connection.doctor-check.d.ts +23 -0
- package/dist/telemetry/doctor/telemetry-connection.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-connection.doctor-check.js +69 -0
- package/dist/telemetry/doctor/telemetry-connection.doctor-check.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-export.doctor-check.d.ts +33 -0
- package/dist/telemetry/doctor/telemetry-export.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-export.doctor-check.js +105 -0
- package/dist/telemetry/doctor/telemetry-export.doctor-check.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-freshness.doctor-check.d.ts +38 -0
- package/dist/telemetry/doctor/telemetry-freshness.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-freshness.doctor-check.js +104 -0
- package/dist/telemetry/doctor/telemetry-freshness.doctor-check.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-reachable.doctor-check.d.ts +23 -0
- package/dist/telemetry/doctor/telemetry-reachable.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-reachable.doctor-check.js +65 -0
- package/dist/telemetry/doctor/telemetry-reachable.doctor-check.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-tables.doctor-check.d.ts +23 -0
- package/dist/telemetry/doctor/telemetry-tables.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-tables.doctor-check.js +91 -0
- package/dist/telemetry/doctor/telemetry-tables.doctor-check.js.map +1 -0
- package/dist/telemetry/dto/telemetry-assistant.dto.d.ts +14 -0
- package/dist/telemetry/dto/telemetry-assistant.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-assistant.dto.js +29 -0
- package/dist/telemetry/dto/telemetry-assistant.dto.js.map +1 -0
- package/dist/telemetry/dto/telemetry-config.dto.d.ts +59 -0
- package/dist/telemetry/dto/telemetry-config.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-config.dto.js +18 -0
- package/dist/telemetry/dto/telemetry-config.dto.js.map +1 -0
- package/dist/telemetry/dto/telemetry-dashboard.dto.d.ts +397 -0
- package/dist/telemetry/dto/telemetry-dashboard.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-dashboard.dto.js +118 -0
- package/dist/telemetry/dto/telemetry-dashboard.dto.js.map +1 -0
- package/dist/telemetry/dto/telemetry-query.dto.d.ts +44 -0
- package/dist/telemetry/dto/telemetry-query.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-query.dto.js +42 -0
- package/dist/telemetry/dto/telemetry-query.dto.js.map +1 -0
- package/dist/telemetry/dto/telemetry-status.dto.d.ts +22 -0
- package/dist/telemetry/dto/telemetry-status.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-status.dto.js +12 -0
- package/dist/telemetry/dto/telemetry-status.dto.js.map +1 -0
- package/dist/telemetry/export/parquet-writer.loader.d.ts +13 -0
- package/dist/telemetry/export/parquet-writer.loader.d.ts.map +1 -0
- package/dist/telemetry/export/parquet-writer.loader.js +29 -0
- package/dist/telemetry/export/parquet-writer.loader.js.map +1 -0
- package/dist/telemetry/export/telemetry-export.service.d.ts +39 -0
- package/dist/telemetry/export/telemetry-export.service.d.ts.map +1 -0
- package/dist/telemetry/export/telemetry-export.service.js +185 -0
- package/dist/telemetry/export/telemetry-export.service.js.map +1 -0
- package/dist/telemetry/greptime/greptime-host.d.ts +44 -0
- package/dist/telemetry/greptime/greptime-host.d.ts.map +1 -0
- package/dist/telemetry/greptime/greptime-host.js +114 -0
- package/dist/telemetry/greptime/greptime-host.js.map +1 -0
- package/dist/telemetry/greptime/greptime.client.d.ts +171 -0
- package/dist/telemetry/greptime/greptime.client.d.ts.map +1 -0
- package/dist/telemetry/greptime/greptime.client.js +352 -0
- package/dist/telemetry/greptime/greptime.client.js.map +1 -0
- package/dist/telemetry/greptime/greptime.errors.d.ts +59 -0
- package/dist/telemetry/greptime/greptime.errors.d.ts.map +1 -0
- package/dist/telemetry/greptime/greptime.errors.js +100 -0
- package/dist/telemetry/greptime/greptime.errors.js.map +1 -0
- package/dist/telemetry/handlers/telemetry-retention.handler.d.ts +27 -0
- package/dist/telemetry/handlers/telemetry-retention.handler.d.ts.map +1 -0
- package/dist/telemetry/handlers/telemetry-retention.handler.js +123 -0
- package/dist/telemetry/handlers/telemetry-retention.handler.js.map +1 -0
- package/dist/telemetry/index.d.ts +37 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +97 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/internal/blank-secret.d.ts +3 -0
- package/dist/telemetry/internal/blank-secret.d.ts.map +1 -0
- package/dist/telemetry/internal/blank-secret.js +14 -0
- package/dist/telemetry/internal/blank-secret.js.map +1 -0
- package/dist/telemetry/internal/csv.d.ts +9 -0
- package/dist/telemetry/internal/csv.d.ts.map +1 -0
- package/dist/telemetry/internal/csv.js +23 -0
- package/dist/telemetry/internal/csv.js.map +1 -0
- package/dist/telemetry/internal/sse.d.ts +23 -0
- package/dist/telemetry/internal/sse.d.ts.map +1 -0
- package/dist/telemetry/internal/sse.js +43 -0
- package/dist/telemetry/internal/sse.js.map +1 -0
- package/dist/telemetry/metrics/groups/database.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/database.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/database.metric-group.js +159 -0
- package/dist/telemetry/metrics/groups/database.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/host.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/host.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/host.metric-group.js +146 -0
- package/dist/telemetry/metrics/groups/host.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.js +159 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/pipeline.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/pipeline.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/pipeline.metric-group.js +144 -0
- package/dist/telemetry/metrics/groups/pipeline.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/queue.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/queue.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/queue.metric-group.js +163 -0
- package/dist/telemetry/metrics/groups/queue.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/uptime.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/uptime.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/uptime.metric-group.js +103 -0
- package/dist/telemetry/metrics/groups/uptime.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/metric-catalog.d.ts +324 -0
- package/dist/telemetry/metrics/metric-catalog.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-catalog.helpers.d.ts +30 -0
- package/dist/telemetry/metrics/metric-catalog.helpers.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-catalog.helpers.js +37 -0
- package/dist/telemetry/metrics/metric-catalog.helpers.js.map +1 -0
- package/dist/telemetry/metrics/metric-catalog.js +180 -0
- package/dist/telemetry/metrics/metric-catalog.js.map +1 -0
- package/dist/telemetry/metrics/metric-group-registry.service.d.ts +59 -0
- package/dist/telemetry/metrics/metric-group-registry.service.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-group-registry.service.js +99 -0
- package/dist/telemetry/metrics/metric-group-registry.service.js.map +1 -0
- package/dist/telemetry/metrics/metric-group.d.ts +113 -0
- package/dist/telemetry/metrics/metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-group.js +647 -0
- package/dist/telemetry/metrics/metric-group.js.map +1 -0
- package/dist/telemetry/metrics/metric-group.manifest.d.ts +2 -0
- package/dist/telemetry/metrics/metric-group.manifest.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-group.manifest.js +30 -0
- package/dist/telemetry/metrics/metric-group.manifest.js.map +1 -0
- package/dist/telemetry/metrics/metric-group.registry.d.ts +109 -0
- package/dist/telemetry/metrics/metric-group.registry.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-group.registry.js +181 -0
- package/dist/telemetry/metrics/metric-group.registry.js.map +1 -0
- package/dist/telemetry/metrics/metric-sql.d.ts +98 -0
- package/dist/telemetry/metrics/metric-sql.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-sql.js +259 -0
- package/dist/telemetry/metrics/metric-sql.js.map +1 -0
- package/dist/telemetry/metrics/metric-values.d.ts +19 -0
- package/dist/telemetry/metrics/metric-values.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-values.js +97 -0
- package/dist/telemetry/metrics/metric-values.js.map +1 -0
- package/dist/telemetry/metrics/metric-verdict.d.ts +20 -0
- package/dist/telemetry/metrics/metric-verdict.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-verdict.js +218 -0
- package/dist/telemetry/metrics/metric-verdict.js.map +1 -0
- package/dist/telemetry/ports.d.ts +575 -0
- package/dist/telemetry/ports.d.ts.map +1 -0
- package/dist/telemetry/ports.js +78 -0
- package/dist/telemetry/ports.js.map +1 -0
- package/dist/telemetry/query/sql-guard.d.ts +71 -0
- package/dist/telemetry/query/sql-guard.d.ts.map +1 -0
- package/dist/telemetry/query/sql-guard.js +258 -0
- package/dist/telemetry/query/sql-guard.js.map +1 -0
- package/dist/telemetry/query/telemetry-availability.d.ts +11 -0
- package/dist/telemetry/query/telemetry-availability.d.ts.map +1 -0
- package/dist/telemetry/query/telemetry-availability.js +55 -0
- package/dist/telemetry/query/telemetry-availability.js.map +1 -0
- package/dist/telemetry/query/telemetry-query.errors.d.ts +48 -0
- package/dist/telemetry/query/telemetry-query.errors.d.ts.map +1 -0
- package/dist/telemetry/query/telemetry-query.errors.js +100 -0
- package/dist/telemetry/query/telemetry-query.errors.js.map +1 -0
- package/dist/telemetry/query/telemetry-query.service.d.ts +57 -0
- package/dist/telemetry/query/telemetry-query.service.d.ts.map +1 -0
- package/dist/telemetry/query/telemetry-query.service.js +194 -0
- package/dist/telemetry/query/telemetry-query.service.js.map +1 -0
- package/dist/telemetry/query/telemetry-schema.service.d.ts +36 -0
- package/dist/telemetry/query/telemetry-schema.service.d.ts.map +1 -0
- package/dist/telemetry/query/telemetry-schema.service.js +154 -0
- package/dist/telemetry/query/telemetry-schema.service.js.map +1 -0
- package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts +29 -0
- package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts.map +1 -0
- package/dist/telemetry/stack/dto/telemetry-stack.dto.js +27 -0
- package/dist/telemetry/stack/dto/telemetry-stack.dto.js.map +1 -0
- package/dist/telemetry/stack/stack-agent.client.d.ts +76 -0
- package/dist/telemetry/stack/stack-agent.client.d.ts.map +1 -0
- package/dist/telemetry/stack/stack-agent.client.js +208 -0
- package/dist/telemetry/stack/stack-agent.client.js.map +1 -0
- package/dist/telemetry/stack/telemetry-stack-deploy.handler.d.ts +43 -0
- package/dist/telemetry/stack/telemetry-stack-deploy.handler.d.ts.map +1 -0
- package/dist/telemetry/stack/telemetry-stack-deploy.handler.js +159 -0
- package/dist/telemetry/stack/telemetry-stack-deploy.handler.js.map +1 -0
- package/dist/telemetry/stack/telemetry-stack.controller.d.ts +14 -0
- package/dist/telemetry/stack/telemetry-stack.controller.d.ts.map +1 -0
- package/dist/telemetry/stack/telemetry-stack.controller.js +107 -0
- package/dist/telemetry/stack/telemetry-stack.controller.js.map +1 -0
- package/dist/telemetry/stack/telemetry-stack.service.d.ts +19 -0
- package/dist/telemetry/stack/telemetry-stack.service.d.ts.map +1 -0
- package/dist/telemetry/stack/telemetry-stack.service.js +122 -0
- package/dist/telemetry/stack/telemetry-stack.service.js.map +1 -0
- package/dist/telemetry/tasks/telemetry-retention.task.d.ts +8 -0
- package/dist/telemetry/tasks/telemetry-retention.task.d.ts.map +1 -0
- package/dist/telemetry/tasks/telemetry-retention.task.js +61 -0
- package/dist/telemetry/tasks/telemetry-retention.task.js.map +1 -0
- package/dist/telemetry/telemetry-admin.controller.d.ts +14 -0
- package/dist/telemetry/telemetry-admin.controller.d.ts.map +1 -0
- package/dist/telemetry/telemetry-admin.controller.js +148 -0
- package/dist/telemetry/telemetry-admin.controller.js.map +1 -0
- package/dist/telemetry/telemetry-config.controller.d.ts +14 -0
- package/dist/telemetry/telemetry-config.controller.d.ts.map +1 -0
- package/dist/telemetry/telemetry-config.controller.js +73 -0
- package/dist/telemetry/telemetry-config.controller.js.map +1 -0
- package/dist/telemetry/telemetry-explorer.controller.d.ts +14 -0
- package/dist/telemetry/telemetry-explorer.controller.d.ts.map +1 -0
- package/dist/telemetry/telemetry-explorer.controller.js +193 -0
- package/dist/telemetry/telemetry-explorer.controller.js.map +1 -0
- package/dist/telemetry/telemetry-settings.service.d.ts +85 -0
- package/dist/telemetry/telemetry-settings.service.d.ts.map +1 -0
- package/dist/telemetry/telemetry-settings.service.js +278 -0
- package/dist/telemetry/telemetry-settings.service.js.map +1 -0
- package/dist/telemetry/telemetry-status.service.d.ts +28 -0
- package/dist/telemetry/telemetry-status.service.d.ts.map +1 -0
- package/dist/telemetry/telemetry-status.service.js +185 -0
- package/dist/telemetry/telemetry-status.service.js.map +1 -0
- package/dist/telemetry/telemetry-support-bundle.section.d.ts +163 -0
- package/dist/telemetry/telemetry-support-bundle.section.d.ts.map +1 -0
- package/dist/telemetry/telemetry-support-bundle.section.js +187 -0
- package/dist/telemetry/telemetry-support-bundle.section.js.map +1 -0
- package/dist/telemetry/telemetry.module.d.ts +35 -0
- package/dist/telemetry/telemetry.module.d.ts.map +1 -0
- package/dist/telemetry/telemetry.module.js +210 -0
- package/dist/telemetry/telemetry.module.js.map +1 -0
- package/dist/telemetry/telemetry.options.d.ts +176 -0
- package/dist/telemetry/telemetry.options.d.ts.map +1 -0
- package/dist/telemetry/telemetry.options.js +246 -0
- package/dist/telemetry/telemetry.options.js.map +1 -0
- package/dist/telemetry/telemetry.permissions.d.ts +76 -0
- package/dist/telemetry/telemetry.permissions.d.ts.map +1 -0
- package/dist/telemetry/telemetry.permissions.js +85 -0
- package/dist/telemetry/telemetry.permissions.js.map +1 -0
- package/dist/telemetry/telemetry.settings.d.ts +79 -0
- package/dist/telemetry/telemetry.settings.d.ts.map +1 -0
- package/dist/telemetry/telemetry.settings.js +92 -0
- package/dist/telemetry/telemetry.settings.js.map +1 -0
- package/dist/telemetry/testing/coach-metric-group.fixture.d.ts +17 -0
- package/dist/telemetry/testing/coach-metric-group.fixture.d.ts.map +1 -0
- package/dist/telemetry/testing/coach-metric-group.fixture.js +128 -0
- package/dist/telemetry/testing/coach-metric-group.fixture.js.map +1 -0
- package/dist/telemetry/testing/conformance.d.ts +257 -0
- package/dist/telemetry/testing/conformance.d.ts.map +1 -0
- package/dist/telemetry/testing/conformance.js +626 -0
- package/dist/telemetry/testing/conformance.js.map +1 -0
- package/dist/telemetry/testing/index.d.ts +10 -0
- package/dist/telemetry/testing/index.d.ts.map +1 -0
- package/dist/telemetry/testing/index.js +41 -0
- package/dist/telemetry/testing/index.js.map +1 -0
- package/dist/telemetry/testing/metric-schema.fixture.d.ts +73 -0
- package/dist/telemetry/testing/metric-schema.fixture.d.ts.map +1 -0
- package/dist/telemetry/testing/metric-schema.fixture.js +362 -0
- package/dist/telemetry/testing/metric-schema.fixture.js.map +1 -0
- package/dist/telemetry/testing/stub-ports.d.ts +46 -0
- package/dist/telemetry/testing/stub-ports.d.ts.map +1 -0
- package/dist/telemetry/testing/stub-ports.js +119 -0
- package/dist/telemetry/testing/stub-ports.js.map +1 -0
- package/dist/testing/conformance-suite.d.ts +106 -0
- package/dist/testing/conformance-suite.d.ts.map +1 -0
- package/dist/testing/conformance-suite.js +8 -0
- package/dist/testing/conformance-suite.js.map +1 -0
- package/dist/testing/conformance-suites.d.ts +14 -0
- package/dist/testing/conformance-suites.d.ts.map +1 -0
- package/dist/testing/conformance-suites.js +27 -0
- package/dist/testing/conformance-suites.js.map +1 -0
- package/dist/testing/host/in-memory-audit-sink.d.ts +23 -0
- package/dist/testing/host/in-memory-audit-sink.d.ts.map +1 -0
- package/dist/testing/host/in-memory-audit-sink.js +30 -0
- package/dist/testing/host/in-memory-audit-sink.js.map +1 -0
- package/dist/testing/host/in-memory-system-settings-store.d.ts +31 -0
- package/dist/testing/host/in-memory-system-settings-store.d.ts.map +1 -0
- package/dist/testing/host/in-memory-system-settings-store.js +54 -0
- package/dist/testing/host/in-memory-system-settings-store.js.map +1 -0
- package/dist/testing/host/index.d.ts +4 -0
- package/dist/testing/host/index.d.ts.map +1 -0
- package/dist/testing/host/index.js +13 -0
- package/dist/testing/host/index.js.map +1 -0
- package/dist/testing/host/test-platform-host.d.ts +35 -0
- package/dist/testing/host/test-platform-host.d.ts.map +1 -0
- package/dist/testing/host/test-platform-host.js +81 -0
- package/dist/testing/host/test-platform-host.js.map +1 -0
- package/dist/testing/index.d.ts +12 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +32 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/prisma-schema.d.ts +99 -0
- package/dist/testing/prisma-schema.d.ts.map +1 -0
- package/dist/testing/prisma-schema.js +175 -0
- package/dist/testing/prisma-schema.js.map +1 -0
- package/dist/testing/run-platform-conformance.d.ts +70 -0
- package/dist/testing/run-platform-conformance.d.ts.map +1 -0
- package/dist/testing/run-platform-conformance.js +77 -0
- package/dist/testing/run-platform-conformance.js.map +1 -0
- package/dist/testing/suites/cron-enqueue-only.d.ts +46 -0
- package/dist/testing/suites/cron-enqueue-only.d.ts.map +1 -0
- package/dist/testing/suites/cron-enqueue-only.js +177 -0
- package/dist/testing/suites/cron-enqueue-only.js.map +1 -0
- package/dist/testing/suites/user-owned-data.d.ts +86 -0
- package/dist/testing/suites/user-owned-data.d.ts.map +1 -0
- package/dist/testing/suites/user-owned-data.js +329 -0
- package/dist/testing/suites/user-owned-data.js.map +1 -0
- package/package.json +129 -4
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// The telemetry slice's conformance suite (PP-4.6)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// "Conformance suites travel with packages" (docs/specs/platform-packages.md):
|
|
7
|
+
// the slice's invariants used to be enforced by tests that live in the
|
|
8
|
+
// platform repository, so an app that consumed the package stopped being
|
|
9
|
+
// checked. This suite is those invariants as a registered
|
|
10
|
+
// `ConformanceSuite`, run in every app through `runPlatformConformance()`:
|
|
11
|
+
//
|
|
12
|
+
// 1 metric groups every registered group is well formed, and computes
|
|
13
|
+
// against an empty schema with everything `skipped`
|
|
14
|
+
// 2 route permissions every route declares exactly its permissions
|
|
15
|
+
// 3 doctor read-only no telemetry Doctor check can write, enqueue or audit
|
|
16
|
+
// 4 no secrets the connection and config responses never carry a
|
|
17
|
+
// stored password
|
|
18
|
+
// 5 queue rule the app's cron scan covers the slice's cron
|
|
19
|
+
// 6 boot without store the module boots with no GreptimeDB and every
|
|
20
|
+
// dashboard route answers its documented response
|
|
21
|
+
//
|
|
22
|
+
// EVERYTHING IS DISCOVERED, nothing is a hand-kept list of routes, groups or
|
|
23
|
+
// checks: groups from `metricGroupRegistry`, routes from the Nest metadata of
|
|
24
|
+
// the controllers `TelemetryModule.forRoot` builds, Doctor checks from the
|
|
25
|
+
// providers that inject the `DoctorCheckRegistry`. The expectations below are
|
|
26
|
+
// rules (a permission per route SHAPE) so a new route that matches no rule is
|
|
27
|
+
// itself a finding.
|
|
28
|
+
//
|
|
29
|
+
// Check 7 (web/API permission parity) runs in the web test suite
|
|
30
|
+
// (`apps/web/src/__tests__/config/telemetryParity.test.ts`) and check 8 (infra
|
|
31
|
+
// drift) is `platform-infra sync --check` in CI.
|
|
32
|
+
//
|
|
33
|
+
// Each check is also an exported function over its input, so the package proves
|
|
34
|
+
// it FAILS on a deliberately broken fixture (`test/telemetry/conformance.spec.ts`).
|
|
35
|
+
// =============================================================================
|
|
36
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
37
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
38
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
39
|
+
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;
|
|
40
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.telemetryConformanceSuite = exports.CONFORMANCE_SECRETS = exports.bootStubApp = exports.TELEMETRY_CRON_FILE = void 0;
|
|
44
|
+
exports.checkMetricGroups = checkMetricGroups;
|
|
45
|
+
exports.checkMetricGroupsOnEmptySchema = checkMetricGroupsOnEmptySchema;
|
|
46
|
+
exports.discoverRoutes = discoverRoutes;
|
|
47
|
+
exports.checkRoutePermissions = checkRoutePermissions;
|
|
48
|
+
exports.discoverDoctorChecks = discoverDoctorChecks;
|
|
49
|
+
exports.checkDoctorReadOnly = checkDoctorReadOnly;
|
|
50
|
+
exports.checkCronCoverage = checkCronCoverage;
|
|
51
|
+
exports.checkNoSecretsInResponses = checkNoSecretsInResponses;
|
|
52
|
+
exports.checkBootsWithoutTelemetry = checkBootsWithoutTelemetry;
|
|
53
|
+
const common_1 = require("@nestjs/common");
|
|
54
|
+
const constants_1 = require("@nestjs/common/constants");
|
|
55
|
+
const config_1 = require("@nestjs/config");
|
|
56
|
+
const core_1 = require("@nestjs/core");
|
|
57
|
+
const telemetry_1 = require("@marinoscar/platform-contract/telemetry");
|
|
58
|
+
const index_1 = require("../../doctor/index");
|
|
59
|
+
const index_2 = require("../../testing/index");
|
|
60
|
+
const telemetry_ai_enabled_guard_1 = require("../assistant/telemetry-ai-enabled.guard");
|
|
61
|
+
const telemetry_connection_test_service_1 = require("../connection/telemetry-connection-test.service");
|
|
62
|
+
const telemetry_dashboard_service_1 = require("../dashboard/telemetry-dashboard.service");
|
|
63
|
+
const ports_1 = require("../ports");
|
|
64
|
+
const telemetry_query_errors_1 = require("../query/telemetry-query.errors");
|
|
65
|
+
const telemetry_permissions_1 = require("../telemetry.permissions");
|
|
66
|
+
const telemetry_module_1 = require("../telemetry.module");
|
|
67
|
+
const metric_group_1 = require("../metrics/metric-group");
|
|
68
|
+
const metric_catalog_helpers_1 = require("../metrics/metric-catalog.helpers");
|
|
69
|
+
const metric_catalog_helpers_2 = require("../metrics/metric-catalog.helpers");
|
|
70
|
+
const metric_catalog_1 = require("../metrics/metric-catalog");
|
|
71
|
+
const metric_group_registry_1 = require("../metrics/metric-group.registry");
|
|
72
|
+
const stub_ports_1 = require("./stub-ports");
|
|
73
|
+
const FILE_GROUPS = 'metric-groups';
|
|
74
|
+
const FILE_ROUTES = 'routes';
|
|
75
|
+
const FILE_DOCTOR = 'doctor';
|
|
76
|
+
const FILE_CRON = 'cron';
|
|
77
|
+
const FILE_SECRETS = 'no-secrets';
|
|
78
|
+
const FILE_BOOT = 'boot';
|
|
79
|
+
const finding = (file, message) => ({ file, message });
|
|
80
|
+
const lines = (findings) => findings.map((f) => `${f.file}: ${f.message}`);
|
|
81
|
+
// ---- check 1: metric groups ---------------------------------------------------------
|
|
82
|
+
/**
|
|
83
|
+
* Check 1, static half: every group has a unique id matching
|
|
84
|
+
* {@link METRIC_GROUP_ID_PATTERN} and a non-empty label; family, ratio and table
|
|
85
|
+
* keys are unique across groups; every unit is in `METRIC_UNITS`; every filter
|
|
86
|
+
* key is a `METRIC_FILTER_COLUMNS` key; every entry names the group that holds it.
|
|
87
|
+
*
|
|
88
|
+
* @param groups - the groups to check.
|
|
89
|
+
* @returns the violations; empty means conformant.
|
|
90
|
+
*
|
|
91
|
+
* @stability experimental
|
|
92
|
+
*/
|
|
93
|
+
function checkMetricGroups(groups) {
|
|
94
|
+
const out = [];
|
|
95
|
+
const units = new Set(metric_catalog_helpers_1.METRIC_UNITS);
|
|
96
|
+
const filters = new Set(Object.keys(metric_catalog_helpers_2.METRIC_FILTER_COLUMNS));
|
|
97
|
+
const ids = new Map();
|
|
98
|
+
const keys = new Map();
|
|
99
|
+
for (const group of groups) {
|
|
100
|
+
const where = `group "${group.id}"`;
|
|
101
|
+
ids.set(group.id, (ids.get(group.id) ?? 0) + 1);
|
|
102
|
+
if (typeof group.id !== 'string' || !metric_group_registry_1.METRIC_GROUP_ID_PATTERN.test(group.id)) {
|
|
103
|
+
out.push(finding(FILE_GROUPS, `${where}: id must match ${metric_group_registry_1.METRIC_GROUP_ID_PATTERN}`));
|
|
104
|
+
}
|
|
105
|
+
if (typeof group.label !== 'string' || group.label.trim() === '')
|
|
106
|
+
out.push(finding(FILE_GROUPS, `${where}: label is empty`));
|
|
107
|
+
const entries = [
|
|
108
|
+
...group.families.map((f) => ({ kind: 'family', key: f.key, group: f.group, units: [f.unit], filters: f.filters })),
|
|
109
|
+
...(group.ratios ?? []).map((r) => ({ kind: 'ratio', key: r.key, group: r.group, units: [r.unit], filters: [] })),
|
|
110
|
+
...(group.tables ?? []).map((t) => ({
|
|
111
|
+
kind: 'table',
|
|
112
|
+
key: t.key,
|
|
113
|
+
group: t.group,
|
|
114
|
+
units: [...t.parts.map((p) => p.unit), ...(t.derived ?? []).map((d) => d.unit)],
|
|
115
|
+
filters: t.filters,
|
|
116
|
+
})),
|
|
117
|
+
];
|
|
118
|
+
for (const entry of entries) {
|
|
119
|
+
const name = `${where}: ${entry.kind} "${entry.key}"`;
|
|
120
|
+
const owner = keys.get(entry.key);
|
|
121
|
+
if (owner !== undefined)
|
|
122
|
+
out.push(finding(FILE_GROUPS, `${name} key is already used by group "${owner}"; keys are unique across groups`));
|
|
123
|
+
keys.set(entry.key, group.id);
|
|
124
|
+
if (entry.group !== group.id)
|
|
125
|
+
out.push(finding(FILE_GROUPS, `${name} declares group "${entry.group}"`));
|
|
126
|
+
for (const unit of entry.units) {
|
|
127
|
+
if (!units.has(unit))
|
|
128
|
+
out.push(finding(FILE_GROUPS, `${name} has unit "${unit}"; expected one of METRIC_UNITS`));
|
|
129
|
+
}
|
|
130
|
+
for (const filter of entry.filters) {
|
|
131
|
+
if (!filters.has(filter))
|
|
132
|
+
out.push(finding(FILE_GROUPS, `${name} has filter "${filter}"; expected one of ${[...filters].join(', ')}`));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
for (const [id, count] of ids) {
|
|
137
|
+
if (count > 1)
|
|
138
|
+
out.push(finding(FILE_GROUPS, `group id "${id}" is declared ${count} times`));
|
|
139
|
+
}
|
|
140
|
+
return out;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check 1, dynamic half: every group computes against an EMPTY schema (the
|
|
144
|
+
* store has no metric table) without throwing, reporting everything in
|
|
145
|
+
* `skipped` and nothing as a tile, series or table. A group that errors, or one
|
|
146
|
+
* that renders a number out of nothing, would break the dashboard of a fresh stack.
|
|
147
|
+
*
|
|
148
|
+
* @param groups - the groups; each must be registered in `metricGroupRegistry` (the computation reads it).
|
|
149
|
+
* @param compute - what runs one group; default `computeMetricGroup` with an empty schema. A test passes a broken one.
|
|
150
|
+
* @returns the violations; empty means conformant.
|
|
151
|
+
*
|
|
152
|
+
* @stability experimental
|
|
153
|
+
*/
|
|
154
|
+
async function checkMetricGroupsOnEmptySchema(groups, compute = (id) => (0, metric_group_1.computeMetricGroup)({
|
|
155
|
+
group: id,
|
|
156
|
+
window: { from: new Date(0), to: new Date(3_600_000), previousFrom: new Date(-3_600_000), bucketSeconds: 60 },
|
|
157
|
+
filters: {},
|
|
158
|
+
tables: (0, metric_catalog_1.metricTablesOf)({ tables: [] }),
|
|
159
|
+
runner: { maybe: async () => null },
|
|
160
|
+
now: new Date(3_600_000),
|
|
161
|
+
})) {
|
|
162
|
+
const out = [];
|
|
163
|
+
for (const group of groups) {
|
|
164
|
+
const where = `group "${group.id}"`;
|
|
165
|
+
let result;
|
|
166
|
+
try {
|
|
167
|
+
result = await compute(group.id);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
out.push(finding(FILE_GROUPS, `${where}: computing against an empty schema threw: ${error.message}`));
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (result.available)
|
|
174
|
+
out.push(finding(FILE_GROUPS, `${where}: reports available with no metric table in the store`));
|
|
175
|
+
if (result.tiles.length + result.series.length + result.tables.length > 0) {
|
|
176
|
+
out.push(finding(FILE_GROUPS, `${where}: renders tiles, series or tables with no metric table in the store`));
|
|
177
|
+
}
|
|
178
|
+
const skipped = new Set(result.skipped);
|
|
179
|
+
const keys = [...group.families.map((f) => f.key), ...(group.ratios ?? []).map((r) => r.key), ...(group.tables ?? []).map((t) => t.key)];
|
|
180
|
+
for (const key of keys) {
|
|
181
|
+
if (!skipped.has(key))
|
|
182
|
+
out.push(finding(FILE_GROUPS, `${where}: "${key}" is not reported in skipped with no metric table in the store`));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return out;
|
|
186
|
+
}
|
|
187
|
+
const trimSlashes = (value) => value.replace(/^\/+|\/+$/g, '');
|
|
188
|
+
/**
|
|
189
|
+
* Every route of `controllers`, from `@Controller`/`@Get`/... metadata and the
|
|
190
|
+
* permissions recorded by the package's test host (`createTestPlatformHost`).
|
|
191
|
+
*
|
|
192
|
+
* @param controllers - controller classes, e.g. `TelemetryModule.forRoot(...).controllers`.
|
|
193
|
+
* @returns the routes, in declaration order.
|
|
194
|
+
*
|
|
195
|
+
* @stability experimental
|
|
196
|
+
*/
|
|
197
|
+
function discoverRoutes(controllers) {
|
|
198
|
+
const routes = [];
|
|
199
|
+
for (const controller of controllers) {
|
|
200
|
+
const prefix = trimSlashes(String(Reflect.getMetadata(constants_1.PATH_METADATA, controller) ?? ''));
|
|
201
|
+
const controllerGuards = Reflect.getMetadata(constants_1.GUARDS_METADATA, controller) ?? [];
|
|
202
|
+
for (const name of Object.getOwnPropertyNames(controller.prototype)) {
|
|
203
|
+
const handler = controller.prototype[name];
|
|
204
|
+
if (typeof handler !== 'function' || !Reflect.hasMetadata(constants_1.METHOD_METADATA, handler))
|
|
205
|
+
continue;
|
|
206
|
+
const own = trimSlashes(String(Reflect.getMetadata(constants_1.PATH_METADATA, handler) ?? ''));
|
|
207
|
+
routes.push({
|
|
208
|
+
method: common_1.RequestMethod[Reflect.getMetadata(constants_1.METHOD_METADATA, handler)] ?? 'UNKNOWN',
|
|
209
|
+
path: [prefix, own].filter(Boolean).join('/'),
|
|
210
|
+
permissions: Reflect.getMetadata(index_2.TEST_REQUIRED_PERMISSIONS_KEY, handler),
|
|
211
|
+
guards: [...controllerGuards, ...(Reflect.getMetadata(constants_1.GUARDS_METADATA, handler) ?? [])],
|
|
212
|
+
handler,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return routes;
|
|
217
|
+
}
|
|
218
|
+
const { READ, WRITE, QUERY } = telemetry_permissions_1.TELEMETRY_PERMISSIONS;
|
|
219
|
+
const { AI_USE, SYSTEM_SETTINGS_READ, SYSTEM_SETTINGS_WRITE } = telemetry_permissions_1.TELEMETRY_HOST_PERMISSIONS;
|
|
220
|
+
/**
|
|
221
|
+
* The permissions each route SHAPE must declare. A rule per shape, not per
|
|
222
|
+
* path: the routes are discovered, and one that matches no rule is a finding.
|
|
223
|
+
*/
|
|
224
|
+
const ROUTE_RULES = [
|
|
225
|
+
{ shape: /^(GET) admin\/telemetry\/(config|status)$/, permissions: [READ] },
|
|
226
|
+
{ shape: /^PUT admin\/telemetry\/config$/, permissions: [WRITE] },
|
|
227
|
+
{ shape: /^(POST) admin\/telemetry\/(query|export)$/, permissions: [QUERY] },
|
|
228
|
+
{ shape: /^GET admin\/telemetry\/schema$/, permissions: [QUERY] },
|
|
229
|
+
{ shape: /^GET admin\/telemetry\/dashboard\/[a-z-]+$/, permissions: [QUERY] },
|
|
230
|
+
{ shape: /^GET admin\/telemetry\/connection$/, permissions: [READ] },
|
|
231
|
+
{ shape: /^(PUT|DELETE) admin\/telemetry\/connection$/, permissions: [WRITE] },
|
|
232
|
+
{ shape: /^POST admin\/telemetry\/connection\/test$/, permissions: [WRITE] },
|
|
233
|
+
{ shape: /^GET admin\/telemetry\/stack$/, permissions: [SYSTEM_SETTINGS_READ] },
|
|
234
|
+
{ shape: /^POST admin\/telemetry\/stack\/deploy$/, permissions: [SYSTEM_SETTINGS_WRITE] },
|
|
235
|
+
{ shape: /^POST admin\/telemetry\/assistant\/stream$/, permissions: [QUERY, AI_USE], guard: telemetry_ai_enabled_guard_1.TelemetryAiEnabledGuard },
|
|
236
|
+
// `@Auth()` only: any signed-in user may ask whether telemetry is on.
|
|
237
|
+
{ shape: /^GET telemetry\/config$/, permissions: [] },
|
|
238
|
+
];
|
|
239
|
+
/** Every permission string the slice may enforce: exactly these, never a variant. */
|
|
240
|
+
const KNOWN_PERMISSIONS = new Set([...Object.values(telemetry_permissions_1.TELEMETRY_PERMISSIONS), ...Object.values(telemetry_permissions_1.TELEMETRY_HOST_PERMISSIONS)]);
|
|
241
|
+
/**
|
|
242
|
+
* Check 2: every route under `admin/telemetry` and `telemetry` declares exactly
|
|
243
|
+
* the permissions its shape requires (the table in the slice README, heading
|
|
244
|
+
* "Permissions and settings"), every permission is one of the slice's exact
|
|
245
|
+
* strings, no route is public, the assistant route sits behind the AI-enabled
|
|
246
|
+
* guard, and every rule matches at least one route (a renamed route fails here
|
|
247
|
+
* rather than silently dropping out of the check).
|
|
248
|
+
*
|
|
249
|
+
* @param routes - the routes, from {@link discoverRoutes}.
|
|
250
|
+
* @returns the violations; empty means conformant.
|
|
251
|
+
*
|
|
252
|
+
* @stability experimental
|
|
253
|
+
*/
|
|
254
|
+
function checkRoutePermissions(routes) {
|
|
255
|
+
const out = [];
|
|
256
|
+
const matched = new Set();
|
|
257
|
+
for (const route of routes) {
|
|
258
|
+
const name = `${route.method} /${route.path}`;
|
|
259
|
+
if (!/^(admin\/)?telemetry(\/|$)/.test(route.path)) {
|
|
260
|
+
out.push(finding(FILE_ROUTES, `${name}: a route outside admin/telemetry and telemetry in the telemetry module`));
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
if (route.permissions === undefined) {
|
|
264
|
+
out.push(finding(FILE_ROUTES, `${name}: declares no access decorator, so it is public`));
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
for (const permission of route.permissions) {
|
|
268
|
+
if (!KNOWN_PERMISSIONS.has(permission))
|
|
269
|
+
out.push(finding(FILE_ROUTES, `${name}: enforces "${permission}", which is not a telemetry permission string`));
|
|
270
|
+
}
|
|
271
|
+
const rule = ROUTE_RULES.find((candidate) => candidate.shape.test(`${route.method} ${route.path}`));
|
|
272
|
+
if (!rule) {
|
|
273
|
+
out.push(finding(FILE_ROUTES, `${name}: matches no permission rule; add the route's shape to the conformance suite`));
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
matched.add(rule.shape);
|
|
277
|
+
const actual = [...route.permissions].sort().join(', ');
|
|
278
|
+
const expected = [...rule.permissions].sort().join(', ');
|
|
279
|
+
if (actual !== expected) {
|
|
280
|
+
out.push(finding(FILE_ROUTES, `${name}: declares [${actual}] but must declare [${expected}]`));
|
|
281
|
+
}
|
|
282
|
+
if (rule.guard && !route.guards.includes(rule.guard)) {
|
|
283
|
+
out.push(finding(FILE_ROUTES, `${name}: is not behind ${rule.guard.name}`));
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
for (const rule of ROUTE_RULES) {
|
|
287
|
+
if (!matched.has(rule.shape))
|
|
288
|
+
out.push(finding(FILE_ROUTES, `no route matches ${rule.shape}: it was renamed or removed`));
|
|
289
|
+
}
|
|
290
|
+
return out;
|
|
291
|
+
}
|
|
292
|
+
// ---- check 3: the Doctor stays read-only --------------------------------------------
|
|
293
|
+
/** Constructor dependencies a Doctor check must never have (classes, and tokens injected with `@Inject`). */
|
|
294
|
+
const FORBIDDEN_DOCTOR_DEPENDENCIES = [
|
|
295
|
+
{ dependency: telemetry_connection_test_service_1.TelemetryConnectionTestService, why: 'the connection test audits every attempt, and a Doctor run must not write' },
|
|
296
|
+
{ dependency: telemetry_dashboard_service_1.TelemetryDashboardService, why: 'its reads are audited' },
|
|
297
|
+
{ dependency: ports_1.TELEMETRY_AUDIT_SINK, why: 'a check records no audit row' },
|
|
298
|
+
{ dependency: ports_1.TELEMETRY_JOBS, why: 'a check enqueues no job' },
|
|
299
|
+
];
|
|
300
|
+
const nameOf = (dependency) => typeof dependency === 'function' ? dependency.name : String(dependency?.description ?? dependency);
|
|
301
|
+
/**
|
|
302
|
+
* The providers that register themselves as Doctor checks: classes with a
|
|
303
|
+
* `run` method whose constructor injects the `DoctorCheckRegistry`.
|
|
304
|
+
*
|
|
305
|
+
* @param providers - a module's provider list, e.g. `TelemetryModule.forRoot(...).providers`.
|
|
306
|
+
* @returns the check classes.
|
|
307
|
+
*
|
|
308
|
+
* @stability experimental
|
|
309
|
+
*/
|
|
310
|
+
function discoverDoctorChecks(providers) {
|
|
311
|
+
return providers.filter((provider) => {
|
|
312
|
+
if (typeof provider !== 'function')
|
|
313
|
+
return false;
|
|
314
|
+
const params = Reflect.getMetadata('design:paramtypes', provider) ?? [];
|
|
315
|
+
return typeof provider.prototype?.run === 'function' && params.includes(index_1.DoctorCheckRegistry);
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Check 3: no Doctor check of the slice injects the audited connection test,
|
|
320
|
+
* the audited dashboard service, the audit sink or the jobs port. The check
|
|
321
|
+
* reads the constructor's `design:paramtypes` and `@Inject` tokens
|
|
322
|
+
* (`self:paramtypes`).
|
|
323
|
+
*
|
|
324
|
+
* @param checks - the check classes, from {@link discoverDoctorChecks}.
|
|
325
|
+
* @returns the violations; empty means conformant.
|
|
326
|
+
*
|
|
327
|
+
* @stability experimental
|
|
328
|
+
*/
|
|
329
|
+
function checkDoctorReadOnly(checks) {
|
|
330
|
+
const out = [];
|
|
331
|
+
for (const check of checks) {
|
|
332
|
+
const types = Reflect.getMetadata('design:paramtypes', check) ?? [];
|
|
333
|
+
const tokens = (Reflect.getMetadata('self:paramtypes', check) ?? []).map((entry) => entry.param);
|
|
334
|
+
for (const { dependency, why } of FORBIDDEN_DOCTOR_DEPENDENCIES) {
|
|
335
|
+
if (types.includes(dependency) || tokens.includes(dependency)) {
|
|
336
|
+
out.push(finding(FILE_DOCTOR, `${check.name} injects ${nameOf(dependency)}: ${why}`));
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return out;
|
|
341
|
+
}
|
|
342
|
+
// ---- check 5: the queue rule ---------------------------------------------------------
|
|
343
|
+
/**
|
|
344
|
+
* The slice's cron, relative to its source root.
|
|
345
|
+
*
|
|
346
|
+
* @stability experimental
|
|
347
|
+
*/
|
|
348
|
+
exports.TELEMETRY_CRON_FILE = 'tasks/telemetry-retention.task.ts';
|
|
349
|
+
/**
|
|
350
|
+
* Check 5: the app's `cron-enqueue-only` scan roots hold the slice's retention
|
|
351
|
+
* cron, so the queue rule ("a `@Cron` only enqueues") is enforced on it. Runs
|
|
352
|
+
* the cron suite's own scan over `roots` and looks for the file.
|
|
353
|
+
*
|
|
354
|
+
* @param roots - the roots the app's cron suite scans.
|
|
355
|
+
* @returns the violations; empty means conformant.
|
|
356
|
+
*
|
|
357
|
+
* @stability experimental
|
|
358
|
+
*/
|
|
359
|
+
function checkCronCoverage(roots) {
|
|
360
|
+
const report = index_2.cronEnqueueOnlySuite.check({ sourceRoots: roots }, { exempt: [], minCronFiles: 1 });
|
|
361
|
+
const covered = report.scannedFiles.cronFiles?.some((file) => file === exports.TELEMETRY_CRON_FILE || file.endsWith(`/${exports.TELEMETRY_CRON_FILE}`));
|
|
362
|
+
return covered
|
|
363
|
+
? []
|
|
364
|
+
: [
|
|
365
|
+
finding(FILE_CRON, `the cron scan roots do not contain ${exports.TELEMETRY_CRON_FILE}: add the slice's source root (packages/platform-api/src/telemetry) to the cron-enqueue-only sourceRoots`),
|
|
366
|
+
];
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Boots `TelemetryModule.forRoot` with the stub ports, the package's test host,
|
|
370
|
+
* the Doctor module and an `OTEL_ENABLED=false` configuration. Nothing listens
|
|
371
|
+
* on a port; requests go through Fastify's `inject`.
|
|
372
|
+
*
|
|
373
|
+
* @param input - what the stubs and the configuration hold.
|
|
374
|
+
* @returns the initialised application; the caller closes it.
|
|
375
|
+
*
|
|
376
|
+
* @stability experimental
|
|
377
|
+
*/
|
|
378
|
+
const bootStubApp = async (input) => {
|
|
379
|
+
const host = (0, index_2.createTestPlatformHost)();
|
|
380
|
+
const { module } = (0, stub_ports_1.createStubTelemetryPorts)(input.ports);
|
|
381
|
+
// Loaded here, not at the top, so importing this entry needs no Fastify adapter until a check boots the module.
|
|
382
|
+
const { FastifyAdapter } = require('@nestjs/platform-fastify');
|
|
383
|
+
let ConformanceAppModule = class ConformanceAppModule {
|
|
384
|
+
};
|
|
385
|
+
ConformanceAppModule = __decorate([
|
|
386
|
+
(0, common_1.Module)({
|
|
387
|
+
imports: [
|
|
388
|
+
config_1.ConfigModule.forRoot({
|
|
389
|
+
isGlobal: true,
|
|
390
|
+
ignoreEnvFile: true,
|
|
391
|
+
load: [() => ({ otel: { enabled: false }, ...(input.greptime ? { greptime: input.greptime } : {}) })],
|
|
392
|
+
}),
|
|
393
|
+
index_1.DoctorModule.forRoot({ host, supportBundle: false }),
|
|
394
|
+
telemetry_module_1.TelemetryModule.forRoot({ host, imports: [module] }),
|
|
395
|
+
],
|
|
396
|
+
})
|
|
397
|
+
], ConformanceAppModule);
|
|
398
|
+
const app = await core_1.NestFactory.create(ConformanceAppModule, new FastifyAdapter(), { logger: false });
|
|
399
|
+
await app.init();
|
|
400
|
+
await app.getHttpAdapter().getInstance().ready();
|
|
401
|
+
return app;
|
|
402
|
+
};
|
|
403
|
+
exports.bootStubApp = bootStubApp;
|
|
404
|
+
/**
|
|
405
|
+
* The passwords check 4 seeds. Distinctive on purpose: a substring match can
|
|
406
|
+
* only be the secret.
|
|
407
|
+
*
|
|
408
|
+
* @stability experimental
|
|
409
|
+
*/
|
|
410
|
+
exports.CONFORMANCE_SECRETS = {
|
|
411
|
+
storedReader: 'conformance-stored-reader-secret-7f3a',
|
|
412
|
+
storedAdmin: 'conformance-stored-admin-secret-91c2',
|
|
413
|
+
environmentReader: 'conformance-env-reader-secret-5d08',
|
|
414
|
+
environmentAdmin: 'conformance-env-admin-secret-b64e',
|
|
415
|
+
};
|
|
416
|
+
/**
|
|
417
|
+
* Check 4: `GET /admin/telemetry/connection` and `GET /admin/telemetry/config`
|
|
418
|
+
* never carry a stored password. Boots the module with known passwords in the
|
|
419
|
+
* credential store (and in the `greptime` deployment default), a stored custom
|
|
420
|
+
* connection row, and asserts none of the four appears in the serialised
|
|
421
|
+
* responses. `TELEMETRY_CONNECTION_CARRIES_NO_SECRET` (the contract's
|
|
422
|
+
* compile-time proof that the connection type has no field able to hold one)
|
|
423
|
+
* must still be `true`.
|
|
424
|
+
*
|
|
425
|
+
* @param createApp - builds the app; default {@link bootStubApp}. A test passes a leaky one.
|
|
426
|
+
* @returns the violations; empty means conformant.
|
|
427
|
+
*
|
|
428
|
+
* @stability experimental
|
|
429
|
+
*/
|
|
430
|
+
async function checkNoSecretsInResponses(createApp = exports.bootStubApp) {
|
|
431
|
+
const out = [];
|
|
432
|
+
if (telemetry_1.TELEMETRY_CONNECTION_CARRIES_NO_SECRET !== true) {
|
|
433
|
+
out.push(finding(FILE_SECRETS, 'TELEMETRY_CONNECTION_CARRIES_NO_SECRET is not true: the connection type can hold a secret'));
|
|
434
|
+
}
|
|
435
|
+
const app = await createApp({
|
|
436
|
+
ports: {
|
|
437
|
+
credentials: { reader: exports.CONFORMANCE_SECRETS.storedReader, admin: exports.CONFORMANCE_SECRETS.storedAdmin },
|
|
438
|
+
rows: {
|
|
439
|
+
telemetry_connection: { host: 'db.conformance.test', pgPort: 4003, database: 'public', readerUser: 'reader', adminUser: 'admin' },
|
|
440
|
+
},
|
|
441
|
+
},
|
|
442
|
+
greptime: {
|
|
443
|
+
host: 'greptimedb',
|
|
444
|
+
pgPort: 4003,
|
|
445
|
+
database: 'public',
|
|
446
|
+
readerUser: 'reader',
|
|
447
|
+
readerPassword: exports.CONFORMANCE_SECRETS.environmentReader,
|
|
448
|
+
adminUser: 'admin',
|
|
449
|
+
adminPassword: exports.CONFORMANCE_SECRETS.environmentAdmin,
|
|
450
|
+
available: true,
|
|
451
|
+
},
|
|
452
|
+
});
|
|
453
|
+
try {
|
|
454
|
+
for (const url of ['/admin/telemetry/connection', '/admin/telemetry/config']) {
|
|
455
|
+
const response = await app.inject({ method: 'GET', url, headers: { [index_2.TEST_PERMISSIONS_HEADER]: telemetry_permissions_1.TELEMETRY_PERMISSIONS.READ } });
|
|
456
|
+
if (response.statusCode !== 200) {
|
|
457
|
+
out.push(finding(FILE_SECRETS, `GET ${url} answered ${response.statusCode}, not 200, so it proves nothing`));
|
|
458
|
+
continue;
|
|
459
|
+
}
|
|
460
|
+
for (const [name, secret] of Object.entries(exports.CONFORMANCE_SECRETS)) {
|
|
461
|
+
if (response.body.includes(secret))
|
|
462
|
+
out.push(finding(FILE_SECRETS, `GET ${url} carries the ${name} password`));
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
finally {
|
|
467
|
+
await app.close();
|
|
468
|
+
}
|
|
469
|
+
return out;
|
|
470
|
+
}
|
|
471
|
+
/** The query parameters a route requires, with a valid value each, from its `@ApiQuery` metadata. */
|
|
472
|
+
function requiredQuery(handler) {
|
|
473
|
+
const parameters = (Reflect.getMetadata('swagger/apiParameters', handler) ?? []);
|
|
474
|
+
const query = {};
|
|
475
|
+
for (const parameter of parameters) {
|
|
476
|
+
if (parameter.in !== 'query' || !parameter.required)
|
|
477
|
+
continue;
|
|
478
|
+
query[parameter.name] = String((parameter.enum ?? parameter.schema?.enum ?? ['x'])[0]);
|
|
479
|
+
}
|
|
480
|
+
return query;
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Check 6: `TelemetryModule.forRoot` boots with `OTEL_ENABLED=false`, no
|
|
484
|
+
* GreptimeDB and an empty configuration, and every dashboard route answers
|
|
485
|
+
* with its documented response: `200` (a route that reads only memory) or `503`
|
|
486
|
+
* with `details.reason` `TELEMETRY_NOT_CONFIGURED`. Never a `500`.
|
|
487
|
+
*
|
|
488
|
+
* @param createApp - builds the app; default {@link bootStubApp}.
|
|
489
|
+
* @returns the violations; empty means conformant.
|
|
490
|
+
*
|
|
491
|
+
* @stability experimental
|
|
492
|
+
*/
|
|
493
|
+
async function checkBootsWithoutTelemetry(createApp = exports.bootStubApp) {
|
|
494
|
+
const out = [];
|
|
495
|
+
let app;
|
|
496
|
+
try {
|
|
497
|
+
app = await createApp({});
|
|
498
|
+
}
|
|
499
|
+
catch (error) {
|
|
500
|
+
return [finding(FILE_BOOT, `TelemetryModule.forRoot did not boot without a telemetry store: ${error.message}`)];
|
|
501
|
+
}
|
|
502
|
+
try {
|
|
503
|
+
const controllers = (stubModule().controllers ?? []);
|
|
504
|
+
const dashboard = controllers.find((controller) => Reflect.getMetadata(constants_1.PATH_METADATA, controller) === 'admin/telemetry/dashboard');
|
|
505
|
+
const routes = dashboard ? discoverRoutes([dashboard]).filter((route) => route.method === 'GET') : [];
|
|
506
|
+
if (routes.length === 0)
|
|
507
|
+
out.push(finding(FILE_BOOT, 'no dashboard route found to exercise'));
|
|
508
|
+
for (const route of routes) {
|
|
509
|
+
const response = await app.inject({
|
|
510
|
+
method: 'GET',
|
|
511
|
+
url: `/${route.path}`,
|
|
512
|
+
query: requiredQuery(route.handler),
|
|
513
|
+
headers: { [index_2.TEST_PERMISSIONS_HEADER]: telemetry_permissions_1.TELEMETRY_PERMISSIONS.QUERY },
|
|
514
|
+
});
|
|
515
|
+
const body = (response.body ? safeJson(response.body) : undefined);
|
|
516
|
+
const documented = response.statusCode === 200 ||
|
|
517
|
+
(response.statusCode === 503 && body?.details?.reason === telemetry_query_errors_1.TELEMETRY_ERROR_REASONS.NOT_CONFIGURED);
|
|
518
|
+
if (!documented) {
|
|
519
|
+
out.push(finding(FILE_BOOT, `GET /${route.path} answered ${response.statusCode}${body?.details?.reason ? ` (${body.details.reason})` : ''} with no telemetry store; expected 200 or 503 TELEMETRY_NOT_CONFIGURED`));
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
finally {
|
|
524
|
+
await app.close();
|
|
525
|
+
}
|
|
526
|
+
return out;
|
|
527
|
+
}
|
|
528
|
+
function safeJson(text) {
|
|
529
|
+
try {
|
|
530
|
+
return JSON.parse(text);
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
return undefined;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
// ---- the suite ------------------------------------------------------------------------
|
|
537
|
+
/** The module the sync checks inspect: the real routes and providers, the package's test host, no ports bound. */
|
|
538
|
+
function stubModule() {
|
|
539
|
+
return telemetry_module_1.TelemetryModule.forRoot({ host: (0, index_2.createTestPlatformHost)(), imports: [] });
|
|
540
|
+
}
|
|
541
|
+
function check(_context, options) {
|
|
542
|
+
const module = stubModule();
|
|
543
|
+
const routes = discoverRoutes((module.controllers ?? []));
|
|
544
|
+
const doctorChecks = discoverDoctorChecks(module.providers ?? []);
|
|
545
|
+
const groups = options.metricGroups ?? metric_group_registry_1.metricGroupRegistry.list();
|
|
546
|
+
return {
|
|
547
|
+
scanned: { metricGroups: groups.length, routes: routes.length, doctorChecks: doctorChecks.length },
|
|
548
|
+
scannedFiles: {},
|
|
549
|
+
findings: [
|
|
550
|
+
...checkMetricGroups(groups),
|
|
551
|
+
...checkRoutePermissions(routes),
|
|
552
|
+
...checkDoctorReadOnly(doctorChecks),
|
|
553
|
+
...(options.cronSourceRoots ? checkCronCoverage(options.cronSourceRoots) : []),
|
|
554
|
+
],
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
const findingsIn = (report, file) => lines(report.findings.filter((f) => f.file === file));
|
|
558
|
+
function cases(options) {
|
|
559
|
+
return [
|
|
560
|
+
{
|
|
561
|
+
// The failure this guards: the discovery breaks and every case below passes over nothing.
|
|
562
|
+
name: 'discovers the groups, routes and Doctor checks, so a broken scan cannot pass vacuously',
|
|
563
|
+
run: (report, expect) => {
|
|
564
|
+
expect(report.scanned.metricGroups).toBeGreaterThanOrEqual(6);
|
|
565
|
+
expect(report.scanned.routes).toBeGreaterThanOrEqual(21);
|
|
566
|
+
expect(report.scanned.doctorChecks).toBeGreaterThanOrEqual(5);
|
|
567
|
+
},
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
name: '1. every metric group has a unique id, a label, known units and filters, and unique keys',
|
|
571
|
+
run: (report, expect) => expect(findingsIn(report, FILE_GROUPS)).toEqual([]),
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
name: '1. every metric group computes against an empty schema with everything skipped',
|
|
575
|
+
run: async (_report, expect) => expect(lines(await checkMetricGroupsOnEmptySchema(options.metricGroups ?? metric_group_registry_1.metricGroupRegistry.list()))).toEqual([]),
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
name: '2. every route declares exactly its permissions, and none is public',
|
|
579
|
+
run: (report, expect) => expect(findingsIn(report, FILE_ROUTES)).toEqual([]),
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
name: '3. no Doctor check can write, enqueue or audit',
|
|
583
|
+
run: (report, expect) => expect(findingsIn(report, FILE_DOCTOR)).toEqual([]),
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
name: '4. the connection and config responses never carry a stored password',
|
|
587
|
+
run: async (_report, expect) => expect(lines(await checkNoSecretsInResponses())).toEqual([]),
|
|
588
|
+
},
|
|
589
|
+
...(options.cronSourceRoots
|
|
590
|
+
? [
|
|
591
|
+
{
|
|
592
|
+
name: "5. the app's cron scan covers the telemetry retention cron",
|
|
593
|
+
run: (report, expect) => expect(findingsIn(report, FILE_CRON)).toEqual([]),
|
|
594
|
+
},
|
|
595
|
+
]
|
|
596
|
+
: [
|
|
597
|
+
{
|
|
598
|
+
name: '5. cron coverage: skipped, no cronSourceRoots given',
|
|
599
|
+
run: () => undefined,
|
|
600
|
+
},
|
|
601
|
+
]),
|
|
602
|
+
{
|
|
603
|
+
name: '6. boots without a telemetry store and every dashboard route answers its documented response',
|
|
604
|
+
run: async (_report, expect) => expect(lines(await checkBootsWithoutTelemetry())).toEqual([]),
|
|
605
|
+
},
|
|
606
|
+
];
|
|
607
|
+
}
|
|
608
|
+
/**
|
|
609
|
+
* The suite behind `runPlatformConformance({ suites: { telemetry } })`: the
|
|
610
|
+
* telemetry slice's invariants 1 to 6 (see this file's header). Registered in
|
|
611
|
+
* {@link conformanceSuites} when `@marinoscar/platform-api/telemetry/testing`
|
|
612
|
+
* is imported.
|
|
613
|
+
*
|
|
614
|
+
* @extensionPoint registry
|
|
615
|
+
* @stability experimental
|
|
616
|
+
*/
|
|
617
|
+
exports.telemetryConformanceSuite = {
|
|
618
|
+
id: 'telemetry',
|
|
619
|
+
title: 'the telemetry slice keeps its invariants',
|
|
620
|
+
description: 'Metric groups are well formed and degrade to skipped, every route declares exactly its permissions, Doctor checks are read-only, responses carry no secret, the cron is enqueue-only, and the module boots without a store.',
|
|
621
|
+
check,
|
|
622
|
+
cases,
|
|
623
|
+
};
|
|
624
|
+
if (!index_2.conformanceSuites.has(exports.telemetryConformanceSuite.id))
|
|
625
|
+
index_2.conformanceSuites.register(exports.telemetryConformanceSuite);
|
|
626
|
+
//# sourceMappingURL=conformance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../../src/telemetry/testing/conformance.ts"],"names":[],"mappings":"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"}
|