UNPKG

bitpay-sdk

Version:

Complete version of the NodeJS library for the new cryptographically secure BitPay API

186 lines 7.03 kB
"use strict"; 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