logixia 1.12.4 → 1.12.6

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 (166) hide show
  1. package/README.md +80 -27
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/async-context-CSHWoHMB.js +88 -0
  4. package/dist/async-context-CSHWoHMB.js.map +1 -0
  5. package/dist/async-context-CwBNMm2E.mjs +68 -0
  6. package/dist/async-context-CwBNMm2E.mjs.map +1 -0
  7. package/dist/azure-monitor.transport-CG7ClkYj.d.ts +62 -0
  8. package/dist/azure-monitor.transport-CG7ClkYj.d.ts.map +1 -0
  9. package/dist/azure-monitor.transport-CHnjVRF-.mjs +152 -0
  10. package/dist/azure-monitor.transport-CHnjVRF-.mjs.map +1 -0
  11. package/dist/azure-monitor.transport-Cm74kXZS.d.mts +62 -0
  12. package/dist/azure-monitor.transport-Cm74kXZS.d.mts.map +1 -0
  13. package/dist/azure-monitor.transport-CrvfHd9C.js +157 -0
  14. package/dist/azure-monitor.transport-CrvfHd9C.js.map +1 -0
  15. package/dist/azure.d.mts +3 -0
  16. package/dist/azure.d.ts +3 -0
  17. package/dist/azure.js +6 -0
  18. package/dist/azure.mjs +6 -0
  19. package/dist/batch-buffer-BY-mRWIK.js +170 -0
  20. package/dist/batch-buffer-BY-mRWIK.js.map +1 -0
  21. package/dist/batch-buffer-PGvSgbmd.mjs +132 -0
  22. package/dist/batch-buffer-PGvSgbmd.mjs.map +1 -0
  23. package/dist/browser.d.mts +427 -0
  24. package/dist/browser.d.mts.map +1 -0
  25. package/dist/browser.d.ts +427 -0
  26. package/dist/browser.d.ts.map +1 -0
  27. package/dist/browser.js +590 -0
  28. package/dist/browser.js.map +1 -0
  29. package/dist/browser.mjs +586 -0
  30. package/dist/browser.mjs.map +1 -0
  31. package/dist/chunk-DLSkYcPk.mjs +7 -0
  32. package/dist/chunk-nOFOJqeH.js +30 -0
  33. package/dist/cloudwatch.d.mts +3 -0
  34. package/dist/cloudwatch.d.ts +3 -0
  35. package/dist/cloudwatch.js +6 -0
  36. package/dist/cloudwatch.mjs +6 -0
  37. package/dist/cloudwatch.transport-CGHY4buE.d.mts +81 -0
  38. package/dist/cloudwatch.transport-CGHY4buE.d.mts.map +1 -0
  39. package/dist/cloudwatch.transport-DK_8cKd3.d.ts +81 -0
  40. package/dist/cloudwatch.transport-DK_8cKd3.d.ts.map +1 -0
  41. package/dist/cloudwatch.transport-pNBNWJLt.js +370 -0
  42. package/dist/cloudwatch.transport-pNBNWJLt.js.map +1 -0
  43. package/dist/cloudwatch.transport-yBwm4OeO.mjs +360 -0
  44. package/dist/cloudwatch.transport-yBwm4OeO.mjs.map +1 -0
  45. package/dist/coerce.utils-BN980Y9V.js +44 -0
  46. package/dist/coerce.utils-BN980Y9V.js.map +1 -0
  47. package/dist/coerce.utils-Dxv4_ikC.mjs +38 -0
  48. package/dist/coerce.utils-Dxv4_ikC.mjs.map +1 -0
  49. package/dist/correlation.d.mts +238 -0
  50. package/dist/correlation.d.mts.map +1 -0
  51. package/dist/correlation.d.ts +238 -0
  52. package/dist/correlation.d.ts.map +1 -0
  53. package/dist/correlation.js +272 -0
  54. package/dist/correlation.js.map +1 -0
  55. package/dist/correlation.mjs +261 -0
  56. package/dist/correlation.mjs.map +1 -0
  57. package/dist/gcp.d.mts +3 -0
  58. package/dist/gcp.d.ts +3 -0
  59. package/dist/gcp.js +6 -0
  60. package/dist/gcp.mjs +6 -0
  61. package/dist/gcp.transport-BJuNRFe_.mjs +192 -0
  62. package/dist/gcp.transport-BJuNRFe_.mjs.map +1 -0
  63. package/dist/gcp.transport-BOhkVKlI.d.ts +71 -0
  64. package/dist/gcp.transport-BOhkVKlI.d.ts.map +1 -0
  65. package/dist/gcp.transport-Bi6CUqZR.d.mts +71 -0
  66. package/dist/gcp.transport-Bi6CUqZR.d.mts.map +1 -0
  67. package/dist/gcp.transport-SHdtc1n0.js +198 -0
  68. package/dist/gcp.transport-SHdtc1n0.js.map +1 -0
  69. package/dist/{index-CwFww7VC.d.ts → index-BPKwwERo.d.mts} +18 -174
  70. package/dist/index-BPKwwERo.d.mts.map +1 -0
  71. package/dist/{index-DnyeaoZU.d.mts → index-C1X-TE5I.d.ts} +18 -174
  72. package/dist/index-C1X-TE5I.d.ts.map +1 -0
  73. package/dist/index.d.mts +41 -11
  74. package/dist/index.d.mts.map +1 -1
  75. package/dist/index.d.ts +40 -10
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +87 -147
  78. package/dist/index.js.map +1 -1
  79. package/dist/index.mjs +62 -132
  80. package/dist/index.mjs.map +1 -1
  81. package/dist/internal-log-BUJYMZbE.js +70 -0
  82. package/dist/internal-log-BUJYMZbE.js.map +1 -0
  83. package/dist/internal-log-Cm8SOWSV.mjs +52 -0
  84. package/dist/internal-log-Cm8SOWSV.mjs.map +1 -0
  85. package/dist/{logitron-logger.module-BIGTm2V6.mjs → logitron-logger.module-Bs3XYZgF.mjs} +266 -166
  86. package/dist/logitron-logger.module-Bs3XYZgF.mjs.map +1 -0
  87. package/dist/{logitron-logger.module-BTxDpK6u.js → logitron-logger.module-BsDZR5BH.js} +297 -203
  88. package/dist/logitron-logger.module-BsDZR5BH.js.map +1 -0
  89. package/dist/{logitron-logger.module-BmT-ewin.d.ts → logitron-logger.module-CxT1F6Cm.d.ts} +23 -10
  90. package/dist/logitron-logger.module-CxT1F6Cm.d.ts.map +1 -0
  91. package/dist/{logitron-logger.module-BCq3sF27.d.mts → logitron-logger.module-zDKVd_o0.d.mts} +23 -10
  92. package/dist/logitron-logger.module-zDKVd_o0.d.mts.map +1 -0
  93. package/dist/middleware.d.mts +5 -2
  94. package/dist/middleware.d.mts.map +1 -1
  95. package/dist/middleware.d.ts +5 -2
  96. package/dist/middleware.d.ts.map +1 -1
  97. package/dist/middleware.js +13 -4
  98. package/dist/middleware.js.map +1 -1
  99. package/dist/middleware.mjs +14 -4
  100. package/dist/middleware.mjs.map +1 -1
  101. package/dist/nest.d.mts +3 -2
  102. package/dist/nest.d.mts.map +1 -1
  103. package/dist/nest.d.ts +3 -2
  104. package/dist/nest.d.ts.map +1 -1
  105. package/dist/nest.js +6 -2
  106. package/dist/nest.mjs +6 -2
  107. package/dist/safe-stringify-DJ66tW5I.mjs +118 -0
  108. package/dist/safe-stringify-DJ66tW5I.mjs.map +1 -0
  109. package/dist/safe-stringify-DWo3aZp_.js +142 -0
  110. package/dist/safe-stringify-DWo3aZp_.js.map +1 -0
  111. package/dist/search-CFQRISUv.mjs +1596 -0
  112. package/dist/search-CFQRISUv.mjs.map +1 -0
  113. package/dist/search-CQOo-Iq6.d.mts +816 -0
  114. package/dist/search-CQOo-Iq6.d.mts.map +1 -0
  115. package/dist/search-DujhR94O.d.ts +816 -0
  116. package/dist/search-DujhR94O.d.ts.map +1 -0
  117. package/dist/search-njTI2hdo.js +1631 -0
  118. package/dist/search-njTI2hdo.js.map +1 -0
  119. package/dist/search.d.mts +4 -1
  120. package/dist/search.d.ts +4 -1
  121. package/dist/search.js +9 -1
  122. package/dist/search.mjs +3 -2
  123. package/dist/testing.d.mts +2 -1
  124. package/dist/testing.d.mts.map +1 -1
  125. package/dist/testing.d.ts +2 -1
  126. package/dist/testing.d.ts.map +1 -1
  127. package/dist/{transport.manager-ciG4r5uz.js → transport.manager-BivyUTtU.js} +497 -437
  128. package/dist/transport.manager-BivyUTtU.js.map +1 -0
  129. package/dist/{transport.manager-DETpXuaY.mjs → transport.manager-D6KL3t9V.mjs} +473 -364
  130. package/dist/transport.manager-D6KL3t9V.mjs.map +1 -0
  131. package/dist/transport.types-B5vcyv2k.d.mts +187 -0
  132. package/dist/transport.types-B5vcyv2k.d.mts.map +1 -0
  133. package/dist/transport.types-BuY84TwO.d.ts +187 -0
  134. package/dist/transport.types-BuY84TwO.d.ts.map +1 -0
  135. package/dist/transports.d.mts +90 -29
  136. package/dist/transports.d.mts.map +1 -1
  137. package/dist/transports.d.ts +90 -29
  138. package/dist/transports.d.ts.map +1 -1
  139. package/dist/transports.js +14 -2
  140. package/dist/transports.mjs +10 -2
  141. package/dist/worker-entry.js +1241 -0
  142. package/dist/worker.d.mts +3 -0
  143. package/dist/worker.d.ts +3 -0
  144. package/dist/worker.js +4 -0
  145. package/dist/worker.mjs +4 -0
  146. package/dist/worker.transport-BP8Q28Z2.d.mts +76 -0
  147. package/dist/worker.transport-BP8Q28Z2.d.mts.map +1 -0
  148. package/dist/worker.transport-BhMyvqQ2.mjs +167 -0
  149. package/dist/worker.transport-BhMyvqQ2.mjs.map +1 -0
  150. package/dist/worker.transport-CfH6z37Z.js +168 -0
  151. package/dist/worker.transport-CfH6z37Z.js.map +1 -0
  152. package/dist/worker.transport-mKXgNK0L.d.ts +76 -0
  153. package/dist/worker.transport-mKXgNK0L.d.ts.map +1 -0
  154. package/package.json +23 -18
  155. package/dist/index-CwFww7VC.d.ts.map +0 -1
  156. package/dist/index-DnyeaoZU.d.mts.map +0 -1
  157. package/dist/logitron-logger.module-BCq3sF27.d.mts.map +0 -1
  158. package/dist/logitron-logger.module-BIGTm2V6.mjs.map +0 -1
  159. package/dist/logitron-logger.module-BTxDpK6u.js.map +0 -1
  160. package/dist/logitron-logger.module-BmT-ewin.d.ts.map +0 -1
  161. package/dist/search-Cg_OasF-.d.ts +0 -1
  162. package/dist/search-DN676Dnz.d.mts +0 -1
  163. package/dist/search-DOvSI-mb.mjs +0 -1
  164. package/dist/search-DoZF3RZj.js +0 -0
  165. package/dist/transport.manager-DETpXuaY.mjs.map +0 -1
  166. package/dist/transport.manager-ciG4r5uz.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,10 +1,16 @@
1
- const require_transport_manager = require('./transport.manager-ciG4r5uz.js');
2
- const require_logitron_logger_module = require('./logitron-logger.module-BTxDpK6u.js');
3
- require('./search-DoZF3RZj.js');
1
+ const require_chunk = require('./chunk-nOFOJqeH.js');
2
+ const require_internal_log = require('./internal-log-BUJYMZbE.js');
3
+ const require_safe_stringify = require('./safe-stringify-DWo3aZp_.js');
4
+ const require_batch_buffer = require('./batch-buffer-BY-mRWIK.js');
5
+ const require_async_context = require('./async-context-CSHWoHMB.js');
6
+ const require_logitron_logger_module = require('./logitron-logger.module-BsDZR5BH.js');
7
+ const require_coerce_utils = require('./coerce.utils-BN980Y9V.js');
8
+ require('./transport.manager-BivyUTtU.js');
9
+ const require_search = require('./search-njTI2hdo.js');
4
10
  let node_async_hooks = require("node:async_hooks");
5
- node_async_hooks = require_transport_manager.__toESM(node_async_hooks);
11
+ node_async_hooks = require_chunk.__toESM(node_async_hooks);
6
12
  let __nestjs_common = require("@nestjs/common");
7
- __nestjs_common = require_transport_manager.__toESM(__nestjs_common);
13
+ __nestjs_common = require_chunk.__toESM(__nestjs_common);
8
14
 
9
15
  //#region src/exceptions/exception.ts
10
16
  var LogixiaException = class extends Error {
@@ -253,7 +259,7 @@ function LogMethod(options = {}) {
253
259
  const label = options.label ?? `${className}.${methodName}`;
254
260
  let _warnedNoLogger = false;
255
261
  const reportLogFailure = (phase, err) => {
256
- process.stderr.write(`[logixia] @LogMethod(${label}) ${phase} log failed: ${String(err)}\n`);
262
+ require_internal_log.internalError(`@LogMethod(${label}) ${phase} log failed: ${String(err)}`);
257
263
  };
258
264
  const emit$1 = (logger$1, phase, message, data) => {
259
265
  const logFnRaw = logger$1[level];
@@ -272,7 +278,7 @@ function LogMethod(options = {}) {
272
278
  const logger$1 = this.logger ?? require_logitron_logger_module.LogixiaLoggerModule._globalLogger ?? void 0;
273
279
  if (!logger$1 && !_warnedNoLogger) {
274
280
  _warnedNoLogger = true;
275
- console.warn(`[logixia] @LogMethod on ${label}: no logger available. Either inject LogixiaLoggerService as this.logger or ensure LogixiaLoggerModule is initialised.`);
281
+ require_internal_log.internalWarn(`@LogMethod on ${label}: no logger available. Either inject LogixiaLoggerService as this.logger or ensure LogixiaLoggerModule is initialised.`);
276
282
  }
277
283
  const start = Date.now();
278
284
  const entry = { method: label };
@@ -331,7 +337,7 @@ let LogixiaExceptionFilter = class LogixiaExceptionFilter$1 {
331
337
  ...errorResponse.meta.trace_id !== void 0 ? { trace_id: errorResponse.meta.trace_id } : {}
332
338
  };
333
339
  const onLogFailure = (err) => {
334
- process.stderr.write(`[logixia] ExceptionFilter failed to write log entry: ${String(err)}\n`);
340
+ require_internal_log.internalError(`ExceptionFilter failed to write log entry: ${String(err)}`);
335
341
  };
336
342
  let logPromise;
337
343
  if (httpStatus >= 500) {
@@ -428,7 +434,7 @@ var JsonFormatter = class {
428
434
  //#endregion
429
435
  //#region src/formatters/text.formatter.ts
430
436
  const CONTROL_CHARS_RE = /[\x00-\x08\x0B-\x1F\x7F-\x9F]/g;
431
- const stripControls = (value) => require_transport_manager.safeToString(value).replace(CONTROL_CHARS_RE, "");
437
+ const stripControls = (value) => require_coerce_utils.safeToString(value).replace(CONTROL_CHARS_RE, "");
432
438
  var TextFormatter = class TextFormatter {
433
439
  constructor(options = {}) {
434
440
  this.colorize = options.colorize ?? true;
@@ -507,11 +513,11 @@ var TextFormatter = class TextFormatter {
507
513
  if (typeof value === "string") return `${key}="${value}"`;
508
514
  if (typeof value === "number" || typeof value === "boolean") return `${key}=${value}`;
509
515
  if (value instanceof Date) return `${key}=${value.toISOString()}`;
510
- if (typeof value === "object") return `${key}=${stripControls(require_transport_manager.safeToString(value))}`;
516
+ if (typeof value === "object") return `${key}=${stripControls(require_coerce_utils.safeToString(value))}`;
511
517
  return `${key}=${String(value)}`;
512
518
  }).join(" ");
513
519
  } catch {
514
- return stripControls(require_transport_manager.safeToString(payload));
520
+ return stripControls(require_coerce_utils.safeToString(payload));
515
521
  }
516
522
  }
517
523
  /**
@@ -573,7 +579,7 @@ function registerLevelSignal(logger$1, options = {}) {
573
579
  const current = logger$1.getLevel();
574
580
  const next = cycle[(cycle.indexOf(current) + 1) % cycle.length];
575
581
  logger$1.setLevel(next);
576
- require_transport_manager.internalLog(`runtime level changed via ${signal}: ${current} → ${next}`);
582
+ require_internal_log.internalLog(`runtime level changed via ${signal}: ${current} → ${next}`);
577
583
  };
578
584
  process.on(signal, handler);
579
585
  return () => {
@@ -648,7 +654,7 @@ function createLevelControlHandler(logger$1, options = {}) {
648
654
  const coerced = {};
649
655
  for (const [pat, lvl] of Object.entries(nl)) coerced[pat] = String(lvl).toLowerCase();
650
656
  logger$1.setNamespaceLevels(coerced);
651
- } else require_transport_manager.internalWarn("level control: logger does not support setNamespaceLevels — ignored");
657
+ } else require_internal_log.internalWarn("level control: logger does not support setNamespaceLevels — ignored");
652
658
  }
653
659
  send(res, 200, snapshot());
654
660
  };
@@ -679,103 +685,6 @@ function createLevelControlHandler(logger$1, options = {}) {
679
685
  };
680
686
  }
681
687
 
682
- //#endregion
683
- //#region src/utils/safe-stringify.ts
684
- /** Build a JSONPath like `$["a"][0]["b"]` for a decycle pointer. */
685
- function jsonPath(parts) {
686
- let path = "$";
687
- for (const p of parts) path += typeof p === "number" ? `[${p}]` : `[${JSON.stringify(p)}]`;
688
- return path;
689
- }
690
- /**
691
- * Serialize any value to JSON without throwing on circular references or BigInt.
692
- * Circular refs become `"[Circular]"` (or `{ $ref }` pointers when `decycle`).
693
- */
694
- function safeStringify(value, options = {}) {
695
- const { indent, deterministic = false, decycle = false, bigint = "string" } = options;
696
- if (decycle) return JSON.stringify(decycleValue(value, bigint), void 0, indent);
697
- const seen = /* @__PURE__ */ new WeakSet();
698
- const transform = (val) => {
699
- if (typeof val === "bigint") return bigint === "number" ? Number(val) : val.toString();
700
- if (typeof val === "function") return `[Function: ${val.name || "anonymous"}]`;
701
- if (typeof val === "symbol") return val.toString();
702
- if (val === null || typeof val !== "object") return val;
703
- if (seen.has(val)) return "[Circular]";
704
- seen.add(val);
705
- let out;
706
- if (Array.isArray(val)) out = val.map((item) => transform(item));
707
- else if (val instanceof Date) out = val.toISOString();
708
- else {
709
- const rec = val;
710
- const keys = deterministic ? Object.keys(rec).sort() : Object.keys(rec);
711
- const obj = {};
712
- for (const k of keys) {
713
- if (k === "__proto__" || k === "constructor" || k === "prototype") continue;
714
- obj[k] = transform(rec[k]);
715
- }
716
- out = obj;
717
- }
718
- seen.delete(val);
719
- return out;
720
- };
721
- return JSON.stringify(transform(value), void 0, indent);
722
- }
723
- /**
724
- * Replace repeated object references with round-trippable `{ "$ref": "$..." }`
725
- * JSONPath pointers (the classic Crockford decycle). Pair with {@link retrocycle}
726
- * to reconstruct the original shared/circular graph.
727
- */
728
- function decycleValue(value, bigint = "string") {
729
- const paths = /* @__PURE__ */ new WeakMap();
730
- const walk = (val, path) => {
731
- if (typeof val === "bigint") return bigint === "number" ? Number(val) : val.toString();
732
- if (val === null || typeof val !== "object") return val;
733
- if (val instanceof Date) return val.toISOString();
734
- const existing = paths.get(val);
735
- if (existing !== void 0) return { $ref: existing };
736
- paths.set(val, jsonPath(path));
737
- if (Array.isArray(val)) return val.map((item, i) => walk(item, [...path, i]));
738
- const rec = val;
739
- const obj = {};
740
- for (const k of Object.keys(rec)) {
741
- if (k === "__proto__" || k === "constructor" || k === "prototype") continue;
742
- obj[k] = walk(rec[k], [...path, k]);
743
- }
744
- return obj;
745
- };
746
- return walk(value, []);
747
- }
748
- /**
749
- * Inverse of {@link decycleValue}: resolve `{ "$ref": "$..." }` pointers back
750
- * into the live object graph (mutates and returns the parsed input).
751
- */
752
- function retrocycle(root) {
753
- const refRe = /^\$(?:\[(?:\d+|"(?:[^"\\]|\\.)*")\])*$/;
754
- const resolve = (path) => {
755
- const segs = [];
756
- const partRe = /\[(\d+|"(?:[^"\\]|\\.)*")\]/g;
757
- let m;
758
- while ((m = partRe.exec(path)) !== null) {
759
- const raw = m[1];
760
- segs.push(raw.startsWith("\"") ? JSON.parse(raw) : Number(raw));
761
- }
762
- let node = root;
763
- for (const s of segs) node = node[s];
764
- return node;
765
- };
766
- const walk = (val) => {
767
- if (val === null || typeof val !== "object") return;
768
- const rec = val;
769
- for (const k of Object.keys(rec)) {
770
- const child = rec[k];
771
- if (child !== null && typeof child === "object" && typeof child.$ref === "string" && refRe.test(child.$ref)) rec[k] = resolve(child.$ref);
772
- else walk(child);
773
- }
774
- };
775
- walk(root);
776
- return root;
777
- }
778
-
779
688
  //#endregion
780
689
  //#region src/utils/typed-logger.ts
781
690
  /**
@@ -819,7 +728,7 @@ function createTypedLogger(logger$1, schema) {
819
728
  function withValidation(level, fn, message, data) {
820
729
  if (schema && data) {
821
730
  const warnings = schema.validate(data);
822
- for (const w of warnings) require_transport_manager.internalWarn(`[logixia/schema] ${w} — level=${level} message="${message}"`);
731
+ for (const w of warnings) require_internal_log.internalWarn(`[logixia/schema] ${w} — level=${level} message="${message}"`);
823
732
  }
824
733
  return fn(message, data);
825
734
  }
@@ -829,7 +738,7 @@ function createTypedLogger(logger$1, schema) {
829
738
  if (schema && data) {
830
739
  const warnings = schema.validate(data);
831
740
  const display = messageOrError instanceof Error ? messageOrError.message : messageOrError;
832
- for (const w of warnings) require_transport_manager.internalWarn(`[logixia/schema] ${w} — level=error message="${display}"`);
741
+ for (const w of warnings) require_internal_log.internalWarn(`[logixia/schema] ${w} — level=error message="${display}"`);
833
742
  }
834
743
  return logger$1.error(messageOrError, data);
835
744
  },
@@ -941,6 +850,15 @@ function wideEventMiddleware(logger$1, options = {}) {
941
850
 
942
851
  //#endregion
943
852
  //#region src/transports/otlp.transport.ts
853
+ const HEX_32 = /^[0-9a-f]{32}$/;
854
+ /**
855
+ * OTLP JSON wants a 32-char lowercase hex trace id. Dashed UUIDs are
856
+ * normalised; anything else (or all zeros) returns undefined.
857
+ */
858
+ function toOtlpTraceId(id) {
859
+ const hex = id.replace(/-/g, "").toLowerCase();
860
+ return HEX_32.test(hex) && hex !== "0".repeat(32) ? hex : void 0;
861
+ }
944
862
  /**
945
863
  * Map a logixia level name to an OTel SeverityNumber (1–24) and text.
946
864
  * Per the OTel logs SDK spec: TRACE=1, DEBUG=5, INFO=9, WARN=13, ERROR=17,
@@ -991,7 +909,7 @@ function toAnyValue(value) {
991
909
  if (typeof value === "bigint") return { stringValue: value.toString() };
992
910
  if (value === null || value === void 0) return { stringValue: "" };
993
911
  try {
994
- return { stringValue: JSON.stringify(value) };
912
+ return { stringValue: require_safe_stringify.stringifyForLog(value) };
995
913
  } catch {
996
914
  return { stringValue: String(value) };
997
915
  }
@@ -1006,13 +924,19 @@ function toAttributes(rec) {
1006
924
  var OtlpLogTransport = class {
1007
925
  constructor(config) {
1008
926
  this.name = "otlp";
1009
- this.batch = [];
1010
927
  this.flushTimer = null;
1011
928
  this.url = config.url;
1012
929
  this.headers = config.headers ?? {};
1013
930
  this.batchSize = config.batchSize ?? 100;
1014
931
  this.flushIntervalMs = config.flushIntervalMs ?? 5e3;
932
+ this.requestTimeoutMs = config.requestTimeoutMs ?? require_batch_buffer.DEFAULT_REQUEST_TIMEOUT_MS;
1015
933
  this.level = config.level;
934
+ this.buffer = new require_batch_buffer.BatchBuffer({
935
+ name: "OtlpLogTransport",
936
+ batchSize: this.batchSize,
937
+ maxBufferSize: config.maxBufferSize ?? require_batch_buffer.DEFAULT_MAX_BUFFER_SIZE,
938
+ send: (entries) => this.send(entries)
939
+ });
1016
940
  this.resourceAttrs = toAttributes({
1017
941
  "service.name": config.serviceName ?? "logixia",
1018
942
  ...config.serviceVersion ? { "service.version": config.serviceVersion } : {},
@@ -1025,8 +949,8 @@ var OtlpLogTransport = class {
1025
949
  if (this.flushTimer.unref) this.flushTimer.unref();
1026
950
  }
1027
951
  write(entry) {
1028
- this.batch.push(entry);
1029
- if (this.batch.length >= this.batchSize) this.flush().catch(() => {});
952
+ this.buffer.push(entry);
953
+ this.buffer.flushIfFull();
1030
954
  }
1031
955
  /** Convert one entry into an OTLP LogRecord. */
1032
956
  toLogRecord(entry) {
@@ -1044,11 +968,18 @@ var OtlpLogTransport = class {
1044
968
  body: { stringValue: entry.message },
1045
969
  attributes: toAttributes(attrs)
1046
970
  };
1047
- if (entry.traceId) record["traceId"] = entry.traceId;
971
+ if (entry.traceId) {
972
+ const traceId = toOtlpTraceId(entry.traceId);
973
+ if (traceId) record["traceId"] = traceId;
974
+ else record["attributes"].push({
975
+ key: "trace_id",
976
+ value: { stringValue: entry.traceId }
977
+ });
978
+ }
1048
979
  return record;
1049
980
  }
1050
981
  buildPayload(entries) {
1051
- return JSON.stringify({ resourceLogs: [{
982
+ return require_safe_stringify.stringifyForLog({ resourceLogs: [{
1052
983
  resource: { attributes: this.resourceAttrs },
1053
984
  scopeLogs: [{
1054
985
  scope: { name: "logixia" },
@@ -1056,40 +987,40 @@ var OtlpLogTransport = class {
1056
987
  }]
1057
988
  }] });
1058
989
  }
1059
- async flush() {
1060
- while (this.batch.length > 0) {
1061
- const entries = this.batch.splice(0, this.batchSize);
1062
- try {
1063
- await this.send(entries);
1064
- } catch (err) {
1065
- require_transport_manager.internalError("OtlpLogTransport flush error", err);
1066
- this.batch.unshift(...entries);
1067
- return;
1068
- }
1069
- }
990
+ flush() {
991
+ return this.buffer.flush();
1070
992
  }
1071
993
  async send(entries) {
1072
994
  if (typeof fetch !== "function") {
1073
- require_transport_manager.internalWarn("OtlpLogTransport: global fetch unavailable — cannot export logs");
995
+ require_internal_log.internalWarn("OtlpLogTransport: global fetch unavailable — cannot export logs");
1074
996
  return;
1075
997
  }
1076
- const res = await fetch(this.url, {
1077
- method: "POST",
1078
- headers: {
1079
- "Content-Type": "application/json",
1080
- ...this.headers
1081
- },
1082
- body: this.buildPayload(entries)
1083
- });
1084
- if (!res.ok) throw new Error(`OTLP export failed: HTTP ${res.status}`);
998
+ const controller = new AbortController();
999
+ const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);
1000
+ try {
1001
+ const res = await fetch(this.url, {
1002
+ method: "POST",
1003
+ headers: {
1004
+ "Content-Type": "application/json",
1005
+ ...this.headers
1006
+ },
1007
+ body: this.buildPayload(entries),
1008
+ signal: controller.signal
1009
+ });
1010
+ if (!res.ok) throw new require_batch_buffer.HttpError(res.status, "", "OTLP export");
1011
+ } catch (err) {
1012
+ if (controller.signal.aborted) throw new Error(`OTLP export timed out after ${this.requestTimeoutMs}ms`, { cause: err });
1013
+ throw err;
1014
+ } finally {
1015
+ clearTimeout(timer);
1016
+ }
1085
1017
  }
1086
1018
  async close() {
1087
1019
  if (this.flushTimer) {
1088
1020
  clearInterval(this.flushTimer);
1089
1021
  this.flushTimer = null;
1090
1022
  }
1091
- for (let attempt = 0; attempt < 3 && this.batch.length > 0; attempt += 1) await this.flush();
1092
- if (this.batch.length > 0) require_transport_manager.internalError(`OtlpLogTransport closing with ${this.batch.length} undelivered record(s)`);
1023
+ await this.buffer.close();
1093
1024
  }
1094
1025
  };
1095
1026
 
@@ -1419,6 +1350,9 @@ const logger = new require_logitron_logger_module.LogixiaLogger(DEFAULT_CONFIG);
1419
1350
  */
1420
1351
 
1421
1352
  //#endregion
1353
+ exports.BasicLogIndexer = require_search.BasicLogIndexer;
1354
+ exports.BasicSearchEngine = require_search.BasicSearchEngine;
1355
+ exports.CorrelationEngine = require_search.CorrelationEngine;
1422
1356
  exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
1423
1357
  exports.DEFAULT_LOG_COLORS = require_logitron_logger_module.DEFAULT_LOG_COLORS;
1424
1358
  exports.DEFAULT_LOG_LEVELS = require_logitron_logger_module.DEFAULT_LOG_LEVELS;
@@ -1434,9 +1368,10 @@ Object.defineProperty(exports, 'KafkaTraceInterceptor', {
1434
1368
  });
1435
1369
  exports.LOGIXIA_LOGGER_CONFIG = require_logitron_logger_module.LOGIXIA_LOGGER_CONFIG;
1436
1370
  exports.LOGIXIA_LOGGER_PREFIX = require_logitron_logger_module.LOGIXIA_LOGGER_PREFIX;
1371
+ exports.LOGIXIA_TRACE_CONFIG = require_logitron_logger_module.LOGIXIA_TRACE_CONFIG;
1437
1372
  exports.LogLevel = require_logitron_logger_module.LogLevel;
1438
1373
  exports.LogMethod = LogMethod;
1439
- exports.LogixiaContext = require_logitron_logger_module.LogixiaContext;
1374
+ exports.LogixiaContext = require_async_context.LogixiaContext;
1440
1375
  exports.LogixiaException = LogixiaException;
1441
1376
  Object.defineProperty(exports, 'LogixiaExceptionFilter', {
1442
1377
  enumerable: true,
@@ -1458,8 +1393,11 @@ Object.defineProperty(exports, 'LogixiaLoggerService', {
1458
1393
  }
1459
1394
  });
1460
1395
  exports.MetricsPlugin = MetricsPlugin;
1396
+ exports.NLPSearchEngine = require_search.NLPSearchEngine;
1461
1397
  exports.OtlpLogTransport = OtlpLogTransport;
1398
+ exports.PatternRecognitionEngine = require_search.PatternRecognitionEngine;
1462
1399
  exports.PluginRegistry = require_logitron_logger_module.PluginRegistry;
1400
+ exports.SearchManager = require_search.SearchManager;
1463
1401
  exports.TRACE_CONTEXT_KEY = require_logitron_logger_module.TRACE_CONTEXT_KEY;
1464
1402
  exports.TextFormatter = TextFormatter;
1465
1403
  exports.TraceContext = require_logitron_logger_module.TraceContext;
@@ -1470,17 +1408,18 @@ Object.defineProperty(exports, 'WebSocketTraceInterceptor', {
1470
1408
  }
1471
1409
  });
1472
1410
  exports._setActiveContextKey = require_logitron_logger_module._setActiveContextKey;
1411
+ exports._shutdownRegistrySize = require_logitron_logger_module._shutdownRegistrySize;
1473
1412
  exports.addEventFields = addEventFields;
1474
1413
  exports.applyRedaction = require_logitron_logger_module.applyRedaction;
1475
- exports.createExpressContextMiddleware = require_logitron_logger_module.createExpressContextMiddleware;
1476
- exports.createFastifyContextHook = require_logitron_logger_module.createFastifyContextHook;
1414
+ exports.createExpressContextMiddleware = require_async_context.createExpressContextMiddleware;
1415
+ exports.createFastifyContextHook = require_async_context.createFastifyContextHook;
1477
1416
  exports.createLevelControlHandler = createLevelControlHandler;
1478
1417
  exports.createLogger = createLogger;
1479
1418
  exports.createLoggerService = createLoggerService;
1480
1419
  exports.createMetricsPlugin = createMetricsPlugin;
1481
1420
  exports.createTraceMiddleware = require_logitron_logger_module.createTraceMiddleware;
1482
1421
  exports.createTypedLogger = createTypedLogger;
1483
- exports.decycleValue = decycleValue;
1422
+ exports.decycleValue = require_safe_stringify.decycleValue;
1484
1423
  exports.defineLogSchema = defineLogSchema;
1485
1424
  exports.deregisterFromShutdown = require_logitron_logger_module.deregisterFromShutdown;
1486
1425
  exports.disableOtelBridge = require_logitron_logger_module.disableOtelBridge;
@@ -1503,12 +1442,13 @@ exports.redactObject = require_logitron_logger_module.redactObject;
1503
1442
  exports.registerForShutdown = require_logitron_logger_module.registerForShutdown;
1504
1443
  exports.registerLevelSignal = registerLevelSignal;
1505
1444
  exports.resetShutdownHandlers = require_logitron_logger_module.resetShutdownHandlers;
1506
- exports.retrocycle = retrocycle;
1445
+ exports.retrocycle = require_safe_stringify.retrocycle;
1507
1446
  exports.runWithTraceId = require_logitron_logger_module.runWithTraceId;
1508
- exports.safeStringify = safeStringify;
1447
+ exports.safeStringify = require_safe_stringify.safeStringify;
1509
1448
  exports.serializeError = require_logitron_logger_module.serializeError;
1510
1449
  exports.setEventField = setEventField;
1511
1450
  exports.setTraceId = require_logitron_logger_module.setTraceId;
1451
+ exports.stringifyForLog = require_safe_stringify.stringifyForLog;
1512
1452
  exports.toOtelSeverity = toOtelSeverity;
1513
1453
  exports.traceStorage = require_logitron_logger_module.traceStorage;
1514
1454
  exports.usePlugin = require_logitron_logger_module.usePlugin;