logixia 2.0.0 → 2.0.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 (239) hide show
  1. package/README.md +172 -2597
  2. package/dist/async-context-2mbUKhcl.mjs +132 -0
  3. package/dist/async-context-2mbUKhcl.mjs.map +1 -0
  4. package/dist/async-context-DUFMDYAr.js +148 -0
  5. package/dist/async-context-DUFMDYAr.js.map +1 -0
  6. package/dist/{azure-monitor.transport-CrvfHd9C.js → azure-monitor.transport-Bu4S2I2q.js} +32 -20
  7. package/dist/azure-monitor.transport-Bu4S2I2q.js.map +1 -0
  8. package/dist/{azure-monitor.transport-Cn_3Usvu.d.ts → azure-monitor.transport-Bvf7Xegt.d.ts} +3 -6
  9. package/dist/azure-monitor.transport-Bvf7Xegt.d.ts.map +1 -0
  10. package/dist/{azure-monitor.transport-CHnjVRF-.mjs → azure-monitor.transport-C1RWAumT.mjs} +27 -15
  11. package/dist/azure-monitor.transport-C1RWAumT.mjs.map +1 -0
  12. package/dist/{azure-monitor.transport-D7Da4RAb.d.mts → azure-monitor.transport-CbSHOnNX.d.mts} +3 -6
  13. package/dist/azure-monitor.transport-CbSHOnNX.d.mts.map +1 -0
  14. package/dist/azure.d.mts +1 -2
  15. package/dist/azure.d.ts +1 -2
  16. package/dist/azure.js +3 -6
  17. package/dist/azure.mjs +1 -6
  18. package/dist/{batch-buffer-PGvSgbmd.mjs → batch-buffer-BvXLDPlV.mjs} +21 -7
  19. package/dist/batch-buffer-BvXLDPlV.mjs.map +1 -0
  20. package/dist/{batch-buffer-BY-mRWIK.js → batch-buffer-C7Am4Mw-.js} +53 -40
  21. package/dist/batch-buffer-C7Am4Mw-.js.map +1 -0
  22. package/dist/browser.d.mts +47 -27
  23. package/dist/browser.d.mts.map +1 -1
  24. package/dist/browser.d.ts +47 -27
  25. package/dist/browser.d.ts.map +1 -1
  26. package/dist/browser.js +464 -62
  27. package/dist/browser.js.map +1 -1
  28. package/dist/browser.mjs +465 -65
  29. package/dist/browser.mjs.map +1 -1
  30. package/dist/{builder-0gEzRopq.mjs → builder-DhNhvOkt.mjs} +307 -246
  31. package/dist/builder-DhNhvOkt.mjs.map +1 -0
  32. package/dist/{builder-D44QktIo.js → builder-yFvJrz7o.js} +435 -399
  33. package/dist/builder-yFvJrz7o.js.map +1 -0
  34. package/dist/cli/index.js +216 -125
  35. package/dist/cloudwatch.d.mts +1 -2
  36. package/dist/cloudwatch.d.ts +1 -2
  37. package/dist/cloudwatch.js +3 -7
  38. package/dist/cloudwatch.mjs +1 -7
  39. package/dist/{cloudwatch.transport-DsEq633o.d.ts → cloudwatch.transport-CQyT6U91.d.ts} +2 -6
  40. package/dist/cloudwatch.transport-CQyT6U91.d.ts.map +1 -0
  41. package/dist/{cloudwatch.transport-BO1ahxw-.js → cloudwatch.transport-Ch1Uae-0.js} +61 -36
  42. package/dist/cloudwatch.transport-Ch1Uae-0.js.map +1 -0
  43. package/dist/{cloudwatch.transport-UlyZFWMn.d.mts → cloudwatch.transport-CjVrI6S4.d.mts} +2 -6
  44. package/dist/cloudwatch.transport-CjVrI6S4.d.mts.map +1 -0
  45. package/dist/{cloudwatch.transport-DZ6ies7g.mjs → cloudwatch.transport-DZqF2xZO.mjs} +54 -28
  46. package/dist/cloudwatch.transport-DZqF2xZO.mjs.map +1 -0
  47. package/dist/{coerce.utils-Cu6IUTgX.mjs → coerce.utils-B_rEudCn.mjs} +3 -4
  48. package/dist/{coerce.utils-Cu6IUTgX.mjs.map → coerce.utils-B_rEudCn.mjs.map} +1 -1
  49. package/dist/{coerce.utils-B-LilukN.js → coerce.utils-C1C5sIX0.js} +8 -10
  50. package/dist/{coerce.utils-B-LilukN.js.map → coerce.utils-C1C5sIX0.js.map} +1 -1
  51. package/dist/correlation.d.mts +15 -69
  52. package/dist/correlation.d.mts.map +1 -1
  53. package/dist/correlation.d.ts +15 -69
  54. package/dist/correlation.d.ts.map +1 -1
  55. package/dist/correlation.js +69 -20
  56. package/dist/correlation.js.map +1 -1
  57. package/dist/correlation.mjs +67 -17
  58. package/dist/correlation.mjs.map +1 -1
  59. package/dist/{entry-fields-BvOLFlJ4.js → entry-fields-BSLkzw18.js} +16 -13
  60. package/dist/entry-fields-BSLkzw18.js.map +1 -0
  61. package/dist/{entry-fields-BJkuPnIg.mjs → entry-fields-J1OBi24o.mjs} +11 -7
  62. package/dist/entry-fields-J1OBi24o.mjs.map +1 -0
  63. package/dist/gcp.d.mts +1 -2
  64. package/dist/gcp.d.ts +1 -2
  65. package/dist/gcp.js +3 -7
  66. package/dist/gcp.mjs +1 -7
  67. package/dist/{gcp.transport-B7oc97sG.d.ts → gcp.transport-BCIvdFV-.d.ts} +5 -8
  68. package/dist/gcp.transport-BCIvdFV-.d.ts.map +1 -0
  69. package/dist/{gcp.transport-GrJurKo8.d.mts → gcp.transport-D9SdLPwP.d.mts} +5 -8
  70. package/dist/gcp.transport-D9SdLPwP.d.mts.map +1 -0
  71. package/dist/{gcp.transport-DBX5TPIy.mjs → gcp.transport-DVCmnA3b.mjs} +59 -16
  72. package/dist/gcp.transport-DVCmnA3b.mjs.map +1 -0
  73. package/dist/{gcp.transport-CHV8MGgz.js → gcp.transport-Dy2Lf8FI.js} +64 -22
  74. package/dist/gcp.transport-Dy2Lf8FI.js.map +1 -0
  75. package/dist/http-shapes-BnBkJcid.d.mts +32 -0
  76. package/dist/http-shapes-BnBkJcid.d.mts.map +1 -0
  77. package/dist/http-shapes-BnBkJcid.d.ts +32 -0
  78. package/dist/http-shapes-BnBkJcid.d.ts.map +1 -0
  79. package/dist/{index-3mw5gaCw.d.mts → index-BSTtFcQ6.d.mts} +142 -13
  80. package/dist/index-BSTtFcQ6.d.mts.map +1 -0
  81. package/dist/{index-DhIoploR.d.ts → index-CFDGkI8n.d.ts} +142 -13
  82. package/dist/index-CFDGkI8n.d.ts.map +1 -0
  83. package/dist/index.d.mts +114 -217
  84. package/dist/index.d.mts.map +1 -1
  85. package/dist/index.d.ts +113 -216
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +182 -279
  88. package/dist/index.js.map +1 -1
  89. package/dist/index.mjs +160 -256
  90. package/dist/index.mjs.map +1 -1
  91. package/dist/internal-log-Bg4V1cPg.mjs +170 -0
  92. package/dist/internal-log-Bg4V1cPg.mjs.map +1 -0
  93. package/dist/internal-log-By4Govmu.js +223 -0
  94. package/dist/internal-log-By4Govmu.js.map +1 -0
  95. package/dist/{logitron-logger-UVeN-mQm.d.ts → logitron-logger-D22Yb61K.d.mts} +121 -100
  96. package/dist/logitron-logger-D22Yb61K.d.mts.map +1 -0
  97. package/dist/{logitron-logger-BFDSO8Io.d.mts → logitron-logger-D_MYYrQt.d.ts} +121 -100
  98. package/dist/logitron-logger-D_MYYrQt.d.ts.map +1 -0
  99. package/dist/middleware.d.mts +13 -28
  100. package/dist/middleware.d.mts.map +1 -1
  101. package/dist/middleware.d.ts +13 -28
  102. package/dist/middleware.d.ts.map +1 -1
  103. package/dist/middleware.js +20 -81
  104. package/dist/middleware.js.map +1 -1
  105. package/dist/middleware.mjs +17 -79
  106. package/dist/middleware.mjs.map +1 -1
  107. package/dist/nest.d.mts +37 -48
  108. package/dist/nest.d.mts.map +1 -1
  109. package/dist/nest.d.ts +37 -48
  110. package/dist/nest.d.ts.map +1 -1
  111. package/dist/nest.js +124 -135
  112. package/dist/nest.js.map +1 -1
  113. package/dist/nest.mjs +69 -78
  114. package/dist/nest.mjs.map +1 -1
  115. package/dist/{transport.manager-BiuCAJd2.mjs → otel-Dt5riXuE.mjs} +275 -117
  116. package/dist/otel-Dt5riXuE.mjs.map +1 -0
  117. package/dist/{transport.manager-CXbKKdVE.js → otel-DyeH6DVR.js} +373 -178
  118. package/dist/otel-DyeH6DVR.js.map +1 -0
  119. package/dist/own-property-BWkibepN.js +40 -0
  120. package/dist/own-property-BWkibepN.js.map +1 -0
  121. package/dist/own-property-CjFw9qwZ.mjs +29 -0
  122. package/dist/own-property-CjFw9qwZ.mjs.map +1 -0
  123. package/dist/{trace.utils-CvXgaiQT.mjs → request-trace-BgNykH9M.mjs} +40 -9
  124. package/dist/request-trace-BgNykH9M.mjs.map +1 -0
  125. package/dist/{trace.utils-DpBOLDtq.js → request-trace-ByujsUZk.js} +117 -77
  126. package/dist/request-trace-ByujsUZk.js.map +1 -0
  127. package/dist/rolldown-runtime-D3PmRqjj.mjs +4 -0
  128. package/dist/{safe-stringify-DJ66tW5I.mjs → safe-stringify-B5p5ktFe.mjs} +39 -15
  129. package/dist/safe-stringify-B5p5ktFe.mjs.map +1 -0
  130. package/dist/{safe-stringify-DWo3aZp_.js → safe-stringify-J3sh-7YM.js} +59 -36
  131. package/dist/safe-stringify-J3sh-7YM.js.map +1 -0
  132. package/dist/{search-C4V0OMEn.js → search-CRjhHxe9.js} +319 -92
  133. package/dist/search-CRjhHxe9.js.map +1 -0
  134. package/dist/{search-CNh9uVwR.d.ts → search-DA3ft3X5.d.mts} +5 -22
  135. package/dist/search-DA3ft3X5.d.mts.map +1 -0
  136. package/dist/{search-BFbu_oVn.mjs → search-DAXKE-P9.mjs} +289 -62
  137. package/dist/search-DAXKE-P9.mjs.map +1 -0
  138. package/dist/{search-DXANsQ2n.d.mts → search-DEl3Pe47.d.ts} +5 -22
  139. package/dist/search-DEl3Pe47.d.ts.map +1 -0
  140. package/dist/search.d.mts +2 -4
  141. package/dist/search.d.ts +2 -4
  142. package/dist/search.js +3 -4
  143. package/dist/search.mjs +1 -4
  144. package/dist/secret-config-CmK2wVkr.js +272 -0
  145. package/dist/secret-config-CmK2wVkr.js.map +1 -0
  146. package/dist/secret-config-Dhb6pqTU.mjs +210 -0
  147. package/dist/secret-config-Dhb6pqTU.mjs.map +1 -0
  148. package/dist/{slack.transport-CXjQYOes.d.ts → slack.transport-BDyENuR0.d.mts} +56 -9
  149. package/dist/slack.transport-BDyENuR0.d.mts.map +1 -0
  150. package/dist/{slack.transport-Bzw7sucI.mjs → slack.transport-BTEwsREY.mjs} +263 -31
  151. package/dist/slack.transport-BTEwsREY.mjs.map +1 -0
  152. package/dist/{slack.transport-BZzoXDPn.d.mts → slack.transport-C6E0l4kw.d.ts} +56 -9
  153. package/dist/slack.transport-C6E0l4kw.d.ts.map +1 -0
  154. package/dist/{slack.transport-BfJRouB2.js → slack.transport-UbYvOdKx.js} +286 -42
  155. package/dist/slack.transport-UbYvOdKx.js.map +1 -0
  156. package/dist/testing.d.mts +13 -11
  157. package/dist/testing.d.mts.map +1 -1
  158. package/dist/testing.d.ts +13 -11
  159. package/dist/testing.d.ts.map +1 -1
  160. package/dist/testing.js +41 -7
  161. package/dist/testing.js.map +1 -1
  162. package/dist/testing.mjs +40 -6
  163. package/dist/testing.mjs.map +1 -1
  164. package/dist/{transport.types-CGoHpWQR.d.ts → transport.types-CzJq4IrF.d.mts} +14 -5
  165. package/dist/transport.types-CzJq4IrF.d.mts.map +1 -0
  166. package/dist/{transport.types-BMnurPcc.d.mts → transport.types-CzJq4IrF.d.ts} +14 -5
  167. package/dist/transport.types-CzJq4IrF.d.ts.map +1 -0
  168. package/dist/transports.d.mts +39 -41
  169. package/dist/transports.d.mts.map +1 -1
  170. package/dist/transports.d.ts +39 -41
  171. package/dist/transports.d.ts.map +1 -1
  172. package/dist/transports.js +19 -22
  173. package/dist/transports.mjs +7 -13
  174. package/dist/worker-entry.js +438 -107
  175. package/dist/worker.d.mts +1 -2
  176. package/dist/worker.d.ts +1 -2
  177. package/dist/worker.js +3 -4
  178. package/dist/worker.mjs +1 -4
  179. package/dist/{worker.transport-JvGPog3C.d.mts → worker.transport-B9mCQSM1.d.ts} +7 -6
  180. package/dist/worker.transport-B9mCQSM1.d.ts.map +1 -0
  181. package/dist/{worker.transport-CdzSZJmw.d.ts → worker.transport-Bl8lFRck.d.mts} +7 -6
  182. package/dist/worker.transport-Bl8lFRck.d.mts.map +1 -0
  183. package/dist/{worker.transport-lPxO2MVL.mjs → worker.transport-BmmOKb1-.mjs} +43 -10
  184. package/dist/worker.transport-BmmOKb1-.mjs.map +1 -0
  185. package/dist/{worker.transport-BdPxu3PN.js → worker.transport-DxxbqQCG.js} +48 -15
  186. package/dist/worker.transport-DxxbqQCG.js.map +1 -0
  187. package/package.json +51 -75
  188. package/dist/async-context-BzJrbfQs.mjs +0 -72
  189. package/dist/async-context-BzJrbfQs.mjs.map +0 -1
  190. package/dist/async-context-DyQQYq3I.js +0 -92
  191. package/dist/async-context-DyQQYq3I.js.map +0 -1
  192. package/dist/azure-monitor.transport-CHnjVRF-.mjs.map +0 -1
  193. package/dist/azure-monitor.transport-Cn_3Usvu.d.ts.map +0 -1
  194. package/dist/azure-monitor.transport-CrvfHd9C.js.map +0 -1
  195. package/dist/azure-monitor.transport-D7Da4RAb.d.mts.map +0 -1
  196. package/dist/batch-buffer-BY-mRWIK.js.map +0 -1
  197. package/dist/batch-buffer-PGvSgbmd.mjs.map +0 -1
  198. package/dist/builder-0gEzRopq.mjs.map +0 -1
  199. package/dist/builder-D44QktIo.js.map +0 -1
  200. package/dist/chunk-DLSkYcPk.mjs +0 -7
  201. package/dist/chunk-nOFOJqeH.js +0 -30
  202. package/dist/cloudwatch.transport-BO1ahxw-.js.map +0 -1
  203. package/dist/cloudwatch.transport-DZ6ies7g.mjs.map +0 -1
  204. package/dist/cloudwatch.transport-DsEq633o.d.ts.map +0 -1
  205. package/dist/cloudwatch.transport-UlyZFWMn.d.mts.map +0 -1
  206. package/dist/entry-fields-BJkuPnIg.mjs.map +0 -1
  207. package/dist/entry-fields-BvOLFlJ4.js.map +0 -1
  208. package/dist/gcp.transport-B7oc97sG.d.ts.map +0 -1
  209. package/dist/gcp.transport-CHV8MGgz.js.map +0 -1
  210. package/dist/gcp.transport-DBX5TPIy.mjs.map +0 -1
  211. package/dist/gcp.transport-GrJurKo8.d.mts.map +0 -1
  212. package/dist/index-3mw5gaCw.d.mts.map +0 -1
  213. package/dist/index-DhIoploR.d.ts.map +0 -1
  214. package/dist/internal-log-BUJYMZbE.js +0 -70
  215. package/dist/internal-log-BUJYMZbE.js.map +0 -1
  216. package/dist/internal-log-Cm8SOWSV.mjs +0 -52
  217. package/dist/internal-log-Cm8SOWSV.mjs.map +0 -1
  218. package/dist/logitron-logger-BFDSO8Io.d.mts.map +0 -1
  219. package/dist/logitron-logger-UVeN-mQm.d.ts.map +0 -1
  220. package/dist/safe-stringify-DJ66tW5I.mjs.map +0 -1
  221. package/dist/safe-stringify-DWo3aZp_.js.map +0 -1
  222. package/dist/search-BFbu_oVn.mjs.map +0 -1
  223. package/dist/search-C4V0OMEn.js.map +0 -1
  224. package/dist/search-CNh9uVwR.d.ts.map +0 -1
  225. package/dist/search-DXANsQ2n.d.mts.map +0 -1
  226. package/dist/slack.transport-BZzoXDPn.d.mts.map +0 -1
  227. package/dist/slack.transport-BfJRouB2.js.map +0 -1
  228. package/dist/slack.transport-Bzw7sucI.mjs.map +0 -1
  229. package/dist/slack.transport-CXjQYOes.d.ts.map +0 -1
  230. package/dist/trace.utils-CvXgaiQT.mjs.map +0 -1
  231. package/dist/trace.utils-DpBOLDtq.js.map +0 -1
  232. package/dist/transport.manager-BiuCAJd2.mjs.map +0 -1
  233. package/dist/transport.manager-CXbKKdVE.js.map +0 -1
  234. package/dist/transport.types-BMnurPcc.d.mts.map +0 -1
  235. package/dist/transport.types-CGoHpWQR.d.ts.map +0 -1
  236. package/dist/worker.transport-BdPxu3PN.js.map +0 -1
  237. package/dist/worker.transport-CdzSZJmw.d.ts.map +0 -1
  238. package/dist/worker.transport-JvGPog3C.d.mts.map +0 -1
  239. package/dist/worker.transport-lPxO2MVL.mjs.map +0 -1
@@ -1,16 +1,16 @@
1
- import { t as __require } from "./chunk-DLSkYcPk.mjs";
2
- import { n as internalLog, r as internalWarn, t as internalError } from "./internal-log-Cm8SOWSV.mjs";
3
- import { i as stringifyForLog } from "./safe-stringify-DJ66tW5I.mjs";
4
- import { t as mergeCoreFields } from "./entry-fields-BJkuPnIg.mjs";
5
- import { t as safeToString } from "./coerce.utils-Cu6IUTgX.mjs";
6
- import * as fs from "node:fs";
7
- import * as path$1 from "node:path";
1
+ import { t as __require } from "./rolldown-runtime-D3PmRqjj.mjs";
2
+ import { n as internalLog, r as internalWarn, t as internalError } from "./internal-log-Bg4V1cPg.mjs";
3
+ import { n as protectSecrets, o as urlSecrets, r as scrubError, t as collectSecrets } from "./secret-config-Dhb6pqTU.mjs";
4
+ import { t as safeToString } from "./coerce.utils-B_rEudCn.mjs";
5
+ import { i as stringifyForLog } from "./safe-stringify-B5p5ktFe.mjs";
6
+ import { t as mergeCoreFields } from "./entry-fields-J1OBi24o.mjs";
8
7
  import { EventEmitter } from "node:events";
9
8
  import { promisify } from "node:util";
10
9
  import { createGzip, gzip } from "node:zlib";
10
+ import * as fs from "node:fs";
11
+ import * as path$1 from "node:path";
11
12
  import { pipeline } from "node:stream/promises";
12
-
13
- //#region src/utils/sanitize.utils.ts
13
+ // src/utils/sanitize.utils.ts
14
14
  /**
15
15
  * Control-character stripping for text-mode log output.
16
16
  *
@@ -26,9 +26,7 @@ const VISIBLE_ESCAPES = {
26
26
  function stripControlChars(value) {
27
27
  return value.replace(CONTROL_CHARS_RE, (ch) => VISIBLE_ESCAPES[ch] ?? "");
28
28
  }
29
-
30
- //#endregion
31
- //#region src/transports/console.transport.ts
29
+ // src/transports/console.transport.ts
32
30
  /**
33
31
  * Writes log entries to stdout (info/debug/verbose) and stderr (error/warn).
34
32
  *
@@ -38,32 +36,13 @@ function stripControlChars(value) {
38
36
  * transports: { console: { format: 'json' } }
39
37
  */
40
38
  var ConsoleTransport = class ConsoleTransport {
41
- static #_ = this.COLORS = new Map([
42
- ["black", "\x1B[30m"],
43
- ["red", "\x1B[31m"],
44
- ["green", "\x1B[32m"],
45
- ["yellow", "\x1B[33m"],
46
- ["blue", "\x1B[34m"],
47
- ["magenta", "\x1B[35m"],
48
- ["cyan", "\x1B[36m"],
49
- ["white", "\x1B[37m"],
50
- ["gray", "\x1B[90m"],
51
- ["grey", "\x1B[90m"],
52
- ["brightred", "\x1B[91m"],
53
- ["brightgreen", "\x1B[92m"],
54
- ["brightyellow", "\x1B[93m"],
55
- ["brightblue", "\x1B[94m"],
56
- ["brightmagenta", "\x1B[95m"],
57
- ["brightcyan", "\x1B[96m"],
58
- ["brightwhite", "\x1B[97m"],
59
- ["reset", "\x1B[0m"]
60
- ]);
61
39
  static sanitize(value) {
62
40
  return stripControlChars(safeToString(value));
63
41
  }
64
42
  constructor(config = {}) {
65
43
  this.config = config;
66
44
  this.name = "console";
45
+ this.level = config.level;
67
46
  if (config.filter) this.filter = config.filter;
68
47
  }
69
48
  write(entry) {
@@ -126,10 +105,28 @@ var ConsoleTransport = class ConsoleTransport {
126
105
  close() {
127
106
  return Promise.resolve();
128
107
  }
108
+ static #_ = () => this.COLORS = /* @__PURE__ */ new Map([
109
+ ["black", "\x1B[30m"],
110
+ ["red", "\x1B[31m"],
111
+ ["green", "\x1B[32m"],
112
+ ["yellow", "\x1B[33m"],
113
+ ["blue", "\x1B[34m"],
114
+ ["magenta", "\x1B[35m"],
115
+ ["cyan", "\x1B[36m"],
116
+ ["white", "\x1B[37m"],
117
+ ["gray", "\x1B[90m"],
118
+ ["grey", "\x1B[90m"],
119
+ ["brightred", "\x1B[91m"],
120
+ ["brightgreen", "\x1B[92m"],
121
+ ["brightyellow", "\x1B[93m"],
122
+ ["brightblue", "\x1B[94m"],
123
+ ["brightmagenta", "\x1B[95m"],
124
+ ["brightcyan", "\x1B[96m"],
125
+ ["brightwhite", "\x1B[97m"],
126
+ ["reset", "\x1B[0m"]
127
+ ]);
129
128
  };
130
-
131
- //#endregion
132
- //#region src/transports/buffer-cap.ts
129
+ // src/transports/buffer-cap.ts
133
130
  const DEFAULT_BUFFER_CAP = 1e4;
134
131
  const DROP_WARN_INTERVAL_MS$1 = 5e3;
135
132
  /**
@@ -145,8 +142,10 @@ var BufferCap = class {
145
142
  this.dropped = 0;
146
143
  this.lastWarning = 0;
147
144
  let max = fallback;
148
- if (requested !== void 0) if (Number.isInteger(requested) && requested >= 1) max = requested;
149
- else internalWarn(`${name}: maxBufferSize ${String(requested)} is not a positive integer; using ${fallback}`);
145
+ if (requested !== void 0) {
146
+ if (Number.isInteger(requested) && requested >= 1) max = requested;
147
+ else internalWarn(`${name}: maxBufferSize ${String(requested)} is not a positive integer; using ${fallback}`);
148
+ }
150
149
  this.max = Math.max(max, batchSize);
151
150
  }
152
151
  /** Drops the oldest items beyond the cap, in place. */
@@ -168,9 +167,7 @@ var BufferCap = class {
168
167
  this.lastWarning = now;
169
168
  }
170
169
  };
171
-
172
- //#endregion
173
- //#region src/transports/database.transport.ts
170
+ // src/transports/database.transport.ts
174
171
  /**
175
172
  * Validates that a SQL identifier (table/index name) contains only safe characters.
176
173
  * Prevents SQL injection via user-supplied table names.
@@ -193,7 +190,7 @@ const PG_DATA_CLASSES = [
193
190
  "23",
194
191
  "54"
195
192
  ];
196
- const MYSQL_DATA_CODES = new Set([
193
+ const MYSQL_DATA_CODES = /* @__PURE__ */ new Set([
197
194
  "ER_DATA_TOO_LONG",
198
195
  "ER_TRUNCATED_WRONG_VALUE",
199
196
  "ER_TRUNCATED_WRONG_VALUE_FOR_FIELD",
@@ -203,7 +200,7 @@ const MYSQL_DATA_CODES = new Set([
203
200
  "ER_INVALID_JSON_TEXT",
204
201
  "ER_INVALID_CHARACTER_STRING"
205
202
  ]);
206
- const MYSQL_DATA_ERRNOS = new Set([
203
+ const MYSQL_DATA_ERRNOS = /* @__PURE__ */ new Set([
207
204
  1048,
208
205
  1062,
209
206
  1264,
@@ -212,12 +209,12 @@ const MYSQL_DATA_ERRNOS = new Set([
212
209
  1406,
213
210
  3140
214
211
  ]);
215
- const SQLITE_DATA_CODES = new Set([
212
+ const SQLITE_DATA_CODES = /* @__PURE__ */ new Set([
216
213
  "SQLITE_CONSTRAINT",
217
214
  "SQLITE_TOOBIG",
218
215
  "SQLITE_MISMATCH"
219
216
  ]);
220
- const MONGO_DATA_CODES = new Set([
217
+ const MONGO_DATA_CODES = /* @__PURE__ */ new Set([
221
218
  2,
222
219
  121,
223
220
  10334,
@@ -279,13 +276,23 @@ var DatabaseTransport = class {
279
276
  this.name = "database";
280
277
  this.batch = [];
281
278
  this.isConnected = false;
279
+ protectSecrets(this, ["config", "connection"]);
282
280
  this.batchSize = config.batchSize || 100;
283
281
  this.flushInterval = config.flushInterval || 5e3;
284
282
  this.cap = new BufferCap("DatabaseTransport", config.maxBufferSize, this.batchSize);
283
+ this.level = config.level;
285
284
  if (config.filter) this.filter = config.filter;
286
285
  if (config.table) validateSqlIdentifier(config.table, "table");
287
286
  this.setupFlushTimer();
288
287
  }
288
+ secretValues() {
289
+ const { connectionString, password } = this.config;
290
+ return [
291
+ connectionString,
292
+ password,
293
+ ...connectionString ? urlSecrets(connectionString) : []
294
+ ];
295
+ }
289
296
  async write(entry) {
290
297
  if (!this.isConnected) await this.connect();
291
298
  this.addToBatch(entry);
@@ -346,6 +353,13 @@ var DatabaseTransport = class {
346
353
  this.cap.enforce(this.batch);
347
354
  }
348
355
  async writeEntries(entries) {
356
+ try {
357
+ await this.writeEntriesUnscrubbed(entries);
358
+ } catch (error) {
359
+ throw scrubError(error, this.secretValues());
360
+ }
361
+ }
362
+ async writeEntriesUnscrubbed(entries) {
349
363
  switch (this.config.type) {
350
364
  case "mongodb":
351
365
  await this.flushToMongoDB(entries);
@@ -424,13 +438,12 @@ var DatabaseTransport = class {
424
438
  case "mysql":
425
439
  await this.connectMySQL();
426
440
  break;
427
- case "sqlite":
428
- await this.connectSQLite();
429
- break;
441
+ case "sqlite": await this.connectSQLite();
430
442
  }
431
443
  this.isConnected = true;
432
444
  } catch (error) {
433
445
  this.isConnected = false;
446
+ scrubError(error, this.secretValues());
434
447
  throw new Error(`Database connection failed: ${error}`, { cause: error });
435
448
  }
436
449
  }
@@ -439,7 +452,8 @@ var DatabaseTransport = class {
439
452
  const { MongoClient } = await import("mongodb").catch(() => {
440
453
  throw new Error("MongoDB driver not installed. Run: npm install mongodb");
441
454
  });
442
- this.connection = new MongoClient(this.config.connectionString || `mongodb://${this.config.host}:${this.config.port}/${this.config.database}`);
455
+ const connectionString = this.config.connectionString || `mongodb://${this.config.host}:${this.config.port}/${this.config.database}`;
456
+ this.connection = new MongoClient(connectionString);
443
457
  await this.connection.connect();
444
458
  await this.connection.db(this.config.database).admin().ping();
445
459
  } catch (error) {
@@ -551,12 +565,13 @@ var DatabaseTransport = class {
551
565
  entry.environment
552
566
  ].map((value, column) => stripNul(column === 3 ? stripJsonNulEscape(value) : value))), POSTGRES_ROWS_PER_INSERT);
553
567
  const insertChunk = async (rows) => {
568
+ const placeholders = rows.map((_, i) => {
569
+ return `(${Array.from({ length: POSTGRES_COLUMNS }, (_unused, c) => `$${i * POSTGRES_COLUMNS + c + 1}`).join(", ")})`;
570
+ }).join(", ");
554
571
  const query = `
555
572
  INSERT INTO ${tableName}
556
573
  (timestamp, level, message, payload, context, trace_id, app_name, environment)
557
- VALUES ${rows.map((_, i) => {
558
- return `(${Array.from({ length: POSTGRES_COLUMNS }, (_unused, c) => `$${i * POSTGRES_COLUMNS + c + 1}`).join(", ")})`;
559
- }).join(", ")}
574
+ VALUES ${placeholders}
560
575
  `;
561
576
  await this.connection.query(query, rows.flat());
562
577
  };
@@ -720,9 +735,7 @@ var DatabaseTransport = class {
720
735
  case "mysql":
721
736
  await this.connection.end();
722
737
  break;
723
- case "sqlite":
724
- await this.connection.close();
725
- break;
738
+ case "sqlite": await this.connection.close();
726
739
  }
727
740
  this.isConnected = false;
728
741
  }
@@ -763,9 +776,7 @@ var DatabaseTransport = class {
763
776
  }
764
777
  }
765
778
  };
766
-
767
- //#endregion
768
- //#region src/transports/analytics.transport.ts
779
+ // src/transports/analytics.transport.ts
769
780
  /**
770
781
  * Thrown by sendBatch() when part of a batch was already delivered. drain()
771
782
  * requeues only `unsent`, so delivered entries are not sent twice.
@@ -789,16 +800,25 @@ var AnalyticsTransport = class {
789
800
  enableEventTracking: true,
790
801
  ...config
791
802
  };
803
+ protectSecrets(this, ["config"]);
792
804
  this.level = config.level;
793
805
  this.batchSize = this.config.batchSize || 50;
794
806
  this.flushInterval = this.config.flushInterval || 1e4;
795
807
  this.cap = new BufferCap(name, config.maxBufferSize, this.batchSize);
796
808
  }
809
+ /** Secret strings to scrub from errors: everything secret-looking in the config. Override to add more. */
810
+ secretValues() {
811
+ return collectSecrets(this.config);
812
+ }
797
813
  async write(entry) {
798
- if (!this.isReady) await this.ensureReady();
799
- if (this.shouldSkipEntry(entry)) return;
800
- if (this.config.batchSize && this.config.batchSize > 1) this.addToBatch(entry);
801
- else await this.sendEntry(entry);
814
+ try {
815
+ if (!this.isReady) await this.ensureReady();
816
+ if (this.shouldSkipEntry(entry)) return;
817
+ if (this.config.batchSize && this.config.batchSize > 1) this.addToBatch(entry);
818
+ else await this.sendEntry(entry);
819
+ } catch (error) {
820
+ throw scrubError(error, this.secretValues());
821
+ }
802
822
  }
803
823
  addToBatch(entry) {
804
824
  this.batch.push(entry);
@@ -836,6 +856,7 @@ var AnalyticsTransport = class {
836
856
  try {
837
857
  await this.sendBatch(entriesToSend);
838
858
  } catch (error) {
859
+ scrubError(error, this.secretValues());
839
860
  internalError(`Analytics transport ${this.name} flush failed`, error);
840
861
  this.batch.unshift(...error instanceof PartialBatchError ? error.unsent : entriesToSend);
841
862
  this.cap.enforce(this.batch);
@@ -897,9 +918,7 @@ var AnalyticsTransport = class {
897
918
  await this.ensureReady();
898
919
  }
899
920
  };
900
-
901
- //#endregion
902
- //#region src/transports/datadog.transport.ts
921
+ // src/transports/datadog.transport.ts
903
922
  const gzipAsync = promisify(gzip);
904
923
  const MAX_LOGS_PER_REQUEST = 1e3;
905
924
  const MAX_LOGS_PAYLOAD_BYTES = 5e6;
@@ -968,8 +987,12 @@ function tag(key, value) {
968
987
  *
969
988
  * The API key is transmitted via the `DD-API-KEY` request header — never in the URL.
970
989
  *
990
+ * Metric names keep the legacy `logitron.logs.<level>` prefix (kept for
991
+ * dashboards and monitors that already query it; renaming would be a breaking
992
+ * change). Query `logitron.logs.error`, not `logixia.logs.error`.
993
+ *
971
994
  * @example
972
- * transports: { datadog: { apiKey: process.env.DD_API_KEY, service: 'api', env: 'production' } }
995
+ * analytics: { datadog: { apiKey: process.env.DD_API_KEY, service: 'api', env: 'production' } }
973
996
  */
974
997
  var DataDogTransport = class extends AnalyticsTransport {
975
998
  constructor(config) {
@@ -979,6 +1002,7 @@ var DataDogTransport = class extends AnalyticsTransport {
979
1002
  this.baseUrl = `https://api.${site}`;
980
1003
  this.logsUrl = `https://http-intake.logs.${site}`;
981
1004
  this.metricsUrl = `https://api.${site}`;
1005
+ protectSecrets(this, ["datadogConfig"]);
982
1006
  }
983
1007
  async initialize() {
984
1008
  try {
@@ -1014,9 +1038,9 @@ var DataDogTransport = class extends AnalyticsTransport {
1014
1038
  }));
1015
1039
  const chunks = this.chunkLogs(items);
1016
1040
  for (let i = 0; i < chunks.length; i += 1) {
1017
- const chunk$1 = chunks[i];
1041
+ const chunk = chunks[i];
1018
1042
  try {
1019
- await this.makeLogsRequest("/api/v2/logs", `[${chunk$1.map((item) => item.json).join(",")}]`);
1043
+ await this.makeLogsRequest("/api/v2/logs", `[${chunk.map((item) => item.json).join(",")}]`);
1020
1044
  } catch (error) {
1021
1045
  if (i === 0) throw error;
1022
1046
  const unsent = chunks.slice(i).flatMap((c) => c.map((item) => item.entry));
@@ -1205,9 +1229,7 @@ var DataDogTransport = class extends AnalyticsTransport {
1205
1229
  }
1206
1230
  }
1207
1231
  };
1208
-
1209
- //#endregion
1210
- //#region src/transports/file.transport.ts
1232
+ // src/transports/file.transport.ts
1211
1233
  const appendFile = promisify(fs.appendFile);
1212
1234
  const rename = promisify(fs.rename);
1213
1235
  const unlink = promisify(fs.unlink);
@@ -1470,7 +1492,6 @@ var FileTransport = class {
1470
1492
  csvField(entry.traceId),
1471
1493
  csvField(stringifyForLog(entry.data || {}))
1472
1494
  ].join(",");
1473
- case "text":
1474
1495
  default: return `${entry.timestamp.toISOString()} [${stripControlChars(safeToString(entry.level)).toUpperCase()}] ${stripControlChars(safeToString(entry.message))}${entry.data ? " " + stringifyForLog(entry.data) : ""}`;
1475
1496
  }
1476
1497
  }
@@ -1496,22 +1517,22 @@ var FileTransport = class {
1496
1517
  await this.append(content);
1497
1518
  return;
1498
1519
  }
1499
- let chunk$1 = "";
1520
+ let chunk = "";
1500
1521
  let chunkBytes = 0;
1501
1522
  for (const entry of entries) {
1502
1523
  const line = this.formatEntry(entry) + "\n";
1503
1524
  const lineBytes = Buffer.byteLength(line);
1504
1525
  const used = this.bytesWritten + chunkBytes;
1505
1526
  if (used > 0 && used + lineBytes > this.maxBytes) {
1506
- if (chunk$1) await this.append(chunk$1, chunkBytes);
1507
- chunk$1 = "";
1527
+ if (chunk) await this.append(chunk, chunkBytes);
1528
+ chunk = "";
1508
1529
  chunkBytes = 0;
1509
1530
  await this.rotateFile();
1510
1531
  }
1511
- chunk$1 += line;
1532
+ chunk += line;
1512
1533
  chunkBytes += lineBytes;
1513
1534
  }
1514
- if (chunk$1) await this.append(chunk$1, chunkBytes);
1535
+ if (chunk) await this.append(chunk, chunkBytes);
1515
1536
  }
1516
1537
  async append(content, bytes = Buffer.byteLength(content)) {
1517
1538
  await appendFile(this.currentFilePath, content, { mode: this.fileMode });
@@ -1540,7 +1561,7 @@ var FileTransport = class {
1540
1561
  }
1541
1562
  parseInterval(interval) {
1542
1563
  const match = /^(\d{1,6})([hdwmy])$/i.exec(interval.trim());
1543
- if (!match) return 1440 * 60 * 1e3;
1564
+ if (!match) return 864e5;
1544
1565
  const value = Number.parseInt(match[1] || "1", 10);
1545
1566
  switch ((match[2] || "h").toLowerCase()) {
1546
1567
  case "h": return value * 60 * 60 * 1e3;
@@ -1655,14 +1676,12 @@ var FileTransport = class {
1655
1676
  this.reportDropped(0);
1656
1677
  }
1657
1678
  };
1658
-
1659
- //#endregion
1660
- //#region src/transports/google-analytics.transport.ts
1679
+ // src/transports/google-analytics.transport.ts
1661
1680
  /**
1662
1681
  * Sends log entries as Google Analytics 4 Measurement Protocol events.
1663
1682
  *
1664
1683
  * @example
1665
- * transports: {
1684
+ * analytics: {
1666
1685
  * googleAnalytics: { measurementId: 'G-XXXXXXX', apiSecret: process.env.GA_API_SECRET }
1667
1686
  * }
1668
1687
  */
@@ -1672,6 +1691,7 @@ var GoogleAnalyticsTransport = class extends AnalyticsTransport {
1672
1691
  this.baseUrl = "https://www.google-analytics.com/mp/collect";
1673
1692
  this.debugUrl = "https://www.google-analytics.com/debug/mp/collect";
1674
1693
  this.gaConfig = config;
1694
+ protectSecrets(this, ["gaConfig"]);
1675
1695
  }
1676
1696
  async initialize() {
1677
1697
  try {
@@ -1759,10 +1779,10 @@ var GoogleAnalyticsTransport = class extends AnalyticsTransport {
1759
1779
  }
1760
1780
  async sendEvents(events) {
1761
1781
  const chunks = this.chunkArray(events, 25);
1762
- for (const chunk$1 of chunks) {
1782
+ for (const chunk of chunks) {
1763
1783
  const payload = {
1764
1784
  client_id: this.gaConfig.clientId || this.generateClientId(),
1765
- events: chunk$1
1785
+ events: chunk
1766
1786
  };
1767
1787
  await this.makeRequest(payload);
1768
1788
  }
@@ -1883,20 +1903,49 @@ var GoogleAnalyticsTransport = class extends AnalyticsTransport {
1883
1903
  await this.sendEvent(event);
1884
1904
  }
1885
1905
  };
1886
-
1887
- //#endregion
1888
- //#region src/transports/mixpanel.transport.ts
1906
+ // src/transports/level-filter.ts
1907
+ /** Severity values of the built-in levels; lower is more severe (same scale as the logger). */
1908
+ const BUILTIN_LEVEL_VALUES = {
1909
+ error: 0,
1910
+ warn: 1,
1911
+ info: 2,
1912
+ debug: 3,
1913
+ trace: 4,
1914
+ verbose: 5
1915
+ };
1916
+ /** Built-in levels plus the logger's custom `levelOptions.levels`. */
1917
+ function buildLevelValues(custom) {
1918
+ return new Map([...Object.entries(BUILTIN_LEVEL_VALUES), ...Object.entries(custom ?? {})]);
1919
+ }
1920
+ function lookup(values, level) {
1921
+ return values.get(level) ?? values.get(level.toLowerCase());
1922
+ }
1923
+ /**
1924
+ * Whether an entry at `level` passes a transport's minimum `threshold`, using the
1925
+ * logger's scale (an entry passes when its value is <= the threshold's value).
1926
+ * The logger has already rejected unknown entry levels, so an unknown entry level
1927
+ * or threshold here does not filter.
1928
+ */
1929
+ function meetsTransportLevel(threshold, level, values) {
1930
+ if (!threshold) return true;
1931
+ const min = lookup(values, threshold);
1932
+ const actual = lookup(values, level);
1933
+ if (min === void 0 || actual === void 0) return true;
1934
+ return actual <= min;
1935
+ }
1936
+ // src/transports/mixpanel.transport.ts
1889
1937
  /**
1890
1938
  * Sends log entries as Mixpanel events via the Track and Engage HTTP APIs.
1891
1939
  *
1892
1940
  * @example
1893
- * transports: { mixpanel: { token: process.env.MIXPANEL_TOKEN } }
1941
+ * analytics: { mixpanel: { token: process.env.MIXPANEL_TOKEN } }
1894
1942
  */
1895
1943
  var MixpanelTransport = class extends AnalyticsTransport {
1896
1944
  constructor(config) {
1897
1945
  super("mixpanel", config);
1898
1946
  this.baseUrl = "https://api.mixpanel.com";
1899
1947
  this.mixpanelConfig = config;
1948
+ protectSecrets(this, ["mixpanelConfig"]);
1900
1949
  }
1901
1950
  async initialize() {
1902
1951
  try {
@@ -2022,9 +2071,7 @@ var MixpanelTransport = class extends AnalyticsTransport {
2022
2071
  await this.makeRequest("/track", [payload]);
2023
2072
  }
2024
2073
  };
2025
-
2026
- //#endregion
2027
- //#region src/version.ts
2074
+ // src/version.ts
2028
2075
  /**
2029
2076
  * The published version of this package.
2030
2077
  *
@@ -2033,14 +2080,12 @@ var MixpanelTransport = class extends AnalyticsTransport {
2033
2080
  * free of a JSON import that bundlers and consumers would have to resolve.
2034
2081
  */
2035
2082
  const LOGIXIA_VERSION = "1.12.0";
2036
-
2037
- //#endregion
2038
- //#region src/transports/segment.transport.ts
2083
+ // src/transports/segment.transport.ts
2039
2084
  /**
2040
2085
  * Sends log entries as Segment track/identify events via the HTTP Tracking API.
2041
2086
  *
2042
2087
  * @example
2043
- * transports: { segment: { writeKey: process.env.SEGMENT_WRITE_KEY } }
2088
+ * analytics: { segment: { writeKey: process.env.SEGMENT_WRITE_KEY } }
2044
2089
  */
2045
2090
  var SegmentTransport = class extends AnalyticsTransport {
2046
2091
  constructor(config) {
@@ -2053,6 +2098,10 @@ var SegmentTransport = class extends AnalyticsTransport {
2053
2098
  ...config
2054
2099
  };
2055
2100
  this.baseUrl = config.dataPlaneUrl || "https://api.segment.io";
2101
+ protectSecrets(this, ["segmentConfig", "baseUrl"]);
2102
+ }
2103
+ secretValues() {
2104
+ return [...super.secretValues(), Buffer.from(`${this.segmentConfig.writeKey}:`).toString("base64")];
2056
2105
  }
2057
2106
  async initialize() {
2058
2107
  try {
@@ -2120,8 +2169,8 @@ var SegmentTransport = class extends AnalyticsTransport {
2120
2169
  }
2121
2170
  async batchTrack(events) {
2122
2171
  const chunks = this.chunkArray(events, this.segmentConfig.maxBatchSize || 100);
2123
- for (const chunk$1 of chunks) {
2124
- const payload = { batch: chunk$1 };
2172
+ for (const chunk of chunks) {
2173
+ const payload = { batch: chunk };
2125
2174
  await this.makeRequest("/v1/batch", payload);
2126
2175
  }
2127
2176
  }
@@ -2298,20 +2347,24 @@ var SegmentTransport = class extends AnalyticsTransport {
2298
2347
  await this.makeRequest("/v1/track", payload);
2299
2348
  }
2300
2349
  };
2301
-
2302
- //#endregion
2303
- //#region src/transports/transport.manager.ts
2350
+ // src/transports/transport.manager.ts
2304
2351
  function _sleep(ms) {
2305
2352
  return new Promise((resolve) => setTimeout(resolve, ms));
2306
2353
  }
2307
2354
  var TransportManager = class extends EventEmitter {
2308
- constructor(config = {}) {
2355
+ /**
2356
+ * @param config Transport configuration.
2357
+ * @param levels The logger's `levelOptions.levels`; used with the built-in levels
2358
+ * to compare entries against each transport's `level`.
2359
+ */
2360
+ constructor(config = {}, levels) {
2309
2361
  super();
2310
2362
  this.transports = /* @__PURE__ */ new Map();
2311
2363
  this.metrics = /* @__PURE__ */ new Map();
2312
2364
  this.isShuttingDown = false;
2313
2365
  this.transportLevelPreferences = /* @__PURE__ */ new Map();
2314
2366
  this.warnedPromptDeprecated = false;
2367
+ this.levelValues = buildLevelValues(levels);
2315
2368
  this.setupTransports(config);
2316
2369
  }
2317
2370
  setupTransports(config) {
@@ -2495,7 +2548,6 @@ var TransportManager = class extends EventEmitter {
2495
2548
  case "linear":
2496
2549
  wait = baseDelay * (attempt + 1);
2497
2550
  break;
2498
- case "exponential":
2499
2551
  default: wait = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);
2500
2552
  }
2501
2553
  this.emit("transport:retry", transport.name, attempt + 1, maxRetries, wait);
@@ -2514,19 +2566,7 @@ var TransportManager = class extends EventEmitter {
2514
2566
  }
2515
2567
  shouldTransportHandle(transport, level, transportId) {
2516
2568
  if (transportId && this.transportLevelPreferences.has(transportId)) return this.transportLevelPreferences.get(transportId).includes(level.toLowerCase());
2517
- if (!transport.level) return true;
2518
- const levels = [
2519
- "error",
2520
- "warn",
2521
- "info",
2522
- "debug",
2523
- "trace",
2524
- "verbose"
2525
- ];
2526
- const transportLevelIndex = levels.indexOf(transport.level.toLowerCase());
2527
- const entryLevelIndex = levels.indexOf(level.toLowerCase());
2528
- if (transportLevelIndex === -1 || entryLevelIndex === -1) return true;
2529
- return entryLevelIndex <= transportLevelIndex;
2569
+ return meetsTransportLevel(transport.level, level, this.levelValues);
2530
2570
  }
2531
2571
  getTransportType(transport) {
2532
2572
  if (transport.name === "console") return "console";
@@ -2649,7 +2689,125 @@ var TransportManager = class extends EventEmitter {
2649
2689
  internalLog("Transport level preferences cleared");
2650
2690
  }
2651
2691
  };
2692
+ // src/utils/otel.ts
2693
+ /** W3C trace-flags bit 0: the span is sampled (`TraceFlags.SAMPLED` in the OTel API). */
2694
+ const TRACE_FLAG_SAMPLED = 1;
2695
+ let _otelApi;
2696
+ function tryLoadOtelApi() {
2697
+ if (_otelApi !== void 0) return _otelApi;
2698
+ try {
2699
+ _otelApi = __require("@opentelemetry/api");
2700
+ return _otelApi;
2701
+ } catch {
2702
+ _otelApi = null;
2703
+ return null;
2704
+ }
2705
+ }
2706
+ /**
2707
+ * Read the currently active OTel span context (if any) and return its fields
2708
+ * in a plain object suitable for spreading into a log entry.
2709
+ *
2710
+ * Returns `undefined` when:
2711
+ * - `@opentelemetry/api` is not installed
2712
+ * - No active span exists (root context)
2713
+ * - The span context is invalid (all-zeros)
2714
+ */
2715
+ function getActiveOtelContext(opts = {}) {
2716
+ const api = tryLoadOtelApi();
2717
+ if (!api) return void 0;
2718
+ try {
2719
+ const ctx = api.context.active();
2720
+ const sc = api.trace.getSpanContext(ctx);
2721
+ if (!sc || !api.trace.isSpanContextValid(sc)) return void 0;
2722
+ const isSampled = (sc.traceFlags & TRACE_FLAG_SAMPLED) === TRACE_FLAG_SAMPLED;
2723
+ if (opts.sampledOnly && !isSampled) return void 0;
2724
+ return {
2725
+ traceId: sc.traceId,
2726
+ spanId: sc.spanId,
2727
+ traceFlags: sc.traceFlags,
2728
+ isSampled
2729
+ };
2730
+ } catch {
2731
+ return;
2732
+ }
2733
+ }
2734
+ /**
2735
+ * Returns a metadata object with OTel context fields ready to merge into a log call,
2736
+ * using the configured field names.
2737
+ *
2738
+ * Returns `{}` when no active span exists (safe to spread unconditionally).
2739
+ *
2740
+ * @example
2741
+ * ```ts
2742
+ * await logger.info('Payment processed', {
2743
+ * ...getOtelMetaFields(),
2744
+ * orderId: 'ord_123',
2745
+ * });
2746
+ * ```
2747
+ */
2748
+ function getOtelMetaFields(opts = {}) {
2749
+ const { traceIdField = "traceId", spanIdField = "spanId", traceFlagsField = "traceFlags" } = opts;
2750
+ const ctx = getActiveOtelContext(opts);
2751
+ if (!ctx) return {};
2752
+ return {
2753
+ [traceIdField]: ctx.traceId,
2754
+ [spanIdField]: ctx.spanId,
2755
+ [traceFlagsField]: ctx.traceFlags
2756
+ };
2757
+ }
2758
+ let _bridgeOptions = null;
2759
+ /**
2760
+ * Initialise the global OTel bridge.
2761
+ *
2762
+ * Once called, logixia's internal log pipeline checks for an active OTel span
2763
+ * on **every** log call and automatically merges the span context into the
2764
+ * entry's metadata — no per-call wiring needed.
2765
+ *
2766
+ * Call once at app startup, **after** the OTel SDK has been initialised:
2767
+ * ```ts
2768
+ * import { initOtelBridge } from 'logixia';
2769
+ * initOtelBridge();
2770
+ * ```
2771
+ */
2772
+ function initOtelBridge(opts = {}) {
2773
+ _bridgeOptions = opts;
2774
+ }
2775
+ /**
2776
+ * @internal
2777
+ * True when initOtelBridge() has been called. Lets the logger hot path skip the
2778
+ * `_getOtelPayloadIfEnabled()` call (and its `{}` allocation + Object.keys) on
2779
+ * every log when the bridge is off — the overwhelmingly common case.
2780
+ */
2781
+ function _isOtelBridgeEnabled() {
2782
+ return _bridgeOptions !== null;
2783
+ }
2784
+ /**
2785
+ * @internal
2786
+ * Used by the core logger to inject OTel context when the bridge is active.
2787
+ * Returns `{}` when the bridge is not initialised or no active span exists.
2788
+ */
2789
+ function _getOtelPayloadIfEnabled() {
2790
+ if (!_bridgeOptions) return {};
2791
+ return getOtelMetaFields(_bridgeOptions);
2792
+ }
2793
+ /**
2794
+ * @internal
2795
+ * Payload field names the active bridge writes the trace and span ids to, or
2796
+ * `undefined` when the bridge is not initialised.
2797
+ */
2798
+ function _getOtelBridgeFieldNames() {
2799
+ if (!_bridgeOptions) return void 0;
2800
+ return {
2801
+ traceIdField: _bridgeOptions.traceIdField ?? "traceId",
2802
+ spanIdField: _bridgeOptions.spanIdField ?? "spanId"
2803
+ };
2804
+ }
2805
+ /**
2806
+ * Disable the OTel bridge (useful for tests).
2807
+ */
2808
+ function disableOtelBridge() {
2809
+ _bridgeOptions = null;
2810
+ }
2811
+ export { ConsoleTransport as _, getActiveOtelContext as a, TransportManager as c, GoogleAnalyticsTransport as d, FileTransport as f, BufferCap as g, DatabaseTransport as h, disableOtelBridge as i, SegmentTransport as l, AnalyticsTransport as m, _getOtelPayloadIfEnabled as n, getOtelMetaFields as o, DataDogTransport as p, _isOtelBridgeEnabled as r, initOtelBridge as s, _getOtelBridgeFieldNames as t, MixpanelTransport as u, stripControlChars as v };
2652
2812
 
2653
- //#endregion
2654
- export { FileTransport as a, DatabaseTransport as c, stripControlChars as d, GoogleAnalyticsTransport as i, BufferCap as l, SegmentTransport as n, DataDogTransport as o, MixpanelTransport as r, AnalyticsTransport as s, TransportManager as t, ConsoleTransport as u };
2655
- //# sourceMappingURL=transport.manager-BiuCAJd2.mjs.map
2813
+ //# sourceMappingURL=otel-Dt5riXuE.mjs.map