@altangent/lib-coinbase-prime
Version:
Coinbase Prime API client
80 lines • 3.21 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoinbasePrimeClient = void 0;
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
const lib_http_1 = require("@altangent/lib-http");
const querystring_1 = __importDefault(require("querystring"));
const crypto_1 = __importDefault(require("crypto"));
class CoinbasePrimeClient {
constructor(key, passphrase, signingKey, urlBase = "https://api.prime.coinbase.com") {
this.key = key;
this.passphrase = passphrase;
this.signingKey = signingKey;
this.urlBase = urlBase;
}
async listPortfolios() {
return this.request("/v1/portfolios");
}
async listPortfolioBalances(portfolio_id) {
return this.request(`/v1/portfolios/${portfolio_id}/balances`);
}
async listPortfolioTransactions(portfolio_id, params) {
return this.request(`/v1/portfolios/${portfolio_id}/transactions`, params);
}
async listPortfolioWallets(portfolio_id) {
return this.request(`/v1/portfolios/${portfolio_id}/wallets`);
}
async listPortfolioOrders(portfolio_id, params) {
return this.request(`/v1/portfolios/${portfolio_id}/orders`, params);
}
/**
* Refer to https://docs.cdp.coinbase.com/prime/reference/primerestapi_getportfoliofills
* @param portfolio_id
* @param params
*/
async listPortfolioFills(portfolio_id, params) {
return this.request(`/v1/portfolios/${portfolio_id}/fills`, params);
}
request(path, query) {
const key = this.key;
const passphrase = this.passphrase;
const signingKey = this.signingKey;
const pathQuery = query ? path + "?" + querystring_1.default.encode(query) : path;
const timestamp = Math.floor(new Date().getTime() / 1000);
const method = "GET";
const body = "";
const sig = this._sign(this._createSigData(timestamp, method, path, body), signingKey);
const headers = {
"X-CB-ACCESS-KEY": key,
"X-CB-ACCESS-PASSPHRASE": passphrase,
"X-CB-ACCESS-SIGNATURE": sig.toString("base64"),
"X-CB-ACCESS-TIMESTAMP": timestamp,
};
const url = this.urlBase + pathQuery;
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
return (0, lib_http_1.request)({ url, method, headers });
}
_cleanOptions(options) {
const result = {};
for (const key in options) {
if (options[key] !== undefined) {
result[key] = options[key];
}
}
return result;
}
_createSigData(timestamp, method, path, body) {
return `${timestamp}${method.toUpperCase()}${path}${body}`;
}
_sign(data, key) {
const hmac = crypto_1.default.createHmac("sha256", key);
hmac.update(data, "utf-8");
return hmac.digest();
}
}
exports.CoinbasePrimeClient = CoinbasePrimeClient;
//# sourceMappingURL=CoinbasePrimeClient.js.map