display($attributes); } /** * Render the captcha JavaScript */ public static function renderJs(): string { if (! self::isEnabled()) { return ''; } $provider = self::getProvider(); if ($provider === 'turnstile') { return TurnstileService::renderJs(); } // Default to reCAPTCHA return app('captcha')->renderJs(); } /** * Get the captcha response field name */ public static function getResponseFieldName(): string { $provider = self::getProvider(); if ($provider === 'turnstile') { return 'cf-turnstile-response'; } return 'g-recaptcha-response'; } /** * Get validation rules for captcha */ public static function getValidationRules(): array { if (! self::isEnabled()) { return []; } $provider = self::getProvider(); $fieldName = self::getResponseFieldName(); if ($provider === 'turnstile') { return [ $fieldName => [ 'required', new \App\Rules\TurnstileRule, ], ]; } // Default to reCAPTCHA return [ $fieldName => [ 'required', 'captcha', ], ]; } }