mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-05-16 11:02:11 +08:00
Add redis-rate-limiter and tests.
This commit is contained in:
41
redis-rate-limiter/redis-rate-limiter-tests.ts
Normal file
41
redis-rate-limiter/redis-rate-limiter-tests.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
/// <reference path="../express/express.d.ts" />
|
||||
/// <reference path="../redis/redis.d.ts" />
|
||||
/// <reference path="redis-rate-limiter.d.ts" />
|
||||
|
||||
import * as express from 'express';
|
||||
import * as redis from 'redis';
|
||||
import * as rateLimiter from 'redis-rate-limiter';
|
||||
|
||||
var num: number;
|
||||
var str: string;
|
||||
var options: redis.ClientOpts;
|
||||
var redisClient = redis.createClient(num, str, options);
|
||||
|
||||
var limit = rateLimiter.create({
|
||||
redis: redisClient,
|
||||
key: function(x) { return x.ip },
|
||||
rate: '100/minute'
|
||||
});
|
||||
|
||||
var request = {} as express.Request;
|
||||
limit(request, function(err, rate) {
|
||||
if (err) {
|
||||
console.warn('Rate limiting not available');
|
||||
} else {
|
||||
console.log('Rate window: ' + rate.window); // 60
|
||||
console.log('Rate limit: ' + rate.limit); // 100
|
||||
console.log('Rate current: ' + rate.current); // 74
|
||||
if (rate.over) {
|
||||
console.error('Over the limit!');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var middleware = rateLimiter.middleware({
|
||||
redis: redisClient,
|
||||
key: 'ip',
|
||||
rate: '100/minute'
|
||||
});
|
||||
|
||||
var app = express();
|
||||
app.use(middleware);
|
||||
44
redis-rate-limiter/redis-rate-limiter.d.ts
vendored
Normal file
44
redis-rate-limiter/redis-rate-limiter.d.ts
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
// Type definitions for redis-rate-limiter 1.0.3
|
||||
// Project: https://github.com/TabDigital/redis-rate-limiter
|
||||
// Definitions by: Seth Westphal <https://github.com/westy92>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
|
||||
/// <reference path="../express/express.d.ts" />
|
||||
/// <reference path="../redis/redis.d.ts" />
|
||||
|
||||
declare module "redis-rate-limiter" {
|
||||
|
||||
import * as express from 'express';
|
||||
import * as redis from 'redis';
|
||||
|
||||
class RedisRateLimiter {
|
||||
|
||||
public static create(options: RedisRateLimiter.Options):
|
||||
(req: express.Request, callback: (err: Error, res: RedisRateLimiter.Response) => void) => void;
|
||||
public static middleware(options: RedisRateLimiter.Options): express.RequestHandler;
|
||||
|
||||
}
|
||||
|
||||
namespace RedisRateLimiter {
|
||||
|
||||
export interface Options {
|
||||
redis: redis.RedisClient;
|
||||
key: 'ip' | ((req: express.Request) => string);
|
||||
window?: number;
|
||||
limit?: number;
|
||||
rate?: string;
|
||||
}
|
||||
|
||||
export interface Response {
|
||||
key: string;
|
||||
current: number;
|
||||
limit: number;
|
||||
window: number;
|
||||
over: boolean;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export = RedisRateLimiter;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user