bitpay-sdk
Version:
Complete version of the NodeJS library for the new cryptographically secure BitPay API
186 lines • 7.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BitPayClient = void 0;
const index_1 = require("../index");
const qs = require("querystring");
const BitPayException_1 = require("../Exceptions/BitPayException");
const BitPayResponseParser_1 = require("../util/BitPayResponseParser");
const BitPayExceptionProvider_1 = require("../Exceptions/BitPayExceptionProvider");
const LoggerProvider_1 = require("../Logger/LoggerProvider");
class BitPayClient {
constructor(baseUrl, ecKey, identity, platformInfo) {
this.ecKey = ecKey;
this.baseUrl = baseUrl;
this.identity = identity;
this.defaultHeaders = {
'X-Accept-Version': index_1.Env.BitpayApiVersion,
'x-bitpay-plugin-info': index_1.Env.BitpayPluginInfo,
'x-bitpay-api-frame': index_1.Env.BitpayApiFrame,
'x-bitpay-api-frame-version': index_1.Env.BitpayApiFrameVersion,
'Content-Type': 'application/json'
};
if (platformInfo) {
this.defaultHeaders['x-bitpay-platform-info'] = platformInfo;
}
this.keyUtils = new index_1.KeyUtils();
this.responseParser = new BitPayResponseParser_1.BitPayResponseParser();
}
/**
*
* @param uri
* @param parameters
* @param signatureRequired
* @returns
*/
async get(uri, parameters, signatureRequired = false) {
try {
let fullUrl = this.baseUrl + uri;
if (parameters !== null) {
const query = '?' + qs.stringify(parameters);
fullUrl = fullUrl + query;
}
let headers = this.defaultHeaders;
if (signatureRequired) {
headers = this.getSignatureHeaders(fullUrl, headers, null);
}
const method = 'GET';
LoggerProvider_1.LoggerProvider.getLogger().logRequest(method, fullUrl, null);
const response = await fetch(fullUrl, {
method: method,
headers: headers
});
const jsonObject = (await response.json());
LoggerProvider_1.LoggerProvider.getLogger().logResponse(method, fullUrl, JSON.stringify(jsonObject));
return this.responseParser.getJsonDataFromJsonResponse(jsonObject);
}
catch (e) {
if (e instanceof BitPayException_1.default) {
throw e;
}
BitPayExceptionProvider_1.BitPayExceptionProvider.throwApiExceptionWithMessage(JSON.stringify(e.message), null);
}
}
/**
*
* @param uri
* @param formData
* @param signatureRequired
* @returns
*/
async post(uri, formData = {}, signatureRequired = true) {
try {
formData = JSON.stringify(formData);
const fullUrl = this.baseUrl + uri;
let headers = this.defaultHeaders;
if (signatureRequired) {
headers = this.getSignatureHeaders(fullUrl, headers, formData);
}
const method = 'POST';
const response = await fetch(fullUrl, {
method: method,
headers: headers,
body: formData
});
const jsonObject = (await response.json());
LoggerProvider_1.LoggerProvider.getLogger().logResponse(method, fullUrl, JSON.stringify(jsonObject));
return this.responseParser.getJsonDataFromJsonResponse(jsonObject);
}
catch (e) {
if (e instanceof BitPayException_1.default) {
throw e;
}
BitPayExceptionProvider_1.BitPayExceptionProvider.throwApiExceptionWithMessage(JSON.stringify(e.message), null);
}
}
/**
*
* @param uri
* @param formData
* @param signatureRequired
* @returns
*/
async put(uri, formData = {}, signatureRequired = true) {
try {
formData = JSON.stringify(formData);
const fullUrl = this.baseUrl + uri;
let headers = this.defaultHeaders;
if (signatureRequired) {
headers = this.getSignatureHeaders(fullUrl, headers, formData);
}
const method = 'PUT';
const response = await fetch(fullUrl, {
method: method,
headers: headers,
body: formData
});
const jsonObject = (await response.json());
LoggerProvider_1.LoggerProvider.getLogger().logResponse(method, fullUrl, JSON.stringify(jsonObject));
return this.responseParser.getJsonDataFromJsonResponse(jsonObject);
}
catch (e) {
if (e instanceof BitPayException_1.default) {
throw e;
}
BitPayExceptionProvider_1.BitPayExceptionProvider.throwApiExceptionWithMessage(JSON.stringify(e.message), null);
}
}
/**
*
* @param uri
* @param parameters
* @param signatureRequired
* @returns
*/
async delete(uri, parameters = {}, signatureRequired = true) {
try {
const query = '?' + qs.stringify(parameters);
const fullUrl = this.baseUrl + uri + query;
let headers = this.defaultHeaders;
if (signatureRequired) {
headers = this.getSignatureHeaders(fullUrl, headers, null);
}
const method = 'DELETE';
const response = await fetch(fullUrl, {
method: method,
headers: headers
});
const jsonObject = (await response.json());
LoggerProvider_1.LoggerProvider.getLogger().logResponse(method, fullUrl, JSON.stringify(jsonObject));
return this.responseParser.getJsonDataFromJsonResponse(jsonObject);
}
catch (e) {
if (e instanceof BitPayException_1.default) {
throw e;
}
BitPayExceptionProvider_1.BitPayExceptionProvider.throwApiExceptionWithMessage(JSON.stringify(e.message), null);
}
}
/**
*
* @param fullUrl
* @param headers
* @param jsonData
* @throws BitPayApiExtension
*/
getSignatureHeaders(fullUrl, headers, jsonData) {
if (jsonData !== null) {
fullUrl = fullUrl + jsonData;
}
if (this.ecKey == null) {
BitPayExceptionProvider_1.BitPayExceptionProvider.throwGenericExceptionWithMessage('Missing ecKey');
throw new Error();
}
try {
headers['X-Signature'] = this.keyUtils.sign(fullUrl, this.ecKey);
}
catch (e) {
BitPayExceptionProvider_1.BitPayExceptionProvider.throwGenericExceptionWithMessage('Wrong ecKey. ' + e.message);
}
if (this.identity !== null) {
headers['X-Identity'] = this.identity;
}
return headers;
}
}
exports.BitPayClient = BitPayClient;
//# sourceMappingURL=BitPayClient.js.map