@instrumentation-node/otel-nats 0.2.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 (45) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +87 -0
  3. package/dist/cjs/index.d.ts +5 -0
  4. package/dist/cjs/index.d.ts.map +1 -0
  5. package/dist/cjs/index.js +13 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/package.json +1 -0
  8. package/dist/cjs/propagation.d.ts +30 -0
  9. package/dist/cjs/propagation.d.ts.map +1 -0
  10. package/dist/cjs/propagation.js +41 -0
  11. package/dist/cjs/propagation.js.map +1 -0
  12. package/dist/cjs/tracing.d.ts +45 -0
  13. package/dist/cjs/tracing.d.ts.map +1 -0
  14. package/dist/cjs/tracing.js +333 -0
  15. package/dist/cjs/tracing.js.map +1 -0
  16. package/dist/cjs/version.d.ts +10 -0
  17. package/dist/cjs/version.d.ts.map +1 -0
  18. package/dist/cjs/version.js +13 -0
  19. package/dist/cjs/version.js.map +1 -0
  20. package/dist/esm/index.d.ts +5 -0
  21. package/dist/esm/index.d.ts.map +1 -0
  22. package/dist/esm/index.js +4 -0
  23. package/dist/esm/index.js.map +1 -0
  24. package/dist/esm/package.json +1 -0
  25. package/dist/esm/propagation.d.ts +30 -0
  26. package/dist/esm/propagation.d.ts.map +1 -0
  27. package/dist/esm/propagation.js +37 -0
  28. package/dist/esm/propagation.js.map +1 -0
  29. package/dist/esm/tracing.d.ts +45 -0
  30. package/dist/esm/tracing.d.ts.map +1 -0
  31. package/dist/esm/tracing.js +330 -0
  32. package/dist/esm/tracing.js.map +1 -0
  33. package/dist/esm/version.d.ts +10 -0
  34. package/dist/esm/version.d.ts.map +1 -0
  35. package/dist/esm/version.js +10 -0
  36. package/dist/esm/version.js.map +1 -0
  37. package/dist/types/index.d.ts +5 -0
  38. package/dist/types/index.d.ts.map +1 -0
  39. package/dist/types/propagation.d.ts +30 -0
  40. package/dist/types/propagation.d.ts.map +1 -0
  41. package/dist/types/tracing.d.ts +45 -0
  42. package/dist/types/tracing.d.ts.map +1 -0
  43. package/dist/types/version.d.ts +10 -0
  44. package/dist/types/version.d.ts.map +1 -0
  45. package/package.json +80 -0
@@ -0,0 +1,330 @@
1
+ import { context, propagation, SpanKind, SpanStatusCode, trace, } from "@opentelemetry/api";
2
+ import { headers } from "nats";
3
+ import { natsHeaderGetter, natsHeaderSetter } from "./propagation.js";
4
+ import { INSTRUMENTATION_NAME, INSTRUMENTATION_VERSION } from "./version.js";
5
+ // ---------------------------------------------------------------------------
6
+ // Internal helpers
7
+ // ---------------------------------------------------------------------------
8
+ /** Symbol used to mark already-wrapped connections (prevents double-wrapping). */
9
+ const TRACING_SYMBOL = Symbol("@instrumentation-node/otel-nats.tracing");
10
+ function resolveTracer(opts) {
11
+ if (opts.tracer)
12
+ return opts.tracer;
13
+ const name = opts.instrumentationName ?? INSTRUMENTATION_NAME;
14
+ const version = opts.instrumentationVersion ?? INSTRUMENTATION_VERSION;
15
+ const provider = opts.tracerProvider ?? trace.getTracerProvider();
16
+ return provider.getTracer(name, version);
17
+ }
18
+ function injectContext(existingHdrs, span) {
19
+ const hdrs = existingHdrs ?? headers();
20
+ propagation.inject(trace.setSpan(context.active(), span), hdrs, natsHeaderSetter);
21
+ return hdrs;
22
+ }
23
+ function extractLink(msg) {
24
+ if (!msg.headers)
25
+ return undefined;
26
+ const extractedCtx = propagation.extract(context.active(), msg.headers, natsHeaderGetter);
27
+ const spanContext = trace.getSpanContext(extractedCtx);
28
+ if (!spanContext)
29
+ return undefined;
30
+ return { context: spanContext };
31
+ }
32
+ function startMessagingSpan(tracer, subject, operation, kind, operationType, options) {
33
+ const links = options?.links?.length ? options.links : undefined;
34
+ return tracer.startSpan(`${subject} ${operation}`, {
35
+ kind,
36
+ links,
37
+ attributes: {
38
+ "messaging.system": "nats",
39
+ "messaging.destination.name": subject,
40
+ "messaging.operation.name": operation,
41
+ "messaging.operation.type": operationType,
42
+ },
43
+ }, context.active());
44
+ }
45
+ // ---------------------------------------------------------------------------
46
+ // Subscription wrapper (iterator path)
47
+ // ---------------------------------------------------------------------------
48
+ function wrapSubscription(sub, tracer, subject) {
49
+ return new Proxy(sub, {
50
+ get(target, prop, receiver) {
51
+ if (prop === Symbol.asyncIterator) {
52
+ return async function* () {
53
+ for await (const msg of target) {
54
+ const link = extractLink(msg);
55
+ const span = startMessagingSpan(tracer, subject, "process", SpanKind.CONSUMER, "process", { links: link ? [link] : [] });
56
+ const spanCtx = trace.setSpan(context.active(), span);
57
+ try {
58
+ yield await context.with(spanCtx, () => Promise.resolve(msg));
59
+ span.setStatus({ code: SpanStatusCode.OK });
60
+ }
61
+ catch (err) {
62
+ span.setStatus({
63
+ code: SpanStatusCode.ERROR,
64
+ message: err instanceof Error ? err.message : String(err),
65
+ });
66
+ span.recordException(err);
67
+ throw err;
68
+ }
69
+ finally {
70
+ span.end();
71
+ }
72
+ }
73
+ };
74
+ }
75
+ return Reflect.get(target, prop, receiver);
76
+ },
77
+ });
78
+ }
79
+ // ---------------------------------------------------------------------------
80
+ // NatsConnection operation wrappers
81
+ // ---------------------------------------------------------------------------
82
+ function tracedPublish(nc, tracer) {
83
+ return (subject, payload, options) => {
84
+ const span = startMessagingSpan(tracer, subject, "publish", SpanKind.PRODUCER, "publish");
85
+ try {
86
+ const hdrs = injectContext(options?.headers, span);
87
+ nc.publish(subject, payload, { ...options, headers: hdrs });
88
+ span.setStatus({ code: SpanStatusCode.OK });
89
+ }
90
+ catch (err) {
91
+ span.setStatus({
92
+ code: SpanStatusCode.ERROR,
93
+ message: err instanceof Error ? err.message : String(err),
94
+ });
95
+ span.recordException(err);
96
+ throw err;
97
+ }
98
+ finally {
99
+ span.end();
100
+ }
101
+ };
102
+ }
103
+ function tracedSubscribe(nc, tracer) {
104
+ return (subject, opts) => {
105
+ if (opts?.callback) {
106
+ const originalCallback = opts.callback;
107
+ const wrappedOpts = {
108
+ ...opts,
109
+ callback: (err, msg) => {
110
+ if (err) {
111
+ originalCallback(err, msg);
112
+ return;
113
+ }
114
+ const link = extractLink(msg);
115
+ const span = startMessagingSpan(tracer, subject, "receive", SpanKind.CONSUMER, "receive", { links: link ? [link] : [] });
116
+ context.with(trace.setSpan(context.active(), span), () => {
117
+ try {
118
+ originalCallback(err, msg);
119
+ span.setStatus({ code: SpanStatusCode.OK });
120
+ }
121
+ catch (cbErr) {
122
+ span.setStatus({
123
+ code: SpanStatusCode.ERROR,
124
+ message: cbErr instanceof Error ? cbErr.message : String(cbErr),
125
+ });
126
+ span.recordException(cbErr);
127
+ throw cbErr;
128
+ }
129
+ finally {
130
+ span.end();
131
+ }
132
+ });
133
+ },
134
+ };
135
+ return wrapSubscription(nc.subscribe(subject, wrappedOpts), tracer, subject);
136
+ }
137
+ return wrapSubscription(nc.subscribe(subject, opts), tracer, subject);
138
+ };
139
+ }
140
+ function tracedRequest(nc, tracer) {
141
+ return async (subject, payload, opts) => {
142
+ const span = startMessagingSpan(tracer, subject, "request", SpanKind.CLIENT, "send");
143
+ try {
144
+ const hdrs = injectContext(opts?.headers, span);
145
+ const response = await context.with(trace.setSpan(context.active(), span), () => nc.request(subject, payload, {
146
+ ...opts,
147
+ headers: hdrs,
148
+ }));
149
+ span.setStatus({ code: SpanStatusCode.OK });
150
+ return response;
151
+ }
152
+ catch (err) {
153
+ span.setStatus({
154
+ code: SpanStatusCode.ERROR,
155
+ message: err instanceof Error ? err.message : String(err),
156
+ });
157
+ span.recordException(err);
158
+ throw err;
159
+ }
160
+ finally {
161
+ span.end();
162
+ }
163
+ };
164
+ }
165
+ // ---------------------------------------------------------------------------
166
+ // JetStream operation wrappers
167
+ // ---------------------------------------------------------------------------
168
+ function wrapJsMsgIterator(iter, tracer, subject) {
169
+ return new Proxy(iter, {
170
+ get(target, prop, receiver) {
171
+ if (prop === Symbol.asyncIterator) {
172
+ return async function* () {
173
+ for await (const msg of target) {
174
+ const link = extractLink(msg);
175
+ const span = startMessagingSpan(tracer, subject, "process", SpanKind.CONSUMER, "process", { links: link ? [link] : [] });
176
+ const spanCtx = trace.setSpan(context.active(), span);
177
+ try {
178
+ yield await context.with(spanCtx, () => Promise.resolve(msg));
179
+ span.setStatus({ code: SpanStatusCode.OK });
180
+ }
181
+ catch (err) {
182
+ span.setStatus({
183
+ code: SpanStatusCode.ERROR,
184
+ message: err instanceof Error ? err.message : String(err),
185
+ });
186
+ span.recordException(err);
187
+ throw err;
188
+ }
189
+ finally {
190
+ span.end();
191
+ }
192
+ }
193
+ };
194
+ }
195
+ return Reflect.get(target, prop, receiver);
196
+ },
197
+ });
198
+ }
199
+ function tracedJsPublish(js, tracer) {
200
+ return async (subj, payload, options) => {
201
+ const span = startMessagingSpan(tracer, subj, "publish", SpanKind.PRODUCER, "publish");
202
+ try {
203
+ const hdrs = injectContext(options?.headers, span);
204
+ const ack = await js.publish(subj, payload, { ...options, headers: hdrs });
205
+ span.setAttribute("messaging.jetstream.stream", ack.stream);
206
+ span.setAttribute("messaging.jetstream.sequence", ack.seq);
207
+ span.setStatus({ code: SpanStatusCode.OK });
208
+ return ack;
209
+ }
210
+ catch (err) {
211
+ span.setStatus({
212
+ code: SpanStatusCode.ERROR,
213
+ message: err instanceof Error ? err.message : String(err),
214
+ });
215
+ span.recordException(err);
216
+ throw err;
217
+ }
218
+ finally {
219
+ span.end();
220
+ }
221
+ };
222
+ }
223
+ function tracedJsFetch(js, tracer) {
224
+ return (stream, durable, opts) => {
225
+ const iter = js.fetch(stream, durable, opts);
226
+ const subject = `${stream}.${durable}`;
227
+ return wrapJsMsgIterator(iter, tracer, subject);
228
+ };
229
+ }
230
+ function tracedJsPullSubscribe(js, tracer) {
231
+ return async (subject, opts) => {
232
+ const sub = await js.pullSubscribe(subject, opts);
233
+ return new Proxy(sub, {
234
+ get(target, prop, receiver) {
235
+ if (prop === Symbol.asyncIterator) {
236
+ return async function* () {
237
+ for await (const msg of target) {
238
+ const link = extractLink(msg);
239
+ const span = startMessagingSpan(tracer, subject, "process", SpanKind.CONSUMER, "process", { links: link ? [link] : [] });
240
+ const spanCtx = trace.setSpan(context.active(), span);
241
+ try {
242
+ yield await context.with(spanCtx, () => Promise.resolve(msg));
243
+ span.setStatus({ code: SpanStatusCode.OK });
244
+ }
245
+ catch (err) {
246
+ span.setStatus({
247
+ code: SpanStatusCode.ERROR,
248
+ message: err instanceof Error ? err.message : String(err),
249
+ });
250
+ span.recordException(err);
251
+ throw err;
252
+ }
253
+ finally {
254
+ span.end();
255
+ }
256
+ }
257
+ };
258
+ }
259
+ return Reflect.get(target, prop, receiver);
260
+ },
261
+ });
262
+ };
263
+ }
264
+ function wrapJetStreamClient(js, tracer) {
265
+ return new Proxy(js, {
266
+ get(target, prop, receiver) {
267
+ switch (prop) {
268
+ case "publish":
269
+ return tracedJsPublish(target, tracer);
270
+ case "fetch":
271
+ return tracedJsFetch(target, tracer);
272
+ case "pullSubscribe":
273
+ return tracedJsPullSubscribe(target, tracer);
274
+ default:
275
+ return Reflect.get(target, prop, receiver);
276
+ }
277
+ },
278
+ });
279
+ }
280
+ // ---------------------------------------------------------------------------
281
+ // Public factory
282
+ // ---------------------------------------------------------------------------
283
+ /**
284
+ * Wraps an existing NatsConnection with OpenTelemetry tracing.
285
+ *
286
+ * Publish, subscribe, and request/reply operations emit spans and propagate
287
+ * W3C TraceContext via NATS message headers. Requires NATS Server v2.2+ for
288
+ * header support.
289
+ *
290
+ * @example
291
+ * ```ts
292
+ * import { connect } from "nats";
293
+ * import { withTracing } from "@instrumentation-node/otel-nats";
294
+ *
295
+ * const nc = await connect({ servers: "localhost:4222" });
296
+ * const tnc = withTracing(nc);
297
+ * tnc.publish("orders.created", data);
298
+ * ```
299
+ */
300
+ export function withTracing(nc, opts = {}) {
301
+ if (nc[TRACING_SYMBOL]) {
302
+ return nc; // already wrapped — prevent double instrumentation
303
+ }
304
+ const tracer = resolveTracer(opts);
305
+ // Warn when server doesn't support headers (pre-NATS 2.2)
306
+ const serverInfo = nc.info;
307
+ if (serverInfo && serverInfo.headers === false) {
308
+ console.warn("[@instrumentation-node/otel-nats] Connected NATS server does not support " +
309
+ "message headers. Trace context will not propagate. Upgrade to NATS Server v2.2+.");
310
+ }
311
+ return new Proxy(nc, {
312
+ get(target, prop, receiver) {
313
+ switch (prop) {
314
+ case TRACING_SYMBOL:
315
+ return true;
316
+ case "publish":
317
+ return tracedPublish(target, tracer);
318
+ case "subscribe":
319
+ return tracedSubscribe(target, tracer);
320
+ case "request":
321
+ return tracedRequest(target, tracer);
322
+ case "jetstream":
323
+ return (...args) => wrapJetStreamClient(target.jetstream(...args), tracer);
324
+ default:
325
+ return Reflect.get(target, prop, receiver);
326
+ }
327
+ },
328
+ });
329
+ }
330
+ //# sourceMappingURL=tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/tracing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The instrumentation scope name used when creating the OTel Tracer.
3
+ * Follows the OTel contrib convention: the module's canonical import path.
4
+ */
5
+ export declare const INSTRUMENTATION_NAME = "github.com/ryanggdev/instrumentation-node/otel-nats";
6
+ /**
7
+ * The version of this instrumentation package.
8
+ */
9
+ export declare const INSTRUMENTATION_VERSION = "0.2.0";
10
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,wDACsB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,uBAAuB,UAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The instrumentation scope name used when creating the OTel Tracer.
3
+ * Follows the OTel contrib convention: the module's canonical import path.
4
+ */
5
+ export const INSTRUMENTATION_NAME = "github.com/ryanggdev/instrumentation-node/otel-nats";
6
+ /**
7
+ * The version of this instrumentation package.
8
+ */
9
+ export const INSTRUMENTATION_VERSION = "0.2.0";
10
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,qDAAqD,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { withTracing } from "./tracing";
2
+ export type { TracingOptions } from "./tracing";
3
+ export { NatsHeaderCarrier, natsHeaderGetter, natsHeaderSetter, } from "./propagation";
4
+ export { INSTRUMENTATION_NAME, INSTRUMENTATION_VERSION, } from "./version";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { TextMapGetter, TextMapSetter } from "@opentelemetry/api";
2
+ import type { MsgHdrs } from "nats";
3
+ /**
4
+ * NatsHeaderCarrier adapts a NATS MsgHdrs object to the OTel
5
+ * TextMapGetter / TextMapSetter interfaces, enabling W3C TraceContext
6
+ * inject/extract via NATS message headers.
7
+ *
8
+ * Mirrors otelnats.HeaderCarrier from instrumentation-go.
9
+ */
10
+ export declare class NatsHeaderCarrier implements TextMapGetter<MsgHdrs>, TextMapSetter<MsgHdrs> {
11
+ /**
12
+ * Creates a NatsHeaderCarrier wrapping existing headers, or a fresh
13
+ * MsgHdrs instance when none are provided.
14
+ */
15
+ static forHeaders(existing?: MsgHdrs): {
16
+ carrier: NatsHeaderCarrier;
17
+ hdrs: MsgHdrs;
18
+ };
19
+ get(carrier: MsgHdrs, key: string): string | undefined;
20
+ keys(carrier: MsgHdrs): string[];
21
+ set(carrier: MsgHdrs, key: string, value: string): void;
22
+ }
23
+ /**
24
+ * Module-level singleton instances. Using singletons (rather than creating
25
+ * new instances per call) matches the nats.node pattern and avoids allocation
26
+ * on every message.
27
+ */
28
+ export declare const natsHeaderSetter: TextMapSetter<MsgHdrs>;
29
+ export declare const natsHeaderGetter: TextMapGetter<MsgHdrs>;
30
+ //# sourceMappingURL=propagation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propagation.d.ts","sourceRoot":"","sources":["../../src/propagation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC;;;;;;GAMG;AACH,qBAAa,iBACX,YAAW,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC;IAEzD;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG;QACrC,OAAO,EAAE,iBAAiB,CAAC;QAC3B,IAAI,EAAE,OAAO,CAAC;KACf;IAKD,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMtD,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE;IAIhC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAGxD;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,OAAO,CAC3B,CAAC;AAC1B,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,OAAO,CAC3B,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { Tracer, TracerProvider } from "@opentelemetry/api";
2
+ import type { NatsConnection } from "nats";
3
+ export interface TracingOptions {
4
+ /**
5
+ * A TracerProvider to use when creating the tracer.
6
+ * Defaults to the global TracerProvider via `trace.getTracerProvider()`.
7
+ * Prefer passing a provider over a pre-built tracer so the OTel SDK
8
+ * controls tracer lifecycle (follows OTel Go Contrib guideline).
9
+ */
10
+ tracerProvider?: TracerProvider;
11
+ /**
12
+ * A pre-built Tracer. When supplied, overrides `tracerProvider`.
13
+ * Use when you need precise tracer control in tests.
14
+ */
15
+ tracer?: Tracer;
16
+ /**
17
+ * Instrumentation scope name reported to the OTel SDK.
18
+ * Defaults to the package's canonical name.
19
+ */
20
+ instrumentationName?: string;
21
+ /**
22
+ * Instrumentation scope version reported to the OTel SDK.
23
+ * Defaults to the package version.
24
+ */
25
+ instrumentationVersion?: string;
26
+ }
27
+ /**
28
+ * Wraps an existing NatsConnection with OpenTelemetry tracing.
29
+ *
30
+ * Publish, subscribe, and request/reply operations emit spans and propagate
31
+ * W3C TraceContext via NATS message headers. Requires NATS Server v2.2+ for
32
+ * header support.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { connect } from "nats";
37
+ * import { withTracing } from "@instrumentation-node/otel-nats";
38
+ *
39
+ * const nc = await connect({ servers: "localhost:4222" });
40
+ * const tnc = withTracing(nc);
41
+ * tnc.publish("orders.created", data);
42
+ * ```
43
+ */
44
+ export declare function withTracing(nc: NatsConnection, opts?: TracingOptions): NatsConnection;
45
+ //# sourceMappingURL=tracing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/tracing.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAc,MAAM,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EASV,cAAc,EAQf,MAAM,MAAM,CAAC;AAUd,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AA4ZD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,cAAc,EAClB,IAAI,GAAE,cAAmB,GACxB,cAAc,CAmChB"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The instrumentation scope name used when creating the OTel Tracer.
3
+ * Follows the OTel contrib convention: the module's canonical import path.
4
+ */
5
+ export declare const INSTRUMENTATION_NAME = "github.com/ryanggdev/instrumentation-node/otel-nats";
6
+ /**
7
+ * The version of this instrumentation package.
8
+ */
9
+ export declare const INSTRUMENTATION_VERSION = "0.2.0";
10
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,wDACsB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,uBAAuB,UAAU,CAAC"}
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@instrumentation-node/otel-nats",
3
+ "version": "0.2.0",
4
+ "description": "OpenTelemetry tracing instrumentation for the NATS Node.js client",
5
+ "keywords": [
6
+ "nats",
7
+ "opentelemetry",
8
+ "otel",
9
+ "tracing",
10
+ "instrumentation",
11
+ "messaging"
12
+ ],
13
+ "license": "Apache-2.0",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/ryanggdev/instrumentation-node.git",
17
+ "directory": "otel-nats"
18
+ },
19
+ "author": "ryanggdev",
20
+ "engines": {
21
+ "node": ">=18.0.0"
22
+ },
23
+ "main": "./dist/cjs/index.js",
24
+ "module": "./dist/esm/index.js",
25
+ "types": "./dist/types/index.d.ts",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/types/index.d.ts",
29
+ "import": "./dist/esm/index.js",
30
+ "require": "./dist/cjs/index.js"
31
+ }
32
+ },
33
+ "files": [
34
+ "dist/",
35
+ "LICENSE",
36
+ "README.md"
37
+ ],
38
+ "scripts": {
39
+ "build:cjs": "tsc -p tsconfig.build.json --module commonjs --moduleResolution node --outDir dist/cjs",
40
+ "build:esm": "tsc -p tsconfig.build.json --module es2020 --moduleResolution node --outDir dist/esm",
41
+ "build:types": "tsc -p tsconfig.build.json --declaration --declarationMap --emitDeclarationOnly --outDir dist/types",
42
+ "build": "npm run build:cjs && npm run build:esm && npm run build:types && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json && find dist/esm -name '*.js' -exec sed -i -E 's/from \"(\\.[^\"]*)\"/from \"\\1.js\"/g' {} + && echo '{\"type\":\"module\"}' > dist/esm/package.json",
43
+ "clean": "rm -rf dist",
44
+ "test": "ava --timeout=60000",
45
+ "lint": "eslint src/ test/ --ext .ts",
46
+ "typecheck": "tsc --noEmit",
47
+ "prepublishOnly": "npm run clean && npm run build"
48
+ },
49
+ "peerDependencies": {
50
+ "@opentelemetry/api": "^1.0.0",
51
+ "nats": "^2.13.0"
52
+ },
53
+ "devDependencies": {
54
+ "@opentelemetry/api": "^1.9.0",
55
+ "@opentelemetry/core": "^1.30.0",
56
+ "@opentelemetry/exporter-trace-otlp-http": "^0.57.0",
57
+ "@opentelemetry/sdk-trace-base": "^1.30.0",
58
+ "@opentelemetry/sdk-trace-node": "^1.30.0",
59
+ "@types/node": "^20.0.0",
60
+ "@types/ws": "^8.18.1",
61
+ "ava": "^6.1.0",
62
+ "nats": "^2.13.1",
63
+ "tsx": "^4.19.0",
64
+ "typescript": "^5.4.0",
65
+ "ws": "^8.20.0"
66
+ },
67
+ "ava": {
68
+ "files": [
69
+ "test/**/*.test.ts",
70
+ "!test/helpers/**"
71
+ ],
72
+ "extensions": [
73
+ "ts"
74
+ ],
75
+ "require": [
76
+ "tsx"
77
+ ],
78
+ "timeout": "60s"
79
+ }
80
+ }