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,22 +1,17 @@
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_entry_fields = require('./entry-fields-BvOLFlJ4.js');
5
- const require_coerce_utils = require('./coerce.utils-B-LilukN.js');
6
- let node_fs = require("node:fs");
7
- node_fs = require_chunk.__toESM(node_fs);
8
- let node_path = require("node:path");
9
- node_path = require_chunk.__toESM(node_path);
1
+ const require_secret_config = require("./secret-config-CmK2wVkr.js");
2
+ const require_internal_log = require("./internal-log-By4Govmu.js");
3
+ const require_coerce_utils = require("./coerce.utils-C1C5sIX0.js");
4
+ const require_safe_stringify = require("./safe-stringify-J3sh-7YM.js");
5
+ const require_entry_fields = require("./entry-fields-BSLkzw18.js");
10
6
  let node_events = require("node:events");
11
- node_events = require_chunk.__toESM(node_events);
12
7
  let node_util = require("node:util");
13
- node_util = require_chunk.__toESM(node_util);
14
8
  let node_zlib = require("node:zlib");
15
- node_zlib = require_chunk.__toESM(node_zlib);
9
+ let node_fs = require("node:fs");
10
+ node_fs = require_secret_config.__toESM(node_fs);
11
+ let node_path = require("node:path");
12
+ node_path = require_secret_config.__toESM(node_path);
16
13
  let node_stream_promises = require("node:stream/promises");
17
- node_stream_promises = require_chunk.__toESM(node_stream_promises);
18
-
19
- //#region src/utils/sanitize.utils.ts
14
+ // src/utils/sanitize.utils.ts
20
15
  /**
21
16
  * Control-character stripping for text-mode log output.
22
17
  *
@@ -32,9 +27,7 @@ const VISIBLE_ESCAPES = {
32
27
  function stripControlChars(value) {
33
28
  return value.replace(CONTROL_CHARS_RE, (ch) => VISIBLE_ESCAPES[ch] ?? "");
34
29
  }
35
-
36
- //#endregion
37
- //#region src/transports/console.transport.ts
30
+ // src/transports/console.transport.ts
38
31
  /**
39
32
  * Writes log entries to stdout (info/debug/verbose) and stderr (error/warn).
40
33
  *
@@ -44,32 +37,13 @@ function stripControlChars(value) {
44
37
  * transports: { console: { format: 'json' } }
45
38
  */
46
39
  var ConsoleTransport = class ConsoleTransport {
47
- static #_ = this.COLORS = new Map([
48
- ["black", "\x1B[30m"],
49
- ["red", "\x1B[31m"],
50
- ["green", "\x1B[32m"],
51
- ["yellow", "\x1B[33m"],
52
- ["blue", "\x1B[34m"],
53
- ["magenta", "\x1B[35m"],
54
- ["cyan", "\x1B[36m"],
55
- ["white", "\x1B[37m"],
56
- ["gray", "\x1B[90m"],
57
- ["grey", "\x1B[90m"],
58
- ["brightred", "\x1B[91m"],
59
- ["brightgreen", "\x1B[92m"],
60
- ["brightyellow", "\x1B[93m"],
61
- ["brightblue", "\x1B[94m"],
62
- ["brightmagenta", "\x1B[95m"],
63
- ["brightcyan", "\x1B[96m"],
64
- ["brightwhite", "\x1B[97m"],
65
- ["reset", "\x1B[0m"]
66
- ]);
67
40
  static sanitize(value) {
68
41
  return stripControlChars(require_coerce_utils.safeToString(value));
69
42
  }
70
43
  constructor(config = {}) {
71
44
  this.config = config;
72
45
  this.name = "console";
46
+ this.level = config.level;
73
47
  if (config.filter) this.filter = config.filter;
74
48
  }
75
49
  write(entry) {
@@ -132,10 +106,28 @@ var ConsoleTransport = class ConsoleTransport {
132
106
  close() {
133
107
  return Promise.resolve();
134
108
  }
109
+ static #_ = () => this.COLORS = /* @__PURE__ */ new Map([
110
+ ["black", "\x1B[30m"],
111
+ ["red", "\x1B[31m"],
112
+ ["green", "\x1B[32m"],
113
+ ["yellow", "\x1B[33m"],
114
+ ["blue", "\x1B[34m"],
115
+ ["magenta", "\x1B[35m"],
116
+ ["cyan", "\x1B[36m"],
117
+ ["white", "\x1B[37m"],
118
+ ["gray", "\x1B[90m"],
119
+ ["grey", "\x1B[90m"],
120
+ ["brightred", "\x1B[91m"],
121
+ ["brightgreen", "\x1B[92m"],
122
+ ["brightyellow", "\x1B[93m"],
123
+ ["brightblue", "\x1B[94m"],
124
+ ["brightmagenta", "\x1B[95m"],
125
+ ["brightcyan", "\x1B[96m"],
126
+ ["brightwhite", "\x1B[97m"],
127
+ ["reset", "\x1B[0m"]
128
+ ]);
135
129
  };
136
-
137
- //#endregion
138
- //#region src/transports/buffer-cap.ts
130
+ // src/transports/buffer-cap.ts
139
131
  const DEFAULT_BUFFER_CAP = 1e4;
140
132
  const DROP_WARN_INTERVAL_MS$1 = 5e3;
141
133
  /**
@@ -151,8 +143,10 @@ var BufferCap = class {
151
143
  this.dropped = 0;
152
144
  this.lastWarning = 0;
153
145
  let max = fallback;
154
- if (requested !== void 0) if (Number.isInteger(requested) && requested >= 1) max = requested;
155
- else require_internal_log.internalWarn(`${name}: maxBufferSize ${String(requested)} is not a positive integer; using ${fallback}`);
146
+ if (requested !== void 0) {
147
+ if (Number.isInteger(requested) && requested >= 1) max = requested;
148
+ else require_internal_log.internalWarn(`${name}: maxBufferSize ${String(requested)} is not a positive integer; using ${fallback}`);
149
+ }
156
150
  this.max = Math.max(max, batchSize);
157
151
  }
158
152
  /** Drops the oldest items beyond the cap, in place. */
@@ -174,9 +168,7 @@ var BufferCap = class {
174
168
  this.lastWarning = now;
175
169
  }
176
170
  };
177
-
178
- //#endregion
179
- //#region src/transports/database.transport.ts
171
+ // src/transports/database.transport.ts
180
172
  /**
181
173
  * Validates that a SQL identifier (table/index name) contains only safe characters.
182
174
  * Prevents SQL injection via user-supplied table names.
@@ -199,7 +191,7 @@ const PG_DATA_CLASSES = [
199
191
  "23",
200
192
  "54"
201
193
  ];
202
- const MYSQL_DATA_CODES = new Set([
194
+ const MYSQL_DATA_CODES = /* @__PURE__ */ new Set([
203
195
  "ER_DATA_TOO_LONG",
204
196
  "ER_TRUNCATED_WRONG_VALUE",
205
197
  "ER_TRUNCATED_WRONG_VALUE_FOR_FIELD",
@@ -209,7 +201,7 @@ const MYSQL_DATA_CODES = new Set([
209
201
  "ER_INVALID_JSON_TEXT",
210
202
  "ER_INVALID_CHARACTER_STRING"
211
203
  ]);
212
- const MYSQL_DATA_ERRNOS = new Set([
204
+ const MYSQL_DATA_ERRNOS = /* @__PURE__ */ new Set([
213
205
  1048,
214
206
  1062,
215
207
  1264,
@@ -218,12 +210,12 @@ const MYSQL_DATA_ERRNOS = new Set([
218
210
  1406,
219
211
  3140
220
212
  ]);
221
- const SQLITE_DATA_CODES = new Set([
213
+ const SQLITE_DATA_CODES = /* @__PURE__ */ new Set([
222
214
  "SQLITE_CONSTRAINT",
223
215
  "SQLITE_TOOBIG",
224
216
  "SQLITE_MISMATCH"
225
217
  ]);
226
- const MONGO_DATA_CODES = new Set([
218
+ const MONGO_DATA_CODES = /* @__PURE__ */ new Set([
227
219
  2,
228
220
  121,
229
221
  10334,
@@ -285,13 +277,23 @@ var DatabaseTransport = class {
285
277
  this.name = "database";
286
278
  this.batch = [];
287
279
  this.isConnected = false;
280
+ require_secret_config.protectSecrets(this, ["config", "connection"]);
288
281
  this.batchSize = config.batchSize || 100;
289
282
  this.flushInterval = config.flushInterval || 5e3;
290
283
  this.cap = new BufferCap("DatabaseTransport", config.maxBufferSize, this.batchSize);
284
+ this.level = config.level;
291
285
  if (config.filter) this.filter = config.filter;
292
286
  if (config.table) validateSqlIdentifier(config.table, "table");
293
287
  this.setupFlushTimer();
294
288
  }
289
+ secretValues() {
290
+ const { connectionString, password } = this.config;
291
+ return [
292
+ connectionString,
293
+ password,
294
+ ...connectionString ? require_secret_config.urlSecrets(connectionString) : []
295
+ ];
296
+ }
295
297
  async write(entry) {
296
298
  if (!this.isConnected) await this.connect();
297
299
  this.addToBatch(entry);
@@ -352,6 +354,13 @@ var DatabaseTransport = class {
352
354
  this.cap.enforce(this.batch);
353
355
  }
354
356
  async writeEntries(entries) {
357
+ try {
358
+ await this.writeEntriesUnscrubbed(entries);
359
+ } catch (error) {
360
+ throw require_secret_config.scrubError(error, this.secretValues());
361
+ }
362
+ }
363
+ async writeEntriesUnscrubbed(entries) {
355
364
  switch (this.config.type) {
356
365
  case "mongodb":
357
366
  await this.flushToMongoDB(entries);
@@ -430,13 +439,12 @@ var DatabaseTransport = class {
430
439
  case "mysql":
431
440
  await this.connectMySQL();
432
441
  break;
433
- case "sqlite":
434
- await this.connectSQLite();
435
- break;
442
+ case "sqlite": await this.connectSQLite();
436
443
  }
437
444
  this.isConnected = true;
438
445
  } catch (error) {
439
446
  this.isConnected = false;
447
+ require_secret_config.scrubError(error, this.secretValues());
440
448
  throw new Error(`Database connection failed: ${error}`, { cause: error });
441
449
  }
442
450
  }
@@ -445,7 +453,8 @@ var DatabaseTransport = class {
445
453
  const { MongoClient } = await import("mongodb").catch(() => {
446
454
  throw new Error("MongoDB driver not installed. Run: npm install mongodb");
447
455
  });
448
- this.connection = new MongoClient(this.config.connectionString || `mongodb://${this.config.host}:${this.config.port}/${this.config.database}`);
456
+ const connectionString = this.config.connectionString || `mongodb://${this.config.host}:${this.config.port}/${this.config.database}`;
457
+ this.connection = new MongoClient(connectionString);
449
458
  await this.connection.connect();
450
459
  await this.connection.db(this.config.database).admin().ping();
451
460
  } catch (error) {
@@ -557,12 +566,13 @@ var DatabaseTransport = class {
557
566
  entry.environment
558
567
  ].map((value, column) => stripNul(column === 3 ? stripJsonNulEscape(value) : value))), POSTGRES_ROWS_PER_INSERT);
559
568
  const insertChunk = async (rows) => {
569
+ const placeholders = rows.map((_, i) => {
570
+ return `(${Array.from({ length: POSTGRES_COLUMNS }, (_unused, c) => `$${i * POSTGRES_COLUMNS + c + 1}`).join(", ")})`;
571
+ }).join(", ");
560
572
  const query = `
561
573
  INSERT INTO ${tableName}
562
574
  (timestamp, level, message, payload, context, trace_id, app_name, environment)
563
- VALUES ${rows.map((_, i) => {
564
- return `(${Array.from({ length: POSTGRES_COLUMNS }, (_unused, c) => `$${i * POSTGRES_COLUMNS + c + 1}`).join(", ")})`;
565
- }).join(", ")}
575
+ VALUES ${placeholders}
566
576
  `;
567
577
  await this.connection.query(query, rows.flat());
568
578
  };
@@ -726,9 +736,7 @@ var DatabaseTransport = class {
726
736
  case "mysql":
727
737
  await this.connection.end();
728
738
  break;
729
- case "sqlite":
730
- await this.connection.close();
731
- break;
739
+ case "sqlite": await this.connection.close();
732
740
  }
733
741
  this.isConnected = false;
734
742
  }
@@ -769,9 +777,7 @@ var DatabaseTransport = class {
769
777
  }
770
778
  }
771
779
  };
772
-
773
- //#endregion
774
- //#region src/transports/analytics.transport.ts
780
+ // src/transports/analytics.transport.ts
775
781
  /**
776
782
  * Thrown by sendBatch() when part of a batch was already delivered. drain()
777
783
  * requeues only `unsent`, so delivered entries are not sent twice.
@@ -795,16 +801,25 @@ var AnalyticsTransport = class {
795
801
  enableEventTracking: true,
796
802
  ...config
797
803
  };
804
+ require_secret_config.protectSecrets(this, ["config"]);
798
805
  this.level = config.level;
799
806
  this.batchSize = this.config.batchSize || 50;
800
807
  this.flushInterval = this.config.flushInterval || 1e4;
801
808
  this.cap = new BufferCap(name, config.maxBufferSize, this.batchSize);
802
809
  }
810
+ /** Secret strings to scrub from errors: everything secret-looking in the config. Override to add more. */
811
+ secretValues() {
812
+ return require_secret_config.collectSecrets(this.config);
813
+ }
803
814
  async write(entry) {
804
- if (!this.isReady) await this.ensureReady();
805
- if (this.shouldSkipEntry(entry)) return;
806
- if (this.config.batchSize && this.config.batchSize > 1) this.addToBatch(entry);
807
- else await this.sendEntry(entry);
815
+ try {
816
+ if (!this.isReady) await this.ensureReady();
817
+ if (this.shouldSkipEntry(entry)) return;
818
+ if (this.config.batchSize && this.config.batchSize > 1) this.addToBatch(entry);
819
+ else await this.sendEntry(entry);
820
+ } catch (error) {
821
+ throw require_secret_config.scrubError(error, this.secretValues());
822
+ }
808
823
  }
809
824
  addToBatch(entry) {
810
825
  this.batch.push(entry);
@@ -842,6 +857,7 @@ var AnalyticsTransport = class {
842
857
  try {
843
858
  await this.sendBatch(entriesToSend);
844
859
  } catch (error) {
860
+ require_secret_config.scrubError(error, this.secretValues());
845
861
  require_internal_log.internalError(`Analytics transport ${this.name} flush failed`, error);
846
862
  this.batch.unshift(...error instanceof PartialBatchError ? error.unsent : entriesToSend);
847
863
  this.cap.enforce(this.batch);
@@ -903,9 +919,7 @@ var AnalyticsTransport = class {
903
919
  await this.ensureReady();
904
920
  }
905
921
  };
906
-
907
- //#endregion
908
- //#region src/transports/datadog.transport.ts
922
+ // src/transports/datadog.transport.ts
909
923
  const gzipAsync = (0, node_util.promisify)(node_zlib.gzip);
910
924
  const MAX_LOGS_PER_REQUEST = 1e3;
911
925
  const MAX_LOGS_PAYLOAD_BYTES = 5e6;
@@ -974,8 +988,12 @@ function tag(key, value) {
974
988
  *
975
989
  * The API key is transmitted via the `DD-API-KEY` request header — never in the URL.
976
990
  *
991
+ * Metric names keep the legacy `logitron.logs.<level>` prefix (kept for
992
+ * dashboards and monitors that already query it; renaming would be a breaking
993
+ * change). Query `logitron.logs.error`, not `logixia.logs.error`.
994
+ *
977
995
  * @example
978
- * transports: { datadog: { apiKey: process.env.DD_API_KEY, service: 'api', env: 'production' } }
996
+ * analytics: { datadog: { apiKey: process.env.DD_API_KEY, service: 'api', env: 'production' } }
979
997
  */
980
998
  var DataDogTransport = class extends AnalyticsTransport {
981
999
  constructor(config) {
@@ -985,6 +1003,7 @@ var DataDogTransport = class extends AnalyticsTransport {
985
1003
  this.baseUrl = `https://api.${site}`;
986
1004
  this.logsUrl = `https://http-intake.logs.${site}`;
987
1005
  this.metricsUrl = `https://api.${site}`;
1006
+ require_secret_config.protectSecrets(this, ["datadogConfig"]);
988
1007
  }
989
1008
  async initialize() {
990
1009
  try {
@@ -1020,9 +1039,9 @@ var DataDogTransport = class extends AnalyticsTransport {
1020
1039
  }));
1021
1040
  const chunks = this.chunkLogs(items);
1022
1041
  for (let i = 0; i < chunks.length; i += 1) {
1023
- const chunk$1 = chunks[i];
1042
+ const chunk = chunks[i];
1024
1043
  try {
1025
- await this.makeLogsRequest("/api/v2/logs", `[${chunk$1.map((item) => item.json).join(",")}]`);
1044
+ await this.makeLogsRequest("/api/v2/logs", `[${chunk.map((item) => item.json).join(",")}]`);
1026
1045
  } catch (error) {
1027
1046
  if (i === 0) throw error;
1028
1047
  const unsent = chunks.slice(i).flatMap((c) => c.map((item) => item.entry));
@@ -1211,9 +1230,7 @@ var DataDogTransport = class extends AnalyticsTransport {
1211
1230
  }
1212
1231
  }
1213
1232
  };
1214
-
1215
- //#endregion
1216
- //#region src/transports/file.transport.ts
1233
+ // src/transports/file.transport.ts
1217
1234
  const appendFile = (0, node_util.promisify)(node_fs.appendFile);
1218
1235
  const rename = (0, node_util.promisify)(node_fs.rename);
1219
1236
  const unlink = (0, node_util.promisify)(node_fs.unlink);
@@ -1476,7 +1493,6 @@ var FileTransport = class {
1476
1493
  csvField(entry.traceId),
1477
1494
  csvField(require_safe_stringify.stringifyForLog(entry.data || {}))
1478
1495
  ].join(",");
1479
- case "text":
1480
1496
  default: return `${entry.timestamp.toISOString()} [${stripControlChars(require_coerce_utils.safeToString(entry.level)).toUpperCase()}] ${stripControlChars(require_coerce_utils.safeToString(entry.message))}${entry.data ? " " + require_safe_stringify.stringifyForLog(entry.data) : ""}`;
1481
1497
  }
1482
1498
  }
@@ -1502,22 +1518,22 @@ var FileTransport = class {
1502
1518
  await this.append(content);
1503
1519
  return;
1504
1520
  }
1505
- let chunk$1 = "";
1521
+ let chunk = "";
1506
1522
  let chunkBytes = 0;
1507
1523
  for (const entry of entries) {
1508
1524
  const line = this.formatEntry(entry) + "\n";
1509
1525
  const lineBytes = Buffer.byteLength(line);
1510
1526
  const used = this.bytesWritten + chunkBytes;
1511
1527
  if (used > 0 && used + lineBytes > this.maxBytes) {
1512
- if (chunk$1) await this.append(chunk$1, chunkBytes);
1513
- chunk$1 = "";
1528
+ if (chunk) await this.append(chunk, chunkBytes);
1529
+ chunk = "";
1514
1530
  chunkBytes = 0;
1515
1531
  await this.rotateFile();
1516
1532
  }
1517
- chunk$1 += line;
1533
+ chunk += line;
1518
1534
  chunkBytes += lineBytes;
1519
1535
  }
1520
- if (chunk$1) await this.append(chunk$1, chunkBytes);
1536
+ if (chunk) await this.append(chunk, chunkBytes);
1521
1537
  }
1522
1538
  async append(content, bytes = Buffer.byteLength(content)) {
1523
1539
  await appendFile(this.currentFilePath, content, { mode: this.fileMode });
@@ -1546,7 +1562,7 @@ var FileTransport = class {
1546
1562
  }
1547
1563
  parseInterval(interval) {
1548
1564
  const match = /^(\d{1,6})([hdwmy])$/i.exec(interval.trim());
1549
- if (!match) return 1440 * 60 * 1e3;
1565
+ if (!match) return 864e5;
1550
1566
  const value = Number.parseInt(match[1] || "1", 10);
1551
1567
  switch ((match[2] || "h").toLowerCase()) {
1552
1568
  case "h": return value * 60 * 60 * 1e3;
@@ -1661,14 +1677,12 @@ var FileTransport = class {
1661
1677
  this.reportDropped(0);
1662
1678
  }
1663
1679
  };
1664
-
1665
- //#endregion
1666
- //#region src/transports/google-analytics.transport.ts
1680
+ // src/transports/google-analytics.transport.ts
1667
1681
  /**
1668
1682
  * Sends log entries as Google Analytics 4 Measurement Protocol events.
1669
1683
  *
1670
1684
  * @example
1671
- * transports: {
1685
+ * analytics: {
1672
1686
  * googleAnalytics: { measurementId: 'G-XXXXXXX', apiSecret: process.env.GA_API_SECRET }
1673
1687
  * }
1674
1688
  */
@@ -1678,6 +1692,7 @@ var GoogleAnalyticsTransport = class extends AnalyticsTransport {
1678
1692
  this.baseUrl = "https://www.google-analytics.com/mp/collect";
1679
1693
  this.debugUrl = "https://www.google-analytics.com/debug/mp/collect";
1680
1694
  this.gaConfig = config;
1695
+ require_secret_config.protectSecrets(this, ["gaConfig"]);
1681
1696
  }
1682
1697
  async initialize() {
1683
1698
  try {
@@ -1765,10 +1780,10 @@ var GoogleAnalyticsTransport = class extends AnalyticsTransport {
1765
1780
  }
1766
1781
  async sendEvents(events) {
1767
1782
  const chunks = this.chunkArray(events, 25);
1768
- for (const chunk$1 of chunks) {
1783
+ for (const chunk of chunks) {
1769
1784
  const payload = {
1770
1785
  client_id: this.gaConfig.clientId || this.generateClientId(),
1771
- events: chunk$1
1786
+ events: chunk
1772
1787
  };
1773
1788
  await this.makeRequest(payload);
1774
1789
  }
@@ -1889,20 +1904,49 @@ var GoogleAnalyticsTransport = class extends AnalyticsTransport {
1889
1904
  await this.sendEvent(event);
1890
1905
  }
1891
1906
  };
1892
-
1893
- //#endregion
1894
- //#region src/transports/mixpanel.transport.ts
1907
+ // src/transports/level-filter.ts
1908
+ /** Severity values of the built-in levels; lower is more severe (same scale as the logger). */
1909
+ const BUILTIN_LEVEL_VALUES = {
1910
+ error: 0,
1911
+ warn: 1,
1912
+ info: 2,
1913
+ debug: 3,
1914
+ trace: 4,
1915
+ verbose: 5
1916
+ };
1917
+ /** Built-in levels plus the logger's custom `levelOptions.levels`. */
1918
+ function buildLevelValues(custom) {
1919
+ return new Map([...Object.entries(BUILTIN_LEVEL_VALUES), ...Object.entries(custom ?? {})]);
1920
+ }
1921
+ function lookup(values, level) {
1922
+ return values.get(level) ?? values.get(level.toLowerCase());
1923
+ }
1924
+ /**
1925
+ * Whether an entry at `level` passes a transport's minimum `threshold`, using the
1926
+ * logger's scale (an entry passes when its value is <= the threshold's value).
1927
+ * The logger has already rejected unknown entry levels, so an unknown entry level
1928
+ * or threshold here does not filter.
1929
+ */
1930
+ function meetsTransportLevel(threshold, level, values) {
1931
+ if (!threshold) return true;
1932
+ const min = lookup(values, threshold);
1933
+ const actual = lookup(values, level);
1934
+ if (min === void 0 || actual === void 0) return true;
1935
+ return actual <= min;
1936
+ }
1937
+ // src/transports/mixpanel.transport.ts
1895
1938
  /**
1896
1939
  * Sends log entries as Mixpanel events via the Track and Engage HTTP APIs.
1897
1940
  *
1898
1941
  * @example
1899
- * transports: { mixpanel: { token: process.env.MIXPANEL_TOKEN } }
1942
+ * analytics: { mixpanel: { token: process.env.MIXPANEL_TOKEN } }
1900
1943
  */
1901
1944
  var MixpanelTransport = class extends AnalyticsTransport {
1902
1945
  constructor(config) {
1903
1946
  super("mixpanel", config);
1904
1947
  this.baseUrl = "https://api.mixpanel.com";
1905
1948
  this.mixpanelConfig = config;
1949
+ require_secret_config.protectSecrets(this, ["mixpanelConfig"]);
1906
1950
  }
1907
1951
  async initialize() {
1908
1952
  try {
@@ -2028,9 +2072,7 @@ var MixpanelTransport = class extends AnalyticsTransport {
2028
2072
  await this.makeRequest("/track", [payload]);
2029
2073
  }
2030
2074
  };
2031
-
2032
- //#endregion
2033
- //#region src/version.ts
2075
+ // src/version.ts
2034
2076
  /**
2035
2077
  * The published version of this package.
2036
2078
  *
@@ -2039,14 +2081,12 @@ var MixpanelTransport = class extends AnalyticsTransport {
2039
2081
  * free of a JSON import that bundlers and consumers would have to resolve.
2040
2082
  */
2041
2083
  const LOGIXIA_VERSION = "1.12.0";
2042
-
2043
- //#endregion
2044
- //#region src/transports/segment.transport.ts
2084
+ // src/transports/segment.transport.ts
2045
2085
  /**
2046
2086
  * Sends log entries as Segment track/identify events via the HTTP Tracking API.
2047
2087
  *
2048
2088
  * @example
2049
- * transports: { segment: { writeKey: process.env.SEGMENT_WRITE_KEY } }
2089
+ * analytics: { segment: { writeKey: process.env.SEGMENT_WRITE_KEY } }
2050
2090
  */
2051
2091
  var SegmentTransport = class extends AnalyticsTransport {
2052
2092
  constructor(config) {
@@ -2059,6 +2099,10 @@ var SegmentTransport = class extends AnalyticsTransport {
2059
2099
  ...config
2060
2100
  };
2061
2101
  this.baseUrl = config.dataPlaneUrl || "https://api.segment.io";
2102
+ require_secret_config.protectSecrets(this, ["segmentConfig", "baseUrl"]);
2103
+ }
2104
+ secretValues() {
2105
+ return [...super.secretValues(), Buffer.from(`${this.segmentConfig.writeKey}:`).toString("base64")];
2062
2106
  }
2063
2107
  async initialize() {
2064
2108
  try {
@@ -2126,8 +2170,8 @@ var SegmentTransport = class extends AnalyticsTransport {
2126
2170
  }
2127
2171
  async batchTrack(events) {
2128
2172
  const chunks = this.chunkArray(events, this.segmentConfig.maxBatchSize || 100);
2129
- for (const chunk$1 of chunks) {
2130
- const payload = { batch: chunk$1 };
2173
+ for (const chunk of chunks) {
2174
+ const payload = { batch: chunk };
2131
2175
  await this.makeRequest("/v1/batch", payload);
2132
2176
  }
2133
2177
  }
@@ -2304,20 +2348,24 @@ var SegmentTransport = class extends AnalyticsTransport {
2304
2348
  await this.makeRequest("/v1/track", payload);
2305
2349
  }
2306
2350
  };
2307
-
2308
- //#endregion
2309
- //#region src/transports/transport.manager.ts
2351
+ // src/transports/transport.manager.ts
2310
2352
  function _sleep(ms) {
2311
2353
  return new Promise((resolve) => setTimeout(resolve, ms));
2312
2354
  }
2313
2355
  var TransportManager = class extends node_events.EventEmitter {
2314
- constructor(config = {}) {
2356
+ /**
2357
+ * @param config Transport configuration.
2358
+ * @param levels The logger's `levelOptions.levels`; used with the built-in levels
2359
+ * to compare entries against each transport's `level`.
2360
+ */
2361
+ constructor(config = {}, levels) {
2315
2362
  super();
2316
2363
  this.transports = /* @__PURE__ */ new Map();
2317
2364
  this.metrics = /* @__PURE__ */ new Map();
2318
2365
  this.isShuttingDown = false;
2319
2366
  this.transportLevelPreferences = /* @__PURE__ */ new Map();
2320
2367
  this.warnedPromptDeprecated = false;
2368
+ this.levelValues = buildLevelValues(levels);
2321
2369
  this.setupTransports(config);
2322
2370
  }
2323
2371
  setupTransports(config) {
@@ -2501,7 +2549,6 @@ var TransportManager = class extends node_events.EventEmitter {
2501
2549
  case "linear":
2502
2550
  wait = baseDelay * (attempt + 1);
2503
2551
  break;
2504
- case "exponential":
2505
2552
  default: wait = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);
2506
2553
  }
2507
2554
  this.emit("transport:retry", transport.name, attempt + 1, maxRetries, wait);
@@ -2520,19 +2567,7 @@ var TransportManager = class extends node_events.EventEmitter {
2520
2567
  }
2521
2568
  shouldTransportHandle(transport, level, transportId) {
2522
2569
  if (transportId && this.transportLevelPreferences.has(transportId)) return this.transportLevelPreferences.get(transportId).includes(level.toLowerCase());
2523
- if (!transport.level) return true;
2524
- const levels = [
2525
- "error",
2526
- "warn",
2527
- "info",
2528
- "debug",
2529
- "trace",
2530
- "verbose"
2531
- ];
2532
- const transportLevelIndex = levels.indexOf(transport.level.toLowerCase());
2533
- const entryLevelIndex = levels.indexOf(level.toLowerCase());
2534
- if (transportLevelIndex === -1 || entryLevelIndex === -1) return true;
2535
- return entryLevelIndex <= transportLevelIndex;
2570
+ return meetsTransportLevel(transport.level, level, this.levelValues);
2536
2571
  }
2537
2572
  getTransportType(transport) {
2538
2573
  if (transport.name === "console") return "console";
@@ -2655,72 +2690,232 @@ var TransportManager = class extends node_events.EventEmitter {
2655
2690
  require_internal_log.internalLog("Transport level preferences cleared");
2656
2691
  }
2657
2692
  };
2658
-
2659
- //#endregion
2660
- Object.defineProperty(exports, 'AnalyticsTransport', {
2661
- enumerable: true,
2662
- get: function () {
2663
- return AnalyticsTransport;
2664
- }
2693
+ // src/utils/otel.ts
2694
+ /** W3C trace-flags bit 0: the span is sampled (`TraceFlags.SAMPLED` in the OTel API). */
2695
+ const TRACE_FLAG_SAMPLED = 1;
2696
+ let _otelApi;
2697
+ function tryLoadOtelApi() {
2698
+ if (_otelApi !== void 0) return _otelApi;
2699
+ try {
2700
+ _otelApi = require("@opentelemetry/api");
2701
+ return _otelApi;
2702
+ } catch {
2703
+ _otelApi = null;
2704
+ return null;
2705
+ }
2706
+ }
2707
+ /**
2708
+ * Read the currently active OTel span context (if any) and return its fields
2709
+ * in a plain object suitable for spreading into a log entry.
2710
+ *
2711
+ * Returns `undefined` when:
2712
+ * - `@opentelemetry/api` is not installed
2713
+ * - No active span exists (root context)
2714
+ * - The span context is invalid (all-zeros)
2715
+ */
2716
+ function getActiveOtelContext(opts = {}) {
2717
+ const api = tryLoadOtelApi();
2718
+ if (!api) return void 0;
2719
+ try {
2720
+ const ctx = api.context.active();
2721
+ const sc = api.trace.getSpanContext(ctx);
2722
+ if (!sc || !api.trace.isSpanContextValid(sc)) return void 0;
2723
+ const isSampled = (sc.traceFlags & TRACE_FLAG_SAMPLED) === TRACE_FLAG_SAMPLED;
2724
+ if (opts.sampledOnly && !isSampled) return void 0;
2725
+ return {
2726
+ traceId: sc.traceId,
2727
+ spanId: sc.spanId,
2728
+ traceFlags: sc.traceFlags,
2729
+ isSampled
2730
+ };
2731
+ } catch {
2732
+ return;
2733
+ }
2734
+ }
2735
+ /**
2736
+ * Returns a metadata object with OTel context fields ready to merge into a log call,
2737
+ * using the configured field names.
2738
+ *
2739
+ * Returns `{}` when no active span exists (safe to spread unconditionally).
2740
+ *
2741
+ * @example
2742
+ * ```ts
2743
+ * await logger.info('Payment processed', {
2744
+ * ...getOtelMetaFields(),
2745
+ * orderId: 'ord_123',
2746
+ * });
2747
+ * ```
2748
+ */
2749
+ function getOtelMetaFields(opts = {}) {
2750
+ const { traceIdField = "traceId", spanIdField = "spanId", traceFlagsField = "traceFlags" } = opts;
2751
+ const ctx = getActiveOtelContext(opts);
2752
+ if (!ctx) return {};
2753
+ return {
2754
+ [traceIdField]: ctx.traceId,
2755
+ [spanIdField]: ctx.spanId,
2756
+ [traceFlagsField]: ctx.traceFlags
2757
+ };
2758
+ }
2759
+ let _bridgeOptions = null;
2760
+ /**
2761
+ * Initialise the global OTel bridge.
2762
+ *
2763
+ * Once called, logixia's internal log pipeline checks for an active OTel span
2764
+ * on **every** log call and automatically merges the span context into the
2765
+ * entry's metadata — no per-call wiring needed.
2766
+ *
2767
+ * Call once at app startup, **after** the OTel SDK has been initialised:
2768
+ * ```ts
2769
+ * import { initOtelBridge } from 'logixia';
2770
+ * initOtelBridge();
2771
+ * ```
2772
+ */
2773
+ function initOtelBridge(opts = {}) {
2774
+ _bridgeOptions = opts;
2775
+ }
2776
+ /**
2777
+ * @internal
2778
+ * True when initOtelBridge() has been called. Lets the logger hot path skip the
2779
+ * `_getOtelPayloadIfEnabled()` call (and its `{}` allocation + Object.keys) on
2780
+ * every log when the bridge is off — the overwhelmingly common case.
2781
+ */
2782
+ function _isOtelBridgeEnabled() {
2783
+ return _bridgeOptions !== null;
2784
+ }
2785
+ /**
2786
+ * @internal
2787
+ * Used by the core logger to inject OTel context when the bridge is active.
2788
+ * Returns `{}` when the bridge is not initialised or no active span exists.
2789
+ */
2790
+ function _getOtelPayloadIfEnabled() {
2791
+ if (!_bridgeOptions) return {};
2792
+ return getOtelMetaFields(_bridgeOptions);
2793
+ }
2794
+ /**
2795
+ * @internal
2796
+ * Payload field names the active bridge writes the trace and span ids to, or
2797
+ * `undefined` when the bridge is not initialised.
2798
+ */
2799
+ function _getOtelBridgeFieldNames() {
2800
+ if (!_bridgeOptions) return void 0;
2801
+ return {
2802
+ traceIdField: _bridgeOptions.traceIdField ?? "traceId",
2803
+ spanIdField: _bridgeOptions.spanIdField ?? "spanId"
2804
+ };
2805
+ }
2806
+ /**
2807
+ * Disable the OTel bridge (useful for tests).
2808
+ */
2809
+ function disableOtelBridge() {
2810
+ _bridgeOptions = null;
2811
+ }
2812
+ Object.defineProperty(exports, "AnalyticsTransport", {
2813
+ enumerable: true,
2814
+ get: function() {
2815
+ return AnalyticsTransport;
2816
+ }
2817
+ });
2818
+ Object.defineProperty(exports, "BufferCap", {
2819
+ enumerable: true,
2820
+ get: function() {
2821
+ return BufferCap;
2822
+ }
2823
+ });
2824
+ Object.defineProperty(exports, "ConsoleTransport", {
2825
+ enumerable: true,
2826
+ get: function() {
2827
+ return ConsoleTransport;
2828
+ }
2829
+ });
2830
+ Object.defineProperty(exports, "DataDogTransport", {
2831
+ enumerable: true,
2832
+ get: function() {
2833
+ return DataDogTransport;
2834
+ }
2835
+ });
2836
+ Object.defineProperty(exports, "DatabaseTransport", {
2837
+ enumerable: true,
2838
+ get: function() {
2839
+ return DatabaseTransport;
2840
+ }
2665
2841
  });
2666
- Object.defineProperty(exports, 'BufferCap', {
2667
- enumerable: true,
2668
- get: function () {
2669
- return BufferCap;
2670
- }
2842
+ Object.defineProperty(exports, "FileTransport", {
2843
+ enumerable: true,
2844
+ get: function() {
2845
+ return FileTransport;
2846
+ }
2671
2847
  });
2672
- Object.defineProperty(exports, 'ConsoleTransport', {
2673
- enumerable: true,
2674
- get: function () {
2675
- return ConsoleTransport;
2676
- }
2848
+ Object.defineProperty(exports, "GoogleAnalyticsTransport", {
2849
+ enumerable: true,
2850
+ get: function() {
2851
+ return GoogleAnalyticsTransport;
2852
+ }
2853
+ });
2854
+ Object.defineProperty(exports, "MixpanelTransport", {
2855
+ enumerable: true,
2856
+ get: function() {
2857
+ return MixpanelTransport;
2858
+ }
2859
+ });
2860
+ Object.defineProperty(exports, "SegmentTransport", {
2861
+ enumerable: true,
2862
+ get: function() {
2863
+ return SegmentTransport;
2864
+ }
2865
+ });
2866
+ Object.defineProperty(exports, "TransportManager", {
2867
+ enumerable: true,
2868
+ get: function() {
2869
+ return TransportManager;
2870
+ }
2677
2871
  });
2678
- Object.defineProperty(exports, 'DataDogTransport', {
2679
- enumerable: true,
2680
- get: function () {
2681
- return DataDogTransport;
2682
- }
2872
+ Object.defineProperty(exports, "_getOtelBridgeFieldNames", {
2873
+ enumerable: true,
2874
+ get: function() {
2875
+ return _getOtelBridgeFieldNames;
2876
+ }
2683
2877
  });
2684
- Object.defineProperty(exports, 'DatabaseTransport', {
2685
- enumerable: true,
2686
- get: function () {
2687
- return DatabaseTransport;
2688
- }
2878
+ Object.defineProperty(exports, "_getOtelPayloadIfEnabled", {
2879
+ enumerable: true,
2880
+ get: function() {
2881
+ return _getOtelPayloadIfEnabled;
2882
+ }
2689
2883
  });
2690
- Object.defineProperty(exports, 'FileTransport', {
2691
- enumerable: true,
2692
- get: function () {
2693
- return FileTransport;
2694
- }
2884
+ Object.defineProperty(exports, "_isOtelBridgeEnabled", {
2885
+ enumerable: true,
2886
+ get: function() {
2887
+ return _isOtelBridgeEnabled;
2888
+ }
2695
2889
  });
2696
- Object.defineProperty(exports, 'GoogleAnalyticsTransport', {
2697
- enumerable: true,
2698
- get: function () {
2699
- return GoogleAnalyticsTransport;
2700
- }
2890
+ Object.defineProperty(exports, "disableOtelBridge", {
2891
+ enumerable: true,
2892
+ get: function() {
2893
+ return disableOtelBridge;
2894
+ }
2701
2895
  });
2702
- Object.defineProperty(exports, 'MixpanelTransport', {
2703
- enumerable: true,
2704
- get: function () {
2705
- return MixpanelTransport;
2706
- }
2896
+ Object.defineProperty(exports, "getActiveOtelContext", {
2897
+ enumerable: true,
2898
+ get: function() {
2899
+ return getActiveOtelContext;
2900
+ }
2707
2901
  });
2708
- Object.defineProperty(exports, 'SegmentTransport', {
2709
- enumerable: true,
2710
- get: function () {
2711
- return SegmentTransport;
2712
- }
2902
+ Object.defineProperty(exports, "getOtelMetaFields", {
2903
+ enumerable: true,
2904
+ get: function() {
2905
+ return getOtelMetaFields;
2906
+ }
2713
2907
  });
2714
- Object.defineProperty(exports, 'TransportManager', {
2715
- enumerable: true,
2716
- get: function () {
2717
- return TransportManager;
2718
- }
2908
+ Object.defineProperty(exports, "initOtelBridge", {
2909
+ enumerable: true,
2910
+ get: function() {
2911
+ return initOtelBridge;
2912
+ }
2719
2913
  });
2720
- Object.defineProperty(exports, 'stripControlChars', {
2721
- enumerable: true,
2722
- get: function () {
2723
- return stripControlChars;
2724
- }
2914
+ Object.defineProperty(exports, "stripControlChars", {
2915
+ enumerable: true,
2916
+ get: function() {
2917
+ return stripControlChars;
2918
+ }
2725
2919
  });
2726
- //# sourceMappingURL=transport.manager-CXbKKdVE.js.map
2920
+
2921
+ //# sourceMappingURL=otel-DyeH6DVR.js.map