UNPKG

hang-sdk

Version:

Hang SDK is on a mission to help developers create DAPPs with ease and interact with Hang deployed smart contracts.

1,085 lines (1,054 loc) 56.1 kB
var $PJwWZ$tslib = require("tslib"); var $PJwWZ$web3 = require("web3"); var $PJwWZ$bignumberjs = require("bignumber.js"); var $PJwWZ$keccak256 = require("keccak256"); var $PJwWZ$merkletreejs = require("merkletreejs"); var $PJwWZ$crossmintclientsdkbase = require("@crossmint/client-sdk-base"); var $PJwWZ$events = require("events"); var $PJwWZ$walletconnectweb3provider = require("@walletconnect/web3-provider"); var $PJwWZ$web3modal = require("web3modal"); function $parcel$exportWildcard(dest, source) { Object.keys(source).forEach(function(key) { if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) { return; } Object.defineProperty(dest, key, { enumerable: true, get: function get() { return source[key]; } }); }); return dest; } function $parcel$interopDefault(a) { return a && a.__esModule ? a.default : a; } function $parcel$export(e, n, v, s) { Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); } var $6fcfb94c6dda21f7$exports = {}; $parcel$export($6fcfb94c6dda21f7$exports, "HangCore", () => $6fcfb94c6dda21f7$export$795d78b526f6c911); var $220cf3e10abbb8f9$exports = {}; $parcel$export($220cf3e10abbb8f9$exports, "INFURA_ID", () => $220cf3e10abbb8f9$export$b882ed4ca7990745); $parcel$export($220cf3e10abbb8f9$exports, "MINT_STATUSES", () => $220cf3e10abbb8f9$export$ef10b78c378b7520); $parcel$export($220cf3e10abbb8f9$exports, "CHAIN_CURRENCIES", () => $220cf3e10abbb8f9$export$b1f9fa82ea408169); $parcel$export($220cf3e10abbb8f9$exports, "networkMap", () => $220cf3e10abbb8f9$export$4d1c6419b8183f5); $parcel$export($220cf3e10abbb8f9$exports, "CONTRACT_PLATFORMS", () => $220cf3e10abbb8f9$export$7bbe41447c23a123); $parcel$export($220cf3e10abbb8f9$exports, "FORMATTED_ERRORS", () => $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2); $parcel$export($220cf3e10abbb8f9$exports, "STG_HOST", () => $220cf3e10abbb8f9$export$4c2a6a43df256804); $parcel$export($220cf3e10abbb8f9$exports, "PROD_HOST", () => $220cf3e10abbb8f9$export$8d88c11af09bef4d); var $220cf3e10abbb8f9$export$b882ed4ca7990745 = 'd09bd1bc72e6427d80fa37e01481cd34'; var $220cf3e10abbb8f9$export$ef10b78c378b7520 = { NOT_INITIATED: 0, IN_PROGRESS: 1, COMPLETED: 2 }; var $220cf3e10abbb8f9$export$b1f9fa82ea408169 = { ethereum: 'ETH', solana: 'SOL', matic: 'MATIC' }; var $220cf3e10abbb8f9$export$4d1c6419b8183f5 = { 1: { chainId: ($parcel$interopDefault($PJwWZ$web3)).utils.toHex(1), chainName: 'Ethereum Mainnet', nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, rpcUrls: [ "https://mainnet.infura.io/v3/".concat($220cf3e10abbb8f9$export$b882ed4ca7990745) ], blockExplorerUrls: [ 'https://etherscan.io' ] }, 3: { chainId: ($parcel$interopDefault($PJwWZ$web3)).utils.toHex(3), chainName: 'Ropsten', nativeCurrency: { name: 'Ropsten Ether', symbol: 'ROP', decimals: 18 }, rpcUrls: [ 'https://ropsten.infura.io/v3/' ], blockExplorerUrls: [ 'https://ropsten.etherscan.io' ] }, 4: { chainId: ($parcel$interopDefault($PJwWZ$web3)).utils.toHex(4), chainName: 'Rinkeby Test Network', nativeCurrency: { name: 'Rinkeby Ether', symbol: 'RIN', decimals: 18 }, rpcUrls: [ "https://rinkeby.infura.io/v3/".concat($220cf3e10abbb8f9$export$b882ed4ca7990745) ], blockExplorerUrls: [ 'https://rinkeby.etherscan.io' ] }, 5: { chainId: ($parcel$interopDefault($PJwWZ$web3)).utils.toHex(5), chainName: 'Goerli Test Network', nativeCurrency: { name: 'Goerli Ether', symbol: 'GOR', decimals: 18 }, rpcUrls: [ 'https://goerli.infura.io/v3/' ], blockExplorerUrls: [ 'https://goerli.etherscan.io' ] }, 137: { chainId: ($parcel$interopDefault($PJwWZ$web3)).utils.toHex(137), chainName: 'Polygon Mainnet (Matic)', nativeCurrency: { name: 'MATIC', symbol: 'MATIC', decimals: 18 }, rpcUrls: [ 'https://polygon-rpc.com' ], blockExplorerUrls: [ 'https://www.polygonscan.com/' ] }, 80001: { chainId: ($parcel$interopDefault($PJwWZ$web3)).utils.toHex(80001), chainName: 'Polygon Testnet (Matic)', nativeCurrency: { name: 'MATIC', symbol: 'MATIC', decimals: 18 }, rpcUrls: [ 'https://rpc-mumbai.maticvigil.com' ], blockExplorerUrls: [ 'https://mumbai.polygonscan.com/' ] } }; var $220cf3e10abbb8f9$export$7bbe41447c23a123 = { ETHEREUM: 'ethereum', SOLANA: 'solana' }; var $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2 = { PROJECT_INFO_FETCH_ERROR: 'Unable to fetch project information', 'BASE_COLLECTION/CANNOT_MINT': "General onsale hasn't started yet", 'BASE_COLLECTION/PURCHASE_DISABLED': 'Minting is currently disabled', 'BASE_COLLECTION/INSUFFICIENT_ETH_AMOUNT': 'Please ensure you paid enough ETH', 'BASE_COLLECTION/EXCEEDS_MAX_SUPPLY': 'Project sold out', 'BASE_COLLECTION/GAS_FEE_NOT_ALLOWED': 'Please try again without additional gas', 'BASE_COLLECTION/EXCEEDS_INDIVIDUAL_SUPPLY': "You've reached the purchase limit for your wallet", 'BASE_COLLECTION/PRESALE_INACTIVE': "Presale hasn't started yet", 'BASE_COLLECTION/CANNOT_MINT_PRESALE': "Please verify you're on the presale whitelist", INSUFFICIENT_ETH_BALANCE: 'Your balance is too low' }; var $220cf3e10abbb8f9$export$4c2a6a43df256804 = 'https://www.headliner.page'; var $220cf3e10abbb8f9$export$8d88c11af09bef4d = 'https://www.hang.xyz'; var $85ed993cfe0d6120$export$1979b2d7c24e71a0 = /** @class */ function(_super) { $PJwWZ$tslib.__extends($85ed993cfe0d6120$export$1979b2d7c24e71a0, _super); function $85ed993cfe0d6120$export$1979b2d7c24e71a0() { return _super.call(this) || this; } $85ed993cfe0d6120$export$1979b2d7c24e71a0.prototype.emit = function(event, params) { return _super.prototype.emit.call(this, event, params); }; return $85ed993cfe0d6120$export$1979b2d7c24e71a0; }(($parcel$interopDefault($PJwWZ$events)).EventEmitter); var $6fcfb94c6dda21f7$export$795d78b526f6c911 = /** @class */ function() { function $6fcfb94c6dda21f7$export$795d78b526f6c911(options) { var _this1 = this; this.isPublicSaleActive = function() { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { return $PJwWZ$tslib.__generator(this, function(_a) { if (this.contractInstance.methods.isPublicSaleActive) return [ 2 /*return*/ , this.contractInstance.methods.isPublicSaleActive().call() ]; else return [ 2 /*return*/ , Promise.resolve(true) ]; return [ 2 /*return*/ ]; }); }); }; this.isPresaleActive = function() { return _this1.contractInstance.methods.isPreSaleActive().call(); }; this.getProofForAddress = function(address) { var _a, _b; var leaf = ($parcel$interopDefault($PJwWZ$keccak256))(address); var proof = (_b = (_a = _this1.merkleRoot) === null || _a === void 0 ? void 0 : _a.getHexProof) === null || _b === void 0 ? void 0 : _b.call(_a, leaf); return { leaf: leaf, proof: proof }; }; this.onPreSaleAllowList = function(address) { var _a, _b; if (_this1.contractInstance.methods.onPreSaleAllowList) return _this1.contractInstance.methods.onPreSaleAllowList(address).call(); else { var _c = _this1.getProofForAddress(address), leaf = _c.leaf, proof = _c.proof; if (!proof) throw 'no proof'; return Promise.resolve((_b = (_a = _this1.merkleRoot) === null || _a === void 0 ? void 0 : _a.verify) === null || _b === void 0 ? void 0 : _b.call(_a, proof, leaf, _this1.merkleRoot.getHexRoot())); } }; this.fetchTotalMintable = function() { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var totalMintable; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.contractInstance.methods.MAX_TOTAL_MINT().call() ]; case 1: totalMintable = _a.sent(); return [ 2 /*return*/ , parseInt(totalMintable) ]; } }); }); }; this.fetchTotalMinted = function() { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var totalMinted; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.contractInstance.methods.totalSupply().call() ]; case 1: totalMinted = _a.sent(); return [ 2 /*return*/ , parseInt(totalMinted) ]; } }); }); }; this.maxMintPerAddress = function() { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var maxMint; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: if (!this.contractInstance.methods.MAX_TOTAL_MINT_PER_ADDRESS) return [ 3 /*break*/ , 2 ]; return [ 4 /*yield*/ , this.contractInstance.methods.MAX_TOTAL_MINT_PER_ADDRESS().call() ]; case 1: maxMint = _a.sent(); return [ 2 /*return*/ , parseInt(maxMint) ]; case 2: return [ 2 /*return*/ , Promise.resolve(10) ]; } }); }); }; this.balanceOfAddress = function(address) { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var balance; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.contractInstance.methods.balanceOf(address).call() ]; case 1: balance = _a.sent(); return [ 2 /*return*/ , parseInt(balance) ]; } }); }); }; this.canMint = function(address) { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var publicSaleActive, presaleMode, isPresaleActive, onPresaleList, totalSupply, totalMinted, maxPerAddress, addressBalance; var _this = this; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: if (this.options.debug) console.debug('Checking if canMint'); return [ 4 /*yield*/ , this.isPublicSaleActive() ]; case 1: publicSaleActive = _a.sent(); if (this.options.debug) console.debug('publicSaleActive', publicSaleActive); presaleMode = false; if (!!publicSaleActive) return [ 3 /*break*/ , 4 ]; if (this.options.debug) console.debug('When public sale inactive'); return [ 4 /*yield*/ , this.isPresaleActive() ]; case 2: isPresaleActive = _a.sent(); if (this.options.debug) console.debug('isPresaleActive', isPresaleActive); if (!isPresaleActive) { if (this.options.debug) console.debug('Presale inactive'); this.events.emit('ERROR', { type: 'BASE_COLLECTION/PRESALE_INACTIVE', message: $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['BASE_COLLECTION/PRESALE_INACTIVE'] }); return [ 2 /*return*/ , Promise.reject({ custom: $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['BASE_COLLECTION/PRESALE_INACTIVE'] }) ]; } if (this.options.debug) console.debug('Checking if on presale list'); return [ 4 /*yield*/ , this.onPreSaleAllowList(address) ]; case 3: onPresaleList = _a.sent(); if (this.options.debug) console.debug('onPresaleList', onPresaleList); if (!onPresaleList) { this.events.emit('ERROR', { type: 'BASE_COLLECTION/CANNOT_MINT_PRESALE', message: $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['BASE_COLLECTION/CANNOT_MINT_PRESALE'] }); return [ 2 /*return*/ , Promise.reject({ custom: $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['BASE_COLLECTION/CANNOT_MINT_PRESALE'] }) ]; } presaleMode = true; _a.label = 4; case 4: if (this.options.debug) console.debug('Checking total supply and total minted'); return [ 4 /*yield*/ , this.fetchTotalMintable() ]; case 5: totalSupply = _a.sent(); return [ 4 /*yield*/ , this.fetchTotalMinted() ]; case 6: totalMinted = _a.sent(); if (this.options.debug) console.debug('totalSupply', totalSupply); if (this.options.debug) console.debug('totalMinted', totalMinted); if (totalSupply == totalMinted) { this.events.emit('ERROR', { type: 'BASE_COLLECTION/EXCEEDS_MAX_SUPPLY', message: $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['BASE_COLLECTION/EXCEEDS_MAX_SUPPLY'] }); return [ 2 /*return*/ , Promise.reject({ custom: $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['BASE_COLLECTION/EXCEEDS_MAX_SUPPLY'] }) ]; } if (!presaleMode) return [ 2 /*return*/ , Promise.resolve(presaleMode) ]; if (this.options.debug) console.debug('Checking maxPerAddress and addressBalance'); return [ 4 /*yield*/ , this.maxMintPerAddress() ]; case 7: maxPerAddress = _a.sent(); return [ 4 /*yield*/ , this.balanceOfAddress(address) ]; case 8: addressBalance = _a.sent(); if (this.options.debug) console.debug('maxPerAddress', maxPerAddress); if (this.options.debug) console.debug('addressBalance', addressBalance); return [ 2 /*return*/ , addressBalance < maxPerAddress ? Promise.resolve(presaleMode) : function() { _this.events.emit('ERROR', { type: 'BASE_COLLECTION/EXCEEDS_INDIVIDUAL_SUPPLY', message: $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['BASE_COLLECTION/EXCEEDS_INDIVIDUAL_SUPPLY'] }); Promise.reject({ custom: $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['BASE_COLLECTION/EXCEEDS_INDIVIDUAL_SUPPLY'] }); }() ]; } }); }); }; this.fetchCurrentPrice = function() { return _this1.contractInstance.methods.PRICE().call(); }; this.mintTo = function(quantity, address) { if (quantity === void 0) quantity = 1; return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var _this = this; return $PJwWZ$tslib.__generator(this, function(_a1) { return [ 2 /*return*/ , this.canMint(address).then(function(presaleMode) { return $PJwWZ$tslib.__awaiter(_this, void 0, void 0, function() { var priceFromContract, priceBig, quantityBig, totalCost, hasEnoughEthToMint, proof; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.fetchCurrentPrice() ]; case 1: priceFromContract = _a.sent(); priceBig = new $PJwWZ$bignumberjs.BigNumber(priceFromContract); quantityBig = new $PJwWZ$bignumberjs.BigNumber(quantity); totalCost = priceBig.multipliedBy(quantityBig); return [ 4 /*yield*/ , this.walletHasEnoughBalance(address, totalCost) ]; case 2: hasEnoughEthToMint = _a.sent(); if (!hasEnoughEthToMint) return [ 2 /*return*/ ]; if (this.options.debug) console.debug('presaleMode', presaleMode); if (this.options.debug) console.debug('priceFromContract', priceFromContract); if (presaleMode && this.contractInstance.methods.earlyPurchase) { if (this.options.debug) console.debug('Early purchase flow'); proof = this.getProofForAddress(address).proof; return [ 2 /*return*/ , this.contractInstance.methods.earlyPurchase(quantity, proof).send({ from: address, value: totalCost.toString() }, this.postConfirm) ]; } else { if (this.options.debug) console.debug('General purchase flow'); return [ 2 /*return*/ , this.contractInstance.methods.purchase(quantity).send({ from: address, value: priceBig.multipliedBy(quantityBig).toString() }, this.postConfirm) ]; } return [ 2 /*return*/ ]; } }); }); }) ]; }); }); }; this.crossMint = function(quantity) { var _a, _b, _c, _d, _e, _f, _g, _h; if (quantity === void 0) quantity = 1; var TESTCHAINS = [ 4 ]; var nftCost = _this1.presaleActive && _this1.projectData.presale_price ? _this1.projectData.presale_price : _this1.projectData.price; var crossmintEnabled = _this1.projectData.enable_crossmint_checkout; var crossmintId = ''; if (crossmintEnabled && _this1.presaleActive) crossmintId = ((_b = (_a = _this1.projectData.contract) === null || _a === void 0 ? void 0 : _a.crossmint) === null || _b === void 0 ? void 0 : _b.presale) || ''; else if (crossmintEnabled && _this1.publicsaleActive) crossmintId = ((_d = (_c = _this1.projectData.contract) === null || _c === void 0 ? void 0 : _c.crossmint) === null || _d === void 0 ? void 0 : _d.onsale) || ''; var crossmintEnvironment; if (TESTCHAINS.includes((_e = _this1.projectData.contract) === null || _e === void 0 ? void 0 : _e.chain_id)) crossmintEnvironment = 'staging'; var connect = $PJwWZ$crossmintclientsdkbase.crossmintModalService({ clientId: crossmintId, showOverlay: false, setConnecting: function() {}, libVersion: '0.1.6-alpha.2', environment: crossmintEnvironment, clientName: $PJwWZ$crossmintclientsdkbase.clientNames.reactUi }).connect; connect(// @ts-ignore { price: String(nftCost * quantity), count: quantity }, (_f = _this1.projectData) === null || _f === void 0 ? void 0 : _f.collection_label, (_g = _this1.projectData) === null || _g === void 0 ? void 0 : _g.info.title, (_h = _this1.projectData) === null || _h === void 0 ? void 0 : _h.info.image); }; this.postConfirm = function(error, transactionHash) { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var receipt; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: if (error) return [ 2 /*return*/ , this.events.emit('ERROR', { type: error.message, message: 'Failed to submit transaction' }) ]; this.events.emit('TRANSACTION_SUBMITTED', { transactionHash: transactionHash }); return [ 4 /*yield*/ , this.getTransactionReceiptMined(transactionHash) ]; case 1: receipt = _a.sent(); if (!receipt.transactionHash) return [ 3 /*break*/ , 3 ]; return [ 4 /*yield*/ , this.getTransactionReceiptMined(receipt.transactionHash) ]; case 2: receipt = _a.sent(); _a.label = 3; case 3: this.events.emit('TRANSACTION_COMPLETED', { receipt: receipt }); return [ 2 /*return*/ ]; } }); }); }; this.getTransactionReceiptMined = function(txHash, interval) { if (interval === void 0) interval = 500; var self = _this1.web3Instance.eth; var transactionReceiptAsync = function(resolve, reject) { self.getTransactionReceipt(txHash, function(error, receipt) { if (error) reject(error); else if (receipt == null) setTimeout(function() { return transactionReceiptAsync(resolve, reject); }, interval); else resolve(receipt); }); }; if (Array.isArray(txHash)) return Promise.all(txHash.map(function(oneTxHash) { return _this1.getTransactionReceiptMined(oneTxHash, interval); })); else if (typeof txHash === 'string') return new Promise(transactionReceiptAsync); else throw new Error('Invalid Type: ' + txHash); }; this.fetchTotalMintedPadded = function() { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var totalMinted; var _a; return $PJwWZ$tslib.__generator(this, function(_b) { switch(_b.label){ case 0: return [ 4 /*yield*/ , this.fetchTotalMinted() ]; case 1: totalMinted = _b.sent(); return [ 2 /*return*/ , totalMinted + (Number((_a = this.projectData) === null || _a === void 0 ? void 0 : _a.pad_no_minted) || 0) ]; } }); }); }; this.fetchCurrentPriceFormatted = function() { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var currentPrice; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.fetchCurrentPrice() ]; case 1: currentPrice = _a.sent(); return [ 2 /*return*/ , ($parcel$interopDefault($PJwWZ$web3)).utils.fromWei(currentPrice) ]; } }); }); }; this.crossMintEnabled = function() { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var presaleActive, publicSaleActive, crossmintEnabled; var _a, _b, _c, _d; return $PJwWZ$tslib.__generator(this, function(_e) { switch(_e.label){ case 0: if (!this.projectData.enable_crossmint_checkout) return [ 2 /*return*/ , false ]; return [ 4 /*yield*/ , this.isPresaleActive() ]; case 1: presaleActive = _e.sent(); return [ 4 /*yield*/ , this.isPublicSaleActive() ]; case 2: publicSaleActive = _e.sent(); // temp fix for preventing async crossMint function this.presaleActive = presaleActive; this.publicsaleActive = publicSaleActive; crossmintEnabled = this.projectData.enable_crossmint_checkout; if (crossmintEnabled && presaleActive) return [ 2 /*return*/ , ((_b = (_a = this.projectData.contract) === null || _a === void 0 ? void 0 : _a.crossmint) === null || _b === void 0 ? void 0 : _b.presale) != null ]; else if (crossmintEnabled && publicSaleActive) return [ 2 /*return*/ , ((_d = (_c = this.projectData.contract) === null || _c === void 0 ? void 0 : _c.crossmint) === null || _d === void 0 ? void 0 : _d.onsale) != null ]; return [ 2 /*return*/ , false ]; } }); }); }; this.walletBalance = function(address) { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var balance; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.web3Instance.eth.getBalance(address) ]; case 1: balance = _a.sent(); return [ 2 /*return*/ , balance ]; } }); }); }; this.walletHasEnoughBalance = function(address, totalCost) { return $PJwWZ$tslib.__awaiter(_this1, void 0, void 0, function() { var currentBalance, currentBalanceEth, totalCostEth; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.walletBalance(address) ]; case 1: currentBalance = _a.sent(); currentBalanceEth = ($parcel$interopDefault($PJwWZ$web3)).utils.fromWei(currentBalance); totalCostEth = ($parcel$interopDefault($PJwWZ$web3)).utils.fromWei(totalCost.toString()); if (currentBalanceEth >= totalCostEth) return [ 2 /*return*/ , true ]; this.events.emit('ERROR', { type: 'INSUFFICIENT_ETH_BALANCE', message: "".concat($220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['INSUFFICIENT_ETH_BALANCE'], ", you'll need at least ").concat(totalCostEth, " ETH + gas fees to continue") }); return [ 2 /*return*/ , false ]; } }); }); }; this.options = options; this.events = new $85ed993cfe0d6120$export$1979b2d7c24e71a0(); this.web3Instance = new ($parcel$interopDefault($PJwWZ$web3))(); this.presaleActive = false; this.publicsaleActive = false; } $6fcfb94c6dda21f7$export$795d78b526f6c911.prototype.fetchProjectMetadata = function() { return $PJwWZ$tslib.__awaiter(this, void 0, void 0, function() { var HOST, URL, response, data, ex_1; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: _a.trys.push([ 0, 3, , 4 ]); HOST = typeof this.options.mode === 'undefined' || this.options.mode === 'TEST' ? $220cf3e10abbb8f9$export$4c2a6a43df256804 : $220cf3e10abbb8f9$export$8d88c11af09bef4d; URL = "".concat(HOST, "/api/nft/").concat(this.options.slug); return [ 4 /*yield*/ , fetch(URL) ]; case 1: response = _a.sent(); if (!response.ok) throw new Error(); return [ 4 /*yield*/ , response.json() ]; case 2: data = _a.sent(); this.projectData = data.nft_project; if (!this.projectData) throw new Error(); this.web3(new ($parcel$interopDefault($PJwWZ$web3))($220cf3e10abbb8f9$export$4d1c6419b8183f5[this.projectData.contract.chain_id].rpcUrls[0])); this.merkleRoot = new $PJwWZ$merkletreejs.MerkleTree(this.projectData.contract.whitelist, ($parcel$interopDefault($PJwWZ$keccak256)), { hashLeaves: true, sortPairs: true }); this.events.emit('STATE_CHANGE', { isReady: true }); return [ 3 /*break*/ , 4 ]; case 3: ex_1 = _a.sent(); this.events.emit('STATE_CHANGE', { isReady: false }); this.events.emit('ERROR', { type: 'PROJECT_INFO_FETCH_ERROR', message: $220cf3e10abbb8f9$export$4b3b7a7a4951b1c2['PROJECT_INFO_FETCH_ERROR'] }); return [ 3 /*break*/ , 4 ]; case 4: return [ 2 /*return*/ ]; } }); }); }; $6fcfb94c6dda21f7$export$795d78b526f6c911.prototype.web3 = function(web3) { if (!this.projectData) throw 'sdk not ready'; this.web3Instance = web3; this.contractInstance = new this.web3Instance.eth.Contract(JSON.parse(this.projectData.contract.abi), this.projectData.contract.address); }; return $6fcfb94c6dda21f7$export$795d78b526f6c911; }(); var $0d28735970edc27e$exports = {}; $parcel$export($0d28735970edc27e$exports, "HangWalletPlugin", () => $0d28735970edc27e$export$cb96b37fcdbc2330); var $48205a13c7ae9bf8$exports = {}; $parcel$exportWildcard($48205a13c7ae9bf8$exports, $220cf3e10abbb8f9$exports); var $0d28735970edc27e$var$SKIPPED = 'skipped'; var $0d28735970edc27e$var$providerOptions = { walletconnect: { package: ($parcel$interopDefault($PJwWZ$walletconnectweb3provider)), options: { infuraId: $220cf3e10abbb8f9$export$b882ed4ca7990745 } } }; var $0d28735970edc27e$var$CONNECT_KEY = 'HANG_CONNECT_CACHE'; var $0d28735970edc27e$var$LATEST_CONNECT_VERSION = '3'; var $0d28735970edc27e$export$cb96b37fcdbc2330 = /** @class */ function(_super) { $PJwWZ$tslib.__extends($0d28735970edc27e$export$cb96b37fcdbc2330, _super); function $0d28735970edc27e$export$cb96b37fcdbc2330(_a1) { var _this = this; var slug = _a1.slug, web3ModalOptions = _a1.web3ModalOptions, args = $PJwWZ$tslib.__rest(_a1, [ "slug", "web3ModalOptions" ]); _this = _super.call(this, $PJwWZ$tslib.__assign({ slug: slug }, args)) || this; _this.autoconnect = function() { return $PJwWZ$tslib.__awaiter(_this, void 0, void 0, function() { var _a, _b; return $PJwWZ$tslib.__generator(this, function(_c) { switch(_c.label){ case 0: if (!this.web3Modal.cachedProvider) return [ 3 /*break*/ , 4 ]; _a = this; _b = this.provider; if (_b) return [ 3 /*break*/ , 2 ]; return [ 4 /*yield*/ , this.connectToWeb3Modal() ]; case 1: _b = _c.sent(); _c.label = 2; case 2: _a.provider = _b; this.web3(new ($parcel$interopDefault($PJwWZ$web3))(this.provider)); return [ 4 /*yield*/ , this.onConnectComplete() ]; case 3: _c.sent(); return [ 2 /*return*/ , Promise.resolve() ]; case 4: return [ 2 /*return*/ , Promise.reject($0d28735970edc27e$var$SKIPPED) ]; } }); }); }; _this.connect = function() { return $PJwWZ$tslib.__awaiter(_this, void 0, Promise, function() { var _a, e_1; return $PJwWZ$tslib.__generator(this, function(_b) { switch(_b.label){ case 0: _b.trys.push([ 0, 3, , 4 ]); _a = this; return [ 4 /*yield*/ , this.connectToWeb3Modal() ]; case 1: _a.provider = _b.sent(); this.web3(new ($parcel$interopDefault($PJwWZ$web3))(this.provider)); return [ 4 /*yield*/ , this.onConnectComplete() ]; case 2: _b.sent(); return [ 3 /*break*/ , 4 ]; case 3: e_1 = _b.sent(); Promise.reject(e_1); return [ 3 /*break*/ , 4 ]; case 4: return [ 2 /*return*/ ]; } }); }); }; _this.connectToWeb3Modal = function() { return $PJwWZ$tslib.__awaiter(_this, void 0, void 0, function() { var hangConnectVersion; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: hangConnectVersion = localStorage.getItem($0d28735970edc27e$var$CONNECT_KEY); if (!hangConnectVersion || hangConnectVersion != $0d28735970edc27e$var$LATEST_CONNECT_VERSION) { this.clearWalletConnectKeys(); localStorage.setItem($0d28735970edc27e$var$CONNECT_KEY, $0d28735970edc27e$var$LATEST_CONNECT_VERSION); } return [ 4 /*yield*/ , this.web3Modal.connect() ]; case 1: return [ 2 /*return*/ , _a.sent() ]; } }); }); }; _this.clearWalletConnectKeys = function() { Object.entries(localStorage).map(function(entry) { var key = entry[0]; if (key.startsWith('-walletlink')) localStorage.removeItem(key); }); }; _this.onConnectComplete = function() { return $PJwWZ$tslib.__awaiter(_this, void 0, void 0, function() { return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: if (!this.web3Instance.eth) return [ 2 /*return*/ ]; return [ 4 /*yield*/ , this.requestChainSwitchIfNeeded() ]; case 1: _a.sent(); return [ 4 /*yield*/ , this.syncAccountAndContract() ]; case 2: _a.sent(); this.events.emit('WALLET_CONNECTED', { address: this.getCurrentWallet() }); this.addProviderEvents(); return [ 2 /*return*/ ]; } }); }); }; _this.syncAccountAndContract = function() { return $PJwWZ$tslib.__awaiter(_this, void 0, void 0, function() { return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.fetchAccountData() ]; case 1: _a.sent(); return [ 2 /*return*/ ]; } }); }); }; _this.fetchAccountData = function() { return $PJwWZ$tslib.__awaiter(_this, void 0, void 0, function() { var accounts; return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.web3Instance.eth.getAccounts() ]; case 1: accounts = _a.sent(); // MetaMask does not give you all accounts, only the selected account this.accounts = accounts; return [ 2 /*return*/ ]; } }); }); }; _this.addProviderEvents = function() { _this.provider.on('accountsChanged', function() { return $PJwWZ$tslib.__awaiter(_this, void 0, void 0, function() { return $PJwWZ$tslib.__generator(this, function(_a) { switch(_a.label){ case 0: return [ 4 /*yield*/ , this.syncAccountAndContract() ]; case 1: _a.sent(); this.events.emit('WALLET_CHANGED', null); return [ 2 /*return*/ ]; } }); }); }); }; _this.getCurrentWallet = function() { var _a; return ((_a = _this.accounts) === null || _a === void 0 ? void 0 : _a[0]) || ''; }; _this.requestChainSwitchIfNeeded = function() { return $PJwWZ$tslib.__awaiter(_this, void 0, void 0, function() { var currentChain, e_2, networkParams; var _a, _b; return $PJwWZ$tslib.__generator(this, function(_c) { switch(_c.label){ case 0: if (!this.projectData) return [ 2 /*return*/ ]; return [ 4 /*yield*/ , this.web3Instance.eth.getChainId() ]; case 1: currentChain = _c.sent(); if (!(this.projectData.contract.chain_id != currentChain)) return [ 3 /*break*/ , 7 ]; _c.label = 2;