@pooltogether/utilities
Advanced tools
Comparing version 0.3.8 to 0.3.9
@@ -0,1 +1,2 @@ | ||
export declare const SECONDS_PER_MINUTE = 60; | ||
export declare const SECONDS_PER_HOUR = 3600; | ||
@@ -5,1 +6,3 @@ export declare const SECONDS_PER_DAY = 86400; | ||
export declare const SECONDS_PER_YEAR = 31536000; | ||
export declare const MINUTES_PER_HOUR = 60; | ||
export declare const MINUTES_PER_DAY = 1440; |
@@ -31,1 +31,14 @@ import { Provider } from '@ethersproject/providers'; | ||
}; | ||
/** | ||
* Returns an RPC URL using configured API keys if possible. | ||
* @param chainId | ||
*/ | ||
export declare const getRpcUrl: (chainId: number, apiKeys?: ApiKeys) => string; | ||
/** | ||
* Returns multiple RPC URLS using configured API keys if possible. | ||
* @param chainIds | ||
* @returns | ||
*/ | ||
export declare const getRpcUrls: (chainIds: number[], apiKeys?: ApiKeys) => { | ||
[chainId: number]: string; | ||
}; |
@@ -35,2 +35,38 @@ import { BigNumber } from 'ethers'; | ||
/** | ||
* Converts days to milliseconds | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
export declare const dToMs: (days: number) => number; | ||
/** | ||
* Converts milliseconds to days | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
export declare const msToD: (ms: number) => number; | ||
/** | ||
* Converts days to seconds | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
export declare const dToS: (days: number) => number; | ||
/** | ||
* Converts seconds to days | ||
* @param s seconds as a number | ||
* @returns | ||
*/ | ||
export declare const sToD: (s: number) => number; | ||
/** | ||
* Converts seconds to minutes | ||
* @param s seconds as a number | ||
* @returns | ||
*/ | ||
export declare const sToM: (s: number) => number; | ||
/** | ||
* Converts days to minutes | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
export declare const dToM: (days: number) => number; | ||
/** | ||
* Finds the difference between two date objects | ||
@@ -37,0 +73,0 @@ * @param dateA DateTime JS object (ie. new Date(Date.now())) |
@@ -9,2 +9,3 @@ 'use strict'; | ||
var providers = require('@ethersproject/providers'); | ||
var networks = require('@ethersproject/networks'); | ||
var evmChainsExtended = require('@pooltogether/evm-chains-extended'); | ||
@@ -259,6 +260,9 @@ | ||
// Seconds | ||
var SECONDS_PER_MINUTE = 60; | ||
var SECONDS_PER_HOUR = 3600; | ||
var SECONDS_PER_DAY = 86400; | ||
var SECONDS_PER_WEEK = 604800; | ||
var SECONDS_PER_YEAR = 31536000; | ||
var SECONDS_PER_YEAR = 31536000; // Minutes | ||
var MINUTES_PER_DAY = 1440; | ||
@@ -690,4 +694,59 @@ /** | ||
}; | ||
/** | ||
* Returns an RPC URL using configured API keys if possible. | ||
* @param chainId | ||
*/ | ||
var getRpcUrl = function getRpcUrl(chainId, apiKeys) { | ||
var alchemyApiKey = API_KEYS.alchemy || (apiKeys == null ? void 0 : apiKeys.alchemy); | ||
var infuraApiKey = API_KEYS.infura || (apiKeys == null ? void 0 : apiKeys.infura); | ||
try { | ||
var _chainData$rpc; | ||
if (!!alchemyApiKey && ALCHEMY_CHAIN_IDS.includes(chainId)) { | ||
var connectionInfo = providers.AlchemyProvider.getUrl(networks.getNetwork(chainId), alchemyApiKey); | ||
return connectionInfo.url; | ||
} else if (!!infuraApiKey && INFURA_CHAIN_IDS.includes(chainId)) { | ||
var _connectionInfo = providers.InfuraProvider.getUrl(networks.getNetwork(chainId), typeof infuraApiKey === 'string' ? { | ||
projectId: infuraApiKey | ||
} : infuraApiKey); | ||
return _connectionInfo.url; | ||
} | ||
var chainData = evmChainsExtended.getChain(chainId); | ||
var rpcUrl = chainData == null ? void 0 : (_chainData$rpc = chainData.rpc) == null ? void 0 : _chainData$rpc[0]; | ||
if (!!rpcUrl) { | ||
return rpcUrl; | ||
} else { | ||
console.warn("getRpcUrl | Chain id " + chainId + " not supported."); | ||
var _chainData = evmChainsExtended.getChain(NETWORK.mainnet); | ||
return _chainData.rpc[0]; | ||
} | ||
} catch (e) { | ||
console.error(e); | ||
var _chainData2 = evmChainsExtended.getChain(NETWORK.mainnet); | ||
return _chainData2.rpc[0]; | ||
} | ||
}; | ||
/** | ||
* Returns multiple RPC URLS using configured API keys if possible. | ||
* @param chainIds | ||
* @returns | ||
*/ | ||
var getRpcUrls = function getRpcUrls(chainIds, apiKeys) { | ||
return chainIds.reduce(function (rpcUrls, chainId) { | ||
rpcUrls[chainId] = getRpcUrl(chainId, apiKeys); | ||
return rpcUrls; | ||
}, {}); | ||
}; | ||
/** | ||
* Breaks down a number of seconds into years, weeks, days, hours, minutes, seconds | ||
@@ -791,2 +850,80 @@ * @param totalSeconds | ||
/** | ||
* Converts days to milliseconds | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
var dToMs = function dToMs(days) { | ||
if (!days) { | ||
return 0; | ||
} | ||
return days * SECONDS_PER_DAY * 1000; | ||
}; | ||
/** | ||
* Converts milliseconds to days | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
var msToD = function msToD(ms) { | ||
if (!ms) { | ||
return 0; | ||
} | ||
return ms / 1000 / SECONDS_PER_DAY; | ||
}; | ||
/** | ||
* Converts days to seconds | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
var dToS = function dToS(days) { | ||
if (!days) { | ||
return 0; | ||
} | ||
return days * SECONDS_PER_DAY; | ||
}; | ||
/** | ||
* Converts seconds to days | ||
* @param s seconds as a number | ||
* @returns | ||
*/ | ||
var sToD = function sToD(s) { | ||
if (!s) { | ||
return 0; | ||
} | ||
return s / SECONDS_PER_DAY; | ||
}; | ||
/** | ||
* Converts seconds to minutes | ||
* @param s seconds as a number | ||
* @returns | ||
*/ | ||
var sToM = function sToM(s) { | ||
if (!s) { | ||
return 0; | ||
} | ||
return s / SECONDS_PER_MINUTE; | ||
}; | ||
/** | ||
* Converts days to minutes | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
var dToM = function dToM(days) { | ||
if (!days) { | ||
return 0; | ||
} | ||
return days * MINUTES_PER_DAY; | ||
}; | ||
/** | ||
* Finds the difference between two date objects | ||
@@ -919,2 +1056,5 @@ * @param dateA DateTime JS object (ie. new Date(Date.now())) | ||
exports.chainIdToNetworkName = chainIdToNetworkName; | ||
exports.dToM = dToM; | ||
exports.dToMs = dToMs; | ||
exports.dToS = dToS; | ||
exports.deserializeBigNumbers = deserializeBigNumbers; | ||
@@ -932,2 +1072,4 @@ exports.displayPercentage = displayPercentage; | ||
exports.getReadProviders = getReadProviders; | ||
exports.getRpcUrl = getRpcUrl; | ||
exports.getRpcUrls = getRpcUrls; | ||
exports.getSecondsRemainingInPrizePeriod = getSecondsRemainingInPrizePeriod; | ||
@@ -938,2 +1080,3 @@ exports.getSecondsSinceEpoch = getSecondsSinceEpoch; | ||
exports.initProviderApiKeys = initProviderApiKeys; | ||
exports.msToD = msToD; | ||
exports.msToS = msToS; | ||
@@ -943,2 +1086,4 @@ exports.msToSeconds = msToSeconds; | ||
exports.prettyNumber = prettyNumber; | ||
exports.sToD = sToD; | ||
exports.sToM = sToM; | ||
exports.sToMs = sToMs; | ||
@@ -945,0 +1090,0 @@ exports.safeParseUnits = safeParseUnits; |
@@ -1,2 +0,2 @@ | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("ethers"),r=require("ethers/lib/utils"),t=require("@ethersproject/units"),n=require("@ethersproject/providers"),o=require("@pooltogether/evm-chains-extended"),i=/^(\w{6})\w*(\w{4})$/;function s(e,r){void 0===r&&(r={precision:2});var t=r.precision;if(e&&"function"==typeof e.indexOf){var n=t?t+1:0;return e.substr(0,e.indexOf(".")+n)}return e}var a=function(e){return t.parseUnits(s(e,{precision:2}),2)},u=function(r,t){if(void 0===t&&(t={}),t.decimals||(t.decimals=18),null!=r){var n=r._isBigNumber?e.ethers.utils.formatUnits(r,t.decimals):r;return!t.precision&&0!==t.precision&&n&&(t.precision=c(n)),function(e,r){if(void 0===r&&(r={}),!e)return"number"==typeof e?e:"";var t=2;void 0!==r.precision&&(t=r.precision);var n="en-GB";r.currentLang&&"es"===r.currentLang&&(n="es-ES"),0===t&&(e=Math.floor(Number(e))),e.toString().match("e")&&(e=Number.parseFloat(e).toFixed(0));var o=e.toString().split(".");o[0]=o[0].replace(",","");var i="";return i=o.length>1&&t>0?s(o.join("."),{precision:t}):o[0],r.removeTrailingZeros&&(i=i.replace(/(\.0+|0+)$/,"")),Number(i).toLocaleString(n,{minimumFractionDigits:r.removeTrailingZeros?0:t})}(n,t)}},c=function(e){return(e=parseFloat(e))>1e4?0:e>=.1?2:l(e)},l=function(e,r){void 0===r&&(r={additionalDigits:2});var t=r.additionalDigits,n=String(e).split(".")[1];return"0"===n?0:n?n.match(/^0*/)[0].length+t:t},d=function(e,r){return e.mul(Math.round(100*r)).div(100)},m=function(r){return r.reduce((function(e,r){return r.add(e)}),e.ethers.constants.Zero)},p=Object.freeze({mainnet:1,homestead:1,ropsten:3,rinkeby:4,goerli:5,kovan:42,bsc:56,"poa-sokol":77,"bsc-testnet":97,poa:99,xdai:100,polygon:137,matic:137,optimism:420,avalanche:43114,fuji:43113,celo:42220,"celo-testnet":44787,mumbai:80001}),f=Object.freeze([p.mainnet,p.ropsten,p.rinkeby,p.goerli,p.kovan]),h=Object.freeze([p.polygon,p.mumbai]),v=Object.freeze([p.avalanche,p.fuji]),b=Object.freeze([p.celo,p["celo-testnet"]]),x=function(e){var r=Object.keys(p).find((function(r){return p[r]===e}));if(void 0!==r)return r},g=Object.freeze([1,3,4,5,42,137,80001,10,69,42161,421611]),N=Object.freeze([1,3,4,5,42]),y=Object.freeze([1,3,4,5,42,137,80001,10,69,42161,421611]),U={alchemy:void 0,etherscan:void 0,infura:void 0},O=function(e){var r,t=o.getChain(e);try{U.alchemy&&g.includes(e)?r=new n.AlchemyProvider(e,U.alchemy):U.infura&&y.includes(e)?r=new n.InfuraProvider(e,U.infura):U.etherscan&&N.includes(e)?r=new n.EtherscanProvider(e,U.etherscan):t&&t.rpc[0]?r=new n.JsonRpcProvider(t.rpc[0],e):console.warn("Chain id "+e+" not supported.")}catch(e){console.error(e)}return r},S=function(){return Number((Date.now()/1e3).toFixed(0))},T=Object.freeze({}),P=Object.freeze({});exports.AVALANCHE_NETWORKS=v,exports.CELO_NETWORKS=b,exports.ETHEREUM_NETWORKS=f,exports.NETWORK=p,exports.POLYGON_NETWORKS=h,exports.addBigNumbers=m,exports.addTokenTotalUsdValue=function(e,t){var n=t[e.address];if(n){if(e.usd=n.usd||0,e.derivedETH=n.derivedETH||"0",e.amountUnformatted){var o=d(e.amountUnformatted,e.usd);e.totalValueUsd=r.formatUnits(o,e.decimals),e.totalValueUsdScaled=a(e.totalValueUsd)}}else e.usd=0,e.derivedETH="0"},exports.amountMultByUsd=d,exports.calculateAPR=function(e,r){return r.isZero()||e.isZero()?"0":t.formatUnits(e.mul(1e4).mul(365).div(r),2)},exports.calculateCreamBorrowApy=function(e,r,n,o,i,s,a){var u=Number(t.formatUnits(e,18)),c=Number(t.formatUnits(r,18)),l=Number(t.formatUnits(n,18)),d=Number(t.formatUnits(o,18)),m=Number(t.formatUnits(i,18)),p=Number(t.formatUnits(s,18)),f=a.toNumber();return Math.pow(1+u+c*Math.min(l,d)+Math.max(p*l-m,0),f)-1},exports.calculateCreamSupplyApy=function(e,r,n,o){var i=Number(t.formatUnits(r,18)),s=Number(t.formatUnits(n,18)),a=o.toNumber();return Math.pow(1+(Math.pow(1+e,1/a)-1)*(1-i)*s,a)-1},exports.calculateEstimatedCompoundPrizeWithYieldUnformatted=function(r,t,n,o,i,s){var a=s&&0!==parseFloat(s)?e.ethers.utils.parseUnits(parseFloat(s).toFixed(Number(o)),o):e.ethers.constants.Zero;return(a.isZero()?e.ethers.constants.Zero:t.mul(n).mul(Math.round(parseFloat(i))).mul(a).div(e.ethers.utils.parseUnits("1",18)).div(e.ethers.utils.parseUnits("1",o))).add(r)},exports.calculateLPTokenPrice=function(e,r,n,o,i){var s=m([d(t.parseUnits(e,18),n),d(t.parseUnits(r,18),o)]),a=t.parseUnits(i,18);return s.div(a)},exports.calculateOdds=function(r,t,n,o){if(void 0===o&&(o=1),!r||r.isZero()||!t||t.isZero()||!n||0===o)return 0;var i=Number(e.ethers.utils.formatUnits(r,n)),s=Number(e.ethers.utils.formatUnits(t,n));return 1-Math.pow((s-i)/s,o)},exports.calculateUsersOdds=function(r,t,n,o){if(!r||r.eq(e.ethers.BigNumber.from(0))||!n)return 0;var i=parseInt(o,10),s=Number(e.ethers.utils.formatUnits(r,Number(n))),a=Number(e.ethers.utils.formatUnits(t,Number(n)));return 1/(1-Math.pow((a-s)/a,i))},exports.calculatedEstimatedAccruedCompTotalValueUsdScaled=function(r,t,n){return r?t.mul(Math.round(100*parseFloat(r))).div(1e4).mul(100).div(31536e3).mul(n).div(100):e.ethers.constants.Zero},exports.chainIdToNetworkName=function(e){return 137===e?"polygon":x(e)},exports.deserializeBigNumbers=function r(t){try{return Array.isArray(t)?t.forEach(r):"object"==typeof t&&null!==t&&Object.keys(t).forEach((function(n){if(Array.isArray(t[n]))t[n].forEach(r);else if("object"==typeof t[n]&&null!==t[n]){var o;"BigNumber"===(null==(o=t[n])?void 0:o.type)?t[n]=e.ethers.BigNumber.from(t[n]):r(t[n])}})),t}catch(e){return t}},exports.displayPercentage=function(e){return(e=parseFloat(e).toFixed(2)).toString().replace(/(\.0+$)|(0+$)/,"")},exports.getChainIdByAlias=function(e){return null==p?void 0:p[e]},exports.getLootBoxKey=function(e,r){return"lootBox-"+e+"-"+r},exports.getMaxPrecision=function(e){var r;return(null==(r=String(e).split(".")[1])?void 0:r.length)||0},exports.getMinPrecision=l,exports.getNetworkNameAliasByChainId=x,exports.getNetworkNiceNameByChainId=function(e){switch(Number(e)){case p.mainnet:return"Ethereum";case p.matic:return"Polygon";case p.bsc:return"Binance Smart Chain";case p.celo:return"Celo";case p.xdai:return"xDai";default:var r=x(e);return r?r.charAt(0).toUpperCase()+r.slice(1):"--"}},exports.getPrecision=c,exports.getPrizePoolSymbol=function(e,r){return e.toUpperCase()+"-"+r.slice(0,8)},exports.getReadProvider=O,exports.getReadProviders=function(e){var r={};return e.forEach((function(e){var t=O(e);t&&(r[e]=t)})),r},exports.getSecondsRemainingInPrizePeriod=function(e,r){var t=e.toNumber(),n=r.toNumber();return t-(S()-n)},exports.getSecondsSinceEpoch=S,exports.getTimeBreakdown=function(e){var r=Number(e),t=0;r>=31536e3&&(r-=31536e3*(t=Math.floor(r/31536e3)));var n=0;r>=604800&&(r-=604800*(n=Math.floor(r/604800)));var o=0;r>=86400&&(r-=86400*(o=Math.floor(r/86400)));var i=0;(o||r>=3600)&&(r-=3600*(i=Math.floor(r/3600)));var s=0;(i||r>=60)&&(r-=60*(s=Math.floor(r/60)));var a=0;return(s||r>=1)&&(a=r),{years:t,weeks:n,days:o,hours:i,minutes:s,seconds:a}},exports.getTokenColour=function(e,r){return void 0===r&&(r=!1),r?P[e]:T[e]},exports.initProviderApiKeys=function(e){U.alchemy=e.alchemy,U.etherscan=e.etherscan,U.infura=e.infura},exports.msToS=function(e){return e?e/1e3:0},exports.msToSeconds=function(r){return r?e.ethers.BigNumber.from(r).div(1e3).toNumber():0},exports.numberWithCommas=u,exports.prettyNumber=function(e,r){return u(e,{decimals:r})},exports.sToMs=function(e){return e?1e3*e:0},exports.safeParseUnits=function(e,r){try{return t.parseUnits(e,r)}catch(t){return void console.warn("could not run parseUnits on values:",e,r)}},exports.sharesAmountToUnderlyingAmount=function(e,r,t){if(!r.isZero())return e.mul(t).div(r)},exports.shorten=function(e){var r;return e.hash&&(r=i.exec(e.hash))?e.short?r[1]+"...":r[1]+"..."+r[2]:null},exports.stringWithPrecision=s,exports.subtractDates=function(e,r){var t=e.getTime()-r.getTime(),n=0;t>=864e5&&(t-=864e5*(n=t/864e5));var o=0;(n||t>=36e5)&&(t-=36e5*(o=t/36e5));var i=0;(o||t>=6e4)&&(t-=6e4*(i=t/6e4));var s=0;return(i||t>=1e3)&&(s=t/1e3),{days:n,hours:o,minutes:i,seconds:s}},exports.toNonScaledUsdString=function(e){return t.formatUnits(e,2)},exports.toScaledUsdBigNumber=a,exports.underlyingAmountToSharesAmount=function(e,r,t){if(!t.isZero())return e.mul(r).div(t)}; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("ethers"),r=require("ethers/lib/utils"),t=require("@ethersproject/units"),n=require("@ethersproject/providers"),o=require("@ethersproject/networks"),i=require("@pooltogether/evm-chains-extended"),s=/^(\w{6})\w*(\w{4})$/;function a(e,r){void 0===r&&(r={precision:2});var t=r.precision;if(e&&"function"==typeof e.indexOf){var n=t?t+1:0;return e.substr(0,e.indexOf(".")+n)}return e}var u=function(e){return t.parseUnits(a(e,{precision:2}),2)},c=function(r,t){if(void 0===t&&(t={}),t.decimals||(t.decimals=18),null!=r){var n=r._isBigNumber?e.ethers.utils.formatUnits(r,t.decimals):r;return!t.precision&&0!==t.precision&&n&&(t.precision=l(n)),function(e,r){if(void 0===r&&(r={}),!e)return"number"==typeof e?e:"";var t=2;void 0!==r.precision&&(t=r.precision);var n="en-GB";r.currentLang&&"es"===r.currentLang&&(n="es-ES"),0===t&&(e=Math.floor(Number(e))),e.toString().match("e")&&(e=Number.parseFloat(e).toFixed(0));var o=e.toString().split(".");o[0]=o[0].replace(",","");var i="";return i=o.length>1&&t>0?a(o.join("."),{precision:t}):o[0],r.removeTrailingZeros&&(i=i.replace(/(\.0+|0+)$/,"")),Number(i).toLocaleString(n,{minimumFractionDigits:r.removeTrailingZeros?0:t})}(n,t)}},l=function(e){return(e=parseFloat(e))>1e4?0:e>=.1?2:d(e)},d=function(e,r){void 0===r&&(r={additionalDigits:2});var t=r.additionalDigits,n=String(e).split(".")[1];return"0"===n?0:n?n.match(/^0*/)[0].length+t:t},p=function(e,r){return e.mul(Math.round(100*r)).div(100)},m=function(r){return r.reduce((function(e,r){return r.add(e)}),e.ethers.constants.Zero)},f=Object.freeze({mainnet:1,homestead:1,ropsten:3,rinkeby:4,goerli:5,kovan:42,bsc:56,"poa-sokol":77,"bsc-testnet":97,poa:99,xdai:100,polygon:137,matic:137,optimism:420,avalanche:43114,fuji:43113,celo:42220,"celo-testnet":44787,mumbai:80001}),h=Object.freeze([f.mainnet,f.ropsten,f.rinkeby,f.goerli,f.kovan]),v=Object.freeze([f.polygon,f.mumbai]),x=Object.freeze([f.avalanche,f.fuji]),g=Object.freeze([f.celo,f["celo-testnet"]]),b=function(e){var r=Object.keys(f).find((function(r){return f[r]===e}));if(void 0!==r)return r},N=Object.freeze([1,3,4,5,42,137,80001,10,69,42161,421611]),y=Object.freeze([1,3,4,5,42]),U=Object.freeze([1,3,4,5,42,137,80001,10,69,42161,421611]),T={alchemy:void 0,etherscan:void 0,infura:void 0},w=function(e){var r,t=i.getChain(e);try{T.alchemy&&N.includes(e)?r=new n.AlchemyProvider(e,T.alchemy):T.infura&&U.includes(e)?r=new n.InfuraProvider(e,T.infura):T.etherscan&&y.includes(e)?r=new n.EtherscanProvider(e,T.etherscan):t&&t.rpc[0]?r=new n.JsonRpcProvider(t.rpc[0],e):console.warn("Chain id "+e+" not supported.")}catch(e){console.error(e)}return r},P=function(e,r){var t=T.alchemy||(null==r?void 0:r.alchemy),s=T.infura||(null==r?void 0:r.infura);try{var a;if(t&&N.includes(e))return n.AlchemyProvider.getUrl(o.getNetwork(e),t).url;if(s&&U.includes(e))return n.InfuraProvider.getUrl(o.getNetwork(e),"string"==typeof s?{projectId:s}:s).url;var u=i.getChain(e);return(null==u||null==(a=u.rpc)?void 0:a[0])||(console.warn("getRpcUrl | Chain id "+e+" not supported."),i.getChain(f.mainnet).rpc[0])}catch(e){return console.error(e),i.getChain(f.mainnet).rpc[0]}},S=function(){return Number((Date.now()/1e3).toFixed(0))},M=Object.freeze({}),O=Object.freeze({});exports.AVALANCHE_NETWORKS=x,exports.CELO_NETWORKS=g,exports.ETHEREUM_NETWORKS=h,exports.NETWORK=f,exports.POLYGON_NETWORKS=v,exports.addBigNumbers=m,exports.addTokenTotalUsdValue=function(e,t){var n=t[e.address];if(n){if(e.usd=n.usd||0,e.derivedETH=n.derivedETH||"0",e.amountUnformatted){var o=p(e.amountUnformatted,e.usd);e.totalValueUsd=r.formatUnits(o,e.decimals),e.totalValueUsdScaled=u(e.totalValueUsd)}}else e.usd=0,e.derivedETH="0"},exports.amountMultByUsd=p,exports.calculateAPR=function(e,r){return r.isZero()||e.isZero()?"0":t.formatUnits(e.mul(1e4).mul(365).div(r),2)},exports.calculateCreamBorrowApy=function(e,r,n,o,i,s,a){var u=Number(t.formatUnits(e,18)),c=Number(t.formatUnits(r,18)),l=Number(t.formatUnits(n,18)),d=Number(t.formatUnits(o,18)),p=Number(t.formatUnits(i,18)),m=Number(t.formatUnits(s,18)),f=a.toNumber();return Math.pow(1+u+c*Math.min(l,d)+Math.max(m*l-p,0),f)-1},exports.calculateCreamSupplyApy=function(e,r,n,o){var i=Number(t.formatUnits(r,18)),s=Number(t.formatUnits(n,18)),a=o.toNumber();return Math.pow(1+(Math.pow(1+e,1/a)-1)*(1-i)*s,a)-1},exports.calculateEstimatedCompoundPrizeWithYieldUnformatted=function(r,t,n,o,i,s){var a=s&&0!==parseFloat(s)?e.ethers.utils.parseUnits(parseFloat(s).toFixed(Number(o)),o):e.ethers.constants.Zero;return(a.isZero()?e.ethers.constants.Zero:t.mul(n).mul(Math.round(parseFloat(i))).mul(a).div(e.ethers.utils.parseUnits("1",18)).div(e.ethers.utils.parseUnits("1",o))).add(r)},exports.calculateLPTokenPrice=function(e,r,n,o,i){var s=m([p(t.parseUnits(e,18),n),p(t.parseUnits(r,18),o)]),a=t.parseUnits(i,18);return s.div(a)},exports.calculateOdds=function(r,t,n,o){if(void 0===o&&(o=1),!r||r.isZero()||!t||t.isZero()||!n||0===o)return 0;var i=Number(e.ethers.utils.formatUnits(r,n)),s=Number(e.ethers.utils.formatUnits(t,n));return 1-Math.pow((s-i)/s,o)},exports.calculateUsersOdds=function(r,t,n,o){if(!r||r.eq(e.ethers.BigNumber.from(0))||!n)return 0;var i=parseInt(o,10),s=Number(e.ethers.utils.formatUnits(r,Number(n))),a=Number(e.ethers.utils.formatUnits(t,Number(n)));return 1/(1-Math.pow((a-s)/a,i))},exports.calculatedEstimatedAccruedCompTotalValueUsdScaled=function(r,t,n){return r?t.mul(Math.round(100*parseFloat(r))).div(1e4).mul(100).div(31536e3).mul(n).div(100):e.ethers.constants.Zero},exports.chainIdToNetworkName=function(e){return 137===e?"polygon":b(e)},exports.dToM=function(e){return e?1440*e:0},exports.dToMs=function(e){return e?86400*e*1e3:0},exports.dToS=function(e){return e?86400*e:0},exports.deserializeBigNumbers=function r(t){try{return Array.isArray(t)?t.forEach(r):"object"==typeof t&&null!==t&&Object.keys(t).forEach((function(n){if(Array.isArray(t[n]))t[n].forEach(r);else if("object"==typeof t[n]&&null!==t[n]){var o;"BigNumber"===(null==(o=t[n])?void 0:o.type)?t[n]=e.ethers.BigNumber.from(t[n]):r(t[n])}})),t}catch(e){return t}},exports.displayPercentage=function(e){return(e=parseFloat(e).toFixed(2)).toString().replace(/(\.0+$)|(0+$)/,"")},exports.getChainIdByAlias=function(e){return null==f?void 0:f[e]},exports.getLootBoxKey=function(e,r){return"lootBox-"+e+"-"+r},exports.getMaxPrecision=function(e){var r;return(null==(r=String(e).split(".")[1])?void 0:r.length)||0},exports.getMinPrecision=d,exports.getNetworkNameAliasByChainId=b,exports.getNetworkNiceNameByChainId=function(e){switch(Number(e)){case f.mainnet:return"Ethereum";case f.matic:return"Polygon";case f.bsc:return"Binance Smart Chain";case f.celo:return"Celo";case f.xdai:return"xDai";default:var r=b(e);return r?r.charAt(0).toUpperCase()+r.slice(1):"--"}},exports.getPrecision=l,exports.getPrizePoolSymbol=function(e,r){return e.toUpperCase()+"-"+r.slice(0,8)},exports.getReadProvider=w,exports.getReadProviders=function(e){var r={};return e.forEach((function(e){var t=w(e);t&&(r[e]=t)})),r},exports.getRpcUrl=P,exports.getRpcUrls=function(e,r){return e.reduce((function(e,t){return e[t]=P(t,r),e}),{})},exports.getSecondsRemainingInPrizePeriod=function(e,r){var t=e.toNumber(),n=r.toNumber();return t-(S()-n)},exports.getSecondsSinceEpoch=S,exports.getTimeBreakdown=function(e){var r=Number(e),t=0;r>=31536e3&&(r-=31536e3*(t=Math.floor(r/31536e3)));var n=0;r>=604800&&(r-=604800*(n=Math.floor(r/604800)));var o=0;r>=86400&&(r-=86400*(o=Math.floor(r/86400)));var i=0;(o||r>=3600)&&(r-=3600*(i=Math.floor(r/3600)));var s=0;(i||r>=60)&&(r-=60*(s=Math.floor(r/60)));var a=0;return(s||r>=1)&&(a=r),{years:t,weeks:n,days:o,hours:i,minutes:s,seconds:a}},exports.getTokenColour=function(e,r){return void 0===r&&(r=!1),r?O[e]:M[e]},exports.initProviderApiKeys=function(e){T.alchemy=e.alchemy,T.etherscan=e.etherscan,T.infura=e.infura},exports.msToD=function(e){return e?e/1e3/86400:0},exports.msToS=function(e){return e?e/1e3:0},exports.msToSeconds=function(r){return r?e.ethers.BigNumber.from(r).div(1e3).toNumber():0},exports.numberWithCommas=c,exports.prettyNumber=function(e,r){return c(e,{decimals:r})},exports.sToD=function(e){return e?e/86400:0},exports.sToM=function(e){return e?e/60:0},exports.sToMs=function(e){return e?1e3*e:0},exports.safeParseUnits=function(e,r){try{return t.parseUnits(e,r)}catch(t){return void console.warn("could not run parseUnits on values:",e,r)}},exports.sharesAmountToUnderlyingAmount=function(e,r,t){if(!r.isZero())return e.mul(t).div(r)},exports.shorten=function(e){var r;return e.hash&&(r=s.exec(e.hash))?e.short?r[1]+"...":r[1]+"..."+r[2]:null},exports.stringWithPrecision=a,exports.subtractDates=function(e,r){var t=e.getTime()-r.getTime(),n=0;t>=864e5&&(t-=864e5*(n=t/864e5));var o=0;(n||t>=36e5)&&(t-=36e5*(o=t/36e5));var i=0;(o||t>=6e4)&&(t-=6e4*(i=t/6e4));var s=0;return(i||t>=1e3)&&(s=t/1e3),{days:n,hours:o,minutes:i,seconds:s}},exports.toNonScaledUsdString=function(e){return t.formatUnits(e,2)},exports.toScaledUsdBigNumber=u,exports.underlyingAmountToSharesAmount=function(e,r,t){if(!t.isZero())return e.mul(r).div(t)}; | ||
//# sourceMappingURL=utilities.cjs.production.min.js.map |
@@ -5,2 +5,3 @@ import { ethers } from 'ethers'; | ||
import { AlchemyProvider, InfuraProvider, EtherscanProvider, JsonRpcProvider } from '@ethersproject/providers'; | ||
import { getNetwork } from '@ethersproject/networks'; | ||
import { getChain } from '@pooltogether/evm-chains-extended'; | ||
@@ -255,6 +256,9 @@ | ||
// Seconds | ||
var SECONDS_PER_MINUTE = 60; | ||
var SECONDS_PER_HOUR = 3600; | ||
var SECONDS_PER_DAY = 86400; | ||
var SECONDS_PER_WEEK = 604800; | ||
var SECONDS_PER_YEAR = 31536000; | ||
var SECONDS_PER_YEAR = 31536000; // Minutes | ||
var MINUTES_PER_DAY = 1440; | ||
@@ -686,4 +690,59 @@ /** | ||
}; | ||
/** | ||
* Returns an RPC URL using configured API keys if possible. | ||
* @param chainId | ||
*/ | ||
var getRpcUrl = function getRpcUrl(chainId, apiKeys) { | ||
var alchemyApiKey = API_KEYS.alchemy || (apiKeys == null ? void 0 : apiKeys.alchemy); | ||
var infuraApiKey = API_KEYS.infura || (apiKeys == null ? void 0 : apiKeys.infura); | ||
try { | ||
var _chainData$rpc; | ||
if (!!alchemyApiKey && ALCHEMY_CHAIN_IDS.includes(chainId)) { | ||
var connectionInfo = AlchemyProvider.getUrl(getNetwork(chainId), alchemyApiKey); | ||
return connectionInfo.url; | ||
} else if (!!infuraApiKey && INFURA_CHAIN_IDS.includes(chainId)) { | ||
var _connectionInfo = InfuraProvider.getUrl(getNetwork(chainId), typeof infuraApiKey === 'string' ? { | ||
projectId: infuraApiKey | ||
} : infuraApiKey); | ||
return _connectionInfo.url; | ||
} | ||
var chainData = getChain(chainId); | ||
var rpcUrl = chainData == null ? void 0 : (_chainData$rpc = chainData.rpc) == null ? void 0 : _chainData$rpc[0]; | ||
if (!!rpcUrl) { | ||
return rpcUrl; | ||
} else { | ||
console.warn("getRpcUrl | Chain id " + chainId + " not supported."); | ||
var _chainData = getChain(NETWORK.mainnet); | ||
return _chainData.rpc[0]; | ||
} | ||
} catch (e) { | ||
console.error(e); | ||
var _chainData2 = getChain(NETWORK.mainnet); | ||
return _chainData2.rpc[0]; | ||
} | ||
}; | ||
/** | ||
* Returns multiple RPC URLS using configured API keys if possible. | ||
* @param chainIds | ||
* @returns | ||
*/ | ||
var getRpcUrls = function getRpcUrls(chainIds, apiKeys) { | ||
return chainIds.reduce(function (rpcUrls, chainId) { | ||
rpcUrls[chainId] = getRpcUrl(chainId, apiKeys); | ||
return rpcUrls; | ||
}, {}); | ||
}; | ||
/** | ||
* Breaks down a number of seconds into years, weeks, days, hours, minutes, seconds | ||
@@ -787,2 +846,80 @@ * @param totalSeconds | ||
/** | ||
* Converts days to milliseconds | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
var dToMs = function dToMs(days) { | ||
if (!days) { | ||
return 0; | ||
} | ||
return days * SECONDS_PER_DAY * 1000; | ||
}; | ||
/** | ||
* Converts milliseconds to days | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
var msToD = function msToD(ms) { | ||
if (!ms) { | ||
return 0; | ||
} | ||
return ms / 1000 / SECONDS_PER_DAY; | ||
}; | ||
/** | ||
* Converts days to seconds | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
var dToS = function dToS(days) { | ||
if (!days) { | ||
return 0; | ||
} | ||
return days * SECONDS_PER_DAY; | ||
}; | ||
/** | ||
* Converts seconds to days | ||
* @param s seconds as a number | ||
* @returns | ||
*/ | ||
var sToD = function sToD(s) { | ||
if (!s) { | ||
return 0; | ||
} | ||
return s / SECONDS_PER_DAY; | ||
}; | ||
/** | ||
* Converts seconds to minutes | ||
* @param s seconds as a number | ||
* @returns | ||
*/ | ||
var sToM = function sToM(s) { | ||
if (!s) { | ||
return 0; | ||
} | ||
return s / SECONDS_PER_MINUTE; | ||
}; | ||
/** | ||
* Converts days to minutes | ||
* @param days days as a number | ||
* @returns | ||
*/ | ||
var dToM = function dToM(days) { | ||
if (!days) { | ||
return 0; | ||
} | ||
return days * MINUTES_PER_DAY; | ||
}; | ||
/** | ||
* Finds the difference between two date objects | ||
@@ -898,3 +1035,3 @@ * @param dateA DateTime JS object (ie. new Date(Date.now())) | ||
export { AVALANCHE_NETWORKS, CELO_NETWORKS, ETHEREUM_NETWORKS, NETWORK, POLYGON_NETWORKS, addBigNumbers, addTokenTotalUsdValue, amountMultByUsd, calculateAPR, calculateCreamBorrowApy, calculateCreamSupplyApy, calculateEstimatedCompoundPrizeWithYieldUnformatted, calculateLPTokenPrice, calculateOdds, calculateUsersOdds, calculatedEstimatedAccruedCompTotalValueUsdScaled, chainIdToNetworkName, deserializeBigNumbers, displayPercentage, getChainIdByAlias, getLootBoxKey, getMaxPrecision, getMinPrecision, getNetworkNameAliasByChainId, getNetworkNiceNameByChainId, getPrecision, getPrizePoolSymbol, getReadProvider, getReadProviders, getSecondsRemainingInPrizePeriod, getSecondsSinceEpoch, getTimeBreakdown, getTokenColour, initProviderApiKeys, msToS, msToSeconds, numberWithCommas, prettyNumber, sToMs, safeParseUnits, sharesAmountToUnderlyingAmount, shorten, stringWithPrecision, subtractDates, toNonScaledUsdString, toScaledUsdBigNumber, underlyingAmountToSharesAmount }; | ||
export { AVALANCHE_NETWORKS, CELO_NETWORKS, ETHEREUM_NETWORKS, NETWORK, POLYGON_NETWORKS, addBigNumbers, addTokenTotalUsdValue, amountMultByUsd, calculateAPR, calculateCreamBorrowApy, calculateCreamSupplyApy, calculateEstimatedCompoundPrizeWithYieldUnformatted, calculateLPTokenPrice, calculateOdds, calculateUsersOdds, calculatedEstimatedAccruedCompTotalValueUsdScaled, chainIdToNetworkName, dToM, dToMs, dToS, deserializeBigNumbers, displayPercentage, getChainIdByAlias, getLootBoxKey, getMaxPrecision, getMinPrecision, getNetworkNameAliasByChainId, getNetworkNiceNameByChainId, getPrecision, getPrizePoolSymbol, getReadProvider, getReadProviders, getRpcUrl, getRpcUrls, getSecondsRemainingInPrizePeriod, getSecondsSinceEpoch, getTimeBreakdown, getTokenColour, initProviderApiKeys, msToD, msToS, msToSeconds, numberWithCommas, prettyNumber, sToD, sToM, sToMs, safeParseUnits, sharesAmountToUnderlyingAmount, shorten, stringWithPrecision, subtractDates, toNonScaledUsdString, toScaledUsdBigNumber, underlyingAmountToSharesAmount }; | ||
//# sourceMappingURL=utilities.esm.js.map |
{ | ||
"name": "@pooltogether/utilities", | ||
"version": "0.3.8", | ||
"version": "0.3.9", | ||
"description": "Shared utility functions across PoolTogether apps", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
250537
2317