@vibesdotdev/logging 0.0.2 → 1.0.0-rc.4
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,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Endpoint echoes. A configured endpoint may carry credentials in its userinfo
|
|
3
|
+
* (`user:password@host`) or query (`?token=...`). Everything Logging logs,
|
|
4
|
+
* reports or returns about an endpoint passes through these schemas, so only
|
|
5
|
+
* scheme, host, port and path are ever echoed. Path segments are kept (they
|
|
6
|
+
* name the collector route); a secret does not belong in a path.
|
|
7
|
+
*/
|
|
8
|
+
import * as z from 'zod/v4';
|
|
9
|
+
import { attempt } from "./outcome.js";
|
|
10
|
+
import { CallerStringSchema, isSecretKey, REDACTED, ThrownValueSchema } from "./redact.js";
|
|
11
|
+
/** What an endpoint that is not a URL echoes as: its text could be anything, so none of it is shown. */
|
|
12
|
+
export const UNPARSEABLE_ENDPOINT = '[unparseable-endpoint]';
|
|
13
|
+
/** An endpoint reduced to the parts that are safe to echo: userinfo, query and fragment are dropped. Any other value refuses as a `ZodError`. */
|
|
14
|
+
export const RedactedEndpointSchema = CallerStringSchema.transform((endpoint) => {
|
|
15
|
+
if (!URL.canParse(endpoint))
|
|
16
|
+
return UNPARSEABLE_ENDPOINT;
|
|
17
|
+
const url = new URL(endpoint);
|
|
18
|
+
url.username = '';
|
|
19
|
+
url.password = '';
|
|
20
|
+
url.search = '';
|
|
21
|
+
url.hash = '';
|
|
22
|
+
// `URL` writes an empty path as `/`; the echo keeps the endpoint's own spelling.
|
|
23
|
+
const slashless = url.pathname === '/' && !endpoint.split(/[?#]/)[0]?.endsWith('/');
|
|
24
|
+
return slashless ? url.href.slice(0, -1) : url.href;
|
|
25
|
+
});
|
|
26
|
+
function decoded(component) {
|
|
27
|
+
const outcome = attempt(() => decodeURIComponent(component));
|
|
28
|
+
// A component that is not valid percent-encoding has only its raw spelling.
|
|
29
|
+
return outcome.failed ? component : outcome.value;
|
|
30
|
+
}
|
|
31
|
+
function encoded(component) {
|
|
32
|
+
const outcome = attempt(() => encodeURIComponent(component));
|
|
33
|
+
return outcome.failed ? component : outcome.value;
|
|
34
|
+
}
|
|
35
|
+
/** A text as it appears inside a JSON string (`"` and `\\` escaped), so a serialized echo is matched too. */
|
|
36
|
+
function jsonEscaped(text) {
|
|
37
|
+
return JSON.stringify(text).slice(1, -1);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Every spelling a credential component may be echoed in: raw, percent-decoded,
|
|
41
|
+
* percent-encoded once more (a raw `%2F` echoed as `%252F`), and each of those
|
|
42
|
+
* as JSON-escaped text. A query component is also spelled with `+` and `%20`
|
|
43
|
+
* swapped both ways and decoded with `+` read as a space. Percent-encoding hex
|
|
44
|
+
* case needs no spelling of its own: fragments are matched case-insensitively.
|
|
45
|
+
*/
|
|
46
|
+
function spellings(raw, query) {
|
|
47
|
+
const plain = decoded(raw);
|
|
48
|
+
const forms = [raw, plain, encoded(raw), encoded(plain)];
|
|
49
|
+
if (query)
|
|
50
|
+
forms.push(decoded(raw.replaceAll('+', ' ')), raw.replaceAll('+', '%20'), raw.replace(/%20/gi, '+'));
|
|
51
|
+
return [...forms, ...forms.map(jsonEscaped)];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Query parameter names whose value is a credential (case-insensitive). The
|
|
55
|
+
* rule is the log redaction's own: every name `isSecretKey` calls secret (so
|
|
56
|
+
* the two share one credential-word list, `CREDENTIAL_KEY_WORDS`), plus
|
|
57
|
+
* the names a URL uses for a credential that a log key does not (`code`,
|
|
58
|
+
* `session`, `sid`, `sig`) and any name ending in `_key` or `-key`. This list
|
|
59
|
+
* names the common ones; every one of them is a credential under that rule.
|
|
60
|
+
* Other parameters (`format=json`, `v=1`) are not credentials, so their values
|
|
61
|
+
* are not matched on their own; the whole query still is.
|
|
62
|
+
*/
|
|
63
|
+
export const CREDENTIAL_QUERY_PARAMETER_NAMES = [
|
|
64
|
+
'token', 'key', 'apikey', 'api_key', 'access_token', 'secret', 'sig', 'signature', 'password', 'pass', 'pwd',
|
|
65
|
+
'auth', 'authorization', 'code', 'session', 'sessionid', 'sid', 'jwt', 'bearer', 'credential'
|
|
66
|
+
];
|
|
67
|
+
/** The URL-only credential names: secret in a query, ordinary as a log key (an error's `code`, a `session` object). */
|
|
68
|
+
const URL_ONLY_CREDENTIAL_NAMES = new Set(['code', 'session', 'sid', 'sig']);
|
|
69
|
+
const URL_KEY_SUFFIX = /[_-]key$/i;
|
|
70
|
+
function isCredentialParameter(rawName) {
|
|
71
|
+
const name = decoded(rawName.replaceAll('+', ' ')).toLowerCase();
|
|
72
|
+
return isSecretKey(name) || URL_ONLY_CREDENTIAL_NAMES.has(name) || URL_KEY_SUFFIX.test(name);
|
|
73
|
+
}
|
|
74
|
+
/** The secret parts of a query: the whole query, and each credential-named parameter's `name=value` pair and value. */
|
|
75
|
+
function queryComponents(search) {
|
|
76
|
+
if (search === '')
|
|
77
|
+
return [];
|
|
78
|
+
const credentialPairs = search.split('&').filter((pair) => pair.includes('=') && isCredentialParameter(pair.slice(0, pair.indexOf('='))));
|
|
79
|
+
return [search, ...credentialPairs, ...credentialPairs.map((pair) => pair.slice(pair.indexOf('=') + 1))];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Secret values a request carried beside its endpoint (each configured header
|
|
83
|
+
* value), as the fragments a failure description must not echo: the value
|
|
84
|
+
* itself and, for an `<auth-scheme> <credential>` value (`Bearer abc`), the
|
|
85
|
+
* credential alone, each in every spelling.
|
|
86
|
+
*/
|
|
87
|
+
function headerValueFragments(secrets) {
|
|
88
|
+
return secrets.flatMap((secret) => {
|
|
89
|
+
const value = secret.trim();
|
|
90
|
+
const scheme = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+[ \t]+(.+)$/.exec(value);
|
|
91
|
+
return [value, ...(scheme?.[1] ? [scheme[1].trim()] : [])];
|
|
92
|
+
}).flatMap((component) => spellings(component, false));
|
|
93
|
+
}
|
|
94
|
+
/** The credential-bearing fragments of an endpoint (and of the request's secret values), longest first, each with what replaces it. */
|
|
95
|
+
function sensitiveFragments(endpoint, secrets) {
|
|
96
|
+
const redacted = RedactedEndpointSchema.parse(endpoint);
|
|
97
|
+
const fragments = new Map([[endpoint, redacted]]);
|
|
98
|
+
if (URL.canParse(endpoint)) {
|
|
99
|
+
const url = new URL(endpoint);
|
|
100
|
+
fragments.set(url.href, redacted);
|
|
101
|
+
// A username is a credential too: `http://TOKEN@host` carries the token there alone.
|
|
102
|
+
const components = [
|
|
103
|
+
...[url.username, url.password, url.hash.slice(1)].flatMap((component) => spellings(component, false)),
|
|
104
|
+
...queryComponents(url.search.slice(1)).flatMap((component) => spellings(component, true))
|
|
105
|
+
];
|
|
106
|
+
for (const fragment of components)
|
|
107
|
+
if (fragment !== '' && !fragments.has(fragment))
|
|
108
|
+
fragments.set(fragment, REDACTED);
|
|
109
|
+
}
|
|
110
|
+
for (const fragment of headerValueFragments(secrets))
|
|
111
|
+
if (fragment !== '' && !fragments.has(fragment))
|
|
112
|
+
fragments.set(fragment, REDACTED);
|
|
113
|
+
return [...fragments].sort((left, right) => right[0].length - left[0].length);
|
|
114
|
+
}
|
|
115
|
+
/** A fragment as a literal regular-expression alternative (`u` flag: only syntax characters are escaped). */
|
|
116
|
+
function literalPattern(fragment) {
|
|
117
|
+
return fragment.replace(/[\\^$.*+?()[\]{}|/]/g, '\\$&');
|
|
118
|
+
}
|
|
119
|
+
/** Below this length a fragment is matched only as a whole token; at or above it, anywhere. */
|
|
120
|
+
export const SUBSTRING_FRAGMENT_MIN_LENGTH = 4;
|
|
121
|
+
const WORD_CHARACTER = /[\p{L}\p{N}]/u;
|
|
122
|
+
/**
|
|
123
|
+
* The match rule for one fragment. A fragment of SUBSTRING_FRAGMENT_MIN_LENGTH or
|
|
124
|
+
* more characters is matched anywhere, so a secret glued to other text
|
|
125
|
+
* (`tokenS3CR3T`) is still removed. A shorter one is matched only where it is not
|
|
126
|
+
* inside a longer letter/digit run (an edge that is itself punctuation needs no
|
|
127
|
+
* guard), so a username `u` removes `u` but leaves `<anonymous>` alone: a one- to
|
|
128
|
+
* three-character secret inside a longer word carries nothing of the secret.
|
|
129
|
+
*/
|
|
130
|
+
function fragmentPattern(fragment) {
|
|
131
|
+
if (fragment.length >= SUBSTRING_FRAGMENT_MIN_LENGTH)
|
|
132
|
+
return literalPattern(fragment);
|
|
133
|
+
const before = WORD_CHARACTER.test(fragment.slice(0, 1)) ? '(?<![\\p{L}\\p{N}])' : '';
|
|
134
|
+
const after = WORD_CHARACTER.test(fragment.slice(-1)) ? '(?![\\p{L}\\p{N}])' : '';
|
|
135
|
+
return `${before}${literalPattern(fragment)}${after}`;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* One pass over a text replacing every credential fragment, case-insensitively,
|
|
139
|
+
* longest first at each position. Replacement text is never rescanned, so a short
|
|
140
|
+
* fragment cannot rewrite the `[REDACTED]` marker or the echoed endpoint it wrote.
|
|
141
|
+
*/
|
|
142
|
+
function createTextScrubber(endpoint, secrets) {
|
|
143
|
+
const fragments = sensitiveFragments(endpoint, secrets).filter(([fragment]) => fragment !== '');
|
|
144
|
+
if (fragments.length === 0)
|
|
145
|
+
return (text) => text;
|
|
146
|
+
const replacements = new Map(fragments.map(([fragment, replacement]) => [fragment.toLowerCase(), replacement]));
|
|
147
|
+
const pattern = new RegExp(fragments.map(([fragment]) => fragmentPattern(fragment)).join('|'), 'giu');
|
|
148
|
+
return (text) => text.replace(pattern, (found) => replacements.get(found.toLowerCase()) ?? REDACTED);
|
|
149
|
+
}
|
|
150
|
+
/** A string, recognized by `typeof` alone: a schema's failure path would read a Proxy's prototype, which a trap throws from. */
|
|
151
|
+
const TextValueSchema = z.custom((value) => typeof value === 'string');
|
|
152
|
+
/** What a response-derived text becomes when it cannot be scrubbed (not a string, or the scrubber cannot be built): none of it is shown. */
|
|
153
|
+
export const UNSCRUBBABLE_TEXT = '[unscrubbable-text]';
|
|
154
|
+
/**
|
|
155
|
+
* A text a peer of `endpoint` controls (a collector's HTTP reason phrase, a
|
|
156
|
+
* header or body excerpt), with the endpoint's credentials removed by the same
|
|
157
|
+
* one-pass scrubber as a failure description. A collector can echo the request
|
|
158
|
+
* line (`401 rejected POST /v1/logs?token=...`), so such text is never logged,
|
|
159
|
+
* reported or attributed raw. `secrets` are the secret values the request
|
|
160
|
+
* carried beside the endpoint (its header values); each is removed the same way.
|
|
161
|
+
* It never throws: a value that is not a string, or a scrubber that cannot be
|
|
162
|
+
* built, becomes {@link UNSCRUBBABLE_TEXT}.
|
|
163
|
+
*/
|
|
164
|
+
export function createEndpointTextSchema(endpoint, secrets = []) {
|
|
165
|
+
return z.unknown().transform((value) => {
|
|
166
|
+
const text = TextValueSchema.safeParse(value);
|
|
167
|
+
if (!text.success)
|
|
168
|
+
return UNSCRUBBABLE_TEXT;
|
|
169
|
+
const scrubbed = attempt(() => createTextScrubber(endpoint, secrets)(text.data));
|
|
170
|
+
return scrubbed.failed ? UNSCRUBBABLE_TEXT : scrubbed.value;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* A described failure walked by value. Every string value is scrubbed; a number
|
|
175
|
+
* whose text holds a credential becomes the REDACTED string (a `status` is dropped
|
|
176
|
+
* instead, keeping its type). Keys of free-form maps (`details`, `fields`, a
|
|
177
|
+
* non-Error thrown object, a non-Error cause) are scrubbed too; the description's
|
|
178
|
+
* own fixed keys (`name`, `message`, `stack`, `code`, ...) are structure, not text.
|
|
179
|
+
* Two keys that scrub to the same text keep the later value.
|
|
180
|
+
*/
|
|
181
|
+
function createScrubbedDescriptionSchema(scrub) {
|
|
182
|
+
const text = z.string().transform(scrub);
|
|
183
|
+
const number = z.number().transform((value) => scrub(String(value)) === String(value) ? value : REDACTED);
|
|
184
|
+
const status = z.number().transform((value) => scrub(String(value)) === String(value) ? value : undefined);
|
|
185
|
+
const scrubKeys = (record) => Object.fromEntries(Object.entries(record).map(([key, value]) => [scrub(key), value]));
|
|
186
|
+
// Bytes are text a credential can travel in: a Buffer's JSON (`{ type: 'Buffer', data }`) or a typed array
|
|
187
|
+
// walked to its index keys is decoded as UTF-8 and, when it carries a fragment, replaced whole.
|
|
188
|
+
const bytesText = (bytes) => new TextDecoder().decode(Uint8Array.from(bytes));
|
|
189
|
+
const ByteSchema = z.number().int().min(0).max(255);
|
|
190
|
+
const bufferJson = z.strictObject({ type: z.literal('Buffer'), data: z.array(ByteSchema) })
|
|
191
|
+
.transform((buffer) => scrub(bytesText(buffer.data)) === bytesText(buffer.data) ? buffer : REDACTED);
|
|
192
|
+
const byteRecord = z.record(z.string().regex(/^\d+$/), ByteSchema)
|
|
193
|
+
.refine((record) => Object.keys(record).length > 0 && Object.keys(record).every((key, index) => key === String(index)))
|
|
194
|
+
.transform((record) => scrub(bytesText(Object.values(record))) === bytesText(Object.values(record)) ? record : REDACTED);
|
|
195
|
+
const free = z.lazy(() => z.union([text, number, z.array(free), bufferJson, byteRecord, freeRecord, z.unknown()]));
|
|
196
|
+
const freeRecord = z.lazy(() => z.record(z.string(), free).transform(scrubKeys));
|
|
197
|
+
const description = z.lazy(() => z.strictObject({
|
|
198
|
+
name: text,
|
|
199
|
+
message: text,
|
|
200
|
+
code: z.union([text, number]).optional(),
|
|
201
|
+
reason: text.optional(),
|
|
202
|
+
status: status.optional(),
|
|
203
|
+
retryable: z.boolean().optional(),
|
|
204
|
+
details: free.optional(),
|
|
205
|
+
fields: freeRecord.optional(),
|
|
206
|
+
stack: text.optional(),
|
|
207
|
+
cause: z.union([description, free]).optional(),
|
|
208
|
+
errors: z.array(description).optional()
|
|
209
|
+
}));
|
|
210
|
+
return description;
|
|
211
|
+
}
|
|
212
|
+
/** What a failure is described as when its description cannot be scrubbed: no value of it is shown. */
|
|
213
|
+
export const UNSCRUBBABLE_FAILURE_MESSAGE = 'The failure could not be described without its endpoint credentials, so none of its text is shown.';
|
|
214
|
+
/** What a value-free description may keep of a thrown value: whether it is an Error, and the Error's own name. */
|
|
215
|
+
const FailureIdentitySchema = z.union([
|
|
216
|
+
z.instanceof(Error).transform((error) => ({ error: true, name: z.string().safeParse(error.name).data })),
|
|
217
|
+
z.unknown().transform(() => ({ error: false, name: undefined }))
|
|
218
|
+
]);
|
|
219
|
+
/** The value-free description: the thrown Error's own name when no credential fragment is in it, and a fixed message. */
|
|
220
|
+
function valueFreeFailure(identity, scrub) {
|
|
221
|
+
const named = attempt(() => {
|
|
222
|
+
if (identity === undefined)
|
|
223
|
+
return 'Error';
|
|
224
|
+
if (!identity.error)
|
|
225
|
+
return 'NonError';
|
|
226
|
+
return identity.name !== undefined && scrub(identity.name) === identity.name ? identity.name : 'Error';
|
|
227
|
+
});
|
|
228
|
+
return { name: named.failed ? 'Error' : named.value, message: UNSCRUBBABLE_FAILURE_MESSAGE };
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* A schema describing any thrown value that failed while using `endpoint`, with the
|
|
232
|
+
* endpoint's credentials removed from every string value the description carries
|
|
233
|
+
* (message, stack, fields such as a runtime's request `path`, details, cause chain,
|
|
234
|
+
* aggregate members), and every value in `secrets` (the header values a request
|
|
235
|
+
* carried: a transport failure can echo one, e.g. `Header 'Authorization' has
|
|
236
|
+
* invalid value: 'Bearer ...'`) removed the same way, so a failure from a
|
|
237
|
+
* credentialed request carries none of its header values. It never throws: a value that cannot be described and
|
|
238
|
+
* scrubbed is described by name and a fixed message, so the caller's own failure
|
|
239
|
+
* (a fetch error, a write's re-buffering) is never replaced by a scrub failure.
|
|
240
|
+
*/
|
|
241
|
+
export function createEndpointFailureSchema(endpoint, secrets = []) {
|
|
242
|
+
return z.unknown().transform((cause) => {
|
|
243
|
+
const identity = attempt(() => FailureIdentitySchema.parse(cause));
|
|
244
|
+
const known = identity.failed ? undefined : identity.value;
|
|
245
|
+
const scrubber = attempt(() => createTextScrubber(endpoint, secrets));
|
|
246
|
+
if (scrubber.failed)
|
|
247
|
+
return valueFreeFailure(known, () => '');
|
|
248
|
+
// The total describer never throws; a value it could only describe value-free keeps this schema's own fallback.
|
|
249
|
+
const thrown = ThrownValueSchema.parse(cause);
|
|
250
|
+
if (!thrown.described)
|
|
251
|
+
return valueFreeFailure(known, scrubber.value);
|
|
252
|
+
const scrubbed = attempt(() => createScrubbedDescriptionSchema(scrubber.value).parse(thrown.error));
|
|
253
|
+
return scrubbed.failed ? valueFreeFailure(known, scrubber.value) : scrubbed.value;
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../../src/core/endpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { type JobLogContext, type LogContext, type PerformanceTrackerParams, type RequestLogContext } from '../schemas/entry.ts';
|
|
3
|
+
import { type LoggedError, type ThrownValueDescription } from './redact.ts';
|
|
4
|
+
/** The `loggingError.reason` of an entry whose context could not be normalized. */
|
|
5
|
+
export declare const LOG_CONTEXT_FAILED_REASON = "log-context-unnormalizable";
|
|
6
|
+
/** What a log call's context became at the call boundary: normalized, or the failure normalizing it. */
|
|
7
|
+
export interface CallContext {
|
|
8
|
+
readonly context: LogContext;
|
|
9
|
+
readonly failure: LoggedError | undefined;
|
|
10
|
+
}
|
|
11
|
+
/** What an unreadable context's failure says: never the thrown message, which a hostile getter can fill with the value. */
|
|
12
|
+
export declare const UNREADABLE_CONTEXT_MESSAGE = "The log context could not be read (a getter, toJSON or conversion threw); the thrown message is withheld because it may carry the value.";
|
|
13
|
+
/** Describes the failure of a context that could not be read. */
|
|
14
|
+
export declare const UnreadableContextFailureSchema: z.ZodType<LoggedError, unknown, z.core.$ZodTypeInternals<LoggedError, unknown>>;
|
|
15
|
+
/** What a backend failure says when its error cannot be described: never the thrown message, which a hostile getter can fill with the value. */
|
|
16
|
+
export declare const UNDESCRIBABLE_BACKEND_FAILURE_MESSAGE = "A logging backend failed and its error could not be described (a getter, toJSON or conversion threw); the thrown message is withheld because it may carry the value.";
|
|
17
|
+
/**
|
|
18
|
+
* Describes a sink's or output's failure (or a failed recovery) with the total
|
|
19
|
+
* describer: the full `LoggedError` when it can be described, else its readable
|
|
20
|
+
* error name and the fixed `UNDESCRIBABLE_BACKEND_FAILURE_MESSAGE`. It never
|
|
21
|
+
* throws into the caller that logged, and never rejects the joined write.
|
|
22
|
+
*/
|
|
23
|
+
export declare const BackendFailureSchema: z.ZodPipe<z.ZodType<ThrownValueDescription, unknown, z.core.$ZodTypeInternals<ThrownValueDescription, unknown>>, z.ZodTransform<LoggedError, ThrownValueDescription>>;
|
|
24
|
+
/**
|
|
25
|
+
* A tracker's `fail(err, ctx)` context: the thrown value's description as
|
|
26
|
+
* `error` over `base`, then the raw `ctx`, read without throwing. A thrown value
|
|
27
|
+
* that could only be described value-free travels as the entry's failure too,
|
|
28
|
+
* so the entry carries it as its `loggingError` and the logger reports it once.
|
|
29
|
+
*/
|
|
30
|
+
export declare function mergeFailureContexts(base: LogContext, thrown: ThrownValueDescription, ...raws: readonly unknown[]): CallContext;
|
|
31
|
+
/**
|
|
32
|
+
* A log call's context, normalized at the boundary. A context that cannot be
|
|
33
|
+
* normalized (a throwing `toJSON` or getter) never throws into the caller: the
|
|
34
|
+
* failure travels as a value to the entry, which reports it.
|
|
35
|
+
*/
|
|
36
|
+
export declare const CallContextSchema: z.ZodPipe<z.ZodUnknown, z.ZodTransform<CallContext, unknown>>;
|
|
37
|
+
/**
|
|
38
|
+
* Raw contexts merged, in order, over `base`, each read at the boundary without
|
|
39
|
+
* throwing (`end(ctx)`, `fail(err, ctx)`, a derived logger's context). What
|
|
40
|
+
* could be read is kept; the first failure travels as a value.
|
|
41
|
+
*/
|
|
42
|
+
export declare function mergeCallContexts(base: LogContext, ...raws: readonly unknown[]): CallContext;
|
|
43
|
+
/** The label a performance tracker uses when its `operation` is not a string. */
|
|
44
|
+
export declare const UNLABELED_OPERATION = "unlabeled";
|
|
45
|
+
/** What a tracker's failure says when its `operation` is not a string: never the value. */
|
|
46
|
+
export declare const OPERATION_NOT_TEXT_MESSAGE = "A performance tracker's operation must be a string; its entries use the label 'unlabeled'.";
|
|
47
|
+
/** A performance tracker's params, read once at creation: its label and its metadata context. */
|
|
48
|
+
export interface TrackerCall {
|
|
49
|
+
/** The operation label every entry names: the `operation` string, else {@link UNLABELED_OPERATION}. */
|
|
50
|
+
readonly operation: string;
|
|
51
|
+
/** `base` with the label as `operation` and the metadata merged; an unreadable or non-string field is its failure. */
|
|
52
|
+
readonly merged: CallContext;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Reads `performanceTracker(params)` once, without throwing: `operation` and
|
|
56
|
+
* `metadata` are each read once inside the guard. A string `operation` is the
|
|
57
|
+
* label; any other value (or params that cannot be read) labels the entries
|
|
58
|
+
* {@link UNLABELED_OPERATION} and travels as the tracker's failure, so every
|
|
59
|
+
* entry carries it as its `loggingError` and the logger reports it once.
|
|
60
|
+
*/
|
|
61
|
+
export declare function readTrackerParams(base: LogContext, params: PerformanceTrackerParams): TrackerCall;
|
|
62
|
+
/** The fields `withRequestContext` and `withJobContext` take from their context. */
|
|
63
|
+
export declare const REQUEST_CONTEXT_FIELDS: readonly string[];
|
|
64
|
+
export declare const JOB_CONTEXT_FIELDS: readonly string[];
|
|
65
|
+
/**
|
|
66
|
+
* Only the named fields of a raw context (`withRequestContext`,
|
|
67
|
+
* `withJobContext`), read without throwing; a field the context leaves unset
|
|
68
|
+
* (or null) keeps `base`'s value.
|
|
69
|
+
*/
|
|
70
|
+
export declare function mergeCallContextFields(base: LogContext, raw: RequestLogContext | JobLogContext, fields: readonly string[]): CallContext;
|
|
71
|
+
/**
|
|
72
|
+
* The metadata of a logger derived from `merged`. When a context could not be
|
|
73
|
+
* read it carries the `loggingError`, so every entry the derived logger emits
|
|
74
|
+
* shows the failure (the logger reports it once, at its first emission).
|
|
75
|
+
*/
|
|
76
|
+
export declare function derivedLoggerMetadata(merged: CallContext): LogContext;
|
|
77
|
+
/**
|
|
78
|
+
* A public log method: the message is validated and the context is handed on
|
|
79
|
+
* raw. The logger checks the entry's level (and emission window and sampling)
|
|
80
|
+
* first and only then normalizes the context, once, with
|
|
81
|
+
* {@link OptionalCallContextSchema}: a filtered call never walks its context, and an
|
|
82
|
+
* emitted one walks it exactly once. Normalizing never throws.
|
|
83
|
+
*/
|
|
84
|
+
export declare const LogCallSchema: z.ZodFunction<z.ZodTuple<readonly [z.ZodCustom<string, string>, z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodUnknown>], null>, z.ZodVoid>;
|
|
85
|
+
/** A log call's raw context, normalized once at the boundary without throwing (`undefined` is no context). */
|
|
86
|
+
export declare const OptionalCallContextSchema: z.ZodOptional<z.ZodPipe<z.ZodUnknown, z.ZodTransform<CallContext, unknown>>>;
|
|
87
|
+
/** A forwarding wrapper hands the raw context on, for the logger it wraps to normalize. */
|
|
88
|
+
export declare const ForwardedLogCallSchema: z.ZodFunction<z.ZodTuple<readonly [z.ZodCustom<string, string>, z.ZodOptional<z.ZodUnknown>, z.ZodOptional<z.ZodUnknown>], null>, z.ZodVoid>;
|
|
89
|
+
/** An entry's context, and the failure when its context could not be prepared. */
|
|
90
|
+
export interface PreparedEntryContext {
|
|
91
|
+
readonly context: LogContext;
|
|
92
|
+
readonly failure: LoggedError | undefined;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The entry context for a logger's `base` metadata and a call's context. Both
|
|
96
|
+
* are already walked snapshots (the base was read once when the logger was
|
|
97
|
+
* made, the call once at the boundary), so they are merged, not walked again:
|
|
98
|
+
* every value is JSON and every own key (a `__proto__` field included) is kept
|
|
99
|
+
* as data. A logging backend must never break the caller that logged, and its
|
|
100
|
+
* failure must not be silent: when the call's context could not be read the
|
|
101
|
+
* entry keeps its level, namespace and message, its context becomes what could
|
|
102
|
+
* be kept plus a `loggingError` describing the failure (never the caller's
|
|
103
|
+
* value), and the failure is returned for the diagnostics path.
|
|
104
|
+
*/
|
|
105
|
+
export declare function prepareEntryContext(base: LogContext, call: CallContext | undefined): PreparedEntryContext;
|
|
106
|
+
//# sourceMappingURL=entry-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-context.d.ts","sourceRoot":"","sources":["../../src/core/entry-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAgD,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE/K,OAAO,EAA+F,KAAK,WAAW,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGzK,mFAAmF;AACnF,eAAO,MAAM,yBAAyB,+BAA+B,CAAC;AAEtE,wGAAwG;AACxG,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;CAC1C;AAED,2HAA2H;AAC3H,eAAO,MAAM,0BAA0B,6IAA6I,CAAC;AAErL,iEAAiE;AACjE,eAAO,MAAM,8BAA8B,iFAAqD,CAAC;AAEjG,gJAAgJ;AAChJ,eAAO,MAAM,qCAAqC,yKAAyK,CAAC;AAE5N;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,uKAAkH,CAAC;AAEpJ;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,WAAW,CAI/H;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,+DAI5B,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,WAAW,CAS5F;AAED,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,2FAA2F;AAC3F,eAAO,MAAM,0BAA0B,+FAA4G,CAAC;AAEpJ,iGAAiG;AACjG,MAAM,WAAW,WAAW;IAC3B,uGAAuG;IACvG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sHAAsH;IACtH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC7B;AAOD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,wBAAwB,GAAG,WAAW,CAYjG;AAED,oFAAoF;AACpF,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAA4C,CAAC;AACjG,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAwC,CAAC;AAEzF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,GAAG,aAAa,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAOvI;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAErE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,8IAGxB,CAAC;AAEH,8GAA8G;AAC9G,eAAO,MAAM,yBAAyB,8EAA+B,CAAC;AAEtE,2FAA2F;AAC3F,eAAO,MAAM,sBAAsB,8IAGjC,CAAC;AAEH,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;CAC1C;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,oBAAoB,CAKzG"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { JobLogContextSchema, RequestLogContextSchema } from "../schemas/entry.js";
|
|
3
|
+
import { NormalizedLogContextSchema } from "./normalize.js";
|
|
4
|
+
import { CallerStringSchema, createFieldsReadSchema, createThrownValueSchema, valueFreeFailureSchema } from "./redact.js";
|
|
5
|
+
import { attempt } from "./outcome.js";
|
|
6
|
+
/** The `loggingError.reason` of an entry whose context could not be normalized. */
|
|
7
|
+
export const LOG_CONTEXT_FAILED_REASON = 'log-context-unnormalizable';
|
|
8
|
+
/** What an unreadable context's failure says: never the thrown message, which a hostile getter can fill with the value. */
|
|
9
|
+
export const UNREADABLE_CONTEXT_MESSAGE = 'The log context could not be read (a getter, toJSON or conversion threw); the thrown message is withheld because it may carry the value.';
|
|
10
|
+
/** Describes the failure of a context that could not be read. */
|
|
11
|
+
export const UnreadableContextFailureSchema = valueFreeFailureSchema(UNREADABLE_CONTEXT_MESSAGE);
|
|
12
|
+
/** What a backend failure says when its error cannot be described: never the thrown message, which a hostile getter can fill with the value. */
|
|
13
|
+
export const UNDESCRIBABLE_BACKEND_FAILURE_MESSAGE = 'A logging backend failed and its error could not be described (a getter, toJSON or conversion threw); the thrown message is withheld because it may carry the value.';
|
|
14
|
+
/**
|
|
15
|
+
* Describes a sink's or output's failure (or a failed recovery) with the total
|
|
16
|
+
* describer: the full `LoggedError` when it can be described, else its readable
|
|
17
|
+
* error name and the fixed `UNDESCRIBABLE_BACKEND_FAILURE_MESSAGE`. It never
|
|
18
|
+
* throws into the caller that logged, and never rejects the joined write.
|
|
19
|
+
*/
|
|
20
|
+
export const BackendFailureSchema = createThrownValueSchema(UNDESCRIBABLE_BACKEND_FAILURE_MESSAGE).transform((thrown) => thrown.error);
|
|
21
|
+
/**
|
|
22
|
+
* A tracker's `fail(err, ctx)` context: the thrown value's description as
|
|
23
|
+
* `error` over `base`, then the raw `ctx`, read without throwing. A thrown value
|
|
24
|
+
* that could only be described value-free travels as the entry's failure too,
|
|
25
|
+
* so the entry carries it as its `loggingError` and the logger reports it once.
|
|
26
|
+
*/
|
|
27
|
+
export function mergeFailureContexts(base, thrown, ...raws) {
|
|
28
|
+
const merged = mergeCallContexts({ ...base, error: thrown.error }, ...raws);
|
|
29
|
+
if (thrown.described)
|
|
30
|
+
return merged;
|
|
31
|
+
return { context: merged.context, failure: merged.failure ?? thrown.error };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A log call's context, normalized at the boundary. A context that cannot be
|
|
35
|
+
* normalized (a throwing `toJSON` or getter) never throws into the caller: the
|
|
36
|
+
* failure travels as a value to the entry, which reports it.
|
|
37
|
+
*/
|
|
38
|
+
export const CallContextSchema = z.unknown().transform((raw) => {
|
|
39
|
+
const normalized = attempt(() => NormalizedLogContextSchema.parse(raw));
|
|
40
|
+
if (!normalized.failed)
|
|
41
|
+
return { context: normalized.value, failure: undefined };
|
|
42
|
+
return { context: {}, failure: UnreadableContextFailureSchema.parse(normalized.cause) };
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Raw contexts merged, in order, over `base`, each read at the boundary without
|
|
46
|
+
* throwing (`end(ctx)`, `fail(err, ctx)`, a derived logger's context). What
|
|
47
|
+
* could be read is kept; the first failure travels as a value.
|
|
48
|
+
*/
|
|
49
|
+
export function mergeCallContexts(base, ...raws) {
|
|
50
|
+
let context = base;
|
|
51
|
+
let failure;
|
|
52
|
+
for (const raw of raws) {
|
|
53
|
+
const call = CallContextSchema.parse(raw);
|
|
54
|
+
context = { ...context, ...call.context };
|
|
55
|
+
failure ??= call.failure;
|
|
56
|
+
}
|
|
57
|
+
return { context, failure };
|
|
58
|
+
}
|
|
59
|
+
/** The label a performance tracker uses when its `operation` is not a string. */
|
|
60
|
+
export const UNLABELED_OPERATION = 'unlabeled';
|
|
61
|
+
/** What a tracker's failure says when its `operation` is not a string: never the value. */
|
|
62
|
+
export const OPERATION_NOT_TEXT_MESSAGE = `A performance tracker's operation must be a string; its entries use the label '${UNLABELED_OPERATION}'.`;
|
|
63
|
+
const TrackerOperationReadSchema = createFieldsReadSchema(['operation']);
|
|
64
|
+
const TrackerMetadataReadSchema = createFieldsReadSchema(['metadata']);
|
|
65
|
+
/** A string, recognized by `typeof` alone: a schema's failure path would read a Proxy's prototype, which a trap throws from. */
|
|
66
|
+
const OperationLabelSchema = z.custom((value) => typeof value === 'string');
|
|
67
|
+
/**
|
|
68
|
+
* Reads `performanceTracker(params)` once, without throwing: `operation` and
|
|
69
|
+
* `metadata` are each read once inside the guard. A string `operation` is the
|
|
70
|
+
* label; any other value (or params that cannot be read) labels the entries
|
|
71
|
+
* {@link UNLABELED_OPERATION} and travels as the tracker's failure, so every
|
|
72
|
+
* entry carries it as its `loggingError` and the logger reports it once.
|
|
73
|
+
*/
|
|
74
|
+
export function readTrackerParams(base, params) {
|
|
75
|
+
const read = TrackerOperationReadSchema.safeParse(params);
|
|
76
|
+
const label = read.success ? OperationLabelSchema.safeParse(read.data.operation) : undefined;
|
|
77
|
+
const operation = label?.success ? label.data : UNLABELED_OPERATION;
|
|
78
|
+
const labelFailure = !read.success
|
|
79
|
+
? UnreadableContextFailureSchema.parse(read.error)
|
|
80
|
+
: label?.success ? undefined : { name: 'TypeError', message: OPERATION_NOT_TEXT_MESSAGE };
|
|
81
|
+
const metadata = TrackerMetadataReadSchema.safeParse(params);
|
|
82
|
+
const merged = metadata.success
|
|
83
|
+
? mergeCallContexts({ ...base, operation }, metadata.data.metadata)
|
|
84
|
+
: { context: { ...base, operation }, failure: UnreadableContextFailureSchema.parse(metadata.error) };
|
|
85
|
+
return { operation, merged: { context: merged.context, failure: labelFailure ?? merged.failure } };
|
|
86
|
+
}
|
|
87
|
+
/** The fields `withRequestContext` and `withJobContext` take from their context. */
|
|
88
|
+
export const REQUEST_CONTEXT_FIELDS = RequestLogContextSchema.keyof().options;
|
|
89
|
+
export const JOB_CONTEXT_FIELDS = JobLogContextSchema.keyof().options;
|
|
90
|
+
/**
|
|
91
|
+
* Only the named fields of a raw context (`withRequestContext`,
|
|
92
|
+
* `withJobContext`), read without throwing; a field the context leaves unset
|
|
93
|
+
* (or null) keeps `base`'s value.
|
|
94
|
+
*/
|
|
95
|
+
export function mergeCallContextFields(base, raw, fields) {
|
|
96
|
+
const call = CallContextSchema.parse(raw);
|
|
97
|
+
const picked = Object.fromEntries(fields.flatMap((field) => {
|
|
98
|
+
const value = call.context[field];
|
|
99
|
+
return value === undefined || value === null ? [] : [[field, value]];
|
|
100
|
+
}));
|
|
101
|
+
return { context: { ...base, ...picked }, failure: call.failure };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The metadata of a logger derived from `merged`. When a context could not be
|
|
105
|
+
* read it carries the `loggingError`, so every entry the derived logger emits
|
|
106
|
+
* shows the failure (the logger reports it once, at its first emission).
|
|
107
|
+
*/
|
|
108
|
+
export function derivedLoggerMetadata(merged) {
|
|
109
|
+
return merged.failure ? withLoggingError(merged.context, merged.failure) : merged.context;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* A public log method: the message is validated and the context is handed on
|
|
113
|
+
* raw. The logger checks the entry's level (and emission window and sampling)
|
|
114
|
+
* first and only then normalizes the context, once, with
|
|
115
|
+
* {@link OptionalCallContextSchema}: a filtered call never walks its context, and an
|
|
116
|
+
* emitted one walks it exactly once. Normalizing never throws.
|
|
117
|
+
*/
|
|
118
|
+
export const LogCallSchema = z.function({
|
|
119
|
+
input: [CallerStringSchema, z.unknown().optional(), z.unknown().optional()],
|
|
120
|
+
output: z.void()
|
|
121
|
+
});
|
|
122
|
+
/** A log call's raw context, normalized once at the boundary without throwing (`undefined` is no context). */
|
|
123
|
+
export const OptionalCallContextSchema = CallContextSchema.optional();
|
|
124
|
+
/** A forwarding wrapper hands the raw context on, for the logger it wraps to normalize. */
|
|
125
|
+
export const ForwardedLogCallSchema = z.function({
|
|
126
|
+
input: [CallerStringSchema, z.unknown().optional(), z.unknown().optional()],
|
|
127
|
+
output: z.void()
|
|
128
|
+
});
|
|
129
|
+
function withLoggingError(context, error) {
|
|
130
|
+
return { ...context, loggingError: { reason: LOG_CONTEXT_FAILED_REASON, error } };
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The entry context for a logger's `base` metadata and a call's context. Both
|
|
134
|
+
* are already walked snapshots (the base was read once when the logger was
|
|
135
|
+
* made, the call once at the boundary), so they are merged, not walked again:
|
|
136
|
+
* every value is JSON and every own key (a `__proto__` field included) is kept
|
|
137
|
+
* as data. A logging backend must never break the caller that logged, and its
|
|
138
|
+
* failure must not be silent: when the call's context could not be read the
|
|
139
|
+
* entry keeps its level, namespace and message, its context becomes what could
|
|
140
|
+
* be kept plus a `loggingError` describing the failure (never the caller's
|
|
141
|
+
* value), and the failure is returned for the diagnostics path.
|
|
142
|
+
*/
|
|
143
|
+
export function prepareEntryContext(base, call) {
|
|
144
|
+
const merged = { ...base, ...call?.context };
|
|
145
|
+
const callFailure = call?.failure;
|
|
146
|
+
if (callFailure === undefined)
|
|
147
|
+
return { context: merged, failure: undefined };
|
|
148
|
+
return { context: withLoggingError(merged, callFailure), failure: callFailure };
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=entry-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-context.js","sourceRoot":"","sources":["../../src/core/entry-context.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* Exports logger factory and types.
|
|
5
5
|
*/
|
|
6
6
|
export { createRuntimeLogger } from './logger.ts';
|
|
7
|
+
export { REDACTED, FUNCTION_MARKER, SecretValue, isSecretKey, CREDENTIAL_KEY_WORDS, SecretValueSchema, RedactedLogValueSchema, secret, LoggedErrorSchema, UNDESCRIBABLE_ERROR_MESSAGE, UNREADABLE_LOG_VALUE_MESSAGE, JSON_HOOK_REFUSAL_MESSAGE, MAX_WALK_BREADTH, TRUNCATED_KEY, truncationMarker, type LoggedError } from './redact.ts';
|
|
8
|
+
export { RedactedEndpointSchema, UNPARSEABLE_ENDPOINT, UNSCRUBBABLE_FAILURE_MESSAGE, SUBSTRING_FRAGMENT_MIN_LENGTH, CREDENTIAL_QUERY_PARAMETER_NAMES, createEndpointFailureSchema, createEndpointTextSchema, UNSCRUBBABLE_TEXT } from './endpoint.ts';
|
|
9
|
+
export { UNREADABLE_CONTEXT_MESSAGE, UNDESCRIBABLE_BACKEND_FAILURE_MESSAGE, UNLABELED_OPERATION, OPERATION_NOT_TEXT_MESSAGE } from './entry-context.ts';
|
|
10
|
+
export { NormalizedLogContextSchema, LogMethodSchema, PerformanceFailureSchema, type LogMethod, type PerformanceFailureMethod } from './normalize.ts';
|
|
7
11
|
export type { Logger, RuntimeLogger, Runtime, RuntimeLoggerOptions, RuntimeLoggerConfig } from './types.ts';
|
|
8
12
|
export { parseNamespaceSettings, parseNamespaceSettingsFromEnv, matchesSelector, isNamespaceIncluded, shouldLog, updateNamespaceSettings, getNamespaceSettings, defaultNamespaceSettings, type NamespaceSelector, type NamespaceSelectors, type NamespaceSettings } from './namespace.ts';
|
|
9
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,YAAY,EACX,MAAM,EACN,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACN,sBAAsB,EACtB,6BAA6B,EAC7B,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EACN,QAAQ,EACR,eAAe,EACf,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,4BAA4B,EAC5B,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,KAAK,WAAW,EAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,EACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,0BAA0B,EAAE,qCAAqC,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAExJ,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,wBAAwB,EAAE,KAAK,SAAS,EAAE,KAAK,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAGtJ,YAAY,EACX,MAAM,EACN,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACN,sBAAsB,EACtB,6BAA6B,EAC7B,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,MAAM,gBAAgB,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// Logger factory
|
|
7
7
|
export { createRuntimeLogger } from "./logger.js";
|
|
8
|
+
// Redaction and structured errors (the contract every entry context passes through)
|
|
9
|
+
export { REDACTED, FUNCTION_MARKER, SecretValue, isSecretKey, CREDENTIAL_KEY_WORDS, SecretValueSchema, RedactedLogValueSchema, secret, LoggedErrorSchema, UNDESCRIBABLE_ERROR_MESSAGE, UNREADABLE_LOG_VALUE_MESSAGE, JSON_HOOK_REFUSAL_MESSAGE, MAX_WALK_BREADTH, TRUNCATED_KEY, truncationMarker } from "./redact.js";
|
|
10
|
+
export { RedactedEndpointSchema, UNPARSEABLE_ENDPOINT, UNSCRUBBABLE_FAILURE_MESSAGE, SUBSTRING_FRAGMENT_MIN_LENGTH, CREDENTIAL_QUERY_PARAMETER_NAMES, createEndpointFailureSchema, createEndpointTextSchema, UNSCRUBBABLE_TEXT } from "./endpoint.js";
|
|
11
|
+
export { UNREADABLE_CONTEXT_MESSAGE, UNDESCRIBABLE_BACKEND_FAILURE_MESSAGE, UNLABELED_OPERATION, OPERATION_NOT_TEXT_MESSAGE } from "./entry-context.js";
|
|
12
|
+
export { NormalizedLogContextSchema, LogMethodSchema, PerformanceFailureSchema } from "./normalize.js";
|
|
8
13
|
// Namespace utilities
|
|
9
14
|
export { parseNamespaceSettings, parseNamespaceSettingsFromEnv, matchesSelector, isNamespaceIncluded, shouldLog, updateNamespaceSettings, getNamespaceSettings, defaultNamespaceSettings } from "./namespace.js";
|
|
10
15
|
//# sourceMappingURL=index.js.map
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iBAAiB;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iBAAiB;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,oFAAoF;AACpF,OAAO,EACN,QAAQ,EACR,eAAe,EACf,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,4BAA4B,EAC5B,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAEhB,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,EACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,0BAA0B,EAAE,qCAAqC,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAExJ,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,wBAAwB,EAAiD,MAAM,gBAAgB,CAAC;AAWtJ,sBAAsB;AACtB,OAAO,EACN,sBAAsB,EACtB,6BAA6B,EAC7B,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EAIxB,MAAM,gBAAgB,CAAC"}
|
package/dist/core/logger.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import type { SinkImplementation } from '../kinds/sink.ts';
|
|
1
2
|
import type { RuntimeLogger, RuntimeLoggerOptions } from './types.ts';
|
|
2
|
-
|
|
3
|
+
import { type RuntimeRef } from '@vibesdotdev/kernel';
|
|
4
|
+
export declare function createRuntimeLogger(options: RuntimeLoggerOptions & {
|
|
5
|
+
sinkImpls: SinkImplementation[];
|
|
6
|
+
}): RuntimeLogger;
|
|
7
|
+
export declare function createRuntimeLogger(options: RuntimeLoggerOptions, runtime: RuntimeRef): Promise<RuntimeLogger>;
|
|
3
8
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAuB,MAAM,YAAY,CAAC;AAW3F,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAoB1F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG;IAAE,SAAS,EAAE,kBAAkB,EAAE,CAAA;CAAE,GAAG,aAAa,CAAC;AACxH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC"}
|