@vizydrop/tracer 3.5.1 → 4.0.0

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.
Files changed (43) hide show
  1. package/README.md +113 -0
  2. package/dist/BaggageSpanProcessor.d.ts +16 -0
  3. package/dist/BaggageSpanProcessor.d.ts.map +1 -0
  4. package/dist/BaggageSpanProcessor.js +27 -0
  5. package/dist/BaggageSpanProcessor.js.map +1 -0
  6. package/dist/defaultOptions.d.ts +7 -0
  7. package/dist/defaultOptions.d.ts.map +1 -0
  8. package/{src → dist}/defaultOptions.js +7 -8
  9. package/dist/defaultOptions.js.map +1 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +9 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/requestFilters.d.ts +7 -0
  15. package/dist/requestFilters.d.ts.map +1 -0
  16. package/dist/requestFilters.js +28 -0
  17. package/dist/requestFilters.js.map +1 -0
  18. package/dist/tracer.d.ts +4 -0
  19. package/dist/tracer.d.ts.map +1 -0
  20. package/dist/tracer.js +80 -0
  21. package/dist/tracer.js.map +1 -0
  22. package/dist/types/index.d.ts +6 -0
  23. package/dist/types/index.d.ts.map +1 -0
  24. package/dist/types/index.js +3 -0
  25. package/dist/types/index.js.map +1 -0
  26. package/dist/types/options.d.ts +9 -0
  27. package/dist/types/options.d.ts.map +1 -0
  28. package/dist/types/options.js +3 -0
  29. package/dist/types/options.js.map +1 -0
  30. package/dist/types/tracer.d.ts +28 -0
  31. package/dist/types/tracer.d.ts.map +1 -0
  32. package/dist/types/tracer.js +3 -0
  33. package/dist/types/tracer.js.map +1 -0
  34. package/package.json +38 -20
  35. package/.whitesource +0 -8
  36. package/CHANGELOG.md +0 -19
  37. package/index.js +0 -12
  38. package/src/express/captureCorrelationIdMiddleware.js +0 -24
  39. package/src/express/index.js +0 -8
  40. package/src/koa/captureCorrelationIdMiddleware.js +0 -24
  41. package/src/koa/index.js +0 -8
  42. package/src/requestFilters.js +0 -37
  43. package/src/tracer.js +0 -89
package/README.md ADDED
@@ -0,0 +1,113 @@
1
+ # @vizydrop/tracer
2
+
3
+ OpenTelemetry tracing wrapper for Vizydrop/Targetprocess Node.js services. Provides auto-instrumentation, metric collection, and correlation ID capture middleware for Express and Koa.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ yarn add @vizydrop/tracer
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Basic Setup
14
+
15
+ ```ts
16
+ import {createTracer} from '@vizydrop/tracer';
17
+
18
+ const {trace, agent} = createTracer({
19
+ openTelemetryOptions: {
20
+ serviceName: 'my-service',
21
+ serviceVersion: '1.0.0',
22
+ clusterName: 'production',
23
+ environment: 'prod',
24
+ },
25
+ });
26
+
27
+ // Use trace API for manual spans
28
+ const tracer = trace.getTracer('my-module');
29
+
30
+ // Graceful shutdown
31
+ process.on('SIGTERM', () => agent.shutdown());
32
+ ```
33
+
34
+ ### Express Middleware
35
+
36
+ Captures correlation ID from the request and attaches it to the active OpenTelemetry span.
37
+
38
+ ```ts
39
+ import {express} from '@vizydrop/tracer';
40
+
41
+ app.use(express.captureCorrelationIdMiddleware((req) => req.headers['x-correlation-id']));
42
+ ```
43
+
44
+ ### Koa Middleware
45
+
46
+ ```ts
47
+ import {koa} from '@vizydrop/tracer';
48
+
49
+ app.use(koa.captureCorrelationIdMiddleware((request) => request.headers['x-correlation-id']));
50
+ ```
51
+
52
+ ## Configuration
53
+
54
+ | Option | Type | Default | Description |
55
+ |--------|------|---------|-------------|
56
+ | `enabled` | `boolean` | `true` | Enable/disable tracing instrumentation |
57
+ | `serviceName` | `string` | — | Service name reported to the collector |
58
+ | `serviceVersion` | `string` | — | Service version reported to the collector |
59
+ | `clusterName` | `string` | — | Cluster name (custom `tp_cluster` attribute) |
60
+ | `environment` | `string` | — | Deployment environment |
61
+ | `metricsIntervalMillis` | `number` | `1000` | Metric export interval in milliseconds |
62
+ | `ignoreUrls` | `(string \| RegExp)[]` | See below | URLs to exclude from tracing |
63
+ | `flushToConsole` | `boolean` | `false` | Output traces/metrics to console instead of OTLP |
64
+ | `traceExporterOptions` | `object` | — | Options passed to `OTLPTraceExporter` |
65
+ | `metricExporterOptions` | `object` | — | Options passed to `OTLPMetricExporter` |
66
+ | `getSpanAttributes` | `() => Record<string, string \| undefined>` | — | Function that returns custom attributes to attach to every span on start. Useful for injecting context like correlation IDs or user metadata from CLS/async storage into all outgoing spans. |
67
+
68
+ ### Default Ignored URLs
69
+
70
+ - `/metrics`, `/_prometheus/metrics`
71
+ - `/assets/*`
72
+ - `/favicon*`
73
+ - `/api/v1/status`
74
+ - `/status`
75
+
76
+ ## Features
77
+
78
+ - Automatic HTTP instrumentation via `@opentelemetry/auto-instrumentations-node`
79
+ - Sensitive data stripping from span names (tokens, session IDs, secrets)
80
+ - OTLP/gRPC export for traces and metrics
81
+ - Console export mode for local development
82
+ - Correlation ID capture middleware for Express and Koa
83
+ - Custom span attributes via `getSpanAttributes` (e.g., inject correlation IDs from async context)
84
+
85
+ ### Custom Span Attributes
86
+
87
+ Use `getSpanAttributes` to inject dynamic attributes (e.g., correlation ID from CLS) into every span:
88
+
89
+ ```ts
90
+ import {createTracer} from '@vizydrop/tracer';
91
+ import {correlationId} from '@vizydrop/correlation-id';
92
+
93
+ const {trace, agent} = createTracer({
94
+ openTelemetryOptions: {
95
+ serviceName: 'my-service',
96
+ getSpanAttributes: () => ({
97
+ 'correlation.id': correlationId.getId(),
98
+ 'user.email': correlationId.getMetadata()?.email,
99
+ }),
100
+ },
101
+ });
102
+ ```
103
+
104
+ ## Development
105
+
106
+ ```bash
107
+ yarn install
108
+ yarn build # Compile TypeScript
109
+ yarn test # Run tests
110
+ yarn lint # Run ESLint
111
+ ```
112
+
113
+
@@ -0,0 +1,16 @@
1
+ /*********************************************************************
2
+ * © Copyright IBM Corp. 2026
3
+ *********************************************************************/
4
+ import type { SpanProcessor, Span } from '@opentelemetry/sdk-trace-node';
5
+ export type GetSpanAttributes = () => Record<string, string | undefined>;
6
+ declare class BaggageSpanProcessor implements SpanProcessor {
7
+ private readonly getAttributes;
8
+ private static readonly RESOLVED;
9
+ constructor(getAttributes: GetSpanAttributes);
10
+ onStart(span: Span): void;
11
+ onEnd(): void;
12
+ forceFlush(): Promise<void>;
13
+ shutdown(): Promise<void>;
14
+ }
15
+ export { BaggageSpanProcessor };
16
+ //# sourceMappingURL=BaggageSpanProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaggageSpanProcessor.d.ts","sourceRoot":"","sources":["../src/BaggageSpanProcessor.ts"],"names":[],"mappings":"AAAA;;uEAEuE;AACvE,OAAO,KAAK,EAAC,aAAa,EAAE,IAAI,EAAC,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAEzE,cAAM,oBAAqB,YAAW,aAAa;IAGnC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAExB,aAAa,EAAE,iBAAiB;IAI7D,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQzB,KAAK,IAAI,IAAI;IAEb,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B;AAED,OAAO,EAAC,oBAAoB,EAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaggageSpanProcessor = void 0;
4
+ class BaggageSpanProcessor {
5
+ constructor(getAttributes) {
6
+ this.getAttributes = getAttributes;
7
+ this.getAttributes = getAttributes;
8
+ }
9
+ onStart(span) {
10
+ try {
11
+ span.setAttributes(this.getAttributes());
12
+ }
13
+ catch {
14
+ // Do not drop the span if attribute extraction fails
15
+ }
16
+ }
17
+ onEnd() { }
18
+ forceFlush() {
19
+ return BaggageSpanProcessor.RESOLVED;
20
+ }
21
+ shutdown() {
22
+ return BaggageSpanProcessor.RESOLVED;
23
+ }
24
+ }
25
+ exports.BaggageSpanProcessor = BaggageSpanProcessor;
26
+ BaggageSpanProcessor.RESOLVED = Promise.resolve();
27
+ //# sourceMappingURL=BaggageSpanProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaggageSpanProcessor.js","sourceRoot":"","sources":["../src/BaggageSpanProcessor.ts"],"names":[],"mappings":";;;AAOA,MAAM,oBAAoB;IAGtB,YAA6B,aAAgC;QAAhC,kBAAa,GAAb,aAAa,CAAmB;QACzD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,IAAU;QACd,IAAI,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACL,qDAAqD;QACzD,CAAC;IACL,CAAC;IAED,KAAK,KAAU,CAAC;IAEhB,UAAU;QACN,OAAO,oBAAoB,CAAC,QAAQ,CAAC;IACzC,CAAC;IAED,QAAQ;QACJ,OAAO,oBAAoB,CAAC,QAAQ,CAAC;IACzC,CAAC;;AAGG,oDAAoB;AAzBA,6BAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ /*********************************************************************
2
+ * © Copyright IBM Corp. 2026
3
+ *********************************************************************/
4
+ import type { DefaultOptions, OpenTelemetryOptions } from './types';
5
+ declare const addDefaultOptions: (overrides: OpenTelemetryOptions) => DefaultOptions & OpenTelemetryOptions;
6
+ export { addDefaultOptions, };
7
+ //# sourceMappingURL=defaultOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultOptions.d.ts","sourceRoot":"","sources":["../src/defaultOptions.ts"],"names":[],"mappings":"AAAA;;uEAEuE;AACvE,OAAO,KAAK,EAAC,cAAc,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAC;AAclE,QAAA,MAAM,iBAAiB,GAAI,WAAW,oBAAoB,KAAG,cAAc,GAAG,oBAG5E,CAAC;AAEH,OAAO,EACH,iBAAiB,GACpB,CAAC"}
@@ -1,6 +1,6 @@
1
- /*********************************************************************
2
- * © Copyright IBM Corp. 2025
3
- *********************************************************************/
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addDefaultOptions = void 0;
4
4
  const defaultOptions = {
5
5
  enabled: true,
6
6
  metricsIntervalMillis: 1000,
@@ -10,12 +10,11 @@ const defaultOptions = {
10
10
  /\/favicon.*/,
11
11
  '/api/v1/status',
12
12
  /[a-z ]*\/status/,
13
- ]
13
+ ],
14
14
  };
15
-
16
- const addDefaultOptions = overrides => ({
15
+ const addDefaultOptions = (overrides) => ({
17
16
  ...defaultOptions,
18
17
  ...overrides,
19
18
  });
20
-
21
- module.exports = { addDefaultOptions };
19
+ exports.addDefaultOptions = addDefaultOptions;
20
+ //# sourceMappingURL=defaultOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultOptions.js","sourceRoot":"","sources":["../src/defaultOptions.ts"],"names":[],"mappings":";;;AAKA,MAAM,cAAc,GAAmB;IACnC,OAAO,EAAE,IAAI;IACb,qBAAqB,EAAE,IAAI;IAC3B,UAAU,EAAE;QACR,kDAAkD;QAClD,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,iBAAiB;KACpB;CACJ,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,SAA+B,EAAyC,EAAE,CAAC,CAAC;IACnG,GAAG,cAAc;IACjB,GAAG,SAAS;CACf,CAAC,CAAC;AAGC,8CAAiB"}
@@ -0,0 +1,7 @@
1
+ /*********************************************************************
2
+ * © Copyright IBM Corp. 2026
3
+ *********************************************************************/
4
+ import { createTracer } from './tracer';
5
+ export { createTracer, };
6
+ export type { OpenTelemetryOptions, CreateTracerOptions, TracerInstance } from './types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;uEAEuE;AACvE,OAAO,EAAC,YAAY,EAAC,MAAM,UAAU,CAAC;AAEtC,OAAO,EACH,YAAY,GACf,CAAC;AAEF,YAAY,EACR,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACjB,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTracer = void 0;
4
+ /*********************************************************************
5
+ * © Copyright IBM Corp. 2026
6
+ *********************************************************************/
7
+ const tracer_1 = require("./tracer");
8
+ Object.defineProperty(exports, "createTracer", { enumerable: true, get: function () { return tracer_1.createTracer; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA;;uEAEuE;AACvE,qCAAsC;AAGlC,6FAHI,qBAAY,OAGJ"}
@@ -0,0 +1,7 @@
1
+ /*********************************************************************
2
+ * © Copyright IBM Corp. 2026
3
+ *********************************************************************/
4
+ declare function replaceSensitiveData(text: string | undefined): string | undefined;
5
+ declare const buildIgnoredUrlMatcher: (ignoreUrls: (string | RegExp)[]) => (url: string) => boolean;
6
+ export { replaceSensitiveData, buildIgnoredUrlMatcher, };
7
+ //# sourceMappingURL=requestFilters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestFilters.d.ts","sourceRoot":"","sources":["../src/requestFilters.ts"],"names":[],"mappings":"AAAA;;uEAEuE;AAEvE,iBAAS,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAwB1E;AAED,QAAA,MAAM,sBAAsB,GAAI,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,MAC1D,KAAK,MAAM,KAAG,OAA2D,CAAC;AAE/E,OAAO,EACH,oBAAoB,EACpB,sBAAsB,GACzB,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /*********************************************************************
3
+ * © Copyright IBM Corp. 2026
4
+ *********************************************************************/
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildIgnoredUrlMatcher = void 0;
7
+ exports.replaceSensitiveData = replaceSensitiveData;
8
+ function replaceSensitiveData(text) {
9
+ if (!text) {
10
+ return text;
11
+ }
12
+ const sensitivePatterns = [
13
+ /token=([^&]*)/gi,
14
+ /reset-password\/(?:.*)\/(.*)/gi,
15
+ /sessionId=([^&]*)/g,
16
+ /secret=([^&]*)/gi,
17
+ ];
18
+ return sensitivePatterns.reduce((result, regexp) => {
19
+ const matches = regexp.exec(result);
20
+ if (matches) {
21
+ return matches.slice(1).reduce((res, match) => res.replace(match, '********'), result);
22
+ }
23
+ return result;
24
+ }, text);
25
+ }
26
+ const buildIgnoredUrlMatcher = (ignoreUrls) => (url) => ignoreUrls.some((ignored) => url.match(ignored));
27
+ exports.buildIgnoredUrlMatcher = buildIgnoredUrlMatcher;
28
+ //# sourceMappingURL=requestFilters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestFilters.js","sourceRoot":"","sources":["../src/requestFilters.ts"],"names":[],"mappings":";AAAA;;uEAEuE;;;AAgCnE,oDAAoB;AA9BxB,SAAS,oBAAoB,CAAC,IAAwB;IAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,iBAAiB,GAAG;QACtB,iBAAiB;QACjB,gCAAgC;QAChC,oBAAoB;QACpB,kBAAkB;KACrB,CAAC;IAEF,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,EAC9C,MAAM,CACT,CAAC;QACN,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AAED,MAAM,sBAAsB,GAAG,CAAC,UAA+B,EAAE,EAAE,CAC/D,CAAC,GAAW,EAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAI3E,wDAAsB"}
@@ -0,0 +1,4 @@
1
+ import type { CreateTracerOptions, CreateTracerResult } from './types';
2
+ declare function createTracer({ openTelemetryOptions }: CreateTracerOptions): CreateTracerResult;
3
+ export { createTracer, };
4
+ //# sourceMappingURL=tracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../src/tracer.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAiB,mBAAmB,EAAE,kBAAkB,EAAuC,MAAM,SAAS,CAAC;AA8E3H,iBAAS,YAAY,CAAC,EAAC,oBAAoB,EAAC,EAAE,mBAAmB,GAAG,kBAAkB,CAQrF;AAED,OAAO,EACH,YAAY,GACf,CAAC"}
package/dist/tracer.js ADDED
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTracer = createTracer;
4
+ /*********************************************************************
5
+ * © Copyright IBM Corp. 2026
6
+ *********************************************************************/
7
+ const api_1 = require("@opentelemetry/api");
8
+ const sdk_node_1 = require("@opentelemetry/sdk-node");
9
+ const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
10
+ const resources_1 = require("@opentelemetry/resources");
11
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
12
+ const auto_instrumentations_node_1 = require("@opentelemetry/auto-instrumentations-node");
13
+ const exporter_trace_otlp_grpc_1 = require("@opentelemetry/exporter-trace-otlp-grpc");
14
+ const exporter_metrics_otlp_grpc_1 = require("@opentelemetry/exporter-metrics-otlp-grpc");
15
+ const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
16
+ const requestFilters_1 = require("./requestFilters");
17
+ const defaultOptions_1 = require("./defaultOptions");
18
+ const BaggageSpanProcessor_1 = require("./BaggageSpanProcessor");
19
+ const ResourceAttributes = {
20
+ TpClusterName: 'tp_cluster',
21
+ DatadogEnvironment: 'tags.datadoghq.com/env',
22
+ Environment: 'deployment.environment',
23
+ };
24
+ const createOpenTelemetryAgent = ({ enabled, serviceName, serviceVersion, clusterName, environment, metricsIntervalMillis, ignoreUrls, flushToConsole, traceExporterOptions, metricExporterOptions, getSpanAttributes, }) => {
25
+ const matchIgnoredUrl = (0, requestFilters_1.buildIgnoredUrlMatcher)(ignoreUrls);
26
+ const traceExporter = flushToConsole
27
+ ? new sdk_trace_node_1.ConsoleSpanExporter()
28
+ : new exporter_trace_otlp_grpc_1.OTLPTraceExporter(traceExporterOptions);
29
+ const metricReader = flushToConsole
30
+ ? new sdk_metrics_1.PeriodicExportingMetricReader({
31
+ exporter: new sdk_metrics_1.ConsoleMetricExporter(),
32
+ exportIntervalMillis: metricsIntervalMillis,
33
+ })
34
+ : new sdk_metrics_1.PeriodicExportingMetricReader({ exporter: new exporter_metrics_otlp_grpc_1.OTLPMetricExporter(metricExporterOptions) });
35
+ const spanProcessors = getSpanAttributes
36
+ ? [new BaggageSpanProcessor_1.BaggageSpanProcessor(getSpanAttributes), new sdk_trace_node_1.BatchSpanProcessor(traceExporter)]
37
+ : [new sdk_trace_node_1.BatchSpanProcessor(traceExporter)];
38
+ const agent = new sdk_node_1.NodeSDK({
39
+ resource: (0, resources_1.resourceFromAttributes)({
40
+ [semantic_conventions_1.ATTR_SERVICE_NAME]: serviceName,
41
+ [semantic_conventions_1.ATTR_SERVICE_VERSION]: serviceVersion,
42
+ [ResourceAttributes.TpClusterName]: clusterName,
43
+ [ResourceAttributes.DatadogEnvironment]: environment,
44
+ [ResourceAttributes.Environment]: environment,
45
+ }),
46
+ metricReader,
47
+ spanProcessors,
48
+ instrumentations: enabled
49
+ ? [
50
+ (0, auto_instrumentations_node_1.getNodeAutoInstrumentations)({
51
+ '@opentelemetry/instrumentation-http': {
52
+ ignoreIncomingRequestHook: ({ url }) => matchIgnoredUrl(url ?? ''),
53
+ ignoreOutgoingRequestHook: ({ path }) => matchIgnoredUrl(path ?? ''),
54
+ requestHook: (span, request) => {
55
+ if (span) {
56
+ const url = request.url;
57
+ span.updateName((0, requestFilters_1.replaceSensitiveData)(url) ?? '');
58
+ }
59
+ },
60
+ },
61
+ }),
62
+ ]
63
+ : [],
64
+ });
65
+ if (enabled) {
66
+ agent.start();
67
+ }
68
+ return {
69
+ shutdown: () => agent.shutdown(),
70
+ };
71
+ };
72
+ function createTracer({ openTelemetryOptions }) {
73
+ const config = (0, defaultOptions_1.addDefaultOptions)(openTelemetryOptions);
74
+ const agent = createOpenTelemetryAgent(config);
75
+ return {
76
+ trace: api_1.trace,
77
+ agent,
78
+ };
79
+ }
80
+ //# sourceMappingURL=tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../src/tracer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /*********************************************************************
2
+ * © Copyright IBM Corp. 2026
3
+ *********************************************************************/
4
+ export { DefaultOptions } from './options';
5
+ export { OpenTelemetryOptions, CreateTracerOptions, CreateTracerResult, TracerInstance } from './tracer';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;uEAEuE;AACvE,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AACzC,OAAO,EAAC,oBAAoB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAC,MAAM,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ /*********************************************************************
2
+ * © Copyright IBM Corp. 2026
3
+ *********************************************************************/
4
+ export interface DefaultOptions {
5
+ enabled: boolean;
6
+ metricsIntervalMillis: number;
7
+ ignoreUrls: (string | RegExp)[];
8
+ }
9
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":"AAAA;;uEAEuE;AACvE,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACnC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ /*********************************************************************
2
+ * © Copyright IBM Corp. 2026
3
+ *********************************************************************/
4
+ import type { TraceAPI } from '@opentelemetry/api';
5
+ export interface OpenTelemetryOptions {
6
+ enabled?: boolean;
7
+ serviceName?: string;
8
+ serviceVersion?: string;
9
+ clusterName?: string;
10
+ environment?: string;
11
+ metricsIntervalMillis?: number;
12
+ ignoreUrls?: (string | RegExp)[];
13
+ flushToConsole?: boolean;
14
+ traceExporterOptions?: Record<string, unknown>;
15
+ metricExporterOptions?: Record<string, unknown>;
16
+ getSpanAttributes?: () => Record<string, string | undefined>;
17
+ }
18
+ export interface TracerInstance {
19
+ shutdown: () => Promise<void>;
20
+ }
21
+ export interface CreateTracerOptions {
22
+ openTelemetryOptions: OpenTelemetryOptions;
23
+ }
24
+ export interface CreateTracerResult {
25
+ trace: TraceAPI;
26
+ agent: TracerInstance;
27
+ }
28
+ //# sourceMappingURL=tracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/types/tracer.ts"],"names":[],"mappings":"AAAA;;uEAEuE;AACvE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAChC,oBAAoB,EAAE,oBAAoB,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC;CACzB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/types/tracer.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,46 +1,64 @@
1
1
  {
2
2
  "name": "@vizydrop/tracer",
3
3
  "license": "MIT",
4
- "version": "3.5.1",
4
+ "version": "4.0.0",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
5
10
  "scripts": {
11
+ "build": "tsc",
12
+ "prepublishOnly": "yarn build",
6
13
  "test": "jest",
7
- "lint": "eslint --quiet ."
14
+ "lint": "eslint --quiet --ext .ts src/"
8
15
  },
9
16
  "dependencies": {
10
17
  "@opentelemetry/api": "^1.9.0",
11
- "@opentelemetry/auto-instrumentations-node": "^0.55.3",
12
- "@opentelemetry/exporter-metrics-otlp-grpc": "^0.207.0",
13
- "@opentelemetry/exporter-trace-otlp-grpc": "^0.207.0",
14
- "@opentelemetry/resources": "^2.2.0",
15
- "@opentelemetry/sdk-metrics": "^2.2.0",
16
- "@opentelemetry/sdk-node": "^0.207.0",
17
- "@opentelemetry/sdk-trace-node": "^2.2.0",
18
- "@opentelemetry/semantic-conventions": "^1.37.0",
19
- "lodash": "^4.17.23"
18
+ "@opentelemetry/auto-instrumentations-node": "^0.76.0",
19
+ "@opentelemetry/exporter-metrics-otlp-grpc": "^0.218.0",
20
+ "@opentelemetry/exporter-trace-otlp-grpc": "^0.218.0",
21
+ "@opentelemetry/resources": "^2.7.1",
22
+ "@opentelemetry/sdk-metrics": "^2.7.1",
23
+ "@opentelemetry/sdk-node": "^0.218.0",
24
+ "@opentelemetry/sdk-trace-node": "^2.7.1",
25
+ "@opentelemetry/semantic-conventions": "^1.41.1"
20
26
  },
21
27
  "devDependencies": {
28
+ "@types/jest": "^30.0.0",
29
+ "@types/node": "^20.0.0",
30
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
31
+ "@typescript-eslint/parser": "^8.0.0",
22
32
  "@vizydrop/eslint-config-vizydrop": "7.2.3",
23
- "eslint": "6.8.0",
33
+ "eslint": "^8.56.0",
24
34
  "eslint-config-airbnb": "18.1.0",
25
35
  "eslint-config-prettier": "6.10.0",
26
36
  "eslint-plugin-babel": "5.3.0",
27
37
  "eslint-plugin-filenames": "1.3.2",
28
38
  "eslint-plugin-flowtype": "4.7.0",
29
- "eslint-plugin-import": "2.22.1",
39
+ "eslint-plugin-import": "2.29.1",
30
40
  "eslint-plugin-jsx-a11y": "6.2.3",
31
- "eslint-plugin-lodash-fp": "2.2.0-a1",
32
41
  "eslint-plugin-mocha": "6.3.0",
33
42
  "eslint-plugin-node": "11.1.0",
34
43
  "eslint-plugin-promise": "4.2.1",
35
44
  "eslint-plugin-react": "7.19.0",
36
45
  "eslint-plugin-react-hooks": "2.5.0",
37
- "jest": "30.2.0"
46
+ "jest": "30.2.0",
47
+ "ts-jest": "^29.3.0",
48
+ "typescript": "^5.7.0"
38
49
  },
39
50
  "jest": {
40
- "testEnvironment": "node"
41
- },
42
- "resolutions": {
43
- "elastic-apm-node/agentkeepalive/debug": "4.4.3",
44
- "elastic-apm-node/require-in-the-middle/debug": "4.4.3"
51
+ "testEnvironment": "node",
52
+ "transform": {
53
+ "^.+\\.ts$": [
54
+ "ts-jest",
55
+ {
56
+ "tsconfig": "tsconfig.test.json"
57
+ }
58
+ ]
59
+ },
60
+ "testMatch": [
61
+ "**/src/__tests__/**/*.tests.ts"
62
+ ]
45
63
  }
46
64
  }
package/.whitesource DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "settingsInheritedFrom": "TargetProcess/mend-config@master",
3
- "remediateSettings": {
4
- "extends": [
5
- "github>TargetProcess/mend-config//presets/schedules/fridays"
6
- ]
7
- }
8
- }
package/CHANGELOG.md DELETED
@@ -1,19 +0,0 @@
1
- #### v2.4.0
2
- Disable body capture
3
- Disable use path as transactions
4
-
5
- #### v2.3.1
6
- Update dependencies
7
-
8
- #### v2.3.0
9
- Disable metrics
10
-
11
- #### v2.2.0
12
- Do not patch logger if tracer inactive
13
-
14
- #### v2.1.0
15
- Skip OPTIONS requests
16
-
17
- #### v2.0.0
18
- 1. add koa and express middlewares
19
- 2. captureCorrelationIdMiddleware should receive getCorrelationId function
package/index.js DELETED
@@ -1,12 +0,0 @@
1
- /*********************************************************************
2
- * © Copyright IBM Corp. 2025
3
- *********************************************************************/
4
- const {createTracer} = require('./src/tracer');
5
- const express = require('./src/express');
6
- const koa = require('./src/koa');
7
-
8
- module.exports = {
9
- createTracer,
10
- express,
11
- koa,
12
- };
@@ -1,24 +0,0 @@
1
- /*********************************************************************
2
- * © Copyright IBM Corp. 2025
3
- *********************************************************************/
4
- const { trace } = require('@opentelemetry/api');
5
-
6
- const captureCorrelationIdMiddleware = (getCorrelationId) => {
7
- if (!getCorrelationId && typeof getCorrelationId !== 'function') {
8
- throw new Error('getCorrelationId expect to be a function');
9
- }
10
-
11
- return (req, res, next) => {
12
- const currentSpan = trace.getActiveSpan();
13
-
14
- if (currentSpan) {
15
- currentSpan.setAttribute('correlationId', getCorrelationId(req));
16
- }
17
-
18
- next();
19
- };
20
- };
21
-
22
- module.exports = {
23
- captureCorrelationIdMiddleware
24
- };
@@ -1,8 +0,0 @@
1
- /*********************************************************************
2
- * © Copyright IBM Corp. 2025
3
- *********************************************************************/
4
- const {captureCorrelationIdMiddleware} = require('./captureCorrelationIdMiddleware');
5
-
6
- module.exports = {
7
- captureCorrelationIdMiddleware,
8
- };
@@ -1,24 +0,0 @@
1
- /*********************************************************************
2
- * © Copyright IBM Corp. 2025
3
- *********************************************************************/
4
- const { trace } = require('@opentelemetry/api');
5
-
6
- const captureCorrelationIdMiddleware = (getCorrelationId) => {
7
- if (!getCorrelationId && typeof getCorrelationId !== 'function') {
8
- throw new Error('getCorrelationId expect to be a function');
9
- }
10
-
11
- return async (ctx, next) => {
12
- const currentSpan = trace.getActiveSpan();
13
-
14
- if (currentSpan) {
15
- currentSpan.setAttribute('correlationId', getCorrelationId(ctx.request));
16
- }
17
-
18
- await next();
19
- };
20
- };
21
-
22
- module.exports = {
23
- captureCorrelationIdMiddleware,
24
- };
package/src/koa/index.js DELETED
@@ -1,8 +0,0 @@
1
- /*********************************************************************
2
- * © Copyright IBM Corp. 2025
3
- *********************************************************************/
4
- const {captureCorrelationIdMiddleware} = require('./captureCorrelationIdMiddleware');
5
-
6
- module.exports = {
7
- captureCorrelationIdMiddleware,
8
- };
@@ -1,37 +0,0 @@
1
- /*********************************************************************
2
- * © Copyright IBM Corp. 2025
3
- *********************************************************************/
4
- const _ = require('lodash/fp');
5
-
6
- function replaceSensitiveData(text) {
7
- if (!text) {
8
- return text;
9
- }
10
-
11
- const sensitivePatterns = [
12
- /token=([^&]*)/gi,
13
- /reset-password\/(?:.*)\/(.*)/gi,
14
- /sessionId=([^&]*)/g,
15
- /secret=([^&]*)/gi,
16
- ];
17
-
18
- return sensitivePatterns.reduce((result, regexp) => {
19
- const matches = regexp.exec(result);
20
-
21
- if (matches) {
22
- return _.tail(matches).reduce(
23
- (res, match) => res.replace(match, '********'),
24
- result,
25
- );
26
- }
27
-
28
- return result;
29
- }, text);
30
- }
31
-
32
- const buildIgnoredUrlMatcher = ignoreUrls => url => ignoreUrls.some(ignored => url.match(ignored));
33
-
34
- module.exports = {
35
- replaceSensitiveData,
36
- buildIgnoredUrlMatcher
37
- };
package/src/tracer.js DELETED
@@ -1,89 +0,0 @@
1
- /*********************************************************************
2
- * © Copyright IBM Corp. 2025
3
- *********************************************************************/
4
- const { trace } = require('@opentelemetry/api');
5
- const { NodeSDK } = require('@opentelemetry/sdk-node');
6
- const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-node');
7
- const { resourceFromAttributes} = require('@opentelemetry/resources');
8
- const { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } = require('@opentelemetry/semantic-conventions');
9
- const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
10
- const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
11
- const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
12
- const { PeriodicExportingMetricReader, ConsoleMetricExporter } = require('@opentelemetry/sdk-metrics');
13
- const { replaceSensitiveData, buildIgnoredUrlMatcher } = require('./requestFilters');
14
- const { addDefaultOptions } = require('./defaultOptions');
15
-
16
- const ResourceAttributes = {
17
- TpClusterName: 'tp_cluster',
18
- DatadogEnvironment: 'tags.datadoghq.com/env',
19
- Environment: 'deployment.environment'
20
- };
21
-
22
- const createOpenTelemetryAgent = ({
23
- enabled,
24
- serviceName,
25
- serviceVersion,
26
- clusterName,
27
- environment,
28
- metricsIntervalMillis,
29
- ignoreUrls,
30
- flushToConsole,
31
- traceExporterOptions,
32
- metricExporterOptions,
33
- }) => {
34
- const matchIgnoredUrl = buildIgnoredUrlMatcher(ignoreUrls);
35
- const traceExporter = flushToConsole ?
36
- new ConsoleSpanExporter() :
37
- new OTLPTraceExporter(traceExporterOptions);
38
- const metricReader = flushToConsole ?
39
- new PeriodicExportingMetricReader({
40
- exporter: new ConsoleMetricExporter(),
41
- metricsIntervalMillis
42
- }) :
43
- new PeriodicExportingMetricReader({ exporter: new OTLPMetricExporter(metricExporterOptions) });
44
-
45
- const agent = new NodeSDK({
46
- resource: resourceFromAttributes({
47
- [ATTR_SERVICE_NAME]: serviceName,
48
- [ATTR_SERVICE_VERSION]: serviceVersion,
49
- [ResourceAttributes.TpClusterName]: clusterName,
50
- [ResourceAttributes.DatadogEnvironment]: environment,
51
- [ResourceAttributes.Environment]: environment
52
- }),
53
- traceExporter,
54
- metricReader,
55
- instrumentations: enabled ? [
56
- getNodeAutoInstrumentations({
57
- '@opentelemetry/instrumentation-http': {
58
- ignoreIncomingRequestHook: ({ url }) => matchIgnoredUrl(url),
59
- ignoreOutgoingRequestHook: ({ path }) => matchIgnoredUrl(path),
60
- requestHook: (span, request) => {
61
- if (span) {
62
- span.updateName(replaceSensitiveData(request.url));
63
- }
64
- }
65
- }
66
- })
67
- ] : []
68
- });
69
-
70
- if(enabled) {
71
- agent.start();
72
- }
73
-
74
- return {
75
- shutdown: () => agent.shutdown()
76
- };
77
- };
78
-
79
- function createTracer({ openTelemetryOptions }) {
80
- const config = addDefaultOptions(openTelemetryOptions);
81
- const agent = createOpenTelemetryAgent(config);
82
-
83
- return {
84
- trace,
85
- agent
86
- };
87
- }
88
-
89
- module.exports = {createTracer};