+106
-10
@@ -15,4 +15,4 @@ 'use strict' | ||
| opts.serializers = opts.serializers || {} | ||
| opts.serializers.req = opts.serializers.req || asReqValue | ||
| opts.serializers.res = opts.serializers.res || pino.stdSerializers.res | ||
| opts.serializers.req = wrapReqSerializer(opts.serializers.req || asReqValue) | ||
| opts.serializers.res = wrapResSerializer(opts.serializers.res || asResValue) | ||
| opts.serializers.err = opts.serializers.err || pino.stdSerializers.err | ||
@@ -68,14 +68,110 @@ | ||
| var rawSymbol = Symbol.for('pino-raw-ref') | ||
| var pinoReqProto = Object.create({}, { | ||
| id: { | ||
| enumerable: true, | ||
| writable: true, | ||
| value: '' | ||
| }, | ||
| method: { | ||
| enumerable: true, | ||
| writable: true, | ||
| value: '' | ||
| }, | ||
| url: { | ||
| enumerable: true, | ||
| writable: true, | ||
| value: '' | ||
| }, | ||
| headers: { | ||
| enumerable: true, | ||
| writable: true, | ||
| value: {} | ||
| }, | ||
| remoteAddress: { | ||
| enumerable: true, | ||
| writable: true, | ||
| value: '' | ||
| }, | ||
| remotePort: { | ||
| enumerable: true, | ||
| writable: true, | ||
| value: '' | ||
| }, | ||
| raw: { | ||
| enumerable: false, | ||
| get: function () { | ||
| return this[rawSymbol] | ||
| }, | ||
| set: function (val) { | ||
| this[rawSymbol] = val | ||
| } | ||
| } | ||
| }) | ||
| Object.defineProperty(pinoReqProto, rawSymbol, { | ||
| writable: true, | ||
| value: {} | ||
| }) | ||
| function wrapReqSerializer (serializer) { | ||
| if (serializer === asReqValue) return asReqValue | ||
| return function wrappedReqSerializer (req) { | ||
| return serializer(asReqValue(req)) | ||
| } | ||
| } | ||
| function asReqValue (req) { | ||
| var connection = req.connection | ||
| return { | ||
| id: req.id, | ||
| method: req.method, | ||
| url: req.url, | ||
| headers: req.headers, | ||
| remoteAddress: connection && connection.remoteAddress, | ||
| remotePort: connection && connection.remotePort | ||
| const _req = Object.create(pinoReqProto) | ||
| _req.id = req.id | ||
| _req.method = req.method | ||
| _req.url = req.url | ||
| _req.headers = req.headers | ||
| _req.remoteAddress = connection && connection.remoteAddress | ||
| _req.remotePort = connection && connection.remotePort | ||
| _req.raw = req | ||
| return _req | ||
| } | ||
| var pinoResProto = Object.create({}, { | ||
| statusCode: { | ||
| enumerable: true, | ||
| writable: true, | ||
| value: 0 | ||
| }, | ||
| header: { | ||
| enumerable: true, | ||
| writable: true, | ||
| value: '' | ||
| }, | ||
| raw: { | ||
| enumerable: false, | ||
| get: function () { | ||
| return this[rawSymbol] | ||
| }, | ||
| set: function (val) { | ||
| this[rawSymbol] = val | ||
| } | ||
| } | ||
| }) | ||
| Object.defineProperty(pinoResProto, rawSymbol, { | ||
| writable: true, | ||
| value: {} | ||
| }) | ||
| function asResValue (res) { | ||
| const _res = Object.create(pinoResProto) | ||
| _res.statusCode = res.statusCode | ||
| _res.header = res._header | ||
| _res.raw = res | ||
| return _res | ||
| } | ||
| function wrapResSerializer (serializer) { | ||
| if (serializer === asResValue) return asResValue | ||
| return function wrappedResSerializer (res) { | ||
| return serializer(asResValue(res)) | ||
| } | ||
| } | ||
| function wrapChild (opts, stream) { | ||
@@ -111,4 +207,4 @@ var prevLogger = opts.logger | ||
| req: asReqValue, | ||
| res: pino.stdSerializers.res | ||
| res: asResValue | ||
| } | ||
| module.exports.startTime = startTime |
+2
-2
| { | ||
| "name": "pino-http", | ||
| "version": "2.6.2", | ||
| "version": "3.0.0", | ||
| "description": "High-speed HTTP logger for Node.js", | ||
| "main": "logger.js", | ||
| "dependencies": { | ||
| "pino": "^4.0.2" | ||
| "pino": "^4.10.2" | ||
| }, | ||
@@ -9,0 +9,0 @@ "devDependencies": { |
+111
-0
@@ -306,1 +306,112 @@ 'use strict' | ||
| }) | ||
| // https://github.com/pinojs/pino-http/issues/42 | ||
| test('does not return excessively long object', function (t) { | ||
| var dest = split(JSON.parse) | ||
| var logger = pinoHttp({ | ||
| logger: pino(dest), | ||
| serializers: { | ||
| req: function (req) { | ||
| delete req.connection | ||
| return req | ||
| } | ||
| } | ||
| }) | ||
| t.plan(1) | ||
| var server = http.createServer(handler) | ||
| server.unref() | ||
| server.listen(0, () => { | ||
| const port = server.address().port | ||
| http.get(`http://127.0.0.1:${port}`, () => {}) | ||
| }) | ||
| function handler (req, res) { | ||
| logger(req, res) | ||
| res.end() | ||
| } | ||
| dest.on('data', function (obj) { | ||
| t.is(Object.keys(obj.req).length, 6) | ||
| }) | ||
| }) | ||
| test('req.raw is available to custom serializers', function (t) { | ||
| t.plan(2) | ||
| var dest = split(JSON.parse) | ||
| var logger = pinoHttp({ | ||
| logger: pino(dest), | ||
| serializers: { | ||
| req: function (req) { | ||
| t.ok(req.raw) | ||
| t.ok(req.raw.connection) | ||
| return req | ||
| } | ||
| } | ||
| }) | ||
| var server = http.createServer(handler) | ||
| server.unref() | ||
| server.listen(0, () => { | ||
| const port = server.address().port | ||
| http.get(`http://127.0.0.1:${port}`, () => {}) | ||
| }) | ||
| function handler (req, res) { | ||
| logger(req, res) | ||
| res.end() | ||
| } | ||
| }) | ||
| test('res.raw is available to custom serializers', function (t) { | ||
| t.plan(2) | ||
| var dest = split(JSON.parse) | ||
| var logger = pinoHttp({ | ||
| logger: pino(dest), | ||
| serializers: { | ||
| res: function (res) { | ||
| t.ok(res.raw) | ||
| t.ok(res.raw.statusCode) | ||
| return res | ||
| } | ||
| } | ||
| }) | ||
| var server = http.createServer(handler) | ||
| server.unref() | ||
| server.listen(0, () => { | ||
| const port = server.address().port | ||
| http.get(`http://127.0.0.1:${port}`, () => {}) | ||
| }) | ||
| function handler (req, res) { | ||
| logger(req, res) | ||
| res.end() | ||
| } | ||
| }) | ||
| test('res.raw is not enumerable', function (t) { | ||
| t.plan(1) | ||
| var dest = split(JSON.parse) | ||
| var logger = pinoHttp({ | ||
| logger: pino(dest), | ||
| serializers: { | ||
| res: function (res) { | ||
| t.is(res.propertyIsEnumerable('raw'), false) | ||
| return res | ||
| } | ||
| } | ||
| }) | ||
| var server = http.createServer(handler) | ||
| server.unref() | ||
| server.listen(0, () => { | ||
| const port = server.address().port | ||
| http.get(`http://127.0.0.1:${port}`, () => {}) | ||
| }) | ||
| function handler (req, res) { | ||
| logger(req, res) | ||
| res.end() | ||
| } | ||
| }) |
Sorry, the diff of this file is not supported yet
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
24896
16.63%603
45.65%14
-6.67%10
11.11%Updated