npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

express-antiflood

v1.1.2

Published

An antiflood middleware for Express

Downloads

26

Readme

Build status

express-antiflood

An antiflood middleware for Express. For using it in production check out the Redis store.

Keep in mind that I'm doing this in my free time, so be kind 😁.

Installation

npm install express-antiflood

Usage

import express from 'express'
import antiflood, { MemoryStore } from 'express-antiflood'

const app = express()
const middleware = antiflood(MemoryStore(), {
    tries: 3,
    timeLimit: 30000,
    timeBlocked: 60000 * 10,
})

app.post('/comment', middleware, function (req, res) {
  res.send('Hello World!')
})

app.listen(3000)

Options

Antiflood(store, options, extensions)

  • store An store. You can use MemoryStore which is included in this repo but it's recommended to use a production-ready store like RedisStore
  • options
    • timeLimit The time that has to pass since the latest request before the store resets the request count to 0 (default: 60000)
    • timeBlocked The time (in miliseconds) the user will have to wait when he reached the limit of requests (default: 300000)
    • tries Number of tries before getting blocked. If the user makes the request {tries} times, the request will success but the user will have to wait {timeBlocked}ms before making it again (default: 10)
    • prefix Prefix for the key saved in the store (default: '')
    • failCallback A function that gets called with (req, res, next, nextValidRequestDate) when a request is blocked (by default it responds with a Too many requests error)
    • getKey A function that gets called with (req) and returns the key that will be used by the store. For example to save the key based on the username. (by default the middleware will use req.ip)
  • extensions A function or an array of functions. Each function receives a listener. More info in the extensions section.

Creating extensions

An extension is just a function that receives a listener function:

function (listener) {
  listener(EVENT, function(data) {
    // Do something!
  })
}

Where:

  • data is an object with the following values:
    • key The value the store used in the request

Events

  • SUCCESS On each request that has been successful and the user has not been blocked
  • LIMIT_REACHED The request was successful but the user has reached the limit and has been blocked for the following requests
  • BLOCKED When the request was rejected because the user is blocked

TODO:

  • Add more tests