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