mirror of
https://github.com/basicswap/basicswap.git
synced 2025-11-05 18:38:09 +01:00
* Refactor + Various Fixes. * WS / LINT * Show also failed status. * Fix sorting market +/- * Simplified swaps in progress * Black * Update basicswap/static/js/modules/coin-manager.js Co-authored-by: nahuhh <50635951+nahuhh@users.noreply.github.com> * Update basicswap/static/js/modules/coin-manager.js Co-authored-by: nahuhh <50635951+nahuhh@users.noreply.github.com> * Fixes + GUI: v3.2.1 * Fixes + AutoRefreshEnabled true as default. * Fix small memory issue since new features added, --------- Co-authored-by: nahuhh <50635951+nahuhh@users.noreply.github.com>
231 lines
7.4 KiB
JavaScript
231 lines
7.4 KiB
JavaScript
const CoinManager = (function() {
|
|
const coinRegistry = [
|
|
{
|
|
symbol: 'BTC',
|
|
name: 'bitcoin',
|
|
displayName: 'Bitcoin',
|
|
aliases: ['btc', 'bitcoin'],
|
|
coingeckoId: 'bitcoin',
|
|
cryptocompareId: 'BTC',
|
|
usesCryptoCompare: false,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Bitcoin.png'
|
|
},
|
|
{
|
|
symbol: 'XMR',
|
|
name: 'monero',
|
|
displayName: 'Monero',
|
|
aliases: ['xmr', 'monero'],
|
|
coingeckoId: 'monero',
|
|
cryptocompareId: 'XMR',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Monero.png'
|
|
},
|
|
{
|
|
symbol: 'PART',
|
|
name: 'particl',
|
|
displayName: 'Particl',
|
|
aliases: ['part', 'particl', 'particl anon', 'particl blind'],
|
|
variants: ['Particl', 'Particl Blind', 'Particl Anon'],
|
|
coingeckoId: 'particl',
|
|
cryptocompareId: 'PART',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Particl.png'
|
|
},
|
|
{
|
|
symbol: 'BCH',
|
|
name: 'bitcoin-cash',
|
|
displayName: 'Bitcoin Cash',
|
|
aliases: ['bch', 'bitcoincash', 'bitcoin cash'],
|
|
coingeckoId: 'bitcoin-cash',
|
|
cryptocompareId: 'BCH',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Bitcoin-Cash.png'
|
|
},
|
|
{
|
|
symbol: 'PIVX',
|
|
name: 'pivx',
|
|
displayName: 'PIVX',
|
|
aliases: ['pivx'],
|
|
coingeckoId: 'pivx',
|
|
cryptocompareId: 'PIVX',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'PIVX.png'
|
|
},
|
|
{
|
|
symbol: 'FIRO',
|
|
name: 'firo',
|
|
displayName: 'Firo',
|
|
aliases: ['firo', 'zcoin'],
|
|
coingeckoId: 'firo',
|
|
cryptocompareId: 'FIRO',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Firo.png'
|
|
},
|
|
{
|
|
symbol: 'DASH',
|
|
name: 'dash',
|
|
displayName: 'Dash',
|
|
aliases: ['dash'],
|
|
coingeckoId: 'dash',
|
|
cryptocompareId: 'DASH',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Dash.png'
|
|
},
|
|
{
|
|
symbol: 'LTC',
|
|
name: 'litecoin',
|
|
displayName: 'Litecoin',
|
|
aliases: ['ltc', 'litecoin'],
|
|
variants: ['Litecoin', 'Litecoin MWEB'],
|
|
coingeckoId: 'litecoin',
|
|
cryptocompareId: 'LTC',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Litecoin.png'
|
|
},
|
|
{
|
|
symbol: 'DOGE',
|
|
name: 'dogecoin',
|
|
displayName: 'Dogecoin',
|
|
aliases: ['doge', 'dogecoin'],
|
|
coingeckoId: 'dogecoin',
|
|
cryptocompareId: 'DOGE',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Dogecoin.png'
|
|
},
|
|
{
|
|
symbol: 'DCR',
|
|
name: 'decred',
|
|
displayName: 'Decred',
|
|
aliases: ['dcr', 'decred'],
|
|
coingeckoId: 'decred',
|
|
cryptocompareId: 'DCR',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Decred.png'
|
|
},
|
|
{
|
|
symbol: 'NMC',
|
|
name: 'namecoin',
|
|
displayName: 'Namecoin',
|
|
aliases: ['nmc', 'namecoin'],
|
|
coingeckoId: 'namecoin',
|
|
cryptocompareId: 'NMC',
|
|
usesCryptoCompare: true,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Namecoin.png'
|
|
},
|
|
{
|
|
symbol: 'WOW',
|
|
name: 'wownero',
|
|
displayName: 'Wownero',
|
|
aliases: ['wow', 'wownero'],
|
|
coingeckoId: 'wownero',
|
|
cryptocompareId: 'WOW',
|
|
usesCryptoCompare: false,
|
|
usesCoinGecko: true,
|
|
historicalDays: 30,
|
|
icon: 'Wownero.png'
|
|
}
|
|
];
|
|
const symbolToInfo = {};
|
|
const nameToInfo = {};
|
|
const displayNameToInfo = {};
|
|
const coinAliasesMap = {};
|
|
|
|
function buildLookupMaps() {
|
|
coinRegistry.forEach(coin => {
|
|
symbolToInfo[coin.symbol.toLowerCase()] = coin;
|
|
nameToInfo[coin.name.toLowerCase()] = coin;
|
|
displayNameToInfo[coin.displayName.toLowerCase()] = coin;
|
|
if (coin.aliases && Array.isArray(coin.aliases)) {
|
|
coin.aliases.forEach(alias => {
|
|
coinAliasesMap[alias.toLowerCase()] = coin;
|
|
});
|
|
}
|
|
coinAliasesMap[coin.symbol.toLowerCase()] = coin;
|
|
coinAliasesMap[coin.name.toLowerCase()] = coin;
|
|
coinAliasesMap[coin.displayName.toLowerCase()] = coin;
|
|
if (coin.variants && Array.isArray(coin.variants)) {
|
|
coin.variants.forEach(variant => {
|
|
coinAliasesMap[variant.toLowerCase()] = coin;
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
buildLookupMaps();
|
|
|
|
function getCoinByAnyIdentifier(identifier) {
|
|
if (!identifier) return null;
|
|
const normalizedId = identifier.toString().toLowerCase().trim();
|
|
const coin = coinAliasesMap[normalizedId];
|
|
if (coin) return coin;
|
|
if (normalizedId.includes('bitcoin') && normalizedId.includes('cash') ||
|
|
normalizedId === 'bch') {
|
|
return symbolToInfo['bch'];
|
|
}
|
|
if (normalizedId === 'zcoin' || normalizedId.includes('firo')) {
|
|
return symbolToInfo['firo'];
|
|
}
|
|
if (normalizedId.includes('particl')) {
|
|
return symbolToInfo['part'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
getAllCoins: function() {
|
|
return [...coinRegistry];
|
|
},
|
|
getCoinByAnyIdentifier: getCoinByAnyIdentifier,
|
|
getSymbol: function(identifier) {
|
|
const coin = getCoinByAnyIdentifier(identifier);
|
|
return coin ? coin.symbol : null;
|
|
},
|
|
getDisplayName: function(identifier) {
|
|
const coin = getCoinByAnyIdentifier(identifier);
|
|
return coin ? coin.displayName : null;
|
|
},
|
|
getCoingeckoId: function(identifier) {
|
|
const coin = getCoinByAnyIdentifier(identifier);
|
|
return coin ? coin.coingeckoId : null;
|
|
},
|
|
coinMatches: function(coinId1, coinId2) {
|
|
if (!coinId1 || !coinId2) return false;
|
|
const coin1 = getCoinByAnyIdentifier(coinId1);
|
|
const coin2 = getCoinByAnyIdentifier(coinId2);
|
|
if (!coin1 || !coin2) return false;
|
|
return coin1.symbol === coin2.symbol;
|
|
},
|
|
getPriceKey: function(coinIdentifier) {
|
|
if (!coinIdentifier) return null;
|
|
const coin = getCoinByAnyIdentifier(coinIdentifier);
|
|
if (!coin) return coinIdentifier.toLowerCase();
|
|
return coin.coingeckoId;
|
|
}
|
|
};
|
|
})();
|
|
|
|
window.CoinManager = CoinManager;
|
|
console.log('CoinManager initialized');
|