@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,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Host classification for the egress inventory (issue #773, PP-13.2)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// PURE: no DNS lookup, no socket, no `fetch`. A name is judged by its shape
|
|
7
|
+
// alone, because the doctor must be safe to run anywhere at any time, and in an
|
|
8
|
+
// air-gapped network every lookup of a public name simply hangs.
|
|
9
|
+
//
|
|
10
|
+
// The rules are conservative in one direction only: a name we cannot place is
|
|
11
|
+
// `public` (it is reachable only if the internet is), and a string we cannot
|
|
12
|
+
// even parse is `unknown`, which the `network.egress` check grades as public
|
|
13
|
+
// for an air-gapped install (fail closed).
|
|
14
|
+
// =============================================================================
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.hostnameOf = hostnameOf;
|
|
17
|
+
exports.classifyHost = classifyHost;
|
|
18
|
+
exports.scopeOfHosts = scopeOfHosts;
|
|
19
|
+
exports.egressDependency = egressDependency;
|
|
20
|
+
const egress_types_1 = require("./egress.types");
|
|
21
|
+
/** Suffixes that only resolve inside a private network (RFC 6762, RFC 8375, Kubernetes, common LAN conventions). */
|
|
22
|
+
const PRIVATE_SUFFIXES = ['.internal', '.local', '.lan', '.home.arpa', '.svc', '.cluster.local', '.localhost'];
|
|
23
|
+
const HOSTNAME_LABEL = /^[a-z0-9_](?:[a-z0-9_-]{0,61}[a-z0-9_])?$/;
|
|
24
|
+
function isIpv4(host) {
|
|
25
|
+
const parts = host.split('.');
|
|
26
|
+
return parts.length === 4 && parts.every((p) => /^\d{1,3}$/.test(p) && Number(p) <= 255);
|
|
27
|
+
}
|
|
28
|
+
function isPrivateIpv4(host) {
|
|
29
|
+
const [a, b] = host.split('.').map(Number);
|
|
30
|
+
return (a === 10 ||
|
|
31
|
+
a === 127 ||
|
|
32
|
+
(a === 172 && b >= 16 && b <= 31) ||
|
|
33
|
+
(a === 192 && b === 168) ||
|
|
34
|
+
(a === 169 && b === 254));
|
|
35
|
+
}
|
|
36
|
+
/** Expands `::`-compressed IPv6 into 8 hextets, or `null` when it is not IPv6. */
|
|
37
|
+
function ipv6Hextets(host) {
|
|
38
|
+
if (!host.includes(':') || !/^[0-9a-f:.]+$/.test(host))
|
|
39
|
+
return null;
|
|
40
|
+
const halves = host.split('::');
|
|
41
|
+
if (halves.length > 2)
|
|
42
|
+
return null;
|
|
43
|
+
const parse = (part) => {
|
|
44
|
+
if (part === '')
|
|
45
|
+
return [];
|
|
46
|
+
const out = [];
|
|
47
|
+
for (const piece of part.split(':')) {
|
|
48
|
+
if (!/^[0-9a-f]{1,4}$/.test(piece))
|
|
49
|
+
return null;
|
|
50
|
+
out.push(parseInt(piece, 16));
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
};
|
|
54
|
+
const head = parse(halves[0] ?? '');
|
|
55
|
+
const tail = halves.length === 2 ? parse(halves[1] ?? '') : [];
|
|
56
|
+
if (!head || !tail)
|
|
57
|
+
return null;
|
|
58
|
+
if (halves.length === 1)
|
|
59
|
+
return head.length === 8 ? head : null;
|
|
60
|
+
const missing = 8 - head.length - tail.length;
|
|
61
|
+
if (missing < 1)
|
|
62
|
+
return null;
|
|
63
|
+
return [...head, ...new Array(missing).fill(0), ...tail];
|
|
64
|
+
}
|
|
65
|
+
function isPrivateIpv6(hextets) {
|
|
66
|
+
const first = hextets[0] ?? 0;
|
|
67
|
+
const loopback = hextets.slice(0, 7).every((h) => h === 0) && hextets[7] === 1;
|
|
68
|
+
return loopback || (first & 0xfe00) === 0xfc00 || (first & 0xffc0) === 0xfe80;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Reduces a URL, a `host:port` string or a bare name to its lower-case
|
|
72
|
+
* hostname: no scheme, userinfo, port, path, query or fragment, and no IPv6
|
|
73
|
+
* brackets. Returns `null` for an empty or unparsable value. Pure.
|
|
74
|
+
*
|
|
75
|
+
* @param value - `https://user:pw@api.openai.com:443/v1?x=1`, `minio:9000`, `[::1]`, `smtp.corp.internal`.
|
|
76
|
+
* @returns `api.openai.com`, `minio`, `::1`, `smtp.corp.internal`; or `null`.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* hostnameOf('http://ollama:11434/v1'); // 'ollama'
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @stability experimental
|
|
84
|
+
*/
|
|
85
|
+
function hostnameOf(value) {
|
|
86
|
+
if (typeof value !== 'string')
|
|
87
|
+
return null;
|
|
88
|
+
let rest = value.trim().toLowerCase();
|
|
89
|
+
if (rest === '')
|
|
90
|
+
return null;
|
|
91
|
+
const scheme = /^[a-z][a-z0-9+.-]*:\/\//.exec(rest);
|
|
92
|
+
if (scheme)
|
|
93
|
+
rest = rest.slice(scheme[0].length);
|
|
94
|
+
else if (rest.startsWith('//'))
|
|
95
|
+
rest = rest.slice(2);
|
|
96
|
+
rest = rest.split(/[/?#]/, 1)[0] ?? '';
|
|
97
|
+
const at = rest.lastIndexOf('@');
|
|
98
|
+
if (at >= 0)
|
|
99
|
+
rest = rest.slice(at + 1);
|
|
100
|
+
let host;
|
|
101
|
+
if (rest.startsWith('[')) {
|
|
102
|
+
const close = rest.indexOf(']');
|
|
103
|
+
if (close < 0)
|
|
104
|
+
return null;
|
|
105
|
+
host = rest.slice(1, close);
|
|
106
|
+
if (!ipv6Hextets(host))
|
|
107
|
+
return null;
|
|
108
|
+
return host;
|
|
109
|
+
}
|
|
110
|
+
// A bare IPv6 literal (more than one colon, no brackets) has no port to strip.
|
|
111
|
+
if ((rest.match(/:/g) ?? []).length > 1)
|
|
112
|
+
return ipv6Hextets(rest) ? rest : null;
|
|
113
|
+
host = rest.split(':', 1)[0] ?? '';
|
|
114
|
+
if (host.endsWith('.'))
|
|
115
|
+
host = host.slice(0, -1);
|
|
116
|
+
if (host === '' || host.length > 253)
|
|
117
|
+
return null;
|
|
118
|
+
if (!host.split('.').every((label) => HOSTNAME_LABEL.test(label)))
|
|
119
|
+
return null;
|
|
120
|
+
return host;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Where `host` lives, judged by its shape alone. No DNS lookup, no network I/O.
|
|
124
|
+
*
|
|
125
|
+
* Private: `localhost`; single-label names (Docker service names such as
|
|
126
|
+
* `minio`, `greptimedb`, `ollama`); IPv4 in 10/8, 172.16/12, 192.168/16, 127/8,
|
|
127
|
+
* 169.254/16; IPv6 `::1`, `fc00::/7`, `fe80::/10`; names ending in `.internal`,
|
|
128
|
+
* `.local`, `.lan`, `.home.arpa`, `.svc`, `.cluster.local` (or `.localhost`).
|
|
129
|
+
* Everything else is public. Empty or unparsable is `unknown`. A port, scheme,
|
|
130
|
+
* path or brackets are stripped first ({@link hostnameOf}).
|
|
131
|
+
*
|
|
132
|
+
* @param host - a hostname, `host:port`, IP literal or URL.
|
|
133
|
+
* @returns the scope.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```ts
|
|
137
|
+
* classifyHost('minio:9000'); // 'private'
|
|
138
|
+
* classifyHost('contoso.openai.azure.com'); // 'public'
|
|
139
|
+
* classifyHost(''); // 'unknown'
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* @extensionPoint registry
|
|
143
|
+
* @stability experimental
|
|
144
|
+
*/
|
|
145
|
+
function classifyHost(host) {
|
|
146
|
+
const name = hostnameOf(host);
|
|
147
|
+
if (name === null)
|
|
148
|
+
return 'unknown';
|
|
149
|
+
const v6 = ipv6Hextets(name);
|
|
150
|
+
if (v6)
|
|
151
|
+
return isPrivateIpv6(v6) ? 'private' : 'public';
|
|
152
|
+
if (isIpv4(name))
|
|
153
|
+
return isPrivateIpv4(name) ? 'private' : 'public';
|
|
154
|
+
if (/^[\d.]+$/.test(name))
|
|
155
|
+
return 'unknown';
|
|
156
|
+
if (name === 'localhost' || !name.includes('.'))
|
|
157
|
+
return 'private';
|
|
158
|
+
if (PRIVATE_SUFFIXES.some((suffix) => name.endsWith(suffix)))
|
|
159
|
+
return 'private';
|
|
160
|
+
return 'public';
|
|
161
|
+
}
|
|
162
|
+
const SCOPE_RANK = { private: 0, unknown: 1, public: 2 };
|
|
163
|
+
/**
|
|
164
|
+
* The worst scope over `hosts` (`public`, then `unknown`, then `private`); `unknown`
|
|
165
|
+
* when there is no host at all. Pure.
|
|
166
|
+
*
|
|
167
|
+
* @param hosts - hostnames (or anything {@link classifyHost} accepts).
|
|
168
|
+
* @returns the scope the dependency is graded on.
|
|
169
|
+
*
|
|
170
|
+
* @stability experimental
|
|
171
|
+
*/
|
|
172
|
+
function scopeOfHosts(hosts) {
|
|
173
|
+
if (hosts.length === 0)
|
|
174
|
+
return 'unknown';
|
|
175
|
+
return hosts
|
|
176
|
+
.map((host) => classifyHost(host))
|
|
177
|
+
.reduce((worst, scope) => (SCOPE_RANK[scope] > SCOPE_RANK[worst] ? scope : worst), 'private');
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Builds an {@link EgressDependency} from a contributor's input: every entry of
|
|
181
|
+
* `hosts` is reduced to its hostname ({@link hostnameOf}; empty and unparsable
|
|
182
|
+
* ones are dropped), de-duplicated in order, capped at {@link EGRESS_MAX_HOSTS},
|
|
183
|
+
* and `scope` is computed with {@link scopeOfHosts}. This is the one way a
|
|
184
|
+
* contributor should build an entry: it guarantees no URL path, query, port or
|
|
185
|
+
* userinfo leaves `describe()`.
|
|
186
|
+
*
|
|
187
|
+
* @param input - the dependency, with raw `hosts`.
|
|
188
|
+
* @returns the normalised dependency.
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```ts
|
|
192
|
+
* egressDependency({ id: 'email.smtp', capability: 'Email (SMTP)', direction: 'server',
|
|
193
|
+
* enabled: true, required: false, hosts: ['smtp.corp.internal'], degradation: 'No email is sent' });
|
|
194
|
+
* ```
|
|
195
|
+
*
|
|
196
|
+
* @extensionPoint registry
|
|
197
|
+
* @stability experimental
|
|
198
|
+
*/
|
|
199
|
+
function egressDependency(input) {
|
|
200
|
+
const hosts = [];
|
|
201
|
+
for (const raw of input.hosts) {
|
|
202
|
+
const host = hostnameOf(raw);
|
|
203
|
+
if (host !== null && !hosts.includes(host))
|
|
204
|
+
hosts.push(host);
|
|
205
|
+
if (hosts.length >= egress_types_1.EGRESS_MAX_HOSTS)
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
return { ...input, hosts, scope: scopeOfHosts(hosts) };
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=classify-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify-host.js","sourceRoot":"","sources":["../../../src/doctor/egress/classify-host.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,qEAAqE;AACrE,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,iEAAiE;AACjE,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,2CAA2C;AAC3C,gFAAgF;;AAsEhF,gCA8BC;AAyBD,oCAYC;AAaD,oCAKC;AAsBD,4CAQC;AAvLD,iDAAkD;AAGlD,oHAAoH;AACpH,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;AAE/G,MAAM,cAAc,GAAG,2CAA2C,CAAC;AAEnE,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAqC,CAAC;IAC/E,OAAO,CACL,CAAC,KAAK,EAAE;QACR,CAAC,KAAK,GAAG;QACT,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;QACxB,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CACzB,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAmB,EAAE;QAC9C,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,KAAK,CAAS,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,aAAa,CAAC,OAAiB;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/E,OAAO,QAAQ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC;AAChF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,UAAU,CAAC,KAAgC;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,MAAM;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,EAAE,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvC,IAAI,IAAY,CAAC;IACjB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAEhF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,YAAY,CAAC,IAA+B;IAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAEpC,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,EAAE;QAAE,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAE5C,IAAI,IAAI,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/E,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,GAA0C,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAEhG;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAAC,KAAwB;IACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SACjC,MAAM,CAAc,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;AAC/G,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,MAAM,IAAI,+BAAgB;YAAE,MAAM;IAC9C,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { OnApplicationBootstrap } from '@nestjs/common';
|
|
2
|
+
import type { EgressContributor } from './egress.types';
|
|
3
|
+
/**
|
|
4
|
+
* The modules that describe the deployment's outbound dependencies. The
|
|
5
|
+
* `network.egress` doctor check reads every contributor; a support bundle may
|
|
6
|
+
* read the same inventory.
|
|
7
|
+
*
|
|
8
|
+
* @stability experimental
|
|
9
|
+
*/
|
|
10
|
+
export declare class EgressRegistry implements OnApplicationBootstrap {
|
|
11
|
+
private readonly contributors;
|
|
12
|
+
/**
|
|
13
|
+
* Adds `contributor`. Call it from the contributor's own `onModuleInit`.
|
|
14
|
+
*
|
|
15
|
+
* @param contributor - its `id` must be unique across the application.
|
|
16
|
+
* @throws RegistryError `DUPLICATE_ID` when another contributor already uses
|
|
17
|
+
* its id, `FROZEN` after the application has bootstrapped.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* onModuleInit(): void {
|
|
22
|
+
* this.egress.register(this);
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @extensionPoint registry
|
|
27
|
+
*/
|
|
28
|
+
register(contributor: EgressContributor): void;
|
|
29
|
+
/** Every registered contributor, in registration order (a copy). */
|
|
30
|
+
list(): EgressContributor[];
|
|
31
|
+
/** Refuses further registrations once every module's `onModuleInit` has run. */
|
|
32
|
+
onApplicationBootstrap(): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=egress.registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egress.registry.d.ts","sourceRoot":"","sources":["../../../src/doctor/egress/egress.registry.ts"],"names":[],"mappings":"AAaA,OAAO,EAAc,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;;;GAMG;AACH,qBACa,cAAe,YAAW,sBAAsB;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAM1B;IAEH;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAI9C,oEAAoE;IACpE,IAAI,IAAI,iBAAiB,EAAE;IAI3B,gFAAgF;IAChF,sBAAsB,IAAI,IAAI;CAG/B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Egress dependency registry (issue #773, PP-13.2)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// The one place that knows which modules describe outbound dependencies. It
|
|
7
|
+
// mirrors `DoctorCheckRegistry` exactly, for the same reasons (read that
|
|
8
|
+
// file's header): explicit self-registration from each contributor's own
|
|
9
|
+
// `onModuleInit`, duplicate ids throw, frozen in `onApplicationBootstrap`.
|
|
10
|
+
//
|
|
11
|
+
// Provided (globally) by `DoctorModule.forRoot()`, so a feature module
|
|
12
|
+
// contributes by providing its contributor, without importing the Doctor.
|
|
13
|
+
// =============================================================================
|
|
14
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
15
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
+
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;
|
|
18
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.EgressRegistry = void 0;
|
|
22
|
+
const common_1 = require("@nestjs/common");
|
|
23
|
+
const index_1 = require("../../core/index");
|
|
24
|
+
/**
|
|
25
|
+
* The modules that describe the deployment's outbound dependencies. The
|
|
26
|
+
* `network.egress` doctor check reads every contributor; a support bundle may
|
|
27
|
+
* read the same inventory.
|
|
28
|
+
*
|
|
29
|
+
* @stability experimental
|
|
30
|
+
*/
|
|
31
|
+
let EgressRegistry = class EgressRegistry {
|
|
32
|
+
contributors = new index_1.Registry({
|
|
33
|
+
name: 'egress-contributors',
|
|
34
|
+
idOf: (contributor) => contributor.id,
|
|
35
|
+
describeDuplicate: (existing, incoming) => `Duplicate egress contributor id "${incoming.id}": ${existing.constructor.name} and ` +
|
|
36
|
+
`${incoming.constructor.name} both register it. Contributor ids must be unique.`,
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Adds `contributor`. Call it from the contributor's own `onModuleInit`.
|
|
40
|
+
*
|
|
41
|
+
* @param contributor - its `id` must be unique across the application.
|
|
42
|
+
* @throws RegistryError `DUPLICATE_ID` when another contributor already uses
|
|
43
|
+
* its id, `FROZEN` after the application has bootstrapped.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* onModuleInit(): void {
|
|
48
|
+
* this.egress.register(this);
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @extensionPoint registry
|
|
53
|
+
*/
|
|
54
|
+
register(contributor) {
|
|
55
|
+
this.contributors.register(contributor);
|
|
56
|
+
}
|
|
57
|
+
/** Every registered contributor, in registration order (a copy). */
|
|
58
|
+
list() {
|
|
59
|
+
return this.contributors.list();
|
|
60
|
+
}
|
|
61
|
+
/** Refuses further registrations once every module's `onModuleInit` has run. */
|
|
62
|
+
onApplicationBootstrap() {
|
|
63
|
+
this.contributors.freeze();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
exports.EgressRegistry = EgressRegistry;
|
|
67
|
+
exports.EgressRegistry = EgressRegistry = __decorate([
|
|
68
|
+
(0, common_1.Injectable)()
|
|
69
|
+
], EgressRegistry);
|
|
70
|
+
//# sourceMappingURL=egress.registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egress.registry.js","sourceRoot":"","sources":["../../../src/doctor/egress/egress.registry.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,mDAAmD;AACnD,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,gFAAgF;;;;;;;;;AAEhF,2CAAoE;AAEpE,4CAA4C;AAG5C;;;;;;GAMG;AAEI,IAAM,cAAc,GAApB,MAAM,cAAc;IACR,YAAY,GAAG,IAAI,gBAAQ,CAAoB;QAC9D,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE;QACrC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CACxC,oCAAoC,QAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO;YACrF,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,oDAAoD;KACnF,CAAC,CAAC;IAEH;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,WAA8B;QACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,oEAAoE;IACpE,IAAI;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,gFAAgF;IAChF,sBAAsB;QACpB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;CACF,CAAA;AAtCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;GACA,cAAc,CAsC1B"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a host lives, as far as configuration can tell without a DNS lookup.
|
|
3
|
+
*
|
|
4
|
+
* - `public`: reachable only over the internet (`api.openai.com`).
|
|
5
|
+
* - `private`: on the deployment's own network (`localhost`, `minio`,
|
|
6
|
+
* `10.0.0.5`, `smtp.corp.internal`).
|
|
7
|
+
* - `unknown`: no host, or one that could not be parsed. Graded as `public`
|
|
8
|
+
* for an air-gapped deployment (fail closed).
|
|
9
|
+
*
|
|
10
|
+
* @stability experimental
|
|
11
|
+
*/
|
|
12
|
+
export type EgressScope = 'public' | 'private' | 'unknown';
|
|
13
|
+
/**
|
|
14
|
+
* Which side opens the connection: the API process, the user's browser
|
|
15
|
+
* (a CDN bundle, a provider's realtime endpoint), or both (presigned object
|
|
16
|
+
* storage URLs).
|
|
17
|
+
*
|
|
18
|
+
* @stability experimental
|
|
19
|
+
*/
|
|
20
|
+
export type EgressDirection = 'server' | 'browser' | 'both';
|
|
21
|
+
/**
|
|
22
|
+
* Every value `DEPLOYMENT_NETWORK` accepts, in documentation order.
|
|
23
|
+
*
|
|
24
|
+
* @stability experimental
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEPLOYMENT_NETWORKS: readonly ["online", "air-gapped"];
|
|
27
|
+
/**
|
|
28
|
+
* Whether the deployment has internet egress: `online` (the default) or
|
|
29
|
+
* `air-gapped`. A deployment-level fact the app reads from `DEPLOYMENT_NETWORK`.
|
|
30
|
+
*
|
|
31
|
+
* @stability experimental
|
|
32
|
+
*/
|
|
33
|
+
export type DeploymentNetwork = (typeof DEPLOYMENT_NETWORKS)[number];
|
|
34
|
+
/**
|
|
35
|
+
* The most hosts one dependency reports; the rest are dropped (a push service
|
|
36
|
+
* fleet can be long, and the report is a summary, not a firewall rule set).
|
|
37
|
+
*
|
|
38
|
+
* @stability experimental
|
|
39
|
+
*/
|
|
40
|
+
export declare const EGRESS_MAX_HOSTS = 20;
|
|
41
|
+
/**
|
|
42
|
+
* One outbound dependency of the running deployment: what an
|
|
43
|
+
* {@link EgressContributor} returns. Build it with `egressDependency()`, which
|
|
44
|
+
* reduces hosts to hostnames and computes `scope`.
|
|
45
|
+
*
|
|
46
|
+
* @extensionPoint registry
|
|
47
|
+
* @stability experimental
|
|
48
|
+
*/
|
|
49
|
+
export interface EgressDependency {
|
|
50
|
+
/** Stable, dotted, unique in the inventory: `auth.google`, `ai.provider.openai`, `storage.s3`. */
|
|
51
|
+
id: string;
|
|
52
|
+
/** Human label: "Google sign-in", "AI provider: OpenAI". */
|
|
53
|
+
capability: string;
|
|
54
|
+
/** Which side opens the connection. */
|
|
55
|
+
direction: EgressDirection;
|
|
56
|
+
/** Configured AND switched on right now. A disabled dependency is listed but never graded. */
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
/** Hostnames only (no scheme, userinfo, port, path or query); de-duplicated, at most {@link EGRESS_MAX_HOSTS}. */
|
|
59
|
+
hosts: string[];
|
|
60
|
+
/** The worst scope over `hosts` (`public`, then `unknown`, then `private`); `unknown` when there is no host. */
|
|
61
|
+
scope: EgressScope;
|
|
62
|
+
/** The deployment cannot do its core job without it (the only sign-in provider). */
|
|
63
|
+
required: boolean;
|
|
64
|
+
/** One line: what stops working without egress. */
|
|
65
|
+
degradation: string;
|
|
66
|
+
/** The web route that configures it, e.g. `/admin/settings/ai`. */
|
|
67
|
+
settingsPath?: string;
|
|
68
|
+
/** A count behind the dependency (push subscriptions, say). Counts only, never values. */
|
|
69
|
+
count?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* What a contributor passes to {@link egressDependency}: an
|
|
73
|
+
* {@link EgressDependency} without `scope`, whose `hosts` may still be URLs or
|
|
74
|
+
* `host:port` strings. The helper reduces them to hostnames and computes the scope.
|
|
75
|
+
*
|
|
76
|
+
* @stability experimental
|
|
77
|
+
*/
|
|
78
|
+
export type EgressDependencyInput = Omit<EgressDependency, 'scope' | 'hosts'> & {
|
|
79
|
+
/** URLs, `host:port` strings or bare hostnames; empty and unparsable entries are dropped. */
|
|
80
|
+
hosts: readonly (string | null | undefined)[];
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* A module's description of its outbound dependencies. An `@Injectable()` in
|
|
84
|
+
* the module that owns the capability, which injects `EgressRegistry` and calls
|
|
85
|
+
* `register(this)` from its `onModuleInit`.
|
|
86
|
+
*
|
|
87
|
+
* `describe()` is READ-ONLY (the doctor's rule 3): settings and configuration
|
|
88
|
+
* reads only, no network I/O, no write, no job, no model call. It returns no
|
|
89
|
+
* secret material: hostnames only (rule 4). It may throw; the `network.egress`
|
|
90
|
+
* check turns a throw into one `unknown` entry under the contributor's id.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* @Injectable()
|
|
95
|
+
* export class DocsEgressContributor implements EgressContributor, OnModuleInit {
|
|
96
|
+
* readonly id = 'docs';
|
|
97
|
+
* constructor(private readonly egress: EgressRegistry) {}
|
|
98
|
+
* onModuleInit(): void { this.egress.register(this); }
|
|
99
|
+
* async describe(): Promise<EgressDependency[]> {
|
|
100
|
+
* return [egressDependency({ id: 'docs.scalar-cdn', capability: 'API reference (Scalar CDN)',
|
|
101
|
+
* direction: 'browser', enabled: true, required: false, hosts: ['https://cdn.jsdelivr.net'],
|
|
102
|
+
* degradation: '/api/docs renders without its bundle' })];
|
|
103
|
+
* }
|
|
104
|
+
* }
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @extensionPoint registry
|
|
108
|
+
* @stability experimental
|
|
109
|
+
*/
|
|
110
|
+
export interface EgressContributor {
|
|
111
|
+
/** Unique across the application: `auth`, `ai.providers`, `docs`. */
|
|
112
|
+
readonly id: string;
|
|
113
|
+
/** Read-only, no network I/O, hostnames only. */
|
|
114
|
+
describe(): Promise<EgressDependency[]>;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Where the `network.egress` check reads `DEPLOYMENT_NETWORK` from: anything
|
|
118
|
+
* with a `network` property. The app binds it to its own parsed value under
|
|
119
|
+
* {@link DEPLOYMENT_NETWORK_SOURCE}; unbound, the check assumes `online`.
|
|
120
|
+
*
|
|
121
|
+
* @stability experimental
|
|
122
|
+
*/
|
|
123
|
+
export interface DeploymentNetworkSource {
|
|
124
|
+
/** The parsed `DEPLOYMENT_NETWORK`. */
|
|
125
|
+
readonly network: DeploymentNetwork;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The injection token of the app's {@link DeploymentNetworkSource}. Bind it
|
|
129
|
+
* once, globally (`{ provide: DEPLOYMENT_NETWORK_SOURCE, useExisting: <the app's service> }`).
|
|
130
|
+
*
|
|
131
|
+
* @extensionPoint token
|
|
132
|
+
* @stability experimental
|
|
133
|
+
*/
|
|
134
|
+
export declare const DEPLOYMENT_NETWORK_SOURCE: unique symbol;
|
|
135
|
+
//# sourceMappingURL=egress.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egress.types.d.ts","sourceRoot":"","sources":["../../../src/doctor/egress/egress.types.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;GAUG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,mCAAoC,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kGAAkG;IAClG,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,eAAe,CAAC;IAC3B,8FAA8F;IAC9F,OAAO,EAAE,OAAO,CAAC;IACjB,kHAAkH;IAClH,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gHAAgH;IAChH,KAAK,EAAE,WAAW,CAAC;IACnB,oFAAoF;IACpF,QAAQ,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG;IAC9E,6FAA6F;IAC7F,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;CAC/C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CACzC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACrC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,OAAO,MAA4C,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Outbound dependencies: the egress inventory's contract (issue #773, PP-13.2)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// Every capability that talks to a host outside the deployment (Google
|
|
7
|
+
// sign-in, an AI provider, a push service, an SMTP relay, an object store,
|
|
8
|
+
// GreptimeDB, the API docs CDN) describes that dependency here, through an
|
|
9
|
+
// `EgressContributor` its OWNING module registers with `EgressRegistry`. The
|
|
10
|
+
// `network.egress` doctor check reads the whole inventory and, when the
|
|
11
|
+
// deployment declares `DEPLOYMENT_NETWORK=air-gapped`, grades it.
|
|
12
|
+
//
|
|
13
|
+
// THE DOCTOR'S READ-ONLY RULE BINDS EVERY CONTRIBUTOR (doctor-check.interface.ts,
|
|
14
|
+
// rules 3 and 4): `describe()` reads settings and configuration only. No test
|
|
15
|
+
// service, no write, no job, no model call, no network I/O (no DNS lookup, no
|
|
16
|
+
// connect). It returns HOSTNAMES ONLY: never a URL, a path, a query, userinfo,
|
|
17
|
+
// a key, a region-scoped credential or a fingerprint.
|
|
18
|
+
// =============================================================================
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.DEPLOYMENT_NETWORK_SOURCE = exports.EGRESS_MAX_HOSTS = exports.DEPLOYMENT_NETWORKS = void 0;
|
|
21
|
+
/**
|
|
22
|
+
* Every value `DEPLOYMENT_NETWORK` accepts, in documentation order.
|
|
23
|
+
*
|
|
24
|
+
* @stability experimental
|
|
25
|
+
*/
|
|
26
|
+
exports.DEPLOYMENT_NETWORKS = ['online', 'air-gapped'];
|
|
27
|
+
/**
|
|
28
|
+
* The most hosts one dependency reports; the rest are dropped (a push service
|
|
29
|
+
* fleet can be long, and the report is a summary, not a firewall rule set).
|
|
30
|
+
*
|
|
31
|
+
* @stability experimental
|
|
32
|
+
*/
|
|
33
|
+
exports.EGRESS_MAX_HOSTS = 20;
|
|
34
|
+
/**
|
|
35
|
+
* The injection token of the app's {@link DeploymentNetworkSource}. Bind it
|
|
36
|
+
* once, globally (`{ provide: DEPLOYMENT_NETWORK_SOURCE, useExisting: <the app's service> }`).
|
|
37
|
+
*
|
|
38
|
+
* @extensionPoint token
|
|
39
|
+
* @stability experimental
|
|
40
|
+
*/
|
|
41
|
+
exports.DEPLOYMENT_NETWORK_SOURCE = Symbol('DEPLOYMENT_NETWORK_SOURCE');
|
|
42
|
+
//# sourceMappingURL=egress.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egress.types.js","sourceRoot":"","sources":["../../../src/doctor/egress/egress.types.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,wEAAwE;AACxE,kEAAkE;AAClE,EAAE;AACF,kFAAkF;AAClF,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,sDAAsD;AACtD,gFAAgF;;;AAwBhF;;;;GAIG;AACU,QAAA,mBAAmB,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAU,CAAC;AAUrE;;;;;GAKG;AACU,QAAA,gBAAgB,GAAG,EAAE,CAAC;AA4FnC;;;;;;GAMG;AACU,QAAA,yBAAyB,GAAkB,MAAM,CAAC,2BAA2B,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DEPLOYMENT_NETWORKS, DEPLOYMENT_NETWORK_SOURCE, EGRESS_MAX_HOSTS } from './egress.types';
|
|
2
|
+
export type { DeploymentNetwork, DeploymentNetworkSource, EgressContributor, EgressDependency, EgressDependencyInput, EgressDirection, EgressScope, } from './egress.types';
|
|
3
|
+
export { EgressRegistry } from './egress.registry';
|
|
4
|
+
export { classifyHost, egressDependency, hostnameOf, scopeOfHosts } from './classify-host';
|
|
5
|
+
export { AIR_GAPPED_RUNBOOK, NETWORK_EGRESS_CHECK_ID, NetworkEgressDoctorCheck, describeEgress, gradeEgress, } from './network-egress.doctor-check';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/egress/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClG,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,WAAW,GACZ,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The egress inventory (issue #773, PP-13.2): part of the doctor slice,
|
|
3
|
+
// re-exported from `../index.ts`. Explicit named exports only.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.gradeEgress = exports.describeEgress = exports.NetworkEgressDoctorCheck = exports.NETWORK_EGRESS_CHECK_ID = exports.AIR_GAPPED_RUNBOOK = exports.scopeOfHosts = exports.hostnameOf = exports.egressDependency = exports.classifyHost = exports.EgressRegistry = exports.EGRESS_MAX_HOSTS = exports.DEPLOYMENT_NETWORK_SOURCE = exports.DEPLOYMENT_NETWORKS = void 0;
|
|
6
|
+
var egress_types_1 = require("./egress.types");
|
|
7
|
+
Object.defineProperty(exports, "DEPLOYMENT_NETWORKS", { enumerable: true, get: function () { return egress_types_1.DEPLOYMENT_NETWORKS; } });
|
|
8
|
+
Object.defineProperty(exports, "DEPLOYMENT_NETWORK_SOURCE", { enumerable: true, get: function () { return egress_types_1.DEPLOYMENT_NETWORK_SOURCE; } });
|
|
9
|
+
Object.defineProperty(exports, "EGRESS_MAX_HOSTS", { enumerable: true, get: function () { return egress_types_1.EGRESS_MAX_HOSTS; } });
|
|
10
|
+
var egress_registry_1 = require("./egress.registry");
|
|
11
|
+
Object.defineProperty(exports, "EgressRegistry", { enumerable: true, get: function () { return egress_registry_1.EgressRegistry; } });
|
|
12
|
+
var classify_host_1 = require("./classify-host");
|
|
13
|
+
Object.defineProperty(exports, "classifyHost", { enumerable: true, get: function () { return classify_host_1.classifyHost; } });
|
|
14
|
+
Object.defineProperty(exports, "egressDependency", { enumerable: true, get: function () { return classify_host_1.egressDependency; } });
|
|
15
|
+
Object.defineProperty(exports, "hostnameOf", { enumerable: true, get: function () { return classify_host_1.hostnameOf; } });
|
|
16
|
+
Object.defineProperty(exports, "scopeOfHosts", { enumerable: true, get: function () { return classify_host_1.scopeOfHosts; } });
|
|
17
|
+
var network_egress_doctor_check_1 = require("./network-egress.doctor-check");
|
|
18
|
+
Object.defineProperty(exports, "AIR_GAPPED_RUNBOOK", { enumerable: true, get: function () { return network_egress_doctor_check_1.AIR_GAPPED_RUNBOOK; } });
|
|
19
|
+
Object.defineProperty(exports, "NETWORK_EGRESS_CHECK_ID", { enumerable: true, get: function () { return network_egress_doctor_check_1.NETWORK_EGRESS_CHECK_ID; } });
|
|
20
|
+
Object.defineProperty(exports, "NetworkEgressDoctorCheck", { enumerable: true, get: function () { return network_egress_doctor_check_1.NetworkEgressDoctorCheck; } });
|
|
21
|
+
Object.defineProperty(exports, "describeEgress", { enumerable: true, get: function () { return network_egress_doctor_check_1.describeEgress; } });
|
|
22
|
+
Object.defineProperty(exports, "gradeEgress", { enumerable: true, get: function () { return network_egress_doctor_check_1.gradeEgress; } });
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/egress/index.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,+DAA+D;;;AAE/D,+CAAkG;AAAzF,mHAAA,mBAAmB,OAAA;AAAE,yHAAA,yBAAyB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAUzE,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,iDAA2F;AAAlF,6GAAA,YAAY,OAAA;AAAE,iHAAA,gBAAgB,OAAA;AAAE,2GAAA,UAAU,OAAA;AAAE,6GAAA,YAAY,OAAA;AACjE,6EAMuC;AALrC,iIAAA,kBAAkB,OAAA;AAClB,sIAAA,uBAAuB,OAAA;AACvB,uIAAA,wBAAwB,OAAA;AACxB,6HAAA,cAAc,OAAA;AACd,0HAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import type { DoctorCheck, DoctorCheckOutcome } from '../doctor-check.interface';
|
|
3
|
+
import { DoctorCheckRegistry } from '../doctor-check.registry';
|
|
4
|
+
import { EgressRegistry } from './egress.registry';
|
|
5
|
+
import type { DeploymentNetwork, DeploymentNetworkSource, EgressDependency } from './egress.types';
|
|
6
|
+
/**
|
|
7
|
+
* The runbook every `warn`/`fail` remedy of `network.egress` names: one section
|
|
8
|
+
* per dependency id, with what breaks offline and how to make it internal.
|
|
9
|
+
*
|
|
10
|
+
* @stability experimental
|
|
11
|
+
*/
|
|
12
|
+
export declare const AIR_GAPPED_RUNBOOK = "docs/runbooks/air-gapped.md";
|
|
13
|
+
/**
|
|
14
|
+
* The id of the check: `network.egress`.
|
|
15
|
+
*
|
|
16
|
+
* @stability experimental
|
|
17
|
+
*/
|
|
18
|
+
export declare const NETWORK_EGRESS_CHECK_ID = "network.egress";
|
|
19
|
+
/**
|
|
20
|
+
* Runs every contributor of `registry` in parallel and concatenates their
|
|
21
|
+
* dependencies, in registration order. A contributor that throws (or returns
|
|
22
|
+
* something that is not an array) becomes ONE entry under its own id, scope
|
|
23
|
+
* `unknown`, enabled, so an air-gapped grading fails closed. Never throws.
|
|
24
|
+
*
|
|
25
|
+
* @param registry - the app's egress registry.
|
|
26
|
+
* @param onError - told the contributor id and message of each throw (for a log line).
|
|
27
|
+
* @returns the whole inventory.
|
|
28
|
+
*
|
|
29
|
+
* @stability experimental
|
|
30
|
+
*/
|
|
31
|
+
export declare function describeEgress(registry: Pick<EgressRegistry, 'list'>, onError?: (contributorId: string, message: string) => void): Promise<EgressDependency[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Pure: grades an inventory for a deployment network. Only ENABLED
|
|
34
|
+
* dependencies count; `unknown` counts as public.
|
|
35
|
+
*
|
|
36
|
+
* | network | finding | status |
|
|
37
|
+
* |---|---|---|
|
|
38
|
+
* | `online` | anything | `pass` (an inventory) |
|
|
39
|
+
* | `air-gapped` | every enabled dependency private | `pass` |
|
|
40
|
+
* | `air-gapped` | only optional dependencies public | `warn` |
|
|
41
|
+
* | `air-gapped` | a required dependency public | `fail` |
|
|
42
|
+
*
|
|
43
|
+
* `data` holds scalars only: `network`, `enabled`, `public`, `private`,
|
|
44
|
+
* `unknown`, `required_public` and `public_ids` (comma-joined, at most 500 characters).
|
|
45
|
+
*
|
|
46
|
+
* @param deps - the inventory ({@link describeEgress}).
|
|
47
|
+
* @param network - the deployment's declared network.
|
|
48
|
+
* @returns the check's outcome.
|
|
49
|
+
*
|
|
50
|
+
* @stability experimental
|
|
51
|
+
*/
|
|
52
|
+
export declare function gradeEgress(deps: readonly EgressDependency[], network: DeploymentNetwork): DoctorCheckOutcome;
|
|
53
|
+
/**
|
|
54
|
+
* `network` / `network.egress`: the deployment's outbound dependencies, graded
|
|
55
|
+
* for air-gap readiness when the app's {@link DeploymentNetworkSource} says
|
|
56
|
+
* `air-gapped` (`online` when none is bound). Provided by `DoctorModule.forRoot()`;
|
|
57
|
+
* the inventory comes from the app's `EgressContributor`s.
|
|
58
|
+
*
|
|
59
|
+
* @stability experimental
|
|
60
|
+
*/
|
|
61
|
+
export declare class NetworkEgressDoctorCheck implements DoctorCheck, OnModuleInit {
|
|
62
|
+
private readonly registry;
|
|
63
|
+
private readonly egress;
|
|
64
|
+
private readonly source?;
|
|
65
|
+
readonly id = "network.egress";
|
|
66
|
+
readonly category = "network";
|
|
67
|
+
readonly label = "Outbound dependencies (air-gap readiness)";
|
|
68
|
+
readonly timeoutMs = 5000;
|
|
69
|
+
private readonly logger;
|
|
70
|
+
constructor(registry: DoctorCheckRegistry, egress: EgressRegistry, source?: DeploymentNetworkSource | undefined);
|
|
71
|
+
/** Registers the check with the Doctor once the app's module initialises. */
|
|
72
|
+
onModuleInit(): void;
|
|
73
|
+
/** The declared network: the bound source's, or `online`. */
|
|
74
|
+
get network(): DeploymentNetwork;
|
|
75
|
+
/** Read-only: every contributor's `describe()`, then {@link gradeEgress}. Never throws. */
|
|
76
|
+
run(): Promise<DoctorCheckOutcome>;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=network-egress.doctor-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-egress.doctor-check.d.ts","sourceRoot":"","sources":["../../../src/doctor/egress/network-egress.doctor-check.ts"],"names":[],"mappings":"AAsBA,OAAO,EAA8B,YAAY,EAAY,MAAM,gBAAgB,CAAC;AAEpF,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAmB,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEnG;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,gCAAgC,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,mBAAmB,CAAC;AASxD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EACtC,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GACzD,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyB7B;AAeD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,kBAAkB,CA0D7G;AAED;;;;;;;GAOG;AACH,qBACa,wBAAyB,YAAW,WAAW,EAAE,YAAY;IAStE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACwB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAVzE,QAAQ,CAAC,EAAE,oBAA2B;IACtC,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,KAAK,+CAA+C;IAC7D,QAAQ,CAAC,SAAS,QAAS;IAE3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAGjD,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,cAAc,EACyB,MAAM,CAAC,EAAE,uBAAuB,YAAA;IAGlG,6EAA6E;IAC7E,YAAY,IAAI,IAAI;IAIpB,6DAA6D;IAC7D,IAAI,OAAO,IAAI,iBAAiB,CAE/B;IAED,2FAA2F;IACrF,GAAG,IAAI,OAAO,CAAC,kBAAkB,CAAC;CAMzC"}
|