input('email'))); $emailFingerprint = hash_hmac( 'sha256', $normalizedEmail, (string) config('app.key'), ); $ipAddress = $request->ip() ?? 'unknown'; return [ Limit::perMinute( max(1, (int) config('login-security.rate_limit_per_minute')) )->by("login:identity:{$emailFingerprint}:{$ipAddress}"), Limit::perMinute( max(1, (int) config('login-security.ip_rate_limit_per_minute')) )->by("login:ip:{$ipAddress}"), ]; }); Builder::macro('paginateFromRequest', function (int $defaultPerPage = 15, int $maxPerPage = 100, ?int $page = null) { /** @var Builder $this */ $perPage = (int) request()->query('per_page', $defaultPerPage); $page = $page ?? (int) request()->query('page', 1); if ($perPage <= 0) { $perPage = $defaultPerPage; } if ($perPage > $maxPerPage) { $perPage = $maxPerPage; } if ($page <= 0) { $page = 1; } return $this->paginate(perPage: $perPage, page: $page); }); } }