@vibesdotdev/logging 0.0.2 → 1.0.0-rc.5
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/LICENSE +18 -0
- package/README.md +101 -8
- package/dist/audit/audit-retention.job.descriptor.d.ts +60 -0
- package/dist/audit/audit-retention.job.descriptor.d.ts.map +1 -0
- package/dist/audit/audit-retention.job.descriptor.js +42 -0
- package/dist/audit/audit-retention.job.descriptor.js.map +1 -0
- package/dist/audit/audit-retention.job.impl.d.ts +23 -0
- package/dist/audit/audit-retention.job.impl.d.ts.map +1 -0
- package/dist/audit/audit-retention.job.impl.js +24 -0
- package/dist/audit/audit-retention.job.impl.js.map +1 -0
- package/dist/audit/audit.descriptor.d.ts +6 -0
- package/dist/audit/audit.descriptor.d.ts.map +1 -1
- package/dist/audit/audit.descriptor.js +72 -5
- package/dist/audit/audit.descriptor.js.map +1 -1
- package/dist/audit/audit.storage.schema.d.ts +3 -3
- package/dist/audit/index.d.ts +3 -1
- package/dist/audit/index.d.ts.map +1 -1
- package/dist/audit/index.js +4 -1
- package/dist/audit/index.js.map +1 -1
- package/dist/audit/scheduled-audit-retention.d.ts +39 -0
- package/dist/audit/scheduled-audit-retention.d.ts.map +1 -0
- package/dist/audit/scheduled-audit-retention.js +38 -0
- package/dist/audit/scheduled-audit-retention.js.map +1 -0
- package/dist/browser/capture-error.d.ts +66 -0
- package/dist/browser/capture-error.d.ts.map +1 -0
- package/dist/browser/capture-error.js +82 -0
- package/dist/browser/capture-error.js.map +1 -0
- package/dist/browser/index.d.ts +11 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +16 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/logging-browser.plugin.d.ts +9 -0
- package/dist/browser/logging-browser.plugin.d.ts.map +1 -0
- package/dist/browser/logging-browser.plugin.js +26 -0
- package/dist/browser/logging-browser.plugin.js.map +1 -0
- package/dist/browser/plugin.d.ts +2 -0
- package/dist/browser/plugin.d.ts.map +1 -0
- package/dist/browser/plugin.js +2 -0
- package/dist/browser/plugin.js.map +1 -0
- package/dist/browser/read-errors.d.ts +26 -0
- package/dist/browser/read-errors.d.ts.map +1 -0
- package/dist/browser/read-errors.js +38 -0
- package/dist/browser/read-errors.js.map +1 -0
- package/dist/browser/sinks/browser/browser.browser.descriptor.d.ts +10 -0
- package/dist/browser/sinks/browser/browser.browser.descriptor.d.ts.map +1 -0
- package/dist/browser/sinks/browser/browser.browser.descriptor.js +23 -0
- package/dist/browser/sinks/browser/browser.browser.descriptor.js.map +1 -0
- package/dist/browser/sinks/browser/browser.impl.browser.d.ts +83 -0
- package/dist/browser/sinks/browser/browser.impl.browser.d.ts.map +1 -0
- package/dist/browser/sinks/browser/browser.impl.browser.js +247 -0
- package/dist/browser/sinks/browser/browser.impl.browser.js.map +1 -0
- package/dist/cli/failures.d.ts +29 -0
- package/dist/cli/failures.d.ts.map +1 -0
- package/dist/cli/failures.js +44 -0
- package/dist/cli/failures.js.map +1 -0
- package/dist/cli/flags.d.ts +24 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +56 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/log-line.d.ts +23 -0
- package/dist/cli/log-line.d.ts.map +1 -0
- package/dist/cli/log-line.js +39 -0
- package/dist/cli/log-line.js.map +1 -0
- package/dist/cli/logging.logs.descriptor.d.ts +9 -0
- package/dist/cli/logging.logs.descriptor.d.ts.map +1 -0
- package/dist/cli/logging.logs.descriptor.js +16 -0
- package/dist/cli/logging.logs.descriptor.js.map +1 -0
- package/dist/cli/logs.audit.cleanup.descriptor.d.ts +7 -0
- package/dist/cli/logs.audit.cleanup.descriptor.d.ts.map +1 -0
- package/dist/cli/logs.audit.cleanup.descriptor.js +21 -0
- package/dist/cli/logs.audit.cleanup.descriptor.js.map +1 -0
- package/dist/cli/logs.audit.cleanup.impl.d.ts +14 -0
- package/dist/cli/logs.audit.cleanup.impl.d.ts.map +1 -0
- package/dist/cli/logs.audit.cleanup.impl.js +60 -0
- package/dist/cli/logs.audit.cleanup.impl.js.map +1 -0
- package/dist/cli/logs.audit.descriptor.d.ts +9 -0
- package/dist/cli/logs.audit.descriptor.d.ts.map +1 -0
- package/dist/cli/logs.audit.descriptor.js +41 -0
- package/dist/cli/logs.audit.descriptor.js.map +1 -0
- package/dist/cli/logs.audit.group.descriptor.d.ts +7 -0
- package/dist/cli/logs.audit.group.descriptor.d.ts.map +1 -0
- package/dist/cli/logs.audit.group.descriptor.js +15 -0
- package/dist/cli/logs.audit.group.descriptor.js.map +1 -0
- package/dist/cli/logs.audit.impl.d.ts +19 -0
- package/dist/cli/logs.audit.impl.d.ts.map +1 -0
- package/dist/cli/logs.audit.impl.js +83 -0
- package/dist/cli/logs.audit.impl.js.map +1 -0
- package/dist/cli/logs.descriptor.d.ts +1 -8
- package/dist/cli/logs.descriptor.d.ts.map +1 -1
- package/dist/cli/logs.descriptor.js +1 -15
- package/dist/cli/logs.descriptor.js.map +1 -1
- package/dist/cli/logs.list.impl.d.ts +4 -1
- package/dist/cli/logs.list.impl.d.ts.map +1 -1
- package/dist/cli/logs.list.impl.js +60 -63
- package/dist/cli/logs.list.impl.js.map +1 -1
- package/dist/cli/logs.rotate.descriptor.d.ts.map +1 -1
- package/dist/cli/logs.rotate.descriptor.js +7 -3
- package/dist/cli/logs.rotate.descriptor.js.map +1 -1
- package/dist/cli/logs.rotate.impl.d.ts +3 -1
- package/dist/cli/logs.rotate.impl.d.ts.map +1 -1
- package/dist/cli/logs.rotate.impl.js +72 -33
- package/dist/cli/logs.rotate.impl.js.map +1 -1
- package/dist/cli/logs.search.descriptor.d.ts.map +1 -1
- package/dist/cli/logs.search.descriptor.js +4 -0
- package/dist/cli/logs.search.descriptor.js.map +1 -1
- package/dist/cli/logs.search.impl.d.ts +3 -1
- package/dist/cli/logs.search.impl.d.ts.map +1 -1
- package/dist/cli/logs.search.impl.js +114 -108
- package/dist/cli/logs.search.impl.js.map +1 -1
- package/dist/cli/logs.tail.descriptor.d.ts.map +1 -1
- package/dist/cli/logs.tail.descriptor.js +2 -1
- package/dist/cli/logs.tail.descriptor.js.map +1 -1
- package/dist/cli/logs.tail.impl.d.ts +4 -2
- package/dist/cli/logs.tail.impl.d.ts.map +1 -1
- package/dist/cli/logs.tail.impl.js +84 -57
- package/dist/cli/logs.tail.impl.js.map +1 -1
- package/dist/cli/logs.view.impl.d.ts +2 -6
- package/dist/cli/logs.view.impl.d.ts.map +1 -1
- package/dist/cli/logs.view.impl.js +32 -50
- package/dist/cli/logs.view.impl.js.map +1 -1
- package/dist/cli/output.d.ts +29 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +29 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/{logging.cli.plugin.d.ts → cli/plugin.d.ts} +3 -3
- package/dist/cli/plugin.d.ts.map +1 -0
- package/dist/cli/plugin.js +45 -0
- package/dist/cli/plugin.js.map +1 -0
- package/dist/cli/resolve-output.d.ts +25 -0
- package/dist/cli/resolve-output.d.ts.map +1 -0
- package/dist/cli/resolve-output.js +75 -0
- package/dist/cli/resolve-output.js.map +1 -0
- package/dist/cli/types.d.ts +13 -5
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js +3 -3
- package/dist/client/logging-client.d.ts +31 -0
- package/dist/client/logging-client.d.ts.map +1 -0
- package/dist/client/logging-client.js +44 -0
- package/dist/client/logging-client.js.map +1 -0
- package/dist/config/file-rotation.d.ts +11 -0
- package/dist/config/file-rotation.d.ts.map +1 -0
- package/dist/config/file-rotation.js +18 -0
- package/dist/config/file-rotation.js.map +1 -0
- package/dist/config/load-config.d.ts +7 -0
- package/dist/config/load-config.d.ts.map +1 -0
- package/dist/config/load-config.js +68 -0
- package/dist/config/load-config.js.map +1 -0
- package/dist/config/logging.config.descriptor.d.ts +350 -0
- package/dist/config/logging.config.descriptor.d.ts.map +1 -0
- package/dist/config/logging.config.descriptor.js +208 -0
- package/dist/config/logging.config.descriptor.js.map +1 -0
- package/dist/config/otel-service.d.ts +9 -0
- package/dist/config/otel-service.d.ts.map +1 -0
- package/dist/config/otel-service.js +18 -0
- package/dist/config/otel-service.js.map +1 -0
- package/dist/contexts/bootstrap.plugin.d.ts +3 -0
- package/dist/contexts/bootstrap.plugin.d.ts.map +1 -0
- package/dist/contexts/bootstrap.plugin.js +13 -0
- package/dist/contexts/bootstrap.plugin.js.map +1 -0
- package/dist/contexts/fallback-logger.d.ts +7 -2
- package/dist/contexts/fallback-logger.d.ts.map +1 -1
- package/dist/contexts/fallback-logger.js +73 -46
- package/dist/contexts/fallback-logger.js.map +1 -1
- package/dist/contexts/index.d.ts +2 -2
- package/dist/contexts/index.d.ts.map +1 -1
- package/dist/contexts/index.js +2 -3
- package/dist/contexts/index.js.map +1 -1
- package/dist/contexts/logger.d.ts +38 -14
- package/dist/contexts/logger.d.ts.map +1 -1
- package/dist/contexts/logger.js +241 -62
- package/dist/contexts/logger.js.map +1 -1
- package/dist/core/attempt.d.ts +30 -0
- package/dist/core/attempt.d.ts.map +1 -0
- package/dist/core/attempt.js +44 -0
- package/dist/core/attempt.js.map +1 -0
- package/dist/core/emission-window.d.ts +34 -0
- package/dist/core/emission-window.d.ts.map +1 -0
- package/dist/core/emission-window.js +25 -0
- package/dist/core/emission-window.js.map +1 -0
- package/dist/core/endpoint.d.ts +54 -0
- package/dist/core/endpoint.d.ts.map +1 -0
- package/dist/core/endpoint.js +256 -0
- package/dist/core/endpoint.js.map +1 -0
- package/dist/core/entry-context.d.ts +106 -0
- package/dist/core/entry-context.d.ts.map +1 -0
- package/dist/core/entry-context.js +150 -0
- package/dist/core/entry-context.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/logger.d.ts +6 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +133 -67
- package/dist/core/logger.js.map +1 -1
- package/dist/core/namespace.d.ts +5 -2
- package/dist/core/namespace.d.ts.map +1 -1
- package/dist/core/namespace.js +15 -7
- package/dist/core/namespace.js.map +1 -1
- package/dist/core/normalize.d.ts +31 -0
- package/dist/core/normalize.d.ts.map +1 -0
- package/dist/core/normalize.js +67 -0
- package/dist/core/normalize.js.map +1 -0
- package/dist/core/otlp-headers.d.ts +53 -0
- package/dist/core/otlp-headers.d.ts.map +1 -0
- package/dist/core/otlp-headers.js +64 -0
- package/dist/core/otlp-headers.js.map +1 -0
- package/dist/core/otlp-partial-success.d.ts +48 -0
- package/dist/core/otlp-partial-success.d.ts.map +1 -0
- package/dist/core/otlp-partial-success.js +55 -0
- package/dist/core/otlp-partial-success.js.map +1 -0
- package/dist/core/outcome.d.ts +21 -0
- package/dist/core/outcome.d.ts.map +1 -0
- package/dist/core/outcome.js +24 -0
- package/dist/core/outcome.js.map +1 -0
- package/dist/core/output-resources.d.ts +15 -0
- package/dist/core/output-resources.d.ts.map +1 -0
- package/dist/core/output-resources.js +51 -0
- package/dist/core/output-resources.js.map +1 -0
- package/dist/core/parsing.d.ts.map +1 -1
- package/dist/core/parsing.js +13 -10
- package/dist/core/parsing.js.map +1 -1
- package/dist/core/redact.d.ts +161 -0
- package/dist/core/redact.d.ts.map +1 -0
- package/dist/core/redact.js +581 -0
- package/dist/core/redact.js.map +1 -0
- package/dist/core/root-identity.d.ts +13 -0
- package/dist/core/root-identity.d.ts.map +1 -0
- package/dist/core/root-identity.js +23 -0
- package/dist/core/root-identity.js.map +1 -0
- package/dist/core/types.d.ts +5 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/docs/cli.docs.descriptor.d.ts +4 -0
- package/dist/docs/cli.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/cli.docs.descriptor.js +97 -0
- package/dist/docs/cli.docs.descriptor.js.map +1 -0
- package/dist/docs/index.d.ts +7 -0
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +7 -0
- package/dist/docs/index.js.map +1 -0
- package/dist/docs/levels.docs.descriptor.d.ts +1 -1
- package/dist/docs/levels.docs.descriptor.d.ts.map +1 -1
- package/dist/docs/levels.docs.descriptor.js +112 -246
- package/dist/docs/levels.docs.descriptor.js.map +1 -1
- package/dist/docs/logging.docs.descriptor.d.ts +4 -0
- package/dist/docs/logging.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/logging.docs.descriptor.js +105 -0
- package/dist/docs/logging.docs.descriptor.js.map +1 -0
- package/dist/docs/observability.docs.descriptor.d.ts +4 -0
- package/dist/docs/observability.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/observability.docs.descriptor.js +152 -0
- package/dist/docs/observability.docs.descriptor.js.map +1 -0
- package/dist/docs/structured.docs.descriptor.d.ts +1 -1
- package/dist/docs/structured.docs.descriptor.d.ts.map +1 -1
- package/dist/docs/structured.docs.descriptor.js +111 -267
- package/dist/docs/structured.docs.descriptor.js.map +1 -1
- package/dist/docs/transports.docs.descriptor.d.ts +1 -1
- package/dist/docs/transports.docs.descriptor.d.ts.map +1 -1
- package/dist/docs/transports.docs.descriptor.js +129 -344
- package/dist/docs/transports.docs.descriptor.js.map +1 -1
- package/dist/formatters/json/json.impl.d.ts +1 -1
- package/dist/formatters/json/json.impl.d.ts.map +1 -1
- package/dist/formatters/json/json.impl.js +3 -2
- package/dist/formatters/json/json.impl.js.map +1 -1
- package/dist/formatters/json5/json5.impl.d.ts +1 -1
- package/dist/formatters/json5/json5.impl.d.ts.map +1 -1
- package/dist/formatters/json5/json5.impl.js +3 -2
- package/dist/formatters/json5/json5.impl.js.map +1 -1
- package/dist/formatters/jsonl/jsonl.impl.d.ts +1 -1
- package/dist/formatters/jsonl/jsonl.impl.d.ts.map +1 -1
- package/dist/formatters/jsonl/jsonl.impl.js +3 -2
- package/dist/formatters/jsonl/jsonl.impl.js.map +1 -1
- package/dist/formatters/pretty/{pretty.impl.cli.d.ts → pretty.impl.consumer.d.ts} +1 -1
- package/dist/formatters/pretty/pretty.impl.consumer.d.ts.map +1 -0
- package/dist/formatters/pretty/{pretty.impl.cli.js → pretty.impl.consumer.js} +1 -1
- package/dist/formatters/pretty/pretty.impl.consumer.js.map +1 -0
- package/dist/host-files/file-audit.base.d.ts +39 -0
- package/dist/host-files/file-audit.base.d.ts.map +1 -0
- package/dist/host-files/file-audit.base.js +255 -0
- package/dist/host-files/file-audit.base.js.map +1 -0
- package/dist/host-files/file-output.base.d.ts +84 -0
- package/dist/host-files/file-output.base.d.ts.map +1 -0
- package/dist/host-files/file-output.base.js +401 -0
- package/dist/host-files/file-output.base.js.map +1 -0
- package/dist/host-files/file-output.factory.base.d.ts +31 -0
- package/dist/host-files/file-output.factory.base.d.ts.map +1 -0
- package/dist/host-files/file-output.factory.base.js +82 -0
- package/dist/host-files/file-output.factory.base.js.map +1 -0
- package/dist/host-files/file-output.read.base.d.ts +7 -0
- package/dist/host-files/file-output.read.base.d.ts.map +1 -0
- package/dist/host-files/file-output.read.base.js +229 -0
- package/dist/host-files/file-output.read.base.js.map +1 -0
- package/dist/host-files/file-sink.base.d.ts +22 -0
- package/dist/host-files/file-sink.base.d.ts.map +1 -0
- package/dist/host-files/file-sink.base.js +56 -0
- package/dist/host-files/file-sink.base.js.map +1 -0
- package/dist/host-files/host-file-logging.plugin.d.ts +11 -0
- package/dist/host-files/host-file-logging.plugin.d.ts.map +1 -0
- package/dist/host-files/host-file-logging.plugin.js +63 -0
- package/dist/host-files/host-file-logging.plugin.js.map +1 -0
- package/dist/host-files/index.d.ts +19 -0
- package/dist/host-files/index.d.ts.map +1 -0
- package/dist/host-files/index.js +18 -0
- package/dist/host-files/index.js.map +1 -0
- package/dist/host-files/rotate-appended-file.base.d.ts +35 -0
- package/dist/host-files/rotate-appended-file.base.d.ts.map +1 -0
- package/dist/host-files/rotate-appended-file.base.js +104 -0
- package/dist/host-files/rotate-appended-file.base.js.map +1 -0
- package/dist/host.d.ts +38 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +39 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +24 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -23
- package/dist/index.js.map +1 -1
- package/dist/kinds/audit.d.ts +40 -8
- package/dist/kinds/audit.d.ts.map +1 -1
- package/dist/kinds/audit.js +82 -20
- package/dist/kinds/audit.js.map +1 -1
- package/dist/kinds/contexts.d.ts +4 -3
- package/dist/kinds/contexts.d.ts.map +1 -1
- package/dist/kinds/file-output.d.ts +56 -0
- package/dist/kinds/file-output.d.ts.map +1 -0
- package/dist/kinds/file-output.js +11 -0
- package/dist/kinds/file-output.js.map +1 -0
- package/dist/kinds/formatter.d.ts +4 -6
- package/dist/kinds/formatter.d.ts.map +1 -1
- package/dist/kinds/formatter.js +4 -3
- package/dist/kinds/formatter.js.map +1 -1
- package/dist/kinds/index.d.ts +3 -3
- package/dist/kinds/index.d.ts.map +1 -1
- package/dist/kinds/index.js +3 -3
- package/dist/kinds/index.js.map +1 -1
- package/dist/kinds/logger.d.ts +4 -4
- package/dist/kinds/logger.d.ts.map +1 -1
- package/dist/kinds/logger.impl.d.ts +40 -13
- package/dist/kinds/logger.impl.d.ts.map +1 -1
- package/dist/kinds/logger.impl.js +179 -87
- package/dist/kinds/logger.impl.js.map +1 -1
- package/dist/kinds/logger.js +21 -11
- package/dist/kinds/logger.js.map +1 -1
- package/dist/kinds/logger.utils.d.ts +31 -4
- package/dist/kinds/logger.utils.d.ts.map +1 -1
- package/dist/kinds/logger.utils.js +58 -18
- package/dist/kinds/logger.utils.js.map +1 -1
- package/dist/kinds/output.d.ts +5 -11
- package/dist/kinds/output.d.ts.map +1 -1
- package/dist/kinds/output.impl.d.ts +9 -7
- package/dist/kinds/output.impl.d.ts.map +1 -1
- package/dist/kinds/output.impl.js +51 -29
- package/dist/kinds/output.impl.js.map +1 -1
- package/dist/kinds/output.js +10 -5
- package/dist/kinds/output.js.map +1 -1
- package/dist/kinds/output.types.d.ts +26 -7
- package/dist/kinds/output.types.d.ts.map +1 -1
- package/dist/kinds/sink.d.ts +6 -5
- package/dist/kinds/sink.d.ts.map +1 -1
- package/dist/kinds/sink.js +14 -7
- package/dist/kinds/sink.js.map +1 -1
- package/dist/logger.context.descriptor.d.ts +15 -1
- package/dist/logger.context.descriptor.d.ts.map +1 -1
- package/dist/logger.context.descriptor.js +1 -1
- package/dist/logger.context.descriptor.js.map +1 -1
- package/dist/logging.consumer.plugin.d.ts +4 -0
- package/dist/logging.consumer.plugin.d.ts.map +1 -0
- package/dist/logging.consumer.plugin.js +17 -0
- package/dist/logging.consumer.plugin.js.map +1 -0
- package/dist/logging.plugin.d.ts +3 -3
- package/dist/logging.plugin.d.ts.map +1 -1
- package/dist/logging.plugin.js +81 -42
- package/dist/logging.plugin.js.map +1 -1
- package/dist/observability/building-host.d.ts +11 -0
- package/dist/observability/building-host.d.ts.map +1 -0
- package/dist/observability/building-host.js +11 -0
- package/dist/observability/building-host.js.map +1 -0
- package/dist/observability/config.d.ts +36 -0
- package/dist/observability/config.d.ts.map +1 -0
- package/dist/observability/config.js +46 -0
- package/dist/observability/config.js.map +1 -0
- package/dist/observability/http/instrumented-fetch.d.ts +19 -0
- package/dist/observability/http/instrumented-fetch.d.ts.map +1 -0
- package/dist/observability/http/instrumented-fetch.js +175 -0
- package/dist/observability/http/instrumented-fetch.js.map +1 -0
- package/dist/observability/index.d.ts +8 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +10 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/lifecycle.d.ts +18 -0
- package/dist/observability/lifecycle.d.ts.map +1 -0
- package/dist/observability/lifecycle.js +44 -0
- package/dist/observability/lifecycle.js.map +1 -0
- package/dist/observability/observability/error-tracker.d.ts +43 -0
- package/dist/observability/observability/error-tracker.d.ts.map +1 -0
- package/dist/observability/observability/error-tracker.js +130 -0
- package/dist/observability/observability/error-tracker.js.map +1 -0
- package/dist/observability/should-keep-log.d.ts +8 -0
- package/dist/observability/should-keep-log.d.ts.map +1 -0
- package/dist/observability/should-keep-log.js +10 -0
- package/dist/observability/should-keep-log.js.map +1 -0
- package/dist/observability/telemetry/otel.d.ts +47 -0
- package/dist/observability/telemetry/otel.d.ts.map +1 -0
- package/dist/observability/telemetry/otel.js +542 -0
- package/dist/observability/telemetry/otel.js.map +1 -0
- package/dist/observability/telemetry/partial-success.d.ts +35 -0
- package/dist/observability/telemetry/partial-success.d.ts.map +1 -0
- package/dist/observability/telemetry/partial-success.js +94 -0
- package/dist/observability/telemetry/partial-success.js.map +1 -0
- package/dist/observability/telemetry/sdk-lifecycle.d.ts +37 -0
- package/dist/observability/telemetry/sdk-lifecycle.d.ts.map +1 -0
- package/dist/observability/telemetry/sdk-lifecycle.js +132 -0
- package/dist/observability/telemetry/sdk-lifecycle.js.map +1 -0
- package/dist/observability/telemetry/telemetry-root.d.ts +78 -0
- package/dist/observability/telemetry/telemetry-root.d.ts.map +1 -0
- package/dist/observability/telemetry/telemetry-root.js +79 -0
- package/dist/observability/telemetry/telemetry-root.js.map +1 -0
- package/dist/observability/telemetry-instrumentation.d.ts +76 -0
- package/dist/observability/telemetry-instrumentation.d.ts.map +1 -0
- package/dist/observability/telemetry-instrumentation.js +69 -0
- package/dist/observability/telemetry-instrumentation.js.map +1 -0
- package/dist/otel/index.d.ts +9 -0
- package/dist/otel/index.d.ts.map +1 -0
- package/dist/otel/index.js +12 -0
- package/dist/otel/index.js.map +1 -0
- package/dist/otel/logging-otel.plugin.d.ts +11 -0
- package/dist/otel/logging-otel.plugin.d.ts.map +1 -0
- package/dist/otel/logging-otel.plugin.js +27 -0
- package/dist/otel/logging-otel.plugin.js.map +1 -0
- package/dist/otel/sinks/otel/otel.descriptor.d.ts +10 -0
- package/dist/otel/sinks/otel/otel.descriptor.d.ts.map +1 -0
- package/dist/otel/sinks/otel/otel.descriptor.js +23 -0
- package/dist/otel/sinks/otel/otel.descriptor.js.map +1 -0
- package/dist/otel/sinks/otel/otel.impl.d.ts +47 -0
- package/dist/otel/sinks/otel/otel.impl.d.ts.map +1 -0
- package/dist/otel/sinks/otel/otel.impl.js +202 -0
- package/dist/otel/sinks/otel/otel.impl.js.map +1 -0
- package/dist/otel/sinks/otel/otlp-log-exporter.d.ts +76 -0
- package/dist/otel/sinks/otel/otlp-log-exporter.d.ts.map +1 -0
- package/dist/otel/sinks/otel/otlp-log-exporter.js +178 -0
- package/dist/otel/sinks/otel/otlp-log-exporter.js.map +1 -0
- package/dist/outputs/file/file.outputs.descriptor.d.ts +10 -0
- package/dist/outputs/file/file.outputs.descriptor.d.ts.map +1 -0
- package/dist/outputs/file/file.outputs.descriptor.js +32 -0
- package/dist/outputs/file/file.outputs.descriptor.js.map +1 -0
- package/dist/outputs/remote/remote.descriptor.d.ts +1 -1
- package/dist/outputs/remote/remote.descriptor.d.ts.map +1 -1
- package/dist/outputs/remote/remote.descriptor.js +1 -2
- package/dist/outputs/remote/remote.descriptor.js.map +1 -1
- package/dist/outputs/remote/remote.factory.d.ts +9 -0
- package/dist/outputs/remote/remote.factory.d.ts.map +1 -0
- package/dist/outputs/remote/remote.factory.js +16 -0
- package/dist/outputs/remote/remote.factory.js.map +1 -0
- package/dist/outputs/remote/remote.impl.d.ts +40 -4
- package/dist/outputs/remote/remote.impl.d.ts.map +1 -1
- package/dist/outputs/remote/remote.impl.js +224 -99
- package/dist/outputs/remote/remote.impl.js.map +1 -1
- package/dist/outputs.context.descriptor.d.ts +15 -1
- package/dist/outputs.context.descriptor.d.ts.map +1 -1
- package/dist/outputs.context.descriptor.js +1 -1
- package/dist/outputs.context.descriptor.js.map +1 -1
- package/dist/outputs.context.impl.d.ts +2 -1
- package/dist/outputs.context.impl.d.ts.map +1 -1
- package/dist/outputs.context.impl.js +17 -9
- package/dist/outputs.context.impl.js.map +1 -1
- package/dist/paths.d.ts +24 -3
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +63 -3
- package/dist/paths.js.map +1 -1
- package/dist/rotation/rotate-appended-file.d.ts +15 -0
- package/dist/rotation/rotate-appended-file.d.ts.map +1 -0
- package/dist/rotation/rotate-appended-file.js +20 -0
- package/dist/rotation/rotate-appended-file.js.map +1 -0
- package/dist/rotation/rotation-policy.d.ts +19 -0
- package/dist/rotation/rotation-policy.d.ts.map +1 -0
- package/dist/rotation/rotation-policy.js +37 -0
- package/dist/rotation/rotation-policy.js.map +1 -0
- package/dist/schemas/audit.d.ts +25 -7
- package/dist/schemas/audit.d.ts.map +1 -1
- package/dist/schemas/audit.js +10 -4
- package/dist/schemas/audit.js.map +1 -1
- package/dist/schemas/entry.d.ts +11 -5
- package/dist/schemas/entry.d.ts.map +1 -1
- package/dist/schemas/entry.js +3 -2
- package/dist/schemas/entry.js.map +1 -1
- package/dist/schemas/file-host.d.ts +86 -0
- package/dist/schemas/file-host.d.ts.map +1 -0
- package/dist/schemas/file-host.js +10 -0
- package/dist/schemas/file-host.js.map +1 -0
- package/dist/schemas/formatter.d.ts +11 -1
- package/dist/schemas/formatter.d.ts.map +1 -1
- package/dist/schemas/formatter.js +1 -1
- package/dist/schemas/formatter.js.map +1 -1
- package/dist/schemas/index.d.ts +3 -2
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +3 -2
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/logger.d.ts +16 -1
- package/dist/schemas/logger.d.ts.map +1 -1
- package/dist/schemas/logger.js +6 -1
- package/dist/schemas/logger.js.map +1 -1
- package/dist/schemas/output-defaults.d.ts +44 -0
- package/dist/schemas/output-defaults.d.ts.map +1 -0
- package/dist/schemas/output-defaults.js +53 -0
- package/dist/schemas/output-defaults.js.map +1 -0
- package/dist/schemas/output.d.ts +25 -1
- package/dist/schemas/output.d.ts.map +1 -1
- package/dist/schemas/output.js +29 -2
- package/dist/schemas/output.js.map +1 -1
- package/dist/schemas/sink.d.ts +32 -1
- package/dist/schemas/sink.d.ts.map +1 -1
- package/dist/schemas/sink.js +17 -1
- package/dist/schemas/sink.js.map +1 -1
- package/dist/sinks/buffer/buffer.descriptor.js +1 -1
- package/dist/sinks/buffer/buffer.descriptor.js.map +1 -1
- package/dist/sinks/buffer/{buffer.impl.cli.d.ts → buffer.impl.d.ts} +3 -3
- package/dist/sinks/buffer/buffer.impl.d.ts.map +1 -0
- package/dist/sinks/buffer/buffer.impl.js +42 -0
- package/dist/sinks/buffer/buffer.impl.js.map +1 -0
- package/dist/sinks/console/console.descriptor.js +1 -1
- package/dist/sinks/console/console.descriptor.js.map +1 -1
- package/dist/sinks/console/console.impl.browser.d.ts +4 -3
- package/dist/sinks/console/console.impl.browser.d.ts.map +1 -1
- package/dist/sinks/console/console.impl.browser.js +11 -14
- package/dist/sinks/console/console.impl.browser.js.map +1 -1
- package/dist/sinks/console/{console.impl.cli.d.ts → console.impl.consumer.d.ts} +5 -4
- package/dist/sinks/console/console.impl.consumer.d.ts.map +1 -0
- package/dist/sinks/console/{console.impl.cli.js → console.impl.consumer.js} +16 -8
- package/dist/sinks/console/console.impl.consumer.js.map +1 -0
- package/dist/sinks/file/file.sinks.descriptor.d.ts +10 -0
- package/dist/sinks/file/file.sinks.descriptor.d.ts.map +1 -0
- package/dist/sinks/file/file.sinks.descriptor.js +23 -0
- package/dist/sinks/file/file.sinks.descriptor.js.map +1 -0
- package/dist/sinks/index.d.ts +1 -1
- package/dist/sinks/index.d.ts.map +1 -1
- package/dist/sinks/memory/memory.descriptor.d.ts +1 -1
- package/dist/sinks/memory/memory.descriptor.js +2 -2
- package/dist/sinks/memory/memory.descriptor.js.map +1 -1
- package/dist/sinks/memory/memory.impl.d.ts +5 -11
- package/dist/sinks/memory/memory.impl.d.ts.map +1 -1
- package/dist/sinks/memory/memory.impl.js +46 -21
- package/dist/sinks/memory/memory.impl.js.map +1 -1
- package/dist/sinks/stdout/stdout.descriptor.js +1 -1
- package/dist/sinks/stdout/stdout.descriptor.js.map +1 -1
- package/dist/sinks/stdout/{stdout.impl.cli.d.ts → stdout.impl.d.ts} +5 -4
- package/dist/sinks/stdout/stdout.impl.d.ts.map +1 -0
- package/dist/sinks/stdout/stdout.impl.js +29 -0
- package/dist/sinks/stdout/stdout.impl.js.map +1 -0
- package/dist/sinks.context.descriptor.d.ts +15 -1
- package/dist/sinks.context.descriptor.d.ts.map +1 -1
- package/dist/sinks.context.descriptor.js +1 -1
- package/dist/sinks.context.descriptor.js.map +1 -1
- package/dist/sinks.context.impl.d.ts +2 -1
- package/dist/sinks.context.impl.d.ts.map +1 -1
- package/dist/sinks.context.impl.js +17 -9
- package/dist/sinks.context.impl.js.map +1 -1
- package/dist/stdout-capture/mcp-frame.d.ts +23 -0
- package/dist/stdout-capture/mcp-frame.d.ts.map +1 -0
- package/dist/stdout-capture/mcp-frame.js +80 -0
- package/dist/stdout-capture/mcp-frame.js.map +1 -0
- package/dist/stdout-capture/stdout-capture.descriptor.d.ts +10 -0
- package/dist/stdout-capture/stdout-capture.descriptor.d.ts.map +1 -0
- package/dist/stdout-capture/stdout-capture.descriptor.js +17 -0
- package/dist/stdout-capture/stdout-capture.descriptor.js.map +1 -0
- package/dist/stdout-capture/stdout-capture.impl.d.ts +19 -0
- package/dist/stdout-capture/stdout-capture.impl.d.ts.map +1 -0
- package/dist/stdout-capture/stdout-capture.impl.js +49 -0
- package/dist/stdout-capture/stdout-capture.impl.js.map +1 -0
- package/dist/stdout-capture/stdout-capture.lease.d.ts +45 -0
- package/dist/stdout-capture/stdout-capture.lease.d.ts.map +1 -0
- package/dist/stdout-capture/stdout-capture.lease.js +338 -0
- package/dist/stdout-capture/stdout-capture.lease.js.map +1 -0
- package/dist/stdout-capture/stdout-capture.output.descriptor.d.ts +4 -0
- package/dist/stdout-capture/stdout-capture.output.descriptor.d.ts.map +1 -0
- package/dist/stdout-capture/stdout-capture.output.descriptor.js +18 -0
- package/dist/stdout-capture/stdout-capture.output.descriptor.js.map +1 -0
- package/dist/stdout-capture/stdout-capture.state.d.ts +29 -0
- package/dist/stdout-capture/stdout-capture.state.d.ts.map +1 -0
- package/dist/stdout-capture/stdout-capture.state.js +80 -0
- package/dist/stdout-capture/stdout-capture.state.js.map +1 -0
- package/dist/stdout-capture.d.ts +24 -0
- package/dist/stdout-capture.d.ts.map +1 -0
- package/dist/stdout-capture.js +28 -0
- package/dist/stdout-capture.js.map +1 -0
- package/dist/stdout-capture.plugin.d.ts +7 -0
- package/dist/stdout-capture.plugin.d.ts.map +1 -0
- package/dist/stdout-capture.plugin.js +28 -0
- package/dist/stdout-capture.plugin.js.map +1 -0
- package/package.json +308 -224
- package/dist/contexts/audit.d.ts +0 -34
- package/dist/contexts/audit.d.ts.map +0 -1
- package/dist/contexts/audit.js +0 -13
- package/dist/contexts/audit.js.map +0 -1
- package/dist/formatters/index.d.ts +0 -7
- package/dist/formatters/index.d.ts.map +0 -1
- package/dist/formatters/index.js +0 -8
- package/dist/formatters/index.js.map +0 -1
- package/dist/formatters/pretty/pretty.impl.cli.d.ts.map +0 -1
- package/dist/formatters/pretty/pretty.impl.cli.js.map +0 -1
- package/dist/kinds/logger.contracts.d.ts +0 -16
- package/dist/kinds/logger.contracts.d.ts.map +0 -1
- package/dist/kinds/logger.contracts.js +0 -9
- package/dist/kinds/logger.contracts.js.map +0 -1
- package/dist/kinds/output.contracts.d.ts +0 -50
- package/dist/kinds/output.contracts.d.ts.map +0 -1
- package/dist/kinds/output.contracts.js +0 -10
- package/dist/kinds/output.contracts.js.map +0 -1
- package/dist/logging.cli.plugin.d.ts.map +0 -1
- package/dist/logging.cli.plugin.js +0 -39
- package/dist/logging.cli.plugin.js.map +0 -1
- package/dist/outputs/index.d.ts +0 -7
- package/dist/outputs/index.d.ts.map +0 -1
- package/dist/outputs/index.js +0 -8
- package/dist/outputs/index.js.map +0 -1
- package/dist/sinks/buffer/buffer.impl.cli.d.ts.map +0 -1
- package/dist/sinks/buffer/buffer.impl.cli.js +0 -34
- package/dist/sinks/buffer/buffer.impl.cli.js.map +0 -1
- package/dist/sinks/console/console.impl.cli.d.ts.map +0 -1
- package/dist/sinks/console/console.impl.cli.js.map +0 -1
- package/dist/sinks/stdout/stdout.impl.cli.d.ts.map +0 -1
- package/dist/sinks/stdout/stdout.impl.cli.js +0 -21
- package/dist/sinks/stdout/stdout.impl.cli.js.map +0 -1
- package/src/audit/audit.descriptor.ts +0 -45
- package/src/audit/audit.storage.schema.ts +0 -57
- package/src/audit/index.ts +0 -8
- package/src/cli/logs.descriptor.ts +0 -19
- package/src/cli/logs.list.descriptor.ts +0 -28
- package/src/cli/logs.list.impl.ts +0 -93
- package/src/cli/logs.rotate.descriptor.ts +0 -40
- package/src/cli/logs.rotate.impl.ts +0 -61
- package/src/cli/logs.search.descriptor.ts +0 -61
- package/src/cli/logs.search.impl.ts +0 -173
- package/src/cli/logs.tail.descriptor.ts +0 -49
- package/src/cli/logs.tail.impl.ts +0 -105
- package/src/cli/logs.view.descriptor.ts +0 -57
- package/src/cli/logs.view.impl.ts +0 -108
- package/src/cli/types.ts +0 -59
- package/src/contexts/audit.ts +0 -36
- package/src/contexts/fallback-logger.ts +0 -80
- package/src/contexts/index.ts +0 -23
- package/src/contexts/logger.ts +0 -119
- package/src/core/index.ts +0 -32
- package/src/core/logger.ts +0 -150
- package/src/core/namespace.ts +0 -195
- package/src/core/parsing.ts +0 -21
- package/src/core/types.ts +0 -82
- package/src/docs/levels.docs.descriptor.ts +0 -344
- package/src/docs/structured.docs.descriptor.ts +0 -444
- package/src/docs/transports.docs.descriptor.ts +0 -428
- package/src/formatters/index.ts +0 -6
- package/src/formatters/json/json.formatters.descriptor.ts +0 -25
- package/src/formatters/json/json.impl.ts +0 -41
- package/src/formatters/json5/json5.descriptor.ts +0 -25
- package/src/formatters/json5/json5.impl.ts +0 -43
- package/src/formatters/jsonl/jsonl.descriptor.ts +0 -26
- package/src/formatters/jsonl/jsonl.impl.ts +0 -39
- package/src/formatters/pretty/pretty.descriptor.ts +0 -26
- package/src/formatters/pretty/pretty.impl.cli.ts +0 -101
- package/src/index.ts +0 -190
- package/src/kinds/audit.ts +0 -169
- package/src/kinds/contexts.ts +0 -22
- package/src/kinds/formatter.ts +0 -117
- package/src/kinds/index.ts +0 -25
- package/src/kinds/logger.contracts.ts +0 -17
- package/src/kinds/logger.impl.ts +0 -206
- package/src/kinds/logger.ts +0 -46
- package/src/kinds/logger.utils.ts +0 -91
- package/src/kinds/output.contracts.ts +0 -54
- package/src/kinds/output.impl.ts +0 -118
- package/src/kinds/output.ts +0 -59
- package/src/kinds/output.types.ts +0 -105
- package/src/kinds/sink.ts +0 -100
- package/src/logger.context.descriptor.ts +0 -13
- package/src/logging.cli.plugin.ts +0 -43
- package/src/logging.plugin.ts +0 -93
- package/src/outputs/index.ts +0 -6
- package/src/outputs/remote/remote.descriptor.ts +0 -27
- package/src/outputs/remote/remote.impl.ts +0 -218
- package/src/outputs.context.descriptor.ts +0 -10
- package/src/outputs.context.impl.ts +0 -30
- package/src/paths.ts +0 -10
- package/src/schemas/audit.ts +0 -98
- package/src/schemas/entry.ts +0 -88
- package/src/schemas/formatter.ts +0 -37
- package/src/schemas/index.ts +0 -80
- package/src/schemas/logger.ts +0 -38
- package/src/schemas/output.ts +0 -62
- package/src/schemas/sink.ts +0 -39
- package/src/sinks/buffer/buffer.descriptor.ts +0 -13
- package/src/sinks/buffer/buffer.impl.cli.ts +0 -49
- package/src/sinks/console/console.descriptor.ts +0 -20
- package/src/sinks/console/console.impl.browser.ts +0 -69
- package/src/sinks/console/console.impl.cli.ts +0 -71
- package/src/sinks/index.ts +0 -8
- package/src/sinks/memory/memory.descriptor.ts +0 -20
- package/src/sinks/memory/memory.impl.ts +0 -119
- package/src/sinks/stdout/stdout.descriptor.ts +0 -13
- package/src/sinks/stdout/stdout.impl.cli.ts +0 -27
- package/src/sinks.context.descriptor.ts +0 -10
- package/src/sinks.context.impl.ts +0 -30
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instrumented Fetch for External API Calls
|
|
3
|
+
*
|
|
4
|
+
* Wraps fetch calls with OpenTelemetry spans to track external API dependencies
|
|
5
|
+
*/
|
|
6
|
+
import { getLogger } from "../../contexts/logger.js";
|
|
7
|
+
import * as z from 'zod/v4';
|
|
8
|
+
import { RedactedEndpointSchema, UNSCRUBBABLE_FAILURE_MESSAGE, UNSCRUBBABLE_TEXT, createEndpointFailureSchema, createEndpointTextSchema } from "../../core/endpoint.js";
|
|
9
|
+
import { attempt } from "../../core/outcome.js";
|
|
10
|
+
import { valueFreeFailureSchema } from "../../core/redact.js";
|
|
11
|
+
/** A response's `content-length` as the byte count it states; anything else (absent, or not digits) is 0. */
|
|
12
|
+
const ContentLengthSchema = z.string().regex(/^\d+$/).transform(Number).catch(0);
|
|
13
|
+
/**
|
|
14
|
+
* The request's headers, built once, before anything is sent, the way `fetch`
|
|
15
|
+
* itself builds them (`new Headers(init.headers)`, else the `Request`'s own),
|
|
16
|
+
* and every value as `fetch` would send it: a value is converted to its text
|
|
17
|
+
* however the caller wrote it (an array, an object with `toString`, a
|
|
18
|
+
* `[name, value]` pair, an iterable), so the failure description removes each
|
|
19
|
+
* one. The same `Headers` is what is sent, so a one-shot iterable is read once.
|
|
20
|
+
* When building them throws (a value the platform refuses, a getter, a trap),
|
|
21
|
+
* the failure is that throw and is described value-free: what it says may echo
|
|
22
|
+
* a value that was never read.
|
|
23
|
+
*/
|
|
24
|
+
function readRequestHeaders(input, init) {
|
|
25
|
+
return attempt(() => {
|
|
26
|
+
const own = input instanceof Request ? input.headers : undefined;
|
|
27
|
+
const headers = new Headers(init?.headers ?? own);
|
|
28
|
+
return { headers, values: [...(own ? [...own.values()] : []), ...headers.values()] };
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** Every header value a request carries (see {@link readRequestHeaders}); `null` when they could not be read. */
|
|
32
|
+
function requestHeaderValues(input, init) {
|
|
33
|
+
const read = readRequestHeaders(input, init);
|
|
34
|
+
return read.failed ? null : read.value.values;
|
|
35
|
+
}
|
|
36
|
+
/** Text the peer controls (a reason phrase), scrubbed of the URL's credentials and the request's header values; none of it when those could not be read. */
|
|
37
|
+
function peerText(url, headerValues, text) {
|
|
38
|
+
return headerValues === null ? UNSCRUBBABLE_TEXT : createEndpointTextSchema(url, headerValues).parse(text);
|
|
39
|
+
}
|
|
40
|
+
/** Describes a failure with the URL's credentials and every request header value removed; value-free when the header values could not be read. */
|
|
41
|
+
function createRequestFailureSchema(url, headerValues) {
|
|
42
|
+
return headerValues === null ? valueFreeFailureSchema(UNSCRUBBABLE_FAILURE_MESSAGE) : createEndpointFailureSchema(url, headerValues);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Instrumented fetch that creates spans for external API calls and reports them through `runtime`'s logger
|
|
46
|
+
*/
|
|
47
|
+
export async function instrumentedFetch(runtime, input, init) {
|
|
48
|
+
const logger = getLogger('http-client', runtime);
|
|
49
|
+
// The module system memoizes the import; a failure to load propagates to the caller.
|
|
50
|
+
const otel = await import('@opentelemetry/api');
|
|
51
|
+
const tracer = otel.trace.getTracer('http-client');
|
|
52
|
+
const url = input instanceof Request ? input.url : input instanceof URL ? input.href : input;
|
|
53
|
+
// What is logged or attributed about the URL: never its userinfo or query, which may carry credentials.
|
|
54
|
+
const echoedUrl = RedactedEndpointSchema.parse(url);
|
|
55
|
+
const method = init?.method || 'GET';
|
|
56
|
+
// Read once, before the request is sent: a header value the platform refuses must still be scrubbed from the failure it causes.
|
|
57
|
+
const requestHeaders = readRequestHeaders(input, init);
|
|
58
|
+
const headerValues = requestHeaders.failed ? null : requestHeaders.value.values;
|
|
59
|
+
// Host for span naming; an unparseable URL is named 'unknown'
|
|
60
|
+
const hostname = URL.canParse(url) ? new URL(url).hostname : 'unknown';
|
|
61
|
+
return tracer.startActiveSpan(`HTTP ${method} ${hostname}`, {
|
|
62
|
+
kind: otel.SpanKind.CLIENT,
|
|
63
|
+
attributes: {
|
|
64
|
+
'http.method': method,
|
|
65
|
+
'http.url': echoedUrl,
|
|
66
|
+
'http.target': hostname,
|
|
67
|
+
'http.scheme': url.startsWith('https') ? 'https' : 'http',
|
|
68
|
+
component: 'fetch',
|
|
69
|
+
'span.kind': 'client'
|
|
70
|
+
}
|
|
71
|
+
}, async (span) => {
|
|
72
|
+
const startTime = performance.now();
|
|
73
|
+
try {
|
|
74
|
+
// The headers fetch would have refused fail the call here, with the platform's own error.
|
|
75
|
+
if (requestHeaders.failed)
|
|
76
|
+
throw requestHeaders.cause;
|
|
77
|
+
// Add trace context to the headers that were read (the same object is sent) for distributed tracing
|
|
78
|
+
const headers = requestHeaders.value.headers;
|
|
79
|
+
// Get current trace context
|
|
80
|
+
const spanContext = span.spanContext();
|
|
81
|
+
headers.set('traceparent', `00-${spanContext.traceId}-${spanContext.spanId}-01`);
|
|
82
|
+
// Make the actual fetch call
|
|
83
|
+
const response = await fetch(input, {
|
|
84
|
+
...init,
|
|
85
|
+
headers
|
|
86
|
+
});
|
|
87
|
+
const duration = performance.now() - startTime;
|
|
88
|
+
// Add response attributes
|
|
89
|
+
// Response headers and the reason phrase are the peer's text: a length is a count or 0, and the reason phrase is scrubbed.
|
|
90
|
+
span.setAttributes({
|
|
91
|
+
'http.status_code': response.status,
|
|
92
|
+
'http.response_content_length': ContentLengthSchema.parse(response.headers.get('content-length')),
|
|
93
|
+
'http.duration_ms': duration
|
|
94
|
+
});
|
|
95
|
+
// Set span status based on HTTP status
|
|
96
|
+
if (response.status >= 400) {
|
|
97
|
+
span.setStatus({
|
|
98
|
+
code: otel.SpanStatusCode.ERROR,
|
|
99
|
+
message: `HTTP ${response.status}: ${peerText(url, headerValues, response.statusText)}`
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
span.setStatus({ code: otel.SpanStatusCode.OK });
|
|
104
|
+
}
|
|
105
|
+
// Log the external API call
|
|
106
|
+
const level = response.status >= 500 ? 'error' : response.status >= 400 ? 'warn' : 'debug';
|
|
107
|
+
logger[level](`External API call: ${method} ${hostname}`, {
|
|
108
|
+
method,
|
|
109
|
+
url: echoedUrl,
|
|
110
|
+
status: response.status,
|
|
111
|
+
duration,
|
|
112
|
+
traceId: spanContext.traceId,
|
|
113
|
+
spanId: spanContext.spanId,
|
|
114
|
+
category: 'external-api'
|
|
115
|
+
});
|
|
116
|
+
return response;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
// Record the exception, described with the URL's credentials and every request header value removed from
|
|
120
|
+
// every text it carries (the runtime's own error may repeat the userinfo, or a header value it refused).
|
|
121
|
+
const failure = createRequestFailureSchema(url, headerValues).parse(error);
|
|
122
|
+
span.recordException({ name: failure.name, message: failure.message, stack: failure.stack });
|
|
123
|
+
span.setStatus({
|
|
124
|
+
code: otel.SpanStatusCode.ERROR,
|
|
125
|
+
message: failure.message
|
|
126
|
+
});
|
|
127
|
+
logger.error(`External API call failed: ${method} ${hostname}`, {
|
|
128
|
+
error: failure,
|
|
129
|
+
method,
|
|
130
|
+
url: echoedUrl,
|
|
131
|
+
category: 'external-api'
|
|
132
|
+
});
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
span.end();
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Helper function for JSON API calls with instrumentation
|
|
142
|
+
*/
|
|
143
|
+
export async function instrumentedJsonFetch(runtime, url, options) {
|
|
144
|
+
// Add query params if provided
|
|
145
|
+
let finalUrl = url;
|
|
146
|
+
if (options?.params) {
|
|
147
|
+
const params = new URLSearchParams(options.params);
|
|
148
|
+
finalUrl = `${url}?${params.toString()}`;
|
|
149
|
+
}
|
|
150
|
+
// The request's own bound, combined with (never replacing) the caller's
|
|
151
|
+
// signal. The platform timeout signal holds no timer the caller must clear.
|
|
152
|
+
const signals = [options?.signal, options?.timeout ? AbortSignal.timeout(options.timeout) : undefined].filter((signal) => signal instanceof AbortSignal);
|
|
153
|
+
const requestInit = {
|
|
154
|
+
...options,
|
|
155
|
+
headers: {
|
|
156
|
+
'Content-Type': 'application/json',
|
|
157
|
+
Accept: 'application/json',
|
|
158
|
+
...options?.headers
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
if (signals.length > 0) {
|
|
162
|
+
requestInit.signal = signals.length === 1 ? signals[0] : AbortSignal.any(signals);
|
|
163
|
+
}
|
|
164
|
+
const response = await instrumentedFetch(runtime, finalUrl, requestInit);
|
|
165
|
+
if (!response.ok) {
|
|
166
|
+
// The reason phrase is the peer's text and may echo the request URL's credentials: the caller's failure carries it scrubbed.
|
|
167
|
+
throw new Error(`HTTP ${response.status}: ${peerText(finalUrl, requestHeaderValues(finalUrl, requestInit), response.statusText)}`);
|
|
168
|
+
}
|
|
169
|
+
// SAFETY: this helper's contract is that the caller's T names the endpoint's
|
|
170
|
+
// JSON response body; the body is decoded here and T is not re-validated.
|
|
171
|
+
return (await response.json());
|
|
172
|
+
}
|
|
173
|
+
// Default export: the instrumented fetch (it takes the Runtime whose logger reports the call first)
|
|
174
|
+
export default instrumentedFetch;
|
|
175
|
+
//# sourceMappingURL=instrumented-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumented-fetch.js","sourceRoot":"","sources":["../../../src/observability/http/instrumented-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { initializeTelemetry, isTelemetryInitialized, shutdownTelemetry, getTelemetryStatus, getTelemetryInitializationOutcome, type TelemetryInitializationOutcome, type TelemetryHeadersSource } from './telemetry/otel.ts';
|
|
2
|
+
export { TELEMETRY_INSTRUMENTATION_KIND, TelemetryInstrumentationDescriptorSchema, resolveTelemetryInstrumentation, resolveComposedTelemetryInstrumentations, telemetryInstrumentationKind, type TelemetryInstrumentationDescriptor, type TelemetryInstrumentationFactory, type TelemetryRuntimeQuery } from './telemetry-instrumentation.ts';
|
|
3
|
+
export { disposeObservability } from './lifecycle.ts';
|
|
4
|
+
export { ErrorTracker } from './observability/error-tracker.ts';
|
|
5
|
+
export type { ErrorDetails } from './observability/error-tracker.ts';
|
|
6
|
+
export { instrumentedFetch, instrumentedJsonFetch } from './http/instrumented-fetch.ts';
|
|
7
|
+
export { default as instrumentedFetchDefault } from './http/instrumented-fetch.ts';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iCAAiC,EAAE,KAAK,8BAA8B,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC9N,OAAO,EACN,8BAA8B,EAC9B,wCAAwC,EACxC,+BAA+B,EAC/B,wCAAwC,EACxC,4BAA4B,EAC5B,KAAK,kCAAkC,EACvC,KAAK,+BAA+B,EACpC,KAAK,qBAAqB,EAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { initializeTelemetry, isTelemetryInitialized, shutdownTelemetry, getTelemetryStatus, getTelemetryInitializationOutcome } from "./telemetry/otel.js";
|
|
2
|
+
export { TELEMETRY_INSTRUMENTATION_KIND, TelemetryInstrumentationDescriptorSchema, resolveTelemetryInstrumentation, resolveComposedTelemetryInstrumentations, telemetryInstrumentationKind } from "./telemetry-instrumentation.js";
|
|
3
|
+
export { disposeObservability } from "./lifecycle.js";
|
|
4
|
+
export { ErrorTracker } from "./observability/error-tracker.js";
|
|
5
|
+
export { instrumentedFetch, instrumentedJsonFetch } from "./http/instrumented-fetch.js";
|
|
6
|
+
export { default as instrumentedFetchDefault } from "./http/instrumented-fetch.js";
|
|
7
|
+
// Vendor observability clients live in their integrations (RC09):
|
|
8
|
+
// `@vibesdotdev/integrations-signoz`, `-clickhouse` and `-redis`. They read
|
|
9
|
+
// their settings and credentials through `@vibesdotdev/logging/observability/config`.
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iCAAiC,EAAoE,MAAM,qBAAqB,CAAC;AAC9N,OAAO,EACN,8BAA8B,EAC9B,wCAAwC,EACxC,+BAA+B,EAC/B,wCAAwC,EACxC,4BAA4B,EAI5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAEnF,kEAAkE;AAClE,4EAA4E;AAC5E,sFAAsF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RuntimeRef } from '@vibesdotdev/kernel';
|
|
2
|
+
interface NamedDisposer {
|
|
3
|
+
name: string;
|
|
4
|
+
dispose(): Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export declare function disposeNamedResources(disposers: readonly NamedDisposer[]): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Dispose this Root's OpenTelemetry without assuming ownership of the
|
|
9
|
+
* process. Executable hosts call this from their lifecycle coordinator;
|
|
10
|
+
* runtime-backed hosts attach it to their owning plugin's `onDispose`. Vendor
|
|
11
|
+
* clients own their own disposal: `@vibesdotdev/integrations-redis` closes its
|
|
12
|
+
* connections from its plugin's `onDispose` (and exports
|
|
13
|
+
* `disposeRedisConnections`). Concurrent calls for one Root (the Root, its
|
|
14
|
+
* views or generations) share one disposal; another Root's is independent.
|
|
15
|
+
*/
|
|
16
|
+
export declare function disposeObservability(runtime: RuntimeRef): Promise<void>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/observability/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD,UAAU,aAAa;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAKD,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9F;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAavE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { shutdownRuntimeTelemetry } from "./telemetry/telemetry-root.js";
|
|
2
|
+
import { loggingRootOf } from "../core/root-identity.js";
|
|
3
|
+
/** In-flight disposals per Root (`loggingRootOf(runtime)`): telemetry is the Root's, so its runtimes share one. */
|
|
4
|
+
const disposals = new WeakMap();
|
|
5
|
+
export async function disposeNamedResources(disposers) {
|
|
6
|
+
const results = await Promise.allSettled(disposers.map(({ dispose }) => dispose()));
|
|
7
|
+
const failures = results.flatMap((result, index) => {
|
|
8
|
+
if (result.status === 'fulfilled')
|
|
9
|
+
return [];
|
|
10
|
+
const name = disposers[index]?.name ?? `resource-${index + 1}`;
|
|
11
|
+
return [
|
|
12
|
+
new Error(`Failed to dispose observability resource '${name}'`, {
|
|
13
|
+
cause: result.reason
|
|
14
|
+
})
|
|
15
|
+
];
|
|
16
|
+
});
|
|
17
|
+
if (failures.length > 0) {
|
|
18
|
+
throw new AggregateError(failures, `Observability disposal failed for ${failures.length} resource${failures.length === 1 ? '' : 's'}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Dispose this Root's OpenTelemetry without assuming ownership of the
|
|
23
|
+
* process. Executable hosts call this from their lifecycle coordinator;
|
|
24
|
+
* runtime-backed hosts attach it to their owning plugin's `onDispose`. Vendor
|
|
25
|
+
* clients own their own disposal: `@vibesdotdev/integrations-redis` closes its
|
|
26
|
+
* connections from its plugin's `onDispose` (and exports
|
|
27
|
+
* `disposeRedisConnections`). Concurrent calls for one Root (the Root, its
|
|
28
|
+
* views or generations) share one disposal; another Root's is independent.
|
|
29
|
+
*/
|
|
30
|
+
export function disposeObservability(runtime) {
|
|
31
|
+
const root = loggingRootOf(runtime);
|
|
32
|
+
const pending = disposals.get(root);
|
|
33
|
+
if (pending)
|
|
34
|
+
return pending;
|
|
35
|
+
const disposeOperation = disposeNamedResources([
|
|
36
|
+
{ name: 'opentelemetry', dispose: () => shutdownRuntimeTelemetry(runtime) }
|
|
37
|
+
]).finally(() => {
|
|
38
|
+
if (disposals.get(root) === disposeOperation)
|
|
39
|
+
disposals.delete(root);
|
|
40
|
+
});
|
|
41
|
+
disposals.set(root, disposeOperation);
|
|
42
|
+
return disposeOperation;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/observability/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAQzD,mHAAmH;AACnH,MAAM,SAAS,GAAG,IAAI,OAAO,EAAsC,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAAmC;IAC9E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAClD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,YAAY,KAAK,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO;YACN,IAAI,KAAK,CAAC,6CAA6C,IAAI,GAAG,EAAE;gBAC/D,KAAK,EAAE,MAAM,CAAC,MAAM;aACpB,CAAC;SACF,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,cAAc,CACvB,QAAQ,EACR,qCAAqC,QAAQ,CAAC,MAAM,YAAY,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAClG,CAAC;IACH,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAmB;IACvD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;QAC9C,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE;KAC3E,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACf,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,gBAAgB;YAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACtC,OAAO,gBAAgB,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { RuntimeRef } from '@vibesdotdev/kernel';
|
|
2
|
+
import type { LogContext } from '../../schemas/entry.ts';
|
|
3
|
+
export interface ErrorDetails {
|
|
4
|
+
message: string;
|
|
5
|
+
stack?: string;
|
|
6
|
+
/** Logged with the error, so it takes the logger's own context contract. */
|
|
7
|
+
context?: LogContext;
|
|
8
|
+
}
|
|
9
|
+
/** Windowed error counts, as `ErrorTracker.getStats()` reports them. */
|
|
10
|
+
export interface ErrorTrackerStats {
|
|
11
|
+
errorTypes: string[];
|
|
12
|
+
totalErrors: number;
|
|
13
|
+
recentErrors: {
|
|
14
|
+
[key: string]: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** The error type a tracked error counts under when its `errorType` is not a string. */
|
|
18
|
+
export declare const UNTYPED_ERROR = "untyped";
|
|
19
|
+
/** What a tracked error's `loggingError` says when its `errorType` is not a string: never the value. */
|
|
20
|
+
export declare const ERROR_TYPE_NOT_TEXT_MESSAGE = "A tracked error's type must be a string; it is counted as 'untyped'.";
|
|
21
|
+
export declare class ErrorTracker {
|
|
22
|
+
private static readonly ALERT_THRESHOLD;
|
|
23
|
+
private static readonly ALERT_WINDOW;
|
|
24
|
+
private static readonly ALERT_COOLDOWN;
|
|
25
|
+
/**
|
|
26
|
+
* Track an error occurrence on this Runtime
|
|
27
|
+
*/
|
|
28
|
+
static trackError(runtime: RuntimeRef, errorType: string, details: ErrorDetails): Promise<void>;
|
|
29
|
+
private static record;
|
|
30
|
+
/**
|
|
31
|
+
* Send an alert for repeated errors
|
|
32
|
+
*/
|
|
33
|
+
private static sendAlert;
|
|
34
|
+
/**
|
|
35
|
+
* Get this Runtime's current error statistics
|
|
36
|
+
*/
|
|
37
|
+
static getStats(runtime: RuntimeRef): ErrorTrackerStats;
|
|
38
|
+
/**
|
|
39
|
+
* Reset this Runtime's error counts (for testing)
|
|
40
|
+
*/
|
|
41
|
+
static reset(runtime: RuntimeRef): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=error-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-tracker.d.ts","sourceRoot":"","sources":["../../../src/observability/observability/error-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIzD,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,OAAO,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACxC;AAYD,wFAAwF;AACxF,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,wGAAwG;AACxG,eAAO,MAAM,2BAA2B,yEAAkF,CAAC;AAa3H,qBAAa,YAAY;IAGxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAK;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAU;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAU;IAEhD;;OAEG;WACU,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;mBAoBhF,MAAM;IAuC3B;;OAEG;mBACkB,SAAS;IAsB9B;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,iBAAiB;IAwBvD;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;CAMvC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { getLogger } from "../../contexts/logger.js";
|
|
2
|
+
import { createFallbackLogger } from "../../contexts/fallback-logger.js";
|
|
3
|
+
import * as z from 'zod/v4';
|
|
4
|
+
import { LoggedErrorSchema } from "../../core/redact.js";
|
|
5
|
+
import { derivedLoggerMetadata, mergeCallContexts } from "../../core/entry-context.js";
|
|
6
|
+
import { settle } from "../../core/outcome.js";
|
|
7
|
+
import { loggingRootOf } from "../../core/root-identity.js";
|
|
8
|
+
const trackers = new WeakMap();
|
|
9
|
+
/** The error type a tracked error counts under when its `errorType` is not a string. */
|
|
10
|
+
export const UNTYPED_ERROR = 'untyped';
|
|
11
|
+
/** What a tracked error's `loggingError` says when its `errorType` is not a string: never the value. */
|
|
12
|
+
export const ERROR_TYPE_NOT_TEXT_MESSAGE = `A tracked error's type must be a string; it is counted as '${UNTYPED_ERROR}'.`;
|
|
13
|
+
/** A string, recognized by `typeof` alone: a schema's failure path would read a Proxy's prototype, which a trap throws from. */
|
|
14
|
+
const ErrorTypeSchema = z.custom((value) => typeof value === 'string');
|
|
15
|
+
function trackerFor(runtime) {
|
|
16
|
+
let state = trackers.get(loggingRootOf(runtime));
|
|
17
|
+
if (!state) {
|
|
18
|
+
state = { errorCounts: new Map(), lastAlertSent: new Map(), errorWindow: new Map() };
|
|
19
|
+
trackers.set(loggingRootOf(runtime), state);
|
|
20
|
+
}
|
|
21
|
+
return state;
|
|
22
|
+
}
|
|
23
|
+
export class ErrorTracker {
|
|
24
|
+
// Configuration
|
|
25
|
+
static ALERT_THRESHOLD = 5; // Number of errors before alerting
|
|
26
|
+
static ALERT_WINDOW = 300000; // 5 minutes
|
|
27
|
+
static ALERT_COOLDOWN = 300000; // 5 minutes between alerts
|
|
28
|
+
/**
|
|
29
|
+
* Track an error occurrence on this Runtime
|
|
30
|
+
*/
|
|
31
|
+
static async trackError(runtime, errorType, details) {
|
|
32
|
+
const logger = getLogger('error-tracker', runtime);
|
|
33
|
+
// The caller's values are read once, through the log call's guarded context path: a getter or Proxy trap never
|
|
34
|
+
// throws into the caller, and what it threw is never described (it may carry the value); it rides as the `loggingError`.
|
|
35
|
+
const type = ErrorTypeSchema.safeParse(errorType);
|
|
36
|
+
const read = mergeCallContexts({}, details);
|
|
37
|
+
const failure = read.failure ?? (type.success ? undefined : { name: 'TypeError', message: ERROR_TYPE_NOT_TEXT_MESSAGE });
|
|
38
|
+
const recorded = await settle(this.record(logger, trackerFor(runtime), type.success ? type.data : UNTYPED_ERROR, derivedLoggerMetadata({ context: read.context, failure })));
|
|
39
|
+
// Error tracking never breaks the app: its own failure is reported, not rethrown.
|
|
40
|
+
if (!recorded.failed)
|
|
41
|
+
return;
|
|
42
|
+
const recordFailure = LoggedErrorSchema.parse(recorded.cause);
|
|
43
|
+
const reported = await settle(Promise.resolve().then(() => logger.error('Failed to track error', { errorType: type.success ? type.data : UNTYPED_ERROR, error: recordFailure })));
|
|
44
|
+
// The runtime's own logger is what failed: the host console is the report that remains.
|
|
45
|
+
if (reported.failed) {
|
|
46
|
+
(await createFallbackLogger('error-tracker', runtime)).error('Failed to track error, and its report through the runtime logger failed too', {
|
|
47
|
+
errorType: type.success ? type.data : UNTYPED_ERROR, error: recordFailure, reportError: LoggedErrorSchema.parse(reported.cause)
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
static async record(logger, tracker, errorType, details) {
|
|
52
|
+
const { errorWindow, errorCounts, lastAlertSent } = tracker;
|
|
53
|
+
const now = Date.now();
|
|
54
|
+
// Update error window
|
|
55
|
+
if (!errorWindow.has(errorType)) {
|
|
56
|
+
errorWindow.set(errorType, []);
|
|
57
|
+
}
|
|
58
|
+
const window = errorWindow.get(errorType);
|
|
59
|
+
window.push(now);
|
|
60
|
+
// Remove old entries outside the window
|
|
61
|
+
const cutoff = now - this.ALERT_WINDOW;
|
|
62
|
+
const filtered = window.filter((timestamp) => timestamp > cutoff);
|
|
63
|
+
errorWindow.set(errorType, filtered);
|
|
64
|
+
// Update total count
|
|
65
|
+
const count = (errorCounts.get(errorType) || 0) + 1;
|
|
66
|
+
errorCounts.set(errorType, count);
|
|
67
|
+
logger.warn('system.error', {
|
|
68
|
+
errorType,
|
|
69
|
+
...details,
|
|
70
|
+
count,
|
|
71
|
+
recentCount: filtered.length
|
|
72
|
+
});
|
|
73
|
+
// Check if we should send alert
|
|
74
|
+
if (filtered.length >= this.ALERT_THRESHOLD) {
|
|
75
|
+
const lastAlert = lastAlertSent.get(errorType) || 0;
|
|
76
|
+
if (now - lastAlert > this.ALERT_COOLDOWN) {
|
|
77
|
+
await this.sendAlert(logger, errorType, filtered.length, details);
|
|
78
|
+
lastAlertSent.set(errorType, now);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Send an alert for repeated errors
|
|
84
|
+
*/
|
|
85
|
+
static async sendAlert(logger, errorType, count, details) {
|
|
86
|
+
// Log alert
|
|
87
|
+
logger.error(`ALERT: ${errorType} occurred ${count} times in ${this.ALERT_WINDOW / 60000} minutes`, details);
|
|
88
|
+
logger.error('system.error.alert', {
|
|
89
|
+
errorType,
|
|
90
|
+
severity: 'critical',
|
|
91
|
+
alert: true,
|
|
92
|
+
count,
|
|
93
|
+
window: `${this.ALERT_WINDOW / 60000} minutes`,
|
|
94
|
+
...details
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get this Runtime's current error statistics
|
|
99
|
+
*/
|
|
100
|
+
static getStats(runtime) {
|
|
101
|
+
const { errorWindow, errorCounts } = trackerFor(runtime);
|
|
102
|
+
const now = Date.now();
|
|
103
|
+
const cutoff = now - this.ALERT_WINDOW;
|
|
104
|
+
const recentErrors = {};
|
|
105
|
+
let totalErrors = 0;
|
|
106
|
+
for (const [errorType, count] of errorCounts) {
|
|
107
|
+
totalErrors += count;
|
|
108
|
+
const window = errorWindow.get(errorType) || [];
|
|
109
|
+
const recent = window.filter((timestamp) => timestamp > cutoff).length;
|
|
110
|
+
if (recent > 0) {
|
|
111
|
+
recentErrors[errorType] = recent;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
errorTypes: Array.from(errorCounts.keys()),
|
|
116
|
+
totalErrors,
|
|
117
|
+
recentErrors
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Reset this Runtime's error counts (for testing)
|
|
122
|
+
*/
|
|
123
|
+
static reset(runtime) {
|
|
124
|
+
const { errorWindow, errorCounts, lastAlertSent } = trackerFor(runtime);
|
|
125
|
+
errorCounts.clear();
|
|
126
|
+
lastAlertSent.clear();
|
|
127
|
+
errorWindow.clear();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=error-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-tracker.js","sourceRoot":"","sources":["../../../src/observability/observability/error-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Only `info` is head-sampled (`infoSamplingRate`, the fraction of `info`
|
|
3
|
+
* entries kept). Every other level is always kept: 10% CF head sampling made
|
|
4
|
+
* production incidents invisible.
|
|
5
|
+
*/
|
|
6
|
+
export type SampledLogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
7
|
+
export declare function shouldKeepLog(level: SampledLogLevel, infoSamplingRate: number): boolean;
|
|
8
|
+
//# sourceMappingURL=should-keep-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"should-keep-log.d.ts","sourceRoot":"","sources":["../../src/observability/should-keep-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAKvF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function shouldKeepLog(level, infoSamplingRate) {
|
|
2
|
+
if (level !== 'info')
|
|
3
|
+
return true;
|
|
4
|
+
if (!Number.isFinite(infoSamplingRate) || infoSamplingRate >= 1)
|
|
5
|
+
return true;
|
|
6
|
+
if (infoSamplingRate <= 0)
|
|
7
|
+
return false;
|
|
8
|
+
return Math.random() < infoSamplingRate;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=should-keep-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"should-keep-log.js","sourceRoot":"","sources":["../../src/observability/should-keep-log.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,aAAa,CAAC,KAAsB,EAAE,gBAAwB;IAC7E,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,IAAI,gBAAgB,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry Configuration and Initialization
|
|
3
|
+
*
|
|
4
|
+
* This module initializes OpenTelemetry instrumentation for the application,
|
|
5
|
+
* providing tracing, metrics, and logs to SignOz/OTEL collectors.
|
|
6
|
+
*/
|
|
7
|
+
import { type RuntimeRef, type VibesRuntime } from '@vibesdotdev/kernel';
|
|
8
|
+
import { resolveOtelHeaders, type TelemetryHeadersSource } from '../../core/otlp-headers.ts';
|
|
9
|
+
export { resolveOtelHeaders, type TelemetryHeadersSource };
|
|
10
|
+
import { type TelemetryInitializationOutcome } from './telemetry-root.ts';
|
|
11
|
+
export type { TelemetryInitializationOutcome };
|
|
12
|
+
import { type TelemetryRuntimeQuery } from '../telemetry-instrumentation.ts';
|
|
13
|
+
/** The typed outcome of this Runtime's last `initializeTelemetry` call. */
|
|
14
|
+
export declare function getTelemetryInitializationOutcome(runtime: RuntimeRef): TelemetryInitializationOutcome;
|
|
15
|
+
/**
|
|
16
|
+
* Initialize OpenTelemetry SDK on the host `runtime`: its composed provider
|
|
17
|
+
* instrumentations (the `observability/telemetry-instrumentation` kind — AWS
|
|
18
|
+
* SDK, Redis/ioredis, …) are added beside the built-in HTTP/Express/PG/undici/
|
|
19
|
+
* gRPC ones.
|
|
20
|
+
*/
|
|
21
|
+
export declare function initializeTelemetry(runtime: TelemetryRuntimeQuery & VibesRuntime): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Whether this Runtime's telemetry SDK is running
|
|
24
|
+
*/
|
|
25
|
+
export declare function isTelemetryInitialized(runtime: RuntimeRef): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Shut down this Runtime's telemetry (for testing, and for hosts' lifecycle
|
|
28
|
+
* coordinators). It ends the Runtime's claim on the process's OpenTelemetry
|
|
29
|
+
* registry; another Runtime's telemetry is untouched.
|
|
30
|
+
*/
|
|
31
|
+
export declare function shutdownTelemetry(runtime: RuntimeRef): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Get this Runtime's telemetry configuration and state (for diagnostics)
|
|
34
|
+
*/
|
|
35
|
+
export declare function getTelemetryStatus(runtime: VibesRuntime): Promise<{
|
|
36
|
+
initialized: boolean;
|
|
37
|
+
enabled: boolean;
|
|
38
|
+
outcome: TelemetryInitializationOutcome;
|
|
39
|
+
config: {
|
|
40
|
+
serviceName: string;
|
|
41
|
+
environment: string | undefined;
|
|
42
|
+
endpoint: string;
|
|
43
|
+
protocol: "grpc";
|
|
44
|
+
samplingRate: number;
|
|
45
|
+
};
|
|
46
|
+
}>;
|
|
47
|
+
//# sourceMappingURL=otel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../../src/observability/telemetry/otel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAmB,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAU1F,OAAO,EAAE,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAE7F,OAAO,EAAE,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,CAAC;AAM3D,OAAO,EAMN,KAAK,8BAA8B,EACnC,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,8BAA8B,EAAE,CAAC;AAC/C,OAAO,EAA4C,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAsBvH,2EAA2E;AAC3E,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,UAAU,GAAG,8BAA8B,CAErG;AAydD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmLtG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,YAAY;;;;;;;;;;;GAc7D"}
|