@talismn/balances-react 1.0.2 → 1.0.3
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/dist/declarations/src/atoms/chaindata.d.ts +156 -0
- package/dist/declarations/src/atoms/chaindataProvider.d.ts +1 -0
- package/dist/declarations/src/atoms/tokenRates.d.ts +1 -3
- package/dist/declarations/src/hooks/useChaindata.d.ts +208 -0
- package/dist/declarations/src/hooks/useTokenRates.d.ts +1 -3
- package/dist/talismn-balances-react.cjs.dev.js +30 -43
- package/dist/talismn-balances-react.cjs.prod.js +30 -43
- package/dist/talismn-balances-react.esm.js +33 -47
- package/package.json +7 -10
- package/dist/declarations/src/util/dexieToRxjs.d.ts +0 -6
@@ -92,6 +92,31 @@ export declare const chaindataAtom: import("jotai").Atom<{
|
|
92
92
|
"evm-erc20"?: undefined;
|
93
93
|
"evm-uniswapv2"?: undefined;
|
94
94
|
} | undefined;
|
95
|
+
} | {
|
96
|
+
id: string;
|
97
|
+
name: string;
|
98
|
+
nativeTokenId: string;
|
99
|
+
nativeCurrency: {
|
100
|
+
decimals: number;
|
101
|
+
symbol: string;
|
102
|
+
name: string;
|
103
|
+
coingeckoId?: string | undefined;
|
104
|
+
mirrorOf?: string | undefined;
|
105
|
+
logo?: string | undefined;
|
106
|
+
};
|
107
|
+
blockExplorerUrls: string[];
|
108
|
+
platform: "solana";
|
109
|
+
genesisHash: string;
|
110
|
+
rpcs: string[];
|
111
|
+
isTestnet?: boolean | undefined;
|
112
|
+
isDefault?: boolean | undefined;
|
113
|
+
forceScan?: boolean | undefined;
|
114
|
+
logo?: string | undefined;
|
115
|
+
themeColor?: string | undefined;
|
116
|
+
balancesConfig?: {
|
117
|
+
"sol-native"?: undefined;
|
118
|
+
"sol-spl"?: undefined;
|
119
|
+
} | undefined;
|
95
120
|
})[];
|
96
121
|
tokens: ({
|
97
122
|
id: string;
|
@@ -237,6 +262,33 @@ export declare const chaindataAtom: import("jotai").Atom<{
|
|
237
262
|
coingeckoId?: string | undefined;
|
238
263
|
noDiscovery?: boolean | undefined;
|
239
264
|
mirrorOf?: string | undefined;
|
265
|
+
} | {
|
266
|
+
id: string;
|
267
|
+
networkId: string;
|
268
|
+
decimals: number;
|
269
|
+
symbol: string;
|
270
|
+
type: "sol-native";
|
271
|
+
platform: "solana";
|
272
|
+
isDefault?: boolean | undefined;
|
273
|
+
name?: string | undefined;
|
274
|
+
logo?: string | undefined;
|
275
|
+
coingeckoId?: string | undefined;
|
276
|
+
noDiscovery?: boolean | undefined;
|
277
|
+
mirrorOf?: string | undefined;
|
278
|
+
} | {
|
279
|
+
id: string;
|
280
|
+
networkId: string;
|
281
|
+
decimals: number;
|
282
|
+
symbol: string;
|
283
|
+
type: "sol-spl";
|
284
|
+
platform: "solana";
|
285
|
+
mintAddress: string;
|
286
|
+
isDefault?: boolean | undefined;
|
287
|
+
name?: string | undefined;
|
288
|
+
logo?: string | undefined;
|
289
|
+
coingeckoId?: string | undefined;
|
290
|
+
noDiscovery?: boolean | undefined;
|
291
|
+
mirrorOf?: string | undefined;
|
240
292
|
})[];
|
241
293
|
} | Promise<{
|
242
294
|
networks: ({
|
@@ -332,6 +384,31 @@ export declare const chaindataAtom: import("jotai").Atom<{
|
|
332
384
|
"evm-erc20"?: undefined;
|
333
385
|
"evm-uniswapv2"?: undefined;
|
334
386
|
} | undefined;
|
387
|
+
} | {
|
388
|
+
id: string;
|
389
|
+
name: string;
|
390
|
+
nativeTokenId: string;
|
391
|
+
nativeCurrency: {
|
392
|
+
decimals: number;
|
393
|
+
symbol: string;
|
394
|
+
name: string;
|
395
|
+
coingeckoId?: string | undefined;
|
396
|
+
mirrorOf?: string | undefined;
|
397
|
+
logo?: string | undefined;
|
398
|
+
};
|
399
|
+
blockExplorerUrls: string[];
|
400
|
+
platform: "solana";
|
401
|
+
genesisHash: string;
|
402
|
+
rpcs: string[];
|
403
|
+
isTestnet?: boolean | undefined;
|
404
|
+
isDefault?: boolean | undefined;
|
405
|
+
forceScan?: boolean | undefined;
|
406
|
+
logo?: string | undefined;
|
407
|
+
themeColor?: string | undefined;
|
408
|
+
balancesConfig?: {
|
409
|
+
"sol-native"?: undefined;
|
410
|
+
"sol-spl"?: undefined;
|
411
|
+
} | undefined;
|
335
412
|
})[];
|
336
413
|
tokens: ({
|
337
414
|
id: string;
|
@@ -477,6 +554,33 @@ export declare const chaindataAtom: import("jotai").Atom<{
|
|
477
554
|
coingeckoId?: string | undefined;
|
478
555
|
noDiscovery?: boolean | undefined;
|
479
556
|
mirrorOf?: string | undefined;
|
557
|
+
} | {
|
558
|
+
id: string;
|
559
|
+
networkId: string;
|
560
|
+
decimals: number;
|
561
|
+
symbol: string;
|
562
|
+
type: "sol-native";
|
563
|
+
platform: "solana";
|
564
|
+
isDefault?: boolean | undefined;
|
565
|
+
name?: string | undefined;
|
566
|
+
logo?: string | undefined;
|
567
|
+
coingeckoId?: string | undefined;
|
568
|
+
noDiscovery?: boolean | undefined;
|
569
|
+
mirrorOf?: string | undefined;
|
570
|
+
} | {
|
571
|
+
id: string;
|
572
|
+
networkId: string;
|
573
|
+
decimals: number;
|
574
|
+
symbol: string;
|
575
|
+
type: "sol-spl";
|
576
|
+
platform: "solana";
|
577
|
+
mintAddress: string;
|
578
|
+
isDefault?: boolean | undefined;
|
579
|
+
name?: string | undefined;
|
580
|
+
logo?: string | undefined;
|
581
|
+
coingeckoId?: string | undefined;
|
582
|
+
noDiscovery?: boolean | undefined;
|
583
|
+
mirrorOf?: string | undefined;
|
480
584
|
})[];
|
481
585
|
}>>;
|
482
586
|
export declare const tokensAtom: import("jotai").Atom<Promise<({
|
@@ -623,6 +727,33 @@ export declare const tokensAtom: import("jotai").Atom<Promise<({
|
|
623
727
|
coingeckoId?: string | undefined;
|
624
728
|
noDiscovery?: boolean | undefined;
|
625
729
|
mirrorOf?: string | undefined;
|
730
|
+
} | {
|
731
|
+
id: string;
|
732
|
+
networkId: string;
|
733
|
+
decimals: number;
|
734
|
+
symbol: string;
|
735
|
+
type: "sol-native";
|
736
|
+
platform: "solana";
|
737
|
+
isDefault?: boolean | undefined;
|
738
|
+
name?: string | undefined;
|
739
|
+
logo?: string | undefined;
|
740
|
+
coingeckoId?: string | undefined;
|
741
|
+
noDiscovery?: boolean | undefined;
|
742
|
+
mirrorOf?: string | undefined;
|
743
|
+
} | {
|
744
|
+
id: string;
|
745
|
+
networkId: string;
|
746
|
+
decimals: number;
|
747
|
+
symbol: string;
|
748
|
+
type: "sol-spl";
|
749
|
+
platform: "solana";
|
750
|
+
mintAddress: string;
|
751
|
+
isDefault?: boolean | undefined;
|
752
|
+
name?: string | undefined;
|
753
|
+
logo?: string | undefined;
|
754
|
+
coingeckoId?: string | undefined;
|
755
|
+
noDiscovery?: boolean | undefined;
|
756
|
+
mirrorOf?: string | undefined;
|
626
757
|
})[]>>;
|
627
758
|
export declare const networksAtom: import("jotai").Atom<Promise<({
|
628
759
|
id: string;
|
@@ -717,4 +848,29 @@ export declare const networksAtom: import("jotai").Atom<Promise<({
|
|
717
848
|
"evm-erc20"?: undefined;
|
718
849
|
"evm-uniswapv2"?: undefined;
|
719
850
|
} | undefined;
|
851
|
+
} | {
|
852
|
+
id: string;
|
853
|
+
name: string;
|
854
|
+
nativeTokenId: string;
|
855
|
+
nativeCurrency: {
|
856
|
+
decimals: number;
|
857
|
+
symbol: string;
|
858
|
+
name: string;
|
859
|
+
coingeckoId?: string | undefined;
|
860
|
+
mirrorOf?: string | undefined;
|
861
|
+
logo?: string | undefined;
|
862
|
+
};
|
863
|
+
blockExplorerUrls: string[];
|
864
|
+
platform: "solana";
|
865
|
+
genesisHash: string;
|
866
|
+
rpcs: string[];
|
867
|
+
isTestnet?: boolean | undefined;
|
868
|
+
isDefault?: boolean | undefined;
|
869
|
+
forceScan?: boolean | undefined;
|
870
|
+
logo?: string | undefined;
|
871
|
+
themeColor?: string | undefined;
|
872
|
+
balancesConfig?: {
|
873
|
+
"sol-native"?: undefined;
|
874
|
+
"sol-spl"?: undefined;
|
875
|
+
} | undefined;
|
720
876
|
})[]>>;
|
@@ -94,6 +94,31 @@ export declare const useChaindata: () => {
|
|
94
94
|
"evm-erc20"?: undefined;
|
95
95
|
"evm-uniswapv2"?: undefined;
|
96
96
|
} | undefined;
|
97
|
+
} | {
|
98
|
+
id: string;
|
99
|
+
name: string;
|
100
|
+
nativeTokenId: string;
|
101
|
+
nativeCurrency: {
|
102
|
+
decimals: number;
|
103
|
+
symbol: string;
|
104
|
+
name: string;
|
105
|
+
coingeckoId?: string | undefined;
|
106
|
+
mirrorOf?: string | undefined;
|
107
|
+
logo?: string | undefined;
|
108
|
+
};
|
109
|
+
blockExplorerUrls: string[];
|
110
|
+
platform: "solana";
|
111
|
+
genesisHash: string;
|
112
|
+
rpcs: string[];
|
113
|
+
isTestnet?: boolean | undefined;
|
114
|
+
isDefault?: boolean | undefined;
|
115
|
+
forceScan?: boolean | undefined;
|
116
|
+
logo?: string | undefined;
|
117
|
+
themeColor?: string | undefined;
|
118
|
+
balancesConfig?: {
|
119
|
+
"sol-native"?: undefined;
|
120
|
+
"sol-spl"?: undefined;
|
121
|
+
} | undefined;
|
97
122
|
})[];
|
98
123
|
tokens: ({
|
99
124
|
id: string;
|
@@ -239,6 +264,33 @@ export declare const useChaindata: () => {
|
|
239
264
|
coingeckoId?: string | undefined;
|
240
265
|
noDiscovery?: boolean | undefined;
|
241
266
|
mirrorOf?: string | undefined;
|
267
|
+
} | {
|
268
|
+
id: string;
|
269
|
+
networkId: string;
|
270
|
+
decimals: number;
|
271
|
+
symbol: string;
|
272
|
+
type: "sol-native";
|
273
|
+
platform: "solana";
|
274
|
+
isDefault?: boolean | undefined;
|
275
|
+
name?: string | undefined;
|
276
|
+
logo?: string | undefined;
|
277
|
+
coingeckoId?: string | undefined;
|
278
|
+
noDiscovery?: boolean | undefined;
|
279
|
+
mirrorOf?: string | undefined;
|
280
|
+
} | {
|
281
|
+
id: string;
|
282
|
+
networkId: string;
|
283
|
+
decimals: number;
|
284
|
+
symbol: string;
|
285
|
+
type: "sol-spl";
|
286
|
+
platform: "solana";
|
287
|
+
mintAddress: string;
|
288
|
+
isDefault?: boolean | undefined;
|
289
|
+
name?: string | undefined;
|
290
|
+
logo?: string | undefined;
|
291
|
+
coingeckoId?: string | undefined;
|
292
|
+
noDiscovery?: boolean | undefined;
|
293
|
+
mirrorOf?: string | undefined;
|
242
294
|
})[];
|
243
295
|
};
|
244
296
|
export declare const useNetworks: () => ({
|
@@ -334,6 +386,31 @@ export declare const useNetworks: () => ({
|
|
334
386
|
"evm-erc20"?: undefined;
|
335
387
|
"evm-uniswapv2"?: undefined;
|
336
388
|
} | undefined;
|
389
|
+
} | {
|
390
|
+
id: string;
|
391
|
+
name: string;
|
392
|
+
nativeTokenId: string;
|
393
|
+
nativeCurrency: {
|
394
|
+
decimals: number;
|
395
|
+
symbol: string;
|
396
|
+
name: string;
|
397
|
+
coingeckoId?: string | undefined;
|
398
|
+
mirrorOf?: string | undefined;
|
399
|
+
logo?: string | undefined;
|
400
|
+
};
|
401
|
+
blockExplorerUrls: string[];
|
402
|
+
platform: "solana";
|
403
|
+
genesisHash: string;
|
404
|
+
rpcs: string[];
|
405
|
+
isTestnet?: boolean | undefined;
|
406
|
+
isDefault?: boolean | undefined;
|
407
|
+
forceScan?: boolean | undefined;
|
408
|
+
logo?: string | undefined;
|
409
|
+
themeColor?: string | undefined;
|
410
|
+
balancesConfig?: {
|
411
|
+
"sol-native"?: undefined;
|
412
|
+
"sol-spl"?: undefined;
|
413
|
+
} | undefined;
|
337
414
|
})[];
|
338
415
|
export declare const useNetworksById: () => import("lodash").Dictionary<{
|
339
416
|
id: string;
|
@@ -428,6 +505,31 @@ export declare const useNetworksById: () => import("lodash").Dictionary<{
|
|
428
505
|
"evm-erc20"?: undefined;
|
429
506
|
"evm-uniswapv2"?: undefined;
|
430
507
|
} | undefined;
|
508
|
+
} | {
|
509
|
+
id: string;
|
510
|
+
name: string;
|
511
|
+
nativeTokenId: string;
|
512
|
+
nativeCurrency: {
|
513
|
+
decimals: number;
|
514
|
+
symbol: string;
|
515
|
+
name: string;
|
516
|
+
coingeckoId?: string | undefined;
|
517
|
+
mirrorOf?: string | undefined;
|
518
|
+
logo?: string | undefined;
|
519
|
+
};
|
520
|
+
blockExplorerUrls: string[];
|
521
|
+
platform: "solana";
|
522
|
+
genesisHash: string;
|
523
|
+
rpcs: string[];
|
524
|
+
isTestnet?: boolean | undefined;
|
525
|
+
isDefault?: boolean | undefined;
|
526
|
+
forceScan?: boolean | undefined;
|
527
|
+
logo?: string | undefined;
|
528
|
+
themeColor?: string | undefined;
|
529
|
+
balancesConfig?: {
|
530
|
+
"sol-native"?: undefined;
|
531
|
+
"sol-spl"?: undefined;
|
532
|
+
} | undefined;
|
431
533
|
}>;
|
432
534
|
export declare const useNetwork: (networkId?: NetworkId) => {
|
433
535
|
id: string;
|
@@ -522,6 +624,31 @@ export declare const useNetwork: (networkId?: NetworkId) => {
|
|
522
624
|
"evm-erc20"?: undefined;
|
523
625
|
"evm-uniswapv2"?: undefined;
|
524
626
|
} | undefined;
|
627
|
+
} | {
|
628
|
+
id: string;
|
629
|
+
name: string;
|
630
|
+
nativeTokenId: string;
|
631
|
+
nativeCurrency: {
|
632
|
+
decimals: number;
|
633
|
+
symbol: string;
|
634
|
+
name: string;
|
635
|
+
coingeckoId?: string | undefined;
|
636
|
+
mirrorOf?: string | undefined;
|
637
|
+
logo?: string | undefined;
|
638
|
+
};
|
639
|
+
blockExplorerUrls: string[];
|
640
|
+
platform: "solana";
|
641
|
+
genesisHash: string;
|
642
|
+
rpcs: string[];
|
643
|
+
isTestnet?: boolean | undefined;
|
644
|
+
isDefault?: boolean | undefined;
|
645
|
+
forceScan?: boolean | undefined;
|
646
|
+
logo?: string | undefined;
|
647
|
+
themeColor?: string | undefined;
|
648
|
+
balancesConfig?: {
|
649
|
+
"sol-native"?: undefined;
|
650
|
+
"sol-spl"?: undefined;
|
651
|
+
} | undefined;
|
525
652
|
};
|
526
653
|
export declare const useTokens: () => ({
|
527
654
|
id: string;
|
@@ -667,6 +794,33 @@ export declare const useTokens: () => ({
|
|
667
794
|
coingeckoId?: string | undefined;
|
668
795
|
noDiscovery?: boolean | undefined;
|
669
796
|
mirrorOf?: string | undefined;
|
797
|
+
} | {
|
798
|
+
id: string;
|
799
|
+
networkId: string;
|
800
|
+
decimals: number;
|
801
|
+
symbol: string;
|
802
|
+
type: "sol-native";
|
803
|
+
platform: "solana";
|
804
|
+
isDefault?: boolean | undefined;
|
805
|
+
name?: string | undefined;
|
806
|
+
logo?: string | undefined;
|
807
|
+
coingeckoId?: string | undefined;
|
808
|
+
noDiscovery?: boolean | undefined;
|
809
|
+
mirrorOf?: string | undefined;
|
810
|
+
} | {
|
811
|
+
id: string;
|
812
|
+
networkId: string;
|
813
|
+
decimals: number;
|
814
|
+
symbol: string;
|
815
|
+
type: "sol-spl";
|
816
|
+
platform: "solana";
|
817
|
+
mintAddress: string;
|
818
|
+
isDefault?: boolean | undefined;
|
819
|
+
name?: string | undefined;
|
820
|
+
logo?: string | undefined;
|
821
|
+
coingeckoId?: string | undefined;
|
822
|
+
noDiscovery?: boolean | undefined;
|
823
|
+
mirrorOf?: string | undefined;
|
670
824
|
})[];
|
671
825
|
export declare const useTokensById: () => import("lodash").Dictionary<{
|
672
826
|
id: string;
|
@@ -812,6 +966,33 @@ export declare const useTokensById: () => import("lodash").Dictionary<{
|
|
812
966
|
coingeckoId?: string | undefined;
|
813
967
|
noDiscovery?: boolean | undefined;
|
814
968
|
mirrorOf?: string | undefined;
|
969
|
+
} | {
|
970
|
+
id: string;
|
971
|
+
networkId: string;
|
972
|
+
decimals: number;
|
973
|
+
symbol: string;
|
974
|
+
type: "sol-native";
|
975
|
+
platform: "solana";
|
976
|
+
isDefault?: boolean | undefined;
|
977
|
+
name?: string | undefined;
|
978
|
+
logo?: string | undefined;
|
979
|
+
coingeckoId?: string | undefined;
|
980
|
+
noDiscovery?: boolean | undefined;
|
981
|
+
mirrorOf?: string | undefined;
|
982
|
+
} | {
|
983
|
+
id: string;
|
984
|
+
networkId: string;
|
985
|
+
decimals: number;
|
986
|
+
symbol: string;
|
987
|
+
type: "sol-spl";
|
988
|
+
platform: "solana";
|
989
|
+
mintAddress: string;
|
990
|
+
isDefault?: boolean | undefined;
|
991
|
+
name?: string | undefined;
|
992
|
+
logo?: string | undefined;
|
993
|
+
coingeckoId?: string | undefined;
|
994
|
+
noDiscovery?: boolean | undefined;
|
995
|
+
mirrorOf?: string | undefined;
|
815
996
|
}>;
|
816
997
|
export declare const useToken: (tokenId?: TokenId) => {
|
817
998
|
id: string;
|
@@ -957,4 +1138,31 @@ export declare const useToken: (tokenId?: TokenId) => {
|
|
957
1138
|
coingeckoId?: string | undefined;
|
958
1139
|
noDiscovery?: boolean | undefined;
|
959
1140
|
mirrorOf?: string | undefined;
|
1141
|
+
} | {
|
1142
|
+
id: string;
|
1143
|
+
networkId: string;
|
1144
|
+
decimals: number;
|
1145
|
+
symbol: string;
|
1146
|
+
type: "sol-native";
|
1147
|
+
platform: "solana";
|
1148
|
+
isDefault?: boolean | undefined;
|
1149
|
+
name?: string | undefined;
|
1150
|
+
logo?: string | undefined;
|
1151
|
+
coingeckoId?: string | undefined;
|
1152
|
+
noDiscovery?: boolean | undefined;
|
1153
|
+
mirrorOf?: string | undefined;
|
1154
|
+
} | {
|
1155
|
+
id: string;
|
1156
|
+
networkId: string;
|
1157
|
+
decimals: number;
|
1158
|
+
symbol: string;
|
1159
|
+
type: "sol-spl";
|
1160
|
+
platform: "solana";
|
1161
|
+
mintAddress: string;
|
1162
|
+
isDefault?: boolean | undefined;
|
1163
|
+
name?: string | undefined;
|
1164
|
+
logo?: string | undefined;
|
1165
|
+
coingeckoId?: string | undefined;
|
1166
|
+
noDiscovery?: boolean | undefined;
|
1167
|
+
mirrorOf?: string | undefined;
|
960
1168
|
};
|
@@ -1,5 +1,3 @@
|
|
1
1
|
import { TokenId } from "@talismn/chaindata-provider";
|
2
|
-
export declare const useTokenRates: () =>
|
3
|
-
[k: string]: import("@talismn/token-rates").TokenRates;
|
4
|
-
};
|
2
|
+
export declare const useTokenRates: () => import("@talismn/token-rates").TokenRatesList;
|
5
3
|
export declare const useTokenRate: (tokenId?: TokenId) => import("@talismn/token-rates").TokenRates;
|
@@ -8,13 +8,11 @@ var chaindataProvider = require('@talismn/chaindata-provider');
|
|
8
8
|
var balances = require('@talismn/balances');
|
9
9
|
var jotaiEffect = require('jotai-effect');
|
10
10
|
var lodashEs = require('lodash-es');
|
11
|
-
var
|
12
|
-
var chainConnectorEvm = require('@talismn/chain-connector-evm');
|
11
|
+
var chainConnectors = require('@talismn/chain-connectors');
|
13
12
|
var connectionMeta = require('@talismn/connection-meta');
|
14
13
|
var util = require('@talismn/util');
|
15
14
|
var utils = require('jotai/utils');
|
16
15
|
var rxjs = require('rxjs');
|
17
|
-
var dexie = require('dexie');
|
18
16
|
var anylogger = require('anylogger');
|
19
17
|
var utilCrypto = require('@polkadot/util-crypto');
|
20
18
|
|
@@ -34,16 +32,30 @@ const enabledTokensAtom = jotai.atom(undefined);
|
|
34
32
|
const allAddressesAtom = jotai.atom([]);
|
35
33
|
|
36
34
|
const chaindataProviderAtom = jotai.atom(() => {
|
37
|
-
return new chaindataProvider.ChaindataProvider({
|
35
|
+
return new chaindataProvider.ChaindataProvider({
|
36
|
+
// TODO pass persistedStorage
|
37
|
+
});
|
38
|
+
});
|
39
|
+
const useSyncSwapsChaindata = () => jotai.useAtom(syncSwapsChaindataAtomEffect);
|
40
|
+
const syncSwapsChaindataAtomEffect = jotaiEffect.atomEffect(get => {
|
41
|
+
const chaindataProvider = get(chaindataProviderAtom);
|
42
|
+
|
43
|
+
// keep subscription open when swaps modal is open
|
44
|
+
const subscription = chaindataProvider.networks$.subscribe();
|
45
|
+
|
46
|
+
// close susbcription when swaps modal closes
|
47
|
+
return () => subscription.unsubscribe();
|
38
48
|
});
|
39
49
|
|
40
50
|
const chainConnectorsAtom = jotai.atom(get => {
|
41
51
|
const chaindataProvider = get(chaindataProviderAtom);
|
42
|
-
const substrate = new
|
43
|
-
const evm = new
|
52
|
+
const substrate = new chainConnectors.ChainConnectorDot(chaindataProvider, connectionMeta.connectionMetaDb);
|
53
|
+
const evm = new chainConnectors.ChainConnectorEth(chaindataProvider);
|
54
|
+
const solana = new chainConnectors.ChainConnectorSol(chaindataProvider);
|
44
55
|
return {
|
45
56
|
substrate,
|
46
|
-
evm
|
57
|
+
evm,
|
58
|
+
solana
|
47
59
|
};
|
48
60
|
});
|
49
61
|
|
@@ -85,32 +97,17 @@ var packageJson = {
|
|
85
97
|
|
86
98
|
var log = anylogger__default.default(packageJson.name);
|
87
99
|
|
88
|
-
/**
|
89
|
-
* Converts a dexie Observable into an rxjs Observable.
|
90
|
-
*/
|
91
|
-
function dexieToRxjs(o) {
|
92
|
-
return new rxjs.Observable(observer => {
|
93
|
-
const subscription = o.subscribe({
|
94
|
-
next: value => observer.next(value),
|
95
|
-
error: error => observer.error(error)
|
96
|
-
});
|
97
|
-
return () => subscription.unsubscribe();
|
98
|
-
});
|
99
|
-
}
|
100
|
-
|
101
100
|
const tokenRatesAtom = jotai.atom(async get => {
|
102
101
|
// runs a timer to keep tokenRates up to date
|
103
102
|
get(tokenRatesFetcherAtomEffect);
|
104
|
-
return await get(tokenRatesDbAtom);
|
103
|
+
return (await get(tokenRatesDbAtom)).tokenRates;
|
105
104
|
});
|
106
|
-
const tokenRatesDbAtom = utils.atomWithObservable(() => {
|
107
|
-
const dbRatesToMap = dbRates => Object.fromEntries(dbRates.map(({
|
108
|
-
tokenId,
|
109
|
-
rates
|
110
|
-
}) => [tokenId, rates]));
|
111
105
|
|
112
|
-
|
113
|
-
|
106
|
+
// TODO: Persist to storage
|
107
|
+
const tokenRates$ = new rxjs.ReplaySubject(1);
|
108
|
+
const tokenRatesDbAtom = utils.atomWithObservable(() => {
|
109
|
+
tokenRates.tryToDeleteOldTokenRatesDb();
|
110
|
+
return tokenRates$.asObservable();
|
114
111
|
});
|
115
112
|
const tokenRatesFetcherAtomEffect = jotaiEffect.atomEffect(get => {
|
116
113
|
// lets us tear down the existing timer when the effect is restarted
|
@@ -121,7 +118,6 @@ const tokenRatesFetcherAtomEffect = jotaiEffect.atomEffect(get => {
|
|
121
118
|
const tokensPromise = get(tokensAtom);
|
122
119
|
(async () => {
|
123
120
|
const tokensById = lodashEs.keyBy(await tokensPromise, "id");
|
124
|
-
const tokenIds = Object.keys(tokensById);
|
125
121
|
const loopMs = 300_000; // 300_000ms = 300s = 5 minutes
|
126
122
|
const retryTimeout = 5_000; // 5_000ms = 5 seconds
|
127
123
|
|
@@ -129,21 +125,11 @@ const tokenRatesFetcherAtomEffect = jotaiEffect.atomEffect(get => {
|
|
129
125
|
try {
|
130
126
|
if (abort.signal.aborted) return; // don't fetch if aborted
|
131
127
|
const tokenRates$1 = await tokenRates.fetchTokenRates(tokensById, tokenRates.ALL_CURRENCY_IDS, coinsApiConfig);
|
132
|
-
const putTokenRates =
|
133
|
-
|
134
|
-
|
135
|
-
}));
|
128
|
+
const putTokenRates = {
|
129
|
+
tokenRates: tokenRates$1
|
130
|
+
};
|
136
131
|
if (abort.signal.aborted) return; // don't insert into db if aborted
|
137
|
-
|
138
|
-
// override all tokenRates
|
139
|
-
await tokenRates.db.tokenRates.bulkPut(putTokenRates);
|
140
|
-
|
141
|
-
// delete tokenRates for tokens which no longer exist
|
142
|
-
const validTokenIds = new Set(tokenIds);
|
143
|
-
const tokenRatesIds = await tokenRates.db.tokenRates.toCollection().primaryKeys();
|
144
|
-
const deleteIds = tokenRatesIds.filter(id => !validTokenIds.has(id));
|
145
|
-
if (deleteIds.length > 0) await tokenRates.db.tokenRates.bulkDelete(deleteIds);
|
146
|
-
});
|
132
|
+
tokenRates$.next(putTokenRates);
|
147
133
|
if (abort.signal.aborted) return; // don't schedule next loop if aborted
|
148
134
|
setTimeout(hydrate, loopMs);
|
149
135
|
} catch (error) {
|
@@ -357,6 +343,7 @@ exports.useNetwork = useNetwork;
|
|
357
343
|
exports.useNetworks = useNetworks;
|
358
344
|
exports.useNetworksById = useNetworksById;
|
359
345
|
exports.useSetBalancesAddresses = useSetBalancesAddresses;
|
346
|
+
exports.useSyncSwapsChaindata = useSyncSwapsChaindata;
|
360
347
|
exports.useToken = useToken;
|
361
348
|
exports.useTokenRate = useTokenRate;
|
362
349
|
exports.useTokenRates = useTokenRates;
|
@@ -8,13 +8,11 @@ var chaindataProvider = require('@talismn/chaindata-provider');
|
|
8
8
|
var balances = require('@talismn/balances');
|
9
9
|
var jotaiEffect = require('jotai-effect');
|
10
10
|
var lodashEs = require('lodash-es');
|
11
|
-
var
|
12
|
-
var chainConnectorEvm = require('@talismn/chain-connector-evm');
|
11
|
+
var chainConnectors = require('@talismn/chain-connectors');
|
13
12
|
var connectionMeta = require('@talismn/connection-meta');
|
14
13
|
var util = require('@talismn/util');
|
15
14
|
var utils = require('jotai/utils');
|
16
15
|
var rxjs = require('rxjs');
|
17
|
-
var dexie = require('dexie');
|
18
16
|
var anylogger = require('anylogger');
|
19
17
|
var utilCrypto = require('@polkadot/util-crypto');
|
20
18
|
|
@@ -34,16 +32,30 @@ const enabledTokensAtom = jotai.atom(undefined);
|
|
34
32
|
const allAddressesAtom = jotai.atom([]);
|
35
33
|
|
36
34
|
const chaindataProviderAtom = jotai.atom(() => {
|
37
|
-
return new chaindataProvider.ChaindataProvider({
|
35
|
+
return new chaindataProvider.ChaindataProvider({
|
36
|
+
// TODO pass persistedStorage
|
37
|
+
});
|
38
|
+
});
|
39
|
+
const useSyncSwapsChaindata = () => jotai.useAtom(syncSwapsChaindataAtomEffect);
|
40
|
+
const syncSwapsChaindataAtomEffect = jotaiEffect.atomEffect(get => {
|
41
|
+
const chaindataProvider = get(chaindataProviderAtom);
|
42
|
+
|
43
|
+
// keep subscription open when swaps modal is open
|
44
|
+
const subscription = chaindataProvider.networks$.subscribe();
|
45
|
+
|
46
|
+
// close susbcription when swaps modal closes
|
47
|
+
return () => subscription.unsubscribe();
|
38
48
|
});
|
39
49
|
|
40
50
|
const chainConnectorsAtom = jotai.atom(get => {
|
41
51
|
const chaindataProvider = get(chaindataProviderAtom);
|
42
|
-
const substrate = new
|
43
|
-
const evm = new
|
52
|
+
const substrate = new chainConnectors.ChainConnectorDot(chaindataProvider, connectionMeta.connectionMetaDb);
|
53
|
+
const evm = new chainConnectors.ChainConnectorEth(chaindataProvider);
|
54
|
+
const solana = new chainConnectors.ChainConnectorSol(chaindataProvider);
|
44
55
|
return {
|
45
56
|
substrate,
|
46
|
-
evm
|
57
|
+
evm,
|
58
|
+
solana
|
47
59
|
};
|
48
60
|
});
|
49
61
|
|
@@ -85,32 +97,17 @@ var packageJson = {
|
|
85
97
|
|
86
98
|
var log = anylogger__default.default(packageJson.name);
|
87
99
|
|
88
|
-
/**
|
89
|
-
* Converts a dexie Observable into an rxjs Observable.
|
90
|
-
*/
|
91
|
-
function dexieToRxjs(o) {
|
92
|
-
return new rxjs.Observable(observer => {
|
93
|
-
const subscription = o.subscribe({
|
94
|
-
next: value => observer.next(value),
|
95
|
-
error: error => observer.error(error)
|
96
|
-
});
|
97
|
-
return () => subscription.unsubscribe();
|
98
|
-
});
|
99
|
-
}
|
100
|
-
|
101
100
|
const tokenRatesAtom = jotai.atom(async get => {
|
102
101
|
// runs a timer to keep tokenRates up to date
|
103
102
|
get(tokenRatesFetcherAtomEffect);
|
104
|
-
return await get(tokenRatesDbAtom);
|
103
|
+
return (await get(tokenRatesDbAtom)).tokenRates;
|
105
104
|
});
|
106
|
-
const tokenRatesDbAtom = utils.atomWithObservable(() => {
|
107
|
-
const dbRatesToMap = dbRates => Object.fromEntries(dbRates.map(({
|
108
|
-
tokenId,
|
109
|
-
rates
|
110
|
-
}) => [tokenId, rates]));
|
111
105
|
|
112
|
-
|
113
|
-
|
106
|
+
// TODO: Persist to storage
|
107
|
+
const tokenRates$ = new rxjs.ReplaySubject(1);
|
108
|
+
const tokenRatesDbAtom = utils.atomWithObservable(() => {
|
109
|
+
tokenRates.tryToDeleteOldTokenRatesDb();
|
110
|
+
return tokenRates$.asObservable();
|
114
111
|
});
|
115
112
|
const tokenRatesFetcherAtomEffect = jotaiEffect.atomEffect(get => {
|
116
113
|
// lets us tear down the existing timer when the effect is restarted
|
@@ -121,7 +118,6 @@ const tokenRatesFetcherAtomEffect = jotaiEffect.atomEffect(get => {
|
|
121
118
|
const tokensPromise = get(tokensAtom);
|
122
119
|
(async () => {
|
123
120
|
const tokensById = lodashEs.keyBy(await tokensPromise, "id");
|
124
|
-
const tokenIds = Object.keys(tokensById);
|
125
121
|
const loopMs = 300_000; // 300_000ms = 300s = 5 minutes
|
126
122
|
const retryTimeout = 5_000; // 5_000ms = 5 seconds
|
127
123
|
|
@@ -129,21 +125,11 @@ const tokenRatesFetcherAtomEffect = jotaiEffect.atomEffect(get => {
|
|
129
125
|
try {
|
130
126
|
if (abort.signal.aborted) return; // don't fetch if aborted
|
131
127
|
const tokenRates$1 = await tokenRates.fetchTokenRates(tokensById, tokenRates.ALL_CURRENCY_IDS, coinsApiConfig);
|
132
|
-
const putTokenRates =
|
133
|
-
|
134
|
-
|
135
|
-
}));
|
128
|
+
const putTokenRates = {
|
129
|
+
tokenRates: tokenRates$1
|
130
|
+
};
|
136
131
|
if (abort.signal.aborted) return; // don't insert into db if aborted
|
137
|
-
|
138
|
-
// override all tokenRates
|
139
|
-
await tokenRates.db.tokenRates.bulkPut(putTokenRates);
|
140
|
-
|
141
|
-
// delete tokenRates for tokens which no longer exist
|
142
|
-
const validTokenIds = new Set(tokenIds);
|
143
|
-
const tokenRatesIds = await tokenRates.db.tokenRates.toCollection().primaryKeys();
|
144
|
-
const deleteIds = tokenRatesIds.filter(id => !validTokenIds.has(id));
|
145
|
-
if (deleteIds.length > 0) await tokenRates.db.tokenRates.bulkDelete(deleteIds);
|
146
|
-
});
|
132
|
+
tokenRates$.next(putTokenRates);
|
147
133
|
if (abort.signal.aborted) return; // don't schedule next loop if aborted
|
148
134
|
setTimeout(hydrate, loopMs);
|
149
135
|
} catch (error) {
|
@@ -357,6 +343,7 @@ exports.useNetwork = useNetwork;
|
|
357
343
|
exports.useNetworks = useNetworks;
|
358
344
|
exports.useNetworksById = useNetworksById;
|
359
345
|
exports.useSetBalancesAddresses = useSetBalancesAddresses;
|
346
|
+
exports.useSyncSwapsChaindata = useSyncSwapsChaindata;
|
360
347
|
exports.useToken = useToken;
|
361
348
|
exports.useTokenRate = useTokenRate;
|
362
349
|
exports.useTokenRates = useTokenRates;
|
@@ -1,19 +1,17 @@
|
|
1
|
-
import { atom, useSetAtom, useAtomValue } from 'jotai';
|
1
|
+
import { atom, useAtom, useSetAtom, useAtomValue } from 'jotai';
|
2
2
|
import { useMemo, useEffect } from 'react';
|
3
|
-
import { DEFAULT_COINSAPI_CONFIG,
|
3
|
+
import { DEFAULT_COINSAPI_CONFIG, tryToDeleteOldTokenRatesDb, fetchTokenRates, ALL_CURRENCY_IDS } from '@talismn/token-rates';
|
4
4
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
5
5
|
import { ChaindataProvider } from '@talismn/chaindata-provider';
|
6
6
|
export { evmErc20TokenId, evmNativeTokenId, subAssetTokenId, subNativeTokenId, subPsp22TokenId, subTokensTokenId } from '@talismn/chaindata-provider';
|
7
7
|
import { BalancesProvider as BalancesProvider$1, Balances } from '@talismn/balances';
|
8
8
|
import { atomEffect } from 'jotai-effect';
|
9
9
|
import { keyBy, fromPairs } from 'lodash-es';
|
10
|
-
import {
|
11
|
-
import { ChainConnectorEvm } from '@talismn/chain-connector-evm';
|
10
|
+
import { ChainConnectorDot, ChainConnectorEth, ChainConnectorSol } from '@talismn/chain-connectors';
|
12
11
|
import { connectionMetaDb } from '@talismn/connection-meta';
|
13
12
|
import { firstThenDebounce, isTruthy, isAbortError } from '@talismn/util';
|
14
13
|
import { atomWithObservable } from 'jotai/utils';
|
15
|
-
import { combineLatest,
|
16
|
-
import { liveQuery } from 'dexie';
|
14
|
+
import { combineLatest, ReplaySubject } from 'rxjs';
|
17
15
|
import anylogger from 'anylogger';
|
18
16
|
import { cryptoWaitReady } from '@polkadot/util-crypto';
|
19
17
|
|
@@ -29,16 +27,30 @@ const enabledTokensAtom = atom(undefined);
|
|
29
27
|
const allAddressesAtom = atom([]);
|
30
28
|
|
31
29
|
const chaindataProviderAtom = atom(() => {
|
32
|
-
return new ChaindataProvider({
|
30
|
+
return new ChaindataProvider({
|
31
|
+
// TODO pass persistedStorage
|
32
|
+
});
|
33
|
+
});
|
34
|
+
const useSyncSwapsChaindata = () => useAtom(syncSwapsChaindataAtomEffect);
|
35
|
+
const syncSwapsChaindataAtomEffect = atomEffect(get => {
|
36
|
+
const chaindataProvider = get(chaindataProviderAtom);
|
37
|
+
|
38
|
+
// keep subscription open when swaps modal is open
|
39
|
+
const subscription = chaindataProvider.networks$.subscribe();
|
40
|
+
|
41
|
+
// close susbcription when swaps modal closes
|
42
|
+
return () => subscription.unsubscribe();
|
33
43
|
});
|
34
44
|
|
35
45
|
const chainConnectorsAtom = atom(get => {
|
36
46
|
const chaindataProvider = get(chaindataProviderAtom);
|
37
|
-
const substrate = new
|
38
|
-
const evm = new
|
47
|
+
const substrate = new ChainConnectorDot(chaindataProvider, connectionMetaDb);
|
48
|
+
const evm = new ChainConnectorEth(chaindataProvider);
|
49
|
+
const solana = new ChainConnectorSol(chaindataProvider);
|
39
50
|
return {
|
40
51
|
substrate,
|
41
|
-
evm
|
52
|
+
evm,
|
53
|
+
solana
|
42
54
|
};
|
43
55
|
});
|
44
56
|
|
@@ -80,32 +92,17 @@ var packageJson = {
|
|
80
92
|
|
81
93
|
var log = anylogger(packageJson.name);
|
82
94
|
|
83
|
-
/**
|
84
|
-
* Converts a dexie Observable into an rxjs Observable.
|
85
|
-
*/
|
86
|
-
function dexieToRxjs(o) {
|
87
|
-
return new Observable(observer => {
|
88
|
-
const subscription = o.subscribe({
|
89
|
-
next: value => observer.next(value),
|
90
|
-
error: error => observer.error(error)
|
91
|
-
});
|
92
|
-
return () => subscription.unsubscribe();
|
93
|
-
});
|
94
|
-
}
|
95
|
-
|
96
95
|
const tokenRatesAtom = atom(async get => {
|
97
96
|
// runs a timer to keep tokenRates up to date
|
98
97
|
get(tokenRatesFetcherAtomEffect);
|
99
|
-
return await get(tokenRatesDbAtom);
|
98
|
+
return (await get(tokenRatesDbAtom)).tokenRates;
|
100
99
|
});
|
101
|
-
const tokenRatesDbAtom = atomWithObservable(() => {
|
102
|
-
const dbRatesToMap = dbRates => Object.fromEntries(dbRates.map(({
|
103
|
-
tokenId,
|
104
|
-
rates
|
105
|
-
}) => [tokenId, rates]));
|
106
100
|
|
107
|
-
|
108
|
-
|
101
|
+
// TODO: Persist to storage
|
102
|
+
const tokenRates$ = new ReplaySubject(1);
|
103
|
+
const tokenRatesDbAtom = atomWithObservable(() => {
|
104
|
+
tryToDeleteOldTokenRatesDb();
|
105
|
+
return tokenRates$.asObservable();
|
109
106
|
});
|
110
107
|
const tokenRatesFetcherAtomEffect = atomEffect(get => {
|
111
108
|
// lets us tear down the existing timer when the effect is restarted
|
@@ -116,7 +113,6 @@ const tokenRatesFetcherAtomEffect = atomEffect(get => {
|
|
116
113
|
const tokensPromise = get(tokensAtom);
|
117
114
|
(async () => {
|
118
115
|
const tokensById = keyBy(await tokensPromise, "id");
|
119
|
-
const tokenIds = Object.keys(tokensById);
|
120
116
|
const loopMs = 300_000; // 300_000ms = 300s = 5 minutes
|
121
117
|
const retryTimeout = 5_000; // 5_000ms = 5 seconds
|
122
118
|
|
@@ -124,21 +120,11 @@ const tokenRatesFetcherAtomEffect = atomEffect(get => {
|
|
124
120
|
try {
|
125
121
|
if (abort.signal.aborted) return; // don't fetch if aborted
|
126
122
|
const tokenRates = await fetchTokenRates(tokensById, ALL_CURRENCY_IDS, coinsApiConfig);
|
127
|
-
const putTokenRates =
|
128
|
-
|
129
|
-
|
130
|
-
}));
|
123
|
+
const putTokenRates = {
|
124
|
+
tokenRates
|
125
|
+
};
|
131
126
|
if (abort.signal.aborted) return; // don't insert into db if aborted
|
132
|
-
|
133
|
-
// override all tokenRates
|
134
|
-
await db.tokenRates.bulkPut(putTokenRates);
|
135
|
-
|
136
|
-
// delete tokenRates for tokens which no longer exist
|
137
|
-
const validTokenIds = new Set(tokenIds);
|
138
|
-
const tokenRatesIds = await db.tokenRates.toCollection().primaryKeys();
|
139
|
-
const deleteIds = tokenRatesIds.filter(id => !validTokenIds.has(id));
|
140
|
-
if (deleteIds.length > 0) await db.tokenRates.bulkDelete(deleteIds);
|
141
|
-
});
|
127
|
+
tokenRates$.next(putTokenRates);
|
142
128
|
if (abort.signal.aborted) return; // don't schedule next loop if aborted
|
143
129
|
setTimeout(hydrate, loopMs);
|
144
130
|
} catch (error) {
|
@@ -304,4 +290,4 @@ const BalancesProvider = ({
|
|
304
290
|
});
|
305
291
|
};
|
306
292
|
|
307
|
-
export { BalancesProvider, allAddressesAtom, balancesAtom, chainConnectorsAtom, chaindataAtom, chaindataProviderAtom, coinsApiConfigAtom, cryptoWaitReadyAtom, enableTestnetsAtom, enabledChainsAtom, enabledTokensAtom, getStaleChains, networksAtom, tokenRatesAtom, tokensAtom, useBalances, useBalancesStatus, useChainConnectors, useChaindata, useChaindataProvider, useNetwork, useNetworks, useNetworksById, useSetBalancesAddresses, useToken, useTokenRate, useTokenRates, useTokens, useTokensById };
|
293
|
+
export { BalancesProvider, allAddressesAtom, balancesAtom, chainConnectorsAtom, chaindataAtom, chaindataProviderAtom, coinsApiConfigAtom, cryptoWaitReadyAtom, enableTestnetsAtom, enabledChainsAtom, enabledTokensAtom, getStaleChains, networksAtom, tokenRatesAtom, tokensAtom, useBalances, useBalancesStatus, useChainConnectors, useChaindata, useChaindataProvider, useNetwork, useNetworks, useNetworksById, useSetBalancesAddresses, useSyncSwapsChaindata, useToken, useTokenRate, useTokenRates, useTokens, useTokensById };
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@talismn/balances-react",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.3",
|
4
4
|
"author": "Talisman",
|
5
5
|
"homepage": "https://talisman.xyz",
|
6
6
|
"license": "GPL-3.0-or-later",
|
@@ -23,21 +23,18 @@
|
|
23
23
|
"dependencies": {
|
24
24
|
"anylogger": "^1.0.11",
|
25
25
|
"blueimp-md5": "2.19.0",
|
26
|
-
"dexie": "^4.0.9",
|
27
|
-
"dexie-react-hooks": "^1.1.7",
|
28
26
|
"jotai": "~2",
|
29
27
|
"jotai-effect": "~1",
|
30
28
|
"lodash-es": "4.17.21",
|
31
29
|
"react-use": "^17.5.1",
|
32
30
|
"rxjs": "^7.8.1",
|
33
|
-
"@talismn/
|
34
|
-
"@talismn/
|
35
|
-
"@talismn/chaindata-provider": "1.0
|
36
|
-
"@talismn/chain-connector": "1.0.2",
|
37
|
-
"@talismn/connection-meta": "0.2.20",
|
31
|
+
"@talismn/chain-connectors": "0.0.1",
|
32
|
+
"@talismn/balances": "1.0.3",
|
33
|
+
"@talismn/chaindata-provider": "1.1.0",
|
38
34
|
"@talismn/scale": "0.2.0",
|
39
|
-
"@talismn/token-rates": "3.0.
|
40
|
-
"@talismn/util": "0.5.
|
35
|
+
"@talismn/token-rates": "3.0.3",
|
36
|
+
"@talismn/util": "0.5.1",
|
37
|
+
"@talismn/connection-meta": "0.2.21"
|
41
38
|
},
|
42
39
|
"devDependencies": {
|
43
40
|
"@types/jest": "^29.5.14",
|