logixia 1.13.3 → 2.0.4

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 (229) hide show
  1. package/README.md +117 -44
  2. package/dist/async-context-B05ArHgM.mjs +134 -0
  3. package/dist/async-context-B05ArHgM.mjs.map +1 -0
  4. package/dist/async-context-DTQgi8f7.js +150 -0
  5. package/dist/async-context-DTQgi8f7.js.map +1 -0
  6. package/dist/{azure-monitor.transport-CHnjVRF-.mjs → azure-monitor.transport-BPbgjATu.mjs} +27 -15
  7. package/dist/azure-monitor.transport-BPbgjATu.mjs.map +1 -0
  8. package/dist/{azure-monitor.transport-BDFO4F-i.d.ts → azure-monitor.transport-C7kYyZUW.d.mts} +3 -6
  9. package/dist/azure-monitor.transport-C7kYyZUW.d.mts.map +1 -0
  10. package/dist/{azure-monitor.transport-CrvfHd9C.js → azure-monitor.transport-CwbOLZHB.js} +32 -20
  11. package/dist/azure-monitor.transport-CwbOLZHB.js.map +1 -0
  12. package/dist/{azure-monitor.transport-D5wQEH04.d.mts → azure-monitor.transport-DV03Z5P4.d.ts} +3 -6
  13. package/dist/azure-monitor.transport-DV03Z5P4.d.ts.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-0fgLmIPn.mjs} +21 -7
  19. package/dist/batch-buffer-0fgLmIPn.mjs.map +1 -0
  20. package/dist/{batch-buffer-BY-mRWIK.js → batch-buffer-DT4gdXmf.js} +53 -40
  21. package/dist/batch-buffer-DT4gdXmf.js.map +1 -0
  22. package/dist/browser.d.mts +52 -23
  23. package/dist/browser.d.mts.map +1 -1
  24. package/dist/browser.d.ts +52 -23
  25. package/dist/browser.d.ts.map +1 -1
  26. package/dist/browser.js +460 -62
  27. package/dist/browser.js.map +1 -1
  28. package/dist/browser.mjs +461 -65
  29. package/dist/browser.mjs.map +1 -1
  30. package/dist/{nestjs-extras-ImbuDhs1.mjs → builder-D70z6kjj.mjs} +279 -965
  31. package/dist/builder-D70z6kjj.mjs.map +1 -0
  32. package/dist/{nestjs-extras-DnJ6vrIC.js → builder-M7NoaugM.js} +421 -1177
  33. package/dist/builder-M7NoaugM.js.map +1 -0
  34. package/dist/cli/index.js +86 -67
  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-BO1ahxw-.js → cloudwatch.transport-B2wKQFF7.js} +61 -36
  40. package/dist/cloudwatch.transport-B2wKQFF7.js.map +1 -0
  41. package/dist/{cloudwatch.transport-DZ6ies7g.mjs → cloudwatch.transport-BTvYfLs9.mjs} +54 -28
  42. package/dist/cloudwatch.transport-BTvYfLs9.mjs.map +1 -0
  43. package/dist/{cloudwatch.transport-B00st6Xv.d.ts → cloudwatch.transport-Bf7L4I59.d.ts} +2 -6
  44. package/dist/cloudwatch.transport-Bf7L4I59.d.ts.map +1 -0
  45. package/dist/{cloudwatch.transport-Blc7Gtxt.d.mts → cloudwatch.transport-Rj4yTpRn.d.mts} +2 -6
  46. package/dist/cloudwatch.transport-Rj4yTpRn.d.mts.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 +13 -16
  52. package/dist/correlation.d.mts.map +1 -1
  53. package/dist/correlation.d.ts +13 -16
  54. package/dist/correlation.d.ts.map +1 -1
  55. package/dist/correlation.js +58 -9
  56. package/dist/correlation.js.map +1 -1
  57. package/dist/correlation.mjs +56 -6
  58. package/dist/correlation.mjs.map +1 -1
  59. package/dist/{entry-fields-BJkuPnIg.mjs → entry-fields-CGuvT2R0.mjs} +5 -6
  60. package/dist/entry-fields-CGuvT2R0.mjs.map +1 -0
  61. package/dist/{entry-fields-BvOLFlJ4.js → entry-fields-RLd1jCoR.js} +10 -12
  62. package/dist/entry-fields-RLd1jCoR.js.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-m4fVw0b1.d.ts → gcp.transport-C5D72b1g.d.mts} +3 -6
  68. package/dist/gcp.transport-C5D72b1g.d.mts.map +1 -0
  69. package/dist/{gcp.transport-zzNyIoih.d.mts → gcp.transport-CFQfdAOK.d.ts} +3 -6
  70. package/dist/gcp.transport-CFQfdAOK.d.ts.map +1 -0
  71. package/dist/{gcp.transport-DBX5TPIy.mjs → gcp.transport-CGKopAhQ.mjs} +55 -16
  72. package/dist/gcp.transport-CGKopAhQ.mjs.map +1 -0
  73. package/dist/{gcp.transport-CHV8MGgz.js → gcp.transport-KZe9hCAR.js} +60 -22
  74. package/dist/gcp.transport-KZe9hCAR.js.map +1 -0
  75. package/dist/{index-nZEeCr3X.d.ts → index-DwozbmB4.d.ts} +3 -8
  76. package/dist/index-DwozbmB4.d.ts.map +1 -0
  77. package/dist/{index-BPwEisy4.d.mts → index-xqaJtAZn.d.mts} +3 -8
  78. package/dist/index-xqaJtAZn.d.mts.map +1 -0
  79. package/dist/index.d.mts +141 -203
  80. package/dist/index.d.mts.map +1 -1
  81. package/dist/index.d.ts +140 -202
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +196 -381
  84. package/dist/index.js.map +1 -1
  85. package/dist/index.mjs +145 -294
  86. package/dist/index.mjs.map +1 -1
  87. package/dist/internal-log-b0Vp4qrB.js +183 -0
  88. package/dist/internal-log-b0Vp4qrB.js.map +1 -0
  89. package/dist/internal-log-uCSd1PMc.mjs +142 -0
  90. package/dist/internal-log-uCSd1PMc.mjs.map +1 -0
  91. package/dist/logitron-logger-D2B75Oc7.d.ts +365 -0
  92. package/dist/logitron-logger-D2B75Oc7.d.ts.map +1 -0
  93. package/dist/logitron-logger-oEd6wNhf.d.mts +365 -0
  94. package/dist/logitron-logger-oEd6wNhf.d.mts.map +1 -0
  95. package/dist/middleware.d.mts +10 -12
  96. package/dist/middleware.d.mts.map +1 -1
  97. package/dist/middleware.d.ts +10 -12
  98. package/dist/middleware.d.ts.map +1 -1
  99. package/dist/middleware.js +16 -47
  100. package/dist/middleware.js.map +1 -1
  101. package/dist/middleware.mjs +13 -45
  102. package/dist/middleware.mjs.map +1 -1
  103. package/dist/nest.d.mts +467 -10
  104. package/dist/nest.d.mts.map +1 -1
  105. package/dist/nest.d.ts +467 -10
  106. package/dist/nest.d.ts.map +1 -1
  107. package/dist/nest.js +889 -43
  108. package/dist/nest.js.map +1 -0
  109. package/dist/nest.mjs +850 -9
  110. package/dist/nest.mjs.map +1 -0
  111. package/dist/{trace.utils-CvXgaiQT.mjs → request-trace-C_fvIDv4.mjs} +44 -9
  112. package/dist/request-trace-C_fvIDv4.mjs.map +1 -0
  113. package/dist/{trace.utils-DpBOLDtq.js → request-trace-wTJdKp6-.js} +121 -77
  114. package/dist/request-trace-wTJdKp6-.js.map +1 -0
  115. package/dist/rolldown-runtime-D3PmRqjj.mjs +4 -0
  116. package/dist/{safe-stringify-DJ66tW5I.mjs → safe-stringify-BMRl3EX3.mjs} +3 -4
  117. package/dist/safe-stringify-BMRl3EX3.mjs.map +1 -0
  118. package/dist/{safe-stringify-DWo3aZp_.js → safe-stringify-DLz1Kz3o.js} +23 -25
  119. package/dist/safe-stringify-DLz1Kz3o.js.map +1 -0
  120. package/dist/{search-CHUZPl0h.d.ts → search-BH33XhuU.d.mts} +2 -22
  121. package/dist/search-BH33XhuU.d.mts.map +1 -0
  122. package/dist/{search-DjXSn6v5.mjs → search-CWMVYC-R.mjs} +34 -41
  123. package/dist/search-CWMVYC-R.mjs.map +1 -0
  124. package/dist/{search-BfBzDIT9.d.mts → search-CazwyX5Z.d.ts} +2 -22
  125. package/dist/search-CazwyX5Z.d.ts.map +1 -0
  126. package/dist/{search-B0MH1SJJ.js → search-DUfWuzFP.js} +64 -71
  127. package/dist/search-DUfWuzFP.js.map +1 -0
  128. package/dist/search.d.mts +2 -4
  129. package/dist/search.d.ts +2 -4
  130. package/dist/search.js +3 -4
  131. package/dist/search.mjs +1 -4
  132. package/dist/secret-config-BegMLkYl.mjs +209 -0
  133. package/dist/secret-config-BegMLkYl.mjs.map +1 -0
  134. package/dist/secret-config-CBZBs0p1.js +271 -0
  135. package/dist/secret-config-CBZBs0p1.js.map +1 -0
  136. package/dist/slack.transport-Ce96JBDk.mjs +824 -0
  137. package/dist/slack.transport-Ce96JBDk.mjs.map +1 -0
  138. package/dist/slack.transport-Dlx3xvb7.js +847 -0
  139. package/dist/slack.transport-Dlx3xvb7.js.map +1 -0
  140. package/dist/slack.transport-DrirgDNy.d.ts +159 -0
  141. package/dist/slack.transport-DrirgDNy.d.ts.map +1 -0
  142. package/dist/slack.transport-DxHOXlLu.d.mts +159 -0
  143. package/dist/slack.transport-DxHOXlLu.d.mts.map +1 -0
  144. package/dist/testing.d.mts +3 -8
  145. package/dist/testing.d.mts.map +1 -1
  146. package/dist/testing.d.ts +3 -8
  147. package/dist/testing.d.ts.map +1 -1
  148. package/dist/testing.js +3 -4
  149. package/dist/testing.js.map +1 -1
  150. package/dist/testing.mjs +2 -3
  151. package/dist/testing.mjs.map +1 -1
  152. package/dist/{transport.manager-Crau3Rle.js → transport.manager-DkcEOlqV.js} +331 -234
  153. package/dist/transport.manager-DkcEOlqV.js.map +1 -0
  154. package/dist/{transport.manager-CpdVHEGP.mjs → transport.manager-eZ_EeC00.mjs} +274 -178
  155. package/dist/transport.manager-eZ_EeC00.mjs.map +1 -0
  156. package/dist/{transport.types-CtNr3D7S.d.mts → transport.types-BJVL1QQl.d.mts} +5 -4
  157. package/dist/transport.types-BJVL1QQl.d.mts.map +1 -0
  158. package/dist/{transport.types-DqVLZTyf.d.ts → transport.types-BJVL1QQl.d.ts} +5 -4
  159. package/dist/transport.types-BJVL1QQl.d.ts.map +1 -0
  160. package/dist/transports.d.mts +32 -41
  161. package/dist/transports.d.mts.map +1 -1
  162. package/dist/transports.d.ts +32 -41
  163. package/dist/transports.d.ts.map +1 -1
  164. package/dist/transports.js +12 -12
  165. package/dist/transports.mjs +7 -12
  166. package/dist/worker-entry.js +337 -87
  167. package/dist/worker.d.mts +1 -2
  168. package/dist/worker.d.ts +1 -2
  169. package/dist/worker.js +3 -4
  170. package/dist/worker.mjs +1 -4
  171. package/dist/{worker.transport-Bj-i0P9V.d.ts → worker.transport-BuPwBi3d.d.ts} +2 -6
  172. package/dist/worker.transport-BuPwBi3d.d.ts.map +1 -0
  173. package/dist/{worker.transport-JP8YHBuU.js → worker.transport-C6GNl_r2.js} +44 -14
  174. package/dist/worker.transport-C6GNl_r2.js.map +1 -0
  175. package/dist/{worker.transport-otwhJ_Et.mjs → worker.transport-DLVA4y2e.mjs} +39 -9
  176. package/dist/worker.transport-DLVA4y2e.mjs.map +1 -0
  177. package/dist/{worker.transport-Bgv9heDI.d.mts → worker.transport-hJay1wxA.d.mts} +2 -6
  178. package/dist/worker.transport-hJay1wxA.d.mts.map +1 -0
  179. package/package.json +36 -19
  180. package/dist/async-context-BzJrbfQs.mjs +0 -72
  181. package/dist/async-context-BzJrbfQs.mjs.map +0 -1
  182. package/dist/async-context-DyQQYq3I.js +0 -92
  183. package/dist/async-context-DyQQYq3I.js.map +0 -1
  184. package/dist/azure-monitor.transport-BDFO4F-i.d.ts.map +0 -1
  185. package/dist/azure-monitor.transport-CHnjVRF-.mjs.map +0 -1
  186. package/dist/azure-monitor.transport-CrvfHd9C.js.map +0 -1
  187. package/dist/azure-monitor.transport-D5wQEH04.d.mts.map +0 -1
  188. package/dist/batch-buffer-BY-mRWIK.js.map +0 -1
  189. package/dist/batch-buffer-PGvSgbmd.mjs.map +0 -1
  190. package/dist/chunk-DLSkYcPk.mjs +0 -7
  191. package/dist/chunk-nOFOJqeH.js +0 -30
  192. package/dist/cloudwatch.transport-B00st6Xv.d.ts.map +0 -1
  193. package/dist/cloudwatch.transport-BO1ahxw-.js.map +0 -1
  194. package/dist/cloudwatch.transport-Blc7Gtxt.d.mts.map +0 -1
  195. package/dist/cloudwatch.transport-DZ6ies7g.mjs.map +0 -1
  196. package/dist/entry-fields-BJkuPnIg.mjs.map +0 -1
  197. package/dist/entry-fields-BvOLFlJ4.js.map +0 -1
  198. package/dist/gcp.transport-CHV8MGgz.js.map +0 -1
  199. package/dist/gcp.transport-DBX5TPIy.mjs.map +0 -1
  200. package/dist/gcp.transport-m4fVw0b1.d.ts.map +0 -1
  201. package/dist/gcp.transport-zzNyIoih.d.mts.map +0 -1
  202. package/dist/index-BPwEisy4.d.mts.map +0 -1
  203. package/dist/index-nZEeCr3X.d.ts.map +0 -1
  204. package/dist/internal-log-BUJYMZbE.js +0 -70
  205. package/dist/internal-log-BUJYMZbE.js.map +0 -1
  206. package/dist/internal-log-Cm8SOWSV.mjs +0 -52
  207. package/dist/internal-log-Cm8SOWSV.mjs.map +0 -1
  208. package/dist/nestjs-extras-DnJ6vrIC.js.map +0 -1
  209. package/dist/nestjs-extras-ImbuDhs1.mjs.map +0 -1
  210. package/dist/nestjs-extras-OkC796py.d.mts +0 -725
  211. package/dist/nestjs-extras-OkC796py.d.mts.map +0 -1
  212. package/dist/nestjs-extras-mKrHE9S6.d.ts +0 -725
  213. package/dist/nestjs-extras-mKrHE9S6.d.ts.map +0 -1
  214. package/dist/safe-stringify-DJ66tW5I.mjs.map +0 -1
  215. package/dist/safe-stringify-DWo3aZp_.js.map +0 -1
  216. package/dist/search-B0MH1SJJ.js.map +0 -1
  217. package/dist/search-BfBzDIT9.d.mts.map +0 -1
  218. package/dist/search-CHUZPl0h.d.ts.map +0 -1
  219. package/dist/search-DjXSn6v5.mjs.map +0 -1
  220. package/dist/trace.utils-CvXgaiQT.mjs.map +0 -1
  221. package/dist/trace.utils-DpBOLDtq.js.map +0 -1
  222. package/dist/transport.manager-CpdVHEGP.mjs.map +0 -1
  223. package/dist/transport.manager-Crau3Rle.js.map +0 -1
  224. package/dist/transport.types-CtNr3D7S.d.mts.map +0 -1
  225. package/dist/transport.types-DqVLZTyf.d.ts.map +0 -1
  226. package/dist/worker.transport-Bgv9heDI.d.mts.map +0 -1
  227. package/dist/worker.transport-Bj-i0P9V.d.ts.map +0 -1
  228. package/dist/worker.transport-JP8YHBuU.js.map +0 -1
  229. package/dist/worker.transport-otwhJ_Et.mjs.map +0 -1
package/dist/nest.js CHANGED
@@ -1,48 +1,894 @@
1
- require('./internal-log-BUJYMZbE.js');
2
- require('./safe-stringify-DWo3aZp_.js');
3
- require('./entry-fields-BvOLFlJ4.js');
4
- require('./trace.utils-DpBOLDtq.js');
5
- require('./async-context-DyQQYq3I.js');
6
- const require_nestjs_extras = require('./nestjs-extras-DnJ6vrIC.js');
7
- require('./coerce.utils-B-LilukN.js');
8
- require('./transport.manager-Crau3Rle.js');
9
-
10
- Object.defineProperty(exports, 'KafkaTraceInterceptor', {
11
- enumerable: true,
12
- get: function () {
13
- return require_nestjs_extras.KafkaTraceInterceptor;
14
- }
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_secret_config = require("./secret-config-CBZBs0p1.js");
3
+ const require_builder = require("./builder-M7NoaugM.js");
4
+ const require_request_trace = require("./request-trace-wTJdKp6-.js");
5
+ const require_internal_log = require("./internal-log-b0Vp4qrB.js");
6
+ const require_coerce_utils = require("./coerce.utils-C1C5sIX0.js");
7
+ let _nestjs_common = require("@nestjs/common");
8
+ let rxjs = require("rxjs");
9
+ // \0@oxc-project+runtime@0.155.0/helpers/esm/decorateMetadata.js
10
+ function __decorateMetadata(k, v) {
11
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12
+ }
13
+ // \0@oxc-project+runtime@0.155.0/helpers/esm/decorate.js
14
+ function __decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ // src/core/logitron-nestjs.service.ts
21
+ var _LogixiaLoggerService;
22
+ let LogixiaLoggerService = _LogixiaLoggerService = class LogixiaLoggerService {
23
+ constructor(config) {
24
+ const defaultConfig = {
25
+ appName: "NestJS-App",
26
+ environment: "development",
27
+ traceId: true,
28
+ format: {
29
+ timestamp: true,
30
+ colorize: true,
31
+ json: false
32
+ },
33
+ silent: false,
34
+ levelOptions: {
35
+ level: require_builder.LogLevel.INFO,
36
+ levels: {
37
+ error: 0,
38
+ warn: 1,
39
+ log: 2,
40
+ debug: 3,
41
+ verbose: 4
42
+ },
43
+ colors: {
44
+ error: "red",
45
+ warn: "yellow",
46
+ log: "green",
47
+ debug: "blue",
48
+ verbose: "cyan"
49
+ }
50
+ },
51
+ fields: {
52
+ timestamp: "[yyyy-mm-dd HH:MM:ss.MS]",
53
+ level: "[log_level]",
54
+ appName: "[app_name]",
55
+ traceId: "[trace_id]",
56
+ message: "[message]",
57
+ payload: "[payload]",
58
+ timeTaken: "[time_taken_MS]"
59
+ }
60
+ };
61
+ require_secret_config.protectSecrets(this, ["_mergedConfig"]);
62
+ this._mergedConfig = {
63
+ ...defaultConfig,
64
+ ...config
65
+ };
66
+ this.logger = new require_builder.LogixiaLogger(this._mergedConfig);
67
+ this._createCustomLevelMethods();
68
+ }
69
+ _createCustomLevelMethods() {
70
+ var _this$_mergedConfig$l;
71
+ const levels = (_this$_mergedConfig$l = this._mergedConfig.levelOptions) === null || _this$_mergedConfig$l === void 0 ? void 0 : _this$_mergedConfig$l.levels;
72
+ if (!levels) return;
73
+ for (const levelName of Object.keys(levels)) {
74
+ const lower = levelName.toLowerCase();
75
+ if (typeof this[lower] !== "undefined") continue;
76
+ this[lower] = async (message, data) => {
77
+ return this.logger.logLevel(lower, message, data);
78
+ };
79
+ }
80
+ }
81
+ /**
82
+ * NestJS `LoggerService.log` — void, string context.
83
+ * Maps internally to `info`.
84
+ *
85
+ * @example `logger.log('User signed up', 'AuthService')`
86
+ */
87
+ log(message, context) {
88
+ this.setContextIfProvided(context);
89
+ this.logger.info(this.formatMessage(message)).catch((err) => require_internal_log.internalError("LogixiaLoggerService.log failed", err));
90
+ }
91
+ /**
92
+ * Native async `info` — structured data, returns `Promise<void>`.
93
+ *
94
+ * @example `await logger.info('User signed up', { userId: 'u_abc' })`
95
+ */
96
+ async info(message, data) {
97
+ return this.logger.info(message, data);
98
+ }
99
+ error(message, dataOrTrace, context) {
100
+ if (typeof dataOrTrace === "object" && dataOrTrace !== null) return message instanceof Error ? this.logger.error(message, dataOrTrace) : this.logger.error(this.formatMessage(message), dataOrTrace);
101
+ this.setContextIfProvided(context);
102
+ const errorData = {};
103
+ if (typeof dataOrTrace === "string" && dataOrTrace) errorData.stack = dataOrTrace;
104
+ (message instanceof Error ? this.logger.error(message, errorData) : this.logger.error(this.formatMessage(message), errorData)).catch((err) => require_internal_log.internalError("LogixiaLoggerService.error failed", err));
105
+ }
106
+ warn(message, dataOrContext) {
107
+ if (typeof dataOrContext === "object" && dataOrContext !== null) return this.logger.warn(this.formatMessage(message), dataOrContext);
108
+ this.setContextIfProvided(typeof dataOrContext === "string" ? dataOrContext : void 0);
109
+ this.logger.warn(this.formatMessage(message)).catch((err) => require_internal_log.internalError("LogixiaLoggerService.warn failed", err));
110
+ }
111
+ debug(message, dataOrContext) {
112
+ if (typeof dataOrContext === "object" && dataOrContext !== null) return this.logger.debug(this.formatMessage(message), dataOrContext);
113
+ this.setContextIfProvided(typeof dataOrContext === "string" ? dataOrContext : void 0);
114
+ this.logger.debug(this.formatMessage(message)).catch((err) => require_internal_log.internalError("LogixiaLoggerService.debug failed", err));
115
+ }
116
+ verbose(message, dataOrContext) {
117
+ if (typeof dataOrContext === "object" && dataOrContext !== null) return this.logger.trace(this.formatMessage(message), dataOrContext);
118
+ this.setContextIfProvided(typeof dataOrContext === "string" ? dataOrContext : void 0);
119
+ this.logger.trace(this.formatMessage(message)).catch((err) => require_internal_log.internalError("LogixiaLoggerService.verbose failed", err));
120
+ }
121
+ /**
122
+ * Native async `trace` — lowest verbosity level, structured data.
123
+ */
124
+ async trace(message, data) {
125
+ return this.logger.trace(message, data);
126
+ }
127
+ /**
128
+ * Log at any named level with structured data.
129
+ */
130
+ logLevel(level, message, data) {
131
+ return this.logger.logLevel(level, message, data);
132
+ }
133
+ time(label) {
134
+ this.logger.time(label);
135
+ }
136
+ async timeEnd(label) {
137
+ return this.logger.timeEnd(label);
138
+ }
139
+ async timeAsync(label, fn) {
140
+ return this.logger.timeAsync(label, fn);
141
+ }
142
+ setContext(context) {
143
+ const coerced = typeof context === "string" ? context : require_coerce_utils.safeToString(context);
144
+ this.context = coerced;
145
+ this.logger.setContext(coerced);
146
+ }
147
+ getContext() {
148
+ return this.context;
149
+ }
150
+ setLevel(level) {
151
+ this.logger.setLevel(level);
152
+ }
153
+ getLevel() {
154
+ return this.logger.getLevel();
155
+ }
156
+ child(context, data) {
157
+ const childService = new _LogixiaLoggerService(this._mergedConfig);
158
+ childService.logger = this.logger.child(context, data);
159
+ childService.context = context;
160
+ return childService;
161
+ }
162
+ getCurrentTraceId() {
163
+ return require_request_trace.TraceContext.instance.getCurrentTraceId();
164
+ }
165
+ /** Returns the AsyncLocalStorage key currently used to store the trace ID. */
166
+ get traceContextKey() {
167
+ return require_request_trace.getTraceContextKey();
168
+ }
169
+ async close() {
170
+ return this.logger.close();
171
+ }
172
+ static create(config) {
173
+ return new _LogixiaLoggerService(config);
174
+ }
175
+ getLogger() {
176
+ return this.logger;
177
+ }
178
+ setContextIfProvided(context) {
179
+ if (typeof context !== "string" || context.length === 0) return;
180
+ if (context !== this.context) this.setContext(context);
181
+ }
182
+ formatMessage(message) {
183
+ if (typeof message === "string") return message;
184
+ return require_coerce_utils.safeToString(message);
185
+ }
186
+ };
187
+ LogixiaLoggerService = _LogixiaLoggerService = __decorate([(0, _nestjs_common.Injectable)({ scope: _nestjs_common.Scope.TRANSIENT }), __decorateMetadata("design:paramtypes", [Object])], LogixiaLoggerService);
188
+ // src/core/kafka-trace.interceptor.ts
189
+ var _KafkaTraceInterceptor;
190
+ let KafkaTraceInterceptor = class KafkaTraceInterceptor {
191
+ static {
192
+ _KafkaTraceInterceptor = this;
193
+ }
194
+ /** Reset counters (tests). */
195
+ static resetMetrics() {
196
+ _KafkaTraceInterceptor.metrics.accepted = 0;
197
+ _KafkaTraceInterceptor.metrics.acceptedWithoutTrace = 0;
198
+ _KafkaTraceInterceptor.metrics.dropped = 0;
199
+ }
200
+ /**
201
+ * @param config - TraceIdConfig options (extractor keys, contextKey, etc.)
202
+ * @param requireTraceId - When true, messages with no traceId are silently skipped
203
+ * (EMPTY Observable — message is ack'd, consumer stays alive).
204
+ * A WARN is logged AND `KafkaTraceInterceptor.metrics.dropped`
205
+ * increments so the missing traceId is observable end-to-end.
206
+ * Default: false (handler runs without trace context).
207
+ */
208
+ constructor(config, requireTraceId = false) {
209
+ this.requireTraceId = requireTraceId;
210
+ this.ctx = require_request_trace.TraceContext.instance;
211
+ this.config = {
212
+ enabled: true,
213
+ contextKey: "traceId",
214
+ extractor: {
215
+ body: [
216
+ "traceId",
217
+ "trace_id",
218
+ "x-trace-id"
219
+ ],
220
+ header: ["x-trace-id", "trace-id"]
221
+ },
222
+ ...config
223
+ };
224
+ }
225
+ intercept(context, next) {
226
+ if (!this.config.enabled) return next.handle();
227
+ const rpcContext = context.switchToRpc();
228
+ const data = rpcContext.getData();
229
+ const rpcData = rpcContext.getContext();
230
+ let traceId;
231
+ if (this.config.extractor) traceId = require_request_trace.extractTraceId({
232
+ body: data,
233
+ headers: (rpcData === null || rpcData === void 0 ? void 0 : rpcData.headers) ?? {},
234
+ query: {},
235
+ params: {}
236
+ }, this.config.extractor);
237
+ if (!traceId) traceId = this.ctx.getCurrentTraceId();
238
+ if (!traceId) {
239
+ if (this.requireTraceId) {
240
+ var _LogixiaLoggerModule$;
241
+ _KafkaTraceInterceptor.metrics.dropped++;
242
+ (_LogixiaLoggerModule$ = LogixiaLoggerModule.getGlobalLogger()) === null || _LogixiaLoggerModule$ === void 0 || _LogixiaLoggerModule$.warn(`[KafkaTraceInterceptor] Missing traceId on topic "${rpcData === null || rpcData === void 0 ? void 0 : rpcData.topic}" — message skipped.`);
243
+ return rxjs.EMPTY;
244
+ }
245
+ _KafkaTraceInterceptor.metrics.acceptedWithoutTrace++;
246
+ return next.handle();
247
+ }
248
+ _KafkaTraceInterceptor.metrics.accepted++;
249
+ const kafkaContext = {
250
+ messageType: "kafka",
251
+ topic: rpcData === null || rpcData === void 0 ? void 0 : rpcData.topic,
252
+ partition: rpcData === null || rpcData === void 0 ? void 0 : rpcData.partition,
253
+ offset: rpcData === null || rpcData === void 0 ? void 0 : rpcData.offset,
254
+ key: rpcData === null || rpcData === void 0 ? void 0 : rpcData.key,
255
+ timestamp: rpcData === null || rpcData === void 0 ? void 0 : rpcData.timestamp
256
+ };
257
+ return new rxjs.Observable((subscriber) => {
258
+ let inner;
259
+ this.ctx.run(traceId, () => {
260
+ inner = next.handle().subscribe({
261
+ next: (value) => subscriber.next(value),
262
+ error: (err) => subscriber.error(err),
263
+ complete: () => subscriber.complete()
264
+ });
265
+ }, kafkaContext);
266
+ return () => inner === null || inner === void 0 ? void 0 : inner.unsubscribe();
267
+ });
268
+ }
269
+ static #_ = () => this.metrics = {
270
+ accepted: 0,
271
+ acceptedWithoutTrace: 0,
272
+ dropped: 0
273
+ };
274
+ };
275
+ KafkaTraceInterceptor = _KafkaTraceInterceptor = __decorate([(0, _nestjs_common.Injectable)(), __decorateMetadata("design:paramtypes", [Object, Boolean])], KafkaTraceInterceptor);
276
+ // \0@oxc-project+runtime@0.155.0/helpers/esm/decorateParam.js
277
+ function __decorateParam(paramIndex, decorator) {
278
+ return function(target, key) {
279
+ decorator(target, key, paramIndex);
280
+ };
281
+ }
282
+ /**
283
+ * Resolve the response header name from config.
284
+ * - `undefined` → default `'X-Trace-Id'`
285
+ * - `string` → user's custom header
286
+ * - `false` → `null` (suppress entirely)
287
+ */
288
+ function resolveResponseHeader(config) {
289
+ if ((config === null || config === void 0 ? void 0 : config.responseHeader) === false) return null;
290
+ return (config === null || config === void 0 ? void 0 : config.responseHeader) ?? "X-Trace-Id";
291
+ }
292
+ /**
293
+ * Echo the trace ID on the response, tolerating non-Express responses and
294
+ * already-sent headers. NestJS can run on Fastify (reply.header() instead of
295
+ * res.setHeader()), and on a closed/sent response setHeader throws — neither
296
+ * should crash the request. The trace ID is still propagated via async context.
297
+ */
298
+ function writeTraceHeader(res, header, traceId) {
299
+ const r = res;
300
+ if (r.headersSent) return;
301
+ try {
302
+ if (typeof r.setHeader === "function") r.setHeader(header, traceId);
303
+ else if (typeof r.header === "function") r.header(header, traceId);
304
+ } catch {}
305
+ }
306
+ let TraceMiddleware = class TraceMiddleware {
307
+ constructor(config) {
308
+ this.config = config;
309
+ this.ctx = require_request_trace.TraceContext.instance;
310
+ const defaultExtractor = {
311
+ header: require_request_trace.DEFAULT_TRACE_HEADERS,
312
+ query: ["traceId", "trace_id"]
313
+ };
314
+ this.config = {
315
+ enabled: true,
316
+ generator: () => this.ctx.generate(),
317
+ contextKey: "traceId",
318
+ ...config,
319
+ extractor: (config === null || config === void 0 ? void 0 : config.extractor) ? {
320
+ ...defaultExtractor,
321
+ ...config.extractor
322
+ } : defaultExtractor
323
+ };
324
+ if (this.config.enabled) this.ctx.setContextKey(this.config.contextKey ?? "traceId");
325
+ }
326
+ use(req, res, next) {
327
+ var _this$config, _req$socket, _req$connection;
328
+ if (!((_this$config = this.config) === null || _this$config === void 0 ? void 0 : _this$config.enabled)) return next();
329
+ let traceId;
330
+ if (this.config.extractor) traceId = require_request_trace.extractTraceId(req, this.config.extractor);
331
+ if (!traceId && this.config.generator) {
332
+ const candidate = this.config.generator();
333
+ if (typeof candidate === "string" && candidate.trim().length > 0) traceId = candidate;
334
+ else require_internal_log.internalWarn("TraceIdConfig.generator returned a non-string/empty value — using built-in generator.");
335
+ }
336
+ if (!traceId) traceId = this.ctx.generate();
337
+ req.traceId = traceId;
338
+ const header = resolveResponseHeader(this.config);
339
+ if (header) writeTraceHeader(res, header, traceId);
340
+ this.ctx.run(traceId, () => next(), {
341
+ method: req.method,
342
+ url: req.url,
343
+ userAgent: req.get("User-Agent"),
344
+ ip: req.ip || ((_req$socket = req.socket) === null || _req$socket === void 0 ? void 0 : _req$socket.remoteAddress) || ((_req$connection = req.connection) === null || _req$connection === void 0 ? void 0 : _req$connection.remoteAddress)
345
+ });
346
+ }
347
+ };
348
+ TraceMiddleware = __decorate([
349
+ (0, _nestjs_common.Injectable)(),
350
+ __decorateParam(0, (0, _nestjs_common.Optional)()),
351
+ __decorateMetadata("design:paramtypes", [Object])
352
+ ], TraceMiddleware);
353
+ // src/core/websocket-trace.interceptor.ts
354
+ let WebSocketTraceInterceptor = class WebSocketTraceInterceptor {
355
+ constructor(config) {
356
+ this.ctx = require_request_trace.TraceContext.instance;
357
+ this.config = {
358
+ enabled: true,
359
+ contextKey: "traceId",
360
+ extractor: {
361
+ body: [
362
+ "traceId",
363
+ "trace_id",
364
+ "x-trace-id"
365
+ ],
366
+ header: ["x-trace-id", "trace-id"],
367
+ query: ["traceId", "trace_id"]
368
+ },
369
+ ...config
370
+ };
371
+ }
372
+ intercept(context, next) {
373
+ var _client$handshake3;
374
+ if (!this.config.enabled) return next.handle();
375
+ const wsContext = context.switchToWs();
376
+ const data = wsContext.getData();
377
+ const client = wsContext.getClient();
378
+ let traceId;
379
+ if (this.config.extractor) {
380
+ var _client$handshake, _client$handshake2;
381
+ const requestLike = {
382
+ body: data,
383
+ headers: (client === null || client === void 0 || (_client$handshake = client.handshake) === null || _client$handshake === void 0 ? void 0 : _client$handshake.headers) || {},
384
+ query: (client === null || client === void 0 || (_client$handshake2 = client.handshake) === null || _client$handshake2 === void 0 ? void 0 : _client$handshake2.query) || {},
385
+ params: {}
386
+ };
387
+ traceId = require_request_trace.extractTraceId(requestLike, this.config.extractor);
388
+ }
389
+ if (!traceId) traceId = this.ctx.getCurrentTraceId();
390
+ if (!traceId) return next.handle();
391
+ const wsContextData = {
392
+ messageType: "websocket",
393
+ event: data === null || data === void 0 ? void 0 : data.event,
394
+ socketId: client === null || client === void 0 ? void 0 : client.id,
395
+ rooms: (client === null || client === void 0 ? void 0 : client.rooms) ? Array.from(client.rooms) : [],
396
+ clientAddress: client === null || client === void 0 || (_client$handshake3 = client.handshake) === null || _client$handshake3 === void 0 ? void 0 : _client$handshake3.address
397
+ };
398
+ return new rxjs.Observable((observer) => {
399
+ let inner;
400
+ this.ctx.run(traceId, () => {
401
+ inner = next.handle().subscribe({
402
+ next: (value) => observer.next(value),
403
+ error: (err) => observer.error(err),
404
+ complete: () => observer.complete()
405
+ });
406
+ }, wsContextData);
407
+ return () => inner === null || inner === void 0 ? void 0 : inner.unsubscribe();
408
+ });
409
+ }
410
+ };
411
+ WebSocketTraceInterceptor = __decorate([(0, _nestjs_common.Injectable)(), __decorateMetadata("design:paramtypes", [Object])], WebSocketTraceInterceptor);
412
+ // src/core/logitron-logger.module.ts
413
+ var _LogixiaLoggerModule;
414
+ const DEFAULT_ROUTES = [{
415
+ path: "*",
416
+ method: _nestjs_common.RequestMethod.ALL
417
+ }];
418
+ const LOGIXIA_LOGGER_CONFIG = "LOGIXIA_LOGGER_CONFIG";
419
+ const LOGIXIA_TRACE_CONFIG = "TRACE_CONFIG";
420
+ const LOGIXIA_LOGGER_PREFIX = "LOGIXIA_LOGGER_";
421
+ let LogixiaLoggerModule = class LogixiaLoggerModule {
422
+ static {
423
+ _LogixiaLoggerModule = this;
424
+ }
425
+ constructor() {
426
+ this.config = {};
427
+ }
428
+ /**
429
+ * @internal Set the global logger exactly once.
430
+ *
431
+ * Called from the module's forRoot / forRootAsync factory. If the module is
432
+ * initialised more than once in the same process (nested DI context, test
433
+ * harness creating multiple apps, hot reload, etc.) a warning is written to
434
+ * stderr and the first logger wins — silently overwriting would allow the
435
+ * newer instance's transport config to replace the live one while the old
436
+ * one is still being used by registered shutdown hooks, decorators, etc.
437
+ *
438
+ * Use {@link _resetGlobalLogger} in tests to reset between runs.
439
+ */
440
+ static _setGlobalLogger(service) {
441
+ if (_LogixiaLoggerModule._globalLogger !== null) {
442
+ require_internal_log.internalWarn("LogixiaLoggerModule.forRoot() was called more than once — ignoring the second init. If this is intentional (e.g. in tests), call LogixiaLoggerModule._resetGlobalLogger() first.");
443
+ return;
444
+ }
445
+ _LogixiaLoggerModule._globalLogger = service;
446
+ }
447
+ /** @internal Clear the global logger. Tests only. */
448
+ static _resetGlobalLogger() {
449
+ _LogixiaLoggerModule._globalLogger = null;
450
+ }
451
+ /**
452
+ * Returns the global LogixiaLoggerService instance that was created when the
453
+ * module booted. Useful for logging outside of NestJS DI — utility functions,
454
+ * plain scripts, decorators — without injecting the service everywhere.
455
+ *
456
+ * Returns `null` if called before `LogixiaLoggerModule.forRoot[Async]()` has
457
+ * been initialised (i.e. before the NestJS app has started).
458
+ *
459
+ * @example
460
+ * ```ts
461
+ * // some-util.ts
462
+ * import { LogixiaLoggerModule } from 'logixia/nest';
463
+ *
464
+ * export function doSomething() {
465
+ * LogixiaLoggerModule.getGlobalLogger()?.info('doing something');
466
+ * }
467
+ * ```
468
+ */
469
+ static getGlobalLogger() {
470
+ return _LogixiaLoggerModule._globalLogger;
471
+ }
472
+ configure(consumer) {
473
+ const { forRoutes = DEFAULT_ROUTES, exclude } = this.config;
474
+ let resolvedTraceConfig;
475
+ if (typeof _LogixiaLoggerModule.loggerConfig.traceId === "object") resolvedTraceConfig = _LogixiaLoggerModule.loggerConfig.traceId;
476
+ else if (_LogixiaLoggerModule.loggerConfig.traceId === true) resolvedTraceConfig = {
477
+ enabled: true,
478
+ contextKey: "traceId",
479
+ generator: () => require_request_trace.TraceContext.instance.generate()
480
+ };
481
+ const middleware = new TraceMiddleware(resolvedTraceConfig);
482
+ const middlewareConfig = (req, res, next) => middleware.use(req, res, next);
483
+ if (exclude) consumer.apply(middlewareConfig).exclude(...exclude).forRoutes(...forRoutes);
484
+ else consumer.apply(middlewareConfig).forRoutes(...forRoutes);
485
+ }
486
+ /**
487
+ * Configure the module with synchronous options
488
+ */
489
+ static forRoot(config) {
490
+ _LogixiaLoggerModule.loggerConfig = config || {};
491
+ const traceConfig = (config === null || config === void 0 ? void 0 : config.traceId) && typeof config.traceId === "object" ? config.traceId : { enabled: !!(config === null || config === void 0 ? void 0 : config.traceId) };
492
+ return {
493
+ module: _LogixiaLoggerModule,
494
+ providers: [
495
+ {
496
+ provide: LOGIXIA_LOGGER_CONFIG,
497
+ useValue: config || {}
498
+ },
499
+ {
500
+ provide: LOGIXIA_TRACE_CONFIG,
501
+ useValue: traceConfig
502
+ },
503
+ {
504
+ provide: LogixiaLoggerService,
505
+ useFactory: (loggerConfig) => {
506
+ const defaultConfig = {
507
+ level: "info",
508
+ service: "NestJSApp",
509
+ environment: "development",
510
+ fields: {},
511
+ formatters: ["text"],
512
+ outputs: ["console"],
513
+ levelOptions: {
514
+ level: "info",
515
+ levels: {
516
+ error: 0,
517
+ warn: 1,
518
+ info: 2,
519
+ debug: 3,
520
+ verbose: 4
521
+ },
522
+ colors: {
523
+ error: "red",
524
+ warn: "yellow",
525
+ info: "green",
526
+ debug: "blue",
527
+ verbose: "cyan"
528
+ }
529
+ },
530
+ ...loggerConfig
531
+ };
532
+ const service = new LogixiaLoggerService(defaultConfig);
533
+ _LogixiaLoggerModule._setGlobalLogger(service);
534
+ return service;
535
+ },
536
+ inject: [LOGIXIA_LOGGER_CONFIG]
537
+ },
538
+ {
539
+ provide: KafkaTraceInterceptor,
540
+ useFactory: (traceConfig) => new KafkaTraceInterceptor(traceConfig),
541
+ inject: [LOGIXIA_TRACE_CONFIG]
542
+ },
543
+ {
544
+ provide: WebSocketTraceInterceptor,
545
+ useFactory: (traceConfig) => new WebSocketTraceInterceptor(traceConfig),
546
+ inject: [LOGIXIA_TRACE_CONFIG]
547
+ }
548
+ ],
549
+ exports: [
550
+ LogixiaLoggerService,
551
+ LOGIXIA_LOGGER_CONFIG,
552
+ KafkaTraceInterceptor,
553
+ WebSocketTraceInterceptor
554
+ ],
555
+ global: true
556
+ };
557
+ }
558
+ /**
559
+ * Configure the module with asynchronous options
560
+ */
561
+ static forRootAsync(options) {
562
+ return {
563
+ module: _LogixiaLoggerModule,
564
+ imports: options.imports || [],
565
+ providers: [
566
+ ...this.createAsyncProviders(options),
567
+ {
568
+ provide: LOGIXIA_TRACE_CONFIG,
569
+ useFactory: (loggerConfig) => {
570
+ return typeof (loggerConfig === null || loggerConfig === void 0 ? void 0 : loggerConfig.traceId) === "object" ? loggerConfig.traceId : { enabled: !!(loggerConfig === null || loggerConfig === void 0 ? void 0 : loggerConfig.traceId) };
571
+ },
572
+ inject: [LOGIXIA_LOGGER_CONFIG]
573
+ },
574
+ {
575
+ provide: LogixiaLoggerService,
576
+ useFactory: (loggerConfig) => {
577
+ const defaultConfig = {
578
+ level: "info",
579
+ service: "NestJSApp",
580
+ environment: "development",
581
+ fields: {},
582
+ formatters: ["text"],
583
+ outputs: ["console"],
584
+ levelOptions: {
585
+ level: "info",
586
+ levels: {
587
+ error: 0,
588
+ warn: 1,
589
+ info: 2,
590
+ debug: 3,
591
+ verbose: 4
592
+ },
593
+ colors: {
594
+ error: "red",
595
+ warn: "yellow",
596
+ info: "green",
597
+ debug: "blue",
598
+ verbose: "cyan"
599
+ }
600
+ },
601
+ ...loggerConfig
602
+ };
603
+ _LogixiaLoggerModule.loggerConfig = defaultConfig;
604
+ const service = new LogixiaLoggerService(defaultConfig);
605
+ _LogixiaLoggerModule._setGlobalLogger(service);
606
+ return service;
607
+ },
608
+ inject: [LOGIXIA_LOGGER_CONFIG]
609
+ },
610
+ {
611
+ provide: KafkaTraceInterceptor,
612
+ useFactory: (traceConfig) => new KafkaTraceInterceptor(traceConfig),
613
+ inject: [LOGIXIA_TRACE_CONFIG]
614
+ },
615
+ {
616
+ provide: WebSocketTraceInterceptor,
617
+ useFactory: (traceConfig) => new WebSocketTraceInterceptor(traceConfig),
618
+ inject: [LOGIXIA_TRACE_CONFIG]
619
+ }
620
+ ],
621
+ exports: [
622
+ LogixiaLoggerService,
623
+ LOGIXIA_LOGGER_CONFIG,
624
+ KafkaTraceInterceptor,
625
+ WebSocketTraceInterceptor
626
+ ],
627
+ global: true
628
+ };
629
+ }
630
+ /**
631
+ * Create feature-specific logger instances
632
+ */
633
+ static forFeature(context) {
634
+ const providerToken = `${LOGIXIA_LOGGER_PREFIX}${context.toUpperCase()}`;
635
+ return {
636
+ module: _LogixiaLoggerModule,
637
+ providers: [{
638
+ provide: providerToken,
639
+ useFactory: (baseLogger) => {
640
+ return baseLogger.child(context);
641
+ },
642
+ inject: [LogixiaLoggerService]
643
+ }],
644
+ exports: [providerToken]
645
+ };
646
+ }
647
+ static createAsyncProviders(options) {
648
+ if (options.useExisting || options.useFactory) return [this.createAsyncOptionsProvider(options)];
649
+ return [this.createAsyncOptionsProvider(options), {
650
+ provide: options.useClass,
651
+ useClass: options.useClass
652
+ }];
653
+ }
654
+ static createAsyncOptionsProvider(options) {
655
+ if (options.useFactory) return {
656
+ provide: LOGIXIA_LOGGER_CONFIG,
657
+ useFactory: options.useFactory,
658
+ inject: options.inject || []
659
+ };
660
+ return {
661
+ provide: LOGIXIA_LOGGER_CONFIG,
662
+ useFactory: async (optionsFactory) => await optionsFactory.createLogixiaOptions(),
663
+ inject: [options.useExisting || options.useClass]
664
+ };
665
+ }
666
+ static #_ = () => (this.loggerConfig = {}, this._globalLogger = null);
667
+ };
668
+ LogixiaLoggerModule = _LogixiaLoggerModule = __decorate([(0, _nestjs_common.Module)({})], LogixiaLoggerModule);
669
+ // src/core/nestjs-extras.ts
670
+ /**
671
+ * Inject the Logixia logger registered in the current NestJS DI container.
672
+ *
673
+ * Equivalent to `@Inject(LOGIXIA_LOGGER_TOKEN)` but without needing to import
674
+ * the internal token constant yourself.
675
+ *
676
+ * @example
677
+ * ```ts
678
+ * constructor(@InjectLogger() private readonly logger: LogixiaLoggerService) {}
679
+ * ```
680
+ */
681
+ const InjectLogger = () => (0, _nestjs_common.Inject)(`${LOGIXIA_LOGGER_PREFIX}SERVICE`);
682
+ /**
683
+ * Method decorator that auto-logs entry, exit, duration, and errors.
684
+ *
685
+ * Preserves the original method's sync/async contract: a synchronous method
686
+ * stays synchronous (returns its value directly, with logs emitted
687
+ * fire-and-forget), and an async method is awaited so exit/error logs reflect
688
+ * the resolved result. Attaches to the logger found on the class instance via a
689
+ * `logger` property (the conventional NestJS name).
690
+ *
691
+ * @example
692
+ * ```ts
693
+ * @LogMethod({ level: 'info', logArgs: true })
694
+ * async processPayment(orderId: string): Promise<void> { … }
695
+ * ```
696
+ */
697
+ function LogMethod(options = {}) {
698
+ const { level = "debug", logArgs = true, logResult = false, logErrors = true } = options;
699
+ return function(target, propertyKey, descriptor) {
700
+ var _constructor;
701
+ const originalMethod = descriptor.value;
702
+ if (typeof originalMethod !== "function") return descriptor;
703
+ const methodName = String(propertyKey);
704
+ const className = ((_constructor = target.constructor) === null || _constructor === void 0 ? void 0 : _constructor.name) ?? "Unknown";
705
+ const label = options.label ?? `${className}.${methodName}`;
706
+ let _warnedNoLogger = false;
707
+ const reportLogFailure = (phase, err) => {
708
+ require_internal_log.internalError(`@LogMethod(${label}) ${phase} log failed: ${String(err)}`);
709
+ };
710
+ const emit = (logger, phase, message, data) => {
711
+ const logFnRaw = logger[level];
712
+ const p = (typeof logFnRaw === "function" ? logFnRaw : logger.debug).bind(logger)(message, data);
713
+ if (p && typeof p.catch === "function") p.catch((e) => reportLogFailure(phase, e));
714
+ };
715
+ const emitError = (logger, error, start) => {
716
+ const err = error instanceof Error ? error : new Error(String(error));
717
+ const errLog = logger.error(err, {
718
+ method: label,
719
+ durationMs: Date.now() - start
720
+ });
721
+ if (errLog && typeof errLog.catch === "function") errLog.catch((e) => reportLogFailure("error", e));
722
+ };
723
+ descriptor.value = function(...args) {
724
+ const logger = this.logger ?? LogixiaLoggerModule._globalLogger ?? void 0;
725
+ if (!logger && !_warnedNoLogger) {
726
+ _warnedNoLogger = true;
727
+ require_internal_log.internalWarn(`@LogMethod on ${label}: no logger available. Either inject LogixiaLoggerService as this.logger or ensure LogixiaLoggerModule is initialised.`);
728
+ }
729
+ const start = Date.now();
730
+ const entry = { method: label };
731
+ if (logArgs && args.length > 0) entry["args"] = args;
732
+ if (logger) emit(logger, "entry", `→ ${label}`, entry);
733
+ const buildExit = (result) => {
734
+ const exit = {
735
+ method: label,
736
+ durationMs: Date.now() - start
737
+ };
738
+ if (logResult) exit["result"] = result;
739
+ return exit;
740
+ };
741
+ let result;
742
+ try {
743
+ result = originalMethod.apply(this, args);
744
+ } catch (error) {
745
+ if (logger && logErrors) emitError(logger, error, start);
746
+ throw error;
747
+ }
748
+ if (result && typeof result.then === "function") return result.then((resolved) => {
749
+ if (logger) emit(logger, "exit", `← ${label}`, buildExit(resolved));
750
+ return resolved;
751
+ }, (error) => {
752
+ if (logger && logErrors) emitError(logger, error, start);
753
+ throw error;
754
+ });
755
+ if (logger) emit(logger, "exit", `← ${label}`, buildExit(result));
756
+ return result;
757
+ };
758
+ return descriptor;
759
+ };
760
+ }
761
+ /** Injection token for {@link LogixiaExceptionFilterOptions}. */
762
+ const LOGIXIA_EXCEPTION_FILTER_OPTIONS = "LOGIXIA_EXCEPTION_FILTER_OPTIONS";
763
+ let LogixiaExceptionFilter = class LogixiaExceptionFilter {
764
+ constructor(logger, loggerConfig, options) {
765
+ this._options = options ?? {};
766
+ this._logger = logger ?? LogixiaLoggerModule._globalLogger ?? void 0;
767
+ this._traceConfig = typeof (loggerConfig === null || loggerConfig === void 0 ? void 0 : loggerConfig.traceId) === "object" ? loggerConfig.traceId : void 0;
768
+ }
769
+ catch(exception, host) {
770
+ var _request$headers;
771
+ const ctx = host.switchToHttp();
772
+ const request = ctx.getRequest();
773
+ const response = ctx.getResponse();
774
+ const traceId = require_request_trace.TraceContext.instance.getCurrentTraceId() ?? require_request_trace.sanitizeIncomingId((_request$headers = request.headers) === null || _request$headers === void 0 ? void 0 : _request$headers["x-trace-id"]) ?? require_request_trace.sanitizeIncomingId(request.id) ?? void 0;
775
+ const { response: errorResponse, httpStatus } = require_builder.ErrorResponseBuilder.build({
776
+ exception,
777
+ traceId,
778
+ path: request.url ?? "/",
779
+ startTime: request.startTime,
780
+ exposeDebug: this._options.exposeDebug === true,
781
+ exposeCause: this._options.exposeCause === true
782
+ });
783
+ if (this._logger) {
784
+ const requestMeta = {
785
+ method: request.method ?? "",
786
+ url: request.url ?? "",
787
+ status: httpStatus,
788
+ ...errorResponse.meta.trace_id !== void 0 ? { trace_id: errorResponse.meta.trace_id } : {}
789
+ };
790
+ const onLogFailure = (err) => {
791
+ require_internal_log.internalError(`ExceptionFilter failed to write log entry: ${String(err)}`);
792
+ };
793
+ let logPromise;
794
+ if (httpStatus >= 500) {
795
+ const err = exception instanceof Error ? exception : new Error(String(exception));
796
+ logPromise = this._logger.error(err, requestMeta);
797
+ } else if (require_builder.isLogixiaException(exception)) logPromise = this._logger.warn(`[${errorResponse.error.code}] ${errorResponse.error.message}`, requestMeta);
798
+ else logPromise = this._logger.warn(`[${httpStatus}] ${errorResponse.error.message}`, requestMeta);
799
+ if (logPromise && typeof logPromise.catch === "function") logPromise.catch(onLogFailure);
800
+ }
801
+ if (errorResponse.meta.trace_id) {
802
+ const traceHeader = resolveResponseHeader(this._traceConfig);
803
+ if (traceHeader) try {
804
+ response.setHeader(traceHeader, errorResponse.meta.trace_id);
805
+ } catch {}
806
+ }
807
+ if (httpStatus === 429) try {
808
+ response.setHeader("Retry-After", "60");
809
+ } catch {}
810
+ response.status(httpStatus).json(errorResponse);
811
+ }
812
+ };
813
+ LogixiaExceptionFilter = __decorate([
814
+ (0, _nestjs_common.Catch)(),
815
+ __decorateParam(0, (0, _nestjs_common.Optional)()),
816
+ __decorateParam(0, (0, _nestjs_common.Inject)(`${LOGIXIA_LOGGER_PREFIX}SERVICE`)),
817
+ __decorateParam(1, (0, _nestjs_common.Optional)()),
818
+ __decorateParam(1, (0, _nestjs_common.Inject)(LOGIXIA_LOGGER_CONFIG)),
819
+ __decorateParam(2, (0, _nestjs_common.Optional)()),
820
+ __decorateParam(2, (0, _nestjs_common.Inject)(LOGIXIA_EXCEPTION_FILTER_OPTIONS)),
821
+ __decorateMetadata("design:paramtypes", [
822
+ Object,
823
+ typeof Partial === "undefined" ? Object : Partial,
824
+ Object
825
+ ])
826
+ ], LogixiaExceptionFilter);
827
+ // src/nest.ts
828
+ /**
829
+ * logixia/nest — NestJS integration
830
+ *
831
+ * @example
832
+ * import { LogixiaLoggerModule, LogixiaLoggerService } from 'logixia/nest';
833
+ *
834
+ * @Module({
835
+ * imports: [LogixiaLoggerModule.forRoot({ level: 'info' })],
836
+ * })
837
+ * export class AppModule {}
838
+ */
839
+ /**
840
+ * Create a new Logixia logger service for NestJS
841
+ * @param config - Logger configuration
842
+ * @returns LogixiaLoggerService instance
843
+ */
844
+ function createLoggerService(config) {
845
+ return new LogixiaLoggerService({
846
+ ...require_builder.DEFAULT_CONFIG,
847
+ ...config
848
+ });
849
+ }
850
+ exports.InjectLogger = InjectLogger;
851
+ Object.defineProperty(exports, "KafkaTraceInterceptor", {
852
+ enumerable: true,
853
+ get: function() {
854
+ return KafkaTraceInterceptor;
855
+ }
856
+ });
857
+ exports.LOGIXIA_EXCEPTION_FILTER_OPTIONS = LOGIXIA_EXCEPTION_FILTER_OPTIONS;
858
+ exports.LOGIXIA_LOGGER_CONFIG = LOGIXIA_LOGGER_CONFIG;
859
+ exports.LOGIXIA_LOGGER_PREFIX = LOGIXIA_LOGGER_PREFIX;
860
+ exports.LOGIXIA_TRACE_CONFIG = LOGIXIA_TRACE_CONFIG;
861
+ exports.LogMethod = LogMethod;
862
+ Object.defineProperty(exports, "LogixiaExceptionFilter", {
863
+ enumerable: true,
864
+ get: function() {
865
+ return LogixiaExceptionFilter;
866
+ }
15
867
  });
16
- exports.LOGIXIA_EXCEPTION_FILTER_OPTIONS = require_nestjs_extras.LOGIXIA_EXCEPTION_FILTER_OPTIONS;
17
- exports.LOGIXIA_LOGGER_CONFIG = require_nestjs_extras.LOGIXIA_LOGGER_CONFIG;
18
- exports.LOGIXIA_LOGGER_PREFIX = require_nestjs_extras.LOGIXIA_LOGGER_PREFIX;
19
- Object.defineProperty(exports, 'LogixiaExceptionFilter', {
20
- enumerable: true,
21
- get: function () {
22
- return require_nestjs_extras.LogixiaExceptionFilter;
23
- }
868
+ Object.defineProperty(exports, "LogixiaLoggerModule", {
869
+ enumerable: true,
870
+ get: function() {
871
+ return LogixiaLoggerModule;
872
+ }
24
873
  });
25
- Object.defineProperty(exports, 'LogixiaLoggerModule', {
26
- enumerable: true,
27
- get: function () {
28
- return require_nestjs_extras.LogixiaLoggerModule;
29
- }
874
+ Object.defineProperty(exports, "LogixiaLoggerService", {
875
+ enumerable: true,
876
+ get: function() {
877
+ return LogixiaLoggerService;
878
+ }
30
879
  });
31
- Object.defineProperty(exports, 'LogixiaLoggerService', {
32
- enumerable: true,
33
- get: function () {
34
- return require_nestjs_extras.LogixiaLoggerService;
35
- }
880
+ Object.defineProperty(exports, "TraceMiddleware", {
881
+ enumerable: true,
882
+ get: function() {
883
+ return TraceMiddleware;
884
+ }
36
885
  });
37
- Object.defineProperty(exports, 'TraceMiddleware', {
38
- enumerable: true,
39
- get: function () {
40
- return require_nestjs_extras.TraceMiddleware;
41
- }
886
+ Object.defineProperty(exports, "WebSocketTraceInterceptor", {
887
+ enumerable: true,
888
+ get: function() {
889
+ return WebSocketTraceInterceptor;
890
+ }
42
891
  });
43
- Object.defineProperty(exports, 'WebSocketTraceInterceptor', {
44
- enumerable: true,
45
- get: function () {
46
- return require_nestjs_extras.WebSocketTraceInterceptor;
47
- }
48
- });
892
+ exports.createLoggerService = createLoggerService;
893
+
894
+ //# sourceMappingURL=nest.js.map