JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrkey = $key; $this->maxAttempts = $maxAttempts; $this->decaySeconds = $decaySeconds; } /** * Create a new rate limit. * * @param int $maxAttempts * @param int $decaySeconds * @return static */ public static function perSecond($maxAttempts, $decaySeconds = 1) { return new static('', $maxAttempts, $decaySeconds); } /** * Create a new rate limit. * * @param int $maxAttempts * @param int $decayMinutes * @return static */ public static function perMinute($maxAttempts, $decayMinutes = 1) { return new static('', $maxAttempts, 60 * $decayMinutes); } /** * Create a new rate limit using minutes as decay time. * * @param int $decayMinutes * @param int $maxAttempts * @return static */ public static function perMinutes($decayMinutes, $maxAttempts) { return new static('', $maxAttempts, 60 * $decayMinutes); } /** * Create a new rate limit using hours as decay time. * * @param int $maxAttempts * @param int $decayHours * @return static */ public static function perHour($maxAttempts, $decayHours = 1) { return new static('', $maxAttempts, 60 * 60 * $decayHours); } /** * Create a new rate limit using days as decay time. * * @param int $maxAttempts * @param int $decayDays * @return static */ public static function perDay($maxAttempts, $decayDays = 1) { return new static('', $maxAttempts, 60 * 60 * 24 * $decayDays); } /** * Create a new unlimited rate limit. * * @return static */ public static function none() { return new Unlimited; } /** * Set the key of the rate limit. * * @param mixed $key * @return $this */ public function by($key) { $this->key = $key; return $this; } /** * Set the callback that should generate the response when the limit is exceeded. * * @param callable $callback * @return $this */ public function response(callable $callback) { $this->responseCallback = $callback; return $this; } /** * Get a potential fallback key for the limit. * * @return string */ public function fallbackKey() { $prefix = $this->key ? '' : "{$this->key}:"; return "{$prefix}attempts:{$this->maxAttempts}:decay:{$this->decaySeconds}"; } }