{"_id":"@useparagon/swagger-stats","_rev":"11-43081b99f8b87be4dc787229d1d7312b","name":"@useparagon/swagger-stats","dist-tags":{"latest":"1.0.2"},"versions":{"0.99.7":{"name":"@useparagon/swagger-stats","version":"0.99.7","keywords":["api","observability","telemetry","node","express","koa","hapi","fastify","rest","statistics","monitoring","alerting","swagger","openapi","schema","prometheus","metrics","elasticsearch","kibana","grafana"],"author":{"name":"https://github.com/sv2"},"license":"MIT","_id":"@useparagon/swagger-stats@0.99.7","maintainers":[{"name":"raul-paragon","email":"raul.gomez@useparagon.com"},{"name":"ethan-paragon","email":"ethan@useparagon.com"},{"name":"artavia-paragon","email":"andres.artavia@useparagon.com"},{"name":"tai-paragon","email":"tai@useparagon.com"},{"name":"anakshiant-p","email":"anand@useparagon.com"},{"name":"luis-ramirez","email":"luis.ramirez@useparagon.com"},{"name":"paragonbot","email":"services@useparagon.com"},{"name":"ted-paragon","email":"ted.oconnor@useparagon.com"},{"name":"adriantucci-paragon","email":"adrian.tucci@useparagon.com"},{"name":"francisco.rossi","email":"francisco.rossi@useparagon.com"},{"name":"carlos.garcia506","email":"carlos.garcia@useparagon.com"},{"name":"ahasseyp","email":"albert.hassey@useparagon.com"},{"name":"loren.sanz","email":"loren.sanz@useparagon.com"},{"name":"deepanshu-pg","email":"deepanshu@useparagon.com"},{"name":"nautidpk","email":"deepak@useparagon.com"},{"name":"sunny9899","email":"suryansh.pajiala@useparagon.com"},{"name":"nipun.dawar","email":"nipun.dawar@useparagon.com"},{"name":"juanpa-a","email":"juan.ascencio@useparagon.com"},{"name":"vikash_paragon","email":"vikash.kumar@useparagon.com"},{"name":"rahulgoyal","email":"rahul.goyal@useparagon.com"},{"name":"richard-paragon","email":"richard.watson@useparagon.com"},{"name":"anuragbhati","email":"anurag.bhati@useparagon.com"},{"name":"shivam_kumar027","email":"shivam.kumar@useparagon.com"},{"name":"abhisheksharma201","email":"abhishek.sharma@useparagon.com"},{"name":"ayushparagon","email":"ayush.mishra@useparagon.com"},{"name":"ishmaelparagon","email":"ishmael@useparagon.com"},{"name":"ejimenez-paragon","email":"enger.jimenez@useparagon.com"},{"name":"ian.ramirez","email":"ian.ramirez@useparagon.com"},{"name":"richardbidin-paragon","email":"richard.bidin@useparagon.com"}],"homepage":"http://swaggerstats.io","bugs":{"url":"https://github.com/slanatech/swagger-stats/issues","email":"sv2@slana.tech"},"dist":{"shasum":"01b71a75c66ac1f4bbe88a0b3caa284dc05a3021","tarball":"https://registry.npmjs.org/@useparagon/swagger-stats/-/swagger-stats-0.99.7.tgz","fileCount":90,"integrity":"sha512-NQcRjk1CX0iWqYveiSivzg6ds4DQ6fm/D90vV4XFNPc/GD1PuTVMZ6oCRMp/XDLxExmTYWF0m7P7aJYpPQNTlA==","signatures":[{"sig":"MEUCIE1Thegpd2YMjDrQYEyxON9OaeqInSOMm7Agn1pE+k5IAiEA9n2DUpZ0o0oVLe/qdMkKiEwGL+HYbQPc0zZRqOAIr0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5264973},"main":"lib/index.js","gitHead":"6370130440c429e4940f71c9d2bf4a70a7193227","scripts":{"test":"npm run testExpress && npm run testHapi && npm run testFastify && npm run testRestify && npm run coverage-report","build":"npm run copy:ux","start":"node examples/testapp/testapp.js","cov000":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000 mocha --delay --exit test/000_baseline.js","cov010":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/010 mocha --delay --exit test/010_swsapistats.js","cov100":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100 mocha --delay --exit test/100_method.js","cov200":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200 mocha --delay --exit test/200_apicore.js","cov300":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300 mocha --delay --exit test/300_timeline.js","cov400":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400 mocha --delay --exit test/400_auth.js","cov500":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/500 mocha --delay --exit test/500_elastic.js","copy:ux":"ncp node_modules/swagger-stats-ux/dist ux","cov000f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000f mocha --delay --exit test/000_baseline.js","cov000h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000h mocha --delay --exit test/000_baseline.js","cov000r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000f mocha --delay --exit test/000_baseline.js","cov100f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100f mocha --delay --exit test/100_method.js","cov100h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100h mocha --delay --exit test/100_method.js","cov100r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100f mocha --delay --exit test/100_method.js","cov200f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200f mocha --delay --exit test/200_apicore.js","cov200h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200h mocha --delay --exit test/200_apicore.js","cov200r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200f mocha --delay --exit test/200_apicore.js","cov300f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300f mocha --delay --exit test/300_timeline.js","cov300h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300h mocha --delay --exit test/300_timeline.js","cov300r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300f mocha --delay --exit test/300_timeline.js","cov400f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400f mocha --delay --exit test/400_auth.js","cov400h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400h mocha --delay --exit test/400_auth.js","cov400r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400f mocha --delay --exit test/400_auth.js","cov500f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/500f mocha --delay --exit test/500_elastic.js","cov500h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/500h mocha --delay --exit test/500_elastic.js","covHapi":"npm run delay1s && npm run cov000h && npm run cov100h && npm run cov200h && npm run cov300h && npm run cov400h && npm run cov500h && npm run testappstop","delay1s":"mocha --delay --exit test/delay.js","testHapi":"concurrently -k --success first \"npm run hapitestapp\" \"npm run covHapi\"","specstest":"mocha test/specstest/swaggerspecstest.js","covFastify":"npm run delay1s && npm run cov000f && npm run cov100f && npm run cov200f && npm run cov300f && npm run cov400f && npm run cov500f && npm run testappstop","covRestify":"npm run delay1s && npm run cov000r && npm run cov100r && npm run cov200r && npm run cov300r && npm run cov400r && npm run testappstop","hapitestapp":"cross-env SWS_AUTHTEST_MAXAGE=2 nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/hapitestapp node examples/hapijstest/hapijstest.js","testExpress":"npm run cov000 && npm run cov010 && npm run cov100 && npm run cov200 && npm run cov300 && npm run cov400 && npm run cov500","testFastify":"concurrently -k --success first \"npm run fastifytestapp\" \"npm run covFastify\"","testRestify":"concurrently -k --success first \"npm run restifytestapp\" \"npm run covRestify\"","testappstop":"mocha --delay --exit test/stoptestapp.js","fastifytestapp":"cross-env SWS_AUTHTEST_MAXAGE=2 nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/fastifytestapp node examples/fastify/fasifytest.js","restifytestapp":"cross-env SWS_AUTHTEST_MAXAGE=2 nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/restifytestapp node examples/restify/restifytest.js","coverage-report":"istanbul report --root ./coverage --dir ./coverage-report lcov"},"_npmUser":{"name":"artavia-paragon","email":"andres.artavia@useparagon.com"},"repository":{"url":"git+https://github.com/slanatech/swagger-stats.git","type":"git"},"_npmVersion":"10.5.0","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","directories":{"lib":"lib","test":"test","example":"examples"},"_nodeVersion":"18.20.2","dependencies":{"qs":"^6.11.2","send":"^0.18.0","uuid":"^9.0.0","axios":"^1.4.0","debug":"^4.3.4","moment":"^2.29.4","cookies":"^0.8.0","basic-auth":"^2.0.1","path-to-regexp":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"q":"^1.5.1","ncp":"^2.0.0","nyc":"^15.1.0","chai":"^4.3.7","cuid":"^3.0.0","mocha":"^10.2.0","should":"^13.2.3","express":"^4.18.2","fastify":"^4.17.0","request":"^2.88.2","restify":"^11.1.0","chokidar":"^3.5.3","istanbul":"^0.4.5","coveralls":"^3.1.1","cross-env":"^7.0.3","supertest":"^6.3.3","@hapi/hapi":"^21.3.2","@hapi/inert":"^7.1.0","body-parser":"^1.20.2","prom-client":"^14.2.0","concurrently":"^8.0.1","serve-static":"^1.15.0","serve-favicon":"^2.5.0","swagger-parser":"^10.0.3","fastify-express":"^0.4.0","swagger-stats-ux":"^0.95.29"},"peerDependencies":{"prom-client":">= 10 <= 14"},"_npmOperationalInternal":{"tmp":"tmp/swagger-stats_0.99.7_1746744945125_0.8014277088031814","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@useparagon/swagger-stats","version":"1.0.1","keywords":["api","observability","telemetry","node","express","koa","hapi","fastify","rest","statistics","monitoring","alerting","swagger","openapi","schema","prometheus","metrics","elasticsearch","kibana","grafana"],"author":{"name":"https://github.com/sv2"},"license":"MIT","_id":"@useparagon/swagger-stats@1.0.1","maintainers":[{"name":"raul-paragon","email":"raul.gomez@useparagon.com"},{"name":"ethan-paragon","email":"ethan@useparagon.com"},{"name":"artavia-paragon","email":"andres.artavia@useparagon.com"},{"name":"tai-paragon","email":"tai@useparagon.com"},{"name":"anakshiant-p","email":"anand@useparagon.com"},{"name":"luis-ramirez","email":"luis.ramirez@useparagon.com"},{"name":"paragonbot","email":"services@useparagon.com"},{"name":"ted-paragon","email":"ted.oconnor@useparagon.com"},{"name":"adriantucci-paragon","email":"adrian.tucci@useparagon.com"},{"name":"francisco.rossi","email":"francisco.rossi@useparagon.com"},{"name":"carlos.garcia506","email":"carlos.garcia@useparagon.com"},{"name":"ahasseyp","email":"albert.hassey@useparagon.com"},{"name":"loren.sanz","email":"loren.sanz@useparagon.com"},{"name":"deepanshu-pg","email":"deepanshu@useparagon.com"},{"name":"nautidpk","email":"deepak@useparagon.com"},{"name":"sunny9899","email":"suryansh.pajiala@useparagon.com"},{"name":"nipun.dawar","email":"nipun.dawar@useparagon.com"},{"name":"juanpa-a","email":"juan.ascencio@useparagon.com"},{"name":"vikash_paragon","email":"vikash.kumar@useparagon.com"},{"name":"rahulgoyal","email":"rahul.goyal@useparagon.com"},{"name":"richard-paragon","email":"richard.watson@useparagon.com"},{"name":"anuragbhati","email":"anurag.bhati@useparagon.com"},{"name":"shivam_kumar027","email":"shivam.kumar@useparagon.com"},{"name":"abhisheksharma201","email":"abhishek.sharma@useparagon.com"},{"name":"ayushparagon","email":"ayush.mishra@useparagon.com"},{"name":"ishmaelparagon","email":"ishmael@useparagon.com"},{"name":"ejimenez-paragon","email":"enger.jimenez@useparagon.com"},{"name":"ian.ramirez","email":"ian.ramirez@useparagon.com"},{"name":"richardbidin-paragon","email":"richard.bidin@useparagon.com"}],"homepage":"http://swaggerstats.io","bugs":{"url":"https://github.com/slanatech/swagger-stats/issues","email":"sv2@slana.tech"},"dist":{"shasum":"c0ec544092e41e933be87700503abc31e15c1591","tarball":"https://registry.npmjs.org/@useparagon/swagger-stats/-/swagger-stats-1.0.1.tgz","fileCount":90,"integrity":"sha512-zoK43BGtxe0yXhLHsYRsPUn6P+V+6DLpxru+I0/6ns40kOlWNIukHoDUHoQQJMtmgq+cpgHU29W/dLAl4Eu08g==","signatures":[{"sig":"MEUCIQCSsT27HKz3Oe7g2zw0uqBIX67dC2ynGUne0Ms6GEpzxAIgVrhYwgO0+2+OUeOG07LE8hn8YedDBdds0tfknbKG0Mg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5266184},"main":"lib/index.js","gitHead":"e548dc5f72a4e5f6ed54dab4f54cf187784547b1","scripts":{"test":"npm run testExpress && npm run testHapi && npm run testFastify && npm run testRestify && npm run coverage-report","build":"npm run copy:ux","start":"node examples/testapp/testapp.js","cov000":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000 mocha --delay --exit test/000_baseline.js","cov010":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/010 mocha --delay --exit test/010_swsapistats.js","cov100":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100 mocha --delay --exit test/100_method.js","cov200":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200 mocha --delay --exit test/200_apicore.js","cov300":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300 mocha --delay --exit test/300_timeline.js","cov400":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400 mocha --delay --exit test/400_auth.js","cov500":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/500 mocha --delay --exit test/500_elastic.js","copy:ux":"ncp node_modules/swagger-stats-ux/dist ux","cov000f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000f mocha --delay --exit test/000_baseline.js","cov000h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000h mocha --delay --exit test/000_baseline.js","cov000r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000f mocha --delay --exit test/000_baseline.js","cov100f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100f mocha --delay --exit test/100_method.js","cov100h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100h mocha --delay --exit test/100_method.js","cov100r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100f mocha --delay --exit test/100_method.js","cov200f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200f mocha --delay --exit test/200_apicore.js","cov200h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200h mocha --delay --exit test/200_apicore.js","cov200r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200f mocha --delay --exit test/200_apicore.js","cov300f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300f mocha --delay --exit test/300_timeline.js","cov300h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300h mocha --delay --exit test/300_timeline.js","cov300r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300f mocha --delay --exit test/300_timeline.js","cov400f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400f mocha --delay --exit test/400_auth.js","cov400h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400h mocha --delay --exit test/400_auth.js","cov400r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400f mocha --delay --exit test/400_auth.js","cov500f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/500f mocha --delay --exit test/500_elastic.js","cov500h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/500h mocha --delay --exit test/500_elastic.js","covHapi":"npm run delay1s && npm run cov000h && npm run cov100h && npm run cov200h && npm run cov300h && npm run cov400h && npm run cov500h && npm run testappstop","delay1s":"mocha --delay --exit test/delay.js","testHapi":"concurrently -k --success first \"npm run hapitestapp\" \"npm run covHapi\"","specstest":"mocha test/specstest/swaggerspecstest.js","covFastify":"npm run delay1s && npm run cov000f && npm run cov100f && npm run cov200f && npm run cov300f && npm run cov400f && npm run cov500f && npm run testappstop","covRestify":"npm run delay1s && npm run cov000r && npm run cov100r && npm run cov200r && npm run cov300r && npm run cov400r && npm run testappstop","hapitestapp":"cross-env SWS_AUTHTEST_MAXAGE=2 nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/hapitestapp node examples/hapijstest/hapijstest.js","testExpress":"npm run cov000 && npm run cov010 && npm run cov100 && npm run cov200 && npm run cov300 && npm run cov400 && npm run cov500","testFastify":"concurrently -k --success first \"npm run fastifytestapp\" \"npm run covFastify\"","testRestify":"concurrently -k --success first \"npm run restifytestapp\" \"npm run covRestify\"","testappstop":"mocha --delay --exit test/stoptestapp.js","fastifytestapp":"cross-env SWS_AUTHTEST_MAXAGE=2 nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/fastifytestapp node examples/fastify/fasifytest.js","restifytestapp":"cross-env SWS_AUTHTEST_MAXAGE=2 nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/restifytestapp node examples/restify/restifytest.js","coverage-report":"istanbul report --root ./coverage --dir ./coverage-report lcov"},"_npmUser":{"name":"artavia-paragon","email":"andres.artavia@useparagon.com"},"repository":{"url":"git+https://github.com/slanatech/swagger-stats.git","type":"git"},"_npmVersion":"10.5.0","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","directories":{"lib":"lib","test":"test","example":"examples"},"_nodeVersion":"18.20.2","dependencies":{"qs":"^6.11.2","send":"^0.18.0","uuid":"^9.0.0","axios":"^1.4.0","debug":"^4.3.4","moment":"^2.29.4","cookies":"^0.8.0","basic-auth":"^2.0.1","path-to-regexp":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"q":"^1.5.1","ncp":"^2.0.0","nyc":"^15.1.0","chai":"^4.3.7","cuid":"^3.0.0","mocha":"^10.2.0","should":"^13.2.3","express":"^4.18.2","fastify":"^4.17.0","request":"^2.88.2","restify":"^11.1.0","chokidar":"^3.5.3","istanbul":"^0.4.5","coveralls":"^3.1.1","cross-env":"^7.0.3","supertest":"^6.3.3","@hapi/hapi":"^21.3.2","@hapi/inert":"^7.1.0","body-parser":"^1.20.2","prom-client":"^14.2.0","concurrently":"^8.0.1","serve-static":"^1.15.0","serve-favicon":"^2.5.0","swagger-parser":"^10.0.3","fastify-express":"^0.4.0","swagger-stats-ux":"^0.95.29"},"peerDependencies":{"prom-client":">= 10 <= 14"},"_npmOperationalInternal":{"tmp":"tmp/swagger-stats_1.0.1_1746746511899_0.8793941175481816","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@useparagon/swagger-stats","version":"1.0.2","keywords":["api","observability","telemetry","node","express","koa","hapi","fastify","rest","statistics","monitoring","alerting","swagger","openapi","schema","prometheus","metrics","elasticsearch","kibana","grafana"],"author":{"name":"https://github.com/sv2"},"license":"MIT","_id":"@useparagon/swagger-stats@1.0.2","maintainers":[{"name":"raul-paragon","email":"raul.gomez@useparagon.com"},{"name":"ethan-paragon","email":"ethan@useparagon.com"},{"name":"artavia-paragon","email":"andres.artavia@useparagon.com"},{"name":"tai-paragon","email":"tai@useparagon.com"},{"name":"anakshiant-p","email":"anand@useparagon.com"},{"name":"luis-ramirez","email":"luis.ramirez@useparagon.com"},{"name":"paragonbot","email":"services@useparagon.com"},{"name":"ted-paragon","email":"ted.oconnor@useparagon.com"},{"name":"adriantucci-paragon","email":"adrian.tucci@useparagon.com"},{"name":"francisco.rossi","email":"francisco.rossi@useparagon.com"},{"name":"carlos.garcia506","email":"carlos.garcia@useparagon.com"},{"name":"ahasseyp","email":"albert.hassey@useparagon.com"},{"name":"loren.sanz","email":"loren.sanz@useparagon.com"},{"name":"deepanshu-pg","email":"deepanshu@useparagon.com"},{"name":"nautidpk","email":"deepak@useparagon.com"},{"name":"sunny9899","email":"suryansh.pajiala@useparagon.com"},{"name":"nipun.dawar","email":"nipun.dawar@useparagon.com"},{"name":"juanpa-a","email":"juan.ascencio@useparagon.com"},{"name":"vikash_paragon","email":"vikash.kumar@useparagon.com"},{"name":"rahulgoyal","email":"rahul.goyal@useparagon.com"},{"name":"richard-paragon","email":"richard.watson@useparagon.com"},{"name":"anuragbhati","email":"anurag.bhati@useparagon.com"},{"name":"shivam_kumar027","email":"shivam.kumar@useparagon.com"},{"name":"abhisheksharma201","email":"abhishek.sharma@useparagon.com"},{"name":"ayushparagon","email":"ayush.mishra@useparagon.com"},{"name":"ishmaelparagon","email":"ishmael@useparagon.com"},{"name":"ejimenez-paragon","email":"enger.jimenez@useparagon.com"},{"name":"ian.ramirez","email":"ian.ramirez@useparagon.com"},{"name":"richardbidin-paragon","email":"richard.bidin@useparagon.com"}],"homepage":"http://swaggerstats.io","bugs":{"url":"https://github.com/slanatech/swagger-stats/issues","email":"sv2@slana.tech"},"dist":{"shasum":"f82f21cfef77fa9ba61b8c379113f46b8652e78d","tarball":"https://registry.npmjs.org/@useparagon/swagger-stats/-/swagger-stats-1.0.2.tgz","fileCount":90,"integrity":"sha512-uuk6JRLbWaWpymam0gL4SD1jjPn++2779P/booJtz3+Nxdg6uGOmktBRb8jatg6FWYUskhGrURXXHH398xv9zw==","signatures":[{"sig":"MEQCIBqY2CTQDPz8dZjfR8s7VLNllKhc75cbQrWzLnTMtHqOAiAKdDA2b2PbkHGXgpU1dzXw9JIutO0BJUaMJGBCx5d4DA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5272913},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"32c7bb226fcaaf1677b4ac3b1d252ed2f28764cf","scripts":{"test":"npm run testExpress && npm run testHapi && npm run testFastify && npm run testRestify && npm run coverage-report","build":"npm run copy:ux","start":"node example/app.js","cov000":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000 mocha --delay --exit test/000_baseline.js","cov010":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/010 mocha --delay --exit test/010_swsapistats.js","cov100":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100 mocha --delay --exit test/100_method.js","cov200":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200 mocha --delay --exit test/200_apicore.js","cov300":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300 mocha --delay --exit test/300_timeline.js","cov400":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400 mocha --delay --exit test/400_auth.js","cov500":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/500 mocha --delay --exit test/500_elastic.js","copy:ux":"ncp node_modules/swagger-stats-ux/dist ux","cov000f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000f mocha --delay --exit test/000_baseline.js","cov000h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000h mocha --delay --exit test/000_baseline.js","cov000r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/000f mocha --delay --exit test/000_baseline.js","cov100f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100f mocha --delay --exit test/100_method.js","cov100h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100h mocha --delay --exit test/100_method.js","cov100r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/100f mocha --delay --exit test/100_method.js","cov200f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200f mocha --delay --exit test/200_apicore.js","cov200h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200h mocha --delay --exit test/200_apicore.js","cov200r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/200f mocha --delay --exit test/200_apicore.js","cov300f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300f mocha --delay --exit test/300_timeline.js","cov300h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300h mocha --delay --exit test/300_timeline.js","cov300r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/300f mocha --delay --exit test/300_timeline.js","cov400f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400f mocha --delay --exit test/400_auth.js","cov400h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400h mocha --delay --exit test/400_auth.js","cov400r":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/400f mocha --delay --exit test/400_auth.js","cov500f":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/500f mocha --delay --exit test/500_elastic.js","cov500h":"nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/500h mocha --delay --exit test/500_elastic.js","covHapi":"npm run delay1s && npm run cov000h && npm run cov100h && npm run cov200h && npm run cov300h && npm run cov400h && npm run cov500h && npm run testappstop","delay1s":"mocha --delay --exit test/delay.js","testHapi":"concurrently -k --success first \"npm run hapitestapp\" \"npm run covHapi\"","quickload":"artillery quick --duration 120 --rate 70 -n 20 http://localhost:3040/v2/paramstest/200/and/OK","specstest":"mocha test/specstest/swaggerspecstest.js","covFastify":"npm run delay1s && npm run cov000f && npm run cov100f && npm run cov200f && npm run cov300f && npm run cov400f && npm run cov500f && npm run testappstop","covRestify":"npm run delay1s && npm run cov000r && npm run cov100r && npm run cov200r && npm run cov300r && npm run cov400r && npm run testappstop","hapitestapp":"cross-env SWS_AUTHTEST_MAXAGE=2 nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/hapitestapp node examples/hapijstest/hapijstest.js","testExpress":"npm run cov000 && npm run cov010 && npm run cov100 && npm run cov200 && npm run cov300 && npm run cov400 && npm run cov500","testFastify":"concurrently -k --success first \"npm run fastifytestapp\" \"npm run covFastify\"","testRestify":"concurrently -k --success first \"npm run restifytestapp\" \"npm run covRestify\"","testappstop":"mocha --delay --exit test/stoptestapp.js","fastifytestapp":"cross-env SWS_AUTHTEST_MAXAGE=2 nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/fastifytestapp node examples/fastify/fasifytest.js","restifytestapp":"cross-env SWS_AUTHTEST_MAXAGE=2 nyc --reporter=lcov --reporter=html --reporter=json --reporter=text --report-dir=coverage/restifytestapp node examples/restify/restifytest.js","coverage-report":"istanbul report --root ./coverage --dir ./coverage-report lcov"},"_npmUser":{"name":"nautidpk","email":"deepak@useparagon.com"},"repository":{"url":"git+https://github.com/slanatech/swagger-stats.git","type":"git"},"_npmVersion":"10.2.3","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","directories":{},"_nodeVersion":"18.19.0","dependencies":{"qs":"^6.10.1","send":"^0.17.1","uuid":"^8.3.2","debug":"^4.3.1","moment":"^2.29.1","cookies":"^0.8.0","request":"^2.88.2","basic-auth":"^2.0.1","path-to-regexp":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"q":"^1.5.1","ncp":"^2.0.0","nyc":"^15.1.0","chai":"^4.1.2","cuid":"^2.1.8","mocha":"^8.3.2","should":"^13.2.3","express":"^4.17.1","fastify":"^3.14.1","restify":"^8.5.1","chokidar":"^3.5.1","istanbul":"^0.4.5","artillery":"^1.6.2","coveralls":"^3.1.0","cross-env":"^7.0.3","supertest":"^6.1.3","@hapi/hapi":"^20.1.2","@hapi/inert":"^6.0.3","body-parser":"^1.18.2","prom-client":"^13.1.0","concurrently":"^6.2.0","serve-static":"^1.13.1","serve-favicon":"^2.4.5","swagger-parser":"^10.0.2","fastify-express":"^0.3.2","swagger-stats-ux":"^0.95.29"},"peerDependencies":{"prom-client":">= 10 <= 13"},"_npmOperationalInternal":{"tmp":"tmp/swagger-stats_1.0.2_1746787841522_0.892601410857043","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-05-08T22:55:45.124Z","modified":"2026-06-19T12:21:36.167Z","0.99.7":"2025-05-08T22:55:45.412Z","1.0.1":"2025-05-08T23:21:52.153Z","1.0.2":"2025-05-09T10:50:41.777Z"},"bugs":{"url":"https://github.com/slanatech/swagger-stats/issues","email":"sv2@slana.tech"},"author":{"name":"https://github.com/sv2"},"license":"MIT","homepage":"http://swaggerstats.io","keywords":["api","observability","telemetry","node","express","koa","hapi","fastify","rest","statistics","monitoring","alerting","swagger","openapi","schema","prometheus","metrics","elasticsearch","kibana","grafana"],"repository":{"url":"git+https://github.com/slanatech/swagger-stats.git","type":"git"},"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","maintainers":[{"email":"anand@useparagon.com","name":"anakshiant-p"},{"email":"services@useparagon.com","name":"paragonbot"},{"email":"ted.oconnor@useparagon.com","name":"ted-paragon"},{"email":"ishmael@useparagon.com","name":"ishmaelparagon"}],"readme":"<p align=\"center\">\n<img src=\"https://github.com/slanatech/swagger-stats/blob/master/screenshots/logo.png?raw=true\" alt=\"swagger-stats\"/>\n</p>\n\n# swagger-stats | API Observability\n\n\n####  [https://swaggerstats.io](https://swaggerstats.io) | [Guide](https://swaggerstats.io/guide/) \n\n[![Build Status](https://travis-ci.org/slanatech/swagger-stats.svg?branch=master)](https://travis-ci.org/slanatech/swagger-stats)\n[![Coverage Status](https://coveralls.io/repos/github/slanatech/swagger-stats/badge.svg?branch=master&dummy)](https://coveralls.io/github/slanatech/swagger-stats?branch=master&dummy)\n[![npm version](https://badge.fury.io/js/swagger-stats.svg)](https://badge.fury.io/js/swagger-stats)\n[![npm downloads](https://img.shields.io/npm/dm/swagger-stats.svg)](https://img.shields.io/npm/dm/swagger-stats)\n[![Gitter](https://badges.gitter.im/swagger-stats/community.svg)](https://gitter.im/swagger-stats/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)\n\n\n#### Trace API calls and Monitor API performance, health and usage statistics in Node.js Microservices\n\n### Express, Fastify, Koa, Hapi, Restify\n\n**swagger-stats** traces REST API requests and responses in Node.js Microservices, and collects statistics per API Operation.\n**swagger-stats** detects API operations based on express routes. You may also provide [Swagger (Open API) specification](https://swagger.io/specification/), \nand swagger-stats will match API requests with API Operations defined in swagger specification. \n\n**swagger-stats** exposes statistics and metrics per API Operation, such as `GET /myapi/:parameter`, or `GET /pet/{petId}`\n \n\n### Built-In API Telemetry \n\n> **swagger-stats** provides built-in Telemetry UX, so you may enable **swagger-stats** in your app, and start monitoring immediately, with no infrastructure requirements.\n> Navigate to `http://<your app host:port>/swagger-stats/`   \n\n\n![swagger-stats Built-In Telemetry](screenshots/swsux.gif?raw=true)\n\n\n       \n### API Analytics with [Elasticsearch](https://www.elastic.co/) and [Kibana](https://www.elastic.co/products/kibana)\n\n> **swagger-stats** stores details about each request/response in [Elasticsearch](https://www.elastic.co/), so you may use [Kibana](https://www.elastic.co/products/kibana) \n> to perform detailed analysis of API usage over time, build visualizations and dashboards\n\n\n![swagger-stats Kibana Dashboard](screenshots/kibana.gif?raw=true)\n\nSee `dashboards/elastic6` for swagger-stats Kibana visualizations and dashboards\n \n\n### Monitoring and Alerting with [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/)\n\n> **swagger-stats** exposes metrics in [Prometheus](https://prometheus.io/) format, so you may use [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/) to setup API monitoring and alerting\n\n\n![swagger-stats Prometheus Dashboard](screenshots/prometheus-dashboard-2-sm.png?raw=true)\n\n\nSee `dashboards/prometheus` for swagger-stats Grafana dashboards \n\n\n\nWith statistics and metrics exposed by **swagger-stats** you may spot problematic API endpoints, see where most of errors happens, \ncatch long-running requests, analyze details of last errors, observe trends, setup alerting. \n\n \n**swagger-stats** provides:\n* Metrics in [Prometheus](https://prometheus.io/) format, so you may use [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/) to setup API monitoring and alerting\n* Storing details about each API Request/Response in [Elasticsearch](https://www.elastic.co/), so you may use [Kibana](https://www.elastic.co/products/kibana) to perform analysis of API usage over time, build visualizations and dashboards  \n* Built-in API Telemetry UI, so you may enable swagger-stats in your app, and start monitoring right away, with no additional tools required\n* Exposing collected statistics via API, including:\n* Counts of requests and responses(total and by response class), processing time (total/avg/max), \ncontent length(total/avg/max) for requests and responses, rates for requests and errors. \nThis is baseline set of stats. \n* Statistics by Request Method: baseline stats collected for each request method\n* Timeline: baseline stats collected for each 1 minute interval during last 60 minutes. Timeline helps you to analyze trends.\n* Errors: count of responses per each error code, top \"not found\" resources, top \"server error\" resources\n* Last errors: request and response details for the last 100 errors (last 100 error responses)\n* Longest requests: request and response details for top 100 requests that took longest time to process (time to send response)\n* Tracing: Request and Response details - method, URLs, parameters, request and response headers, addresses, start/stop times and processing duration, matched API Operation info\n* API Statistics: baseline stats and parameter stats per each API Operation. API operation detected based on express routes, and based on [Swagger (Open API) specification](https://swagger.io/specification/) \n* CPU and Memory Usage of Node process\n\n\n## How to Use \n\n\n### Install \n\n```\nnpm install swagger-stats --save\n```\n\nIf you haven't added prom-client already, you should do this now. It's a [peer dependency](https://nodejs.org/en/blog/npm/peer-dependencies) of swagger-stats as of version [0.95.19](https://github.com/slanatech/swagger-stats/releases/tag/v0.95.19).\n\n```\nnpm install prom-client@12 --save\n```\n\n### Enable swagger-stats middleware in your app\n\n#### Express\n\n```javascript\nconst swStats = require('swagger-stats');\nconst apiSpec = require('swagger.json');\napp.use(swStats.getMiddleware({swaggerSpec:apiSpec}));\n```\n\n#### Fastify\n\n```javascript\nconst swStats = require('swagger-stats');\nconst apiSpec = require('swagger.json');\n\nconst fastify = require('fastify')({\n    logger: true\n});\n\n// Enable swagger-stats\nfastify.register(require('fastify-express')).then(()=>{\n    fastify.register(swStats.getFastifyPlugin, {swaggerSpec:apiSpec});\n});\n\n```\n\n\n#### Koa\n\n[`express-to-koa`](https://github.com/kaelzhang/express-to-koa) can be used which is just a simple `Promise` wrapper.\n\n```javascript\nconst swStats = require('swagger-stats');\nconst apiSpec = require('swagger.json');\nconst e2k = require('express-to-koa');\napp.use(e2k(swStats.getMiddleware({ swaggerSpec:apiSpec })));\n```\n\n#### Hapi\n\n```javascript\nconst swStats = require('swagger-stats');\nconst swaggerSpec = require('./petstore.json');\n\nconst init = async () => {\n\n    server = Hapi.server({\n        port: 3040,\n        host: 'localhost'\n    });\n\n    await server.register({\n        plugin: swStats.getHapiPlugin,\n        options: {\n             swaggerSpec:swaggerSpec\n        }\n    });\n\n    await server.start();\n    console.log('Server running on %s', server.info.uri);\n};\n````\n\n#### Restify\n\n```javascript\nconst restify = require('restify');\nconst swStats = require('swagger-stats');\nconst apiSpec = require('swagger.json');\n\nconst server = restify.createServer();\n\nserver.pre(swStats.getMiddleware({\n    swaggerSpec:apiSpec,\n}));\n```\n\nSee `/examples` for sample apps\n\n### Get Statistics with API\n\n\n```\n$ curl http://<your app host:port>/swagger-stats/stats\n{\n  \"startts\": 1501647865959,\n  \"all\": {\n    \"requests\": 7,\n    \"responses\": 7,\n    \"errors\": 3,\n    \"info\": 0,\n    \"success\": 3,\n    \"redirect\": 1,\n    \"client_error\": 2,\n    \"server_error\": 1,\n    \"total_time\": 510,\n    \"max_time\": 502,\n    \"avg_time\": 72.85714285714286,\n    \"total_req_clength\": 0,\n    \"max_req_clength\": 0,\n    \"avg_req_clength\": 0,\n    \"total_res_clength\": 692,\n    \"max_res_clength\": 510,\n    \"avg_res_clength\": 98,\n    \"req_rate\": 1.0734549915657108,\n    \"err_rate\": 0.4600521392424475\n  },\n  \"sys\": {\n    \"rss\": 59768832,\n    \"heapTotal\": 36700160,\n    \"heapUsed\": 20081776,\n    \"external\": 5291923,\n    \"cpu\": 0\n  },\n  \"name\": \"swagger-stats-testapp\",\n  \"version\": \"0.90.1\",\n  \"hostname\": \"hostname\",\n  \"ip\": \"127.0.0.1\"\n}\n```\n\nTake a look at [Documentation](https://swaggerstats.io/guide/) for more details on API and returned statistics.\n\n\n### Get Prometheus Metrics \n\n\n```\n$ curl http://<your app host:port>/swagger-stats/metrics\n# HELP api_all_request_total The total number of all API requests received\n# TYPE api_all_request_total counter\napi_all_request_total 88715\n# HELP api_all_success_total The total number of all API requests with success response\n# TYPE api_all_success_total counter\napi_all_success_total 49051\n# HELP api_all_errors_total The total number of all API requests with error response\n# TYPE api_all_errors_total counter\napi_all_errors_total 32152\n# HELP api_all_client_error_total The total number of all API requests with client error response\n# TYPE api_all_client_error_total counter\napi_all_client_error_total 22986\n\n. . . . . . . . . .  \n\n```\n\n#### Default Metrics\n\n\nTo collect [prom-client default metrics](https://github.com/siimon/prom-client#default-metrics):\n\n```javascript\nconst swaggerStats = require('swagger-stats');\nconst promClient = require('prom-client');\n\npromClient.collectDefaultMetrics();\n```\n\nSome Node.js specific metrics are included, such as event loop lag:\n\n```\n# HELP nodejs_eventloop_lag_seconds Lag of event loop in seconds.\n# TYPE nodejs_eventloop_lag_seconds gauge\nnodejs_eventloop_lag_seconds 0.000193641 1597303877464\n\n. . . . . . . . . .  \n\n```\n\n\n## Updates \n\nSee [Changelog](https://github.com/slanatech/swagger-stats/blob/master/CHANGELOG.md)\n\n## Enhancements and Bug Reports\n\nIf you find a bug, or have an enhancement in mind please post [issues](https://github.com/slanatech/swagger-stats/issues) on GitHub.\n\n## License\n \nMIT\n","readmeFilename":"README.md"}