@talismn/balances 0.0.0-pr2075-20250710035408 → 0.0.0-pr2075-20250710052843

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  var chaindataProvider = require('@talismn/chaindata-provider');
4
4
  var util = require('@talismn/util');
5
5
  var viem = require('viem');
6
- var lodash = require('lodash');
6
+ var lodashEs = require('lodash-es');
7
7
  var z = require('zod/v4');
8
8
  var anylogger = require('anylogger');
9
9
  var rxjs = require('rxjs');
@@ -12,7 +12,7 @@ var tokenRates = require('@talismn/token-rates');
12
12
  var BigNumber = require('bignumber.js');
13
13
  var utils = require('@polkadot-api/utils');
14
14
  var polkadotApi = require('polkadot-api');
15
- var upperFirst = require('lodash/upperFirst');
15
+ var upperFirst = require('lodash-es/upperFirst');
16
16
  var scaleTs = require('scale-ts');
17
17
  var apiContract = require('@polkadot/api-contract');
18
18
  var types = require('@polkadot/types');
@@ -821,7 +821,7 @@ const fetchTokens$8 = async ({
821
821
  };
822
822
  const cached2 = cache[tokenId] && TokenCacheSchema$1.safeParse(cache[tokenId]).data;
823
823
  if (cached2?.isValid === false) continue;
824
- const token = lodash.assign(base, cached2?.isValid ? lodash.omit(cached2, ["isValid"]) : {}, tokenConfig);
824
+ const token = lodashEs.assign(base, cached2?.isValid ? lodashEs.omit(cached2, ["isValid"]) : {}, tokenConfig);
825
825
  const parsed = chaindataProvider.EvmErc20TokenSchema.safeParse(token);
826
826
  if (!parsed.success) {
827
827
  log.warn("Ignoring token with invalid EvmErc20TokenSchema", {
@@ -896,7 +896,7 @@ const subscribeBalances$8 = ({
896
896
  return () => {
897
897
  abortController.abort();
898
898
  };
899
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
899
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
900
900
  };
901
901
 
902
902
  const EvmErc20BalanceModule = {
@@ -1043,7 +1043,7 @@ const fetchTokens$7 = async ({
1043
1043
  }) => {
1044
1044
  // assume there is one and only one token in the array
1045
1045
  if (tokens.length !== 1) throw new Error("EVM Native module expects the nativeCurrency to be passed as a single token in the array");
1046
- const token = lodash.assign({
1046
+ const token = lodashEs.assign({
1047
1047
  id: chaindataProvider.evmNativeTokenId(networkId),
1048
1048
  type: MODULE_TYPE$7,
1049
1049
  platform: PLATFORM$7,
@@ -1116,7 +1116,7 @@ const subscribeBalances$7 = ({
1116
1116
  return () => {
1117
1117
  abortController.abort();
1118
1118
  };
1119
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
1119
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
1120
1120
  };
1121
1121
 
1122
1122
  const EvmNativeBalanceModule = {
@@ -1382,7 +1382,7 @@ const fetchTokens$6 = async ({
1382
1382
  };
1383
1383
  const cached2 = cache[tokenId] && TokenCacheSchema.safeParse(cache[tokenId]).data;
1384
1384
  if (cached2?.isValid === false) continue;
1385
- const token = lodash.assign(base, cached2?.isValid ? lodash.omit(cached2, ["isValid"]) : {}, tokenConfig);
1385
+ const token = lodashEs.assign(base, cached2?.isValid ? lodashEs.omit(cached2, ["isValid"]) : {}, tokenConfig);
1386
1386
  const parsed = chaindataProvider.EvmUniswapV2TokenSchema.safeParse(token);
1387
1387
  if (!parsed.success) {
1388
1388
  log.warn("Ignoring token with invalid schema", token);
@@ -1455,7 +1455,7 @@ const subscribeBalances$6 = ({
1455
1455
  return () => {
1456
1456
  abortController.abort();
1457
1457
  };
1458
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
1458
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
1459
1459
  };
1460
1460
 
1461
1461
  const EvmUniswapV2BalanceModule = {
@@ -1767,7 +1767,7 @@ const fetchTokens$5 = async ({
1767
1767
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
1768
1768
  const assetStorageEntries = assetStorageResults[0].changes;
1769
1769
  const metadataStorageEntries = metadataStorageResults[0].changes;
1770
- const assetByAssetId = lodash.keyBy(assetStorageEntries.map(([key, value]) => {
1770
+ const assetByAssetId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
1771
1771
  const [assetId] = assetCodec.keys.dec(key);
1772
1772
  const asset = assetCodec.value.dec(value);
1773
1773
  return {
@@ -1776,7 +1776,7 @@ const fetchTokens$5 = async ({
1776
1776
  isSufficient: asset.is_sufficient
1777
1777
  };
1778
1778
  }), a => a.assetId);
1779
- const metadataByAssetId = lodash.keyBy(metadataStorageEntries.map(([key, value]) => {
1779
+ const metadataByAssetId = lodashEs.keyBy(metadataStorageEntries.map(([key, value]) => {
1780
1780
  const [assetId] = metadataCodec.keys.dec(key);
1781
1781
  const metadata = metadataCodec.value.dec(value);
1782
1782
  return {
@@ -1787,8 +1787,8 @@ const fetchTokens$5 = async ({
1787
1787
  symbol: metadata.symbol?.asText()
1788
1788
  };
1789
1789
  }), a => a.assetId);
1790
- const allTokens = lodash.keys(assetByAssetId).map(assetId => lodash.assign({}, assetByAssetId[assetId], metadataByAssetId[assetId] ?? undefined));
1791
- const configTokenByAssetId = lodash.keyBy(tokens, t => t.assetId);
1790
+ const allTokens = lodashEs.keys(assetByAssetId).map(assetId => lodashEs.assign({}, assetByAssetId[assetId], metadataByAssetId[assetId] ?? undefined));
1791
+ const configTokenByAssetId = lodashEs.keyBy(tokens, t => t.assetId);
1792
1792
  return allTokens.map(asset => ({
1793
1793
  id: chaindataProvider.subAssetTokenId(networkId, String(asset.assetId)),
1794
1794
  type: MODULE_TYPE$5,
@@ -1811,7 +1811,7 @@ const fetchTokens$5 = async ({
1811
1811
  // apply config overrides
1812
1812
  .map(token => {
1813
1813
  const configToken = configTokenByAssetId[token.assetId];
1814
- return configToken ? lodash.assign({}, token, configToken) : token;
1814
+ return configToken ? lodashEs.assign({}, token, configToken) : token;
1815
1815
  })
1816
1816
  // validate results
1817
1817
  .filter(t => {
@@ -2919,7 +2919,7 @@ const fetchTokens$4 = async ({
2919
2919
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
2920
2920
  const assetStorageEntries = assetStorageResults[0].changes;
2921
2921
  const metadataStorageEntries = metadataStorageResults[0].changes;
2922
- const assetByOnChainId = lodash.keyBy(assetStorageEntries.map(([key, value]) => {
2922
+ const assetByOnChainId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
2923
2923
  const [decodedKey] = assetCodec.keys.dec(key);
2924
2924
  const onChainId = scale.papiStringify(decodedKey);
2925
2925
  const asset = assetCodec.value.dec(value);
@@ -2929,7 +2929,7 @@ const fetchTokens$4 = async ({
2929
2929
  isSufficient: asset.is_sufficient
2930
2930
  };
2931
2931
  }), a => a.onChainId);
2932
- const metadataByOnChainId = lodash.keyBy(metadataStorageEntries.map(([key, value]) => {
2932
+ const metadataByOnChainId = lodashEs.keyBy(metadataStorageEntries.map(([key, value]) => {
2933
2933
  const [decodedKey] = metadataCodec.keys.dec(key);
2934
2934
  const onChainId = scale.papiStringify(decodedKey);
2935
2935
  const metadata = metadataCodec.value.dec(value);
@@ -2941,8 +2941,8 @@ const fetchTokens$4 = async ({
2941
2941
  symbol: metadata.symbol?.asText()
2942
2942
  };
2943
2943
  }), a => a.onChainId);
2944
- const allTokens = lodash.keys(assetByOnChainId).map(onChainId => lodash.assign({}, assetByOnChainId[onChainId], metadataByOnChainId[onChainId] ?? undefined));
2945
- const configTokenByOnChainId = lodash.keyBy(tokens, t => t.onChainId);
2944
+ const allTokens = lodashEs.keys(assetByOnChainId).map(onChainId => lodashEs.assign({}, assetByOnChainId[onChainId], metadataByOnChainId[onChainId] ?? undefined));
2945
+ const configTokenByOnChainId = lodashEs.keyBy(tokens, t => t.onChainId);
2946
2946
  return allTokens.map(asset => ({
2947
2947
  id: chaindataProvider.subForeignAssetTokenId(networkId, asset.onChainId),
2948
2948
  type: MODULE_TYPE$4,
@@ -2965,7 +2965,7 @@ const fetchTokens$4 = async ({
2965
2965
  // apply config overrides
2966
2966
  .map(token => {
2967
2967
  const configToken = configTokenByOnChainId[token.onChainId];
2968
- return configToken ? lodash.assign({}, token, configToken) : token;
2968
+ return configToken ? lodashEs.assign({}, token, configToken) : token;
2969
2969
  })
2970
2970
  // validate results
2971
2971
  .filter(t => {
@@ -3187,7 +3187,7 @@ const fetchBalances$3 = async ({
3187
3187
  }))
3188
3188
  };
3189
3189
  }
3190
- const addresses = lodash.uniq(balanceDefs.map(def => def.address));
3190
+ const addresses = lodashEs.uniq(balanceDefs.map(def => def.address));
3191
3191
  try {
3192
3192
  const res = await Promise.all(addresses.map(address => fetchRuntimeCallResult(connector, networkId, miniMetadata.data, "CurrenciesApi", "accounts", [address])));
3193
3193
  const fetchedBalances = addresses.flatMap((address, index) => {
@@ -3199,7 +3199,7 @@ const fetchBalances$3 = async ({
3199
3199
  frozen: balance.frozen.toString()
3200
3200
  })).filter(b => b.onChainId !== undefined);
3201
3201
  });
3202
- const balancesByKey = lodash.keyBy(fetchedBalances, b => `${b.address}:${b.onChainId}`);
3202
+ const balancesByKey = lodashEs.keyBy(fetchedBalances, b => `${b.address}:${b.onChainId}`);
3203
3203
  const success = tokensWithAddresses.reduce((acc, [token, addresses]) => {
3204
3204
  if (token.type === MODULE_TYPE$3) for (const address of addresses) {
3205
3205
  const rawBalance = balancesByKey[`${address}:${token.onChainId}`];
@@ -3263,7 +3263,7 @@ const fetchTokens$3 = async ({
3263
3263
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("AssetRegistry", "Assets")]);
3264
3264
  const assetStorageResults = await connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]);
3265
3265
  const assetStorageEntries = assetStorageResults[0].changes;
3266
- const configTokenByAssetId = lodash.keyBy(tokens, t => t.onChainId);
3266
+ const configTokenByAssetId = lodashEs.keyBy(tokens, t => t.onChainId);
3267
3267
  return assetStorageEntries.map(([key, value]) => {
3268
3268
  // parse results
3269
3269
  const [onChainId] = assetsCodec.keys.dec(key);
@@ -3306,7 +3306,7 @@ const fetchTokens$3 = async ({
3306
3306
  // apply config overrides
3307
3307
  .map(token => {
3308
3308
  const configToken = configTokenByAssetId[token.onChainId];
3309
- return configToken ? lodash.assign({}, token, configToken) : token;
3309
+ return configToken ? lodashEs.assign({}, token, configToken) : token;
3310
3310
  })
3311
3311
  // validate results
3312
3312
  .filter(t => {
@@ -3445,7 +3445,7 @@ const subscribeBalances$3 = ({
3445
3445
  return () => {
3446
3446
  abortController.abort();
3447
3447
  };
3448
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
3448
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
3449
3449
  };
3450
3450
 
3451
3451
  const SubHydrationBalanceModule = {
@@ -3512,9 +3512,9 @@ const getSubtensorStakingBalances$ = (connector, networkId, balanceDefs, miniMet
3512
3512
  return rxjs.timer(0, 30000).pipe(rxjs.switchMap(() => rxjs.from(fetchStakeInfoByAddress(connector, networkId, miniMetadata, addresses)).pipe(rxjs.switchMap(stakeInfoByAddress => fetchStakingBalanceValuesByAddress(connector, networkId, miniMetadata, stakeInfoByAddress)))));
3513
3513
  };
3514
3514
  const fetchStakingBalanceValuesByAddress = async (connector, networkId, miniMetadata, stakeInfoByAddress) => {
3515
- const uniqueNetuids = lodash.uniq(lodash.values(stakeInfoByAddress).flatMap(infos => infos.map(info => info.netuid))).filter(netuid => netuid !== SUBTENSOR_ROOT_NETUID);
3515
+ const uniqueNetuids = lodashEs.uniq(lodashEs.values(stakeInfoByAddress).flatMap(infos => infos.map(info => info.netuid))).filter(netuid => netuid !== SUBTENSOR_ROOT_NETUID);
3516
3516
  const dynamicInfoByNetuid = await fetchDynamicInfoByNetuid(connector, networkId, miniMetadata, uniqueNetuids);
3517
- return lodash.fromPairs(lodash.toPairs(stakeInfoByAddress).map(([address, stakeInfos]) => {
3517
+ return lodashEs.fromPairs(lodashEs.toPairs(stakeInfoByAddress).map(([address, stakeInfos]) => {
3518
3518
  const stakesBalances = stakeInfos.filter(({
3519
3519
  stake
3520
3520
  }) => stake >= SUBTENSOR_MIN_STAKE_AMOUNT_PLANK).map(({
@@ -3539,7 +3539,7 @@ const fetchStakingBalanceValuesByAddress = async (connector, networkId, miniMeta
3539
3539
  } = dynamicInfo ?? {};
3540
3540
  const tokenSymbol = new TextDecoder().decode(Uint8Array.from(token_symbol ?? []));
3541
3541
  const subnetName = new TextDecoder().decode(Uint8Array.from(subnet_name ?? []));
3542
- const subnetIdentity = subnet_identity ? lodash.fromPairs(lodash.toPairs(subnet_identity).map(([key, binary]) => [key, binary.asText()])) : undefined;
3542
+ const subnetIdentity = subnet_identity ? lodashEs.fromPairs(lodashEs.toPairs(subnet_identity).map(([key, binary]) => [key, binary.asText()])) : undefined;
3543
3543
 
3544
3544
  // Add 1n balance if failed to fetch dynamic info, so the position is not ignored by Balance lib and is displayed in the UI.
3545
3545
  const alphaStakedInTao = dynamicInfo ? calculateTaoFromDynamicInfo({
@@ -3582,7 +3582,7 @@ const fetchStakeInfoByAddress = async (connector, networkId, miniMetadata, addre
3582
3582
  delay: 500,
3583
3583
  retryCount: 3
3584
3584
  })]));
3585
- return lodash.fromPairs(pairs);
3585
+ return lodashEs.fromPairs(pairs);
3586
3586
  };
3587
3587
 
3588
3588
  // assume dynamic info doesnt change over the course of a browser session
@@ -3606,7 +3606,7 @@ const fetchDynamicInfoByNetuid = async (connector, networkId, miniMetadata, uniq
3606
3606
  return dynamicInfoCache.get(cacheKey) ?? null;
3607
3607
  };
3608
3608
  const results = await Promise.all(uniqueNetuids.map(async netuid => [netuid, await fetchInfo(netuid)]));
3609
- return lodash.fromPairs(results);
3609
+ return lodashEs.fromPairs(results);
3610
3610
  };
3611
3611
 
3612
3612
  const getOtherType = input => `other-${input}`;
@@ -4272,7 +4272,7 @@ const fetchTokens$2 = async ({
4272
4272
  decimals: decimals,
4273
4273
  existentialDeposit: miniMetadata.extra.existentialDeposit ?? "0"
4274
4274
  };
4275
- const token = lodash.assign(nativeToken, tokenConfig);
4275
+ const token = lodashEs.assign(nativeToken, tokenConfig);
4276
4276
  const parsed = chaindataProvider.SubNativeTokenSchema.safeParse(token);
4277
4277
  if (!parsed.success) {
4278
4278
  log.warn(`Ignoring invalid token ${MODULE_TYPE$2}`, token, parsed.error);
@@ -4490,7 +4490,7 @@ const subscribeBalances$2 = ({
4490
4490
  const subtensorBalancesByAddress$ = getSubtensorStakingBalances$(connector, networkId, balanceDefs, miniMetadata);
4491
4491
  return rxjs.combineLatest([baseBalances$, subtensorBalancesByAddress$]).pipe(rxjs.map(([baseBalances, subtensorBalancesByAddress]) => {
4492
4492
  // add subtensor balances to base balances
4493
- for (const [address, subtensorBalances] of lodash.toPairs(subtensorBalancesByAddress)) {
4493
+ for (const [address, subtensorBalances] of lodashEs.toPairs(subtensorBalancesByAddress)) {
4494
4494
  const balance = baseBalances.find(b => b.address === address);
4495
4495
  if (balance?.values) balance.values.push(...subtensorBalances);
4496
4496
  }
@@ -5805,7 +5805,7 @@ const fetchTokens$1 = async ({
5805
5805
  continue;
5806
5806
  }
5807
5807
  }
5808
- return lodash.values(tokenList).filter(t => {
5808
+ return lodashEs.values(tokenList).filter(t => {
5809
5809
  const parsed = chaindataProvider.SubPsp22TokenSchema.safeParse(t);
5810
5810
  if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$1}`, t);
5811
5811
  return parsed.success;
@@ -5934,7 +5934,7 @@ const subscribeBalances$1 = ({
5934
5934
  return () => {
5935
5935
  abortController.abort();
5936
5936
  };
5937
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
5937
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
5938
5938
  };
5939
5939
 
5940
5940
  const SubPsp22BalanceModule = {
@@ -6100,7 +6100,7 @@ const fetchTokens = async ({
6100
6100
  // in this module we do not fetch any token information from the chain
6101
6101
  // this is because there are basically as many pallet implementations as there are networks (Expect Chaos, they said)
6102
6102
  // we rely on the config to provide all the info we need
6103
- return tokens.map(tokenConfig => lodash.assign({
6103
+ return tokens.map(tokenConfig => lodashEs.assign({
6104
6104
  id: chaindataProvider.subTokensTokenId(networkId, tokenConfig.onChainId),
6105
6105
  type: MODULE_TYPE,
6106
6106
  platform: PLATFORM,
@@ -6448,8 +6448,8 @@ class BalancesProvider {
6448
6448
  this.#chaindataProvider = chaindataProvider;
6449
6449
  this.#chainConnectors = chainConnectors;
6450
6450
  this.#storage = new rxjs.BehaviorSubject({
6451
- balances: lodash.keyBy(storage.balances.filter(util.isNotNil), b => getBalanceId(b)),
6452
- miniMetadatas: lodash.keyBy(storage.miniMetadatas.filter(util.isNotNil), m => m.id)
6451
+ balances: lodashEs.keyBy(storage.balances.filter(util.isNotNil), b => getBalanceId(b)),
6452
+ miniMetadatas: lodashEs.keyBy(storage.miniMetadatas.filter(util.isNotNil), m => m.id)
6453
6453
  });
6454
6454
  }
6455
6455
  get storage$() {
@@ -6457,8 +6457,8 @@ class BalancesProvider {
6457
6457
  balances,
6458
6458
  miniMetadatas
6459
6459
  }) => ({
6460
- balances: lodash.values(balances).filter(util.isNotNil),
6461
- miniMetadatas: lodash.values(miniMetadatas).filter(util.isNotNil)
6460
+ balances: lodashEs.values(balances).filter(util.isNotNil),
6461
+ miniMetadatas: lodashEs.values(miniMetadatas).filter(util.isNotNil)
6462
6462
  })));
6463
6463
  }
6464
6464
 
@@ -6469,7 +6469,7 @@ class BalancesProvider {
6469
6469
  return util.getSharedObservable("BalancesProvider.getBalances$", addressesByTokenId, () => {
6470
6470
  return this.cleanupAddressesByTokenId(addressesByTokenId).pipe(rxjs.map(
6471
6471
  // split by network
6472
- addressesByTokenId => lodash.toPairs(addressesByTokenId).reduce((acc, [tokenId, addresses]) => {
6472
+ addressesByTokenId => lodashEs.toPairs(addressesByTokenId).reduce((acc, [tokenId, addresses]) => {
6473
6473
  const networkId = chaindataProvider.parseTokenId(tokenId).networkId;
6474
6474
  if (!acc[networkId]) acc[networkId] = {};
6475
6475
  acc[networkId][tokenId] = addresses;
@@ -6478,7 +6478,7 @@ class BalancesProvider {
6478
6478
  // fetch balances and start a 30s timer to mark the whole subscription live after 30s
6479
6479
  rxjs.combineLatest({
6480
6480
  isStale: rxjs.timer(30_000).pipe(rxjs.map(() => true), rxjs.startWith(false)),
6481
- results: rxjs.combineLatest(lodash.toPairs(addressesByTokenIdByNetworkId).map(([networkId]) => this.getNetworkBalances$(networkId, addressesByTokenIdByNetworkId[networkId])))
6481
+ results: rxjs.combineLatest(lodashEs.toPairs(addressesByTokenIdByNetworkId).map(([networkId]) => this.getNetworkBalances$(networkId, addressesByTokenIdByNetworkId[networkId])))
6482
6482
  })), rxjs.map(
6483
6483
  // combine
6484
6484
  ({
@@ -6495,7 +6495,7 @@ class BalancesProvider {
6495
6495
  })), rxjs.startWith({
6496
6496
  status: "initialising",
6497
6497
  balances: this.getStoredBalances(addressesByTokenId)
6498
- }), rxjs.distinctUntilChanged(lodash.isEqual));
6498
+ }), rxjs.distinctUntilChanged(lodashEs.isEqual));
6499
6499
  });
6500
6500
  }
6501
6501
  fetchBalances(addressesByTokenId) {
@@ -6511,14 +6511,14 @@ class BalancesProvider {
6511
6511
  const tokensMapById$ = this.#chaindataProvider.getTokensMapById$();
6512
6512
  const miniMetadatas$ = this.getNetworkMiniMetadatas$(networkId);
6513
6513
  return rxjs.combineLatest([network$, miniMetadatas$, tokensMapById$]).pipe(rxjs.switchMap(([network, miniMetadatas, tokensMapById]) => {
6514
- const tokensAndAddresses = lodash.toPairs(addressesByTokenId).map(([tokenId, addresses]) => [tokensMapById[tokenId], addresses]);
6514
+ const tokensAndAddresses = lodashEs.toPairs(addressesByTokenId).map(([tokenId, addresses]) => [tokensMapById[tokenId], addresses]);
6515
6515
  return rxjs.combineLatest(BALANCE_MODULES.filter(mod => mod.platform === network?.platform).map(mod => {
6516
6516
  const tokensWithAddresses = tokensAndAddresses.filter(([token]) => token.type === mod.type);
6517
- const moduleAddressesByTokenId = lodash.fromPairs(tokensWithAddresses.map(([token, addresses]) => [token.id, addresses]));
6517
+ const moduleAddressesByTokenId = lodashEs.fromPairs(tokensWithAddresses.map(([token, addresses]) => [token.id, addresses]));
6518
6518
  const miniMetadata = miniMetadatas.find(m => m.source === mod.type);
6519
6519
 
6520
6520
  // all balance ids expected in result set
6521
- const balanceIds = lodash.toPairs(moduleAddressesByTokenId).flatMap(([tokenId, addresses]) => addresses.map(address => getBalanceId({
6521
+ const balanceIds = lodashEs.toPairs(moduleAddressesByTokenId).flatMap(([tokenId, addresses]) => addresses.map(address => getBalanceId({
6522
6522
  tokenId,
6523
6523
  address
6524
6524
  })));
@@ -6531,15 +6531,15 @@ class BalancesProvider {
6531
6531
  const updateStorage = results => {
6532
6532
  if (results.status !== "live") return;
6533
6533
  const storage = this.#storage.getValue();
6534
- const balances = lodash.assign({}, storage.balances,
6534
+ const balances = lodashEs.assign({}, storage.balances,
6535
6535
  // delete all balances expected in the result set. because if they are not present it means they are empty.
6536
- lodash.fromPairs(balanceIds.map(balanceId => [balanceId, undefined])), lodash.keyBy(
6536
+ lodashEs.fromPairs(balanceIds.map(balanceId => [balanceId, undefined])), lodashEs.keyBy(
6537
6537
  // storage balances must have status "cache", because they are used as start value when initialising subsequent subscriptions
6538
6538
  results.balances.map(b => ({
6539
6539
  ...b,
6540
6540
  status: "cache"
6541
6541
  })), b => getBalanceId(b)));
6542
- this.#storage.next(lodash.assign({}, storage, {
6542
+ this.#storage.next(lodashEs.assign({}, storage, {
6543
6543
  balances
6544
6544
  }));
6545
6545
  };
@@ -6609,12 +6609,12 @@ class BalancesProvider {
6609
6609
  rxjs.tap(newMiniMetadatas => {
6610
6610
  if (!newMiniMetadatas.length) return;
6611
6611
  const storage = this.#storage.getValue();
6612
- const miniMetadatas = lodash.assign(
6612
+ const miniMetadatas = lodashEs.assign(
6613
6613
  // keep minimetadatas of other networks
6614
- lodash.keyBy(lodash.values(storage.miniMetadatas).filter(m => m.chainId !== networkId), m => m.id),
6614
+ lodashEs.keyBy(lodashEs.values(storage.miniMetadatas).filter(m => m.chainId !== networkId), m => m.id),
6615
6615
  // add the ones for our network
6616
- lodash.keyBy(newMiniMetadatas, m => m.id));
6617
- this.#storage.next(lodash.assign({}, storage, {
6616
+ lodashEs.keyBy(newMiniMetadatas, m => m.id));
6617
+ this.#storage.next(lodashEs.assign({}, storage, {
6618
6618
  miniMetadatas
6619
6619
  }));
6620
6620
  }));
@@ -6626,13 +6626,13 @@ class BalancesProvider {
6626
6626
  });
6627
6627
  }
6628
6628
  getStoredMiniMetadatas$(networkId, specVersion) {
6629
- return this.storage$.pipe(rxjs.map(storage => storage.miniMetadatas.filter(m => m.chainId === networkId && m.specVersion === specVersion && m.version === chaindataProvider.MINIMETADATA_VERSION)), rxjs.distinctUntilChanged(lodash.isEqual));
6629
+ return this.storage$.pipe(rxjs.map(storage => storage.miniMetadatas.filter(m => m.chainId === networkId && m.specVersion === specVersion && m.version === chaindataProvider.MINIMETADATA_VERSION)), rxjs.distinctUntilChanged(lodashEs.isEqual));
6630
6630
  }
6631
6631
  getDefaultMiniMetadatas$(networkId, specVersion) {
6632
- return this.#chaindataProvider.miniMetadatas$.pipe(rxjs.map(miniMetadatas => miniMetadatas.filter(m => m.chainId === networkId && m.specVersion === specVersion && m.version === chaindataProvider.MINIMETADATA_VERSION)), rxjs.distinctUntilChanged(lodash.isEqual));
6632
+ return this.#chaindataProvider.miniMetadatas$.pipe(rxjs.map(miniMetadatas => miniMetadatas.filter(m => m.chainId === networkId && m.specVersion === specVersion && m.version === chaindataProvider.MINIMETADATA_VERSION)), rxjs.distinctUntilChanged(lodashEs.isEqual));
6633
6633
  }
6634
6634
  getStoredBalances(addressesByToken) {
6635
- const balanceDefs = lodash.toPairs(addressesByToken).flatMap(([tokenId, addresses]) => addresses.map(address => [tokenId, address]));
6635
+ const balanceDefs = lodashEs.toPairs(addressesByToken).flatMap(([tokenId, addresses]) => addresses.map(address => [tokenId, address]));
6636
6636
  return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({
6637
6637
  address,
6638
6638
  tokenId
@@ -6640,7 +6640,7 @@ class BalancesProvider {
6640
6640
  }
6641
6641
  cleanupAddressesByTokenId(addressesByTokenId) {
6642
6642
  return this.#chaindataProvider.getNetworksMapById$().pipe(rxjs.map(networksById => {
6643
- return lodash.fromPairs(lodash.toPairs(addressesByTokenId).map(([tokenId, addresses]) => {
6643
+ return lodashEs.fromPairs(lodashEs.toPairs(addressesByTokenId).map(([tokenId, addresses]) => {
6644
6644
  const networkId = chaindataProvider.parseTokenId(tokenId).networkId;
6645
6645
  const network = networksById[networkId];
6646
6646
  return [tokenId, addresses.filter(address => network && isAddressCompatibleWithNetwork(network, address))];
@@ -3,7 +3,7 @@
3
3
  var chaindataProvider = require('@talismn/chaindata-provider');
4
4
  var util = require('@talismn/util');
5
5
  var viem = require('viem');
6
- var lodash = require('lodash');
6
+ var lodashEs = require('lodash-es');
7
7
  var z = require('zod/v4');
8
8
  var anylogger = require('anylogger');
9
9
  var rxjs = require('rxjs');
@@ -12,7 +12,7 @@ var tokenRates = require('@talismn/token-rates');
12
12
  var BigNumber = require('bignumber.js');
13
13
  var utils = require('@polkadot-api/utils');
14
14
  var polkadotApi = require('polkadot-api');
15
- var upperFirst = require('lodash/upperFirst');
15
+ var upperFirst = require('lodash-es/upperFirst');
16
16
  var scaleTs = require('scale-ts');
17
17
  var apiContract = require('@polkadot/api-contract');
18
18
  var types = require('@polkadot/types');
@@ -821,7 +821,7 @@ const fetchTokens$8 = async ({
821
821
  };
822
822
  const cached2 = cache[tokenId] && TokenCacheSchema$1.safeParse(cache[tokenId]).data;
823
823
  if (cached2?.isValid === false) continue;
824
- const token = lodash.assign(base, cached2?.isValid ? lodash.omit(cached2, ["isValid"]) : {}, tokenConfig);
824
+ const token = lodashEs.assign(base, cached2?.isValid ? lodashEs.omit(cached2, ["isValid"]) : {}, tokenConfig);
825
825
  const parsed = chaindataProvider.EvmErc20TokenSchema.safeParse(token);
826
826
  if (!parsed.success) {
827
827
  log.warn("Ignoring token with invalid EvmErc20TokenSchema", {
@@ -896,7 +896,7 @@ const subscribeBalances$8 = ({
896
896
  return () => {
897
897
  abortController.abort();
898
898
  };
899
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
899
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
900
900
  };
901
901
 
902
902
  const EvmErc20BalanceModule = {
@@ -1043,7 +1043,7 @@ const fetchTokens$7 = async ({
1043
1043
  }) => {
1044
1044
  // assume there is one and only one token in the array
1045
1045
  if (tokens.length !== 1) throw new Error("EVM Native module expects the nativeCurrency to be passed as a single token in the array");
1046
- const token = lodash.assign({
1046
+ const token = lodashEs.assign({
1047
1047
  id: chaindataProvider.evmNativeTokenId(networkId),
1048
1048
  type: MODULE_TYPE$7,
1049
1049
  platform: PLATFORM$7,
@@ -1116,7 +1116,7 @@ const subscribeBalances$7 = ({
1116
1116
  return () => {
1117
1117
  abortController.abort();
1118
1118
  };
1119
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
1119
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
1120
1120
  };
1121
1121
 
1122
1122
  const EvmNativeBalanceModule = {
@@ -1382,7 +1382,7 @@ const fetchTokens$6 = async ({
1382
1382
  };
1383
1383
  const cached2 = cache[tokenId] && TokenCacheSchema.safeParse(cache[tokenId]).data;
1384
1384
  if (cached2?.isValid === false) continue;
1385
- const token = lodash.assign(base, cached2?.isValid ? lodash.omit(cached2, ["isValid"]) : {}, tokenConfig);
1385
+ const token = lodashEs.assign(base, cached2?.isValid ? lodashEs.omit(cached2, ["isValid"]) : {}, tokenConfig);
1386
1386
  const parsed = chaindataProvider.EvmUniswapV2TokenSchema.safeParse(token);
1387
1387
  if (!parsed.success) {
1388
1388
  log.warn("Ignoring token with invalid schema", token);
@@ -1455,7 +1455,7 @@ const subscribeBalances$6 = ({
1455
1455
  return () => {
1456
1456
  abortController.abort();
1457
1457
  };
1458
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
1458
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
1459
1459
  };
1460
1460
 
1461
1461
  const EvmUniswapV2BalanceModule = {
@@ -1767,7 +1767,7 @@ const fetchTokens$5 = async ({
1767
1767
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
1768
1768
  const assetStorageEntries = assetStorageResults[0].changes;
1769
1769
  const metadataStorageEntries = metadataStorageResults[0].changes;
1770
- const assetByAssetId = lodash.keyBy(assetStorageEntries.map(([key, value]) => {
1770
+ const assetByAssetId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
1771
1771
  const [assetId] = assetCodec.keys.dec(key);
1772
1772
  const asset = assetCodec.value.dec(value);
1773
1773
  return {
@@ -1776,7 +1776,7 @@ const fetchTokens$5 = async ({
1776
1776
  isSufficient: asset.is_sufficient
1777
1777
  };
1778
1778
  }), a => a.assetId);
1779
- const metadataByAssetId = lodash.keyBy(metadataStorageEntries.map(([key, value]) => {
1779
+ const metadataByAssetId = lodashEs.keyBy(metadataStorageEntries.map(([key, value]) => {
1780
1780
  const [assetId] = metadataCodec.keys.dec(key);
1781
1781
  const metadata = metadataCodec.value.dec(value);
1782
1782
  return {
@@ -1787,8 +1787,8 @@ const fetchTokens$5 = async ({
1787
1787
  symbol: metadata.symbol?.asText()
1788
1788
  };
1789
1789
  }), a => a.assetId);
1790
- const allTokens = lodash.keys(assetByAssetId).map(assetId => lodash.assign({}, assetByAssetId[assetId], metadataByAssetId[assetId] ?? undefined));
1791
- const configTokenByAssetId = lodash.keyBy(tokens, t => t.assetId);
1790
+ const allTokens = lodashEs.keys(assetByAssetId).map(assetId => lodashEs.assign({}, assetByAssetId[assetId], metadataByAssetId[assetId] ?? undefined));
1791
+ const configTokenByAssetId = lodashEs.keyBy(tokens, t => t.assetId);
1792
1792
  return allTokens.map(asset => ({
1793
1793
  id: chaindataProvider.subAssetTokenId(networkId, String(asset.assetId)),
1794
1794
  type: MODULE_TYPE$5,
@@ -1811,7 +1811,7 @@ const fetchTokens$5 = async ({
1811
1811
  // apply config overrides
1812
1812
  .map(token => {
1813
1813
  const configToken = configTokenByAssetId[token.assetId];
1814
- return configToken ? lodash.assign({}, token, configToken) : token;
1814
+ return configToken ? lodashEs.assign({}, token, configToken) : token;
1815
1815
  })
1816
1816
  // validate results
1817
1817
  .filter(t => {
@@ -2919,7 +2919,7 @@ const fetchTokens$4 = async ({
2919
2919
  const [assetStorageResults, metadataStorageResults] = await Promise.all([connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]), connector.send(networkId, "state_queryStorageAt", [allMetadataStorageKeys])]);
2920
2920
  const assetStorageEntries = assetStorageResults[0].changes;
2921
2921
  const metadataStorageEntries = metadataStorageResults[0].changes;
2922
- const assetByOnChainId = lodash.keyBy(assetStorageEntries.map(([key, value]) => {
2922
+ const assetByOnChainId = lodashEs.keyBy(assetStorageEntries.map(([key, value]) => {
2923
2923
  const [decodedKey] = assetCodec.keys.dec(key);
2924
2924
  const onChainId = scale.papiStringify(decodedKey);
2925
2925
  const asset = assetCodec.value.dec(value);
@@ -2929,7 +2929,7 @@ const fetchTokens$4 = async ({
2929
2929
  isSufficient: asset.is_sufficient
2930
2930
  };
2931
2931
  }), a => a.onChainId);
2932
- const metadataByOnChainId = lodash.keyBy(metadataStorageEntries.map(([key, value]) => {
2932
+ const metadataByOnChainId = lodashEs.keyBy(metadataStorageEntries.map(([key, value]) => {
2933
2933
  const [decodedKey] = metadataCodec.keys.dec(key);
2934
2934
  const onChainId = scale.papiStringify(decodedKey);
2935
2935
  const metadata = metadataCodec.value.dec(value);
@@ -2941,8 +2941,8 @@ const fetchTokens$4 = async ({
2941
2941
  symbol: metadata.symbol?.asText()
2942
2942
  };
2943
2943
  }), a => a.onChainId);
2944
- const allTokens = lodash.keys(assetByOnChainId).map(onChainId => lodash.assign({}, assetByOnChainId[onChainId], metadataByOnChainId[onChainId] ?? undefined));
2945
- const configTokenByOnChainId = lodash.keyBy(tokens, t => t.onChainId);
2944
+ const allTokens = lodashEs.keys(assetByOnChainId).map(onChainId => lodashEs.assign({}, assetByOnChainId[onChainId], metadataByOnChainId[onChainId] ?? undefined));
2945
+ const configTokenByOnChainId = lodashEs.keyBy(tokens, t => t.onChainId);
2946
2946
  return allTokens.map(asset => ({
2947
2947
  id: chaindataProvider.subForeignAssetTokenId(networkId, asset.onChainId),
2948
2948
  type: MODULE_TYPE$4,
@@ -2965,7 +2965,7 @@ const fetchTokens$4 = async ({
2965
2965
  // apply config overrides
2966
2966
  .map(token => {
2967
2967
  const configToken = configTokenByOnChainId[token.onChainId];
2968
- return configToken ? lodash.assign({}, token, configToken) : token;
2968
+ return configToken ? lodashEs.assign({}, token, configToken) : token;
2969
2969
  })
2970
2970
  // validate results
2971
2971
  .filter(t => {
@@ -3187,7 +3187,7 @@ const fetchBalances$3 = async ({
3187
3187
  }))
3188
3188
  };
3189
3189
  }
3190
- const addresses = lodash.uniq(balanceDefs.map(def => def.address));
3190
+ const addresses = lodashEs.uniq(balanceDefs.map(def => def.address));
3191
3191
  try {
3192
3192
  const res = await Promise.all(addresses.map(address => fetchRuntimeCallResult(connector, networkId, miniMetadata.data, "CurrenciesApi", "accounts", [address])));
3193
3193
  const fetchedBalances = addresses.flatMap((address, index) => {
@@ -3199,7 +3199,7 @@ const fetchBalances$3 = async ({
3199
3199
  frozen: balance.frozen.toString()
3200
3200
  })).filter(b => b.onChainId !== undefined);
3201
3201
  });
3202
- const balancesByKey = lodash.keyBy(fetchedBalances, b => `${b.address}:${b.onChainId}`);
3202
+ const balancesByKey = lodashEs.keyBy(fetchedBalances, b => `${b.address}:${b.onChainId}`);
3203
3203
  const success = tokensWithAddresses.reduce((acc, [token, addresses]) => {
3204
3204
  if (token.type === MODULE_TYPE$3) for (const address of addresses) {
3205
3205
  const rawBalance = balancesByKey[`${address}:${token.onChainId}`];
@@ -3263,7 +3263,7 @@ const fetchTokens$3 = async ({
3263
3263
  const allAssetStorageKeys = await connector.send(networkId, "state_getKeys", [scale.getStorageKeyPrefix("AssetRegistry", "Assets")]);
3264
3264
  const assetStorageResults = await connector.send(networkId, "state_queryStorageAt", [allAssetStorageKeys]);
3265
3265
  const assetStorageEntries = assetStorageResults[0].changes;
3266
- const configTokenByAssetId = lodash.keyBy(tokens, t => t.onChainId);
3266
+ const configTokenByAssetId = lodashEs.keyBy(tokens, t => t.onChainId);
3267
3267
  return assetStorageEntries.map(([key, value]) => {
3268
3268
  // parse results
3269
3269
  const [onChainId] = assetsCodec.keys.dec(key);
@@ -3306,7 +3306,7 @@ const fetchTokens$3 = async ({
3306
3306
  // apply config overrides
3307
3307
  .map(token => {
3308
3308
  const configToken = configTokenByAssetId[token.onChainId];
3309
- return configToken ? lodash.assign({}, token, configToken) : token;
3309
+ return configToken ? lodashEs.assign({}, token, configToken) : token;
3310
3310
  })
3311
3311
  // validate results
3312
3312
  .filter(t => {
@@ -3445,7 +3445,7 @@ const subscribeBalances$3 = ({
3445
3445
  return () => {
3446
3446
  abortController.abort();
3447
3447
  };
3448
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
3448
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
3449
3449
  };
3450
3450
 
3451
3451
  const SubHydrationBalanceModule = {
@@ -3512,9 +3512,9 @@ const getSubtensorStakingBalances$ = (connector, networkId, balanceDefs, miniMet
3512
3512
  return rxjs.timer(0, 30000).pipe(rxjs.switchMap(() => rxjs.from(fetchStakeInfoByAddress(connector, networkId, miniMetadata, addresses)).pipe(rxjs.switchMap(stakeInfoByAddress => fetchStakingBalanceValuesByAddress(connector, networkId, miniMetadata, stakeInfoByAddress)))));
3513
3513
  };
3514
3514
  const fetchStakingBalanceValuesByAddress = async (connector, networkId, miniMetadata, stakeInfoByAddress) => {
3515
- const uniqueNetuids = lodash.uniq(lodash.values(stakeInfoByAddress).flatMap(infos => infos.map(info => info.netuid))).filter(netuid => netuid !== SUBTENSOR_ROOT_NETUID);
3515
+ const uniqueNetuids = lodashEs.uniq(lodashEs.values(stakeInfoByAddress).flatMap(infos => infos.map(info => info.netuid))).filter(netuid => netuid !== SUBTENSOR_ROOT_NETUID);
3516
3516
  const dynamicInfoByNetuid = await fetchDynamicInfoByNetuid(connector, networkId, miniMetadata, uniqueNetuids);
3517
- return lodash.fromPairs(lodash.toPairs(stakeInfoByAddress).map(([address, stakeInfos]) => {
3517
+ return lodashEs.fromPairs(lodashEs.toPairs(stakeInfoByAddress).map(([address, stakeInfos]) => {
3518
3518
  const stakesBalances = stakeInfos.filter(({
3519
3519
  stake
3520
3520
  }) => stake >= SUBTENSOR_MIN_STAKE_AMOUNT_PLANK).map(({
@@ -3539,7 +3539,7 @@ const fetchStakingBalanceValuesByAddress = async (connector, networkId, miniMeta
3539
3539
  } = dynamicInfo ?? {};
3540
3540
  const tokenSymbol = new TextDecoder().decode(Uint8Array.from(token_symbol ?? []));
3541
3541
  const subnetName = new TextDecoder().decode(Uint8Array.from(subnet_name ?? []));
3542
- const subnetIdentity = subnet_identity ? lodash.fromPairs(lodash.toPairs(subnet_identity).map(([key, binary]) => [key, binary.asText()])) : undefined;
3542
+ const subnetIdentity = subnet_identity ? lodashEs.fromPairs(lodashEs.toPairs(subnet_identity).map(([key, binary]) => [key, binary.asText()])) : undefined;
3543
3543
 
3544
3544
  // Add 1n balance if failed to fetch dynamic info, so the position is not ignored by Balance lib and is displayed in the UI.
3545
3545
  const alphaStakedInTao = dynamicInfo ? calculateTaoFromDynamicInfo({
@@ -3582,7 +3582,7 @@ const fetchStakeInfoByAddress = async (connector, networkId, miniMetadata, addre
3582
3582
  delay: 500,
3583
3583
  retryCount: 3
3584
3584
  })]));
3585
- return lodash.fromPairs(pairs);
3585
+ return lodashEs.fromPairs(pairs);
3586
3586
  };
3587
3587
 
3588
3588
  // assume dynamic info doesnt change over the course of a browser session
@@ -3606,7 +3606,7 @@ const fetchDynamicInfoByNetuid = async (connector, networkId, miniMetadata, uniq
3606
3606
  return dynamicInfoCache.get(cacheKey) ?? null;
3607
3607
  };
3608
3608
  const results = await Promise.all(uniqueNetuids.map(async netuid => [netuid, await fetchInfo(netuid)]));
3609
- return lodash.fromPairs(results);
3609
+ return lodashEs.fromPairs(results);
3610
3610
  };
3611
3611
 
3612
3612
  const getOtherType = input => `other-${input}`;
@@ -4272,7 +4272,7 @@ const fetchTokens$2 = async ({
4272
4272
  decimals: decimals,
4273
4273
  existentialDeposit: miniMetadata.extra.existentialDeposit ?? "0"
4274
4274
  };
4275
- const token = lodash.assign(nativeToken, tokenConfig);
4275
+ const token = lodashEs.assign(nativeToken, tokenConfig);
4276
4276
  const parsed = chaindataProvider.SubNativeTokenSchema.safeParse(token);
4277
4277
  if (!parsed.success) {
4278
4278
  log.warn(`Ignoring invalid token ${MODULE_TYPE$2}`, token, parsed.error);
@@ -4490,7 +4490,7 @@ const subscribeBalances$2 = ({
4490
4490
  const subtensorBalancesByAddress$ = getSubtensorStakingBalances$(connector, networkId, balanceDefs, miniMetadata);
4491
4491
  return rxjs.combineLatest([baseBalances$, subtensorBalancesByAddress$]).pipe(rxjs.map(([baseBalances, subtensorBalancesByAddress]) => {
4492
4492
  // add subtensor balances to base balances
4493
- for (const [address, subtensorBalances] of lodash.toPairs(subtensorBalancesByAddress)) {
4493
+ for (const [address, subtensorBalances] of lodashEs.toPairs(subtensorBalancesByAddress)) {
4494
4494
  const balance = baseBalances.find(b => b.address === address);
4495
4495
  if (balance?.values) balance.values.push(...subtensorBalances);
4496
4496
  }
@@ -5805,7 +5805,7 @@ const fetchTokens$1 = async ({
5805
5805
  continue;
5806
5806
  }
5807
5807
  }
5808
- return lodash.values(tokenList).filter(t => {
5808
+ return lodashEs.values(tokenList).filter(t => {
5809
5809
  const parsed = chaindataProvider.SubPsp22TokenSchema.safeParse(t);
5810
5810
  if (!parsed.success) log.warn(`Ignoring invalid token ${MODULE_TYPE$1}`, t);
5811
5811
  return parsed.success;
@@ -5934,7 +5934,7 @@ const subscribeBalances$1 = ({
5934
5934
  return () => {
5935
5935
  abortController.abort();
5936
5936
  };
5937
- }).pipe(rxjs.distinctUntilChanged(lodash.isEqual));
5937
+ }).pipe(rxjs.distinctUntilChanged(lodashEs.isEqual));
5938
5938
  };
5939
5939
 
5940
5940
  const SubPsp22BalanceModule = {
@@ -6100,7 +6100,7 @@ const fetchTokens = async ({
6100
6100
  // in this module we do not fetch any token information from the chain
6101
6101
  // this is because there are basically as many pallet implementations as there are networks (Expect Chaos, they said)
6102
6102
  // we rely on the config to provide all the info we need
6103
- return tokens.map(tokenConfig => lodash.assign({
6103
+ return tokens.map(tokenConfig => lodashEs.assign({
6104
6104
  id: chaindataProvider.subTokensTokenId(networkId, tokenConfig.onChainId),
6105
6105
  type: MODULE_TYPE,
6106
6106
  platform: PLATFORM,
@@ -6448,8 +6448,8 @@ class BalancesProvider {
6448
6448
  this.#chaindataProvider = chaindataProvider;
6449
6449
  this.#chainConnectors = chainConnectors;
6450
6450
  this.#storage = new rxjs.BehaviorSubject({
6451
- balances: lodash.keyBy(storage.balances.filter(util.isNotNil), b => getBalanceId(b)),
6452
- miniMetadatas: lodash.keyBy(storage.miniMetadatas.filter(util.isNotNil), m => m.id)
6451
+ balances: lodashEs.keyBy(storage.balances.filter(util.isNotNil), b => getBalanceId(b)),
6452
+ miniMetadatas: lodashEs.keyBy(storage.miniMetadatas.filter(util.isNotNil), m => m.id)
6453
6453
  });
6454
6454
  }
6455
6455
  get storage$() {
@@ -6457,8 +6457,8 @@ class BalancesProvider {
6457
6457
  balances,
6458
6458
  miniMetadatas
6459
6459
  }) => ({
6460
- balances: lodash.values(balances).filter(util.isNotNil),
6461
- miniMetadatas: lodash.values(miniMetadatas).filter(util.isNotNil)
6460
+ balances: lodashEs.values(balances).filter(util.isNotNil),
6461
+ miniMetadatas: lodashEs.values(miniMetadatas).filter(util.isNotNil)
6462
6462
  })));
6463
6463
  }
6464
6464
 
@@ -6469,7 +6469,7 @@ class BalancesProvider {
6469
6469
  return util.getSharedObservable("BalancesProvider.getBalances$", addressesByTokenId, () => {
6470
6470
  return this.cleanupAddressesByTokenId(addressesByTokenId).pipe(rxjs.map(
6471
6471
  // split by network
6472
- addressesByTokenId => lodash.toPairs(addressesByTokenId).reduce((acc, [tokenId, addresses]) => {
6472
+ addressesByTokenId => lodashEs.toPairs(addressesByTokenId).reduce((acc, [tokenId, addresses]) => {
6473
6473
  const networkId = chaindataProvider.parseTokenId(tokenId).networkId;
6474
6474
  if (!acc[networkId]) acc[networkId] = {};
6475
6475
  acc[networkId][tokenId] = addresses;
@@ -6478,7 +6478,7 @@ class BalancesProvider {
6478
6478
  // fetch balances and start a 30s timer to mark the whole subscription live after 30s
6479
6479
  rxjs.combineLatest({
6480
6480
  isStale: rxjs.timer(30_000).pipe(rxjs.map(() => true), rxjs.startWith(false)),
6481
- results: rxjs.combineLatest(lodash.toPairs(addressesByTokenIdByNetworkId).map(([networkId]) => this.getNetworkBalances$(networkId, addressesByTokenIdByNetworkId[networkId])))
6481
+ results: rxjs.combineLatest(lodashEs.toPairs(addressesByTokenIdByNetworkId).map(([networkId]) => this.getNetworkBalances$(networkId, addressesByTokenIdByNetworkId[networkId])))
6482
6482
  })), rxjs.map(
6483
6483
  // combine
6484
6484
  ({
@@ -6495,7 +6495,7 @@ class BalancesProvider {
6495
6495
  })), rxjs.startWith({
6496
6496
  status: "initialising",
6497
6497
  balances: this.getStoredBalances(addressesByTokenId)
6498
- }), rxjs.distinctUntilChanged(lodash.isEqual));
6498
+ }), rxjs.distinctUntilChanged(lodashEs.isEqual));
6499
6499
  });
6500
6500
  }
6501
6501
  fetchBalances(addressesByTokenId) {
@@ -6511,14 +6511,14 @@ class BalancesProvider {
6511
6511
  const tokensMapById$ = this.#chaindataProvider.getTokensMapById$();
6512
6512
  const miniMetadatas$ = this.getNetworkMiniMetadatas$(networkId);
6513
6513
  return rxjs.combineLatest([network$, miniMetadatas$, tokensMapById$]).pipe(rxjs.switchMap(([network, miniMetadatas, tokensMapById]) => {
6514
- const tokensAndAddresses = lodash.toPairs(addressesByTokenId).map(([tokenId, addresses]) => [tokensMapById[tokenId], addresses]);
6514
+ const tokensAndAddresses = lodashEs.toPairs(addressesByTokenId).map(([tokenId, addresses]) => [tokensMapById[tokenId], addresses]);
6515
6515
  return rxjs.combineLatest(BALANCE_MODULES.filter(mod => mod.platform === network?.platform).map(mod => {
6516
6516
  const tokensWithAddresses = tokensAndAddresses.filter(([token]) => token.type === mod.type);
6517
- const moduleAddressesByTokenId = lodash.fromPairs(tokensWithAddresses.map(([token, addresses]) => [token.id, addresses]));
6517
+ const moduleAddressesByTokenId = lodashEs.fromPairs(tokensWithAddresses.map(([token, addresses]) => [token.id, addresses]));
6518
6518
  const miniMetadata = miniMetadatas.find(m => m.source === mod.type);
6519
6519
 
6520
6520
  // all balance ids expected in result set
6521
- const balanceIds = lodash.toPairs(moduleAddressesByTokenId).flatMap(([tokenId, addresses]) => addresses.map(address => getBalanceId({
6521
+ const balanceIds = lodashEs.toPairs(moduleAddressesByTokenId).flatMap(([tokenId, addresses]) => addresses.map(address => getBalanceId({
6522
6522
  tokenId,
6523
6523
  address
6524
6524
  })));
@@ -6531,15 +6531,15 @@ class BalancesProvider {
6531
6531
  const updateStorage = results => {
6532
6532
  if (results.status !== "live") return;
6533
6533
  const storage = this.#storage.getValue();
6534
- const balances = lodash.assign({}, storage.balances,
6534
+ const balances = lodashEs.assign({}, storage.balances,
6535
6535
  // delete all balances expected in the result set. because if they are not present it means they are empty.
6536
- lodash.fromPairs(balanceIds.map(balanceId => [balanceId, undefined])), lodash.keyBy(
6536
+ lodashEs.fromPairs(balanceIds.map(balanceId => [balanceId, undefined])), lodashEs.keyBy(
6537
6537
  // storage balances must have status "cache", because they are used as start value when initialising subsequent subscriptions
6538
6538
  results.balances.map(b => ({
6539
6539
  ...b,
6540
6540
  status: "cache"
6541
6541
  })), b => getBalanceId(b)));
6542
- this.#storage.next(lodash.assign({}, storage, {
6542
+ this.#storage.next(lodashEs.assign({}, storage, {
6543
6543
  balances
6544
6544
  }));
6545
6545
  };
@@ -6609,12 +6609,12 @@ class BalancesProvider {
6609
6609
  rxjs.tap(newMiniMetadatas => {
6610
6610
  if (!newMiniMetadatas.length) return;
6611
6611
  const storage = this.#storage.getValue();
6612
- const miniMetadatas = lodash.assign(
6612
+ const miniMetadatas = lodashEs.assign(
6613
6613
  // keep minimetadatas of other networks
6614
- lodash.keyBy(lodash.values(storage.miniMetadatas).filter(m => m.chainId !== networkId), m => m.id),
6614
+ lodashEs.keyBy(lodashEs.values(storage.miniMetadatas).filter(m => m.chainId !== networkId), m => m.id),
6615
6615
  // add the ones for our network
6616
- lodash.keyBy(newMiniMetadatas, m => m.id));
6617
- this.#storage.next(lodash.assign({}, storage, {
6616
+ lodashEs.keyBy(newMiniMetadatas, m => m.id));
6617
+ this.#storage.next(lodashEs.assign({}, storage, {
6618
6618
  miniMetadatas
6619
6619
  }));
6620
6620
  }));
@@ -6626,13 +6626,13 @@ class BalancesProvider {
6626
6626
  });
6627
6627
  }
6628
6628
  getStoredMiniMetadatas$(networkId, specVersion) {
6629
- return this.storage$.pipe(rxjs.map(storage => storage.miniMetadatas.filter(m => m.chainId === networkId && m.specVersion === specVersion && m.version === chaindataProvider.MINIMETADATA_VERSION)), rxjs.distinctUntilChanged(lodash.isEqual));
6629
+ return this.storage$.pipe(rxjs.map(storage => storage.miniMetadatas.filter(m => m.chainId === networkId && m.specVersion === specVersion && m.version === chaindataProvider.MINIMETADATA_VERSION)), rxjs.distinctUntilChanged(lodashEs.isEqual));
6630
6630
  }
6631
6631
  getDefaultMiniMetadatas$(networkId, specVersion) {
6632
- return this.#chaindataProvider.miniMetadatas$.pipe(rxjs.map(miniMetadatas => miniMetadatas.filter(m => m.chainId === networkId && m.specVersion === specVersion && m.version === chaindataProvider.MINIMETADATA_VERSION)), rxjs.distinctUntilChanged(lodash.isEqual));
6632
+ return this.#chaindataProvider.miniMetadatas$.pipe(rxjs.map(miniMetadatas => miniMetadatas.filter(m => m.chainId === networkId && m.specVersion === specVersion && m.version === chaindataProvider.MINIMETADATA_VERSION)), rxjs.distinctUntilChanged(lodashEs.isEqual));
6633
6633
  }
6634
6634
  getStoredBalances(addressesByToken) {
6635
- const balanceDefs = lodash.toPairs(addressesByToken).flatMap(([tokenId, addresses]) => addresses.map(address => [tokenId, address]));
6635
+ const balanceDefs = lodashEs.toPairs(addressesByToken).flatMap(([tokenId, addresses]) => addresses.map(address => [tokenId, address]));
6636
6636
  return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({
6637
6637
  address,
6638
6638
  tokenId
@@ -6640,7 +6640,7 @@ class BalancesProvider {
6640
6640
  }
6641
6641
  cleanupAddressesByTokenId(addressesByTokenId) {
6642
6642
  return this.#chaindataProvider.getNetworksMapById$().pipe(rxjs.map(networksById => {
6643
- return lodash.fromPairs(lodash.toPairs(addressesByTokenId).map(([tokenId, addresses]) => {
6643
+ return lodashEs.fromPairs(lodashEs.toPairs(addressesByTokenId).map(([tokenId, addresses]) => {
6644
6644
  const networkId = chaindataProvider.parseTokenId(tokenId).networkId;
6645
6645
  const network = networksById[networkId];
6646
6646
  return [tokenId, addresses.filter(address => network && isAddressCompatibleWithNetwork(network, address))];
@@ -2,7 +2,7 @@ import { EvmErc20TokenSchema, parseTokenId, parseEvmErc20TokenId, evmErc20TokenI
2
2
  export { MINIMETADATA_VERSION } from '@talismn/chaindata-provider';
3
3
  import { isEthereumAddress, isNotNil, BigMath, isArrayOf, isBigInt, planckToTokens, isAbortError, getSharedObservable } from '@talismn/util';
4
4
  import { parseAbi, erc20Abi, getContract, ContractFunctionExecutionError, hexToString, erc20Abi_bytes32, encodeFunctionData, withRetry } from 'viem';
5
- import { assign, omit, isEqual, keyBy, keys, uniq, fromPairs, values, toPairs } from 'lodash';
5
+ import { assign, omit, isEqual, keyBy, keys, uniq, fromPairs, values, toPairs } from 'lodash-es';
6
6
  import z from 'zod/v4';
7
7
  import anylogger from 'anylogger';
8
8
  import { of, Observable, distinctUntilChanged, map, timer, switchMap, from, firstValueFrom, combineLatest, BehaviorSubject, startWith, filter, tap } from 'rxjs';
@@ -11,7 +11,7 @@ import { newTokenRates } from '@talismn/token-rates';
11
11
  import BigNumber from 'bignumber.js';
12
12
  import { mergeUint8 } from '@polkadot-api/utils';
13
13
  import { Binary, Enum, AccountId } from 'polkadot-api';
14
- import upperFirst from 'lodash/upperFirst';
14
+ import upperFirst from 'lodash-es/upperFirst';
15
15
  import { u32 } from 'scale-ts';
16
16
  import { Abi } from '@polkadot/api-contract';
17
17
  import { TypeRegistry } from '@polkadot/types';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talismn/balances",
3
- "version": "0.0.0-pr2075-20250710035408",
3
+ "version": "0.0.0-pr2075-20250710052843",
4
4
  "author": "Talisman",
5
5
  "homepage": "https://talisman.xyz",
6
6
  "license": "GPL-3.0-or-later",
@@ -26,7 +26,7 @@
26
26
  "anylogger": "^1.0.11",
27
27
  "bignumber.js": "^9.1.2",
28
28
  "dexie": "^4.0.9",
29
- "lodash": "4.17.21",
29
+ "lodash-es": "4.17.21",
30
30
  "p-queue": "^8.1.0",
31
31
  "pako": "^2.1.0",
32
32
  "polkadot-api": "1.13.1",
@@ -34,13 +34,13 @@
34
34
  "scale-ts": "^1.6.1",
35
35
  "viem": "^2.27.3",
36
36
  "zod": "^3.25.62",
37
- "@talismn/chain-connector": "0.0.0-pr2075-20250710035408",
38
- "@talismn/chain-connector-evm": "0.0.0-pr2075-20250710035408",
39
- "@talismn/chaindata-provider": "0.0.0-pr2075-20250710035408",
40
- "@talismn/sapi": "0.0.0-pr2075-20250710035408",
41
- "@talismn/scale": "0.0.0-pr2075-20250710035408",
42
- "@talismn/token-rates": "0.0.0-pr2075-20250710035408",
43
- "@talismn/util": "0.0.0-pr2075-20250710035408"
37
+ "@talismn/chaindata-provider": "0.0.0-pr2075-20250710052843",
38
+ "@talismn/chain-connector": "0.0.0-pr2075-20250710052843",
39
+ "@talismn/chain-connector-evm": "0.0.0-pr2075-20250710052843",
40
+ "@talismn/scale": "0.0.0-pr2075-20250710052843",
41
+ "@talismn/util": "0.0.0-pr2075-20250710052843",
42
+ "@talismn/sapi": "0.0.0-pr2075-20250710052843",
43
+ "@talismn/token-rates": "0.0.0-pr2075-20250710052843"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@polkadot/api-contract": "16.1.2",
@@ -49,7 +49,7 @@
49
49
  "@polkadot/util-crypto": "13.5.1",
50
50
  "@substrate/txwrapper-core": "7.5.3",
51
51
  "@types/jest": "^29.5.14",
52
- "@types/lodash": "^4.17.12",
52
+ "@types/lodash-es": "^4.17.12",
53
53
  "@types/pako": "^2.0.3",
54
54
  "eslint": "^8.57.1",
55
55
  "jest": "^29.7.0",