UNPKG

@vechain/connex-wallet-buddy

Version:

to bridge connex sign request to wallet

151 lines 10.7 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxRQUFRLE1BQU0sWUFBWSxDQUFBO0FBQ2pDLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBRWxDLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFBO0FBQy9DLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQTtBQUNuQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUE7QUFtQjNCLFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDckIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QixVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUdELFNBQWUsYUFBYSxDQUFDLEdBQVcsRUFBRSxJQUFZLEVBQUUsTUFBYyxFQUFFLEtBQXFCOztRQUN6RixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsSUFBSTtnQkFDQSxPQUFPLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDdEIsS0FBSztvQkFDTCxLQUFLLENBQUMsR0FBRyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxNQUFNO3dCQUNkLElBQUksRUFBRSxJQUFJO3dCQUNWLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQzs0QkFDakIsY0FBYyxFQUFFLGtCQUFrQjt5QkFDckMsQ0FBQztxQkFDTCxDQUFDO2lCQUFDLENBQUMsQ0FBQTthQUNYO1lBQUMsV0FBTTtnQkFDSixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2YsS0FBSztvQkFDTCxLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUNkLENBQUMsQ0FBQTthQUNMO1NBQ0o7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUE7SUFDL0MsQ0FBQztDQUFBO0FBRUQsU0FBZSxZQUFZLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxPQUFlLEVBQUUsTUFBYyxFQUFFLEtBQXFCOztRQUMzRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUE7UUFDaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUNyQyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUU7WUFDMUIsSUFBSTtnQkFDQSxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQzVCLEtBQUs7b0JBQ0wsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDeEQsQ0FBQyxDQUFBO2dCQUNGLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDNUIsS0FBSztvQkFDTCxJQUFJLENBQUMsSUFBSSxFQUFFO2lCQUNkLENBQUMsQ0FBQTtnQkFDRixJQUFJLElBQUksRUFBRTtvQkFDTixPQUFPLElBQUksQ0FBQTtpQkFDZDthQUNKO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDLEVBQUU7b0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtpQkFDM0M7Z0JBQ0QsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNmLEtBQUs7b0JBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQztpQkFDZCxDQUFDLENBQUE7YUFDTDtTQUNKO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUM5QixDQUFDO0NBQUE7QUFFRCxJQUFJLE1BQU0sR0FBMkIsSUFBSSxDQUFBO0FBRXpDLFNBQWUsSUFBSSxDQUNmLElBQU8sRUFDUCxHQUF5RSxFQUN6RSxPQUE2RSxFQUM3RSxTQUFpQixFQUNqQixLQUFtQixFQUNuQixVQUFtQyxFQUNuQyxNQUFjOztRQUVkLElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1NBQ3RDO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxHQUFHLElBQUksUUFBUSxFQUFTLENBQUE7UUFFNUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQTtRQUNyQyxNQUFNLEdBQUcsR0FBbUI7WUFDeEIsSUFBSTtZQUNKLEdBQUcsRUFBRSxTQUFTO1lBQ2QsT0FBTyxFQUFFO2dCQUNMLE9BQU8sRUFBRSxHQUFHO2dCQUNaLE9BQU8sa0NBQU8sT0FBTyxLQUFFLFVBQVUsRUFBRSxTQUFTLEdBQUU7YUFDakQ7WUFDRCxLQUFLLEVBQUUsS0FBSyxFQUFFO1NBQ2pCLENBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU1QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFbEMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBRXBCLElBQUk7WUFDQSxtQ0FBbUM7WUFDbkMsTUFBTSxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFFN0MsS0FBSyxDQUFDLEdBQVMsRUFBRTtnQkFDYixJQUFJO29CQUNBLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDZixLQUFLO3dCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUM7cUJBQ2QsQ0FBQyxDQUFBO29CQUNGLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtpQkFDN0I7Z0JBQUMsV0FBTSxHQUFHO1lBQ2YsQ0FBQyxDQUFBLENBQUMsRUFBRSxDQUFBO1lBRUosS0FBSyxDQUFDLEdBQVMsRUFBRTtnQkFDYixJQUFJO29CQUNBLE1BQU0sWUFBWSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7b0JBQ2xFLFFBQVEsR0FBRyxJQUFJLENBQUE7b0JBQ2YsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO29CQUNiLFVBQVUsSUFBSSxVQUFVLEVBQUUsQ0FBQTtpQkFDN0I7Z0JBQUMsV0FBTSxHQUFHO1lBQ2YsQ0FBQyxDQUFBLENBQUMsRUFBRSxDQUFBO1lBRUosTUFBTSxRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDcEYsTUFBTSxJQUFJLEdBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDbEQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQzlCO1lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBYyxDQUFBO1NBQzdCO2dCQUFTO1lBQ04sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtTQUNoQjtJQUNMLENBQUM7Q0FBQTtBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ2xCLFNBQWlCLEVBQ2pCLEtBQW1CLEVBQ25CLFVBQW1DLEVBQ25DLE1BQWU7SUFFZixPQUFPO1FBQ0gsTUFBTSxDQUFDLEdBQTRCLEVBQUUsT0FBZ0M7WUFDakUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLGVBQWUsQ0FBQyxDQUFBO1FBQzVGLENBQUM7UUFDRCxRQUFRLENBQUMsR0FBOEIsRUFBRSxPQUFrQztZQUN2RSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksZUFBZSxDQUFDLENBQUE7UUFDOUYsQ0FBQztLQUNKLENBQUE7QUFDTCxDQUFDIn0=