@sundaeswap/wallet-lite 0.0.41 → 0.0.43

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 (110) hide show
  1. package/dist/cjs/@types/events.js.map +1 -1
  2. package/dist/cjs/@types/global.d.js.map +1 -1
  3. package/dist/cjs/@types/observer.js.map +1 -1
  4. package/dist/cjs/classes/WalletAssetMap.class.js.map +1 -1
  5. package/dist/cjs/classes/WalletBalanceMap.class.js +1 -1
  6. package/dist/cjs/classes/WalletBalanceMap.class.js.map +1 -1
  7. package/dist/cjs/classes/WalletObserver.class.js +1 -1
  8. package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
  9. package/dist/cjs/classes/WalletObserverEvent.js +3 -2
  10. package/dist/cjs/classes/WalletObserverEvent.js.map +1 -1
  11. package/dist/cjs/classes/WalletObserverUtils.class.js +3 -0
  12. package/dist/cjs/classes/WalletObserverUtils.class.js.map +1 -1
  13. package/dist/cjs/react-components/RenderWallet.js.map +1 -1
  14. package/dist/cjs/react-components/RenderWalletHandles.js.map +1 -1
  15. package/dist/cjs/react-components/RenderWalletPeerConnect.js.map +1 -1
  16. package/dist/cjs/react-components/RenderWalletState.js.map +1 -1
  17. package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  18. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
  19. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.js.map +1 -1
  20. package/dist/cjs/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js.map +1 -1
  21. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  22. package/dist/cjs/react-components/contexts/observer/context.js.map +1 -1
  23. package/dist/cjs/react-components/contexts/observer/types.js.map +1 -1
  24. package/dist/cjs/react-components/hooks/useWalletHandles.js +41 -40
  25. package/dist/cjs/react-components/hooks/useWalletHandles.js.map +1 -1
  26. package/dist/cjs/react-components/hooks/useWalletLoadingState.js.map +1 -1
  27. package/dist/cjs/react-components/hooks/useWalletObserver.js.map +1 -1
  28. package/dist/cjs/react-components/hooks/useWalletPeerConnect.js.map +1 -1
  29. package/dist/cjs/utils/comparisons.js.map +1 -1
  30. package/dist/cjs/utils/hashing.js.map +1 -1
  31. package/dist/esm/@types/events.js.map +1 -1
  32. package/dist/esm/@types/global.d.js.map +1 -1
  33. package/dist/esm/@types/observer.js.map +1 -1
  34. package/dist/esm/classes/WalletAssetMap.class.js.map +1 -1
  35. package/dist/esm/classes/WalletBalanceMap.class.js +1 -1
  36. package/dist/esm/classes/WalletBalanceMap.class.js.map +1 -1
  37. package/dist/esm/classes/WalletObserver.class.js +3 -3
  38. package/dist/esm/classes/WalletObserver.class.js.map +1 -1
  39. package/dist/esm/classes/WalletObserverEvent.js +3 -2
  40. package/dist/esm/classes/WalletObserverEvent.js.map +1 -1
  41. package/dist/esm/classes/WalletObserverUtils.class.js +5 -0
  42. package/dist/esm/classes/WalletObserverUtils.class.js.map +1 -1
  43. package/dist/esm/react-components/RenderWallet.js.map +1 -1
  44. package/dist/esm/react-components/RenderWalletHandles.js.map +1 -1
  45. package/dist/esm/react-components/RenderWalletPeerConnect.js.map +1 -1
  46. package/dist/esm/react-components/RenderWalletState.js.map +1 -1
  47. package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  48. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
  49. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.js.map +1 -1
  50. package/dist/esm/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js.map +1 -1
  51. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  52. package/dist/esm/react-components/contexts/observer/context.js.map +1 -1
  53. package/dist/esm/react-components/contexts/observer/types.js.map +1 -1
  54. package/dist/esm/react-components/hooks/useWalletHandles.js +20 -19
  55. package/dist/esm/react-components/hooks/useWalletHandles.js.map +1 -1
  56. package/dist/esm/react-components/hooks/useWalletLoadingState.js.map +1 -1
  57. package/dist/esm/react-components/hooks/useWalletObserver.js.map +1 -1
  58. package/dist/esm/react-components/hooks/useWalletPeerConnect.js.map +1 -1
  59. package/dist/esm/utils/comparisons.js.map +1 -1
  60. package/dist/esm/utils/hashing.js.map +1 -1
  61. package/dist/types/@types/events.d.ts +2 -2
  62. package/dist/types/classes/WalletBalanceMap.class.d.ts +1 -1
  63. package/dist/types/classes/WalletBalanceMap.class.d.ts.map +1 -1
  64. package/dist/types/classes/WalletObserver.class.d.ts +2 -2
  65. package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
  66. package/dist/types/classes/WalletObserverEvent.d.ts +7 -7
  67. package/dist/types/classes/WalletObserverEvent.d.ts.map +1 -1
  68. package/dist/types/classes/WalletObserverUtils.class.d.ts.map +1 -1
  69. package/dist/types/react-components/RenderWallet.d.ts +1 -1
  70. package/dist/types/react-components/RenderWallet.d.ts.map +1 -1
  71. package/dist/types/react-components/hooks/useWalletHandles.d.ts.map +1 -1
  72. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  73. package/dist/types/utils/comparisons.d.ts.map +1 -1
  74. package/dist/types/utils/hashing.d.ts +3 -3
  75. package/package.json +1 -1
  76. package/src/@types/events.ts +4 -4
  77. package/src/@types/global.d.ts +1 -0
  78. package/src/@types/observer.ts +6 -6
  79. package/src/__data__/assets.ts +1 -1
  80. package/src/classes/WalletAssetMap.class.ts +1 -1
  81. package/src/classes/WalletBalanceMap.class.ts +6 -6
  82. package/src/classes/WalletObserver.class.ts +27 -25
  83. package/src/classes/WalletObserverEvent.ts +14 -13
  84. package/src/classes/WalletObserverUtils.class.ts +11 -5
  85. package/src/classes/__tests__/WalletObserver.test.ts +23 -30
  86. package/src/classes/__tests__/WalletObserverEvent.test.ts +8 -8
  87. package/src/classes/__tests__/WalletObserverUtils.test.ts +6 -6
  88. package/src/react-components/RenderWallet.tsx +4 -4
  89. package/src/react-components/RenderWalletHandles.tsx +2 -2
  90. package/src/react-components/RenderWalletPeerConnect.tsx +2 -2
  91. package/src/react-components/RenderWalletState.tsx +2 -2
  92. package/src/react-components/WalletObserverProvider/WalletObserverProvider.tsx +3 -3
  93. package/src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts +2 -2
  94. package/src/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.ts +1 -1
  95. package/src/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.ts +12 -12
  96. package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +14 -14
  97. package/src/react-components/__tests__/RenderWallet.test.tsx +1 -1
  98. package/src/react-components/__tests__/RenderWalletHandles.test.tsx +8 -8
  99. package/src/react-components/__tests__/hooks/useAvailableExtensions.test.tsx +1 -0
  100. package/src/react-components/__tests__/hooks/useWalletObserverRef.test.tsx +1 -1
  101. package/src/react-components/contexts/observer/context.ts +3 -3
  102. package/src/react-components/contexts/observer/types.ts +5 -5
  103. package/src/react-components/hooks/useWalletHandles.ts +29 -28
  104. package/src/react-components/hooks/useWalletLoadingState.ts +2 -2
  105. package/src/react-components/hooks/useWalletObserver.ts +2 -2
  106. package/src/react-components/hooks/useWalletPeerConnect.tsx +1 -1
  107. package/src/utils/__tests__/comparisons.test.ts +3 -3
  108. package/src/utils/__tests__/hashing.test.ts +6 -8
  109. package/src/utils/comparisons.ts +3 -1
  110. package/src/utils/hashing.ts +5 -5
@@ -23,7 +23,7 @@ describe("WalletObserverEvent", () => {
23
23
 
24
24
  instance.addEventListener(
25
25
  EWalletObserverEvents.CONNECT_WALLET_END,
26
- handler
26
+ handler,
27
27
  );
28
28
 
29
29
  instance.dispatch(EWalletObserverEvents.CONNECT_WALLET_END);
@@ -43,14 +43,14 @@ describe("WalletObserverEvent", () => {
43
43
 
44
44
  instance.addEventListener(
45
45
  EWalletObserverEvents.CONNECT_WALLET_END,
46
- handler
46
+ handler,
47
47
  );
48
48
 
49
49
  expect(instance.eventList().size).toEqual(1);
50
50
 
51
51
  instance.addEventListener(
52
52
  EWalletObserverEvents.CONNECT_WALLET_END,
53
- handler
53
+ handler,
54
54
  );
55
55
 
56
56
  expect(instance.eventList().size).toEqual(1);
@@ -67,29 +67,29 @@ describe("WalletObserverEvent", () => {
67
67
 
68
68
  instance.addEventListener(
69
69
  EWalletObserverEvents.CONNECT_WALLET_START,
70
- handler1
70
+ handler1,
71
71
  );
72
72
  instance.addEventListener(
73
73
  EWalletObserverEvents.CONNECT_WALLET_END,
74
- handler1
74
+ handler1,
75
75
  );
76
76
  instance.addEventListener(
77
77
  EWalletObserverEvents.CONNECT_WALLET_END,
78
- handler2
78
+ handler2,
79
79
  );
80
80
 
81
81
  expect(instance.eventList().size).toEqual(3);
82
82
 
83
83
  instance.removeEventListener(
84
84
  EWalletObserverEvents.CONNECT_WALLET_START,
85
- handler1
85
+ handler1,
86
86
  );
87
87
 
88
88
  expect(instance.eventList().size).toEqual(2);
89
89
 
90
90
  instance.removeEventListener(
91
91
  EWalletObserverEvents.CONNECT_WALLET_END,
92
- handler1
92
+ handler1,
93
93
  );
94
94
 
95
95
  expect(instance.eventList().size).toEqual(1);
@@ -53,12 +53,12 @@ beforeAll(() => {
53
53
  })),
54
54
  },
55
55
  },
56
- })
56
+ }),
57
57
  );
58
58
  });
59
59
 
60
60
  afterAll(() => {
61
- mock.module("@cardano-sdk/core", () => coreModuleMock);
61
+ mock.restore();
62
62
  });
63
63
 
64
64
  describe("WalletObserverUtils", async () => {
@@ -91,7 +91,7 @@ describe("WalletObserverUtils", async () => {
91
91
  it("should throw an error if the address is malformed", () => {
92
92
  isValidMock.mockImplementation(() => false);
93
93
  expect(() => instance.getAddressDetails("invalid")).toThrowError(
94
- "Expected a Bech32 encoded address."
94
+ "Expected a Bech32 encoded address.",
95
95
  );
96
96
  });
97
97
  });
@@ -100,19 +100,19 @@ describe("WalletObserverUtils", async () => {
100
100
  it("should call correct dependency functions", () => {
101
101
  expect(() => instance.getBech32StakingAddress(testAddress)).not.toThrow();
102
102
  expect(instance.getBech32StakingAddress(testAddress)).toEqual(
103
- stakeAddress
103
+ stakeAddress,
104
104
  );
105
105
 
106
106
  isValidMock.mockImplementation(() => false);
107
107
  expect(() => instance.getBech32StakingAddress("invalid")).toThrowError(
108
- "Expected a Bech32 encoded address."
108
+ "Expected a Bech32 encoded address.",
109
109
  );
110
110
  expect(isValidMock).toHaveBeenCalled();
111
111
 
112
112
  // @ts-expect-error It can be undefined.
113
113
  getStakeCredentialMock.mockImplementation(() => undefined);
114
114
  expect(() => instance.getBech32StakingAddress("invalid")).toThrowError(
115
- "Expected a Bech32 encoded address."
115
+ "Expected a Bech32 encoded address.",
116
116
  );
117
117
  });
118
118
  });
@@ -5,12 +5,12 @@ import { ErrorBoundary } from "react-error-boundary";
5
5
  import { useWalletObserver } from "./hooks/useWalletObserver.js";
6
6
 
7
7
  export type TRenderWalletFunctionState<
8
- T extends IAssetAmountMetadata = IAssetAmountMetadata
8
+ T extends IAssetAmountMetadata = IAssetAmountMetadata,
9
9
  > = ReturnType<typeof useWalletObserver<T>>;
10
10
 
11
- export type TRenderWalletFunction = (
12
- state: TRenderWalletFunctionState<any>
13
- ) => JSX.Element | ReactNode;
11
+ export type TRenderWalletFunction<
12
+ T extends IAssetAmountMetadata = IAssetAmountMetadata,
13
+ > = (state: TRenderWalletFunctionState<T>) => JSX.Element | ReactNode;
14
14
 
15
15
  export interface IRenderWalletProps {
16
16
  render: TRenderWalletFunction;
@@ -6,12 +6,12 @@ import { useWalletHandles } from "./hooks/useWalletHandles.js";
6
6
  import { useWalletObserver } from "./hooks/useWalletObserver.js";
7
7
 
8
8
  export type TRenderWalletHandlesFunctionState<
9
- T extends IAssetAmountMetadata = IAssetAmountMetadata
9
+ T extends IAssetAmountMetadata = IAssetAmountMetadata,
10
10
  > = ReturnType<typeof useWalletObserver<T>> &
11
11
  ReturnType<typeof useWalletHandles<T>>;
12
12
 
13
13
  export type TRenderWalletHandlesFunction = (
14
- state: TRenderWalletHandlesFunctionState
14
+ state: TRenderWalletHandlesFunctionState,
15
15
  ) => JSX.Element | ReactNode;
16
16
 
17
17
  export interface IRenderWalletHandlesProps {
@@ -6,12 +6,12 @@ import { useWalletObserver } from "./hooks/useWalletObserver.js";
6
6
  import { useWalletPeerConnect } from "./hooks/useWalletPeerConnect.js";
7
7
 
8
8
  export type TRenderWalletPeerConnectFunctionState<
9
- T extends IAssetAmountMetadata = IAssetAmountMetadata
9
+ T extends IAssetAmountMetadata = IAssetAmountMetadata,
10
10
  > = ReturnType<typeof useWalletObserver<T>> &
11
11
  ReturnType<typeof useWalletPeerConnect<T>>;
12
12
 
13
13
  export type TRenderWalletPeerConnectFunction = (
14
- state: TRenderWalletPeerConnectFunctionState
14
+ state: TRenderWalletPeerConnectFunctionState,
15
15
  ) => ReactNode;
16
16
 
17
17
  export interface IRenderWalletPeerConnectProps {
@@ -6,12 +6,12 @@ import { useWalletLoadingState } from "./hooks/useWalletLoadingState.js";
6
6
  import { useWalletObserver } from "./hooks/useWalletObserver.js";
7
7
 
8
8
  export type TRenderWalletStateFunctionState<
9
- T extends IAssetAmountMetadata = IAssetAmountMetadata
9
+ T extends IAssetAmountMetadata = IAssetAmountMetadata,
10
10
  > = ReturnType<typeof useWalletObserver<T>> &
11
11
  ReturnType<typeof useWalletLoadingState<T>>;
12
12
 
13
13
  export type TRenderWalletStateFunction = (
14
- state: TRenderWalletStateFunctionState
14
+ state: TRenderWalletStateFunctionState,
15
15
  ) => JSX.Element | ReactNode;
16
16
 
17
17
  export interface IRenderWalletStateProps {
@@ -34,7 +34,7 @@ const WalletObserverProvider: FC<
34
34
  useProviderRefreshInterval(
35
35
  observerRef.current,
36
36
  state.syncWallet,
37
- options?.refreshInterval
37
+ options?.refreshInterval,
38
38
  );
39
39
 
40
40
  const derivedState = useDerivedState(observerRef.current, {
@@ -63,7 +63,7 @@ const WalletObserverProvider: FC<
63
63
  syncingWallet,
64
64
  ready,
65
65
  observerRef.current,
66
- ]
66
+ ],
67
67
  );
68
68
 
69
69
  useEffect(() => {
@@ -73,7 +73,7 @@ const WalletObserverProvider: FC<
73
73
 
74
74
  const wallet: TSupportedWalletExtensions | null =
75
75
  window.localStorage.getItem(
76
- WalletObserver.PERSISTENCE_CACHE_KEY
76
+ WalletObserver.PERSISTENCE_CACHE_KEY,
77
77
  ) as TSupportedWalletExtensions;
78
78
 
79
79
  if (wallet && observerRef.current?.getOptions()?.persistence) {
@@ -4,7 +4,7 @@ import { useWalletObserverState } from "../useWalletObserverState.js";
4
4
 
5
5
  export const useDerivedState = (
6
6
  observer: WalletObserver,
7
- state: Pick<ReturnType<typeof useWalletObserverState>, "usedAddresses">
7
+ state: Pick<ReturnType<typeof useWalletObserverState>, "usedAddresses">,
8
8
  ) => {
9
9
  const [stakeAddress, setStakeAddress] = useState<string>();
10
10
 
@@ -23,7 +23,7 @@ export const useDerivedState = (
23
23
  stakeAddress,
24
24
  mainAddress: state.usedAddresses[0],
25
25
  }),
26
- [state.usedAddresses[0], stakeAddress]
26
+ [state.usedAddresses[0], stakeAddress],
27
27
  );
28
28
 
29
29
  return memoizedDerivedState;
@@ -14,7 +14,7 @@ import { WalletObserver } from "../../../../classes/WalletObserver.class.js";
14
14
  export const useProviderRefreshInterval = (
15
15
  observer: WalletObserver,
16
16
  syncWallet: () => Promise<void>,
17
- refreshInterval?: number
17
+ refreshInterval?: number,
18
18
  ) => {
19
19
  useEffect(() => {
20
20
  if (!refreshInterval) {
@@ -14,7 +14,7 @@ import { TWalletProviderHooks } from "../../contexts/observer/index.js";
14
14
  */
15
15
  export const useProviderWalletObserverRef = (
16
16
  options?: TWalletObserverOptions,
17
- hooks?: TWalletProviderHooks
17
+ hooks?: TWalletProviderHooks,
18
18
  ) => {
19
19
  // Use ref to store the observer instance, ensuring it's created only once
20
20
  const observerRef = useRef<WalletObserver | null>(null);
@@ -33,7 +33,7 @@ export const useProviderWalletObserverRef = (
33
33
  return Boolean(
34
34
  observerRef.current &&
35
35
  observerRef.current.api &&
36
- observerRef.current.activeWallet
36
+ observerRef.current.activeWallet,
37
37
  );
38
38
  }, [observerRef, observerRef.current.api, observerRef.current.activeWallet]);
39
39
 
@@ -67,23 +67,23 @@ export const useProviderWalletObserverRef = (
67
67
 
68
68
  observerRef.current.addEventListener(
69
69
  EWalletObserverEvents.CONNECT_WALLET_START,
70
- setConnectingStart
70
+ setConnectingStart,
71
71
  );
72
72
  observerRef.current.addEventListener(
73
73
  EWalletObserverEvents.CONNECT_WALLET_END,
74
- setConnectingEnd
74
+ setConnectingEnd,
75
75
  );
76
76
  observerRef.current.addEventListener(
77
77
  EWalletObserverEvents.SYNCING_WALLET_START,
78
- setSyncingStart
78
+ setSyncingStart,
79
79
  );
80
80
  observerRef.current.addEventListener(
81
81
  EWalletObserverEvents.SYNCING_WALLET_END,
82
- setSyncingEnd
82
+ setSyncingEnd,
83
83
  );
84
84
  observerRef.current.addEventListener(
85
85
  EWalletObserverEvents.DISCONNECT,
86
- onDisconnect
86
+ onDisconnect,
87
87
  );
88
88
 
89
89
  setEventListenersAttached(() => true);
@@ -95,23 +95,23 @@ export const useProviderWalletObserverRef = (
95
95
 
96
96
  observerRef.current.removeEventListener(
97
97
  EWalletObserverEvents.CONNECT_WALLET_START,
98
- setConnectingStart
98
+ setConnectingStart,
99
99
  );
100
100
  observerRef.current.removeEventListener(
101
101
  EWalletObserverEvents.CONNECT_WALLET_END,
102
- setConnectingEnd
102
+ setConnectingEnd,
103
103
  );
104
104
  observerRef.current.removeEventListener(
105
105
  EWalletObserverEvents.SYNCING_WALLET_START,
106
- setSyncingStart
106
+ setSyncingStart,
107
107
  );
108
108
  observerRef.current.removeEventListener(
109
109
  EWalletObserverEvents.SYNCING_WALLET_END,
110
- setSyncingEnd
110
+ setSyncingEnd,
111
111
  );
112
112
  observerRef.current.removeEventListener(
113
113
  EWalletObserverEvents.DISCONNECT,
114
- onDisconnect
114
+ onDisconnect,
115
115
  );
116
116
  };
117
117
  }, [observerRef, hooks]);
@@ -19,20 +19,20 @@ import { THandleMetadata } from "../../contexts/observer/index.js";
19
19
  * @param {WalletObserver} observer
20
20
  */
21
21
  export const useWalletObserverState = <
22
- AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
22
+ AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
23
23
  >(
24
- observer: WalletObserver<AssetMetadata>
24
+ observer: WalletObserver<AssetMetadata>,
25
25
  ) => {
26
26
  const [activeWallet, setActiveWallet] =
27
27
  useState<TSupportedWalletExtensions>();
28
28
  const [adaBalance, setAdaBalance] = useState<AssetAmount<AssetMetadata>>(
29
- new AssetAmount<AssetMetadata>(0n)
29
+ new AssetAmount<AssetMetadata>(0n),
30
30
  );
31
31
  const [handleMetadata, setHandleMetadata] = useState<
32
32
  TAssetAmountMap<THandleMetadata<AssetMetadata>>
33
33
  >(new WalletAssetMap<THandleMetadata<AssetMetadata>>());
34
34
  const [balance, setBalance] = useState<WalletBalanceMap<AssetMetadata>>(
35
- new WalletBalanceMap<AssetMetadata>(observer)
35
+ new WalletBalanceMap<AssetMetadata>(observer),
36
36
  );
37
37
  const [network, setNetwork] = useState<number | undefined>();
38
38
  const [usedAddresses, setUsedAddresses] = useState<string[]>([]);
@@ -45,8 +45,8 @@ export const useWalletObserverState = <
45
45
  const [willAutoConnect, setWillAutoConnect] = useState(
46
46
  Boolean(
47
47
  window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY) &&
48
- observer.getOptions().persistence
49
- )
48
+ observer.getOptions().persistence,
49
+ ),
50
50
  );
51
51
 
52
52
  const disconnect = useCallback(() => {
@@ -82,40 +82,40 @@ export const useWalletObserverState = <
82
82
 
83
83
  startTransition(() => {
84
84
  setActiveWallet((prevWallet) =>
85
- newWallet === prevWallet ? prevWallet : newWallet
85
+ newWallet === prevWallet ? prevWallet : newWallet,
86
86
  );
87
87
 
88
88
  const newAdaBalance = freshData.balanceMap.get(
89
- WalletObserver.ADA_ASSET_ID
89
+ WalletObserver.ADA_ASSET_ID,
90
90
  );
91
91
  if (newAdaBalance) {
92
92
  setAdaBalance((prevBalance) =>
93
93
  prevBalance.amount === newAdaBalance.amount
94
94
  ? prevBalance
95
- : newAdaBalance
95
+ : newAdaBalance,
96
96
  );
97
97
  }
98
98
 
99
99
  setBalance((prevBalance) =>
100
100
  areAssetMapsEqual(prevBalance, freshData.balanceMap)
101
101
  ? prevBalance
102
- : freshData.balanceMap
102
+ : freshData.balanceMap,
103
103
  );
104
104
 
105
105
  setUsedAddresses((prevValue) =>
106
106
  JSON.stringify(prevValue) === JSON.stringify(freshData.usedAddresses)
107
107
  ? prevValue
108
- : freshData.usedAddresses
108
+ : freshData.usedAddresses,
109
109
  );
110
110
 
111
111
  setUnusedAddresses((prevValue) =>
112
112
  JSON.stringify(prevValue) === JSON.stringify(freshData.unusedAddresses)
113
113
  ? prevValue
114
- : freshData.unusedAddresses
114
+ : freshData.unusedAddresses,
115
115
  );
116
116
 
117
117
  setNetwork((prevValue) =>
118
- prevValue === freshData.network ? prevValue : freshData.network
118
+ prevValue === freshData.network ? prevValue : freshData.network,
119
119
  );
120
120
 
121
121
  setUtxos((prevValue) => {
@@ -153,7 +153,7 @@ export const useWalletObserverState = <
153
153
  setSwitching(() => false);
154
154
  return observer.api;
155
155
  },
156
- [observer, setSwitching]
156
+ [observer, setSwitching],
157
157
  );
158
158
 
159
159
  /**
@@ -37,7 +37,7 @@ describe("RenderWallet", () => {
37
37
  wrapper(props) {
38
38
  return <WalletObserverProvider {...props} />;
39
39
  },
40
- }
40
+ },
41
41
  );
42
42
 
43
43
  expect(container.innerHTML).toMatchSnapshot();
@@ -38,15 +38,15 @@ describe("RenderWalletHandles", () => {
38
38
  const user = userEvent.setup();
39
39
  const spiedOnGetAllDataBatch = spyOn(
40
40
  KoraLabsProvider.prototype,
41
- "getAllDataBatch"
41
+ "getAllDataBatch",
42
42
  );
43
43
  spiedOnGetAllDataBatch.mockImplementationOnce(
44
- // @ts-ignore Bug in Bun.sh that mocks the function result rather than the reference.
45
- () => async () => mockHandleMetadata
44
+ // @ts-expect-error Bug in Bun.sh that mocks the function result rather than the reference.
45
+ () => async () => mockHandleMetadata,
46
46
  );
47
47
  spiedOnGetAllDataBatch.mockImplementationOnce(
48
- // @ts-ignore Bug in Bun.sh that mocks the function result rather than the reference.
49
- () => async () => mockHandleMetadata
48
+ // @ts-expect-error Bug in Bun.sh that mocks the function result rather than the reference.
49
+ () => async () => mockHandleMetadata,
50
50
  );
51
51
 
52
52
  const { container, getByTestId, queryByTestId, rerender } = render(
@@ -55,7 +55,7 @@ describe("RenderWalletHandles", () => {
55
55
  wrapper(props) {
56
56
  return <WalletObserverProvider {...props} />;
57
57
  },
58
- }
58
+ },
59
59
  );
60
60
 
61
61
  expect(spiedOnGetAllDataBatch).not.toHaveBeenCalled();
@@ -74,8 +74,8 @@ describe("RenderWalletHandles", () => {
74
74
  expect(container.innerHTML).toMatchSnapshot();
75
75
 
76
76
  spiedOnGetAllDataBatch.mockImplementationOnce(
77
- // @ts-ignore See first mock comment.
78
- () => async () => mockHandleMetadata.map(({ name }) => `${name}-updated`)
77
+ // @ts-expect-error See first mock comment.
78
+ () => async () => mockHandleMetadata.map(({ name }) => `${name}-updated`),
79
79
  );
80
80
 
81
81
  rerender(<RenderWalletHandles render={TestComponent} />);
@@ -29,6 +29,7 @@ describe("useAvailableExtensions", () => {
29
29
  // Inject a duplicate api.
30
30
  window.cardano = {
31
31
  ...window.cardano,
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
33
  flint: mockedEternlWallet as unknown as any,
33
34
  };
34
35
 
@@ -28,6 +28,6 @@ describe("useWalletObserverRef", () => {
28
28
  ),
29
29
  });
30
30
 
31
- expect(result.current.current).toBeInstanceOf(WalletObserver);
31
+ expect(result.current.observerRef.current).toBeInstanceOf(WalletObserver);
32
32
  });
33
33
  });
@@ -15,15 +15,15 @@ export const WalletObserverContext = createContext<
15
15
  * @returns {IWalletObserverState<AssetMetadata>}
16
16
  */
17
17
  export function useWalletObserverContext<
18
- AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
18
+ AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
19
19
  >(): IWalletObserverState<AssetMetadata> {
20
20
  const context = useContext(
21
- WalletObserverContext
21
+ WalletObserverContext,
22
22
  ) as unknown as IWalletObserverState<AssetMetadata>;
23
23
 
24
24
  if (!context) {
25
25
  throw new Error(
26
- "useWalletObserverContext must be used within a WalletObserverProvider"
26
+ "useWalletObserverContext must be used within a WalletObserverProvider",
27
27
  );
28
28
  }
29
29
 
@@ -22,7 +22,7 @@ export type TWalletProviderHooks = {
22
22
  * The resolved internal props of the WalletObserverProvider.
23
23
  */
24
24
  export interface IWalletObserverProviderState<
25
- AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
25
+ AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
26
26
  > {
27
27
  observerOptions: TWalletObserverOptions<AssetMetadata>;
28
28
  hooks: TWalletProviderHooks;
@@ -33,7 +33,7 @@ export interface IWalletObserverProviderState<
33
33
  * The main WalletObserverProvider props.
34
34
  */
35
35
  export interface IWalletObserverProviderProps<
36
- AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
36
+ AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
37
37
  > {
38
38
  options?: Partial<IWalletObserverProviderState<AssetMetadata>>;
39
39
  }
@@ -42,7 +42,7 @@ export interface IWalletObserverProviderProps<
42
42
  * The WalletObserverProvider's internal state.
43
43
  */
44
44
  export interface IWalletObserverState<
45
- AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
45
+ AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
46
46
  > {
47
47
  observerRef: MutableRefObject<WalletObserver<AssetMetadata>>;
48
48
  refreshInterval: number | false;
@@ -62,14 +62,14 @@ export interface IWalletObserverState<
62
62
  * returned from the metadataResolver.
63
63
  */
64
64
  export type THandleMetadata<
65
- AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
65
+ AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
66
66
  > = AssetMetadata & IHandle;
67
67
 
68
68
  /**
69
69
  * The exposed state of the WalletObserverProvider.
70
70
  */
71
71
  export type TUseWalletObserverState<
72
- AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
72
+ AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
73
73
  > = Omit<
74
74
  IWalletObserverState<AssetMetadata>["state"],
75
75
  | "setActiveWallet"
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  useCallback,
3
+ useDeferredValue,
3
4
  useEffect,
4
5
  useMemo,
5
6
  useState,
6
- useTransition,
7
7
  } from "react";
8
8
 
9
9
  import { IHandle } from "@koralabs/adahandle-sdk";
@@ -15,17 +15,18 @@ import { THandleMetadata } from "../contexts/observer/types.js";
15
15
  import { useWalletObserver } from "./useWalletObserver.js";
16
16
 
17
17
  export const useWalletHandles = <
18
- AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
18
+ AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
19
19
  >() => {
20
20
  const state = useWalletObserver<THandleMetadata<AssetMetadata>>();
21
- const [isPending, startTransition] = useTransition();
22
21
  const [handles, setHandles] = useState<
23
22
  TAssetAmountMap<THandleMetadata<AssetMetadata>>
24
23
  >(new WalletAssetMap());
24
+ const [isLoading, setIsLoading] = useState(true);
25
+ const deferredHandles = useDeferredValue(handles);
25
26
 
26
27
  const memoizedHandleDep = useMemo(
27
28
  () => [...state.balance.getHandles().keys()],
28
- [state.balance]
29
+ [state.balance],
29
30
  );
30
31
 
31
32
  const syncHandles = useCallback<
@@ -41,6 +42,7 @@ export const useWalletHandles = <
41
42
  }
42
43
 
43
44
  try {
45
+ setIsLoading(true);
44
46
  const {
45
47
  default: HandleClient,
46
48
  HandleClientContext,
@@ -63,12 +65,12 @@ export const useWalletHandles = <
63
65
  .getAllDataBatch(
64
66
  walletHandlesWithDataArray.map(([key]) => ({
65
67
  value: key.split(".")[1],
66
- }))
68
+ })),
67
69
  );
68
70
 
69
71
  walletHandlesWithDataArray.forEach(([key, asset]) => {
70
72
  const matchingData = walletHandleDataArray.find(
71
- ({ hex }) => hex === key.split(".")[1]
73
+ ({ hex }) => hex === key.split(".")[1],
72
74
  ) as IHandle;
73
75
 
74
76
  walletHandles.set(
@@ -80,10 +82,11 @@ export const useWalletHandles = <
80
82
  assetId: normalizeAssetIdWithDot(asset.metadata.assetId),
81
83
  decimals: 0,
82
84
  })
83
- .withAmount(1n)
85
+ .withAmount(1n),
84
86
  );
85
87
  });
86
88
 
89
+ setIsLoading(false);
87
90
  return walletHandles;
88
91
  } catch (e) {
89
92
  console.error(e);
@@ -94,29 +97,27 @@ export const useWalletHandles = <
94
97
  useEffect(() => {
95
98
  const fetchHandles = async () => {
96
99
  const newHandles = await syncHandles();
97
- startTransition(() => {
98
- setHandles((prevHandles) => {
99
- let handleMetadataChanged = false;
100
-
101
- if (newHandles.size !== prevHandles?.size) {
102
- handleMetadataChanged = true;
103
- } else {
104
- for (const [key, val] of newHandles) {
105
- if (
106
- !prevHandles.has(key) ||
107
- prevHandles.get(key)?.amount !== val?.amount
108
- ) {
109
- handleMetadataChanged = true;
110
- }
100
+ setHandles((prevHandles) => {
101
+ let handleMetadataChanged = false;
102
+
103
+ if (newHandles.size !== prevHandles?.size) {
104
+ handleMetadataChanged = true;
105
+ } else {
106
+ for (const [key, val] of newHandles) {
107
+ if (
108
+ !prevHandles.has(key) ||
109
+ prevHandles.get(key)?.amount !== val?.amount
110
+ ) {
111
+ handleMetadataChanged = true;
111
112
  }
112
113
  }
114
+ }
113
115
 
114
- if (!handleMetadataChanged) {
115
- return prevHandles;
116
- }
116
+ if (!handleMetadataChanged) {
117
+ return prevHandles;
118
+ }
117
119
 
118
- return newHandles;
119
- });
120
+ return newHandles;
120
121
  });
121
122
  };
122
123
 
@@ -124,7 +125,7 @@ export const useWalletHandles = <
124
125
  }, [memoizedHandleDep, syncHandles]);
125
126
 
126
127
  return {
127
- handles,
128
- loadingHandles: isPending,
128
+ handles: deferredHandles,
129
+ loadingHandles: isLoading,
129
130
  };
130
131
  };