@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 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/telemetry/ports.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,wDAAwD;AACxD,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,6DAA6D;AAC7D,2EAA2E;AAC3E,8CAA8C;AAC9C,EAAE;AACF,8EAA8E;AAC9E,iDAAiD;AACjD,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,oDAAoD;AACpD,0EAA0E;AAC1E,kEAAkE;AAClE,0DAA0D;AAC1D,EAAE;AACF,qEAAqE;AACrE,iDAAiD;AACjD,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,gFAAgF;;;AAMhF,sFAAsF;AAEtF;;;;;GAKG;AACU,QAAA,oBAAoB,GAAkB,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;AAoC3G,wFAAwF;AAExF;;;;;GAKG;AACU,QAAA,wBAAwB,GAAkB,MAAM,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAyFnH,wFAAwF;AAExF;;;;;GAKG;AACU,QAAA,0BAA0B,GAAkB,MAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;AAoEvH,wFAAwF;AAExF;;;;;GAKG;AACU,QAAA,cAAc,GAAkB,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AA2G/F,wFAAwF;AAExF;;;;;GAKG;AACU,QAAA,YAAY,GAAkB,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AAqN3F,wFAAwF;AAExF;;;;;GAKG;AACU,QAAA,kBAAkB,GAAkB,MAAM,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The read-only statement kinds the guard admits.
|
|
3
|
+
*
|
|
4
|
+
* @stability stable
|
|
5
|
+
*/
|
|
6
|
+
export type TelemetryStatementKind = 'select' | 'show' | 'describe' | 'explain';
|
|
7
|
+
/**
|
|
8
|
+
* A statement the guard admitted.
|
|
9
|
+
*
|
|
10
|
+
* @stability stable
|
|
11
|
+
*/
|
|
12
|
+
export interface AnalyzedStatement {
|
|
13
|
+
/** Its kind. */
|
|
14
|
+
kind: TelemetryStatementKind;
|
|
15
|
+
/** The statement with comments removed and trailing `;`/whitespace trimmed. */
|
|
16
|
+
normalized: string;
|
|
17
|
+
}
|
|
18
|
+
/** Why a statement was refused. The message is shown to the user as-is. */
|
|
19
|
+
export declare class TelemetrySqlRejectedError extends Error {
|
|
20
|
+
constructor(message: string);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Removes comments outside quotes, keeping everything else byte-for-byte.
|
|
24
|
+
* A comment is replaced by one space so `SELECT/**\/1` does not become
|
|
25
|
+
* `SELECT1`. Throws on an unterminated string, identifier or block comment:
|
|
26
|
+
* what follows it cannot be classified safely.
|
|
27
|
+
*/
|
|
28
|
+
export declare function stripSqlComments(sql: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Classifies one read-only statement, or throws `TelemetrySqlRejectedError`
|
|
31
|
+
* with a message fit to show the user.
|
|
32
|
+
*
|
|
33
|
+
* @stability stable
|
|
34
|
+
*/
|
|
35
|
+
export declare function analyzeStatement(sql: string): AnalyzedStatement;
|
|
36
|
+
/**
|
|
37
|
+
* How `applyRowCap` bounded a statement:
|
|
38
|
+
*
|
|
39
|
+
* appended no top-level LIMIT: `LIMIT <cap>` was added at the end (or
|
|
40
|
+
* just before a top-level OFFSET);
|
|
41
|
+
* clamped a top-level `LIMIT <n>` with n at least the cap: n was replaced by cap;
|
|
42
|
+
* kept a top-level `LIMIT <n>` with n under the cap: already bounded below
|
|
43
|
+
* the cap, sent unchanged;
|
|
44
|
+
* client-only the statement could not be bounded safely in its text
|
|
45
|
+
* (`LIMIT ALL`, `LIMIT <expression>`, `FETCH FIRST`, or a
|
|
46
|
+
* SHOW/DESCRIBE/EXPLAIN): sent unchanged, and the caller's
|
|
47
|
+
* slice to `maxRows` (plus the query timeout) is the only cap.
|
|
48
|
+
*/
|
|
49
|
+
export type RowCapStrategy = 'appended' | 'clamped' | 'kept' | 'client-only';
|
|
50
|
+
export interface RowCappedStatement {
|
|
51
|
+
sql: string;
|
|
52
|
+
strategy: RowCapStrategy;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The statement to send, bounded so the SERVER stops after `cap` rows (pass
|
|
56
|
+
* `maxRows + 1`: the extra row is how truncation is detected).
|
|
57
|
+
*
|
|
58
|
+
* WHY NOT A WRAPPER (issue #554). The obvious
|
|
59
|
+
* `SELECT * FROM (<sql>) AS q LIMIT n` — and a CTE wrapper too — does NOT preserve the inner ORDER BY on
|
|
60
|
+
* GreptimeDB v1.2.1 (verified live, deterministically; `UNION ALL … ORDER BY`
|
|
61
|
+
* included). SQL leaves a subquery's order unspecified and the planner takes
|
|
62
|
+
* it at its word. So the LIMIT is applied to the statement itself, at the top
|
|
63
|
+
* level, where it composes with the statement's own ORDER BY (and, after a
|
|
64
|
+
* top-level `UNION … ORDER BY`, with the whole union).
|
|
65
|
+
*
|
|
66
|
+
* "Top level" is found with the same quote-aware scan as the rest of this
|
|
67
|
+
* file (comments are already gone from `normalized`), counting parentheses:
|
|
68
|
+
* a LIMIT inside a subquery, CTE or string literal is not the statement's.
|
|
69
|
+
*/
|
|
70
|
+
export declare function applyRowCap(statement: AnalyzedStatement, cap: number): RowCappedStatement;
|
|
71
|
+
//# sourceMappingURL=sql-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-guard.d.ts","sourceRoot":"","sources":["../../../src/telemetry/query/sql-guard.ts"],"names":[],"mappings":"AA4BA;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAEhF;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB;IAChB,IAAI,EAAE,sBAAsB,CAAC;IAC7B,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,2EAA2E;AAC3E,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAaD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsCpD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAgC/D;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC;AAE7E,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAwDzF"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// SQL guard for ad-hoc telemetry queries (issue #535, epic #528)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// DEFENCE IN DEPTH, NOT THE CONTROL. Every explorer/assistant/export query runs
|
|
7
|
+
// as GreptimeDB's `readonly` user, which the server itself refuses INSERT,
|
|
8
|
+
// DROP, ALTER, SET and friends (spike #529). This guard exists for two
|
|
9
|
+
// reasons that user cannot cover:
|
|
10
|
+
//
|
|
11
|
+
// 1. ONE STATEMENT. The simple query protocol executes EVERY statement in a
|
|
12
|
+
// multi-statement string (spike #529). `GreptimeClient` refuses the
|
|
13
|
+
// result after the fact; this refuses the text before it is sent, so a
|
|
14
|
+
// second statement never runs at all.
|
|
15
|
+
// 2. GOOD ERRORS. "Only SELECT, WITH, SHOW, DESCRIBE and EXPLAIN are
|
|
16
|
+
// allowed" is a better answer to `DELETE FROM …` than the server's
|
|
17
|
+
// "User is not authorized to perform this action".
|
|
18
|
+
//
|
|
19
|
+
// It is a small lexer, not a parser: it knows where single-quoted strings
|
|
20
|
+
// ('' escapes), double-quoted identifiers ("" escapes — telemetry columns are
|
|
21
|
+
// named like "span_attributes.http.route"), backtick identifiers, `--` line
|
|
22
|
+
// comments and `/* */` block comments begin and end, and nothing else. That
|
|
23
|
+
// is exactly enough to find a `;` or a comment that is really one, to find
|
|
24
|
+
// the first keyword, and to find a top-level LIMIT (`applyRowCap`).
|
|
25
|
+
// GreptimeDB has no dollar quoting, so none is handled.
|
|
26
|
+
//
|
|
27
|
+
// Pure functions; no Nest, no I/O.
|
|
28
|
+
// =============================================================================
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.TelemetrySqlRejectedError = void 0;
|
|
31
|
+
exports.stripSqlComments = stripSqlComments;
|
|
32
|
+
exports.analyzeStatement = analyzeStatement;
|
|
33
|
+
exports.applyRowCap = applyRowCap;
|
|
34
|
+
/** Why a statement was refused. The message is shown to the user as-is. */
|
|
35
|
+
class TelemetrySqlRejectedError extends Error {
|
|
36
|
+
constructor(message) {
|
|
37
|
+
super(message);
|
|
38
|
+
this.name = 'TelemetrySqlRejectedError';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.TelemetrySqlRejectedError = TelemetrySqlRejectedError;
|
|
42
|
+
const ALLOWED = {
|
|
43
|
+
SELECT: 'select',
|
|
44
|
+
WITH: 'select',
|
|
45
|
+
SHOW: 'show',
|
|
46
|
+
DESCRIBE: 'describe',
|
|
47
|
+
DESC: 'describe',
|
|
48
|
+
EXPLAIN: 'explain',
|
|
49
|
+
};
|
|
50
|
+
const ALLOWED_TEXT = 'SELECT, WITH, SHOW, DESCRIBE and EXPLAIN';
|
|
51
|
+
/**
|
|
52
|
+
* Removes comments outside quotes, keeping everything else byte-for-byte.
|
|
53
|
+
* A comment is replaced by one space so `SELECT/**\/1` does not become
|
|
54
|
+
* `SELECT1`. Throws on an unterminated string, identifier or block comment:
|
|
55
|
+
* what follows it cannot be classified safely.
|
|
56
|
+
*/
|
|
57
|
+
function stripSqlComments(sql) {
|
|
58
|
+
let out = '';
|
|
59
|
+
let i = 0;
|
|
60
|
+
const n = sql.length;
|
|
61
|
+
while (i < n) {
|
|
62
|
+
const ch = sql[i];
|
|
63
|
+
const next = sql[i + 1];
|
|
64
|
+
if (ch === "'" || ch === '"' || ch === '`') {
|
|
65
|
+
const end = endOfQuoted(sql, i);
|
|
66
|
+
out += sql.slice(i, end);
|
|
67
|
+
i = end;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (ch === '-' && next === '-') {
|
|
71
|
+
const newline = sql.indexOf('\n', i + 2);
|
|
72
|
+
i = newline === -1 ? n : newline; // keep the newline itself
|
|
73
|
+
out += ' ';
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (ch === '/' && next === '*') {
|
|
77
|
+
const close = sql.indexOf('*/', i + 2);
|
|
78
|
+
if (close === -1) {
|
|
79
|
+
throw new TelemetrySqlRejectedError('The query has an unterminated /* comment.');
|
|
80
|
+
}
|
|
81
|
+
i = close + 2;
|
|
82
|
+
out += ' ';
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
out += ch;
|
|
86
|
+
i += 1;
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Classifies one read-only statement, or throws `TelemetrySqlRejectedError`
|
|
92
|
+
* with a message fit to show the user.
|
|
93
|
+
*
|
|
94
|
+
* @stability stable
|
|
95
|
+
*/
|
|
96
|
+
function analyzeStatement(sql) {
|
|
97
|
+
const stripped = stripSqlComments(sql);
|
|
98
|
+
const normalized = trimTrailingTerminators(stripped);
|
|
99
|
+
if (normalized === '') {
|
|
100
|
+
throw new TelemetrySqlRejectedError('The query is empty.');
|
|
101
|
+
}
|
|
102
|
+
if (indexOfUnquoted(normalized, ';') !== -1) {
|
|
103
|
+
throw new TelemetrySqlRejectedError('Only one SQL statement may be run at a time.');
|
|
104
|
+
}
|
|
105
|
+
// `(SELECT 1) UNION (SELECT 2)` — a leading parenthesis opens a query.
|
|
106
|
+
const body = normalized.replace(/^[\s(]+/, '');
|
|
107
|
+
const keyword = /^[A-Za-z_]+/.exec(body)?.[0]?.toUpperCase() ?? '';
|
|
108
|
+
const kind = ALLOWED[keyword];
|
|
109
|
+
if (!kind) {
|
|
110
|
+
throw new TelemetrySqlRejectedError(keyword
|
|
111
|
+
? `${keyword} statements are not allowed. Telemetry queries are read-only: only ${ALLOWED_TEXT} are allowed.`
|
|
112
|
+
: `The query must start with ${ALLOWED_TEXT}.`);
|
|
113
|
+
}
|
|
114
|
+
if (kind === 'explain' && /^EXPLAIN\s+(\(|VERBOSE\s+)?ANALYZE\b/i.test(body)) {
|
|
115
|
+
throw new TelemetrySqlRejectedError('EXPLAIN ANALYZE is not allowed: it runs the whole query. Use EXPLAIN to see the plan.');
|
|
116
|
+
}
|
|
117
|
+
return { kind, normalized };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The statement to send, bounded so the SERVER stops after `cap` rows (pass
|
|
121
|
+
* `maxRows + 1`: the extra row is how truncation is detected).
|
|
122
|
+
*
|
|
123
|
+
* WHY NOT A WRAPPER (issue #554). The obvious
|
|
124
|
+
* `SELECT * FROM (<sql>) AS q LIMIT n` — and a CTE wrapper too — does NOT preserve the inner ORDER BY on
|
|
125
|
+
* GreptimeDB v1.2.1 (verified live, deterministically; `UNION ALL … ORDER BY`
|
|
126
|
+
* included). SQL leaves a subquery's order unspecified and the planner takes
|
|
127
|
+
* it at its word. So the LIMIT is applied to the statement itself, at the top
|
|
128
|
+
* level, where it composes with the statement's own ORDER BY (and, after a
|
|
129
|
+
* top-level `UNION … ORDER BY`, with the whole union).
|
|
130
|
+
*
|
|
131
|
+
* "Top level" is found with the same quote-aware scan as the rest of this
|
|
132
|
+
* file (comments are already gone from `normalized`), counting parentheses:
|
|
133
|
+
* a LIMIT inside a subquery, CTE or string literal is not the statement's.
|
|
134
|
+
*/
|
|
135
|
+
function applyRowCap(statement, cap) {
|
|
136
|
+
if (!Number.isSafeInteger(cap) || cap < 1) {
|
|
137
|
+
throw new RangeError(`cap must be a positive integer, got ${cap}`);
|
|
138
|
+
}
|
|
139
|
+
const sql = statement.normalized;
|
|
140
|
+
// SHOW, DESCRIBE and EXPLAIN take no LIMIT; their output is small.
|
|
141
|
+
if (statement.kind !== 'select') {
|
|
142
|
+
return { sql, strategy: 'client-only' };
|
|
143
|
+
}
|
|
144
|
+
const words = topLevelWords(sql);
|
|
145
|
+
const find = (word) => words.filter((w) => w.upper === word).at(-1);
|
|
146
|
+
// `FETCH FIRST n ROWS ONLY` is the standard spelling of LIMIT; rewriting
|
|
147
|
+
// it is not worth the risk for how rarely it is written.
|
|
148
|
+
if (find('FETCH')) {
|
|
149
|
+
return { sql, strategy: 'client-only' };
|
|
150
|
+
}
|
|
151
|
+
const limit = find('LIMIT');
|
|
152
|
+
if (!limit) {
|
|
153
|
+
const offset = find('OFFSET');
|
|
154
|
+
if (offset) {
|
|
155
|
+
// `… OFFSET m` → `… LIMIT cap OFFSET m`, the form every dialect accepts.
|
|
156
|
+
return {
|
|
157
|
+
sql: `${sql.slice(0, offset.start)}LIMIT ${cap} ${sql.slice(offset.start)}`,
|
|
158
|
+
strategy: 'appended',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
// After ORDER BY, and after a whole `UNION … ORDER BY`, this limits the
|
|
162
|
+
// statement's final, ordered result.
|
|
163
|
+
return { sql: `${sql} LIMIT ${cap}`, strategy: 'appended' };
|
|
164
|
+
}
|
|
165
|
+
// `LIMIT <integer>`, then nothing but an optional `OFFSET <integer> [ROW[S]]`
|
|
166
|
+
// (the `OFFSET m LIMIT n` order leaves nothing after the literal at all).
|
|
167
|
+
const rest = sql.slice(limit.end);
|
|
168
|
+
const literal = /^(\s+)(\d+)(?=(\s+OFFSET\s+\d+(\s+ROWS?)?)?\s*$)/i.exec(rest);
|
|
169
|
+
if (!literal) {
|
|
170
|
+
return { sql, strategy: 'client-only' };
|
|
171
|
+
}
|
|
172
|
+
if (BigInt(literal[2]) < BigInt(cap)) {
|
|
173
|
+
return { sql, strategy: 'kept' };
|
|
174
|
+
}
|
|
175
|
+
const at = limit.end + literal[1].length;
|
|
176
|
+
return {
|
|
177
|
+
sql: `${sql.slice(0, at)}${cap}${sql.slice(at + literal[2].length)}`,
|
|
178
|
+
strategy: 'clamped',
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// -----------------------------------------------------------------------------
|
|
182
|
+
/** Index just past the quoted run starting at `start` (a `'`, `"` or backtick). */
|
|
183
|
+
function endOfQuoted(sql, start) {
|
|
184
|
+
const quote = sql[start];
|
|
185
|
+
let i = start + 1;
|
|
186
|
+
while (i < sql.length) {
|
|
187
|
+
if (sql[i] === quote) {
|
|
188
|
+
// A doubled quote is an escaped one and does not close the run.
|
|
189
|
+
if (sql[i + 1] === quote) {
|
|
190
|
+
i += 2;
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
return i + 1;
|
|
194
|
+
}
|
|
195
|
+
i += 1;
|
|
196
|
+
}
|
|
197
|
+
throw new TelemetrySqlRejectedError(quote === "'"
|
|
198
|
+
? 'The query has an unterminated string literal.'
|
|
199
|
+
: 'The query has an unterminated quoted identifier.');
|
|
200
|
+
}
|
|
201
|
+
function indexOfUnquoted(sql, target) {
|
|
202
|
+
let found = -1;
|
|
203
|
+
scanUnquoted(sql, (ch, i) => {
|
|
204
|
+
if (ch !== target)
|
|
205
|
+
return undefined;
|
|
206
|
+
found = i;
|
|
207
|
+
return 'stop';
|
|
208
|
+
});
|
|
209
|
+
return found;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The bare words (keywords and unquoted identifiers) outside every quote and
|
|
213
|
+
* parenthesis, in order. A word after `.` (`t.limit`) is a qualified name,
|
|
214
|
+
* not a keyword; a numeric literal such as `1e5` contributes no word.
|
|
215
|
+
*/
|
|
216
|
+
function topLevelWords(sql) {
|
|
217
|
+
const words = [];
|
|
218
|
+
let depth = 0;
|
|
219
|
+
scanUnquoted(sql, (ch, i) => {
|
|
220
|
+
if (ch === '(')
|
|
221
|
+
depth += 1;
|
|
222
|
+
else if (ch === ')')
|
|
223
|
+
depth = Math.max(0, depth - 1);
|
|
224
|
+
else if (/[A-Za-z0-9_]/.test(ch) && !/[A-Za-z0-9_$]/.test(sql[i - 1] ?? '')) {
|
|
225
|
+
const end = i + /^[A-Za-z0-9_$]*/.exec(sql.slice(i))[0].length;
|
|
226
|
+
if (depth === 0 && /[A-Za-z_]/.test(ch) && sql[i - 1] !== '.') {
|
|
227
|
+
words.push({ upper: sql.slice(i, end).toUpperCase(), start: i, end });
|
|
228
|
+
}
|
|
229
|
+
return end;
|
|
230
|
+
}
|
|
231
|
+
return undefined;
|
|
232
|
+
});
|
|
233
|
+
return words;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Walks `sql` calling `visit` for every character outside a quoted run (the
|
|
237
|
+
* runs themselves are skipped whole). `visit` returns `'stop'` to end the
|
|
238
|
+
* walk, an index to resume from, or nothing to move on by one.
|
|
239
|
+
*/
|
|
240
|
+
function scanUnquoted(sql, visit) {
|
|
241
|
+
let i = 0;
|
|
242
|
+
while (i < sql.length) {
|
|
243
|
+
const ch = sql[i];
|
|
244
|
+
if (ch === "'" || ch === '"' || ch === '`') {
|
|
245
|
+
i = endOfQuoted(sql, i);
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
const next = visit(ch, i);
|
|
249
|
+
if (next === 'stop')
|
|
250
|
+
return;
|
|
251
|
+
i = typeof next === 'number' ? next : i + 1;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/** Trims whitespace and any number of trailing `;` (with whitespace between). */
|
|
255
|
+
function trimTrailingTerminators(sql) {
|
|
256
|
+
return sql.replace(/[\s;]+$/, '').trim();
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=sql-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-guard.js","sourceRoot":"","sources":["../../../src/telemetry/query/sql-guard.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iEAAiE;AACjE,gFAAgF;AAChF,EAAE;AACF,gFAAgF;AAChF,2EAA2E;AAC3E,uEAAuE;AACvE,kCAAkC;AAClC,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,4EAA4E;AAC5E,2CAA2C;AAC3C,uEAAuE;AACvE,wEAAwE;AACxE,wDAAwD;AACxD,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,oEAAoE;AACpE,wDAAwD;AACxD,EAAE;AACF,mCAAmC;AACnC,gFAAgF;;;AA8ChF,4CAsCC;AAQD,4CAgCC;AAsCD,kCAwDC;AArMD,2EAA2E;AAC3E,MAAa,yBAA0B,SAAQ,KAAK;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AALD,8DAKC;AAED,MAAM,OAAO,GAA2C;IACtD,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,YAAY,GAAG,0CAA0C,CAAC;AAEhE;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAErB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAExB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACzB,CAAC,GAAG,GAAG,CAAC;YACR,SAAS;QACX,CAAC;QAED,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,0BAA0B;YAC5D,GAAG,IAAI,GAAG,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,MAAM,IAAI,yBAAyB,CAAC,2CAA2C,CAAC,CAAC;YACnF,CAAC;YACD,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACd,GAAG,IAAI,GAAG,CAAC;YACX,SAAS;QACX,CAAC;QAED,GAAG,IAAI,EAAE,CAAC;QACV,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,yBAAyB,CAAC,qBAAqB,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,yBAAyB,CAAC,8CAA8C,CAAC,CAAC;IACtF,CAAC;IAED,uEAAuE;IACvE,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,yBAAyB,CACjC,OAAO;YACL,CAAC,CAAC,GAAG,OAAO,sEAAsE,YAAY,eAAe;YAC7G,CAAC,CAAC,6BAA6B,YAAY,GAAG,CACjD,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,IAAI,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,yBAAyB,CACjC,uFAAuF,CACxF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC9B,CAAC;AAsBD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,WAAW,CAAC,SAA4B,EAAE,GAAW;IACnE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,UAAU,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC;IAEjC,mEAAmE;IACnE,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5E,yEAAyE;IACzE,yDAAyD;IACzD,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,MAAM,EAAE,CAAC;YACX,yEAAyE;YACzE,OAAO;gBACL,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC3E,QAAQ,EAAE,UAAU;aACrB,CAAC;QACJ,CAAC;QACD,wEAAwE;QACxE,qCAAqC;QACrC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,UAAU,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC9D,CAAC;IAED,8EAA8E;IAC9E,0EAA0E;IAC1E,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,mDAAmD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEzC,OAAO;QACL,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QACpE,QAAQ,EAAE,SAAS;KACpB,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,mFAAmF;AACnF,SAAS,WAAW,CAAC,GAAW,EAAE,KAAa;IAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAElB,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YACrB,gEAAgE;YAChE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBACzB,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QACD,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IAED,MAAM,IAAI,yBAAyB,CACjC,KAAK,KAAK,GAAG;QACX,CAAC,CAAC,+CAA+C;QACjD,CAAC,CAAC,kDAAkD,CACvD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAW,EAAE,MAAc;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IAEf,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QAC1B,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QACpC,KAAK,GAAG,CAAC,CAAC;QACV,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAQD;;;;GAIG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QAC1B,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,IAAI,CAAC,CAAC;aACtB,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;aAC/C,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5E,MAAM,GAAG,GAAG,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAChE,IAAI,KAAK,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,KAA6D;IAC9F,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAElB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC3C,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO;QAC5B,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,SAAS,uBAAuB,CAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TelemetrySettings as SystemTelemetryValue } from '@marinoscar/platform-contract/telemetry';
|
|
2
|
+
import type { GreptimeClient } from '../greptime/greptime.client';
|
|
3
|
+
import type { TelemetrySettingsService } from '../telemetry-settings.service';
|
|
4
|
+
/** The current policy, or a `TelemetryHttpError` saying why nothing may be queried. */
|
|
5
|
+
export declare function requireQueryablePolicy(greptime: GreptimeClient, settings: TelemetrySettingsService): Promise<SystemTelemetryValue>;
|
|
6
|
+
/**
|
|
7
|
+
* Maps anything the guard or `GreptimeClient` threw to its HTTP failure.
|
|
8
|
+
* Anything unrecognised is returned unchanged (and becomes a 500).
|
|
9
|
+
*/
|
|
10
|
+
export declare function toTelemetryHttpError(error: unknown): unknown;
|
|
11
|
+
//# sourceMappingURL=telemetry-availability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-availability.d.ts","sourceRoot":"","sources":["../../../src/telemetry/query/telemetry-availability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,IAAI,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACzG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAY9E,uFAAuF;AACvF,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,wBAAwB,GACjC,OAAO,CAAC,oBAAoB,CAAC,CAkB/B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA4B5D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requireQueryablePolicy = requireQueryablePolicy;
|
|
4
|
+
exports.toTelemetryHttpError = toTelemetryHttpError;
|
|
5
|
+
const greptime_errors_1 = require("../greptime/greptime.errors");
|
|
6
|
+
const sql_guard_1 = require("./sql-guard");
|
|
7
|
+
const telemetry_query_errors_1 = require("./telemetry-query.errors");
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// The two preconditions every explorer read shares (issue #535)
|
|
10
|
+
// =============================================================================
|
|
11
|
+
//
|
|
12
|
+
// Order matters: "not configured" first (no amount of settings changes will
|
|
13
|
+
// help), then "disabled" (an administrator can switch it on).
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/** The current policy, or a `TelemetryHttpError` saying why nothing may be queried. */
|
|
16
|
+
async function requireQueryablePolicy(greptime, settings) {
|
|
17
|
+
if (!greptime.isConfigured()) {
|
|
18
|
+
throw new telemetry_query_errors_1.TelemetryHttpError(telemetry_query_errors_1.TELEMETRY_ERROR_REASONS.NOT_CONFIGURED, 'No telemetry store is configured for this deployment.');
|
|
19
|
+
}
|
|
20
|
+
const policy = await settings.getPolicy();
|
|
21
|
+
if (!policy.enabled) {
|
|
22
|
+
throw new telemetry_query_errors_1.TelemetryHttpError(telemetry_query_errors_1.TELEMETRY_ERROR_REASONS.DISABLED, 'Telemetry is disabled. An administrator can enable it in the telemetry settings.');
|
|
23
|
+
}
|
|
24
|
+
return policy;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Maps anything the guard or `GreptimeClient` threw to its HTTP failure.
|
|
28
|
+
* Anything unrecognised is returned unchanged (and becomes a 500).
|
|
29
|
+
*/
|
|
30
|
+
function toTelemetryHttpError(error) {
|
|
31
|
+
if (error instanceof telemetry_query_errors_1.TelemetryHttpError)
|
|
32
|
+
return error;
|
|
33
|
+
if (error instanceof sql_guard_1.TelemetrySqlRejectedError || error instanceof greptime_errors_1.TelemetryMultiStatementError) {
|
|
34
|
+
return new telemetry_query_errors_1.TelemetryHttpError(telemetry_query_errors_1.TELEMETRY_ERROR_REASONS.QUERY_REJECTED, error.message);
|
|
35
|
+
}
|
|
36
|
+
if (error instanceof greptime_errors_1.TelemetryQueryTimeoutError) {
|
|
37
|
+
return new telemetry_query_errors_1.TelemetryHttpError(telemetry_query_errors_1.TELEMETRY_ERROR_REASONS.QUERY_TIMEOUT, error.message, {
|
|
38
|
+
timeoutMs: error.timeoutMs,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (error instanceof greptime_errors_1.TelemetryNotConfiguredError) {
|
|
42
|
+
return new telemetry_query_errors_1.TelemetryHttpError(telemetry_query_errors_1.TELEMETRY_ERROR_REASONS.NOT_CONFIGURED, error.message);
|
|
43
|
+
}
|
|
44
|
+
if (error instanceof greptime_errors_1.TelemetryQueryFailedError) {
|
|
45
|
+
return error.origin === 'server'
|
|
46
|
+
? new telemetry_query_errors_1.TelemetryHttpError(telemetry_query_errors_1.TELEMETRY_ERROR_REASONS.QUERY_FAILED, error.message, {
|
|
47
|
+
...(error.code ? { sqlState: error.code } : {}),
|
|
48
|
+
})
|
|
49
|
+
: new telemetry_query_errors_1.TelemetryHttpError(telemetry_query_errors_1.TELEMETRY_ERROR_REASONS.UNREACHABLE, 'The telemetry store did not answer.', {
|
|
50
|
+
cause: error.message,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return error;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=telemetry-availability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-availability.js","sourceRoot":"","sources":["../../../src/telemetry/query/telemetry-availability.ts"],"names":[],"mappings":";;AAqBA,wDAqBC;AAMD,oDA4BC;AA1ED,iEAKqC;AAErC,2CAAwD;AACxD,qEAAuF;AAEvF,gFAAgF;AAChF,gEAAgE;AAChE,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,8DAA8D;AAC9D,gFAAgF;AAEhF,uFAAuF;AAChF,KAAK,UAAU,sBAAsB,CAC1C,QAAwB,EACxB,QAAkC;IAElC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,2CAAkB,CAC1B,gDAAuB,CAAC,cAAc,EACtC,uDAAuD,CACxD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;IAE1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,2CAAkB,CAC1B,gDAAuB,CAAC,QAAQ,EAChC,kFAAkF,CACnF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,KAAc;IACjD,IAAI,KAAK,YAAY,2CAAkB;QAAE,OAAO,KAAK,CAAC;IAEtD,IAAI,KAAK,YAAY,qCAAyB,IAAI,KAAK,YAAY,8CAA4B,EAAE,CAAC;QAChG,OAAO,IAAI,2CAAkB,CAAC,gDAAuB,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,KAAK,YAAY,4CAA0B,EAAE,CAAC;QAChD,OAAO,IAAI,2CAAkB,CAAC,gDAAuB,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE;YAClF,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,YAAY,6CAA2B,EAAE,CAAC;QACjD,OAAO,IAAI,2CAAkB,CAAC,gDAAuB,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,KAAK,YAAY,2CAAyB,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAC9B,CAAC,CAAC,IAAI,2CAAkB,CAAC,gDAAuB,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE;gBAC1E,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChD,CAAC;YACJ,CAAC,CAAC,IAAI,2CAAkB,CAAC,gDAAuB,CAAC,WAAW,EAAE,qCAAqC,EAAE;gBACjG,KAAK,EAAE,KAAK,CAAC,OAAO;aACrB,CAAC,CAAC;IACT,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { HttpException } from '@nestjs/common';
|
|
2
|
+
/**
|
|
3
|
+
* The `details.reason` of every telemetry error (see the table above).
|
|
4
|
+
*
|
|
5
|
+
* @stability stable
|
|
6
|
+
*/
|
|
7
|
+
export declare const TELEMETRY_ERROR_REASONS: {
|
|
8
|
+
/** 503: no telemetry store is configured. */
|
|
9
|
+
readonly NOT_CONFIGURED: "TELEMETRY_NOT_CONFIGURED";
|
|
10
|
+
/** 503: the store did not answer. */
|
|
11
|
+
readonly UNREACHABLE: "TELEMETRY_UNREACHABLE";
|
|
12
|
+
/** 409: `telemetry.enabled` is off. */
|
|
13
|
+
readonly DISABLED: "TELEMETRY_DISABLED";
|
|
14
|
+
/** 400: the SQL guard refused the statement. */
|
|
15
|
+
readonly QUERY_REJECTED: "TELEMETRY_QUERY_REJECTED";
|
|
16
|
+
/** 400: the store refused the statement. */
|
|
17
|
+
readonly QUERY_FAILED: "TELEMETRY_QUERY_FAILED";
|
|
18
|
+
/** 504: the statement timed out. */
|
|
19
|
+
readonly QUERY_TIMEOUT: "TELEMETRY_QUERY_TIMEOUT";
|
|
20
|
+
/** 409: `telemetry.assistant.enabled` is off. */
|
|
21
|
+
readonly ASSISTANT_DISABLED: "TELEMETRY_ASSISTANT_DISABLED";
|
|
22
|
+
/** 409: no assistant provider or model is selected. */
|
|
23
|
+
readonly ASSISTANT_NOT_CONFIGURED: "TELEMETRY_ASSISTANT_NOT_CONFIGURED";
|
|
24
|
+
/** 400: a dashboard filter value was not seen in the range. */
|
|
25
|
+
readonly DASHBOARD_BAD_FILTER: "TELEMETRY_DASHBOARD_BAD_FILTER";
|
|
26
|
+
/** 400: the events `cursor` is malformed. */
|
|
27
|
+
readonly DASHBOARD_BAD_CURSOR: "TELEMETRY_DASHBOARD_BAD_CURSOR";
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* One of {@link TELEMETRY_ERROR_REASONS}.
|
|
31
|
+
*
|
|
32
|
+
* @stability stable
|
|
33
|
+
*/
|
|
34
|
+
export type TelemetryErrorReason = (typeof TELEMETRY_ERROR_REASONS)[keyof typeof TELEMETRY_ERROR_REASONS];
|
|
35
|
+
/**
|
|
36
|
+
* A telemetry failure with its reason in `details.reason`; the HTTP status
|
|
37
|
+
* follows from the reason.
|
|
38
|
+
*
|
|
39
|
+
* @stability stable
|
|
40
|
+
*/
|
|
41
|
+
export declare class TelemetryHttpError extends HttpException {
|
|
42
|
+
/** Why it failed. */
|
|
43
|
+
readonly reason: TelemetryErrorReason;
|
|
44
|
+
constructor(
|
|
45
|
+
/** Why it failed. */
|
|
46
|
+
reason: TelemetryErrorReason, message: string, details?: Record<string, unknown>);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=telemetry-query.errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-query.errors.d.ts","sourceRoot":"","sources":["../../../src/telemetry/query/telemetry-query.errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAC;AA0C3D;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;IAClC,6CAA6C;;IAE7C,qCAAqC;;IAErC,uCAAuC;;IAEvC,gDAAgD;;IAEhD,4CAA4C;;IAE5C,oCAAoC;;IAEpC,iDAAiD;;IAEjD,uDAAuD;;IAEvD,+DAA+D;;IAE/D,6CAA6C;;CAErC,CAAC;AAEX;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,OAAO,uBAAuB,CAAC,CAAC;AAe1G;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IAEjD,qBAAqB;IACrB,QAAQ,CAAC,MAAM,EAAE,oBAAoB;;IADrC,qBAAqB;IACZ,MAAM,EAAE,oBAAoB,EACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKxC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TelemetryHttpError = exports.TELEMETRY_ERROR_REASONS = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
// =============================================================================
|
|
6
|
+
// HTTP failures of the telemetry explorer (issue #535, epic #528)
|
|
7
|
+
// =============================================================================
|
|
8
|
+
//
|
|
9
|
+
// The error envelope derives `code` from the status (docs/API.md), so the
|
|
10
|
+
// machine-readable reason travels in `details.reason`, exactly like
|
|
11
|
+
// `AI_DISABLED`. One status per reason:
|
|
12
|
+
//
|
|
13
|
+
// TELEMETRY_NOT_CONFIGURED 503 no telemetry store in this deployment (the
|
|
14
|
+
// overlay is not deployed). 503 rather than
|
|
15
|
+
// 404: the ROUTE exists, the service behind
|
|
16
|
+
// it does not — and `GET …/status` already
|
|
17
|
+
// reports `configured: false` with a 200.
|
|
18
|
+
// TELEMETRY_UNREACHABLE 503 configured, but the store did not answer.
|
|
19
|
+
// TELEMETRY_DISABLED 409 `telemetry.enabled` is off — a state an
|
|
20
|
+
// administrator can change (same status the
|
|
21
|
+
// AI kill switch's admin-facing errors use for
|
|
22
|
+
// "the configuration forbids this now").
|
|
23
|
+
// TELEMETRY_QUERY_REJECTED 400 the SQL guard refused the statement.
|
|
24
|
+
// TELEMETRY_QUERY_FAILED 400 GreptimeDB refused or failed the statement
|
|
25
|
+
// (syntax, unknown column, not permitted).
|
|
26
|
+
// The message is the server's own: it is
|
|
27
|
+
// about the caller's SQL and carries no
|
|
28
|
+
// credential.
|
|
29
|
+
// TELEMETRY_QUERY_TIMEOUT 504 the statement outran
|
|
30
|
+
// `telemetry.query.timeoutSeconds`.
|
|
31
|
+
//
|
|
32
|
+
// The assistant (#536) adds two, both 409 for the same reason as DISABLED
|
|
33
|
+
// (an administrator can change the configuration that forbids this):
|
|
34
|
+
//
|
|
35
|
+
// TELEMETRY_ASSISTANT_DISABLED 409 `telemetry.assistant.enabled` is off.
|
|
36
|
+
// TELEMETRY_ASSISTANT_NOT_CONFIGURED 409 no `assistant.provider`/`modelId`.
|
|
37
|
+
//
|
|
38
|
+
// The dashboard (#577) adds two request errors:
|
|
39
|
+
//
|
|
40
|
+
// TELEMETRY_DASHBOARD_BAD_FILTER 400 `service`/`instance` is not among the
|
|
41
|
+
// values seen in the requested range.
|
|
42
|
+
// TELEMETRY_DASHBOARD_BAD_CURSOR 400 the events `cursor` is malformed.
|
|
43
|
+
// =============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* The `details.reason` of every telemetry error (see the table above).
|
|
46
|
+
*
|
|
47
|
+
* @stability stable
|
|
48
|
+
*/
|
|
49
|
+
exports.TELEMETRY_ERROR_REASONS = {
|
|
50
|
+
/** 503: no telemetry store is configured. */
|
|
51
|
+
NOT_CONFIGURED: 'TELEMETRY_NOT_CONFIGURED',
|
|
52
|
+
/** 503: the store did not answer. */
|
|
53
|
+
UNREACHABLE: 'TELEMETRY_UNREACHABLE',
|
|
54
|
+
/** 409: `telemetry.enabled` is off. */
|
|
55
|
+
DISABLED: 'TELEMETRY_DISABLED',
|
|
56
|
+
/** 400: the SQL guard refused the statement. */
|
|
57
|
+
QUERY_REJECTED: 'TELEMETRY_QUERY_REJECTED',
|
|
58
|
+
/** 400: the store refused the statement. */
|
|
59
|
+
QUERY_FAILED: 'TELEMETRY_QUERY_FAILED',
|
|
60
|
+
/** 504: the statement timed out. */
|
|
61
|
+
QUERY_TIMEOUT: 'TELEMETRY_QUERY_TIMEOUT',
|
|
62
|
+
/** 409: `telemetry.assistant.enabled` is off. */
|
|
63
|
+
ASSISTANT_DISABLED: 'TELEMETRY_ASSISTANT_DISABLED',
|
|
64
|
+
/** 409: no assistant provider or model is selected. */
|
|
65
|
+
ASSISTANT_NOT_CONFIGURED: 'TELEMETRY_ASSISTANT_NOT_CONFIGURED',
|
|
66
|
+
/** 400: a dashboard filter value was not seen in the range. */
|
|
67
|
+
DASHBOARD_BAD_FILTER: 'TELEMETRY_DASHBOARD_BAD_FILTER',
|
|
68
|
+
/** 400: the events `cursor` is malformed. */
|
|
69
|
+
DASHBOARD_BAD_CURSOR: 'TELEMETRY_DASHBOARD_BAD_CURSOR',
|
|
70
|
+
};
|
|
71
|
+
const STATUS = {
|
|
72
|
+
TELEMETRY_NOT_CONFIGURED: common_1.HttpStatus.SERVICE_UNAVAILABLE,
|
|
73
|
+
TELEMETRY_UNREACHABLE: common_1.HttpStatus.SERVICE_UNAVAILABLE,
|
|
74
|
+
TELEMETRY_DISABLED: common_1.HttpStatus.CONFLICT,
|
|
75
|
+
TELEMETRY_QUERY_REJECTED: common_1.HttpStatus.BAD_REQUEST,
|
|
76
|
+
TELEMETRY_QUERY_FAILED: common_1.HttpStatus.BAD_REQUEST,
|
|
77
|
+
TELEMETRY_QUERY_TIMEOUT: common_1.HttpStatus.GATEWAY_TIMEOUT,
|
|
78
|
+
TELEMETRY_ASSISTANT_DISABLED: common_1.HttpStatus.CONFLICT,
|
|
79
|
+
TELEMETRY_ASSISTANT_NOT_CONFIGURED: common_1.HttpStatus.CONFLICT,
|
|
80
|
+
TELEMETRY_DASHBOARD_BAD_FILTER: common_1.HttpStatus.BAD_REQUEST,
|
|
81
|
+
TELEMETRY_DASHBOARD_BAD_CURSOR: common_1.HttpStatus.BAD_REQUEST,
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* A telemetry failure with its reason in `details.reason`; the HTTP status
|
|
85
|
+
* follows from the reason.
|
|
86
|
+
*
|
|
87
|
+
* @stability stable
|
|
88
|
+
*/
|
|
89
|
+
class TelemetryHttpError extends common_1.HttpException {
|
|
90
|
+
reason;
|
|
91
|
+
constructor(
|
|
92
|
+
/** Why it failed. */
|
|
93
|
+
reason, message, details = {}) {
|
|
94
|
+
// `reason` last, so a caller-supplied detail can never contradict it.
|
|
95
|
+
super({ message, details: { ...details, reason } }, STATUS[reason]);
|
|
96
|
+
this.reason = reason;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.TelemetryHttpError = TelemetryHttpError;
|
|
100
|
+
//# sourceMappingURL=telemetry-query.errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-query.errors.js","sourceRoot":"","sources":["../../../src/telemetry/query/telemetry-query.errors.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAE3D,gFAAgF;AAChF,kEAAkE;AAClE,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,oEAAoE;AACpE,wCAAwC;AACxC,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,gFAAgF;AAChF,0EAA0E;AAC1E,wEAAwE;AACxE,8EAA8E;AAC9E,4EAA4E;AAC5E,0EAA0E;AAC1E,yEAAyE;AACzE,+CAA+C;AAC/C,wDAAwD;AACxD,qEAAqE;AACrE,EAAE;AACF,0EAA0E;AAC1E,qEAAqE;AACrE,EAAE;AACF,mFAAmF;AACnF,gFAAgF;AAChF,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,2EAA2E;AAC3E,gFAAgF;AAEhF;;;;GAIG;AACU,QAAA,uBAAuB,GAAG;IACrC,6CAA6C;IAC7C,cAAc,EAAE,0BAA0B;IAC1C,qCAAqC;IACrC,WAAW,EAAE,uBAAuB;IACpC,uCAAuC;IACvC,QAAQ,EAAE,oBAAoB;IAC9B,gDAAgD;IAChD,cAAc,EAAE,0BAA0B;IAC1C,4CAA4C;IAC5C,YAAY,EAAE,wBAAwB;IACtC,oCAAoC;IACpC,aAAa,EAAE,yBAAyB;IACxC,iDAAiD;IACjD,kBAAkB,EAAE,8BAA8B;IAClD,uDAAuD;IACvD,wBAAwB,EAAE,oCAAoC;IAC9D,+DAA+D;IAC/D,oBAAoB,EAAE,gCAAgC;IACtD,6CAA6C;IAC7C,oBAAoB,EAAE,gCAAgC;CAC9C,CAAC;AASX,MAAM,MAAM,GAA6C;IACvD,wBAAwB,EAAE,mBAAU,CAAC,mBAAmB;IACxD,qBAAqB,EAAE,mBAAU,CAAC,mBAAmB;IACrD,kBAAkB,EAAE,mBAAU,CAAC,QAAQ;IACvC,wBAAwB,EAAE,mBAAU,CAAC,WAAW;IAChD,sBAAsB,EAAE,mBAAU,CAAC,WAAW;IAC9C,uBAAuB,EAAE,mBAAU,CAAC,eAAe;IACnD,4BAA4B,EAAE,mBAAU,CAAC,QAAQ;IACjD,kCAAkC,EAAE,mBAAU,CAAC,QAAQ;IACvD,8BAA8B,EAAE,mBAAU,CAAC,WAAW;IACtD,8BAA8B,EAAE,mBAAU,CAAC,WAAW;CACvD,CAAC;AAEF;;;;;GAKG;AACH,MAAa,kBAAmB,SAAQ,sBAAa;IAGxC;IAFX;IACE,qBAAqB;IACZ,MAA4B,EACrC,OAAe,EACf,UAAmC,EAAE;QAErC,sEAAsE;QACtE,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAL3D,WAAM,GAAN,MAAM,CAAsB;IAMvC,CAAC;CACF;AAVD,gDAUC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { TelemetryColumnType, TelemetryQueryRunResult } from '../dto/telemetry-query.dto';
|
|
2
|
+
import { GreptimeClient } from '../greptime/greptime.client';
|
|
3
|
+
import { type TelemetryAuditSink } from '../ports';
|
|
4
|
+
import { TelemetrySettingsService } from '../telemetry-settings.service';
|
|
5
|
+
/**
|
|
6
|
+
* Who runs a statement; chooses the audit action.
|
|
7
|
+
*
|
|
8
|
+
* @stability experimental
|
|
9
|
+
*/
|
|
10
|
+
export type TelemetryQuerySource = 'explorer' | 'assistant' | 'export';
|
|
11
|
+
/**
|
|
12
|
+
* How `TelemetryQueryService.run` runs one statement.
|
|
13
|
+
*
|
|
14
|
+
* @stability experimental
|
|
15
|
+
*/
|
|
16
|
+
export interface TelemetryQueryRunOptions {
|
|
17
|
+
/** Row cap for this call; clamped to `telemetry.query.maxRows`, which is also the default. */
|
|
18
|
+
maxRows?: number;
|
|
19
|
+
/** Who is asking. Chooses the audit action. Default `explorer`. */
|
|
20
|
+
source?: TelemetryQuerySource;
|
|
21
|
+
/** Abandons the statement when aborted (the assistant's client went away, #536). */
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
}
|
|
24
|
+
/** Audit `action` per source. */
|
|
25
|
+
export declare const TELEMETRY_QUERY_AUDIT_ACTIONS: Record<TelemetryQuerySource, string>;
|
|
26
|
+
/** How much of the SQL text an audit row keeps. */
|
|
27
|
+
export declare const TELEMETRY_AUDIT_SQL_MAX = 4000;
|
|
28
|
+
export declare function columnTypeName(dataTypeID: number): TelemetryColumnType;
|
|
29
|
+
/**
|
|
30
|
+
* A wire value as something `JSON.stringify` reproduces faithfully:
|
|
31
|
+
* Buffer → base64, bigint → decimal string, Date → ISO string, non-finite
|
|
32
|
+
* number → its name (JSON would silently turn it into null), arrays and
|
|
33
|
+
* plain objects recursively. `int8`/`numeric`/timestamps already arrive as
|
|
34
|
+
* strings from `GreptimeClient` and stay that way.
|
|
35
|
+
*/
|
|
36
|
+
export declare function toJsonSafe(value: unknown): unknown;
|
|
37
|
+
/**
|
|
38
|
+
* The one entry point for caller-supplied SQL (the explorer, the export and
|
|
39
|
+
* the assistant): the SQL guard, the row cap, the timeout and an audit row.
|
|
40
|
+
* Exported by `TelemetryModule`.
|
|
41
|
+
*
|
|
42
|
+
* @stability experimental
|
|
43
|
+
*/
|
|
44
|
+
export declare class TelemetryQueryService {
|
|
45
|
+
private readonly greptime;
|
|
46
|
+
private readonly settings;
|
|
47
|
+
private readonly auditSink;
|
|
48
|
+
private readonly logger;
|
|
49
|
+
constructor(greptime: GreptimeClient, settings: TelemetrySettingsService, auditSink: TelemetryAuditSink);
|
|
50
|
+
/**
|
|
51
|
+
* Runs one read-only statement for `userId`. Throws `TelemetryHttpError`
|
|
52
|
+
* (see `telemetry-query.errors.ts`) for every expected failure.
|
|
53
|
+
*/
|
|
54
|
+
run(userId: string, sql: string, opts?: TelemetryQueryRunOptions): Promise<TelemetryQueryRunResult>;
|
|
55
|
+
private audit;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=telemetry-query.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-query.service.d.ts","sourceRoot":"","sources":["../../../src/telemetry/query/telemetry-query.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAmCzE;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,oFAAoF;IACpF,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,iCAAiC;AACjC,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAI9E,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAsB7C,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAuBlD;AAED;;;;;;GAMG;AACH,qBACa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACK,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAG9C,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,wBAAwB,EACJ,SAAS,EAAE,kBAAkB;IAG9E;;;OAGG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,wBAA6B,GAAG,OAAO,CAAC,uBAAuB,CAAC;YAuE/F,KAAK;CAmBpB"}
|