{"_id":"@brahma-dev/abuseipdb-middleware","_rev":"4-8a301b8ffe1b01fece981fe4ac2fe361","name":"@brahma-dev/abuseipdb-middleware","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@brahma-dev/abuseipdb-middleware","version":"1.0.0","keywords":["abuseipdb","security","middleware","elysia","express","koa","fastify","hono","bun","nodejs"],"author":{"name":"Brahma Dev"},"license":"MIT","_id":"@brahma-dev/abuseipdb-middleware@1.0.0","maintainers":[{"name":"brahma-dev","email":"me@brahma.world"}],"homepage":"https://github.com/brahma-dev/abuseipdb-middleware#readme","bugs":{"url":"https://github.com/brahma-dev/abuseipdb-middleware/issues"},"dist":{"shasum":"75671e93629f69fca5495086270b500c5542abcd","tarball":"https://registry.npmjs.org/@brahma-dev/abuseipdb-middleware/-/abuseipdb-middleware-1.0.0.tgz","fileCount":9,"integrity":"sha512-ze8g9tZylYHpW8nHymBpMew8yOnktN0ETl5cXKcUFYV+f/J1Ts9cd3ncCCVtgR8mbuC6C3w5eW4kP2GqDoWeXw==","signatures":[{"sig":"MEQCIBLnWl3XdHZuu2ssNj370zdTf6OfIouOjWJfP2u07agxAiAb7r+YZYrQ332jFol6bK2H19ekenZsRXdT0yhXnKTMkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@brahma-dev%2fabuseipdb-middleware@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49933},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","gitHead":"657bbcb4642d38906895555f16c7afc96db6e9ff","scripts":{"test":"vitest run","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"brahma-dev","email":"me@brahma.world"},"repository":{"url":"git+https://github.com/brahma-dev/abuseipdb-middleware.git","type":"git"},"_npmVersion":"10.8.2","description":"Universal middleware for reporting malicious IPs to AbuseIPDB. Supports Elysia, Express, Koa, Fastify, and Hono.","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"koa":"^2.14.2","hono":"^3.10.0","tsup":"^7.2.0","elysia":"^0.8.17","vitest":"^4.0.7","express":"^4.18.2","fastify":"^4.24.3","elysia-ip":"^1.0.10","supertest":"^7.1.4","@types/koa":"^2.13.10","typescript":"^5.2.2","@types/node":"^20.8.9","@types/express":"^4.17.21","fastify-plugin":"^4.5.1","@types/supertest":"^6.0.3"},"peerDependencies":{"koa":">=2","hono":">=3","elysia":">=0.8","express":">=4","fastify":">=4"},"peerDependenciesMeta":{"koa":{"optional":true},"hono":{"optional":true},"elysia":{"optional":true},"express":{"optional":true},"fastify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/abuseipdb-middleware_1.0.0_1762284309962_0.9621211042487334","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@brahma-dev/abuseipdb-middleware","version":"1.0.1","keywords":["abuseipdb","security","middleware","elysia","express","koa","fastify","hono","bun","nodejs"],"author":{"name":"Brahma Dev"},"license":"MIT","_id":"@brahma-dev/abuseipdb-middleware@1.0.1","maintainers":[{"name":"brahma-dev","email":"me@brahma.world"}],"homepage":"https://github.com/brahma-dev/abuseipdb-middleware#readme","bugs":{"url":"https://github.com/brahma-dev/abuseipdb-middleware/issues"},"dist":{"shasum":"4c39f1dfa1e51cdcf4818d6aaea8746d28de10f0","tarball":"https://registry.npmjs.org/@brahma-dev/abuseipdb-middleware/-/abuseipdb-middleware-1.0.1.tgz","fileCount":9,"integrity":"sha512-dFaQ9uKXAyW4I5JzlJelvbqtYLKcSkPrtoB2jrnAy+5AWCKUcC7Q2a41kW1uo7LkWQa1djQem0L1iMIl9zLHNw==","signatures":[{"sig":"MEQCIDZBDQI72Oud8AfdNg/wK+A9NSrPMwSQV4I87oH+OnYXAiB4ZG2SSohnaO3/aDDmLjDoUZf5J6l3hTpOi8ZNcWKl+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@brahma-dev%2fabuseipdb-middleware@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49933},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","gitHead":"f888c8bd4be6383d8168f2875320ed90830e5c41","scripts":{"test":"vitest run","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"brahma-dev","email":"me@brahma.world"},"repository":{"url":"git+https://github.com/brahma-dev/abuseipdb-middleware.git","type":"git"},"_npmVersion":"10.8.2","description":"Universal middleware for reporting malicious IPs to AbuseIPDB. Supports Elysia, Express, Koa, Fastify, and Hono.","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"koa":"^2.14.2","hono":"^3.10.0","tsup":"^7.2.0","elysia":"^0.8.17","vitest":"^4.0.7","express":"^4.18.2","fastify":"^4.24.3","elysia-ip":"^1.0.10","supertest":"^7.1.4","@types/koa":"^2.13.10","typescript":"^5.2.2","@types/node":"^20.8.9","@types/express":"^4.17.21","fastify-plugin":"^4.5.1","@types/supertest":"^6.0.3"},"peerDependencies":{"koa":">=2","hono":">=3","elysia":">=0.8","express":">=4","fastify":">=4"},"peerDependenciesMeta":{"koa":{"optional":true},"hono":{"optional":true},"elysia":{"optional":true},"express":{"optional":true},"fastify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/abuseipdb-middleware_1.0.1_1762284657622_0.2069257128715909","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@brahma-dev/abuseipdb-middleware","version":"1.1.0","keywords":["abuseipdb","security","middleware","elysia","express","koa","fastify","hono","bun","nodejs"],"author":{"name":"Brahma Dev"},"license":"MIT","_id":"@brahma-dev/abuseipdb-middleware@1.1.0","maintainers":[{"name":"brahma-dev","email":"me@brahma.world"}],"homepage":"https://github.com/brahma-dev/abuseipdb-middleware#readme","bugs":{"url":"https://github.com/brahma-dev/abuseipdb-middleware/issues"},"dist":{"shasum":"9079c3306cfb6b4add21c530444f536e677b9fc9","tarball":"https://registry.npmjs.org/@brahma-dev/abuseipdb-middleware/-/abuseipdb-middleware-1.1.0.tgz","fileCount":9,"integrity":"sha512-m6AXjXwLpWQZ+yKbwPVZa+rDMURW7hJBkkiGKjqGkPK2V8JfLnBR7Lh4sPTD6ZJuFodbJY86kx4s3ZPNk5jRAQ==","signatures":[{"sig":"MEUCIASyfGIeW0GaaajG0Jld2uhiy9vfxj6qGRt08dQnPBacAiEAqvs/ZB3brym1WCE1tbjq9aOQDwkYITQCKOMZgJZjRoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@brahma-dev%2fabuseipdb-middleware@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":56480},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","gitHead":"3290061198757d74a8a1509425f00b36c07c5777","scripts":{"test":"vitest run","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"brahma-dev","email":"me@brahma.world"},"repository":{"url":"git+https://github.com/brahma-dev/abuseipdb-middleware.git","type":"git"},"_npmVersion":"10.8.2","description":"Universal middleware for reporting malicious IPs to AbuseIPDB. Supports Elysia, Express, Koa, Fastify, and Hono.","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"koa":"^2.14.2","hono":"^3.10.0","tsup":"^7.2.0","elysia":"^0.8.17","vitest":"^4.0.7","express":"^4.18.2","fastify":"^4.24.3","elysia-ip":"^1.0.10","supertest":"^7.1.4","@types/koa":"^2.13.10","typescript":"^5.2.2","@types/node":"^20.8.9","@types/express":"^4.17.21","fastify-plugin":"^4.5.1","@types/supertest":"^6.0.3"},"peerDependencies":{"koa":">=2","hono":">=3","elysia":">=0.8","express":">=4","fastify":">=4"},"peerDependenciesMeta":{"koa":{"optional":true},"hono":{"optional":true},"elysia":{"optional":true},"express":{"optional":true},"fastify":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/abuseipdb-middleware_1.1.0_1762287057322_0.6688128304155403","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@brahma-dev/abuseipdb-middleware","version":"1.1.1","description":"Universal middleware for reporting malicious IPs to AbuseIPDB. Supports Elysia, Express, Koa, Fastify, and Hono.","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","scripts":{"build":"tsup","test":"vitest run","prepublishOnly":"bun run build"},"repository":{"type":"git","url":"git+https://github.com/brahma-dev/abuseipdb-middleware.git"},"keywords":["abuseipdb","security","middleware","elysia","express","koa","fastify","hono","bun","nodejs"],"author":{"name":"Brahma Dev"},"license":"MIT","devDependencies":{"@types/express":"^4.17.21","@types/koa":"^2.13.10","@types/node":"^20.8.9","@types/supertest":"^6.0.3","elysia":"^0.8.17","elysia-ip":"^1.0.10","express":"^4.18.2","fastify":"^4.24.3","fastify-plugin":"^4.5.1","hono":"^3.10.0","koa":"^2.14.2","supertest":"^7.1.4","tsup":"^7.2.0","typescript":"^5.2.2","vitest":"^4.0.7"},"peerDependencies":{"elysia":">=0.8","express":">=4","fastify":">=4","hono":">=3","koa":">=2"},"publishConfig":{"access":"public"},"peerDependenciesMeta":{"elysia":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"hono":{"optional":true},"koa":{"optional":true}},"_id":"@brahma-dev/abuseipdb-middleware@1.1.1","gitHead":"de146177e2aa79866e32e32dfd2a07d6186c59c4","bugs":{"url":"https://github.com/brahma-dev/abuseipdb-middleware/issues"},"homepage":"https://github.com/brahma-dev/abuseipdb-middleware#readme","_nodeVersion":"20.19.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-NXvrkRif18eqysrxD7Ia7/zcrPTPNfh9M8cvHCfybDQwNZNe8F/5IdWfZi/FyIskni4ZdEZuR7CbcDp/vN2weQ==","shasum":"4cf795baea16e54e6589a6165b5ed1eeb3c3db9e","tarball":"https://registry.npmjs.org/@brahma-dev/abuseipdb-middleware/-/abuseipdb-middleware-1.1.1.tgz","fileCount":9,"unpackedSize":56553,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@brahma-dev%2fabuseipdb-middleware@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDc4Tm8DqHqFJeypPaX7kYvq2wQnAFrsUzXm07WNuaxSAIhAIEhruCgVRSQm9V33/5gDvhr3OcCZ38z9siJWXINRe1g"}]},"_npmUser":{"name":"brahma-dev","email":"me@brahma.world"},"directories":{},"maintainers":[{"name":"brahma-dev","email":"me@brahma.world"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/abuseipdb-middleware_1.1.1_1762287578905_0.38537224042274754"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-04T19:25:09.892Z","modified":"2025-11-04T20:19:39.548Z","1.0.0":"2025-11-04T19:25:10.160Z","1.0.1":"2025-11-04T19:30:58.089Z","1.1.0":"2025-11-04T20:10:57.530Z","1.1.1":"2025-11-04T20:19:39.112Z"},"bugs":{"url":"https://github.com/brahma-dev/abuseipdb-middleware/issues"},"author":{"name":"Brahma Dev"},"license":"MIT","homepage":"https://github.com/brahma-dev/abuseipdb-middleware#readme","keywords":["abuseipdb","security","middleware","elysia","express","koa","fastify","hono","bun","nodejs"],"repository":{"type":"git","url":"git+https://github.com/brahma-dev/abuseipdb-middleware.git"},"description":"Universal middleware for reporting malicious IPs to AbuseIPDB. Supports Elysia, Express, Koa, Fastify, and Hono.","maintainers":[{"name":"brahma-dev","email":"me@brahma.world"}],"readme":"# AbuseIPDB Middleware\n\nA universal middleware for reporting malicious IP addresses to [AbuseIPDB](https://www.abuseipdb.com/). Works with Elysia, Express, Koa, Fastify, and Hono.\n\n## Installation\n\n```bash\nnpm install @brahma-dev/abuseipdb-middleware\n```\n\n## Features\n\n- **Universal**: Works with all major Node.js/Bun frameworks.\n- **Manual Reporting**: Exposes a `report` function to manually flag IPs for any reason.\n- **Configurable**: Customize suspicious paths and report categories.\n- **Efficient**: Caches reported IPs to avoid duplicate API calls.\n- **Lightweight**: Minimal dependencies.\n\n## Usage\n\nFirst, get your API key from the [AbuseIPDB dashboard](https://www.abuseipdb.com/account/api).\n\nThe middleware initializer returns an object containing the `middleware` itself and a `report` function for manual use.\n\n### Express\n\n```typescript\nimport express from 'express';\nimport { abuseIPDBExpress } from ' @brahma-dev/abuseipdb-middleware';\n\nconst app = express();\nconst { middleware, report } = abuseIPDBExpress({ apiKey: 'YOUR_API_KEY' });\n\napp.use(middleware);\n// ... your routes\n```\n\n### Koa\n\n```typescript\nimport Koa from 'koa';\nimport { abuseIPDBKoa } from '@brahma-dev/abuseipdb-middleware';\n\nconst app = new Koa();\nconst { middleware, report } = abuseIPDBKoa({ apiKey: 'YOUR_API_KEY' });\n\napp.use(middleware);\n// ... your routes\n```\n\n### Fastify\n\nFastify is slightly different. The `report` function is attached to the `fastify` instance via a decorator as `app.abuseipdb.report`.\n\n```typescript\nimport fastify from 'fastify';\nimport { abuseIPDBFastify } from '@brahma-dev/abuseipdb-middleware';\n\nconst app = fastify();\napp.register(abuseIPDBFastify, { apiKey: 'YOUR_API_KEY' });\n// ... your routes\n```\n\n### Hono\n\n```typescript\nimport { Hono } from 'hono';\nimport { abuseIPDBHono } from '@brahma-dev/abuseipdb-middleware';\n\nconst app = new Hono();\nconst { middleware, report } = abuseIPDBHono({ apiKey: 'YOUR_API_KEY' });\n\napp.use('*', middleware);\n// ... your routes\n```\n\n### Elysia\n\nFor Elysia, it's recommended to also use the `elysia-ip` plugin to ensure the IP address is correctly identified.\n\n```bash\nbun add elysia-ip\n```\n```ts\nimport { Elysia } from 'elysia';\nimport { ip } from 'elysia-ip';\nimport { abuseIPDBElysia } from '@brahma-dev/abuseipdb-middleware';\n\nconst { middleware, report } = abuseIPDBElysia({ apiKey: 'YOUR_API_KEY' });\n\nnew Elysia()\n  .use(ip()) // Recommended: makes `context.ip` available\n  .use(middleware)\n  .get('/', () => 'Hello Elysia')\n  .listen(3000);```\n\n## Manual Reporting\n\nThe exposed `report` function allows you to report IPs for application-specific reasons, such as failed login attempts, spam, or unusual API usage.\n\nThe function has the following signature:\n`report(ip: string, comment: string, categories?: string): Promise<void>`\n\n- **`ip`**: The IP address to report.\n- **`comment`**: A description of the malicious activity.\n- **`categories`** (optional): A comma-separated string of AbuseIPDB category codes. Defaults to the one in the options.\n\n### Example: Reporting a Failed Login (Express)\n```typescript\napp.post('/login', (req, res) => {\n  const { username, password } = req.body;\n  const {loginSuccess, attemptCount } = authenticate(username, password); // Your auth logic\n\n  if (!loginSuccess ) {\n    if(attemptCount>10) {\n      // Report the IP for a failed login (Category 18: Brute-Force)\n      report(req.ip, `Failed login attempt for user \"${username}\"`, '18');\n    }\n    return res.status(401).send('Authentication failed.');\n  }\n  \n  res.send('Logged in!');\n});\n```\n\n### Example: Manual Reporting (Fastify)\n```typescript\napp.post('/comment', (req, reply) => {\n    const isSpam = detectSpam(req.body); // Your spam detection logic\n    if (isSpam) {\n        // Use the decorator to report the IP\n        app.abuseipdb.report(req.ip, 'User submitted spam comment.', '14');\n        return reply.status(400).send('Spam detected.');\n    }\n    //...\n});\n```\n\n### Configuration Options\n\nYou can pass an options object to the middleware factory:\n\n```typescript\ninterface AbuseIPDBOptions {\n  apiKey: string; // Required\n  paths?: string[]; // Replace default suspicious paths\n  additionalPaths?: string[]; // Add to default suspicious paths\n  categories?: string; // Comma-separated AbuseIPDB category codes (defaults to \"21\")\n  cacheTTL?: number; // How long to cache IPs in ms (defaults to 1 hour)\n}\n```\n","readmeFilename":"README.md"}