nugi-ts-logs-sdk 1.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 (114) hide show
  1. package/README.md +218 -0
  2. package/dist/adapters/common.d.ts +43 -0
  3. package/dist/adapters/common.d.ts.map +1 -0
  4. package/dist/adapters/common.js +153 -0
  5. package/dist/adapters/common.js.map +1 -0
  6. package/dist/adapters/express.d.ts +29 -0
  7. package/dist/adapters/express.d.ts.map +1 -0
  8. package/dist/adapters/express.js +62 -0
  9. package/dist/adapters/express.js.map +1 -0
  10. package/dist/adapters/fastify.d.ts +18 -0
  11. package/dist/adapters/fastify.d.ts.map +1 -0
  12. package/dist/adapters/fastify.js +78 -0
  13. package/dist/adapters/fastify.js.map +1 -0
  14. package/dist/adapters/nestjs.d.ts +93 -0
  15. package/dist/adapters/nestjs.d.ts.map +1 -0
  16. package/dist/adapters/nestjs.js +310 -0
  17. package/dist/adapters/nestjs.js.map +1 -0
  18. package/dist/client.d.ts +66 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +299 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/config.d.ts +116 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +51 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/index.d.ts +32 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +96 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/instrumentation/db-error.d.ts +27 -0
  31. package/dist/instrumentation/db-error.d.ts.map +1 -0
  32. package/dist/instrumentation/db-error.js +153 -0
  33. package/dist/instrumentation/db-error.js.map +1 -0
  34. package/dist/instrumentation/query-capture.d.ts +39 -0
  35. package/dist/instrumentation/query-capture.d.ts.map +1 -0
  36. package/dist/instrumentation/query-capture.js +359 -0
  37. package/dist/instrumentation/query-capture.js.map +1 -0
  38. package/dist/internal/breadcrumbs.d.ts +32 -0
  39. package/dist/internal/breadcrumbs.d.ts.map +1 -0
  40. package/dist/internal/breadcrumbs.js +31 -0
  41. package/dist/internal/breadcrumbs.js.map +1 -0
  42. package/dist/internal/console-capture.d.ts +31 -0
  43. package/dist/internal/console-capture.d.ts.map +1 -0
  44. package/dist/internal/console-capture.js +113 -0
  45. package/dist/internal/console-capture.js.map +1 -0
  46. package/dist/internal/context.d.ts +21 -0
  47. package/dist/internal/context.d.ts.map +1 -0
  48. package/dist/internal/context.js +42 -0
  49. package/dist/internal/context.js.map +1 -0
  50. package/dist/internal/diagnostics.d.ts +9 -0
  51. package/dist/internal/diagnostics.d.ts.map +1 -0
  52. package/dist/internal/diagnostics.js +43 -0
  53. package/dist/internal/diagnostics.js.map +1 -0
  54. package/dist/internal/http-utils.d.ts +16 -0
  55. package/dist/internal/http-utils.d.ts.map +1 -0
  56. package/dist/internal/http-utils.js +81 -0
  57. package/dist/internal/http-utils.js.map +1 -0
  58. package/dist/internal/ids.d.ts +9 -0
  59. package/dist/internal/ids.d.ts.map +1 -0
  60. package/dist/internal/ids.js +34 -0
  61. package/dist/internal/ids.js.map +1 -0
  62. package/dist/internal/metadata.d.ts +4 -0
  63. package/dist/internal/metadata.d.ts.map +1 -0
  64. package/dist/internal/metadata.js +151 -0
  65. package/dist/internal/metadata.js.map +1 -0
  66. package/dist/internal/propagation.d.ts +30 -0
  67. package/dist/internal/propagation.d.ts.map +1 -0
  68. package/dist/internal/propagation.js +99 -0
  69. package/dist/internal/propagation.js.map +1 -0
  70. package/dist/internal/sanitize.d.ts +11 -0
  71. package/dist/internal/sanitize.d.ts.map +1 -0
  72. package/dist/internal/sanitize.js +77 -0
  73. package/dist/internal/sanitize.js.map +1 -0
  74. package/dist/internal/stacktrace.d.ts +29 -0
  75. package/dist/internal/stacktrace.d.ts.map +1 -0
  76. package/dist/internal/stacktrace.js +182 -0
  77. package/dist/internal/stacktrace.js.map +1 -0
  78. package/dist/signals/checkins.d.ts +28 -0
  79. package/dist/signals/checkins.d.ts.map +1 -0
  80. package/dist/signals/checkins.js +76 -0
  81. package/dist/signals/checkins.js.map +1 -0
  82. package/dist/signals/logger.d.ts +26 -0
  83. package/dist/signals/logger.d.ts.map +1 -0
  84. package/dist/signals/logger.js +63 -0
  85. package/dist/signals/logger.js.map +1 -0
  86. package/dist/signals/metrics.d.ts +58 -0
  87. package/dist/signals/metrics.d.ts.map +1 -0
  88. package/dist/signals/metrics.js +166 -0
  89. package/dist/signals/metrics.js.map +1 -0
  90. package/dist/signals/tracer.d.ts +77 -0
  91. package/dist/signals/tracer.d.ts.map +1 -0
  92. package/dist/signals/tracer.js +210 -0
  93. package/dist/signals/tracer.js.map +1 -0
  94. package/dist/transport/batcher.d.ts +31 -0
  95. package/dist/transport/batcher.d.ts.map +1 -0
  96. package/dist/transport/batcher.js +129 -0
  97. package/dist/transport/batcher.js.map +1 -0
  98. package/dist/transport/legacy-logs.d.ts +21 -0
  99. package/dist/transport/legacy-logs.d.ts.map +1 -0
  100. package/dist/transport/legacy-logs.js +61 -0
  101. package/dist/transport/legacy-logs.js.map +1 -0
  102. package/dist/transport/retry.d.ts +16 -0
  103. package/dist/transport/retry.d.ts.map +1 -0
  104. package/dist/transport/retry.js +43 -0
  105. package/dist/transport/retry.js.map +1 -0
  106. package/dist/transport/transport.d.ts +14 -0
  107. package/dist/transport/transport.d.ts.map +1 -0
  108. package/dist/transport/transport.js +70 -0
  109. package/dist/transport/transport.js.map +1 -0
  110. package/dist/types.d.ts +136 -0
  111. package/dist/types.d.ts.map +1 -0
  112. package/dist/types.js +8 -0
  113. package/dist/types.js.map +1 -0
  114. package/package.json +56 -0
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = void 0;
4
+ const context_1 = require("../internal/context");
5
+ /**
6
+ * Structured logger. Every record is automatically correlated with the active
7
+ * trace/span (via AsyncLocalStorage) so logs join up with request spans. Each
8
+ * record is also recorded as a breadcrumb (when a buffer is provided) so it can
9
+ * travel with any subsequent error.
10
+ */
11
+ class Logger {
12
+ constructor(sink, boundAttributes = {}, breadcrumbs) {
13
+ this.sink = sink;
14
+ this.boundAttributes = boundAttributes;
15
+ this.breadcrumbs = breadcrumbs;
16
+ }
17
+ /** Create a child logger with additional default attributes merged in. */
18
+ child(attributes) {
19
+ return new Logger(this.sink, { ...this.boundAttributes, ...attributes }, this.breadcrumbs);
20
+ }
21
+ debug(message, attributes) {
22
+ this.write('debug', message, attributes);
23
+ }
24
+ info(message, attributes) {
25
+ this.write('info', message, attributes);
26
+ }
27
+ warn(message, attributes) {
28
+ this.write('warn', message, attributes);
29
+ }
30
+ error(message, attributes) {
31
+ this.write('error', message, attributes);
32
+ }
33
+ fatal(message, attributes) {
34
+ this.write('fatal', message, attributes);
35
+ }
36
+ log(level, message, attributes) {
37
+ this.write(level, message, attributes);
38
+ }
39
+ write(level, message, attributes) {
40
+ const span = (0, context_1.getActiveSpanContext)();
41
+ const timestamp = new Date().toISOString();
42
+ const merged = this.mergeAttributes(attributes);
43
+ const event = {
44
+ kind: 'log',
45
+ level,
46
+ message: String(message),
47
+ timestamp,
48
+ traceId: span?.traceId,
49
+ spanId: span?.spanId,
50
+ attributes: merged,
51
+ };
52
+ this.breadcrumbs?.add({ timestamp, type: 'log', level, message: String(message), data: merged });
53
+ this.sink(event);
54
+ }
55
+ mergeAttributes(attributes) {
56
+ if (!attributes && Object.keys(this.boundAttributes).length === 0) {
57
+ return undefined;
58
+ }
59
+ return { ...this.boundAttributes, ...(attributes || {}) };
60
+ }
61
+ }
62
+ exports.Logger = Logger;
63
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/signals/logger.ts"],"names":[],"mappings":";;;AACA,iDAA2D;AAK3D;;;;;GAKG;AACH,MAAa,MAAM;IACjB,YACmB,IAAe,EACf,kBAA8B,EAAE,EAChC,WAA8B;QAF9B,SAAI,GAAJ,IAAI,CAAW;QACf,oBAAe,GAAf,eAAe,CAAiB;QAChC,gBAAW,GAAX,WAAW,CAAmB;IAC9C,CAAC;IAEJ,0EAA0E;IAC1E,KAAK,CAAC,UAAsB;QAC1B,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7F,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,UAAuB;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,UAAuB;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,UAAuB;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,CAAC,OAAe,EAAE,UAAuB;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,CAAC,OAAe,EAAE,UAAuB;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,UAAuB;QAC3D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CACX,KAAe,EACf,OAAe,EACf,UAAuB;QAEvB,MAAM,IAAI,GAAG,IAAA,8BAAoB,GAAE,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,KAAK,GAAa;YACtB,IAAI,EAAE,KAAK;YACX,KAAK;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;YACxB,SAAS;YACT,OAAO,EAAE,IAAI,EAAE,OAAO;YACtB,MAAM,EAAE,IAAI,EAAE,MAAM;YACpB,UAAU,EAAE,MAAM;SACnB,CAAC;QACF,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAEO,eAAe,CAAC,UAAuB;QAC7C,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;CACF;AA3DD,wBA2DC"}
@@ -0,0 +1,58 @@
1
+ import { Attributes, MetricType } from '../types';
2
+ import { BeforeSendMetric, MetricAttributeValue } from '../config';
3
+ import { EventSink } from './logger';
4
+ export interface MetricsOptions {
5
+ beforeSendMetric?: BeforeSendMetric;
6
+ maxAttributesBytes?: number;
7
+ /** Global attributes applied to every metric. */
8
+ initialAttributes?: Record<string, MetricAttributeValue>;
9
+ }
10
+ /**
11
+ * Metrics facade producing counter / gauge / histogram measurements. Each
12
+ * measurement is emitted as a discrete MetricEvent (the backend aggregates),
13
+ * correlated with the active trace when one exists (exemplars).
14
+ *
15
+ * Compatible aliases: `count` → counter, `distribution` → histogram.
16
+ */
17
+ export declare class Metrics {
18
+ private readonly sink;
19
+ private globalAttributes;
20
+ private readonly beforeSend?;
21
+ private readonly maxAttributesBytes;
22
+ constructor(sink: EventSink, options?: MetricsOptions);
23
+ /** Global attributes applied to every metric. */
24
+ setAttributes(attrs: Record<string, MetricAttributeValue>): void;
25
+ clearAttributes(): void;
26
+ getAttributes(): Record<string, MetricAttributeValue>;
27
+ /**
28
+ * Run `fn` with a nested attribute scope. Attributes set via
29
+ * `setScopeAttributes` inside the callback apply only for that scope.
30
+ */
31
+ withScope<T>(attrs: Record<string, MetricAttributeValue>, fn: () => T): T;
32
+ /** Monotonic counter. `add` defaults to +1. */
33
+ counter(name: string, unit?: string): {
34
+ add(value?: number, attributes?: Attributes): void;
35
+ };
36
+ /** Nest-SDK-compatible alias for `counter`. */
37
+ count(name: string, value?: number, options?: {
38
+ unit?: string;
39
+ attributes?: Attributes;
40
+ }): void;
41
+ /** Last-value gauge. */
42
+ gauge(name: string, unit?: string): {
43
+ set(value: number, attributes?: Attributes): void;
44
+ };
45
+ /** Distribution of recorded values (durations, sizes). */
46
+ histogram(name: string, unit?: string): {
47
+ record(value: number, attributes?: Attributes): void;
48
+ };
49
+ /** Nest-SDK-compatible alias for `histogram`. */
50
+ distribution(name: string, value: number, options?: {
51
+ unit?: string;
52
+ attributes?: Attributes;
53
+ }): void;
54
+ /** One-shot measurement without holding an instrument reference. */
55
+ record(name: string, type: MetricType, value: number, attributes?: Attributes, unit?: string): void;
56
+ private instrument;
57
+ }
58
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/signals/metrics.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EAEV,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EAErB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAYrC,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAC1D;AAED;;;;;;GAMG;AACH,qBAAa,OAAO;IAMhB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALvB,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAmB;IAC/C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAGzB,IAAI,EAAE,SAAS,EAChC,OAAO,GAAE,cAAmB;IAS9B,iDAAiD;IACjD,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,IAAI;IAOhE,eAAe,IAAI,IAAI;IAIvB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAIrD;;;OAGG;IACH,SAAS,CAAC,CAAC,EACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC3C,EAAE,EAAE,MAAM,CAAC,GACV,CAAC;IAWJ,+CAA+C;IAC/C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;KAAE;IAQ5F,+CAA+C;IAC/C,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,KAAK,SAAI,EACT,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,UAAU,CAAA;KAAE,GACnD,IAAI;IAIP,wBAAwB;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;KAAE;IAQzF,0DAA0D;IAC1D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;KAAE;IAQhG,iDAAiD;IACjD,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,UAAU,CAAA;KAAE,GACnD,IAAI;IAIP,oEAAoE;IACpE,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,UAAU,EACvB,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI;IAIP,OAAO,CAAC,UAAU;CA2CnB"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Metrics = void 0;
4
+ const async_hooks_1 = require("async_hooks");
5
+ const context_1 = require("../internal/context");
6
+ const scopeAls = new async_hooks_1.AsyncLocalStorage();
7
+ /**
8
+ * Metrics facade producing counter / gauge / histogram measurements. Each
9
+ * measurement is emitted as a discrete MetricEvent (the backend aggregates),
10
+ * correlated with the active trace when one exists (exemplars).
11
+ *
12
+ * Compatible aliases: `count` → counter, `distribution` → histogram.
13
+ */
14
+ class Metrics {
15
+ constructor(sink, options = {}) {
16
+ this.sink = sink;
17
+ this.globalAttributes = {};
18
+ this.beforeSend = options.beforeSendMetric;
19
+ this.maxAttributesBytes = options.maxAttributesBytes ?? 2048;
20
+ if (options.initialAttributes) {
21
+ this.globalAttributes = sanitizeAttrs(options.initialAttributes);
22
+ }
23
+ }
24
+ /** Global attributes applied to every metric. */
25
+ setAttributes(attrs) {
26
+ this.globalAttributes = {
27
+ ...this.globalAttributes,
28
+ ...sanitizeAttrs(attrs),
29
+ };
30
+ }
31
+ clearAttributes() {
32
+ this.globalAttributes = {};
33
+ }
34
+ getAttributes() {
35
+ return { ...this.globalAttributes, ...currentScopeAttributes() };
36
+ }
37
+ /**
38
+ * Run `fn` with a nested attribute scope. Attributes set via
39
+ * `setScopeAttributes` inside the callback apply only for that scope.
40
+ */
41
+ withScope(attrs, fn) {
42
+ const parent = scopeAls.getStore();
43
+ const next = {
44
+ attributes: {
45
+ ...(parent?.attributes || {}),
46
+ ...sanitizeAttrs(attrs),
47
+ },
48
+ };
49
+ return scopeAls.run(next, fn);
50
+ }
51
+ /** Monotonic counter. `add` defaults to +1. */
52
+ counter(name, unit) {
53
+ const instrument = this.instrument(name, 'counter', unit);
54
+ return {
55
+ add: (value = 1, attributes) => instrument.record(value, attributes),
56
+ };
57
+ }
58
+ /** Nest-SDK-compatible alias for `counter`. */
59
+ count(name, value = 1, options) {
60
+ this.counter(name, options?.unit).add(value, options?.attributes);
61
+ }
62
+ /** Last-value gauge. */
63
+ gauge(name, unit) {
64
+ const instrument = this.instrument(name, 'gauge', unit);
65
+ return {
66
+ set: (value, attributes) => instrument.record(value, attributes),
67
+ };
68
+ }
69
+ /** Distribution of recorded values (durations, sizes). */
70
+ histogram(name, unit) {
71
+ const instrument = this.instrument(name, 'histogram', unit);
72
+ return {
73
+ record: (value, attributes) => instrument.record(value, attributes),
74
+ };
75
+ }
76
+ /** Nest-SDK-compatible alias for `histogram`. */
77
+ distribution(name, value, options) {
78
+ this.histogram(name, options?.unit).record(value, options?.attributes);
79
+ }
80
+ /** One-shot measurement without holding an instrument reference. */
81
+ record(name, type, value, attributes, unit) {
82
+ this.instrument(name, type, unit).record(value, attributes);
83
+ }
84
+ instrument(name, type, unit) {
85
+ return {
86
+ record: (value, attributes) => {
87
+ if (typeof value !== 'number' || Number.isNaN(value))
88
+ return;
89
+ const span = (0, context_1.getActiveSpanContext)();
90
+ const merged = truncateAttrs({
91
+ ...this.getAttributes(),
92
+ ...sanitizeAttrs(attributes),
93
+ }, this.maxAttributesBytes);
94
+ let payload = {
95
+ name,
96
+ type: type === 'histogram' ? 'histogram' : type,
97
+ value,
98
+ unit,
99
+ attributes: merged,
100
+ timestamp: new Date().toISOString(),
101
+ };
102
+ if (this.beforeSend) {
103
+ try {
104
+ payload = this.beforeSend(payload);
105
+ }
106
+ catch {
107
+ return;
108
+ }
109
+ if (!payload)
110
+ return;
111
+ }
112
+ const event = {
113
+ kind: 'metric',
114
+ name: payload.name,
115
+ type: (payload.type === 'distribution' ? 'histogram' : payload.type),
116
+ value: payload.value,
117
+ unit: payload.unit,
118
+ timestamp: payload.timestamp,
119
+ traceId: span?.traceId,
120
+ spanId: span?.spanId,
121
+ attributes: payload.attributes,
122
+ };
123
+ this.sink(event);
124
+ },
125
+ };
126
+ }
127
+ }
128
+ exports.Metrics = Metrics;
129
+ function currentScopeAttributes() {
130
+ return scopeAls.getStore()?.attributes || {};
131
+ }
132
+ function sanitizeAttrs(attrs) {
133
+ if (!attrs)
134
+ return {};
135
+ const out = {};
136
+ for (const [k, v] of Object.entries(attrs)) {
137
+ if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
138
+ out[k] = v;
139
+ }
140
+ else if (v != null) {
141
+ out[k] = String(v);
142
+ }
143
+ }
144
+ return out;
145
+ }
146
+ function truncateAttrs(attrs, maxBytes) {
147
+ try {
148
+ const json = JSON.stringify(attrs);
149
+ if (json.length <= maxBytes)
150
+ return attrs;
151
+ const out = {};
152
+ let size = 2;
153
+ for (const [k, v] of Object.entries(attrs)) {
154
+ const piece = JSON.stringify({ [k]: v });
155
+ if (size + piece.length > maxBytes)
156
+ break;
157
+ out[k] = v;
158
+ size += piece.length;
159
+ }
160
+ return out;
161
+ }
162
+ catch {
163
+ return attrs;
164
+ }
165
+ }
166
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/signals/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { Attributes, RuntimeMetadata, SpanKind, SpanStatus } from '../types';
2
+ import { SpanContext } from '../internal/propagation';
3
+ import { EventSink } from './logger';
4
+ export interface StartSpanOptions {
5
+ kind?: SpanKind;
6
+ attributes?: Attributes;
7
+ /** Explicit parent; defaults to the active span, then a new root. */
8
+ parent?: SpanContext | null;
9
+ startTime?: Date;
10
+ }
11
+ export interface EndSpanOptions {
12
+ status?: SpanStatus;
13
+ statusMessage?: string;
14
+ endTime?: Date;
15
+ }
16
+ /** A single unit of work in a trace. Cheap no-op when its trace is not sampled. */
17
+ export declare class Span {
18
+ private readonly name;
19
+ private readonly ctx;
20
+ private readonly kind;
21
+ private readonly startTime;
22
+ private readonly sink;
23
+ private readonly runtimeProvider?;
24
+ private ended;
25
+ private status;
26
+ private statusMessage?;
27
+ private readonly attributes;
28
+ private readonly events;
29
+ private readonly startMs;
30
+ constructor(name: string, ctx: SpanContext, kind: SpanKind, startTime: Date, sink: EventSink, runtimeProvider?: (() => RuntimeMetadata) | undefined, attributes?: Attributes);
31
+ context(): SpanContext;
32
+ get traceId(): string;
33
+ get spanId(): string;
34
+ get isSampled(): boolean;
35
+ setAttribute(key: string, value: unknown): this;
36
+ setAttributes(attributes: Attributes): this;
37
+ addEvent(name: string, attributes?: Attributes): this;
38
+ setStatus(status: SpanStatus, message?: string): this;
39
+ /** Record an exception on the span and mark it errored. */
40
+ recordException(error: unknown): this;
41
+ /** Inject this span's context into an outbound header carrier. */
42
+ inject(carrier: Record<string, string>): Record<string, string>;
43
+ end(options?: EndSpanOptions): void;
44
+ }
45
+ export declare class Tracer {
46
+ private readonly sink;
47
+ private readonly sampleRate;
48
+ private readonly runtimeProvider?;
49
+ constructor(sink: EventSink, sampleRate: number, runtimeProvider?: (() => RuntimeMetadata) | undefined);
50
+ /**
51
+ * Start a span. Parent resolution order: explicit `options.parent`, then the
52
+ * active span (AsyncLocalStorage), then a new sampled-or-not root.
53
+ */
54
+ startSpan(name: string, options?: StartSpanOptions): Span;
55
+ /**
56
+ * Start a span, install it as the active context, run `fn`, and end the span
57
+ * automatically — handling both sync throws and rejected promises.
58
+ */
59
+ startActiveSpan<T>(name: string, options: StartSpanOptions, fn: (span: Span) => T): T;
60
+ /** The active span context on this async path, if any. */
61
+ activeContext(): SpanContext | undefined;
62
+ /**
63
+ * Emit a finished span without an active start/end lifecycle.
64
+ * Used by DB query capture and similar post-hoc timings.
65
+ */
66
+ recordFinished(name: string, durationMs: number, options?: {
67
+ kind?: SpanKind;
68
+ attributes?: Attributes;
69
+ status?: SpanStatus;
70
+ statusMessage?: string;
71
+ startTime?: Date;
72
+ endTime?: Date;
73
+ parent?: SpanContext | null;
74
+ }): void;
75
+ private deriveContext;
76
+ }
77
+ //# sourceMappingURL=tracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/signals/tracer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Tracer = exports.Span = void 0;
4
+ const propagation_1 = require("../internal/propagation");
5
+ const ids_1 = require("../internal/ids");
6
+ const context_1 = require("../internal/context");
7
+ /** A single unit of work in a trace. Cheap no-op when its trace is not sampled. */
8
+ class Span {
9
+ constructor(name, ctx, kind, startTime, sink, runtimeProvider, attributes) {
10
+ this.name = name;
11
+ this.ctx = ctx;
12
+ this.kind = kind;
13
+ this.startTime = startTime;
14
+ this.sink = sink;
15
+ this.runtimeProvider = runtimeProvider;
16
+ this.ended = false;
17
+ this.status = 'unset';
18
+ this.events = [];
19
+ this.attributes = { ...(attributes || {}) };
20
+ this.startMs = Date.now();
21
+ }
22
+ context() {
23
+ return this.ctx;
24
+ }
25
+ get traceId() {
26
+ return this.ctx.traceId;
27
+ }
28
+ get spanId() {
29
+ return this.ctx.spanId;
30
+ }
31
+ get isSampled() {
32
+ return this.ctx.sampled;
33
+ }
34
+ setAttribute(key, value) {
35
+ this.attributes[key] = value;
36
+ return this;
37
+ }
38
+ setAttributes(attributes) {
39
+ Object.assign(this.attributes, attributes);
40
+ return this;
41
+ }
42
+ addEvent(name, attributes) {
43
+ this.events.push({
44
+ name,
45
+ timestamp: new Date().toISOString(),
46
+ attributes,
47
+ });
48
+ return this;
49
+ }
50
+ setStatus(status, message) {
51
+ this.status = status;
52
+ this.statusMessage = message;
53
+ return this;
54
+ }
55
+ /** Record an exception on the span and mark it errored. */
56
+ recordException(error) {
57
+ const err = error instanceof Error ? error : new Error(String(error));
58
+ this.addEvent('exception', {
59
+ 'exception.type': err.name,
60
+ 'exception.message': err.message,
61
+ 'exception.stacktrace': err.stack,
62
+ });
63
+ return this.setStatus('error', err.message);
64
+ }
65
+ /** Inject this span's context into an outbound header carrier. */
66
+ inject(carrier) {
67
+ return (0, propagation_1.injectContext)(this.ctx, carrier);
68
+ }
69
+ end(options = {}) {
70
+ if (this.ended)
71
+ return;
72
+ this.ended = true;
73
+ if (options.status)
74
+ this.status = options.status;
75
+ if (options.statusMessage)
76
+ this.statusMessage = options.statusMessage;
77
+ if (!this.ctx.sampled)
78
+ return; // dropped by sampling — emit nothing
79
+ const endTime = options.endTime ?? new Date();
80
+ const durationMs = Math.max(0, Date.now() - this.startMs);
81
+ const event = {
82
+ kind: 'span',
83
+ traceId: this.ctx.traceId,
84
+ spanId: this.ctx.spanId,
85
+ parentSpanId: this.ctx.parentSpanId,
86
+ name: this.name,
87
+ spanKind: this.kind,
88
+ startTime: this.startTime.toISOString(),
89
+ endTime: endTime.toISOString(),
90
+ durationMs,
91
+ status: this.status,
92
+ statusMessage: this.statusMessage,
93
+ timestamp: this.startTime.toISOString(),
94
+ attributes: Object.keys(this.attributes).length > 0 ? this.attributes : undefined,
95
+ events: this.events.length > 0 ? this.events : undefined,
96
+ runtime: this.runtimeProvider?.(),
97
+ };
98
+ this.sink(event);
99
+ }
100
+ }
101
+ exports.Span = Span;
102
+ class Tracer {
103
+ constructor(sink, sampleRate, runtimeProvider) {
104
+ this.sink = sink;
105
+ this.sampleRate = sampleRate;
106
+ this.runtimeProvider = runtimeProvider;
107
+ }
108
+ /**
109
+ * Start a span. Parent resolution order: explicit `options.parent`, then the
110
+ * active span (AsyncLocalStorage), then a new sampled-or-not root.
111
+ */
112
+ startSpan(name, options = {}) {
113
+ const parent = options.parent !== undefined
114
+ ? options.parent
115
+ : (0, context_1.getActiveSpanContext)();
116
+ const ctx = this.deriveContext(parent);
117
+ return new Span(name, ctx, options.kind || 'internal', options.startTime ?? new Date(), this.sink, this.runtimeProvider, options.attributes);
118
+ }
119
+ /**
120
+ * Start a span, install it as the active context, run `fn`, and end the span
121
+ * automatically — handling both sync throws and rejected promises.
122
+ */
123
+ startActiveSpan(name, options, fn) {
124
+ const span = this.startSpan(name, options);
125
+ return (0, context_1.runWithContext)({ span: span.context() }, () => {
126
+ try {
127
+ const result = fn(span);
128
+ if (isPromise(result)) {
129
+ return result.then((value) => {
130
+ span.end();
131
+ return value;
132
+ }, (error) => {
133
+ span.recordException(error);
134
+ span.end({ status: 'error' });
135
+ throw error;
136
+ });
137
+ }
138
+ span.end();
139
+ return result;
140
+ }
141
+ catch (error) {
142
+ span.recordException(error);
143
+ span.end({ status: 'error' });
144
+ throw error;
145
+ }
146
+ });
147
+ }
148
+ /** The active span context on this async path, if any. */
149
+ activeContext() {
150
+ return (0, context_1.getActiveSpanContext)();
151
+ }
152
+ /**
153
+ * Emit a finished span without an active start/end lifecycle.
154
+ * Used by DB query capture and similar post-hoc timings.
155
+ */
156
+ recordFinished(name, durationMs, options = {}) {
157
+ try {
158
+ const endTime = options.endTime ?? new Date();
159
+ const startTime = options.startTime ??
160
+ new Date(endTime.getTime() - Math.max(0, durationMs));
161
+ const parent = options.parent !== undefined
162
+ ? options.parent
163
+ : (0, context_1.getActiveSpanContext)();
164
+ const ctx = this.deriveContext(parent);
165
+ if (!ctx.sampled)
166
+ return;
167
+ const event = {
168
+ kind: 'span',
169
+ traceId: ctx.traceId,
170
+ spanId: ctx.spanId,
171
+ parentSpanId: ctx.parentSpanId,
172
+ name,
173
+ spanKind: options.kind || 'client',
174
+ startTime: startTime.toISOString(),
175
+ endTime: endTime.toISOString(),
176
+ durationMs: Math.max(0, durationMs),
177
+ status: options.status || 'ok',
178
+ statusMessage: options.statusMessage,
179
+ timestamp: startTime.toISOString(),
180
+ attributes: options.attributes,
181
+ runtime: this.runtimeProvider?.(),
182
+ };
183
+ this.sink(event);
184
+ }
185
+ catch {
186
+ /* never break the host */
187
+ }
188
+ }
189
+ deriveContext(parent) {
190
+ if (parent) {
191
+ return {
192
+ traceId: parent.traceId,
193
+ spanId: (0, ids_1.generateSpanId)(),
194
+ parentSpanId: parent.spanId,
195
+ sampled: parent.sampled,
196
+ traceState: parent.traceState,
197
+ };
198
+ }
199
+ // New root: head-based sampling decision.
200
+ const sampled = Math.random() < this.sampleRate;
201
+ return (0, propagation_1.createRootContext)(sampled);
202
+ }
203
+ }
204
+ exports.Tracer = Tracer;
205
+ function isPromise(value) {
206
+ return (!!value &&
207
+ (typeof value === 'object' || typeof value === 'function') &&
208
+ typeof value.then === 'function');
209
+ }
210
+ //# sourceMappingURL=tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/signals/tracer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Resource, TelemetryEvent } from '../types';
2
+ import { ResolvedConfig } from '../config';
3
+ import { Transport } from './transport';
4
+ import { Diagnostics } from '../internal/diagnostics';
5
+ export declare class Batcher {
6
+ private readonly config;
7
+ private readonly resource;
8
+ private readonly transport;
9
+ private readonly diagnostics;
10
+ private buffer;
11
+ private timer?;
12
+ private flushing;
13
+ private droppedSinceLastFlush;
14
+ private closed;
15
+ constructor(config: ResolvedConfig, resource: Resource, transport: Transport, diagnostics: Diagnostics);
16
+ /** Add an event to the buffer. Non-blocking; triggers a flush when full. */
17
+ enqueue(event: TelemetryEvent): void;
18
+ /** Flush all currently buffered events. Never rejects. */
19
+ flush(): Promise<void>;
20
+ /**
21
+ * Attempt to deliver one batch with retries. Returns true on success.
22
+ * On a transient failure the batch is re-buffered (front) for a later cycle;
23
+ * on a fatal failure (e.g. 401/400) the batch is dropped.
24
+ */
25
+ private deliver;
26
+ /** Stop the timer and flush remaining events. Idempotent. */
27
+ shutdown(): Promise<void>;
28
+ /** Current number of buffered events (for tests/diagnostics). */
29
+ get size(): number;
30
+ }
31
+ //# sourceMappingURL=batcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batcher.d.ts","sourceRoot":"","sources":["../../src/transport/batcher.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiB,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,qBAAa,OAAO;IAQhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAV9B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,MAAM,CAAS;gBAGJ,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW;IAS3C,4EAA4E;IAC5E,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAgBpC,0DAA0D;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B5B;;;;OAIG;YACW,OAAO;IAgDrB,6DAA6D;IACvD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B,iEAAiE;IACjE,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}