@atrim/instrument-node 0.7.1-dev.14fdea7.20260108231415 → 0.7.1-dev.14fdea7.20260108232056

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.
@@ -80,6 +80,53 @@ declare const createEffectTracingLayer: () => Layer.Layer<never>;
80
80
  * ```
81
81
  */
82
82
  declare const EffectTracingLive: Layer.Layer<never>;
83
+ /**
84
+ * Create a combined layer that provides both:
85
+ * 1. Effect-native HTTP tracing (via NodeSdk.layer)
86
+ * 2. Fiber-level auto-tracing (via Supervisor)
87
+ *
88
+ * This gives you automatic spans for:
89
+ * - Every HTTP request (from Effect's platform middleware)
90
+ * - Every forked fiber (from our Supervisor)
91
+ *
92
+ * No manual Effect.withSpan() calls needed.
93
+ */
94
+ declare const createCombinedTracingLayer: () => Layer.Layer<never>;
95
+ /**
96
+ * Combined tracing layer providing both HTTP and fiber-level auto-tracing
97
+ *
98
+ * This is the **most comprehensive** tracing option. You get automatic spans for:
99
+ * - Every HTTP request (from Effect's @effect/platform middleware)
100
+ * - Every forked fiber (from our Supervisor)
101
+ *
102
+ * No manual Effect.withSpan() calls needed - everything is traced automatically.
103
+ *
104
+ * @example
105
+ * ```yaml
106
+ * # instrumentation.yaml
107
+ * effect:
108
+ * auto_instrumentation:
109
+ * enabled: true
110
+ * granularity: fiber
111
+ * exporter_config:
112
+ * type: otlp
113
+ * endpoint: http://localhost:4318
114
+ * ```
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * import { CombinedTracingLive } from '@atrim/instrument-node/effect/auto'
119
+ *
120
+ * const HttpLive = router.pipe(
121
+ * HttpServer.serve(),
122
+ * Layer.provide(ServerLive),
123
+ * Layer.provide(CombinedTracingLive),
124
+ * )
125
+ *
126
+ * // Both HTTP requests AND forked fibers are auto-traced!
127
+ * ```
128
+ */
129
+ declare const CombinedTracingLive: Layer.Layer<never>;
83
130
 
84
131
  /**
85
132
  * Auto-Tracing Supervisor for Effect-TS
@@ -434,4 +481,4 @@ declare function inferSpanName(fiberId: number, sourceInfo: SourceInfo | undefin
434
481
  */
435
482
  declare function sanitizeSpanName(name: string): string;
436
483
 
437
- export { AutoTracingConfig, AutoTracingConfigLayer, AutoTracingConfigLive, AutoTracingEnabled, AutoTracingLive, AutoTracingSpanName, AutoTracingSupervisor, EffectTracingLive, FullAutoTracingLive, type SourceInfo, type TemplateVariables, createAutoTracingLayer, createAutoTracingSupervisor, createEffectTracingLayer, createFullAutoTracingLayer, defaultAutoTracingConfig, inferSpanName, loadAutoTracingConfig, loadAutoTracingConfigSync, sanitizeSpanName, setSpanName, withAutoTracing, withoutAutoTracing };
484
+ export { AutoTracingConfig, AutoTracingConfigLayer, AutoTracingConfigLive, AutoTracingEnabled, AutoTracingLive, AutoTracingSpanName, AutoTracingSupervisor, CombinedTracingLive, EffectTracingLive, FullAutoTracingLive, type SourceInfo, type TemplateVariables, createAutoTracingLayer, createAutoTracingSupervisor, createCombinedTracingLayer, createEffectTracingLayer, createFullAutoTracingLayer, defaultAutoTracingConfig, inferSpanName, loadAutoTracingConfig, loadAutoTracingConfigSync, sanitizeSpanName, setSpanName, withAutoTracing, withoutAutoTracing };
@@ -80,6 +80,53 @@ declare const createEffectTracingLayer: () => Layer.Layer<never>;
80
80
  * ```
81
81
  */
82
82
  declare const EffectTracingLive: Layer.Layer<never>;
83
+ /**
84
+ * Create a combined layer that provides both:
85
+ * 1. Effect-native HTTP tracing (via NodeSdk.layer)
86
+ * 2. Fiber-level auto-tracing (via Supervisor)
87
+ *
88
+ * This gives you automatic spans for:
89
+ * - Every HTTP request (from Effect's platform middleware)
90
+ * - Every forked fiber (from our Supervisor)
91
+ *
92
+ * No manual Effect.withSpan() calls needed.
93
+ */
94
+ declare const createCombinedTracingLayer: () => Layer.Layer<never>;
95
+ /**
96
+ * Combined tracing layer providing both HTTP and fiber-level auto-tracing
97
+ *
98
+ * This is the **most comprehensive** tracing option. You get automatic spans for:
99
+ * - Every HTTP request (from Effect's @effect/platform middleware)
100
+ * - Every forked fiber (from our Supervisor)
101
+ *
102
+ * No manual Effect.withSpan() calls needed - everything is traced automatically.
103
+ *
104
+ * @example
105
+ * ```yaml
106
+ * # instrumentation.yaml
107
+ * effect:
108
+ * auto_instrumentation:
109
+ * enabled: true
110
+ * granularity: fiber
111
+ * exporter_config:
112
+ * type: otlp
113
+ * endpoint: http://localhost:4318
114
+ * ```
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * import { CombinedTracingLive } from '@atrim/instrument-node/effect/auto'
119
+ *
120
+ * const HttpLive = router.pipe(
121
+ * HttpServer.serve(),
122
+ * Layer.provide(ServerLive),
123
+ * Layer.provide(CombinedTracingLive),
124
+ * )
125
+ *
126
+ * // Both HTTP requests AND forked fibers are auto-traced!
127
+ * ```
128
+ */
129
+ declare const CombinedTracingLive: Layer.Layer<never>;
83
130
 
84
131
  /**
85
132
  * Auto-Tracing Supervisor for Effect-TS
@@ -434,4 +481,4 @@ declare function inferSpanName(fiberId: number, sourceInfo: SourceInfo | undefin
434
481
  */
435
482
  declare function sanitizeSpanName(name: string): string;
436
483
 
437
- export { AutoTracingConfig, AutoTracingConfigLayer, AutoTracingConfigLive, AutoTracingEnabled, AutoTracingLive, AutoTracingSpanName, AutoTracingSupervisor, EffectTracingLive, FullAutoTracingLive, type SourceInfo, type TemplateVariables, createAutoTracingLayer, createAutoTracingSupervisor, createEffectTracingLayer, createFullAutoTracingLayer, defaultAutoTracingConfig, inferSpanName, loadAutoTracingConfig, loadAutoTracingConfigSync, sanitizeSpanName, setSpanName, withAutoTracing, withoutAutoTracing };
484
+ export { AutoTracingConfig, AutoTracingConfigLayer, AutoTracingConfigLive, AutoTracingEnabled, AutoTracingLive, AutoTracingSpanName, AutoTracingSupervisor, CombinedTracingLive, EffectTracingLive, FullAutoTracingLive, type SourceInfo, type TemplateVariables, createAutoTracingLayer, createAutoTracingSupervisor, createCombinedTracingLayer, createEffectTracingLayer, createFullAutoTracingLayer, defaultAutoTracingConfig, inferSpanName, loadAutoTracingConfig, loadAutoTracingConfigSync, sanitizeSpanName, setSpanName, withAutoTracing, withoutAutoTracing };
@@ -1,6 +1,6 @@
1
1
  import { Data, Context, Effect, Layer, FiberRef, Option, Supervisor, FiberRefs, Exit } from 'effect';
2
2
  import { NodeSdk } from '@effect/opentelemetry';
3
- import { SimpleSpanProcessor, ConsoleSpanExporter, BatchSpanProcessor, BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
3
+ import { BasicTracerProvider, SimpleSpanProcessor, ConsoleSpanExporter, BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
4
4
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
5
5
  import { FileSystem } from '@effect/platform/FileSystem';
6
6
  import * as HttpClient from '@effect/platform/HttpClient';
@@ -586,67 +586,6 @@ var loadFullConfig = (options) => Effect.gen(function* () {
586
586
  }
587
587
  return config;
588
588
  });
589
-
590
- // src/integrations/effect/auto/effect-tracing.ts
591
- var createEffectTracingLayer = () => {
592
- return Layer.unwrapEffect(
593
- Effect.gen(function* () {
594
- const config = yield* loadFullConfig();
595
- const serviceName = process.env.OTEL_SERVICE_NAME || "effect-service";
596
- const serviceVersion = process.env.npm_package_version || "1.0.0";
597
- const exporterConfig = config.effect?.exporter_config ?? {
598
- type: "otlp",
599
- processor: "batch"
600
- };
601
- logger.log("@atrim/auto-trace: Effect-native tracing enabled");
602
- logger.log(` Service: ${serviceName}`);
603
- logger.log(` Exporter: ${exporterConfig.type}`);
604
- if (exporterConfig.type === "none") {
605
- logger.log('@atrim/auto-trace: Exporter type is "none", using empty layer');
606
- return Layer.empty;
607
- }
608
- const createSpanProcessor = () => {
609
- if (exporterConfig.type === "console") {
610
- logger.log("@atrim/auto-trace: Using ConsoleSpanExporter with SimpleSpanProcessor");
611
- return new SimpleSpanProcessor(new ConsoleSpanExporter());
612
- }
613
- const endpoint = exporterConfig.endpoint || process.env.OTEL_EXPORTER_OTLP_ENDPOINT || "http://localhost:4318";
614
- logger.log(`@atrim/auto-trace: Using OTLPTraceExporter (${endpoint})`);
615
- const otlpConfig = {
616
- url: `${endpoint}/v1/traces`
617
- };
618
- if (exporterConfig.headers) {
619
- otlpConfig.headers = exporterConfig.headers;
620
- logger.log(`@atrim/auto-trace: Using custom headers: ${Object.keys(exporterConfig.headers).join(", ")}`);
621
- }
622
- const exporter = new OTLPTraceExporter(otlpConfig);
623
- if (exporterConfig.processor === "simple") {
624
- logger.log("@atrim/auto-trace: Using SimpleSpanProcessor");
625
- return new SimpleSpanProcessor(exporter);
626
- }
627
- const batchConfig = exporterConfig.batch ?? {
628
- scheduled_delay_millis: 1e3,
629
- max_export_batch_size: 100
630
- };
631
- logger.log("@atrim/auto-trace: Using BatchSpanProcessor");
632
- return new BatchSpanProcessor(exporter, {
633
- scheduledDelayMillis: batchConfig.scheduled_delay_millis,
634
- maxExportBatchSize: batchConfig.max_export_batch_size
635
- });
636
- };
637
- const sdkLayer = NodeSdk.layer(() => ({
638
- resource: {
639
- serviceName,
640
- serviceVersion
641
- },
642
- spanProcessor: createSpanProcessor()
643
- }));
644
- logger.log("@atrim/auto-trace: NodeSdk layer created - HTTP requests will be auto-traced");
645
- return Layer.discard(sdkLayer);
646
- })
647
- );
648
- };
649
- var EffectTracingLive = createEffectTracingLayer();
650
589
  var compiledRulesCache = /* @__PURE__ */ new WeakMap();
651
590
  function compileNamingRules(rules) {
652
591
  const cached = compiledRulesCache.get(rules);
@@ -1131,6 +1070,142 @@ var createFullAutoTracingLayer = () => {
1131
1070
  };
1132
1071
  var FullAutoTracingLive = createFullAutoTracingLayer();
1133
1072
 
1134
- export { AutoTracingConfig, AutoTracingConfigLayer, AutoTracingConfigLive, AutoTracingEnabled, AutoTracingLive, AutoTracingSpanName, AutoTracingSupervisor, EffectTracingLive, FullAutoTracingLive, createAutoTracingLayer, createAutoTracingSupervisor, createEffectTracingLayer, createFullAutoTracingLayer, defaultAutoTracingConfig, inferSpanName, loadAutoTracingConfig, loadAutoTracingConfigSync, sanitizeSpanName, setSpanName, withAutoTracing, withoutAutoTracing };
1073
+ // src/integrations/effect/auto/effect-tracing.ts
1074
+ var createEffectTracingLayer = () => {
1075
+ return Layer.unwrapEffect(
1076
+ Effect.gen(function* () {
1077
+ const config = yield* loadFullConfig();
1078
+ const serviceName = process.env.OTEL_SERVICE_NAME || "effect-service";
1079
+ const serviceVersion = process.env.npm_package_version || "1.0.0";
1080
+ const exporterConfig = config.effect?.exporter_config ?? {
1081
+ type: "otlp",
1082
+ processor: "batch"
1083
+ };
1084
+ logger.log("@atrim/auto-trace: Effect-native tracing enabled");
1085
+ logger.log(` Service: ${serviceName}`);
1086
+ logger.log(` Exporter: ${exporterConfig.type}`);
1087
+ if (exporterConfig.type === "none") {
1088
+ logger.log('@atrim/auto-trace: Exporter type is "none", using empty layer');
1089
+ return Layer.empty;
1090
+ }
1091
+ const createSpanProcessor = () => {
1092
+ if (exporterConfig.type === "console") {
1093
+ logger.log("@atrim/auto-trace: Using ConsoleSpanExporter with SimpleSpanProcessor");
1094
+ return new SimpleSpanProcessor(new ConsoleSpanExporter());
1095
+ }
1096
+ const endpoint = exporterConfig.endpoint || process.env.OTEL_EXPORTER_OTLP_ENDPOINT || "http://localhost:4318";
1097
+ logger.log(`@atrim/auto-trace: Using OTLPTraceExporter (${endpoint})`);
1098
+ const otlpConfig = {
1099
+ url: `${endpoint}/v1/traces`
1100
+ };
1101
+ if (exporterConfig.headers) {
1102
+ otlpConfig.headers = exporterConfig.headers;
1103
+ logger.log(`@atrim/auto-trace: Using custom headers: ${Object.keys(exporterConfig.headers).join(", ")}`);
1104
+ }
1105
+ const exporter = new OTLPTraceExporter(otlpConfig);
1106
+ if (exporterConfig.processor === "simple") {
1107
+ logger.log("@atrim/auto-trace: Using SimpleSpanProcessor");
1108
+ return new SimpleSpanProcessor(exporter);
1109
+ }
1110
+ const batchConfig = exporterConfig.batch ?? {
1111
+ scheduled_delay_millis: 1e3,
1112
+ max_export_batch_size: 100
1113
+ };
1114
+ logger.log("@atrim/auto-trace: Using BatchSpanProcessor");
1115
+ return new BatchSpanProcessor(exporter, {
1116
+ scheduledDelayMillis: batchConfig.scheduled_delay_millis,
1117
+ maxExportBatchSize: batchConfig.max_export_batch_size
1118
+ });
1119
+ };
1120
+ const sdkLayer = NodeSdk.layer(() => ({
1121
+ resource: {
1122
+ serviceName,
1123
+ serviceVersion
1124
+ },
1125
+ spanProcessor: createSpanProcessor()
1126
+ }));
1127
+ logger.log("@atrim/auto-trace: NodeSdk layer created - HTTP requests will be auto-traced");
1128
+ return Layer.discard(sdkLayer);
1129
+ })
1130
+ );
1131
+ };
1132
+ var EffectTracingLive = createEffectTracingLayer();
1133
+ var createCombinedTracingLayer = () => {
1134
+ return Layer.unwrapEffect(
1135
+ Effect.gen(function* () {
1136
+ const config = yield* loadFullConfig();
1137
+ const serviceName = process.env.OTEL_SERVICE_NAME || "effect-service";
1138
+ const serviceVersion = process.env.npm_package_version || "1.0.0";
1139
+ const exporterConfig = config.effect?.exporter_config ?? {
1140
+ type: "otlp",
1141
+ processor: "batch"
1142
+ };
1143
+ const autoConfig = config.effect?.auto_instrumentation ?? {
1144
+ enabled: true,
1145
+ granularity: "fiber",
1146
+ span_naming: {
1147
+ default: "effect.{function}",
1148
+ infer_from_source: true,
1149
+ rules: []
1150
+ },
1151
+ filter: { include: [], exclude: [] },
1152
+ performance: { sampling_rate: 1, min_duration: "0ms", max_concurrent: 0 },
1153
+ metadata: { fiber_info: true, source_location: true, parent_fiber: true }
1154
+ };
1155
+ logger.log("@atrim/auto-trace: Combined tracing enabled (HTTP + Fiber)");
1156
+ logger.log(` Service: ${serviceName}`);
1157
+ logger.log(` Exporter: ${exporterConfig.type}`);
1158
+ if (exporterConfig.type === "none") {
1159
+ logger.log('@atrim/auto-trace: Exporter type is "none", using empty layer');
1160
+ return Layer.empty;
1161
+ }
1162
+ const createSpanProcessor = () => {
1163
+ if (exporterConfig.type === "console") {
1164
+ logger.log("@atrim/auto-trace: Using ConsoleSpanExporter with SimpleSpanProcessor");
1165
+ return new SimpleSpanProcessor(new ConsoleSpanExporter());
1166
+ }
1167
+ const endpoint = exporterConfig.endpoint || process.env.OTEL_EXPORTER_OTLP_ENDPOINT || "http://localhost:4318";
1168
+ logger.log(`@atrim/auto-trace: Using OTLPTraceExporter (${endpoint})`);
1169
+ const otlpConfig = {
1170
+ url: `${endpoint}/v1/traces`
1171
+ };
1172
+ if (exporterConfig.headers) {
1173
+ otlpConfig.headers = exporterConfig.headers;
1174
+ logger.log(`@atrim/auto-trace: Using custom headers: ${Object.keys(exporterConfig.headers).join(", ")}`);
1175
+ }
1176
+ const exporter = new OTLPTraceExporter(otlpConfig);
1177
+ if (exporterConfig.processor === "simple") {
1178
+ logger.log("@atrim/auto-trace: Using SimpleSpanProcessor");
1179
+ return new SimpleSpanProcessor(exporter);
1180
+ }
1181
+ const batchConfig = exporterConfig.batch ?? {
1182
+ scheduled_delay_millis: 1e3,
1183
+ max_export_batch_size: 100
1184
+ };
1185
+ logger.log("@atrim/auto-trace: Using BatchSpanProcessor");
1186
+ return new BatchSpanProcessor(exporter, {
1187
+ scheduledDelayMillis: batchConfig.scheduled_delay_millis,
1188
+ maxExportBatchSize: batchConfig.max_export_batch_size
1189
+ });
1190
+ };
1191
+ const sdkLayer = NodeSdk.layer(() => ({
1192
+ resource: {
1193
+ serviceName,
1194
+ serviceVersion
1195
+ },
1196
+ spanProcessor: createSpanProcessor()
1197
+ }));
1198
+ const supervisor = createAutoTracingSupervisor(autoConfig);
1199
+ const supervisorLayer = Supervisor.addSupervisor(supervisor);
1200
+ logger.log("@atrim/auto-trace: Combined layer created");
1201
+ logger.log(" - HTTP requests: auto-traced via Effect platform");
1202
+ logger.log(" - Forked fibers: auto-traced via Supervisor");
1203
+ return Layer.mergeAll(Layer.discard(sdkLayer), supervisorLayer);
1204
+ })
1205
+ );
1206
+ };
1207
+ var CombinedTracingLive = createCombinedTracingLayer();
1208
+
1209
+ export { AutoTracingConfig, AutoTracingConfigLayer, AutoTracingConfigLive, AutoTracingEnabled, AutoTracingLive, AutoTracingSpanName, AutoTracingSupervisor, CombinedTracingLive, EffectTracingLive, FullAutoTracingLive, createAutoTracingLayer, createAutoTracingSupervisor, createCombinedTracingLayer, createEffectTracingLayer, createFullAutoTracingLayer, defaultAutoTracingConfig, inferSpanName, loadAutoTracingConfig, loadAutoTracingConfigSync, sanitizeSpanName, setSpanName, withAutoTracing, withoutAutoTracing };
1135
1210
  //# sourceMappingURL=index.js.map
1136
1211
  //# sourceMappingURL=index.js.map