Skip to content
68 changes: 42 additions & 26 deletions xchange-coinbase/pom.xml
Original file line number Diff line number Diff line change
@@ -1,36 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.knowm.xchange</groupId>
<artifactId>xchange-parent</artifactId>
<parent>
<groupId>org.knowm.xchange</groupId>
<artifactId>xchange-parent</artifactId>
<version>5.2.3-SNAPSHOT</version>
</parent>
</parent>

<artifactId>xchange-coinbase</artifactId>
<artifactId>xchange-coinbase</artifactId>

<name>XChange Coinbase</name>
<description>XChange implementation for Coinbase</description>
<name>XChange Coinbase</name>
<description>XChange implementation for Coinbase</description>

<url>http://knowm.org/open-source/xchange/</url>
<inceptionYear>2012</inceptionYear>

<organization>
<name>Knowm Inc.</name>
<url>http://knowm.org/open-source/xchange/</url>
</organization>

<!-- Parent provides default configuration for dependencies -->
<dependencies>
<url>http://knowm.org/open-source/xchange/</url>
<inceptionYear>2012</inceptionYear>

<dependency>
<groupId>org.knowm.xchange</groupId>
<artifactId>xchange-core</artifactId>
<version>${project.version}</version>
</dependency>

</dependencies>
<organization>
<name>Knowm Inc.</name>
<url>http://knowm.org/open-source/xchange/</url>
</organization>

<!-- Parent provides default configuration for dependencies -->
<dependencies>

<dependency>
<groupId>org.knowm.xchange</groupId>
<artifactId>xchange-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.70</version>
</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@
import jakarta.ws.rs.core.MediaType;
import java.io.IOException;
import org.knowm.xchange.coinbase.v2.dto.CoinbaseException;
import org.knowm.xchange.coinbase.v2.dto.marketdata.CoinbaseCurrencyData;
import org.knowm.xchange.coinbase.v2.dto.marketdata.CoinbaseCryptocurrencyData;
import org.knowm.xchange.coinbase.v2.dto.marketdata.CoinbaseExchangeRateData;
import org.knowm.xchange.coinbase.v2.dto.marketdata.CoinbaseFiatCurrencyData;
import org.knowm.xchange.coinbase.v2.dto.marketdata.CoinbasePriceData;
import org.knowm.xchange.coinbase.v2.dto.marketdata.CoinbaseTimeData;
import org.slf4j.Logger;
Expand All @@ -33,7 +34,12 @@ public interface Coinbase {

@GET
@Path("currencies")
CoinbaseCurrencyData getCurrencies(@HeaderParam(CB_VERSION) String apiVersion)
CoinbaseFiatCurrencyData getFiatCurrencies(@HeaderParam(CB_VERSION) String apiVersion)
throws IOException, CoinbaseException;

@GET
@Path("currencies/crypto")
CoinbaseCryptocurrencyData getCryptocurrencies(@HeaderParam(CB_VERSION) String apiVersion)
throws IOException, CoinbaseException;

@GET
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ public interface CoinbaseAuthenticated extends Coinbase {
*
* <p>All request bodies should have content type application/json and be valid JSON.
*
* <p>The CB-ACCESS-SIGN header is generated by creating a sha256 HMAC using the secret key on the
* prehash string timestamp + method + requestPath + body (where + represents string
* <p>The CB-ACCESS-SIGN header is generated by creating a sha256 HMAC using the secret key on
* the prehash string timestamp + method + requestPath + body (where + represents string
* concatenation). The timestamp value is the same as the CB-ACCESS-TIMESTAMP header.
*
* <p>The body is the request body string or omitted if there is no request body (typically for
Expand All @@ -47,128 +47,79 @@ public interface CoinbaseAuthenticated extends Coinbase {

String CB_ACCESS_SIGN = "CB-ACCESS-SIGN";
String CB_ACCESS_TIMESTAMP = "CB-ACCESS-TIMESTAMP";
String CB_AUTHORIZATION_KEY = "Authorization";

String CONTENT_TYPE = "Content-Type";

@GET
@Path("accounts/{accountId}/transactions")
CoinbaseTransactionsResponse getTransactions(
@HeaderParam(CB_VERSION) String apiVersion,
CoinbaseTransactionsResponse getTransactions(@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) ParamsDigest signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
@PathParam("accountId") String accountId)
throws IOException, CoinbaseException;
@PathParam("accountId") String accountId) throws IOException, CoinbaseException;

@GET
@Path("accounts/{accountId}/buys")
CoinbaseBuySellResponse getBuys(
@HeaderParam(CB_VERSION) String apiVersion,
CoinbaseBuySellResponse getBuys(@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) CoinbaseV2Digest signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
@PathParam("accountId") String accountId,
@QueryParam("limit") Integer limit,
@QueryParam("starting_after") String startingAfter)
throws IOException, CoinbaseException;
@PathParam("accountId") String accountId, @QueryParam("limit") Integer limit,
@QueryParam("starting_after") String startingAfter) throws IOException, CoinbaseException;

@GET
@Path("accounts/{accountId}/sells")
CoinbaseBuySellResponse getSells(
@HeaderParam(CB_VERSION) String apiVersion,
CoinbaseBuySellResponse getSells(@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) CoinbaseV2Digest signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
@PathParam("accountId") String accountId,
@QueryParam("limit") Integer limit,
@QueryParam("starting_after") String startingAfter)
throws IOException, CoinbaseException;
@PathParam("accountId") String accountId, @QueryParam("limit") Integer limit,
@QueryParam("starting_after") String startingAfter) throws IOException, CoinbaseException;

@GET
@Path("accounts/{accountId}/deposits")
Map getDeposits(
@HeaderParam(CB_VERSION) String apiVersion,
Map getDeposits(@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) ParamsDigest signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
@PathParam("accountId") String accountId)
throws IOException, CoinbaseException;
@PathParam("accountId") String accountId) throws IOException, CoinbaseException;

@GET
@Path("accounts/{accountId}/withdrawals")
Map getWithdrawals(
@HeaderParam(CB_VERSION) String apiVersion,
Map getWithdrawals(@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) ParamsDigest signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
@PathParam("accountId") String accountId)
throws IOException, CoinbaseException;
@PathParam("accountId") String accountId) throws IOException, CoinbaseException;

@GET
@Path("accounts")
CoinbaseAccountsData getAccounts(
@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) ParamsDigest signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
@QueryParam("limit") Integer limit,
@QueryParam("starting_after") String starting_after)
@HeaderParam(CB_AUTHORIZATION_KEY) ParamsDigest authTokenGenerator,
@QueryParam("limit") Integer limit, @QueryParam("starting_after") String starting_after)
throws IOException, CoinbaseException;

@GET
@Path("accounts/{currency}")
CoinbaseAccountData getAccount(
@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) CoinbaseV2Digest signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
@PathParam("currency") String currency)
throws IOException, CoinbaseException;

@POST
@Path("accounts")
@Consumes(MediaType.APPLICATION_JSON)
CoinbaseAccountData createAccount(
@HeaderParam(CONTENT_TYPE) String contentType,
@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) String signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
Object payload)
throws IOException, CoinbaseException;

@GET
@Path("payment-methods")
CoinbasePaymentMethodsData getPaymentMethods(
@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) CoinbaseV2Digest signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp)
throws IOException, CoinbaseException;
CoinbaseAccountData getAccount(@HeaderParam(CB_AUTHORIZATION_KEY) ParamsDigest authTokenGenerator,
@PathParam("currency") String currency) throws IOException, CoinbaseException;

@POST
@Path("accounts/{account}/buys")
@Consumes(MediaType.APPLICATION_JSON)
CoinbaseBuyData buy(
@HeaderParam(CONTENT_TYPE) String contentType,
@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
CoinbaseBuyData buy(@HeaderParam(CONTENT_TYPE) String contentType,
@HeaderParam(CB_VERSION) String apiVersion, @HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) String signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
@PathParam("account") String accountId,
Object payload)
throws IOException, CoinbaseException;
@PathParam("account") String accountId, Object payload) throws IOException, CoinbaseException;

@POST
@Path("accounts/{account}/sells")
@Consumes(MediaType.APPLICATION_JSON)
CoinbaseSellData sell(
@HeaderParam(CONTENT_TYPE) String contentType,
@HeaderParam(CB_VERSION) String apiVersion,
@HeaderParam(CB_ACCESS_KEY) String apiKey,
CoinbaseSellData sell(@HeaderParam(CONTENT_TYPE) String contentType,
@HeaderParam(CB_VERSION) String apiVersion, @HeaderParam(CB_ACCESS_KEY) String apiKey,
@HeaderParam(CB_ACCESS_SIGN) String signature,
@HeaderParam(CB_ACCESS_TIMESTAMP) BigDecimal timestamp,
@PathParam("account") String accountId,
Object payload)
throws IOException, CoinbaseException;
@PathParam("account") String accountId, Object payload) throws IOException, CoinbaseException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
import org.knowm.xchange.coinbase.v2.service.CoinbaseAccountService;
import org.knowm.xchange.coinbase.v2.service.CoinbaseMarketDataService;
import org.knowm.xchange.coinbase.v2.service.CoinbaseTradeService;
import org.knowm.xchange.service.account.AccountService;
import org.knowm.xchange.service.marketdata.MarketDataService;
import org.knowm.xchange.service.trade.TradeService;
import org.knowm.xchange.utils.AuthUtils;

public class CoinbaseExchange extends BaseExchange implements Exchange {

Expand Down
Loading
Loading