@lad-tech/nsc-toolkit 1.28.0 → 1.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
- # [1.28.0](https://github.com/lad-tech/nsc-toolkit/compare/v1.27.0...v1.28.0) (2025-05-12)
1
+ ## [1.28.1](https://github.com/lad-tech/nsc-toolkit/compare/v1.28.0...v1.28.1) (2025-07-01)
2
2
 
3
3
 
4
- ### Features
4
+ ### Bug Fixes
5
5
 
6
- * Async event traces and tags ([#145](https://github.com/lad-tech/nsc-toolkit/issues/145)) ([02c3560](https://github.com/lad-tech/nsc-toolkit/commit/02c356051d295d528c4cc7758b2a310d37074424))
6
+ * Meter for batch consumer ([#147](https://github.com/lad-tech/nsc-toolkit/issues/147)) ([94a20b3](https://github.com/lad-tech/nsc-toolkit/commit/94a20b3b70caee64ac7a26998bc1019193c13516))
package/dist/Client.js CHANGED
@@ -51,6 +51,7 @@ class Client extends Root_1.Root {
51
51
  async startBatchWatch(fetcher, listener, eventName) {
52
52
  while (true) {
53
53
  const batch = [];
54
+ const baggages = [];
54
55
  const events = await fetcher.fetch();
55
56
  for await (const event of events) {
56
57
  let data;
@@ -64,9 +65,19 @@ class Client extends Root_1.Root {
64
65
  message.ack = event.ack.bind(event);
65
66
  message.nak = event.nak.bind(event);
66
67
  batch.push(message);
68
+ let baggage;
69
+ if (event.headers) {
70
+ baggage = this.getBaggageFromNATSHeader(event.headers);
71
+ if (baggage) {
72
+ baggages.push(baggage);
73
+ }
74
+ }
75
+ message.meter = new Meter_1.Meter(eventName, baggage);
76
+ }
77
+ if (batch.length > 0) {
78
+ const meter = new Meter_1.Meter(eventName, undefined, baggages);
79
+ listener.emit(eventName, batch, meter);
67
80
  }
68
- if (batch.length > 0)
69
- listener.emit(eventName, batch);
70
81
  }
71
82
  }
72
83
  getListener(serviceNameFrom, options) {
package/dist/Meter.js CHANGED
@@ -4,15 +4,34 @@ exports.Meter = void 0;
4
4
  const interfaces_1 = require("./interfaces");
5
5
  const opentelemetry = require("@opentelemetry/api");
6
6
  const Root_1 = require("./Root");
7
+ const node_crypto_1 = require("node:crypto");
7
8
  class Meter extends Root_1.Root {
8
- constructor(name, baggage) {
9
+ constructor(name, baggage, links) {
9
10
  super();
10
11
  this.name = name;
11
12
  this.baggage = baggage;
13
+ this.links = links;
14
+ this.SPAN_ID_BYTE_LENGTH = 8;
12
15
  }
13
16
  start() {
14
17
  const tracer = opentelemetry.trace.getTracer('');
15
- this.span = tracer.startSpan(this.name, { kind: opentelemetry.SpanKind.CONSUMER }, this.getContext(this.baggage));
18
+ const links = [];
19
+ if (this.links && this.links.length) {
20
+ this.links.forEach(link => {
21
+ links.push({
22
+ context: { traceId: link.traceId, spanId: link.spanId, traceFlags: link.traceFlags },
23
+ });
24
+ });
25
+ }
26
+ if (!this.baggage && links.length) {
27
+ this.baggage = {
28
+ traceId: links[0].context.traceId,
29
+ spanId: (0, node_crypto_1.randomBytes)(this.SPAN_ID_BYTE_LENGTH).toString('hex'),
30
+ traceFlags: links[0].context.traceFlags,
31
+ };
32
+ }
33
+ const linksOption = links.length ? { links } : {};
34
+ this.span = tracer.startSpan(this.name, { kind: opentelemetry.SpanKind.CONSUMER, ...linksOption }, this.getContext(this.baggage));
16
35
  }
17
36
  end(error) {
18
37
  if (!this.span) {
@@ -3,8 +3,10 @@ import { Root } from './Root';
3
3
  export declare class Meter extends Root implements EventMeter {
4
4
  private name;
5
5
  private baggage?;
6
+ private links?;
6
7
  private span?;
7
- constructor(name: string, baggage?: Baggage | undefined);
8
+ private readonly SPAN_ID_BYTE_LENGTH;
9
+ constructor(name: string, baggage?: Baggage | undefined, links?: Baggage[] | undefined);
8
10
  start(): void;
9
11
  end(error?: Error): void;
10
12
  measure<T extends (...args: any[]) => any>(func: T, arg: Parameters<T>, context: unknown, tag?: Tag): ReturnType<T>;
@@ -138,7 +138,7 @@ export interface Listener<E extends Emitter> {
138
138
  off<A extends keyof E>(action: A, handler: E[A]): void;
139
139
  }
140
140
  export interface ListenerBatch<E extends Emitter> {
141
- on<A extends keyof E>(action: A, handler: (params: Array<Parameters<E[A]>[0]>) => void): void;
141
+ on<A extends keyof E>(action: A, handler: (params: Array<Parameters<E[A]>[0]>, meter: EventMeter) => void): void;
142
142
  off<A extends keyof E>(action: A, handler: (params: Array<Parameters<E[A]>[0]>) => void): void;
143
143
  }
144
144
  export interface HttpSettings {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lad-tech/nsc-toolkit",
3
- "version": "1.28.0",
3
+ "version": "1.28.1",
4
4
  "description": "Toolkit for create microservices around NATS",
5
5
  "main": "dist/index.js",
6
6
  "types": "./dist/types/index.d.ts",