route('token') ?? $request->header('X-Device-Token') ?? $request->ip(); return Limit::perMinute(30)->by((string) $key); }); RateLimiter::for('qr-scan', fn (Request $request) => Limit::perMinute(20)->by($request->ip())); RateLimiter::for('device-heartbeat', function (Request $request) { return Limit::perMinute(60)->by((string) ($request->header('X-Device-Token') ?? $request->ip())); }); View::composer('partials.sidebar', function ($view) { /** @var User|null $user */ $user = auth()->user(); $isPro = false; if ($user) { $organization = app(OrganizationResolver::class)->resolveForUser($user); if ($organization) { $isPro = app(PlanService::class)->isPro($organization); } } $view->with('isPro', $isPro); }); View::composer(['partials.topbar'], function ($view) { $view->with(\App\Support\MobileTopbar::resolve()); }); } }