<?php
namespace Coinbase\Wallet;
use Coinbase\Wallet\Authentication\ApiKeyAuthentication;
use Coinbase\Wallet\Authentication\Authentication;
use Coinbase\Wallet\Authentication\OAuthAuthentication;
use GuzzleHttp\Client as GuzzleClient;
use GuzzleHttp\ClientInterface;
use Psr\Log\LoggerInterface;
class Configuration
{
const DEFAULT_API_URL = 'https://api.coinbase.com';
const DEFAULT_API_VERSION = '2016-02-01';
private $authentication;
private $apiUrl;
private $apiVersion;
private $caBundle;
private $logger;
/**
* Creates a new configuration with OAuth authentication.
*
* @param string $accessToken An OAuth access token
* @param string $refreshToken An OAuth refresh token
*
* @return Configuration A new configuration instance
*/
public static function oauth($accessToken, $refreshToken = null)
{
return new static(
new OAuthAuthentication($accessToken, $refreshToken)
);
}
/**
* Creates a new configuration with API key authentication.
*
* @param string $apiKey An API key
* @param string $apiSecret An API secret
*
* @return Configuration A new configuration instance
*/
public static function apiKey($apiKey, $apiSecret)
{
return new static(
new ApiKeyAuthentication($apiKey, $apiSecret)
);
}
public function __construct(Authentication $authentication)
{
$this->authentication = $authentication;
$this->apiUrl = self::DEFAULT_API_URL;
$this->apiVersion = self::DEFAULT_API_VERSION;
$this->caBundle = __DIR__.'/../etc/ca-coinbase.crt';
}
/** @return HttpClient */
public function createHttpClient(ClientInterface $transport = null)
{
$httpClient = new HttpClient(
$this->apiUrl,
$this->apiVersion,
$this->authentication,
$transport ?: new GuzzleClient()
);
$httpClient->setCaBundle($this->caBundle);
$httpClient->setLogger($this->logger);
return $httpClient;
}
/** @return Mapper */
public function createMapper()
{
return new Mapper();
}
public function getAuthentication()
{
return $this->authentication;
}
public function setAuthentication(Authentication $authentication)
{
$this->authentication = $authentication;
}
public function getApiUrl()
{
return $this->apiUrl;
}
public function setApiUrl($apiUrl)
{
$this->apiUrl = $apiUrl;
}
public function getApiVersion()
{
return $this->apiVersion;
}
public function setApiVersion($apiVersion)
{
$this->apiVersion = $apiVersion;
}
public function getCaBundle()
{
return $this->caBundle;
}
public function setCaBundle($caBundle)
{
$this->caBundle = $caBundle;
}
public function getLogger()
{
return $this->logger;
}
public function setLogger(LoggerInterface $logger = null)
{
$this->logger = $logger;
}
}