@dynamic-labs/sdk-react-core 1.1.0-alpha.2 → 1.1.0-alpha.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 +24 -0
- package/package.cjs +2 -2
- package/package.js +2 -2
- package/package.json +11 -11
- package/src/index.cjs +2 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/lib/context/DynamicContext/DynamicContext.cjs +3 -2
- package/src/lib/context/DynamicContext/DynamicContext.js +3 -2
- package/src/lib/context/DynamicContext/useDynamicContext.cjs +2 -1
- package/src/lib/context/DynamicContext/useDynamicContext.d.ts +1 -1
- package/src/lib/context/DynamicContext/useDynamicContext.js +2 -1
- package/src/lib/data/api.cjs +0 -13
- package/src/lib/data/api.d.ts +1 -2
- package/src/lib/data/api.js +2 -14
- package/src/lib/shared/consts/index.cjs +1 -0
- package/src/lib/shared/consts/index.js +1 -0
- package/src/lib/shared/types/index.d.ts +2 -1
- package/src/lib/utils/functions/getVerifyArgs/getVerifyArgs.d.ts +1 -1
- package/src/lib/utils/functions/index.d.ts +1 -0
- package/src/lib/utils/functions/isEmailValid/index.d.ts +1 -0
- package/src/lib/utils/functions/isEmailValid/isEmailValid.cjs +8 -0
- package/src/lib/utils/functions/isEmailValid/isEmailValid.d.ts +1 -0
- package/src/lib/utils/functions/isEmailValid/isEmailValid.js +4 -0
- package/src/lib/utils/functions/isProviderEnabled/isProviderEnabled.cjs +9 -1
- package/src/lib/utils/functions/isProviderEnabled/isProviderEnabled.js +9 -1
- package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +2 -0
- package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.d.ts +1 -0
- package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +2 -0
- package/src/lib/utils/hooks/useConnectWithEmailOtp/index.d.ts +1 -0
- package/src/lib/utils/hooks/useConnectWithEmailOtp/useConnectWithEmailOtp.cjs +150 -0
- package/src/lib/utils/hooks/useConnectWithEmailOtp/useConnectWithEmailOtp.d.ts +32 -0
- package/src/lib/utils/hooks/useConnectWithEmailOtp/useConnectWithEmailOtp.js +146 -0
- package/src/lib/utils/hooks/useEmailProvider/useEmailProvider.cjs +3 -3
- package/src/lib/utils/hooks/useEmailProvider/useEmailProvider.js +3 -3
- package/src/lib/utils/hooks/useProcessNetworkConfigurations/index.d.ts +1 -0
- package/src/lib/utils/hooks/{useFetchNetworkConfigurations/useFetchNetworkConfigurations.cjs → useProcessNetworkConfigurations/useProcessNetworkConfigurations.cjs} +53 -67
- package/src/lib/utils/hooks/{useFetchNetworkConfigurations/useFetchNetworkConfigurations.d.ts → useProcessNetworkConfigurations/useProcessNetworkConfigurations.d.ts} +3 -2
- package/src/lib/utils/hooks/{useFetchNetworkConfigurations/useFetchNetworkConfigurations.js → useProcessNetworkConfigurations/useProcessNetworkConfigurations.js} +53 -67
- package/src/lib/views/LoginView/sections/EmailSignInSection/LoginEmailForm.cjs +2 -3
- package/src/lib/views/LoginView/sections/EmailSignInSection/LoginEmailForm.d.ts +0 -1
- package/src/lib/views/LoginView/sections/EmailSignInSection/LoginEmailForm.js +3 -3
- package/src/lib/views/WalletList/WalletList.cjs +5 -8
- package/src/lib/views/WalletList/WalletList.js +5 -8
- package/src/lib/views/WalletList/data.d.ts +1 -1
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.cjs +4 -1
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.js +4 -1
- package/src/lib/utils/hooks/useFetchNetworkConfigurations/index.d.ts +0 -1
- /package/src/lib/utils/hooks/{useFetchNetworkConfigurations → useProcessNetworkConfigurations}/utils/index.d.ts +0 -0
- /package/src/lib/utils/hooks/{useFetchNetworkConfigurations → useProcessNetworkConfigurations}/utils/mergeCustomerEvmNetworksWithServerNetworks/index.d.ts +0 -0
- /package/src/lib/utils/hooks/{useFetchNetworkConfigurations → useProcessNetworkConfigurations}/utils/mergeCustomerEvmNetworksWithServerNetworks/mergeCustomerEvmNetworksWithServerNetworks.cjs +0 -0
- /package/src/lib/utils/hooks/{useFetchNetworkConfigurations → useProcessNetworkConfigurations}/utils/mergeCustomerEvmNetworksWithServerNetworks/mergeCustomerEvmNetworksWithServerNetworks.d.ts +0 -0
- /package/src/lib/utils/hooks/{useFetchNetworkConfigurations → useProcessNetworkConfigurations}/utils/mergeCustomerEvmNetworksWithServerNetworks/mergeCustomerEvmNetworksWithServerNetworks.js +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import { isEmailOTPWalletConnector } from '@dynamic-labs/wallet-connector-core';
|
|
4
|
+
import { ProviderEnum } from '@dynamic-labs/sdk-api';
|
|
5
|
+
import { useInternalDynamicContext } from '../../../context/DynamicContext/useInternalDynamicContext.js';
|
|
6
|
+
import { useWalletItemActions } from '../useWalletItemActions/useWalletItemActions.js';
|
|
7
|
+
import { dynamicEvents } from '../../../events/dynamicEvents.js';
|
|
8
|
+
import '../../../shared/logger.js';
|
|
9
|
+
import '@dynamic-labs/iconic';
|
|
10
|
+
import 'react/jsx-runtime';
|
|
11
|
+
import '../../../context/ViewContext/ViewContext.js';
|
|
12
|
+
import '@dynamic-labs/wallet-book';
|
|
13
|
+
import '../../constants/colors.js';
|
|
14
|
+
import '../../../shared/utils/classes/storage/localStorage.js';
|
|
15
|
+
import 'viem';
|
|
16
|
+
import '@dynamic-labs/utils';
|
|
17
|
+
import '../../../shared/consts/index.js';
|
|
18
|
+
import '@dynamic-labs/multi-wallet';
|
|
19
|
+
import { isProviderEnabled } from '../../functions/isProviderEnabled/isProviderEnabled.js';
|
|
20
|
+
import { isEmailValid } from '../../functions/isEmailValid/isEmailValid.js';
|
|
21
|
+
import { createEmailVerification, signInWithEmailVerification, getEmailProvider } from '../../../data/api.js';
|
|
22
|
+
import { useCreateUserProfileByJWTCallback } from '../useCreateUserProfileByJWTCallback/useCreateUserProfileByJWTCallback.js';
|
|
23
|
+
|
|
24
|
+
const mapEmailProviderToProviderEnum = {
|
|
25
|
+
dynamic: ProviderEnum.Dynamic,
|
|
26
|
+
emailOnly: ProviderEnum.EmailOnly,
|
|
27
|
+
magicLink: ProviderEnum.MagicLink,
|
|
28
|
+
};
|
|
29
|
+
const allSupportedProviders = Object.values(mapEmailProviderToProviderEnum);
|
|
30
|
+
/**
|
|
31
|
+
* Hook to connect and verify an email using a one-time password (OTP) with specified email providers.
|
|
32
|
+
*
|
|
33
|
+
* @param props - The properties for the hook. Includes an optional 'provider' to specify the email provider.
|
|
34
|
+
* @returns An object containing two functions:
|
|
35
|
+
* - connectWithEmail: A function to initiate the OTP process with the provided email.
|
|
36
|
+
* - verifyOneTimePassword: A function to verify the provided OTP.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* const { connectWithEmail, verifyOneTimePassword } = useConnectWithEmailOtp({ provider: ProviderEnum.MagicLink });
|
|
40
|
+
*
|
|
41
|
+
* // To initiate the OTP process
|
|
42
|
+
* connectWithEmail('user@example.com').then(() => {
|
|
43
|
+
* // OTP sent to the email
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* // To verify the OTP
|
|
47
|
+
* verifyOneTimePassword('123456').then(() => {
|
|
48
|
+
* // OTP verification successful
|
|
49
|
+
* }).catch((error) => {
|
|
50
|
+
* // Error handling
|
|
51
|
+
* });
|
|
52
|
+
*/
|
|
53
|
+
const useConnectWithEmailOtp = ({ provider, } = {}) => {
|
|
54
|
+
const { walletConnectorOptions, environmentId, projectSettings, setCallback, } = useInternalDynamicContext();
|
|
55
|
+
const { createUserProfileByJWT } = useCreateUserProfileByJWTCallback();
|
|
56
|
+
const { handleInstalledExtensionClick } = useWalletItemActions();
|
|
57
|
+
const lastVerificationHandlerRef = useRef(null);
|
|
58
|
+
const providers = (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) || [];
|
|
59
|
+
const emailOtpWalletConnector = walletConnectorOptions
|
|
60
|
+
.map(({ walletConnector }) => walletConnector)
|
|
61
|
+
.find(isEmailOTPWalletConnector);
|
|
62
|
+
const mapProviderToEnabled = {
|
|
63
|
+
dynamic: isProviderEnabled(providers, ProviderEnum.Dynamic),
|
|
64
|
+
emailOnly: isProviderEnabled(providers, ProviderEnum.EmailOnly),
|
|
65
|
+
magicLink: isProviderEnabled(providers, ProviderEnum.MagicLink),
|
|
66
|
+
};
|
|
67
|
+
const emailHandler = (email) => __awaiter(void 0, void 0, void 0, function* () {
|
|
68
|
+
const { verificationUUID } = yield createEmailVerification({
|
|
69
|
+
email,
|
|
70
|
+
environmentId,
|
|
71
|
+
});
|
|
72
|
+
return (oneTimePassword) => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
|
+
const { jwt } = yield signInWithEmailVerification({
|
|
74
|
+
environmentId,
|
|
75
|
+
verificationToken: oneTimePassword,
|
|
76
|
+
verificationUUID,
|
|
77
|
+
});
|
|
78
|
+
yield createUserProfileByJWT(jwt);
|
|
79
|
+
return {
|
|
80
|
+
email,
|
|
81
|
+
verified: Boolean(jwt),
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
const magicHandler = (email) => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
+
if (!emailOtpWalletConnector) {
|
|
87
|
+
throw new Error('OTP wallet connector was not found');
|
|
88
|
+
}
|
|
89
|
+
emailOtpWalletConnector.setEmail(email);
|
|
90
|
+
handleInstalledExtensionClick(emailOtpWalletConnector);
|
|
91
|
+
return (oneTimePassword) => __awaiter(void 0, void 0, void 0, function* () {
|
|
92
|
+
return ({
|
|
93
|
+
email,
|
|
94
|
+
verified: yield emailOtpWalletConnector.verifyOneTimePassword(oneTimePassword),
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
const mapProviderToHandler = {
|
|
99
|
+
[ProviderEnum.Dynamic]: emailHandler,
|
|
100
|
+
[ProviderEnum.EmailOnly]: emailHandler,
|
|
101
|
+
[ProviderEnum.MagicLink]: magicHandler,
|
|
102
|
+
};
|
|
103
|
+
const getEffectiveEmailProvider = (email) => __awaiter(void 0, void 0, void 0, function* () {
|
|
104
|
+
if (provider) {
|
|
105
|
+
return provider;
|
|
106
|
+
}
|
|
107
|
+
const { emailProvider } = yield getEmailProvider({
|
|
108
|
+
email,
|
|
109
|
+
environmentId,
|
|
110
|
+
});
|
|
111
|
+
if (!allSupportedProviders.includes(emailProvider)) {
|
|
112
|
+
throw new Error('Email provider is not supported');
|
|
113
|
+
}
|
|
114
|
+
return emailProvider;
|
|
115
|
+
});
|
|
116
|
+
const connectWithEmail = (email) => __awaiter(void 0, void 0, void 0, function* () {
|
|
117
|
+
if (!isEmailValid(email)) {
|
|
118
|
+
throw new Error('Email is not valid');
|
|
119
|
+
}
|
|
120
|
+
const effectiveEmailProvider = yield getEffectiveEmailProvider(email);
|
|
121
|
+
if (!mapProviderToEnabled[effectiveEmailProvider]) {
|
|
122
|
+
throw new Error('Email provider is not enabled');
|
|
123
|
+
}
|
|
124
|
+
const verificationHandler = yield mapProviderToHandler[effectiveEmailProvider](email);
|
|
125
|
+
lastVerificationHandlerRef.current = verificationHandler;
|
|
126
|
+
});
|
|
127
|
+
const verifyOneTimePassword = (oneTimePassword) => __awaiter(void 0, void 0, void 0, function* () {
|
|
128
|
+
if (!lastVerificationHandlerRef.current) {
|
|
129
|
+
throw new Error('Verification have not started, use connectWithEmail before verifying');
|
|
130
|
+
}
|
|
131
|
+
const { email, verified } = yield lastVerificationHandlerRef.current(oneTimePassword);
|
|
132
|
+
dynamicEvents.emit('emailVerificationResult', verified, email);
|
|
133
|
+
if (verified) {
|
|
134
|
+
setCallback('authSuccess');
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
throw new Error('Email verification failed');
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
return {
|
|
141
|
+
connectWithEmail,
|
|
142
|
+
verifyOneTimePassword,
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
export { useConnectWithEmailOtp };
|
|
@@ -22,6 +22,7 @@ require('viem');
|
|
|
22
22
|
require('@dynamic-labs/utils');
|
|
23
23
|
require('../../../shared/consts/index.cjs');
|
|
24
24
|
require('@dynamic-labs/multi-wallet');
|
|
25
|
+
var isProviderEnabled = require('../../functions/isProviderEnabled/isProviderEnabled.cjs');
|
|
25
26
|
var isTurnkeyEnabled = require('../../functions/isTurnkeyEnabled/isTurnkeyEnabled.cjs');
|
|
26
27
|
|
|
27
28
|
const useEmailProvider = ({ emailWalletConnector }) => {
|
|
@@ -39,9 +40,8 @@ const useEmailProvider = ({ emailWalletConnector }) => {
|
|
|
39
40
|
// for magic, as long as there are magic credentials available, then could have an email
|
|
40
41
|
// address that is a magic address, even if magic was previously turned off in dashboard
|
|
41
42
|
const isMagicOrBloctoEnabled = isInjectedWalletProviderEnabled &&
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
(provider.enabledAt && provider.provider === sdkApi.ProviderEnum.Blocto)).length);
|
|
43
|
+
(isProviderEnabled.isProviderEnabled(providers || [], sdkApi.ProviderEnum.MagicLink) ||
|
|
44
|
+
isProviderEnabled.isProviderEnabled(providers || [], sdkApi.ProviderEnum.Blocto));
|
|
45
45
|
const handleEmailOnlyLoginSubmit = (emailInput, captchaToken) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
46
46
|
const { email, verificationUUID } = yield api.createEmailVerification({
|
|
47
47
|
captchaToken,
|
|
@@ -18,6 +18,7 @@ import 'viem';
|
|
|
18
18
|
import '@dynamic-labs/utils';
|
|
19
19
|
import '../../../shared/consts/index.js';
|
|
20
20
|
import '@dynamic-labs/multi-wallet';
|
|
21
|
+
import { isProviderEnabled } from '../../functions/isProviderEnabled/isProviderEnabled.js';
|
|
21
22
|
import { isTurnkeyEnabled } from '../../functions/isTurnkeyEnabled/isTurnkeyEnabled.js';
|
|
22
23
|
|
|
23
24
|
const useEmailProvider = ({ emailWalletConnector }) => {
|
|
@@ -35,9 +36,8 @@ const useEmailProvider = ({ emailWalletConnector }) => {
|
|
|
35
36
|
// for magic, as long as there are magic credentials available, then could have an email
|
|
36
37
|
// address that is a magic address, even if magic was previously turned off in dashboard
|
|
37
38
|
const isMagicOrBloctoEnabled = isInjectedWalletProviderEnabled &&
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
(provider.enabledAt && provider.provider === ProviderEnum.Blocto)).length);
|
|
39
|
+
(isProviderEnabled(providers || [], ProviderEnum.MagicLink) ||
|
|
40
|
+
isProviderEnabled(providers || [], ProviderEnum.Blocto));
|
|
41
41
|
const handleEmailOnlyLoginSubmit = (emailInput, captchaToken) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
42
|
const { email, verificationUUID } = yield createEmailVerification({
|
|
43
43
|
captchaToken,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useProcessNetworkConfigurations } from './useProcessNetworkConfigurations';
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
|
-
var utils = require('@dynamic-labs/utils');
|
|
7
6
|
var validators = require('../../../context/DynamicContext/validators.cjs');
|
|
8
|
-
var api = require('../../../data/api.cjs');
|
|
9
7
|
require('@dynamic-labs/sdk-api');
|
|
10
8
|
require('../../../shared/logger.cjs');
|
|
11
9
|
require('@dynamic-labs/iconic');
|
|
@@ -18,12 +16,12 @@ require('../../constants/colors.cjs');
|
|
|
18
16
|
var localStorage$1 = require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
19
17
|
require('viem');
|
|
20
18
|
var useLocalStorage = require('../../../shared/utils/hooks/useLocalStorage/useLocalStorage.cjs');
|
|
19
|
+
require('@dynamic-labs/utils');
|
|
21
20
|
require('../../../shared/consts/index.cjs');
|
|
22
21
|
var usePrevious = require('../usePrevious/usePrevious.cjs');
|
|
23
22
|
var mergeCustomerEvmNetworksWithServerNetworks = require('./utils/mergeCustomerEvmNetworksWithServerNetworks/mergeCustomerEvmNetworksWithServerNetworks.cjs');
|
|
24
23
|
|
|
25
|
-
const
|
|
26
|
-
const useFetchNetworkConfigurations = ({ authToken, environmentId, evmNetworks: customerEvmNetworks, maxRetries = MAX_RETRIES, }) => {
|
|
24
|
+
const useProcessNetworkConfigurations = ({ authToken, environmentId, evmNetworks: customerEvmNetworks, projectSettings, }) => {
|
|
27
25
|
var _a;
|
|
28
26
|
/**
|
|
29
27
|
* This is the version of the local storage object. If the version changes, the local storage object will be removed.
|
|
@@ -32,7 +30,6 @@ const useFetchNetworkConfigurations = ({ authToken, environmentId, evmNetworks:
|
|
|
32
30
|
const VERSION = 2;
|
|
33
31
|
const [lsNetworks, setLsNetworks, removeLsNetworks] = useLocalStorage.useLocalStorage(localStorage.NETWORKS_STORAGE_KEY, undefined, validators.validateLocalStorageExpiry);
|
|
34
32
|
const [loading, setLoading] = React.useState(false);
|
|
35
|
-
const [retries, setRetries] = React.useState(0);
|
|
36
33
|
const [completed, setCompleted] = React.useState(false);
|
|
37
34
|
const [lsNetworksExists, setlsNetworksExists] = React.useState(Boolean(lsNetworks === null || lsNetworks === void 0 ? void 0 : lsNetworks.configurations) && (lsNetworks === null || lsNetworks === void 0 ? void 0 : lsNetworks.version) === VERSION);
|
|
38
35
|
// Stringify the objects for easy comparison
|
|
@@ -84,76 +81,65 @@ const useFetchNetworkConfigurations = ({ authToken, environmentId, evmNetworks:
|
|
|
84
81
|
handleRemoveLsNetworks,
|
|
85
82
|
]);
|
|
86
83
|
React.useEffect(() => {
|
|
87
|
-
|
|
84
|
+
var _a, _b, _c, _d;
|
|
85
|
+
if (!lsNetworksExists && !loading && (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.networks)) {
|
|
88
86
|
setLoading(true);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
},
|
|
135
|
-
environmentId,
|
|
136
|
-
expiry,
|
|
137
|
-
version: VERSION,
|
|
138
|
-
});
|
|
139
|
-
setlsNetworksExists(true);
|
|
140
|
-
})
|
|
141
|
-
.catch((e) => {
|
|
142
|
-
setRetries((currentRetries) => currentRetries + 1);
|
|
143
|
-
})
|
|
144
|
-
.finally(() => {
|
|
145
|
-
setLoading(false);
|
|
87
|
+
const { networks } = projectSettings;
|
|
88
|
+
const expiry = new Date().getTime() + 60000 * 5;
|
|
89
|
+
const evm = networks.find((configurations) => configurations.chainName === 'evm');
|
|
90
|
+
const solana = networks.find((configurations) => configurations.chainName === 'solana');
|
|
91
|
+
const cosmos = networks.find((configurations) => configurations.chainName === 'cosmos');
|
|
92
|
+
const starknet = networks.find((configurations) => configurations.chainName === 'starknet');
|
|
93
|
+
let mergedEvmNetworks;
|
|
94
|
+
const createNetwork = (network, parser = (input) => input) => ({
|
|
95
|
+
blockExplorerUrls: network.blockExplorerUrls,
|
|
96
|
+
chainId: parser(network.chainId),
|
|
97
|
+
iconUrls: network.iconUrls,
|
|
98
|
+
lcdUrl: network.lcdUrl,
|
|
99
|
+
name: network.name,
|
|
100
|
+
nativeCurrency: network.nativeCurrency,
|
|
101
|
+
networkId: parser(network.networkId),
|
|
102
|
+
privateCustomerRpcUrls: network.privateCustomerRpcUrls,
|
|
103
|
+
rpcUrls: network.rpcUrls,
|
|
104
|
+
vanityName: network.vanityName,
|
|
105
|
+
});
|
|
106
|
+
const cosmosNetworks = (_a = cosmos === null || cosmos === void 0 ? void 0 : cosmos.networks) === null || _a === void 0 ? void 0 : _a.map((net) => createNetwork(net, parseInt));
|
|
107
|
+
const serverNetworks = (_b = evm === null || evm === void 0 ? void 0 : evm.networks) === null || _b === void 0 ? void 0 : _b.map((net) => createNetwork(net, parseInt));
|
|
108
|
+
const starknetNetworks = (_c = starknet === null || starknet === void 0 ? void 0 : starknet.networks) === null || _c === void 0 ? void 0 : _c.map((net) => createNetwork(net));
|
|
109
|
+
const solanaNetworks = (_d = solana === null || solana === void 0 ? void 0 : solana.networks) === null || _d === void 0 ? void 0 : _d.map((net) => createNetwork(net));
|
|
110
|
+
if (!serverNetworks && (customerEvmNetworks === null || customerEvmNetworks === void 0 ? void 0 : customerEvmNetworks.length)) {
|
|
111
|
+
mergedEvmNetworks = customerEvmNetworks;
|
|
112
|
+
}
|
|
113
|
+
if (!customerEvmNetworks && (serverNetworks === null || serverNetworks === void 0 ? void 0 : serverNetworks.length)) {
|
|
114
|
+
mergedEvmNetworks = serverNetworks;
|
|
115
|
+
}
|
|
116
|
+
if (serverNetworks !== undefined &&
|
|
117
|
+
serverNetworks.length &&
|
|
118
|
+
customerEvmNetworks !== undefined &&
|
|
119
|
+
customerEvmNetworks.length) {
|
|
120
|
+
mergedEvmNetworks = mergeCustomerEvmNetworksWithServerNetworks.mergeCustomerEvmNetworksWithServerNetworks(customerEvmNetworks, serverNetworks);
|
|
121
|
+
}
|
|
122
|
+
setLsNetworks({
|
|
123
|
+
configurations: {
|
|
124
|
+
cosmos: cosmosNetworks,
|
|
125
|
+
evm: mergedEvmNetworks,
|
|
126
|
+
solana: solanaNetworks,
|
|
127
|
+
starknet: starknetNetworks,
|
|
128
|
+
},
|
|
129
|
+
environmentId,
|
|
130
|
+
expiry,
|
|
131
|
+
version: VERSION,
|
|
146
132
|
});
|
|
133
|
+
setlsNetworksExists(true);
|
|
134
|
+
setLoading(false);
|
|
147
135
|
}
|
|
148
136
|
}, [
|
|
149
|
-
authToken,
|
|
150
137
|
environmentId,
|
|
151
138
|
loading,
|
|
152
139
|
customerEvmNetworks,
|
|
153
140
|
lsNetworksExists,
|
|
154
|
-
maxRetries,
|
|
155
|
-
retries,
|
|
156
141
|
setLsNetworks,
|
|
142
|
+
projectSettings,
|
|
157
143
|
]);
|
|
158
144
|
return {
|
|
159
145
|
configurations: lsNetworks === null || lsNetworks === void 0 ? void 0 : lsNetworks.configurations,
|
|
@@ -161,4 +147,4 @@ const useFetchNetworkConfigurations = ({ authToken, environmentId, evmNetworks:
|
|
|
161
147
|
};
|
|
162
148
|
};
|
|
163
149
|
|
|
164
|
-
exports.
|
|
150
|
+
exports.useProcessNetworkConfigurations = useProcessNetworkConfigurations;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { ProjectSettings } from '@dynamic-labs/sdk-api';
|
|
1
2
|
import { GenericNetwork } from '@dynamic-labs/types';
|
|
2
3
|
export type fetchNetworkConfigurationsProps = {
|
|
3
4
|
authToken: string | undefined;
|
|
4
5
|
environmentId: string;
|
|
5
6
|
evmNetworks?: GenericNetwork[];
|
|
6
|
-
|
|
7
|
+
projectSettings?: ProjectSettings;
|
|
7
8
|
};
|
|
8
|
-
export declare const
|
|
9
|
+
export declare const useProcessNetworkConfigurations: ({ authToken, environmentId, evmNetworks: customerEvmNetworks, projectSettings, }: fetchNetworkConfigurationsProps) => {
|
|
9
10
|
configurations: import("@dynamic-labs/types").NetworkConfigurationMap | undefined;
|
|
10
11
|
handleRemoveLsNetworks: () => void;
|
|
11
12
|
};
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { useState, useCallback, useEffect } from 'react';
|
|
2
|
-
import { DynamicError } from '@dynamic-labs/utils';
|
|
3
2
|
import { validateLocalStorageExpiry } from '../../../context/DynamicContext/validators.js';
|
|
4
|
-
import { fetchNetworkSettings } from '../../../data/api.js';
|
|
5
3
|
import '@dynamic-labs/sdk-api';
|
|
6
4
|
import '../../../shared/logger.js';
|
|
7
5
|
import '@dynamic-labs/iconic';
|
|
@@ -14,12 +12,12 @@ import '../../constants/colors.js';
|
|
|
14
12
|
import { LocalStorage } from '../../../shared/utils/classes/storage/localStorage.js';
|
|
15
13
|
import 'viem';
|
|
16
14
|
import { useLocalStorage } from '../../../shared/utils/hooks/useLocalStorage/useLocalStorage.js';
|
|
15
|
+
import '@dynamic-labs/utils';
|
|
17
16
|
import '../../../shared/consts/index.js';
|
|
18
17
|
import { usePrevious } from '../usePrevious/usePrevious.js';
|
|
19
18
|
import { mergeCustomerEvmNetworksWithServerNetworks } from './utils/mergeCustomerEvmNetworksWithServerNetworks/mergeCustomerEvmNetworksWithServerNetworks.js';
|
|
20
19
|
|
|
21
|
-
const
|
|
22
|
-
const useFetchNetworkConfigurations = ({ authToken, environmentId, evmNetworks: customerEvmNetworks, maxRetries = MAX_RETRIES, }) => {
|
|
20
|
+
const useProcessNetworkConfigurations = ({ authToken, environmentId, evmNetworks: customerEvmNetworks, projectSettings, }) => {
|
|
23
21
|
var _a;
|
|
24
22
|
/**
|
|
25
23
|
* This is the version of the local storage object. If the version changes, the local storage object will be removed.
|
|
@@ -28,7 +26,6 @@ const useFetchNetworkConfigurations = ({ authToken, environmentId, evmNetworks:
|
|
|
28
26
|
const VERSION = 2;
|
|
29
27
|
const [lsNetworks, setLsNetworks, removeLsNetworks] = useLocalStorage(NETWORKS_STORAGE_KEY, undefined, validateLocalStorageExpiry);
|
|
30
28
|
const [loading, setLoading] = useState(false);
|
|
31
|
-
const [retries, setRetries] = useState(0);
|
|
32
29
|
const [completed, setCompleted] = useState(false);
|
|
33
30
|
const [lsNetworksExists, setlsNetworksExists] = useState(Boolean(lsNetworks === null || lsNetworks === void 0 ? void 0 : lsNetworks.configurations) && (lsNetworks === null || lsNetworks === void 0 ? void 0 : lsNetworks.version) === VERSION);
|
|
34
31
|
// Stringify the objects for easy comparison
|
|
@@ -80,76 +77,65 @@ const useFetchNetworkConfigurations = ({ authToken, environmentId, evmNetworks:
|
|
|
80
77
|
handleRemoveLsNetworks,
|
|
81
78
|
]);
|
|
82
79
|
useEffect(() => {
|
|
83
|
-
|
|
80
|
+
var _a, _b, _c, _d;
|
|
81
|
+
if (!lsNetworksExists && !loading && (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.networks)) {
|
|
84
82
|
setLoading(true);
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
},
|
|
131
|
-
environmentId,
|
|
132
|
-
expiry,
|
|
133
|
-
version: VERSION,
|
|
134
|
-
});
|
|
135
|
-
setlsNetworksExists(true);
|
|
136
|
-
})
|
|
137
|
-
.catch((e) => {
|
|
138
|
-
setRetries((currentRetries) => currentRetries + 1);
|
|
139
|
-
})
|
|
140
|
-
.finally(() => {
|
|
141
|
-
setLoading(false);
|
|
83
|
+
const { networks } = projectSettings;
|
|
84
|
+
const expiry = new Date().getTime() + 60000 * 5;
|
|
85
|
+
const evm = networks.find((configurations) => configurations.chainName === 'evm');
|
|
86
|
+
const solana = networks.find((configurations) => configurations.chainName === 'solana');
|
|
87
|
+
const cosmos = networks.find((configurations) => configurations.chainName === 'cosmos');
|
|
88
|
+
const starknet = networks.find((configurations) => configurations.chainName === 'starknet');
|
|
89
|
+
let mergedEvmNetworks;
|
|
90
|
+
const createNetwork = (network, parser = (input) => input) => ({
|
|
91
|
+
blockExplorerUrls: network.blockExplorerUrls,
|
|
92
|
+
chainId: parser(network.chainId),
|
|
93
|
+
iconUrls: network.iconUrls,
|
|
94
|
+
lcdUrl: network.lcdUrl,
|
|
95
|
+
name: network.name,
|
|
96
|
+
nativeCurrency: network.nativeCurrency,
|
|
97
|
+
networkId: parser(network.networkId),
|
|
98
|
+
privateCustomerRpcUrls: network.privateCustomerRpcUrls,
|
|
99
|
+
rpcUrls: network.rpcUrls,
|
|
100
|
+
vanityName: network.vanityName,
|
|
101
|
+
});
|
|
102
|
+
const cosmosNetworks = (_a = cosmos === null || cosmos === void 0 ? void 0 : cosmos.networks) === null || _a === void 0 ? void 0 : _a.map((net) => createNetwork(net, parseInt));
|
|
103
|
+
const serverNetworks = (_b = evm === null || evm === void 0 ? void 0 : evm.networks) === null || _b === void 0 ? void 0 : _b.map((net) => createNetwork(net, parseInt));
|
|
104
|
+
const starknetNetworks = (_c = starknet === null || starknet === void 0 ? void 0 : starknet.networks) === null || _c === void 0 ? void 0 : _c.map((net) => createNetwork(net));
|
|
105
|
+
const solanaNetworks = (_d = solana === null || solana === void 0 ? void 0 : solana.networks) === null || _d === void 0 ? void 0 : _d.map((net) => createNetwork(net));
|
|
106
|
+
if (!serverNetworks && (customerEvmNetworks === null || customerEvmNetworks === void 0 ? void 0 : customerEvmNetworks.length)) {
|
|
107
|
+
mergedEvmNetworks = customerEvmNetworks;
|
|
108
|
+
}
|
|
109
|
+
if (!customerEvmNetworks && (serverNetworks === null || serverNetworks === void 0 ? void 0 : serverNetworks.length)) {
|
|
110
|
+
mergedEvmNetworks = serverNetworks;
|
|
111
|
+
}
|
|
112
|
+
if (serverNetworks !== undefined &&
|
|
113
|
+
serverNetworks.length &&
|
|
114
|
+
customerEvmNetworks !== undefined &&
|
|
115
|
+
customerEvmNetworks.length) {
|
|
116
|
+
mergedEvmNetworks = mergeCustomerEvmNetworksWithServerNetworks(customerEvmNetworks, serverNetworks);
|
|
117
|
+
}
|
|
118
|
+
setLsNetworks({
|
|
119
|
+
configurations: {
|
|
120
|
+
cosmos: cosmosNetworks,
|
|
121
|
+
evm: mergedEvmNetworks,
|
|
122
|
+
solana: solanaNetworks,
|
|
123
|
+
starknet: starknetNetworks,
|
|
124
|
+
},
|
|
125
|
+
environmentId,
|
|
126
|
+
expiry,
|
|
127
|
+
version: VERSION,
|
|
142
128
|
});
|
|
129
|
+
setlsNetworksExists(true);
|
|
130
|
+
setLoading(false);
|
|
143
131
|
}
|
|
144
132
|
}, [
|
|
145
|
-
authToken,
|
|
146
133
|
environmentId,
|
|
147
134
|
loading,
|
|
148
135
|
customerEvmNetworks,
|
|
149
136
|
lsNetworksExists,
|
|
150
|
-
maxRetries,
|
|
151
|
-
retries,
|
|
152
137
|
setLsNetworks,
|
|
138
|
+
projectSettings,
|
|
153
139
|
]);
|
|
154
140
|
return {
|
|
155
141
|
configurations: lsNetworks === null || lsNetworks === void 0 ? void 0 : lsNetworks.configurations,
|
|
@@ -157,4 +143,4 @@ const useFetchNetworkConfigurations = ({ authToken, environmentId, evmNetworks:
|
|
|
157
143
|
};
|
|
158
144
|
};
|
|
159
145
|
|
|
160
|
-
export {
|
|
146
|
+
export { useProcessNetworkConfigurations };
|
|
@@ -25,6 +25,7 @@ require('viem');
|
|
|
25
25
|
require('../../../../shared/consts/index.cjs');
|
|
26
26
|
require('@dynamic-labs/multi-wallet');
|
|
27
27
|
var isEmailProviderEnabled = require('../../../../utils/functions/isEmailProviderEnabled/isEmailProviderEnabled.cjs');
|
|
28
|
+
var isEmailValid = require('../../../../utils/functions/isEmailValid/isEmailValid.cjs');
|
|
28
29
|
require('../../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
|
|
29
30
|
require('../../../../context/AccountExistsContext/AccountExistsContext.cjs');
|
|
30
31
|
require('../../../../config/ApiEndpoint.cjs');
|
|
@@ -66,7 +67,6 @@ require('../../../../components/Popper/PopperContext/PopperContext.cjs');
|
|
|
66
67
|
require('react-focus-lock');
|
|
67
68
|
var useEmailProvider = require('../../../../utils/hooks/useEmailProvider/useEmailProvider.cjs');
|
|
68
69
|
|
|
69
|
-
const EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i;
|
|
70
70
|
const LoginEmailForm = ({ isLoading: isExternalLoading, onSubmit, onSubmitError, currentEmail, }) => {
|
|
71
71
|
var _a, _b, _c;
|
|
72
72
|
const { t } = reactI18next.useTranslation();
|
|
@@ -112,7 +112,7 @@ const LoginEmailForm = ({ isLoading: isExternalLoading, onSubmit, onSubmitError,
|
|
|
112
112
|
const handleSubmit = (e) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
113
113
|
var _d;
|
|
114
114
|
e.preventDefault();
|
|
115
|
-
if (!
|
|
115
|
+
if (!isEmailValid.isEmailValid(emailInput)) {
|
|
116
116
|
setInvalidEmail(true);
|
|
117
117
|
return;
|
|
118
118
|
}
|
|
@@ -153,5 +153,4 @@ const LoginEmailForm = ({ isLoading: isExternalLoading, onSubmit, onSubmitError,
|
|
|
153
153
|
}, children: "Continue" }))] }));
|
|
154
154
|
};
|
|
155
155
|
|
|
156
|
-
exports.EMAIL_REGEX = EMAIL_REGEX;
|
|
157
156
|
exports.LoginEmailForm = LoginEmailForm;
|
|
@@ -21,6 +21,7 @@ import 'viem';
|
|
|
21
21
|
import '../../../../shared/consts/index.js';
|
|
22
22
|
import '@dynamic-labs/multi-wallet';
|
|
23
23
|
import { isEmailProviderEnabled } from '../../../../utils/functions/isEmailProviderEnabled/isEmailProviderEnabled.js';
|
|
24
|
+
import { isEmailValid } from '../../../../utils/functions/isEmailValid/isEmailValid.js';
|
|
24
25
|
import '../../../../context/AccessDeniedContext/AccessDeniedContext.js';
|
|
25
26
|
import '../../../../context/AccountExistsContext/AccountExistsContext.js';
|
|
26
27
|
import '../../../../config/ApiEndpoint.js';
|
|
@@ -62,7 +63,6 @@ import '../../../../components/Popper/PopperContext/PopperContext.js';
|
|
|
62
63
|
import 'react-focus-lock';
|
|
63
64
|
import { useEmailProvider } from '../../../../utils/hooks/useEmailProvider/useEmailProvider.js';
|
|
64
65
|
|
|
65
|
-
const EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i;
|
|
66
66
|
const LoginEmailForm = ({ isLoading: isExternalLoading, onSubmit, onSubmitError, currentEmail, }) => {
|
|
67
67
|
var _a, _b, _c;
|
|
68
68
|
const { t } = useTranslation();
|
|
@@ -108,7 +108,7 @@ const LoginEmailForm = ({ isLoading: isExternalLoading, onSubmit, onSubmitError,
|
|
|
108
108
|
const handleSubmit = (e) => __awaiter(void 0, void 0, void 0, function* () {
|
|
109
109
|
var _d;
|
|
110
110
|
e.preventDefault();
|
|
111
|
-
if (!
|
|
111
|
+
if (!isEmailValid(emailInput)) {
|
|
112
112
|
setInvalidEmail(true);
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
@@ -149,4 +149,4 @@ const LoginEmailForm = ({ isLoading: isExternalLoading, onSubmit, onSubmitError,
|
|
|
149
149
|
}, children: "Continue" }))] }));
|
|
150
150
|
};
|
|
151
151
|
|
|
152
|
-
export {
|
|
152
|
+
export { LoginEmailForm };
|