@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 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: obj.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: obj.req?.method,
125
- url: obj.req?.url,
126
- statusCode: obj.res?.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: obj.metadata || null
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: obj.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: obj.req?.method,
90
- url: obj.req?.url,
91
- statusCode: obj.res?.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: obj.metadata || null
169
+ metadata
96
170
  });
97
171
  if (buffer.length >= batchSize) {
98
172
  await flush();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fabbahiense/pulsar-pino-transport",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "Pino transport for Pulsar observability platform",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",