@vibesdotdev/logging 0.0.1 → 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 +89 -54
- 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 +311 -228
- package/SPEC.md +0 -65
- 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,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Output Descriptor
|
|
3
|
+
*
|
|
4
|
+
* Writes logs to local files with rotation support.
|
|
5
|
+
* Consumer hardware only.
|
|
6
|
+
*/
|
|
7
|
+
import type { OutputDescriptor } from '@vibesdotdev/logging/schemas/output';
|
|
8
|
+
export declare const fileOutputDescriptor: OutputDescriptor;
|
|
9
|
+
export default fileOutputDescriptor;
|
|
10
|
+
//# sourceMappingURL=file.outputs.descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.outputs.descriptor.d.ts","sourceRoot":"","sources":["../../../src/outputs/file/file.outputs.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,eAAO,MAAM,oBAAoB,EAAE,gBAuBlC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Output Descriptor
|
|
3
|
+
*
|
|
4
|
+
* Writes logs to local files with rotation support.
|
|
5
|
+
* Consumer hardware only.
|
|
6
|
+
*/
|
|
7
|
+
export const fileOutputDescriptor = {
|
|
8
|
+
kind: 'logging/output',
|
|
9
|
+
id: 'file',
|
|
10
|
+
name: 'File Output',
|
|
11
|
+
description: 'Writes logs to local files with rotation',
|
|
12
|
+
tags: ['local', 'persistent'],
|
|
13
|
+
hardware: ['consumer'],
|
|
14
|
+
storage: 'file',
|
|
15
|
+
// This lazy backend can create absolute streams on an unbound host.
|
|
16
|
+
optionalContext: ['runtime/workspace-path'],
|
|
17
|
+
format: 'jsonl',
|
|
18
|
+
path: 'logs/app.log',
|
|
19
|
+
rotation: {
|
|
20
|
+
maxSize: '10MB',
|
|
21
|
+
maxAge: '7d',
|
|
22
|
+
maxFiles: 5
|
|
23
|
+
},
|
|
24
|
+
buffering: {
|
|
25
|
+
enabled: true,
|
|
26
|
+
size: 8192,
|
|
27
|
+
flushInterval: 1000,
|
|
28
|
+
maxBufferEntries: 10000
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
export default fileOutputDescriptor;
|
|
32
|
+
//# sourceMappingURL=file.outputs.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.outputs.descriptor.js","sourceRoot":"","sources":["../../../src/outputs/file/file.outputs.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAqB;IACrD,IAAI,EAAE,gBAAgB;IACtB,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,0CAA0C;IACvD,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;IAC7B,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,MAAM;IACf,oEAAoE;IACpE,eAAe,EAAE,CAAC,wBAAwB,CAAC;IAC3C,MAAM,EAAE,OAAO;IACf,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE;QACT,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,CAAC;KACX;IACD,SAAS,EAAE;QACV,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI;QACV,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,KAAK;KACvB;CACD,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Remote Output Descriptor
|
|
3
3
|
*
|
|
4
4
|
* Sends logs to a remote HTTP endpoint.
|
|
5
|
-
*
|
|
5
|
+
* Portable HTTP backend for consumer and cloud hosts.
|
|
6
6
|
*/
|
|
7
7
|
import type { OutputDescriptor } from '../../schemas/output.ts';
|
|
8
8
|
export declare const remoteOutputDescriptor: OutputDescriptor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.descriptor.d.ts","sourceRoot":"","sources":["../../../src/outputs/remote/remote.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"remote.descriptor.d.ts","sourceRoot":"","sources":["../../../src/outputs/remote/remote.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,MAAM,sBAAsB,EAAE,gBAcpC,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Remote Output Descriptor
|
|
3
3
|
*
|
|
4
4
|
* Sends logs to a remote HTTP endpoint.
|
|
5
|
-
*
|
|
5
|
+
* Portable HTTP backend for consumer and cloud hosts.
|
|
6
6
|
*/
|
|
7
7
|
export const remoteOutputDescriptor = {
|
|
8
8
|
kind: 'logging/output',
|
|
@@ -10,7 +10,6 @@ export const remoteOutputDescriptor = {
|
|
|
10
10
|
name: 'Remote Output',
|
|
11
11
|
description: 'Sends logs to a remote HTTP endpoint',
|
|
12
12
|
tags: ['cloud', 'centralized'],
|
|
13
|
-
hardware: ['cloud'],
|
|
14
13
|
storage: 'remote',
|
|
15
14
|
format: 'jsonl',
|
|
16
15
|
buffering: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.descriptor.js","sourceRoot":"","sources":["../../../src/outputs/remote/remote.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACvD,IAAI,EAAE,gBAAgB;IACtB,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,sCAAsC;IACnD,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;IAC9B,
|
|
1
|
+
{"version":3,"file":"remote.descriptor.js","sourceRoot":"","sources":["../../../src/outputs/remote/remote.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACvD,IAAI,EAAE,gBAAgB;IACtB,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,sCAAsC;IACnD,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;IAC9B,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,OAAO;IACf,SAAS,EAAE;QACV,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,KAAK;QACX,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,IAAI;KACtB;CACD,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DefaultOutputImplementation } from '../../kinds/output.impl.ts';
|
|
2
|
+
import type { OutputBackendFactory, OutputContext } from '../../kinds/output.types.ts';
|
|
3
|
+
import { type OutputDescriptor } from '../../schemas/output.ts';
|
|
4
|
+
import RemoteOutput from './remote.impl.ts';
|
|
5
|
+
/** The Runtime selects the factory; each stream retains that provider's context. A context of the same Root (its view or reload generation) is accepted; another Root's is refused. */
|
|
6
|
+
export default class RemoteOutputFactory extends DefaultOutputImplementation implements OutputBackendFactory {
|
|
7
|
+
create(descriptor: OutputDescriptor, namedContext: OutputContext): RemoteOutput;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=remote.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.factory.d.ts","sourceRoot":"","sources":["../../../src/outputs/remote/remote.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAG5C,uLAAuL;AACvL,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,2BAA4B,YAAW,oBAAoB;IAC3G,MAAM,CAAC,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,GAAG,YAAY;CAM/E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
2
|
+
import { DefaultOutputImplementation } from "../../kinds/output.impl.js";
|
|
3
|
+
import { OutputDescriptorSchema } from "../../schemas/output.js";
|
|
4
|
+
import RemoteOutput from "./remote.impl.js";
|
|
5
|
+
import { loggingRootOf } from "../../core/root-identity.js";
|
|
6
|
+
/** The Runtime selects the factory; each stream retains that provider's context. A context of the same Root (its view or reload generation) is accepted; another Root's is refused. */
|
|
7
|
+
export default class RemoteOutputFactory extends DefaultOutputImplementation {
|
|
8
|
+
create(descriptor, namedContext) {
|
|
9
|
+
if (loggingRootOf(namedContext.runtime) !== loggingRootOf(this.context.runtime))
|
|
10
|
+
throw new CapabilityError('A remote stream context belongs to another Root.', 'CONFLICT', {
|
|
11
|
+
reason: 'output-context-runtime-mismatch', retryable: false
|
|
12
|
+
});
|
|
13
|
+
return new RemoteOutput(OutputDescriptorSchema.parse(descriptor), { ...this.context, ...namedContext, runtime: this.context.runtime });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=remote.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.factory.js","sourceRoot":"","sources":["../../../src/outputs/remote/remote.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAEzE,OAAO,EAAE,sBAAsB,EAAyB,MAAM,yBAAyB,CAAC;AACxF,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,uLAAuL;AACvL,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,2BAA2B;IAC3E,MAAM,CAAC,UAA4B,EAAE,YAA2B;QAC/D,IAAI,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,kDAAkD,EAAE,UAAU,EAAE;gBAC1K,MAAM,EAAE,iCAAiC,EAAE,SAAS,EAAE,KAAK;aAC3D,CAAC,CAAC;QACH,OAAO,IAAI,YAAY,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxI,CAAC;CACD"}
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
* Batched HTTP delivery to a logging endpoint.
|
|
5
5
|
*/
|
|
6
6
|
import type { OutputImplementation, OutputContext, OutputReadOptions, OutputTailOptions, TailHandle, OutputStats } from '../../kinds/output.ts';
|
|
7
|
-
import type
|
|
7
|
+
import { type OutputDescriptor } from '../../schemas/output.ts';
|
|
8
8
|
import type { RuntimeLogEntry } from '../../schemas/entry.ts';
|
|
9
|
+
/** The default deadline for one remote delivery request. */
|
|
10
|
+
export declare const REMOTE_DELIVERY_TIMEOUT_MS = 10000;
|
|
9
11
|
/** Metrics for buffer operations */
|
|
10
12
|
interface BufferMetrics {
|
|
11
13
|
/** Total entries added to buffer */
|
|
@@ -24,19 +26,43 @@ export default class RemoteOutput implements OutputImplementation {
|
|
|
24
26
|
readonly id: string;
|
|
25
27
|
readonly descriptor: OutputDescriptor;
|
|
26
28
|
private readonly formatter;
|
|
27
|
-
private
|
|
29
|
+
private endpoint;
|
|
28
30
|
private readonly buffering;
|
|
29
31
|
private readonly maxBufferEntries;
|
|
30
32
|
private buffer;
|
|
31
|
-
private
|
|
32
|
-
|
|
33
|
+
private acceptedSequence;
|
|
34
|
+
/** The one-shot flush pending for the current buffer (lifecycle-owned, RC07). */
|
|
35
|
+
private flushDisposer;
|
|
36
|
+
/** The output's own runtime: its lifecycle owns the flush timer. */
|
|
37
|
+
private readonly runtime;
|
|
38
|
+
private flushPromise;
|
|
39
|
+
private readonly pendingDiagnostics;
|
|
40
|
+
private readonly pendingDeliveries;
|
|
41
|
+
private closePromise;
|
|
42
|
+
private closing;
|
|
33
43
|
private metrics;
|
|
34
44
|
constructor(descriptor: OutputDescriptor, context: OutputContext);
|
|
45
|
+
/**
|
|
46
|
+
* One lifecycle-owned flush per non-empty buffer, `flushInterval` after the
|
|
47
|
+
* buffer's first entry. Once the runtime's disposal has begun no flush can be
|
|
48
|
+
* scheduled; `close()` flushes what remains.
|
|
49
|
+
*/
|
|
50
|
+
private scheduleFlush;
|
|
35
51
|
/** Get current buffer metrics */
|
|
36
52
|
getMetrics(): BufferMetrics;
|
|
37
53
|
/** Get current buffer size */
|
|
38
54
|
getBufferSize(): number;
|
|
39
55
|
private addToBuffer;
|
|
56
|
+
/**
|
|
57
|
+
* Serialize first: an entry is measured as JSON before it is accepted, so an
|
|
58
|
+
* entry JSON cannot carry (a bigint, a cycle, a throwing `toJSON` handed to a
|
|
59
|
+
* direct `write`) refuses that caller only, typed and value-free, and never
|
|
60
|
+
* enters the buffer, where it would fail every later write, flush and close.
|
|
61
|
+
*/
|
|
62
|
+
private accept;
|
|
63
|
+
/** The buffer's size as one JSON array of its entries, from the sizes measured at acceptance. */
|
|
64
|
+
private bufferedSize;
|
|
65
|
+
private assertWritable;
|
|
40
66
|
write(entry: RuntimeLogEntry): Promise<void>;
|
|
41
67
|
writeBatch(entries: RuntimeLogEntry[]): Promise<void>;
|
|
42
68
|
flush(): Promise<void>;
|
|
@@ -44,6 +70,16 @@ export default class RemoteOutput implements OutputImplementation {
|
|
|
44
70
|
tail(_callback: (line: string) => void, _options?: OutputTailOptions): TailHandle;
|
|
45
71
|
stats(): Promise<OutputStats>;
|
|
46
72
|
close(): Promise<void>;
|
|
73
|
+
private resolveEndpoint;
|
|
74
|
+
private deliver;
|
|
75
|
+
/**
|
|
76
|
+
* One POST under the runtime lifecycle's deadline (no ad hoc timer). Past
|
|
77
|
+
* `deliveryTimeoutMs` the request is aborted and fails. When the runtime's
|
|
78
|
+
* disposal begins mid-request, the accepted delivery is joined, not
|
|
79
|
+
* abandoned: it keeps running under a finalization wait capped by the
|
|
80
|
+
* remaining budget, and is aborted when that runs out.
|
|
81
|
+
*/
|
|
82
|
+
private request;
|
|
47
83
|
private send;
|
|
48
84
|
}
|
|
49
85
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.impl.d.ts","sourceRoot":"","sources":["../../../src/outputs/remote/remote.impl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"remote.impl.d.ts","sourceRoot":"","sources":["../../../src/outputs/remote/remote.impl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA0B,KAAK,gBAAgB,EAAwB,MAAM,yBAAyB,CAAC;AAC9G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAa9D,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAWjD,oCAAoC;AACpC,UAAU,aAAa;IACtB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,oBAAoB;IAChE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,iFAAiF;IACjF,OAAO,CAAC,aAAa,CAAyB;IAC9C,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqC;IACxE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwC;IAC1E,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAgE;gBAEnE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa;IAiBhE;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAcrB,iCAAiC;IACjC,UAAU,IAAI,aAAa;IAI3B,8BAA8B;IAC9B,aAAa,IAAI,MAAM;IAIvB,OAAO,CAAC,WAAW;IAOnB;;;;;OAKG;IACH,OAAO,CAAC,MAAM;IAcd,iGAAiG;IACjG,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAShB,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5C,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBhB,IAAI,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK3D,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,UAAU;IAK3E,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAInC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAuBR,eAAe;IAY7B,OAAO,CAAC,OAAO;IAQf;;;;;;OAMG;YACW,OAAO;YA6BP,IAAI;CA8BlB"}
|
|
@@ -3,10 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Batched HTTP delivery to a logging endpoint.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
import { OutputDescriptorSchema } from "../../schemas/output.js";
|
|
7
|
+
import * as z from 'zod/v4';
|
|
8
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
9
|
+
import { loadLoggingConfig } from "../../config/load-config.js";
|
|
10
|
+
import { createFallbackLogger } from "../../contexts/fallback-logger.js";
|
|
11
|
+
import { LoggedErrorSchema, ReadableErrorNameSchema } from "../../core/redact.js";
|
|
12
|
+
import { RedactedEndpointSchema, createEndpointFailureSchema, createEndpointTextSchema } from "../../core/endpoint.js";
|
|
13
|
+
import { attempt, settle } from "../../core/outcome.js";
|
|
14
|
+
import JsonlFormatter from "../../formatters/jsonl/jsonl.impl.js";
|
|
15
|
+
import jsonlFormatterDescriptor from "../../formatters/jsonl/jsonl.descriptor.js";
|
|
16
|
+
import { trackLoggingResource, untrackLoggingResource } from "../../core/output-resources.js";
|
|
17
|
+
/** The default deadline for one remote delivery request. */
|
|
18
|
+
export const REMOTE_DELIVERY_TIMEOUT_MS = 10_000;
|
|
19
|
+
const WaitAbortedSchema = z.object({ code: z.literal('CANCELLED'), reason: z.literal('wait-aborted') });
|
|
10
20
|
/**
|
|
11
21
|
* Remote output - sends logs via HTTP.
|
|
12
22
|
*/
|
|
@@ -18,34 +28,52 @@ export default class RemoteOutput {
|
|
|
18
28
|
buffering;
|
|
19
29
|
maxBufferEntries;
|
|
20
30
|
buffer = [];
|
|
21
|
-
|
|
22
|
-
|
|
31
|
+
acceptedSequence = 0;
|
|
32
|
+
/** The one-shot flush pending for the current buffer (lifecycle-owned, RC07). */
|
|
33
|
+
flushDisposer = null;
|
|
34
|
+
/** The output's own runtime: its lifecycle owns the flush timer. */
|
|
35
|
+
runtime;
|
|
36
|
+
flushPromise = null;
|
|
37
|
+
pendingDiagnostics = new Set();
|
|
38
|
+
pendingDeliveries = new Set();
|
|
39
|
+
closePromise = null;
|
|
40
|
+
closing = false;
|
|
23
41
|
metrics = { added: 0, sent: 0, dropped: 0, retried: 0 };
|
|
24
42
|
constructor(descriptor, context) {
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
|
|
28
|
-
this.formatter = context.formatter ?? {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
formatBatch: (entries) => entries.map((e) => JSON.stringify(e)).join('\n')
|
|
32
|
-
};
|
|
33
|
-
// Configuration
|
|
34
|
-
this.endpoint = descriptor.endpoint ?? DEFAULT_ENDPOINT;
|
|
35
|
-
this.buffering = descriptor.buffering ?? {
|
|
43
|
+
this.descriptor = OutputDescriptorSchema.parse(descriptor);
|
|
44
|
+
this.id = this.descriptor.id;
|
|
45
|
+
this.runtime = context.runtime;
|
|
46
|
+
this.formatter = context.formatter ?? new JsonlFormatter(jsonlFormatterDescriptor, { runtime: context.runtime });
|
|
47
|
+
this.endpoint = this.descriptor.endpoint;
|
|
48
|
+
this.buffering = this.descriptor.buffering ?? {
|
|
36
49
|
enabled: true,
|
|
37
50
|
size: 16384,
|
|
38
51
|
flushInterval: 5000,
|
|
39
52
|
maxBufferEntries: 10000
|
|
40
53
|
};
|
|
41
54
|
this.maxBufferEntries = this.buffering.maxBufferEntries ?? 10000;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
trackLoggingResource(this.runtime, this);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* One lifecycle-owned flush per non-empty buffer, `flushInterval` after the
|
|
59
|
+
* buffer's first entry. Once the runtime's disposal has begun no flush can be
|
|
60
|
+
* scheduled; `close()` flushes what remains.
|
|
61
|
+
*/
|
|
62
|
+
scheduleFlush() {
|
|
63
|
+
if (this.closing || this.flushDisposer || !this.buffering.flushInterval || this.buffer.length === 0)
|
|
64
|
+
return;
|
|
65
|
+
if (this.runtime.lifecycle.signal.aborted)
|
|
66
|
+
return;
|
|
67
|
+
this.flushDisposer = this.runtime.lifecycle.timeout(() => {
|
|
68
|
+
this.flushDisposer = null;
|
|
69
|
+
// The scheduled flush has no caller: its failure is reported, and a failed report is close's to throw.
|
|
70
|
+
const diagnostics = settle(settle(this.flush()).then(async (flushed) => {
|
|
71
|
+
if (flushed.failed)
|
|
72
|
+
(await createFallbackLogger('logging:remote-output', this.runtime)).error('Remote output flush error', { error: LoggedErrorSchema.parse(flushed.cause) });
|
|
73
|
+
}));
|
|
74
|
+
this.pendingDiagnostics.add(diagnostics);
|
|
75
|
+
void diagnostics.then(() => this.pendingDiagnostics.delete(diagnostics));
|
|
76
|
+
}, this.buffering.flushInterval);
|
|
49
77
|
}
|
|
50
78
|
/** Get current buffer metrics */
|
|
51
79
|
getMetrics() {
|
|
@@ -56,65 +84,97 @@ export default class RemoteOutput {
|
|
|
56
84
|
return this.buffer.length;
|
|
57
85
|
}
|
|
58
86
|
addToBuffer(entries) {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
87
|
+
const dropped = Math.max(0, this.buffer.length + entries.length - this.maxBufferEntries);
|
|
88
|
+
this.metrics.added += entries.length;
|
|
89
|
+
this.metrics.dropped += dropped;
|
|
90
|
+
this.buffer = this.buffer.concat(entries).sort((left, right) => left.order - right.order).slice(-this.maxBufferEntries);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Serialize first: an entry is measured as JSON before it is accepted, so an
|
|
94
|
+
* entry JSON cannot carry (a bigint, a cycle, a throwing `toJSON` handed to a
|
|
95
|
+
* direct `write`) refuses that caller only, typed and value-free, and never
|
|
96
|
+
* enters the buffer, where it would fail every later write, flush and close.
|
|
97
|
+
*/
|
|
98
|
+
accept(entries) {
|
|
99
|
+
const measured = entries.map((entry, index) => {
|
|
100
|
+
const size = attempt(() => JSON.stringify(entry).length);
|
|
101
|
+
if (size.failed) {
|
|
102
|
+
throw new CapabilityError('The remote output cannot serialize this entry as JSON, so it was not accepted.', 'INVALID_INPUT', {
|
|
103
|
+
reason: 'remote-entry-unserializable', retryable: false,
|
|
104
|
+
details: { id: this.id, index, errorName: ReadableErrorNameSchema.parse(size.cause) }
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return { entry, size: size.value };
|
|
108
|
+
});
|
|
109
|
+
return measured.map(({ entry, size }) => ({ entry, size, order: this.acceptedSequence++ }));
|
|
110
|
+
}
|
|
111
|
+
/** The buffer's size as one JSON array of its entries, from the sizes measured at acceptance. */
|
|
112
|
+
bufferedSize() {
|
|
113
|
+
return this.buffer.reduce((total, value) => total + value.size + 1, 1);
|
|
114
|
+
}
|
|
115
|
+
assertWritable() {
|
|
116
|
+
if (this.closing || this.runtime.lifecycle.signal.aborted) {
|
|
117
|
+
throw new CapabilityError('The remote output no longer accepts writes.', 'UNAVAILABLE', {
|
|
118
|
+
reason: this.closing ? 'output-closed' : 'output-runtime-disposed',
|
|
119
|
+
details: { id: this.id }, cause: this.runtime.lifecycle.signal.reason
|
|
120
|
+
});
|
|
80
121
|
}
|
|
81
122
|
}
|
|
82
123
|
async write(entry) {
|
|
124
|
+
this.assertWritable();
|
|
125
|
+
const accepted = this.accept([entry]);
|
|
83
126
|
if (this.buffering.enabled) {
|
|
84
|
-
this.addToBuffer(
|
|
127
|
+
this.addToBuffer(accepted);
|
|
85
128
|
// Flush if buffer is large enough
|
|
86
|
-
|
|
87
|
-
if (estimatedSize >= this.buffering.size) {
|
|
129
|
+
if (this.bufferedSize() >= this.buffering.size) {
|
|
88
130
|
await this.flush();
|
|
89
131
|
}
|
|
132
|
+
else {
|
|
133
|
+
this.scheduleFlush();
|
|
134
|
+
}
|
|
90
135
|
}
|
|
91
136
|
else {
|
|
92
|
-
await this.
|
|
137
|
+
await this.deliver(accepted);
|
|
93
138
|
}
|
|
94
139
|
}
|
|
95
140
|
async writeBatch(entries) {
|
|
141
|
+
this.assertWritable();
|
|
142
|
+
const accepted = this.accept(entries);
|
|
96
143
|
if (this.buffering.enabled) {
|
|
97
|
-
this.addToBuffer(
|
|
98
|
-
|
|
99
|
-
if (estimatedSize >= this.buffering.size) {
|
|
144
|
+
this.addToBuffer(accepted);
|
|
145
|
+
if (this.bufferedSize() >= this.buffering.size) {
|
|
100
146
|
await this.flush();
|
|
101
147
|
}
|
|
148
|
+
else {
|
|
149
|
+
this.scheduleFlush();
|
|
150
|
+
}
|
|
102
151
|
}
|
|
103
152
|
else {
|
|
104
|
-
await this.
|
|
153
|
+
await this.deliver(accepted);
|
|
105
154
|
}
|
|
106
155
|
}
|
|
107
|
-
|
|
108
|
-
if (this.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
try {
|
|
112
|
-
const entries = this.buffer.splice(0);
|
|
113
|
-
await this.send(entries);
|
|
114
|
-
}
|
|
115
|
-
finally {
|
|
116
|
-
this.isFlushing = false;
|
|
156
|
+
flush() {
|
|
157
|
+
if (this.flushDisposer) {
|
|
158
|
+
this.flushDisposer();
|
|
159
|
+
this.flushDisposer = null;
|
|
117
160
|
}
|
|
161
|
+
if (this.flushPromise)
|
|
162
|
+
return this.flushPromise;
|
|
163
|
+
if (this.buffer.length === 0)
|
|
164
|
+
return Promise.resolve();
|
|
165
|
+
const entries = this.buffer.splice(0);
|
|
166
|
+
this.flushPromise = this.deliver(entries).catch(error => {
|
|
167
|
+
// Preflight failures remain the caller's original refusal, with accepted entries retained.
|
|
168
|
+
this.addToBuffer(entries);
|
|
169
|
+
this.metrics.retried += entries.length;
|
|
170
|
+
throw error;
|
|
171
|
+
}).then(sent => {
|
|
172
|
+
if (sent && this.buffering.enabled)
|
|
173
|
+
this.scheduleFlush();
|
|
174
|
+
}).finally(() => {
|
|
175
|
+
this.flushPromise = null;
|
|
176
|
+
});
|
|
177
|
+
return this.flushPromise;
|
|
118
178
|
}
|
|
119
179
|
async read(_options) {
|
|
120
180
|
// Remote outputs do not support reading
|
|
@@ -127,52 +187,117 @@ export default class RemoteOutput {
|
|
|
127
187
|
async stats() {
|
|
128
188
|
return { size: 0, exists: true };
|
|
129
189
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
190
|
+
close() {
|
|
191
|
+
if (this.closePromise)
|
|
192
|
+
return this.closePromise;
|
|
193
|
+
this.closing = true;
|
|
194
|
+
if (this.flushDisposer) {
|
|
195
|
+
this.flushDisposer();
|
|
196
|
+
this.flushDisposer = null;
|
|
197
|
+
}
|
|
198
|
+
this.closePromise = (async () => {
|
|
199
|
+
const accepted = await Promise.all([...this.pendingDeliveries, ...this.pendingDiagnostics]);
|
|
200
|
+
const failures = accepted.flatMap(outcome => outcome.failed ? [outcome.cause] : []);
|
|
201
|
+
if (failures.length === 1)
|
|
202
|
+
throw failures[0];
|
|
203
|
+
if (failures.length > 1)
|
|
204
|
+
throw new AggregateError(failures, 'Accepted remote deliveries failed while closing.');
|
|
205
|
+
if (this.flushPromise)
|
|
206
|
+
await this.flushPromise;
|
|
207
|
+
await this.flush();
|
|
208
|
+
untrackLoggingResource(this.runtime, this);
|
|
209
|
+
// A final flush the collector refused re-buffers its entries: closing with them is a loss, never a success.
|
|
210
|
+
if (this.buffer.length > 0)
|
|
211
|
+
throw new CapabilityError('The remote output closed with entries the collector did not accept.', 'UNAVAILABLE', {
|
|
212
|
+
reason: 'remote-final-flush-undelivered', retryable: false, details: { id: this.id, retained: this.buffer.length }
|
|
213
|
+
});
|
|
214
|
+
})();
|
|
215
|
+
return this.closePromise;
|
|
216
|
+
}
|
|
217
|
+
async resolveEndpoint() {
|
|
218
|
+
if (this.endpoint)
|
|
219
|
+
return this.endpoint;
|
|
220
|
+
const settings = await loadLoggingConfig(this.runtime);
|
|
221
|
+
if (!settings.remoteEndpoint) {
|
|
222
|
+
throw new CapabilityError('A remote output needs an endpoint: set `endpoint` on its descriptor or `remoteEndpoint` in the logging settings.', 'INVALID_INPUT', {
|
|
223
|
+
reason: 'remote-endpoint-missing', retryable: false, details: { id: this.id }
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
this.endpoint = settings.remoteEndpoint;
|
|
227
|
+
return this.endpoint;
|
|
228
|
+
}
|
|
229
|
+
deliver(entries) {
|
|
230
|
+
const pending = this.send(entries);
|
|
231
|
+
const delivered = settle(pending);
|
|
232
|
+
this.pendingDeliveries.add(delivered);
|
|
233
|
+
void delivered.then(() => this.pendingDeliveries.delete(delivered));
|
|
234
|
+
return pending;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* One POST under the runtime lifecycle's deadline (no ad hoc timer). Past
|
|
238
|
+
* `deliveryTimeoutMs` the request is aborted and fails. When the runtime's
|
|
239
|
+
* disposal begins mid-request, the accepted delivery is joined, not
|
|
240
|
+
* abandoned: it keeps running under a finalization wait capped by the
|
|
241
|
+
* remaining budget, and is aborted when that runs out.
|
|
242
|
+
*/
|
|
243
|
+
async request(endpoint, body) {
|
|
244
|
+
const controller = new AbortController();
|
|
245
|
+
const timeoutMs = this.descriptor.deliveryTimeoutMs ?? REMOTE_DELIVERY_TIMEOUT_MS;
|
|
246
|
+
const reason = 'logging-remote-delivery';
|
|
247
|
+
// The request's own outcome is observed once here, so an aborted request
|
|
248
|
+
// never rejects unobserved after its wait has already settled.
|
|
249
|
+
const response = settle(fetch(endpoint, {
|
|
250
|
+
method: 'POST', headers: { 'Content-Type': 'application/x-ndjson' }, body, signal: controller.signal
|
|
251
|
+
}));
|
|
252
|
+
const answered = (outcome) => {
|
|
253
|
+
if (outcome.failed)
|
|
254
|
+
throw outcome.cause;
|
|
255
|
+
return outcome.value;
|
|
256
|
+
};
|
|
257
|
+
const bounded = () => this.runtime.lifecycle.wait(() => response, { timeoutMs, reason });
|
|
258
|
+
const first = await settle(bounded());
|
|
259
|
+
if (!first.failed)
|
|
260
|
+
return answered(first.value);
|
|
261
|
+
const joinable = WaitAbortedSchema.safeParse(first.cause).success && this.runtime.lifecycle.signal.aborted;
|
|
262
|
+
if (!joinable) {
|
|
263
|
+
controller.abort(first.cause);
|
|
264
|
+
throw first.cause;
|
|
135
265
|
}
|
|
136
|
-
|
|
137
|
-
|
|
266
|
+
const joined = await settle(bounded());
|
|
267
|
+
if (joined.failed) {
|
|
268
|
+
controller.abort(joined.cause);
|
|
269
|
+
throw joined.cause;
|
|
270
|
+
}
|
|
271
|
+
return answered(joined.value);
|
|
138
272
|
}
|
|
139
273
|
async send(entries) {
|
|
140
274
|
if (entries.length === 0)
|
|
141
|
-
return;
|
|
275
|
+
return true;
|
|
276
|
+
const endpoint = await this.resolveEndpoint();
|
|
142
277
|
const body = this.formatter.formatBatch
|
|
143
|
-
? this.formatter.formatBatch(entries)
|
|
144
|
-
: entries.map(
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
body
|
|
278
|
+
? this.formatter.formatBatch(entries.map(value => value.entry))
|
|
279
|
+
: entries.map(value => this.formatter.format(value.entry)).join('\n');
|
|
280
|
+
const requested = await settle(this.request(endpoint, body));
|
|
281
|
+
if (requested.failed) {
|
|
282
|
+
this.addToBuffer(entries);
|
|
283
|
+
this.metrics.retried += entries.length;
|
|
284
|
+
(await createFallbackLogger('logging:remote-output', this.runtime)).error('Network error sending logs to remote endpoint', {
|
|
285
|
+
error: createEndpointFailureSchema(endpoint).parse(requested.cause), endpoint: RedactedEndpointSchema.parse(endpoint)
|
|
152
286
|
});
|
|
153
|
-
|
|
154
|
-
logger.error('Failed to send logs to remote endpoint', {
|
|
155
|
-
status: response.status,
|
|
156
|
-
statusText: response.statusText,
|
|
157
|
-
endpoint: this.endpoint
|
|
158
|
-
});
|
|
159
|
-
// Re-add failed entries to buffer for retry
|
|
160
|
-
this.addToBuffer(entries);
|
|
161
|
-
this.metrics.retried += entries.length;
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
this.metrics.sent += entries.length;
|
|
165
|
-
}
|
|
287
|
+
return false;
|
|
166
288
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
endpoint: this.endpoint
|
|
171
|
-
});
|
|
172
|
-
// Re-add failed entries to buffer for retry
|
|
289
|
+
const response = requested.value;
|
|
290
|
+
if (!response.ok) {
|
|
291
|
+
// The reason phrase is the collector's text and may echo the request line, query credential included: it is scrubbed.
|
|
173
292
|
this.addToBuffer(entries);
|
|
174
293
|
this.metrics.retried += entries.length;
|
|
294
|
+
(await createFallbackLogger('logging:remote-output', this.runtime)).error('Failed to send logs to remote endpoint', {
|
|
295
|
+
status: response.status, statusText: createEndpointTextSchema(endpoint).parse(response.statusText), endpoint: RedactedEndpointSchema.parse(endpoint)
|
|
296
|
+
});
|
|
297
|
+
return false;
|
|
175
298
|
}
|
|
299
|
+
this.metrics.sent += entries.length;
|
|
300
|
+
return true;
|
|
176
301
|
}
|
|
177
302
|
}
|
|
178
303
|
//# sourceMappingURL=remote.impl.js.map
|