@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.
Files changed (53) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +11 -11
  5. package/src/index.cjs +2 -0
  6. package/src/index.d.ts +1 -0
  7. package/src/index.js +1 -0
  8. package/src/lib/context/DynamicContext/DynamicContext.cjs +3 -2
  9. package/src/lib/context/DynamicContext/DynamicContext.js +3 -2
  10. package/src/lib/context/DynamicContext/useDynamicContext.cjs +2 -1
  11. package/src/lib/context/DynamicContext/useDynamicContext.d.ts +1 -1
  12. package/src/lib/context/DynamicContext/useDynamicContext.js +2 -1
  13. package/src/lib/data/api.cjs +0 -13
  14. package/src/lib/data/api.d.ts +1 -2
  15. package/src/lib/data/api.js +2 -14
  16. package/src/lib/shared/consts/index.cjs +1 -0
  17. package/src/lib/shared/consts/index.js +1 -0
  18. package/src/lib/shared/types/index.d.ts +2 -1
  19. package/src/lib/utils/functions/getVerifyArgs/getVerifyArgs.d.ts +1 -1
  20. package/src/lib/utils/functions/index.d.ts +1 -0
  21. package/src/lib/utils/functions/isEmailValid/index.d.ts +1 -0
  22. package/src/lib/utils/functions/isEmailValid/isEmailValid.cjs +8 -0
  23. package/src/lib/utils/functions/isEmailValid/isEmailValid.d.ts +1 -0
  24. package/src/lib/utils/functions/isEmailValid/isEmailValid.js +4 -0
  25. package/src/lib/utils/functions/isProviderEnabled/isProviderEnabled.cjs +9 -1
  26. package/src/lib/utils/functions/isProviderEnabled/isProviderEnabled.js +9 -1
  27. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +2 -0
  28. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.d.ts +1 -0
  29. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +2 -0
  30. package/src/lib/utils/hooks/useConnectWithEmailOtp/index.d.ts +1 -0
  31. package/src/lib/utils/hooks/useConnectWithEmailOtp/useConnectWithEmailOtp.cjs +150 -0
  32. package/src/lib/utils/hooks/useConnectWithEmailOtp/useConnectWithEmailOtp.d.ts +32 -0
  33. package/src/lib/utils/hooks/useConnectWithEmailOtp/useConnectWithEmailOtp.js +146 -0
  34. package/src/lib/utils/hooks/useEmailProvider/useEmailProvider.cjs +3 -3
  35. package/src/lib/utils/hooks/useEmailProvider/useEmailProvider.js +3 -3
  36. package/src/lib/utils/hooks/useProcessNetworkConfigurations/index.d.ts +1 -0
  37. package/src/lib/utils/hooks/{useFetchNetworkConfigurations/useFetchNetworkConfigurations.cjs → useProcessNetworkConfigurations/useProcessNetworkConfigurations.cjs} +53 -67
  38. package/src/lib/utils/hooks/{useFetchNetworkConfigurations/useFetchNetworkConfigurations.d.ts → useProcessNetworkConfigurations/useProcessNetworkConfigurations.d.ts} +3 -2
  39. package/src/lib/utils/hooks/{useFetchNetworkConfigurations/useFetchNetworkConfigurations.js → useProcessNetworkConfigurations/useProcessNetworkConfigurations.js} +53 -67
  40. package/src/lib/views/LoginView/sections/EmailSignInSection/LoginEmailForm.cjs +2 -3
  41. package/src/lib/views/LoginView/sections/EmailSignInSection/LoginEmailForm.d.ts +0 -1
  42. package/src/lib/views/LoginView/sections/EmailSignInSection/LoginEmailForm.js +3 -3
  43. package/src/lib/views/WalletList/WalletList.cjs +5 -8
  44. package/src/lib/views/WalletList/WalletList.js +5 -8
  45. package/src/lib/views/WalletList/data.d.ts +1 -1
  46. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.cjs +4 -1
  47. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.js +4 -1
  48. package/src/lib/utils/hooks/useFetchNetworkConfigurations/index.d.ts +0 -1
  49. /package/src/lib/utils/hooks/{useFetchNetworkConfigurations → useProcessNetworkConfigurations}/utils/index.d.ts +0 -0
  50. /package/src/lib/utils/hooks/{useFetchNetworkConfigurations → useProcessNetworkConfigurations}/utils/mergeCustomerEvmNetworksWithServerNetworks/index.d.ts +0 -0
  51. /package/src/lib/utils/hooks/{useFetchNetworkConfigurations → useProcessNetworkConfigurations}/utils/mergeCustomerEvmNetworksWithServerNetworks/mergeCustomerEvmNetworksWithServerNetworks.cjs +0 -0
  52. /package/src/lib/utils/hooks/{useFetchNetworkConfigurations → useProcessNetworkConfigurations}/utils/mergeCustomerEvmNetworksWithServerNetworks/mergeCustomerEvmNetworksWithServerNetworks.d.ts +0 -0
  53. /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
- Boolean(providers === null || providers === void 0 ? void 0 : providers.filter((provider) => (provider.provider === sdkApi.ProviderEnum.MagicLink &&
43
- Boolean(provider.providerProjectId)) ||
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
- Boolean(providers === null || providers === void 0 ? void 0 : providers.filter((provider) => (provider.provider === ProviderEnum.MagicLink &&
39
- Boolean(provider.providerProjectId)) ||
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 MAX_RETRIES = 2;
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
- if (!lsNetworksExists && !loading && retries < maxRetries) {
84
+ var _a, _b, _c, _d;
85
+ if (!lsNetworksExists && !loading && (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.networks)) {
88
86
  setLoading(true);
89
- api.fetchNetworkSettings(environmentId)
90
- .then((response) => {
91
- var _a, _b, _c, _d;
92
- if (!response)
93
- throw new utils.DynamicError('Configuration is not defined');
94
- const expiry = new Date().getTime() + 60000 * 5;
95
- const evm = response.find((configurations) => configurations.chainName === 'evm');
96
- const solana = response.find((configurations) => configurations.chainName === 'solana');
97
- const cosmos = response.find((configurations) => configurations.chainName === 'cosmos');
98
- const starknet = response.find((configurations) => configurations.chainName === 'starknet');
99
- let mergedEvmNetworks;
100
- const createNetwork = (network, parser = (input) => input) => ({
101
- blockExplorerUrls: network.blockExplorerUrls,
102
- chainId: parser(network.chainId),
103
- iconUrls: network.iconUrls,
104
- lcdUrl: network.lcdUrl,
105
- name: network.name,
106
- nativeCurrency: network.nativeCurrency,
107
- networkId: parser(network.networkId),
108
- privateCustomerRpcUrls: network.privateCustomerRpcUrls,
109
- rpcUrls: network.rpcUrls,
110
- vanityName: network.vanityName,
111
- });
112
- const cosmosNetworks = (_a = cosmos === null || cosmos === void 0 ? void 0 : cosmos.networks) === null || _a === void 0 ? void 0 : _a.map((net) => createNetwork(net, parseInt));
113
- const serverNetworks = (_b = evm === null || evm === void 0 ? void 0 : evm.networks) === null || _b === void 0 ? void 0 : _b.map((net) => createNetwork(net, parseInt));
114
- const starknetNetworks = (_c = starknet === null || starknet === void 0 ? void 0 : starknet.networks) === null || _c === void 0 ? void 0 : _c.map((net) => createNetwork(net));
115
- const solanaNetworks = (_d = solana === null || solana === void 0 ? void 0 : solana.networks) === null || _d === void 0 ? void 0 : _d.map((net) => createNetwork(net));
116
- if (!serverNetworks && (customerEvmNetworks === null || customerEvmNetworks === void 0 ? void 0 : customerEvmNetworks.length)) {
117
- mergedEvmNetworks = customerEvmNetworks;
118
- }
119
- if (!customerEvmNetworks && (serverNetworks === null || serverNetworks === void 0 ? void 0 : serverNetworks.length)) {
120
- mergedEvmNetworks = serverNetworks;
121
- }
122
- if (serverNetworks !== undefined &&
123
- serverNetworks.length &&
124
- customerEvmNetworks !== undefined &&
125
- customerEvmNetworks.length) {
126
- mergedEvmNetworks = mergeCustomerEvmNetworksWithServerNetworks.mergeCustomerEvmNetworksWithServerNetworks(customerEvmNetworks, serverNetworks);
127
- }
128
- setLsNetworks({
129
- configurations: {
130
- cosmos: cosmosNetworks,
131
- evm: mergedEvmNetworks,
132
- solana: solanaNetworks,
133
- starknet: starknetNetworks,
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.useFetchNetworkConfigurations = useFetchNetworkConfigurations;
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
- maxRetries?: number;
7
+ projectSettings?: ProjectSettings;
7
8
  };
8
- export declare const useFetchNetworkConfigurations: ({ authToken, environmentId, evmNetworks: customerEvmNetworks, maxRetries, }: fetchNetworkConfigurationsProps) => {
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 MAX_RETRIES = 2;
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
- if (!lsNetworksExists && !loading && retries < maxRetries) {
80
+ var _a, _b, _c, _d;
81
+ if (!lsNetworksExists && !loading && (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.networks)) {
84
82
  setLoading(true);
85
- fetchNetworkSettings(environmentId)
86
- .then((response) => {
87
- var _a, _b, _c, _d;
88
- if (!response)
89
- throw new DynamicError('Configuration is not defined');
90
- const expiry = new Date().getTime() + 60000 * 5;
91
- const evm = response.find((configurations) => configurations.chainName === 'evm');
92
- const solana = response.find((configurations) => configurations.chainName === 'solana');
93
- const cosmos = response.find((configurations) => configurations.chainName === 'cosmos');
94
- const starknet = response.find((configurations) => configurations.chainName === 'starknet');
95
- let mergedEvmNetworks;
96
- const createNetwork = (network, parser = (input) => input) => ({
97
- blockExplorerUrls: network.blockExplorerUrls,
98
- chainId: parser(network.chainId),
99
- iconUrls: network.iconUrls,
100
- lcdUrl: network.lcdUrl,
101
- name: network.name,
102
- nativeCurrency: network.nativeCurrency,
103
- networkId: parser(network.networkId),
104
- privateCustomerRpcUrls: network.privateCustomerRpcUrls,
105
- rpcUrls: network.rpcUrls,
106
- vanityName: network.vanityName,
107
- });
108
- const cosmosNetworks = (_a = cosmos === null || cosmos === void 0 ? void 0 : cosmos.networks) === null || _a === void 0 ? void 0 : _a.map((net) => createNetwork(net, parseInt));
109
- const serverNetworks = (_b = evm === null || evm === void 0 ? void 0 : evm.networks) === null || _b === void 0 ? void 0 : _b.map((net) => createNetwork(net, parseInt));
110
- const starknetNetworks = (_c = starknet === null || starknet === void 0 ? void 0 : starknet.networks) === null || _c === void 0 ? void 0 : _c.map((net) => createNetwork(net));
111
- const solanaNetworks = (_d = solana === null || solana === void 0 ? void 0 : solana.networks) === null || _d === void 0 ? void 0 : _d.map((net) => createNetwork(net));
112
- if (!serverNetworks && (customerEvmNetworks === null || customerEvmNetworks === void 0 ? void 0 : customerEvmNetworks.length)) {
113
- mergedEvmNetworks = customerEvmNetworks;
114
- }
115
- if (!customerEvmNetworks && (serverNetworks === null || serverNetworks === void 0 ? void 0 : serverNetworks.length)) {
116
- mergedEvmNetworks = serverNetworks;
117
- }
118
- if (serverNetworks !== undefined &&
119
- serverNetworks.length &&
120
- customerEvmNetworks !== undefined &&
121
- customerEvmNetworks.length) {
122
- mergedEvmNetworks = mergeCustomerEvmNetworksWithServerNetworks(customerEvmNetworks, serverNetworks);
123
- }
124
- setLsNetworks({
125
- configurations: {
126
- cosmos: cosmosNetworks,
127
- evm: mergedEvmNetworks,
128
- solana: solanaNetworks,
129
- starknet: starknetNetworks,
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 { useFetchNetworkConfigurations };
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 (!EMAIL_REGEX.test(emailInput)) {
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;
@@ -1,6 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { LoginWidgetProps } from '../LoginWidget';
3
- export declare const EMAIL_REGEX: RegExp;
4
3
  interface Props extends LoginWidgetProps {
5
4
  currentEmail?: string;
6
5
  }
@@ -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 (!EMAIL_REGEX.test(emailInput)) {
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 { EMAIL_REGEX, LoginEmailForm };
152
+ export { LoginEmailForm };