{"_id":"@axiomify/metrics","_rev":"13-28b1e310e055cf552ef0a57f40cf8a01","name":"@axiomify/metrics","dist-tags":{"next":"6.0.0-rc.2","latest":"7.1.0"},"versions":{"4.0.0":{"name":"@axiomify/metrics","version":"4.0.0","_id":"@axiomify/metrics@4.0.0","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"dist":{"shasum":"1ea0fa4435327e4b2b752b32338c9c1e99c1dadc","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-4.0.0.tgz","fileCount":6,"integrity":"sha512-69LUlKtD2MoZreZAKB7X8UCt86gVK9lQWtx7gh9O/k+2EwHwVjcrt6gu2DdiZaIIfrbnDwQea9vZLRIa/juLyA==","signatures":[{"sig":"MEYCIQCIaEASn0UxxJ5R6g/VbdbaCqGCzpqcyWG5/f0fx87RPQIhANZJboePbO8j/6jOK6Sgtwjq/5i/KTSFzbDRPn8RSEiK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12962},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"4aae91f05c0f845466d7f89b21d131298ff54d2f","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"_npmVersion":"10.9.2","description":"Prometheus-compatible observability with automatic request latency tracking, per-route metrics, and a live HTML dashboard.","directories":{},"_nodeVersion":"23.6.0","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_4.0.0_1776729195969_0.9026120283537613","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@axiomify/metrics","version":"5.0.0","_id":"@axiomify/metrics@5.0.0","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"dist":{"shasum":"50c2cc1bae4ab54c95db03c2642118c8ee1bcb8c","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-5.0.0.tgz","fileCount":6,"integrity":"sha512-gUwCEbtYUyDbf/z9CUHtmtWLixSlk2WwV/CajeBKO4RUoBw6q3bMXcQ7dmuUPlauiOhGUwrESeDJ7LolNAbJ3Q==","signatures":[{"sig":"MEUCIQDz7F5KMI4odQ9UONsKKCosWdUlhJSiGrxyS1grkcWkKAIgENzIBiHdBF7m0L84X+Oyq38xtR6MbGyJYzKc1vEIHQM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16195},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"3bbd9c5be6bf3ef40f74370b2b810bf255f5ac0a","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"_npmVersion":"10.8.2","description":"Prometheus-compatible metrics endpoint for Axiomify. Exports per-route request counts, latency, and optional WebSocket connection metrics.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_5.0.0_1778232978395_0.38955939825101993","host":"s3://npm-registry-packages-npm-production"}},"6.0.0-rc.2":{"name":"@axiomify/metrics","version":"6.0.0-rc.2","_id":"@axiomify/metrics@6.0.0-rc.2","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"dist":{"shasum":"b36873df8d3fa58ff80643d30c1e38064775a398","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-6.0.0-rc.2.tgz","fileCount":6,"integrity":"sha512-qxuaUOve/9FchF5img5TMyD5UGjCJJ7jE3h6+iOYP2ggUMopBDmOMy0cpv6EBoXpgHk+D4M3f5heD24f0atXYQ==","signatures":[{"sig":"MEQCIHHmN2J7fb55FKvfEBA1E6wGsBBET1A3bbocz+M6TZLaAiAjI83AjUyCblC3+ED5dO4H1/TFF1xMamyGbrd3iV8sMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15595},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"b2fe2efe0bf3bd6774c5dd32c5059fc57d91246a","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"_npmVersion":"10.8.2","description":"Prometheus-compatible metrics endpoint for Axiomify. Exports per-route request counts, latency, and optional WebSocket connection metrics.","directories":{},"_nodeVersion":"20.19.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/metrics_6.0.0-rc.2_1779031471551_0.5890736712035429","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"@axiomify/metrics","version":"6.0.0","author":{"url":"https://github.com/OTopman","name":"Topman","email":"okunlolatopman14@gmail.com"},"license":"MIT","_id":"@axiomify/metrics@6.0.0","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"dist":{"shasum":"b587f75a30b1011e0ac323b5120580f501078529","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-6.0.0.tgz","fileCount":6,"integrity":"sha512-kNTrzymaHMDDQKlBbRroAiZVoLVmerd2hroNKhQhZisN4RQvZ8H3kV7uBcdmUFikhtbe3XdikNeAaD20EUaeBQ==","signatures":[{"sig":"MEUCICN0EwsYqWfCEEN9xDDgJs+feNhq1DkUUWqI0J3JyxfFAiEAyJM9GgPGVWfH7rIRpYA40lerTamJ/anSwNafgiiQfyk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16676},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"8c79d9774531748e77a0496d611b27cb9cd16717","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"repository":{"url":"git+https://github.com/OTopman/axiomify.git","type":"git","directory":"packages/metrics"},"_npmVersion":"10.8.2","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_6.0.0_1779729030128_0.5285595481971419","host":"s3://npm-registry-packages-npm-production"}},"6.1.0":{"name":"@axiomify/metrics","version":"6.1.0","keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"author":{"url":"https://github.com/OTopman","name":"Topman","email":"okunlolatopman14@gmail.com"},"license":"MIT","_id":"@axiomify/metrics@6.1.0","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"dist":{"shasum":"3a6aa5cb9c476a87a3d9d1d1c902d03eca00fba7","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-6.1.0.tgz","fileCount":6,"integrity":"sha512-wkbCJ+Yx/9uLqM3si/HiAlpP7bwC/t0AmIXKLItSXgog9oH5MILbI3Jn+ZK761IESyAgVIaC9myeOv3AW5PIDw==","signatures":[{"sig":"MEQCIAv/wJtAszX/QvVgu47qCQyEAwbdU8qcMpMQ6cftSpLhAiBm4NPeWRuJB+5ln7E3IxW4h+iBxjn/6R4me8cIWxo56Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16824},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"d4c979a2857b4f2f2da9fecb4691ffebea17b3b9","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"repository":{"url":"git+https://github.com/OTopman/axiomify.git","type":"git","directory":"packages/metrics"},"_npmVersion":"10.8.2","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_6.1.0_1779988440933_0.311521295008099","host":"s3://npm-registry-packages-npm-production"}},"6.2.0":{"name":"@axiomify/metrics","version":"6.2.0","keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"author":{"url":"https://github.com/OTopman","name":"Topman","email":"okunlolatopman14@gmail.com"},"license":"MIT","_id":"@axiomify/metrics@6.2.0","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"dist":{"shasum":"d552c4f0cd30e018b98ad3c70da7f4f2336d9358","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-6.2.0.tgz","fileCount":6,"integrity":"sha512-d2LkzVEDgqy2ybleJU19eksbW3vaToSKjuVv/tge8G2bcr2ABFmLVLzj9mdj2Z3kkQ9jhAfCBCvPMvZ6UEjmMg==","signatures":[{"sig":"MEQCIGj43M7lLh/oF+C0iQgPgdhiZMtH3iRnDfWas4wKynEwAiBsA8lMfn+ltuxmSnJfefWq6pKZjtSzsnRdL1vhW/Tk6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiomify%2fmetrics@6.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17201},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"1a526aaa1f0a4281cdf8a9649c8ba82fb71a4331","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"repository":{"url":"git+https://github.com/OTopman/axiomify.git","type":"git","directory":"packages/metrics"},"_npmVersion":"10.8.2","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_6.2.0_1780239393612_0.6195459149214506","host":"s3://npm-registry-packages-npm-production"}},"6.3.0":{"name":"@axiomify/metrics","version":"6.3.0","keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"author":{"url":"https://github.com/OTopman","name":"Topman","email":"okunlolatopman14@gmail.com"},"license":"MIT","_id":"@axiomify/metrics@6.3.0","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"dist":{"shasum":"3b401e7fbc52b6c14edc08d11b8a7309277149ab","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-6.3.0.tgz","fileCount":6,"integrity":"sha512-y2mx+SeGMjXaGEs15QbpL75ElVjAowlYVI/FcnzaLpXVL543ZFY0dW7Aq8R78+sNHyRdQD/PiwEl0sj6OJJxXQ==","signatures":[{"sig":"MEYCIQCoJwtrbYF5eqZQ+4b+9ZCoRLa9pgeYFSPiYLG29oe4bAIhAJI5AGkd5ZkLr9GeSnC9IEyZCYkbUMuJSJA4Rqk1yhut","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiomify%2fmetrics@6.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19133},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"e0d74c62efac09217319c3c3daf799f07504a3b5","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"repository":{"url":"git+https://github.com/OTopman/axiomify.git","type":"git","directory":"packages/metrics"},"_npmVersion":"10.8.2","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_6.3.0_1780874327765_0.9061242920948125","host":"s3://npm-registry-packages-npm-production"}},"6.3.1":{"name":"@axiomify/metrics","version":"6.3.1","keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"author":{"url":"https://github.com/OTopman","name":"Topman","email":"okunlolatopman14@gmail.com"},"license":"MIT","_id":"@axiomify/metrics@6.3.1","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"dist":{"shasum":"58115a33777fa7350ba58e47ae2b25878983db8e","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-6.3.1.tgz","fileCount":6,"integrity":"sha512-zTkfa7UAIvD4qwWmE5BHKgxaWhCwNu0CNza5obEGSnLByoMufF+8Xm1fkbq60fcxiVAy79GD7eXlhJJy7rZ+CQ==","signatures":[{"sig":"MEYCIQCUU+8WcinkKVz7cQDyZPgyZ8vrQxjR8OWA3ucUGfq13wIhAPCFX8Zo3uoCnjV+BXSPGRffCV/e07g/z7IhWwFod+cA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiomify%2fmetrics@6.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19133},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"47fdfec5814dc151a4c897ffbd08f8b6da77c6cf","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"repository":{"url":"git+https://github.com/OTopman/axiomify.git","type":"git","directory":"packages/metrics"},"_npmVersion":"10.8.2","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_6.3.1_1781086999403_0.9553119367585823","host":"s3://npm-registry-packages-npm-production"}},"6.3.2":{"name":"@axiomify/metrics","version":"6.3.2","keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"author":{"url":"https://github.com/OTopman","name":"Topman","email":"okunlolatopman14@gmail.com"},"license":"MIT","_id":"@axiomify/metrics@6.3.2","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"dist":{"shasum":"4e12795976d00076466cf2a93818f6ff993932fd","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-6.3.2.tgz","fileCount":6,"integrity":"sha512-dL69AJf+G4xF6tTvtajFjHipX5Koqh3MEX/sITiHCy4qb/KEDQYnRe6kNSaahUyvWfsljhvKkIQYbBuLSSEW3g==","signatures":[{"sig":"MEUCIQCwy0OzNEOdF+2a8VQprEpfm5sLlngQG3Glor+sWNokuQIgFSEeif66dZ5FlSCYXvRZhrZjPnNT8qOlhyi9z8ILOco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiomify%2fmetrics@6.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19133},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"31537d5f1ae10e501f93ab2de7b44d58fca8339a","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"repository":{"url":"git+https://github.com/OTopman/axiomify.git","type":"git","directory":"packages/metrics"},"_npmVersion":"10.8.2","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_6.3.2_1781094436888_0.9878948330488517","host":"s3://npm-registry-packages-npm-production"}},"6.3.3":{"name":"@axiomify/metrics","version":"6.3.3","keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"author":{"url":"https://github.com/OTopman","name":"Topman","email":"okunlolatopman14@gmail.com"},"license":"MIT","_id":"@axiomify/metrics@6.3.3","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"dist":{"shasum":"41452d0c6670fc47238f1ec89bda684f3207914f","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-6.3.3.tgz","fileCount":6,"integrity":"sha512-av/nOhN1LYArHnYL9Y6eik0rDLHANbDRLHV53UONp+zALLz2C+Kma8/3ixnSdmDcIIAP9aSE0GvLChTOkL3cqA==","signatures":[{"sig":"MEUCIQDixQUgsPh4SizzIqqrHK6JLFKIHiykhVZ6eHCCWcw+QgIgGgKG71dx+ZePD+HR9wkjSPSkMAp1Pg0mRGCuLVTVR2k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19133},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"8c8172eaacdeb225342992693b806ab443b60d2b","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"repository":{"url":"git+https://github.com/OTopman/axiomify.git","type":"git","directory":"packages/metrics"},"_npmVersion":"10.9.8","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_6.3.3_1781781700261_0.9267023052722545","host":"s3://npm-registry-packages-npm-production"}},"7.0.0":{"name":"@axiomify/metrics","version":"7.0.0","keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"author":{"url":"https://github.com/OTopman","name":"Topman","email":"okunlolatopman14@gmail.com"},"license":"MIT","_id":"@axiomify/metrics@7.0.0","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"dist":{"shasum":"021e81a1e804d5f06308e98f68703b77b147f57f","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-7.0.0.tgz","fileCount":6,"integrity":"sha512-tDM8ZsOnHv7sy4LXwjl4uV9fkThKE0dleuF3y54NyqVlSdGfmOrSKnCWuPFBnas0x9eGgd+o86fqHGfL5JHz9g==","signatures":[{"sig":"MEUCIH4rcLzT5i40beSzCNKCx2inZidMcAuD7sc1JZZrQ6m6AiEAyZCwfv1/FXzgZ75CMxKhRVvfdSZ7jHrJs8MAdGqzY7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiomify%2fmetrics@7.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21013},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"fbf6e60487a5232ad20e80cfd584db8cb33e96b4","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"repository":{"url":"git+https://github.com/OTopman/axiomify.git","type":"git","directory":"packages/metrics"},"_npmVersion":"10.8.2","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_7.0.0_1782944872099_0.39921066875220457","host":"s3://npm-registry-packages-npm-production"}},"7.0.1":{"name":"@axiomify/metrics","version":"7.0.1","keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"author":{"url":"https://github.com/OTopman","name":"Topman","email":"okunlolatopman14@gmail.com"},"license":"MIT","_id":"@axiomify/metrics@7.0.1","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"dist":{"shasum":"252b0b40d6029a287ae8870e068fb316531344c1","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-7.0.1.tgz","fileCount":6,"integrity":"sha512-/ku9EgnM9kXOtyI5xfKMM3hqUR+EpBrn0dktdKpFPqGHjmTTFf0VlcwPJ8B0YtY2Vf3zWKwdE9Omzhd1klLphw==","signatures":[{"sig":"MEUCIQCa2zkMOYrRYGzjX8jrBwhJveP2n56rwQdEbRBk0+RFcQIgF2zbXxh2eq8Bpcy9cKkCtbA65Nm6WG5RrGCrZLVEb84=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiomify%2fmetrics@7.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21013},"main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"86ca53ddf22675696310ae2706003c6cecd017bd","scripts":{"build":"tsup"},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"repository":{"url":"git+https://github.com/OTopman/axiomify.git","type":"git","directory":"packages/metrics"},"_npmVersion":"10.8.2","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@axiomify/core":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/metrics_7.0.1_1785366592361_0.43596849878367383","host":"s3://npm-registry-packages-npm-production"}},"7.1.0":{"name":"@axiomify/metrics","version":"7.1.0","description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","main":"dist/index.js","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","test":"vitest run tests --config ../../vitest.config.mts"},"dependencies":{"@axiomify/core":"^7.1.0"},"keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"author":{"name":"Topman","email":"okunlolatopman14@gmail.com","url":"https://github.com/OTopman"},"license":"MIT","homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","repository":{"type":"git","url":"git+https://github.com/OTopman/axiomify.git","directory":"packages/metrics"},"bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"publishConfig":{"access":"public"},"engines":{"node":">=20.0.0"},"_id":"@axiomify/metrics@7.1.0","gitHead":"c286687588228a3ade79dbe9eae74915a3d5d794","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-mQ4dhppHD873BZVnUpUJ4o7V9vh21NdFzbnaQOGUb/O+ahoGbRmoCtPo6jpPBPIcFsWLvuiEEJb1U2+NcNjvkA==","shasum":"35f13d807d1179f93253034fc84f73bb17c34d90","tarball":"https://registry.npmjs.org/@axiomify/metrics/-/metrics-7.1.0.tgz","fileCount":6,"unpackedSize":21082,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiomify%2fmetrics@7.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID8Le3Enq7YibzxYXUizDafmRyuq/x5hMxAozIf+yVEmAiEAwzIFftHpmgXOKkoyZ5J3mBmWnbVzz4B2bqDwOwofuV4="}]},"_npmUser":{"name":"topman","email":"okunlolatopman14@gmail.com"},"directories":{},"maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/metrics_7.1.0_1786729723297_0.24185621316207362"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T23:53:15.875Z","modified":"2026-08-14T17:48:43.827Z","4.0.0":"2026-04-20T23:53:16.117Z","5.0.0":"2026-05-08T09:36:18.519Z","6.0.0-rc.2":"2026-05-17T15:24:31.684Z","6.0.0":"2026-05-25T17:10:30.265Z","6.1.0":"2026-05-28T17:14:01.096Z","6.2.0":"2026-05-31T14:56:33.753Z","6.3.0":"2026-06-07T23:18:47.895Z","6.3.1":"2026-06-10T10:23:19.541Z","6.3.2":"2026-06-10T12:27:17.013Z","6.3.3":"2026-06-18T11:21:40.391Z","7.0.0":"2026-07-01T22:27:52.245Z","7.0.1":"2026-07-29T23:09:52.515Z","7.1.0":"2026-08-14T17:48:43.458Z"},"bugs":{"url":"https://github.com/OTopman/axiomify/issues"},"author":{"name":"Topman","email":"okunlolatopman14@gmail.com","url":"https://github.com/OTopman"},"license":"MIT","homepage":"https://github.com/OTopman/axiomify/blob/main/docs/packages/metrics.md","keywords":["axiomify","metrics","prometheus","observability","latency","histograms","websocket-metrics"],"repository":{"type":"git","url":"git+https://github.com/OTopman/axiomify.git","directory":"packages/metrics"},"description":"Prometheus metrics for Axiomify — bounded label cardinality, WebSocket stats, route-level latency histograms.","maintainers":[{"name":"topman","email":"okunlolatopman14@gmail.com"}],"readme":"# @axiomify/metrics\n\n[![npm version](https://img.shields.io/npm/v/@axiomify/metrics.svg)](https://npmjs.com/package/@axiomify/metrics)\n[![codecov](https://codecov.io/github/otopman/axiomify/graph/badge.svg)](https://codecov.io/github/otopman/axiomify)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/OTopman/axiomify/badge)](https://securityscorecards.dev/viewer/?uri=github.com/OTopman/axiomify)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\nPrometheus-compatible metrics endpoint for Axiomify. Exports per-route request counts, latency, and optional WebSocket connection metrics.\n\n## Install\n\n```bash\nnpm install @axiomify/metrics\n```\n\n## Quick start\n\n```typescript\nimport { useMetrics } from '@axiomify/metrics';\n\nuseMetrics(app, {\n  path: '/metrics', // default\n});\n```\n\nPoint your Prometheus scrape config at `http://localhost:3000/metrics`.\n\n## Options\n\n| Option                    | Type                                   | Default      | Description                                                                             |\n| ------------------------- | -------------------------------------- | ------------ | --------------------------------------------------------------------------------------- |\n| `path`                    | `string`                               | `'/metrics'` | Endpoint path for the metrics export.                                                   |\n| `protect`                 | `(req) => boolean \\| Promise<boolean>` | —            | Return `false` to reject with 403.                                                      |\n| `requireToken`            | `string`                               | —            | Require `X-Metrics-Token` header to match this value (compared in constant time).       |\n| `allowlist`               | `string[]`                             | —            | Allow only these IPv4 addresses or CIDR ranges.                                         |\n| `wsManager`               | `{ getStats(): {...} }`                | —            | Optional WebSocket manager. When set, WebSocket connection/room metrics are exported.   |\n| `allowPublicInProduction` | `boolean`                              | `false`      | When `NODE_ENV === 'production'` and no `protect` is set, allow unauthenticated access. |\n\nIf none of `protect`, `requireToken`, or `allowlist` are set, a startup warning is emitted:\n\n```\n[axiomify/metrics] Warning: /metrics is publicly accessible. Set protect, allowlist, or requireToken in production.\n```\n\n### Production hardening\n\nIn production (`NODE_ENV === 'production'`), if no `protect` function is set the endpoint is **denied by default** (403) unless you opt in with `allowPublicInProduction: true`. Note this default-deny path applies only to the `protect` check; `requireToken` and `allowlist` are enforced independently regardless of environment. Token comparison uses `crypto.timingSafeEqual` to avoid leaking the token via timing.\n\n## Securing the endpoint\n\n```typescript\n// Token-based\nuseMetrics(app, {\n  requireToken: process.env.METRICS_TOKEN,\n});\n\n// IP allowlist\nuseMetrics(app, {\n  allowlist: ['127.0.0.1', '10.0.0.0/8', '192.168.0.0/16'],\n});\n\n// Custom logic\nuseMetrics(app, {\n  protect: (req) => {\n    return req.headers['x-internal-token'] === process.env.METRICS_TOKEN;\n  },\n});\n```\n\n## Exported metrics\n\n```\n# HELP http_requests_total Total number of HTTP requests.\n# TYPE http_requests_total counter\nhttp_requests_total{method=\"GET\",route=\"/users/:id\",status=\"200\"} 1432\nhttp_requests_total{method=\"POST\",route=\"/users\",status=\"201\"} 87\nhttp_requests_total{method=\"POST\",route=\"/users\",status=\"400\"} 12\n\n# HELP http_request_duration_ms Total duration of HTTP requests in ms.\n# TYPE http_request_duration_ms counter\nhttp_request_duration_ms{method=\"GET\",route=\"/users/:id\"} 14320.500\n```\n\n**Cardinality is bounded** — labels use matched route patterns (`/users/:id`), never concrete URLs (`/users/42`). This prevents label explosion from path parameters. Requests that never match a route are labelled `__unmatched__`, and requests to the metrics endpoint itself are not counted.\n\n### WebSocket metrics\n\nWhen a `wsManager` is provided, additional series are appended:\n\n```\n# HELP ws_connected_clients WebSocket clients\n# TYPE ws_connected_clients gauge\nws_connected_clients 42\n\n# HELP ws_messages_received_total Total WebSocket messages received\n# TYPE ws_messages_received_total counter\nws_messages_received_total 1200\n\n# HELP ws_messages_sent_total Total WebSocket messages sent\n# TYPE ws_messages_sent_total counter\nws_messages_sent_total 980\n\n# HELP ws_room_clients WebSocket room client count\n# TYPE ws_room_clients gauge\nws_room_clients{room=\"lobby\"} 12\n```\n\n`ws_messages_received_total` and `ws_messages_sent_total` are emitted only when the manager's stats include those fields.\n\n## Prometheus scrape config\n\nWhen using `requireToken`, the token is read from the `X-Metrics-Token` request header, so configure it via `authorization` is not applicable — pass it as a custom header:\n\n```yaml\nscrape_configs:\n  - job_name: 'axiomify-api'\n    scrape_interval: 15s\n    static_configs:\n      - targets: ['localhost:3000']\n    metrics_path: '/metrics'\n    headers:\n      X-Metrics-Token: 'your-metrics-token'\n```\n","readmeFilename":"README.md"}