@sundaeswap/wallet-lite 0.0.68 → 0.0.69
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/cjs/@types/events.js.map +1 -1
- package/dist/cjs/@types/observer.js.map +1 -1
- package/dist/cjs/classes/WalletObserver.class.js +212 -157
- package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js +2 -1
- package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js +4 -7
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +92 -50
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletObserver.js +2 -1
- package/dist/cjs/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/esm/@types/events.js.map +1 -1
- package/dist/esm/@types/observer.js.map +1 -1
- package/dist/esm/classes/WalletObserver.class.js +62 -26
- package/dist/esm/classes/WalletObserver.class.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js +2 -1
- package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js +4 -7
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +66 -26
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletObserver.js +2 -1
- package/dist/esm/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/types/@types/events.d.ts +2 -6
- package/dist/types/@types/events.d.ts.map +1 -1
- package/dist/types/@types/observer.d.ts +6 -5
- package/dist/types/@types/observer.d.ts.map +1 -1
- package/dist/types/classes/WalletObserver.class.d.ts +9 -9
- package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/WalletObserverProvider.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/effects/useDerivedState.d.ts +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/effects/useDerivedState.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts +2 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
- package/dist/types/react-components/hooks/useWalletObserver.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/@types/events.ts +2 -6
- package/src/@types/observer.ts +6 -5
- package/src/classes/WalletObserver.class.ts +83 -39
- package/src/react-components/WalletObserverProvider/WalletObserverProvider.tsx +1 -0
- package/src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts +17 -9
- package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +92 -53
- package/src/react-components/hooks/useWalletObserver.ts +2 -0
package/package.json
CHANGED
package/src/@types/events.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { IAssetAmountMetadata } from "@sundaeswap/asset";
|
|
2
2
|
|
|
3
3
|
import { WalletBalanceMap } from "../classes/WalletBalanceMap.class.js";
|
|
4
|
+
import { IWalletObserverSync } from "./observer.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* A list of observer events that a client can hook into.
|
|
@@ -24,12 +25,7 @@ export interface IWalletObserverEventValues<
|
|
|
24
25
|
[EWalletObserverEvents.SYNCING_WALLET_START]: undefined;
|
|
25
26
|
[EWalletObserverEvents.SYNCING_WALLET_END]:
|
|
26
27
|
| undefined
|
|
27
|
-
|
|
|
28
|
-
balanceMap: WalletBalanceMap<T>;
|
|
29
|
-
network: number;
|
|
30
|
-
usedAddresses: string[];
|
|
31
|
-
unusedAddresses: string[];
|
|
32
|
-
};
|
|
28
|
+
| IWalletObserverSync<T>;
|
|
33
29
|
[EWalletObserverEvents.CONNECT_WALLET_START]: undefined;
|
|
34
30
|
[EWalletObserverEvents.CONNECT_WALLET_END]: undefined;
|
|
35
31
|
[EWalletObserverEvents.GET_BALANCE_MAP_START]: undefined;
|
package/src/@types/observer.ts
CHANGED
|
@@ -93,9 +93,10 @@ export type TGetPeerConnectInstance = () => {
|
|
|
93
93
|
export interface IWalletObserverSync<
|
|
94
94
|
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
95
95
|
> {
|
|
96
|
-
balanceMap: WalletBalanceMap<AssetMetadata>;
|
|
97
|
-
usedAddresses: string[];
|
|
98
|
-
unusedAddresses: string[];
|
|
99
|
-
utxos?: TransactionUnspentOutput[];
|
|
100
|
-
|
|
96
|
+
balanceMap: Error | WalletBalanceMap<AssetMetadata>;
|
|
97
|
+
usedAddresses: Error | string[];
|
|
98
|
+
unusedAddresses: Error | string[];
|
|
99
|
+
utxos?: Error | TransactionUnspentOutput[];
|
|
100
|
+
collateral?: Error | TransactionUnspentOutput[];
|
|
101
|
+
network: Error | number;
|
|
101
102
|
}
|
|
@@ -129,18 +129,16 @@ export class WalletObserver<
|
|
|
129
129
|
this._performingSync = true;
|
|
130
130
|
this.dispatch(EWalletObserverEvents.SYNCING_WALLET_START);
|
|
131
131
|
|
|
132
|
-
let newNetwork
|
|
133
|
-
|
|
132
|
+
let newNetwork = await this.getNetwork();
|
|
133
|
+
if (newNetwork instanceof Error) {
|
|
134
|
+
await this.syncApi();
|
|
134
135
|
newNetwork = await this.getNetwork();
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
await this.syncApi();
|
|
138
|
-
newNetwork = await this.getNetwork();
|
|
139
|
-
} catch (e) {
|
|
136
|
+
|
|
137
|
+
if (newNetwork instanceof Error) {
|
|
140
138
|
this.dispatch(EWalletObserverEvents.SYNCING_WALLET_END);
|
|
141
139
|
this.dispatch(EWalletObserverEvents.CONNECT_WALLET_END);
|
|
142
140
|
this._performingSync = false;
|
|
143
|
-
throw
|
|
141
|
+
throw newNetwork;
|
|
144
142
|
}
|
|
145
143
|
}
|
|
146
144
|
|
|
@@ -312,9 +310,16 @@ export class WalletObserver<
|
|
|
312
310
|
|
|
313
311
|
this.activeWallet = extension;
|
|
314
312
|
if (this._options.persistence && api) {
|
|
313
|
+
const addresses = await this.getUsedAddresses();
|
|
314
|
+
if (addresses instanceof Error) {
|
|
315
|
+
addresses.cause =
|
|
316
|
+
"Could not get a list of used addresses from the wallet when trying to save the connection.";
|
|
317
|
+
throw addresses;
|
|
318
|
+
}
|
|
319
|
+
|
|
315
320
|
const seed: IWalletObserverSeed = {
|
|
316
321
|
activeWallet: extension,
|
|
317
|
-
mainAddress:
|
|
322
|
+
mainAddress: addresses[0],
|
|
318
323
|
};
|
|
319
324
|
|
|
320
325
|
window.localStorage.setItem(
|
|
@@ -375,7 +380,9 @@ export class WalletObserver<
|
|
|
375
380
|
*
|
|
376
381
|
* @returns {Promise<WalletBalanceMap<AssetMetadata>>} - A promise that resolves to a map of asset amounts keyed by asset IDs.
|
|
377
382
|
*/
|
|
378
|
-
getBalanceMap = async (): Promise<
|
|
383
|
+
getBalanceMap = async (): Promise<
|
|
384
|
+
WalletBalanceMap<AssetMetadata> | Error
|
|
385
|
+
> => {
|
|
379
386
|
if (!this.api) {
|
|
380
387
|
throw new Error("Attempted to query balance without an API instance.");
|
|
381
388
|
}
|
|
@@ -383,12 +390,17 @@ export class WalletObserver<
|
|
|
383
390
|
const start = performance.now();
|
|
384
391
|
|
|
385
392
|
this.dispatch(EWalletObserverEvents.GET_BALANCE_MAP_START);
|
|
386
|
-
const [
|
|
387
|
-
this.api.getBalance(),
|
|
393
|
+
const [{ Serialization }, typedHex] = await Promise.all([
|
|
388
394
|
getCardanoCore(),
|
|
389
395
|
getCardanoUtil(),
|
|
390
396
|
]);
|
|
391
397
|
|
|
398
|
+
let cbor: string;
|
|
399
|
+
try {
|
|
400
|
+
cbor = await this.api.getBalance();
|
|
401
|
+
} catch (e) {
|
|
402
|
+
return e as Error;
|
|
403
|
+
}
|
|
392
404
|
const data = Serialization.Value.fromCbor(typedHex(cbor));
|
|
393
405
|
const multiassetKeys = data.multiasset()?.keys() ?? [];
|
|
394
406
|
|
|
@@ -421,24 +433,30 @@ export class WalletObserver<
|
|
|
421
433
|
if (this._options.debug) {
|
|
422
434
|
console.log(`getBalanceMap: ${end - start}ms`);
|
|
423
435
|
}
|
|
436
|
+
|
|
424
437
|
return balanceMap;
|
|
425
438
|
};
|
|
426
439
|
|
|
427
440
|
/**
|
|
428
441
|
* Gets the current network connection.
|
|
429
442
|
*
|
|
430
|
-
* @returns {Promise<number>} The network ID.
|
|
443
|
+
* @returns {Promise<number | Error>} The network ID or an Error from the wallet.
|
|
431
444
|
*/
|
|
432
|
-
getNetwork = async (): Promise<number> => {
|
|
445
|
+
getNetwork = async (): Promise<number | Error> => {
|
|
433
446
|
if (!this.api) {
|
|
434
447
|
throw new Error("Attempted to query network without an API instance.");
|
|
435
448
|
}
|
|
436
449
|
|
|
437
450
|
const start = performance.now();
|
|
438
451
|
|
|
439
|
-
|
|
440
|
-
|
|
452
|
+
let val: number;
|
|
453
|
+
try {
|
|
454
|
+
val = await this.api.getNetworkId();
|
|
455
|
+
} catch (e) {
|
|
456
|
+
return e as Error;
|
|
457
|
+
}
|
|
441
458
|
|
|
459
|
+
this.network = val;
|
|
442
460
|
const end = performance.now();
|
|
443
461
|
if (this._options.debug) {
|
|
444
462
|
console.log(`getNetwork: ${end - start}ms`);
|
|
@@ -451,7 +469,7 @@ export class WalletObserver<
|
|
|
451
469
|
*
|
|
452
470
|
* @returns {Promise<string[]>} The list of addresses.
|
|
453
471
|
*/
|
|
454
|
-
getUsedAddresses = async (): Promise<string[]> => {
|
|
472
|
+
getUsedAddresses = async (): Promise<string[] | Error> => {
|
|
455
473
|
if (!this.api) {
|
|
456
474
|
throw new Error(
|
|
457
475
|
"Attempted to query used addresses without an API instance.",
|
|
@@ -460,12 +478,18 @@ export class WalletObserver<
|
|
|
460
478
|
|
|
461
479
|
const start = performance.now();
|
|
462
480
|
|
|
463
|
-
const [
|
|
464
|
-
this.api.getUsedAddresses(),
|
|
481
|
+
const [{ Cardano }, typedHex] = await Promise.all([
|
|
465
482
|
getCardanoCore(),
|
|
466
483
|
getCardanoUtil(),
|
|
467
484
|
]);
|
|
468
485
|
|
|
486
|
+
let cbor: string[];
|
|
487
|
+
try {
|
|
488
|
+
cbor = await this.api.getUsedAddresses();
|
|
489
|
+
} catch (e) {
|
|
490
|
+
return e as Error;
|
|
491
|
+
}
|
|
492
|
+
|
|
469
493
|
const data = cbor.map((val) =>
|
|
470
494
|
Cardano.Address.fromBytes(typedHex(val)).toBech32(),
|
|
471
495
|
);
|
|
@@ -480,9 +504,9 @@ export class WalletObserver<
|
|
|
480
504
|
/**
|
|
481
505
|
* Gets a list of unused addresses, encoded as Bech32.
|
|
482
506
|
*
|
|
483
|
-
* @returns {Promise<string[]>} The list of addresses.
|
|
507
|
+
* @returns {Promise<string[] | Error>} The list of addresses or an Error returned by the wallet.
|
|
484
508
|
*/
|
|
485
|
-
getUnusedAddresses = async (): Promise<string[]> => {
|
|
509
|
+
getUnusedAddresses = async (): Promise<string[] | Error> => {
|
|
486
510
|
if (!this.api) {
|
|
487
511
|
throw new Error(
|
|
488
512
|
"Attempted to query unused addresses without an API instance.",
|
|
@@ -491,12 +515,18 @@ export class WalletObserver<
|
|
|
491
515
|
|
|
492
516
|
const start = performance.now();
|
|
493
517
|
|
|
494
|
-
const [
|
|
495
|
-
this.api.getUnusedAddresses(),
|
|
518
|
+
const [{ Cardano }, typedHex] = await Promise.all([
|
|
496
519
|
getCardanoCore(),
|
|
497
520
|
getCardanoUtil(),
|
|
498
521
|
]);
|
|
499
522
|
|
|
523
|
+
let cbor: string[];
|
|
524
|
+
try {
|
|
525
|
+
cbor = await this.api.getUnusedAddresses();
|
|
526
|
+
} catch (e) {
|
|
527
|
+
return e as Error;
|
|
528
|
+
}
|
|
529
|
+
|
|
500
530
|
const data = cbor.map((val) =>
|
|
501
531
|
Cardano.Address.fromBytes(typedHex(val)).toBech32(),
|
|
502
532
|
);
|
|
@@ -513,19 +543,27 @@ export class WalletObserver<
|
|
|
513
543
|
*
|
|
514
544
|
* @returns {Promise<TransactionUnspentOutput[]>} The list of TransactionUnspentOutputs.
|
|
515
545
|
*/
|
|
516
|
-
getUtxos = async (): Promise<
|
|
546
|
+
getUtxos = async (): Promise<
|
|
547
|
+
TransactionUnspentOutput[] | Error | undefined
|
|
548
|
+
> => {
|
|
517
549
|
if (!this.api) {
|
|
518
550
|
throw new Error("Attempted to query UTXOs without an API instance.");
|
|
519
551
|
}
|
|
520
552
|
|
|
521
553
|
const start = performance.now();
|
|
522
554
|
|
|
523
|
-
const [
|
|
524
|
-
this.api.getUtxos(),
|
|
555
|
+
const [{ Serialization }, typedHex] = await Promise.all([
|
|
525
556
|
getCardanoCore(),
|
|
526
557
|
getCardanoUtil(),
|
|
527
558
|
]);
|
|
528
559
|
|
|
560
|
+
let cbor: string[] | null;
|
|
561
|
+
try {
|
|
562
|
+
cbor = await this.api.getUtxos();
|
|
563
|
+
} catch (e) {
|
|
564
|
+
return e as Error;
|
|
565
|
+
}
|
|
566
|
+
|
|
529
567
|
const data = cbor?.map((val) => {
|
|
530
568
|
const txOutput = Serialization.TransactionUnspentOutput.fromCbor(
|
|
531
569
|
typedHex(val),
|
|
@@ -547,30 +585,36 @@ export class WalletObserver<
|
|
|
547
585
|
/**
|
|
548
586
|
* Gets a list of wallet UTXOs suitable for collateral.
|
|
549
587
|
*
|
|
550
|
-
* @returns {Promise<TransactionUnspentOutput[]>} The list of TransactionUnspentOutputs.
|
|
588
|
+
* @returns {Promise<TransactionUnspentOutput[] | Error | undefined>} The list of TransactionUnspentOutputs, if there are any, or an Error.
|
|
551
589
|
*/
|
|
552
|
-
getCollateral = async (): Promise<
|
|
590
|
+
getCollateral = async (): Promise<
|
|
591
|
+
TransactionUnspentOutput[] | Error | undefined
|
|
592
|
+
> => {
|
|
553
593
|
if (!this.api) {
|
|
554
594
|
throw new Error("Attempted to query UTXOs without an API instance.");
|
|
555
595
|
}
|
|
556
596
|
|
|
557
597
|
const start = performance.now();
|
|
558
598
|
|
|
559
|
-
const [
|
|
560
|
-
(async () => {
|
|
561
|
-
const funcCall =
|
|
562
|
-
this.api?.getCollateral ||
|
|
563
|
-
(this.api?.experimental.getCollateral as GetCollateral);
|
|
564
|
-
if (typeof funcCall !== "function") {
|
|
565
|
-
return [];
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
return await funcCall();
|
|
569
|
-
})(),
|
|
599
|
+
const [{ Serialization }, typedHex] = await Promise.all([
|
|
570
600
|
getCardanoCore(),
|
|
571
601
|
getCardanoUtil(),
|
|
572
602
|
]);
|
|
573
603
|
|
|
604
|
+
let cbor: string[] | null;
|
|
605
|
+
try {
|
|
606
|
+
const funcCall =
|
|
607
|
+
this.api?.getCollateral ||
|
|
608
|
+
(this.api?.experimental.getCollateral as GetCollateral);
|
|
609
|
+
if (typeof funcCall !== "function") {
|
|
610
|
+
cbor = [];
|
|
611
|
+
} else {
|
|
612
|
+
cbor = await funcCall();
|
|
613
|
+
}
|
|
614
|
+
} catch (e) {
|
|
615
|
+
return e as Error;
|
|
616
|
+
}
|
|
617
|
+
|
|
574
618
|
const data = cbor?.map((val) => {
|
|
575
619
|
const txOutput = Serialization.TransactionUnspentOutput.fromCbor(
|
|
576
620
|
typedHex(val),
|
|
@@ -5,22 +5,25 @@ import { useWalletObserverState } from "../useWalletObserverState.js";
|
|
|
5
5
|
|
|
6
6
|
export const useDerivedState = (
|
|
7
7
|
observer: WalletObserver,
|
|
8
|
-
state: Pick<
|
|
8
|
+
state: Pick<
|
|
9
|
+
ReturnType<typeof useWalletObserverState>,
|
|
10
|
+
"usedAddresses" | "unusedAddresses"
|
|
11
|
+
>,
|
|
9
12
|
) => {
|
|
10
13
|
const [stakeAddress, setStakeAddress] = useState<string>();
|
|
11
14
|
|
|
12
15
|
useEffect(() => {
|
|
13
|
-
if (state.usedAddresses.length === 0) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
16
|
observer.getUtils().then((utils) => {
|
|
18
|
-
setStakeAddress(
|
|
17
|
+
setStakeAddress(
|
|
18
|
+
utils.getBech32StakingAddress(
|
|
19
|
+
state.usedAddresses[0] || state.unusedAddresses[0],
|
|
20
|
+
),
|
|
21
|
+
);
|
|
19
22
|
});
|
|
20
|
-
}, [observer, state.usedAddresses[0]]);
|
|
23
|
+
}, [observer, state.usedAddresses[0], state.unusedAddresses[0]]);
|
|
21
24
|
|
|
22
25
|
const memoizedDerivedState = useMemo(() => {
|
|
23
|
-
let mainAddress = state.usedAddresses[0];
|
|
26
|
+
let mainAddress = state.usedAddresses[0] || state.unusedAddresses[0];
|
|
24
27
|
const persistentCache = window.localStorage.getItem(
|
|
25
28
|
WalletObserver.PERSISTENCE_CACHE_KEY,
|
|
26
29
|
);
|
|
@@ -35,7 +38,12 @@ export const useDerivedState = (
|
|
|
35
38
|
stakeAddress,
|
|
36
39
|
mainAddress,
|
|
37
40
|
};
|
|
38
|
-
}, [
|
|
41
|
+
}, [
|
|
42
|
+
observer,
|
|
43
|
+
state.usedAddresses[0],
|
|
44
|
+
state.unusedAddresses[0],
|
|
45
|
+
stakeAddress,
|
|
46
|
+
]);
|
|
39
47
|
|
|
40
48
|
return memoizedDerivedState;
|
|
41
49
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serialization/
|
|
1
|
+
import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serialization/TransactionUnspentOutput.js";
|
|
2
2
|
import { AssetAmount, IAssetAmountMetadata } from "@sundaeswap/asset";
|
|
3
3
|
import { useCallback, useEffect, useState, useTransition } from "react";
|
|
4
4
|
|
|
@@ -32,6 +32,7 @@ export const useWalletObserverState = <
|
|
|
32
32
|
const [collateral, setCollateral] = useState<TransactionUnspentOutput[]>();
|
|
33
33
|
const [isCip45, setIsCip45] = useState(false);
|
|
34
34
|
const [switching, setSwitching] = useState(false);
|
|
35
|
+
const [errorSyncing, setErrorSyncing] = useState(false);
|
|
35
36
|
const [isPending, startTransition] = useTransition();
|
|
36
37
|
const [willAutoConnect, setWillAutoConnect] = useState(
|
|
37
38
|
Boolean(
|
|
@@ -68,66 +69,103 @@ export const useWalletObserverState = <
|
|
|
68
69
|
return;
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
setIsCip45(newWallet.includes("p2p"));
|
|
73
|
+
setActiveWallet((prevWallet) =>
|
|
74
|
+
newWallet === prevWallet ? prevWallet : newWallet,
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
const freshData = await observer.sync();
|
|
79
|
+
|
|
80
|
+
startTransition(() => {
|
|
81
|
+
const newBalanceMap = freshData.balanceMap;
|
|
82
|
+
if (newBalanceMap instanceof WalletBalanceMap) {
|
|
83
|
+
const newAdaBalance = newBalanceMap.get(ADA_ASSET_ID);
|
|
84
|
+
if (newAdaBalance) {
|
|
85
|
+
setAdaBalance((prevBalance) =>
|
|
86
|
+
prevBalance.amount === newAdaBalance.amount
|
|
87
|
+
? prevBalance
|
|
88
|
+
: newAdaBalance,
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
setBalance((prevBalance) =>
|
|
92
|
+
areAssetMapsEqual(prevBalance, newBalanceMap)
|
|
93
|
+
? prevBalance
|
|
94
|
+
: newBalanceMap,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
} else {
|
|
98
|
+
setErrorSyncing(true);
|
|
99
|
+
}
|
|
77
100
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
101
|
+
const newUsedAddresses = freshData.usedAddresses;
|
|
102
|
+
if (newUsedAddresses instanceof Array) {
|
|
103
|
+
setUsedAddresses((prevValue) => {
|
|
104
|
+
return JSON.stringify(prevValue) ===
|
|
105
|
+
JSON.stringify(newUsedAddresses)
|
|
106
|
+
? prevValue
|
|
107
|
+
: newUsedAddresses;
|
|
108
|
+
});
|
|
109
|
+
} else {
|
|
110
|
+
setErrorSyncing(true);
|
|
111
|
+
}
|
|
86
112
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
: freshData.usedAddresses,
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
setUnusedAddresses((prevValue) =>
|
|
100
|
-
JSON.stringify(prevValue) === JSON.stringify(freshData.unusedAddresses)
|
|
101
|
-
? prevValue
|
|
102
|
-
: freshData.unusedAddresses,
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
setNetwork((prevValue) =>
|
|
106
|
-
prevValue === freshData.network ? prevValue : freshData.network,
|
|
107
|
-
);
|
|
108
|
-
|
|
109
|
-
setUtxos((prevValue) => {
|
|
110
|
-
const prevValueRep = prevValue?.map((v) => v.toCbor());
|
|
111
|
-
const newValueRep = freshData.utxos?.map((v) => v.toCbor());
|
|
112
|
-
if (prevValueRep !== newValueRep) {
|
|
113
|
-
return freshData.utxos;
|
|
113
|
+
const newUnusedAddresses = freshData.unusedAddresses;
|
|
114
|
+
if (newUnusedAddresses instanceof Array) {
|
|
115
|
+
setUnusedAddresses((prevValue) =>
|
|
116
|
+
JSON.stringify(prevValue) === JSON.stringify(newUnusedAddresses)
|
|
117
|
+
? prevValue
|
|
118
|
+
: newUnusedAddresses,
|
|
119
|
+
);
|
|
120
|
+
} else {
|
|
121
|
+
setErrorSyncing(true);
|
|
114
122
|
}
|
|
115
123
|
|
|
116
|
-
|
|
117
|
-
|
|
124
|
+
const newNetwork = freshData.network;
|
|
125
|
+
if (typeof newNetwork === "number") {
|
|
126
|
+
setNetwork((prevValue) =>
|
|
127
|
+
prevValue === newNetwork ? prevValue : newNetwork,
|
|
128
|
+
);
|
|
129
|
+
} else {
|
|
130
|
+
setErrorSyncing(true);
|
|
131
|
+
}
|
|
118
132
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
133
|
+
const newUtxos = freshData.utxos;
|
|
134
|
+
if (newUtxos instanceof Array) {
|
|
135
|
+
setUtxos((prevValue) => {
|
|
136
|
+
const prevValueRep = prevValue?.map((v) => v.toCbor());
|
|
137
|
+
const newValueRep = newUtxos?.map((v) => v.toCbor());
|
|
138
|
+
if (prevValueRep !== newValueRep) {
|
|
139
|
+
return newUtxos;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return prevValue;
|
|
143
|
+
});
|
|
144
|
+
} else {
|
|
145
|
+
setErrorSyncing(true);
|
|
124
146
|
}
|
|
125
147
|
|
|
126
|
-
|
|
148
|
+
const newCollateral = freshData.collateral;
|
|
149
|
+
if (newCollateral instanceof Array) {
|
|
150
|
+
setCollateral((prevValue) => {
|
|
151
|
+
const prevValueRep = prevValue?.map((v) => v.toCbor());
|
|
152
|
+
const newValueRep = newCollateral?.map((v) => v.toCbor());
|
|
153
|
+
if (prevValueRep !== newValueRep) {
|
|
154
|
+
return newCollateral;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return prevValue;
|
|
158
|
+
});
|
|
159
|
+
} else {
|
|
160
|
+
setErrorSyncing(true);
|
|
161
|
+
}
|
|
127
162
|
});
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
163
|
+
} catch (e) {
|
|
164
|
+
setErrorSyncing(true);
|
|
165
|
+
(e as Error).cause =
|
|
166
|
+
"The wallet through an error while the app was trying to sync with it. Please try again or contact your wallet provider.";
|
|
167
|
+
throw e;
|
|
168
|
+
}
|
|
131
169
|
}, [observer, disconnect]);
|
|
132
170
|
|
|
133
171
|
const connectWallet = useCallback(
|
|
@@ -178,6 +216,7 @@ export const useWalletObserverState = <
|
|
|
178
216
|
disconnect,
|
|
179
217
|
connectWallet,
|
|
180
218
|
switching,
|
|
219
|
+
errorSyncing,
|
|
181
220
|
setSwitching,
|
|
182
221
|
isPending,
|
|
183
222
|
willAutoConnect,
|
|
@@ -40,6 +40,7 @@ export const useWalletObserver = <
|
|
|
40
40
|
disconnect: state.disconnect,
|
|
41
41
|
connectWallet: state.connectWallet,
|
|
42
42
|
switching: state.switching,
|
|
43
|
+
errorSyncing: state.errorSyncing,
|
|
43
44
|
isPending: state.isPending,
|
|
44
45
|
willAutoConnect: state.willAutoConnect,
|
|
45
46
|
}),
|
|
@@ -62,6 +63,7 @@ export const useWalletObserver = <
|
|
|
62
63
|
state.switching,
|
|
63
64
|
state.isPending,
|
|
64
65
|
state.willAutoConnect,
|
|
66
|
+
state.errorSyncing,
|
|
65
67
|
],
|
|
66
68
|
);
|
|
67
69
|
|