@effect/opentelemetry 4.0.0-beta.66 → 4.0.0-beta.67

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@effect/opentelemetry",
3
3
  "type": "module",
4
- "version": "4.0.0-beta.66",
4
+ "version": "4.0.0-beta.67",
5
5
  "license": "MIT",
6
6
  "description": "OpenTelemetry integration for Effect",
7
7
  "homepage": "https://effect.website",
@@ -63,7 +63,7 @@
63
63
  "@opentelemetry/sdk-trace-node": "^2.0.0",
64
64
  "@opentelemetry/sdk-trace-web": "^2.0.0",
65
65
  "@opentelemetry/semantic-conventions": "^1.33.0",
66
- "effect": "^4.0.0-beta.66"
66
+ "effect": "^4.0.0-beta.67"
67
67
  },
68
68
  "peerDependenciesMeta": {
69
69
  "@opentelemetry/api": {
@@ -93,18 +93,18 @@
93
93
  },
94
94
  "devDependencies": {
95
95
  "@opentelemetry/api": "^1.9.1",
96
- "@opentelemetry/api-logs": "^0.214.0",
97
- "@opentelemetry/context-async-hooks": "^2.6.1",
98
- "@opentelemetry/exporter-metrics-otlp-http": "0.214.0",
99
- "@opentelemetry/exporter-prometheus": "^0.214.0",
100
- "@opentelemetry/exporter-trace-otlp-http": "^0.214.0",
101
- "@opentelemetry/otlp-exporter-base": "^0.214.0",
102
- "@opentelemetry/resources": "^2.6.1",
103
- "@opentelemetry/sdk-logs": "^0.214.0",
104
- "@opentelemetry/sdk-metrics": "^2.6.1",
105
- "@opentelemetry/sdk-trace-base": "^2.6.1",
106
- "@opentelemetry/sdk-trace-node": "^2.6.1",
107
- "@opentelemetry/sdk-trace-web": "^2.6.1",
96
+ "@opentelemetry/api-logs": "^0.217.0",
97
+ "@opentelemetry/context-async-hooks": "^2.7.1",
98
+ "@opentelemetry/exporter-metrics-otlp-http": "0.217.0",
99
+ "@opentelemetry/exporter-prometheus": "^0.217.0",
100
+ "@opentelemetry/exporter-trace-otlp-http": "^0.217.0",
101
+ "@opentelemetry/otlp-exporter-base": "^0.217.0",
102
+ "@opentelemetry/resources": "^2.7.1",
103
+ "@opentelemetry/sdk-logs": "^0.217.0",
104
+ "@opentelemetry/sdk-metrics": "^2.7.1",
105
+ "@opentelemetry/sdk-trace-base": "^2.7.1",
106
+ "@opentelemetry/sdk-trace-node": "^2.7.1",
107
+ "@opentelemetry/sdk-trace-web": "^2.7.1",
108
108
  "@opentelemetry/semantic-conventions": "^1.40.0"
109
109
  },
110
110
  "scripts": {
package/src/Logger.ts CHANGED
@@ -1,5 +1,26 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Connects Effect's logging system to the OpenTelemetry Logs SDK.
3
+ *
4
+ * This module provides a logger provider service, an Effect `Logger` that
5
+ * emits OpenTelemetry log records, and layers for installing that logger in an
6
+ * application. It is commonly used to send Effect logs to OTLP, console, or
7
+ * vendor-specific exporters through OpenTelemetry `LogRecordProcessor`s while
8
+ * keeping logs correlated with Effect fibers and spans. Emitted records include
9
+ * the current fiber id, span identifiers when a parent span is present, log
10
+ * annotations, log spans, severity text, and the matching OpenTelemetry
11
+ * severity number.
12
+ *
13
+ * Log export depends on the configured OpenTelemetry processors and exporters;
14
+ * this module creates the provider and logger, but does not choose an exporter.
15
+ * Use the `Resource` layer to attach service and deployment metadata to the
16
+ * provider rather than repeating that data on every log record. When using
17
+ * `layerLoggerProvider`, the provider is scoped and is force-flushed and shut
18
+ * down when the layer is released, with a configurable shutdown timeout. If you
19
+ * supply or manage an OpenTelemetry provider yourself, make sure it is flushed
20
+ * and shut down during application shutdown, especially when using batching
21
+ * processors that may otherwise drop buffered logs.
22
+ *
23
+ * @since 4.0.0
3
24
  */
4
25
  import { SeverityNumber } from "@opentelemetry/api-logs"
5
26
  import * as Otel from "@opentelemetry/sdk-logs"
@@ -19,8 +40,10 @@ import { nanosToHrTime, unknownToAttributeValue } from "./internal/attributes.ts
19
40
  import { Resource } from "./Resource.ts"
20
41
 
21
42
  /**
22
- * @since 1.0.0
43
+ * Context service containing the OpenTelemetry `LoggerProvider` used to emit Effect log records.
44
+ *
23
45
  * @category Services
46
+ * @since 4.0.0
24
47
  */
25
48
  export class OtelLoggerProvider extends Context.Service<
26
49
  OtelLoggerProvider,
@@ -35,8 +58,8 @@ export class OtelLoggerProvider extends Context.Service<
35
58
  * (e.g. Info=20000), which falls outside the OTel spec — backends that
36
59
  * validate the field map such values to `UNSPECIFIED`.
37
60
  *
38
- * @since 1.0.0
39
61
  * @category Conversions
62
+ * @since 4.0.0
40
63
  */
41
64
  export const logLevelToSeverityNumber = (level: LogLevel.LogLevel): SeverityNumber => {
42
65
  switch (level) {
@@ -58,8 +81,10 @@ export const logLevelToSeverityNumber = (level: LogLevel.LogLevel): SeverityNumb
58
81
  }
59
82
 
60
83
  /**
61
- * @since 1.0.0
84
+ * Creates an Effect logger that emits log records through the configured OpenTelemetry logger provider.
85
+ *
62
86
  * @category Constructors
87
+ * @since 4.0.0
63
88
  */
64
89
  export const make: Effect.Effect<
65
90
  Logger.Logger<unknown, void>,
@@ -104,8 +129,10 @@ export const make: Effect.Effect<
104
129
  })
105
130
 
106
131
  /**
107
- * @since 1.0.0
132
+ * Creates a layer that installs the OpenTelemetry-backed Effect logger, merging with existing loggers by default.
133
+ *
108
134
  * @category Layers
135
+ * @since 4.0.0
109
136
  */
110
137
  export const layer = (options: {
111
138
  /**
@@ -124,8 +151,10 @@ export const layer = (options: {
124
151
  })
125
152
 
126
153
  /**
127
- * @since 1.0.0
154
+ * Creates a scoped OpenTelemetry logger provider from one or more log record processors, using the current `Resource` and flushing and shutting down the provider when the layer is released.
155
+ *
128
156
  * @category Layers
157
+ * @since 4.0.0
129
158
  */
130
159
  export const layerLoggerProvider = (
131
160
  processor: Otel.LogRecordProcessor | NonEmptyReadonlyArray<Otel.LogRecordProcessor>,
package/src/Metrics.ts CHANGED
@@ -1,5 +1,21 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Bridges Effect metrics into OpenTelemetry by exposing the current Effect
3
+ * metric snapshot as an OpenTelemetry `MetricProducer` and registering it with
4
+ * one or more SDK `MetricReader`s. Use this module when an application already
5
+ * records metrics with Effect and needs those counters, gauges, histograms,
6
+ * frequencies, or summaries exported through OTLP, Prometheus, or another
7
+ * OpenTelemetry-compatible reader/exporter.
8
+ *
9
+ * The `layer` constructor is the usual entry point, and is also used by the
10
+ * Node and Web SDK layers when `metricReader` configuration is supplied. Metric
11
+ * readers are acquired inside the layer scope and shut down when the scope is
12
+ * released, so periodic exporters need the runtime to stay alive long enough to
13
+ * collect and export data. The exporter or backend determines whether
14
+ * cumulative or delta aggregation is expected; this module defaults to
15
+ * cumulative temporality and can be configured with `temporality: "delta"` for
16
+ * backends that require interval-based values.
17
+ *
18
+ * @since 4.0.0
3
19
  */
4
20
  import type { MetricProducer, MetricReader } from "@opentelemetry/sdk-metrics"
5
21
  import type * as Arr from "effect/Array"
@@ -21,16 +37,16 @@ import { Resource } from "./Resource.ts"
21
37
  * - `delta`: Reports changes since the last export. Each interval is
22
38
  * independent with no dependency on previous measurements.
23
39
  *
24
- * @since 1.0.0
25
40
  * @category Models
41
+ * @since 4.0.0
26
42
  */
27
43
  export type TemporalityPreference = "cumulative" | "delta"
28
44
 
29
45
  /**
30
46
  * Creates an OpenTelemetry metric producer from Effect metrics.
31
47
  *
32
- * @since 1.0.0
33
48
  * @category Constructors
49
+ * @since 4.0.0
34
50
  */
35
51
  export const makeProducer = (temporality?: TemporalityPreference): Effect.Effect<MetricProducer, never, Resource> =>
36
52
  Effect.gen(function*() {
@@ -42,8 +58,8 @@ export const makeProducer = (temporality?: TemporalityPreference): Effect.Effect
42
58
  /**
43
59
  * Registers a metric producer with one or more metric readers.
44
60
  *
45
- * @since 1.0.0
46
61
  * @category Constructors
62
+ * @since 4.0.0
47
63
  */
48
64
  export const registerProducer = (
49
65
  self: MetricProducer,
@@ -74,7 +90,8 @@ export const registerProducer = (
74
90
  /**
75
91
  * Creates a Layer that registers a metric producer with metric readers.
76
92
  *
77
- * @example
93
+ * **Example** (Creating a metrics layer with temporality)
94
+ *
78
95
  * ```ts
79
96
  * import { Metrics } from "@effect/opentelemetry"
80
97
  * import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics"
@@ -98,8 +115,8 @@ export const registerProducer = (
98
115
  * )
99
116
  * ```
100
117
  *
101
- * @since 1.0.0
102
118
  * @category Layers
119
+ * @since 4.0.0
103
120
  */
104
121
  export const layer = (
105
122
  evaluate: LazyArg<MetricReader | Arr.NonEmptyReadonlyArray<MetricReader>>,
package/src/NodeSdk.ts CHANGED
@@ -1,5 +1,27 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Provides an Effect layer for configuring OpenTelemetry in Node.js
3
+ * processes. The module wires the Effect tracer, metrics producer, and logger
4
+ * into OpenTelemetry SDK providers when span processors, metric readers, or log
5
+ * record processors are supplied, and it builds the shared resource from
6
+ * `OTEL_SERVICE_NAME`, `OTEL_RESOURCE_ATTRIBUTES`, and optional explicit
7
+ * service metadata.
8
+ *
9
+ * Use this module in Node services, workers, CLIs, or server runtimes that need
10
+ * Effect spans, metrics, and logs exported through OpenTelemetry processors and
11
+ * exporters. Telemetry is enabled only for the configured signal types, so an
12
+ * application can install tracing alone, metrics alone, logging alone, or any
13
+ * combination of them from the same layer.
14
+ *
15
+ * The layer is scoped. Tracer and logger providers are force-flushed and shut
16
+ * down when the scope is released, metric readers are shut down with the same
17
+ * lifecycle, and all shutdown waits are bounded by `shutdownTimeout` with a
18
+ * default of three seconds. Keep the layer scope alive for the lifetime of the
19
+ * process and release it during graceful shutdown so batched exporters have a
20
+ * chance to export final telemetry. When combining this layer with Node
21
+ * auto-instrumentations, register instrumentation before importing modules that
22
+ * should be patched, because many Node instrumentations hook module loading.
23
+ *
24
+ * @since 4.0.0
3
25
  */
4
26
  import type * as Otel from "@opentelemetry/api"
5
27
  import type { LoggerProviderConfig, LogRecordProcessor } from "@opentelemetry/sdk-logs"
@@ -18,8 +40,10 @@ import * as Resource from "./Resource.ts"
18
40
  import * as Tracer from "./Tracer.ts"
19
41
 
20
42
  /**
21
- * @since 1.0.0
43
+ * Configuration for the Node OpenTelemetry layer, including optional tracing, metrics, logging, resource, and shutdown settings.
44
+ *
22
45
  * @category Models
46
+ * @since 4.0.0
23
47
  */
24
48
  export interface Configuration {
25
49
  readonly spanProcessor?: SpanProcessor | ReadonlyArray<SpanProcessor> | undefined
@@ -38,8 +62,10 @@ export interface Configuration {
38
62
  }
39
63
 
40
64
  /**
41
- * @since 1.0.0
65
+ * Creates a scoped Node OpenTelemetry tracer provider from one or more span processors and shuts it down when the layer is released.
66
+ *
42
67
  * @category Layers
68
+ * @since 4.0.0
43
69
  */
44
70
  export const layerTracerProvider = (
45
71
  processor: SpanProcessor | NonEmptyReadonlyArray<SpanProcessor>,
@@ -71,18 +97,24 @@ export const layerTracerProvider = (
71
97
  )
72
98
 
73
99
  /**
74
- * @since 1.0.0
100
+ * Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
101
+ *
75
102
  * @category Layers
103
+ * @since 4.0.0
76
104
  */
77
105
  export const layer: {
78
106
  /**
79
- * @since 1.0.0
107
+ * Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
108
+ *
80
109
  * @category Layers
110
+ * @since 4.0.0
81
111
  */
82
112
  (evaluate: LazyArg<Configuration>): Layer.Layer<Resource.Resource>
83
113
  /**
84
- * @since 1.0.0
114
+ * Creates a Node OpenTelemetry layer from configuration, enabling tracing, metrics, and logging only when their processors or readers are supplied.
115
+ *
85
116
  * @category Layers
117
+ * @since 4.0.0
86
118
  */
87
119
  <R, E>(evaluate: Effect.Effect<Configuration, E, R>): Layer.Layer<Resource.Resource, E, R>
88
120
  } = (
@@ -130,7 +162,9 @@ export const layer: {
130
162
  )
131
163
 
132
164
  /**
133
- * @since 2.0.0
165
+ * Layer that provides an empty OpenTelemetry `Resource`.
166
+ *
134
167
  * @category layer
168
+ * @since 2.0.0
135
169
  */
136
170
  export const layerEmpty: Layer.Layer<Resource.Resource> = Resource.layerEmpty
package/src/Resource.ts CHANGED
@@ -1,5 +1,22 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Provides the OpenTelemetry resource used by the Effect OpenTelemetry layers.
3
+ *
4
+ * A resource describes the entity that produces telemetry, such as a service,
5
+ * process, deployment, or browser application. The tracing, metrics, logging,
6
+ * and SDK layers use this module's `Resource` service to configure providers
7
+ * and identify emitted telemetry with service-level metadata.
8
+ *
9
+ * Use `layer` when service metadata is known in code, `layerFromEnv` when
10
+ * deploying with `OTEL_SERVICE_NAME` and `OTEL_RESOURCE_ATTRIBUTES`, and
11
+ * `layerEmpty` when no resource attributes should be provided. Resource
12
+ * attributes are for stable process or service metadata, not per-span or
13
+ * per-log data. The explicit `layer` helper sets `service.name` and the
14
+ * `telemetry.sdk.*` attributes after merging custom attributes, so those keys
15
+ * are controlled by this integration. With `layerFromEnv`, `OTEL_SERVICE_NAME`
16
+ * overrides `service.name` from `OTEL_RESOURCE_ATTRIBUTES`, and additional
17
+ * attributes passed to the layer are merged last.
18
+ *
19
+ * @since 4.0.0
3
20
  */
4
21
  import type * as OtelApi from "@opentelemetry/api"
5
22
  import * as Resources from "@opentelemetry/resources"
@@ -11,8 +28,10 @@ import * as Effect from "effect/Effect"
11
28
  import * as Layer from "effect/Layer"
12
29
 
13
30
  /**
14
- * @since 1.0.0
31
+ * Context service containing the OpenTelemetry `Resource` associated with emitted telemetry.
32
+ *
15
33
  * @category Services
34
+ * @since 4.0.0
16
35
  */
17
36
  export class Resource extends Context.Service<
18
37
  Resource,
@@ -20,8 +39,10 @@ export class Resource extends Context.Service<
20
39
  >()("@effect/opentelemetry/Resource") {}
21
40
 
22
41
  /**
23
- * @since 1.0.0
42
+ * Creates a `Resource` layer from service metadata and additional OpenTelemetry attributes.
43
+ *
24
44
  * @category Layers
45
+ * @since 4.0.0
25
46
  */
26
47
  export const layer = (config: {
27
48
  readonly serviceName: string
@@ -34,8 +55,10 @@ export const layer = (config: {
34
55
  )
35
56
 
36
57
  /**
37
- * @since 1.0.0
58
+ * Converts resource configuration into OpenTelemetry attributes, adding service name, optional service version, and telemetry SDK metadata.
59
+ *
38
60
  * @category Configuration
61
+ * @since 4.0.0
39
62
  */
40
63
  export const configToAttributes = (options: {
41
64
  readonly serviceName: string
@@ -57,8 +80,10 @@ export const configToAttributes = (options: {
57
80
  }
58
81
 
59
82
  /**
60
- * @since 1.0.0
83
+ * Creates a `Resource` layer from OpenTelemetry environment variables, optionally merging additional attributes.
84
+ *
61
85
  * @category Layers
86
+ * @since 4.0.0
62
87
  */
63
88
  export const layerFromEnv = (
64
89
  additionalAttributes?:
@@ -94,8 +119,10 @@ export const layerFromEnv = (
94
119
  )
95
120
 
96
121
  /**
97
- * @since 1.0.0
122
+ * Layer that provides an empty OpenTelemetry resource.
123
+ *
98
124
  * @category Layers
125
+ * @since 4.0.0
99
126
  */
100
127
  export const layerEmpty = Layer.succeed(
101
128
  Resource,
package/src/Tracer.ts CHANGED
@@ -1,5 +1,22 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Bridges Effect tracing into OpenTelemetry by installing an Effect `Tracer`
3
+ * that creates OpenTelemetry spans, records attributes, events, links, errors,
4
+ * and status, and keeps OpenTelemetry context active while traced effects run.
5
+ * Use this module when an application already has an OpenTelemetry
6
+ * `TracerProvider`, or when the Node and Web SDK layers should expose Effect
7
+ * spans to OTLP, console, or other OpenTelemetry-compatible exporters.
8
+ *
9
+ * The layer constructors wire Effect's tracer service to either the global
10
+ * OpenTelemetry tracer provider or an explicitly provided `OtelTracer`. This
11
+ * module does not create exporters or span processors by itself, so spans are
12
+ * exported only when the provider has been configured by the application or by
13
+ * the Node/Web SDK layers. Parentage is taken from Effect spans first and can
14
+ * also attach to the active OpenTelemetry context, while `makeExternalSpan` and
15
+ * `withSpanContext` are the entry points for continuing an incoming remote
16
+ * trace. Preserve `traceFlags` and `traceState` when building external spans;
17
+ * otherwise sampling defaults to sampled and trace state cannot be propagated.
18
+ *
19
+ * @since 4.0.0
3
20
  */
4
21
  import * as Otel from "@opentelemetry/api"
5
22
  import * as OtelSemConv from "@opentelemetry/semantic-conventions"
@@ -21,8 +38,10 @@ import { Resource } from "./Resource.ts"
21
38
  // =============================================================================
22
39
 
23
40
  /**
24
- * @since 1.0.0
41
+ * Context service containing the OpenTelemetry `Tracer` used to create spans for Effect tracing.
42
+ *
25
43
  * @category Services
44
+ * @since 4.0.0
26
45
  */
27
46
  export class OtelTracer extends Context.Service<
28
47
  OtelTracer,
@@ -30,8 +49,10 @@ export class OtelTracer extends Context.Service<
30
49
  >()("@effect/opentelemetry/Tracer") {}
31
50
 
32
51
  /**
33
- * @since 1.0.0
52
+ * Context service containing the OpenTelemetry `TracerProvider` used to obtain tracers.
53
+ *
34
54
  * @category Services
55
+ * @since 4.0.0
35
56
  */
36
57
  export class OtelTracerProvider extends Context.Service<
37
58
  OtelTracerProvider,
@@ -39,8 +60,10 @@ export class OtelTracerProvider extends Context.Service<
39
60
  >()("@effect/opentelemetry/Tracer/OtelTracerProvider") {}
40
61
 
41
62
  /**
42
- * @since 1.0.0
63
+ * Context service containing OpenTelemetry trace flags used when constructing external span contexts.
64
+ *
43
65
  * @category Services
66
+ * @since 4.0.0
44
67
  */
45
68
  export class OtelTraceFlags extends Context.Service<
46
69
  OtelTraceFlags,
@@ -48,8 +71,10 @@ export class OtelTraceFlags extends Context.Service<
48
71
  >()("@effect/opentelemetry/Tracer/OtelTraceFlags") {}
49
72
 
50
73
  /**
51
- * @since 1.0.0
74
+ * Context service containing OpenTelemetry trace state used when constructing external span contexts.
75
+ *
52
76
  * @category Services
77
+ * @since 4.0.0
53
78
  */
54
79
  export class OtelTraceState extends Context.Service<
55
80
  OtelTraceState,
@@ -61,8 +86,10 @@ export class OtelTraceState extends Context.Service<
61
86
  // =============================================================================
62
87
 
63
88
  /**
64
- * @since 1.0.0
89
+ * Creates an Effect `Tracer` implementation backed by the configured OpenTelemetry tracer.
90
+ *
65
91
  * @category Constructors
92
+ * @since 4.0.0
66
93
  */
67
94
  export const make: Effect.Effect<Tracer.Tracer, never, OtelTracer> = Effect.map(
68
95
  Effect.service(OtelTracer),
@@ -92,8 +119,10 @@ export const make: Effect.Effect<Tracer.Tracer, never, OtelTracer> = Effect.map(
92
119
  )
93
120
 
94
121
  /**
95
- * @since 1.0.0
122
+ * Creates an Effect external span from an OpenTelemetry span context, preserving trace flags and trace state when provided.
123
+ *
96
124
  * @category Constructors
125
+ * @since 4.0.0
97
126
  */
98
127
  export const makeExternalSpan = (options: {
99
128
  readonly traceId: string
@@ -134,8 +163,10 @@ export const makeExternalSpan = (options: {
134
163
  // =============================================================================
135
164
 
136
165
  /**
137
- * @since 1.0.0
166
+ * Layer that provides the current global OpenTelemetry tracer provider.
167
+ *
138
168
  * @category Layers
169
+ * @since 4.0.0
139
170
  */
140
171
  export const layerGlobalProvider: Layer.Layer<OtelTracerProvider> = Layer.sync(
141
172
  OtelTracerProvider,
@@ -143,8 +174,10 @@ export const layerGlobalProvider: Layer.Layer<OtelTracerProvider> = Layer.sync(
143
174
  )
144
175
 
145
176
  /**
146
- * @since 1.0.0
177
+ * Layer that creates an OpenTelemetry tracer from the provided tracer provider and resource metadata.
178
+ *
147
179
  * @category Layers
180
+ * @since 4.0.0
148
181
  */
149
182
  export const layerTracer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Resource> = Layer.effect(
150
183
  OtelTracer,
@@ -159,30 +192,38 @@ export const layerTracer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Re
159
192
  )
160
193
 
161
194
  /**
162
- * @since 1.0.0
195
+ * Layer that creates an OpenTelemetry tracer from the global tracer provider and the current resource.
196
+ *
163
197
  * @category Layers
198
+ * @since 4.0.0
164
199
  */
165
200
  export const layerGlobalTracer: Layer.Layer<OtelTracer, never, Resource> = layerTracer.pipe(
166
201
  Layer.provide(layerGlobalProvider)
167
202
  )
168
203
 
169
204
  /**
170
- * @since 1.0.0
205
+ * Layer that installs an Effect tracer backed by the global OpenTelemetry tracer provider.
206
+ *
171
207
  * @category Layers
208
+ * @since 4.0.0
172
209
  */
173
210
  export const layerGlobal: Layer.Layer<OtelTracer, never, Resource> = Layer.effect(Tracer.Tracer, make).pipe(
174
211
  Layer.provideMerge(layerGlobalTracer)
175
212
  )
176
213
 
177
214
  /**
178
- * @since 1.0.0
215
+ * Layer that installs the Effect tracer using an `OtelTracer` already provided in the environment.
216
+ *
179
217
  * @category Layers
218
+ * @since 4.0.0
180
219
  */
181
220
  export const layerWithoutOtelTracer: Layer.Layer<never, never, OtelTracer> = Layer.effect(Tracer.Tracer, make)
182
221
 
183
222
  /**
184
- * @since 1.0.0
223
+ * Layer that creates an OpenTelemetry tracer from a provider and resource, then installs it as the Effect tracer.
224
+ *
185
225
  * @category Layers
226
+ * @since 4.0.0
186
227
  */
187
228
  export const layer: Layer.Layer<OtelTracer, never, OtelTracerProvider | Resource> = layerWithoutOtelTracer.pipe(
188
229
  Layer.provideMerge(layerTracer)
@@ -204,8 +245,8 @@ const bigint1e9 = BigInt(1_000_000_000)
204
245
  * When using OTLP, the returned span is a wrapper that conforms to the
205
246
  * OpenTelemetry `Span` interface.
206
247
  *
207
- * @since 1.0.0
208
248
  * @category accessors
249
+ * @since 4.0.0
209
250
  */
210
251
  export const currentOtelSpan: Effect.Effect<Otel.Span, Cause.NoSuchElementError> = Effect.clockWith((clock) =>
211
252
  Effect.map(Effect.currentSpan, (span) =>
@@ -307,8 +348,8 @@ const convertOtelTimeInput = (input: Otel.TimeInput | undefined, clock: Clock.Cl
307
348
  * This is handy when you set up OpenTelemetry outside of Effect and want to
308
349
  * attach to a parent span.
309
350
  *
310
- * @since 1.0.0
311
351
  * @category Propagation
352
+ * @since 4.0.0
312
353
  */
313
354
  export const withSpanContext: {
314
355
  /**
@@ -317,8 +358,8 @@ export const withSpanContext: {
317
358
  * This is handy when you set up OpenTelemetry outside of Effect and want to
318
359
  * attach to a parent span.
319
360
  *
320
- * @since 1.0.0
321
361
  * @category Propagation
362
+ * @since 4.0.0
322
363
  */
323
364
  (spanContext: Otel.SpanContext): <A, E, R>(
324
365
  self: Effect.Effect<A, E, R>
@@ -329,8 +370,8 @@ export const withSpanContext: {
329
370
  * This is handy when you set up OpenTelemetry outside of Effect and want to
330
371
  * attach to a parent span.
331
372
  *
332
- * @since 1.0.0
333
373
  * @category Propagation
374
+ * @since 4.0.0
334
375
  */
335
376
  <A, E, R>(self: Effect.Effect<A, E, R>, spanContext: Otel.SpanContext): Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>
336
377
  } = dual(2, <A, E, R>(
package/src/WebSdk.ts CHANGED
@@ -1,5 +1,31 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Provides an Effect layer for configuring OpenTelemetry in browser
3
+ * applications. The module builds a shared resource from explicit service
4
+ * metadata and wires Effect tracing, metrics, and logging into OpenTelemetry
5
+ * SDK providers when span processors, metric readers, or log record processors
6
+ * are supplied.
7
+ *
8
+ * Use this module in client-side applications that need Effect spans, metrics,
9
+ * and logs exported from browser runtimes, such as single-page apps,
10
+ * multi-page apps with hydrated Effect code, frontend workers, or UI flows
11
+ * that should be correlated with backend traces. Telemetry is enabled only for
12
+ * the configured signal types, so tracing, metrics, and logging can be
13
+ * installed independently from the same layer.
14
+ *
15
+ * Browser SDKs cannot rely on process environment resource configuration, so
16
+ * provide stable service metadata explicitly and use resource attributes for
17
+ * application, release, deployment, or page-shell identity rather than
18
+ * per-event data. This module does not create exporters; supply
19
+ * browser-compatible processors, readers, and exporters yourself, and make sure
20
+ * their endpoints are reachable from the browser with the required CORS and
21
+ * authentication behavior. The layer is scoped: tracer providers are
22
+ * force-flushed and shut down when the scope is released, while metric readers
23
+ * and logger providers follow their respective layer lifecycles. Keep the
24
+ * scope alive for the lifetime of the browser application and release it during
25
+ * application teardown when possible so batched exporters and periodic metric
26
+ * readers can deliver buffered telemetry before the page is unloaded.
27
+ *
28
+ * @since 4.0.0
3
29
  */
4
30
  import type * as Otel from "@opentelemetry/api"
5
31
  import type { LoggerProviderConfig, LogRecordProcessor } from "@opentelemetry/sdk-logs"
@@ -17,8 +43,10 @@ import * as Resource from "./Resource.ts"
17
43
  import * as Tracer from "./Tracer.ts"
18
44
 
19
45
  /**
20
- * @since 1.0.0
46
+ * Configuration for the Web OpenTelemetry layer, including resource metadata and optional tracing, metrics, and logging settings.
47
+ *
21
48
  * @category Models
49
+ * @since 4.0.0
22
50
  */
23
51
  export interface Configuration {
24
52
  readonly spanProcessor?: SpanProcessor | ReadonlyArray<SpanProcessor> | undefined
@@ -36,8 +64,10 @@ export interface Configuration {
36
64
  }
37
65
 
38
66
  /**
39
- * @since 1.0.0
67
+ * Creates a scoped Web OpenTelemetry tracer provider from one or more span processors and shuts it down when the layer is released.
68
+ *
40
69
  * @category Layers
70
+ * @since 4.0.0
41
71
  */
42
72
  export const layerTracerProvider = (
43
73
  processor: SpanProcessor | NonEmptyReadonlyArray<SpanProcessor>,
@@ -65,18 +95,24 @@ export const layerTracerProvider = (
65
95
  )
66
96
 
67
97
  /**
68
- * @since 1.0.0
98
+ * Creates a Web OpenTelemetry layer from configuration, providing the resource and enabling tracing, metrics, and logging when configured.
99
+ *
69
100
  * @category Layers
101
+ * @since 4.0.0
70
102
  */
71
103
  export const layer: {
72
104
  /**
73
- * @since 1.0.0
105
+ * Creates a Web OpenTelemetry layer from configuration, providing the resource and enabling tracing, metrics, and logging when configured.
106
+ *
74
107
  * @category Layers
108
+ * @since 4.0.0
75
109
  */
76
110
  (evaluate: LazyArg<Configuration>): Layer.Layer<Resource.Resource>
77
111
  /**
78
- * @since 1.0.0
112
+ * Creates a Web OpenTelemetry layer from configuration, providing the resource and enabling tracing, metrics, and logging when configured.
113
+ *
79
114
  * @category Layers
115
+ * @since 4.0.0
80
116
  */
81
117
  <E, R>(evaluate: Effect.Effect<Configuration, E, R>): Layer.Layer<Resource.Resource, E, R>
82
118
  } = (