@tronweb3/tronwallet-adapter-tronlink
Version:
Wallet adapter for TronLink Wallet extension and TronLink app.
80 lines • 3.61 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.supportTron = supportTron;
exports.supportTronLink = supportTronLink;
exports.isInTronLinkApp = isInTronLinkApp;
exports.openTronLink = openTronLink;
exports.waitTronwebReady = waitTronwebReady;
const tronwallet_abstract_adapter_1 = require("@tronweb3/tronwallet-abstract-adapter");
function supportTron() {
return (0, tronwallet_abstract_adapter_1.isInBrowser)() && !!(window.tron && window.tron.isTronLink);
}
function supportTronLink() {
return (0, tronwallet_abstract_adapter_1.isInBrowser)() && !!(supportTron() || window.tronLink || window.tronWeb);
}
/**
* Detect if in TronLinkApp
* Tron DApp running in the DApp Explorer injects iTron objects automatically to offer customized App service.
* See [here](https://docs.tronlink.org/tronlink-app/dapp-support/dapp-explorer)
*/
function isInTronLinkApp() {
return (0, tronwallet_abstract_adapter_1.isInBrowser)() && typeof window.iTron !== 'undefined';
}
function openTronLink({ dappIcon, dappName } = { dappIcon: '', dappName: '' }) {
if (!supportTronLink() && (0, tronwallet_abstract_adapter_1.isInMobileBrowser)() && !isInTronLinkApp()) {
let defaultDappName = '', defaultDappIcon = '';
try {
defaultDappName = document.title;
const link = document.querySelector('link[rel*="icon"]');
if (link) {
defaultDappIcon = new URL(link.getAttribute('href') || '', location.href).toString();
}
}
catch (_a) {
// console.error(e);
}
const { origin, pathname, search, hash } = window.location;
const url = origin + pathname + search + (hash.includes('?') ? hash : `${hash}?_=1`);
const params = {
action: 'open',
actionId: Date.now() + '',
callbackUrl: 'http://someurl.com', // no need callback
dappIcon: dappIcon || defaultDappIcon,
dappName: dappName || defaultDappName,
url,
protocol: 'TronLink',
version: '1.0',
chainId: '0x2b6653dc',
};
window.location.href = `tronlinkoutside://pull.activity?param=${encodeURIComponent(JSON.stringify(params))}`;
return true;
}
return false;
}
function waitTronwebReady(tronObj) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
const interval = setInterval(() => {
if (tronObj.tronWeb) {
clearInterval(interval);
clearTimeout(timeout);
resolve();
}
}, 50);
const timeout = setTimeout(() => {
clearInterval(interval);
reject('`window.tron.tronweb` is not ready.');
}, 2000);
});
});
}
//# sourceMappingURL=utils.js.map