@vechain/connex-wallet-buddy
Version:
to bridge connex sign request to wallet
151 lines • 10.7 kB
JavaScript
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());
});
};
import Deferred from './deferred';
import * as Helper from './helper';
const DEFAULT_TOS_URL = 'https://tos.vecha.in/';
const ACCEPTED_SUFFIX = '.accepted';
const RESP_SUFFIX = '.resp';
function sleep(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
}
function submitRequest(rid, json, tosUrl, abort) {
return __awaiter(this, void 0, void 0, function* () {
const src = new URL(rid, tosUrl).href;
for (let i = 0; i < 3; i++) {
try {
return yield Promise.race([
abort,
fetch(src, {
method: 'POST',
body: json,
headers: new Headers({
'Content-Type': 'application/json'
})
})
]);
}
catch (_a) {
yield Promise.race([
abort,
sleep(2000)
]);
}
}
throw new Error('failed to submit request');
});
}
function pollResponse(rid, suffix, timeout, tosUrl, abort) {
return __awaiter(this, void 0, void 0, function* () {
let errCount = 0;
const deadline = Date.now() + timeout;
while (Date.now() < deadline) {
try {
const resp = yield Promise.race([
abort,
fetch(new URL(`${rid}${suffix}?wait=1`, tosUrl).href)
]);
const text = yield Promise.race([
abort,
resp.text()
]);
if (text) {
return text;
}
}
catch (err) {
if (++errCount > 2) {
throw new Error('failed fetch response');
}
yield Promise.race([
abort,
sleep(3000)
]);
}
}
throw new Error('timeout');
});
}
let _abort = null;
function sign(type, msg, options, genesisId, nonce, blake2b256, tosUrl) {
return __awaiter(this, void 0, void 0, function* () {
if (_abort) {
_abort.reject(new Error('aborted'));
}
const abort = _abort = new Deferred();
const onAccepted = options.onAccepted;
const req = {
type,
gid: genesisId,
payload: {
message: msg,
options: Object.assign(Object.assign({}, options), { onAccepted: undefined })
},
nonce: nonce()
};
const json = JSON.stringify(req);
const rid = blake2b256(json);
const src = new URL(rid, tosUrl).href;
const helper = Helper.connect(src);
let accepted = false;
try {
// submit request and poll response
yield submitRequest(rid, json, tosUrl, abort);
void (() => __awaiter(this, void 0, void 0, function* () {
try {
yield Promise.race([
abort,
sleep(1500)
]);
!accepted && helper.show();
}
catch (_a) { }
}))();
void (() => __awaiter(this, void 0, void 0, function* () {
try {
yield pollResponse(rid, ACCEPTED_SUFFIX, 60 * 1000, tosUrl, abort);
accepted = true;
helper.hide();
onAccepted && onAccepted();
}
catch (_b) { }
}))();
const respJson = yield pollResponse(rid, RESP_SUFFIX, 10 * 60 * 1000, tosUrl, abort);
const resp = JSON.parse(respJson);
if (resp.error) {
throw new Error(resp.error);
}
return resp.payload;
}
finally {
abort.reject(new Error('aborted'));
helper.hide();
}
});
}
/**
* create an instance of wallet buddy to help send signing requests to wallet app
* @param genesisId the genesis id of requests binding to
* @param nonce random bytes generator
* @param blake2b256 blake2b256 hash function
* @param tosUrl the optional customized tos url
*/
export function create(genesisId, nonce, blake2b256, tosUrl) {
return {
signTx(msg, options) {
return sign('tx', msg, options, genesisId, nonce, blake2b256, tosUrl || DEFAULT_TOS_URL);
},
signCert(msg, options) {
return sign('cert', msg, options, genesisId, nonce, blake2b256, tosUrl || DEFAULT_TOS_URL);
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxRQUFRLE1BQU0sWUFBWSxDQUFBO0FBQ2pDLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBRWxDLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFBO0FBQy9DLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQTtBQUNuQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUE7QUFtQjNCLFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDckIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QixVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUdELFNBQWUsYUFBYSxDQUFDLEdBQVcsRUFBRSxJQUFZLEVBQUUsTUFBYyxFQUFFLEtBQXFCOztRQUN6RixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsSUFBSTtnQkFDQSxPQUFPLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDdEIsS0FBSztvQkFDTCxLQUFLLENBQUMsR0FBRyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxNQUFNO3dCQUNkLElBQUksRUFBRSxJQUFJO3dCQUNWLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQzs0QkFDakIsY0FBYyxFQUFFLGtCQUFrQjt5QkFDckMsQ0FBQztxQkFDTCxDQUFDO2lCQUFDLENBQUMsQ0FBQTthQUNYO1lBQUMsV0FBTTtnQkFDSixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2YsS0FBSztvQkFDTCxLQUFLLENB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