bitcoin-cli-ts
Version:
Auto-generated Bitcoin client library for bitcoind JSON-RPC API
50 lines (49 loc) • 2.23 kB
JavaScript
import { __awaiter, __generator } from "tslib";
import { request } from 'undici';
import JSONBigInt from 'json-bigint';
import { JSONRPCClient as Client } from 'json-rpc-2.0';
var parseJson = JSONBigInt({ storeAsString: true }).parse;
var sendRequest = function (payload, clientParams) { return __awaiter(void 0, void 0, void 0, function () {
var url, authHeader, reqHeaders, _a, body, statusCode, headers, responseText, contentType, response;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
url = clientParams.url, authHeader = clientParams.authHeader;
reqHeaders = {
Authorization: authHeader,
'Content-Type': 'application/json',
};
return [4 /*yield*/, request(url, {
method: 'POST',
headers: reqHeaders,
body: JSON.stringify(payload),
})];
case 1:
_a = _b.sent(), body = _a.body, statusCode = _a.statusCode, headers = _a.headers;
return [4 /*yield*/, body.text()];
case 2:
responseText = _b.sent();
if (statusCode !== 200) {
if (statusCode === 401)
return [2 /*return*/, Promise.reject(new Error('Invalid credentials'))];
contentType = headers['content-type'];
response = contentType === 'application/json'
? parseJson(responseText)
: responseText;
return [2 /*return*/, Promise.reject(response.error || new Error(response))];
}
client.receive(parseJson(responseText));
return [2 /*return*/];
}
});
}); };
var client = new Client(sendRequest);
export default function (cmd, settings) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, client
.timeout(settings.timeout || 15000)
.request(cmd.method, cmd.params, settings)];
});
});
}