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,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BreadcrumbBuffer = void 0;
4
+ /**
5
+ * Fixed-capacity ring buffer of breadcrumbs. Oldest entries are dropped once
6
+ * capacity is reached. A snapshot is attached to error events so the trail that
7
+ * led to a failure travels with it.
8
+ */
9
+ class BreadcrumbBuffer {
10
+ constructor(capacity) {
11
+ this.capacity = capacity;
12
+ this.items = [];
13
+ }
14
+ add(crumb) {
15
+ if (this.capacity <= 0)
16
+ return;
17
+ this.items.push(crumb);
18
+ if (this.items.length > this.capacity) {
19
+ this.items.splice(0, this.items.length - this.capacity);
20
+ }
21
+ }
22
+ /** Oldest-first snapshot suitable for attaching to an event. */
23
+ snapshot() {
24
+ return this.items.slice();
25
+ }
26
+ clear() {
27
+ this.items.length = 0;
28
+ }
29
+ }
30
+ exports.BreadcrumbBuffer = BreadcrumbBuffer;
31
+ //# sourceMappingURL=breadcrumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.js","sourceRoot":"","sources":["../../src/internal/breadcrumbs.ts"],"names":[],"mappings":";;;AAmBA;;;;GAIG;AACH,MAAa,gBAAgB;IAG3B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAF5B,UAAK,GAAiB,EAAE,CAAC;IAEM,CAAC;IAEjD,GAAG,CAAC,KAAiB;QACnB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC;YAAE,OAAO;QAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,CAAC;CACF;AArBD,4CAqBC"}
@@ -0,0 +1,31 @@
1
+ import { TelemetryEvent } from '../types';
2
+ import { BreadcrumbBuffer } from './breadcrumbs';
3
+ type ConsoleMethod = 'debug' | 'info' | 'log' | 'warn' | 'error';
4
+ export interface ConsoleCaptureOptions {
5
+ /** Which console methods to intercept. */
6
+ levels: ConsoleMethod[];
7
+ /** Emit each console call as a shippable log event (so services report even
8
+ * without HTTP traffic). When false, calls only become breadcrumbs. */
9
+ asLogs: boolean;
10
+ }
11
+ /**
12
+ * Monkey-patches the global console so a service's own log output is captured
13
+ * as first-class telemetry — no HTTP request required. Each call becomes a
14
+ * breadcrumb and (optionally) a log event. Original console behaviour is always
15
+ * preserved and restored on stop; capture is re-entrancy guarded so the SDK's
16
+ * own logging can never recurse.
17
+ */
18
+ export declare class ConsoleCapture {
19
+ private readonly sink;
20
+ private readonly breadcrumbs;
21
+ private readonly options;
22
+ private originals;
23
+ private patched;
24
+ private inHandler;
25
+ constructor(sink: (event: TelemetryEvent) => void, breadcrumbs: BreadcrumbBuffer, options: ConsoleCaptureOptions);
26
+ start(): void;
27
+ stop(): void;
28
+ private handle;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=console-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-capture.d.ts","sourceRoot":"","sources":["../../src/internal/console-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,KAAK,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAUjE,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB;4EACwE;IACxE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,SAAS,CAAoE;IACrF,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAGP,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,EACrC,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,qBAAqB;IAGjD,KAAK,IAAI,IAAI;IAyBb,IAAI,IAAI,IAAI;IAUZ,OAAO,CAAC,MAAM;CA2Bf"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConsoleCapture = void 0;
4
+ const context_1 = require("./context");
5
+ const METHOD_LEVEL = {
6
+ debug: 'debug',
7
+ info: 'info',
8
+ log: 'info',
9
+ warn: 'warn',
10
+ error: 'error',
11
+ };
12
+ /**
13
+ * Monkey-patches the global console so a service's own log output is captured
14
+ * as first-class telemetry — no HTTP request required. Each call becomes a
15
+ * breadcrumb and (optionally) a log event. Original console behaviour is always
16
+ * preserved and restored on stop; capture is re-entrancy guarded so the SDK's
17
+ * own logging can never recurse.
18
+ */
19
+ class ConsoleCapture {
20
+ constructor(sink, breadcrumbs, options) {
21
+ this.sink = sink;
22
+ this.breadcrumbs = breadcrumbs;
23
+ this.options = options;
24
+ this.originals = {};
25
+ this.patched = false;
26
+ this.inHandler = false;
27
+ }
28
+ start() {
29
+ if (this.patched || typeof console === 'undefined')
30
+ return;
31
+ this.patched = true;
32
+ for (const method of this.options.levels) {
33
+ const original = console[method];
34
+ if (typeof original !== 'function')
35
+ continue;
36
+ this.originals[method] = original.bind(console);
37
+ console[method] = (...args) => {
38
+ // Always call through first so app behaviour is unchanged even if we throw.
39
+ this.originals[method]?.(...args);
40
+ if (this.inHandler)
41
+ return; // guard against recursion via SDK internals
42
+ this.inHandler = true;
43
+ try {
44
+ this.handle(method, args);
45
+ }
46
+ catch {
47
+ /* never let capture break the host */
48
+ }
49
+ finally {
50
+ this.inHandler = false;
51
+ }
52
+ };
53
+ }
54
+ }
55
+ stop() {
56
+ if (!this.patched)
57
+ return;
58
+ for (const method of Object.keys(this.originals)) {
59
+ const original = this.originals[method];
60
+ if (original)
61
+ console[method] = original;
62
+ }
63
+ this.originals = {};
64
+ this.patched = false;
65
+ }
66
+ handle(method, args) {
67
+ const level = METHOD_LEVEL[method];
68
+ const message = formatArgs(args);
69
+ if (!message)
70
+ return;
71
+ const timestamp = new Date().toISOString();
72
+ this.breadcrumbs.add({ timestamp, type: 'console', level, message });
73
+ if (!this.options.asLogs)
74
+ return;
75
+ const span = (0, context_1.getActiveSpanContext)();
76
+ const attributes = { origin: 'auto.console.logging' };
77
+ // If an Error was logged (e.g. console.error(err)), keep its stack so the
78
+ // Errors view can render precise frames.
79
+ const err = args.find((a) => a instanceof Error);
80
+ if (err?.stack)
81
+ attributes.stack = err.stack;
82
+ const event = {
83
+ kind: 'log',
84
+ level,
85
+ message,
86
+ timestamp,
87
+ traceId: span?.traceId,
88
+ spanId: span?.spanId,
89
+ attributes,
90
+ };
91
+ this.sink(event);
92
+ }
93
+ }
94
+ exports.ConsoleCapture = ConsoleCapture;
95
+ /** Best-effort console.* argument formatting into a single message string. */
96
+ function formatArgs(args) {
97
+ return args
98
+ .map((a) => {
99
+ if (typeof a === 'string')
100
+ return a;
101
+ if (a instanceof Error)
102
+ return `${a.name}: ${a.message}`;
103
+ try {
104
+ return JSON.stringify(a);
105
+ }
106
+ catch {
107
+ return String(a);
108
+ }
109
+ })
110
+ .join(' ')
111
+ .slice(0, 8192);
112
+ }
113
+ //# sourceMappingURL=console-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-capture.js","sourceRoot":"","sources":["../../src/internal/console-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { SpanContext } from './propagation';
2
+ export interface ActiveContext {
3
+ span: SpanContext;
4
+ }
5
+ /** The trace/span active on the current async execution path, if any. */
6
+ export declare function getActiveContext(): ActiveContext | undefined;
7
+ export declare function getActiveSpanContext(): SpanContext | undefined;
8
+ /** Run `fn` with `ctx` installed as the active context for its async subtree. */
9
+ export declare function runWithContext<T>(ctx: ActiveContext, fn: () => T): T;
10
+ /**
11
+ * Install `ctx` for the *current* async execution and everything downstream,
12
+ * without a wrapping callback. Needed by frameworks (e.g. Fastify) whose hooks
13
+ * run in sequence rather than nested, where `run()` can't span the handler.
14
+ */
15
+ export declare function enterContext(ctx: ActiveContext): void;
16
+ /**
17
+ * Bind `fn` to the *current* active context so it still sees it when invoked
18
+ * later (e.g. from an event emitter callback outside the async chain).
19
+ */
20
+ export declare function bindContext<A extends unknown[], R>(fn: (...args: A) => R): (...args: A) => R;
21
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/internal/context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;CACnB;AAID,yEAAyE;AACzE,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAE5D;AAED,wBAAgB,oBAAoB,IAAI,WAAW,GAAG,SAAS,CAE9D;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAErD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAChD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GACpB,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAInB"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ // Ambient trace context propagation using AsyncLocalStorage so that logs,
3
+ // metrics and child spans automatically inherit the active trace/span without
4
+ // the caller threading it manually.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getActiveContext = getActiveContext;
7
+ exports.getActiveSpanContext = getActiveSpanContext;
8
+ exports.runWithContext = runWithContext;
9
+ exports.enterContext = enterContext;
10
+ exports.bindContext = bindContext;
11
+ const async_hooks_1 = require("async_hooks");
12
+ const storage = new async_hooks_1.AsyncLocalStorage();
13
+ /** The trace/span active on the current async execution path, if any. */
14
+ function getActiveContext() {
15
+ return storage.getStore();
16
+ }
17
+ function getActiveSpanContext() {
18
+ return storage.getStore()?.span;
19
+ }
20
+ /** Run `fn` with `ctx` installed as the active context for its async subtree. */
21
+ function runWithContext(ctx, fn) {
22
+ return storage.run(ctx, fn);
23
+ }
24
+ /**
25
+ * Install `ctx` for the *current* async execution and everything downstream,
26
+ * without a wrapping callback. Needed by frameworks (e.g. Fastify) whose hooks
27
+ * run in sequence rather than nested, where `run()` can't span the handler.
28
+ */
29
+ function enterContext(ctx) {
30
+ storage.enterWith(ctx);
31
+ }
32
+ /**
33
+ * Bind `fn` to the *current* active context so it still sees it when invoked
34
+ * later (e.g. from an event emitter callback outside the async chain).
35
+ */
36
+ function bindContext(fn) {
37
+ const captured = storage.getStore();
38
+ if (!captured)
39
+ return fn;
40
+ return (...args) => storage.run(captured, () => fn(...args));
41
+ }
42
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/internal/context.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,8EAA8E;AAC9E,oCAAoC;;AAYpC,4CAEC;AAED,oDAEC;AAGD,wCAEC;AAOD,oCAEC;AAMD,kCAMC;AA1CD,6CAAgD;AAOhD,MAAM,OAAO,GAAG,IAAI,+BAAiB,EAAiB,CAAC;AAEvD,yEAAyE;AACzE,SAAgB,gBAAgB;IAC9B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC;AAClC,CAAC;AAED,iFAAiF;AACjF,SAAgB,cAAc,CAAI,GAAkB,EAAE,EAAW;IAC/D,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,GAAkB;IAC7C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CACzB,EAAqB;IAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACpC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO,CAAC,GAAG,IAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface Diagnostics {
2
+ debug(message: string, detail?: unknown): void;
3
+ error(message: string, error?: unknown): void;
4
+ }
5
+ export declare function createDiagnostics(opts: {
6
+ debug: boolean;
7
+ onError?: (error: Error) => void;
8
+ }): Diagnostics;
9
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/internal/diagnostics.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,GAAG,WAAW,CAuBd"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ // Internal diagnostics channel. The SDK must never crash the host, so internal
3
+ // failures are routed here (optional user callback + optional debug console)
4
+ // instead of being thrown.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createDiagnostics = createDiagnostics;
7
+ function createDiagnostics(opts) {
8
+ const prefix = '[nugi-ts-logs-sdk]';
9
+ return {
10
+ debug(message, detail) {
11
+ if (opts.debug) {
12
+ // eslint-disable-next-line no-console
13
+ console.debug(`${prefix} ${message}`, detail ?? '');
14
+ }
15
+ },
16
+ error(message, error) {
17
+ const err = error instanceof Error ? error : new Error(describe(message, error));
18
+ if (opts.debug) {
19
+ // eslint-disable-next-line no-console
20
+ console.error(`${prefix} ${message}`, error ?? '');
21
+ }
22
+ try {
23
+ opts.onError?.(err);
24
+ }
25
+ catch {
26
+ /* never let the error handler itself throw */
27
+ }
28
+ },
29
+ };
30
+ }
31
+ function describe(message, error) {
32
+ if (error === undefined)
33
+ return message;
34
+ if (typeof error === 'string')
35
+ return `${message}: ${error}`;
36
+ try {
37
+ return `${message}: ${JSON.stringify(error)}`;
38
+ }
39
+ catch {
40
+ return message;
41
+ }
42
+ }
43
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/internal/diagnostics.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,2BAA2B;;AAO3B,8CA0BC;AA1BD,SAAgB,iBAAiB,CAAC,IAGjC;IACC,MAAM,MAAM,GAAG,oBAAoB,CAAC;IACpC,OAAO;QACL,KAAK,CAAC,OAAO,EAAE,MAAM;YACnB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,KAAK,CAAC,OAAO,EAAE,KAAK;YAClB,MAAM,GAAG,GACP,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAE,KAAc;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,GAAG,OAAO,KAAK,KAAK,EAAE,CAAC;IAC7D,IAAI,CAAC;QACH,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Best-effort payload size in bytes from a content-length header or the body. */
2
+ export declare function byteLength(contentLength: unknown, body: unknown): number;
3
+ /** Extract an authenticated principal id from a request, if the app set one. */
4
+ export declare function extractUserId(req: unknown): string | undefined;
5
+ /** Lower-cases header keys into a plain record; tolerant of odd inputs. */
6
+ export declare function normalizeHeaders(headers: unknown): Record<string, unknown>;
7
+ /**
8
+ * Resolve the real client IP from the request. Handles:
9
+ * - x-forwarded-for (first entry = real client behind proxy/LB)
10
+ * - IPv4-mapped IPv6 (::ffff:192.168.1.1 → 192.168.1.1)
11
+ * - Falls back to req.ip / socket.remoteAddress
12
+ */
13
+ export declare function resolveClientIp(req: unknown): string;
14
+ /** Strip IPv4-mapped IPv6 prefix and trim. */
15
+ export declare function normalizeIp(ip: string): string;
16
+ //# sourceMappingURL=http-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-utils.d.ts","sourceRoot":"","sources":["../../src/internal/http-utils.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAaxE;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAU9D;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAcpD;AAED,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQ9C"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.byteLength = byteLength;
4
+ exports.extractUserId = extractUserId;
5
+ exports.normalizeHeaders = normalizeHeaders;
6
+ exports.resolveClientIp = resolveClientIp;
7
+ exports.normalizeIp = normalizeIp;
8
+ /** Best-effort payload size in bytes from a content-length header or the body. */
9
+ function byteLength(contentLength, body) {
10
+ const declared = Number(Array.isArray(contentLength) ? contentLength[0] : contentLength);
11
+ if (Number.isFinite(declared) && declared >= 0)
12
+ return declared;
13
+ try {
14
+ if (body === undefined || body === null)
15
+ return 0;
16
+ if (typeof body === 'string')
17
+ return Buffer.byteLength(body);
18
+ if (Buffer.isBuffer(body))
19
+ return body.length;
20
+ return Buffer.byteLength(JSON.stringify(body) ?? '');
21
+ }
22
+ catch {
23
+ return 0;
24
+ }
25
+ }
26
+ /** Extract an authenticated principal id from a request, if the app set one. */
27
+ function extractUserId(req) {
28
+ try {
29
+ const user = req?.user;
30
+ if (!user)
31
+ return undefined;
32
+ const id = user.id ?? user._id ?? user.sub ?? user.userId ?? user.uid;
33
+ return id !== undefined && id !== null ? String(id) : undefined;
34
+ }
35
+ catch {
36
+ return undefined;
37
+ }
38
+ }
39
+ /** Lower-cases header keys into a plain record; tolerant of odd inputs. */
40
+ function normalizeHeaders(headers) {
41
+ if (!headers || typeof headers !== 'object')
42
+ return {};
43
+ const out = {};
44
+ for (const [k, v] of Object.entries(headers)) {
45
+ out[k.toLowerCase()] = v;
46
+ }
47
+ return out;
48
+ }
49
+ /**
50
+ * Resolve the real client IP from the request. Handles:
51
+ * - x-forwarded-for (first entry = real client behind proxy/LB)
52
+ * - IPv4-mapped IPv6 (::ffff:192.168.1.1 → 192.168.1.1)
53
+ * - Falls back to req.ip / socket.remoteAddress
54
+ */
55
+ function resolveClientIp(req) {
56
+ try {
57
+ const r = (req || {});
58
+ const headers = r.headers || {};
59
+ const forwarded = headers['x-forwarded-for'] ?? headers['X-Forwarded-For'];
60
+ const raw = (typeof forwarded === 'string' ? forwarded.split(',')[0]?.trim() : undefined) ||
61
+ r.ip ||
62
+ r.socket?.remoteAddress ||
63
+ '';
64
+ return normalizeIp(raw);
65
+ }
66
+ catch {
67
+ return (req?.ip) || '';
68
+ }
69
+ }
70
+ /** Strip IPv4-mapped IPv6 prefix and trim. */
71
+ function normalizeIp(ip) {
72
+ if (!ip)
73
+ return ip;
74
+ const trimmed = ip.trim();
75
+ const prefix = '::ffff:';
76
+ if (trimmed.toLowerCase().startsWith(prefix)) {
77
+ return trimmed.slice(prefix.length);
78
+ }
79
+ return trimmed;
80
+ }
81
+ //# sourceMappingURL=http-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-utils.js","sourceRoot":"","sources":["../../src/internal/http-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** 16-byte (32 hex char) W3C trace id. */
2
+ export declare function generateTraceId(): string;
3
+ /** 8-byte (16 hex char) W3C span id. */
4
+ export declare function generateSpanId(): string;
5
+ /** General-purpose unique id (request ids, batch ids). */
6
+ export declare function generateId(): string;
7
+ export declare function isValidTraceId(id: string | undefined): id is string;
8
+ export declare function isValidSpanId(id: string | undefined): id is string;
9
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/internal/ids.ts"],"names":[],"mappings":"AAEA,0CAA0C;AAC1C,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wCAAwC;AACxC,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,0DAA0D;AAC1D,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAKD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,EAAE,IAAI,MAAM,CAEnE;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,EAAE,IAAI,MAAM,CAElE"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateTraceId = generateTraceId;
4
+ exports.generateSpanId = generateSpanId;
5
+ exports.generateId = generateId;
6
+ exports.isValidTraceId = isValidTraceId;
7
+ exports.isValidSpanId = isValidSpanId;
8
+ const crypto_1 = require("crypto");
9
+ /** 16-byte (32 hex char) W3C trace id. */
10
+ function generateTraceId() {
11
+ return (0, crypto_1.randomBytes)(16).toString('hex');
12
+ }
13
+ /** 8-byte (16 hex char) W3C span id. */
14
+ function generateSpanId() {
15
+ return (0, crypto_1.randomBytes)(8).toString('hex');
16
+ }
17
+ /** General-purpose unique id (request ids, batch ids). */
18
+ function generateId() {
19
+ try {
20
+ return (0, crypto_1.randomUUID)();
21
+ }
22
+ catch {
23
+ return (0, crypto_1.randomBytes)(16).toString('hex');
24
+ }
25
+ }
26
+ const INVALID_TRACE_ID = '0'.repeat(32);
27
+ const INVALID_SPAN_ID = '0'.repeat(16);
28
+ function isValidTraceId(id) {
29
+ return !!id && /^[0-9a-f]{32}$/i.test(id) && id !== INVALID_TRACE_ID;
30
+ }
31
+ function isValidSpanId(id) {
32
+ return !!id && /^[0-9a-f]{16}$/i.test(id) && id !== INVALID_SPAN_ID;
33
+ }
34
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/internal/ids.ts"],"names":[],"mappings":";;AAGA,0CAEC;AAGD,wCAEC;AAGD,gCAMC;AAKD,wCAEC;AAED,sCAEC;AA9BD,mCAAiD;AAEjD,0CAA0C;AAC1C,SAAgB,eAAe;IAC7B,OAAO,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,wCAAwC;AACxC,SAAgB,cAAc;IAC5B,OAAO,IAAA,oBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,0DAA0D;AAC1D,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,IAAA,mBAAU,GAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxC,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEvC,SAAgB,cAAc,CAAC,EAAsB;IACnD,OAAO,CAAC,CAAC,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,gBAAgB,CAAC;AACvE,CAAC;AAED,SAAgB,aAAa,CAAC,EAAsB;IAClD,OAAO,CAAC,CAAC,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,eAAe,CAAC;AACtE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { HostMetadata, RuntimeMetadata } from '../types';
2
+ export declare function getHostMetadata(): HostMetadata;
3
+ export declare function getRuntimeMetadata(): RuntimeMetadata;
4
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/internal/metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAiDzD,wBAAgB,eAAe,IAAI,YAAY,CAyB9C;AAKD,wBAAgB,kBAAkB,IAAI,eAAe,CA6BpD"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getHostMetadata = getHostMetadata;
37
+ exports.getRuntimeMetadata = getRuntimeMetadata;
38
+ const os = __importStar(require("os"));
39
+ // Host metadata is static for the process lifetime — computed once and cached.
40
+ // Runtime metadata (memory/CPU) is sampled per call. All collection is
41
+ // defensive: it must never throw into the host application.
42
+ function resolveSdkVersion() {
43
+ try {
44
+ // package.json sits at the package root, one level above dist/ (and src/).
45
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
46
+ return require('../../package.json').version ?? 'unknown';
47
+ }
48
+ catch {
49
+ return 'unknown';
50
+ }
51
+ }
52
+ function resolveServerIps() {
53
+ const ipv4 = [];
54
+ const ipv6 = [];
55
+ try {
56
+ const interfaces = os.networkInterfaces();
57
+ for (const name of Object.keys(interfaces)) {
58
+ for (const iface of interfaces[name] || []) {
59
+ if (iface.internal)
60
+ continue;
61
+ const family = String(iface.family);
62
+ if (family === 'IPv4' || family === '4') {
63
+ ipv4.push(iface.address);
64
+ }
65
+ else if (family === 'IPv6' || family === '6') {
66
+ if (!iface.address.startsWith('fe80')) {
67
+ ipv6.push(iface.address);
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ catch {
74
+ /* fall through */
75
+ }
76
+ const primary = ipv4[0] || ipv6[0] || '127.0.0.1';
77
+ return { primary, ipv4, ipv6 };
78
+ }
79
+ let cachedHost;
80
+ function getHostMetadata() {
81
+ if (cachedHost)
82
+ return cachedHost;
83
+ try {
84
+ const ips = resolveServerIps();
85
+ cachedHost = {
86
+ hostname: os.hostname(),
87
+ serverIp: ips.primary,
88
+ serverIps: { ipv4: ips.ipv4, ipv6: ips.ipv6 },
89
+ sdkVersion: resolveSdkVersion(),
90
+ nodeVersion: process.version,
91
+ os: `${os.type()} ${os.release()} (${os.platform()}/${os.arch()})`,
92
+ pid: process.pid,
93
+ };
94
+ }
95
+ catch {
96
+ cachedHost = {
97
+ hostname: 'unknown',
98
+ serverIp: '127.0.0.1',
99
+ serverIps: { ipv4: [], ipv6: [] },
100
+ sdkVersion: resolveSdkVersion(),
101
+ nodeVersion: process.version,
102
+ os: 'unknown',
103
+ pid: process.pid,
104
+ };
105
+ }
106
+ return cachedHost;
107
+ }
108
+ let lastCpuUsage;
109
+ let lastCpuSampleAt;
110
+ function getRuntimeMetadata() {
111
+ const memoryUsage = safeMemoryUsage();
112
+ let percent = -1;
113
+ let user = 0;
114
+ let system = 0;
115
+ try {
116
+ const now = Date.now();
117
+ const current = process.cpuUsage();
118
+ user = current.user;
119
+ system = current.system;
120
+ if (lastCpuUsage && lastCpuSampleAt !== undefined) {
121
+ const elapsedMs = now - lastCpuSampleAt;
122
+ if (elapsedMs > 0) {
123
+ const usedMicros = current.user - lastCpuUsage.user +
124
+ (current.system - lastCpuUsage.system);
125
+ percent =
126
+ Math.round((usedMicros / (elapsedMs * 1000)) * 100 * 100) / 100;
127
+ }
128
+ }
129
+ lastCpuUsage = current;
130
+ lastCpuSampleAt = now;
131
+ }
132
+ catch {
133
+ /* leave defaults */
134
+ }
135
+ return { memoryUsage, cpuUsage: { percent, user, system } };
136
+ }
137
+ function safeMemoryUsage() {
138
+ try {
139
+ const m = process.memoryUsage();
140
+ return {
141
+ rss: m.rss,
142
+ heapUsed: m.heapUsed,
143
+ heapTotal: m.heapTotal,
144
+ external: m.external,
145
+ };
146
+ }
147
+ catch {
148
+ return { rss: 0, heapUsed: 0, heapTotal: 0, external: 0 };
149
+ }
150
+ }
151
+ //# sourceMappingURL=metadata.js.map