coinmarketcap-js
Version:
Javascript SDK for CoinMarketCap
58 lines (57 loc) • 2.48 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.get = exports.invoke = void 0;
const axios_1 = require("axios");
const query_string_1 = require("query-string");
const humps_1 = require("humps");
class HTTPResponseError extends Error {
constructor(response) {
super(`HTTP Error Response: ${response.status} ${response.statusText}`);
this.response = response;
}
}
const checkStatus = (response) => {
if (response.status >= 200 && response.status < 300) {
return response;
}
else {
throw new HTTPResponseError(response);
}
};
const invoke = (apiKey, apiBase, apiVersion, func) => (...args) => func(apiKey, apiBase, apiVersion, ...args);
exports.invoke = invoke;
const get = (apiBase, endpoint, apiVersion, apiKey, query) => __awaiter(void 0, void 0, void 0, function* () {
if (!apiKey)
throw new Error("API key missing");
const queryString = query ? (0, query_string_1.stringify)((0, humps_1.decamelizeKeys)(query)) : "";
const url = `${apiBase}/${apiVersion}/${endpoint}?${queryString}`;
const response = yield axios_1.default.get(url, {
headers: {
"X-CMC_PRO_API_KEY": apiKey,
},
});
try {
const okResponse = checkStatus(response);
const data = okResponse.data;
const camelizedData = (0, humps_1.camelizeKeys)(data, function (key, convert) {
// prevent conversion of keys containing only uppercase letters or numbers
return /^[A-Z0-9_]+$/.test(key) ? key : convert(key);
});
return camelizedData;
}
catch (error) {
console.error(error);
const errorBody = error.response.data;
console.error(`Error body: ${errorBody}`);
}
});
exports.get = get;