@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.
Files changed (45) hide show
  1. package/dist/cjs/@types/events.js.map +1 -1
  2. package/dist/cjs/@types/observer.js.map +1 -1
  3. package/dist/cjs/classes/WalletObserver.class.js +212 -157
  4. package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
  5. package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js +2 -1
  6. package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  7. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js +4 -7
  8. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
  9. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +92 -50
  10. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  11. package/dist/cjs/react-components/hooks/useWalletObserver.js +2 -1
  12. package/dist/cjs/react-components/hooks/useWalletObserver.js.map +1 -1
  13. package/dist/esm/@types/events.js.map +1 -1
  14. package/dist/esm/@types/observer.js.map +1 -1
  15. package/dist/esm/classes/WalletObserver.class.js +62 -26
  16. package/dist/esm/classes/WalletObserver.class.js.map +1 -1
  17. package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js +2 -1
  18. package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  19. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js +4 -7
  20. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
  21. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +66 -26
  22. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  23. package/dist/esm/react-components/hooks/useWalletObserver.js +2 -1
  24. package/dist/esm/react-components/hooks/useWalletObserver.js.map +1 -1
  25. package/dist/types/@types/events.d.ts +2 -6
  26. package/dist/types/@types/events.d.ts.map +1 -1
  27. package/dist/types/@types/observer.d.ts +6 -5
  28. package/dist/types/@types/observer.d.ts.map +1 -1
  29. package/dist/types/classes/WalletObserver.class.d.ts +9 -9
  30. package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
  31. package/dist/types/react-components/WalletObserverProvider/WalletObserverProvider.d.ts.map +1 -1
  32. package/dist/types/react-components/WalletObserverProvider/hooks/effects/useDerivedState.d.ts +1 -1
  33. package/dist/types/react-components/WalletObserverProvider/hooks/effects/useDerivedState.d.ts.map +1 -1
  34. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts +2 -1
  35. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
  36. package/dist/types/react-components/hooks/useWalletObserver.d.ts.map +1 -1
  37. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  38. package/package.json +1 -1
  39. package/src/@types/events.ts +2 -6
  40. package/src/@types/observer.ts +6 -5
  41. package/src/classes/WalletObserver.class.ts +83 -39
  42. package/src/react-components/WalletObserverProvider/WalletObserverProvider.tsx +1 -0
  43. package/src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts +17 -9
  44. package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +92 -53
  45. package/src/react-components/hooks/useWalletObserver.ts +2 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sundaeswap/wallet-lite",
3
- "version": "0.0.68",
3
+ "version": "0.0.69",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -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;
@@ -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
- network: number;
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: number;
133
- try {
132
+ let newNetwork = await this.getNetwork();
133
+ if (newNetwork instanceof Error) {
134
+ await this.syncApi();
134
135
  newNetwork = await this.getNetwork();
135
- } catch (e) {
136
- try {
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 e;
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: (await this.getUsedAddresses())[0],
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<WalletBalanceMap<AssetMetadata>> => {
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 [cbor, { Serialization }, typedHex] = await Promise.all([
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
- const val = await this.api.getNetworkId();
440
- this.network = val;
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 [cbor, { Cardano }, typedHex] = await Promise.all([
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 [cbor, { Cardano }, typedHex] = await Promise.all([
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<TransactionUnspentOutput[] | undefined> => {
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 [cbor, { Serialization }, typedHex] = await Promise.all([
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<TransactionUnspentOutput[] | undefined> => {
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 [cbor, { Serialization }, typedHex] = await Promise.all([
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),
@@ -38,6 +38,7 @@ const WalletObserverProvider: FC<
38
38
 
39
39
  const derivedState = useDerivedState(observerRef.current, {
40
40
  usedAddresses: state.usedAddresses,
41
+ unusedAddresses: state.unusedAddresses,
41
42
  });
42
43
 
43
44
  // Memoize the context value
@@ -5,22 +5,25 @@ import { useWalletObserverState } from "../useWalletObserverState.js";
5
5
 
6
6
  export const useDerivedState = (
7
7
  observer: WalletObserver,
8
- state: Pick<ReturnType<typeof useWalletObserverState>, "usedAddresses">,
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(utils.getBech32StakingAddress(state.usedAddresses[0]));
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
- }, [observer, state.usedAddresses[0], stakeAddress]);
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/index.js";
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
- const freshData = await observer.sync();
72
-
73
- startTransition(() => {
74
- setActiveWallet((prevWallet) =>
75
- newWallet === prevWallet ? prevWallet : newWallet,
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
- const newAdaBalance = freshData.balanceMap.get(ADA_ASSET_ID);
79
- if (newAdaBalance) {
80
- setAdaBalance((prevBalance) =>
81
- prevBalance.amount === newAdaBalance.amount
82
- ? prevBalance
83
- : newAdaBalance,
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
- setBalance((prevBalance) =>
88
- areAssetMapsEqual(prevBalance, freshData.balanceMap)
89
- ? prevBalance
90
- : freshData.balanceMap,
91
- );
92
-
93
- setUsedAddresses((prevValue) =>
94
- JSON.stringify(prevValue) === JSON.stringify(freshData.usedAddresses)
95
- ? prevValue
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
- return prevValue;
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
- setCollateral((prevValue) => {
120
- const prevValueRep = prevValue?.map((v) => v.toCbor());
121
- const newValueRep = freshData.utxos?.map((v) => v.toCbor());
122
- if (prevValueRep !== newValueRep) {
123
- return freshData.utxos;
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
- return prevValue;
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
- setIsCip45(newWallet.includes("p2p"));
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