isProduction()); Gate::policy(WebhookEndpoint::class, WebhookEndpointPolicy::class); Gate::policy(WebhookRequest::class, WebhookRequestPolicy::class); RateLimiter::for('login', function (Request $request): Limit { return Limit::perMinute(5)->by($request->string('email')->lower()->value().'|'.$request->ip()); }); RateLimiter::for('webhooks', function (Request $request): Limit { return Limit::perMinute((int) config('webhooks.rate_limit_per_minute', 60)) ->by('webhook:'.(string) $request->route('token').':'.$request->ip()) ->response(fn (Request $request, array $headers): JsonResponse => response()->json([ 'message' => 'Too many webhook requests. Try again later.', ], 429, $headers)); }); } }