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
JavaScript
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;