@smthrs/observability 0.35.0 → 1.0.0-rc.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/LICENSE +1 -1
- package/README.md +87 -0
- package/dist/cjs/BrowserOtel.d.ts +37 -0
- package/dist/cjs/BrowserOtel.d.ts.map +1 -0
- package/dist/cjs/BrowserOtel.js +47 -0
- package/dist/cjs/BrowserOtel.js.map +7 -0
- package/dist/cjs/Endpoint.d.ts +70 -0
- package/dist/cjs/Endpoint.d.ts.map +1 -0
- package/dist/cjs/Endpoint.js +85 -0
- package/dist/cjs/Endpoint.js.map +7 -0
- package/dist/cjs/JournalLogger.d.ts +232 -0
- package/dist/cjs/JournalLogger.d.ts.map +1 -0
- package/dist/cjs/JournalLogger.js +415 -0
- package/dist/cjs/JournalLogger.js.map +7 -0
- package/dist/cjs/Logger.d.ts +56 -0
- package/dist/cjs/Logger.d.ts.map +1 -0
- package/dist/cjs/Logger.js +72 -0
- package/dist/cjs/Logger.js.map +7 -0
- package/dist/cjs/Metric.d.ts +67 -0
- package/dist/cjs/Metric.d.ts.map +1 -0
- package/dist/cjs/Metric.js +68 -0
- package/dist/cjs/Metric.js.map +7 -0
- package/dist/cjs/NodeOtel.d.ts +42 -0
- package/dist/cjs/NodeOtel.d.ts.map +1 -0
- package/dist/cjs/NodeOtel.js +78 -0
- package/dist/cjs/NodeOtel.js.map +7 -0
- package/dist/cjs/Otel.d.ts +63 -0
- package/dist/cjs/Otel.d.ts.map +1 -0
- package/dist/cjs/Otel.js +75 -0
- package/dist/cjs/Otel.js.map +7 -0
- package/dist/cjs/Otlp.d.ts +203 -0
- package/dist/cjs/Otlp.d.ts.map +1 -0
- package/dist/cjs/Otlp.js +251 -0
- package/dist/cjs/Otlp.js.map +7 -0
- package/dist/cjs/Resource.d.ts +163 -0
- package/dist/cjs/Resource.d.ts.map +1 -0
- package/dist/cjs/Resource.js +186 -0
- package/dist/cjs/Resource.js.map +7 -0
- package/dist/cjs/index.d.ts +61 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +47 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/schemaIssuePath.d.ts +31 -0
- package/dist/cjs/internal/schemaIssuePath.d.ts.map +1 -0
- package/dist/cjs/internal/schemaIssuePath.js +49 -0
- package/dist/cjs/internal/schemaIssuePath.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/BrowserOtel.d.ts +37 -0
- package/dist/esm/BrowserOtel.d.ts.map +1 -0
- package/dist/esm/BrowserOtel.js +24 -0
- package/dist/esm/BrowserOtel.js.map +1 -0
- package/dist/esm/Endpoint.d.ts +70 -0
- package/dist/esm/Endpoint.d.ts.map +1 -0
- package/dist/esm/Endpoint.js +110 -0
- package/dist/esm/Endpoint.js.map +1 -0
- package/dist/esm/JournalLogger.d.ts +232 -0
- package/dist/esm/JournalLogger.d.ts.map +1 -0
- package/dist/esm/JournalLogger.js +520 -0
- package/dist/esm/JournalLogger.js.map +1 -0
- package/dist/esm/Logger.d.ts +56 -0
- package/dist/esm/Logger.d.ts.map +1 -0
- package/dist/esm/Logger.js +61 -0
- package/dist/esm/Logger.js.map +1 -0
- package/dist/esm/Metric.d.ts +67 -0
- package/dist/esm/Metric.d.ts.map +1 -0
- package/dist/esm/Metric.js +80 -0
- package/dist/esm/Metric.js.map +1 -0
- package/dist/esm/NodeOtel.d.ts +42 -0
- package/dist/esm/NodeOtel.d.ts.map +1 -0
- package/dist/esm/NodeOtel.js +56 -0
- package/dist/esm/NodeOtel.js.map +1 -0
- package/dist/esm/Otel.d.ts +63 -0
- package/dist/esm/Otel.d.ts.map +1 -0
- package/dist/esm/Otel.js +52 -0
- package/dist/esm/Otel.js.map +1 -0
- package/dist/esm/Otlp.d.ts +203 -0
- package/dist/esm/Otlp.d.ts.map +1 -0
- package/dist/esm/Otlp.js +384 -0
- package/dist/esm/Otlp.js.map +1 -0
- package/dist/esm/Resource.d.ts +163 -0
- package/dist/esm/Resource.d.ts.map +1 -0
- package/dist/esm/Resource.js +238 -0
- package/dist/esm/Resource.js.map +1 -0
- package/dist/esm/index.d.ts +61 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +61 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/schemaIssuePath.d.ts +31 -0
- package/dist/esm/internal/schemaIssuePath.d.ts.map +1 -0
- package/dist/esm/internal/schemaIssuePath.js +59 -0
- package/dist/esm/internal/schemaIssuePath.js.map +1 -0
- package/docs/README.md +164 -0
- package/docs/api.md +780 -0
- package/docs/concepts/instrumentation-and-export.md +98 -0
- package/docs/concepts/layer-map.md +73 -0
- package/docs/concepts/validated-acquisition.md +106 -0
- package/docs/guides/export-to-a-collector.md +190 -0
- package/docs/guides/forward-logs-to-the-journal.md +226 -0
- package/docs/guides/install-a-logger.md +111 -0
- package/docs/guides/read-runtime-metrics.md +83 -0
- package/docs/guides/testing.md +134 -0
- package/docs/guides/wire-an-opentelemetry-sdk.md +226 -0
- package/docs/installation.md +102 -0
- package/docs/quickstart.md +145 -0
- package/docs/troubleshooting.md +168 -0
- package/package.json +221 -32
- package/src/BrowserOtel.ts +51 -0
- package/src/Endpoint.ts +131 -0
- package/src/JournalLogger.ts +635 -0
- package/src/Logger.ts +107 -0
- package/src/Metric.ts +88 -0
- package/src/NodeOtel.ts +90 -0
- package/src/Otel.ts +118 -0
- package/src/Otlp.ts +514 -0
- package/src/Resource.ts +325 -0
- package/src/index.ts +67 -0
- package/src/internal/schemaIssuePath.ts +65 -0
- package/docker-compose.otel.yml +0 -104
- package/grafana/dashboards/smithers-dashboard.json +0 -453
- package/grafana/provisioning/dashboards/dashboards.yml +0 -12
- package/grafana/provisioning/datasources/datasources.yml +0 -49
- package/loki/loki-config.yaml +0 -35
- package/otel-collector-config.yml +0 -38
- package/prometheus/prometheus.yml +0 -8
- package/src/MetricName.ts +0 -1
- package/src/MetricsServiceLive.js +0 -9
- package/src/README.md +0 -28
- package/src/ResolvedSmithersObservabilityOptions.ts +0 -12
- package/src/SmithersEvent.ts +0 -843
- package/src/SmithersLogFormat.ts +0 -1
- package/src/SmithersMetricDefinition.ts +0 -15
- package/src/SmithersMetricType.ts +0 -1
- package/src/SmithersMetricUnit.ts +0 -1
- package/src/SmithersObservability.js +0 -15
- package/src/SmithersObservabilityOptions.ts +0 -12
- package/src/SmithersObservabilityService.ts +0 -13
- package/src/_coreCorrelation/CorrelationContext.ts +0 -10
- package/src/_coreCorrelation/CorrelationContextLive.js +0 -11
- package/src/_coreCorrelation/CorrelationContextService.js +0 -15
- package/src/_coreCorrelation/CorrelationContextServiceShape.ts +0 -12
- package/src/_coreCorrelation/CorrelationPatch.ts +0 -3
- package/src/_coreCorrelation/README.md +0 -20
- package/src/_coreCorrelation/_correlationStorage.js +0 -4
- package/src/_coreCorrelation/correlationContextFiberRef.js +0 -5
- package/src/_coreCorrelation/correlationContextToLogAnnotations.js +0 -18
- package/src/_coreCorrelation/getCurrentCorrelationContext.js +0 -9
- package/src/_coreCorrelation/getCurrentCorrelationContextEffect.js +0 -11
- package/src/_coreCorrelation/index.js +0 -14
- package/src/_coreCorrelation/mergeCorrelationContext.js +0 -51
- package/src/_coreCorrelation/runWithCorrelationContext.js +0 -14
- package/src/_coreCorrelation/updateCurrentCorrelationContext.js +0 -17
- package/src/_coreCorrelation/withCorrelationContext.js +0 -38
- package/src/_coreCorrelation/withCurrentCorrelationContext.js +0 -11
- package/src/_coreMetrics.js +0 -14
- package/src/_coreMetricsShape.ts +0 -44
- package/src/_corePrometheus.js +0 -91
- package/src/_corePrometheusShape.ts +0 -11
- package/src/_coreTracing.js +0 -132
- package/src/_coreTracingShape.ts +0 -17
- package/src/_otelLogBuilders.js +0 -102
- package/src/_sessionFileResolvers.js +0 -164
- package/src/_smithersSpanAttributeAliases.js +0 -19
- package/src/_smithersTraceSpanStorage.js +0 -3
- package/src/_traceEventNormalizers.js +0 -499
- package/src/_traceRedaction.js +0 -162
- package/src/agentSessionEventToOtelLogRecord.js +0 -55
- package/src/agentTrace.ts +0 -144
- package/src/agentTraceCapabilities.js +0 -151
- package/src/annotateSmithersTrace.js +0 -11
- package/src/canonicalTraceEventToOtelLogRecord.js +0 -55
- package/src/correlation.js +0 -56
- package/src/createSmithersObservabilityLayer.js +0 -59
- package/src/createSmithersOtelLayer.js +0 -23
- package/src/createSmithersRuntimeLayer.js +0 -2
- package/src/detectAgentFamily.js +0 -26
- package/src/detectCaptureMode.js +0 -29
- package/src/emitOtelLogRecord.js +0 -19
- package/src/getCurrentSmithersTraceAnnotations.js +0 -14
- package/src/getCurrentSmithersTraceSpan.js +0 -7
- package/src/index.d.ts +0 -1392
- package/src/index.js +0 -137
- package/src/kindPhase.js +0 -17
- package/src/logging.js +0 -264
- package/src/makeSmithersSpanAttributes.js +0 -20
- package/src/metrics/README.md +0 -22
- package/src/metrics/SmithersMetricDefinition.ts +0 -17
- package/src/metrics/SmithersMetricType.ts +0 -1
- package/src/metrics/SmithersMetricUnit.ts +0 -1
- package/src/metrics/_asyncExternalWaitCounts.js +0 -4
- package/src/metrics/_buckets.js +0 -37
- package/src/metrics/_incrementGauge.js +0 -11
- package/src/metrics/_processStartMs.js +0 -1
- package/src/metrics/activeNodes.js +0 -2
- package/src/metrics/activeRuns.js +0 -2
- package/src/metrics/agentActionsTotal.js +0 -2
- package/src/metrics/agentDurationMs.js +0 -3
- package/src/metrics/agentErrorsTotal.js +0 -2
- package/src/metrics/agentEventsTotal.js +0 -2
- package/src/metrics/agentInvocationsTotal.js +0 -2
- package/src/metrics/agentRetriesTotal.js +0 -2
- package/src/metrics/agentSessionsTotal.js +0 -2
- package/src/metrics/agentTokensTotal.js +0 -2
- package/src/metrics/alertDeliveriesAttempted.js +0 -2
- package/src/metrics/alertDeliveriesSuppressed.js +0 -2
- package/src/metrics/alertsAcknowledgedTotal.js +0 -2
- package/src/metrics/alertsActive.js +0 -2
- package/src/metrics/alertsEscalatedTotal.js +0 -2
- package/src/metrics/alertsFiredTotal.js +0 -2
- package/src/metrics/alertsReopenedTotal.js +0 -2
- package/src/metrics/alertsResolvedTotal.js +0 -2
- package/src/metrics/alertsSilencedTotal.js +0 -2
- package/src/metrics/approvalPending.js +0 -2
- package/src/metrics/approvalWaitDuration.js +0 -5
- package/src/metrics/approvalsDenied.js +0 -2
- package/src/metrics/approvalsGranted.js +0 -2
- package/src/metrics/approvalsRequested.js +0 -2
- package/src/metrics/attemptDuration.js +0 -3
- package/src/metrics/attentionBacklog.js +0 -2
- package/src/metrics/cacheHits.js +0 -2
- package/src/metrics/cacheMisses.js +0 -2
- package/src/metrics/dbQueryDuration.js +0 -3
- package/src/metrics/dbRetries.js +0 -2
- package/src/metrics/dbTransactionDuration.js +0 -3
- package/src/metrics/dbTransactionRetries.js +0 -2
- package/src/metrics/dbTransactionRollbacks.js +0 -2
- package/src/metrics/devtoolsActiveSubscribers.js +0 -2
- package/src/metrics/devtoolsBackpressureDisconnectTotal.js +0 -2
- package/src/metrics/devtoolsDeltaBuildMs.js +0 -3
- package/src/metrics/devtoolsEventBytes.js +0 -3
- package/src/metrics/devtoolsEventTotal.js +0 -2
- package/src/metrics/devtoolsSnapshotBuildMs.js +0 -5
- package/src/metrics/devtoolsSubscribeTotal.js +0 -2
- package/src/metrics/errorsTotal.js +0 -2
- package/src/metrics/eventsEmittedTotal.js +0 -2
- package/src/metrics/externalWaitAsyncPending.js +0 -2
- package/src/metrics/gatewayApprovalDecisionsTotal.js +0 -2
- package/src/metrics/gatewayAuthEventsTotal.js +0 -2
- package/src/metrics/gatewayConnectionsActive.js +0 -2
- package/src/metrics/gatewayConnectionsClosedTotal.js +0 -2
- package/src/metrics/gatewayConnectionsTotal.js +0 -2
- package/src/metrics/gatewayCronTriggersTotal.js +0 -2
- package/src/metrics/gatewayErrorsTotal.js +0 -2
- package/src/metrics/gatewayHeartbeatTicksTotal.js +0 -2
- package/src/metrics/gatewayMessagesReceivedTotal.js +0 -2
- package/src/metrics/gatewayMessagesSentTotal.js +0 -2
- package/src/metrics/gatewayRpcCallsTotal.js +0 -2
- package/src/metrics/gatewayRpcDuration.js +0 -3
- package/src/metrics/gatewayRunEventBackpressureDisconnectTotal.js +0 -4
- package/src/metrics/gatewayRunsCompletedTotal.js +0 -2
- package/src/metrics/gatewayRunsStartedTotal.js +0 -2
- package/src/metrics/gatewaySignalsTotal.js +0 -2
- package/src/metrics/gatewayWebhooksReceivedTotal.js +0 -2
- package/src/metrics/gatewayWebhooksRejectedTotal.js +0 -2
- package/src/metrics/gatewayWebhooksVerifiedTotal.js +0 -2
- package/src/metrics/heartbeatDataSizeBytes.js +0 -5
- package/src/metrics/heartbeatIntervalMs.js +0 -3
- package/src/metrics/hotReloadDuration.js +0 -3
- package/src/metrics/hotReloadFailures.js +0 -2
- package/src/metrics/hotReloads.js +0 -2
- package/src/metrics/httpRequestDuration.js +0 -3
- package/src/metrics/httpRequests.js +0 -2
- package/src/metrics/index.d.ts +0 -1222
- package/src/metrics/index.js +0 -168
- package/src/metrics/memoryFactReads.js +0 -3
- package/src/metrics/memoryFactWrites.js +0 -3
- package/src/metrics/memoryMessageSaves.js +0 -3
- package/src/metrics/memoryRecallDuration.js +0 -11
- package/src/metrics/memoryRecallQueries.js +0 -3
- package/src/metrics/metricsServiceAdapter.js +0 -181
- package/src/metrics/nodeDuration.js +0 -3
- package/src/metrics/nodeRetriesTotal.js +0 -2
- package/src/metrics/nodesFailed.js +0 -2
- package/src/metrics/nodesFinished.js +0 -2
- package/src/metrics/nodesStarted.js +0 -2
- package/src/metrics/openApiToolCallErrorsTotal.js +0 -3
- package/src/metrics/openApiToolCallsTotal.js +0 -3
- package/src/metrics/openApiToolDuration.js +0 -9
- package/src/metrics/processHeapUsedBytes.js +0 -2
- package/src/metrics/processMemoryRssBytes.js +0 -2
- package/src/metrics/processUptimeSeconds.js +0 -2
- package/src/metrics/promptSizeBytes.js +0 -3
- package/src/metrics/replaysStarted.js +0 -3
- package/src/metrics/responseSizeBytes.js +0 -3
- package/src/metrics/rewindDurationMs.js +0 -3
- package/src/metrics/rewindFramesDeleted.js +0 -3
- package/src/metrics/rewindRollbackTotal.js +0 -2
- package/src/metrics/rewindSandboxesReverted.js +0 -3
- package/src/metrics/rewindTotal.js +0 -2
- package/src/metrics/runDuration.js +0 -3
- package/src/metrics/runForksCreated.js +0 -3
- package/src/metrics/runsAncestryDepth.js +0 -3
- package/src/metrics/runsCancelledTotal.js +0 -2
- package/src/metrics/runsCarriedStateBytes.js +0 -5
- package/src/metrics/runsContinuedTotal.js +0 -2
- package/src/metrics/runsFailedTotal.js +0 -2
- package/src/metrics/runsFinishedTotal.js +0 -2
- package/src/metrics/runsResumedTotal.js +0 -2
- package/src/metrics/runsTotal.js +0 -2
- package/src/metrics/sandboxActive.js +0 -2
- package/src/metrics/sandboxBundleSizeBytes.js +0 -5
- package/src/metrics/sandboxCompletedTotal.js +0 -2
- package/src/metrics/sandboxCreatedTotal.js +0 -2
- package/src/metrics/sandboxDurationMs.js +0 -3
- package/src/metrics/sandboxPatchCount.js +0 -3
- package/src/metrics/sandboxTransportDurationMs.js +0 -5
- package/src/metrics/schedulerConcurrencyUtilization.js +0 -2
- package/src/metrics/schedulerQueueDepth.js +0 -2
- package/src/metrics/schedulerWaitDuration.js +0 -5
- package/src/metrics/scorerDuration.js +0 -9
- package/src/metrics/scorerEventsFailed.js +0 -2
- package/src/metrics/scorerEventsFinished.js +0 -2
- package/src/metrics/scorerEventsStarted.js +0 -2
- package/src/metrics/scorersFailed.js +0 -3
- package/src/metrics/scorersFinished.js +0 -3
- package/src/metrics/scorersStarted.js +0 -3
- package/src/metrics/smithersMetricCatalog.js +0 -893
- package/src/metrics/smithersMetricCatalogByKey.js +0 -2
- package/src/metrics/smithersMetricCatalogByName.js +0 -2
- package/src/metrics/smithersMetricCatalogByPrometheusName.js +0 -4
- package/src/metrics/snapshotDuration.js +0 -9
- package/src/metrics/snapshotsCaptured.js +0 -3
- package/src/metrics/supervisorPollDuration.js +0 -5
- package/src/metrics/supervisorPollsTotal.js +0 -2
- package/src/metrics/supervisorResumeLag.js +0 -5
- package/src/metrics/supervisorResumedTotal.js +0 -2
- package/src/metrics/supervisorSkippedTotal.js +0 -2
- package/src/metrics/supervisorStaleDetected.js +0 -2
- package/src/metrics/taskHeartbeatTimeoutTotal.js +0 -2
- package/src/metrics/taskHeartbeatsTotal.js +0 -2
- package/src/metrics/timerDelayDuration.js +0 -3
- package/src/metrics/timersCancelled.js +0 -2
- package/src/metrics/timersCreated.js +0 -2
- package/src/metrics/timersFired.js +0 -2
- package/src/metrics/timersPending.js +0 -2
- package/src/metrics/toPrometheusMetricName.js +0 -8
- package/src/metrics/tokensCacheReadTotal.js +0 -2
- package/src/metrics/tokensCacheWriteTotal.js +0 -2
- package/src/metrics/tokensContextWindowBucketTotal.js +0 -2
- package/src/metrics/tokensContextWindowPerCall.js +0 -5
- package/src/metrics/tokensInputPerCall.js +0 -3
- package/src/metrics/tokensInputTotal.js +0 -2
- package/src/metrics/tokensOutputPerCall.js +0 -3
- package/src/metrics/tokensOutputTotal.js +0 -2
- package/src/metrics/tokensReasoningTotal.js +0 -2
- package/src/metrics/toolCallErrorsTotal.js +0 -2
- package/src/metrics/toolCallsTotal.js +0 -2
- package/src/metrics/toolDuration.js +0 -3
- package/src/metrics/toolOutputTruncatedTotal.js +0 -2
- package/src/metrics/trackEvent.js +0 -608
- package/src/metrics/updateAsyncExternalWaitPending.js +0 -18
- package/src/metrics/updateProcessMetrics.js +0 -20
- package/src/metrics/vcsDuration.js +0 -3
- package/src/normalizeStructuredEvent.js +0 -15
- package/src/prometheusContentType.js +0 -1
- package/src/renderPrometheusMetrics.js +0 -212
- package/src/resolveAgentTraceCapabilities.js +0 -59
- package/src/resolveSmithersObservabilityOptions.js +0 -109
- package/src/smithersMetrics.js +0 -2
- package/src/smithersSpanNames.js +0 -6
- package/src/unsupportedKindsForCapabilities.js +0 -32
- package/src/withSmithersSpan.js +0 -17
- package/tempo/tempo.yml +0 -17
package/package.json
CHANGED
|
@@ -1,48 +1,237 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smthrs/observability",
|
|
3
|
-
"version": "0.35.0",
|
|
4
|
-
"description": "Concrete Smithers metrics, logging, tracing, and observability integrations",
|
|
5
3
|
"type": "module",
|
|
6
|
-
"
|
|
4
|
+
"version": "1.0.0-rc.12",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"smthrs": {
|
|
7
|
+
"group": "engine"
|
|
8
|
+
},
|
|
9
|
+
"description": "Observability for flows: default OTLP export wiring plus Effect-native logger, metric, and OpenTelemetry SDK layers",
|
|
10
|
+
"homepage": "https://github.com/smithersai/smithers",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/smithersai/smithers.git",
|
|
14
|
+
"directory": "packages/smithers/flows/observability"
|
|
15
|
+
},
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/smithersai/smithers/issues"
|
|
18
|
+
},
|
|
19
|
+
"tags": [
|
|
20
|
+
"typescript",
|
|
21
|
+
"effect",
|
|
22
|
+
"observability",
|
|
23
|
+
"opentelemetry"
|
|
24
|
+
],
|
|
25
|
+
"keywords": [
|
|
26
|
+
"typescript",
|
|
27
|
+
"effect",
|
|
28
|
+
"observability",
|
|
29
|
+
"opentelemetry"
|
|
30
|
+
],
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=26.4.0"
|
|
33
|
+
},
|
|
34
|
+
"sideEffects": [],
|
|
7
35
|
"exports": {
|
|
36
|
+
"./package.json": "./package.json",
|
|
8
37
|
".": {
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
38
|
+
"import": {
|
|
39
|
+
"types": "./dist/esm/index.d.ts",
|
|
40
|
+
"default": "./dist/esm/index.js"
|
|
41
|
+
},
|
|
42
|
+
"require": {
|
|
43
|
+
"types": "./dist/cjs/index.d.ts",
|
|
44
|
+
"default": "./dist/cjs/index.js"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"./BrowserOtel": {
|
|
48
|
+
"import": {
|
|
49
|
+
"types": "./dist/esm/BrowserOtel.d.ts",
|
|
50
|
+
"default": "./dist/esm/BrowserOtel.js"
|
|
51
|
+
},
|
|
52
|
+
"require": {
|
|
53
|
+
"types": "./dist/cjs/BrowserOtel.d.ts",
|
|
54
|
+
"default": "./dist/cjs/BrowserOtel.js"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"./Endpoint": {
|
|
58
|
+
"import": {
|
|
59
|
+
"types": "./dist/esm/Endpoint.d.ts",
|
|
60
|
+
"default": "./dist/esm/Endpoint.js"
|
|
61
|
+
},
|
|
62
|
+
"require": {
|
|
63
|
+
"types": "./dist/cjs/Endpoint.d.ts",
|
|
64
|
+
"default": "./dist/cjs/Endpoint.js"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"./JournalLogger": {
|
|
68
|
+
"import": {
|
|
69
|
+
"types": "./dist/esm/JournalLogger.d.ts",
|
|
70
|
+
"default": "./dist/esm/JournalLogger.js"
|
|
71
|
+
},
|
|
72
|
+
"require": {
|
|
73
|
+
"types": "./dist/cjs/JournalLogger.d.ts",
|
|
74
|
+
"default": "./dist/cjs/JournalLogger.js"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"./Logger": {
|
|
78
|
+
"import": {
|
|
79
|
+
"types": "./dist/esm/Logger.d.ts",
|
|
80
|
+
"default": "./dist/esm/Logger.js"
|
|
81
|
+
},
|
|
82
|
+
"require": {
|
|
83
|
+
"types": "./dist/cjs/Logger.d.ts",
|
|
84
|
+
"default": "./dist/cjs/Logger.js"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"./Metric": {
|
|
88
|
+
"import": {
|
|
89
|
+
"types": "./dist/esm/Metric.d.ts",
|
|
90
|
+
"default": "./dist/esm/Metric.js"
|
|
91
|
+
},
|
|
92
|
+
"require": {
|
|
93
|
+
"types": "./dist/cjs/Metric.d.ts",
|
|
94
|
+
"default": "./dist/cjs/Metric.js"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"./NodeOtel": {
|
|
98
|
+
"import": {
|
|
99
|
+
"types": "./dist/esm/NodeOtel.d.ts",
|
|
100
|
+
"default": "./dist/esm/NodeOtel.js"
|
|
101
|
+
},
|
|
102
|
+
"require": {
|
|
103
|
+
"types": "./dist/cjs/NodeOtel.d.ts",
|
|
104
|
+
"default": "./dist/cjs/NodeOtel.js"
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"./Otel": {
|
|
108
|
+
"import": {
|
|
109
|
+
"types": "./dist/esm/Otel.d.ts",
|
|
110
|
+
"default": "./dist/esm/Otel.js"
|
|
111
|
+
},
|
|
112
|
+
"require": {
|
|
113
|
+
"types": "./dist/cjs/Otel.d.ts",
|
|
114
|
+
"default": "./dist/cjs/Otel.js"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"./Otlp": {
|
|
118
|
+
"import": {
|
|
119
|
+
"types": "./dist/esm/Otlp.d.ts",
|
|
120
|
+
"default": "./dist/esm/Otlp.js"
|
|
121
|
+
},
|
|
122
|
+
"require": {
|
|
123
|
+
"types": "./dist/cjs/Otlp.d.ts",
|
|
124
|
+
"default": "./dist/cjs/Otlp.js"
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"./Resource": {
|
|
128
|
+
"import": {
|
|
129
|
+
"types": "./dist/esm/Resource.d.ts",
|
|
130
|
+
"default": "./dist/esm/Resource.js"
|
|
131
|
+
},
|
|
132
|
+
"require": {
|
|
133
|
+
"types": "./dist/cjs/Resource.d.ts",
|
|
134
|
+
"default": "./dist/cjs/Resource.js"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"./index": {
|
|
138
|
+
"import": {
|
|
139
|
+
"types": "./dist/esm/index.d.ts",
|
|
140
|
+
"default": "./dist/esm/index.js"
|
|
141
|
+
},
|
|
142
|
+
"require": {
|
|
143
|
+
"types": "./dist/cjs/index.d.ts",
|
|
144
|
+
"default": "./dist/cjs/index.js"
|
|
145
|
+
}
|
|
22
146
|
}
|
|
23
147
|
},
|
|
24
148
|
"files": [
|
|
25
|
-
"src
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
149
|
+
"src/**/*.ts",
|
|
150
|
+
"dist/**/*.js",
|
|
151
|
+
"dist/**/*.js.map",
|
|
152
|
+
"dist/**/*.d.ts",
|
|
153
|
+
"dist/**/*.d.ts.map",
|
|
154
|
+
"dist/**/package.json",
|
|
155
|
+
"LICENSE",
|
|
156
|
+
"README.md",
|
|
157
|
+
"CHANGELOG.md",
|
|
158
|
+
"docs/"
|
|
32
159
|
],
|
|
160
|
+
"publishConfig": {
|
|
161
|
+
"access": "public",
|
|
162
|
+
"provenance": true,
|
|
163
|
+
"tag": "next"
|
|
164
|
+
},
|
|
33
165
|
"dependencies": {
|
|
34
|
-
"@
|
|
35
|
-
"@
|
|
36
|
-
"@
|
|
37
|
-
"effect": "4.0.
|
|
166
|
+
"@opentelemetry/sdk-logs": "0.222.0",
|
|
167
|
+
"@opentelemetry/sdk-metrics": "2.11.0",
|
|
168
|
+
"@smthrs/journal": "1.0.0-rc.12",
|
|
169
|
+
"@effect/opentelemetry": "4.0.4"
|
|
38
170
|
},
|
|
39
171
|
"devDependencies": {
|
|
40
|
-
"@
|
|
41
|
-
"
|
|
172
|
+
"@effect/language-service": "0.87.2",
|
|
173
|
+
"@effect/opentelemetry": "4.0.4",
|
|
174
|
+
"@effect/vitest": "4.0.4",
|
|
175
|
+
"@eslint/js": "9.39.5",
|
|
176
|
+
"@opentelemetry/api": "1.9.1",
|
|
177
|
+
"@opentelemetry/exporter-logs-otlp-http": "0.222.0",
|
|
178
|
+
"@opentelemetry/exporter-metrics-otlp-http": "0.222.0",
|
|
179
|
+
"@opentelemetry/exporter-trace-otlp-http": "0.222.0",
|
|
180
|
+
"@opentelemetry/sdk-trace-base": "2.11.0",
|
|
181
|
+
"@opentelemetry/sdk-trace-node": "2.11.0",
|
|
182
|
+
"@opentelemetry/sdk-trace-web": "2.11.0",
|
|
183
|
+
"@types/node": "26.4.1",
|
|
184
|
+
"@vitest/coverage-v8": "5.0.0",
|
|
185
|
+
"dprint": "0.57.1",
|
|
186
|
+
"effect": "4.0.4",
|
|
187
|
+
"esbuild": "0.28.2",
|
|
188
|
+
"eslint": "9.39.5",
|
|
189
|
+
"eslint-import-resolver-typescript": "4.4.5",
|
|
190
|
+
"eslint-plugin-import": "2.32.0",
|
|
191
|
+
"eslint-plugin-jsdoc": "64.3.4",
|
|
192
|
+
"eslint-plugin-unicorn": "65.0.0",
|
|
193
|
+
"madge": "8.0.0",
|
|
194
|
+
"typescript": "5.9.3",
|
|
195
|
+
"typescript-eslint": "8.69.0",
|
|
196
|
+
"vitest": "5.0.0"
|
|
197
|
+
},
|
|
198
|
+
"peerDependencies": {
|
|
199
|
+
"@opentelemetry/api": ">=1.9.1 <2.0.0",
|
|
200
|
+
"@opentelemetry/exporter-logs-otlp-http": ">=0.222.0 <0.300.0",
|
|
201
|
+
"@opentelemetry/exporter-metrics-otlp-http": ">=0.222.0 <0.300.0",
|
|
202
|
+
"@opentelemetry/exporter-trace-otlp-http": ">=0.222.0 <0.300.0",
|
|
203
|
+
"@opentelemetry/sdk-trace-base": ">=2.11.0 <3.0.0",
|
|
204
|
+
"@opentelemetry/sdk-trace-node": ">=2.11.0 <3.0.0",
|
|
205
|
+
"@opentelemetry/sdk-trace-web": ">=2.11.0 <3.0.0",
|
|
206
|
+
"effect": "^4.0.4"
|
|
207
|
+
},
|
|
208
|
+
"peerDependenciesMeta": {
|
|
209
|
+
"@opentelemetry/exporter-logs-otlp-http": {
|
|
210
|
+
"optional": true
|
|
211
|
+
},
|
|
212
|
+
"@opentelemetry/exporter-metrics-otlp-http": {
|
|
213
|
+
"optional": true
|
|
214
|
+
},
|
|
215
|
+
"@opentelemetry/exporter-trace-otlp-http": {
|
|
216
|
+
"optional": true
|
|
217
|
+
},
|
|
218
|
+
"@opentelemetry/sdk-trace-base": {
|
|
219
|
+
"optional": true
|
|
220
|
+
},
|
|
221
|
+
"@opentelemetry/sdk-trace-node": {
|
|
222
|
+
"optional": true
|
|
223
|
+
},
|
|
224
|
+
"@opentelemetry/sdk-trace-web": {
|
|
225
|
+
"optional": true
|
|
226
|
+
}
|
|
42
227
|
},
|
|
43
228
|
"scripts": {
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
229
|
+
"lint": "eslint src --max-warnings=0 && dprint check",
|
|
230
|
+
"format": "dprint fmt",
|
|
231
|
+
"build": "node scripts/build.mjs",
|
|
232
|
+
"check": "tsc -b tsconfig.json && tsc -p tsconfig.test.json --noEmit",
|
|
233
|
+
"circular": "node scripts/circular.mjs",
|
|
234
|
+
"test": "vitest",
|
|
235
|
+
"coverage": "vitest --coverage"
|
|
47
236
|
}
|
|
48
237
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser OpenTelemetry setup with explicitly injected providers/readers.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as WebSdk from "@effect/opentelemetry/WebSdk"
|
|
8
|
+
import type { LogRecordProcessor } from "@opentelemetry/sdk-logs"
|
|
9
|
+
import type { MetricReader } from "@opentelemetry/sdk-metrics"
|
|
10
|
+
import type { SpanProcessor } from "@opentelemetry/sdk-trace-base"
|
|
11
|
+
import * as Effect from "effect/Effect"
|
|
12
|
+
import * as Layer from "effect/Layer"
|
|
13
|
+
import * as Resource from "./Resource.ts"
|
|
14
|
+
import type { Configuration as ResourceConfiguration } from "./Resource.ts"
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Browser OTEL layer options. Processors and readers are created by the
|
|
18
|
+
* caller's factories, which keeps this module free of Node imports and browser
|
|
19
|
+
* exporter policy. Every factory is owned: it runs once during layer
|
|
20
|
+
* acquisition, after resource validation, and the layer scope shuts down
|
|
21
|
+
* everything it returned. An empty array installs nothing for that signal.
|
|
22
|
+
*
|
|
23
|
+
* @category models
|
|
24
|
+
* @since 0.1.0
|
|
25
|
+
*/
|
|
26
|
+
export interface Options {
|
|
27
|
+
readonly resource: ResourceConfiguration
|
|
28
|
+
readonly spanProcessor?: (() => SpanProcessor | ReadonlyArray<SpanProcessor>) | undefined
|
|
29
|
+
readonly logRecordProcessor?: (() => LogRecordProcessor | ReadonlyArray<LogRecordProcessor>) | undefined
|
|
30
|
+
readonly metricReader?: (() => MetricReader | ReadonlyArray<MetricReader>) | undefined
|
|
31
|
+
readonly loggerMergeWithExisting?: boolean | undefined
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Builds a scoped browser OpenTelemetry layer. The web SDK owns every
|
|
36
|
+
* processor and reader the factories return and shuts them down on release.
|
|
37
|
+
*
|
|
38
|
+
* @category layers
|
|
39
|
+
* @since 0.1.0
|
|
40
|
+
*/
|
|
41
|
+
export const layerOtel = (options: Options): Layer.Layer<never, Resource.InvalidResourceConfiguration> =>
|
|
42
|
+
Layer.unwrap(
|
|
43
|
+
Effect.map(Resource.decode(options.resource), (decoded) =>
|
|
44
|
+
WebSdk.layer(() => ({
|
|
45
|
+
resource: Resource.toOpenTelemetryConfiguration(decoded),
|
|
46
|
+
spanProcessor: options.spanProcessor?.(),
|
|
47
|
+
logRecordProcessor: options.logRecordProcessor?.(),
|
|
48
|
+
metricReader: options.metricReader?.(),
|
|
49
|
+
loggerMergeWithExisting: options.loggerMergeWithExisting
|
|
50
|
+
})))
|
|
51
|
+
)
|
package/src/Endpoint.ts
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validated collector endpoints for the OTLP exporters.
|
|
3
|
+
*
|
|
4
|
+
* The endpoint is the field an operator most often gets wrong, and a wrong one
|
|
5
|
+
* is invisible: Effect's exporter absorbs export failure by design, so a layer
|
|
6
|
+
* built against `""` or `"localhost:4318"` looks identical to a working one and
|
|
7
|
+
* simply never delivers. Every builder therefore decodes its endpoint during
|
|
8
|
+
* layer acquisition, the same posture `Resource` already takes.
|
|
9
|
+
*
|
|
10
|
+
* @since 1.0.0-rc.0
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import * as Effect from "effect/Effect"
|
|
14
|
+
import * as Schema from "effect/Schema"
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Largest collector endpoint accepted by a builder.
|
|
18
|
+
*
|
|
19
|
+
* @category constants
|
|
20
|
+
* @since 1.0.0-rc.0
|
|
21
|
+
*/
|
|
22
|
+
export const maximumEndpointLength = 2_048
|
|
23
|
+
|
|
24
|
+
/** The largest code unit the WHATWG URL parser repairs away: the space. */
|
|
25
|
+
const largestRepairedCodeUnit = 0x20
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Reports whether the URL parser would repair the value rather than parse it
|
|
29
|
+
* as written. It strips leading and trailing C0 controls and spaces and
|
|
30
|
+
* removes tab, newline, and carriage return from anywhere in its input, and
|
|
31
|
+
* every one of those sits at or below {@link largestRepairedCodeUnit}.
|
|
32
|
+
*/
|
|
33
|
+
const repairedByUrlParser = (value: string): boolean => {
|
|
34
|
+
for (let index = 0; index < value.length; index++) {
|
|
35
|
+
if (value.charCodeAt(index) <= largestRepairedCodeUnit) return true
|
|
36
|
+
}
|
|
37
|
+
return false
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const isAbsoluteHttpUrl = (value: string): boolean => {
|
|
41
|
+
// `new URL` alone is not a validator here. It strips padding and inline
|
|
42
|
+
// control characters before parsing, so it reports a copy-pasted
|
|
43
|
+
// `"http://collector:4318\n"` as well formed while the untrimmed original is
|
|
44
|
+
// what a builder would hand its exporter: either an unusable URL or a
|
|
45
|
+
// request to a host nobody typed. No legal collector endpoint carries one of
|
|
46
|
+
// these, so refusing them costs nothing and closes the silent case.
|
|
47
|
+
if (repairedByUrlParser(value)) return false
|
|
48
|
+
// Exporters append /v1/<signal> to this base. A query or fragment would
|
|
49
|
+
// swallow that suffix instead of changing the request path. Also refuse
|
|
50
|
+
// missing authority separators and backslashes that WHATWG silently repairs.
|
|
51
|
+
if (!/^https?:\/\/[^/]/i.test(value) || /[?#\\]/.test(value)) return false
|
|
52
|
+
let url: URL
|
|
53
|
+
try {
|
|
54
|
+
url = new URL(value)
|
|
55
|
+
} catch {
|
|
56
|
+
return false
|
|
57
|
+
}
|
|
58
|
+
return url.username === "" && url.password === ""
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Runtime schema for an absolute `http:` or `https:` collector endpoint that
|
|
63
|
+
* carries no credentials, query, fragment, backslashes, spaces, or controls.
|
|
64
|
+
* A base path is allowed; authentication belongs in exporter headers.
|
|
65
|
+
*
|
|
66
|
+
* @category schemas
|
|
67
|
+
* @since 1.0.0-rc.0
|
|
68
|
+
*/
|
|
69
|
+
export const Endpoint = Schema.String.check(
|
|
70
|
+
Schema.isMaxLength(maximumEndpointLength),
|
|
71
|
+
Schema.makeFilter((value: string) => isAbsoluteHttpUrl(value), { title: "absoluteCollectorEndpoint" })
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Stable exporter-endpoint refusal shared by every OTLP builder.
|
|
76
|
+
*
|
|
77
|
+
* @category errors
|
|
78
|
+
* @since 1.0.0-rc.0
|
|
79
|
+
*/
|
|
80
|
+
export class InvalidExporterEndpoint extends Schema.TaggedError<InvalidExporterEndpoint>()(
|
|
81
|
+
"@smthrs/observability/InvalidExporterEndpoint",
|
|
82
|
+
{
|
|
83
|
+
code: Schema.Literal("invalid_exporter_endpoint"),
|
|
84
|
+
path: Schema.String,
|
|
85
|
+
message: Schema.String
|
|
86
|
+
}
|
|
87
|
+
) {}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Removes the repeated trailing separators that would otherwise produce a
|
|
91
|
+
* double slash in a signal URL.
|
|
92
|
+
*
|
|
93
|
+
* @category conversions
|
|
94
|
+
* @since 1.0.0-rc.0
|
|
95
|
+
*/
|
|
96
|
+
export const normalize = (endpoint: string): string => endpoint.replace(/\/+$/, "")
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Decodes one collector endpoint into its normalized form without retaining
|
|
100
|
+
* the rejected value.
|
|
101
|
+
*
|
|
102
|
+
* `path` names the option the endpoint arrived on, so the refusal points at the
|
|
103
|
+
* caller's own field rather than at a shared internal name.
|
|
104
|
+
*
|
|
105
|
+
* @category decoding
|
|
106
|
+
* @since 1.0.0-rc.0
|
|
107
|
+
*/
|
|
108
|
+
export const decode = (
|
|
109
|
+
endpoint: unknown,
|
|
110
|
+
path: string
|
|
111
|
+
): Effect.Effect<string, InvalidExporterEndpoint> =>
|
|
112
|
+
Schema.decodeUnknownEffect(Endpoint)(endpoint).pipe(
|
|
113
|
+
Effect.map(normalize),
|
|
114
|
+
Effect.mapError(() =>
|
|
115
|
+
new InvalidExporterEndpoint({
|
|
116
|
+
code: "invalid_exporter_endpoint",
|
|
117
|
+
path,
|
|
118
|
+
message:
|
|
119
|
+
`OTLP collector ${path} must be an absolute http:// or https:// base URL without credentials, query, fragment, backslashes, spaces, or control characters`
|
|
120
|
+
})
|
|
121
|
+
)
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Builds the OTLP/HTTP URL one signal is posted to below a decoded endpoint.
|
|
126
|
+
*
|
|
127
|
+
* @category conversions
|
|
128
|
+
* @since 1.0.0-rc.0
|
|
129
|
+
*/
|
|
130
|
+
export const signalUrl = (endpoint: string, signal: "traces" | "metrics" | "logs"): string =>
|
|
131
|
+
`${normalize(endpoint)}/v1/${signal}`
|