settingsService = $settingsService; } /** * Create a CAPTCHA service instance for the given provider * * @param string $provider The CAPTCHA provider * @return CaptchaServiceInterface|null */ public function create(string $provider): ?CaptchaServiceInterface { switch ($provider) { case CaptchaProviderResolver::PROVIDER_RECAPTCHA: return new RecaptchaService($this->settingsService); case CaptchaProviderResolver::PROVIDER_HCAPTCHA: return new HCaptchaService($this->settingsService); case CaptchaProviderResolver::PROVIDER_TURNSTILE: return new TurnstileService($this->settingsService); default: return null; } } /** * Get all supported CAPTCHA providers * * @return array */ public function getSupportedProviders(): array { return [ CaptchaProviderResolver::PROVIDER_RECAPTCHA, CaptchaProviderResolver::PROVIDER_HCAPTCHA, CaptchaProviderResolver::PROVIDER_TURNSTILE, ]; } /** * Check if a provider is supported (has implementation) * * @param string $provider * @return bool */ public function isSupported(string $provider): bool { return $this->create($provider) !== null; } }