{"_id":"express-brute","_rev":"88-c5f8595b2e4aee0a8d369c84cd3d3965","name":"express-brute","description":"A brute-force protection middleware for express routes that rate limits incoming requests","dist-tags":{"latest":"1.0.1"},"versions":{"0.1.0":{"name":"express-brute","version":"0.1.0","description":"A brute-force protection middleware for express routes that rate limitings incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"_id":"express-brute@0.1.0","dist":{"shasum":"8aa4cb9dd52b8d305d848e80318c5f4089eb3a36","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.1.0.tgz","integrity":"sha512-mmYJblR9MKgwXunz6X0uYpWLpcrDs0kUmAjkOrHKsBYiBe4qBx1rrAwab8eUz0EonJAApVpSR51w3LPR7x1S4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDDZSwjQOmgDMJshr3GBlJOILFRgZO+h4RApTHJ4GdoXAiEA3kPHiSKpD+AGLsbvBRGifHAvX/1hyj5zi8av0X8PbF4="}]},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.1.1":{"name":"express-brute","version":"0.1.1","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"_id":"express-brute@0.1.1","dist":{"shasum":"fe48de38a3909343e53983eca005405ee0cf1f3e","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.1.1.tgz","integrity":"sha512-rlwrKfHTmn1qiG5cRhU+ZSMMPIKX71jq2QtLMEGvzRPvCgEqxRDfxbOBL6VSCrngHXh054FCAJdzwWzQxchLrA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9L49apooYqro3KxnbSvDSCkWY0TM39bmTwpoI8zc/5wIgKZ67qpu0i2CjbOXd0mN/K8gna6Nm6kJtRxriCTrG3Ug="}]},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.1.2":{"name":"express-brute","version":"0.1.2","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"_id":"express-brute@0.1.2","dist":{"shasum":"fda750c022578c67d64064bde714d20092042b4e","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.1.2.tgz","integrity":"sha512-6hn1CrcUdqFTnzDyOYtGG7rA5tE/wI0jmJKUor5Mr3TesTivYBRcRUZ22UM6aViE//qgaGxfA81AlOiwrZPwKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFW1gc5eN9LEua8tO8FhWFVbyTSyAf76BU5611piSlhGAiEAqrEF8G9MSsQsUY3pxw1AhhKPk6G+m7lxXTwVNgKFgr0="}]},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.2.0":{"name":"express-brute","version":"0.2.0","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"_id":"express-brute@0.2.0","dist":{"shasum":"89cbd073e091f4f78408a4b94d172f9e516763c5","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.2.0.tgz","integrity":"sha512-lpfv1t22LDv8/LMnmwLUVrm9N+KdAc5D0gPYfjUVhCSSDqiF2o+FFd8TCIdc9x9vn0H3kZZxU4ndnlnd/UTHFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHcL0cCCUrSSEEYeqmt5I/bDNHkBW+bx9jIKKrLsAgJIAiEA6JQWfy6FoMKo6zgBVVIAh2aHXAUhrRhtotA4b6P783k="}]},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.2.1":{"name":"express-brute","version":"0.2.1","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"_id":"express-brute@0.2.1","dist":{"shasum":"09440956a704c75c0e3e936ed425c91f7963a844","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.2.1.tgz","integrity":"sha512-MKFSfsJ++gQSv1jOA3sIBLUvRGIbnODRqXpNAH1KXMThg2W1pLbr0Q5Ix3NGDOM0rPNZlD9qSRVUkueYX0L7mg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC5n3GRGAal6QgAI1GsP0U3sxVY2htiWp4PMHvZrSET/AiBMQnAMGSHvfgoHT84Ah5OKTmE6oHlt8IQgkDMDCXkhOg=="}]},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.2.2":{"name":"express-brute","version":"0.2.2","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"_id":"express-brute@0.2.2","dist":{"shasum":"0c087c46c162134429e667b736fd1640accaecfb","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.2.2.tgz","integrity":"sha512-VKdT/5oBqj+etvZxjRrg/xVytNLdJLvvFHvOqZpiaf1jqVtSXwlOJcF68skqr+kkGPtYxb6jcJPw5PnXEX5yQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEiNIZma/5yvp1/KSUSOI7ea31ZA0mNZHF5NFPkBmPIbAiBHjw1gC5IYyXAMLRE4xRJkwBGfmlRXpG9sCN8qOGR+ig=="}]},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.3.0":{"name":"express-brute","version":"0.3.0","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute","_id":"express-brute@0.3.0","dist":{"shasum":"d3e0089a54c649d3c1ebdb71f846c31f00a0973d","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.3.0.tgz","integrity":"sha512-c196W3CX2AsHrzRfshb7prn35E+F6kk+Y6DUfJPABL/0mtoR/i5sdovOSbBiqauyc6wp8p6fAY9u4rm/sojBpQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDKWuenqpwFSoFfZvSu69/a0v3UGC3HfwHdtvUazNnlCAiBdLMdoDKB4KkAYwO5p4osenJ0eeZd46BRouxPF9igdKg=="}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.4.0":{"name":"express-brute","version":"0.4.0","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute","_id":"express-brute@0.4.0","dist":{"shasum":"b837ee7cda7ab808a5754798fe62eded2ca2a98d","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.4.0.tgz","integrity":"sha512-IDcR9r/JG8qXYHokM/I+rws0OEqq/+ibU7tXO8B1B5Gd/fM72d/TDQGch987m3x7UAZ50ZguHXQazT0kqnGaPw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDURgA7AmxvipOQYAAcGPylsYDn9O9NPrAWZRSue+hB8AIhALrDho7/MVuASW0gHWwaLNISdUly0qjbz88y5/5lrXR+"}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.4.1":{"name":"express-brute","version":"0.4.1","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute","_id":"express-brute@0.4.1","dist":{"shasum":"de72aa5b756b953a2b9d5cecc567cc7999136d33","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.4.1.tgz","integrity":"sha512-4IUwZsG/50ODg+LD4FAOpIBzd3fQY6F59/gIJd3I9dHeHigqL5/Bp9WeNETtRtNyrz4Hc79kcDW4Lw/H7cmQmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlzxGptxx5Rb3vz+TC4gHn7EKJPV4O9oIVPtYBKqCGXAiEAiHxspi1SdpQFYmZlV64Tt2GF0hna3AXwXeQSD7mouZ8="}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.4.2":{"name":"express-brute","version":"0.4.2","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1","memcached":"~0.2.4"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute","_id":"express-brute@0.4.2","dist":{"shasum":"3bc34fb01252b8f47e737bf72dd01ff4df1d9c07","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.4.2.tgz","integrity":"sha512-ol5cI4kmCRI9tPDd+eWyzh71ntTSpkrWWysxDNpOKoz7fPJy4C7cS4AQ3EiDPzSeLnD4Vj0RzI2Lo9p1pUZaSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKS5bXvE6RoGOvwyJY+zblEfhNVWwzggnFBVcOW9esvAIhAN/bP7zYaNNQCNdxR1EmonISf1I37gOEmJwjb07qSlnr"}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.5.0":{"name":"express-brute","version":"0.5.0","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute","_id":"express-brute@0.5.0","dist":{"shasum":"5ae502d14fe50d7790aafde9cab3e9d797195094","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.5.0.tgz","integrity":"sha512-BnX3x4k1MK0DJLjRnl0JMTaJ7K8aPImbA/himKXkzvYYuscqkAQDS3YO0kJgSb1+9d4rLBknYjOfHifKBLmbRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDk3KbLJNnhwnMinezxyzB9dRnAxEaxii5cvWK/Ybqm6wIgMzf0k2YzsBA7zIpkW20cg4s8jF9rfV2Wq31r57GfpQA="}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.5.1":{"name":"express-brute","version":"0.5.1","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute","_id":"express-brute@0.5.1","dist":{"shasum":"bf290f587309a2ca5d9deb81e372e596f0b5f236","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.5.1.tgz","integrity":"sha512-qoqCVEgCRiGj1FGELhZmVzPY7ZF8CLFCfIZ1aXqHznuxZb92aJGsIsgPedZO2EmGNxQZNBjmT/If2HZY4wUUoQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkzCCaExeYdY348ZmoFOSP0gke7z7qCBSJx/W7ZBz7EwIhAOXMFwsl/KTaJ8tYZSitexbUuxbVoZQMgiZUHEtpCWRE"}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.5.2":{"name":"express-brute","version":"0.5.2","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1"},"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute","_id":"express-brute@0.5.2","dist":{"shasum":"9ca62ebe054e293db5b8a0aebadfc0ee61dd35e7","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.5.2.tgz","integrity":"sha512-6X0H6mT6c8fPa5yGHLE5XgFgTVBtOTq7bAnDfECWmyAzKJtzKMiNZ3AkCI3H94bp9XaJwbN8WArBD+DcD3cH0w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFKVbEFAovJbuTO8iAztwYJ3BMijJ1nHzoyXVgyuCKIpAiAVHyngp+3b1xqMRDPG1OKzWfM4kg4IueWhigEBaqcG7g=="}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"directories":{}},"0.5.3":{"name":"express-brute","version":"0.5.3","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions --matchall spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"jasmine-node":"~1.11.0","proxyquire":"~0.5.0"},"dependencies":{"underscore":"~1.5.1"},"gitHead":"1b5a1d7c34678bcabaa042d727ebe3ff30313402","bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute","_id":"express-brute@0.5.3","_shasum":"0c8aabafe09dd722666587916f471b976f0c2a48","_from":".","_npmVersion":"2.1.17","_nodeVersion":"0.10.35","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"dist":{"shasum":"0c8aabafe09dd722666587916f471b976f0c2a48","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.5.3.tgz","integrity":"sha512-RXooZ3M5Gbe4CKOo8ufIDOQ1JfJiZpb/M2Se76c/HuXen+MYRlQoIUMLhzfYN5A/AH9yhp7QZYdf0O84RxuI8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDof1/oS/kOxA3r7RFGlGFoXiOyDil7+cEYwWIRe6hqjAiAXtUrE8gfuvhA0PNdeXX7SZkdHsYqDadqnC9wIU4Ohsw=="}]},"directories":{}},"0.6.0":{"name":"express-brute","version":"0.6.0","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"node node_modules/mocha/bin/mocha --check-leaks spec"},"repository":{"type":"git","url":"git@github.com:AdamPflug/express-brute.git"},"devDependencies":{"chai":"~2.3.0","mocha":"~2.2.5","sinon":"~1.14.1","sinon-chai":"~2.7.0"},"dependencies":{"long-timeout":"0.0.2","underscore":"~1.5.1"},"gitHead":"e611cb9360976c5002d71019c4df2c4514de33c9","bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute","_id":"express-brute@0.6.0","_shasum":"4d4eeb4d5df94f9af1fd2f7fdc86c34abaf175e1","_from":".","_npmVersion":"2.7.3","_nodeVersion":"0.12.1","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"dist":{"shasum":"4d4eeb4d5df94f9af1fd2f7fdc86c34abaf175e1","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.6.0.tgz","integrity":"sha512-cIXD4IJzNIfwkmf+7wqJG5Of4MW5WhQxBEf1JXYNkirzErYoj0rVOX8wbBwBOVhF2Yazp1HWVrImIS8p5wc0cg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKjegWlAPXdHbmQfzjz5JVDTzmfoMosXqcnNx3opuoFAiEA8M82T9V3pQrPG1EBVq/iaolodl0Am3Fyz0urxtVANyk="}]},"directories":{}},"0.7.0-beta.0":{"name":"express-brute","version":"0.7.0-beta.0","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"istanbul cover ./node_modules/mocha/bin/_mocha spec"},"repository":{"type":"git","url":"git+ssh://git@github.com/AdamPflug/express-brute.git"},"devDependencies":{"chai":"~3.5.0","coveralls":"~2.11.9","istanbul":"~0.4.3","mocha":"~2.4.5","mocha-lcov-reporter":"~1.2.0","sinon":"~1.17.3","sinon-chai":"~2.8.0"},"dependencies":{"long-timeout":"~0.1.1","underscore":"~1.8.3"},"peerDependencies":{"express":"4.x"},"gitHead":"51376917d88c8d036924e0982dbbe79f7a0a1145","bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute#readme","_id":"express-brute@0.7.0-beta.0","_shasum":"efc69c157a8358d9ddd05ef9bd8396a5a349520e","_from":".","_npmVersion":"3.8.9","_nodeVersion":"6.2.0","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"dist":{"shasum":"efc69c157a8358d9ddd05ef9bd8396a5a349520e","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-0.7.0-beta.0.tgz","integrity":"sha512-NMeEbcj1N22ZuRMsDCRBlxC5FbocA8/TcxMw9XUvy909jq7J5drpJ8Ljr4h/kdrcc7hsJF2IdYV7+Pa5gLWwLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFUnBk7zr0Hdo+jVIBcW6Q0Jeu/ws/DHhuHbfcFqP42zAiEAl110Rq15y6uk4ntSeuYaw0hHHrKTa4Md+6oyOru2V5A="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/express-brute-0.7.0-beta.0.tgz_1465683810184_0.4031979199498892"},"directories":{}},"1.0.0":{"name":"express-brute","version":"1.0.0","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"istanbul cover ./node_modules/mocha/bin/_mocha spec"},"repository":{"type":"git","url":"git+ssh://git@github.com/AdamPflug/express-brute.git"},"devDependencies":{"chai":"~3.5.0","coveralls":"~2.11.9","istanbul":"~0.4.3","mocha":"~2.4.5","mocha-lcov-reporter":"~1.2.0","sinon":"~1.17.3","sinon-chai":"~2.8.0"},"dependencies":{"long-timeout":"~0.1.1","underscore":"~1.8.3"},"peerDependencies":{"express":"4.x"},"gitHead":"bf5d05e1458abb15b49fcb053acf4b8d2e3f194f","bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute#readme","_id":"express-brute@1.0.0","_shasum":"98e33ac5196139ad54de108a3a6a0fc2c90a10f6","_from":".","_npmVersion":"3.8.9","_nodeVersion":"6.2.0","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"dist":{"shasum":"98e33ac5196139ad54de108a3a6a0fc2c90a10f6","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-1.0.0.tgz","integrity":"sha512-CQQbZJDIMsjLtqxxEmomA02F8I2mO950r7mIzbDU5nZaZQdWmwtpZ0pi4drihjo98YNCMPePzfyEUevR6JBfKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFKTJBHruWHNklsb4Ys14oBsxGyYSpMk0DvtvZcflpCDAiEAluN2owNUfzWVnAHO+h5XyQIqoWxT27FiU8wTea+ggTU="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/express-brute-1.0.0.tgz_1471888054018_0.3533539897762239"},"directories":{}},"1.0.1":{"name":"express-brute","version":"1.0.1","description":"A brute-force protection middleware for express routes that rate limits incoming requests","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"license":"BSD","private":false,"scripts":{"test":"istanbul cover ./node_modules/mocha/bin/_mocha spec"},"repository":{"type":"git","url":"git+ssh://git@github.com/AdamPflug/express-brute.git"},"devDependencies":{"chai":"~3.5.0","coveralls":"~2.11.9","istanbul":"~0.4.3","mocha":"~2.4.5","mocha-lcov-reporter":"~1.2.0","sinon":"~1.17.3","sinon-chai":"~2.8.0"},"dependencies":{"long-timeout":"~0.1.1","underscore":"~1.8.3"},"peerDependencies":{"express":"4.x"},"gitHead":"ef9a73321dfe18b70b76f7acadf3f788235e3471","bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"homepage":"https://github.com/AdamPflug/express-brute#readme","_id":"express-brute@1.0.1","_shasum":"9f36d107fe34e40a682593e39bffcc53102b5335","_from":".","_npmVersion":"3.10.7","_nodeVersion":"6.2.0","_npmUser":{"name":"adampflug","email":"BluParadox@gmail.com"},"maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"dist":{"shasum":"9f36d107fe34e40a682593e39bffcc53102b5335","tarball":"https://registry.npmjs.org/express-brute/-/express-brute-1.0.1.tgz","integrity":"sha512-ieZmwox3oIZdQCVjvvnwQvrKQumWdb/JjmC9mWplF42AuHCBXr6Yk/I+nLTRQx+9F+2aapOW9kYLwA6xIlwA9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG8Fzu8bOIbo3OsbALKuQ4FDJYijKD7PtabBF9erb1bUAiBRH8LfCxVL/KmOyKHOKLVVRmCBVT+YxKyP4vFdts7vVw=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/express-brute-1.0.1.tgz_1476228880723_0.24316670489497483"},"directories":{}}},"readme":"express-brute\n=============\n[![NPM Version](https://badge.fury.io/js/express-brute.png)](http://badge.fury.io/js/express-brute)\n[![NPM Downloads](https://img.shields.io/npm/dm/express-brute.svg?maxAge=2592000)](http://badge.fury.io/js/express-brute)\n[![Build Status](https://img.shields.io/travis/AdamPflug/express-brute.svg?maxAge=2592000)](https://travis-ci.org/AdamPflug/express-brute)\n[![Coverage Status](https://img.shields.io/coveralls/AdamPflug/express-brute.svg?maxAge=2592000)](http://coveralls.io/github/AdamPflug/express-brute?branch=master)\n[![Dependency Status](https://img.shields.io/david/AdamPflug/express-brute.svg?maxAge=2592000)](https://david-dm.org/adampflug/express-brute)\n\nA brute-force protection middleware for express routes that rate-limits incoming requests, increasing the delay with each request in a fibonacci-like sequence.\n\nInstallation\n------------\n  via npm:\n\n      $ npm install express-brute\n\nA Simple Example\n----------------\n``` js\nvar ExpressBrute = require('express-brute');\n\nvar store = new ExpressBrute.MemoryStore(); // stores state locally, don't use this in production\nvar bruteforce = new ExpressBrute(store);\n\napp.post('/auth',\n\tbruteforce.prevent, // error 429 if we hit this route too often\n\tfunction (req, res, next) {\n\t\tres.send('Success!');\n\t}\n);\n```\n\nClasses\n-------\n### ExpressBrute(store, options)\n- `store` An instance of `ExpressBrute.MemoryStore` or some other ExpressBrute store (see a list of known stores below).\n- `options`\n\t- `freeRetries`             The number of retires the user has before they need to start waiting (default: 2)\n\t- `minWait`                 The initial wait time (in milliseconds) after the user runs out of retries (default: 500 milliseconds)\n\t- `maxWait`                 The maximum amount of time (in milliseconds) between requests the user needs to wait (default: 15 minutes). The wait for a given request is determined by adding the time the user needed to wait for the previous two requests.\n\t- `lifetime`                The length of time (in seconds since the last request) to remember the number of requests that have been made by an IP. By default it will be set to `maxWait * the number of attempts before you hit maxWait` to discourage simply waiting for the lifetime to expire before resuming an attack. With default values this is about 6 hours.\n\t- `failCallback`            Gets called with (`req`, `resp`, `next`, `nextValidRequestDate`) when a request is rejected (default: ExpressBrute.FailForbidden)\n\t- `attachResetToRequest`    Specify whether or not a simplified reset method should be attached at `req.brute.reset`. The simplified method takes only a callback, and resets all `ExpressBrute` middleware that was called on the current request. If multiple instances of `ExpressBrute` have middleware on the same request, only those with `attachResetToRequest` set to true will be reset (default: true)\n\t- `refreshTimeoutOnRequest` Defines whether the `lifetime` counts from the time of the last request that ExpressBrute didn't prevent for a given IP (true) or from of that IP's first request (false). Useful for allowing limits over fixed periods of time, for example: a limited number of requests per day. (Default: true). [More info](https://github.com/AdamPflug/express-brute/issues/14)\n\t- `handleStoreError`        Gets called whenever an error occurs with the persistent store from which ExpressBrute cannot recover. It is passed an object containing the properties `message` (a description of the message), `parent` (the error raised by the session store), and [`key`, `ip`] or [`req`, `res`, `next`] depending on whether or the error occurs during `reset` or in the middleware itself.\n\n### ExpressBrute.MemoryStore()\nAn in-memory store for persisting request counts. Don't use this in production, instead choose one of the more robust store implementations listed below.\n\n\n`ExpressBrute` Instance Methods\n-------------------------------\n- `prevent(req, res, next)` Middleware that will bounce requests that happen faster than\n\t                        the current wait time by calling `failCallback`. Equivilent to `getMiddleware(null)`\n- `getMiddleware(options)`  Generates middleware that will bounce requests with the same `key` and IP address\n\t                        that happen faster than the current wait time by calling `failCallback`.\n\t                        Also attaches a function at `req.brute.reset` that can be called to reset the\n\t                        counter for the current ip and key. This functions as the `reset` instance method,\n\t                        but without the need to explicitly pass the `ip` and `key` paramters\n\t- `key`                 can be a string or alternatively it can be a `function(req, res, next)`\n\t                        that or calls `next`, passing a string as the first parameter.\n\t- `failCallback`        Allows you to override the value of `failCallback` for this middleware\n\t- `ignoreIP`            Disregard IP address when matching requests if set to `true`. Defaults to `false`.\n- `reset(ip, key, next)`    Resets the wait time between requests back to its initial value. You can pass `null`\n\t                        for `key` if you want to reset a request protected by `protect`.\n\nBuilt-in Failure Callbacks\n---------------------------\nThere are some built-in callbacks that come with BruteExpress that handle some common use cases.\n- `ExpressBrute.FailTooManyRquests` Terminates the request and responses with a 429 (Too Many Requests) error that has a `Retry-After` header and a JSON error message.\n- `ExpressBrute.FailForbidden` Terminates the request and responds with a 403 (Forbidden) error that has a `Retry-After` header and a JSON error message. This is provided for compatibility with ExpressBrute versions prior to v0.5.0, for new users `FailTooManyRequests` is the preferred behavior.\n- `ExpressBrute.FailMark` Sets res.nextValidRequestDate, the Retry-After header and the res.status=429, then calls next() to pass the request on to the appropriate routes.\n\n`ExpressBrute` stores\n---------------------\nThere are a number adapters that have been written to allow ExpressBrute to be used with different persistent storage implementations, some of the ones I know about include:\n- [Memcached](https://github.com/AdamPflug/express-brute-memcached)\n- [Redis](https://github.com/AdamPflug/express-brute-redis)\n- [MongoDB](https://github.com/auth0/express-brute-mongo)\n- [Mongoose](https://github.com/cbargren/express-brute-mongoose)\n- [Sequelize (SQL)](https://github.com/maddy2get/express-brute-sequelize)\n- [Knex.js (SQL)](https://github.com/llambda/brute-knex)\n- [RethinkDB](https://github.com/llambda/brute-rethinkdb)\n- [Loki.js](https://github.com/Requarks/express-brute-loki)\n\nIf you write your own store and want me to add it to the list, just drop me an [email](mailto:adam.pflug@gmail.com) or [create an issue](https://github.com/AdamPflug/express-brute/issues/new).\n\nA More Complex Example\n----------------------\n``` js\nrequire('connect-flash');\nvar ExpressBrute = require('express-brute'),\n\tMemcachedStore = require('express-brute-memcached'),\n\tmoment = require('moment'),\n    store;\n\nif (config.environment == 'development'){\n\tstore = new ExpressBrute.MemoryStore(); // stores state locally, don't use this in production\n} else {\n\t// stores state with memcached\n\tstore = new MemcachedStore(['127.0.0.1'], {\n\t\tprefix: 'NoConflicts'\n\t});\n}\n\nvar failCallback = function (req, res, next, nextValidRequestDate) {\n\treq.flash('error', \"You've made too many failed attempts in a short period of time, please try again \"+moment(nextValidRequestDate).fromNow());\n\tres.redirect('/login'); // brute force protection triggered, send them back to the login page\n};\nvar handleStoreError = handleStoreError: function (error) {\n\tlog.error(error); // log this error so we can figure out what went wrong\n\t// cause node to exit, hopefully restarting the process fixes the problem\n\tthrow {\n\t\tmessage: error.message,\n\t\tparent: error.parent\n\t};\n}\n// Start slowing requests after 5 failed attempts to do something for the same user\nvar userBruteforce = new ExpressBrute(store, {\n\tfreeRetries: 5,\n\tminWait: 5*60*1000, // 5 minutes\n\tmaxWait: 60*60*1000, // 1 hour,\n\tfailCallback: failCallback,\n\thandleStoreError: handleStoreError\n}\n});\n// No more than 1000 login attempts per day per IP\nvar globalBruteforce = new ExpressBrute(store, {\n\tfreeRetries: 1000,\n\tattachResetToRequest: false,\n\trefreshTimeoutOnRequest: false,\n\tminWait: 25*60*60*1000, // 1 day 1 hour (should never reach this wait time)\n\tmaxWait: 25*60*60*1000, // 1 day 1 hour (should never reach this wait time)\n\tlifetime: 24*60*60, // 1 day (seconds not milliseconds)\n\tfailCallback: failCallback,\n\thandleStoreError: handleStoreError\n});\n\napp.set('trust proxy', 1); // Don't set to \"true\", it's not secure. Make sure it matches your environment\napp.post('/auth',\n\tglobalBruteforce.prevent,\n\tuserBruteforce.getMiddleware({\n\t\tkey: function(req, res, next) {\n\t\t\t// prevent too many attempts for the same username\n\t\t\tnext(req.body.username);\n\t\t}\n\t}),\n\tfunction (req, res, next) {\n\t\tif (User.isValidLogin(req.body.username, req.body.password)) { // omitted for the sake of conciseness\n\t\t \t// reset the failure counter so next time they log in they get 5 tries again before the delays kick in\n\t\t\treq.brute.reset(function () {\n\t\t\t\tres.redirect('/'); // logged in, send them to the home page\n\t\t\t});\n\t\t} else {\n\t\t\tres.flash('error', \"Invalid username or password\")\n\t\t\tres.redirect('/login'); // bad username/password, send them back to the login page\n\t\t}\n\t}\n);\n```\n\nChangelog\n---------\n### v1.0.1\n* BUG: Fixed an edge case where freeretries weren't being respected if app servers had slightly different times\n\n### v1.0.0\n* NEW: Updated to use `Express` 4.x as a peer dependency.\n* REMOVED: `proxyDepth` option on `ExpressBrute` has been removed. Use `app.set('trust proxy', x)` from Express 4 instead. [More Info](http://expressjs.com/en/guide/behind-proxies.html)\n* REMOVED: `getIPFromRequest(req)` has been removed from instances, use `req.ip` instead.\n\n### v0.6.0\n* NEW: Added new ignoreIP option. (Thanks [Magnitus-](https://github.com/Magnitus-)!)\n* CHANGED: `.reset` callbacks are now always called asyncronously, regardless of the implementation of the store (particularly effects `MemoryStore`).\n* CHANGED: Unit tests have been converted from Jasmine to Mocha/Chai/Sinon\n* BUG: Fixed a crash when .reset was called without a callback function\n\n### v0.5.3\n* NEW: Added the `handleStoreError` option to allow more customizable handling of errors that are thrown by the persistent store. Default behavior is to throw the errors as an exception - there is nothing ExpressBrute can do to recover.\n* CHANGED: Errors thrown as a result of errors raised by the store now include the store's error as well, for debugging purposes.\n\n### v0.5.2\n* CHANGED: Stopped using res.send(status, body), as it is deprecated in express 4.x. Instead call res.status and res.send separately (Thanks marinewater!)\n\n### v0.5.1\n* BUG: When setting proxyDepth to 1, ips is never populated with proxied X-Forwarded-For IP.\n\n### v0.5.0\n* NEW: Added an additional `FailTooManyRequests` failure callback, that returns a 429 (TooManyRequests) error instead of 403 (Forbidden). This is a more accurate error status code.\n* NEW: All the built in failure callbacks now set the \"Retry-After\" header to the number of seconds until it is safe to try again. Per [RFC6585](https://tools.ietf.org/html/rfc6585#section-4)\n* NEW: Documentation updated to list some known store implementations.\n* CHANGED: Default failure callback is now `FailTooManyRequests`. `FailForbidden` remains an option for backwards compatiblity.\n* CHANGED: ExpressBrute.MemcachedStore is no longer included by default, and is now available as a separate module (because there are multiple store options it doesn't really make sense to include one by default).\n* CHANGED: `FailMark` no longer sets returns 403 Forbidden, instead does 429 TooManyRequets.\n\n### v0.4.2\n* BUG: In some cases when no callbacks were supplied memcached would drop the request. Ensure that memcached always sees a callback even if ExpressBrute isn't given one.\n\n### v0.4.1\n* NEW: `refreshTimeoutOnRequest` option that allows you to prevent the remaining `lifetime` for a timer from being reset on each request (useful for implementing limits for set time frames, e.g. requests per day)\n* BUG: Lifetimes were not previously getting extended properly for instances of `ExpressBrute.MemoryStore`\n\n### v0.4.0\n* NEW: `attachResetToRequest` parameter that lets you prevent the request object being decorated\n* NEW: `failCallback` can be overriden by `getMiddleware`\n* NEW: `proxyDepth` option on `ExpressBrute` that specifies how many levels of the `X-Forwarded-For` header to trust (inspired by [express-bouncer](https://github.com/dkrutsko/express-bouncer/)).\n* NEW: `getIPFromRequest` method that essentially allows `reset` to used in a similar ways as in v0.2.2. This also respects the new `proxyDepth` setting.\n* CHANGED: `getMiddleware` now takes an options object instead of the key directly.\n\n### v0.3.0\n* NEW: Support for using custom keys to group requests further (e.g. grouping login requests by username)\n* NEW: Support for middleware from multiple instances of `ExpressBrute` on the same route.\n* NEW: Tracking `lifetime` now has a reasonable default derived from the other settings for that instance of `ExpressBrute`\n* NEW: Keys are now hashed before saving to a store, to prevent really long key names and reduce the possibility of collisions.\n* NEW: There is now a convience method that gets attached to `req` object as `req.brute.reset`. It takes a single parameter (a callback), and will reset all the counters used by `ExpressBrute` middleware that was called for the current route.\n* CHANGED: Tracking `lifetime` is now specified on `ExpressBrute` instead of `MemcachedStore`. This also means lifetime is now supported by MemoryStore.\n* CHANGED: The function signature for `ExpressBrute.reset` has changed. It now requires an IP and key be passed instead of a request object.\n* IMPROVED: Efficiency for large values of `freeRetries`.\n* BUG: Removed a small chance of incorrectly triggering brute force protection.\n","maintainers":[{"name":"adampflug","email":"BluParadox@gmail.com"}],"time":{"modified":"2023-02-22T05:41:53.709Z","created":"2013-08-09T10:42:30.957Z","0.1.0":"2013-08-09T10:42:32.048Z","0.1.1":"2013-08-09T21:44:19.946Z","0.1.2":"2013-08-11T06:47:46.720Z","0.2.0":"2013-08-11T09:14:21.296Z","0.2.1":"2013-09-13T18:14:02.486Z","0.2.2":"2013-11-25T01:31:38.399Z","0.3.0":"2013-12-05T05:29:28.169Z","0.4.0":"2013-12-05T21:12:03.133Z","0.4.1":"2013-12-06T16:52:29.204Z","0.4.2":"2013-12-06T17:51:13.137Z","0.5.0":"2014-01-27T01:55:45.348Z","0.5.1":"2014-08-13T18:07:42.069Z","0.5.2":"2014-12-15T05:32:12.318Z","0.5.3":"2015-03-12T04:31:08.707Z","0.6.0":"2015-07-16T04:36:27.709Z","0.7.0-beta.0":"2016-06-11T22:23:32.862Z","1.0.0":"2016-08-22T17:47:37.049Z","1.0.1":"2016-10-11T23:34:42.368Z"},"repository":{"type":"git","url":"git+ssh://git@github.com/AdamPflug/express-brute.git"},"readmeFilename":"README.md","homepage":"https://github.com/AdamPflug/express-brute#readme","keywords":["brute","force","bruteforce","attack","fibonacci","rate","limit","security"],"bugs":{"url":"https://github.com/AdamPflug/express-brute/issues"},"license":"BSD","users":{"llambda":true,"tanmaypatel":true,"vboctor":true,"mcianc":true,"jazoom":true,"yhnavein":true,"seanohollaren":true,"moosecouture":true,"martii":true,"chrisx":true,"jovinbm":true,"uh-engineer":true,"sammok2003":true,"craigpatten":true,"martinspinks":true,"cxueqin":true,"zafaransari":true,"chirag8642":true,"nicomf1982":true,"chirag_purohit71085":true,"yazanrawashdeh":true,"piixiiees":true,"leizongmin":true,"panlw":true,"marcosc90":true,"rocket0191":true,"paraself":true,"kevin-foster":true,"dannowatts":true,"arefm":true,"shanewholloway":true,"vchouhan":true,"hitalos":true,"ys_sidson_aidson":true,"garenyondem":true,"meeh":true,"zeroth007":true,"duriangray":true,"tonillo":true,"touskar":true,"shazron":true,"brightchen":true,"elitelegendary":true,"madeo":true,"ashish.npm":true}}