joi.func().arity(1).default(ttl => ttl)
joi.object().keys({ client: joi.object().keys({ give: joi.func().arity(2).required(), take: joi.func().arity(2).required(), reset: joi.func().arity(2).required() }).unknown().required(), ext: joi.string().valid(['onPreAuth', 'onPostAuth', 'onPreHandler']).default('onPreHandler'), allRoutes: joi.boolean().default(false), bucket: joi.string().alphanum(), countSuccess: joi.boolean().default(true), addHeaders: joi.boolean().default(true), headerLimit: joi.string().default('X-RateLimit-Limit'), headerRemaining: joi.string().default('X-RateLimit-Remaining'), headerReset: joi.string().default('X-RateLimit-Reset'), message: joi.string().default('you have exceeded your request limit'), onError: joi.func().arity(3), getKey: joi.func().arity(1).default(getRequestIP), ttlTransform: joi.func().arity(1).default(ttl => ttl), errorSize: joi.number().integer().min(0).default(1), errorDelay: joi.number().integer().min(1).default(60) }).required()
joi.func().arity(1).default(ttl => ttl)
joi.object().keys({ client: joi.object().keys({ give: joi.func().arity(2).required(), take: joi.func().arity(2).required(), reset: joi.func().arity(2).required() }).unknown().required(), ext: joi.string().valid(['onPreAuth', 'onPostAuth', 'onPreHandler']).default('onPreHandler'), allRoutes: joi.boolean().default(false), bucket: joi.string().alphanum(), countSuccess: joi.boolean().default(true), addHeaders: joi.boolean().default(true), headerLimit: joi.string().default('X-RateLimit-Limit'), headerRemaining: joi.string().default('X-RateLimit-Remaining'), headerReset: joi.string().default('X-RateLimit-Reset'), message: joi.string().default('you have exceeded your request limit'), onError: joi.func().arity(3), getKey: joi.func().arity(1).default(getRequestIP), ttlTransform: joi.func().arity(1).default(ttl => ttl), errorSize: joi.number().integer().min(0).default(1), errorDelay: joi.number().integer().min(1).default(60) }).required()