@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
65 lines • 2.58 kB
JavaScript
import { getTokenOrCryptoCurrencyById } from "../../deposit/helper";
import { isTokenCurrency } from "../../currencies";
export const safeCurrencyLookup = (id) => {
try {
return getTokenOrCryptoCurrencyById(id);
}
catch {
return null;
}
};
export const isProviderToken = (currency, providerId) => {
return isTokenCurrency(currency) && currency.id.toLowerCase().includes(providerId.toLowerCase());
};
export const getProviderCurrency = (provider) => {
const providerToken = provider.currenciesByNetwork.find(currency => {
return isProviderToken(currency, provider.providerId);
});
if (providerToken) {
return providerToken;
}
return safeCurrencyLookup(provider.providerId) ?? provider.currenciesByNetwork[0];
};
export const buildProviderCoverageMap = (providers) => {
const providerIdToCoveringProviders = new Map();
for (const { providerId, currenciesByNetwork } of providers) {
for (const { id } of currenciesByNetwork) {
if (!providerIdToCoveringProviders.has(id)) {
providerIdToCoveringProviders.set(id, new Set());
}
providerIdToCoveringProviders.get(id).add(providerId);
}
}
return providerIdToCoveringProviders;
};
export const filterProvidersByIds = (providers, currencyIdsSet, providerCoverageMap) => {
const filtered = [];
for (const provider of providers) {
const filteredCurrencies = provider.currenciesByNetwork.filter(currency => currencyIdsSet.has(currency.id));
if (filteredCurrencies.length === 0)
continue;
const providerHasOwnCurrency = provider.currenciesByNetwork.some(currency => currency.id === provider.providerId);
if (!providerHasOwnCurrency) {
const coveringProviders = providerCoverageMap.get(provider.providerId);
const isProviderIdCoveredElsewhere = coveringProviders && coveringProviders.size > 1;
if (isProviderIdCoveredElsewhere)
continue;
}
if (filteredCurrencies.length === provider.currenciesByNetwork.length) {
filtered.push(provider);
}
else {
filtered.push({
...provider,
currenciesByNetwork: filteredCurrencies,
});
}
}
return filtered;
};
export const extractProviderCurrencies = (providers) => {
return providers
.map(provider => getProviderCurrency(provider))
.filter((currency) => currency !== null);
};
//# sourceMappingURL=currencyUtils.js.map