Browse Source

Refactor XMLHttpRequest to use isomorphic-fetch

node
Luke Childs 5 years ago
parent
commit
4e8b741ea2
  1. 43
      package-lock.json
  2. 4
      package.json
  3. 33
      src/index.js
  4. 35
      ts_src/index.ts

43
package-lock.json

@ -651,6 +651,11 @@
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
"dev": true
},
"@types/isomorphic-fetch": {
"version": "0.0.35",
"resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz",
"integrity": "sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw=="
},
"@types/istanbul-lib-coverage": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
@ -1654,6 +1659,14 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"encoding": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
"requires": {
"iconv-lite": "~0.4.13"
}
},
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@ -2207,7 +2220,6 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
@ -2365,8 +2377,7 @@
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"is-typedarray": {
"version": "1.0.0",
@ -2405,6 +2416,15 @@
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
},
"isomorphic-fetch": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
"integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
"requires": {
"node-fetch": "^1.0.1",
"whatwg-fetch": ">=0.10.0"
}
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@ -3315,6 +3335,15 @@
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"node-fetch": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"requires": {
"encoding": "^0.1.11",
"is-stream": "^1.0.1"
}
},
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@ -3917,8 +3946,7 @@
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sane": {
"version": "4.1.0",
@ -4965,6 +4993,11 @@
"iconv-lite": "0.4.24"
}
},
"whatwg-fetch": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
"integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
},
"whatwg-mimetype": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",

4
package.json

@ -35,7 +35,9 @@
"src"
],
"dependencies": {
"bitcoinjs-lib": "^5.1.7"
"@types/isomorphic-fetch": "0.0.35",
"bitcoinjs-lib": "^5.1.7",
"isomorphic-fetch": "^2.2.1"
},
"devDependencies": {
"@types/jest": "^25.2.1",

33
src/index.js

@ -1,6 +1,7 @@
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
const bitcoinjs_lib_1 = require('bitcoinjs-lib');
const fetch = require('isomorphic-fetch');
async function requestPayjoinWithCustomRemoteCall(psbt, remoteCall) {
const clonedPsbt = psbt.clone();
clonedPsbt.finalizeAllInputs();
@ -219,22 +220,20 @@ function getGlobalTransaction(psbt) {
// @ts-ignore
return psbt.__CACHE.__TX;
}
function doRequest(psbt, payjoinEndpoint) {
return new Promise((resolve, reject) => {
if (!psbt) {
reject();
}
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState !== 4) return;
if (xhr.status >= 200 && xhr.status < 300) {
resolve(bitcoinjs_lib_1.Psbt.fromHex(xhr.responseText));
} else {
reject(xhr.responseText);
}
};
xhr.setRequestHeader('Content-Type', 'text/plain');
xhr.open('POST', payjoinEndpoint);
xhr.send(psbt.toHex());
async function doRequest(psbt, payjoinEndpoint) {
if (!psbt) {
throw new Error();
}
const response = await fetch(payjoinEndpoint, {
method: 'POST',
headers: new Headers({
'Content-Type': 'text/plain',
}),
body: psbt.toHex(),
});
const responseText = await response.text();
if (!response.ok) {
throw new Error(responseText);
}
return bitcoinjs_lib_1.Psbt.fromBase64(responseText);
}

35
ts_src/index.ts

@ -4,6 +4,7 @@ import {
GlobalXpub,
PsbtInput,
} from 'bip174/src/lib/interfaces';
import * as fetch from 'isomorphic-fetch';
type Nullable<T> = T | null;
@ -254,26 +255,26 @@ function getGlobalTransaction(psbt: Psbt): Transaction {
return psbt.__CACHE.__TX;
}
function doRequest(
async function doRequest(
psbt: Psbt,
payjoinEndpoint: string,
): Promise<Nullable<Psbt>> {
return new Promise<Nullable<Psbt>>((resolve, reject): void => {
if (!psbt) {
reject();
}
if (!psbt) {
throw new Error();
}
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = (): void => {
if (xhr.readyState !== 4) return;
if (xhr.status >= 200 && xhr.status < 300) {
resolve(Psbt.fromHex(xhr.responseText));
} else {
reject(xhr.responseText);
}
};
xhr.setRequestHeader('Content-Type', 'text/plain');
xhr.open('POST', payjoinEndpoint);
xhr.send(psbt.toHex());
const response = await fetch(payjoinEndpoint, {
method: 'POST',
headers: new Headers({
'Content-Type': 'text/plain',
}),
body: psbt.toHex(),
});
const responseText = await response.text();
if (!response.ok) {
throw new Error(responseText);
}
return Psbt.fromBase64(responseText);
}

Loading…
Cancel
Save