credentialsAreValid($credentials)) { throw new InvalidCredentialsException(sprintf('Credentials must implement either the %s or %s interfaces', HeaderCredentialsInterface::class, ParameterCredentialsInterface::class)); } if (!$this->credentialsAreConfigured($credentials)) { throw new PluginNotConfiguredException('API key is missing'); } // Return cached initialized client if there is one. if (!empty($this->initializedClients[$credentials->getKeyName()])) { return $this->initializedClients[$credentials->getKeyName()]; } $this->credentials = $credentials; if ($credentials instanceof HeaderCredentialsInterface) { $this->initializedClients[$credentials->getKeyName()] = $this->getHeaderClient(); return $this->initializedClients[$credentials->getKeyName()]; } $this->initializedClients[$credentials->getKeyName()] = $this->getParameterClient(); return $this->initializedClients[$credentials->getKeyName()]; } private function credentialsAreValid(AuthCredentialsInterface $credentials): bool { return $credentials instanceof HeaderCredentialsInterface || $credentials instanceof ParameterCredentialsInterface; } /** * @param HeaderCredentialsInterface|ParameterCredentialsInterface|AuthCredentialsInterface $credentials */ private function credentialsAreConfigured(AuthCredentialsInterface $credentials): bool { return !empty($credentials->getApiKey()); } private function getHeaderClient(): ClientInterface { return new Client( [ 'headers' => [$this->credentials->getKeyName() => $this->credentials->getApiKey()], ] ); } private function getParameterClient(): ClientInterface { $handler = new HandlerStack(); $handler->setHandler(new CurlHandler()); $handler->unshift( Middleware::mapRequest( fn (Request $request) => $request->withUri( Uri::withQueryValue($request->getUri(), $this->credentials->getKeyName(), $this->credentials->getApiKey()) ) ) ); return new Client( [ 'handler' => $handler, ] ); } }