@vechain/connex-wallet-buddy
Version:
to bridge connex sign request to wallet
136 lines • 10.1 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.create = void 0;
require("../../framework/dist/driver-interface");
const W = require("./wallet");
const DEFAULT_TOS_URL = 'https://tos.vecha.in:5678/';
const ACCEPTED_SUFFIX = '.accepted';
const RESP_SUFFIX = '.resp';
function submitRequest(rid, json, signal, tosUrl) {
return __awaiter(this, void 0, void 0, function* () {
const src = new URL(rid, tosUrl).href;
for (let i = 0; i < 3 && !signal.done; i++) {
try {
return yield fetch(src, {
method: 'POST',
body: json,
headers: new Headers({
'Content-Type': 'application/json'
})
});
}
catch (_a) {
yield new Promise(resolve => setTimeout(resolve, 2000));
}
}
throw new Error('failed to submit request');
});
}
function pollResponse(rid, suffix, timeout, signal, tosUrl) {
return __awaiter(this, void 0, void 0, function* () {
let errCount = 0;
const deadline = Date.now() + timeout;
while (Date.now() < deadline && !signal.done) {
try {
const resp = yield fetch(new URL(`${rid}${suffix}?wait=1`, tosUrl).href);
const text = yield resp.text();
if (text) {
return text;
}
}
catch (err) {
if (++errCount > 2) {
throw new Error('failed fetch response');
}
yield new Promise(resolve => setTimeout(resolve, 3000));
}
}
throw new Error('timeout');
});
}
function sign(type, msg, options, genesisId, nonce, blake2b256, tosUrl) {
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 signal = {
done: false
};
return Promise.race([
// open wallet and watch wallet closing
(() => __awaiter(this, void 0, void 0, function* () {
try {
const w = yield W.connect(new URL(rid, tosUrl).href);
while (!signal.done) {
if (w && w.closed) {
throw new Error('wallet window closed');
}
yield new Promise(resolve => setTimeout(resolve, 1000));
}
}
finally {
signal.done = true;
}
}))(),
// submit request and poll response
(() => __awaiter(this, void 0, void 0, function* () {
try {
yield submitRequest(rid, json, signal, tosUrl);
onAccepted && void (() => __awaiter(this, void 0, void 0, function* () {
try {
yield pollResponse(rid, ACCEPTED_SUFFIX, 60 * 1000, signal, tosUrl);
!signal.done && onAccepted && onAccepted();
}
catch (err) {
console.warn(err);
}
}))();
const respJson = yield pollResponse(rid, RESP_SUFFIX, 10 * 60 * 1000, signal, tosUrl);
const resp = JSON.parse(respJson);
if (resp.error) {
throw new Error(resp.error);
}
return resp.payload;
}
finally {
signal.done = true;
}
}))()
]);
}
/**
* 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
*/
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);
}
};
}
exports.create = create;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaURBQThDO0FBQzlDLDhCQUE2QjtBQUU3QixNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQTtBQUNwRCxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUE7QUFDbkMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFBO0FBdUIzQixTQUFlLGFBQWEsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFFLE1BQWMsRUFBRSxNQUFjOztRQUNsRixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUk7Z0JBQ0EsT0FBTyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ3BCLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxJQUFJO29CQUNWLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQzt3QkFDakIsY0FBYyxFQUFFLGtCQUFrQjtxQkFDckMsQ0FBQztpQkFDTCxDQUFDLENBQUE7YUFDTDtZQUFDLFdBQU07Z0JBQ0osTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTthQUMxRDtTQUNKO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0lBQy9DLENBQUM7Q0FBQTtBQUVELFNBQWUsWUFBWSxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsT0FBZSxFQUFFLE1BQWMsRUFBRSxNQUFjOztRQUNwRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUE7UUFD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
;