@vechain/connex-wallet-buddy
Version:
to bridge connex sign request to wallet
82 lines • 5.24 kB
JavaScript
import { browser } from './browser';
// ref: https://github.com/ismailhabib/custom-protocol-detection
function watchEvent(target, event, timeout) {
return new Promise((resolve, reject) => {
// eslint-disable-next-line prefer-const
let cb;
const timer = setTimeout(() => {
target.removeEventListener(event, cb);
reject();
}, timeout);
cb = ev => {
target.removeEventListener(event, cb);
clearTimeout(timer);
resolve(ev);
};
target.addEventListener(event, cb);
});
}
const getHiddenIframe = (() => {
let iframe = null;
return () => {
if (!iframe) {
iframe = document.createElement("iframe");
iframe.style.display = "none";
document.body.appendChild(iframe);
}
return iframe;
};
})();
function openWithHiddenFrame(uri, timeout) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
getHiddenIframe().contentWindow.location.href = uri;
return watchEvent(window, 'blur', timeout);
}
// function openWithTimeoutHack(uri: string, timeout: number) {
// window.location.href = uri
// return watchEvent(window, 'blur', timeout)
// }
// // no longer work after v64
// function openInFirefox(uri: string) {
// try {
// // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
// getHiddenIframe().contentWindow!.location.href = uri
// return Promise.resolve()
// } catch (e) {
// // if (e.name == "NS_ERROR_UNKNOWN_PROTOCOL") {
// return Promise.reject()
// // }
// }
// }
function openWithMsLaunchUri(uri) {
return new Promise((resolve, reject) => {
navigator.msLaunchUri(uri, resolve, reject);
});
}
/**
* open custom protocol uri with installed native app
* @param uri the custom protocol uri
* @param timeout
*/
export function openUri(uri, timeout) {
// eslint-disable-next-line no-extra-boolean-cast
if (!!navigator.msLaunchUri) { //for IE and Edge in Win 8 and Win 10
return openWithMsLaunchUri(uri);
}
if (!browser) {
return null;
}
// iOS is not supported
if (browser.os === 'iOS') {
return null;
}
switch (browser.name) {
case 'chrome':
case 'edge-chromium':
case 'safari':
return openWithHiddenFrame(uri, timeout);
default:
return null;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi11cmkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb3Blbi11cmkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVuQyxnRUFBZ0U7QUFFaEUsU0FBUyxVQUFVLENBQUMsTUFBYyxFQUFFLEtBQWEsRUFBRSxPQUFlO0lBQzlELE9BQU8sSUFBSSxPQUFPLENBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDMUMsd0NBQXdDO1FBQ3hDLElBQUksRUFBdUIsQ0FBQTtRQUMzQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDckMsTUFBTSxFQUFFLENBQUE7UUFDWixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDWCxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDTixNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQ3JDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNuQixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDZixDQUFDLENBQUE7UUFDRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3RDLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQzFCLElBQUksTUFBTSxHQUFHLElBQWdDLENBQUE7SUFDN0MsT0FBTyxHQUFHLEVBQUU7UUFDUixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1lBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQ3BDO1FBQ0QsT0FBTyxNQUFNLENBQUE7SUFDakIsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUVKLFNBQVMsbUJBQW1CLENBQUMsR0FBVyxFQUFFLE9BQWU7SUFDckQsb0VBQW9FO0lBQ3BFLGVBQWUsRUFBRSxDQUFDLGFBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNyRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQzlDLENBQUM7QUFFRCwrREFBK0Q7QUFDL0QsaUNBQWlDO0FBQ2pDLGlEQUFpRDtBQUNqRCxJQUFJO0FBRUosOEJBQThCO0FBQzlCLHdDQUF3QztBQUN4QyxZQUFZO0FBQ1osK0VBQStFO0FBQy9FLCtEQUErRDtBQUMvRCxtQ0FBbUM7QUFDbkMsb0JBQW9CO0FBQ3BCLDBEQUEwRDtBQUMxRCxrQ0FBa0M7QUFDbEMsZUFBZTtBQUNmLFFBQVE7QUFDUixJQUFJO0FBRUosU0FBUyxtQkFBbUIsQ0FBQyxHQUFXO0lBQ3BDLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDekMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQ3JCLE9BQU8sRUFDUCxNQUFNLENBQ1QsQ0FBQTtJQUNMLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVcsRUFBRSxPQUFlO0lBQ2hELGlEQUFpRDtJQUNqRCxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUscUNBQXFDO1FBQ2hFLE9BQU8sbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUE7S0FDbEM7SUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1YsT0FBTyxJQUFJLENBQUE7S0FDZDtJQUVELHVCQUF1QjtJQUN2QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxFQUFFO1FBQ3RCLE9BQU8sSUFBSSxDQUFBO0tBQ2Q7SUFFRCxRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUU7UUFDbEIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLGVBQWUsQ0FBQztRQUNyQixLQUFLLFFBQVE7WUFDVCxPQUFPLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM1QztZQUNJLE9BQU8sSUFBSSxDQUFBO0tBQ2xCO0FBQ0wsQ0FBQyJ9