@talismn/balances 0.0.0-pr2075-20250711064604 → 0.0.0-pr2075-20250711073805

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.
@@ -20,6 +20,7 @@ export declare class BalancesProvider {
20
20
  fetchBalances(addressesByTokenId: Record<TokenId, Address[]>): Promise<IBalance[]>;
21
21
  private getNetworkBalances$;
22
22
  private getNetworkMiniMetadatas$;
23
+ private getNetworkSpecVersion$;
23
24
  private getMiniMetadatas$;
24
25
  private getStoredMiniMetadatas$;
25
26
  private getDefaultMiniMetadatas$;
@@ -6335,7 +6335,9 @@ class BalancesProvider {
6335
6335
  networkId,
6336
6336
  tokensWithAddresses,
6337
6337
  connector: this.#chainConnectors.evm
6338
- }).pipe(rxjs.map(results => ({
6338
+ }).pipe(rxjs.catchError(() => rxjs.EMPTY),
6339
+ // don't emit, let provider mark balances stale
6340
+ rxjs.map(results => ({
6339
6341
  status: "live",
6340
6342
  // exclude zero balances
6341
6343
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6351,7 +6353,9 @@ class BalancesProvider {
6351
6353
  tokensWithAddresses,
6352
6354
  connector: this.#chainConnectors.substrate,
6353
6355
  miniMetadata: miniMetadata
6354
- }).pipe(rxjs.map(results => ({
6356
+ }).pipe(rxjs.catchError(() => rxjs.EMPTY),
6357
+ // don't emit, let provider mark balances stale
6358
+ rxjs.map(results => ({
6355
6359
  status: "live",
6356
6360
  // exclude zero balances
6357
6361
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6378,7 +6382,20 @@ class BalancesProvider {
6378
6382
  });
6379
6383
  }
6380
6384
  getNetworkMiniMetadatas$(networkId) {
6381
- return this.#chaindataProvider.getNetworkById$(networkId).pipe(rxjs.switchMap(network => chaindataProvider.isNetworkDot(network) && this.#chainConnectors.substrate ? rxjs.from(getSpecVersion(this.#chainConnectors.substrate, networkId)).pipe(rxjs.switchMap(specVersion => this.getMiniMetadatas$(networkId, specVersion))) : rxjs.of([])));
6385
+ return this.#chaindataProvider.getNetworkById$(networkId).pipe(rxjs.switchMap(network => chaindataProvider.isNetworkDot(network) ? this.getNetworkSpecVersion$(networkId).pipe(rxjs.switchMap(specVersion => specVersion === null ? rxjs.of([]) : this.getMiniMetadatas$(networkId, specVersion))) : rxjs.of([])));
6386
+ }
6387
+ getNetworkSpecVersion$(networkId) {
6388
+ return rxjs.from(viem.withRetry(async () => {
6389
+ if (!this.#chainConnectors.substrate) return null;
6390
+ return await getSpecVersion(this.#chainConnectors.substrate, networkId);
6391
+ }, {
6392
+ delay: 2_000
6393
+ })).pipe(rxjs.catchError(() => {
6394
+ log.warn("Failed to fetch spec version for network", {
6395
+ networkId
6396
+ });
6397
+ return rxjs.of(null);
6398
+ }));
6382
6399
  }
6383
6400
  getMiniMetadatas$(networkId, specVersion) {
6384
6401
  const miniMetadataIds = BALANCE_MODULES.filter(mod => mod.platform === "polkadot").map(mod => deriveMiniMetadataId({
@@ -6335,7 +6335,9 @@ class BalancesProvider {
6335
6335
  networkId,
6336
6336
  tokensWithAddresses,
6337
6337
  connector: this.#chainConnectors.evm
6338
- }).pipe(rxjs.map(results => ({
6338
+ }).pipe(rxjs.catchError(() => rxjs.EMPTY),
6339
+ // don't emit, let provider mark balances stale
6340
+ rxjs.map(results => ({
6339
6341
  status: "live",
6340
6342
  // exclude zero balances
6341
6343
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6351,7 +6353,9 @@ class BalancesProvider {
6351
6353
  tokensWithAddresses,
6352
6354
  connector: this.#chainConnectors.substrate,
6353
6355
  miniMetadata: miniMetadata
6354
- }).pipe(rxjs.map(results => ({
6356
+ }).pipe(rxjs.catchError(() => rxjs.EMPTY),
6357
+ // don't emit, let provider mark balances stale
6358
+ rxjs.map(results => ({
6355
6359
  status: "live",
6356
6360
  // exclude zero balances
6357
6361
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6378,7 +6382,20 @@ class BalancesProvider {
6378
6382
  });
6379
6383
  }
6380
6384
  getNetworkMiniMetadatas$(networkId) {
6381
- return this.#chaindataProvider.getNetworkById$(networkId).pipe(rxjs.switchMap(network => chaindataProvider.isNetworkDot(network) && this.#chainConnectors.substrate ? rxjs.from(getSpecVersion(this.#chainConnectors.substrate, networkId)).pipe(rxjs.switchMap(specVersion => this.getMiniMetadatas$(networkId, specVersion))) : rxjs.of([])));
6385
+ return this.#chaindataProvider.getNetworkById$(networkId).pipe(rxjs.switchMap(network => chaindataProvider.isNetworkDot(network) ? this.getNetworkSpecVersion$(networkId).pipe(rxjs.switchMap(specVersion => specVersion === null ? rxjs.of([]) : this.getMiniMetadatas$(networkId, specVersion))) : rxjs.of([])));
6386
+ }
6387
+ getNetworkSpecVersion$(networkId) {
6388
+ return rxjs.from(viem.withRetry(async () => {
6389
+ if (!this.#chainConnectors.substrate) return null;
6390
+ return await getSpecVersion(this.#chainConnectors.substrate, networkId);
6391
+ }, {
6392
+ delay: 2_000
6393
+ })).pipe(rxjs.catchError(() => {
6394
+ log.warn("Failed to fetch spec version for network", {
6395
+ networkId
6396
+ });
6397
+ return rxjs.of(null);
6398
+ }));
6382
6399
  }
6383
6400
  getMiniMetadatas$(networkId, specVersion) {
6384
6401
  const miniMetadataIds = BALANCE_MODULES.filter(mod => mod.platform === "polkadot").map(mod => deriveMiniMetadataId({
@@ -5,7 +5,7 @@ import { parseAbi, erc20Abi, getContract, ContractFunctionExecutionError, hexToS
5
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
- import { of, Observable, distinctUntilChanged, map, timer, switchMap, from, firstValueFrom, combineLatest, BehaviorSubject, shareReplay, startWith, filter, tap } from 'rxjs';
8
+ import { of, Observable, distinctUntilChanged, map, timer, switchMap, from, firstValueFrom, combineLatest, BehaviorSubject, shareReplay, startWith, filter, catchError, EMPTY, tap } from 'rxjs';
9
9
  import { parseMetadataRpc, toHex, unifyMetadata, decAnyMetadata, getDynamicBuilder, getLookupFn, decodeScale, getStorageKeyPrefix, Twox128, compactMetadata, encodeMetadata, papiParse, papiStringify } from '@talismn/scale';
10
10
  import { newTokenRates } from '@talismn/token-rates';
11
11
  import BigNumber from 'bignumber.js';
@@ -6326,7 +6326,9 @@ class BalancesProvider {
6326
6326
  networkId,
6327
6327
  tokensWithAddresses,
6328
6328
  connector: this.#chainConnectors.evm
6329
- }).pipe(map(results => ({
6329
+ }).pipe(catchError(() => EMPTY),
6330
+ // don't emit, let provider mark balances stale
6331
+ map(results => ({
6330
6332
  status: "live",
6331
6333
  // exclude zero balances
6332
6334
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6342,7 +6344,9 @@ class BalancesProvider {
6342
6344
  tokensWithAddresses,
6343
6345
  connector: this.#chainConnectors.substrate,
6344
6346
  miniMetadata: miniMetadata
6345
- }).pipe(map(results => ({
6347
+ }).pipe(catchError(() => EMPTY),
6348
+ // don't emit, let provider mark balances stale
6349
+ map(results => ({
6346
6350
  status: "live",
6347
6351
  // exclude zero balances
6348
6352
  balances: results.success.filter(b => new Balance(b).total.planck > 0n)
@@ -6369,7 +6373,20 @@ class BalancesProvider {
6369
6373
  });
6370
6374
  }
6371
6375
  getNetworkMiniMetadatas$(networkId) {
6372
- return this.#chaindataProvider.getNetworkById$(networkId).pipe(switchMap(network => isNetworkDot(network) && this.#chainConnectors.substrate ? from(getSpecVersion(this.#chainConnectors.substrate, networkId)).pipe(switchMap(specVersion => this.getMiniMetadatas$(networkId, specVersion))) : of([])));
6376
+ return this.#chaindataProvider.getNetworkById$(networkId).pipe(switchMap(network => isNetworkDot(network) ? this.getNetworkSpecVersion$(networkId).pipe(switchMap(specVersion => specVersion === null ? of([]) : this.getMiniMetadatas$(networkId, specVersion))) : of([])));
6377
+ }
6378
+ getNetworkSpecVersion$(networkId) {
6379
+ return from(withRetry(async () => {
6380
+ if (!this.#chainConnectors.substrate) return null;
6381
+ return await getSpecVersion(this.#chainConnectors.substrate, networkId);
6382
+ }, {
6383
+ delay: 2_000
6384
+ })).pipe(catchError(() => {
6385
+ log.warn("Failed to fetch spec version for network", {
6386
+ networkId
6387
+ });
6388
+ return of(null);
6389
+ }));
6373
6390
  }
6374
6391
  getMiniMetadatas$(networkId, specVersion) {
6375
6392
  const miniMetadataIds = BALANCE_MODULES.filter(mod => mod.platform === "polkadot").map(mod => deriveMiniMetadataId({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talismn/balances",
3
- "version": "0.0.0-pr2075-20250711064604",
3
+ "version": "0.0.0-pr2075-20250711073805",
4
4
  "author": "Talisman",
5
5
  "homepage": "https://talisman.xyz",
6
6
  "license": "GPL-3.0-or-later",
@@ -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-20250711064604",
38
- "@talismn/chain-connector-evm": "0.0.0-pr2075-20250711064604",
39
- "@talismn/sapi": "0.0.0-pr2075-20250711064604",
40
- "@talismn/chaindata-provider": "0.0.0-pr2075-20250711064604",
41
- "@talismn/scale": "0.0.0-pr2075-20250711064604",
42
- "@talismn/token-rates": "0.0.0-pr2075-20250711064604",
43
- "@talismn/util": "0.0.0-pr2075-20250711064604"
37
+ "@talismn/chain-connector": "0.0.0-pr2075-20250711073805",
38
+ "@talismn/chain-connector-evm": "0.0.0-pr2075-20250711073805",
39
+ "@talismn/scale": "0.0.0-pr2075-20250711073805",
40
+ "@talismn/sapi": "0.0.0-pr2075-20250711073805",
41
+ "@talismn/chaindata-provider": "0.0.0-pr2075-20250711073805",
42
+ "@talismn/token-rates": "0.0.0-pr2075-20250711073805",
43
+ "@talismn/util": "0.0.0-pr2075-20250711073805"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@polkadot/api-contract": "16.1.2",