UNPKG

pli-pay

Version:
794 lines (747 loc) 22.3 kB
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = require('react'); var React__default = _interopDefault(React); var Web3Modal = _interopDefault(require('web3modal')); var WalletConnect = _interopDefault(require('@walletconnect/web3-provider')); var ethers = require('ethers'); var xdcpayWeb3modal = require('xdcpay-web3modal'); var detectEthereumProvider = _interopDefault(require('@metamask/detect-provider')); // A type of promise-like that resolves synchronously and supports only one observer const _Pact = /*#__PURE__*/(function() { function _Pact() {} _Pact.prototype.then = function(onFulfilled, onRejected) { const result = new _Pact(); const state = this.s; if (state) { const callback = state & 1 ? onFulfilled : onRejected; if (callback) { try { _settle(result, 1, callback(this.v)); } catch (e) { _settle(result, 2, e); } return result; } else { return this; } } this.o = function(_this) { try { const value = _this.v; if (_this.s & 1) { _settle(result, 1, onFulfilled ? onFulfilled(value) : value); } else if (onRejected) { _settle(result, 1, onRejected(value)); } else { _settle(result, 2, value); } } catch (e) { _settle(result, 2, e); } }; return result; }; return _Pact; })(); // Settles a pact synchronously function _settle(pact, state, value) { if (!pact.s) { if (value instanceof _Pact) { if (value.s) { if (state & 1) { state = value.s; } value = value.v; } else { value.o = _settle.bind(null, pact, state); return; } } if (value && value.then) { value.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2)); return; } pact.s = state; pact.v = value; const observer = pact.o; if (observer) { observer(pact); } } } function _isSettledPact(thenable) { return thenable instanceof _Pact && thenable.s & 1; } const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator"; const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator"; // Asynchronously implement a generic for loop function _for(test, update, body) { var stage; for (;;) { var shouldContinue = test(); if (_isSettledPact(shouldContinue)) { shouldContinue = shouldContinue.v; } if (!shouldContinue) { return result; } if (shouldContinue.then) { stage = 0; break; } var result = body(); if (result && result.then) { if (_isSettledPact(result)) { result = result.s; } else { stage = 1; break; } } if (update) { var updateValue = update(); if (updateValue && updateValue.then && !_isSettledPact(updateValue)) { stage = 2; break; } } } var pact = new _Pact(); var reject = _settle.bind(null, pact, 2); (stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject); return pact; function _resumeAfterBody(value) { result = value; do { if (update) { updateValue = update(); if (updateValue && updateValue.then && !_isSettledPact(updateValue)) { updateValue.then(_resumeAfterUpdate).then(void 0, reject); return; } } shouldContinue = test(); if (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) { _settle(pact, 1, result); return; } if (shouldContinue.then) { shouldContinue.then(_resumeAfterTest).then(void 0, reject); return; } result = body(); if (_isSettledPact(result)) { result = result.v; } } while (!result || !result.then); result.then(_resumeAfterBody).then(void 0, reject); } function _resumeAfterTest(shouldContinue) { if (shouldContinue) { result = body(); if (result && result.then) { result.then(_resumeAfterBody).then(void 0, reject); } else { _resumeAfterBody(result); } } else { _settle(pact, 1, result); } } function _resumeAfterUpdate() { if (shouldContinue = test()) { if (shouldContinue.then) { shouldContinue.then(_resumeAfterTest).then(void 0, reject); } else { _resumeAfterTest(shouldContinue); } } else { _settle(pact, 1, result); } } } // Asynchronously call a function and send errors to recovery continuation function _catch(body, recover) { try { var result = body(); } catch(e) { return recover(e); } if (result && result.then) { return result.then(void 0, recover); } return result; } var styles = {"apple_pay_button":"_3_Q3-","apple_pay_button_black":"_2BsBO","apple_pay_button_white":"_2Y-yd","apple_pay_button_white_with_line":"_QS2QA","apple_pay_button-white_with_line":"_1XKIR","btn-disabled":"_3zhgE"}; var contractData = { PLI: { 51: { ADDRESS: "0xb3db178db835b4dfcb4149b2161644058393267d", ABI: [{ "constant": !1, "inputs": [{ "name": "spender", "type": "address" }, { "name": "value", "type": "uint256" }], "name": "approve", "outputs": [{ "name": "", "type": "bool" }], "payable": !1, "type": "function", "stateMutability": "nonpayable" }, { "constant": !0, "inputs": [], "name": "totalSupply", "outputs": [{ "name": "", "type": "uint256" }], "payable": !1, "type": "function", "stateMutability": "view" }, { "constant": !1, "inputs": [{ "name": "from", "type": "address" }, { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }], "name": "transferFrom", "outputs": [{ "name": "", "type": "bool" }], "payable": !1, "type": "function", "stateMutability": "nonpayable" }, { "constant": !1, "inputs": [{ "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }, { "name": "data", "type": "bytes" }], "name": "transferAndCall", "outputs": [{ "name": "success", "type": "bool" }], "payable": !1, "type": "function", "stateMutability": "nonpayable" }, { "constant": !0, "inputs": [{ "name": "who", "type": "address" }], "name": "balanceOf", "outputs": [{ "name": "", "type": "uint256" }], "payable": !1, "type": "function", "stateMutability": "view" }, { "constant": !1, "inputs": [{ "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }], "name": "transfer", "outputs": [{ "name": "", "type": "bool" }], "payable": !1, "type": "function", "stateMutability": "nonpayable" }, { "constant": !0, "inputs": [{ "name": "owner", "type": "address" }, { "name": "spender", "type": "address" }], "name": "allowance", "outputs": [{ "name": "", "type": "uint256" }], "payable": !1, "type": "function", "stateMutability": "view" }, { "anonymous": !1, "inputs": [{ "indexed": !0, "name": "from", "type": "address" }, { "indexed": !0, "name": "to", "type": "address" }, { "indexed": !1, "name": "value", "type": "uint256" }, { "indexed": !1, "name": "data", "type": "bytes" }], "name": "Transfer", "type": "event" }, { "anonymous": !1, "inputs": [{ "indexed": !0, "name": "owner", "type": "address" }, { "indexed": !0, "name": "spender", "type": "address" }, { "indexed": !1, "name": "value", "type": "uint256" }], "name": "Approval", "type": "event" }] }, 50: { ADDRESS: "0xff7412ea7c8445c46a8254dfb557ac1e48094391", ABI: [{ "constant": !1, "inputs": [{ "name": "spender", "type": "address" }, { "name": "value", "type": "uint256" }], "name": "approve", "outputs": [{ "name": "", "type": "bool" }], "payable": !1, "type": "function", "stateMutability": "nonpayable" }, { "constant": !0, "inputs": [], "name": "totalSupply", "outputs": [{ "name": "", "type": "uint256" }], "payable": !1, "type": "function", "stateMutability": "view" }, { "constant": !1, "inputs": [{ "name": "from", "type": "address" }, { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }], "name": "transferFrom", "outputs": [{ "name": "", "type": "bool" }], "payable": !1, "type": "function", "stateMutability": "nonpayable" }, { "constant": !1, "inputs": [{ "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }, { "name": "data", "type": "bytes" }], "name": "transferAndCall", "outputs": [{ "name": "success", "type": "bool" }], "payable": !1, "type": "function", "stateMutability": "nonpayable" }, { "constant": !0, "inputs": [{ "name": "who", "type": "address" }], "name": "balanceOf", "outputs": [{ "name": "", "type": "uint256" }], "payable": !1, "type": "function", "stateMutability": "view" }, { "constant": !1, "inputs": [{ "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }], "name": "transfer", "outputs": [{ "name": "", "type": "bool" }], "payable": !1, "type": "function", "stateMutability": "nonpayable" }, { "constant": !0, "inputs": [{ "name": "owner", "type": "address" }, { "name": "spender", "type": "address" }], "name": "allowance", "outputs": [{ "name": "", "type": "uint256" }], "payable": !1, "type": "function", "stateMutability": "view" }, { "anonymous": !1, "inputs": [{ "indexed": !0, "name": "from", "type": "address" }, { "indexed": !0, "name": "to", "type": "address" }, { "indexed": !1, "name": "value", "type": "uint256" }, { "indexed": !1, "name": "data", "type": "bytes" }], "name": "Transfer", "type": "event" }, { "anonymous": !1, "inputs": [{ "indexed": !0, "name": "owner", "type": "address" }, { "indexed": !0, "name": "spender", "type": "address" }, { "indexed": !1, "name": "value", "type": "uint256" }], "name": "Approval", "type": "event" }] } } }; var coingekoIds = { XDC: "xdce-crowd-sale", PLI: "plugin" }; function Paypli(props) { var _useState = React.useState(false), disable = _useState[0], setDisable = _useState[1]; var _useState2 = React.useState(), btnLabel = _useState2[0], setbtnLabel = _useState2[1]; var _useState3 = React.useState({}), setprovider = _useState3[1]; var _useState4 = React.useState({}), setcoingekoID = _useState4[1]; var _useState5 = React.useState("0"), amount = _useState5[0], setamount = _useState5[1]; var _useState6 = React.useState(0), basePrice = _useState6[0], setbasePrice = _useState6[1]; React.useEffect(function () { if (!props.amount || props.amount === "") { errorResponse.amount = errorMsg["amount"]; return null; } var findIds = coingekoIds[props.paymethod]; console.log("Find IDS", findIds); if (findIds) { setcoingekoID(findIds); fetch("https://api.coingecko.com/api/v3/simple/price?ids=" + findIds + "&vs_currencies=" + props.fiatcurrency).then(function (response) { return response.json(); }).then(function (data) { console.log(data); var resAmount = data[findIds][props.fiatcurrency]; setbasePrice(resAmount); var calculate = parseFloat(props.amount) * parseFloat(resAmount).toFixed(4); setamount(calculate.toString()); setbtnLabel("Pay " + calculate + " " + props.paymethod); })["catch"](function (err) { return console.log(err); }); } else { props.onError({ paymethod: "Pay Method Not Available" }); return null; } }, []); detectEthereumProvider().then(function (res) { if (!res) { setDisable(true); } }); var errorMsg = { chainId: "Chain ID is required", receiverAddress: "Receiver Address is required", amount: "Amount is required" }; var errorResponse = {}; var web3Modal = new Web3Modal({ cacheProvider: true, disableInjectedProvider: true, providerOptions: { walletconnect: { "package": WalletConnect, options: { infuraId: "27e484dcd9e3efcfd25a83a78777cdf1", rpc: { 50: "https://xdcpayrpc.blocksscan.io/", 51: "https://apothemxdcpayrpc.blocksscan.io/" } } }, 'custom-xdc': xdcpayWeb3modal.getXdcModal } }); var onConnect = function onConnect() { try { if (!props.chainId || props.chainId === "") { errorResponse.chainId = errorMsg["chainId"]; } if (!props.receiverAddress || props.receiverAddress === "") { errorResponse.receiverAddress = errorMsg["receiverAddress"]; } if (!props.amount || props.amount === "") { errorResponse.amount = errorMsg["amount"]; } if (!props.paymethod || props.paymethod === "") { errorResponse.paymethod = errorMsg["paymethod"]; } if (parseFloat(amount) === 0) { props.onError({ amount: "Amount must be greater than 0" }); } return Promise.resolve(_catch(function () { if (Object.keys(errorResponse).length > 0) { props.onError(errorResponse); return; } return Promise.resolve(web3Modal.connect()).then(function (instance) { var providerConnect = new ethers.ethers.providers.Web3Provider(instance); setprovider(providerConnect); return Promise.resolve(providerConnect.getNetwork()).then(function (_ref) { var chainId = _ref.chainId; if (props.chainId != chainId) { errorResponse.chainId = "Network Mismatched"; props.onError(errorResponse); return; } return Promise.resolve(providerConnect.listAccounts()).then(function (accounts) { if (accounts.length === 0) { errorResponse.msg = "Xdc Pay Not LoggedIn"; props.onError(errorResponse); return; } var signer = providerConnect.getSigner(); return Promise.resolve(signer.getAddress()).then(function (address) { var _exit = false; function _temp4(_result2) { return _exit ? _result2 : Promise.resolve(getTxnStatus(transactionHash, providerConnect)).then(function (_ref2) { var txhash = _ref2[0], status = _ref2[1]; if (!status) { props.onFailure({ hash: transactionHash, success: false, msg: "Error Occured on Blockchain" }); return; } props.onSuccess({ hash: transactionHash, success: true, fiatcurrency: props.fiatcurrency, amount: props.amount, paymethod: props.paymethod, receiverAddress: props.receiverAddress }); setbtnLabel("Pay " + amount + " " + props.paymethod); }); } setbtnLabel("Processing..."); var transactionHash; var _temp3 = function () { if (props.paymethod === "XDC") { var params = [{ from: address, to: props.receiverAddress, value: ethers.ethers.utils.parseUnits(amount, 'ether').toHexString() }]; return Promise.resolve(providerConnect.send('eth_sendTransaction', params)).then(function (_providerConnect$send) { transactionHash = _providerConnect$send; }); } else return function () { if (props.paymethod != "XDC") { var temppaymethod = props.paymethod; var findpay = contractData[temppaymethod]; if (!findpay) { props.onError({ paymethod: "Pay Method Not Available" }); setbtnLabel("Pay " + amount + " " + props.paymethod); var _temp5 = null; _exit = true; return _temp5; } var ADDRESS = findpay[chainId].ADDRESS; var ABI = findpay[chainId].ABI; var paymentTokenInstance = new ethers.ethers.Contract(ADDRESS, ABI, signer); return Promise.resolve(paymentTokenInstance.balanceOf(address)).then(function (tokenbalance) { var tokenValue = ethers.ethers.utils.formatEther(tokenbalance); if (parseFloat(tokenValue) < parseFloat(amount)) { props.onError({ msg: "Low Token Balance" }); setbtnLabel("Pay " + amount + " " + props.paymethod); _exit = true; return; } var amountInWei = ethers.ethers.utils.parseUnits(amount, 18); return Promise.resolve(paymentTokenInstance.transfer(props.receiverAddress, amountInWei)).then(function (_paymentTokenInstance) { transactionHash = _paymentTokenInstance; transactionHash = transactionHash.hash; }); }); } else { props.onError({ paymethod: "Pay Method Not Available" }); setbtnLabel("Pay " + amount + " " + props.paymethod); var _temp6 = null; _exit = true; return _temp6; } }(); }(); return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3); }); }); }); }); }, function (err) { console.log("err", err); props.onError(err); setbtnLabel("Pay " + amount + " " + props.paymethod); })); } catch (e) { return Promise.reject(e); } }; var sleep = function sleep(milliseconds) { return new Promise(function (resolve) { return setTimeout(resolve, milliseconds); }); }; var getTxnStatus = function getTxnStatus(txHash, provider) { try { var _temp9 = function _temp9() { if (transactionReceipt.status) { return [txHash, true]; } else { return [txHash, false]; } }; var transactionReceipt = null; var _temp10 = _for(function () { return transactionReceipt == null; }, void 0, function () { return Promise.resolve(provider.getTransactionReceipt(txHash)).then(function (_provider$getTransact) { transactionReceipt = _provider$getTransact; return Promise.resolve(sleep(3000)).then(function () {}); }); }); return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(_temp9) : _temp9(_temp10)); } catch (e) { return Promise.reject(e); } }; return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("button", { onClick: onConnect, disabled: disable, className: props.style + " " + (disable && styles.btn_disabled) }, btnLabel), /*#__PURE__*/React__default.createElement("br", null), /*#__PURE__*/React__default.createElement("small", { style: { fontSize: 10 } }, "1 ", props.fiatcurrency, " = ", basePrice, " ", props.paymethod)); } module.exports = Paypli; //# sourceMappingURL=index.js.map