swagger-stats
Advanced tools
Comparing version 0.95.2 to 0.95.5
@@ -67,6 +67,7 @@ 'use strict'; | ||
name: 'swagger-stats-authtest', | ||
version: '0.95.0', | ||
version: '0.95.5', | ||
hostname: "hostname", | ||
ip: "127.0.0.1", | ||
swaggerSpec:swaggerSpec, | ||
swaggerOnly: true, | ||
uriPath: '/swagger-stats', | ||
@@ -84,3 +85,12 @@ durationBuckets: [10, 25, 50, 100, 200], | ||
// simple check for username and password | ||
return((username==='swagger-stats') && (password==='swagger-stats') ); | ||
if(username==='swagger-stats') { | ||
return ((username === 'swagger-stats') && (password === 'swagger-stats')); | ||
} else if(username==='swagger-promise'){ | ||
return new Promise(function(resolve) { | ||
setTimeout(function(){ | ||
resolve((username === 'swagger-promise') && (password === 'swagger-promise')); | ||
}, 1000); | ||
}); | ||
} | ||
return false; | ||
} | ||
@@ -148,2 +158,7 @@ })); | ||
process.on('unhandledRejection', function(error) { | ||
debug('unhandledRejection', error.message, error.stack); | ||
}); | ||
module.exports.app = app; |
@@ -79,3 +79,3 @@ 'use strict'; | ||
name: 'swagger-stats-spectest', | ||
version: '0.95.0', | ||
version: '0.95.5', | ||
hostname: "hostname", | ||
@@ -89,3 +89,28 @@ ip: "127.0.0.1", | ||
responseSizeBuckets: [10, 25, 50, 100, 200], | ||
apdexThreshold: 25 | ||
apdexThreshold: 25, | ||
onResponseFinish: function(req,res,rrr){ | ||
// Example of extending RRR with custom attributes | ||
// All custom properties under attrs will be casted to string and indexed in ElasticSearch as keyword | ||
rrr.attrs = { | ||
test1: "test1", | ||
test2: "test2", | ||
test3: 10, | ||
test4: true, | ||
test5: {prop:"value"} | ||
}; | ||
// All custom properties under attrsint will be casted to numeric and indexed in ElasticSearch as long | ||
rrr.attrsint = { | ||
numvalue1: 100, | ||
numvalue2: "100", | ||
numvalue3: false, | ||
numvalue4: "", | ||
numvalue5: {prop:"value"} | ||
}; | ||
debug('onResponseFinish: %s', JSON.stringify(rrr)); | ||
} | ||
}; | ||
@@ -92,0 +117,0 @@ |
@@ -112,3 +112,3 @@ 'use strict'; | ||
name: 'swagger-stats-testapp', | ||
version: '0.95.0', | ||
version: '0.95.5', | ||
timelineBucketDuration: tlBucket, | ||
@@ -115,0 +115,0 @@ uriPath: '/swagger-stats', |
@@ -21,2 +21,3 @@ 'use strict'; | ||
/* | ||
api.get('/mockapi/v1/success') | ||
@@ -34,3 +35,17 @@ .set('x-sws-res','{"code":"200","message":"TEST","delay":"0","payloadsize":"0"}') | ||
.expect(500).end(function (err, res) {if (err) debug('Req error: ' + err); }); | ||
*/ | ||
api.get('/v2/pet/findByTags') | ||
.set('x-sws-res','{"code":"200","message":"TEST","delay":"0","payloadsize":"0"}') | ||
.expect(200).end(function (err, res) {if (err) debug('Req error: ' + err); }); | ||
api.get('/v2/pet/findByTags') | ||
.set('x-sws-res','{"code":"302","message":"TEST","delay":"0","payloadsize":"0"}') | ||
.expect(302).end(function (err, res) {if (err) debug('Req error: ' + err); }); | ||
api.get('/v2/pet/findByTags') | ||
.set('x-sws-res','{"code":"404","message":"TEST","delay":"0","payloadsize":"0"}') | ||
.expect(404).end(function (err, res) {if (err) debug('Req error: ' + err); }); | ||
api.get('/v2/pet/findByTags') | ||
.set('x-sws-res','{"code":"500","message":"TEST","delay":"0","payloadsize":"0"}') | ||
.expect(500).end(function (err, res) {if (err) debug('Req error: ' + err); }); | ||
/* | ||
@@ -37,0 +52,0 @@ api.get('/api/v1/redirect').expect(302).end(function (err, res) {if (err) debug('Req error: ' + err); }); |
@@ -121,2 +121,24 @@ /** | ||
// Pre-process RRR | ||
swsElasticEmitter.prototype.preProcessRecord = function(rrr){ | ||
// handle custom attributes | ||
if('attrs' in rrr){ | ||
var attrs = rrr.attrs; | ||
for(var attrname in attrs){ | ||
attrs[attrname] = swsUtil.swsStringValue(attrs[attrname]); | ||
} | ||
} | ||
if('attrsint' in rrr){ | ||
var intattrs = rrr.attrsint; | ||
for(var intattrname in intattrs){ | ||
intattrs[intattrname] = swsUtil.swsNumValue(intattrs[intattrname]); | ||
} | ||
} | ||
}; | ||
// Index Request Response Record | ||
@@ -129,4 +151,6 @@ swsElasticEmitter.prototype.processRecord = function(rrr){ | ||
this.preProcessRecord(rrr); | ||
// Create metadata | ||
var indexName = 'api-'+moment(rrr['@timestamp']).format('YYYY.MM.DD'); | ||
var indexName = 'api-'+moment(rrr['@timestamp']).utc().format('YYYY.MM.DD'); | ||
var meta = {index:{_index:indexName,_type:'api',_id:rrr.id}}; | ||
@@ -133,0 +157,0 @@ |
@@ -83,2 +83,7 @@ /** | ||
if(('sws' in req) && ('track' in req.sws) && !req.sws.track ){ | ||
// Tracking disabled for this request | ||
return; | ||
} | ||
// Setup handler for finishing reponse | ||
@@ -124,2 +129,68 @@ res.on('finish',function(){ | ||
return new Promise( function (resolve, reject) { | ||
if( !swsOptions.authentication ){ | ||
return resolve(true); | ||
} | ||
var cookies = new Cookies( req, res ); | ||
// Check session cookie | ||
var sessionIdCookie = cookies.get('sws-session-id'); | ||
if( (sessionIdCookie !== undefined) && (sessionIdCookie !== null) ){ | ||
if( sessionIdCookie in sessionIDs ){ | ||
// renew it | ||
//sessionIDs[sessionIdCookie] = Date.now(); | ||
storeSessionID(sessionIdCookie); | ||
cookies.set('sws-session-id',sessionIdCookie,{path:swsOptions.uriPath,maxAge:swsOptions.sessionMaxAge*1000}); | ||
// Ok | ||
req['sws-auth'] = true; | ||
return resolve(true); | ||
} | ||
} | ||
var authInfo = basicAuth(req); | ||
var authenticated = false; | ||
var msg = 'Authentication required'; | ||
if( (authInfo !== undefined) && (authInfo!==null) && ('name' in authInfo) && ('pass' in authInfo)){ | ||
if(typeof swsOptions.onAuthenticate === 'function'){ | ||
Promise.resolve(swsOptions.onAuthenticate(req, authInfo.name, authInfo.pass)).then(function(onAuthResult) { | ||
if( onAuthResult ){ | ||
authenticated = true; | ||
// Session is only for stats requests | ||
if(req.url.startsWith(pathStats)){ | ||
// Generate session id | ||
var sessid = uuidv1(); | ||
storeSessionID(sessid); | ||
// Set session cookie with expiration in 15 min | ||
cookies.set('sws-session-id',sessid,{path:swsOptions.uriPath,maxAge:swsOptions.sessionMaxAge*1000}); | ||
} | ||
req['sws-auth'] = true; | ||
return resolve(true); | ||
}else{ | ||
msg = 'Invalid credentials'; | ||
res.status(403).end(msg); | ||
return resolve(false); | ||
} | ||
}); | ||
}else{ | ||
res.status(403).end(msg); | ||
return resolve(false); | ||
} | ||
}else{ | ||
res.status(403).end(msg); | ||
return resolve(false); | ||
} | ||
}); | ||
/* | ||
if( !swsOptions.authentication ){ | ||
@@ -181,2 +252,3 @@ return true; | ||
return true; | ||
*/ | ||
} | ||
@@ -206,2 +278,14 @@ | ||
processAuth(req,res).then(function (authResult){ | ||
if(!authResult){ | ||
return; | ||
} | ||
res.status(200); | ||
if(('sws-auth' in req) && req['sws-auth']){ | ||
res.setHeader('x-sws-authenticated','true'); | ||
} | ||
res.json( processor.getStats( req.query ) ); | ||
}); | ||
/* | ||
if(!processAuth(req,res)) { | ||
@@ -216,2 +300,3 @@ return; | ||
res.status(200).json( processor.getStats( req.query ) ); | ||
*/ | ||
} | ||
@@ -224,2 +309,11 @@ | ||
processAuth(req,res).then(function (authResult){ | ||
if(!authResult){ | ||
return; | ||
} | ||
res.status(200).set('Content-Type', 'text/plain'); | ||
res.end(promClient.register.metrics()); | ||
}); | ||
/* | ||
if(!processAuth(req,res)) { | ||
@@ -231,2 +325,3 @@ return; | ||
res.end(promClient.register.metrics()); | ||
*/ | ||
} | ||
@@ -250,7 +345,5 @@ | ||
if(req.url.startsWith(pathStats)) { | ||
processGetStats(req, res); | ||
return; | ||
return processGetStats(req, res); | ||
}else if(req.url.startsWith(pathMetrics)){ | ||
processGetMetrics(req,res); | ||
return; | ||
return processGetMetrics(req,res); | ||
}else if(req.url.startsWith(pathLogout)){ | ||
@@ -257,0 +350,0 @@ processLogout(req,res); |
@@ -52,2 +52,5 @@ /** | ||
// If set to true via options, track only API defined in swagger spec | ||
this.swaggerOnly = false; | ||
// Core statistics | ||
@@ -140,2 +143,6 @@ this.coreStats = new swsCoreStats(); | ||
if(swsUtil.supportedOptions.swaggerOnly in swsOptions) { | ||
this.swaggerOnly = swsUtil.supportedOptions.swaggerOnly; | ||
} | ||
}; | ||
@@ -247,16 +254,17 @@ | ||
// Express parameters: req.param and req.query | ||
if ("params" in req) { | ||
if (req.hasOwnProperty("params")) { | ||
rrr.http.request.params = {}; | ||
for(var pname in req.params ){ | ||
rrr.http.request.params[pname] = swsUtil.swsStringValue(req.params[pname]); | ||
} | ||
swsUtil.swsStringRecursive(rrr.http.request.params, req.params); | ||
} | ||
if ("query" in req) { | ||
if (req.hasOwnProperty("query")) { | ||
rrr.http.request.query = {}; | ||
for(var pname in req.query ){ | ||
rrr.http.request.query[pname] = swsUtil.swsStringValue(req.query[pname]); | ||
} | ||
swsUtil.swsStringRecursive(rrr.http.request.query, req.query); | ||
} | ||
if (req.hasOwnProperty("body")) { | ||
rrr.http.request.body = {}; | ||
swsUtil.swsStringRecursive(rrr.http.request.body, req.body); | ||
} | ||
return rrr; | ||
@@ -309,2 +317,3 @@ }; | ||
req.sws.track = true; | ||
req.sws.startts = ts; | ||
@@ -320,2 +329,8 @@ req.sws.timelineid = Math.floor( ts/ this.timeline.settings.bucket_duration ); | ||
// if no match, and tracking of non-swagger requests is disabled, return | ||
if( !req.sws.match && this.swaggerOnly){ | ||
req.sws.track = false; | ||
return; | ||
} | ||
// Core stats | ||
@@ -322,0 +337,0 @@ this.coreStats.countRequest(req, res); |
@@ -92,4 +92,7 @@ /* | ||
// Default is empty (disabled). | ||
elasticsearch : "elasticsearch" | ||
elasticsearch : "elasticsearch", | ||
// Set to true to track only requests defined in swagger spec. Default false. | ||
swaggerOnly : "swaggerOnly" | ||
}; | ||
@@ -189,2 +192,3 @@ | ||
// returns string value of argument, depending on typeof | ||
@@ -210,2 +214,39 @@ module.exports.swsStringValue = function (val) { | ||
// returns object key values as string recursively | ||
module.exports.swsStringRecursive = function (output, val) { | ||
if (typeof val === "object" && !Array.isArray(val)) { | ||
for (var key in val) { | ||
output[key] = this.swsStringRecursive(output[key], val[key]); | ||
} | ||
} else { | ||
output = this.swsStringValue(val); | ||
} | ||
return output; | ||
} | ||
// recursively cast properties of nested objects to strings | ||
module.exports.swsCastStringR = function (val) { | ||
switch( typeof val ){ | ||
case "string": return val; | ||
case "boolean": | ||
case "number": | ||
return val.toString(); | ||
case "object": | ||
var casted = {}; | ||
for(var prop in val){ | ||
casted[prop] = module.exports.swsCastStringR(val[prop]); | ||
} | ||
return casted; | ||
} | ||
return ''; | ||
}; | ||
// returns string value of argument, depending on typeof | ||
module.exports.swsNumValue = function (val) { | ||
var res = Number(val); | ||
return Number.isNaN(res) ? 0: res; | ||
}; | ||
// Calculate CPU Usage Percentage | ||
@@ -212,0 +253,0 @@ module.exports.swsCPUUsagePct = function(starthrtime, startusage) { |
{ | ||
"name": "swagger-stats", | ||
"version": "0.95.2", | ||
"version": "0.95.5", | ||
"description": "API Telemetry and APM. Trace API calls and Monitor API performance, health and usage statistics in Node.js Microservices, based on express routes and Swagger (Open API) specification", | ||
@@ -53,4 +53,4 @@ "main": "lib/index.js", | ||
"path-to-regexp": "^2.1.0", | ||
"prom-client": "^10.2.2", | ||
"request": "^2.83.0", | ||
"prom-client": "^11.0.0", | ||
"request": "^2.85.0", | ||
"uuid": "^3.1.0" | ||
@@ -66,3 +66,3 @@ }, | ||
"chosen-js": "^1.8.2", | ||
"coveralls": "^2.13.3", | ||
"coveralls": "^3.0.0", | ||
"cross-env": "^5.1.1", | ||
@@ -69,0 +69,0 @@ "css-loader": "^0.28.7", |
@@ -201,2 +201,12 @@ <p align="center"> | ||
#### v0.95.5 | ||
* [feature] Allow onAuthenticate to be asynchronous [#31](https://github.com/slanatech/swagger-stats/issues/31) | ||
* [feature] Prevent tracking of specific routes [#36](https://github.com/slanatech/swagger-stats/issues/36) | ||
* [feature] Support for extracting request body [#38](https://github.com/slanatech/swagger-stats/issues/38) | ||
Thanks to [DavisJaunzems](https://github.com/DavisJaunzems)! | ||
#### v0.95.0 | ||
@@ -203,0 +213,0 @@ |
@@ -15,3 +15,3 @@ { | ||
"version": 104, | ||
"version": 107, | ||
"mappings": { | ||
@@ -47,2 +47,10 @@ | ||
{ | ||
"reqbody": { | ||
"path_match": "http.request.body.*", | ||
"mapping": { | ||
"type": "keyword" | ||
} | ||
} | ||
}, | ||
{ | ||
"resheaders": { | ||
@@ -62,2 +70,18 @@ "path_match": "http.response.headers.*", | ||
} | ||
}, | ||
{ | ||
"attrs": { | ||
"path_match": "attrs.*", | ||
"mapping": { | ||
"type": "keyword" | ||
} | ||
} | ||
}, | ||
{ | ||
"attrsint": { | ||
"path_match": "attrsint.*", | ||
"mapping": { | ||
"type": "long" | ||
} | ||
} | ||
} | ||
@@ -64,0 +88,0 @@ ], |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
13309792
438
22341
284
+ Addedprom-client@11.5.3(transitive)
- Removedprom-client@10.2.3(transitive)
Updatedprom-client@^11.0.0
Updatedrequest@^2.85.0