{"_id":"@codebygarv/express-lens","_rev":"14-0729ff64b15b76d29f6121a9aa74446e","name":"@codebygarv/express-lens","dist-tags":{"latest":"2.8.1"},"versions":{"1.0.0":{"name":"@codebygarv/express-lens","version":"1.0.0","keywords":["express","monitor","monitoring","metrics","dashboard","performance"],"author":"","license":"MIT","_id":"@codebygarv/express-lens@1.0.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"dist":{"shasum":"620e4ebdfbe8c6762410ca3e2cd765d03ac81ae2","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-1.0.0.tgz","fileCount":7,"integrity":"sha512-kdqi/nobx7AancVtpjro+QJO2Lh2l+EXqDrLOkVviYd5OT4UxENUo3v3kIz59fFqJrv7HNnXmIoeUfCgjhewZg==","signatures":[{"sig":"MEYCIQDUcIA+IJoMmD7GEYOPZLWrbaWSfRL4ADgQh9tYfARzCAIhANu4wUgETpWwZlLq8odroocSa4/3ASGpvQCGJJXgUjJo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6806},"main":"index.js","gitHead":"2c9019f72ce3d9f3b85d8ceb41ce3b86fde23b97","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"_npmVersion":"10.8.2","description":"A lightweight, plug-and-play monitoring package for Express.js applications.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"express":"^4.22.2"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_1.0.0_1781842791444_0.08422458234442454","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@codebygarv/express-lens","version":"1.0.1","keywords":["express","monitor","monitoring","metrics","dashboard","performance"],"author":"","license":"MIT","_id":"@codebygarv/express-lens@1.0.1","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"dist":{"shasum":"59459723ad02f781415f4ac303b2eb5b84e9170f","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-1.0.1.tgz","fileCount":8,"integrity":"sha512-Yk4kNBwH81X84Rs0IeL4MgxqP4PywKZ7cdZJue9SyIX2FJUJoyDkduarRfmn/UOjxfyRQiRlXBhmTEr2uKEnOw==","signatures":[{"sig":"MEYCIQCKXsubrC4xIIG1JCH9s/pyPduVWJ/QLdsYqEUUPmzFSAIhAMnzhDTm8Emk+JKfS0fvKxsHjPc+CoisUr+6N+3Yr6Zb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7388},"main":"index.js","types":"index.d.ts","gitHead":"318acd3415c071c68e912d1a787b484193ad3f77","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"_npmVersion":"10.8.2","description":"A lightweight, plug-and-play monitoring package for Express.js applications.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"express":"^4.22.2"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_1.0.1_1781938749250_0.6457451140118171","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@codebygarv/express-lens","version":"2.0.0","keywords":["express","monitor","monitoring","metrics","dashboard","performance"],"author":"","license":"MIT","_id":"@codebygarv/express-lens@2.0.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"dist":{"shasum":"5903c86776415a831703aee88ff42188da413b05","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.0.0.tgz","fileCount":5,"integrity":"sha512-V7F+uIdhBMJXghBrj8yVU097FZs7u5Jk7qYRGwJFa3aCnqgvLQSL/2Fk9fCcmWwRBfY6CwD1uFtr1PoolehqXQ==","signatures":[{"sig":"MEYCIQDS10FJa3QI1uJmyRh9sUX25fQSZz+MWyouZvUomVx+6gIhAM1xJ8rDl3MxAcEWxev5O5TMnMwzEKZhLE2zKAEZNH3s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15788},"main":"./dist/index.js","types":"index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"68c66055d3cd2d5ec970c328c83aea7a2bd07cf4","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup index.js --format cjs,esm --clean"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"_npmVersion":"10.8.2","description":"A lightweight, plug-and-play monitoring package for Express.js applications.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"peerDependencies":{"express":"^4.22.2"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.0.0_1782625364303_0.31720150547249815","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@codebygarv/express-lens","version":"2.0.1","keywords":["express","monitor","monitoring","metrics","dashboard","performance"],"author":"","license":"MIT","_id":"@codebygarv/express-lens@2.0.1","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"dist":{"shasum":"5b626e1de9d9eaca1cfa1b417cbca5cb450236c3","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.0.1.tgz","fileCount":5,"integrity":"sha512-YEEoDCu0+s/lnOVEWI9q3+w6AcxF9kFhtaheq6YLf7zyw40bLPLweRiBcpn16uZXBrYvjr0wdAM0NuZ2VoImIw==","signatures":[{"sig":"MEUCIQDP4eT8CisCjM3qWuVGPoppuZAyof1E1mt6+CxcBhbODgIgXC6CHXS/uSJB4kHr/ixz8y7GDDSLXD7cUwLhcEVA4Qw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14954},"main":"./dist/index.js","types":"index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"877c68f868484f3fe73794b21009b25dbb8725ac","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"_npmVersion":"10.8.2","description":"A lightweight, plug-and-play monitoring package for Express.js applications.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"peerDependencies":{"express":"^4.22.2"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.0.1_1785042726138_0.7395229807343748","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@codebygarv/express-lens","version":"2.1.0","keywords":["express","express-middleware","morgan","morgan-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics"],"author":"","license":"MIT","_id":"@codebygarv/express-lens@2.1.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"dist":{"shasum":"3ad2cb1615a010efaedfcb11d47727d78e15ae9d","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.1.0.tgz","fileCount":5,"integrity":"sha512-n67JkM0QCJP1hJWnvjEfaCdhQXdK9sZsosAbwRI/kQ81m6/z4JNuNAaWJCX1ICfYb8vcC9zp0u5z+nJK52tTJA==","signatures":[{"sig":"MEUCIQDT2kej1zC0SxP2q2hldTK5FgnKYMyb4xZDsI6hsnGTLAIgBRsyOD7I6dOB/gO73lTb7Pqw8cBle74hE+W1kgLJDzQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25711},"main":"./dist/index.js","types":"index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"2da79f88ed05b54a8584cb1dd989686ea085c451","scripts":{"test":"node --test","build":"tsup"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"_npmVersion":"10.8.2","description":"A lightweight, plug-and-play monitoring package for Express.js applications.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"peerDependencies":{"express":"^4.22.2"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.1.0_1785044619801_0.3013859999700834","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@codebygarv/express-lens","version":"2.1.1","keywords":["express","express-middleware","morgan","morgan-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics"],"author":"","license":"MIT","_id":"@codebygarv/express-lens@2.1.1","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"dist":{"shasum":"14f8d88934e9bb1b753b32d7d242b15519f85a7c","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.1.1.tgz","fileCount":5,"integrity":"sha512-EhyzltXvchD9/UOwIdUVtvfvACU9os3hYAjpDV1UxpbTGJcuFuicQ74wasTnqMnnwgzT3XUPyjrlsGx8RWpGjw==","signatures":[{"sig":"MEUCIQDQq/OIycJZwEdtvwjkZU2wDi5mv1EGbHf9KzX6gDni9wIgLcRV51ks5xszisCCibfIsBaFHSmH5xHFFMLA9uoaO4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25711},"main":"./dist/index.js","types":"index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"152a16113e6e44c1e412a7a279fe5f4de360d3ed","scripts":{"test":"node --test","build":"tsup"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"_npmVersion":"10.8.2","description":"A lightweight, plug-and-play monitoring package for Express.js applications.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"peerDependencies":{"express":"^4.22.2"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.1.1_1785044969712_0.7047185505814841","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@codebygarv/express-lens","version":"2.2.0","keywords":["express","express-middleware","morgan","morgan-alternative","pino-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics","prometheus","prometheus-exporter","grafana","percentile-latency","p99","p95","slow-requests","dashboard","http-debugger","http-inspector","curl-generator","har-export","request-replay","alerts","threshold-alerts"],"author":{"name":"Garv Thakral","email":"garvthakral90@gmail.com"},"license":"MIT","_id":"@codebygarv/express-lens@2.2.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"homepage":"https://github.com/codebygarv/ExpressMonitor#readme","bugs":{"url":"https://github.com/codebygarv/ExpressMonitor/issues"},"dist":{"shasum":"6928ae37616d465090633a2450bb95303850fc02","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.2.0.tgz","fileCount":5,"integrity":"sha512-LFgXbAke12zqf/hyTAAjo+o04Bf/TZGn0575Yqj3DrW9Q7lLgnufCoU4iBG+JPJPMFIwTe/l9i7Li+83Jkfcbg==","signatures":[{"sig":"MEYCIQCuZ00BDVkpyZJ95ql+0UzjQ+9nGoAzS7kiKDtZaLidrQIhAJHZzZ4rwWaE/QEa/VgjCHiPR1CGw9789ZW2qfpCrIzF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90782},"main":"./dist/index.js","type":"module","types":"index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"c52d028f33bbcc922c8799bdae92ed83cb0ccc34","scripts":{"test":"node --test test/*.test.js","build":"tsup"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"repository":{"url":"git+https://github.com/codebygarv/ExpressMonitor.git","type":"git"},"_npmVersion":"10.9.8","description":"Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.2.0_1785513531326_0.7244732436791492","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@codebygarv/express-lens","version":"2.3.0","keywords":["express","express-middleware","morgan","morgan-alternative","pino-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics","prometheus","prometheus-exporter","grafana","percentile-latency","p99","p95","slow-requests","dashboard","http-debugger","http-inspector","curl-generator","har-export","request-replay","alerts","threshold-alerts"],"author":{"name":"Garv Thakral","email":"garvthakral90@gmail.com"},"license":"MIT","_id":"@codebygarv/express-lens@2.3.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"homepage":"https://github.com/codebygarv/ExpressMonitor#readme","bugs":{"url":"https://github.com/codebygarv/ExpressMonitor/issues"},"dist":{"shasum":"9bb7611713ef67e25b960ef768262173adb215e4","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.3.0.tgz","fileCount":7,"integrity":"sha512-u2Gg62ZkZO60uZArXxn2Swsb3HvjL9LYrzsgObdkmSQkfSMjgLliXdrBPy4z/AMNlzzo44TsPZ3ceiNTVkMi0g==","signatures":[{"sig":"MEUCIHvwSDe3pUjKILIF5H+rCOtojKIpUjJTBEOpvWvn4SV5AiEAq37cpXS7KacRw9Jpcju/dwcpS1RDZxHU+PdFoNz43yo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98556},"main":"./dist/index.js","type":"module","types":"index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"286db80d9c563c748cbdef4797da5a13ae4b4d90","scripts":{"test":"node --test test/*.test.js","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"repository":{"url":"git+https://github.com/codebygarv/ExpressMonitor.git","type":"git"},"_npmVersion":"10.9.8","description":"Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/node":"^26.1.2"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.3.0_1785515947772_0.891926659092861","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@codebygarv/express-lens","version":"2.4.0","keywords":["express","express-middleware","morgan","morgan-alternative","pino-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics","prometheus","prometheus-exporter","grafana","percentile-latency","p99","p95","slow-requests","dashboard","http-debugger","http-inspector","curl-generator","har-export","request-replay","alerts","threshold-alerts"],"author":{"name":"Garv Thakral","email":"garvthakral90@gmail.com"},"license":"MIT","_id":"@codebygarv/express-lens@2.4.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"homepage":"https://github.com/codebygarv/ExpressMonitor#readme","bugs":{"url":"https://github.com/codebygarv/ExpressMonitor/issues"},"dist":{"shasum":"6b96fca1b4af88df2c6ebbcf11bdccc2db2176d2","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.4.0.tgz","fileCount":27,"integrity":"sha512-zDe2TFIQ31y/9/qI+wpxc15Zj6BD+sjyxDT3rpW3eDHpnocl965fhaVej3JcpNHh6g8oTT0VX0FrkTrePZ3LYA==","signatures":[{"sig":"MEQCIEvVZZrPn3d/1FTAuQCjVFVHwxb5nPtaio0Sv3EVk+iCAiAv6qcZJNOrUvPHjk1YI++gLwaAnW/j3yESeKtRZSmEsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243262},"main":"./dist/index.js","type":"module","types":"index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./hono":{"types":"./dist/adapters/hono.d.ts","import":"./dist/adapters/hono.js","require":"./dist/adapters/hono.cjs"},"./next":{"types":"./dist/next.d.ts","import":"./dist/next.js","require":"./dist/next.cjs"},"./express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"}},"gitHead":"b61adee4191c52017f3b088bbe006ff8769c40e6","scripts":{"test":"node --import tsx --test test/*.test.js test/adapters/*.test.js","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"repository":{"url":"git+https://github.com/codebygarv/ExpressMonitor.git","type":"git"},"_npmVersion":"10.8.2","description":"Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","tsup":"^8.5.1","typescript":"^6.0.3","@types/node":"^26.1.2"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.4.0_1785518907221_0.1231792412510091","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@codebygarv/express-lens","version":"2.5.0","keywords":["express","express-middleware","morgan","morgan-alternative","pino-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics","prometheus","prometheus-exporter","grafana","percentile-latency","p99","p95","slow-requests","dashboard","http-debugger","http-inspector","curl-generator","har-export","request-replay","alerts","threshold-alerts"],"author":{"name":"Garv Thakral","email":"garvthakral90@gmail.com"},"license":"MIT","_id":"@codebygarv/express-lens@2.5.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"homepage":"https://github.com/codebygarv/ExpressMonitor#readme","bugs":{"url":"https://github.com/codebygarv/ExpressMonitor/issues"},"dist":{"shasum":"3e8b7ea4277e2d98989e419a71afbd9ab32136f2","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.5.0.tgz","fileCount":27,"integrity":"sha512-iE9obZtOfdFoMxU2wU5oJS5bzTjXQzpRJelVufCuXlRm8TFNv3OkrbUGCUIKgccRmGT57y0MNyg4MnR9lxgDHQ==","signatures":[{"sig":"MEUCIHK1IEnykf+UNNJg4lSSp8OdhdzkqQ9IHPPqYHRo67iOAiEAsxf/P3xkToOP+bERZp+pPXXvamrQ1+VHfLLxEJaLy+Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243643},"main":"./dist/index.js","type":"module","types":"index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./hono":{"types":"./dist/adapters/hono.d.ts","import":"./dist/adapters/hono.js","require":"./dist/adapters/hono.cjs"},"./next":{"types":"./dist/next.d.ts","import":"./dist/next.js","require":"./dist/next.cjs"},"./express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"}},"gitHead":"3419514efba3a3ec8b13b31dfe00563f002e8cdf","scripts":{"test":"node --import tsx --test test/*.test.js test/**/*.test.js","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"repository":{"url":"git+https://github.com/codebygarv/ExpressMonitor.git","type":"git"},"_npmVersion":"10.9.8","description":"Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","tsup":"^8.5.1","typescript":"^6.0.3","@types/node":"^26.1.2"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.5.0_1785519889577_0.05975458727754601","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"@codebygarv/express-lens","version":"2.6.0","keywords":["express","express-middleware","morgan","morgan-alternative","pino-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics","prometheus","prometheus-exporter","grafana","percentile-latency","p99","p95","slow-requests","dashboard","http-debugger","http-inspector","curl-generator","har-export","request-replay","alerts","threshold-alerts"],"author":{"name":"Garv Thakral","email":"garvthakral90@gmail.com"},"license":"MIT","_id":"@codebygarv/express-lens@2.6.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"homepage":"https://github.com/codebygarv/ExpressMonitor#readme","bugs":{"url":"https://github.com/codebygarv/ExpressMonitor/issues"},"dist":{"shasum":"45e47481307beaeca26708167062b1adeaa62f7d","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.6.0.tgz","fileCount":27,"integrity":"sha512-af++8vsrUSVRYltvcEZ+x8I/HpbytPg4J3f3Sz9iEPg1E/3Inw2ikgcMIxj5P5VIwAG5NrRkBt43Ha/Rjiiktw==","signatures":[{"sig":"MEUCIFEetc4ShJNo16ZmextbByuYITgcbiYV8haSx/WWvFyLAiEA7uxuE24cyJ1aLAWJ9fpYDCrZtcaOdw28X+ULgGGeE14=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243960},"main":"./dist/index.js","type":"module","types":"index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./hono":{"types":"./dist/adapters/hono.d.ts","import":"./dist/adapters/hono.js","require":"./dist/adapters/hono.cjs"},"./next":{"types":"./dist/next.d.ts","import":"./dist/next.js","require":"./dist/next.cjs"},"./express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"}},"gitHead":"bcc3b2165b6774f2f6f7a5a9af3558656d32c290","scripts":{"test":"node --import tsx --test test/*.test.js test/**/*.test.js","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"repository":{"url":"git+https://github.com/codebygarv/ExpressMonitor.git","type":"git"},"_npmVersion":"10.9.8","description":"Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","tsup":"^8.5.1","typescript":"^6.0.3","@types/node":"^26.1.2"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.6.0_1785520352890_0.7942561444571732","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@codebygarv/express-lens","version":"2.7.0","keywords":["express","express-middleware","morgan","morgan-alternative","pino-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics","prometheus","prometheus-exporter","grafana","percentile-latency","p99","p95","slow-requests","dashboard","http-debugger","http-inspector","curl-generator","har-export","request-replay","alerts","threshold-alerts"],"author":{"name":"Garv Thakral","email":"garvthakral90@gmail.com"},"license":"MIT","_id":"@codebygarv/express-lens@2.7.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"homepage":"https://github.com/codebygarv/ExpressMonitor#readme","bugs":{"url":"https://github.com/codebygarv/ExpressMonitor/issues"},"dist":{"shasum":"ea528a4484f73c10e5f4a3d1036f3f531138019b","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.7.0.tgz","fileCount":27,"integrity":"sha512-fqctrkuyN3GDMiHD+punN03Aw4bbC21ptp2oG+MGry/EMs/zIFOcpku7BaR5mZcG2vUNsKKw23pi83fezNIqNw==","signatures":[{"sig":"MEYCIQD+GfNoyR6kp63L6GssR+U3G8Uz9Y1akPdcRsZcLVxTcwIhAICOrTO4aelK88NiFb4csR/wyWFFX5XIJBLjVho37m1W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244369},"main":"./dist/index.js","type":"module","types":"index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./hono":{"types":"./dist/adapters/hono.d.ts","import":"./dist/adapters/hono.js","require":"./dist/adapters/hono.cjs"},"./next":{"types":"./dist/next.d.ts","import":"./dist/next.js","require":"./dist/next.cjs"},"./express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"}},"gitHead":"e23879fd3a249d911360fd31d4aac54be25d38bd","scripts":{"test":"node --import tsx --test test/*.test.js test/**/*.test.js","build":"tsup","docs:api":"typedoc","docs:dev":"vitepress dev docs","typecheck":"tsc --noEmit","docs:build":"typedoc && vitepress build docs","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"repository":{"url":"git+https://github.com/codebygarv/ExpressMonitor.git","type":"git"},"_npmVersion":"10.9.8","description":"Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","tsup":"^8.5.1","typedoc":"^0.28.20","vitepress":"^1.6.4","typescript":"^6.0.3","@types/node":"^26.1.2","typedoc-plugin-markdown":"^4.12.0","typedoc-vitepress-theme":"^1.1.3"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.7.0_1785520901281_0.7258436814512874","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"@codebygarv/express-lens","version":"2.8.0","keywords":["express","express-middleware","morgan","morgan-alternative","pino-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics","prometheus","prometheus-exporter","grafana","percentile-latency","p99","p95","slow-requests","dashboard","http-debugger","http-inspector","curl-generator","har-export","request-replay","alerts","threshold-alerts"],"author":{"name":"Garv Thakral","email":"garvthakral90@gmail.com"},"license":"MIT","_id":"@codebygarv/express-lens@2.8.0","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"homepage":"https://github.com/codebygarv/ExpressMonitor#readme","bugs":{"url":"https://github.com/codebygarv/ExpressMonitor/issues"},"dist":{"shasum":"9540d7483bb3f80f8c2a1020e0d95a50af55ca22","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.8.0.tgz","fileCount":27,"integrity":"sha512-DNxGVlNBlBCdN2g1GgU7N94KkzjUFjS2NTTFU2Jthsy+xgk9E0BmiSHaSPyQXp52zFmdid1FZxBBDeSVo1RxOg==","signatures":[{"sig":"MEQCIEYWKFkU1uo0u0EwMQI00UPz0ILjiIdUiatdcwU5i22kAiBH/jNLQD9ptx5yd8DFV4HPA6KeYvGx15CHOW5Ji3TdKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245111},"main":"./dist/index.js","type":"module","types":"index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./hono":{"types":"./dist/adapters/hono.d.ts","import":"./dist/adapters/hono.js","require":"./dist/adapters/hono.cjs"},"./next":{"types":"./dist/next.d.ts","import":"./dist/next.js","require":"./dist/next.cjs"},"./express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"}},"gitHead":"a27bd985679a3ff137da3f275b5bed0ce0572d21","scripts":{"test":"node --import tsx --test test/*.test.js test/**/*.test.js","build":"tsup","docs:api":"typedoc","docs:dev":"vitepress dev docs","typecheck":"tsc --noEmit","docs:build":"typedoc && vitepress build docs","docs:preview":"vitepress preview docs"},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"repository":{"url":"git+https://github.com/codebygarv/ExpressMonitor.git","type":"git"},"_npmVersion":"10.9.8","description":"Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","tsup":"^8.5.1","typedoc":"^0.28.20","vitepress":"^1.6.4","typescript":"^6.0.3","@types/node":"^26.1.2","typedoc-plugin-markdown":"^4.12.0","typedoc-vitepress-theme":"^1.1.3"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/express-lens_2.8.0_1785521641868_0.380568439646531","host":"s3://npm-registry-packages-npm-production"}},"2.8.1":{"name":"@codebygarv/express-lens","version":"2.8.1","type":"module","publishConfig":{"access":"public"},"description":"Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js.","main":"./dist/index.js","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"},"./hono":{"types":"./dist/adapters/hono.d.ts","import":"./dist/adapters/hono.js","require":"./dist/adapters/hono.cjs"},"./next":{"types":"./dist/next.d.ts","import":"./dist/next.js","require":"./dist/next.cjs"}},"types":"index.d.ts","scripts":{"build":"tsup","typecheck":"tsc --noEmit","test":"node --import tsx --test test/*.test.js test/**/*.test.js","docs:api":"typedoc","docs:dev":"vitepress dev docs","docs:build":"typedoc && vitepress build docs","docs:preview":"vitepress preview docs"},"repository":{"type":"git","url":"git+https://github.com/codebygarv/ExpressMonitor.git"},"bugs":{"url":"https://github.com/codebygarv/ExpressMonitor/issues"},"homepage":"https://github.com/codebygarv/ExpressMonitor#readme","keywords":["express","express-middleware","morgan","morgan-alternative","pino-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics","prometheus","prometheus-exporter","grafana","percentile-latency","p99","p95","slow-requests","dashboard","http-debugger","http-inspector","curl-generator","har-export","request-replay","alerts","threshold-alerts"],"author":{"name":"Garv Thakral","email":"garvthakral90@gmail.com"},"license":"MIT","engines":{"node":">=18"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"devDependencies":{"@types/node":"^26.1.2","tsup":"^8.5.1","tsx":"^4.23.1","typedoc":"^0.28.20","typedoc-plugin-markdown":"^4.12.0","typedoc-vitepress-theme":"^1.1.3","typescript":"^6.0.3","vitepress":"^1.6.4"},"_id":"@codebygarv/express-lens@2.8.1","gitHead":"1142b8df56c5ee28b553bdd3d94ea57d15c9e287","_nodeVersion":"24.14.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-42wQTIwoFxcvc/JjLyhq7GB9GY+69AOX/MX9AYZPcf2wvhw8U6W0j5OOef9xFrapnc3/PIxlSkAoCMLHWXtZ8w==","shasum":"4ab8d7ef8c0252f5eb40e5f5609ec45d29ae3ea2","tarball":"https://registry.npmjs.org/@codebygarv/express-lens/-/express-lens-2.8.1.tgz","fileCount":27,"unpackedSize":245111,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDRjiMkXFKBZmQ6agX5r3x1iRJOG+SJkRwp66gSQjBdewIhAOPVIOsSzqpDHHIWVp7BdlV2t2vAjXdU3b1QucsDPUKx"}]},"_npmUser":{"name":"codebygarv","email":"Garvthakral90@gmail.com"},"directories":{},"maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/express-lens_2.8.1_1785521847848_0.0003515323961886807"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-19T04:19:51.321Z","modified":"2026-07-31T18:17:28.160Z","1.0.0":"2026-06-19T04:19:51.584Z","1.0.1":"2026-06-20T06:59:09.393Z","2.0.0":"2026-06-28T05:42:44.414Z","2.0.1":"2026-07-26T05:12:06.291Z","2.1.0":"2026-07-26T05:43:39.945Z","2.1.1":"2026-07-26T05:49:29.896Z","2.2.0":"2026-07-31T15:58:51.458Z","2.3.0":"2026-07-31T16:39:07.923Z","2.4.0":"2026-07-31T17:28:27.374Z","2.5.0":"2026-07-31T17:44:49.721Z","2.6.0":"2026-07-31T17:52:33.059Z","2.7.0":"2026-07-31T18:01:41.462Z","2.8.0":"2026-07-31T18:14:02.012Z","2.8.1":"2026-07-31T18:17:28.013Z"},"bugs":{"url":"https://github.com/codebygarv/ExpressMonitor/issues"},"author":{"name":"Garv Thakral","email":"garvthakral90@gmail.com"},"license":"MIT","homepage":"https://github.com/codebygarv/ExpressMonitor#readme","keywords":["express","express-middleware","morgan","morgan-alternative","pino-alternative","logger","logging","express-logging","monitor","monitoring","metrics","apm","observability","performance","memory-monitoring","route-metrics","realtime-analytics","prometheus","prometheus-exporter","grafana","percentile-latency","p99","p95","slow-requests","dashboard","http-debugger","http-inspector","curl-generator","har-export","request-replay","alerts","threshold-alerts"],"repository":{"type":"git","url":"git+https://github.com/codebygarv/ExpressMonitor.git"},"description":"Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js.","maintainers":[{"name":"codebygarv","email":"Garvthakral90@gmail.com"}],"readme":"# @codebygarv/express-lens\n\n[![npm version](https://badge.fury.io/js/@codebygarv%2Fexpress-lens.svg)](https://badge.fury.io/js/@codebygarv%2Fexpress-lens)\n[![JSR](https://jsr.io/badges/@codebygarv/express-lens)](https://jsr.io/@codebygarv/express-lens)\n[![npm downloads](https://img.shields.io/npm/dm/@codebygarv/express-lens.svg)](https://www.npmjs.com/package/@codebygarv/express-lens)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js CI](https://github.com/codebygarv/ExpressMonitor/actions/workflows/ci.yml/badge.svg)](https://github.com/codebygarv/ExpressMonitor/actions)\n[![Docs](https://img.shields.io/badge/docs-live-brightgreen)](https://codebygarv.github.io/ExpressMonitor/)\n\n> Zero-dependency HTTP monitoring, APM metrics, percentile latencies (p50/p90/p95/p99), threshold alert callbacks, Prometheus format exporter, slow request profiler, and real-time embedded web dashboard for Express.js applications.\n\n---\n\n## ⚡ Highlights\n\n- **Native TypeScript**: Written entirely in strict TypeScript with complete auto-generated type declarations (`.d.ts`).\n- **JSR & NPM Registry**: Published to both NPM and [JSR](https://jsr.io/@codebygarv/express-lens) for Node.js, Deno, and Bun.\n- **Zero External Dependencies**: Lightweight and fast, zero extra npm package footprint.\n- **Embedded Real-Time Dashboard**: Built-in dark mode dashboard UI with Server-Sent Events (SSE) live streaming.\n- **True Percentile Latencies**: Sliding window calculation of **p50, p90, p95, and p99** response times globally and per-route.\n- **Threshold Alert Callbacks**: Trigger custom `onAlert` callbacks when error rates cross `X%`, RSS memory exceeds `Y MB`, or average latency spikes.\n- **Slow Request Profiler**: Automatically capture and profile requests exceeding `slowThresholdMs` (e.g., 500ms).\n- **Prometheus Exporter**: Serves standard Prometheus Exposition format (`text/plain; version=0.0.4`) at `/metrics` ready for Grafana & Prometheus scrapers.\n- **cURL Generator & Header Redaction**: Auto-generate cURL commands for captured requests with automatic masking of sensitive credentials (`authorization`, `cookie`, `api-key`).\n- **HAR Export & Request Replay**: Download HTTP Archive (HAR 1.2) JSON exports and replay captured HTTP requests.\n\n---\n\n## 📊 Comparison with Morgan & Pino\n\n| Feature | `morgan` | `pino-http` | `@codebygarv/express-lens` |\n| :--- | :---: | :---: | :---: |\n| **Request Logging** | Text line | JSON log | Colorized ANSI + In-Memory APM |\n| **Percentile Latencies (p50/p90/p95/p99)** | ❌ No | ❌ No | ✅ **Built-in** |\n| **Threshold Alert Callbacks (`onAlert`)** | ❌ No | ❌ No | ✅ **Built-in** |\n| **Slow Request Profiler (`slowThresholdMs`)** | ❌ No | ❌ No | ✅ **Built-in** |\n| **Prometheus Exposition Exporter (`/metrics`)** | ❌ No | ❌ No | ✅ **Built-in** |\n| **Embedded Web Dashboard (SSE Live Stream)** | ❌ No | ❌ No | ✅ **Built-in** |\n| **cURL Command Generation** | ❌ No | ❌ No | ✅ **Built-in** |\n| **HAR 1.2 Export & Request Replay** | ❌ No | ❌ No | ✅ **Built-in** |\n| **Sensitive Header Redaction** | ❌ No | ⚠️ Custom | ✅ **Automatic** |\n| **Memory Overhead** | Low | Low | Bounded Ring Buffer |\n\n---\n\n## 📦 Installation\n\n**NPM / Yarn / pnpm:**\n```bash\nnpm install @codebygarv/express-lens\nyarn add @codebygarv/express-lens\npnpm add @codebygarv/express-lens\n```\n\n**Deno / JSR:**\n```bash\ndeno add jsr:@codebygarv/express-lens\nnpx jsr add @codebygarv/express-lens\n```\n\n---\n\n## 🚀 Quick Start\n\n```javascript\nimport express from 'express';\nimport monitor, {\n  metricsHandler,\n  prometheusHandler,\n  dashboardHandler,\n} from '@codebygarv/express-lens';\n\nconst app = express();\n\n// 1. Attach Express Lens Middleware\napp.use(\n  monitor({\n    slowThresholdMs: 500, // Profile requests slower than 500ms\n    alerts: {\n      errorRateThreshold: 5, // Alert if error rate >= 5%\n      memoryThresholdMb: 500, // Alert if RSS memory >= 500MB\n      onAlert: (alert) => {\n        console.warn('🚨 EXPRESS LENS ALERT:', alert.message);\n      },\n    },\n  })\n);\n\n// 2. Mount Prometheus /metrics endpoint (for Grafana/Prometheus)\napp.get('/metrics', prometheusHandler());\n\n// 3. Mount Real-Time Web Dashboard\napp.use('/express-lens', dashboardHandler());\n\n// 4. Mount JSON metrics API endpoint\napp.get('/express-lens/json', metricsHandler());\n\n// Sample Routes\napp.get('/api/users', (req, res) => {\n  res.json([{ id: 1, name: 'Alice' }]);\n});\n\napp.get('/api/slow', async (req, res) => {\n  await new Promise((resolve) => setTimeout(resolve, 600)); // Triggers Slow Profiler\n  res.json({ status: 'done' });\n});\n\napp.listen(3000, () => {\n  console.log('🚀 Server running on http://localhost:3000');\n  console.log('📈 Dashboard live at http://localhost:3000/express-lens');\n  console.log('📊 Prometheus metrics at http://localhost:3000/metrics');\n});\n```\n\n---\n\n## 🔌 Multi-Framework Adapters\n\n`@codebygarv/express-lens` ships with dedicated framework adapters:\n\n### Fastify\n```typescript\nimport Fastify from 'fastify';\nimport { fastifyExpressLens } from '@codebygarv/express-lens/fastify';\n\nconst fastify = Fastify();\nawait fastify.register(fastifyExpressLens({ slowThresholdMs: 500 }));\n```\n\n### Hono & Edge (Cloudflare Workers, Bun, Deno)\n```typescript\nimport { Hono } from 'hono';\nimport { honoExpressLens } from '@codebygarv/express-lens/hono';\n\nconst app = new Hono();\napp.use('*', honoExpressLens({ slowThresholdMs: 500 }));\n```\n\n### Next.js (App Router)\n```typescript\n// app/api/users/route.ts\nimport { withExpressLens } from '@codebygarv/express-lens/next';\n\nasync function handler(req: Request) {\n  return Response.json({ users: [] });\n}\n\nexport const GET = withExpressLens(handler);\n\n// app/api/express-lens/[[...route]]/route.ts\nimport { dashboardRoute } from '@codebygarv/express-lens/next';\n\nexport const GET = dashboardRoute();\n```\n\n---\n\n## 🖥️ Live Web Dashboard\n\nAccess the embedded live dashboard by mounting `app.use('/express-lens', dashboardHandler())`.\n\nFeatures included in the dashboard:\n- **Live Stream Feed**: Server-Sent Events (SSE) push new requests instantly.\n- **Percentile Gauges**: Real-time display of **p50, p90, p95, and p99** latencies.\n- **Slow Requests Profiler Tab**: Dedicated view of slow HTTP operations exceeding `slowThresholdMs`.\n- **Search & Filter Toolbar**: Search traffic by method (`GET`, `POST`), URL regex, or HTTP status (`2xx`, `4xx`, `5xx`).\n- **cURL Copy & HAR Export**: Copy exact cURL strings for any request or download full HAR 1.2 JSON files.\n\n---\n\n## 📈 Prometheus Exporter (`/metrics`)\n\nExpress Lens exports standard Prometheus Exposition text (v0.0.4):\n\n```text\n# HELP http_requests_total Total number of HTTP requests processed\n# TYPE http_requests_total counter\nhttp_requests_total 142\n\n# HELP http_request_duration_seconds Summary of HTTP request durations in seconds\n# TYPE http_request_duration_seconds summary\nhttp_request_duration_seconds{quantile=\"0.5\"} 0.012500\nhttp_request_duration_seconds{quantile=\"0.9\"} 0.045000\nhttp_request_duration_seconds{quantile=\"0.95\"} 0.088000\nhttp_request_duration_seconds{quantile=\"0.99\"} 0.120000\n\n# HELP express_lens_memory_rss_bytes Process RSS memory in bytes\n# TYPE express_lens_memory_rss_bytes gauge\nexpress_lens_memory_rss_bytes 48200000\n```\n\nAdd to your `prometheus.yml` scraper configuration:\n\n```yaml\nscrape_configs:\n  - job_name: 'express-app'\n    metrics_path: '/metrics'\n    static_configs:\n      - targets: ['localhost:3000']\n```\n\n---\n\n## ⚙️ Configuration Reference\n\n```javascript\napp.use(\n  monitor({\n    logAnalytics: true, // Default: true. Console log request metrics\n    logInterval: 0, // Default: 0 (log each request). > 0 sets batched summary logging (ms)\n    colorize: true, // Colorize status codes and latency in terminal\n    ignoreRoutes: ['/health', '/metrics'], // Skip tracking for matched paths or regex\n    slowThresholdMs: 500, // Profile requests exceeding duration threshold (ms)\n    maxBodySize: 1024, // Maximum body bytes to capture per request (default: 1024 bytes)\n    maxDepth: 4, // Maximum JSON depth before collapsing inner objects\n    maxArrayItems: 10, // Maximum array items to show before truncating\n    redactHeaders: ['x-custom-token'], // Additional header names to mask as [REDACTED]\n    alerts: {\n      errorRateThreshold: 5, // Alert when error rate >= 5%\n      memoryThresholdMb: 500, // Alert when RSS memory >= 500MB\n      avgDurationThresholdMs: 1000, // Alert when average latency >= 1000ms\n      onAlert: (alert) => {\n        // Callback function triggered on breach\n        console.log(alert.type, alert.message, alert.timestamp);\n      },\n    },\n  })\n);\n```\n\n---\n\n## 📖 API Reference\n\n### `getMetrics()`\nReturns a complete JSON snapshot of all tracked metrics:\n```javascript\nimport { getMetrics } from '@codebygarv/express-lens';\nconsole.log(getMetrics());\n```\n\n### `getPercentiles(samples?)`\nReturns exact percentiles (`p50`, `p90`, `p95`, `p99`) for an array of latency numbers.\n\n### `exportHAR(title?)`\nReturns standard HTTP Archive (HAR 1.2) compliant JSON object of recent traffic.\n\n### `replayRequest(requestId, fetchFn?)`\nReplays a recorded request by its unique request ID.\n\n### `generateCurl(req)`\nGenerates copy-pasteable cURL string for a request object with redacted sensitive headers.\n\n---\n\n## 📄 License\n\n[MIT License](LICENSE) — Created with ❤️ by [Garv Thakral](https://github.com/codebygarv).\n","readmeFilename":"README.md"}