@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
74 lines • 3.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractProviderCurrencies = exports.filterProvidersByIds = exports.buildProviderCoverageMap = exports.getProviderCurrency = exports.isProviderToken = exports.safeCurrencyLookup = void 0;
const helper_1 = require("../../deposit/helper");
const currencies_1 = require("../../currencies");
const safeCurrencyLookup = (id) => {
try {
return (0, helper_1.getTokenOrCryptoCurrencyById)(id);
}
catch {
return null;
}
};
exports.safeCurrencyLookup = safeCurrencyLookup;
const isProviderToken = (currency, providerId) => {
return (0, currencies_1.isTokenCurrency)(currency) && currency.id.toLowerCase().includes(providerId.toLowerCase());
};
exports.isProviderToken = isProviderToken;
const getProviderCurrency = (provider) => {
const providerToken = provider.currenciesByNetwork.find(currency => {
return (0, exports.isProviderToken)(currency, provider.providerId);
});
if (providerToken) {
return providerToken;
}
return (0, exports.safeCurrencyLookup)(provider.providerId) ?? provider.currenciesByNetwork[0];
};
exports.getProviderCurrency = getProviderCurrency;
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;
};
exports.buildProviderCoverageMap = buildProviderCoverageMap;
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;
};
exports.filterProvidersByIds = filterProvidersByIds;
const extractProviderCurrencies = (providers) => {
return providers
.map(provider => (0, exports.getProviderCurrency)(provider))
.filter((currency) => currency !== null);
};
exports.extractProviderCurrencies = extractProviderCurrencies;
//# sourceMappingURL=currencyUtils.js.map