New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

bitpay-sdk

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bitpay-sdk - npm Package Compare versions

Comparing version 2.0.2112 to 3.0.2202

dist/Client.d.ts

2

dist/setup/BitPaySetup.d.ts
declare const fs: any;
declare const request: any;
declare const axios: any;
declare const BitPaySDK: any;

@@ -4,0 +4,0 @@ declare const readline: any;

@@ -1,464 +0,324 @@

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());
});
const fs = require('fs');
const axios = require('axios').default;
const BitPaySDK = require('../index');
const readline = require('readline');
let privateKeyPath = __dirname + '/../secure/private_key';
let ConfFilePath = __dirname + '/../secure/BitPay.config.json';
let keyUtils = new BitPaySDK.KeyUtils();
let keyPair;
let ecKey;
let environment;
let storeFile = true;
let apiUrl;
let merchantToken;
let merchantPairCode;
let payoutToken;
let payoutPairCode;
let keyPath = '';
let keyPlain = '';
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let main = function () {
selectEnv();
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
let selectEnv = async () => {
try {
console.log("Select target environment:");
rl.question('Press T for testing or P for production: \n', async (answer) => {
switch (answer.toLowerCase()) {
case 't':
environment = 'Test';
await setEnv(environment);
selectCreateKey();
break;
case 'p':
environment = 'Prod';
await setEnv(environment);
selectCreateKey();
break;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
selectEnv();
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
});
}
catch (e) {
console.log(e);
}
};
var _this = this;
var fs = require('fs');
var request = require('request');
var BitPaySDK = require('../src/index');
var readline = require('readline');
var privateKeyPath = __dirname + '/../secure/private_key';
var ConfFilePath = __dirname + '/../secure/BitPay.config.json';
var keyUtils = new BitPaySDK.KeyUtils();
var keyPair;
var ecKey;
var environment;
var storeFile = true;
var apiUrl;
var merchantToken;
var merchantPairCode;
var payoutToken;
var payoutPairCode;
var keyPath = '';
var keyPlain = '';
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
var main = function () {
selectEnv();
let setEnv = async (env) => {
if (env == 'Test') {
apiUrl = 'https://test.bitpay.com';
return;
}
apiUrl = 'https://bitpay.com';
};
var selectEnv = function () { return __awaiter(_this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
try {
console.log("Select target environment:");
rl.question('Press T for testing or P for production: \n', function (answer) { return __awaiter(_this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = answer.toLowerCase();
switch (_a) {
case 't': return [3 /*break*/, 1];
case 'p': return [3 /*break*/, 3];
}
return [3 /*break*/, 5];
case 1:
environment = 'Test';
return [4 /*yield*/, setEnv(environment)];
case 2:
_b.sent();
selectCreateKey();
return [3 /*break*/, 6];
case 3:
environment = 'Prod';
return [4 /*yield*/, setEnv(environment)];
case 4:
_b.sent();
selectCreateKey();
return [3 /*break*/, 6];
case 5:
selectEnv();
_b.label = 6;
case 6: return [2 /*return*/];
}
});
}); });
let selectCreateKey = async () => {
try {
console.log("Enter your private key or its location");
rl.question('Or press Enter to generate a brand new key: ', async (answer) => {
switch (answer.toLowerCase()) {
case '':
await createNewKey();
break;
default:
await loadKey(answer);
break;
}
});
}
catch (e) {
console.log(e);
}
};
let createNewKey = async () => {
try {
console.log("Generating private key... \n");
keyPair = keyUtils.generate_keypair();
ecKey = keyUtils.load_keypair(keyPair);
await sleep(2000);
console.log('Generated Private Key: ' + ecKey.getPrivate("hex"));
console.log('With Public Key: ' + ecKey.getPublic("hex") + '\n');
await storeKey();
}
catch (e) {
console.log(e);
}
};
let loadKey = async (privateKey) => {
try {
if (fs.existsSync(privateKey)) {
console.log("Loading private key... \n");
await sleep(2000);
ecKey = keyUtils.load_keypair(fs.readFileSync(privateKey).toString().trim());
console.log('Loaded Private Key: ' + ecKey.getPrivate("hex"));
console.log('With Public Key: ' + keyUtils.getPublicKeyFromPrivateKey(ecKey));
console.log('From: ' + privateKey);
console.log("\n");
selectTokens();
}
catch (e) {
console.log(e);
else {
ecKey = keyUtils.load_keypair(privateKey);
console.log("Loading private key... \n");
await sleep(2000);
console.log('Loaded Private Key: ' + ecKey.getPrivate("hex"));
console.log('With Public Key: ' + keyUtils.getPublicKeyFromPrivateKey(ecKey));
console.log('From: ' + privateKey);
console.log("\n");
selectTokens();
}
return [2 /*return*/];
});
}); };
var setEnv = function (env) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (env == 'Test') {
apiUrl = 'https://test.bitpay.com';
return [2 /*return*/];
}
catch (e) {
console.log(e);
}
};
let storeKey = async () => {
try {
if (!fs.existsSync(__dirname + '/../secure')) {
fs.mkdirSync(__dirname + '/../secure');
}
apiUrl = 'https://bitpay.com';
return [2 /*return*/];
});
}); };
var selectCreateKey = function () { return __awaiter(_this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
try {
console.log("Enter your private key or its location");
rl.question('Or press Enter to generate a brand new key: ', function (answer) { return __awaiter(_this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = answer.toLowerCase();
switch (_a) {
case '': return [3 /*break*/, 1];
}
return [3 /*break*/, 3];
case 1: return [4 /*yield*/, createNewKey()];
case 2:
_b.sent();
return [3 /*break*/, 5];
case 3: return [4 /*yield*/, loadKey(answer)];
case 4:
_b.sent();
return [3 /*break*/, 5];
case 5: return [2 /*return*/];
}
});
}); });
}
catch (e) {
console.log(e);
}
return [2 /*return*/];
});
}); };
var createNewKey = function () { return __awaiter(_this, void 0, void 0, function () {
var e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 3, , 4]);
console.log("Generating private key... \n");
keyPair = keyUtils.generate_keypair();
ecKey = keyUtils.load_keypair(keyPair);
return [4 /*yield*/, sleep(2000)];
case 1:
_a.sent();
console.log('Generated Private Key: ' + ecKey.getPrivate("hex"));
console.log('With Public Key: ' + ecKey.getPublic("hex") + '\n');
return [4 /*yield*/, storeKey()];
case 2:
_a.sent();
return [3 /*break*/, 4];
case 3:
e_1 = _a.sent();
console.log(e_1);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); };
var loadKey = function (privateKey) { return __awaiter(_this, void 0, void 0, function () {
var e_2;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 5, , 6]);
if (!fs.existsSync(privateKey)) return [3 /*break*/, 2];
console.log("Loading private key... \n");
return [4 /*yield*/, sleep(2000)];
case 1:
_a.sent();
ecKey = keyUtils.load_keypair(fs.readFileSync(privateKey).toString().trim());
console.log('Loaded Private Key: ' + ecKey.getPrivate("hex"));
console.log('With Public Key: ' + keyUtils.getPublicKeyFromPrivateKey(ecKey));
console.log('From: ' + privateKey);
console.log("\n");
selectTokens();
return [3 /*break*/, 4];
case 2:
ecKey = keyUtils.load_keypair(privateKey);
console.log("Loading private key... \n");
return [4 /*yield*/, sleep(2000)];
case 3:
_a.sent();
console.log('Loaded Private Key: ' + ecKey.getPrivate("hex"));
console.log('With Public Key: ' + keyUtils.getPublicKeyFromPrivateKey(ecKey));
console.log('From: ' + privateKey);
console.log("\n");
selectTokens();
_a.label = 4;
case 4: return [3 /*break*/, 6];
case 5:
e_2 = _a.sent();
console.log(e_2);
return [3 /*break*/, 6];
case 6: return [2 /*return*/];
}
});
}); };
var storeKey = function () { return __awaiter(_this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
try {
if (!fs.existsSync(__dirname + '/../secure')) {
fs.mkdirSync(__dirname + '/../secure');
console.log("Select the way you want to store your private key:");
rl.question('Press F for storing in a text file or T for plain text in your config file: ', async (answer) => {
switch (answer.toLowerCase()) {
case 'f':
storeFile = true;
keyPath = privateKeyPath + '_' + environment.toLowerCase() + '.key';
console.log("Saving private key... \n");
sleep(500);
fs.writeFile(privateKeyPath + '_' + environment.toLowerCase() + '.key', ecKey.getPrivate("hex"), { mode: 0o755 }, function (err) {
if (err)
throw err;
console.log('Private key saved in file: ' + keyPath + '\n');
});
await sleep(1000);
selectTokens();
break;
case 't':
storeFile = false;
keyPlain = ecKey.getPrivate("hex");
console.log("Saving private key... \n");
await sleep(1000);
selectTokens();
break;
default:
storeKey();
}
console.log("Select the way you want to store your private key:");
rl.question('Press F for storing in a text file or T for plain text in your config file: ', function (answer) { return __awaiter(_this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = answer.toLowerCase();
switch (_a) {
case 'f': return [3 /*break*/, 1];
case 't': return [3 /*break*/, 3];
}
return [3 /*break*/, 5];
case 1:
storeFile = true;
keyPath = privateKeyPath + '_' + environment.toLowerCase() + '.key';
console.log("Saving private key... \n");
sleep(500);
fs.writeFile(privateKeyPath + '_' + environment.toLowerCase() + '.key', ecKey.getPrivate("hex"), { mode: 493 }, function (err) {
if (err)
throw err;
console.log('Private key saved in file: ' + keyPath + '\n');
});
return [4 /*yield*/, sleep(1000)];
case 2:
_b.sent();
selectTokens();
return [3 /*break*/, 6];
case 3:
storeFile = false;
keyPlain = ecKey.getPrivate("hex");
console.log("Saving private key... \n");
return [4 /*yield*/, sleep(1000)];
case 4:
_b.sent();
selectTokens();
return [3 /*break*/, 6];
case 5:
storeKey();
_b.label = 6;
case 6: return [2 /*return*/];
}
});
}); });
});
}
catch (e) {
console.log(e);
}
};
let selectTokens = async () => {
try {
console.log("Select the tokens that you would like to request:");
rl.question('Press M for merchant, P for payout, or B for both: \n', async (answer) => {
switch (answer.toLowerCase()) {
case 'm':
case 'p':
case 'b':
console.log("Requesting tokens... \n");
await sleep(500);
await requestTokens(answer);
break;
default:
selectTokens();
}
});
}
catch (e) {
console.log(e);
}
};
let requestTokens = async (option) => {
try {
let reqMerchant = false;
let reqPayout = false;
switch (option.toLowerCase()) {
case 'm':
reqMerchant = true;
reqPayout = false;
break;
case 'p':
reqMerchant = false;
reqPayout = true;
break;
case 'b':
reqMerchant = true;
reqPayout = true;
break;
}
catch (e) {
console.log(e);
let sin = keyUtils.get_sin_from_key(ecKey);
let headers = {
"x-accept-version": "2.0.0",
"Content-type": "application/json"
};
if (reqMerchant) {
console.log("Requesting Merchant token... \n");
let facade = 'merchant';
let postData = { id: sin, facade: facade };
let options = {
url: apiUrl + '/tokens',
method: 'POST',
body: postData,
headers: headers,
json: true
};
axios({
method: options.method,
url: options.url,
headers: options.headers,
data: {
id: options.body.id,
facade: options.body.facade
}
}).then((response) => {
const data = response.data.data[0];
merchantToken = data.token;
merchantPairCode = data.pairingCode;
}).catch((e) => {
console.log(e.message);
});
await sleep(2000);
}
return [2 /*return*/];
});
}); };
var selectTokens = function () { return __awaiter(_this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
try {
console.log("Select the tokens that you would like to request:");
rl.question('Press M for merchant, P for payout, or B for both: \n', function (answer) { return __awaiter(_this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = answer.toLowerCase();
switch (_a) {
case 'm': return [3 /*break*/, 1];
case 'p': return [3 /*break*/, 1];
case 'b': return [3 /*break*/, 1];
}
return [3 /*break*/, 4];
case 1:
console.log("Requesting tokens... \n");
return [4 /*yield*/, sleep(500)];
case 2:
_b.sent();
return [4 /*yield*/, requestTokens(answer)];
case 3:
_b.sent();
return [3 /*break*/, 5];
case 4:
selectTokens();
_b.label = 5;
case 5: return [2 /*return*/];
}
});
}); });
}
catch (e) {
console.log(e);
}
return [2 /*return*/];
});
}); };
var requestTokens = function (option) { return __awaiter(_this, void 0, void 0, function () {
var reqMerchant, reqPayout, sin, headers, facade, postData, options, facade, postData, options, e_3;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 6, , 7]);
reqMerchant = false;
reqPayout = false;
switch (option.toLowerCase()) {
case 'm':
reqMerchant = true;
reqPayout = false;
break;
case 'p':
reqMerchant = false;
reqPayout = true;
break;
case 'b':
reqMerchant = true;
reqPayout = true;
break;
if (reqPayout) {
console.log("Requesting Payout token... \n");
let facade = 'payout';
let postData = { id: sin, facade: facade };
let options = {
url: apiUrl + '/tokens',
method: 'POST',
body: postData,
headers: headers,
json: true
};
axios({
method: options.method,
url: options.url,
headers: options.headers,
data: {
id: options.body.id,
facade: options.body.facade
}
sin = keyUtils.get_sin_from_key(ecKey);
headers = {
"x-accept-version": "2.0.0",
"Content-type": "application/json"
};
if (!reqMerchant) return [3 /*break*/, 2];
console.log("Requesting Merchant token... \n");
facade = 'merchant';
postData = { id: sin, facade: facade };
options = {
url: apiUrl + '/tokens',
method: 'POST',
body: postData,
headers: headers,
json: true
};
request(options, function (error, response, body) {
var jsonResponse = JSON.parse(JSON.stringify(body.data[0]));
merchantToken = jsonResponse['token'];
merchantPairCode = jsonResponse['pairingCode'];
});
return [4 /*yield*/, sleep(2000)];
case 1:
_a.sent();
_a.label = 2;
case 2:
if (!reqPayout) return [3 /*break*/, 4];
console.log("Requesting Payout token... \n");
facade = 'payout';
postData = { id: sin, facade: facade };
options = {
url: apiUrl + '/tokens',
method: 'POST',
body: postData,
headers: headers,
json: true
};
request(options, function (error, response, body) {
var jsonResponse = JSON.parse(JSON.stringify(body.data[0]));
payoutToken = jsonResponse['token'];
payoutPairCode = jsonResponse['pairingCode'];
});
return [4 /*yield*/, sleep(2000)];
case 3:
_a.sent();
_a.label = 4;
case 4: return [4 /*yield*/, updateConfigFile()];
case 5:
_a.sent();
return [3 /*break*/, 7];
case 6:
e_3 = _a.sent();
console.log(e_3);
return [3 /*break*/, 7];
case 7: return [2 /*return*/];
}).then((response) => {
const data = response.data.data[0];
payoutToken = data.token;
payoutPairCode = data.pairingCode;
}).catch((e) => {
console.log(e.message);
});
await sleep(2000);
}
});
}); };
var updateConfigFile = function () { return __awaiter(_this, void 0, void 0, function () {
var confObj;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (environment == 'Test') {
confObj = {
'BitPayConfiguration': {
"Environment": "Test",
"EnvConfig": {
"Test": {
"PrivateKeyPath": keyPath,
"PrivateKey": keyPlain,
"ApiTokens": {
"merchant": merchantToken,
"payout": payoutToken
}
}
}
await updateConfigFile();
}
catch (e) {
console.log(e);
}
};
let updateConfigFile = async () => {
// console.log(merchantToken);
// console.log(payoutToken);
let confObj;
if (environment == 'Test') {
confObj = {
'BitPayConfiguration': {
"Environment": "Test",
"EnvConfig": {
"Test": {
"PrivateKeyPath": keyPath,
"PrivateKey": keyPlain,
"ApiTokens": {
"merchant": merchantToken,
"payout": payoutToken
}
};
}
}
else {
confObj = {
'BitPayConfiguration': {
"Environment": "Prod",
"EnvConfig": {
"Prod": {
"PrivateKeyPath": keyPath,
"PrivateKey": keyPlain,
"ApiTokens": {
"merchant": merchantToken,
"payout": payoutToken
}
}
}
}
};
}
else {
confObj = {
'BitPayConfiguration': {
"Environment": "Prod",
"EnvConfig": {
"Prod": {
"PrivateKeyPath": keyPath,
"PrivateKey": keyPlain,
"ApiTokens": {
"merchant": merchantToken,
"payout": payoutToken
}
};
}
confObj['BitPayConfiguration']['EnvConfig'][environment] = {
"PrivateKeyPath": keyPath,
"PrivateKey": keyPlain,
"ApiTokens": {
"merchant": merchantToken,
"payout": payoutToken
}
};
fs.writeFile(ConfFilePath, JSON.stringify(confObj, null, 4), function (err) {
if (err)
throw err;
console.log('Generated configuration file');
console.log('And saved in file: ' + ConfFilePath + '\n');
});
return [4 /*yield*/, sleep(5000)];
case 1:
_a.sent();
console.log('Configuration generated successfully! \n');
console.log("To complete your setup, Go to " + apiUrl + "/dashboard/merchant/api-tokens and pair this client with your merchant account using the pairing codes:");
if (merchantToken) {
console.log(merchantPairCode + " for the Merchant facade.");
}
if (payoutToken) {
console.log(payoutPairCode + " for the Payout facade ONLY if you have requested access for this role.");
}
process.exit();
return [2 /*return*/];
}
};
}
confObj['BitPayConfiguration']['EnvConfig'][environment] = {
"PrivateKeyPath": keyPath,
"PrivateKey": keyPlain,
"ApiTokens": {
"merchant": merchantToken,
"payout": payoutToken
}
};
fs.writeFile(ConfFilePath, JSON.stringify(confObj, null, 4), function (err) {
if (err)
throw err;
console.log('Generated configuration file');
console.log('And saved in file: ' + ConfFilePath + '\n');
});
}); };
await sleep(5000);
console.log('Configuration generated successfully! \n');
console.log("To complete your setup, Go to " + apiUrl + "/dashboard/merchant/api-tokens and pair this client with your merchant account using the pairing codes:");
if (merchantToken) {
console.log(merchantPairCode + " for the Merchant facade.");
}
if (payoutToken) {
console.log(payoutPairCode + " for the Payout facade ONLY if you have requested access for this role.");
}
process.exit();
};
function sleep(ms) {
return new Promise(function (resolve) {
return new Promise((resolve) => {
setTimeout(resolve, ms);

@@ -465,0 +325,0 @@ });

{
"name": "bitpay-sdk",
"version": "2.0.2112",
"version": "3.0.2202",
"description": "Complete version of the NodeJS library for the new cryptographically secure BitPay API",

@@ -9,5 +9,3 @@ "main": "dist/index",

"dist/**/*.js",
"dist/**/*.d.ts",
"setup/*.js",
"setup/*.d.ts"
"dist/**/*.d.ts"
],

@@ -43,17 +41,13 @@ "scripts": {

"dependencies": {
"axios": "^0.25.0",
"bs58": "^4.0.1",
"elliptic": "^6.5.4",
"request": "^2.85.0",
"request-promise": "^4.2.6",
"underscore": "^1.13.2"
"elliptic": "^6.5.4"
},
"devDependencies": {
"@types/axios": "^0.14.0",
"@types/bs58": "^4.0.0",
"@types/elliptic": "^6.4.14",
"@types/jest": "^24.0.13",
"@types/node": "^11.15.54",
"@types/node": "^12.20.42",
"@types/puppeteer": "^1.20.8",
"@types/request": "^2.48.7",
"@types/request-promise": "^4.1.48",
"@types/underscore": "^1.11.4",
"jest": "^24.9.0",

@@ -60,0 +54,0 @@ "prettier": "^1.17.1",

@@ -23,2 +23,6 @@ <img src="https://bitpay.com/_nuxt/img/bitpay-logo-blue.1c0494b.svg" width="150">

## Supported Environments
The BitPay NodeJS client supports Node.js 12 and higher.
## License

@@ -25,0 +29,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc