File: //home/globfdxw/www/wp-content/plugins/wpforms/vendor_prefixed/apimatic/core/src/ClientBuilder.php
<?php
declare (strict_types=1);
namespace WPForms\Vendor\Core;
use WPForms\Vendor\Core\Logger\ApiLogger;
use WPForms\Vendor\Core\Logger\Configuration\LoggingConfiguration;
use WPForms\Vendor\Core\Logger\NullApiLogger;
use WPForms\Vendor\Core\Request\Parameters\HeaderParam;
use WPForms\Vendor\Core\Response\Types\ErrorType;
use WPForms\Vendor\Core\Types\Sdk\CoreCallback;
use WPForms\Vendor\Core\Utils\CoreHelper;
use WPForms\Vendor\Core\Utils\JsonHelper;
use WPForms\Vendor\CoreInterfaces\Core\Authentication\AuthInterface;
use WPForms\Vendor\CoreInterfaces\Core\Request\ParamInterface;
use WPForms\Vendor\CoreInterfaces\Http\HttpClientInterface;
use WPForms\Vendor\CoreInterfaces\Sdk\ConverterInterface;
class ClientBuilder
{
public static function init(HttpClientInterface $httpClient) : self
{
return new ClientBuilder($httpClient);
}
/**
* @var HttpClientInterface
*/
private $httpClient;
/**
* @var ConverterInterface
*/
private $converter;
/**
* @var array<string,AuthInterface>
*/
private $authManagers = [];
/**
* @var array<string,ErrorType>
*/
private $globalErrors = [];
/**
* @var array<string,string>
*/
private $serverUrls = [];
/**
* @var string|null
*/
private $defaultServer;
/**
* @var ParamInterface[]
*/
private $globalConfig = [];
/**
* @var ParamInterface[]
*/
private $globalRuntimeConfig = [];
/**
* @var CoreCallback|null
*/
private $apiCallback;
/**
* @var LoggingConfiguration|null
*/
private $loggingConfig;
/**
* @var string|null
*/
private $userAgent;
/**
* @var array<string,string>
*/
private $userAgentConfig = [];
/**
* @var JsonHelper
*/
private $jsonHelper;
private function __construct(HttpClientInterface $httpClient)
{
$this->httpClient = $httpClient;
}
public function converter(ConverterInterface $converter) : self
{
$this->converter = $converter;
return $this;
}
/**
* @param array<string,AuthInterface> $authManagers
* @return $this
*/
public function authManagers(array $authManagers) : self
{
$this->authManagers = $authManagers;
return $this;
}
/**
* @param array<string,ErrorType> $globalErrors
* @return $this
*/
public function globalErrors(array $globalErrors) : self
{
$this->globalErrors = $globalErrors;
return $this;
}
/**
* @param array<string,string> $serverUrls
* @return $this
*/
public function serverUrls(array $serverUrls, string $defaultServer) : self
{
$this->serverUrls = $serverUrls;
$this->defaultServer = $defaultServer;
return $this;
}
public function apiCallback($apiCallback) : self
{
if ($apiCallback instanceof CoreCallback) {
$this->apiCallback = $apiCallback;
}
return $this;
}
public function loggingConfiguration(?LoggingConfiguration $loggingConfig) : self
{
$this->loggingConfig = $loggingConfig;
return $this;
}
/**
* @param ParamInterface[] $globalParams
* @return $this
*/
public function globalConfig(array $globalParams) : self
{
$this->globalConfig = $globalParams;
return $this;
}
public function globalRuntimeParam(ParamInterface $globalRuntimeParam) : self
{
$this->globalRuntimeConfig[] = $globalRuntimeParam;
return $this;
}
public function userAgent(string $userAgent) : self
{
$this->userAgent = $userAgent;
return $this;
}
/**
* @param array<string,string> $userAgentConfig
* @return $this
*/
public function userAgentConfig(array $userAgentConfig) : self
{
$this->userAgentConfig = $userAgentConfig;
return $this;
}
public function jsonHelper(JsonHelper $jsonHelper) : self
{
$this->jsonHelper = $jsonHelper;
return $this;
}
private function addUserAgentToGlobalHeaders() : void
{
if (\is_null($this->userAgent)) {
return;
}
$placeHolders = ['{engine}' => 'PHP', '{engine-version}' => \phpversion(), '{os-info}' => CoreHelper::getOsInfo()];
$placeHolders = \array_merge($placeHolders, $this->userAgentConfig);
$this->userAgent = \str_replace(\array_keys($placeHolders), \array_values($placeHolders), $this->userAgent);
$this->globalConfig[] = HeaderParam::init('user-agent', $this->userAgent);
$this->userAgent = null;
}
public function build() : Client
{
$this->addUserAgentToGlobalHeaders();
return new Client($this->httpClient, $this->converter, $this->jsonHelper, $this->authManagers, $this->serverUrls, $this->defaultServer, $this->globalConfig, $this->globalRuntimeConfig, $this->globalErrors, $this->apiCallback, \is_null($this->loggingConfig) ? new NullApiLogger() : new ApiLogger($this->loggingConfig));
}
}