@senpi/runtime 3.0.6-dev.skill-manager-v2.20260629194505 → 3.0.9-dev.runtime-phase-2.20260707070820
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/dist/actions/action-events.d.ts +67 -0
- package/dist/actions/action-events.d.ts.map +1 -0
- package/dist/actions/action-events.js +164 -0
- package/dist/actions/action-events.js.map +1 -0
- package/dist/actions/close-position/close-position.action.d.ts +1 -1
- package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +108 -86
- package/dist/actions/close-position/close-position.action.js.map +1 -1
- package/dist/actions/decision-engine.d.ts.map +1 -1
- package/dist/actions/decision-engine.js +40 -28
- package/dist/actions/decision-engine.js.map +1 -1
- package/dist/actions/event-derivation.d.ts +61 -0
- package/dist/actions/event-derivation.d.ts.map +1 -0
- package/dist/actions/event-derivation.js +180 -0
- package/dist/actions/event-derivation.js.map +1 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.d.ts +5 -9
- package/dist/actions/llm-decision/anthropic-llm-decision.d.ts.map +1 -1
- package/dist/actions/llm-decision/anthropic-llm-decision.js +6 -87
- package/dist/actions/llm-decision/anthropic-llm-decision.js.map +1 -1
- package/dist/actions/llm-decision/factory.d.ts +0 -6
- package/dist/actions/llm-decision/factory.d.ts.map +1 -1
- package/dist/actions/llm-decision/factory.js +0 -2
- package/dist/actions/llm-decision/factory.js.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.js +26 -7
- package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts +1 -1
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +282 -224
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.js +3 -6
- package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +61 -0
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/cli/senpi-commands.d.ts +14 -0
- package/dist/cli/senpi-commands.d.ts.map +1 -1
- package/dist/cli/senpi-commands.js +390 -2
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/dsl/engine-client/event-mapping.d.ts.map +1 -1
- package/dist/dsl/engine-client/event-mapping.js +0 -3
- package/dist/dsl/engine-client/event-mapping.js.map +1 -1
- package/dist/dsl/events/build-closed-event.d.ts.map +1 -1
- package/dist/dsl/events/build-closed-event.js +0 -1
- package/dist/dsl/events/build-closed-event.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +2 -4
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/events/initial-state.d.ts.map +1 -1
- package/dist/dsl/events/initial-state.js +1 -0
- package/dist/dsl/events/initial-state.js.map +1 -1
- package/dist/dsl/monitor/create-monitor.d.ts +3 -0
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
- package/dist/dsl/monitor/create-monitor.js +76 -58
- package/dist/dsl/monitor/create-monitor.js.map +1 -1
- package/dist/dsl/monitor/dsl-failure-events.d.ts +42 -0
- package/dist/dsl/monitor/dsl-failure-events.d.ts.map +1 -0
- package/dist/dsl/monitor/dsl-failure-events.js +73 -0
- package/dist/dsl/monitor/dsl-failure-events.js.map +1 -0
- package/dist/dsl/monitor/process-one-position.d.ts +2 -1
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +130 -196
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts +10 -0
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +48 -4
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/dsl/plugin/options.d.ts +3 -0
- package/dist/dsl/plugin/options.d.ts.map +1 -1
- package/dist/health/types.d.ts +14 -0
- package/dist/health/types.d.ts.map +1 -1
- package/dist/health/types.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +255 -77
- package/dist/index.js.map +1 -1
- package/dist/risk/risk-audit-log.d.ts +7 -0
- package/dist/risk/risk-audit-log.d.ts.map +1 -1
- package/dist/risk/risk-audit-log.js +48 -1
- package/dist/risk/risk-audit-log.js.map +1 -1
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts +2 -0
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts.map +1 -1
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js +24 -3
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js.map +1 -1
- package/dist/runtime/auto-update/coordinator.js +2 -2
- package/dist/runtime/auto-update/coordinator.js.map +1 -1
- package/dist/runtime/create-actions.d.ts.map +1 -1
- package/dist/runtime/create-actions.js +40 -15
- package/dist/runtime/create-actions.js.map +1 -1
- package/dist/runtime/create-runtime-context.d.ts +1 -1
- package/dist/runtime/create-runtime-context.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.d.ts +2 -1
- package/dist/runtime/create-scanner-module.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.js +2 -1
- package/dist/runtime/create-scanner-module.js.map +1 -1
- package/dist/runtime/domain-events.d.ts +43 -0
- package/dist/runtime/domain-events.d.ts.map +1 -0
- package/dist/runtime/domain-events.js +181 -0
- package/dist/runtime/domain-events.js.map +1 -0
- package/dist/runtime/lifecycle-events.d.ts +86 -0
- package/dist/runtime/lifecycle-events.d.ts.map +1 -0
- package/dist/runtime/lifecycle-events.js +200 -0
- package/dist/runtime/lifecycle-events.js.map +1 -0
- package/dist/runtime/notifications.js +2 -2
- package/dist/runtime/notifications.js.map +1 -1
- package/dist/{tracking → runtime}/position-id-registry.d.ts +14 -1
- package/dist/runtime/position-id-registry.d.ts.map +1 -0
- package/dist/{tracking → runtime}/position-id-registry.js +20 -3
- package/dist/runtime/position-id-registry.js.map +1 -0
- package/dist/runtime/run.d.ts +2 -4
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runtime-schema.d.ts +276 -588
- package/dist/runtime/runtime-schema.d.ts.map +1 -1
- package/dist/runtime/runtime-schema.js +8 -28
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts +23 -9
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +276 -248
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/strategy-lifecycle.d.ts.map +1 -1
- package/dist/runtime/strategy-lifecycle.js +13 -1
- package/dist/runtime/strategy-lifecycle.js.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.d.ts +3 -0
- package/dist/runtime/supervisor/long-running-supervisor.d.ts.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js +27 -53
- package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
- package/dist/runtime-api/intake/intake-events.d.ts +44 -0
- package/dist/runtime-api/intake/intake-events.d.ts.map +1 -0
- package/dist/runtime-api/intake/intake-events.js +131 -0
- package/dist/runtime-api/intake/intake-events.js.map +1 -0
- package/dist/runtime-api/intake/scanner-launcher.d.ts +2 -0
- package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.js +58 -15
- package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
- package/dist/runtime-api/intake/scanner-registry.d.ts +3 -0
- package/dist/runtime-api/intake/scanner-registry.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-registry.js +3 -0
- package/dist/runtime-api/intake/scanner-registry.js.map +1 -1
- package/dist/runtime-api/intake/supervisor-events.d.ts +61 -0
- package/dist/runtime-api/intake/supervisor-events.d.ts.map +1 -0
- package/dist/runtime-api/intake/supervisor-events.js +173 -0
- package/dist/runtime-api/intake/supervisor-events.js.map +1 -0
- package/dist/runtime-api/routes/signals.d.ts +1 -1
- package/dist/runtime-api/routes/signals.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.js +121 -35
- package/dist/runtime-api/routes/signals.js.map +1 -1
- package/dist/runtime-api/server.d.ts.map +1 -1
- package/dist/runtime-api/server.js +10 -1
- package/dist/runtime-api/server.js.map +1 -1
- package/dist/scanners/engine/data-providers.d.ts +3 -0
- package/dist/scanners/engine/data-providers.d.ts.map +1 -1
- package/dist/scanners/engine/data-providers.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts +18 -0
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +96 -2
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/engine/input-resolver.d.ts.map +1 -1
- package/dist/scanners/engine/input-resolver.js +9 -7
- package/dist/scanners/engine/input-resolver.js.map +1 -1
- package/dist/scanners/runtime-module.d.ts +3 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +7 -0
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/senpi/client.d.ts +10 -0
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +113 -46
- package/dist/senpi/client.js.map +1 -1
- package/dist/skills-manager/bootstrap.d.ts.map +1 -1
- package/dist/skills-manager/bootstrap.js +22 -33
- package/dist/skills-manager/bootstrap.js.map +1 -1
- package/dist/skills-manager/clone-groups.d.ts +20 -0
- package/dist/skills-manager/clone-groups.d.ts.map +1 -0
- package/dist/skills-manager/clone-groups.js +45 -0
- package/dist/skills-manager/clone-groups.js.map +1 -0
- package/dist/skills-manager/coordinator.d.ts.map +1 -1
- package/dist/skills-manager/coordinator.js +111 -75
- package/dist/skills-manager/coordinator.js.map +1 -1
- package/dist/skills-manager/manifest.d.ts +24 -0
- package/dist/skills-manager/manifest.d.ts.map +1 -1
- package/dist/skills-manager/manifest.js +23 -10
- package/dist/skills-manager/manifest.js.map +1 -1
- package/dist/skills-manager/skills-manifest.json +12 -7
- package/dist/skills-manager/types.d.ts +12 -0
- package/dist/skills-manager/types.d.ts.map +1 -1
- package/dist/state/state-events.d.ts +13 -0
- package/dist/state/state-events.d.ts.map +1 -0
- package/dist/state/state-events.js +22 -0
- package/dist/state/state-events.js.map +1 -0
- package/dist/state/state-manager.d.ts.map +1 -1
- package/dist/state/state-manager.js +14 -1
- package/dist/state/state-manager.js.map +1 -1
- package/dist/telemetry/attributes.d.ts +13 -0
- package/dist/telemetry/attributes.d.ts.map +1 -0
- package/dist/telemetry/attributes.js +22 -0
- package/dist/telemetry/attributes.js.map +1 -0
- package/dist/{tracking → telemetry}/context.d.ts +12 -5
- package/dist/telemetry/context.d.ts.map +1 -0
- package/dist/{tracking → telemetry}/context.js +4 -4
- package/dist/telemetry/context.js.map +1 -0
- package/dist/{recording/records.d.ts → telemetry/event-builders.d.ts} +145 -33
- package/dist/telemetry/event-builders.d.ts.map +1 -0
- package/dist/{recording/wiring/record-builders.js → telemetry/event-builders.js} +94 -40
- package/dist/telemetry/event-builders.js.map +1 -0
- package/dist/telemetry/event-store.d.ts +66 -0
- package/dist/telemetry/event-store.d.ts.map +1 -0
- package/dist/telemetry/event-store.js +202 -0
- package/dist/telemetry/event-store.js.map +1 -0
- package/dist/telemetry/identity.d.ts +72 -0
- package/dist/telemetry/identity.d.ts.map +1 -0
- package/dist/{recording/wiring → telemetry}/identity.js +6 -2
- package/dist/telemetry/identity.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +169 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +437 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/otel-sdk.d.ts +93 -0
- package/dist/telemetry/otel-sdk.d.ts.map +1 -0
- package/dist/telemetry/otel-sdk.js +297 -0
- package/dist/telemetry/otel-sdk.js.map +1 -0
- package/dist/telemetry/spans/constants.d.ts +12 -0
- package/dist/telemetry/spans/constants.d.ts.map +1 -0
- package/dist/telemetry/spans/constants.js +12 -0
- package/dist/telemetry/spans/constants.js.map +1 -0
- package/dist/telemetry/spans/gen-ai.d.ts +74 -0
- package/dist/telemetry/spans/gen-ai.d.ts.map +1 -0
- package/dist/telemetry/spans/gen-ai.js +339 -0
- package/dist/telemetry/spans/gen-ai.js.map +1 -0
- package/dist/telemetry/spans/index.d.ts +11 -0
- package/dist/telemetry/spans/index.d.ts.map +1 -0
- package/dist/telemetry/spans/index.js +11 -0
- package/dist/telemetry/spans/index.js.map +1 -0
- package/dist/{tracking → telemetry}/spans/redact-pii.d.ts +19 -21
- package/dist/telemetry/spans/redact-pii.d.ts.map +1 -0
- package/dist/{tracking → telemetry}/spans/redact-pii.js +35 -32
- package/dist/telemetry/spans/redact-pii.js.map +1 -0
- package/dist/telemetry/spans/sanitize-payload.d.ts.map +1 -0
- package/dist/telemetry/spans/sanitize-payload.js.map +1 -0
- package/dist/telemetry/spans/span-hooks.d.ts +18 -0
- package/dist/telemetry/spans/span-hooks.d.ts.map +1 -0
- package/dist/telemetry/spans/span-hooks.js +764 -0
- package/dist/telemetry/spans/span-hooks.js.map +1 -0
- package/dist/telemetry/tool-plane.d.ts +31 -0
- package/dist/telemetry/tool-plane.d.ts.map +1 -0
- package/dist/telemetry/tool-plane.js +70 -0
- package/dist/telemetry/tool-plane.js.map +1 -0
- package/dist/telemetry/trace-identity.d.ts +32 -0
- package/dist/telemetry/trace-identity.d.ts.map +1 -0
- package/dist/telemetry/trace-identity.js +62 -0
- package/dist/telemetry/trace-identity.js.map +1 -0
- package/dist/telemetry/tracing.d.ts +33 -0
- package/dist/telemetry/tracing.d.ts.map +1 -0
- package/dist/telemetry/tracing.js +70 -0
- package/dist/telemetry/tracing.js.map +1 -0
- package/dist/types/dsl/index.d.ts +8 -9
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +1 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/types/scanner.d.ts +2 -0
- package/dist/types/scanner.d.ts.map +1 -1
- package/dist/utils/event-catalog.d.ts +506 -0
- package/dist/utils/event-catalog.d.ts.map +1 -0
- package/dist/utils/event-catalog.js +142 -0
- package/dist/utils/event-catalog.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -5
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +360 -27
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/wallet-address.d.ts +3 -0
- package/dist/utils/wallet-address.d.ts.map +1 -0
- package/dist/utils/wallet-address.js +17 -0
- package/dist/utils/wallet-address.js.map +1 -0
- package/openclaw.plugin.json +20 -6
- package/package.json +10 -2
- package/dist/actions/tracking-helpers.d.ts +0 -28
- package/dist/actions/tracking-helpers.d.ts.map +0 -1
- package/dist/actions/tracking-helpers.js +0 -93
- package/dist/actions/tracking-helpers.js.map +0 -1
- package/dist/recording/emitter.d.ts +0 -27
- package/dist/recording/emitter.d.ts.map +0 -1
- package/dist/recording/emitter.js +0 -2
- package/dist/recording/emitter.js.map +0 -1
- package/dist/recording/identity.d.ts +0 -34
- package/dist/recording/identity.d.ts.map +0 -1
- package/dist/recording/identity.js +0 -2
- package/dist/recording/identity.js.map +0 -1
- package/dist/recording/index.d.ts +0 -11
- package/dist/recording/index.d.ts.map +0 -1
- package/dist/recording/index.js +0 -2
- package/dist/recording/index.js.map +0 -1
- package/dist/recording/noop-emitter.d.ts +0 -23
- package/dist/recording/noop-emitter.d.ts.map +0 -1
- package/dist/recording/noop-emitter.js +0 -22
- package/dist/recording/noop-emitter.js.map +0 -1
- package/dist/recording/otel/attributes.d.ts +0 -35
- package/dist/recording/otel/attributes.d.ts.map +0 -1
- package/dist/recording/otel/attributes.js +0 -131
- package/dist/recording/otel/attributes.js.map +0 -1
- package/dist/recording/otel/constants.d.ts +0 -123
- package/dist/recording/otel/constants.d.ts.map +0 -1
- package/dist/recording/otel/constants.js +0 -172
- package/dist/recording/otel/constants.js.map +0 -1
- package/dist/recording/otel/ids.d.ts +0 -25
- package/dist/recording/otel/ids.d.ts.map +0 -1
- package/dist/recording/otel/ids.js +0 -37
- package/dist/recording/otel/ids.js.map +0 -1
- package/dist/recording/otel/index.d.ts +0 -13
- package/dist/recording/otel/index.d.ts.map +0 -1
- package/dist/recording/otel/index.js +0 -9
- package/dist/recording/otel/index.js.map +0 -1
- package/dist/recording/otel/mappers.d.ts +0 -100
- package/dist/recording/otel/mappers.d.ts.map +0 -1
- package/dist/recording/otel/mappers.js +0 -683
- package/dist/recording/otel/mappers.js.map +0 -1
- package/dist/recording/otel/otel-emitter.d.ts +0 -43
- package/dist/recording/otel/otel-emitter.d.ts.map +0 -1
- package/dist/recording/otel/otel-emitter.js +0 -99
- package/dist/recording/otel/otel-emitter.js.map +0 -1
- package/dist/recording/otel/redaction.d.ts +0 -47
- package/dist/recording/otel/redaction.d.ts.map +0 -1
- package/dist/recording/otel/redaction.js +0 -88
- package/dist/recording/otel/redaction.js.map +0 -1
- package/dist/recording/records.d.ts.map +0 -1
- package/dist/recording/records.js +0 -14
- package/dist/recording/records.js.map +0 -1
- package/dist/recording/transport/batcher.d.ts +0 -59
- package/dist/recording/transport/batcher.d.ts.map +0 -1
- package/dist/recording/transport/batcher.js +0 -234
- package/dist/recording/transport/batcher.js.map +0 -1
- package/dist/recording/transport/client.d.ts +0 -41
- package/dist/recording/transport/client.d.ts.map +0 -1
- package/dist/recording/transport/client.js +0 -69
- package/dist/recording/transport/client.js.map +0 -1
- package/dist/recording/transport/config.d.ts +0 -53
- package/dist/recording/transport/config.d.ts.map +0 -1
- package/dist/recording/transport/config.js +0 -41
- package/dist/recording/transport/config.js.map +0 -1
- package/dist/recording/transport/index.d.ts +0 -16
- package/dist/recording/transport/index.d.ts.map +0 -1
- package/dist/recording/transport/index.js +0 -12
- package/dist/recording/transport/index.js.map +0 -1
- package/dist/recording/transport/rows.d.ts +0 -88
- package/dist/recording/transport/rows.d.ts.map +0 -1
- package/dist/recording/transport/rows.js +0 -15
- package/dist/recording/transport/rows.js.map +0 -1
- package/dist/recording/wiring/emitter-factory.d.ts +0 -39
- package/dist/recording/wiring/emitter-factory.d.ts.map +0 -1
- package/dist/recording/wiring/emitter-factory.js +0 -62
- package/dist/recording/wiring/emitter-factory.js.map +0 -1
- package/dist/recording/wiring/identity.d.ts +0 -27
- package/dist/recording/wiring/identity.d.ts.map +0 -1
- package/dist/recording/wiring/identity.js.map +0 -1
- package/dist/recording/wiring/index.d.ts +0 -12
- package/dist/recording/wiring/index.d.ts.map +0 -1
- package/dist/recording/wiring/index.js +0 -9
- package/dist/recording/wiring/index.js.map +0 -1
- package/dist/recording/wiring/record-builders.d.ts +0 -107
- package/dist/recording/wiring/record-builders.d.ts.map +0 -1
- package/dist/recording/wiring/record-builders.js.map +0 -1
- package/dist/recording/wiring/subscriber.d.ts +0 -28
- package/dist/recording/wiring/subscriber.d.ts.map +0 -1
- package/dist/recording/wiring/subscriber.js +0 -173
- package/dist/recording/wiring/subscriber.js.map +0 -1
- package/dist/recording/wiring/values.d.ts +0 -19
- package/dist/recording/wiring/values.d.ts.map +0 -1
- package/dist/recording/wiring/values.js +0 -49
- package/dist/recording/wiring/values.js.map +0 -1
- package/dist/tracking/build-rehydrate-items.d.ts +0 -15
- package/dist/tracking/build-rehydrate-items.d.ts.map +0 -1
- package/dist/tracking/build-rehydrate-items.js +0 -19
- package/dist/tracking/build-rehydrate-items.js.map +0 -1
- package/dist/tracking/constants.d.ts +0 -24
- package/dist/tracking/constants.d.ts.map +0 -1
- package/dist/tracking/constants.js +0 -52
- package/dist/tracking/constants.js.map +0 -1
- package/dist/tracking/context.d.ts.map +0 -1
- package/dist/tracking/context.js.map +0 -1
- package/dist/tracking/index.d.ts +0 -16
- package/dist/tracking/index.d.ts.map +0 -1
- package/dist/tracking/index.js +0 -11
- package/dist/tracking/index.js.map +0 -1
- package/dist/tracking/plugin-event-tracker.d.ts +0 -13
- package/dist/tracking/plugin-event-tracker.d.ts.map +0 -1
- package/dist/tracking/plugin-event-tracker.js +0 -27
- package/dist/tracking/plugin-event-tracker.js.map +0 -1
- package/dist/tracking/position-id-registry.d.ts.map +0 -1
- package/dist/tracking/position-id-registry.js.map +0 -1
- package/dist/tracking/spans/constants.d.ts +0 -19
- package/dist/tracking/spans/constants.d.ts.map +0 -1
- package/dist/tracking/spans/constants.js +0 -31
- package/dist/tracking/spans/constants.js.map +0 -1
- package/dist/tracking/spans/fan-out-span-transport.d.ts +0 -22
- package/dist/tracking/spans/fan-out-span-transport.d.ts.map +0 -1
- package/dist/tracking/spans/fan-out-span-transport.js +0 -49
- package/dist/tracking/spans/fan-out-span-transport.js.map +0 -1
- package/dist/tracking/spans/index.d.ts +0 -13
- package/dist/tracking/spans/index.d.ts.map +0 -1
- package/dist/tracking/spans/index.js +0 -16
- package/dist/tracking/spans/index.js.map +0 -1
- package/dist/tracking/spans/otel/fit-row-budget.d.ts +0 -22
- package/dist/tracking/spans/otel/fit-row-budget.d.ts.map +0 -1
- package/dist/tracking/spans/otel/fit-row-budget.js +0 -91
- package/dist/tracking/spans/otel/fit-row-budget.js.map +0 -1
- package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts +0 -16
- package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts.map +0 -1
- package/dist/tracking/spans/otel/map-span-to-trace-row.js +0 -227
- package/dist/tracking/spans/otel/map-span-to-trace-row.js.map +0 -1
- package/dist/tracking/spans/otel/recording-span-transport.d.ts +0 -43
- package/dist/tracking/spans/otel/recording-span-transport.d.ts.map +0 -1
- package/dist/tracking/spans/otel/recording-span-transport.js +0 -67
- package/dist/tracking/spans/otel/recording-span-transport.js.map +0 -1
- package/dist/tracking/spans/otel/span-ids.d.ts +0 -22
- package/dist/tracking/spans/otel/span-ids.d.ts.map +0 -1
- package/dist/tracking/spans/otel/span-ids.js +0 -32
- package/dist/tracking/spans/otel/span-ids.js.map +0 -1
- package/dist/tracking/spans/plugin-span-tracker.d.ts +0 -9
- package/dist/tracking/spans/plugin-span-tracker.d.ts.map +0 -1
- package/dist/tracking/spans/plugin-span-tracker.js +0 -115
- package/dist/tracking/spans/plugin-span-tracker.js.map +0 -1
- package/dist/tracking/spans/redact-pii.d.ts.map +0 -1
- package/dist/tracking/spans/redact-pii.js.map +0 -1
- package/dist/tracking/spans/sanitize-payload.d.ts.map +0 -1
- package/dist/tracking/spans/sanitize-payload.js.map +0 -1
- package/dist/tracking/spans/span-hooks.d.ts +0 -28
- package/dist/tracking/spans/span-hooks.d.ts.map +0 -1
- package/dist/tracking/spans/span-hooks.js +0 -409
- package/dist/tracking/spans/span-hooks.js.map +0 -1
- package/dist/tracking/spans/span-tracker.d.ts +0 -133
- package/dist/tracking/spans/span-tracker.d.ts.map +0 -1
- package/dist/tracking/spans/span-tracker.js +0 -721
- package/dist/tracking/spans/span-tracker.js.map +0 -1
- package/dist/tracking/spans/span-transport.d.ts +0 -71
- package/dist/tracking/spans/span-transport.d.ts.map +0 -1
- package/dist/tracking/spans/span-transport.js +0 -240
- package/dist/tracking/spans/span-transport.js.map +0 -1
- package/dist/tracking/spans/types.d.ts +0 -101
- package/dist/tracking/spans/types.d.ts.map +0 -1
- package/dist/tracking/spans/types.js +0 -6
- package/dist/tracking/spans/types.js.map +0 -1
- package/dist/tracking/tracker.d.ts +0 -30
- package/dist/tracking/tracker.d.ts.map +0 -1
- package/dist/tracking/tracker.js +0 -66
- package/dist/tracking/tracker.js.map +0 -1
- package/dist/tracking/tracking-handler.d.ts +0 -12
- package/dist/tracking/tracking-handler.d.ts.map +0 -1
- package/dist/tracking/tracking-handler.js +0 -148
- package/dist/tracking/tracking-handler.js.map +0 -1
- package/dist/tracking/transport.d.ts +0 -35
- package/dist/tracking/transport.d.ts.map +0 -1
- package/dist/tracking/transport.js +0 -133
- package/dist/tracking/transport.js.map +0 -1
- package/dist/tracking/types.d.ts +0 -21
- package/dist/tracking/types.d.ts.map +0 -1
- package/dist/tracking/types.js +0 -6
- package/dist/tracking/types.js.map +0 -1
- /package/dist/{tracking → telemetry}/spans/sanitize-payload.d.ts +0 -0
- /package/dist/{tracking → telemetry}/spans/sanitize-payload.js +0 -0
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Micro-batcher — two independent buffers (traces, logs). `enqueueTrace` /
|
|
3
|
-
* `enqueueLog` are cheap and non-blocking; rows ship on a timer interval, with
|
|
4
|
-
* an early flush when a buffer nears the byte cap.
|
|
5
|
-
*
|
|
6
|
-
* Reliability policy (lean, by design):
|
|
7
|
-
* - **Drop over block, always.** A full buffer or a failed flush NEVER blocks
|
|
8
|
-
* or throws into the caller. On any error: log, count the drop, move on.
|
|
9
|
-
* **No retry** — the seam is left for a later dedicated stage.
|
|
10
|
-
* - Two distinct signals are counted: *client-dropped* (never sent — overflow,
|
|
11
|
-
* oversized row, an oversized batch (413), or a transport/auth/5xx flush
|
|
12
|
-
* failure) vs *server-rejected* (a `200` that accepted fewer rows than were
|
|
13
|
-
* sent, or a `400` — a malformed row that got through the mapper; a mapper
|
|
14
|
-
* bug to surface, not a transport failure). The 200 shortfall is derived from
|
|
15
|
-
* `accepted`, not the response's `rejected` field: the service reports
|
|
16
|
-
* schema-validation drops only in `errors[]`, so trusting `rejected` alone
|
|
17
|
-
* would let mapper bugs go uncounted.
|
|
18
|
-
* - Flush-on-interval is primary; byte-cap early-flush is the only added
|
|
19
|
-
* trigger. Remaining buffers flush best-effort on shutdown (time-boxed by the
|
|
20
|
-
* client's per-request timeout).
|
|
21
|
-
*
|
|
22
|
-
* Each row is serialized exactly once (at enqueue, for byte accounting); the
|
|
23
|
-
* cached JSON is reused both to size the buffer and to frame the HTTP body, so
|
|
24
|
-
* the cap bounds the ACTUAL serialized body (envelope + separators included).
|
|
25
|
-
*/
|
|
26
|
-
import { createTelemetryClient } from "./client.js";
|
|
27
|
-
import { createLogger } from "../../utils/logger.js";
|
|
28
|
-
const logger = createLogger("[recording][transport][batcher]");
|
|
29
|
-
function newStats() {
|
|
30
|
-
return { enqueued: 0, sent: 0, clientDropped: 0, serverRejected: 0 };
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* One signal's buffer: holds pre-serialized rows, tracks the exact serialized
|
|
34
|
-
* body size, and owns its own in-flight guard so traces and logs flush
|
|
35
|
-
* independently.
|
|
36
|
-
*/
|
|
37
|
-
class SignalBuffer {
|
|
38
|
-
name;
|
|
39
|
-
maxBatchBytes;
|
|
40
|
-
sendFn;
|
|
41
|
-
/** Pre-serialized rows (JSON), reused to frame the HTTP body. */
|
|
42
|
-
rows = [];
|
|
43
|
-
/** Σ byte length of the serialized rows (excludes envelope + separators). */
|
|
44
|
-
contentBytes = 0;
|
|
45
|
-
flushing = false;
|
|
46
|
-
/** The promise of the flush currently in flight, or null when idle. */
|
|
47
|
-
inFlight = null;
|
|
48
|
-
/** Fixed `{"<key>":[]}` envelope overhead, counted toward the byte cap. */
|
|
49
|
-
envelopeBytes;
|
|
50
|
-
stats = newStats();
|
|
51
|
-
constructor(name, maxBatchBytes, sendFn) {
|
|
52
|
-
this.name = name;
|
|
53
|
-
this.maxBatchBytes = maxBatchBytes;
|
|
54
|
-
this.sendFn = sendFn;
|
|
55
|
-
const bodyKey = name === "traces" ? "spans" : "logs";
|
|
56
|
-
this.envelopeBytes = Buffer.byteLength(`{"${bodyKey}":[]}`, "utf8");
|
|
57
|
-
}
|
|
58
|
-
/** Exact serialized body size for the rows currently buffered. */
|
|
59
|
-
bodyBytes() {
|
|
60
|
-
const commas = this.rows.length > 0 ? this.rows.length - 1 : 0;
|
|
61
|
-
return this.envelopeBytes + this.contentBytes + commas;
|
|
62
|
-
}
|
|
63
|
-
/** Would appending a `size`-byte row (plus its separator) cross the cap? */
|
|
64
|
-
wouldExceed(size) {
|
|
65
|
-
const separator = this.rows.length > 0 ? 1 : 0;
|
|
66
|
-
return this.bodyBytes() + separator + size > this.maxBatchBytes;
|
|
67
|
-
}
|
|
68
|
-
enqueue(row) {
|
|
69
|
-
this.stats.enqueued++;
|
|
70
|
-
const json = JSON.stringify(row);
|
|
71
|
-
const size = Buffer.byteLength(json, "utf8");
|
|
72
|
-
// A single row whose own framed body would exceed the cap can never ship.
|
|
73
|
-
if (this.envelopeBytes + size > this.maxBatchBytes) {
|
|
74
|
-
this.stats.clientDropped++;
|
|
75
|
-
logger.warn("dropping oversized telemetry row", {
|
|
76
|
-
signal: this.name,
|
|
77
|
-
rowBytes: size,
|
|
78
|
-
maxBatchBytes: this.maxBatchBytes,
|
|
79
|
-
});
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
// Byte-cap early flush: appending this row (plus a comma separator when the
|
|
83
|
-
// buffer is non-empty) would cross the cap. flush() swaps the buffer out
|
|
84
|
-
// synchronously (before its first await), so when no flush is already in
|
|
85
|
-
// flight this clears room for the new row.
|
|
86
|
-
if (this.wouldExceed(size)) {
|
|
87
|
-
void this.flush();
|
|
88
|
-
if (this.wouldExceed(size)) {
|
|
89
|
-
// A flush is already in flight and the buffer is still full — drop.
|
|
90
|
-
this.stats.clientDropped++;
|
|
91
|
-
logger.warn("dropping telemetry row on buffer overflow", {
|
|
92
|
-
signal: this.name,
|
|
93
|
-
bufferBytes: this.bodyBytes(),
|
|
94
|
-
maxBatchBytes: this.maxBatchBytes,
|
|
95
|
-
});
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
this.rows.push(json);
|
|
100
|
-
this.contentBytes += size;
|
|
101
|
-
}
|
|
102
|
-
flush() {
|
|
103
|
-
if (this.flushing || this.rows.length === 0)
|
|
104
|
-
return Promise.resolve();
|
|
105
|
-
this.flushing = true;
|
|
106
|
-
// Swap synchronously so enqueue sees an empty buffer immediately.
|
|
107
|
-
const batch = this.rows;
|
|
108
|
-
this.rows = [];
|
|
109
|
-
this.contentBytes = 0;
|
|
110
|
-
// Publish the in-flight promise so `drain()` (shutdown) can await it.
|
|
111
|
-
this.inFlight = this.send(batch).finally(() => {
|
|
112
|
-
this.flushing = false;
|
|
113
|
-
this.inFlight = null;
|
|
114
|
-
});
|
|
115
|
-
return this.inFlight;
|
|
116
|
-
}
|
|
117
|
-
/** Ship one batch and account the result. Never throws. */
|
|
118
|
-
async send(batch) {
|
|
119
|
-
try {
|
|
120
|
-
const result = await this.sendFn(batch);
|
|
121
|
-
this.account(batch.length, result);
|
|
122
|
-
}
|
|
123
|
-
catch (err) {
|
|
124
|
-
// The client is contracted never to throw, but the batcher is the last
|
|
125
|
-
// line of defense: swallow anything and count it as dropped.
|
|
126
|
-
this.stats.clientDropped += batch.length;
|
|
127
|
-
logger.warn("telemetry flush threw unexpectedly", {
|
|
128
|
-
signal: this.name,
|
|
129
|
-
batch: batch.length,
|
|
130
|
-
err: err instanceof Error ? err.message : String(err),
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Best-effort shutdown drain: wait for any in-flight send to settle, then
|
|
136
|
-
* flush whatever accumulated while it was in flight. One extra pass suffices
|
|
137
|
-
* — no new rows arrive once shutdown has begun. Without this, a flush already
|
|
138
|
-
* in flight makes the plain `flush()` return early (the `flushing` guard),
|
|
139
|
-
* silently stranding the just-buffered rows.
|
|
140
|
-
*/
|
|
141
|
-
async drain() {
|
|
142
|
-
if (this.inFlight)
|
|
143
|
-
await this.inFlight;
|
|
144
|
-
await this.flush();
|
|
145
|
-
}
|
|
146
|
-
account(batchSize, result) {
|
|
147
|
-
switch (result.outcome) {
|
|
148
|
-
case "transport":
|
|
149
|
-
this.stats.clientDropped += batchSize;
|
|
150
|
-
logger.warn("telemetry flush failed; batch dropped (no retry)", {
|
|
151
|
-
signal: this.name,
|
|
152
|
-
batch: batchSize,
|
|
153
|
-
status: result.status,
|
|
154
|
-
});
|
|
155
|
-
return;
|
|
156
|
-
case "oversized":
|
|
157
|
-
// 413: the body exceeded the server's limit. A client batching defect,
|
|
158
|
-
// not transient transport and not a per-row mapper bug — surface it
|
|
159
|
-
// distinctly so it isn't mistaken for a network outage.
|
|
160
|
-
this.stats.clientDropped += batchSize;
|
|
161
|
-
logger.warn("telemetry batch exceeded server size limit; dropped — lower maxBatchBytes or split", {
|
|
162
|
-
signal: this.name,
|
|
163
|
-
batch: batchSize,
|
|
164
|
-
status: result.status,
|
|
165
|
-
});
|
|
166
|
-
return;
|
|
167
|
-
case "rejected":
|
|
168
|
-
// 400: whole batch invalid — a mapper bug.
|
|
169
|
-
this.stats.serverRejected += batchSize;
|
|
170
|
-
logger.warn("telemetry batch server-rejected (400, all rows invalid)", {
|
|
171
|
-
signal: this.name,
|
|
172
|
-
batch: batchSize,
|
|
173
|
-
errors: result.errors.slice(0, 5),
|
|
174
|
-
});
|
|
175
|
-
return;
|
|
176
|
-
case "accepted": {
|
|
177
|
-
// 200: partial acceptance. Any row the server did not accept was refused
|
|
178
|
-
// — ownership rejections (counted in `rejected`) AND schema-validation
|
|
179
|
-
// drops (which the service reports only in `errors[]`, never in
|
|
180
|
-
// `rejected`). Derive the shortfall from `accepted` so no refused row
|
|
181
|
-
// goes uncounted.
|
|
182
|
-
this.stats.sent += result.accepted;
|
|
183
|
-
const refused = batchSize - result.accepted;
|
|
184
|
-
if (refused > 0) {
|
|
185
|
-
this.stats.serverRejected += refused;
|
|
186
|
-
// Distinguish ownership rejections (reported in `rejected`, possibly
|
|
187
|
-
// an ownership-service issue) from schema drops (a likely mapper bug).
|
|
188
|
-
const schemaDropped = Math.max(0, refused - result.rejected);
|
|
189
|
-
logger.warn("telemetry rows not accepted by server", {
|
|
190
|
-
signal: this.name,
|
|
191
|
-
refused,
|
|
192
|
-
ownershipRejected: result.rejected,
|
|
193
|
-
schemaDropped,
|
|
194
|
-
errors: result.errors.slice(0, 5),
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Build a batcher. `client` is injectable for testing; by default it is built
|
|
204
|
-
* from `config`.
|
|
205
|
-
*/
|
|
206
|
-
export function createBatcher(config, client = createTelemetryClient(config)) {
|
|
207
|
-
const traces = new SignalBuffer("traces", config.maxBatchBytes, (rowsJson) => client.sendTraces(rowsJson));
|
|
208
|
-
const logs = new SignalBuffer("logs", config.maxBatchBytes, (rowsJson) => client.sendLogs(rowsJson));
|
|
209
|
-
const flush = async () => {
|
|
210
|
-
await Promise.all([traces.flush(), logs.flush()]);
|
|
211
|
-
};
|
|
212
|
-
const timer = setInterval(() => {
|
|
213
|
-
void flush();
|
|
214
|
-
}, config.flushIntervalMs);
|
|
215
|
-
// Telemetry flushes must not keep the process alive (Node >=22).
|
|
216
|
-
timer.unref();
|
|
217
|
-
let stopped = false;
|
|
218
|
-
return {
|
|
219
|
-
enqueueTrace: (row) => traces.enqueue(row),
|
|
220
|
-
enqueueLog: (row) => logs.enqueue(row),
|
|
221
|
-
flush,
|
|
222
|
-
async shutdown() {
|
|
223
|
-
if (stopped)
|
|
224
|
-
return;
|
|
225
|
-
stopped = true;
|
|
226
|
-
clearInterval(timer);
|
|
227
|
-
// Drain (not plain flush): wait for any in-flight send, then ship rows
|
|
228
|
-
// buffered during it — otherwise the `flushing` guard strands them.
|
|
229
|
-
await Promise.all([traces.drain(), logs.drain()]);
|
|
230
|
-
},
|
|
231
|
-
getStats: () => ({ traces: { ...traces.stats }, logs: { ...logs.stats } }),
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
//# sourceMappingURL=batcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batcher.js","sourceRoot":"","sources":["../../../src/recording/transport/batcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP client — POSTs a batch of already-serialized telemetry rows to the
|
|
3
|
-
* ingestion service with bearer auth, and parses the
|
|
4
|
-
* `{ accepted, rejected, errors }` response into a {@link SendResult}.
|
|
5
|
-
*
|
|
6
|
-
* It transforms NOTHING (the mapper builds the rows) and NEVER throws: network
|
|
7
|
-
* errors, timeouts, and unreadable bodies resolve to a `SendResult` so the
|
|
8
|
-
* batcher can account for the drop without the failure reaching the caller.
|
|
9
|
-
*
|
|
10
|
-
* Rows arrive pre-serialized (`string[]`): the batcher serializes each row
|
|
11
|
-
* exactly once (for byte accounting) and reuses that JSON here, so the body is
|
|
12
|
-
* assembled by concatenation — never serialized a second time.
|
|
13
|
-
*/
|
|
14
|
-
import type { TransportConfig } from "./config.js";
|
|
15
|
-
/**
|
|
16
|
-
* How a POST resolved. Drives the batcher's counters:
|
|
17
|
-
* - `accepted` — 2xx; the server adjudicated the rows. `accepted`/`rejected`/
|
|
18
|
-
* `errors` carry its verdict (partial acceptance is still a 2xx).
|
|
19
|
-
* - `rejected` — `400`; the server adjudicated the WHOLE batch as invalid
|
|
20
|
-
* (every row bad) — a likely mapper bug.
|
|
21
|
-
* - `oversized` — `413`; the body exceeded the server's size limit. A permanent
|
|
22
|
-
* client-side batching defect — not transient transport, not a per-row bug.
|
|
23
|
-
* - `transport` — network failure, timeout, `401`, `408`, `429`, `5xx`: the
|
|
24
|
-
* batch never reached row adjudication. A transport-health signal.
|
|
25
|
-
*/
|
|
26
|
-
export type SendOutcome = "accepted" | "rejected" | "oversized" | "transport";
|
|
27
|
-
export interface SendResult {
|
|
28
|
-
outcome: SendOutcome;
|
|
29
|
-
/** HTTP status, or 0 when the request never completed (network/timeout). */
|
|
30
|
-
status: number;
|
|
31
|
-
accepted: number;
|
|
32
|
-
rejected: number;
|
|
33
|
-
errors: string[];
|
|
34
|
-
}
|
|
35
|
-
export interface TelemetryClient {
|
|
36
|
-
/** `rowsJson` are pre-serialized rows; the client only frames + POSTs them. */
|
|
37
|
-
sendTraces(rowsJson: readonly string[]): Promise<SendResult>;
|
|
38
|
-
sendLogs(rowsJson: readonly string[]): Promise<SendResult>;
|
|
39
|
-
}
|
|
40
|
-
export declare function createTelemetryClient(config: TransportConfig): TelemetryClient;
|
|
41
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/recording/transport/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,UAAU,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5D;AAwBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CA4C9E"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP client — POSTs a batch of already-serialized telemetry rows to the
|
|
3
|
-
* ingestion service with bearer auth, and parses the
|
|
4
|
-
* `{ accepted, rejected, errors }` response into a {@link SendResult}.
|
|
5
|
-
*
|
|
6
|
-
* It transforms NOTHING (the mapper builds the rows) and NEVER throws: network
|
|
7
|
-
* errors, timeouts, and unreadable bodies resolve to a `SendResult` so the
|
|
8
|
-
* batcher can account for the drop without the failure reaching the caller.
|
|
9
|
-
*
|
|
10
|
-
* Rows arrive pre-serialized (`string[]`): the batcher serializes each row
|
|
11
|
-
* exactly once (for byte accounting) and reuses that JSON here, so the body is
|
|
12
|
-
* assembled by concatenation — never serialized a second time.
|
|
13
|
-
*/
|
|
14
|
-
import { LOGS_PATH, TRACES_PATH } from "./config.js";
|
|
15
|
-
function toCount(v) {
|
|
16
|
-
return typeof v === "number" && Number.isFinite(v) ? v : 0;
|
|
17
|
-
}
|
|
18
|
-
function toErrors(v) {
|
|
19
|
-
return Array.isArray(v) ? v.filter((e) => typeof e === "string") : [];
|
|
20
|
-
}
|
|
21
|
-
/** Map an HTTP status to the outcome the batcher accounts on. */
|
|
22
|
-
function classify(status) {
|
|
23
|
-
if (status >= 200 && status < 300)
|
|
24
|
-
return "accepted";
|
|
25
|
-
if (status === 400)
|
|
26
|
-
return "rejected"; // whole batch invalid — mapper bug
|
|
27
|
-
if (status === 413)
|
|
28
|
-
return "oversized"; // body too large — client batching defect
|
|
29
|
-
return "transport"; // 401 / 408 / 429 / 5xx / other — rows never adjudicated
|
|
30
|
-
}
|
|
31
|
-
export function createTelemetryClient(config) {
|
|
32
|
-
const base = config.baseUrl.replace(/\/+$/, "");
|
|
33
|
-
async function send(path, bodyKey, rowsJson) {
|
|
34
|
-
const headers = { "Content-Type": "application/json" };
|
|
35
|
-
const token = config.getToken();
|
|
36
|
-
if (token)
|
|
37
|
-
headers.Authorization = `Bearer ${token}`;
|
|
38
|
-
let response;
|
|
39
|
-
try {
|
|
40
|
-
response = await fetch(`${base}${path}`, {
|
|
41
|
-
method: "POST",
|
|
42
|
-
headers,
|
|
43
|
-
// Frame the pre-serialized rows directly — no re-serialization. bodyKey
|
|
44
|
-
// is a fixed literal ("spans"/"logs"), so no escaping is needed.
|
|
45
|
-
body: `{"${bodyKey}":[${rowsJson.join(",")}]}`,
|
|
46
|
-
signal: AbortSignal.timeout(config.requestTimeoutMs),
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
// Network error / timeout / abort — never reached the server.
|
|
51
|
-
return { outcome: "transport", status: 0, accepted: 0, rejected: 0, errors: [] };
|
|
52
|
-
}
|
|
53
|
-
const parsed = (await response
|
|
54
|
-
.json()
|
|
55
|
-
.catch(() => ({})));
|
|
56
|
-
return {
|
|
57
|
-
outcome: classify(response.status),
|
|
58
|
-
status: response.status,
|
|
59
|
-
accepted: toCount(parsed.accepted),
|
|
60
|
-
rejected: toCount(parsed.rejected),
|
|
61
|
-
errors: toErrors(parsed.errors),
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
return {
|
|
65
|
-
sendTraces: (rowsJson) => send(TRACES_PATH, "spans", rowsJson),
|
|
66
|
-
sendLogs: (rowsJson) => send(LOGS_PATH, "logs", rowsJson),
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/recording/transport/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Transport config — injected, not hard-coupled to `src/tracking/` or the CLI.
|
|
3
|
-
*
|
|
4
|
-
* The caller supplies `getToken` / `baseUrl` (e.g. from the Senpi API-key store
|
|
5
|
-
* + `SENPI_TRACKING_URL`). Keeping the token an injected getter — rather than a
|
|
6
|
-
* captured string — lets the credential rotate without rebuilding the batcher,
|
|
7
|
-
* and keeps this module self-contained, with no dependency on `tracking/`.
|
|
8
|
-
*/
|
|
9
|
-
/** Default ingestion base URL (overridable via `SENPI_TRACKING_URL`). */
|
|
10
|
-
export declare const DEFAULT_BASE_URL = "https://agent-telemetry.prod.senpi.ai";
|
|
11
|
-
/** Endpoint paths, confirmed against the service route registration. */
|
|
12
|
-
export declare const TRACES_PATH = "/v1/traces";
|
|
13
|
-
export declare const LOGS_PATH = "/v1/logs";
|
|
14
|
-
/** Flush cadence — the primary trigger. */
|
|
15
|
-
export declare const DEFAULT_FLUSH_INTERVAL_MS = 5000;
|
|
16
|
-
/**
|
|
17
|
-
* Client-side per-batch byte cap. The server rejects bodies > 10 MiB; we cap
|
|
18
|
-
* under that (the service's own route comment notes the runtime emitter uses an
|
|
19
|
-
* 8 MiB cap with HTTP headroom). Crossing this watermark forces an early flush.
|
|
20
|
-
*/
|
|
21
|
-
export declare const DEFAULT_MAX_BATCH_BYTES: number;
|
|
22
|
-
/** Per-request timeout. Bounds flushes (incl. the best-effort shutdown flush). */
|
|
23
|
-
export declare const DEFAULT_REQUEST_TIMEOUT_MS = 15000;
|
|
24
|
-
export interface TransportConfig {
|
|
25
|
-
/** Resolved ingestion base URL (no trailing slash required). */
|
|
26
|
-
baseUrl: string;
|
|
27
|
-
/** Returns the current bearer token, or undefined when unavailable. */
|
|
28
|
-
getToken: () => string | undefined;
|
|
29
|
-
/** Timer flush cadence in ms. */
|
|
30
|
-
flushIntervalMs: number;
|
|
31
|
-
/** Per-batch byte cap that triggers an early flush. */
|
|
32
|
-
maxBatchBytes: number;
|
|
33
|
-
/** Per-request timeout in ms. */
|
|
34
|
-
requestTimeoutMs: number;
|
|
35
|
-
}
|
|
36
|
-
export interface TransportConfigOptions {
|
|
37
|
-
/** Required: the only thing the caller must supply. */
|
|
38
|
-
getToken: () => string | undefined;
|
|
39
|
-
/** Defaults to `SENPI_TRACKING_URL` if set, else {@link DEFAULT_BASE_URL}. */
|
|
40
|
-
baseUrl?: string;
|
|
41
|
-
flushIntervalMs?: number;
|
|
42
|
-
maxBatchBytes?: number;
|
|
43
|
-
requestTimeoutMs?: number;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Fill a partial config with defaults, resolving the base URL from env.
|
|
47
|
-
*
|
|
48
|
-
* The `SENPI_TRACKING_URL` lookup is intentionally inlined rather than shared
|
|
49
|
-
* with `src/tracking/`: this module stays self-contained and does not import
|
|
50
|
-
* from `tracking/`, so the three-line resolver lives here by design.
|
|
51
|
-
*/
|
|
52
|
-
export declare function resolveTransportConfig(options: TransportConfigOptions): TransportConfig;
|
|
53
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/recording/transport/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,0CAA0C,CAAC;AAExE,wEAAwE;AACxE,eAAO,MAAM,WAAW,eAAe,CAAC;AACxC,eAAO,MAAM,SAAS,aAAa,CAAC;AAEpC,2CAA2C;AAC3C,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAkB,CAAC;AAEvD,kFAAkF;AAClF,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACnC,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,QAAQ,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACnC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CASjB"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Transport config — injected, not hard-coupled to `src/tracking/` or the CLI.
|
|
3
|
-
*
|
|
4
|
-
* The caller supplies `getToken` / `baseUrl` (e.g. from the Senpi API-key store
|
|
5
|
-
* + `SENPI_TRACKING_URL`). Keeping the token an injected getter — rather than a
|
|
6
|
-
* captured string — lets the credential rotate without rebuilding the batcher,
|
|
7
|
-
* and keeps this module self-contained, with no dependency on `tracking/`.
|
|
8
|
-
*/
|
|
9
|
-
/** Default ingestion base URL (overridable via `SENPI_TRACKING_URL`). */
|
|
10
|
-
export const DEFAULT_BASE_URL = "https://agent-telemetry.prod.senpi.ai";
|
|
11
|
-
/** Endpoint paths, confirmed against the service route registration. */
|
|
12
|
-
export const TRACES_PATH = "/v1/traces";
|
|
13
|
-
export const LOGS_PATH = "/v1/logs";
|
|
14
|
-
/** Flush cadence — the primary trigger. */
|
|
15
|
-
export const DEFAULT_FLUSH_INTERVAL_MS = 5_000;
|
|
16
|
-
/**
|
|
17
|
-
* Client-side per-batch byte cap. The server rejects bodies > 10 MiB; we cap
|
|
18
|
-
* under that (the service's own route comment notes the runtime emitter uses an
|
|
19
|
-
* 8 MiB cap with HTTP headroom). Crossing this watermark forces an early flush.
|
|
20
|
-
*/
|
|
21
|
-
export const DEFAULT_MAX_BATCH_BYTES = 8 * 1024 * 1024;
|
|
22
|
-
/** Per-request timeout. Bounds flushes (incl. the best-effort shutdown flush). */
|
|
23
|
-
export const DEFAULT_REQUEST_TIMEOUT_MS = 15_000;
|
|
24
|
-
/**
|
|
25
|
-
* Fill a partial config with defaults, resolving the base URL from env.
|
|
26
|
-
*
|
|
27
|
-
* The `SENPI_TRACKING_URL` lookup is intentionally inlined rather than shared
|
|
28
|
-
* with `src/tracking/`: this module stays self-contained and does not import
|
|
29
|
-
* from `tracking/`, so the three-line resolver lives here by design.
|
|
30
|
-
*/
|
|
31
|
-
export function resolveTransportConfig(options) {
|
|
32
|
-
const envBase = process.env.SENPI_TRACKING_URL?.trim();
|
|
33
|
-
return {
|
|
34
|
-
getToken: options.getToken,
|
|
35
|
-
baseUrl: options.baseUrl ?? (envBase || DEFAULT_BASE_URL),
|
|
36
|
-
flushIntervalMs: options.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS,
|
|
37
|
-
maxBatchBytes: options.maxBatchBytes ?? DEFAULT_MAX_BATCH_BYTES,
|
|
38
|
-
requestTimeoutMs: options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/recording/transport/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAAG,uCAAuC,CAAC;AAExE,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;AAEpC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvD,kFAAkF;AAClF,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAyBjD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAA+B;IAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACvD,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAC;QACzD,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,yBAAyB;QACrE,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,uBAAuB;QAC/D,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,0BAA0B;KACzE,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Transport / micro-batcher — batches already-row-shaped telemetry and ships it
|
|
3
|
-
* to the sibling ingestion service, fire-and-forget. Transforms nothing (the
|
|
4
|
-
* mapper builds the rows); never throws into trading behavior.
|
|
5
|
-
*
|
|
6
|
-
* The row types (`TraceRow` / `LogRow`) mirror the service contract and are the
|
|
7
|
-
* boundary with the mapper that produces them.
|
|
8
|
-
*/
|
|
9
|
-
export type { TraceRow, LogRow, SpanEventRow, SpanKind, StatusCode, TracesEnvelope, LogsEnvelope, IngestResponse, } from "./rows.js";
|
|
10
|
-
export { DEFAULT_BASE_URL, DEFAULT_FLUSH_INTERVAL_MS, DEFAULT_MAX_BATCH_BYTES, DEFAULT_REQUEST_TIMEOUT_MS, TRACES_PATH, LOGS_PATH, resolveTransportConfig, } from "./config.js";
|
|
11
|
-
export type { TransportConfig, TransportConfigOptions } from "./config.js";
|
|
12
|
-
export { createTelemetryClient } from "./client.js";
|
|
13
|
-
export type { TelemetryClient, SendResult, SendOutcome } from "./client.js";
|
|
14
|
-
export { createBatcher } from "./batcher.js";
|
|
15
|
-
export type { TelemetryBatcher, BatcherStats, SignalStats } from "./batcher.js";
|
|
16
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/recording/transport/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,EAC1B,WAAW,EACX,SAAS,EACT,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Transport / micro-batcher — batches already-row-shaped telemetry and ships it
|
|
3
|
-
* to the sibling ingestion service, fire-and-forget. Transforms nothing (the
|
|
4
|
-
* mapper builds the rows); never throws into trading behavior.
|
|
5
|
-
*
|
|
6
|
-
* The row types (`TraceRow` / `LogRow`) mirror the service contract and are the
|
|
7
|
-
* boundary with the mapper that produces them.
|
|
8
|
-
*/
|
|
9
|
-
export { DEFAULT_BASE_URL, DEFAULT_FLUSH_INTERVAL_MS, DEFAULT_MAX_BATCH_BYTES, DEFAULT_REQUEST_TIMEOUT_MS, TRACES_PATH, LOGS_PATH, resolveTransportConfig, } from "./config.js";
|
|
10
|
-
export { createTelemetryClient } from "./client.js";
|
|
11
|
-
export { createBatcher } from "./batcher.js";
|
|
12
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/recording/transport/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,EAC1B,WAAW,EACX,SAAS,EACT,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Telemetry wire types — the mapper produces these; the transport ships them
|
|
3
|
-
* unchanged.
|
|
4
|
-
*
|
|
5
|
-
* Mirrors the sibling ingestion service's row types verbatim: the destination
|
|
6
|
-
* ClickHouse row shapes — PascalCase keys, flat `Record<string,string>`
|
|
7
|
-
* attribute maps, epoch-ns timestamps as digit-strings, lowercase-hex ids,
|
|
8
|
-
* precomputed `Duration`. No OTLP envelope, no `AnyValue`.
|
|
9
|
-
*
|
|
10
|
-
* This module performs NO validation — the server's validator is the single
|
|
11
|
-
* source of truth for the hex/timestamp/enum rules; re-implementing them here
|
|
12
|
-
* would couple us to the service and drift.
|
|
13
|
-
*/
|
|
14
|
-
export type SpanKind = "Internal" | "Server" | "Client" | "Producer" | "Consumer" | "Unspecified";
|
|
15
|
-
export type StatusCode = "Unset" | "Ok" | "Error";
|
|
16
|
-
export interface SpanEventRow {
|
|
17
|
-
/** epoch ns as digit string. */
|
|
18
|
-
Timestamp: string;
|
|
19
|
-
Name: string;
|
|
20
|
-
Attributes: Record<string, string>;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* A span row on the wire / destined for Kafka. `address` is a derived field
|
|
24
|
-
* used for ownership + per-agent keying — not a ClickHouse column.
|
|
25
|
-
*/
|
|
26
|
-
export interface TraceRow {
|
|
27
|
-
/** epoch ns as string (span start). */
|
|
28
|
-
Timestamp: string;
|
|
29
|
-
/** 32-hex lowercase. */
|
|
30
|
-
TraceId: string;
|
|
31
|
-
/** 16-hex lowercase. */
|
|
32
|
-
SpanId: string;
|
|
33
|
-
/** 16-hex or empty string for roots. */
|
|
34
|
-
ParentSpanId: string;
|
|
35
|
-
TraceState: string;
|
|
36
|
-
SpanName: string;
|
|
37
|
-
SpanKind: SpanKind;
|
|
38
|
-
ServiceName: string;
|
|
39
|
-
/** end − start, ns, as string. */
|
|
40
|
-
Duration: string;
|
|
41
|
-
StatusCode: StatusCode;
|
|
42
|
-
StatusMessage: string;
|
|
43
|
-
SpanAttributes: Record<string, string>;
|
|
44
|
-
ResourceAttributes: Record<string, string>;
|
|
45
|
-
Events: SpanEventRow[];
|
|
46
|
-
ScopeName: string;
|
|
47
|
-
ScopeVersion: string;
|
|
48
|
-
TraceFlags: number;
|
|
49
|
-
/** Derived: lower(ResourceAttributes['strategy.address']); '' when absent. */
|
|
50
|
-
address: string;
|
|
51
|
-
}
|
|
52
|
-
/** A log row on the wire / destined for Kafka. `address` is a derived field. */
|
|
53
|
-
export interface LogRow {
|
|
54
|
-
/** epoch ns as digit string. */
|
|
55
|
-
Timestamp: string;
|
|
56
|
-
TraceId: string;
|
|
57
|
-
SpanId: string;
|
|
58
|
-
TraceFlags: number;
|
|
59
|
-
SeverityText: string;
|
|
60
|
-
SeverityNumber: number;
|
|
61
|
-
ServiceName: string;
|
|
62
|
-
Body: string;
|
|
63
|
-
ResourceAttributes: Record<string, string>;
|
|
64
|
-
ScopeName: string;
|
|
65
|
-
ScopeVersion: string;
|
|
66
|
-
LogAttributes: Record<string, string>;
|
|
67
|
-
/** Maps to the EventName CH column — the log-type discriminator. */
|
|
68
|
-
EventName: string;
|
|
69
|
-
/** Derived: lower(ResourceAttributes['strategy.address']); '' when absent. */
|
|
70
|
-
address: string;
|
|
71
|
-
}
|
|
72
|
-
export interface TracesEnvelope {
|
|
73
|
-
spans: TraceRow[];
|
|
74
|
-
}
|
|
75
|
-
export interface LogsEnvelope {
|
|
76
|
-
logs: LogRow[];
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Server response. Partial acceptance is a `200`; a shortfall in `accepted`
|
|
80
|
-
* means rows the server refused (e.g. a malformed row that got through the
|
|
81
|
-
* mapper). A `400` means the whole batch failed validation.
|
|
82
|
-
*/
|
|
83
|
-
export interface IngestResponse {
|
|
84
|
-
accepted: number;
|
|
85
|
-
rejected: number;
|
|
86
|
-
errors?: string[];
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=rows.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../../src/recording/transport/rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,UAAU,GACV,aAAa,CAAC;AAElB,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gFAAgF;AAChF,MAAM,WAAW,MAAM;IACrB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Telemetry wire types — the mapper produces these; the transport ships them
|
|
3
|
-
* unchanged.
|
|
4
|
-
*
|
|
5
|
-
* Mirrors the sibling ingestion service's row types verbatim: the destination
|
|
6
|
-
* ClickHouse row shapes — PascalCase keys, flat `Record<string,string>`
|
|
7
|
-
* attribute maps, epoch-ns timestamps as digit-strings, lowercase-hex ids,
|
|
8
|
-
* precomputed `Duration`. No OTLP envelope, no `AnyValue`.
|
|
9
|
-
*
|
|
10
|
-
* This module performs NO validation — the server's validator is the single
|
|
11
|
-
* source of truth for the hex/timestamp/enum rules; re-implementing them here
|
|
12
|
-
* would couple us to the service and drift.
|
|
13
|
-
*/
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=rows.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rows.js","sourceRoot":"","sources":["../../../src/recording/transport/rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|