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.
- package/README.md +172 -2597
- package/dist/async-context-2mbUKhcl.mjs +132 -0
- package/dist/async-context-2mbUKhcl.mjs.map +1 -0
- package/dist/async-context-DUFMDYAr.js +148 -0
- package/dist/async-context-DUFMDYAr.js.map +1 -0
- package/dist/{azure-monitor.transport-CrvfHd9C.js → azure-monitor.transport-Bu4S2I2q.js} +32 -20
- package/dist/azure-monitor.transport-Bu4S2I2q.js.map +1 -0
- package/dist/{azure-monitor.transport-Cn_3Usvu.d.ts → azure-monitor.transport-Bvf7Xegt.d.ts} +3 -6
- package/dist/azure-monitor.transport-Bvf7Xegt.d.ts.map +1 -0
- package/dist/{azure-monitor.transport-CHnjVRF-.mjs → azure-monitor.transport-C1RWAumT.mjs} +27 -15
- package/dist/azure-monitor.transport-C1RWAumT.mjs.map +1 -0
- package/dist/{azure-monitor.transport-D7Da4RAb.d.mts → azure-monitor.transport-CbSHOnNX.d.mts} +3 -6
- package/dist/azure-monitor.transport-CbSHOnNX.d.mts.map +1 -0
- package/dist/azure.d.mts +1 -2
- package/dist/azure.d.ts +1 -2
- package/dist/azure.js +3 -6
- package/dist/azure.mjs +1 -6
- package/dist/{batch-buffer-PGvSgbmd.mjs → batch-buffer-BvXLDPlV.mjs} +21 -7
- package/dist/batch-buffer-BvXLDPlV.mjs.map +1 -0
- package/dist/{batch-buffer-BY-mRWIK.js → batch-buffer-C7Am4Mw-.js} +53 -40
- package/dist/batch-buffer-C7Am4Mw-.js.map +1 -0
- package/dist/browser.d.mts +47 -27
- package/dist/browser.d.mts.map +1 -1
- package/dist/browser.d.ts +47 -27
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +464 -62
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +465 -65
- package/dist/browser.mjs.map +1 -1
- package/dist/{builder-0gEzRopq.mjs → builder-DhNhvOkt.mjs} +307 -246
- package/dist/builder-DhNhvOkt.mjs.map +1 -0
- package/dist/{builder-D44QktIo.js → builder-yFvJrz7o.js} +435 -399
- package/dist/builder-yFvJrz7o.js.map +1 -0
- package/dist/cli/index.js +216 -125
- package/dist/cloudwatch.d.mts +1 -2
- package/dist/cloudwatch.d.ts +1 -2
- package/dist/cloudwatch.js +3 -7
- package/dist/cloudwatch.mjs +1 -7
- package/dist/{cloudwatch.transport-DsEq633o.d.ts → cloudwatch.transport-CQyT6U91.d.ts} +2 -6
- package/dist/cloudwatch.transport-CQyT6U91.d.ts.map +1 -0
- package/dist/{cloudwatch.transport-BO1ahxw-.js → cloudwatch.transport-Ch1Uae-0.js} +61 -36
- package/dist/cloudwatch.transport-Ch1Uae-0.js.map +1 -0
- package/dist/{cloudwatch.transport-UlyZFWMn.d.mts → cloudwatch.transport-CjVrI6S4.d.mts} +2 -6
- package/dist/cloudwatch.transport-CjVrI6S4.d.mts.map +1 -0
- package/dist/{cloudwatch.transport-DZ6ies7g.mjs → cloudwatch.transport-DZqF2xZO.mjs} +54 -28
- package/dist/cloudwatch.transport-DZqF2xZO.mjs.map +1 -0
- package/dist/{coerce.utils-Cu6IUTgX.mjs → coerce.utils-B_rEudCn.mjs} +3 -4
- package/dist/{coerce.utils-Cu6IUTgX.mjs.map → coerce.utils-B_rEudCn.mjs.map} +1 -1
- package/dist/{coerce.utils-B-LilukN.js → coerce.utils-C1C5sIX0.js} +8 -10
- package/dist/{coerce.utils-B-LilukN.js.map → coerce.utils-C1C5sIX0.js.map} +1 -1
- package/dist/correlation.d.mts +15 -69
- package/dist/correlation.d.mts.map +1 -1
- package/dist/correlation.d.ts +15 -69
- package/dist/correlation.d.ts.map +1 -1
- package/dist/correlation.js +69 -20
- package/dist/correlation.js.map +1 -1
- package/dist/correlation.mjs +67 -17
- package/dist/correlation.mjs.map +1 -1
- package/dist/{entry-fields-BvOLFlJ4.js → entry-fields-BSLkzw18.js} +16 -13
- package/dist/entry-fields-BSLkzw18.js.map +1 -0
- package/dist/{entry-fields-BJkuPnIg.mjs → entry-fields-J1OBi24o.mjs} +11 -7
- package/dist/entry-fields-J1OBi24o.mjs.map +1 -0
- package/dist/gcp.d.mts +1 -2
- package/dist/gcp.d.ts +1 -2
- package/dist/gcp.js +3 -7
- package/dist/gcp.mjs +1 -7
- package/dist/{gcp.transport-B7oc97sG.d.ts → gcp.transport-BCIvdFV-.d.ts} +5 -8
- package/dist/gcp.transport-BCIvdFV-.d.ts.map +1 -0
- package/dist/{gcp.transport-GrJurKo8.d.mts → gcp.transport-D9SdLPwP.d.mts} +5 -8
- package/dist/gcp.transport-D9SdLPwP.d.mts.map +1 -0
- package/dist/{gcp.transport-DBX5TPIy.mjs → gcp.transport-DVCmnA3b.mjs} +59 -16
- package/dist/gcp.transport-DVCmnA3b.mjs.map +1 -0
- package/dist/{gcp.transport-CHV8MGgz.js → gcp.transport-Dy2Lf8FI.js} +64 -22
- package/dist/gcp.transport-Dy2Lf8FI.js.map +1 -0
- package/dist/http-shapes-BnBkJcid.d.mts +32 -0
- package/dist/http-shapes-BnBkJcid.d.mts.map +1 -0
- package/dist/http-shapes-BnBkJcid.d.ts +32 -0
- package/dist/http-shapes-BnBkJcid.d.ts.map +1 -0
- package/dist/{index-3mw5gaCw.d.mts → index-BSTtFcQ6.d.mts} +142 -13
- package/dist/index-BSTtFcQ6.d.mts.map +1 -0
- package/dist/{index-DhIoploR.d.ts → index-CFDGkI8n.d.ts} +142 -13
- package/dist/index-CFDGkI8n.d.ts.map +1 -0
- package/dist/index.d.mts +114 -217
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +113 -216
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +182 -279
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +160 -256
- package/dist/index.mjs.map +1 -1
- package/dist/internal-log-Bg4V1cPg.mjs +170 -0
- package/dist/internal-log-Bg4V1cPg.mjs.map +1 -0
- package/dist/internal-log-By4Govmu.js +223 -0
- package/dist/internal-log-By4Govmu.js.map +1 -0
- package/dist/{logitron-logger-UVeN-mQm.d.ts → logitron-logger-D22Yb61K.d.mts} +121 -100
- package/dist/logitron-logger-D22Yb61K.d.mts.map +1 -0
- package/dist/{logitron-logger-BFDSO8Io.d.mts → logitron-logger-D_MYYrQt.d.ts} +121 -100
- package/dist/logitron-logger-D_MYYrQt.d.ts.map +1 -0
- package/dist/middleware.d.mts +13 -28
- package/dist/middleware.d.mts.map +1 -1
- package/dist/middleware.d.ts +13 -28
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +20 -81
- package/dist/middleware.js.map +1 -1
- package/dist/middleware.mjs +17 -79
- package/dist/middleware.mjs.map +1 -1
- package/dist/nest.d.mts +37 -48
- package/dist/nest.d.mts.map +1 -1
- package/dist/nest.d.ts +37 -48
- package/dist/nest.d.ts.map +1 -1
- package/dist/nest.js +124 -135
- package/dist/nest.js.map +1 -1
- package/dist/nest.mjs +69 -78
- package/dist/nest.mjs.map +1 -1
- package/dist/{transport.manager-BiuCAJd2.mjs → otel-Dt5riXuE.mjs} +275 -117
- package/dist/otel-Dt5riXuE.mjs.map +1 -0
- package/dist/{transport.manager-CXbKKdVE.js → otel-DyeH6DVR.js} +373 -178
- package/dist/otel-DyeH6DVR.js.map +1 -0
- package/dist/own-property-BWkibepN.js +40 -0
- package/dist/own-property-BWkibepN.js.map +1 -0
- package/dist/own-property-CjFw9qwZ.mjs +29 -0
- package/dist/own-property-CjFw9qwZ.mjs.map +1 -0
- package/dist/{trace.utils-CvXgaiQT.mjs → request-trace-BgNykH9M.mjs} +40 -9
- package/dist/request-trace-BgNykH9M.mjs.map +1 -0
- package/dist/{trace.utils-DpBOLDtq.js → request-trace-ByujsUZk.js} +117 -77
- package/dist/request-trace-ByujsUZk.js.map +1 -0
- package/dist/rolldown-runtime-D3PmRqjj.mjs +4 -0
- package/dist/{safe-stringify-DJ66tW5I.mjs → safe-stringify-B5p5ktFe.mjs} +39 -15
- package/dist/safe-stringify-B5p5ktFe.mjs.map +1 -0
- package/dist/{safe-stringify-DWo3aZp_.js → safe-stringify-J3sh-7YM.js} +59 -36
- package/dist/safe-stringify-J3sh-7YM.js.map +1 -0
- package/dist/{search-C4V0OMEn.js → search-CRjhHxe9.js} +319 -92
- package/dist/search-CRjhHxe9.js.map +1 -0
- package/dist/{search-CNh9uVwR.d.ts → search-DA3ft3X5.d.mts} +5 -22
- package/dist/search-DA3ft3X5.d.mts.map +1 -0
- package/dist/{search-BFbu_oVn.mjs → search-DAXKE-P9.mjs} +289 -62
- package/dist/search-DAXKE-P9.mjs.map +1 -0
- package/dist/{search-DXANsQ2n.d.mts → search-DEl3Pe47.d.ts} +5 -22
- package/dist/search-DEl3Pe47.d.ts.map +1 -0
- package/dist/search.d.mts +2 -4
- package/dist/search.d.ts +2 -4
- package/dist/search.js +3 -4
- package/dist/search.mjs +1 -4
- package/dist/secret-config-CmK2wVkr.js +272 -0
- package/dist/secret-config-CmK2wVkr.js.map +1 -0
- package/dist/secret-config-Dhb6pqTU.mjs +210 -0
- package/dist/secret-config-Dhb6pqTU.mjs.map +1 -0
- package/dist/{slack.transport-CXjQYOes.d.ts → slack.transport-BDyENuR0.d.mts} +56 -9
- package/dist/slack.transport-BDyENuR0.d.mts.map +1 -0
- package/dist/{slack.transport-Bzw7sucI.mjs → slack.transport-BTEwsREY.mjs} +263 -31
- package/dist/slack.transport-BTEwsREY.mjs.map +1 -0
- package/dist/{slack.transport-BZzoXDPn.d.mts → slack.transport-C6E0l4kw.d.ts} +56 -9
- package/dist/slack.transport-C6E0l4kw.d.ts.map +1 -0
- package/dist/{slack.transport-BfJRouB2.js → slack.transport-UbYvOdKx.js} +286 -42
- package/dist/slack.transport-UbYvOdKx.js.map +1 -0
- package/dist/testing.d.mts +13 -11
- package/dist/testing.d.mts.map +1 -1
- package/dist/testing.d.ts +13 -11
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +41 -7
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +40 -6
- package/dist/testing.mjs.map +1 -1
- package/dist/{transport.types-CGoHpWQR.d.ts → transport.types-CzJq4IrF.d.mts} +14 -5
- package/dist/transport.types-CzJq4IrF.d.mts.map +1 -0
- package/dist/{transport.types-BMnurPcc.d.mts → transport.types-CzJq4IrF.d.ts} +14 -5
- package/dist/transport.types-CzJq4IrF.d.ts.map +1 -0
- package/dist/transports.d.mts +39 -41
- package/dist/transports.d.mts.map +1 -1
- package/dist/transports.d.ts +39 -41
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +19 -22
- package/dist/transports.mjs +7 -13
- package/dist/worker-entry.js +438 -107
- package/dist/worker.d.mts +1 -2
- package/dist/worker.d.ts +1 -2
- package/dist/worker.js +3 -4
- package/dist/worker.mjs +1 -4
- package/dist/{worker.transport-JvGPog3C.d.mts → worker.transport-B9mCQSM1.d.ts} +7 -6
- package/dist/worker.transport-B9mCQSM1.d.ts.map +1 -0
- package/dist/{worker.transport-CdzSZJmw.d.ts → worker.transport-Bl8lFRck.d.mts} +7 -6
- package/dist/worker.transport-Bl8lFRck.d.mts.map +1 -0
- package/dist/{worker.transport-lPxO2MVL.mjs → worker.transport-BmmOKb1-.mjs} +43 -10
- package/dist/worker.transport-BmmOKb1-.mjs.map +1 -0
- package/dist/{worker.transport-BdPxu3PN.js → worker.transport-DxxbqQCG.js} +48 -15
- package/dist/worker.transport-DxxbqQCG.js.map +1 -0
- package/package.json +51 -75
- package/dist/async-context-BzJrbfQs.mjs +0 -72
- package/dist/async-context-BzJrbfQs.mjs.map +0 -1
- package/dist/async-context-DyQQYq3I.js +0 -92
- package/dist/async-context-DyQQYq3I.js.map +0 -1
- package/dist/azure-monitor.transport-CHnjVRF-.mjs.map +0 -1
- package/dist/azure-monitor.transport-Cn_3Usvu.d.ts.map +0 -1
- package/dist/azure-monitor.transport-CrvfHd9C.js.map +0 -1
- package/dist/azure-monitor.transport-D7Da4RAb.d.mts.map +0 -1
- package/dist/batch-buffer-BY-mRWIK.js.map +0 -1
- package/dist/batch-buffer-PGvSgbmd.mjs.map +0 -1
- package/dist/builder-0gEzRopq.mjs.map +0 -1
- package/dist/builder-D44QktIo.js.map +0 -1
- package/dist/chunk-DLSkYcPk.mjs +0 -7
- package/dist/chunk-nOFOJqeH.js +0 -30
- package/dist/cloudwatch.transport-BO1ahxw-.js.map +0 -1
- package/dist/cloudwatch.transport-DZ6ies7g.mjs.map +0 -1
- package/dist/cloudwatch.transport-DsEq633o.d.ts.map +0 -1
- package/dist/cloudwatch.transport-UlyZFWMn.d.mts.map +0 -1
- package/dist/entry-fields-BJkuPnIg.mjs.map +0 -1
- package/dist/entry-fields-BvOLFlJ4.js.map +0 -1
- package/dist/gcp.transport-B7oc97sG.d.ts.map +0 -1
- package/dist/gcp.transport-CHV8MGgz.js.map +0 -1
- package/dist/gcp.transport-DBX5TPIy.mjs.map +0 -1
- package/dist/gcp.transport-GrJurKo8.d.mts.map +0 -1
- package/dist/index-3mw5gaCw.d.mts.map +0 -1
- package/dist/index-DhIoploR.d.ts.map +0 -1
- package/dist/internal-log-BUJYMZbE.js +0 -70
- package/dist/internal-log-BUJYMZbE.js.map +0 -1
- package/dist/internal-log-Cm8SOWSV.mjs +0 -52
- package/dist/internal-log-Cm8SOWSV.mjs.map +0 -1
- package/dist/logitron-logger-BFDSO8Io.d.mts.map +0 -1
- package/dist/logitron-logger-UVeN-mQm.d.ts.map +0 -1
- package/dist/safe-stringify-DJ66tW5I.mjs.map +0 -1
- package/dist/safe-stringify-DWo3aZp_.js.map +0 -1
- package/dist/search-BFbu_oVn.mjs.map +0 -1
- package/dist/search-C4V0OMEn.js.map +0 -1
- package/dist/search-CNh9uVwR.d.ts.map +0 -1
- package/dist/search-DXANsQ2n.d.mts.map +0 -1
- package/dist/slack.transport-BZzoXDPn.d.mts.map +0 -1
- package/dist/slack.transport-BfJRouB2.js.map +0 -1
- package/dist/slack.transport-Bzw7sucI.mjs.map +0 -1
- package/dist/slack.transport-CXjQYOes.d.ts.map +0 -1
- package/dist/trace.utils-CvXgaiQT.mjs.map +0 -1
- package/dist/trace.utils-DpBOLDtq.js.map +0 -1
- package/dist/transport.manager-BiuCAJd2.mjs.map +0 -1
- package/dist/transport.manager-CXbKKdVE.js.map +0 -1
- package/dist/transport.types-BMnurPcc.d.mts.map +0 -1
- package/dist/transport.types-CGoHpWQR.d.ts.map +0 -1
- package/dist/worker.transport-BdPxu3PN.js.map +0 -1
- package/dist/worker.transport-CdzSZJmw.d.ts.map +0 -1
- package/dist/worker.transport-JvGPog3C.d.mts.map +0 -1
- package/dist/worker.transport-lPxO2MVL.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
require(
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const require_search = require('./search-C4V0OMEn.js');
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_builder = require("./builder-yFvJrz7o.js");
|
|
3
|
+
const require_own_property = require("./own-property-BWkibepN.js");
|
|
4
|
+
const require_request_trace = require("./request-trace-ByujsUZk.js");
|
|
5
|
+
const require_async_context = require("./async-context-DUFMDYAr.js");
|
|
6
|
+
const require_internal_log = require("./internal-log-By4Govmu.js");
|
|
7
|
+
const require_coerce_utils = require("./coerce.utils-C1C5sIX0.js");
|
|
8
|
+
const require_safe_stringify = require("./safe-stringify-J3sh-7YM.js");
|
|
9
|
+
const require_otel = require("./otel-DyeH6DVR.js");
|
|
10
|
+
const require_slack_transport = require("./slack.transport-UbYvOdKx.js");
|
|
11
|
+
const require_search = require("./search-CRjhHxe9.js");
|
|
13
12
|
let node_async_hooks = require("node:async_hooks");
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
//#region src/formatters/json.formatter.ts
|
|
13
|
+
// src/formatters/json.formatter.ts
|
|
17
14
|
/**
|
|
18
15
|
* Build a JSON.stringify replacer that replaces circular references with the
|
|
19
16
|
* string '[Circular]' instead of throwing. A fresh replacer must be created per
|
|
@@ -61,26 +58,21 @@ var JsonFormatter = class {
|
|
|
61
58
|
}
|
|
62
59
|
serializePayload(payload) {
|
|
63
60
|
const serialized = {};
|
|
64
|
-
for (const [key, value] of Object.entries(payload)) {
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
} catch {
|
|
74
|
-
serialized[key] = "[Unserializable]";
|
|
75
|
-
}
|
|
61
|
+
for (const [key, value] of Object.entries(payload)) try {
|
|
62
|
+
if (value instanceof Error) require_own_property.assignOwn(serialized, key, require_builder.serializeError(value));
|
|
63
|
+
else if (value instanceof Date) require_own_property.assignOwn(serialized, key, value.toISOString());
|
|
64
|
+
else if (typeof value === "function") require_own_property.assignOwn(serialized, key, "[Function]");
|
|
65
|
+
else if (typeof value === "symbol") require_own_property.assignOwn(serialized, key, value.toString());
|
|
66
|
+
else if (value === void 0) require_own_property.assignOwn(serialized, key, null);
|
|
67
|
+
else require_own_property.assignOwn(serialized, key, value);
|
|
68
|
+
} catch {
|
|
69
|
+
require_own_property.assignOwn(serialized, key, "[Unserializable]");
|
|
76
70
|
}
|
|
77
71
|
return serialized;
|
|
78
72
|
}
|
|
79
73
|
};
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
//#region src/formatters/text.formatter.ts
|
|
83
|
-
const stripControls = (value) => require_transport_manager.stripControlChars(require_coerce_utils.safeToString(value));
|
|
74
|
+
// src/formatters/text.formatter.ts
|
|
75
|
+
const stripControls = (value) => require_otel.stripControlChars(require_coerce_utils.safeToString(value));
|
|
84
76
|
var TextFormatter = class TextFormatter {
|
|
85
77
|
constructor(options = {}) {
|
|
86
78
|
this.colorize = options.colorize ?? true;
|
|
@@ -141,7 +133,6 @@ var TextFormatter = class TextFormatter {
|
|
|
141
133
|
switch (this.timestampFormat) {
|
|
142
134
|
case "iso": return date.toISOString();
|
|
143
135
|
case "short": return date.toLocaleTimeString();
|
|
144
|
-
case "locale":
|
|
145
136
|
default: return date.toLocaleString();
|
|
146
137
|
}
|
|
147
138
|
}
|
|
@@ -199,9 +190,7 @@ var TextFormatter = class TextFormatter {
|
|
|
199
190
|
});
|
|
200
191
|
}
|
|
201
192
|
};
|
|
202
|
-
|
|
203
|
-
//#endregion
|
|
204
|
-
//#region src/utils/runtime-control.ts
|
|
193
|
+
// src/utils/runtime-control.ts
|
|
205
194
|
const DEFAULT_CYCLE = [
|
|
206
195
|
"error",
|
|
207
196
|
"warn",
|
|
@@ -218,13 +207,14 @@ const DEFAULT_CYCLE = [
|
|
|
218
207
|
* memorizable command (`kill -USR2 <pid>`) is enough to ratchet verbosity up
|
|
219
208
|
* while chasing a bug and back down again — no value to remember.
|
|
220
209
|
*/
|
|
221
|
-
function registerLevelSignal(logger
|
|
210
|
+
function registerLevelSignal(logger, options = {}) {
|
|
222
211
|
const signal = options.signal ?? "SIGUSR2";
|
|
223
212
|
const cycle = options.cycle && options.cycle.length > 0 ? options.cycle : [...DEFAULT_CYCLE];
|
|
224
213
|
const handler = () => {
|
|
225
|
-
const current = logger
|
|
226
|
-
const
|
|
227
|
-
|
|
214
|
+
const current = logger.getLevel();
|
|
215
|
+
const idx = cycle.indexOf(current);
|
|
216
|
+
const next = cycle[(idx + 1) % cycle.length];
|
|
217
|
+
logger.setLevel(next);
|
|
228
218
|
require_internal_log.internalLog(`runtime level changed via ${signal}: ${current} → ${next}`);
|
|
229
219
|
};
|
|
230
220
|
process.on(signal, handler);
|
|
@@ -233,7 +223,7 @@ function registerLevelSignal(logger$1, options = {}) {
|
|
|
233
223
|
};
|
|
234
224
|
}
|
|
235
225
|
/** Maximum accepted request body size for the level control handler. */
|
|
236
|
-
const MAX_BODY_BYTES =
|
|
226
|
+
const MAX_BODY_BYTES = 16384;
|
|
237
227
|
function isJsonContentType(req) {
|
|
238
228
|
var _req$headers;
|
|
239
229
|
const raw = (_req$headers = req.headers) === null || _req$headers === void 0 ? void 0 : _req$headers["content-type"];
|
|
@@ -241,7 +231,7 @@ function isJsonContentType(req) {
|
|
|
241
231
|
if (typeof value !== "string") return false;
|
|
242
232
|
return value.split(";")[0].trim().toLowerCase() === "application/json";
|
|
243
233
|
}
|
|
244
|
-
const VALID_LEVELS = new Set([
|
|
234
|
+
const VALID_LEVELS = /* @__PURE__ */ new Set([
|
|
245
235
|
"error",
|
|
246
236
|
"warn",
|
|
247
237
|
"info",
|
|
@@ -270,13 +260,13 @@ const VALID_LEVELS = new Set([
|
|
|
270
260
|
* which also keeps cross-site form posts out) and a body of at most 16 KB
|
|
271
261
|
* (otherwise 413).
|
|
272
262
|
*/
|
|
273
|
-
function createLevelControlHandler(logger
|
|
263
|
+
function createLevelControlHandler(logger, options = {}) {
|
|
274
264
|
const allowed = options.allowedLevels && options.allowedLevels.length > 0 ? new Set(options.allowedLevels.map((l) => l.toLowerCase())) : VALID_LEVELS;
|
|
275
265
|
const snapshot = () => {
|
|
276
266
|
var _logger$getNamespaceL;
|
|
277
267
|
return {
|
|
278
|
-
level: logger
|
|
279
|
-
namespaceLevels: ((_logger$getNamespaceL = logger
|
|
268
|
+
level: logger.getLevel(),
|
|
269
|
+
namespaceLevels: ((_logger$getNamespaceL = logger.getNamespaceLevels) === null || _logger$getNamespaceL === void 0 ? void 0 : _logger$getNamespaceL.call(logger)) ?? {}
|
|
280
270
|
};
|
|
281
271
|
};
|
|
282
272
|
const send = (res, status, body) => {
|
|
@@ -302,7 +292,7 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
302
292
|
});
|
|
303
293
|
return;
|
|
304
294
|
}
|
|
305
|
-
logger
|
|
295
|
+
logger.setLevel(lvl);
|
|
306
296
|
}
|
|
307
297
|
if (parsed.namespaceLevels !== void 0) {
|
|
308
298
|
if (typeof parsed.namespaceLevels !== "object" || parsed.namespaceLevels === null || Array.isArray(parsed.namespaceLevels)) {
|
|
@@ -314,9 +304,9 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
314
304
|
send(res, 400, { error: `unknown level "${String(lvl)}" for namespace "${pat}"` });
|
|
315
305
|
return;
|
|
316
306
|
}
|
|
317
|
-
if (logger
|
|
307
|
+
if (logger.setNamespaceLevels) {
|
|
318
308
|
const coerced = Object.fromEntries(Object.entries(nl).map(([pat, lvl]) => [pat, String(lvl).toLowerCase()]));
|
|
319
|
-
logger
|
|
309
|
+
logger.setNamespaceLevels(coerced);
|
|
320
310
|
} else require_internal_log.internalWarn("level control: logger does not support setNamespaceLevels — ignored");
|
|
321
311
|
}
|
|
322
312
|
send(res, 200, snapshot());
|
|
@@ -378,9 +368,54 @@ function createLevelControlHandler(logger$1, options = {}) {
|
|
|
378
368
|
send(res, 405, { error: `method ${method} not allowed` });
|
|
379
369
|
};
|
|
380
370
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
371
|
+
// src/utils/typed-logger.ts
|
|
372
|
+
/**
|
|
373
|
+
* logixia — TypeScript typed log fields
|
|
374
|
+
*
|
|
375
|
+
* Solves the type-safety gap: standard `Record<string, unknown>` metadata gives
|
|
376
|
+
* zero IDE autocomplete and lets typos slip silently into production logs.
|
|
377
|
+
*
|
|
378
|
+
* Two complementary utilities:
|
|
379
|
+
*
|
|
380
|
+
* 1. `createTypedLogger<TFields>()` — wraps any IBaseLogger so that the second
|
|
381
|
+
* argument of every log method is constrained to `TFields` (a typed object).
|
|
382
|
+
* Compile-time safety, zero runtime overhead.
|
|
383
|
+
*
|
|
384
|
+
* 2. `defineLogSchema<TFields>(schema)` — declares expected fields with optional
|
|
385
|
+
* validators. In development (NODE_ENV !== 'production') every log call is
|
|
386
|
+
* validated against the schema and a warning is emitted for missing required
|
|
387
|
+
* fields or type mismatches.
|
|
388
|
+
*
|
|
389
|
+
* @example
|
|
390
|
+
* ```ts
|
|
391
|
+
* import { createTypedLogger, defineLogSchema } from 'logixia';
|
|
392
|
+
*
|
|
393
|
+
* interface OrderFields {
|
|
394
|
+
* orderId: string;
|
|
395
|
+
* userId: string;
|
|
396
|
+
* amount?: number;
|
|
397
|
+
* currency?: string;
|
|
398
|
+
* }
|
|
399
|
+
*
|
|
400
|
+
* const schema = defineLogSchema<OrderFields>({
|
|
401
|
+
* orderId: { type: 'string', required: true },
|
|
402
|
+
* userId: { type: 'string', required: true },
|
|
403
|
+
* amount: { type: 'number' },
|
|
404
|
+
* currency: { type: 'string' },
|
|
405
|
+
* });
|
|
406
|
+
*
|
|
407
|
+
* const orderLogger = createTypedLogger<OrderFields>(baseLogger, schema);
|
|
408
|
+
* await orderLogger.info('Order created', { orderId: 'ord_123', userId: 'usr_456', amount: 99.99 });
|
|
409
|
+
* // ^^^^ fully typed autocomplete ^^^^
|
|
410
|
+
* ```
|
|
411
|
+
*/
|
|
412
|
+
function isProduction() {
|
|
413
|
+
try {
|
|
414
|
+
return process.env.NODE_ENV === "production";
|
|
415
|
+
} catch {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
384
419
|
/**
|
|
385
420
|
* Define a typed schema for a category of log entries.
|
|
386
421
|
*
|
|
@@ -391,7 +426,7 @@ function defineLogSchema(fields) {
|
|
|
391
426
|
return {
|
|
392
427
|
fields,
|
|
393
428
|
validate(payload) {
|
|
394
|
-
if (
|
|
429
|
+
if (isProduction()) return [];
|
|
395
430
|
const warnings = [];
|
|
396
431
|
for (const [key, def] of Object.entries(fields)) {
|
|
397
432
|
const value = payload[key];
|
|
@@ -418,7 +453,7 @@ function defineLogSchema(fields) {
|
|
|
418
453
|
* @param logger Any object that implements `IBaseLogger` (e.g. the result of `createLogger()`)
|
|
419
454
|
* @param schema Optional schema for dev-time validation. Created with `defineLogSchema()`.
|
|
420
455
|
*/
|
|
421
|
-
function createTypedLogger(logger
|
|
456
|
+
function createTypedLogger(logger, schema) {
|
|
422
457
|
function withValidation(level, fn, message, data) {
|
|
423
458
|
if (schema && data) {
|
|
424
459
|
const warnings = schema.validate(data);
|
|
@@ -427,25 +462,56 @@ function createTypedLogger(logger$1, schema) {
|
|
|
427
462
|
return fn(message, data);
|
|
428
463
|
}
|
|
429
464
|
return {
|
|
430
|
-
raw: logger
|
|
465
|
+
raw: logger,
|
|
431
466
|
error(messageOrError, data) {
|
|
432
467
|
if (schema && data) {
|
|
433
468
|
const warnings = schema.validate(data);
|
|
434
469
|
const display = messageOrError instanceof Error ? messageOrError.message : messageOrError;
|
|
435
470
|
for (const w of warnings) require_internal_log.internalWarn(`[logixia/schema] ${w} — level=error message="${display}"`);
|
|
436
471
|
}
|
|
437
|
-
return logger
|
|
472
|
+
return logger.error(messageOrError, data);
|
|
438
473
|
},
|
|
439
|
-
warn: (m, d) => withValidation("warn", logger
|
|
440
|
-
info: (m, d) => withValidation("info", logger
|
|
441
|
-
debug: (m, d) => withValidation("debug", logger
|
|
442
|
-
verbose: (m, d) => withValidation("verbose", (logger
|
|
443
|
-
trace: (m, d) => withValidation("trace", (logger
|
|
474
|
+
warn: (m, d) => withValidation("warn", logger.warn.bind(logger), m, d),
|
|
475
|
+
info: (m, d) => withValidation("info", logger.info.bind(logger), m, d),
|
|
476
|
+
debug: (m, d) => withValidation("debug", logger.debug.bind(logger), m, d),
|
|
477
|
+
verbose: (m, d) => withValidation("verbose", (logger.verbose ?? logger.debug).bind(logger), m, d),
|
|
478
|
+
trace: (m, d) => withValidation("trace", (logger.trace ?? logger.debug).bind(logger), m, d)
|
|
444
479
|
};
|
|
445
480
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
481
|
+
// src/wide-events.ts
|
|
482
|
+
/**
|
|
483
|
+
* logixia — Canonical Log Lines / Wide Events.
|
|
484
|
+
*
|
|
485
|
+
* Emit ONE dense, structured event per unit of work (usually a request) instead
|
|
486
|
+
* of scattering details across many narrow log lines. Fields are accumulated as
|
|
487
|
+
* the request flows through middleware and business logic, then the whole event
|
|
488
|
+
* is emitted ONCE — in a `finally`/teardown path so it fires even on errors.
|
|
489
|
+
*
|
|
490
|
+
* This is the "canonical log line" pattern (Stripe) / "wide events" /
|
|
491
|
+
* "Observability 2.0" (Honeycomb): one pre-joined, queryable record per request,
|
|
492
|
+
* so operators never JOIN across log lines during an incident. It composes with
|
|
493
|
+
* logixia's existing trace correlation — when a trace is active, the event
|
|
494
|
+
* carries `traceId`/`spanId`, making it OTel-friendly.
|
|
495
|
+
*
|
|
496
|
+
* @example Manual scope
|
|
497
|
+
* ```ts
|
|
498
|
+
* import { withWideEvent, addEventFields } from 'logixia';
|
|
499
|
+
*
|
|
500
|
+
* await withWideEvent(logger, { route: '/checkout' }, async () => {
|
|
501
|
+
* addEventFields({ userId, planTier }); // from anywhere in the call tree
|
|
502
|
+
* addEventFields({ dbQueries: 4, cacheHit });
|
|
503
|
+
* // ...one wide event is emitted automatically when this callback settles,
|
|
504
|
+
* // even if it throws.
|
|
505
|
+
* });
|
|
506
|
+
* ```
|
|
507
|
+
*
|
|
508
|
+
* @example Express middleware (auto-emit on response finish/close)
|
|
509
|
+
* ```ts
|
|
510
|
+
* import { wideEventMiddleware } from 'logixia';
|
|
511
|
+
* app.use(wideEventMiddleware(logger));
|
|
512
|
+
* app.get('/x', (req, res) => { addEventFields({ handled: 'x' }); res.json({}); });
|
|
513
|
+
* ```
|
|
514
|
+
*/
|
|
449
515
|
const _storage = new node_async_hooks.AsyncLocalStorage();
|
|
450
516
|
/**
|
|
451
517
|
* Merge fields into the wide event for the current async scope. No-op (with no
|
|
@@ -466,7 +532,7 @@ function getEventFields() {
|
|
|
466
532
|
const state = _storage.getStore();
|
|
467
533
|
return state ? { ...state.fields } : void 0;
|
|
468
534
|
}
|
|
469
|
-
function emit(logger
|
|
535
|
+
function emit(logger, state, options, extra) {
|
|
470
536
|
if (state.emitted) return;
|
|
471
537
|
state.emitted = true;
|
|
472
538
|
const level = options.level ?? "info";
|
|
@@ -477,10 +543,10 @@ function emit(logger$1, state, options, extra) {
|
|
|
477
543
|
if (extra) Object.assign(payload, extra);
|
|
478
544
|
payload[durationField] = Date.now() - state.startMs;
|
|
479
545
|
if (includeTrace) {
|
|
480
|
-
const traceId =
|
|
546
|
+
const traceId = require_request_trace.getCurrentTraceId();
|
|
481
547
|
if (traceId !== void 0 && payload["traceId"] === void 0) payload["traceId"] = traceId;
|
|
482
548
|
}
|
|
483
|
-
const p = logger
|
|
549
|
+
const p = logger.logLevel(level, message, payload);
|
|
484
550
|
if (p && typeof p.catch === "function") p.catch(() => {});
|
|
485
551
|
}
|
|
486
552
|
/**
|
|
@@ -489,7 +555,7 @@ function emit(logger$1, state, options, extra) {
|
|
|
489
555
|
* when the callback settles — on success OR error (the canonical "emit in
|
|
490
556
|
* finally" guarantee). On error, `error` + `errorMessage` fields are added.
|
|
491
557
|
*/
|
|
492
|
-
async function withWideEvent(logger
|
|
558
|
+
async function withWideEvent(logger, initialFields, callback, options = {}) {
|
|
493
559
|
const state = {
|
|
494
560
|
fields: { ...initialFields },
|
|
495
561
|
startMs: Date.now(),
|
|
@@ -498,10 +564,10 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
|
|
|
498
564
|
return _storage.run(state, async () => {
|
|
499
565
|
try {
|
|
500
566
|
const result = await callback();
|
|
501
|
-
emit(logger
|
|
567
|
+
emit(logger, state, options);
|
|
502
568
|
return result;
|
|
503
569
|
} catch (error) {
|
|
504
|
-
emit(logger
|
|
570
|
+
emit(logger, state, options, {
|
|
505
571
|
error: true,
|
|
506
572
|
errorMessage: error instanceof Error ? error.message : String(error)
|
|
507
573
|
});
|
|
@@ -516,17 +582,19 @@ async function withWideEvent(logger$1, initialFields, callback, options = {}) {
|
|
|
516
582
|
* more via `addEventFields`. The completion event includes `statusCode` and the
|
|
517
583
|
* request duration.
|
|
518
584
|
*/
|
|
519
|
-
function wideEventMiddleware(logger
|
|
585
|
+
function wideEventMiddleware(logger, options = {}) {
|
|
586
|
+
const redactParams = require_internal_log.buildNameSet(require_internal_log.DEFAULT_REDACT_QUERY_PARAMS, options.redactQueryParams);
|
|
520
587
|
return function logixiaWideEventMiddleware(req, res, next) {
|
|
521
588
|
var _options$skip, _req$socket, _res$once, _res$once2;
|
|
522
589
|
if ((_options$skip = options.skip) === null || _options$skip === void 0 ? void 0 : _options$skip.call(options, req)) {
|
|
523
590
|
next();
|
|
524
591
|
return;
|
|
525
592
|
}
|
|
593
|
+
const rawUrl = req.originalUrl ?? req.url;
|
|
526
594
|
const state = {
|
|
527
595
|
fields: {
|
|
528
596
|
method: req.method,
|
|
529
|
-
url:
|
|
597
|
+
url: rawUrl === void 0 ? void 0 : require_internal_log.redactUrlQuery(rawUrl, redactParams),
|
|
530
598
|
ip: req.ip ?? ((_req$socket = req.socket) === null || _req$socket === void 0 ? void 0 : _req$socket.remoteAddress),
|
|
531
599
|
...options.enrich ? options.enrich(req) : {}
|
|
532
600
|
},
|
|
@@ -534,192 +602,14 @@ function wideEventMiddleware(logger$1, options = {}) {
|
|
|
534
602
|
emitted: false
|
|
535
603
|
};
|
|
536
604
|
const finalize = () => {
|
|
537
|
-
emit(logger
|
|
605
|
+
emit(logger, state, options, { statusCode: res.statusCode ?? 0 });
|
|
538
606
|
};
|
|
539
607
|
(_res$once = res.once) === null || _res$once === void 0 || _res$once.call(res, "finish", finalize);
|
|
540
608
|
(_res$once2 = res.once) === null || _res$once2 === void 0 || _res$once2.call(res, "close", finalize);
|
|
541
609
|
_storage.run(state, () => next());
|
|
542
610
|
};
|
|
543
611
|
}
|
|
544
|
-
|
|
545
|
-
//#endregion
|
|
546
|
-
//#region src/transports/otlp.transport.ts
|
|
547
|
-
const HEX_32 = /^[0-9a-f]{32}$/;
|
|
548
|
-
/**
|
|
549
|
-
* OTLP JSON wants a 32-char lowercase hex trace id. Dashed UUIDs are
|
|
550
|
-
* normalised; anything else (or all zeros) returns undefined.
|
|
551
|
-
*/
|
|
552
|
-
function toOtlpTraceId(id) {
|
|
553
|
-
const hex = id.replace(/-/g, "").toLowerCase();
|
|
554
|
-
return HEX_32.test(hex) && hex !== "0".repeat(32) ? hex : void 0;
|
|
555
|
-
}
|
|
556
|
-
/**
|
|
557
|
-
* Map a logixia level name to an OTel SeverityNumber (1–24) and text.
|
|
558
|
-
* Per the OTel logs SDK spec: TRACE=1, DEBUG=5, INFO=9, WARN=13, ERROR=17,
|
|
559
|
-
* FATAL=21. Custom/unknown levels fall back to INFO (9).
|
|
560
|
-
*/
|
|
561
|
-
function toOtelSeverity(level) {
|
|
562
|
-
switch (level.toLowerCase()) {
|
|
563
|
-
case "trace": return {
|
|
564
|
-
number: 1,
|
|
565
|
-
text: "TRACE"
|
|
566
|
-
};
|
|
567
|
-
case "verbose": return {
|
|
568
|
-
number: 5,
|
|
569
|
-
text: "DEBUG"
|
|
570
|
-
};
|
|
571
|
-
case "debug": return {
|
|
572
|
-
number: 5,
|
|
573
|
-
text: "DEBUG"
|
|
574
|
-
};
|
|
575
|
-
case "info": return {
|
|
576
|
-
number: 9,
|
|
577
|
-
text: "INFO"
|
|
578
|
-
};
|
|
579
|
-
case "warn":
|
|
580
|
-
case "warning": return {
|
|
581
|
-
number: 13,
|
|
582
|
-
text: "WARN"
|
|
583
|
-
};
|
|
584
|
-
case "error": return {
|
|
585
|
-
number: 17,
|
|
586
|
-
text: "ERROR"
|
|
587
|
-
};
|
|
588
|
-
case "fatal": return {
|
|
589
|
-
number: 21,
|
|
590
|
-
text: "FATAL"
|
|
591
|
-
};
|
|
592
|
-
default: return {
|
|
593
|
-
number: 9,
|
|
594
|
-
text: "INFO"
|
|
595
|
-
};
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
/** Coerce a JS value into an OTLP AnyValue. */
|
|
599
|
-
function toAnyValue(value) {
|
|
600
|
-
if (typeof value === "string") return { stringValue: value };
|
|
601
|
-
if (typeof value === "boolean") return { boolValue: value };
|
|
602
|
-
if (typeof value === "number") return Number.isInteger(value) ? { intValue: value } : { doubleValue: value };
|
|
603
|
-
if (typeof value === "bigint") return { stringValue: value.toString() };
|
|
604
|
-
if (value === null || value === void 0) return { stringValue: "" };
|
|
605
|
-
try {
|
|
606
|
-
return { stringValue: require_safe_stringify.stringifyForLog(value) };
|
|
607
|
-
} catch {
|
|
608
|
-
return { stringValue: String(value) };
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
/** Build the OTLP KeyValue attribute list from a flat record. */
|
|
612
|
-
function toAttributes(rec) {
|
|
613
|
-
return Object.entries(rec).map(([key, value]) => ({
|
|
614
|
-
key,
|
|
615
|
-
value: toAnyValue(value)
|
|
616
|
-
}));
|
|
617
|
-
}
|
|
618
|
-
var OtlpLogTransport = class {
|
|
619
|
-
constructor(config) {
|
|
620
|
-
this.name = "otlp";
|
|
621
|
-
this.flushTimer = null;
|
|
622
|
-
this.url = config.url;
|
|
623
|
-
this.headers = config.headers ?? {};
|
|
624
|
-
this.batchSize = config.batchSize ?? 100;
|
|
625
|
-
this.flushIntervalMs = config.flushIntervalMs ?? 5e3;
|
|
626
|
-
this.requestTimeoutMs = config.requestTimeoutMs ?? require_batch_buffer.DEFAULT_REQUEST_TIMEOUT_MS;
|
|
627
|
-
this.level = config.level;
|
|
628
|
-
this.buffer = new require_batch_buffer.BatchBuffer({
|
|
629
|
-
name: "OtlpLogTransport",
|
|
630
|
-
batchSize: this.batchSize,
|
|
631
|
-
maxBufferSize: config.maxBufferSize ?? require_batch_buffer.DEFAULT_MAX_BUFFER_SIZE,
|
|
632
|
-
send: (entries) => this.send(entries)
|
|
633
|
-
});
|
|
634
|
-
this.resourceAttrs = toAttributes({
|
|
635
|
-
"service.name": config.serviceName ?? "logixia",
|
|
636
|
-
...config.serviceVersion ? { "service.version": config.serviceVersion } : {},
|
|
637
|
-
...config.environment ? { "deployment.environment": config.environment } : {},
|
|
638
|
-
...config.resourceAttributes ?? {}
|
|
639
|
-
});
|
|
640
|
-
this.flushTimer = setInterval(() => {
|
|
641
|
-
this.flush().catch(() => {});
|
|
642
|
-
}, this.flushIntervalMs);
|
|
643
|
-
if (this.flushTimer.unref) this.flushTimer.unref();
|
|
644
|
-
}
|
|
645
|
-
write(entry) {
|
|
646
|
-
this.buffer.push(entry);
|
|
647
|
-
this.buffer.flushIfFull();
|
|
648
|
-
}
|
|
649
|
-
/** Convert one entry into an OTLP LogRecord. */
|
|
650
|
-
toLogRecord(entry) {
|
|
651
|
-
const sev = toOtelSeverity(entry.level);
|
|
652
|
-
const tsNanos = String(entry.timestamp.getTime() * 1e6);
|
|
653
|
-
const attrs = { ...entry.data ?? {} };
|
|
654
|
-
if (entry.context !== void 0) attrs["context"] = entry.context;
|
|
655
|
-
if (entry.appName !== void 0) attrs["app.name"] = entry.appName;
|
|
656
|
-
if (entry.environment !== void 0) attrs["deployment.environment"] = entry.environment;
|
|
657
|
-
const record = {
|
|
658
|
-
timeUnixNano: tsNanos,
|
|
659
|
-
observedTimeUnixNano: tsNanos,
|
|
660
|
-
severityNumber: sev.number,
|
|
661
|
-
severityText: sev.text,
|
|
662
|
-
body: { stringValue: entry.message },
|
|
663
|
-
attributes: toAttributes(attrs)
|
|
664
|
-
};
|
|
665
|
-
if (entry.traceId) {
|
|
666
|
-
const traceId = toOtlpTraceId(entry.traceId);
|
|
667
|
-
if (traceId) record["traceId"] = traceId;
|
|
668
|
-
else record["attributes"].push({
|
|
669
|
-
key: "trace_id",
|
|
670
|
-
value: { stringValue: entry.traceId }
|
|
671
|
-
});
|
|
672
|
-
}
|
|
673
|
-
return record;
|
|
674
|
-
}
|
|
675
|
-
buildPayload(entries) {
|
|
676
|
-
return require_safe_stringify.stringifyForLog({ resourceLogs: [{
|
|
677
|
-
resource: { attributes: this.resourceAttrs },
|
|
678
|
-
scopeLogs: [{
|
|
679
|
-
scope: { name: "logixia" },
|
|
680
|
-
logRecords: entries.map((e) => this.toLogRecord(e))
|
|
681
|
-
}]
|
|
682
|
-
}] });
|
|
683
|
-
}
|
|
684
|
-
flush() {
|
|
685
|
-
return this.buffer.flush();
|
|
686
|
-
}
|
|
687
|
-
async send(entries) {
|
|
688
|
-
if (typeof fetch !== "function") {
|
|
689
|
-
require_internal_log.internalWarn("OtlpLogTransport: global fetch unavailable — cannot export logs");
|
|
690
|
-
return;
|
|
691
|
-
}
|
|
692
|
-
const controller = new AbortController();
|
|
693
|
-
const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);
|
|
694
|
-
try {
|
|
695
|
-
const res = await fetch(this.url, {
|
|
696
|
-
method: "POST",
|
|
697
|
-
headers: {
|
|
698
|
-
"Content-Type": "application/json",
|
|
699
|
-
...this.headers
|
|
700
|
-
},
|
|
701
|
-
body: this.buildPayload(entries),
|
|
702
|
-
signal: controller.signal
|
|
703
|
-
});
|
|
704
|
-
if (!res.ok) throw new require_batch_buffer.HttpError(res.status, "", "OTLP export");
|
|
705
|
-
} catch (err) {
|
|
706
|
-
if (controller.signal.aborted) throw new Error(`OTLP export timed out after ${this.requestTimeoutMs}ms`, { cause: err });
|
|
707
|
-
throw err;
|
|
708
|
-
} finally {
|
|
709
|
-
clearTimeout(timer);
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
async close() {
|
|
713
|
-
if (this.flushTimer) {
|
|
714
|
-
clearInterval(this.flushTimer);
|
|
715
|
-
this.flushTimer = null;
|
|
716
|
-
}
|
|
717
|
-
await this.buffer.close();
|
|
718
|
-
}
|
|
719
|
-
};
|
|
720
|
-
|
|
721
|
-
//#endregion
|
|
722
|
-
//#region src/metrics.ts
|
|
612
|
+
// src/metrics.ts
|
|
723
613
|
const DEFAULT_BUCKETS = [
|
|
724
614
|
1,
|
|
725
615
|
5,
|
|
@@ -861,9 +751,10 @@ var MetricsPlugin = class {
|
|
|
861
751
|
const helpText = config.help ?? rawName.replace(/_/g, " ");
|
|
862
752
|
lines.push(`# HELP ${metricName} ${helpText}`);
|
|
863
753
|
lines.push(`# TYPE ${metricName} ${config.type}`);
|
|
864
|
-
if (state.type === "counter")
|
|
865
|
-
|
|
866
|
-
|
|
754
|
+
if (state.type === "counter") {
|
|
755
|
+
if (state.values.size === 0) lines.push(`${metricName} 0`);
|
|
756
|
+
else for (const [labelKey, count] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${count}`);
|
|
757
|
+
} else if (state.type === "histogram") for (const [labelKey, bucketCounts] of state.counts) {
|
|
867
758
|
const labelSuffix = renderLabels(labelKey);
|
|
868
759
|
const baseObj = labelKey === "{}" ? {} : JSON.parse(labelKey);
|
|
869
760
|
for (let i = 0; i < state.buckets.length; i++) {
|
|
@@ -881,8 +772,10 @@ var MetricsPlugin = class {
|
|
|
881
772
|
lines.push(`${metricName}_sum${labelSuffix} ${state.sums.get(labelKey) ?? 0}`);
|
|
882
773
|
lines.push(`${metricName}_count${labelSuffix} ${state.observations.get(labelKey) ?? 0}`);
|
|
883
774
|
}
|
|
884
|
-
else if (state.type === "gauge")
|
|
885
|
-
|
|
775
|
+
else if (state.type === "gauge") {
|
|
776
|
+
if (state.values.size === 0) lines.push(`${metricName} 0`);
|
|
777
|
+
else for (const [labelKey, val] of state.values) lines.push(`${metricName}${renderLabels(labelKey)} ${val}`);
|
|
778
|
+
}
|
|
886
779
|
}
|
|
887
780
|
return `${lines.join("\n")}\n`;
|
|
888
781
|
}
|
|
@@ -999,9 +892,20 @@ var MetricsPlugin = class {
|
|
|
999
892
|
function createMetricsPlugin(map, options) {
|
|
1000
893
|
return new MetricsPlugin(map, options);
|
|
1001
894
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
895
|
+
// src/index.ts
|
|
896
|
+
/**
|
|
897
|
+
* Logixia - Advanced TypeScript Logger
|
|
898
|
+
*
|
|
899
|
+
* A comprehensive logging library with support for:
|
|
900
|
+
* - Multiple output formats (console, file, JSON)
|
|
901
|
+
* - Trace ID tracking
|
|
902
|
+
* - Performance monitoring
|
|
903
|
+
* - NestJS integration
|
|
904
|
+
* - Customizable log levels and colors
|
|
905
|
+
* - Intelligent log search and aggregation
|
|
906
|
+
* - Natural language query processing
|
|
907
|
+
* - Pattern recognition and anomaly detection
|
|
908
|
+
*/
|
|
1005
909
|
/**
|
|
1006
910
|
* Create a new Logixia logger instance with TypeScript support for custom levels
|
|
1007
911
|
* @param config - Logger configuration
|
|
@@ -1015,15 +919,13 @@ const logger = new require_builder.LogixiaLogger(require_builder.DEFAULT_CONFIG)
|
|
|
1015
919
|
/**
|
|
1016
920
|
* Export default configuration for reference
|
|
1017
921
|
*/
|
|
1018
|
-
|
|
1019
|
-
//#endregion
|
|
1020
922
|
exports.BasicLogIndexer = require_search.BasicLogIndexer;
|
|
1021
923
|
exports.BasicSearchEngine = require_search.BasicSearchEngine;
|
|
1022
924
|
exports.CorrelationEngine = require_search.CorrelationEngine;
|
|
1023
925
|
exports.DEFAULT_CONFIG = require_builder.DEFAULT_CONFIG;
|
|
1024
926
|
exports.DEFAULT_LOG_COLORS = require_builder.DEFAULT_LOG_COLORS;
|
|
1025
927
|
exports.DEFAULT_LOG_LEVELS = require_builder.DEFAULT_LOG_LEVELS;
|
|
1026
|
-
exports.DEFAULT_TRACE_HEADERS =
|
|
928
|
+
exports.DEFAULT_TRACE_HEADERS = require_request_trace.DEFAULT_TRACE_HEADERS;
|
|
1027
929
|
exports.DiscordTransport = require_slack_transport.DiscordTransport;
|
|
1028
930
|
exports.ErrorResponseBuilder = require_builder.ErrorResponseBuilder;
|
|
1029
931
|
exports.JsonFormatter = JsonFormatter;
|
|
@@ -1031,19 +933,19 @@ exports.LogLevel = require_builder.LogLevel;
|
|
|
1031
933
|
exports.LogixiaContext = require_async_context.LogixiaContext;
|
|
1032
934
|
exports.LogixiaException = require_builder.LogixiaException;
|
|
1033
935
|
exports.LogixiaLogger = require_builder.LogixiaLogger;
|
|
1034
|
-
exports.MAX_INCOMING_ID_LENGTH =
|
|
936
|
+
exports.MAX_INCOMING_ID_LENGTH = require_request_trace.MAX_INCOMING_ID_LENGTH;
|
|
1035
937
|
exports.MetricsPlugin = MetricsPlugin;
|
|
1036
938
|
exports.NLPSearchEngine = require_search.NLPSearchEngine;
|
|
1037
939
|
exports.OVERFLOW_LABEL_VALUE = OVERFLOW_LABEL_VALUE;
|
|
1038
|
-
exports.OtlpLogTransport = OtlpLogTransport;
|
|
940
|
+
exports.OtlpLogTransport = require_slack_transport.OtlpLogTransport;
|
|
1039
941
|
exports.PatternRecognitionEngine = require_search.PatternRecognitionEngine;
|
|
1040
942
|
exports.PluginRegistry = require_builder.PluginRegistry;
|
|
1041
943
|
exports.SearchManager = require_search.SearchManager;
|
|
1042
944
|
exports.SlackTransport = require_slack_transport.SlackTransport;
|
|
1043
|
-
exports.TRACE_CONTEXT_KEY =
|
|
945
|
+
exports.TRACE_CONTEXT_KEY = require_request_trace.TRACE_CONTEXT_KEY;
|
|
1044
946
|
exports.TextFormatter = TextFormatter;
|
|
1045
|
-
exports.TraceContext =
|
|
1046
|
-
exports._setActiveContextKey =
|
|
947
|
+
exports.TraceContext = require_request_trace.TraceContext;
|
|
948
|
+
exports._setActiveContextKey = require_request_trace._setActiveContextKey;
|
|
1047
949
|
exports._shutdownRegistrySize = require_builder._shutdownRegistrySize;
|
|
1048
950
|
exports.addEventFields = addEventFields;
|
|
1049
951
|
exports.applyRedaction = require_builder.applyRedaction;
|
|
@@ -1052,23 +954,23 @@ exports.createFastifyContextHook = require_async_context.createFastifyContextHoo
|
|
|
1052
954
|
exports.createLevelControlHandler = createLevelControlHandler;
|
|
1053
955
|
exports.createLogger = createLogger;
|
|
1054
956
|
exports.createMetricsPlugin = createMetricsPlugin;
|
|
1055
|
-
exports.createTraceMiddleware =
|
|
957
|
+
exports.createTraceMiddleware = require_request_trace.createTraceMiddleware;
|
|
1056
958
|
exports.createTypedLogger = createTypedLogger;
|
|
1057
959
|
exports.decycleValue = require_safe_stringify.decycleValue;
|
|
1058
960
|
exports.defineLogSchema = defineLogSchema;
|
|
1059
961
|
exports.deregisterFromShutdown = require_builder.deregisterFromShutdown;
|
|
1060
|
-
exports.disableOtelBridge =
|
|
1061
|
-
exports.extractTraceId =
|
|
962
|
+
exports.disableOtelBridge = require_otel.disableOtelBridge;
|
|
963
|
+
exports.extractTraceId = require_request_trace.extractTraceId;
|
|
1062
964
|
exports.flushOnExit = require_builder.flushOnExit;
|
|
1063
965
|
exports.generateRequestId = require_builder.generateRequestId;
|
|
1064
966
|
exports.generateTraceId = require_builder.generateTraceId;
|
|
1065
|
-
exports.getActiveOtelContext =
|
|
1066
|
-
exports.getCurrentTraceId =
|
|
967
|
+
exports.getActiveOtelContext = require_otel.getActiveOtelContext;
|
|
968
|
+
exports.getCurrentTraceId = require_request_trace.getCurrentTraceId;
|
|
1067
969
|
exports.getEventFields = getEventFields;
|
|
1068
|
-
exports.getOtelMetaFields =
|
|
1069
|
-
exports.getTraceContextKey =
|
|
970
|
+
exports.getOtelMetaFields = require_otel.getOtelMetaFields;
|
|
971
|
+
exports.getTraceContextKey = require_request_trace.getTraceContextKey;
|
|
1070
972
|
exports.globalPluginRegistry = require_builder.globalPluginRegistry;
|
|
1071
|
-
exports.initOtelBridge =
|
|
973
|
+
exports.initOtelBridge = require_otel.initOtelBridge;
|
|
1072
974
|
exports.isError = require_builder.isError;
|
|
1073
975
|
exports.isLogixiaException = require_builder.isLogixiaException;
|
|
1074
976
|
exports.logger = logger;
|
|
@@ -1078,16 +980,17 @@ exports.registerForShutdown = require_builder.registerForShutdown;
|
|
|
1078
980
|
exports.registerLevelSignal = registerLevelSignal;
|
|
1079
981
|
exports.resetShutdownHandlers = require_builder.resetShutdownHandlers;
|
|
1080
982
|
exports.retrocycle = require_safe_stringify.retrocycle;
|
|
1081
|
-
exports.runWithTraceId =
|
|
983
|
+
exports.runWithTraceId = require_request_trace.runWithTraceId;
|
|
1082
984
|
exports.safeStringify = require_safe_stringify.safeStringify;
|
|
1083
|
-
exports.sanitizeIncomingId =
|
|
985
|
+
exports.sanitizeIncomingId = require_request_trace.sanitizeIncomingId;
|
|
1084
986
|
exports.serializeError = require_builder.serializeError;
|
|
1085
987
|
exports.setEventField = setEventField;
|
|
1086
|
-
exports.setTraceId =
|
|
988
|
+
exports.setTraceId = require_request_trace.setTraceId;
|
|
1087
989
|
exports.stringifyForLog = require_safe_stringify.stringifyForLog;
|
|
1088
|
-
exports.toOtelSeverity = toOtelSeverity;
|
|
1089
|
-
exports.traceStorage =
|
|
990
|
+
exports.toOtelSeverity = require_slack_transport.toOtelSeverity;
|
|
991
|
+
exports.traceStorage = require_request_trace.traceStorage;
|
|
1090
992
|
exports.usePlugin = require_builder.usePlugin;
|
|
1091
993
|
exports.wideEventMiddleware = wideEventMiddleware;
|
|
1092
994
|
exports.withWideEvent = withWideEvent;
|
|
995
|
+
|
|
1093
996
|
//# sourceMappingURL=index.js.map
|