requestBuilder = $requestBuilder; } /** * Sets the request wrapper. * * @param RequestWrapper $requestWrapper Wrapper used to handle sending * requests to the JSON API. */ public function setRequestWrapper(RequestWrapper $requestWrapper) { $this->requestWrapper = $requestWrapper; } /** * Get the RequestWrapper. * * @return RequestWrapper|null */ public function requestWrapper() { return $this->requestWrapper; } /** * Delivers a request built from the service definition. * * @param string $resource The resource type used for the request. * @param string $method The method used for the request. * @param array $options [optional] Options used to build out the request. * @param array $whitelisted [optional] * @return array * @throws ServiceException */ public function send($resource, $method, array $options = [], $whitelisted = \false) { $options += ['prettyPrint' => \false]; $requestOptions = $this->pluckArray(['restOptions', 'retries', 'retryHeaders', 'requestTimeout', 'restRetryFunction', 'restRetryListener'], $options); try { return \json_decode($this->requestWrapper->send($this->requestBuilder->build($resource, $method, $options), $requestOptions)->getBody(), \true); } catch (NotFoundException $e) { if ($whitelisted) { throw $this->modifyWhitelistedError($e); } throw $e; } } /** * Return a custom API endpoint in the proper format, or default if none provided. * * @param string $default * @param array $config * @param string $apiEndpointTemplate * @return string */ private function getApiEndpoint($default, array $config, string $apiEndpointTemplate = null) { // If the $default parameter is provided, or the user has set an "apiEndoint" config option, // fall back to the previous behavior. if ($res = $config['apiEndpoint'] ?? $default) { if (\substr($res, -1) !== '/') { $res = $res . '/'; } if (\strpos($res, '//') === \false) { $res = 'https://' . $res; } return $res; } // One of the $default or the $template must always be set if (!$apiEndpointTemplate) { throw new UnexpectedValueException('An API endpoint template must be provided if no "apiEndpoint" or default endpoint is set.'); } if (!isset($config['universeDomain'])) { throw new UnexpectedValueException('The "universeDomain" config value must be set to use the default API endpoint template.'); } $apiEndpoint = \str_replace('UNIVERSE_DOMAIN', $config['universeDomain'], $apiEndpointTemplate); // Preserve the behavior of guaranteeing a trailing "/" return $apiEndpoint . (\substr($apiEndpoint, -1) !== '/' ? '/' : ''); } }