@fabbahiense/pulsar-pino-transport 0.1.1 → 0.2.1
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/dist/index.cjs +79 -5
- package/dist/index.js +79 -5
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -34,6 +34,62 @@ __export(index_exports, {
|
|
|
34
34
|
default: () => index_default
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(index_exports);
|
|
37
|
+
var GENERIC_HTTP_MSGS = /* @__PURE__ */ new Set([
|
|
38
|
+
"request completed",
|
|
39
|
+
"request errored",
|
|
40
|
+
"request aborted",
|
|
41
|
+
"response sent",
|
|
42
|
+
"incoming request",
|
|
43
|
+
"http request"
|
|
44
|
+
]);
|
|
45
|
+
var PINO_INTERNAL_FIELDS = /* @__PURE__ */ new Set([
|
|
46
|
+
"level",
|
|
47
|
+
"msg",
|
|
48
|
+
"time",
|
|
49
|
+
"v",
|
|
50
|
+
"pid",
|
|
51
|
+
"hostname",
|
|
52
|
+
"name",
|
|
53
|
+
"traceId",
|
|
54
|
+
"trace_id",
|
|
55
|
+
"requestId",
|
|
56
|
+
"req",
|
|
57
|
+
"res",
|
|
58
|
+
"responseTime",
|
|
59
|
+
"err",
|
|
60
|
+
"metadata"
|
|
61
|
+
]);
|
|
62
|
+
function pickFirst(obj, keys) {
|
|
63
|
+
for (const k of keys) {
|
|
64
|
+
if (obj[k] !== void 0 && obj[k] !== null) return obj[k];
|
|
65
|
+
}
|
|
66
|
+
return void 0;
|
|
67
|
+
}
|
|
68
|
+
function isObj(v) {
|
|
69
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
70
|
+
}
|
|
71
|
+
function extractPayloads(obj) {
|
|
72
|
+
const out = {};
|
|
73
|
+
const req = obj.req;
|
|
74
|
+
if (isObj(req)) {
|
|
75
|
+
const body = pickFirst(req, ["body", "requestBody", "reqBody", "payload", "input"]);
|
|
76
|
+
if (body !== void 0) out.requestBody = body;
|
|
77
|
+
const headers = pickFirst(req, ["headers", "requestHeaders", "reqHeaders"]);
|
|
78
|
+
if (isObj(headers)) out.requestHeaders = headers;
|
|
79
|
+
const query = pickFirst(req, ["query", "queryParams", "qs"]);
|
|
80
|
+
if (isObj(query)) out.query = query;
|
|
81
|
+
const params = pickFirst(req, ["params", "pathParams", "routeParams"]);
|
|
82
|
+
if (isObj(params)) out.params = params;
|
|
83
|
+
}
|
|
84
|
+
const res = obj.res;
|
|
85
|
+
if (isObj(res)) {
|
|
86
|
+
const body = pickFirst(res, ["body", "responseBody", "resBody", "response", "output", "result", "data"]);
|
|
87
|
+
if (body !== void 0) out.responseBody = body;
|
|
88
|
+
const headers = pickFirst(res, ["headers", "responseHeaders", "resHeaders"]);
|
|
89
|
+
if (isObj(headers)) out.responseHeaders = headers;
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
37
93
|
var LEVEL_MAP = {
|
|
38
94
|
10: "trace",
|
|
39
95
|
20: "debug",
|
|
@@ -115,19 +171,37 @@ async function index_default(options) {
|
|
|
115
171
|
}
|
|
116
172
|
return build(async function(stream) {
|
|
117
173
|
for await (const obj of stream) {
|
|
174
|
+
const method = obj.req?.method || void 0;
|
|
175
|
+
const url2 = obj.req?.url || void 0;
|
|
176
|
+
const statusCode = obj.res?.statusCode || void 0;
|
|
177
|
+
let msg = obj.msg ?? "";
|
|
178
|
+
const lower = msg.toLowerCase().trim();
|
|
179
|
+
if (GENERIC_HTTP_MSGS.has(lower) && method && url2) {
|
|
180
|
+
msg = `${method.toUpperCase()} ${url2}${statusCode ? ` ${statusCode}` : ""}`;
|
|
181
|
+
}
|
|
182
|
+
const extracted = extractPayloads(obj);
|
|
183
|
+
const baseMeta = isObj(obj.metadata) ? obj.metadata : {};
|
|
184
|
+
const customFields = {};
|
|
185
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
186
|
+
if (!PINO_INTERNAL_FIELDS.has(key) && value !== void 0 && value !== null) {
|
|
187
|
+
customFields[key] = value;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const merged = { ...baseMeta, ...customFields, ...extracted };
|
|
191
|
+
const metadata = Object.keys(merged).length > 0 ? merged : null;
|
|
118
192
|
buffer.push({
|
|
119
193
|
level: LEVEL_MAP[obj.level] || "info",
|
|
120
|
-
msg
|
|
194
|
+
msg,
|
|
121
195
|
timestamp: parseTimestamp(obj.time),
|
|
122
196
|
serviceName: resolvedSource,
|
|
123
197
|
traceId: obj.traceId || obj.trace_id || obj.requestId || obj.req?.id || null,
|
|
124
|
-
method
|
|
125
|
-
url:
|
|
126
|
-
statusCode
|
|
198
|
+
method,
|
|
199
|
+
url: url2,
|
|
200
|
+
statusCode,
|
|
127
201
|
responseTime: obj.responseTime,
|
|
128
202
|
errorMessage: obj.err?.message,
|
|
129
203
|
errorStack: obj.err?.stack,
|
|
130
|
-
metadata
|
|
204
|
+
metadata
|
|
131
205
|
});
|
|
132
206
|
if (buffer.length >= batchSize) {
|
|
133
207
|
await flush();
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,60 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
|
+
var GENERIC_HTTP_MSGS = /* @__PURE__ */ new Set([
|
|
3
|
+
"request completed",
|
|
4
|
+
"request errored",
|
|
5
|
+
"request aborted",
|
|
6
|
+
"response sent",
|
|
7
|
+
"incoming request",
|
|
8
|
+
"http request"
|
|
9
|
+
]);
|
|
10
|
+
var PINO_INTERNAL_FIELDS = /* @__PURE__ */ new Set([
|
|
11
|
+
"level",
|
|
12
|
+
"msg",
|
|
13
|
+
"time",
|
|
14
|
+
"v",
|
|
15
|
+
"pid",
|
|
16
|
+
"hostname",
|
|
17
|
+
"name",
|
|
18
|
+
"traceId",
|
|
19
|
+
"trace_id",
|
|
20
|
+
"requestId",
|
|
21
|
+
"req",
|
|
22
|
+
"res",
|
|
23
|
+
"responseTime",
|
|
24
|
+
"err",
|
|
25
|
+
"metadata"
|
|
26
|
+
]);
|
|
27
|
+
function pickFirst(obj, keys) {
|
|
28
|
+
for (const k of keys) {
|
|
29
|
+
if (obj[k] !== void 0 && obj[k] !== null) return obj[k];
|
|
30
|
+
}
|
|
31
|
+
return void 0;
|
|
32
|
+
}
|
|
33
|
+
function isObj(v) {
|
|
34
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
35
|
+
}
|
|
36
|
+
function extractPayloads(obj) {
|
|
37
|
+
const out = {};
|
|
38
|
+
const req = obj.req;
|
|
39
|
+
if (isObj(req)) {
|
|
40
|
+
const body = pickFirst(req, ["body", "requestBody", "reqBody", "payload", "input"]);
|
|
41
|
+
if (body !== void 0) out.requestBody = body;
|
|
42
|
+
const headers = pickFirst(req, ["headers", "requestHeaders", "reqHeaders"]);
|
|
43
|
+
if (isObj(headers)) out.requestHeaders = headers;
|
|
44
|
+
const query = pickFirst(req, ["query", "queryParams", "qs"]);
|
|
45
|
+
if (isObj(query)) out.query = query;
|
|
46
|
+
const params = pickFirst(req, ["params", "pathParams", "routeParams"]);
|
|
47
|
+
if (isObj(params)) out.params = params;
|
|
48
|
+
}
|
|
49
|
+
const res = obj.res;
|
|
50
|
+
if (isObj(res)) {
|
|
51
|
+
const body = pickFirst(res, ["body", "responseBody", "resBody", "response", "output", "result", "data"]);
|
|
52
|
+
if (body !== void 0) out.responseBody = body;
|
|
53
|
+
const headers = pickFirst(res, ["headers", "responseHeaders", "resHeaders"]);
|
|
54
|
+
if (isObj(headers)) out.responseHeaders = headers;
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
2
58
|
var LEVEL_MAP = {
|
|
3
59
|
10: "trace",
|
|
4
60
|
20: "debug",
|
|
@@ -80,19 +136,37 @@ async function index_default(options) {
|
|
|
80
136
|
}
|
|
81
137
|
return build(async function(stream) {
|
|
82
138
|
for await (const obj of stream) {
|
|
139
|
+
const method = obj.req?.method || void 0;
|
|
140
|
+
const url2 = obj.req?.url || void 0;
|
|
141
|
+
const statusCode = obj.res?.statusCode || void 0;
|
|
142
|
+
let msg = obj.msg ?? "";
|
|
143
|
+
const lower = msg.toLowerCase().trim();
|
|
144
|
+
if (GENERIC_HTTP_MSGS.has(lower) && method && url2) {
|
|
145
|
+
msg = `${method.toUpperCase()} ${url2}${statusCode ? ` ${statusCode}` : ""}`;
|
|
146
|
+
}
|
|
147
|
+
const extracted = extractPayloads(obj);
|
|
148
|
+
const baseMeta = isObj(obj.metadata) ? obj.metadata : {};
|
|
149
|
+
const customFields = {};
|
|
150
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
151
|
+
if (!PINO_INTERNAL_FIELDS.has(key) && value !== void 0 && value !== null) {
|
|
152
|
+
customFields[key] = value;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const merged = { ...baseMeta, ...customFields, ...extracted };
|
|
156
|
+
const metadata = Object.keys(merged).length > 0 ? merged : null;
|
|
83
157
|
buffer.push({
|
|
84
158
|
level: LEVEL_MAP[obj.level] || "info",
|
|
85
|
-
msg
|
|
159
|
+
msg,
|
|
86
160
|
timestamp: parseTimestamp(obj.time),
|
|
87
161
|
serviceName: resolvedSource,
|
|
88
162
|
traceId: obj.traceId || obj.trace_id || obj.requestId || obj.req?.id || null,
|
|
89
|
-
method
|
|
90
|
-
url:
|
|
91
|
-
statusCode
|
|
163
|
+
method,
|
|
164
|
+
url: url2,
|
|
165
|
+
statusCode,
|
|
92
166
|
responseTime: obj.responseTime,
|
|
93
167
|
errorMessage: obj.err?.message,
|
|
94
168
|
errorStack: obj.err?.stack,
|
|
95
|
-
metadata
|
|
169
|
+
metadata
|
|
96
170
|
});
|
|
97
171
|
if (buffer.length >= batchSize) {
|
|
98
172
|
await flush();
|