@sundaeswap/wallet-lite 0.0.40 → 0.0.42
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/global.d.js.map +1 -1
- package/dist/cjs/@types/observer.js.map +1 -1
- package/dist/cjs/classes/WalletAssetMap.class.js.map +1 -1
- package/dist/cjs/classes/WalletBalanceMap.class.js +1 -1
- package/dist/cjs/classes/WalletBalanceMap.class.js.map +1 -1
- package/dist/cjs/classes/WalletObserver.class.js +1 -1
- package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
- package/dist/cjs/classes/WalletObserverEvent.js +3 -2
- package/dist/cjs/classes/WalletObserverEvent.js.map +1 -1
- package/dist/cjs/classes/WalletObserverUtils.class.js +3 -0
- package/dist/cjs/classes/WalletObserverUtils.class.js.map +1 -1
- package/dist/cjs/react-components/RenderWallet.js.map +1 -1
- package/dist/cjs/react-components/RenderWalletHandles.js.map +1 -1
- package/dist/cjs/react-components/RenderWalletPeerConnect.js.map +1 -1
- package/dist/cjs/react-components/RenderWalletState.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js +6 -0
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js.map +1 -1
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +5 -3
- package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/cjs/react-components/contexts/observer/context.js.map +1 -1
- package/dist/cjs/react-components/contexts/observer/types.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletHandles.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletLoadingState.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/cjs/react-components/hooks/useWalletPeerConnect.js.map +1 -1
- package/dist/cjs/utils/comparisons.js.map +1 -1
- package/dist/cjs/utils/hashing.js.map +1 -1
- package/dist/esm/@types/events.js.map +1 -1
- package/dist/esm/@types/global.d.js.map +1 -1
- package/dist/esm/@types/observer.js.map +1 -1
- package/dist/esm/classes/WalletAssetMap.class.js.map +1 -1
- package/dist/esm/classes/WalletBalanceMap.class.js +1 -1
- package/dist/esm/classes/WalletBalanceMap.class.js.map +1 -1
- package/dist/esm/classes/WalletObserver.class.js +3 -3
- package/dist/esm/classes/WalletObserver.class.js.map +1 -1
- package/dist/esm/classes/WalletObserverEvent.js +3 -2
- package/dist/esm/classes/WalletObserverEvent.js.map +1 -1
- package/dist/esm/classes/WalletObserverUtils.class.js +5 -0
- package/dist/esm/classes/WalletObserverUtils.class.js.map +1 -1
- package/dist/esm/react-components/RenderWallet.js.map +1 -1
- package/dist/esm/react-components/RenderWalletHandles.js.map +1 -1
- package/dist/esm/react-components/RenderWalletPeerConnect.js.map +1 -1
- package/dist/esm/react-components/RenderWalletState.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js +5 -0
- package/dist/esm/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.js.map +1 -1
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +3 -2
- package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
- package/dist/esm/react-components/contexts/observer/context.js.map +1 -1
- package/dist/esm/react-components/contexts/observer/types.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletHandles.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletLoadingState.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletObserver.js.map +1 -1
- package/dist/esm/react-components/hooks/useWalletPeerConnect.js.map +1 -1
- package/dist/esm/utils/comparisons.js.map +1 -1
- package/dist/esm/utils/hashing.js.map +1 -1
- package/dist/types/@types/events.d.ts +2 -2
- package/dist/types/classes/WalletBalanceMap.class.d.ts +1 -1
- package/dist/types/classes/WalletBalanceMap.class.d.ts.map +1 -1
- package/dist/types/classes/WalletObserver.class.d.ts +2 -2
- package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
- package/dist/types/classes/WalletObserverEvent.d.ts +7 -7
- package/dist/types/classes/WalletObserverEvent.d.ts.map +1 -1
- package/dist/types/classes/WalletObserverUtils.class.d.ts.map +1 -1
- package/dist/types/react-components/RenderWallet.d.ts +1 -1
- package/dist/types/react-components/RenderWallet.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.d.ts.map +1 -1
- package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
- package/dist/types/react-components/contexts/observer/types.d.ts +1 -0
- package/dist/types/react-components/contexts/observer/types.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/utils/comparisons.d.ts.map +1 -1
- package/dist/types/utils/hashing.d.ts +3 -3
- package/package.json +1 -1
- package/src/@types/events.ts +4 -4
- package/src/@types/global.d.ts +1 -0
- package/src/@types/observer.ts +6 -6
- package/src/__data__/assets.ts +1 -1
- package/src/classes/WalletAssetMap.class.ts +1 -1
- package/src/classes/WalletBalanceMap.class.ts +6 -6
- package/src/classes/WalletObserver.class.ts +27 -25
- package/src/classes/WalletObserverEvent.ts +14 -13
- package/src/classes/WalletObserverUtils.class.ts +11 -5
- package/src/classes/__tests__/WalletObserver.test.ts +23 -30
- package/src/classes/__tests__/WalletObserverEvent.test.ts +8 -8
- package/src/classes/__tests__/WalletObserverUtils.test.ts +6 -6
- package/src/react-components/RenderWallet.tsx +4 -4
- package/src/react-components/RenderWalletHandles.tsx +2 -2
- package/src/react-components/RenderWalletPeerConnect.tsx +2 -2
- package/src/react-components/RenderWalletState.tsx +2 -2
- package/src/react-components/WalletObserverProvider/WalletObserverProvider.tsx +3 -3
- package/src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts +2 -2
- package/src/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.ts +1 -1
- package/src/react-components/WalletObserverProvider/hooks/useProviderWalletObserverRef.ts +21 -10
- package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +19 -27
- package/src/react-components/__tests__/RenderWallet.test.tsx +1 -1
- package/src/react-components/__tests__/RenderWalletHandles.test.tsx +8 -8
- package/src/react-components/__tests__/hooks/useAvailableExtensions.test.tsx +1 -0
- package/src/react-components/__tests__/hooks/useWalletObserverRef.test.tsx +1 -1
- package/src/react-components/contexts/observer/context.ts +3 -3
- package/src/react-components/contexts/observer/types.ts +6 -5
- package/src/react-components/hooks/useWalletHandles.ts +5 -5
- package/src/react-components/hooks/useWalletLoadingState.ts +2 -2
- package/src/react-components/hooks/useWalletObserver.ts +2 -2
- package/src/react-components/hooks/useWalletPeerConnect.tsx +1 -1
- package/src/utils/__tests__/comparisons.test.ts +3 -3
- package/src/utils/__tests__/hashing.test.ts +6 -8
- package/src/utils/comparisons.ts +3 -1
- 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.
|
|
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
|
-
|
|
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;
|
package/src/react-components/WalletObserverProvider/hooks/effects/useProviderRefreshInterval.ts
CHANGED
|
@@ -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
|
|
|
@@ -61,22 +61,29 @@ export const useProviderWalletObserverRef = (
|
|
|
61
61
|
hooks?.onSyncWalletEnd?.();
|
|
62
62
|
setSyncing(() => false);
|
|
63
63
|
};
|
|
64
|
+
const onDisconnect = () => {
|
|
65
|
+
hooks?.onDisconnectWallet?.();
|
|
66
|
+
};
|
|
64
67
|
|
|
65
68
|
observerRef.current.addEventListener(
|
|
66
69
|
EWalletObserverEvents.CONNECT_WALLET_START,
|
|
67
|
-
setConnectingStart
|
|
70
|
+
setConnectingStart,
|
|
68
71
|
);
|
|
69
72
|
observerRef.current.addEventListener(
|
|
70
73
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
71
|
-
setConnectingEnd
|
|
74
|
+
setConnectingEnd,
|
|
72
75
|
);
|
|
73
76
|
observerRef.current.addEventListener(
|
|
74
77
|
EWalletObserverEvents.SYNCING_WALLET_START,
|
|
75
|
-
setSyncingStart
|
|
78
|
+
setSyncingStart,
|
|
76
79
|
);
|
|
77
80
|
observerRef.current.addEventListener(
|
|
78
81
|
EWalletObserverEvents.SYNCING_WALLET_END,
|
|
79
|
-
setSyncingEnd
|
|
82
|
+
setSyncingEnd,
|
|
83
|
+
);
|
|
84
|
+
observerRef.current.addEventListener(
|
|
85
|
+
EWalletObserverEvents.DISCONNECT,
|
|
86
|
+
onDisconnect,
|
|
80
87
|
);
|
|
81
88
|
|
|
82
89
|
setEventListenersAttached(() => true);
|
|
@@ -88,19 +95,23 @@ export const useProviderWalletObserverRef = (
|
|
|
88
95
|
|
|
89
96
|
observerRef.current.removeEventListener(
|
|
90
97
|
EWalletObserverEvents.CONNECT_WALLET_START,
|
|
91
|
-
setConnectingStart
|
|
98
|
+
setConnectingStart,
|
|
92
99
|
);
|
|
93
100
|
observerRef.current.removeEventListener(
|
|
94
101
|
EWalletObserverEvents.CONNECT_WALLET_END,
|
|
95
|
-
setConnectingEnd
|
|
102
|
+
setConnectingEnd,
|
|
96
103
|
);
|
|
97
104
|
observerRef.current.removeEventListener(
|
|
98
105
|
EWalletObserverEvents.SYNCING_WALLET_START,
|
|
99
|
-
setSyncingStart
|
|
106
|
+
setSyncingStart,
|
|
100
107
|
);
|
|
101
108
|
observerRef.current.removeEventListener(
|
|
102
109
|
EWalletObserverEvents.SYNCING_WALLET_END,
|
|
103
|
-
setSyncingEnd
|
|
110
|
+
setSyncingEnd,
|
|
111
|
+
);
|
|
112
|
+
observerRef.current.removeEventListener(
|
|
113
|
+
EWalletObserverEvents.DISCONNECT,
|
|
114
|
+
onDisconnect,
|
|
104
115
|
);
|
|
105
116
|
};
|
|
106
117
|
}, [observerRef, hooks]);
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import type { TransactionUnspentOutput } from "@cardano-sdk/core/dist/cjs/Serialization/index.js";
|
|
2
2
|
import { AssetAmount, IAssetAmountMetadata } from "@sundaeswap/asset";
|
|
3
|
-
import {
|
|
4
|
-
useCallback,
|
|
5
|
-
useEffect,
|
|
6
|
-
useMemo,
|
|
7
|
-
useState,
|
|
8
|
-
useTransition,
|
|
9
|
-
} from "react";
|
|
3
|
+
import { useCallback, useEffect, useState, useTransition } from "react";
|
|
10
4
|
|
|
11
5
|
import {
|
|
12
6
|
TAssetAmountMap,
|
|
@@ -25,20 +19,20 @@ import { THandleMetadata } from "../../contexts/observer/index.js";
|
|
|
25
19
|
* @param {WalletObserver} observer
|
|
26
20
|
*/
|
|
27
21
|
export const useWalletObserverState = <
|
|
28
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
22
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
29
23
|
>(
|
|
30
|
-
observer: WalletObserver<AssetMetadata
|
|
24
|
+
observer: WalletObserver<AssetMetadata>,
|
|
31
25
|
) => {
|
|
32
26
|
const [activeWallet, setActiveWallet] =
|
|
33
27
|
useState<TSupportedWalletExtensions>();
|
|
34
28
|
const [adaBalance, setAdaBalance] = useState<AssetAmount<AssetMetadata>>(
|
|
35
|
-
new AssetAmount<AssetMetadata>(0n)
|
|
29
|
+
new AssetAmount<AssetMetadata>(0n),
|
|
36
30
|
);
|
|
37
31
|
const [handleMetadata, setHandleMetadata] = useState<
|
|
38
32
|
TAssetAmountMap<THandleMetadata<AssetMetadata>>
|
|
39
33
|
>(new WalletAssetMap<THandleMetadata<AssetMetadata>>());
|
|
40
34
|
const [balance, setBalance] = useState<WalletBalanceMap<AssetMetadata>>(
|
|
41
|
-
new WalletBalanceMap<AssetMetadata>(observer)
|
|
35
|
+
new WalletBalanceMap<AssetMetadata>(observer),
|
|
42
36
|
);
|
|
43
37
|
const [network, setNetwork] = useState<number | undefined>();
|
|
44
38
|
const [usedAddresses, setUsedAddresses] = useState<string[]>([]);
|
|
@@ -48,14 +42,11 @@ export const useWalletObserverState = <
|
|
|
48
42
|
const [isCip45, setIsCip45] = useState(false);
|
|
49
43
|
const [switching, setSwitching] = useState(false);
|
|
50
44
|
const [isPending, startTransition] = useTransition();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
observer.getOptions().persistence
|
|
57
|
-
),
|
|
58
|
-
[observer]
|
|
45
|
+
const [willAutoConnect, setWillAutoConnect] = useState(
|
|
46
|
+
Boolean(
|
|
47
|
+
window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY) &&
|
|
48
|
+
observer.getOptions().persistence,
|
|
49
|
+
),
|
|
59
50
|
);
|
|
60
51
|
|
|
61
52
|
const disconnect = useCallback(() => {
|
|
@@ -73,6 +64,7 @@ export const useWalletObserverState = <
|
|
|
73
64
|
setUtxos(undefined);
|
|
74
65
|
setCollateral(undefined);
|
|
75
66
|
setIsCip45(false);
|
|
67
|
+
setWillAutoConnect(false);
|
|
76
68
|
}, [observer]);
|
|
77
69
|
|
|
78
70
|
const syncWallet = useCallback(async () => {
|
|
@@ -90,40 +82,40 @@ export const useWalletObserverState = <
|
|
|
90
82
|
|
|
91
83
|
startTransition(() => {
|
|
92
84
|
setActiveWallet((prevWallet) =>
|
|
93
|
-
newWallet === prevWallet ? prevWallet : newWallet
|
|
85
|
+
newWallet === prevWallet ? prevWallet : newWallet,
|
|
94
86
|
);
|
|
95
87
|
|
|
96
88
|
const newAdaBalance = freshData.balanceMap.get(
|
|
97
|
-
WalletObserver.ADA_ASSET_ID
|
|
89
|
+
WalletObserver.ADA_ASSET_ID,
|
|
98
90
|
);
|
|
99
91
|
if (newAdaBalance) {
|
|
100
92
|
setAdaBalance((prevBalance) =>
|
|
101
93
|
prevBalance.amount === newAdaBalance.amount
|
|
102
94
|
? prevBalance
|
|
103
|
-
: newAdaBalance
|
|
95
|
+
: newAdaBalance,
|
|
104
96
|
);
|
|
105
97
|
}
|
|
106
98
|
|
|
107
99
|
setBalance((prevBalance) =>
|
|
108
100
|
areAssetMapsEqual(prevBalance, freshData.balanceMap)
|
|
109
101
|
? prevBalance
|
|
110
|
-
: freshData.balanceMap
|
|
102
|
+
: freshData.balanceMap,
|
|
111
103
|
);
|
|
112
104
|
|
|
113
105
|
setUsedAddresses((prevValue) =>
|
|
114
106
|
JSON.stringify(prevValue) === JSON.stringify(freshData.usedAddresses)
|
|
115
107
|
? prevValue
|
|
116
|
-
: freshData.usedAddresses
|
|
108
|
+
: freshData.usedAddresses,
|
|
117
109
|
);
|
|
118
110
|
|
|
119
111
|
setUnusedAddresses((prevValue) =>
|
|
120
112
|
JSON.stringify(prevValue) === JSON.stringify(freshData.unusedAddresses)
|
|
121
113
|
? prevValue
|
|
122
|
-
: freshData.unusedAddresses
|
|
114
|
+
: freshData.unusedAddresses,
|
|
123
115
|
);
|
|
124
116
|
|
|
125
117
|
setNetwork((prevValue) =>
|
|
126
|
-
prevValue === freshData.network ? prevValue : freshData.network
|
|
118
|
+
prevValue === freshData.network ? prevValue : freshData.network,
|
|
127
119
|
);
|
|
128
120
|
|
|
129
121
|
setUtxos((prevValue) => {
|
|
@@ -161,7 +153,7 @@ export const useWalletObserverState = <
|
|
|
161
153
|
setSwitching(() => false);
|
|
162
154
|
return observer.api;
|
|
163
155
|
},
|
|
164
|
-
[observer, setSwitching]
|
|
156
|
+
[observer, setSwitching],
|
|
165
157
|
);
|
|
166
158
|
|
|
167
159
|
/**
|
|
@@ -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-
|
|
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-
|
|
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-
|
|
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} />);
|
|
@@ -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
|
|
|
@@ -15,13 +15,14 @@ export type TWalletProviderHooks = {
|
|
|
15
15
|
onSyncWalletEnd?: () => void;
|
|
16
16
|
onConnectWalletStart?: () => void;
|
|
17
17
|
onConnectWalletEnd?: () => void;
|
|
18
|
+
onDisconnectWallet?: () => void;
|
|
18
19
|
};
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* The resolved internal props of the WalletObserverProvider.
|
|
22
23
|
*/
|
|
23
24
|
export interface IWalletObserverProviderState<
|
|
24
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
25
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
25
26
|
> {
|
|
26
27
|
observerOptions: TWalletObserverOptions<AssetMetadata>;
|
|
27
28
|
hooks: TWalletProviderHooks;
|
|
@@ -32,7 +33,7 @@ export interface IWalletObserverProviderState<
|
|
|
32
33
|
* The main WalletObserverProvider props.
|
|
33
34
|
*/
|
|
34
35
|
export interface IWalletObserverProviderProps<
|
|
35
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
36
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
36
37
|
> {
|
|
37
38
|
options?: Partial<IWalletObserverProviderState<AssetMetadata>>;
|
|
38
39
|
}
|
|
@@ -41,7 +42,7 @@ export interface IWalletObserverProviderProps<
|
|
|
41
42
|
* The WalletObserverProvider's internal state.
|
|
42
43
|
*/
|
|
43
44
|
export interface IWalletObserverState<
|
|
44
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
45
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
45
46
|
> {
|
|
46
47
|
observerRef: MutableRefObject<WalletObserver<AssetMetadata>>;
|
|
47
48
|
refreshInterval: number | false;
|
|
@@ -61,14 +62,14 @@ export interface IWalletObserverState<
|
|
|
61
62
|
* returned from the metadataResolver.
|
|
62
63
|
*/
|
|
63
64
|
export type THandleMetadata<
|
|
64
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
65
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
65
66
|
> = AssetMetadata & IHandle;
|
|
66
67
|
|
|
67
68
|
/**
|
|
68
69
|
* The exposed state of the WalletObserverProvider.
|
|
69
70
|
*/
|
|
70
71
|
export type TUseWalletObserverState<
|
|
71
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
72
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
72
73
|
> = Omit<
|
|
73
74
|
IWalletObserverState<AssetMetadata>["state"],
|
|
74
75
|
| "setActiveWallet"
|
|
@@ -15,7 +15,7 @@ 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
21
|
const [isPending, startTransition] = useTransition();
|
|
@@ -25,7 +25,7 @@ export const useWalletHandles = <
|
|
|
25
25
|
|
|
26
26
|
const memoizedHandleDep = useMemo(
|
|
27
27
|
() => [...state.balance.getHandles().keys()],
|
|
28
|
-
[state.balance]
|
|
28
|
+
[state.balance],
|
|
29
29
|
);
|
|
30
30
|
|
|
31
31
|
const syncHandles = useCallback<
|
|
@@ -63,12 +63,12 @@ export const useWalletHandles = <
|
|
|
63
63
|
.getAllDataBatch(
|
|
64
64
|
walletHandlesWithDataArray.map(([key]) => ({
|
|
65
65
|
value: key.split(".")[1],
|
|
66
|
-
}))
|
|
66
|
+
})),
|
|
67
67
|
);
|
|
68
68
|
|
|
69
69
|
walletHandlesWithDataArray.forEach(([key, asset]) => {
|
|
70
70
|
const matchingData = walletHandleDataArray.find(
|
|
71
|
-
({ hex }) => hex === key.split(".")[1]
|
|
71
|
+
({ hex }) => hex === key.split(".")[1],
|
|
72
72
|
) as IHandle;
|
|
73
73
|
|
|
74
74
|
walletHandles.set(
|
|
@@ -80,7 +80,7 @@ export const useWalletHandles = <
|
|
|
80
80
|
assetId: normalizeAssetIdWithDot(asset.metadata.assetId),
|
|
81
81
|
decimals: 0,
|
|
82
82
|
})
|
|
83
|
-
.withAmount(1n)
|
|
83
|
+
.withAmount(1n),
|
|
84
84
|
);
|
|
85
85
|
});
|
|
86
86
|
|
|
@@ -4,7 +4,7 @@ import { useMemo } from "react";
|
|
|
4
4
|
import { useWalletObserverContext } from "../contexts/observer/context.js";
|
|
5
5
|
|
|
6
6
|
export const useWalletLoadingState = <
|
|
7
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
7
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
8
8
|
>() => {
|
|
9
9
|
const { state } = useWalletObserverContext<AssetMetadata>();
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ export const useWalletLoadingState = <
|
|
|
14
14
|
syncingWallet: state.syncingWallet,
|
|
15
15
|
ready: state.ready,
|
|
16
16
|
}),
|
|
17
|
-
[state.ready, state.syncingWallet, state.connectingWallet]
|
|
17
|
+
[state.ready, state.syncingWallet, state.connectingWallet],
|
|
18
18
|
);
|
|
19
19
|
|
|
20
20
|
return result;
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
* @returns {Omit<TUseWalletObserverState<AssetMetadata>, "ready" | "connectingWallet" | "syncingWallet">}
|
|
13
13
|
*/
|
|
14
14
|
export const useWalletObserver = <
|
|
15
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
15
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
16
16
|
>(): Omit<
|
|
17
17
|
TUseWalletObserverState<AssetMetadata>,
|
|
18
18
|
"ready" | "connectingWallet" | "syncingWallet"
|
|
@@ -64,7 +64,7 @@ export const useWalletObserver = <
|
|
|
64
64
|
state.isPending,
|
|
65
65
|
state.handles,
|
|
66
66
|
state.willAutoConnect,
|
|
67
|
-
]
|
|
67
|
+
],
|
|
68
68
|
);
|
|
69
69
|
|
|
70
70
|
return result;
|
|
@@ -11,7 +11,7 @@ import { TGetPeerConnectInstance } from "../../@types/observer.js";
|
|
|
11
11
|
import { useWalletObserver } from "./useWalletObserver.js";
|
|
12
12
|
|
|
13
13
|
export const useWalletPeerConnect = <
|
|
14
|
-
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata
|
|
14
|
+
AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,
|
|
15
15
|
>() => {
|
|
16
16
|
const state = useWalletObserver<AssetMetadata>();
|
|
17
17
|
const [isPending, startTransition] = useTransition();
|