@dynamic-labs/sdk-react-core 1.0.6 → 1.0.8
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 +19 -0
- package/package.cjs +3 -3
- package/package.js +3 -3
- package/package.json +12 -12
- package/src/index.cjs +10 -8
- package/src/index.js +5 -4
- package/src/lib/Main.cjs +1 -1
- package/src/lib/Main.js +1 -1
- package/src/lib/components/InlineWidget/components/InlineWidgetButton/InlineWidgetButton.d.ts +2 -1
- package/src/lib/components/MenuList/Dropdown/Dropdown.cjs +1 -1
- package/src/lib/components/MenuList/Dropdown/Dropdown.js +1 -1
- package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.cjs +2 -2
- package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.js +2 -2
- package/src/lib/components/WalletInformationCard/WalletInformationCard.cjs +3 -1
- package/src/lib/components/WalletInformationCard/WalletInformationCard.d.ts +2 -1
- package/src/lib/components/WalletInformationCard/WalletInformationCard.js +3 -1
- package/src/lib/context/DynamicContext/DynamicContext.cjs +2 -2
- package/src/lib/context/DynamicContext/DynamicContext.js +2 -2
- package/src/lib/data/api.cjs +2 -2
- package/src/lib/data/api.d.ts +1 -0
- package/src/lib/data/api.js +2 -2
- package/src/lib/locale/en/translation.cjs +34 -0
- package/src/lib/locale/en/translation.d.ts +34 -0
- package/src/lib/locale/en/translation.js +34 -0
- package/src/lib/shared/utils/hooks/index.d.ts +5 -4
- package/src/lib/shared/utils/hooks/useThrottle/index.d.ts +1 -0
- package/src/lib/shared/utils/hooks/useThrottle/useThrottle.cjs +29 -0
- package/src/lib/shared/utils/hooks/useThrottle/useThrottle.d.ts +8 -0
- package/src/lib/shared/utils/hooks/useThrottle/useThrottle.js +25 -0
- package/src/lib/utils/functions/getWalletIdentifier/getWalletIdentifier.cjs +1 -1
- package/src/lib/utils/functions/getWalletIdentifier/getWalletIdentifier.d.ts +1 -1
- package/src/lib/utils/functions/getWalletIdentifier/getWalletIdentifier.js +1 -1
- package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.cjs +13 -2
- package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.js +13 -2
- package/src/lib/utils/hooks/useColorSchemePreference/useColorSchemePreference.cjs +1 -1
- package/src/lib/utils/hooks/useColorSchemePreference/useColorSchemePreference.js +1 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +14 -6
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +14 -6
- package/src/lib/utils/hooks/useFetchProjectSettings/useFetchProjectSettings.cjs +15 -1
- package/src/lib/utils/hooks/useFetchProjectSettings/useFetchProjectSettings.js +16 -2
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +8 -8
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +8 -8
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +4 -3
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +4 -3
- package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.cjs +65 -45
- package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.d.ts +5 -7
- package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.js +66 -46
- package/src/lib/widgets/DynamicBridgeWidget/DynamicBridgeWidget.cjs +3 -2
- package/src/lib/widgets/DynamicBridgeWidget/DynamicBridgeWidget.js +3 -2
- package/src/lib/widgets/DynamicBridgeWidget/components/DynamicBridgeWalletCard/DynamicBridgeWalletCard.cjs +10 -5
- package/src/lib/widgets/DynamicBridgeWidget/components/DynamicBridgeWalletCard/DynamicBridgeWalletCard.js +11 -6
- package/src/lib/widgets/DynamicBridgeWidget/components/DynamicBridgeWalletCardBody/DynamicBridgeWalletCardBody.cjs +6 -5
- package/src/lib/widgets/DynamicBridgeWidget/components/DynamicBridgeWalletCardBody/DynamicBridgeWalletCardBody.js +6 -5
- package/src/lib/widgets/DynamicBridgeWidget/components/DynamicBridgeWidgetEmptyCard/DynamicBridgeWidgetEmptyCard.cjs +5 -2
- package/src/lib/widgets/DynamicBridgeWidget/components/DynamicBridgeWidgetEmptyCard/DynamicBridgeWidgetEmptyCard.js +5 -2
- package/src/lib/widgets/DynamicBridgeWidget/views/ProfileView/ProfileView.cjs +3 -1
- package/src/lib/widgets/DynamicBridgeWidget/views/ProfileView/ProfileView.js +3 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* useThrottle hook to throttle a callback function.
|
|
9
|
+
*
|
|
10
|
+
* @param callback - The callback function to be throttled. It must return void.
|
|
11
|
+
* @param delay - The time in milliseconds to wait before the next call.
|
|
12
|
+
* @returns A throttled version of the callback function.
|
|
13
|
+
*/
|
|
14
|
+
const useThrottle = (callback, delay) => {
|
|
15
|
+
const isThrottled = React.useRef(false);
|
|
16
|
+
const savedCallback = React.useRef(callback);
|
|
17
|
+
// Remember the latest callback if it changes.
|
|
18
|
+
savedCallback.current = callback;
|
|
19
|
+
return React.useCallback((...args) => {
|
|
20
|
+
if (!isThrottled.current) {
|
|
21
|
+
savedCallback.current(...args);
|
|
22
|
+
isThrottled.current = true;
|
|
23
|
+
// Set the throttle off after the delay
|
|
24
|
+
setTimeout(() => (isThrottled.current = false), delay);
|
|
25
|
+
}
|
|
26
|
+
}, [delay]);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
exports.useThrottle = useThrottle;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useThrottle hook to throttle a callback function.
|
|
3
|
+
*
|
|
4
|
+
* @param callback - The callback function to be throttled. It must return void.
|
|
5
|
+
* @param delay - The time in milliseconds to wait before the next call.
|
|
6
|
+
* @returns A throttled version of the callback function.
|
|
7
|
+
*/
|
|
8
|
+
export declare const useThrottle: <T extends (...args: unknown[]) => void>(callback: T, delay: number) => (...args: Parameters<T>) => void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useRef, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* useThrottle hook to throttle a callback function.
|
|
5
|
+
*
|
|
6
|
+
* @param callback - The callback function to be throttled. It must return void.
|
|
7
|
+
* @param delay - The time in milliseconds to wait before the next call.
|
|
8
|
+
* @returns A throttled version of the callback function.
|
|
9
|
+
*/
|
|
10
|
+
const useThrottle = (callback, delay) => {
|
|
11
|
+
const isThrottled = useRef(false);
|
|
12
|
+
const savedCallback = useRef(callback);
|
|
13
|
+
// Remember the latest callback if it changes.
|
|
14
|
+
savedCallback.current = callback;
|
|
15
|
+
return useCallback((...args) => {
|
|
16
|
+
if (!isThrottled.current) {
|
|
17
|
+
savedCallback.current(...args);
|
|
18
|
+
isThrottled.current = true;
|
|
19
|
+
// Set the throttle off after the delay
|
|
20
|
+
setTimeout(() => (isThrottled.current = false), delay);
|
|
21
|
+
}
|
|
22
|
+
}, [delay]);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { useThrottle };
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
const getWalletIdentifier = ({ address, connector }) => `${address}+${connector.key}`;
|
|
5
|
+
const getWalletIdentifier = ({ address, connector, }) => `${address}+${connector.key}`;
|
|
6
6
|
|
|
7
7
|
exports.getWalletIdentifier = getWalletIdentifier;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Wallet } from '../../../shared';
|
|
2
|
-
export declare const getWalletIdentifier: ({ address, connector }: Wallet) => `${string}+${string}`;
|
|
2
|
+
export declare const getWalletIdentifier: ({ address, connector, }: Pick<Wallet, 'address' | 'connector'>) => `${string}+${string}`;
|
|
@@ -9,6 +9,15 @@ var isWalletLinked = require('../../../functions/isWalletLinked/isWalletLinked.c
|
|
|
9
9
|
var ViewContext = require('../../../../context/ViewContext/ViewContext.cjs');
|
|
10
10
|
var useInternalDynamicContext = require('../../../../context/DynamicContext/useInternalDynamicContext.cjs');
|
|
11
11
|
var errors = require('../../../constants/errors.cjs');
|
|
12
|
+
require('@dynamic-labs/sdk-api');
|
|
13
|
+
var logger = require('../../../../shared/logger.cjs');
|
|
14
|
+
require('@dynamic-labs/iconic');
|
|
15
|
+
require('react/jsx-runtime');
|
|
16
|
+
require('@dynamic-labs/wallet-book');
|
|
17
|
+
require('../../../constants/colors.cjs');
|
|
18
|
+
require('../../../../shared/utils/classes/storage/localStorage.cjs');
|
|
19
|
+
require('viem');
|
|
20
|
+
require('../../../../shared/consts/index.cjs');
|
|
12
21
|
|
|
13
22
|
const useSyncPrimaryWallet = (canSync = true) => {
|
|
14
23
|
const { setShowAuthFlow, isAuthenticated, authMode, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, secondaryWallets, setMultiWalletWidgetState, setPrimaryWallet, setShowWidgetStatePopup, showLockedWalletView, showWidgetStatePopup, setSelectedWalletWithAction, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
@@ -76,6 +85,10 @@ const useSyncPrimaryWallet = (canSync = true) => {
|
|
|
76
85
|
primaryWallet.connector
|
|
77
86
|
.getConnectedAccounts()
|
|
78
87
|
.then((accounts) => {
|
|
88
|
+
logger.logger.debug('Sync primary wallet - getConnectedAccounts', {
|
|
89
|
+
accounts,
|
|
90
|
+
primaryWalletAddress: primaryWallet.address,
|
|
91
|
+
});
|
|
79
92
|
const [connectedAddress] = accounts;
|
|
80
93
|
if (!connectedAddress) {
|
|
81
94
|
throw new utils.DynamicError('Missing wallet address', errors.MISSING_ADDRESS_ERROR);
|
|
@@ -100,9 +113,7 @@ const useSyncPrimaryWallet = (canSync = true) => {
|
|
|
100
113
|
if (showLockedWalletView) {
|
|
101
114
|
setShowAuthFlow(true);
|
|
102
115
|
setView('wallet-locked-view');
|
|
103
|
-
return;
|
|
104
116
|
}
|
|
105
|
-
handleLogOut();
|
|
106
117
|
}
|
|
107
118
|
});
|
|
108
119
|
}, [
|
|
@@ -5,6 +5,15 @@ import { isWalletLinked } from '../../../functions/isWalletLinked/isWalletLinked
|
|
|
5
5
|
import { useViewContext } from '../../../../context/ViewContext/ViewContext.js';
|
|
6
6
|
import { useInternalDynamicContext } from '../../../../context/DynamicContext/useInternalDynamicContext.js';
|
|
7
7
|
import { MISSING_ADDRESS_ERROR } from '../../../constants/errors.js';
|
|
8
|
+
import '@dynamic-labs/sdk-api';
|
|
9
|
+
import { logger } from '../../../../shared/logger.js';
|
|
10
|
+
import '@dynamic-labs/iconic';
|
|
11
|
+
import 'react/jsx-runtime';
|
|
12
|
+
import '@dynamic-labs/wallet-book';
|
|
13
|
+
import '../../../constants/colors.js';
|
|
14
|
+
import '../../../../shared/utils/classes/storage/localStorage.js';
|
|
15
|
+
import 'viem';
|
|
16
|
+
import '../../../../shared/consts/index.js';
|
|
8
17
|
|
|
9
18
|
const useSyncPrimaryWallet = (canSync = true) => {
|
|
10
19
|
const { setShowAuthFlow, isAuthenticated, authMode, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, secondaryWallets, setMultiWalletWidgetState, setPrimaryWallet, setShowWidgetStatePopup, showLockedWalletView, showWidgetStatePopup, setSelectedWalletWithAction, } = useInternalDynamicContext();
|
|
@@ -72,6 +81,10 @@ const useSyncPrimaryWallet = (canSync = true) => {
|
|
|
72
81
|
primaryWallet.connector
|
|
73
82
|
.getConnectedAccounts()
|
|
74
83
|
.then((accounts) => {
|
|
84
|
+
logger.debug('Sync primary wallet - getConnectedAccounts', {
|
|
85
|
+
accounts,
|
|
86
|
+
primaryWalletAddress: primaryWallet.address,
|
|
87
|
+
});
|
|
75
88
|
const [connectedAddress] = accounts;
|
|
76
89
|
if (!connectedAddress) {
|
|
77
90
|
throw new DynamicError('Missing wallet address', MISSING_ADDRESS_ERROR);
|
|
@@ -96,9 +109,7 @@ const useSyncPrimaryWallet = (canSync = true) => {
|
|
|
96
109
|
if (showLockedWalletView) {
|
|
97
110
|
setShowAuthFlow(true);
|
|
98
111
|
setView('wallet-locked-view');
|
|
99
|
-
return;
|
|
100
112
|
}
|
|
101
|
-
handleLogOut();
|
|
102
113
|
}
|
|
103
114
|
});
|
|
104
115
|
}, [
|
|
@@ -13,8 +13,8 @@ require('@dynamic-labs/wallet-book');
|
|
|
13
13
|
require('../../constants/colors.cjs');
|
|
14
14
|
require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
15
15
|
require('viem');
|
|
16
|
-
require('@dynamic-labs/utils');
|
|
17
16
|
var useMediaQuery = require('../../../shared/utils/hooks/useMediaQuery/useMediaQuery.cjs');
|
|
17
|
+
require('@dynamic-labs/utils');
|
|
18
18
|
require('../../../shared/consts/index.cjs');
|
|
19
19
|
|
|
20
20
|
const useColorSchemePreference = () => {
|
|
@@ -9,8 +9,8 @@ import '@dynamic-labs/wallet-book';
|
|
|
9
9
|
import '../../constants/colors.js';
|
|
10
10
|
import '../../../shared/utils/classes/storage/localStorage.js';
|
|
11
11
|
import 'viem';
|
|
12
|
-
import '@dynamic-labs/utils';
|
|
13
12
|
import { useMediaQuery } from '../../../shared/utils/hooks/useMediaQuery/useMediaQuery.js';
|
|
13
|
+
import '@dynamic-labs/utils';
|
|
14
14
|
import '../../../shared/consts/index.js';
|
|
15
15
|
|
|
16
16
|
const useColorSchemePreference = () => {
|
|
@@ -61,7 +61,7 @@ const useEmbeddedWallet = () => {
|
|
|
61
61
|
internalSetShowAuthFlow,
|
|
62
62
|
internalEvents,
|
|
63
63
|
]);
|
|
64
|
-
const startEmbeddedWalletCreationFlow = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
const startEmbeddedWalletCreationFlow = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
65
65
|
internalSetShowAuthFlow(true);
|
|
66
66
|
setView('passkey-intro');
|
|
67
67
|
return new Promise((resolve, reject) => {
|
|
@@ -70,15 +70,16 @@ const useEmbeddedWallet = () => {
|
|
|
70
70
|
// when creating a passkey, if user cancels the passkey modal more than once
|
|
71
71
|
// it will throw this DOMException, but we don't want to let user to have access
|
|
72
72
|
// to the app before they've a passkey correctly setup
|
|
73
|
-
if (error instanceof DOMException &&
|
|
73
|
+
if (error instanceof DOMException &&
|
|
74
|
+
error.name === 'NotAllowedError') {
|
|
74
75
|
logger.logger.error('User cancelled the passkey creation.', error);
|
|
75
76
|
return;
|
|
76
77
|
}
|
|
77
78
|
reject(error);
|
|
78
79
|
});
|
|
79
80
|
});
|
|
80
|
-
});
|
|
81
|
-
const returnEmbeddedWallet = (jwt, embeddedWalletVerifiedCredential) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
81
|
+
}), [internalEvents, internalSetShowAuthFlow, setView]);
|
|
82
|
+
const returnEmbeddedWallet = React.useCallback((jwt, embeddedWalletVerifiedCredential) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
82
83
|
var _a, _b, _c, _d;
|
|
83
84
|
const decodedJwt = decodeJwt.decodeJwt(jwt);
|
|
84
85
|
const turnkeyWallet = findTurnkeyWallet.findTurnkeyWallet(walletConnectorOptions);
|
|
@@ -109,7 +110,7 @@ const useEmbeddedWallet = () => {
|
|
|
109
110
|
id: embeddedWalletVerifiedCredential.id,
|
|
110
111
|
};
|
|
111
112
|
return Promise.resolve(passkeyWallet);
|
|
112
|
-
});
|
|
113
|
+
}), [setPrimaryWalletId, walletConnectorOptions]);
|
|
113
114
|
const createEmbeddedWallet = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
114
115
|
var _e, _f, _g;
|
|
115
116
|
const jwt = (_e = getAuthToken.getAuthToken()) !== null && _e !== void 0 ? _e : onboardingOnlyJwt;
|
|
@@ -132,14 +133,21 @@ const useEmbeddedWallet = () => {
|
|
|
132
133
|
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt);
|
|
133
134
|
// if user logged in with MM for example, just continue the flow
|
|
134
135
|
if (!embeddedWalletVerifiedCredential) {
|
|
136
|
+
// user logged in through an email linked to a third party wallet
|
|
137
|
+
// at this point primary wallet is still undefined and we need to set it
|
|
138
|
+
if (!primaryWallet) {
|
|
139
|
+
setPrimaryWalletId(userWaletsCredentials[0].id);
|
|
140
|
+
}
|
|
135
141
|
return Promise.resolve(primaryWallet);
|
|
136
142
|
}
|
|
137
143
|
// if user already has embedded wallet, returns it
|
|
138
144
|
return returnEmbeddedWallet(jwt, embeddedWalletVerifiedCredential);
|
|
139
145
|
}), [
|
|
140
|
-
internalSetShowAuthFlow,
|
|
141
146
|
onboardingOnlyJwt,
|
|
142
147
|
projectSettings,
|
|
148
|
+
internalSetShowAuthFlow,
|
|
149
|
+
returnEmbeddedWallet,
|
|
150
|
+
startEmbeddedWalletCreationFlow,
|
|
143
151
|
startPregeneratedWalletCreationFlow,
|
|
144
152
|
primaryWallet,
|
|
145
153
|
]);
|
|
@@ -57,7 +57,7 @@ const useEmbeddedWallet = () => {
|
|
|
57
57
|
internalSetShowAuthFlow,
|
|
58
58
|
internalEvents,
|
|
59
59
|
]);
|
|
60
|
-
const startEmbeddedWalletCreationFlow = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
|
+
const startEmbeddedWalletCreationFlow = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
61
|
internalSetShowAuthFlow(true);
|
|
62
62
|
setView('passkey-intro');
|
|
63
63
|
return new Promise((resolve, reject) => {
|
|
@@ -66,15 +66,16 @@ const useEmbeddedWallet = () => {
|
|
|
66
66
|
// when creating a passkey, if user cancels the passkey modal more than once
|
|
67
67
|
// it will throw this DOMException, but we don't want to let user to have access
|
|
68
68
|
// to the app before they've a passkey correctly setup
|
|
69
|
-
if (error instanceof DOMException &&
|
|
69
|
+
if (error instanceof DOMException &&
|
|
70
|
+
error.name === 'NotAllowedError') {
|
|
70
71
|
logger.error('User cancelled the passkey creation.', error);
|
|
71
72
|
return;
|
|
72
73
|
}
|
|
73
74
|
reject(error);
|
|
74
75
|
});
|
|
75
76
|
});
|
|
76
|
-
});
|
|
77
|
-
const returnEmbeddedWallet = (jwt, embeddedWalletVerifiedCredential) => __awaiter(void 0, void 0, void 0, function* () {
|
|
77
|
+
}), [internalEvents, internalSetShowAuthFlow, setView]);
|
|
78
|
+
const returnEmbeddedWallet = useCallback((jwt, embeddedWalletVerifiedCredential) => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
79
|
var _a, _b, _c, _d;
|
|
79
80
|
const decodedJwt = decodeJwt(jwt);
|
|
80
81
|
const turnkeyWallet = findTurnkeyWallet(walletConnectorOptions);
|
|
@@ -105,7 +106,7 @@ const useEmbeddedWallet = () => {
|
|
|
105
106
|
id: embeddedWalletVerifiedCredential.id,
|
|
106
107
|
};
|
|
107
108
|
return Promise.resolve(passkeyWallet);
|
|
108
|
-
});
|
|
109
|
+
}), [setPrimaryWalletId, walletConnectorOptions]);
|
|
109
110
|
const createEmbeddedWallet = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
110
111
|
var _e, _f, _g;
|
|
111
112
|
const jwt = (_e = getAuthToken()) !== null && _e !== void 0 ? _e : onboardingOnlyJwt;
|
|
@@ -128,14 +129,21 @@ const useEmbeddedWallet = () => {
|
|
|
128
129
|
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt);
|
|
129
130
|
// if user logged in with MM for example, just continue the flow
|
|
130
131
|
if (!embeddedWalletVerifiedCredential) {
|
|
132
|
+
// user logged in through an email linked to a third party wallet
|
|
133
|
+
// at this point primary wallet is still undefined and we need to set it
|
|
134
|
+
if (!primaryWallet) {
|
|
135
|
+
setPrimaryWalletId(userWaletsCredentials[0].id);
|
|
136
|
+
}
|
|
131
137
|
return Promise.resolve(primaryWallet);
|
|
132
138
|
}
|
|
133
139
|
// if user already has embedded wallet, returns it
|
|
134
140
|
return returnEmbeddedWallet(jwt, embeddedWalletVerifiedCredential);
|
|
135
141
|
}), [
|
|
136
|
-
internalSetShowAuthFlow,
|
|
137
142
|
onboardingOnlyJwt,
|
|
138
143
|
projectSettings,
|
|
144
|
+
internalSetShowAuthFlow,
|
|
145
|
+
returnEmbeddedWallet,
|
|
146
|
+
startEmbeddedWalletCreationFlow,
|
|
139
147
|
startPregeneratedWalletCreationFlow,
|
|
140
148
|
primaryWallet,
|
|
141
149
|
]);
|
|
@@ -16,8 +16,8 @@ var localStorage = require('../../constants/localStorage.cjs');
|
|
|
16
16
|
require('../../constants/colors.cjs');
|
|
17
17
|
var localStorage$1 = require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
18
18
|
require('viem');
|
|
19
|
-
var useLocalStorage = require('../../../shared/utils/hooks/useLocalStorage/useLocalStorage.cjs');
|
|
20
19
|
var useEffectOnce = require('../../../shared/utils/hooks/useEffectOnce/useEffectOnce.cjs');
|
|
20
|
+
var useLocalStorage = require('../../../shared/utils/hooks/useLocalStorage/useLocalStorage.cjs');
|
|
21
21
|
require('../../../shared/consts/index.cjs');
|
|
22
22
|
var validators = require('../../../context/DynamicContext/validators.cjs');
|
|
23
23
|
|
|
@@ -61,6 +61,7 @@ const useFetchProjectSettings = ({ authToken, environmentId, maxRetries = 2, dyn
|
|
|
61
61
|
const serializedDynamicContextProps = Object.assign(Object.assign({}, updatedDynamicProps), { settings: Object.assign(Object.assign({}, updatedDynamicProps.settings), { eventsCallbacks: serializedEventsCallbacks, walletConnectors: serializedWalletConnectors }) });
|
|
62
62
|
api.sendDynamicProps(environmentId, {
|
|
63
63
|
dynamicContextProps: serializedDynamicContextProps,
|
|
64
|
+
frameworkSettings: getFrameworkSettings(),
|
|
64
65
|
});
|
|
65
66
|
api.fetchProjectSettings(environmentId)
|
|
66
67
|
.then((response) => {
|
|
@@ -123,6 +124,19 @@ const serializeWalletConnectors = (walletConnectors) => {
|
|
|
123
124
|
return undefined;
|
|
124
125
|
}
|
|
125
126
|
};
|
|
127
|
+
const getFrameworkSettings = () => {
|
|
128
|
+
var _a;
|
|
129
|
+
return ({
|
|
130
|
+
nextJs: {
|
|
131
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
132
|
+
// @ts-ignore
|
|
133
|
+
version: (_a = window.next) === null || _a === void 0 ? void 0 : _a.version,
|
|
134
|
+
},
|
|
135
|
+
react: {
|
|
136
|
+
version: React.version,
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
};
|
|
126
140
|
|
|
127
141
|
exports.serializeEventsCallbacks = serializeEventsCallbacks;
|
|
128
142
|
exports.serializeWalletConnectors = serializeWalletConnectors;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState, useEffect, useMemo } from 'react';
|
|
1
|
+
import { useState, useEffect, useMemo, version } from 'react';
|
|
2
2
|
import { DynamicError } from '@dynamic-labs/utils';
|
|
3
3
|
import { sendDynamicProps, fetchProjectSettings } from '../../../data/api.js';
|
|
4
4
|
import '@dynamic-labs/sdk-api';
|
|
@@ -12,8 +12,8 @@ import { PROJECT_SETTINGS_STORAGE_KEY, CONNECTED_WALLETS_INFO } from '../../cons
|
|
|
12
12
|
import '../../constants/colors.js';
|
|
13
13
|
import { LocalStorage } from '../../../shared/utils/classes/storage/localStorage.js';
|
|
14
14
|
import 'viem';
|
|
15
|
-
import { useLocalStorage } from '../../../shared/utils/hooks/useLocalStorage/useLocalStorage.js';
|
|
16
15
|
import { useEffectOnce } from '../../../shared/utils/hooks/useEffectOnce/useEffectOnce.js';
|
|
16
|
+
import { useLocalStorage } from '../../../shared/utils/hooks/useLocalStorage/useLocalStorage.js';
|
|
17
17
|
import '../../../shared/consts/index.js';
|
|
18
18
|
import { validateLocalStorageExpiry } from '../../../context/DynamicContext/validators.js';
|
|
19
19
|
|
|
@@ -57,6 +57,7 @@ const useFetchProjectSettings = ({ authToken, environmentId, maxRetries = 2, dyn
|
|
|
57
57
|
const serializedDynamicContextProps = Object.assign(Object.assign({}, updatedDynamicProps), { settings: Object.assign(Object.assign({}, updatedDynamicProps.settings), { eventsCallbacks: serializedEventsCallbacks, walletConnectors: serializedWalletConnectors }) });
|
|
58
58
|
sendDynamicProps(environmentId, {
|
|
59
59
|
dynamicContextProps: serializedDynamicContextProps,
|
|
60
|
+
frameworkSettings: getFrameworkSettings(),
|
|
60
61
|
});
|
|
61
62
|
fetchProjectSettings(environmentId)
|
|
62
63
|
.then((response) => {
|
|
@@ -119,5 +120,18 @@ const serializeWalletConnectors = (walletConnectors) => {
|
|
|
119
120
|
return undefined;
|
|
120
121
|
}
|
|
121
122
|
};
|
|
123
|
+
const getFrameworkSettings = () => {
|
|
124
|
+
var _a;
|
|
125
|
+
return ({
|
|
126
|
+
nextJs: {
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
128
|
+
// @ts-ignore
|
|
129
|
+
version: (_a = window.next) === null || _a === void 0 ? void 0 : _a.version,
|
|
130
|
+
},
|
|
131
|
+
react: {
|
|
132
|
+
version,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
};
|
|
122
136
|
|
|
123
137
|
export { serializeEventsCallbacks, serializeWalletConnectors, useFetchProjectSettings };
|
|
@@ -17,10 +17,10 @@ require('../../constants/colors.cjs');
|
|
|
17
17
|
require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
18
18
|
require('viem');
|
|
19
19
|
require('../../../shared/consts/index.cjs');
|
|
20
|
-
var isSameWalletName = require('../../functions/isSameWalletName/isSameWalletName.cjs');
|
|
21
|
-
var useWalletsConnectionState = require('../useWalletsConnectionState/useWalletsConnectionState.cjs');
|
|
22
20
|
require('@dynamic-labs/multi-wallet');
|
|
23
21
|
var getWalletIdentifier = require('../../functions/getWalletIdentifier/getWalletIdentifier.cjs');
|
|
22
|
+
var isSameWalletName = require('../../functions/isSameWalletName/isSameWalletName.cjs');
|
|
23
|
+
var useWalletsConnectionState = require('../useWalletsConnectionState/useWalletsConnectionState.cjs');
|
|
24
24
|
var reconnectSocialWallet = require('./reconnectSocialWallet.cjs');
|
|
25
25
|
var createLinkedWalletsFromWalletOptions = require('./utils/createLinkedWalletsFromWalletOptions/createLinkedWalletsFromWalletOptions.cjs');
|
|
26
26
|
var updateUserWalletsFromLinkedWallets = require('./utils/updateUserWalletsFromLinkedWallets/updateUserWalletsFromLinkedWallets.cjs');
|
|
@@ -66,14 +66,14 @@ const useWalletConnectors = ({ authMode, authToken, connectedWallets, walletConn
|
|
|
66
66
|
React.useEffect(() => walletsBasedOnAuthMode.forEach((wallet) => {
|
|
67
67
|
wallet.connector.initEventListener();
|
|
68
68
|
}), [walletsBasedOnAuthMode]);
|
|
69
|
-
const {
|
|
70
|
-
const wallets = React.useMemo(() => walletsBasedOnAuthMode.map((wallet) => (Object.assign(Object.assign({}, wallet), { connected: Boolean(
|
|
69
|
+
const { connectedWalletsMap, didConnectedStateLoad } = useWalletsConnectionState.useWalletsConnectionState(walletsBasedOnAuthMode);
|
|
70
|
+
const wallets = React.useMemo(() => walletsBasedOnAuthMode.map((wallet) => (Object.assign(Object.assign({}, wallet), { connected: Boolean(connectedWalletsMap[getWalletIdentifier.getWalletIdentifier(wallet)]) }))), [connectedWalletsMap, walletsBasedOnAuthMode]);
|
|
71
71
|
const { setUserWallets } = UserWalletsContext.useInternalUserWallets();
|
|
72
72
|
// Keep userWallets in sync whenever linkedWallets changes
|
|
73
73
|
React.useEffect(() => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
if (!didConnectedStateLoad.current)
|
|
75
|
+
return;
|
|
76
|
+
setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets.updateUserWalletsFromLinkedWallets(userWallets, wallets));
|
|
77
77
|
}, [didConnectedStateLoad, setUserWallets, wallets]);
|
|
78
78
|
const primaryWallet = React.useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
|
|
79
79
|
const secondaryWallets = React.useMemo(() => canHaveMultipleWalletsConnected
|
|
@@ -173,7 +173,7 @@ const useWalletConnectors = ({ authMode, authToken, connectedWallets, walletConn
|
|
|
173
173
|
setQrcodeUri,
|
|
174
174
|
]);
|
|
175
175
|
return {
|
|
176
|
-
didConnectedStateLoad,
|
|
176
|
+
didConnectedStateLoad: didConnectedStateLoad.current,
|
|
177
177
|
primaryWallet,
|
|
178
178
|
secondaryWallets,
|
|
179
179
|
setPrimaryWallet,
|
|
@@ -13,10 +13,10 @@ import '../../constants/colors.js';
|
|
|
13
13
|
import '../../../shared/utils/classes/storage/localStorage.js';
|
|
14
14
|
import 'viem';
|
|
15
15
|
import '../../../shared/consts/index.js';
|
|
16
|
-
import { isSameWalletName } from '../../functions/isSameWalletName/isSameWalletName.js';
|
|
17
|
-
import { useWalletsConnectionState } from '../useWalletsConnectionState/useWalletsConnectionState.js';
|
|
18
16
|
import '@dynamic-labs/multi-wallet';
|
|
19
17
|
import { getWalletIdentifier } from '../../functions/getWalletIdentifier/getWalletIdentifier.js';
|
|
18
|
+
import { isSameWalletName } from '../../functions/isSameWalletName/isSameWalletName.js';
|
|
19
|
+
import { useWalletsConnectionState } from '../useWalletsConnectionState/useWalletsConnectionState.js';
|
|
20
20
|
import { reconnectSocialWallet } from './reconnectSocialWallet.js';
|
|
21
21
|
import { createLinkedWalletsFromWalletOptions } from './utils/createLinkedWalletsFromWalletOptions/createLinkedWalletsFromWalletOptions.js';
|
|
22
22
|
import { updateUserWalletsFromLinkedWallets } from './utils/updateUserWalletsFromLinkedWallets/updateUserWalletsFromLinkedWallets.js';
|
|
@@ -62,14 +62,14 @@ const useWalletConnectors = ({ authMode, authToken, connectedWallets, walletConn
|
|
|
62
62
|
useEffect(() => walletsBasedOnAuthMode.forEach((wallet) => {
|
|
63
63
|
wallet.connector.initEventListener();
|
|
64
64
|
}), [walletsBasedOnAuthMode]);
|
|
65
|
-
const {
|
|
66
|
-
const wallets = useMemo(() => walletsBasedOnAuthMode.map((wallet) => (Object.assign(Object.assign({}, wallet), { connected: Boolean(
|
|
65
|
+
const { connectedWalletsMap, didConnectedStateLoad } = useWalletsConnectionState(walletsBasedOnAuthMode);
|
|
66
|
+
const wallets = useMemo(() => walletsBasedOnAuthMode.map((wallet) => (Object.assign(Object.assign({}, wallet), { connected: Boolean(connectedWalletsMap[getWalletIdentifier(wallet)]) }))), [connectedWalletsMap, walletsBasedOnAuthMode]);
|
|
67
67
|
const { setUserWallets } = useInternalUserWallets();
|
|
68
68
|
// Keep userWallets in sync whenever linkedWallets changes
|
|
69
69
|
useEffect(() => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
if (!didConnectedStateLoad.current)
|
|
71
|
+
return;
|
|
72
|
+
setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets(userWallets, wallets));
|
|
73
73
|
}, [didConnectedStateLoad, setUserWallets, wallets]);
|
|
74
74
|
const primaryWallet = useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
|
|
75
75
|
const secondaryWallets = useMemo(() => canHaveMultipleWalletsConnected
|
|
@@ -169,7 +169,7 @@ const useWalletConnectors = ({ authMode, authToken, connectedWallets, walletConn
|
|
|
169
169
|
setQrcodeUri,
|
|
170
170
|
]);
|
|
171
171
|
return {
|
|
172
|
-
didConnectedStateLoad,
|
|
172
|
+
didConnectedStateLoad: didConnectedStateLoad.current,
|
|
173
173
|
primaryWallet,
|
|
174
174
|
secondaryWallets,
|
|
175
175
|
setPrimaryWallet,
|
|
@@ -65,12 +65,13 @@ const useWalletEventListeners = ({ handleLogOut, multiWallet, multiWalletWidgetS
|
|
|
65
65
|
if (!primaryWallet)
|
|
66
66
|
return;
|
|
67
67
|
const [newAddress] = accounts;
|
|
68
|
-
const
|
|
69
|
-
if (authMode === 'connect-only') {
|
|
68
|
+
const changedAddress = !walletConnectorCore.isSameAddress(newAddress, primaryWallet.address, primaryWallet.chain);
|
|
69
|
+
if (changedAddress && authMode === 'connect-only') {
|
|
70
70
|
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
-
|
|
73
|
+
const newWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
74
|
+
if (!changedAddress) {
|
|
74
75
|
setMultiWalletWidgetState('idle');
|
|
75
76
|
}
|
|
76
77
|
else if (!multiWallet) {
|
|
@@ -61,12 +61,13 @@ const useWalletEventListeners = ({ handleLogOut, multiWallet, multiWalletWidgetS
|
|
|
61
61
|
if (!primaryWallet)
|
|
62
62
|
return;
|
|
63
63
|
const [newAddress] = accounts;
|
|
64
|
-
const
|
|
65
|
-
if (authMode === 'connect-only') {
|
|
64
|
+
const changedAddress = !isSameAddress(newAddress, primaryWallet.address, primaryWallet.chain);
|
|
65
|
+
if (changedAddress && authMode === 'connect-only') {
|
|
66
66
|
refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
|
-
|
|
69
|
+
const newWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
|
|
70
|
+
if (!changedAddress) {
|
|
70
71
|
setMultiWalletWidgetState('idle');
|
|
71
72
|
}
|
|
72
73
|
else if (!multiWallet) {
|