@dynamic-labs/sdk-react-core 2.2.2 → 2.2.4
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/CHANGELOG.md +22 -2
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +13 -13
- package/src/lib/Main.cjs +1 -0
- package/src/lib/Main.js +1 -0
- package/src/lib/context/DynamicContext/DynamicContext.cjs +2 -1
- package/src/lib/context/DynamicContext/DynamicContext.js +2 -1
- package/src/lib/context/WalletContext/WalletContext.cjs +1 -1
- package/src/lib/context/WalletContext/WalletContext.js +1 -1
- package/src/lib/context/WidgetRegistry/WidgetRegistryContextProvider.cjs +77 -0
- package/src/lib/context/WidgetRegistry/WidgetRegistryContextProvider.d.ts +6 -0
- package/src/lib/context/WidgetRegistry/WidgetRegistryContextProvider.js +71 -0
- package/src/lib/context/WidgetRegistry/index.d.ts +1 -0
- package/src/lib/data/api/wallets/wallets.cjs +2 -1
- package/src/lib/data/api/wallets/wallets.d.ts +2 -1
- package/src/lib/data/api/wallets/wallets.js +2 -1
- package/src/lib/events/dynamicEvents.d.ts +2 -1
- package/src/lib/events/multiWallet.d.ts +6 -0
- package/src/lib/locale/en/translation.cjs +2 -2
- package/src/lib/locale/en/translation.d.ts +1 -1
- package/src/lib/locale/en/translation.js +2 -2
- package/src/lib/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/hooks/events/useDynamicEvents/useDynamicEvents.d.ts +1 -1
- package/src/lib/utils/hooks/multiWallet/useVerifyOnAwaitingSignature/useVerifyOnAwaitingSignature.cjs +39 -13
- package/src/lib/utils/hooks/multiWallet/useVerifyOnAwaitingSignature/useVerifyOnAwaitingSignature.js +40 -14
- package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.cjs +3 -1
- package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.js +3 -1
- package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.cjs +6 -2
- package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.js +6 -2
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +1 -6
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +1 -6
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +69 -25
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +70 -26
- package/src/lib/utils/hooks/useWalletItemActions/useWalletItemActions.cjs +20 -1
- package/src/lib/utils/hooks/useWalletItemActions/useWalletItemActions.js +20 -1
- package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.cjs +4 -14
- package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.js +5 -15
- package/src/lib/views/SelectHardwareWalletView/SelectHardwareWalletView.cjs +1 -5
- package/src/lib/views/SelectHardwareWalletView/SelectHardwareWalletView.js +2 -6
- package/src/lib/views/WalletGroupView/WalletGroupView.cjs +1 -6
- package/src/lib/views/WalletGroupView/WalletGroupView.js +2 -7
- package/src/lib/widgets/DynamicMultiWalletPromptsWidget/DynamicMultiWalletPromptsWidget.cjs +5 -5
- package/src/lib/widgets/DynamicMultiWalletPromptsWidget/DynamicMultiWalletPromptsWidget.js +5 -5
- package/src/lib/widgets/DynamicWidget/components/DynamicUserProfile/DynamicUserProfile.cjs +4 -1
- package/src/lib/widgets/DynamicWidget/components/DynamicUserProfile/DynamicUserProfile.js +4 -1
- package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.cjs +1 -1
- package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.js +1 -1
|
@@ -2,7 +2,7 @@ import { DynamicEvents } from '../../../../events';
|
|
|
2
2
|
import { EventArgs } from '../types';
|
|
3
3
|
type DynamicEventListener<E extends keyof DynamicEvents> = (...args: EventArgs<DynamicEvents, E>) => void;
|
|
4
4
|
/** Allows us to subscribe to all dynamicEvents with a hook, even the internal ones */
|
|
5
|
-
export declare const useInternalDynamicEvents: <E extends keyof import("../../../../events/auth").AuthEvents | keyof import("../../../../events/ui").UIEvents | keyof import("../../../../events/otp").OTPEvents | keyof import("../../../../events/wallets").WalletEvents | keyof import("../../../../events/passkey").PasskeyEvents | "farcasterConnectCancelled" | keyof import("../../../../events/embeddedWallet").EmbeddedWalletEvents>(event: E, listener: DynamicEventListener<E>) => void;
|
|
5
|
+
export declare const useInternalDynamicEvents: <E extends keyof import("../../../../events/auth").AuthEvents | keyof import("../../../../events/ui").UIEvents | keyof import("../../../../events/otp").OTPEvents | keyof import("../../../../events/wallets").WalletEvents | keyof import("../../../../events/passkey").PasskeyEvents | "farcasterConnectCancelled" | keyof import("../../../../events/embeddedWallet").EmbeddedWalletEvents | "triggerComputePrimaryWalletMultiWalletStateFromAccounts">(event: E, listener: DynamicEventListener<E>) => void;
|
|
6
6
|
/** Allows subscribing to dynamic events directly inside components with a hook */
|
|
7
7
|
export declare const useDynamicEvents: <E extends "logout" | "emailVerificationResult" | "walletAdded" | "embeddedWalletCreated">(event: E, listener: DynamicEventListener<E>) => void;
|
|
8
8
|
export {};
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
|
+
var _tslib = require('../../../../../../_virtual/_tslib.cjs');
|
|
6
7
|
var React = require('react');
|
|
7
8
|
require('../../../../context/DynamicContext/DynamicContext.cjs');
|
|
8
9
|
require('@dynamic-labs/sdk-api-core');
|
|
@@ -17,8 +18,7 @@ require('../../../constants/values.cjs');
|
|
|
17
18
|
require('../../../../shared/utils/classes/storage/localStorage.cjs');
|
|
18
19
|
require('@dynamic-labs/utils');
|
|
19
20
|
require('../../../../shared/consts/index.cjs');
|
|
20
|
-
require('
|
|
21
|
-
require('../../../../../../_virtual/_tslib.cjs');
|
|
21
|
+
var useDynamicEvents = require('../../events/useDynamicEvents/useDynamicEvents.cjs');
|
|
22
22
|
var useConnectAndSign = require('../../authenticationHooks/useConnectAndSign/useConnectAndSign.cjs');
|
|
23
23
|
require('../../../../context/ErrorContext/ErrorContext.cjs');
|
|
24
24
|
require('../../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
|
|
@@ -32,6 +32,7 @@ require('viem');
|
|
|
32
32
|
require('viem/chains');
|
|
33
33
|
require('@dynamic-labs/store');
|
|
34
34
|
require('../../../../locale/locale.cjs');
|
|
35
|
+
require('../../../../events/dynamicEvents.cjs');
|
|
35
36
|
require('../../../../context/CaptchaContext/CaptchaContext.cjs');
|
|
36
37
|
require('../../../../context/VerificationContext/VerificationContext.cjs');
|
|
37
38
|
require('react-dom');
|
|
@@ -82,29 +83,54 @@ var useInternalDynamicContext = require('../../../../context/DynamicContext/useD
|
|
|
82
83
|
const useVerifyOnAwaitingSignature = () => {
|
|
83
84
|
const { awaitingSignatureState, multiWalletWidgetState, setMultiWalletWidgetState, legacyIsVerifying, setLegacyIsVerifying, selectedWalletConnector, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
84
85
|
const triggerConnectAndSign = useConnectAndSign.useConnectAndSign();
|
|
86
|
+
// this is to prevent calling runConnectAndSign multiple times
|
|
87
|
+
// due to changes in legacyIsVerifying
|
|
88
|
+
const isVerifying = React.useRef(false);
|
|
89
|
+
const runConnectAndSign = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
90
|
+
logger.logger.debug('runConnectAndSign', {
|
|
91
|
+
selectedWalletConnector,
|
|
92
|
+
});
|
|
93
|
+
if (!selectedWalletConnector) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
isVerifying.current = true;
|
|
97
|
+
setLegacyIsVerifying(true);
|
|
98
|
+
try {
|
|
99
|
+
yield triggerConnectAndSign({
|
|
100
|
+
walletConnector: selectedWalletConnector,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
logger.logger.error(e);
|
|
105
|
+
}
|
|
106
|
+
setMultiWalletWidgetState('idle');
|
|
107
|
+
setLegacyIsVerifying(false);
|
|
108
|
+
isVerifying.current = false;
|
|
109
|
+
}), [
|
|
110
|
+
selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
|
|
111
|
+
setLegacyIsVerifying,
|
|
112
|
+
setMultiWalletWidgetState,
|
|
113
|
+
triggerConnectAndSign,
|
|
114
|
+
]);
|
|
85
115
|
React.useEffect(() => {
|
|
86
116
|
if (!legacyIsVerifying &&
|
|
117
|
+
!isVerifying.current &&
|
|
87
118
|
multiWalletWidgetState === 'awaiting_signature' &&
|
|
88
119
|
selectedWalletConnector &&
|
|
89
120
|
awaitingSignatureState === 'linking_new_wallet' &&
|
|
90
121
|
!requiresTwoStepAuthentication.requiresTwoStepAuthentication(selectedWalletConnector)) {
|
|
91
|
-
|
|
92
|
-
triggerConnectAndSign({ walletConnector: selectedWalletConnector })
|
|
93
|
-
.catch((e) => {
|
|
94
|
-
logger.logger.error(e);
|
|
95
|
-
})
|
|
96
|
-
.finally(() => {
|
|
97
|
-
setMultiWalletWidgetState('idle');
|
|
98
|
-
setLegacyIsVerifying(false);
|
|
99
|
-
});
|
|
122
|
+
runConnectAndSign();
|
|
100
123
|
}
|
|
101
124
|
}, [
|
|
125
|
+
runConnectAndSign,
|
|
102
126
|
awaitingSignatureState,
|
|
103
|
-
|
|
127
|
+
legacyIsVerifying,
|
|
104
128
|
multiWalletWidgetState,
|
|
129
|
+
selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
|
|
130
|
+
setLegacyIsVerifying,
|
|
105
131
|
setMultiWalletWidgetState,
|
|
106
|
-
legacyIsVerifying,
|
|
107
132
|
]);
|
|
133
|
+
useDynamicEvents.useInternalDynamicEvents('triggerConnectAndSign', runConnectAndSign);
|
|
108
134
|
};
|
|
109
135
|
|
|
110
136
|
exports.useVerifyOnAwaitingSignature = useVerifyOnAwaitingSignature;
|
package/src/lib/utils/hooks/multiWallet/useVerifyOnAwaitingSignature/useVerifyOnAwaitingSignature.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
|
-
import {
|
|
2
|
+
import { __awaiter } from '../../../../../../_virtual/_tslib.js';
|
|
3
|
+
import { useRef, useCallback, useEffect } from 'react';
|
|
3
4
|
import '../../../../context/DynamicContext/DynamicContext.js';
|
|
4
5
|
import '@dynamic-labs/sdk-api-core';
|
|
5
6
|
import { logger } from '../../../../shared/logger.js';
|
|
@@ -13,8 +14,7 @@ import '../../../constants/values.js';
|
|
|
13
14
|
import '../../../../shared/utils/classes/storage/localStorage.js';
|
|
14
15
|
import '@dynamic-labs/utils';
|
|
15
16
|
import '../../../../shared/consts/index.js';
|
|
16
|
-
import '
|
|
17
|
-
import '../../../../../../_virtual/_tslib.js';
|
|
17
|
+
import { useInternalDynamicEvents } from '../../events/useDynamicEvents/useDynamicEvents.js';
|
|
18
18
|
import { useConnectAndSign } from '../../authenticationHooks/useConnectAndSign/useConnectAndSign.js';
|
|
19
19
|
import '../../../../context/ErrorContext/ErrorContext.js';
|
|
20
20
|
import '../../../../context/AccessDeniedContext/AccessDeniedContext.js';
|
|
@@ -28,6 +28,7 @@ import 'viem';
|
|
|
28
28
|
import 'viem/chains';
|
|
29
29
|
import '@dynamic-labs/store';
|
|
30
30
|
import '../../../../locale/locale.js';
|
|
31
|
+
import '../../../../events/dynamicEvents.js';
|
|
31
32
|
import '../../../../context/CaptchaContext/CaptchaContext.js';
|
|
32
33
|
import '../../../../context/VerificationContext/VerificationContext.js';
|
|
33
34
|
import 'react-dom';
|
|
@@ -78,29 +79,54 @@ import { useInternalDynamicContext } from '../../../../context/DynamicContext/us
|
|
|
78
79
|
const useVerifyOnAwaitingSignature = () => {
|
|
79
80
|
const { awaitingSignatureState, multiWalletWidgetState, setMultiWalletWidgetState, legacyIsVerifying, setLegacyIsVerifying, selectedWalletConnector, } = useInternalDynamicContext();
|
|
80
81
|
const triggerConnectAndSign = useConnectAndSign();
|
|
82
|
+
// this is to prevent calling runConnectAndSign multiple times
|
|
83
|
+
// due to changes in legacyIsVerifying
|
|
84
|
+
const isVerifying = useRef(false);
|
|
85
|
+
const runConnectAndSign = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
+
logger.debug('runConnectAndSign', {
|
|
87
|
+
selectedWalletConnector,
|
|
88
|
+
});
|
|
89
|
+
if (!selectedWalletConnector) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
isVerifying.current = true;
|
|
93
|
+
setLegacyIsVerifying(true);
|
|
94
|
+
try {
|
|
95
|
+
yield triggerConnectAndSign({
|
|
96
|
+
walletConnector: selectedWalletConnector,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
logger.error(e);
|
|
101
|
+
}
|
|
102
|
+
setMultiWalletWidgetState('idle');
|
|
103
|
+
setLegacyIsVerifying(false);
|
|
104
|
+
isVerifying.current = false;
|
|
105
|
+
}), [
|
|
106
|
+
selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
|
|
107
|
+
setLegacyIsVerifying,
|
|
108
|
+
setMultiWalletWidgetState,
|
|
109
|
+
triggerConnectAndSign,
|
|
110
|
+
]);
|
|
81
111
|
useEffect(() => {
|
|
82
112
|
if (!legacyIsVerifying &&
|
|
113
|
+
!isVerifying.current &&
|
|
83
114
|
multiWalletWidgetState === 'awaiting_signature' &&
|
|
84
115
|
selectedWalletConnector &&
|
|
85
116
|
awaitingSignatureState === 'linking_new_wallet' &&
|
|
86
117
|
!requiresTwoStepAuthentication(selectedWalletConnector)) {
|
|
87
|
-
|
|
88
|
-
triggerConnectAndSign({ walletConnector: selectedWalletConnector })
|
|
89
|
-
.catch((e) => {
|
|
90
|
-
logger.error(e);
|
|
91
|
-
})
|
|
92
|
-
.finally(() => {
|
|
93
|
-
setMultiWalletWidgetState('idle');
|
|
94
|
-
setLegacyIsVerifying(false);
|
|
95
|
-
});
|
|
118
|
+
runConnectAndSign();
|
|
96
119
|
}
|
|
97
120
|
}, [
|
|
121
|
+
runConnectAndSign,
|
|
98
122
|
awaitingSignatureState,
|
|
99
|
-
|
|
123
|
+
legacyIsVerifying,
|
|
100
124
|
multiWalletWidgetState,
|
|
125
|
+
selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
|
|
126
|
+
setLegacyIsVerifying,
|
|
101
127
|
setMultiWalletWidgetState,
|
|
102
|
-
legacyIsVerifying,
|
|
103
128
|
]);
|
|
129
|
+
useInternalDynamicEvents('triggerConnectAndSign', runConnectAndSign);
|
|
104
130
|
};
|
|
105
131
|
|
|
106
132
|
export { useVerifyOnAwaitingSignature };
|
|
@@ -46,6 +46,9 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
|
|
|
46
46
|
return;
|
|
47
47
|
yield wallets.unlinkWallet({
|
|
48
48
|
environmentId,
|
|
49
|
+
onSuccess: () => {
|
|
50
|
+
removedWalletsIds.current.push(walletId);
|
|
51
|
+
},
|
|
49
52
|
primaryWalletId: currentPrimaryWalletId,
|
|
50
53
|
walletId,
|
|
51
54
|
});
|
|
@@ -55,7 +58,6 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
|
|
|
55
58
|
if (numberOfLinkedWallets === 1) {
|
|
56
59
|
yield (wallet === null || wallet === void 0 ? void 0 : wallet.connector.endSession());
|
|
57
60
|
}
|
|
58
|
-
removedWalletsIds.current.push(walletId);
|
|
59
61
|
}), [
|
|
60
62
|
primaryWalletId,
|
|
61
63
|
environmentId,
|
|
@@ -42,6 +42,9 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
|
|
|
42
42
|
return;
|
|
43
43
|
yield unlinkWallet({
|
|
44
44
|
environmentId,
|
|
45
|
+
onSuccess: () => {
|
|
46
|
+
removedWalletsIds.current.push(walletId);
|
|
47
|
+
},
|
|
45
48
|
primaryWalletId: currentPrimaryWalletId,
|
|
46
49
|
walletId,
|
|
47
50
|
});
|
|
@@ -51,7 +54,6 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
|
|
|
51
54
|
if (numberOfLinkedWallets === 1) {
|
|
52
55
|
yield (wallet === null || wallet === void 0 ? void 0 : wallet.connector.endSession());
|
|
53
56
|
}
|
|
54
|
-
removedWalletsIds.current.push(walletId);
|
|
55
57
|
}), [
|
|
56
58
|
primaryWalletId,
|
|
57
59
|
environmentId,
|
|
@@ -26,7 +26,7 @@ require('@dynamic-labs/store');
|
|
|
26
26
|
require('../../../locale/locale.cjs');
|
|
27
27
|
var user = require('../../../data/api/user/user.cjs');
|
|
28
28
|
require('../../../context/DynamicContext/DynamicContext.cjs');
|
|
29
|
-
require('../../../events/dynamicEvents.cjs');
|
|
29
|
+
var dynamicEvents = require('../../../events/dynamicEvents.cjs');
|
|
30
30
|
require('../../../context/CaptchaContext/CaptchaContext.cjs');
|
|
31
31
|
require('../../../context/ErrorContext/ErrorContext.cjs');
|
|
32
32
|
require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
|
|
@@ -79,7 +79,7 @@ require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCa
|
|
|
79
79
|
var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
|
|
80
80
|
|
|
81
81
|
const useMergeUserAccounts = () => {
|
|
82
|
-
const { environmentId, setShowAuthFlow } = useInternalDynamicContext.useInternalDynamicContext();
|
|
82
|
+
const { environmentId, setShowAuthFlow, selectedWalletConnector } = useInternalDynamicContext.useInternalDynamicContext();
|
|
83
83
|
const { addedWalletsIds } = UserWalletsContext.useInternalUserWallets();
|
|
84
84
|
const mergeUserAccounts = (mergeConflictResolutions) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
85
85
|
const user$1 = yield user.verifyMergeUsers(environmentId, mergeConflictResolutions);
|
|
@@ -87,6 +87,10 @@ const useMergeUserAccounts = () => {
|
|
|
87
87
|
if (walletId) {
|
|
88
88
|
addedWalletsIds.current.push(walletId);
|
|
89
89
|
}
|
|
90
|
+
const accounts = yield (selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.getConnectedAccounts());
|
|
91
|
+
if (accounts === null || accounts === void 0 ? void 0 : accounts.length) {
|
|
92
|
+
dynamicEvents.dynamicEvents.emit('triggerComputePrimaryWalletMultiWalletStateFromAccounts', { accounts });
|
|
93
|
+
}
|
|
90
94
|
setShowAuthFlow(false);
|
|
91
95
|
});
|
|
92
96
|
return {
|
|
@@ -22,7 +22,7 @@ import '@dynamic-labs/store';
|
|
|
22
22
|
import '../../../locale/locale.js';
|
|
23
23
|
import { verifyMergeUsers } from '../../../data/api/user/user.js';
|
|
24
24
|
import '../../../context/DynamicContext/DynamicContext.js';
|
|
25
|
-
import '../../../events/dynamicEvents.js';
|
|
25
|
+
import { dynamicEvents } from '../../../events/dynamicEvents.js';
|
|
26
26
|
import '../../../context/CaptchaContext/CaptchaContext.js';
|
|
27
27
|
import '../../../context/ErrorContext/ErrorContext.js';
|
|
28
28
|
import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
|
|
@@ -75,7 +75,7 @@ import '../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCar
|
|
|
75
75
|
import { useInternalDynamicContext } from '../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
|
|
76
76
|
|
|
77
77
|
const useMergeUserAccounts = () => {
|
|
78
|
-
const { environmentId, setShowAuthFlow } = useInternalDynamicContext();
|
|
78
|
+
const { environmentId, setShowAuthFlow, selectedWalletConnector } = useInternalDynamicContext();
|
|
79
79
|
const { addedWalletsIds } = useInternalUserWallets();
|
|
80
80
|
const mergeUserAccounts = (mergeConflictResolutions) => __awaiter(void 0, void 0, void 0, function* () {
|
|
81
81
|
const user = yield verifyMergeUsers(environmentId, mergeConflictResolutions);
|
|
@@ -83,6 +83,10 @@ const useMergeUserAccounts = () => {
|
|
|
83
83
|
if (walletId) {
|
|
84
84
|
addedWalletsIds.current.push(walletId);
|
|
85
85
|
}
|
|
86
|
+
const accounts = yield (selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.getConnectedAccounts());
|
|
87
|
+
if (accounts === null || accounts === void 0 ? void 0 : accounts.length) {
|
|
88
|
+
dynamicEvents.emit('triggerComputePrimaryWalletMultiWalletStateFromAccounts', { accounts });
|
|
89
|
+
}
|
|
86
90
|
setShowAuthFlow(false);
|
|
87
91
|
});
|
|
88
92
|
return {
|
|
@@ -82,14 +82,9 @@ const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOption
|
|
|
82
82
|
const { setUserWallets } = UserWalletsContext.useInternalUserWallets();
|
|
83
83
|
// Keep userWallets in sync whenever linkedWallets changes
|
|
84
84
|
React.useEffect(() => {
|
|
85
|
-
// we don't want to set the user wallets until their connected states have been computed
|
|
86
|
-
// but that doesn't matter if the wallets list is empty, and if we return early when
|
|
87
|
-
// the wallets list is empty, we'll never set the user wallets correctly after logout
|
|
88
|
-
if (!didConnectedStateLoad.current && wallets.length)
|
|
89
|
-
return;
|
|
90
85
|
logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useWalletConnectors] will call setUserWallets', wallets);
|
|
91
86
|
setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets.updateUserWalletsFromLinkedWallets(userWallets, wallets));
|
|
92
|
-
}, [
|
|
87
|
+
}, [setUserWallets, wallets]);
|
|
93
88
|
const primaryWallet = React.useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
|
|
94
89
|
const secondaryWallets = React.useMemo(() => canHaveMultipleWalletsConnected
|
|
95
90
|
? wallets.filter((wallet) => wallet.id !== primaryWalletId)
|
|
@@ -78,14 +78,9 @@ const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOption
|
|
|
78
78
|
const { setUserWallets } = useInternalUserWallets();
|
|
79
79
|
// Keep userWallets in sync whenever linkedWallets changes
|
|
80
80
|
useEffect(() => {
|
|
81
|
-
// we don't want to set the user wallets until their connected states have been computed
|
|
82
|
-
// but that doesn't matter if the wallets list is empty, and if we return early when
|
|
83
|
-
// the wallets list is empty, we'll never set the user wallets correctly after logout
|
|
84
|
-
if (!didConnectedStateLoad.current && wallets.length)
|
|
85
|
-
return;
|
|
86
81
|
logVerboseTroubleshootingMessage('[useWalletConnectors] will call setUserWallets', wallets);
|
|
87
82
|
setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets(userWallets, wallets));
|
|
88
|
-
}, [
|
|
83
|
+
}, [setUserWallets, wallets]);
|
|
89
84
|
const primaryWallet = useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
|
|
90
85
|
const secondaryWallets = useMemo(() => canHaveMultipleWalletsConnected
|
|
91
86
|
? wallets.filter((wallet) => wallet.id !== primaryWalletId)
|
|
@@ -17,8 +17,17 @@ require('../../constants/values.cjs');
|
|
|
17
17
|
require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
18
18
|
require('@dynamic-labs/utils');
|
|
19
19
|
require('../../../shared/consts/index.cjs');
|
|
20
|
-
require('
|
|
20
|
+
var useDynamicEvents = require('../events/useDynamicEvents/useDynamicEvents.cjs');
|
|
21
21
|
var useWalletConnectorEvent = require('../events/useWalletConnectorEvent/useWalletConnectorEvent.cjs');
|
|
22
|
+
require('@dynamic-labs/multi-wallet');
|
|
23
|
+
require('react-international-phone');
|
|
24
|
+
require('viem');
|
|
25
|
+
require('viem/chains');
|
|
26
|
+
require('../../../config/ApiEndpoint.cjs');
|
|
27
|
+
require('@dynamic-labs/store');
|
|
28
|
+
require('../../../locale/locale.cjs');
|
|
29
|
+
var logVerboseTroubleshootingMessage = require('../../functions/logVerboseTroubleshootingMessage/logVerboseTroubleshootingMessage.cjs');
|
|
30
|
+
var dynamicEvents = require('../../../events/dynamicEvents.cjs');
|
|
22
31
|
|
|
23
32
|
const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
|
|
24
33
|
useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
|
|
@@ -32,9 +41,46 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
32
41
|
}
|
|
33
42
|
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
34
43
|
});
|
|
35
|
-
|
|
36
|
-
logger.logger.debug('
|
|
44
|
+
const handleAccountChangeWhenAwaitingAccountSwitch = React.useCallback((isPrimaryWallet, newAddress) => {
|
|
45
|
+
logger.logger.debug('handleAccountChangeWhenAwaitingAccountSwitch', {
|
|
46
|
+
isPrimaryWallet,
|
|
47
|
+
newAddress,
|
|
48
|
+
});
|
|
49
|
+
const linkedSecondaryWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
50
|
+
logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[handleAccountChangeWhenAwaitingAccountSwitch]', { linkedSecondaryWallet });
|
|
51
|
+
// this means the user is linking a new account, so we need proof of ownership...
|
|
52
|
+
if (!linkedSecondaryWallet) {
|
|
53
|
+
setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
|
|
54
|
+
if (isPrimaryWallet && primaryWallet) {
|
|
55
|
+
setSelectedWalletConnectorKey(primaryWallet.connector.key);
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const isTryingToUpdateUnkownWallet = linkedSecondaryWallet.connector.key === 'unknown';
|
|
60
|
+
if (isTryingToUpdateUnkownWallet) {
|
|
61
|
+
//prompt the user to connect and sign with the wallet
|
|
62
|
+
dynamicEvents.dynamicEvents.emit('triggerConnectAndSign');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// ...otherwise, the user is switching primary accounts betweeen the same wallet
|
|
66
|
+
setSelectedWalletWithAction(null);
|
|
67
|
+
setPrimaryWalletId(linkedSecondaryWallet.id);
|
|
68
|
+
setMultiWalletWidgetState('idle');
|
|
69
|
+
}, [
|
|
70
|
+
setMultiWalletWidgetState,
|
|
71
|
+
primaryWallet,
|
|
72
|
+
secondaryWallets,
|
|
73
|
+
setSelectedWalletConnectorKey,
|
|
74
|
+
setSelectedWalletWithAction,
|
|
75
|
+
setPrimaryWalletId,
|
|
76
|
+
]);
|
|
77
|
+
const calculatePrimaryWalletMultiWalletStateFromAccounts = React.useCallback(({ accounts }) => {
|
|
78
|
+
logger.logger.debug('calculatePrimaryWalletMultiWalletStateFromAccounts', {
|
|
37
79
|
accounts,
|
|
80
|
+
authMode,
|
|
81
|
+
multiWallet,
|
|
82
|
+
multiWalletWidgetState,
|
|
83
|
+
primaryWallet,
|
|
38
84
|
});
|
|
39
85
|
// change the api here
|
|
40
86
|
if (!primaryWallet)
|
|
@@ -74,6 +120,26 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
74
120
|
logger.logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
|
|
75
121
|
setMultiWalletWidgetState('idle');
|
|
76
122
|
}
|
|
123
|
+
}, [
|
|
124
|
+
authMode,
|
|
125
|
+
handleAccountChangeWhenAwaitingAccountSwitch,
|
|
126
|
+
multiWallet,
|
|
127
|
+
multiWalletWidgetState,
|
|
128
|
+
primaryWallet,
|
|
129
|
+
refreshConnectedWallet,
|
|
130
|
+
secondaryWallets,
|
|
131
|
+
setMultiWalletWidgetState,
|
|
132
|
+
setPrimaryWalletId,
|
|
133
|
+
setSelectedWalletConnectorKey,
|
|
134
|
+
setSelectedWalletWithAction,
|
|
135
|
+
user,
|
|
136
|
+
]);
|
|
137
|
+
useDynamicEvents.useInternalDynamicEvents('triggerComputePrimaryWalletMultiWalletStateFromAccounts', calculatePrimaryWalletMultiWalletStateFromAccounts);
|
|
138
|
+
useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => {
|
|
139
|
+
logger.logger.debug('primary wallet account change', {
|
|
140
|
+
accounts,
|
|
141
|
+
});
|
|
142
|
+
calculatePrimaryWalletMultiWalletStateFromAccounts({ accounts });
|
|
77
143
|
});
|
|
78
144
|
const uniqueNonPrimaryWallets = React.useMemo(() => {
|
|
79
145
|
const primaryConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
|
|
@@ -117,28 +183,6 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
117
183
|
}
|
|
118
184
|
}
|
|
119
185
|
});
|
|
120
|
-
const handleAccountChangeWhenAwaitingAccountSwitch = React.useCallback((isPrimaryWallet, newAddress) => {
|
|
121
|
-
const linkedSecondaryWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
122
|
-
// this means the user is linking a new account, so we need proof of ownership...
|
|
123
|
-
if (!linkedSecondaryWallet) {
|
|
124
|
-
setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
|
|
125
|
-
if (isPrimaryWallet && primaryWallet) {
|
|
126
|
-
setSelectedWalletConnectorKey(primaryWallet.connector.key);
|
|
127
|
-
}
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
// ...otherwise, the user is switching primary accounts betweeen the same wallet
|
|
131
|
-
setSelectedWalletWithAction(null);
|
|
132
|
-
setPrimaryWalletId(linkedSecondaryWallet.id);
|
|
133
|
-
setMultiWalletWidgetState('idle');
|
|
134
|
-
}, [
|
|
135
|
-
setMultiWalletWidgetState,
|
|
136
|
-
primaryWallet,
|
|
137
|
-
secondaryWallets,
|
|
138
|
-
setSelectedWalletConnectorKey,
|
|
139
|
-
setSelectedWalletWithAction,
|
|
140
|
-
setPrimaryWalletId,
|
|
141
|
-
]);
|
|
142
186
|
};
|
|
143
187
|
|
|
144
188
|
exports.useWalletEventListeners = useWalletEventListeners;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
3
|
-
import {
|
|
3
|
+
import { useCallback, useMemo } from 'react';
|
|
4
4
|
import { isSameAddress } from '@dynamic-labs/wallet-connector-core';
|
|
5
5
|
import '@dynamic-labs/sdk-api-core';
|
|
6
6
|
import { logger } from '../../../shared/logger.js';
|
|
@@ -13,8 +13,17 @@ import '../../constants/values.js';
|
|
|
13
13
|
import '../../../shared/utils/classes/storage/localStorage.js';
|
|
14
14
|
import '@dynamic-labs/utils';
|
|
15
15
|
import '../../../shared/consts/index.js';
|
|
16
|
-
import '
|
|
16
|
+
import { useInternalDynamicEvents } from '../events/useDynamicEvents/useDynamicEvents.js';
|
|
17
17
|
import { useWalletConnectorEvent } from '../events/useWalletConnectorEvent/useWalletConnectorEvent.js';
|
|
18
|
+
import '@dynamic-labs/multi-wallet';
|
|
19
|
+
import 'react-international-phone';
|
|
20
|
+
import 'viem';
|
|
21
|
+
import 'viem/chains';
|
|
22
|
+
import '../../../config/ApiEndpoint.js';
|
|
23
|
+
import '@dynamic-labs/store';
|
|
24
|
+
import '../../../locale/locale.js';
|
|
25
|
+
import { logVerboseTroubleshootingMessage } from '../../functions/logVerboseTroubleshootingMessage/logVerboseTroubleshootingMessage.js';
|
|
26
|
+
import { dynamicEvents } from '../../../events/dynamicEvents.js';
|
|
18
27
|
|
|
19
28
|
const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
|
|
20
29
|
useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
|
|
@@ -28,9 +37,46 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
28
37
|
}
|
|
29
38
|
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
30
39
|
});
|
|
31
|
-
|
|
32
|
-
logger.debug('
|
|
40
|
+
const handleAccountChangeWhenAwaitingAccountSwitch = useCallback((isPrimaryWallet, newAddress) => {
|
|
41
|
+
logger.debug('handleAccountChangeWhenAwaitingAccountSwitch', {
|
|
42
|
+
isPrimaryWallet,
|
|
43
|
+
newAddress,
|
|
44
|
+
});
|
|
45
|
+
const linkedSecondaryWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
46
|
+
logVerboseTroubleshootingMessage('[handleAccountChangeWhenAwaitingAccountSwitch]', { linkedSecondaryWallet });
|
|
47
|
+
// this means the user is linking a new account, so we need proof of ownership...
|
|
48
|
+
if (!linkedSecondaryWallet) {
|
|
49
|
+
setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
|
|
50
|
+
if (isPrimaryWallet && primaryWallet) {
|
|
51
|
+
setSelectedWalletConnectorKey(primaryWallet.connector.key);
|
|
52
|
+
}
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const isTryingToUpdateUnkownWallet = linkedSecondaryWallet.connector.key === 'unknown';
|
|
56
|
+
if (isTryingToUpdateUnkownWallet) {
|
|
57
|
+
//prompt the user to connect and sign with the wallet
|
|
58
|
+
dynamicEvents.emit('triggerConnectAndSign');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// ...otherwise, the user is switching primary accounts betweeen the same wallet
|
|
62
|
+
setSelectedWalletWithAction(null);
|
|
63
|
+
setPrimaryWalletId(linkedSecondaryWallet.id);
|
|
64
|
+
setMultiWalletWidgetState('idle');
|
|
65
|
+
}, [
|
|
66
|
+
setMultiWalletWidgetState,
|
|
67
|
+
primaryWallet,
|
|
68
|
+
secondaryWallets,
|
|
69
|
+
setSelectedWalletConnectorKey,
|
|
70
|
+
setSelectedWalletWithAction,
|
|
71
|
+
setPrimaryWalletId,
|
|
72
|
+
]);
|
|
73
|
+
const calculatePrimaryWalletMultiWalletStateFromAccounts = useCallback(({ accounts }) => {
|
|
74
|
+
logger.debug('calculatePrimaryWalletMultiWalletStateFromAccounts', {
|
|
33
75
|
accounts,
|
|
76
|
+
authMode,
|
|
77
|
+
multiWallet,
|
|
78
|
+
multiWalletWidgetState,
|
|
79
|
+
primaryWallet,
|
|
34
80
|
});
|
|
35
81
|
// change the api here
|
|
36
82
|
if (!primaryWallet)
|
|
@@ -70,6 +116,26 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
70
116
|
logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
|
|
71
117
|
setMultiWalletWidgetState('idle');
|
|
72
118
|
}
|
|
119
|
+
}, [
|
|
120
|
+
authMode,
|
|
121
|
+
handleAccountChangeWhenAwaitingAccountSwitch,
|
|
122
|
+
multiWallet,
|
|
123
|
+
multiWalletWidgetState,
|
|
124
|
+
primaryWallet,
|
|
125
|
+
refreshConnectedWallet,
|
|
126
|
+
secondaryWallets,
|
|
127
|
+
setMultiWalletWidgetState,
|
|
128
|
+
setPrimaryWalletId,
|
|
129
|
+
setSelectedWalletConnectorKey,
|
|
130
|
+
setSelectedWalletWithAction,
|
|
131
|
+
user,
|
|
132
|
+
]);
|
|
133
|
+
useInternalDynamicEvents('triggerComputePrimaryWalletMultiWalletStateFromAccounts', calculatePrimaryWalletMultiWalletStateFromAccounts);
|
|
134
|
+
useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => {
|
|
135
|
+
logger.debug('primary wallet account change', {
|
|
136
|
+
accounts,
|
|
137
|
+
});
|
|
138
|
+
calculatePrimaryWalletMultiWalletStateFromAccounts({ accounts });
|
|
73
139
|
});
|
|
74
140
|
const uniqueNonPrimaryWallets = useMemo(() => {
|
|
75
141
|
const primaryConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
|
|
@@ -113,28 +179,6 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
|
|
|
113
179
|
}
|
|
114
180
|
}
|
|
115
181
|
});
|
|
116
|
-
const handleAccountChangeWhenAwaitingAccountSwitch = useCallback((isPrimaryWallet, newAddress) => {
|
|
117
|
-
const linkedSecondaryWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
118
|
-
// this means the user is linking a new account, so we need proof of ownership...
|
|
119
|
-
if (!linkedSecondaryWallet) {
|
|
120
|
-
setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
|
|
121
|
-
if (isPrimaryWallet && primaryWallet) {
|
|
122
|
-
setSelectedWalletConnectorKey(primaryWallet.connector.key);
|
|
123
|
-
}
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
// ...otherwise, the user is switching primary accounts betweeen the same wallet
|
|
127
|
-
setSelectedWalletWithAction(null);
|
|
128
|
-
setPrimaryWalletId(linkedSecondaryWallet.id);
|
|
129
|
-
setMultiWalletWidgetState('idle');
|
|
130
|
-
}, [
|
|
131
|
-
setMultiWalletWidgetState,
|
|
132
|
-
primaryWallet,
|
|
133
|
-
secondaryWallets,
|
|
134
|
-
setSelectedWalletConnectorKey,
|
|
135
|
-
setSelectedWalletWithAction,
|
|
136
|
-
setPrimaryWalletId,
|
|
137
|
-
]);
|
|
138
182
|
};
|
|
139
183
|
|
|
140
184
|
export { useWalletEventListeners };
|