@talismn/balances-react 0.0.0-pr611-20230314171819 → 0.0.0-pr611-20230316232708

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.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @talismn/balances-react
2
2
 
3
- ## 0.0.0-pr611-20230314171819
3
+ ## 0.0.0-pr611-20230316232708
4
4
 
5
5
  ### Minor Changes
6
6
 
@@ -8,20 +8,20 @@
8
8
 
9
9
  ### Patch Changes
10
10
 
11
- - 4322025: feat: stale balances and exponential rpc backoff
11
+ - 3068bd6: feat: stale balances and exponential rpc backoff
12
12
  - 6643a4e: fix: tokenRates in @talismn/balances-react
13
13
  - 6643a4e: fix: ported useDbCache related perf fixes to @talismn/balances-react
14
- - Updated dependencies [4322025]
14
+ - Updated dependencies [3068bd6]
15
15
  - Updated dependencies [6643a4e]
16
16
  - Updated dependencies [79f6ccf]
17
17
  - Updated dependencies [6643a4e]
18
- - @talismn/chain-connector@0.0.0-pr611-20230314171819
19
- - @talismn/connection-meta@0.0.0-pr611-20230314171819
20
- - @talismn/balances@0.0.0-pr611-20230314171819
21
- - @talismn/token-rates@0.0.0-pr611-20230314171819
22
- - @talismn/chaindata-provider-extension@0.0.0-pr611-20230314171819
23
- - @talismn/chaindata-provider@0.0.0-pr611-20230314171819
24
- - @talismn/chain-connector-evm@0.0.0-pr611-20230314171819
18
+ - @talismn/chain-connector@0.0.0-pr611-20230316232708
19
+ - @talismn/connection-meta@0.0.0-pr611-20230316232708
20
+ - @talismn/balances@0.0.0-pr611-20230316232708
21
+ - @talismn/token-rates@0.0.0-pr611-20230316232708
22
+ - @talismn/chaindata-provider-extension@0.0.0-pr611-20230316232708
23
+ - @talismn/chaindata-provider@0.0.0-pr611-20230316232708
24
+ - @talismn/chain-connector-evm@0.0.0-pr611-20230316232708
25
25
 
26
26
  ## 0.3.3
27
27
 
@@ -2,6 +2,7 @@ export * from "./useAllAddresses";
2
2
  export * from "./useBalanceModules";
3
3
  export * from "./useBalances";
4
4
  export * from "./useBalancesHydrate";
5
+ export * from "./useBalancesStatus";
5
6
  export * from "./useChainConnectors";
6
7
  export * from "./useChaindata";
7
8
  export * from "./useChains";
@@ -0,0 +1,19 @@
1
+ import { Balances } from "@talismn/balances";
2
+ export type BalancesStatus = {
3
+ status: "live";
4
+ } | {
5
+ status: "fetching";
6
+ } | {
7
+ status: "stale";
8
+ staleChains: string[];
9
+ };
10
+ /**
11
+ * Given a collection of `Balances`, this hook returns a `BalancesStatus` summary for the collection.
12
+ *
13
+ * @param balances The collection of balances to get the status from.
14
+ * @param isLoadingLocks Because the wallet currently fetches locks outside of the balances api, this param can be used to indicate that the locks are still loading, even if the `Balances` collection is not.
15
+ * @returns An instance of `BalancesStatus` which represents the status of the balances collection.
16
+
17
+ */
18
+ export declare const useBalancesStatus: (balances: Balances, isLoadingLocks?: boolean) => BalancesStatus;
19
+ export declare const getStaleChains: (balances: Balances) => string[];
@@ -174,9 +174,9 @@ const consolidateDbCache = (chainsMap, evmNetworksMap, tokensMap, tokenRates, al
174
174
  };
175
175
  const useDbCacheProvider = () => {
176
176
  const chaindataProvider = useChaindata();
177
- const chainList = dexieReactHooks.useLiveQuery(() => chaindataProvider === null || chaindataProvider === void 0 ? void 0 : chaindataProvider.chains(), [chaindataProvider]);
178
- const evmNetworkList = dexieReactHooks.useLiveQuery(() => chaindataProvider === null || chaindataProvider === void 0 ? void 0 : chaindataProvider.evmNetworks(), [chaindataProvider]);
179
- const tokenList = dexieReactHooks.useLiveQuery(() => chaindataProvider === null || chaindataProvider === void 0 ? void 0 : chaindataProvider.tokens(), [chaindataProvider]);
177
+ const chainList = dexieReactHooks.useLiveQuery(() => chaindataProvider?.chains(), [chaindataProvider]);
178
+ const evmNetworkList = dexieReactHooks.useLiveQuery(() => chaindataProvider?.evmNetworks(), [chaindataProvider]);
179
+ const tokenList = dexieReactHooks.useLiveQuery(() => chaindataProvider?.tokens(), [chaindataProvider]);
180
180
  const tokenRates$1 = dexieReactHooks.useLiveQuery(() => tokenRates.db.tokenRates.toArray(), []);
181
181
  const rawBalances = dexieReactHooks.useLiveQuery(() => balances.db.balances.toArray(), []);
182
182
  const [dbData, setDbData] = react.useState(DEFAULT_VALUE);
@@ -200,7 +200,7 @@ const [DbCacheProvider, useDbCache] = provideContext(useDbCacheProvider);
200
200
 
201
201
  var packageJson = {
202
202
  name: "@talismn/balances-react",
203
- version: "0.0.0-pr611-20230314171819",
203
+ version: "0.0.0-pr611-20230316232708",
204
204
  author: "Talisman",
205
205
  homepage: "https://talisman.xyz",
206
206
  license: "UNLICENSED",
@@ -218,7 +218,7 @@ var packageJson = {
218
218
  "/dist"
219
219
  ],
220
220
  engines: {
221
- node: ">=14"
221
+ node: ">=18"
222
222
  },
223
223
  scripts: {
224
224
  test: "jest",
@@ -530,7 +530,7 @@ const subscribeBalances = (tokens, addresses, balanceModules) => {
530
530
  const unsub = balances.balances(balanceModule, addressesByModuleToken, (error, balances$1) => {
531
531
  // log errors
532
532
  if (error) {
533
- if ((error === null || error === void 0 ? void 0 : error.type) === "STALE_RPC_ERROR") return balances.db.balances.where({
533
+ if (error?.type === "STALE_RPC_ERROR") return balances.db.balances.where({
534
534
  source: balanceModule.type,
535
535
  chainId: error.chainId
536
536
  }).filter(balance => {
@@ -658,6 +658,35 @@ function useBalances(addressesByToken) {
658
658
  hydrate), [balances$1, hydrate, balanceModules, addressesByToken]);
659
659
  }
660
660
 
661
+ /**
662
+ * Given a collection of `Balances`, this hook returns a `BalancesStatus` summary for the collection.
663
+ *
664
+ * @param balances The collection of balances to get the status from.
665
+ * @param isLoadingLocks Because the wallet currently fetches locks outside of the balances api, this param can be used to indicate that the locks are still loading, even if the `Balances` collection is not.
666
+ * @returns An instance of `BalancesStatus` which represents the status of the balances collection.
667
+
668
+ */
669
+ const useBalancesStatus = (balances, isLoadingLocks) => react.useMemo(() => {
670
+ // stale
671
+ const staleChains = getStaleChains(balances);
672
+ if (staleChains.length > 0) return {
673
+ status: "stale",
674
+ staleChains
675
+ };
676
+
677
+ // fetching
678
+ const hasCachedBalances = balances.each.some(b => b.status === "cache");
679
+ if (hasCachedBalances || isLoadingLocks) return {
680
+ status: "fetching"
681
+ };
682
+
683
+ // live
684
+ return {
685
+ status: "live"
686
+ };
687
+ }, [balances, isLoadingLocks]);
688
+ const getStaleChains = balances => [...new Set(balances.sorted.filter(b => b.status === "stale").map(b => b.chain?.name ?? b.chainId ?? "Unknown"))];
689
+
661
690
  const BalancesProvider = ({
662
691
  balanceModules,
663
692
  onfinalityApiKey,
@@ -689,11 +718,13 @@ exports.ChaindataProvider = ChaindataProvider;
689
718
  exports.DbCacheProvider = DbCacheProvider;
690
719
  exports.WithTestnetsProvider = WithTestnetsProvider;
691
720
  exports.createMulticastSubscription = createMulticastSubscription;
721
+ exports.getStaleChains = getStaleChains;
692
722
  exports.provideContext = provideContext;
693
723
  exports.useAllAddresses = useAllAddresses;
694
724
  exports.useBalanceModules = useBalanceModules;
695
725
  exports.useBalances = useBalances;
696
726
  exports.useBalancesHydrate = useBalancesHydrate;
727
+ exports.useBalancesStatus = useBalancesStatus;
697
728
  exports.useChain = useChain;
698
729
  exports.useChainConnectors = useChainConnectors;
699
730
  exports.useChaindata = useChaindata;
@@ -174,9 +174,9 @@ const consolidateDbCache = (chainsMap, evmNetworksMap, tokensMap, tokenRates, al
174
174
  };
175
175
  const useDbCacheProvider = () => {
176
176
  const chaindataProvider = useChaindata();
177
- const chainList = dexieReactHooks.useLiveQuery(() => chaindataProvider === null || chaindataProvider === void 0 ? void 0 : chaindataProvider.chains(), [chaindataProvider]);
178
- const evmNetworkList = dexieReactHooks.useLiveQuery(() => chaindataProvider === null || chaindataProvider === void 0 ? void 0 : chaindataProvider.evmNetworks(), [chaindataProvider]);
179
- const tokenList = dexieReactHooks.useLiveQuery(() => chaindataProvider === null || chaindataProvider === void 0 ? void 0 : chaindataProvider.tokens(), [chaindataProvider]);
177
+ const chainList = dexieReactHooks.useLiveQuery(() => chaindataProvider?.chains(), [chaindataProvider]);
178
+ const evmNetworkList = dexieReactHooks.useLiveQuery(() => chaindataProvider?.evmNetworks(), [chaindataProvider]);
179
+ const tokenList = dexieReactHooks.useLiveQuery(() => chaindataProvider?.tokens(), [chaindataProvider]);
180
180
  const tokenRates$1 = dexieReactHooks.useLiveQuery(() => tokenRates.db.tokenRates.toArray(), []);
181
181
  const rawBalances = dexieReactHooks.useLiveQuery(() => balances.db.balances.toArray(), []);
182
182
  const [dbData, setDbData] = react.useState(DEFAULT_VALUE);
@@ -200,7 +200,7 @@ const [DbCacheProvider, useDbCache] = provideContext(useDbCacheProvider);
200
200
 
201
201
  var packageJson = {
202
202
  name: "@talismn/balances-react",
203
- version: "0.0.0-pr611-20230314171819",
203
+ version: "0.0.0-pr611-20230316232708",
204
204
  author: "Talisman",
205
205
  homepage: "https://talisman.xyz",
206
206
  license: "UNLICENSED",
@@ -218,7 +218,7 @@ var packageJson = {
218
218
  "/dist"
219
219
  ],
220
220
  engines: {
221
- node: ">=14"
221
+ node: ">=18"
222
222
  },
223
223
  scripts: {
224
224
  test: "jest",
@@ -530,7 +530,7 @@ const subscribeBalances = (tokens, addresses, balanceModules) => {
530
530
  const unsub = balances.balances(balanceModule, addressesByModuleToken, (error, balances$1) => {
531
531
  // log errors
532
532
  if (error) {
533
- if ((error === null || error === void 0 ? void 0 : error.type) === "STALE_RPC_ERROR") return balances.db.balances.where({
533
+ if (error?.type === "STALE_RPC_ERROR") return balances.db.balances.where({
534
534
  source: balanceModule.type,
535
535
  chainId: error.chainId
536
536
  }).filter(balance => {
@@ -658,6 +658,35 @@ function useBalances(addressesByToken) {
658
658
  hydrate), [balances$1, hydrate, balanceModules, addressesByToken]);
659
659
  }
660
660
 
661
+ /**
662
+ * Given a collection of `Balances`, this hook returns a `BalancesStatus` summary for the collection.
663
+ *
664
+ * @param balances The collection of balances to get the status from.
665
+ * @param isLoadingLocks Because the wallet currently fetches locks outside of the balances api, this param can be used to indicate that the locks are still loading, even if the `Balances` collection is not.
666
+ * @returns An instance of `BalancesStatus` which represents the status of the balances collection.
667
+
668
+ */
669
+ const useBalancesStatus = (balances, isLoadingLocks) => react.useMemo(() => {
670
+ // stale
671
+ const staleChains = getStaleChains(balances);
672
+ if (staleChains.length > 0) return {
673
+ status: "stale",
674
+ staleChains
675
+ };
676
+
677
+ // fetching
678
+ const hasCachedBalances = balances.each.some(b => b.status === "cache");
679
+ if (hasCachedBalances || isLoadingLocks) return {
680
+ status: "fetching"
681
+ };
682
+
683
+ // live
684
+ return {
685
+ status: "live"
686
+ };
687
+ }, [balances, isLoadingLocks]);
688
+ const getStaleChains = balances => [...new Set(balances.sorted.filter(b => b.status === "stale").map(b => b.chain?.name ?? b.chainId ?? "Unknown"))];
689
+
661
690
  const BalancesProvider = ({
662
691
  balanceModules,
663
692
  onfinalityApiKey,
@@ -689,11 +718,13 @@ exports.ChaindataProvider = ChaindataProvider;
689
718
  exports.DbCacheProvider = DbCacheProvider;
690
719
  exports.WithTestnetsProvider = WithTestnetsProvider;
691
720
  exports.createMulticastSubscription = createMulticastSubscription;
721
+ exports.getStaleChains = getStaleChains;
692
722
  exports.provideContext = provideContext;
693
723
  exports.useAllAddresses = useAllAddresses;
694
724
  exports.useBalanceModules = useBalanceModules;
695
725
  exports.useBalances = useBalances;
696
726
  exports.useBalancesHydrate = useBalancesHydrate;
727
+ exports.useBalancesStatus = useBalancesStatus;
697
728
  exports.useChain = useChain;
698
729
  exports.useChainConnectors = useChainConnectors;
699
730
  exports.useChaindata = useChaindata;
@@ -165,9 +165,9 @@ const consolidateDbCache = (chainsMap, evmNetworksMap, tokensMap, tokenRates, al
165
165
  };
166
166
  const useDbCacheProvider = () => {
167
167
  const chaindataProvider = useChaindata();
168
- const chainList = useLiveQuery(() => chaindataProvider === null || chaindataProvider === void 0 ? void 0 : chaindataProvider.chains(), [chaindataProvider]);
169
- const evmNetworkList = useLiveQuery(() => chaindataProvider === null || chaindataProvider === void 0 ? void 0 : chaindataProvider.evmNetworks(), [chaindataProvider]);
170
- const tokenList = useLiveQuery(() => chaindataProvider === null || chaindataProvider === void 0 ? void 0 : chaindataProvider.tokens(), [chaindataProvider]);
168
+ const chainList = useLiveQuery(() => chaindataProvider?.chains(), [chaindataProvider]);
169
+ const evmNetworkList = useLiveQuery(() => chaindataProvider?.evmNetworks(), [chaindataProvider]);
170
+ const tokenList = useLiveQuery(() => chaindataProvider?.tokens(), [chaindataProvider]);
171
171
  const tokenRates = useLiveQuery(() => db.tokenRates.toArray(), []);
172
172
  const rawBalances = useLiveQuery(() => db$1.balances.toArray(), []);
173
173
  const [dbData, setDbData] = useState(DEFAULT_VALUE);
@@ -191,7 +191,7 @@ const [DbCacheProvider, useDbCache] = provideContext(useDbCacheProvider);
191
191
 
192
192
  var packageJson = {
193
193
  name: "@talismn/balances-react",
194
- version: "0.0.0-pr611-20230314171819",
194
+ version: "0.0.0-pr611-20230316232708",
195
195
  author: "Talisman",
196
196
  homepage: "https://talisman.xyz",
197
197
  license: "UNLICENSED",
@@ -209,7 +209,7 @@ var packageJson = {
209
209
  "/dist"
210
210
  ],
211
211
  engines: {
212
- node: ">=14"
212
+ node: ">=18"
213
213
  },
214
214
  scripts: {
215
215
  test: "jest",
@@ -521,7 +521,7 @@ const subscribeBalances = (tokens, addresses, balanceModules) => {
521
521
  const unsub = balances(balanceModule, addressesByModuleToken, (error, balances) => {
522
522
  // log errors
523
523
  if (error) {
524
- if ((error === null || error === void 0 ? void 0 : error.type) === "STALE_RPC_ERROR") return db$1.balances.where({
524
+ if (error?.type === "STALE_RPC_ERROR") return db$1.balances.where({
525
525
  source: balanceModule.type,
526
526
  chainId: error.chainId
527
527
  }).filter(balance => {
@@ -649,6 +649,35 @@ function useBalances(addressesByToken) {
649
649
  hydrate), [balances, hydrate, balanceModules, addressesByToken]);
650
650
  }
651
651
 
652
+ /**
653
+ * Given a collection of `Balances`, this hook returns a `BalancesStatus` summary for the collection.
654
+ *
655
+ * @param balances The collection of balances to get the status from.
656
+ * @param isLoadingLocks Because the wallet currently fetches locks outside of the balances api, this param can be used to indicate that the locks are still loading, even if the `Balances` collection is not.
657
+ * @returns An instance of `BalancesStatus` which represents the status of the balances collection.
658
+
659
+ */
660
+ const useBalancesStatus = (balances, isLoadingLocks) => useMemo(() => {
661
+ // stale
662
+ const staleChains = getStaleChains(balances);
663
+ if (staleChains.length > 0) return {
664
+ status: "stale",
665
+ staleChains
666
+ };
667
+
668
+ // fetching
669
+ const hasCachedBalances = balances.each.some(b => b.status === "cache");
670
+ if (hasCachedBalances || isLoadingLocks) return {
671
+ status: "fetching"
672
+ };
673
+
674
+ // live
675
+ return {
676
+ status: "live"
677
+ };
678
+ }, [balances, isLoadingLocks]);
679
+ const getStaleChains = balances => [...new Set(balances.sorted.filter(b => b.status === "stale").map(b => b.chain?.name ?? b.chainId ?? "Unknown"))];
680
+
652
681
  const BalancesProvider = ({
653
682
  balanceModules,
654
683
  onfinalityApiKey,
@@ -672,4 +701,4 @@ const BalancesProvider = ({
672
701
  })
673
702
  });
674
703
 
675
- export { AllAddressesProvider, BalanceModulesProvider, BalancesProvider, ChainConnectorsProvider, ChaindataProvider, DbCacheProvider, WithTestnetsProvider, createMulticastSubscription, provideContext, useAllAddresses, useBalanceModules, useBalances, useBalancesHydrate, useChain, useChainConnectors, useChaindata, useChains, useDbCache, useDbCacheBalancesSubscription, useDbCacheSubscription, useDbCacheTokenRatesSubscription, useEvmNetwork, useEvmNetworks, useMulticastSubscription, useToken, useTokenRate, useTokenRates, useTokens, useWithTestnets };
704
+ export { AllAddressesProvider, BalanceModulesProvider, BalancesProvider, ChainConnectorsProvider, ChaindataProvider, DbCacheProvider, WithTestnetsProvider, createMulticastSubscription, getStaleChains, provideContext, useAllAddresses, useBalanceModules, useBalances, useBalancesHydrate, useBalancesStatus, useChain, useChainConnectors, useChaindata, useChains, useDbCache, useDbCacheBalancesSubscription, useDbCacheSubscription, useDbCacheTokenRatesSubscription, useEvmNetwork, useEvmNetworks, useMulticastSubscription, useToken, useTokenRate, useTokenRates, useTokens, useWithTestnets };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talismn/balances-react",
3
- "version": "0.0.0-pr611-20230314171819",
3
+ "version": "0.0.0-pr611-20230316232708",
4
4
  "author": "Talisman",
5
5
  "homepage": "https://talisman.xyz",
6
6
  "license": "UNLICENSED",
@@ -18,7 +18,7 @@
18
18
  "/dist"
19
19
  ],
20
20
  "engines": {
21
- "node": ">=14"
21
+ "node": ">=18"
22
22
  },
23
23
  "scripts": {
24
24
  "test": "jest",
@@ -26,13 +26,13 @@
26
26
  "clean": "rm -rf dist && rm -rf .turbo rm -rf node_modules"
27
27
  },
28
28
  "dependencies": {
29
- "@talismn/balances": "^0.0.0-pr611-20230314171819",
30
- "@talismn/chain-connector": "^0.0.0-pr611-20230314171819",
31
- "@talismn/chain-connector-evm": "^0.0.0-pr611-20230314171819",
32
- "@talismn/chaindata-provider": "^0.0.0-pr611-20230314171819",
33
- "@talismn/chaindata-provider-extension": "^0.0.0-pr611-20230314171819",
34
- "@talismn/connection-meta": "^0.0.0-pr611-20230314171819",
35
- "@talismn/token-rates": "^0.0.0-pr611-20230314171819",
29
+ "@talismn/balances": "^0.0.0-pr611-20230316232708",
30
+ "@talismn/chain-connector": "^0.0.0-pr611-20230316232708",
31
+ "@talismn/chain-connector-evm": "^0.0.0-pr611-20230316232708",
32
+ "@talismn/chaindata-provider": "^0.0.0-pr611-20230316232708",
33
+ "@talismn/chaindata-provider-extension": "^0.0.0-pr611-20230316232708",
34
+ "@talismn/connection-meta": "^0.0.0-pr611-20230316232708",
35
+ "@talismn/token-rates": "^0.0.0-pr611-20230316232708",
36
36
  "anylogger": "^1.0.11",
37
37
  "blueimp-md5": "2.19.0",
38
38
  "dexie": "^3.2.3",