UNPKG

@altangent/lib-coinbase-prime

Version:
80 lines 3.21 kB
"use strict"; 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